[python-astropy] 01/02: New upstream version 0.3

Ole Streicher olebole-guest at moszumanska.debian.org
Sat Nov 30 13:28:39 UTC 2013


This is an automated email from the git hooks/post-receive script.

olebole-guest pushed a commit to branch debian
in repository python-astropy.

commit dbf4b455f645a65a7fe228087ac299adadbff70a
Author: Ole Streicher <debian at liska.ath.cx>
Date:   Fri Nov 22 09:18:20 2013 +0100

    New upstream version 0.3
---
 CHANGES.rst                                        |   798 +-
 PKG-INFO                                           |     4 +-
 README.rst                                         |    24 +-
 astropy/__init__.py                                |   119 +-
 astropy/config/__init__.py                         |     2 +
 astropy/config/affiliated.py                       |     3 +-
 astropy/config/configuration.py                    |   114 +-
 astropy/config/paths.py                            |   130 +-
 .../tests/__init__.py => config/setup_package.py}  |     3 +
 astropy/config/tests/__init__.py                   |     2 +
 astropy/config/tests/test_configs.py               |    34 +-
 astropy/constants/__init__.py                      |     4 +-
 astropy/constants/cgs.py                           |     2 +
 astropy/constants/constant.py                      |    29 +-
 .../__init__.py => constants/setup_package.py}     |     3 +
 astropy/constants/si.py                            |    34 +
 astropy/constants/tests/__init__.py                |     2 +
 astropy/constants/tests/test_constant.py           |    25 +-
 astropy/convolution/__init__.py                    |    10 +
 astropy/{nddata => }/convolution/boundary_extend.c |   905 +-
 .../{nddata => }/convolution/boundary_extend.pyx   |     1 +
 astropy/{nddata => }/convolution/boundary_fill.c   |   881 +-
 astropy/{nddata => }/convolution/boundary_fill.pyx |     1 +
 astropy/{nddata => }/convolution/boundary_none.c   |  1321 +-
 astropy/{nddata => }/convolution/boundary_none.pyx |    21 +-
 astropy/{nddata => }/convolution/boundary_wrap.c   |   893 +-
 astropy/{nddata => }/convolution/boundary_wrap.pyx |     1 +
 astropy/{nddata => }/convolution/convolve.py       |    87 +-
 astropy/convolution/core.py                        |   353 +
 astropy/convolution/kernels.py                     |   936 +
 .../convolution => convolution/tests}/__init__.py  |     0
 .../convolution/tests/test_convolve.py             |    52 +-
 .../convolution/tests/test_convolve_fft.py         |   253 +-
 .../convolution/tests/test_convolve_kernels.py     |    86 +-
 .../convolution/tests/test_convolve_speeds.py      |    78 +-
 astropy/convolution/tests/test_discretize.py       |   103 +
 astropy/convolution/tests/test_kernel_class.py     |   353 +
 astropy/convolution/utils.py                       |   278 +
 astropy/coordinates/__init__.py                    |     6 +-
 astropy/coordinates/angle_lextab.py                |    11 +-
 astropy/coordinates/angle_parsetab.py              |    83 +-
 astropy/coordinates/angle_utilities.py             |   346 +-
 astropy/coordinates/angles.py                      |  1103 +-
 astropy/coordinates/builtin_systems.py             |   328 +-
 astropy/coordinates/coordsystems.py                |   348 +-
 astropy/coordinates/distances.py                   |   435 +-
 astropy/coordinates/earth_orientation.py           |    10 +-
 astropy/coordinates/errors.py                      |    77 +-
 astropy/coordinates/matching.py                    |   173 +
 astropy/coordinates/name_resolve.py                |    71 +-
 astropy/coordinates/old_builtin_systems_names.py   |   124 +
 astropy/coordinates/setup_package.py               |     5 +
 astropy/coordinates/tests/__init__.py              |     2 +
 astropy/coordinates/tests/accuracy/__init__.py     |     2 +
 .../coordinates/tests/accuracy/generate_ref_ast.py |    88 +-
 .../tests/accuracy/test_fk4_no_e_fk4.py            |    20 +-
 .../tests/accuracy/test_fk4_no_e_fk5.py            |    16 +-
 .../tests/accuracy/test_galactic_fk4.py            |    19 +-
 .../coordinates/tests/accuracy/test_icrs_fk5.py    |    19 +-
 astropy/coordinates/tests/test_angles.py           |   273 +-
 .../coordinates/tests/test_angular_separation.py   |    57 +
 astropy/coordinates/tests/test_api.py              |   513 +-
 astropy/coordinates/tests/test_arrays.py           |   267 +-
 astropy/coordinates/tests/test_distance.py         |   208 +-
 astropy/coordinates/tests/test_formatting.py       |   135 +-
 astropy/coordinates/tests/test_matching.py         |   121 +
 astropy/coordinates/tests/test_name_resolve.py     |    75 +-
 astropy/coordinates/tests/test_sphere_ang_dists.py |    89 -
 astropy/coordinates/tests/test_transformations.py  |   124 +-
 astropy/coordinates/transformations.py             |    89 +-
 astropy/cosmology/core.py                          |  1259 +-
 astropy/cosmology/funcs.py                         |    25 +-
 astropy/cosmology/parameters.py                    |   145 +-
 astropy/cosmology/tests/test_cosmology.py          |   637 +-
 astropy/extern/pytest.py                           |  5692 ++-
 .../tests/__init__.py => extern/setup_package.py}  |     2 +
 astropy/extern/six.py                              |   577 +
 astropy/io/ascii/basic.py                          |    24 +-
 astropy/io/ascii/cds.py                            |    65 +-
 astropy/io/ascii/connect.py                        |   119 +-
 astropy/io/ascii/core.py                           |   315 +-
 astropy/io/ascii/daophot.py                        |   122 +-
 astropy/io/ascii/fixedwidth.py                     |    68 +-
 astropy/io/ascii/ipac.py                           |   333 +-
 astropy/io/ascii/latex.py                          |    75 +-
 astropy/io/ascii/setup_package.py                  |     2 +-
 astropy/io/ascii/sextractor.py                     |     7 +-
 astropy/io/ascii/tests/common.py                   |    17 +-
 astropy/io/ascii/tests/t/ipac.dat                  |    10 +-
 .../io/ascii/tests/test_cds_header_from_readme.py  |   108 +-
 astropy/io/ascii/tests/test_compressed.py          |     4 -
 astropy/io/ascii/tests/test_connect.py             |    15 +-
 astropy/io/ascii/tests/test_fixedwidth.py          |    77 +-
 astropy/io/ascii/tests/test_ipac_definitions.py    |   110 +-
 astropy/io/ascii/tests/test_read.py                |   210 +-
 astropy/io/ascii/tests/test_types.py               |    20 +-
 astropy/io/ascii/tests/test_write.py               |   169 +-
 astropy/io/ascii/ui.py                             |   112 +-
 astropy/io/fits/card.py                            |    37 +-
 astropy/io/fits/column.py                          |  1108 +-
 astropy/io/fits/connect.py                         |   269 +
 astropy/io/fits/convenience.py                     |   104 +-
 astropy/io/fits/diff.py                            |    43 +-
 astropy/io/fits/file.py                            |   261 +-
 astropy/io/fits/fitsrec.py                         |   651 +-
 astropy/io/fits/hdu/base.py                        |   424 +-
 astropy/io/fits/hdu/compressed.py                  |   671 +-
 astropy/io/fits/hdu/groups.py                      |    47 +-
 astropy/io/fits/hdu/hdulist.py                     |   120 +-
 astropy/io/fits/hdu/image.py                       |    37 +-
 astropy/io/fits/hdu/nonstandard.py                 |    16 +-
 astropy/io/fits/hdu/streaming.py                   |    10 +-
 astropy/io/fits/hdu/table.py                       |   434 +-
 astropy/io/fits/header.py                          |   115 +-
 astropy/io/fits/py3compat.py                       |    16 +-
 astropy/io/fits/scripts/fitscheck.py               |     2 +-
 astropy/io/fits/setup_package.py                   |     5 -
 astropy/io/fits/src/compressionmodule.c            |    58 +-
 astropy/io/fits/src/compressionmodule.h            |     8 +
 astropy/io/fits/tests/__init__.py                  |     1 +
 astropy/io/fits/tests/test_connect.py              |   220 +
 astropy/io/fits/tests/test_core.py                 |   128 +-
 astropy/io/fits/tests/test_diff.py                 |     1 -
 astropy/io/fits/tests/test_division.py             |    13 +-
 astropy/io/fits/tests/test_groups.py               |     1 -
 astropy/io/fits/tests/test_hdulist.py              |    42 +-
 astropy/io/fits/tests/test_header.py               |   130 +-
 astropy/io/fits/tests/test_image.py                |    69 +-
 astropy/io/fits/tests/test_nonstandard.py          |    23 +
 astropy/io/fits/tests/test_table.py                |   421 +-
 astropy/io/fits/tests/test_uint.py                 |   175 +-
 astropy/io/fits/tests/test_util.py                 |    12 +-
 astropy/io/fits/util.py                            |   233 +-
 astropy/io/fits/verify.py                          |    10 +-
 astropy/io/misc/hdf5.py                            |   170 +-
 astropy/io/misc/pickle_helpers.py                  |     6 +-
 astropy/io/misc/tests/test_hdf5.py                 |    91 +-
 astropy/io/registry.py                             |   249 +-
 astropy/io/tests/test_registry.py                  |    70 +-
 astropy/io/votable/__init__.py                     |     2 +
 astropy/io/votable/connect.py                      |    38 +-
 astropy/io/votable/converters.py                   |   227 +-
 astropy/io/votable/data/VOTable.v1.3.xsd           |   572 +
 astropy/io/votable/exceptions.py                   |    76 +-
 astropy/io/votable/setup_package.py                |     5 +-
 astropy/io/votable/table.py                        |    87 +-
 astropy/io/votable/tests/converter_test.py         |    13 +-
 .../io/votable/tests/data/nonstandard_units.xml    |    13 +
 ....xml => regression.bin.tabledata.truth.1.1.xml} |     2 +-
 ....xml => regression.bin.tabledata.truth.1.3.xml} |    25 +-
 astropy/io/votable/tests/data/regression.xml       |     2 +-
 astropy/io/votable/tests/exception_test.py         |     1 -
 astropy/io/votable/tests/table_test.py             |    33 +-
 astropy/io/votable/tests/tree_test.py              |    12 +
 astropy/io/votable/tests/ucd_test.py               |     9 +-
 astropy/io/votable/tests/util_test.py              |     6 -
 astropy/io/votable/tests/vo_test.py                |   207 +-
 astropy/io/votable/tree.py                         |   498 +-
 astropy/io/votable/ucd.py                          |    26 +-
 astropy/io/votable/util.py                         |    39 +-
 astropy/io/votable/validator/__init__.py           |     2 +-
 astropy/io/votable/validator/html.py               |   176 +-
 astropy/io/votable/validator/main.py               |     5 +-
 astropy/io/votable/validator/result.py             |    83 +-
 astropy/io/votable/voexceptions.py                 |     4 +-
 astropy/io/votable/volint.py                       |     1 -
 astropy/io/votable/xmlutil.py                      |    22 +-
 astropy/logger.py                                  |    18 +-
 astropy/modeling/__init__.py                       |    13 +
 astropy/modeling/core.py                           |  1115 +
 astropy/modeling/fitting.py                        |   779 +
 astropy/modeling/functional_models.py              |  1302 +
 astropy/modeling/models.py                         |    58 +
 astropy/modeling/parameters.py                     |   519 +
 astropy/modeling/polynomial.py                     |  1307 +
 astropy/modeling/powerlaws.py                      |   256 +
 astropy/modeling/projections.py                    |   503 +
 astropy/modeling/rotations.py                      |   222 +
 astropy/{coordinates => modeling}/setup_package.py |     3 +-
 .../convolution => modeling}/tests/__init__.py     |     0
 astropy/modeling/tests/data/1904-66_AZP.fits       |   353 +
 .../{wcs/tests => modeling/tests/data}/__init__.py |     2 +
 astropy/modeling/tests/data/idcompspec.fits        |    36 +
 astropy/modeling/tests/example_models.py           |   289 +
 astropy/modeling/tests/irafutil.py                 |   262 +
 astropy/modeling/tests/test_constraints.py         |   287 +
 astropy/modeling/tests/test_fitters.py             |   227 +
 astropy/modeling/tests/test_functional_models.py   |    21 +
 astropy/modeling/tests/test_input.py               |   305 +
 astropy/modeling/tests/test_models.py              |   478 +
 astropy/modeling/tests/test_parameters.py          |   264 +
 astropy/modeling/tests/test_projections.py         |   146 +
 astropy/modeling/tests/test_rotations.py           |    44 +
 astropy/modeling/utils.py                          |    52 +
 astropy/nddata/__init__.py                         |     8 -
 astropy/nddata/convolution/make_kernel.py          |   124 -
 .../nddata/convolution/tests/test_make_kernel.py   |    25 -
 astropy/nddata/flag_collection.py                  |     3 +
 astropy/nddata/nddata.py                           |    74 +-
 astropy/nddata/nduncertainty.py                    |    27 +-
 astropy/nddata/setup_package.py                    |     2 +
 astropy/nddata/tests/test_flag_collection.py       |     5 +-
 astropy/nddata/tests/test_nddata.py                |   106 +-
 astropy/setup_helpers.py                           |   448 +-
 astropy/sphinx/conf.py                             |    37 +-
 astropy/sphinx/ext/automodapi.py                   |    23 +-
 astropy/sphinx/ext/automodsumm.py                  |    50 +-
 astropy/sphinx/ext/edit_on_github.py               |    23 +-
 astropy/sphinx/ext/tests/test_automodapi.py        |    42 +-
 .../sphinx/themes/bootstrap-astropy/layout.html    |    12 +-
 .../bootstrap-astropy/static/astropy_docs_32.png   |   Bin 4128 -> 0 bytes
 .../bootstrap-astropy/static/astropy_logo_32.png   |   Bin 0 -> 1884 bytes
 .../bootstrap-astropy/static/bootstrap-astropy.css |    60 +-
 astropy/sphinx/themes/bootstrap-astropy/theme.conf |     5 +
 astropy/stats/funcs.py                             |   804 +-
 astropy/stats/setup_package.py                     |     2 +
 astropy/stats/tests/test_funcs.py                  |   214 +-
 astropy/table/__init__.py                          |     5 +-
 .../boundary_none.c => table/_np_utils.c}          |  4174 +-
 astropy/table/_np_utils.pyx                        |   134 +
 astropy/table/data/demo_page.css                   |    96 +
 astropy/table/data/demo_table.css                  |   378 +
 astropy/table/data/jquery-1.10.2.min.js            |     6 +
 astropy/table/data/jquery-ui.css                   |  1177 +
 astropy/table/data/jquery.dataTables.min.js        |   157 +
 astropy/table/groups.py                            |   367 +
 astropy/table/jsviewer.py                          |    99 +
 astropy/table/np_utils.py                          |   543 +
 astropy/table/operations.py                        |   295 +
 astropy/table/pprint.py                            |   110 +-
 astropy/table/setup_package.py                     |    26 +
 astropy/table/table.py                             |  1240 +-
 astropy/table/tests/test_column.py                 |   152 +-
 astropy/table/tests/test_groups.py                 |   540 +
 astropy/table/tests/test_init_table.py             |   253 +-
 astropy/table/tests/test_item_access.py            |   190 +-
 astropy/table/tests/test_masked.py                 |   116 +-
 astropy/table/tests/test_np_utils.py               |    46 +
 astropy/table/tests/test_operations.py             |   729 +
 astropy/table/tests/test_pprint.py                 |   161 +-
 astropy/table/tests/test_row.py                    |    83 +-
 astropy/table/tests/test_table.py                  |   720 +-
 astropy/tests/__init__.py                          |     2 +
 astropy/tests/compat.py                            |    15 -
 astropy/tests/helper.py                            |   239 +-
 astropy/tests/pytest_plugins.py                    |   227 +-
 astropy/tests/setup_package.py                     |     5 +
 astropy/tests/test_logger.py                       |    95 +-
 astropy/tests/tests/__init__.py                    |     2 +
 astropy/tests/tests/run_after_2to3.py              |     4 +-
 astropy/tests/tests/test_imports.py                |    33 +-
 astropy/tests/tests/test_open_file_detection.py    |     6 +-
 astropy/tests/tests/test_run_tests.py              |     2 +
 astropy/tests/tests/test_skip_remote_data.py       |     2 +
 astropy/time/core.py                               |   908 +-
 astropy/time/{sofa_time.c => erfa_time.c}          |  4635 +-
 astropy/time/{sofa_time.pyx => erfa_time.pyx}      |   276 +-
 astropy/time/setup_package.py                      |    19 +-
 astropy/time/tests/test_basic.py                   |   198 +-
 astropy/time/tests/test_comparisons.py             |    50 +
 astropy/time/tests/test_delta.py                   |    74 +-
 astropy/time/tests/test_guess.py                   |     4 +-
 astropy/time/tests/test_precision.py               |   112 +
 astropy/time/tests/test_quantity_interaction.py    |   155 +
 astropy/time/tests/test_ut1.py                     |    49 +
 astropy/units/__init__.py                          |    14 +-
 astropy/units/astrophys.py                         |    61 +-
 astropy/units/cds.py                               |   190 +
 astropy/units/cgs.py                               |    30 +-
 astropy/units/core.py                              |  1333 +-
 astropy/units/equivalencies.py                     |   395 +-
 astropy/units/format/__init__.py                   |    10 +-
 astropy/units/format/cds.py                        |    81 +-
 astropy/units/format/cds_lextab.py                 |     8 +-
 astropy/units/format/cds_parsetab.py               |    68 +-
 astropy/units/format/console.py                    |    12 +-
 astropy/units/format/fits.py                       |    15 +-
 astropy/units/format/generic.py                    |    61 +-
 astropy/units/format/generic_lextab.py             |     8 +-
 astropy/units/format/generic_parsetab.py           |   111 +-
 astropy/units/format/latex.py                      |    11 +-
 astropy/units/format/unicode_format.py             |    17 +-
 astropy/units/format/utils.py                      |    53 +-
 astropy/units/format/vounit.py                     |    19 +-
 astropy/units/imperial.py                          |    65 +-
 astropy/units/physical.py                          |    29 +-
 astropy/units/quantity.py                          |  1028 +-
 astropy/units/quantity_helper.py                   |   298 +
 astropy/units/setup_package.py                     |     2 +
 astropy/units/si.py                                |   111 +-
 astropy/units/tests/test_equivalencies.py          |   473 +
 astropy/units/tests/test_format.py                 |   111 +-
 astropy/units/tests/test_physical.py               |    20 +-
 astropy/units/tests/test_quantity.py               |   388 +-
 astropy/units/tests/test_quantity_array_methods.py |   421 +
 astropy/units/tests/test_quantity_non_ufuncs.py    |    25 +
 astropy/units/tests/test_quantity_ufuncs.py        |   587 +
 astropy/units/tests/test_units.py                  |   262 +-
 astropy/units/utils.py                             |    18 +-
 astropy/utils/__init__.py                          |     3 +
 astropy/utils/compat/_argparse_py2/__init__.py     |  2363 +
 .../__init__.py}                                   |     0
 astropy/utils/compat/_gzip_32.py                   |   625 -
 .../compat/{_gzip_27.py => _gzip_py2/__init__.py}  |     0
 astropy/utils/compat/_odict_py2/__init__.py        |   190 +
 astropy/utils/compat/_subprocess_py2/__init__.py   |    38 +
 astropy/utils/compat/argparse.py                   |  2366 +-
 astropy/utils/compat/fractions.py                  |     2 +-
 astropy/utils/compat/futures/__init__.py           |    21 +
 astropy/utils/compat/futures/_base.py              |   636 +
 astropy/utils/compat/futures/process.py            |   388 +
 astropy/utils/compat/futures/thread.py             |   153 +
 astropy/utils/compat/gzip.py                       |     4 +-
 astropy/utils/compat/misc.py                       |    57 +-
 astropy/utils/compat/odict.py                      |   189 +-
 astropy/utils/compat/subprocess.py                 |    19 +
 astropy/utils/console.py                           |   199 +-
 astropy/utils/data.py                              |   279 +-
 astropy/utils/exceptions.py                        |    46 +
 astropy/utils/iers/__init__.py                     |     4 +
 astropy/utils/iers/data/ReadMe.eopc04_IAU2000      |    41 +
 astropy/utils/iers/data/ReadMe.finals2000A         |    57 +
 astropy/utils/iers/data/eopc04_IAU2000.62-now      | 18913 +++++++
 astropy/utils/iers/iers.py                         |   350 +
 astropy/utils/iers/tests/__init__.py               |     2 +
 astropy/utils/iers/tests/test_iers.py              |    76 +
 astropy/utils/metadata.py                          |   133 +
 astropy/utils/misc.py                              |   211 +-
 astropy/utils/release.py                           |    49 +-
 astropy/utils/setup_package.py                     |    15 +-
 astropy/utils/tests/__init__.py                    |     2 +
 astropy/utils/tests/odict_mapping.py               |    14 +-
 astropy/utils/tests/odict_support.py               |     5 +-
 astropy/utils/tests/test_collections.py            |     3 +
 astropy/utils/tests/test_console.py                |   119 +-
 astropy/utils/tests/test_data.py                   |    37 +-
 astropy/utils/tests/test_gzip.py                   |     8 +-
 astropy/utils/tests/test_metadata.py               |    73 +
 astropy/utils/tests/test_misc.py                   |    47 +-
 astropy/utils/tests/test_odict.py                  |    14 +-
 astropy/utils/tests/test_timer.py                  |    64 +
 astropy/utils/tests/test_xml.py                    |    37 +-
 astropy/utils/timer.py                             |   344 +
 astropy/utils/xml/__init__.py                      |     2 +
 astropy/utils/xml/check.py                         |     7 +-
 astropy/utils/xml/iterparser.py                    |    17 +-
 astropy/utils/xml/unescaper.py                     |    58 +
 astropy/utils/xml/validate.py                      |     6 +-
 astropy/utils/xml/writer.py                        |    45 +-
 astropy/version.py                                 |     8 +-
 astropy/version_helpers.py                         |    27 +-
 astropy/{config/tests => vo}/__init__.py           |     0
 astropy/{config/tests => vo/client}/__init__.py    |     0
 astropy/vo/client/async.py                         |    83 +
 astropy/vo/client/conesearch.py                    |   505 +
 .../{coordinates => vo/client}/setup_package.py    |     4 +-
 astropy/{config => vo/client}/tests/__init__.py    |     0
 astropy/vo/client/tests/data/conesearch_error1.xml |     6 +
 astropy/vo/client/tests/data/conesearch_error2.xml |     8 +
 astropy/vo/client/tests/data/conesearch_error3.xml |     9 +
 astropy/vo/client/tests/data/conesearch_error4.xml |     9 +
 astropy/vo/client/tests/test_vo.py                 |   240 +
 astropy/vo/client/vos_catalog.py                   |   464 +
 astropy/{config/tests => vo/validator}/__init__.py |     0
 astropy/vo/validator/data/conesearch_urls.txt      |    30 +
 astropy/vo/validator/inspect.py                    |   189 +
 astropy/vo/validator/setup_package.py              |     8 +
 astropy/{config => vo/validator}/tests/__init__.py |     0
 .../vo/validator/tests/data/conesearch_error.json  |     4 +
 .../validator/tests/data/conesearch_exception.json |     4 +
 .../vo/validator/tests/data/conesearch_good.json   |    91 +
 .../tests/data/conesearch_good_subset.json         |    47 +
 .../vo/validator/tests/data/conesearch_warn.json   |     4 +
 astropy/vo/validator/tests/data/listcats1.out      |    10 +
 astropy/vo/validator/tests/data/listcats2.out      |     5 +
 astropy/vo/validator/tests/data/printcat.out       |    44 +
 astropy/vo/validator/tests/data/tally.out          |     5 +
 .../data/vao_conesearch_sites_121107_subset.xml    |    92 +
 astropy/vo/validator/tests/test_validate.py        |   154 +
 astropy/vo/validator/tstquery.py                   |    73 +
 astropy/vo/validator/validate.py                   |   384 +
 astropy/wcs/_docutil.py                            |     2 +-
 astropy/wcs/docstrings.py                          |    82 +-
 .../wcs/include/{ => astropy_wcs}/astropy_wcs.h    |     0
 .../include/{ => astropy_wcs}/astropy_wcs_api.h    |     0
 astropy/wcs/include/{ => astropy_wcs}/distortion.h |     0
 .../include/{ => astropy_wcs}/distortion_wrap.h    |     0
 astropy/wcs/include/{ => astropy_wcs}/docstrings.h |    18 +-
 astropy/wcs/include/{ => astropy_wcs}/isnan.h      |     0
 astropy/wcs/include/{ => astropy_wcs}/pipeline.h   |     0
 astropy/wcs/include/{ => astropy_wcs}/pyutil.h     |     4 +-
 astropy/wcs/include/{ => astropy_wcs}/sip.h        |     0
 astropy/wcs/include/{ => astropy_wcs}/sip_wrap.h   |     0
 .../wcs/include/{ => astropy_wcs}/str_list_proxy.h |     0
 .../include/{ => astropy_wcs}/unit_list_proxy.h    |     0
 astropy/wcs/include/{ => astropy_wcs}/util.h       |     0
 astropy/wcs/include/astropy_wcs/wcsconfig.h        |    35 +
 .../include/{ => astropy_wcs}/wcslib_tabprm_wrap.h |     0
 .../include/{ => astropy_wcs}/wcslib_units_wrap.h  |     0
 .../wcs/include/{ => astropy_wcs}/wcslib_wrap.h    |     0
 .../include/{ => astropy_wcs}/wcslib_wtbarr_wrap.h |     0
 astropy/wcs/include/astropy_wcs_api.h              |   122 +-
 astropy/wcs/setup_package.py                       |    61 +-
 astropy/wcs/src/astropy_wcs.c                      |    20 +-
 astropy/wcs/src/astropy_wcs_api.c                  |     2 +-
 astropy/wcs/src/distortion.c                       |     3 +-
 astropy/wcs/src/distortion_wrap.c                  |     4 +-
 astropy/wcs/src/docstrings.c                       |   120 +-
 astropy/wcs/src/pipeline.c                         |     5 +-
 astropy/wcs/src/pyutil.c                           |   236 +-
 astropy/wcs/src/sip.c                              |    19 +-
 astropy/wcs/src/sip_wrap.c                         |     4 +-
 astropy/wcs/src/str_list_proxy.c                   |    29 +-
 astropy/wcs/src/unit_list_proxy.c                  |     4 +-
 astropy/wcs/src/util.c                             |     2 +-
 astropy/wcs/src/wcslib_tabprm_wrap.c               |     4 +-
 astropy/wcs/src/wcslib_units_wrap.c                |     4 +-
 astropy/wcs/src/wcslib_wrap.c                      |   245 +-
 astropy/wcs/src/wcslib_wtbarr_wrap.c               |     4 +-
 astropy/wcs/tests/__init__.py                      |     2 +-
 astropy/wcs/tests/data/defunct_keywords.hdr        |     1 +
 astropy/wcs/tests/data/dist.fits                   |   Bin 23040 -> 23040 bytes
 astropy/wcs/tests/data/validate.fits               |     1 +
 astropy/wcs/tests/data/validate.txt                |    16 +
 astropy/wcs/tests/test_pickle.py                   |     5 +-
 astropy/wcs/tests/test_profiling.py                |     7 +-
 astropy/wcs/tests/test_wcs.py                      |   113 +-
 astropy/wcs/tests/test_wcsprm.py                   |   108 +-
 astropy/wcs/wcs.py                                 |   696 +-
 astropy/wcs/wcslint.py                             |    19 +
 cextern/cfitsio/cfileio.c                          |   500 +-
 cextern/cfitsio/changes.txt                        |   271 +-
 cextern/cfitsio/drvrfile.c                         |    77 +-
 cextern/cfitsio/drvrmem.c                          |    50 +-
 cextern/cfitsio/editcol.c                          |    11 +-
 cextern/cfitsio/eval_f.c                           |    22 +-
 cextern/cfitsio/fitscore.c                         |   335 +-
 cextern/cfitsio/fitsio.h                           |   183 +-
 cextern/cfitsio/fitsio2.h                          |    50 +-
 cextern/cfitsio/getcolb.c                          |     9 +-
 cextern/cfitsio/getcold.c                          |     9 +-
 cextern/cfitsio/getcole.c                          |     9 +-
 cextern/cfitsio/getcoli.c                          |     9 +-
 cextern/cfitsio/getcolj.c                          |    18 +-
 cextern/cfitsio/getcolk.c                          |     9 +-
 cextern/cfitsio/getcoll.c                          |     9 +-
 cextern/cfitsio/getcolui.c                         |     9 +-
 cextern/cfitsio/getcoluj.c                         |     9 +-
 cextern/cfitsio/getcoluk.c                         |     9 +-
 cextern/cfitsio/getkey.c                           |    66 +-
 cextern/cfitsio/imcompress.c                       |  1310 +-
 cextern/cfitsio/iraffits.c                         |    18 +-
 cextern/cfitsio/longnam.h                          |     7 +-
 cextern/cfitsio/modkey.c                           |   499 +-
 cextern/cfitsio/putcolb.c                          |     9 +-
 cextern/cfitsio/putcold.c                          |     9 +-
 cextern/cfitsio/putcole.c                          |     9 +-
 cextern/cfitsio/putcoli.c                          |     9 +-
 cextern/cfitsio/putcolj.c                          |    18 +-
 cextern/cfitsio/putcolk.c                          |     9 +-
 cextern/cfitsio/putcolu.c                          |     2 +-
 cextern/cfitsio/putkey.c                           |    74 +-
 cextern/cfitsio/quantize.c                         |    56 +-
 cextern/cfitsio/region.c                           |     5 +
 cextern/cfitsio/ricecomp.c                         |   125 +-
 cextern/erfa/erfa.c                                | 22822 +++++++++
 cextern/erfa/erfa.h                                |   467 +
 cextern/sofa/sofa.c                                | 49467 -------------------
 cextern/sofa/sofa.h                                |   429 -
 cextern/sofa/sofam.h                               |   205 -
 cextern/wcslib/C/GNUmakefile                       |     8 +-
 cextern/wcslib/C/cel.c                             |     6 +-
 cextern/wcslib/C/cel.h                             |     8 +-
 cextern/wcslib/C/fitshdr.h                         |     6 +-
 cextern/wcslib/C/fitshdr.l                         |     6 +-
 cextern/wcslib/C/flexed/fitshdr.c                  |     6 +-
 cextern/wcslib/C/flexed/wcsbth.c                   |   598 +-
 cextern/wcslib/C/flexed/wcspih.c                   |   217 +-
 cextern/wcslib/C/flexed/wcsulex.c                  |     8 +-
 cextern/wcslib/C/flexed/wcsutrn.c                  |     6 +-
 cextern/wcslib/C/getwcstab.c                       |     6 +-
 cextern/wcslib/C/getwcstab.h                       |     6 +-
 cextern/wcslib/C/lin.c                             |     6 +-
 cextern/wcslib/C/lin.h                             |     8 +-
 cextern/wcslib/C/log.c                             |     6 +-
 cextern/wcslib/C/log.h                             |     8 +-
 cextern/wcslib/{ => C}/makedefs.in                 |     8 +-
 cextern/wcslib/C/prj.c                             |   343 +-
 cextern/wcslib/C/prj.h                             |    15 +-
 cextern/wcslib/C/spc.c                             |     6 +-
 cextern/wcslib/C/spc.h                             |    38 +-
 cextern/wcslib/C/sph.c                             |     6 +-
 cextern/wcslib/C/sph.h                             |     8 +-
 cextern/wcslib/C/spx.c                             |     6 +-
 cextern/wcslib/C/spx.h                             |    12 +-
 cextern/wcslib/C/tab.c                             |     6 +-
 cextern/wcslib/C/tab.h                             |     8 +-
 cextern/wcslib/C/wcs.c                             |    15 +-
 cextern/wcslib/C/wcs.h                             |    25 +-
 cextern/wcslib/C/wcsbth.l                          |    20 +-
 cextern/wcslib/{ => C}/wcsconfig.h.in              |     4 +-
 cextern/wcslib/{ => C}/wcsconfig_tests.h.in        |     4 +-
 cextern/wcslib/C/wcserr.c                          |     6 +-
 cextern/wcslib/C/wcserr.h                          |    14 +-
 cextern/wcslib/C/wcsfix.c                          |     9 +-
 cextern/wcslib/C/wcsfix.h                          |    17 +-
 cextern/wcslib/C/wcshdr.c                          |     9 +-
 cextern/wcslib/C/wcshdr.h                          |    20 +-
 cextern/wcslib/C/wcslib.h                          |     8 +-
 cextern/wcslib/C/wcsmath.h                         |     6 +-
 cextern/wcslib/C/wcspih.l                          |    17 +-
 cextern/wcslib/C/wcsprintf.c                       |    59 +-
 cextern/wcslib/C/wcsprintf.h                       |    49 +-
 cextern/wcslib/C/wcstrig.c                         |     6 +-
 cextern/wcslib/C/wcstrig.h                         |     6 +-
 cextern/wcslib/C/wcsulex.l                         |     8 +-
 cextern/wcslib/C/wcsunits.c                        |     6 +-
 cextern/wcslib/C/wcsunits.h                        |    15 +-
 cextern/wcslib/C/wcsutil.c                         |     8 +-
 cextern/wcslib/C/wcsutil.h                         |    35 +-
 cextern/wcslib/C/wcsutrn.l                         |     6 +-
 cextern/wcslib/CHANGES                             |    64 +-
 cextern/wcslib/GNUmakefile                         |     9 +-
 cextern/wcslib/INSTALL                             |     8 +-
 cextern/wcslib/README                              |     8 +-
 cextern/wcslib/THANKS                              |     5 +-
 cextern/wcslib/VALIDATION                          |    29 +-
 cextern/wcslib/configure                           |    24 +-
 cextern/wcslib/configure.ac                        |     6 +-
 cextern/wcslib/flavours                            |    14 +-
 cextern/wcslib/makedefs.in                         |     8 +-
 cextern/wcslib/wcsconfig.h.in                      |     4 +-
 cextern/wcslib/wcsconfig_f77.h.in                  |     4 +-
 cextern/wcslib/wcsconfig_tests.h.in                |     4 +-
 cextern/wcslib/wcsconfig_utils.h.in                |     4 +-
 docs/Makefile                                      |     2 +-
 docs/_static/timer_prediction_pow10.png            |   Bin 0 -> 28453 bytes
 docs/conf.py                                       |    36 +-
 docs/{configs => config}/index.rst                 |    13 +-
 docs/constants/index.rst                           |    20 +-
 docs/{nddata => convolution}/images/astropy.png    |   Bin
 docs/{nddata => convolution}/images/original.png   |   Bin
 docs/{nddata => convolution}/images/scipy.png      |   Bin
 docs/convolution/index.rst                         |   132 +
 docs/convolution/kernels.rst                       |   317 +
 docs/convolution/using.rst                         |    94 +
 docs/coordinates/angles.rst                        |   184 +-
 docs/coordinates/creating.rst                      |    97 +-
 docs/coordinates/distances.rst                     |    83 +-
 docs/coordinates/formatting.rst                    |    25 +-
 docs/coordinates/index.rst                         |   162 +-
 docs/coordinates/matching.rst                      |    38 +
 docs/coordinates/separations.rst                   |    26 +-
 docs/coordinates/sgr-example.py                    |    95 +-
 docs/coordinates/sgr-example.rst                   |   269 +-
 docs/coordinates/transforming.rst                  |    64 +-
 docs/cosmology/index.rst                           |   284 +-
 docs/credits.rst                                   |    33 +-
 docs/development/building.rst                      |    78 +
 docs/development/ccython.rst                       |    74 +
 docs/development/codeguide.rst                     |   349 +-
 docs/development/docguide.rst                      |   620 +-
 docs/development/{docguide.rst => docrules.rst}    |   115 +-
 .../{building_packaging.rst => releasing.rst}      |   621 +-
 docs/development/sphinxext.rst                     |    26 -
 docs/development/testguide.rst                     |   215 +-
 docs/development/vision.rst                        |     2 +
 docs/development/workflow/development_workflow.rst |    16 +-
 docs/development/workflow/git_links.inc            |     2 +-
 docs/development/workflow/index.rst                |     5 +-
 docs/development/workflow/this_project.inc         |     4 -
 docs/getting_started.rst                           |    28 +-
 docs/index.rst                                     |    41 +-
 docs/install.rst                                   |    76 +-
 docs/io/ascii/fixed_width_gallery.rst              |   149 +-
 docs/io/ascii/index.rst                            |    94 +-
 docs/io/ascii/read.rst                             |   191 +-
 docs/io/ascii/write.rst                            |    97 +-
 docs/io/fits/appendix/faq.rst                      |    10 +-
 docs/io/fits/appendix/history.rst                  |   127 +-
 docs/io/fits/index.rst                             |     9 +-
 docs/io/fits/usage/table.rst                       |     9 +-
 docs/io/registry.rst                               |    18 +-
 docs/io/unified.rst                                |   292 +-
 docs/io/votable/index.rst                          |    45 +-
 docs/io/votable/references.txt                     |     1 +
 docs/known_issues.rst                              |    31 +-
 docs/modeling/algorithms.rst                       |    61 +
 docs/modeling/design.rst                           |    28 +
 docs/modeling/fitting.rst                          |   112 +
 docs/modeling/index.rst                            |   194 +
 docs/modeling/models.rst                           |   193 +
 docs/modeling/new.rst                              |   239 +
 docs/modeling/parameters.rst                       |    95 +
 docs/nddata/convolution.rst                        |   112 -
 docs/nddata/index.rst                              |     9 +-
 docs/nddata/nddata.rst                             |    14 +-
 docs/overview.rst                                  |    26 +-
 docs/rtd-pip-requirements                          |     3 +-
 docs/stability.rst                                 |    50 +-
 docs/table/access_table.rst                        |    51 +-
 docs/table/construct_table.rst                     |   213 +-
 docs/table/index.rst                               |    71 +-
 docs/table/io.rst                                  |    44 +-
 docs/table/masking.rst                             |    37 +-
 docs/table/modify_table.rst                        |    63 +-
 docs/table/operations.rst                          |   748 +
 docs/time/index.rst                                |   281 +-
 docs/time/references.txt                           |     1 +
 docs/units/combining_and_defining.rst              |    25 +-
 docs/units/conversion.rst                          |    32 +-
 docs/units/decomposing_and_composing.rst           |    99 +-
 docs/units/equivalencies.rst                       |   307 +-
 docs/units/format.rst                              |   166 +-
 docs/units/index.rst                               |   146 +-
 docs/units/quantity.rst                            |   262 +-
 docs/units/standard_units.rst                      |    80 +-
 docs/utils/index.rst                               |    11 +
 docs/vo/client.rst                                 |   529 +
 docs/vo/conesearch.rst                             |   181 +
 docs/vo/images/astropy_vo_flowchart.png            |   Bin 0 -> 20057 bytes
 docs/vo/images/client_predict_search_n.png         |   Bin 0 -> 35668 bytes
 docs/vo/images/client_predict_search_t.png         |   Bin 0 -> 28522 bytes
 docs/vo/images/validator_html_1.png                |   Bin 0 -> 28152 bytes
 docs/vo/images/validator_html_2.png                |   Bin 0 -> 56370 bytes
 docs/vo/images/validator_html_3.png                |   Bin 0 -> 45038 bytes
 docs/vo/images/validator_html_4.png                |   Bin 0 -> 65404 bytes
 docs/vo/index.rst                                  |    32 +
 docs/vo/validator.rst                              |   368 +
 docs/warnings.rst                                  |     3 +-
 docs/wcs/examples/from_file.py                     |    47 +-
 docs/wcs/examples/programmatic.py                  |     3 -
 docs/wcs/index.rst                                 |    26 +
 docs/whatsnew/0.2.rst                              |    12 +-
 docs/whatsnew/0.3.rst                              |   510 +
 docs/whatsnew/index.rst                            |     1 +
 licenses/ERFA.rst                                  |    53 +
 licenses/FUTURES_LICENSE.rst                       |    21 +
 licenses/SIX_LICENSE.rst                           |    18 +
 licenses/SOFA.rst                                  |    97 -
 scripts/wcslint                                    |     5 +
 setup.cfg                                          |     4 +-
 setup.py                                           |    51 +-
 643 files changed, 113661 insertions(+), 77755 deletions(-)

diff --git a/CHANGES.rst b/CHANGES.rst
index 82561d4..249e7ff 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,3 +1,748 @@
+0.3 (2013-11-20)
+----------------
+
+New Features
+^^^^^^^^^^^^
+
+- General
+
+  - A top-level configuration item, ``unicode_output`` has been added to
+    control whether the Unicode string representation of certain
+    objects will contain Unicode characters.  For example, when
+    ``use_unicode`` is `False` (default)::
+
+        >>> from astropy import units as u
+        >>> print(unicode(u.degree))
+        deg
+
+    When ``use_unicode`` is `True`::
+
+        >>> from astropy import units as u
+        >>> print(unicode(u.degree))
+        °
+
+    See :ref:`handling-unicode` for more information. [#1441]
+
+    - `astropy.utils.misc.find_api_page` is now imported into the top-level.
+      This allows usage like ``astropy.find_api_page(astropy.units.Quantity)``.
+      [#1779]
+
+- ``astropy.convolution``
+
+  - New class-based system for generating kernels, replacing ``make_kernel``.
+    [#1255] The ``astropy.nddata.convolution`` sub-package has now been moved
+    to `astropy.convolution`. [#1451]
+
+- ``astropy.coordinates``
+
+  - Two classes `astropy.coordinates.Longitude` and `astropy.coordinates.Latitude`
+    have been added.  These are derived from the new `Angle` class and used for
+    all longitude-like (RA, azimuth, galactic L) and latitude-like coordinates
+    (Dec, elevation, galactic B) respectively.  The `Longitude` class provides
+    auto-wrapping capability and `Latitude` performs bounds checking.
+
+  - `astropy.coordinates.Distance` supports conversion to and from distance
+    modulii. [#1472]
+
+  - `astropy.coordinates.SphericalCoordinateBase` and derived classes now
+    support arrays of coordinates, enabling large speed-ups for some
+    operations on multiple coordinates at the same time. These coordinates
+    can also be indexed using standard slicing or any Numpy-compatible
+    indexing. [#1535, #1615]
+
+  - Array coordinates can be matched to other array coordinates, finding the
+    closest matches between the two sets of coordinates (see the
+    `~astropy.coordinates.matching.match_coordinates_3d` and
+    `~astropy.coordinates.matching.match_coordinates_sky` functions). [#1535]
+
+- ``astropy.cosmology``
+
+  - Added support for including massive Neutrinos in the cosmology classes. The
+    Planck (2013) cosmology has been updated to use this. [#1364]
+
+  - Calculations now use and return ``Quantity`` objects where appropriate.
+    [#1237]
+
+- ``astropy.io.ascii``
+
+  - Added support for writing IPAC format tables [#1152].
+
+- ``astropy.io.fits``
+
+  - Added initial support for table columns containing pseudo-unsigned
+    integers.  This is currently enabled by using the ``uint=True`` option when
+    opening files; any table columns with the correct BZERO value will be
+    interpreted and returned as arrays of unsigned integers. [#906]
+
+  - Upgraded vendored copy of CFITSIO to v3.35, though backwards compatibility
+    back to version v3.28 is maintained.
+
+  - Added support for reading and writing tables using the Q format for columns.
+    The Q format is identical to the P format (variable-length arrays) except
+    that it uses 64-bit integers for the data descriptors, allowing more than
+    4 GB of variable-length array data in a single table.
+
+  - Some refactoring of the table and ``FITS_rec`` modules in order to better
+    separate the details of the FITS binary and ASCII table data structures from
+    the HDU data structures that encapsulate them.  Most of these changes should
+    not be apparent to users (but see API Changes below).
+
+- ``astropy.io.votable``
+
+  - Updated to support the VOTable 1.3 draft. [#433]
+
+  - Added the ability to look up and group elements by their utype attribute.
+    [#622]
+
+  - The format of the units of a VOTable file can be specified using the
+    ``unit_format`` parameter.  Note that units are still always written out
+    using the CDS format, to ensure compatibility with the standard.
+
+- ``astropy.modeling``
+
+  - Added a new framework for representing and evaluating mathematical models
+    and for fitting data to models.  See "What's New in Astropy 0.3" in the
+    documentation for further details. [#493]
+
+- ``astropy.stats``
+
+  - Added robust statistics functions
+    `~astropy.stats.funcs.median_absolute_deviation`,
+    `~astropy.stats.funcs.biweight_location`, and
+    `~astropy.stats.funcs.biweight_midvariance`. [#621]
+
+  - Added `~astropy.stats.funcs.signal_to_noise_oir_ccd` for computing the
+    signal to noise ratio for source being observed in the optical/IR using a
+    CCD. [#870]
+
+  - Add ``axis=int`` option to `astropy.stats.funcs.sigma_clip` to allow
+    clipping along a given axis for multidimensional data. [#1083]
+
+- ``astropy.table``
+
+  - New columns can be added to a table via assignment to a non-existing
+    column by name. [#726]
+
+  - Added ``join`` function to perform a database-like join on two tables. This
+    includes support for inner, left, right, and outer joins as well as
+    metadata merging.  [#903]
+
+  - Added ``hstack`` and ``vstack`` functions to stack two or more tables.
+    [#937]
+
+  - Tables now have a ``.copy`` method and include support for ``copy`` and
+    ``deepcopy``. [#1208]
+
+  - Added support for selecting and manipulating groups within a table with
+    a database style ``group_by`` method. [#1424]
+
+  - Table ``read`` and ``write`` functions now include rudimentary support
+    reading and writing of FITS tables via the unified reading/writing
+    interface. [#591]
+
+  - The ``units`` and ``dtypes`` attributes and keyword arguments in Column,
+    MaskedColumn, Row, and Table are now deprecated in favor of the
+    single-tense ``unit`` and ``dtype``. [#1174]
+
+  - Setting a column from a Quantity now correctly sets the unit on the Column
+    object. [#732]
+
+  - Add ``remove_row`` and ``remove_rows`` to remove table rows. [#1230]
+
+  - Added a new ``Table.show_in_browser`` method that opens a web browser
+    and displays the table rendered as HTML. [#1342]
+
+  - New tables can now be instantiated using a single row from an existing
+    table. [#1417]
+
+- ``astropy.time``
+
+  - New ``Time`` objects can be instantiated from existing ``Time`` objects
+    (but with different format, scale, etc.) [#889]
+
+  - Added a ``Time.now`` classmethod that returns the current UTC time,
+    similarly to Python's ``datetime.now``. [#1061]
+
+  - Update internal time manipulations so that arithmetic with Time and
+    TimeDelta objects maintains sub-nanosecond precision over a time span
+    longer than the age of the universe. [#1189]
+
+  - Use ``astropy.utils.iers`` to provide ``delta_ut1_utc``, so that
+    automatic calculation of UT1 becomes possible. [#1145]
+
+  - Add ``datetime`` format which allows converting to and from standard
+    library ``datetime.datetime`` objects. [#860]
+
+  - Add ``plot_date`` format which allows converting to and from the date
+    representation used when plotting dates with matplotlib via the
+    ``matplotlib.pyplot.plot_date`` function. [#860]
+
+  - Add ``gps`` format (seconds since 1980-01-01 00:00:00 UTC,
+    including leap seconds) [#1164]
+
+  - Add array indexing to Time objects [#1132]
+
+  - Allow for arithmetic of multi-element and single-element Time and TimeDelta
+    objects. [#1081]
+
+  - Allow multiplication and division of TimeDelta objects by
+    constants and arrays, as well as changing sign (negation) and
+    taking the absolute value of TimeDelta objects. [#1082]
+
+  - Allow comparisons of Time and TimeDelta objects. [#1171]
+
+  - Support interaction of Time and Quantity objects that represent a time
+    interval. [#1431]
+
+- ``astropy.units``
+
+  - Added parallax equivalency for length-angle. [#985]
+
+  - Added mass-energy equivalency. [#1333]
+
+  - Added a new-style format method which will use format specifiers
+    (like ``0.03f``) in new-style format strings for the Quantity's value.
+    Specifiers which can't be applied to the value will fall back to the
+    entire string representation of the quantity. [#1383]
+
+  - Added support for complex number values in quantities. [#1384]
+
+  - Added new spectroscopic equivalencies for velocity conversions
+    (relativistic, optical, and radio conventions are supported) [#1200]
+
+  - The ``spectral`` equivalency now also handles wave number.
+
+  - The ``spectral_density`` equivalency now also accepts a Quantity for the
+    frequency or wavelength. It also handles additional flux units.
+
+  - Added Brightness Temperature (antenna gain) equivalency for conversion
+    between :math:`T_B` and flux density. [#1327]
+
+  - Added percent unit, and allowed any string containing just a number to be
+    interpreted as a scaled dimensionless unit. [#1409]
+
+  - New-style format strings can be used to set the unit output format.  For
+    example, ``"{0:latex}".format(u.km)`` will print with the latex formatter.
+    [#1462]
+
+  - The ``Unit.is_equivalent`` method can now take a tuple. In this case, the
+    method returns ``True`` if the unit is equivalent to any of the units
+    listed in the tuple. [#1521]
+
+  - `def_unit` can now take a 2-tuple of names of the form (short, long), where
+    each entry is a list.  This allows for handling strange units that might
+    have multiple short names. [#1543]
+
+  - Added ``dimensionless_angles`` equivalency, which allows conversion of any
+    power of radian to dimensionless. [#1161]
+
+  - Added the ability to enable set of units, or equivalencies that are used by
+    default.  Also provided context managers for these cases. [#1268]
+
+  - Imperial units are disabled by default. [#1593, #1662]
+
+  - Added an ``astropy.units.add_enabled_units`` context manager, which allows
+    creating a temporary context with additional units temporarily enabled in
+    the global units namespace. [#1662]
+
+  - ``Unit`` instances now have ``.si`` and ``.cgs`` properties a la
+    ``Quantity``.  These serve as shortcuts for ``Unit.to_system(cgs)[0]``
+    etc. [#1610]
+
+- ``astropy.vo``
+
+  - New package added to support Virtual Observatory Simple Cone Search query
+    and service validation. [#552]
+
+- ``astropy.wcs``
+
+  - Included a new command-line script called ``wcslint`` and accompanying API
+    for validating the WCS in a given FITS file or header. [#580]
+
+  - Upgraded included version of WCSLIB to 4.19.
+
+- ``astropy.utils``
+
+  - Added a new set of utilities in ``astropy.utils.timer`` for analyzing the
+    runtime of functions and making runtime predections for larger inputs.
+    [#743]
+
+  - ``ProgressBar`` and ``Spinner`` classes can now be used directly to return
+    generator expressions. [#771]
+
+  - Added ``astropy.utils.iers`` which allows reading in of IERS A or IERS B
+    bulletins and interpolation in UT1-UTC.
+
+  - Added a function ``astropy.utils.find_api_page``--given a class or object
+    from the ``astropy`` package, this will open that class's API documentation
+    in a web browser. [#663]
+
+  - Data download functions such as ``download_file`` now accept a
+    ``show_progress`` argument to suppress console output, and a ``timeout``
+    argument. [#865, #1258]
+
+- ``astropy.extern.six``
+
+  - Added `six <https://pypi.python.org/pypi/six/>`_ for python2/python3
+    compatibility
+
+- Astropy now uses the ERFA library instead of the IAU SOFA library for
+  fundamental time transformation routines.  The ERFA library is derived, with
+  permission, from the IAU SOFA library but is distributed under a BSD license.
+  See ``license/ERFA.rst`` for details. [#1293]
+
+- ``astropy.logger``
+
+  - The Astropy logger now no longer catches exceptions by default, and also
+    only captures warnings emitted by Astropy itself (prior to this change,
+    following an import of Astropy, any warning got re-directed through the
+    Astropy logger). Logging to the Astropy log file has also been disabled by
+    default. However, users of Astropy 0.2 will likely still see the previous
+    behavior with Astropy 0.3 for exceptions and logging to file since the
+    default configuration file installed by 0.2 set the exception logging to be
+    on by default. To get the new behavior, set the ``log_exceptions`` and
+    ``log_to_file`` configuration items to ``False`` in the ``astropy.cfg``
+    file. [#1331]
+
+API Changes
+^^^^^^^^^^^
+
+- General
+
+  - The configuration option ``utils.console.use_unicode`` has been
+    moved to the top level and renamed to ``unicode_output``.  It now
+    not only affects console widgets, such as progress bars, but also
+    controls whether calling `unicode` on certain classes will return a
+    string containing unicode characters.
+
+- ``astropy.coordinates``
+
+  - The `astropy.coordinates.Angle` class is now a subclass of
+    `astropy.units.Quantity`. This means it has all of the methods of a
+    `numpy.ndarray`. [#1006]
+
+  - The `astropy.coordinates.Distance` class is now a subclass of
+    `astropy.units.Quantity`. This means it has all of the methods of a
+    `numpy.ndarray`. [#1472]
+
+    - All angular units are now supported, not just `radian`, `degree`
+      and `hour`, but now `arcsecond` and `arcminute` as well.  The
+      object will retain its native unit, so when printing out a value
+      initially provided in hours, its `to_string()` will, by default,
+      also be expressed in hours.
+
+    - The `Angle` class now supports arrays of angles.
+
+    - To be consistent with `units.Unit`, `Angle.format` has been deprecated
+      and renamed to `Angle.to_string`.
+
+    - To be consistent with `astropy.units`, all plural forms of unit names
+      have been removed.  Therefore, the following properties of
+      `astropy.coordinates.Angle` should be renamed:
+
+      - ``radians`` -> ``radian``
+      - ``degrees`` -> ``degree``
+      - ``hours`` -> ``hour``
+
+    - Multiplication and division of two `Angle` objects used to raise
+      `NotImplementedError`.  Now they raise `TypeError`.
+
+  - The `astropy.coordinates.Angle` class no longer has a ``bounds`` attribute
+    so there is no bounds-checking or auto-wrapping at this level.  This allows
+    ``Angle`` objects to be used in arbitrary arithmetic expressions
+    (e.g. coordinate distance computation).
+
+  - The `astropy.coordinates.RA`and `astropy.coordinates.Dec` classes have
+    been removed and replaced with `astropy.coordinates.Longitude` and
+    `astropy.coordinates.Latitude` respectively.  These are now used for
+    the components of Galactic and Horizontal (Alt-Az) coordinates as well
+    instead of plain `Angle` objects.
+
+  - `astropy.coordinates.angles.rotation_matrix` and
+    `astropy.coordinates.angles.angle_axis` now take a `unit` kwarg
+    instead of `degrees` kwarg to specify the units of the angles.
+    `rotation_matrix` will also take the unit from the given `Angle`
+    object if no unit is provided.
+
+  - The ``AngularSeparation`` class has been removed.  The output of the
+    coordinates `separation()` method is now an `astropy.coordinates.Angle`.
+    [#1007]
+
+  - The coordinate classes have been renamed in a way that remove the ``Coordinates``
+    at the end of the class names.  E.g., `ICRSCoordinates` from previous versions is
+    now called `ICRS`. [#1614]
+
+  - `HorizontalCoordinates` are now named `AltAz`, to reflect more common terminology.
+
+- ``astropy.cosmology``
+
+  - The Planck (2013) cosmology will likely give slightly different (and more
+    accurate) results due to the inclusion of Neutrino masses. [#1364]
+
+  - Cosmology class properties now return ``Quantity`` objects instead of
+    simple floating-point values. [#1237]
+
+  - The names of cosmology instances are now truly optional, and are set to
+    ``None`` rather than the name of the class if the user does not provide
+    them.  [#1705]
+
+- ``astropy.io.ascii``
+
+  - In the ``read`` method of ``astropy.io.ascii``, empty column values in an
+    ASCII table are now treated as missing values instead of the previous
+    treatment as a zero-length string "".  This now corresponds to the behavior
+    of other table readers like ``numpy.genfromtxt``.  To restore the previous
+    behavior set ``fill_values=None`` in the call to ``ascii.read()``. [#919]
+
+  - The ``read`` and ``write`` methods of ``astropy.io.ascii`` now have a
+    ``format`` argument for specifying the file format.  This is the preferred
+    way to choose the format instead of the ``Reader`` and ``Writer``
+    arguments. [#961]
+
+  - The ``include_names`` and ``exclude_names`` arguments were removed from
+    the ``BaseHeader`` initializer, and now instead handled by the reader and
+    writer classes directly. [#1350]
+
+  - Allow numeric and otherwise unusual column names when reading a table
+    where the ``format`` argument is specified, but other format details such
+    as the delimiter or quote character are being guessed. [#1692]
+
+  - When reading an ASCII table using the ``Table.read()`` method, the default
+    has changed from ``guess=False`` to ``guess=True`` to allow auto-detection
+    of file format.  This matches the default behavior of ``ascii.read()``.
+
+- ``astropy.io.fits``
+
+  - The ``astropy.io.fits.new_table`` function is marked "pending deprecation".
+    This does not mean it will be removed outright or that its functionality
+    has changed.  It will likely be replaced in the future for a function with
+    similar, if not subtly different functionality.  A better, if not slightly
+    more verbose approach is to use ``pyfits.FITS_rec.from_columns`` to create
+    a new ``FITS_rec`` table--this has the same interface as
+    ``pyfits.new_table``.  The difference is that it returns a plan
+    ``FITS_rec`` array, and not an HDU instance.  This ``FITS_rec`` object can
+    then be used as the data argument in the constructors for ``BinTableHDU``
+    (for binary tables) or ``TableHDU`` (for ASCII tables).  This is analogous
+    to creating an ``ImageHDU`` by passing in an image array.
+    ``pyfits.FITS_rec.from_columns`` is just a simpler way of creating a
+    FITS-compatible recarray from a FITS column specification.
+
+  - The ``updateHeader``, ``updateHeaderData``, and ``updateCompressedData``
+    methods of the ``CompDataHDU`` class are pending deprecation and moved to
+    internal methods.  The operation of these methods depended too much on
+    internal state to be used safely by users; instead they are invoked
+    automatically in the appropriate places when reading/writing compressed
+    image HDUs.
+
+  - The ``CompDataHDU.compData`` attribute is pending deprecation in favor of
+    the clearer and more PEP-8 compatible ``CompDataHDU.compressed_data``.
+
+  - The constructor for ``CompDataHDU`` has been changed to accept new keyword
+    arguments.  The new keyword arguments are essentially the same, but are in
+    underscore_separated format rather than camelCase format.  The old
+    arguments are still pending deprecation.
+
+  - The internal attributes of HDU classes ``_hdrLoc``, ``_datLoc``, and
+    ``_datSpan`` have been replaced with ``_header_offset``, ``_data_offset``,
+    and ``_data_size`` respectively.  The old attribute names are still pending
+    deprecation.  This should only be of interest to advanced users who have
+    created their own HDU subclasses.
+
+  - The following previously deprecated functions and methods have been removed
+    entirely: ``createCard``, ``createCardFromString``, ``upperKey``,
+    ``ColDefs.data``, ``setExtensionNameCaseSensitive``, ``_File.getfile``,
+    ``_TableBaseHDU.get_coldefs``, ``Header.has_key``, ``Header.ascardlist``.
+
+  - Interfaces that were pending deprecation are now fully deprecated.  These
+    include: ``create_card``, ``create_card_from_string``, ``upper_key``,
+    ``Header.get_history``, and ``Header.get_comment``.
+
+  - The ``.name`` attribute on HDUs is now directly tied to the HDU's header, so
+    that if ``.header['EXTNAME']`` changes so does ``.name`` and vice-versa.
+
+- ``astropy.io.registry``
+
+  - Identifier functions for reading/writing Table and NDData objects should
+    now accept ``(origin, *args, **kwargs)`` instead of ``(origin, args,
+    kwargs)``. [#591]
+
+  - Added a new ``astropy.io.registry.get_formats`` function for listing
+    registered I/O formats and details about the their readers/writers. [#1669]
+
+- ``astropy.io.votable``
+
+  - Added a new option ``use_names_over_ids`` option to use when converting
+    from VOTable objects to Astropy Tables. This can prevent a situation where
+    column names are not preserved when converting from a VOTable. [#609]
+
+- ``astropy.nddata``
+
+  - The `astropy.nddata.convolution` sub-package has now been moved to
+    `astropy.convolution`, and the `make_kernel` function has been removed.
+    (the kernel classes should be used instead) [#1451]
+
+- ``astropy.stats.funcs``
+
+  - For ``sigma_clip``, the ``maout`` optional parameter has been removed, and
+    the function now always returns a masked array.  A new boolean parameter
+    ``copy`` can be used to indicated whether the input data should be copied
+    (``copy=True``, default) or used by reference (``copy=False``) in the
+    output masked array. [#1083]
+
+- ``astropy.table``
+
+  - The first argument to the ``Column`` and ``MaskedColumn`` classes is now
+    the data array--the ``name`` argument has been changed to an optional
+    keyword argument. [#840]
+
+  - Added support for instantiating a ``Table`` from a list of dict, each one
+    representing a single row with the keys mapping to column names. [#901]
+
+  - The plural 'units' and 'dtypes' have been switched to 'unit' and 'dtype'
+    where appropriate. The original attributes are still present in this
+    version as deprecated attributes, but will be removed in the next version.
+    [#1174]
+
+  - The ``copy`` methods of ``Column`` and ``MaskedColumn`` were changed so
+    that the first argument is now ``order='C'``.  This is required for
+    compatibility with Numpy 1.8 which is currently in development. [#1250]
+
+  - Comparing a column (with == or !=) to a scalar, an array, or another column
+    now always returns a boolean Numpy array (which is a masked array if either
+    of the arguments in the comparison was masked). This is in contrast to the
+    previous behavior, which in some cases returned a boolean Numpy array, and
+    in some cases returned a boolean Column object. [#1446]
+
+- ``astropy.time``
+
+  - For consistency with ``Quantity``, the attributes ``val`` and
+    ``is_scalar`` have been renamed to ``value`` and ``isscalar``,
+    respectively, and the attribute ``vals`` has been dropped. [#767]
+
+  - The double-float64 internal representation of time is used more
+    efficiently to enable better accuracy. [#366]
+
+  - Format and scale arguments are now allowed to be case-insensitive. [#1128]
+
+- ``astropy.units``
+
+  - The ``Quantity`` class now inherits from the Numpy array class, and
+    includes the following API changes [#929]:
+
+    - Using ``float(...)``, ``int(...)``, and ``long(...)`` on a quantity will
+      now only work if the quantity is dimensionless and unscaled.
+
+    - All Numpy ufuncs should now treat units correctly (or raise an exception
+      if not supported), rather than extract the value of quantities and
+      operate on this, emitting a warning about the implicit loss of units.
+
+    - When using relevant Numpy ufuncs on dimensionless quantities (e.g.
+      ``np.exp(h * nu / (k_B * T))``), or combining dimensionless quantities
+      with Python scalars or plain Numpy arrays ``1 + v / c``, the
+      dimensionless Quantity will automatically be converted to an unscaled
+      dimensionless Quantity.
+
+    - When initializing a quantity from a value with no unit, it is now set to
+      be dimensionless and unscaled by default. When initializing a Quantity
+      from another Quantity and with no unit specified in the initializer, the
+      unit is now taken from the unit of the Quantity being initialized from.
+
+  - Strings are no longer allowed as the values for Quantities. [#1005]
+
+  - Quantities are always comparable with zero regardless of their units.
+    [#1254]
+
+  - The exception ``astropy.units.UnitsException`` has been renamed to
+    ``astropy.units.UnitsError`` to be more consistent with the naming
+    of built-in Python exceptions. [#1406]
+
+  - Multiplication with and division by a string now always returns a Unit
+    (rather than a Quantity when the string was first) [#1408]
+
+  - Imperial units are disabled by default.
+
+- ``astropy.wcs``
+
+  - For those including the ``astropy.wcs`` C headers in their project, they
+    should now include it as:
+
+       #include "astropy_wcs/astropy_wcs_api.h"
+
+    instead of:
+
+       #include "astropy_wcs_api.h"
+
+    [#1631]
+
+- The ``--enable-legacy`` option for ``setup.py`` has been removed. [#1493]
+
+Bug Fixes
+^^^^^^^^^^
+
+- ``astropy.io.ascii``
+
+  - The ``write()`` function was ignoring the ``fill_values`` argument. [#910]
+
+  - Fixed an issue in ``DefaultSplitter.join`` where the delimiter attribute
+    was ignored when writing the CSV. [#1020]
+
+  - Fixed writing of IPAC tables containing null values. [#1366]
+
+  - When a table with no header row was read without specifying the format and
+    using the ``names`` argument, then the first row could be dropped. [#1692]
+
+- ``astropy.io.fits``
+
+   - Binary tables containing compressed images may, optionally, contain other
+     columns unrelated to the tile compression convention. Although this is an
+     uncommon use case, it is permitted by the standard.
+
+   - Reworked some of the file I/O routines to allow simpler, more consistent
+     mapping between OS-level file modes ('rb', 'wb', 'ab', etc.) and the more
+     "PyFITS-specific" modes used by PyFITS like "readonly" and "update".  That
+     is, if reading a FITS file from an open file object, it doesn't matter as
+     much what "mode" it was opened in so long as it has the right capabilities
+     (read/write/etc.)  Also works around bugs in the Python io module in 2.6+
+     with regard to file modes.
+
+   - Fixed a long-standing issue where writing binary tables did not correctly
+     write the TFORMn keywords for variable-length array columns (they omitted
+     the max array length parameter of the format).  This was thought fixed in
+     an earlier version, but it was only fixed for compressed image HDUs and
+     not for binary tables in general.
+
+- ``astropy.nddata``
+
+  - Fixed crash when trying to multiple or divide ``NDData`` objects with
+    uncertainties. [#1547]
+
+- ``astropy.table``
+
+  - Using a list of strings to index a table now correctly returns a new table
+    with the columns named in the list. [#1454]
+
+  - Inequality operators now work properly with ``Column`` objects. [#1685]
+
+- ``astropy.time``
+
+  - ``Time`` scale and format attributes are now shown when calling ``dir()``
+    on a ``Time`` object. [#1130]
+
+- ``astropy.wcs``
+
+  - Fixed assignment to string-like WCS attributes on Python 3. [#956]
+
+- ``astropy.units``
+
+  - Fixed a bug that caused the order of multiplication/division of plain
+    Numpy arrays with Quantities to matter (i.e. if the plain array comes
+    first the units were not preserved in the output). [#899]
+
+  - Directly instantiated ``CompositeUnits`` were made printable without
+    crashing. [#1576]
+
+- Misc
+
+  - Fixed various modules that hard-coded ``sys.stdout`` as default arguments
+    to functions at import time, rather than using the runtime value of
+    ``sys.stdout``. [#1648]
+
+  - Minor documentation fixes and enhancements [#922, #1034, #1210, #1217,
+    #1491, #1492, #1498, #1582, #1608, #1621, #1646, #1670, #1756]
+
+  - Fixed a crash that could sometimes occur when running the test suite on
+    systems with platform names containing non-ASCII characters. [#1698]
+
+Other Changes and Additions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- General
+
+  - Astropy now follows the PSF Code of Conduct. [#1216]
+
+  - Astropy's test suite now tests all doctests in inline docstrings.  Support
+    for running doctests in the reST documentation is planned to follow in
+    v0.3.1.
+
+  - Astropy's test suite can be run on multiple CPUs in parallel, often
+    greatly improving runtime, using the ``--parallel`` option. [#1040]
+
+  - A warning is now issued when using Astropy with Numpy < 1.5--much of
+    Astropy may still work in this case but it shouldn't be expected to
+    either. [#1479]
+
+  - Added automatic download/build/installation of Numpy during Astropy
+    installation if not already found. [#1483]
+
+  - Handling of metadata for the ``NDData`` and ``Table`` classes has been
+    unified by way of a common ``MetaData`` descriptor--it allows instantiating
+    an object with metadata of any mapping type, and subsequently prevents
+    replacing the mapping stored in the ``.meta`` attribute (only direct
+    updates to that object are allowed). [#1686]
+
+- ``astropy.coordinates``
+
+  - Angles containing out of bounds minutes or seconds (eg. 60) can be
+    parsed--the value modulo 60 is used with carry to the hours/minutes, and a
+    warning is issued rather than raising an exception. [#990]
+
+- ``astropy.io.fits``
+
+  - The new compression code also adds support for the ZQUANTIZ and ZDITHER0
+    keywords added in more recent versions of this FITS Tile Compression spec.
+    This includes support for lossless compression with GZIP. (#198) By default
+    no dithering is used, but the ``SUBTRACTIVE_DITHER_1`` and
+    ``SUBTRACTIVE_DITHER_2`` methods can be enabled by passing the correct
+    constants to the ``quantize_method`` argument to the ``CompImageHDU``
+    constructor.  A seed can be manually specified, or automatically generated
+    using either the system clock or checksum-based methods via the
+    ``dither_seed`` argument.  See the documentation for ``CompImageHDU`` for
+    more details.
+
+  - Images compressed with the Tile Compression standard can now be larger than
+    4 GB through support of the Q format.
+
+  - All HDUs now have a ``.ver`` ``.level`` attribute that returns the value of
+    the EXTVAL and EXTLEVEL keywords from that HDU's header, if the exist.
+    This was added for consistency with the ``.name`` attribute which returns
+    the EXTNAME value from the header.
+
+  - Then ``Column`` and ``ColDefs`` classes have new ``.dtype`` attributes
+    which give the Numpy dtype for the column data in the first case, and the
+    full Numpy compound dtype for each table row in the latter case.
+
+  - There was an issue where new tables created defaulted the values in all
+    string columns to '0.0'.  Now string columns are filled with empty strings
+    by default--this seems a less surprising default, but it may cause
+    differences with tables created with older versions of PyFITS or Astropy.
+
+- ``astropy.io.misc``
+
+  - The HDF5 reader can now refer to groups in the path as well as datasets;
+    if given a group, the first dataset in that group is read. [#1159]
+
+- ``astropy.nddata``
+
+  - ``NDData`` objects have more helpful, though still rudimentary ``__str__`
+    and ``__repr__`` displays. [#1313]
+
+- ``astropy.units``
+
+  - Added 'cycle' unit. [#1160]
+
+  - Extended units supported by the CDS formatter/parser. [#1468]
+
+  - Added unicode an LaTeX symbols for liter. [#1618]
+
+- ``astropy.wcs``
+
+  - Redundant SCAMP distortion parameters are removed with SIP distortions are
+    also present. [#1278]
+
+  - Added iterative implementation of ``all_world2pix`` that can be reliably
+    inverted. [#1281]
+
+
 0.2.5 (2013-10-25)
 ------------------
 
@@ -23,6 +768,11 @@ Bug Fixes
 
 - ``astropy.io.fits``
 
+  - Improved round-tripping and preservation of manually assigned column
+    attributes (``TNULLn``, ``TSCALn``, etc.) in table HDU headers. (Note: This
+    issue was previously reported as fixed in Astropy v0.2.2 by mistake; it is
+    not fixed until v0.3.) [#996]
+
   - Fixed a bug that could cause a segfault when trying to decompress an
     compressed HDU whose contents are truncated (due to a corrupt file, for
     example). This still causes a Python traceback but better that than a
@@ -107,10 +857,6 @@ Bug Fixes
   - Fixed a bug in ``ProgressBar.map`` where ``multiprocess=True`` could cause
     it to hang on waiting for the process pool to be destroyed. [#1381]
 
-  - Importing ``astropy`` from within a source checkout will no longer exit
-    the Python interpreter if the extension modules have not been built
-    in-place. [#1269]
-
   - Fixed a crash on Python 3.2 when affiliated packages try to use the
     ``astropy.utils.data.get_pkg_data_*`` functions. [#1256]
 
@@ -176,7 +922,7 @@ Bug Fixes
 - ``astropy.table``
 
   - Fixed a bug where ``Table.remove_column`` and ``Table.rename_column``
-    could cause a maksed table to lose its masking. [#1120]
+    could cause a masked table to lose its masking. [#1120]
 
   - Fixed bugs where subclasses of ``Table`` did not preserver their class in
     certain operations. [#1142]
@@ -226,9 +972,7 @@ Other Changes and Additions
 
 - ``astropy.cosmology``
 
-  - Added a new ``Plank13`` object representing the Plank 2013 results. WMAP7
-    remains the default cosmology so this should not affect any existing
-    computations using the defaults. [#895]
+  - Added a new ``Plank13`` object representing the Plank 2013 results. [#895]
 
 - ``astropy.units``
 
@@ -266,7 +1010,7 @@ Bug Fixes
 
   - Fixed issues in both the ``fits`` and ``votable`` sub-packages where array
     byte order was not being handled consistently, leading to possible crashes
-    espcially on big-endian systems. [#1003]
+    especially on big-endian systems. [#1003]
 
 - ``astropy.io.fits``
 
@@ -318,9 +1062,6 @@ Bug Fixes
   - Fixed an obscure issue that can occur on systems that don't have flush to
     memory-mapped files implemented (namely GNU Hurd). [#968]
 
-  - Improved round-tripping and preservation of manually assigned column
-    attributes (``TNULLn``, ``TSCALn``, etc.) in table HDU headers. [#996]
-
 - ``astropy.io.votable``
 
   - Stopped deprecation warnings from the ``astropy.io.votable`` package that
@@ -342,7 +1083,7 @@ Bug Fixes
     table with masked columns. [#973]
 
   - Made it possible to assign to one table row from the value of another row,
-    effictively making it easier to copy rows, for example. [#1019]
+    effectively making it easier to copy rows, for example. [#1019]
 
 - ``astropy.time``
 
@@ -441,13 +1182,13 @@ Bug Fixes
     32-bit systems. [#786]
 
   - Fixed malformatting of the ``TFORMn`` keywords when writing compressed
-    image tables (they ommitted the max array length parameter from the
+    image tables (they omitted the max array length parameter from the
     variable-length array format).
 
   - Fixed a crash that could occur when writing a table containing multi-
     dimensional array columns from an existing file into a new file.
 
-  - Fixed a bug in fitsdiff that reported two header keywords contaning NaN
+  - Fixed a bug in fitsdiff that reported two header keywords containing NaN
     as having different values.
 
 - ``astropy.io.votable``
@@ -503,6 +1244,11 @@ Bug Fixes
 
   - Fixed ``TypeError`` when calling ``WCS.to_header_string()``. [#822]
 
+  - Added new method `WCS.all_world2pix` for converting from world coordinates
+    to pixel space, including inversion of the astrometric distortion
+    correction. [#1066, #1281]
+
+
 - Misc
 
   - Fixed a minor issue when installing with ``./setup.py develop`` on a fresh
@@ -516,7 +1262,7 @@ Bug Fixes
   - Fixed an installation issue where running ``./setup.py install`` or when
     installing with pip the ``.astropy`` directory gets created in the home
     directory of the user running the command.  The user's ``.astropy``
-    directory should only be created when they use astropy, not when they
+    directory should only be created when they use Astropy, not when they
     install it. [#867]
 
   - Fixed an exception when creating a ``ProgressBar`` with a "total" of 0.
@@ -604,9 +1350,9 @@ see the "What's New" section of the documentation for more details.
     astropy.cosmology classes. The current treatment assumes that neutrinos are
     massless. [#365]
 
-  - Add a WMAP9 object using the 9-year WMAP parameters from Hinshaw et al.
-    Once this paper is accepted, this should be made the default, but for
-    now WMAP7 remains the default. [#629]
+  - Add a WMAP9 object using the final (9-year) WMAP parameters from
+    Hinshaw et al. 2013. It has also been made the default cosmology.
+    [#629, #724]
 
 - ``astropy.table`` I/O infrastructure for custom readers/writers
   implemented. [#305]
@@ -680,9 +1426,9 @@ see the "What's New" section of the documentation for more details.
 Other Changes and Additions
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-- A configuration file with all options set to their defaults is now generated 
-  when astropy is installed.  This file will be pulled in as the users' 
-  astropy configuration file the first time they ``import astropy``.  [#498] 
+- A configuration file with all options set to their defaults is now generated
+  when astropy is installed.  This file will be pulled in as the users'
+  astropy configuration file the first time they ``import astropy``.  [#498]
 
 - Astropy doc themes moved into ``astropy.sphinx`` to allow affiliated packages
   to access them.
@@ -725,10 +1471,10 @@ Other Changes and Additions
   access any local as well as remote data, supports caching, and can
   decompress gzip and bzip2 files on-the-fly. [#425]
 
-- Added a classmethod to 
-  `astropy.coordinates.coordsystems.SphericalCoordinatesBase` that performs a 
+- Added a classmethod to
+  `astropy.coordinates.coordsystems.SphericalCoordinatesBase` that performs a
   name resolve query using Sesame to retrieve coordinates for the requested
-  object. This works for any subclass of `SphericalCoordinatesBase`, but 
+  object. This works for any subclass of `SphericalCoordinatesBase`, but
   requires an internet connection. [#556]
 
 - ``astropy.nddata.convolution`` removed requirement of PyFFTW3; uses Numpy's
@@ -743,7 +1489,7 @@ Bug Fixes
 
   - Fixed crash when pprinting a row with INDEF values. [#511]
 
-  - Fixed failure when reading DAOphot files with empty keyword values [#666].
+  - Fixed failure when reading DAOphot files with empty keyword values. [#666]
 
 - ``astropy.io.fits``
 
diff --git a/PKG-INFO b/PKG-INFO
index 18140b8..2665552 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: astropy
-Version: 0.2.5
+Version: 0.3
 Summary: Community-developed python astronomy tools
 Home-page: http://astropy.org
 Author: The Astropy Developers
 Author-email: astropy.team at gmail.com
 License: BSD
-Download-URL: http://pypi.python.org/packages/source/a/astropy/astropy-0.2.5.tar.gz
+Download-URL: http://pypi.python.org/packages/source/a/astropy/astropy-0.3.tar.gz
 Description: 
         Astropy is a package intended to contain core functionality and some
         common tools needed for performing astronomy and astrophysics research with
diff --git a/README.rst b/README.rst
index fbcfecc..e5a5760 100644
--- a/README.rst
+++ b/README.rst
@@ -2,6 +2,12 @@
 Astropy
 =======
 
+.. image:: https://pypip.in/v/astropy/badge.png
+    :target: https://pypi.python.org/pypi/astropy
+
+.. image:: https://pypip.in/d/astropy/badge.png
+    :target: https://pypi.python.org/pypi/astropy
+
 Astropy (http://astropy.org/) is a package intended to contain much of
 the core functionality and some common tools needed for performing
 astronomy and astrophysics with Python.
@@ -10,5 +16,21 @@ Releases are `registered on PyPI <http://pypi.python.org/pypi/astropy>`_,
 and development is occuring at the
 `project's github page <http://github.com/astropy/astropy>`_.
 
-For installation instructions, see the `online documentation <http://docs.astropy.org/>`_ 
+For installation instructions, see the `online documentation <http://docs.astropy.org/>`_
 or  ``docs/install.rst`` in this source distribution.
+
+Jenkins Build Status
+--------------------
+.. image:: https://jenkins.shiningpanda-ci.com/astropy/job/astropy-master-debian-multiconfig/badge/icon
+    :target: https://jenkins.shiningpanda-ci.com/astropy/job/astropy-master-debian-multiconfig/
+    
+Travis Build Status
+-------------------
+.. image:: https://travis-ci.org/astropy/astropy.png
+    :target: https://travis-ci.org/astropy/astropy
+
+Test Coverage Status
+--------------------
+
+.. image:: https://coveralls.io/repos/astropy/astropy/badge.png
+    :target: https://coveralls.io/r/astropy/astropy
diff --git a/astropy/__init__.py b/astropy/__init__.py
index c57cce8..48c9234 100644
--- a/astropy/__init__.py
+++ b/astropy/__init__.py
@@ -17,6 +17,7 @@ except NameError:
         import __builtin__ as builtins
     builtins._ASTROPY_SETUP_ = False
     del version_info
+    del builtins
 
 try:
     from .version import version as __version__
@@ -30,7 +31,7 @@ except ImportError:
     __githash__ = ''
 
 
-import logging
+__minimum_numpy_version__ = '1.5.0'
 
 
 # The location of the online documentation for astropy
@@ -41,6 +42,47 @@ else:
     online_docs_root = 'http://docs.astropy.org/en/{0}/'.format(__version__)
 
 
+def _check_numpy():
+    """
+    Check that Numpy is installed and it is of the minimum version we
+    require.
+    """
+    # Note: We could have used distutils.version for this comparison,
+    # but it seems like overkill to import distutils at runtime.
+    requirement_met = False
+
+    try:
+        import numpy
+    except ImportError:
+        pass
+    else:
+        major, minor, rest = numpy.__version__.split(".", 2)
+        rmajor, rminor, rest = __minimum_numpy_version__.split(".", 2)
+        requirement_met = ((int(major), int(minor)) >=
+                           (int(rmajor), int(rminor)))
+
+    if not requirement_met:
+        msg = ("numpy version {0} or later must be installed to use "
+               "astropy".format(
+                   __minimum_numpy_version__))
+        raise ImportError(msg)
+
+    return numpy
+
+
+if not _ASTROPY_SETUP_:
+    _check_numpy()
+
+
+from .config import ConfigurationItem
+
+
+UNICODE_OUTPUT = ConfigurationItem(
+    'unicode_output', False,
+    'Use Unicode characters when outputting values, and writing widgets '
+    'to the console.')
+
+
 # set up the test command
 def _get_test_runner():
     from .tests.helper import TestRunner
@@ -49,7 +91,7 @@ def _get_test_runner():
 
 def test(package=None, test_path=None, args=None, plugins=None,
          verbose=False, pastebin=None, remote_data=False, pep8=False,
-         pdb=False, coverage=False, open_files=False):
+         pdb=False, coverage=False, open_files=False, parallel=0):
     """
     Run Astropy tests using py.test. A proper set of arguments is
     constructed and passed to `pytest.main`.
@@ -104,6 +146,12 @@ def test(package=None, test_path=None, args=None, plugins=None,
         this adds extra run time to the test suite.  Works only on
         platforms with a working `lsof` command.
 
+    parallel : int, optional
+        When provided, run the tests in parallel on the specified
+        number of CPUs.  If parallel is negative, it will use the all
+        the cores on the machine.  Requires the `pytest-xdist` plugin
+        is installed.
+
     See Also
     --------
     pytest.main : py.test function wrapped by `run_tests`.
@@ -114,43 +162,49 @@ def test(package=None, test_path=None, args=None, plugins=None,
         package=package, test_path=test_path, args=args,
         plugins=plugins, verbose=verbose, pastebin=pastebin,
         remote_data=remote_data, pep8=pep8, pdb=pdb,
-        coverage=coverage, open_files=open_files)
+        coverage=coverage, open_files=open_files,
+        parallel=parallel)
 
 
-# Use the root logger as a dummy log before initilizing Astropy's logger
-log = logging.getLogger()
-
 # if we are *not* in setup mode, import the logger and possibly populate the
 # configuration file with the defaults
-if not _ASTROPY_SETUP_:
-    from .logger import _init_log, _teardown_log
+def _initialize_astropy():
     from . import config
 
     import os
     import sys
     from warnings import warn
 
-    log = _init_log()
+    def _rollback_import(message):
+        log.error(message)
+        # Now disable exception logging to avoid an annoying error in the
+        # exception logger before we raise the import error:
+        _teardown_log()
+
+        # Roll back any astropy sub-modules that have been imported thus
+        # far
+
+        for key in list(sys.modules):
+            if key.startswith('astropy.'):
+                del sys.modules[key]
+        raise ImportError('astropy')
+
+    if sys.version_info[0] >= 3 and os.path.exists('setup.py'):
+        _rollback_import(
+            "You appear to be trying to import astropy from within a source "
+            "checkout. This is currently not possible using Python 3 due to "
+            "the reliance of 2to3 to convert some of Astropy's subpackages "
+            "for Python 3 compatibility.")
 
     try:
         from .utils import _compiler
     except ImportError:
         if os.path.exists('setup.py'):
-            log.error('You appear to be trying to import astropy from within '
-                      'a source checkout; please run `./setup.py develop` or '
-                      '`./setup.py build_ext --inplace` first so that '
-                      'extension modules can be compiled and made importable.')
-            # Now disable exception logging to avoid an annoying error in the
-            # exception logger before we raise the import error:
-            _teardown_log()
-
-            # Roll back any astropy sub-modules that have been imported thus
-            # far
-
-            for key in sys.modules.keys():
-                if key.startswith('astropy.'):
-                    del sys.modules[key]
-            raise ImportError('astropy')
+            _rollback_import(
+                'You appear to be trying to import astropy from within a '
+                'source checkout; please run `./setup.py develop` or '
+                '`./setup.py build_ext --inplace` first so that extension '
+                'modules can be compiled and made importable.')
         else:
             # Outright broken installation; don't be nice.
             raise
@@ -165,6 +219,19 @@ if not _ASTROPY_SETUP_:
         wmsg = (e.args[0] + " Cannot install default profile. If you are "
                 "importing from source, this is expected.")
         warn(config.configuration.ConfigurationDefaultMissingWarning(wmsg))
-        del e
 
-    del _init_log, os, warn, config_dir  # clean up namespace
+
+import logging
+
+# Use the root logger as a dummy log before initilizing Astropy's logger
+log = logging.getLogger()
+
+
+if not _ASTROPY_SETUP_:
+    from .logger import _init_log, _teardown_log
+
+    log = _init_log()
+
+    _initialize_astropy()
+
+    from .utils.misc import find_api_page
diff --git a/astropy/config/__init__.py b/astropy/config/__init__.py
index 38b4798..2ae6eff 100644
--- a/astropy/config/__init__.py
+++ b/astropy/config/__init__.py
@@ -5,6 +5,8 @@ This module contains configuration and setup utilities for the
 `astropy` project. This includes all functionality related to the
 affiliated package index.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 from .paths import *
 from .configuration import *
diff --git a/astropy/config/affiliated.py b/astropy/config/affiliated.py
index 5a140ac..305dfed 100644
--- a/astropy/config/affiliated.py
+++ b/astropy/config/affiliated.py
@@ -3,6 +3,7 @@
 affiliated packages and installing them.
 """
 
-from __future__ import division
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 __all__ = []
diff --git a/astropy/config/configuration.py b/astropy/config/configuration.py
index 46892e2..c1c946a 100644
--- a/astropy/config/configuration.py
+++ b/astropy/config/configuration.py
@@ -8,14 +8,24 @@ configuration files for Astropy and affiliated packages.
     `ConfigParser`. More information and documentation for configobj can be
     found at http://www.voidspace.org.uk/python/configobj.html.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+from ..extern import six
 
-from __future__ import division
-
+import inspect
+import pkgutil
 import re
+import sys
 import textwrap
+import types
+
 from contextlib import contextmanager
+from os import path
+from warnings import warn
 
+from ..extern import six
 from ..extern.configobj import configobj, validate
+from ..utils.exceptions import AstropyWarning
 
 
 __all__ = ['ConfigurationItem', 'InvalidConfigurationItemWarning',
@@ -23,14 +33,14 @@ __all__ = ['ConfigurationItem', 'InvalidConfigurationItemWarning',
            'reload_config']
 
 
-class InvalidConfigurationItemWarning(Warning):
+class InvalidConfigurationItemWarning(AstropyWarning):
     """ A Warning that is issued when the configuration value specified in the
     astropy configuration file does not match the type expected for that
     configuration value.
     """
 
 
-class ConfigurationMissingWarning(Warning):
+class ConfigurationMissingWarning(AstropyWarning):
     """ A Warning that is issued when the configuration directory cannot be
     accessed (usually due to a permissions problem). If this warning appears,
     configuration items will be set to their defaults rather than read from the
@@ -45,8 +55,8 @@ class ConfigurationDefaultMissingError(ValueError):
     """
 
 
-#this is used in astropy/__init__.py
-class ConfigurationDefaultMissingWarning(Warning):
+# this is used in astropy/__init__.py
+class ConfigurationDefaultMissingWarning(AstropyWarning):
     """ A warning that is issued when the configuration defaults (which
     should be generated at build-time) are missing.
     """
@@ -111,13 +121,12 @@ class ConfigurationItem(object):
 
     """
 
-    #this is used to make validation faster so a Validator object doesn't
-    #have to be created every time
+    # this is used to make validation faster so a Validator object doesn't
+    # have to be created every time
     _validator = validate.Validator()
 
     def __init__(self, name, defaultvalue='', description=None, cfgtype=None,
-                      module=None):
-        from warnings import warn
+                 module=None):
         from ..utils import find_current_module
         from ..utils import isiterable
 
@@ -134,11 +143,11 @@ class ConfigurationItem(object):
         self.module = module
         self.description = description
 
-        #now determine cfgtype if it is not given
+        # now determine cfgtype if it is not given
         if cfgtype is None:
             if (isiterable(defaultvalue) and not
-                isinstance(defaultvalue, basestring)):
-                #it is an options list
+                    isinstance(defaultvalue, six.string_types)):
+                # it is an options list
                 dvstr = [str(v) for v in defaultvalue]
                 cfgtype = 'option(' + ', '.join(dvstr) + ')'
                 defaultvalue = dvstr[0]
@@ -157,12 +166,12 @@ class ConfigurationItem(object):
         self._validate_val(defaultvalue)
         self.defaultvalue = defaultvalue
 
-        #note that the actual value is stored in the ConfigObj file for this
-        #package
+        # note that the actual value is stored in the ConfigObj file for this
+        # package
 
-        #this checks the current value to make sure it's valid for the type
-        #as well as updating the ConfigObj with the default value, if it's not
-        #actually in the ConfigObj
+        # this checks the current value to make sure it's valid for the type
+        # as well as updating the ConfigObj with the default value, if it's not
+        # actually in the ConfigObj
         try:
             self()
         except TypeError as e:
@@ -257,16 +266,16 @@ class ConfigurationItem(object):
             msg = 'Provided value for configuration item {0} not valid: {1}'
             raise TypeError(msg.format(self.name, e.args[0]))
 
-        #Now find the  ConfigObj that this is based on
+        # Now find the  ConfigObj that this is based on
         baseobj = get_config(self.module)
         secname = baseobj.name
         cobj = baseobj
-        #a ConfigObj's parent is itself, so we look for the parent with that
+        # a ConfigObj's parent is itself, so we look for the parent with that
         while cobj.parent is not cobj:
             cobj = cobj.parent
 
-        #use the current on disk version, which will be modified with the
-        #given value and type/description
+        # use the current on disk version, which will be modified with the
+        # given value and type/description
         newobj = configobj.ConfigObj(cobj.filename, interpolation=False)
         if secname is not None:
             if secname not in newobj:
@@ -290,7 +299,7 @@ class ConfigurationItem(object):
         secname = baseobj.name
 
         cobj = baseobj
-        #a ConfigObj's parent is itself, so we look for the parent with that
+        # a ConfigObj's parent is itself, so we look for the parent with that
         while cobj.parent is not cobj:
             cobj = cobj.parent
 
@@ -332,7 +341,7 @@ class ConfigurationItem(object):
             If the configuration value as stored is not this item's type.
         """
 
-        #get the value from the relevant `configobj.ConfigObj` object
+        # get the value from the relevant `configobj.ConfigObj` object
         sec = get_config(self.module)
         if self.name not in sec:
             self.set(self.defaultvalue)
@@ -349,9 +358,9 @@ class ConfigurationItem(object):
 
         throws the underlying configobj exception if it fails
         """
-        #note that this will normally use the *class* attribute `_validator`,
-        #but if some arcane reason is needed for making a special one for an
-        #instance or sub-class, it will be used
+        # note that this will normally use the *class* attribute `_validator`,
+        # but if some arcane reason is needed for making a special one for an
+        # instance or sub-class, it will be used
         return self._validator.check(self.cfgtype, val)
 
     def _generate_comments(self):
@@ -395,8 +404,6 @@ def get_config(packageormod=None, reload=False):
         be determined.
 
     """
-    from os.path import join
-    from warnings import warn
 
     from .paths import get_config_dir
     from ..utils import find_current_module
@@ -422,7 +429,7 @@ def get_config(packageormod=None, reload=False):
             cobj = configobj.ConfigObj(interpolation=False)
         else:
             try:
-                cfgfn = join(get_config_dir(), rootname + '.cfg')
+                cfgfn = path.join(get_config_dir(), rootname + '.cfg')
                 cobj = configobj.ConfigObj(cfgfn, interpolation=False)
             except (IOError, OSError) as e:
                 msg = ('Configuration defaults will be used, and '
@@ -470,7 +477,7 @@ def save_config(packageormod=None, filename=None):
     """
 
     sec = get_config(packageormod)
-    #look for the section that is its own parent - that's the base object
+    # look for the section that is its own parent - that's the base object
     while sec.parent is not sec:
         sec = sec.parent
     if filename is not None:
@@ -495,7 +502,7 @@ def reload_config(packageormod=None):
         The package or module name - see `get_config` for details.
     """
     sec = get_config(packageormod)
-    #look for the section that is its own parent - that's the base object
+    # look for the section that is its own parent - that's the base object
     while sec.parent is not sec:
         sec = sec.parent
     sec.reload()
@@ -518,8 +525,6 @@ def get_config_items(packageormod=None):
         objects.
 
     """
-    import sys
-    from inspect import ismodule
 
     from ..utils import find_current_module
 
@@ -529,17 +534,17 @@ def get_config_items(packageormod=None):
             msg1 = 'Cannot automatically determine get_config module, '
             msg2 = 'because it is not called from inside a valid module'
             raise RuntimeError(msg1 + msg2)
-    elif isinstance(packageormod, basestring):
+    elif isinstance(packageormod, six.string_types):
         __import__(packageormod)
         packageormod = sys.modules[packageormod]
-    elif ismodule(packageormod):
+    elif inspect.ismodule(packageormod):
         pass
     else:
         raise TypeError('packageormod in get_config_items is invalid')
 
     configitems = {}
-    for n, obj in packageormod.__dict__.iteritems():
-        #if it's not a new-style object, it's certainly not a ConfigurationItem
+    for n, obj in six.iteritems(packageormod.__dict__):
+        # if it's not a new-style object, it's certainly not a ConfigurationItem
         if hasattr(obj, '__class__'):
             fqn = obj.__class__.__module__ + '.' + obj.__class__.__name__
             if fqn == 'astropy.config.configuration.ConfigurationItem':
@@ -560,7 +565,7 @@ def _fix_section_blank_lines(sec, recurse=True, gotoroot=True):
     if not hasattr(sec, 'sections'):
         sec = get_config(sec)
 
-        #look for the section that is its own parent - that's the base object
+        # look for the section that is its own parent - that's the base object
         if gotoroot:
             while sec.parent is not sec:
                 sec = sec.parent
@@ -614,18 +619,16 @@ def generate_all_config_items(pkgornm=None, reset_to_default=False,
         The filename of the generated configuration item.
 
     """
-    from os.path import split
-    from types import ModuleType
-    from pkgutil import get_loader, walk_packages
 
     from ..utils import find_current_module
 
     if pkgornm is None:
         pkgornm = find_current_module(1).__name__.split('.')[0]
 
-    if isinstance(pkgornm, basestring):
-        package = get_loader(pkgornm).load_module(pkgornm)
-    elif isinstance(pkgornm, ModuleType) and '__init__' in pkgornm.__file__:
+    if isinstance(pkgornm, six.string_types):
+        package = pkgutil.get_loader(pkgornm).load_module(pkgornm)
+    elif (isinstance(pkgornm, types.ModuleType) and
+            '__init__' in pkgornm.__file__):
         package = pkgornm
     else:
         msg = 'generate_all_config_items was not given a package/package name'
@@ -634,18 +637,19 @@ def generate_all_config_items(pkgornm=None, reset_to_default=False,
     if hasattr(package, '__path__'):
         pkgpath = package.__path__
     elif hasattr(package, '__file__'):
-        pkgpath = split(package.__file__)[0]
+        pkgpath = path.split(package.__file__)[0]
     else:
         raise AttributeError('package to generate config items for does not '
                              'have __file__ or __path__')
 
-    for imper, nm, ispkg in walk_packages(pkgpath, package.__name__ + '.'):
+    prefix = package.__name__ + '.'
+    for imper, nm, ispkg in pkgutil.walk_packages(pkgpath, prefix):
         if nm == 'astropy.config.tests.test_configs':
             continue
         if not _unsafe_import_regex.match(nm):
             imper.find_module(nm)
             if reset_to_default:
-                for cfgitem in get_config_items(nm).itervalues():
+                for cfgitem in six.itervalues(get_config_items(nm)):
                     cfgitem.set(cfgitem.defaultvalue)
 
     _fix_section_blank_lines(package.__name__, True, True)
@@ -683,25 +687,25 @@ def update_default_config(pkg, default_cfg_dir_or_fn):
         If the default configuration could not be found.
 
     """
-    import os
 
     cfgfn = get_config(pkg).filename
 
-    if os.path.exists(cfgfn):
+    if path.exists(cfgfn):
         with open(cfgfn) as f:
             doupdate = f.read() == ''
     else:
         doupdate = True
 
     if doupdate:
-        if os.path.isdir(default_cfg_dir_or_fn):
-            default_cfgfn = os.path.join(default_cfg_dir_or_fn, pkg + '.cfg')
+        if path.isdir(default_cfg_dir_or_fn):
+            default_cfgfn = path.join(default_cfg_dir_or_fn, pkg + '.cfg')
         else:
             default_cfgfn = default_cfg_dir_or_fn
 
-        if not os.path.isfile(default_cfgfn):
-            raise ConfigurationDefaultMissingError('Requested default configuration file {0} is '
-                                                   'not a file.'.format(default_cfgfn))
+        if not path.isfile(default_cfgfn):
+            raise ConfigurationDefaultMissingError(
+                'Requested default configuration file {0} is '
+                'not a file.'.format(default_cfgfn))
 
         with open(cfgfn, 'w') as fw:
             with open(default_cfgfn) as fr:
diff --git a/astropy/config/paths.py b/astropy/config/paths.py
index 62ba753..097919e 100644
--- a/astropy/config/paths.py
+++ b/astropy/config/paths.py
@@ -2,8 +2,12 @@
 """ This module contains functions to determine where configuration and
 data/cache files used by Astropy should be placed.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import os
+import sys
 
-from __future__ import division
 
 __all__ = ['get_config_dir', 'get_cache_dir']
 
@@ -19,9 +23,7 @@ def _find_home():
         Astropy on some obscure platform that doesn't have standard home
         directories.
     """
-    import os
-    import sys
-    from os import environ as env
+
 
     # this is used below to make fix up encoding issues that sometimes crop up
     # in py2.x but not in py3.x
@@ -30,46 +32,47 @@ def _find_home():
     else:  # pragma: py2
         decodepath = lambda pth: pth
 
-    #First find the home directory - this is inspired by the scheme ipython
-    #uses to identify "home"
+    # First find the home directory - this is inspired by the scheme ipython
+    # uses to identify "home"
     if os.name == 'posix':
         # Linux, Unix, AIX, OS X
-        if 'HOME' in env:
-            homedir = decodepath(env['HOME'])
+        if 'HOME' in os.environ:
+            homedir = decodepath(os.environ['HOME'])
         else:
             raise OSError('Could not find unix home directory to search for '
                           'astropy config dir')
     elif os.name == 'nt':  # This is for all modern Windows (NT or after)
-        #Try for a network home first
-        if 'HOMESHARE' in env:
-            homedir = decodepath(env['HOMESHARE'])
-        #See if there's a local home
-        elif 'HOMEDRIVE' in env and 'HOMEPATH' in env:
-            homedir = os.path.join(env['HOMEDRIVE'], env['HOMEPATH'])
+        # Try for a network home first
+        if 'HOMESHARE' in os.environ:
+            homedir = decodepath(os.environ['HOMESHARE'])
+        # See if there's a local home
+        elif 'HOMEDRIVE' in os.environ and 'HOMEPATH' in os.environ:
+            homedir = os.path.join(os.environ['HOMEDRIVE'],
+                                   os.environ['HOMEPATH'])
             homedir = decodepath(homedir)
-        #Maybe a user profile?
-        elif 'USERPROFILE' in env:
-            homedir = decodepath(os.path.join(env['USERPROFILE']))
+        # Maybe a user profile?
+        elif 'USERPROFILE' in os.environ:
+            homedir = decodepath(os.path.join(os.environ['USERPROFILE']))
         else:
             try:
-                import _winreg as wreg
-                key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
-            r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
+                from ..extern.six.moves import winreg as wreg
+                shell_folders = r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders'
+                key = wreg.OpenKey(wreg.HKEY_CURRENT_USER, shell_folders)
 
                 homedir = wreg.QueryValueEx(key, 'Personal')[0]
                 homedir = decodepath(homedir)
                 key.Close()
             except:
-                #As a final possible resort, see if HOME is present
-                if 'HOME' in env:
-                    homedir = decodepath(env['HOME'])
+                # As a final possible resort, see if HOME is present
+                if 'HOME' in os.environ:
+                    homedir = decodepath(os.environ['HOME'])
                 else:
                     raise OSError('Could not find windows home directory to '
                                   'search for astropy config dir')
     else:
-        #for other platforms, try HOME, although it probably isn't there
-        if 'HOME' in env:
-            homedir = decodepath(env['HOME'])
+        # for other platforms, try HOME, although it probably isn't there
+        if 'HOME' in os.environ:
+            homedir = decodepath(os.environ['HOME'])
         else:
             raise OSError('Could not find a home directory to search for '
                           'astropy config dir - are you on an unspported '
@@ -94,21 +97,19 @@ def get_config_dir(create=True):
 
     """
 
-    from os import path, environ
-
-    #symlink will be set to this if the directory is created
+    # symlink will be set to this if the directory is created
     linkto = None
-    #first look for XDG_CONFIG_HOME
-    xch = environ.get('XDG_CONFIG_HOME')
-
-    if xch is not None and path.exists(xch):
-        xchpth = path.join(xch, 'astropy')
-        if not path.islink(xchpth):
-            if path.exists(xchpth):
-                return path.abspath(xchpth)
+    # first look for XDG_CONFIG_HOME
+    xch = os.environ.get('XDG_CONFIG_HOME')
+
+    if xch is not None and os.path.exists(xch):
+        xchpth = os.path.join(xch, 'astropy')
+        if not os.path.islink(xchpth):
+            if os.path.exists(xchpth):
+                return os.path.abspath(xchpth)
             else:
                 linkto = xchpth
-    return path.abspath(_find_or_create_astropy_dir('config', linkto))
+    return os.path.abspath(_find_or_create_astropy_dir('config', linkto))
 
 
 def get_cache_dir():
@@ -127,57 +128,52 @@ def get_cache_dir():
         The absolute path to the cache directory.
 
     """
-    from os import path, environ
 
-    #symlink will be set to this if the directory is created
+    # symlink will be set to this if the directory is created
     linkto = None
-    #first look for XDG_CACHE_HOME
-    xch = environ.get('XDG_CACHE_HOME')
-
-    if xch is not None and path.exists(xch):
-        xchpth = path.join(xch, 'astropy')
-        if not path.islink(xchpth):
-            if path.exists(xchpth):
-                return path.abspath(xchpth)
+    # first look for XDG_CACHE_HOME
+    xch = os.environ.get('XDG_CACHE_HOME')
+
+    if xch is not None and os.path.exists(xch):
+        xchpth = os.path.join(xch, 'astropy')
+        if not os.path.islink(xchpth):
+            if os.path.exists(xchpth):
+                return os.path.abspath(xchpth)
             else:
                 linkto = xchpth
 
-    return path.abspath(_find_or_create_astropy_dir('cache', linkto))
+    return os.path.abspath(_find_or_create_astropy_dir('cache', linkto))
 
 
 def _find_or_create_astropy_dir(dirnm, linkto):
-    from os import path, mkdir
-    import sys
-
-    innerdir = path.join(_find_home(), '.astropy')
-    maindir = path.join(_find_home(), '.astropy', dirnm)
+    innerdir = os.path.join(_find_home(), '.astropy')
+    maindir = os.path.join(_find_home(), '.astropy', dirnm)
 
-    if not path.exists(maindir):
-        #first create .astropy dir if needed
-        if not path.exists(innerdir):
+    if not os.path.exists(maindir):
+        # first create .astropy dir if needed
+        if not os.path.exists(innerdir):
             try:
-                mkdir(innerdir)
+                os.mkdir(innerdir)
             except OSError:
-                if not path.isdir(innerdir):
+                if not os.path.isdir(innerdir):
                     raise
-        elif not path.isdir(innerdir):
+        elif not os.path.isdir(innerdir):
             msg = 'Intended Astropy directory {0} is actually a file.'
             raise IOError(msg.format(innerdir))
 
         try:
-            mkdir(maindir)
+            os.mkdir(maindir)
         except OSError:
-            if not path.isdir(maindir):
+            if not os.path.isdir(maindir):
                 raise
 
         if (not sys.platform.startswith('win') and
             linkto is not None and
-            not path.exists(linkto)):
-            from os import symlink
-            symlink(maindir, linkto)
+                not os.path.exists(linkto)):
+            os.symlink(maindir, linkto)
 
-    elif not path.isdir(maindir):
+    elif not os.path.isdir(maindir):
         msg = 'Intended Astropy {0} directory {1} is actually a file.'
         raise IOError(msg.format(dirnm, maindir))
 
-    return path.abspath(maindir)
+    return os.path.abspath(maindir)
diff --git a/astropy/wcs/tests/__init__.py b/astropy/config/setup_package.py
similarity index 62%
copy from astropy/wcs/tests/__init__.py
copy to astropy/config/setup_package.py
index 975bdd1..3cd9f7c 100644
--- a/astropy/wcs/tests/__init__.py
+++ b/astropy/config/setup_package.py
@@ -1,2 +1,5 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
+
+def requires_2to3():
+    return False
diff --git a/astropy/config/tests/__init__.py b/astropy/config/tests/__init__.py
index e69de29..800d82e 100644
--- a/astropy/config/tests/__init__.py
+++ b/astropy/config/tests/__init__.py
@@ -0,0 +1,2 @@
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
diff --git a/astropy/config/tests/test_configs.py b/astropy/config/tests/test_configs.py
index aec28d9..7fcc07d 100644
--- a/astropy/config/tests/test_configs.py
+++ b/astropy/config/tests/test_configs.py
@@ -1,15 +1,20 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 import io
+import os
+import shutil
+import sys
 
 try:
-    #used by test_get_config_items
+    # used by test_get_config_items
     from ..configuration import ConfigurationItem
 
     TESTCONF1 = ConfigurationItem('test1', 1, 'descr')
     TESTCONF2 = ConfigurationItem('test2', 2, 'descr')
 except:
-    #if this fails on import, don't worry - the tests will catch it.
+    # if this fails on import, don't worry - the tests will catch it.
     pass
 
 
@@ -22,7 +27,6 @@ def test_paths():
 
 def test_config_file():
     from ..configuration import get_config, reload_config, save_config
-    from os.path import exists
 
     apycfg = get_config('astropy')
     assert apycfg.filename.endswith('astropy.cfg')
@@ -34,9 +38,9 @@ def test_config_file():
 
     reload_config('astropy')
 
-    #saving shouldn't change the file, because reload should have made sure it
-    #is based on the current file.  But don't do it if there's no file
-    if exists(apycfg.filename):
+    # saving shouldn't change the file, because reload should have made sure it
+    # is based on the current file.  But don't do it if there's no file
+    if os.path.exists(apycfg.filename):
         save_config('astropy')
 
 
@@ -59,8 +63,8 @@ def test_configitem():
     assert ci() == 32
     assert sec.comments['tstnm'][1] == 'updated Descr'
 
-    #It's useful to go back to the default to allow other test functions to
-    #call this one and still be in the default configuration.
+    # It's useful to go back to the default to allow other test functions to
+    # call this one and still be in the default configuration.
     ci.description = 'this is a Description'
     ci.set(34)
     assert ci() == 34
@@ -69,12 +73,11 @@ def test_configitem():
 
 def test_configitem_save(tmpdir):
     from ..configuration import ConfigurationItem, get_config
-    from shutil import copy
 
     ci = ConfigurationItem('tstnm2', 42, 'this is another Description')
     apycfg = get_config(ci.module)
 
-    #now try saving
+    # now try saving
 
     while apycfg.parent is not apycfg:
         apycfg = apycfg.parent
@@ -92,7 +95,7 @@ def test_configitem_save(tmpdir):
         # We had used LocalPath's `copy` method here, but it copies
         # the file in TEXT mode, destroying newlines on Windows.  We
         # need to do a binary copy.
-        copy(tmpdir.join('astropy.cfg').strpath,
+        shutil.copy(tmpdir.join('astropy.cfg').strpath,
              tmpdir.join('astropy.cfg2').strpath)
         # tmpdir.join('astropy.cfg').copy(tmpdir.join('astropy.cfg2'))
         apycfg.filename = tmpdir.join('astropy.cfg2').realpath().strpath
@@ -112,7 +115,7 @@ def test_configitem_save(tmpdir):
             assert '[config.tests.test_configs]' in lns
             assert 'tstnm2 = 31' in lns
 
-        #also try to save one that doesn't yet exist
+        # also try to save one that doesn't yet exist
         apycfg.filename = tmpdir.join('astropy.cfg3').realpath().strpath
         ci.save()
 
@@ -166,7 +169,7 @@ def test_configitem_options(tmpdir):
         cio.set('op5')
     assert sec['tstnmo'] == 'op2'
 
-    #now try saving
+    # now try saving
     apycfg = sec
     while apycfg.parent is not apycfg:
         apycfg = apycfg.parent
@@ -188,7 +191,7 @@ def test_config_noastropy_fallback(monkeypatch, recwarn):
     from ...tests.helper import pytest
     from .. import paths, configuration
 
-    #make sure the config directory is not searched
+    # make sure the config directory is not searched
     monkeypatch.setenv('XDG_CONFIG_HOME', 'foo')
     monkeypatch.delenv('XDG_CONFIG_HOME')
 
@@ -202,7 +205,7 @@ def test_config_noastropy_fallback(monkeypatch, recwarn):
     monkeypatch.setattr(configuration, '_cfgobjs', {})
 
     with pytest.raises(OSError):
-        #make sure the config dir search fails
+        # make sure the config dir search fails
         paths.get_config_dir()
 
     # now run the basic tests, and make sure the warning about no astropy
@@ -219,7 +222,6 @@ def test_get_config_items():
     """ Checks if the get_config_items function is working correctly, using
     `ConfigurationItem` objects from this module.
     """
-    import sys
 
     from ..configuration import get_config_items
 
diff --git a/astropy/constants/__init__.py b/astropy/constants/__init__.py
index 00c1dfe..92dfba5 100644
--- a/astropy/constants/__init__.py
+++ b/astropy/constants/__init__.py
@@ -10,9 +10,11 @@ A typical use case might be::
     >>> m = m_e
     >>> E = m * c**2
     >>> E.to('MeV')
-    <Quantity 0.510998927603 MeV>
+    <Quantity 0.51099... MeV>
 
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 import itertools
 
diff --git a/astropy/constants/cgs.py b/astropy/constants/cgs.py
index bd2f192..af31eae 100644
--- a/astropy/constants/cgs.py
+++ b/astropy/constants/cgs.py
@@ -3,6 +3,8 @@
 Astronomical and physics constants in cgs units.  See :mod:`astropy.constants`
 for a complete listing of constants defined in Astropy.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 # Only constants that cannot be converted directly from S.I. are defined here.
 
diff --git a/astropy/constants/constant.py b/astropy/constants/constant.py
index ebc89a3..e193a66 100644
--- a/astropy/constants/constant.py
+++ b/astropy/constants/constant.py
@@ -1,12 +1,16 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+from ..extern import six
 
 import functools
 import types
 import warnings
 
-from ..units.core import Unit, UnitsException
+from ..units.core import Unit, UnitsError
 from ..units.quantity import Quantity
 from ..utils import lazyproperty
+from ..utils.exceptions import AstropyUserWarning
 
 __all__ = ['Constant', 'EMConstant']
 
@@ -34,16 +38,16 @@ class ConstantMeta(type):
                 name_lower = self.name.lower()
                 instances = Constant._registry[name_lower]
                 if not self._checked_units:
-                    for inst in instances.values():
+                    for inst in six.itervalues(instances):
                         try:
                             self.unit.to(inst.unit)
-                        except UnitsException:
+                        except UnitsError:
                             Constant._has_incompatible_units.add(name_lower)
                     self._checked_units = True
 
                 if (not self.system and
                         name_lower in Constant._has_incompatible_units):
-                    systems = sorted(filter(None, instances))
+                    systems = sorted([x for x in instances if x])
                     raise TypeError(
                         'Constant {0!r} does not have physically compatible '
                         'units across all systems of units and cannot be '
@@ -57,8 +61,11 @@ class ConstantMeta(type):
 
         # The wrapper applies to so many of the __ methods that it's easier to
         # just exclude the ones it doesn't apply to
-        exclude = set(['__init__', '__str__', '__repr__'])
-        for attr, value in vars(Quantity).items():
+        exclude = set(['__new__', '__array_finalize__', '__array_wrap__',
+                       '__dir__', '__getattr__', '__init__', '__str__',
+                       '__repr__', '__hash__', '__iter__', '__getitem__',
+                       '__len__', '__nonzero__'])
+        for attr, value in list(six.iteritems(vars(Quantity))):
             if (isinstance(value, types.FunctionType) and
                     attr.startswith('__') and attr.endswith('__') and
                     attr not in exclude):
@@ -67,15 +74,13 @@ class ConstantMeta(type):
         return super(ConstantMeta, mcls).__new__(mcls, name, bases, d)
 
 
+ at six.add_metaclass(ConstantMeta)
 class Constant(Quantity):
     """A physical or astronomical constant.
 
     These objects are quantities that are meant to represent physical
     constants.
     """
-
-    __metaclass__ = ConstantMeta
-
     _registry = {}
     _has_incompatible_units = set()
 
@@ -85,11 +90,11 @@ class Constant(Quantity):
         instances = Constant._registry.setdefault(name_lower, {})
         if system in instances:
             warnings.warn('Constant {0!r} is already has a definition in the '
-                          '{1!r} system'.format(name, system))
+                          '{1!r} system'.format(name, system), AstropyUserWarning)
 
-        inst = super(Constant, cls).__new__(cls)
+        inst = super(Constant, cls).__new__(cls, value)
 
-        for c in instances.values():
+        for c in six.itervalues(instances):
             if system is not None and not hasattr(c.__class__, system):
                 setattr(c, system, inst)
             if c.system is not None and not hasattr(inst.__class__, c.system):
diff --git a/astropy/wcs/tests/__init__.py b/astropy/constants/setup_package.py
similarity index 62%
copy from astropy/wcs/tests/__init__.py
copy to astropy/constants/setup_package.py
index 975bdd1..3cd9f7c 100644
--- a/astropy/wcs/tests/__init__.py
+++ b/astropy/constants/setup_package.py
@@ -1,2 +1,5 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
+
+def requires_2to3():
+    return False
diff --git a/astropy/constants/si.py b/astropy/constants/si.py
index 2b3433b..54234a4 100644
--- a/astropy/constants/si.py
+++ b/astropy/constants/si.py
@@ -3,6 +3,8 @@
 Astronomical and physics constants in SI units.  See :mod:`astropy.constants`
 for a complete listing of constants defined in Astropy.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 import numpy as np
 
@@ -30,6 +32,10 @@ c = Constant('c', "Speed of light in vacuum", 2.99792458e8, 'm / (s)', 0.,
 G = Constant('G', "Gravitational constant", 6.67384e-11, 'm3 / (kg s2)',
              0.00080e-11, 'CODATA 2010', system='si')
 
+# Standard acceleration of gravity
+g0 = Constant('g0', "Standard acceleration of gravity", 9.80665, 'm / s2', 0.0,
+              'CODATA 2010', system='si')
+
 # Proton mass
 m_p = Constant('m_p', "Proton mass", 1.672621777e-27, 'kg', 0.000000074e-27,
                'CODATA 2010', system='si')
@@ -42,6 +48,10 @@ m_n = Constant('m_n', "Neutron mass", 1.674927351e-27, 'kg', 0.000000074e-27,
 m_e = Constant('m_e', "Electron mass", 9.10938291e-31, 'kg', 0.00000040e-31,
                'CODATA 2010', system='si')
 
+# Atomic mass
+u = Constant('u', "Atomic mass", 1.660538921e-27, 'kg', 0.000000073e-27,
+             'CODATA 2010', system='si')
+
 # Stefan-Boltzmann constant
 sigma_sb = Constant('sigma_sb', "Stefan-Boltzmann constant", 5.670373e-8,
                     'W / (K4 m2)', 0.000021e-8, 'CODATA 2010', system='si')
@@ -50,6 +60,10 @@ sigma_sb = Constant('sigma_sb', "Stefan-Boltzmann constant", 5.670373e-8,
 e = EMConstant('e', 'Electron charge', 1.602176565e-19, 'C', 0.000000035e-19,
                'CODATA 2010', system='si')
 
+# Electric constant
+eps0 = EMConstant('eps0', 'Electic constant', 8.854187817e-12, 'F/m', 0.0,
+                  'CODATA 2010', system='si')
+
 # Avogadro's number
 N_A = Constant('N_A', "Avogadro's number", 6.02214129e23, '1 / (mol)',
                0.00000027e23, 'CODATA 2010', system='si')
@@ -62,6 +76,26 @@ R = Constant('R', "Gas constant", 8.3144621, 'J / (K mol)', 0.0000075,
 Ryd = Constant('Ryd', 'Rydberg constant', 10973731.568539, '1 / (m)', 0.000055,
                'CODATA 2010', system='si')
 
+# Bohr radius
+a0 = Constant('a0', "Bohr radius", 0.52917721092e-10, 'm', 0.00000000017e-10,
+              'CODATA 2010', system='si')
+
+# Bohr magneton
+muB = Constant('muB', "Bohr magneton", 927.400968e-26, 'J/T', 0.00002e-26,
+               'CODATA 2010', system='si')
+
+# Fine structure constant
+alpha = Constant('alpha', "Fine-structure constant", 7.2973525698e-3, '',
+                 0.0000000024e-3, 'CODATA 2010', system='si')
+
+# Atmosphere
+atm = Constant('atmosphere', "Atmosphere", 101325, 'Pa', 0.0,
+               'CODATA 2010', system='si')
+
+# Magnetic constant
+mu0 = Constant('mu0', "Magnetic constant", 4.0e-7 * np.pi, 'N/A2', 0.0,
+               'CODATA 2010', system='si')
+
 # DISTANCE
 
 # Astronomical Unit
diff --git a/astropy/constants/tests/__init__.py b/astropy/constants/tests/__init__.py
index e69de29..800d82e 100644
--- a/astropy/constants/tests/__init__.py
+++ b/astropy/constants/tests/__init__.py
@@ -0,0 +1,2 @@
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
diff --git a/astropy/constants/tests/test_constant.py b/astropy/constants/tests/test_constant.py
index 9d0c659..3311ff3 100644
--- a/astropy/constants/tests/test_constant.py
+++ b/astropy/constants/tests/test_constant.py
@@ -1,5 +1,7 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+from ...extern import six
 
 from .. import Constant
 from ...units import Quantity as Q
@@ -66,13 +68,32 @@ def test_e():
     assert e.esu * E == Q(e.esu.value * E.value, 'Fr V/m')
 
 
+def test_g0():
+    """Tests for #1263 demonstrating how g0 constant should behave."""
+    from .. import g0
+
+    # g0 is an exactly defined constant, so it shouldn't be changing
+    assert g0.value == 9.80665  # default is S.I.
+    assert g0.si.value == 9.80665
+    assert g0.cgs.value == 9.80665e2
+
+    # make sure it has the necessary attributes and they're not blank
+    assert g0.uncertainty == 0  # g0 is a *defined* quantity
+    assert g0.name
+    assert g0.reference
+    assert g0.unit
+
+    # Check that its unit have the correct physical type
+    assert g0.unit.physical_type == 'acceleration'
+
+
 def test_unit():
 
     from ... import units as u
 
     from ... import constants as const
 
-    for key, val in vars(const).iteritems():
+    for key, val in six.iteritems(vars(const)):
         if isinstance(val, Constant):
             # Getting the unit forces the unit parser to run.  Confirm
             # that none of the constants defined in astropy have
diff --git a/astropy/convolution/__init__.py b/astropy/convolution/__init__.py
new file mode 100644
index 0000000..eb8216b
--- /dev/null
+++ b/astropy/convolution/__init__.py
@@ -0,0 +1,10 @@
+from .core import *
+from .kernels import *
+from .utils import discretize_model
+
+try:
+    # Not guaranteed available at setup time
+    from .convolve import convolve, convolve_fft
+except ImportError:
+    if not _ASTROPY_SETUP_:
+        raise
diff --git a/astropy/nddata/convolution/boundary_extend.c b/astropy/convolution/boundary_extend.c
similarity index 88%
rename from astropy/nddata/convolution/boundary_extend.c
rename to astropy/convolution/boundary_extend.c
index ae81c74..a481300 100644
--- a/astropy/nddata/convolution/boundary_extend.c
+++ b/astropy/convolution/boundary_extend.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.18 on Fri Oct 25 12:27:41 2013 */
+/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -249,8 +249,8 @@
 #define _USE_MATH_DEFINES
 #endif
 #include <math.h>
-#define __PYX_HAVE__astropy__nddata__convolution__boundary_extend
-#define __PYX_HAVE_API__astropy__nddata__convolution__boundary_extend
+#define __PYX_HAVE__astropy__convolution__boundary_extend
+#define __PYX_HAVE_API__astropy__convolution__boundary_extend
 #include "string.h"
 #include "stdio.h"
 #include "stdlib.h"
@@ -583,14 +583,14 @@ typedef npy_double __pyx_t_5numpy_double_t;
  */
 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 
-/* "astropy/nddata/convolution/boundary_extend.pyx":6
+/* "astropy/convolution/boundary_extend.pyx":7
  * 
  * DTYPE = np.float
  * ctypedef np.float_t DTYPE_t             # <<<<<<<<<<<<<<
  * 
  * cdef inline int int_max(int a, int b): return a if a >= b else b
  */
-typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t;
+typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t;
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     typedef ::std::complex< float > __pyx_t_float_complex;
@@ -965,20 +965,20 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, cha
 
 /* Module declarations from 'cython' */
 
-/* Module declarations from 'astropy.nddata.convolution.boundary_extend' */
-static CYTHON_INLINE int __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(int, int); /*proto*/
-static CYTHON_INLINE int __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(int, int); /*proto*/
-static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
-#define __Pyx_MODULE_NAME "astropy.nddata.convolution.boundary_extend"
-int __pyx_module_is_main_astropy__nddata__convolution__boundary_extend = 0;
+/* Module declarations from 'astropy.convolution.boundary_extend' */
+static CYTHON_INLINE int __pyx_f_7astropy_11convolution_15boundary_extend_int_max(int, int); /*proto*/
+static CYTHON_INLINE int __pyx_f_7astropy_11convolution_15boundary_extend_int_min(int, int); /*proto*/
+static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
+#define __Pyx_MODULE_NAME "astropy.convolution.boundary_extend"
+int __pyx_module_is_main_astropy__convolution__boundary_extend = 0;
 
-/* Implementation of 'astropy.nddata.convolution.boundary_extend' */
+/* Implementation of 'astropy.convolution.boundary_extend' */
 static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_range;
 static PyObject *__pyx_builtin_RuntimeError;
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convolve1d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2convolve2d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4convolve3d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_convolve1d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_2convolve2d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_4convolve3d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
 static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
 static char __pyx_k_1[] = "Convolution kernel must have odd dimensions";
@@ -989,8 +989,8 @@ static char __pyx_k_11[] = "unknown dtype code in numpy.pxd (%d)";
 static char __pyx_k_12[] = "Format string allocated too short, see comment in numpy.pxd";
 static char __pyx_k_15[] = "Format string allocated too short.";
 static char __pyx_k_19[] = "convolve1d_boundary_extend";
-static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/nddata/convolution/boundary_extend.pyx";
-static char __pyx_k_21[] = "astropy.nddata.convolution.boundary_extend";
+static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/convolution/boundary_extend.pyx";
+static char __pyx_k_21[] = "astropy.convolution.boundary_extend";
 static char __pyx_k_24[] = "convolve2d_boundary_extend";
 static char __pyx_k_27[] = "convolve3d_boundary_extend";
 static char __pyx_k__B[] = "B";
@@ -1122,7 +1122,7 @@ static PyObject *__pyx_k_codeobj_18;
 static PyObject *__pyx_k_codeobj_23;
 static PyObject *__pyx_k_codeobj_26;
 
-/* "astropy/nddata/convolution/boundary_extend.pyx":8
+/* "astropy/convolution/boundary_extend.pyx":9
  * ctypedef np.float_t DTYPE_t
  * 
  * cdef inline int int_max(int a, int b): return a if a >= b else b             # <<<<<<<<<<<<<<
@@ -1130,7 +1130,7 @@ static PyObject *__pyx_k_codeobj_26;
  * 
  */
 
-static CYTHON_INLINE int __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(int __pyx_v_a, int __pyx_v_b) {
+static CYTHON_INLINE int __pyx_f_7astropy_11convolution_15boundary_extend_int_max(int __pyx_v_a, int __pyx_v_b) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -1149,7 +1149,7 @@ static CYTHON_INLINE int __pyx_f_7astropy_6nddata_11convolution_15boundary_exten
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_extend.pyx":9
+/* "astropy/convolution/boundary_extend.pyx":10
  * 
  * cdef inline int int_max(int a, int b): return a if a >= b else b
  * cdef inline int int_min(int a, int b): return a if a <= b else b             # <<<<<<<<<<<<<<
@@ -1157,7 +1157,7 @@ static CYTHON_INLINE int __pyx_f_7astropy_6nddata_11convolution_15boundary_exten
  * cdef extern from "numpy/npy_math.h":
  */
 
-static CYTHON_INLINE int __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(int __pyx_v_a, int __pyx_v_b) {
+static CYTHON_INLINE int __pyx_f_7astropy_11convolution_15boundary_extend_int_min(int __pyx_v_a, int __pyx_v_b) {
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -1177,9 +1177,9 @@ static CYTHON_INLINE int __pyx_f_7astropy_6nddata_11convolution_15boundary_exten
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_1convolve1d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_15boundary_extend_1convolve1d_boundary_extend = {__Pyx_NAMESTR("convolve1d_boundary_extend"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_1convolve1d_boundary_extend, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_1convolve1d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_1convolve1d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_15boundary_extend_1convolve1d_boundary_extend = {__Pyx_NAMESTR("convolve1d_boundary_extend"), (PyCFunction)__pyx_pw_7astropy_11convolution_15boundary_extend_1convolve1d_boundary_extend, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_1convolve1d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   PyObject *__pyx_r = 0;
@@ -1205,11 +1205,11 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_1conv
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_extend", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_extend", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_extend") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_extend") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -1222,15 +1222,15 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_1conv
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_extend", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_extend", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_extend.convolve1d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve1d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convolve1d_boundary_extend(__pyx_self, __pyx_v_f, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_15boundary_extend_convolve1d_boundary_extend(__pyx_self, __pyx_v_f, __pyx_v_g);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -1239,7 +1239,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_1conv
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_extend.pyx":18
+/* "astropy/convolution/boundary_extend.pyx":19
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_extend(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
@@ -1247,7 +1247,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_1conv
  * 
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convolve1d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
+static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_convolve1d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
   int __pyx_v_nx;
   int __pyx_v_nkx;
   int __pyx_v_wkx;
@@ -1258,10 +1258,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
   int __pyx_v_ii;
   int __pyx_v_iimin;
   int __pyx_v_iimax;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -1323,16 +1323,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":21
+  /* "astropy/convolution/boundary_extend.pyx":22
  *                                np.ndarray[DTYPE_t, ndim=1] g):
  * 
  *     if g.shape[0] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -1342,23 +1342,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
   __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
   if (__pyx_t_1) {
 
-    /* "astropy/nddata/convolution/boundary_extend.pyx":22
+    /* "astropy/convolution/boundary_extend.pyx":23
  * 
  *     if g.shape[0] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":24
+  /* "astropy/convolution/boundary_extend.pyx":25
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -1366,24 +1366,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (__pyx_t_1) {
-    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_6 = __pyx_t_5;
   } else {
@@ -1391,11 +1391,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
   }
   if (unlikely(!__pyx_t_6)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":26
+  /* "astropy/convolution/boundary_extend.pyx":27
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -1404,7 +1404,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":27
+  /* "astropy/convolution/boundary_extend.pyx":28
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -1413,7 +1413,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":28
+  /* "astropy/convolution/boundary_extend.pyx":29
  *     cdef int nx = f.shape[0]
  *     cdef int nkx = g.shape[0]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -1422,48 +1422,48 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":29
+  /* "astropy/convolution/boundary_extend.pyx":30
  *     cdef int nkx = g.shape[0]
  *     cdef int wkx = nkx // 2
  *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)
  *     cdef unsigned int i, iii
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_7);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -1471,48 +1471,48 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":30
+  /* "astropy/convolution/boundary_extend.pyx":31
  *     cdef int wkx = nkx // 2
  *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef unsigned int i, iii
  *     cdef int ii
  */
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
-  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_t_2));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_9 = ((PyArrayObject *)__pyx_t_3);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -1520,7 +1520,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":40
+  /* "astropy/convolution/boundary_extend.pyx":41
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -1531,7 +1531,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_extend.pyx":41
+    /* "astropy/convolution/boundary_extend.pyx":42
  *     # neighboring values
  *     for i in range(nx):
  *         if npy_isnan(f[i]):             # <<<<<<<<<<<<<<
@@ -1539,10 +1539,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  *             bot = 0.
  */
     __pyx_t_12 = __pyx_v_i;
-    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
+    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
     if (__pyx_t_6) {
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":42
+      /* "astropy/convolution/boundary_extend.pyx":43
  *     for i in range(nx):
  *         if npy_isnan(f[i]):
  *             top = 0.             # <<<<<<<<<<<<<<
@@ -1551,7 +1551,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
       __pyx_v_top = 0.;
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":43
+      /* "astropy/convolution/boundary_extend.pyx":44
  *         if npy_isnan(f[i]):
  *             top = 0.
  *             bot = 0.             # <<<<<<<<<<<<<<
@@ -1560,7 +1560,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
       __pyx_v_bot = 0.;
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":44
+      /* "astropy/convolution/boundary_extend.pyx":45
  *             top = 0.
  *             bot = 0.
  *             iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -1569,7 +1569,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
       __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":45
+      /* "astropy/convolution/boundary_extend.pyx":46
  *             bot = 0.
  *             iimin = i - wkx
  *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -1578,7 +1578,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
       __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":46
+      /* "astropy/convolution/boundary_extend.pyx":47
  *             iimin = i - wkx
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -1589,16 +1589,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
       for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
         __pyx_v_ii = __pyx_t_14;
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":47
+        /* "astropy/convolution/boundary_extend.pyx":48
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):
  *                 iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
  *                 val = f[iii]
  *                 if not npy_isnan(val):
  */
-        __pyx_v_iii = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
+        __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":48
+        /* "astropy/convolution/boundary_extend.pyx":49
  *             for ii in range(iimin, iimax):
  *                 iii = int_min(int_max(ii, 0), nx - 1)
  *                 val = f[iii]             # <<<<<<<<<<<<<<
@@ -1606,9 +1606,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  */
         __pyx_t_15 = __pyx_v_iii;
-        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_f.diminfo[0].strides));
+        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_f.diminfo[0].strides));
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":49
+        /* "astropy/convolution/boundary_extend.pyx":50
  *                 iii = int_min(int_max(ii, 0), nx - 1)
  *                 val = f[iii]
  *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -1618,7 +1618,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
         __pyx_t_6 = (!npy_isnan(__pyx_v_val));
         if (__pyx_t_6) {
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":50
+          /* "astropy/convolution/boundary_extend.pyx":51
  *                 val = f[iii]
  *                 if not npy_isnan(val):
  *                     ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
@@ -1626,9 +1626,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  *                     bot += ker
  */
           __pyx_t_16 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_g.diminfo[0].strides));
+          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_g.diminfo[0].strides));
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":51
+          /* "astropy/convolution/boundary_extend.pyx":52
  *                 if not npy_isnan(val):
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  *                     top += val * ker             # <<<<<<<<<<<<<<
@@ -1637,7 +1637,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
           __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":52
+          /* "astropy/convolution/boundary_extend.pyx":53
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  *                     top += val * ker
  *                     bot += ker             # <<<<<<<<<<<<<<
@@ -1650,7 +1650,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
         __pyx_L9:;
       }
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":54
+      /* "astropy/convolution/boundary_extend.pyx":55
  *                     bot += ker
  * 
  *             if bot != 0.:             # <<<<<<<<<<<<<<
@@ -1660,7 +1660,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
       __pyx_t_6 = (__pyx_v_bot != 0.);
       if (__pyx_t_6) {
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":55
+        /* "astropy/convolution/boundary_extend.pyx":56
  * 
  *             if bot != 0.:
  *                 fixed[i] = top / bot             # <<<<<<<<<<<<<<
@@ -1669,15 +1669,15 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
         if (unlikely(__pyx_v_bot == 0)) {
           PyErr_Format(PyExc_ZeroDivisionError, "float division");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         __pyx_t_17 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
         goto __pyx_L10;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":57
+        /* "astropy/convolution/boundary_extend.pyx":58
  *                 fixed[i] = top / bot
  *             else:
  *                 fixed[i] = f[i]             # <<<<<<<<<<<<<<
@@ -1686,14 +1686,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
         __pyx_t_18 = __pyx_v_i;
         __pyx_t_19 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides));
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides));
       }
       __pyx_L10:;
       goto __pyx_L6;
     }
     /*else*/ {
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":59
+      /* "astropy/convolution/boundary_extend.pyx":60
  *                 fixed[i] = f[i]
  *         else:
  *             fixed[i] = f[i]             # <<<<<<<<<<<<<<
@@ -1702,12 +1702,12 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
       __pyx_t_20 = __pyx_v_i;
       __pyx_t_21 = __pyx_v_i;
-      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides));
+      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides));
     }
     __pyx_L6:;
   }
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":62
+  /* "astropy/convolution/boundary_extend.pyx":63
  * 
  *     # Now run the proper convolution
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -1718,7 +1718,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_extend.pyx":63
+    /* "astropy/convolution/boundary_extend.pyx":64
  *     # Now run the proper convolution
  *     for i in range(nx):
  *         if not npy_isnan(fixed[i]):             # <<<<<<<<<<<<<<
@@ -1726,10 +1726,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  *             bot = 0.
  */
     __pyx_t_22 = __pyx_v_i;
-    __pyx_t_6 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides))));
+    __pyx_t_6 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides))));
     if (__pyx_t_6) {
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":64
+      /* "astropy/convolution/boundary_extend.pyx":65
  *     for i in range(nx):
  *         if not npy_isnan(fixed[i]):
  *             top = 0.             # <<<<<<<<<<<<<<
@@ -1738,7 +1738,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
       __pyx_v_top = 0.;
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":65
+      /* "astropy/convolution/boundary_extend.pyx":66
  *         if not npy_isnan(fixed[i]):
  *             top = 0.
  *             bot = 0.             # <<<<<<<<<<<<<<
@@ -1747,7 +1747,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
       __pyx_v_bot = 0.;
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":66
+      /* "astropy/convolution/boundary_extend.pyx":67
  *             top = 0.
  *             bot = 0.
  *             iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -1756,7 +1756,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
       __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":67
+      /* "astropy/convolution/boundary_extend.pyx":68
  *             bot = 0.
  *             iimin = i - wkx
  *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -1765,7 +1765,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
       __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":68
+      /* "astropy/convolution/boundary_extend.pyx":69
  *             iimin = i - wkx
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -1776,16 +1776,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
       for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
         __pyx_v_ii = __pyx_t_14;
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":69
+        /* "astropy/convolution/boundary_extend.pyx":70
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):
  *                 iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
  *                 val = fixed[iii]
  *                 ker = g[<unsigned int>(wkx + ii - i)]
  */
-        __pyx_v_iii = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
+        __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":70
+        /* "astropy/convolution/boundary_extend.pyx":71
  *             for ii in range(iimin, iimax):
  *                 iii = int_min(int_max(ii, 0), nx - 1)
  *                 val = fixed[iii]             # <<<<<<<<<<<<<<
@@ -1793,9 +1793,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  *                 if not npy_isnan(val):
  */
         __pyx_t_23 = __pyx_v_iii;
-        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_fixed.diminfo[0].strides));
+        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_fixed.diminfo[0].strides));
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":71
+        /* "astropy/convolution/boundary_extend.pyx":72
  *                 iii = int_min(int_max(ii, 0), nx - 1)
  *                 val = fixed[iii]
  *                 ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
@@ -1803,9 +1803,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  *                     top += val * ker
  */
         __pyx_t_24 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides));
+        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides));
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":72
+        /* "astropy/convolution/boundary_extend.pyx":73
  *                 val = fixed[iii]
  *                 ker = g[<unsigned int>(wkx + ii - i)]
  *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -1815,7 +1815,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
         __pyx_t_6 = (!npy_isnan(__pyx_v_val));
         if (__pyx_t_6) {
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":73
+          /* "astropy/convolution/boundary_extend.pyx":74
  *                 ker = g[<unsigned int>(wkx + ii - i)]
  *                 if not npy_isnan(val):
  *                     top += val * ker             # <<<<<<<<<<<<<<
@@ -1824,7 +1824,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
           __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":74
+          /* "astropy/convolution/boundary_extend.pyx":75
  *                 if not npy_isnan(val):
  *                     top += val * ker
  *                     bot += ker             # <<<<<<<<<<<<<<
@@ -1837,7 +1837,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
         __pyx_L16:;
       }
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":75
+      /* "astropy/convolution/boundary_extend.pyx":76
  *                     top += val * ker
  *                     bot += ker
  *             if bot != 0:             # <<<<<<<<<<<<<<
@@ -1847,7 +1847,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
       __pyx_t_6 = (__pyx_v_bot != 0.0);
       if (__pyx_t_6) {
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":76
+        /* "astropy/convolution/boundary_extend.pyx":77
  *                     bot += ker
  *             if bot != 0:
  *                 conv[i] = top / bot             # <<<<<<<<<<<<<<
@@ -1856,15 +1856,15 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
         if (unlikely(__pyx_v_bot == 0)) {
           PyErr_Format(PyExc_ZeroDivisionError, "float division");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         __pyx_t_25 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
         goto __pyx_L17;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":78
+        /* "astropy/convolution/boundary_extend.pyx":79
  *                 conv[i] = top / bot
  *             else:
  *                 conv[i] = fixed[i]             # <<<<<<<<<<<<<<
@@ -1873,14 +1873,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
         __pyx_t_26 = __pyx_v_i;
         __pyx_t_27 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides));
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides));
       }
       __pyx_L17:;
       goto __pyx_L13;
     }
     /*else*/ {
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":80
+      /* "astropy/convolution/boundary_extend.pyx":81
  *                 conv[i] = fixed[i]
  *         else:
  *             conv[i] = fixed[i]             # <<<<<<<<<<<<<<
@@ -1889,12 +1889,12 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
  */
       __pyx_t_28 = __pyx_v_i;
       __pyx_t_29 = __pyx_v_i;
-      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides));
+      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides));
     }
     __pyx_L13:;
   }
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":82
+  /* "astropy/convolution/boundary_extend.pyx":83
  *             conv[i] = fixed[i]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -1920,7 +1920,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_extend.convolve1d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve1d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -1937,9 +1937,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_convo
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_3convolve2d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_15boundary_extend_3convolve2d_boundary_extend = {__Pyx_NAMESTR("convolve2d_boundary_extend"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_3convolve2d_boundary_extend, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_3convolve2d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_3convolve2d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_15boundary_extend_3convolve2d_boundary_extend = {__Pyx_NAMESTR("convolve2d_boundary_extend"), (PyCFunction)__pyx_pw_7astropy_11convolution_15boundary_extend_3convolve2d_boundary_extend, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_3convolve2d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   PyObject *__pyx_r = 0;
@@ -1965,11 +1965,11 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_3conv
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_extend", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_extend", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_extend") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_extend") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -1982,15 +1982,15 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_3conv
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_extend", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_extend", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_extend.convolve2d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve2d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2convolve2d_boundary_extend(__pyx_self, __pyx_v_f, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_15boundary_extend_2convolve2d_boundary_extend(__pyx_self, __pyx_v_f, __pyx_v_g);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -1999,7 +1999,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_3conv
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_extend.pyx":86
+/* "astropy/convolution/boundary_extend.pyx":87
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_extend(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
@@ -2007,7 +2007,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_3conv
  * 
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2convolve2d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
+static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_2convolve2d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
   int __pyx_v_nx;
   int __pyx_v_ny;
   int __pyx_v_nkx;
@@ -2026,10 +2026,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
   int __pyx_v_iimax;
   int __pyx_v_jjmin;
   int __pyx_v_jjmax;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -2111,16 +2111,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1];
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":89
+  /* "astropy/convolution/boundary_extend.pyx":90
  *                                np.ndarray[DTYPE_t, ndim=2] g):
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -2136,23 +2136,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
   }
   if (__pyx_t_3) {
 
-    /* "astropy/nddata/convolution/boundary_extend.pyx":90
+    /* "astropy/convolution/boundary_extend.pyx":91
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":92
+  /* "astropy/convolution/boundary_extend.pyx":93
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -2160,24 +2160,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (__pyx_t_3) {
-    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_2 = __pyx_t_1;
   } else {
@@ -2185,11 +2185,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
   }
   if (unlikely(!__pyx_t_2)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":94
+  /* "astropy/convolution/boundary_extend.pyx":95
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -2198,7 +2198,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":95
+  /* "astropy/convolution/boundary_extend.pyx":96
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
@@ -2207,7 +2207,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
   __pyx_v_ny = (__pyx_v_f->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":96
+  /* "astropy/convolution/boundary_extend.pyx":97
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -2216,7 +2216,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":97
+  /* "astropy/convolution/boundary_extend.pyx":98
  *     cdef int ny = f.shape[1]
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
@@ -2225,7 +2225,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
   __pyx_v_nky = (__pyx_v_g->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":98
+  /* "astropy/convolution/boundary_extend.pyx":99
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -2234,7 +2234,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":99
+  /* "astropy/convolution/boundary_extend.pyx":100
  *     cdef int nky = g.shape[1]
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
@@ -2243,23 +2243,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
   __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":100
+  /* "astropy/convolution/boundary_extend.pyx":101
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2
  *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)
  *     cdef unsigned int i, j, iii, jjj
  */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
@@ -2267,29 +2267,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_4 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_7));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
   __pyx_t_7 = 0;
-  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_7));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1];
     }
   }
@@ -2297,23 +2297,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":101
+  /* "astropy/convolution/boundary_extend.pyx":102
  *     cdef int wky = nky // 2
  *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef unsigned int i, j, iii, jjj
  *     cdef int ii, jj
  */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
@@ -2321,29 +2321,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_4 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_9 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1];
     }
   }
@@ -2351,7 +2351,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":111
+  /* "astropy/convolution/boundary_extend.pyx":112
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -2362,7 +2362,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_extend.pyx":112
+    /* "astropy/convolution/boundary_extend.pyx":113
  *     # neighboring values
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -2373,7 +2373,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
     for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
       __pyx_v_j = __pyx_t_13;
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":113
+      /* "astropy/convolution/boundary_extend.pyx":114
  *     for i in range(nx):
  *         for j in range(ny):
  *             if npy_isnan(f[i, j]):             # <<<<<<<<<<<<<<
@@ -2382,10 +2382,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
       __pyx_t_14 = __pyx_v_i;
       __pyx_t_15 = __pyx_v_j;
-      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
+      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
       if (__pyx_t_2) {
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":114
+        /* "astropy/convolution/boundary_extend.pyx":115
  *         for j in range(ny):
  *             if npy_isnan(f[i, j]):
  *                 top = 0.             # <<<<<<<<<<<<<<
@@ -2394,7 +2394,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_top = 0.;
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":115
+        /* "astropy/convolution/boundary_extend.pyx":116
  *             if npy_isnan(f[i, j]):
  *                 top = 0.
  *                 bot = 0.             # <<<<<<<<<<<<<<
@@ -2403,7 +2403,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_bot = 0.;
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":116
+        /* "astropy/convolution/boundary_extend.pyx":117
  *                 top = 0.
  *                 bot = 0.
  *                 iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -2412,7 +2412,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":117
+        /* "astropy/convolution/boundary_extend.pyx":118
  *                 bot = 0.
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -2421,7 +2421,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":118
+        /* "astropy/convolution/boundary_extend.pyx":119
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -2430,7 +2430,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":119
+        /* "astropy/convolution/boundary_extend.pyx":120
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -2439,7 +2439,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":120
+        /* "astropy/convolution/boundary_extend.pyx":121
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -2450,7 +2450,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
         for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
           __pyx_v_ii = __pyx_t_17;
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":121
+          /* "astropy/convolution/boundary_extend.pyx":122
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -2461,25 +2461,25 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
           for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
             __pyx_v_jj = __pyx_t_19;
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":122
+            /* "astropy/convolution/boundary_extend.pyx":123
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):
  *                         iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
  *                         jjj = int_min(int_max(jj, 0), ny - 1)
  *                         val = f[iii, jjj]
  */
-            __pyx_v_iii = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
+            __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":123
+            /* "astropy/convolution/boundary_extend.pyx":124
  *                     for jj in range(jjmin, jjmax):
  *                         iii = int_min(int_max(ii, 0), nx - 1)
  *                         jjj = int_min(int_max(jj, 0), ny - 1)             # <<<<<<<<<<<<<<
  *                         val = f[iii, jjj]
  *                         if not npy_isnan(val):
  */
-            __pyx_v_jjj = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
+            __pyx_v_jjj = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":124
+            /* "astropy/convolution/boundary_extend.pyx":125
  *                         iii = int_min(int_max(ii, 0), nx - 1)
  *                         jjj = int_min(int_max(jj, 0), ny - 1)
  *                         val = f[iii, jjj]             # <<<<<<<<<<<<<<
@@ -2488,9 +2488,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
             __pyx_t_20 = __pyx_v_iii;
             __pyx_t_21 = __pyx_v_jjj;
-            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_f.diminfo[1].strides));
+            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_f.diminfo[1].strides));
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":125
+            /* "astropy/convolution/boundary_extend.pyx":126
  *                         jjj = int_min(int_max(jj, 0), ny - 1)
  *                         val = f[iii, jjj]
  *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -2500,7 +2500,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
             __pyx_t_2 = (!npy_isnan(__pyx_v_val));
             if (__pyx_t_2) {
 
-              /* "astropy/nddata/convolution/boundary_extend.pyx":127
+              /* "astropy/convolution/boundary_extend.pyx":128
  *                         if not npy_isnan(val):
  *                             ker = g[<unsigned int>(wkx + ii - i),
  *                                     <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
@@ -2509,9 +2509,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
               __pyx_t_22 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
               __pyx_t_23 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_g.diminfo[1].strides));
+              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_g.diminfo[1].strides));
 
-              /* "astropy/nddata/convolution/boundary_extend.pyx":128
+              /* "astropy/convolution/boundary_extend.pyx":129
  *                             ker = g[<unsigned int>(wkx + ii - i),
  *                                     <unsigned int>(wky + jj - j)]
  *                             top += val * ker             # <<<<<<<<<<<<<<
@@ -2520,7 +2520,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
               __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-              /* "astropy/nddata/convolution/boundary_extend.pyx":129
+              /* "astropy/convolution/boundary_extend.pyx":130
  *                                     <unsigned int>(wky + jj - j)]
  *                             top += val * ker
  *                             bot += ker             # <<<<<<<<<<<<<<
@@ -2534,7 +2534,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
           }
         }
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":131
+        /* "astropy/convolution/boundary_extend.pyx":132
  *                             bot += ker
  * 
  *                 if bot != 0.:             # <<<<<<<<<<<<<<
@@ -2544,7 +2544,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
         __pyx_t_2 = (__pyx_v_bot != 0.);
         if (__pyx_t_2) {
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":132
+          /* "astropy/convolution/boundary_extend.pyx":133
  * 
  *                 if bot != 0.:
  *                     fixed[i, j] = top / bot             # <<<<<<<<<<<<<<
@@ -2553,16 +2553,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
           if (unlikely(__pyx_v_bot == 0)) {
             PyErr_Format(PyExc_ZeroDivisionError, "float division");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           __pyx_t_24 = __pyx_v_i;
           __pyx_t_25 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
           goto __pyx_L14;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":134
+          /* "astropy/convolution/boundary_extend.pyx":135
  *                     fixed[i, j] = top / bot
  *                 else:
  *                     fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
@@ -2573,14 +2573,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
           __pyx_t_27 = __pyx_v_j;
           __pyx_t_28 = __pyx_v_i;
           __pyx_t_29 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_f.diminfo[1].strides));
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_f.diminfo[1].strides));
         }
         __pyx_L14:;
         goto __pyx_L8;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":136
+        /* "astropy/convolution/boundary_extend.pyx":137
  *                     fixed[i, j] = f[i, j]
  *             else:
  *                 fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
@@ -2591,13 +2591,13 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
         __pyx_t_31 = __pyx_v_j;
         __pyx_t_32 = __pyx_v_i;
         __pyx_t_33 = __pyx_v_j;
-        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_f.diminfo[1].strides));
+        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_f.diminfo[1].strides));
       }
       __pyx_L8:;
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":139
+  /* "astropy/convolution/boundary_extend.pyx":140
  * 
  *     # Now run the proper convolution
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -2608,7 +2608,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_extend.pyx":140
+    /* "astropy/convolution/boundary_extend.pyx":141
  *     # Now run the proper convolution
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -2619,7 +2619,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
     for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
       __pyx_v_j = __pyx_t_13;
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":141
+      /* "astropy/convolution/boundary_extend.pyx":142
  *     for i in range(nx):
  *         for j in range(ny):
  *             if not npy_isnan(fixed[i, j]):             # <<<<<<<<<<<<<<
@@ -2628,10 +2628,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
       __pyx_t_34 = __pyx_v_i;
       __pyx_t_35 = __pyx_v_j;
-      __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[1].strides))));
+      __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[1].strides))));
       if (__pyx_t_2) {
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":142
+        /* "astropy/convolution/boundary_extend.pyx":143
  *         for j in range(ny):
  *             if not npy_isnan(fixed[i, j]):
  *                 top = 0.             # <<<<<<<<<<<<<<
@@ -2640,7 +2640,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_top = 0.;
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":143
+        /* "astropy/convolution/boundary_extend.pyx":144
  *             if not npy_isnan(fixed[i, j]):
  *                 top = 0.
  *                 bot = 0.             # <<<<<<<<<<<<<<
@@ -2649,7 +2649,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_bot = 0.;
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":144
+        /* "astropy/convolution/boundary_extend.pyx":145
  *                 top = 0.
  *                 bot = 0.
  *                 iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -2658,7 +2658,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":145
+        /* "astropy/convolution/boundary_extend.pyx":146
  *                 bot = 0.
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -2667,7 +2667,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":146
+        /* "astropy/convolution/boundary_extend.pyx":147
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -2676,7 +2676,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":147
+        /* "astropy/convolution/boundary_extend.pyx":148
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -2685,7 +2685,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
         __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":148
+        /* "astropy/convolution/boundary_extend.pyx":149
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -2696,7 +2696,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
         for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
           __pyx_v_ii = __pyx_t_17;
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":149
+          /* "astropy/convolution/boundary_extend.pyx":150
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -2707,25 +2707,25 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
           for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
             __pyx_v_jj = __pyx_t_19;
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":150
+            /* "astropy/convolution/boundary_extend.pyx":151
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):
  *                         iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
  *                         jjj = int_min(int_max(jj, 0), ny - 1)
  *                         val = fixed[iii, jjj]
  */
-            __pyx_v_iii = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
+            __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":151
+            /* "astropy/convolution/boundary_extend.pyx":152
  *                     for jj in range(jjmin, jjmax):
  *                         iii = int_min(int_max(ii, 0), nx - 1)
  *                         jjj = int_min(int_max(jj, 0), ny - 1)             # <<<<<<<<<<<<<<
  *                         val = fixed[iii, jjj]
  *                         ker = g[<unsigned int>(wkx + ii - i),
  */
-            __pyx_v_jjj = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
+            __pyx_v_jjj = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":152
+            /* "astropy/convolution/boundary_extend.pyx":153
  *                         iii = int_min(int_max(ii, 0), nx - 1)
  *                         jjj = int_min(int_max(jj, 0), ny - 1)
  *                         val = fixed[iii, jjj]             # <<<<<<<<<<<<<<
@@ -2734,9 +2734,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
             __pyx_t_36 = __pyx_v_iii;
             __pyx_t_37 = __pyx_v_jjj;
-            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides));
+            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides));
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":154
+            /* "astropy/convolution/boundary_extend.pyx":155
  *                         val = fixed[iii, jjj]
  *                         ker = g[<unsigned int>(wkx + ii - i),
  *                                 <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
@@ -2745,9 +2745,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
             __pyx_t_38 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
             __pyx_t_39 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_g.diminfo[1].strides));
+            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_g.diminfo[1].strides));
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":155
+            /* "astropy/convolution/boundary_extend.pyx":156
  *                         ker = g[<unsigned int>(wkx + ii - i),
  *                                 <unsigned int>(wky + jj - j)]
  *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -2757,7 +2757,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
             __pyx_t_2 = (!npy_isnan(__pyx_v_val));
             if (__pyx_t_2) {
 
-              /* "astropy/nddata/convolution/boundary_extend.pyx":156
+              /* "astropy/convolution/boundary_extend.pyx":157
  *                                 <unsigned int>(wky + jj - j)]
  *                         if not npy_isnan(val):
  *                             top += val * ker             # <<<<<<<<<<<<<<
@@ -2766,7 +2766,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
               __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-              /* "astropy/nddata/convolution/boundary_extend.pyx":157
+              /* "astropy/convolution/boundary_extend.pyx":158
  *                         if not npy_isnan(val):
  *                             top += val * ker
  *                             bot += ker             # <<<<<<<<<<<<<<
@@ -2780,7 +2780,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
           }
         }
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":158
+        /* "astropy/convolution/boundary_extend.pyx":159
  *                             top += val * ker
  *                             bot += ker
  *                 if bot != 0:             # <<<<<<<<<<<<<<
@@ -2790,7 +2790,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
         __pyx_t_2 = (__pyx_v_bot != 0.0);
         if (__pyx_t_2) {
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":159
+          /* "astropy/convolution/boundary_extend.pyx":160
  *                             bot += ker
  *                 if bot != 0:
  *                     conv[i, j] = top / bot             # <<<<<<<<<<<<<<
@@ -2799,16 +2799,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
  */
           if (unlikely(__pyx_v_bot == 0)) {
             PyErr_Format(PyExc_ZeroDivisionError, "float division");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           __pyx_t_40 = __pyx_v_i;
           __pyx_t_41 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
           goto __pyx_L25;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":161
+          /* "astropy/convolution/boundary_extend.pyx":162
  *                     conv[i, j] = top / bot
  *                 else:
  *                     conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
@@ -2819,14 +2819,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
           __pyx_t_43 = __pyx_v_j;
           __pyx_t_44 = __pyx_v_i;
           __pyx_t_45 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_fixed.diminf [...]
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[1].strides));
         }
         __pyx_L25:;
         goto __pyx_L19;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":163
+        /* "astropy/convolution/boundary_extend.pyx":164
  *                     conv[i, j] = fixed[i, j]
  *             else:
  *                 conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
@@ -2837,13 +2837,13 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
         __pyx_t_47 = __pyx_v_j;
         __pyx_t_48 = __pyx_v_i;
         __pyx_t_49 = __pyx_v_j;
-        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[ [...]
+        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[1].strides));
       }
       __pyx_L19:;
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":165
+  /* "astropy/convolution/boundary_extend.pyx":166
  *                 conv[i, j] = fixed[i, j]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -2869,7 +2869,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_extend.convolve2d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve2d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -2886,9 +2886,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_2conv
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_5convolve3d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_15boundary_extend_5convolve3d_boundary_extend = {__Pyx_NAMESTR("convolve3d_boundary_extend"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_5convolve3d_boundary_extend, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_5convolve3d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_5convolve3d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_15boundary_extend_5convolve3d_boundary_extend = {__Pyx_NAMESTR("convolve3d_boundary_extend"), (PyCFunction)__pyx_pw_7astropy_11convolution_15boundary_extend_5convolve3d_boundary_extend, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_15boundary_extend_5convolve3d_boundary_extend(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   PyObject *__pyx_r = 0;
@@ -2914,11 +2914,11 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_5conv
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_extend", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_extend", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_extend") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_extend") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -2931,15 +2931,15 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_5conv
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_extend", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_extend", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_extend.convolve3d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve3d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4convolve3d_boundary_extend(__pyx_self, __pyx_v_f, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_15boundary_extend_4convolve3d_boundary_extend(__pyx_self, __pyx_v_f, __pyx_v_g);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -2948,7 +2948,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_5conv
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_extend.pyx":169
+/* "astropy/convolution/boundary_extend.pyx":170
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_extend(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
@@ -2956,7 +2956,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_15boundary_extend_5conv
  * 
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4convolve3d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
+static PyObject *__pyx_pf_7astropy_11convolution_15boundary_extend_4convolve3d_boundary_extend(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
   int __pyx_v_nx;
   int __pyx_v_ny;
   int __pyx_v_nz;
@@ -2983,10 +2983,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
   int __pyx_v_jjmax;
   int __pyx_v_kkmin;
   int __pyx_v_kkmax;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -3090,16 +3090,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_f.diminfo[2].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_f.diminfo[2].shape = __pyx_pybu [...]
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_g.diminfo[2].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_g.diminfo[2].shape = __pyx_pybu [...]
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":172
+  /* "astropy/convolution/boundary_extend.pyx":173
  *                                np.ndarray[DTYPE_t, ndim=3] g):
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -3121,23 +3121,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
   }
   if (__pyx_t_2) {
 
-    /* "astropy/nddata/convolution/boundary_extend.pyx":173
+    /* "astropy/convolution/boundary_extend.pyx":174
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":175
+  /* "astropy/convolution/boundary_extend.pyx":176
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -3145,24 +3145,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   if (__pyx_t_2) {
-    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_4 = __pyx_t_1;
   } else {
@@ -3170,11 +3170,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
   }
   if (unlikely(!__pyx_t_4)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":177
+  /* "astropy/convolution/boundary_extend.pyx":178
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -3183,7 +3183,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":178
+  /* "astropy/convolution/boundary_extend.pyx":179
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
@@ -3192,7 +3192,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
   __pyx_v_ny = (__pyx_v_f->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":179
+  /* "astropy/convolution/boundary_extend.pyx":180
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]
  *     cdef int nz = f.shape[2]             # <<<<<<<<<<<<<<
@@ -3201,7 +3201,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
   __pyx_v_nz = (__pyx_v_f->dimensions[2]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":180
+  /* "astropy/convolution/boundary_extend.pyx":181
  *     cdef int ny = f.shape[1]
  *     cdef int nz = f.shape[2]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -3210,7 +3210,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":181
+  /* "astropy/convolution/boundary_extend.pyx":182
  *     cdef int nz = f.shape[2]
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
@@ -3219,7 +3219,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
   __pyx_v_nky = (__pyx_v_g->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":182
+  /* "astropy/convolution/boundary_extend.pyx":183
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]
  *     cdef int nkz = g.shape[2]             # <<<<<<<<<<<<<<
@@ -3228,7 +3228,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
   __pyx_v_nkz = (__pyx_v_g->dimensions[2]);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":183
+  /* "astropy/convolution/boundary_extend.pyx":184
  *     cdef int nky = g.shape[1]
  *     cdef int nkz = g.shape[2]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -3237,7 +3237,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":184
+  /* "astropy/convolution/boundary_extend.pyx":185
  *     cdef int nkz = g.shape[2]
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
@@ -3246,7 +3246,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
   __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":185
+  /* "astropy/convolution/boundary_extend.pyx":186
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2
  *     cdef int wkz = nkz // 2             # <<<<<<<<<<<<<<
@@ -3255,25 +3255,25 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
   __pyx_v_wkz = __Pyx_div_long(__pyx_v_nkz, 2);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":186
+  /* "astropy/convolution/boundary_extend.pyx":187
  *     cdef int wky = nky // 2
  *     cdef int wkz = nkz // 2
  *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)
  *     cdef unsigned int i, j, k, iii, jjj, kkk
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
@@ -3284,29 +3284,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
   __pyx_t_5 = 0;
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_9));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
   __pyx_t_9 = 0;
-  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_9));
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_10 = ((PyArrayObject *)__pyx_t_7);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_fixed.diminfo[2].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[2] [...]
     }
   }
@@ -3314,25 +3314,25 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":187
+  /* "astropy/convolution/boundary_extend.pyx":188
  *     cdef int wkz = nkz // 2
  *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef unsigned int i, j, k, iii, jjj, kkk
  *     cdef int ii, jj, kk
  */
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_7);
@@ -3343,29 +3343,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_11 = ((PyArrayObject *)__pyx_t_8);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_conv.diminfo[2].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[2]; __pyx_py [...]
     }
   }
@@ -3373,7 +3373,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_8);
   __pyx_t_8 = 0;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":197
+  /* "astropy/convolution/boundary_extend.pyx":198
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -3384,7 +3384,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
   for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
     __pyx_v_i = __pyx_t_13;
 
-    /* "astropy/nddata/convolution/boundary_extend.pyx":198
+    /* "astropy/convolution/boundary_extend.pyx":199
  *     # neighboring values
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -3395,7 +3395,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
     for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
       __pyx_v_j = __pyx_t_15;
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":199
+      /* "astropy/convolution/boundary_extend.pyx":200
  *     for i in range(nx):
  *         for j in range(ny):
  *             for k in range(nz):             # <<<<<<<<<<<<<<
@@ -3406,7 +3406,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
       for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
         __pyx_v_k = __pyx_t_17;
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":200
+        /* "astropy/convolution/boundary_extend.pyx":201
  *         for j in range(ny):
  *             for k in range(nz):
  *                 if npy_isnan(f[i, j, k]):             # <<<<<<<<<<<<<<
@@ -3416,10 +3416,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
         __pyx_t_18 = __pyx_v_i;
         __pyx_t_19 = __pyx_v_j;
         __pyx_t_20 = __pyx_v_k;
-        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
+        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
         if (__pyx_t_4) {
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":201
+          /* "astropy/convolution/boundary_extend.pyx":202
  *             for k in range(nz):
  *                 if npy_isnan(f[i, j, k]):
  *                     top = 0.             # <<<<<<<<<<<<<<
@@ -3428,7 +3428,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_top = 0.;
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":202
+          /* "astropy/convolution/boundary_extend.pyx":203
  *                 if npy_isnan(f[i, j, k]):
  *                     top = 0.
  *                     bot = 0.             # <<<<<<<<<<<<<<
@@ -3437,7 +3437,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_bot = 0.;
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":203
+          /* "astropy/convolution/boundary_extend.pyx":204
  *                     top = 0.
  *                     bot = 0.
  *                     iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -3446,7 +3446,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":204
+          /* "astropy/convolution/boundary_extend.pyx":205
  *                     bot = 0.
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -3455,7 +3455,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":205
+          /* "astropy/convolution/boundary_extend.pyx":206
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -3464,7 +3464,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":206
+          /* "astropy/convolution/boundary_extend.pyx":207
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -3473,7 +3473,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":207
+          /* "astropy/convolution/boundary_extend.pyx":208
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
@@ -3482,7 +3482,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":208
+          /* "astropy/convolution/boundary_extend.pyx":209
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
@@ -3491,7 +3491,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":209
+          /* "astropy/convolution/boundary_extend.pyx":210
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -3502,7 +3502,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
           for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
             __pyx_v_ii = __pyx_t_22;
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":210
+            /* "astropy/convolution/boundary_extend.pyx":211
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -3513,7 +3513,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
             for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
               __pyx_v_jj = __pyx_t_24;
 
-              /* "astropy/nddata/convolution/boundary_extend.pyx":211
+              /* "astropy/convolution/boundary_extend.pyx":212
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
@@ -3524,34 +3524,34 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
               for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
                 __pyx_v_kk = __pyx_t_26;
 
-                /* "astropy/nddata/convolution/boundary_extend.pyx":212
+                /* "astropy/convolution/boundary_extend.pyx":213
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):
  *                                 iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
  *                                 jjj = int_min(int_max(jj, 0), ny - 1)
  *                                 kkk = int_min(int_max(kk, 0), nz - 1)
  */
-                __pyx_v_iii = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
+                __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
 
-                /* "astropy/nddata/convolution/boundary_extend.pyx":213
+                /* "astropy/convolution/boundary_extend.pyx":214
  *                             for kk in range(kkmin, kkmax):
  *                                 iii = int_min(int_max(ii, 0), nx - 1)
  *                                 jjj = int_min(int_max(jj, 0), ny - 1)             # <<<<<<<<<<<<<<
  *                                 kkk = int_min(int_max(kk, 0), nz - 1)
  *                                 val = f[iii, jjj, kkk]
  */
-                __pyx_v_jjj = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
+                __pyx_v_jjj = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
 
-                /* "astropy/nddata/convolution/boundary_extend.pyx":214
+                /* "astropy/convolution/boundary_extend.pyx":215
  *                                 iii = int_min(int_max(ii, 0), nx - 1)
  *                                 jjj = int_min(int_max(jj, 0), ny - 1)
  *                                 kkk = int_min(int_max(kk, 0), nz - 1)             # <<<<<<<<<<<<<<
  *                                 val = f[iii, jjj, kkk]
  *                                 if not npy_isnan(val):
  */
-                __pyx_v_kkk = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_kk, 0), (__pyx_v_nz - 1));
+                __pyx_v_kkk = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_kk, 0), (__pyx_v_nz - 1));
 
-                /* "astropy/nddata/convolution/boundary_extend.pyx":215
+                /* "astropy/convolution/boundary_extend.pyx":216
  *                                 jjj = int_min(int_max(jj, 0), ny - 1)
  *                                 kkk = int_min(int_max(kk, 0), nz - 1)
  *                                 val = f[iii, jjj, kkk]             # <<<<<<<<<<<<<<
@@ -3561,9 +3561,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
                 __pyx_t_27 = __pyx_v_iii;
                 __pyx_t_28 = __pyx_v_jjj;
                 __pyx_t_29 = __pyx_v_kkk;
-                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[2].strides));
+                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[2].strides));
 
-                /* "astropy/nddata/convolution/boundary_extend.pyx":216
+                /* "astropy/convolution/boundary_extend.pyx":217
  *                                 kkk = int_min(int_max(kk, 0), nz - 1)
  *                                 val = f[iii, jjj, kkk]
  *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -3573,7 +3573,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
                 __pyx_t_4 = (!npy_isnan(__pyx_v_val));
                 if (__pyx_t_4) {
 
-                  /* "astropy/nddata/convolution/boundary_extend.pyx":219
+                  /* "astropy/convolution/boundary_extend.pyx":220
  *                                     ker = g[<unsigned int>(wkx + ii - i),
  *                                             <unsigned int>(wky + jj - j),
  *                                             <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
@@ -3583,9 +3583,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
                   __pyx_t_30 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
                   __pyx_t_31 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
                   __pyx_t_32 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
-                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_32, __pyx_pybuffernd_g.diminfo[2].strides));
+                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_32, __pyx_pybuffernd_g.diminfo[2].strides));
 
-                  /* "astropy/nddata/convolution/boundary_extend.pyx":220
+                  /* "astropy/convolution/boundary_extend.pyx":221
  *                                             <unsigned int>(wky + jj - j),
  *                                             <unsigned int>(wkz + kk - k)]
  *                                     top += val * ker             # <<<<<<<<<<<<<<
@@ -3594,7 +3594,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
                   __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-                  /* "astropy/nddata/convolution/boundary_extend.pyx":221
+                  /* "astropy/convolution/boundary_extend.pyx":222
  *                                             <unsigned int>(wkz + kk - k)]
  *                                     top += val * ker
  *                                     bot += ker             # <<<<<<<<<<<<<<
@@ -3609,7 +3609,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
             }
           }
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":223
+          /* "astropy/convolution/boundary_extend.pyx":224
  *                                     bot += ker
  * 
  *                     if bot != 0.:             # <<<<<<<<<<<<<<
@@ -3619,7 +3619,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
           __pyx_t_4 = (__pyx_v_bot != 0.);
           if (__pyx_t_4) {
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":224
+            /* "astropy/convolution/boundary_extend.pyx":225
  * 
  *                     if bot != 0.:
  *                         fixed[i, j, k] = top / bot             # <<<<<<<<<<<<<<
@@ -3628,17 +3628,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
             if (unlikely(__pyx_v_bot == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "float division");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             __pyx_t_33 = __pyx_v_i;
             __pyx_t_34 = __pyx_v_j;
             __pyx_t_35 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
             goto __pyx_L18;
           }
           /*else*/ {
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":226
+            /* "astropy/convolution/boundary_extend.pyx":227
  *                         fixed[i, j, k] = top / bot
  *                     else:
  *                         fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
@@ -3651,14 +3651,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
             __pyx_t_39 = __pyx_v_i;
             __pyx_t_40 = __pyx_v_j;
             __pyx_t_41 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_41, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_f.diminfo[0 [...]
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_41, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_f.diminfo[0].strides, __pyx [...]
           }
           __pyx_L18:;
           goto __pyx_L10;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":228
+          /* "astropy/convolution/boundary_extend.pyx":229
  *                         fixed[i, j, k] = f[i, j, k]
  *                 else:
  *                     fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
@@ -3671,14 +3671,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
           __pyx_t_45 = __pyx_v_i;
           __pyx_t_46 = __pyx_v_j;
           __pyx_t_47 = __pyx_v_k;
-          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_f.diminfo[0]. [...]
+          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t [...]
         }
         __pyx_L10:;
       }
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":231
+  /* "astropy/convolution/boundary_extend.pyx":232
  * 
  *     # Now run the proper convolution
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -3689,7 +3689,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
   for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
     __pyx_v_i = __pyx_t_13;
 
-    /* "astropy/nddata/convolution/boundary_extend.pyx":232
+    /* "astropy/convolution/boundary_extend.pyx":233
  *     # Now run the proper convolution
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -3700,7 +3700,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
     for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
       __pyx_v_j = __pyx_t_15;
 
-      /* "astropy/nddata/convolution/boundary_extend.pyx":233
+      /* "astropy/convolution/boundary_extend.pyx":234
  *     for i in range(nx):
  *         for j in range(ny):
  *             for k in range(nz):             # <<<<<<<<<<<<<<
@@ -3711,7 +3711,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
       for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
         __pyx_v_k = __pyx_t_17;
 
-        /* "astropy/nddata/convolution/boundary_extend.pyx":234
+        /* "astropy/convolution/boundary_extend.pyx":235
  *         for j in range(ny):
  *             for k in range(nz):
  *                 if not npy_isnan(fixed[i, j, k]):             # <<<<<<<<<<<<<<
@@ -3721,10 +3721,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
         __pyx_t_48 = __pyx_v_i;
         __pyx_t_49 = __pyx_v_j;
         __pyx_t_50 = __pyx_v_k;
-        __pyx_t_4 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_50, __pyx_pybuffernd_fixed.diminfo[2].strides))));
+        __pyx_t_4 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_50, __pyx_pybuffernd_fixed.diminfo[2].strides))));
         if (__pyx_t_4) {
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":235
+          /* "astropy/convolution/boundary_extend.pyx":236
  *             for k in range(nz):
  *                 if not npy_isnan(fixed[i, j, k]):
  *                     top = 0.             # <<<<<<<<<<<<<<
@@ -3733,7 +3733,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_top = 0.;
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":236
+          /* "astropy/convolution/boundary_extend.pyx":237
  *                 if not npy_isnan(fixed[i, j, k]):
  *                     top = 0.
  *                     bot = 0.             # <<<<<<<<<<<<<<
@@ -3742,7 +3742,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_bot = 0.;
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":237
+          /* "astropy/convolution/boundary_extend.pyx":238
  *                     top = 0.
  *                     bot = 0.
  *                     iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -3751,7 +3751,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":238
+          /* "astropy/convolution/boundary_extend.pyx":239
  *                     bot = 0.
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -3760,7 +3760,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":239
+          /* "astropy/convolution/boundary_extend.pyx":240
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -3769,7 +3769,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":240
+          /* "astropy/convolution/boundary_extend.pyx":241
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -3778,7 +3778,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":241
+          /* "astropy/convolution/boundary_extend.pyx":242
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
@@ -3787,7 +3787,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":242
+          /* "astropy/convolution/boundary_extend.pyx":243
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
@@ -3796,7 +3796,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
           __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":243
+          /* "astropy/convolution/boundary_extend.pyx":244
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -3807,7 +3807,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
           for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
             __pyx_v_ii = __pyx_t_22;
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":244
+            /* "astropy/convolution/boundary_extend.pyx":245
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -3818,7 +3818,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
             for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
               __pyx_v_jj = __pyx_t_24;
 
-              /* "astropy/nddata/convolution/boundary_extend.pyx":245
+              /* "astropy/convolution/boundary_extend.pyx":246
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
@@ -3829,34 +3829,34 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
               for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
                 __pyx_v_kk = __pyx_t_26;
 
-                /* "astropy/nddata/convolution/boundary_extend.pyx":246
+                /* "astropy/convolution/boundary_extend.pyx":247
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):
  *                                 iii = int_min(int_max(ii, 0), nx - 1)             # <<<<<<<<<<<<<<
  *                                 jjj = int_min(int_max(jj, 0), ny - 1)
  *                                 kkk = int_min(int_max(kk, 0), nz - 1)
  */
-                __pyx_v_iii = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
+                __pyx_v_iii = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_ii, 0), (__pyx_v_nx - 1));
 
-                /* "astropy/nddata/convolution/boundary_extend.pyx":247
+                /* "astropy/convolution/boundary_extend.pyx":248
  *                             for kk in range(kkmin, kkmax):
  *                                 iii = int_min(int_max(ii, 0), nx - 1)
  *                                 jjj = int_min(int_max(jj, 0), ny - 1)             # <<<<<<<<<<<<<<
  *                                 kkk = int_min(int_max(kk, 0), nz - 1)
  *                                 val = fixed[iii, jjj, kkk]
  */
-                __pyx_v_jjj = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
+                __pyx_v_jjj = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_jj, 0), (__pyx_v_ny - 1));
 
-                /* "astropy/nddata/convolution/boundary_extend.pyx":248
+                /* "astropy/convolution/boundary_extend.pyx":249
  *                                 iii = int_min(int_max(ii, 0), nx - 1)
  *                                 jjj = int_min(int_max(jj, 0), ny - 1)
  *                                 kkk = int_min(int_max(kk, 0), nz - 1)             # <<<<<<<<<<<<<<
  *                                 val = fixed[iii, jjj, kkk]
  *                                 ker = g[<unsigned int>(wkx + ii - i),
  */
-                __pyx_v_kkk = __pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_6nddata_11convolution_15boundary_extend_int_max(__pyx_v_kk, 0), (__pyx_v_nz - 1));
+                __pyx_v_kkk = __pyx_f_7astropy_11convolution_15boundary_extend_int_min(__pyx_f_7astropy_11convolution_15boundary_extend_int_max(__pyx_v_kk, 0), (__pyx_v_nz - 1));
 
-                /* "astropy/nddata/convolution/boundary_extend.pyx":249
+                /* "astropy/convolution/boundary_extend.pyx":250
  *                                 jjj = int_min(int_max(jj, 0), ny - 1)
  *                                 kkk = int_min(int_max(kk, 0), nz - 1)
  *                                 val = fixed[iii, jjj, kkk]             # <<<<<<<<<<<<<<
@@ -3866,9 +3866,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
                 __pyx_t_51 = __pyx_v_iii;
                 __pyx_t_52 = __pyx_v_jjj;
                 __pyx_t_53 = __pyx_v_kkk;
-                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_52, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_53, __pyx_pybuffernd_fixed.diminfo[2].strides));
+                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_52, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_53, __pyx_pybuffernd_fixed.diminfo[2].strides));
 
-                /* "astropy/nddata/convolution/boundary_extend.pyx":252
+                /* "astropy/convolution/boundary_extend.pyx":253
  *                                 ker = g[<unsigned int>(wkx + ii - i),
  *                                         <unsigned int>(wky + jj - j),
  *                                         <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
@@ -3878,9 +3878,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
                 __pyx_t_54 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
                 __pyx_t_55 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
                 __pyx_t_56 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
-                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_g.diminfo[2].strides));
+                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_g.diminfo[2].strides));
 
-                /* "astropy/nddata/convolution/boundary_extend.pyx":253
+                /* "astropy/convolution/boundary_extend.pyx":254
  *                                         <unsigned int>(wky + jj - j),
  *                                         <unsigned int>(wkz + kk - k)]
  *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -3890,7 +3890,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
                 __pyx_t_4 = (!npy_isnan(__pyx_v_val));
                 if (__pyx_t_4) {
 
-                  /* "astropy/nddata/convolution/boundary_extend.pyx":254
+                  /* "astropy/convolution/boundary_extend.pyx":255
  *                                         <unsigned int>(wkz + kk - k)]
  *                                 if not npy_isnan(val):
  *                                     top += val * ker             # <<<<<<<<<<<<<<
@@ -3899,7 +3899,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
                   __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-                  /* "astropy/nddata/convolution/boundary_extend.pyx":255
+                  /* "astropy/convolution/boundary_extend.pyx":256
  *                                 if not npy_isnan(val):
  *                                     top += val * ker
  *                                     bot += ker             # <<<<<<<<<<<<<<
@@ -3914,7 +3914,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
             }
           }
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":256
+          /* "astropy/convolution/boundary_extend.pyx":257
  *                                     top += val * ker
  *                                     bot += ker
  *                     if bot != 0:             # <<<<<<<<<<<<<<
@@ -3924,7 +3924,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
           __pyx_t_4 = (__pyx_v_bot != 0.0);
           if (__pyx_t_4) {
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":257
+            /* "astropy/convolution/boundary_extend.pyx":258
  *                                     bot += ker
  *                     if bot != 0:
  *                         conv[i, j, k] = top / bot             # <<<<<<<<<<<<<<
@@ -3933,17 +3933,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
  */
             if (unlikely(__pyx_v_bot == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "float division");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             __pyx_t_57 = __pyx_v_i;
             __pyx_t_58 = __pyx_v_j;
             __pyx_t_59 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_59, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_59, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
             goto __pyx_L33;
           }
           /*else*/ {
 
-            /* "astropy/nddata/convolution/boundary_extend.pyx":259
+            /* "astropy/convolution/boundary_extend.pyx":260
  *                         conv[i, j, k] = top / bot
  *                     else:
  *                         conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
@@ -3956,14 +3956,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
             __pyx_t_63 = __pyx_v_i;
             __pyx_t_64 = __pyx_v_j;
             __pyx_t_65 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_64, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_65, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_fixed.dimin [...]
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_64, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_65, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_fixed.diminfo[0].strides, _ [...]
           }
           __pyx_L33:;
           goto __pyx_L25;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_extend.pyx":261
+          /* "astropy/convolution/boundary_extend.pyx":262
  *                         conv[i, j, k] = fixed[i, j, k]
  *                 else:
  *                     conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
@@ -3976,14 +3976,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
           __pyx_t_69 = __pyx_v_i;
           __pyx_t_70 = __pyx_v_j;
           __pyx_t_71 = __pyx_v_k;
-          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_70, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_71, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_fixed.diminfo [...]
+          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_70, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_71, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_15boundary_extend_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_fixed.diminfo[0].strides, __p [...]
         }
         __pyx_L25:;
       }
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":263
+  /* "astropy/convolution/boundary_extend.pyx":264
  *                     conv[i, j, k] = fixed[i, j, k]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -4008,7 +4008,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_15boundary_extend_4conv
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_extend.convolve3d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_extend.convolve3d_boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -6080,8 +6080,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
@@ -6092,36 +6092,36 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":22
+  /* "astropy/convolution/boundary_extend.pyx":23
  * 
  *     if g.shape[0] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_2);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":90
+  /* "astropy/convolution/boundary_extend.pyx":91
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_3);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_3));
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":173
+  /* "astropy/convolution/boundary_extend.pyx":174
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_4);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
 
@@ -6191,41 +6191,41 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_k_tuple_16);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_16));
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":18
+  /* "astropy/convolution/boundary_extend.pyx":19
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_extend(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
  *                                np.ndarray[DTYPE_t, ndim=1] g):
  * 
  */
-  __pyx_k_tuple_17 = PyTuple_Pack(16, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot), ((PyObject *)__pyx_n_s__ker), ((PyO [...]
+  __pyx_k_tuple_17 = PyTuple_Pack(16, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot), ((PyObject *)__pyx_n_s__ker), ((PyO [...]
   __Pyx_GOTREF(__pyx_k_tuple_17);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_17));
-  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(2, 0, 16, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 18, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(2, 0, 16, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 19, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":86
+  /* "astropy/convolution/boundary_extend.pyx":87
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_extend(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
  *                                np.ndarray[DTYPE_t, ndim=2] g):
  * 
  */
-  __pyx_k_tuple_22 = PyTuple_Pack(24, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__jjj), ((PyObject *)__pyx_n_s__ii), ((PyObject * [...]
+  __pyx_k_tuple_22 = PyTuple_Pack(24, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__jjj), ((PyObject *)__pyx_n_s__ii), ((PyObject * [...]
   __Pyx_GOTREF(__pyx_k_tuple_22);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_22));
-  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(2, 0, 24, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 86, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(2, 0, 24, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 87, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":169
+  /* "astropy/convolution/boundary_extend.pyx":170
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_extend(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
  *                                np.ndarray[DTYPE_t, ndim=3] g):
  * 
  */
-  __pyx_k_tuple_25 = PyTuple_Pack(32, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject * [...]
+  __pyx_k_tuple_25 = PyTuple_Pack(32, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject * [...]
   __Pyx_GOTREF(__pyx_k_tuple_25);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
-  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(2, 0, 32, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 169, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(2, 0, 32, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 170, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -6291,8 +6291,8 @@ PyMODINIT_FUNC PyInit_boundary_extend(void)
   #if PY_MAJOR_VERSION >= 3
   {
     PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (!PyDict_GetItemString(modules, "astropy.nddata.convolution.boundary_extend")) {
-      if (unlikely(PyDict_SetItemString(modules, "astropy.nddata.convolution.boundary_extend", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!PyDict_GetItemString(modules, "astropy.convolution.boundary_extend")) {
+      if (unlikely(PyDict_SetItemString(modules, "astropy.convolution.boundary_extend", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
@@ -6303,7 +6303,7 @@ PyMODINIT_FUNC PyInit_boundary_extend(void)
   if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   /*--- Initialize various global constants etc. ---*/
   if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_module_is_main_astropy__nddata__convolution__boundary_extend) {
+  if (__pyx_module_is_main_astropy__convolution__boundary_extend) {
     if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   }
   /*--- Builtin init code ---*/
@@ -6331,72 +6331,73 @@ PyMODINIT_FUNC PyInit_boundary_extend(void)
   /*--- Function import code ---*/
   /*--- Execution code ---*/
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":2
+  /* "astropy/convolution/boundary_extend.pyx":3
+ * # Licensed under a 3-clause BSD style license - see LICENSE.rst
  * from __future__ import division
  * import numpy as np             # <<<<<<<<<<<<<<
  * cimport numpy as np
  * 
  */
-  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":5
+  /* "astropy/convolution/boundary_extend.pyx":6
  * cimport numpy as np
  * 
  * DTYPE = np.float             # <<<<<<<<<<<<<<
  * ctypedef np.float_t DTYPE_t
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":18
+  /* "astropy/convolution/boundary_extend.pyx":19
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_extend(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
  *                                np.ndarray[DTYPE_t, ndim=1] g):
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_15boundary_extend_1convolve1d_boundary_extend, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_15boundary_extend_1convolve1d_boundary_extend, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":86
+  /* "astropy/convolution/boundary_extend.pyx":87
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_extend(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
  *                                np.ndarray[DTYPE_t, ndim=2] g):
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_15boundary_extend_3convolve2d_boundary_extend, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_15boundary_extend_3convolve2d_boundary_extend, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":169
+  /* "astropy/convolution/boundary_extend.pyx":170
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_extend(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
  *                                np.ndarray[DTYPE_t, ndim=3] g):
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_15boundary_extend_5convolve3d_boundary_extend, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_15boundary_extend_5convolve3d_boundary_extend, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_extend.pyx":1
- * from __future__ import division             # <<<<<<<<<<<<<<
+  /* "astropy/convolution/boundary_extend.pyx":1
+ * # Licensed under a 3-clause BSD style license - see LICENSE.rst             # <<<<<<<<<<<<<<
+ * from __future__ import division
  * import numpy as np
- * cimport numpy as np
  */
   __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
@@ -6415,10 +6416,10 @@ PyMODINIT_FUNC PyInit_boundary_extend(void)
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   if (__pyx_m) {
-    __Pyx_AddTraceback("init astropy.nddata.convolution.boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    __Pyx_AddTraceback("init astropy.convolution.boundary_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
     Py_DECREF(__pyx_m); __pyx_m = 0;
   } else if (!PyErr_Occurred()) {
-    PyErr_SetString(PyExc_ImportError, "init astropy.nddata.convolution.boundary_extend");
+    PyErr_SetString(PyExc_ImportError, "init astropy.convolution.boundary_extend");
   }
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
diff --git a/astropy/nddata/convolution/boundary_extend.pyx b/astropy/convolution/boundary_extend.pyx
similarity index 99%
rename from astropy/nddata/convolution/boundary_extend.pyx
rename to astropy/convolution/boundary_extend.pyx
index 5ef5f42..63e9032 100644
--- a/astropy/nddata/convolution/boundary_extend.pyx
+++ b/astropy/convolution/boundary_extend.pyx
@@ -1,3 +1,4 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
 from __future__ import division
 import numpy as np
 cimport numpy as np
diff --git a/astropy/nddata/convolution/boundary_fill.c b/astropy/convolution/boundary_fill.c
similarity index 89%
rename from astropy/nddata/convolution/boundary_fill.c
rename to astropy/convolution/boundary_fill.c
index 9bdf495..4ce8963 100644
--- a/astropy/nddata/convolution/boundary_fill.c
+++ b/astropy/convolution/boundary_fill.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.18 on Fri Oct 25 12:27:41 2013 */
+/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -249,8 +249,8 @@
 #define _USE_MATH_DEFINES
 #endif
 #include <math.h>
-#define __PYX_HAVE__astropy__nddata__convolution__boundary_fill
-#define __PYX_HAVE_API__astropy__nddata__convolution__boundary_fill
+#define __PYX_HAVE__astropy__convolution__boundary_fill
+#define __PYX_HAVE_API__astropy__convolution__boundary_fill
 #include "string.h"
 #include "stdio.h"
 #include "stdlib.h"
@@ -583,14 +583,14 @@ typedef npy_double __pyx_t_5numpy_double_t;
  */
 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 
-/* "astropy/nddata/convolution/boundary_fill.pyx":6
+/* "astropy/convolution/boundary_fill.pyx":7
  * 
  * DTYPE = np.float
  * ctypedef np.float_t DTYPE_t             # <<<<<<<<<<<<<<
  * 
  * cdef extern from "numpy/npy_math.h":
  */
-typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t;
+typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t;
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     typedef ::std::complex< float > __pyx_t_float_complex;
@@ -965,18 +965,18 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, cha
 
 /* Module declarations from 'cython' */
 
-/* Module declarations from 'astropy.nddata.convolution.boundary_fill' */
-static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
-#define __Pyx_MODULE_NAME "astropy.nddata.convolution.boundary_fill"
-int __pyx_module_is_main_astropy__nddata__convolution__boundary_fill = 0;
+/* Module declarations from 'astropy.convolution.boundary_fill' */
+static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
+#define __Pyx_MODULE_NAME "astropy.convolution.boundary_fill"
+int __pyx_module_is_main_astropy__convolution__boundary_fill = 0;
 
-/* Implementation of 'astropy.nddata.convolution.boundary_fill' */
+/* Implementation of 'astropy.convolution.boundary_fill' */
 static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_range;
 static PyObject *__pyx_builtin_RuntimeError;
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolve1d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value); /* proto */
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convolve2d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value); /* proto */
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convolve3d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_convolve1d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_2convolve2d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_4convolve3d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value); /* proto */
 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
 static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
 static char __pyx_k_1[] = "Convolution kernel must have odd dimensions";
@@ -987,8 +987,8 @@ static char __pyx_k_11[] = "unknown dtype code in numpy.pxd (%d)";
 static char __pyx_k_12[] = "Format string allocated too short, see comment in numpy.pxd";
 static char __pyx_k_15[] = "Format string allocated too short.";
 static char __pyx_k_19[] = "convolve1d_boundary_fill";
-static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/nddata/convolution/boundary_fill.pyx";
-static char __pyx_k_21[] = "astropy.nddata.convolution.boundary_fill";
+static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/convolution/boundary_fill.pyx";
+static char __pyx_k_21[] = "astropy.convolution.boundary_fill";
 static char __pyx_k_24[] = "convolve2d_boundary_fill";
 static char __pyx_k_27[] = "convolve3d_boundary_fill";
 static char __pyx_k__B[] = "B";
@@ -1123,9 +1123,9 @@ static PyObject *__pyx_k_codeobj_23;
 static PyObject *__pyx_k_codeobj_26;
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_1convolve1d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_fill_1convolve1d_boundary_fill = {__Pyx_NAMESTR("convolve1d_boundary_fill"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_1convolve1d_boundary_fill, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_1convolve1d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_1convolve1d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_fill_1convolve1d_boundary_fill = {__Pyx_NAMESTR("convolve1d_boundary_fill"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_fill_1convolve1d_boundary_fill, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_1convolve1d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   float __pyx_v_fill_value;
@@ -1153,16 +1153,16 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_1convol
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_fill", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_fill", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fill_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_fill", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_fill", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_fill") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_fill") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -1173,19 +1173,19 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_1convol
     }
     __pyx_v_f = ((PyArrayObject *)values[0]);
     __pyx_v_g = ((PyArrayObject *)values[1]);
-    __pyx_v_fill_value = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_fill_value == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fill_value = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_fill_value == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_fill", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_fill", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_fill.convolve1d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve1d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolve1d_boundary_fill(__pyx_self, __pyx_v_f, __pyx_v_g, __pyx_v_fill_value);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_fill_convolve1d_boundary_fill(__pyx_self, __pyx_v_f, __pyx_v_g, __pyx_v_fill_value);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -1194,7 +1194,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_1convol
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_fill.pyx":15
+/* "astropy/convolution/boundary_fill.pyx":16
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_fill(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
@@ -1202,7 +1202,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_1convol
  *                              float fill_value):
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolve1d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value) {
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_convolve1d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value) {
   int __pyx_v_nx;
   int __pyx_v_nkx;
   int __pyx_v_wkx;
@@ -1212,10 +1212,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
   int __pyx_v_ii;
   int __pyx_v_iimin;
   int __pyx_v_iimax;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -1277,16 +1277,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":19
+  /* "astropy/convolution/boundary_fill.pyx":20
  *                              float fill_value):
  * 
  *     if g.shape[0] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -1296,23 +1296,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
   __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
   if (__pyx_t_1) {
 
-    /* "astropy/nddata/convolution/boundary_fill.pyx":20
+    /* "astropy/convolution/boundary_fill.pyx":21
  * 
  *     if g.shape[0] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":22
+  /* "astropy/convolution/boundary_fill.pyx":23
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -1320,24 +1320,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (__pyx_t_1) {
-    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_6 = __pyx_t_5;
   } else {
@@ -1345,11 +1345,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
   }
   if (unlikely(!__pyx_t_6)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":24
+  /* "astropy/convolution/boundary_fill.pyx":25
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -1358,7 +1358,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":25
+  /* "astropy/convolution/boundary_fill.pyx":26
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -1367,7 +1367,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":26
+  /* "astropy/convolution/boundary_fill.pyx":27
  *     cdef int nx = f.shape[0]
  *     cdef int nkx = g.shape[0]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -1376,48 +1376,48 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":27
+  /* "astropy/convolution/boundary_fill.pyx":28
  *     cdef int nkx = g.shape[0]
  *     cdef int wkx = nkx // 2
  *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)
  *     cdef unsigned int i, iii
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_7);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -1425,48 +1425,48 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":28
+  /* "astropy/convolution/boundary_fill.pyx":29
  *     cdef int wkx = nkx // 2
  *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef unsigned int i, iii
  *     cdef int ii
  */
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
-  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_t_2));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_9 = ((PyArrayObject *)__pyx_t_3);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -1474,7 +1474,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":38
+  /* "astropy/convolution/boundary_fill.pyx":39
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -1485,7 +1485,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_fill.pyx":39
+    /* "astropy/convolution/boundary_fill.pyx":40
  *     # neighboring values
  *     for i in range(nx):
  *         if npy_isnan(f[i]):             # <<<<<<<<<<<<<<
@@ -1493,10 +1493,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  *             bot = 0.
  */
     __pyx_t_12 = __pyx_v_i;
-    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
+    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
     if (__pyx_t_6) {
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":40
+      /* "astropy/convolution/boundary_fill.pyx":41
  *     for i in range(nx):
  *         if npy_isnan(f[i]):
  *             top = 0.             # <<<<<<<<<<<<<<
@@ -1505,7 +1505,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
       __pyx_v_top = 0.;
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":41
+      /* "astropy/convolution/boundary_fill.pyx":42
  *         if npy_isnan(f[i]):
  *             top = 0.
  *             bot = 0.             # <<<<<<<<<<<<<<
@@ -1514,7 +1514,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
       __pyx_v_bot = 0.;
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":42
+      /* "astropy/convolution/boundary_fill.pyx":43
  *             top = 0.
  *             bot = 0.
  *             iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -1523,7 +1523,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
       __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":43
+      /* "astropy/convolution/boundary_fill.pyx":44
  *             bot = 0.
  *             iimin = i - wkx
  *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -1532,7 +1532,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
       __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":44
+      /* "astropy/convolution/boundary_fill.pyx":45
  *             iimin = i - wkx
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -1543,7 +1543,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
       for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
         __pyx_v_ii = __pyx_t_14;
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":45
+        /* "astropy/convolution/boundary_fill.pyx":46
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):
  *                 if ii < 0 or ii > nx - 1:             # <<<<<<<<<<<<<<
@@ -1559,7 +1559,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
         }
         if (__pyx_t_5) {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":46
+          /* "astropy/convolution/boundary_fill.pyx":47
  *             for ii in range(iimin, iimax):
  *                 if ii < 0 or ii > nx - 1:
  *                     val = fill_value             # <<<<<<<<<<<<<<
@@ -1571,7 +1571,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":48
+          /* "astropy/convolution/boundary_fill.pyx":49
  *                     val = fill_value
  *                 else:
  *                     val = f[ii]             # <<<<<<<<<<<<<<
@@ -1580,11 +1580,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
           __pyx_t_15 = __pyx_v_ii;
           if (__pyx_t_15 < 0) __pyx_t_15 += __pyx_pybuffernd_f.diminfo[0].shape;
-          __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_f.diminfo[0].strides));
+          __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_f.diminfo[0].strides));
         }
         __pyx_L9:;
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":49
+        /* "astropy/convolution/boundary_fill.pyx":50
  *                 else:
  *                     val = f[ii]
  *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -1594,7 +1594,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
         __pyx_t_5 = (!npy_isnan(__pyx_v_val));
         if (__pyx_t_5) {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":50
+          /* "astropy/convolution/boundary_fill.pyx":51
  *                     val = f[ii]
  *                 if not npy_isnan(val):
  *                     ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
@@ -1602,9 +1602,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  *                     bot += ker
  */
           __pyx_t_16 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_g.diminfo[0].strides));
+          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_g.diminfo[0].strides));
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":51
+          /* "astropy/convolution/boundary_fill.pyx":52
  *                 if not npy_isnan(val):
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  *                     top += val * ker             # <<<<<<<<<<<<<<
@@ -1613,7 +1613,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
           __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":52
+          /* "astropy/convolution/boundary_fill.pyx":53
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  *                     top += val * ker
  *                     bot += ker             # <<<<<<<<<<<<<<
@@ -1626,7 +1626,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
         __pyx_L10:;
       }
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":53
+      /* "astropy/convolution/boundary_fill.pyx":54
  *                     top += val * ker
  *                     bot += ker
  *             if bot != 0.:             # <<<<<<<<<<<<<<
@@ -1636,7 +1636,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
       __pyx_t_5 = (__pyx_v_bot != 0.);
       if (__pyx_t_5) {
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":54
+        /* "astropy/convolution/boundary_fill.pyx":55
  *                     bot += ker
  *             if bot != 0.:
  *                 fixed[i] = top / bot             # <<<<<<<<<<<<<<
@@ -1645,15 +1645,15 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
         if (unlikely(__pyx_v_bot == 0)) {
           PyErr_Format(PyExc_ZeroDivisionError, "float division");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         __pyx_t_17 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
         goto __pyx_L11;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":56
+        /* "astropy/convolution/boundary_fill.pyx":57
  *                 fixed[i] = top / bot
  *             else:
  *                 fixed[i] = f[i]             # <<<<<<<<<<<<<<
@@ -1662,14 +1662,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
         __pyx_t_18 = __pyx_v_i;
         __pyx_t_19 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides));
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides));
       }
       __pyx_L11:;
       goto __pyx_L6;
     }
     /*else*/ {
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":58
+      /* "astropy/convolution/boundary_fill.pyx":59
  *                 fixed[i] = f[i]
  *         else:
  *             fixed[i] = f[i]             # <<<<<<<<<<<<<<
@@ -1678,12 +1678,12 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
       __pyx_t_20 = __pyx_v_i;
       __pyx_t_21 = __pyx_v_i;
-      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides));
+      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides));
     }
     __pyx_L6:;
   }
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":61
+  /* "astropy/convolution/boundary_fill.pyx":62
  * 
  *     # Now run the proper convolution
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -1694,7 +1694,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_fill.pyx":62
+    /* "astropy/convolution/boundary_fill.pyx":63
  *     # Now run the proper convolution
  *     for i in range(nx):
  *         if not npy_isnan(fixed[i]):             # <<<<<<<<<<<<<<
@@ -1702,10 +1702,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  *             bot = 0.
  */
     __pyx_t_22 = __pyx_v_i;
-    __pyx_t_5 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides))));
+    __pyx_t_5 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides))));
     if (__pyx_t_5) {
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":63
+      /* "astropy/convolution/boundary_fill.pyx":64
  *     for i in range(nx):
  *         if not npy_isnan(fixed[i]):
  *             top = 0.             # <<<<<<<<<<<<<<
@@ -1714,7 +1714,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
       __pyx_v_top = 0.;
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":64
+      /* "astropy/convolution/boundary_fill.pyx":65
  *         if not npy_isnan(fixed[i]):
  *             top = 0.
  *             bot = 0.             # <<<<<<<<<<<<<<
@@ -1723,7 +1723,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
       __pyx_v_bot = 0.;
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":65
+      /* "astropy/convolution/boundary_fill.pyx":66
  *             top = 0.
  *             bot = 0.
  *             iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -1732,7 +1732,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
       __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":66
+      /* "astropy/convolution/boundary_fill.pyx":67
  *             bot = 0.
  *             iimin = i - wkx
  *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -1741,7 +1741,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
       __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":67
+      /* "astropy/convolution/boundary_fill.pyx":68
  *             iimin = i - wkx
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -1752,7 +1752,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
       for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
         __pyx_v_ii = __pyx_t_14;
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":68
+        /* "astropy/convolution/boundary_fill.pyx":69
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):
  *                 if ii < 0 or ii > nx - 1:             # <<<<<<<<<<<<<<
@@ -1768,7 +1768,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
         }
         if (__pyx_t_1) {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":69
+          /* "astropy/convolution/boundary_fill.pyx":70
  *             for ii in range(iimin, iimax):
  *                 if ii < 0 or ii > nx - 1:
  *                     val = fill_value             # <<<<<<<<<<<<<<
@@ -1780,7 +1780,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":71
+          /* "astropy/convolution/boundary_fill.pyx":72
  *                     val = fill_value
  *                 else:
  *                     val = fixed[ii]             # <<<<<<<<<<<<<<
@@ -1789,11 +1789,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
           __pyx_t_23 = __pyx_v_ii;
           if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_pybuffernd_fixed.diminfo[0].shape;
-          __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_fixed.diminfo[0].strides));
+          __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_fixed.diminfo[0].strides));
         }
         __pyx_L17:;
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":72
+        /* "astropy/convolution/boundary_fill.pyx":73
  *                 else:
  *                     val = fixed[ii]
  *                 ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
@@ -1801,9 +1801,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  *                     top += val * ker
  */
         __pyx_t_24 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides));
+        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides));
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":73
+        /* "astropy/convolution/boundary_fill.pyx":74
  *                     val = fixed[ii]
  *                 ker = g[<unsigned int>(wkx + ii - i)]
  *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -1813,7 +1813,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
         __pyx_t_1 = (!npy_isnan(__pyx_v_val));
         if (__pyx_t_1) {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":74
+          /* "astropy/convolution/boundary_fill.pyx":75
  *                 ker = g[<unsigned int>(wkx + ii - i)]
  *                 if not npy_isnan(val):
  *                     top += val * ker             # <<<<<<<<<<<<<<
@@ -1822,7 +1822,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
           __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":75
+          /* "astropy/convolution/boundary_fill.pyx":76
  *                 if not npy_isnan(val):
  *                     top += val * ker
  *                     bot += ker             # <<<<<<<<<<<<<<
@@ -1835,7 +1835,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
         __pyx_L18:;
       }
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":76
+      /* "astropy/convolution/boundary_fill.pyx":77
  *                     top += val * ker
  *                     bot += ker
  *             if bot != 0:             # <<<<<<<<<<<<<<
@@ -1845,7 +1845,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
       __pyx_t_1 = (__pyx_v_bot != 0.0);
       if (__pyx_t_1) {
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":77
+        /* "astropy/convolution/boundary_fill.pyx":78
  *                     bot += ker
  *             if bot != 0:
  *                 conv[i] = top / bot             # <<<<<<<<<<<<<<
@@ -1854,15 +1854,15 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
         if (unlikely(__pyx_v_bot == 0)) {
           PyErr_Format(PyExc_ZeroDivisionError, "float division");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         __pyx_t_25 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
         goto __pyx_L19;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":79
+        /* "astropy/convolution/boundary_fill.pyx":80
  *                 conv[i] = top / bot
  *             else:
  *                 conv[i] = fixed[i]             # <<<<<<<<<<<<<<
@@ -1871,14 +1871,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
         __pyx_t_26 = __pyx_v_i;
         __pyx_t_27 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides));
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides));
       }
       __pyx_L19:;
       goto __pyx_L14;
     }
     /*else*/ {
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":81
+      /* "astropy/convolution/boundary_fill.pyx":82
  *                 conv[i] = fixed[i]
  *         else:
  *             conv[i] = fixed[i]             # <<<<<<<<<<<<<<
@@ -1887,12 +1887,12 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
  */
       __pyx_t_28 = __pyx_v_i;
       __pyx_t_29 = __pyx_v_i;
-      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides));
+      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides));
     }
     __pyx_L14:;
   }
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":83
+  /* "astropy/convolution/boundary_fill.pyx":84
  *             conv[i] = fixed[i]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -1918,7 +1918,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_fill.convolve1d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve1d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -1935,9 +1935,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_convolv
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_3convolve2d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_fill_3convolve2d_boundary_fill = {__Pyx_NAMESTR("convolve2d_boundary_fill"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_3convolve2d_boundary_fill, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_3convolve2d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_3convolve2d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_fill_3convolve2d_boundary_fill = {__Pyx_NAMESTR("convolve2d_boundary_fill"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_fill_3convolve2d_boundary_fill, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_3convolve2d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   float __pyx_v_fill_value;
@@ -1965,16 +1965,16 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_3convol
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_fill", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_fill", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fill_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_fill", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_fill", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_fill") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_fill") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -1985,19 +1985,19 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_3convol
     }
     __pyx_v_f = ((PyArrayObject *)values[0]);
     __pyx_v_g = ((PyArrayObject *)values[1]);
-    __pyx_v_fill_value = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_fill_value == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fill_value = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_fill_value == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_fill", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_fill", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_fill.convolve2d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve2d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convolve2d_boundary_fill(__pyx_self, __pyx_v_f, __pyx_v_g, __pyx_v_fill_value);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_fill_2convolve2d_boundary_fill(__pyx_self, __pyx_v_f, __pyx_v_g, __pyx_v_fill_value);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -2006,7 +2006,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_3convol
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_fill.pyx":87
+/* "astropy/convolution/boundary_fill.pyx":88
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_fill(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
@@ -2014,7 +2014,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_3convol
  *                              float fill_value):
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convolve2d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value) {
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_2convolve2d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value) {
   int __pyx_v_nx;
   int __pyx_v_ny;
   int __pyx_v_nkx;
@@ -2031,10 +2031,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
   int __pyx_v_iimax;
   int __pyx_v_jjmin;
   int __pyx_v_jjmax;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -2118,16 +2118,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1];
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":91
+  /* "astropy/convolution/boundary_fill.pyx":92
  *                              float fill_value):
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -2143,23 +2143,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
   }
   if (__pyx_t_3) {
 
-    /* "astropy/nddata/convolution/boundary_fill.pyx":92
+    /* "astropy/convolution/boundary_fill.pyx":93
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":94
+  /* "astropy/convolution/boundary_fill.pyx":95
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -2167,24 +2167,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (__pyx_t_3) {
-    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_2 = __pyx_t_1;
   } else {
@@ -2192,11 +2192,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
   }
   if (unlikely(!__pyx_t_2)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":96
+  /* "astropy/convolution/boundary_fill.pyx":97
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -2205,7 +2205,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":97
+  /* "astropy/convolution/boundary_fill.pyx":98
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
@@ -2214,7 +2214,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
   __pyx_v_ny = (__pyx_v_f->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":98
+  /* "astropy/convolution/boundary_fill.pyx":99
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -2223,7 +2223,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":99
+  /* "astropy/convolution/boundary_fill.pyx":100
  *     cdef int ny = f.shape[1]
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
@@ -2232,7 +2232,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
   __pyx_v_nky = (__pyx_v_g->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":100
+  /* "astropy/convolution/boundary_fill.pyx":101
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -2241,7 +2241,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":101
+  /* "astropy/convolution/boundary_fill.pyx":102
  *     cdef int nky = g.shape[1]
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
@@ -2250,23 +2250,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
   __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":102
+  /* "astropy/convolution/boundary_fill.pyx":103
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2
  *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)
  *     cdef unsigned int i, j, iii, jjj
  */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
@@ -2274,29 +2274,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_4 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_7));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
   __pyx_t_7 = 0;
-  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_7));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1];
     }
   }
@@ -2304,23 +2304,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":103
+  /* "astropy/convolution/boundary_fill.pyx":104
  *     cdef int wky = nky // 2
  *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef unsigned int i, j, iii, jjj
  *     cdef int ii, jj
  */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
@@ -2328,29 +2328,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_4 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_9 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1];
     }
   }
@@ -2358,7 +2358,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":113
+  /* "astropy/convolution/boundary_fill.pyx":114
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -2369,7 +2369,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_fill.pyx":114
+    /* "astropy/convolution/boundary_fill.pyx":115
  *     # neighboring values
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -2380,7 +2380,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
     for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
       __pyx_v_j = __pyx_t_13;
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":115
+      /* "astropy/convolution/boundary_fill.pyx":116
  *     for i in range(nx):
  *         for j in range(ny):
  *             if npy_isnan(f[i, j]):             # <<<<<<<<<<<<<<
@@ -2389,10 +2389,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
       __pyx_t_14 = __pyx_v_i;
       __pyx_t_15 = __pyx_v_j;
-      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
+      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
       if (__pyx_t_2) {
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":116
+        /* "astropy/convolution/boundary_fill.pyx":117
  *         for j in range(ny):
  *             if npy_isnan(f[i, j]):
  *                 top = 0.             # <<<<<<<<<<<<<<
@@ -2401,7 +2401,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_top = 0.;
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":117
+        /* "astropy/convolution/boundary_fill.pyx":118
  *             if npy_isnan(f[i, j]):
  *                 top = 0.
  *                 bot = 0.             # <<<<<<<<<<<<<<
@@ -2410,7 +2410,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_bot = 0.;
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":118
+        /* "astropy/convolution/boundary_fill.pyx":119
  *                 top = 0.
  *                 bot = 0.
  *                 iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -2419,7 +2419,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":119
+        /* "astropy/convolution/boundary_fill.pyx":120
  *                 bot = 0.
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -2428,7 +2428,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":120
+        /* "astropy/convolution/boundary_fill.pyx":121
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -2437,7 +2437,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":121
+        /* "astropy/convolution/boundary_fill.pyx":122
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -2446,7 +2446,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":122
+        /* "astropy/convolution/boundary_fill.pyx":123
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -2457,7 +2457,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
         for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
           __pyx_v_ii = __pyx_t_17;
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":123
+          /* "astropy/convolution/boundary_fill.pyx":124
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -2468,7 +2468,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
           for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
             __pyx_v_jj = __pyx_t_19;
 
-            /* "astropy/nddata/convolution/boundary_fill.pyx":124
+            /* "astropy/convolution/boundary_fill.pyx":125
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):
  *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:             # <<<<<<<<<<<<<<
@@ -2496,7 +2496,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
             }
             if (__pyx_t_3) {
 
-              /* "astropy/nddata/convolution/boundary_fill.pyx":125
+              /* "astropy/convolution/boundary_fill.pyx":126
  *                     for jj in range(jjmin, jjmax):
  *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:
  *                             val = fill_value             # <<<<<<<<<<<<<<
@@ -2508,7 +2508,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
             }
             /*else*/ {
 
-              /* "astropy/nddata/convolution/boundary_fill.pyx":127
+              /* "astropy/convolution/boundary_fill.pyx":128
  *                             val = fill_value
  *                         else:
  *                             val = f[ii, jj]             # <<<<<<<<<<<<<<
@@ -2519,11 +2519,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
               __pyx_t_23 = __pyx_v_jj;
               if (__pyx_t_22 < 0) __pyx_t_22 += __pyx_pybuffernd_f.diminfo[0].shape;
               if (__pyx_t_23 < 0) __pyx_t_23 += __pyx_pybuffernd_f.diminfo[1].shape;
-              __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_f.diminfo[1].strides));
+              __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_f.diminfo[1].strides));
             }
             __pyx_L13:;
 
-            /* "astropy/nddata/convolution/boundary_fill.pyx":128
+            /* "astropy/convolution/boundary_fill.pyx":129
  *                         else:
  *                             val = f[ii, jj]
  *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -2533,7 +2533,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
             __pyx_t_3 = (!npy_isnan(__pyx_v_val));
             if (__pyx_t_3) {
 
-              /* "astropy/nddata/convolution/boundary_fill.pyx":130
+              /* "astropy/convolution/boundary_fill.pyx":131
  *                         if not npy_isnan(val):
  *                             ker = g[<unsigned int>(wkx + ii - i),
  *                                     <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
@@ -2542,9 +2542,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
               __pyx_t_24 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
               __pyx_t_25 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_g.diminfo[1].strides));
+              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_g.diminfo[1].strides));
 
-              /* "astropy/nddata/convolution/boundary_fill.pyx":131
+              /* "astropy/convolution/boundary_fill.pyx":132
  *                             ker = g[<unsigned int>(wkx + ii - i),
  *                                     <unsigned int>(wky + jj - j)]
  *                             top += val * ker             # <<<<<<<<<<<<<<
@@ -2553,7 +2553,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
               __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-              /* "astropy/nddata/convolution/boundary_fill.pyx":132
+              /* "astropy/convolution/boundary_fill.pyx":133
  *                                     <unsigned int>(wky + jj - j)]
  *                             top += val * ker
  *                             bot += ker             # <<<<<<<<<<<<<<
@@ -2567,7 +2567,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
           }
         }
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":133
+        /* "astropy/convolution/boundary_fill.pyx":134
  *                             top += val * ker
  *                             bot += ker
  *                 if bot != 0.:             # <<<<<<<<<<<<<<
@@ -2577,7 +2577,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
         __pyx_t_3 = (__pyx_v_bot != 0.);
         if (__pyx_t_3) {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":134
+          /* "astropy/convolution/boundary_fill.pyx":135
  *                             bot += ker
  *                 if bot != 0.:
  *                     fixed[i, j] = top / bot             # <<<<<<<<<<<<<<
@@ -2586,16 +2586,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
           if (unlikely(__pyx_v_bot == 0)) {
             PyErr_Format(PyExc_ZeroDivisionError, "float division");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           __pyx_t_26 = __pyx_v_i;
           __pyx_t_27 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
           goto __pyx_L15;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":136
+          /* "astropy/convolution/boundary_fill.pyx":137
  *                     fixed[i, j] = top / bot
  *                 else:
  *                     fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
@@ -2606,14 +2606,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
           __pyx_t_29 = __pyx_v_j;
           __pyx_t_30 = __pyx_v_i;
           __pyx_t_31 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[1].strides));
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[1].strides));
         }
         __pyx_L15:;
         goto __pyx_L8;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":138
+        /* "astropy/convolution/boundary_fill.pyx":139
  *                     fixed[i, j] = f[i, j]
  *             else:
  *                 fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
@@ -2624,13 +2624,13 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
         __pyx_t_33 = __pyx_v_j;
         __pyx_t_34 = __pyx_v_i;
         __pyx_t_35 = __pyx_v_j;
-        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_f.diminfo[1].strides));
+        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_f.diminfo[1].strides));
       }
       __pyx_L8:;
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":141
+  /* "astropy/convolution/boundary_fill.pyx":142
  * 
  *     # Now run the proper convolution
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -2641,7 +2641,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_fill.pyx":142
+    /* "astropy/convolution/boundary_fill.pyx":143
  *     # Now run the proper convolution
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -2652,7 +2652,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
     for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
       __pyx_v_j = __pyx_t_13;
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":143
+      /* "astropy/convolution/boundary_fill.pyx":144
  *     for i in range(nx):
  *         for j in range(ny):
  *             if not npy_isnan(fixed[i, j]):             # <<<<<<<<<<<<<<
@@ -2661,10 +2661,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
       __pyx_t_36 = __pyx_v_i;
       __pyx_t_37 = __pyx_v_j;
-      __pyx_t_3 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides))));
+      __pyx_t_3 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides))));
       if (__pyx_t_3) {
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":144
+        /* "astropy/convolution/boundary_fill.pyx":145
  *         for j in range(ny):
  *             if not npy_isnan(fixed[i, j]):
  *                 top = 0.             # <<<<<<<<<<<<<<
@@ -2673,7 +2673,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_top = 0.;
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":145
+        /* "astropy/convolution/boundary_fill.pyx":146
  *             if not npy_isnan(fixed[i, j]):
  *                 top = 0.
  *                 bot = 0.             # <<<<<<<<<<<<<<
@@ -2682,7 +2682,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_bot = 0.;
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":146
+        /* "astropy/convolution/boundary_fill.pyx":147
  *                 top = 0.
  *                 bot = 0.
  *                 iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -2691,7 +2691,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":147
+        /* "astropy/convolution/boundary_fill.pyx":148
  *                 bot = 0.
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -2700,7 +2700,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":148
+        /* "astropy/convolution/boundary_fill.pyx":149
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -2709,7 +2709,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":149
+        /* "astropy/convolution/boundary_fill.pyx":150
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -2718,7 +2718,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
         __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":150
+        /* "astropy/convolution/boundary_fill.pyx":151
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -2729,7 +2729,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
         for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
           __pyx_v_ii = __pyx_t_17;
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":151
+          /* "astropy/convolution/boundary_fill.pyx":152
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -2740,7 +2740,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
           for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
             __pyx_v_jj = __pyx_t_19;
 
-            /* "astropy/nddata/convolution/boundary_fill.pyx":152
+            /* "astropy/convolution/boundary_fill.pyx":153
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):
  *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:             # <<<<<<<<<<<<<<
@@ -2768,7 +2768,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
             }
             if (__pyx_t_2) {
 
-              /* "astropy/nddata/convolution/boundary_fill.pyx":153
+              /* "astropy/convolution/boundary_fill.pyx":154
  *                     for jj in range(jjmin, jjmax):
  *                         if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1:
  *                             val = fill_value             # <<<<<<<<<<<<<<
@@ -2780,7 +2780,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
             }
             /*else*/ {
 
-              /* "astropy/nddata/convolution/boundary_fill.pyx":155
+              /* "astropy/convolution/boundary_fill.pyx":156
  *                             val = fill_value
  *                         else:
  *                             val = fixed[ii, jj]             # <<<<<<<<<<<<<<
@@ -2791,11 +2791,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
               __pyx_t_39 = __pyx_v_jj;
               if (__pyx_t_38 < 0) __pyx_t_38 += __pyx_pybuffernd_fixed.diminfo[0].shape;
               if (__pyx_t_39 < 0) __pyx_t_39 += __pyx_pybuffernd_fixed.diminfo[1].shape;
-              __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_fixed.diminfo[1].strides));
+              __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_fixed.diminfo[1].strides));
             }
             __pyx_L25:;
 
-            /* "astropy/nddata/convolution/boundary_fill.pyx":157
+            /* "astropy/convolution/boundary_fill.pyx":158
  *                             val = fixed[ii, jj]
  *                         ker = g[<unsigned int>(wkx + ii - i),
  *                                 <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
@@ -2804,9 +2804,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
             __pyx_t_40 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
             __pyx_t_41 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_g.diminfo[1].strides));
+            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_g.diminfo[1].strides));
 
-            /* "astropy/nddata/convolution/boundary_fill.pyx":158
+            /* "astropy/convolution/boundary_fill.pyx":159
  *                         ker = g[<unsigned int>(wkx + ii - i),
  *                                 <unsigned int>(wky + jj - j)]
  *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -2816,7 +2816,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
             __pyx_t_2 = (!npy_isnan(__pyx_v_val));
             if (__pyx_t_2) {
 
-              /* "astropy/nddata/convolution/boundary_fill.pyx":159
+              /* "astropy/convolution/boundary_fill.pyx":160
  *                                 <unsigned int>(wky + jj - j)]
  *                         if not npy_isnan(val):
  *                             top += val * ker             # <<<<<<<<<<<<<<
@@ -2825,7 +2825,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
               __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-              /* "astropy/nddata/convolution/boundary_fill.pyx":160
+              /* "astropy/convolution/boundary_fill.pyx":161
  *                         if not npy_isnan(val):
  *                             top += val * ker
  *                             bot += ker             # <<<<<<<<<<<<<<
@@ -2839,7 +2839,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
           }
         }
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":161
+        /* "astropy/convolution/boundary_fill.pyx":162
  *                             top += val * ker
  *                             bot += ker
  *                 if bot != 0:             # <<<<<<<<<<<<<<
@@ -2849,7 +2849,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
         __pyx_t_2 = (__pyx_v_bot != 0.0);
         if (__pyx_t_2) {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":162
+          /* "astropy/convolution/boundary_fill.pyx":163
  *                             bot += ker
  *                 if bot != 0:
  *                     conv[i, j] = top / bot             # <<<<<<<<<<<<<<
@@ -2858,16 +2858,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
  */
           if (unlikely(__pyx_v_bot == 0)) {
             PyErr_Format(PyExc_ZeroDivisionError, "float division");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           __pyx_t_42 = __pyx_v_i;
           __pyx_t_43 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
           goto __pyx_L27;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":164
+          /* "astropy/convolution/boundary_fill.pyx":165
  *                     conv[i, j] = top / bot
  *                 else:
  *                     conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
@@ -2878,14 +2878,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
           __pyx_t_45 = __pyx_v_j;
           __pyx_t_46 = __pyx_v_i;
           __pyx_t_47 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[1] [...]
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[1].strides));
         }
         __pyx_L27:;
         goto __pyx_L20;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":166
+        /* "astropy/convolution/boundary_fill.pyx":167
  *                     conv[i, j] = fixed[i, j]
  *             else:
  *                 conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
@@ -2896,13 +2896,13 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
         __pyx_t_49 = __pyx_v_j;
         __pyx_t_50 = __pyx_v_i;
         __pyx_t_51 = __pyx_v_j;
-        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_50, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_51, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].s [...]
+        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_50, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_51, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].strides));
       }
       __pyx_L20:;
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":168
+  /* "astropy/convolution/boundary_fill.pyx":169
  *                 conv[i, j] = fixed[i, j]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -2928,7 +2928,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_fill.convolve2d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve2d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -2945,9 +2945,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_2convol
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_5convolve3d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_fill_5convolve3d_boundary_fill = {__Pyx_NAMESTR("convolve3d_boundary_fill"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_5convolve3d_boundary_fill, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_5convolve3d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_5convolve3d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_fill_5convolve3d_boundary_fill = {__Pyx_NAMESTR("convolve3d_boundary_fill"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_fill_5convolve3d_boundary_fill, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_fill_5convolve3d_boundary_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   float __pyx_v_fill_value;
@@ -2975,16 +2975,16 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_5convol
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_fill", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_fill", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fill_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_fill", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_fill", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_fill") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_fill") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -2995,19 +2995,19 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_5convol
     }
     __pyx_v_f = ((PyArrayObject *)values[0]);
     __pyx_v_g = ((PyArrayObject *)values[1]);
-    __pyx_v_fill_value = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_fill_value == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_fill_value = __pyx_PyFloat_AsFloat(values[2]); if (unlikely((__pyx_v_fill_value == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_fill", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_fill", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_fill.convolve3d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve3d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convolve3d_boundary_fill(__pyx_self, __pyx_v_f, __pyx_v_g, __pyx_v_fill_value);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_fill_4convolve3d_boundary_fill(__pyx_self, __pyx_v_f, __pyx_v_g, __pyx_v_fill_value);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -3016,7 +3016,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_5convol
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_fill.pyx":172
+/* "astropy/convolution/boundary_fill.pyx":173
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_fill(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
@@ -3024,7 +3024,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_fill_5convol
  *                              float fill_value):
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convolve3d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value) {
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_fill_4convolve3d_boundary_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g, float __pyx_v_fill_value) {
   int __pyx_v_nx;
   int __pyx_v_ny;
   int __pyx_v_nz;
@@ -3048,10 +3048,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
   int __pyx_v_jjmax;
   int __pyx_v_kkmin;
   int __pyx_v_kkmax;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -3158,16 +3158,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_f.diminfo[2].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_f.diminfo[2].shape = __pyx_pybu [...]
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_g.diminfo[2].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_g.diminfo[2].shape = __pyx_pybu [...]
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":176
+  /* "astropy/convolution/boundary_fill.pyx":177
  *                              float fill_value):
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -3189,23 +3189,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
   }
   if (__pyx_t_2) {
 
-    /* "astropy/nddata/convolution/boundary_fill.pyx":177
+    /* "astropy/convolution/boundary_fill.pyx":178
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":179
+  /* "astropy/convolution/boundary_fill.pyx":180
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -3213,24 +3213,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   if (__pyx_t_2) {
-    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_4 = __pyx_t_1;
   } else {
@@ -3238,11 +3238,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
   }
   if (unlikely(!__pyx_t_4)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":181
+  /* "astropy/convolution/boundary_fill.pyx":182
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -3251,7 +3251,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":182
+  /* "astropy/convolution/boundary_fill.pyx":183
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
@@ -3260,7 +3260,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
   __pyx_v_ny = (__pyx_v_f->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":183
+  /* "astropy/convolution/boundary_fill.pyx":184
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]
  *     cdef int nz = f.shape[2]             # <<<<<<<<<<<<<<
@@ -3269,7 +3269,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
   __pyx_v_nz = (__pyx_v_f->dimensions[2]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":184
+  /* "astropy/convolution/boundary_fill.pyx":185
  *     cdef int ny = f.shape[1]
  *     cdef int nz = f.shape[2]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -3278,7 +3278,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":185
+  /* "astropy/convolution/boundary_fill.pyx":186
  *     cdef int nz = f.shape[2]
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
@@ -3287,7 +3287,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
   __pyx_v_nky = (__pyx_v_g->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":186
+  /* "astropy/convolution/boundary_fill.pyx":187
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]
  *     cdef int nkz = g.shape[2]             # <<<<<<<<<<<<<<
@@ -3296,7 +3296,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
   __pyx_v_nkz = (__pyx_v_g->dimensions[2]);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":187
+  /* "astropy/convolution/boundary_fill.pyx":188
  *     cdef int nky = g.shape[1]
  *     cdef int nkz = g.shape[2]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -3305,7 +3305,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":188
+  /* "astropy/convolution/boundary_fill.pyx":189
  *     cdef int nkz = g.shape[2]
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
@@ -3314,7 +3314,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
   __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":189
+  /* "astropy/convolution/boundary_fill.pyx":190
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2
  *     cdef int wkz = nkz // 2             # <<<<<<<<<<<<<<
@@ -3323,25 +3323,25 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
   __pyx_v_wkz = __Pyx_div_long(__pyx_v_nkz, 2);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":190
+  /* "astropy/convolution/boundary_fill.pyx":191
  *     cdef int wky = nky // 2
  *     cdef int wkz = nkz // 2
  *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)
  *     cdef unsigned int i, j, k, iii, jjj, kkk
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
@@ -3352,29 +3352,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
   __pyx_t_5 = 0;
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_9));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
   __pyx_t_9 = 0;
-  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_9));
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_10 = ((PyArrayObject *)__pyx_t_7);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_fixed.diminfo[2].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[2] [...]
     }
   }
@@ -3382,25 +3382,25 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":191
+  /* "astropy/convolution/boundary_fill.pyx":192
  *     cdef int wkz = nkz // 2
  *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef unsigned int i, j, k, iii, jjj, kkk
  *     cdef int ii, jj, kk
  */
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_7);
@@ -3411,29 +3411,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_11 = ((PyArrayObject *)__pyx_t_8);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_conv.diminfo[2].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[2]; __pyx_py [...]
     }
   }
@@ -3441,7 +3441,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_8);
   __pyx_t_8 = 0;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":201
+  /* "astropy/convolution/boundary_fill.pyx":202
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -3452,7 +3452,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
   for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
     __pyx_v_i = __pyx_t_13;
 
-    /* "astropy/nddata/convolution/boundary_fill.pyx":202
+    /* "astropy/convolution/boundary_fill.pyx":203
  *     # neighboring values
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -3463,7 +3463,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
     for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
       __pyx_v_j = __pyx_t_15;
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":203
+      /* "astropy/convolution/boundary_fill.pyx":204
  *     for i in range(nx):
  *         for j in range(ny):
  *             for k in range(nz):             # <<<<<<<<<<<<<<
@@ -3474,7 +3474,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
       for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
         __pyx_v_k = __pyx_t_17;
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":204
+        /* "astropy/convolution/boundary_fill.pyx":205
  *         for j in range(ny):
  *             for k in range(nz):
  *                 if npy_isnan(f[i, j, k]):             # <<<<<<<<<<<<<<
@@ -3484,10 +3484,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
         __pyx_t_18 = __pyx_v_i;
         __pyx_t_19 = __pyx_v_j;
         __pyx_t_20 = __pyx_v_k;
-        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
+        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
         if (__pyx_t_4) {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":205
+          /* "astropy/convolution/boundary_fill.pyx":206
  *             for k in range(nz):
  *                 if npy_isnan(f[i, j, k]):
  *                     top = 0.             # <<<<<<<<<<<<<<
@@ -3496,7 +3496,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_top = 0.;
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":206
+          /* "astropy/convolution/boundary_fill.pyx":207
  *                 if npy_isnan(f[i, j, k]):
  *                     top = 0.
  *                     bot = 0.             # <<<<<<<<<<<<<<
@@ -3505,7 +3505,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_bot = 0.;
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":207
+          /* "astropy/convolution/boundary_fill.pyx":208
  *                     top = 0.
  *                     bot = 0.
  *                     iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -3514,7 +3514,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":208
+          /* "astropy/convolution/boundary_fill.pyx":209
  *                     bot = 0.
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -3523,7 +3523,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":209
+          /* "astropy/convolution/boundary_fill.pyx":210
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -3532,7 +3532,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":210
+          /* "astropy/convolution/boundary_fill.pyx":211
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -3541,7 +3541,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":211
+          /* "astropy/convolution/boundary_fill.pyx":212
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
@@ -3550,7 +3550,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":212
+          /* "astropy/convolution/boundary_fill.pyx":213
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
@@ -3559,7 +3559,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":213
+          /* "astropy/convolution/boundary_fill.pyx":214
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -3570,7 +3570,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
           for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
             __pyx_v_ii = __pyx_t_22;
 
-            /* "astropy/nddata/convolution/boundary_fill.pyx":214
+            /* "astropy/convolution/boundary_fill.pyx":215
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -3581,7 +3581,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
             for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
               __pyx_v_jj = __pyx_t_24;
 
-              /* "astropy/nddata/convolution/boundary_fill.pyx":215
+              /* "astropy/convolution/boundary_fill.pyx":216
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
@@ -3592,7 +3592,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
               for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
                 __pyx_v_kk = __pyx_t_26;
 
-                /* "astropy/nddata/convolution/boundary_fill.pyx":216
+                /* "astropy/convolution/boundary_fill.pyx":217
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):
  *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:             # <<<<<<<<<<<<<<
@@ -3632,7 +3632,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
                 }
                 if (__pyx_t_2) {
 
-                  /* "astropy/nddata/convolution/boundary_fill.pyx":217
+                  /* "astropy/convolution/boundary_fill.pyx":218
  *                             for kk in range(kkmin, kkmax):
  *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:
  *                                     val = fill_value             # <<<<<<<<<<<<<<
@@ -3644,7 +3644,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
                 }
                 /*else*/ {
 
-                  /* "astropy/nddata/convolution/boundary_fill.pyx":219
+                  /* "astropy/convolution/boundary_fill.pyx":220
  *                                     val = fill_value
  *                                 else:
  *                                     val = f[ii, jj, kk]             # <<<<<<<<<<<<<<
@@ -3657,11 +3657,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
                   if (__pyx_t_30 < 0) __pyx_t_30 += __pyx_pybuffernd_f.diminfo[0].shape;
                   if (__pyx_t_31 < 0) __pyx_t_31 += __pyx_pybuffernd_f.diminfo[1].shape;
                   if (__pyx_t_32 < 0) __pyx_t_32 += __pyx_pybuffernd_f.diminfo[2].shape;
-                  __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_32, __pyx_pybuffernd_f.diminfo[2].strides));
+                  __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_32, __pyx_pybuffernd_f.diminfo[2].strides));
                 }
                 __pyx_L17:;
 
-                /* "astropy/nddata/convolution/boundary_fill.pyx":220
+                /* "astropy/convolution/boundary_fill.pyx":221
  *                                 else:
  *                                     val = f[ii, jj, kk]
  *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -3671,7 +3671,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
                 __pyx_t_2 = (!npy_isnan(__pyx_v_val));
                 if (__pyx_t_2) {
 
-                  /* "astropy/nddata/convolution/boundary_fill.pyx":223
+                  /* "astropy/convolution/boundary_fill.pyx":224
  *                                     ker = g[<unsigned int>(wkx + ii - i),
  *                                             <unsigned int>(wky + jj - j),
  *                                             <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
@@ -3681,9 +3681,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
                   __pyx_t_33 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
                   __pyx_t_34 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
                   __pyx_t_35 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
-                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_35, __pyx_pybuffernd_g.diminfo[2].strides));
+                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_35, __pyx_pybuffernd_g.diminfo[2].strides));
 
-                  /* "astropy/nddata/convolution/boundary_fill.pyx":224
+                  /* "astropy/convolution/boundary_fill.pyx":225
  *                                             <unsigned int>(wky + jj - j),
  *                                             <unsigned int>(wkz + kk - k)]
  *                                     top += val * ker             # <<<<<<<<<<<<<<
@@ -3692,7 +3692,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
                   __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-                  /* "astropy/nddata/convolution/boundary_fill.pyx":225
+                  /* "astropy/convolution/boundary_fill.pyx":226
  *                                             <unsigned int>(wkz + kk - k)]
  *                                     top += val * ker
  *                                     bot += ker             # <<<<<<<<<<<<<<
@@ -3707,7 +3707,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
             }
           }
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":226
+          /* "astropy/convolution/boundary_fill.pyx":227
  *                                     top += val * ker
  *                                     bot += ker
  *                     if bot != 0.:             # <<<<<<<<<<<<<<
@@ -3717,7 +3717,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
           __pyx_t_2 = (__pyx_v_bot != 0.);
           if (__pyx_t_2) {
 
-            /* "astropy/nddata/convolution/boundary_fill.pyx":227
+            /* "astropy/convolution/boundary_fill.pyx":228
  *                                     bot += ker
  *                     if bot != 0.:
  *                         fixed[i, j, k] = top / bot             # <<<<<<<<<<<<<<
@@ -3726,17 +3726,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
             if (unlikely(__pyx_v_bot == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "float division");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             __pyx_t_36 = __pyx_v_i;
             __pyx_t_37 = __pyx_v_j;
             __pyx_t_38 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_38, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_38, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
             goto __pyx_L19;
           }
           /*else*/ {
 
-            /* "astropy/nddata/convolution/boundary_fill.pyx":229
+            /* "astropy/convolution/boundary_fill.pyx":230
  *                         fixed[i, j, k] = top / bot
  *                     else:
  *                         fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
@@ -3749,14 +3749,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
             __pyx_t_42 = __pyx_v_i;
             __pyx_t_43 = __pyx_v_j;
             __pyx_t_44 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_f.diminfo[0].st [...]
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_4 [...]
           }
           __pyx_L19:;
           goto __pyx_L10;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":231
+          /* "astropy/convolution/boundary_fill.pyx":232
  *                         fixed[i, j, k] = f[i, j, k]
  *                 else:
  *                     fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
@@ -3769,14 +3769,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
           __pyx_t_48 = __pyx_v_i;
           __pyx_t_49 = __pyx_v_j;
           __pyx_t_50 = __pyx_v_k;
-          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_50, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_f.diminfo[0].stri [...]
+          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_50, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_46, [...]
         }
         __pyx_L10:;
       }
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":234
+  /* "astropy/convolution/boundary_fill.pyx":235
  * 
  *     # Now run the proper convolution
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -3787,7 +3787,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
   for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
     __pyx_v_i = __pyx_t_13;
 
-    /* "astropy/nddata/convolution/boundary_fill.pyx":235
+    /* "astropy/convolution/boundary_fill.pyx":236
  *     # Now run the proper convolution
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -3798,7 +3798,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
     for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
       __pyx_v_j = __pyx_t_15;
 
-      /* "astropy/nddata/convolution/boundary_fill.pyx":236
+      /* "astropy/convolution/boundary_fill.pyx":237
  *     for i in range(nx):
  *         for j in range(ny):
  *             for k in range(nz):             # <<<<<<<<<<<<<<
@@ -3809,7 +3809,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
       for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
         __pyx_v_k = __pyx_t_17;
 
-        /* "astropy/nddata/convolution/boundary_fill.pyx":237
+        /* "astropy/convolution/boundary_fill.pyx":238
  *         for j in range(ny):
  *             for k in range(nz):
  *                 if not npy_isnan(fixed[i, j, k]):             # <<<<<<<<<<<<<<
@@ -3819,10 +3819,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
         __pyx_t_51 = __pyx_v_i;
         __pyx_t_52 = __pyx_v_j;
         __pyx_t_53 = __pyx_v_k;
-        __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_52, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_53, __pyx_pybuffernd_fixed.diminfo[2].strides))));
+        __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_52, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_53, __pyx_pybuffernd_fixed.diminfo[2].strides))));
         if (__pyx_t_2) {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":238
+          /* "astropy/convolution/boundary_fill.pyx":239
  *             for k in range(nz):
  *                 if not npy_isnan(fixed[i, j, k]):
  *                     top = 0.             # <<<<<<<<<<<<<<
@@ -3831,7 +3831,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_top = 0.;
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":239
+          /* "astropy/convolution/boundary_fill.pyx":240
  *                 if not npy_isnan(fixed[i, j, k]):
  *                     top = 0.
  *                     bot = 0.             # <<<<<<<<<<<<<<
@@ -3840,7 +3840,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_bot = 0.;
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":240
+          /* "astropy/convolution/boundary_fill.pyx":241
  *                     top = 0.
  *                     bot = 0.
  *                     iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -3849,7 +3849,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":241
+          /* "astropy/convolution/boundary_fill.pyx":242
  *                     bot = 0.
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -3858,7 +3858,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":242
+          /* "astropy/convolution/boundary_fill.pyx":243
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -3867,7 +3867,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":243
+          /* "astropy/convolution/boundary_fill.pyx":244
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -3876,7 +3876,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":244
+          /* "astropy/convolution/boundary_fill.pyx":245
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
@@ -3885,7 +3885,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":245
+          /* "astropy/convolution/boundary_fill.pyx":246
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
@@ -3894,7 +3894,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
           __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":246
+          /* "astropy/convolution/boundary_fill.pyx":247
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -3905,7 +3905,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
           for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
             __pyx_v_ii = __pyx_t_22;
 
-            /* "astropy/nddata/convolution/boundary_fill.pyx":247
+            /* "astropy/convolution/boundary_fill.pyx":248
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -3916,7 +3916,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
             for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
               __pyx_v_jj = __pyx_t_24;
 
-              /* "astropy/nddata/convolution/boundary_fill.pyx":248
+              /* "astropy/convolution/boundary_fill.pyx":249
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
@@ -3927,7 +3927,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
               for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
                 __pyx_v_kk = __pyx_t_26;
 
-                /* "astropy/nddata/convolution/boundary_fill.pyx":249
+                /* "astropy/convolution/boundary_fill.pyx":250
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):
  *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:             # <<<<<<<<<<<<<<
@@ -3967,7 +3967,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
                 }
                 if (__pyx_t_4) {
 
-                  /* "astropy/nddata/convolution/boundary_fill.pyx":250
+                  /* "astropy/convolution/boundary_fill.pyx":251
  *                             for kk in range(kkmin, kkmax):
  *                                 if ii < 0 or ii > nx - 1 or jj < 0 or jj > ny - 1 or kk < 0 or kk > nz - 1:
  *                                     val = fill_value             # <<<<<<<<<<<<<<
@@ -3979,7 +3979,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
                 }
                 /*else*/ {
 
-                  /* "astropy/nddata/convolution/boundary_fill.pyx":252
+                  /* "astropy/convolution/boundary_fill.pyx":253
  *                                     val = fill_value
  *                                 else:
  *                                     val = fixed[ii, jj, kk]             # <<<<<<<<<<<<<<
@@ -3992,11 +3992,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
                   if (__pyx_t_54 < 0) __pyx_t_54 += __pyx_pybuffernd_fixed.diminfo[0].shape;
                   if (__pyx_t_55 < 0) __pyx_t_55 += __pyx_pybuffernd_fixed.diminfo[1].shape;
                   if (__pyx_t_56 < 0) __pyx_t_56 += __pyx_pybuffernd_fixed.diminfo[2].shape;
-                  __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_fixed.diminfo[2].strides));
+                  __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_fixed.diminfo[2].strides));
                 }
                 __pyx_L33:;
 
-                /* "astropy/nddata/convolution/boundary_fill.pyx":255
+                /* "astropy/convolution/boundary_fill.pyx":256
  *                                 ker = g[<unsigned int>(wkx + ii - i),
  *                                         <unsigned int>(wky + jj - j),
  *                                         <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
@@ -4006,9 +4006,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
                 __pyx_t_57 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
                 __pyx_t_58 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
                 __pyx_t_59 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
-                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_59, __pyx_pybuffernd_g.diminfo[2].strides));
+                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_59, __pyx_pybuffernd_g.diminfo[2].strides));
 
-                /* "astropy/nddata/convolution/boundary_fill.pyx":256
+                /* "astropy/convolution/boundary_fill.pyx":257
  *                                         <unsigned int>(wky + jj - j),
  *                                         <unsigned int>(wkz + kk - k)]
  *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -4018,7 +4018,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
                 __pyx_t_4 = (!npy_isnan(__pyx_v_val));
                 if (__pyx_t_4) {
 
-                  /* "astropy/nddata/convolution/boundary_fill.pyx":257
+                  /* "astropy/convolution/boundary_fill.pyx":258
  *                                         <unsigned int>(wkz + kk - k)]
  *                                 if not npy_isnan(val):
  *                                     top += val * ker             # <<<<<<<<<<<<<<
@@ -4027,7 +4027,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
                   __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-                  /* "astropy/nddata/convolution/boundary_fill.pyx":258
+                  /* "astropy/convolution/boundary_fill.pyx":259
  *                                 if not npy_isnan(val):
  *                                     top += val * ker
  *                                     bot += ker             # <<<<<<<<<<<<<<
@@ -4042,7 +4042,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
             }
           }
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":259
+          /* "astropy/convolution/boundary_fill.pyx":260
  *                                     top += val * ker
  *                                     bot += ker
  *                     if bot != 0:             # <<<<<<<<<<<<<<
@@ -4052,7 +4052,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
           __pyx_t_4 = (__pyx_v_bot != 0.0);
           if (__pyx_t_4) {
 
-            /* "astropy/nddata/convolution/boundary_fill.pyx":260
+            /* "astropy/convolution/boundary_fill.pyx":261
  *                                     bot += ker
  *                     if bot != 0:
  *                         conv[i, j, k] = top / bot             # <<<<<<<<<<<<<<
@@ -4061,17 +4061,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
  */
             if (unlikely(__pyx_v_bot == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "float division");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             __pyx_t_60 = __pyx_v_i;
             __pyx_t_61 = __pyx_v_j;
             __pyx_t_62 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_61, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_62, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_61, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_62, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
             goto __pyx_L35;
           }
           /*else*/ {
 
-            /* "astropy/nddata/convolution/boundary_fill.pyx":262
+            /* "astropy/convolution/boundary_fill.pyx":263
  *                         conv[i, j, k] = top / bot
  *                     else:
  *                         conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
@@ -4084,14 +4084,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
             __pyx_t_66 = __pyx_v_i;
             __pyx_t_67 = __pyx_v_j;
             __pyx_t_68 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_67, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_68, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_fixed.diminfo[0 [...]
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_67, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_68, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx [...]
           }
           __pyx_L35:;
           goto __pyx_L26;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_fill.pyx":264
+          /* "astropy/convolution/boundary_fill.pyx":265
  *                         conv[i, j, k] = fixed[i, j, k]
  *                 else:
  *                     conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
@@ -4104,14 +4104,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
           __pyx_t_72 = __pyx_v_i;
           __pyx_t_73 = __pyx_v_j;
           __pyx_t_74 = __pyx_v_k;
-          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_72, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_73, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_74, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_fixed.diminfo[0]. [...]
+          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_72, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_73, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_74, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_fill_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t [...]
         }
         __pyx_L26:;
       }
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":266
+  /* "astropy/convolution/boundary_fill.pyx":267
  *                     conv[i, j, k] = fixed[i, j, k]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -4136,7 +4136,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_fill_4convol
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_fill.convolve3d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_fill.convolve3d_boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -6209,8 +6209,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
@@ -6221,36 +6221,36 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":20
+  /* "astropy/convolution/boundary_fill.pyx":21
  * 
  *     if g.shape[0] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_2);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":92
+  /* "astropy/convolution/boundary_fill.pyx":93
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_3);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_3));
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":177
+  /* "astropy/convolution/boundary_fill.pyx":178
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_4);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
 
@@ -6320,41 +6320,41 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_k_tuple_16);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_16));
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":15
+  /* "astropy/convolution/boundary_fill.pyx":16
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_fill(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=1] g,
  *                              float fill_value):
  */
-  __pyx_k_tuple_17 = PyTuple_Pack(17, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__fill_value), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot) [...]
+  __pyx_k_tuple_17 = PyTuple_Pack(17, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__fill_value), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot) [...]
   __Pyx_GOTREF(__pyx_k_tuple_17);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_17));
-  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(3, 0, 17, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 15, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(3, 0, 17, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 16, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":87
+  /* "astropy/convolution/boundary_fill.pyx":88
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_fill(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=2] g,
  *                              float fill_value):
  */
-  __pyx_k_tuple_22 = PyTuple_Pack(25, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__fill_value), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__jjj), ((Py [...]
+  __pyx_k_tuple_22 = PyTuple_Pack(25, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__fill_value), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__jjj), ((Py [...]
   __Pyx_GOTREF(__pyx_k_tuple_22);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_22));
-  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(3, 0, 25, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 87, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(3, 0, 25, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 88, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":172
+  /* "astropy/convolution/boundary_fill.pyx":173
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_fill(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=3] g,
  *                              float fill_value):
  */
-  __pyx_k_tuple_25 = PyTuple_Pack(33, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__fill_value), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((P [...]
+  __pyx_k_tuple_25 = PyTuple_Pack(33, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__fill_value), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((P [...]
   __Pyx_GOTREF(__pyx_k_tuple_25);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
-  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(3, 0, 33, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 172, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(3, 0, 33, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 173, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -6420,8 +6420,8 @@ PyMODINIT_FUNC PyInit_boundary_fill(void)
   #if PY_MAJOR_VERSION >= 3
   {
     PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (!PyDict_GetItemString(modules, "astropy.nddata.convolution.boundary_fill")) {
-      if (unlikely(PyDict_SetItemString(modules, "astropy.nddata.convolution.boundary_fill", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!PyDict_GetItemString(modules, "astropy.convolution.boundary_fill")) {
+      if (unlikely(PyDict_SetItemString(modules, "astropy.convolution.boundary_fill", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
@@ -6432,7 +6432,7 @@ PyMODINIT_FUNC PyInit_boundary_fill(void)
   if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   /*--- Initialize various global constants etc. ---*/
   if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_module_is_main_astropy__nddata__convolution__boundary_fill) {
+  if (__pyx_module_is_main_astropy__convolution__boundary_fill) {
     if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   }
   /*--- Builtin init code ---*/
@@ -6460,72 +6460,73 @@ PyMODINIT_FUNC PyInit_boundary_fill(void)
   /*--- Function import code ---*/
   /*--- Execution code ---*/
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":2
+  /* "astropy/convolution/boundary_fill.pyx":3
+ * # Licensed under a 3-clause BSD style license - see LICENSE.rst
  * from __future__ import division
  * import numpy as np             # <<<<<<<<<<<<<<
  * cimport numpy as np
  * 
  */
-  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":5
+  /* "astropy/convolution/boundary_fill.pyx":6
  * cimport numpy as np
  * 
  * DTYPE = np.float             # <<<<<<<<<<<<<<
  * ctypedef np.float_t DTYPE_t
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":15
+  /* "astropy/convolution/boundary_fill.pyx":16
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_fill(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=1] g,
  *                              float fill_value):
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_fill_1convolve1d_boundary_fill, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_fill_1convolve1d_boundary_fill, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":87
+  /* "astropy/convolution/boundary_fill.pyx":88
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_fill(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=2] g,
  *                              float fill_value):
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_fill_3convolve2d_boundary_fill, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_fill_3convolve2d_boundary_fill, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":172
+  /* "astropy/convolution/boundary_fill.pyx":173
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_fill(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=3] g,
  *                              float fill_value):
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_fill_5convolve3d_boundary_fill, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_fill_5convolve3d_boundary_fill, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_fill.pyx":1
- * from __future__ import division             # <<<<<<<<<<<<<<
+  /* "astropy/convolution/boundary_fill.pyx":1
+ * # Licensed under a 3-clause BSD style license - see LICENSE.rst             # <<<<<<<<<<<<<<
+ * from __future__ import division
  * import numpy as np
- * cimport numpy as np
  */
   __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
@@ -6544,10 +6545,10 @@ PyMODINIT_FUNC PyInit_boundary_fill(void)
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   if (__pyx_m) {
-    __Pyx_AddTraceback("init astropy.nddata.convolution.boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    __Pyx_AddTraceback("init astropy.convolution.boundary_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
     Py_DECREF(__pyx_m); __pyx_m = 0;
   } else if (!PyErr_Occurred()) {
-    PyErr_SetString(PyExc_ImportError, "init astropy.nddata.convolution.boundary_fill");
+    PyErr_SetString(PyExc_ImportError, "init astropy.convolution.boundary_fill");
   }
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
diff --git a/astropy/nddata/convolution/boundary_fill.pyx b/astropy/convolution/boundary_fill.pyx
similarity index 99%
rename from astropy/nddata/convolution/boundary_fill.pyx
rename to astropy/convolution/boundary_fill.pyx
index f63e512..a27d8ae 100644
--- a/astropy/nddata/convolution/boundary_fill.pyx
+++ b/astropy/convolution/boundary_fill.pyx
@@ -1,3 +1,4 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
 from __future__ import division
 import numpy as np
 cimport numpy as np
diff --git a/astropy/nddata/convolution/boundary_none.c b/astropy/convolution/boundary_none.c
similarity index 86%
copy from astropy/nddata/convolution/boundary_none.c
copy to astropy/convolution/boundary_none.c
index 89f09ce..6423018 100644
--- a/astropy/nddata/convolution/boundary_none.c
+++ b/astropy/convolution/boundary_none.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.18 on Fri Oct 25 12:27:41 2013 */
+/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -249,8 +249,8 @@
 #define _USE_MATH_DEFINES
 #endif
 #include <math.h>
-#define __PYX_HAVE__astropy__nddata__convolution__boundary_none
-#define __PYX_HAVE_API__astropy__nddata__convolution__boundary_none
+#define __PYX_HAVE__astropy__convolution__boundary_none
+#define __PYX_HAVE_API__astropy__convolution__boundary_none
 #include "string.h"
 #include "stdio.h"
 #include "stdlib.h"
@@ -583,14 +583,14 @@ typedef npy_double __pyx_t_5numpy_double_t;
  */
 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 
-/* "astropy/nddata/convolution/boundary_none.pyx":6
+/* "astropy/convolution/boundary_none.pyx":7
  * 
  * DTYPE = np.float
  * ctypedef np.float_t DTYPE_t             # <<<<<<<<<<<<<<
  * 
  * cdef extern from "numpy/npy_math.h":
  */
-typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t;
+typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t;
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     typedef ::std::complex< float > __pyx_t_float_complex;
@@ -965,18 +965,18 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, cha
 
 /* Module declarations from 'cython' */
 
-/* Module declarations from 'astropy.nddata.convolution.boundary_none' */
-static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
-#define __Pyx_MODULE_NAME "astropy.nddata.convolution.boundary_none"
-int __pyx_module_is_main_astropy__nddata__convolution__boundary_none = 0;
+/* Module declarations from 'astropy.convolution.boundary_none' */
+static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
+#define __Pyx_MODULE_NAME "astropy.convolution.boundary_none"
+int __pyx_module_is_main_astropy__convolution__boundary_none = 0;
 
-/* Implementation of 'astropy.nddata.convolution.boundary_none' */
+/* Implementation of 'astropy.convolution.boundary_none' */
 static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_range;
 static PyObject *__pyx_builtin_RuntimeError;
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolve1d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convolve2d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convolve3d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_convolve1d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_2convolve2d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_4convolve3d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
 static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
 static char __pyx_k_1[] = "Convolution kernel must have odd dimensions";
@@ -987,8 +987,8 @@ static char __pyx_k_11[] = "unknown dtype code in numpy.pxd (%d)";
 static char __pyx_k_12[] = "Format string allocated too short, see comment in numpy.pxd";
 static char __pyx_k_15[] = "Format string allocated too short.";
 static char __pyx_k_19[] = "convolve1d_boundary_none";
-static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/nddata/convolution/boundary_none.pyx";
-static char __pyx_k_21[] = "astropy.nddata.convolution.boundary_none";
+static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/convolution/boundary_none.pyx";
+static char __pyx_k_21[] = "astropy.convolution.boundary_none";
 static char __pyx_k_24[] = "convolve2d_boundary_none";
 static char __pyx_k_27[] = "convolve3d_boundary_none";
 static char __pyx_k__B[] = "B";
@@ -1115,9 +1115,9 @@ static PyObject *__pyx_k_codeobj_23;
 static PyObject *__pyx_k_codeobj_26;
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convolve1d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_1convolve1d_boundary_none = {__Pyx_NAMESTR("convolve1d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convolve1d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convolve1d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_1convolve1d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_none_1convolve1d_boundary_none = {__Pyx_NAMESTR("convolve1d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_none_1convolve1d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_1convolve1d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   PyObject *__pyx_r = 0;
@@ -1143,11 +1143,11 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convol
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -1160,15 +1160,15 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convol
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve1d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve1d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolve1d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_none_convolve1d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -1177,7 +1177,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convol
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_none.pyx":15
+/* "astropy/convolution/boundary_none.pyx":16
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_none(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
@@ -1185,7 +1185,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convol
  * 
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolve1d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_convolve1d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
   int __pyx_v_nx;
   int __pyx_v_nkx;
   int __pyx_v_wkx;
@@ -1193,10 +1193,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
   PyArrayObject *__pyx_v_conv = 0;
   unsigned int __pyx_v_i;
   unsigned int __pyx_v_ii;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -1219,8 +1219,8 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
   int __pyx_t_10;
   unsigned int __pyx_t_11;
   unsigned int __pyx_t_12;
-  long __pyx_t_13;
-  unsigned int __pyx_t_14;
+  int __pyx_t_13;
+  long __pyx_t_14;
   unsigned int __pyx_t_15;
   unsigned int __pyx_t_16;
   unsigned int __pyx_t_17;
@@ -1235,6 +1235,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
   unsigned int __pyx_t_26;
   unsigned int __pyx_t_27;
   unsigned int __pyx_t_28;
+  unsigned int __pyx_t_29;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -1257,16 +1258,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":18
+  /* "astropy/convolution/boundary_none.pyx":19
  *                              np.ndarray[DTYPE_t, ndim=1] g):
  * 
  *     if g.shape[0] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -1276,23 +1277,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
   __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
   if (__pyx_t_1) {
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":19
+    /* "astropy/convolution/boundary_none.pyx":20
  * 
  *     if g.shape[0] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":21
+  /* "astropy/convolution/boundary_none.pyx":22
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -1300,24 +1301,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (__pyx_t_1) {
-    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_6 = __pyx_t_5;
   } else {
@@ -1325,11 +1326,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
   }
   if (unlikely(!__pyx_t_6)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":23
+  /* "astropy/convolution/boundary_none.pyx":24
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -1338,7 +1339,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":24
+  /* "astropy/convolution/boundary_none.pyx":25
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -1347,7 +1348,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":25
+  /* "astropy/convolution/boundary_none.pyx":26
  *     cdef int nx = f.shape[0]
  *     cdef int nkx = g.shape[0]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -1356,48 +1357,48 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":29
+  /* "astropy/convolution/boundary_none.pyx":30
  *     # The following need to be set to zeros rather than empty because the
  *     # boundary does not get reset.
  *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.zeros([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.zeros([nx], dtype=DTYPE)
  * 
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_7);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -1405,48 +1406,48 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":30
+  /* "astropy/convolution/boundary_none.pyx":31
  *     # boundary does not get reset.
  *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.zeros([nx], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.zeros([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
  * 
  *     cdef unsigned int i, ii
  */
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
-  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_t_2));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_9 = ((PyArrayObject *)__pyx_t_3);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -1454,39 +1455,51 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":40
+  /* "astropy/convolution/boundary_none.pyx":41
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
- *         if npy_isnan(f[i]):
+ *     for i in range(nx):             # <<<<<<<<<<<<<<
+ *         if npy_isnan(f[i]) and i >= wkx and i < nx - wkx:
  *             top = 0.
  */
-  __pyx_t_10 = (__pyx_v_nx - __pyx_v_wkx);
-  for (__pyx_t_11 = __pyx_v_wkx; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+  __pyx_t_10 = __pyx_v_nx;
+  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":41
+    /* "astropy/convolution/boundary_none.pyx":42
  *     # neighboring values
- *     for i in range(wkx, nx - wkx):
- *         if npy_isnan(f[i]):             # <<<<<<<<<<<<<<
+ *     for i in range(nx):
+ *         if npy_isnan(f[i]) and i >= wkx and i < nx - wkx:             # <<<<<<<<<<<<<<
  *             top = 0.
  *             bot = 0.
  */
     __pyx_t_12 = __pyx_v_i;
-    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
+    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
     if (__pyx_t_6) {
+      __pyx_t_1 = (__pyx_v_i >= __pyx_v_wkx);
+      if (__pyx_t_1) {
+        __pyx_t_5 = (__pyx_v_i < (__pyx_v_nx - __pyx_v_wkx));
+        __pyx_t_13 = __pyx_t_5;
+      } else {
+        __pyx_t_13 = __pyx_t_1;
+      }
+      __pyx_t_1 = __pyx_t_13;
+    } else {
+      __pyx_t_1 = __pyx_t_6;
+    }
+    if (__pyx_t_1) {
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":42
- *     for i in range(wkx, nx - wkx):
- *         if npy_isnan(f[i]):
+      /* "astropy/convolution/boundary_none.pyx":43
+ *     for i in range(nx):
+ *         if npy_isnan(f[i]) and i >= wkx and i < nx - wkx:
  *             top = 0.             # <<<<<<<<<<<<<<
  *             bot = 0.
  *             for ii in range(i - wkx, i + wkx + 1):
  */
       __pyx_v_top = 0.;
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":43
- *         if npy_isnan(f[i]):
+      /* "astropy/convolution/boundary_none.pyx":44
+ *         if npy_isnan(f[i]) and i >= wkx and i < nx - wkx:
  *             top = 0.
  *             bot = 0.             # <<<<<<<<<<<<<<
  *             for ii in range(i - wkx, i + wkx + 1):
@@ -1494,48 +1507,48 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
  */
       __pyx_v_bot = 0.;
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":44
+      /* "astropy/convolution/boundary_none.pyx":45
  *             top = 0.
  *             bot = 0.
  *             for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
  *                 val = f[ii]
  *                 if not npy_isnan(val):
  */
-      __pyx_t_13 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-      for (__pyx_t_14 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
-        __pyx_v_ii = __pyx_t_14;
+      __pyx_t_14 = ((__pyx_v_i + __pyx_v_wkx) + 1);
+      for (__pyx_t_15 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+        __pyx_v_ii = __pyx_t_15;
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":45
+        /* "astropy/convolution/boundary_none.pyx":46
  *             bot = 0.
  *             for ii in range(i - wkx, i + wkx + 1):
  *                 val = f[ii]             # <<<<<<<<<<<<<<
  *                 if not npy_isnan(val):
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  */
-        __pyx_t_15 = __pyx_v_ii;
-        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_f.diminfo[0].strides));
+        __pyx_t_16 = __pyx_v_ii;
+        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_f.diminfo[0].strides));
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":46
+        /* "astropy/convolution/boundary_none.pyx":47
  *             for ii in range(i - wkx, i + wkx + 1):
  *                 val = f[ii]
  *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  *                     top += val * ker
  */
-        __pyx_t_6 = (!npy_isnan(__pyx_v_val));
-        if (__pyx_t_6) {
+        __pyx_t_1 = (!npy_isnan(__pyx_v_val));
+        if (__pyx_t_1) {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":47
+          /* "astropy/convolution/boundary_none.pyx":48
  *                 val = f[ii]
  *                 if not npy_isnan(val):
  *                     ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
  *                     top += val * ker
  *                     bot += ker
  */
-          __pyx_t_16 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_g.diminfo[0].strides));
+          __pyx_t_17 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
+          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_g.diminfo[0].strides));
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":48
+          /* "astropy/convolution/boundary_none.pyx":49
  *                 if not npy_isnan(val):
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  *                     top += val * ker             # <<<<<<<<<<<<<<
@@ -1544,7 +1557,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
  */
           __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":49
+          /* "astropy/convolution/boundary_none.pyx":50
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  *                     top += val * ker
  *                     bot += ker             # <<<<<<<<<<<<<<
@@ -1557,17 +1570,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
         __pyx_L9:;
       }
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":50
+      /* "astropy/convolution/boundary_none.pyx":51
  *                     top += val * ker
  *                     bot += ker
  *             if bot != 0.:             # <<<<<<<<<<<<<<
  *                 fixed[i] = top / bot
  *             else:
  */
-      __pyx_t_6 = (__pyx_v_bot != 0.);
-      if (__pyx_t_6) {
+      __pyx_t_1 = (__pyx_v_bot != 0.);
+      if (__pyx_t_1) {
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":51
+        /* "astropy/convolution/boundary_none.pyx":52
  *                     bot += ker
  *             if bot != 0.:
  *                 fixed[i] = top / bot             # <<<<<<<<<<<<<<
@@ -1576,45 +1589,45 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
  */
         if (unlikely(__pyx_v_bot == 0)) {
           PyErr_Format(PyExc_ZeroDivisionError, "float division");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
-        __pyx_t_14 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
+        __pyx_t_15 = __pyx_v_i;
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
         goto __pyx_L10;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":53
+        /* "astropy/convolution/boundary_none.pyx":54
  *                 fixed[i] = top / bot
  *             else:
  *                 fixed[i] = f[i]             # <<<<<<<<<<<<<<
  *         else:
  *             fixed[i] = f[i]
  */
-        __pyx_t_17 = __pyx_v_i;
         __pyx_t_18 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_f.diminfo[0].strides));
+        __pyx_t_19 = __pyx_v_i;
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides));
       }
       __pyx_L10:;
       goto __pyx_L6;
     }
     /*else*/ {
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":55
+      /* "astropy/convolution/boundary_none.pyx":56
  *                 fixed[i] = f[i]
  *         else:
  *             fixed[i] = f[i]             # <<<<<<<<<<<<<<
  * 
  *     # Now run the proper convolution
  */
-      __pyx_t_19 = __pyx_v_i;
       __pyx_t_20 = __pyx_v_i;
-      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_f.diminfo[0].strides));
+      __pyx_t_21 = __pyx_v_i;
+      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides));
     }
     __pyx_L6:;
   }
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":58
+  /* "astropy/convolution/boundary_none.pyx":59
  * 
  *     # Now run the proper convolution
  *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
@@ -1625,18 +1638,18 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
   for (__pyx_t_11 = __pyx_v_wkx; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":59
+    /* "astropy/convolution/boundary_none.pyx":60
  *     # Now run the proper convolution
  *     for i in range(wkx, nx - wkx):
  *         if not npy_isnan(fixed[i]):             # <<<<<<<<<<<<<<
  *             top = 0.
  *             bot = 0.
  */
-    __pyx_t_21 = __pyx_v_i;
-    __pyx_t_6 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides))));
-    if (__pyx_t_6) {
+    __pyx_t_22 = __pyx_v_i;
+    __pyx_t_1 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides))));
+    if (__pyx_t_1) {
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":60
+      /* "astropy/convolution/boundary_none.pyx":61
  *     for i in range(wkx, nx - wkx):
  *         if not npy_isnan(fixed[i]):
  *             top = 0.             # <<<<<<<<<<<<<<
@@ -1645,7 +1658,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
  */
       __pyx_v_top = 0.;
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":61
+      /* "astropy/convolution/boundary_none.pyx":62
  *         if not npy_isnan(fixed[i]):
  *             top = 0.
  *             bot = 0.             # <<<<<<<<<<<<<<
@@ -1654,48 +1667,48 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
  */
       __pyx_v_bot = 0.;
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":62
+      /* "astropy/convolution/boundary_none.pyx":63
  *             top = 0.
  *             bot = 0.
  *             for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
  *                 val = fixed[ii]
  *                 ker = g[<unsigned int>(wkx + ii - i)]
  */
-      __pyx_t_13 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-      for (__pyx_t_22 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_22 < __pyx_t_13; __pyx_t_22+=1) {
-        __pyx_v_ii = __pyx_t_22;
+      __pyx_t_14 = ((__pyx_v_i + __pyx_v_wkx) + 1);
+      for (__pyx_t_23 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_23 < __pyx_t_14; __pyx_t_23+=1) {
+        __pyx_v_ii = __pyx_t_23;
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":63
+        /* "astropy/convolution/boundary_none.pyx":64
  *             bot = 0.
  *             for ii in range(i - wkx, i + wkx + 1):
  *                 val = fixed[ii]             # <<<<<<<<<<<<<<
  *                 ker = g[<unsigned int>(wkx + ii - i)]
  *                 if not npy_isnan(val):
  */
-        __pyx_t_23 = __pyx_v_ii;
-        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_fixed.diminfo[0].strides));
+        __pyx_t_24 = __pyx_v_ii;
+        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_fixed.diminfo[0].strides));
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":64
+        /* "astropy/convolution/boundary_none.pyx":65
  *             for ii in range(i - wkx, i + wkx + 1):
  *                 val = fixed[ii]
  *                 ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
  *                 if not npy_isnan(val):
  *                     top += val * ker
  */
-        __pyx_t_24 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides));
+        __pyx_t_25 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
+        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_g.diminfo[0].strides));
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":65
+        /* "astropy/convolution/boundary_none.pyx":66
  *                 val = fixed[ii]
  *                 ker = g[<unsigned int>(wkx + ii - i)]
  *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
  *                     top += val * ker
  *                     bot += ker
  */
-        __pyx_t_6 = (!npy_isnan(__pyx_v_val));
-        if (__pyx_t_6) {
+        __pyx_t_1 = (!npy_isnan(__pyx_v_val));
+        if (__pyx_t_1) {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":66
+          /* "astropy/convolution/boundary_none.pyx":67
  *                 ker = g[<unsigned int>(wkx + ii - i)]
  *                 if not npy_isnan(val):
  *                     top += val * ker             # <<<<<<<<<<<<<<
@@ -1704,7 +1717,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
  */
           __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":67
+          /* "astropy/convolution/boundary_none.pyx":68
  *                 if not npy_isnan(val):
  *                     top += val * ker
  *                     bot += ker             # <<<<<<<<<<<<<<
@@ -1717,17 +1730,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
         __pyx_L16:;
       }
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":68
+      /* "astropy/convolution/boundary_none.pyx":69
  *                     top += val * ker
  *                     bot += ker
  *             if bot != 0:             # <<<<<<<<<<<<<<
  *                 conv[i] = top / bot
  *             else:
  */
-      __pyx_t_6 = (__pyx_v_bot != 0.0);
-      if (__pyx_t_6) {
+      __pyx_t_1 = (__pyx_v_bot != 0.0);
+      if (__pyx_t_1) {
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":69
+        /* "astropy/convolution/boundary_none.pyx":70
  *                     bot += ker
  *             if bot != 0:
  *                 conv[i] = top / bot             # <<<<<<<<<<<<<<
@@ -1736,45 +1749,45 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
  */
         if (unlikely(__pyx_v_bot == 0)) {
           PyErr_Format(PyExc_ZeroDivisionError, "float division");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
-        __pyx_t_22 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
+        __pyx_t_23 = __pyx_v_i;
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
         goto __pyx_L17;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":71
+        /* "astropy/convolution/boundary_none.pyx":72
  *                 conv[i] = top / bot
  *             else:
  *                 conv[i] = fixed[i]             # <<<<<<<<<<<<<<
  *         else:
  *             conv[i] = fixed[i]
  */
-        __pyx_t_25 = __pyx_v_i;
         __pyx_t_26 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_fixed.diminfo[0].strides));
+        __pyx_t_27 = __pyx_v_i;
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides));
       }
       __pyx_L17:;
       goto __pyx_L13;
     }
     /*else*/ {
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":73
+      /* "astropy/convolution/boundary_none.pyx":74
  *                 conv[i] = fixed[i]
  *         else:
  *             conv[i] = fixed[i]             # <<<<<<<<<<<<<<
  * 
  *     return conv
  */
-      __pyx_t_27 = __pyx_v_i;
       __pyx_t_28 = __pyx_v_i;
-      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_fixed.diminfo[0].strides));
+      __pyx_t_29 = __pyx_v_i;
+      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides));
     }
     __pyx_L13:;
   }
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":75
+  /* "astropy/convolution/boundary_none.pyx":76
  *             conv[i] = fixed[i]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -1800,7 +1813,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve1d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve1d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -1817,9 +1830,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolv
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_3convolve2d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_3convolve2d_boundary_none = {__Pyx_NAMESTR("convolve2d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_3convolve2d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_3convolve2d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_3convolve2d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_none_3convolve2d_boundary_none = {__Pyx_NAMESTR("convolve2d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_none_3convolve2d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_3convolve2d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   PyObject *__pyx_r = 0;
@@ -1845,11 +1858,11 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_3convol
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -1862,15 +1875,15 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_3convol
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve2d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve2d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convolve2d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_none_2convolve2d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -1879,7 +1892,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_3convol
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_none.pyx":79
+/* "astropy/convolution/boundary_none.pyx":80
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_none(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
@@ -1887,7 +1900,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_3convol
  * 
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convolve2d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_2convolve2d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
   int __pyx_v_nx;
   int __pyx_v_ny;
   int __pyx_v_nkx;
@@ -1900,10 +1913,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
   unsigned int __pyx_v_j;
   unsigned int __pyx_v_ii;
   unsigned int __pyx_v_jj;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -1929,12 +1942,12 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
   unsigned int __pyx_t_13;
   unsigned int __pyx_t_14;
   unsigned int __pyx_t_15;
-  long __pyx_t_16;
-  unsigned int __pyx_t_17;
-  long __pyx_t_18;
-  unsigned int __pyx_t_19;
+  int __pyx_t_16;
+  int __pyx_t_17;
+  int __pyx_t_18;
+  long __pyx_t_19;
   unsigned int __pyx_t_20;
-  unsigned int __pyx_t_21;
+  long __pyx_t_21;
   unsigned int __pyx_t_22;
   unsigned int __pyx_t_23;
   unsigned int __pyx_t_24;
@@ -1961,6 +1974,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
   unsigned int __pyx_t_45;
   unsigned int __pyx_t_46;
   unsigned int __pyx_t_47;
+  unsigned int __pyx_t_48;
+  unsigned int __pyx_t_49;
+  unsigned int __pyx_t_50;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -1983,16 +1999,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1];
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":82
+  /* "astropy/convolution/boundary_none.pyx":83
  *                              np.ndarray[DTYPE_t, ndim=2] g):
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -2008,23 +2024,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
   }
   if (__pyx_t_3) {
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":83
+    /* "astropy/convolution/boundary_none.pyx":84
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":85
+  /* "astropy/convolution/boundary_none.pyx":86
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -2032,24 +2048,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (__pyx_t_3) {
-    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_2 = __pyx_t_1;
   } else {
@@ -2057,11 +2073,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
   }
   if (unlikely(!__pyx_t_2)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":87
+  /* "astropy/convolution/boundary_none.pyx":88
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -2070,7 +2086,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":88
+  /* "astropy/convolution/boundary_none.pyx":89
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
@@ -2079,7 +2095,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
   __pyx_v_ny = (__pyx_v_f->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":89
+  /* "astropy/convolution/boundary_none.pyx":90
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -2088,7 +2104,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":90
+  /* "astropy/convolution/boundary_none.pyx":91
  *     cdef int ny = f.shape[1]
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
@@ -2097,7 +2113,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
   __pyx_v_nky = (__pyx_v_g->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":91
+  /* "astropy/convolution/boundary_none.pyx":92
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -2106,7 +2122,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":92
+  /* "astropy/convolution/boundary_none.pyx":93
  *     cdef int nky = g.shape[1]
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
@@ -2115,23 +2131,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
   __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":96
+  /* "astropy/convolution/boundary_none.pyx":97
  *     # The following need to be set to zeros rather than empty because the
  *     # boundary does not get reset.
  *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.zeros([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.zeros([nx, ny], dtype=DTYPE)
  * 
  */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
@@ -2139,29 +2155,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_4 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_7));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
   __pyx_t_7 = 0;
-  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_7));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1];
     }
   }
@@ -2169,23 +2185,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":97
+  /* "astropy/convolution/boundary_none.pyx":98
  *     # boundary does not get reset.
  *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.zeros([nx, ny], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.zeros([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
  * 
  *     cdef unsigned int i, j, ii, jj
  */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__zeros); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__zeros); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
@@ -2193,29 +2209,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_4 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_9 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1];
     }
   }
@@ -2223,51 +2239,83 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":107
+  /* "astropy/convolution/boundary_none.pyx":108
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
- *         for j in range(wky, ny - wky):
- *             if npy_isnan(f[i, j]):
+ *     for i in range(nx):             # <<<<<<<<<<<<<<
+ *         for j in range(ny):
+ *             if npy_isnan(f[i, j]) and i >= wkx and i < nx - wkx \
  */
-  __pyx_t_10 = (__pyx_v_nx - __pyx_v_wkx);
-  for (__pyx_t_11 = __pyx_v_wkx; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
+  __pyx_t_10 = __pyx_v_nx;
+  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":108
+    /* "astropy/convolution/boundary_none.pyx":109
  *     # neighboring values
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):             # <<<<<<<<<<<<<<
- *             if npy_isnan(f[i, j]):
- *                 top = 0.
+ *     for i in range(nx):
+ *         for j in range(ny):             # <<<<<<<<<<<<<<
+ *             if npy_isnan(f[i, j]) and i >= wkx and i < nx - wkx \
+ *             and j >= wky and j < ny - wky:
  */
-    __pyx_t_12 = (__pyx_v_ny - __pyx_v_wky);
-    for (__pyx_t_13 = __pyx_v_wky; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
+    __pyx_t_12 = __pyx_v_ny;
+    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
       __pyx_v_j = __pyx_t_13;
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":109
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):
- *             if npy_isnan(f[i, j]):             # <<<<<<<<<<<<<<
+      /* "astropy/convolution/boundary_none.pyx":110
+ *     for i in range(nx):
+ *         for j in range(ny):
+ *             if npy_isnan(f[i, j]) and i >= wkx and i < nx - wkx \             # <<<<<<<<<<<<<<
+ *             and j >= wky and j < ny - wky:
  *                 top = 0.
- *                 bot = 0.
  */
       __pyx_t_14 = __pyx_v_i;
       __pyx_t_15 = __pyx_v_j;
-      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
+      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
       if (__pyx_t_2) {
+        __pyx_t_3 = (__pyx_v_i >= __pyx_v_wkx);
+        if (__pyx_t_3) {
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":110
- *         for j in range(wky, ny - wky):
- *             if npy_isnan(f[i, j]):
+          /* "astropy/convolution/boundary_none.pyx":111
+ *         for j in range(ny):
+ *             if npy_isnan(f[i, j]) and i >= wkx and i < nx - wkx \
+ *             and j >= wky and j < ny - wky:             # <<<<<<<<<<<<<<
+ *                 top = 0.
+ *                 bot = 0.
+ */
+          __pyx_t_1 = (__pyx_v_i < (__pyx_v_nx - __pyx_v_wkx));
+          if (__pyx_t_1) {
+            __pyx_t_16 = (__pyx_v_j >= __pyx_v_wky);
+            if (__pyx_t_16) {
+              __pyx_t_17 = (__pyx_v_j < (__pyx_v_ny - __pyx_v_wky));
+              __pyx_t_18 = __pyx_t_17;
+            } else {
+              __pyx_t_18 = __pyx_t_16;
+            }
+            __pyx_t_16 = __pyx_t_18;
+          } else {
+            __pyx_t_16 = __pyx_t_1;
+          }
+          __pyx_t_1 = __pyx_t_16;
+        } else {
+          __pyx_t_1 = __pyx_t_3;
+        }
+        __pyx_t_3 = __pyx_t_1;
+      } else {
+        __pyx_t_3 = __pyx_t_2;
+      }
+      if (__pyx_t_3) {
+
+        /* "astropy/convolution/boundary_none.pyx":112
+ *             if npy_isnan(f[i, j]) and i >= wkx and i < nx - wkx \
+ *             and j >= wky and j < ny - wky:
  *                 top = 0.             # <<<<<<<<<<<<<<
  *                 bot = 0.
  *                 for ii in range(i - wkx, i + wkx + 1):
  */
         __pyx_v_top = 0.;
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":111
- *             if npy_isnan(f[i, j]):
+        /* "astropy/convolution/boundary_none.pyx":113
+ *             and j >= wky and j < ny - wky:
  *                 top = 0.
  *                 bot = 0.             # <<<<<<<<<<<<<<
  *                 for ii in range(i - wkx, i + wkx + 1):
@@ -2275,61 +2323,61 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
         __pyx_v_bot = 0.;
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":112
+        /* "astropy/convolution/boundary_none.pyx":114
  *                 top = 0.
  *                 bot = 0.
  *                 for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
  *                     for jj in range(j - wky, j + wky + 1):
  *                         val = f[ii, jj]
  */
-        __pyx_t_16 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-        for (__pyx_t_17 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
-          __pyx_v_ii = __pyx_t_17;
+        __pyx_t_19 = ((__pyx_v_i + __pyx_v_wkx) + 1);
+        for (__pyx_t_20 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
+          __pyx_v_ii = __pyx_t_20;
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":113
+          /* "astropy/convolution/boundary_none.pyx":115
  *                 bot = 0.
  *                 for ii in range(i - wkx, i + wkx + 1):
  *                     for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
  *                         val = f[ii, jj]
  *                         if not npy_isnan(val):
  */
-          __pyx_t_18 = ((__pyx_v_j + __pyx_v_wky) + 1);
-          for (__pyx_t_19 = (__pyx_v_j - __pyx_v_wky); __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
-            __pyx_v_jj = __pyx_t_19;
+          __pyx_t_21 = ((__pyx_v_j + __pyx_v_wky) + 1);
+          for (__pyx_t_22 = (__pyx_v_j - __pyx_v_wky); __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
+            __pyx_v_jj = __pyx_t_22;
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":114
+            /* "astropy/convolution/boundary_none.pyx":116
  *                 for ii in range(i - wkx, i + wkx + 1):
  *                     for jj in range(j - wky, j + wky + 1):
  *                         val = f[ii, jj]             # <<<<<<<<<<<<<<
  *                         if not npy_isnan(val):
  *                             ker = g[<unsigned int>(wkx + ii - i),
  */
-            __pyx_t_20 = __pyx_v_ii;
-            __pyx_t_21 = __pyx_v_jj;
-            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_f.diminfo[1].strides));
+            __pyx_t_23 = __pyx_v_ii;
+            __pyx_t_24 = __pyx_v_jj;
+            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_f.diminfo[1].strides));
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":115
+            /* "astropy/convolution/boundary_none.pyx":117
  *                     for jj in range(j - wky, j + wky + 1):
  *                         val = f[ii, jj]
  *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
  *                             ker = g[<unsigned int>(wkx + ii - i),
  *                                     <unsigned int>(wky + jj - j)]
  */
-            __pyx_t_2 = (!npy_isnan(__pyx_v_val));
-            if (__pyx_t_2) {
+            __pyx_t_3 = (!npy_isnan(__pyx_v_val));
+            if (__pyx_t_3) {
 
-              /* "astropy/nddata/convolution/boundary_none.pyx":117
+              /* "astropy/convolution/boundary_none.pyx":119
  *                         if not npy_isnan(val):
  *                             ker = g[<unsigned int>(wkx + ii - i),
  *                                     <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
  *                             top += val * ker
  *                             bot += ker
  */
-              __pyx_t_22 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-              __pyx_t_23 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_g.diminfo[1].strides));
+              __pyx_t_25 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
+              __pyx_t_26 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
+              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_g.diminfo[1].strides));
 
-              /* "astropy/nddata/convolution/boundary_none.pyx":118
+              /* "astropy/convolution/boundary_none.pyx":120
  *                             ker = g[<unsigned int>(wkx + ii - i),
  *                                     <unsigned int>(wky + jj - j)]
  *                             top += val * ker             # <<<<<<<<<<<<<<
@@ -2338,7 +2386,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
               __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-              /* "astropy/nddata/convolution/boundary_none.pyx":119
+              /* "astropy/convolution/boundary_none.pyx":121
  *                                     <unsigned int>(wky + jj - j)]
  *                             top += val * ker
  *                             bot += ker             # <<<<<<<<<<<<<<
@@ -2352,17 +2400,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
           }
         }
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":120
+        /* "astropy/convolution/boundary_none.pyx":122
  *                             top += val * ker
  *                             bot += ker
  *                 if bot != 0.:             # <<<<<<<<<<<<<<
  *                     fixed[i, j] = top / bot
  *                 else:
  */
-        __pyx_t_2 = (__pyx_v_bot != 0.);
-        if (__pyx_t_2) {
+        __pyx_t_3 = (__pyx_v_bot != 0.);
+        if (__pyx_t_3) {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":121
+          /* "astropy/convolution/boundary_none.pyx":123
  *                             bot += ker
  *                 if bot != 0.:
  *                     fixed[i, j] = top / bot             # <<<<<<<<<<<<<<
@@ -2371,51 +2419,51 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
           if (unlikely(__pyx_v_bot == 0)) {
             PyErr_Format(PyExc_ZeroDivisionError, "float division");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
-          __pyx_t_17 = __pyx_v_i;
-          __pyx_t_19 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
+          __pyx_t_20 = __pyx_v_i;
+          __pyx_t_22 = __pyx_v_j;
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
           goto __pyx_L14;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":123
+          /* "astropy/convolution/boundary_none.pyx":125
  *                     fixed[i, j] = top / bot
  *                 else:
  *                     fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
  *             else:
  *                 fixed[i, j] = f[i, j]
  */
-          __pyx_t_24 = __pyx_v_i;
-          __pyx_t_25 = __pyx_v_j;
-          __pyx_t_26 = __pyx_v_i;
-          __pyx_t_27 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_f.diminfo[1].strides));
+          __pyx_t_27 = __pyx_v_i;
+          __pyx_t_28 = __pyx_v_j;
+          __pyx_t_29 = __pyx_v_i;
+          __pyx_t_30 = __pyx_v_j;
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_f.diminfo[1].strides));
         }
         __pyx_L14:;
         goto __pyx_L8;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":125
+        /* "astropy/convolution/boundary_none.pyx":127
  *                     fixed[i, j] = f[i, j]
  *             else:
  *                 fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
  * 
  *     # Now run the proper convolution
  */
-        __pyx_t_28 = __pyx_v_i;
-        __pyx_t_29 = __pyx_v_j;
-        __pyx_t_30 = __pyx_v_i;
-        __pyx_t_31 = __pyx_v_j;
-        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[1].strides));
+        __pyx_t_31 = __pyx_v_i;
+        __pyx_t_32 = __pyx_v_j;
+        __pyx_t_33 = __pyx_v_i;
+        __pyx_t_34 = __pyx_v_j;
+        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_f.diminfo[1].strides));
       }
       __pyx_L8:;
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":128
+  /* "astropy/convolution/boundary_none.pyx":130
  * 
  *     # Now run the proper convolution
  *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
@@ -2426,7 +2474,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
   for (__pyx_t_11 = __pyx_v_wkx; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":129
+    /* "astropy/convolution/boundary_none.pyx":131
  *     # Now run the proper convolution
  *     for i in range(wkx, nx - wkx):
  *         for j in range(wky, ny - wky):             # <<<<<<<<<<<<<<
@@ -2437,19 +2485,19 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
     for (__pyx_t_13 = __pyx_v_wky; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
       __pyx_v_j = __pyx_t_13;
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":130
+      /* "astropy/convolution/boundary_none.pyx":132
  *     for i in range(wkx, nx - wkx):
  *         for j in range(wky, ny - wky):
  *             if not npy_isnan(fixed[i, j]):             # <<<<<<<<<<<<<<
  *                 top = 0.
  *                 bot = 0.
  */
-      __pyx_t_32 = __pyx_v_i;
-      __pyx_t_33 = __pyx_v_j;
-      __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[1].strides))));
-      if (__pyx_t_2) {
+      __pyx_t_35 = __pyx_v_i;
+      __pyx_t_36 = __pyx_v_j;
+      __pyx_t_3 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[1].strides))));
+      if (__pyx_t_3) {
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":131
+        /* "astropy/convolution/boundary_none.pyx":133
  *         for j in range(wky, ny - wky):
  *             if not npy_isnan(fixed[i, j]):
  *                 top = 0.             # <<<<<<<<<<<<<<
@@ -2458,7 +2506,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
         __pyx_v_top = 0.;
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":132
+        /* "astropy/convolution/boundary_none.pyx":134
  *             if not npy_isnan(fixed[i, j]):
  *                 top = 0.
  *                 bot = 0.             # <<<<<<<<<<<<<<
@@ -2467,61 +2515,61 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
         __pyx_v_bot = 0.;
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":133
+        /* "astropy/convolution/boundary_none.pyx":135
  *                 top = 0.
  *                 bot = 0.
  *                 for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
  *                     for jj in range(j - wky, j + wky + 1):
  *                         val = fixed[ii, jj]
  */
-        __pyx_t_16 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-        for (__pyx_t_34 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_34 < __pyx_t_16; __pyx_t_34+=1) {
-          __pyx_v_ii = __pyx_t_34;
+        __pyx_t_19 = ((__pyx_v_i + __pyx_v_wkx) + 1);
+        for (__pyx_t_37 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_37 < __pyx_t_19; __pyx_t_37+=1) {
+          __pyx_v_ii = __pyx_t_37;
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":134
+          /* "astropy/convolution/boundary_none.pyx":136
  *                 bot = 0.
  *                 for ii in range(i - wkx, i + wkx + 1):
  *                     for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
  *                         val = fixed[ii, jj]
  *                         ker = g[<unsigned int>(wkx + ii - i),
  */
-          __pyx_t_18 = ((__pyx_v_j + __pyx_v_wky) + 1);
-          for (__pyx_t_35 = (__pyx_v_j - __pyx_v_wky); __pyx_t_35 < __pyx_t_18; __pyx_t_35+=1) {
-            __pyx_v_jj = __pyx_t_35;
+          __pyx_t_21 = ((__pyx_v_j + __pyx_v_wky) + 1);
+          for (__pyx_t_38 = (__pyx_v_j - __pyx_v_wky); __pyx_t_38 < __pyx_t_21; __pyx_t_38+=1) {
+            __pyx_v_jj = __pyx_t_38;
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":135
+            /* "astropy/convolution/boundary_none.pyx":137
  *                 for ii in range(i - wkx, i + wkx + 1):
  *                     for jj in range(j - wky, j + wky + 1):
  *                         val = fixed[ii, jj]             # <<<<<<<<<<<<<<
  *                         ker = g[<unsigned int>(wkx + ii - i),
  *                                 <unsigned int>(wky + jj - j)]
  */
-            __pyx_t_36 = __pyx_v_ii;
-            __pyx_t_37 = __pyx_v_jj;
-            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides));
+            __pyx_t_39 = __pyx_v_ii;
+            __pyx_t_40 = __pyx_v_jj;
+            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[1].strides));
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":137
+            /* "astropy/convolution/boundary_none.pyx":139
  *                         val = fixed[ii, jj]
  *                         ker = g[<unsigned int>(wkx + ii - i),
  *                                 <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
  *                         if not npy_isnan(val):
  *                             top += val * ker
  */
-            __pyx_t_38 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-            __pyx_t_39 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_g.diminfo[1].strides));
+            __pyx_t_41 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
+            __pyx_t_42 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
+            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_41, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_42, __pyx_pybuffernd_g.diminfo[1].strides));
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":138
+            /* "astropy/convolution/boundary_none.pyx":140
  *                         ker = g[<unsigned int>(wkx + ii - i),
  *                                 <unsigned int>(wky + jj - j)]
  *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
  *                             top += val * ker
  *                             bot += ker
  */
-            __pyx_t_2 = (!npy_isnan(__pyx_v_val));
-            if (__pyx_t_2) {
+            __pyx_t_3 = (!npy_isnan(__pyx_v_val));
+            if (__pyx_t_3) {
 
-              /* "astropy/nddata/convolution/boundary_none.pyx":139
+              /* "astropy/convolution/boundary_none.pyx":141
  *                                 <unsigned int>(wky + jj - j)]
  *                         if not npy_isnan(val):
  *                             top += val * ker             # <<<<<<<<<<<<<<
@@ -2530,7 +2578,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
               __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-              /* "astropy/nddata/convolution/boundary_none.pyx":140
+              /* "astropy/convolution/boundary_none.pyx":142
  *                         if not npy_isnan(val):
  *                             top += val * ker
  *                             bot += ker             # <<<<<<<<<<<<<<
@@ -2544,17 +2592,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
           }
         }
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":141
+        /* "astropy/convolution/boundary_none.pyx":143
  *                             top += val * ker
  *                             bot += ker
  *                 if bot != 0:             # <<<<<<<<<<<<<<
  *                     conv[i, j] = top / bot
  *                 else:
  */
-        __pyx_t_2 = (__pyx_v_bot != 0.0);
-        if (__pyx_t_2) {
+        __pyx_t_3 = (__pyx_v_bot != 0.0);
+        if (__pyx_t_3) {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":142
+          /* "astropy/convolution/boundary_none.pyx":144
  *                             bot += ker
  *                 if bot != 0:
  *                     conv[i, j] = top / bot             # <<<<<<<<<<<<<<
@@ -2563,51 +2611,51 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
  */
           if (unlikely(__pyx_v_bot == 0)) {
             PyErr_Format(PyExc_ZeroDivisionError, "float division");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
-          __pyx_t_34 = __pyx_v_i;
-          __pyx_t_35 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
+          __pyx_t_37 = __pyx_v_i;
+          __pyx_t_38 = __pyx_v_j;
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_37, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_38, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
           goto __pyx_L25;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":144
+          /* "astropy/convolution/boundary_none.pyx":146
  *                     conv[i, j] = top / bot
  *                 else:
  *                     conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
  *             else:
  *                 conv[i, j] = fixed[i, j]
  */
-          __pyx_t_40 = __pyx_v_i;
-          __pyx_t_41 = __pyx_v_j;
-          __pyx_t_42 = __pyx_v_i;
-          __pyx_t_43 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_fixed.diminfo[1] [...]
+          __pyx_t_43 = __pyx_v_i;
+          __pyx_t_44 = __pyx_v_j;
+          __pyx_t_45 = __pyx_v_i;
+          __pyx_t_46 = __pyx_v_j;
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[1].strides));
         }
         __pyx_L25:;
         goto __pyx_L19;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":146
+        /* "astropy/convolution/boundary_none.pyx":148
  *                     conv[i, j] = fixed[i, j]
  *             else:
  *                 conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
  * 
  *     return conv
  */
-        __pyx_t_44 = __pyx_v_i;
-        __pyx_t_45 = __pyx_v_j;
-        __pyx_t_46 = __pyx_v_i;
-        __pyx_t_47 = __pyx_v_j;
-        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[1].s [...]
+        __pyx_t_47 = __pyx_v_i;
+        __pyx_t_48 = __pyx_v_j;
+        __pyx_t_49 = __pyx_v_i;
+        __pyx_t_50 = __pyx_v_j;
+        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_49, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_50, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[1].strides));
       }
       __pyx_L19:;
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":148
+  /* "astropy/convolution/boundary_none.pyx":150
  *                 conv[i, j] = fixed[i, j]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -2633,7 +2681,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve2d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve2d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -2650,9 +2698,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convol
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_5convolve3d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_5convolve3d_boundary_none = {__Pyx_NAMESTR("convolve3d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_5convolve3d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_5convolve3d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_5convolve3d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_none_5convolve3d_boundary_none = {__Pyx_NAMESTR("convolve3d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_none_5convolve3d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_none_5convolve3d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   PyObject *__pyx_r = 0;
@@ -2678,11 +2726,11 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_5convol
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -2695,15 +2743,15 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_5convol
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve3d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve3d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convolve3d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_none_4convolve3d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -2712,7 +2760,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_5convol
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_none.pyx":152
+/* "astropy/convolution/boundary_none.pyx":154
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_none(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
@@ -2720,7 +2768,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_5convol
  * 
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convolve3d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_none_4convolve3d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
   int __pyx_v_nx;
   int __pyx_v_ny;
   int __pyx_v_nz;
@@ -2738,10 +2786,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
   unsigned int __pyx_v_ii;
   unsigned int __pyx_v_jj;
   unsigned int __pyx_v_kk;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -2772,15 +2820,15 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
   unsigned int __pyx_t_18;
   unsigned int __pyx_t_19;
   unsigned int __pyx_t_20;
-  long __pyx_t_21;
-  unsigned int __pyx_t_22;
-  long __pyx_t_23;
-  unsigned int __pyx_t_24;
+  int __pyx_t_21;
+  int __pyx_t_22;
+  int __pyx_t_23;
+  int __pyx_t_24;
   long __pyx_t_25;
   unsigned int __pyx_t_26;
-  unsigned int __pyx_t_27;
+  long __pyx_t_27;
   unsigned int __pyx_t_28;
-  unsigned int __pyx_t_29;
+  long __pyx_t_29;
   unsigned int __pyx_t_30;
   unsigned int __pyx_t_31;
   unsigned int __pyx_t_32;
@@ -2820,6 +2868,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
   unsigned int __pyx_t_66;
   unsigned int __pyx_t_67;
   unsigned int __pyx_t_68;
+  unsigned int __pyx_t_69;
+  unsigned int __pyx_t_70;
+  unsigned int __pyx_t_71;
+  unsigned int __pyx_t_72;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -2842,16 +2894,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_f.diminfo[2].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_f.diminfo[2].shape = __pyx_pybu [...]
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_g.diminfo[2].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_g.diminfo[2].shape = __pyx_pybu [...]
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":155
+  /* "astropy/convolution/boundary_none.pyx":157
  *                              np.ndarray[DTYPE_t, ndim=3] g):
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -2873,23 +2925,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
   }
   if (__pyx_t_2) {
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":156
+    /* "astropy/convolution/boundary_none.pyx":158
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":158
+  /* "astropy/convolution/boundary_none.pyx":160
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -2897,24 +2949,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   if (__pyx_t_2) {
-    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_4 = __pyx_t_1;
   } else {
@@ -2922,11 +2974,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
   }
   if (unlikely(!__pyx_t_4)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":160
+  /* "astropy/convolution/boundary_none.pyx":162
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -2935,7 +2987,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":161
+  /* "astropy/convolution/boundary_none.pyx":163
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
@@ -2944,7 +2996,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
   __pyx_v_ny = (__pyx_v_f->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":162
+  /* "astropy/convolution/boundary_none.pyx":164
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]
  *     cdef int nz = f.shape[2]             # <<<<<<<<<<<<<<
@@ -2953,7 +3005,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
   __pyx_v_nz = (__pyx_v_f->dimensions[2]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":163
+  /* "astropy/convolution/boundary_none.pyx":165
  *     cdef int ny = f.shape[1]
  *     cdef int nz = f.shape[2]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -2962,7 +3014,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":164
+  /* "astropy/convolution/boundary_none.pyx":166
  *     cdef int nz = f.shape[2]
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
@@ -2971,7 +3023,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
   __pyx_v_nky = (__pyx_v_g->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":165
+  /* "astropy/convolution/boundary_none.pyx":167
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]
  *     cdef int nkz = g.shape[2]             # <<<<<<<<<<<<<<
@@ -2980,7 +3032,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
   __pyx_v_nkz = (__pyx_v_g->dimensions[2]);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":166
+  /* "astropy/convolution/boundary_none.pyx":168
  *     cdef int nky = g.shape[1]
  *     cdef int nkz = g.shape[2]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -2989,7 +3041,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":167
+  /* "astropy/convolution/boundary_none.pyx":169
  *     cdef int nkz = g.shape[2]
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
@@ -2998,7 +3050,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
   __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":168
+  /* "astropy/convolution/boundary_none.pyx":170
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2
  *     cdef int wkz = nkz // 2             # <<<<<<<<<<<<<<
@@ -3007,25 +3059,25 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
   __pyx_v_wkz = __Pyx_div_long(__pyx_v_nkz, 2);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":172
+  /* "astropy/convolution/boundary_none.pyx":174
  *     # The following need to be set to zeros rather than empty because the
  *     # boundary does not get reset.
  *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.zeros([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.zeros([nx, ny, nz], dtype=DTYPE)
  * 
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__zeros); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__zeros); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
@@ -3036,29 +3088,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
   __pyx_t_5 = 0;
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_9));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
   __pyx_t_9 = 0;
-  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_9));
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_10 = ((PyArrayObject *)__pyx_t_7);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_fixed.diminfo[2].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[2] [...]
     }
   }
@@ -3066,25 +3118,25 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":173
+  /* "astropy/convolution/boundary_none.pyx":175
  *     # boundary does not get reset.
  *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.zeros([nx, ny, nz], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.zeros([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
  * 
  *     cdef unsigned int i, j, k, ii, jj, kk
  */
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__zeros); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__zeros); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_7);
@@ -3095,29 +3147,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_11 = ((PyArrayObject *)__pyx_t_8);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_conv.diminfo[2].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[2]; __pyx_py [...]
     }
   }
@@ -3125,63 +3177,107 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_8);
   __pyx_t_8 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":183
+  /* "astropy/convolution/boundary_none.pyx":185
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
- *         for j in range(wky, ny - wky):
- *             for k in range(wkz, nz - wkz):
+ *     for i in range(nx):             # <<<<<<<<<<<<<<
+ *         for j in range(ny):
+ *             for k in range(nz):
  */
-  __pyx_t_12 = (__pyx_v_nx - __pyx_v_wkx);
-  for (__pyx_t_13 = __pyx_v_wkx; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
+  __pyx_t_12 = __pyx_v_nx;
+  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
     __pyx_v_i = __pyx_t_13;
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":184
+    /* "astropy/convolution/boundary_none.pyx":186
  *     # neighboring values
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):             # <<<<<<<<<<<<<<
- *             for k in range(wkz, nz - wkz):
- *                 if npy_isnan(f[i, j, k]):
+ *     for i in range(nx):
+ *         for j in range(ny):             # <<<<<<<<<<<<<<
+ *             for k in range(nz):
+ *                 if npy_isnan(f[i, j, k]) and i >= wkx and i < nx - wkx \
  */
-    __pyx_t_14 = (__pyx_v_ny - __pyx_v_wky);
-    for (__pyx_t_15 = __pyx_v_wky; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
+    __pyx_t_14 = __pyx_v_ny;
+    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
       __pyx_v_j = __pyx_t_15;
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":185
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):
- *             for k in range(wkz, nz - wkz):             # <<<<<<<<<<<<<<
- *                 if npy_isnan(f[i, j, k]):
- *                     top = 0.
+      /* "astropy/convolution/boundary_none.pyx":187
+ *     for i in range(nx):
+ *         for j in range(ny):
+ *             for k in range(nz):             # <<<<<<<<<<<<<<
+ *                 if npy_isnan(f[i, j, k]) and i >= wkx and i < nx - wkx \
+ *                 and j >= wky and j < ny - wky and k >= wkz and k <= nz - wkz:
  */
-      __pyx_t_16 = (__pyx_v_nz - __pyx_v_wkz);
-      for (__pyx_t_17 = __pyx_v_wkz; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
+      __pyx_t_16 = __pyx_v_nz;
+      for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
         __pyx_v_k = __pyx_t_17;
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":186
- *         for j in range(wky, ny - wky):
- *             for k in range(wkz, nz - wkz):
- *                 if npy_isnan(f[i, j, k]):             # <<<<<<<<<<<<<<
+        /* "astropy/convolution/boundary_none.pyx":188
+ *         for j in range(ny):
+ *             for k in range(nz):
+ *                 if npy_isnan(f[i, j, k]) and i >= wkx and i < nx - wkx \             # <<<<<<<<<<<<<<
+ *                 and j >= wky and j < ny - wky and k >= wkz and k <= nz - wkz:
  *                     top = 0.
- *                     bot = 0.
  */
         __pyx_t_18 = __pyx_v_i;
         __pyx_t_19 = __pyx_v_j;
         __pyx_t_20 = __pyx_v_k;
-        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
+        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
         if (__pyx_t_4) {
+          __pyx_t_2 = (__pyx_v_i >= __pyx_v_wkx);
+          if (__pyx_t_2) {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":187
- *             for k in range(wkz, nz - wkz):
- *                 if npy_isnan(f[i, j, k]):
+            /* "astropy/convolution/boundary_none.pyx":189
+ *             for k in range(nz):
+ *                 if npy_isnan(f[i, j, k]) and i >= wkx and i < nx - wkx \
+ *                 and j >= wky and j < ny - wky and k >= wkz and k <= nz - wkz:             # <<<<<<<<<<<<<<
+ *                     top = 0.
+ *                     bot = 0.
+ */
+            __pyx_t_1 = (__pyx_v_i < (__pyx_v_nx - __pyx_v_wkx));
+            if (__pyx_t_1) {
+              __pyx_t_3 = (__pyx_v_j >= __pyx_v_wky);
+              if (__pyx_t_3) {
+                __pyx_t_21 = (__pyx_v_j < (__pyx_v_ny - __pyx_v_wky));
+                if (__pyx_t_21) {
+                  __pyx_t_22 = (__pyx_v_k >= __pyx_v_wkz);
+                  if (__pyx_t_22) {
+                    __pyx_t_23 = (__pyx_v_k <= (__pyx_v_nz - __pyx_v_wkz));
+                    __pyx_t_24 = __pyx_t_23;
+                  } else {
+                    __pyx_t_24 = __pyx_t_22;
+                  }
+                  __pyx_t_22 = __pyx_t_24;
+                } else {
+                  __pyx_t_22 = __pyx_t_21;
+                }
+                __pyx_t_21 = __pyx_t_22;
+              } else {
+                __pyx_t_21 = __pyx_t_3;
+              }
+              __pyx_t_3 = __pyx_t_21;
+            } else {
+              __pyx_t_3 = __pyx_t_1;
+            }
+            __pyx_t_1 = __pyx_t_3;
+          } else {
+            __pyx_t_1 = __pyx_t_2;
+          }
+          __pyx_t_2 = __pyx_t_1;
+        } else {
+          __pyx_t_2 = __pyx_t_4;
+        }
+        if (__pyx_t_2) {
+
+          /* "astropy/convolution/boundary_none.pyx":190
+ *                 if npy_isnan(f[i, j, k]) and i >= wkx and i < nx - wkx \
+ *                 and j >= wky and j < ny - wky and k >= wkz and k <= nz - wkz:
  *                     top = 0.             # <<<<<<<<<<<<<<
  *                     bot = 0.
  *                     for ii in range(i - wkx, i + wkx + 1):
  */
           __pyx_v_top = 0.;
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":188
- *                 if npy_isnan(f[i, j, k]):
+          /* "astropy/convolution/boundary_none.pyx":191
+ *                 and j >= wky and j < ny - wky and k >= wkz and k <= nz - wkz:
  *                     top = 0.
  *                     bot = 0.             # <<<<<<<<<<<<<<
  *                     for ii in range(i - wkx, i + wkx + 1):
@@ -3189,74 +3285,74 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
           __pyx_v_bot = 0.;
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":189
+          /* "astropy/convolution/boundary_none.pyx":192
  *                     top = 0.
  *                     bot = 0.
  *                     for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
  *                         for jj in range(j - wky, j + wky + 1):
  *                             for kk in range(k - wkz, k + wkz + 1):
  */
-          __pyx_t_21 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-          for (__pyx_t_22 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
-            __pyx_v_ii = __pyx_t_22;
+          __pyx_t_25 = ((__pyx_v_i + __pyx_v_wkx) + 1);
+          for (__pyx_t_26 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
+            __pyx_v_ii = __pyx_t_26;
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":190
+            /* "astropy/convolution/boundary_none.pyx":193
  *                     bot = 0.
  *                     for ii in range(i - wkx, i + wkx + 1):
  *                         for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
  *                             for kk in range(k - wkz, k + wkz + 1):
  *                                 val = f[ii, jj, kk]
  */
-            __pyx_t_23 = ((__pyx_v_j + __pyx_v_wky) + 1);
-            for (__pyx_t_24 = (__pyx_v_j - __pyx_v_wky); __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
-              __pyx_v_jj = __pyx_t_24;
+            __pyx_t_27 = ((__pyx_v_j + __pyx_v_wky) + 1);
+            for (__pyx_t_28 = (__pyx_v_j - __pyx_v_wky); __pyx_t_28 < __pyx_t_27; __pyx_t_28+=1) {
+              __pyx_v_jj = __pyx_t_28;
 
-              /* "astropy/nddata/convolution/boundary_none.pyx":191
+              /* "astropy/convolution/boundary_none.pyx":194
  *                     for ii in range(i - wkx, i + wkx + 1):
  *                         for jj in range(j - wky, j + wky + 1):
  *                             for kk in range(k - wkz, k + wkz + 1):             # <<<<<<<<<<<<<<
  *                                 val = f[ii, jj, kk]
  *                                 if not npy_isnan(val):
  */
-              __pyx_t_25 = ((__pyx_v_k + __pyx_v_wkz) + 1);
-              for (__pyx_t_26 = (__pyx_v_k - __pyx_v_wkz); __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
-                __pyx_v_kk = __pyx_t_26;
+              __pyx_t_29 = ((__pyx_v_k + __pyx_v_wkz) + 1);
+              for (__pyx_t_30 = (__pyx_v_k - __pyx_v_wkz); __pyx_t_30 < __pyx_t_29; __pyx_t_30+=1) {
+                __pyx_v_kk = __pyx_t_30;
 
-                /* "astropy/nddata/convolution/boundary_none.pyx":192
+                /* "astropy/convolution/boundary_none.pyx":195
  *                         for jj in range(j - wky, j + wky + 1):
  *                             for kk in range(k - wkz, k + wkz + 1):
  *                                 val = f[ii, jj, kk]             # <<<<<<<<<<<<<<
  *                                 if not npy_isnan(val):
  *                                     ker = g[<unsigned int>(wkx + ii - i),
  */
-                __pyx_t_27 = __pyx_v_ii;
-                __pyx_t_28 = __pyx_v_jj;
-                __pyx_t_29 = __pyx_v_kk;
-                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[2].strides));
+                __pyx_t_31 = __pyx_v_ii;
+                __pyx_t_32 = __pyx_v_jj;
+                __pyx_t_33 = __pyx_v_kk;
+                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_33, __pyx_pybuffernd_f.diminfo[2].strides));
 
-                /* "astropy/nddata/convolution/boundary_none.pyx":193
+                /* "astropy/convolution/boundary_none.pyx":196
  *                             for kk in range(k - wkz, k + wkz + 1):
  *                                 val = f[ii, jj, kk]
  *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
  *                                     ker = g[<unsigned int>(wkx + ii - i),
  *                                             <unsigned int>(wky + jj - j),
  */
-                __pyx_t_4 = (!npy_isnan(__pyx_v_val));
-                if (__pyx_t_4) {
+                __pyx_t_2 = (!npy_isnan(__pyx_v_val));
+                if (__pyx_t_2) {
 
-                  /* "astropy/nddata/convolution/boundary_none.pyx":196
+                  /* "astropy/convolution/boundary_none.pyx":199
  *                                     ker = g[<unsigned int>(wkx + ii - i),
  *                                             <unsigned int>(wky + jj - j),
  *                                             <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
  *                                     top += val * ker
  *                                     bot += ker
  */
-                  __pyx_t_30 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-                  __pyx_t_31 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-                  __pyx_t_32 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
-                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_32, __pyx_pybuffernd_g.diminfo[2].strides));
+                  __pyx_t_34 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
+                  __pyx_t_35 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
+                  __pyx_t_36 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
+                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_36, __pyx_pybuffernd_g.diminfo[2].strides));
 
-                  /* "astropy/nddata/convolution/boundary_none.pyx":197
+                  /* "astropy/convolution/boundary_none.pyx":200
  *                                             <unsigned int>(wky + jj - j),
  *                                             <unsigned int>(wkz + kk - k)]
  *                                     top += val * ker             # <<<<<<<<<<<<<<
@@ -3265,7 +3361,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
                   __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-                  /* "astropy/nddata/convolution/boundary_none.pyx":198
+                  /* "astropy/convolution/boundary_none.pyx":201
  *                                             <unsigned int>(wkz + kk - k)]
  *                                     top += val * ker
  *                                     bot += ker             # <<<<<<<<<<<<<<
@@ -3280,17 +3376,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
             }
           }
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":199
+          /* "astropy/convolution/boundary_none.pyx":202
  *                                     top += val * ker
  *                                     bot += ker
  *                     if bot != 0.:             # <<<<<<<<<<<<<<
  *                         fixed[i, j, k] = top / bot
  *                     else:
  */
-          __pyx_t_4 = (__pyx_v_bot != 0.);
-          if (__pyx_t_4) {
+          __pyx_t_2 = (__pyx_v_bot != 0.);
+          if (__pyx_t_2) {
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":200
+            /* "astropy/convolution/boundary_none.pyx":203
  *                                     bot += ker
  *                     if bot != 0.:
  *                         fixed[i, j, k] = top / bot             # <<<<<<<<<<<<<<
@@ -3299,57 +3395,57 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
             if (unlikely(__pyx_v_bot == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "float division");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
-            __pyx_t_22 = __pyx_v_i;
-            __pyx_t_24 = __pyx_v_j;
-            __pyx_t_26 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
+            __pyx_t_26 = __pyx_v_i;
+            __pyx_t_28 = __pyx_v_j;
+            __pyx_t_30 = __pyx_v_k;
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_30, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
             goto __pyx_L18;
           }
           /*else*/ {
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":202
+            /* "astropy/convolution/boundary_none.pyx":205
  *                         fixed[i, j, k] = top / bot
  *                     else:
  *                         fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
  *                 else:
  *                     fixed[i, j, k] = f[i, j, k]
  */
-            __pyx_t_33 = __pyx_v_i;
-            __pyx_t_34 = __pyx_v_j;
-            __pyx_t_35 = __pyx_v_k;
-            __pyx_t_36 = __pyx_v_i;
-            __pyx_t_37 = __pyx_v_j;
-            __pyx_t_38 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_38, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_f.diminfo[0].st [...]
+            __pyx_t_37 = __pyx_v_i;
+            __pyx_t_38 = __pyx_v_j;
+            __pyx_t_39 = __pyx_v_k;
+            __pyx_t_40 = __pyx_v_i;
+            __pyx_t_41 = __pyx_v_j;
+            __pyx_t_42 = __pyx_v_k;
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_37, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_3 [...]
           }
           __pyx_L18:;
           goto __pyx_L10;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":204
+          /* "astropy/convolution/boundary_none.pyx":207
  *                         fixed[i, j, k] = f[i, j, k]
  *                 else:
  *                     fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
  * 
  *     # Now run the proper convolution
  */
-          __pyx_t_39 = __pyx_v_i;
-          __pyx_t_40 = __pyx_v_j;
-          __pyx_t_41 = __pyx_v_k;
-          __pyx_t_42 = __pyx_v_i;
-          __pyx_t_43 = __pyx_v_j;
-          __pyx_t_44 = __pyx_v_k;
-          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_f.diminfo[0].stri [...]
+          __pyx_t_43 = __pyx_v_i;
+          __pyx_t_44 = __pyx_v_j;
+          __pyx_t_45 = __pyx_v_k;
+          __pyx_t_46 = __pyx_v_i;
+          __pyx_t_47 = __pyx_v_j;
+          __pyx_t_48 = __pyx_v_k;
+          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_43, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_44, [...]
         }
         __pyx_L10:;
       }
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":207
+  /* "astropy/convolution/boundary_none.pyx":210
  * 
  *     # Now run the proper convolution
  *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
@@ -3360,7 +3456,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
   for (__pyx_t_13 = __pyx_v_wkx; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
     __pyx_v_i = __pyx_t_13;
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":208
+    /* "astropy/convolution/boundary_none.pyx":211
  *     # Now run the proper convolution
  *     for i in range(wkx, nx - wkx):
  *         for j in range(wky, ny - wky):             # <<<<<<<<<<<<<<
@@ -3371,7 +3467,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
     for (__pyx_t_15 = __pyx_v_wky; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
       __pyx_v_j = __pyx_t_15;
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":209
+      /* "astropy/convolution/boundary_none.pyx":212
  *     for i in range(wkx, nx - wkx):
  *         for j in range(wky, ny - wky):
  *             for k in range(wkz, nz - wkz):             # <<<<<<<<<<<<<<
@@ -3382,20 +3478,20 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
       for (__pyx_t_17 = __pyx_v_wkz; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
         __pyx_v_k = __pyx_t_17;
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":210
+        /* "astropy/convolution/boundary_none.pyx":213
  *         for j in range(wky, ny - wky):
  *             for k in range(wkz, nz - wkz):
  *                 if not npy_isnan(fixed[i, j, k]):             # <<<<<<<<<<<<<<
  *                     top = 0.
  *                     bot = 0.
  */
-        __pyx_t_45 = __pyx_v_i;
-        __pyx_t_46 = __pyx_v_j;
-        __pyx_t_47 = __pyx_v_k;
-        __pyx_t_4 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[2].strides))));
-        if (__pyx_t_4) {
+        __pyx_t_49 = __pyx_v_i;
+        __pyx_t_50 = __pyx_v_j;
+        __pyx_t_51 = __pyx_v_k;
+        __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_50, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[2].strides))));
+        if (__pyx_t_2) {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":211
+          /* "astropy/convolution/boundary_none.pyx":214
  *             for k in range(wkz, nz - wkz):
  *                 if not npy_isnan(fixed[i, j, k]):
  *                     top = 0.             # <<<<<<<<<<<<<<
@@ -3404,7 +3500,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
           __pyx_v_top = 0.;
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":212
+          /* "astropy/convolution/boundary_none.pyx":215
  *                 if not npy_isnan(fixed[i, j, k]):
  *                     top = 0.
  *                     bot = 0.             # <<<<<<<<<<<<<<
@@ -3413,74 +3509,74 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
           __pyx_v_bot = 0.;
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":213
+          /* "astropy/convolution/boundary_none.pyx":216
  *                     top = 0.
  *                     bot = 0.
  *                     for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
  *                         for jj in range(j - wky, j + wky + 1):
  *                             for kk in range(k - wkz, k + wkz + 1):
  */
-          __pyx_t_21 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-          for (__pyx_t_48 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_48 < __pyx_t_21; __pyx_t_48+=1) {
-            __pyx_v_ii = __pyx_t_48;
+          __pyx_t_25 = ((__pyx_v_i + __pyx_v_wkx) + 1);
+          for (__pyx_t_52 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_52 < __pyx_t_25; __pyx_t_52+=1) {
+            __pyx_v_ii = __pyx_t_52;
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":214
+            /* "astropy/convolution/boundary_none.pyx":217
  *                     bot = 0.
  *                     for ii in range(i - wkx, i + wkx + 1):
  *                         for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
  *                             for kk in range(k - wkz, k + wkz + 1):
  *                                 val = fixed[ii, jj, kk]
  */
-            __pyx_t_23 = ((__pyx_v_j + __pyx_v_wky) + 1);
-            for (__pyx_t_49 = (__pyx_v_j - __pyx_v_wky); __pyx_t_49 < __pyx_t_23; __pyx_t_49+=1) {
-              __pyx_v_jj = __pyx_t_49;
+            __pyx_t_27 = ((__pyx_v_j + __pyx_v_wky) + 1);
+            for (__pyx_t_53 = (__pyx_v_j - __pyx_v_wky); __pyx_t_53 < __pyx_t_27; __pyx_t_53+=1) {
+              __pyx_v_jj = __pyx_t_53;
 
-              /* "astropy/nddata/convolution/boundary_none.pyx":215
+              /* "astropy/convolution/boundary_none.pyx":218
  *                     for ii in range(i - wkx, i + wkx + 1):
  *                         for jj in range(j - wky, j + wky + 1):
  *                             for kk in range(k - wkz, k + wkz + 1):             # <<<<<<<<<<<<<<
  *                                 val = fixed[ii, jj, kk]
  *                                 ker = g[<unsigned int>(wkx + ii - i),
  */
-              __pyx_t_25 = ((__pyx_v_k + __pyx_v_wkz) + 1);
-              for (__pyx_t_50 = (__pyx_v_k - __pyx_v_wkz); __pyx_t_50 < __pyx_t_25; __pyx_t_50+=1) {
-                __pyx_v_kk = __pyx_t_50;
+              __pyx_t_29 = ((__pyx_v_k + __pyx_v_wkz) + 1);
+              for (__pyx_t_54 = (__pyx_v_k - __pyx_v_wkz); __pyx_t_54 < __pyx_t_29; __pyx_t_54+=1) {
+                __pyx_v_kk = __pyx_t_54;
 
-                /* "astropy/nddata/convolution/boundary_none.pyx":216
+                /* "astropy/convolution/boundary_none.pyx":219
  *                         for jj in range(j - wky, j + wky + 1):
  *                             for kk in range(k - wkz, k + wkz + 1):
  *                                 val = fixed[ii, jj, kk]             # <<<<<<<<<<<<<<
  *                                 ker = g[<unsigned int>(wkx + ii - i),
  *                                         <unsigned int>(wky + jj - j),
  */
-                __pyx_t_51 = __pyx_v_ii;
-                __pyx_t_52 = __pyx_v_jj;
-                __pyx_t_53 = __pyx_v_kk;
-                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_52, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_53, __pyx_pybuffernd_fixed.diminfo[2].strides));
+                __pyx_t_55 = __pyx_v_ii;
+                __pyx_t_56 = __pyx_v_jj;
+                __pyx_t_57 = __pyx_v_kk;
+                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_55, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_56, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_57, __pyx_pybuffernd_fixed.diminfo[2].strides));
 
-                /* "astropy/nddata/convolution/boundary_none.pyx":219
+                /* "astropy/convolution/boundary_none.pyx":222
  *                                 ker = g[<unsigned int>(wkx + ii - i),
  *                                         <unsigned int>(wky + jj - j),
  *                                         <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
  *                                 if not npy_isnan(val):
  *                                     top += val * ker
  */
-                __pyx_t_54 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-                __pyx_t_55 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-                __pyx_t_56 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
-                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_g.diminfo[2].strides));
+                __pyx_t_58 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
+                __pyx_t_59 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
+                __pyx_t_60 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
+                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_58, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_59, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_60, __pyx_pybuffernd_g.diminfo[2].strides));
 
-                /* "astropy/nddata/convolution/boundary_none.pyx":220
+                /* "astropy/convolution/boundary_none.pyx":223
  *                                         <unsigned int>(wky + jj - j),
  *                                         <unsigned int>(wkz + kk - k)]
  *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
  *                                     top += val * ker
  *                                     bot += ker
  */
-                __pyx_t_4 = (!npy_isnan(__pyx_v_val));
-                if (__pyx_t_4) {
+                __pyx_t_2 = (!npy_isnan(__pyx_v_val));
+                if (__pyx_t_2) {
 
-                  /* "astropy/nddata/convolution/boundary_none.pyx":221
+                  /* "astropy/convolution/boundary_none.pyx":224
  *                                         <unsigned int>(wkz + kk - k)]
  *                                 if not npy_isnan(val):
  *                                     top += val * ker             # <<<<<<<<<<<<<<
@@ -3489,7 +3585,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
                   __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-                  /* "astropy/nddata/convolution/boundary_none.pyx":222
+                  /* "astropy/convolution/boundary_none.pyx":225
  *                                 if not npy_isnan(val):
  *                                     top += val * ker
  *                                     bot += ker             # <<<<<<<<<<<<<<
@@ -3504,17 +3600,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
             }
           }
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":223
+          /* "astropy/convolution/boundary_none.pyx":226
  *                                     top += val * ker
  *                                     bot += ker
  *                     if bot != 0:             # <<<<<<<<<<<<<<
  *                         conv[i, j, k] = top / bot
  *                     else:
  */
-          __pyx_t_4 = (__pyx_v_bot != 0.0);
-          if (__pyx_t_4) {
+          __pyx_t_2 = (__pyx_v_bot != 0.0);
+          if (__pyx_t_2) {
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":224
+            /* "astropy/convolution/boundary_none.pyx":227
  *                                     bot += ker
  *                     if bot != 0:
  *                         conv[i, j, k] = top / bot             # <<<<<<<<<<<<<<
@@ -3523,57 +3619,57 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
  */
             if (unlikely(__pyx_v_bot == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "float division");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
-            __pyx_t_48 = __pyx_v_i;
-            __pyx_t_49 = __pyx_v_j;
-            __pyx_t_50 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_50, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
+            __pyx_t_52 = __pyx_v_i;
+            __pyx_t_53 = __pyx_v_j;
+            __pyx_t_54 = __pyx_v_k;
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_52, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_53, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_54, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
             goto __pyx_L33;
           }
           /*else*/ {
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":226
+            /* "astropy/convolution/boundary_none.pyx":229
  *                         conv[i, j, k] = top / bot
  *                     else:
  *                         conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
  *                 else:
  *                     conv[i, j, k] = fixed[i, j, k]
  */
-            __pyx_t_57 = __pyx_v_i;
-            __pyx_t_58 = __pyx_v_j;
-            __pyx_t_59 = __pyx_v_k;
-            __pyx_t_60 = __pyx_v_i;
-            __pyx_t_61 = __pyx_v_j;
-            __pyx_t_62 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_61, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_62, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_fixed.diminfo[0 [...]
+            __pyx_t_61 = __pyx_v_i;
+            __pyx_t_62 = __pyx_v_j;
+            __pyx_t_63 = __pyx_v_k;
+            __pyx_t_64 = __pyx_v_i;
+            __pyx_t_65 = __pyx_v_j;
+            __pyx_t_66 = __pyx_v_k;
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_64, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_65, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_66, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_61, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx [...]
           }
           __pyx_L33:;
           goto __pyx_L25;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":228
+          /* "astropy/convolution/boundary_none.pyx":231
  *                         conv[i, j, k] = fixed[i, j, k]
  *                 else:
  *                     conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
  * 
  *     return conv
  */
-          __pyx_t_63 = __pyx_v_i;
-          __pyx_t_64 = __pyx_v_j;
-          __pyx_t_65 = __pyx_v_k;
-          __pyx_t_66 = __pyx_v_i;
-          __pyx_t_67 = __pyx_v_j;
-          __pyx_t_68 = __pyx_v_k;
-          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_67, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_68, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_fixed.diminfo[0]. [...]
+          __pyx_t_67 = __pyx_v_i;
+          __pyx_t_68 = __pyx_v_j;
+          __pyx_t_69 = __pyx_v_k;
+          __pyx_t_70 = __pyx_v_i;
+          __pyx_t_71 = __pyx_v_j;
+          __pyx_t_72 = __pyx_v_k;
+          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_70, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_71, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_72, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_67, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t [...]
         }
         __pyx_L25:;
       }
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":230
+  /* "astropy/convolution/boundary_none.pyx":233
  *                     conv[i, j, k] = fixed[i, j, k]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -3598,7 +3694,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convol
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve3d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_none.convolve3d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -5667,8 +5763,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
@@ -5679,36 +5775,36 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":19
+  /* "astropy/convolution/boundary_none.pyx":20
  * 
  *     if g.shape[0] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_2);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":83
+  /* "astropy/convolution/boundary_none.pyx":84
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_3);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_3));
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":156
+  /* "astropy/convolution/boundary_none.pyx":158
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_4);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
 
@@ -5778,41 +5874,41 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_k_tuple_16);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_16));
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":15
+  /* "astropy/convolution/boundary_none.pyx":16
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_none(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=1] g):
  * 
  */
-  __pyx_k_tuple_17 = PyTuple_Pack(15, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot), ((PyObject *)__pyx_n_s__ker), ((PyObject *)__pyx_n_s__val)); if ( [...]
+  __pyx_k_tuple_17 = PyTuple_Pack(15, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot), ((PyObject *)__pyx_n_s__ker), ((PyObject *)__pyx_n_s__val)); if ( [...]
   __Pyx_GOTREF(__pyx_k_tuple_17);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_17));
-  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(2, 0, 15, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 15, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(2, 0, 15, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 16, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":79
+  /* "astropy/convolution/boundary_none.pyx":80
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_none(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=2] g):
  * 
  */
-  __pyx_k_tuple_22 = PyTuple_Pack(22, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__jj), ((PyObject *)__pyx_n_s__iimin), ((PyObject  [...]
+  __pyx_k_tuple_22 = PyTuple_Pack(22, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__jj), ((PyObject *)__pyx_n_s__iimin), ((PyObject  [...]
   __Pyx_GOTREF(__pyx_k_tuple_22);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_22));
-  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(2, 0, 22, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 79, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(2, 0, 22, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 80, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":152
+  /* "astropy/convolution/boundary_none.pyx":154
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_none(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=3] g):
  * 
  */
-  __pyx_k_tuple_25 = PyTuple_Pack(29, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject * [...]
+  __pyx_k_tuple_25 = PyTuple_Pack(29, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject * [...]
   __Pyx_GOTREF(__pyx_k_tuple_25);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
-  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(2, 0, 29, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 152, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(2, 0, 29, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 154, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -5878,8 +5974,8 @@ PyMODINIT_FUNC PyInit_boundary_none(void)
   #if PY_MAJOR_VERSION >= 3
   {
     PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (!PyDict_GetItemString(modules, "astropy.nddata.convolution.boundary_none")) {
-      if (unlikely(PyDict_SetItemString(modules, "astropy.nddata.convolution.boundary_none", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!PyDict_GetItemString(modules, "astropy.convolution.boundary_none")) {
+      if (unlikely(PyDict_SetItemString(modules, "astropy.convolution.boundary_none", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
@@ -5890,7 +5986,7 @@ PyMODINIT_FUNC PyInit_boundary_none(void)
   if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   /*--- Initialize various global constants etc. ---*/
   if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_module_is_main_astropy__nddata__convolution__boundary_none) {
+  if (__pyx_module_is_main_astropy__convolution__boundary_none) {
     if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   }
   /*--- Builtin init code ---*/
@@ -5918,72 +6014,73 @@ PyMODINIT_FUNC PyInit_boundary_none(void)
   /*--- Function import code ---*/
   /*--- Execution code ---*/
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":2
+  /* "astropy/convolution/boundary_none.pyx":3
+ * # Licensed under a 3-clause BSD style license - see LICENSE.rst
  * from __future__ import division
  * import numpy as np             # <<<<<<<<<<<<<<
  * cimport numpy as np
  * 
  */
-  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":5
+  /* "astropy/convolution/boundary_none.pyx":6
  * cimport numpy as np
  * 
  * DTYPE = np.float             # <<<<<<<<<<<<<<
  * ctypedef np.float_t DTYPE_t
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":15
+  /* "astropy/convolution/boundary_none.pyx":16
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_none(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=1] g):
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_1convolve1d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_none_1convolve1d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":79
+  /* "astropy/convolution/boundary_none.pyx":80
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_none(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=2] g):
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_3convolve2d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_none_3convolve2d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":152
+  /* "astropy/convolution/boundary_none.pyx":154
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_none(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=3] g):
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_5convolve3d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_none_5convolve3d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":1
- * from __future__ import division             # <<<<<<<<<<<<<<
+  /* "astropy/convolution/boundary_none.pyx":1
+ * # Licensed under a 3-clause BSD style license - see LICENSE.rst             # <<<<<<<<<<<<<<
+ * from __future__ import division
  * import numpy as np
- * cimport numpy as np
  */
   __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
@@ -6002,10 +6099,10 @@ PyMODINIT_FUNC PyInit_boundary_none(void)
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   if (__pyx_m) {
-    __Pyx_AddTraceback("init astropy.nddata.convolution.boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    __Pyx_AddTraceback("init astropy.convolution.boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
     Py_DECREF(__pyx_m); __pyx_m = 0;
   } else if (!PyErr_Occurred()) {
-    PyErr_SetString(PyExc_ImportError, "init astropy.nddata.convolution.boundary_none");
+    PyErr_SetString(PyExc_ImportError, "init astropy.convolution.boundary_none");
   }
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
diff --git a/astropy/nddata/convolution/boundary_none.pyx b/astropy/convolution/boundary_none.pyx
similarity index 93%
rename from astropy/nddata/convolution/boundary_none.pyx
rename to astropy/convolution/boundary_none.pyx
index 1f9ceb0..1907b4f 100644
--- a/astropy/nddata/convolution/boundary_none.pyx
+++ b/astropy/convolution/boundary_none.pyx
@@ -1,3 +1,4 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
 from __future__ import division
 import numpy as np
 cimport numpy as np
@@ -37,8 +38,8 @@ def convolve1d_boundary_none(np.ndarray[DTYPE_t, ndim=1] f,
 
     # Need a first pass to replace NaN values with value convolved from
     # neighboring values
-    for i in range(wkx, nx - wkx):
-        if npy_isnan(f[i]):
+    for i in range(nx):
+        if npy_isnan(f[i]) and i >= wkx and i < nx - wkx:
             top = 0.
             bot = 0.
             for ii in range(i - wkx, i + wkx + 1):
@@ -104,9 +105,10 @@ def convolve2d_boundary_none(np.ndarray[DTYPE_t, ndim=2] f,
 
     # Need a first pass to replace NaN values with value convolved from
     # neighboring values
-    for i in range(wkx, nx - wkx):
-        for j in range(wky, ny - wky):
-            if npy_isnan(f[i, j]):
+    for i in range(nx):
+        for j in range(ny):
+            if npy_isnan(f[i, j]) and i >= wkx and i < nx - wkx \
+            and j >= wky and j < ny - wky:
                 top = 0.
                 bot = 0.
                 for ii in range(i - wkx, i + wkx + 1):
@@ -180,10 +182,11 @@ def convolve3d_boundary_none(np.ndarray[DTYPE_t, ndim=3] f,
 
     # Need a first pass to replace NaN values with value convolved from
     # neighboring values
-    for i in range(wkx, nx - wkx):
-        for j in range(wky, ny - wky):
-            for k in range(wkz, nz - wkz):
-                if npy_isnan(f[i, j, k]):
+    for i in range(nx):
+        for j in range(ny):
+            for k in range(nz):
+                if npy_isnan(f[i, j, k]) and i >= wkx and i < nx - wkx \
+                and j >= wky and j < ny - wky and k >= wkz and k <= nz - wkz:
                     top = 0.
                     bot = 0.
                     for ii in range(i - wkx, i + wkx + 1):
diff --git a/astropy/nddata/convolution/boundary_wrap.c b/astropy/convolution/boundary_wrap.c
similarity index 89%
rename from astropy/nddata/convolution/boundary_wrap.c
rename to astropy/convolution/boundary_wrap.c
index 78e3ed9..46c927c 100644
--- a/astropy/nddata/convolution/boundary_wrap.c
+++ b/astropy/convolution/boundary_wrap.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.18 on Fri Oct 25 12:27:41 2013 */
+/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -249,8 +249,8 @@
 #define _USE_MATH_DEFINES
 #endif
 #include <math.h>
-#define __PYX_HAVE__astropy__nddata__convolution__boundary_wrap
-#define __PYX_HAVE_API__astropy__nddata__convolution__boundary_wrap
+#define __PYX_HAVE__astropy__convolution__boundary_wrap
+#define __PYX_HAVE_API__astropy__convolution__boundary_wrap
 #include "string.h"
 #include "stdio.h"
 #include "stdlib.h"
@@ -583,14 +583,14 @@ typedef npy_double __pyx_t_5numpy_double_t;
  */
 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 
-/* "astropy/nddata/convolution/boundary_wrap.pyx":6
+/* "astropy/convolution/boundary_wrap.pyx":7
  * 
  * DTYPE = np.float
  * ctypedef np.float_t DTYPE_t             # <<<<<<<<<<<<<<
  * 
  * cdef extern from "numpy/npy_math.h":
  */
-typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t;
+typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t;
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     typedef ::std::complex< float > __pyx_t_float_complex;
@@ -967,18 +967,18 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, cha
 
 /* Module declarations from 'cython' */
 
-/* Module declarations from 'astropy.nddata.convolution.boundary_wrap' */
-static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
-#define __Pyx_MODULE_NAME "astropy.nddata.convolution.boundary_wrap"
-int __pyx_module_is_main_astropy__nddata__convolution__boundary_wrap = 0;
+/* Module declarations from 'astropy.convolution.boundary_wrap' */
+static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
+#define __Pyx_MODULE_NAME "astropy.convolution.boundary_wrap"
+int __pyx_module_is_main_astropy__convolution__boundary_wrap = 0;
 
-/* Implementation of 'astropy.nddata.convolution.boundary_wrap' */
+/* Implementation of 'astropy.convolution.boundary_wrap' */
 static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_range;
 static PyObject *__pyx_builtin_RuntimeError;
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolve1d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convolve2d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convolve3d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_convolve1d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_2convolve2d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_4convolve3d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
 static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
 static char __pyx_k_1[] = "Convolution kernel must have odd dimensions";
@@ -989,8 +989,8 @@ static char __pyx_k_11[] = "unknown dtype code in numpy.pxd (%d)";
 static char __pyx_k_12[] = "Format string allocated too short, see comment in numpy.pxd";
 static char __pyx_k_15[] = "Format string allocated too short.";
 static char __pyx_k_19[] = "convolve1d_boundary_wrap";
-static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/nddata/convolution/boundary_wrap.pyx";
-static char __pyx_k_21[] = "astropy.nddata.convolution.boundary_wrap";
+static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/convolution/boundary_wrap.pyx";
+static char __pyx_k_21[] = "astropy.convolution.boundary_wrap";
 static char __pyx_k_24[] = "convolve2d_boundary_wrap";
 static char __pyx_k_27[] = "convolve3d_boundary_wrap";
 static char __pyx_k__B[] = "B";
@@ -1123,9 +1123,9 @@ static PyObject *__pyx_k_codeobj_23;
 static PyObject *__pyx_k_codeobj_26;
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_1convolve1d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_wrap_1convolve1d_boundary_wrap = {__Pyx_NAMESTR("convolve1d_boundary_wrap"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_1convolve1d_boundary_wrap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_1convolve1d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_1convolve1d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_wrap_1convolve1d_boundary_wrap = {__Pyx_NAMESTR("convolve1d_boundary_wrap"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_wrap_1convolve1d_boundary_wrap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_1convolve1d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   PyObject *__pyx_r = 0;
@@ -1151,11 +1151,11 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_1convol
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_wrap", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_wrap", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_wrap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_wrap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -1168,15 +1168,15 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_1convol
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_wrap", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_wrap", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_wrap.convolve1d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve1d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolve1d_boundary_wrap(__pyx_self, __pyx_v_f, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_wrap_convolve1d_boundary_wrap(__pyx_self, __pyx_v_f, __pyx_v_g);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -1185,7 +1185,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_1convol
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_wrap.pyx":15
+/* "astropy/convolution/boundary_wrap.pyx":16
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_wrap(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
@@ -1193,7 +1193,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_1convol
  * 
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolve1d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_convolve1d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
   int __pyx_v_nx;
   int __pyx_v_nkx;
   int __pyx_v_wkx;
@@ -1204,10 +1204,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
   int __pyx_v_ii;
   int __pyx_v_iimin;
   int __pyx_v_iimax;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -1269,16 +1269,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":18
+  /* "astropy/convolution/boundary_wrap.pyx":19
  *                              np.ndarray[DTYPE_t, ndim=1] g):
  * 
  *     if g.shape[0] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -1288,23 +1288,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
   __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
   if (__pyx_t_1) {
 
-    /* "astropy/nddata/convolution/boundary_wrap.pyx":19
+    /* "astropy/convolution/boundary_wrap.pyx":20
  * 
  *     if g.shape[0] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":21
+  /* "astropy/convolution/boundary_wrap.pyx":22
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -1312,24 +1312,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (__pyx_t_1) {
-    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_6 = __pyx_t_5;
   } else {
@@ -1337,11 +1337,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
   }
   if (unlikely(!__pyx_t_6)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":23
+  /* "astropy/convolution/boundary_wrap.pyx":24
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -1350,7 +1350,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":24
+  /* "astropy/convolution/boundary_wrap.pyx":25
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -1359,7 +1359,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":25
+  /* "astropy/convolution/boundary_wrap.pyx":26
  *     cdef int nx = f.shape[0]
  *     cdef int nkx = g.shape[0]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -1368,48 +1368,48 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":26
+  /* "astropy/convolution/boundary_wrap.pyx":27
  *     cdef int nkx = g.shape[0]
  *     cdef int wkx = nkx // 2
  *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)
  *     cdef unsigned int i, iii
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_7);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -1417,48 +1417,48 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":27
+  /* "astropy/convolution/boundary_wrap.pyx":28
  *     cdef int wkx = nkx // 2
  *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.empty([nx], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.empty([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef unsigned int i, iii
  *     cdef int ii
  */
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
-  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_t_2));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_9 = ((PyArrayObject *)__pyx_t_3);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -1466,7 +1466,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":37
+  /* "astropy/convolution/boundary_wrap.pyx":38
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -1477,7 +1477,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_wrap.pyx":38
+    /* "astropy/convolution/boundary_wrap.pyx":39
  *     # neighboring values
  *     for i in range(nx):
  *         if npy_isnan(f[i]):             # <<<<<<<<<<<<<<
@@ -1485,10 +1485,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  *             bot = 0.
  */
     __pyx_t_12 = __pyx_v_i;
-    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
+    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
     if (__pyx_t_6) {
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":39
+      /* "astropy/convolution/boundary_wrap.pyx":40
  *     for i in range(nx):
  *         if npy_isnan(f[i]):
  *             top = 0.             # <<<<<<<<<<<<<<
@@ -1497,7 +1497,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
       __pyx_v_top = 0.;
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":40
+      /* "astropy/convolution/boundary_wrap.pyx":41
  *         if npy_isnan(f[i]):
  *             top = 0.
  *             bot = 0.             # <<<<<<<<<<<<<<
@@ -1506,7 +1506,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
       __pyx_v_bot = 0.;
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":41
+      /* "astropy/convolution/boundary_wrap.pyx":42
  *             top = 0.
  *             bot = 0.
  *             iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -1515,7 +1515,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
       __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":42
+      /* "astropy/convolution/boundary_wrap.pyx":43
  *             bot = 0.
  *             iimin = i - wkx
  *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -1524,7 +1524,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
       __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":43
+      /* "astropy/convolution/boundary_wrap.pyx":44
  *             iimin = i - wkx
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -1535,7 +1535,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
       for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
         __pyx_v_ii = __pyx_t_14;
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":44
+        /* "astropy/convolution/boundary_wrap.pyx":45
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):
  *                 iii = ii % nx             # <<<<<<<<<<<<<<
@@ -1544,11 +1544,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
         if (unlikely(__pyx_v_nx == 0)) {
           PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":45
+        /* "astropy/convolution/boundary_wrap.pyx":46
  *             for ii in range(iimin, iimax):
  *                 iii = ii % nx
  *                 val = f[iii]             # <<<<<<<<<<<<<<
@@ -1556,9 +1556,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  */
         __pyx_t_15 = __pyx_v_iii;
-        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_f.diminfo[0].strides));
+        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_f.diminfo[0].strides));
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":46
+        /* "astropy/convolution/boundary_wrap.pyx":47
  *                 iii = ii % nx
  *                 val = f[iii]
  *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -1568,7 +1568,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
         __pyx_t_6 = (!npy_isnan(__pyx_v_val));
         if (__pyx_t_6) {
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":47
+          /* "astropy/convolution/boundary_wrap.pyx":48
  *                 val = f[iii]
  *                 if not npy_isnan(val):
  *                     ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
@@ -1576,9 +1576,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  *                     bot += ker
  */
           __pyx_t_16 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_g.diminfo[0].strides));
+          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_g.diminfo[0].strides));
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":48
+          /* "astropy/convolution/boundary_wrap.pyx":49
  *                 if not npy_isnan(val):
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  *                     top += val * ker             # <<<<<<<<<<<<<<
@@ -1587,7 +1587,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
           __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":49
+          /* "astropy/convolution/boundary_wrap.pyx":50
  *                     ker = g[<unsigned int>(wkx + ii - i)]
  *                     top += val * ker
  *                     bot += ker             # <<<<<<<<<<<<<<
@@ -1600,7 +1600,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
         __pyx_L9:;
       }
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":51
+      /* "astropy/convolution/boundary_wrap.pyx":52
  *                     bot += ker
  * 
  *             if bot != 0.:             # <<<<<<<<<<<<<<
@@ -1610,7 +1610,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
       __pyx_t_6 = (__pyx_v_bot != 0.);
       if (__pyx_t_6) {
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":52
+        /* "astropy/convolution/boundary_wrap.pyx":53
  * 
  *             if bot != 0.:
  *                 fixed[i] = top / bot             # <<<<<<<<<<<<<<
@@ -1619,15 +1619,15 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
         if (unlikely(__pyx_v_bot == 0)) {
           PyErr_Format(PyExc_ZeroDivisionError, "float division");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         __pyx_t_17 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
         goto __pyx_L10;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":54
+        /* "astropy/convolution/boundary_wrap.pyx":55
  *                 fixed[i] = top / bot
  *             else:
  *                 fixed[i] = f[i]             # <<<<<<<<<<<<<<
@@ -1636,14 +1636,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
         __pyx_t_18 = __pyx_v_i;
         __pyx_t_19 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides));
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides));
       }
       __pyx_L10:;
       goto __pyx_L6;
     }
     /*else*/ {
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":56
+      /* "astropy/convolution/boundary_wrap.pyx":57
  *                 fixed[i] = f[i]
  *         else:
  *             fixed[i] = f[i]             # <<<<<<<<<<<<<<
@@ -1652,12 +1652,12 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
       __pyx_t_20 = __pyx_v_i;
       __pyx_t_21 = __pyx_v_i;
-      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides));
+      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides));
     }
     __pyx_L6:;
   }
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":59
+  /* "astropy/convolution/boundary_wrap.pyx":60
  * 
  *     # Now run the proper convolution
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -1668,7 +1668,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_wrap.pyx":60
+    /* "astropy/convolution/boundary_wrap.pyx":61
  *     # Now run the proper convolution
  *     for i in range(nx):
  *         if not npy_isnan(fixed[i]):             # <<<<<<<<<<<<<<
@@ -1676,10 +1676,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  *             bot = 0.
  */
     __pyx_t_22 = __pyx_v_i;
-    __pyx_t_6 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides))));
+    __pyx_t_6 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides))));
     if (__pyx_t_6) {
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":61
+      /* "astropy/convolution/boundary_wrap.pyx":62
  *     for i in range(nx):
  *         if not npy_isnan(fixed[i]):
  *             top = 0.             # <<<<<<<<<<<<<<
@@ -1688,7 +1688,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
       __pyx_v_top = 0.;
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":62
+      /* "astropy/convolution/boundary_wrap.pyx":63
  *         if not npy_isnan(fixed[i]):
  *             top = 0.
  *             bot = 0.             # <<<<<<<<<<<<<<
@@ -1697,7 +1697,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
       __pyx_v_bot = 0.;
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":63
+      /* "astropy/convolution/boundary_wrap.pyx":64
  *             top = 0.
  *             bot = 0.
  *             iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -1706,7 +1706,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
       __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":64
+      /* "astropy/convolution/boundary_wrap.pyx":65
  *             bot = 0.
  *             iimin = i - wkx
  *             iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -1715,7 +1715,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
       __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":65
+      /* "astropy/convolution/boundary_wrap.pyx":66
  *             iimin = i - wkx
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -1726,7 +1726,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
       for (__pyx_t_14 = __pyx_v_iimin; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
         __pyx_v_ii = __pyx_t_14;
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":66
+        /* "astropy/convolution/boundary_wrap.pyx":67
  *             iimax = i + wkx + 1
  *             for ii in range(iimin, iimax):
  *                 iii = ii % nx             # <<<<<<<<<<<<<<
@@ -1735,11 +1735,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
         if (unlikely(__pyx_v_nx == 0)) {
           PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":67
+        /* "astropy/convolution/boundary_wrap.pyx":68
  *             for ii in range(iimin, iimax):
  *                 iii = ii % nx
  *                 val = fixed[iii]             # <<<<<<<<<<<<<<
@@ -1747,9 +1747,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  *                 if not npy_isnan(val):
  */
         __pyx_t_23 = __pyx_v_iii;
-        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_fixed.diminfo[0].strides));
+        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_fixed.diminfo[0].strides));
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":68
+        /* "astropy/convolution/boundary_wrap.pyx":69
  *                 iii = ii % nx
  *                 val = fixed[iii]
  *                 ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
@@ -1757,9 +1757,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  *                     top += val * ker
  */
         __pyx_t_24 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides));
+        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides));
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":69
+        /* "astropy/convolution/boundary_wrap.pyx":70
  *                 val = fixed[iii]
  *                 ker = g[<unsigned int>(wkx + ii - i)]
  *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -1769,7 +1769,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
         __pyx_t_6 = (!npy_isnan(__pyx_v_val));
         if (__pyx_t_6) {
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":70
+          /* "astropy/convolution/boundary_wrap.pyx":71
  *                 ker = g[<unsigned int>(wkx + ii - i)]
  *                 if not npy_isnan(val):
  *                     top += val * ker             # <<<<<<<<<<<<<<
@@ -1778,7 +1778,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
           __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":71
+          /* "astropy/convolution/boundary_wrap.pyx":72
  *                 if not npy_isnan(val):
  *                     top += val * ker
  *                     bot += ker             # <<<<<<<<<<<<<<
@@ -1791,7 +1791,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
         __pyx_L16:;
       }
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":72
+      /* "astropy/convolution/boundary_wrap.pyx":73
  *                     top += val * ker
  *                     bot += ker
  *             if bot != 0:             # <<<<<<<<<<<<<<
@@ -1801,7 +1801,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
       __pyx_t_6 = (__pyx_v_bot != 0.0);
       if (__pyx_t_6) {
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":73
+        /* "astropy/convolution/boundary_wrap.pyx":74
  *                     bot += ker
  *             if bot != 0:
  *                 conv[i] = top / bot             # <<<<<<<<<<<<<<
@@ -1810,15 +1810,15 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
         if (unlikely(__pyx_v_bot == 0)) {
           PyErr_Format(PyExc_ZeroDivisionError, "float division");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         __pyx_t_25 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
         goto __pyx_L17;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":75
+        /* "astropy/convolution/boundary_wrap.pyx":76
  *                 conv[i] = top / bot
  *             else:
  *                 conv[i] = fixed[i]             # <<<<<<<<<<<<<<
@@ -1827,14 +1827,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
         __pyx_t_26 = __pyx_v_i;
         __pyx_t_27 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides));
+        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides));
       }
       __pyx_L17:;
       goto __pyx_L13;
     }
     /*else*/ {
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":77
+      /* "astropy/convolution/boundary_wrap.pyx":78
  *                 conv[i] = fixed[i]
  *         else:
  *             conv[i] = fixed[i]             # <<<<<<<<<<<<<<
@@ -1843,12 +1843,12 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
  */
       __pyx_t_28 = __pyx_v_i;
       __pyx_t_29 = __pyx_v_i;
-      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides));
+      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides));
     }
     __pyx_L13:;
   }
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":79
+  /* "astropy/convolution/boundary_wrap.pyx":80
  *             conv[i] = fixed[i]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -1874,7 +1874,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_wrap.convolve1d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve1d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -1891,9 +1891,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_convolv
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_3convolve2d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_wrap_3convolve2d_boundary_wrap = {__Pyx_NAMESTR("convolve2d_boundary_wrap"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_3convolve2d_boundary_wrap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_3convolve2d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_3convolve2d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_wrap_3convolve2d_boundary_wrap = {__Pyx_NAMESTR("convolve2d_boundary_wrap"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_wrap_3convolve2d_boundary_wrap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_3convolve2d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   PyObject *__pyx_r = 0;
@@ -1919,11 +1919,11 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_3convol
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_wrap", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_wrap", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_wrap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_wrap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -1936,15 +1936,15 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_3convol
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_wrap", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_wrap", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_wrap.convolve2d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve2d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convolve2d_boundary_wrap(__pyx_self, __pyx_v_f, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_wrap_2convolve2d_boundary_wrap(__pyx_self, __pyx_v_f, __pyx_v_g);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -1953,7 +1953,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_3convol
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_wrap.pyx":83
+/* "astropy/convolution/boundary_wrap.pyx":84
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_wrap(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
@@ -1961,7 +1961,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_3convol
  * 
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convolve2d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_2convolve2d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
   int __pyx_v_nx;
   int __pyx_v_ny;
   int __pyx_v_nkx;
@@ -1980,10 +1980,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
   int __pyx_v_iimax;
   int __pyx_v_jjmin;
   int __pyx_v_jjmax;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -2065,16 +2065,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1];
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":86
+  /* "astropy/convolution/boundary_wrap.pyx":87
  *                              np.ndarray[DTYPE_t, ndim=2] g):
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -2090,23 +2090,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
   }
   if (__pyx_t_3) {
 
-    /* "astropy/nddata/convolution/boundary_wrap.pyx":87
+    /* "astropy/convolution/boundary_wrap.pyx":88
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":89
+  /* "astropy/convolution/boundary_wrap.pyx":90
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -2114,24 +2114,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (__pyx_t_3) {
-    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_2 = __pyx_t_1;
   } else {
@@ -2139,11 +2139,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
   }
   if (unlikely(!__pyx_t_2)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":91
+  /* "astropy/convolution/boundary_wrap.pyx":92
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -2152,7 +2152,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":92
+  /* "astropy/convolution/boundary_wrap.pyx":93
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
@@ -2161,7 +2161,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
   __pyx_v_ny = (__pyx_v_f->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":93
+  /* "astropy/convolution/boundary_wrap.pyx":94
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -2170,7 +2170,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":94
+  /* "astropy/convolution/boundary_wrap.pyx":95
  *     cdef int ny = f.shape[1]
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
@@ -2179,7 +2179,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
   __pyx_v_nky = (__pyx_v_g->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":95
+  /* "astropy/convolution/boundary_wrap.pyx":96
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -2188,7 +2188,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":96
+  /* "astropy/convolution/boundary_wrap.pyx":97
  *     cdef int nky = g.shape[1]
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
@@ -2197,23 +2197,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
   __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":97
+  /* "astropy/convolution/boundary_wrap.pyx":98
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2
  *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)
  *     cdef unsigned int i, j, iii, jjj
  */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
@@ -2221,29 +2221,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_4 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_7));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
   __pyx_t_7 = 0;
-  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_7));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1];
     }
   }
@@ -2251,23 +2251,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":98
+  /* "astropy/convolution/boundary_wrap.pyx":99
  *     cdef int wky = nky // 2
  *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.empty([nx, ny], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.empty([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef unsigned int i, j, iii, jjj
  *     cdef int ii, jj
  */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
@@ -2275,29 +2275,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_4 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_9 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1];
     }
   }
@@ -2305,7 +2305,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":108
+  /* "astropy/convolution/boundary_wrap.pyx":109
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -2316,7 +2316,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_wrap.pyx":109
+    /* "astropy/convolution/boundary_wrap.pyx":110
  *     # neighboring values
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -2327,7 +2327,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
     for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
       __pyx_v_j = __pyx_t_13;
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":110
+      /* "astropy/convolution/boundary_wrap.pyx":111
  *     for i in range(nx):
  *         for j in range(ny):
  *             if npy_isnan(f[i, j]):             # <<<<<<<<<<<<<<
@@ -2336,10 +2336,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
       __pyx_t_14 = __pyx_v_i;
       __pyx_t_15 = __pyx_v_j;
-      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
+      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
       if (__pyx_t_2) {
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":111
+        /* "astropy/convolution/boundary_wrap.pyx":112
  *         for j in range(ny):
  *             if npy_isnan(f[i, j]):
  *                 top = 0.             # <<<<<<<<<<<<<<
@@ -2348,7 +2348,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_top = 0.;
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":112
+        /* "astropy/convolution/boundary_wrap.pyx":113
  *             if npy_isnan(f[i, j]):
  *                 top = 0.
  *                 bot = 0.             # <<<<<<<<<<<<<<
@@ -2357,7 +2357,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_bot = 0.;
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":113
+        /* "astropy/convolution/boundary_wrap.pyx":114
  *                 top = 0.
  *                 bot = 0.
  *                 iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -2366,7 +2366,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":114
+        /* "astropy/convolution/boundary_wrap.pyx":115
  *                 bot = 0.
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -2375,7 +2375,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":115
+        /* "astropy/convolution/boundary_wrap.pyx":116
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -2384,7 +2384,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":116
+        /* "astropy/convolution/boundary_wrap.pyx":117
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -2393,7 +2393,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":117
+        /* "astropy/convolution/boundary_wrap.pyx":118
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -2404,7 +2404,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
         for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
           __pyx_v_ii = __pyx_t_17;
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":118
+          /* "astropy/convolution/boundary_wrap.pyx":119
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -2415,7 +2415,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
           for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
             __pyx_v_jj = __pyx_t_19;
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":119
+            /* "astropy/convolution/boundary_wrap.pyx":120
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):
  *                         iii = ii % nx             # <<<<<<<<<<<<<<
@@ -2424,11 +2424,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
             if (unlikely(__pyx_v_nx == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":120
+            /* "astropy/convolution/boundary_wrap.pyx":121
  *                     for jj in range(jjmin, jjmax):
  *                         iii = ii % nx
  *                         jjj = jj % ny             # <<<<<<<<<<<<<<
@@ -2437,11 +2437,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
             if (unlikely(__pyx_v_ny == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             __pyx_v_jjj = __Pyx_mod_int(__pyx_v_jj, __pyx_v_ny);
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":121
+            /* "astropy/convolution/boundary_wrap.pyx":122
  *                         iii = ii % nx
  *                         jjj = jj % ny
  *                         val = f[iii, jjj]             # <<<<<<<<<<<<<<
@@ -2450,9 +2450,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
             __pyx_t_20 = __pyx_v_iii;
             __pyx_t_21 = __pyx_v_jjj;
-            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_f.diminfo[1].strides));
+            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_f.diminfo[1].strides));
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":122
+            /* "astropy/convolution/boundary_wrap.pyx":123
  *                         jjj = jj % ny
  *                         val = f[iii, jjj]
  *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -2462,7 +2462,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
             __pyx_t_2 = (!npy_isnan(__pyx_v_val));
             if (__pyx_t_2) {
 
-              /* "astropy/nddata/convolution/boundary_wrap.pyx":124
+              /* "astropy/convolution/boundary_wrap.pyx":125
  *                         if not npy_isnan(val):
  *                             ker = g[<unsigned int>(wkx + ii - i),
  *                                     <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
@@ -2471,9 +2471,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
               __pyx_t_22 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
               __pyx_t_23 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_g.diminfo[1].strides));
+              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_g.diminfo[1].strides));
 
-              /* "astropy/nddata/convolution/boundary_wrap.pyx":125
+              /* "astropy/convolution/boundary_wrap.pyx":126
  *                             ker = g[<unsigned int>(wkx + ii - i),
  *                                     <unsigned int>(wky + jj - j)]
  *                             top += val * ker             # <<<<<<<<<<<<<<
@@ -2482,7 +2482,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
               __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-              /* "astropy/nddata/convolution/boundary_wrap.pyx":126
+              /* "astropy/convolution/boundary_wrap.pyx":127
  *                                     <unsigned int>(wky + jj - j)]
  *                             top += val * ker
  *                             bot += ker             # <<<<<<<<<<<<<<
@@ -2496,7 +2496,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
           }
         }
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":128
+        /* "astropy/convolution/boundary_wrap.pyx":129
  *                             bot += ker
  * 
  *                 if bot != 0.:             # <<<<<<<<<<<<<<
@@ -2506,7 +2506,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
         __pyx_t_2 = (__pyx_v_bot != 0.);
         if (__pyx_t_2) {
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":129
+          /* "astropy/convolution/boundary_wrap.pyx":130
  * 
  *                 if bot != 0.:
  *                     fixed[i, j] = top / bot             # <<<<<<<<<<<<<<
@@ -2515,16 +2515,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
           if (unlikely(__pyx_v_bot == 0)) {
             PyErr_Format(PyExc_ZeroDivisionError, "float division");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           __pyx_t_24 = __pyx_v_i;
           __pyx_t_25 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
           goto __pyx_L14;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":131
+          /* "astropy/convolution/boundary_wrap.pyx":132
  *                     fixed[i, j] = top / bot
  *                 else:
  *                     fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
@@ -2535,14 +2535,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
           __pyx_t_27 = __pyx_v_j;
           __pyx_t_28 = __pyx_v_i;
           __pyx_t_29 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_f.diminfo[1].strides));
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_f.diminfo[1].strides));
         }
         __pyx_L14:;
         goto __pyx_L8;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":133
+        /* "astropy/convolution/boundary_wrap.pyx":134
  *                     fixed[i, j] = f[i, j]
  *             else:
  *                 fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
@@ -2553,13 +2553,13 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
         __pyx_t_31 = __pyx_v_j;
         __pyx_t_32 = __pyx_v_i;
         __pyx_t_33 = __pyx_v_j;
-        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_f.diminfo[1].strides));
+        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_f.diminfo[1].strides));
       }
       __pyx_L8:;
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":136
+  /* "astropy/convolution/boundary_wrap.pyx":137
  * 
  *     # Now run the proper convolution
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -2570,7 +2570,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/nddata/convolution/boundary_wrap.pyx":137
+    /* "astropy/convolution/boundary_wrap.pyx":138
  *     # Now run the proper convolution
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -2581,7 +2581,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
     for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
       __pyx_v_j = __pyx_t_13;
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":138
+      /* "astropy/convolution/boundary_wrap.pyx":139
  *     for i in range(nx):
  *         for j in range(ny):
  *             if not npy_isnan(fixed[i, j]):             # <<<<<<<<<<<<<<
@@ -2590,10 +2590,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
       __pyx_t_34 = __pyx_v_i;
       __pyx_t_35 = __pyx_v_j;
-      __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[1].strides))));
+      __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[1].strides))));
       if (__pyx_t_2) {
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":139
+        /* "astropy/convolution/boundary_wrap.pyx":140
  *         for j in range(ny):
  *             if not npy_isnan(fixed[i, j]):
  *                 top = 0.             # <<<<<<<<<<<<<<
@@ -2602,7 +2602,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_top = 0.;
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":140
+        /* "astropy/convolution/boundary_wrap.pyx":141
  *             if not npy_isnan(fixed[i, j]):
  *                 top = 0.
  *                 bot = 0.             # <<<<<<<<<<<<<<
@@ -2611,7 +2611,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_bot = 0.;
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":141
+        /* "astropy/convolution/boundary_wrap.pyx":142
  *                 top = 0.
  *                 bot = 0.
  *                 iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -2620,7 +2620,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":142
+        /* "astropy/convolution/boundary_wrap.pyx":143
  *                 bot = 0.
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -2629,7 +2629,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":143
+        /* "astropy/convolution/boundary_wrap.pyx":144
  *                 iimin = i - wkx
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -2638,7 +2638,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":144
+        /* "astropy/convolution/boundary_wrap.pyx":145
  *                 iimax = i + wkx + 1
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -2647,7 +2647,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
         __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":145
+        /* "astropy/convolution/boundary_wrap.pyx":146
  *                 jjmin = j - wky
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -2658,7 +2658,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
         for (__pyx_t_17 = __pyx_v_iimin; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
           __pyx_v_ii = __pyx_t_17;
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":146
+          /* "astropy/convolution/boundary_wrap.pyx":147
  *                 jjmax = j + wky + 1
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -2669,7 +2669,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
           for (__pyx_t_19 = __pyx_v_jjmin; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
             __pyx_v_jj = __pyx_t_19;
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":147
+            /* "astropy/convolution/boundary_wrap.pyx":148
  *                 for ii in range(iimin, iimax):
  *                     for jj in range(jjmin, jjmax):
  *                         iii = ii % nx             # <<<<<<<<<<<<<<
@@ -2678,11 +2678,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
             if (unlikely(__pyx_v_nx == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":148
+            /* "astropy/convolution/boundary_wrap.pyx":149
  *                     for jj in range(jjmin, jjmax):
  *                         iii = ii % nx
  *                         jjj = jj % ny             # <<<<<<<<<<<<<<
@@ -2691,11 +2691,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
             if (unlikely(__pyx_v_ny == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             __pyx_v_jjj = __Pyx_mod_int(__pyx_v_jj, __pyx_v_ny);
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":149
+            /* "astropy/convolution/boundary_wrap.pyx":150
  *                         iii = ii % nx
  *                         jjj = jj % ny
  *                         val = fixed[iii, jjj]             # <<<<<<<<<<<<<<
@@ -2704,9 +2704,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
             __pyx_t_36 = __pyx_v_iii;
             __pyx_t_37 = __pyx_v_jjj;
-            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides));
+            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides));
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":151
+            /* "astropy/convolution/boundary_wrap.pyx":152
  *                         val = fixed[iii, jjj]
  *                         ker = g[<unsigned int>(wkx + ii - i),
  *                                 <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
@@ -2715,9 +2715,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
             __pyx_t_38 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
             __pyx_t_39 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_g.diminfo[1].strides));
+            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_g.diminfo[1].strides));
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":152
+            /* "astropy/convolution/boundary_wrap.pyx":153
  *                         ker = g[<unsigned int>(wkx + ii - i),
  *                                 <unsigned int>(wky + jj - j)]
  *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -2727,7 +2727,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
             __pyx_t_2 = (!npy_isnan(__pyx_v_val));
             if (__pyx_t_2) {
 
-              /* "astropy/nddata/convolution/boundary_wrap.pyx":153
+              /* "astropy/convolution/boundary_wrap.pyx":154
  *                                 <unsigned int>(wky + jj - j)]
  *                         if not npy_isnan(val):
  *                             top += val * ker             # <<<<<<<<<<<<<<
@@ -2736,7 +2736,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
               __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-              /* "astropy/nddata/convolution/boundary_wrap.pyx":154
+              /* "astropy/convolution/boundary_wrap.pyx":155
  *                         if not npy_isnan(val):
  *                             top += val * ker
  *                             bot += ker             # <<<<<<<<<<<<<<
@@ -2750,7 +2750,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
           }
         }
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":155
+        /* "astropy/convolution/boundary_wrap.pyx":156
  *                             top += val * ker
  *                             bot += ker
  *                 if bot != 0:             # <<<<<<<<<<<<<<
@@ -2760,7 +2760,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
         __pyx_t_2 = (__pyx_v_bot != 0.0);
         if (__pyx_t_2) {
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":156
+          /* "astropy/convolution/boundary_wrap.pyx":157
  *                             bot += ker
  *                 if bot != 0:
  *                     conv[i, j] = top / bot             # <<<<<<<<<<<<<<
@@ -2769,16 +2769,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
  */
           if (unlikely(__pyx_v_bot == 0)) {
             PyErr_Format(PyExc_ZeroDivisionError, "float division");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           __pyx_t_40 = __pyx_v_i;
           __pyx_t_41 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
           goto __pyx_L25;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":158
+          /* "astropy/convolution/boundary_wrap.pyx":159
  *                     conv[i, j] = top / bot
  *                 else:
  *                     conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
@@ -2789,14 +2789,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
           __pyx_t_43 = __pyx_v_j;
           __pyx_t_44 = __pyx_v_i;
           __pyx_t_45 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[1] [...]
+          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[1].strides));
         }
         __pyx_L25:;
         goto __pyx_L19;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":160
+        /* "astropy/convolution/boundary_wrap.pyx":161
  *                     conv[i, j] = fixed[i, j]
  *             else:
  *                 conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
@@ -2807,13 +2807,13 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
         __pyx_t_47 = __pyx_v_j;
         __pyx_t_48 = __pyx_v_i;
         __pyx_t_49 = __pyx_v_j;
-        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[1].s [...]
+        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[1].strides));
       }
       __pyx_L19:;
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":162
+  /* "astropy/convolution/boundary_wrap.pyx":163
  *                 conv[i, j] = fixed[i, j]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -2839,7 +2839,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_wrap.convolve2d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve2d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -2856,9 +2856,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_2convol
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_5convolve3d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_wrap_5convolve3d_boundary_wrap = {__Pyx_NAMESTR("convolve3d_boundary_wrap"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_5convolve3d_boundary_wrap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_5convolve3d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_5convolve3d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_7astropy_11convolution_13boundary_wrap_5convolve3d_boundary_wrap = {__Pyx_NAMESTR("convolve3d_boundary_wrap"), (PyCFunction)__pyx_pw_7astropy_11convolution_13boundary_wrap_5convolve3d_boundary_wrap, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
+static PyObject *__pyx_pw_7astropy_11convolution_13boundary_wrap_5convolve3d_boundary_wrap(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_f = 0;
   PyArrayObject *__pyx_v_g = 0;
   PyObject *__pyx_r = 0;
@@ -2884,11 +2884,11 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_5convol
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_wrap", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_wrap", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_wrap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_wrap") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -2901,15 +2901,15 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_5convol
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_wrap", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_wrap", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_wrap.convolve3d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve3d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convolve3d_boundary_wrap(__pyx_self, __pyx_v_f, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_11convolution_13boundary_wrap_4convolve3d_boundary_wrap(__pyx_self, __pyx_v_f, __pyx_v_g);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -2918,7 +2918,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_5convol
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_wrap.pyx":166
+/* "astropy/convolution/boundary_wrap.pyx":167
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_wrap(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
@@ -2926,7 +2926,7 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_wrap_5convol
  * 
  */
 
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convolve3d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
+static PyObject *__pyx_pf_7astropy_11convolution_13boundary_wrap_4convolve3d_boundary_wrap(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
   int __pyx_v_nx;
   int __pyx_v_ny;
   int __pyx_v_nz;
@@ -2953,10 +2953,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
   int __pyx_v_jjmax;
   int __pyx_v_kkmin;
   int __pyx_v_kkmax;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t __pyx_v_val;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_top;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_bot;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_ker;
+  __pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t __pyx_v_val;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
   __Pyx_Buffer __pyx_pybuffer_conv;
   __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
@@ -3060,16 +3060,16 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
   __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_f.diminfo[2].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_f.diminfo[2].shape = __pyx_pybu [...]
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_g.diminfo[2].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_g.diminfo[2].shape = __pyx_pybu [...]
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":169
+  /* "astropy/convolution/boundary_wrap.pyx":170
  *                              np.ndarray[DTYPE_t, ndim=3] g):
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:             # <<<<<<<<<<<<<<
@@ -3091,23 +3091,23 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
   }
   if (__pyx_t_2) {
 
-    /* "astropy/nddata/convolution/boundary_wrap.pyx":170
+    /* "astropy/convolution/boundary_wrap.pyx":171
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":172
+  /* "astropy/convolution/boundary_wrap.pyx":173
  *         raise ValueError("Convolution kernel must have odd dimensions")
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
@@ -3115,24 +3115,24 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  *     cdef int nx = f.shape[0]
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   if (__pyx_t_2) {
-    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_4 = __pyx_t_1;
   } else {
@@ -3140,11 +3140,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
   }
   if (unlikely(!__pyx_t_4)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":174
+  /* "astropy/convolution/boundary_wrap.pyx":175
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  * 
  *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
@@ -3153,7 +3153,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
   __pyx_v_nx = (__pyx_v_f->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":175
+  /* "astropy/convolution/boundary_wrap.pyx":176
  * 
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
@@ -3162,7 +3162,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
   __pyx_v_ny = (__pyx_v_f->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":176
+  /* "astropy/convolution/boundary_wrap.pyx":177
  *     cdef int nx = f.shape[0]
  *     cdef int ny = f.shape[1]
  *     cdef int nz = f.shape[2]             # <<<<<<<<<<<<<<
@@ -3171,7 +3171,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
   __pyx_v_nz = (__pyx_v_f->dimensions[2]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":177
+  /* "astropy/convolution/boundary_wrap.pyx":178
  *     cdef int ny = f.shape[1]
  *     cdef int nz = f.shape[2]
  *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
@@ -3180,7 +3180,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
   __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":178
+  /* "astropy/convolution/boundary_wrap.pyx":179
  *     cdef int nz = f.shape[2]
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
@@ -3189,7 +3189,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
   __pyx_v_nky = (__pyx_v_g->dimensions[1]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":179
+  /* "astropy/convolution/boundary_wrap.pyx":180
  *     cdef int nkx = g.shape[0]
  *     cdef int nky = g.shape[1]
  *     cdef int nkz = g.shape[2]             # <<<<<<<<<<<<<<
@@ -3198,7 +3198,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
   __pyx_v_nkz = (__pyx_v_g->dimensions[2]);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":180
+  /* "astropy/convolution/boundary_wrap.pyx":181
  *     cdef int nky = g.shape[1]
  *     cdef int nkz = g.shape[2]
  *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
@@ -3207,7 +3207,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
   __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":181
+  /* "astropy/convolution/boundary_wrap.pyx":182
  *     cdef int nkz = g.shape[2]
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
@@ -3216,7 +3216,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
   __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":182
+  /* "astropy/convolution/boundary_wrap.pyx":183
  *     cdef int wkx = nkx // 2
  *     cdef int wky = nky // 2
  *     cdef int wkz = nkz // 2             # <<<<<<<<<<<<<<
@@ -3225,25 +3225,25 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
   __pyx_v_wkz = __Pyx_div_long(__pyx_v_nkz, 2);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":183
+  /* "astropy/convolution/boundary_wrap.pyx":184
  *     cdef int wky = nky // 2
  *     cdef int wkz = nkz // 2
  *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)
  *     cdef unsigned int i, j, k, iii, jjj, kkk
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
@@ -3254,29 +3254,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
   __pyx_t_5 = 0;
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
-  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_9));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
   __pyx_t_9 = 0;
-  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_9));
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_10 = ((PyArrayObject *)__pyx_t_7);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
       __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_fixed.diminfo[2].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[2] [...]
     }
   }
@@ -3284,25 +3284,25 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
   __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":184
+  /* "astropy/convolution/boundary_wrap.pyx":185
  *     cdef int wkz = nkz // 2
  *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.empty([nx, ny, nz], dtype=DTYPE)
  *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.empty([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
  *     cdef unsigned int i, j, k, iii, jjj, kkk
  *     cdef int ii, jj, kk
  */
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_7);
@@ -3313,29 +3313,29 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
   __pyx_t_7 = 0;
   __pyx_t_8 = 0;
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_11 = ((PyArrayObject *)__pyx_t_8);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
       __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_conv.diminfo[2].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[2]; __pyx_py [...]
     }
   }
@@ -3343,7 +3343,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
   __pyx_v_conv = ((PyArrayObject *)__pyx_t_8);
   __pyx_t_8 = 0;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":194
+  /* "astropy/convolution/boundary_wrap.pyx":195
  *     # Need a first pass to replace NaN values with value convolved from
  *     # neighboring values
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -3354,7 +3354,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
   for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
     __pyx_v_i = __pyx_t_13;
 
-    /* "astropy/nddata/convolution/boundary_wrap.pyx":195
+    /* "astropy/convolution/boundary_wrap.pyx":196
  *     # neighboring values
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -3365,7 +3365,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
     for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
       __pyx_v_j = __pyx_t_15;
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":196
+      /* "astropy/convolution/boundary_wrap.pyx":197
  *     for i in range(nx):
  *         for j in range(ny):
  *             for k in range(nz):             # <<<<<<<<<<<<<<
@@ -3376,7 +3376,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
       for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
         __pyx_v_k = __pyx_t_17;
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":197
+        /* "astropy/convolution/boundary_wrap.pyx":198
  *         for j in range(ny):
  *             for k in range(nz):
  *                 if npy_isnan(f[i, j, k]):             # <<<<<<<<<<<<<<
@@ -3386,10 +3386,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
         __pyx_t_18 = __pyx_v_i;
         __pyx_t_19 = __pyx_v_j;
         __pyx_t_20 = __pyx_v_k;
-        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
+        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
         if (__pyx_t_4) {
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":198
+          /* "astropy/convolution/boundary_wrap.pyx":199
  *             for k in range(nz):
  *                 if npy_isnan(f[i, j, k]):
  *                     top = 0.             # <<<<<<<<<<<<<<
@@ -3398,7 +3398,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_top = 0.;
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":199
+          /* "astropy/convolution/boundary_wrap.pyx":200
  *                 if npy_isnan(f[i, j, k]):
  *                     top = 0.
  *                     bot = 0.             # <<<<<<<<<<<<<<
@@ -3407,7 +3407,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_bot = 0.;
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":200
+          /* "astropy/convolution/boundary_wrap.pyx":201
  *                     top = 0.
  *                     bot = 0.
  *                     iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -3416,7 +3416,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":201
+          /* "astropy/convolution/boundary_wrap.pyx":202
  *                     bot = 0.
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -3425,7 +3425,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":202
+          /* "astropy/convolution/boundary_wrap.pyx":203
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -3434,7 +3434,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":203
+          /* "astropy/convolution/boundary_wrap.pyx":204
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -3443,7 +3443,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":204
+          /* "astropy/convolution/boundary_wrap.pyx":205
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
@@ -3452,7 +3452,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":205
+          /* "astropy/convolution/boundary_wrap.pyx":206
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
@@ -3461,7 +3461,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":206
+          /* "astropy/convolution/boundary_wrap.pyx":207
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -3472,7 +3472,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
           for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
             __pyx_v_ii = __pyx_t_22;
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":207
+            /* "astropy/convolution/boundary_wrap.pyx":208
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -3483,7 +3483,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
             for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
               __pyx_v_jj = __pyx_t_24;
 
-              /* "astropy/nddata/convolution/boundary_wrap.pyx":208
+              /* "astropy/convolution/boundary_wrap.pyx":209
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
@@ -3494,7 +3494,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
               for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
                 __pyx_v_kk = __pyx_t_26;
 
-                /* "astropy/nddata/convolution/boundary_wrap.pyx":209
+                /* "astropy/convolution/boundary_wrap.pyx":210
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):
  *                                 iii = ii % nx             # <<<<<<<<<<<<<<
@@ -3503,11 +3503,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
                 if (unlikely(__pyx_v_nx == 0)) {
                   PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 }
                 __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
 
-                /* "astropy/nddata/convolution/boundary_wrap.pyx":210
+                /* "astropy/convolution/boundary_wrap.pyx":211
  *                             for kk in range(kkmin, kkmax):
  *                                 iii = ii % nx
  *                                 jjj = jj % ny             # <<<<<<<<<<<<<<
@@ -3516,11 +3516,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
                 if (unlikely(__pyx_v_ny == 0)) {
                   PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 }
                 __pyx_v_jjj = __Pyx_mod_int(__pyx_v_jj, __pyx_v_ny);
 
-                /* "astropy/nddata/convolution/boundary_wrap.pyx":211
+                /* "astropy/convolution/boundary_wrap.pyx":212
  *                                 iii = ii % nx
  *                                 jjj = jj % ny
  *                                 kkk = kk % nz             # <<<<<<<<<<<<<<
@@ -3529,11 +3529,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
                 if (unlikely(__pyx_v_nz == 0)) {
                   PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 }
                 __pyx_v_kkk = __Pyx_mod_int(__pyx_v_kk, __pyx_v_nz);
 
-                /* "astropy/nddata/convolution/boundary_wrap.pyx":212
+                /* "astropy/convolution/boundary_wrap.pyx":213
  *                                 jjj = jj % ny
  *                                 kkk = kk % nz
  *                                 val = f[iii, jjj, kkk]             # <<<<<<<<<<<<<<
@@ -3543,9 +3543,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
                 __pyx_t_27 = __pyx_v_iii;
                 __pyx_t_28 = __pyx_v_jjj;
                 __pyx_t_29 = __pyx_v_kkk;
-                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[2].strides));
+                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[2].strides));
 
-                /* "astropy/nddata/convolution/boundary_wrap.pyx":213
+                /* "astropy/convolution/boundary_wrap.pyx":214
  *                                 kkk = kk % nz
  *                                 val = f[iii, jjj, kkk]
  *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -3555,7 +3555,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
                 __pyx_t_4 = (!npy_isnan(__pyx_v_val));
                 if (__pyx_t_4) {
 
-                  /* "astropy/nddata/convolution/boundary_wrap.pyx":216
+                  /* "astropy/convolution/boundary_wrap.pyx":217
  *                                     ker = g[<unsigned int>(wkx + ii - i),
  *                                             <unsigned int>(wky + jj - j),
  *                                             <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
@@ -3565,9 +3565,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
                   __pyx_t_30 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
                   __pyx_t_31 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
                   __pyx_t_32 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
-                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_32, __pyx_pybuffernd_g.diminfo[2].strides));
+                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_32, __pyx_pybuffernd_g.diminfo[2].strides));
 
-                  /* "astropy/nddata/convolution/boundary_wrap.pyx":217
+                  /* "astropy/convolution/boundary_wrap.pyx":218
  *                                             <unsigned int>(wky + jj - j),
  *                                             <unsigned int>(wkz + kk - k)]
  *                                     top += val * ker             # <<<<<<<<<<<<<<
@@ -3576,7 +3576,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
                   __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-                  /* "astropy/nddata/convolution/boundary_wrap.pyx":218
+                  /* "astropy/convolution/boundary_wrap.pyx":219
  *                                             <unsigned int>(wkz + kk - k)]
  *                                     top += val * ker
  *                                     bot += ker             # <<<<<<<<<<<<<<
@@ -3591,7 +3591,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
             }
           }
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":220
+          /* "astropy/convolution/boundary_wrap.pyx":221
  *                                     bot += ker
  * 
  *                     if bot != 0.:             # <<<<<<<<<<<<<<
@@ -3601,7 +3601,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
           __pyx_t_4 = (__pyx_v_bot != 0.);
           if (__pyx_t_4) {
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":221
+            /* "astropy/convolution/boundary_wrap.pyx":222
  * 
  *                     if bot != 0.:
  *                         fixed[i, j, k] = top / bot             # <<<<<<<<<<<<<<
@@ -3610,17 +3610,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
             if (unlikely(__pyx_v_bot == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "float division");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             __pyx_t_33 = __pyx_v_i;
             __pyx_t_34 = __pyx_v_j;
             __pyx_t_35 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_34, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_35, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
             goto __pyx_L18;
           }
           /*else*/ {
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":223
+            /* "astropy/convolution/boundary_wrap.pyx":224
  *                         fixed[i, j, k] = top / bot
  *                     else:
  *                         fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
@@ -3633,14 +3633,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
             __pyx_t_39 = __pyx_v_i;
             __pyx_t_40 = __pyx_v_j;
             __pyx_t_41 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_41, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_f.diminfo[0].st [...]
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_41, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_3 [...]
           }
           __pyx_L18:;
           goto __pyx_L10;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":225
+          /* "astropy/convolution/boundary_wrap.pyx":226
  *                         fixed[i, j, k] = f[i, j, k]
  *                 else:
  *                     fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
@@ -3653,14 +3653,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
           __pyx_t_45 = __pyx_v_i;
           __pyx_t_46 = __pyx_v_j;
           __pyx_t_47 = __pyx_v_k;
-          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_f.diminfo[0].stri [...]
+          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_43, [...]
         }
         __pyx_L10:;
       }
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":228
+  /* "astropy/convolution/boundary_wrap.pyx":229
  * 
  *     # Now run the proper convolution
  *     for i in range(nx):             # <<<<<<<<<<<<<<
@@ -3671,7 +3671,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
   for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
     __pyx_v_i = __pyx_t_13;
 
-    /* "astropy/nddata/convolution/boundary_wrap.pyx":229
+    /* "astropy/convolution/boundary_wrap.pyx":230
  *     # Now run the proper convolution
  *     for i in range(nx):
  *         for j in range(ny):             # <<<<<<<<<<<<<<
@@ -3682,7 +3682,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
     for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
       __pyx_v_j = __pyx_t_15;
 
-      /* "astropy/nddata/convolution/boundary_wrap.pyx":230
+      /* "astropy/convolution/boundary_wrap.pyx":231
  *     for i in range(nx):
  *         for j in range(ny):
  *             for k in range(nz):             # <<<<<<<<<<<<<<
@@ -3693,7 +3693,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
       for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
         __pyx_v_k = __pyx_t_17;
 
-        /* "astropy/nddata/convolution/boundary_wrap.pyx":231
+        /* "astropy/convolution/boundary_wrap.pyx":232
  *         for j in range(ny):
  *             for k in range(nz):
  *                 if not npy_isnan(fixed[i, j, k]):             # <<<<<<<<<<<<<<
@@ -3703,10 +3703,10 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
         __pyx_t_48 = __pyx_v_i;
         __pyx_t_49 = __pyx_v_j;
         __pyx_t_50 = __pyx_v_k;
-        __pyx_t_4 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_50, __pyx_pybuffernd_fixed.diminfo[2].strides))));
+        __pyx_t_4 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_50, __pyx_pybuffernd_fixed.diminfo[2].strides))));
         if (__pyx_t_4) {
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":232
+          /* "astropy/convolution/boundary_wrap.pyx":233
  *             for k in range(nz):
  *                 if not npy_isnan(fixed[i, j, k]):
  *                     top = 0.             # <<<<<<<<<<<<<<
@@ -3715,7 +3715,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_top = 0.;
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":233
+          /* "astropy/convolution/boundary_wrap.pyx":234
  *                 if not npy_isnan(fixed[i, j, k]):
  *                     top = 0.
  *                     bot = 0.             # <<<<<<<<<<<<<<
@@ -3724,7 +3724,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_bot = 0.;
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":234
+          /* "astropy/convolution/boundary_wrap.pyx":235
  *                     top = 0.
  *                     bot = 0.
  *                     iimin = i - wkx             # <<<<<<<<<<<<<<
@@ -3733,7 +3733,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_iimin = (__pyx_v_i - __pyx_v_wkx);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":235
+          /* "astropy/convolution/boundary_wrap.pyx":236
  *                     bot = 0.
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1             # <<<<<<<<<<<<<<
@@ -3742,7 +3742,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_iimax = ((__pyx_v_i + __pyx_v_wkx) + 1);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":236
+          /* "astropy/convolution/boundary_wrap.pyx":237
  *                     iimin = i - wkx
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky             # <<<<<<<<<<<<<<
@@ -3751,7 +3751,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_jjmin = (__pyx_v_j - __pyx_v_wky);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":237
+          /* "astropy/convolution/boundary_wrap.pyx":238
  *                     iimax = i + wkx + 1
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1             # <<<<<<<<<<<<<<
@@ -3760,7 +3760,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_jjmax = ((__pyx_v_j + __pyx_v_wky) + 1);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":238
+          /* "astropy/convolution/boundary_wrap.pyx":239
  *                     jjmin = j - wky
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz             # <<<<<<<<<<<<<<
@@ -3769,7 +3769,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_kkmin = (__pyx_v_k - __pyx_v_wkz);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":239
+          /* "astropy/convolution/boundary_wrap.pyx":240
  *                     jjmax = j + wky + 1
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1             # <<<<<<<<<<<<<<
@@ -3778,7 +3778,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
           __pyx_v_kkmax = ((__pyx_v_k + __pyx_v_wkz) + 1);
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":240
+          /* "astropy/convolution/boundary_wrap.pyx":241
  *                     kkmin = k - wkz
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):             # <<<<<<<<<<<<<<
@@ -3789,7 +3789,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
           for (__pyx_t_22 = __pyx_v_iimin; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
             __pyx_v_ii = __pyx_t_22;
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":241
+            /* "astropy/convolution/boundary_wrap.pyx":242
  *                     kkmax = k + wkz + 1
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):             # <<<<<<<<<<<<<<
@@ -3800,7 +3800,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
             for (__pyx_t_24 = __pyx_v_jjmin; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
               __pyx_v_jj = __pyx_t_24;
 
-              /* "astropy/nddata/convolution/boundary_wrap.pyx":242
+              /* "astropy/convolution/boundary_wrap.pyx":243
  *                     for ii in range(iimin, iimax):
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):             # <<<<<<<<<<<<<<
@@ -3811,7 +3811,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
               for (__pyx_t_26 = __pyx_v_kkmin; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
                 __pyx_v_kk = __pyx_t_26;
 
-                /* "astropy/nddata/convolution/boundary_wrap.pyx":243
+                /* "astropy/convolution/boundary_wrap.pyx":244
  *                         for jj in range(jjmin, jjmax):
  *                             for kk in range(kkmin, kkmax):
  *                                 iii = ii % nx             # <<<<<<<<<<<<<<
@@ -3820,11 +3820,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
                 if (unlikely(__pyx_v_nx == 0)) {
                   PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 }
                 __pyx_v_iii = __Pyx_mod_int(__pyx_v_ii, __pyx_v_nx);
 
-                /* "astropy/nddata/convolution/boundary_wrap.pyx":244
+                /* "astropy/convolution/boundary_wrap.pyx":245
  *                             for kk in range(kkmin, kkmax):
  *                                 iii = ii % nx
  *                                 jjj = jj % ny             # <<<<<<<<<<<<<<
@@ -3833,11 +3833,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
                 if (unlikely(__pyx_v_ny == 0)) {
                   PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 }
                 __pyx_v_jjj = __Pyx_mod_int(__pyx_v_jj, __pyx_v_ny);
 
-                /* "astropy/nddata/convolution/boundary_wrap.pyx":245
+                /* "astropy/convolution/boundary_wrap.pyx":246
  *                                 iii = ii % nx
  *                                 jjj = jj % ny
  *                                 kkk = kk % nz             # <<<<<<<<<<<<<<
@@ -3846,11 +3846,11 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
                 if (unlikely(__pyx_v_nz == 0)) {
                   PyErr_Format(PyExc_ZeroDivisionError, "integer division or modulo by zero");
-                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+                  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
                 }
                 __pyx_v_kkk = __Pyx_mod_int(__pyx_v_kk, __pyx_v_nz);
 
-                /* "astropy/nddata/convolution/boundary_wrap.pyx":246
+                /* "astropy/convolution/boundary_wrap.pyx":247
  *                                 jjj = jj % ny
  *                                 kkk = kk % nz
  *                                 val = fixed[iii, jjj, kkk]             # <<<<<<<<<<<<<<
@@ -3860,9 +3860,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
                 __pyx_t_51 = __pyx_v_iii;
                 __pyx_t_52 = __pyx_v_jjj;
                 __pyx_t_53 = __pyx_v_kkk;
-                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_52, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_53, __pyx_pybuffernd_fixed.diminfo[2].strides));
+                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_52, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_53, __pyx_pybuffernd_fixed.diminfo[2].strides));
 
-                /* "astropy/nddata/convolution/boundary_wrap.pyx":249
+                /* "astropy/convolution/boundary_wrap.pyx":250
  *                                 ker = g[<unsigned int>(wkx + ii - i),
  *                                         <unsigned int>(wky + jj - j),
  *                                         <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
@@ -3872,9 +3872,9 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
                 __pyx_t_54 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
                 __pyx_t_55 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
                 __pyx_t_56 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
-                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_g.diminfo[2].strides));
+                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_g.diminfo[2].strides));
 
-                /* "astropy/nddata/convolution/boundary_wrap.pyx":250
+                /* "astropy/convolution/boundary_wrap.pyx":251
  *                                         <unsigned int>(wky + jj - j),
  *                                         <unsigned int>(wkz + kk - k)]
  *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
@@ -3884,7 +3884,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
                 __pyx_t_4 = (!npy_isnan(__pyx_v_val));
                 if (__pyx_t_4) {
 
-                  /* "astropy/nddata/convolution/boundary_wrap.pyx":251
+                  /* "astropy/convolution/boundary_wrap.pyx":252
  *                                         <unsigned int>(wkz + kk - k)]
  *                                 if not npy_isnan(val):
  *                                     top += val * ker             # <<<<<<<<<<<<<<
@@ -3893,7 +3893,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
                   __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
 
-                  /* "astropy/nddata/convolution/boundary_wrap.pyx":252
+                  /* "astropy/convolution/boundary_wrap.pyx":253
  *                                 if not npy_isnan(val):
  *                                     top += val * ker
  *                                     bot += ker             # <<<<<<<<<<<<<<
@@ -3908,7 +3908,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
             }
           }
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":253
+          /* "astropy/convolution/boundary_wrap.pyx":254
  *                                     top += val * ker
  *                                     bot += ker
  *                     if bot != 0:             # <<<<<<<<<<<<<<
@@ -3918,7 +3918,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
           __pyx_t_4 = (__pyx_v_bot != 0.0);
           if (__pyx_t_4) {
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":254
+            /* "astropy/convolution/boundary_wrap.pyx":255
  *                                     bot += ker
  *                     if bot != 0:
  *                         conv[i, j, k] = top / bot             # <<<<<<<<<<<<<<
@@ -3927,17 +3927,17 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
  */
             if (unlikely(__pyx_v_bot == 0)) {
               PyErr_Format(PyExc_ZeroDivisionError, "float division");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             __pyx_t_57 = __pyx_v_i;
             __pyx_t_58 = __pyx_v_j;
             __pyx_t_59 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_59, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_59, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
             goto __pyx_L33;
           }
           /*else*/ {
 
-            /* "astropy/nddata/convolution/boundary_wrap.pyx":256
+            /* "astropy/convolution/boundary_wrap.pyx":257
  *                         conv[i, j, k] = top / bot
  *                     else:
  *                         conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
@@ -3950,14 +3950,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
             __pyx_t_63 = __pyx_v_i;
             __pyx_t_64 = __pyx_v_j;
             __pyx_t_65 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_64, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_65, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_fixed.diminfo[0 [...]
+            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_64, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_65, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx [...]
           }
           __pyx_L33:;
           goto __pyx_L25;
         }
         /*else*/ {
 
-          /* "astropy/nddata/convolution/boundary_wrap.pyx":258
+          /* "astropy/convolution/boundary_wrap.pyx":259
  *                         conv[i, j, k] = fixed[i, j, k]
  *                 else:
  *                     conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
@@ -3970,14 +3970,14 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
           __pyx_t_69 = __pyx_v_i;
           __pyx_t_70 = __pyx_v_j;
           __pyx_t_71 = __pyx_v_k;
-          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_70, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_71, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_fixed.diminfo[0]. [...]
+          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_70, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_71, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_11convolution_13boundary_wrap_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t [...]
         }
         __pyx_L25:;
       }
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":260
+  /* "astropy/convolution/boundary_wrap.pyx":261
  *                     conv[i, j, k] = fixed[i, j, k]
  * 
  *     return conv             # <<<<<<<<<<<<<<
@@ -4002,7 +4002,7 @@ static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_wrap_4convol
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_wrap.convolve3d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.convolution.boundary_wrap.convolve3d_boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -6074,8 +6074,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
@@ -6086,36 +6086,36 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":19
+  /* "astropy/convolution/boundary_wrap.pyx":20
  * 
  *     if g.shape[0] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_2);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":87
+  /* "astropy/convolution/boundary_wrap.pyx":88
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_3);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_3));
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":170
+  /* "astropy/convolution/boundary_wrap.pyx":171
  * 
  *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
  *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
  * 
  *     assert f.dtype == DTYPE and g.dtype == DTYPE
  */
-  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_4);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
 
@@ -6185,41 +6185,41 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_k_tuple_16);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_16));
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":15
+  /* "astropy/convolution/boundary_wrap.pyx":16
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_wrap(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=1] g):
  * 
  */
-  __pyx_k_tuple_17 = PyTuple_Pack(16, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot), ((PyObject *)__pyx_n_s__ker), ((PyO [...]
+  __pyx_k_tuple_17 = PyTuple_Pack(16, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot), ((PyObject *)__pyx_n_s__ker), ((PyO [...]
   __Pyx_GOTREF(__pyx_k_tuple_17);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_17));
-  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(2, 0, 16, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 15, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(2, 0, 16, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 16, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":83
+  /* "astropy/convolution/boundary_wrap.pyx":84
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_wrap(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=2] g):
  * 
  */
-  __pyx_k_tuple_22 = PyTuple_Pack(24, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__jjj), ((PyObject *)__pyx_n_s__ii), ((PyObject * [...]
+  __pyx_k_tuple_22 = PyTuple_Pack(24, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__iii), ((PyObject *)__pyx_n_s__jjj), ((PyObject *)__pyx_n_s__ii), ((PyObject * [...]
   __Pyx_GOTREF(__pyx_k_tuple_22);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_22));
-  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(2, 0, 24, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 83, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(2, 0, 24, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 84, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":166
+  /* "astropy/convolution/boundary_wrap.pyx":167
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_wrap(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=3] g):
  * 
  */
-  __pyx_k_tuple_25 = PyTuple_Pack(32, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject * [...]
+  __pyx_k_tuple_25 = PyTuple_Pack(32, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject * [...]
   __Pyx_GOTREF(__pyx_k_tuple_25);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
-  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(2, 0, 32, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 166, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(2, 0, 32, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 167, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -6285,8 +6285,8 @@ PyMODINIT_FUNC PyInit_boundary_wrap(void)
   #if PY_MAJOR_VERSION >= 3
   {
     PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (!PyDict_GetItemString(modules, "astropy.nddata.convolution.boundary_wrap")) {
-      if (unlikely(PyDict_SetItemString(modules, "astropy.nddata.convolution.boundary_wrap", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!PyDict_GetItemString(modules, "astropy.convolution.boundary_wrap")) {
+      if (unlikely(PyDict_SetItemString(modules, "astropy.convolution.boundary_wrap", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
@@ -6297,7 +6297,7 @@ PyMODINIT_FUNC PyInit_boundary_wrap(void)
   if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   /*--- Initialize various global constants etc. ---*/
   if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_module_is_main_astropy__nddata__convolution__boundary_wrap) {
+  if (__pyx_module_is_main_astropy__convolution__boundary_wrap) {
     if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   }
   /*--- Builtin init code ---*/
@@ -6325,72 +6325,73 @@ PyMODINIT_FUNC PyInit_boundary_wrap(void)
   /*--- Function import code ---*/
   /*--- Execution code ---*/
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":2
+  /* "astropy/convolution/boundary_wrap.pyx":3
+ * # Licensed under a 3-clause BSD style license - see LICENSE.rst
  * from __future__ import division
  * import numpy as np             # <<<<<<<<<<<<<<
  * cimport numpy as np
  * 
  */
-  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":5
+  /* "astropy/convolution/boundary_wrap.pyx":6
  * cimport numpy as np
  * 
  * DTYPE = np.float             # <<<<<<<<<<<<<<
  * ctypedef np.float_t DTYPE_t
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":15
+  /* "astropy/convolution/boundary_wrap.pyx":16
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve1d_boundary_wrap(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=1] g):
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_wrap_1convolve1d_boundary_wrap, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_wrap_1convolve1d_boundary_wrap, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":83
+  /* "astropy/convolution/boundary_wrap.pyx":84
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve2d_boundary_wrap(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=2] g):
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_wrap_3convolve2d_boundary_wrap, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_wrap_3convolve2d_boundary_wrap, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":166
+  /* "astropy/convolution/boundary_wrap.pyx":167
  * 
  * @cython.boundscheck(False)  # turn off bounds-checking for entire function
  * def convolve3d_boundary_wrap(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
  *                              np.ndarray[DTYPE_t, ndim=3] g):
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_wrap_5convolve3d_boundary_wrap, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_11convolution_13boundary_wrap_5convolve3d_boundary_wrap, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_wrap.pyx":1
- * from __future__ import division             # <<<<<<<<<<<<<<
+  /* "astropy/convolution/boundary_wrap.pyx":1
+ * # Licensed under a 3-clause BSD style license - see LICENSE.rst             # <<<<<<<<<<<<<<
+ * from __future__ import division
  * import numpy as np
- * cimport numpy as np
  */
   __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
@@ -6409,10 +6410,10 @@ PyMODINIT_FUNC PyInit_boundary_wrap(void)
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   if (__pyx_m) {
-    __Pyx_AddTraceback("init astropy.nddata.convolution.boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    __Pyx_AddTraceback("init astropy.convolution.boundary_wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
     Py_DECREF(__pyx_m); __pyx_m = 0;
   } else if (!PyErr_Occurred()) {
-    PyErr_SetString(PyExc_ImportError, "init astropy.nddata.convolution.boundary_wrap");
+    PyErr_SetString(PyExc_ImportError, "init astropy.convolution.boundary_wrap");
   }
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
diff --git a/astropy/nddata/convolution/boundary_wrap.pyx b/astropy/convolution/boundary_wrap.pyx
similarity index 99%
rename from astropy/nddata/convolution/boundary_wrap.pyx
rename to astropy/convolution/boundary_wrap.pyx
index 6afa20e..6ff5793 100644
--- a/astropy/nddata/convolution/boundary_wrap.pyx
+++ b/astropy/convolution/boundary_wrap.pyx
@@ -1,3 +1,4 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
 from __future__ import division
 import numpy as np
 cimport numpy as np
diff --git a/astropy/nddata/convolution/convolve.py b/astropy/convolution/convolve.py
similarity index 89%
rename from astropy/nddata/convolution/convolve.py
rename to astropy/convolution/convolve.py
index 4ea7816..d77071c 100644
--- a/astropy/nddata/convolution/convolve.py
+++ b/astropy/convolution/convolve.py
@@ -1,11 +1,19 @@
-# Licensed under a 3-clause BSD style license - see PYFITS.rst
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
 
 import warnings
 
 import numpy as np
-from ...config import ConfigurationItem
 
-def convolve(array, kernel, boundary=None, fill_value=0.,
+from .core import Kernel, Kernel1D, Kernel2D
+from ..utils.exceptions import AstropyUserWarning
+
+
+# Disabling all doctests in this module until a better way of handling warnings
+# in doctests can be determined
+__doctest_skip__ = ['*']
+
+
+def convolve(array, kernel, boundary='fill', fill_value=0.,
              normalize_kernel=False):
     '''
     Convolve an array with a kernel.
@@ -22,7 +30,7 @@ def convolve(array, kernel, boundary=None, fill_value=0.,
         The array to convolve. This should be a 1, 2, or 3-dimensional array
         or a list or a set of nested lists representing a 1, 2, or
         3-dimensional array.
-    kernel : `numpy.ndarray`
+    kernel : `numpy.ndarray` or nddata.convolution.Kernel
         The convolution kernel. The number of dimensions should match those
         for the array, and the dimensions should be odd in all directions.
     boundary : str, optional
@@ -83,6 +91,27 @@ def convolve(array, kernel, boundary=None, fill_value=0.,
     # It is always necessary to make a copy of kernel (since it is modified),
     # but, if we just so happen to be lucky enough to have the input array
     # have exactly the desired type, we just alias to array_internal
+
+    # Check if kernel is kernel instance
+    if isinstance(kernel, Kernel):
+        # Check if array is also kernel instance, if so convolve and
+        # return new kernel instance
+        if isinstance(array, Kernel):
+            if isinstance(array, Kernel1D) and isinstance(kernel, Kernel1D):
+                new_array = convolve1d_boundary_fill(array.array, kernel.array, 0)
+                new_kernel = Kernel1D(array=new_array)
+            elif isinstance(array, Kernel2D) and isinstance(kernel, Kernel2D):
+                new_array = convolve2d_boundary_fill(array.array, kernel.array, 0)
+                new_kernel = Kernel2D(array=new_array)
+            else:
+                raise Exception("Can't convolve 1D and 2D kernel.")
+            new_kernel._separable = kernel._separable and array._separable
+            new_kernel._is_bool = False
+            return new_kernel
+        kernel = kernel.array
+
+    # Check that the arguments are lists or Numpy arrays
+
     if isinstance(array, list):
         array_internal = np.array(array, dtype=np.float)
         array_dtype = array_internal.dtype
@@ -98,6 +127,7 @@ def convolve(array, kernel, boundary=None, fill_value=0.,
             array_internal = array.astype(float)
     else:
         raise TypeError("array should be a list or a Numpy array")
+
     if isinstance(kernel, list):
         kernel_internal = np.array(kernel, dtype=float)
     elif isinstance(kernel, np.ndarray):
@@ -108,8 +138,8 @@ def convolve(array, kernel, boundary=None, fill_value=0.,
 
     # Check that the number of dimensions is compatible
     if array_internal.ndim != kernel_internal.ndim:
-        raise Exception('array and kernel have differing number of'
-                        'dimensions')
+        raise Exception('array and kernel have differing number of '
+                        'dimensions.')
 
     # Because the Cython routines have to normalize the kernel on the fly, we
     # explicitly normalize the kernel here, and then scale the image at the
@@ -133,7 +163,7 @@ def convolve(array, kernel, boundary=None, fill_value=0.,
         else:
             result = convolve1d_boundary_none(array_internal,
                                               kernel_internal)
-    elif array.ndim == 2:
+    elif array_internal.ndim == 2:
         if boundary == 'extend':
             result = convolve2d_boundary_extend(array_internal,
                                                 kernel_internal)
@@ -147,7 +177,7 @@ def convolve(array, kernel, boundary=None, fill_value=0.,
         else:
             result = convolve2d_boundary_none(array_internal,
                                               kernel_internal)
-    elif array.ndim == 3:
+    elif array_internal.ndim == 3:
         if boundary == 'extend':
             result = convolve3d_boundary_extend(array_internal,
                                                 kernel_internal)
@@ -171,7 +201,7 @@ def convolve(array, kernel, boundary=None, fill_value=0.,
         result *= kernel_sum
 
     # Try to preserve the input type if it's a floating point type
-    if array.dtype.kind == 'f':
+    if array_dtype.kind == 'f':
         # Avoid making another copy if possible
         try:
             return result.astype(array_dtype, copy=False)
@@ -180,6 +210,7 @@ def convolve(array, kernel, boundary=None, fill_value=0.,
     else:
         return result
 
+
 def convolve_fft(array, kernel, boundary='fill', fill_value=0, crop=True,
                  return_fft=False, fft_pad=True, psf_pad=False,
                  interpolate_nan=False, quiet=False, ignore_edge_zeros=False,
@@ -294,6 +325,7 @@ def convolve_fft(array, kernel, boundary='fill', fill_value=0, crop=True,
     array([ 1.,  2.,  3.])
 
     >>> convolve_fft([1, np.nan, 3], [0, 1, 0], interpolate_nan=True)
+    ...
     array([ 1.,  0.,  3.])
 
     >>> convolve_fft([1, np.nan, 3], [0, 1, 0], interpolate_nan=True,
@@ -318,18 +350,11 @@ def convolve_fft(array, kernel, boundary='fill', fill_value=0, crop=True,
     # Checking copied from convolve.py - however, since FFTs have real &
     # complex components, we change the types.  Only the real part will be
     # returned! Note that this always makes a copy.
-    array = np.asarray(array, dtype=np.complex)
-    kernel = np.asarray(kernel, dtype=np.complex)
-
-    # Check that the number of dimensions is compatible
-    if array.ndim != kernel.ndim:
-        raise Exception('array and kernel have differing number of dimensions')
-
-    # turn the arrays into 'complex' arrays
-    if array.dtype.kind != 'c':
-        array = array.astype(np.complex)
-    if kernel.dtype.kind != 'c':
-        kernel = kernel.astype(np.complex)
+    # Check kernel is kernel instance
+    if isinstance(kernel, Kernel):
+        kernel = kernel.array
+        if isinstance(array, Kernel):
+            raise Exception("Can't convolve two kernels. Use convolve() instead.")
 
     # mask catching - masks must be turned into NaNs for use later
     if np.ma.is_masked(array):
@@ -341,6 +366,14 @@ def convolve_fft(array, kernel, boundary='fill', fill_value=0, crop=True,
         kernel = np.array(kernel)
         kernel[mask] = np.nan
 
+    # Convert array dtype to complex
+    array = np.asarray(array, dtype=np.complex)
+    kernel = np.asarray(kernel, dtype=np.complex)
+
+    # Check that the number of dimensions is compatible
+    if array.ndim != kernel.ndim:
+        raise Exception('array and kernel have differing number of dimensions')
+
     # NAN and inf catching
     nanmaskarray = np.isnan(array) + np.isinf(array)
     array[nanmaskarray] = 0
@@ -349,7 +382,7 @@ def convolve_fft(array, kernel, boundary='fill', fill_value=0, crop=True,
     if ((nanmaskarray.sum() > 0 or nanmaskkernel.sum() > 0) and
             not interpolate_nan and not quiet):
         warnings.warn("NOT ignoring nan values even though they are present "
-                      " (they are treated as 0)")
+                      " (they are treated as 0)", AstropyUserWarning)
 
     if normalize_kernel is True:
         kernel = kernel / kernel.sum()
@@ -367,13 +400,13 @@ def convolve_fft(array, kernel, boundary='fill', fill_value=0, crop=True,
             if (interpolate_nan or ignore_edge_zeros):
                 warnings.warn("Kernel is not normalized, therefore "
                               "ignore_edge_zeros and interpolate_nan will be "
-                              "ignored.")
+                              "ignored.", AstropyUserWarning)
 
     if boundary is None:
         warnings.warn("The convolve_fft version of boundary=None is "
                       "equivalent to the convolve boundary='fill'.  There is "
                       "no FFT equivalent to convolve's "
-                      "zero-if-kernel-leaves-boundary")
+                      "zero-if-kernel-leaves-boundary", AstropyUserWarning)
         psf_pad = True
     elif boundary == 'fill':
         # create a boundary region at least as large as the kernel
@@ -409,7 +442,7 @@ def convolve_fft(array, kernel, boundary='fill', fill_value=0, crop=True,
             newshape = np.array(arrayshape) + np.array(kernshape)
         else:
             newshape = np.array([np.max([imsh, kernsh])
-                for imsh, kernsh in zip(arrayshape, kernshape)])
+                                 for imsh, kernsh in zip(arrayshape, kernshape)])
 
     # separate each dimension by the padding size...  this is to determine the
     # appropriate slice size to get back to the input dimensions
@@ -418,9 +451,9 @@ def convolve_fft(array, kernel, boundary='fill', fill_value=0, crop=True,
     for ii, (newdimsize, arraydimsize, kerndimsize) in enumerate(zip(newshape, arrayshape, kernshape)):
         center = newdimsize - (newdimsize + 1) // 2
         arrayslices += [slice(center - arraydimsize // 2,
-            center + (arraydimsize + 1) // 2)]
+                              center + (arraydimsize + 1) // 2)]
         kernslices += [slice(center - kerndimsize // 2,
-            center + (kerndimsize + 1) // 2)]
+                             center + (kerndimsize + 1) // 2)]
 
     bigarray = np.ones(newshape, dtype=complex_dtype) * fill_value
     bigkernel = np.zeros(newshape, dtype=complex_dtype)
diff --git a/astropy/convolution/core.py b/astropy/convolution/core.py
new file mode 100644
index 0000000..2152b38
--- /dev/null
+++ b/astropy/convolution/core.py
@@ -0,0 +1,353 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+This module contains the convolution and filter functionalities of astropy.
+
+A few conceptual notes:
+A filter kernel is mainly characterized by its response function. In the 1D
+case we speak of "impulse response function", in the 2D case we call it
+"point spread function". This response function is given for every kernel
+by an astropy ParametricModel, which is evaluated on a grid to obtain a filter
+array, which can then be applied to binned data.
+
+The model is centered on the array and should have an amplitude such that the array
+integrates to one per default.
+
+Currently only symmetric 2D kernels are supported.
+"""
+from __future__ import division
+import warnings
+import copy
+
+import numpy as np
+from ..utils.exceptions import AstropyUserWarning
+from .utils import (discretize_model, add_kernel_arrays_1D,
+                    add_kernel_arrays_2D)
+
+MAX_NORMALIZATION = 100
+
+
+class Kernel(object):
+    """
+    Convolution kernel base class.
+
+    Parameters
+    ----------
+    array : ndarray
+        Kernel array.
+    """
+    _separable = False
+    _is_bool = True
+    _model = None
+
+    def __init__(self, array):
+        self._array = array
+        self._normalization = 1. / self._array.sum()
+
+    @property
+    def truncation(self):
+        """
+        Deviation from the normalization to one.
+        """
+        return self._truncation
+
+    @property
+    def is_bool(self):
+        """
+        Indicates if kernel is bool.
+
+        If the kernel is bool the multiplication in the convolution could
+        be omitted, to increase the performance.
+        """
+        return self._is_bool
+
+    @property
+    def model(self):
+        """
+        Kernel response model.
+        """
+        return self._model
+
+    @property
+    def dimension(self):
+        """
+        Kernel dimension.
+        """
+        return self.array.ndim
+
+    @property
+    def center(self):
+        """
+        Index of the kernel center.
+        """
+        return [axes_size // 2 for axes_size in self._array.shape]
+
+    @property
+    def normalization(self):
+        """
+        Kernel normalization factor
+        """
+        return self._normalization
+
+    def normalize(self, mode='integral'):
+        """
+        Force normalization of filter kernel.
+
+        Parameters
+        ----------
+        mode : str
+            One of the following modes:
+                * 'integral' (default)
+                    Kernel normalized such that its integral = 1.
+                * 'peak'
+                    Kernel normalized such that its peak = 1.
+        """
+        # There are kernel that sum to zero and
+        # the user should be warned in this case
+        if np.abs(self._normalization) > MAX_NORMALIZATION:
+            warnings.warn("Normalization factor of kernel is "
+                          "exceptionally large > {0}.".format(MAX_NORMALIZATION),
+                          AstropyUserWarning)
+        if mode == 'integral':
+            self._array *= self._normalization
+        if mode == 'peak':
+            self._array /= self._array.max()
+            self._normalization = 1. / self._array.sum()
+
+    @property
+    def shape(self):
+        """
+        Shape of the kernel array.
+        """
+        return self._array.shape
+
+    @property
+    def separable(self):
+        """
+        Indicates if the filter kernel is separable.
+
+        A 2D filter is separable, when its filter array can be written as the
+        outer product of two 1D arrays.
+
+        If a filter kernel is separable, higher dimension convolutions will be
+        performed by applying the 1D filter array consecutively on every dimension.
+        This is significantly faster, than using a filter array with the same
+        dimension.
+        """
+        return self._separable
+
+    @property
+    def array(self):
+        """
+        Filter kernel array.
+        """
+        return self._array
+
+    def __add__(self, kernel):
+        """
+        Add two filter kernels.
+        """
+        return kernel_arithmetics(self, kernel, 'add')
+
+    def __sub__(self,  kernel):
+        """
+        Subtract two filter kernels.
+        """
+        return kernel_arithmetics(self, kernel, 'sub')
+
+    def __mul__(self, value):
+        """
+        Multiply kernel with number or convolve two kernels.
+        """
+        return kernel_arithmetics(self, value, "mul")
+
+    def __rmul__(self, value):
+        """
+        Multiply kernel with number or convolve two kernels.
+        """
+        return kernel_arithmetics(self, value, "mul")
+
+    def __array__(self):
+        """
+        Array representation of the kernel.
+        """
+        return self._array
+
+
+class Kernel1D(Kernel):
+    """
+    Base class for 1D filter kernels.
+
+    Parameters
+    ----------
+    width : number
+        Width of the filter kernel.
+    x_size : odd int, optional
+        Size of the kernel array. Default = 8 * width.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by linearly interpolating
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+    """
+    def __init__(self, model=None, x_size=None, array=None, **kwargs):
+        # Initialize from model
+        if array is None:
+
+            if x_size is None:
+                x_size = self._default_size
+            elif x_size != int(x_size):
+                raise TypeError("x_size should be an integer")
+
+            # Set ranges where to evaluate the model
+
+            if x_size % 2 == 0:  # even kernel
+                x_range = (-(int(x_size)) // 2 + 0.5, (int(x_size)) // 2 + 0.5)
+            else:  # odd kernel
+                x_range = (-(int(x_size) - 1) // 2, (int(x_size) - 1) // 2 + 1)
+
+            array = discretize_model(self._model, x_range, **kwargs)
+
+        # Initialize from array
+        elif array is not None:
+            self._model = None
+        else:
+            raise TypeError("Must specify either array or model.")
+        super(Kernel1D, self).__init__(array)
+
+
+class Kernel2D(Kernel):
+    """
+    Base class for 2D filter kernels.
+
+    Parameters
+    ----------
+    width : number
+        Width of the filter kernel.
+    x_size : odd int, optional
+        Size in x direction of the kernel array. Default = 8 * width.
+    y_size : odd int, optional
+        Size in y direction of the kernel array. Default = 8 * width.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by performing a bilinear interpolation
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+    """
+    def __init__(self, model=None, x_size=None, y_size=None, array=None, **kwargs):
+
+        # Initialize from model
+        if array is None:
+
+            if x_size is None:
+                x_size = self._default_size
+            elif x_size != int(x_size):
+                raise TypeError("x_size should be an integer")
+
+            if y_size is None:
+                y_size = x_size
+            elif x_size != int(x_size):
+                raise TypeError("y_size should be an integer")
+
+            # Set ranges where to evaluate the model
+
+            if x_size % 2 == 0:  # even kernel
+                x_range = (-(int(x_size)) // 2 + 0.5, (int(x_size)) // 2 + 0.5)
+            else:  # odd kernel
+                x_range = (-(int(x_size) - 1) // 2, (int(x_size) - 1) // 2 + 1)
+
+            if y_size % 2 == 0:  # even kernel
+                y_range = (-(int(y_size)) // 2 + 0.5, (int(y_size)) // 2 + 0.5)
+            else:  # odd kernel
+                y_range = (-(int(y_size) - 1) // 2, (int(y_size) - 1) // 2 + 1)
+
+            array = discretize_model(self._model, x_range, y_range, **kwargs)
+
+        # Initialize from array
+        elif array is not None:
+            self._model = None
+        else:
+            raise TypeError("Must specify either array or model.")
+
+        super(Kernel2D, self).__init__(array)
+
+
+def kernel_arithmetics(kernel, value, operation):
+    """
+    Add, subtract or multiply two kernels.
+
+    Parameters
+    ----------
+    kernel : astropy.convolution.kernel
+        Kernel instance
+    values : kernel, float or int
+        Value to operate with
+    operation : str
+        One of the following operations:
+            * 'add'
+                Add two kernels
+            * 'sub'
+                Subtract two kernels
+            * 'mul'
+                Multiply kernel with number or convolve two kernels.
+    """
+    # 1D kernels
+    if isinstance(kernel, Kernel1D) and isinstance(value, Kernel1D):
+        if operation == "add":
+            new_array = add_kernel_arrays_1D(kernel.array, value.array)
+        if operation == "sub":
+            new_array = add_kernel_arrays_1D(kernel.array, -value.array)
+        if operation == "mul":
+            raise Exception("Kernel operation not supported. Maybe you want to"
+                             "use convolve(kernel1, kernel2) instead.")
+        new_kernel = Kernel1D(array=new_array)
+        new_kernel._separable = kernel._separable and value._separable
+        new_kernel._is_bool = kernel._is_bool or value._is_bool
+
+    # 2D kernels
+    elif isinstance(kernel, Kernel2D) and isinstance(value, Kernel2D):
+        if operation == "add":
+            new_array = add_kernel_arrays_2D(kernel.array, value.array)
+        if operation == "sub":
+            new_array = add_kernel_arrays_2D(kernel.array, -value.array)
+        if operation == "mul":
+            raise Exception("Kernel operation not supported. Maybe you want to"
+                            "use convolve(kernel1, kernel2) instead.")
+        new_kernel = Kernel2D(array=new_array)
+        new_kernel._separable = kernel._separable and value._separable
+        new_kernel._is_bool = kernel._is_bool or value._is_bool
+
+    # kernel and number
+    elif ((isinstance(kernel, Kernel1D) or isinstance(kernel, Kernel2D))
+        and isinstance(value, (int, float))):
+        if operation == "mul":
+            new_kernel = copy.copy(kernel)
+            new_kernel._array *= value
+            new_kernel._normalization /= value
+        else:
+            raise Exception("Kernel operation not supported.")
+    else:
+        raise Exception("Operations between 1D and 2D kernels are not supported.")
+    return new_kernel
diff --git a/astropy/convolution/kernels.py b/astropy/convolution/kernels.py
new file mode 100644
index 0000000..0c826fd
--- /dev/null
+++ b/astropy/convolution/kernels.py
@@ -0,0 +1,936 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import division
+
+import numpy as np
+
+from .core import Kernel1D, Kernel2D, Kernel
+from .utils import KernelSizeError
+from ..modeling import models
+from ..modeling.core import Parametric1DModel, Parametric2DModel
+
+__all__ = sorted(['Gaussian1DKernel', 'Gaussian2DKernel', 'CustomKernel',
+                  'Box1DKernel', 'Box2DKernel', 'Tophat2DKernel',
+                  'Trapezoid1DKernel', 'MexicanHat1DKernel',
+                  'MexicanHat2DKernel', 'AiryDisk2DKernel',
+                  'Model1DKernel', 'Model2DKernel',
+                  'TrapezoidDisk2DKernel', 'Ring2DKernel'])
+
+
+def _round_up_to_odd_integer(value):
+    i = int(np.ceil(value))
+    if i % 2 == 0:
+        return i + 1
+    else:
+        return i
+
+
+class Gaussian1DKernel(Kernel1D):
+    """
+    1D Gaussian filter kernel.
+
+    The Gaussian filter is a filter with great smoothing properties. It is
+    isotropic and does not produce artifacts.
+
+    Parameters
+    ----------
+    width : number
+        Width of the filter kernel.
+    x_size : odd int, optional
+        Size of the kernel array. Default = 8 * width.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by linearly interpolating
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin. Very slow.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10. If the factor
+        is too large, evaluation can be very slow.
+
+
+    See Also
+    --------
+    Box1DKernel, Trapezoid1DKernel, MexicanHat1DKernel
+
+
+    Examples
+    --------
+    Kernel response:
+
+     .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        from astropy.convolution import Gaussian1DKernel
+        gauss_1D_kernel = Gaussian1DKernel(10)
+        plt.plot(gauss_1D_kernel, drawstyle='steps')
+        plt.xlabel('x [pixels]')
+        plt.ylabel('value')
+        plt.show()
+    """
+    _separable = True
+    _is_bool = False
+
+    def __init__(self, width, **kwargs):
+        self._model = models.Gaussian1D(1. / (np.sqrt(2 * np.pi) * width), 0, width)
+        self._default_size = _round_up_to_odd_integer(8 * width)
+        super(Gaussian1DKernel, self).__init__(**kwargs)
+        self._truncation = np.abs(1. - 1 / self._normalization)
+
+
+class Gaussian2DKernel(Kernel2D):
+    """
+    2D Gaussian filter kernel.
+
+    The Gaussian filter is a filter with great smoothing properties. It is
+    isotropic and does not produce artifacts.
+
+    Parameters
+    ----------
+    width : number
+        Width of the filter kernel.
+    x_size : odd int, optional
+        Size in x direction of the kernel array. Default = 8 * width.
+    y_size : odd int, optional
+        Size in y direction of the kernel array. Default = 8 * width.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by performing a bilinear interpolation
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+
+    See Also
+    --------
+    Box2DKernel, Tophat2DKernel, MexicanHat2DKernel, Ring2DKernel,
+    TrapezoidDisk2DKernel, AiryDisk2DKernel
+
+    Examples
+    --------
+    Kernel response:
+
+     .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        from astropy.convolution import Gaussian2DKernel
+        gaussian_2D_kernel = Gaussian2DKernel(10)
+        plt.imshow(gaussian_2D_kernel, interpolation='none', origin='lower')
+        plt.xlabel('x [pixels]')
+        plt.ylabel('y [pixels]')
+        plt.colorbar()
+        plt.show()
+
+    """
+    _separable = True
+    _is_bool = False
+
+    def __init__(self, width, **kwargs):
+        self._model = models.Gaussian2D(1. / (2 * np.pi * width ** 2), 0, 0, width, width)
+        self._default_size = _round_up_to_odd_integer(8 * width)
+        super(Gaussian2DKernel, self).__init__(**kwargs)
+        self._truncation = np.abs(1. - 1 / self._normalization)
+
+
+class Box1DKernel(Kernel1D):
+    """
+    1D Box filter kernel.
+
+    The Box filter or running mean is a smoothing filter. It is not isotropic
+    and can produce artifacts, when applied repeatedly to the same data.
+
+    By default the Box kernel uses the `linear_interp` discretization mode,
+    which allows non shifting, even sized kernels.  This is achieved by
+    weighting the edge pixels with 1/2. E.g a Box kernel with an effective
+    smoothing of 4 pixel would have the following array: [0.5, 1, 1, 1, 0.5].
+
+
+    Parameters
+    ----------
+    width : number
+        Width of the filter kernel.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center'
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp' (default)
+                Discretize model by linearly interpolating
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+    See Also
+    --------
+    Gaussian1DKernel, Trapezoid1DKernel, MexicanHat1DKernel
+
+
+    Examples
+    --------
+    Kernel response function:
+
+     .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        from astropy.convolution import Box1DKernel
+        box_1D_kernel = Box1DKernel(9)
+        plt.plot(box_1D_kernel, drawstyle='steps')
+        plt.xlim(-1, 9)
+        plt.xlabel('x [pixels]')
+        plt.ylabel('value')
+        plt.show()
+
+    """
+    _separable = True
+    _is_bool = True
+
+    def __init__(self, width, **kwargs):
+        self._model = models.Box1D(1. / width, 0, width)
+        self._default_size = _round_up_to_odd_integer(width)
+        kwargs['mode'] = 'linear_interp'
+        super(Box1DKernel, self).__init__(**kwargs)
+        self._truncation = 0
+        self.normalize()
+
+
+class Box2DKernel(Kernel2D):
+    """
+    2D Box filter kernel.
+
+    The Box filter or running mean is a smoothing filter. It is not isotropic
+    and can produce artifact, when applied repeatedly to the same data.
+
+    By default the Box kernel uses the `linear_interp` discretization mode,
+    which allows non shifting, even sized kernels.  This is achieved by
+    weighting the edge pixels with 1/2.
+
+
+    Parameters
+    ----------
+    width : number
+        Width of the filter kernel.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' 
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp' (default)
+                Discretize model by performing a bilinear interpolation
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+
+    See Also
+    --------
+    Box2DKernel, Tophat2DKernel, MexicanHat2DKernel, Ring2DKernel,
+    TrapezoidDisk2DKernel, AiryDisk2DKernel
+
+    Examples
+    --------
+    Kernel response:
+
+     .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        from astropy.convolution import Box2DKernel
+        box_2D_kernel = Box2DKernel(9)
+        plt.imshow(box_2D_kernel, interpolation='none', origin='lower',
+                   vmin=0.0, vmax=0.015)
+        plt.xlim(-1, 9)
+        plt.ylim(-1, 9)
+        plt.xlabel('x [pixels]')
+        plt.ylabel('y [pixels]')
+        plt.colorbar()
+        plt.show()
+    """
+    _separable = True
+    _is_bool = True
+
+    def __init__(self, width, **kwargs):
+        self._model = models.Box2D(1. / width ** 2, 0, 0, width, width)
+        self._default_size = _round_up_to_odd_integer(width)
+        kwargs['mode'] = 'linear_interp'
+        super(Box2DKernel, self).__init__(**kwargs)
+        self._truncation = 0
+        self.normalize()
+
+
+class Tophat2DKernel(Kernel2D):
+    """
+    2D Tophat filter kernel.
+
+    The Tophat filter is an isotropic smoothing filter. It can produce artifact,
+    when applied repeatedly on the same data.
+
+    Parameters
+    ----------
+    radius : int
+        Radius of the filter kernel.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by performing a bilinear interpolation
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+
+    See Also
+    --------
+    Box2DKernel, Tophat2DKernel, MexicanHat2DKernel, Ring2DKernel,
+    TrapezoidDisk2DKernel, AiryDisk2DKernel
+
+    Examples
+    --------
+    Kernel response:
+
+     .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        from astropy.convolution import Tophat2DKernel
+        tophat_2D_kernel = Tophat2DKernel(40)
+        plt.imshow(tophat_2D_kernel, interpolation='none', origin='lower')
+        plt.xlabel('x [pixels]')
+        plt.ylabel('y [pixels]')
+        plt.colorbar()
+        plt.show()
+
+    """
+    def __init__(self, radius, **kwargs):
+        self._model = models.Disk2D(1. / (np.pi * radius ** 2), 0, 0, radius)
+        self._default_size = _round_up_to_odd_integer(2 * radius)
+        super(Tophat2DKernel, self).__init__(**kwargs)
+        self._truncation = 0
+
+
+class Ring2DKernel(Kernel2D):
+    """
+    2D Ring filter kernel.
+
+    The Ring filter kernel is the difference between two Tophat kernels of
+    different width. This kernel is useful for, e.g., background estimation.
+
+    Parameters
+    ----------
+    radius_in : number
+        Inner radius of the ring kernel.
+    width : number
+        Width of the ring kernel.
+    mode: str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by performing a bilinear interpolation
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+    See Also
+    --------
+    Box2DKernel, Gaussian2DKernel, MexicanHat2DKernel, Tophat2DKernel
+
+    Examples
+    --------
+    Kernel response:
+
+     .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        from astropy.convolution import Ring2DKernel
+        ring_2D_kernel = Ring2DKernel(9, 8)
+        plt.imshow(ring_2D_kernel, interpolation='none', origin='lower')
+        plt.xlabel('x [pixels]')
+        plt.ylabel('y [pixels]')
+        plt.colorbar()
+        plt.show()
+    """
+    def __init__(self, radius_in, width, **kwargs):
+        radius_out = radius_in + width
+        self._model = models.Ring2D(1. / (np.pi * (radius_out ** 2 - radius_in ** 2)),
+                                        0, 0, radius_in, width)
+        self._default_size = _round_up_to_odd_integer(2 * radius_out)
+        super(Ring2DKernel, self).__init__(**kwargs)
+        self._truncation = 0
+
+
+class Trapezoid1DKernel(Kernel1D):
+    """
+    1D trapezoid kernel.
+
+    Parameters
+    ----------
+    width : number
+        Width of the filter kernel.
+    slope : number
+        Slope of the filter kernel's tails
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by linearly interpolating
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+    See Also
+    --------
+    Box1DKernel, Gaussian1DKernel, MexicanHat1DKernel
+
+    Examples
+    --------
+    Kernel response:
+
+     .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        from astropy.convolution import Trapezoid1DKernel
+        trapezoid_1D_kernel = Trapezoid1DKernel(17, slope=0.2)
+        plt.plot(trapezoid_1D_kernel, drawstyle='steps')
+        plt.xlabel('x [pixels]')
+        plt.ylabel('amplitude')
+        plt.xlim(-1, 28)
+        plt.show()
+    """
+    _is_bool = False
+
+    def __init__(self, width, slope=1., **kwargs):
+        self._model = models.Trapezoid1D(1, 0, width, slope)
+        self._default_size = _round_up_to_odd_integer(width + 2. / slope)
+        super(Trapezoid1DKernel, self).__init__(**kwargs)
+        self._truncation = 0
+        self.normalize()
+
+
+class TrapezoidDisk2DKernel(Kernel2D):
+    """
+    2D trapezoid kernel.
+
+    Parameters
+    ----------
+    width : number
+        Width of the filter kernel.
+    slope : number
+        Slope of the filter kernel's tails
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by performing a bilinear interpolation
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+    See Also
+    --------
+    Box2DKernel, Tophat2DKernel, MexicanHat2DKernel, Ring2DKernel,
+    TrapezoidDisk2DKernel, AiryDisk2DKernel
+
+    Examples
+    --------
+    Kernel response:
+
+     .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        from astropy.convolution import TrapezoidDisk2DKernel
+        trapezoid_2D_kernel = TrapezoidDisk2DKernel(20, slope=0.2)
+        plt.imshow(trapezoid_2D_kernel, interpolation='none', origin='lower')
+        plt.xlabel('x [pixels]')
+        plt.ylabel('y [pixels]')
+        plt.colorbar()
+        plt.show()
+
+    """
+    _is_bool = False
+
+    def __init__(self, radius, slope=1., **kwargs):
+        self._model = models.TrapezoidDisk2D(1, 0, 0, radius, slope)
+        self._default_size = _round_up_to_odd_integer(2 * radius + 2. / slope)
+        super(TrapezoidDisk2DKernel, self).__init__(**kwargs)
+        self._truncation = 0
+        self.normalize()
+
+
+class MexicanHat1DKernel(Kernel1D):
+    """
+    1D Mexican hat filter kernel.
+
+    The Mexican Hat, or inverted Gaussian-Laplace filter, is a
+    bandpass filter. It smoothes the data and removes slowly varying
+    or constant structures (e.g. Background). It is useful for peak or
+    multi-scale detection.  This kernel is derived from a normalized
+    Gaussian.
+
+    Parameters
+    ----------
+    width : number
+        Width of the filter kernel.
+    x_size : odd int, optional
+        Size in x direction of the kernel array. Default = 8 * width.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by linearly interpolating
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+
+    See Also
+    --------
+    Box1DKernel, Gaussian1DKernel, Trapezoid1DKernel
+
+    Examples
+    --------
+    Kernel response:
+
+     .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        from astropy.convolution import MexicanHat1DKernel
+        mexicanhat_1D_kernel = MexicanHat1DKernel(10)
+        plt.plot(mexicanhat_1D_kernel, drawstyle='steps')
+        plt.xlabel('x [pixels]')
+        plt.ylabel('value')
+        plt.show()
+
+    """
+    _is_bool = True
+
+    def __init__(self, width, **kwargs):
+        amplitude = 1.0 / (np.sqrt(2 * np.pi) * width ** 3)
+        self._model = models.MexicanHat1D(amplitude, 0, width)
+        self._default_size = _round_up_to_odd_integer(8 * width)
+        super(MexicanHat1DKernel, self).__init__(**kwargs)
+        self._truncation = np.abs(self._array.sum() / self._array.size)
+        self._normalization = 0
+
+
+class MexicanHat2DKernel(Kernel2D):
+    """
+    2D Mexican hat filter kernel.
+
+    The Mexican Hat, or inverted Gaussian-Laplace filter, is a
+    bandpass filter. It smoothes the data and removes slowly varying
+    or constant structures (e.g. Background). It is useful for peak or
+    multi-scale detection.  This kernel is derived from a normalized
+    Gaussian.
+
+    Parameters
+    ----------
+    width : number
+        Width of the filter kernel.
+    x_size : odd int, optional
+        Size in x direction of the kernel array. Default = 8 * width.
+    y_size : odd int, optional
+        Size in y direction of the kernel array. Default = 8 * width.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by performing a bilinear interpolation
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+
+    See Also
+    --------
+    Box2DKernel, Tophat2DKernel, MexicanHat2DKernel, Ring2DKernel,
+    TrapezoidDisk2DKernel, AiryDisk2DKernel
+
+    Examples
+    --------
+    Kernel response:
+
+     .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        from astropy.convolution import MexicanHat2DKernel
+        mexicanhat_2D_kernel = MexicanHat2DKernel(10)
+        plt.imshow(mexicanhat_2D_kernel, interpolation='none', origin='lower')
+        plt.xlabel('x [pixels]')
+        plt.ylabel('y [pixels]')
+        plt.colorbar()
+        plt.show()
+    """
+    _is_bool = False
+
+    def __init__(self, width, **kwargs):
+        amplitude = 1.0 / (np.pi * width ** 4)
+        self._model = models.MexicanHat2D(amplitude, 0, 0, width)
+        self._default_size = _round_up_to_odd_integer(8 * width)
+        super(MexicanHat2DKernel, self).__init__(**kwargs)
+        self._truncation = np.abs(self._array.sum() / self._array.size)
+        self._normalization = 0
+
+
+class AiryDisk2DKernel(Kernel2D):
+    """
+    2D Airy disk kernel.
+
+    This kernel models the diffraction pattern of a circular aperture. This
+    kernel is normalized to a peak value of 1.
+
+    Parameters
+    ----------
+    width : number
+        Width of the filter kernel.
+    x_size : odd int, optional
+        Size in x direction of the kernel array. Default = 8 * width.
+    y_size : odd int, optional
+        Size in y direction of the kernel array. Default = 8 * width.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by performing a bilinear interpolation
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+    See Also
+    --------
+    Box2DKernel, Tophat2DKernel, MexicanHat2DKernel, Ring2DKernel,
+    TrapezoidDisk2DKernel, AiryDisk2DKernel
+
+    Examples
+    --------
+    Kernel response:
+
+     .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        from astropy.convolution import AiryDisk2DKernel
+        airydisk_2D_kernel = AiryDisk2DKernel(10)
+        plt.imshow(airydisk_2D_kernel, interpolation='none', origin='lower')
+        plt.xlabel('x [pixels]')
+        plt.ylabel('y [pixels]')
+        plt.colorbar()
+        plt.show()
+    """
+    _is_bool = False
+
+    def __init__(self, width, **kwargs):
+        self._model = models.AiryDisk2D(1, 0, 0, width)
+        self._default_size = _round_up_to_odd_integer(8 * width)
+        super(AiryDisk2DKernel, self).__init__(**kwargs)
+        self.normalize()
+        self._truncation = None
+
+
+class Model1DKernel(Kernel1D):
+    """
+    Create kernel from astropy.models.Parametric1DModel.
+
+    The model has to be centered on x = 0.
+
+    Parameters
+    ----------
+    model : Parametric1DModel
+        Kernel response function model
+    x_size : odd int, optional
+        Size in x direction of the kernel array. Default = 8 * width.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by linearly interpolating
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+    Raises
+    ------
+    TypeError
+        If model is not an instance of astropy.models.Parametric1DModel
+
+    See also
+    --------
+    Model2DKernel : Create kernel from astropy.models.Parametric2DModel
+    CustomKernel : Create kernel from list or array
+
+    Examples
+    --------
+    Define a Gaussian1D model:
+
+        >>> from astropy.modeling.models import Gaussian1D
+        >>> from astropy.convolution.kernels import Model1DKernel
+        >>> gauss = Gaussian1D(1, 0, 2)
+
+    And create a custom one dimensional kernel from it:
+
+        >>> gauss_kernel = Model1DKernel(gauss, x_size=9)
+
+    This kernel can now be used like a usual astropy kernel.
+    """
+    _separable = False
+    _is_bool = False
+
+    def __init__(self, model, **kwargs):
+        if isinstance(model, Parametric1DModel):
+            self._model = model
+        else:
+            raise TypeError("Must be Parametric1DModel")
+        super(Model1DKernel, self).__init__(**kwargs)
+
+
+class Model2DKernel(Kernel2D):
+    """
+    Create kernel from astropy.models.Parametric2DModel.
+
+    The model has to be centered on x = 0 and y= 0.
+
+    Parameters
+    ----------
+    model : Parametric2DModel
+        Kernel response function model
+    x_size : odd int, optional
+        Size in x direction of the kernel array. Default = 8 * width.
+    y_size : odd int, optional
+        Size in y direction of the kernel array. Default = 8 * width.
+    mode : str, optional
+        One of the following discretization modes:
+            * 'center' (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * 'linear_interp'
+                Discretize model by performing a bilinear interpolation
+                between the values at the corners of the bin.
+            * 'oversample'
+                Discretize model by taking the average
+                on an oversampled grid.
+            * 'integrate'
+                Discretize model by integrating the
+                model over the bin.
+    factor : number, optional
+        Factor of oversampling. Default factor = 10.
+
+    Raises
+    ------
+    TypeError
+        If model is not an instance of astropy.models.Parametric2DModel
+
+    See also
+    --------
+    Model1DKernel : Create kernel from astropy.models.Parametric1DModel
+    CustomKernel : Create kernel from list or array
+
+    Examples
+    --------
+    Define a Gaussian2D model:
+
+        >>> from astropy.modeling.models import Gaussian2D
+        >>> from astropy.convolution.kernels import Model2DKernel
+        >>> gauss = Gaussian2D(1, 0, 0, 2, 2)
+
+    And create a custom two dimensional kernel from it:
+
+        >>> gauss_kernel = Model2DKernel(gauss, x_size=9)
+
+    This kernel can now be used like a usual astropy kernel.
+
+    """
+    _is_bool = False
+    _separable = False
+
+    def __init__(self, model, **kwargs):
+        self._separable = False
+        if isinstance(model, Parametric2DModel):
+            self._model = model
+        else:
+            raise TypeError("Must be Parametric2DModel")
+
+
+class PSFKernel(Kernel2D):
+    """
+    Initialize filter kernel from astropy PSF instance.
+    """
+    _separable = False
+
+    def __init__(self):
+        raise NotImplementedError('Not yet implemented')
+
+
+class CustomKernel(Kernel):
+    """
+    Create filter kernel from list or array.
+
+    Parameters
+    ----------
+    array : list or array
+        Filter kernel array. Size must be odd.
+
+    Raises
+    ------
+    TypeError
+        If array is not a list or array.
+    KernelSizeError
+        If array size is even.
+
+    See also
+    --------
+    Model2DKernel, Model1DKernel
+
+    Examples
+    --------
+    Define one dimensional array:
+
+        >>> from astropy.convolution.kernels import CustomKernel
+        >>> import numpy as np
+        >>> array = np.array([1, 2, 3, 2, 1])
+        >>> kernel = CustomKernel(array)
+        >>> kernel.dimension
+        1
+
+    Define two dimensional array:
+
+        >>> array = np.array([[1, 1, 1], [1, 2, 1], [1, 1, 1]])
+        >>> kernel = CustomKernel(array)
+        >>> kernel.dimension
+        2
+    """
+
+    def __init__(self, array):
+        self.array = array
+        super(CustomKernel, self).__init__(self._array)
+
+    @property
+    def array(self):
+        """
+        Filter kernel array.
+        """
+        return self._array
+
+    @array.setter
+    def array(self, array):
+        """
+        Filter kernel array setter
+        """
+        if isinstance(array, np.ndarray):
+            self._array = array
+        elif isinstance(array, list):
+            self._array = np.array(array)
+        else:
+            raise TypeError("Must be list or array.")
+
+        #Check if array is odd in all axis
+        odd = np.all([axes_size % 2 != 0 for axes_size in self.shape])
+
+        if not odd:
+            raise KernelSizeError("Kernel size must be odd in all axes.")
+
+        # Check if array is bool
+        ones = self._array == 1.
+        zeros = self._array == 0
+        self._is_bool = np.all(np.logical_or(ones, zeros))
+
+        # Set normalization
+        self._normalization = 1. / self._array.sum()
diff --git a/astropy/nddata/convolution/__init__.py b/astropy/convolution/tests/__init__.py
similarity index 100%
rename from astropy/nddata/convolution/__init__.py
rename to astropy/convolution/tests/__init__.py
diff --git a/astropy/nddata/convolution/tests/test_convolve.py b/astropy/convolution/tests/test_convolve.py
similarity index 92%
rename from astropy/nddata/convolution/tests/test_convolve.py
rename to astropy/convolution/tests/test_convolve.py
index 22e0413..e1266ef 100644
--- a/astropy/nddata/convolution/tests/test_convolve.py
+++ b/astropy/convolution/tests/test_convolve.py
@@ -1,7 +1,7 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 import numpy as np
 
-from ....tests.helper import pytest
+from ...tests.helper import pytest
 
 from ..convolve import convolve
 
@@ -16,6 +16,18 @@ BOUNDARY_OPTIONS = [None, 'fill', 'wrap', 'extend']
 
 
 class TestConvolve1D(object):
+    def test_list(self):
+        """
+        Test that convolve works correctly when inputs are lists
+        """
+
+        x = [1, 4, 5, 6, 5, 7, 8]
+
+        y = [0.2, 0.6, 0.2]
+
+        z = convolve([1, 4, 5, 6, 5, 7, 8], [0.2, 0.6, 0.2], boundary=None)
+
+        assert_array_almost_equal_nulp(z, np.array([ 0. ,  3.6,  5. ,  5.6,  5.6,  6.8,  0. ]), 10)
 
     @pytest.mark.parametrize(('dtype_array', 'dtype_kernel'), VALID_DTYPES)
     def test_dtype(self, dtype_array, dtype_kernel):
@@ -77,7 +89,7 @@ class TestConvolve1D(object):
         z = convolve(x, y, boundary=boundary)
 
         if boundary is None:
-            assert np.all(z == np.array([0., 0., 0.], dtype='>f8'))
+            assert np.all(z == np.array([0., 4., 0.], dtype='>f8'))
         elif boundary == 'fill':
             assert np.all(z == np.array([1., 4., 3.], dtype='>f8'))
         elif boundary == 'wrap':
@@ -125,7 +137,7 @@ class TestConvolve1D(object):
         z = convolve(x, y, boundary=boundary)
 
         if boundary is None:
-            assert_array_almost_equal_nulp(z, np.array([0., 2., 0.], dtype='>f8'), 10)
+            assert_array_almost_equal_nulp(z, np.array([0., 6., 0.], dtype='>f8'), 10)
         elif boundary == 'fill':
             assert_array_almost_equal_nulp(z, np.array([3., 6., 5.], dtype='>f8'), 10)
         elif boundary == 'wrap':
@@ -135,6 +147,16 @@ class TestConvolve1D(object):
 
 
 class TestConvolve2D(object):
+    def test_list(self):
+        """
+        Test that convolve works correctly when inputs are lists
+        """
+        x = [[1, 1, 1],
+             [1, 1, 1],
+             [1, 1, 1]]
+
+        z = convolve(x, x, boundary='fill', fill_value=1)
+        assert_array_almost_equal_nulp(z / 9, x, 10)
 
     @pytest.mark.parametrize(('dtype_array', 'dtype_kernel'), VALID_DTYPES)
     def test_dtype(self, dtype_array, dtype_kernel):
@@ -213,7 +235,7 @@ class TestConvolve2D(object):
 
         if boundary is None:
             assert_array_almost_equal_nulp(z, np.array([[0., 0., 0.],
-                                                        [0., 0., 0.],
+                                                        [0., 6., 0.],
                                                         [0., 0., 0.]], dtype='>f8'), 10)
         elif boundary == 'fill':
             assert_array_almost_equal_nulp(z, np.array([[1., 4., 3.],
@@ -277,7 +299,7 @@ class TestConvolve2D(object):
 
         if boundary is None:
             assert_array_almost_equal_nulp(z, np.array([[0., 0., 0.],
-                                                       [0., 1., 0.],
+                                                       [0., 9., 0.],
                                                        [0., 0., 0.]], dtype='>f8'), 10)
         elif boundary == 'fill':
             assert_array_almost_equal_nulp(z, np.array([[2., 6., 5.],
@@ -294,6 +316,22 @@ class TestConvolve2D(object):
 
 
 class TestConvolve3D(object):
+    def test_list(self):
+        """
+        Test that convolve works correctly when inputs are lists
+        """
+        x = [[[1, 1, 1],
+              [1, 1, 1],
+              [1, 1, 1]],
+             [[1, 1, 1],
+              [1, 1, 1],
+              [1, 1, 1]],
+             [[1, 1, 1],
+              [1, 1, 1],
+              [1, 1, 1]]]
+
+        z = convolve(x, x, boundary='fill', fill_value=1)
+        assert_array_almost_equal_nulp(z / 27, x, 10)
 
     @pytest.mark.parametrize(('dtype_array', 'dtype_kernel'), VALID_DTYPES)
     def test_dtype(self, dtype_array, dtype_kernel):
@@ -369,7 +407,7 @@ class TestConvolve3D(object):
 
         if boundary is None:
             assert_array_almost_equal_nulp(z, np.array([[[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]],
-                                                       [[0., 0., 0.], [0., 3., 0.], [0., 0., 0.]],
+                                                       [[0., 0., 0.], [0., 81., 0.], [0., 0., 0.]],
                                                        [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]], dtype='>f8'), 10)
         elif boundary == 'fill':
             assert_array_almost_equal_nulp(z, np.array([[[23., 28., 16.], [35., 46., 25.], [25., 34., 18.]],
@@ -430,7 +468,7 @@ class TestConvolve3D(object):
 
         if boundary is None:
             assert_array_almost_equal_nulp(z, np.array([[[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]],
-                                                       [[0., 0., 0.], [0., 3., 0.], [0., 0., 0.]],
+                                                       [[0., 0., 0.], [0., 81., 0.], [0., 0., 0.]],
                                                        [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]], dtype='>f8'), 10)
         elif boundary == 'fill':
             assert_array_almost_equal_nulp(z, np.array([[[23., 28., 16.], [35., 46., 25.], [25., 34., 18.]],
diff --git a/astropy/nddata/convolution/tests/test_convolve_fft.py b/astropy/convolution/tests/test_convolve_fft.py
similarity index 60%
rename from astropy/nddata/convolution/tests/test_convolve_fft.py
rename to astropy/convolution/tests/test_convolve_fft.py
index 2a57d62..b264a07 100644
--- a/astropy/nddata/convolution/tests/test_convolve_fft.py
+++ b/astropy/convolution/tests/test_convolve_fft.py
@@ -1,14 +1,13 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-import numpy as np
 
-from astropy.tests.helper import pytest
-from astropy.config import ConfigurationItem
+import itertools
 
-from ..convolve import convolve_fft
+import numpy as np
+from numpy.testing import assert_array_almost_equal_nulp, assert_allclose
 
-from numpy.testing import assert_array_almost_equal_nulp
+from ..convolve import convolve_fft
+from ...tests.helper import pytest
 
-import itertools
 
 VALID_DTYPES = []
 for dtype_array in ['>f4', '<f4', '>f8', '<f8']:
@@ -29,14 +28,17 @@ Convolved with [0,1] = [0, 1, 2, 3, 4]
 """
 
 # NOTE: use_numpy_fft is redundant if you don't have FFTW installed
-option_names = ('boundary', 'interpolate_nan', 'normalize_kernel', 'ignore_edge_zeros')
-options = list(itertools.product(BOUNDARY_OPTIONS, (True, False), (True, False), (True, False)))
+option_names = ('boundary', 'interpolate_nan', 'normalize_kernel',
+                'ignore_edge_zeros')
+options = list(itertools.product(BOUNDARY_OPTIONS, (True, False),
+                                 (True, False), (True, False)))
 
 
 class TestConvolve1D(object):
 
     @pytest.mark.parametrize(option_names, options)
-    def test_unity_1_none(self, boundary, interpolate_nan, normalize_kernel, ignore_edge_zeros):
+    def test_unity_1_none(self, boundary, interpolate_nan, normalize_kernel,
+                          ignore_edge_zeros):
         '''
         Test that a unit kernel with a single element returns the same array
         '''
@@ -46,14 +48,15 @@ class TestConvolve1D(object):
         y = np.array([1.], dtype='float64')
 
         z = convolve_fft(x, y, boundary=boundary,
-                interpolate_nan=interpolate_nan,
-                normalize_kernel=normalize_kernel,
-                ignore_edge_zeros=ignore_edge_zeros)
+                         interpolate_nan=interpolate_nan,
+                         normalize_kernel=normalize_kernel,
+                         ignore_edge_zeros=ignore_edge_zeros)
 
         assert_array_almost_equal_nulp(z, x, 10)
 
     @pytest.mark.parametrize(option_names, options)
-    def test_unity_3(self, boundary, interpolate_nan, normalize_kernel, ignore_edge_zeros):
+    def test_unity_3(self, boundary, interpolate_nan, normalize_kernel,
+                     ignore_edge_zeros):
         '''
         Test that a unit kernel with three elements returns the same array
         (except when boundary is None).
@@ -64,14 +67,15 @@ class TestConvolve1D(object):
         y = np.array([0., 1., 0.], dtype='float64')
 
         z = convolve_fft(x, y, boundary=boundary,
-                interpolate_nan=interpolate_nan,
-                normalize_kernel=normalize_kernel,
-                ignore_edge_zeros=ignore_edge_zeros)
+                         interpolate_nan=interpolate_nan,
+                         normalize_kernel=normalize_kernel,
+                         ignore_edge_zeros=ignore_edge_zeros)
 
         assert_array_almost_equal_nulp(z, x, 10)
 
     @pytest.mark.parametrize(option_names, options)
-    def test_uniform_3(self, boundary, interpolate_nan, normalize_kernel, ignore_edge_zeros):
+    def test_uniform_3(self, boundary, interpolate_nan, normalize_kernel,
+                       ignore_edge_zeros):
         '''
         Test that the different modes are producing the correct results using
         a uniform kernel with three elements
@@ -82,20 +86,20 @@ class TestConvolve1D(object):
         y = np.array([1., 1., 1.], dtype='float64')
 
         z = convolve_fft(x, y, boundary=boundary,
-                interpolate_nan=interpolate_nan,
-                normalize_kernel=normalize_kernel,
-                ignore_edge_zeros=ignore_edge_zeros)
+                         interpolate_nan=interpolate_nan,
+                         normalize_kernel=normalize_kernel,
+                         ignore_edge_zeros=ignore_edge_zeros)
 
         answer_dict = {
-                'sum': np.array([1., 4., 3.], dtype='float64'),
-                'sum_zeros': np.array([1., 4., 3.], dtype='float64'),
-                'sum_nozeros': np.array([1., 4., 3.], dtype='float64'),
-                'average': np.array([1 / 3., 4 / 3., 1.], dtype='float64'),
-                'sum_wrap':  np.array([4., 4., 4.], dtype='float64'),
-                'average_wrap': np.array([4 / 3., 4 / 3., 4 / 3.], dtype='float64'),
-                'average_zeros': np.array([1 / 3., 4 / 3., 1.], dtype='float64'),
-                'average_nozeros': np.array([0.5, 4 / 3., 1.5], dtype='float64'),
-                }
+            'sum': np.array([1., 4., 3.], dtype='float64'),
+            'sum_zeros': np.array([1., 4., 3.], dtype='float64'),
+            'sum_nozeros': np.array([1., 4., 3.], dtype='float64'),
+            'average': np.array([1 / 3., 4 / 3., 1.], dtype='float64'),
+            'sum_wrap': np.array([4., 4., 4.], dtype='float64'),
+            'average_wrap': np.array([4 / 3., 4 / 3., 4 / 3.], dtype='float64'),
+            'average_zeros': np.array([1 / 3., 4 / 3., 1.], dtype='float64'),
+            'average_nozeros': np.array([0.5, 4 / 3., 1.5], dtype='float64'),
+        }
 
         if normalize_kernel:
             answer_key = 'average'
@@ -114,7 +118,8 @@ class TestConvolve1D(object):
         assert_array_almost_equal_nulp(z, answer_dict[answer_key], 10)
 
     @pytest.mark.parametrize(option_names, options)
-    def test_unity_3_withnan(self, boundary, interpolate_nan, normalize_kernel, ignore_edge_zeros):
+    def test_unity_3_withnan(self, boundary, interpolate_nan, normalize_kernel,
+                             ignore_edge_zeros):
         '''
         Test that a unit kernel with three elements returns the same array
         (except when boundary is None). This version includes a NaN value in
@@ -126,24 +131,33 @@ class TestConvolve1D(object):
         y = np.array([0., 1., 0.], dtype='float64')
 
         z = convolve_fft(x, y, boundary=boundary,
-                interpolate_nan=interpolate_nan,
-                normalize_kernel=normalize_kernel,
-                ignore_edge_zeros=ignore_edge_zeros)
+                         interpolate_nan=interpolate_nan,
+                         normalize_kernel=normalize_kernel,
+                         ignore_edge_zeros=ignore_edge_zeros)
 
         # for whatever reason, numpy's fft has very limited precision, and
         # the comparison fails unless you cast the float64 to a float16
-        # REMOVED because of numpy 1.4 incompatibility assert_array_almost_equal_nulp(np.asarray(z, dtype=np.float16), np.array([1.,0.,3.], dtype=np.float16), 10)
+        if hasattr(np, 'float16'):
+            assert_array_almost_equal_nulp(
+                np.asarray(z, dtype=np.float16),
+                np.array([1.,0.,3.], dtype=np.float16), 10)
         # ASSERT equality to better than 16 bit but worse than 32 bit precision
         assert np.all(np.abs(z - np.array([1., 0., 3.])) < 1e-14)
 
-    inputs = (np.array([1., np.nan, 3.], dtype='float64'), 
-              np.array([1., np.inf, 3.], dtype='float64')) 
-    outputs = (np.array([1., 0., 3.], dtype='float64'), 
-              np.array([1., 0., 3.], dtype='float64')) 
-    options_unity1withnan = list(itertools.product(BOUNDARY_OPTIONS, (True, False), (True, False), (True, False), inputs, outputs))
-    @pytest.mark.parametrize(option_names + ('inval','outval'), options_unity1withnan)
+    inputs = (np.array([1., np.nan, 3.], dtype='float64'),
+              np.array([1., np.inf, 3.], dtype='float64'))
+    outputs = (np.array([1., 0., 3.], dtype='float64'),
+               np.array([1., 0., 3.], dtype='float64'))
+    options_unity1withnan = list(itertools.product(BOUNDARY_OPTIONS,
+                                                   (True, False),
+                                                   (True, False),
+                                                   (True, False),
+                                                   inputs, outputs))
+
+    @pytest.mark.parametrize(option_names + ('inval', 'outval'),
+                             options_unity1withnan)
     def test_unity_1_withnan(self, boundary, interpolate_nan, normalize_kernel,
-            ignore_edge_zeros, inval, outval):
+                             ignore_edge_zeros, inval, outval):
         '''
         Test that a unit kernel with three elements returns the same array
         (except when boundary is None). This version includes a NaN value in
@@ -155,18 +169,20 @@ class TestConvolve1D(object):
         y = np.array([1.], dtype='float64')
 
         z = convolve_fft(x, y, boundary=boundary,
-                interpolate_nan=interpolate_nan,
-                normalize_kernel=normalize_kernel,
-                ignore_edge_zeros=ignore_edge_zeros)
+                         interpolate_nan=interpolate_nan,
+                         normalize_kernel=normalize_kernel,
+                         ignore_edge_zeros=ignore_edge_zeros)
 
         # for whatever reason, numpy's fft has very limited precision, and
         # the comparison fails unless you cast the float64 to a float16
-        # np1.4 incompatible assert_array_almost_equal_nulp(np.asarray(z, dtype=np.float16), np.array([1.,0.,3.], dtype=np.float16), 10)
+        if hasattr(np, 'float16'):
+            assert_array_almost_equal_nulp(np.asarray(z, dtype=np.float16),
+                                           np.array([1.,0.,3.], dtype=np.float16), 10)
         assert np.all(np.abs(z - outval) < 1e-14)
 
     @pytest.mark.parametrize(option_names, options)
     def test_uniform_3_withnan(self, boundary, interpolate_nan,
-            normalize_kernel, ignore_edge_zeros):
+                               normalize_kernel, ignore_edge_zeros):
         '''
         Test that the different modes are producing the correct results using
         a uniform kernel with three elements. This version includes a NaN
@@ -178,26 +194,26 @@ class TestConvolve1D(object):
         y = np.array([1., 1., 1.], dtype='float64')
 
         z = convolve_fft(x, y, boundary=boundary,
-                interpolate_nan=interpolate_nan,
-                normalize_kernel=normalize_kernel,
-                ignore_edge_zeros=ignore_edge_zeros)
+                         interpolate_nan=interpolate_nan,
+                         normalize_kernel=normalize_kernel,
+                         ignore_edge_zeros=ignore_edge_zeros)
 
         answer_dict = {
-                'sum': np.array([1., 4., 3.], dtype='float64'),
-                'sum_nozeros': np.array([1., 4., 3.], dtype='float64'),
-                'sum_zeros': np.array([1., 4., 3.], dtype='float64'),
-                'sum_zeros_noignan': np.array([1., 4., 3.], dtype='float64'),
-                'sum_nozeros_noignan': np.array([1., 4., 3.], dtype='float64'),
-                'average': np.array([1., 2., 3.], dtype='float64'),
-                'sum_wrap':  np.array([4., 4., 4.], dtype='float64'),
-                'sum_wrap_noignan':  np.array([4., 4., 4.], dtype='float64'),
-                'average_wrap': np.array([(1 + 3) / 2., 2., 2.], dtype='float64'),
-                'average_wrap_noignan': np.array([4 / 3., 4 / 3., 4 / 3.], dtype='float64'),
-                'average_nozeros': np.array([1, 2, 3], dtype='float64'),
-                'average_nozeros_noignan': np.array([1 / 2., 4 / 3., 3 / 2.], dtype='float64'),
-                'average_zeros': np.array([1 / 2., 4 / 2., 3 /2.], dtype='float64'),
-                'average_zeros_noignan': np.array([1/3., 4/3., 3/3.], dtype='float64'),
-                }
+            'sum': np.array([1., 4., 3.], dtype='float64'),
+            'sum_nozeros': np.array([1., 4., 3.], dtype='float64'),
+            'sum_zeros': np.array([1., 4., 3.], dtype='float64'),
+            'sum_zeros_noignan': np.array([1., 4., 3.], dtype='float64'),
+            'sum_nozeros_noignan': np.array([1., 4., 3.], dtype='float64'),
+            'average': np.array([1., 2., 3.], dtype='float64'),
+            'sum_wrap': np.array([4., 4., 4.], dtype='float64'),
+            'sum_wrap_noignan': np.array([4., 4., 4.], dtype='float64'),
+            'average_wrap': np.array([(1 + 3) / 2., 2., 2.], dtype='float64'),
+            'average_wrap_noignan': np.array([4 / 3., 4 / 3., 4 / 3.], dtype='float64'),
+            'average_nozeros': np.array([1, 2, 3], dtype='float64'),
+            'average_nozeros_noignan': np.array([1 / 2., 4 / 3., 3 / 2.], dtype='float64'),
+            'average_zeros': np.array([1 / 2., 4 / 2., 3 / 2.], dtype='float64'),
+            'average_zeros_noignan': np.array([1 / 3., 4 / 3., 3 / 3.], dtype='float64'),
+        }
 
         if normalize_kernel:
             answer_key = 'average'
@@ -218,12 +234,39 @@ class TestConvolve1D(object):
         print boundary, interpolate_nan, normalize_kernel, ignore_edge_zeros, answer_key
         assert_array_almost_equal_nulp(z, answer_dict[answer_key], 10)
 
+    def test_masked_array(self):
+        """
+        Check whether convolve_fft works with masked arrays.
+        """
+        # Test masked array
+        array = np.array([1., np.nan, 3.], dtype='float64')
+        kernel = np.array([1, 1, 1])
+        masked_array = np.ma.masked_array(array, mask=[0, 1, 0])
+        result = convolve_fft(masked_array, kernel)
+        assert_allclose(result, [1, 4, 3], atol=1E-10)
+
+        # Test masked kernel
+        array = np.array([1., np.nan, 3.], dtype='float64')
+        kernel = np.array([1, 1, 1])
+        masked_array = np.ma.masked_array(array, mask=[0, 1, 0])
+        result = convolve_fft(kernel, masked_array)
+        assert_allclose(result, [1, 4, 3], atol=1E-10)
+
+    def test_normalize_function(self):
+        """
+        Check if convolve_fft works when passing a normalize function.
+        """
+        array = [1, 2, 3]
+        kernel = [3, 3, 3]
+        result = convolve_fft(array, kernel, normalize_kernel=np.max)
+        assert_allclose(result, [3, 6, 5], atol=1E-10)
+
 
 class TestConvolve2D(object):
 
     @pytest.mark.parametrize(option_names, options)
     def test_unity_1x1_none(self, boundary, interpolate_nan, normalize_kernel,
-            ignore_edge_zeros):
+                            ignore_edge_zeros):
         '''
         Test that a 1x1 unit kernel returns the same array
         '''
@@ -235,14 +278,15 @@ class TestConvolve2D(object):
         y = np.array([[1.]], dtype='float64')
 
         z = convolve_fft(x, y, boundary=boundary,
-                interpolate_nan=interpolate_nan,
-                normalize_kernel=normalize_kernel,
-                ignore_edge_zeros=ignore_edge_zeros)
+                         interpolate_nan=interpolate_nan,
+                         normalize_kernel=normalize_kernel,
+                         ignore_edge_zeros=ignore_edge_zeros)
 
         assert_array_almost_equal_nulp(z, x, 10)
 
     @pytest.mark.parametrize(option_names, options)
-    def test_unity_3x3(self, boundary, interpolate_nan, normalize_kernel, ignore_edge_zeros):
+    def test_unity_3x3(self, boundary, interpolate_nan, normalize_kernel,
+                       ignore_edge_zeros):
         '''
         Test that a 3x3 unit kernel returns the same array (except when
         boundary is None).
@@ -257,15 +301,16 @@ class TestConvolve2D(object):
                       [0., 0., 0.]], dtype='float64')
 
         z = convolve_fft(x, y, boundary=boundary,
-                interpolate_nan=interpolate_nan,
-                normalize_kernel=normalize_kernel,
-                ignore_edge_zeros=ignore_edge_zeros)
+                         interpolate_nan=interpolate_nan,
+                         normalize_kernel=normalize_kernel,
+                         ignore_edge_zeros=ignore_edge_zeros)
 
         assert_array_almost_equal_nulp(z, x, 10)
-        #assert np.all( np.abs(z-x) < np.spacing(np.where(z>x,z,x))*2 )
+        # assert np.all( np.abs(z-x) < np.spacing(np.where(z>x,z,x))*2 )
 
     @pytest.mark.parametrize(option_names, options)
-    def test_uniform_3x3(self, boundary, interpolate_nan, normalize_kernel, ignore_edge_zeros):
+    def test_uniform_3x3(self, boundary, interpolate_nan, normalize_kernel,
+                         ignore_edge_zeros):
         '''
         Test that the different modes are producing the correct results using
         a 3x3 uniform kernel.
@@ -280,21 +325,21 @@ class TestConvolve2D(object):
                       [1., 1., 1.]], dtype='float64')
 
         z = convolve_fft(x, y, boundary=boundary,
-                interpolate_nan=interpolate_nan,
-                normalize_kernel=normalize_kernel,
-                ignore_edge_zeros=ignore_edge_zeros)
+                         interpolate_nan=interpolate_nan,
+                         normalize_kernel=normalize_kernel,
+                         ignore_edge_zeros=ignore_edge_zeros)
 
         w = np.array([[4., 6., 4.],
                       [6., 9., 6.],
                       [4., 6., 4.]], dtype='float64')
         answer_dict = {
-                'sum': np.array([[1., 4., 3.],
-                                 [3., 6., 5.],
-                                 [3., 3., 2.]], dtype='float64'),
-                'sum_wrap': np.array([[6., 6., 6.],
-                                      [6., 6., 6.],
-                                      [6., 6., 6.]], dtype='float64'),
-                }
+            'sum': np.array([[1., 4., 3.],
+                             [3., 6., 5.],
+                             [3., 3., 2.]], dtype='float64'),
+            'sum_wrap': np.array([[6., 6., 6.],
+                                  [6., 6., 6.],
+                                  [6., 6., 6.]], dtype='float64'),
+        }
         answer_dict['average'] = answer_dict['sum'] / w
         answer_dict['average_wrap'] = answer_dict['sum_wrap'] / 9.
         answer_dict['average_withzeros'] = answer_dict['sum'] / 9.
@@ -320,7 +365,8 @@ class TestConvolve2D(object):
         assert np.all(np.abs(z - a) <= np.spacing(np.where(z > a, z, a)) * 10)
 
     @pytest.mark.parametrize(option_names, options)
-    def test_unity_3x3_withnan(self, boundary, interpolate_nan, normalize_kernel, ignore_edge_zeros):
+    def test_unity_3x3_withnan(self, boundary, interpolate_nan,
+                               normalize_kernel, ignore_edge_zeros):
         '''
         Test that a 3x3 unit kernel returns the same array (except when
         boundary is None). This version includes a NaN value in the original
@@ -336,21 +382,24 @@ class TestConvolve2D(object):
                       [0., 0., 0.]], dtype='float64')
 
         z = convolve_fft(x, y, boundary=boundary,
-                interpolate_nan=interpolate_nan,
-                normalize_kernel=normalize_kernel,
-                ignore_edge_zeros=ignore_edge_zeros,
-                )
+                         interpolate_nan=interpolate_nan,
+                         normalize_kernel=normalize_kernel,
+                         ignore_edge_zeros=ignore_edge_zeros,
+                         )
 
         a = x
         a[1, 1] = 0
 
         # for whatever reason, numpy's fft has very limited precision, and
         # the comparison fails unless you cast the float64 to a float16
-        # np1.4 incompatible assert_array_almost_equal_nulp(np.asarray(z, dtype=np.float16), np.asarray(a, dtype=np.float16), 10)
+        if hasattr(np, 'float16'):
+            assert_array_almost_equal_nulp(np.asarray(z, dtype=np.float16),
+                                           np.asarray(a, dtype=np.float16), 10)
         assert np.all(np.abs(z - a) < 1e-14)
 
     @pytest.mark.parametrize(option_names, options)
-    def test_uniform_3x3_withnan(self, boundary, interpolate_nan, normalize_kernel, ignore_edge_zeros):
+    def test_uniform_3x3_withnan(self, boundary, interpolate_nan,
+                                 normalize_kernel, ignore_edge_zeros):
         '''
         Test that the different modes are producing the correct results using
         a 3x3 uniform kernel. This version includes a NaN value in the
@@ -366,10 +415,10 @@ class TestConvolve2D(object):
                       [1., 1., 1.]], dtype='float64')
 
         z = convolve_fft(x, y, boundary=boundary,
-                interpolate_nan=interpolate_nan,
-                normalize_kernel=normalize_kernel,
-                ignore_edge_zeros=ignore_edge_zeros,
-                )
+                         interpolate_nan=interpolate_nan,
+                         normalize_kernel=normalize_kernel,
+                         ignore_edge_zeros=ignore_edge_zeros,
+                         )
 
         w_n = np.array([[3., 5., 3.],
                         [5., 8., 5.],
@@ -378,13 +427,13 @@ class TestConvolve2D(object):
                         [6., 9., 6.],
                         [4., 6., 4.]], dtype='float64')
         answer_dict = {
-                'sum': np.array([[1., 4., 3.],
-                                 [3., 6., 5.],
-                                 [3., 3., 2.]], dtype='float64'),
-                'sum_wrap': np.array([[6., 6., 6.],
-                                      [6., 6., 6.],
-                                      [6., 6., 6.]], dtype='float64'),
-                }
+            'sum': np.array([[1., 4., 3.],
+                             [3., 6., 5.],
+                             [3., 3., 2.]], dtype='float64'),
+            'sum_wrap': np.array([[6., 6., 6.],
+                                  [6., 6., 6.],
+                                  [6., 6., 6.]], dtype='float64'),
+        }
         answer_dict['average'] = answer_dict['sum'] / w_z
         answer_dict['average_ignan'] = answer_dict['sum'] / w_n
         answer_dict['average_wrap_ignan'] = answer_dict['sum_wrap'] / 8.
diff --git a/astropy/nddata/convolution/tests/test_convolve_kernels.py b/astropy/convolution/tests/test_convolve_kernels.py
similarity index 51%
rename from astropy/nddata/convolution/tests/test_convolve_kernels.py
rename to astropy/convolution/tests/test_convolve_kernels.py
index a858d57..9d37644 100644
--- a/astropy/nddata/convolution/tests/test_convolve_kernels.py
+++ b/astropy/convolution/tests/test_convolve_kernels.py
@@ -1,33 +1,52 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-import numpy as np
 
-from astropy.tests.helper import pytest
+import itertools
+
+import numpy as np
+from numpy.testing import assert_almost_equal
 
-from ..make_kernel import make_kernel
 from ..convolve import convolve, convolve_fft
+from ..kernels import Gaussian2DKernel, Box2DKernel, Tophat2DKernel
+from ...tests.helper import pytest
 
-from numpy.testing import assert_array_almost_equal_nulp, assert_almost_equal
 
-import itertools
+SHAPES_ODD = [[15, 15], [31, 31]]
+SHAPES_EVEN = [[8, 8], [16, 16], [32, 32]]
+WIDTHS = [2, 3, 4, 5]
+
+KERNELS = []
+
+for shape in SHAPES_ODD:
+    for width in WIDTHS:
+
+        KERNELS.append(Gaussian2DKernel(width,
+                                        x_size=shape[0],
+                                        y_size=shape[1],
+                                        mode='oversample',
+                                        factor=10))
 
-shapes = [[8, 8], [15, 15], [16, 16], [31, 31], [32, 32]]
-widths = [2, 3, 4, 5]
-kerneltype = ['gaussian', 'tophat', 'boxcar']
+        KERNELS.append(Box2DKernel(width,
+                                   x_size=shape[0],
+                                   y_size=shape[1],
+                                   mode='oversample',
+                                   factor=10))
+
+        KERNELS.append(Tophat2DKernel(width,
+                                      x_size=shape[0],
+                                      y_size=shape[1],
+                                      mode='oversample',
+                                      factor=10))
 
 
 class Test2DConvolutions(object):
 
-    @pytest.mark.parametrize(('shape', 'width', 'kerneltype'), list(itertools.product(shapes, widths, kerneltype)))
-    def test_centered_makekernel(self, shape, width, kerneltype):
+    @pytest.mark.parametrize('kernel', KERNELS)
+    def test_centered_makekernel(self, kernel):
         """
         Test smoothing of an image with a single positive pixel
         """
 
-        if width % 2 == 0 and kerneltype == 'boxcar':
-            # this is a shifting kernel.  I don't understand how these are treated.
-            return
-
-        kernel = make_kernel(shape, width, force_odd=True, kerneltype=kerneltype)
+        shape = kernel.array.shape
 
         x = np.zeros(shape)
         xslice = [slice(sh // 2, sh // 2 + 1) for sh in shape]
@@ -36,36 +55,30 @@ class Test2DConvolutions(object):
         c2 = convolve_fft(x, kernel, boundary='fill')
         c1 = convolve(x, kernel, boundary='fill')
 
-        print shape, width, kerneltype
         assert_almost_equal(c1, c2, decimal=12)
 
-    @pytest.mark.parametrize(('shape', 'width', 'kerneltype'), list(itertools.product(shapes, widths, kerneltype)))
-    def test_random_makekernel(self, shape, width, kerneltype):
+    @pytest.mark.parametrize('kernel', KERNELS)
+    def test_random_makekernel(self, kernel):
         """
         Test smoothing of an image made of random noise
         """
 
-        if width % 2 == 0 and kerneltype == 'boxcar':
-            # this is a shifting kernel.  I don't understand how these are treated.
-            return
-
-        kernel = make_kernel(shape, width, force_odd=True, kerneltype=kerneltype)
+        shape = kernel.array.shape
 
         x = np.random.randn(*shape)
 
         c2 = convolve_fft(x, kernel, boundary='fill')
         c1 = convolve(x, kernel, boundary='fill')
 
-        print shape, width, kerneltype
         # not clear why, but these differ by a couple ulps...
         assert_almost_equal(c1, c2, decimal=12)
 
-    @pytest.mark.parametrize(('shape', 'width'), list(itertools.product(shapes, widths)))
+    @pytest.mark.parametrize(('shape', 'width'), list(itertools.product(SHAPES_ODD, WIDTHS)))
     def test_uniform_smallkernel(self, shape, width):
         """
         Test smoothing of an image with a single positive pixel
 
-        Instead of using make_kernel, uses a simple, small kernel
+        Uses a simple, small kernel
         """
 
         if width % 2 == 0:
@@ -81,19 +94,18 @@ class Test2DConvolutions(object):
         c2 = convolve_fft(x, kernel, boundary='fill')
         c1 = convolve(x, kernel, boundary='fill')
 
-        print shape, width
         assert_almost_equal(c1, c2, decimal=12)
 
-    @pytest.mark.parametrize(('shape', 'width'), list(itertools.product(shapes, widths)))
-    def test_smallkernel_vs_makekernel(self, shape, width):
+    @pytest.mark.parametrize(('shape', 'width'), list(itertools.product(SHAPES_ODD, [1, 3, 5])))
+    def test_smallkernel_Box2DKernel(self, shape, width):
         """
         Test smoothing of an image with a single positive pixel
 
-        Compares a small kernel to something produced by makekernel
+        Compares a small uniform kernel to the Box2DKernel
         """
 
         kernel1 = np.ones([width, width]) / np.float(width) ** 2
-        kernel2 = make_kernel(shape, width, kerneltype='boxcar')
+        kernel2 = Box2DKernel(width, mode='oversample', factor=10)
 
         x = np.zeros(shape)
         xslice = [slice(sh // 2, sh // 2 + 1) for sh in shape]
@@ -102,15 +114,9 @@ class Test2DConvolutions(object):
         c2 = convolve_fft(x, kernel2, boundary='fill')
         c1 = convolve_fft(x, kernel1, boundary='fill')
 
-        print shape, width
         assert_almost_equal(c1, c2, decimal=12)
 
-        if width % 2 == 1:
-            kernel2 = make_kernel(shape, width, kerneltype='boxcar', force_odd=True)
-
-            c2 = convolve(x, kernel2, boundary='fill')
-            c1 = convolve(x, kernel1, boundary='fill')
+        c2 = convolve(x, kernel2, boundary='fill')
+        c1 = convolve(x, kernel1, boundary='fill')
 
-            print shape, width
-
-            assert_almost_equal(c1, c2, decimal=12)
+        assert_almost_equal(c1, c2, decimal=12)
diff --git a/astropy/nddata/convolution/tests/test_convolve_speeds.py b/astropy/convolution/tests/test_convolve_speeds.py
similarity index 80%
rename from astropy/nddata/convolution/tests/test_convolve_speeds.py
rename to astropy/convolution/tests/test_convolve_speeds.py
index cdc14a2..62a33f3 100644
--- a/astropy/nddata/convolution/tests/test_convolve_speeds.py
+++ b/astropy/convolution/tests/test_convolve_speeds.py
@@ -1,74 +1,68 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-import numpy as np
+
+from __future__ import print_function
 
 import timeit
 
+import numpy as np  # pylint: disable=W0611
+
 # largest image size to use for "linear" and fft convolutions
 max_exponents_linear = {1: 15, 2: 7, 3: 5}
 max_exponents_fft = {1: 15, 2: 10, 3: 7}
 
 if __name__ == "__main__":
     for ndims in [1, 2, 3]:
-        print "\n%i-dimensional arrays ('n' is the size of the image AND the kernel)" % ndims
-        print " ".join(["%17s" % n for n in ("n", "convolve", "convolve_fftnp", "convolve_fftw", "convolve_fftsp")])
+        print("\n%i-dimensional arrays ('n' is the size of the image AND the kernel)" % ndims)
+        print(" ".join(["%17s" % n for n in ("n", "convolve", "convolve_fft")]))
 
-        for ii in xrange(3, max_exponents_fft[ndims]):
-            #array = np.random.random([2**ii]*ndims)
+        for ii in range(3, max_exponents_fft[ndims]):
+            # array = np.random.random([2**ii]*ndims)
             # test ODD sizes too
             if ii < max_exponents_fft[ndims]:
                 setup = ("""
-from astropy.nddata.convolution.convolve import convolve;
-from astropy.nddata.convolution.convolve import convolve_fft;
-from astropy.nddata.convolution.make_kernel import make_kernel;
-import numpy as np;
-array = np.random.random([%i]*%i);
-kernel = make_kernel([%i]*%i, 3, force_odd=True)""") % (2 ** ii - 1, ndims, 2 ** ii - 1, ndims)
+import numpy as np
+from astropy.convolution.convolve import convolve
+from astropy.convolution.convolve import convolve_fft
+array = np.random.random([%i]*%i)
+kernel = np.random.random([%i]*%i)""") % (2 ** ii - 1, ndims, 2 ** ii - 1, ndims)
 
-                print "%16i:" % (int(2 ** ii - 1)),
+                print("%16i:" % (int(2 ** ii - 1)), end=' ')
 
                 if ii <= max_exponents_linear[ndims]:
-                    for ffttype, extra in zip(("", "_fft", "_fft", "_fft"),
-                            ("", "fft_pad=False, fft_type='numpy'",
-                                "fft_pad=False,fft_type='fftw'",
-                                "fft_pad=False,fft_type='scipy'")):
+                    for ffttype, extra in zip(("", "_fft"),
+                                              ("", "fft_pad=False")):
                         statement = "convolve%s(array, kernel, boundary='fill', %s)" % (ffttype, extra)
                         besttime = min(timeit.Timer(stmt=statement, setup=setup).repeat(3, 10))
-                        print "%17f" % (besttime),
+                        print("%17f" % (besttime), end=' ')
                 else:
-                    print "%17s" % "skipped",
-                    for ffttype, extra in zip(("_fft", "_fft", "_fft"),
-                            ("fft_type='numpy'", "fft_type='fftw'", "fft_type='scipy'")):
-                        statement = "convolve%s(array, kernel, boundary='fill', %s)" % (ffttype, extra)
-                        besttime = min(timeit.Timer(stmt=statement, setup=setup).repeat(3, 10))
-                        print "%17f" % (besttime),
+                    print("%17s" % "skipped", end=' ')
+                    statement = "convolve_fft(array, kernel, boundary='fill')"
+                    besttime = min(timeit.Timer(stmt=statement, setup=setup).repeat(3, 10))
+                    print("%17f" % (besttime), end=' ')
 
-                print
+                print()
 
             setup = ("""
-from astropy.nddata.convolution.convolve import convolve;
-from astropy.nddata.convolution.convolve import convolve_fft;
-from astropy.nddata.convolution.make_kernel import make_kernel;
-import numpy as np;
-array = np.random.random([%i]*%i);
-kernel = make_kernel([%i]*%i, 3, force_odd=True)""") % (2 ** ii, ndims, 2 ** ii, ndims)
+import numpy as np
+from astropy.convolution.convolve import convolve
+from astropy.convolution.convolve import convolve_fft
+array = np.random.random([%i]*%i)
+kernel = np.random.random([%i]*%i)""") % (2 ** ii - 1, ndims, 2 ** ii - 1, ndims)
 
-            print "%16i:" % (int(2 ** ii)),
+            print("%16i:" % (int(2 ** ii)), end=' ')
 
             if ii <= max_exponents_linear[ndims]:
-                for ffttype, extra in zip(("", "_fft", "_fft", "_fft"),
-                        ("", "fft_type='numpy'", "fft_type='fftw'", "fft_type='scipy'")):
-                    statement = "convolve%s(array, kernel, boundary='fill', %s)" % (ffttype, extra)
+                for ffttype in ("", "_fft"):
+                    statement = "convolve%s(array, kernel, boundary='fill')" % ffttype
                     besttime = min(timeit.Timer(stmt=statement, setup=setup).repeat(3, 10))
-                    print "%17f" % (besttime),
+                    print("%17f" % (besttime), end=' ')
             else:
-                print "%17s" % "skipped",
-                for ffttype, extra in zip(("_fft", "_fft", "_fft"),
-                        ("fft_type='numpy'", "fft_type='fftw'", "fft_type='scipy'")):
-                    statement = "convolve%s(array, kernel, boundary='fill', %s)" % (ffttype, extra)
-                    besttime = min(timeit.Timer(stmt=statement, setup=setup).repeat(3, 10))
-                    print "%17f" % (besttime),
+                print("%17s" % "skipped", end=' ')
+                statement = "convolve_fft(array, kernel, boundary='fill')"
+                besttime = min(timeit.Timer(stmt=statement, setup=setup).repeat(3, 10))
+                print("%17f" % (besttime), end=' ')
 
-            print
+            print()
 
 """
 Unfortunately, these tests are pretty strongly inconclusive
diff --git a/astropy/convolution/tests/test_discretize.py b/astropy/convolution/tests/test_discretize.py
new file mode 100644
index 0000000..4f7150b
--- /dev/null
+++ b/astropy/convolution/tests/test_discretize.py
@@ -0,0 +1,103 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+import itertools
+
+import numpy as np
+from numpy.testing import assert_allclose
+
+from ...tests.helper import pytest
+
+from ..utils import discretize_model
+from ...modeling.functional_models import (
+    Gaussian1D, Box1D, MexicanHat1D, Trapezoid1D,
+    Gaussian2D, Box2D, MexicanHat2D)
+from ...modeling.tests.example_models import models_1D, models_2D
+from ...modeling.tests.test_models import create_model
+
+try:
+    import scipy
+    HAS_SCIPY = True
+except ImportError:
+    HAS_SCIPY = False
+
+
+modes = ['center', 'linear_interp', 'oversample']
+test_models_1D = [Gaussian1D, Box1D, MexicanHat1D]
+test_models_2D = [Gaussian2D, Box2D, MexicanHat2D]
+
+
+ at pytest.mark.parametrize(('model_class', 'mode'), list(itertools.product(test_models_1D, modes)))
+def test_pixel_sum_1D(model_class, mode):
+    """
+    Test if the sum of all pixels corresponds nearly to the integral.
+    """
+    if model_class == Box1D and mode == "center":
+        pytest.skip("Non integrating mode. Skip integral test.")
+    parameters = models_1D[model_class]['parameters']
+    model = create_model(model_class, parameters)
+
+    values = discretize_model(model, models_1D[model_class]['x_lim'], mode=mode)
+    assert_allclose(values.sum(), models_1D[model_class]['integral'], atol=0.0001)
+
+
+ at pytest.mark.parametrize('mode', modes)
+def test_gaussian_eval_1D(mode):
+    """
+    Discretize Gaussian with different modes and check
+    if result is at least similar to Gaussian1D.eval().
+    """
+    model = Gaussian1D(1, 0, 20)
+    x = np.arange(-100, 101)
+    values = model(x)
+    disc_values = discretize_model(model, (-100, 101), mode=mode)
+    assert_allclose(values, disc_values, atol=0.001)
+
+
+ at pytest.mark.parametrize(('model_class', 'mode'), list(itertools.product(test_models_2D, modes)))
+def test_pixel_sum_2D(model_class, mode):
+    """
+    Test if the sum of all pixels corresponds nearly to the integral.
+    """
+    if model_class == Box2D and mode == "center":
+        pytest.skip("Non integrating mode. Skip integral test.")
+
+    parameters = models_2D[model_class]['parameters']
+    model = create_model(model_class, parameters)
+
+    values = discretize_model(model, models_2D[model_class]['x_lim'],
+                              models_2D[model_class]['y_lim'], mode=mode)
+    assert_allclose(values.sum(), models_2D[model_class]['integral'], atol=0.0001)
+
+
+ at pytest.mark.parametrize('mode', modes)
+def test_gaussian_eval_2D(mode):
+    """
+    Discretize Gaussian with different modes and check
+    if result is at least similar to Gaussian1D.eval()
+    """
+    model = Gaussian2D(1, 0, 0, 20, 20)
+    x = np.arange(-100, 101)
+    y = np.arange(-100, 101)
+    y, x = np.meshgrid(y, x)
+    values = model(x, y)
+    disc_values = discretize_model(model, (-100, 101), (-100, 101), mode=mode)
+    assert_allclose(values, disc_values, atol=0.001)
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_subpixel_gauss_1D():
+    """
+    Test subpixel accuracy of the oversample mode with gaussian 1D model.
+    """
+    gauss_1D = Gaussian1D(1, 0, 0.1)
+    values = discretize_model(gauss_1D, (-1, 2), mode='integrate', factor=100)
+    assert_allclose(values.sum(), np.sqrt(2 * np.pi) * 0.1, atol=0.00001)
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_subpixel_gauss_2D():
+    """
+    Test subpixel accuracy of the oversample mode with gaussian 2D model.
+    """
+    gauss_2D = Gaussian2D(1, 0, 0, 0.1, 0.1)
+    values = discretize_model(gauss_2D, (-1, 2), (-1, 2), mode='integrate', factor=100)
+    assert_allclose(values.sum(), 2 * np.pi * 0.01, atol=0.00001)
diff --git a/astropy/convolution/tests/test_kernel_class.py b/astropy/convolution/tests/test_kernel_class.py
new file mode 100644
index 0000000..1f841d9
--- /dev/null
+++ b/astropy/convolution/tests/test_kernel_class.py
@@ -0,0 +1,353 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+import itertools
+
+import numpy as np
+from numpy.testing import assert_almost_equal
+
+from ...tests.helper import pytest
+from ..convolve import convolve, convolve_fft
+from ..kernels import (
+    Gaussian1DKernel, Gaussian2DKernel, Box1DKernel, Box2DKernel,
+    Trapezoid1DKernel, TrapezoidDisk2DKernel, MexicanHat1DKernel,
+    Tophat2DKernel, MexicanHat2DKernel, AiryDisk2DKernel, Ring2DKernel,
+    CustomKernel)
+
+from ..utils import KernelSizeError
+from ...modeling.models import Box2D
+
+try:
+    from scipy.ndimage import filters
+    HAS_SCIPY = True
+except ImportError:
+    HAS_SCIPY = False
+
+WIDTHS_ODD = [3, 5, 7, 9]
+WIDTHS_EVEN = [2, 4, 8, 16]
+MODES = ['center', 'linear_interp', 'oversample', 'integrate']
+KERNEL_TYPES = [Gaussian1DKernel, Gaussian2DKernel,
+                Box1DKernel, Box2DKernel,
+                Trapezoid1DKernel, TrapezoidDisk2DKernel,
+                MexicanHat1DKernel, Tophat2DKernel, AiryDisk2DKernel, Ring2DKernel]
+
+# Test data
+delta_pulse_1D = np.zeros(81)
+delta_pulse_1D[40] = 1
+
+delta_pulse_2D = np.zeros((81, 81))
+delta_pulse_2D[40, 40] = 1
+
+random_data_1D = np.random.rand(61)
+random_data_2D = np.random.rand(61, 61)
+
+
+class TestKernels(object):
+    """
+    Test class for the built-in convolution kernels.
+    """
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    @pytest.mark.parametrize(('width'), WIDTHS_ODD)
+    def test_scipy_filter_gaussian(self, width):
+        """
+        Test GaussianKernel against SciPy ndimage gaussian filter.
+        """
+        gauss_kernel_1D = Gaussian1DKernel(width)
+        gauss_kernel_1D.normalize()
+        gauss_kernel_2D = Gaussian2DKernel(width)
+        gauss_kernel_2D.normalize()
+
+        astropy_1D = convolve(delta_pulse_1D, gauss_kernel_1D, boundary='fill')
+        astropy_2D = convolve(delta_pulse_2D, gauss_kernel_2D, boundary='fill')
+
+        scipy_1D = filters.gaussian_filter(delta_pulse_1D, width)
+        scipy_2D = filters.gaussian_filter(delta_pulse_2D, width)
+
+        assert_almost_equal(astropy_1D, scipy_1D, decimal=12)
+        assert_almost_equal(astropy_2D, scipy_2D, decimal=12)
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    @pytest.mark.parametrize(('width'), WIDTHS_ODD)
+    def test_scipy_filter_gaussian_laplace(self, width):
+        """
+        Test MexicanHat kernels against SciPy ndimage gaussian laplace filters.
+        """
+        mexican_kernel_1D = MexicanHat1DKernel(width)
+        mexican_kernel_2D = MexicanHat2DKernel(width)
+
+        astropy_1D = convolve(delta_pulse_1D, mexican_kernel_1D, boundary='fill')
+        astropy_2D = convolve(delta_pulse_2D, mexican_kernel_2D, boundary='fill')
+
+        # The Laplace of Gaussian filter is an inverted Mexican Hat
+        # filter.
+        scipy_1D = -filters.gaussian_laplace(delta_pulse_1D, width)
+        scipy_2D = -filters.gaussian_laplace(delta_pulse_2D, width)
+
+        # There is a slight deviation in the normalization. They differ by a
+        # factor of ~1.0000284132604045. The reason is not known.
+        assert_almost_equal(astropy_1D, scipy_1D, decimal=5)
+        assert_almost_equal(astropy_2D, scipy_2D, decimal=5)
+
+    @pytest.mark.parametrize(('kernel_type', 'width'), list(itertools.product(KERNEL_TYPES, WIDTHS_ODD)))
+    def test_delta_data(self, kernel_type,  width):
+        """
+        Test smoothing of an image with a single positive pixel
+        """
+        if kernel_type == AiryDisk2DKernel and not HAS_SCIPY:
+            pytest.skip("Omitting AiryDisk2DKernel, which requires SciPy")
+        if not kernel_type == Ring2DKernel:
+            kernel = kernel_type(width)
+        else:
+            kernel = kernel_type(width, width * 0.2)
+
+        if kernel.dimension == 1:
+            c1 = convolve_fft(delta_pulse_1D, kernel, boundary='fill')
+            c2 = convolve(delta_pulse_1D, kernel, boundary='fill')
+            assert_almost_equal(c1, c2, decimal=12)
+        else:
+            c1 = convolve_fft(delta_pulse_2D, kernel, boundary='fill')
+            c2 = convolve(delta_pulse_2D, kernel, boundary='fill')
+            assert_almost_equal(c1, c2, decimal=12)
+
+    @pytest.mark.parametrize(('kernel_type', 'width'), list(itertools.product(KERNEL_TYPES, WIDTHS_ODD)))
+    def test_random_data(self, kernel_type, width):
+        """
+        Test smoothing of an image made of random noise
+        """
+        if kernel_type == AiryDisk2DKernel and not HAS_SCIPY:
+            pytest.skip("Omitting AiryDisk2DKernel, which requires SciPy")
+        if not kernel_type == Ring2DKernel:
+            kernel = kernel_type(width)
+        else:
+            kernel = kernel_type(width, width * 0.2)
+
+        if kernel.dimension == 1:
+            c1 = convolve_fft(random_data_1D, kernel, boundary='fill')
+            c2 = convolve(random_data_1D, kernel, boundary='fill')
+            assert_almost_equal(c1, c2, decimal=12)
+        else:
+            c1 = convolve_fft(random_data_2D, kernel, boundary='fill')
+            c2 = convolve(random_data_2D, kernel, boundary='fill')
+            assert_almost_equal(c1, c2, decimal=12)
+
+    @pytest.mark.parametrize(('width'), WIDTHS_ODD)
+    def test_uniform_smallkernel(self, width):
+        """
+        Test smoothing of an image with a single positive pixel
+
+        Instead of using kernel class, uses a simple, small kernel
+        """
+        kernel = np.ones([width, width])
+
+        c2 = convolve_fft(delta_pulse_2D, kernel, boundary='fill')
+        c1 = convolve(delta_pulse_2D, kernel, boundary='fill')
+        assert_almost_equal(c1, c2, decimal=12)
+
+    @pytest.mark.parametrize(('width'), WIDTHS_ODD)
+    def test_smallkernel_vs_Box2DKernel(self, width):
+        """
+        Test smoothing of an image with a single positive pixel
+        """
+        kernel1 = np.ones([width, width]) / width ** 2
+        kernel2 = Box2DKernel(width)
+
+        c2 = convolve_fft(delta_pulse_2D, kernel2, boundary='fill')
+        c1 = convolve_fft(delta_pulse_2D, kernel1, boundary='fill')
+
+        assert_almost_equal(c1, c2, decimal=12)
+
+    def test_convolve_1D_kernels(self):
+        """
+        Check if convolving two kernels with eachother works correctly.
+        """
+        gauss_1 = Gaussian1DKernel(3)
+        gauss_2 = Gaussian1DKernel(4)
+        test_gauss_3 = Gaussian1DKernel(5)
+
+        gauss_3 = convolve(gauss_1, gauss_2)
+        assert np.all(np.abs((gauss_3 - test_gauss_3).array) < 0.01)
+
+    def test_convolve_2D_kernels(self):
+        """
+        Check if convolving two kernels with eachother works correctly.
+        """
+        gauss_1 = Gaussian2DKernel(3)
+        gauss_2 = Gaussian2DKernel(4)
+        test_gauss_3 = Gaussian2DKernel(5)
+
+        gauss_3 = convolve(gauss_1, gauss_2)
+        assert np.all(np.abs((gauss_3 - test_gauss_3).array) < 0.01)
+
+    def test_multiply_scalar(self):
+        """
+        Check if multiplying two kernels with eachother works correctly.
+        """
+        gauss = 1 * Gaussian1DKernel(3)
+        assert np.all(np.abs(3 * gauss.array - gauss * 3) < 0.000001)
+
+    def test_custom_1D_kernel(self):
+        """
+        Check if CustomKernel against Box1DKernel.
+        """
+        #Define one dimensional array:
+        array = np.ones(5)
+        custom = CustomKernel(array)
+        custom.normalize()
+        box = Box1DKernel(5)
+
+        c2 = convolve(delta_pulse_1D, custom, boundary='fill')
+        c1 = convolve(delta_pulse_1D, box, boundary='fill')
+        assert_almost_equal(c1, c2, decimal=12)
+
+    def test_custom_2D_kernel(self):
+        """
+        Check if CustomKernel against Box1DKernel.
+        """
+        #Define one dimensional array:
+        array = np.ones((5, 5))
+        custom = CustomKernel(array)
+        custom.normalize()
+        box = Box2DKernel(5)
+
+        c2 = convolve(delta_pulse_2D, custom, boundary='fill')
+        c1 = convolve(delta_pulse_2D, box, boundary='fill')
+        assert_almost_equal(c1, c2, decimal=12)
+
+    def test_custom_1D_kernel_list(self):
+        """
+        Check if CustomKernel works with lists.
+        """
+        custom = CustomKernel([1, 1, 1, 1, 1])
+        assert custom.is_bool == True
+
+    def test_custom_2D_kernel_list(self):
+        """
+        Check if CustomKernel works with lists.
+        """
+        custom = CustomKernel([[1, 1, 1],
+                               [1, 1, 1],
+                               [1, 1, 1]])
+        assert custom.is_bool == True
+
+    def test_custom_kernel_odd_error(self):
+        """
+        Check if CustomKErnel raises if the array size is odd.
+        """
+        with pytest.raises(KernelSizeError):
+            custom = CustomKernel([1, 1, 1, 1])
+
+    def test_add_1D_kernels(self):
+        """
+        Check if adding of two 1D kernels works.
+        """
+        box_1 = Box1DKernel(5)
+        box_2 = Box1DKernel(3)
+        box_3 = Box1DKernel(1)
+        box_sum_1 = box_1 + box_2 + box_3
+        box_sum_2 = box_2 + box_3 + box_1
+        box_sum_3 = box_3 + box_1 + box_2
+        ref = [1/5., 1/5. + 1/3., 1 + 1/3. + 1/5., 1/5. + 1/3., 1/5.]
+        assert_almost_equal(box_sum_1.array, ref, decimal=12)
+        assert_almost_equal(box_sum_2.array, ref, decimal=12)
+        assert_almost_equal(box_sum_3.array, ref, decimal=12)
+
+        # Assert that the kernels haven't changed
+        assert_almost_equal(box_1.array, [0.2, 0.2, 0.2, 0.2, 0.2], decimal=12)
+        assert_almost_equal(box_2.array, [1/3., 1/3., 1/3.], decimal=12)
+        assert_almost_equal(box_3.array, [1], decimal=12)
+
+    def test_add_2D_kernels(self):
+        """
+        Check if adding of two 1D kernels works.
+        """
+        box_1 = Box2DKernel(3)
+        box_2 = Box2DKernel(1)
+        box_sum_1 = box_1 + box_2
+        box_sum_2 = box_2 + box_1
+        ref = [[1 / 9., 1 / 9., 1 / 9.],
+               [1 / 9., 1 + 1 / 9., 1 / 9.],
+               [1 / 9., 1 / 9., 1 / 9.]]
+        ref_1 = [[1 / 9., 1 / 9., 1 / 9.],
+               [1 / 9., 1 / 9., 1 / 9.],
+               [1 / 9., 1 / 9., 1 / 9.]]
+        assert_almost_equal(box_2.array, [[1]], decimal=12)
+        assert_almost_equal(box_1.array, ref_1, decimal=12)
+        assert_almost_equal(box_sum_1.array, ref, decimal=12)
+        assert_almost_equal(box_sum_2.array, ref, decimal=12)
+
+    def test_Gaussian1DKernel_even_size(self):
+        """
+        Check if even size for GaussianKernel works.
+        """
+        gauss = Gaussian1DKernel(3, x_size=10)
+        assert gauss.array.size == 10
+
+    def test_Gaussian2DKernel_even_size(self):
+        """
+        Check if even size for GaussianKernel works.
+        """
+        gauss = Gaussian2DKernel(3, x_size=10, y_size=10)
+        assert gauss.array.shape == (10, 10)
+
+    def test_normalize_peak(self):
+        """
+        Check if normalize works with peak mode.
+        """
+        custom = CustomKernel([1, 2, 3, 2, 1])
+        custom.normalize(mode='peak')
+        assert custom.array.max() == 1
+
+    def test_check_kernel_attributes(self):
+        """
+        Check if kernel attributes are correct.
+        """
+        box = Box2DKernel(5)
+
+        # Check truncation
+        assert box.truncation == 0
+
+        # Check model
+        assert isinstance(box.model, Box2D)
+
+        # Check center
+        assert box.center == [2, 2]
+
+        # Check normalization
+        assert_almost_equal(box.normalization, 1., decimal=12)
+
+        # Check seperability
+        assert box.separable
+
+    @pytest.mark.parametrize(('kernel_type', 'mode'), list(itertools.product(KERNEL_TYPES, MODES)))
+    def test_dicretize_modes(self, kernel_type, mode):
+        """
+        Check if the different modes result in kernels that work with convolve.
+        Use only small kernel width, to make the test pass quickly.
+        """
+        if kernel_type == AiryDisk2DKernel and not HAS_SCIPY:
+            pytest.skip("Omitting AiryDisk2DKernel, which requires SciPy")
+        if not kernel_type == Ring2DKernel:
+            kernel = kernel_type(3)
+        else:
+            kernel = kernel_type(3, 3 * 0.2)
+
+        if kernel.dimension == 1:
+            c1 = convolve_fft(delta_pulse_1D, kernel, boundary='fill')
+            c2 = convolve(delta_pulse_1D, kernel, boundary='fill')
+            assert_almost_equal(c1, c2, decimal=12)
+        else:
+            c1 = convolve_fft(delta_pulse_2D, kernel, boundary='fill')
+            c2 = convolve(delta_pulse_2D, kernel, boundary='fill')
+            assert_almost_equal(c1, c2, decimal=12)
+
+    @pytest.mark.parametrize(('width'), WIDTHS_EVEN)
+    def test_box_kernels_even_size(self, width):
+        """
+        Check if BoxKernel work properly with even sizes.
+        """
+        kernel_1D = Box1DKernel(width)
+        assert kernel_1D.shape[0] % 2 != 0
+        assert kernel_1D.array.sum() == 1.
+
+        kernel_2D = Box2DKernel(width)
+        assert np.all([_ % 2 != 0 for _ in kernel_2D.shape])
+        assert kernel_2D.array.sum() == 1.
diff --git a/astropy/convolution/utils.py b/astropy/convolution/utils.py
new file mode 100644
index 0000000..01b4e73
--- /dev/null
+++ b/astropy/convolution/utils.py
@@ -0,0 +1,278 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import division
+
+import numpy as np
+
+from ..modeling.core import Parametric1DModel, Parametric2DModel
+
+
+__all__ = ['discretize_model']
+
+
+class DiscretizationError(Exception):
+    """
+    Called when discretization of models goes wrong.
+    """
+
+
+class KernelSizeError(Exception):
+    """
+    Called when size of kernels is even.
+    """
+
+
+def add_kernel_arrays_1D(array_1, array_2):
+    """
+    Add two 1D kernel arrays of different size.
+
+    The arrays are added with the centers lying upon each other.
+    """
+    if array_1.size > array_2.size:
+        new_array = array_1.copy()
+        center = array_1.size // 2
+        slice_ = slice(center - array_2.size // 2,
+                       center + array_2.size // 2 + 1)
+        new_array[slice_] += array_2
+        return new_array
+    elif array_2.size > array_1.size:
+        new_array = array_2.copy()
+        center = array_2.size // 2
+        slice_ = slice(center - array_1.size // 2,
+                       center + array_1.size // 2 + 1)
+        new_array[slice_] += array_1
+        return new_array
+    return array_2 + array_1
+
+
+def add_kernel_arrays_2D(array_1, array_2):
+    """
+    Add two 1D kernel arrays of different size.
+
+    The arrays are added with the centers lying upon each other.
+    """
+    if array_1.size > array_2.size:
+        new_array = array_1.copy()
+        center = [axes_size // 2 for axes_size in array_1.shape]
+        slice_x = slice(center[1] - array_2.shape[1] // 2,
+                        center[1] + array_2.shape[1] // 2 + 1)
+        slice_y = slice(center[0] - array_2.shape[0] // 2,
+                        center[0] + array_2.shape[0] // 2 + 1)
+        new_array[slice_y, slice_x] += array_2
+        return new_array
+    elif array_2.size > array_1.size:
+        new_array = array_2.copy()
+        center = [axes_size // 2 for axes_size in array_2.shape]
+        slice_x = slice(center[1] - array_1.shape[1] // 2,
+                        center[1] + array_1.shape[1] // 2 + 1)
+        slice_y = slice(center[0] - array_1.shape[0] // 2,
+                        center[0] + array_1.shape[0] // 2 + 1)
+        new_array[slice_y, slice_x] += array_1
+        return new_array
+    return array_2 + array_1
+
+
+def discretize_model(model, x_range, y_range=None, mode='center', factor=10):
+    """
+    Function to evaluate analytical models on a grid.
+
+    Parameters
+    ----------
+    model : :class:`~astropy.modeling.core.ParametricModel` instance
+        Instance of a :class:`~astropy.modeling.core.ParametricModel` to be evaluated.
+    x_range : tuple
+        x range in which the model is evaluated.
+    y_range : tuple, optional
+        y range in which the model is evaluated.
+        Necessary only for 2D models.
+    mode : str, optional
+        One of the following modes:
+            * ``'center'`` (default)
+                Discretize model by taking the value
+                at the center of the bin.
+            * ``'linear_interp'``
+                Discretize model by linearly interpolating
+                between the values at the corners of the bin.
+                For 2D models interpolation is bilinear.
+            * ``'oversample'``
+                Discretize model by taking the average
+                on an oversampled grid.
+            * ``'integrate'``
+                Discretize model by integrating the model 
+                over the bin using `scipy.integrate.quad`.
+                Very slow.
+    factor : float or int
+        Factor of oversampling. Default = 10.
+
+    Notes
+    -----
+
+    The ``oversample`` mode allows to conserve the integral on a subpixel
+    scale. Here is the example of a normalized Gaussian1D:
+
+    .. plot::
+        :include-source:
+
+        import matplotlib.pyplot as plt
+        import numpy as np
+        from astropy.modeling.models import Gaussian1D
+        from astropy.convolution.utils import discretize_model
+        gauss_1D = Gaussian1D(1 / (0.5 * np.sqrt(2 * np.pi)), 0, 0.5)
+        y_center = discretize_model(gauss_1D, (-2, 3), mode='center')
+        y_corner = discretize_model(gauss_1D, (-2, 3), mode='linear_interp')
+        y_oversample = discretize_model(gauss_1D, (-2, 3), mode='oversample')
+        plt.plot(y_center, label='center sum = {0:3f}'.format(y_center.sum()))
+        plt.plot(y_corner, label='linear_interp sum = {0:3f}'.format(y_corner.sum()))
+        plt.plot(y_oversample, label='oversample sum = {0:3f}'.format(y_oversample.sum()))
+        plt.xlabel('pixels')
+        plt.ylabel('value')
+        plt.legend()
+        plt.show()
+
+
+    """
+    if isinstance(model, Parametric2DModel) and y_range is None:
+        raise Exception("Please specify y range.")
+    if mode == "center":
+        if isinstance(model, Parametric1DModel):
+            return discretize_center_1D(model, x_range)
+        if isinstance(model, Parametric2DModel):
+            return discretize_center_2D(model, x_range, y_range)
+    elif mode == "linear_interp":
+        if isinstance(model, Parametric1DModel):
+            return discretize_linear_1D(model, x_range)
+        if isinstance(model, Parametric2DModel):
+            return discretize_bilinear_2D(model, x_range, y_range)
+    elif mode == "oversample":
+        if isinstance(model, Parametric1DModel):
+            return discretize_oversample_1D(model, x_range, factor)
+        if isinstance(model, Parametric2DModel):
+            return discretize_oversample_2D(model, x_range, y_range, factor)
+    elif mode == "integrate":
+        if isinstance(model, Parametric1DModel):
+            return discretize_integrate_1D(model, x_range)
+        if isinstance(model, Parametric2DModel):
+            return discretize_integrate_2D(model, x_range, y_range)
+    else:
+        raise DiscretizationError('Invalid mode.')
+
+
+def discretize_center_1D(model, x_range):
+    """
+    Discretize model by taking the value at the center of the bin.
+    """
+    x = np.arange(*x_range)
+    return model(x)
+
+
+def discretize_center_2D(model, x_range, y_range):
+    """
+    Discretize model by taking the value at the center of the pixel.
+    """
+    x = np.arange(*x_range)
+    y = np.arange(*y_range)
+    x, y = np.meshgrid(x, y)
+    return model(x, y)
+
+
+def discretize_linear_1D(model, x_range):
+    """
+    Discretize model by performing a linear interpolation.
+    """
+    # Evaluate model 0.5 pixel outside the boundaries
+    x = np.arange(x_range[0] - 0.5, x_range[1] + 0.5)
+    values_intermediate_grid = model(x)
+    return 0.5 * (values_intermediate_grid[1:] + values_intermediate_grid[:-1])
+
+
+def discretize_bilinear_2D(model, x_range, y_range):
+    """
+    Discretize model by performing a bilinear interpolation.
+    """
+    # Evaluate model 0.5 pixel outside the boundaries
+    x = np.arange(x_range[0] - 0.5, x_range[1] + 0.5)
+    y = np.arange(y_range[0] - 0.5, y_range[1] + 0.5)
+    x, y = np.meshgrid(x, y)
+    values_intermediate_grid = model(x, y)
+
+    # Mean in y direction
+    values = 0.5 * (values_intermediate_grid[1:, :]
+                    + values_intermediate_grid[:-1, :])
+    # Mean in x direction
+    values = 0.5 * (values[:, 1:]
+                    + values[:, :-1])
+    return values
+
+
+def discretize_oversample_1D(model, x_range, factor=10):
+    """
+    Discretize model by taking the average on an oversampled grid.
+    """
+    # Evaluate model on oversampled grid
+    x = np.arange(x_range[0] - 0.5 * (1 - 1 / factor),
+                  x_range[1] + 0.5 * (1 + 1 / factor), 1. / factor)
+
+    values = model(x)
+
+    # Reshape and compute mean
+    values = np.reshape(values, (x.size / factor, factor))
+    return values.mean(axis=1)[:-1]
+
+
+def discretize_oversample_2D(model, x_range, y_range, factor=10):
+    """
+    Discretize model by taking the average on an oversampled grid.
+    """
+    # Evaluate model on oversampled grid
+    x = np.arange(x_range[0] - 0.5 * (1 - 1 / factor),
+                  x_range[1] + 0.5 * (1 + 1 / factor), 1. / factor)
+
+    y = np.arange(y_range[0] - 0.5 * (1 - 1 / factor),
+                  y_range[1] + 0.5 * (1 + 1 / factor), 1. / factor)
+    x_grid, y_grid = np.meshgrid(x, y)
+    values = model(x_grid, y_grid)
+
+    # Reshape and compute mean
+    shape = (y.size / factor, factor, x.size / factor, factor)
+    values = np.reshape(values, shape)
+    return values.mean(axis=3).mean(axis=1)[:-1, :-1]
+
+
+def discretize_integrate_1D(model, x_range):
+    """
+    Discretize model by integrating numerically the model over the bin.
+    """
+    try:
+        from scipy.integrate import quad
+    except ImportError:
+        raise Exception("Mode 'integrate' requires scipy.")
+
+    # Set up grid
+    x = np.arange(x_range[0] - 0.5, x_range[1] + 0.5)
+    values = np.array([])
+
+    # Integrate over all bins
+    for i in range(x.size - 1):
+        values = np.append(values, quad(model, x[i], x[i + 1])[0])
+    return values
+
+
+def discretize_integrate_2D(model, x_range, y_range):
+    """
+    Discretize model by integrating the model over the pixel.
+    """
+    try:
+        from scipy.integrate import dblquad
+    except ImportError:
+        raise Exception("Mode 'integrate' requires scipy.")
+
+    # Set up grid
+    x = np.arange(x_range[0] - 0.5, x_range[1] + 0.5)
+    y = np.arange(y_range[0] - 0.5, y_range[1] + 0.5)
+    values = np.empty((y.size - 1, x.size - 1))
+
+    # Integrate over all pixels
+    for i in range(x.size - 1):
+        for j in range(y.size - 1):
+            values[j, i] = dblquad(model, x[i], x[i + 1],
+                                   lambda x: y[j], lambda x: y[j + 1])[0]
+    return values
diff --git a/astropy/coordinates/__init__.py b/astropy/coordinates/__init__.py
index cb04337..2b8a547 100644
--- a/astropy/coordinates/__init__.py
+++ b/astropy/coordinates/__init__.py
@@ -5,6 +5,8 @@ This subpackage contains classes and functions for celestial coordinates
 of astronomical objects. It also contains a framework for conversions
 between coordinate systems.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 from .errors import *
 from .angles import *
@@ -13,5 +15,7 @@ from .distances import *
 from .transformations import *
 from .builtin_systems import *
 from .name_resolve import *
+from .matching import *
+from .old_builtin_systems_names import *  # TODO: remove this in next version, along with module file
 
-__doc__ += builtin_systems._transform_graph_docs
\ No newline at end of file
+__doc__ += builtin_systems._transform_graph_docs
diff --git a/astropy/coordinates/angle_lextab.py b/astropy/coordinates/angle_lextab.py
index d7d7fe5..92fdc11 100644
--- a/astropy/coordinates/angle_lextab.py
+++ b/astropy/coordinates/angle_lextab.py
@@ -1,9 +1,14 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 # angle_lextab.py. This file automatically created by PLY (version 3.4). Don't edit!
 _tabversion   = '3.4'
-_lextokens    = {u'DEGREE': 1, u'HOUR': 1, u'SIMPLE_UNIT': 1, u'SIGN': 1, u'SECOND': 1, u'COLON': 1, u'UINT': 1, u'MINUTE': 1, u'UFLOAT': 1}
+_lextokens    = {'DEGREE': 1, 'HOUR': 1, 'SIMPLE_UNIT': 1, 'SIGN': 1, 'SECOND': 1, 'COLON': 1, 'UINT': 1, 'MINUTE': 1, 'UFLOAT': 1}
 _lexreflags   = 0
 _lexliterals  = ''
 _lexstateinfo = {'INITIAL': 'inclusive'}
-_lexstatere   = {'INITIAL': [(u'(?P<t_UFLOAT>((\\d+\\.\\d*)|(\\.\\d+))([eE][+-\u2212]?\\d+)?)|(?P<t_UINT>\\d+)|(?P<t_SIGN>[+\u2212-])|(?P<t_SIMPLE_UNIT>(arcminute)|(mas)|(arcsec)|(uas)|(rad)|(arcsecond)|(arcmin)|(radian))|(?P<t_MINUTE>m(in(ute(s)?)?)?|\u2032|\\\')|(?P<t_SECOND>s(ec(ond(s)?)?)?|\u2033|\\")|(?P<t_DEGREE>d(eg(ree(s)?)?)?|\xb0)|(?P<t_HOUR>hour(s)?|h(r)?|\u02b0)|(?P<t_COLON>:)', [None, (u't_UFLOAT', 'UFLOAT'), None, None, None, None, (u't_UINT', 'UINT'), (u't_SIGN', 'SIGN'),  [...]
-_lexstateignore = {'INITIAL': u' '}
+
+_lexstatere   = {'INITIAL': [('(?P<t_UFLOAT>((\\d+\\.\\d*)|(\\.\\d+))([eE][+-\u2212]?\\d+)?)|(?P<t_UINT>\\d+)|(?P<t_SIGN>[+\u2212-])|(?P<t_SIMPLE_UNIT>(?:hectoradian)|(?:petaradian)|(?:hrad)|(?:zeptoradian)|(?:arcsec)|(?:aarcmin)|(?:deciarcminute)|(?:Parcsec)|(?:kiloarcsecond)|(?:exaarcsecond)|(?:deciradian)|(?:yoctoarcminute)|(?:prad)|(?:Parcmin)|(?:yottaradian)|(?:marcmin)|(?:aarcsec)|(?:milliarcsecond)|(?:milliradian)|(?:parcsec)|(?:arad)|(?:uarcmin)|(?:parcmin)|(?:decaarcminute)|(?:d [...]
+_lexstateignore = {'INITIAL': ' '}
 _lexstateerrorf = {'INITIAL': 't_error'}
diff --git a/astropy/coordinates/angle_parsetab.py b/astropy/coordinates/angle_parsetab.py
index 4c2160a..fd86ad5 100644
--- a/astropy/coordinates/angle_parsetab.py
+++ b/astropy/coordinates/angle_parsetab.py
@@ -1,3 +1,6 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 # astropy/coordinates/angle_parsetab.py
 # This file is automatically generated. Do not edit.
@@ -5,52 +8,58 @@ _tabversion = '3.2'
 
 _lr_method = 'LALR'
 
-_lr_signature = '\xf9\xf2\xc0%N\xfc\x14x\x1d\xd1\xa0\x02\x1d\xabJf'
-    
-_lr_action_items = {u'DEGREE':([1,6,8,10,11,17,21,22,23,24,30,],[-13,13,-12,15,-14,-10,-11,-7,-6,-8,-9,]),u'HOUR':([1,6,8,10,11,17,21,22,23,24,30,],[-13,14,-12,16,-14,-10,-11,-7,-6,-8,-9,]),u'SIGN':([0,],[4,]),u'SECOND':([22,23,28,29,],[-7,-6,31,32,]),u'COLON':([10,24,],[18,27,]),u'SIMPLE_UNIT':([1,6,8,10,11,17,21,22,23,24,30,],[-13,12,-12,-15,-14,-10,-11,-7,-6,-8,-9,]),u'UINT':([0,4,5,10,15,16,17,18,25,26,27,],[-5,-4,10,17,19,20,22,24,22,22,22,]),'$end':([1,2,3,6,7,8,9,10,11,12,13,14,17 [...]
+_lr_signature = b"'\xecW6\xc1\x00\x86\x9f\x84\x0er\xa4\xfb\x91\xa6;"
+
+_lr_action_items = {'HOUR':([2,8,10,17,18,21,25,26,27,28,34,],[-15,12,-14,20,-16,-12,-13,-9,-8,-10,-11,]),'DEGREE':([2,8,10,17,18,21,25,26,27,28,34,],[-15,13,-14,19,-16,-12,-13,-9,-8,-10,-11,]),'SIGN':([0,],[5,]),'SECOND':([2,8,10,17,18,21,25,26,27,28,32,33,34,],[-15,14,-14,-17,-16,-12,-13,-9,-8,-10,35,36,-11,]),'COLON':([17,28,],[22,31,]),'UINT':([0,5,11,17,19,20,21,22,29,30,31,],[-7,-6,17,21,23,24,26,28,26,26,26,]),'SIMPLE_UNIT':([2,8,10,17,18,21,25,26,27,28,34,],[-15,15,-14,-17,-16,-1 [...]
 
 _lr_action = { }
 for _k, _v in _lr_action_items.items():
-   for _x,_y in zip(_v[0],_v[1]):
-      if not _x in _lr_action:  _lr_action[_x] = { }
-      _lr_action[_x][_k] = _y
+    for _x,_y in zip(_v[0],_v[1]):
+        if not _x in _lr_action:  _lr_action[_x] = { }
+        _lr_action[_x][_k] = _y
 del _lr_action_items
 
-_lr_goto_items = {u'angle':([0,],[2,]),u'simple':([0,],[3,]),u'sign':([0,],[5,]),u'generic':([0,],[6,]),u'dms':([0,],[7,]),u'colon':([0,],[8,]),u'spaced':([0,],[1,]),u'hms':([0,],[9,]),u'ufloat':([17,25,26,27,],[21,28,29,30,]),}
+_lr_goto_items = {'arcminute':([0,],[1,]),'angle':([0,],[3,]),'simple':([0,],[4,]),'arcsecond':([0,],[6,]),'hms':([0,],[7,]),'generic':([0,],[8,]),'dms':([0,],[9,]),'colon':([0,],[10,]),'spaced':([0,],[2,]),'sign':([0,],[11,]),'ufloat':([21,29,30,31,],[25,32,33,34,]),}
 
 _lr_goto = { }
 for _k, _v in _lr_goto_items.items():
-   for _x,_y in zip(_v[0],_v[1]):
-       if not _x in _lr_goto: _lr_goto[_x] = { }
-       _lr_goto[_x][_k] = _y
+    for _x,_y in zip(_v[0],_v[1]):
+        if not _x in _lr_goto: _lr_goto[_x] = { }
+        _lr_goto[_x][_k] = _y
 del _lr_goto_items
 _lr_productions = [
   ("S' -> angle","S'",1,None,None,None),
-  (u'angle -> hms',u'angle',1,'p_angle','astropy/coordinates/angle_utilities.py',107),
-  (u'angle -> dms',u'angle',1,'p_angle','astropy/coordinates/angle_utilities.py',108),
-  (u'angle -> simple',u'angle',1,'p_angle','astropy/coordinates/angle_utilities.py',109),
-  (u'sign -> SIGN',u'sign',1,'p_sign','astropy/coordinates/angle_utilities.py',115),
-  (u'sign -> <empty>',u'sign',0,'p_sign','astropy/coordinates/angle_utilities.py',116),
-  (u'ufloat -> UFLOAT',u'ufloat',1,'p_ufloat','astropy/coordinates/angle_utilities.py',125),
-  (u'ufloat -> UINT',u'ufloat',1,'p_ufloat','astropy/coordinates/angle_utilities.py',126),
-  (u'colon -> sign UINT COLON UINT',u'colon',4,'p_colon','astropy/coordinates/angle_utilities.py',132),
-  (u'colon -> sign UINT COLON UINT COLON ufloat',u'colon',6,'p_colon','astropy/coordinates/angle_utilities.py',133),
-  (u'spaced -> sign UINT UINT',u'spaced',3,'p_spaced','astropy/coordinates/angle_utilities.py',142),
-  (u'spaced -> sign UINT UINT ufloat',u'spaced',4,'p_spaced','astropy/coordinates/angle_utilities.py',143),
-  (u'generic -> colon',u'generic',1,'p_generic','astropy/coordinates/angle_utilities.py',152),
-  (u'generic -> spaced',u'generic',1,'p_generic','astropy/coordinates/angle_utilities.py',153),
-  (u'generic -> sign UFLOAT',u'generic',2,'p_generic','astropy/coordinates/angle_utilities.py',154),
-  (u'generic -> sign UINT',u'generic',2,'p_generic','astropy/coordinates/angle_utilities.py',155),
-  (u'hms -> sign UINT HOUR UINT',u'hms',4,'p_hms','astropy/coordinates/angle_utilities.py',164),
-  (u'hms -> sign UINT HOUR UINT MINUTE',u'hms',5,'p_hms','astropy/coordinates/angle_utilities.py',165),
-  (u'hms -> sign UINT HOUR UINT MINUTE ufloat',u'hms',6,'p_hms','astropy/coordinates/angle_utilities.py',166),
-  (u'hms -> sign UINT HOUR UINT MINUTE ufloat SECOND',u'hms',7,'p_hms','astropy/coordinates/angle_utilities.py',167),
-  (u'hms -> generic HOUR',u'hms',2,'p_hms','astropy/coordinates/angle_utilities.py',168),
-  (u'dms -> sign UINT DEGREE UINT',u'dms',4,'p_dms','astropy/coordinates/angle_utilities.py',179),
-  (u'dms -> sign UINT DEGREE UINT MINUTE',u'dms',5,'p_dms','astropy/coordinates/angle_utilities.py',180),
-  (u'dms -> sign UINT DEGREE UINT MINUTE ufloat',u'dms',6,'p_dms','astropy/coordinates/angle_utilities.py',181),
-  (u'dms -> sign UINT DEGREE UINT MINUTE ufloat SECOND',u'dms',7,'p_dms','astropy/coordinates/angle_utilities.py',182),
-  (u'dms -> generic DEGREE',u'dms',2,'p_dms','astropy/coordinates/angle_utilities.py',183),
-  (u'simple -> generic',u'simple',1,'p_simple','astropy/coordinates/angle_utilities.py',194),
-  (u'simple -> generic SIMPLE_UNIT',u'simple',2,'p_simple','astropy/coordinates/angle_utilities.py',195),
+  ('angle -> hms','angle',1,'p_angle','astropy/coordinates/angle_utilities.py',115),
+  ('angle -> dms','angle',1,'p_angle','astropy/coordinates/angle_utilities.py',116),
+  ('angle -> arcsecond','angle',1,'p_angle','astropy/coordinates/angle_utilities.py',117),
+  ('angle -> arcminute','angle',1,'p_angle','astropy/coordinates/angle_utilities.py',118),
+  ('angle -> simple','angle',1,'p_angle','astropy/coordinates/angle_utilities.py',119),
+  ('sign -> SIGN','sign',1,'p_sign','astropy/coordinates/angle_utilities.py',125),
+  ('sign -> <empty>','sign',0,'p_sign','astropy/coordinates/angle_utilities.py',126),
+  ('ufloat -> UFLOAT','ufloat',1,'p_ufloat','astropy/coordinates/angle_utilities.py',135),
+  ('ufloat -> UINT','ufloat',1,'p_ufloat','astropy/coordinates/angle_utilities.py',136),
+  ('colon -> sign UINT COLON UINT','colon',4,'p_colon','astropy/coordinates/angle_utilities.py',142),
+  ('colon -> sign UINT COLON UINT COLON ufloat','colon',6,'p_colon','astropy/coordinates/angle_utilities.py',143),
+  ('spaced -> sign UINT UINT','spaced',3,'p_spaced','astropy/coordinates/angle_utilities.py',152),
+  ('spaced -> sign UINT UINT ufloat','spaced',4,'p_spaced','astropy/coordinates/angle_utilities.py',153),
+  ('generic -> colon','generic',1,'p_generic','astropy/coordinates/angle_utilities.py',162),
+  ('generic -> spaced','generic',1,'p_generic','astropy/coordinates/angle_utilities.py',163),
+  ('generic -> sign UFLOAT','generic',2,'p_generic','astropy/coordinates/angle_utilities.py',164),
+  ('generic -> sign UINT','generic',2,'p_generic','astropy/coordinates/angle_utilities.py',165),
+  ('hms -> sign UINT HOUR','hms',3,'p_hms','astropy/coordinates/angle_utilities.py',174),
+  ('hms -> sign UINT HOUR UINT','hms',4,'p_hms','astropy/coordinates/angle_utilities.py',175),
+  ('hms -> sign UINT HOUR UINT MINUTE','hms',5,'p_hms','astropy/coordinates/angle_utilities.py',176),
+  ('hms -> sign UINT HOUR UINT MINUTE ufloat','hms',6,'p_hms','astropy/coordinates/angle_utilities.py',177),
+  ('hms -> sign UINT HOUR UINT MINUTE ufloat SECOND','hms',7,'p_hms','astropy/coordinates/angle_utilities.py',178),
+  ('hms -> generic HOUR','hms',2,'p_hms','astropy/coordinates/angle_utilities.py',179),
+  ('dms -> sign UINT DEGREE','dms',3,'p_dms','astropy/coordinates/angle_utilities.py',192),
+  ('dms -> sign UINT DEGREE UINT','dms',4,'p_dms','astropy/coordinates/angle_utilities.py',193),
+  ('dms -> sign UINT DEGREE UINT MINUTE','dms',5,'p_dms','astropy/coordinates/angle_utilities.py',194),
+  ('dms -> sign UINT DEGREE UINT MINUTE ufloat','dms',6,'p_dms','astropy/coordinates/angle_utilities.py',195),
+  ('dms -> sign UINT DEGREE UINT MINUTE ufloat SECOND','dms',7,'p_dms','astropy/coordinates/angle_utilities.py',196),
+  ('dms -> generic DEGREE','dms',2,'p_dms','astropy/coordinates/angle_utilities.py',197),
+  ('simple -> generic','simple',1,'p_simple','astropy/coordinates/angle_utilities.py',210),
+  ('simple -> generic SIMPLE_UNIT','simple',2,'p_simple','astropy/coordinates/angle_utilities.py',211),
+  ('arcsecond -> generic SECOND','arcsecond',2,'p_arcsecond','astropy/coordinates/angle_utilities.py',220),
+  ('arcminute -> generic MINUTE','arcminute',2,'p_arcminute','astropy/coordinates/angle_utilities.py',226),
 ]
diff --git a/astropy/coordinates/angle_utilities.py b/astropy/coordinates/angle_utilities.py
old mode 100755
new mode 100644
index 0a111ee..e6a7120
--- a/astropy/coordinates/angle_utilities.py
+++ b/astropy/coordinates/angle_utilities.py
@@ -1,4 +1,3 @@
-#!/usr/bin/python
 # -*- coding: utf-8 -*-
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
@@ -7,13 +6,17 @@ This module contains utility functions that are for internal use in
 astropy.coordinates.angles. Mainly they are conversions from one format
 of data to another.
 """
-from __future__ import unicode_literals
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
-import math
 import os
 from warnings import warn
 
-from .errors import *
+import numpy as np
+
+from .errors import (IllegalHourWarning, IllegalHourError,
+                     IllegalMinuteWarning, IllegalMinuteError,
+                     IllegalSecondWarning, IllegalSecondError)
 from ..utils import format_exception
 from .. import units as u
 
@@ -37,7 +40,8 @@ class _AngleParser(object):
 
     @classmethod
     def _get_simple_unit_names(cls):
-        simple_units = set(u.radian.find_equivalent_units())
+        simple_units = set(
+            u.radian.find_equivalent_units(include_prefix_units=True))
         simple_units.remove(u.deg)
         simple_units.remove(u.hourangle)
         simple_unit_names = set()
@@ -88,13 +92,17 @@ class _AngleParser(object):
                 t.value = -1.0
             return t
 
+        def t_SIMPLE_UNIT(t):
+            t.value = u.Unit(t.value)
+            return t
+        t_SIMPLE_UNIT.__doc__ = '|'.join(
+            '(?:{0})'.format(x) for x in cls._get_simple_unit_names())
+
         t_COLON = ':'
         t_DEGREE = r'd(eg(ree(s)?)?)?|°'
         t_HOUR = r'hour(s)?|h(r)?|ʰ'
-        t_MINUTE = r'm(in(ute(s)?)?)?|′|\''
-        t_SECOND = r's(ec(ond(s)?)?)?|″|\"'
-        t_SIMPLE_UNIT = '|'.join(
-            '({0})'.format(x) for x in cls._get_simple_unit_names())
+        t_MINUTE = r'm(in(ute(s)?)?)?|′|\'|ᵐ'
+        t_SECOND = r's(ec(ond(s)?)?)?|″|\"|ˢ'
 
         # A string containing ignored characters (spaces)
         t_ignore = ' '
@@ -116,6 +124,8 @@ class _AngleParser(object):
             '''
             angle : hms
                   | dms
+                  | arcsecond
+                  | arcminute
                   | simple
             '''
             p[0] = p[1]
@@ -178,8 +188,10 @@ class _AngleParser(object):
                 | sign UINT HOUR UINT MINUTE ufloat SECOND
                 | generic HOUR
             '''
-            if len(p) in (3, 4):
+            if len(p) == 3:
                 p[0] = (p[1], u.hourangle)
+            elif len(p) == 4:
+                p[0] = (p[1] * p[2], u.hourangle)
             elif len(p) in (5, 6):
                 p[0] = ((p[1] * p[2], p[4], 0.0), u.hourangle)
             elif len(p) in (7, 8):
@@ -194,8 +206,10 @@ class _AngleParser(object):
                 | sign UINT DEGREE UINT MINUTE ufloat SECOND
                 | generic DEGREE
             '''
-            if len(p) in (3, 4):
+            if len(p) == 3:
                 p[0] = (p[1], u.degree)
+            elif len(p) == 4:
+                p[0] = (p[1] * p[2], u.degree)
             elif len(p) in (5, 6):
                 p[0] = ((p[1] * p[2], p[4], 0.0), u.degree)
             elif len(p) in (7, 8):
@@ -211,6 +225,18 @@ class _AngleParser(object):
             else:
                 p[0] = (p[1], p[2])
 
+        def p_arcsecond(p):
+            '''
+            arcsecond : generic SECOND
+            '''
+            p[0] = (p[1], u.arcsecond)
+
+        def p_arcminute(p):
+            '''
+            arcminute : generic MINUTE
+            '''
+            p[0] = (p[1], u.arcminute)
+
         def p_error(p):
             raise ValueError
 
@@ -236,42 +262,32 @@ class _AngleParser(object):
                 raise ValueError(
                     "Syntax error parsing angle {0!r}".format(angle))
 
-        if unit is not None:
-            unit = u.Unit(unit)
-            if (found_unit is not None and
-                found_unit is not unit):
-                raise UnitsError(
-                    "Unit in string ({0}) does not match requested unit "
-                    "({1})".format(found_unit, unit))
-        else:
-            if found_unit is None:
-                raise UnitsError("No unit specified")
-            else:
-                unit = found_unit
+        if unit is None and found_unit is None:
+                raise u.UnitsError("No unit specified")
 
-        return found_angle, unit
+        return found_angle, found_unit
 
 
 def _check_hour_range(hrs):
     """
     Checks that the given value is in the range (-24, 24).
     """
-    if math.fabs(hrs) == 24.:
-        warn(str(IllegalHourError(hrs)))
-    elif not -24. < hrs < 24.:
+    if np.any(np.abs(hrs) == 24.):
+        warn(IllegalHourWarning(hrs, 'Treating as 24 hr'))
+    elif np.any(hrs < -24.) or np.any(hrs > 24.):
         raise IllegalHourError(hrs)
 
 
-def _check_minute_range(min):
+def _check_minute_range(m):
     """
     Checks that the given value is in the range [0,60].  If the value
     is equal to 60, then a warning is raised.
     """
-    if min == 60.:
-        warn(str(IllegalMinuteError(min)))
-    elif not 0. <= min < 60.:
-        # "Error: minutes not in range [0,60) ({0}).".format(min))
-        raise IllegalMinuteError(min)
+    if np.any(m == 60.):
+        warn(IllegalMinuteWarning(m, 'Treating as 0 min, +1 hr/deg'))
+    elif np.any(m < -60.) or np.any(m > 60.):
+        # "Error: minutes not in range [-60,60) ({0}).".format(min))
+        raise IllegalMinuteError(m)
 
 
 def _check_second_range(sec):
@@ -279,10 +295,10 @@ def _check_second_range(sec):
     Checks that the given value is in the range [0,60].  If the value
     is equal to 60, then a warning is raised.
     """
-    if sec == 60.:
-        warn(str(IllegalSecondError(sec)))
-    elif not 0. <= sec < 60.:
-        # "Error: seconds not in range [0,60) ({0}).".format(sec))
+    if np.any(sec == 60.):
+        warn(IllegalSecondWarning(sec, 'Treating as 0 sec, +1 min'))
+    elif np.any(sec < -60.) or np.any(sec > 60.):
+        # "Error: seconds not in range [-60,60) ({0}).".format(sec))
         raise IllegalSecondError(sec)
 
 
@@ -336,16 +352,13 @@ def degrees_to_dms(d):
     Convert a floating-point degree value into a ``(degree, arcminute,
     arcsecond)`` tuple.
     """
-    sign = math.copysign(1.0, d)
+    sign = np.copysign(1.0, d)
 
-    (df, d) = math.modf(abs(d))  # (degree fraction, degree)
-    (mf, m) = math.modf(df * 60.)  # (minute fraction, minute)
+    (df, d) = np.modf(np.abs(d))  # (degree fraction, degree)
+    (mf, m) = np.modf(df * 60.)  # (minute fraction, minute)
     s = mf * 60.
 
-    _check_minute_range(m)
-    _check_second_range(s)
-
-    return (float(sign * d), int(sign * m), sign * s)
+    return np.floor(sign * d), sign * np.floor(m), sign * s
 
 
 def dms_to_degrees(d, m, s):
@@ -357,15 +370,15 @@ def dms_to_degrees(d, m, s):
     _check_second_range(s)
 
     # determine sign
-    sign = math.copysign(1.0, d)
+    sign = np.copysign(1.0, d)
 
     # TODO: This will fail if d or m have values after the decimal
     # place
 
     try:
-        d = int(abs(d))
-        m = int(abs(m))
-        s = float(abs(s))
+        d = np.floor(np.abs(np.asarray(d)))
+        m = np.floor(np.abs(np.asarray(m)))
+        s = np.abs(s)
     except ValueError:
         raise ValueError(format_exception(
             "{func}: dms values ({1[0]},{2[1]},{3[2]}) could not be "
@@ -382,15 +395,15 @@ def hms_to_hours(h, m, s):
     check_hms_ranges(h, m, s)
 
     # determine sign
-    sign = math.copysign(1.0, h)
+    sign = np.copysign(1.0, h)
 
     # TODO: This will fail if d or m have values after the decimal
     # place
 
     try:
-        h = int(abs(h))
-        m = int(abs(m))
-        s = float(abs(s))
+        h = np.floor(np.abs(h))
+        m = np.floor(np.abs(m))
+        s = np.abs(s)
     except ValueError:
         raise ValueError(format_exception(
             "{func}: HMS values ({1[0]},{2[1]},{3[2]}) could not be "
@@ -446,15 +459,13 @@ def hours_to_hms(h):
     second)`` tuple.
     """
 
-    sign = math.copysign(1.0, h)
+    sign = np.copysign(1.0, h)
 
-    (hf, h) = math.modf(abs(h))  # (degree fraction, degree)
-    (mf, m) = math.modf(hf * 60.0)  # (minute fraction, minute)
+    (hf, h) = np.modf(np.abs(h))  # (degree fraction, degree)
+    (mf, m) = np.modf(hf * 60.0)  # (minute fraction, minute)
     s = mf * 60.0
 
-    check_hms_ranges(h, m, s)  # throws exception if out of range
-
-    return (float(sign * h), int(sign * m), sign * s)
+    return (np.floor(sign * h), sign * np.floor(m), sign * s)
 
 
 def radians_to_degrees(r):
@@ -490,51 +501,23 @@ def radians_to_dms(r):
     return degrees_to_dms(degrees)
 
 
-def hours_to_string(h, precision=5, pad=False, sep=('h', 'm', 's')):
+def sexagesimal_to_string(values, precision=None, pad=False, sep=(':',),
+                          fields=3):
     """
-    Takes a decimal hour value and returns a string formatted as hms with
-    separator specified by the 'sep' parameter.
+    Given an already separated tuple of sexagesimal values, returns
+    a string.
 
-    TODO: More detailed description here!
+    See `hours_to_string` and `degrees_to_string` for a higher-level
+    interface to this functionality.
     """
 
-    if pad:
-        if h < 0:
-            pad = 3
-        else:
-            pad = 2
-    else:
-        pad = 0
-
-    if not isinstance(sep, tuple):
-        # Note: This will convert 'hms' to ('h', 'm', 's'); a potentially nice
-        # shortcut
-        sep = tuple(sep)
-
-    if len(sep) == 1:
-        sep = sep + (sep[0], '')
-    elif len(sep) == 2:
-        sep = sep + ('',)
-    elif len(sep) != 3:
-        raise ValueError(
-            "Invalid separator specification for converting angle to string.")
-
-    literal = ('{0:0{pad}.0f}{sep[0]}{1:02d}{sep[1]}{2:0{width}.{precision}f}'
-               '{sep[2]}')
-    h, m, s = hours_to_hms(h)
-    return literal.format(h, abs(m), abs(s), sep=sep, pad=pad,
-                          width=(precision + 3 if precision > 0 else 2),
-                          precision=precision)
-
-
-def degrees_to_string(d, precision=5, pad=False, sep=':'):
-    """
-    Takes a decimal hour value and returns a string formatted as dms with
-    separator specified by the 'sep' parameter.
-    """
+    # If the coordinates are negative, we need to take the absolute value of
+    # the (arc)minutes and (arc)seconds. We need to use np.abs because abs(-0)
+    # is -0.
+    values = (values[0], np.abs(values[1]), np.abs(values[2]))
 
     if pad:
-        if d < 0:
+        if values[0] < 0:
             pad = 3
         else:
             pad = 2
@@ -552,112 +535,111 @@ def degrees_to_string(d, precision=5, pad=False, sep=':'):
         raise ValueError(
             "Invalid separator specification for converting angle to string.")
 
-    literal = ('{0:0{pad}.0f}{sep[0]}{1:02d}{sep[1]}{2:0{width}.{precision}f}'
-               '{sep[2]}')
-    d, m, s = degrees_to_dms(d)
-    return literal.format(d, abs(m), abs(s), sep=sep, pad=pad,
-                          width=(precision + 3 if precision > 0 else 2),
-                          precision=precision)
-
-
-#<----------Spherical angular distances------------->
-def small_angle_sphere_dist(lon1, lat1, lon2, lat2):
-    """
-    Euclidean angular distance "on a sphere" - only valid on sphere in the
-    small-angle approximation.
-
-    .. warning::
-        Do not use this unless you know small-angle is a valid approximation
-        for your problem and performance is a major conern.  In general this
-        is very wrong.
-
-    Inputs must be in radians.
-    """
-
-    from math import cos
-
-    dlat = lat2 - lat1
-    dlon = (lon2 - lon1) * cos((lat1 + lat2) / 2.)
-
-    return (dlat ** 2 + dlon ** 2) ** 0.5
+    if fields < 1 or fields > 3:
+        raise ValueError(
+            "fields must be 1, 2, or 3")
+
+    # Simplify the expression based on the requested precision.  For
+    # example, if the seconds will round up to 60, we should convert
+    # it to 0 and carry upwards.  If the field is hidden (by the
+    # fields kwarg) we round up around the middle, 30.0.
+    if precision is None:
+        rounding_thresh = 60.0 - (10.0 ** -5)
+    else:
+        rounding_thresh = 60.0 - (10.0 ** -precision)
+
+    values = list(values)
+    if fields == 3 and values[2] >= rounding_thresh:
+        values[2] = 0.0
+        values[1] += 1.0
+    elif fields < 3 and values[2] >= 30.0:
+        values[1] += 1.0
+
+    if fields >= 2 and int(values[1]) >= 60.0:
+        values[1] = 0.0
+        values[0] += 1.0
+    elif fields < 2 and int(values[1]) >= 30.0:
+        values[0] += 1.0
+
+    literal = []
+    last_value = ''
+    literal.append('{0:0{pad}.0f}{sep[0]}')
+    if fields >= 2:
+        literal.append('{1:02d}{sep[1]}')
+    if fields == 3:
+        if precision is None:
+            last_value = '{0:g}'.format(abs(values[2]))
+        else:
+            last_value = '{0:.{precision}f}'.format(
+                abs(values[2]), precision=precision)
+        if len(last_value) == 1 or last_value[1] == '.':
+            last_value = '0' + last_value
+        literal.append('{last_value}{sep[2]}')
+    literal = ''.join(literal)
+    return literal.format(values[0], int(abs(values[1])), abs(values[2]),
+                          sep=sep, pad=pad,
+                          last_value=last_value)
 
 
-def simple_sphere_dist(lon1, lat1, lon2, lat2):
+def hours_to_string(h, precision=5, pad=False, sep=('h', 'm', 's'),
+                    fields=3):
     """
-    Simple formula for angular distance on a sphere: numerically unstable
-    for small distances.
+    Takes a decimal hour value and returns a string formatted as hms with
+    separator specified by the 'sep' parameter.
 
-    Inputs must be in radians.
+    `h` must be a scalar.
     """
-
-    # FIXME: array: use numpy functions
-    from math import acos, sin, cos
-
-    cdlon = cos(lon2 - lon1)
-    return acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(-lat2) * cdlon)
+    h, m, s = hours_to_hms(h)
+    return sexagesimal_to_string((h, m, s), precision=precision, pad=pad,
+                                 sep=sep, fields=fields)
 
 
-def haversine_sphere_dist(lon1, lat1, lon2, lat2):
+def degrees_to_string(d, precision=5, pad=False, sep=':', fields=3):
     """
-    Haversine formula for angular distance on a sphere: more stable at poles
+    Takes a decimal hour value and returns a string formatted as dms with
+    separator specified by the 'sep' parameter.
 
-    Inputs must be in radians.
+    `d` must be a scalar.
     """
+    d, m, s = degrees_to_dms(d)
+    return sexagesimal_to_string((d, m, s), precision=precision, pad=pad,
+                                 sep=sep, fields=fields)
 
-    # FIXME: array: use numpy functions
-    from math import asin, sin, cos
-
-    sdlat = sin((lat2 - lat1) / 2)
-    sdlon = sin((lon2 - lon1) / 2)
-    coslats = cos(lat1) * cos(lat2)
-
-    return 2 * asin((sdlat ** 2 + coslats * sdlon ** 2) ** 0.5)
-
-
-def haversine_atan_sphere_dist(lon1, lat1, lon2, lat2):
-    """
-    Haversine formula for angular distance on a sphere: more stable at poles.
-    This version uses arctan instead of arcsin and thus does better with sign
-    conventions.
 
-    Inputs must be in radians.
+def angular_separation(lon1, lat1, lon2, lat2):
     """
+    Angular separation between two points on a sphere
 
-    # FIXME: array: use numpy functions
-    from math import atan2, sin, cos
-
-    sdlat = sin((lat2 - lat1) / 2)
-    sdlon = sin((lon2 - lon1) / 2)
-    coslats = cos(lat1) * cos(lat2)
-
-    numerator = sdlat ** 2 + coslats * sdlon ** 2
-
-    return 2 * atan2(numerator ** 0.5, (1 - numerator) ** 0.5)
-
+    Parameters
+    ----------
+    lon1, lat1, lon2, lat2 : Angle, Quantity or float
+        Longitude and latitude of the two points.  Quantities should be in
+        angular units; floats in radians
 
-def vincenty_sphere_dist(lon1, lat1, lon2, lat2):
-    """
-    Vincenty formula for angular distance on a sphere: stable at poles and
-    antipodes but more complex/computationally expensive.
+    Returns
+    -------
+    angular separation : Quantity or float
+        Type depends on input; Quantity in angular units, or float in radians
 
-    Note that this is the only version actually used in the `AngularSeparation`
-    classes, so the other `*_spher_dist` functions are only for possible
-    future internal use.
+    Notes
+    -----
+    The angular separation is calculated using the Vincenty formula [1]_,
+    which is slighly more complex and computationally expensive than
+    some alternatives, but is stable at at all distances, including the
+    poles and antipodes.
 
-    Inputs must be in radians.
+    .. [1] http://en.wikipedia.org/wiki/Great-circle_distance
     """
-    #FIXME: array: use numpy functions
-    from math import atan2, sin, cos
 
-    sdlon = sin(lon2 - lon1)
-    cdlon = cos(lon2 - lon1)
-    slat1 = sin(lat1)
-    slat2 = sin(lat2)
-    clat1 = cos(lat1)
-    clat2 = cos(lat2)
+    sdlon = np.sin(lon2 - lon1)
+    cdlon = np.cos(lon2 - lon1)
+    slat1 = np.sin(lat1)
+    slat2 = np.sin(lat2)
+    clat1 = np.cos(lat1)
+    clat2 = np.cos(lat2)
 
     num1 = clat2 * sdlon
     num2 = clat1 * slat2 - slat1 * clat2 * cdlon
     denominator = slat1 * slat2 + clat1 * clat2 * cdlon
 
-    return atan2((num1 ** 2 + num2 ** 2) ** 0.5, denominator)
+    return np.arctan2(np.sqrt(num1 ** 2 + num2 ** 2), denominator)
diff --git a/astropy/coordinates/angles.py b/astropy/coordinates/angles.py
index d84cc42..a068fad 100644
--- a/astropy/coordinates/angles.py
+++ b/astropy/coordinates/angles.py
@@ -5,208 +5,295 @@
 This module contains the fundamental classes used for representing
 coordinates in astropy.
 """
-from __future__ import unicode_literals
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 import math
 
 import numpy as np
 
+from ..extern import six
 from . import angle_utilities as util
-from .errors import *
 from .. import units as u
-from ..utils.compat.odict import OrderedDict
+from ..utils import deprecated
 
-__all__ = ['Angle', 'RA', 'Dec', 'AngularSeparation']
 
-TWOPI = math.pi * 2.0  # no need to calculate this all the time
+__all__ = ['Angle', 'Latitude', 'Longitude']
 
 
-class Angle(object):
-    """ An angle.
+TWOPI = math.pi * 2.0  # no need to calculate this all the time
 
-    An angle can be specified either as a float, tuple (see below),
-    or string.  If A string, it must be in one of the following formats:
 
-    * '1:2:3.4'
-    * '1 2 3.4'
-    * '1h2m3.4s'
-    * '1d2m3.4s'
+class Angle(u.Quantity):
+    """
+    One or more angular value(s) with units equivalent to radians or degrees.
+
+    An angle can be specified either as an array, scalar, tuple (see
+    below), string, `~astropy.units.Quantity` or another
+    `~astropy.coordinates.Angle`.
+
+    The input parser is flexible and supports a variety of formats::
+
+      Angle('10.2345d')
+      Angle(['10.2345d', '-20d'])
+      Angle('1:2:30.43 degrees')
+      Angle('1 2 0 hours')
+      Angle(np.arange(1, 8), unit=u.deg)
+      Angle(u'1°2′3″')
+      Angle('1d2m3.4s')
+      Angle('-1h2m3s')
+      Angle((-1, 2, 3), unit=u.deg)  # (d, m, s)
+      Angle(10.2345 * u.deg)
+      Angle(Angle(10.2345 * u.deg))
 
     Parameters
     ----------
-    angle : float, int, str, tuple
-        The angle value. If a tuple, will be interpreted as (h, m s) or
-        (d, m, s) depending on `unit`. If a string, it will be interpreted
-        following the rules described above.
-    unit : `~astropy.units.UnitBase`, str
-        The unit of the value specified for the angle.  This may be any
-        string that `~astropy.units.Unit` understands, but it is better to
-        give an actual unit object.  Must be one of `~astropy.units.degree`,
-        `~astropy.units.radian`, or `~astropy.units.hour`.
-    bounds : tuple
-        A tuple indicating the upper and lower value that the new angle object may
-        have.
+    angle : array, scalar, Quantity, Angle
+        The angle value. If a tuple, will be interpreted as ``(h, m
+        s)`` or ``(d, m, s)`` depending on `unit`. If a string, it
+        will be interpreted following the rules described above.
 
-    Raises
-    ------
-    `~astropy.coordinates.errors.UnitsError`
-        If a unit is not provided or it is not hour, radian, or degree.
+        If `angle` is a sequence or array of strings, the resulting
+        values will be in the given `unit`, or if None is provided,
+        the unit will be taken from the first given value.
 
-    """
+    unit : `~astropy.units.UnitBase`, str, optional
+        The unit of the value specified for the angle.  This may be
+        any string that `~astropy.units.Unit` understands, but it is
+        better to give an actual unit object.  Must be an angular
+        unit.
 
-    def __init__(self, angle, unit=None, bounds=(-360, 360)):
-        from ..utils import isiterable
+    dtype : ~numpy.dtype, optional
+        See `~astropy.units.Quantity`.
 
-        self._bounds = bounds
+    copy : bool, optional
+        See `~astropy.units.Quantity`.
 
-        if isinstance(angle, Angle):
-            angle = angle.radians
-            unit = u.radian
-
-        self.is_array = (isiterable(angle) and
-                         not isinstance(angle, basestring) and
-                         not isinstance(angle, tuple))
-
-        # short circuit arrays for now
-        if self.is_array:
-            raise NotImplementedError("Angles as arrays are not yet supported.")
+    Raises
+    ------
+    `~astropy.units.core.UnitsError`
+        If a unit is not provided or it is not an angular unit.
+    """
+    _include_easy_conversion_members = True
+
+    def __new__(cls, angle, unit=None, dtype=None, copy=True):
+        unit = cls._convert_unit_to_angle_unit(unit)
+        if (unit is not None and
+            not unit.is_equivalent(u.radian)):
+            raise u.UnitsError(
+                "Given unit {0} is not convertible to an angle".format(
+                    unit))
+
+        if isinstance(angle, u.Quantity):
+            # This includes Angle subclasses as well
+            if unit is not None:
+                angle = angle.to(unit).value
+            else:
+                unit = angle.unit
+                unit = cls._convert_unit_to_angle_unit(unit)
+                if not unit.is_equivalent(u.radian):
+                    raise u.UnitsError(
+                        "Given quantity {0} is not convertible to an angle".format(
+                            angle))
+
+                angle = angle.value
+
+        angle = cls._tuple_to_float(angle, unit)
+
+        try:
+            angle = np.asarray(angle)
+        except ValueError as e:
+            raise TypeError(str(e))
+
+        if angle.dtype.type in (np.string_, np.unicode_):
+            # We need to modify this value from within
+            # convert_string_to_angle, and the only way to do that
+            # across Python 2.6 - 3.3 is to use this "store it in a
+            # list" trick.
+            determined_unit = [unit]
+
+            def convert_string_to_angle(x):
+                ang, new_unit = util.parse_angle(six.text_type(x), unit)
+                if determined_unit[0] is None:
+                    determined_unit[0] = new_unit
+                if new_unit is not None:
+                    return new_unit.to(
+                        determined_unit[0], cls._tuple_to_float(ang, new_unit))
+                else:
+                    return cls._tuple_to_float(ang, determined_unit[0])
+
+            convert_string_to_angle_ufunc = np.vectorize(
+                convert_string_to_angle,
+                otypes=[np.float_])
+            angle = convert_string_to_angle_ufunc(angle)
+            unit = determined_unit[0]
+
+        elif angle.dtype.kind not in 'iuf':
+            raise TypeError("Unsupported dtype '{0}'".format(angle.dtype))
 
-        # -------------------------------
-        # unit validation and angle value
-        # -------------------------------
-        if unit is not None:
-            unit = u.Unit(unit)
+        if unit is None:
+            raise u.UnitsError("No unit was specified")
 
-        if unit is u.hour:
-            unit = u.hourangle
+        self = super(Angle, cls).__new__(
+            cls, angle, unit, dtype=dtype, copy=copy)
 
-        if isinstance(angle, basestring):
-            angle, found_unit = util.parse_angle(angle, unit)
-            unit = found_unit
+        return self
 
+    @staticmethod
+    def _tuple_to_float(angle, unit):
+        """
+        Converts an angle represented as a 3-tuple into a floating
+        point number in the given unit.
+        """
         if isinstance(angle, tuple):
+            # TODO: Numpy array of tuples?
             if unit is u.hourangle:
                 util.check_hms_ranges(*angle)
                 angle = util.hms_to_hours(*angle)
             elif unit is u.degree:
                 angle = util.dms_to_degrees(*angle)
             else:
-                raise UnitsError(
+                raise u.UnitsError(
                     "Can not parse '{0}' as unit '{1}'".format(
                         angle, unit))
+        return angle
 
-        if unit is None:
-            raise UnitsError("No unit was specified in Angle initializer; the "
-                "unit parameter should be an object from the  astropy.units "
-                "module (e.g. 'from astropy import units as u', then use "
-                "'u.degree').")
+    @staticmethod
+    def _convert_unit_to_angle_unit(unit):
+        if unit is not None:
+            unit = u.Unit(unit)
 
-        if self.is_array:
-            pass  # already performed conversions to radians above
-        else:
-            self._radians = unit.to(u.radian, angle)
-
-        # ---------------
-        # bounds checking
-        # ---------------
-        # TODO: handle arrays
-        # handle bounds units, convert to radians
-        if bounds == None:
-            pass  # no range checking performed
-        else:
-            try:
-                if unit is u.radian:
-                    lower_bound = bounds[0]
-                    upper_bound = bounds[1]
-                elif unit is u.degree:
-                    lower_bound = math.radians(bounds[0])
-                    upper_bound = math.radians(bounds[1])
-                elif unit is u.hourangle:
-                    lower_bound = math.radians(bounds[0] * 15.)
-                    upper_bound = math.radians(bounds[1] * 15.)
-                # invalid units handled above
-            except TypeError:
-                raise TypeError("Bounds specified for Angle must be a two element list, "
-                                "e.g. [0,360] (was given '{0}').".format(type(bounds).__name__))
-
-            # bounds check
-            if lower_bound < self._radians < upper_bound:
-                pass  # looks good
-            else:
-                if self._radians > upper_bound:
-                    while True:
-                        self._radians -= TWOPI
-                        if self._radians < lower_bound:
-                            raise BoundsError("The angle given falls outside of the specified bounds.")
-                        elif lower_bound < self._radians < upper_bound:
-                            break
-
-                if self._radians < lower_bound:
-                    while True:
-                        self._radians += TWOPI
-                        if self._radians > upper_bound:
-                            raise BoundsError("The angle given falls outside of the specified bounds.")
-                        elif lower_bound < self._radians < upper_bound:
-                            break
+            if unit is u.hour:
+                unit = u.hourangle
+        return unit
 
-    @property
-    def bounds(self):
-        """" The angle's bounds, an immutable property. """
-        return self._bounds
+    def __quantity_view__(self, obj, unit):
+        unit = self._convert_unit_to_angle_unit(unit)
+        if unit is not None and unit.is_equivalent(u.radian):
+            result = obj.view(Angle)
+            return result
+        return super(Angle, self).__quantity_view__(
+            obj, unit)
 
-    @property
-    def degrees(self):
-        """ The angle's value in degrees (read-only property). """
-        return math.degrees(self.radians)  # converts radians to degrees
+    def __quantity_instance__(self, val, unit, **kwargs):
+        unit = self._convert_unit_to_angle_unit(unit)
+        if unit is not None and unit.is_equivalent(u.radian):
+            return self.__class__(val, unit, **kwargs)
+        return super(Angle, self).__quantity_instance__(val, unit, **kwargs)
 
-    @property
-    def radians(self):
-        """ The angle's value in radians (read-only property). """
-        return self._radians
+    def __array_wrap__(self, obj, context=None):
+        obj = super(Angle, self).__array_wrap__(obj, context=context)
+
+        if isinstance(obj, Angle):
+            return Angle(obj.value, obj.unit)
+
+        return obj
+
+    def __add__(self, other):
+        return super(Angle, self).__add__(other)
+
+    def __sub__(self, other):
+        return super(Angle, self).__sub__(other)
+
+    def __mul__(self, other):
+        if isinstance(other, type(self)):
+            raise TypeError(
+                "multiplication is not supported between two {0} "
+                "objects".format(
+                    type(self).__name__))
+        return super(Angle, self).__mul__(other)
+
+    def __div__(self, other):
+        if isinstance(other, type(self)):
+            raise TypeError(
+                "division is not supported between two {0} objects".format(
+                    type(self).__name__))
+        return super(Angle, self).__div__(other)
+
+    __truediv__ = __div__
 
     @property
-    def hours(self):
-        """ The angle's value in hours (read-only property). """
-        return util.radians_to_hours(self.radians)
+    def hour(self):
+        """
+        The angle's value in hours (read-only property).
+        """
+        return self.hourangle
 
     @property
     def hms(self):
-        """ The angle's value in hours, and print as an (h,m,s) tuple (read-only property). """
-        return util.radians_to_hms(self.radians)
+        """
+        The angle's value in hours, as a ``(h, m, s)`` tuple
+        (read-only property).
+        """
+        return util.hours_to_hms(self.hourangle)
 
     @property
     def dms(self):
-        """ The angle's value in degrees, and print as an (d,m,s) tuple (read-only property). """
-        return util.radians_to_dms(self.radians)
+        """
+        The angle's value in degrees, as a ``(d, m, s)`` tuple
+        (read-only property).
+        """
+        return util.degrees_to_dms(self.degree)
 
-    def format(self, unit=u.degree, decimal=False, sep='fromunit', precision=5,
-               alwayssign=False, pad=False):
+    def to_string(self, unit=None, decimal=False, sep='fromunit',
+                  precision=None, alwayssign=False, pad=False,
+                  fields=3, format=None):
         """ A string representation of the angle.
 
         Parameters
         ----------
-        units : `~astropy.units.UnitBase`
-            Specifies the units, should be 'degree', 'hour', or 'radian'
-        decimal : bool
+        units : `~astropy.units.UnitBase`, optional
+            Specifies the units.  Must be an angular unit.  If not
+            provided, the unit used to initialize the angle will be
+            used.
+
+        decimal : bool, optional
             If True, a decimal respresentation will be used, otherwise
             the returned string will be in sexagesimal form.
-        sep : str
-            The separator between numbers in a sexagesimal representation.
-            E.g., if it is ':', the result is "12:41:11.1241". Also accepts
-            2 or 3 separators. E.g., ``sep='hms'`` would give the result
-            "12h41m11.1241s", or sep='-:' would yield "11-21:17.124".
-            Alternatively, the special string 'fromunit' means 'dms' if
-            the unit is degrees, or 'hms' if the unit is hours.
-        precision : int
-            The level of decimal precision.  if `decimal` is True, this is
-            the raw precision, otherwise it gives the precision of the last
-            place of the sexagesimal representation (seconds).
-        alwayssign : bool
-            If True, include the sign no matter what.  If False, only
-            include the sign if it is necessary (negative).
-        pad : bool
-            If True, include leading zeros when needed to ensure a fixed
-            number of characters for sexagesimal representation.
+
+        sep : str, optional
+            The separator between numbers in a sexagesimal
+            representation.  E.g., if it is ':', the result is
+            "12:41:11.1241". Also accepts 2 or 3 separators. E.g.,
+            ``sep='hms'`` would give the result "12h41m11.1241s", or
+            sep='-:' would yield "11-21:17.124".  Alternatively, the
+            special string 'fromunit' means 'dms' if the unit is
+            degrees, or 'hms' if the unit is hours.
+
+        precision : int, optional
+            The level of decimal precision.  If `decimal` is True,
+            this is the raw precision, otherwise it gives the
+            precision of the last place of the sexagesimal
+            representation (seconds).  If `None`, or not provided, the
+            number of decimal places is determined by the value, and
+            will be between 0-8 decimal places as required.
+
+        alwayssign : bool, optional
+            If `True`, include the sign no matter what.  If `False`,
+            only include the sign if it is negative.
+
+        pad : bool, optional
+            If `True`, include leading zeros when needed to ensure a
+            fixed number of characters for sexagesimal representation.
+
+        fields : int, optional
+            Specifies the number of fields to display when outputting
+            sexagesimal notation.  For example:
+
+                - fields == 1: `'5d'`
+                - fields == 2: `'5d45m'`
+                - fields == 3: `'5d45m32.5s'`
+
+            By default, all fields are displayed.
+
+        format : str, optional
+            The format of the result.  If not provided, an unadorned
+            string is returned.  Supported values are:
+
+            - 'latex': Return a LaTeX-formatted string
+
+            - 'unicode': Return a string containing non-ASCII unicode
+              characters, such as the degree symbol
 
         Returns
         -------
@@ -214,492 +301,420 @@ class Angle(object):
             A string representation of the angle.
 
         """
-        unit = u.Unit(unit)
-
+        if unit is None:
+            unit = self.unit
+        unit = self._convert_unit_to_angle_unit(unit)
+
+        separators = {
+            None: {
+                u.degree: 'dms',
+                u.hourangle: 'hms'},
+            'latex': {
+                u.degree: [r'^\circ', r'{}^\prime', r'{}^{\prime\prime}'],
+                u.hourangle: [r'^\mathrm{h}', r'^\mathrm{m}', r'^\mathrm{s}']},
+            'unicode': {
+                u.degree: '°′″',
+                u.hourangle: 'ʰᵐˢ'}
+            }
+
+        if sep == 'fromunit':
+            if format not in separators:
+                raise ValueError("Unknown format '{0}'".format(format))
+            seps = separators[format]
+            if unit in seps:
+                sep = seps[unit]
+
+        # Create an iterator so we can format each element of what
+        # might be an array.
         if unit is u.degree:
             if decimal:
-                res = ("{0:0." + str(precision) + "f}").format(self.degrees)
+                values = self.degree
+                if precision is not None:
+                    func = ("{0:0." + str(precision) + "f}").format
+                else:
+                    func = '{0:g}'.format
             else:
                 if sep == 'fromunit':
                     sep = 'dms'
-                res = util.degrees_to_string(self.degrees,
-                                             precision=precision, sep=sep,
-                                             pad=pad)
+                values = self.degree
+                func = lambda x: util.degrees_to_string(
+                    x, precision=precision, sep=sep, pad=pad,
+                    fields=fields)
 
-        elif unit is u.radian:
+        elif unit is u.hourangle:
             if decimal:
-                res = ("{0:0." + str(precision) + "f}").format(self.radians)
-            elif sep == 'fromunit':
-                res = ("{0:0." + str(precision) + "f}radian").format(
-                        self.radians)
+                values = self.hour
+                if precision is not None:
+                    func = ("{0:0." + str(precision) + "f}").format
+                else:
+                    func = '{0:g}'.format
             else:
-                raise ValueError('Radians cannot be in sexagesimal representation')
+                if sep == 'fromunit':
+                    sep = 'hms'
+                values = self.hour
+                func = lambda x: util.hours_to_string(
+                    x, precision=precision, sep=sep, pad=pad,
+                    fields=fields)
 
-        elif unit is u.hour:
+        elif unit.is_equivalent(u.radian):
             if decimal:
-                res = ("{0:0." + str(precision) + "f}").format(self.hours)
+                values = self.to(unit).value
+                if precision is not None:
+                    func = ("{0:1." + str(precision) + "f}").format
+                else:
+                    func = "{0:g}".format
+            elif sep == 'fromunit':
+                values = self.to(unit).value
+                unit_string = unit.to_string(format=format)
+                if format == 'latex':
+                    unit_string = unit_string[1:-1]
+
+                if precision is not None:
+                    def plain_unit_format(val):
+                        return ("{0:0." + str(precision) + "f}{1}").format(
+                            val, unit_string)
+                    func = plain_unit_format
+                else:
+                    def plain_unit_format(val):
+                        return "{0:g}{1}".format(val, unit_string)
+                    func = plain_unit_format
             else:
-                if sep == 'fromunit':
-                    sep = 'hms'
-                res = util.hours_to_string(self.hours, precision=precision,
-                                           sep=sep, pad=pad)
-        else:
-            raise UnitsError("The unit value provided was not one of u.degree, u.hour, u.radian'.")
+                raise ValueError(
+                    "'{0}' can not be represented in sexagesimal "
+                    "notation".format(
+                        unit.name))
 
-        if alwayssign and not res.startswith('-'):
-            return '+' + res
         else:
-            return res
-
-    def __str__(self):
-        return self.format()
+            raise u.UnitsError(
+                "The unit value provided is not an angular unit.")
+
+        def do_format(val):
+            s = func(float(val))
+            if alwayssign and not s.startswith('-'):
+                s = '+' + s
+            if format == 'latex':
+                s = '${0}$'.format(s)
+            return s
+
+        format_ufunc = np.vectorize(do_format, otypes=[np.object])
+        result = format_ufunc(values)
+        if result.ndim == 0:
+            result = result[()]
+        return result
+
+    def wrap_at(self, wrap_angle, inplace=False):
+        """
+        Wrap the Angle object at the given ``wrap_angle``.
 
-    # ----------------------------------------------------------------------------
-    # Emulating numeric types
-    # -----------------------
-    # Ref: http://docs.python.org/reference/datamodel.html#emulating-numeric-types
-    # ----------------------------------------------------------------------------
+        This method forces all the angle values to be within a contiguous 360 degree
+        range so that ``wrap_angle - 360d <= angle < wrap_angle``.  By default a new
+        Angle object is returned, but if the ``inplace`` argument is ``True`` then
+        the Angle object is wrapped in place and nothing is returned.
 
-    # Addition
-    def __add__(self, other):
-        if isinstance(other, type(self)):
-            if self.bounds != other.bounds:
-                msg = "Can't add angles because bounds don't match: {0} and {1}"
-                raise ValueError(msg.format(self.bounds, other.bounds))
-            else:
-                return Angle(self.radians + other.radians, unit=u.radian,
-                             bounds=self.bounds)
-        else:
-            raise NotImplementedError("An {0} object can only be added to another "
-                                      "{0} object.".format(type(self).__name__))
+        For instance::
 
-    def __radd__(self, other):
-        return self.__add__(other)
+          >>> from astropy.coordinates import Angle
+          >>> import astropy.units as u
+          >>> a = Angle([-20.0, 150.0, 350.0] * u.deg)
 
-    # Subtraction
-    def __sub__(self, other):
-        if isinstance(other, type(self)):
-            if self.bounds != other.bounds:
-                msg = "Can't add angles because bounds don't match: {0} and {1}"
-                raise ValueError(msg.format(self.bounds, other.bounds))
-            else:
-                return Angle(self.radians - other.radians, unit=u.radian,
-                             bounds=self.bounds)
-        else:
-            raise NotImplementedError("An {0} object can only be subtracted from another "
-                                      "{0} object.".format(type(self).__name__))
+          >>> a.wrap_at(360 * u.deg).degree  # Wrap into range 0 to 360 degrees
+          array([ 340.,  150.,  350.])
 
-    def __rsub__(self, other):
-        if isinstance(other, type(self)):
-            if self.bounds != other.bounds:
-                msg = "Can't add angles because bounds don't match: {0} and {1}"
-                raise ValueError(msg.format(self.bounds, other.bounds))
-            else:
-                return Angle(other.radians - self.radians, unit=u.radian, bounds=self.bounds)
-        else:
-            raise NotImplementedError("An {0} object can only be subtracted from another "
-                                      "{0} object.".format(type(self).__name__))
+          >>> a.wrap_at('180d', inplace=True)  # Wrap into range -180 to 180 degrees
+          >>> a.degree
+          array([ -20.,  150.,  -10.])
 
-    # Multiplication
-    def __mul__(self, other):
-        if isinstance(other, type(self)):
-            raise NotImplementedError("Multiplication is not supported between two {0} "
-                                      "objects ".format(type(self).__name__))
-        elif type(other) in [float, int]:
-            return Angle(self.radians * other, unit=u.radian)
-        else:
-            raise NotImplementedError("An {0} object can only be multiplied by a float or integer.".format(type(self).__name__))
+        Parameters
+        ----------
+        wrap_angle : str, Angle, angular Quantity
+            Specifies a single value for the wrap angle.  This can be any
+            object that can initialize an Angle object, e.g. '180d', 180 * u.deg,
+            or Angle(180, unit=u.deg).
 
-    def __rmul__(self, other):
-        return self.__mul__(other)
+        inplace : bool
+            If ``True`` then wrap the object in place instead of returning a new Angle
 
-    # Division
-    def __div__(self, other):
-        if isinstance(other, type(self)):
-            raise NotImplementedError("Division is not supported between two {0} "
-                                      "objects.".format(type(self).__name__))
-        elif type(other) in [float, int]:
-            return Angle(self.radians / other, unit=u.radian)
-        else:
-            raise NotImplementedError("An {0} object can only be divided by a float or integer.".format(type(self).__name__))
+        Returns
+        -------
+        out : Angle or None
+            If ``inplace is False`` (default), return new Angle object with angles
+            wrapped accordingly.  Otherwise wrap in place and return None.
+        """
+        wrap_angle = Angle(wrap_angle)  # Convert to an Angle
+        wrapped = np.mod(self - wrap_angle, 360.0 * u.deg) - (360.0 * u.deg - wrap_angle)
 
-    def __rdiv__(self, other):
-        if isinstance(other, type(self)):
-            raise NotImplementedError("Division is not supported between two {0} "
-                                      "objects.".format(type(self).__name__))
-        elif type(other) in [float, int]:
-            return Angle(other / self.radians, unit=u.radian)
+        if inplace:
+            self[()] = wrapped
         else:
-            raise NotImplementedError("An {0} object can only be divided by a float or integer.".format(type(self).__name__))
-
-    def __truediv__(self, other):
-        return self.__div__(other)
+            return wrapped
 
-    def __rtruediv__(self, other):
-        return self.__rdiv__(other)
+    def is_within_bounds(self, lower=None, upper=None):
+        """
+        Check if all angle(s) satisfy ``lower <= angle < upper``
 
-    # other operations
+        If ``lower`` is not specified (or ``None``) then no lower bounds check is
+        performed.  Likewise ``upper`` can be left unspecified.  For example::
 
-    def __neg__(self):
-        return Angle(-self.radians, unit=u.radian)
+          >>> from astropy.coordinates import Angle
+          >>> import astropy.units as u
+          >>> a = Angle([-20, 150, 350] * u.deg)
+          >>> a.is_within_bounds('0d', '360d')
+          False
+          >>> a.is_within_bounds(None, '360d')
+          True
+          >>> a.is_within_bounds(-30 * u.deg, None)
+          True
 
-    def __eq__(self, other):
-        if isinstance(other, Angle):
-            return self.radians == other.radians
-        if other == None:
-            return False
-        else:
-            raise NotImplementedError("To compare {0} objects, compare their "
-                                      "float values directly.".format(type(self).__name__))
+        Parameters
+        ----------
+        lower : str, Angle, angular Quantity, None
+            Specifies lower bound for checking.  This can be any object
+            that can initialize an Angle object, e.g. '180d', 180 * u.deg,
+            or Angle(180, unit=u.deg).
+        upper : str, Angle, angular Quantity, None
+            Specifies upper bound for checking.  This can be any object
+            that can initialize an Angle object, e.g. '180d', 180 * u.deg,
+            or Angle(180, unit=u.deg).
 
-    def __ne__(self, other):
-        # return not self.radians == other.radians
-        return not self.__eq__(other)
+        Returns
+        -------
+        is_within_bounds : bool
+            True if all angles satisfy ``lower <= angle < upper``
+        """
+        ok = True
+        if lower is not None:
+            ok &= np.all(Angle(lower) <= self)
+        if ok and upper is not None:
+            ok &= np.all(self < Angle(upper))
+        return bool(ok)
+
+    @deprecated("0.3", name="format", alternative="to_string")
+    def format(self, unit=u.degree, decimal=False, sep='fromunit', precision=5,
+               alwayssign=False, pad=False):
+        return self.to_string(
+            unit=unit, decimal=decimal, sep=sep, precision=precision,
+            alwayssign=alwayssign, pad=pad)
 
-    def __lt__(self, other):
-        if isinstance(other, type(self)):
-            return self.radians < other.radians
-        else:
-            raise NotImplementedError("An {0} object can only be compared to another {0} "
-                                      "object.".format(type(self).__name__))
+    def __str__(self):
+        return str(self.to_string())
 
-    def __gt__(self, other):
-        if isinstance(other, type(self)):
-            return self.radians > other.radians
-        else:
-            raise NotImplementedError("An {0} object can only be compared to another {0} "
-                                      "object.".format(type(self).__name__))
+    def _repr_latex_(self):
+        return str(self.to_string(format='latex'))
 
-    def __ge__(self, other):
-        if isinstance(other, type(self)):
-            return self.radians >= other.radians
-        else:
-            raise NotImplementedError("An {0} object can only be compared to another {0} "
-                                      "object.".format(type(self).__name__))
 
-    def __le__(self, other):
-        if isinstance(other, type(self)):
-            return self.radians <= other.radians
-        else:
-            raise NotImplementedError("An {0} object can only be compared to another {0} "
-                                      "object.".format(type(self).__name__))
+class Latitude(Angle):
+    """
+    Latitude-like angle(s) which must be in the range -90 to +90 deg.
 
-    def __abs__(self):
-        return Angle(abs(self.radians), unit=u.radian)
+    A Latitude object is distinguished from a pure `Angle` by virtue
+    of being constrained so that::
 
-    def __repr__(self):
-        return "<{0} {1:.5f} deg>".format(type(self).__name__, self.degrees)
+      -90.0 * u.deg <= angle(s) <= +90.0 * u.deg
 
+    Any attempt to set a value outside that range will result in a `ValueError`.
 
-class RA(Angle):
-    """ An object that represents a right ascension angle.
+    The input angle(s) can be specified either as an array, list, scalar, tuple (see
+    below), string, :class:`~astropy.units.quantity.Quantity` or another `Angle`.
 
-    This object can be created from a numeric value along with a unit. If the
-    value specified is greater than "24", then a unit of degrees is assumed. Bounds
-    are fixed to [0,360] degrees.
+    The input parser is flexible and supports all of the input formats supported by `Angle`.
 
     Parameters
     ----------
-    angle : float, int, str, tuple
-        The angle value. If a tuple, will be interpreted as (h, m s) or
-        (d, m, s) depending on `unit`. If a string, it will be interpreted
-        following the rules described above.
-    unit : `~astropy.units.UnitBase`, str
-        The unit of the value specified for the angle.  This may be any
-        string that `~astropy.units.Unit` understands, but it is better to
-        give an actual unit object.  Must be one of `~astropy.units.degree`,
-        `~astropy.units.radian`, or `~astropy.units.hour`.
+    angle : array, list, scalar, Quantity, Angle
+        The angle value(s). If a tuple, will be interpreted as ``(h, m
+        s)`` or ``(d, m, s)`` depending on `unit`. If a string, it
+        will be interpreted following the rules described for `Angle`.
+
+        If `angle` is a sequence or array of strings, the resulting
+        values will be in the given `unit`, or if None is provided,
+        the unit will be taken from the first given value.
+
+    unit : :class:`~astropy.units.core.UnitBase`, str, optional
+        The unit of the value specified for the angle.  This may be
+        any string that `~astropy.units.Unit` understands, but it is
+        better to give an actual unit object.  Must be an angular
+        unit.
 
     Raises
     ------
-    `~astropy.coordinates.errors.UnitsError`
-        If a unit is not provided or it is not hour, radian, or degree.
+    `~astropy.units.core.UnitsError`
+        If a unit is not provided or it is not an angular unit.
     """
+    def __new__(cls, angle, unit=None, **kwargs):
+        self = super(Latitude, cls).__new__(cls, angle, unit=unit, **kwargs)
+        self._validate_angles()
+        return self
 
-    def __init__(self, angle, unit=None):
-        super(RA, self).__init__(angle, unit=unit, bounds=(0, 360))
-
-    # The initializer as originally conceived allowed the unit to be unspecified
-    # if it's bigger  than 24, because hours typically aren't past 24.
-    # It is also then implicit that `RA` is usually in hours.
-    # This is commented out for now because in discussion for v0.2 we decided to
-    # keep things simple and just use the same behavior as Angle.
-    # In v0.3 it may be either uncommented,
-    # moved somewhere else, or eliminated completely
-    # TODO: decide if this should stay in or permanently be removed
-    #
-    # def __init__(self, angle, unit=None):
-    #
-    #     # This block attempts to determine the validity of the unit,
-    #     # particularly with regard to the specifics of RA.
-    #     # After this block, the normal Angle initializer handles most of the
-    #     # validation/creation.
-    #
-    #     if isinstance(angle, Angle):
-    #         return super(RA, self).__init__(angle.radians, unit=u.radian, bounds=(0, 360))
-    #
-    #     if unit is u.hour:
-    #         pass  # to Angle initializer
-    #         # self._radians = math.radians(decimal_hours * 15.)
-    #     elif unit is u.degree:
-    #         pass  # to Angle initializer
-    #         # decimal_degrees = util.parse_degrees(angle)
-    #         # self._radians = math.radians(decimal_degrees)
-    #     elif unit is u.radian:
-    #         pass  # to Angle initializer
-    #         # self._radians = util.parse_radians(angle)
-    #
-    #
-    #     elif unit is None:
-    #         # Try to figure out the unit if we can.
-    #         if isinstance(angle, float) or isinstance(angle, int):
-    #             if angle > 24:
-    #                 unit = u.degree
-    #             else:
-    #                 raise UnitsError("No units were specified, and the angle value was ambiguous between hours and degrees.")
-    #         elif isinstance(angle, basestring):
-    #             # Try to deduce the units from hints in the string.
-    #             # Further, enforce absolute bounds here, i.e. don't let
-    #             # Angle +-2π to see if the angle falls in the bounds.
-    #             if "d" in angle or "°" in angle:
-    #                 # If in the form "12d32m53s", look for the "d" and assume degrees.
-    #                 angle = math.radians(util.parse_degrees(angle))
-    #                 if 0 < angle < TWOPI:
-    #                     unit = u.radian
-    #                 else:
-    #                     raise RangeError("The provided angle was assumed to be in degrees, but was out of the range (0,360) degrees.")
-    #             elif "h" in angle:
-    #                 # Same for "12h32m53s" for hours.
-    #                 # self._radians = math.radians(util.parse_hours(angle)*15.0)
-    #                 unit = u.hour
-    #             else:
-    #                 # could be in a form: "54:43:26" -
-    #                 # if so AND the resulting decimal value is > 24 or < -24, assume degrees
-    #                 decimal_value = util.parse_degrees(angle)
-    #                 if decimal_value > 24:
-    #                     unit = u.degree
-    #                 elif 0 <= decimal_value <= 24.0:
-    #                     raise UnitsError("No units were specified, and the angle value was ambiguous between hours and degrees.")
-    #                 elif decimal_value < 0:
-    #                     raise RangeError("No units were specified; could not assume any since the value was less than zero.")
-    #         elif isinstance(angle, tuple):
-    #             if len(angle) == 3 and 0 <= angle[0] < 24.0:
-    #                 raise UnitsError("No units were specified, and the angle value was ambiguous between hours and degrees.")
-    #             else:
-    #                 unit = u.degree
-    #         else:
-    #             raise ValueError("Angle values of type {0} not supported.".format(type(angle).__name__))
-    #
-    #     if unit is None:
-    #         raise UnitsError("Units must be specified for RA, one of u.degree, u.hour, or u.radian.")
-    #
-    #     # By here, the unit should be defined.
-    #     super(RA, self).__init__(angle, unit=unit, bounds=(0, 360))
-
-    def hour_angle(self, lst):
-        """ Computes the hour angle for this RA given a local sidereal
-        time (LST).
-
-        Parameters
-        ----------
-        lst : `~astropy.coordinates.angle.Angle`, `~astropy.time.Time`
-            A local sidereal time (LST).
-
-        Returns
-        -------
-        hour_angle : `~astropy.coordinates.angle.Angle`
-            The hour angle for this RA at the LST `lst`.
-        """
-        if hasattr(lst, 'mjd'):
-            lst = Angle(np.remainder(lst.mjd, 1), unit=u.hour)
-
-        return Angle(lst.radians - self.radians, unit=u.radian, bounds=(0, TWOPI))
-
-    def lst(self, hour_angle):
-        """
-        Calculates the local sidereal time (LST) if this RA is at a
-        particular hour angle.
-
-        Parameters
-        ----------
-        hour_angle :  `~astropy.coordinates.angle.Angle`
-            An hour angle.
-
-        Returns
-        -------
-        lst : `~astropy.coordinates.angle.Angle`
-            The local siderial time as an angle.
+    def _validate_angles(self):
+        if np.any(self < -90.0 * u.deg) or np.any(self > 90.0 * u.deg):
+            raise ValueError('Latitude angle(s) must be within -90 deg <= angle <= 90 deg, '
+                             'got {0}'.format(self.degree))
 
-        """
-        return Angle(hour_angle.radians + self.radians, unit=u.radian, bounds=(0, TWOPI))
+    def __setitem__(self, item, value):
+        super(Latitude, self).__setitem__(item, value)
+        self._validate_angles()
 
 
-class Dec(Angle):
+class Longitude(Angle):
     """
-    Represents a declination value.
-
-    This object can be created from a numeric value along with a unit, or else a
-    string in any commonly represented format, e.g. "12 43 23.53", "-32d52m29s".
-    Unless otherwise specified via the 'unit' parameter, degrees are assumed.
-    Bounds are fixed to [-90,90] degrees.
+    Longitude-like angle(s) which are wrapped within a contiguous 360 degree range.
 
-    Parameters
-    ----------
-    angle : float, int, str, tuple
-        The angle value. If a tuple, will be interpreted as (h, m s) or
-        (d, m, s) depending on `unit`. If a string, it will be interpreted
-        following the rules described above.
-    unit : `~astropy.units.UnitBase`, str
-        The unit of the value specified for the angle.  This may be any
-        string that `~astropy.units.Unit` understands, but it is better to
-        give an actual unit object.  Must be one of `~astropy.units.degree`,
-        `~astropy.units.radian`, or `~astropy.units.hour`.
-    bounds : tuple
-        A tuple indicating the upper and lower value that the new angle object may
-        have.
-
-        Raises
-        ------
-        `~astropy.coordinates.errors.UnitsError`
-            If a unit is not provided or it is not hour, radian, or degree.
-    """
-    def __init__(self, angle, unit=None):
-        super(Dec, self).__init__(angle, unit=unit, bounds=(-90, 90))
+    A ``Longitude`` object is distinguished from a pure `~astropy.coordinates.Angle` by virtue
+    of a ``wrap_angle`` property.  The ``wrap_angle`` specifies that all angle values
+    represented by the object will be in the range::
 
-    # TODO: do here whatever is decided for the "smart" RA initializer above
-    #
-    # def __init__(self, angle, unit=u.degree):
-    #     super(RA, self).__init__(angle, unit=unit, bounds=(0, 360))
-    #
-    #     if isinstance(angle, Angle):
-    #         return super(Dec, self).__init__(angle.radians, unit=u.radian, bounds=(-90, 90))
-    #
-    #     super(Dec, self).__init__(angle, unit=unit, bounds=(-90, 90))
+      wrap_angle - 360 * u.deg <= angle(s) < wrap_angle
 
+    The default ``wrap_angle`` is 360 deg.  Setting ``wrap_angle=180 * u.deg`` would
+    instead result in values between -180 and +180 deg.  Setting the ``wrap_angle``
+    attribute of an existing ``Longitude`` object will result in re-wrapping the
+    angle values in-place.
 
-class AngularSeparation(Angle):
-    """
-    An on-sky separation between two directions.
+    The input angle(s) can be specified either as an array, list, scalar, tuple,
+    string, :class:`~astropy.units.quantity.Quantity` or another `Angle`.
 
-    .. note::
-        This is computed using the Vincenty great circle distance
-        formula, and hence should be numerically stable even for
-        near antipodal points.
+    The input parser is flexible and supports all of the input formats supported by `Angle`.
 
     Parameters
     ----------
-    lat1 : float
-        The value of the first latitudinal/elevation angle.
-    lon1 : float
-        The value of the first longitudinal/azimuthal angle.
-    lat2 : float
-        The value of the second latitudinal/elevation angle.
-    lon2 : float
-        The value of the second longitudinal/azimuthal angle.
-    units : `~astropy.units`
-        The units of the given angles.
-
-
-    """
-    def __init__(self, lat1, lon1, lat2, lon2, units):
-
-        units = u.Unit(units)
-        lat1 = units.to(u.radian, lat1)
-        if 0 == lon1 == lat2 == lon2:
-            sepval = lat1
-        else:
-            lon1 = units.to(u.radian, lon1)
-            lat2 = units.to(u.radian, lat2)
-            lon2 = units.to(u.radian, lon2)
-
-            sepval = util.vincenty_sphere_dist(lon1, lat1, lon2, lat2)
+    angle : array, list, scalar, Quantity, `Angle`
+        The angle value(s). If a tuple, will be interpreted as ``(h, m
+        s)`` or ``(d, m, s)`` depending on `unit`. If a string, it
+        will be interpreted following the rules described for `Angle`.
 
-        super(AngularSeparation, self).__init__(sepval, u.radian)
+        If `angle` is a sequence or array of strings, the resulting
+        values will be in the given `unit`, or if None is provided,
+        the unit will be taken from the first given value.
 
-    def __add__(self, other):
-        raise TypeError('+ is ambiguous for AngularSeparation objects; not supported')
+    unit : :class:`~astropy.units.core.UnitBase`, str, optional
+        The unit of the value specified for the angle.  This may be
+        any string that `~astropy.units.Unit` understands, but it is
+        better to give an actual unit object.  Must be an angular
+        unit.
 
-    def __radd__(self, other):
-        raise TypeError('+ is ambiguous for AngularSeparation objects; not supported')
+    wrap_angle : `Angle` or equivalent
+        Angle at which to wrap back to ``wrap_angle - 360 deg``.
 
-    def __sub__(self, other):
-        raise TypeError('- is ambiguous for AngularSeparation objects; not supported')
+    Raises
+    ------
+    `~astropy.units.core.UnitsError`
+        If a unit is not provided or it is not an angular unit.
+    """
+    def __new__(cls, angle, unit=None, wrap_angle=360 * u.deg, **kwargs):
+        self = super(Longitude, cls).__new__(cls, angle, unit=unit, **kwargs)
+        self.wrap_angle = wrap_angle
+        return self
 
-    def __rsub__(self, other):
-        raise TypeError('- is ambiguous for AngularSeparation objects; not supported')
+    def __setitem__(self, item, value):
+        super(Longitude, self).__setitem__(item, value)
+        self._wrap_internal()
 
-    @property
-    def arcmins(self):
+    def _wrap_internal(self):
         """
-        The value of this separation in arcminutes.
+        Wrap the internal values in the Longitude object.  Using the `Angle`
+        wrap_at() method causes recursion.
         """
-        return self.degrees * 60.
+        d360 = 360.0 * u.deg
+        wrapped = np.mod(self - self.wrap_angle, d360) - (d360 - self.wrap_angle)
+        super(Longitude, self).__setitem__((), wrapped)
 
     @property
-    def arcsecs(self):
-        """
-        The value of this separation in arcseconds.
-        """
-        return self.degrees * 3600.
-
-#<----------------------------------Rotations---------------------------------->
-
-
-def rotation_matrix(angle, axis='z', degrees=True):
+    def wrap_angle(self):
+        return self._wrap_angle
+
+    @wrap_angle.setter
+    def wrap_angle(self, value):
+        self._wrap_angle = Angle(value)
+        self._wrap_internal()
+
+    def __quantity_view__(self, obj, unit):
+        unit = self._convert_unit_to_angle_unit(unit)
+        if unit is not None and unit.is_equivalent(u.radian):
+            # by default, wrap_angle and equivalencies remain the same
+            # TODO: generalize to some _things_to_copy once #1422, #1373 merged
+            return obj.view(Longitude)
+        return super(Angle, self).__quantity_view__(obj, unit)
+
+    def __quantity_instance__(self, val, unit, **kwargs):
+        unit = self._convert_unit_to_angle_unit(unit)
+        if unit is not None and unit.is_equivalent(u.radian):
+            # by default, wrap_angle remains the same
+            if 'wrap_angle' not in kwargs:
+                kwargs['wrap_angle'] = getattr(self, 'wrap_angle')
+            return Longitude(val, unit, **kwargs)
+        return super(Angle, self).__quantity_instance__(val, unit, **kwargs)
+
+    def __getitem__(self, key):
+        out = super(Longitude, self).__getitem__(key)
+        out._wrap_angle = self._wrap_angle
+        return out
+
+    # deprecated; TODO: move to quantity later (once #1422, #1373 merged)
+    def __getslice__(self, i, j):
+        return self.__getitem__(slice(i, j))
+
+#<----------------------------------Rotations--------------------------------->
+
+
+def rotation_matrix(angle, axis='z', unit=None):
     """
     Generate a 3x3 cartesian rotation matrix in for rotation about
     a particular axis.
 
     Parameters
     ----------
-    angle : scalar
-        The amount of rotation this matrix should represent. In degrees
-        if `degrees` is True, otherwise radians.
+    angle : convertible to Angle
+        The amount of rotation this matrix should represent.
+
     axis : str or 3-sequence
         Either 'x','y', 'z', or a (x,y,z) specifying an axis to rotate
         about. If 'x','y', or 'z', the rotation sense is
         counterclockwise looking down the + axis (e.g. positive
         rotations obey left-hand-rule).
-    degrees : bool
-        If True the input angle is degrees, otherwise radians.
+
+    unit : UnitBase, optional
+        If `angle` does not have associated units, they are in this
+        unit.  If neither are provided, it is assumed to be degrees.
 
     Returns
     -------
     rmat: `numpy.matrix`
         A unitary rotation matrix.
     """
-    from math import sin, cos, radians, sqrt
+    # TODO: This doesn't handle arrays of angles
 
-    if degrees:
-        angle = radians(angle)
+    if unit is None:
+        unit = u.degree
+
+    angle = Angle(angle, unit=unit)
 
     if axis == 'z':
-        s = sin(angle)
-        c = cos(angle)
+        s = np.sin(angle)
+        c = np.cos(angle)
         return np.matrix(((c, s, 0),
                           (-s, c, 0),
                           (0, 0, 1)))
     elif axis == 'y':
-        s = sin(angle)
-        c = cos(angle)
+        s = np.sin(angle)
+        c = np.cos(angle)
         return np.matrix(((c, 0, -s),
                           (0, 1, 0),
                           (s, 0, c)))
     elif axis == 'x':
-        s = sin(angle)
-        c = cos(angle)
+        s = np.sin(angle)
+        c = np.cos(angle)
         return np.matrix(((1, 0, 0),
                           (0, c, s),
                           (0, -s, c)))
     else:
         x, y, z = axis
-        w = cos(angle / 2)
+        w = np.cos(angle / 2)
 
         # normalize
         if w == 1:
             x = y = z = 0
         else:
-            l = sqrt((x * x + y * y + z * z) / (1 - w * w))
+            l = np.sqrt((x * x + y * y + z * z) / (1 - w * w))
             x /= l
             y /= l
             z /= l
@@ -713,7 +728,7 @@ def rotation_matrix(angle, axis='z', degrees=True):
                           (2 * x * z - 2 * w * y, 2 * y * z + 2 * w * x, wsq - xsq - ysq + zsq)))
 
 
-def angle_axis(matrix, degrees=True):
+def angle_axis(matrix, unit=None):
     """
     Computes the angle of rotation and the rotation axis for a given rotation
     matrix.
@@ -722,30 +737,30 @@ def angle_axis(matrix, degrees=True):
     ----------
     matrix : array-like
         A 3 x 3 unitary rotation matrix.
-    degrees : bool
-        If True, output is in degrees.
+
+    unit : UnitBase
+        The output unit.  If `None`, the output unit is degrees.
 
     Returns
     -------
-    angle : scalar
-        The angle of rotation for this matrix. In degrees if `degrees is
-        True, otherwise radians.
+    angle : Angle
+        The angle of rotation for this matrix.
+
     axis : array (length 3)
         The axis of rotation for this matrix.
-
     """
-    from math import sin, cos, acos, degrees, sqrt
+    # TODO: This doesn't handle arrays of angles
 
     m = np.asmatrix(matrix)
     if m.shape != (3, 3):
         raise ValueError('matrix is not 3x3')
 
-    angle = acos((m[0, 0] + m[1, 1] + m[2, 2] - 1) / 2)
-    denom = sqrt(2 * ((m[2, 1] - m[1, 2]) + (m[0, 2] - m[2, 0]) + (m[1, 0] - m[0, 1])))
+    angle = np.acos((m[0, 0] + m[1, 1] + m[2, 2] - 1) / 2)
+    denom = np.sqrt(2 * ((m[2, 1] - m[1, 2]) + (m[0, 2] - m[2, 0]) + (m[1, 0] - m[0, 1])))
     axis = np.array((m[2, 1] - m[1, 2], m[0, 2] - m[2, 0], m[1, 0] - m[0, 1])) / denom
-    axis /= sqrt(np.sum(axis ** 2))
+    axis /= np.sqrt(np.sum(axis ** 2))
 
-    if degrees:
-        return degrees(angle), axis
-    else:
-        return angle, axis
+    angle = Angle(angle, u.radian)
+    if unit is None:
+        unit = u.degree
+    return angle.to(unit), axis
diff --git a/astropy/coordinates/builtin_systems.py b/astropy/coordinates/builtin_systems.py
index 6da3a08..3059f8e 100644
--- a/astropy/coordinates/builtin_systems.py
+++ b/astropy/coordinates/builtin_systems.py
@@ -4,18 +4,22 @@
 This module contains the implementations of specific coordinate systems
 and the conversions between them.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import inspect
+import textwrap
 
 import numpy as np
 
+from ..extern import six
 from .angles import Angle
 from .coordsystems import SphericalCoordinatesBase
 from ..time import Time
 from . import transformations
 from .. import units as u
 
-__all__ = ['ICRSCoordinates', 'FK5Coordinates', 'FK4Coordinates',
-           'FK4NoETermCoordinates', 'GalacticCoordinates', 'HorizontalCoordinates'
-          ]
+__all__ = ['ICRS', 'FK5', 'FK4', 'FK4NoETerms', 'Galactic', 'AltAz']
 
 # The UTC time scale is not properly defined prior to 1960, so Time('B1950',
 # scale='utc') will emit a warning. Instead, we use Time('B1950', scale='tai')
@@ -26,12 +30,12 @@ _EQUINOX_B1950 = Time('B1950', scale='tai')
 
 #<--------------Coordinate definitions; transformations are below-------------->
 @transformations.coordinate_alias('icrs')
-class ICRSCoordinates(SphericalCoordinatesBase):
+class ICRS(SphericalCoordinatesBase):
     """
     A coordinate in the ICRS.
 
     If you're looking for "J2000" coordinates, and aren't sure if you
-    want to use this or `FK5Coordinates`, you probably want to use ICRS.
+    want to use this or `FK5`, you probably want to use ICRS.
     It's more well-defined as a catalog coordinate and is an inertial
     system.
 
@@ -44,14 +48,14 @@ class ICRSCoordinates(SphericalCoordinatesBase):
         to be the same as the `equinox`.
 
     Alternatively, a single argument that is any kind of spherical coordinate
-    can be provided, and will be converted to ICRSCoordinates and used as this
+    can be provided, and will be converted to ICRS and used as this
     coordinate.
 
     """
     __doc__ = __doc__.format(params=SphericalCoordinatesBase._init_docstring_param_templ.format(lonnm='ra', latnm='dec'))
 
     def __init__(self, *args, **kwargs):
-        super(ICRSCoordinates, self).__init__()
+        super(ICRS, self).__init__()
 
         self._obstime = kwargs.pop('obstime', None)
 
@@ -60,29 +64,26 @@ class ICRSCoordinates(SphericalCoordinatesBase):
 
         if len(args) == 1 and len(kwargs) == 0 and isinstance(args[0], SphericalCoordinatesBase):
             newcoord = args[0].transform_to(self.__class__)
-            self.ra = newcoord.ra
-            self.dec = newcoord.dec
+            self._latangle = newcoord._latangle
+            self._lonangle = newcoord._lonangle
             self._distance = newcoord._distance
         else:
-            super(ICRSCoordinates, self)._initialize_latlon('ra', 'dec', True, args, kwargs)
+            super(ICRS, self)._initialize_latlon('ra', 'dec', args, kwargs)
 
-    def __repr__(self):
-        if self.distance is not None:
-            diststr = ', Distance={0:.2g} {1!s}'.format(self.distance._value, self.distance._unit)
-        else:
-            diststr = ''
+    #strings used for making __repr__ work
+    _repr_lon_name = 'RA'
+    _repr_lat_name = 'Dec'
 
-        msg = "<{0} RA={1:.5f} deg, Dec={2:.5f} deg{3}>"
-        return msg.format(self.__class__.__name__, self.ra.degrees,
-                          self.dec.degrees, diststr)
+    # Default format for to_string
+    _default_string_style = 'hmsdms'
 
     @property
-    def lonangle(self):
-        return self.ra
+    def ra(self):
+        return self._lonangle
 
     @property
-    def latangle(self):
-        return self.dec
+    def dec(self):
+        return self._latangle
 
     @property
     def equinox(self):
@@ -97,7 +98,7 @@ class ICRSCoordinates(SphericalCoordinatesBase):
 
 
 @transformations.coordinate_alias('fk5')
-class FK5Coordinates(SphericalCoordinatesBase):
+class FK5(SphericalCoordinatesBase):
     """
     A coordinate in the FK5 system.
 
@@ -111,13 +112,13 @@ class FK5Coordinates(SphericalCoordinatesBase):
         to be the same as the `equinox`.
 
     Alternatively, a single argument that is any kind of spherical coordinate
-    can be provided, and will be converted to `FK5Coordinates` and used as this
+    can be provided, and will be converted to `FK5` and used as this
     coordinate.
     """
     __doc__ = __doc__.format(params=SphericalCoordinatesBase._init_docstring_param_templ.format(lonnm='ra', latnm='dec'))
 
     def __init__(self, *args, **kwargs):
-        super(FK5Coordinates, self).__init__()
+        super(FK5, self).__init__()
 
         self._equinox = kwargs.pop('equinox', _EQUINOX_J2000)
         self._obstime = kwargs.pop('obstime', None)
@@ -126,32 +127,31 @@ class FK5Coordinates(SphericalCoordinatesBase):
             raise TypeError('specified equinox is not a Time object')
         if self._obstime is not None and not isinstance(self._obstime, Time):
             raise TypeError('specified obstime is not None or a Time object')
+        if not self._equinox.isscalar:
+            raise ValueError('specified equinox is not a scalar')
 
         if len(args) == 1 and len(kwargs) == 0 and isinstance(args[0], SphericalCoordinatesBase):
             newcoord = args[0].transform_to(self.__class__)
-            self.ra = newcoord.ra
-            self.dec = newcoord.dec
+            self._latangle = newcoord._latangle
+            self._lonangle = newcoord._lonangle
             self._distance = newcoord._distance
         else:
-            super(FK5Coordinates, self)._initialize_latlon('ra', 'dec', True, args, kwargs)
+            super(FK5, self)._initialize_latlon('ra', 'dec', args, kwargs)
 
-    def __repr__(self):
-        if self.distance is not None:
-            diststr = ', Distance={0:.2g} {1!s}'.format(self.distance._value, self.distance._unit)
-        else:
-            diststr = ''
+    #strings used for making __repr__ work
+    _repr_lon_name = 'RA'
+    _repr_lat_name = 'Dec'
 
-        msg = "<{0} RA={1:.5f} deg, Dec={2:.5f} deg{3}>"
-        return msg.format(self.__class__.__name__, self.ra.degrees,
-                          self.dec.degrees, diststr)
+    # Default format for to_string
+    _default_string_style = 'hmsdms'
 
     @property
-    def lonangle(self):
-        return self.ra
+    def ra(self):
+        return self._lonangle
 
     @property
-    def latangle(self):
-        return self.dec
+    def dec(self):
+        return self._latangle
 
     @property
     def equinox(self):
@@ -176,24 +176,24 @@ class FK5Coordinates(SphericalCoordinatesBase):
 
         Returns
         -------
-        newcoord : FK5Coordinates
+        newcoord : FK5
             The new coordinate
         """
         from .earth_orientation import precession_matrix_Capitaine
 
         pmat = precession_matrix_Capitaine(self._equinox, newequinox)
 
-        v = [self.x, self.y, self.z]
+        v = [self.x.value, self.y.value, self.z.value]
         x, y, z = np.dot(pmat.A, v)
 
         if self.distance is not None:
-            return self.__class__(x=x, y=y, z=z, unit=self.distance._unit, equinox=newequinox)
+            return self.__class__(x=x, y=y, z=z, unit=self.distance.unit, equinox=newequinox)
         else:
             return self.__class__(x=x, y=y, z=z, equinox=newequinox)
 
 
 @transformations.coordinate_alias('fk4')
-class FK4Coordinates(SphericalCoordinatesBase):
+class FK4(SphericalCoordinatesBase):
     """
     A coordinate in the FK4 system.
 
@@ -208,13 +208,13 @@ class FK4Coordinates(SphericalCoordinatesBase):
         to be the same as the `equinox`.
 
     Alternatively, a single argument that is any kind of spherical coordinate
-    can be provided, and will be converted to `FK4Coordinates` and used as this
+    can be provided, and will be converted to `FK4` and used as this
     coordinate.
     """
     __doc__ = __doc__.format(params=SphericalCoordinatesBase._init_docstring_param_templ.format(lonnm='ra', latnm='dec'))
 
     def __init__(self, *args, **kwargs):
-        super(FK4Coordinates, self).__init__()
+        super(FK4, self).__init__()
 
         self._equinox = kwargs.pop('equinox', _EQUINOX_B1950)
         self._obstime = kwargs.pop('obstime', None)
@@ -223,32 +223,31 @@ class FK4Coordinates(SphericalCoordinatesBase):
             raise TypeError('specified equinox is not a Time object')
         if self._obstime is not None and not isinstance(self._obstime, Time):
             raise TypeError('specified obstime is not None or a Time object')
+        if not self._equinox.isscalar:
+            raise ValueError('specified equinox is not a scalar')
 
         if len(args) == 1 and len(kwargs) == 0 and isinstance(args[0], SphericalCoordinatesBase):
             newcoord = args[0].transform_to(self.__class__)
-            self.ra = newcoord.ra
-            self.dec = newcoord.dec
+            self._latangle = newcoord._latangle
+            self._lonangle = newcoord._lonangle
             self._distance = newcoord._distance
         else:
-            super(FK4Coordinates, self)._initialize_latlon('ra', 'dec', True, args, kwargs)
+            super(FK4, self)._initialize_latlon('ra', 'dec', args, kwargs)
 
-    def __repr__(self):
-        if self.distance is not None:
-            diststr = ', Distance={0:.2g} {1!s}'.format(self.distance._value, self.distance._unit)
-        else:
-            diststr = ''
+    #strings used for making __repr__ work
+    _repr_lon_name = 'RA'
+    _repr_lat_name = 'Dec'
 
-        msg = "<{0} RA={1:.5f} deg, Dec={2:.5f} deg{3}>"
-        return msg.format(self.__class__.__name__, self.ra.degrees,
-                          self.dec.degrees, diststr)
+    # Default format for to_string
+    _default_string_style = 'hmsdms'
 
     @property
-    def lonangle(self):
-        return self.ra
+    def ra(self):
+        return self._lonangle
 
     @property
-    def latangle(self):
-        return self.dec
+    def dec(self):
+        return self._latangle
 
     @property
     def equinox(self):
@@ -272,24 +271,24 @@ class FK4Coordinates(SphericalCoordinatesBase):
 
         Returns
         -------
-        newcoord : FK4Coordinates
+        newcoord : FK4
             The new coordinate
         """
         from .earth_orientation import _precession_matrix_besselian
 
         pmat = _precession_matrix_besselian(self._equinox.byear, newequinox.byear)
 
-        v = [self.x, self.y, self.z]
+        v = [self.x.value, self.y.value, self.z.value]
         x, y, z = np.dot(pmat.A, v)
 
         if self.distance is not None:
-            return self.__class__(x=x, y=y, z=z, unit=self.distance._unit, equinox=newequinox)
+            return self.__class__(x=x, y=y, z=z, unit=self.distance.unit, equinox=newequinox)
         else:
             return self.__class__(x=x, y=y, z=z, equinox=newequinox)
 
 
 @transformations.coordinate_alias('fk4_no_e')
-class FK4NoETermCoordinates(SphericalCoordinatesBase):
+class FK4NoETerms(SphericalCoordinatesBase):
     """
     A coordinate in the FK4 system.
 
@@ -304,13 +303,13 @@ class FK4NoETermCoordinates(SphericalCoordinatesBase):
         to be the same as the `equinox`.
 
     Alternatively, a single argument that is any kind of spherical coordinate
-    can be provided, and will be converted to `FK4NoETermCoordinates` and used as this
+    can be provided, and will be converted to `FK4NoETerms` and used as this
     coordinate.
     """
     __doc__ = __doc__.format(params=SphericalCoordinatesBase._init_docstring_param_templ.format(lonnm='ra', latnm='dec'))
 
     def __init__(self, *args, **kwargs):
-        super(FK4NoETermCoordinates, self).__init__()
+        super(FK4NoETerms, self).__init__()
 
         self._equinox = kwargs.pop('equinox', _EQUINOX_B1950)
         self._obstime = kwargs.pop('obstime', None)
@@ -319,32 +318,31 @@ class FK4NoETermCoordinates(SphericalCoordinatesBase):
             raise TypeError('specified equinox is not a Time object')
         if self._obstime is not None and not isinstance(self._obstime, Time):
             raise TypeError('specified obstime is not None or a Time object')
+        if not self._equinox.isscalar:
+            raise ValueError('specified equinox is not a scalar')
 
         if len(args) == 1 and len(kwargs) == 0 and isinstance(args[0], SphericalCoordinatesBase):
             newcoord = args[0].transform_to(self.__class__)
-            self.ra = newcoord.ra
-            self.dec = newcoord.dec
+            self._latangle = newcoord._latangle
+            self._lonangle = newcoord._lonangle
             self._distance = newcoord._distance
         else:
-            super(FK4NoETermCoordinates, self)._initialize_latlon('ra', 'dec', True, args, kwargs)
+            super(FK4NoETerms, self)._initialize_latlon('ra', 'dec', args, kwargs)
 
-    def __repr__(self):
-        if self.distance is not None:
-            diststr = ', Distance={0:.2g} {1!s}'.format(self.distance._value, self.distance._unit)
-        else:
-            diststr = ''
+    #strings used for making __repr__ work
+    _repr_lon_name = 'RA'
+    _repr_lat_name = 'Dec'
 
-        msg = "<{0} RA={1:.5f} deg, Dec={2:.5f} deg{3}>"
-        return msg.format(self.__class__.__name__, self.ra.degrees,
-                          self.dec.degrees, diststr)
+    # Default format for to_string
+    _default_string_style = 'hmsdms'
 
     @property
-    def lonangle(self):
-        return self.ra
+    def ra(self):
+        return self._lonangle
 
     @property
-    def latangle(self):
-        return self.dec
+    def dec(self):
+        return self._latangle
 
     @property
     def equinox(self):
@@ -368,24 +366,24 @@ class FK4NoETermCoordinates(SphericalCoordinatesBase):
 
         Returns
         -------
-        newcoord : FK4NoETermCoordinates
+        newcoord : FK4NoETerms
             The new coordinate
         """
         from .earth_orientation import _precession_matrix_besselian
 
         pmat = _precession_matrix_besselian(self._equinox.byear, newequinox.byear)
 
-        v = [self.x, self.y, self.z]
+        v = [self.x.value, self.y.value, self.z.value]
         x, y, z = np.dot(pmat.A, v)
 
         if self.distance is not None:
-            return self.__class__(x=x, y=y, z=z, unit=self.distance._unit, equinox=newequinox)
+            return self.__class__(x=x, y=y, z=z, unit=self.distance.unit, equinox=newequinox)
         else:
             return self.__class__(x=x, y=y, z=z, equinox=newequinox)
 
 
 @transformations.coordinate_alias('galactic')
-class GalacticCoordinates(SphericalCoordinatesBase):
+class Galactic(SphericalCoordinatesBase):
     """
     A coordinate in Galactic Coordinates.
 
@@ -408,7 +406,7 @@ class GalacticCoordinates(SphericalCoordinatesBase):
         to be the same as the `equinox`.
 
     Alternatively, a single argument that is any kind of spherical coordinate
-    can be provided, and will be converted to `GalacticCoordinates` and
+    can be provided, and will be converted to `Galactic` and
     used as this coordinate.
     """
     __doc__ = __doc__.format(params=SphericalCoordinatesBase._init_docstring_param_templ.format(lonnm='l', latnm='b'))
@@ -417,14 +415,14 @@ class GalacticCoordinates(SphericalCoordinatesBase):
     # transformations to/from FK4/5
 
     # These are from Reid & Brunthaler 2004
-    _ngp_J2000 = FK5Coordinates(192.859508, 27.128336, unit=(u.degree, u.degree))
+    _ngp_J2000 = FK5(192.859508, 27.128336, unit=(u.degree, u.degree))
     _lon0_J2000 = Angle(122.932, unit=u.degree)
     # These are from the IAU's definition of galactic coordinates
-    _ngp_B1950 = FK4Coordinates(192.25, 27.4, unit=(u.degree, u.degree))
+    _ngp_B1950 = FK4(192.25, 27.4, unit=(u.degree, u.degree))
     _lon0_B1950 = Angle(123, unit=u.degree)
 
     def __init__(self, *args, **kwargs):
-        super(GalacticCoordinates, self).__init__()
+        super(Galactic, self).__init__()
 
         self._obstime = kwargs.pop('obstime', None)
 
@@ -433,35 +431,32 @@ class GalacticCoordinates(SphericalCoordinatesBase):
 
         if len(args) == 1 and len(kwargs) == 0 and isinstance(args[0], SphericalCoordinatesBase):
             newcoord = args[0].transform_to(self.__class__)
-            self.l = newcoord.l
-            self.b = newcoord.b
+            self._latangle = newcoord._latangle
+            self._lonangle = newcoord._lonangle
             self._distance = newcoord._distance
         else:
-            super(GalacticCoordinates, self)._initialize_latlon('l', 'b', False, args, kwargs)
+            super(Galactic, self)._initialize_latlon('l', 'b', args, kwargs)
 
-    def __repr__(self):
-        if self.distance is not None:
-            diststr = ', Distance={0:.2g} {1!s}'.format(self.distance._value, self.distance._unit)
-        else:
-            diststr = ''
+    #strings used for making __repr__ work
+    _repr_lon_name = 'l'
+    _repr_lat_name = 'b'
 
-        msg = "<{0} l={1:.5f} deg, b={2:.5f} deg{3}>"
-        return msg.format(self.__class__.__name__, self.l.degrees,
-                          self.b.degrees, diststr)
+    # Default format for to_string
+    _default_string_style = 'dms'
 
     @property
-    def lonangle(self):
-        return self.l
+    def l(self):
+        return self._lonangle
 
     @property
-    def latangle(self):
-        return self.b
+    def b(self):
+        return self._latangle
 
 
- at transformations.coordinate_alias('horizontal')
-class HorizontalCoordinates(SphericalCoordinatesBase):
+ at transformations.coordinate_alias('altaz')
+class AltAz(SphericalCoordinatesBase):
     """
-    A coordinate in the Horizontal or "az/el" system.
+    A coordinate in the altitude/azimuth or "horizontal" system.
 
     Parameters
     ----------
@@ -473,13 +468,13 @@ class HorizontalCoordinates(SphericalCoordinatesBase):
         to be the same as the `equinox`.
 
     Alternatively, a single argument that is any kind of spherical coordinate
-    can be provided, and will be converted to `HorizontalCoordinates` and used
+    can be provided, and will be converted to `AltAz` and used
     as this coordinate.
     """
     __doc__ = __doc__.format(params=SphericalCoordinatesBase._init_docstring_param_templ.format(lonnm='az', latnm='el'))
 
     def __init__(self, *args, **kwargs):
-        super(HorizontalCoordinates, self).__init__()
+        super(AltAz, self).__init__()
 
         self._equinox = kwargs.pop('equinox', _EQUINOX_J2000)
         self._obstime = kwargs.pop('obstime', None)
@@ -488,32 +483,31 @@ class HorizontalCoordinates(SphericalCoordinatesBase):
             raise TypeError('specified equinox is not a Time object')
         if self._obstime is not None and not isinstance(self._obstime, Time):
             raise TypeError('specified obstime is not None or a Time object')
+        if not self._equinox.isscalar:
+            raise ValueError('specified equinox is not a scalar')
 
         if len(args) == 1 and len(kwargs) == 0 and isinstance(args[0], SphericalCoordinatesBase):
             newcoord = args[0].transform_to(self.__class__)
-            self.az = newcoord.az
-            self.el = newcoord.el
+            self._latangle = newcoord._latangle
+            self._lonangle = newcoord._lonangle
             self._distance = newcoord._distance
         else:
-            super(HorizontalCoordinates, self)._initialize_latlon('az', 'el', False, args, kwargs)
+            super(AltAz, self)._initialize_latlon('az', 'alt', args, kwargs)
 
-    def __repr__(self):
-        if self.distance is not None:
-            diststr = ', Distance={0:.2g} {1!s}'.format(self.distance._value, self.distance._unit)
-        else:
-            diststr = ''
+    #strings used for making __repr__ work
+    _repr_lon_name = 'az'
+    _repr_lat_name = 'alt'
 
-        msg = "<{0} az={1:.5f} deg, el={2:.5f} deg{3}>"
-        return msg.format(self.__class__.__name__, self.az.degrees,
-                          self.el.degrees, diststr)
+    # Default format for to_string
+    _default_string_style = 'dms'
 
     @property
-    def lonangle(self):
-        return self.az
+    def az(self):
+        return self._lonangle
 
     @property
-    def latangle(self):
-        return self.el
+    def alt(self):
+        return self._latangle
 
     @property
     def equinox(self):
@@ -529,7 +523,7 @@ class HorizontalCoordinates(SphericalCoordinatesBase):
 
 #<--------------------------------transformations------------------------------>
 # ICRS to/from FK5
- at transformations.static_transform_matrix(ICRSCoordinates, FK5Coordinates)
+ at transformations.static_transform_matrix(ICRS, FK5)
 def icrs_to_fk5():
     """
     B-matrix from USNO circular 179
@@ -548,7 +542,7 @@ def icrs_to_fk5():
 
 
 # can't be static because the equinox is needed
- at transformations.dynamic_transform_matrix(FK5Coordinates, ICRSCoordinates)
+ at transformations.dynamic_transform_matrix(FK5, ICRS)
 def fk5_to_icrs(fk5c):
     from .earth_orientation import _precess_from_J2000_Capitaine
 
@@ -562,8 +556,8 @@ def fk5_to_icrs(fk5c):
 # FK4-NO-E to/from FK4
 
 # In the present framework, we include two coordinate classes for FK4
-# coordinates - one including the E-terms of aberration (FK4Coordinates), and
-# one not including them (FK4NoETermCoordinates). In the following functions,
+# coordinates - one including the E-terms of aberration (FK4), and
+# one not including them (FK4NoETerms). In the following functions,
 # we describe the transformation between these two.
 
 def fk4_e_terms(equinox):
@@ -598,18 +592,19 @@ def fk4_e_terms(equinox):
            -e * k * np.cos(g) * np.sin(o)
 
 
- at transformations.transform_function(FK4Coordinates, FK4NoETermCoordinates, priority=1)
+ at transformations.transform_function(FK4, FK4NoETerms, priority=1)
 def fk4_to_fk4_no_e(fk4c):
 
     # Extract cartesian vector
-    r = np.array([fk4c.x, fk4c.y, fk4c.z])
+    c = fk4c.cartesian
+    r = np.asarray(c.reshape((3, c.size // 3)))
 
     # Find distance (for re-normalization)
     d_orig = np.sqrt(np.sum(r ** 2))
 
     # Apply E-terms of aberration
-    eterms_a = fk4_e_terms(fk4c.equinox)
-    r = r - eterms_a + np.dot(r, eterms_a) * r
+    eterms_a = np.asarray(fk4_e_terms(fk4c.equinox))
+    r = r - eterms_a.reshape(3, 1) + np.dot(eterms_a, r) * r
 
     # Find new distance (for re-normalization)
     d_new = np.sqrt(np.sum(r ** 2))
@@ -617,26 +612,30 @@ def fk4_to_fk4_no_e(fk4c):
     # Renormalize
     r = r * d_orig / d_new
 
-    unit = None if fk4c.distance is None else fk4c.distance._unit
-    result = FK4NoETermCoordinates(x=r[0], y=r[1], z=r[2], unit=unit, equinox=fk4c.equinox)
+    subshape = c.shape[1:]
+    x = r[0].reshape(subshape)
+    y = r[1].reshape(subshape)
+    z = r[2].reshape(subshape)
 
-    return result
+    newunit = None if fk4c.distance is None else fk4c.distance.unit
+    return FK4NoETerms(x=x, y=y, z=z, unit=newunit, equinox=fk4c.equinox)
 
 
- at transformations.transform_function(FK4NoETermCoordinates, FK4Coordinates, priority=1)
+ at transformations.transform_function(FK4NoETerms, FK4, priority=1)
 def fk4_no_e_to_fk4(fk4c):
 
     # Extract cartesian vector
-    r = np.array([fk4c.x, fk4c.y, fk4c.z])
+    c = fk4c.cartesian
+    r = np.asarray(c.reshape((3, c.size // 3)))
 
     # Find distance (for re-normalization)
     d_orig = np.sqrt(np.sum(r ** 2))
 
     # Apply E-terms of aberration
-    eterms_a = fk4_e_terms(fk4c.equinox)
+    eterms_a = np.asarray(fk4_e_terms(fk4c.equinox))
     r0 = r.copy()
-    for j in range(10):
-        r = (r0 + eterms_a) / (1. + np.dot(r, eterms_a))
+    for _ in range(10):
+        r = (eterms_a.reshape(3, 1) + r0) / (1. + np.dot(eterms_a, r))
 
     # Find new distance (for re-normalization)
     d_new = np.sqrt(np.sum(r ** 2))
@@ -644,10 +643,13 @@ def fk4_no_e_to_fk4(fk4c):
     # Renormalize
     r = r * d_orig / d_new
 
-    unit = None if fk4c.distance is None else fk4c.distance._unit
-    result = FK4Coordinates(x=r[0], y=r[1], z=r[2], unit=unit, equinox=fk4c.equinox)
+    subshape = c.shape[1:]
+    x = r[0].reshape(subshape)
+    y = r[1].reshape(subshape)
+    z = r[2].reshape(subshape)
 
-    return result
+    newunit = None if fk4c.distance is None else fk4c.distance.unit
+    return FK4(x=x, y=y, z=z, unit=newunit, equinox=fk4c.equinox)
 
 # FK5 to/from FK4
 
@@ -667,7 +669,7 @@ FK4_CORR = \
             [-2.1112979048, -0.0056024448, +0.0102587734]]) * 1.e-6
 
 # This transformation can't be static because the observation date is needed.
- at transformations.dynamic_transform_matrix(FK4NoETermCoordinates, FK5Coordinates, priority=1)
+ at transformations.dynamic_transform_matrix(FK4NoETerms, FK5, priority=1)
 def fk4_no_e_to_fk5(fk4c, skip_precession=False):
 
     # Add in correction terms for FK4 rotating system - Murray 89 eqn 29
@@ -684,7 +686,7 @@ def fk4_no_e_to_fk5(fk4c, skip_precession=False):
         return B * _precession_matrix_besselian(fk4c.equinox.byear, 1950)
 
 # This transformation can't be static because the observation date is needed.
- at transformations.dynamic_transform_matrix(FK5Coordinates, FK4NoETermCoordinates, priority=1)
+ at transformations.dynamic_transform_matrix(FK5, FK4NoETerms, priority=1)
 def fk5_to_fk4_no_e(fk5c):
 
     # Get transposed matrix from FK4 -> FK5 assuming equinox B1950 -> J2000
@@ -697,9 +699,9 @@ def fk5_to_fk4_no_e(fk5c):
         from .earth_orientation import precession_matrix_Capitaine
         return B * precession_matrix_Capitaine(fk5c.equinox, _EQUINOX_J2000)
 
-# GalacticCoordinates to/from FK4/FK5
+# Galactic to/from FK4/FK5
 # can't be static because the equinox is needed
- at transformations.dynamic_transform_matrix(FK5Coordinates, GalacticCoordinates)
+ at transformations.dynamic_transform_matrix(FK5, Galactic)
 def _fk5_to_gal(fk5coords):
     from .angles import rotation_matrix
     from .earth_orientation import _precess_from_J2000_Capitaine
@@ -707,20 +709,20 @@ def _fk5_to_gal(fk5coords):
     # needed mainly to support inverse from galactic
     jequinox = 2000 if fk5coords.equinox is None else fk5coords.equinox.jyear
 
-    mat1 = rotation_matrix(180 - GalacticCoordinates._lon0_J2000.degrees, 'z')
-    mat2 = rotation_matrix(90 - GalacticCoordinates._ngp_J2000.dec.degrees, 'y')
-    mat3 = rotation_matrix(GalacticCoordinates._ngp_J2000.ra.degrees, 'z')
+    mat1 = rotation_matrix(180 - Galactic._lon0_J2000.degree, 'z')
+    mat2 = rotation_matrix(90 - Galactic._ngp_J2000.dec.degree, 'y')
+    mat3 = rotation_matrix(Galactic._ngp_J2000.ra.degree, 'z')
     # transpose gets equinox -> J2000
     matprec = _precess_from_J2000_Capitaine(jequinox).T
     return mat1 * mat2 * mat3 * matprec
 
 
- at transformations.dynamic_transform_matrix(GalacticCoordinates, FK5Coordinates)
+ at transformations.dynamic_transform_matrix(Galactic, FK5)
 def _gal_to_fk5(galcoords):
     return _fk5_to_gal(galcoords).T
 
 
- at transformations.dynamic_transform_matrix(FK4NoETermCoordinates, GalacticCoordinates, priority=1)
+ at transformations.dynamic_transform_matrix(FK4NoETerms, Galactic, priority=1)
 def _fk4_to_gal(fk4coords):
     from .angles import rotation_matrix
     from .earth_orientation import _precession_matrix_besselian
@@ -728,14 +730,14 @@ def _fk4_to_gal(fk4coords):
     # needed mainly to support inverse from galactic
     bequinox = 1950 if fk4coords.equinox is None else fk4coords.equinox.byear
 
-    mat1 = rotation_matrix(180 - GalacticCoordinates._lon0_B1950.degrees, 'z')
-    mat2 = rotation_matrix(90 - GalacticCoordinates._ngp_B1950.dec.degrees, 'y')
-    mat3 = rotation_matrix(GalacticCoordinates._ngp_B1950.ra.degrees, 'z')
+    mat1 = rotation_matrix(180 - Galactic._lon0_B1950.degree, 'z')
+    mat2 = rotation_matrix(90 - Galactic._ngp_B1950.dec.degree, 'y')
+    mat3 = rotation_matrix(Galactic._ngp_B1950.ra.degree, 'z')
     matprec = _precession_matrix_besselian(bequinox, 1950)
     return mat1 * mat2 * mat3 * matprec
 
 
- at transformations.dynamic_transform_matrix(GalacticCoordinates, FK4NoETermCoordinates, priority=1)
+ at transformations.dynamic_transform_matrix(Galactic, FK4NoETerms, priority=1)
 def _gal_to_fk4(galcoords):
     return _fk4_to_gal(galcoords).T
 
@@ -745,12 +747,11 @@ def _make_transform_graph_docs():
     Generates a string for use with the coordinate package's docstring
     to show the available transforms and coordinate systems
     """
-    from inspect import isclass
-    from textwrap import dedent
 
     from .transformations import master_transform_graph
 
-    coosys = [item for item in globals().values()
+    isclass = inspect.isclass
+    coosys = [item for item in list(six.itervalues(globals()))
               if isclass(item) and issubclass(item, SphericalCoordinatesBase)]
     coosys.remove(SphericalCoordinatesBase)
     graphstr = master_transform_graph.to_dot_graph(addnodes=coosys)
@@ -768,15 +769,12 @@ def _make_transform_graph_docs():
     number next to the arrow.  These priorities are used to decide the
     preferred order when two trasnformation paths have the same number
     of steps.  These priorities are defined such that path with a
-    *smaller* total priority are favored over larger.
-    E.g., the path from `ICRSCoordinates` to `GalacticCoordinates` goes
-    through `FK5Coordinates` because the total path length is 2 instead
-    of 2.03.
+    *smaller* total priority are favored over one with larger.
 
 
     .. graphviz::
 
     """
 
-    return dedent(docstr) + '    ' + graphstr.replace('\n', '\n    ')
+    return textwrap.dedent(docstr) + '    ' + graphstr.replace('\n', '\n    ')
 _transform_graph_docs = _make_transform_graph_docs()
diff --git a/astropy/coordinates/coordsystems.py b/astropy/coordinates/coordsystems.py
index 274c2e0..25c2e94 100644
--- a/astropy/coordinates/coordsystems.py
+++ b/astropy/coordinates/coordsystems.py
@@ -3,15 +3,23 @@
 """
 This module contains the base classes and frameworks for coordinate objects.
 """
+
+import copy
+
 from abc import ABCMeta, abstractproperty, abstractmethod
 
+from ..extern import six
 from .. import units as u
-from .angles import RA, Dec, Angle, AngularSeparation
-from .distances import *
+from .angles import Longitude, Latitude, Angle
+from .distances import Distance, CartesianPoints, cartesian_to_spherical, spherical_to_cartesian
+from ..utils.compat.misc import override__dir__
+from . import angle_utilities
+import numpy as np
 
 __all__ = ['SphericalCoordinatesBase']
 
 
+ at six.add_metaclass(ABCMeta)
 class SphericalCoordinatesBase(object):
     """
     Abstract superclass for all coordinate classes representing points
@@ -30,8 +38,6 @@ class SphericalCoordinatesBase(object):
     `astropy.coordinates.builtin_systems` for examples of this.
     """
 
-    __metaclass__ = ABCMeta
-
     @abstractmethod
     def __init__(self, *args, **kwargs):
         """
@@ -90,7 +96,7 @@ class SphericalCoordinatesBase(object):
         * If `x`, `y`, and `z` are given:
             `unit` must be a single unit with dimensions of length"""
 
-    def _initialize_latlon(self, lonname, latname, useradec, initargs, initkwargs):
+    def _initialize_latlon(self, lonname, latname, initargs, initkwargs):
         """
         Subclasses should use this to initialize standard lat/lon-style
         coordinates.
@@ -103,9 +109,6 @@ class SphericalCoordinatesBase(object):
             The name of the longitude-like coordinate attribute
         latname : str
             The name of the latitude-like coordinate attribute
-        useradec : bool
-            If True, the `RA` and `Dec` classes will be used for the
-            angles.  Otherwise, a basic `Angle` will be used.
         initargs : list
             The ``*args`` from the initializer
         initkwargs : dict
@@ -186,7 +189,7 @@ class SphericalCoordinatesBase(object):
                 # need to try to parse the coordinate from a single argument
                 # populates latval and lonval variables, which then get made
                 # into coordinates below
-                if isinstance(coordstr, basestring):
+                if isinstance(coordstr, six.string_types):
                     if "," in coordstr:
                         lonval, latval = coordstr.split(",")
                     else:
@@ -207,16 +210,8 @@ class SphericalCoordinatesBase(object):
                                      "'{1}', must be a string.".format(sclsnm, type(coordstr).__name__))
 
             # now actually create the angle objects
-            if useradec:
-                lonang = RA(lonval, unit=units[0])
-                latang = Dec(latval, unit=units[1])
-            else:
-                if isinstance(lonval, RA):
-                    raise TypeError('Cannot provide an RA object to non-RA/Dec system {0}'.format(sclsnm))
-                if isinstance(latval, Dec):
-                    raise TypeError('Cannot provide a Dec object to non-RA/Dec system {0}'.format(sclsnm))
-                lonang = Angle(lonval, unit=units[0])
-                latang = Angle(latval, unit=units[1])
+            lonang = Longitude(lonval, unit=units[0])
+            latang = Latitude(latval, unit=units[1])
 
             dist = None if distval is None else Distance(distval)  # copy
 
@@ -239,12 +234,8 @@ class SphericalCoordinatesBase(object):
                 unit = cartpoint.unit
             r, latval, lonval = cartesian_to_spherical(x, y, z)
 
-            if useradec:
-                lonang = RA(lonval, unit=u.radian)
-                latang = Dec(latval, unit=u.radian)
-            else:
-                lonang = Angle(lonval, unit=u.radian)
-                latang = Angle(latval, unit=u.radian)
+            lonang = Longitude(lonval, unit=u.radian)
+            latang = Latitude(latval, unit=u.radian)
 
             dist = None if unit is None else Distance(r, unit)
 
@@ -255,35 +246,90 @@ class SphericalCoordinatesBase(object):
                                       lonname=lonname))
 
         # now actually set the values
-        setattr(self, lonname, lonang)
-        setattr(self, latname, latang)
+        self._lonangle = lonang
+        self._latangle = latang
         self._distance = dist
 
-    @abstractproperty
+
+        #sanity-check that they are all consistent shapes
+        if self.lonangle.shape != self.latangle.shape:
+            raise ValueError('lonangle and latangle do not have matching shapes')
+
+        if self._distance is not None and self._distance.shape != self.lonangle.shape:
+            raise ValueError('distance and angles do not have matching shapes')
+
+    def __repr__(self):
+        if self.distance is not None:
+            if self.isscalar:
+                diststr = ', Distance={0:.2g} {1!s}'.format(self.distance.value, self.distance.unit)
+            else:
+                diststr = ', Distance={0} {1!s}'.format(self.distance.value, self.distance.unit)
+        else:
+            diststr = ''
+
+        if self.isscalar:
+            msg = "<{clsnm} {lonnm}={lonval:.5f} deg, {latnm}={latval:.5f} deg{diststr}>"
+        else:
+            msg = "<{clsnm} {lonnm}={lonval} deg, {latnm}={latval} deg{diststr}>"
+        return msg.format(clsnm=self.__class__.__name__, lonval=self.lonangle.degree,
+                          latval=self.latangle.degree, lonnm=self._repr_lon_name,
+                          latnm=self._repr_lat_name, diststr=diststr)
+
+    def __getitem__(self, key):
+        from copy import deepcopy
+
+        oldlat = self._latangle 
+        oldlon = self._lonangle
+        olddist = self._distance
+
+        newlat = oldlat[key]
+        newlon = oldlon[key]
+        if olddist is not None:
+            newdist = olddist[key]
+        else:
+            newdist = None
+
+        try:
+            #don't want to copy the old values, because we've already
+            #copied them above as new*
+            self._latangle = None
+            self._lonangle = None
+            self._distance = None
+
+            newcoo =  deepcopy(self)
+
+            newcoo._latangle = newlat
+            newcoo._lonangle = newlon
+            newcoo._distance = newdist
+
+            return newcoo
+        finally:
+            self._latangle = oldlat
+            self._lonangle = oldlon
+            self._distance = olddist
+
+
+    @property
     def latangle(self):
         """
         The latitudinal/elevation angle for these coordinates as an
-        `~astropy.coorinates.angles.Angle` object.
+        `~astropy.coordinates.angles.Angle` object.
 
-        .. note ::
-            This should be overridden in subclasses as a read-only property that
-            just returns an attribute a way to abstract the exact choice of
-            names for the coordiantes. E.g., `ICRSCoordinates` implements this
-            by doing ``return self.ra``.
+        Subclasses will often provide properties returning the same object, but
+        with a name more appropriate for the particular subclass.
         """
+        return self._latangle
 
-    @abstractproperty
+    @property
     def lonangle(self):
         """
         The longitudinal/azimuthal angle for these coordinates as an
-        `~astropy.coorinates.angles.Angle` object.
+        `~astropy.coordinates.angles.Angle` object.
 
-        .. note ::
-            This should be overridden in subclasses as a read-only property that
-            just returns an attribute a way to abstract the exact choice of
-            names for the coordinates. E.g., `ICRSCoordinates` implements this
-            by doing ``return self.dec``.
+        Subclasses will often provide properties returning the same object, but
+        with a name more appropriate for the particular subclass.
         """
+        return self._lonangle
 
     @property
     def equinox(self):
@@ -351,38 +397,46 @@ class SphericalCoordinatesBase(object):
         if override or self._cartpoint is None:
             if self._distance is None:
                 r = 1
-                runit = None
+                runit = u.dimensionless_unscaled
             else:
-                r = self._distance._value
-                runit = self._distance._unit
-            x, y, z = spherical_to_cartesian(r, self.latangle.radians,
-                                                self.lonangle.radians)
+                r = self._distance.value
+                runit = self._distance.unit
+            x, y, z = spherical_to_cartesian(r, self.latangle.radian,
+                                                self.lonangle.radian)
             self._cartpoint = CartesianPoints(x, y, z, runit)
 
     def separation(self, other):
         """
         Computes on-sky separation between this coordinate and another.
 
-        See the `~astropy.coordinates.angles.AngularSeparation` docstring
-        for further details on the actual calculation.
-
         Parameters
         ----------
         other : `~astropy.coordinates.coordsystems.SphericalCoordinatesBase`
-            The coordinate system to get the separation to.
+            The coordinate to get the separation to.
 
         Returns
         -------
-        sep : `~astropy.coordinates.angles.AngularSeparation`
+        sep : `~astropy.coordinates.angles.Angle`
             The on-sky separation between this and the `other` coordinate.
+
+        Notes
+        -----
+        The separation is calculated using the Vincenty formula, which
+        is stable at all locations, including poles and antipodes [1]_.
+
+        .. [1] http://en.wikipedia.org/wiki/Great-circle_distance
+
         """
         other_in_self_system = other.transform_to(self.__class__)
 
-        lat1 = self.latangle.radians
-        lat2 = other_in_self_system.latangle.radians
-        lon1 = self.lonangle.radians
-        lon2 = other_in_self_system.lonangle.radians
-        return AngularSeparation(lat1, lon1, lat2, lon2, u.radian)
+        lon1 = self.lonangle
+        lat1 = self.latangle
+        lon2 = other_in_self_system.lonangle
+        lat2 = other_in_self_system.latangle
+
+        # Get the separation as a Quantity, convert to Angle in degrees
+        sep = angle_utilities.angular_separation(lon1, lat1, lon2, lat2)
+        return Angle(sep, unit=u.degree)
 
     def separation_3d(self, other):
         """
@@ -415,14 +469,100 @@ class SphericalCoordinatesBase(object):
             raise ValueError('The other object does not have a distance; '
                              'cannot compute 3d separation.')
 
-        dscale = other_in_self_system._distance._unit.to(self._distance._unit, 1)
+        dx = self.x - other_in_self_system.x
+        dy = self.y - other_in_self_system.y
+        dz = self.z - other_in_self_system.z
+
+        distval = (dx.value ** 2 + dy.value ** 2 + dz.value ** 2) ** 0.5
+        return Distance(distval, dx.unit)
+
+    def match_to_catalog_3d(self, catalogcoord, nthneighbor=1):
+        """
+        Finds the nearest 3-dimensional matches of this coordinate to a set
+        of catalog coordinates.
+
+        This finds the 3-dimensional closest neighbor, which is only different
+        from the on-sky distance if `distance` is set in this object or the 
+        `catalogcoord` object.
+        
+        Parameters
+        ----------
+        catalogcoord : `~astropy.coordinates.SphericalCoordinatesBase`
+            The base catalog in which to search for matches. Typically this 
+            will be a coordinate object that is an array (i.e., 
+            ``catalogcoord.isscalar == False``)
+        nthneighbor : int, optional
+            Which closest neighbor to search for.  Typically ``1`` is desired here,
+            as that is correct for matching one set of coordinates to another.
+            The next likely use case is ``2``, for matching a coordinate catalog
+            against *itself* (``1`` is inappropriate because each point will find 
+            itself as the closest match).
+
+        Returns
+        -------
+        idx : integer array
+            Indecies into `catalogcoord` to get the matched points for each 
+            `matchcoord`. Shape matches this coordinate.
+        sep2d : `~astropy.units.quantity.Angle` 
+            The on-sky separation between the closest match for each `matchcoord` and 
+            the `matchcoord`. Shape matches `matchcoord`.
+        dist3d : `~astropy.units.quantity.Quantity` 
+            The 3D distance between the closest match for each `matchcoord` and 
+            the `matchcoord`. Shape matches this coordinate.
+
+        Notes
+        -----
+        This method requires `scipy` to be installed or it will fail.
+
+        See Also
+        --------
+        astropy.coordinates.matching.match_coordinates_3d
+        """
+        from .matching import match_coordinates_3d
 
-        dx = self.x - other_in_self_system.x * dscale
-        dy = self.y - other_in_self_system.y * dscale
-        dz = self.z - other_in_self_system.z * dscale
+        return match_coordinates_3d(self, catalogcoord, nthneighbor=nthneighbor, storekdtree=True)
 
-        distval = (dx ** 2 + dy ** 2 + dz ** 2) ** 0.5
-        return Distance(distval, self._distance._unit)
+    def match_to_catalog_sky(self, catalogcoord, nthneighbor=1):
+        """
+        Finds the nearest on-sky matches of this coordinate in a set of 
+        catalog coordinates.
+        
+        Parameters
+        ----------
+        catalogcoord : `~astropy.coordinates.SphericalCoordinatesBase`
+            The base catalog in which to search for matches. Typically this 
+            will be a coordinate object that is an array (i.e., 
+            ``catalogcoord.isscalar == False``)
+        nthneighbor : int, optional
+            Which closest neighbor to search for.  Typically ``1`` is desired here,
+            as that is correct for matching one set of coordinates to another.
+            The next likely use case is ``2``, for matching a coordinate catalog
+            against *itself* (``1`` is inappropriate because each point will find 
+            itself as the closest match).
+
+        Returns
+        -------
+        idx : integer array
+            Indecies into `catalogcoord` to get the matched points for each 
+            `matchcoord`. Shape matches this coordinate.
+        sep2d : `~astropy.units.quantity.Angle` 
+            The on-sky separation between the closest match for each `matchcoord` and 
+            the `matchcoord`. Shape matches `matchcoord`.
+        dist3d : `~astropy.units.quantity.Quantity` 
+            The 3D distance between the closest match for each `matchcoord` and 
+            the `matchcoord`. Shape matches this coordinate.
+
+        Notes
+        -----
+        This method requires `scipy` to be installed or it will fail.
+        
+        See Also
+        --------
+        astropy.coordinates.matching.match_coordinates_sky
+        """
+        from .matching import match_coordinates_sky
+
+        return match_coordinates_sky(self, catalogcoord, nthneighbor=nthneighbor, storekdtree=True)
 
     #<------------transformation-related stuff here-------------------->
     def transform_to(self, tosys):
@@ -444,12 +584,12 @@ class SphericalCoordinatesBase(object):
         ValueError
             If there is no possible transformation route.
         """
-        from copy import deepcopy
+
         from .transformations import master_transform_graph
         from .errors import ConvertError
 
         if tosys is self.__class__:
-            return deepcopy(self)
+            return copy.deepcopy(self)
 
         trans = master_transform_graph.get_transform(self.__class__, tosys)
         if trans is None:
@@ -497,6 +637,7 @@ class SphericalCoordinatesBase(object):
             msg = "'{0}' object has no attribute '{1}', nor a transform."
             raise AttributeError(msg.format(self.__class__.__name__, name))
 
+    @override__dir__
     def __dir__(self):
         """
         Overriding the builtin `dir` behavior allows us to add the
@@ -505,16 +646,25 @@ class SphericalCoordinatesBase(object):
         """
         from .transformations import master_transform_graph
 
-        # the stuff `dir` normally gives
-        dir_items = dir(type(self)) + self.__dict__.keys()
+        dir_items = set()
 
         # determine the aliases that this can be transformed to.
         for alias in master_transform_graph.get_aliases():
             tosys = master_transform_graph.lookup_name(alias)
             if self.is_transformable_to(tosys):
-                dir_items.append(alias)
+                dir_items.add(alias)
+
+        return dir_items
+
+    @property
+    def isscalar(self):
+        """
+        True if this coordinate contains scalar angles/distances, or False if
+        they are array-like
+        """
+        #assumes input-validation occurs and thus lat/lon/dist consistent
+        return self.lonangle.isscalar
 
-        return sorted(set(dir_items))
 
     # Name resolve
     @classmethod
@@ -536,8 +686,8 @@ class SphericalCoordinatesBase(object):
         -------
         coord : SphericalCoordinatesBase
             Instance of a Coordinates class, specified by the class this is
-            called on, e.g. if `GalacticCoordinates.from_name('m42')`, will
-            get an instance of `GalacticCoordinates` representing the
+            called on, e.g. if `Galactic.from_name('m42')`, will
+            get an instance of `Galactic` representing the
             position of M42.
         """
 
@@ -548,3 +698,61 @@ class SphericalCoordinatesBase(object):
             return icrs
         else:
             return icrs.transform_to(cls)
+
+    _default_string_style = 'dms'
+
+    def to_string(self, style=None, **kwargs):
+        """
+        A string representation of the coordinates.
+
+        See :meth:`astropy.coordinates.Angle.to_string` for details and keyword
+        arguments (the two angles forming the coordinates are are both
+        :class:`astropy.coordinates.Angle` instances). Keyword arguments are passed to
+        :meth:`astropy.coordinates.Angle.to_string`.
+
+        Parameters
+        ----------
+        style : {'hmsdms', 'dms', 'decimal', None}
+            The formatting specification to use. These encode the three most
+            common ways to represent coordinates. If `None` is passed, the
+            defaults for the current coordinate class is used.
+        kwargs
+            Keyword arguments are passed to :meth:`astropy.coordinates.Angle.to_string`.
+        """
+
+        if style is None:
+            style = self._default_string_style
+
+        styles = {
+                  'hmsdms': {'lonargs': {'unit':u.hour},
+                             'latargs': {'unit':u.degree}},
+                  'dms':    {'lonargs': {'unit':u.degree},
+                             'latargs': {'unit':u.degree}},
+                  'decimal':{'lonargs': {'unit':u.degree,'decimal':True},
+                             'latargs': {'unit':u.degree,'decimal':True}}
+                 }
+
+        lonargs = kwargs.copy()
+        latargs = kwargs.copy()
+
+        if style in styles:
+            lonargs.update(styles[style]['lonargs'])
+            latargs.update(styles[style]['latargs'])
+        else:
+            raise ValueError('Invalid style.  Valid options are: '+",".join(styles))
+
+        if np.isscalar(self.lonangle.value):
+            coord_string = (self.lonangle.to_string(**lonargs)
+                            + " " +
+                            self.latangle.to_string(**latargs))
+        else:
+            coord_string = []
+            for lonangle, latangle in zip(self.lonangle, self.latangle):
+                coord_string += [(lonangle.to_string(**lonargs)
+                                 + " " +
+                                 latangle.to_string(**latargs))]
+
+        if hasattr(coord_string,'decode'):
+            return coord_string.decode()
+
+        return coord_string
diff --git a/astropy/coordinates/distances.py b/astropy/coordinates/distances.py
index f65773e..ab32aed 100644
--- a/astropy/coordinates/distances.py
+++ b/astropy/coordinates/distances.py
@@ -4,170 +4,166 @@
 This module contains the classes and utility functions for distance and
 cartesian coordinates.
 """
-from abc import ABCMeta, abstractproperty, abstractmethod
+
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import math
 
 import numpy as np
 
-from .angles import RA, Dec, Angle, AngularSeparation
-from .errors import UnitsError
 from .. import units as u
-from .. import cosmology
 
 __all__ = ['Distance', 'CartesianPoints', 'cartesian_to_spherical',
            'spherical_to_cartesian']
 
 
-# FIXME: make this subclass Quantity once Quantity is in master
-class Distance(object):
+__doctest_requires__ = {'*': ['scipy.integrate']}
+
+
+class Distance(u.Quantity):
     """
     A one-dimensional distance.
 
-    This can be initialized in one of three ways: a distance and a unit,
-    a `~astropy.units.quantity.Quantity` object, or a redshift and
-    (optionally) a cosmology.  `value` and `unit` may be provided as
-    positional arguments, but `z` and `cosmology` are only valid as
-    keyword arguments (see examples).
+    This can be initialized in one of four ways:
+
+    * A distance `value` (array or float) and a `unit`
+    * A `~astropy.units.quantity.Quantity` object
+    * A redshift and (optionally) a cosmology.
+    * Providing a distance modulus
 
     Parameters
     ----------
     value : scalar or `~astropy.units.quantity.Quantity`
         The value of this distance
     unit : `~astropy.units.core.UnitBase`
-        The units for this distance.  Must have dimensions of distance.
+        The units for this distance, *if* `value` is not a `Quantity`.
+        Must have dimensions of distance.
     z : float
         A redshift for this distance.  It will be converted to a distance
         by computing the luminosity distance for this redshift given the
-        cosmology specified by `cosmology`.
+        cosmology specified by `cosmology`. Must be given as a keyword argument.
     cosmology : `~astropy.cosmology.Cosmology` or None
         A cosmology that will be used to compute the distance from `z`.
         If None, the current cosmology will be used (see
         `astropy.cosmology` for details).
+    distmod : float or `~astropy.units.Quantity`
+        The distance modulus for this distance.
+    dtype : ~numpy.dtype, optional
+        See `~astropy.units.Quantity`. Must be given as a keyword argument.
+    copy : bool, optional
+        See `~astropy.units.Quantity`. Must be given as a keyword argument.
 
     Raises
     ------
-    UnitsError
+    astropy.units.core.UnitsError
         If the `unit` is not a distance.
+    ValueError
+        If `z` is provided with a `unit` or `cosmology` is provided when `z` is
+        *not* given, or `value` is given as well as `z`
 
     Examples
     --------
     >>> from astropy import units as u
-    >>> from astropy.cosmology import WMAP3
+    >>> from astropy import cosmology
+    >>> from astropy.cosmology import WMAP5, WMAP7
+    >>> cosmology.set_current(WMAP7)
     >>> d1 = Distance(10, u.Mpc)
     >>> d2 = Distance(40, unit=u.au)
     >>> d3 = Distance(value=5, unit=u.kpc)
     >>> d4 = Distance(z=0.23)
-    >>> d5 = Distance(z=0.23, cosmology=WMAP3)
+    >>> d5 = Distance(z=0.23, cosmology=WMAP5)
+    >>> d6 = Distance(distmod=24.47)
     """
 
-    def __init__(self, *args, **kwargs):
-        if len(args) == 1 and isinstance(args[0], Distance):
-            # just copy
-            self._value = args[0]._value
-            self._unit = args[0]._unit
-        elif len(args) == 1 and isinstance(args[0], u.Quantity):
-            self._value = args[0].value
-            self._unit = args[0].unit
-        elif 'z' in kwargs:
-            z = kwargs.pop('z')
-            cosmo = kwargs.pop('cosmology', None)
-            if cosmo is None:
-                cosmo = cosmology.get_current()
-
-            if len(args) > 0 or len(kwargs) > 0:
-                raise TypeError('Cannot give both distance and redshift')
-
-            self._value = cosmo.luminosity_distance(z)
-            self._unit = u.Mpc
-        else:
-            if len(args) == 0:
-                value = kwargs.pop('value', None)
-                unit = kwargs.pop('unit', None)
-            elif len(args) == 1:
-                value = args[0]
-                unit = kwargs.pop('unit', None)
-            elif len(args) == 2:
-                value, unit = args
-            else:
-                raise TypeError('Distance constructor cannot take more than 2 arguments')
+    _include_easy_conversion_members = True
 
-            if len(kwargs) > 0:
-                raise TypeError('Invalid keywords provided to Distance: ' +
-                                str(kwargs.keys()))
+    def __new__(cls, value=None, unit=None, z=None, cosmology=None,
+                distmod=None, dtype=None, copy=True):
+        from ..cosmology import get_current
 
-            if value is None:
-                raise ValueError('A value for the distance must be provided')
-            if unit is None:
-                raise UnitsError('A unit must be provided for distance.')
+        if isinstance(value, u.Quantity):
+            # This includes Distances as well
+            if z is not None or distmod is not None:
+                raise ValueError('`value` was given along with `z` or `distmod`'
+                                 ' in Quantity constructor.')
 
-            if not unit.is_equivalent(u.m):
-                raise UnitsError('provided unit for Distance is not a length')
-            self._value = value
-            self._unit = unit
+            if unit is not None:
+                value = value.to(unit).value
+            else:
+                unit = value.unit
+                value = value.value
+        elif value is None:
+            if z is not None:
+                if distmod is not None:
+                    raise ValueError('both `z` and `distmod` given in Distance '
+                                     'constructor')
+
+                if cosmology is None:
+                    cosmology = get_current()
+
+                ld = cosmology.luminosity_distance(z)
+
+                if unit is not None:
+                    ld = ld.to(unit)
+                value = ld.value
+                unit = ld.unit
+
+            elif distmod is not None:
+                value = cls._distmod_to_pc(distmod)
+                if unit is None:
+                    # choose unit based on most reasonable of Mpc, kpc, or pc
+                    if value > 1e6:
+                        value = value / 1e6
+                        unit = u.megaparsec
+                    elif value > 1e3:
+                        value = value / 1e3
+                        unit = u.kiloparsec
+                    else:
+                        unit = u.parsec
+                else:
+                    value = u.Quantity(value, u.parsec).to(unit).value
+            else:
+                raise ValueError('none of `value`, `z`, or `distmod` were given'
+                                 ' to Distance constructor')
 
-    def __repr__(self):
-        return "<{0} {1:.5f} {2!s}>".format(type(self).__name__, self._value, self._unit)
+                value = ld.value
+                unit = ld.unit
+        elif z is not None:  # and value is not None based on above
+            raise ValueError('Both `z` and a `value` were provided in Distance '
+                             'constructor')
+        elif cosmology is not None:
+            raise ValueError('A `cosmology` was given but `z` was not provided '
+                             'in Distance constructor')
+        elif unit is None:
+            raise u.UnitsError('No unit was provided for Distance')
+        #"else" the baseline `value` + `unit` case
 
-    @property
-    def lightyear(self):
-        """
-        The value of this distance in light years
-        """
-        return self._unit.to(u.lyr, self._value)
+        unit = _convert_to_and_validate_length_unit(unit)
 
-    @property
-    def pc(self):
-        """
-        The value of this distance in parsecs
-        """
-        return self._unit.to(u.parsec, self._value)
+        try:
+            value = np.asarray(value)
+        except ValueError as e:
+            raise TypeError(str(e))
 
-    @property
-    def kpc(self):
-        """
-        The value of this distance in kiloparsecs
-        """
-        return self._unit.to(u.kpc, self._value)
+        if value.dtype.kind not in 'iuf':
+            raise TypeError("Unsupported dtype '{0}'".format(value.dtype))
 
-    @property
-    def Mpc(self):
-        """
-        The value of this distance in megaparsecs
-        """
-        return self._unit.to(u.Mpc, self._value)
+        return super(Distance, cls).__new__(cls, value, unit, dtype=dtype,
+                                            copy=copy)
 
-    @property
-    def au(self):
-        """
-        The value of this distance in astronomical units
-        """
-        return self._unit.to(u.au, self._value)
+    def __quantity_view__(self, obj, unit):
+        unit = _convert_to_and_validate_length_unit(unit)
+        return super(Distance, self).__quantity_view__(obj, unit)
 
-    @property
-    def m(self):
-        """
-        The value of this distance in meters
-        """
-        return self._unit.to(u.m, self._value)
+    def __quantity_instance__(self, val, unit, **kwargs):
+        unit = _convert_to_and_validate_length_unit(unit)
+        return super(Distance, self).__quantity_instance__(val, unit, **kwargs)
 
-    @property
-    def km(self):
-        """
-        The value of this distance in kilometers
-        """
-        return self._unit.to(u.km, self._value)
 
     @property
     def z(self):
-        """
-        The redshift for this distance assuming its physical distance is
-        a luminosity distance.
-
-        .. note::
-            This uses the "current" cosmology to determine the appropriate
-            distance to redshift conversions.  See `astropy.cosmology`
-            for details on how to change this.
-
-        """
+        """Short for ``self.compute_z()``"""
         return self.compute_z()
 
     def compute_z(self, cosmology=None):
@@ -181,37 +177,157 @@ class Distance(object):
             The cosmology to assume for this calculation, or None to use the
             current cosmology.
 
+        Returns
+        -------
+        z : float
+            The redshift of this distance given the provided `cosmology`.
         """
         from ..cosmology import luminosity_distance
         from scipy import optimize
 
         # FIXME: array: need to make this calculation more vector-friendly
 
-        f = lambda z, d, cos: (luminosity_distance(z, cos) - d) ** 2
+        f = lambda z, d, cos: (luminosity_distance(z, cos).value - d) ** 2
         return optimize.brent(f, (self.Mpc, cosmology))
 
+    @property
+    def distmod(self):
+        """  The distance modulus of this distance as a Quantity """
+        val = 5. * np.log10(self.to(u.pc).value) - 5.
+        return u.Quantity(val, u.mag)
+
+    @staticmethod
+    def _distmod_to_pc(dm):
+        return 10 ** ((dm + 5) / 5.)
+
 
-class CartesianPoints(object):
+class CartesianPoints(u.Quantity):
     """
     A cartesian representation of a point in three-dimensional space.
 
-    Attributes
+    Parameters
     ----------
-    x : number or array
-        The first cartesian coordinate.
-    y : number or array
+    x : `~astropy.units.Quantity` or array-like
+        The first cartesian coordinate or a single array or
+        `~astropy.units.Quantity` where the first dimension is length-3.
+    y : `~astropy.units.Quantity` or array-like, optional
         The second cartesian coordinate.
-    z : number or array
+    z : `~astropy.units.Quantity` or array-like, optional
         The third cartesian coordinate.
     unit : `~astropy.units.UnitBase` object or None
-        The physical unit of the coordinate values.
+        The physical unit of the coordinate values. If `x`, `y`, or `z`
+        are quantities, they will be converted to this unit.
+    dtype : ~numpy.dtype, optional
+        See `~astropy.units.Quantity`. Must be given as a keyword argument.
+    copy : bool, optional
+        See `~astropy.units.Quantity`. Must be given as a keyword argument.
+
+    Raises
+    ------
+    astropy.units.UnitsError
+        If the units on `x`, `y`, and `z` do not match or an invalid unit is given
+    ValueError
+        If `y` and `z` don't match `x`'s shape or `x` is not length-3
+    TypeError
+        If incompatible array types are passed into `x`, `y`, or `z`
+
     """
 
-    def __init__(self, x, y, z, unit=None):
-        self.x = x
-        self.y = y
-        self.z = z
-        self.unit = unit
+    #this ensures that __array_wrap__ gets called for ufuncs even when
+    #where a quantity is first, like ``3*u.m + c``
+    __array_priority__ = 10001
+
+    def __new__(cls, x, y=None, z=None, unit=None, dtype=None, copy=True):
+        if y is None and z is None:
+            if len(x) != 3:
+                raise ValueError('input to CartesianPoints is not length 3')
+
+            qarr = x
+            if unit is None and hasattr(qarr, 'unit'):
+                unit = qarr.unit  # for when a Quantity is given
+        elif y is not None and z is not None:
+            if unit is None:
+                #they must all match units or this fails
+                for coo in (x, y, z):
+                    if hasattr(coo, 'unit'):
+                        if unit is not None and coo.unit != unit:
+                            raise u.UnitsError('Units for `x`, `y`, and `z` do '
+                                               'not match in CartesianPoints')
+                        unit = coo.unit
+                #if `unit`  is still None at this point, it means none were
+                #Quantties, which is fine, because it means the user wanted
+                #the unit to be None
+            else:
+                #convert any that are like a Quantity to the given unit
+                if hasattr(x, 'to'):
+                    x = x.to(unit)
+                if hasattr(y, 'to'):
+                    y = y.to(unit)
+                if hasattr(z, 'to'):
+                    z = z.to(unit)
+
+            qarr = [np.asarray(coo) for coo in (x, y, z)]
+            if not (qarr[0].shape == qarr[1].shape == qarr[2].shape):
+                raise ValueError("shapes for x,y, and z don't match in "
+                                 "CartesianPoints")
+                #let the unit be whatever it is
+        else:
+            raise TypeError('Must give all of x,y, and z or just array in '
+                            'CartesianPoints')
+        try:
+            unit = _convert_to_and_validate_length_unit(unit, True)
+        except TypeError as e:
+            raise u.UnitsError(str(e))
+
+        try:
+            qarr = np.asarray(qarr)
+        except ValueError as e:
+            raise TypeError(str(e))
+
+        if qarr.dtype.kind not in 'iuf':
+            raise TypeError("Unsupported dtype '{0}'".format(qarr.dtype))
+
+        return super(CartesianPoints, cls).__new__(cls, qarr, unit, dtype=dtype,
+                                            copy=copy)
+
+    def __quantity_view__(self, obj, unit):
+        unit = _convert_to_and_validate_length_unit(unit, True)
+        return super(CartesianPoints, self).__quantity_view__(obj, unit)
+
+    def __quantity_instance__(self, val, unit, **kwargs):
+        unit = _convert_to_and_validate_length_unit(unit, True)
+        return super(CartesianPoints, self).__quantity_instance__(val, unit, **kwargs)
+
+    def __array_wrap__(self, obj, context=None):
+        #always convert to CartesianPoints because all operations that would
+        #screw up the units are killed by _convert_to_and_validate_length_unit
+        obj = super(CartesianPoints, self).__array_wrap__(obj, context=context)
+
+        #always prefer self's unit
+        obj = obj.to(self.unit)
+
+        return CartesianPoints(obj.value, unit=obj.unit, copy=False)
+
+    @property
+    def x(self):
+        """
+        The second cartesian coordinate as a `~astropy.units.Quantity`.
+        """
+        return self[0]
+
+    @property
+    def y(self):
+        """
+        The second cartesian coordinate as a `~astropy.units.Quantity`.
+        """
+        return self[1]
+
+    @property
+    def z(self):
+        """
+        The third cartesian coordinate as a `~astropy.units.Quantity`.
+        """
+        return self[2]
 
     def to_spherical(self):
         """
@@ -219,50 +335,35 @@ class CartesianPoints(object):
 
         Returns
         -------
-        r : float or array
-            The radial coordinate (in the same units as the inputs).
-        lat : float or array
-            The latitude in radians
-        lon : float or array
-            The longitude in radians
+        r : astropy.units.Quantity
+            The radial coordinate (in the same units as this `CartesianPoint`).
+        lat : astropy.units.Quantity
+            The spherical coordinates latitude.
+        lon : astropy.units.Quantity
+            The spherical coordinates longitude.
 
         """
-        return cartesian_to_spherical(self.x, self.y, self.z)
-
-    def __repr__(self):
-        return '<CartesianPoints ({x}, {y}, {z}) {unit}>'.format(x=self.x,
-                y=self.y, z=self.z, unit=self.unit)
-
-    def __eq__(self, other):
-        return (isinstance(other, CartesianPoints) and self.x == other.x and
-                self.y == other.y and self.z == other.z and
-                self.unit == other.unit)
-
-    def __add__(self, other):
-        if isinstance(other, CartesianPoints) or (hasattr(other, 'x') and
-            hasattr(other, 'y') and hasattr(other, 'z') and
-            hasattr(other, 'unit')):
-            newx = self.x + other.unit.to(self.unit, other.x)
-            newy = self.y + other.unit.to(self.unit, other.y)
-            newz = self.z + other.unit.to(self.unit, other.z)
-        else:
-            msg = "unsupported operand type(s) for +: '{sel}' and '{other}'"
-            raise TypeError(msg.format(type(self).__name__,
-                                        type(other).__name__))
-        return CartesianPoints(newx, newy, newz, self.unit)
-
-    def __sub__(self, other):
-        if isinstance(other, CartesianPoints) or (hasattr(other, 'x') and
-            hasattr(other, 'y') and hasattr(other, 'z') and
-            hasattr(other, 'unit')):
-            newx = self.x - other.unit.to(self.unit, other.x)
-            newy = self.y - other.unit.to(self.unit, other.y)
-            newz = self.z - other.unit.to(self.unit, other.z)
-        else:
-            msg = "unsupported operand type(s) for -: '{sel}' and '{other}'"
-            raise TypeError(msg.format(type(self).__name__,
-                                        type(other).__name__))
-        return CartesianPoints(newx, newy, newz, self.unit)
+        from .angles import Latitude, Longitude
+
+        rarr, latarr, lonarr = cartesian_to_spherical(self.x, self.y, self.z)
+
+        r = Distance(rarr, unit=self.unit)
+        lat = Latitude(latarr, unit=u.radian)
+        lon = Longitude(lonarr, unit=u.radian)
+
+        return r, lat, lon
+
+
+def _convert_to_and_validate_length_unit(unit, allow_dimensionless=False):
+    """
+    raises `astropy.units.UnitsError` if not a length unit
+    """
+    unit = u.Unit(unit)
+
+    if not unit.is_equivalent(u.kpc):
+        if not (allow_dimensionless and unit == u.dimensionless_unscaled):
+            raise u.UnitsError('Unit "{0}" is not a length type'.format(unit))
+    return unit
 
 #<------------transformation-related utility functions----------------->
 
@@ -300,7 +401,6 @@ def cartesian_to_spherical(x, y, z):
     lon : float or array
         The longitude in radians
     """
-    import math
 
     xsq = x ** 2
     ysq = y ** 2
@@ -354,7 +454,6 @@ def spherical_to_cartesian(r, lat, lon):
 
 
     """
-    import math
 
     if np.isscalar(r) and np.isscalar(lat) and np.isscalar(lon):
         x = r * math.cos(lat) * math.cos(lon)
diff --git a/astropy/coordinates/earth_orientation.py b/astropy/coordinates/earth_orientation.py
index d7f4370..6874f98 100644
--- a/astropy/coordinates/earth_orientation.py
+++ b/astropy/coordinates/earth_orientation.py
@@ -7,6 +7,10 @@ precession and nutation.
 This module is (currently) not intended to be part of the public API, but
 is instead primarily for internal use in `coordinates`
 """
+
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 import numpy as np
 
 from ..time import Time
@@ -216,7 +220,6 @@ def _load_nutation_data(datastr, seriestype):
 
     Seriestype can be 'lunisolar' or 'planetary'
     """
-    from os.path import join
 
     if seriestype == 'lunisolar':
         dtypes = [('nl', int),
@@ -251,9 +254,10 @@ def _load_nutation_data(datastr, seriestype):
     else:
         raise ValueError('requested invalid nutation series type')
 
-    lines = [l for l in datastr.split('\n') if not l.startswith('#') if not l.strip() == '']
+    lines = [l for l in datastr.split('\n')
+             if not l.startswith('#') if not l.strip() == '']
 
-    lists = [[] for n in dtypes]
+    lists = [[] for _ in dtypes]
     for l in lines:
         for i, e in enumerate(l.split(' ')):
             lists[i].append(dtypes[i][1](e))
diff --git a/astropy/coordinates/errors.py b/astropy/coordinates/errors.py
index 8e3396f..a4fe216 100644
--- a/astropy/coordinates/errors.py
+++ b/astropy/coordinates/errors.py
@@ -1,10 +1,16 @@
 # -*- coding: utf-8 -*-
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
-''' This module defines custom errors and exceptions used in astropy.coordinates. '''
+''' This module defines custom errors and exceptions used in astropy.coordinates.
+'''
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
-__all__ = ['RangeError', 'BoundsError', 'UnitsError', 'IllegalHourError',
-           'IllegalMinuteError', 'IllegalSecondError', 'ConvertError']
+from ..utils.exceptions import AstropyWarning
+
+__all__ = ['RangeError', 'BoundsError', 'IllegalHourError',
+           'IllegalMinuteError', 'IllegalSecondError', 'ConvertError',
+           'IllegalHourWarning', 'IllegalMinuteWarning', 'IllegalSecondWarning']
 
 
 class RangeError(ValueError):
@@ -39,9 +45,28 @@ class IllegalHourError(RangeError):
         return "An invalid value for 'hours' was found ('{0}'); must be in the range [0,24).".format(self.hour)
 
 
+class IllegalHourWarning(AstropyWarning):
+    """
+    Raised when an hour value is 24.
+
+    Parameters
+    ----------
+    hour : int, float
+    """
+    def __init__(self, hour, alternativeactionstr=None):
+        self.hour = hour
+        self.alternativeactionstr = alternativeactionstr
+
+    def __str__(self):
+        message = "'hour' was found  to be '{0}', which is not in range (-24, 24).".format(self.hour)
+        if self.alternativeactionstr is not None:
+            message += ' ' + self.alternativeactionstr
+        return message
+
+
 class IllegalMinuteError(RangeError):
     """
-    Raised when an minute value is not in the range [0,60).
+    Raised when an minute value is not in the range [0,60].
 
     Usage:
         if not 0 <= min < 60:
@@ -55,12 +80,31 @@ class IllegalMinuteError(RangeError):
         self.minute = minute
 
     def __str__(self):
-        return "An invalid value for 'minute' was found ('{0}'); must be in the range [0,60).".format(self.minute)
+        return "An invalid value for 'minute' was found ('{0}'); should be in the range [0,60).".format(self.minute)
+
+
+class IllegalMinuteWarning(AstropyWarning):
+    """
+    Raised when a minute value is 60.
+
+    Parameters
+    ----------
+    minute : int, float
+    """
+    def __init__(self, minute, alternativeactionstr=None):
+        self.minute = minute
+        self.alternativeactionstr = alternativeactionstr
+
+    def __str__(self):
+        message = "'minute' was found  to be '{0}', which is not in range [0,60).".format(self.minute)
+        if self.alternativeactionstr is not None:
+            message += ' ' + self.alternativeactionstr
+        return message
 
 
 class IllegalSecondError(RangeError):
     """
-    Raised when an second value (time) is not in the range [0,60).
+    Raised when an second value (time) is not in the range [0,60].
 
     Usage:
         if not 0 <= sec < 60:
@@ -74,7 +118,26 @@ class IllegalSecondError(RangeError):
         self.second = second
 
     def __str__(self):
-        return "An invalid value for 'second' was found ('{0}'); must be in the range [0,60).".format(self.second)
+        return "An invalid value for 'second' was found ('{0}'); should be in the range [0,60).".format(self.second)
+
+
+class IllegalSecondWarning(AstropyWarning):
+    """
+    Raised when a second value is 60.
+
+    Parameters
+    ----------
+    second : int, float
+    """
+    def __init__(self, second, alternativeactionstr=None):
+        self.second = second
+        self.alternativeactionstr = alternativeactionstr
+
+    def __str__(self):
+        message = "'second' was found  to be '{0}', which is not in range [0,60).".format(self.second)
+        if self.alternativeactionstr is not None:
+            message += ' ' + self.alternativeactionstr
+        return message
 
 
 # TODO: consider if this should be used to `units`?
diff --git a/astropy/coordinates/matching.py b/astropy/coordinates/matching.py
new file mode 100644
index 0000000..bf4bd13
--- /dev/null
+++ b/astropy/coordinates/matching.py
@@ -0,0 +1,173 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+This module contains functions for matching coordinate catalogs.
+"""
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import numpy as np
+
+from ..extern import six
+
+__all__ = ['match_coordinates_3d', 'match_coordinates_sky']
+
+def match_coordinates_3d(matchcoord, catalogcoord, nthneighbor=1, storekdtree=True):
+    """
+    Finds the nearest 3-dimensional matches of a coordinate or coordinates in
+    a set of catalog coordinates.
+
+    This finds the 3-dimensional closest neighbor, which is only different
+    from the on-sky distance if `distance` is set in either `matchcoord`
+    or `catalogcoord`.
+
+    Parameters
+    ----------
+    matchcoord : `~astropy.coordinates.SphericalCoordinatesBase`
+        The coordinate(s) to match to the catalog.
+    catalogcoord : `~astropy.coordinates.SphericalCoordinatesBase`
+        The base catalog in which to search for matches. Typically this will
+        be a coordinate object that is an array (i.e.,
+        ``catalogcoord.isscalar == False``)
+    nthneighbor : int, optional
+        Which closest neighbor to search for.  Typically ``1`` is desired here,
+        as that is correct for matching one set of coordinates to another.
+        The next likely use case is ``2``, for matching a coordinate catalog
+        against *itself* (``1`` is inappropriate because each point will find
+        itself as the closest match).
+    storekdtree : bool or str, optional
+        If True or a string, will store the KD-Tree used for the computation
+        in the `catalogcoord`.  This dramatically speeds up subsequent calls
+        with the same catalog. If a str, it specifies the attribute name for
+        `catalogcoord` that should store the KD-tree.
+
+    Returns
+    -------
+    idx : integer array
+        Indecies into `catalogcoord` to get the matched points for each
+        `matchcoord`. Shape matches `matchcoord`.
+    sep2d : `~astropy.units.quantity.Angle`
+        The on-sky separation between the closest match for each `matchcoord` and
+        the `matchcoord`. Shape matches `matchcoord`.
+    dist3d : `~astropy.units.quantity.Quantity`
+        The 3D distance between the closest match for each `matchcoord` and
+        the `matchcoord`. Shape matches `matchcoord`.
+
+    Notes
+    -----
+    This function requires `scipy` to be installed or it will fail.
+    """
+    from warnings import warn
+
+    #without scipy this will immediately fail
+    from scipy import spatial
+    try:
+        KDTree = spatial.cKDTree
+    except:
+        warn('C-base KD tree not found, falling back on (much slower) '
+             'python implementation')
+        KDTree = spatial.KDTree
+
+    if storekdtree is True:
+        storekdtree = '_kdtree'
+
+    # figure out where any cached KDTree might be
+    if isinstance(storekdtree, six.string_types):
+        kdt = getattr(catalogcoord, storekdtree, None)
+        if kdt is not None and not isinstance(kdt, KDTree):
+            raise ValueError('Invalid `storekdtree` string:' + storekdtree)
+    elif isinstance(storekdtree, KDTree):
+        kdt = storekdtree
+        storekdtree = None
+    elif not storekdtree:
+        kdt = None
+    else:
+        raise ValueError('Invalid `storekdtree` argument:' +
+                          str(storekdtree))
+
+    if kdt is None:
+        #need to build the cartesian KD-tree for the catalog
+        cart = catalogcoord.cartesian
+        flatxyz = cart.reshape((3, np.prod(cart.shape) // 3))
+        kdt = KDTree(flatxyz.value.T)
+
+    #make sure coordinate systems match
+    matchcoord = matchcoord.transform_to(catalogcoord.__class__)
+
+    #make sure units match
+    catunit = catalogcoord.cartesian.unit
+    cart = matchcoord.cartesian.to(catunit)
+
+    flatxyz = cart.reshape((3, np.prod(cart.shape) // 3))
+    dist, idx = kdt.query(flatxyz.T, nthneighbor)
+
+    if nthneighbor > 1:  # query gives 1D arrays if k=1, 2D arrays otherwise
+        dist = dist[:, -1]
+        idx = idx[:, -1]
+
+    if storekdtree:
+        #cache the kdtree
+        setattr(catalogcoord, storekdtree, kdt)
+
+    sep2d = catalogcoord[idx].separation(matchcoord)
+    return idx.reshape(cart.shape[1:]), sep2d, dist.reshape(cart.shape[1:]) * catunit
+
+
+def match_coordinates_sky(matchcoord, catalogcoord, nthneighbor=1, storekdtree=True):
+    """
+    Finds the nearest on-sky matches of a coordinate or coordinates in
+    a set of catalog coordinates.
+
+    This finds the on-sky closest neighbor, which is only different from the
+    3-dimensional match if `distance` is set in either `matchcoord`
+    or `catalogcoord`.
+
+    Parameters
+    ----------
+    matchcoord : `~astropy.coordinates.SphericalCoordinatesBase`
+        The coordinate(s) to match to the catalog.
+    catalogcoord : `~astropy.coordinates.SphericalCoordinatesBase`
+        The base catalog in which to search for matches. Typically this will
+        be a coordinate object that is an array (i.e.,
+        ``catalogcoord.isscalar == False``)
+    nthneighbor : int, optional
+        Which closest neighbor to search for.  Typically ``1`` is desired here,
+        as that is correct for matching one set of coordinates to another.
+        The next likely use case is ``2``, for matching a coordinate catalog
+        against *itself* (``1`` is inappropriate because each point will find
+        itself as the closest match).
+    storekdtree : bool or str, optional
+        If True or a string, will store the KD-Tree used for the computation
+        in the `catalogcoord`.  This dramatically speeds up subsequent calls
+        with the same catalog. If a str, it specifies the attribute name for
+        `catalogcoord` that should store the KD-tree.
+
+    Returns
+    -------
+    idx : integer array
+        Indecies into `catalogcoord` to get the matched points for each
+        `matchcoord`. Shape matches `matchcoord`.
+    sep2d : `~astropy.units.quantity.Angle`
+        The on-sky separation between the closest match for each `matchcoord` and
+        the `matchcoord`. Shape matches `matchcoord`.
+    dist3d : `~astropy.units.quantity.Quantity`
+        The 3D distance between the closest match for each `matchcoord` and
+        the `matchcoord`. Shape matches `matchcoord`.
+
+    Notes
+    -----
+    This function requires `scipy` to be installed or it will fail.
+    """
+    dcoo = matchcoord._distance
+    cpcoo = matchcoord._cartpoint
+    dcat = catalogcoord._distance
+    cpcat = catalogcoord._cartpoint
+    try:
+        matchcoord._distance = matchcoord._cartpoint = None
+        catalogcoord._distance = catalogcoord._cartpoint = None
+        return match_coordinates_3d(matchcoord, catalogcoord, nthneighbor, storekdtree)
+    finally:
+        matchcoord._distance = dcoo
+        matchcoord._cartpoint = cpcoo
+        catalogcoord._distance = dcat
+        catalogcoord._cartpoint = cpcat
diff --git a/astropy/coordinates/name_resolve.py b/astropy/coordinates/name_resolve.py
index b7f2509..65447c5 100644
--- a/astropy/coordinates/name_resolve.py
+++ b/astropy/coordinates/name_resolve.py
@@ -7,36 +7,29 @@ Note that this is intended to be a convenience, and is very simple. If you
 need precise coordinates for an object you should find the appropriate
 reference for that measurement and input the coordinates manually.
 """
-
-from __future__ import division, print_function
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 # Standard library
 import os
 import re
-import sys
-import httplib
-import urllib
-import urllib2
-from urlparse import urlparse
 import socket
 
-# Third party
-import numpy as np
-
 # Astropy
 from ..config import ConfigurationItem
-from .builtin_systems import ICRSCoordinates
+from ..extern.six.moves import urllib
 from .. import units as u
+from .builtin_systems import ICRS
 
 __all__ = ["get_icrs_coordinates"]
 
-SESAME_URL = ConfigurationItem("sesame_url", 
+SESAME_URL = ConfigurationItem("sesame_url",
                         ["http://cdsweb.u-strasbg.fr/cgi-bin/nph-sesame/",
                          "http://vizier.cfa.harvard.edu/viz-bin/nph-sesame/"],
                         "The URL to Sesame's web-queryable database.",
                         cfgtype='string_list')
 
-SESAME_DATABASE = ConfigurationItem("sesame_database", ['all', 'simbad', 'ned', 
+SESAME_DATABASE = ConfigurationItem("sesame_database", ['all', 'simbad', 'ned',
                                     'vizier'],
                                     "This specifies the default database that "
                                     "SESAME will query when using the name "
@@ -44,7 +37,7 @@ SESAME_DATABASE = ConfigurationItem("sesame_database", ['all', 'simbad', 'ned',
                                     "subpackage. Default is to search all "
                                     "databases, but this can be 'all', "
                                     "'simbad', 'ned', or 'vizier'.")
-                                    
+
 NAME_RESOLVE_TIMEOUT = ConfigurationItem('name_resolve_timeout', 5,
                                          "This is the maximum time to wait "
                                          "for a response from a name resolve "
@@ -57,12 +50,12 @@ def _parse_response(resp_data):
     """
     Given a string response from SESAME, parse out the coordinates by looking
     for a line starting with a J, meaning ICRS J2000 coordinates.
-    
+
     Parameters
     ----------
     resp_data : str
         The string HTTP response from SESAME.
-        
+
     Returns
     -------
     ra : str
@@ -70,10 +63,10 @@ def _parse_response(resp_data):
     dec : str
         The string Declination parsed from the HTTP response.
     """
-    
+
     pattr = re.compile(r"%J\s*([0-9\.]+)\s*([\+\-\.0-9]+)")
     matched = pattr.search(resp_data.decode('utf-8'))
-    
+
     if matched == None:
         return None, None
     else:
@@ -81,18 +74,18 @@ def _parse_response(resp_data):
         return ra,dec
 
 def get_icrs_coordinates(name):
-    """ 
-    Retrieve an ICRSCoordinates object by using an online name resolving
+    """
+    Retrieve an ICRS object by using an online name resolving
     service to retrieve coordinates for the specified name. By default,
     this will search all available databases until a match is found. If
     you would like to specify the database, use the configuration item
-    `name_resolve.SESAME_DATABASE` . You can also specify a list of servers 
-    to use for querying Sesame using the configuration item 
+    `name_resolve.SESAME_DATABASE` . You can also specify a list of servers
+    to use for querying Sesame using the configuration item
     `name_resolve.SESAME_URL`. This will try each one in order until a valid
-    response is returned. By default, this list includes the main Sesame 
-    host and a mirror at vizier. A final configuration item, 
+    response is returned. By default, this list includes the main Sesame
+    host and a mirror at vizier. A final configuration item,
     `name_resolve.NAME_RESOLVE_TIMEOUT`, is the number of seconds to wait
-    for a response from the server before giving up. By default this is 
+    for a response from the server before giving up. By default this is
     5 seconds.
 
     Parameters
@@ -103,35 +96,35 @@ def get_icrs_coordinates(name):
     Returns
     -------
     coord : SphericalCoordinatesBase
-        An `ICRSCoordinates` instance for the object name specified.
-        
+        An `ICRS` instance for the object name specified.
+
     """
-    
+
     database = SESAME_DATABASE()
     # The web API just takes the first letter of the database name
     db = database.upper()[0]
-    
+
     # Make sure we don't have duplicates in the url list
     urls = []
     domains = []
     for url in SESAME_URL():
-        domain = urlparse(url).netloc
-        
+        domain = urllib.parse.urlparse(url).netloc
+
         # Check for duplicates
         if domain not in domains:
             domains.append(domain)
-            
+
             # Add the query to the end of the url, add to url list
             fmt_url = os.path.join(url, "{db}?{name}")
-            fmt_url = fmt_url.format(name=urllib.quote(name), db=db)
+            fmt_url = fmt_url.format(name=urllib.parse.quote(name), db=db)
             urls.append(fmt_url)
-    
+
     for url in urls:
         try:
             # Retrieve ascii name resolve data from CDS
-            resp = urllib2.urlopen(url, timeout=NAME_RESOLVE_TIMEOUT())
+            resp = urllib.request.urlopen(url, timeout=NAME_RESOLVE_TIMEOUT())
             break
-        except urllib2.URLError, e:
+        except urllib.error.URLError as e:
             # This catches a timeout error, see:
             #   http://stackoverflow.com/questions/2712524/handling-urllib2s-timeout-python
             if isinstance(e.reason, socket.timeout):
@@ -140,7 +133,7 @@ def get_icrs_coordinates(name):
             else:
                 raise NameResolveError("Unable to retrieve coordinates for name "
                                        "'{0}'".format(name))
-    
+
     # All Sesame URL's timed out...
     else:
         raise NameResolveError("All Sesame queries timed out. Unable to "
@@ -149,7 +142,7 @@ def get_icrs_coordinates(name):
     resp_data = resp.read()
 
     ra,dec = _parse_response(resp_data)
-    
+
     if ra == None and dec == None:
         if db == "A":
             err = "Unable to find coordinates for name '{0}'".format(name)
@@ -159,4 +152,4 @@ def get_icrs_coordinates(name):
 
         raise NameResolveError(err)
 
-    return ICRSCoordinates(ra, dec, unit=(u.degree, u.degree))
\ No newline at end of file
+    return ICRS(ra, dec, unit=(u.degree, u.degree))
diff --git a/astropy/coordinates/old_builtin_systems_names.py b/astropy/coordinates/old_builtin_systems_names.py
new file mode 100644
index 0000000..6b9977a
--- /dev/null
+++ b/astropy/coordinates/old_builtin_systems_names.py
@@ -0,0 +1,124 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+This module contains a set of compatibility classes to allow use of
+the pre-v0.3 coordinate names.  It will be removed in a future version.
+"""
+#TODO: remove this module in a future version
+
+from .builtin_systems import *
+from .transformations import master_transform_graph
+
+__all__ = ['ICRSCoordinates', 'FK5Coordinates', 'FK4Coordinates',
+           'FK4NoETermCoordinates', 'GalacticCoordinates', 'HorizontalCoordinates'
+          ]
+
+class ICRSCoordinates(ICRS):
+    """
+    Using the `ICRSCoordinates` name for this class is deprecated in v0.3, and will be
+    removed in the next version. Use `ICRS` instead.
+    """
+    def __new__(cls, *args, **kwargs):
+        from warnings import warn
+        from ..utils.exceptions import AstropyBackwardsIncompatibleChangeWarning
+
+        wmsg = cls.__doc__.replace('\n    ', ' ').strip()
+        warn(AstropyBackwardsIncompatibleChangeWarning(wmsg))
+        return ICRS(*args, **kwargs)
+
+
+class FK5Coordinates(FK5):
+    """
+    Using the `FK5Coordinates` name for this class is deprecated in v0.3, and will be
+    removed in the next version. Use `FK5` instead.
+    """
+    def __new__(cls, *args, **kwargs):
+        from warnings import warn
+        from ..utils.exceptions import AstropyBackwardsIncompatibleChangeWarning
+
+        wmsg = cls.__doc__.replace('\n    ', ' ').strip()
+        warn(AstropyBackwardsIncompatibleChangeWarning(wmsg))
+        return FK5(*args, **kwargs)
+
+
+class FK4Coordinates(FK4):
+    """
+    Using the `FK4Coordinates` name for this class is deprecated in v0.3, and will be
+    removed in the next version. Use `FK4` instead.
+    """
+    def __new__(cls, *args, **kwargs):
+        from warnings import warn
+        from ..utils.exceptions import AstropyBackwardsIncompatibleChangeWarning
+
+        wmsg = cls.__doc__.replace('\n    ', ' ').strip()
+        warn(AstropyBackwardsIncompatibleChangeWarning(wmsg))
+        return FK4(*args, **kwargs)
+
+
+class FK4NoETermCoordinates(FK4NoETerms):
+    """
+    Using the `FK4NoETermCoordinates` name for this class is deprecated in v0.3, and will be
+    removed in the next version. Use `FK4NoETerms` instead.
+    """
+    def __new__(cls, *args, **kwargs):
+        from warnings import warn
+        from ..utils.exceptions import AstropyBackwardsIncompatibleChangeWarning
+
+        wmsg = cls.__doc__.replace('\n    ', ' ').strip()
+        warn(AstropyBackwardsIncompatibleChangeWarning(wmsg))
+        return FK4NoETerms(*args, **kwargs)
+
+
+class GalacticCoordinates(Galactic):
+    """
+    Using the `GalacticCoordinates` name for this class is deprecated in v0.3, and will be
+    removed in the next version. Use `Galactic` instead.
+    """
+    def __new__(cls, *args, **kwargs):
+        from warnings import warn
+        from ..utils.exceptions import AstropyBackwardsIncompatibleChangeWarning
+
+        wmsg = cls.__doc__.replace('\n    ', ' ').strip()
+        warn(AstropyBackwardsIncompatibleChangeWarning(wmsg))
+        return Galactic(*args, **kwargs)
+
+
+class HorizontalCoordinates(AltAz):
+    """
+    Using the `HorizontalCoordinates` name for this class is deprecated in v0.3, and will be
+    removed in the next version. Use `AltAz` instead.
+    """
+    def __new__(cls, *args, **kwargs):
+        from warnings import warn
+        from ..utils.exceptions import AstropyBackwardsIncompatibleChangeWarning
+
+        wmsg = cls.__doc__.replace('\n    ', ' ').strip()
+        warn(AstropyBackwardsIncompatibleChangeWarning(wmsg))
+        return AltAz(*args, **kwargs)
+
+
+def _add_transforms(clses, graph):
+    """
+    Adds fake transformations that allow transforming to the old names, although
+    they actually yield the new class types
+    """
+    from copy import deepcopy
+
+    for cls in clses:
+        newcls = cls.mro()[1]
+        gdct = graph._graph
+
+        toadd = []
+        for a in gdct:
+            for b in gdct[a]:
+                if b == newcls:
+                    toadd.append((a, cls, gdct[a][b]))
+        for a, b, t in toadd:
+            #adds a new transform that goes *to* the old name class
+            graph.add_transform(a, b, t)
+
+        #also add a transformation that just gives itself back to go from
+        #self to old-style name
+        graph.add_transform(newcls, cls, lambda c:deepcopy(c))
+
+#Now go through and add transforms so that the old names give you transforms to new things
+_add_transforms([globals()[nm] for nm in __all__], master_transform_graph)
diff --git a/astropy/coordinates/setup_package.py b/astropy/coordinates/setup_package.py
index fb10ce3..a0d0164 100644
--- a/astropy/coordinates/setup_package.py
+++ b/astropy/coordinates/setup_package.py
@@ -1,4 +1,9 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
+
 def get_package_data():
     return {'astropy.coordinates.tests.accuracy': ['*.csv']}
+
+
+def requires_2to3():
+    return False
diff --git a/astropy/coordinates/tests/__init__.py b/astropy/coordinates/tests/__init__.py
index e69de29..800d82e 100644
--- a/astropy/coordinates/tests/__init__.py
+++ b/astropy/coordinates/tests/__init__.py
@@ -0,0 +1,2 @@
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
diff --git a/astropy/coordinates/tests/accuracy/__init__.py b/astropy/coordinates/tests/accuracy/__init__.py
index e69de29..800d82e 100644
--- a/astropy/coordinates/tests/accuracy/__init__.py
+++ b/astropy/coordinates/tests/accuracy/__init__.py
@@ -0,0 +1,2 @@
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
diff --git a/astropy/coordinates/tests/accuracy/generate_ref_ast.py b/astropy/coordinates/tests/accuracy/generate_ref_ast.py
index caabc0b..23b2ac7 100644
--- a/astropy/coordinates/tests/accuracy/generate_ref_ast.py
+++ b/astropy/coordinates/tests/accuracy/generate_ref_ast.py
@@ -3,6 +3,14 @@ This series of functions are used to generate the reference CSV files
 used by the accuracy tests.  Running this as a comand-line script will
 generate them all.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import os
+
+import numpy as np
+
+from astropy.table import Table, Column
 
 
 def ref_fk4_no_e_fk4(fnout='fk4_no_e_fk4.csv'):
@@ -10,10 +18,8 @@ def ref_fk4_no_e_fk4(fnout='fk4_no_e_fk4.csv'):
     Accuracy tests for the FK4 (with no E-terms of aberration) to/from FK4
     conversion, with arbitrary equinoxes and epoch of observation.
     """
-    import os
-    import numpy as np
+
     import starlink.Ast as Ast
-    from astropy.table import Table, Column
 
     np.random.seed(12345)
 
@@ -51,13 +57,13 @@ def ref_fk4_no_e_fk4(fnout='fk4_no_e_fk4.csv'):
 
     # Write out table to a CSV file
     t = Table()
-    t.add_column(Column('obstime', obstime))
-    t.add_column(Column('ra_in', ra))
-    t.add_column(Column('dec_in', dec))
-    t.add_column(Column('ra_fk4ne', ra_fk4ne))
-    t.add_column(Column('dec_fk4ne', dec_fk4ne))
-    t.add_column(Column('ra_fk4', ra_fk4))
-    t.add_column(Column('dec_fk4', dec_fk4))
+    t.add_column(Column(name='obstime', data=obstime))
+    t.add_column(Column(name='ra_in', data=ra))
+    t.add_column(Column(name='dec_in', data=dec))
+    t.add_column(Column(name='ra_fk4ne', data=ra_fk4ne))
+    t.add_column(Column(name='dec_fk4ne', data=dec_fk4ne))
+    t.add_column(Column(name='ra_fk4', data=ra_fk4))
+    t.add_column(Column(name='dec_fk4', data=dec_fk4))
     f = open(fnout, 'wb')
     f.write("# This file was generated with the {0} script, and the reference "
             "values were computed using AST\n".format(os.path.basename(__file__)))
@@ -69,10 +75,8 @@ def ref_fk4_no_e_fk5(fnout='fk4_no_e_fk5.csv'):
     Accuracy tests for the FK4 (with no E-terms of aberration) to/from FK5
     conversion, with arbitrary equinoxes and epoch of observation.
     """
-    import os
-    import numpy as np
+
     import starlink.Ast as Ast
-    from astropy.table import Table, Column
 
     np.random.seed(12345)
 
@@ -112,15 +116,15 @@ def ref_fk4_no_e_fk5(fnout='fk4_no_e_fk5.csv'):
 
     # Write out table to a CSV file
     t = Table()
-    t.add_column(Column('equinox_fk4', equinox_fk4))
-    t.add_column(Column('equinox_fk5', equinox_fk5))
-    t.add_column(Column('obstime', obstime))
-    t.add_column(Column('ra_in', ra))
-    t.add_column(Column('dec_in', dec))
-    t.add_column(Column('ra_fk5', ra_fk5))
-    t.add_column(Column('dec_fk5', dec_fk5))
-    t.add_column(Column('ra_fk4', ra_fk4))
-    t.add_column(Column('dec_fk4', dec_fk4))
+    t.add_column(Column(name='equinox_fk4', data=equinox_fk4))
+    t.add_column(Column(name='equinox_fk5', data=equinox_fk5))
+    t.add_column(Column(name='obstime', data=obstime))
+    t.add_column(Column(name='ra_in', data=ra))
+    t.add_column(Column(name='dec_in', data=dec))
+    t.add_column(Column(name='ra_fk5', data=ra_fk5))
+    t.add_column(Column(name='dec_fk5', data=dec_fk5))
+    t.add_column(Column(name='ra_fk4', data=ra_fk4))
+    t.add_column(Column(name='dec_fk4', data=dec_fk4))
     f = open(fnout, 'wb')
     f.write("# This file was generated with the {0} script, and the reference "
             "values were computed using AST\n".format(os.path.basename(__file__)))
@@ -132,10 +136,8 @@ def ref_galactic_fk4(fnout='galactic_fk4.csv'):
     Accuracy tests for the ICRS (with no E-terms of aberration) to/from FK5
     conversion, with arbitrary equinoxes and epoch of observation.
     """
-    import os
-    import numpy as np
+
     import starlink.Ast as Ast
-    from astropy.table import Table, Column
 
     np.random.seed(12345)
 
@@ -174,14 +176,14 @@ def ref_galactic_fk4(fnout='galactic_fk4.csv'):
 
     # Write out table to a CSV file
     t = Table()
-    t.add_column(Column('equinox_fk4', equinox_fk4))
-    t.add_column(Column('obstime', obstime))
-    t.add_column(Column('lon_in', lon))
-    t.add_column(Column('lat_in', lat))
-    t.add_column(Column('ra_fk4', ra_fk4))
-    t.add_column(Column('dec_fk4', dec_fk4))
-    t.add_column(Column('lon_gal', lon_gal))
-    t.add_column(Column('lat_gal', lat_gal))
+    t.add_column(Column(name='equinox_fk4', data=equinox_fk4))
+    t.add_column(Column(name='obstime', data=obstime))
+    t.add_column(Column(name='lon_in', data=lon))
+    t.add_column(Column(name='lat_in', data=lat))
+    t.add_column(Column(name='ra_fk4', data=ra_fk4))
+    t.add_column(Column(name='dec_fk4', data=dec_fk4))
+    t.add_column(Column(name='lon_gal', data=lon_gal))
+    t.add_column(Column(name='lat_gal', data=lat_gal))
     f = open(fnout, 'wb')
     f.write("# This file was generated with the {0} script, and the reference "
             "values were computed using AST\n".format(os.path.basename(__file__)))
@@ -193,10 +195,8 @@ def ref_icrs_fk5(fnout='icrs_fk5.csv'):
     Accuracy tests for the ICRS (with no E-terms of aberration) to/from FK5
     conversion, with arbitrary equinoxes and epoch of observation.
     """
-    import os
-    import numpy as np
+
     import starlink.Ast as Ast
-    from astropy.table import Table, Column
 
     np.random.seed(12345)
 
@@ -235,14 +235,14 @@ def ref_icrs_fk5(fnout='icrs_fk5.csv'):
 
     # Write out table to a CSV file
     t = Table()
-    t.add_column(Column('equinox_fk5', equinox_fk5))
-    t.add_column(Column('obstime', obstime))
-    t.add_column(Column('ra_in', ra))
-    t.add_column(Column('dec_in', dec))
-    t.add_column(Column('ra_fk5', ra_fk5))
-    t.add_column(Column('dec_fk5', dec_fk5))
-    t.add_column(Column('ra_icrs', ra_icrs))
-    t.add_column(Column('dec_icrs', dec_icrs))
+    t.add_column(Column(name='equinox_fk5', data=equinox_fk5))
+    t.add_column(Column(name='obstime', data=obstime))
+    t.add_column(Column(name='ra_in', data=ra))
+    t.add_column(Column(name='dec_in', data=dec))
+    t.add_column(Column(name='ra_fk5', data=ra_fk5))
+    t.add_column(Column(name='dec_fk5', data=dec_fk5))
+    t.add_column(Column(name='ra_icrs', data=ra_icrs))
+    t.add_column(Column(name='dec_icrs', data=dec_icrs))
     f = open(fnout, 'wb')
     f.write("# This file was generated with the {0} script, and the reference "
             "values were computed using AST\n".format(os.path.basename(__file__)))
diff --git a/astropy/coordinates/tests/accuracy/test_fk4_no_e_fk4.py b/astropy/coordinates/tests/accuracy/test_fk4_no_e_fk4.py
index b889740..c93dc56 100644
--- a/astropy/coordinates/tests/accuracy/test_fk4_no_e_fk4.py
+++ b/astropy/coordinates/tests/accuracy/test_fk4_no_e_fk4.py
@@ -1,13 +1,17 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+
 import os
 
 import numpy as np
 
 from .... import units as u
-from ... import FK4NoETermCoordinates, FK4Coordinates
+from ... import FK4NoETerms, FK4
 from ....time import Time
 from ....table import Table
-from ...angle_utilities import vincenty_sphere_dist
+from ...angle_utilities import angular_separation
 
 # It looks as though SLALIB, which AST relies on, assumes a simplified version
 # of the e-terms corretion, so we have to up the tolerance a bit to get things
@@ -27,25 +31,25 @@ def test_fk4_no_e_fk5():
         r = t[i]
 
         # FK4 to FK5
-        c1 = FK4Coordinates(r['ra_in'], r['dec_in'],
+        c1 = FK4(r['ra_in'], r['dec_in'],
                             unit=(u.degree, u.degree),
                             obstime=Time(r['obstime'], scale='utc'))
-        c2 = c1.transform_to(FK4NoETermCoordinates)
+        c2 = c1.transform_to(FK4NoETerms)
 
         # Find difference
-        diff = vincenty_sphere_dist(c2.ra.radians, c2.dec.radians,
+        diff = angular_separation(c2.ra.radian, c2.dec.radian,
                                     np.radians(r['ra_fk4ne']), np.radians(r['dec_fk4ne']))
 
         assert np.degrees(diff) * 3600. < TOLERANCE
 
         # FK5 to FK4
-        c1 = FK4NoETermCoordinates(r['ra_in'], r['dec_in'],
+        c1 = FK4NoETerms(r['ra_in'], r['dec_in'],
                                    unit=(u.degree, u.degree),
                                    obstime=Time(r['obstime'], scale='utc'))
-        c2 = c1.transform_to(FK4Coordinates)
+        c2 = c1.transform_to(FK4)
 
         # Find difference
-        diff = vincenty_sphere_dist(c2.ra.radians, c2.dec.radians,
+        diff = angular_separation(c2.ra.radian, c2.dec.radian,
                                     np.radians(r['ra_fk4']), np.radians(r['dec_fk4']))
 
         assert np.degrees(diff) * 3600. < TOLERANCE
diff --git a/astropy/coordinates/tests/accuracy/test_fk4_no_e_fk5.py b/astropy/coordinates/tests/accuracy/test_fk4_no_e_fk5.py
index 7a68832..519bf6c 100644
--- a/astropy/coordinates/tests/accuracy/test_fk4_no_e_fk5.py
+++ b/astropy/coordinates/tests/accuracy/test_fk4_no_e_fk5.py
@@ -4,10 +4,10 @@ import os
 import numpy as np
 
 from .... import units as u
-from ... import FK4NoETermCoordinates, FK5Coordinates
+from ... import FK4NoETerms, FK5
 from ....time import Time
 from ....table import Table
-from ...angle_utilities import vincenty_sphere_dist
+from ...angle_utilities import angular_separation
 
 TOLERANCE = 0.03  # arcseconds
 
@@ -24,27 +24,27 @@ def test_fk4_no_e_fk5():
         r = t[i]
 
         # FK4 to FK5
-        c1 = FK4NoETermCoordinates(r['ra_in'], r['dec_in'],
+        c1 = FK4NoETerms(r['ra_in'], r['dec_in'],
                                    unit=(u.degree, u.degree),
                                    obstime=Time(r['obstime'], scale='utc'),
                                    equinox=Time(r['equinox_fk4'], scale='utc'))
-        c2 = c1.transform_to(FK5Coordinates).precess_to(Time(r['equinox_fk5'], scale='utc'))
+        c2 = c1.transform_to(FK5).precess_to(Time(r['equinox_fk5'], scale='utc'))
 
         # Find difference
-        diff = vincenty_sphere_dist(c2.ra.radians, c2.dec.radians,
+        diff = angular_separation(c2.ra.radian, c2.dec.radian,
                                     np.radians(r['ra_fk5']), np.radians(r['dec_fk5']))
 
         assert np.degrees(diff) * 3600. < TOLERANCE
 
         # FK5 to FK4
-        c1 = FK5Coordinates(r['ra_in'], r['dec_in'],
+        c1 = FK5(r['ra_in'], r['dec_in'],
                             unit=(u.degree, u.degree),
                             obstime=Time(r['obstime'], scale='utc'),
                             equinox=Time(r['equinox_fk5'], scale='utc'))
-        c2 = c1.transform_to(FK4NoETermCoordinates).precess_to(Time(r['equinox_fk4'], scale='utc'))
+        c2 = c1.transform_to(FK4NoETerms).precess_to(Time(r['equinox_fk4'], scale='utc'))
 
         # Find difference
-        diff = vincenty_sphere_dist(c2.ra.radians, c2.dec.radians,
+        diff = angular_separation(c2.ra.radian, c2.dec.radian,
                                     np.radians(r['ra_fk4']), np.radians(r['dec_fk4']))
 
         assert np.degrees(diff) * 3600. < TOLERANCE
diff --git a/astropy/coordinates/tests/accuracy/test_galactic_fk4.py b/astropy/coordinates/tests/accuracy/test_galactic_fk4.py
index 3f49c87..c957f35 100644
--- a/astropy/coordinates/tests/accuracy/test_galactic_fk4.py
+++ b/astropy/coordinates/tests/accuracy/test_galactic_fk4.py
@@ -1,13 +1,16 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 import os
 
 import numpy as np
 
 from .... import units as u
-from ... import GalacticCoordinates, FK4Coordinates
+from ... import Galactic, FK4
 from ....time import Time
 from ....table import Table
-from ...angle_utilities import vincenty_sphere_dist
+from ...angle_utilities import angular_separation
 
 TOLERANCE = 0.5  # arcseconds
 
@@ -24,26 +27,26 @@ def test_galactic_fk4():
         r = t[i]
 
         # FK4 to FK5
-        c1 = GalacticCoordinates(r['lon_in'], r['lat_in'],
+        c1 = Galactic(r['lon_in'], r['lat_in'],
                                  unit=(u.degree, u.degree),
                                  obstime=Time(r['obstime'], scale='utc'))
-        c2 = c1.transform_to(FK4Coordinates).precess_to(Time(r['equinox_fk4'], scale='utc'))
+        c2 = c1.transform_to(FK4).precess_to(Time(r['equinox_fk4'], scale='utc'))
 
         # Find difference
-        diff = vincenty_sphere_dist(c2.ra.radians, c2.dec.radians,
+        diff = angular_separation(c2.ra.radian, c2.dec.radian,
                                     np.radians(r['ra_fk4']), np.radians(r['dec_fk4']))
 
         assert np.degrees(diff) * 3600. < TOLERANCE
 
         # FK5 to FK4
-        c1 = FK4Coordinates(r['lon_in'], r['lat_in'],
+        c1 = FK4(r['lon_in'], r['lat_in'],
                             unit=(u.degree, u.degree),
                             obstime=Time(r['obstime'], scale='utc'),
                             equinox=Time(r['equinox_fk4'], scale='utc'))
-        c2 = c1.transform_to(GalacticCoordinates)
+        c2 = c1.transform_to(Galactic)
 
         # Find difference
-        diff = vincenty_sphere_dist(c2.l.radians, c2.b.radians,
+        diff = angular_separation(c2.l.radian, c2.b.radian,
                                     np.radians(r['lon_gal']), np.radians(r['lat_gal']))
 
         assert np.degrees(diff) * 3600. < TOLERANCE
diff --git a/astropy/coordinates/tests/accuracy/test_icrs_fk5.py b/astropy/coordinates/tests/accuracy/test_icrs_fk5.py
index 49c712c..ea7c6c9 100644
--- a/astropy/coordinates/tests/accuracy/test_icrs_fk5.py
+++ b/astropy/coordinates/tests/accuracy/test_icrs_fk5.py
@@ -1,13 +1,16 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 import os
 
 import numpy as np
 
 from .... import units as u
-from ... import ICRSCoordinates, FK5Coordinates
+from ... import ICRS, FK5
 from ....time import Time
 from ....table import Table
-from ...angle_utilities import vincenty_sphere_dist
+from ...angle_utilities import angular_separation
 
 TOLERANCE = 0.03  # arcseconds
 
@@ -24,26 +27,26 @@ def test_icrs_no_e_fk5():
         r = t[i]
 
         # FK4 to FK5
-        c1 = ICRSCoordinates(r['ra_in'], r['dec_in'],
+        c1 = ICRS(r['ra_in'], r['dec_in'],
                              unit=(u.degree, u.degree),
                              obstime=Time(r['obstime'], scale='utc'))
-        c2 = c1.transform_to(FK5Coordinates).precess_to(Time(r['equinox_fk5'], scale='utc'))
+        c2 = c1.transform_to(FK5).precess_to(Time(r['equinox_fk5'], scale='utc'))
 
         # Find difference
-        diff = vincenty_sphere_dist(c2.ra.radians, c2.dec.radians,
+        diff = angular_separation(c2.ra.radian, c2.dec.radian,
                                     np.radians(r['ra_fk5']), np.radians(r['dec_fk5']))
 
         assert np.degrees(diff) * 3600. < TOLERANCE
 
         # FK5 to FK4
-        c1 = FK5Coordinates(r['ra_in'], r['dec_in'],
+        c1 = FK5(r['ra_in'], r['dec_in'],
                             unit=(u.degree, u.degree),
                             obstime=Time(r['obstime'], scale='utc'),
                             equinox=Time(r['equinox_fk5'], scale='utc'))
-        c2 = c1.transform_to(ICRSCoordinates)
+        c2 = c1.transform_to(ICRS)
 
         # Find difference
-        diff = vincenty_sphere_dist(c2.ra.radians, c2.dec.radians,
+        diff = angular_separation(c2.ra.radian, c2.dec.radian,
                                     np.radians(r['ra_icrs']), np.radians(r['dec_icrs']))
 
         assert np.degrees(diff) * 3600. < TOLERANCE
diff --git a/astropy/coordinates/tests/test_angles.py b/astropy/coordinates/tests/test_angles.py
index 9e96c64..458a8b7 100644
--- a/astropy/coordinates/tests/test_angles.py
+++ b/astropy/coordinates/tests/test_angles.py
@@ -1,37 +1,292 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
-from __future__ import unicode_literals
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
-# Test initalization of angles not already covered by the API tests
+"""Test initalization of angles not already covered by the API tests"""
 
-from ..angles import Angle
-from ...tests.compat import assert_allclose
+import numpy as np
+from numpy.testing.utils import assert_allclose
+
+from ..angles import Longitude, Latitude, Angle
+from ...tests.helper import pytest
 from ... import units as u
 
 
 def test_negative_zero_dms():
     # Test for DMS parser
     a = Angle('-00:00:10', u.deg)
-    assert_allclose(a.degrees, -10. / 3600.)
+    assert_allclose(a.degree, -10. / 3600.)
 
     # Unicode minus
     a = Angle('\u221200:00:10', u.deg)
-    assert_allclose(a.degrees, -10. / 3600.)
+    assert_allclose(a.degree, -10. / 3600.)
 
 
 def test_negative_zero_dm():
     # Test for DM parser
     a = Angle('-00:10', u.deg)
-    assert_allclose(a.degrees, -10. / 60.)
+    assert_allclose(a.degree, -10. / 60.)
 
 
 def test_negative_zero_hms():
     # Test for HMS parser
     a = Angle('-00:00:10', u.hour)
-    assert_allclose(a.hours, -10. / 3600.)
+    assert_allclose(a.hour, -10. / 3600.)
 
 
 def test_negative_zero_hm():
     # Test for HM parser
     a = Angle('-00:10', u.hour)
-    assert_allclose(a.hours, -10. / 60.)
+    assert_allclose(a.hour, -10. / 60.)
+
+
+def test_negative_sixty_hm():
+    # Test for HM parser
+    a = Angle('-00:60', u.hour)
+    assert_allclose(a.hour, -1.)
+
+
+def test_plus_sixty_hm():
+    # Test for HM parser
+    a = Angle('00:60', u.hour)
+    assert_allclose(a.hour, 1.)
+
+
+def test_negative_fifty_nine_sixty_dms():
+    # Test for DMS parser
+    a = Angle('-00:59:60', u.deg)
+    assert_allclose(a.degree, -1.)
+
+
+def test_plus_fifty_nine_sixty_dms():
+    # Test for DMS parser
+    a = Angle('+00:59:60', u.deg)
+    assert_allclose(a.degree, 1.)
+
+
+def test_negative_sixty_dms():
+    # Test for DMS parser
+    a = Angle('-00:00:60', u.deg)
+    assert_allclose(a.degree, -1. / 60.)
+
+
+def test_plus_sixty_dms():
+    # Test for DMS parser
+    a = Angle('+00:00:60', u.deg)
+    assert_allclose(a.degree, 1. / 60.)
+
+
+def test_angle_to_is_angle():
+    a = Angle('00:00:60', u.deg)
+    assert isinstance(a, Angle)
+    assert isinstance(a.to(u.rad), Angle)
+
+
+def test_angle_to_quantity():
+    a = Angle('00:00:60', u.deg)
+    q = u.Quantity(a)
+    assert isinstance(q, u.Quantity)
+    assert q.unit is u.deg
+
+
+def test_quantity_to_angle():
+    a = Angle(1.0*u.deg)
+    assert isinstance(a, Angle)
+    with pytest.raises(u.UnitsError):
+        Angle(1.0*u.meter)
+    a = Angle(1.0*u.hour)
+    assert isinstance(a, Angle)
+    assert a.unit is u.hourangle
+    with pytest.raises(u.UnitsError):
+        Angle(1.0*u.min)
+
+
+def test_angle_string():
+    a = Angle('00:00:60', u.deg)
+    assert str(a) == '0d01m00s'
+    a = Angle('-00:00:10', u.hour)
+    assert str(a) == '-0h00m10s'
+    a = Angle(3.2, u.radian)
+    assert str(a) == '3.2rad'
+    a = Angle(4.2, u.microarcsecond)
+    assert str(a) == '4.2uarcsec'
+    a = Angle('1.0uarcsec')
+    assert a.value == 1.0
+    assert a.unit == u.microarcsecond
+    a = Angle("3d")
+    assert_allclose(a.value, 3.0)
+    assert a.unit == u.degree
+    a = Angle('10"')
+    assert_allclose(a.value, 10.0)
+    assert a.unit == u.arcsecond
+    a = Angle("10'")
+    assert_allclose(a.value, 10.0)
+    assert a.unit == u.arcminute
+
+
+def test_angle_repr():
+    assert 'Angle' in repr(Angle(0, u.deg))
+    assert 'Longitude' in repr(Longitude(0, u.deg))
+    assert 'Latitude' in repr(Latitude(0, u.deg))
+
+    a = Angle(0, u.deg)
+    repr(a)
+
+
+def test_large_angle_representation():
+    """Test that angles above 360 degrees can be output as strings,
+    in repr, str, and to_string.  (regression test for #1413)"""
+    a = Angle(350, u.deg) + Angle(350, u.deg)
+    a.to_string()
+    a.to_string(u.hourangle)
+    repr(a)
+    repr(a.to(u.hourangle))
+    str(a)
+    str(a.to(u.hourangle))
+
+
+def test_wrap_at_inplace():
+    a = Angle([-20, 150, 350, 360] * u.deg)
+    out = a.wrap_at('180d', inplace=True)
+    assert out is None
+    assert np.all(a.degree == np.array([-20., 150., -10., 0.]))
+
+
+def test_latitude():
+    with pytest.raises(ValueError):
+        lat = Latitude(['91d', '89d'])
+    with pytest.raises(ValueError):
+        lat = Latitude('-91d')
+
+    lat = Latitude(['90d', '89d'])
+    with pytest.raises(ValueError):
+        lat[0] = 90.001 * u.deg
+    with pytest.raises(ValueError):
+        lat[0] = -90.001 * u.deg
+
+    lat = Latitude(['90d', '89d'])
+    assert lat[0] == 90 * u.deg
+    assert lat[1] == 89 * u.deg
+    assert np.all(lat == Angle(['90d', '89d']))
+
+    # conserve type on unit change (closes #1423)
+    angle = lat.to('radian')
+    assert type(angle) is Latitude
+    # but not on calculations
+    angle = lat - 190 * u.deg
+    assert type(angle) is Angle
+    assert angle[0] == -100 * u.deg
+
+    lat = Latitude('80d')
+    angle = lat / 2.
+    assert type(angle) is Angle
+    assert angle == 40 * u.deg
+
+    angle = lat * 2.
+    assert type(angle) is Angle
+    assert angle == 160 * u.deg
+
+    angle = -lat
+    assert type(angle) is Angle
+    assert angle == -80 * u.deg
+
+
+def test_longitude():
+    # Default wrapping at 360d with an array input
+    lon = Longitude(['370d', '88d'])
+    assert np.all(lon == Longitude(['10d', '88d']))
+    assert np.all(lon == Angle(['10d', '88d']))
+
+    # conserve type on unit change and keep wrap_angle (closes #1423)
+    angle = lon.to('hourangle')
+    assert type(angle) is Longitude
+    assert angle.wrap_angle == lon.wrap_angle
+    angle = lon[0]
+    assert type(angle) is Longitude
+    assert angle.wrap_angle == lon.wrap_angle
+    angle = lon[1:]
+    assert type(angle) is Longitude
+    assert angle.wrap_angle == lon.wrap_angle
+
+    # but not on calculations
+    angle = lon / 2.
+    assert np.all(angle == Angle(['5d', '44d']))
+    assert type(angle) is Angle
+    assert not hasattr(angle, 'wrap_angle')
+
+    angle = lon * 2. + 400 * u.deg
+    assert np.all(angle == Angle(['420d', '576d']))
+    assert type(angle) is Angle
+
+    # Test setting a mutable value and having it wrap
+    lon[1] = -10 * u.deg
+    assert np.all(lon == Angle(['10d', '350d']))
+
+    # Test wrapping and try hitting some edge cases
+    lon = Longitude(np.array([0, 0.5, 1.0, 1.5, 2.0]) * np.pi, unit=u.radian)
+    assert np.all(lon.degree == np.array([0., 90, 180, 270, 0]))
+
+    lon = Longitude(np.array([0, 0.5, 1.0, 1.5, 2.0]) * np.pi, unit=u.radian, wrap_angle='180d')
+    assert np.all(lon.degree == np.array([0., 90, -180, -90, 0]))
+
+    # Wrap on setting wrap_angle property (also test auto-conversion of wrap_angle to an Angle)
+    lon = Longitude(np.array([0, 0.5, 1.0, 1.5, 2.0]) * np.pi, unit=u.radian)
+    lon.wrap_angle = '180d'
+    assert np.all(lon.degree == np.array([0., 90, -180, -90, 0]))
+
+    lon = Longitude('460d')
+    assert lon == Angle('100d')
+    lon.wrap_angle = '90d'
+    assert lon == Angle('-260d')
+
+
+def test_wrap_at():
+    a = Angle([-20, 150, 350, 360] * u.deg)
+    assert np.all(a.wrap_at(360 * u.deg).degree == np.array([340., 150., 350., 0.]))
+    assert np.all(a.wrap_at(Angle(360, unit=u.deg)).degree == np.array([340., 150., 350., 0.]))
+    assert np.all(a.wrap_at('360d').degree == np.array([340., 150., 350., 0.]))
+    assert np.all(a.wrap_at('180d').degree == np.array([-20., 150., -10., 0.]))
+    assert np.all(a.wrap_at(np.pi * u.rad).degree == np.array([-20., 150., -10., 0.]))
+
+    # Test wrapping a scalar Angle
+    a = Angle('190d')
+    assert a.wrap_at('180d') == Angle('-170d')
+
+    a = Angle(np.arange(-1000.0, 1000.0, 0.125), unit=u.deg)
+    for wrap_angle in (270, 0.2, 0.0, 360.0, 500, -2000.125):
+        aw = a.wrap_at(wrap_angle * u.deg)
+        assert np.all(aw.degree >= wrap_angle - 360.0)
+        assert np.all(aw.degree < wrap_angle)
+
+        aw = a.to(u.rad).wrap_at(wrap_angle * u.deg)
+        assert np.all(aw.degree >= wrap_angle - 360.0)
+        assert np.all(aw.degree < wrap_angle)
+
+
+def test_is_within_bounds():
+    a = Angle([-20, 150, 350] * u.deg)
+    assert a.is_within_bounds('0d', '360d') is False
+    assert a.is_within_bounds(None, '360d') is True
+    assert a.is_within_bounds(-30 * u.deg, None) is True
+
+    a = Angle('-20d')
+    assert a.is_within_bounds('0d', '360d') is False
+    assert a.is_within_bounds(None, '360d') is True
+    assert a.is_within_bounds(-30 * u.deg, None) is True
+
+
+def test_angle_mismatched_unit():
+    a = Angle('+6h7m8s', unit=u.degree)
+    assert_allclose(a.value, 91.78333333333332)
+
+
+def test_regression_formatting_negative():
+    # Regression test for a bug that caused:
+    #
+    # >>> Angle(-1., unit='deg').to_string()
+    # '-1d00m-0s'
+    assert Angle(-0., unit='deg').to_string() == '-0d00m00s'
+    assert Angle(-1., unit='deg').to_string() == '-1d00m00s'
+    assert Angle(-0., unit='hour').to_string() == '-0h00m00s'
+    assert Angle(-1., unit='hour').to_string() == '-1h00m00s'
diff --git a/astropy/coordinates/tests/test_angular_separation.py b/astropy/coordinates/tests/test_angular_separation.py
new file mode 100644
index 0000000..74bbc1b
--- /dev/null
+++ b/astropy/coordinates/tests/test_angular_separation.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import numpy as np
+
+# lon1, lat1, lon2, lat2 in degrees
+coords = [(1, 0, 0, 0),
+          (0, 1, 0, 0),
+          (0, 0, 1, 0),
+          (0, 0, 0, 1),
+          (0, 0, 10, 0),
+          (0, 0, 90, 0),
+          (0, 0, 180, 0),
+          (0, 45, 0, -45),
+          (0, 60, 0, -30),
+          (-135, -15, 45, 15),
+          (100, -89, -80, 89),
+          (0, 0, 0, 0),
+          (0, 0, 1. / 60., 1. / 60.)]
+correct_seps = [1, 1, 1, 1, 10, 90, 180, 90, 90, 180, 180, 0,
+                0.023570225877234643]
+correctness_margin = 2e-10
+
+
+def test_fk5_seps():
+    """
+    This tests if `separation` works for FK5Coordinate objects.
+
+    This is a regression test for github issue #891
+    """
+    from astropy.coordinates import FK5
+
+    a = FK5(1., 1., unit=('deg', 'deg'))
+    b = FK5(2., 2., unit=('deg', 'deg'))
+    a.separation(b)
+
+
+def test_angsep():
+    """
+    Tests that the angular separation object also behaves correctly.
+    """
+
+    from ...units import Quantity
+    from ..angles import Angle
+    from ..angle_utilities import angular_separation
+
+    # check it both works with floats in radians, Quantities, or Angles
+    for conv in (np.deg2rad,
+                 lambda x: Quantity(x, "deg"),
+                 lambda x: Angle(x, "deg")):
+        for (lon1, lat1, lon2, lat2), corrsep in zip(coords, correct_seps):
+            angsep = angular_separation(conv(lon1), conv(lat1),
+                                        conv(lon2), conv(lat2))
+            assert np.fabs(angsep - conv(corrsep)) < conv(correctness_margin)
diff --git a/astropy/coordinates/tests/test_api.py b/astropy/coordinates/tests/test_api.py
index a8656af..5735f85 100644
--- a/astropy/coordinates/tests/test_api.py
+++ b/astropy/coordinates/tests/test_api.py
@@ -1,17 +1,20 @@
 # -*- coding: utf-8 -*-
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from __future__ import print_function
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 from numpy import testing as npt
 from ...tests.helper import pytest
 raises = pytest.raises
 
+from ...extern import six
+
 from ... import units as u
-from ..errors import *
+from ..errors import ConvertError, IllegalSecondError, IllegalMinuteError, IllegalHourError
 
 
 try:
-    import scipy
+    import scipy  # pylint: disable=W0611
 except ImportError:
     HAS_SCIPY = False
 else:
@@ -57,20 +60,21 @@ def test_create_angles():
     as much for self-documenting code as anything else.
 
     Angle objects simply represent a single angular coordinate. More specific
-    angular coordinates (e.g. RA, Dec) are subclasses of Angle.'''
+    angular coordinates (e.g. Longitude, Latitude) are subclasses of Angle.'''
 
     a1 = Angle(54.12412, unit=u.degree)
     a2 = Angle("54.12412", unit=u.degree)
     a3 = Angle("54:07:26.832", unit=u.degree)
     a4 = Angle("54.12412 deg")
     a5 = Angle("54.12412 degrees")
-    a6 = Angle(u"54.12412°") # because we like Unicode
+    a6 = Angle("54.12412°") # because we like Unicode
     a7 = Angle((54, 7, 26.832), unit=u.degree)
-    a8 = Angle(u"54°07'26.832\"")
+    a8 = Angle("54°07'26.832\"")
     # (deg,min,sec) *tuples* are acceptable, but lists/arrays are *not*
     # because of the need to eventually support arrays of coordinates
-    with raises(NotImplementedError):
-        Angle([54, 7, 26.832], unit=u.degree)
+    a9 = Angle([54, 7, 26.832], unit=u.degree)
+    npt.assert_allclose(a9.value, [54, 7, 26.832])
+    assert a9.unit is u.degree
 
     a10 = Angle(3.60827466667, unit=u.hour)
     a11 = Angle("3:36:29.7888000120", unit=u.hour)
@@ -78,7 +82,7 @@ def test_create_angles():
 
     Angle(0.944644098745, unit=u.radian)
 
-    with raises(UnitsError):
+    with raises(u.UnitsError):
         Angle(54.12412)
         #raises an exception because this is ambiguous
 
@@ -91,17 +95,17 @@ def test_create_angles():
 
     a16 = Angle("1 d")
     a17 = Angle("1 degree")
-    assert a16.degrees == 1
-    assert a17.degrees == 1
+    assert a16.degree == 1
+    assert a17.degree == 1
 
     #ensure the above angles that should match do
-    a1 == a2 == a3 == a4 == a5 == a6 == a7
-    npt.assert_almost_equal(a1.radians, a2.radians)
-    npt.assert_almost_equal(a2.degrees, a3.degrees)
-    npt.assert_almost_equal(a3.radians, a4.radians)
-    npt.assert_almost_equal(a4.radians, a5.radians)
-    npt.assert_almost_equal(a5.radians, a6.radians)
-    npt.assert_almost_equal(a6.radians, a7.radians)
+    assert a1 == a2 == a3 == a4 == a5 == a6 == a7
+    npt.assert_allclose(a1.radian, a2.radian)
+    npt.assert_allclose(a2.degree, a3.degree)
+    npt.assert_allclose(a3.radian, a4.radian)
+    npt.assert_allclose(a4.radian, a5.radian)
+    npt.assert_allclose(a5.radian, a6.radian)
+    npt.assert_allclose(a6.radian, a7.radian)
     #assert a10 == a11 == a12
 
     # check for illegal ranges / values
@@ -132,15 +136,14 @@ def test_angle_ops():
     """
     Tests operations on Angle objects
     """
+
     from .. import Angle
-    import numpy.testing as npt
 
-    '''
-    Angles can be added and subtracted. Multiplication and division by
-    a scalar is also permitted. A negative operator is also valid.
-    All of these operate in a single dimension. Attempting to
-    multiply or divide two Angle objects will raise an exception.
-    '''
+    # Angles can be added and subtracted. Multiplication and division by a
+    # scalar is also permitted. A negative operator is also valid.  All of
+    # these operate in a single dimension. Attempting to multiply or divide two
+    # Angle objects will raise an exception.
+
     a1 = Angle(3.60827466667, unit=u.hour)
     a2 = Angle("54:07:26.832", unit=u.degree)
     a1 + a2  # creates new Angle object
@@ -148,24 +151,24 @@ def test_angle_ops():
     -a1
 
     # division and multiplication have no unambiguous meaning here
-    with raises(NotImplementedError):
+    with raises(TypeError):
         a1 / a2
 
-    with raises(NotImplementedError):
+    with raises(TypeError):
         a1 * a2
 
-    npt.assert_almost_equal((a1 * 2).hours, 2 * 3.6082746666700003)
-    assert abs((a1 / 3.123456).hours - 3.60827466667 / 3.123456) < 1e-10
+    npt.assert_allclose((a1 * 2).hour, 2 * 3.6082746666700003)
+    assert abs((a1 / 3.123456).hour - 3.60827466667 / 3.123456) < 1e-10
 
     # commutativity
-    (2 * a1).hours == (a1 * 2).hours
+    assert (2 * a1).hour == (a1 * 2).hour
 
     a3 = Angle(a1)  # makes a *copy* of the object, but identical content as a1
-    npt.assert_almost_equal(a1.radians, a3.radians)
+    npt.assert_allclose(a1.radian, a3.radian)
     assert a1 is not a3
 
     a4 = abs(-a1)
-    assert a4.radians == a1.radians
+    assert a4.radian == a1.radian
 
     a5 = Angle(5.0, unit=u.hour)
     assert a5 > a1
@@ -173,76 +176,6 @@ def test_angle_ops():
     assert a1 < a5
     assert a1 <= a5
 
-def test_angle_bounds():
-    """
-    Tests setting and obeying of bounds for Angle objects, as well as
-    how operations interact with bounds
-    """
-    from .. import Angle, RangeError, BoundsError
-    import numpy.testing as npt
-
-    '''
-    By default the Angle object can accept any value, but will return
-    values in [-360,360] (retaining the sign that was specified).
-
-    One can also set artificial bounds for custom applications and range
-    checking. As Angle objects are intended to be immutable (the angle value
-    anyway), this provides a bound check upon creation. The units given in the
-    `bounds` keyword must match the units specified in the scalar.
-    '''
-
-    a1 = Angle(13343, unit=u.degree)
-    npt.assert_almost_equal(a1.degrees, 23)
-
-    a2 = Angle(-50, unit=u.degree)
-    assert a2.degrees == -50
-
-    a3 = Angle(-361, unit=u.degree)
-    npt.assert_almost_equal(a3.degrees, -1)
-
-    # custom bounds
-
-    with raises(BoundsError):
-        Angle(66, unit=u.degree, bounds=(-45, 45))
-
-    a4 = Angle(390, unit=u.degree, bounds=(-75, 75))
-    npt.assert_almost_equal(a4.degrees, 30)
-    # no BoundsError because while 390>75, 30 is within the bounds
-
-    a5 = Angle(390, unit=u.degree, bounds=(-720, 720))
-    a5.degrees == 390
-
-    a6 = Angle(1020, unit=u.degree, bounds=None)
-    a6.degrees == 1020
-
-    # bounds and operations
-
-    with raises(ValueError):
-        a4 + a5
-        # ValueError - the bounds don't match
-
-    a7 = a4 + a4
-    assert a7.bounds == (-75, 75)
-    # if the bounds match, there is no error and the bound is kept
-    npt.assert_almost_equal(a7.degrees, 60)
-
-    a8 = a4 - a4
-    assert a8.bounds == (-75, 75)
-    # To get the default bounds back, you need to create a new object with the
-    # equivalent angle
-    Angle(a4.degrees + a4.degrees, unit=u.degree)
-
-    a9 = Angle(a4.degrees + a5.degrees, unit=u.degree, bounds=[-180, 180])
-    npt.assert_almost_equal(a9.degrees, 60)
-    # if they don't match and you want to combine, just re-assign the bounds
-    # yourself
-
-    # bounds of None can also be operated on without complaint
-    a10 = a6 - a6
-    a10.degrees == 0
-
-    with raises(AttributeError):
-        a10.bounds = (0,34)
 
 def test_angle_convert():
     """
@@ -250,23 +183,24 @@ def test_angle_convert():
     """
 
     from .. import Angle
-    import numpy.testing as npt
 
     angle = Angle("54.12412", unit=u.degree)
 
-    npt.assert_almost_equal(angle.hours, 3.60827466667)
-    npt.assert_almost_equal(angle.radians, 0.944644098745)
-    npt.assert_almost_equal(angle.degrees, 54.12412)
+    npt.assert_allclose(angle.hour, 3.60827466667)
+    npt.assert_allclose(angle.radian, 0.944644098745)
+    npt.assert_allclose(angle.degree, 54.12412)
 
+    assert len(angle.hms) == 3
     assert isinstance(angle.hms, tuple)
     assert angle.hms[0] == 3
     assert angle.hms[1] == 36
-    npt.assert_almost_equal(angle.hms[2], 29.78879999999947)
+    npt.assert_allclose(angle.hms[2], 29.78879999999947)
 
+    assert len(angle.dms) == 3
     assert isinstance(angle.dms, tuple)
     assert angle.dms[0] == 54
     assert angle.dms[1] == 7
-    npt.assert_almost_equal(angle.dms[2], 26.831999999992036)
+    npt.assert_allclose(angle.dms[2], 26.831999999992036)
 
     assert isinstance(angle.dms[0], float)
     assert isinstance(angle.hms[0], float)
@@ -291,77 +225,77 @@ def test_angle_formatting():
     angle = Angle("54.12412", unit=u.degree)
 
     #__str__ is the default `format`
-    assert str(angle) == angle.format()
+    assert str(angle) == angle.to_string()
 
-    res = 'Angle as HMS: 3h36m29.78880s'
-    assert "Angle as HMS: {0}".format(angle.format(unit=u.hour)) == res
+    res = 'Angle as HMS: 3h36m29.7888s'
+    assert "Angle as HMS: {0}".format(angle.to_string(unit=u.hour)) == res
 
-    res = 'Angle as HMS: 3:36:29.78880'
-    assert "Angle as HMS: {0}".format(angle.format(unit=u.hour, sep=":")) == res
+    res = 'Angle as HMS: 3:36:29.7888'
+    assert "Angle as HMS: {0}".format(angle.to_string(unit=u.hour, sep=":")) == res
 
     res = 'Angle as HMS: 3:36:29.79'
-    assert "Angle as HMS: {0}".format(angle.format(unit=u.hour, sep=":",
+    assert "Angle as HMS: {0}".format(angle.to_string(unit=u.hour, sep=":",
                                       precision=2)) == res
 
     # Note that you can provide one, two, or three separators passed as a
     # tuple or list
 
     res = 'Angle as HMS: 3h36m29.7888s'
-    assert "Angle as HMS: {0}".format(angle.format(unit=u.hour,
+    assert "Angle as HMS: {0}".format(angle.to_string(unit=u.hour,
                                                    sep=("h", "m", "s"),
                                                    precision=4)) == res
 
     res = 'Angle as HMS: 3-36|29.7888'
-    assert "Angle as HMS: {0}".format(angle.format(unit=u.hour, sep=["-", "|"],
+    assert "Angle as HMS: {0}".format(angle.to_string(unit=u.hour, sep=["-", "|"],
                                                    precision=4)) == res
 
     res = 'Angle as HMS: 3-36-29.7888'
-    assert "Angle as HMS: {0}".format(angle.format(unit=u.hour, sep="-",
+    assert "Angle as HMS: {0}".format(angle.to_string(unit=u.hour, sep="-",
                                                     precision=4)) == res
 
     res = 'Angle as HMS: 03h36m29.7888s'
-    assert "Angle as HMS: {0}".format(angle.format(unit=u.hour, precision=4,
+    assert "Angle as HMS: {0}".format(angle.to_string(unit=u.hour, precision=4,
                                                   pad=True)) == res
 
     # Same as above, in degrees
 
     angle = Angle("3 36 29.78880", unit=u.degree)
 
-    res = 'Angle as DMS: 3d36m29.78880s'
-    assert "Angle as DMS: {0}".format(angle.format(unit=u.degree)) == res
+    res = 'Angle as DMS: 3d36m29.7888s'
+    assert "Angle as DMS: {0}".format(angle.to_string(unit=u.degree)) == res
 
-    res = 'Angle as DMS: 3:36:29.78880'
-    assert "Angle as DMS: {0}".format(angle.format(unit=u.degree, sep=":")) == res
+    res = 'Angle as DMS: 3:36:29.7888'
+    assert "Angle as DMS: {0}".format(angle.to_string(unit=u.degree, sep=":")) == res
 
     res = 'Angle as DMS: 3:36:29.79'
-    assert "Angle as DMS: {0}".format(angle.format(unit=u.degree, sep=":",
+    assert "Angle as DMS: {0}".format(angle.to_string(unit=u.degree, sep=":",
                                       precision=2)) == res
 
     # Note that you can provide one, two, or three separators passed as a
     # tuple or list
 
     res = 'Angle as DMS: 3d36m29.7888s'
-    assert "Angle as DMS: {0}".format(angle.format(unit=u.degree,
+    assert "Angle as DMS: {0}".format(angle.to_string(unit=u.degree,
                                                    sep=("d", "m", "s"),
                                                    precision=4)) == res
 
     res = 'Angle as DMS: 3-36|29.7888'
-    assert "Angle as DMS: {0}".format(angle.format(unit=u.degree, sep=["-", "|"],
+    assert "Angle as DMS: {0}".format(angle.to_string(unit=u.degree, sep=["-", "|"],
                                                    precision=4)) == res
 
     res = 'Angle as DMS: 3-36-29.7888'
-    assert "Angle as DMS: {0}".format(angle.format(unit=u.degree, sep="-",
+    assert "Angle as DMS: {0}".format(angle.to_string(unit=u.degree, sep="-",
                                                     precision=4)) == res
 
     res = 'Angle as DMS: 03d36m29.7888s'
-    assert "Angle as DMS: {0}".format(angle.format(unit=u.degree, precision=4,
+    assert "Angle as DMS: {0}".format(angle.to_string(unit=u.degree, precision=4,
                                                   pad=True)) == res
 
-    res = 'Angle as rad: 0.06298radian'
-    assert "Angle as rad: {0}".format(angle.format(unit=u.radian)) == res
+    res = 'Angle as rad: 0.0629763rad'
+    assert "Angle as rad: {0}".format(angle.to_string(unit=u.radian)) == res
 
-    res = 'Angle as rad decimal: 0.06298'
-    assert "Angle as rad decimal: {0}".format(angle.format(unit=u.radian, decimal=True)) == res
+    res = 'Angle as rad decimal: 0.0629763'
+    assert "Angle as rad decimal: {0}".format(angle.to_string(unit=u.radian, decimal=True)) == res
 
 
     # check negative angles
@@ -369,126 +303,104 @@ def test_angle_formatting():
     angle = Angle(-1.23456789, unit=u.degree)
     angle2 = Angle(-1.23456789, unit=u.hour)
 
-    assert angle.format() == '-1d14m04.44440s'
-    assert angle.format(pad=True) == '-01d14m04.44440s'
-    assert angle.format(unit=u.hour) == '-0h04m56.29629s'
-    assert angle2.format(unit=u.hour, pad=True) == '-01h14m04.44440s'
-    assert angle.format(unit=u.radian, decimal=True) == '-0.02155'
-
+    assert angle.to_string() == '-1d14m04.4444s'
+    assert angle.to_string(pad=True) == '-01d14m04.4444s'
+    assert angle.to_string(unit=u.hour) == '-0h04m56.2963s'
+    assert angle2.to_string(unit=u.hour, pad=True) == '-01h14m04.4444s'
+    assert angle.to_string(unit=u.radian, decimal=True) == '-0.0215473'
 
 def test_angle_format_roundtripping():
     """
     Ensures that the string represtation of an angle can be used to create a
     new valid Angle.
     """
-    from .. import Angle, RA, Dec
+    from .. import Angle, Longitude, Latitude
 
     a1 = Angle(0, unit=u.radian)
     a2 = Angle(10, unit=u.degree)
     a3 = Angle(0.543, unit=u.degree)
     a4 = Angle('1d2m3.4s')
 
-    assert Angle(str(a1)).degrees == a1.degrees
-    assert Angle(str(a2)).degrees == a2.degrees
-    assert Angle(str(a3)).degrees == a3.degrees
-    assert Angle(str(a4)).degrees == a4.degrees
+    assert Angle(str(a1)).degree == a1.degree
+    assert Angle(str(a2)).degree == a2.degree
+    assert Angle(str(a3)).degree == a3.degree
+    assert Angle(str(a4)).degree == a4.degree
 
-    #also check RA/Dec
-    ra = RA('1h2m3.4s')
-    dec = Dec('1d2m3.4s')
+    #also check Longitude/Latitude
+    ra = Longitude('1h2m3.4s')
+    dec = Latitude('1d2m3.4s')
 
-    assert Angle(str(ra)).degrees == ra.degrees
-    assert Angle(str(dec)).degrees == dec.degrees
+    npt.assert_allclose(Angle(str(ra)).degree, ra.degree)
+    npt.assert_allclose(Angle(str(dec)).degree, dec.degree)
 
 
 def test_radec():
     """
-    Tests creation/operations of RA and Dec objects
+    Tests creation/operations of Longitude and Latitude objects
     """
-    from .. import RA, Dec, Angle
+    from .. import Longitude, Latitude, Angle
     from ...time import Time
 
     '''
-    RA and Dec are objects that are subclassed from Angle. As with Angle, RA
-    and Dec can parse any unambiguous format (tuples, formatted strings, etc.).
+    Longitude and Latitude are objects that are subclassed from Angle. As with Angle, Longitude
+    and Latitude can parse any unambiguous format (tuples, formatted strings, etc.).
 
     The intention is not to create an Angle subclass for every possible
-    coordinate object (e.g. galactic l, galactic b). However, equatorial RA/dec
+    coordinate object (e.g. galactic l, galactic b). However, equatorial Longitude/Latitude
     are so prevalent in astronomy that it's worth creating ones for these
     units. They will be noted as "special" in the docs and use of the just the
     Angle class is to be used for other coordinate systems.
     '''
 
-    with raises(UnitsError):
-        ra = RA("4:08:15.162342")  # error - hours or degrees?
-    with raises(UnitsError):
-        ra = RA("-4:08:15.162342")
+    with raises(u.UnitsError):
+        ra = Longitude("4:08:15.162342")  # error - hours or degrees?
+    with raises(u.UnitsError):
+        ra = Longitude("-4:08:15.162342")
 
     # the "smart" initializer allows >24 to automatically do degrees, but the
     #Angle-based one does not
     #TODO: adjust in 0.3 for whatever behavior is decided on
 
-    #ra = RA("26:34:15.345634")  # unambiguous b/c hours don't go past 24
-    #npt.assert_almost_equal(ra.degrees, 26.570929342)
-    with raises(UnitsError):
-        ra = RA("26:34:15.345634")
+    #ra = Longitude("26:34:15.345634")  # unambiguous b/c hours don't go past 24
+    #npt.assert_allclose(ra.degree, 26.570929342)
+    with raises(u.UnitsError):
+        ra = Longitude("26:34:15.345634")
 
-    #ra = RA(68)
-    with raises(UnitsError):
-        ra = RA(68)
+    #ra = Longitude(68)
+    with raises(u.UnitsError):
+        ra = Longitude(68)
 
-    with raises(UnitsError):
-        ra = RA(12)
+    with raises(u.UnitsError):
+        ra = Longitude(12)
 
     with raises(ValueError):
-        ra = RA("garbage containing a d and no units")
+        ra = Longitude("garbage containing a d and no units")
 
-    ra = RA("12h43m23s")
-    npt.assert_almost_equal(ra.hours, 12.7230555556)
+    ra = Longitude("12h43m23s")
+    npt.assert_allclose(ra.hour, 12.7230555556)
 
-    ra = RA((56, 14, 52.52), unit=u.degree)      # can accept tuples
+    ra = Longitude((56, 14, 52.52), unit=u.degree)      # can accept tuples
     #TODO: again, fix based on >24 behavior
-    #ra = RA((56,14,52.52))
-    with raises(ValueError):
-        ra = RA((56, 14, 52.52))
-    with raises(ValueError):
-        ra = RA((12, 14, 52))  # ambiguous w/o units
-    ra = RA((12, 14, 52), unit=u.hour)
+    #ra = Longitude((56,14,52.52))
+    with raises(u.UnitsError):
+        ra = Longitude((56, 14, 52.52))
+    with raises(u.UnitsError):
+        ra = Longitude((12, 14, 52))  # ambiguous w/o units
+    ra = Longitude((12, 14, 52), unit=u.hour)
 
-    with raises(NotImplementedError):
-        ra = RA([56, 64, 52.2], unit=u.degree)  # ...but not arrays (yet)
+    ra = Longitude([56, 64, 52.2], unit=u.degree)  # ...but not arrays (yet)
 
     # Units can be specified
-    ra = RA("4:08:15.162342", unit=u.hour)
+    ra = Longitude("4:08:15.162342", unit=u.hour)
 
     #TODO: this was the "smart" initializer behavior - adjust in 0.3 appropriately
-    ## Where RA values are commonly found in hours or degrees, declination is
+    ## Where Longitude values are commonly found in hours or degrees, declination is
     ## nearly always specified in degrees, so this is the default.
-    #dec = Dec("-41:08:15.162342")
-    with raises(UnitsError):
-        dec = Dec("-41:08:15.162342")
-    dec = Dec("-41:08:15.162342", unit=u.degree)  # same as above
-
-    # The RA and Dec objects have bounds hard-coded at (0,360) and (-90,90)
-    # degrees, respectively.
-    assert ra.bounds == (0, 360)
-    with raises(AttributeError):
-        ra.bounds = (-45, 45)
-    assert dec.bounds == (-90, 90)
-    with raises(AttributeError):
-        dec.bounds = (-45, 45)
-
-    #RA objects can also compute hour angle and local siderial times
-    ra = RA("1:00:00", unit=u.hour)
-    ha1 = ra.hour_angle(Angle(1.5, u.hour))
-    assert isinstance(ha1, Angle)
-    npt.assert_almost_equal(ha1.hours, .5)
-    ha2 = ra.hour_angle(Time('2012-1-1 3:00:00', scale='utc'))
-    npt.assert_almost_equal(ha2.hours, 23.125)
-
-    lst = ra.lst(Angle(1.5, u.hour))
-    assert isinstance(lst, Angle)
-    npt.assert_almost_equal(lst.hours, 2.5)
+    #dec = Latitude("-41:08:15.162342")
+    with raises(u.UnitsError):
+        dec = Latitude("-41:08:15.162342")
+    dec = Latitude("-41:08:15.162342", unit=u.degree)  # same as above
+
 
 def test_create_coordinate():
     """
@@ -502,66 +414,70 @@ def test_create_coordinate():
     coordinates with conversions to standard coordinates.
     '''
 
-    from .. import Angle, RA, Dec, ICRSCoordinates, GalacticCoordinates
-    from .. import HorizontalCoordinates
-    import numpy.testing as npt
+    from .. import Angle, Longitude, Latitude, ICRS, Galactic
+    from .. import AltAz
+
+    ra = Longitude("4:08:15.162342", unit=u.hour)
+    dec = Latitude("-41:08:15.162342", unit=u.degree)
 
-    ra = RA("4:08:15.162342", unit=u.hour)
-    dec = Dec("-41:08:15.162342", unit=u.degree)
+    # ra and dec are Longitude and Latitude objects, or Angle objects
+    c = ICRS(ra, dec)
+    c = ICRS(Angle(4.137545095, u.hour), Angle(-41.137545095, u.degree))
 
-    # ra and dec are RA and Dec objects, or Angle objects
-    c = ICRSCoordinates(ra, dec)
-    c = ICRSCoordinates(Angle(4.137545095, u.hour), Angle(-41.137545095, u.degree))
+    c = ICRS("54.12412 deg", "-41:08:15.162342 deg")
+    assert isinstance(c.dec, Latitude)  # dec is a Latitude object
 
-    c = ICRSCoordinates("54.12412 deg", "-41:08:15.162342 deg")
-    assert isinstance(c.dec, Dec) # dec is a Dec object
+    #make sure ICRS has a working repr
+    repr(c)
 
-    npt.assert_almost_equal(dec.degrees, -41.137545095)
+    npt.assert_allclose(dec.degree, -41.137545095)
 
     # We should be really robust in what we accept.
-    with raises(ValueError):
-        c = ICRSCoordinates("12 34 56  -56 23 21") # ambiguous
+    with raises(u.UnitsError):
+        c = ICRS("12 34 56  -56 23 21") # ambiguous
 
     with raises(TypeError):
-        c = ICRSCoordinates() # not allowed
+        c = ICRS() # not allowed
 
-    c = ICRSCoordinates(ra="12 43 12", dec=dec, unit=(u.hour, u.hour))
+    c = ICRS(ra="12 43 12", dec=dec, unit=(u.hour, u.hour))
 
     with raises(TypeError):
-        c = ICRSCoordinates(ra="12 43 12", unit=(u.hour,))
+        c = ICRS(ra="12 43 12", unit=(u.hour,))
 
     with raises(TypeError):
-        c = ICRSCoordinates(ra="12h43m32", b="12:32:43")
+        c = ICRS(ra="12h43m32", b="12:32:43")
 
     with raises(TypeError):
-        c = ICRSCoordinates(ra="12h43m32")
+        c = ICRS(ra="12h43m32")
 
     with raises(TypeError):
-        c = ICRSCoordinates(dec="12 32 54")
+        c = ICRS(dec="12 32 54")
 
     # It would be convenient to accept both (e.g. ra, dec) coordinates as a
     # single string in the initializer. This can lead to ambiguities
     # particularly when both are different units. The solution is to accept a
     # sequence for the "unit" keyword  that one would expect to sent to Angle.
     # This must be a 2-sequence with the two elements' units.
-    ICRSCoordinates('4 23 43.43  +23 45 12.324', unit=(u.hour, u.degree))
+    ICRS('4 23 43.43  +23 45 12.324', unit=(u.hour, u.degree))
 
     # If one of them is None, try to guess for unambiguous cases
-    ICRSCoordinates('12h43m32 +23:45:12.324', unit=(None, u.degree))
+    ICRS('12h43m32 +23:45:12.324', unit=(None, u.degree))
 
     # unit=None is the same as unit=(None, None)
-    ICRSCoordinates('12h43m32 +23d45m12.324s', unit=None)
+    ICRS('12h43m32 +23d45m12.324s', unit=None)
 
 
     # Other types of coordinate systems have their own classes
     l = Angle(123.4, unit=u.degree)
     b = Angle(76.5, unit=u.degree)
-    c = GalacticCoordinates(l, b)  # only accepts Angle objects *not RA/Dec
-    with raises(TypeError):
-        GalacticCoordinates(ra, dec)
+    c = Galactic(l, b)  # accepts Angle objects and Longitude/Latitude
+    d = Galactic(ra, dec)
+
+    #make sure Galactic has a working repr
+    repr(c)
 
-    assert isinstance(c.l, Angle)  # *not* RA or Dec
-    assert isinstance(c.b, Angle)  # *not* RA or Dec
+    assert isinstance(c.l, Angle)  # *not* Longitude or Latitude
+    assert isinstance(c.b, Angle)  # *not* Longitude or Latitude
 
     #some coordinates require an equinox - this is given as an astropy.time.Time
     from ...time import Time
@@ -569,15 +485,22 @@ def test_create_coordinate():
     alt = Angle(20.5, unit=u.degree)
     az = Angle(45, unit=u.degree)
     timeobj = Time('J2000', scale='utc')
-    HorizontalCoordinates(alt, az, equinox=timeobj)
+    AltAz(alt, az, equinox=timeobj)
 
     #some also have an option for an observation time
-    ICRSCoordinates(12, 13, unit=(u.hour, u.degree), obstime=timeobj)
+    ICRS(12, 13, unit=(u.hour, u.degree), obstime=timeobj)
 
     #passing in a non-time object give a TypeError
     with raises(TypeError):
-        ICRSCoordinates(12, 13, unit=(u.hour, u.degree), obstime=2000.)
+        ICRS(12, 13, unit=(u.hour, u.degree), obstime=2000.)
 
+    #should also be able to initialize coordinates from other coord objects
+    ICRS(ICRS(ra, dec))
+    newi = ICRS(c) # including from other types like Galactic
+    # and it will auto-convert
+    assert isinstance(newi, ICRS)
+    assert newi.ra != c.l
+    assert newi.dec != c.b
 
 
 def test_convert_api():
@@ -585,41 +508,41 @@ def test_convert_api():
     Tests the basic coordinate conversion functionality.
     """
 
-    from .. import Angle, RA, Dec, ICRSCoordinates, GalacticCoordinates, HorizontalCoordinates
+    from .. import Angle, Longitude, Latitude, ICRS, Galactic, AltAz
     from ..transformations import coordinate_alias, transform_function, master_transform_graph
 
     '''
     Coordinate conversion occurs on-demand internally
     '''
 
-    ra = RA("4:08:15.162342", unit=u.hour)
-    dec = Dec("-41:08:15.162342", unit=u.degree)
-    c = ICRSCoordinates(ra=ra, dec=dec)
+    ra = Longitude("4:08:15.162342", unit=u.hour)
+    dec = Latitude("-41:08:15.162342", unit=u.degree)
+    c = ICRS(ra=ra, dec=dec)
 
-    npt.assert_almost_equal(c.galactic.l.degrees, -114.71902, 5)
+    npt.assert_allclose(c.galactic.l.degree, 245.28098, 5)
     assert isinstance(c.galactic.b, Angle)
-    npt.assert_almost_equal(c.galactic.b.degrees, -47.554501, 5)
+    npt.assert_allclose(c.galactic.b.degree, -47.554501, 5)
 
     # can also explicitly specify a coordinate class to convert to
-    gal = c.transform_to(GalacticCoordinates)
+    gal = c.transform_to(Galactic)
 
     # can still convert back to equatorial using the shorthand
-    assert gal.icrs.ra.format(unit=u.hour, sep=":",
-                              precision=2) == '4:08:15.16'
+    assert gal.icrs.ra.to_string(unit=u.hour, sep=":",
+                                 precision=2) == '4:08:15.16'
 
     with raises(ConvertError):
         # there's no way to convert to alt/az without a specified location
-        c.transform_to(HorizontalCoordinates)
+        c.transform_to(AltAz)
 
     # users can specify their own coordinates and conversions
     @coordinate_alias('my_coord')
-    class CustomCoordinates(ICRSCoordinates):
+    class CustomCoordinates(ICRS):
         pass
 
-    @transform_function(ICRSCoordinates, CustomCoordinates)
+    @transform_function(ICRS, CustomCoordinates)
     def icrs_to_custom(icrs_coo):
-        return CustomCoordinates(icrs_coo.ra.degrees,
-                                 icrs_coo.dec.degrees + 2.5,
+        return CustomCoordinates(icrs_coo.ra.degree,
+                                 icrs_coo.dec.degree + 2.5,
                                  unit=(u.degree, u.degree))
 
     try:
@@ -631,7 +554,7 @@ def test_convert_api():
         assert isinstance(mycoord2, CustomCoordinates)
     finally:
         #be sure to remove the registered transform
-        master_transform_graph._graph[ICRSCoordinates][CustomCoordinates].unregister()
+        master_transform_graph._graph[ICRS][CustomCoordinates].unregister()
 
 
 def test_proj_separations():
@@ -639,22 +562,22 @@ def test_proj_separations():
     Test angular separation functionality
     """
 
-    from .. import ICRSCoordinates, GalacticCoordinates, AngularSeparation, coordinate_alias
+    from .. import ICRS, Galactic, coordinate_alias, Angle
 
     '''
     Angular separations between two points on a sphere are supported via the
     `separation` method.
     '''
 
-    c1 = ICRSCoordinates(ra=0, dec=0, unit=(u.degree, u.degree))
-    c2 = ICRSCoordinates(ra=0, dec=1, unit=(u.degree, u.degree))
+    c1 = ICRS(ra=0, dec=0, unit=(u.degree, u.degree))
+    c2 = ICRS(ra=0, dec=1, unit=(u.degree, u.degree))
 
     sep = c2.separation(c1)
-    #returns an AngularSeparation object (a subclass of Angle)
-    assert isinstance(sep, AngularSeparation)
+    #returns an Angle object
+    assert isinstance(sep, Angle)
 
-    assert sep.degrees == 1
-    assert sep.arcmins == 60.
+    assert sep.degree == 1
+    npt.assert_allclose(sep.arcminute, 60.)
 
     # these operations have ambiguous interpretations for points on a sphere
     with raises(TypeError):
@@ -662,19 +585,19 @@ def test_proj_separations():
     with raises(TypeError):
         c1 - c2
 
-    ngp = GalacticCoordinates(l=0, b=90, unit=(u.degree, u.degree))
-    ncp = ICRSCoordinates(ra=0, dec=90, unit=(u.degree, u.degree))
+    ngp = Galactic(l=0, b=90, unit=(u.degree, u.degree))
+    ncp = ICRS(ra=0, dec=90, unit=(u.degree, u.degree))
 
     # if there is a defined conversion between the relevant coordinate systems,
     # it will be automatically performed to get the right angular separation
-    npt.assert_almost_equal(ncp.separation(ngp.icrs).degrees, ncp.separation(ngp).degrees)
+    npt.assert_allclose(ncp.separation(ngp.icrs).degree, ncp.separation(ngp).degree)
 
     # distance from the north galactic pole to celestial pole
-    npt.assert_almost_equal(ncp.separation(ngp.icrs).degrees, 62.8716627659)
+    npt.assert_allclose(ncp.separation(ngp.icrs).degree, 62.8716627659)
 
 
     @coordinate_alias('my_coord2')
-    class CustomCoordinate(ICRSCoordinates):
+    class CustomCoordinate(ICRS):
         pass  # does not specify a coordinate transform
 
     c4 = CustomCoordinate(0, 0, unit=(u.degree, u.degree))
@@ -689,7 +612,7 @@ def test_distances():
     Tests functionality for Coordinate class distances and cartesian
     transformations.
     """
-    from .. import Distance, ICRSCoordinates, GalacticCoordinates, CartesianPoints
+    from .. import Distance, ICRS, Galactic, CartesianPoints
     from ...cosmology import WMAP5, WMAP7
 
     '''
@@ -703,16 +626,16 @@ def test_distances():
     d3 = Distance(value=5, unit=u.kpc)
 
     # need to provide a unit
-    with raises(UnitsError):
+    with raises(u.UnitsError):
         Distance(12)
 
     # standard units are pre-defined
-    npt.assert_almost_equal(distance.lightyear, 39.138765325702551)
-    npt.assert_almost_equal(distance.km, 370281309776063.0)
+    npt.assert_allclose(distance.lyr, 39.138765325702551)
+    npt.assert_allclose(distance.km, 370281309776063.0)
 
     # Coordinate objects can be assigned a distance object, giving them a full
     # 3D position
-    c = GalacticCoordinates(l=158.558650, b=-43.350066, unit=(u.degree, u.degree))
+    c = Galactic(l=158.558650, b=-43.350066, unit=(u.degree, u.degree))
     c.distance = Distance(12, u.parsec)
 
     #can also set distances using tuple-format
@@ -729,19 +652,19 @@ def test_distances():
     # Coordinate objects can be initialized with a distance using special
     # syntax
     #TODO: use this commented line once quantity is in
-    #c1 = GalacticCoordinates(l=158.558650, b=-43.350066, unit=u.degree, distance=12 * u.kpc)
-    c1 = GalacticCoordinates(l=158.558650, b=-43.350066,
+    #c1 = Galactic(l=158.558650, b=-43.350066, unit=u.degree, distance=12 * u.kpc)
+    c1 = Galactic(l=158.558650, b=-43.350066,
         unit=(u.degree, u.degree), distance=Distance(12, u.kpc))
 
     # Coordinate objects can be instantiated with cartesian coordinates
     # Internally they will immediately be converted to two angles + a distance
-    c2 = GalacticCoordinates(x=2, y=4, z=8, unit=u.parsec)
+    c2 = Galactic(x=2, y=4, z=8, unit=u.parsec)
 
     sep12 = c1.separation_3d(c2)
     # returns a *3d* distance between the c1 and c2 coordinates
     # not that this does *not*
     assert isinstance(sep12, Distance)
-    npt.assert_almost_equal(sep12.pc, 12005.784163916317, 10)
+    npt.assert_allclose(sep12.pc, 12005.784163916317, 10)
 
     '''
     All spherical coordinate systems with distances can be converted to
@@ -750,35 +673,38 @@ def test_distances():
 
     (x, y, z) = (c2.x, c2.y, c2.z)
     #this only computes the CartesianPoints *once*, and then caches it
-    npt.assert_almost_equal(x, 2)
-    npt.assert_almost_equal(y, 4)
-    npt.assert_almost_equal(z, 8)
+    #note that the x/y/z are Quantity objects
+    assert isinstance(x, u.Quantity)
+    npt.assert_allclose(x.value, 2)
+    npt.assert_allclose(y.value, 4)
+    npt.assert_allclose(z.value, 8)
 
     cpt = c2.cartesian
     assert isinstance(cpt, CartesianPoints)
-    npt.assert_almost_equal(cpt.x, 2)
-    npt.assert_almost_equal(cpt.y, 4)
-    npt.assert_almost_equal(cpt.z, 8)
+    npt.assert_allclose(cpt.x.value, 2)
+    npt.assert_allclose(cpt.y.value, 4)
+    npt.assert_allclose(cpt.z.value, 8)
 
     # with no distance, the unit sphere is assumed when converting to cartesian
-    c3 = GalacticCoordinates(l=158.558650, b=-43.350066, unit=(u.degree, u.degree), distance=None)
+    c3 = Galactic(l=158.558650, b=-43.350066, unit=(u.degree, u.degree), distance=None)
     unitcart = c3.cartesian
-    npt.assert_almost_equal((unitcart.x**2 + unitcart.y**2 + unitcart.z**2)**0.5, 1.0)
+    npt.assert_allclose(((unitcart.x**2 + unitcart.y**2 +
+                          unitcart.z**2)**0.5).value, 1.0)
 
     # CartesianPoints objects can be added and subtracted, which are
     # vector/elementwise they can also be given as arguments to a coordinate
     # system
-    csum = ICRSCoordinates(c1.cartesian + c2.cartesian)
+    csum = ICRS(c1.cartesian + c2.cartesian)
 
-    npt.assert_almost_equal(csum.x, -8.12016610185)
-    npt.assert_almost_equal(csum.y, 3.19380597435)
-    npt.assert_almost_equal(csum.z, -8.2294483707)
-    npt.assert_almost_equal(csum.ra.degrees, 158.529401774)
-    npt.assert_almost_equal(csum.dec.degrees, -43.3235825777)
-    npt.assert_almost_equal(csum.distance.kpc, 11.9942200501)
+    npt.assert_allclose(csum.x.value, -8.12016610185)
+    npt.assert_allclose(csum.y.value, 3.19380597435)
+    npt.assert_allclose(csum.z.value, -8.2294483707)
+    npt.assert_allclose(csum.ra.degree, 158.529401774)
+    npt.assert_allclose(csum.dec.degree, -43.3235825777)
+    npt.assert_allclose(csum.distance.kpc, 11.9942200501)
 
 
- at pytest.mark.skipif('not HAS_SCIPY')
+ at pytest.mark.skipif(str('not HAS_SCIPY'))
 def test_distances_scipy():
     """
     The distance-related tests that require scipy due to the cosmology
@@ -787,12 +713,15 @@ def test_distances_scipy():
     from .. import Distance
     from ...cosmology import WMAP5
 
-    #try all the different ways to initialize a Distance
+    #try different ways to initialize a Distance
     d4 = Distance(z=0.23)  # uses default cosmology - as of writing, WMAP7
+    npt.assert_allclose(d4.z, 0.23, rtol=1e-8)
+
     d5 = Distance(z=0.23, cosmology=WMAP5)
+    npt.assert_allclose(d5.compute_z(WMAP5), 0.23, rtol=1e-8)
 
-    assert abs(d4.z - 0.23) < 1e-8  # redshift, assuming "current" cosmology
-    assert abs(d5.compute_z(WMAP5) - 0.23) < 1e-8 # specifying a cosmology possible
+    d6 = Distance(z=0.23, cosmology=WMAP5, unit=u.km)
+    npt.assert_allclose(d6.value, 3.5417046898762366e+22)
 
 
 def test_unicode():
@@ -801,6 +730,6 @@ def test_unicode():
     is not `utf-8` -- but given a recent fix, is expected to pass on
     all platforms.
     """
-    from .. import ICRSCoordinates
-    u = unicode("12h46m11.086s -00d30m11.99s")
-    c = ICRSCoordinates(u)
+    from .. import ICRS
+    u = six.text_type("12h46m11.086s -00d30m11.99s")
+    c = ICRS(u)
diff --git a/astropy/coordinates/tests/test_arrays.py b/astropy/coordinates/tests/test_arrays.py
index fe4fe0e..f97de71 100644
--- a/astropy/coordinates/tests/test_arrays.py
+++ b/astropy/coordinates/tests/test_arrays.py
@@ -1,7 +1,9 @@
 # -*- coding: utf-8 -*-
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from __future__ import print_function, division
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
+from ...extern import six
 from ...tests.helper import pytest
 
 import numpy as np
@@ -17,11 +19,262 @@ def test_angle_arrays():
     from .. import Angle
 
     # Tests incomplete
-    with pytest.raises(NotImplementedError):
-        a1 = Angle([0, 45, 90, 180, 270, 360], unit=u.degree)
+    a1 = Angle([0, 45, 90, 180, 270, 360, 720.], unit=u.degree)
+    npt.assert_almost_equal([0., 45., 90., 180., 270., 360., 720.], a1.value)
 
-    with pytest.raises(NotImplementedError):
-        a2 = Angle(np.array([0, 45, 90, 180, 270, 360]), unit=u.degree)
+    a2 = Angle(np.array([-90, -45, 0, 45, 90, 180, 270, 360]), unit=u.degree)
+    npt.assert_almost_equal([-90, -45, 0, 45, 90, 180, 270, 360],
+                            a2.value)
 
-    with pytest.raises(NotImplementedError):
-        a3 = Angle(["12 degrees", "3 hours", "5 deg", "4rad"])
+    a3 = Angle(["12 degrees", "3 hours", "5 deg", "4rad"])
+    npt.assert_almost_equal([12., 45., 5., 229.18311805],
+                            a3.value)
+    assert a3.unit == u.degree
+
+    a4 = Angle(["12 degrees", "3 hours", "5 deg", "4rad"], u.radian)
+    npt.assert_almost_equal(a4.degree, a3.value)
+    assert a4.unit == u.radian
+
+    a5 = Angle([0, 45, 90, 180, 270, 360], unit=u.degree)
+    a6 = a5.sum()
+    npt.assert_almost_equal(a6.value, 945.0)
+    assert a6.unit is u.degree
+
+    with pytest.raises(TypeError):
+        # Arrays of Angle objects are not supported -- that's really
+        # tricky to do correctly, if at all, due to the possibility of
+        # nesting.
+        a7 = Angle([a1, a2, a3], unit=u.degree)
+
+    a8 = Angle(["04:02:02", "03:02:01", "06:02:01"], unit=u.degree)
+    npt.assert_almost_equal(a8.value, [4.03388889, 3.03361111, 6.03361111])
+
+    a9 = Angle(np.array(["04:02:02", "03:02:01", "06:02:01"]), unit=u.degree)
+    npt.assert_almost_equal(a9.value, a8.value)
+
+    with pytest.raises(u.UnitsError):
+        a10 = Angle(["04:02:02", "03:02:01", "06:02:01"])
+
+
+def test_dms():
+    from .. import Angle
+    from ..angle_utilities import dms_to_degrees
+
+    a1 = Angle([0, 45.5, -45.5], unit=u.degree)
+    d, m, s = a1.dms
+    npt.assert_almost_equal(d, [0, 45, -45])
+    npt.assert_almost_equal(m, [0, 30, -30])
+    npt.assert_almost_equal(s, [0, 0, -0])
+
+    dms = a1.dms
+    degrees = dms_to_degrees(*dms)
+    npt.assert_almost_equal(a1.degree, degrees)
+
+    a2 = Angle(dms, unit=u.degree)
+
+    npt.assert_almost_equal(a2.radian, a1.radian)
+
+
+def test_hms():
+    from .. import Angle
+    from ..angle_utilities import hms_to_hours
+
+    a1 = Angle([0, 11.5, -11.5], unit=u.hour)
+    h, m, s = a1.hms
+    npt.assert_almost_equal(h, [0, 11, -11])
+    npt.assert_almost_equal(m, [0, 30, -30])
+    npt.assert_almost_equal(s, [0, 0, -0])
+
+    hms = a1.hms
+    hours = hms_to_hours(*hms)
+    npt.assert_almost_equal(a1.hour, hours)
+
+    a2 = Angle(hms, unit=u.hour)
+
+    npt.assert_almost_equal(a2.radian, a1.radian)
+
+
+def test_array_coordinates_creation():
+    """
+    Test creating coordinates from arrays.
+    """
+    from .. import ICRS
+
+    c = ICRS(np.array([1, 2]), np.array([3, 4]), unit=(u.deg, u.deg))
+    assert not c.isscalar
+
+    with pytest.raises(ValueError):
+        c = ICRS(np.array([1, 2]), np.array([3, 4, 5]), unit=(u.deg, u.deg))
+    with pytest.raises(ValueError):
+        c = ICRS(np.array([1, 2]), np.array([[3, 4], [5, 6]]), unit=(u.deg, u.deg))
+
+    #make sure cartesian initialization also works
+    c = ICRS(x=np.array([1, 2]), y=np.array([3, 4]), z=np.array([5, 6]), unit=u.kpc)
+
+    #also ensure strings can be arrays
+    c = ICRS(np.array(['1d0m0s', '2h02m00.3s']), np.array(['3d', '4d']), unit=(u.deg, u.deg))
+
+    #but invalid strings cannot
+    with pytest.raises(ValueError):
+        c = ICRS(np.array(['10m0s', '2h02m00.3s']), np.array(['3d', '4d']), unit=(u.deg, u.deg))
+    with pytest.raises(ValueError):
+        c = ICRS(np.array(['1d0m0s', '2h02m00.3s']), np.array(['3x', '4d']), unit=(u.deg, u.deg))
+
+
+def test_array_coordinates_distances():
+    """
+    Test creating coordinates from arrays and distances.
+    """
+    from .. import ICRS
+
+    #correct way
+    ICRS(np.array([1, 2]), np.array([3, 4]), unit=(u.deg, u.deg), distance= [.1, .2] * u.kpc)
+
+    with pytest.raises(ValueError):
+        #scalar distance and array coordinates
+        ICRS(np.array([1, 2]), np.array([[3, 4], [5, 6]]), unit=(u.deg, u.deg), distance= 2. * u.kpc)
+    with pytest.raises(ValueError):
+        #scalar coordinates and array distance
+        ICRS(1., 2., unit=(u.deg, u.deg), distance= [.1, .2, 3.] * u.kpc)
+    with pytest.raises(ValueError):
+        #more distance values than coordinates
+        ICRS(np.array([1, 2]), np.array([[3, 4], [5, 6]]), unit=(u.deg, u.deg), distance= [.1, .2, 3.] * u.kpc)
+
+
+ at pytest.mark.parametrize(('arrshape', 'distance'), [((2, ), None), ((4, 2, 5), None), ((4, 2, 5), 2 * u.kpc)])
+def test_array_coordinates_transformations(arrshape, distance):
+    """
+    Test transformation on coordinates with array content (first length-2 1D, then a 3D array)
+    """
+    from .. import ICRS, Galactic
+
+    #M31 coordinates from test_transformations
+    raarr = np.ones(arrshape) * 10.6847929
+    decarr = np.ones(arrshape) * 41.2690650
+    if distance is not None:
+        distance = np.ones(arrshape) * distance
+
+    c = ICRS(raarr, decarr, unit=(u.deg, u.deg), distance=distance)
+    g = c.transform_to(Galactic)
+
+    assert g.l.shape == arrshape
+
+    npt.assert_array_almost_equal(g.l.degree, 121.17447049007306)
+    npt.assert_array_almost_equal(g.b.degree, -21.57291080408368)
+
+    if distance is not None:
+        assert g.distance.unit == c.distance.unit
+
+    #now make sure round-tripping works through FK5 - this exercises both static and dynamic transform matricies
+    c2 = c.fk5.icrs
+    npt.assert_array_almost_equal(c.ra, c2.ra)
+    npt.assert_array_almost_equal(c.dec, c2.dec)
+
+    assert c2.ra.shape == arrshape
+
+    if distance is not None:
+        assert c2.distance.unit == c.distance.unit
+
+    #also make sure it's possible to get to FK4, which uses a direct transform function.
+    fk4 = c.fk4
+
+    npt.assert_array_almost_equal(fk4.ra.degree, 10.0004, decimal=4)
+    npt.assert_array_almost_equal(fk4.dec.degree, 40.9953, decimal=4)
+
+    assert fk4.ra.shape == arrshape
+    if distance is not None:
+        assert fk4.distance.unit == c.distance.unit
+
+    #now check the reverse transforms run
+    cfk4 = fk4.icrs
+    assert cfk4.ra.shape == arrshape
+
+
+def test_array_coordinates_string():
+    """
+    tests for string representations of aarray coordinates
+    """
+    from .. import ICRS
+
+    c = ICRS(np.array([1, 2]), np.array([3, 4]), unit=(u.deg, u.deg))
+    str(c)
+    six.text_type(c)
+    repr(c)
+
+    assert repr(c) == '<ICRS RA=[1 2] deg, Dec=[3 4] deg>'
+
+    #also check with distance
+
+    c = ICRS(np.array([1, 2]), np.array([3, 4]), unit=(u.deg, u.deg), distance= u.kpc * [0.5, 1.5])
+    str(c)
+    six.text_type(c)
+    repr(c)
+
+    print(repr(c))
+
+    assert repr(c) == '<ICRS RA=[1 2] deg, Dec=[3 4] deg, Distance=[ 0.5  1.5] kpc>'
+
+
+def test_array_precession():
+    """
+    Ensures that FK5 coordinates as arrays precess their equinoxes
+    """
+    from ...time import Time
+    from .. import FK5
+
+    j2000 = Time('J2000', scale='utc')
+    j1975 = Time('J1975', scale='utc')
+
+    fk5 = FK5([1, 1.1], [0.5, 0.6], unit=(u.radian, u.radian))
+    assert fk5.equinox.jyear == j2000.jyear
+    fk5_2 = fk5.precess_to(j1975)
+    assert fk5_2.equinox.jyear == j1975.jyear
+
+    npt.assert_array_less(0.05, np.abs(fk5.ra.degree - fk5_2.ra.degree))
+    npt.assert_array_less(0.05, np.abs(fk5.dec.degree - fk5_2.dec.degree))
+
+def test_array_separation():
+    from .. import ICRS
+
+    c1 = ICRS([0 , 0], [0, 0], unit=(u.degree, u.degree))
+    c2 = ICRS([1, 2], [0, 0], unit=(u.degree, u.degree))
+
+    npt.assert_array_almost_equal(c1.separation(c2).degree, [1, 2])
+
+    c3 = ICRS([0 , 3.], [0., 0], unit=(u.degree, u.degree), distance=[1 ,1.] * u.kpc)
+    c4 = ICRS([1, 1.], [0., 0], unit=(u.degree, u.degree), distance=[1 ,1.] * u.kpc)
+    
+    #the 3-1 separation should be twice the 0-1 separation, but not *exactly* the same
+    sep = c3.separation_3d(c4)
+    sepdiff = sep[1] - (2 * sep[0])
+
+    assert abs(sepdiff.value) < 1e-5
+    assert sepdiff != 0
+
+def test_array_indexing():
+    from .. import FK5Coordinates
+    from ...time import Time
+
+    ra = np.linspace(0, 360, 10)
+    dec = np.linspace(-90, 90, 10)
+    j1975 = Time(1975, format='jyear', scale='utc')
+
+    c1 = FK5Coordinates(ra, dec, unit=(u.degree, u.degree), equinox=j1975)
+
+    c2 = c1[4]
+    assert c2.ra.degree == 160
+    assert c2.dec.degree == -10
+
+    c3 = c1[2:5]
+    npt.assert_array_equal(c3.ra.degree, [80, 120, 160])
+    npt.assert_array_equal(c3.dec.degree, [-50, -30, -10])
+
+    c4 = c1[np.array([2, 5, 8])]
+
+    npt.assert_array_equal(c4.ra.degree, [80, 200, 320])
+    npt.assert_array_equal(c4.dec.degree, [-50, 10, 70])
+
+    #now make sure the equinox is preserved
+    assert c2.equinox == c1.equinox
+    assert c3.equinox == c1.equinox
+    assert c4.equinox == c1.equinox
diff --git a/astropy/coordinates/tests/test_distance.py b/astropy/coordinates/tests/test_distance.py
index 19f555c..d02791c 100644
--- a/astropy/coordinates/tests/test_distance.py
+++ b/astropy/coordinates/tests/test_distance.py
@@ -1,42 +1,212 @@
 # -*- coding: utf-8 -*-
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from __future__ import print_function
-
-from numpy import testing as npt
-
-from ... import units as u
 
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 """
 This includes tests for distances/cartesian points that are *not* in the API
 tests.  Right now that's just regression tests.
 """
 
+import numpy as np
+from numpy import testing as npt
+
+from ...tests.helper import pytest
+from ... import units as u
+
+
 
 def test_distance_change():
-    from .. import RA, Dec, ICRSCoordinates, Distance
+    from .. import Longitude, Latitude, ICRS, Distance
 
-    ra = RA("4:08:15.162342", unit=u.hour)
-    dec = Dec("-41:08:15.162342", unit=u.degree)
-    c = ICRSCoordinates(ra, dec)
+    ra = Longitude("4:08:15.162342", unit=u.hour)
+    dec = Latitude("-41:08:15.162342", unit=u.degree)
+    c = ICRS(ra, dec)
 
     c.distance = Distance(1, unit=u.kpc)
 
-    oldx = c.x
+    oldx = c.x.value
     assert (oldx - 0.35284083171901953) < 1e-10
 
     #now x should increase when the distance increases
     c.distance = Distance(2, unit=u.kpc)
 
-    assert c.x == oldx * 2
+    assert c.x.value == oldx * 2
+
+
+def test_distance_is_quantity():
+    """
+    test that distance behaves like a proper quantity
+    """
+
+    from .. import Distance
+
+    Distance(2 * u.kpc)
+
+    d = Distance([2, 3.1], u.kpc)
+
+    assert d.shape == (2,)
+
+    a = d.view(np.ndarray)
+    q = d.view(u.Quantity)
+    a[0] = 1.2
+    q.value[1] = 5.4
+
+    assert d[0].value == 1.2
+    assert d[1].value == 5.4
+
+    q = u.Quantity(d, copy=True)
+    q.value[1] = 0
+    assert q.value[1] == 0
+    assert d.value[1] != 0
+
+
+def test_distmod():
+    from .. import Distance
+
+    d = Distance(10, u.pc)
+    assert d.distmod.value == 0
+
+    d = Distance(distmod=20)
+    assert d.distmod.value == 20
+    assert d.kpc == 100
+
+    d = Distance(distmod=-1., unit=u.au)
+    npt.assert_allclose(d.value, 1301442.9440836983)
+
+    with pytest.raises(ValueError):
+        d = Distance(value=d, distmod=20)
+
+    with pytest.raises(ValueError):
+        d = Distance(z=.23, distmod=20)
+
+def test_distance_in_coordinates():
+    """
+    test that distances can be created from quantities and that CartesianPoints
+    can be built from them sucessfully
+    """
+    from .. import Longitude, Latitude, ICRS, CartesianPoints
+
+    ra = Longitude("4:08:15.162342", unit=u.hour)
+    dec = Latitude("-41:08:15.162342", unit=u.degree)
+    c = ICRS(ra, dec)
+
+    c.distance = 2 * u.kpc  # auto-converts
+
+    #make sure cartesian stuff now works
+    # do the internal method first, because the properties will fail with
+    # unhelpful errors because __getattr_ is overridden by coordinates
+    c._make_cart()
+
+    # c.x, c.y, c.z and such are in test_api
+    #make sure repr still works
+
+    repr(c)
+
+    assert isinstance(c.cartesian, CartesianPoints)
+
+
+def test_creating_cartesian_single():
+    """
+    test building cartesian points with the single-argument constructor
+    """
+
+    from .. import CartesianPoints
+
+    CartesianPoints(np.ones((3, 10)), unit=u.kpc)
+
+    #allow dimensionless, too
+    CartesianPoints(np.ones((3, 10)), unit=u.dimensionless_unscaled)
+
+    with pytest.raises(u.UnitsError):
+        CartesianPoints(np.ones((3, 10)))
+
+    with pytest.raises(ValueError):
+        CartesianPoints(np.ones((2, 10)), unit=u.kpc)
+
+    #quantity version
+    c = CartesianPoints(np.ones((3, 10)) * u.kpc)
+    assert c.unit == u.kpc
+
+    c = CartesianPoints(np.ones((3, 10)) * u.kpc, unit=u.Mpc)
+    assert c.unit == u.Mpc
+
+
+def test_creating_cartesian_triple():
+    """
+    test building cartesian points with the `x`,`y`,`z` constructor
+    """
+
+    from .. import CartesianPoints
+
+    #make sure scalars are scalars
+    c = CartesianPoints(1, 2, 3, unit=u.kpc)
+
+    CartesianPoints(np.ones(10), np.ones(10), np.ones(10), unit=u.kpc)
+
+    with pytest.raises(ValueError):
+        #shapes must match
+        CartesianPoints(np.ones(8), np.ones(12), np.ones(9), unit=u.kpc)
+
+    #if one is a quantity, use that unit
+    c = CartesianPoints(np.ones(10), np.ones(10), np.ones(10) * u.kpc)
+    assert c.unit == u.kpc
+
+    #convert when needed
+    c = CartesianPoints(np.ones(10), np.ones(10), np.ones(10) * u.kpc,
+                        unit=u.Mpc)
+    assert c.unit == u.Mpc
+    assert c[2][0].value < .1  # conversion of kpc to Mpc should give much smaller, but do this for round-off
+
+    with pytest.raises(u.UnitsError):
+        CartesianPoints(np.ones(10) * u.Mpc, np.ones(10), np.ones(10) * u.kpc)
+
+
+def test_cartesian_operations():
+    """
+    more tests of CartesianPoints beyond those in test_api
+    """
+
+    from .. import Longitude, Latitude
+    from .. import CartesianPoints
+
+    c = CartesianPoints(np.ones(10), np.ones(10), np.ones(10), unit=u.kpc)
+
+    c2 = c + c
+    assert c2.y[2].value == 2
+    assert c2.unit == c.unit
+
+    c3 = c - c
+    assert c3[1, 2].value == 0
+
+    r, lat, lon = c.to_spherical()
+
+    assert r.unit == c.unit
+    assert isinstance(lat, Latitude)
+    assert isinstance(lon, Longitude)
+
+    c4 = c * 3
+    assert c4.unit == c.unit
+
+    #always preserve the CartesianPoint's units
+    c5 = 3 * u.pc + c
+    assert c5.unit == c.unit
+
+
+def test_cartesian_view():
+    """
+    test that the cartesian subclass properly deals with new views
+    """
+
+    from .. import CartesianPoints
 
-def test_distance_from_quantity():
-    from .. import RA, Dec, ICRSCoordinates, Distance
+    c = CartesianPoints(np.ones(10), np.ones(10), np.ones(10), unit=u.kpc)
 
-    ra = RA("4:08:15.162342", unit=u.hour)
-    dec = Dec("-41:08:15.162342", unit=u.degree)
-    c = ICRSCoordinates(ra, dec)
+    c2 = CartesianPoints(c, copy=False)
+    asarr = c.view(np.ndarray)
+    assert np.all(asarr == 1)
 
-    # a Quantity object should be able to supply a distance
-    q = 2 * u.kpc
-    c.distance = q
+    asarr.ravel()[0] = 2
+    assert not np.all(asarr == 1)
+    assert not c.x[0] == 2
diff --git a/astropy/coordinates/tests/test_formatting.py b/astropy/coordinates/tests/test_formatting.py
index 0a98ff6..02b8800 100644
--- a/astropy/coordinates/tests/test_formatting.py
+++ b/astropy/coordinates/tests/test_formatting.py
@@ -1,27 +1,31 @@
-from ..angles import Angle
-from ... import units as u
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
+from ...extern import six
+from ...tests.helper import pytest
 
-def test_format_precision():
+from ..angles import Angle
+from ... import units as u
 
+def test_to_string_precision():
     # There are already some tests in test_api.py, but this is a regression
     # test for the bug in issue #1319 which caused incorrect formatting of the
     # seconds for precision=0
 
     angle = Angle(-1.23456789, unit=u.degree)
 
-    assert angle.format(precision=3) == '-1d14m04.444s'
-    assert angle.format(precision=1) == '-1d14m04.4s'
-    assert angle.format(precision=0) == '-1d14m04s'
+    assert angle.to_string(precision=3) == '-1d14m04.444s'
+    assert angle.to_string(precision=1) == '-1d14m04.4s'
+    assert angle.to_string(precision=0) == '-1d14m04s'
 
     angle2 = Angle(-1.23456789, unit=u.hourangle)
 
-    assert angle2.format(precision=3, unit=u.hour) == '-1h14m04.444s'
-    assert angle2.format(precision=1, unit=u.hour) == '-1h14m04.4s'
-    assert angle2.format(precision=0, unit=u.hour) == '-1h14m04s'
+    assert angle2.to_string(precision=3, unit=u.hour) == '-1h14m04.444s'
+    assert angle2.to_string(precision=1, unit=u.hour) == '-1h14m04.4s'
+    assert angle2.to_string(precision=0, unit=u.hour) == '-1h14m04s'
 
 
-def test_format_decimal():
+def test_to_string_decimal():
 
     # There are already some tests in test_api.py, but this is a regression
     # test for the bug in issue #1323 which caused decimal formatting to not
@@ -29,21 +33,108 @@ def test_format_decimal():
 
     angle1 = Angle(2., unit=u.degree)
 
-    assert angle1.format(decimal=True, precision=3) == '2.000'
-    assert angle1.format(decimal=True, precision=1) == '2.0'
-    assert angle1.format(decimal=True, precision=0) == '2'
+    assert angle1.to_string(decimal=True, precision=3) == '2.000'
+    assert angle1.to_string(decimal=True, precision=1) == '2.0'
+    assert angle1.to_string(decimal=True, precision=0) == '2'
 
     angle2 = Angle(3., unit=u.hourangle)
 
-    # In 0.3 and above .format() should preserve the Angle's input unit, but
-    # the change that affects this is not backported to 0.2.x since it depends
-    # on deeper changes
-    assert angle2.format(decimal=True, precision=3, unit=u.hour) == '3.000'
-    assert angle2.format(decimal=True, precision=1, unit=u.hour) == '3.0'
-    assert angle2.format(decimal=True, precision=0, unit=u.hour) == '3'
+    assert angle2.to_string(decimal=True, precision=3) == '3.000'
+    assert angle2.to_string(decimal=True, precision=1) == '3.0'
+    assert angle2.to_string(decimal=True, precision=0) == '3'
 
     angle3 = Angle(4., unit=u.radian)
 
-    assert angle3.format(decimal=True, precision=3, unit=u.radian) == '4.000'
-    assert angle3.format(decimal=True, precision=1, unit=u.radian) == '4.0'
-    assert angle3.format(decimal=True, precision=0, unit=u.radian) == '4'
+    assert angle3.to_string(decimal=True, precision=3) == '4.000'
+    assert angle3.to_string(decimal=True, precision=1) == '4.0'
+    assert angle3.to_string(decimal=True, precision=0) == '4'
+
+
+def test_to_string_formats():
+    a = Angle(1.113355, unit=u.deg)
+    assert a.to_string(format='latex') == r'$1^\circ06{}^\prime48.078{}^{\prime\prime}$'
+    assert a.to_string(format='unicode') == '1\xb006\u203248.078\u2033'
+
+    a = Angle(1.113355, unit=u.hour)
+    assert a.to_string(format='latex') == r'$1^\mathrm{h}06^\mathrm{m}48.078^\mathrm{s}$'
+    assert a.to_string(format='unicode') == '1\u02b006\u1d5048.078\u02e2'
+
+    a = Angle(1.113355, unit=u.radian)
+    assert a.to_string(format='latex') == r'$1.11336\mathrm{rad}$'
+    assert a.to_string(format='unicode') == '1.11336rad'
+
+
+def test_to_string_fields():
+    a = Angle(1.113355, unit=u.deg)
+    assert a.to_string(fields=1) == r'1d'
+    assert a.to_string(fields=2) == r'1d07m'
+    assert a.to_string(fields=3) == r'1d06m48.078s'
+
+
+def test_sexagesimal_rounding_up():
+    a = Angle(359.9999999999, unit=u.deg)
+
+    assert a.to_string(precision=None) == '360d00m00s'
+    assert a.to_string(precision=4) == '360d00m00.0000s'
+    assert a.to_string(precision=5) == '360d00m00.00000s'
+    assert a.to_string(precision=6) == '360d00m00.000000s'
+    assert a.to_string(precision=7) == '359d59m59.9999996s'
+
+    a = Angle(3.999999, unit=u.deg)
+    assert a.to_string(fields=2, precision=None) == '4d00m'
+    assert a.to_string(fields=2, precision=1) == '4d00m'
+    assert a.to_string(fields=2, precision=5) == '4d00m'
+    assert a.to_string(fields=1, precision=1) == '4d'
+    assert a.to_string(fields=1, precision=5) == '4d'
+
+
+def test_to_string_scalar():
+    a = Angle(1.113355, unit=u.deg)
+    assert isinstance(a.to_string(), six.text_type)
+
+
+import numpy as np
+from .. import ICRS, FK4, FK4NoETerms, FK5, Galactic, AltAz
+
+
+ at pytest.mark.parametrize('frame', [ICRS, FK4, FK4NoETerms, FK5])
+def test_coordinate_to_string_vector_hms(frame):
+
+    C = frame(np.arange(2)*12.05*u.deg, np.arange(2)*13.5*u.deg)
+    assert C.to_string(precision=0) == ['-0h00m00s 0d00m00s', '0h48m12s 13d30m00s']
+    assert C.to_string(precision=1) == ['-0h00m00.0s 0d00m00.0s', '0h48m12.0s 13d30m00.0s']
+
+
+ at pytest.mark.parametrize('frame', [Galactic, AltAz])
+def test_coordinate_to_string_vector_dms(frame):
+
+    C = frame(np.arange(2)*12.05*u.deg, np.arange(2)*13.5*u.deg)
+    assert C.to_string(precision=0) == ['-0d00m00s 0d00m00s', '12d03m00s 13d30m00s']
+    assert C.to_string(precision=1) == ['-0d00m00.0s 0d00m00.0s', '12d03m00.0s 13d30m00.0s']
+
+
+ at pytest.mark.parametrize('frame', [ICRS, FK4, FK4NoETerms, FK5])
+def test_coordinate_to_string_scalar_hms(frame):
+
+    C = frame(12.05*u.deg, 13.5*u.deg)
+    assert C.to_string(precision=0) == '0h48m12s 13d30m00s'
+    assert C.to_string(precision=1) == '0h48m12.0s 13d30m00.0s'
+
+
+ at pytest.mark.parametrize('frame', [Galactic, AltAz])
+def test_coordinate_to_string_scalar_dms(frame):
+
+    C = frame(12.05*u.deg, 13.5*u.deg)
+    assert C.to_string(precision=0) == '12d03m00s 13d30m00s'
+    assert C.to_string(precision=1) == '12d03m00.0s 13d30m00.0s'
+
+
+def test_to_string_radian_with_precision():
+    """
+    Regression test for a bug that caused ``to_string`` to crash for angles in
+    radians when specifying the precision.
+    """
+
+    # Check that specifying the precision works
+    a = Angle(3., unit=u.rad)
+    assert a.to_string(precision=3, sep='fromunit') == '3.000rad'
diff --git a/astropy/coordinates/tests/test_matching.py b/astropy/coordinates/tests/test_matching.py
new file mode 100644
index 0000000..c0cba1e
--- /dev/null
+++ b/astropy/coordinates/tests/test_matching.py
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import numpy as np
+from numpy import testing as npt
+from ...tests.helper import pytest
+
+from ... import units as u
+
+
+"""
+These are the tests for coordinate matching.  
+
+Note that this requires scipy.
+"""
+
+try:
+    import scipy
+    HAS_SCIPY = True
+except ImportError:
+    HAS_SCIPY = False
+
+
+ at pytest.mark.skipif(str('not HAS_SCIPY'))
+def test_matching_function():
+    from .. import ICRS
+    from ..matching import match_coordinates_3d
+    #this only uses match_coordinates_3d because that's the actual implementation
+
+    cmatch = ICRS([4, 2.1], [0, 0], unit=(u.degree, u.degree))
+    ccatalog = ICRS([1, 2, 3, 4], [0, 0, 0, 0], unit=(u.degree, u.degree))
+
+    idx, d2d, d3d = match_coordinates_3d(cmatch, ccatalog)
+    npt.assert_array_equal(idx, [3, 1])
+    npt.assert_array_almost_equal(d2d.degree, [0, 0.1])
+    assert d3d.value[0] == 0
+
+    idx, d2d, d3d = match_coordinates_3d(cmatch, ccatalog, nthneighbor=2)
+    assert np.all(idx == 2)
+    npt.assert_array_almost_equal(d2d.degree, [1, 0.9])
+    npt.assert_array_less(d3d.value, 0.02)
+
+
+ at pytest.mark.skipif(str('not HAS_SCIPY'))
+def test_matching_function_3d_and_sky():
+    from .. import ICRS
+    from ..matching import match_coordinates_3d, match_coordinates_sky
+
+    cmatch = ICRS([4, 2.1], [0, 0], unit=(u.degree, u.degree), distance=[1, 5] * u.kpc)
+    ccatalog = ICRS([1, 2, 3, 4], [0, 0, 0, 0], unit=(u.degree, u.degree), distance=[1, 1, 1, 5] * u.kpc)
+
+    idx, d2d, d3d = match_coordinates_3d(cmatch, ccatalog)
+    npt.assert_array_equal(idx, [2, 3])
+
+    npt.assert_array_almost_equal(d2d.degree, [1, 1.9])
+    npt.assert_array_less(d3d.value, [0.02, .2])
+    assert d3d.value[1] > 0.02
+
+    idx, d2d, d3d = match_coordinates_sky(cmatch, ccatalog)
+    npt.assert_array_equal(idx, [2, 1])
+
+    npt.assert_array_almost_equal(d2d.degree, [1, 0.1])
+    npt.assert_array_less(d3d.value, [0.02, .2])
+    assert d3d.value[1] < 0.02
+
+
+ at pytest.mark.skipif(str('not HAS_SCIPY'))
+def test_kdtree_storage():
+    from .. import ICRS
+    from ..matching import match_coordinates_3d
+
+    cmatch = ICRS([4, 2.1], [0, 0], unit=(u.degree, u.degree))
+    ccatalog = ICRS([1, 2, 3, 4], [0, 0, 0, 0], unit=(u.degree, u.degree))
+
+    idx, d2d, d3d = match_coordinates_3d(cmatch, ccatalog, storekdtree=False)
+    assert not hasattr(ccatalog, '_kdtree')
+
+    idx, d2d, d3d = match_coordinates_3d(cmatch, ccatalog, storekdtree=True)
+    assert hasattr(ccatalog, '_kdtree')
+
+    assert not hasattr(ccatalog, 'tilsitcheese')
+    idx, d2d, d3d = match_coordinates_3d(cmatch, ccatalog, storekdtree='tilsitcheese')
+    assert hasattr(ccatalog, 'tilsitcheese')
+    assert not hasattr(cmatch, 'tilsitcheese')
+
+
+ at pytest.mark.skipif(str('not HAS_SCIPY'))
+def test_matching_method():
+    from .. import ICRS
+    from ...utils import NumpyRNGContext
+    from ..matching import match_coordinates_3d, match_coordinates_sky
+
+    with NumpyRNGContext(987654321):
+        cmatch = ICRS(np.random.rand(20) * 360., np.random.rand(20) * 180. - 90., unit=(u.degree, u.degree))
+        ccatalog = ICRS(np.random.rand(100) * 360., np.random.rand(100) * 180. - 90., unit=(u.degree, u.degree))
+
+    idx1, d2d1, d3d1 = cmatch.match_to_catalog_3d(ccatalog)
+    idx2, d2d2, d3d2 = match_coordinates_3d(cmatch, ccatalog)
+
+    npt.assert_array_equal(idx1, idx2)
+    npt.assert_array_equal(d2d1, d2d2)
+    npt.assert_array_equal(d3d1, d3d2)
+
+
+    #should be the same as above because there's no distance, but just make sure this method works
+    idx1, d2d1, d3d1 = cmatch.match_to_catalog_sky(ccatalog)
+    idx2, d2d2, d3d2 = match_coordinates_sky(cmatch, ccatalog)
+
+    npt.assert_array_equal(idx1, idx2)
+    npt.assert_array_equal(d2d1, d2d2)
+    npt.assert_array_equal(d3d1, d3d2)
+
+
+    assert len(idx1) == len(d2d1) == len(d3d1) == 20
+
+
+
+
+
diff --git a/astropy/coordinates/tests/test_name_resolve.py b/astropy/coordinates/tests/test_name_resolve.py
index db172a5..62a1517 100644
--- a/astropy/coordinates/tests/test_name_resolve.py
+++ b/astropy/coordinates/tests/test_name_resolve.py
@@ -3,24 +3,23 @@
 """
 This module contains tests for the name resolve convenience module.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 
-# Standard library
 import time
-import urllib,urllib2
 
-# Third party
 import numpy as np
-from ...tests.helper import pytest
 
-# Astropy
-from ..name_resolve import get_icrs_coordinates, NameResolveError, \
-                           SESAME_DATABASE, _parse_response
-from ..builtin_systems import ICRSCoordinates, FK5Coordinates, FK4Coordinates, \
-                              GalacticCoordinates
-from ...tests.helper import remote_data
+from ..name_resolve import (get_icrs_coordinates, NameResolveError,
+                            SESAME_DATABASE, _parse_response)
+from ..builtin_systems import ICRS
+from ...extern.six.moves import urllib
+from ...tests.helper import remote_data, pytest
+from ... import units as u
 
 _cached_ngc3642 = dict()
-_cached_ngc3642["simbad"] = """# ngc 3642	#Q22523669
+_cached_ngc3642["simbad"] = """# ngc 3642    #Q22523669
 #=S=Simbad (via url):    1
 %@ 503952
 %I.0 NGC 3642
@@ -35,16 +34,16 @@ _cached_ngc3642["simbad"] = """# ngc 3642	#Q22523669
 
 #====Done (2013-Feb-12,16:37:11z)===="""
 
-_cached_ngc3642["vizier"] = """# ngc 3642	#Q22523677
+_cached_ngc3642["vizier"] = """# ngc 3642    #Q22523677
 #=V=VizieR (local):    1
-%J 170.56 +59.08 = 11:22.2     +59:05     
+%J 170.56 +59.08 = 11:22.2     +59:05
 %I.0 {NGC} 3642
 
 
 
 #====Done (2013-Feb-12,16:37:42z)===="""
 
-_cached_ngc3642["all"] = """# ngc3642	#Q22523722
+_cached_ngc3642["all"] = """# ngc3642    #Q22523722
 #=S=Simbad (via url):    1
 %@ 503952
 %I.0 NGC 3642
@@ -58,7 +57,7 @@ _cached_ngc3642["all"] = """# ngc3642	#Q22523722
 
 
 #=V=VizieR (local):    1
-%J 170.56 +59.08 = 11:22.2     +59:05     
+%J 170.56 +59.08 = 11:22.2     +59:05
 %I.0 {NGC} 3642
 
 
@@ -67,11 +66,11 @@ _cached_ngc3642["all"] = """# ngc3642	#Q22523722
 #====Done (2013-Feb-12,16:39:48z)===="""
 
 _cached_castor = dict()
-_cached_castor["all"] = """# castor	#Q22524249
+_cached_castor["all"] = """# castor    #Q22524249
 #=S=Simbad (via url):    1
 %@ 983633
 %I.0 NAME CASTOR
-%C.0 ** 
+%C.0 **
 %C.N0 12.13.00.00
 %J 113.649471640 +31.888282216 = 07:34:35.87 +31:53:17.8
 %J.E [34.72 25.95 0] A 2007A&A...474..653V
@@ -89,11 +88,11 @@ _cached_castor["all"] = """# castor	#Q22524249
 
 #====Done (2013-Feb-12,16:52:02z)===="""
 
-_cached_castor["simbad"] = """# castor	#Q22524495
+_cached_castor["simbad"] = """# castor    #Q22524495
 #=S=Simbad (via url):    1
 %@ 983633
 %I.0 NAME CASTOR
-%C.0 ** 
+%C.0 **
 %C.N0 12.13.00.00
 %J 113.649471640 +31.888282216 = 07:34:35.87 +31:53:17.8
 %J.E [34.72 25.95 0] A 2007A&A...474..653V
@@ -109,47 +108,47 @@ _cached_castor["simbad"] = """# castor	#Q22524495
 def test_names():
 
     # First check that sesame is up
-    if urllib.urlopen("http://cdsweb.u-strasbg.fr/cgi-bin/nph-sesame").getcode() != 200:
-    	pytest.skip("SESAME appears to be down, skipping test_name_resolve.py:test_names()...")
+    if urllib.request.urlopen("http://cdsweb.u-strasbg.fr/cgi-bin/nph-sesame").getcode() != 200:
+        pytest.skip("SESAME appears to be down, skipping test_name_resolve.py:test_names()...")
 
     with pytest.raises(NameResolveError):
         get_icrs_coordinates("m87h34hhh")
-    
+
     try:
         icrs = get_icrs_coordinates("ngc 3642")
     except NameResolveError:
         ra,dec = _parse_response(_cached_ngc3642["all"])
-        icrs = ICRSCoordinates(ra, dec, unit=(u.degree, u.degree))
-        
-    icrs_true = ICRSCoordinates("11h 22m 18.014s", "59d 04m 27.27s")
-    np.testing.assert_almost_equal(icrs.ra.degrees, icrs_true.ra.degrees, 3)
-    np.testing.assert_almost_equal(icrs.dec.degrees, icrs_true.dec.degrees, 3)
-    
+        icrs = ICRS(ra, dec, unit=(u.degree, u.degree))
+
+    icrs_true = ICRS("11h 22m 18.014s", "59d 04m 27.27s")
+    np.testing.assert_almost_equal(icrs.ra.degree, icrs_true.ra.degree, 3)
+    np.testing.assert_almost_equal(icrs.dec.degree, icrs_true.dec.degree, 3)
+
     try:
         icrs = get_icrs_coordinates("castor")
     except NameResolveError:
         ra,dec = _parse_response(_cached_castor["all"])
-        icrs = ICRSCoordinates(ra, dec, unit=(u.degree, u.degree))
+        icrs = ICRS(ra, dec, unit=(u.degree, u.degree))
 
-    icrs_true = ICRSCoordinates("07h 34m 35.87s", "+31d 53m 17.8s")
-    np.testing.assert_almost_equal(icrs.ra.degrees, icrs_true.ra.degrees, 3)
-    np.testing.assert_almost_equal(icrs.dec.degrees, icrs_true.dec.degrees, 3)
+    icrs_true = ICRS("07h 34m 35.87s", "+31d 53m 17.8s")
+    np.testing.assert_almost_equal(icrs.ra.degree, icrs_true.ra.degree, 3)
+    np.testing.assert_almost_equal(icrs.dec.degree, icrs_true.dec.degree, 3)
 
 @remote_data
 def test_database_specify():
 
     # First check that sesame is up
-    if urllib.urlopen("http://cdsweb.u-strasbg.fr/cgi-bin/nph-sesame").getcode() != 200:
-    	pytest.skip("SESAME appears to be down, skipping test_database_specify.py:test_names()...")
+    if urllib.request.urlopen("http://cdsweb.u-strasbg.fr/cgi-bin/nph-sesame").getcode() != 200:
+        pytest.skip("SESAME appears to be down, skipping test_database_specify.py:test_names()...")
 
     name = "ngc 3642"
     for db in ["simbad", "vizier", "all"]:
         SESAME_DATABASE.set(db)
         try:
-            icrs = ICRSCoordinates.from_name(name)
+            icrs = ICRS.from_name(name)
         except NameResolveError:
             ra,dec = _cached_ngc3642[db]
-            icrs = ICRSCoordinates(ra, dec, unit=(u.degree, u.degree))
+            icrs = ICRS(ra, dec, unit=(u.degree, u.degree))
 
         time.sleep(1)
 
@@ -158,9 +157,9 @@ def test_database_specify():
     for db in ["simbad",  "all"]:
         SESAME_DATABASE.set(db)
         try:
-            icrs = ICRSCoordinates.from_name(name)
+            icrs = ICRS.from_name(name)
         except NameResolveError:
             ra,dec = _cached_castor[db]
-            icrs = ICRSCoordinates(ra, dec, unit=(u.degree, u.degree))
+            icrs = ICRS(ra, dec, unit=(u.degree, u.degree))
 
         time.sleep(1)
diff --git a/astropy/coordinates/tests/test_sphere_ang_dists.py b/astropy/coordinates/tests/test_sphere_ang_dists.py
deleted file mode 100644
index b50a89d..0000000
--- a/astropy/coordinates/tests/test_sphere_ang_dists.py
+++ /dev/null
@@ -1,89 +0,0 @@
-# -*- coding: utf-8 -*-
-# Licensed under a 3-clause BSD style license - see LICENSE.rst
-from __future__ import print_function
-
-from ...tests.helper import pytest
-
-from .. import angle_utilities
-
-distance_funcs = [angle_utilities.small_angle_sphere_dist,
-                  angle_utilities.simple_sphere_dist,
-                  angle_utilities.haversine_sphere_dist,
-                  angle_utilities.haversine_atan_sphere_dist,
-                  angle_utilities.vincenty_sphere_dist,
-                 ]
-
-# lat1, lon1, lat2, lon2 in degrees
-coords = [(0, 0, 1, 0),
-          (0, 0, 0, 10),
-          (0, 0, 0, 90),
-          (0, 0, 0, 180),
-          (45, 0, -45, 0),
-          (60, 0, -30, 0),
-          (-15, -135, 15, 45),
-          (-89, 100, 89, -80),
-          (0, 0, 0, 0),
-          (0, 0, 1. / 60., 1. / 60.)
-         ]
-correct_seps = [1, 10, 90, 180, 90, 90, 180, 180, 0, 0.023570225877234643]
-correctness_margin = 2e-10
-
-# set this to a numer to run the timing tests and trigger a failure so stdout is
-# read back in pytest - the number gives the number of iterations
-dotiming = False
-
-paramsets = []
-for coord, coorsep in zip(coords, correct_seps):
-    for df in distance_funcs:
-        paramsets.append((coord, coorsep, df))
-
-
- at pytest.mark.parametrize(('coord', 'correctsep', 'dfunc'), paramsets)
-def test_2dseparations(coord, correctsep, dfunc):
-    """
-    A variety of tests to examine how close the various sphereical
-    distance/great circle measurements are from the expectations
-    """
-    from time import time
-    from math import fabs, radians, degrees
-
-    lat1, lon1, lat2, lon2 = coord
-
-    print('distance function', dfunc)
-    print('({0},{1}) - ({2},{3})'.format(lon1, lat1, lon2, lat2))
-    print('Correct separation', correctsep)
-
-    inputs = (radians(lon1), radians(lat1), radians(lon2), radians(lat2))
-    sep = degrees(dfunc(*inputs))
-    print('Reported:', sep)
-    print('Deviation from correct:', sep - correctsep)
-
-    if dotiming:
-        starttime = time()
-        for i in range(int(dotiming)):
-            dfunc(*inputs)
-        endtime = time()
-        dt = endtime - starttime
-        print('{0} in {1} sec'.format(int(dotiming), dt))
-        print('{0} sec per execution'.format(dt / float(int(dotiming))))
-        assert False  # Triggers py.test failures so we can see the timings
-
-    #a few cases are known to fail because of bad approximations - let them fail
-    if dfunc is angle_utilities.small_angle_sphere_dist:
-        if fabs(lat2 - lat1) > 1 and fabs(lon2 - lon1) > 1:  # radians
-            pytest.xfail('Small angle approximation fails for large angles')
-
-    assert fabs(sep - correctsep) < correctness_margin
-
-
-def test_fk5_seps():
-    """
-    This tests if `separation` works for FK5Coordinate objects.
-
-    This is a regression test for github issue #891
-    """
-    from astropy.coordinates import FK5Coordinates
-
-    a = FK5Coordinates(1., 1., unit=('deg', 'deg'))
-    b = FK5Coordinates(2., 2., unit=('deg', 'deg'))
-    a.separation(b)
diff --git a/astropy/coordinates/tests/test_transformations.py b/astropy/coordinates/tests/test_transformations.py
index f6a7945..044f01a 100644
--- a/astropy/coordinates/tests/test_transformations.py
+++ b/astropy/coordinates/tests/test_transformations.py
@@ -1,6 +1,10 @@
 # -*- coding: utf-8 -*-
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from __future__ import print_function, division
+
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from math import fabs
 
 import numpy as np
 from numpy import testing as npt
@@ -8,18 +12,18 @@ from numpy import testing as npt
 from ... import units as u
 from ..distances import Distance
 from .. import transformations as t
-from ..builtin_systems import ICRSCoordinates, FK5Coordinates, FK4Coordinates, FK4NoETermCoordinates
-from ..builtin_systems import GalacticCoordinates
+from ..builtin_systems import ICRS, FK5, FK4, FK4NoETerms
+from ..builtin_systems import Galactic
 from ...tests.helper import pytest
 
 
 
-#Coordinates just for these tests. TODO: expunge
-class TestCoo1(ICRSCoordinates):
+#Coordinates just for these tests.
+class TestCoo1(ICRS):
     pass
 
 
-class TestCoo2(ICRSCoordinates):
+class TestCoo2(ICRS):
     pass
 
 
@@ -28,17 +32,17 @@ def test_transform_classes():
     Tests the class-based/OO syntax for creating transforms
     """
     t.FunctionTransform(TestCoo1, TestCoo2,
-        lambda c: TestCoo2(c.ra.radians, c.dec.radians, unit=(u.radian, u.radian)))
+        lambda c: TestCoo2(c.ra.radian, c.dec.radian, unit=(u.radian, u.radian)))
 
-    c1 = TestCoo1(1, 2, unit=(u.radian, u.radian))
+    c1 = TestCoo1(1, 0.5, unit=(u.radian, u.radian))
     c1._make_cart()
     c2 = c1.transform_to(TestCoo2)
-    npt.assert_almost_equal(c2.ra.radians, 1)
-    npt.assert_almost_equal(c2.dec.radians, 2)
+    npt.assert_allclose(c2.ra.radian, 1)
+    npt.assert_allclose(c2.dec.radian, 0.5)
 
     def matfunc(coo):
         return [[1, 0, 0],
-                [0, coo.ra.degrees, 0],
+                [0, coo.ra.degree, 0],
                 [0, 0, 1]]
     t.DynamicMatrixTransform(TestCoo1, TestCoo2, matfunc)
 
@@ -46,8 +50,8 @@ def test_transform_classes():
     c3._make_cart()
     c4 = c3.transform_to(TestCoo2)
 
-    npt.assert_almost_equal(c4.ra.degrees, 1)
-    npt.assert_almost_equal(c4.ra.degrees, 1)
+    npt.assert_allclose(c4.ra.degree, 1)
+    npt.assert_allclose(c4.ra.degree, 1)
 
 
 def test_transform_decos():
@@ -58,12 +62,12 @@ def test_transform_decos():
 
     @t.transform_function(TestCoo1, TestCoo2)
     def trans(coo1):
-        return TestCoo2(coo1.ra.radians, coo1.dec.radians * 2, unit=(u.radian, u.radian))
+        return TestCoo2(coo1.ra.radian, coo1.dec.radian * 2, unit=(u.radian, u.radian))
 
     c1._make_cart()
     c2 = c1.transform_to(TestCoo2)
-    npt.assert_almost_equal(c2.ra.degrees, 1)
-    npt.assert_almost_equal(c2.dec.degrees, 4)
+    npt.assert_allclose(c2.ra.degree, 1)
+    npt.assert_allclose(c2.dec.degree, 4)
 
     c3 = TestCoo1(x=1, y=1, z=2, unit=u.pc)
 
@@ -76,9 +80,10 @@ def test_transform_decos():
     c3._make_cart()
     c4 = c3.transform_to(TestCoo2)
 
-    npt.assert_almost_equal(c4.x, 2)
-    npt.assert_almost_equal(c4.y, 1)
-    npt.assert_almost_equal(c4.z, 2)
+    npt.assert_allclose(c4.x.value, 2)
+    npt.assert_allclose(c4.y.value, 1)
+    npt.assert_allclose(c4.z.value, 2)
+
 
 def test_coo_alias():
     """
@@ -89,8 +94,8 @@ def test_coo_alias():
     t.FunctionTransform(TestCoo1, TestCoo2, lambda c: TestCoo2(c.ra, c.dec))
 
     c1 = TestCoo1(1, 2, unit=(u.degree, u.degree))
-    assert c1.coo2.ra.degrees == c1.ra.degrees
-    assert c1.coo2.dec.degrees == c1.dec.degrees
+    assert c1.coo2.ra.degree == c1.ra.degree
+    assert c1.coo2.dec.degree == c1.dec.degree
 
 def test_shortest_path():
     class FakeTransform(object):
@@ -140,30 +145,30 @@ def test_sphere_cart():
     """
     Tests the spherical <-> cartesian transform functions
     """
-    from ...tests.compat import assert_allclose
+    from numpy.testing.utils import assert_allclose
     from ...utils import NumpyRNGContext
     from ..distances import spherical_to_cartesian, cartesian_to_spherical
 
 
     x, y, z = spherical_to_cartesian(1, 0, 0)
-    npt.assert_almost_equal(x, 1)
-    npt.assert_almost_equal(y, 0)
-    npt.assert_almost_equal(z, 0)
+    npt.assert_allclose(x, 1)
+    npt.assert_allclose(y, 0)
+    npt.assert_allclose(z, 0)
 
     x, y, z = spherical_to_cartesian(0, 1, 1)
-    npt.assert_almost_equal(x, 0)
-    npt.assert_almost_equal(y, 0)
-    npt.assert_almost_equal(z, 0)
+    npt.assert_allclose(x, 0)
+    npt.assert_allclose(y, 0)
+    npt.assert_allclose(z, 0)
 
     x, y, z = spherical_to_cartesian(5, 0, np.arcsin(4. / 5.))
-    npt.assert_almost_equal(x, 3)
-    npt.assert_almost_equal(y, 4)
-    npt.assert_almost_equal(z, 0)
+    npt.assert_allclose(x, 3)
+    npt.assert_allclose(y, 4)
+    npt.assert_allclose(z, 0)
 
     r, lat, lon = cartesian_to_spherical(0, 1, 0)
-    npt.assert_almost_equal(r, 1)
-    npt.assert_almost_equal(lat, 0)
-    npt.assert_almost_equal(lon, np.pi / 2)
+    npt.assert_allclose(r, 1)
+    npt.assert_allclose(lat, 0)
+    npt.assert_allclose(lon, np.pi / 2)
 
     #test round-tripping
     with NumpyRNGContext(13579):
@@ -177,7 +182,7 @@ def test_sphere_cart():
     assert_allclose(z, z2)
 
 
-m31_sys = [(ICRSCoordinates, 'icrs'), (FK5Coordinates, 'fk5'), (FK4Coordinates, 'fk4'), (GalacticCoordinates, 'galactic')]
+m31_sys = [(ICRS, 'icrs'), (FK5, 'fk5'), (FK4, 'fk4'), (Galactic, 'galactic')]
 m31_coo = [(10.6847929, 41.2690650), (10.6847929, 41.2690650), (10.0004738, 40.9952444), (121.1744050, -21.5729360)]
 m31_dist = Distance(770, u.kpc)
 convert_precision = 1 / 3600.  # 1 arcsec
@@ -196,33 +201,32 @@ def test_m31_coord_transforms(fromsys, tosys, fromcoo, tocoo):
     This tests a variety of coordinate conversions for the Chandra point-source
     catalog location of M31 from NED.
     """
-    from math import fabs
 
     from ...time import Time
 
     coo1 = fromsys[0](fromcoo[0], fromcoo[1], unit=(u.degree, u.degree), distance=m31_dist)
     coo2 = coo1.transform_to(tosys[0])
-    if tosys[0] is FK4Coordinates:
+    if tosys[0] is FK4:
         coo2_prec = coo2.precess_to(Time('B1950', scale='utc'))
-        assert fabs(coo2_prec.lonangle.degrees - tocoo[0]) < convert_precision  # <1 arcsec
-        assert fabs(coo2_prec.latangle.degrees - tocoo[1]) < convert_precision
+        assert fabs(coo2_prec.lonangle.degree - tocoo[0]) < convert_precision  # <1 arcsec
+        assert fabs(coo2_prec.latangle.degree - tocoo[1]) < convert_precision
     else:
-        assert fabs(coo2.lonangle.degrees - tocoo[0]) < convert_precision  # <1 arcsec
-        assert fabs(coo2.latangle.degrees - tocoo[1]) < convert_precision
+        assert fabs(coo2.lonangle.degree - tocoo[0]) < convert_precision  # <1 arcsec
+        assert fabs(coo2.latangle.degree - tocoo[1]) < convert_precision
     assert fabs(coo2.distance.kpc - m31_dist.kpc) < dist_precision
 
     if fromsys[1] is not None:
         coo1_2 = getattr(coo2, fromsys[1])  # implicit `transform_to` call.
 
         #check round-tripping
-        assert fabs(coo1_2.lonangle.degrees - fromcoo[0]) < roundtrip_precision
-        assert fabs(coo1_2.latangle.degrees - fromcoo[1]) < roundtrip_precision
+        assert fabs(coo1_2.lonangle.degree - fromcoo[0]) < roundtrip_precision
+        assert fabs(coo1_2.latangle.degree - fromcoo[1]) < roundtrip_precision
         assert fabs(coo1_2.distance.kpc - m31_dist.kpc) < dist_precision
 
         if tosys[1] is not None:
             coo2_2 = getattr(coo1_2, tosys[1])
-            assert fabs(coo2_2.lonangle.degrees - coo2.lonangle.degrees) < roundtrip_precision
-            assert fabs(coo2_2.latangle.degrees - coo2.latangle.degrees) < roundtrip_precision
+            assert fabs(coo2_2.lonangle.degree - coo2.lonangle.degree) < roundtrip_precision
+            assert fabs(coo2_2.latangle.degree - coo2.latangle.degree) < roundtrip_precision
             assert fabs(coo2_2.distance.kpc - m31_dist.kpc) < dist_precision
 
 
@@ -237,12 +241,12 @@ def test_precession():
     j1975 = Time('J1975', scale='utc')
     b1975 = Time('B1975', scale='utc')
 
-    fk4 = FK4Coordinates(1, 2, unit=(u.radian, u.radian))
+    fk4 = FK4(1, 0.5, unit=(u.radian, u.radian))
     assert fk4.equinox.byear == b1950.byear
     fk4_2 = fk4.precess_to(b1975)
     assert fk4_2.equinox.byear == b1975.byear
 
-    fk5 = FK5Coordinates(1, 2, unit=(u.radian, u.radian))
+    fk5 = FK5(1, 0.5, unit=(u.radian, u.radian))
     assert fk5.equinox.jyear == j2000.jyear
     fk5_2 = fk5.precess_to(j1975)
     assert fk5_2.equinox.jyear == j1975.jyear
@@ -254,9 +258,9 @@ def test_alias_transform():
     a system to itself.  Also checks that `dir` correctly includes
     valid transforms
     """
-    c = ICRSCoordinates(12.34, 56.78, unit=(u.hour, u.degree))
-    assert isinstance(c.galactic, GalacticCoordinates)
-    assert isinstance(c.icrs, ICRSCoordinates)
+    c = ICRS(12.34, 56.78, unit=(u.hour, u.degree))
+    assert isinstance(c.galactic, Galactic)
+    assert isinstance(c.icrs, ICRS)
 
     d = dir(c)
     assert 'galactic' in d
@@ -271,13 +275,13 @@ def test_transform_path_pri():
     and not FK4.
     """
     t.master_transform_graph.invalidate_cache()
-    tpath, td = t.master_transform_graph.find_shortest_path(ICRSCoordinates, GalacticCoordinates)
-    assert tpath == [ICRSCoordinates, FK5Coordinates, GalacticCoordinates]
+    tpath, td = t.master_transform_graph.find_shortest_path(ICRS, Galactic)
+    assert tpath == [ICRS, FK5, Galactic]
     assert td == 2
 
     #but direct from FK4 to Galactic should still be possible
-    tpath, td = t.master_transform_graph.find_shortest_path(FK4Coordinates, GalacticCoordinates)
-    assert tpath == [FK4Coordinates, FK4NoETermCoordinates, GalacticCoordinates]
+    tpath, td = t.master_transform_graph.find_shortest_path(FK4, Galactic)
+    assert tpath == [FK4, FK4NoETerms, Galactic]
     assert td == 2
 
 
@@ -291,16 +295,16 @@ def test_obstime():
     b1950 = Time('B1950', scale='utc')
     j1975 = Time('J1975', scale='utc')
 
-    fk4_50 = FK4Coordinates(1, 2, unit=(u.degree, u.degree), obstime=b1950)
-    fk4_75 = FK4Coordinates(1, 2, unit=(u.degree, u.degree), obstime=j1975)
+    fk4_50 = FK4(1, 2, unit=(u.degree, u.degree), obstime=b1950)
+    fk4_75 = FK4(1, 2, unit=(u.degree, u.degree), obstime=j1975)
 
-    icrs_50 = fk4_50.transform_to(ICRSCoordinates)
-    icrs_75 = fk4_75.transform_to(ICRSCoordinates)
+    icrs_50 = fk4_50.transform_to(ICRS)
+    icrs_75 = fk4_75.transform_to(ICRS)
 
     assert icrs_50.obstime == fk4_50.obstime
     assert icrs_75.obstime == fk4_75.obstime
 
     # now check that the resulting coordinates are *different* - they should be,
     # because the obstime is different
-    assert (icrs_50.ra.degrees != icrs_75.ra.degrees and
-            icrs_50.dec.degrees != icrs_75.dec.degrees)
+    assert (icrs_50.ra.degree != icrs_75.ra.degree and
+            icrs_50.dec.degree != icrs_75.dec.degree)
diff --git a/astropy/coordinates/transformations.py b/astropy/coordinates/transformations.py
index 45fb35a..6d1d928 100644
--- a/astropy/coordinates/transformations.py
+++ b/astropy/coordinates/transformations.py
@@ -7,10 +7,22 @@ implementation is actually in individual coordinates in the
 `builtin_systems` module, while this module provides the framework and
 related utilities.
 """
+
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from ..extern import six
+
+import heapq
+import inspect
+import subprocess
+
 from abc import ABCMeta, abstractmethod
+from collections import defaultdict
 
 import numpy as np
 
+
 __all__ = ['StaticMatrixTransform', 'FunctionTransform',
            'DynamicMatrixTransform', 'CompositeStaticMatrixTransform',
            'static_transform_matrix', 'transform_function',
@@ -24,8 +36,6 @@ class TransformGraph(object):
     """
 
     def __init__(self):
-        from collections import defaultdict
-
         self._graph = defaultdict(dict)
         self._clsaliases = {}
 
@@ -51,13 +61,12 @@ class TransformGraph(object):
             If `fromsys` or `tosys` are not classes or `transform` is
             not callable.
         """
-        from inspect import isclass
 
-        if not isclass(fromsys):
+        if not inspect.isclass(fromsys):
             raise TypeError('fromsys must be a class')
-        if not isclass(tosys):
+        if not inspect.isclass(tosys):
             raise TypeError('tosys must be a class')
-        if not callable(transform):
+        if not six.callable(transform):
             raise TypeError('transform must be callable')
 
         self._graph[fromsys][tosys] = transform
@@ -134,7 +143,6 @@ class TransformGraph(object):
             priorities are not set this is the number of trasnforms
             needed. Is `inf` if there is no possible path.
         """
-        import heapq
 
         inf = float('inf')
 
@@ -202,6 +210,9 @@ class TransformGraph(object):
             else:
                 result[n] = (path, d)
                 path.append(n)
+                if n not in edgeweights:
+                    # this is a system that can be transformed to, but not from.
+                    continue
                 for n2 in edgeweights[n]:
                     if n2 not in result:  # already visited
                         # find where n2 is in the heap
@@ -288,9 +299,9 @@ class TransformGraph(object):
         ValueError
             If `coordcls` already has a name assigned.
         """
-        if coordcls in self._clsaliases.values():
-            idx = self._clsaliases.values().index(coordcls)
-            oldnm = self._clsaliases.keys()[idx]
+        if coordcls in list(six.itervalues(self._clsaliases)):
+            idx = list(six.itervalues(self._clsaliases)).index(coordcls)
+            oldnm = list(six.iterkeys(self._clsaliases))[idx]
             msg = 'Coordinate class {0} already has a name: {1}'
             raise ValueError(msg.format(coordcls, oldnm))
         self._clsaliases[name] = coordcls
@@ -322,7 +333,7 @@ class TransformGraph(object):
         nms : list
             The aliases for coordinate systems.
         """
-        return self._clsaliases.keys()
+        return list(six.iterkeys(self._clsaliases))
 
     def to_dot_graph(self, priorities=True, addnodes=[], savefn=None,
                      savelayout='plain', saveformat=None):
@@ -358,7 +369,6 @@ class TransformGraph(object):
 
         .. _graphviz: http://www.graphviz.org/
         """
-        from subprocess import Popen, PIPE
 
         nodes = []
         # find the node names
@@ -372,7 +382,7 @@ class TransformGraph(object):
             if node not in nodes:
                 nodes.append(node)
         nodenames = []
-        invclsaliases = dict([(v, k) for k, v in self._clsaliases.iteritems()])
+        invclsaliases = dict([(v, k) for k, v in six.iteritems(self._clsaliases)])
         for n in nodes:
             if n in invclsaliases:
                 nodenames.append('{0} [shape=oval label="{0}\\n`{1}`"]'.format(n.__name__, invclsaliases[n]))
@@ -406,7 +416,9 @@ class TransformGraph(object):
                 args = [savelayout]
                 if saveformat is not None:
                     args.append('-T' + saveformat)
-                proc = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE)
+                proc = subprocess.Popen(args, stdin=subprocess.PIPE,
+                                        stdout=subprocess.PIPE,
+                                        stderr=subprocess.PIPE)
                 stdout, stderr = proc.communicate(dotgraph)
                 if proc.returncode != 0:
                     raise IOError('problem running graphviz: \n' + stderr)
@@ -455,6 +467,7 @@ class TransformGraph(object):
 master_transform_graph = TransformGraph()
 
 
+ at six.add_metaclass(ABCMeta)
 class CoordinateTransform(object):
     """
     An object that transforms a coordinate from one system to another.
@@ -463,11 +476,7 @@ class CoordinateTransform(object):
     `__init__`.
     """
 
-    __metaclass__ = ABCMeta
-
     def __init__(self, fromsys, tosys, register=True):
-        from inspect import isclass
-
         self.fromsys = fromsys
         self.tosys = tosys
 
@@ -475,7 +484,7 @@ class CoordinateTransform(object):
             # this will do the type-checking
             self.register()
         else:
-            if not isclass(fromsys) or not isclass(tosys):
+            if not inspect.isclass(fromsys) or not inspect.isclass(tosys):
                 raise TypeError('fromsys and tosys must be classes')
 
     def register(self):
@@ -543,7 +552,7 @@ class FunctionTransform(CoordinateTransform):
                  register=True):
         from inspect import getargspec
 
-        if not callable(func):
+        if not six.callable(func):
             raise TypeError('func must be callable')
 
         try:
@@ -584,7 +593,7 @@ class StaticMatrixTransform(CoordinateTransform):
         The coordinate system *class* to start from.
     tosys : class
         The coordinate system *class* to transform into.
-    matrix: array-like
+    matrix : array-like
         A 3 x 3 matrix for transforming 3-vectors. In most cases will
         be unitary (although this is not strictly required).
     priority : number
@@ -604,12 +613,17 @@ class StaticMatrixTransform(CoordinateTransform):
         self.priority = priority
         super(StaticMatrixTransform, self).__init__(fromsys, tosys)
 
-    # TODO: array: this needs some extra bits to do the broadcasting right
     def __call__(self, fromcoord):
-        v = [fromcoord.x, fromcoord.y, fromcoord.z]
-        x, y, z = np.dot(np.asarray(self.matrix), v)
-        unit = None if fromcoord.distance is None else fromcoord.distance._unit
-        result = self.tosys(x=x, y=y, z=z, unit=unit)
+        c = fromcoord.cartesian
+        v = c.reshape((3, c.size // 3))
+        v2 = np.dot(np.asarray(self.matrix), v)
+        subshape = c.shape[1:]
+        x = v2[0].reshape(subshape)
+        y = v2[1].reshape(subshape)
+        z = v2[2].reshape(subshape)
+
+        newunit = None if fromcoord.distance is None else fromcoord.distance.unit
+        result = self.tosys(x=x, y=y, z=z, unit=newunit)
 
         # copy over the observation time
         if hasattr(fromcoord, '_obstime') and hasattr(result, '_obstime'):
@@ -629,7 +643,7 @@ class CompositeStaticMatrixTransform(StaticMatrixTransform):
         The coordinate system *class* to start from.
     tosys : class
         The coordinate system *class* to transform into.
-    matrices: sequence of array-like
+    matrices : sequence of array-like
         A sequence of 3 x 3 cartesian transformation matricies.
     priority : number
         The priority if this transform when finding the shortest
@@ -662,7 +676,7 @@ class DynamicMatrixTransform(CoordinateTransform):
         The coordinate system *class* to start from.
     tosys : class
         The coordinate system *class* to transform into.
-    matrix_func: callable
+    matrix_func : callable
         A callable that accepts a coordinate object and yields the 3 x 3
         matrix that converts it to the new coordinate system.
     priority : number
@@ -676,18 +690,23 @@ class DynamicMatrixTransform(CoordinateTransform):
 
     """
     def __init__(self, fromsys, tosys, matrix_func, priority=1, register=True):
-        if not callable(matrix_func):
+        if not six.callable(matrix_func):
             raise TypeError('matrix_func is not callable')
         self.matrix_func = matrix_func
         self.priority = priority
         super(DynamicMatrixTransform, self).__init__(fromsys, tosys, register)
 
-    # TODO: array: this needs some extra bits to do the broadcasting right
     def __call__(self, fromcoord):
-        v = [fromcoord.x, fromcoord.y, fromcoord.z]
-        x, y, z = np.dot(np.asarray(self.matrix_func(fromcoord)), v)
-        unit = None if fromcoord.distance is None else fromcoord.distance._unit
-        result = self.tosys(x=x, y=y, z=z, unit=unit)
+        c = fromcoord.cartesian
+        v = c.reshape((3, c.size // 3))
+        v2 = np.dot(np.asarray(self.matrix_func(fromcoord)), v)
+        subshape = c.shape[1:]
+        x = v2[0].reshape(subshape)
+        y = v2[1].reshape(subshape)
+        z = v2[2].reshape(subshape)
+
+        newunit = None if fromcoord.distance is None else fromcoord.distance.unit
+        result = self.tosys(x=x, y=y, z=z, unit=newunit)
 
         # copy over the observation time
         if hasattr(fromcoord, '_obstime') and hasattr(result, '_obstime'):
@@ -707,7 +726,7 @@ class CompositeTransform(CoordinateTransform):
         The coordinate system *class* to start from.
     tosys : class
         The coordinate system *class* to transform into.
-    transforms: sequence of `CoordinateTransform`s
+    transforms : sequence of `CoordinateTransform`s
         A sequence of transformations to apply in sequence.
     priority : number
         The priority if this transform when finding the shortest
diff --git a/astropy/cosmology/core.py b/astropy/cosmology/core.py
index 22f88a9..afb48ee 100644
--- a/astropy/cosmology/core.py
+++ b/astropy/cosmology/core.py
@@ -1,7 +1,7 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 import sys
 import warnings
-from math import sqrt, pi, exp, log
+from math import sqrt, pi, exp, log, floor
 from abc import ABCMeta, abstractmethod
 
 import numpy as np
@@ -9,6 +9,7 @@ import numpy as np
 from .. import constants as const
 from ..config import ConfigurationItem
 from ..utils.misc import isiterable
+from ..utils.exceptions import AstropyUserWarning
 from .. import units as u
 
 from . import parameters
@@ -21,43 +22,42 @@ from . import parameters
 # and Linder 2003, PRL 90, 91301
 
 __all__ = ["FLRW", "LambdaCDM", "FlatLambdaCDM", "wCDM", "FlatwCDM",
-           "Flatw0waCDM", "w0waCDM", "wpwaCDM", "w0wzCDM","get_current",
+           "Flatw0waCDM", "w0waCDM", "wpwaCDM", "w0wzCDM", "get_current",
            "set_current", "WMAP5", "WMAP7", "WMAP9", "Planck13"]
 
-# Constants
+__doctest_requires__ = {'*': ['scipy.integrate']}
 
-# speed of light in km/s
-c_kms = const.c.to('km/s').value
+# Constants
 
 # Mpc in km
-Mpc_km = u.Mpc.to(u.km)
-
-# Gyr in seconds; note these are Julian years, which are defined
-# to be exactly 365.25 days of 86400 seconds each. If we used the units
-# framework, the days would be 365.242... days.
-Gyr = 1e9 * 365.25 * 24 * 60 * 60
+Mpc_km = (1 * u.Mpc).to(u.km)
 
 arcsec_in_radians = 1 / 3600. * pi / 180
 arcmin_in_radians = 1 / 60. * pi / 180
 
 
-#Radiation parameter over c^2
-a_B_c2 = 4 * const.sigma_sb.cgs.value / const.c.cgs.value**3
+# Radiation parameter over c^2 in cgs
+a_B_c2 = 4 * const.sigma_sb.cgs.value / const.c.cgs.value ** 3
+
+# Boltzmann constant in eV / K
+kB_evK = const.k_B.decompose().to(u.eV / u.K)
 
 DEFAULT_COSMOLOGY = ConfigurationItem(
     'default_cosmology', 'no_default',
     'The default cosmology to use. Note this is only read on import, '
-    'changing this value at runtime has no effect.')
+    'so changing this value at runtime has no effect.')
 
 
 class CosmologyError(Exception):
     pass
 
+
 class Cosmology(object):
     """ Placeholder for when a more general Cosmology class is
     implemented. """
     pass
 
+
 class FLRW(Cosmology):
     """ A class describing an isotropic and homogeneous
     (Friedmann-Lemaitre-Robertson-Walker) cosmology.
@@ -66,92 +66,201 @@ class FLRW(Cosmology):
     examples of this class, but must work with one of its
     subclasses such as `LambdaCDM` or `wCDM`.
 
-    Notes
-    -----
-    Class instances are static -- you can't change the values
-    of the parameters.  That is, all of the attributes above are
-    read only.
+    Parameters
+    ----------
 
-    The neutrino treatment assumes all neutrino species are massless.
-    """
-    __metaclass__ = ABCMeta
+    H0 : float or scalar astropy.units.Quantity
+        Hubble constant at z = 0.  If a float, must be in [km/sec/Mpc]
 
-    def __init__(self, H0, Om0, Ode0, Tcmb0=2.725, Neff=3.04, name='FLRW'):
-        """ Initializer.
+    Om0 : float
+        Omega matter: density of non-relativistic matter in units of the
+        critical density at z=0.
 
-        Parameters
-        ----------
-        H0 : float
-          Hubble constant in [km/sec/Mpc] at z=0
+    Ode0 : float
+        Omega dark energy: density of dark energy in units of the critical
+        density at z=0.
 
-        Om0 : float
-          Omega matter: density of non-relativistic matter in units
-          of the critical density at z=0.
+    Tcmb0 : float or scalar astropy.units.Quantity
+        Temperature of the CMB z=0. If a float, must be in [K]. Default: 2.725.
+        Setting this to zero will turn off both photons and neutrinos (even
+        massive ones)
 
-        Ode0 : float
-          Omega dark energy: density of dark energy in units
-          of the critical density at z=0.
+    Neff : float
+        Effective number of Neutrino species. Default 3.04.
 
-        Tcmb0 : float
-          Temperature of the CMB in Kelvin at z=0 (def: 2.725)
+    m_nu : astropy.units.Quantity
+        Mass of each neutrino species. If this is a scalar Quantity, then all
+        neutrino species are assumed to have that mass. Otherwise, the mass of
+        each species. The actual number of neutrino species (and hence the
+        number of elements of m_nu if it is not scalar) must be the floor of
+        Neff. Usually this means you must provide three neutrino masses unless
+        you are considering something like a sterile neutrino.
 
-        Neff : float
-          Effective number of Neutrino species (def: 3.04)
+    name : str
+        Optional name for this cosmological object.
 
-        name : string
-          Optional name for this cosmological object.
-        """
+    Notes
+    -----
+    Class instances are static -- you can't change the values
+    of the parameters.  That is, all of the attributes above are
+    read only.
+    """
+    __metaclass__ = ABCMeta
+
+    def __init__(self, H0, Om0, Ode0, Tcmb0=2.725, Neff=3.04,
+                 m_nu=u.Quantity(0.0, u.eV), name=None):
 
         # all densities are in units of the critical density
         self._Om0 = float(Om0)
+        if self._Om0 < 0.0:
+            raise ValueError("Matter density can not be negative")
         self._Ode0 = float(Ode0)
-        self._Tcmb0 = float(Tcmb0)
         self._Neff = float(Neff)
+        if self._Neff < 0.0:
+            raise ValueError("Effective number of neutrinos can "
+                             "not be negative")
         self.name = name
 
+        # Tcmb may have units
+        if isinstance(Tcmb0, u.Quantity):
+            if not Tcmb0.isscalar:
+                raise ValueError("Tcmb0 is a non-scalar quantity")
+            self._Tcmb0 = Tcmb0.to(u.K)
+        else:
+            self._Tcmb0 = float(Tcmb0) * u.K
+
         # Hubble parameter at z=0, km/s/Mpc
-        self._H0 = float(H0)
-        # H0 in s^-1
-        H0_s = self._H0 / Mpc_km
+        if isinstance(H0, u.Quantity):
+            if not H0.isscalar:
+                raise ValueError("H0 is a non-scalar quantity")
+            self._H0 = H0.to(u.km / u.s / u.Mpc)
+        else:
+            self._H0 = float(H0) * u.km / u.s / u.Mpc
+
         # 100 km/s/Mpc * h = H0 (so h is dimensionless)
-        self._h = self._H0 / 100.
-        # Hubble time in Gyr
-        self._hubble_time = 1. / H0_s / Gyr
-        # Hubble distance in Mpc
-        self._hubble_distance = c_kms / self._H0
+        self._h = self._H0.value / 100.
+        # Hubble distance
+        self._hubble_distance = (const.c / self._H0).to(u.Mpc)
+        # H0 in s^-1
+        H0_s = self._H0.to(1.0 / u.s)
+        # Hubble time
+        self._hubble_time = (1. / H0_s).to(u.Gyr)
 
         # critical density at z=0 (grams per cubic cm)
-        self._critical_density0 = 3. * H0_s**2 / (8. * pi * const.G.cgs.value)
+        self._critical_density0 = (3. * H0_s ** 2 /
+                                   (8. * pi * const.G.cgs)).cgs
+
+        # Load up neutrino masses.
+        self._nneutrinos = floor(self._Neff)
+        # We are going to share Neff between the neutrinos equally.
+        # In detail this is not correct, but it is a standard assumption
+        # because propertly calculating it is a) complicated b) depends
+        # on the details of the massive nuetrinos (e.g., their weak
+        # interactions, which could be unusual if one is considering sterile
+        # neutrinos)
+        self._massivenu = False
+        if self._nneutrinos > 0 and self._Tcmb0.value > 0:
+            self._neff_per_nu = self._Neff / self._nneutrinos
+
+            if not isinstance(m_nu, u.Quantity):
+                raise ValueError("m_nu must be a Quantity")
+
+            m_nu = m_nu.to(u.eV, equivalencies=u.mass_energy())
+
+            # Now, figure out if we have massive neutrinos to deal with,
+            # and, if so, get the right number of masses
+            # It is worth the effort to keep track of massless ones seperately
+            # (since they are quite easy to deal with, and a common use case
+            # is to set only one neutrino to have mass)
+            if m_nu.isscalar:
+                # Assume all neutrinos have the same mass
+                if m_nu.value == 0:
+                    self._nmasslessnu = self._nneutrinos
+                    self._nmassivenu = 0
+                else:
+                    self._massivenu = True
+                    self._nmasslessnu = 0
+                    self._nmassivenu = self._nneutrinos
+                    self._massivenu_mass = (m_nu.value *
+                                            np.ones(self._nneutrinos))
+            else:
+                # Make sure we have the right number of masses
+                # -unless- they are massless, in which case we cheat a little
+                if m_nu.value.min() < 0:
+                    raise ValueError("Invalid (negative) neutrino mass"
+                                     " encountered")
+                if m_nu.value.max() == 0:
+                    self._nmasslessnu = self._nneutrinos
+                    self._nmassivenu = 0
+                else:
+                    self._massivenu = True
+                    if len(m_nu) != self._nneutrinos:
+                        raise ValueError("Unexpected number of neutrino masses")
+                    # Segregate out the massless ones
+                    try:
+                        # Numpy < 1.6 doesn't have count_nonzero
+                        self._nmasslessnu = np.count_nonzero(m_nu.value == 0)
+                    except AttributeError:
+                        self._nmasslessnu = len(np.nonzero(m_nu.value == 0)[0])
+                    self._nmassivenu = self._nneutrinos - self._nmasslessnu
+                    w = np.nonzero(m_nu.value > 0)[0]
+                    self._massivenu_mass = m_nu[w]
 
         # Compute photon density, Tcmb, neutrino parameters
         # Tcmb0=0 removes both photons and neutrinos, is handled
         # as a special case for efficiency
-        if self._Tcmb0 > 0:
+        if self._Tcmb0.value > 0:
             # Compute photon density from Tcmb
-            self._Ogamma0 = a_B_c2 * self._Tcmb0**4 / self._critical_density0
+            self._Ogamma0 = a_B_c2 * self._Tcmb0.value ** 4 /\
+                self._critical_density0.value
+
+            # Compute Neutrino temperature
+            # The constant in front is (4/11)^1/3 -- see any
+            #  cosmology book for an explanation -- for example,
+            #  Weinberg 'Cosmology' p 154 eq (3.1.21)
+            self._Tnu0 = 0.7137658555036082 * self._Tcmb0
+
+            # Compute Neutrino Omega and total relativistic component
+            # for massive neutrinos
+            if self._massivenu:
+                nu_y = self._massivenu_mass / (kB_evK * self._Tnu0)
+                self._nu_y = nu_y.value
+                self._Onu0 = self._Ogamma0 * self.nu_relative_density(0)
+            else:
+                # This case is particularly simple, so do it directly
+                # The 0.2271... is 7/8 (4/11)^(4/3) -- the temperature
+                # bit ^4 (blackbody energy density) times 7/8 for
+                # FD vs. BE statistics.
+                self._Onu0 = 0.22710731766 * self._Neff * self._Ogamma0
 
-            #Compute Neutrino Omega
-            # The constant in front is 7/8 (4/11)^4/3 -- see any
-            #  cosmology book for an explanation; the 7/8 is FD vs. BE
-            #  statistics, the 4/11 is the temperature effect
-            self._Onu0 = 0.2271073 * self._Neff * self._Ogamma0
         else:
             self._Ogamma0 = 0.0
+            self._Tnu0 = u.Quantity(0.0, u.K)
             self._Onu0 = 0.0
 
-        #Compute curvature density
+        # Compute curvature density
         self._Ok0 = 1.0 - self._Om0 - self._Ode0 - self._Ogamma0 - self._Onu0
 
+    def _namelead(self):
+        """ Helper function for constructing __repr__"""
+        if self.name is None:
+            return "{0:s}(".format(self.__class__.__name__)
+        else:
+            return "{0:s}(name=\"{1:s}\", ".format(self.__class__.__name__,
+                                                   self.name)
+
     def __repr__(self):
-        return "%s(H0=%.3g, Om0=%.3g, Ode0=%.3g, Ok0=%.3g)" % \
-            (self.name, self._H0, self._Om0, self._Ode0, self._Ok0)
+        retstr = "{0:s}H0={1:.3g}, Om0={2:.3g}, Ode0={3:.3g}, "\
+                 "Tcmb0={4:.4g}, Neff={5:.3g}, m_nu={6:s})"
+        return retstr.format(self._namelead(), self._H0, self._Om0, self._Ode0,
+                             self._Tcmb0, self._Neff, self.m_nu)
 
-    #Set up a set of properties for H0, Om0, Ode0, Ok0, etc. for user access.
-    #Note that we don't let these be set (so, obj.Om0 = value fails)
+    # Set up a set of properties for H0, Om0, Ode0, Ok0, etc. for user access.
+    # Note that we don't let these be set (so, obj.Om0 = value fails)
 
     @property
     def H0(self):
-        """ Return the Hubble constant in [km/sec/Mpc] at z=0"""
+        """ Return the Hubble constant as an astropy.units.Quantity at z=0"""
         return self._H0
 
     @property
@@ -172,32 +281,59 @@ class FLRW(Cosmology):
 
     @property
     def Tcmb0(self):
-        """ Temperature of the CMB in Kelvin at z=0"""
+        """ Temperature of the CMB as astropy.units.Quantity at z=0"""
         return self._Tcmb0
 
     @property
+    def Tnu0(self):
+        """ Temperature of the neutrino background as astropy.units.Quantity at z=0"""
+        return self._Tnu0
+
+    @property
     def Neff(self):
         """ Number of effective neutrino species"""
         return self._Neff
 
     @property
+    def has_massive_nu(self):
+        """ Does this cosmology have at least one massive neutrino species?"""
+        if self._Tnu0.value == 0:
+            return False
+        return self._massivenu
+
+    @property
+    def m_nu(self):
+        """ Mass of neutrino species"""
+        if self._Tnu0.value == 0:
+            return None
+        if not self._massivenu:
+            # Only massless
+            return u.Quantity(np.zeros(self._nmasslessnu), u.eV)
+        if self._nmasslessnu == 0:
+            # Only massive
+            return u.Quantity(self._massivenu_mass, u.eV)
+        # A mix -- the most complicated case
+        return u.Quantity(np.append(np.zeros(self._nmasslessnu),
+                                    self._massivenu_mass.value), u.eV)
+
+    @property
     def h(self):
         """ Dimensionless Hubble constant: h = H_0 / 100 [km/sec/Mpc]"""
         return self._h
 
     @property
     def hubble_time(self):
-        """ Hubble time in [Gyr]"""
+        """ Hubble time as astropy.units.Quantity"""
         return self._hubble_time
 
     @property
     def hubble_distance(self):
-        """ Hubble distance in [Mpc]"""
+        """ Hubble distance as astropy.units.Quantity"""
         return self._hubble_distance
 
     @property
     def critical_density0(self):
-        """ Critical density in [g cm^-3] at z=0"""
+        """ Critical density as astropy.units.Quantity at z=0"""
         return self._critical_density0
 
     @property
@@ -253,7 +389,7 @@ class FLRW(Cosmology):
 
         if isiterable(z):
             z = np.asarray(z)
-        return self._Om0 * (1. + z)**3 * self.inv_efunc(z)**2
+        return self._Om0 * (1. + z) ** 3 * self.inv_efunc(z) ** 2
 
     def Ok(self, z):
         """ Return the equivalent density parameter for curvature
@@ -271,12 +407,12 @@ class FLRW(Cosmology):
         """
 
         if self._Ok0 == 0:
-            #Common enough case to be worth checking
+            # Common enough case to be worth checking
             return np.zeros_like(z)
 
         if isiterable(z):
             z = np.asarray(z)
-        return self._Ok0 * (1. + z)**2 * self.inv_efunc(z)**2
+        return self._Ok0 * (1. + z) ** 2 * self.inv_efunc(z) ** 2
 
     def Ode(self, z):
         """ Return the density parameter for dark energy at redshift `z`.
@@ -296,7 +432,7 @@ class FLRW(Cosmology):
         if self._Ode0 == 0:
             return np.zeros_like(z)
 
-        return self._Ode0 * self.de_density_scale(z) * self.inv_efunc(z)**2
+        return self._Ode0 * self.de_density_scale(z) * self.inv_efunc(z) ** 2
 
     def Ogamma(self, z):
         """ Return the density parameter for photons at redshift `z`.
@@ -314,13 +450,13 @@ class FLRW(Cosmology):
         """
 
         if self._Ogamma0 == 0:
-            #Common enough case to be worth checking (although it clearly
+            # Common enough case to be worth checking (although it clearly
             # doesn't represent any real universe)
             return np.zeros_like(z)
 
         if isiterable(z):
             z = np.asarray(z)
-        return self._Ogamma0 * (1. + z)**4 * self.inv_efunc(z)**2
+        return self._Ogamma0 * (1. + z) ** 4 * self.inv_efunc(z) ** 2
 
     def Onu(self, z):
         """ Return the density parameter for massless neutrinos at redshift `z`.
@@ -334,18 +470,20 @@ class FLRW(Cosmology):
         -------
         Onu : ndarray, or float if input scalar
           The energy density of photons relative to the critical
-          density at each redshift.  Note that this includes only
-          their relativistic energy, since they are assumed massless.
+          density at each redshift.  Note that this includes their
+          kinetic energy (if they have mass), so it is not equal to
+          the commonly used :math:`\\sum \\frac{m_{\\nu}}{94 eV}`,
+          which does not include kinetic energy.
         """
 
         if self._Onu0 == 0:
-            #Common enough case to be worth checking (although it clearly
+            # Common enough case to be worth checking (although it clearly
             # doesn't represent any real universe)
             return np.zeros_like(z)
 
         if isiterable(z):
             z = np.asarray(z)
-        return self._Onu0 * (1. + z)**4 * self.inv_efunc(z)**2
+        return self.Ogamma(z) * self.nu_relative_density(z)
 
     def Tcmb(self, z):
         """ Return the CMB temperature at redshift `z`.
@@ -357,7 +495,7 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        Tcmb : ndarray, or float if z is scalar
+        Tcmb : astropy.units.Quantity
           The temperature of the CMB in K.
         """
 
@@ -365,14 +503,99 @@ class FLRW(Cosmology):
             z = np.asarray(z)
         return self._Tcmb0 * (1.0 + z)
 
+    def Tnu(self, z):
+        """ Return the neutrino temperature at redshift `z`.
+
+        Parameters
+        ----------
+        z : array_like
+          Input redshifts.
+
+        Returns
+        -------
+        Tnu : astropy.units.Quantity
+          The temperature of the cosmic neutrino background in K.
+        """
+
+        if isiterable(z):
+            z = np.asarray(z)
+        return self._Tnu0 * (1.0 + z)
+
+    def nu_relative_density(self, z):
+        """ Neutrino density function relative to the energy density in
+        photons.
+
+        Parameters
+        ----------
+        z : array like
+           Redshift
+
+        Returns
+        -------
+         f : ndarray, or float if z is scalar
+           The neutrino density scaling factor relative to the density
+           in photons at each redshift
+
+        Notes
+        -----
+        The density in neutrinos is given by
+
+        .. math::
+
+          \\rho_{\\nu} \\left(a\\right) = 0.2271 \\, N_{eff} \\,
+          f\\left(m_{\\nu} a / T_{\\nu 0} \\right) \\,
+          \\rho_{\\gamma} \\left( a \\right)
+
+        where
+
+        .. math::
+
+          f \\left(y\\right) = \\frac{120}{7 \\pi^4}
+          \\int_0^{\\infty} \\, dx \\frac{x^2 \\sqrt{x^2 + y^2}}
+          {e^x + 1}
+
+        assuming that all neutrino species have the same mass.
+        If they have different masses, a similar term is calculated
+        for each one. Note that f has the asymptotic behavior :math:`f(0) = 1`.
+        This method returns :math:`0.2271 f` using an
+        analytical fitting formula given in Komatsu et al. 2011, ApJS 192, 18.
+        """
+
+        # See Komatsu et al. 2011, eq 26 and the surrounding discussion
+        # However, this is modified to handle multiple neutrino masses
+        # by computing the above for each mass, then summing
+        prefac = 0.22710731766  # 7/8 (4/11)^4/3 -- see any cosmo book
+
+        # The massive and massless contribution must be handled seperately
+        # But check for common cases first
+        if not self._massivenu:
+            return prefac * self._Neff * np.ones_like(z)
+
+        p = 1.83
+        invp = 1.0 / 1.83
+        if np.isscalar(z):
+            curr_nu_y = self._nu_y / (1.0 + z)  # only includes massive ones
+            rel_mass_per = (1.0 + (0.3173 * curr_nu_y) ** p) ** invp
+            rel_mass = rel_mass_per.sum() + self._nmasslessnu
+            return prefac * self._neff_per_nu * rel_mass
+        else:
+            z = np.asarray(z)
+            retarr = np.empty_like(z)
+            for i, redshift in enumerate(z):
+                curr_nu_y = self._nu_y / (1.0 + redshift)
+                rel_mass_per = (1.0 + (0.3173 * curr_nu_y) ** p) ** invp
+                rel_mass = rel_mass_per.sum() + self._nmasslessnu
+                retarr[i] = prefac * self._neff_per_nu * rel_mass
+            return retarr
+
     def _w_integrand(self, ln1pz):
         """ Internal convenience function for w(z) integral."""
 
-        #See Linder 2003, PRL 90, 91301 eq (5)
-        #Assumes scalar input, since this should only be called
+        # See Linder 2003, PRL 90, 91301 eq (5)
+        # Assumes scalar input, since this should only be called
         # inside an integral
 
-        z = exp(ln1pz)-1.0
+        z = exp(ln1pz) - 1.0
         return 1.0 + self.w(z)
 
     def de_density_scale(self, z):
@@ -418,11 +641,11 @@ class FLRW(Cosmology):
 
         if isiterable(z):
             z = np.asarray(z)
-            ival = np.array([quad(self._w_integrand,0,log(1+redshift))[0]
+            ival = np.array([quad(self._w_integrand, 0, log(1 + redshift))[0]
                              for redshift in z])
             return np.exp(3 * ival)
         else:
-            ival = quad(self._w_integrand,0,log(1+z))[0]
+            ival = quad(self._w_integrand, 0, log(1 + z))[0]
             return exp(3 * ival)
 
     def efunc(self, z):
@@ -450,10 +673,13 @@ class FLRW(Cosmology):
             z = np.asarray(z)
 
         Om0, Ode0, Ok0 = self._Om0, self._Ode0, self._Ok0
-        Or0 = self._Ogamma0 + self._Onu0
+        if self._massivenu:
+            Or = self._Ogamma0 * (1 + self.nu_relative_density(z))
+        else:
+            Or = self._Ogamma0 + self._Onu0
         zp1 = 1.0 + z
 
-        return np.sqrt(zp1**2 * ((Or0 * zp1 + Om0) * zp1 + Ok0) +
+        return np.sqrt(zp1 ** 2 * ((Or * zp1 + Om0) * zp1 + Ok0) +
                        Ode0 * self.de_density_scale(z))
 
     def inv_efunc(self, z):
@@ -470,15 +696,18 @@ class FLRW(Cosmology):
           The redshift scaling of the inverse Hubble constant.
         """
 
-        #Avoid the function overhead by repeating code
+        # Avoid the function overhead by repeating code
         if isiterable(z):
             z = np.asarray(z)
         Om0, Ode0, Ok0 = self._Om0, self._Ode0, self._Ok0
-        Or0 = self._Ogamma0 + self._Onu0
+        if self._massivenu:
+            Or = self._Ogamma0 * (1 + self.nu_relative_density(z))
+        else:
+            Or = self._Ogamma0 + self._Onu0
         zp1 = 1.0 + z
 
-        return 1.0/np.sqrt(zp1**2 * ((Or0 * zp1 + Om0) * zp1 + Ok0) +
-                           Ode0 * self.de_density_scale(z))
+        return 1.0 / np.sqrt(zp1 ** 2 * ((Or * zp1 + Om0) * zp1 + Ok0) +
+                             Ode0 * self.de_density_scale(z))
 
     def _tfunc(self, z):
         """ Integrand of the lookback time.
@@ -527,7 +756,7 @@ class FLRW(Cosmology):
             zp1 = 1.0 + np.asarray(z)
         else:
             zp1 = 1. + z
-        return zp1**2 / self.efunc(z)
+        return zp1 ** 2 / self.efunc(z)
 
     def H(self, z):
         """ Hubble parameter (km/s/Mpc) at redshift `z`.
@@ -539,8 +768,8 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        H : ndarray, or float if input scalar
-          Hubble parameter in km/s/Mpc at each input redshift.
+        H : astropy.units.Quantity
+          Hubble parameter at each input redshift.
         """
 
         return self._H0 * self.efunc(z)
@@ -566,7 +795,6 @@ class FLRW(Cosmology):
 
         return 1. / (1. + z)
 
-
     def lookback_time(self, z):
         """ Lookback time in Gyr to redshift `z`.
 
@@ -580,7 +808,7 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        t : ndarray, or float if input scalar
+        t : astropy.units.Quantity
           Lookback time in Gyr to each input redshift.
         """
 
@@ -601,7 +829,7 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        t : ndarray, or float if input scalar
+        t : astropy.units.Quantity
           The age of the universe in Gyr at each input redshift.
         """
 
@@ -622,11 +850,11 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        rho : ndarray, or float if input scalar
+        rho : astropy.units.Quantity
           Critical density in g/cm^3 at each input redshift.
         """
 
-        return self._critical_density0 * (self.efunc(z))**2
+        return self._critical_density0 * (self.efunc(z)) ** 2
 
     def comoving_distance(self, z):
         """ Comoving line-of-sight distance in Mpc at a given
@@ -669,7 +897,7 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        d : ndarray, or float if input scalar
+        d : astropy.units.Quantity
           Comoving transverse distance in Mpc at each input redshift.
 
         Notes
@@ -685,9 +913,9 @@ class FLRW(Cosmology):
         sqrtOk0 = sqrt(abs(Ok0))
         dh = self._hubble_distance
         if Ok0 > 0:
-            return dh / sqrtOk0 * np.sinh(sqrtOk0 * dc / dh)
+            return dh / sqrtOk0 * np.sinh(sqrtOk0 * dc.value / dh.value)
         else:
-            return dh / sqrtOk0 * np.sin(sqrtOk0 * dc / dh)
+            return dh / sqrtOk0 * np.sin(sqrtOk0 * dc.value / dh.value)
 
     def angular_diameter_distance(self, z):
         """ Angular diameter distance in Mpc at a given redshift.
@@ -706,7 +934,7 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        d : ndarray, or float if input scalar
+        d : astropy.units.Quantity
           Angular diameter distance in Mpc at each input redshift.
         """
 
@@ -729,7 +957,7 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        d : ndarray, or float if input scalar
+        d : astropy.units.Quantity
           Luminosity distance in Mpc at each input redshift.
 
         References
@@ -753,7 +981,7 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        d : ndarray, shape (N,) or float if input scalar
+        d : astropy.units.Quantity, shape (N,) or single if input scalar
           The angular diameter distance between each input redshift
           pair.
 
@@ -790,17 +1018,22 @@ class FLRW(Cosmology):
         if (z2 < z1).any():
             z1, z2 = z2, z1
 
-        dm1 = self.comoving_transverse_distance(z1)
-        dm2 = self.comoving_transverse_distance(z2)
-        dh_2 = self._hubble_distance**2
+        dm1 = self.comoving_transverse_distance(z1).value
+        dm2 = self.comoving_transverse_distance(z2).value
+        dh_2 = self._hubble_distance.value ** 2
 
-        out = 1. / (1. + z2) * (dm2*np.sqrt(1. + Ok0*dm1**2 / dh_2) -
-                                dm1*np.sqrt(1. + Ok0*dm2**2 / dh_2))
+        if Ok0 == 0:
+            # Common case worth checking
+            out = (dm2 - dm1) / (1. + z2)
+        else:
+            out = ((dm2 * np.sqrt(1. + Ok0 * dm1 ** 2 / dh_2) -
+                    dm1 * np.sqrt(1. + Ok0 * dm2 ** 2 / dh_2)) /
+                   (1. + z2))
 
         if outscalar:
-            return out[0]
+            return u.Quantity(out[0], u.Mpc)
 
-        return out
+        return u.Quantity(out, u.Mpc)
 
     def absorption_distance(self, z):
         """ Absorption distance at redshift `z`.
@@ -816,7 +1049,7 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        d : ndarray, or float if input scalar
+        d : float or ndarray
           Absorption distance (dimensionless) at each input redshift.
 
         References
@@ -829,8 +1062,8 @@ class FLRW(Cosmology):
         if not isiterable(z):
             return quad(self._xfunc, 0, z)[0]
 
-        out = [quad(self._xfunc, 0, redshift)[0] for redshift in z]
-        return np.array(out)
+        out = np.array([quad(self._xfunc, 0, redshift)[0] for redshift in z])
+        return out
 
     def distmod(self, z):
         """ Distance modulus at redshift `z`.
@@ -845,12 +1078,13 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        distmod : ndarray, or float if input scalar
-          Distance modulus at each input redshift.
+        distmod : astropy.units.Quantity
+          Distance modulus at each input redshift, in magnitudes
         """
 
         # Remember that the luminosity distance is in Mpc
-        return 5. * np.log10(self.luminosity_distance(z) * 1.e5)
+        val = 5. * np.log10(self.luminosity_distance(z).value * 1.e5)
+        return u.Quantity(val, u.mag)
 
     def comoving_volume(self, z):
         """ Comoving volume in cubic Mpc at redshift `z`.
@@ -867,17 +1101,17 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        V : ndarray, or float if input scalar
-          Comoving volume in Mpc^3 at each input redshift.
+        V : astropy.units.Quantity
+          Comoving volume in :math:`Mpc^3` at each input redshift.
         """
 
         Ok0 = self._Ok0
         if Ok0 == 0:
-            return 4. / 3. * pi * self.comoving_distance(z)**3
+            return 4. / 3. * pi * self.comoving_distance(z) ** 3
 
-        dh = self._hubble_distance
-        dm = self.comoving_transverse_distance(z)
-        term1 = 4. * pi * dh ** 3 / (2. * Ok0)
+        dh = self._hubble_distance.value  # .value for speed
+        dm = self.comoving_transverse_distance(z).value
+        term1 = 4. * pi * dh ** 3 / (2. * Ok0) * u.Mpc ** 3
         term2 = dm / dh * np.sqrt(1 + Ok0 * (dm / dh) ** 2)
         term3 = sqrt(abs(Ok0)) * dm / dh
 
@@ -897,12 +1131,12 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        d : ndarray, or float if input scalar
+        d : astropy.units.Quantity
           The distance in comoving kpc corresponding to an arcmin at each
           input redshift.
         """
-        return self.comoving_transverse_distance(z) * 1.e3 * arcmin_in_radians
-
+        return (self.comoving_transverse_distance(z).to(u.kpc) *
+                arcmin_in_radians / u.arcmin)
 
     def kpc_proper_per_arcmin(self, z):
         """ Separation in transverse proper kpc corresponding to an
@@ -915,12 +1149,12 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        d : ndarray, or float if input scalar
+        d : astropy.units.Quantity
           The distance in proper kpc corresponding to an arcmin at each
           input redshift.
         """
-        return self.angular_diameter_distance(z) * 1.e3 * arcmin_in_radians
-
+        return (self.angular_diameter_distance(z).to(u.kpc) *
+                arcmin_in_radians / u.arcmin)
 
     def arcsec_per_kpc_comoving(self, z):
         """ Angular separation in arcsec corresponding to a comoving kpc
@@ -933,13 +1167,12 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        theta : ndarray, or float if input scalar
+        theta : astropy.units.Quantity
           The angular separation in arcsec corresponding to a comoving kpc
           at each input redshift.
         """
-        return 1 / (self.comoving_transverse_distance(z) *
-                    1.e3 * arcsec_in_radians)
-
+        return u.arcsec / (self.comoving_transverse_distance(z).to(u.kpc) *
+                           arcsec_in_radians)
 
     def arcsec_per_kpc_proper(self, z):
         """ Angular separation in arcsec corresponding to a proper kpc at
@@ -952,12 +1185,12 @@ class FLRW(Cosmology):
 
         Returns
         -------
-        theta : ndarray, or float if input scalar
+        theta : astropy.units.Quantity
           The angular separation in arcsec corresponding to a proper kpc
           at each input redshift.
         """
-        return 1 / (self.angular_diameter_distance(z) * 1.e3 *
-                    arcsec_in_radians)
+        return u.arcsec / (self.angular_diameter_distance(z).to(u.kpc) *
+                           arcsec_in_radians)
 
 
 class LambdaCDM(FLRW):
@@ -965,43 +1198,52 @@ class LambdaCDM(FLRW):
 
     This has no additional attributes beyond those of FLRW.
 
+    Parameters
+    ----------
+
+    H0 : float or astropy.units.Quantity
+        Hubble constant at z = 0.  If a float, must be in [km/sec/Mpc]
+
+    Om0 : float
+        Omega matter: density of non-relativistic matter in units of the
+        critical density at z=0.
+
+    Ode0 : float
+        Omega dark energy: density of the cosmological constant in units of the
+        critical density at z=0.
+
+    Tcmb0 : float or astropy.units.Quantity
+        Temperature of the CMB z=0. If a float, must be in [K]. Default: 2.725.
+
+    Neff : float
+        Effective number of Neutrino species. Default 3.04.
+
+    m_nu : astropy.units.Quantity
+        Mass of each neutrino species. If this is a scalar Quantity, then all
+        neutrino species are assumed to have that mass. Otherwise, the mass of
+        each species. The actual number of neutrino species (and hence the
+        number of elements of m_nu if it is not scalar) must be the floor of
+        Neff. Usually this means you must provide three neutrino masses unless
+        you are considering something like a sterile neutrino.
+
+    name : str
+        Optional name for this cosmological object.
+
     Examples
     --------
-    >>> from astro.cosmology import LambdaCDM
+    >>> from astropy.cosmology import LambdaCDM
     >>> cosmo = LambdaCDM(H0=70, Om0=0.3, Ode0=0.7)
 
     The comoving distance in Mpc at redshift z:
 
+    >>> z = 0.5
     >>> dc = cosmo.comoving_distance(z)
     """
 
     def __init__(self, H0, Om0, Ode0, Tcmb0=2.725, Neff=3.04,
-                 name='LambdaCDM'):
-        """ Initializer.
-
-        Parameters
-        ----------
-        H0 : float
-          Hubble constant in [km/sec/Mpc] at z=0
-
-        Om0 : float
-          Omega matter: density of non-relativistic matter in units
-          of the critical density at z=0.
+                 m_nu=u.Quantity(0.0, u.eV), name=None):
 
-        Ode0 : float
-          Omega dark energy: density of the cosmological constant in units
-          of the critical density at z=0.
-
-        Tcmb0 : float
-          Temperature of the CMB in Kelvin at z=0 (def: 2.725)
-
-        Neff : float
-          Effective number of Neutrino species (def: 3.04)
-
-        name : string
-          Optional name for this cosmological object.
-        """
-        FLRW.__init__(self, H0, Om0, Ode0, Tcmb0, Neff, name=name)
+        FLRW.__init__(self, H0, Om0, Ode0, Tcmb0, Neff, m_nu, name=name)
 
     def w(self, z):
         """Returns dark energy equation of state at redshift `z`.
@@ -1025,7 +1267,7 @@ class LambdaCDM(FLRW):
         :math:`w(z) = -1`.
         """
 
-        return -1.0*np.ones_like(z)
+        return -1.0 * np.ones_like(z)
 
     def de_density_scale(self, z):
         """ Evaluates the redshift dependence of the dark energy density.
@@ -1069,13 +1311,16 @@ class LambdaCDM(FLRW):
         if isiterable(z):
             z = np.asarray(z)
 
-        #We override this because it takes a particularly simple
+        # We override this because it takes a particularly simple
         # form for a cosmological constant
         Om0, Ode0, Ok0 = self._Om0, self._Ode0, self._Ok0
-        Or0 = self._Ogamma0 + self._Onu0
+        if self._massivenu:
+            Or = self._Ogamma0 * (1 + self.nu_relative_density(z))
+        else:
+            Or = self._Ogamma0 + self._Onu0
         zp1 = 1.0 + z
 
-        return np.sqrt(zp1**2 * ((Or0 * zp1 + Om0) * zp1 + Ok0) + Ode0)
+        return np.sqrt(zp1 ** 2 * ((Or * zp1 + Om0) * zp1 + Ok0) + Ode0)
 
     def inv_efunc(self, z):
         r""" Function used to calculate :math:`\frac{1}{H_z}`.
@@ -1099,56 +1344,65 @@ class LambdaCDM(FLRW):
         if isiterable(z):
             z = np.asarray(z)
         Om0, Ode0, Ok0 = self._Om0, self._Ode0, self._Ok0
-        Or0 = self._Ogamma0 + self._Onu0
+        if self._massivenu:
+            Or = self._Ogamma0 * (1 + self.nu_relative_density(z))
+        else:
+            Or = self._Ogamma0 + self._Onu0
         zp1 = 1.0 + z
 
-        return 1.0 / np.sqrt(zp1**2 * ((Or0 * zp1 + Om0) * zp1 + Ok0) + Ode0)
+        return 1.0 / np.sqrt(zp1 ** 2 * ((Or * zp1 + Om0) * zp1 + Ok0) + Ode0)
+
 
 class FlatLambdaCDM(LambdaCDM):
     """FLRW cosmology with a cosmological constant and no curvature.
 
     This has no additional attributes beyond those of FLRW.
 
+    Parameters
+    ----------
+    H0 : float or astropy.units.Quantity
+        Hubble constant at z = 0.  If a float, must be in [km/sec/Mpc]
+
+    Om0 : float
+        Omega matter: density of non-relativistic matter in units of the
+        critical density at z=0.
+
+    Tcmb0 : float or astropy.units.Quantity
+        Temperature of the CMB z=0. If a float, must be in [K]. Default: 2.725.
+
+    Neff : float
+        Effective number of Neutrino species. Default 3.04.
+
+    m_nu : astropy.units.Quantity
+        Mass of each neutrino species. If this is a scalar Quantity, then all
+        neutrino species are assumed to have that mass. Otherwise, the mass of
+        each species. The actual number of neutrino species (and hence the
+        number of elements of m_nu if it is not scalar) must be the floor of
+        Neff. Usually this means you must provide three neutrino masses unless
+        you are considering something like a sterile neutrino.
+
+    name : str
+        Optional name for this cosmological object.
+
     Examples
     --------
-    >>> from astro.cosmology import FlatLambdaCDM
+    >>> from astropy.cosmology import FlatLambdaCDM
     >>> cosmo = FlatLambdaCDM(H0=70, Om0=0.3)
 
     The comoving distance in Mpc at redshift z:
 
+    >>> z = 0.5
     >>> dc = cosmo.comoving_distance(z)
     """
-    def __init__(self, H0, Om0, Tcmb0=2.725, Neff=3.04, name='FlatLambdaCDM'):
-        """ Initializer.
-
-        Parameters
-        ----------
-        H0 : float
-          Hubble constant in [km/sec/Mpc] at z=0
 
-        Om0 : float
-          Omega matter: density of non-relativistic matter in units
-          of the critical density at z=0.
+    def __init__(self, H0, Om0, Tcmb0=2.725, Neff=3.04,
+                 m_nu=u.Quantity(0.0, u.eV), name=None):
 
-        Tcmb0 : float
-          Temperature of the CMB in Kelvin at z=0 (def: 2.725)
-
-        Neff : float
-          Effective number of Neutrino species (def: 3.04)
-
-        name : string
-          Optional name for this cosmological object.
-        """
-        FLRW.__init__(self, H0, Om0, 0.0, Tcmb0, Neff, name=name)
-        #Do some twiddling after the fact to get flatness
+        FLRW.__init__(self, H0, Om0, 0.0, Tcmb0, Neff, m_nu, name=name)
+        # Do some twiddling after the fact to get flatness
         self._Ode0 = 1.0 - self._Om0 - self._Ogamma0 - self._Onu0
         self._Ok0 = 0.0
 
-    def __repr__(self):
-        return "%s(H0=%.3g, Om0=%.3g, Ode0=%.3g)" % \
-            (self.name, self._H0, self._Om0, self._Ode0)
-
-
     def efunc(self, z):
         """ Function used to calculate H(z), the Hubble parameter.
 
@@ -1170,13 +1424,16 @@ class FlatLambdaCDM(LambdaCDM):
         if isiterable(z):
             z = np.asarray(z)
 
-        #We override this because it takes a particularly simple
+        # We override this because it takes a particularly simple
         # form for a cosmological constant
         Om0, Ode0 = self._Om0, self._Ode0
-        Or0 = self._Ogamma0 + self._Onu0
+        if self._massivenu:
+            Or = self._Ogamma0 * (1 + self.nu_relative_density(z))
+        else:
+            Or = self._Ogamma0 + self._Onu0
         zp1 = 1.0 + z
 
-        return np.sqrt(zp1**3 * (Or0 * zp1 + Om0) + Ode0)
+        return np.sqrt(zp1 ** 3 * (Or * zp1 + Om0) + Ode0)
 
     def inv_efunc(self, z):
         r"""Function used to calculate :math:`\frac{1}{H_z}`.
@@ -1199,10 +1456,19 @@ class FlatLambdaCDM(LambdaCDM):
         if isiterable(z):
             z = np.asarray(z)
         Om0, Ode0 = self._Om0, self._Ode0
-        Or0 = self._Ogamma0 + self._Onu0
+        if self._massivenu:
+            Or = self._Ogamma0 * (1 + self.nu_relative_density(z))
+        else:
+            Or = self._Ogamma0 + self._Onu0
         zp1 = 1.0 + z
 
-        return 1.0 / np.sqrt(zp1**3 * (Or0 * zp1 + Om0) + Ode0)
+        return 1.0 / np.sqrt(zp1 ** 3 * (Or * zp1 + Om0) + Ode0)
+
+    def __repr__(self):
+        retstr = "{0:s}H0={1:.3g}, Om0={2:.3g}, Tcmb0={3:.4g}, "\
+                 "Neff={4:.3g}, m_nu={5:s})"
+        return retstr.format(self._namelead(), self._H0, self._Om0, 
+                             self._Tcmb0, self._Neff, self.m_nu)
 
 class wCDM(FLRW):
     """FLRW cosmology with a constant dark energy equation of state
@@ -1210,55 +1476,59 @@ class wCDM(FLRW):
 
     This has one additional attribute beyond those of FLRW.
 
+    Parameters
+    ----------
+
+    H0 : float or astropy.units.Quantity
+        Hubble constant at z = 0. If a float, must be in [km/sec/Mpc]
+
+    Om0 : float
+        Omega matter: density of non-relativistic matter in units of the
+        critical density at z=0.
+
+    Ode0 : float
+        Omega dark energy: density of dark energy in units of the critical
+        density at z=0.
+
+    w0 : float
+        Dark energy equation of state at all redshifts. This is
+        pressure/density for dark energy in units where c=1. A cosmological
+        constant has w0=-1.0.
+
+    Tcmb0 : float or astropy.units.Quantity
+        Temperature of the CMB z=0. If a float, must be in [K]. Default: 2.725.
+
+    Neff : float
+        Effective number of Neutrino species. Default 3.04.
+
+    m_nu : astropy.units.Quantity
+        Mass of each neutrino species. If this is a scalar Quantity, then all
+        neutrino species are assumed to have that mass. Otherwise, the mass of
+        each species. The actual number of neutrino species (and hence the
+        number of elements of m_nu if it is not scalar) must be the floor of
+        Neff. Usually this means you must provide three neutrino masses unless
+        you are considering something like a sterile neutrino.
+
+    name : str
+        Optional name for this cosmological object.
+
     Examples
     --------
-    >>> from astro.cosmology import wCDM
+    >>> from astropy.cosmology import wCDM
     >>> cosmo = wCDM(H0=70, Om0=0.3, Ode0=0.7, w0=-0.9)
 
     The comoving distance in Mpc at redshift z:
 
+    >>> z = 0.5
     >>> dc = cosmo.comoving_distance(z)
     """
 
     def __init__(self, H0, Om0, Ode0, w0=-1., Tcmb0=2.725,
-                 Neff=3.04, name='wCDM'):
-        """ Initializer.
-
-        Parameters
-        ----------
-        H0 : float
-          Hubble constant in [km/sec/Mpc] at z=0
-
-        Om0 : float
-          Omega matter: density of non-relativistic matter in units
-          of the critical density at z=0.
-
-        Ode0 : float
-          Omega dark energy: density of dark energy in units
-          of the critical density at z=0.
+                 Neff=3.04, m_nu=u.Quantity(0.0, u.eV), name=None):
 
-        w0 : float
-          Dark energy equation of state at all redshifts.
-          This is pressure/density for dark energy in units where c=1.
-          A cosmological constant has w0=-1.0.
-
-        Tcmb0 : float
-          Temperature of the CMB in Kelvin at z=0 (def: 2.725)
-
-        Neff : float
-          Effective number of Neutrino species (def: 3.04)
-
-        name : string
-          Optional name for this cosmological object.
-        """
-        FLRW.__init__(self, H0, Om0, Ode0, Tcmb0, Neff, name=name)
+        FLRW.__init__(self, H0, Om0, Ode0, Tcmb0, Neff, m_nu, name=name)
         self._w0 = float(w0)
 
-    def __repr__(self):
-        return "%s(H0=%.3g, Om0=%.3g, Ode0=%.3g, Ok0=%.3g, w0=%.3g)" % \
-            (self.name, self._H0, self._Om0,
-             self._Ode0, self._Ok0, self._w0)
-
     @property
     def w0(self):
         """ Dark energy equation of state"""
@@ -1286,7 +1556,7 @@ class wCDM(FLRW):
         :math:`w(z) = w_0`.
         """
 
-        return self._w0*np.ones_like(z)
+        return self._w0 * np.ones_like(z)
 
     def de_density_scale(self, z):
         """ Evaluates the redshift dependence of the dark energy density.
@@ -1310,7 +1580,7 @@ class wCDM(FLRW):
 
         if isiterable(z):
             z = np.asarray(z)
-        return (1.0 + z)**(3 * (1 + self._w0))
+        return (1.0 + z) ** (3 * (1 + self._w0))
 
     def efunc(self, z):
         """ Function used to calculate H(z), the Hubble parameter.
@@ -1332,12 +1602,15 @@ class wCDM(FLRW):
 
         if isiterable(z):
             z = np.asarray(z)
-        Om0, Ode0, Ok0, w0 = self._Om0, self._Ode, self._Ok0, self._w0
-        Or0 = self._Ogamma0 + self._Onu0
+        Om0, Ode0, Ok0, w0 = self._Om0, self._Ode0, self._Ok0, self._w0
+        if self._massivenu:
+            Or = self._Ogamma0 * (1 + self.nu_relative_density(z))
+        else:
+            Or = self._Ogamma0 + self._Onu0
         zp1 = 1.0 + z
 
-        return np.sqrt(zp1**2 * ((Or0 * zp1 + Om0) * zp1 + Ok0) +
-                       Ode0 * zp1**(3.0 * (1 + w0)))
+        return np.sqrt(zp1 ** 2 * ((Or * zp1 + Om0) * zp1 + Ok0) +
+                       Ode0 * zp1 ** (3.0 * (1 + w0)))
 
     def inv_efunc(self, z):
         r""" Function used to calculate :math:`\frac{1}{H_z}`.
@@ -1360,11 +1633,21 @@ class wCDM(FLRW):
         if isiterable(z):
             z = np.asarray(z)
         Om0, Ode0, Ok0, w0 = self._Om0, self._Ode0, self._Ok0, self._w0
-        Or0 = self._Ogamma0 + self._Onu0
+        if self._massivenu:
+            Or = self._Ogamma0 * (1 + self.nu_relative_density(z))
+        else:
+            Or = self._Ogamma0 + self._Onu0
         zp1 = 1.0 + z
 
-        return 1.0 / np.sqrt(zp1**2 * ((Or0 * zp1 + Om0) * zp1 + Ok0) +
-                             Ode0 * zp1**(3 * (1 + w0)))
+        return 1.0 / np.sqrt(zp1 ** 2 * ((Or * zp1 + Om0) * zp1 + Ok0) +
+                             Ode0 * zp1 ** (3 * (1 + w0)))
+
+    def __repr__(self):
+        retstr = "{0:s}H0={1:.3g}, Om0={2:.3g}, Ode0={3:.3g}, w0={4:.3g}, "\
+                 "Tcmb0={5:.4g}, Neff={6:.3g}, m_nu={7:s})"
+        return retstr.format(self._namelead(), self._H0, self._Om0, 
+                             self._Ode0, self._w0, self._Tcmb0, self._Neff, 
+                             self.m_nu)
 
 
 class FlatwCDM(wCDM):
@@ -1373,54 +1656,58 @@ class FlatwCDM(wCDM):
 
     This has one additional attribute beyond those of FLRW.
 
+    Parameters
+    ----------
+
+    H0 : float or astropy.units.Quantity
+        Hubble constant at z = 0. If a float, must be in [km/sec/Mpc]
+
+    Om0 : float
+        Omega matter: density of non-relativistic matter in units of the
+        critical density at z=0.
+
+    w0 : float
+        Dark energy equation of state at all redshifts. This is
+        pressure/density for dark energy in units where c=1. A cosmological
+        constant has w0=-1.0.
+
+    Tcmb0 : float or astropy.units.Quantity
+        Temperature of the CMB z=0. If a float, must be in [K]. Default: 2.725.
+
+    Neff : float
+        Effective number of Neutrino species. Default 3.04.
+
+    m_nu : astropy.units.Quantity
+        Mass of each neutrino species. If this is a scalar Quantity, then all
+        neutrino species are assumed to have that mass. Otherwise, the mass of
+        each species. The actual number of neutrino species (and hence the
+        number of elements of m_nu if it is not scalar) must be the floor of
+        Neff. Usually this means you must provide three neutrino masses unless
+        you are considering something like a sterile neutrino.
+
+    name : str
+        Optional name for this cosmological object.
+
     Examples
     --------
-    >>> from astro.cosmology import FlatwCDM
+    >>> from astropy.cosmology import FlatwCDM
     >>> cosmo = FlatwCDM(H0=70, Om0=0.3, w0=-0.9)
 
     The comoving distance in Mpc at redshift z:
 
+    >>> z = 0.5
     >>> dc = cosmo.comoving_distance(z)
     """
 
     def __init__(self, H0, Om0, w0=-1., Tcmb0=2.725,
-                 Neff=3.04, name='FlatwCDM'):
-        """ Initializer.
-
-        Parameters
-        ----------
-        H0 : float
-          Hubble constant in [km/sec/Mpc] at z=0
-
-        Om0 : float
-          Omega matter: density of non-relativistic matter in units
-          of the critical density at z=0.
-
-        w0 : float
-          Dark energy equation of state at all redshifts.
-          This is pressure/density for dark energy in units where c=1.
-          A cosmological constant has w0=-1.0.
-
-        Tcmb0 : float
-          Temperature of the CMB in Kelvin at z=0 (def: 2.725)
+                 Neff=3.04, m_nu=u.Quantity(0.0, u.eV), name=None):
 
-        Neff : float
-          Effective number of Neutrino species (def: 3.04)
-
-        name: string
-          Optional name for this cosmological object.
-        """
-        FLRW.__init__(self, H0, Om0, 0.0, Tcmb0, Neff, name=name)
+        FLRW.__init__(self, H0, Om0, 0.0, Tcmb0, Neff, m_nu, name=name)
         self._w0 = float(w0)
-        #Do some twiddling after the fact to get flatness
+        # Do some twiddling after the fact to get flatness
         self._Ode0 = 1.0 - self._Om0 - self._Ogamma0 - self._Onu0
         self._Ok0 = 0.0
 
-    def __repr__(self):
-        return "%s(H0=%.3g, Om0=%.3g, Ode0=%.3g, w0=%.3g)" % \
-            (self.name, self._H0, self._Om0,
-             self._Ode0, self._w0)
-
     def efunc(self, z):
         """ Function used to calculate H(z), the Hubble parameter.
 
@@ -1441,12 +1728,15 @@ class FlatwCDM(wCDM):
 
         if isiterable(z):
             z = np.asarray(z)
-        Om0, Ode0, w0 = self._Om0, self._Ode, self._w0
-        Or0 = self._Ogamma0 + self._Onu0
+        Om0, Ode0, w0 = self._Om0, self._Ode0, self._w0
+        if self._massivenu:
+            Or = self._Ogamma0 * (1 + self.nu_relative_density(z))
+        else:
+            Or = self._Ogamma0 + self._Onu0
         zp1 = 1.0 + z
 
-        return np.sqrt(zp1**3 * (Or0 * zp1 + Om0) +
-                       Ode0 * zp1**(3.0 * (1 + w0)))
+        return np.sqrt(zp1 ** 3 * (Or * zp1 + Om0) +
+                       Ode0 * zp1 ** (3.0 * (1 + w0)))
 
     def inv_efunc(self, z):
         r""" Function used to calculate :math:`\frac{1}{H_z}`.
@@ -1469,11 +1759,20 @@ class FlatwCDM(wCDM):
         if isiterable(z):
             z = np.asarray(z)
         Om0, Ode0, Ok0, w0 = self._Om0, self._Ode0, self._Ok0, self._w0
-        Or0 = self._Ogamma0 + self._Onu0
+        if self._massivenu:
+            Or = self._Ogamma0 * (1 + self.nu_relative_density(z))
+        else:
+            Or = self._Ogamma0 + self._Onu0
         zp1 = 1.0 + z
 
-        return 1.0 / np.sqrt(zp1**3 * (Or0 * zp1 + Om0) +
-                             Ode0 * zp1**(3 * (1 + w0)))
+        return 1.0 / np.sqrt(zp1 ** 3 * (Or * zp1 + Om0) +
+                             Ode0 * zp1 ** (3 * (1 + w0)))
+
+    def __repr__(self):
+        retstr = "{0:s}H0={1:.3g}, Om0={2:.3g}, w0={3:.3g}, Tcmb0={4:.4g}, "\
+                 "Neff={5:.3g}, m_nu={6:s})"
+        return retstr.format(self._namelead(), self._H0, self._Om0, self._w0,
+                             self._Tcmb0, self._Neff, self.m_nu)
 
 class w0waCDM(FLRW):
     """FLRW cosmology with a CPL dark energy equation of state and curvature.
@@ -1483,60 +1782,62 @@ class w0waCDM(FLRW):
     D10, 213 (2001) and Linder PRL 90, 91301 (2003):
     :math:`w(z) = w_0 + w_a (1-a) = w_0 + w_a z / (1+z)`.
 
-    Examples
-    --------
-    >>> from astro.cosmology import w0waCDM
-    >>> cosmo = w0waCDM(H0=70, Om0=0.3, Ode0=0.7, w0=-0.9, wa=0.2)
+    Parameters
+    ----------
+    H0 : float or astropy.units.Quantity
+        Hubble constant at z = 0. If a float, must be in [km/sec/Mpc]
 
-    The comoving distance in Mpc at redshift z:
+    Om0 : float
+        Omega matter: density of non-relativistic matter in units of the
+        critical density at z=0.
 
-    >>> dc = cosmo.comoving_distance(z)
-    """
+    Ode0 : float
+        Omega dark energy: density of dark energy in units of the critical
+        density at z=0.
 
-    def __init__(self, H0, Om0, Ode0, w0=-1., wa=0., Tcmb0=2.725,
-                 Neff=3.04, name='w0waCDM'):
-        """ Initializer.
+    w0 : float
+        Dark energy equation of state at z=0 (a=1). This is pressure/density
+        for dark energy in units where c=1.
 
-        Parameters
-        ----------
-        H0 : float
-          Hubble constant in [km/sec/Mpc] at z=0
+    wa : float
+        Negative derivative of the dark energy equation of state with respect
+        to the scale factor. A cosmological constant has w0=-1.0 and wa=0.0.
 
-        Om0 : float
-          Omega matter: density of non-relativistic matter in units
-          of the critical density at z=0.
+    Tcmb0 : float or astropy.units.Quantity
+        Temperature of the CMB z=0. If a float, must be in [K]. Default: 2.725.
 
-        Ode0 : float
-          Omega dark energy: density of dark energy in units
-          of the critical density at z=0.
+    Neff : float
+        Effective number of Neutrino species. Default 3.04.
 
-        w0 : float
-          Dark energy equation of state at z=0 (a=1).
-          This is pressure/density for dark energy in units where c=1.
+    m_nu : astropy.units.Quantity
+        Mass of each neutrino species. If this is a scalar Quantity, then all
+        neutrino species are assumed to have that mass. Otherwise, the mass of
+        each species. The actual number of neutrino species (and hence the
+        number of elements of m_nu if it is not scalar) must be the floor of
+        Neff. Usually this means you must provide three neutrino masses unless
+        you are considering something like a sterile neutrino.
 
-        wa : float
-          Negative derivative of the dark energy equation of state
-          with respect to the scale factor.  A cosmological constant has
-          w0=-1.0 and wa=0.0.
+    name : str
+        Optional name for this cosmological object.
 
-        Tcmb0 : float
-          Temperature of the CMB in Kelvin at z=0 (def: 2.725)
+    Examples
+    --------
+    >>> from astropy.cosmology import w0waCDM
+    >>> cosmo = w0waCDM(H0=70, Om0=0.3, Ode0=0.7, w0=-0.9, wa=0.2)
 
-        Neff : float
-          Effective number of Neutrino species (def: 3.04)
+    The comoving distance in Mpc at redshift z:
 
-        name : string
-          Optional name for this cosmological object.
-        """
-        FLRW.__init__(self, H0, Om0, Ode0, Tcmb0, Neff, name=name)
+    >>> z = 0.5
+    >>> dc = cosmo.comoving_distance(z)
+    """
+
+    def __init__(self, H0, Om0, Ode0, w0=-1., wa=0., Tcmb0=2.725,
+                 Neff=3.04, m_nu=u.Quantity(0.0, u.eV), name=None):
+
+        FLRW.__init__(self, H0, Om0, Ode0, Tcmb0, Neff, m_nu, name=name)
         self._w0 = float(w0)
         self._wa = float(wa)
 
-    def __repr__(self):
-        return "%s(H0=%.3g, Om0=%.3g, Ode0=%.3g, Ok0=%.3g, w0=%.3g, wa=%.3g)" %\
-            (self.name, self._H0, self._Om0, self._Ode0, self._Ok0,
-             self._w0, self._wa)
-
     @property
     def w0(self):
         """ Dark energy equation of state at z=0"""
@@ -1601,8 +1902,16 @@ class w0waCDM(FLRW):
         if isiterable(z):
             z = np.asarray(z)
         zp1 = 1.0 + z
-        return zp1**(3 * (1 + self._w0 + self._wa)) * \
-            exp(-3 * self._wa * z / zp1)
+        return zp1 ** (3 * (1 + self._w0 + self._wa)) * \
+            np.exp(-3 * self._wa * z / zp1)
+
+    def __repr__(self):
+        retstr = "{0:s}H0={1:.3g}, Om0={2:.3g}, "\
+                 "Ode0={3:.3g}, w0={4:.3g}, wa={5:.3g}, Tcmb0={6:.4g}, "\
+                 "Neff={7:.3g}, m_nu={8:s})"
+        return retstr.format(self._namelead(), self._H0, self._Om0,
+                             self._Ode0, self._w0, self._wa,
+                             self._Tcmb0, self._Neff, self.m_nu)
 
 class Flatw0waCDM(w0waCDM):
     """FLRW cosmology with a CPL dark energy equation of state and no curvature.
@@ -1612,57 +1921,67 @@ class Flatw0waCDM(w0waCDM):
     D10, 213 (2001) and Linder PRL 90, 91301 (2003):
     :math:`w(z) = w_0 + w_a (1-a) = w_0 + w_a z / (1+z)`.
 
+    Parameters
+    ----------
+
+    H0 : float or astropy.units.Quantity
+        Hubble constant at z = 0. If a float, must be in [km/sec/Mpc]
+
+    Om0 : float
+        Omega matter: density of non-relativistic matter in units of the
+        critical density at z=0.
+
+    w0 : float
+        Dark energy equation of state at z=0 (a=1). This is pressure/density
+        for dark energy in units where c=1.
+
+    wa : float
+        Negative derivative of the dark energy equation of state with respect
+        to the scale factor. A cosmological constant has w0=-1.0 and wa=0.0.
+
+    Tcmb0 : float or astropy.units.Quantity
+        Temperature of the CMB z=0. If a float, must be in [K]. Default: 2.725.
+
+    Neff : float
+        Effective number of Neutrino species. Default 3.04.
+
+    m_nu : astropy.units.Quantity
+        Mass of each neutrino species. If this is a scalar Quantity, then all
+        neutrino species are assumed to have that mass. Otherwise, the mass of
+        each species. The actual number of neutrino species (and hence the
+        number of elements of m_nu if it is not scalar) must be the floor of
+        Neff. Usually this means you must provide three neutrino masses unless
+        you are considering something like a sterile neutrino.
+
+    name : str
+        Optional name for this cosmological object.
+
     Examples
     --------
-    >>> from astro.cosmology import Flatw0waCDM
+    >>> from astropy.cosmology import Flatw0waCDM
     >>> cosmo = Flatw0waCDM(H0=70, Om0=0.3, w0=-0.9, wa=0.2)
 
     The comoving distance in Mpc at redshift z:
 
+    >>> z = 0.5
     >>> dc = cosmo.comoving_distance(z)
     """
-    def __init__(self, H0, Om0, w0=-1., wa=0., Tcmb0=2.725,
-                 Neff=3.04, name='Flatw0waCDM'):
-        """ Initializer.
-
-        Parameters
-        ----------
-        H0 : float
-          Hubble constant in [km/sec/Mpc] at z=0
-
-        Om0 : float
-          Omega matter: density of non-relativistic matter in units
-          of the critical density at z=0.
 
-        w0 : float
-          Dark energy equation of state at z=0 (a=1).
-          This is pressure/density for dark energy in units where c=1.
-
-        wa : float
-          Negative derivative of the dark energy equation of state
-          with respect to the scale factor.  A cosmological constant has
-          w0=-1.0 and wa=0.0.
-
-        Tcmb0 : float
-          Temperature of the CMB in Kelvin at z=0 (def: 2.725)
-
-        Neff : float
-          Effective number of Neutrino species (def: 3.04)
+    def __init__(self, H0, Om0, w0=-1., wa=0., Tcmb0=2.725,
+                 Neff=3.04, m_nu=u.Quantity(0.0, u.eV), name=None):
 
-        name : string
-          Optional name for this cosmological object.
-        """
-        FLRW.__init__(self, H0, Om0, 0.0, Tcmb0, Neff, name=name)
-        #Do some twiddling after the fact to get flatness
+        FLRW.__init__(self, H0, Om0, 0.0, Tcmb0, Neff, m_nu, name=name)
+        # Do some twiddling after the fact to get flatness
         self._Ode0 = 1.0 - self._Om0 - self._Ogamma0 - self._Onu0
         self._Ok0 = 0.0
         self._w0 = float(w0)
         self._wa = float(wa)
 
     def __repr__(self):
-        return "%s(H0=%.3g, Om0=%.3g, Ode0=%.3g, w0=%.3g, wa=%.3g)" %\
-            (self.name, self._H0, self._Om0, self._Ode0, self._w0, self._wa)
-
+        retstr = "{0:s}H0={1:.3g}, Om0={2:.3g}, "\
+                 "w0={3:.3g}, Tcmb0={4:.4g}, Neff={5:.3g}, m_nu={6:s})"
+        return retstr.format(self._namelead(), self._H0, self._Om0, self._w0,
+                             self._Tcmb0, self._Neff, self.m_nu)
 
 class wpwaCDM(FLRW):
     """FLRW cosmology with a CPL dark energy equation of state, a pivot
@@ -1675,65 +1994,68 @@ class wpwaCDM(FLRW):
     Task Force (Albrecht et al. arXiv:0901.0721 (2009)):
     :math:`w(a) = w_p + w_a (a_p - a) = w_p + w_a( 1/(1+zp) - 1/(1+z) )`.
 
-    Examples
-    --------
-    >>> from astro.cosmology import wpwaCDM
-    >>> cosmo = wpwaCDM(H0=70,Om0=0.3,Ode0=0.7,wp=-0.9,wa=0.2,zp=0.4)
+    Parameters
+    ----------
 
-    The comoving distance in Mpc at redshift z:
+    H0 : float or astropy.units.Quantity
+        Hubble constant at z = 0. If a float, must be in [km/sec/Mpc]
 
-    >>> dc = cosmo.comoving_distance(z)
-    """
+    Om0 : float
+        Omega matter: density of non-relativistic matter in units of the
+        critical density at z=0.
 
-    def __init__(self, H0, Om0, Ode0, wp=-1., wa=0., zp=0,
-                 Tcmb0=2.725, Neff=3.04, name='wpwaCDM'):
-        """ Initializer.
+    Ode0 : float
+        Omega dark energy: density of dark energy in units of the critical
+        density at z=0.
 
-        Parameters
-        ----------
-        H0 : float
-          Hubble constant in [km/sec/Mpc] at z=0
+    wp : float
+        Dark energy equation of state at the pivot redshift zp. This is
+        pressure/density for dark energy in units where c=1.
 
-        Om0 : float
-          Omega matter: density of non-relativistic matter in units
-          of the critical density at z=0.
+    wa : float
+        Negative derivative of the dark energy equation of state with respect
+        to the scale factor. A cosmological constant has w0=-1.0 and wa=0.0.
 
-        Ode0 : float
-          Omega dark energy: density of dark energy in units
-          of the critical density at z=0.
+    zp : float
+        Pivot redshift -- the redshift where w(z) = wp
 
-        wp : float
-          Dark energy equation of state at the pivot redshift zp.
-          This is pressure/density for dark energy in units where c=1.
+    Tcmb0 : float or astropy.units.Quantity
+        Temperature of the CMB z=0. If a float, must be in [K]. Default: 2.725.
 
-        wa : float
-          Negative derivative of the dark energy equation of state
-          with respect to the scale factor.  A cosmological constant
-          has w0=-1.0 and wa=0.0.
+    Neff : float
+        Effective number of Neutrino species. Default 3.04.
 
-        zp : float
-          Pivot redshift -- the redshift where w(z) = wp
+    m_nu : astropy.units.Quantity
+        Mass of each neutrino species. If this is a scalar Quantity, then all
+        neutrino species are assumed to have that mass. Otherwise, the mass of
+        each species. The actual number of neutrino species (and hence the
+        number of elements of m_nu if it is not scalar) must be the floor of
+        Neff. Usually this means you must provide three neutrino masses unless
+        you are considering something like a sterile neutrino.
 
-        Tcmb0 : float
-          Temperature of the CMB in Kelvin at z=0 (def: 2.725)
+    name : str
+        Optional name for this cosmological object.
 
-        Neff : float
-          Effective number of Neutrino species (def: 3.04)
+    Examples
+    --------
+    >>> from astropy.cosmology import wpwaCDM
+    >>> cosmo = wpwaCDM(H0=70,Om0=0.3,Ode0=0.7,wp=-0.9,wa=0.2,zp=0.4)
 
-        name : string
-          Optional name for this cosmological object.
-        """
-        FLRW.__init__(self, H0, Om0, Ode0, Tcmb0, Neff, name=name)
+    The comoving distance in Mpc at redshift z:
+
+    >>> z = 0.5
+    >>> dc = cosmo.comoving_distance(z)
+    """
+
+    def __init__(self, H0, Om0, Ode0, wp=-1., wa=0., zp=0,
+                 Tcmb0=2.725, Neff=3.04, m_nu=u.Quantity(0.0, u.eV),
+                 name=None):
+
+        FLRW.__init__(self, H0, Om0, Ode0, Tcmb0, Neff, m_nu, name=name)
         self._wp = float(wp)
         self._wa = float(wa)
         self._zp = float(zp)
 
-    def __repr__(self):
-        str = "%s(H0=%.3g, Om0=%.3g, Ode0=%.3g, Ok0=%.3g, wp=%.3g, "+\
-            "wa=%.3g, zp=%.3g)"
-        return str % (self.name, self._H0, self._Om0, self._Ode0,
-                      self._Ok0, self._wp, self._wa, self._zp)
-
     @property
     def wp(self):
         """ Dark energy equation of state at the pivot redshift zp"""
@@ -1808,8 +2130,16 @@ class wpwaCDM(FLRW):
             z = np.asarray(z)
         zp1 = 1.0 + z
         apiv = 1.0 / (1.0 + self._zp)
-        return zp1**(3 * (1 + self._wp + apiv * self._wa)) * \
-            exp(-3 * self._wa * z / zp1)
+        return zp1 ** (3 * (1 + self._wp + apiv * self._wa)) * \
+            np.exp(-3 * self._wa * z / zp1)
+
+    def __repr__(self):
+        retstr = "{0:s}H0={1:.3g}, Om0={2:.3g}, Ode0={3:.3g}, wp={4:.3g}, "\
+                 "wa={5:.3g}, zp={6:.3g}, Tcmb0={7:.4g}, Neff={8:.3g}, "\
+                 "m_nu={9:s})"
+        return retstr.format(self._namelead(), self._H0, self._Om0,
+                             self._Ode0, self._wp, self._wa, self._zp,
+                             self._Tcmb0, self._Neff, self.m_nu)
 
 class w0wzCDM(FLRW):
     """FLRW cosmology with a variable dark energy equation of state
@@ -1820,62 +2150,67 @@ class w0wzCDM(FLRW):
 
     This form is not recommended for z > 1.
 
-    Examples
-    --------
-    >>> from astro.cosmology import wawzCDM
-    >>> cosmo = wawzCDM(H0=70, Om0=0.3, Ode0=0.7, w0=-0.9, wz=0.2)
+    Parameters
+    ----------
 
-    The comoving distance in Mpc at redshift z:
+    H0 : float or astropy.units.Quantity
+        Hubble constant at z = 0. If a float, must be in [km/sec/Mpc]
 
-    >>> dc = cosmo.comoving_distance(z)
-    """
+    Om0 : float
+        Omega matter: density of non-relativistic matter in units of the
+        critical density at z=0.
 
-    def __init__(self, H0, Om0, Ode0, w0=-1., wz=0., Tcmb0=2.725,
-                 Neff=3.04, name='w0wzCDM'):
-        """ Initializer.
+    Ode0 : float
+        Omega dark energy: density of dark energy in units of the critical
+        density at z=0.
 
-        Parameters
-        ----------
-        H0 : float
-          Hubble constant in [km/sec/Mpc] at z=0
+    Ok0 : float
+        Omega curvature: equivalent curvature density in units of the critical
+        density at z=0.
 
-        Om0 : float
-          Omega matter: density of non-relativistic matter in units
-          of the critical density at z=0.
+    w0 : float
+        Dark energy equation of state at z=0. This is pressure/density for dark
+        energy in units where c=1. A cosmological constant has w0=-1.0.
 
-        Ode0 : float
-          Omega dark energy: density of dark energy in units
-          of the critical density at z=0.
+    wz : float
+        Derivative of the dark energy equation of state with respect to z.
 
-        Ok0 : float
-          Omega curvature: equivalent curvature density in units
-          of the critical density at z=0.
+    Tcmb0 : float or astropy.units.Quantity
+        Temperature of the CMB z=0. If a float, must be in [K]. Default: 2.725.
 
-        w0 : float
-          Dark energy equation of state at z=0.
-          This is pressure/density for dark energy in units where c=1.
-          A cosmological constant has w0=-1.0.
+    Neff : float
+        Effective number of Neutrino species. Default 3.04.
 
-        wz : float
-          Derivative of the dark energy equation of state with respect to z.
+    m_nu : float or ndarray or astropy.units.Quantity
+        Mass of each neutrino species, in eV. If this is a float or scalar
+        Quantity, then all neutrino species are assumed to have that mass. If a
+        ndarray or array Quantity, then these are the values of the mass of
+        each species. The actual number of neutrino species (and hence the
+        number of elements of m_nu if it is not scalar) must be the floor of
+        Neff. Usually this means you must provide three neutrino masses unless
+        you are considering something like a sterile neutrino.
 
-        Tcmb0 : float
-          Temperature of the CMB in Kelvin at z=0 (def: 2.725)
+    name : str
+        Optional name for this cosmological object.
 
-        Neff : float
-          Effective number of Neutrino species (def: 3.04)
+    Examples
+    --------
+    >>> from astropy.cosmology import w0wzCDM
+    >>> cosmo = w0wzCDM(H0=70, Om0=0.3, Ode0=0.7, w0=-0.9, wz=0.2)
 
-        name : string
-          Optional name for this cosmological object.
-        """
-        FLRW.__init__(self, H0, Om0, Ode0, Tcmb0, Neff, name=name)
+    The comoving distance in Mpc at redshift z:
+
+    >>> z = 0.5
+    >>> dc = cosmo.comoving_distance(z)
+    """
+
+    def __init__(self, H0, Om0, Ode0, w0=-1., wz=0., Tcmb0=2.725,
+                 Neff=3.04, m_nu=u.Quantity(0.0, u.eV), name=None):
+
+        FLRW.__init__(self, H0, Om0, Ode0, Tcmb0, Neff, m_nu, name=name)
         self._w0 = float(w0)
         self._wz = float(wz)
 
-    def __repr__(self):
-        return "%s(H0=%.3g, Om0=%.3g, Ode0=%.3g, w0=%.3g, wz=%.3g)" % \
-            (self.name, self._H0, self._Om0, self._Ode0, self._w0, self._wz)
-
     @property
     def w0(self):
         """ Dark energy equation of state at z=0"""
@@ -1940,7 +2275,16 @@ class w0wzCDM(FLRW):
         if isiterable(z):
             z = np.asarray(z)
         zp1 = 1.0 + z
-        return zp1**(3 * (1 + self._w0 - self._wz)) * exp(-3 * self._wz * z)
+        return zp1 ** (3 * (1 + self._w0 - self._wz)) *\
+            np.exp(-3 * self._wz * z)
+
+    def __repr__(self):
+        retstr = "{0:s}H0={1:.3g}, Om0={2:.3g}, "\
+                 "Ode0={3:.3g}, w0={4:.3g}, wz={5:.3g} Tcmb0={6:.4g}, "\
+                 "Neff={7:.3g}, m_nu={8:s})"
+        return retstr.format(self._namelead(), self._H0, self._Om0, 
+                             self._Ode0, self._w0, self._wz, self._Tcmb0, 
+                             self._Neff, self.m_nu)
 
 # Pre-defined cosmologies. This loops over the parameter sets in the
 # parameters module and creates a LambdaCDM or FlatLambdaCDM instance
@@ -1952,12 +2296,15 @@ for key in parameters.available:
     par = getattr(parameters, key)
     if par['flat']:
         cosmo = FlatLambdaCDM(par['H0'], par['Om0'], Tcmb0=par['Tcmb0'],
-                              Neff=par['Neff'], name=key)
+                              Neff=par['Neff'],
+                              m_nu=u.Quantity(par['m_nu'], u.eV),
+                              name=key)
+        cosmo.__doc__ = "%s instance of FlatLambdaCDM cosmology\n\n(from %s)" % (key, par['reference'])
     else:
         cosmo = LambdaCDM(par['H0'], par['Om0'], par['Ode0'],
                           Tcmb0=par['Tcmb0'], Neff=par['Neff'],
-                          m_nu=par['m_nu'], name=key)
-    cosmo.__doc__ = "%s cosmology\n\n(from %s)" % (key, par['reference'])
+                          m_nu=u.Quantity(par['m_nu'], u.eV), name=key)
+        cosmo.__doc__ = "%s instance of LambdaCDM cosmology\n\n(from %s)" % (key, par['reference'])
     setattr(sys.modules[__name__], key, cosmo)
 
 # don't leave these variables floating around in the namespace
@@ -1981,7 +2328,7 @@ def get_cosmology_from_string(arg):
             cosmo = getattr(sys.modules[__name__], arg)
         except AttributeError:
             s = "Unknown cosmology '%s'. Valid cosmologies:\n%s" % (
-                    arg, parameters.available)
+                arg, parameters.available)
             raise ValueError(s)
     return cosmo
 
@@ -1991,7 +2338,7 @@ _current = get_cosmology_from_string(DEFAULT_COSMOLOGY())
 def get_current():
     """ Get the current cosmology.
 
-    If no current has been set, the WMAP7 comology is returned and a
+    If no current has been set, the WMAP9 comology is returned and a
     warning is given.
 
     Returns
@@ -2004,8 +2351,8 @@ def get_current():
     """
     if _current is None:
         warnings.warn('No default cosmology has been specified, '
-                      'using 7-year WMAP.')
-        return WMAP7
+                      'using 9-year WMAP.', AstropyUserWarning)
+        return WMAP9
 
     return _current
 
diff --git a/astropy/cosmology/funcs.py b/astropy/cosmology/funcs.py
index 77a7981..c178292 100644
--- a/astropy/cosmology/funcs.py
+++ b/astropy/cosmology/funcs.py
@@ -4,6 +4,7 @@ Convenience functions for `astropy.cosmology`.
 """
 from .core import get_current as _get_current
 
+
 def kpc_comoving_per_arcmin(z, cosmo=None):
     """ Separation in transverse comoving kpc corresponding to an
     arcminute at redshift `z`.
@@ -15,7 +16,7 @@ def kpc_comoving_per_arcmin(z, cosmo=None):
 
     Returns
     -------
-    d : ndarray, or float if input scalar
+    d : astropy.units.Quantity
       The distance in comoving kpc corresponding to an arcmin at each
       input redshift.
     """
@@ -35,7 +36,7 @@ def kpc_proper_per_arcmin(z, cosmo=None):
 
     Returns
     -------
-    d : ndarray, or float if input scalar
+    d : astropy.units.Quantity
       The distance in proper kpc corresponding to an arcmin at each
       input redshift.
     """
@@ -55,7 +56,7 @@ def arcsec_per_kpc_comoving(z, cosmo=None):
 
     Returns
     -------
-    theta : ndarray, or float if input scalar
+    theta : astropy.units.Quantity
       The angular separation in arcsec corresponding to a comoving kpc
       at each input redshift.
     """
@@ -75,7 +76,7 @@ def arcsec_per_kpc_proper(z, cosmo=None):
 
     Returns
     -------
-    theta : ndarray, or float if input scalar
+    theta : astropy.units.Quantity
       The angular separation in arcsec corresponding to a proper kpc
       at each input redshift.
     """
@@ -97,7 +98,7 @@ def distmod(z, cosmo=None):
 
     Returns
     -------
-    distmod : ndarray, or float if input scalar
+    distmod : astropy.units.Quantity
       Distance modulus at each input redshift.
     """
     if cosmo is None:
@@ -115,7 +116,7 @@ def H(z, cosmo=None):
 
     Returns
     -------
-    H : ndarray, or float if input scalar
+    H : astropy.units.Quantity
       Hubble parameter at each input redshift.
     """
     if cosmo is None:
@@ -135,7 +136,7 @@ def scale_factor(z, cosmo=None):
 
     Returns
     -------
-    distmod : ndarray, or float if input scalar
+    scalefac : ndarray, or float if input scalar
       Scale factor at each input redshift.
     """
     if cosmo is None:
@@ -153,7 +154,7 @@ def critical_density(z, cosmo=None):
 
     Returns
     -------
-    critdens : ndarray, or float if input scalar
+    critdens : astropy.units.Quantity
       Critical density at each input redshift.
     """
     if cosmo is None:
@@ -174,7 +175,7 @@ def lookback_time(z, cosmo=None):
 
     Returns
     -------
-    t : ndarray, or float if input scalar
+    t : astropy.units.Quantity
       Lookback time at each input redshift.
     """
     if cosmo is None:
@@ -195,7 +196,7 @@ def comoving_distance(z, cosmo=None):
 
     Returns
     -------
-    codist : ndarray, or float if input scalar
+    codist : astropy.units.Quantity
       Comoving distance at each input redshift.
     """
     if cosmo is None:
@@ -217,7 +218,7 @@ def angular_diameter_distance(z, cosmo=None):
 
     Returns
     -------
-    angdist : ndarray, or float if input scalar
+    angdist : astropy.units.Quantity
       Angular diameter distance at each input redshift.
     """
     if cosmo is None:
@@ -238,7 +239,7 @@ def luminosity_distance(z, cosmo=None):
 
     Returns
     -------
-    lumdist : ndarray, or float if input scalar
+    lumdist : astropy.units.Quantity
       Angular diameter distance at each input redshift.
     """
     if cosmo is None:
diff --git a/astropy/cosmology/parameters.py b/astropy/cosmology/parameters.py
index 730879e..a4a7f50 100644
--- a/astropy/cosmology/parameters.py
+++ b/astropy/cosmology/parameters.py
@@ -25,91 +25,98 @@ The list of cosmologies available are given by the tuple
 `available`. Current cosmologies available:
 
 Planck13 parameters from Planck Collaboration 2013, arXiv:1303.5076
- (Paper XVI), Table 5 (Planck + WP + lensing + highL + BAO)
+ (Paper XVI), Table 5 (Planck + WP + highL + BAO)
 
-WMAP 9 year parameters from Hinshaw et al. 2012, arXiv 1212.5226.
- Table 4 (WMAP9 + eCMB + BAO + H0)
+WMAP 9 year parameters from Hinshaw et al. 2013, ApJS, 208, 19,
+doi: 10.1088/0067-0049/208/2/19. Table 4 (WMAP9 + eCMB + BAO + H0)
 
-WMAP 7 year parameters from Komatsu et al. 2011, ApJS, 192, 18. Table
-1 (WMAP + BAO + H0 ML).
+WMAP 7 year parameters from Komatsu et al. 2011, ApJS, 192, 18,
+doi: 10.1088/0067-0049/192/2/18. Table 1 (WMAP + BAO + H0 ML).
+
+WMAP 5 year parameters from Komatsu et al. 2009, ApJS, 180, 330,
+doi: 10.1088/0067-0049/180/2/330. Table 1 (WMAP + BAO + SN ML).
 
-WMAP 5 year parameters from Komatsu et al. 2009, ApJS, 180, 330. Table
-1 (WMAP + BAO + SN ML).
 """
 
+# Note: if you add a new cosmology, please also update the table
+# in the 'Built-in Cosmologies' section of astropy/docs/cosmology/index.rst
+# in addition to the list above.
+
 # Ade et al. Planck 2013 paper XVI Table 5 penultimate column (best fit)
 Planck13 = dict(
-    Oc0 = 0.25886,
-    Ob0 = 0.048252,
-    Om0 = 0.30712,
-    H0 = 67.77,
-    n = 0.9611,
-    sigma8 = 0.8288,
-    tau = 0.0952,
-    z_reion = 11.52,
-    t0 = 13.7965,
-    Tcmb0 = 2.7255,
-    Neff = 3.046,
-    flat = True,
+    Oc0=0.25886,
+    Ob0=0.048252,
+    Om0=0.30712,
+    H0=67.77,
+    n=0.9611,
+    sigma8=0.8288,
+    tau=0.0952,
+    z_reion=11.52,
+    t0=13.7965,
+    Tcmb0=2.7255,
+    Neff=3.046,
+    flat=True,
+    m_nu=[0., 0., 0.06],
     reference=("Planck Collaboration 2013, Paper XVI, arXiv:1303.5076"
                " Table 5 (Planck + WP + highL + BAO)")
 )
 
 
-# Hinshaw et al. 2012, WMAP9 + eCMB + BAO + H0 (Table 4, last column)
 WMAP9 = dict(
-    Oc0 = 0.2402,
-    Ob0 = 0.04628,
-    Om0 = 0.2865,
-    H0 = 69.32,
-    n = 0.9608,
-    sigma8 = 0.820,
-    tau = 0.081,
-    z_reion = 10.1,
-    t0 = 13.772,
-    Tcmb0 = 2.725,
-    Neff = 3.04,
-    flat = True,
-    reference = ("Hinshaw et al. 2012, arXiv 1212.5226."
-                 " Table 4 (WMAP + eCMB + BAO + H0)")
-    )
-
-# Komatsu et al. 2011, WMAP + BAO + H0 ML (table 1).
+    Oc0=0.2402,
+    Ob0=0.04628,
+    Om0=0.2865,
+    H0=69.32,
+    n=0.9608,
+    sigma8=0.820,
+    tau=0.081,
+    z_reion=10.1,
+    t0=13.772,
+    Tcmb0=2.725,
+    Neff=3.04,
+    m_nu=0.0,
+    flat=True,
+    reference=("Hinshaw et al. 2013, ApJS, 208, 19, "
+               "doi: 10.1088/0067-0049/208/2/19. "
+               "Table 4 (WMAP9 + eCMB + BAO + H0, last column)")
+)
 
 WMAP7 = dict(
-    Oc0  = 0.226,
-    Ob0  = 0.0455,
-    Om0  = 0.272,
-    H0 = 70.4,
-    n = 0.967,
-    sigma8 = 0.810,
-    tau = 0.085,
-    z_reion = 10.3,
-    t0 = 13.76,
-    Tcmb0 = 2.725,
-    Neff = 3.04,
-    flat = True,
-    reference = ("Komatsu et al. 2011, ApJS, 192, 18. "
-                 " Table 1 (WMAP + BAO + H0 ML)")
-    )
-
-# Komatsu et al. 2009 WMAP + BAO + SN ML (table 1).
+    Oc0=0.226,
+    Ob0=0.0455,
+    Om0=0.272,
+    H0=70.4,
+    n=0.967,
+    sigma8=0.810,
+    tau=0.085,
+    z_reion=10.3,
+    t0=13.76,
+    Tcmb0=2.725,
+    Neff=3.04,
+    m_nu=0.0,
+    flat=True,
+    reference=("Komatsu et al. 2011, ApJS, 192, 18, "
+               "doi: 10.1088/0067-0049/192/2/18. "
+               "Table 1 (WMAP + BAO + H0 ML).")
+)
 
 WMAP5 = dict(
-    Oc0  = 0.231,
-    Ob0  = 0.0459,
-    Om0  = 0.277,
-    H0 = 70.2,
-    n = 0.962,
-    sigma8 = 0.817,
-    tau = 0.088,
-    z_reion = 11.3,
-    t0 = 13.72,
-    Tcmb0 = 2.725,
-    Neff = 3.04,
-    flat = True,
-    reference = ("Komatsu et al. 2009, ApJS, 180, 330. "
-                 " Table 1 (WMAP + BAO + SN ML)")
-    )
+    Oc0=0.231,
+    Ob0=0.0459,
+    Om0=0.277,
+    H0=70.2,
+    n=0.962,
+    sigma8=0.817,
+    tau=0.088,
+    z_reion=11.3,
+    t0=13.72,
+    Tcmb0=2.725,
+    Neff=3.04,
+    m_nu=0.0,
+    flat=True,
+    reference=("Komatsu et al. 2009, ApJS, 180, 330, "
+               "doi: 10.1088/0067-0049/180/2/330. "
+               "Table 1 (WMAP + BAO + SN ML).")
+)
 
 available = tuple(k for k in locals() if not k.startswith('_'))
diff --git a/astropy/cosmology/tests/test_cosmology.py b/astropy/cosmology/tests/test_cosmology.py
index 373ad04..509399b 100644
--- a/astropy/cosmology/tests/test_cosmology.py
+++ b/astropy/cosmology/tests/test_cosmology.py
@@ -1,16 +1,135 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
 from StringIO import StringIO
-from .. import core, funcs
+
 import numpy as np
+
+from .. import core, funcs
 from ...tests.helper import pytest
+from ... import units as u
 
 try:
-    import scipy
+    import scipy  # pylint: disable=W0611
 except ImportError:
     HAS_SCIPY = False
 else:
     HAS_SCIPY = True
 
+
+def setup_function(function):
+    # Make sure that tests don't affect default cosmology
+    core.set_current('no_default')
+
+
+def teardown_function(function):
+    # Make sure that tests don't affect default cosmology
+    core.set_current('no_default')
+
+
+def test_basic():
+    cosmo = core.FlatLambdaCDM(H0=70, Om0=0.27, Tcmb0=2.0, Neff=3.04)
+    assert np.allclose(cosmo.Om0, 0.27)
+    assert np.allclose(cosmo.Ode0, 0.729975, rtol=1e-4)
+    assert np.allclose(cosmo.Ogamma0, 1.463285e-5, rtol=1e-4)
+    assert np.allclose(cosmo.Onu0, 1.01026e-5, rtol=1e-4)
+    assert np.allclose(cosmo.Ok0, 0.0)
+    assert np.allclose(cosmo.Om0 + cosmo.Ode0 + cosmo.Ogamma0 + cosmo.Onu0,
+                       1.0, rtol=1e-6)
+    assert np.allclose(cosmo.Om(1) + cosmo.Ode(1) + cosmo.Ogamma(1) +
+                       cosmo.Onu(1), 1.0, rtol=1e-6)
+    assert np.allclose(cosmo.Tcmb0.value, 2.0)
+    assert np.allclose(cosmo.Tnu0.value, 1.4275317, rtol=1e-5)
+    assert np.allclose(cosmo.Neff, 3.04)
+    assert np.allclose(cosmo.h, 0.7)
+    assert np.allclose(cosmo.H0.value, 70.0)
+
+    # Make sure setting them as quantities gives the same results
+    H0 = u.Quantity(70, u.km / (u.s * u.Mpc))
+    T = u.Quantity(2.0, u.K)
+    cosmo = core.FlatLambdaCDM(H0=H0, Om0=0.27, Tcmb0=T, Neff=3.04)
+    assert np.allclose(cosmo.Om0, 0.27)
+    assert np.allclose(cosmo.Ode0, 0.729975, rtol=1e-4)
+    assert np.allclose(cosmo.Ogamma0, 1.463285e-5, rtol=1e-4)
+    assert np.allclose(cosmo.Onu0, 1.01026e-5, rtol=1e-4)
+    assert np.allclose(cosmo.Ok0, 0.0)
+    assert np.allclose(cosmo.Om0 + cosmo.Ode0 + cosmo.Ogamma0 + cosmo.Onu0,
+                       1.0, rtol=1e-6)
+    assert np.allclose(cosmo.Om(1) + cosmo.Ode(1) + cosmo.Ogamma(1) +
+                       cosmo.Onu(1), 1.0, rtol=1e-6)
+    assert np.allclose(cosmo.Tcmb0.value, 2.0)
+    assert np.allclose(cosmo.Tnu0.value, 1.4275317, rtol=1e-5)
+    assert np.allclose(cosmo.Neff, 3.04)
+    assert np.allclose(cosmo.h, 0.7)
+    assert np.allclose(cosmo.H0.value, 70.0)
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_units():
+    """ Test if the right units are being returned"""
+
+    cosmo = core.FlatLambdaCDM(H0=70, Om0=0.27, Tcmb0=2.0)
+    assert cosmo.comoving_distance(1.0).unit == u.Mpc
+    assert cosmo.angular_diameter_distance(1.0).unit == u.Mpc
+    assert cosmo.angular_diameter_distance_z1z2(1.0, 2.0).unit == u.Mpc
+    assert cosmo.comoving_distance(1.0).unit == u.Mpc
+    assert cosmo.luminosity_distance(1.0).unit == u.Mpc
+    assert cosmo.lookback_time(1.0).unit == u.Gyr
+    assert cosmo.H0.unit == u.km / u.Mpc / u.s
+    assert cosmo.H(1.0).unit == u.km / u.Mpc / u.s
+    assert cosmo.Tcmb0.unit == u.K
+    assert cosmo.Tcmb(1.0).unit == u.K
+    assert cosmo.Tcmb([0.0, 1.0]).unit == u.K
+    assert cosmo.Tnu0.unit == u.K
+    assert cosmo.Tnu(1.0).unit == u.K
+    assert cosmo.Tnu([0.0, 1.0]).unit == u.K
+    assert cosmo.arcsec_per_kpc_comoving(1.0).unit == u.arcsec / u.kpc
+    assert cosmo.arcsec_per_kpc_proper(1.0).unit == u.arcsec / u.kpc
+    assert cosmo.kpc_comoving_per_arcmin(1.0).unit == u.kpc / u.arcmin
+    assert cosmo.kpc_proper_per_arcmin(1.0).unit == u.kpc / u.arcmin
+    assert cosmo.critical_density(1.0).unit == u.g / u.cm ** 3
+    assert cosmo.comoving_volume(1.0).unit == u.Mpc ** 3
+    assert cosmo.age(1.0).unit == u.Gyr
+    assert cosmo.distmod(1.0).unit == u.mag
+
+def test_repr():
+    """ Test string representation of built in classes"""
+    cosmo = core.LambdaCDM(70, 0.3, 0.5)
+    expected = 'LambdaCDM(H0=70 km / (Mpc s), Om0=0.3, Ode0=0.5, Tcmb0=2.725 K, Neff=3.04, m_nu=[ 0.  0.  0.] eV)'
+    assert "{0:s}".format(cosmo) == expected
+
+    cosmo = core.LambdaCDM(70, 0.3, 0.5, m_nu=u.Quantity(0.01, u.eV))
+    expected = 'LambdaCDM(H0=70 km / (Mpc s), Om0=0.3, Ode0=0.5, Tcmb0=2.725 K, Neff=3.04, m_nu=[ 0.01  0.01  0.01] eV)'
+    assert "{0:s}".format(cosmo) == expected
+
+    cosmo = core.FlatLambdaCDM(50.0, 0.27)
+    expected = 'FlatLambdaCDM(H0=50 km / (Mpc s), Om0=0.27, Tcmb0=2.725 K, Neff=3.04, m_nu=[ 0.  0.  0.] eV)'
+    assert "{0:s}".format(cosmo) == expected
+
+    cosmo = core.wCDM(60.0, 0.27, 0.6, w0=-0.8, name='test1')
+    expected = 'wCDM(name="test1", H0=60 km / (Mpc s), Om0=0.27, Ode0=0.6, w0=-0.8, Tcmb0=2.725 K, Neff=3.04, m_nu=[ 0.  0.  0.] eV)'
+    assert "{0:s}".format(cosmo) == expected
+
+    cosmo = core.FlatwCDM(65.0, 0.27, w0=-0.6, name='test2')
+    expected = 'FlatwCDM(name="test2", H0=65 km / (Mpc s), Om0=0.27, w0=-0.6, Tcmb0=2.725 K, Neff=3.04, m_nu=[ 0.  0.  0.] eV)'
+    assert "{0:s}".format(cosmo) == expected
+
+    cosmo = core.w0waCDM(60.0, 0.25, 0.4, w0=-0.6, wa=0.1, name='test3')
+    expected = 'w0waCDM(name="test3", H0=60 km / (Mpc s), Om0=0.25, Ode0=0.4, w0=-0.6, wa=0.1, Tcmb0=2.725 K, Neff=3.04, m_nu=[ 0.  0.  0.] eV)'
+    assert "{0:s}".format(cosmo) == expected
+
+    cosmo = core.Flatw0waCDM(55.0, 0.35, w0=-0.9, wa=-0.2, name='test4')
+    expected = 'Flatw0waCDM(name="test4", H0=55 km / (Mpc s), Om0=0.35, w0=-0.9, Tcmb0=2.725 K, Neff=3.04, m_nu=[ 0.  0.  0.] eV)'
+    assert "{0:s}".format(cosmo) == expected
+
+    cosmo = core.wpwaCDM(50.0, 0.3, 0.3, wp=-0.9, wa=-0.2, zp=0.3, name='test5')
+    expected = 'wpwaCDM(name="test5", H0=50 km / (Mpc s), Om0=0.3, Ode0=0.3, wp=-0.9, wa=-0.2, zp=0.3, Tcmb0=2.725 K, Neff=3.04, m_nu=[ 0.  0.  0.] eV)'
+    assert "{0:s}".format(cosmo) == expected
+
+    cosmo = core.w0wzCDM(55.0, 0.4, 0.8, w0=-1.05, wz=-0.2,
+                         m_nu=u.Quantity([0.001, 0.01, 0.015], u.eV))
+    expected = 'w0wzCDM(H0=55 km / (Mpc s), Om0=0.4, Ode0=0.8, w0=-1.05, wz=-0.2 Tcmb0=2.725 K, Neff=3.04, m_nu=[ 0.001  0.01   0.015] eV)'
+    assert "{0:s}".format(cosmo) == expected
+
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_flat_z1():
     """ Test a flat cosmology at z=1 against several other on-line
@@ -28,38 +147,50 @@ def test_flat_z1():
     # iCosmos: http://www.icosmos.co.uk/index.html
 
     # The order of values below is Wright, Kempner, iCosmos'
-    assert np.allclose(cosmo.comoving_distance(z),
+    assert np.allclose(cosmo.comoving_distance(z).value,
                        [3364.5, 3364.8, 3364.7988], rtol=1e-4)
-    assert np.allclose(cosmo.angular_diameter_distance(z),
+    assert np.allclose(cosmo.angular_diameter_distance(z).value,
                        [1682.3, 1682.4, 1682.3994], rtol=1e-4)
-    assert np.allclose(cosmo.luminosity_distance(z),
+    assert np.allclose(cosmo.luminosity_distance(z).value,
                        [6729.2, 6729.6, 6729.5976], rtol=1e-4)
-    assert np.allclose(cosmo.lookback_time(z),
-                       [7.841, 7.84178, 7.843],  rtol=1e-3)
+    assert np.allclose(cosmo.lookback_time(z).value,
+                       [7.841, 7.84178, 7.843], rtol=1e-3)
 
 
-#This class is to test whether the routines work correctly
+# This class is to test whether the routines work correctly
 # if one only overloads w(z)
-class test_cos(core.FLRW):
+class test_cos_sub(core.FLRW):
+
     def __init__(self):
         core.FLRW.__init__(self, 70.0, 0.27, 0.73, Tcmb0=0.0, name="test_cos")
         self._w0 = -0.9
 
-    def w(self,z):
-        return self._w0*np.ones_like(z)
+    def w(self, z):
+        return self._w0 * np.ones_like(z)
+
 
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_de_subclass():
-    #This is the comparison object
+    # This is the comparison object
     z = [0.2, 0.4, 0.6, 0.9]
     cosmo = core.wCDM(H0=70, Om0=0.27, Ode0=0.73, w0=-0.9, Tcmb0=0.0)
-    #Values taken from Ned Wrights advanced cosmo calcluator, Aug 17 2012
-    assert np.allclose(cosmo.luminosity_distance(z),
+    # Values taken from Ned Wrights advanced cosmo calcluator, Aug 17 2012
+    assert np.allclose(cosmo.luminosity_distance(z).value,
                        [975.5, 2158.2, 3507.3, 5773.1], rtol=1e-3)
-    #Now try the subclass that only gives w(z)
-    cosmo = test_cos()
-    assert np.allclose(cosmo.luminosity_distance(z),
+    # Now try the subclass that only gives w(z)
+    cosmo = test_cos_sub()
+    assert np.allclose(cosmo.luminosity_distance(z).value,
                        [975.5, 2158.2, 3507.3, 5773.1], rtol=1e-3)
+    # Test efunc
+    assert np.allclose(cosmo.efunc(1.0), 1.7489240754, rtol=1e-5)
+    assert np.allclose(cosmo.efunc([0.5, 1.0]),
+                       [1.31744953, 1.7489240754], rtol=1e-5)
+    assert np.allclose(cosmo.inv_efunc([0.5, 1.0]),
+                       [0.75904236, 0.57178011], rtol=1e-5)
+    # Test de_density_scale
+    assert np.allclose(cosmo.de_density_scale(1.0), 1.23114444, rtol=1e-4)
+    assert np.allclose(cosmo.de_density_scale([0.5, 1.0]),
+                       [1.12934694, 1.23114444], rtol=1e-4)
 
 
 @pytest.mark.skipif('not HAS_SCIPY')
@@ -67,33 +198,84 @@ def test_varyde_lumdist_mathematica():
     """Tests a few varying dark energy EOS models against a mathematica
     computation"""
 
-    #w0wa models
-    z = np.array([0.2,0.4,0.9,1.2])
+    # w0wa models
+    z = np.array([0.2, 0.4, 0.9, 1.2])
     cosmo = core.w0waCDM(H0=70, Om0=0.2, Ode0=0.8, w0=-1.1, wa=0.2, Tcmb0=0.0)
-    assert np.allclose(cosmo.luminosity_distance(z),
-                       [1004.0,2268.62,6265.76,9061.84], rtol=1e-4)
+    assert np.allclose(cosmo.luminosity_distance(z).value,
+                       [1004.0, 2268.62, 6265.76, 9061.84], rtol=1e-4)
+    assert np.allclose(cosmo.de_density_scale(0.0), 1.0, rtol=1e-5)
+    assert np.allclose(cosmo.de_density_scale([0.0, 0.5, 1.5]),
+                       [1.0, 0.9246310669529021, 0.9184087000251957])
+
     cosmo = core.w0waCDM(H0=70, Om0=0.3, Ode0=0.7, w0=-0.9, wa=0.0, Tcmb0=0.0)
-    assert np.allclose(cosmo.luminosity_distance(z),
-                       [971.667,2141.67,5685.96,8107.41], rtol=1e-4)
+    assert np.allclose(cosmo.luminosity_distance(z).value,
+                       [971.667, 2141.67, 5685.96, 8107.41], rtol=1e-4)
     cosmo = core.w0waCDM(H0=70, Om0=0.3, Ode0=0.7, w0=-0.9, wa=-0.5, Tcmb0=0.0)
-    assert np.allclose(cosmo.luminosity_distance(z),
-                       [974.087,2157.08,5783.92,8274.08], rtol=1e-4)
+    assert np.allclose(cosmo.luminosity_distance(z).value,
+                       [974.087, 2157.08, 5783.92, 8274.08], rtol=1e-4)
 
-    #wpwa models
+    # wpwa models
     cosmo = core.wpwaCDM(H0=70, Om0=0.2, Ode0=0.8, wp=-1.1, wa=0.2, zp=0.5,
                          Tcmb0=0.0)
-    assert np.allclose(cosmo.luminosity_distance(z),
-                       [1010.81,2294.45,6369.45,9218.95], rtol=1e-4)
+    assert np.allclose(cosmo.luminosity_distance(z).value,
+                       [1010.81, 2294.45, 6369.45, 9218.95], rtol=1e-4)
     cosmo = core.wpwaCDM(H0=70, Om0=0.2, Ode0=0.8, wp=-1.1, wa=0.2, zp=0.9,
                          Tcmb0=0.0)
-    assert np.allclose(cosmo.luminosity_distance(z),
-                       [1013.68,2305.3,6412.37,9283.33], rtol=1e-4)
+    assert np.allclose(cosmo.luminosity_distance(z).value,
+                       [1013.68, 2305.3, 6412.37, 9283.33], rtol=1e-4)
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_omatter():
+    # Test Om evolution
+    tcos = core.FlatLambdaCDM(70.0, 0.3)
+    assert np.allclose(tcos.Om0, 0.3)
+    assert np.allclose(tcos.H0.value, 70.0)
+    assert np.allclose(tcos.Om(0), 0.3)
+    z = np.array([0.0, 0.5, 1.0, 2.0])
+    assert np.allclose(tcos.Om(z), [0.3, 0.59112134, 0.77387435, 0.91974179],
+                       rtol=1e-4)
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_ocurv():
+    # Test Ok evolution
+    # Flat, boring case
+    tcos = core.FlatLambdaCDM(70.0, 0.3)
+    assert np.allclose(tcos.Ok0, 0.0)
+    assert np.allclose(tcos.Ok(0), 0.0)
+    z = np.array([0.0, 0.5, 1.0, 2.0])
+    assert np.allclose(tcos.Ok(z), [0.0, 0.0, 0.0, 0.0],
+                       rtol=1e-6)
+
+    # Not flat
+    tcos = core.LambdaCDM(70.0, 0.3, 0.5, Tcmb0=u.Quantity(0.0, u.K))
+    assert np.allclose(tcos.Ok0, 0.2)
+    assert np.allclose(tcos.Ok(0), 0.2)
+    assert np.allclose(tcos.Ok(z), [0.2, 0.22929936, 0.21621622, 0.17307692],
+                       rtol=1e-4)
+
+    # Test the sum; note that Ogamma/Onu are 0
+    assert np.allclose(tcos.Ok(z) + tcos.Om(z) + tcos.Ode(z),
+                       [1.0, 1.0, 1.0, 1.0], rtol=1e-5)
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_ode():
+    # Test Ode evolution, turn off neutrinos, cmb
+    tcos = core.FlatLambdaCDM(70.0, 0.3, Tcmb0=0)
+    assert np.allclose(tcos.Ode0, 0.7)
+    assert np.allclose(tcos.Ode(0), 0.7)
+    z = np.array([0.0, 0.5, 1.0, 2.0])
+    assert np.allclose(tcos.Ode(z), [0.7, 0.408759, 0.2258065, 0.07954545],
+                       rtol=1e-5)
+
 
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_ogamma():
     """Tests the effects of changing the temperature of the CMB"""
 
-    #Tested against Ned Wright's advanced cosmology calculator,
+    # Tested against Ned Wright's advanced cosmology calculator,
     # Sep 7 2012.  The accuracy of our comparision is limited by
     # how many digits it outputs, which limits our test to about
     # 0.2% accuracy.  The NWACC does not allow one
@@ -107,89 +289,176 @@ def test_ogamma():
     # More accurate tests below using Mathematica
     z = np.array([1.0, 10.0, 500.0, 1000.0])
     cosmo = core.FlatLambdaCDM(H0=70, Om0=0.3, Tcmb0=0, Neff=3)
-    assert np.allclose(cosmo.angular_diameter_distance(z),
+    assert np.allclose(cosmo.angular_diameter_distance(z).value,
                        [1651.9, 858.2, 26.855, 13.642], rtol=5e-4)
     cosmo = core.FlatLambdaCDM(H0=70, Om0=0.3, Tcmb0=2.725, Neff=3)
-    assert np.allclose(cosmo.angular_diameter_distance(z),
+    assert np.allclose(cosmo.angular_diameter_distance(z).value,
                        [1651.8, 857.9, 26.767, 13.582], rtol=5e-4)
     cosmo = core.FlatLambdaCDM(H0=70, Om0=0.3, Tcmb0=4.0, Neff=3)
-    assert np.allclose(cosmo.angular_diameter_distance(z),
+    assert np.allclose(cosmo.angular_diameter_distance(z).value,
                        [1651.4, 856.6, 26.489, 13.405], rtol=5e-4)
 
-    #Next compare with doing the integral numerically in Mathematica,
+    # Next compare with doing the integral numerically in Mathematica,
     # which allows more precision in the test.  It is at least as
     # good as 0.01%, possibly better
     cosmo = core.FlatLambdaCDM(H0=70, Om0=0.3, Tcmb0=0, Neff=3.04)
-    assert np.allclose(cosmo.angular_diameter_distance(z),
+    assert np.allclose(cosmo.angular_diameter_distance(z).value,
                        [1651.91, 858.205, 26.8586, 13.6469], rtol=1e-5)
     cosmo = core.FlatLambdaCDM(H0=70, Om0=0.3, Tcmb0=2.725, Neff=3.04)
-    assert np.allclose(cosmo.angular_diameter_distance(z),
+    assert np.allclose(cosmo.angular_diameter_distance(z).value,
                        [1651.76, 857.817, 26.7688, 13.5841], rtol=1e-5)
     cosmo = core.FlatLambdaCDM(H0=70, Om0=0.3, Tcmb0=4.0, Neff=3.04)
-    assert np.allclose(cosmo.angular_diameter_distance(z),
+    assert np.allclose(cosmo.angular_diameter_distance(z).value,
                        [1651.21, 856.411, 26.4845, 13.4028], rtol=1e-5)
 
-    #Just to be really sure, we also do a version where the integral
+    # Just to be really sure, we also do a version where the integral
     # is analytic, which is a Ode = 0 flat universe.  In this case
     # Integrate(1/E(x),{x,0,z}) = 2 ( sqrt((1+Or z)/(1+z)) - 1 )/(Or - 1)
     # Recall that c/H0 * Integrate(1/E) is FLRW.comoving_distance.
-    Ogamma0h2 = 4*5.670373e-8/299792458.0**3 * 2.725**4 / 1.87837e-26
-    Onu0h2 = Ogamma0h2 * 7.0/8.0 * (4.0/11.0)**(4.0/3.0) * 3.04
-    Or0 = (Ogamma0h2 + Onu0h2) / 0.7**2
+    Ogamma0h2 = 4 * 5.670373e-8 / 299792458.0 ** 3 * 2.725 ** 4 / 1.87837e-26
+    Onu0h2 = Ogamma0h2 * 7.0 / 8.0 * (4.0 / 11.0) ** (4.0 / 3.0) * 3.04
+    Or0 = (Ogamma0h2 + Onu0h2) / 0.7 ** 2
     Om0 = 1.0 - Or0
     hubdis = 299792.458 / 70.0
     cosmo = core.FlatLambdaCDM(H0=70, Om0=Om0, Tcmb0=2.725, Neff=3.04)
     targvals = 2.0 * hubdis * \
         (np.sqrt((1.0 + Or0 * z) / (1.0 + z)) - 1.0) / (Or0 - 1.0)
-    assert np.allclose(cosmo.comoving_distance(z), targvals, rtol=1e-5)
+    assert np.allclose(cosmo.comoving_distance(z).value, targvals, rtol=1e-5)
 
-    #Try Tcmb0 = 4
-    Or0 *= (4.0/2.725)**4
+    # Try Tcmb0 = 4
+    Or0 *= (4.0 / 2.725) ** 4
     Om0 = 1.0 - Or0
     cosmo = core.FlatLambdaCDM(H0=70, Om0=Om0, Tcmb0=4.0, Neff=3.04)
     targvals = 2.0 * hubdis * \
         (np.sqrt((1.0 + Or0 * z) / (1.0 + z)) - 1.0) / (Or0 - 1.0)
-    assert np.allclose(cosmo.comoving_distance(z), targvals, rtol=1e-5)
+    assert np.allclose(cosmo.comoving_distance(z).value, targvals, rtol=1e-5)
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_tcmb():
+    cosmo = core.FlatLambdaCDM(70.4, 0.272, Tcmb0=3.0)
+    assert np.allclose(cosmo.Tcmb0.value, 3.0)
+    assert np.allclose(cosmo.Tcmb(2).value, 9.0)
+    z = [0.0, 1.0, 2.0, 3.0, 9.0]
+    assert np.allclose(cosmo.Tcmb(z).value,
+                       [3.0, 6.0, 9.0, 12.0, 30.0], rtol=1e-6)
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_tnu():
+    cosmo = core.FlatLambdaCDM(70.4, 0.272, Tcmb0=3.0)
+    assert np.allclose(cosmo.Tnu0.value, 2.1412975665108247, rtol=1e-6)
+    assert np.allclose(cosmo.Tnu(2).value, 6.423892699532474, rtol=1e-6)
+    z = [0.0, 1.0, 2.0, 3.0]
+    assert np.allclose(cosmo.Tnu(z), [2.14129757, 4.28259513,
+                                      6.4238927, 8.56519027], rtol=1e-6)
+
+
+def test_efunc_vs_invefunc():
+    # Test that efunc and inv_efunc give the same values
+    z0 = 0.5
+    z = np.array([0.5, 1.0, 2.0, 5.0])
+
+    # Below are the 'standard' included cosmologies
+    # We do the non-standard case in test_efunc_vs_invefunc_flrw,
+    # since it requires scipy
+    cosmo = core.LambdaCDM(70, 0.3, 0.5)
+    assert np.allclose(cosmo.efunc(z0), 1.0 / cosmo.inv_efunc(z0))
+    assert np.allclose(cosmo.efunc(z), 1.0 / cosmo.inv_efunc(z))
+    cosmo = core.LambdaCDM(70, 0.3, 0.5, m_nu=u.Quantity(0.01, u.eV))
+    assert np.allclose(cosmo.efunc(z0), 1.0 / cosmo.inv_efunc(z0))
+    assert np.allclose(cosmo.efunc(z), 1.0 / cosmo.inv_efunc(z))
+    cosmo = core.FlatLambdaCDM(50.0, 0.27)
+    assert np.allclose(cosmo.efunc(z0), 1.0 / cosmo.inv_efunc(z0))
+    assert np.allclose(cosmo.efunc(z), 1.0 / cosmo.inv_efunc(z))
+    cosmo = core.wCDM(60.0, 0.27, 0.6, w0=-0.8)
+    assert np.allclose(cosmo.efunc(z0), 1.0 / cosmo.inv_efunc(z0))
+    assert np.allclose(cosmo.efunc(z), 1.0 / cosmo.inv_efunc(z))
+    cosmo = core.FlatwCDM(65.0, 0.27, w0=-0.6)
+    assert np.allclose(cosmo.efunc(z0), 1.0 / cosmo.inv_efunc(z0))
+    assert np.allclose(cosmo.efunc(z), 1.0 / cosmo.inv_efunc(z))
+    cosmo = core.w0waCDM(60.0, 0.25, 0.4, w0=-0.6, wa=0.1)
+    assert np.allclose(cosmo.efunc(z0), 1.0 / cosmo.inv_efunc(z0))
+    assert np.allclose(cosmo.efunc(z), 1.0 / cosmo.inv_efunc(z))
+    cosmo = core.Flatw0waCDM(55.0, 0.35, w0=-0.9, wa=-0.2)
+    assert np.allclose(cosmo.efunc(z0), 1.0 / cosmo.inv_efunc(z0))
+    assert np.allclose(cosmo.efunc(z), 1.0 / cosmo.inv_efunc(z))
+    cosmo = core.wpwaCDM(50.0, 0.3, 0.3, wp=-0.9, wa=-0.2, zp=0.3)
+    assert np.allclose(cosmo.efunc(z0), 1.0 / cosmo.inv_efunc(z0))
+    assert np.allclose(cosmo.efunc(z), 1.0 / cosmo.inv_efunc(z))
+    cosmo = core.w0wzCDM(55.0, 0.4, 0.8, w0=-1.05, wz=-0.2)
+    assert np.allclose(cosmo.efunc(z0), 1.0 / cosmo.inv_efunc(z0))
+    assert np.allclose(cosmo.efunc(z), 1.0 / cosmo.inv_efunc(z))
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_efunc_vs_invefunc_flrw():
+    z0 = 0.5
+    z = np.array([0.5, 1.0, 2.0, 5.0])
+
+    # FLRW is abstract, so requires test_cos_sub defined earlier
+    # This requires scipy, unlike the built-ins
+    cosmo = test_cos_sub()
+    assert np.allclose(cosmo.efunc(z0), 1.0 / cosmo.inv_efunc(z0))
+    assert np.allclose(cosmo.efunc(z), 1.0 / cosmo.inv_efunc(z))
+
 
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_kpc_methods():
     cosmo = core.FlatLambdaCDM(70.4, 0.272, Tcmb0=0.0)
-    assert np.allclose(cosmo.arcsec_per_kpc_comoving(3), 0.0317179)
-    assert np.allclose(cosmo.arcsec_per_kpc_proper(3), 0.1268716668)
-    assert np.allclose(cosmo.kpc_comoving_per_arcmin(3), 1891.6753126)
-    assert np.allclose(cosmo.kpc_proper_per_arcmin(3), 472.918828)
+    assert np.allclose(cosmo.arcsec_per_kpc_comoving(3).value, 0.0317179)
+    assert np.allclose(cosmo.arcsec_per_kpc_proper(3).value, 0.1268716668)
+    assert np.allclose(cosmo.kpc_comoving_per_arcmin(3).value, 1891.6753126)
+    assert np.allclose(cosmo.kpc_proper_per_arcmin(3).value, 472.918828)
+
 
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_convenience():
-    #these are all for WMAP7 with Tcmb = 0
-    tcos = core.FlatLambdaCDM(70.4,0.272,Tcmb0=0.0)
+    # these are all for WMAP7 with Tcmb = 0
+    tcos = core.FlatLambdaCDM(70.4, 0.272, Tcmb0=0.0)
     core.set_current(tcos)
 
     # scalars
-    assert np.allclose(funcs.arcsec_per_kpc_comoving(3), 0.0317179)
-    assert np.allclose(funcs.arcsec_per_kpc_proper(3), 0.1268716668)
-    assert np.allclose(funcs.kpc_comoving_per_arcmin(3), 1891.6753126)
-    assert np.allclose(funcs.kpc_proper_per_arcmin(3), 472.918828)
-    assert np.allclose(funcs.distmod(3), 47.075902)
-    assert np.allclose(funcs.H(3), 299.80813491298068)
+    assert np.allclose(funcs.arcsec_per_kpc_comoving(3).value, 0.0317179)
+    assert funcs.arcsec_per_kpc_comoving(3).unit == u.arcsec / u.kpc
+    assert np.allclose(funcs.arcsec_per_kpc_proper(3).value, 0.1268716668)
+    assert funcs.arcsec_per_kpc_proper(3).unit == u.arcsec / u.kpc
+    assert np.allclose(funcs.kpc_comoving_per_arcmin(3).value, 1891.6753126)
+    assert funcs.kpc_comoving_per_arcmin(3).unit == u.kpc / u.arcmin
+    assert np.allclose(funcs.kpc_proper_per_arcmin(3).value, 472.918828)
+    assert funcs.kpc_proper_per_arcmin(3).unit == u.kpc / u.arcmin
+    assert np.allclose(funcs.distmod(3).value, 47.075902)
+    assert funcs.distmod(3).unit == u.mag
+    assert np.allclose(funcs.H(3).value, 299.80813491298068)
+    assert funcs.H(3).unit == u.km / (u.Mpc * u.s)
     assert np.allclose(funcs.scale_factor(3), 0.25)
-    assert np.allclose(funcs.critical_density(3), 1.6884621680232328e-28)
-    assert np.allclose(funcs.lookback_time(3), 11.555469926558361)
-    assert np.allclose(funcs.comoving_distance(3), 6503.100697385924)
-    assert np.allclose(funcs.angular_diameter_distance(3), 1625.775174346481)
-    assert np.allclose(funcs.luminosity_distance(3), 26012.402789543696)
+    assert np.allclose(funcs.scale_factor([3, 4]), [0.25, 0.2])
+    assert np.allclose(funcs.critical_density(3).value, 1.6884621680232328e-28)
+    assert funcs.critical_density(3).unit == u.g / u.cm ** 3
+    assert np.allclose(funcs.lookback_time(3).value, 11.555469926558361)
+    assert funcs.lookback_time(3).unit == u.Gyr
+    assert np.allclose(funcs.lookback_time([3, 4]).value,
+                       [11.555469927, 12.17718555], rtol=1e-5)
+    assert np.allclose(funcs.comoving_distance(3).value, 6503.100697385924)
+    assert funcs.comoving_distance(3).unit == u.Mpc
+    assert np.allclose(funcs.angular_diameter_distance(3).value,
+                       1625.775174346481)
+    assert funcs.angular_diameter_distance(3).unit == u.Mpc
+    assert np.allclose(funcs.luminosity_distance(3).value, 26012.402789543696)
+    assert funcs.luminosity_distance(3).unit == u.Mpc
 
     # arrays
-    assert np.allclose(funcs.arcsec_per_kpc_comoving([0.1,0.5]),
-                       [ 0.4946986 ,  0.10876163])
-    assert np.allclose(funcs.arcsec_per_kpc_proper([0.1,0.5]),
+    assert np.allclose(funcs.arcsec_per_kpc_comoving([0.1, 0.5]).value,
+                       [0.4946986, 0.10876163])
+    assert np.allclose(funcs.arcsec_per_kpc_proper([0.1, 0.5]).value,
                        [0.54416846354697479, 0.16314245192751084])
-    assert np.allclose(funcs.kpc_comoving_per_arcmin([0.1,0.5]),
-                       [ 121.2859701 ,  551.66511804])
-    assert np.allclose(funcs.kpc_proper_per_arcmin([0.1,0.5]),
-                       [ 110.25997282,  367.77674536])
-    assert np.allclose(funcs.distmod([0.1,0.5]),
-                       [ 38.30738567,  42.27020333])
+    assert np.allclose(funcs.kpc_comoving_per_arcmin([0.1, 0.5]).value,
+                       [121.2859701, 551.66511804])
+    assert np.allclose(funcs.kpc_proper_per_arcmin([0.1, 0.5]).value,
+                       [110.25997282, 367.77674536])
+    assert np.allclose(funcs.distmod([0.1, 0.5]).value,
+                       [38.30738567, 42.27020333])
+
 
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_comoving_volume():
@@ -201,18 +470,18 @@ def test_comoving_volume():
     # test against ned wright's calculator (cubic Gpc)
     redshifts = np.array([0.5, 1, 2, 3, 5, 9])
     wright_flat = np.array([29.123, 159.529, 630.427, 1178.531, 2181.485,
-                            3654.802]) * 1e9 # convert to Mpc**3
+                            3654.802]) * 1e9  # convert to Mpc**3
     wright_open = np.array([20.501, 99.019, 380.278, 747.049, 1558.363,
                             3123.814]) * 1e9
     wright_closed = np.array([12.619, 44.708, 114.904, 173.709, 258.82,
                               358.992]) * 1e9
     # The wright calculator isn't very accurate, so we use a rather
     # modest precision
-    assert np.allclose(c_flat.comoving_volume(redshifts), wright_flat,
+    assert np.allclose(c_flat.comoving_volume(redshifts).value, wright_flat,
                        rtol=1e-2)
-    assert np.allclose(c_open.comoving_volume(redshifts), wright_open,
+    assert np.allclose(c_open.comoving_volume(redshifts).value, wright_open,
                        rtol=1e-2)
-    assert np.allclose(c_closed.comoving_volume(redshifts), wright_closed,
+    assert np.allclose(c_closed.comoving_volume(redshifts).value, wright_closed,
                        rtol=1e-2)
 
 
@@ -329,21 +598,21 @@ def test_flat_open_closed_icosmo():
 
     redshifts, dm, da, dl = np.loadtxt(StringIO(cosmo_flat), unpack=1)
     cosmo = core.LambdaCDM(H0=70, Om0=0.3, Ode0=0.70, Tcmb0=0.0)
-    assert np.allclose(cosmo.comoving_transverse_distance(redshifts), dm)
-    assert np.allclose(cosmo.angular_diameter_distance(redshifts), da)
-    assert np.allclose(cosmo.luminosity_distance(redshifts), dl)
+    assert np.allclose(cosmo.comoving_transverse_distance(redshifts).value, dm)
+    assert np.allclose(cosmo.angular_diameter_distance(redshifts).value, da)
+    assert np.allclose(cosmo.luminosity_distance(redshifts).value, dl)
 
     redshifts, dm, da, dl = np.loadtxt(StringIO(cosmo_open), unpack=1)
     cosmo = core.LambdaCDM(H0=70, Om0=0.3, Ode0=0.1, Tcmb0=0.0)
-    assert np.allclose(cosmo.comoving_transverse_distance(redshifts), dm)
-    assert np.allclose(cosmo.angular_diameter_distance(redshifts), da)
-    assert np.allclose(cosmo.luminosity_distance(redshifts), dl)
+    assert np.allclose(cosmo.comoving_transverse_distance(redshifts).value, dm)
+    assert np.allclose(cosmo.angular_diameter_distance(redshifts).value, da)
+    assert np.allclose(cosmo.luminosity_distance(redshifts).value, dl)
 
     redshifts, dm, da, dl = np.loadtxt(StringIO(cosmo_closed), unpack=1)
     cosmo = core.LambdaCDM(H0=70, Om0=2, Ode0=0.1, Tcmb0=0.0)
-    assert np.allclose(cosmo.comoving_transverse_distance(redshifts), dm)
-    assert np.allclose(cosmo.angular_diameter_distance(redshifts), da)
-    assert np.allclose(cosmo.luminosity_distance(redshifts), dl)
+    assert np.allclose(cosmo.comoving_transverse_distance(redshifts).value, dm)
+    assert np.allclose(cosmo.angular_diameter_distance(redshifts).value, da)
+    assert np.allclose(cosmo.luminosity_distance(redshifts).value, dl)
 
 
 def test_current():
@@ -359,51 +628,81 @@ def test_current():
     core.set_current(cosmo)
     assert core.get_current() == cosmo
 
+
 def test_wz():
     cosmo = core.LambdaCDM(H0=70, Om0=0.3, Ode0=0.70)
-    assert np.allclose(cosmo.w([0.1,0.2,0.5,1.5,2.5,11.5]),
-                       [-1.,-1,-1,-1,-1,-1])
-    cosmo = core.wCDM(H0=70, Om0=0.3, Ode0=0.70,w0=-0.5)
-    assert np.allclose(cosmo.w([0.1,0.2,0.5,1.5,2.5,11.5]),
-                       [-0.5,-0.5,-0.5,-0.5,-0.5,-0.5])
-    cosmo = core.w0wzCDM(H0=70, Om0=0.3, Ode0=0.70,w0=-1,wz=0.5)
-    assert np.allclose(cosmo.w([0.0,0.5,1.0,1.5,2.3]),
-                       [-1.0,-0.75,-0.5,-0.25,0.15])
-    cosmo = core.w0waCDM(H0=70, Om0=0.3, Ode0=0.70,w0=-1,wa=-0.5)
-    assert np.allclose(cosmo.w([0.0,0.5,1.0,1.5,2.3]),
-                       [-1,-1.16666667,-1.25, -1.3, -1.34848485])
-    cosmo = core.wpwaCDM(H0=70, Om0=0.3, Ode0=0.70,wp=-0.9,
-                         wa=0.2,zp=0.5)
-    assert np.allclose(cosmo.w([0.1,0.2,0.5,1.5,2.5,11.5]),
-                       [-0.94848485,-0.93333333,-0.9,-0.84666667,-0.82380952,
-                         -0.78266667])
+    assert np.allclose(cosmo.w([0.1, 0.2, 0.5, 1.5, 2.5, 11.5]),
+                       [-1., -1, -1, -1, -1, -1])
+    cosmo = core.wCDM(H0=70, Om0=0.3, Ode0=0.70, w0=-0.5)
+    assert np.allclose(cosmo.w([0.1, 0.2, 0.5, 1.5, 2.5, 11.5]),
+                       [-0.5, -0.5, -0.5, -0.5, -0.5, -0.5])
+    cosmo = core.w0wzCDM(H0=70, Om0=0.3, Ode0=0.70, w0=-1, wz=0.5)
+    assert np.allclose(cosmo.w([0.0, 0.5, 1.0, 1.5, 2.3]),
+                       [-1.0, -0.75, -0.5, -0.25, 0.15])
+    cosmo = core.w0waCDM(H0=70, Om0=0.3, Ode0=0.70, w0=-1, wa=-0.5)
+    assert np.allclose(cosmo.w([0.0, 0.5, 1.0, 1.5, 2.3]),
+                       [-1, -1.16666667, -1.25, -1.3, -1.34848485])
+    cosmo = core.wpwaCDM(H0=70, Om0=0.3, Ode0=0.70, wp=-0.9,
+                         wa=0.2, zp=0.5)
+    assert np.allclose(cosmo.w([0.1, 0.2, 0.5, 1.5, 2.5, 11.5]),
+                       [-0.94848485, -0.93333333, -0.9, -0.84666667,
+                        -0.82380952, -0.78266667])
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_de_densityscale():
+    cosmo = core.LambdaCDM(H0=70, Om0=0.3, Ode0=0.70)
+    z = np.array([0.1, 0.2, 0.5, 1.5, 2.5])
+    assert np.allclose(cosmo.de_density_scale(z),
+                       [1.0, 1.0, 1.0, 1.0, 1.0])
+    cosmo = core.wCDM(H0=70, Om0=0.3, Ode0=0.60, w0=-0.5)
+    assert np.allclose(cosmo.de_density_scale(z),
+                       [1.15369, 1.31453, 1.83712, 3.95285, 6.5479],
+                       rtol=1e-4)
+    cosmo = core.w0wzCDM(H0=70, Om0=0.3, Ode0=0.50, w0=-1, wz=0.5)
+    assert np.allclose(cosmo.de_density_scale(z),
+                       [0.746048, 0.5635595, 0.25712378, 0.026664129,
+                        0.0035916468], rtol=1e-4)
+    cosmo = core.w0waCDM(H0=70, Om0=0.3, Ode0=0.70, w0=-1, wa=-0.5)
+    assert np.allclose(cosmo.de_density_scale(z),
+                       [0.9934201, 0.9767912, 0.897450,
+                        0.622236, 0.4458753], rtol=1e-4)
+    cosmo = core.wpwaCDM(H0=70, Om0=0.3, Ode0=0.70, wp=-0.9,
+                         wa=0.2, zp=0.5)
+    assert np.allclose(cosmo.de_density_scale(z),
+                       [1.012246048, 1.0280102, 1.087439,
+                        1.324988, 1.565746], rtol=1e-4)
+
 
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_age():
-    #WMAP7 but with Omega_relativisitic = 0
-    tcos = core.FlatLambdaCDM(70.4,0.272,Tcmb0=0.0)
-    assert np.allclose(tcos.age([1,5]), [ 5.97113193,  1.20553129])
+    # WMAP7 but with Omega_relativisitic = 0
+    tcos = core.FlatLambdaCDM(70.4, 0.272, Tcmb0=0.0)
+    assert np.allclose(tcos.age([1, 5]).value, [5.97113193, 1.20553129])
+
 
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_distmod():
-    #WMAP7 but with Omega_relativisitic = 0
-    tcos = core.FlatLambdaCDM(70.4,0.272,Tcmb0=0.0)
+    # WMAP7 but with Omega_relativisitic = 0
+    tcos = core.FlatLambdaCDM(70.4, 0.272, Tcmb0=0.0)
     core.set_current(tcos)
-    assert np.allclose(tcos.distmod([1,5]), [ 44.124857,  48.40167258])
-    assert np.allclose(funcs.distmod([1,5], cosmo=tcos),
-                       [ 44.124857,  48.40167258])
+    assert np.allclose(tcos.distmod([1, 5]).value, [44.124857, 48.40167258])
+    assert np.allclose(funcs.distmod([1, 5], cosmo=tcos).value,
+                       [44.124857, 48.40167258])
+
 
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_critical_density():
-    #WMAP7 but with Omega_relativisitic = 0
-    tcos = core.FlatLambdaCDM(70.4,0.272,Tcmb0=0.0)
-    assert np.allclose(tcos.critical_density([1,5]),
+    # WMAP7 but with Omega_relativisitic = 0
+    tcos = core.FlatLambdaCDM(70.4, 0.272, Tcmb0=0.0)
+    assert np.allclose(tcos.critical_density([1, 5]).value,
                        [2.70362491e-29, 5.53758986e-28])
 
+
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_angular_diameter_distance_z1z2():
-    tcos = core.FlatLambdaCDM(70.4,0.272,Tcmb0=0.0)
-    assert np.allclose(tcos.angular_diameter_distance_z1z2(1, 2),
+    tcos = core.FlatLambdaCDM(70.4, 0.272, Tcmb0=0.0)
+    assert np.allclose(tcos.angular_diameter_distance_z1z2(1, 2).value,
                        646.22968662822018)
     z1 = 0, 0, 1, 0.5, 1
     z2 = 2, 1, 2, 2.5, 1.1
@@ -413,13 +712,115 @@ def test_angular_diameter_distance_z1z2():
                1159.0970895962193,
                115.72768186186921)
 
-    assert np.allclose(tcos.angular_diameter_distance_z1z2(z1, z2),
+    assert np.allclose(tcos.angular_diameter_distance_z1z2(z1, z2).value,
                        results)
 
+
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_absorption_distance():
-    tcos = core.FlatLambdaCDM(70.4,0.272,Tcmb0=0.0)
-    assert np.allclose(tcos.absorption_distance([1,3]),
-                       [ 1.72576635,  7.98685853])
+    tcos = core.FlatLambdaCDM(70.4, 0.272, Tcmb0=0.0)
+    assert np.allclose(tcos.absorption_distance([1, 3]),
+                       [1.72576635, 7.98685853])
     assert np.allclose(tcos.absorption_distance(3), 7.98685853)
 
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_massivenu_basic():
+    # Test no neutrinos case
+    tcos = core.FlatLambdaCDM(70.4, 0.272, Neff=4.05, m_nu=u.Quantity(0, u.eV))
+    assert np.allclose(tcos.Neff, 4.05)
+    assert not tcos.has_massive_nu
+    mnu = tcos.m_nu
+    assert len(mnu) == 4
+    assert mnu.unit == u.eV
+    assert np.allclose(mnu.value, [0.0, 0.0, 0.0, 0.0])
+    assert np.allclose(tcos.nu_relative_density(1.0), 0.22710731766 * 4.05,
+                       rtol=1e-6)
+
+    # Test basic setting, retrieval of values
+    tcos = core.FlatLambdaCDM(70.4, 0.272,
+                              m_nu=u.Quantity([0.0, 0.01, 0.02], u.eV))
+    assert tcos.has_massive_nu
+    mnu = tcos.m_nu
+    assert len(mnu) == 3
+    assert mnu.unit == u.eV
+    assert np.allclose(mnu.value, [0.0, 0.01, 0.02])
+
+    # All massive neutrinos case
+    tcos = core.FlatLambdaCDM(70.4, 0.272, m_nu=u.Quantity(0.1, u.eV),
+                              Neff=3.1)
+    assert np.allclose(tcos.Neff, 3.1)
+    assert tcos.has_massive_nu
+    mnu = tcos.m_nu
+    assert len(mnu) == 3
+    assert mnu.unit == u.eV
+    assert np.allclose(mnu.value, [0.1, 0.1, 0.1])
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_massivenu_density():
+    # Testing neutrino density calculation
+
+    # Simple test cosmology, where we compare rho_nu and rho_gamma
+    # against the exact formula (eq 24/25 of Komatsu et al. 2011)
+    # computed using Mathematica.  The approximation we use for f(y)
+    # is only good to ~ 0.5% (with some redshift dependence), so that's
+    # what we test to.
+    ztest = np.array([0.0, 1.0, 2.0, 10.0, 1000.0])
+    nuprefac = 7.0 / 8.0 * (4.0 / 11.0) ** (4.0 / 3.0)
+    #  First try 3 massive neutrinos, all 100 eV -- note this is a universe
+    #  seriously dominated by neutrinos!
+    tcos = core.FlatLambdaCDM(75.0, 0.25, Tcmb0=3.0, Neff=3,
+                              m_nu=u.Quantity(100.0, u.eV))
+    assert tcos.has_massive_nu
+    assert tcos.Neff == 3
+    nurel_exp = nuprefac * tcos.Neff * np.array([171969, 85984.5, 57323,
+                                                 15633.5, 171.801])
+    assert np.allclose(tcos.nu_relative_density(ztest), nurel_exp, rtol=5e-3)
+    assert np.allclose(tcos.efunc([0.0, 1.0]), [1.0, 7.46144727668], rtol=5e-3)
+
+    # Next, slightly less massive
+    tcos = core.FlatLambdaCDM(75.0, 0.25, Tcmb0=3.0, Neff=3,
+                              m_nu=u.Quantity(0.25, u.eV))
+    nurel_exp = nuprefac * tcos.Neff * np.array([429.924, 214.964, 143.312,
+                                                 39.1005, 1.11086])
+    assert np.allclose(tcos.nu_relative_density(ztest), nurel_exp,
+                       rtol=5e-3)
+
+    # For this one also test Onu directly
+    onu_exp = np.array([0.01890217, 0.05244681, 0.0638236,
+                        0.06999286, 0.1344951])
+    assert np.allclose(tcos.Onu(ztest), onu_exp, rtol=5e-3)
+
+    # And fairly light
+    tcos = core.FlatLambdaCDM(80.0, 0.30, Tcmb0=3.0, Neff=3,
+                              m_nu=u.Quantity(0.01, u.eV))
+
+    nurel_exp = nuprefac * tcos.Neff * np.array([17.2347, 8.67345, 5.84348,
+                                                 1.90671, 1.00021])
+    assert np.allclose(tcos.nu_relative_density(ztest), nurel_exp,
+                       rtol=5e-3)
+    onu_exp = np.array([0.00066599, 0.00172677, 0.0020732,
+                        0.00268404, 0.0978313])
+    assert np.allclose(tcos.Onu(ztest), onu_exp, rtol=5e-3)
+    assert np.allclose(tcos.efunc([1.0, 2.0]), [1.76225893, 2.97022048],
+                       rtol=1e-4)
+    assert np.allclose(tcos.inv_efunc([1.0, 2.0]), [0.5674535, 0.33667534],
+                       rtol=1e-4)
+
+    # Now a mixture of neutrino masses, with non-integer Neff
+    tcos = core.FlatLambdaCDM(80.0, 0.30, Tcmb0=3.0, Neff=3.04,
+                              m_nu=u.Quantity([0.0, 0.01, 0.25], u.eV))
+    nurel_exp = nuprefac * tcos.Neff * np.array([149.386233, 74.87915, 50.0518,
+                                                 14.002403, 1.03702333])
+    assert np.allclose(tcos.nu_relative_density(ztest), nurel_exp,
+                       rtol=5e-3)
+    onu_exp = np.array([0.00584959, 0.01493142, 0.01772291,
+                        0.01963451, 0.10227728])
+    assert np.allclose(tcos.Onu(ztest), onu_exp, rtol=5e-3)
+
+
+def test_default_reset():
+    # Check that the default is being reset after tests. This test should be
+    # updated if the default cosmology is updated.
+    assert core.get_current() == core.WMAP9
diff --git a/astropy/extern/pytest.py b/astropy/extern/pytest.py
index 39c82f5..dbbe16c 100644
--- a/astropy/extern/pytest.py
+++ b/astropy/extern/pytest.py
@@ -1,2598 +1,3100 @@
 #! /usr/bin/env python
 
 sources = """
-eNrsvWuTI0lyILbHk446nHgkpRP1Op5yUGpm5jQKXdUzsw/cYFa9Pd1kk/No68fu0GpK6Cwgqyq3
-gEx0ZqKrisuh6RfI7H6Bfo5MZvqmPyR/xTMjAVTPzC5lpprpKiAzHh4eHh7uHh7u/9sffff2J8nr
-P1vfjmfL6mI8mxVl0c5mb//F678dDocRPLsoyovo0fNnURKv62qxmed1E0dZuYjieVU2mxV9h49l
-Pm/zRfSuyKKr/Pa6qhdNGkEjg8HbP3r9x9hD0y7e/stX/8e/+MlPitW6qtuouW0Gg/kya5roZbtI
-qrPfQhvpZBDBD3a/yq7yJmqr9eEyf5cvo/Vte1mV0QrAWMKL7F1WLLOzZR5l8KWMsrati7NNm4+o
-BfzhjnAI7WW+iqDyeVE3bZTN53nTjFVPA/qwyM8jhYGkyZfnAgr+4FdAz6KYw8toiqCPBQ678kXe
-IhRSfxSV2Sq3WmnrW/MFf1bQFHRJUEIlKq4L5DfzfN1Gz+jtk7quardynRVNHj1So6YSyRAwDYie
-wJRslouorFpBQnSvGUb3IreLOm83NWB0MIA6AAtOQzp4+5+9/hOcsHm1yMf46+1//uo/XeppW98O
-zASOoqoZr7P2cnBeV6uoKJs1TKLq8/HXs18/evHoxV+/HMnnv3vy97/5+sXnLweDs02xhKmZ1fm6
-hq7xz2CAv5fFGXwHAKTEeAZ44waTGAvEoyiWgnGqKOgxwNkloes6W6/zOsrqagM0+5wpCMcUcdmG
-5j84/SPA8DUWtWZQnjB8hB+YcnmYqOIu1cBTHB6/6ycFKnteLHOcIVMBOpmpp6HyQM3LoszLyq9i
-XhxGx92a3V6cHoT2XOIKkd+r27WiPKS1zMbtJLpXA80pvIzS1F4r+VuN5wpWZ21jmcnSoG/KRfCL
-3USZ72oCYcICuglTHYnWX+ZIMlIzowIykmhdFSXzkSpqqk09z2mginbwZ81EgbXGy2qeLRMFvz2H
-hjiKc4JuPZ5f5vOrJHWxexB98803wAFvz3KklegyqxdAx8viKkdeFl3nRb1ABl3MvXpFSQWaFph0
-hmVgOZ0gKcwz6Gm8WS+ylj+fRosqb37p1MdRhOD2EbtmRBKOYNx1BausvU3w+yj6qipz9XvIaDwH
-oIrGpo6hRQ3nm+WS0bp9RmTNveQZkLk5r2oaMTaiJgfB5k55ouz29GfiWIrRKZbFDZgy0OgoIpZP
-L2DJlQsLVMRTh59ipYGqLRBZSDJPHVQ58+D+DO2xwWbbZsCnaFfrx+n3xqfVbtyozqtyeRtE5oFe
-taagNJUBlWeAWpgPZy4UKTlQWFjVQ8Fttb5oZKm/y+rp02zZ5H3DajdrmP3rAugOxwFVQUwpW9r7
-mtDwBg7qYWHG0EccAW6bvI1e1RtoBGZM9YC1uS2hMChdsCBSLpymRBLSIDTR9WUOI67zBr714PES
-WuH5vgSCnG94RgAHxIAQEfZ2ZK1X/RjKwPYPIyYGj8tYPbG5D0Dt8hxd7b6ud77MLpror6yN/G41
-9HbvzbkUBhAIkScT1dKp2s+f1vCis6H/xt3PM7Wjn2Pp6LJaLhBH5zNiwA3Jqeezi2V1Bt+oDeCO
-15fF/BJ2OJyFpgAhNpqD9Ah8Nn+XLTfAHBfjfplwxF35oqEnFJAwQgXH57OATKC3bFUmsFXzBq+A
-t8raw7EKypCtNulBSBihEhanAKE1R/L0mQUQiR7d2OJlsDCQY3nyQHA1D4dpcFv3mkQxygVDcMS1
-9SubjeqHe3LRoWmF+CbTDHzIHL6JVCBTTVJL9OGHQKaNx2wUraAatMhjtetamFU/yEtQZaqB26xb
-oLdsGWWLRSEfaZY0B2kGAZw21DRQ62bZKpYj/UMb4a3NkINDHoD39W2SdsqJWJDQSP0JI4wwLlyi
-HOn6Nv5u8vlsDwRCsfdB3n/chrwfDxWWOsID3I6PyEIIqipKSrXZWWffipvsHLCRlFV5WOfzTd0U
-76APoOpDXAwpLIMa2RtpTLgnxLI7B8dt1mNRjbFlgkMgMNAVDahXm7wPQGnF3iffY0deFg1TLu7M
-TUSKLlZbbmBUOJIMtju9Se67HRflfLlZ5J0tWG27/la17xYMYANoQC8np4Y6EMj6AknV8C+FBejc
-E9876p1pd4w7WLlIEqg6cknyBB6dpqlTUTSxv8tvAzoYi+CwW7LkwOIgbGbVHKiHB7ppkGSeN7fz
-qrMJEzxqw31VZ/P8LJtfPSkB+q4qnUXYEmA4x/eICJC0VB1jRcF9tSjPcXNDfjzYoltTQx0ji3rB
-wgt99La6mnVXtdOwpKDKjtuzGW/Rlkj1+uJyHD0cf0zU8XD8SbQozmFBNBFohDnjKS9J/shxhVk1
-V8BzC1p+ZhNqxjA00BQ2UDc7qzYtK1zVcoNsaRSBwmy1AFIcWmJAvkD9Amm0RxawR9AnD9T5kmCZ
-OnUPLcTIzmr0f3sGkAV0jVtCDsNPXRKI7jWTe4vPUIP3m2c1zwLh/nG6hzxxF+VjU9e4U5s9216h
-WqfqjFtLFB2p4w8hZyi116wTnmFb3gjZIWxJyUP7ndTutupoxmS2cHUrZj67YXBESr2paiB0Sx4k
-UhJwASJ7Xi+zW5LRscmhs00WuPyAMYfo5oV5y0PKiiU2Y3CNS1vJSxm0CDryMl9EyIvqlSsp4XZA
-6/YadVMEn943JGfAN6whWoAvCmv2FpSBDV22vOWPNXzpGHfvdeJy9xuLj80cDIh9wKB/JJxkhkOf
-4i6Y+vskWXuBS6PtB2TvmxHCkQY2It90Z3DLGMzRclweirxBVrwImvO2Jhch0+gmSDuqgENymj+F
-rRQHaKr/W1btWFa37JmirR0eR7CTZsglLJOEsmhnN8kWnjiKjtwlYIExirKmJfvYFCc4zL40+ZlF
-NfbU+Osc9l4WTnCLJlLUTePKxNkChgxiJp5gtG2dWxLsAdkvoAbv/0CdRMkR4rK1tyjHiDVWChrb
-smxmV2flRT6Dft6LiRbKnrRV96MN37J9QNvQYcm6sfMS2tOogBYRFd1WuYVeJmi1hSV7m6HlrsFQ
-3eJOkEA9ZlOWft6iqUq6DVBq2m/Cl05G0WwEfB7PU4ITYG87I0HrNuNf/490OJW/naOjl7dlm90E
-5EaGzhYh7luSRg6S/OR9UEyIPYGSp2bmw/vwCaF5AnCc8jrsWkn1qnSUlctiscjLLYIFqQfFuSNE
-iHUIjwlRUQBBSG/I0F4+m3nEDKLcOzH2Y3OuPrKqgB7YtElsE/VQWOhBTaJDIt1NlZTrYQeiYWcy
-7QOx5rbJbwLHMV6dYN+kqNlCYdMGZMIO5Oelva3hIgxBmCOtjQMUR9XjX/7yl0ZZlSMof307pw0d
-MJT0G9hfl/4Ga1SnsyqrF89wtupNBy07ESd9DgH6jno9jKKneNZwrwZZGTn8vebbMqLfKDifl56Y
-zGfCI2rTImx8uKcQKKZTjSZBo1433L4jgUlxXwRToqCn/yWorVuKn36hj0xBV8rWzWaJ9i8UuypU
-pqLL4uISj6jwrN6YoumknVeSLQMXuXX8jn+fiM7n6iB92mN75q1+fFtky+Ifct4RL4p3qOWLCOGN
-wN2qgVkAa8Bz+6Q9G0UxqF9lftPGnuBE51QJsJSAQHV9iTSAOvdWFok/t0UO2iBNKiva2GKwJDY3
-xd9jgcgjyqYd+6ZpGIAlo3X5eKgSVDF0ON+08hhX+JTph2lXvlhSlDyBJYNmGF2hT+EzBKAkVD6e
-R1JU50Mk7OmCLuM9u0Uif0cW/qy8BfJdnRUlSe5YlXUg2c7I8G/Le7AduPyI/EB4Y8AzXdr1WxLM
-Ds/yQy0GG9IBwECpyOsVtLhwISOos+Wyum4Qg8rhRDpRYwtiAOSQsQtYRbY90FhatvVlDWomSZ2v
-qncscgLIm5L2nryhQmdF2/A52yLPlk5zdAqGJ0okrirjsZIpH+jhpWHbKQBzo2xeLinJiceNxZo6
-70VN7RXbElJclUgZQWem1pQmNO0cqeFPYpGcXRtXnlrKqiXyFVm2VZxCie46wyqq6JgK2o2nPf0L
-lVld32g7zlRosKeqrck49cOaCrZnfU3ToFmRBR/Fv2+MES14+OJ5LBWwgWpuAMKb1QWbQZsN7CyJ
-bp93tHRsV8ZqNkO1tFCSsVvQNZNmWcD3o9QfhPTCLla0GUGL8LADPFkrNS8GWShXhvXzcrrMVmeL
-LLqZ0JzejLWsmN6FIeFymcM+mgHR49iaiBaev+JBnMElH51vyjkxIFp9KLIaO6myOI/srp5Bm+4y
-kK5HxLPEWGjLsmSdxFWL4FjWxAwG59KXWHusiSJZj1sApHTYKaAxwzMl4l88TuJjbjPPCA18aooG
-Ekar0xbMQm6E8xStK+/ydNuxhKFWmUclKaWuYj6vs+aSSHmLzA8k05LBggHwzW08Ocs8M+gSVBnl
-mvizrjcOS/NnWlxlmDvOPO2ZdwygavjDb89ODo9PbeMXHfdUwNYX+c2WoRIhYBnFy4ltPHAmCye8
-zk2bDkhVXVzgrgkzjUr4GuXGuoDvLC3ySExdPkqoLUqzMcIK/DT63XfOllGMzCFBXqKPKB6oeYMS
-b6WF45BBB9QoQ+X5AnffKrqu6is57veqspcTqdXRKm8zGMkFIGOFG52cKC7yeQV9VzV5QYmpZF14
-DTFpX+Qlwdm47oFEO5fZO9IfLx/QmVWUv92ArNneug2hxxYCjjwA2mkDxgw2/3Ys6cUi6bxBFxjB
-o+wtbm9kCQLZHr3HyKAKozTTlrVDYuau+IebMRk/mryVxc/8+eS0Y0xcdneac3cEnffLao7eBV3f
-A5s4yA0PS8IcLcMyMvR+PlYHk+djOX+eEdb7LSV4vCHDp0EKELPjKXy4e7WHUwVpaNP11rNLUvqM
-z55Uc1QespoN1PhIXlqtQZ9I4t4RoVTQC3ccHGv8S3SbRVQan9kniv09K8+rsPNsQ67OwCdnaH4E
-1q7Whdb7zCxf5ss1TXGZvSsuMi0Ge2xVMZAZ6estKDZoGoh7Vb3NWisabEn2tYyD6KtfjfkIWfmr
-iim/Lt7Biv4gil5uzmjI6LMlJGhVJ/3TxsUh+VmqGqvsljkAnxrSYYPuaGzvAQBr2ECKL6YeKv0F
-5x8tEIotQQraODk+HUWPAKgaISUzS4A2LZO8OKTruvGquYh9k+cWGMKEb3XQ6Ma3t4djUV/GpG01
-KGslcUajieKeNcZSoUMp7vgnUewdIAOGBTgAzH2HYqgYZIiRj6w9XdXr1rANVfgdpFR8ZJkN+ZWW
-OsyZjhFzHDV750msQ43RPdiGzpZ5OeXj2ChxQAOlVyyiBoTUcciZozOmWk71LfkVbnPYcEUjMpvy
-UZArQZJcGasGYzGc5o2ym7JI6zaGUrPrcKxOv9xpHbEDKflvzlvki6YNUag9FdzuBbFL/h2Z6lQr
-9ElTBUgIini2UhL6WWTAts9ykJrQ5zYs1dIBAc970y7MPIxZlZ9p0GZ6KjrEaJ0sKJ44/m1VlKRt
-Np23+Gdc+zZPZEIyIR0TPtWw1p63tgIr0OrqRBOZXeO0I9iincqQXl1bDIwJEFCx23LvEkxpFLSK
-6DmkUXgdqQWO3VkLD69rAHGQWuGvPlkoaqmrdaNXjHvmqpxU3IU3dnUWy4HMNk8pMYofBmU8DSUU
-fgGf0cr8BezwiJTEbgxtygJq2vXwkUYcncpySIOBXbPcwPwAT4xvl/l0uKzKi6ErSGRnDdn4pGB7
-xlrQlJc6asLoDLWNr+BmkZKXlrdAleXPPex0DWMG1Al9Vh4I6A7sKXxuPRzQJMIB/SPN4z+W1T+i
-2fCdJZlwKU934/FNUOHNldE6Sli56hzYROTmsVFGfaPeg8TdEN0yZqfctcGf0vtlcNhOcVFWoHKF
-tdBCWkIZMObG4uBBD1KNK+HhE70jfUVVk64/2S4WlvRv1MTS+l/zktxSXfV5cnRqbFjdCmkqfNNd
-zqmF+/MVMq6nbEjNF094b08sejcfFdHT7zDNy1+L6tUHi/LVh+59kBVwatzwcwUGMp6dZ3BhDkOG
-A1fj6vCHPu6Cx7wjl7ulXRMhrFLUemz4NmWBu/Q/GxgFHoFTXRnwZ7uj0QjTYQuB9gsSZyDl0/FU
-bHqs4/w1mwWqujGnRgdss/APtPjKz7K6nq2y+irH05vhZ1wD27aePum/XrCDI2uKZK67LxPms1LD
-ZKZWP14h5i0eQ+TpVRxrqvv1PDOlezQCyEe3gACP3gH8yXutXELIouRs2mjzKtXZlPgF2BrgeXGB
-7pg4j1yUL83QKaDny9K9eqkOlAMugiT1cHeHx+kPf7YcdBR2AcLF1OcTvK3zLgB9QFgL68hfaR/D
-emQspNEhaxr6pD31JCtaxo4rVcfFV7l58Ip3Pa/0/Kdhv6PwwapxY+LpW+RCK2nY9cQCWXvFa+f3
-ri7W9Z/3XPtnliO8P1zlNahWQ+e+VeN6mVue5qzZwQe2OJIl1RiTLM9zFksD/jjw3vY15wZFglfD
-Ue2nnmufJUIgO3yEffHWZguSM2eulcsisvEZ2ainhyybaqPNKNqpe54rJk7cl1jmItqs1TSTLjQO
-6l4WHne4qxlnI++yEnp4pB3fDx4MFD+yO7DefBodTfpq3Z9GFg9xzeQ4q2S/ttlM2tHbCnWoyE0G
-rgDU+Xlxow8nrB3oPjqoREOXA3TcAhTKulqjOc3FXXOT93c9jDodid+MFLmvXL+K004pTajsFuMY
-kObKHhVe/sLtp0YgVFuFh3HTF6io2Jfy8JspMUP6GkmbU/4zIiLMluJz2+Eq1Ka7LFyLi9/sx6ZF
-fx2ESFmNbwj/fShfrY3vQhyi69yxkdjiTWXdR8hvVB8CVo+aO27Wy6JN4m/L2CJakpBsfNtyzX0B
-7uR44t6bITogV1bqe9I//VYH9yOXFqxTNsFe4HzChs/DVHi2iIFb/u8j0SoDPNzSP7sD6LLxq/yW
-nqL0S0iQEw9R8s7xE6g50Qcws//LsFt33GC8i7SzNZAxEhrCMl0M8GYxlW5OsPBpaKmzSRMUyNlM
-nAqb2SwOr31nhoZ2BejoU/Xts2HXABzmNEy3r8it2zi6cLwSNOKf5eywAnz/7LbjuGNaIBtqkuoz
-+JEc5EG7ZMaRECFj3MQAYz2tLIrmYlOQnE1c5l1eo2tRSQIl2irGYX0VFDaJXOJtqZ4tz+kNpx05
-vVROYef42ZHyXLEMWFsU5YNtDsHkujfia3ajCKPV9J1duZN67/D4CKmVYsSIB6EGsmcs2yZX2+Kx
-G938t9+S8Zqa72tVx77ofy0GijUdgMofwRgCnWerqdIekcFd1wWIx73izRe8+MXG6jIGreHNjAeC
-CHmuXOOoIoEti82aBRl3kFmTw0J75lmrXId8X6D2/Hl+dBGnO78HRmrveMWbWxkjy0flCO9x/Jac
-MPu7dJT/Q7q60d+PubmxRfQzeiwwymRI29qQbiKBCu0tCHqpcK4Na1LHI5p1LSK7c5fB2pl6JCir
-ptziU2qDN6la+VOiiRKwO6K1JVbwrk2/t0k7na20B9hV3jTZBTk8kzszcgSeDzd+TT+DNy2opcCn
-fyxv6BM1YHtDF8NiG2Dyx+hfdDfOGIq83bBY5rDPCRfusZHbxIWWcoHNQxTxAGnojnPr1LWmV4QK
-6d87+fettMRdaLpGmlhGVtMje7Ay4yExefI9pN2Pu6JtBzbbq5x/swRr6dR62owbsStMqZBMyhi0
-hz2k7MZWSsdnOTL7JfXVJQ4xkXz9sufWtNLuA16puEOXa9ybZa/m5tPQ1Wui13I9CDXbs5e4WoFz
-5cKcH+vFol2hff6mjyc89Jk2LAu+767mupsFLmdp5cA5wHuxAS1wlYf8Djotmt493zYDBe2CVknH
-aqzOWxzmDrRcZ6JWOiDzbRzmi13PM3Ms7l2DEj+BhCGRrSi12RVyqQ5HoNMr2/AdlBaUnEDT7F2/
-4gsQIn7p5josWpA59dAbcvkwiBl+8MEHsHSVJxg6rVNoxqRBrisKyF9F66qhMBrpsNPaGQhRVyFm
-YNwZZAgj07M+RdEbqS9O2acfoQWAhWwCDqBWca00eE6qqNY7FhrsPBhzeh6ZNs3lGPL7z5ZYdbLr
-3KYx3szm3MSV3EC/A0UD54ecgVAR/DT6KGCWHmNcgkWexJv2/PDncdemudcpjRfMor1mflpUYzWw
-35CUnCjPNS9eUVu1Ui5prXBn2OwqWyeq34o1Bti5OnAOh+LLYO5B7+8Nc68xDgBZG907ujFRCbTH
-OHlRKg9ibNaDKjHmXWeTMXZeE2+yQjcGtvXuZ283dnYpq+krMBzSWA5zdj25V5NLT9DMzLTXJVeb
-GtNJb4SNPqKe+DEl3GXnfO8WVYvN+Ba450e5HJ4RxWnYssVC3lihUUdkVyQbW5Ovp8PDYefISlrT
-huxuNfsQwqJT8Xa63jraPsJWhha3Jx38RUHl7b3X8GINHa9HUVdUhrekDEuDzuwathqYWdYBcxSB
-hrOo/+BQ7SJBrhzCgtlhrW8D73K/2Vb0523nhXvPxLpCUuO7qDbW9e7tg9mxinsKG+l2YbM2dha2
-VOgpw7EKnruGCTV1w6Ef/4BHQXeE/f39to+2TCQJweckSCdumTC5iAuH86yfH7RnbOSYhCdwyL4k
-w22EcqI1AulatXnaTzfi3mxYmVV9P0bWA7hS/uX1vrQHCCaTUKK2JNNYmnYADYHIItQeS9LS6NQJ
-IH9TficBra5nkDzEztRYJ+72125Bfe5vvgRaY3Dw+N4A1vEhYHMJ/t0X5ZYJ3Veh/b77Vo1/lmCQ
-E9LtFoIx29tx+AQPqPpXN3PLs2q5EGcKaGYK/9waB33MgHf3zpDtWekbubzethntGvb+Q95/uPYQ
-QgcfBzb31GtiFA3ZpNrTb5eJOl3s4poWqUzu1n4Pge0S5pXUhjf6+R8ZsYffll32sTOKhzfY/csL
-8A5/cqxd+3FS22/U2MI8lqOscMrw0ROuzPNXpZfG8ief9uUQB5EOfY7Kt3RSbdq1hL/NM4zZ6roD
-Hkhwu6y0Sq6ylu9sYZyOKF8U6LoVUWQ3Comta6+aC6WnKWA1seEAmguK9Uwz7d5txTO7w2Mvkj+1
-Br9PJoWtaAlRYii1ZiLWVI1lJzbECGu7O5CcTew3t1v3yDvtkPswHJuNuFSp3EX2g5qcSjygZUOj
-jeyOO0yXzfLhwXlGfnfD4HGqRKLUw+02QkZIhAkm0jsm6znuU3bEJsWT7Fyc+BEOfPAw+gwxiIGW
-rouFbwP1nEyoVv8NNHsmuIP+Az/BA4zlDme1+4Fh2r8PaIJdAIYZ6GZ7Vz6gXgPbIdmBCHuDgB/Y
-+NTRtbgbSjC++aU+4U4ydU9E9ki5mWe7XJFb6aZVr4h9uddLIt1PW0m86rjRD40vE8XEkoqT7UHq
-dTnHFGMNyb7g6d12id3bnvquomUA0a14V81C0XB7ylIAKHngvVKDFYxN9hqDFL4L8FJlO9Rq2sxB
-qTxRNqT3owi+P7QXUdAESxjzfYliL/xbqDzxaeB0vK7UtaHQVGxHldOymhnV5EDdMpGsKNXZb+nW
-2Vy7UNloIuHKunBtue0qvw6DjJDdDqqhDbDSYbx2pC6B8ta9SAIuLlYz7CxmF9CtRbEc9bZX4b1L
-qhH4Zfk615zutpYLJ8AJV3RzvcRd50G3OPQDbUE/qW5P3Ckkc8+4aGgvT1xnWPVzw5BbcztWTZpJ
-ljPBwD6igLnZCbk3yzeBaR8M3v6r1382W9/iXfvxbzcgVtyslm//+NWDv/zJT5i6iFnia4mejnbk
-6G9fQ8nDb778QsTFEdEcxmqk6B9/s1k0eCcA0INEvqAobxccIRTkgxrt9uPB4FcZhnQkTzuKPMVE
-TIv5RQWy0BfZ9TK/HQ8oMHInc1LVqE91bmVTUh/xlA32qAPFFx6OvyGAPoK/uN4AmLOCAhDoJYHW
-7ss6+ekn6UBWwFfZyiZ+LoDXyy9rtxqdLzyKt1XkYD+gEpiaaHBLjvsq4Vtywmv19Yy/xRlCTg2z
-NMbizTrTXvwYIpNG/JucYijgXqlcG5vNGQb+loAXRQkiV7HQYJEDbYOBxqp6wVH7oBmc3uPxkRW2
-hGsVElB0bRjuYhxFf5NT9Bfg2NlyToHNBhJOe3ELcl6BdH1LhxB5hvfeKR8PdE83SVpo4BXCCQuI
-wcES1B+0Moei6PgziR7Dp2gymUYHN7+I/hF+P6Lfn8Pvk4Obh0eH8PlnT5+e8vcnR0f45OnTp5+f
-DoJeX1Ts+IjLHR9Byaeng9kyv8iWM+51GiVHN0e/GEXw+xH9Bv1eSgjeoAhNABR8eIRFEATRZOEZ
-QoFPEQzzlDrFx9wrvNDNwuTOaiSWE0VaIDMfgsScotosVLqsMLaFfMG4cUF3MFyWWHREoeVSnDsH
-9kFYVq2uo085QVt2IzCchqGDzm9SE+TKRt0piK9OnUGx9JqotayQ6FV08r/ea06Bud7bqtnr4nHK
-NgSnJ8DFIl860NgPZOzWEwGQNt6zoqTveTPP1jn67Fu6FzDEZbJCgcbl7qjvwuLRr8YXdbVZ29eu
-SO39dEqEELxsqId0cHPv6OE3iAIrKEZX4g9V+9iuZo7lkF3AhpO4EzAGroDntsuRKmMNWR0B8t4w
-yxYLzh6RULRdpY7SKFHyo4foHMPjHipNU3aQAr3GTI2xaS4+PFT7DuzcGYkr02HTVnUOKtAC+p4O
-4R3q+u5lWoxXg3c3hvxKRWKadkKLY0yN6XBe5xhrkfo6hAblBqhscJTsCsNPccxDdJLZAS+75PeC
-bJXpARt2gt1QQwsonKsLAMDRaSPg1Emw3sxw2HwzdGdNOeHSmRl8klkTfFKcFHw85rGN5bkSaeWr
-oTopjeQDdb+oLmCLSKTUyGvLQkDqN7Bebi6KcpWV2QVmpMsvigZPzq3m3WGAwNg7EEsO5FcoojEx
-mRAdPBgzEFz5Vm/b4duUGkKGjECDtxfLfIbw0WyQLUPZYXh+gEXeoOlxmaHX6Hh9izr90OKWMo0A
-HNrD4iSNT011dGiY6o+mnQfQSjwWNwaVow9LKSFB5sW5uRkydlUXSPUjoS3b1YHfIEfjxJQYgBxk
-J5DvQAh2HmGGl0TKp76Zs9NMCcIiOZupB+K/1teCvhnDHzyHCsC859skVkGKFK7cUa8KUG8Xjluu
-vnZhipEnQUOlDL4qWHrYC94+NyfE7gmTmukOOXDJMcZvLhZyFWQ4mQytMVpLWU30xPbfUhY5Hr0X
-O1LXRbUD9NLkaGSXTgPIUpo+SZFjPbJwu9PhWKzzpivPOk/FGG4A232H4vdULUzGBZDtYsNKQEw+
-yOYuuuXkwCCGbhOagWB3ajDubUJ+OEMa6Jsxm0juT6PjTmWkDOQ0PfUPxOqtxzVGQR1PGDzHCOvk
-OaC/KZwMr7PmBrvseFWTHZUH2RGFeAqFuBMxvsNGiQ0dyo0/UtrWHH9pU8J6JR+25e0wlINArRPC
-SL/M0eR4tIm3ItTglSOHd84IcEBBBlMhVINJkMnTYbeiGnUAxSHQrYtP/Xd9khg2SArfVdchRVl8
-SogfzCmw/fBxtgbmCjgB3T6U+deaVKnd4yGRXVibFKEE4ADpus1Xh/H9cKP+6KCRxBNMlRtMCCfC
-3YL0Pa9ACpy3Pyad25C7NBCa030i92vaEejRkqApyOtYmPnWwaul83sZvO7sBxy8tNkZvLOQ/dET
-ZrYyRgduKf5eULuLvckxfNv7TNiOiXpfjto7Mapyum8+CT1QxWEjl71tCyauTmzNgTJCxAGr2dHE
-xnrHfUuXdTwWXvKgJtEwwOec9s2Xk19MTt9393FOZn2Yd2ERr7KAmsMGSGxxuKuGwrcBPhDcZp81
-IcpFvSEhbwYyKMO+hdRkcCw9dOzEioIwphv606HFazjBCK0UjIgXwYM2z+pFdd2Fmn1xHaFTYBhs
-2RlY1vEL5ksDD+8FgaWwuy9vUB/oQW2FiNlGqL3wsaVdV+0T2wYk0/leI7L7UgSsyvmUIdx2J1VI
-FqI+yrgzrkMT5sPub+Lvh21/N+zDhMrSYu8f+Q35tvkbiM3LtbqdtRkfD1pGJlV/i6Iy6DKdsNbi
-lmEosdOR4c460Qy9Hfawd0v94aH3sCMuotocpl2UNZIZGRmziu7Bjzreo5uizWdUcIZqE/pjwp8x
-/kp6Gz4HZb65dFvGSSko8s6mGYG+T5kX+WjJpVg5sNrrDoVR46UWWhvnzRgJOrEVfRBqr+MRZYFE
-o/60c98ikEzDmAj2bs0gT/BWrUNoc0vhw9kiXxId+hUPw/NgdPzNShkbHOXRFrUHvvVEPGTjT3+J
-RirB8nR4PD4amkENaVDDX35mYcmtb6iewEu6nIXeBRTzoUe6vDCn1iIddTQv4CRSgkfllkAuIa+F
-YXg6P0IyVdgK2AOG98YfnaOQ4E+KKZuOlT1b7lQepV3UzJdVE1oayug8azYrUIJ1vFZ5zNwtt1mW
-/4qxPkOfzOEhmutUSPMF2RqxdyXoONQKQL79L17/KTqZWHdQ3v7rVw//+Cc/6RxdwrobKaPYYCB+
-ACoWAkl6A4m8wKvO3Kqpb7mJJMYCMWXmoIImIvVL6BwdxhI7eIPlMNBIHGc8YCOFhoI7cHz/YsVp
-UFSqbEqWggmBpKy1riiyMmcPbtxQKVbCvYZv9SyixaZWoayRH7lRrL0Mzzc9CZzokBzN4rk7trH4
-fktl78acFzr1ZsTZlfbow54Xt2G7lGTphgfU+IeeN17nMu5B9Kq+lXzLZbFcZpyLmiM1XeWcEpdm
-w8pYXljxg/37bdh1onv+wVOezdHJXkd57o++jY8lyrO2x2PVWEV6RmLdlFcliL5xuvvCsupGtPA8
-eDc5MKK7hWyzetHAhQ7Z4k9P7jWo6QxTRdJFKUviFINLi+sNTNvRzb2bz2JkEMHeWN1T/QLNmOt3
-Oig23cO72ao5qjAoafSZOOBmN7hSA9d3yDp9g/bhxC55+FH64MHDrm7xW1PeLX5YpOEwe+ivC7th
-PB6PY9wVOc5xevhbT6c09y0pxbF1UQ/DOVEv04cfH3WdmzJiQofEntAeBzUJ9yq7qkp/wad3kqCM
-GnkqASnV/UjtEcXJdJu81tcim+i64NA5OrKupOwgn5ZMwlx4yURx3cZqKLFkwEBHhxYWMx+vz9F1
-ApOVAt+pJXGsxSGB4yKaIwnno7Lh0JKn5F4SIpITeNA4kes9UDuEqkHZNJSHB/lpg54ZPRz/FBN3
-uAz3AIb4rsivrcGo/FacSVK2Ir2VpOYx0QOjfapmzXuLG0bPO0obAC+Pf3pkn1812rLG9vy3g9d/
-oROyzrT3XrVcvP03r/7PJ31bqjhgDciFSBwLauXwSUfUlJkWj7uxZZisgZv7VfekKv2KeacfWH2m
-A/qulxnnTxsMUCxsL2GWLi7zG2/jJkalg6yypNV7MkeJSH216mbuRt2XCAb9TJkKSMZWyiIqvf8a
-Jr4T1hUfRmcYZZkKjXmve3YePZa9xxIasCxlgyujx+j8wSfrWGpdVze3mhWahDNIkfL0Rhx9JCK9
-bpRy/FJ1ifnzGBmsLCcWD8820Gj0oQLlQ6z22EooJ6GuonqzBGjO8mV1jZ3BGn1XFQs6293oXD7s
-pwSCOQ6coSDhpAtP4o7+MUW5EjQwtimPBw8v0NKNIPORlVgDN/u8vawWPNZzWtmScId7RZ6RbdoK
-hSr2nKrJbarE9rC5r2klWYm3Kd9Gk3MoMD+Lh0rIHVVWJ7gYhAZtHKIIaNAi86Wmj8jhHRAwxSDX
-sf2pPUYGcTQgaagB/FYDIljAtiycA5Hmmt91p3I2w7LQDIXjalQyBGqJ/QyAhrjQVX4L5RirAPOv
-dGquETNE6ghatjrnSFLUGN10QeZRnBdzd76j60vQNgwoGNOWEO7PsqyYsoL680vTCAVpgwlWgGQ1
-vAWEzSnPEW0unOG6VsH2bGLCUJ0Ylhl4dbaimGSPE3IB5u2K8yMuq+qKo57qbrkhgh970OBPowT2
-aby2VoHECh/ZjZXCvaGLUhstqrwpY/SJKTGC6K04I0oPGIor3GKBd7yxQZ20oozoBQ9nBJ8VjnAn
-vMXc3Bekdtq4fCwbIqINlmxTLPKafRnPcklIRdOqVtWSTDB4FXZ5yxgOkpfE1lrUJCIAeWUl70UZ
-bxmCLZtTjWxnRXeyR9hC9Q5DuyxYvNAkyGN8mUuEMpm1SOT5vFzoSP2rarFRsfHIxRU/UENeTjAb
-085tuxKfJnVVtQQaYVoUAfjz4dX1wr8YhJYWFo86tb2dQy1gquC/0pWogP7mJS6Xwho12xJ/u4Eo
-dGWNDUqJHQgdHYhN1NMU04JaHm66xf7Mjsi/zE0r+OLcuLPYbIePo7MLcKfLAjg0rPhbQhNzYNw6
-7FbqnNYXR+mV6jxNccNRSV30CrhKz7LnS4C0R2HwvyU7slQ3eLNbIKdG0wRlRRtpTpN7oT59N3g3
-H6YV2FMVhHGs6sqdka7Go6KBOoSAHInSqoeieYryDHUeU0ESKQzUOiU7yDFjtcZOuzZ5bKQ3+hW/
-9lFqh+3wCS+UJNQCakoZhhOMvGSeJt11l7q3m72xTULh16wwVGbAEuoycFRoyiDjsWpYHkyXVTHP
-rWA9FqX4NOKfmEjd/uTuznDdgyBUMKV+ikdtx8FWpMTJ0enWiIycBJk3F7KYI7+WuqFmKREr5YIj
-zGlARsCv9w/JE99rknt1GmtLojNcyxRgL0/lfOhRx1xH20VSoBfkHQp/oKYpiCzYvaOK9wK0nFL6
-7XJLHmlI9m1TcWCeQml9V4FC/IAi3aKkmJC0rNWNR6yNwTaQ56ScKB37nJTSts6UfDxWOqulaumI
-GArVRaNul6lcthjhvYtzjpViUiu90zdh/QoHIJcsl4cUzoeutrBtiPKv8VkLgd30b2hYkm7wteMn
-ulLiTqZffqxvcE+j+FME77M4tLUxq95VeF6REiqargXFY3iic3Ik2HGKPBgfJ2mYg3LIfMki2TUy
-2prvXQ2MbBB5ajkjpX5YDQHC47WiF9tk0XmEmcAJdG1fluZsM/GmvCMV6NwWdyCCL0naSzjkIz54
-2a7a5MSe0dN0F0kAqNsnmXvZf4JlXm/y+ez3MrEa6SWwTNt80sMlA4aWxJ9kk70Gb0QlDt+RFq2N
-DFGP5RzuwQExw0SgwwDH92oTfjxJlaHiYlmd0QNk5Wx0sRO7dmhCJWkgzOsMrWZ9qRwGP+xcBBkg
-9M7Q7zn0/28PdfsW4YyVpCVrqlGfNY8dNAROZK00Ia5z5z9nBG3ZDDl5/Vd6VCkDx8WCcWn1kvKb
-2sa3iZZkJT/GG5r1XotZiu41EuHHrmii4KlTp1xwkGQBUTY3Tqf7UAe9qNZN791hhifmzSfkgHzA
-5wvzTSu5tfDWI9nCjMzRBPMQoOLpEJC9zYVdkt3opGrEDzuooafdTelhEDc9c4vxPuj/Yc+ZGKLa
-1Bh18Ovyeqc3tWaHs5nKjDtb5uctdmg9qouLyxa7103vkUDKET06a3Jf71CiVwe2KY2YW36/Vmg4
-U8aNkmYCh6NbmMTdDkm3SWjWqiKA1AJ+VC72WbxQbN+Fq0jAu/NDkY1uKD2FOfJogmJYl7YD8lYf
-ZdsQ6NzkHu0Gw2YJBVmzPti5gq3CgRXsrt7AkosTPIeN+XCSL/HY4GP4nDiN1VR9Xe8zU1/X//9E
-/SiTBGjZNkeDAzRwvC6z+tY+7ZlOB1d5vs6WmIOV8Ezm/0ZZguHTGnOAYVbfMvqdHM2A6Au0Bj+T
-KEaqs5gKfpC091juWfkOc4pDueSfvFKpFPtuXIAW1KBJYaB9JxnSRzV6ooeoqktZbEOwrmZ26cse
-ztR8TPcgnsDmvpOCApNlOtUXMeMw8u72s50w77YxGRjfb1vBD/bm9PvfVAZs5xWyVovXUFQqq+FX
-RWA57Ef/jxYLof/Elxnud/bY1FoQLzdnfRUPt1b8crPsq/jh1oqfF+/6Kj7Y3mPVO8Z7Wys+r67z
-ugfUfljDfIDn6A/CCAjgICPAN2mnbC8joGGGW2IMdEvfhalYK3bngg2yHQQ+HsmA+9nI3u3RCKBB
-GYnV3h+SL5HQTPP0/YVmHtk/L/5mrRRjynqcLZcYB3IvDVjKutaOqtpt1rFOhCxUiYcRtpDG39d4
-cbdd0Ydiauuyf2AziPhSBZgBOWw55YJsoF82fseRhn5nL8bzMp5wWzz87wLz5xRPYkfWzrYE48RT
-WjP1GRuk/y6/va7qRUCWveI3SG6uxU87g9MrhGWPC0imtU5WmKyD38xdpVkvf5X0vB5W7i3QRofH
-hYhitwY+OZFqpzSAsNSv4A0mibPm4/5UAwGy+ygOmTo6mknWz7Z7rm/pzuJ7zfReMyIjpMA4UhCk
-e3XOLXgN9PB9ky4g48RrnlFPPQ6vEP06Dde647RivXjrZJqWA5Nq4fBDVML6py2INapjgR6aQIWu
-RQ++FjsQtujB2OJ9UYbOQNtRttgbZ++FNKq02IG2sP0wudekXesh81nbcohXDAKqdCDj4xhg4uvS
-AHy6NRu6G5PFQsO2vXGX9RDkaZch/dgnqWJmIpxZZyFMPip9qrLdk+wQMt3XejDd89Qdwm6Mkd9/
-J7Gfvy2/I65Tg6w5igIHeiwE/bU4OO0hA0nR388pQHADptLMTXnXBXC2H4/tJJK9lPPfyxl8Zy5l
-pEnXfO8MPrXO0gv2otQ+c+h4kzfGh1jJIyP2QOZ44g3FDoUxt/bdJz0BSawOWDxcjfBMAOPUzGZD
-Pr+LA4KonGv6s6hqduZyy1EeDkNfNtPTqcTibp7tu832DzvdPqxO9h2yc1rv/0AcgAw9L/LDQq9S
-dugA6DbLpXHBINuPOnSgaxp7nTtQyX18QCiYR5BZ4JvUKRdkFgdRU6zWy+L8Nor5fgnrHNH1JdC1
-fJ6ip3Rsz0HCDRqc2DE+YqoF2FS1ORhx5zauU99seYh8PxmnXxyvU3uPTo4/mRw+PLVGRmnY7IuK
-WRPpUX5qVbW8VlyuR33sduxRbaIM4YM12HqUYnWQ7pEnlTlh8NrP799coKm6uCj3pGoouQ9Vf/8t
-cOeZSWgWgcjxD0yiv2+EfK4OAX5FXDp2cUZjXKmrEmy6bBwEGKWcDcHk79O111tMdVUttrtpQRen
-bvltjll7OGVBCyGfrMC2Yjto/YFFAiHIz4tmntV7ne9K0X++JNmhQ3WLHqd9jwFiuX1GR862UHbb
-6Se972AAHqadYmPsScbPLsEcwUDHg1F9e6Olbscd5zsdJdV6GDzTjSgxSVFOKDmJv35di4VXjd14
-8bJi0y6qTatSyHHoKJQISMVDYp9b7s+5uvDomiVozPPLHJNBC7Yphq4MWx3Wdo02/JhvTeIFD/qO
-Qdj9AiqZxVMqYNGaECp5MGPnMRKjXGmXbcoyrrEw6roBc9mgPZHo0dgTHX4QNCxuX+udpKrO3VN6
-3rlBemKpux2qCsxzcNu1DJe+es0UkNe1ogBz61YiH0WKGnqoFWn+4P1/QLZ89PxZ9CCi9ITRugIh
-poGH798gUaOWVLVEL2dWzWW1WXJoK0nsMJFLh7gvdEhACEvaiJH3x6lFEwcsdQ0vqlaagCXJHwZd
-467AILF78O5CwyT9Cj6mk/3J3iFFubtmcaHvQ2PqNpNPZncibYsgJQNEJwGvCdtIKMRs2ob1WbPU
-cUNOholPpCO6j0xh0Qr4m+FFLRJYkNN384EPqUf27MNbrvmiwHDkxNvw5nobLQpOJkIRUKPo5ebi
-ArVezJEbag+vt6MSLRzHuphwlp9Xda6EJXwpuTkOD8tqlV0U83QYWscyVr5aIRloVs1F4mYZd6lL
-3nUvEanc74ag3PzLThLyAyFSSXcK/XJC0qQ9swtso84Dgd4sQs7OqPZImv4zK8G5poUTZd4zdr+2
-hp7HWsU0+bax2A3n5PCWOpQPrHa6qDsIX8G6wbzC9nVClrhwWZK6kQx1LzI1ORJIqYJe3Ktpv7wZ
-pU4o8Bs9d99TFKCoK7z52rHBJRueo5hScGvQKu0oVlgO44lhKrMo+vRT5QCq9vO0R07AZiTPOWXj
-45nLb1o2BU9MO56c4JuT0dwE1Ry12VXoJmp9xI6+f8N66U17cvxTiWCibn7BQ5G2UND7Pcsd27eL
-0E7xI7JsXywYDAq6kUyzgaabGC8DFuVsFk8k5ohchTZhL86T7oWPT/Tbi8Dbj/TbyyQQJiqmECus
-h7FsOIQ+og+xLYTpE+F78o64bZJ2Hybn4vOP9YB5Hnllzrm5C10XY+x8bJco8H2nbTyHhIdU+ch9
-ZTGGh/c/uv8x0NayylpsgCkQpm1IrMetd6PGZUoJUcvogC6qat3EUo1LwOY1ijCS9/Eoehh+w8Db
-XWFQoBNsEcZ9SmP42IUlvsyXyyo+wfdEApdOr/HF5orPYy8JC/Du7X/5+t9i8BVKBkA3Bt7+yav/
-a0W5pwb0nXJx4I6+JFbMDIcyQrmx1EZkEcT4nHgDGsMgWhmjdJAX1Rg+hw10hfpeAbyh/Oih0Dsw
-kRbvHFEAV3oxRApIdK4xCmmFZB6P2HZHmIjL1orABkVD6Rf86+Rl8JKie6u7anBc4vgSDZt2Rlkh
-zabWm6LWrtmTn1Yn+7DClFq1KHOD+Wr6q65LiXzm3fxmVIYMCV9V7TM1iflCNrhvvvkmYhynvvC2
-vjbWTE5oT5yRAheOid7yBYVhS6AkGlLW15tiIZZk+NS520+NqKvANADKK4E+hO1tQg84Y4j6PeRC
-FWW0vBxa6OYUN97wrXBVnBSHbENorsaIhTr00g+PqYt6vSemoCRn6LnQmLrYhSmd4Edhih5oUn9e
-NcXNc0zhwctpjJ8xr5tF+PNLwKSQJkbcGnGjuFbn0yMPhfNLTv6FuG8uizUG/jChvShgFzFmysrj
-YM99F62yWwz4ITFdOKRMhqE8z3BSXWMuv0L1Va78z3H/RuGtA4/nQjTf1A2FHhnbo9CfgRBZnkXg
-ikWCfwy+L9RbghheC26d6ANejm6dO4ZjQcG2gZkY5tNltjpbZNHNJLrhSUfx6QqjZ05Cl4a8QuFb
-QmEqqpoxzSiJr7ALjyJaeA4l7VOT1o9d2YrbmGEssqstS4xPB2F1ZcC1V2fVspijyHnlLjSTACsM
-jepopFxbas7WrSFZXeHrtlL5SJYLj2dT6lpcA5JOCnPaESBItyrEDFOWDVgvRAINbjTSl4UsBzAY
-tgObWMmys6Zagl44PfYXFue/8vBlwg/xAmO8JmQS4USAzijSDiNT/bkU1Ds+gZoHxbqFj/x+9yeK
-TyaXBZndJIHU0Qc8Jp4VI0M0UfwgpuhVy+vsFqOVcRPUqreql0YVdGLJSHdAN0vAO1b0r8svF3xc
-KLbocDEO7U9FYRybshUfqXztudlmNeZvVJmM8jXrRUk8HoPwkX5YgiSQaGhHkeelu3sSuIMO9Yv+
-aPMs0W7cvbmr0zJ7B9qxiI/48jTS2zTQEbd58tBRrvCZ7tvliE7var/r9i7bitu92sD05of9c7Me
-APRwMHj68ldMZ9w6C4e4r+i9DgVCb7szubcAybQfcjNWLEsJK1XVBW3sbEM4z+YUG1KCAXMoLlpu
-TLkoPHCmGIupLTOur2PuutEdJfwGYevLoqGQLCxG8DNORO2xVY5pWiGzlAjDqThs1DmHAFxJU8h1
-ZzMEDHS7RgeuAvLkTF/wwQLjMdFe3Sj5QH1PJ46jP3r0tT6/7z+ktaPEYE0KERU6n+1LYby1eSMN
-67ZN6G9QVAjWkIelirjLy+7JF19//fzurS97mu8ZtIPGRVGHkKiqQqXxy9mzl58/e5GYdpJ0vCKT
-gdMUTvA+bb148tc72wJ1rGmbba1ZDbhVQ3IAH4LtRJoP6Rdf/V0CHNeCz46iRsGKsS3bnKOWxzNO
-UIyBTXGF6rC0vEiJJyguNDbw03MJPEerFu/qiTwLgiOG+8MZA65Q1ZYA+Yyi8IkBicPo2TWuq/oK
-t2Zdk+IYZld5aZoAHUKCSDuw6c1vntU1hsDT2zenvHTrg3JbcSNogZdL6Zm1pSqWRoEIycnlVlBj
-rGkY8+4mg0INqkNWrXH0usE8xdfAaCRRcYZfgbOue6Rp1/Sskk6G1A6rBg3MigY3xSBFvSzF0Yhp
-EzWastohbZc2QxccwtHTp7vh9jCekn9y5ibZ1PxBumOuCviZXy8SLyFKBx12zFkUPNhWnO5q3UnG
-2MnWiLIaiQZbI1Kz9vprlJBEaUXSp7iSawrOQlq1R4/D7bdDhuSYWh7mq3V7KwHQGyQXvc9a+nD3
-7NUeKFvbd0X8u8yay96QXfgy6dEUZrP8rTbA0A5u21yO5VTB86x8KI+5/E77ADdzPF7iNT2P2XFb
-Dzvv1DiPkfKbhy7f6wVYpRVFWyjT8VTK2A0s210N6DFjOmkzUN0GMgW90XRbsRQ+UsYBMTGVieEx
-htwmGqKoqshdOIkvCPrYWtzLQzypkRqklWOskN6CUVGr/ZVihtRx/NcYC+53vsNl2BxkXVCKDkgU
-45hDGm37KbqdJaaGoZpx9HF7TJZGvqremUyB8+nxSJJazSStiH2ubaYOa2FUN5wYWMpmy0rogpL5
-ToHg2N4BmuvYwY3dj7LLjCSdCSanpyzO0JO9KRYSzl03BFswN7TopQvWK8ksAs3gEIPWkZBVRhzX
-KlQaZdQV2zGI/5EUj8I1zPKiug6GcQmSgMOx55cguiQff/xzmYIUuqzmLe7GRz87OhrsZ75RqX8u
-N22xHNcrxLyrAYZv7LnT7Xzb59pSvw1mBcje3wawDVMulrahZ4tFCCev1x4kh+56IxjRnsA57FaL
-T4Ygj1xuyivKZPDJw48f/vznYW52md8sigvxasQm2O7CeQwwXnTHZtxRVIKai6jI2CKmBsgoyHBI
-L7I0waB9UA2LjkGay+x4GCZMU46Kdbdz9qyczRgy2C9UDZdo8KmVOQRqGdSmScezMXH1ulEU1mzD
-YsnnFUa3xkh+0SX8w5zq4ktxr6ZOh9E9DebIjrOqVA5KVhXXZ/EWx01mTMeBwCAbbOecjI+JJpe0
-L7QTFA+j3hJKxpqeAnojFdisF1mbJ9CYNRxMfLT0/U27yZVQRmdix5DSfWZFmDK2s0uqKx3m2tUs
-lFJwXi1BVEGWra5XZvXFhh36qalbvJ9WVBtuAL3t2mYyGXjDyyYPmmqVP8AyD9rqQfaAlg6e07sF
-b262iJkUFbxTwftxKhR18B6s/2PVRWl87zqKTW3qfO96qjKtkja4yYEu0tVIXBOnIQ9CykgNdaQH
-MHLAGrG7BDcCy/fsFk9cPJljyG2ppnRdv6GhI0bF6lVM4Z2vOxtBbNeXQhROB5oK1gnzg6IE7lss
-dPh/9kRh95qr622b0Rodiq6ux03eSlT6xIXJxdVeWY9aavKExnAaYt3hoOesqzbNHlsxufm2ZMhA
-BuP7yIzjnuMghi0es/u+u8AQYj1qvEwKqOFSzp2WWEhATZaCAaurV6d+sHD7HV5TdRZrIE64Ox+q
-qqZkMwteySZfx6Ooa4qH9RLQlrV27HQ+vJeobpp7CTYDf/T8Nz5JCQ/HCPtGrzKrSJI7wkeP6zY5
-mU5IYLhGC02MhWIxNvmHYF6wAWKl+lSBByY+XGbwA+s2MRYGttpiEEhS4rEz5fU1itPI0sHpti/H
-6pWrv44LvErHHgxJwLcpgMRoiuMuFcpdYhrAydGpL3c6Tci09zbinqlwk3jTN91HmlUzym7gUNO+
-IhwakV4b4aUlMIUZRT8YyvVI1RvXmLODlnC47HlEjkmHx5Pe7cThybLmzfc4DrOGXvB2NYm5w8ze
-clJMTvsg17h0OGx/r4pYehlwmHCQ7+5sFAql74GI/r0HqSi4Ablgm6QDhl8Q/Yp8ZjJ/eGkInWRq
-yDmIm6HfAw2IUgYtl1GM1WLUGxxTJsrHsPBBNhurQ9/pMariGzw0wttZCD55WWEMeyoieWOIgcrN
-LeQkeJTUa3YOGGq6jMK23JnTAMWebaZmmWLX1imqXUu42wm7MhjvCnx+asPCGEUzbBID9LBR+HYB
-rFtQVkD0GEkoBx53kB4ejyL+F/bGUHtK0UDTqtZJcdqzEVuj1UX7CsoAdcH7xz0rzI1XSAFkarL4
-S9WJH2MionAn4hrdObvepqcfIK2B5rUptd8En9DnlL5Pm0nGXd7tdRs/CHA6U0jHuHpAG3sXRCg0
-6VO81M6or81iA9sn5D4S2Xqw5TV06EnjfBkMj0H2FTg6VpKQFKHzKdPVkHwa13EPOyipLKxjstJ5
-/iBY9y4+NdCSZ0yKvPM2zG6ijilH2OdUZArQ30NHb1jeMhTOq7JFRjRCB4+mOGPrGogmKmUYww3P
-KDGiS7Qgmeha2N8WY6B9g6ZY+q76rD4vMfsqnz89/epLPBsHCQkep/2yly0DbXECIhR5VigvLetl
-sVxs6qWiINoFuntcQQe5+jAR0yEUy0RVTkPnYDpkiy7luYgi5ihHTY03Vxon7Xxog0LzxhZXLpVf
-GCdvUy7yenlLecHIZswHjAH6U1GF8MSZ0kwa1yhKAN7fH6XlYmuF7LSUBFzl/MOltqtD6sK2Cq51
-qmnxqMGMT0CIQbM4Fuf9F8+CqcLY7tDy35ZmRhE5gMq3Q1xRzKI2a0pbveizYyMSp8ddA7b0ahm7
-A6Sg3Y+ktBY0xmF5SuDGEh9MuY6XqmJ9S/aufOFga5uGzYcP82Sd9h/Zuq6Me3lL1o5GZXnWCM+9
-Ed+tbqxr8t/Kr288tEjVcNkxYJg4dwqbCeZ3FpTvdMw87tlvqFHbBfBGuzImaUh5sBoOkkRoim5G
-1M+O5vqIR4Ppjtg6UUICcunAX67EKLUN0Votd3TylHwM7hmX9GmBtNis1uogEvPonRVlx4tyXcyv
-DF8qSoCJYMNTQ+QlNmCeufh6q7l462EN9zpGAAW2cwLv7rbc1ZXZez8M6Ahizv0rfeMJEy7qzRdJ
-HQQFztWE4rDr1OrsRV468t7pIYh4StZpZyNZG9D5sjCDvsjaTAk2175gQwWpiJmgjt9qfEY2KGwi
-mCvNdqQomrPbNm8SbDLdx6JoHB8wy2fTRFR/uONcq9st3jfr6/XucBIiESvsdECl7mBokKp2h22l
-IRzR7ZkLbU7Ly3mFamXSe36ycoJmdgNfyO1wF8x96XzGbAdIq+N2xnlWFSiaNQ8cnyEuwmV2q5+6
-isUUffVQCtiApVtOn4/28YPk/Oy0pMPBbLUr4pNvnr18FdLE8BYsCtWLgmI+kNj1ABoUTrCwU6W2
-l7jLPBCiHgdaQ0PBMoN1VSgfNpJikIWECHjHmMPBSoKeO7LL7GMG4aLs2Jaxpn8ojI1YOTsrRsmZ
-ziCs0iRrQYewlI5xCLfVRuw2eIfEP8siOyTdAo79E7BSi5ucILie6yy3tmNEv4FkK7v1LBbQXsBi
-oQWoMFEGzjssSSZcx+ZMuwSOtdoY41Qv4BB4liYRcBLGKX1hVNlGZHS+kB6UFF6qVkZbXOTpMqGj
-f9k67F6ALH8QSJbbQWny1ig8I1Z+Qmo0lAsoPexwoJRm3ihpd6R2YqU36pYSKwFzaqgYpzhuuHOs
-g53hsbp4rOJjyy3WOKdKbCc0BVJgBTy7Mz3rq5iLHPVR5J592rruuRugd5d4uMGqHZsFPtydt+tu
-jSZoAuSWu6GaNKd+9tWvH33xQ/QmgQuRNlLTr3UrL+Asbt3As3yzKvZoszyfK8z16Xswu0fNy0X3
-+sxeF8S2uAOZ3p3LYks2i/Vq/JbF+/qymF+SEQl2Kfals69DNeM+zd8MQtnjnI5DSzPbxxCRzUlA
-vLMJInNNELuSzXI2Nsk369jIrSaaNtCCbanhwBPYU96oy9gK6uc7oPZ6W9+ury40+oD/XVE04RDr
-slSR57ftJd5RyeZX2UWuDzEweTbZjNBq7e5Y3OyYvOrli7aG6Zz22DTOxsDz8RC63qxhK100QjxN
-i+7umoSyUl+/Hq9vO/bG60vY2Mx5IbI1GsMhO0RhBAdXkHphorCQhToSPNHZLjkEIQfGEDIosvSI
-BlLFi7COQxXRVplE6PQyqTFsQpNzuJKuB72LtqAq4oi/O0wMeLNwk/cpNEVjMJNIs9retG82Oxcq
-EpBia5ZQ4CBI+y6+avxxC3cbiGLX3Mh+DhneQFH1ELRvdf7ywPN6NksbFixuoaCi2UvOtSrLMVHi
-slyU0qMPJDYCvDk5OvXyZ0s0KulCLo2q4kNg5Z3oX3zWVVKs1iMo4OxK6L1pzi22XhJf4yLgxIju
-NXE+tYAVT5ZSOnJ0ibps8wv0pla7F6jqpLCKN3nVHKqzWGrC03W8K+IABokpO2+Dd33PeYjuhcVg
-KCAayL06Wm0a4gBZqQZBwXConfT9bo6HbaFbNmhyzlR3v10tfp9aYoPzjoX0tUM993o7GInKJtTr
-cylri+ArlMSTuTXU6XjLkOg3/jxKP4q3jdw9QZg80rRsOR3+DkVgUJs565LzOWh/WFxi9dDe49R5
-hUnm+SVdm4K5XG/aB9gtALtZ0wTBGuEyzVZCstTnIP0YofKrr5989cqzZquFC8KtLFrG2XDkGjd6
-NpMu8iaDMA/ljUbv92lgf1FqMI6qd49xqGDbvUqP20n7RnftWr0s/2RVut9nBEpIsBiZpBO/TveE
-HZ829mlvftNO41hdJd8DRNUC/e24a/X4yzTsYYef0EWJvLnVPtjj0c3tr6t1wJVYTTi0Mh6aI8e9
-LgAcoLCtBLdmDqr/SESpVXaVIyuWo9n8h5x718a3bURMpX0OtxaBSBW3LXZzt2lCip0OQjYve58f
-WoLJsPeUCzs4iK5B9iPvdVr16GTTXpLvToOvVpjcqs/5iCrTBU6asjXa/dR0YFjmtgIGML8idY9a
-98dHB7JTCn2srn8HuCm+ODn8eHKKfSUxjGlOWTnWt1XIr9Rpl+pOfFc6Om6St1YM8/8Z46ShSrZv
-s784xVQlKP31gG0a1xek8jXUcSYobIl3J/WDnZPaO/SHp4M9bnk0jUWz+g6dNLPDEkxbwZY2OR9W
-UDBvguIo7zUESijmgKyDkRqlpBAfhGl8i/FxaySAXQtvp+80LY/LjK6rzUHIqlaRhnxRoRrW5JtF
-JWpbzzUXJ8gqR/1GGS7MMqSaXkzBK6K22OwPkCln/5AG1skNRgrke5eOQKYTX/QFN+g5GcqXu2cg
-bMwPUIAxbd42CKdl1H+HRv01Wo1n1bpt+qwUGF2a4ziSSyI2sqFoNhj8BmNpsPeMOp0befd2cgme
-ytdI5foJxQhG3sitdfV2FOzUcR9IMlqvKMp3JNopV3eJZGtgaTBqXljOI/CbzZlul693PWc3q+fP
-nj+x3bTfIUFka5xTygP2zpLLNc5OYsYPO+m7j4FD0GOnYewbn5Gt/kTTCzJTcgKijrx5sTwssS/c
-6LFxDiM2p9g9mxIN0bl7U1kVuM6K1juRCxxzcuOduBA0+8FzSg3NzpNK0p9aZORHXXNIGBQYX2Bv
-MAMPggPv9gHHEenV8dt8tUBaHDObrXMKftjaOtZdMi+6MzXqXiCn987iJF9zCpvBbJJ1vnqLCS9z
-wkacV5tyYZvv5ESA14VrNrAcw54/evU3rqs0qfqkrzEEtibhzl6rlS61LGFFi/8g7Vms6rWXDVsM
-M/SyyGrXrDfPSrHD0QhGYqtrdJRepzSedkyAOxTEFmDyzjJ0P8QWVCQPtGjSqSnHGgqNH2NNY0Q7
-rILl57cXULhXO3QdigOmszWTpLnxHvYd3HmGp8/o3u/GLrv96o0TwM7Ld0VdlScx2pPjU3XL5D/G
-QR0njlk0KaUlTnjvPuzZDGmSVXK60IWJ/tBAND/k6E7euRrkl3//8tWTL198/fWr+LQvOlC/BBK8
-wbXdJUOh76TOx7BNJPG9lwTbC4DtXjyyIBVr33aOwPZhis/BTZ+GkJItUNQ5iWPcApwZg4X55JtX
-etKECDv6ac8F8S2kAA0bUpiE54rBSuJ4lA7Cdq8eaqBDg8UCxQUoxC31oLuzaG5SowVT7D02TmF2
-RGox2EwvYe276LzywvUmO9m9CPJSPlmnk712iF5D91ZGsFUJefT48ZOXWy4M2cvADksvyw93HvS9
-RvVvlbeXaDLmp6l7j+6ywkD7NUXdmfQf5954C/lvvv7yibWEty5dr+4Q637+4tmvnwz99YFvmJT9
-sQF4iThaWlB7I7TeyCgPFNc/oO0wW0rMNW2TxAAZSN5+LDleCm4bEnhvBq/XyDE8nHkHcdxODBJx
-jjIpbJHmvMxBTyLyNBTjKBgZfNs0G/Ti0j5Gtidj2LXTWnNKyZIWUXTCz+QExc3Yw/CQaL9y3SLx
-KUsz+A7ddrbJMc8tOcYJlgkye95c0oHzHqjB80TQOxUeqk1NklvPvi5pLWTgjrDKIPd4QMhLinw1
-duY4DVFi2Iiv8S24ovu0UxQ2pX0VHUree4iXpzbOs6t8xvF4oQ9ZpbBP1fl5cTMF5YtOdg5jd0JG
-lD99+tE24Rbo5GqG5+OsCRz/7OHPj47SCWn57XUVLbLbJjStoJO83dieD+zoqoIGX9As4clA5kRk
-cw1l2U2x2qxARsNDZ1QKpTaeQjXNZsUyJ9+Y00pido4N89DH3fzT+ZpivNUWcBzgxgZvSX4ECFsC
-QMDDQ6zo7pVK+uUwJ/23X96fnpzgfZSaAOc4CdxgIXdqLEC4VIGZNy1H9SU5JGE3QpLM5WiOcZQ6
-AJOAXKoobUH7LTR05mRQlHbuEBHSJBhJzsoTvN6n2jjtjQVpnIK3yHsD139y0zJGFCUJZoTYyKJA
-2VzUTS0nHSMCZHJwZE0LrfgnNxyZBAWViU+60FeE14MHfWKhzL26ohQ6QOc2vKkPHlBAwa1nPg5Q
-mH2Av4ywpifkHfApAlESsN4www1O7YZJWQ2MvWkZkZTlu5Ze7x+nP5SPbdifVu8C4nMfaKhgvrPK
-s5J86oDB0JW4De8/2QUokSFMa0KYCj4ndzDNGSriuoO95EP2ybBpc4OOwLiHX/HdLhmMM13sFuhx
-qShrHRpnbFGKB3uMFtN3h4dvxNKOky3uIASJp0qsbtcUkp3jLWL84Y5GrNINq0ZHUWxdxAmdRaiS
-zoUdoivsba9wA7oJuQPRUxlZLtD4jPE2U7VCi/SAj4JgaV8ladQU7UayN9O1BeUPpZHNOY1CpM3B
-zrACIVRi+F0XwtaZ0KUZYOGS0TPUUtFcIetv8pxkqcsc1qUjQsG/BhX2rAbCf0qRIa/DdnwfKkVr
-4vxEY0yKMSyg61x25UBD2kWVrMU13SotCxDurARb3GI67rnVragILYk0Y9u2lv23Ik0PEpdvj1jE
-d7A5cPoUaPsCb6DUSYCkUmdlw6Tm5PBpCScDT4CZ/CG2FDa6w7NPp0ooig4JnB7VlyK2khTRzyT2
-UuNbDNW5PFc+4HJjtLc0Bu/Uk7pfHVHmHVkXLRlnTdI+PGyPMeRmP0/s4+E0oc1VsXYETT6nx9by
-xX4Kfj+5KZLjOAC09niloaAHG1uj1x0HHi+rKF6ex3efAnHSpQXC8RK3gQ7K/VmV1QvKrVVv1u2O
-KB5b2poQ7wDQ6TyePHwcvIyi33B8A/qGh+/bDSEDT8ihPBdWpQ4WMJK+eDXY9ofXL5+8iE9tFgct
-bW5GEYZeXu5n7QiLUP39ffUILSnYVyj05U6bqNVyLAJwbPDR1PNITk03ZBUxGyGHB6/nJxP4pcLi
-HMZ0bAV/4bdquh+N6Flf0p3ahZPpXaD++mUAaIeZhloUESABsEZRsN1EGh5FfpDDQGagNNC9r9Nv
-lDDZ0bh9Hd1/r9Ls2he3NdwTSf0lAQyhLY54CWR6meF1AVjOF7ij0xEZFT7HGaN58UMoOqg6l/mj
-BBn7XJ7dFWuRaOB7hlsMOxkTqCKW7RFckVN+WHedOsUIVn2dkdLK2g7R1lGOuHh18vBSmZOjUzz8
-Wa4vM05hJw85M1+c9kcaHtiOYOxupuOoDGdDDAGVhuJEc7orSXaDXeNGnQ7e/tvX/44yr8mppfKL
-efunrxO0AFwCjzxc5u/QhWBzdqgEzkvYuZcoB6Ke//bPXv8ptlFUpvqfv/5LrF6U6D0J2xuqF5f5
-cq3r/Fev/2y2Rsprx5dVdYUW0rf/9av//R7llovwkXuIyJZSrhGtl5uLosS8rHJMSCfxmM9wvL4l
-qUIOc1XJMZtQBgfR4Q/1A23ptAOcYvuHbHzATrc42lm2WBCKEh7MKiuzCx2HG4aF9j9Sw2S0IAlk
-C76ygiZPiuUDbSDqUZujtqJ3RYauNBhVqq2oJad1LV5yz+w6ktL1Gwc27ayWGHiE6tBVBfkLFjn8
-TIyxfINylS3y6GJZnZGZOXuXFUtcPpGoxyS5346xgwcy47ofstrB5k0UUjSRDF5kfnRdyCSmHWWr
-rdZMPGjWJgF1YZKx2OOYr5Ce8xln63RQQc4aTWd4JrcAeRmfFxdicB5RR6IkWQnOzI38UJ/j86Ju
-TGI/ikAeBBAWO8HIffrASWxWwQPjwERuFSwxUhSY4w4ygFi4CCcvre2xM1VgE/TukONDaTSXeFpQ
-yFNBCydRlhuGNHkY+odAUP7yhdk3WfOd1Pn55I3Q86f8t6oXef3ZG+6EdyyZ/aqc58o94QxALMkn
-nAyVRD2gAUn3E4w+xaOaRK8qXBcusmQkI2paM9LJ+naCQANIVHdsUASiHsjyipfxkMfPvVKfvTHy
-oPSKaCKzB6OHl2KoHyhInegG+juDotgTlfxapgTvJS3JMI73Eug6Gxmx2M1JKfvYMckakzcya34v
-j+kPoF9ROdAq0HZLFyok8O+hNQCpBiq2IIr2xp5mTTHoQPgRbV+g34ilwEopF5iw8TYAEIO7eifU
-IXtSnQ7UZXLuGOUT3mbobocicdIIFWXnLiMgh5KM0J3V5EyDFJ+Vt5xbCiQLKcjcGAf55o1A9ubN
-gHV9ETEpp5VKVcMALtCtmCvxoFRNAOqmxTv0qG/KhFNr2AsIy8BC0LdrkeqautPtzBE3WOE7VuIs
-WYO0PfNVG8X7sLzHiubsEPTK3FNWucOsBLJsYeS9XV30gD5xSLx50VXXTUnAYSfLqloHWSuJBLs4
-q2q8d2h8/BNiE+ySepbnpewuA/vyCa5oEUAUZ2zpGBj6Ib7ER65UHffsvs0JyHknjMrolVtmwYLN
-sNBst01BH2IukbO8/edUKqNnGHsUJApFUI05O9vigMicebF6DU7LDyufWeAQ3fxoEprpKIBLdf+M
-CVlDBJPUVvDdu+Qv9V1q1rV207IqOWNJoEBXNQXUKFJCAz3uJ3SDtkzIUwaRL0bk5yY+eQB5nR/S
-vqwFN2oaSP2QdJJxh5cYCJlE+qlvD2hoWanQ9l1BRtJgSBM6JZW3guwUNhiPCK/bli25aRQwMqZ8
-FeXqvLJBGhuZRgukUA39RHn1IAsQx4rSMcBCNwVOfEWjhT4kh3ytRcY5E61hCcFB7UkRM32GozJR
-sWW8l4/UGSUKIK9sc/7jjp5HFiJV092+8NFJSA9oyvnBdPwV3rcEWMiKHIqS8Qh2WVR2SihI7ZR5
-viAHceLYrmT+5g13CVsn3k5Ut31FY1xWFxeIB956XAwERkKH2Il8qWobw+oZuxc0up2QDI7LSN7n
-iwS/WS1d59FvUXLWBZSgi+W6bUkx0BzwBif/CcKlmPZWyBZ5k1tgNeFtQ4PTRKYCehNLDJ5uu2Te
-UuQgsIbQqPjpmzf67Vit8PTNGzcD4GN+8YKacyg10N3vYUuSCAm8+ystSKUM/XE3qfWtGi0OnTX6
-HSsui/iWjEUiWxadxwvVMbFFFHk2vzSO3IQEuWxrN5CHeAO3qVfxWc7BrSXE03WGcWxYb5AYeVbr
-vGqZDdPpxaIimxjnS6Ulb5XuMNwQ4naxNbcOrgNDy8ohH4T/AJPjy01Y44G1MCkfl9yV1tENOa3L
-Bk+5ZVrGWwAn3rATbCRKFdwQP3uch7RUy9vfIeSx27lualevF3mZ1zBnM/zWJKu8zbCu1a0qESUr
-aKMAZSFFogU0gi5EFhjopmEPPxekH8HsR8DA9qyk4B9v+Xr7AW8t+GlEG5vtAolYsnS7EfkguVL3
-DHYyaiId96kDMyWVql7ym9ajAK2qsfKpKjZAvusHOA0P2jyrF9W1K+Jq+ZAZht4e0IY7X27IOjnP
-1rAG8BOftWiTki0iMavWG7Jt18H2JqZpSb+BTpwWpAYqFOmUIGk3U5LShC2hlDCH/RCW2OKwrQ7P
-8kPEiNVFovhhwemUAmcTBSMK826sQILC/NKoFTGn1JHojK0At4cq0I5lG3LnTOFbWX4mwkrOqmqZ
-Z+VEJ2csK1gXNbl8sLTqaN3KjcS6ftNhhT6Z7FrZPuUlSLbFYqQDslqE1YBgC8oxIZ3cLzFF34ZN
-eVmEougy3yblOJSYBPiWkW7f+CgkhkdV3rzpb9mU6jSsbx6ybElgvnmDZbc1qGauf7U5qlAQ7Ddv
-3pt2FeEaugiQnSmPkeNUi10CFusU7cpB+lVyG+cbVkPHQxz09JElznJtXpJxkk7fgL3XoWWlkh8r
-pLHbkBYQaKMiUjhUe0ETtq4YQ9JVLmInTwc2EZKJLFupMicineb1+BV8ZlFTmUkHyp3GsD6rutR+
-hmQSqXOL/uYfA0DPyvPqTe+6NGO4w8rs0wuUGUm21BCH5zqSPZtc7DWfN+bhaA2KO5lu7au+NLAf
-41ROgCWjwu9JtJbemMV17RnCdZRph8yoqTm86vIHKekaSEZkzEPno42tc11fVoovoveeqHCilf/Q
-uLV0YJJTC33OJdHl2VXhx8M0d0PB9NAZO6vNQVi1hm0lP8eTCXTs6RzY5TfrZVZmOpQl1y8a3PlA
-lj7PiiXH6qCBQOlaZlX4qx35jfJEVEpYt1q2HSxNGvpCYteh/yQnyZbLByplttKVJNDtGRkv0NDc
-0NXSrDQPqKEPi/JD3BQ54p+qnTcgQZG118TwRDaITXAc0BqNtmi/1sl3abNf8Mlbsywu2svl7YgN
-eZTJA7HFAXD9JlQw3GazWmX1rcVcfyyaK8rz5SYHnYSjHIoYmDhOAMIyZxyBL1umPxopMgSzyzwD
-bUhTIfEA9M0JbBwyXYy4RdEA1dzyMQ43ggOsxHrC0Jthdgyp0j2pTMQTugzcZPuATeAQ9YKLqobZ
-BTmvbpd4L6sm8fpdXp9hGESKjXxORl27174Od20xahAzoZBEPeCW7HNlOhHFA0yktww3braMoGOw
-QoW0YgH3Y1DbopoTL/1xNwzpRU7z0Q5Fiy2Rv905VC7aC5VhR0wCLFJIc9Zk9XTwe7BwkSelcRDi
-cy857lzkZxvLmPrjmbro0G2mvBXyhXh04OGF5zyjos/eRpiRWRwOLiqUaVTl7v4s7W/KTg9Ow91G
-7RoBm6/giVCYgA6M+1zYvKpRyim+u21dicMsN4oes9ggMphwg6p8pMtzm2//3es/JwcxNNBp967/
-5jXV35RsQCcDndxdzdYFV/yL13+q5Fehxrf/7av/50/YwQu437x6J/wH5RYp0kjWh406MjHnpMwB
-5ZYlN4xxuQfE9hFEDBA5nlNISS70SlgHiOT1KMLfT6GhL0T13Mfl5aKuNmvl216jnwA9SYZiWJOc
-EfTQ8gkZHh7KeA5lLENzIZLPwKdDEB1gYeKtweFIHYZzQiJTFl3mpkMfP7ino6Nbt210YJwOpax6
-vRNG9MTqA9CCbYiFPxy3NxiDEI1077J6OgTCGPoAa2CJMOzIHUi1ukW21UiL4TEQaOmdTozEB2Oq
-g97S94GO5Io5424oe8TQjf6Fd/XZH0R8Slw8Bn0yP+ciXwas6QMdHS3RnXLQNRgvBV0DVhynnPaM
-QVUaAorVRcvRESlqNdp3vx04rvMShKAk7E6Nswu5qyQu/roRpwXuVwBUF4+DAV9UpxUDYrEUTuz1
-JE1yZGrmChIJCpmWMu+MSFS0L6pTIDK7CCWjNV/dgiwCTyMj+dIlqkoJBSpBkZ32nG7Uo4CqYqlS
-Zc9P/pqeYhqnPO2HbWz1BH0ovAg+UG1PLBXeQgkpKKhRmKwXLvelgiJq6KAa8sAmSKmF9xOsuLSJ
-lBwDJGhzeMo97RNRSNV8XYLWQodyT5StNfXcjqWoDAPAVMAQiXk3BTK0JaJTuFNpLC8GHYtSp6Qz
-cva9XqokvgSx+u5eHoQJBEVMisi3+woe88C9MruCdYaBFc2QMCYcplyH9r24iR6t+rtIosAaCSwj
-1XrqJQTk2Ef+ZI+/JufoxxL0w6304snzr1+8mr3+/NnTp92a9tsO5tTKcYMzKGBTlZAsb5J57adl
-K+Q+r4XTET04UoOMDqPjI2BLB9E333zzy86MeFkV/VWp4TspJtzeaeBSJRZQEYCG944+WkT3KEF3
-Utw/ZjgCAUMLzOJ57N8KDa+i8CJKe0DBhmUSx+zQPlsU5+cgyWFbQnD9K9Cj9guM+WNPYCrxc4bf
-lsN97pwWaBGcycB4nkn+0asZDYWJs2JhMc5nxIP6R3gyfP3Vk2+eP3n86snn0ZNvHj95/urZ119N
-GPU7Isys68SBintNT/t7U7FC8Ab2WTa/GqOBOGtn+vgn+XCfEcie5m9XoY1oSyAsFUlts4Z1aLF4
-iYg5dni64uZ2ogtWS8+rniQPtLucN7zTcqyM4YmQxenQ21v0xuwAIpsN8h97s2FTrt/tzu0Fx4In
-hW1lsWPiw9SzF7ePo9bJADgeJYg8Mzb9qlSaLv2zGHW+zC6aqWr+yRdfPHv+8tnLUTd63qwqZ6TO
-UJSmkTJLIHdykSPS1o+IGhUzlkfrxgNW3pvd0LHiyyCBX0Ukm+nyrJWorw46t5Cl26gApMOxp3vM
-JobsDzQ52oH1/ecyHbz9717/uT6sIOvCsrp4+9+/+kLUPfgGGwhqAfkh6VJ03cOz1JNRAhcQ8gCx
-/mQcem/A4ULJ2dpVA7+XFtc1s4FmM9QDUJq7OPv2KFLx4aGuAWJ9V3tCdUaXsBQdW4W6tPQs4g2e
-RqV9DxUWcf8mJAreoOlxR1EKOg2b4U09fUe/Geh4JeQJiXf82OaqasLkNEt0pCspKUNyA/q8aDwU
-m1OVU1FVVVgGZSWNqTbdDrMvu0EViQRB1wp1O1DhGlB7jAIHCRFnG9p5jbu1Wmz24F7Q5y+qC92t
-tJ/61cJXn5JOo+l+btk2EEBs7shnNrGQA0cHbfbWIY/GAnonExsG9+3AuX18xgiV+CMT1xay9tgn
-3fNLdPue8sk7HmfQAwFDJRI4oYd4tdGEF2Z+hZSm3vET/bJunaDWfLCyIDGRqxxPLOGwzK91i1jM
-bk3dsTRFptJ9J+Ald9wVqjjKv4o6GYpkGAB5u5zmNmkHsuyWd8s+8LrXXZPV1r4GqpDhaEdy/xQv
-lQIu4+QkDnXmJhJwAHAjjhq0K/wOLNkmjjkiwwXvZtp+oBYgH4b32wz8BerZC7RJx7LlGBuBZhrq
-E0daymuK5OryCzddLZ5+z4DD1To/OKxrFtD4eGROCWCWVXlhmWK9YN2Up2MGKkqjFBS7rmoRJCYK
-GGmDnAZtFqo3VghYR0s72Yj93qVvLB7sySRHhCGD/jKvdFJC3vx2DlmNxGJqqmbMbj0OQxMa1LWC
-scqsNpXbgrugaRD+XO2YJTtrTY+vgz3wdOLGlSYwrjF3IiYKQBP5UHyK6Q17aYVUB5tre0IgHneM
-dxzcTQUci3kvckJMc2LlXCAr5YJE0fgm9kMpMQok6oJAbBDj5GzQrXzT30ocu3W24MCqZcV+s2ux
-hPo9IJa3GP9kfbeGTh6eph2uoZeBIuNddOT60ffTUEnHR72Y2o4Ra+aHT4eBWFPbxklK6rzOmst9
-bAji6uCitReYl1uBAfY3ubcQQ0HkgTXoJIJ5H/S7x2PaquqxKY0Bi09JKWBU+m2HV3VZGxcEhUDk
-8w5v6+dr0thwfr2YMEZcO1y6ncExc4s/iDlcvBok6Fn/w+t/jUddhIK3/+OrP/o3pF8NxOcdHpeV
-yY1Gu7B4vz/7Gs8QKvY5QpcWrCZaVHPbjODViOur3ZsD1z/hcDHo4mdHNNkjqSVQxBj3xBqJIgIc
-JG6mTvgkNoTZTsN1pyYbau9eD1TXPaoNI0mfpPM1cLZWvGq/O27/AZnCTI2dVvl0Z5ZP3E+GJ/ea
-U1lgyd0H9t5j6uYaGAxm1yBnILFAYwDa76jIwwkTkCSx4TY/Cj08/pl+SlEZ5akp+6vXL/9+BHJc
-vlq3t9F8ES3q4h0wB/Rkgoa+fPL5s9dfYiy6VRNtSgogUWQqN9VDG5BXnz97wc0/PAo//unPgs8/
-0U8pGvaI4mGphE5nJHf8cvCds1i+RO9LV9Yl40f2DwUIouu6elegtqxNtM4CpbsxKsdW9Pzrl8++
-kfWoAxJneJfqnFOh5+yPFVOROFIBOqLoEfq9buYYu43t3MZ5ttmcCbTeoja+W/iX415N+S9HvaZe
-HnJlmO7vbIIVjqlleS+dgaWHUDatYSgVnhtKyVM9+IBH83IERXoxotJSS1wID5UhaBOobDNbbsMA
-OsKqoTDLbqByq0HZd8pqW8RyJzWxhbwTPOvYL5QXwCC6HZMhsXwy8WPKeDqSGb4ur8rqunyCBe4t
-kC/gcz9mJVUkBOEpV8JsPJH2RxE/GPXwgN/Fhk2DRqxCpcU9HCMWThRPONd7Lb4sgK7v0q4Y0MEN
-D5fgDSFUv7MyklpBsHlu0N+bExI1mPjm6toKkeLcY8rMFTwS8IkUs1K2UX0IQXl+16CMzSmtkBPb
-eDbThxeXsLgpTZSjn/eRBvac+DD6lEE4CtCGG+KuE5isZ8+2KGvEUS1APT2TvHjqZKUbUtW230kt
-4TppT7YxLzVfF0MB4wk2CG/kmMfhe72B7boJWwU+O4BfuiWYbvQVrADD5jyE6pc96cgwphD2DxQi
-HdI9PHiDrl4ZMnxk0zItXbm6n2fhx30E+N4Ai/1t2zv3CX3oD4+9PRkKY7DrC8DPMVI9SID3OAEu
-UruR2jhmUbqTTJyFhD+DQW7vTbzfglT871//hTp9YJ0Grdmbtli+/ctX8b8nEfk1fCvaQjZbXcq4
-JPrHCr9iA8sjVVLtipbtRf42Y7cQelSiczeJx+Klbkdy4WC3CJ463AEdgu7NnN3qmMsawsEBu+St
-61yio5BCRvFF9CjqnFQIiieA2cfxgg2FLOADjOusoYvsGGJEPDIj3ugo/teliquipAsK7pnhjTS+
-hoVRgg6izxFVzxQsOUgNzggljDnZkfU5rnaMT6zPRjbiaFBUmNICW4WYxX+F7yhIGACar87yBQ5B
-O8djv+L1PoIxXGOidIlNCq/kLkqd59aFwkn0bfm7Efz6jjDxbflP4ovPru2YgABbJe/3hajD7KoI
-HaKXvAVjg0J07u4iZqLtgtq4LY4CTZRwjucZXupJUmDI9E0LQkmaClwU6ZlTWOlWyDyFz+xLDfru
-U7POMLQWX5Tlg2+QWMYXY6rHWyd7n6Msi14MjSsBHkQY1HCJkcRiMRIQy5bse/x5iqFR2T7Ej6fR
-0aAvgD3f6JvqkhbcY4r+OaRGYWpU46BwU2FH45bqGAN/MugP/8gBCxU8CmkFCHtI+Xm5WdFtYpsm
-TwjCyWnasdXMSW79XSBNKHfTcThh6xrV+q631qFfyw4ajCX2CXMZcGJgcdrhR8lwU55lS9wggcUg
-l4VFIIzZvrqS2iI35culSbsfFVZuApm+cuF6qRk8YtXDiJMZx9+Wnm3Rptep0/3JhLo7Je8tb1ru
-H38ygXYxRfL9bdq0B8f9Yz/3A8OPuP8ZH19k1zPlsGQDg/s4pn+WnFYwjFQWBnMbw4Fwvs4rjLHI
-/BtYCzOWfxo43lC6J1CETvU6XlKEbf3KOevCoPl2Soz4dzH5gboPvws9/CdfNHOcqZbbzqAYEMI0
-zh+MHDNJDqxzTeWOeTIRqzT0PL/CMR5Z3+dlaz1yzjfCQ4Wn/mg7S1G1jPAFkjmiwRpRD2rIHsIT
-FWeCiD1fF3RFUsjS59CewGLD0uUB6q1q5sj3WMIW9VFfdB+xHAPcH1KHVDs9PMZMZQ1l8izzE4eY
-icd0cPadjzNh3qGCgSF3s4rrYXRf8RBOqATigJCgAN1CYH0g/VO8HUWAG4OaDk5Uq6bEVE2JOqIE
-UmYDmEwnXY58zkaZCD185HoWRo2lQBsfDbR8bb2eWl8GYU3BKQ0fJGRq4O7irjuLkjisaDy5gxZU
-U2FI3zVuZVXdPKBP5aJRm/h1sSAj9M+PkB9/Ar8QO9U6hU8PgZPBo/llVjdy/0/c5I4jzj2uIhZy
-fDeEcSaWfhCAi2rcZHiguq4TBn+V3WDc5imm36GOHzyU9UID66lL70xlqniIUOr+pBF19wtWLB2z
-wv8xn7RKOb7+afoSk2oBKH+LVwbpeDhbnS2y6GZia4w3I2ilwKsk7QbDiog3RkMOR/11zBSrChTu
-tr8Cvk41TNtKwluB3t0sdZIgR+vDRBZr2mun0ziQ2ZNS2SKaUombSg9sauvfnsnBdaZbUETaFXYM
-mp2u9MM9u5NVMcvfzpz2tnfcen2279Xd7iHiDDpd0YM7Y1I8Dtd0cD9es/LD7d4hI3C4FQbG2yWE
-PDjn6g9OItBsUfbQiEk7oXMrU9Jw66hIm4v8BOa7PJttW5kN0EmcOFfFKdQiacETOhrMGx1lFBRb
-d+OPQXXOimUjvpRj3B04HXCmoy5dUrgoctS71Sdg49Szh8qpHbkInw4GlmxvQTsJ5tAc2JvWiTA+
-TyqWDaVnfepN5IVJCOlffuckVufneJJxnVNAnpvWitBMV8op0cgyzxbqImdbyyV53DiyeZvD7sEB
-dpS2XeBWUmA6S9BDKTOe7mlVlAXo8q6m6U0eCw54/+AIdiiKBYKOYBg+AkdIAScpawdOwz/kdYV7
-2oVyJ0MdjwXq8iJPoL9E7SXpiDY/WR/u6QS+PylO0duD3sPnPt0Sl0v0WfSxlSq5IG3iqHsIqEUL
-2qbp/q2VcNYn2pd4+I6Yhb3N4DDuYwixmhVrIoqS8Iz7YnFqqcLntNnQIC3BjNGohyxvCB2CMuQa
-Bmnu/SoLzbp8V1ynTg9t1B4WAbnd1WkDOPbxvAO3Pn7vvweCGcsheg+j2Uf15NB76eJbv/bhFLG4
-LtaW1tlxQrS0KeXADiAti7NxiR9oPhz3sTvlmveAdhqS2xzdkBqKJe3awyf9y/7HWr8dWnjUksx7
-g7SA+EJrCFa/V8c7LrkkxUj1N9K9eTdcHHZhVtNnwcXUge0LJCKk6AyjRlM8WAr9NvL3KjZXAt3X
-mQQ+Y5k4IJ6fmJ5PRwItK5Aauk/3g+4FUfEPCB7jUMOhwQvEbDmAPfB7ylEHd5ChQvTc7kvKBKbF
-D0DlojrmpcMPSDc7bxXR6NrBmdAq8RON3EZl0KO+AE7bdZmWFcXvKkMt97TuzRP5gqcOgAT5nSHk
-8e4C0Wv7zjD28ydLXsXbHyMSfFTKHmIKU3rEVmkswi1ihBZ5dTKhgjzTKDCq5/T4PhIz1ZM9dV7V
-GAt5JholNXSf6mlqcDUEu4LAJyGMr6XwCWrBHGsaF6Kc2EwC64vHqBTsjx+mXXscccCtpji1d/rW
-pU5m0VDlw+i9qt3vVJPh2xYhZQZ66JrGfJOTV9Nc+lb5kfj94O1/eP2X3XPEOtfnb2//p1f/97/6
-yU+M25x1YGhHH/JOIVU8iuCRovIg8mz2wbL9DvQfej4OwerjYCV7GvDBHhnl6GB51Yh5K8FaJ0en
-ffl3+5S/fp8BXxkM9Dv89OSsrq5Ac1FK2Clu51kb3Tu6WXyGvjDBXUBgNb5zIxAH9Qi2UdG5pYs+
-xdCzCfpN4PH6OX3zExCHMVdtajJGnXND55vlkp+FDoOk9M4szFsTLeou+QO6D6HfOQX+TM71/W5N
-snQPcGsyxmfI53bkkNS9Ormtd1vlu1CjvxZDvsjZVIlnoywj70j5TC6HWyYhCJtkh8R4lhnMTVTN
-55s6WnBgWosZiMGUjmLDOXPn1UwHMcDgmTnlvxp+Wm/Kz4adPPIM1Vait3oXnIyi85HEbaW7yYHJ
-6zn9sJfSnOK+Io2h8wDeiczti5ifDUM+Qdp9tKdxfIXHaqqnEchUOExYNJRaoCrJ4QgE4+SjUXQk
-zKvDsZTzGQKqHC6Gwr01NmaY3hYK4B9/ighYk2OM08h9NBwYvPSwbmhMt6RYuHmQNT4A4dEBBh6O
-op/SKR1xDBBJWkStvd0NfwsA6jgtPfDANrU3PNborKcuCRHMb6PX/2F7V28/ePUvj9jN/Gmhonmt
-8kVBHufo/yN45nMVjlDExzGazzQ64ZRKzPfo5avxgExNEnVYkhhGNtYxyBFdQd2gD4h79dfafbOm
-HezciRXGcEPu26xtVG3fs9Vcb5lMsph16OFTIodPRtFDmeyD6GWeR5dtu548eHC2uWjGv6XTp3FV
-XzwommaTH3/8i5+JG+7NuqY1NfxVVS2/XuNt5V8VJX94XWb1LX/8go4W8NOz8yc39OjzYm4HWRJP
-yC+Kpn0MGg6W+H/Ze9cmN44sUWzDH26E4Rv2tSPsDzfi+tYUtxdVJBp8SDOj6SW4Q1GURjESyeBj
-pXFPLwYNVHdjCaBAFMDuHo32t/oX+JMj/NXnlZknHwWgSWlmb9iKGXahKvNk5smTJ0+ePI+vOMZ6
-vZIaf5hWswk+POEjED2iN1QEBQMv4Ndnmzn+ebWmX9aUhd5tTpsxcOw1lQOGmO4Lfn2N9zDiaz1s
-1vM1j/hLMbL5ojqjnuDuLc+s56RRVrOKG4QJm54v4lYeb87Npyx/gSc/fPiypi5/h5YrjDb6OSW/
-j/wlCigxqNera9ZJU69X119yslBpHciFIBEZuacvgfJiUE+vqjHNAeVExCeYBOrSCxgmTTNqFXg2
-WHo2GEKaGLIbNlr8rQtjKD3CSy1Oe3YmiT9xaTIRKfTeqDLNR+mk0GkzhKIEk2J7x24g5JlqpS3b
-A241AoTw9wfkuq/43Z79UpduC3I8gvJ9LF/epFNJKFgeFQgs2EtcmcLFWbIKerYpPKObVraasvwH
-hQ3kkcTyWoR+dbwd5HnkNDvakCFVi3UvlfGVF/FxOSFurMhoXIscZLElrcNuDYAQCZylkquVkn6u
-ma7JhjK0JCwIaiLVsFRhUznMQupdLAlmj7wYGByqyh+09p+UiUOxXSZG/lrthhpbNN9FXrgdxYTc
-QK8UEgOnazS1xJxYFIoZxhr7zOWkbmJDA7WRchZIzMwFB3KWxRB8P8tebc7PYZti28UEPNRQoblh
-FLjY5nJy4ZmhR0gUh4f8e0DBNUoTNwI6XdRnZ3BGhu4NxZUYZ0YnmkD3+ZVItP6JhF/vd0iySVQN
-fSXbtVEJ7FxVSa0b7un9lM2pJnAhQsrmCLTO68NQBhkXiX27Dkgh5lta+RTahDmrqXtkA5Nn2cOH
-xhWcDdLbLiudTYqKTiR6InSoNFBMZ+ncaoyoo6GRt/XV2lOj+HLLkaGDrufXTe2RBuv+r448/Svf
-Chobk6H29sI1/vl0/XyVAVX+RbY0efl9TW//xX/7GLgcvP0H9fabVxfTszW+ffhQvX5pXz96pF4/
-nhCAO+oVyBX46lC9+hZt1ODdbfXui+l7fHVXvfpyVtcr815/+LamVg7Uq6fv8M1goF49q9f89hf6
-7Tc8Fu/NU3qlS33FQ/PeUKlHutSL+pKGocfxdYOvpo33CrrCb5Fr6C8Ler3we81v2RogRwe2DcqN
-0dQKUCx34DW3eI8EBJ/+zXv/xsyE/9ZMGbzFtkwcp5D/c4uT6p+Z37sd0hbCzVCizcAZ+nxWjebI
-ys42OqqwOrNKRNyWnZO5S7BhGv5Ff11VExOF9yBxHfOFgVtoEj1D3wXeBy6rbFIvumtONjcyZlxB
-wpW+1rxtk1j8jfWpZfBcLtCtWr8P3BcwjpfdNbdqi6xtp0NFHw93xbhOKlmsNNOiz7NiT7nF/le1
-xbdBYpmX8vzSMfa5nG/msk1Y8xEo4cOOsdDJPugDqRszV+TlnppRwR5UGf7E6FOGIj1fe7WvKfh4
-xHS5mIC0yb7EJLiW2gnZjJ2J3Yh+c0w5lSNR5LEgbKtI4fyhOnl7+phHOYNSDbLvAxK2k2xXLRH0
-eBliAYkvGIKR6WVASPy+6QLShwSZ7p/Wk2AOVRMixfvAn41s2JTAzzVBoIaWfA7ie67y8Z+yR1WZ
-0RRSkADHHqy+Mj9YcYQY+NxwChFk0Od0aoQXJCwgkP500tOBRCKq1nJ5kpipjR3sYDst35JUmzUK
-HRscGLrqAfUl2/GIGS+E6L3ImBlFhVrrzsBqx9DZBZUrky6WBhEhu9jCUYLZFs2HDVI0X2rZkK93
-8W3f3t5aY1kPupipappgWqDrao880YwVUxoN6yVO9Z+ny4JaqJcN96DPN9Jk8xvdkF0FDdObVMPS
-RBnE+Bs21/PTesYB2KzMd1wv3cH7ZAs/z41xbm6Nc/3cKKaB/e1RwjEF9ul2ZQxp50QBgO/doRvq
-Fd0nU6dcF3Zy/nCNfMje2cuCjg0ULdzAKiccy0DN7MdtMK243eZym1iI0pd93JZ8F1NKO/C1yTrw
-MdeDcSu7luLWFdPR/IiOmJ6/Y+utHId/iioo0tO98Jos40BBzS4T3JWK8LA/a2MFsnA2zBRYa94G
-k0qKGqXe4jJ95E8oRD1fJQ+1QeRn5mjkl4DcTGCwrqPVvCPcPpljCZhWcdK6N7UStA2xiJaNNMJd
-JCQBGBgbOIYcdyL5h363HOzzIs/u8AZEx3vdT3Reycv8A+ZMNPwyaXRu0yHpOLsCkp450R3TUz/N
-vgWhIYfml6kZMMCCefBHbnpBrDZuYKtQoupqfl6RKrwst8VU2I8B48PAH+K+0sweTPMGiw/vbMza
-my7qUKzYU3qgqn1fhmAXGL8P4hXTBiBweUiLAFw0TUkh7RspoGwRA24mA0QjKjsfvv1He/+HyMY/
-834f7fV6Av8m9PrEBVdRSTGJwWOOZw8CvvGpjFNAY0LnjrLCGbbvGvT7Bz2nWDvPjgj4jxrKhm+X
-o02H0gFzfIOEjULQPAWkSC4QeF9GNWVX0P2zEu+iAAYfiJaL5thUw/g2rq0QMg/G7GOmTrmt617p
-5CxLcifK7WYwIr8/FCtS3Zy//zr4kUaH6jDcDA4EsOlRar58rAZgoK5pO4yb1IbpNIQWR3qMBIAY
-R538R9ChB2MvjGPh/Kcgw/y24PimePIq7kAPxz/6GOSEEZS2oObt5aT5iVDz4bjZAzk4IP5GJr4U
-EkNi+IVw26QxWCOF2YdjVu034DccNscj37H1UlAr0x7FtvoZN9rbtxfNT7gbOvEZkPbHxQ8HiAJ8
-+lGL6ss9tNatAjGUpoCxibu7ffdj1HKLCRURXFoXqcfCmjPMP2i0hHRyce+NNjGP51b13SrT5OFj
-J1alRPkQ5aIA4EBigbTiYugwctCgJQ7Qq462WKA/Xl/xyfabejQp27vrK3MJdoC4QNjld0npAtsN
-NtFo/faFUaRgE4BUF4J1Sdpyw3BMnb+SEExnLg8JP+GijbDlFm6f1y6hLr1gb+oU91OB2W8ib2WU
-E8xcDeBHSsSMloujhY3u2X5LYEy5grnoUYzG6Xg9HHZ72Q8/pta9Em1+ImrBbg9Nn39OogkbCu8V
-/O/qfiGh0vTKRixhuecF5j4by8+9bQhjpBs5wxWbxotbTj7zHhCJVp/gW1iVUgu1rkSxMxGeE8Eu
-O7sVyqr5cg+fFOYWaXPdn1w/nsK56m8C8dPzhUM8/FBDoh3ARz2/asE91N6xa/T7faIxZ4LUgn2R
-jsn8AqWJWO1mt8RtTsTsQzLQfTN+Ja11xvVsWJ+dNdXar+felzrty5ALSWcFoVIRjjro1GIi+vq9
-2dWP9v6kepKwIrB9O9nKIpN2BBElJ+wHYsaoqeNn1gfppjrv8jf/OTaat0mhb73+n/8X9hNoNksy
-nidfCw65QZEGKbxGNQmTfJ2Jl72F2fR1ePrldSflcUcJ2zxD/nm9gMP5EhPiGvN99Wofv4CPSSZG
-Zkic76M9Uxg325omjD+jdUSeptjxRT0dV82gyCXkJycsYwsLfKbDXN4Wzdmmcna1bRayb59/8bSl
-Vc5BlmPqu/WqnqXCp2brusa8Al3qQBcDlOMc4x1ZqjgUNL3uap+UJuE6Mjpbc1TPa7G4RZsCiaau
-YCvDV20Hhg3RWLuwD2EsEkZBaWKmplpEX2XMTWcSkVsq6UQttzWL5metVLCoWwhhRzpwJpJFPTLu
-BTwxXzx98fLpk8eYsrN6t5nCmsWsbdBV3853W3/mo/Pp+AN7Q3U/oDOh4+srnABr+Ue/bKyaMJjP
-Vrt4k01q7luBsSMaZzPBP/4HCj/sUuLRz/6qrtcUbz23HdgvyZ40E6XlVgvcGu1GhewEk9NY4jNj
-XA1NmpPVbwDPJcOPXe1bItYrV6rQ25O+JNw9TaOW/WwxRtviLtVFd6lULPE0fDOuX9jhuppDDHEs
-HoNNMfesI+c063Y3KKIkgMPxrBotcGmwjm7e3ywmSiEBnZYTVSIENJyqfJkzGSBfMbogZrQEGajr
-t/rMsn0OpbR8cABf0gtgsr+DAtrjAyYAuT1l9+tDp/EwcK9HcLjU5Wi1GI5O6816OJ8CT1ucuyha
-Cp0GYfyN+Cb0w1/HhbcI26r1ZQz4p7UMLcUityttkiHdMGbEp1ai2c6NJeM+WRql6bZemQmgYklb
-Dx+fq2pev68KRmYnzhqFKJRcp9bzjxyNTQP1YnZN2nAcIDkV6y0ILU4EkgSlvgXHdB1S2ujzkF3O
-R5jeEbcqEBYajHTGnTmkRJ1SveDQXZNawtgKeK9djy6l+/0PRxnlQYM5GwooixEPYyZfGxQEwUql
-oaSED2hpPV3QcTsdPtM05M5PlLZyqpOwJWJxhjEqYIgDqmgouV4OTIMD1epA7s+9Gzc8FaAgjROi
-+hIxRVMulWLgCzIhny7Gsw1Q+nJ0XiF7o9mcjNajbLOY4eRKJoL31eraJO/NisP378uU8RbewJlk
-jaZtiqKKAYo+u3f7Mw4B6IZtcsMayA+zB2kTLw2NQpR8kZL2QUo0nYQTM0z0GIhn0j1J2dSxg8y/
-Bb1NDkt3OL3ZtvBQH+MYbl2IhgLgnYIAgmGd0bB/JFFhgc/wcJDDtsBhywkJD4BrjKCh8CrqPI5P
-z+GRFlW9aVoAdQ+6NnIOhxvtZ085AjW8mlPYl346OwPhD/7ti2N1gR4tWX5wkJcJZNPJz1iSxbZu
-A73skmt1XY1Wk/pyoZdrCo7LESAAhAOcgQTXXAQc8qfmOyym604kJAYrgX7DeZusZOSSLcyQaCkP
-Q98EMuTbFbMZ9zxf/HaffgM8LL19498Fi8rz+Hbv6Eex16UO+a/9LQNnMnXd1DSdWO7bPgjaQSVT
-HWV4QCdvpwFwcSXtvqa3w3yrPic3q3d6voBzzCTfFtcl6ERutBGUoBN20mvJZsgJMQiHeccTApr1
-pFqtOItfkX/3+OWzr599dZShCaAHvD12fQ6dZX/dxPFXUID6oA3SXfvYc0kgAoJrtZpRdocXzLSm
-ztlqW/0CG7uuN9kGh2k43uHzfyr/SAef1t3TGLzGXzrv/v7Nf7QamtHq7buD1//xv3BaeLlLy+bV
-+GIE638uKc5Xb03EUTiaoezk+mJybTTs4OVpg3phPnjUB1I468Jm5iZG90MX2+geZd/CHxv3oCh/
-/CgFEI0GnWPUMXuoz9lv1aEgrf8R2xJ15u52lYrm90//8N3zl188/f7FyzzMEE/iI7odM93y8pmT
-Lux8+h7ESWME5BQW/Sykhfyxp0cBhttMERqIHITHw6Yi3wPUwVSrOU5CAOApprHDb9kco7dSBzCQ
-bjWuUGfCn0h+7x52UXRfVOfIxyNArykOzYjzqJgOccUjqjgfvWXfZg41yEPlf0NYI8qJd8oBKdeC
-oWLTUFgRypZ8CJiBGYZuiCAXTV9+qOM2pKcPqUrU5lbT5qnYHr/8/T6TR6NAoueZQ7Dbp02OAEfZ
-4Twj2r5PqwfZBv560O0HNbxR6kEe0hhWGHMiqQui/rpUas1FfZlJlayQ03DP5B3CPoAodAjnEAqe
-XKOTc9+gWBYQtA57f5G7hs0ja3+Q7dtVD1+7qNHHkO3d4Jw1n+CX4Rwz03snPadjEWFW4B+FKgDu
-9ny0AFl71Z/UsXbHKVAubTh7odTZd5SCqUhn9XbCqTfY0IOHLjBWOOSBxMQjb/P8CAZ+P/DPuDQ7
-zm8Vd+0fNEd4FhZQp/VskogJBXUROt5XrtNfyp24SRysw6uEe53E3MB5/pqXrGT4Sh+WUSibnl1T
-8MhCYox6syr8DNeFO8bLBMs3VsXhYkqWMstVx+fWUN0SEgihR2JHtIfQYxCDKRCkE5oAoAJ2fEjn
-IpAvjnJPJanqevnO/OFpSEeH909MlHBEKOeZMJFHK4ZJBmMqsC4g1kTYJGR6Ylo4aAz8fXotbwup
-2tPFArp1rRrtmVQqd+gE3fjjM5mPgShWG4qX8cQE98pUAufZjcJWavFV2mMsW6NZehMTgbAhVG0r
-ERfSegpXjNfAwL1Qd+j45ZiO3bZho11HPx+M/dQaOXJ+TakpAjX5kF+jzpQe/Hyv2GBbvlflfInE
-pqHxSt9jSsxNJFqG2G9orNKz4zGV+/Xpv/aNQUu5l24+2g7wZD1WuhnNTgWI5R3cwN4LBKVcGQ2u
-bjn+X7eKZCArjBYY4sBNBwbh54iEzBvr1V0auBdHP+ZeEa/qGFIx1t80JkaiedVRFuN0Mwv7OWxp
-7G+ugMu2pCNxV7XwKcwLRRknDrtejrDw+gCb4Ao6YZAMpEBw/8KEAY0bTMPfnjeGMm2p5/aV3RCO
-XG6+GTNI+GT23X4euI+/vTQsNG1EjyM1YC53+ZclnPa1XWM0IF7S3qHFkdmXI6SNa+rlEZU8+hMW
-/aIa11T0T5LDoskOkeJqTCo04ikfZX/6Ewgzluz/9KcMD4Czal0rU7Mseypy5pE7AGfult6++q2G
-1W9m9SVd1utraDaXMXJdEUwjaRQkixHK7hjfMOsaQF1vfJgOxAyNqkiCzT/9yWviT6ZMFBnkZ09g
-jaopSaDLLXSFq4S3XmIxgnZ/AQghA28+pYgK20AVk4OI7/vOQhYdysQJUUfrgrwBJ2Yv2E5Eogep
-ViLNpcVkYzOzj7B8WoFAKtLPDlkZo3rb4hhGSYoWVNRkqbPmTHgmKa7KkASMJmoLwpLUYIywR4DL
-c0yvg3dYXN1GbKBrK7e+7SS79f0YJlleJg5GnJ8FX0lSeVit3+EtEmWuliujqei1x8CF4GDdtoqc
-9uAasEY1j1bV2dGfgBRW0+o9ZzrklLGjhiO3203lIRAIm4ngzvXoT7xPeWNyqelJuVWfraGf3KcJ
-zCQd66eNZjJ8pKUDl+Mrzx5/+zRUmFPe0spvzoPyIAWFZuA+21WVAAV1HHMc65+hQz4sZpeAa4wP
-vEYEn1YGx4gMO0cUp8ifIz2i31JnOjfjiHrHT4hyfORDv4uB7NiX9kdkBwHNi/Uf/umkQvfSHwxb
-G0QNZLC4eV+aIj/8qDkqB+SmXql2J9YmTsS1/rheXheRNeKEsg12TQ+7ERfMH/rkdID/o5DfjIGJ
-ZoqUGd4Ped6aFR7WOeIZZ1L2P7r3oLjBxgfmyExxxcsJb6JRP4O3XP5VTI0XPZeUU34y4Zbvmoah
-+CHHuyVNltT3YldtDcsuXpYSt7yTuOWj4VEWRCJXswFhRTIBZ7Rw9tA/hkw/Kk357rB48qR1k+Lp
-Kixyk1a2bA8KjnsHpRJ3xVvLxm4eGHcBuO8W+IJYBR4P0bMeke1Ja7Xtkcx5Q+FjIK2Im0dDT3Qq
-3aN2KBf1bFKhhG7cAhjxHi/gkFJl65QxiCjuY2tTZl8pglYsj+lpflK2x4Lf1mVu7QOQKjVpr9+3
-R8KAsCNOUXNp+BrXCrna28v+ZjlBk5gQqnBRx3Lv0Ktk2Cvrdh8ikzg8d13Y/dtLT5TAGXBSxLdy
-uSLp7MyuC/t5y5nB7tX9/bYe0w0dHu+IWXt95rKj+ztKaieCWnBGmSJDHM0s+804WWc1X66veY2D
-4Ci3bNWkdRvTUM2p24LE3QhbWV17gNekgm+BHeyBgbgLr7CfuFALjRShDZMTcNtu6e11OIe4zdH8
-HqzMTPOulxXpMHTbF5vtgKH/1ulDssEdbGTJibc9PGSxHoNQgbuMjNLbvzyMGEboYaUsE/N2J5g4
-vcKC9aSJEoTrGJc4gmsMZ+5GYCTdCu+r6EafjZhhlHL/eEh+xd5QJLKA7bg7DMjwfGbjN1moSfFG
-3+m8+4c3/8lckS7RdOt0unjXff1fO3xN2mxO59O1jW5sZP8mNjvmARgQUGL1fooHd++qtEd29MIh
-NquZS1qM198mEj0B6S+qNQ//aj5bLceS/Rgj2NzlN3f5M90DqY/4Gz59zHXqWq5V5Podr91bb1YP
-zZD1bWlgRi/XWV26zuqaKztTUV3ZkezsTs7Xy2qQs909FDIG+MddtkUHQF2gk+5JeKXXAJmLvfpf
-8P6Rov/D9DjExvPUals8HM6hZ1OW2YJ7EJlXOIQt8SaTA7vr8n2xHCjKtPrTdgPVGxjgP9JID00R
-bIBiBXNb/dcVNj7C2Pezquhe3ulq3xZ34eJfHsEc84uiayaZ57haqfqwO9P9Fra36g/NdVdwZKqG
-fAmWFuo1HK9IwtjPH6XcrVH2GS/0kOsJIULa38/kVMm9xqiw67Wqhd9kr5qqequTyQsPmNXnypTV
-qwEb/CRh7OyVGc/qRl/5TapZsqDTkK/qq+vphMVJ+lGUmDTkBRYucrbVyHuqe9rRngEC52GfSPFT
-g999ZBs9A73cYmSjlg61cAhNHJFXJcJSTfx09IhIkek3B9jjLnuWnNg45YILO92p/B8q24215mJm
-OpuemuX8ClhCtXqB4BKmVaoOTN4UhZiWeiJGqNeEaK5b8tpvPOo1KBhK7uEixIkbXfil38JYfiFm
-VdUkT16h0tSEwEwjhtGSDdgKPQfWjXZbDbpAMzJsKthBBpR5hMPKh7skUSqhBfm6p+pbh+Mgr6XA
-BTXdLF2d54xc3Fklwq7DeM+TdXBOiGK8heSJG+hnTMZvQXuEBnJNMfjZx0nWpJFa9mf14hwFT/Jb
-Jgt7tHKlX0BNq2nVHB/eP6HfuPJn9TjlRbtNC+zaw1XjYvhjAkQxPliGtgdtNhVs+zqtE6YMOJh1
-bfBTrC+DCKHY/mXfAHDWwUGgFja7Q8VJsDk4VqfmK8nrQrfvG7M52WA0KR002eHhIyEjTKLl8bay
-8654878CxoYwMoMCqr56V76+vsPemJ3fgUACB3KnK0bCEh8R1lJyTZbhcbqbfoeTLSnPy15W63yH
-y+tP3kqiDc3g8Jrk0SD7hL0tnaeME1MwqeXpNXGdy+nikwdDDMY3RjGrsfYTgbsQSSZUOE+Yqwpk
-BmHfJmBb+4ptnk189USnCaCVyRROiDi4pgjFLcBZ3fTOxov1rAfktZHbJ5S5UE2F74GSx+tZcb8n
-pfuvv37+5Kvvvn726v/o5X+8d+9efvszk14UnQh6l9MJHKwo6R3A628WS1iUBQjl8F/OwdeyMjs+
-euBlaZDKGdXu2L3IcXL6UKRMfb2qmIY0GLNG15ZUji5Gaxib9Vb25eNvvvn88ZPfq5nhtqaLdQE4
-qRbvpyvgssTLnjz/5s23z16BVP3ZPWGV/s53K/v+++/p6AkTPKkvm8zrsdxZZKf1+aZBX411t8ma
-0WJ6dg0Ho9PpWjN67sjD7NN7PucyHfzsnsayYNdHKjPuCNOdDvdzQw3TaXlYkd3+hFW3p8BRL2mi
-RtDxIeWEKXhtQLkeLUJR4gOrQV5ArA8+zDbNhZdyB4NaUOqgKB8LC+tOeNLpRShTyEpnUcSb62Zs
-jZ6U4pR6tMa0XPq+v8HTIH2L6ntr9xd27Vr20p+iEHxdxFlIrHPKcfePV/dPjw+aOWa1HdcTsWKi
-IHbQzkmZJeypCUr8mmHdm3dLoaHHz159jcYPDLJC+/TGnHTZKwdRHvTuDids6YSjjTjNlmFCtfsy
-guAykzMYeiZgDs2E/OL4ipBwJQAQ2BWi9/7W7LcC2ZkUCNg1XWsMsh8KxMpR9uXzl0+/evn8zbMv
-ht/97uvXT3sJf5QFilCzpEa1+OR+r/SgvHz6RS/p1bJSyjQfxIMAxFcvnz59luoIyC7VogXIJykg
-f4k6diu7rma4CtNQPg2gfP7NmwRKAMrpbFO1wPhlAkbcEbxw3KyWszYov9oBRZB0Kxtfj9pw8usA
-RusMX17oM7YP5Df7AqHVlASigneuSeo3hEjsnxhN2IAnmyMxB2ECEc5fBrra189eP4UF/voPtuCr
-118Mn795/eLN6+HvHj/74pun0PLh/fve96cvXz5/qT8/8OIGCYt13NTvhmTUGGRfVetX68nv6GcR
-wt22TtsheD33FCTEwhqu8wS2v3pWkaqRYZX9SyugN50QYYWr/w/Zvat7Z0qt8MqCew2czwVUY7gS
-Us1t6JS6jvOeX63Rk/CTB7/+1WfBjaVTqnASdSoT5F/RuagYhmcZhu+3Qt1/BHbwKSEjgmo3Wtx9
-g3L0rhDNneSOm9RkHrJZFljEt2q0N59T7EeX94huGe8a/rUsfg6lpddPX34LNWEL6E4289NuXINs
-6XZ43hvQEisTgC3Itp4VxMFJjPXmMqKh2kZQI1KczkBeHXxyD23YJwPYEZhRD4CxC7cdAHtO38gh
-Hx0A2xVmOADuSRxtAAyQ2dIA2Fi67ufU7qfQ7kto91No9ytq91No9w/c7qeftNaFdj+Fdl9wu59C
-u0+w3U+h3e+o3U/b2iXz+vt4r4yOwNDYKcgNbwcAYUp5sga/FtphcXCCp2v0eM3MedReQrVmqnKC
-oD0EcxyOrFqA7AJvQvuOVoHQ6KQETkv2Itu1gZEgzZH8av3182Kf5NKuHrDKvrDMehNkbAoWgjNJ
-iJc4ACP6IzUzl7ejNw9hakt5jXuMeQThyV5/c6PmExw48s367PCzPAAzlOY99SdHadrMZlvPAF5p
-GCxzBJTIk0wiaBcW3xpYKhS/py645BAhxGEPDP7sWzHca/goxWl/Ennbidfh7SXnDzS9l9HqvqNC
-PjpUBLG8jZ1iaE+btMozHKktrNs/o/JHzPI2i7eL+nIh/TriKBJFKo4v+khcHlN84EQ6jmas7Ttc
-H7hCmb7PNzPJeGABH2dSXWeiElNScFXL8cVoBeWma8sPLAHK7wCXyAYsiSZ5gaZgn6TVcZtueWvO
-xbSuJacTvCOLTbR9w3RVFLwLr+ub6alaJ7fYE5XKj+vFZMra14sRa9oQRJk9HGRxu7jZ41Dbs6zc
-wsAHl6PFOnuQ3cke3EaAsI5mmF6DRBGs3gKd60/7aNKcqfqC5vL2s72BmP8iALpOdqihHWYPWoBQ
-raK9WpndvZsVflM+oT7LPhIAopDIgT5mt7NnnTDSX5ToCesIadKGNdsm5rp524KwlpkKsApj0TBS
-HXXjKFrr6ZiryEdq4CnNdL2R1AQcrgHocFXX7KA8WnDkBgsd6BlJnAKB9HxoS5C2puPNDEqhxqli
-n1peFCOxH3SAyPg1H2Y5wtOLcCVO6eSFaxYFqyIRldIBvHKuz+zy7AQmgbze7ujBWxWQT+RHMS7v
-WGQ6tZG/ZZHGmrP3EityjEzuUtnfCJXYMauC1zF399VQVLMg1TFvH2XZeuMAX7F8mXA403sx26wk
-oNBnhmXtrWDrcp3fQwrSQODfPZNHDtXhw0JIpvh6s5ii8urpgv7ddgED/7I8VOGmR7UOef/Jyz6a
-s04oWsp4Ok0EB4l7FfZHlbCHITP1RBSyiZEzezD1VNe7nw8FIfJqQK6ib2ZUNc7EbBtcVapJRY1H
-yZCzLdJRLCuMRwushCEaJJbFIS0LXMAg2do7lDzZR70q2kZHqzM9QH0NHUqHdmGHjiCMMosGbYg9
-PTt7gBCsQbYBd6jAKXS5Co+yewmXFbmUB7Z125W1J8jvUD8qh3E5RfqHShXd6d8Jp9CqlZTj6Z5s
-5MYqnY9U7QRhPoenOMJAzXPvy3tRedHFuWopI++3l2yXj2deWMf6CiIJr00ntw32qvoA0C+ffpEw
-hNY9hmV8c7CoZt0Ol3QbNwdM+trtkFlX8oGg/7ITN21W0QZiSDL3fh3P2s1UhDfY8/4b3O0Carbo
-O7ox1pRa0nBPq/fwVG8JVRH1d17BfjRpVw616UaC/UXBgkLqV1qow3h0Ppf22gmCBWDwugH9MfPk
-laaIxuQcEyljVEcKatN1h+ciaUSNZgxn0TUdl/J3ItQzRbtVJ21kQAYOcuMnX6EJ/i46P3MfOKYo
-jGhpAZL5d3JvPeY2OrvuJ6K7CXU54bGrx09+T4Me8Jq9R3dTGLqOtDBR8TfiPCfF7+MxA9U55lp0
-sR7Bhkpq2X5Ym/iMrv2gpTaxyKg6cKXMa/zTluqwH0SV6VJIV/51WMLuNabEZz74aUPxsOAchnb9
-3ABaKGzFJCASDY/R84+AEGrjqj5W7yerJnCrYIS4fbAdhsKwAhJi+NPtQFYJNIR4/vW9sESI58+S
-jYTYZqL+3fOXr9Eek1ZIfzxsLjC8NhnQENt78vz5yy8K+fyKzGE2K83IgANXs0kzJB+L7vewVxLM
-lsDnRfcPtsSJaubVt4+/+Qaw9eT1/m19U52tdzb3ul7uLPMS9QU7S31er9f1PNn7J8+fvXr+zdPh
-qydIM8PP33z55dOXMC1fPt9/NJPLV9M/o3hEGG/txeTyyWbV1KsX4pKzs4KST7s9yxn7322r06yY
-OeJg7cRs6dK3o6vpfDPnSt4wxMFmqAVvR25oOkRpEFeLavbJg74uFddDfxRjQnZsB/IFjuQkURpj
-KkEJ3DZNWWbcdqvyTgNvoS+x288wLiMLJy1AtI+tpcI2YOkB8yCCqTzZCieBis+fP//GzY3UejVG
-Jvb55uysWpF3zkDdZLbPWUvtXdC3Dm93nhAu/uI5cr+XRfsSLE92dqQNP4pQEkc/JWcxrrawASdA
-bemHlT5lbKfXq+qsQOBldHmBb5WmIWki+UFHXxlLeshKFfpqc9qgvTJFk2MhjK0BJ+uLnvK5pjsH
-YlkgqY6WygOQQyWwuhSF4D9iVtRNQ4Zb4v9Hqh2Q1ybTBgTR634KC33mnP0/9Lyf32eH2f1O593t
-N/8TGubO6vM+BmGFht7def1//fd/93dpP6wv5GoY8PgdFy/iV+2yv5gGIwo44U3k7x+pIek1VuFs
-UxexMndRS2SNRb23u+JBc3QwMXbvtomeBnrnfs/2qVSAm3U7XFNeLHNHyykitSBjBjE/FiTAq/Hb
-WfW+muF9vLF51segW2x9iYLJvG7Ws2tYQC++BoFJTJbRnvtB/9O7Mm1Nf3ndbTITTVeW1C2kVBKg
-UK5UzgXGVESpo1yX6BLf8/1gx1e8IicTefxdqOAlVAsK3Fc3oihaDbhq/2xIUYjHNR1IKTfj2RQv
-Im2TZB5yeD8w1qHaR4EXVAA1PNaO6+3tDLCdZHwA6nNa5eAAkC4T/iaL+XGTtlgeCHYiO0pu4o7G
-pJ4AM+5TI9S3xArWvWVIvLDwQqyAGR9TIHZyy+Q8qIUhSkunLtVCERKse8Q1YmnXPJQupnNU9X6a
-1ukSmF+nr1LNdDpzDSDbJYZJQnIkcwvbur4PIt4ANYj8oOhqdEkneVuaaWUF68sxEB+hkT6Ikh+s
-ouWgaCyMQuQ09D4kyXVqQIm7VnSpRYO4v2W+HRzuG1CIvErDsqXUoI0b05Dsq4bDrkrGGiVU2dCe
-KV+PXZ2TLZ201fKHbLvzKE9NrwBly7EhrWM0ttE25AuPKZwtZmL4QusdWKYX3RTrLGZ92ETZmiwH
-PjnmlDXR+zpPGPVIv8wjx7X01KE+nL9HcsPNcg9gNup919ZCT11k5WVrqHLCImVOxSCKwzDSV1J/
-qdpGUgPR8n0YkGVPX6lbIHucVpMJZUyw0bph46E0EGR3YVrA/bPKTjfn2a3PPvnN/V/e39atrhlO
-N7wBi6c8qMo4kWC9LChc037ep6TBhSnqWBorFRPCTCygMFjmOXarpXj1mOZhOp6uC3mNji/r6rxe
-XQ8EXC8i8AF66kp56qI6NkpCQPM1zAjIQbkAeNgZG6eoASmX70b8UAtAKaawAQJUQ1lVqRy69vfe
-dFAOvJrPzqvFu8PXo//KXllCb2dkk0bB/FzM89V0NJv+GX9DNQ7fs4aHxhzmm87ptYRol4BXEh1d
-ohr0O51iXGKAk3Pgp29X1VsUPeTnaJ3NqxUgYXOVVZt+9uDevd+0pttDQ85OJ+XI+miAnqz3lEi6
-KZqE4OY+syq+uPIVxcYK8IpMAKVQbAUo4K76qkwRm1YhoLLjFndrv0xv5E5ZfmIYe37qGMH8mYkh
-/20F+xC+KvCU5Inie0YQNIExh90PCSGIoLG67dCuK2tbULRFsP+P5OykU1COznG/d7G55IXaLtEY
-S0opGYLti5UBnpS58diod3IF+cOP0SUCHgym47fXvBMGEoOpetyFlULRwk7CODJj2r9xziQ8WOEG
-KjF1emXPgdJ3DmsVtJErA7SI6uCdtZYenRcqyJRkuEMg3u1NyymuJYKBHzRtS/ATD1ZrpLNms8Qr
-+NE5H8NKm8Gz8EMjcCwWnhd6pnG4EAqqZbcktxzfzJKDc0O1WA/E3UDOfeh76MB0Iq7Bg5KqD1QL
-M99g9BXxQ7ks/GdMmQv0ZuJvGQClJNP1w3EZzlDkeclGsbNyd5wes/l7QZr6RnCLw/kcrHChmPhL
-B5NHLgRkNpUIYdCsW7yDFAvq2ncg1ght9TIg4x+oxa5axt2jzEU06Wqyhy9IBeaDXmbwSbI9/mhv
-In8HexDSN/xfc/0bThBCaZuXXkbXAKSDER/HG8zULYpqu8JwVpQYkDdNmwNERoEvC4s948igsALd
-lZFa+nR40UdLhWPj/3AM29j90nnpOXGhO+qNTk9XvdF4VS+u573RZIIhn3sYOrJa90Zwvu2d9k4n
-de90et4jN4KeE9i6pyBwvX23qddV77SeXPcAErDTdb3ojUcUpKA3rlBo7I0x+xBOCPwz0xDgJwXO
-gfdzdDjoTSa9CYgFk7NFbzJdwf/f9ybwc92r5j2SRHVtvjKAjp7VC/xnNe/R4QxfXdzvXTzoXXzS
-u/i0d/HL3sWveuji30NEaxDT3pSq9Kbz8950sdyse5g48e3ppDcbnUJPZtU50sJs2qPRIxtFUU+B
-mI+Wvflo9W5TVT0Yw6aHsX56HOoGRruoAS2Lmju/qLmDuv6ibsar6XLdkwUDdeolxxvqcayH3rIH
-omvvXa/pSVFVnSOv95o5nPJ6QD4L9Puevq3wTw09bdbXM/ixOYX/L3tkAq6rr2nm1pMeqoxowtdn
-db3ugUy8JoyxBe161Vuve5veZta7mi89IhjBgsR/eBIImRerHmqaJtVVj6KW9poRVHo/WnG9UiLd
-dnvdkvxFT4SlyfUX9njvrSk8diGV97Jrts3vc6aGhK0KBt+9cgeyIR7EDrsp0wu93SLk0kphq9Gl
-300QWP8VE8yMstP6im1pMSKr3GhmIyvR8ZHYWNtSWig+8nJevQksXDiroBZQ8qzVmzXQ5pZYdwAZ
-uhIqWPktC5DwYDqe3I/CkQBDQ1X1FI5477kIKp85yJCMY2v0Pck5ZjbWHiq+3Q/FUyl8Rsr40hh5
-+J/Go/FF5UtlLhU9ZZj44Uc4tyIhTOCwymqm+swMp1741bhL5Pk/MS5Pri3TZVSjmOdQWb2ijFje
-fsI+S3aI7F5jfmBEYPwlan3k16ifAIHVbexugwEZz88YjFODVwCUgmCFgcWxQLfh1XOXopzSBuOH
-iWOJE4s6iaBd60XtW1Mbh/djAHMSKrx+X10n1Ac4AcB2RMwngRRanq/qUF6O2zv3Fp0BYuWXtpCg
-0zMPTquXxk31twlkDIcqtntMnoQmKKtqdhLQCpraTsc5tciJPjvDzIZoJsN3TWSwQMG5QYxYTd+P
-ZFHcoth67+vphGb/AmbeRkFEgY4jXLqe8jLlF4Jdn2vcUqaz+CVl+stma4WRsbCYdhBCrpgC7UMW
-1uQZZTfpPkkYHJBD8b3nWSVrPskIjqXCSXBT4VIqwNfEmYaXHpZRnUMRU1zErKDp9w3fb+1btMag
-hnAPQ1XCS449naOEhcHdNLHKPCCeVXCIC+ygjwt4Y9SwsuDWeP6yp1YabOL8EGkAFJ80/r28SlAK
-IMt3aapst9PGIGl3QHruZiAU3A7AlsGxPwHGdeHOQHP2tgahpYcY/+gRNAdnHelgzx0w2UyE0FYm
-jC1lroyTHRaLBRHRQLRYmDKlXW0Bjna35bYR3DUDMAjehpjDNGJipoeQ5IwtcO+k0JI0QB9yRk/K
-0tEy7cmZuCsTYdoOvR3TrDkC88ihxIGy2NERZt1YUgv7ltV4VqqoF69AgumCqIbj7PtqGlOg38BO
-r+Zw1u5KaqqEOkYbjpnO+rYztlFR7YWzgRW3boE2APiqUgqWWR8OAtZtFBgDHSB4GeyplQj6KXF8
-4XfTroV8cEIRA4ahGpLioikOpcGkHG/d1Uw3GeldBXX273biG3Jquof7WSrAPGWqxy0eS8lutgfB
-2nrBLsppHsqUermbHTSD/KDJu0opQ2AUzu1EpYhZJXyy00L7LchWU46VQNIaAKBszlpujLYtakby
-cCEJ0u/4OnOPCybp0vHJ1sttgG7CVl/d6R4BOu5k13LOo/OR7ZA57Z0kW8GthYoyLpFDwKt/hO2G
-Kdi25AXC1tzMojYgYkAXHvMKjruE3r6nIHW9r1ar6QQ4LfVRZNiq0bjVikh3QPBal/3z52qaAzAp
-XZo5DaaOiKWkCpEsFEq9lCn9Uic2ijxdkX6F1AusEEDNyMWKVSWkWCE1QjcppndZL0Oqha7WHYgX
-O6PoBt0ZZaj1ykTrlZ1mRn2RnU7q7HR6DieDDHVWHIdrcoYWWBkVSPSwO81gcBl1Mnt7OslIcZS9
-yzDG23wp6QQzUtCgqyxdCKFLbQoWK21wzlAjnhmlTLZeZ5sMFShm+EC25clH8Vy69WHR7iN4Lpdt
-Tb8Q5GkyBE/KfkVuRukfjMJr+GZr0sR6EBHXCOVc8SYrrAUQ17KqIImc0GIKF7m6UGHUVHgIA3aE
-fOkIH/4B9ar/2C17+OOhfTuz7x7Zd+f0LoT0D/Y7EKFUyru5fbmsm6haoFFBv+rqbLiqrig+ax+T
-Z6PxDQD6i9n31XgwYR9wXy1kDUXBZo7ylPiu5SaGgRxzcmYOt37Pz0ngJc3ZsA4t2OXg6CJuVSoT
-gK9187c3AePuWAsDONlJh5I+rFG5tDODdJ3qdOwUC2WACPiu/+Z/NAH1V5vFolq9u/v6//yMw+kD
-C5qOTTZFOkVBEYqov1zV6xo+ZMSRUUsuMQAoFmpguMmmp1MkVAkJCs827Kmxy5vYz8bT6CUsvP2y
-lCv1+2g661raOaK48j2lmH47XerP+Ft95g7UKy52lOnfqlh1NV1rKPibP//Y6dzq3JL+muTOlP/r
-p47wz75f9sfoDMoMkpnVvfD/k82KZ0plWI9ydHMk/+liHcb6dykDnql8ASaOP2Y2eJZh7kFOurDe
-LO8SHmyjWfFscI8jQ4BY0M9hqX9IQG0Hb7ArsrYtatPJ2rrR/rBXnO2JkftcxmBcavhShd3u0xbk
-KflVjGqpEDlnGwsP+N7DQGXc09SJYaJThNjw0GKtNPGBq2FN3OkP+OJgNpqfTkbZ1VF2ZRFVqoKr
-Cg1ZVDoEgm4QqO0To2Dihgr8+c/LpHVja+2DJgQAArL9oSLOm2Mv/j0+siWEUyvUB7hBXSeFrMbg
-2PzD3r/kR0cwf5gjEZ7yMu6vBJ6+96D/4KzJDg4/kzgv3mzh7Fjk9qidy4tq0ZOmg0S8EqSfrGAL
-+SHTL7/6Q1pYSGXIyV/hj1f4A2YpBnQGGz45e+6A1F9Xo9WkvlwMYWEW9iL7GfTRZUVK3Kegddva
-QXZG8fIeTZXl0Run7CNDs48UnBZ4AaIlZX8+sjl4+1Od5dnUm9XnjKNgJgdUhZ9d7/it+dUTizNa
-GwyvpRsD2584wyzJt8na0DcJQWzhKDtjpEM2fyUPW+YtUjOnCckJhGkSP9NFDjyedKwaZdnn/Ht6
-mVNRm0c73QK+lga8FnZUM+TBVR3rjzHloUqAJ6eexlqEs52izSWAAQmnkLzgCVjY6wiUfCzSVcyI
-tlDe1nVSXcGuGVb2W6LBD/EZ626agt84g3P+TfyAbCDs/Dt8+0ckqcB5DI5SsbGM/adcZsJ5BG0d
-0NT+tG6qQ0znlVJE5BVqQrDlp/QPelHnvomxtI2i0DJs3ECRj8TCKaXE779+8eLpF/nuPM45Fqf/
-d1iE+toTLBmxaeJkdupWHV7A22zVEmSeapqpR4bi1ZUaHF8ePuLFq2U9apXA+xQzmo/eVqpHAwaN
-TQ7wH7t7YuYV5/aV5moCh/8MhGDiJaXwsWtUR3ZYombMg1bxigNrcDdl/OaY7fDQszC8/jyBPpAD
-GgsTRwxBI0L6wd0a4D92fzGV3f3+y6oBafPuU1LUmZxd2Uj5ZizeCx93Z6ZbbLiFF9a2ospd1jfx
-9sVzzt5IpaKIUuZE6qSXls/4L9VnqgdH5FkHr9zCZf6qa2remc+reS3nqSDvGzGBgZsIFWV0RJSH
-h6ai3HJz1xo0ZEU4lYygRTJmyO+r69Mauvk1mkatNst1S1TIRN2WRh26je+LNzU6eQvK2LPrxPUZ
-nEeWbuQ7DQxtMA1uOnJIAhaM5F+ZfojzHdlC64osvJfbvZsEGONWImKKwSy/6yWy8Rp656WA2Xib
-R64eL1uGXdrkFM1s9L7CbpG4qewuvAmXJtiUwlahe//OHprviTHDsFWdaQA5GuUHTZ/+RxL4cVdb
-uHdPjo8+OfEksbAPeFuEUI4PmpOMUrVkL9gQ3wVH9EOfHHenk+5JDx+a68YEZcY373FDg9ecrA0v
-CrqJ0KGGxXw+aqqXzFStMVFnP9OtFmtiRYkqnY4YCWy0dZhJHWTuyszvLfnuyWwmzMu2WXPIwIga
-OFEikkSZgmnaA7iupyF0m99IDQaHsYX8k6zG9tIA/ODgRBZS/nCzoIQfdBtk4D7KZQYkA/UAtVHL
-arW+LvSBFqCMa9Yo51xSznAsPe1TTTJxcTWRbfapZ8Qg6edvTQUXggctpS62mYDLWZQV63T+RGep
-lCAbSB8seAhU2VQoP6fdWcxh1HxALnsoTyMJLWKT1LeY65JYYAqdlMEGS8Dkp1Yd6Pdu2BZzdp5S
-C8hu2j45bmk0HfFOSvTS21K88kzXhBaSSwdvToOGSWQ2+wnefLkeQMOkbkUqca23t2yoyRebXZvk
-AIrdGK9GUZAt1UVK0bgSl69sZby74GkOB53R+dYdbwcmpmeOyGgJjP30mInu8BkNN3JJd2amJmFi
-gS5/SiJk3SKnd2XZamdDQ93ScHntN2ZO9jAtL91SsnqEhPog/s+shp7BVS9z/Je29paKZj0OnArO
-ZhSw/XHbmDKG/Zz086QhkwOKOEsUo1lTYwhODk7O6KJgDoIvmq0Gpo0liYvqmthi2TewW9NXB6oV
-f1C7cQB94dRqgwKI0A79Hm6+FCo4yIZNaXSmf64m5hpiKral2TSwsLOqPH7oaDAjCr1cgSCBt9nK
-txK6UKPPJ5ECxxZHm9vpWLIcX3hZtuHEvxnN7NgpTTejHykkO4Q/2RxDFeGFN4b3rMgGzoTe8M8T
-NBoYFx4hqv55H9fQKHNmotPFRbUi42GqP1IA2SOyv4fKzcMBnf8OH8n1qMvlbWzBya0SjsuW+QPF
-aAhk67lq0L6wHk8pG7pEZWYcuJNZkIvabSbm0esZ1bYEM5pdjq4be7KSLaFn+U7PccSgHcej5Mlr
-xZwQRzY9NKVwbIyKIUKnZSBWbNPgpH9dWltoqI8rCv+aJdZFM1ihpcpdnIFsFs6cPvrpJkipDW3A
-0huzhQ1F8pOQ2jpN5+XFdHyRLapqgsHzgjlrLqBno9MwK4NZiBS5hKxcx6JV9+aGru3WALV+iwOC
-cWTkTkDWvDAiH6iSLcxjZ7s8zYv+BlneHVPEPO/mICUznk70rvhDL9NHLUU1iuny/JFw2sZ9W7ZD
-mUl35G/XmxuuGLO9VvJrm77Qxr8NxUp4RKFxKDzIaNPkZ73yVWdWwWO/94dKjREoNXg/TcltHyID
-RrEHdO2fS6xS4wyFBt08DBz3kJwNREj2+ltIXqS4NSKw7bknV+lel6mA0Oa8aGGhBrp2gboTmTxU
-q0+4VbNeFJhWUdSW8DSJDOdlQI124cYihQVvtJU4UmDBrIDpikuG0zZ6DURreou0k5BmRMnjyzMt
-izkUTXbsWjdjBFa7Jw+wxUVOP62sfm/WHJ9hjZDRwqhZN8EHXZ4I4bf86iYc35s3ZPqzasGDHRw0
-2zl/xP05o4NFW9myCUQ0rW1StgYX28LITUyxPTRHVgXiweBkYZzZ2XjNufvfyFeuQbugScZXxXIO
-ILGW7DJGZGJEhwErwpLPl115zRZXunCYFHootReRdhcEeIrQ/sOPytZ9MrHfbAov+d3DTqjrODMi
-WOSjMQqctqSJFcxGVVKr720Z/M6Ye/Sg+LRhB0fogg/rYqTS3jYcpGgS5gzxbsrbmhrxYQLPjsaZ
-ks9jI/wGYrAzykfnFJLcKFsKB3ThzRfGRlebDodotlFms9GanOz6Gjmh+49LGmaRqjKHORlPitu+
-L9SEts6lDvQiNXsw96W5RrYl9Tpf1ku6vbNXrwEhmS4MVA8CbxPuh50CPH6YXjEzMnSjczz4GGRS
-i+nLI9RovNgNO1Df00/ixNmyYZCgBUVb8iCFmYQW3vXGluG1dV5SZPgjtbhIqIbtWJJXzWo27I23
-vrFhLuHRy7ANASF9NfYkliQ5PzNjllFcZCvk2W5zkmWliderMqArniDXRCpmSESb/mhh2WE3rTug
-Hm4yBsmWOcQlHC5W553m4CYGx0YHEkAiZbfANhnVpJoMHRtHwUOKCbfhH30czvhihOSXEhvcINb1
-JTw1RQQ6SbamtMhQUZ19Z8bc58neMohBHR/Z/ZwKlYmkc7FDbeuM27EYi5O25Ua7K+sgOY5UNqLU
-bpy+TXqXEWrNBoV77GHgdWvYv9XKQbvvp/WmmV374Puav6fm1yxWNaMfOpcSkB8T45BjI6bIwoQ2
-of4NOAnfCU9o40JJKWQQ/spuNXdEvwvYmwTpQOTjlMkjnO9ON9MZCDB4LqOWi9tQta8rlqkuxGQT
-UM3RSfLyGbcfYxZVz/ZI0YG9YbOm5N2XPZSma+pxSJA8eKIb1qJsuY7v3IJ18RH/QX3Up2TPWf61
-PeTU7GjXi/sh4RKWkdGJgoBl5M+wYhGevHGphIUI+BRWjXLFZwbfOI2ZVj6aYBVsDHLKaaQaNklX
-dClSfLNTiw2SuBg0L68xzFeVjPfQFgmYq5BlAz3tb5kQZWRS0dj8QL9+JCSHoEc2WnDsAt2L40Rx
-d+xhgVUeRTgfNtwvpt69ALKfNheo4cw+eYuJ+M5GbynG8wzDbkjsD1mKjVREx/XVhMVxCsAoTalr
-G7rIpUB85FS2uruYjsWmejhkjTZ1umtAd023vyS1R1uvyY+Q+RAryhNStNENoUYE9jpDGTvafXo1
-XReRZUyiWZRR5vNqgjpxvB0+X43m5BTQZMWizohIMHBCc5cN26dVU+6gTptyFZZdU3vCWQttRh3t
-Jw6nJvYTdptXt9w4iI0mdrpwp1gcJL6i1YZzB4OjDC0jvDuKm8wu4cN6NT0/rzBRhkK0xcHFdBJE
-h+LAd09Ny50Otug0eFAUv0nWcCCrgvCT64MuvOV5R4sQYlLIHWzUCT4ciq6tn4EAuq6OgAF1GziT
-bdD4iECdkrEk0stGwqIbusGbD1IsTs/kFoRinldAJ6vK3H/AG4mYY0wFOKcrUDkxL5vXteHslfNp
-Q35FhFexb8EDuJAF7jvVYgy00se8AaZDbDuLDXA98jCRuDJA3QHv2wPxhikgVgn/vgIVbcy5BM8A
-LSGegST3ZJLh9VfN+FoR52a8WeHd1ez6cPssfSuzxEz1aLQ6N60cUSBd9A2l4rgC7A0OJR+lrJz2
-dieMNB4k8KKQECYaqEWSPauLz8fkxugUZiXYdCiSv2UH++ehl2t0GL3a46gA7sT3PnNKkt4EIauV
-BzVXA5KTYKnoNE4qACDOi+k5xuQZDo3N1hAVHQt7I8meMrgKMozRRslnsq5rspsdqmwBxFK1rl1k
-E7kJlEUm1CjygiX1G2DT+PVZHGBKzG71Hg2YOMTMGCGCmASiwRWJn01sFgcskDADTFAAldoc7mv6
-GJgheYPLx5iBXCWRldzXpltieDXnKDwgsvEENMdSwJrsO3y2OR4hkI5Y3EmgC6PXnmOisq6awa5W
-QvgRAlxDYQx9/oLbhi1iDIz6Sc8cW4HOva6Wbdb0VB3q5ZUCnD0UQG0oFpo9WBHBajo9IJXnu80U
-9ZjTxiQeTxtSWEqRLuhl47slIKLf3Xvzn4zjo2Gn7+6/Pv57dn1sNkuabVKbwue7V8TIjBkyy8dy
-Id6PvB4ZrooO/FHefzud+labBXWv61ljeF59sNQ2FbnzNetBbioo/z4JYqnqs1cfXviSC0NWIXvm
-E+F1hvuexH5iSP79Ijvh0eUTPZkrRfbNg86DZEJmCOJEJZhUltM5b7eF3TVL9tZUWwVtH84wHKQX
-AKkqZO7MLHa6FPNrRExGYmRk2VN84EvrCzrtcbgqkXMVCCFTjg5vDML7IJyM0FWBewcdRnPVvtnP
-UWvxx5wS6v0R3ahzf3yNVQ1IzmtEa72QPC1QyQoGfQpkrqpfrNfLo7t3hYLr1fld1Ao367uGmPsY
-VjJXvk43QT7NqUNlT8RQOTQBTciWTzTAgzADsROiOjsyym02ebFbdDxlvGXpCVJgnoc7FdCh9IwW
-qghw1i/WuCwzcWNzCth1vZGI8UTYlGgddhWWThLj6ZMQ9sEzsI8fM5laEuoH9K+95flepAppyxch
-PuAcdKUOQtQxfiGT7MnWV0aAC8Q2a1bmWGIgyTG0/g1kJzNMrll2riJZ6XsjLDFevgXqk/VrdvDE
-eUo0pX4IBQ6YwNcN+Ce4sXURedruPy/q2URurlpseD0jWcomYWHr7Zt7fFrXs9Y7UPzIlblVc9Bf
-1Is/Vxi8kA77DELlHR01gBsTKjnhK7AOrc9J9eYAYJz+TRVWj1RfesxDqVN2buZh4nuXpDxLjIfG
-dtVYkE9I6hzfP+llr0hSJGGvNcn1Mafm1hX79dkZUHp2J/u0hH/yf8l7J6naRlWYq3aO0CgOp0DE
-1Hyf8GHcE0mxYNdMn08zQ6tQGdaL2XVx2/b06MGJD10xiyKn7hC33bAaD6QtYA8rdnH84yJvTeeW
-4z8HzdYiB037xwNN9dJbvMrG4HocrgNPnWV7PjlzguIw135KNUnVEpIoBVzt1k33yOCxboC8gW7c
-G8rZ0OVNEd66FcuvXNgRZHDmSpAK6KBa0WKYGOsJrNYfmiw4OkDhHlGofCj4jwEUqQcnXuCY1IK1
-adiJdwQN2ctOhc10ED2ujmlVml2OZhzBKU45xTRnrwW2QlRrXizsleVL+5Jn4vIPPnEAIOkn+SZN
-hiSEhATQyxjUpEzCac8NHq09t85M7LuRhH3Jy7YRiV9ZawM+vqMkXjdG4k1Cz25pW2jSj5Xr7LHC
-JWz2RI4K5QcbadlUhWY4tQJtql5VHzgKQKNF0kwJPxnap0RPLHR0w9t9MZHD4kfbbOfsDrpcpW6v
-rJvzHvg1Za1YfJShj65yU9TOVVIaO9jpdH4rlEcaS2BOlFhsP/f7yFWG5SYB+KVJV5YMLIIriE5n
-A18mExhdPhu5HFqmfN+ICy26AVsumEw5z7NrBxZiMbWldT4cyykILzaH9AbEJ0RHIq7A8ppYLoUV
-4GeFqAQEVUY8s1ta8VHtmI0JV2MO5opO1eCC4WoatS8TGNVkbIsxzW+Q4IO7r3Ai+GyQHz97/vrl
-m2cnRIsenGBidjipDYechoAMkYxwrnzWPooOb2HErPWaTih0RMSTOkbxo+OzsX+rYavcLMxxtNlQ
-1vlOcCsttBMX7HpNL0n0VkPqywnSTwBn4r60OUfdwtM/XlSTvcBqtGjwMIn5zeoM4yrJZGQVOU42
-2RWaSQdSOLQwagyt5MzPmHWgnpxdmuLhlBGULRbHLgiBnivPwti/uN1trx0c8soyTfs6IAFOi/3W
-yrFNgdRhpZOwJ+fb5Jt3+CjyNlTrGrpNeozC6dyifF37kNCuGfb6zZoTfTmYmNq0/bs/v7v7tos9
-CUqw7ShyyE3YYMTm7OG2pHnbxf8S850WrvbBknXw3MvncY9ltVuoDCZmC1m0s+bODqDqZ+eWMX49
-vY7ioPEVN14DW03bzeLeqDhn8B6Ogqb76XA3W0POXDm3sCv6h+AkQ9ekwuZYMM7P7Hv658XjV6/y
-AA+kEgxwYdjDXb6K/ZBwdu3B5mSFrMmhA15jpEd1VLqlI3UbTNjbZ/lpRqbDiHugOWAdygN8Rr9X
-BkUTQc9+9/Wz10d0Td49XHXlChG3Ltxm2T8tj4EYzTejI7TmafIyruKfSYR5s48RdKTxA/EheiQK
-XxJfuGKxCC7Wq2ClYvTCoaAwmih2F21Kn6wsrO+TsBjvN4GFs3j2ZQoYJ69sg9XjuJfVBPbC/MvH
-X3+DITXaGmheJRsQK4AbjvzpB3WWbmu7Js6U6yzGSMIiXmzA4fqyryIDUpIalu8UGeW+4R/FXiZ7
-XQ+agsiRKqYoN7BhyT4dx5XSy1gRZ9buZSoGJbTgh5qISrhFh08ut3DAolTkwhT3WtaNF7swyrVs
-47pxp7ODYomasFKPehfRc5NX+4zFcmM7oKstI7q68ZDkrmfg7Xntg86/N4sBHYNw5GUiIwEJUXEA
-AQ9QZk/gcjfhIXDHShcE2nAlWxHohSpBBIZx/jQCw28/PQJxG7Qxeph4fAxoFVqoOPMOdM7alwux
-CE/Vu54TCAmC7qPLqpUKeBQVP8bGTzr+zUOgYb2lLubtO7JPzB49wsuFZj0BHtXLipxgHs6njTE+
-yHztC/6SfLgmoIixXGEszOHVIMfuKR7V0mtM/yYSXGEAewpIk9tXjIXOUBc2Id7dFMLBjXOaQxup
-Xd9j3ADUu4ayFHo2DPh7HJ9IvBPQXJocj4DlfwJYodK9zHNkmGiXIPjiuQNRBXEN9rdsKkmf6W5+
-EifHsxlBCuwGFy17eBVj2xe0zDQr37Gf7ZK8XLQfT0LqyvsuDc+Qd4TUW066ArIH6chVDIUrX7CK
-BaD8wEl0JCX17N33oZhmz2sxd9OxZy0AsnUX2ggErCAQ/hmbJAzSdOWls6dPgQbDj+M7VIEavP06
-j1MSLTZwpDeuotY5mlkV7nyJ1jzuzYGLOMNKLtaKcCwu245Slgfiw/Fvjk52cH8MY5kdH0wwdNnR
-weQoEebXhvvdMhZA/7sHb/53Y3XEiwuPu4Bum8j+3Sev/58v/u7v0inG4bCBuhuOnS58ZmUM08hu
-qAdrdo3KMuQd59WCi8ZNbtbTmalobxbtWbGXfc7G0I9NBeKgnQ5uOOuLVb05v6AA/NopA3pYXWmb
-7c2q2upZHWUguBrLDaFkuaHn9Wn7ja917RXfatP6P0+rOAsmvqSsGpyUUCxMvz7LnrDDpnVGqM8I
-AHqKwsn+SXFVsvdDhaXg7Ht1beLsjAATou2ihJj89qqfZa/hp4SLsUDJgJeqyzXQE6Ruse7i+8/T
-DV4O3TZduY3VnlDKSORR7hi6QhvD7LSa1ZfYmM23B/vKxqaTvBRrzfc4cO4FOSjF/Sn80T8B1NcG
-DYxt1LHI8BKQrgSZ9kpT7OPYtJzGeoaYMt4D3CrZTm/WNRrpjsmqB7CMAXEQHoJ7vqZkksvKhGwn
-u2mjxR2pxgASlEJCpog6rhFcD0KDGodomu/QIvNlpo/I4T0QMCchkug9DI+R0RAASlo4HLqOCBYQ
-lsI551qR2794KodDLItGuejSyIgLTXOlEGx4UI6xCn3+/NrcehGpSkMAWTU+bSyweW2U4mfTsT/f
-2eVF3aiuYNxdQng4y7JiFnDQ36DxrfXfaXiCTUdGK/hKzgLo2GwNgziFHA9NEROZuH9Jt8NkS9eD
-RUeXEmyOTXdY2Qwj0FDqANssA6L+Ywu2+4Os6Pf7PTKb6WXwyDpCNJgQy+hJXTVo+nU2XaD72rVE
-LZEW0JQ1DXGKcg8C7Jl5WmT0QfIkw7PBEcbOv16TdT8K2RqXT5B8gHWRjzmgeTpBdwl2INAZN82q
-mgHNIGN+X82uGcNJ8sKkSxh4akXmV0BeowXZbQO9Lk2yTVn2htRpS1nTqjsLJruHECRrEw5CkSCP
-Ec3hyDNQZi30k0c3ex2piozNyG4JAQWyvca0FxtigW+LVV2vqWuE6V52G29/gxDHZkPASBoc9zeq
-HQW84AVMFcJPthIVsL8CwVkKW9Rsi9Dru23ZyhYbxwBhzzy2LaCYFszy8D2N1SW6xq/cq9iNmTIG
-ahlVsdmIj3N4tuxiChwaVvw1oYk5MG4dGsqqovWFXjFLm0CapqmLemSzT26zJDDzJZ3Uo3D432KP
-J9VVqmEFgfwTHIgen0xcnjJfMy2CWH/aOEwfhaHwGkrgzAVhHPNV7c9IrO2XSj4hKP9z/B5lYmQz
-jOMnVPCJn10N+yp1n/TNGjvp7GlsYi8E8HMnzpDn0BcQnsWgXpquU+JQUIGs7N4W8borfa1eMLbk
-Bbe6r3MDNuEC4hG6Msh4VA11Vr+op2OX79KjlJBGwqstqbvFXFIP19ex4rlN6tPB+34SipTA4LDt
-ZHULzwqnqBMlZxy8zEN+LXVTYDEDUNH9p65gznakB/x6/9A93YOmOFiVXRvh2huuSp2tl2cpyo2A
-OsYzswRtDm+VwdsVRBbsK8vgm075HVIdQQpI43pazSa6Yse9hdLW+/lrc2pDSbEgadkeNx7zgQy2
-gapij3lxkTqDrZuvSEQ+tibS6gRmIqcpW9yhnLRMsJxVMiecJE801axpW1zhFiX0PiS3N8ST8ThV
-5mrY7aZ9QxOjMpAB+k9tpcKfzLB8HwNxinl19yF271E3tbUxq95VeMwB5uWwq3rxBN58RScrtAMi
-nR3yYHwd3aqb6PgrStXKiszIWtM7+d7Udtm5Bm4kqkS5NYhXeC7WZBG9gqnjrpOVhw5upTIxbhY3
-pAKKGoXngBsQwbck7RXsJIIvXq3n6+JYz+hJuYskoKvbJ5lb2X+CZV6vqvHwrzKxFuno4D7cYoIo
-KzZWvxThHJeW4zyDsRQe2xGAah9DzD+zngvCPDBcWxsnaOrNigIadA/ojpDKNkVp9BTWLhg5ubXm
-3ukQwIiHtskgQy0vbq/8iaciyf+gde79nkP/b3uo23cIb6wkLKmpxuOse+2hIRVM1Vnz+xlY/z0j
-aMteyMlfn9lRldw5LhZKdWwpbpZUCGob22Z/IhNicE4xhvZYzFJ0r5EIO/Ylk4TZMDHe1CBJAWJU
-bnyX98Ba7NfLpjWMj2/snRC2b3Hoj/GG9XcovGGoIooSYvbtJqXlp3OnR0B6l0tr+RPG7DSSEDX0
-Nt6THiRx0zK3OV2QJvOYOFRr7XqIX5/Xe62ZNZsPcYegoKnDWXVGuRHVqxWGHcfmLegbJwcK12S7
-R070X9C3AY1YIqR+EBQazoBxY4SZRESlLUwiZhRtzGKXgKZWFXXILODHi8k+ixeK7btwDQkEQZ0j
-vxmSyJJSWEzbCXGrjbJ1D+zNbUC7ibVgKUjNemfnClaFy11B2xJLrlt0sztZl7atLruR6e7j9XC3
-tJF8nq/2mannq/9/on6WSQK0bJsjCmKWvaFUBOqyZzDovK2q5YjCThGeSfvfGEUwPC1H6PBNl8Q/
-yM0MiL5Aaxg6BpMprTVTId+cni33NQaHWGO54t+CUqUU+9GZI7DrB1ET9fTxCm+bU1QVUxarEJyp
-RIK+9HAG7rHcg3gSm/tOCkpMlmvUZsDtppF3s/+2E+bNNibXxw/bVvBBb05//U1FsisJWZvF6yiq
-lNXw+TSxHPaj/8eTidB/EcoMd6I9tlQL4tXmtK3i4daK325mbRVvb634xfR9W8W721usW8d4sLXi
-i/qyWrV0tb2vaT7Ac/Q3YQTU4SQjwC9lVLaVEdAw05AYA3HpmzAVtWJ3Ltgk28HOd3sy4HY2sjc8
-GgEAlJEoeH9LvkRCM83TxwvNPLJ/X/xNrRSnysLEIujNt9cJWMr62g4TFWObqkNdCClUiYERQii7
-H6u8uNmuGPZioM+yf2M1iJhSJZgB2Wv5KT5TbKBdNn4/4gwAejGeLbpHDIuH/2Ni/rziRdeTtUdW
-0I5DCPhRAUasj/49B2NJyLISpgXJzdf4WVNY+hT5z6c9thw0m/5Gw/HxO/JX6aiVv8IgjZZcYeVg
-gjo6vC1EFPs18M2xVDuhAaSlftPfKDJdMB93BrYTILv3uilVR3QyGbWz7Zb4Arax7kEzOGh6pISU
-PvZMD8q9GmcIAYAWvq/ija+GMUXZ1+kVYj+X6Vo3nFas1906mQ5yYlIVDm/jIax92pJYozqq66kJ
-NOiatOBrsgNhkxaMTT4UZWgLtB1lk71x9kFIo0qTHWhL6w+Lg6aMtYfMZ7XmEINgJo7S/qzQOPrQ
-JzaJhs6H+mnDXvnh+Ojw/kkngYZte+Mu7SHI0z5D+rkvUkXNRDhTdyFMPqiD0Lp7kh1SqvuVHUx8
-nbpD2O1ilKQfDpDc8elH4joYwbKXJS70WAj6Suyb9pCBpOhf5xYguQFTaeamvOtCd7Zfj+0kkr0O
-53+VK/hoLmWkRay+9wavfSokX4I1mcsoHL0zITbySI8NkCkPJ6X6hGniCNvxBBRdc8ES4KqHdwKc
-sSvn+7tuQhCVe81wFk3NaC63XOXhMIZmCHY6jVgch3u62Wz/tNMd9tWLUkR6TvX9b8QBSNHzsjq0
-vh82qywFsrYWGKT7MZcO5JCx170DldzHBIS8c5LMAr+UXrkks7jFwf3ZM4EX+6gB0hP3sYdq2Mq0
-w+cNBHy39YuBiTst98d97my9cFANlHuks2d+kXaD+asfqu3cT88Xe849lNxn7j9+o9h5s5CaxX6/
-j38wklDAXVOGSYcUhJiJa20s1Uc0xrnxJxB3RQ8B7ujK6lKyiom12or1cBzvLbZM0MSJX36b9dIe
-lksAIWW4lGC+2orpb7xxCkF+MW3Go9Vet6BS9N8vSUZ0aHKm4LTvMUAst8/oyCIVym67I6TvEQbg
-ZRkVw1A5ZvxsNyvhV0zyV9N2MFpqth9ZqLkAbe5l8uYTTy3oPMLRh8L165/rg2ps6ypu1pjokrxG
-CzgEoWMlRRolsQsd/pSNcGW8Av3Duwu3VjSCbR0+0FxpxqoNfs2uhegFQb+L+2VUwPh1f0kFFK0J
-oZKZb9HY7AQd5TkdBab0bWW5bFLrRvTotG4eP0iq37avdbfOpZznoEnvIzfLY3UojKgqnZ853naV
-ei88hFpHe0MB1j3VBLvIDDW0UCvS/K0P/w8ksMcvvs7uZk8XgN9sCcfqdQMvPxwg5/AwE2nlXrnZ
-aS4wmQQhUaLZHpnsERhZPiQBISyB0UXe3y0VTUjIgvwckM4g8p48JPJCSB9MXOHrZdUwSb+Gx/Jo
-f7L3SFEcvBQX+hgaMy4/IZndiLQVQbJ/s42hrHZXE1WZUIhBlR3rU7MUZzXOi5BIe+S0S0HAppwA
-aVWRwIKcPg7xlds8WEQmJmsU8baG0sVOppxvhGJ4Zdmrzfk5ng3rBfDHBDx0A8ejpnAcZb1/Wp1h
-ZAARlvAj2nfDZn54yL8HsJSmizKZ+0MGzE4IEk513pwXJo/4UYLEbGb00N3GRNhzVGXD51FqeS85
-+S2hVAriQ4H/1qcUHGF9qgtsI9FbJi2OXYkIwGzGvE2TX7mJmGcJ4thowpyKDE7e69O+PY2VfYzd
-a9LeXJGPV7jeoXxiyXPi5rSz0lUYs5jFLlybdOYoctuKTE2FVLI45EDCEpsEwPiZTq7s3H2kPIBY
-kB1Yx+aQGFyqiiR+6f5xoZIMU7njeyeoVMyz7OFDYytpNvWyRVhAMKzuVGGoMO8Ga02PHJxAWAg1
-r6iZwXQdKlJE1z/VHZlF0vWOxld8OL1aH9//lQSKMD5S8FJELpT2/srCx/Y9I7Vd/Ix8O5QNOp0p
-+e7SbKCWo4tuc1NMXGRSDYrTsAsQcVbErhG/VNGcE58/cZ8viquE/9kCnbC7HRe2t8ihmew2QsNu
-/TIv9TfiukUZvyzOxEL+nDPl3gvKnDG4c1t3Cgj7VJeY4vcINt7awUuqfM//pHjDgzuf3PkUyGtW
-j9YIgIkQZi4n7uPXuzLjcqVUjmFoDEijrpdNV6pxCdjEehlGub/fyx6kv3DndVPz0VVxjBBh3Cc0
-hk/9vnQvqtms7h7jd6KCC6/V7vnmLd9eXhAW4Nu7T9/8B45V8u6Xr/+H/45yMXX4xRGF9qVZMClH
-RjObmJB8615QNrd+BysNhxSuFC+hu0h63ZNtRMm6W9y1Kf9MMwYOT9vl6XXWlSRxh3MJ7Njt2Ii9
-kuuQU2JiNI4sx200d8n+TJiHsxpQcUn7PkklHSWgSLoox/ZfXTew2VBKRBvPe0ryrtukb5l8QRS1
-7tqmgOsY9aeN+jKm+EDcFMLpZW8wRxtxvV6GaWeBsiYcv7KJqpuaBAWwM55PkBe3llP5u/ic7MMv
-JHvbsl5uKMSxdPJ2ZrPiYPARTD4lYy+zy3r1tum8+9Wb/6iH9O7Xrw/+SVNI9oKa+BYY/zlGejod
-NdNxhmFnpjb7NodtgN0e8/N0inGZ/a6e4Qz+flW9rWbZg3v3Pj18cO/+PSIiHXunbsxPE4XHxehJ
-4eGirt9iORzuBQXFrBYkltExA5kW9QxdHjqyQoHZK+ypFGqY3CN7hKR8Hy8AP+2eYGwyYhCz2UjS
-q9bA/+dGRESXBIz9UddZPZtgBKJ5/Z4StG2W56sRHDiBrLscF89rVY7UGH5iKFOGlxAdCkd/Nj3n
-jE9zymwtgbNw3SwwLCyvk+XklKNwIzLGo+UaUz3ZjJXQvXw9X06mGLdq8ba6XlIav1U1vhwBywYZ
-f12dAnAkAGlxgbFJnNh9Dnjk9Ymw/hWbuprPRPE8q8+zST3GtvNSMGj1Va9H569R0GtLFRQGJBqu
-R+cPMIqJi1Nhv9GRdRVaePD1IibuRLHhXirTwSLptmu79mpzKgULk2BQpSWn7KuSY1GKQR8bMopo
-Eik/pJfixxfbdkC5dPYNOwYKfXhbDyyRvBpEEClsUrqMlkWDaRmoX2Xako47h4ofINbjg+aEzvoF
-t9IzYHtZfiRQcahluTPChpm1Yyx/UigE7RdcY2mNNCmcXLWWjjK++UdIKpYc+MGrLtNWr7wZs2+D
-yBJu3+dycSoTfI9CKXnm4w/DKY7yclt0iVgnxS3waa2zDYkoiZr+RqsJSLY1zhf6+/OIQ4zhFwms
-4n8ww4M/CipHHxeotwNytwD7iSXSDwlApmV+HU5Makoc6Ggm++FE7r3a/fAthW2jpzBwRzEARri3
-vfnhzRKYxz3X0zK5uUW4DyR1cMzZhhicA6+DgxA9roDbF5SBH3+6mNJ9ZfTBpEy3RFOUHPCUYc1p
-UHmZbGg4maKQR/oDBRcWSw1HksX76QqEPorO+OIPr5++ej384unnb74KbV6q1UpOMax09D9iWgXc
-nlyiAQoA2jUfcNvdrM8+6+5hJswtwbY6rfuTzfKMgoEiNANsYB6S9rlWNZJIyREmfXC4tTQqzMqq
-VQOcolgCvfsd/HlZzUbXxbERVECmWM4HyeAE5zABJtedxj/S2FEUzpGkHgzm6YsRLfbUkqCXCxVY
-V8ct0E33JN01ryrJRQnSJVpfRZRudkBN7CrIOZ3S8RBweL81PwSp2l0iQBSeDHGYjnTNeaJLjLqY
-TuRTmbArnDZmONWk0EMpUzdu/4yKEdH98MrPMEbpaHKdOTCoABlwbF4el2ndXaM6EilyUxFTT3HT
-tkY7izg21nMS4d4rSGxZ5s4MKXd5bom2oKkfunqdryTf2o8J2uybFDy89BXGpO5Ak8Ig7L1o1oQq
-UtKBUKOx2gsBxNumXw3+jwYY92LEGUkOLU0sAW8WSRIW4l0ECiMZgbDmpDWuZdsmc5Ugn0At4ntQ
-23E+ARTJ6U4g3nXcEmuEbJN+oGdMmRYc2CleeOI+Eycl4ooDQ1wxj5jAoayFJLUzgOpsC6tI8AYf
-e2W7mKynVg8eem/vcb3xsjo/kYTJTN8A67ZG3PJpyKwjGRmxyKPEBA5dQShCrPFsejUwyzH3c6OZ
-83g6KImaRymoanM2LwyKDYwkLejoUAkXo0ajOaBnLxW4oOeAjizSAN3/Ob09afssxG1SlsuaGkx0
-ChHtw0gqcMMrkl0uJG0kvNeBpA0GS1BGJ4IX8Tq3rGiJ8IaTkiODfABb1IiO4fzNiY4gRdkZx9W8
-CvCAhD5wuTQ9qUtKJ9Iw0fLYsaagjLky6HUjZqpjQZpImdjZkGq12MFoMiPKRSZ88c2br75+9ipP
-RerYKoLYZilj3hpoqgHgMM98XbwzOy7phpZvz2Er4+uhxmiIUE5jUEOG1UOLGjYdBfHvWb3+0oYX
-VjTyNdVuJ5Nb2ffffw94b4CxjjLUqmi7UvJRpwiMUfNFlynp/v1QdhYpCHMKhL4xskK8ENyW4cQM
-TslTx78+iiIRSgtJppqpZDfRx6OkVmK6CPJiJuV1u6VC6yjRFkmxPDU1e7aaPMzYsPbQKr5LyG6x
-BO7tagFTtISKwg9fA3FET/+szPFd1vd78A8FdvkzMF4Op4r/Ht8/Oom3LaxACV8Ol3mLHO+apz4C
-rAJbSHbQlrA99HkuvPAIalEf5WmShJLHn8R0dLPt3Y5BSWtKQFukPV2TMvLh/S2SZNwxHPkWr6uY
-OWGFBEZRU4prThBqfvItX0LyscP0S8qA/Zf94RCPsMNhinXaHnDZAF6qq1KQO4rWjw4qHq3UCRw+
-usOESCFwlij8oxUW3RUKlFPEFjNaZqzuSvAmaZ5Ll63H2rjB/TaS4KMZf7DTxko6KcOawC0yrIG1
-a8tt36q8syJ3l0+KBrRXmm1luVjQhZ8g+Xv7Ngcjl3b23XS0/OTPggDCrai8oV1s5QSi9qtxRY7G
-i0MEXkmKm8wVHBuLz2KaZlsuKzsnE1K2Q1TaOpvmwmTrsEK4mFcUjgQpq2RZ7jwuW/5CazhJPkn2
-gfxA3XfwlPI1kLE+7kn2nDhnEBx/pospHb0kTR3eVVUrYBpey7nJi3zEl1kjuqvLKPkXWvjwhZq5
-ZOZI9+sLiW7uW2CZA8t8NAZcVqtrjliP1oTrmrMvTNccwP7uqMmq0Wp2jZeoyxqONqfAW+OkQDcZ
-BYZf/2sNAtvCMdClbTCEcMZi5Y0+lJeRhZ66ACdI07FRcGzTL9kL45zCEqN8qFTVsGIATkqVA4I8
-nHsZSA8LeVw1CGcn1NdNbn7blV+cvSGPwwP80CX5zKjB+kOTD4pf/1jerCm7PpJNSf/9prwgzowP
-Hi9F10eU7JqjhO4HqsXpm+JrLTHjRv+zBKviXcWIANSd1OnS3wzaRSgBKdKiYKzPVmNJP3/XB89S
-ll030ByvSHIzbdTMvKw5loIoFsJjW0t9ZalykoYZI4P4ZFgOvhtghqenO6qXATFotuvbxzU/7kqi
-7o06g7myoHD2i4GQWCpwJCmKaOr2HKCo6WWNez0NmVWUplVuadPJWklw2pr00ZobBt/9FMckZfGr
-+AYF92V3zKVdOsaKyWKZ43djCYnPaoiT2jEiw4OJx6jRzP3FoTiXKyKJfDA+NVqKCEPvm5vCYi56
-NVPhW4wxj0FbCqna00zPsDmVS1r3eOd+rwza2rh1oAQXS5KBwAr3XK3/dq3z00BD8DsKm+t+oolN
-HhA075Tbu/ulG5OemT4Ftbyrln5wA6HjU9fr6dn1sDKCo4zBWnEzFSSU55Lul3LqMDWjwypRdOjI
-dE02qjlmFsy3CY2mIKe5ybXkjV64ylQbtgbyy0XRBhUWZFbdi7LQcmDjgd1IlhI/wX3r9jgyTtmL
-uzKgf90HrZi0qSD07JB1Nqx2Sm1bSK8H8je+nnJp00aL62JVhQkIdBJbMr0WQMbS44+L1Dkn9qj5
-+tnrpy+fPf6GEu0+Mu40nPd2S+2z2aa50KvSLnSXJEbfHjatl1jNtlssl1RDGx9KAB1zEmcjCHT3
-JXsXexuxS+OubjA8gwZKrnITSyBrxO7v0JT6KAr/aa7uFlny1jupf0QWqWQeI97FHvkJKRXrAlWb
-E023JRoydtZsmVilTOezj6FixVag6jK0DWhbPvtZe29kRmwuucS8JDWtsz7ZWE4K7HO5zaaFSMBk
-oZlFlw4zpbVSYrd/r4j95iXw9jLQsAqYaA8cBHumhWAW0TE/nJSxHM+NDPhPj0+UbPHIbiV6K+04
-bZN0nX+oi0PZ8t37pIcAhZ0ObpdUZENRpQwLTxo1yhZfEPYy8iZVO7f2UqjcMr4oZR9zt4lmN7Dj
-uBXrPHAly4WX6rjCS6el767IibHDshNrc71kgn04hfNxeQEHZ5tnR+xizVm8uWvyvmQm8UvCfMvK
-TakpT5p1OSGN6Fp+BguBoUEZfkj5TKfMt1Tj6Argfu3OBYTUvmnIX2ciRrowmgPODsneO5SiVnWg
-7GX2lRlGRGD5QzsPsK8ZPA0OVo9QZcWt9vSg1XZmFkvQ1cuL6azykOmzHX5pNi0zi8t6GdwYWSQb
-DS2/kCmJ0s/g+ZC+FJjPLg6IxRm69ri+EPQZ1rqqmuTeEc5oW5pck/wreanfWl8rW6VD3nW74EJT
-uZoCizqlyaFQfxKKa7owt9MWnXvssAzVC57m6MK+Tu1CabnAXVMxI6Xw/LTe2Uw1T6M03Y2QsGVl
-Ehe3Y0XmYZNWx2nQ8XN/aEp39thGrWhjNMs2o53hU9wmSfl+ASFW1SWaJfippBj8SfZxjBEQtqk8
-N9nYlZSGKq4wl0FmdRT9+aUq5qEDHaKkCFSxCDk24I/UR8DyuN4s1if7oOuKE1OKxYrNeYyue9AT
-1GVxl467ttEu5XMPvDF5B7HWl63Wu8YoE+2L5wlTnsjSRinYVF3cCYIFYr8im7c/IjteXSr8uJzj
-pMzTFr7LuTZIJQsVBJb7ZmPWOwZdPUxbKWWttWkypQwytAYzsJDSyOOyR23DM7zSvnDdBKCUAJ7D
-p8Z6T6Fh5kiNgtCqBA3vrKLO2Ua87dbeh1KDsKjUZ3uIjWBcjMXMF3dIa37IXdeyhHpuV6Tpyhfj
-uJzBlWchZ8UxjlNQ5CZz86K6pDkSG9ToeEzQdtnEWjd5TOGLEA+EqjK6u0IhILb0IIRrAildPGKH
-q62rcoXrNoHIlEkelQW02Ocgc7kzhtlX3EouOb89fr13ksb8oRt4ZqQnm+PJS/bo+2Dcjg4+TgIN
-egQco++pEIKsUZ6B2wS1M0pxGElvS/quj2PNT9Eddw6LdAw3658pkRTkQzLh23bViVACDE38xTPr
-ziBzpiZzXOsJnWvq7BAS2FZNCsmmY3W4jOXSFllUrAjQybG5yHs6bVh+ePgoR5dENcozVJXPUu5c
-8dAP9dCVmNpByydcr7xnkQAVeZ8eWadULGnYv+9aQ64zdKwuHRTMwMUKVrKWMu4Hsf5LfOpixZc5
-FMDpEh7fo6VVx6petLUKzRmIGcvR+qJPysoygnKMp2CiFAUkNHshQAUpzkQW2Co4cPnY4SxmvsSl
-M4k9weL5hpJFYiNHJhoFwVMnN+m6OeRfzKorUWg6kp+e2cmxnRh6Gm2AYKcPz173VPgSzDG2OW2q
-dxvsDK5C9IFld1W61B6vKrq/zs6AYi5sQE6n1QibaqOMjpGlqDuexh3fdnwt6NFNlIQBuMD4z9NU
-eBcX7JjNl8hFQt1qHCh8+Gz2NxAehtROvubbaRx1HtKF6mqKzuETDJN3hj6Qy2qFKS2RMkY4yENx
-kOM4k6vNQtLaH0ET7H1KVINx/cb1fI7nDVJ9G5pqdHmDMFvF2IaSNxxN9ilU3azrQ2d9kE02K20D
-q91ctXO4y1PvXd0kVr9FiombMV1bPUfqTkmmhjCbuLxRqGQwRiZxjvpFaN9Daif8QnTElkDZBstn
-9O498A26xYPhdN599uZ/Qz9vOvsMrS81iE3vfvP6T/fYi/7LKWV2V1GJMMbYRkxJjHIILeD4/k0F
-KJWwTJkcjLLHr173O68vgAVyAJxMcnFkru16NgH0QBMAYIO8n+M2KJ978zhq1p3Q2d4OxvmFm/gD
-cT7VXkscT4oIgewYSq6xmmdQ9q+j9yMJrItljIc8OSI+zIoHveyXvexBaaIxvKqq7GK9Xh7dvXu6
-OW/6/8rBKOrV+V2yxb7/6W9+zXsPhmgip/r887qePV/CXph/Pl3wA6UC4sdvRvPTyQifvj57ekWv
-voCDZmTlkX8DdI45IrGEjSwpNf6ASavxQZJI0iOgO4byEqRE/PpsM8c/r9b0yx6I6R3wVnK9p3Kw
-maf7gl9f46Yjh74hRirkEX8pyoUvqjPqCVK5PL+kRUCjrGYVN8hxPONWHm/Ozacsf4HHC3z4sqYu
-f4dqPEYb/YTZJPi4i8WgXq+ueWlRr1fXX7IkIq0DuRAkoi339CXQYAzqKYhJNAeUPRWfMNQfdRGG
-SdOMKdN4Nvj2wmAIaWJIoSBJXF0X5tA3MvYLpT16UjxnIiKF3htVpvlw7srDaQPrkpbMigL2xacE
-Cg9lPZZtD4YuObQGhPD3B+S6r8Kb7NkvJb0seA/imMCr8iadSkLhgJuGE5sAqAk2TMwEELwBTsEq
-ZBurCzdB5IXE2VoOlYpRDfI8PB+MRxixLQy/tCOSqQti+sEBCSWsqY5ByK2+B2QBe4HvX1TA6Gz4
-KRBQ2oIESpU+/XW3RW3RpiSQ1A1jBcrf/0+F8VvUEsmPQjOZUGT12RmcaaBvQxX17mZxyfywY2GU
-Mk9occSVbLeMItCZiUrFoUts3qZ8nE1DfEcNvfBSMUQi94R7R6yjD0WkiqLXQe41fGWNpvO2KHcu
-yN32EHdoy7FPiDt/lPdObhjtLm+JdpffKNpdhxMS1isQZZd4S2MT630+XT9fZUDaf8l7+uX3Nb39
-F//tY2CV8PYf1NtvXl1MzzAdZ/7woXr90r5+9Ei9xiSH8O5O7qcvhFeHuZeYkKrezv2cg/Dqrnr1
-5ayuV+a9/oBpBuHdgXr19B2+GQzUq2f1mt/+Qr/9hsfivXlKr3Spr3ho3hsq9UiXelFf0jD0OL5u
-8NW08V5h7lN6i8Srvyzo9cLvNb/ly52882Ons0HhM5paAYrlDrzmTALV/N+892/MTPhvzZTBW2zL
-xBAPNxFucVL9M28abpu1hXBHzVjcgePe+awazZEfnm1msL0CtHNmy8xKcIFn27bfKHUc6ceED9Jf
-fX0JwvV0POSNTJTivkRxC/XxMwwlypvJZZVN6kUXLRXfo94B1c5T9Iv1DPX7mu9sE3v83dlFki78
-BG02+LyxLpwvp8a9YnfqA6N4dqjgaNPj+qYBS/zg8a1ZjP22yLwvdSNhj8nqZBfoxUkNtk3iS0b5
-P8ZCJ/ugD0R3VIbm+2aL9MP2/5ToU97nPd8HPba6Yjj+DlDk4xHT5WICIqsEEUHpV/vH27FL7AGR
-HwET1SBHoshjadpWkcL5Q3VI93KdPGLfMm2UTUtriITtxONVSwQlXoYUKT207WYw37b7Guo4/GiF
-f1pPUtpnWel8FPCBUzKJZNSABIE6YxDNQcL8QahDkBxCJuwAqX/7cVqgnPP6sClrYZ3+zunoCS9I
-ZqALx+mkV3a2ULUW7pPETG3sYAfbafkWcz/g1kAJGxwY6p2B+pLt+BeuRhDDj0lLEzPIkBVs4RbB
-TIpqxNpwz5daYuRUu/iWkut6H3wtE73x55vn2U/Kyx7YQDUgUg3rpfHBphbqZcM96I+pUyhrhcbB
-VM9rmN6kGpYmfM5RL4fN9fy0Rlxree64XrqT+ckWXo3BJel/Yr0V4sE2sH9m1HBMZTpfXR5le26i
-DLjUKdeFnVw9pP8P2Rd7yWy+w4/P5qtm9uM2j5tlYJdFt80+7BRVWS0mU9ucfVs8XFvSIcWt7Fp2
-W1eHy729wulXJ126JOc15/Eeepe6FqUPis50N7w297s09VeYtrrbn4+xOlnYGEa/qTUjA6GI1DZK
-2cVl+siMUBp6vtonky+zL2AbdFsg7UjEo6M2rhHug8yeBEy5M7dmK/UyOgnwgEe4i4aM6TNhA8eQ
-oz5F/qHfbQf1wthAJxJwwpe8zD9gzkTfL5NGB7BSW+lRVnFo3R7Njumpn+bVgtCQHfPL1AwYYME8
-+CM3vSC+GjewVbpQdfMgZ1XeK7cbH+zFbSn7lT/EfcWSPTjkDRYf3uCYtTdd1KEMsaeoQFX7vsBA
-W4Ffn1+1A6DvSk2c3O+5aJqSQto3W37ZsuffbMOPRpTIPLr3Xh9t9B8i5P7Mm3u0sesJ/JvQ6xNn
-ooR2EoElrz+5YturqAyr9J0Rrlh3DNt3Dfr9g55TrJ1nRwT8Rw1lI0kvw00H7/9hw6Gm46jVQfNk
-1pBcIBRCJ6xpfGB1YnXnnAAMPpAjF2TGPbSJ1W1bIWQxYTC50KVOua3rXunkLCM2bM52wYj8/lCs
-SPV+wp3758OPNDpUp9pmcCCATY9S8+VjNQDDlkdDEz15H0ynIXibnHc1QBhH7fpH0KEHYy+MY+H8
-pyDD/Lbg+KZ48iruQA8bH34MclLOMC2owdzvPxFqPhw3eyAHB8TfpguymEZjAJYnQ7itF0YqW3zM
-qv0GIts7rzke+Y6tF5uw7bFF38+30d6+vWh+wt3Qic95kJlZi+rLPdTPrQIxlMYddpm4hdt3Px66
-bPVEcGmloh7LSjxynLqPTi7uvVEL5vHcqr5bzZk8fOzEOs3sB2kJBQCr/wJpxZohKQ/07basUKA/
-Xl/xyfabehQ6iunu+lpZgh0gLhB2+V1SusB2g000Wr8SgKZIwSYAqS4E65LU3obhmDp/JSGYzlwe
-En7CRRthyy3cPq9dQl16wd5A1xZe0nwUmP0m8lb2BDNjGR0/BRycNhwilmxlmXjb1f3GsCuYC3K0
-Qyc0crT74cfUuleizU9ELdjtoenzz0k0YUOelxEZs6jvIUUv97xc3Gev+Ll3AuF1dFtmGF3TrNae
-jUYTnLzpTZIVYVWyCy79wEQ+BM9KhJgvjJ7+ZgOxf/1jHHwoBAISkICIY5OEhcnGxH91fP+XR4cP
-WtUPYqwi7C7CQWS2o3Cyh3swM6W0jfBPrnNP0YHqboIYTCb7nuS89+NybwK2w69a6AFq79ic+v0+
-0b2zXGrBtAnAi+YaKLTE2j278xZb+CkaPS3qge5bn9+11xnXs2F9dtZUa7+ee6+6WV0OuZB0VhAq
-FYH0gac2xp/P782ufrT3J9WThNWB7dvJVk6ctDtIJ7/y7Q1i/qup42dWO+mmOu+O3vxnE0oE+fRk
-NKsX1bqao+l99e4fX//f/+Hv/u7WL7K7m2Z193S6uFst3kvgjE7HxE0fkCHPb189f/PyydNXv21x
-FzgdNdWvPjW//jybntrEffOlNTuCzZJNufdIpSTth0ZCrlvy5NYuOqX6kY4xQpZ4GY7WF4l4SaaA
-jfsmQFul1mTlO1m3b3rfvTkoL+uzDf4ESzg9GM/uSbKRq9JHwANs2Y7ezTOKqmhcNlxwxS3UbVaF
-jOXYwA2C7TbD5dvzyIhgazSHVtA+Nlsacrk67Oq1EpSedknIG2TgFSNniTaD+Zska1LhaqrYkxbx
-IRwbpJvll7vCwM1bNWVxRZyxakVVQ7riUUbWU1wPCZnjVrq5cKHtkOFUY2JCtgaLqFtjBQWgxHZY
-FHNt6T7CGbSJnjzBQIKopOJitwLwSaBMup0GaWVzk1Y2t9bWkf/Qo0FWfNLL7nlGQ4CtXCILWtTB
-Qb48yryfKF9FwVmn47ezKhD6FWfqU8axCnMBj6fTHHOwVosGjexPkScnKjJEyofQFMhE+5MK6Rrt
-DQtmsfRmUhGEwvDIMpVM3qSQfUFAKXqw3+Fdg8d1xWoNb/Qf0l12WtX9Val4yeXT2xtMuY6N7gpH
-MCJ9o/czNQUQZdTAVfjbp89ev/zDbyXCkwyLvvasfqbs/L/MvVuTG0mWJtaSTCYZpF1ptas1Pegh
-GjQuIopIkMnqvQy2s7rZvMxQUzcVk9OzyspFIoFAZjSRCBABMBNd2/OsX6Bn/Su96TfoJ8jPzf34
-JQJg9cxIbW1FZITfwv348ePn8p2Pv37/32AGViKxj2fn/8+/lKS2FNMHAvh6bz5pbE7idTW3OY/h
-xbz8VC7rNcbe7rbV0pDjFsLumLvsGjM7ppLZxBBsh7CC0z/uT2CeoIlmd81Fmx40h4ejIZcsO78t
-MTrS1DyBbQvpls13cZZj9GJdVKYW0P3JV+SKf0fJZRrwfN1wMEQ2m64wJNOI5eapy/LbU62iJd7S
-MsxtL5GbF/EmoRHDV/08vSp/LSSNPx39anT6fNCTUEEbGkgz0es9ghTDiIZtJhmDKEdf2Nt3g1mV
-kaAgpbqWMDSjGkhVxHnhpkcvltW0YfmuLyX6iNU8msgfA6pnCEaq8Uznzqcf7udnPw24wGAsPfwJ
-r5dmQGazNGc/cfDhdEYRtnUGcFgkYG0gjtYtLxQcNNu5acpwNPNjDH8Mkw2s66Z6gOjSVT1oMOkz
-0QU1QqPHZvDnmB4Mif4HRsybV5tBhgUmsF2A5Y3pKfU34OWCRtb7sVq+wdAMBryn72H86I+zra6r
-ZbXdS0IjkiJPno+eAV4hhHIbEdLR1RBcriE8ZgpL4X0+Jp7+UJZryIlsePfCUCkuuPTDHGmAWb4z
-HBz+HLrHINovjbTY+ppCff3X3DshtAM2HGh/tvX6ZAnb11uvjdkP1ByHTUNLP1mOB3qeegayHf8P
-Z5mLjuWlu7IMzHhQ8EiVH/HLsRRS9T5Uy+VAnZFePXgJv8dYStV6U28+lHMI8hzEtRb4EuwJY1WO
-av9JqIfp3f9o3h4DaZEKjeWxGsCLdUW7b+CVdI+D7kwTDBns9/h2Vb3k5+5DbOGxe636/h5i5VC+
-HKTqqNfBIIDjHbXMplxqjZtPq/vZIFwrYKP4Zvzu0+r3L19SbP330Jdfd7dRK+3VNW+gcktVPMSS
-3ZKz7tfw37CSae7FDj63faz43p+iRwKiyHhhhlc8hcP85IbCnUF58eL7tzSd8OLAdErHUDS5a0iC
-T5ZnGXHMZbx67/CVrhbX4zKq1ksccJauhUPEEnqfwTV/0FWDSqgq9nL/1nDjQaqKX0JVxYy9wJQH
-bb25EqoaxPw1pEMZtE2GLuNXZaS2QUuPqoSqh8nkxZjWDBL1ghKq7m4V1Q7qRiVU7YmvNxx4Pdv4
-h3FQSjcAkCYcHDEx59Mg3UBYqqWFQThpyRaC2tYBtqO2V0xXjyM3B+kGEgXDzQ6UhLCrKPNBRhTy
-KKoXgjDBogj/dQzz5KKp3V6udnfARbzvlvLupaohMPiDVA/2pWazcEWYB/tHKvBLVXy62sdMRIrD
-S13WP6iDsv753FjKSA3DJwgjPP/RXBJ9WpKy7qWq8Ttzz7JMZBDU8F+qWgqxotqGtfyXmt6MLF4+
-tEwov9SMAZRTk5bi/NLfDKj1TK6vfakrmGsdXRQGiQrupaY6UNIOWtaCXuoO4BJLd9dB3IF66Q2q
-hrDdln3AL3X5qsHLfPqr5aVfoaMDfqnLG65d3YGiJTVL7mVQRSA2B6kq9mVQSR8eUaXw3PBOjLBC
-it3D+iyUhBAtHr7UEoXZiXCdTFawL/WQWlciWga9Bl5JNf+OuVar9W57Uu+25p/stlzafLCDqj4s
-NolYW6cYKWe7T5YfzabrLeA8SCEtYJhxvv0uJQKpelxI8xuYiLBeWE0Kaenp1Ut6Oeio5wpp+W47
-j6uGNVWhZNU3rwaHq5pC3gRRMpnfQ1qHzcCvLJlmMOfDZhyU9U6Vppogs0uMPmhFlfXlMpcv576a
-oyDf0kKirD6JpnD7Xm8GqbWTl2NbKiTi5g70FCAd3JXTVfZwt3x6u71bZu4+QCRtXhxB09ivKWpq
-p8gaWg6I06uC7/VqTW/C4l55eK+Fiel9Z3F4r4p/K5qOQbq4e6/5VWNILLUxuRK/Dy6myzq4Fz/K
-zCOMr4e00jnoKOa7mZF2BrgWkGwM4jvh7xnAi82MXJN9qqbi6auc+9oXwnSRWgW4y0M240Gi/IjT
-HI9tIX0v50EmK0JntoAvKcnHDJKVdAFPLikRwy1aHVWP3gfnVWelm0QlvFmnyMZ+Vnj1Pn/13fvz
-QXsFLuBXef3DD91VoICusm+QbNqrUAFHan8qeh+/ev/fT2yGL1aF/+b9//QoVO0+H305+nLQ+/jb
-9//M4dlJhRfvAWipRVWQ+aoCNCV//N37fwHNhHqtjy/P//f//Be/cJhz/KsGeMx9E+HGodnnvlp9
-+RzjyGzSoQYcs1Z4Ec8GA8xTMTAMNYHjLhYStIsezJVBhhIYbb6uQsdGAA719Xt5fzttPkDx7Omb
-7On3b19lj+cQ7r+G2PCUwaazg+9/+O7l63fvJuevf/jm7bcvzl9nGpAVcTEJU+CMv2dkpmaOIQqb
-Vbn88vnou3W5+p7GmLd6V0TdMNT1MFtXQchgSzd8Em5L6YvGNcxOTo+q/3JZN+VfYR2uWgQIZck5
-qomQcHaz03/NCEhBQSBUXBFBx7zeZ9VcpQRxLfc+vnr/z2V33NUrw0tRD/Hx9fl/+c/RVpSpp2IZ
-uqtnH+C3wPlPQYc+InjLgJ6HsldopAxayQm2JhPVeL4BaFWLKW/aAjsRGUMNp7+6UmWvrjJuAr7x
-U4V4LbclW+VB8Cw3FqMZQFrrebXYC5InJYhE+1BlKkLMKVgxP1WbejUe95QV23Y4astOOEQXFjMZ
-Cro1rDsvl2Hdw5VMh4D1nrPhqyUlYtAN1vjcbsyX594XASZpuZqfBejvQV9RtSM62zdo2OcOIIDz
-Nl1ydjuvNvweC7ww5IyrWM04BAwxd6/LbLea1wDpigCxWyQZpCO5eqCh0yarBbMOAUeXZkcAhV1d
-8cCvrigHwxTUm9DYvCQZE2z7i2xqXTyAYvxkDlhRBoQX+Lk44poJfgqzhb1TiKSMY1Vn5CPmg8Pe
-4RRgZk+3OQQXDT8NEvkiqnX1R8iDTFMG8+Chp9HzXm9Vb80gIEATyR/SOJGjkmrfMQ4qhKYs3O4Z
-gNNu5qAf4z3wFKgMnKie8npmM8PBbsqupENRlgRuK5UCgik/9Wp2D35uvguRn0fgwP50w4BvhWmZ
-ykIaQoB6hrWY5bm6Mg2Zn4Z3XF1hQ1dXQ+Cj7ELTC+BvHDUAQK5zwaaWBa+vfKjM4tlZQoa+nH9C
-ZJJEWlpaON/PhD6G7NVUldBZTMEkLo9Hpjm4ejPludFRQgPbr3gtsPH2U12x7d58OyG01psmW1Yf
-SkTprWbEZ59iGfrtufnYLCxYAPoJznw7BZTXlRx5rJdMPA0eAak8cXrqqM1CV2rLLusOXGbTESF1
-UBDu7DJFROgfwGSkKScAqPAXCMBr0qRjWOanqt41y32KioI88G4tozwh/C1t7sUBvfh+Ti0J2Q8s
-RTthB8Fv0TFZeJsczzZaG0Mi/iLG21p5gJDXjF0Ys6XJpdebQY/16C9RfUES6ogs1UeY9xcSE4hd
-eLSVHv9h2vIpCr5ryItlzyPYZuaT6xJwj5g+QvIAhzOO4Ipylx+mC+nqeIr4M+aRicHNp0cHIHfo
-nDGB0BJ4vwo9sHiHzkyfjNwHKlGPJiybH+F8XF1xgywVkF8mJOG7NfLBbAvg9ptyOsftOtttNtBw
-shOiBBsrCR5X1DJWtd1m0znEThrBAUId+J0dg+vWW1iBKXVwpF6aVO4H02yx+6+SdL35lpbo3ye2
-7hNV48L3iSWnRt6YrlQHew2X7nOJX81vvAe27ohtRtHWtsJxNE4ZBP+rmU4grkqSayOU+oOVyTIL
-Zl4KPeEtnv6WjAJ8N1oyfn7TycUl73Qz/VTyUMJ0qbzbXAH2+YWfF2O1VPxMbUggGfwU9cEkdbd+
-Jol5HsXf1xu8CZp65pCvDZ9lDyTx4ptjQzrS9Na67ekkH35OEpZCde96lpwwmPS51bJijf625reP
-vytzDF0Osz5+eBhahMOhKenieKaH6LYCkwnyeCj7wizCc3ucO9E5w5QGmOKTdX94pbVVsZoRuGYf
-TFkA2EAkUkyVAtkjDDepzA5n4a5cLECI362WpcoyvK93cPk3cv+mjK719vqEHWGMvJ51RGYKZCeX
-Rp4lgOhU4WKEH5iSUrtFMy9AKpnvNyEzJGUTsxli0A8nI7R/FjCNzs9KflIyFEwda9ztRRxkcDCi
-wFEnZJ1FNPHpEk6iPfPMOQSVgKMi4SKaFTVyewWpSlDNe8ykBgO04kzykI+mVm2vY1iYY1c2OEkV
-j4SCuEQrZ0inNLX71ZYtWrkH3jQ/vnn/z0RFdlOu6A708S/PX/zXpCBj5S8yNLOVluXJQnK9nkAm
-aYJjYFUz5pVh72vYX04P3LPBPdt6jc6buRLhEVOUeTwlZZFkxui5Z78ArPUEPee4ac4VNZz4tSkE
-ZZ968TMVpGO/NvNTzj4YiW1zdlq0JEC/DmLPoC0Cf4AY9PUeQkSiKAkAQ6W2YYbaGr/jCyQd8F/X
-9YfdWgufpEj8gIlOc5krc47X9ZbYuTq61hB+SrG0tyP8Iy8uAFZGSsvDwockH4wG9DUX0sGlEYUu
-Hkbr3aaEb0V5ChblAZcDGrl0QzNLOGHFnV5EaQsT70ULbbNnP282M5emFrQJXC6YPLP9yQXZC5yE
-2nbU3nhhg9kXwDJyP73V2hwu0xs/H+V6v6CsE64mRXwOvjCrHG5mCluStSGe6laI2grAfGTEptIl
-Ei6U0aNTUKxQkOZY4i/sLPO/Emg33U5dNjAO4Jjv7taN06c+LxJFMbzDBnfAu2H2F6mCHPdBsS8c
-9wElvLLwD4eG5AMMjxl43wTve8EH8SI0OHsSF8iDdkShU65gQZWakMqOdmvTfJmnqNEbROtUSnYF
-4m4T4nsSZSLD9Cc8/gpbjjbA3XoZcScJJCtGhuPA87ygvTeIozmR5tiGBXwOGvRIGZ+a/444K1Q+
-sDGdg2HmVihVkIJqTDH8xiB9VtnzLBjT+bxGd7Mc05gIYMjNpt4h9Cc+BNETn0D80fXuhry1OcgI
-X4xcO/2TE3u6QIDzjLK2NEaqhoxDrD6ivGnKmNZsz/q6HgRFmLvnWR9mUuURAqPIWZ9z1LmJtYcR
-NZBNt9lN9alcsWaaGKdkAGlPOSafLwNxucpMIyg85GqUNpOEfaTUw1I/JDyPbQzsufnv+Zx4t28M
-kYArX86fJPESIxxnUQz8aGuIsgHb6URCKWxQxaUrqHSh+tt8ArZvirjwCD1W8vA9k9Wz3se/ev9P
-wExsffk/vj3/639BgsW1+bLVyRy0DA1i+jNZ4e43FU6a7d48hN3TjHr5yyL7oV6t9tn3i+nKdH97
-V83NPdkPdDo5yb55e24O8Bm4WM4TIU79Z6Pnhml9et7vmTeYlhXkOxW2MPTiES57vZffffON2Twv
-/+rFD++ghUf/vi82BlcwSm+UiIam85tj47O75kadL7b66GAlX1Dle7EnTeILqmJe0Q//pWkHTDDN
-jc7uYBh9e7Lbx83Y5lTJbc9D3deT06Ft3Zph3pEnwe83EPR3OGKcyCTS71JGJ8krSD/aUwK7AGwz
-rnrRFvzqYIx4N6vinHE1UNSCXo8aM7fLgGvBqCCtx5mfBjTRjbQieWuhKanM/7q2+V8vnfAN3U3s
-pJkWuntsaBGaC9vt5YWpdOnl9tiWm5Q9a6bzTATthZ9yoeAY1Pz74zt68qFalD4c76/o9p3zKLDg
-GVUPutlDDr+AJijHePCZXuvmVVszROCit2USt7zjIHXTloFzOtTk6r1slVdGakV6WFWlTrVqjhaU
-SJLqoQVh1a7cHj0CtXxbfyhXNpSbE6FWmJks0Fwn0w3ji9EMnD46lUnJblCMVJmkJH1wcB23Acs/
-/SnU0c4ENdW88lZUuKYllEAPQuOJFCBC88n5dUPCkzmXPgaG10rF2xJwAYAA4HI8SN3ABTHBG9pl
-zK21gaN1PHrMK39W0uqV5AfMd2YRZihAcWOPN4PHbpcVRXoiFHPBH5f+IrVrYux3rVoa+lmDxyZx
-5LTaRw+7zbrFXdEOTp/eJKQpaUAdkN7R7Rrl/IC2UeS/PjYD4RB5bgLCjL20NZrUMQGwmVAbfJOn
-Gpe76VCuNmpDQvmc8tBRo0WQkWRV3gcas4BIRTNFcfbMqdLqKvelAgqQt2xavNykhsLlAno7NJzW
-jYS6XFPzM2jP3N62e7s46LWYojlZO08ndewkuGxF0STMKCPqtHsWPmNBjshhkZyH3ap8WLPnMiEY
-qJElpsQcnltK2QCfDhnJ02UmDDEFP5le4ffFyfPxZWrwtk77Qv/sb2jtDwbWohWnIQ8AEu9xM0Do
-Z6mhL+3t5IBfOz45BS0dqW2KFKCKj43qNrNjMnZLa/ih6+V09YFyMPoINpBUvFxtLUMo4nSOiCzV
-ceJzGbyobkCRtE5nihwfmaHrUbTdK5IyIXskOAlfDMKm0Jgkg/BlGcM3Z8As9Q0vXkP9DSin5LMC
-0khG36OHA4sFvs2X/RTDYzWzKXcKyxp8ZDQF8hGjsMdHASOmHc9zCmOsGgxoyIsjwPy0cOR97uDM
-XIpPixTp98dZX7R0aeqno/FvoFU6GpPZeNz7zzA3tQ4YRpUc8RG9HcMZkGJBxjB7GTdGa3YtXjAe
-ZWL9ksw7kYdOk4NHCum7rnd4hncNqxnwRFG8y+VeRR+bnKu1Hh2KrE2xJ9lp6t4cnupH3KDb8JK5
-dN4lzRXHAZmJxprdHzuu2oESIfA96hC9Oz2NuP9AV6J6PHxRT96P1Wjolmy1NS1X5eNGwHa/xs4K
-ZBqIFBCcdcIbBafVbjtaZrKPl0zeF+NTz3IVsevex//l/X9nA1qIlD/+9Xn2F7/4BTrVTCaLHUQF
-QsZ0UqreSGB0k4BAZH/OIV0Nqz+WyoTZCb83W+8FddLh2PV6lnYtkFJDfh80OBCA+M33+5dvJt99
-+/V/mECS1mmTwb+TN1+/+MteW0CLLWF6fEZPSKIiF2JRwBEAnKeaAP2rEQLv7nZb9OJit+jbejkn
-t2jGPMbwn8VmeoNOSc7PpW6a6noJNvlqNS85nXfg6C3TMat3K4IHe9amFvkCLYwAYs+JC8axKrNh
-0gjSm8xhuqkWMrCBDMkcWb6rPh3XQWl6GJVF2+AU6YGsn5GOAL1WzZv4AIGniYFaqcoCrUPBIS9P
-0d0O/B75Epo97qMW8625C+Mx0WyLAw1fPIgYg+jDvs338ojOzNbjmOmRiqU/5nNYtvgxdTMAl00c
-Vvp8vr+tyFywTWQZD9qxpUAkk1Nz3IlMG6fOS35I4saS1nPoT4d4RNqQNH9CrmfzskisMKj6DrQo
-LeT2YZHIul4+bCkmxZZRm7H8aLciwsQdcfjqfXlGtYLhM9fyfa7HHfsBG0HXvaJVZm7Y7aawvR6R
-COGQwtwfBqrjq9W2OPDdpEBvX3nTqilhKK5ci3iQk5hzWrQ5Ir81K/ngkgxDtQaMWYYjE58g91nw
-LSzX/aJ1gPjFWNN8Mo0CqY1+QlpTNTnLctVq9lmKIjkmGtUDi3bUhyEz1c6qvLdA+nwSFfFLy+HV
-9GJzY9PaZTgoW005s+K+TvgjuipypvFZR37IZtqXEkqlnZiXJcE8qruxaequ/lTOR0m/TffxcNAN
-7cS5jyWmheWyX2fWcxmWOPjoFjZFVZ/okFFqE9r6il8n2jSvW1kfVD3RLbYvll4p5c52aLHClVob
-kWNjRAJxOL4uzZlTng3MGYxemviLeeIgG2RfZL9KL+nUSCfrPXicoUdutLi+RZ264WB77GiQ3aOU
-a9YBx2MFmHBpqaqbEvpbJQhakHjDr/HP4rgNYI/hLKdPNtcmFIetTtdK0Fj0smPr0LD4zyeZ/EvD
-C3hz+0bis4TW5u99GcD/lwZGTZvJv95jRXLLoKcnJESkV+MzGcoFT+yT46a1fWIESODOTY+oBixE
-F8eUJueJ+bdtA/bu7DaTq5TnDY0+Fjgh2MXu7toQWE6C9JyuDs+KI/gQp+hxA9+AO3YejbtI2Y71
-nk7OAjX2M6YiVydFhsIqT0azntJMZHfmfnA3XYb8j6duU96AKt2bQeDWjpBoPKM2F3vgkPmz7Ndi
-bjMM2TLsInVv1wczV6l3GPSAs6COYnMDG/qrEM0Z3NKUhl8fElbMkfo6wsTbm5w2IREQZDdmfOhJ
-G7TvqImR97lvF/zY2gzMpK6ymx1E2k9lh1KULxcEevS1i7fgtmMEeDPPqxN3hI6y7N3uuoEo39WW
-+QCtITpzT4Oc9vflJtWdBCIbtlOR5/G1eX9nJj4cxB7xiA1J7u5MwW0NtfBWZ5btbmfuLCQaJ4nk
-Ufa3f/u32d10f02YuIQ7SzqBDbS13kC4s7kDM2SDbVA1QVS7QWTncjsbrde/+Vl8jI5bjwDohZBB
-cQxnb9AiAPd9CdSTu0ciQonbgTdoXqahGpqwjQyz23K3MXfMCsIp9oEru9YLqPjQ9GRHlwwLaA0O
-YeGNIgnsQc72hlQeJuhGjCfycnp3PZ9mD2ObWOBhaE7/Zj6Iswokgv3C5tjtsdmZu4Tnly+fG9S3
-CaT40jKyK1h09hvW60hd8sjPOfUErtPDrP/Qj9OexJ+kK6UUpV3J6P04389IT3dQx+3SQhzhlfbj
-ipMyJi8pdnIo94b5adXhmFvBiJ0BerNVAC2nN2dOUzjiljYTeBEXn5szaFKtzHW02p4Z6d9cjlaY
-UKaDP3OTc1KyEYMeYUoSHqdwYH9ngDsQiPmGt20BL6KaLl0N4qZzs9WX033ED5mynqIABEjlzFYp
-5s1sYnC+xDQ4Xeem7Qz957WnqLwptCf/szhK285Ou33WFaGQP8QrhL/zU/CKcgP2DXqrobVt2BZG
-CwGincgAh97bhMcNx5n0f/14fgKVTekMYj687EKs2Ew490hS8LCof3lLzGnCrUpmm4JQIKsGeGLO
-v0I78mKVdtJI66FSbW0y3Zydn1TDLqVeatdBa4aPtLMqSvDi1OTMfdy+pC05xL0XsaN3yLkSTL98
-YBIxBTFFSF5cnF4GLhKb8gTA8MoG9g4xwQyx9zmFIHB2OKsYAIvPbD95S3OTUFKMywd2fo00veYN
-Hc7xQkhbNgFu1v/CFoeJ/I+BTjSqkCPTgPA4y0aMQHI9BaU8fhHkkRhL1nm7MX0HoPIeJ09NLapj
-aWmlyyJRSUZ65j4yUchuRfs7UQiANqkI/EpI3lisW80GBJP9K2cOadUezupYM4p3xAcz6YECPHU7
-FF+7ICkN+B58dZZ9GfdLUuR6/+WgsVAhVgMMq5IXGfLKhvK0hxFPCqkE9EXZulx/+ex5pjIPQda5
-+xIOoMGWxeiORrZ02DDNnGBQLYVTrkoSkRfTDyWIbEA/Md2ayVI5lfqT9R7aEzz3dVPu5jWnsOrH
-Wn0OLpKJ4AQT1xgTdSE0ehl6twW1dSYRKAfl7+KR+tmZTnuJlmBxZ1Mz/SP8rzeC/HSojO3NsGUL
-ObrqPeo9yta762U1Q5C85tbIqLOdw2ZqTImeEkomEf9LyCVI2s2Zrxhok0oCKUSZ+sQw6e7HzMsh
-a4nZZ/daBhl6aA4QXQLXa7r7QcZOI2/gfLGwYU7h+r7JIHxpo8WzTQWpTAO9ENkTawrFVn16XU5X
-e4Bl2pkN9qk0/Iyiejw5qfFNjSBToCk1cPZTWn2Z7AlmMnx37nlAwSY1C7YDAziraXZrvIGYHYWY
-ne/OfxPKnsceZY2/MERAnyffNO6OqHPLUsJDoYK8pXMni9pfQYRcT2LhbEYBhWME9PODVuVafIcs
-1w6uhV1XojAWaHusVNBEQIaN69JBkM2taqjfdyCDsryeKIFUgDFKKNVBfgccrYZ+BO4UiApxDl5w
-xcwDluTzZmg2CzKZJjkZzJxUiCSXxGD0DQa/V7mtC9DFYsX5qzwJewUD8vmjPWZPTr3Eho0fOt3q
-STUZuiYgbrex/gJJT62337U4TkHIfgIQ034QLpcXpmS7xVeoMVJyAmeuVXtYVGZgnNMUTF3IZxAr
-ZpTEiPsGX5gAFKW3zPbtEIMVT00UT5C2iCOafuAmrsqOe0n/Ll7ItHoo1G97rpW+ftt9iOdDI8xK
-pkv0uvZzIkcM80xtOZdAxH27P4PbDcV4R9sqmqy3Tr8XkJVtpP9j/3e7m5u9COcCNQA4IhWEWezW
-Nxu01g2FtUBoJ3X4I7OQmJiofTI369kRPsuv7UzQPFkNjqd+07f8KlSgjiM/fUzIFzsuaD/T8mFt
-dv92et0EHgZN6CEVCafxzrTSOui40Q5ygtruWELzPR8SaDDS0rPgW8/Mo9h4XLGem3syonzgGANT
-CvHNGKNgBRuuc/TEkesaFgguoWQfBY1SqsZgQHx3g07oLaOIyVuKQq3RSm4tB9wdvEqTCVSbTHpx
-4/CphiOb/+cNeWxPCvO7dL8nNnKp+iNsRo4jplimXPqJtS7YXPaVJYIm4YWA62/kj9crhMTEhAcw
-dCPuzbvak5UtOr2nmwuqc5KdXrZTuPI2tURONnnwaR4TwbV6Nie6veBr+KX5sFe8f2PnZ/4C63KP
-br2Ru3gFk8+GL1qSMjHbJFW+wjuZcAzx9AVxknZBvUhUsmYECZbLq1E5Uo9ZN1Ec9QXNRXXp8ds8
-ZLjO03F0Dj/wofoce6o/yl7MSTZnww2iN8IXNqUZ4OvRDSovpyvuCg1004bxYkceAxBvJBqiT0CX
-Pi4GP7en1MSa0iZoJJNmQC5Y1YCDZjGWUQ9yXYHrqRgU6K/Jprq53Q7lr2W52PIn8nGPLTdwXX7G
-437YWknACl/EXE5Dv+oJwqGhax09ODl1WgUZItAi3ljArmhmk503tuqmSmBmEywBGjs19Fz1FOvp
-CJbU1f2KGH8wO8luPFcQdPiz9lFb/0LXuBQtj9nTtEv9rvWp0N2bOqW5SUj1e7hTZTN72K7ocpCu
-1Wu/DHgLnKz95FT3GpmkrHk4BFlTAGUQxSNtq27cB7h3htDlr1y+K4qbkRIJLyExPUtdS4lD9akJ
-56IzMLw70zQ8K1IrxF5M1nyOK5+XKwtZl9mQRPJ1CmLWOOM5bXLDzvraZJ70alMGceYEboJgctJe
-1ksnakifULpPvGKY9RcgCDT892hCf5rnNPa+w3fl8vb5s8LSAYJX7a7F+b4PKBtgfwNXcfj3up7v
-4V8yFG+gt369AeGqjyNYTZdYxK0jY0f7fXMXHASoiQGLt4Zl+N6NUJZdgxNntTBmKFXE3r8CfEaN
-yGQkG+JDyDUUrbmlXzMLS83zl+5K0uE2wZeYwOEEHiBlBCI5P41lcjiV4XT2rBrqitVhe5U2Xdp6
-bsxMDTVhrbDD7PTZ818VcMTADySZF+/Oe0fGJR1wJ6mX8/Z5KdrjiIItF/bSddTq/cfzwJqPR1qb
-PKs3gJyJ2h9TfcwlTmDuTsTogjIeGjKgr8aWgR3inH4awHYkAFFUcjclQNlvSx0wD7W2mEH7Do5J
-UDFRbK7zfgPDzCqBrElfjdeiaPWtl6V/1Nsk8b6f5TIR5phLTJ7wRXLIbcBBLu8/6hfJ53j/6kcq
-qKicYDL0i0PenfGNzt34xG2IVnOYYrmfQ3eeA9if5/z15zh+kRHJSKXuiKbz0/BT6NT7IsFuXYA/
-qK9iJiUxZohf1jfVDCioXi334Bw0B0x90k48H/0Kz0JM9s4VT0eodSIV6Jb9j/gP6tyJq6BVqdc2
-qQ2bCmaURtidNluOTfH9+eB4Pzn1Hdtd+tCUrsGjX/I9Diyn6MtVg47fXVzAqwqt1jtDdZiBAmA5
-GT8X/apn002EDjBodmvwuuU7PHniUkZD75HEBtnHxzjLA2C/GcsUTkk0vvcjxUifpqIvzvi2xz42
-5z2Pu+TbW6mPA2sPjmZxLIBIl8rK8HFXzT4Y9mX+g/5jwMBKa3q2vnUcX+o7zz4KacHciXPaBmzH
-NiTIZ2sfXBNBNQbqFf8Ao9uXg0kewMZ+eHgwt+iBV9DqHgc/AlwkHotSvwg83Oz//mOGV3Lfdpjw
-A/A/xPYWac5zZZkeZt99KjcLQ4f8pzsri7B9Xik1zOdqC5ak24g3oOwuPB/8vQXIVu5sKJ6cxvHU
-zmsLf6Q84gXvUgqPtEteV8yLd0wLIJwz2huZFuKLq7mojImZsVs7EtPjOfqvCKsAfJ3ex6/f9yBy
-kjK9f/zm/P/8HxGZrcep33EmN/WSZu1hjUGlhMeIy1wvENgalbIMhDjq9ZrSEMB2ux4/fbrer6sR
-FRjVmxv8+yk13uvlswLiDQG87QOCtw2z58+e/UXmIbj1FIhs7cVrdgZjhrnPTkfPBxx5Sonvcwbx
-HPJ3wUYZohx9BvDAeaHOLahSYTIaPmL4W4lhu7khuJ8qQD43ZyRByCq7NYYe8ggYUVNhX+psKVgZ
-UPwYRHKgpX8w8ijFIcGBo7Foeo0WkZw9B+cXrgEwbi96AZCx6sfOmwY/xQbcG2iDqozU445GxRIf
-tWlfeE3K044WEbk+bo8fI2RzOBlrso6sMU+AdEUVLqUnl1qRDwNHHnhUJBaGsy1mgaMfDofeed+G
-j2hVBMPU3ZES39qXlDH6muVao2wy3BDfsoneXqwr2hFpWgfERXMELaqHM/ue6J/NTMrNggtcZpi1
-icVB2nX19R9y84jsb1BfxcdTdXDFm1DhycSVddgew0xNlZ0HmH9pLzIssIOLiK2UX0d5vSCPMo+k
-AYGFGLFU4NRxPrisbUvWmR4MswdPKUlPJb7aTbTjQB4CnPk0wT84NrASK31mJKWjXYvwDqC3k0n7
-wSKFPpT4tbaFwh99Y9Ebwnw0brAeijq3AzZD9JLf7nOZhqFt0sc00OHgRI1EM2BA9KiVSAZJNQWh
-N0HgH+zbw1nilxbw88ERgesIpvEh++UZzCUA+m0gIwHkGATSDJvCuU3g0SG182ixgPszY4yGUHkz
-juwMFtoEBkjphxC2MGVoYMWKmdItq9L0RCjQu9bcBEHCmRh0cehNkp6y9Lh8nZNeSeBYiY8Q/RnC
-JI0eNwPGGPW/IjZ6GGkiZHdWT5YmoAQyl2J1XBlYNjV91JxR0WNDwRuiCZlAjoMfJ8LgmVtyxDwF
-nD9LTAKzOSlHjiPwCzwTzRIqJ261Qty6ICeNBmlLmhuEIuQn8rjXhh4WM++/j/X213xZTZtw1Xlc
-6aqft9TCWEdWHGj/oM8hjXbyCNmLhSRMHLKafYJzcxwksTyYuSIt7nka3D4XOeubRYd+ZKFs1aLo
-7IIFz7b2ByhGD4LGGTPdxx9KnpeDX9utn6E3O7myB9TUz1i3u4yR0/wWUtW9ubbHZRIQyMj9y+kf
-K3BbNPdcyHFH+FQWnsf8m0pGBx+4W31Y1fcrLzONcHfpNc3enVRBuOaBCy1JB+GJ1i0n2JZ0EeRA
-iaaKRPQWiIZfUCtF3qFGjyg76DNII9OJ4wS3axp36AqKDadP9pTtHhxY98PMK8pKZdQ/S27Npk22
-uol4QXE4geWh9HMWE7RL+O4dYknUyhGowC4hTXIlDq6GWEDNfIIU45x6T+QiX20J+cy8nNe762V5
-An2CFvYW2UNqw2ugQ0ShgA9EQcvtTb1f6Y4U8sZHsCMBWGO5ZGdksgOxZojvLhQzivfReXYPgbDS
-HhAY+Nro9IhbTCHq+cjbOxrecfCXkiThAQR2SlXC7ZDBehGGULLVxBfw3KaOEEhDfGsRhT8DbS+8
-LaQP6CPuKknjuCCwVewMbufZv0Pgs4IdlvX5bxbMO//dhtDXBJIbLvyAdvMwDyDdzCybp/6wH9L7
-zrfGKqE+hJ+NJ+FB3TQf2nYwXPT5qHwoEhdhI77R1/BtVM2Jdx/1cNnbJAYZlQh3LZ+V+pQnZ+aI
-BRlBCrUc1m58cFwDXcqZa5fwoQhHy7OEFNUGxZdgvrK4HoSdiiwV3hFn3IwyEaYa9LNAKo5Dadu6
-BiqZ3ZIj5K9IkHfR+/jt+/+KM4B8/O79/60R7KBrufziQQexG/Z8szh2UNWqeErKKIIJRTiRSM+d
-O671YVhRpOgBD2ZA6Y2wTA+ZKyXig1gYSlG7NuKXuZuAfhg47ACKNgOlNe3hMSG6gNF63/v4/ft/
-CRpqwwHgAB6ZVj+Uc/Dp/vi/nv/2n/ziFz0Rld7gmzfmDbCLT9UczFTZ/RQzNm52cMDYJOl4FlFT
-Gbfck9iTGzzXs2rbyCpwAtZmOwfAByhjfpabDRhZwDtyCq5wyyV7GZsj7WY1XdIVDCYXTAy7ZteM
-aGkx0qTEkHpI+jOvNoQfgIHypvZ0RTpvBTuYVH/zz7vpprl1qig3Cz7c3+u/fXv+7vzF+ft3k9d/
-+/L19+dvv/vWLNeXbQoYM1WI6diwtoVcoPmPFWA+Yc4rL7YX2IMplA7pxTfhZYRaTVfgd7F2xQwN
-NNi7lf+YS8M//gvbEP3wX8oSnGXulxdwMbr7MIdXeZB05YfX53/z4mtXb1Sumt2mzAekGhwExd+d
-v/ru/XmiOFFVovjrH35IFzeUp1Go1xWnAQV69n0OzKsxSV5gZ1xtPVr3+qNGzH990ZMqz26r5by9
-7gTf544o9F2J3jETdCW0FIb+jOaMvPfcRkAqczt2mF1DIB0iirhSqhEjnaIg9/Y7w1rM9hVB3RMh
-oRhkdTcziRyMdzSzJQh9BC8PlwU+0zcoVeEscz/c4o4w58bgXq+lrTNaLHfNrVqexTxobITBW7W/
-graUubecRmke57v181yKeGjH3DEwqbPM/XCklRgsNqRrtI8ISpkRPe8YkSliU9A5xfpCRkHbh0bR
-v79WtnrHqWyQQRogZKEIKhHx0IzgtUeWB4Vcq/0XRpN/YXkLBIIoflK0VF5wQizmy5yUj94VqXCq
-cUqAhphiFW9jUTXeYnR7rJGk9aKeuTpEw4N7Sp7IfuHNMX5U6nxwlJHK+MJUG6Z8UcNJvZJJCt9B
-0lJ8dJp49tx7NkGJxQ1YsZv7abUFWcLsNGI58KDcnJla8MvwN+3XXkEmWcyqRke0mQsqnwtPBCfP
-nh/2bUtH1Gg6+f3bN+/e/uW3L75+/SrXZYvUIotkQNz79+evf/jGVPbrAYb28393hFY5as7Nj9+i
-79xDOojXD+ZaDuT1Zgo4AjkV9SdnmM3u5sPANSj5vwE7ixjqMEKt/GUIohPyxvsAt+1JmCLjuVuo
-f5U9e/i3i/C+ppqwGIhYfdxr3+SaEQ0214OjuYTkoaC/dI7Gzm3jGujYH3D/Yv4BmgfhHxM/U0QS
-P4dqe7q/5GEVjDd5RoRlCBMfMTADkYgl5R9QMZO7hRjyCgwzsaPKYUUdalFBNRzcSSXvsQhDhC2T
-ShUvJait3NPamgtXKrlZ9E0sSfO3HMrn9RnfGvTqUbz7I0htZekff/gv7XKzOdp7qWWLoGN1xvc+
-/vD+n2J+xno0m64BJ/3ju/P/Y/iLX3RdOtydBOZs4eOcoza/quXq+A6jld5+14phjuWlVFSrl0Db
-gFiUL4dy9aDlOi8ftm+/y6We9sOAg4GSVBLmGWyiJJq3MlhSZpYdJK2cp2K7ePNzAS7ua3wHE0ye
-a4YDWGPvz9+c/LsBMETOxxpwGhn4KBqquo3TR0I8sJ2etmn/HVzEO2adZo1L/fxp+4wpo7PGxsKD
-z5q5O2fXe7GQQD4NSC0Zprc5MD09c1mb3RoaYV3qT8/GGdyTKsBBO6XfcMUy4ij9AReoP9kL86uX
-RPbO3Ysf4F2iforzOhVIg+aEElwDzbuLAjl7tbEIskcsjDSxpc0i1+j6HnH3MCkgfkESMrPBNPfc
-hrqdDPGUg4OLgB79g6uEBZ9u9nSnQZf4EcIwrGoZhlk8n4Ouy1m1AETFqd3Xo3P+kRcWdhG6DINB
-VxnC+ADsRAsqKbJn+Yoz+0GaybtxOauNrfLLszCSbMH3YztO/OA3MNjB/fWT8Cjnxs8yc0nBLwLu
-zTv0rI/7M3AZjsVU+grbEv8KExWaBVvwpdz0lXuf7l/Qed0TJxm41ps3Sj9MOjhF6xfS5mUQGHaf
-aA9dSPWBSA8OuSSBXgHOpVx/WuSm+927FLxFmPanD7XnwdZBxouuq8Ms9lHoz6t5tq93pA/gb8i2
-9+ZS95t+EQsIlr4MsfhA2LxUAQXxKqH0Ny8/rXbLJen0zcPvJj+8gmwcRcsl17scePeVxTwyB4Q2
-cVrdQcoPpnW5vU+8HEJ08fYHI6K9MRzqLcRpd4NKysj1dNgr/jBrodJ/wPHrgSjCnNecsCzgg7sV
-tobLOluW01W2Ww9Z8qSoEW93IhgOY9AUSZbkTQiTdus82MVNb4SIAmN25c17U5Yf8medbhPpKf7M
-6eVWkvDOMhh1f4bDtd7cpI98WAQsgdkHNhh1U+PE15vqBi47oQItDfUKLHvdzruLTm6UWDFq0JJy
-ER2E5iWJDf79KXk/4/LC+Bnzw50YdxJZCCrJxaKEaQC8T+B28JNjEO3BokyPETIznt2KTFF1OQCz
-hctlWi+yhVP23nEEo30/F9kV5RNDNnZQA3Hed4c8vTNXiT+a7cFwvLyKRiqwNSmKe8BfNNASIQM2
-lyBP+IH+lcT5k5EcY1nA/2W6ra7VCam/FqGEG6gCiTEg4Qv1CC94GglHWtWXqlsgASuR0KyW8w7Q
-KGT1C1+lecBS7UbUBXwrCEQCb6BP/oXzxy7JpkpCDf4wZ98CjGhlrwVUEMPf3T3Hxi4SZbUbllVv
-I75s5P1riEQN5Bu74qY0Yu4G3wSH/xzPRvwuQRWz1RyZDzPcMIv5mcuiFIBAsZGiq73i876TR/ka
-CpbzN4FIV8QrxCK/rnDoeg/Yw+X0TjUb6g6oAPie0K/gri1fcWZbCNitgLlbKKr4ZoWATOmLFeEy
-mf9ST3w8xXMQpm7CJuM8O55DRkKEwN4AlNrDBtMTwZwW3/sfSrm9XbKAIAJdcqSyvtCW8HvRfLwX
-eQe02dsTHlkju7Jsdifa4LtfTBcggOazZYOmUUCFEptAlK/MY/P5BjGiQAsEKiAb7hpia4plGXQz
-DqcWz1Y0Mj/FGD/+w/cj2OEOtrbtUpS5Pqr/TNyc6CJri1M2IfMFTwPzqNjDWSvkj4M7BSN5oj/v
-3ofobsum61jfYKgGDCkPp7X7sJZ5xZi7EUzaNk+lxXUr0LNzcUYqkDtzltXzHB4piqKmksmEwO/P
-2fWesuIUZkrQFGnC5so9gBF7RiGYdijyYeuD4tA9CkB1pkvQzu5pQP1YSUsgXR5XN+OB4w/ngS+w
-hEmPArcRplj90EtMbx+PDz12bs3esvhvkpzm0ToBl+ISCVW5V9k3OMpgeXfg71+eRd3zq2T39AlS
-ItG9VzmmIEs87vK8a9Afqz3d1Gy3QZN7s5qum1szQCYLQ4t35Z0RmI0MJgJwQBimO6WLh+HSk7w4
-bilT48fRSzrI7ZzZ3JtXOf9SIuo5RLhTSUZ2RXs8cQHkv/jkzatTnPw3r54HcLHg+LxagZg2zb59
-//XXrIKCKs+yHCMTNuUnHXML38g43Ly1qlVB6iqAm2KPzGfD0+Hz8IqhElYDwDIFwVacI4RBRmVH
-+vH8idPeTBRr5Mx88a+76qGcs1ivkJkmoeqO/hSdXiQm1CgmI3YfuJU0kV0FNmB+rCIHDiN9AGLl
-0Gqymlg/au79YmAeKu9TZRZyRUBXqpytHSW6IqBBdUVwhuJC+FgVk5mKS8qbwaWPYDU5ArsUm6JP
-tapciGuPVa3BEvpiDy+i/Ejinia1XJHURKxx3KJ7jLM5qIBPYDMD3GEpxYprpA5EgPaJoQV2E3Pq
-Job/HXblwXTTdmiKIkJnOpLFBleBUFv6c6bWUF5seGfZCQmua966R6LhjdB75ZilEJGi2zrfsf7t
-a0c7z63d83/EtcMNLjMGvhw/e+18fTPwrdi4G4hBwKNSxl3z3Kqx22ujN12iNqz74droXJeoDXMQ
-qdAhDuGubBETzRs+eEBSRjHbqsng4M8SJ38rg7c60SGagzrSNeWhaFCwx2q9dsOJ5A1HzSk6bZlk
-X8Gu9lWbDBhuw0BaaVkNvxtFjG2ynu4Gih/sJkFwAdMA0oubgaVImW6Co9xJYd7C9Dz8Wxbx2gVK
-K0hSNFm9yPwbiF3cgKaCEEAdBpIPyC6aonq6kwVho9HUJfzaQwQLVTDJRcjQFurDg6thSmgneKuZ
-6gpJxtnc47gMp1pKx6NQbxq+e1uDXZNu8SXc+1vM9/QV2425wwIOw7PiyG+0QZCbMlbSL2OJ/efL
-6+7O+p+YYvrV6gTvIvu+J8Gj6Ey3TocsBNkcsB1YiUBUH2VvtwiFpfXUYElu4l7/E9bIbCwH+WrN
-6xK1fE5HUAM21241hwR7wEBBW5e9cmJ/lkNOPn2V4ewD023xs+R8J9Jrib9DoF+KV5X9xLgES8/W
-GzcuYebClahWvYRcQ5B3WkaETRRuWBoMu8EUKV8gPcIWUapFhKLPCMVOlJj04A5ITdRKeoT2it5L
-CPbmvz/vXtQhc8i8hAn/tJM3F4mqRTPnu1tzkahadKGxq56pcwZ+Jyy7/z+SBSxJRed/6kCOp5S3
-zgHpIKkfSphNLflEYkLHaLxb7XIeSfGREJFUF7WNpmOhz/TO/xwJ4R9L0vwHlUWICESjeHg7+vsQ
-QLOww9Dd3IqfLcevk//bySelMbSU1NUxCqRdHePVIeg4UizS+R3te3vKWxO5mendNR33oCCbl6AV
-J5srUZgRBihYHRAZJaW0Iw9OcnRdZmQyhfQNQyKadd00FaSPA/U4mmNEccZpR7LFdJORYYLs/uY0
-Lktz/JMM4pqeQdT8zW5DSWK35vnNLV1Wr8vZFA5uEAF22/oOTdgQBwgheg0o7kxD1+V2Syl2Z5tp
-cwuHOu0VwJdEjEQMGCyX+/ikR0GRuOMXgWGGMSO/Yy06lETLCcoyOHcE88p6e5Cq+Pv7Av7kMjhI
-4Lc8a/RDI25sOe8YPrOjY/NzmMo00vCbPiuAzTWT805WlXKrEYMwJy6Y7MWa3S9Ujl9zFO9bkqW6
-/Kto0rL+LCHav/MqVU5RbNamB70O2znFQhCOw1k2WG0H2qtUtzf49v3Xg4SxOCj11Pz9FB4Meh/P
-3/8P4K6MYTEW2fTj+/P/67+1Lsu+o3LvdyTLv5DCBLbhifn8bzPyC/V6GCSNbgwbOQkhJg7Yxnbo
-8lBDni7Mp83g6JsSE6WtUSSl6lUDiVbXnMZgYl4Y2p+UD+YysUIAhFz9dtI9biwq3JDDhS1EVPUt
-vFvypi3vrss5ABXYPCswbiM0T9fADW7r+/JTuWGAZAFo3d6aTew8OZpx9uPqp6H5z5/wSP1x9Xe4
-wSWh9/a+xlbhC81OnHMeMmh3hTiweozgFG8at9ZGTO4mJOMVtKhs5cP0bm3OqywffaoaI7S/xBNq
-mNFfluDyouBxAao+hOqJPyu0ggwRnqk+MGyQ7kJrM5WYUAOssZzIp4T8FVCPCJ8y6AKDMFeZRZBu
-bjO9n8iu1wsHTh2DQSGITjar8iNeBLcwiJ6LqLpEOWbGab7/jmDrJUuO7eni2eWl/bwlwZPKq9Px
-pSfcLjU49OCnAYFLew//lHr4dxFGj5dOpMu7kAZycnoJMACDH82XZ0/gAuuBlnDGVMbEBVSVD/CN
-z9TfM0Ril0dR2p/4UwMobPjaOPENtwzjS2hbgcfA1GfZ4AhlLhZHC35QHHuxk1WucoZZKeJSPJY4
-G7C8lWaeFQn4FwuclD2BWR6YcX+BHWLt4uQU4sYamH/IfXM6vizijB4hMYzb0nCEBROfDJBA6Y9M
-vKJPuMASMAc4CTLQDgJrG9LfDbqnyMyNm5poTqRVV+JMlkQAK2w+XEHNsbCP3mGRJ8+Zds+iUDpJ
-Vh8lK4UR98eaye6aG3bfgVpmjyXNXB3Z69IecF2xrKrf/q8vrjeQYMhij1xmjzHFzuNnD/OvIPIj
-DfZGY3U5tYdZNbdf0MWTFiqE9g2m1gwTbR4R7WdRnRfUEECe07OUapFLd4K+dGLseF0ySLTG3c8X
-IwF7d0D7zumuBYynLTtNstdk7t1uxDp/1KD1pZHbZHnmsE5lq3Mkh5rG0etvv3v97XnHIiTH9ohQ
-+QE0ygi4dVbPZjvroySy2KaknFdDkg3kZuS3ozLEIxhHiVed/q/N5eSr/qiXXOxOole9uxSxQ74q
-TRbTaplYvJZzR2+lGV61gMZsBtUMfEZBUDQf+VU/Fd9mY9lbGmecjFx6AtS7pF8quKVm4pcacSwC
-hsHbT18kaxab3GyABgQKwD/hEhF65CczOXCBJMzm/Zd9FQhHKdvlHjCxOwFaY9HfNgkOWEHHvTZv
-2+fD7N+gXIScwoh1W5hSL9XGH8zAbJqNtnGAd/eBcaivUU99ksGx9j7+zft/OmGEHsJS//j78//5
-v/jPAKk9+57Q1/EKbWRWFMT3IHVvd2vyStut0IEGCthcqKSWiaI5OVtnMuITcX3weycKLUi+UmUO
-DgrVqw/lniI3BLLGPer5E4iZfbnUOVL1dPmDOSosGA632pvttgmsllw6teiRI1MKob/BwdPcI5Ce
-vKufPLUZTqo7dESE/6Ryw4ozsXkN3Zh/GMz7gDN5G9gzNlTdYUufA/esqluB5E31gKYQXuVvppsP
-5aZVADG0skbnAHMWAvT9blvvmjIKQSRNIZQF1g7/+q+oPgHPmh8BKA81Crg89Es77c4Qf84BDs3U
-1df6AFH6WEPY8IV5olRagUITsqAJocOYE3qb61YOPmrXeKnAAIMdWtSUE6V0M2KC4nbsNZZUgyma
-oIs55xnGSjnO2Vlf3vZlygXHOjHvsLFz8SEuzHTNakxICofRnVlVQMah1rPFdGZe7N2QaYZRb+Dq
-cVYbzFSTs4YY/g8/EQIHRgQHSVNAHxTpQQKy60l6oFs3QZkuOETDL4L9YT540yuzuIW5MK1mgu6D
-OsAteuxJLvHpLVgWTYuGY1FKH4AHG2cWdIwBx2DcuLwlHfnQFAzCcqXNh5F5Jmuf8w+Hq3eH+wI+
-w+OJ2Bip3Sipj/0sApOfNpQNtcdC6Y5yUlU2GdGUByLVxNnehqe4fBFcpKeJzaqTqtUfUPXHSzk2
-fdHGG7PSFfYiKTmgX5R9bJ+ghp1uQNuDOfjiBKOOEG0MUDHMaMOAky/NMvwyEwynY1+Pg0h3DKoo
-chaaLjGVHKybIyIeGX4QrbUoW2KZ2RJA00pNqDUyTfF7pIuooR2FDm31aHlvjYGVkG03bJ/U5dvq
-EyqiYVLRTx56QFtynAVouiL4ti35p+K2zXJoV2YTOlmJsq6aVduEVwPvBrwolOWctoUMRI/S1ztV
-FIiA6WKQDgpB+gYerOOmLec9oyFqxC0icmEPwLFCPXHqIMljFma5V8GjSehyO5tsOYOkVWSkMKfQ
-s1lQgh6n/Yu56onDcmbu9b6+/sPEYoUq3xQ+2kNdN+fuw5PKvCaQtFy8SYifsOtK4Jg7Lw+GJWE6
-STMgGgCmR+hzqhxz67UBf9iMaQ58+mf1cklKf2QUOXNt9GMZYfIe1RFmtQD14SYvhl5yCjsDmGxB
-p9kww5CQRvq6yXQ+p32cYx4i0VfcbOrdms508xAmB5/kfUo2veSzEh+OXBuDkxNhu+BWZP6idTN/
-hXtgimRw1m/M8VROtmZzGqqamyGZR7f1vTSDD5EEWvx3b8vlmqroGwPXhqR0eOJf77P1cncDVqf1
-ujTUZvYefwN/ovkIIx3lfXVymL4hvdBZH75ADeTi0o2CuhcOyCWc3EHowXjs4qmL623WBxY/3T+R
-CMqv4QB0ICYOJEcEzckX5lYA0/3FhK8IgyIc4M2yvj5ptvslhVOCR6jh0ys0LXhXCEY9tjeJzkHy
-Kdw2T3n/HPOgRqOhbVzGvZPUdlzn9txu7377md17Bw4FBnmD0RtndkfJ4hEyleydLtco/T2iXTHS
-9KzkavVUGgiZ5jN/s7pM73A+5WaE07ZrCvFIEMul1MjKb3xOQwjKcXnrYSxWHc/c12wl7kN1Kl2p
-HvIvWNySwC7+U+K7vDlls3HpTyjPJq0/2uHR7JH3eQBqZ/R1z6YDlNwQyBTrNcVYkCX9Bbe2IKc3
-6ZubYEkRyihYqEJgECoxukfEQHaEMLduc7V+TRassW7st3pgA1Pt1OzYi9Ph88siu0ddzhKkX7Cr
-3xP6pRWH+Jg2LEQPTg+fZD2J5Ds9o8CcqTmeIEzbPX8+Ui1kXpo25ByQoQ2k9mb7VA13dLu9Wzo4
-X9SVYNJE15bY7Lj94rOXrUVePx1m6q/nw2w0GpklxCsQyWhTkp9ghdR4lLDoQG2kg1H3l4vcBV/9
-SI0rk2/TFMsismCp4B9MtfwXZJTGBu6mq+kNii0sCn1DD2y1Xu+3+goDuRYhibXqzSbeE+wzvPc2
-Dh7SAjCPQLPonmvp4Cc7TQMe2WAsc+NWZEBND7Ixd6JesZhiqqm2CKXaPKMf5jh6CczcPMB/zd9v
-+TpkHslP1agIhubtG0vWg78kjldvzGP7W9WCc3JphQz4DvMnLxjBBv/JTKuTE91kEnWaS/ZHwxa2
-6t7trpJMwSKr0T6iPBCY2BiTV3JO37XZ+NY4LHGn2PSIWvE5+XqPmiMMKp5MkLGQNgRQtuEV5FRy
-5wkIml6xEUXdejkjUVHhNBSuHSuFCuqQezOpmj0kPCdIbZThQkd41Wr+ha7qm6IS1hdeFn8s8jTq
-JEZ7lhMHbnKAYaz65hVFnFNh84mwG272wvznkiOM7d8dX/mFVAyPJ6R7lM1yggmiKwNPGQBggci8
-vYUk6iS6XMuTtRnu9bQpLS4+eOBCBQDNX+vU77ze1PRI2AjE7ldbSmMIyY3ihGHr6dZBPTPVgeQO
-QtNAi5Up31wCo7odLVZ3oJeFPoq0qceli+40VyipAdu/resPdKHQX3UDQlb9wUjED/vcT9rEuwgr
-juy2kTUAIOc7Tm5oqp3p5TjjVQl2XEvVYBG5228SBTraA6oMNzK/B6A2ShXgIB4ozqBlRwt1QKHk
-JdPFtfda1KQ+mMQjFbZhBzVCBIjBzhAVgvd7kNyuE8zlbpoEH9OKsGnuqgcABScFK2xP1KO9BO3X
-vNxUnzAZtucw7DrFWjAbhhABaDcRP+J8yoHgg0+R/+GZAiH8tmWw6s525jZ5R1PQf5nIAa0+DF/n
-tDBMNrYxUWN4Qwf2EI4c5SDrmo8TKmrtQYjmIdJ7vUl8Ew/KHnGdA2vFfsWYEXMVzb1pWdmbUu7o
-kInZG9YBk4dY0s1Eb6b3CDaCNUZgNF1ObwCW98vnhmJsi04j3n7NMOXZFKM0sZhgCSCJzF6bCUIO
-kSbTojml7wi3CCO8bZdN2uWRDSTfg4boJeT5eQiQXW2m0kCJ1CdGwHQ0WzaJIprSrM43LiZCT7/w
-hvMNbKdcj0wprSDPTIDJuUgosrqgil2aTy0GHGllUqEqAjRjXdjNOHB4bZ3q7nDg7UlEw25cHtGU
-WmuBeq1F47RbfRUoxDo2Wl1eFTt4L2iePyDtKuthxfCpRaA58CBIv0c5XPBwZtvatjZ/EVHZ+KLZ
-cjfnkycJ9Gn3GefTNuLmBpLEVJ9KcbgGSK9phdYRasj3r5/dTl2MAXACfKCWCP8eAfrCxgO6kKSU
-YaAgKjpXVK0L+3WFQE5C4QmGbVOyeyHKlOoNNaVRvqBUB7QZE82zGxfqRMvVnE31IFfF5Cm9mn8u
-xidfXibdeNT6jduyQnor2u4XQ4k72R+tPadlLFd1VKRX8TpizOaIEx1ioRj5z2GCjS7AzHPRDzaF
-GPLbd4ZXYuRjPZnW680WJPM44RrkvplNZ7eGfn/TC0CluKVUmC6drIQmN0EXnU2zpRGEsuwjQ01N
-mQnyXLWstntfUm7Yq1ynMAL8LOe3cmn9B0KCpMo+hc36qQBY6YV+GDo7vYzcZVc1Q3clvyyVIZHL
-u6F2Xb8aEl5tT3rdPPguvwOxhghDc+V4k6ldKZ5o1Wobw615/Q9dtlg5+16KkJK7c1CSTI3sS8lb
-hieIL4IlQ5DxJkQZaiXRnX8VivXHCQEUM4Y7px/OG9x6viLMkoqr8IXcP2+comT/ex8lzXC8Sb/9
-3QiF/k91Nc82RsKt7+Q05LzCZflBfCdcMkRDEzoZ4qMsh90ugWjLPRDJxpDtTMxbU0MD3+9RfQcH
-JtiKwQz0m8JLjoinkncYi5zNuRSH2U9/KvxjC+7ZIKqBexLfjICgN45fOWfSMCsbdCk8l9sZuayD
-TlgpV76yIhFmbyrBELDJtvzewPyoTHt6b15qopNylT5pkgesDNUmEfbwwIL2IQv0L83xMel3BceT
-b6Bced2Fou2Q5Ftsuyds5+DVhVCxHbTsBfCB6dFemH8uk2WWoKOJAu+XIzAY5h/K/dlyenc9n2bw
-mWP870idbMXF+PllKl5fdpedIZ1XMLiWMz+lkFFUc8ixIQmImIWmnI1UrXaNhI8AKCz1zI3pzA7s
-zD/F/Xuj/gh46n+IvTsFhnSW1rxT3WwnM464LN6hCl2MYAOhMAE+w09oCtx/PC9gcxtdNYtyM2G7
-Qs4jBEzSZsijU75dd9J7i4ZeQQ5aJSOc5HcwXPVMOa5Jb0VkCoNUsPzTjUs1MtSsvxPPB9o/U190
-Fn6YWTGgA1a06RNFU4lvQ1Qeh2YaYcNQqx4QF7LSNm8HrCgME3EelZSKJvdGrzY9ySEQA2umRj9a
-o16cyw7tXJ5Zg6et9cb3yIu1QFKgX0TZXcVYiQqbgEGjUty27mtj/My8CcEL/e1Mk+bgQbNhV0fI
-oSkNPYjuj5uLx80lhEJQl9LOqEokkE8M8ozb8gbbTVaMhwm9nMkP6hi4gtDsoSYMx7yvN/Pm7Cc1
-5DEcN39yATMwVDZ+QSKzVs9UZ7jFfyYQqArWKfzzOe8eU68J3VSlIuWBxJ9+Aa89vgTav+Oiui8u
-rR+RDu0w/+Fh0v1nq0KlzUa8RR/JbMY3bcw8DeZNdldBSBN6xG3wC27hrtzclOJbUlrdAZYZWZv9
-LWIcIORPMKak5ohYBQ7jjOuO3LPP8VKODnb/Vu8aTZ7n4m5A1h8pGm8geCqz3rUzXRuuNJOm6Pvp
-9vEGg6zVFUXZB+0zwpuxbiuMZBO42B+nbCLeBVg81R/LOXK/AajCBoLiT+7vOHrm+ofk+K4TboQe
-NeQ5XDEmc6wn2K3N3UWsuVhkJH1pQSEcWnyhcBaEe4w6RqggCZquQVlqeuJTrZ0oKXG3kosMSVLf
-OSVHNRd6NAX58TRMpO/2q+00FQH1eckWydEcB8F0QP7mknMRdOPl2lxUwNUK3dI2234RjUZ/BWVm
-+qZq0PCWGiErK0zdCQufgTKhbVSx7y+HUaAP2B13Of5x1W8rWc5Funu8QdAB5F6iHnGh3Ok2suxx
-k3xB7sEsU6CXBpx/08a699II78EtktAmmPI+s5+/evvt+Tij7G5m1EZCns5uYeBPM9DcEDAKbNun
-ZiuDt+w0lYNmt6o+7spMrLe47/f1bqNGyoqkuHL2OCtHkb3bEcSj9cbci9V0Ky+8PjJqf0ezREcM
-XrazedhUcziBbKrwVJ54hYsE0UExxzAPJ1aYfwDToCtI1+6+LhQm4FHVW8XFR+YIHGsdnaGq2Qf4
-UFJy4xv6ukCvByeHIQVztQEj5LpuKnY/N7M7xFiC9aa+niJ+iThwkMdjGDL4CKBM7kt07SKtOmM1
-8+DJdBApo50mAdbT/M71Jxfm+pxMhmNLKGXpMcF+qqJit9tyupnX96socRM/P7B+g6DcwFvCsJH/
-71dx9I+xjMFnp1cyKPRZixnWddkG8JJytJxBLqmBZNFy/vO2v0hfi5wtkq4N/bzo+xecy6O4xYzt
-8GliU2UGCV5BlVuJzO/BqQDtU0DupMC5wVCXLj67GQnkO7KdlNnj4Mbsniq/WMu2PDBhUVfysf4L
-b9r8V8XPbE/N3/EN6lmkHoQqEzuiQ4ZW9iNnp03Ar17/4R9LaLbuje1i86q8t7eg1CA6De361oCf
-5a7XGFvjPArwp2Iq5Luz4FslXjrBjxEc4GunTIF7jHVFcQFI3QwBmjcfD/HSHH1M3Rhy9ZyVDybB
-wOQnm0/lnFZzkMx4QzMTFG3NdqOIo9VKHZORXqMUoFzXErXmzvHJNB3ryjlJ7P4Yp6zmzF2p7KCj
-Y7+8LMMg4OS4gesNt+fzKWRRvgHaMvGg3gFu7pf+HD6qyUvKHEthnzuz7rw+enJtlXh+uxfeqyhT
-c8z0pysePhx08dQCmE21W4GL16y8NkKdTXONF9xO3HbUWARw3X4kDGCnYMuhlmheqgv4S5vHKpKv
-yB6irOToA2jq0AsCaGmxodtPwnTbdF+3z/xF1UXt79Fst9XOpqqfM/U7Sp2pW1PNxWKi1+2qpd8k
-oPXRXRzqxswLuLRgb4SxUKS0JaOWJtjg7Wd1X28Q58ScpOYC7pPTMGNFybJe3fSDPHfcVbnZRBrD
-ILwh7UEqDaAzGegvY8LTh+nWaXHIPS19tnuHrBzw0VfK9wWgWPCt+F/fX8ZWDWeHgFh1Dknlh8Fp
-gti4au7maG+nh7vGiCyYKBJyiWGiyH5a6fg5I4839PZaPodlEOfBGkxUWqRrdUJAhu68OlFtiEZ3
-FyYLj693qD/aI+6Pqg5R5R9KOnSe2uMCNOP1erecbiQ4Q7srVCtyTrjes3CEclGfQiz7wIAJPxWi
-60njvkLsRYpEKlqESBwCojeNzErAARBIjo8wHMmbrZFDb+EoI2ljUjVO6JmcfvmrAFA8EIg6zp3A
-XyF2aICztRpm6J5SrnZ3aDW0bDkvEmcnmY3QfqONfhixbh7lD0Vqn9qAdszBdkTe+MebjINWTP2V
-rU80Qynk3c0KR1QUvaRDRZtfgpjjLh7PwRiXVUdc8m2dweNmgLVSLo3djhwxjon5VrHYzjnkjUlv
-dcJ6SWzSfXYUsH7YCcQmIcBpC6ye1iTXnFEIp5gGcbm6fCD00rckuQwcO3DFcsyRyAahpJCO5fQO
-IqCFLe/R9iyaF88uhx6+Heh0KTlfWhSkOumMmwfwCrkFz1XB2x4ynrApwQ8INhQHkMVxEfCnupyL
-exRZVL00GCgKV9sAYcfU/uUZa8ss3mAytoAcyATdxkXahbA8IKvDezAxNJKcEr+a4kVapPVq4TJ5
-2BDA/oTDuvEz7JYlT0/IMCeswIs1aEFcQp7PgWCE7xOeA0fYNLUZF4JLzQmAAiy67lQNWbcMRRKS
-g7lXc2RP0Ii12dblH5oPZhHYaJtBMo0dgtuwWRFLJuPmHlG+DgiH2HHUhOnvvkaEoOsKLSeYEwSH
-6+PXoR+MnYhDvjDkD5N0g9Fx5XjBtg+QFOMsLG72Aw+b6tjlckG0P9ADR4GpJkYTj1qLYA7xwoNY
-8x6d/qGJgWYgb7ELa0zEKgp/X1QdcYmqFcuU7Tf6b9ITp8ag2uoMDkpPRK83WUGGm6rZMktiPZVk
-w10u3xlCfn4wT3KAReDwCp0flPz0C6Snk63ecwTWCAQVjTkWVQGgC0wBeZa5L2spM7FyyjbKxkhl
-sJ+upkwLzxHDxghIOBygJ4T7AGJo0F3wJlPB9AB2SDiQjdZG2otRYh5nMEa3Et60Ko+5xk7laLee
-W1lNHnolaf68cvTIK+V9nVfYe+PXsWuGgWh6Hf1yaqH8VUmWmmiR0n+aKC/LFi1leMbO1CJMZrfl
-7ANs2nrLYTbl3Dkk+XILhyRrYnSByt68HwKqm+9AdAHQJxLhwA5W+KFF2EHai7wNVVANLOAjfMD9
-dblPHG2SD8ObRzD4W/o/QmaNQ1y8C6deDiz1WwnscjkM5i3WrP4Jh7bcTde5kdtACYMaB7oBe9Sm
-J9HscAy1deFngBijHc0+QTzWFpCFGRjREPbZs8BfH9bGFIQ1/mO1zsPayYC2JFUBPXll/WRpPL5C
-4tbN36HwwJ4RmgAJa2i6vJ/uCblWcm0EIHCPND+aEEBSXjBkGyI6NXzTANQkbPupj/vIpMLDxBB2
-Ifd+S/wg0yJ/kNrlaV4qBeXvRNeH6JIaLe/WZozYuQUCCW5AmmrkIgTulpp6JIfU0IoIRCrYckAl
-eGNOb/8Okngo0uei8N2Yj4PwbhXubTPR9nFe3D/v8q52tK96O3dIdO1zZN72ymAlm+gl+hGA3O3u
-EADXVDLYIxj7AZDPulMPfXuVLw8y6NpqsMX4EpTCp4a8CdgSxW4hWey970eMOccmH34vZlW6kZTJ
-whxTkKzdprwAArm6UqA2zdWVxAKdPB996Y9D2zE0E9X1rQejuJmnZ7VddHN3Lc8vnV3S0e2c2Cv7
-nQfaSKUVRGU8gp34MqC4pAQufpbO2YM7usFF3+ow/1BP2+G9i9zE994Na3qevP7XSPTBZ3wHOXcn
-ZFWz+YKkkiRv2uXQyFCh/7MFroIYO4JtlMSEpllaF9cdAs0GywNE+GKOGWE8rE0OKFaB0z4iFsFp
-QhFgHc6YtXBjsnbkm+oTaGZ51OYG+739JIJ2BdA7st2VjvMzPjvpWlGjC0XXt9OmJGjNfb2zu5c0
-onCrXjUQD+2kaKXiyqbXcIszZbcE2cUzBuweYW1rcD5ip2vDSsi5CFsGsC9GDnXooXKBAyxPi/RF
-uLegxhDUP+9VEzdCszVWNYL54478VlEL1oSHd1AzPYTwQ2QiLA4qMUMZmpn+jZnPdb1CHC3QGdjV
-RAxXbwTX5HFllgXxzOleSfx9W6MHF7QFq/nJfZnGuw1vs5azV1tEVxUrL6KNuRUnJbiimti8TMSD
-88E5xWipIX8YrLcis9R6mx01tjNKWkF4RpMVzREvHC9IE9ga4XvIMLEpMVpbg9eaVkdA4Ksa28ci
-m/pThTCwUCk16U4NzInTEDhm7zCF7WDC72LsYBDurQxUAfwrnNuNwhTmITocX19jdG4Lmv1sL7ko
-MVq4ZiszQn2LhhE09HZL0MCUrOETWPjmgFq7Fzo5sbRBB/ZcwMpRmaVVvDjZyB7Mms/3oACe8SCZ
-gzGQFwBrIHK0pKYjsGzFJjv00o4hdymnVfSJq1GERZhgzEGRm5/DAieRbxX29WU4GMdGOtpzgphp
-9gtMaiPjEH8+ueXJMiYcNRjqvd/sri3gr3/GkLIDfzYjSPDxoOF/9RQK44m8RyV+BSICgApQJrZs
-rV6jZ2iJmNq/aQMEa1ew8Q2dhhCLES3xrSnjCypiMdMeYUbTJf1QNFRCviElgpshe3myk0SginRX
-6QOpuktVNK/z4BtIxqjmEPm5SQJf9pTyMSGqhEFrWqYxry58/VNxGQfqVHIN9g2GCnqzDbUD6JRv
-0HCX9Mg2pTu14zxz8XFWhdZZY2QVAZ0qgOaiuhweucaREizs1gJ4uGEULaKjFHGy4XRO0UD+3ZPl
-8Wp+pnY8sV31JBACc+cKMMRYByV3FigiTlFIRHzUSDr0UAbd0d0hw+ljeAdmjW9rRDZXmOoiPchX
-FpRzE+OCVMvMwoPm15uqxqS/bnOY0cJUGznInIuEp75j+zwbYSh9wX8wgiXzHzTWYOSHjEHvNU8C
-xbNz71BgXQoA96VBFgZ7BFt1gJPUOGIS4QHABX6zZ5xoAI9H/4XonLPBMS29VPOxO5clWv0G+UoF
-s2KOfs61sN5tDIdFWZ0EbR8EAS/OkC8D3PBX2VU1v0KZUASPjE3P1dwmLbDiSTgoJDMQfp1YoLID
-XKOIB3maccE4aUSYAcDndS5lxPZ2A6llcWaurjxh1Fyrg0t8eMwz97EGCEHPB17mjn6n74GF8qhD
-10w73XkWoaRGSLsFfN5xpTyhcjkpIEoLWkEiwGhSSA0h1CI+CUeCdirbilU1JdDuo1PTsCWcRxRb
-KMFlP6G1atM0oUkA8/E53qiqzznBWKDEqubu1IpOxy6tu6mIZ3qmG7TtAGtyysAWa4xn2GBlYUpN
-mOL6NnJesEa7znC29wdWMZYfUQ47/gwG0pjgbIaYX6ZX15bfUFLPHYvLINdm+WJZT7eIDQRufpsi
-IQDwIGQS5Jsv7Bgun8Bay9cVRwXb+G1yfZ3AwVOGWpMC1yu8VApUllYmBdiusoClsmLdb6ZrwYjW
-zernuSjaJroDxJVnkohf2DppyGm+QU9c3AES526TypllXUMs0izg0PhJMthMp95DQkZ6k0j5gfdd
-VwHVjRUqgbeNdqexTffH49Cwc0HDHV2Df065ZODbzRZyPl5mT7APTONZBM1ZeDPpnuNsm3I9zPpP
-Bexse08zUdUjyTT2+01F3qson5eb6xozVzlYJsoB3+dX0hIDiqT9JyhZkE1M4W1aUY7A4XAXaSzH
-IQ6JqDG1AwY8k20z5AmIALt0fXVUhZeKZN/JIH5X0qlVodqFRjlbYsoTM9Qln9a5KzkiBT4tsRqv
-zJNsTkxqq6qBu5b5wC7ZPOhEYaV11UoQmxn2sR3ZBXDPxProPgmBhexOBE8Zq0+2qyHgVXBm3HHk
-PY/J3lR0L3gLlh48A7XfxS9FZ53k3IwkqZMcCjNLYdtt7zEDaQL407wxuwxYqtlpFjdfVDjIJR83
-cH/mbyviJsKpCVTtYPrjjfnrs+wZ5TmgeQH4qrMEfFUKgkLa+Cp7lhZ/6HbZf9xkJyc8Zjv9siDH
-iFHUDlfthTOoSg2zm01Zhplcf8YeokxD8S4wzycT1Cp42gTzOBZZJeO2ecmZzPs/rrpIoU9h+E8k
-OzMmeu2aH6/i4wZiiaE3VrpakoZ5N58+TGxE83E8WZK40c2RVbnw5LDc5Oe4xI9dRcehig9GnHfr
-WFb0PNxG7UUKjq4Ch4xlRwkoR7gwAPTqclvn3rjsQMLXWmIwpDh+PIf5WKwEU/HJqfl4B5/MW5bS
-NbDtlCaHHuWv2SfRxk1wPmnIysLpWJztlc8OVGRPycHx2szQh6cqx5+5v3Fvv43aJu4H+UdR+J5m
-HGPADijQAKYnuTdv+cpobqKks+WcPM9H/xpNItf1J7Pt4C4OeRsp3Z+614AdYioZR1DNy4fveOzE
-9q+++or8KHku/rdyU7+qPlVNkKgb/jcajeCf06fPqP53CPdAmd9YCTB1Xueo8CY316m5w55clyes
-wiAEuXAUbQMYSnno2O2dX3twJDC2r6i9OjEq0IleV9sNKBPsACX/CykrwuGgETt/KMZCaadPH/RM
-HDn2BeQD7hz00e08nB3z+S+ACDZzgBBoxGpfoVmTcDyYlZBTDHvgzo9fi/4if6YzgrZ9kSgUJhMb
-BXVbzSn5sfUyMVs/2h8wWD9zcgCZY5FPMHXuNCisyrK8mwEiSbO7Jm8A610s3EELfI9sBpxm/PSp
-IZjr3exDSVlwbtcffvWc0+I8rZpmVz49/bf/hh/QfDmupe89NvfxaLetlsJtk1ntYcfGDKPnmzua
-yPvrB+xd4NujBhRqv2+6adDNvtnqPT5DPOmzzPMgjAFuqRhUVR9Njv1hKvng0MbHo8UET5WG9NNe
-GXHskURYISIMc1bqjk14pKnwm273BQzCKt+hwRw/qUDI4WoZCnHqUIMtM+Hvlw7JlwewN+tZkfCJ
-n1fz1eA8uysNI7KlQSiTsWZNDWGnGEdFrvO/CZqRGzzFrpmJr/eGk5pzovSYEXsxRjSQdIbsAnby
-RRP2VGaaaZ9Z9LPBsxOuoOr8/PsfIILrgSxqeBJdkS+MLHBGlPDgHM5oAAIie+kpx4JAUGgO8gUa
-eU2Dua1BNzB43OSPN4+bYmBEDR2NgTElIMViTAn6HlNcyjD7wGn6tELy1dtX2bffnWc/vHj77rXL
-eOBv4UNO5fEWD9yOYq56lqUlEVvF4X3hrUt1DQCUG+477MjVsnEyq/LeFE4uXRqpgdvwunxQX/vF
-dq267TxQJAR8DZeepFq2czFSn2Yjf3IzjCgJTyMHS+7VIRNaeilANjXSKR1C06aaWTgf67cHxGoK
-Tea7u7u9Dj/w8SzCUFL+trem9jDr9HZDQdb1BzVgusiRw4gNS3LIE4chjrlkUxEIdNhKKkWk7xcI
-qKqoyLI3+QQ1a1xODqgjOx4pmAJnrhickwtz9B1N2tABb4oLNOqhIic9L3bZhi3LAP2h8XiOwaT1
-rN3Us01nF/njNeF5y9mMEQOb3U/xq8ZtYBtcuteLgbRZV50H9zJYLzDcODwBEJx/+lORhtvGUjKl
-NjZH+18DO+X3bZjePBQp1g7s3d7bz0ArpmkOI6pagYslWuvY5U2tyNC6SxYHfDZbXDVtvMHBNHSS
-4IPjhUllkgA4DKMBG233LuC2RMmlPpVWR9PvUlQwiZJbRJuZzzmOxp4JvVavEN4R1jfBPkMCbfFn
-F0ajUHZT9kSb7svOFTmW9FsQ052Pvm7bj5npAqtrDeRyI3ehe+ZXHMAX+248MuVGE8m/64CXil6H
-LzbSTuiHHWcHGliYFkkU1Jn/h2JqNdhYDJuSBqfiKGCLKOxIn/GEzV4BK9RFv/ACM/y07HClASXu
-yWkyxphS2VSXR+cwUumL4mmcuESL0Uzm5J4OXhPkuIZ3DAp25ek1i3nyfPScQftk1WmWm6Q7uwaT
-jfjA4exMqRhha+NwMBs7xBdP+eizdqDTH9rHFEqB77uEnm7+GCu8GzjrETu/VYtw/c02RjsIq3BW
-GUaz+A7Z0d2Eypz5DCkZCPM5Qc+g4upMNqMSzVhILJtupkjJps2HChLKA1ILDtn5h6AbllXvPYb4
-iczqP3udbnYjuaQM1ZiUKjotCNG6qDu+jpIN1tBI7R+tTIcqzCPi8XLLAOA6jLXoL+2/lAyJalwF
-+rOzhsB+SBX+u7MOilZSAf5oK+1vugGdRQIwYJrorITNR7VaUHE/lyD9XH9upVZl60oJygIDVdkZ
-0NXNKXobXwi5JrzMfWQ5lxrO0AuqbJ4Dd4UjkWVQEpHBNqJeX/QZTxekv7xP9mq471uYXa8wXo76
-NjouauOJacOIZP1hUE+UWnFVaRFq2lLDLKhvnYGj+qplaMIWNJ8g0m2f7TRYz2byQ+xRurjM65m+
-tEBZSXyOdfIwuhwdL935l3G6ScsAvNyD7F6fypvIjly2HvoRqa8j4RseXLaCR6E+KJZgyPThU3EO
-RkVUcVqngAp43Al2MRcbBmh3EqxOPpppjbyui9ZMifzZkiaR/qsNgp6NyZtvF6Tny2kH79sv7JlP
-YB/Wl49yPuGpWscufiNR6/sSA8YWNSrtNhzSXCR077cmJwAqN6clYVSZy9jVVeQSiFkNpw3JY9Cm
-jAdClXS4vnhnL/cJIMzghh+l7lbATPaVlw47habn3gK75G/FMQ1St1UbWqnSY+tKTs4Yu0mvxQkT
-da0y5ebndYliXBSsFV7rQmQb0/g7DBwgu8swQ0/KReYxA+RKlq0hmjgyxECwshEIifADL2uQ/9X2
-cXgllouJgw2N05GHCvrW23RLFvIjog8PBB1iHXRzS+BaBBfqaHSdoZC+wsD/huO0CjSvePFUdQUm
-1bmBRX2acwExAi8u224bqzpmy8BGlCCuXL8xIWlObt6AtGMxv4WEiSO2xc2CUIol7OWGWah/j1sZ
-ZuLWyQ/KLNr8spILD0TpPEd8kQcOHt8zKwG0TikzIKs2GUFcTL/hpazfEvdO6ahg+D/c4WFzhjWu
-pqZTjB2Dc+jDqr7HY2iKOefBkP00CJTrpf2eIkoUpOTAP61TxWQnx6e0ogUgQHubcdVL3wlN3auC
-6a3u7nZb/FQCjgdPSoi+h8ixcrYppw1HjZYPXkzBg7e6+MRf12dFdpKdHlhYOPTyE2rvq8x3bGtC
-51iSHPjo/drcM3drkh686SraOIieGv97RGBR00iOtm37k7TAqR3K+Yb4AIbwbz6yjdRQzyoMVWQz
-tDtj/Hu0tzcVZ+Eoch6TLzMWh/U9MDgvTIUHVi20+EBiApx1LtwQuzpujFYPHYyPpelCpQNNIgOQ
-dJWD/8Z1yXeoe9zjUZwH7lrek+U8SPnsJdSbpM5DAU0NcuxRZjdTOXljdQn3WlFaWvDL4eNsGnT/
-++BTSOw49vMeQajJlgK1d2t0KaBUE+DBIK4HUmR0bv7z0kh1b47AgkuvKqbFs4LhkXdRZ8bVpofq
-DlrPPfVEcYCk0ymUEPuaFJdeboufQy9tHx5Ri87eeGAfNjbzeYJFYH6cZt+A6IsQeToQmj+HiMKO
-2GF6Hzd2GkAbncoVNDVAefeUc7fpaCwJRlWSCGYqbx0SvpUW20YjXv/pJSZAAiwhluajZkBiDHTg
-4AJ82s0dRhQ29m+/W1PSvXJYuZaWyIOKXdqmiy3G07vtYXgKAykAr+cMdi0XNOinam49zaONyvN3
-PbiT7JodSilIDQ5fvrmdziGoCDzvlCs0qzVncPOIRGs9G/YXIz2dpeXArhnkmj4mGF1bfqnvLXIb
-1brqpB3mUQtGHOEeU2YoiaxPJsFhpINmC6AJdpwIu5E5oSGIQyInoSXfSvPwpjFUF8wuG5lrIiVk
-+4HhbZTrASV7Ux8In/z4TK0F93/G/6pFnEIEI21twdfDP0J8FAp05JcUiAiy4DLkqy700LkinfvU
-aYTzxW4pwaMUSSmufGh2nArTYZ7joFVWEC6X6ixCdKCaEFQ5Xu/HKEmMr1wA0ubD6Bvzn1ekz6k3
-V6lcSCDwMllNbdDv1RU7aVAr37745nU+Go2Kq6t0DGV0rsaM8IIGiw2KTBp8+TFHbBjCxwupDDxQ
-osR3vNTNTbDO4oocy9XOX5KwbMxlGq5QAfN1afbCG09CUneQdDQUxVpi84JiJHonJRRFgSZA1Ouk
-Lurrt/1hrDsoQjw7h1faFm9KWAo6QNVTnCTCWfVrfRMR5U3yzqrQMCFH33zibGWclMnlFhJfF+Te
-Tp2ECYUhdXcCAsnzAviBTlFSRsIhJfyWPcdxU1xdYa9XV9m/si1dXckQzGOK34SHOBDQLhpuf3Ul
-wzAP5mDOuoNoCozq1uem15QT3Dgmmo9bQcZpdtcNHKkr9n4wW1U1JOO8p5yyJe1sPojpw8wwfw8U
-bu2zXyJ7qs1xvlKhI7jCGPB+deUtQwFf11iHc1GJwr15CUfUNPMRAoGXRSpeCgcob6oGhIipY+YS
-x62+SUEDuKMA2ZDPCWUSx64XM7Sy+kT++GbNP1X1rjFDJYQgOyEBRA68BH66qk9shL6LdIAJpQbb
-6pN/rnU7J1wlAKMy0u7VlbR0dTWEmQV+TT+Jdq+ufITxDS4qnotm3kEDPaP+EWfBrAv8XlaLcraf
-LS1sT8vQhBzHIBNSmH0Fno6gGJe2zGtoJVdodiLidELkaNFGcphnA6IZpJ+kxpoDKlUxgs4lqe++
-nH7YlIvfKNB0UwJG2C6ipEQOxw8Kv6kgOboaRvuxBi5dZ1T9QsZzJKbqQUdOLT5KTlalm4xlTf88
-QrW7lz427wPAhSFEBlUg28kUwAHYyNRPquT6lg2Sv4Gq4BtlWiFwchmxMk4VB2eDzLbxdIdWebuC
-bgkS4KgqNVK3xxah2FveknaMmpfL1mX3AtokbRXEmrf4bh24hfiCMt/0rDMgB7l5Z2ebYhoOvFeE
-hYUXqA3cK0qUPaHkPMGZmecp9voCcU3cgQHZOWFCQU1aIvCKvaBdl9sty81Ea2RJD0QWwa4zZyuI
-+ahr3WZkqqtW693WYaPwNTJEjXPOOAIPyJmk0XaJGGIIAEhRZNMVDsN2z4B/ft4z1G93BZeZj7LT
-V2H0IPbTOrbsup7vjxSWvdt8JDEdx148P4g4UEFHaltWGdg3rAgWdBgLta2SIQTeMo/ot6dYAl+v
-iIF1GI4kDFyFVXdNZrNbbj33I71XUm3ENkItrlKDqQUL3uBWXqYuQv7XrOt1HliaEttZDXScNimM
-pgiumKQlVYoFOB5sT+c7wDxEzk6vzLqwrcmibE3lYBQ2twUdPgZshWwl27odrMcSRyJW3gNt6Lrv
-3K0xCnxlOO8aT8ZCvUK0FeWSpL5k4BhjO82I7RwvrNZXzkKut22M3L+pDtW9tPgst7n4C8jOz5qa
-Ie4QM9GE+VroRYTNp5VGGhaJ0BAZ44+xFgVmUefYAjzHLeI5UVmJ1LeX4dalFRO9Wlj/ApCeaoUe
-6E95BP6d5IC5sMBhoCv4vFkXR0s7ml86oPGJQj0cp/1vLPThhddKC8BiWv74hxMKH8HU06mF1hIX
-cQcR4YvdMqoBPpLKlIt+1nuX/7H4M+VOoKODkqfCrzogew7bmgD6X34C4UY8xX9cEXJDp6jq25/5
-IcAdULAdTk7x86TYaHf3sfm+LF6KJ7NYSPvYzGC9EbxZf389ynK4LE1N6X0DHtjmo6UyVLgrZ7fT
-VTVrsqeZuSNOV7v1ERnqAgnVYUig3n7otHtFp4sJtGPmtbOpiLdiINbuOtZJqVOjGfMlEdSV83Ld
-/Kb9zP2MsbhuOw6Xvp6c/tAbnXpTeP4HKBi4vLWKpQLr6/n3HdUiu6TnTPtnvrXfjG23mtd5920h
-3sqBqlE2fgAA5sPLxHJMIGFSJzHmSLt/uPYM5+qBg3jKnB3AOWmonkUToewiHCpDecDcT7cMtJJ/
-oRA+5JmMwm8G58fihKED+pim9nHTwlnW8plDmRjlkI4RwnHCPOjFlwp9F6UOY9OZNjYdZeD2U2S7
-VsQTr70RDWOWaIC8HvzqDz/HLYE/8KH78s4je0hDF7NKOD1h/PI4f4A2s3ivHVtwtwKXqpXPyql7
-ztKIh0zhxRRgGtY2V/P+r30nXNymjzdf2UyXxJLZYTdxMIcB1OSnG2kB4OhWEBrzarEo0bsuKulc
-y8h0T640gPXIx3aWl6ObkXn2TqzZq5J111PllyP+cOhVS1JV5qhR3APou5yTjgKmZnwidlUPBLgQ
-pNqDtC6cP7oVsNibkKWAVXmvd56QiG7RFsm+8l/olorAlVpbidRvtTYz1OQD9W/EVMEnQWkznWS5
-ZFcEwNIVYCTOC2ewSrgnW1GH20K7VDKdh7u5hdc1fO2F8u18nYrTz4rvJyYCUwno3MtAijCjgbte
-c+M2BrFu2Bzh1theJ44vcxAjdtWZvGbu7foRf1T9HaFb16Vf3BzGWzgBAJqQIHqyh3H2wPhb0Rcr
-Dk8fJN+muRG8aeVvMkj892J8cnrJlzX0tZC9yMbMVVYyelC5HTQZJgBebQ9F9T5C1ds2dNZo9AVx
-wREVbIzOUod/Q6nQ00d7MiUjLsswm6jzGU481Dvju5Z6vLR5H/2JHrM8QdhsWe4P5MlpcJIzPrng
-mjlAUxLvx8k7EZLuqhxtGM8shi+XITnss2R2dmxlya1omL2BIfFBi+L5elNOP/QSNJNAGbYG43CX
-pbJ4KjxPbwuw460/6TFwZRzu7suLCSTL9gB4IyPpbIFQFxmxC/Z1zQxbBlwk55xbTs9thDMZp6yj
-rdt3sP8EkVkbuRsJTrPJYVz1yRncIdX8CYcYM5qgg3OxZYr2duA8Hgh8xsmJhVa82GKUx/b2coAL
-Alf8DHGxDSfr96L4uOj8+QE4q795hsI78XgYegdCx0mGLQmSKvzRkXDK7GAhHYuRp7pFhiZxJLF1
-Awfk2D//CkBNXBOmiPorPKmWpVVR0s+wgB0glvEh/TrOS/vt23rLk8Jfv73Xsb8WCDGhbGdS8RZg
-qIAP9VakWbAXNp6UNOgivbR8zW/Ia0ZNXDsQpIflmAKCTI05BhG1zUikr7X2LrWpV60BsnmfIL9h
-5D8PnYX9Kn1A0orQIRAbf0ViBqOyoQ/dHN+wO4gDeUbbEPbIlrJXlKZABUwsMDCmKRVggUprYLMH
-gN0JZW0s3NN2Mj/5DQ8UVe38la8MXXFAPX8A2fOJ6MxVF9wQdjP82tZxgteAdm5rXPLZE6c9Ikfu
-LXjzU3gdounwOBAKz7oiwz0APxTMDuh4CEcN4kWeINJBz7rLtbRh3hD+v1jc0BHHwvdAc426dACX
-MzTxCbNkLUoVbEjeUQr/n7su23q+rZfzxiMEsiRamlEpBl9JkMmmXJafwLWPAh0Bkbqa7ZbTjTZU
-vlhlDH9tU0vZRitqB7BN7q4RMbL6QPZHxik8gbonopYH10Kuym8hIYN5eoLOcHM12mUdZ+UwS2r2
-9W7tMkZ5av0T3X4m/tBT8dF+ilTv0D/Np5dLrug7Sdp01Pj2nXVdQk9e6lRHrqWXDCmpvlsDaiNP
-En0PRbiJz4sdLzgt6Uxx8FLmXQoR1k01yspRVNH5EivoGEVg6OSEwgKPh0NRvdEjrjx99vs1HcM4
-NycqO1lDTp7eR0PYqdtn86Gjf2wLPTSXeDDwd1ebkJCD4FQQwcxVwHQDUgxjVPDCTCbEFhNekGeJ
-hy1l4YhPlocXrRGyPl59qIt2OOot2SVFB5jKMpmIuYyygzdluVovdzdmtlvyfgMjKDeGK0DRljLU
-EaiOU32QfD0xDGPC21N8NS/yvvhkOkx5007eVzuvXxQ6gaT+3hENXRTb4kkn+mlYXnrXV6YFNygd
-fsoRrWbwnnNJgBFFiPIUMY6JQNW6sUOWK2AVncWRDg+pMV0c71flGfkCfzQaVX9VO4ynGNZp2RxA
-dIKLmsT/nR4Dg6QreNHRyhrOTrte3ljWJNjqXc72OsmcK6dZt3MKpnY96oqCUIlHSpPSup5Y3Xbr
-hAXtqDoj1MY/8Ur48GZoCj4UiOwFOOO14HlHXgQul+tOfxbUWXBxLkKnJt5IATdW2Vv8cR85hODr
-iiN28wW7w6Vi0n3fEAdC+egRWdNQqgU0I8mK5TyQ8VZZgUhczTJzIkG6K5RS+EyRdIqlbVB8lu9L
-jn7AqAfKvopYkOWyvo+qY/cuJS6DKiG/mwijK+eCs4DPfYMIPXMWK8XqUzwogtuN+upLP4l0JR0+
-XesIUZ5aMewRbjKaPf75sEvw3ZgUA+VrncABJhbtFet9CvPNfsp6NK82aEQrGHzeMw6TaiCpYQH7
-6BrDnZ7202oW20mQmGWtcrGEUBb63kQTF6c1iRYYszQxUUjcnYqFMWuEt8aQvCzxMVl5OX1w9q2o
-kDyAwTZEJXL/Du1oMUmB9K1tJO59h1gEtSShjmYzK0GEi41sgDSl6rJBfIiD+SA9mB/aEkoqvkVY
-UpIIpTVum7VIO4k8I0gCikQ5l0syHRq9S1NVxenBuL45WU7T1Fc+bM2VZ2Pp76IaV09O0+67MEIp
-D1c9+weHvPTHbUQueQe8FCOpaRUzgp1E7SkAOb8yvNh4K+FH/2nPH3BbeobaikBg9rrEnDM+9nO5
-P3NGjDSuwsMlJPIZxakthbpUFyn5UQ5fz5+Rj0PS2uJR6iHg0TU1vOKpq1KTWQnpJojWihEfePYa
-7xpoRPkRujWbk0nOJMD8xyx1ug32aPDVRPv76X5o09XafRbMnbeka0yLLOchxW6Yz9ygw/KmBKVu
-RVlf53XZZAJMqj30oKcTgcD0UCWmN3Cbh92J6anVh2sfIamKLkGgWYcfdkZJb0ERb1DzKTpjgo+3
-ZN1WFwmNAWMXMQR/0fMvQo92yfX4WIz1gSHw5eamJLg4TLI8bkv/a4scyv+bGlR6M6dKquR0yrKH
-g0xH1nXeQ8GEt8Sb5YljW/e3YNOSV7880+gg3liCyXCNtVZITV4q5q99XpSXN+Vcft6aKOwgP0xg
-x7TlMksDwSTm9xAMTDsqS/vVL+0KdfC7I8rQrmtFizjefbHphUKL5FlFoAqRBURxq8GJ/LWWEh2J
-RZ0xzhZuhdzppc1tafukJgmAIKokb1BKBQXRjjYwo3dgQdqMfL67PLnpHl5x+9nKrTpPZF3jBocW
-Gw5tG59xvaSAn9B3uujFAqoobyGJXbXYkyGV1hx/e4doAy6kEPnpYQmQe6cXX9xcjC+JjUuxCUkZ
-GEbcDEnrNTR8C7P6hMNiKN2JjXlyAxqi5BQg4MWJSZpTMP8j0k8Ik3003Ir2ntVxtpU7DUmAkphW
-tOns72rGv4PzGAbrBwUZ+cjPrqpt3Qga2Jzy+gdWsPAjRazkejIvIx9dmywLP6bZqO1KsOHPWpuh
-Ep/Bjo+Y5+gCqvR+JzA432sfRyBpDsKxF2EjOgcrxmhqQgbHdRF4s9xHZyIr7BDWb5XdVjcQ4gWQ
-H0W4hjrjoqxiLqNV6RimdwXD9cfMpBWiApGeHc5GnuvmAo+XABwOFMeIHxZ7HYCzSDefIiaId8tN
-aQQ7c5PLl0WbNLPS8UbB7drdIif1ZkKw4CjMcXS9gCpx7Mm4F93m2kdqteh8+eIeOjQZLTVGulak
-U5BCgRAKWJq2OXtT9TT7nSqhRHnUMNgnxZH3Ztn75pRQlf2+6ZNFY2tLCX3GKMms6pb0bnncZOue
-f5SwcTEmSWgiyth6lJt/ES4A4dzDpE8oY5RZX9Qt3HyfzIfzwwySEVcw9cuIAUy4kWTud2cRuK7N
-4fMWDN+b3XrbEhydqtuSikk4z11pTesko5APBCk9xfExRxPqwsjfHyTRGb8qEo1aTSjh5KNZkTUx
-0Xq0z5CDs9c+YfS2VexiYgnVg5Yd0SoXnynG2zEZtjLdLcWYQY0F2C5afy+pClx2dzWEy8DCEqcV
-p5aHIjXarEAhpI++g99Us0wSkZHaYDLhzWaI/M4cH6ygBhz6HTgn329q5SYUbx1roj5uz6VNRSqd
-yaG1aY/ndf4InkpQWAdwkaNkUgboYfUS/8Uy7lEN2KNCfhQtF4s0Rqo5VpmQ+BS9uEw20BUO7O2H
-EbPlcbdCLun8B9fdVkVmp87TJq2WZdAvtbd/cOUNnLMjvW5HUHcr7uxnBpHzjdSzWcaEy6VQtcxk
-2uqt2dgP0ZrsoHgY8Nwkvv4zruFJNXOcPTymCsw5otr1YPS84LEIBy52T0yKe4rE/1/u3nTJjexK
-E6x/bYZum26zsbGxml8uRHEAkAjnkpoqWZSQKorJTNGUSdLIoJaOjIIQgEcEFAgAhAOMgFTqB5jf
-8xbzZvMUc9Z7z10cACn1Yp0mMRzud1/OPfcs33ETbVf5zK9t50fmka2q28Wn6hA4PzLg8yyPaQBj
-L8Q2uNkzeVZyhd2MT5tZSd7lpeHWEFrmAZWyvidIK0dwYVspSnwidN3pyuCkGKSJ6TsNhb+ts0qd
-SVpMyxpZ2wa87LC2MDXXDIn4ITIf5XiSgTvcIQ4WgZ9x5hO7UAcOJ5wF43sbD5dYu4b3Tbn3162s
-2YJDW8Vr6VMsLyAKtvGHWDIMckYNVIiryNcZ1UIgB4ljrU6RQkd5bPHPgL2MCtm1+Xj/xN4nLLGN
-ikljhBqAbK2KQSDihN1eEg5oXqH/NIY1XrByCu3hEB0Fg0RYjUXW6zVHM8TftXfQOKteXCE7xXLJ
-f0dkHIkxlOBM4MCpCyvPgrLHxoDoLo0WRpem6k7vTcFqi2KYUu4zSXzuXZESgDlJ0kuCzumy2wUj
-QnOjJSsjmo33moZE8tcYW1p0g8qhLJC0SnW1F+hyoNaGMFebCO7oqIib5zROFJvrbrG6cSqzNjaj
-DcUiy1tH5YxquaCgchjNQtKC2TrkdrS9qLI8g7gWQfpqNMF1K/gVkZjpIMFZUvt+iX0w4oTA7AKz
-0Nj3mnS/NudPzGQ1i/nDusyvku4XcFDF7e/9TcRvbnmaKrvpcgx3doAske7ZFOsmxLn5bDdVtE+n
-0D4K4jBgZ9XIbaYIgHdDgCt/nEicLn+kGIdFNl8ilQsvcIT0L5fbTl18Gq28qdmRuW+p19m05oC2
-obvZqhrNjPtoIIRgoq82hjYlhqAb3q3wGJkMh+1gaILy7M/SZNHY5+YsTu70wTnte8HQs74b/uR+
-0nJbyTTiJ75X2bIfsTbR2hBKF5eiQEYrQmBeeyn2VdjBVmSvGDneu9jJ8Hs1usNH34uext8Wtjk2
-a+QmURjHoSbpNN5WMzmHLhsFtKZFRbFh5SgGFstUjSOiP3suUL1PkuwFviRp58/8+J4cm2znQfyl
-5jznGEy5GM2u4N60vr5lrIwF20IQ1CYGMcgiSIsyDQMw17zHmrU+06v5YkUhhoE4eDsTWc3qQ4+8
-59eD4quky1QKj111Rz+8RHQxm0Rv6tl0DM0nQYegMLmjhNw1KVazlHpileuUXAQKnmAwUys4uNoT
-L+2nPoU8QNwAjdOB+8dWE4kA0nbbxDZsvE2u+xYXkg7GnubMd7RCR1g5V8a9bmZGtMo0PVk+3UWj
-jG9oCHHX0kMcH8mlIMl43PgwnUx8ZuG5r49cC8+CETs5P1St6hqUrt+WGYWn+Ya42k+C6s/7ptwD
-GhLV/OhpovSnJjxyw9JKp8tslR0NbdytWqevT0fY1RkdtQftHH93d7Al7MyE9KovWjQiYH1jsXax
-WowmDhKCFHf+Wi9nsiMqPy++IjmrPT0C5nBcZ7XGe1gpaa+QHUvFBoPiSUpZiEbdEw26Z4Wv3JzV
-jZnRSRQLm8arcWkgLYECQkXpPRAJUuZ66LAQUEUa9/SEZNjkfpVv5nnO3EPkHdm2p14QdQP2mm1f
-ypeKFjissV+YaBxZm2HM5gbtM5UOruOB1jg7cM9o4Ii9+x9s3ByKsJUImlFLZd+NVyRnCysCIN4Y
-szrNfoDAzhrWzvLXpJk9O/IV7V8V8OO/4cI4SlbGV3pvyK+Io89eEkdftiaODhg2i6Wh0CTCdB/t
-H76jneN3dNgAqpmrJmjx2XGPohNGZ/bhxLlavI0YVj2ryUY9DSbLXugjTy5MiLerrGo49myQ5mKe
-1sffffj3cMEYzhZXJfz/4+9P/93//nd/h2cP8sLjAt5dkTGslDWaoagNhbgTYalXQHjH1eoxDFyN
-eCEwhdcVujG38NI5vYWzjsCKyXvm+dtXJ0WXJSMIZUxQweiNivWg2G/7C2PiAi9hkL6nT3l4QnTS
-GUD7sfnvT7958+G034BPfbG5OiQhCg/hNBqEBgWYi9z92tfVbLZAVIq7xWo2aYdJJHMmVb5L1Hp5
-dgCUAwwk0sBFHdyNqB84n6KAX277GGZK1Q4/cASPLivzm8EoNEyJwLNFMmL9Cl1zgZ1iWbj4zRlT
-TQp3NF83iUkU+QMBher1ykNsBFpCVv82lXH2oD4vSKTSPpHiggaH6GL1ullqw7oBrgy9KdQ/lXrQ
-c2GA38p2CAc0Ca0Bk+52Dm4KMcirKV6nRFVR0SZtDa8xobA7Hd1tHYf36Zz9MbDxFB3Q1ICiXk8W
-m3XfSDGA2VwxwAjiiKzHZfEBNzS5XqA9O4KVb4u327fb46fl08hpWpYMTKc+sQk+MJuLO0EmGG/q
-9eJWUN1aQr1pxJ85OhH61TauN3lCP4FqJUZXKMkLTa2UEPp8HULiiHGDzEplOYK+UIS02H9q19Ke
-XoatyxuYhEmcNcgweJ+v1eUJ0x4uaRRSoauyeFCTgDHcDK6PwWZw5h9qNRHqb6HvnWGHTDbhw8n+
-gN6hdsEtflX9DGn/SG1m2B8VbO0QTIwFHBVmQMrLBfmmD7ZreC9y/XoYETTcq3cr4CQw0pUscNUr
-LDFO3QrRBwpdxt26F7iIBfqsYNpQgOdzRQNvpexYQqMU34vqlXSHRTn8TCFIv+b3P1ATGsh7Ezlv
-2quIRIbmnbtIZVKGFY1whD9TCEmu19XehpQI0ruKoQbSZJvlhIqmQoOGBzPg6UyTg6AbAecW5KNf
-OdLRijQ1Ag95OUWVFCS/XVBczilH1XVFAom9G81uCL/J+WyhyVxYHDoDUyxPwrYTeYKfblaNrTh8
-YNTWUY4QFRRmFvsHJL97KRj1WAXh7DDFECLVy0ZoIMEj2daO5rAA8TbkxrFfPOkXx08PsaDYuVzO
-XGC0k+n5eYN1Y8M1LbkD7V6YaGTckQ53+o4+63ezfurG9dN3ox+tJAaZd1PDZhz40kxiHNVxjvA6
-qJAmwoPHVHDmGFs/Xz3wLvuOOjjvEQeDj9Dk3OuFkLWZA9XRmB2Hqit2mJyWOVtFs4yxidnwzqfb
-pWLG4gXuwUqJowsjhW4KmJ0YPVdkL4zhqzNgKCv7sC7WNiStMxjOzGfm4qWpYHjo0Og0BiDy3cgD
-s6MS0MEK8BxpWwoy7ppVx2hdS5101fbiMJWOYH87tZ3YQzDdbjtnL256ybfYeDt0fcBAjV0rSQo/
-GJ4DtWcoM6JFlwPPdChRxx+fcC0pmTctaSyR66faHhGcGjUn5ZygwcEZ1xUlqd2rjbs0W2K5J6sr
-X84vc3I1lmeTtoIzNITNzRfgE7daR62j4oU0pYZfzn5sVqWXDrxuujVBalSOz4arqUvLqafYXrvM
-yMyiFnG0rv9Lv/A9AZM0Zp8LnCFpDu32wewo8OmkSPmEpnnZyLalYSsbmDYcAkteffnRKgNWk9dZ
-5lrhM6E2dbapr7Mh27hY+t51HNhbhI3YPTNkh4LjwH5O1K6ab3qYe7eJn+L+sVSKjfUyUoFJNRtt
-q8mQwx5KsuJig5BwPnZKbPzFheLVPUIIdt0VAz0cRf0ZT6arBO3/9DkWZYXtyw0uDhAtXHtPcS8j
-XvTWBsyRXuDYdkYdXISdu45nZ9CxYumM7f2I3mZDOPzXWpiZYIEo0sMK27094/FFixtriyZo/5rG
-HrPkKToIwsXsl7BQdST8EaGHV82EHit5+e7d51UCR8fhp4nAwG9R9ri/BooCRGmLyai6Xcy9QCSz
-K+FoQxuErajrIwwe/ZgVF5isNP7fv/lu+Or1t28iK1WfSh//9isS2CIYwZK7LX+6QfXEd9KowoAi
-bzvELwQF8vKHl+++K55///LdafHi3avTAmaz+O3zd69fvf6ueP3m9NWLlwX2q/jm5S8/fOcQ6rmh
-XMygaGPvESiVXqS6ThUF8Cz2OVnfydWDDshX4Zj2qEPJouzjf/7wnzRcNP+pVh/PTv+fIUnICTZi
-RICUF1s9uHtwz1uSoJWcZwUwXDGJKWyYPCsoD68jI53lmvQNtL1fLGr9ieY/Y/drVemTGA3pT/IK
-Z++rOd0G1f9KfvI3HwobtSKcQAIR9IuXv3t1Onzza07pGWRNR8zbMCxnjKYQ8v1Xi8XNOyTpYk7D
-jnOjyWRBXmVdcrNUNuxqtdgsWZNfM7tDb7rt5XY2vRCqRa9KX0Ln+Hi+OF4vFrP6eDE/Rr1ZaNo0
-Io3FoE1ItcP1aoMxhSZo0N4G0of5FnPM1XZ3vszhiVjRg27bgYtQPlR9vH1++itrw3m1YOkAhejF
-ARvfEu55Kc3vBQPhQZUCOKUjiZNODlceXiyEwy2LNxjPcT26qfztn4W07MOlEzK83Mwo9Avrk3SJ
-OSPyYCtl88gueQ3HYbRB4uR4htaM5zW6ICWmhgJRRC9FUm4vxm1zbckUFL9ykFjtf8BxpRAqCAyO
-oF3BqDq/TCmhG9pTC4/9lr49X125z45V0y+NepDUQLsh1IOVOSFo2wqjzE+c3ABfmUJsCiiEN49k
-wG/lcGkMdGxqduIZ8k9YgZIc/0WKEBu7ZgNGB+WxJbsvMJGo2tSex0UX6xewWhtHjlkqwnqr0/tE
-h1AxO2ovwskitmY4mY6hPBXuSVENidCBoIOvkquFcbHcL0mfeAG1FBxZeKF9/+RMmn+eSuD9yBQP
-Vt2HDx+sej4gzZAHZeIWoJ34xpEM4NUSjj34ijTV/o7NmzHQTGDowWXo9NaR4Ddea34t81pL9NPm
-CuhS9YsuSjFV5NOLPdwlGbbL/QgtUfQ1rhSXJML/lGuqppR1FXUvlJ3QDPDo43xl0GuGZo8mYVp9
-qAe2Ncb6PsHsu573miM8CALG2ZNzggocNqCoKbtjGqkbSx0NbyqcVT5Iu9yQSEZk+mDK6ebivbqB
-cjPBLiSy+dMMDdC7miPaioSlOfCsgl0jy9tBpsh+xCqjOnagwM3txB8pWqqRC6AbiHRhNDgC5jq5
-me/rpilW1RfW1zOYMQdUhPN20orcwvm9gxC2VlswZLDY3MPNnWNqGGkT+eBMSDepKd63pK9nA59a
-FyU5xSQou+hYh1ut+wRVriG9vaStl1QfBprb2Xbr73VHiIzkMAWs0XiEP+DdHULLwwWG3NNhdJEz
-2gYhIAWaAONxodN6FEUb6iR5pMlAKsHH6i7CkomaDViQg0ftTy2l2mqAdby7royZIzXV2e8jTjve
-1u0NS5fBA1aP1g+6NGa9HchZ4ZJiGq4WSTttb/1J1JXqVnoeB+J/vNo8yH1Qk1b5wog1oXKNKIk/
-76MTwZwGgnOYai3UC0KQGSVsWQ4uJIfNBZ8JsDrZ0DtBh4hKh7jd9j+OMbQfrSCNcYfjQZXYwDhY
-I0e4y6I/9BOicVNtw4mYpcaZWJPr9jg9vVADAm+F+8mPXmC+iKnTqQ+Nd0aI6cqzDRsJ1Z5mBPfG
-7t19sbTmlk/8juJqNBKS1uq+Y228Pj3ZQUEQBRFHK/Hu0155OYzYS/ZYksLS5dgXV9OBJiHm8kkm
-dtZ80ncz4aNn+Tk5m56c509/MzmDQcakwkiHYHS67dfPf3j5w/PTF79qOyipYMKi4is4z7rUi74Z
-o75UK6xtr5noaLUvfvXyxa9fvtOaKeIcFduD+9jx1+1dzchvmqRjb3bXsbOKnQawvJoeoYPVpBEO
-N93rYePScW+jR122VfkOi/ynvBxNZwhArSEMyVoA6ASvNSIQYvrCrwKjt8USq8tb5uzfeBzmbddC
-7e2iHo0L1Pg602I/b1L5B47ZLkBhPBhjvjQhgOCJHw0T94FjFwpg8Fm7kDB3KJK873nXBN8kYzQe
-TkMcyDo51fJDPTPwnHz2heoPuYWwuTj5KvR1TjPEFZ2i8uIMbBWyD3l5xvfw9QV+bRCG4PcfUOpH
-LGpDAZIgXwL+QnSuMPf6dikfcIXdLk+jVIHTnkvbaq2q++Fisx4viKddGc6o++PkUa/o/nj3qAfM
-vFzINvN35GC7QyYDl0ko0MdFk6fJZjVaZ+KoQAaqOIJS0CJQlCWPSbg0TaCPEeoE6zkGdkS7WlYv
-SYvqijCtFhul1Y6g9aA8RoB1Mp517p6jscocEl7Q23SrAxsPRHRSk3Ufpkl3ulZHw+hmE2VHE9ws
-jTEeNV/+HJiEMAfJ5Zr9rOgiv7sgKuwMkp6TP+26G/i3ZQjSRAUwfhn/9SLA4PMLDc6jEjjByneG
-j7EYZ7sOSksAG9TYv23vSIxHgJgWsFCAdx7zsmEg8NslbtUoWgOa8sOXTMM4/TXceGZwz6jmCLy7
-roDMtGUnm5rlfqpFGN/t6KYamY49ffLkEEsxafpAW1ve3iChoVofEb2f9rLAAUDl6Z5Wvnz5u1fv
-Tw8EAAyZALp5ItYE3jJZOw3XQILVxhjLSNJ8Ur2YfkOItxjYXNBpu71Cgh3DBXW2GE3qANfdhaFg
-trieXpBV3kSKmcaUxo0IP5gBieFsXHCGRMoHjDFK12W9pAnG11hmDzEvZnd4A6YXB8iTFUWFfn5O
-/G6/+4oACoE72Q/lO1R6jt4tTXgT28VIz+pvB6JjIDSnZaP9B1rALWYTaEje9oO/6agFsLsz2Dji
-oVizYpmkFRcYPAvXAkaQoWhz1M9WRqLI4kS69GCLpSwVKKY0HBJkUFHnxucIUpB/PytnOjkMTTVI
-npPY43Ie4O+pVQy3uddweSCW0Dc4IzOAJQHXvkg9EqJ1mokgT6kOk6hOFiMUITKjwGdJfpQzNud2
-MXYy9k6c36tXOj1qrFnK6ORBolXsllPiBHConKiMlD6W7pex1qgpPxHdpLSwCw6mBNOZGzwt1Gj/
-wCLWpghliddz1kzlkJ2BozubRKJPZ7rTR++TvkgyBaflJITj1ls/f3VrP8AkhA9RCxjfYWBtPIcY
-bfZeorQy358B71x20yxqXQ+nTlN54UkiUUziONLNB6TrrZGrumAofelOKJSLw6h5skGcQgYeguhf
-NM80DHSAlPPqrgv9GcD/ewcPpoo531OaLlXd65W5qODiNoUNoMTAXBCsSXuzvjz+WRtPHDZXChGT
-fDZ5crF5c8mXYvYjafGiftFOkDBx+BphYXlsl+lGWrf8Ms6t4oe8jB3gUN5Fwm+AdOmH5WP0Q3GT
-4PnPF+jK64wvrzp9BjUZSJawROU4Di12ub0Ue2LKli/0s5sJa3wK7Vwv7tMCOegjdKSpSLeAXdVS
-ROwBtMVqhKt9NZ8yJw4H/VmHiW3nPOyG9NW4B33GVHYQV2nnZK7v139V+ZC/uQJheIR2iL4YXgwy
-Zmgjdi7OmKCxGYahDq0mrskTKWQICNGgt4vNVPGySe0H50YPpETQYsciw/GaIpbbxkL8gskwy0u5
-4cC9Sq57bF4SLyYJ1+sisb43gaVk2SK6ahArjWYruC9GudUIKLGKODlxJhE4YkFwnTSEXvD53gSC
-ZVSB8gIW+6qasXGOTylbgwxHRPIjGYnf68qPgUalNWNSm0qW1Qo1exqOo3uGuDBX1ZzOHjEvtrg/
-zdU6MMmgXqStU7KD39QDsU7rZbDYAhKCfTXzQUvuJGqCLgsSpHjDrBCeY/+c7RvwoLj/icd8bsOv
-QMPiCCx+JPUjtLCMA7Q5zL1Y0cV5CGtCsueQKVUqrAPlmiWZer19KH6rDeVoOn2OKDwgX9sgKUH0
-OowEMvwMg8kYSTEXGx1WRy4MthiikCqZIqmtfJhRrA0V3mSSvFwtPk0nbAPITfBO4lAOFeNgISMG
-VN/7UeA+DNKsBDxHX7vpoPF7xslyQzedowAQA+BwL4MxhLNOLCOj8y44z/UMjkZppncAWwRwf2fL
-8+xZ4VvSfTjb0cKnDc7AgltAVUbQkcoK010khKv9rJ7kuyC3yFwnTCK4Ydb+Bugu03W3HcUgmi2u
-+FM7q5yQbKSi+KrvSj5iDvIxrr7HGsYoc63ExGdPz5PhjWjBwx0MznQOq3kMm5W6GQ5M5/hY6Nti
-Ptt2zrPz2FCHoIAFo2lrCifVdWlsq7DpHQp9rXZ4dcxacV2GbEWQft7W7AX36iQxB0mMhO8zYVdN
-fY6rEgoTyVQka6+pHmygjLALHhwFpwqvplk4PREMZGO5ZqWQLiwtl/ZCBaXx5dYEgkVLdbM6/BzI
-3166heBfewLKXklVQMF2GLO2Lovd2E8kKYZx2E1HzmLVJL4Pzzf3OhHpcV4rg4ONQQLx6naZ8zsN
-xdjZGOlu8Nu+qIFoUQ2vrcGPO746M+9st2GdAFIGy34thzB8GLhQhox3k5VWx8fidH4sm1CWLLz5
-tBDlhoOBHn1aTCcwgSNCcv72mzqIlYVHqVrqFaOiDed9BVtstISZJbRWOmTRsYdDkMr7IracPSJh
-qI9EO12TL6cc0TGnNUSLvzn6LWQstHaHS0bzoaUBK29j6OmwzTsmIRCANovqo0CZGPH2JCpFGUXg
-bmKnhYRySr25neFD3cabo5EL7z4MyXN2vCaL1JnigI5LX/eW/SW9djweddfxPcgfEt5z22nX2xkZ
-p2UT64Rv2AH6qlZ2CIKmhhpaZyP6AqaOaSDc5tEdnaoJzNZYin/y4/xB/SMf7Sdsc5GzPNSqPeMn
-cK7xONXhQIVOnHAumTHhBsC7JmGPJBS+44wLOA/rNIWEE8TziGtugHEdkcaiKCBxjb25Q0X1boHu
-SREJRKXBKhD9SysnbTEMI2Ec2cNVm5ORsJtsKr1A57mjOLaF22l7L77IpbvRMHpe41Wrkg6VcYQX
-XJkPTGGNBumIH15saZTU2pkmKRHXRLc9TlUOb6vbhdOppmZKnKHcbajk9i0lDuyqKuXx4IYhBxPD
-ZznYrAh8qpp/Yt8neJiuYAVEDiLw+qzz9venv3rzGl3GOufeU6qulix2D5A5zsL5RaVTTQZGdxPg
-jdDU8hNDlphC+0Wn07NY4zd3Zx1ISLXB3yReBbxr94MvXlpKAr7NhZy45VsalGg4BuGoDILBiUOh
-Ete2T9yp7hdwwr3QAy6cuX9x7oqrm3K92mJc5yaW1pJtK4rLxQAcLYHeu01x+HHcUFJyStuboeOD
-RYll8E3b8rEdopuuWJtohyUtUNmL1Tgj/nY+nt149ANph86QzHSTJJquoZrGaPN2liBvciywfDLX
-gqc5zVSbF5wZ9eWzpnSwEm06Md5EWQUMXtts7fZ4s4Kcg3Y/kqRa1P6ntDTQ7bZk8oCi66dojHpH
-Wwi+IX4CKq9+Zqq9fJbL92xvvsQAZr7A4wY9P0v8J9KlEclyhDy7VS+fum16+SxFhsCY2tXwcgKH
-Hon1Z6M1yhTJ5+NuOv/qWTtxICK1GNZV3o1C+3zkr2ZxILanJdURB/R5lrzeMdarLxzr1WeNNVvv
-QYPh6gTUlv0PyEwuajyb7kEXdiX8K0eD99tkc7sccslMcB14wo6URIs9AkJCFJxRZVeNJ8lusm+X
-2TEsPLvBTfG8z8XK8nK5MwqfMUCkDFmLaFUmy17FhAxtMrg0igox6vqA2rxJ9ZKUxhkIMCpETKsx
-nigfeXBBfFA7+6zFpVsVZGZ0uez3QnK43F64U6seA8+2ZmY2vr2gk7LQNp4GPDEwLwXv8DlRlEX4
-pzmqSkRVS7KDHhYWNSb1twx4UjnPoAixGAy93qOjkI0H6ZI82xYURhrrgZ+C3SIgEXCDR5u0Qtgd
-dKGKyrnD6/N8TpFCq6JtUBhKjnaFoAl9Lr4X6fh5gipy1prOJ4s7BpGStkzroiqvSgrEy+bbUGAO
-27ihzsSzvL8rGoTWUd+g17p0CWYKrfTJojIFICDBiZ+faEGtrxfhikKgkIpQe9BAP0YJoS8Rt29X
-GSpWOVE3sWvIbDOuUsFQxGQCzSf5PROyXuPyjIdS5i9cq6ZJkWGRhhP7ssWJ/W57RIx/TvXPD1a9
-f1bjfwS0Jj2wE1z1ds0zFd5OOp6ZvOHYMZMErxwIMehN0/zAOEuKxgFuWLLt43HbVxg3yptwPMyo
-UwKmhm6Jw/nm9qJaVZMhqsDVgdaVddzuR8h+1VIwd1eLBRpmDqzRXyzftBLJwYO6A/Ox7BcJ5Ttq
-EHQeqQE6CvznlzAEaFKmyu/7XpQyY6obTu6RQ3IJ3pjG+moGZaefNNSIre8jfxL9FLo13rNL43mw
-kXMCcd+GZcdJsc+enO87JfhUagtpauu0GwOQ5ehuPgxWBqMk9iVs3RBPd2QLnz4pn/zNNmhIK1PC
-iOTsE3rbFsKGF0tuzjE1mBWm7V5oll7dxkZqbLnRlrwWzmr+aXGDookG2PDwIHXjZ70qgW3G/MAk
-BItYnIq6XEPftUzHNU8xqVfIiSfDHv6MZ84LH/bNl4wB73Iae6aPixXPgY4RUJBn5U8bYO0QXKiz
-3C63Q3QNmQKFQ0z6DkdH6/zjT2nzCWHSiwHQEUSXrbrJEjArAMs8/sefFhdTDicnqEjVJGxIcOEY
-wOjDzQXO/Xa25Hv21dKOTxYVQ3li7EbkWqZAMIlz4UJ+8ZPmuqwWpX25qqqLetLu/XW1umIs2L/A
-xWWuqTjbZXijhWEl81upyy4iKWogf/mWAxfJXpS7lNWCYp9g+SQya0ztYhzBzQl46QneMHYx8xot
-abMuOYcz2Wzg0b+pGnh0Nfl/9fr05bvXz7/HIT3G29kxF8xnH9odEGK+7DWSPNNuzDvHbsvpoqxH
-wLCi0yh2pu+gVVKD7J0BDyKAHotXERhXm8PAY64oZM+OVB4cgxilAx0OLYkJDL41V8R27nQUbSxM
-c0WF7XHwz0S9MuA3ekTWOSRtOhqwvBAJeV9v2d1ST7+jKEiJArCphULG6yDoyqDRaMLr40nsrJYU
-afCs+1IyhLxC1NzA3BTGgvOo3h3TLIE4DdqGF/uiBmJMiGoemycE8OZrMlCjIu6uF3BbmyzWuN3U
-F39EwULRN7EOZiaDQADF2A7rAHPL47XS6Okl91hsOJ1BUExJP1AahYPYdq+RsasmebcTtVxRoxXi
-AnHNqWnLcTGr1p1aYgHBUlzU1eHxlL40LC1qcbRn6ocDLUIMXXitPjjYV/x9oLeaQi3pwikIiUB/
-kN/nskQ9zHQieBrtk5N2bwf2A2RIzDpmOWjuAOsidN42O8/v+AerE0gR7MpitMbIIT8Bqp40qOu6
-EYF5i0P118XTfa1i1eUtz/EIjq55ZRd90LJGTaYdbNeiYtZrcOE2ZAZ5h82qCulM57O2cSdDZ3Cv
-7dtzPXZvWJKHezVJ21VNpB40Ot0VysH2o5Nvoi8cSX+TMzLv2MjTENjFZfySm3cwjdlh7XaSOnw0
-Uw75TFt0oPSmAYeDishuGId1j2VJ9zLSGP6wvwQei4wzH73P5lfND7Wxr1X1JYtVx8KANU2WrjXc
-awmaQjDL9kBjCwL55IyusR2DJ64l+MhtGTyJgkBrm/HZtZuiJeuSyNQf2y/oOhuINZcWmyR0i8+n
-lFdJUq3fp+Q3ZukzuFcuoErAvDA4xsk5L2+X2+CI5YpoBB1j9rG5ugQJzXHEihtxYFQYZsEJlpcZ
-7dPqfv3qjUUz47EaKjZQqi14FjEiMrjkEssJ2NyZC8D4JGzlO9v2nAJB4lFF63TkmE5o1WrEOA1E
-/ctsDJO9KCmfRs7wRHvuhSG9/NCUemGx6EBhirqqbuxX7hLUBAXr8Ry4EaYYHQxSgkBGDOYrwywD
-bGdXMjRecooYAUI211wglubWsl89fjOO2w4+xeePBMM7V0IoQ+PPOWwwWSGD2LRGe767vDBTU9H8
-oFY6ZQjy4a43mMY4o9t5GK6Au1vcNvXVVeTEUuHsNerNnqV6NUuPs5o1ZJWwDKBa9xREhBuKYkqC
-6NiNMcWM/+SkUBQmytP7G2OkUQNjfDSg7cvNmnDoCEokP9RNY0yr9Xpxh5alT8la+1kqroxUjj6p
-KB6NOD5Woh46h25v+zkCum+Cft+veXpC/11DwAIO6CBgp11rZr6gwaMe01lKhm1BEoZC44ans2da
-LKQ4g4QWLTzN04BoitPUru5HY2HGT75osTmOSVe41rpzoXPlkuWQijkDDtN07TNoXZ/Z2iY0NLlw
-hZO1Aw+S2iSpD+lEdiUE6yjbZby0HtJlv3qVN3WJPxsdDY2tUMmymTta9IAk+pUYtJAskOYZWvLx
-xw//wULafzw/Hf6eofoVmZ5j0bLdOLAKDp+fTd1OCjwd+4VzfpMLRTFbLJYxUH8rwFN3quUGQP5F
-3Wcof/jdcpIP8ucytzCVu/zAyr8fNF5PXcjjD9P76bwl4odXlNjIHqi4D8BRfTOF7SRl4TNlS4qJ
-gwCsblz98PxqfrlotRzFYS1Z4nI6jEDee17l2modkfcgHro1S+PIfID1pDhpLfEoJIhHej59+f70
-/bfPX33/8psC/S/oJcmI3314e0ovn5mXrzG8xLs37+D1V/z6w/vn373Udz9ttcgYd1V5NEgLN/av
-Z6PjPz0//s/D8x/vHv5DhCXfEKpAQhTAV3Q5b6P0aLxBKed0RaD0itizReEZ8Odz45ogoMMb0rQY
-6R7i1Q7aqJkyoQi6nfIh2nW++M17/DOcjFbjGp/+DA/Xf1EPjKOoQTz8VLHUQDrPtmsNLsvp5ZaW
-/aJGoKGKIF15Acqm4NiwtgBuI84a8tmmnWfthw8f04g9RNd0m8fx3T7FcouDBL8fDgXwqC0xxXu7
-I0FcVfMK6ArmVg0iLiM4WXnvFDxZdRAsYmijRdzj4B0f45KkiAnoRJ+PENEUC4J5C4wf4QppJwko
-YAQlEJn3WtRDFKOR0KiIFeP7JA1CW+I9Zxp9fDsiBVSHQKFHn0arQXu+uU2rDboCveD5AvLuYl5I
-SaaHT3Y1fnSJjjLcagwLryIgbDxjH5fNY32M/PO4aYjztaJljfPuKbgACsHUL+5GK5xxMt9C1EBf
-/+5FI6QVF42nss3hRKyXoW/kjjAiJoPpFXcHXyptZ/U25FqgPRpbd5Df7m0090FzllskCfvGkGuD
-IwXpDB7nqyUaaKLOxUFcI+lnCxYYo/ENBpcuG4ahfXzMMvG2r5fP8bZZghw2JWqDyNJJaTBh5yk/
-6kWXgpgcU5ToatIrd02Ds/3wA62vzPIluxTvK6Jto0S5yUCkLQu11sE4qDMgfJ84OiERxilsStTS
-7l1bFIudjSRMdeTa41zcKc2V0iq1SB/tXoXOx047ry/irjd1Oeg5Zi4w92I1gjXijyc+kKe1SOM3
-c+qyPQFJjLzEuCty9ulqHhQIGNx9BcUO8J++erIuVgP31KeQhINvKWaeYCYM3ls4A8VexLKk6IH8
-PShYjvKKsVcL4undwiqcXuANb9tyriFk0MIDXToKnriASQIhl8SGUGMwfKKiJTinl8liaqL6vb9B
-qLfFPOBykLu8Wo1uXWCynUgSCljgcRcgocZiYg0Ef6gcMHagSEu0ap/vNBfX8jRX3ucjV8TFPgt9
-N2Ag3agmeR2cI034BwxaltG53dbk0kQGdGOyZOn2zp6elxLFIDT6i8PDtYlrRC0QmkU+wKBmcXTV
-5rnxbGfc5F9X24vFaDV5hZR5tVlG7luQCttpZFovKR9U84rav2/sb6T84VQr6EqZA/l7aB8Mmx11
-4m/Q5HD5wf0WWNBhpfm0yf1wD35Wy/UuECt8pGjEATVCwffbGgjXy/vpOiMbSNcGXifxEnhSjEcb
-jM31fgkH3GJD8QOloJ84sW1i948CSbfyv4alf3LglmpAZclcuh1KS2aYgNI7IBRiu2vhPpFEPe1l
-gkImRTCvnRZxcuAUmYtd46g8PYxwZTxyW4HKMm5DeJYwcMiQ/KGC40TyZ8k8JZdDyWb1pMpHkPTR
-kMMzYI1uixInYLqeoh8ycQJe3tBSIBayjsFBVmOHBQWH99YxmRXjWa08Cc5kEfEGLuw0T3gAx2WH
-Y9YERxSWkqlOiiHbUy4iPIQNg51oHUhkFeBuVffsdz0NLIWJycHQLc4+yN/ImSl+ZlKjxTMOvz1F
-KF47aYVRdzelEDIUnHdtYZ6PtDQqow5LWE+BH6dgfSsKwFEXs+pyvdfSTkeFYZKmj56ex+fLq/mk
-um82sCPBcsug/qs7rUX9N3XYmEMynIwZawY38Fgvm9fVUBc9AYUMpsQpajkDfQhtNKUtHAkd7jvL
-nIGHpnJnauWBnnzOgCrwYrGYJ3RZcSuVfZ5D9pK4/vW1kWhRKzkj+e96p1FUAujVgr4RSIleEIfu
-SkVYfMtsScFPmCyR/MM8zzaTCjaEr80bZUvBvZY/7SS1OX1MwS5aQijGswp+X8R5MISMFzgPirNx
-696uFvfbRlUjI6Jl3HAZLLoWL3h+2Om1bvGkxYgqCDIYhVWUYGwe+NiUSatWcrUC9REF0FXrIIb7
-7WaclkMnAVsyNk3zS4qu6Wovt1l9c0s2wJSM1mM3E0kjaicvc74CwQ4Emrzeds3AkBoNHcgjZS4C
-VSOuDdnbHpPvlvDbFCoxqtiH2GXxtxlDXS9aN1bm1NKvgWH8NQe3r7tWHN1siou2a4EV0YpRYPF9
-yb8Cv4Gar+uYCI/PLj9jGCWqFcE0VzfVqu5TOPrE4VK+os/tdglbbLKd86s2G//DdPyZqiZsAaIs
-f+lFixIJm2s/VHyAUXWwPF0TKXPrM+wOmULCCLN6lbKbttVp2wQmuJdGVU6bomltkZNqtqO7GDyt
-qVt2woGSNwLDT9XORUNh2Zyzat6YcaZB3ZN89CKfSfFDXWuDtRsajiO/RxIWToA01AlAaPGheMQg
-+3lx2HpVVWyZ4jPUmwsqB1Yw4cOTjT6s3T4VU5NpDAzFLV4vaPXX5a4g5OyvyqtfJEZMnOSHsnyR
-gfDRCXA2m/n046biuA4MPCJ+mLCnSUlwXekeI4iPYAslEValWJNp7DpNWymyddIdLps7KWMro0nn
-Ak/IbqATjArAVMCeIaZIFcoQs0goJ/CXrWkvI0seJ77RJ1+4glja0kmTQpdEPkEZ19HXczeqCwe+
-xiq87ng0x+jPISJ/eFA6+ks194sOf3E4/rYJSvkeK2mL6kNZMc1sFGRC85GBgiHbxmOBauDgOKj3
-xfWnBmH/ogeAh9LD8ynedbiFpFd1Na+nJI4lT4slMhQMs4mRN7CVMvN0zjV5CnjIT4LQp1LCo5cV
-Ttgi32jTqiNpVpu+Rrc10Yu8liXiPlaTskCNLGuYBQiMSrrYFjUqLfzuFlUyfvyBsIhooQbndZs/
-CGP3gqhLmojeS5pXHukzTqafJOW3eg1KU+onTTnNtg1fa618QUhqhNftyARsvAGu/JaGIM+tjSlq
-nz0Hla2wAD+Q6CeDPPuR2PjMFsCIjZZT1B9128/KJ6gJEvd/ojsP6Gbo+R74nMhW2p4TGi63ytET
-6Djeh8qy7JnIMNzLXDGG+BPtRtuFsHvK083qz4iZgh6KKxNSWuMJOSSq/i6L9nC0OxTFWkiIc6th
-lpRPN7IpxRswdaFhn7OzQW6jj4qTk+MaDeiNVxfkQYEgXqvXdXxGFqMJHIF1HXoGNd+XKao21f85
-XJPNVwwEyllx16exf71Udt+KglmkfbbNkjNCKnlUoBcGut/riWnnvProTnEKNLQzsjal6BNJ6mVH
-JTTzUoiEcLmgqRYVZF5Zb/XMAa8Z6Jco4/3hrV/5d8CyzavG3jnYMMaycMXY7Nej+rpxQ+DHbte1
-sm8bZRlA8g/KOSj4JOo8tDsVAZIh/TeOdriluHYVOVnAsHv9jO7Gw+p+iMtA3wU+EBuyXAn3qM8e
-h+xB8zfJNGUf1Qy0vwncsarostCVTGdPzvtawNlT8/zsfEdMJG1Mb++lxqTdtY/xDNBR62Y0QL79
-wFVV95nbz07thR/WAG9B1UURVWgaeCmlt6PyOtt1tJ+rdyOoo+RofK2QabsdLIknijjqutgsSZ+N
-FUdYciOSIwtq+WJBZcSXkoDQUkNSOGOhj1EEXZYtNi09KioPHWyKJZlidKnnnBK+MAUhp8/h+JHq
-usmj5Z4pVurRwqPeC12lrPCmgbIfKvIJAxNgF9XdP4i4KnHi8mOsH5HeRueAfIqLC4uUp3iIdSj5
-q6Fuy9VmXjkrQLcVWLPYSBOJZ5FNAkxTmA1N+7ezKr53XjqMfKdoupzeG8S91l6t3uVt+S1n+R44
-/82STvo8ZdICSJ4hIenJtLWXIGKEKgmEDqLxiDgI6lJ7tphftXdhzXCQr3BQE0UtYzGxKNu1lB3e
-yIIQuDDa+pPRekQrAWMwsVwgiDynoMnT9S+CXmFb86Ff8n1eX3AWdIqDVq3WGa84SaEJDrD1dTnC
-QYsmSLrdleCXNUEl9Xd7abLZMge5HmT647/uL4jmlf514k2/thHZOlrrKixyYp2uYcyQhHt5j/eJ
-18uDCHyK9fVqsbm6LrwizVmj4Wxfb2oSipHt0mxb4JE4QX2UEyo5RaFtC4sEnbY+5s3nYp2Y2G71
-XbR3qEMuOEBf0QrDXGUNwGvzyVUbRy3X2y5DH7ONlJ5iaXh1kplEt6i8cxcLQV8v1uZCLu4mI1jK
-sPHW9nZqZ7CRwnEflgjuieTXNkSyhidnI5GScLB+RnqJfQWhdxj6lL3qAG8BidS4pdeA1hkR4ogE
-y2btRezsjmkkMxOUP6J5WbWSyyELaMYYiIRgBcmQWJWlbhE3ozuETHRn6ARUcBlVVHIOfsmbWSMF
-9D7/pEqjeorkrNccBCvSSjHnKhWZuXLvQq8bm9Q9l+MNax0HjVohvOmZvCZzxjPHVjIPaxGFHlUW
-2fP3cpY9ZUNZglLsxOHfvvc0zj319moAP1sg7WSeoc5ShgyOufv7+4IsPBXyY8irEMU/y+0v4ijF
-GpxJgiqGMdGITWrkYVfVzBcAP9YL1S41TCCkyUyWRkuetTKvCQcF9u0MLS8XCBG87BftxxbLewM7
-r2uGn2+5vdKNuBX9+yhkiVldVve6T6YhLAIuSMut5fF9SrvfZ3ZP7QiVld0RGD2cBoOgQB63k4mR
-wuVp9wi6e9eMuywLGr1CzLA2K3mU+Ds7HZajk7BfjkROjILQmAEYYWnTcREHsqCrD55aFTtEY0Wj
-AmFLgE3SKzFbfJIO4XaKlmgX8ICW1XDQZUusQ4bAWHV42xA5BMnKCG7BO646uol5w+rRn4oA1aMk
-Lmu34E5zfY7oTvP4CFeuH70EW9StMTYI+riBoSjq2eIuHF8P6I1HWqTYH6LB8nAYQHcPTdGUqd0v
-/vyX3n68G7f5KNeZdgYO9PMc4ozqdXcUtG9zmSpyCOZxK1KbjGjQu7okXC6UHSF34l48O08Mae1s
-ozdpPPFWiavfnBaW3NoTPpYYNGT8JhQAW5FdBLeVSqlgzt0HkhEEm1XtsVMSIJvZ2Bsldr0Rn1RP
-r4BLQqa2mPps3tg+AiPgmBTk0tsRAVfdQUgrVC5uv2rU8SbmNKbtZZQ2gjgPT+Ld9yA5pqODZJDB
-nshabQZgFaysAdaTC2lHILiRNYY1V1WDd6+LdcZeiTMzI+4h7+LNpuhniXIvCqCQ+gRZVYD49Tm/
-OWt8lXH9S4IeKA+rVvFZNNx9dm6QJDRyC/KkdSYIODLi/CNsAL8rjSmwjevNXxGZalSzB1o2tLed
-nkexq4B3obBLwxuvqUdawjVpRqdUCOr5eqAJTvLqiWBZoNeUuNGS5vbBxLmyNSMJJpX2Wh4SMgQ/
-Ir40P/gmiFyNO9ExN0kg0sjEjqsX3bIY2hnZYajWVs46Lc5Z5TkabebBLp7IbNcHuRPG3EUUjWCq
-BRAxtqhrPu2DGEfDuF6OWqCVhasib+qMdBOdWSWKkKdK/VYDCTNtlYBEg6i2LGp/Q/WJfb6lhzZo
-nL2nNo626ftJHNU+L66zwPMyAQF6sKeCiGAa1Nvm1SAR7TM5mFBO5xO8EQV7W0nkmvE6QjyvZOlS
-+9aJmZ1LwjEs4yJ0pWSCJxJfvLrKB8rT8mSFodceJApDI+cboaoJ+rEzMdrRjiaSMuCjuOmZxcKn
-gJNuJSvFAR0HmQmxWy0OhKA3ldFYteTjP4MAKKxhso/tZOtR5eY7xaGBwSVJiydd+bSKiYJUuTtf
-8IUXA40hIuIWRUYPVj0iylpiKt0KT8jEIYxgqhlHhl25GNSPyosAK0SRrlsuey1BADYJDNwsy96D
-KncpRm4KxcjlnTSfO3xrcwGMbUAzMoXNGiNEVKZBgnfJtmrrOnPKwNuEuOBMnZzEiNq8QzJbRCkN
-qx3ozBUX5DbHQG/I0kxqmi9OgfbOHiENYC/baTWbFPe5W5XcKNJ8Rxp/GbhxjLQ8oriPshP59KsX
-+Vxy7WB/29mWFGROrI8Wh875Lc/DuC2kZInXcOLcmEFgOWRXN4PT7MrtD7Hk8LKOI3ix2kOC5bLK
-d7AIRIjkcHBPgavo+KaL2PxPozkV2DiCycES+kV7OgemcjqhRftgpXs+VSIoi0U1fAK+bI3R1wYs
-ZC7uT4p7qZdAoJ729iqIeA+OBypvpytBv7i4ZEUVLBCguhHftHsRUxy/iKPbtZIzkV0VB9GNovRm
-B4QY3YvJqqvb0JoU8jluUbI+OPR1juOdWt4x4GkTsZ8LbGO46MzwTMXAtGz28BlYHxTLCvYaYwSm
-5ga5M3boRmkQCLkjbG9dHl8yJLlYJn/DLnPnooNibU/06EKcDL5dbYzXhHU3j2x4Xz94PeRG36Ea
-NE7BTt/BIZwwMCifYM8Q5oZMz30YiTSGaRMSdibBHMvRRc1BkstO7xwN+yRGTTCmxPLAoN4L1iMm
-juMwCY4GsERrwUkfIVQ1boOReNVwOSgFjvIiLSBzY846m95UhSKJFHfohIiKW7QQgpqjvLC7xoSS
-hZihExFJcabReL3BSxEXPUX6TvEPOBptLGbdwLrBFlPQBzHfviBUTzxFVyhtiM3ioyKkr4xVkijF
-GNOpFKQ3iq2VvR0Ftpr7OYoJhSJl6BwUxEUj4ZQqsZqnCY5rbzPyZhFoxjdpVkH55rqAcfEAUQfO
-np2jpgQ78fbX3w2/efXu5YvTN+9+n4MpDxcy7CaKzgrd7p0fgtkm+SH9ebzR4J29+iovkGMbjHmb
-k1cIkvV6g9oNlt8QhdHwARReo7qf1uvIQJh5V5RCB2xH3ryFt0eO+RU5UEQeIk5GLpxSl8VYz+i+
-9M7o9FPtx8Abs5Kq12pWPjMLLuXA0F3UkbhUDkpDhXuHmPbk+u6xNNo0wHQW0FYszO3qEBMfW0pj
-1qarHGZ+VKSDDaMnrrmp/CyI8xCxNH0n+085GXt98dnaaZbPEpRQIcaW3DWnsVRE2mKIaUrY29PA
-ggVQ6LD5NcK0Qnbghbntn33Np7oHxZOcKFqVLlHDz06enmdjPgcG0odPgyxip6NZrDyTn72ga8pW
-RokeYL7olcEq/FEXqpcVzvD0xFIwvKfrFEbyJ73Qa/0pK+oNfuaEYSbrGxXCvca4F5mOZprjgDVR
-GnBYkAjpflOrvL4rAoydVAeJs9KWsEgrLWC3SCstZ49w5XpUDwUbNItnG9xz9klfoK77PZHDc7Nh
-JTVmrZ/dn/f9EtsBxhr2IYvEygahozEzGt/UbCDAcHLkKtru9tpsmUCaSmdZ2LTQbJ0EUkKg9jo8
-PRyAp/TBDwhWkR8Q10kfjjHybPpbDl3jotwh6PR29lq1VajMVX+Q8Ta3dFdTtiVV68v2e9oBLNWZ
-vDFaRroT+JIdeNs23vz/p9vnl+wefagcNY6/pDPMJfSa93VOSvg5C04Dql3WKG2eL9Bd3LmVop3a
-rIJ9ixbcI3LVqNZjRWRFW5/RvHIudq3IWhFKwmB9yDQOR7W9NsIXmAP4t9SvjPgibTBIXXHLWvk1
-o2nIlGM6X/f6WLoFd9AUrdbHf/3wv1LAVRb6luPbCQJcfhyelv+OwJdbLQucLEDI+hNmRDIaZGUy
-pvJfFJX4LQa96xdvX719KRgXXBVGyLM2INzCDUegEyh5DgyBuJvIVnQgB4U2hCEXZ0S1lS/FyJu4
-HqmgfMk5F/NvWQONL1l4S9ctA2ssUVnUSstLefkeDZV8IkHyvOhUq1WH/ILIsklNrHXiKTOywcfS
-ARoUU1Wp64Pc1/1gybXdxSl0VaroQONeP9YRYi9MXjMotLhyhk2atNvj5sMlfkPhWajakYmGSHcw
-WJ4fTr89/lknNDnTlg1MM8u3GqoelsN1NZtlzPqhfejxM5oN59UdIYpnEkmMe1syrA8X8D56zwte
-w53jxtBVC4OK44GASA5MBwfDxsXEi8fPi69OYCsjkur2KxT0w2gV0Uj2+fMzHJlmXbiM8VAHWaAL
-s6N/VPyR4VtvR1s5vz9VVvJygKFcQ308gKV7C5RTZtHTF4onKZ3kKPQ6bpnccT3Gh4+GXMuhePOm
-HITb21+Og5XTnEugxWbK6PNJ5AkQ7d8up+oX+peWoa6KAPQII2eKdVhcCBA92qClNeLPmGi5ykja
-la/SN9hZtYXWW0k4GRkFQbgLP5qKeJLdz8hWiyLewr/ha54m+Dd8zauABsTgyax3+KZHI3aCtjdG
-KWt60ncN6rs2CIA8kf6QlG7g/spo8sSbdtCwLTx9eE46reAnYhGGLfJI/NGHMrTISyvoNORil3vM
-Iy2QjdkNd2a/ON0uK7twyIHu4x8+/Hs8S8UC8OPo9Onf/93f+bjnLd9g8YackMUzP2pdr6ENZv+z
-cS8ngTH/uIENFQWETD+jPEHeiqcROv/DbwYAqhUDRjN4GeQ7jccUZ8966gTeGFwUgt0PtUXDYafX
-YDDMqUubtpuIw7KFO4CmpGyiFm5qum1VX6ME2w1Sr7jd1GR4PXLNyNmWS6u0/35wW8amNE3mAIYC
-QLKYqFQfc/Z48JrETR/TTxxLg+k+4yJ97CVVZFGYIjPtMBPe0nIZpt4e+9awNfbGVHwdy5o4Y1ZR
-bbyOsZdn0/O83tt2c9okhsfCMhP/fr1YvmK3Ogvi43CmrtbXw2uMFrRviEyn/Y5FE5cB/rtjn8LX
-Li2Ei1kVmW3QdUa/JeKm+0aVQyBPCFRvpmkzNNKEf3c1bTb7sqbhNrw/UAsYqOdc82qKHI6zTw8N
-jRSiORxT1Hj89whWJ2ufNsTMLxEHX0CNUK5s0CCoYNc/PJ6XYvsI6eVJtmoQsxAKlgoD3eCUEMaa
-lTgIZAO5GrVWFBCQi8ZgXdtek0yQhsv0vHtPMA7bxGYqL5//vHp2lU8RgRFurluxxyXcGfWJFon8
-sEvlfLdRlYxQsxrMDz78m7SG/AXdirVTo/kaC5+VuCC6kq63o5mSshcaVtM6iROm+AX7VokCFujQ
-4TB2h2ZcMc5XonKb2Z1TAYMJN8c/VXPEsB1ELxp2Et+/q7W7eUe5gC+z5kwthyWLbKM+m1b8clRX
-jq+FNMHvhjbEeXx6X+53FBMGzkyE34Y0we+GcvnUDVI2ekSfosOxZztxnnAOxcsEzYfxHTtjAZFB
-kRe+c2F11t42jHDEC7okanCCGSPrFS/e8tXuWfl/USB0mtXFHdQjX3xISr6LMupfgLyQjEbEwLpO
-1J1Wi4FT0HUncWLpGzzzfvFDdbtYbYVhDYoHziFzP0bL/O5X/UIJJDLKBZoD4plJVzZ4KP6Z3g8H
-+K8C1/IyU8cXBZ4i2DR0Pb2DNpqgDhjdnd2PuedDguVkLClSxBrLjsUaGRSSnelFUsg5B5GJnU1D
-US7lu0ChX6pM5fzNNNxL5VDehxfe5ELcTJgbM2u7LVHKQEJhu9MAmlxqzcLEhGNFEZ8fuWlN/e7e
-Z/A4fUX3Ojw2Iw353nzYPK4P05uJowLhN/1thSBy01vkr7oZWKUIcUhTEMOPeYDbD7ARtURMSCFI
-PqfMtnoBtrNl0ox9ZnmYJ1cebhOyLruEdFezxYU6ZcwW49zqpST5VSku3bhtqecIRd6NjAI5+6Bg
-j+8h/gQOLXb+MykYRyOSNM2KwA2elihly7ZLCqSqPWOJ5zoJCbHj7VV7B2pUTSFd0VUR1QIji9eW
-9eaAZGo747WmAmNIFotUHhx5WDPRKYrdtAYqB8R+uo5ML4iedccLmR+eGhsYGlqATIhRBoSIZV6+
-jwsBIZ2H6FDmSYMQyKFKBhCcrfb0koggkzovYMuQRv/D7jubXvee7kVdfYRywI98jEqXyHOVH7+A
-dBAJ+GzCIe3t/fWUYXpLpOG/P2HYBwqdoxSfBwvdWB4+UpFpiyU07kP2TcrAnyOTdAv33NsRb3jW
-8KA34lc3ctpTdA/kVkP7rJrUhp2iY0lXB96SWoYriuUbmIO/kMU4pTaDQJ5InR/nYZHwurFIzmKL
-xNSWdtAC7+BfUwjpxW0u+k5g4l6gHjD5d1n7MtxnCEjKpl1neCxbHH7Odd7bLaFSu3dzreWYb+j+
-gr40oXvXaD0knW4udPB93qNKuAvNmdHNIugBB8oJjNjib9S/8LNpTigIMPlgTqLjcMi0Us4mfxzq
-j0NXKPGnDQt0b7BlOWrRxzt7qHGgjwNO2xHB3tLnhgOXD8/GmtQhPygnOpb1BG4sxBUQNwAH6Vkw
-4DrWOy8BT6xCRJEmx5gZ1mu/WF+YSdo71qKh1pOSSuiYXCjJjVQ+kMacn3ITgfnd156dbRGtsMnV
-0jXZMEQHFEptQ84cdl+UHTXnGnUIjgjmAroPrdWc0XizQSzG66w3Y1RWIFTdVniHaiKaYb/MjUlc
-3YoN1CNLtOSAGg65XAGbSQ6jRmtoHz6sAXkzvRCpZBXScx/qM6yTJR9uMh86GL2PFx/+owYmXlVj
-RH/+OD79v/8Dx4Jm/DxkiFxYUUE848i3io5dqXKnKfIzxXNehOGlBKUOlRJUb3eFQv/axAtw+pHf
-Su3vqD2Vh4Nj1bro7Um+AItOQJhFK/Cw+MMf8OhBffUV3NGZ7P3hDydOCDSCrkj/vDklmQ9IltIV
-NJ5Vo1WXctOjA2jT8cGUlPp9VRXX6/Xy5PHjCbC4JQc8Kherq8ez6QUGmHysecrr9a1Gu2J0RXV1
-Q1sIaZi0ZVpFIDVNZOVZ/5/sZYenwbaSb7mzCUNVITlz7ZFXZ8bC032rKTS44Ft1RPFsSAqr0OqK
-/HywlNi2OlML3l5cQwzjSMsB3YfpZjL9U4VYC6ZorvUO1g+UEK+RriqnM6VgllJ/9sKQZtV4d2RP
-SfjnjodCp3tI56SI3vyFC4reEkMJLGKWUyTMI6Y1tLIVF+4Pf8BcCXv5hz9IVMvp1RXO4aj4RiqD
-tSADEi4XGf1bxdIXZN9gYcy8DS9MC34aVvfL2XRMkkPli4OSCPzCpOv4u0rwfgeDPFNT3ZALi1uQ
-lGDbuad5Uau+uDFpG9KxLeNxC343pJdkaajSFUmks2sgH0bxc9uyvz3C2xogkSO+tgTZDmdUmEF4
-TosdVqvw6A9WxWQ6UWusyQZIfLqk0SKCdlEv2LsrlLeLBYpQgYnkaLQ4EWzOvqP1feKn2X+J7fbE
-Gz6yc5WM0Ct5iuxFpDi69PNjBCUnteC0ymOYwBkkivVg8lE+aY9j+tfQ5V7DGmmgBabGeh3a9pMy
-8HpxJ+m7Bw9loBUMKtBdF81eCjxz+LQdACzGJjuzyXB3b/LWs/keUtU5zzd3Hc150P9cwyKW//il
-jUwaFFlDRSX4U192vfnWQBfC3Da9F4Yslh6teyCTGN00IY3hwlcy4VpXX8iD0ShdeuPJUKsj0Rrv
-4lCNsqYyrs+1xpfp3pV+5FIo8NhUgZYods4Edjz0QvakXyBxc55d2Fp2vqc7km+uCblDzA4Dgq22
-SdidHE93FHBYC+CQNXsprGsm2XAoj5p2OHSpvWCWXkQUxLWambgzAwev3FUSESIkMvFyyqzR1sfJ
-h/+kd5QNUDJ8+Fid/v3/wZeUybQeo7nVliPASkzYBRo4To6F1y7amrEtWNoEWMXXFXdb4fg40a1l
-OblALS7hpa5G8/qSg7pIfCg2wNbW8fbVmdHkGhwt4Csz4XHGHqOUd7CXgWvr5SooVzuCZuvot46z
-7HSpE/GFrGb0Gr5YTLYIvcH2sWhH/wn2n2YtT+GfFyMRMwVkc1pjIrQZ8vuILvRJ3l4rxGNsiu7t
-o0FIWqdlPkl1t+Gdl7YzVpy9Bn+AD9qYAOh1MPbeHXJ+BmnVBwS/yBTMFwqrLjuc4v3QzNLi8AD8
-COOHUix+kYHXDIj+eoFODjMKWIcs/2Kz8nDfkwVDOqB3+Iov3ARatQ+8ZldsgJJciy9H2PupczTU
-yYv0NbPFCO/bjjkI5vh7+mg651gJhSaQ0A0ynByoq1eqgwQbGTivT/uaaKR3zk9knkb8wk3E2nT6
-XruQFmWoRsL/7uP4prR2Ux8sHGtWAmvqe1aD4IcOQh7EINfBZu9K/j7LwHhkEj8eFdO5xJ31YrLo
-ZM4hGUIsvSRAP7gKj2oEUvPZS8zc6+nPnE+UDpFGLwt3RWg+nZ0HDwdhLgVhqmgrMtRfdtQ78BFb
-1Inj86h5kOTdbdqUo4rt9R3qyCYl3I1HM7ds27mKlGo6eonqCa36JwP44ChaKQ3ehTaTDLHpZR7r
-JBtgaXqZG7DhULsyrG+mS9LU09bYjVGCM5OfAaj7w5LoXCcTJInyNY4+fu3GWNuWjirYNnewtz9e
-1H+jTmP130D1/7X77brpTplkcci+/jZUdA696DeEns4uFQ/BOUbs7UEQRA167GN8xciCIYELy+kX
-mWxRSACbuoNzk4QG4O7hpygDvdtRsCzPg8pE2renONtOHMMhS4mboVq5jSapr2tHjK/2UASO7WzB
-Ko1ECeZMjuX6wI3R2B/Nc1iXotS2V36VoaIRl6r0SjM3RzEaTSayZBVGd3SXBpQ4AjbjbjVawu1v
-DWsTKLO94eF6h9zABzHtLoh2O+bnopot7qzu6s5vEl3B/iWSDf+rEzSoWVXjS1Q3UMeKvsK+5QrZ
-fbPPShyyL1X0KpyWCSZBOoGhG6nuw1wzQgta713efv3m9OVJ8WpujCm9teg7DdMyEhuHRnffNtyz
-lrPRlvHAOZrOyY/zH+ftfBtklxKr0hbF/axH7tXYswET8CSrOgGZ7H4O+sUuLPFE+d9Q+Mn+9r58
-9+7NuxO4E9zMYas0Dd6OwVoF4wrjxHd9sz53D8X+S1NzT138v8wInuTGZOeSj4+MDKZ/Z+i32dl5
-T6V4bol6x4iJxBYKyUoDteD6DGWJl70U+W0QjuivKdSW+l6Pl6BI4rl3WSPZw0lSt/ITg0maJiZp
-ZagAjob0fkloCPvHQTswaLcP6ANfM2pCOKeONPXkftca+6yufJhX0pn3rJdvmIGwA1zFxuUVnT75
-+2HqcF6zBTeebAiJ/jknodwbdrNoXQZkSDAPD40gGPKM5e58Zp53xGHSkEWhpYtCfZJjUhkZ3rD4
-yTPnnRBusSEEUy5yko8G1foXe9GFlUny4VYGtx/FZoIqgdKzPulKZZBCy3T+HHPekSE7BpRRMhYF
-hIRyS08lg5QxHqua9FIeQUNuHeUZmlynlqvFGkOKSZuHQ4pXw2auX9y3Tv4uTGZ65t4c9jq+VZ+5
-UsSSQSIDdELnQqFBqnIq6PYsL52bdilSlCjmaTW+cTtkONVwdPWQmi3AKIG4yRu6jWGb2oB0Q3K9
-Ve8F+I04f/bnRUMoj/FoiTz5b0apu4P1Z9Aamq3MDM9vGdUdIXSbPRxMrdiP3ZXKHuOUAwI47Lr2
-9g5tZ1eLMMOpQ9c7nJ+NlkM8QX5utOxmDGE7M+a5kYPcoWn7opb1ou2RrGqmqrQQ998AREAdbPCS
-zaiqbmwXmjHLb25D1DGBfzl0c01gXQ2Ah3O0ZpLRH3jPtz8tllVJQXsuRwyIijc1EnW4eJK1Tx4S
-oimTQ8n06p20wfue+SK6MYXr+/TCC0I7lfF82mt9vPzwHwlqhzAeF7e3i/nHq9P/7THD7BitTwSy
-Y4KS4pBVKyGLwwnF3Rku0G4COzEnJ4oO6yOB7+3MpvMb/DuZrvAPGTo3xiKK4IxFXiOolzawHJSW
-QEY0Rey0yrdZ9QXZJot1NqdRgQbhAEuSE9TomkfovNb0OI93rgbSq6s4bw5SFN4zqmVzU8gtYxB6
-KPOcfEH/tV/ZpjeOQlI/u45g7z6vIDskBOVpMCkwfOJBhXHSMLtgTB9WgCYOi4C1zw3bVYYKp2h1
-ly5LWNKwQgKrKvp+cXMXucizRkKOV7Tt5ygPCUYrocxmkQxF8Bu4mTdS4oyUOKcOOsBxxGAun518
-dY7rogOrvdNwoGv7syiGO0/Vnc0+++rkPH/MH9iFROOakYs3AEhHHhfZotvzBQYyGTN5LUaf4Lwi
-9yice5KSFKKU8mvpACMeRFX3yG3Ay5D/ELa3B2+HsAbHC2Cyi6+Lp40MVpcAVVG4z8xSr/hXmaZd
-6JYZbIaD2LmLBfD5XBHUQ79YsfBXVevlZwq59PrNy9enFNLOvTj95tU7++aXH97/vpezSKIvxWUF
-HWHzm/l6usIw2uPFCnHk+5k8jGleFzfT+QTNMOYV3rfRCINR06H+H15+8+rDD5m8onIZ0RWdpG0Y
-fyJ07c7pgJmDzZzRjaOvOW/umgeZ/JHolkv04GRnfIudC8HA7RJJgGMtsPj7ssbhUP2VDQxQRCRo
-JDruvyO//cTdn2UdnO4t7EyEHvAoPGrbVV+PELnecZkcupKNJAIo+4KzensuZbpgnPTR8lCT6SfH
-Qi0QTKDhICNhM/luU6Ke8yzZVFQExqLnwmDNoX9TAw8Q2ay5Ex/Bs8k1Cg/M5kjdMDEXW4Ss7HY0
-a6enSMuefSg0JGxX32nQWP7X8QfQ5sV4OOwF7GFTY+XTF7RVcvqmalGmpfIqbKi8zLRzCTeSXSOL
-3zlwMFUkiFnU5ENabIv3zbZvbdvt+7AD9kumFxn8Jmw8IfOipY1td9EFYjfbTNSXBHncg/oCpfku
-sNexazn8DBsML/KrwsRP3O2TahyiXGgQ2tramfFmRYG+6R1urGoS+nMgMAcCNl1NEZGD+u48K8ss
-kpnt+ry6c8t+0IExor2bN7BnVng0UdttOOEHnVUn6dGIgZpX6j5ELtbs2E3XUEyh85Jui5xHzc/R
-oear3kk+KFBngze+D50sV0IpsKl56oxf0IgcGReNc4CGRta31hlIoYv/bYAH3OQNfXmYc38YF0PH
-lwBE1YI3DCmVH2D1gqKMHn6VxxbhiVZ4stPJ08cvLUEpdVCpq+p2geaHLmvFvEM1Gl9TqckU4dk3
-jrhXxIXFperg1GAEOqsPnWwUOEmswWV+nHd2+dWFc5AWukvIwy3hQT1QtJOZGDRzy1Gfrvcv6hl4
-EtjJxWa+nI5vZjquflB6wWjGfbvo7F9fjndkPl5cm0R1zbWW2OJ+cfn5axDXgupbYPtXccBo/A6r
-BJYUUZv1QpIli0Re++tzFsTQ88GvXv/m+fddzpWytm0JVEfVS3A0qHuEWL2edi5QmYB17UTh4Kmg
-41C6mOrWtFW/++blb06IOxYH9vFqUdfHk+rTFNhplDulZY8Xy21SskX+wyG2t3IUAWYADc0RMRLM
-3iLUbfM5IXORZTAwfVeFA1bhx7FX5JR6GAgCsF76TLGNYKgJF81J3pD6yKlIHpFBF38LJxIisLpT
-qG/ZXMWBplJZVCTM5B0uBiJSUYEy6ioQPGll/foHT90dhmM25VM9CW86jJzQVbBiQrWiVqV3eArv
-V5hK4EUuaOhN0JJkffAaw35juiN5Dvv0+8WGbMMVb52k1BhYSK/tMH0UDXMxh9HjuRkhu58bnCS2
-Xl9a2cPquYXFEo59AhynHRUMX4byxxejmzugYX9WaWxxUjz9S5bb0EsFL8XSy6Jg8TXJyySKWwwD
-y2yTWVDKxTxGX3LiOTlqBLklk7v6cUfK6pgFxotLPsD4jlaj8TqzzB4qwyCF4i2No54FyX4RJUPO
-DMOL0txJ2UGGs7r6eB5lcCn5bh1CpJ79hHPEGRhYi9O7DK/cZuPuMXJ7Lbv6WCDlFwRRLG75GwR/
-txGLYBkjlLoG2qOCnJ82UoJR0XnYwWRAl1ACwECWyGeYJYjZysBy2TYM0dkxQog0MNs+TWwbtpjP
-toWLDnKFfVsHq2EnB/ztawoVVK26usi6kUmAlfxKRKs91Pnuejq+FrA9zEKmWu4WqJTPH00LXp7E
-vHekik65a/MZ9bMLssXRblUk0NsHFvxgdSLkT1qt4UaZcyFTKSnaCP8grY8OxnYpsyQEpkmEa8P/
-PDt+SmHexDdiGZ3IPtsjn8ZbLoobV1Tc4MCkz4KabYfwnfQmtL6XawjcCNZoAEhhZe6m86+etXGw
-VO6L6qsOOamrGTOLnWOpM5SmMevmUBoZoUjtPat3iIl3LpOO+g5vOS75jMCTfYaT8xBkRZLZ+m3q
-1heVrIjqbSPTwdsfp5StNKnq9aH7aGR3EXIiyksH7evCrAO3oQEcR/423WMXH8YauSYnn5Qjo1uv
-aSdNI2XCRayRXSF/Kz5Z6Zy+QA8uICC3eD3XrmD2/EZO+FEJeKeVNk4sLIfxZhXzHRfG6px1rV0a
-4Bw2EqYlZlaazTgbkJ/ifswni7t6x6rKlIu1PrMtYJJ5MaqT8DuzCTuiTBjtJJ9MhoKKTMdhLrXQ
-55JUCl3d1r3iUYTGnZf/YxlPUkRg2mo4tudw1s/TiD+z/Mw4qAJJEd1L6QqgfYZGqiFubnNx4i/A
-SvMzY0R+RgGqcNCx00aw7zDe3jG7A6s8AcG2KTYXnsC6oaZRqK7lbFN7jp7vXvllr6KsQbh9afTx
-jYE7uUauPNIUEVDMQEsJJQ+uZHnyIYgTeCoqxSU8OSDOuJtiyZNA9x8Mo+xxj70DIe3XvEw9EhBy
-WuYlRMZP0j/8RlnT+LQwb+RRxezWquJ7jy0pP1Uy1oEKl+Rt/WKLTOaf1PeDl1lP2q4/U6fvezyA
-m2U0WF9usu9buYTm2jyaTBpVEmb45tWdZXB43DqUoYNWqY5ldYzjQQJTeqO/HlmNh2ni+HZ5SBMR
-nVvU7t1juKM96RePnvbK3QeHgTuXo3zFDCFPh/z8EvxFKlK5on5h+oZwx6oa9vOOtZhOz9aNfW7q
-hO1A8fOwB19IFKnxUJZvvW/jJ+Cj1UoG7rsOOX8sTxzbemDUcf3i4nIgUlScrSw9JSfEmkgnNrxm
-v5lAlO88yoxgwokt8NbXxduquxthqEQBLu31k7ij9prleBKS69JxX3GDsPHiLiCXfCILXX+LhQZk
-RrGaRDGbEezpsKYKghJc6FaLWQ0kvcIJCM2MJDhpjcfjmG6OuWZGUaM55jg2Ym6cQVgpSnXCJ040
-ucNbrYI4wZFAQPvhkQBZ8QZt7mZ10b3YajP6NJMelLxAR3Ex14vH5uISZ4eEXDQB4xEGcxjRiTJZ
-XwvgXTVaIWMLVziU43O9uehXCFwlmcriG353ovEwAg4MCUdQMb2BlYZnNZE6hOZAUb4Xk85g5md5
-2u/0Kr/BHQLXRZhq2hi6J3Af8A7oYcDCnGRXgxN6ioDJafiVJamliMA6Dd+cNHlp40dyR2V7zU72
-AlRzmAMq+gBm0GWw7ndAzJ0h3k6arQJNPn1X1SXqzuUgwVIIslPPnFHNJK5RF6e0bzAICBavbJmM
-RiSlHZPUBBlPWVLodaRGAyMbgd9N8UOpvrQEuQeMg2LgdwYJXueWSjJTKwqucWPB4huBA3YS2nCl
-E22yIb5cDATFGFDha6EyAxnN8GOwoQcw0BHIz3JNO5CjwLAYhHEtMSqGc+pACAMb2jVvm5r6SMq+
-ZlNVgn9BK9XkjDfd2OmmzeOiQ9Qy0m6PDMEd6p4tWQjIUD/r5CpgjcFE4kxCc57NrpwdzsW/GneX
-vd55wk4nY5zqfVnlg+3AduaDsC5tVNUu5+jtQg5YtvLZtfvS5YZg9XKIa+/0HXQxrTOuT8v479Jp
-ITBup57ssJqOJPHKB9LhPwgEtML70nbOr2yfzxZjx0TFxpdTuHzRaqdrPtDH4+huqDYm1p53B0GQ
-5EhlWdpzxFmVAnMQ6/rT/BcxbyUtRoH3o0KbxI9B672eFjWyotFwxr2K+sHj2Wp9vP7w9wpiNFJI
-PtiOBCv9cXr6//2WDOff8YvCJSmevz/F80ax+uaokSS1pUK01RYQFu9O8giJ5gv9gaGH1gvg0tyL
-26U+3o5WcNeceXt9h860Xm3Ga4PVpI/otVG34iC5SffU8WCzBtqLXlq/ZfETycLrgu0myf4QjTLq
-4uF8eu+/oQll2YqEtFaSicJadVJ8+/z0V8MXb354++Y1lDmE3EPIzpEj5wsx0TQYzPvTY/UUXGhb
-EkzJeES6GJ6xNdrhbDGEBHqYwBN+HA6puXreQef7RfuqWg/XoyvXzt+fvnx/Ojx9/h0ePLfLUr53
-UbTVPubPbRtswTBHCJbVXm6X26E1nWmHKLR41lGidsuLgWMx9x9Hn0btNBvHdW3nUKAkxXhpknwi
-3KLYlCftZ/tBffyghn+ke2iAjAX2sQQK4YV/n56rz/EMf/epzlbr7e9fDF/+7hSLKaFTMEzd4XBS
-XWyuMO4EHDrtMcnr2zAQlPj0+avvKTWmNe3AH1RUq/Xu5W/fvTp9OXz98rffv3r98n2mF2cnrFHo
-PusX/8SnW85m6at+8cwxcA5qk3cx3Eh+tVjcJNabb1++/erJMwGlLjCUt4jChRrUsvvZaHMvyKRF
-oooFOgykyf6FqL/9S4BzMpRcLowj/YqLvpwDFWNGgdGu4MJ3Ob3ClQsN6rZ5RQzJ8LTda2qWPAXw
-dRMJC2Vs6/kIyUSSCYrL2scLPY76X9c+UCO3wKuGOEhYzSGXqU9DGXn8FCZkb9pu2zSbrp2sNdX4
-BqFXAyEbY0B61FKu2AwKlmW/MMD7KO2Ss4qSo9LLn5+plwWfmQF0Di1OVNc4tUZ0dC6d25NaPWpJ
-Tb4GWWOrywkHocGbvFAvO4naE+ECcjbzjTjsTfMn7byc7AaoupwkIXSoF0sWy4/Pnp3HReI37sPb
-39NB8Or7l99kzQtDes7ReIZ44A2J6rcbeK/LuYxRkqN7Of8cv1Qq6HJ+dmJXhiPt0I+fuH68f/Ph
-3YuXOTeDbxaoe0esDaA1ozXbE02N9eiuWcgY62GbVHNJ+o4lSgp5oaOEmAxXcLH3YOzxaEPabezU
-5nBoqjvelouhKAPB2BwVr2pu6Ujg8IHG/CK9S8D+xRvrdE36gMt5NCPAd1SMwciaQ0KyHI/gLr+Z
-FSQyv6hYkMP8Cp3qVC2HyBvNo+IEDRxaNd6OZ1WZC32bJcfNW4u1846zZ5rb6Frhhs+xm/Bjh3NC
-QMHUlsKNqPoEwd7uNcIoZpQmu5dt03ZutMjMHBi7Lvy7u9S9Q1kM2VZN8VaO0u4Jo0xzdxv7GQ3D
-UXFKVh6EKuXiVhQzOLXrYja9qezaRGmMnuLAcpcctNGIXY9IbnS7qJHrvkKv5NBuhON6n5ApKouY
-JPiXFmoliUfKJ/T5BNA8nkXl3CWu/9EMmkbkJ0xjStNTjQS2pKfH8cMmbsdUhos0fYciUm0zBZjk
-OIiLS1McHKkqDlceWvrn2Gg1L8Km4zOy1DBoi2L0aTGdtIIdN77ZFjjbWO5E7eLu0ARsygZFZNq0
-mM0WdyTrnn8araaj+foEJ9A2a0RLBaoiAfPsbrRF+oLwQ7NqzX6R0wn3+c1S4i+jGRJG05QRsFOw
-XtxOIenbN+9f/a5Ty++CLU+x1IrIyTV0c1tGETgHTL+AraR4bvRyiKb0LgIau+Xj3QLFAhHJ9VTA
-+Yq0zWWkHUhdqPADDnmo4fYGpU2u2uxJ/uZ9wyleJRAMwNiXfBfNIS7gKSx3rpe/e/X+NE9MjoqX
-UxLA4iSbPhpx92iGkpWtGFsW3VjmbhcmqUYJZAZvDtM1zNsFHD83sC4utqSzmB/jgKPuoixezYvm
-wmZ0wy8YOueu6sxmTn1B5FxmFZdT6yAfUHey09Dk76lNg/RmHnj20KIG+juH8UB6yPZgbsj6RL9m
-24bC9FCETq2EIPxpuuRgWNksuqibPDWj6X7+4sXL9w2wHpa4kzMEWQG6lgsNL5Id0PuihjUeYQHw
-Fy85jSjgalZZFPBnX53LJROvoAZLaBzvXLe3+qZUe+a8XqynGnuHw/Be2nnAITkOh6RfvOrcFlcL
-a61K0Mds440MxsjQPjma1CgaiPpiucbAZGVZhmEoh1gZrl9Pb9CxdRxQF0iZvUdEE6k0v5Hh0Bp5
-0zDMExbR9wOemHs01c0j8Ha1uBhdzHBXv9/CQXFPdKuQ82IdGHAdcBPJkFHyfESspKE7VGm44obT
-qMGEL3qHsjUMYy+TFgierCt3OIr2xs+BqSiUKFWeU0mF7i/phdxwlVKK3qcVDBgBmuL1+6q4m9bX
-8Ge82MwmxR83NUfaoYsKVSTRTSfEgPfJpXlIMgQg6nDjsuGqkRShuEL8EWZbIskSqPqr8tmjvlwS
-oPw7qu+iogMXixc3akPljpDGB20oLbx2BMqkQ4gNn1d3OkBhh5OTFFKVrjs4/ughn0Qh0b2+ukWO
-WHuhdg+4qrF3ZaZkXhNUtp1XJjelhGItfShYzsW4grEa6STB1srHNstTxcZwaBwozp1+1Ay5Cnsa
-osEWTqvx9ZxAerbE1E3ouqp3Nv6rCldZ/sDzA/8r+bsverwe+uICz3HK2shQorc0rQqOl05rCXYR
-LAIZJymDL39l8avFXUXyRzKn6iCXv17PKkG6K9ApiDY2Mq6vimtYkiZCONBQvWaOOOp6IRfLaNnD
-B2XYb8ui+77SUtQMDPlmwV5XedPoYvGpKnn+bqmmATpIdc2wlvS+KwQhWJc+hjHRofbdRTsIH/Dq
-TcTSwTl9ADPHwccP5VWO+Ny5JnM7MhmZ43yjBeWoYA4Qex1I2WDg1zk7mKMmThAmxn6B+mCyKX57
-wNi19vvuu6UejaREA1UBPt3luoYKuxSsQoGjf3zTbf981u7zxJmkon0pJ5vbJW2Sy2VDxKkoUHQA
-LPDuNYq8f1z9OG+XFJ0djo/N+vL4ZzDH/CnzQeNP5k5bL64+hSFdL6xPKvNTDy/nD62TKi9cuDuy
-vNu5YgdD54Njz9lRsr2KluHL+afpajHH9R+tx/hYRn5XjwGRy9ciScf7KfI1z8p/EukoWw6R/RLc
-5eFSC136qnzad6sK9YMruE4XjHEp2ihxoxVBGaz1WHWQ6ZrcutXX+N3rfvEa1Tuv0+FYryrMMcLI
-Jli7bOVgQAzbYnGev69EiodxfjZLdo1RvgaGVmG/ygY59kjJEFV8kucm4iHXtSKChy62P0Nqgvjl
-mAZXlLdc5Cjmh3TyFV7NWMIwE3aY+swK0Kl4QtPWvthcSe8TAQkKlBzzybzGKzliSCKKdtDFJQep
-pLW+rmazveMm/Tt45MQnWnbdLobRc4rxJkQiYThB2m7w+iGkf1hGASv3qUxFNKoq2dUIr4kwHbNN
-jZ4YjBCDpeOZwbgitJfUkYtOZRZ3mPJWAvpQL5jrE1nYXEymiKhFd8iISZD+9zJaSGguHhi4s70z
-Q79gxxCVuUxrJ5T5BocrokumMHEuJoGhyArHbNtFnm4kq2L3NyoPqXEhuxqle/6GB0mHzBnjv49E
-90gWXoThupxOuiF0a67PUkokx4USxI1ZE8jwKPWW25lKCn0JqGrkrbMV6u0FcdBMccRjf2O7osSH
-7536FgerDReXC+hrjc9hUsJAmDuZj9U+5iPePxHZjPnthBsKGSHH3Y7WIzx8lnz4/CwxqWo+fZou
-hkeMoyPRZVl4CI/oHg10ZYI6RuJYgyWPUFioscP29FCB8zPMg7/OTn56rhodw1rA51RgzrzFZm64
-CyripyfniG+CxTC3sb8XRLGVFSEghMtlb4dbIi5asgIpX8CqQL/DXsrojZB6E3YlrDkMlGqFC00t
-8YRyHxPEOyA+koBrtPGNndi8cE6DEmK9FtgQRzcj9T0C4WI0GioRKhvWo0vEQ5ZYTdNFqS8azF9K
-tHtRGxgXYgDIx5zd+uGWO0xfy76WDwhaBvdr8x3o3bQeLlZhsNx2lywj6AtbRZBNBP9DvwX3xZZE
-Nie9ttRIhlzYHULiX1XdxZL8+hFiuUYgnCWGWUIj46GP+SShAcnWF1Oo58gKg3TREodSer24nF3W
-j4gzKqLxVVUnGzSPgS6ZAivRBFs1VGNRQKLprLR9zquZx3CQwQQP0vTYu7PpuR+W6Af6q4XWj1JW
-ozpblz8lszOM4warcDMfrbZAFZCe/lkip6/L14v1CeL+rdEOoe9ev2KMu6L9X4LXH95vLuDlcfjy
-+WQCLx/By9ZfWq2L6XyxTOr55XT9ZgWp/s1khHe/QwuI9r+GL5/Psbz/07z8/v319BKb8/Ofm7fv
-9O3XX5u30hrzRhpt3vxA9vLth+bVN9NP8OaxefPtbLFYyWv7/ocFVvDgARDNo6Kqx6OlOMArjhFt
-wLXKUzHLy4+QYzAwhcC408uf2JffUxeDFy/xjU3zHXU4eIFpvrZp3i7usHe2e69qeDMNprjmuecF
-Fcw9vp2HjaWXjCJAs9xSSyBUvnO0MiDnPtTqeDEbLi4v68qYL72Hiwc5dWgeG1QdTX43q5pilzjC
-ygRter+vcNkibU7QRlpCF/Whk4lFKnH62hTGF0vyVRxams9BVxj9EdgNU/BAksTDqOJBMaQ3Qyyg
-pk5GhyF1ntJke99yaRoHyFICTNRqsDmDQ4unelKJO0HvJAid4JG9Qn+HbxFLkrxBc8fkQ0j/MLj9
-k9wqA12AByoGvjxJpJzsg4SXmEW5y1odbn1zbgJe61QHraYZIwZ/WMOlVzRdIibCW93oEnVxo7kV
-9k4WY97RtQiGLjdrQu/WIn1jgHdDYGF0VsVBpJ9dI0+VvxjPFRny4RAY2X9Zbof6vt3Lgqv7stqN
-FsBtLopCFIxW7Z7x4ydxxNB1Iz7l4HYceDu77fAkjN+LiJDC8KTzg/xoUhH5xceBEIgO3i9XZBKZ
-t08Js5SC9k4kfL3KYRpAlRr2gRKXdU5V3BZbzm/evD4dihiGdjVkb1KInvr1gUqFybRGqewkJxco
-d1ix5DCAcJAfDcjuDhrQK44jz/SGucvgyc4UGDc72Gwz9y1wmKKshlEi167i6+JJ7lpQcBrpNtwB
-2n7N54zV3ILhokMi2mz9g+sO+v/UmgjTDpXdw+3untHKP1eiNkhp2+BJVmtLGkvMS4SWd+a5VdTQ
-Mj6DZpzA/0VFgw2wNzOO3ersaVuW1FNLoZzYJ52+pScDsaQT0Xf1Es8NlnpcksOFPRnoTfZQyHlr
-VXxC1E3GXOjkHISIj5sBvLg7nXyobiq4txPp1t7t+KAiLowGbg/sLWwzCs2KxuU80uXO9NCJkhA9
-JTQeu+lSrTvsz5rV9LZcdeOnwnambu7z+9M9HXYr6IDqaoGR4ZOdVwk0tJe3j+imq0Gb1EhvvXkn
-814ibQPas2JjOrQnx5OSglF7BKbGwpLdEvd8XeSbiVX2mlauHS9ej8ZRG021LmY54NrvSDOE614T
-BVzHUfGBHHAtnhbLYBysdTGdIKg21Mmem2RbRs7E1wHZF8sOOtF5CFSIN1dY2lLbMCRcEgd87BTv
-+t31NNQTKwOHSmAfMQsm6WruwqMsI0fU71AY+xDfP8SBQAtbOwDq52RrjyPKeV5OmyV7G+slYo3x
-nMVlic9pjPXT651Lg5IeZPJgqOog2JhEM2zs2AtyoA8EKSjVJWxSt3YbAX2vqxnGhG1r1rZU4euX
-FNa34GEKz0utGEliZ/jLh2dQOawKGWvXecuxhYPgWD/Y+pLD4Rl0pSS01msLTHk+txlsbGYXS+Pj
-oUsdwViAFq3YdF5Y0rwhBwnGnM5Okqo3w0NM/DDouqTI9t8zv3v74EfAFtgvdqwhI60aIk7cbX41
-qaHvin2fPn/f2npcYfWZezyn0EPLVYKB9YDkbr5+FKjVbQvLXV+rLI/wcO/zgevyDWCXnXgvj290
-G+/IaqHBF8tcE1gUN4yGMkTwkepClsd546yT0HO7++JzBV4uN9XWcY1wQ+jC7x4xM/CAO1IBfzBd
-19yMpE9o1SKr8ht4xOy17BLNSbcKBK3pBZkl1y+n8zcsYqXB6Kt4CDFvTB297EnBCT5/xaHHlISW
-+myajHV+GU2+qubVajoeWmSUiDWFjf8rsp0KOIjQJkeEmKQQgsYExELkB4ZDYNbHMQim3W5RyBk4
-D5C3Hbht3U8XlqcGpR40kLAXo78MmYPVoDr0YxiKm+RleVtfpSoMtgBS2+KR+tyWwnHhT0Yamq6z
-qo0zKf286UQO2XkBeJtPhsDQTNENotvEYWQyxmuO73Ts9ytIar0MNcmU5Fdn5mOOplnjv9CHWbWs
-F5v5mCDvDTdiMDKXQ2fX37dk3/E2tGJ1rtYBDBtc9NBGCNaitFlnyZ9gcFV0UAeub35DV1daGYnC
-UcYOJEGEpkgHggYexF69uuxqsX2qnyL3WoWj7WNbBgsJiVUGuQGqblGfr8cvkkmTzFgT1VfO2z4l
-+1qKIYO3jtQrR5WqpNBqqb7qWcOwlBdwgkjSmzZwA9X9WDIRQ6MFwdBAQ85TfiaC6gwcdJ+cF18P
-iq8yOKhDqYMwnTDOYlxcepfclS/OjZPpIAEpX7AUZ9VoRfO1WGFIHr9h0QitWqsp261iH5XJweqy
-nEQg2Wbr7zghmu+uSUAfV2QoURhTHwaFOZJcyr6Zc2x+ONMZKPR0e1Dxdsy+nd6TfKiYb24vYI7L
-QHRZr2+9Z5wvLeY8jBIDczhqX6rISX/HYvUUpEeriA+T1z50XcRSqxWAgB6rIQr5NKLYzllHkMRt
-Ma7tNmBgEOHY25QHZcm0G5p2BIJy7ShEAgjvK2Wx9PK6OdI5p1KyjNaaQT2pKtF7KhGi++h0guiA
-qC0+w671uXHnAa3T5fTq8uX9soslyqGupzcNqBMTu4Kzl+dGfiC6AvKs/RLOvzcaaZwV6kFUo3r4
-iVZ70x2aOEMCzAy5FVr2yGbi6Gb3AKz35PbnSoP7H++HBlrJuny2aTHcFHegXCw51xvLWeoxhzza
-IFnMbk/B6Te0aTInIkmYcW2gfFuqZC46lHQfxBC8FVMqAihDE37gL/tolb1aH4+nq/GGaCIqkKpq
-Ys3xRaL5KZRmhs1JFBnTjHst9ng6nxNLlJGe7uDI4RjHc79vyogO8mbGyWdJqeLuMZOFKTYVAQv0
-KUxlD6PsDULWd3KJYG450lbMpEk7eAjLfsTeOyhLMSQJmgVjZYrdQYn2TAOqnLoUfzzx/5kWP5fl
-mk48Th1BgtV50fuwKTyjZGzgBvFrugD2LbBGPpEX2N61FVwaZKuHqytNhtu8tWeFBmlotgy3mWMN
-eQO2+4WhZTQ6m1u2QIrY3B2rKaiu+UobLGIhlLsOgVlyCOgs8ilAVjRZoCpnX3NGT0Bn0d0GVe1D
-c4kTIjakPao/0r2qRdD3XRdfu840U9/W0stfi7XdD4qubUU/PQNJxiFHIJr2WAHU9vZigS13Nj9n
-9NTQ91l1uRZBiT5G3ebc+NG0enp1rdncczYffW28J3Uf1AX9r0dG164FfemGLX3fiPOgmP5ot00h
-q4aRDyz2wrF27FifKKIZaXQgu4R7MJwm8G9mBDB9id8MD7G6ooTRhR+LQiFw+pYDuqXv0QwclZia
-JAf+jK9FFFxiKSeHnEgUfThSxFHbPG56FETe9UlThLMlsr+7xWriWiO/D2uRJGYWIW0bj5AlwpLB
-ZYTvuRMyabdJj6LfgV7fQ5M/bD+OfjqiOi+5TgTZ9rSj/bC5Zu7tSX4UGivWsIB7qs3UKwW2H9Rd
-3aVutfcLjOPHlqiuNDPI2K6Yi/CbRtdV38xif59KWMbX5dgpf5TqgzTBNj1IBOlOiQ1aAPjx+HH+
-5wdYJT79hQZGi+8X/immXJ7m+PISKae7Xoigcx0gtqb225igHK/v/Ynaa0bsDqXGVLYNrrTRYOIZ
-gkb1RNswT4x9F9RgCLOyyit7ufqrpmZJPG4wJyVPS7yOMWXDTPlOm9Y2HxfJOSF3aTkq4FeCu7nz
-kkAHF5XecA5jkfExzIyUlyNFl16+ciHV9RbcVAyZcRsmAN1SFd/MXzY+BXNFhdHlLajWiJPxOtJc
-jN5W9pYzxckMzc59o3loS5JP0BPbbmPMqTqkWrFMfXsbvREjdnypg38eX1aRe0A10FAYMmz2dB2T
-33uZOXpKZ84WkNwKsQnOvkBKii5S29uAncszctpHexC+J5zJ28zNkLcL814Z1st0Jc2bVJG5PMq2
-WkWCJr/IoRd4f9Qenx8karRXYrPazqbn524nr6KW5PdVZs4iK5TltiT3qdCh4JLcFlGJ9AkuW2TA
-El625LwLLlqxL0a7v9cgCXt6ulmiEQ3MaXhT+ozMfmN/cRHiKfKFuZ2jSJboY3gXu7uLr2OwQz5d
-iL1nuR8tgTlpc33nduoCqASf1oImHqqTbLrqigjj4x8//C+wXNhlv/40vxt/vDn9xf9LEMAt+H0M
-y/8WiQeiy0wQN9HGeSd/1febC1GHFL9drG6m86sXiyUHliYHvvef5r99IcVQZGmNWIeAWRxLAdJZ
-7GCMdEYYs+gzhruD7i+wi0YrA/WraMCbC/GQZO8n7Y36OzHIUqt1dPzl/7WOihcjjoGB4oF6TWEZ
-yKodPRqRVFJshwm9P6bIDpCne2W1LNDrGsNzuDg6auEwDQYVVsRRi0Gh0TW3uF0fo2nRX9d+sdEn
-IAJeYwhhIqJksewgJFn3y0O/ywvMIMitXNg76OrLufOayoB4b1bEpXziiQSamDIWkARlHasIEh8y
-kbTsU/jaFQMf3bMFpq3XmcC2aiKDc4P4qP8MRwefHV1tQ99V249q6tnuvvDjh5EZ0KgbXzOaHaxv
-BMFGc7PxAnZENbGrhNcEUZg5gW1MV27l1CVFzwSeeDohGD+oHN02OWDaWBzJKdwGYTAZnAO3+MQH
-ASNrRd6vUtigePaEwumgkK8WDwUGKbgj44kr8uMHJhN+kjc6lkexkbSSAyGAqdfMr/jYU6hpOzj1
-crNuXkIZTF5cLjugeINIoG4J5fFmoxVWsvNuK2CucG9snSKQOpAI/2lhDzgprrAMQB19yi/pfNp0
-V7hzf7maAiVpo7cQtgdFophlj/l8euRw1wZ+c3dzmzgX8QIGwQlRMGOYSBvIKWRruFYasyAz8VZe
-tbiLJuQL5sPiD7h5ydvCY30/T2bokacNsKMaXD2ko7zySJ10e1tNEKmneLlezbeNU2NdLLV1fT/z
-rf1pj5/GNE9ftxwlYpruiBl5Lx9h+AE4SJdyYKJX1/Pvv3/z25ffDF/86vk7hCVvD4vjxz/+OPiH
-8r88etAujkaTiYlgjIbd8woPYbQ0IDCdNcGUtppjm/L4hfU8gq8n7bDy4a/evEfU9Shl0fmXk454
-DMOygR4IF9KFv4Ozc5nYwKtXRoXB3gOvf1iTMejHJ4EEZuaiHN9OEC2k28axOv5YHB9LfQbe8hNC
-i0ytiSIW0ilF0ASfCXobXvQQ1t0kq1a6eT4l9/ZP0kv2DR0Ka46snPYRHiXEBL1Vr2KJCBGM/0+g
-PTT+JmpsnN8hxnT+AaVkP/74D53A7w8Tqa82Ghsggzm8GJGt2KqmMiiW1eKukneDYPKMy/aYtu06
-6I7KDMtpPZrNN7fdaI8iHzudh/7VY3bOMVXuyWNBixLYpZYLWQ+94k55UgF83fXypkeCrI8btC+r
-UYc1utAju7qHTQFn2Aq2HLCuV5vpZFHclb9QNmq9QPI2Zb5HlkT7BH2CFY8d5w7TkdMUAjaYEAnX
-C9RyQX5BrYYnXVaPOwGi+xGDVXrcRegM7dla0XkQhYoqGi8Y/7cOgCGys8v1pzu0V/wYh4PM5peW
-R0Xkw0j/BuVaEkdaG49tF6Abom49omDDv+4/ZfLgrqKBrbt8cShdoGvP9+HPiGun8ZXcMUPvo3Bh
-/BbYf487hpO6woU3a+BZbawu+sb8MuMPrrddyW012f2ijYmIH8QrB9zh6HLX7u1llHOxkfHuX9Wu
-m93pfDzbTPjLp2M2k+rtCzNma74e1deNPDp+DKJLmkZjNEzmDR4+vLmLmj1mu8sROkww0rbeSXUg
-aBCK5xj4/FMHNQib2zi063Q+mY5HFPeCHH2U7w0NakN4Z1UPaYE1t4DN7RYbrpf31slJKzrEr9fr
-JWx83FIoDHyMp/RjzPCYUFqQzIYZ/q3hgvdvxoeVAWj3CjqiIv+tSGIZHZCT6wVSV312bleC7aVd
-R4uLPyJUD2O4DYeoEuFl40WIPZtY2OObO4Sr6dI0+2tdmHK0IdKpSfGnpsXnXisazL4bnH7QWRSn
-OxMV3IsXW/QziEKrt7UUly0oA4oIEbI7+qmDtO7mLuFlOza/JEJ624GisnnyFFUd1BRxinc409ab
-u12CqeUFjx5cNySCZDdsUzhMsRx2nebGltNoJlY1mByvzHjcwrNl4pGPytyrqHz4RgrBcAfd3J35
-0UVfGugJp/JOIGHDZO6gcQmyc5QSiLsuIgwdZmc0rDaC1YL16KIxoh+P1lOjeGKJf9w41jw1O2am
-ubQoq0Z5v/hjeBbJCpZAPPAYEVqUEvhwBkTXLNJ3WRQdIIUdDtzKZ0jQQJJ+4dE6wtMQtR9UjNLI
-koQqXOz/3967brlxZWli88fLy+m5eM1Pr+W1QpHmBEIEgpmUVFLBAtUsiqqmm7pYIru6J5kNRgKR
-mVEEECACyEtd2vPfT+An8Qv4wbxv534iEklJ7Rl7NNPFBHDuZ5999tmXb3P6U04N6/FplrFAuKF8
-1Jt5tVGDcIi5cBnubbMjoGkuc+txcubRbo17MuhfnD1/KHP+uay5lzFv/JgP3q6Jc+WLTBoeB8f1
-GzZCCa9D/yxbyYiCZ5V6plMROOzqlMaTrtpBajAWyRODg6ZcNr6NaWG3rI9tb9Pc2Oj4dJ88sKpJ
-sulKvVAJgXYzKVhsKCshsruo92AsS6Hem8h1ZT5n2T1Q6PuaOhkj3pT+VI9Po2oVtarOZdGVtsWs
-buddEu4XXiR3NhjcM/0T56sTDcJyc1pJjChrCt+Z0RBr9Pi0pN/q/T752beS65f4IpsVrgwet/gv
-U66ZmORtcqm76X1jgfsDo26fSBp0/KCSivo/uNnmV1XnZDRCEKdY1Y2Y6nQIRZ4Po6HNOwQFcXpV
-DbThhNC3lXCeixKbsiQt8cntTlLdCzgKaoc5PmfYwLuqzfwcFfFc1eK7EvNG80DsxUUJWeKWTIkn
-8El4mGaItpsbFj7NA37qvITgpQuiCpa0nZTkonfF4hinywMThyvpqg3jJi1VPDw1jVY2jN92QZdX
-W0o6z0uOCTRX+q3q5qImjxU9cNVJ9ARRUXdAOrm3NxYyaFE0v3TKqezcrtUo7c69ZO0a+pFKWqkK
-6z/FoCESK4gdi6gFIDxXb1HILNr5XmZs8wIbMb0ygGh/t2Sn4bevyPEERGoN5M5OqZsDBSF/WW4o
-J8JinSyr7WUzt9kYayKVv9ByHh58T1mJZQ6kbdEb1ov5srwBcrRnduhRFZSol7ulMXOxwgHnRS20
-ycBmVXRE5RejlDjkcV2Z1NNX5nsDmUP2T2VEmEquazK88wJZIzQNwgAHdKSwTMFaCPSTlgfnoXMT
-XNkrAPTOtmQ1t751sKzOI70WOHRLteFMl/VEgfroUFzOIjxDq5Fk5Kb8IVoEMSIGuPGiAUn5uly8
-w6BBlEq01XGEg1OXVa0TXB4aPKNjbwW1av7Q5abOutLcHHLJ87DSGvtEbQtnl4wUKHXqSUzRQ/n5
-vHbEFDAQBOBh4mn+C/o6jwzZGNUOuwySh64softIOS8JXizzalttlhR8WF2r3U6c3WaHJ7poOqmL
-FZkUBFhtWqXFVJ+tk8rQKIFRNgqF6rMMWkfhG++QCkQIz2Iputa3BcGkF/35Np1zd91s3rW23ZXO
-jPPjvuM2Aw7z10dHSSmaO4cZw02LCY5OVgR7FsiMf7lFx9aynz8fZ4ScueznjvHnDCpOC3T9Y5KA
-abneTOlWZOOsOpW1NqJv/DdT7J0UqsTMaaR+5MCpTg6Mh8DG9IRPnwMR20D4FABwslUj67WHCef9
-wT+OHixHD+avHvzt+MG34wc/pa5pDast31El0552QvkBZBWM9CR8EcICMVaJMsFvgVWwCRZl4vNq
-S7nCOUIRWBtszE9XK+XTpZyw4a5clH+qF7cOTqrry8Mi6Lvqlr3WLDZSk3rWKXwyuJG7hNjWDekk
-peqpB1pgcWb7bYFJnbfVUjeJWCzjQHyUzmOFbbmdi0cdPhxBlKhXCaNOI9ZM27Az8cDuEl351N9Q
-PHWlBAnfMB4zzEoz2ctn06cvX06eJZlNK/B4PziUdDIg/qGlb7d6R7KRpGNom8VVZV6RKBSAOKos
-I/jV+13DMa9tCxRy8OLly+e/f/pSW/2zj5O/JG+SR8k4+TJ5knyVvNkmb1bJm5ujM/yfWfJmkykF
-TgInDSbVtPjywB13GuNJOV+BILZsrqoB18gPXvz0hxffff39H1QWdNtnQJbmAESriynZeafzun1H
-7jCFSvCxyf4JnlqjP52+Gb95k3918k/j04dowYYiL3LbXk3XP5mXZC8Wi+qiRInJGeCJaDHatRId
-bFkK5qpHbBmuuSk1t2ycBej13hwKTpzbru8ygWa0kSpTnoDnUcbQBVrmxrl0xcjAbClt165NHb9m
-2GVRzhbkr0IpoqxqMou7BqTWzYDePaDqONAMLbT4AyYjEda9vZxum+l5q9d/mJTzebmd4C0p0w+2
-qH8LqD6RMv2KgtdHLpenqtmD9m8etDSmdj3UZVVuD9VQpNbfPn/6tarnsOp2zdOCU8U5tX2q4nnK
-uIOJ073LDeIhrNjbBP01oMFFfVbQtz2UxvqfSQc5cV+W2lUNhv8wLh5v3qCPxyOXTKmN4mLT7NaD
-Y48udUvZowetrKlbPtL43Y7XNF0Z9gm6Vrtt5mMHsyZMBK5GZbcTS93SU1A0bjEiMpM2hMTfhcQU
-7c0hJanpkBNJcuNHj9zGc8sz4ekOiIftoda1L3wAzh4plNCyacOgk1+C8dDuueF3bSXGTkwFi0Zt
-lRQUG6UjOuQkGnDU66vKPrTGn1caQccU+dO/7rltOhb8pwc6pbtE3HP9wS1kDYOBKdQnS2tSvqvg
-5dZQjoZAmN3ZcJVqpIZuU/Z7SjNbKQejnRtJgcfeW2VD2O2WoQT9ELGjQH+oFNPZaKQGM0lB+CRS
-oCpDN/aAR9PXjhqhaYfreA0pDa217n2trpoRFhlR6SzekrUd/U2tRlbRLJCeMhWguUGAnH29vL+U
-k6Lpb/KgTYqieGL8vRWh5+gXeTM9WzAtOJLEm/bjwZv5w5z+/elhngyKj/GCNcfRCWro8RZahy5B
-IKOdVwxtThmMHrmau4b8Ma85mAIO+LquLJ30iy1BiItWLmnrZb1AoCfJa7VbzThRONzDkuuXrke3
-nKUNpTloIy72PFvUCFbouJGz6xKLaq4NAN0yZhhncz3DzibshEQ8w/PUZkuA79IBdR06soJDuUVg
-Q4sIvAr/aDRYKCbOYtgbQhlc3jVGz4Q7S1skoTul6g4fR7SqcKU9rjbzX8wNcj+XNxmqhLyphfHB
-HPUExHdVT0oN1i0uXNbhr4E1w7gTaLczODBn8zK5GZN16cZ0m3ueaOJEhj/pd+5VvKUbVhvA4STe
-MjnK2VbhtKe0Ya4zW49RzdYnWIszQT8GgsOmCsC59Y9ZAGHb4aJXn+tGuO9sCqVU9fhrU2JsLLV7
-6Eo/Zd0tKZTxz0NxKxyob0TZ7Hg1hWCXuq2hnYl3inZU3pU45hjWOPgwV8M/PCPkfmdvPtBSoPWT
-mItUdlanetKMtZ69W6hseozuSLur0Ne67B16qznVKTZsmXiuVpG9tlTxKmpLOXtqLfwfno0ocYFr
-NOzecGlPHVPpWG2yQ+DohNl941HY3uDBhiEOHO/J5DAZmn3d+xJVBmTrYFtVUbJCltEhWinwQBZF
-u6NybOcDe3uwXuFJb3b3+DtM2dDUkKyi/mUjBlj6hzKvarRqfOhaQpkNwcFL5U8w7zgqOArqnw3Y
-1hi98fkGbjxYJxletSztQ6FTf+AcEK8OEFJW7uRPIZuxaVElMnDBMhZa3lJSoNOqQyu24zjG05zX
-NxK7yOiBVXIGrBmTSF9XAuBPzPMary3SVVrh9JJkxNJ6ISxJkrJAt+jJWB5VMSMA84T0YN8+/+mn
-p79//lPouHLZLOYsolScO7GIavHIJ0CXOYHf0Q8wexY2yFFzkRAQn3/SQ8/PD2gdBxxZ3LMkHAiW
-vYdrCmZJ9xo5CHXuUUuWF/gVy7DtXk7bDSfirlCHX6APxSZ0yeJSBSvf8Ulw3uxW8yz3H9Su1OPZ
-BZilhF5ZduPp88dH8N9vx+nPbhtjHZxxk+GerSBq5B15L706Cp/5nnWvjz+DqTwe71shlfwZ7PSu
-E46rlcjvXgpKcB5ZCpNo3HYS3dk+ENc1qSsjUXp4S/LP+Mpg94/XP750b0RmQIqJZ1wepKYTaOvU
-4qEkdTd2IKi8LEDu8Xk96UGkPGdiRrmEMtsj7KlI984wQmgqCdqM3liWOd2OVXYtvXiviMOUT41I
-Yf3RWJ1ZVbzgNvLpyo6LT2KuzzhMDKEjTVPaoy2rz7vb7Wn2wRxFDD8YMc6d7Gs1G20yAaZnJ7JY
-IRJQOqhk1mR8y1sEsltjTlshDySKjPRrvToqJBSuZz+vb/lS1TSr4z6SAe3r6EmCTecuBYF0QBSE
-k6MBnAYwR12KEKyqoasCTUjauQw79DDHytYyEMS5hu4hXyPKqldNsuvMmzrDoSuPJJKY+YRQUu3b
-FlfhehY5r0Zk5u6cjpxUK+xacadfH0oVmm+xX54oIJR83e8o5fm6WSK9jOBjSUxCegjL3816mqww
-bg/KBxIsAp0YBzHXXUTr3yifAzEd9LGH56oXIsEF7F7CxBXd1enn5TvXWyF4mpOxnjqwV5wDpCJr
-z0U5yL9kCXKE8pjywOdbKxmc3SYS1QDvShd4jSgFDgLMAL3plSd9GcRBkTsIby8dwsyPoVrpmAHk
-n8ANZzAMPINnGMZlaIN2NeqQuVY7RDLlx67ki3sk6xuqjtQvwvyq+YStMSEXWxflfB7g4fLDzY3w
-IFZG4UToBzNMjuI4ZusOktA0t44QXC8xreVMpqn9nTtsPWSjHn+nfH/i51Rki/8QP7BCNeSRSxP3
-PWV7vWTtDQuIPLxNzGMro8JZ3u9+S7ms5vPYGx6j1htMTbY4V2rWUDahnqBkZnELMeeqy2Y2OR4y
-zU6OAwaHJeWkoEhgEzPIcFWBIYizjJPTAu27xHmxatDxEl+swGQREIQ+Lq7L25b9wgfqGdacuzLK
-CsoubvFOo3D+almutvWsw5tZFEYwkiFpEPBFx5muafh4JVkZdNO4ycA7RN5ly09J8pmeI+SDLPig
-XN0uYZJfAXf+465VXbrc09Fd0kYqi3reB/BxvigjYh1tlGcuxIKWMYKKZHmMErhfONEfUyVbRAXR
-QUhiWyJ+in+GULQgDodKdyrhZfKKowtQPYVvZrz5hxwozz3lDnGuTD6A6Ei4hPEWtQaU7DMioglZ
-pfuMDPbvXewctpRMD3/FdK+zxQ7JLFdZ1zZVC4cUenLErZ1x2dYCEbaQ5UF4kBBpANJxmACbJlAO
-RA1hD0x+GVUqm/sdKvndCqM+VlyZvChgdWgeYkixtZ+7Vdf8dyteAeW3uqCMHNzQnZPmZuPThgpO
-hCRUGGf5L7EKOt/9APo4+XTsvNUWVbnareNaU2aHq1uaXcvPs85dZuCr9pL88M7Qc/0GpRNSQi9u
-P/roo27FEb/OeMlzTwniy2at5c2OWH27Vj0z6XHQTo6Yyx9RnBOaCxetI6NZoiwIw5TclSj4J2pM
-6aS1bjh0wD9UsYWwQ2dN8w7Y23x0BstIcYb0zeV2uTjE+P3Z5eiTUQsNjj4tPimOrTbs/x4/Pjrm
-P45/+1h9+cfdMuG8Ge4SH7gRtjzDu+xRuDVyTcB20ANWFi9P0n4rWNqsdD/02mqT28qOew6v/cPj
-4rECpWnHZpSorRuN+KIc6W99H1ircOa+12e+XDJzysRg+Gbcp3MpZgce0c6bqiW2gy9LZGUYiNIa
-1wv510oLLGwqsv6HwSRiM3ZUF0y4ntqCv6T6u74pWgWtZoMjBncCFuFNT0ZXcCXcLBcJuQXw8BKF
-zEkeB1GakL6GLHvo6bj3eozxkWnog5SbkXH/y4+YSKlptjKKSfKHZz8Z1pMXyBhZs4wcls02veiQ
-dlv/8O3LezWnogZ0G/Yb/vzc0qpEVG06Ng+L+u92dji4KNEQaaIXUC82kEelHxIungsUwoSddQis
-MYWdaN/wFIVKO1u5lI42idZe5f33K85Kq5v6VKHkONILokIBabhAGAYoPhbwBIDdjKWOGqjlInzg
-JabM43TleRwgwxo8DZzG4/jRIIKpu2hUBtvExSRpAb136QvnvQjMSwp5BkqlBEWBvJz7FQV7eKC7
-kQm4iXOCU4aQyWZkQ9O/jwu0JD8d8dkRV0ddMYwPB7pY7gOFAQuxhtWk1F8PKLwM5Tp2DNJ8XQJu
-73b3SKubNdzWILiopJyIUkyLEWANX6m0s5jzbcnuju0gBrWsSHmAeZiQilVNmnos8BgqMbFOccmY
-pHw/p+LjZ/T9tjKBWwl7PhXiO/3196+evnyZW88erCAsYtleTLJM3sTB+4d6JC2BQpejeDv7HpVS
-bUQMrJOLHaVrQmslvWu1XDhHvexZhUlHEsyN+dVHXx143F56Hy0RLjpVr5fRorlgl9X2Iua8Nwxe
-EYHEgO0/hA6S0XfZwd7sP7hM0XRHri7kGEDm3sB293fVbeQ6I/nVFfrDU8JDMRsvhwXKRtUnSFRL
-423rxtu2TgDwUGHtx/RG+Ixxom+RvXOQRbOKhStSP767EmqFMBnPoGf9UP03Z1VSRh14eiGlF4vk
-3rB4pkwvU1NDXQCGVPGTdp1r436voXdutBP7R05fBEvVvUJWqgIz7gs97tjpJ2wLDOXFVyIsX1kv
-8AytqmtkGO44gRa7xwk/Vtvq5w0V2viFhqpjv+WF1nX1LoFd0hv33IsGR4LU33BkVHHwgl4GKEuw
-nzMpqC05RwdWqWZBsGecZ1Jr7QiPgX6BxjxdaOTJEVkhEhVGP8aVm+iRMtUsk0LWcUx6HfaAEY90
-5/WlLnwEypCYnjerjjInN0r7YCK86LeT4/HpaWwKTugaj5tveFuPdWVSJMc3FwsYlxT0jlxdKMFK
-U2PtbeYcI6EOLHVmoK6ObRGLTo4ikHp39ii62h01s947+v8bEHf/FeHuHkBKZDdyqcd24PUsm0gc
-RBY9xNdd/Q4rqi7XYzH1EVs67Yz/hWK37LEHxnBlTf4XWFryuNJhOOwAfdyxqqsEw3jxrtzNtmjP
-Zfn6iqBcr2q0tFgBQFF3VNUHm5m0DFoocSUPPRnOmz3c9OQZ5fA+rJp1BYPvobvZzzlNqTIL41T1
-g5iWaeNddw9tkOv2S+v3HxtyTx1gVNYoUhkAGec0w0b3iU2zSH/p3l3vLfOQ+unvv0uOi08obkT2
-qEEv3zk69KGiBl7y9OjdzvEdM2C8Dng84dvXa0/I8OgjtPo0sLJnUI7ij4fJ2Y6yBwDd7zAouVGd
-1apbry0UnWgQRVEE/lJcQ4sZ6J6UxRzjDOEpn0TL+7BMtHlSGxyy/d3k7DXnPvKYP7/E1euIoIEq
-6833GbntbYBIyjNEZpbUPJg5BUbcXLd0lnELOC4IF4jcw+D5G/gw7AnubUfW4BknxvaRz9nuT4Jp
-1/KO0+Rh7x2Zor71o4mKZdGjGnpjCpL6um9liZE4CB6y8J0xQArkB48ZZA5xImybzbZXtdlW73fV
-akYQSshJWgtLUhrljBwKhr9GX2hM3oGqPrb7K+2fyf3Bw0I1Dj1NVn5c2OyyqWdV9yVmxXfAXOiN
-6kfn1uipKNFo33z3LT764UzA17mnXdmtyHNH+euAaINjosvkJW7BDxZkigMPAhuPnN2KdPbdTLCm
-RjlEokTloWVY4IeTo5fEV4S5eOsgVENtJHeeh6qA/W/dUElI0yF8vGRAPsuwiDAe+Ae+jnkFEUEo
-dMLAawBoi16pVIxpLXTFIZrQdArPUSVbse/eJuu8/rEs6haRR2u5ij0XsW7UaU63b+DkPNe9u8Bf
-4xE0di0sH8UgclU7HVBEEbyRmE8cBbvYmCFRqB8FFhCKv5T1UPGs/TGENJiW6r4H5GbgMcyh73ed
-3wdc6F9EVoqKSVn+0aRTOOkar9P4/e7jD+gpFHj2BGNi55QLY+ei7Kxb42I+haONTl4w3DN4lwQO
-glEzz8vm4rnkohFkHQ+k7UD3pJKg0QeB0xfluzGT6aDeeqNtYzI2Vd9J0OTXZa9lRGWRaXgKLmwg
-MmaYasPopgIjhN7BomuZu+otcSOz3MFyumAodRkIhi1dcBtZBpAl6rUdXqAWY5I4C0Ne18iNU3Jk
-F8d6/t2pjQsxSawl6ahZWc71bDZUHU9USUGu4yYnSSycBH5t1pSuNe1VAOliaHRsxyLn6E41fTn5
-X3B7pJ7aLJrH6IpmYXXJEVXQwJUbYWXd7wQKdAZiIcokWtQ3uwb3oPTVEfFm2sJrdzWUp8FQPRo4
-0GqN18onA2tADzucU+L/Zew9dSF+BMoSn2jIgnu1plZ+aC/nUE92eL/GOmLj2Lhkz/ges9hjkEkk
-+wWJHLjUuF863WHxA13qGGAYZZy8YxO7wosfnneWhV3ds+xltVgwHIj+3RKBXDqZ8MBR97cEgRNV
-jwO/MBt/dITytqEslbqhW3KrFsYGInmDsrMdkwlyaz1vlsPnN7BmdCvi04CyP8J+DHpjDSu8LqWB
-goIYf2KfCe4+8DcxfdyFjbQSs4DizXfY5Vn+vdCpzIDnbuHu5PuI3IbpEniGQJgFwWF+B/JbBBZB
-NVKs4PdXt2uCxdZfPn/5/FsQSabfff/18yiiuWVoVjfDQNXO71Rg//8FIHffVDaeyO2+UWwcZkTH
-ZalZufFwgwgvoNJSDzKl+c+GGblUo9Ualu98Uc/QEpjtVnJJ4wflp5SFxzhjkx4VQ2PQ1DSMjZCL
-K/1Jjk9TnTA41lS9QjUGNoc1EJdyWbdka8bP4s+eMcLCO/5LzO7zMOQ2P+hCJ1KIF8olid4v5gNd
-XpsY4EjhgXzslWiU20bWQH+EqBnEY/iPg3hqAyqpds9/yNiwEWx3PrH9acvFwgqjIl0FS22eWWhu
-0rPep3+Fly9AcJw85t31CX55GnIFbFa9yi+CoecdgcknWAWVNMdO2Pu8eFfd+rFQMEHPjlHgd2EA
-y0LhU6MCg1WP7QzNsiDsitYRRZ4Ks1xzyMRjeMeWKNSeVdvrCq5QjVClAi4PBdvyEh4rV5gTFZ/U
-pEXjhHJk7eU2aq6u7MjYE6lIV9lW4WZXHEh4xoY6+L1tMMcOsNRNg6j944HxyNHeex7y0EP0v/nL
-KKe/fnpI/xYPv4J///x4+FcFRKSIxXL0g9NaDsmp74OOS2C7UbxI+zOj7zZ2AjJPFs8NEnVw9Eak
-BqPGYbZZGA6fPRydez+iexbsAY7AtlCPY35fWFgpj0MSDfIB0vZJ7k6RgXDjObMDeSEE4SNkeMdr
-HH8+GX9xyhbtky+85BeH8n6bNYvd0nWtnx0NZ8fD2ePh7JPh7NPh7LPhzW+Gs89Rrsce3GYw89PH
-mbK0+z79KCPy8KlqOqTUbQOOWSHonHarvsS/PeU0gkMeYdvZV//wIqI+Pl/JRGXhmY6Ou5QL0BYq
-7L/qyMWhebKhDLatncNTozxrJ8d5XBmgyauQa0oJKz6+kWOQkdH8wz1GYzSJnbpsq7RnITSz6AaH
-Iq2k1USom4xMWt3p95n1i19vD+R290fTfdpcmlWjRKr7548yAiD9lMb8UxYhb0nD0mx1FvpqLv6b
-m2pW1VeoFAVyl0M7O/JGsrRYUmExYPGM40OxnwcpjvtzGunHHatL5wWbjOYu+iXPgSej3UUandxP
-vR/wjLuKO9+be9ynGXRYOLuqtlvFraEmMAy1JL/I4OS2seJLsjx50qlOZNGBQhjJdo6x0HBfzxty
-Iy2KAkNbLst1i4bM63KFv3Y01G75fl+SFm9b2ZZUCmyUmcA9MsQEyZv64nLb0RYq2+otqc1Yr7dt
-1qMFyCMLEzaD/oISSXldz6qOlgYNWq2gO1VvmKhv4E26WcL6JPqdQKE4eUdLJs6URgTiFBmSJR9o
-68Xz3G8vD5N3VYWufrd+NEDcQdsHZhdPbXU553vpgAPBY8jHtMPt+r6H81CUoVJU1KEH8Zvx2wjf
-iNXHlyneI5hFco7WY/Ytd6KKOaee7Kh6TiM5h77qFuNQb74+hmHfI0+ZQX9CHx5mybivcaLTfVv+
-OuttSx6r+7b2rL819V7et7l/7m/OfvDu2+RH/U2aF/W+Df7Y36B6b9/ZHOGKH3VLzY74pewBvY1G
-D+LPvMdx3sedh8gao6Pa6BunCuAjZLMGH4EYu8cwqDpuj+MMgpE8ppG85MPxGX34u/5hsSKkbzz9
-4sU9Lv84Ziq2bHjaHaTj60finCSqLYnxBU93ErnjjQAx3lP24c7Nh7tfe2H4G8ls+iWNinZ0yZgx
-yu7A/KIRgO2IO/WHHJlf/lXOl16GLWXJALpWEHvaoWvLTpGE/LDNGdunTFr9fI++1pnu8WmtgxqH
-DixLe4nB7iRujEmMsKrSrWNkAONyOCTDFQkdVOZ8t+DfcbT1uQ0zeFkx9NJ1SQ7JJJ5QeJB+6IBA
-ZkcXohDS2E3Mq3Kh/VbI0EqpLHDwsBz0QKH8FttkxD9TOBfKWVYjJtIWz0+5scUniVYuUSCEeVhi
-lG1QMhJVs2JFkRh3Le1J26gBJufQBylTahz/r689USaS5P42knkz6zCRIDXubSC52y0hEPowAMcO
-bNuhGz1FQ8OY0Cb0XKIof3f7qrzA9Jz6qeIik0vFrvBZj41wYUzKin08VVk3yYvft+TQ0UHTSLUg
-xVTnuKhQFmBEkXgpDXi9ERaxF7ZEw60Wbp1Ib9ezEZeF59aRu8pEzYrEVINe11gmCy8Pu+oE7QTa
-lSNySXUKz+KTFX/b3l+/E31hkDDjDVe/Dvcb6x36n27djz2/uPZnP83PB2h99l4LZZX5FbatQyX0
-4UM15qVfY7R7idrdKizJKhk/RhF+ET9JbMtLBNzX+gFuwnjiaew1OwrtZ1oSy74Kf9SyV+xHwkSc
-+AmhIzuSqtdEGvOLbNs9HgCiZ1c8bNu4V5BZcoqBv5vdccGQ1ylRWtqJi5N6yVSx/XYxXNSs5/cp
-31t2F7HLi8p2dISgarqtcadamZI/ET60LgzLYnkMjHt9s2U6D2Gs5EBA13HcwBclmGAYd0wZW6GN
-e9M7rL3GTyPyRn5wf3ZxEFHJWEcA3Zm1uRzPbFxdM4gY3ev5m3sqcIJbGMahjLpo+w07Edl07DgD
-hMWcy9uy+Ycllb6ECxpvg1jXyK0UO3ML/JVii8wyDq0l9Zd8S9kVlaXZcOuhM/08qNT7+KU477sE
-HyoUsmu7rtjMBzzboV7w/MM1Ef/FPdJt3RxzAfzHD3YB4psvKspi24o4qnBP0Bly2ZDG/LzxAp7V
-1rR3sn275XDTTEORtbMkaVMudn1sHHl50y8wR1i2XZ/IRvvtaB6Sj3+uiccPAX23z+oxhlzgPVat
-BtJC/gFKrF9SweIHVY27XIMk2MpGz0InsrEPe/b6x5djFZCMGTJbeOq/K1bVFjHYHmEwFQUmbzfA
-DR/N63Zrfee29CNSXk2s+/XrF1+Pk/P50fzzs/PHo/n52W9GR58cH42+mH9yPDr7vJqdV7/9TVnO
-S6e+GNKSx8ef2XhueMMlf1fDZM3tYP38E1wy892iGouqxPrpJfq3PZMr5CmdW5js+l1XERgC9n50
-1FXgayA5KHF09MkIZvP4c/hz/Okn4+NPk4dHUC0ZfIuaHvj+e7jMsJjtf/wD4yvUVcuNviYKnqv2
-jmGJkuNPx59+Pv70C6c9+P675kra6/NzUr4gKkrwl/cGMXldXc+HbJyh44NfFgrB/2rjpIaWSfCw
-ewdNtUr/Rg3Ec5UP4soRwDpADwmdfn6SYf6hPTFkWNvi2Ni+64jPSD1lua+oGSadVUWFH/rdcf5q
-HDPKavgpO1VJxCU0l7SIBKaMUpZT8o71MLZnqKXl99N8v5WxmiAdWjxdsQNQC92QusbPbUy+rnZu
-YfKPdXRTGTqmiqBGsA2oRooMiNEf5lNnbl7d086W5WXR1TiWnOpb321Yqp52NU0SfFfDS8mGzVm7
-r2d435OzrtsHtXEaweiR6lZbHyfHR/TfByQAm04RNIUzxVE5/Y2dW9wapZtd3HgUt9Ae8AzKvodq
-brgOZvCAeP3qmXEiRq1yibqFD2CijHKm/FIydAccyf8l8H9j+b88GZw8HJ3SX8XHwGecROWh90po
-VpcK7OnmIZ11ZT7nbv6EgTaB6fwQjWjYggh/uiQBxSNu0tDJjW0hesHi3T+LehLPoo7BGat5uSH6
-uVi6mdRVctAYns71DCWW/ox+fOP0l9lUN65bZ2rdiM0qyciJc5zmAWm5aEMSPDx6YqPnGKQhTWwG
-lsfA8YQ3I5LEjeSqx07MrcoB/9SKlaWqXqmrj0J9BkdWzAXj8AmJui4Ycbepu306BNJqRN6NUecO
-Yb6G6GyR3fLzxk3sUQRiR8qp3grBsBZBMoYhntHRqQOoDO9cX4svrXlLFb3Wdc86eFi+CDL56ZJA
-7Ut0JrosrypOpqTQq4CWPrKgu3FHT3gRUHBw8JaU+Ui36hwXqnrAJ8PYhBiF5OTU5KunbwLWSt9q
-8T6BqsUcLVvUkDIcub/Tfm9QsQ3DUiWN5ejAhPtLVrOTiAHr1DvyOAp5OqjIlc4ng45oGR90SA46
-YqZLG+gagRZrCl304nZ0I70BO1jVjdahb/pDdZyK3xH5oSaZL+v4i9INXuDaVlBRt7qPtMCR3pbt
-RUdXurxpv1tvx7d7e3G/QXWrlyPtRrSUXZMiWaTDd5Au8qPPR49/+wou8qPPxsfHxWe//eI3n3z+
-H6MV5MK6/8Q48QzrVlgqKdebqSOT7D0hQhroIwkJT/K4YRABEqdw6q+TvH1FWkDq6z1IvXPAioni
-a58j1ai5PN83dWb25UsVcodeGCBPiAvGg5ZUWvDvkzCCU3GKoX2ihmbPMJbr/eL1v5+ub1FvUGBm
-U9Sb1hfvl6/+r//xX/0rvO0VFBDKmsMEiySwr215gRx/uylnHIWPtXYbQXKi61645frW/EXaCfnU
-oJp0heIWx04eENNVQ5mhx6qUvCo5NkhkXyowLeeSc5NlJiX60n2raHGDPJGRQrN5dba74GHKG5d+
-KEw72Wgkc0VMZZJsJim5zk4xnUnqClK4EJN0XoPUUt7KoOBaPdPrhRezTMBGuUrtzq1ZpKPLFG7Q
-0QgbTuMDAEppt5OUS0RGg04wzg6p7Cxmb2gsXWPIRmtr6kyzutf1YncB+0WfOeUSnsJAulxW2xI2
-bJLilqXBzzzQqtwsbkeLppwLHAg3ngyWCAkwKhk7LXcXy9kpJLxKtjPopGftrHpmJoyZ0DFWqqFT
-3JScsrw5p2UlUl3fMu4AjHbYNVyivnsNlGrsOUT276bEbOgHpA4lNWETH8UvMKnSbwVCDOMiOydr
-tiSw7CkdocF0SnsCD5XFdCqHjNcP9t/5sUCwj50Om67PpVzBy1BQl2NfRJbM7wVIvhRJmHrjs3Q6
-lJIdI8lZRMSscVZ2eOpqSvUoWneSGO+rc5V5SrtIci+jBy1insg/wB1X8Oeb1ex6PsF/KVsv/vFm
-hVlkvMQ/tPnTqTSJUbLrW/dzWkgaWXgHDeg9iI5FqgCZFDzPi4ZCyKH/QT7Uc2o29QXh9wXTJdos
-6BHRVlua42Ygk7U0PNCpoJfJMuA/lO7crLVDJ9smwWkrjZgrv1LXBwd/IyuwLDfvYCC3qCWxyWi3
-UoyHsvDBX0Y+vyxbMpnx95iQXO+b/WgJNrWYLZrWicuPTA3NNXdP7MBTq3oduU+dvuWWHOyxE7Qs
-Ye/9ubuHQohh7OSKc3V2mtJwYHAGeyb/Srz2oAG6j9RdhPTNdxF6LOM9G1uFQZSmLapjLi1QckCn
-/FkKk6+cTNZJbqcrefhflm68q0x0llTpYZLCBIKwWzYSsMe5s87IKAPC4m6X5Qquyg28BacBxZq1
-hqsV2wh+6GoqQv7hYIlo/KZ5mNtrJoS6KV5VmyVief+BCU50XNcmwyXRrkg8MF/5i6me0tWrCCao
-hKs3iH06hI9ttR4k6QQFEeHxxEqB2JFdtKlbLz1hgjmFLaxHgsiiPEpX8CD2UhAIay+g9F+2zQ39
-C03DXTk7557GqT+yAz9c3Jsuvpa9wHGcMEimILfbokqkHukhKJTcplesGM+tS79MkpT1kFYyvjXl
-3UlBFh88aDm5PcfKY43cV1OlSfJg9PhTnZtsjblacNCWb6vMn+N14RN6Jl/X8+2lCr7XK5T8Lx37
-CNvobReCWFYgEyrrbIKsGw4vDXOsmcZoJN/fWf+8vkFc17AB9YOj7HQHntryk9BOuP3qhGFBdm+e
-UBB+NffpfqqK4a4WVFZRvSIfeb0IERGnVkT70O1lHNkz2LTjz9pEds20t+eu9R84tCX7YwLxmsoN
-RGSbigROEBUKsJHlZg0XjyJ1BjLFKbOWPh49dvWxom21OXyUtckopmh21qiWHWyetYwqsQ0d9W3T
-LFogiAuoTgkjZVLj1FVTYfNDNb2eG2JBTt/KBYdLoTwhl2UmceT8g4/TKf5LdHRB8EvKrYL6xO7R
-Fwbd4ae81/SVrCMqzGYRvHk9V8QOfag6cMQnKudIC+gdskE+XcIl17s7cZGa4nmcr61HTtdm7BA0
-YGzEYPgLHq8jmv6dQoEr5+aW/Ru+vKd4IDXGkcUUlaqUkF6CNdhjspytOkZq8pWXrkkYTZz+kRoe
-83eKzQS4JjblegzFk4BDio15s6AowD2qYvtEr5HlwxB/L7nSnXTUjh32tsljpHtwmEw+5D+od1Uu
-alIWyvK0t6tteUNaisumedd+cNP2eRIGZXjMQPZO7YqsMDv08EZTXkRrQ3jeNCZje8Ldpa/wvq8x
-1wWTBH5XTNUvtiSCX4lT1MDuRJVVR4clirqxRL6b7YvvB0Y/+AM6Ig/8PDbR/MWqMfUoSPxHKL8l
-bXAztwIJ1jzjkkB6DaQlW55k5Uy3TC78NZq9+He0LyH12yB9gvxBPqgoRDE0j4scfFGt4MjPcJEG
-EeCewAfGQwmixY361qhrgscHh45ZSLnAKnBVdOXW5sVP2aalEqtinXHqp4rRnIBXjnA8u49pZDl4
-bAeeSg2+mkpeOQLsVSpRmUoeuMdljmqG3B6sZsIpWj+qDEFeE24XOHsYDK21J0Orn2W8eqj4XR48
-AaHUnYNjMrf3N17O2iuNFv1gw4CxSmhF6XsAvwYZzvwGZttducCzh/Y4coFj1sjPKvher31/O1pa
-piXTqUmkuX788aE6u2rOHX3FqM3+72xTle8CjB4CkIaa3QA9ZDRHRZEi9mDyTvbqoC2xNkfEM/yF
-xLPY5cQW+B/ol7/nKwM2QIzxD9rxm5WIacx3NP+CfshZY0CpndnCGm9F5wi23BrkTsJZYMoaXYOd
-F9jm3MWb5IZciSkrdSV2wkV14gawoG2tVxXOd6sZ7PN0mor/h31rNGd/DK4u62rCzHPySEb8cVNa
-HSH+PdZt6icv5PZPpMqptYfQ7FA15UgHUoeHbegEZ+QuEuygbJ+Rm6BQoYhiaCUBIfOQaDKQ/hG+
-+2P1NQ5JvqNeeDiwcO9Xr/8dyqhWNsj3zas//ZYMWgfLBj1T5WRjZLKd+5a00hIGi8Dwc5XqW4W2
-HUj6bAJTzYqEVG7cJDwg6iWnQsDEuirbCSW0IBGnvrisNgeYe2KJCCsMX0xqe+A2HLXLscrlZlGb
-LBySqMs2nLW3LXs34fvGsrSRbg8e1Oob5UuBKGHqR14XVYQB+OO/EYY4BhLDH7FyBfky7LbAfKTG
-73b1Yj5r2u1TSgvxDH8fJk/hEFw8Y7+Hr5//7vXv2ZqhjuhPVyvxnP6BsARVZwX8gN/8rtS3MoeY
-8wjtdARbRMdpzs9Rm2EyUgzWTdvWmMCCvfhza6eFIsU9uq7ER4kx7xbtprrixDOT6JxAmLpBcyzU
-mxw//iJX1TCkUFc003aKHx0dwTVf3ohn3uQ3R8WRAye5qq6n08EMQ9z9KHyKyIxgR6JlhIi2sKrn
-HQkZuNFZ4DjPPiW0sX7cBfarfsO/Y9HBfNrY4m0GpzeTZJyzcj67LBFp34ldtFvYsDtS9ijzfVS5
-aR9Ovw8dU4btjNhOpHSn+R0xH3X7IfS7ss5LxtkHmxyN8PZoe+G3vcrDRBqIgbFSNmAzXjyaNabo
-vRJHIURXjua5FKsc5mNAZiTsa5jw2y9pdpsExVl0zRZkcUZo9xJ66GWIqkYd51UcG6umzZh61kHl
-S85Gm8xM9jR5yKKuW32/ztx1op9/uVWyF2ZBA8canJYb2j8NEkFnCl+bR0xJYisKMeOchAQsgYGQ
-UN7UXij9h7sAOrbabxXxpqs5UlJuBzic1zeEsa8yEVYaLQshZCjND3kYX1MCHdSleu9C0n6KGLpw
-WAqxct/FkIReXE1y1aV7XoXLWH6pduYtSROBh3TgF40lsw7qqJ3da0uTDLE9YLPsbWSsdMOrLKx6
-VOMt58FJIM7SmdBbJ97NoLouX6AzL/wUYtc7FC1z46S8Ztbq69h0g+gCASt3E3H8jLz0d4NiYCIs
-O1HHN6goeH4DJ7hVaTO6cmLpTvzq5QIzd9/CUO1m9siGRclLvARxutydxEVA8B9AWkODSYvZI+hs
-4wQIlxeTE/znS3NrhdBvU9zayvXjroFaOUms4Fe0eFHcnc1hhJE8AtQKyVJTxFQjj7loth254M3y
-4Anvnjy+wxy4GR6ILbcVukOCdaH+WO6yc03/almQYK/xSx29m25QCbB5nQ7zu7zUqZ6oOySJeTWn
-dxb+MszznlwoEg2OWJFIz+VWxo/+5Um1XG/Zx8lcFR8uGpjTlam+4vkn7vCtjJKPo9XpFLn6xkKZ
-UD5sRMbTMjo2m37ggW7hpu+VpBSpxgTi8zv13IGcou/wnvaSkxLRlatb5WuHxbQeKp7BbaHTSPHg
-JTiDv6rWjhhAkbh58mXyaYxCDVN+8d3fP32pcvLh21rxMlK1pPa+mVZB6P60ew/7s5z27z9mqVWp
-3yZZlnc0JtFCnEgYObnSvXDYQUIhD2eodVHGjbnR2i/fmZR+/ZssOZP/Q3y3eVNlI1FFe2ADmcB9
-Qx7uQf5jSltZcRpqhrdQjqHxXecyU/ZE52ESGgK1juEdOB1EK1vfkqsrzLnhHBXW7vFM7Ky0ZmFj
-pSwRPqMO0L49WmZDazh+4jrvarAaUwcrzABiCpljiMnDZHtQlVRtgZ23F5MMvq8Zpi6Yqc/nKU0r
-zRZTYFEjCiWDdPraFRcaLjxOr3Rqqm9Khz0kHpp3X/Txc6XaSNUDDsiCXKiXuy3pvYPkf64UzQwQ
-JzNaEvsz/wOMcACj7w8kCxlf7jFDHqFjeIptJhezN9JKu46HNbJhKf8y76BNn5+SmlTnOttn45KO
-neOh/Jx9E374c3YNrTV610YjEDtnlbt7/TuHe/uLbR8HF4SnsLOws79keFKp7maY1o7OI/+w34Hk
-ssATWWDZWGx0QMlOzWfKqkRZ1mYo/ODuH+xxbG155194qzdL53iqkxnZvfvuk96E6gYlR3XIGk/g
-5tcP6XoJt5OeLInhqvpFShVV1CyuEj3iUEGACfYajHxdsGKibodG2vR8rC0/WJ32L3p1SX++76yM
-v1slM4jQfQQNr6O8ND/MT+9HH57KSxgJ6fhQ74U/70EMsg+seUL8Br5p6aIdhhcgD9ba6BUCy+8l
-nXBR1rKXrKgaiUxCy84P9GQA51N5XJYuvhofx7xIXpwnt82Ow6wxq28otCCSAmURckPhdB5IBflK
-fG6uc9i4snFnYuL/Fzi3XC490hCKVa7ExXLQketaRNHScj9i/FiLqRqrTVvRcoUBmzcK2j3UmLgW
-4YikHE2orYUMzM9OZnV4VZDcS8ayj1LnYXCD0jtXibpjqOHhfsP/dep1cHXwXW+P5tXXL34c3NCD
-3tqXn/jbmMx/Y7EKEbbV4ODcLbaNXU+nhJ7o0t4LiDLKWDHdW3gk8y66OYRBosWfenP7cdVCzqPq
-ED0OeV0CNc+EMzmKzS0mr3U8XFM5yKKXdVkZd9sBBeqWlRETKau1yjtq3njFulTVnbzO0Vp23mfW
-7p2js/yiY5VFxgi5I5GCeu6Rzv88fPVZyjHGAIjnF9tUra3hVpaaTCplvteQSVJ4Mh4dn1LKjk2N
-WSfKmm5JeKxSaie3f7KPBBq27q6xfOb6o3NSr9YGXwh+P7lREAGGCzHkwPH49DTQ7WmNphPYL+Hs
-WM0SNkiXHMmHaLRnCK6Fq7GbbSkNihjVRzCfqxpTjNjBlQ6zBw7J3r2uqOM4rWHlaVu954hRKF5M
-JX/7VP1s1ThbqdYUNUc8P8n/VXyyVfPxrHbAHc9WnSmgtXN1NzsW8dkQRTD27qWFUe0qhIRpeDQj
-Gre5RMVcjT+TgdleWewLs6Civ/I+Scm7aHJBvuyjqyyanfzXTCPOyO3oH7racsRKubUSoPam+e7c
-iiF30RHwbnWfPn+MwEC/Hae/dk9sRyFHL3Re/NVnlglICgUnlMa/oj9F+y/Q7+sV+diBMIgq3V+v
-Nzelk3i8kiTEMcv36fnps2fPf+rv2a9Cmv5I2btYeYTfeQgKFI7XqoA8D2DH1va2YU4/469Frv+C
-hyg+PQOu0YkVjJXYq54Qa4tsnIgZ4rj4DJnAfIcZLeEH5E5ttxbKnp8ykg9M68yZ8+418TN5en59
-qtgvZnvaT5NgWyyMWxI+EpoN8eBBh7eIGK2Ge1owzMuAGfveZhTHeNY9rA8bjDUcfcvJJScHB56V
-4htF2WcjKUkoVspcbBKUg85VyjuMgUJQu2RMc/AduSW6r1h8hahaHIfW+dC0HK6gLXrle3flOTnt
-irD0zXfforMtxm/Xi04hRZa8W0QRy4ldjYwox6Fj7lCdV7twkIXByCqO4MPwFni4GCARTi5Fb0cw
-1OW1Z1kb8WGzjxlfnnmuHV8jwJjXNAnTxMEG1kn3hTBHR3PuuyrrZi1gMv6OS8MD49TXyQABkAhO
-5ZgAA5mefrNktEVzoRWcV1PyxRX6xc/As1DpCY/6swae9X5AgpP3VsUAKgwprSAj1YjRbxcHuifk
-M5LuZUMAANrbayB6G1LJNZJqHHPB4nniFvBNJPUpR3lX3b99/vRrqMKxXTgNrMVZobUOJzJmcobF
-0AoMMpldMqaGwhpnD9hu+3WeHCK/xew5LbmGbmQNKnLFsDZFrcQkcVYFt4BoOsXhk8O2/t2pXREc
-qLUeHTXh1wOb4KyeJ6qo+Ntxm8EZxV/g9kD/q7SXGetiZLsei3O17lBTVm6H6eHGSD21TTSJ0RVN
-weryZrkgd5ZJ0mk4B6JORiMoiLZzYz7fk9sPZApDe1zDxDWem5fWHdht/AqpKj8X0EDmYZ/QVsHY
-uBBpCmrJx5DCZm1orF6wNIWo5uClqS/7caR4YEqGMQ9qdWo05lseUyFA1YODw6Pjx598+tlvPv/i
-t3v89ZvPDzDs4/Hjz34j8Tvrd6rh4998xkjHnybHn48/+0wj1BXr2wPOy9WuG5XW6/c7WPEhpd88
-Lj4pjjDQES5f9MzGp1a5qC9WlGaUFJCtmKbn1UcffURDOP7k+HHyx+Zytbq1FuT4N48/T74tb5Oj
-zxCN+ZPHhJg9nVezZlPCrd7SWFw4bgeMmzN4ZUdfZYlCB8MvlvUcwT9rcnOBe6xmkxJy1evLCn1d
-qJgGCa5baY1BxYcUD08ngCLLF5JrfIFQNhgu4EJrmr3K/in5ePDVD18C4T8hUNSH+InxuZ5gAnX4
-4ugrLoNIvFQo/ypxNeIZ/Y4uB0/eXD9MHr6Z//nxX5OHJ2/m41PVJnLRJ8XH+f+c5Z0Qg7UjMh3q
-3F8lxvVj+BdHwdPB4+PeKnTyoijMmA6ntFfHsFf03x93S/XTUfK/7hawucnxZ+PHX8DmA8+/fGRA
-OlH0UeKNXr0oZicldZ9wDUbXJDzUwNrF2lssfcKSSWiioUKYPovEl0fZOKZlLA2uL5dHBV1YUGCi
-SW/fw6ydsjQss3r0GxwXUu1RpJ8AdNLwfsgO7oJZprl68Mox1GQqF6Al2zjQXAQ/ZKci6an2+Ut6
-zRwd9EAo44cpanqmy5oy1E9vq3Ijjfgwyv/CEMoHh9MP+A8YzCGdcxQu4GVA77oPbMqAOHesUwjo
-XK7Kxe2fKs65jKtDjIwOZYnozhcCCYvMK5VTCpf5gdjO6EXNSLsEn4yO34QXh79hl1ZK50x6Z5Ir
-l2f1RbMTpyMlh6nwIQEw5m6mKL4JGPIF7aGCcNmSvUp+g6ZFSyEo0vAkuwxBlKmKnIFhkj04y7Rq
-b17e3l1+DuUfc3kSWCeJUwQ4Hc2borp3mzFIC7sti4qOFhPYRTpOSSsCrdzhhWlomtr2x4gt4ND+
-0c0Bhf2zvLIju5TAGLEe1LQ+dioMTfl4J4g4Df18Mv7sNBgV7hSOwIhMUy0ODbDQkHdliEs9dPob
-JkdD+n/Oq1PXf8KNu+tE3Y5AxD34WX11oGar9kzQp8LZ7MTVZfzNcWeEUScKasHWq0H2+tU3oy/8
-GCUG9NMNuJC8/GOWdzahHb2lFcplHYPYb9a3ePCnzmjdzlSZEadn7OzT7tdpN4LE5ZQxF09v93gf
-oXvJ+/Xrf2vAPQlj9P2r//NvGWNUxWYw/2KN2ZBQpciJR6FYKrggsQwAz5OgvQBqlOIjmx5MUQ4L
-/pYRHDyA0m4wRAcKRIAUPEjEZ/SHWzI/sJHCqCVj//dg9fZB0GMUhuOe+I/zemVhXs0WVbnarYnv
-BQEgL1bz6iZiW3E9BKDBgXW8EHLJXE38mVOp2TupnYxFhpDtpBjtVlBiuw7oDr2vRDMi+w2EEYt9
-LKblqlndLhvKfPQ9Uc/vCfQ1ne3aLRCAUFQ6FFjYiatR4kYYqd19DUpwhO7exNTAB68UDRjTsuK/
-3m8CNuYmh9E/RRDeWRasV1v5Xq+S6R6RRUUMsiPZHQHXlA7epxpByL/SYvMeSBdmHBpY19i/Cbl0
-tqnXjGmKGLZwYqNZotEdBp3xxOUAMyqT+yZ3k9DuFeZuGuOvY1ZEis+7lGSoVVPQGsEYHmkEgqq/
-IQJlgF2Vc8DUpLGaPkhk5OaRFjF+o0FRYV5RTJzXim7mFb0W8UBDDcYilmByfAfDI/PtW40L+/at
-QkzRUSGtbVJu4alcktEbqo7Xt2MUOsdvBe9MN6PLf+my1+IHr+CTtwmGnl/XiwV6THHGbH4I2yoR
-DK1HtCQevTyURXCEhXn7VnqRNXj7Nq4Bx+XSTdgnLKBE3kOlZaat7rKJU1H9o8J6to98QIgdZ77W
-UpYabD2EBmm01Qq41qaUoFE17jwycDNsJp873Kzs5op6hUrMQf3weMgzCXQ5PFt95AygsLjswSdy
-2UN/tjBohNGP4GhFLlf7bGErY3WeJJHDDCiVSQQtuRs+ScJF7TODHY+JaimvId39rehvkWyI2gXQ
-bpADwat3kxxje73eKuRK9O/dlFY6MaRt0TfMmxnqehCpt2g2F4+k6CNVt7jcLheHDMcwUl8+eevA
-ZSE+wBoDX/SXT3Hz3HXCirWZNPn2GSgXwYQQ1G+5unXsJR/4q7qE+btYZd89/fY5rMI1ZsyEH+Vj
-3QKH2aHLEkZrGG+TW4ruYIiKt2+RU0Nhvc5DzunNqXt0JYu/DNLRCDdOQ0pjd/ChKIq869R696kF
-Yu1Rm3UjkTzDJOm5jlJrGpCU0JvN39/e8rllNuUZefRl7NzND8XoYwZ4Guc3vZxGgU2GmYWBayDS
-CZWy7w3VdOG4/Oj9Xm816vwtQtXqKRc2Z9JzZ/aUd7ZTmDPTDpwhR+uY+0Aq8WoNVHPxiE9TUbI2
-wM4NTtAT+cby8qKIdH+vp0CkDiNi1+FACuFcRo1wYXF5lgxjrgjsOlBxviUyv5kGtPZGYe75zyJB
-p5HerJaC+ZN3tc1VQQRzxBgDICvyp8Jgj0gyhs+ujIAbMtlQgMHCV+WmRn5iyjGQKgHNSjlVRjNl
-uIDhdYbGv7dvh3jeYTrAF2D53r5F1sW/ODIRjX6sXbNlgdEs649ZeXKjoABs6f0OxB20vjkCDtdv
-zp05tGp8sMpQB6M1kAOW5OifbI0rm5FkhDeCMIg7wEZcX4h5Zpd50sG1xB7IyL2rRKw1qVonjKDF
-VcJ/1QoF0RYOHjAqJiIwwnmH7K4sNezUqV5J1uHvVEPE5WaRWGJvHdFHO4yI/RstfjWxWwy4sQKX
-PfXzBQpj5j/65Q6RE+KyB1TguGcFuU4GBeZkzr41arhxvjmI9OTfVGpsU+1soVgACS872JiNmNGt
-p+a9pvQvNUry4Y8N0tSy33uRGY79zGamRIi9js/ZWu1SMaWiUxIGY25f8MPJERtKRpzwEr85Pi3q
-Vlzi+nze7DB1Kj7D8F/qUhEkvDyqDXCNNFSHrS11Q4RkC/dNrJ6qMbJXB1U/Z+WoerJIfKN/sPPM
-xFSK9u/WK9o7V1ZwU2cnRVQZopCu6ZPrSoW3PzIsEQEUxauRChR8ta6N+wl/t3VGrDQO9shZDWFv
-Cn3hbQe6H7xZCUzMSYpFxoSBbLnTUL3TXLD7o/URuiL2uxJd/LscFUi8hc9EPzhg8dsynNDDmu0j
-lOmWwfJmokEUbZSychEUG3xtRYtcl5t5q/WPGutNIaHRl9ypZyKJZYBesapRBAtsdLZDX664Ygtv
-sMdYaOmg/ZkCqj2UreVPr4QaNzW1bOaxVswwRGnIHwwvaun63dblIi7o0zJjQGWDisI5RXuh8xBa
-eTFCB9XU7FnRIMxpAsLyxaI5Kxey+i5zwoVVw24FYU8/HK3HEkoWIGZMz6pzTJ/jR9hxNJk85AqD
-Iy+eRcvylm6qmO45cPq7RrvbruXchiA2oUl/UW0rfLKV51VyXVIKzDl8hbkabAIShS28iNkEJnKd
-pRvFpyWhjRJQ3QLNuuzI3DEWagxrcXKG2xbxozjPWJL8oUr+iJAEuB30zISWLqxXJb0sKdn5Bpnh
-HJ+DcTAAQZXwQypz+2JEM/ZoZEgmc1UqeOo36MA1QKdEBjD1gIrW22NKsb6hn0/q0zyiqTy2QSvh
-c951Rx2TuXe97U72p8aRPEnq7gxu+JiTBTBBlSf1w+NTztHJd3XUTzwyXORok7Tjhgy6wgZOcJw4
-0YfH49MgLWjP6V3foYKiMAA5ljawswfHG+LrWpjlhJ6bmSlmOdElfO1gi45G6b4ZzPWA/DWPTh2x
-TKmCDm9MDvGEMj5z2yzlZDBT7lg1OB9TzJagGeSA24xAOTtL5mDsKhBdUyLmQxJ2JdO0pb2wkHBa
-HlXvzXCCl8epurcxgZS0IXdVMLVDOAfbTHwuVWoz8qn6GCEy0c/+oGu1Y867RmHAJZWLdkpNpvHj
-enOHN7CebGRCN64pwv85ihUVdZ7VWZHC+138Rw1oTuGFnPtGtxk1OonuECW73S+te32uQ5zDeIAO
-6Cd2HdEvfOwWH9GpS83ztQLZDKPh7AmcBD7gUPMjrho50Yr3+OwotulSmBzpcZIfTeyvOHqI8Ecx
-Ipd/6eKbIPVFOHBXnlVbDlKrQFzGTkSTdkap2NVdzKzuS4SWU3tx4uIwtRk2YDUaQfam+ifjo76T
-PV/HYmMjtIfMFduzeMAZgSBXK8wsPk7Kq6aei7+1SLckYG0S5A62BucwKc/PUcUNAtEZCFELkH5a
-OVqsrSYcGSXoMJC607eyefMELfPmxg2p5TPsy8ZLxO5nJZQsDFZjJyqZ9MDUDvR/VNPt0q27R//E
-Ibp3xe1Xvi0kWN/LF4Iyeb1ShfaKpmS8bVwFndEAP4SZCITPaL+MjhDK4E5mDqPYk9Jr6aBdl4oF
-INCm5bGvmoscn9yt081WXXBM7zlzYn+xJ4Ndv7sQLuAMa30rPwwCcUPV6GTJUw6snwpQzRSEct7Q
-gdsFlNGB8AdxUa57dughRg84b9i8H96ohcP7peOMv9aIdMZa6/CQcUQq2gg6Nb1N49Xiynr/olOX
-gXB9GQljO9AUJmp03bxW6Gwp0Zh8oNrO4jQ44czLJoovsG7araxsUMIcQQcuU1fQyJAxpwz1UI+J
-iuo3t0u7OwHY7KA2+MeCInCO0rxaUJy0MJoTKXp60Hte6JZVKpbl/HsxSwVKlstmgUoS9pYyVtPW
-sgsXPXqRCO6M48WrkujYEH97pM1OvzRjTh5snlC+PbvdYW7rj+qLcGIGTd7No8yKC5W/Qhy9mJQ5
-jwQn/+nVBjl1/VvmcOz0HSgpvMW16w3msCjVjLAIyXvFMrpcaONdn7FFe4yg6rkq5zFtKjq7GYrI
-u9SeolN1iJ31mSn9M04erDfNRXIiRHOanFCKq2YDe7QJPhVFceqllbbcw3zHJVMwdxbW27YAWorV
-y06ZiVcHuJPjRDjA15unGGC/dkogPYm0aSeURcFHkm4Gtin9NplYak6lSXQZhyrqNSHpeiJDwF9C
-s5ZKYRAqHNfbx3MeSqhGZDdDy2Ptb+hsWSmNSBkNoiWePjI5U5YDMXPgl1HVIr5QCQEE1hyomXNP
-wt/wVJWtVukbbGmf3DGhfTv9FIcrLTD7BioQN7s56+62ZAlFBScGQMzKNbAPW4knWlZ9XqiAIRfv
-+yLqPBpLJyfTDTIew/E1RvKhmOBaW61vlfYt5MIrrVWNwEi5dVVqvFhWZJdelLZActvA+GzoHc+Z
-VfM9nzw9oZHvJJ/50+lAg1E5tx7okr7lwQaZufvl0Ae96xh68ACT/l14HeX7qI1u1vjsjLTwi20+
-Sx7yN+h6E7GnucdIm5uxypycjyMKNwqHzORxL9o2VSGKrKUqWtx6qGvkMX/PbXd59ZeYwM0aActS
-CaKEfpRpqfVfAYuFVug7igJOLemLvQVfroNonkbLoBTZY512sh3kndIfYZOJmGgP7TTo72Ew2Mhr
-T6YbRH5zGza2vDaj+Eo+l+cdCgfSfpdz4kZGR4WtJIPDum131W8/8flbvdoyakbiKBQ5ARmiNtJL
-f1VVc4nYxqhr+3V/hukDNBPUAk1lcTz4FZY8fqXoPYALjechv9gowVS/wLiNZSWlekHSYi9hb2ss
-K1WYNCQKCkYWiB1QeLUh7TMPqt21+DDQo6J4z4sLggGjvE1kBbpA+tl6L07vrHPqcuhBUivCX3ms
-hEluHiC7cMoCQ0M0Q+2wFJOZ8fo+v+CUXfCHXCEnVvZtdISRBNz4p87BnZ7GpbhCnKQyuYcQtam6
-AfYcNZ7hr9hndkdjS50bFmug1WwpJrD3u5pSA9/aSewzlz1Xvt+huSU9MEQt1NC6uZRRK/eWNgTo
-PBnbijesm0rZNI+DdJJiQ4Y72O8qci76/aqYPMpTCgJfN2hX37O/anUViOoRtnTnaOaN50Sjtvfu
-tdUCaSAmqbVg8WFi9nbip/VxVtp7+zFdqa3j0yAw5jbF0XPLybtAv7pj5Yb4FwlZTH2t+vKWS4WJ
-krtqYGdU6cvkKuY1rnBQqL3X+EhiPVwc0xEhH+ZjdWxak9N5qHSv+pss7QKDttdKByppOCH5AXep
-OXfWsQPSh0sMI2uS7+c6fMg/ivVF6RWM0RxIXvzKRNSX9GdWA981W4Gs5XLokrYC/nJWKc+BBvHv
-1mL5optOIOd89aUvU2kON4wAbaa6J56CNXhKMb5sCFZFun5mDz94+TWb+kI8ZyP8po95ON47KpVU
-5CBPqUCAkOy04bv9Mru1hMXct4iG9mOCthWNm3J9Iqzb2fU8wAm3p+x56pJoOMUFdfT0HoiBdkPk
-mwmFntA/l5xZRZdBaRzoXj+rqpWlNIMXLN5FJmkjTu+2opwPmFsBBCN2yCCXNgLHwR7PKrgaOZz6
-wEIwFr8YBbNWAyXThNzX641377jqYqFJC1/qZkjmFVPkRq00LYtKX1FLeDc97udsAq1XLq6o9BhF
-NbUMqBFdmISir5Lxpjofv4VW2Ar/JfxFHjdP3hL6s70ijAKNqRboMQVHDMPScQcSk74bamya3cUl
-am0QPTziSexIFsmXXXFQ5EJsiaCLRTJQzkQSSC/paIEfWQZW1PsTT54X/RZgx1Sh1CheeuRe00Ss
-JuVQXphYiBhNuOYt943WuZ/B8J2wKcfz2ecIrrv0fnMLzdYqlXaEmsbywKfTnfc8DBw7IN9T9xkU
-Wj5kip0YfNbiSlm/CfY8b/vrZllsu04cXJKtAAUZ3/VxxILv+GN13Nx5h6lnEYd+3FQLZf4R7txe
-LqobkWA4kCKcmU5GOF+zMV2asZykojS6cHP96FmTl370SHUOqqMl7ecfbe1ky+4dZCcq14NFuTyb
-l8nNONFQx2JhViLcm1Wa57RDp32pLO1AhNaFe+y2QE8tncJUbfydVujgJJANGDYA1ckRLct+NvL+
-E8zDd6YFDUUzL6AaZzol3f00RouLEHdLxk5OgzKNqHbLuvmk3NDtPAYtKG1P1F8FyE4L0i8+Sr3q
-boarsAWZsqZ4HkHcLVCfECkXaIkWcTqIb/+Qk9PE3P3ph9hlQj/oZqO44xFKcYjDlg6cuIk+ASE0
-WPGBsqKi0NmwK7S7SJJ/bHbspYteapIwwk8JAR2gz/Yieft2NPr+h1cYCcW9ieVKtZqiKjO141zj
-bq8O4JNS0xZmRdwF7JIALmIKVbfqHr4Z4Y25auwZzPmSTPQtaW8UrfadXOSX2bJIVVPHtkYipeq8
-s+QqbgXz0z6ji7gV440/K0V7mSh1s+vLHd/IX3lr7JNjn1uz1O5hDfem2bTv6vVeO+QsoZkHbzEH
-ziGaAgiydngJK0WhD4n1Y1GJI/xcQXY6JVvLWTl7d1nPK0TNch1dY2KX9UgxA/HvE+FOWPwOf0bP
-26hDst3PwceaO52ZBxv1RkFPXVuuZIcKR1MKspTy0VEaCZWv58YNjdVhVhQ26zo/pwIXG30Qq/Y8
-z3qu0emGjV/61yx85xr3OLEiVb07Rww56Zvp0pPUmn24VSh+4s9891ll85iz57o7/wzDhdfaTguz
-0h+LF6taweh0OmRm/MjLZMxSs61mHcHdHi3pKieqoVMbjefPfz04eL95/a+VYXfVtNX79tWf/lvG
-K9rsVqQzStpdTYgHm3q7rRhgBIv6sERbMqMZeCK4mxBmw0IrcoB/oHn6FxHZEEJ/sx1Mp0tE2MUj
-Pp0OKWX4kA68rO1PQOqv2C6vGZxx9mH1J45MKT6HSaaqOLpQWFn1vSteQFeYYoEgowmPyfoC8Zot
-oUw14G27cjpvd2fttt7utqwuUY1yckuXb/nyM3b6mAw10Pl0St4F06mI72P33OOhdAbJ74Wcl624
-vqxWedC4niL38Vh9Bj7xN0IKy3LzrgB+iChrsU0j9Txndx8fhFjgvHMDaewbCWvKXWHOK19wbhKt
-Tv19taoI99Rb4YsKLXJWjT7bMBQGIpgiUcCfNOosFq+BFMfXJLAbKFk0Z3/E8A+uEDv21uixvDf4
-F/JbB1MI+5PELP3dYkFnLh2hGm7ztFROwz7JkpJIXA4WwEgXCbdek+CzkRy2CvODS8So1uszOqcY
-NYEIu5k316u7CMqnp/HeE1c9+HO/a9Sm3oEN9a7Iy6HbbjI7pP+J9OXU6OhOuTXag3PqOUuK3BQe
-OYsF7NRU2Kp81CfJXVr9a+/Jcwev68Q21y1KBawnlKBBGQ6uC3gcWgpaCisdPaGWn4sMk1RusPP6
-Bo3ZKowyzVVGNcyvsK1XBQ4NHaukprNFL4TYMWJoRfB7UHDZcs4TxcQrHe7P8hwsE+MnlyurqbbG
-fF2L26S+WDUbTgBZGeBu7jzMzkVH+f329f+gLmSOsywX73ev/o9v+FJWXyW8t4Tew8+T8x1CUPg2
-noNXGuf4omkwcIwwnu041XKrMTgQXc40zM6dBErvYgfGkAjVn417yxv7qRM5rrFkWNOqgdbScH6U
-Gt76wHhr6QUR6UKMSYy7YPWGCZcw7dJI0NYzshMS9sQMxONtGpj0GD5IiqcGD+WIsVImab1CJDfY
-dC5Tb2+LVCyDke7fc/fvdzWlQturcyoc63pe3afrTWa1rzpu4bRWGiWJF3R2CcufutAvQyTPEogB
-xso/m7Z4MASoy54RIh7Cu5iA5FFqai17x9ltQm0kg/O8hDOBR9WbeTp4nlMiDBAX2hxlmjUWg5fG
-udQY/EOO/tnVvOje6wUvNo6MXgxt5wrAG3BnlsFUsFaBnrLxWXNZwotTT0mY3LxukanQfJUHWc9g
-R7z4+25S9/6Ql0YwUOsZzW7Ro03eM5jtWWY12W5vF1VInvHxbc+kuB5ghv6AWVCdUIaAnJp6hqX5
-j3ZyIsXh/rikBUlAesf/RQ0LfSoRpC87DRrkmeo9QJPZiuIiqmSAbT6iBh9hO4+4kUerpndPkHtS
-e1n/5F360bV6yMce8bxBldBsxzlFHRoy9hn0hN8xBTkgrXGYVNfFVWW5GE28H4i1CK4/xvlj4DzI
-GtgZ5RShFeRkKXB71ZTG4KJEIUElAygJPk4i5+AO/OZrlgRZMcUeYAY/xniFHfh+ni26eaK4QLez
-9jigwkMGjAcy6DMCrKpru7+6KaA9rKdbOdthMgaYz+R433RMhB2MNcSZTX0ONGYxqOogVjM0m/g4
-tcp4Lc86Paditmgwfi6PGV28sSUEJqlrqq9dBblaKV3uQJQAFBRM4d5y6f4oXwmFDaWui+zrOFYo
-A/ZAtUZCLLemvsq0SOeS5Lw6212QSs/5mk4FfzV2kjEub8l7cDPYluQI5/rSkGDVopYlTQShBY1e
-8ECWor62jQfHHonsapGeWH2fErALtBh4olvxDCD3Kh/qzUB8D8cS3zDUA861/o17RX9r5wzrr1uT
-Bwc+Kauvuz5c+MDAQbAp2daJKnGXDvV0kH79/Icfnz97+ur512O5EWzDgbqQlE3CY/8UAeyeasd/
-MzoIpXeDBSKuwh7kjrFxmMZ9tKn8RP2lLJWxJ7guDIsmkkPaAdBkFvghFk7jqBZ2gzcsf+zX4E1q
-7SOLPPFto9/U3llfuU73+BUbCCMFtCms3Cj3bjOamE3QHinWslWA5lf3YU5fT8lfHF5pu1bOt3lA
-8ueCJTPT66LaMktJC14SWlcpLHsUK92GpXn9Y4W/Sd2cU1QcVV0YaJ/iG8/bNVP1PA1nXwCLQz+m
-oZQbet8XhC1mgMF9btmJlaW4KJ2gGPSRCeBxwVXpRy3qKxNE9Kb3sP1BSL2EY208Q00rTyZ+LhMs
-zW79+5ZG2YqfmKQ99Ov4Vaar3VJUBdWcsIj9VATlNob4RDYGC25htttE0o67CQHJDStqfaFfugQT
-C8DkWksTaof/wPcNNuD57gm2iV49x1tAklPavCDG+73gtbJFpSu9itWAzJfGsAZfmXgdbN5W0lxS
-3os/Z8K8snGS3ZB8zScPP7fZX0lRjmWHVD+IaxLu40/DjIHvTJ68ZKVwgmLwBLWudk5W6qNJZP1i
-yR+89eU/XLWlS7qKZoozzLzCHjpB0Iq92+To610sh8pD6IMb5QAHGdpDlEXyg45CGydJOK+pxDzD
-A+68vlEBtPRhyE9ugs6MBBLr7BbOwiGcCdUe770E0eXnRvpmzCWcE0njHfdVohLWdO4eyOixWTFZ
-K8ka7zvIRxfkZy4DnXJ3xwyr35IS+OOP+cAGoRl60mFRnwgsv1/8M9ooOSEwpJibOox685YmQoL0
-vde6BRdS2ZP7wEGYKadvNihMd3bH024r5ScAfw2Tbb1dKGzirlW9e57cqGou2rvIPISLCEyftFEq
-YfXNDEPvvZhI5diM81YlbBe6CJXZr4wX3716/uN3T18+//HH7398kqiVCfjwcTBEfntNjdewE2If
-I/67X1bWu+mHl69//+I7yyl5nFCaTcnzMvR4JYXhUdRBdYX6AvRiuqRXrQrlI7PAI2XUoAROXhMG
-N3AHIsVmu1uVhDcoYWltgjmjJD7QCc3zq1+UG8JntsqzFw6+d7wt6N0eevH5Cz+voBhJMbLiBPkR
-ZlYCcQbfhKLMGWSmHtzCJ6e5ClHg6kE3yh62aC7o5lFuM828qudD0j56dq9D4YIqBKTSqFr09kOd
-JOFGOg7ph8kxYidWrSSwF8sfe3ag2d+BdtTcj4ehCH08Tp3sXorkfDFxHKRwNxmeZT607kpy+FjP
-smub3DuSmUqaej6ynoDbeSRdIUYNApvr2Ryxq6kMx9bLSF5c5IHp4JRuDJSSHEo7OKzrvTXZ2E6a
-sC7mjXLdbDhHb3sHEVItpD3to7kOIlnkgaTsa9i2byNGe1h5tuB0DdXcO9sRT6aAMsxD4Ut4CvSG
-dG+QY2dIcKIl7N3O3i2Fpgq1rTxNDz0qCqbmXWB+xbCSa1PFBYQrZ7dexDwA+Fct7ePHPYbET93g
-xe3wcdXknzOg0WqVjdGk+Ne4soMWxntjdzS2wafDHU0Fj/uOtm4rtKfGmuvmDS2ThOxjDkwCP8UZ
-RQ8l9VJNjKvwRhmRwa9+6JFJX/keOuuUYiIoCf3zicleJw9a1GU+oF3CisUF3LHXJbx05/ldhH/X
-CvidRaSZveV5becghUEk5lU5IrrPZc0e4paQJ5PjLuaPUDTcF8gqRVEk8LQ6axZzH6TeHVg/8+/W
-X3Vz6JREztTn0tjwgX/Oonq0nqaVXrS3cRJHPNdP6UtyWLrs7cb4OaHDzmmf1ufhhOCIReLx7wS9
-jd5108fOaXGFo2fPs4icINepDGLgPGycX0RpgbqeWLhBD1l96d9gcumZDcM9pQTHlcSO8+aQkyL9
-yCKh9WbhreqoolQ4XiXSfMHwo2JWarYh7bm7vNJ4GlL3jfeQH3nh9hLOPdOPo5Tl2Ue6QW158ih5
-MJciyJj4L2fhYxTu1VeUDQ3In/tSV3zN3C4C7H6mKxEH6HawWEX32vrPC+aN3TxvSkGstwwp6PG/
-GG1brCrqu+l11GI+AASaMq8L+SpQWNhFVdJrVqFSIl7JexzjzUYLPe6TC62lwVd6OiHEDvIo4a7l
-RZJGl/oKzbukhU4L396HOl4Vi4+FTsaf2GdGnrvrRbnF/BDwyE1Go+QHSrjGL96E/IpVgaHqLI/h
-FlEW1mx9u76d2n361/Nd4w0a8AatBo7UeYKFRw9a+P+nNFppvKulT07dyROFw5Q1ZAI1ohyLbRyD
-HiH+SXKUkIUv4JHasPvmwHFetUJSnAq4fECr1VmtISvG0XnjmCl7hjh+VzfVbLdF35v8oPc9b5/v
-Pd5hTLyDiPl+YtUcJko9PHGUxV53HYi4Sol0vsD8JCtiDG3+IczDHbRterLzlJEKR3l9x0z5Srs0
-r/nhbm+9qT3eJ84Wm1BaKQq27ahuhaJhFcxxgx7G02gGOuQwJWUANwEoQsBdWQesPFInn49PuyN7
-O6NxUoUZJ3wBWRQf3kUvF4f7pW4vOzlsXLZQXrUrH8FJAWHUq62+edUNQU0XnnjlKGSMDCFWobzn
-vUuc+COcpplNgvVQG5fmUYRcVHgoe9FevYmWpNg2yldkoAaQdwWWH8e25+jn3D+HkhAV905Ckbyk
-qLI9AWpLTKtLFxe9ah5ovSmlPZXmcxfZKbaVMcXiIXposXsbevGwpF5ySGGN0MGUvkT7Y7dWRXTz
-QteuWckJUhYVIn9gKyo6AVp6VyYOdORZNStRZcruXnIRcPqWi0aQ1DCx8aZWQacIh3ELz8kPFZzv
-Kj46jmF571a+5dgJ98JkMQQ9AsvVyxvIq97RbGbjMdxCx45yM+xbo1bwRyt29ghl4uPosLgA1aAD
-Q0kZBtKCoEjf9apnanuAHGluwmK50XwflcO+60Nr4q5Qf0FZRR1yPh4P8vEYWQnqiveYFTeQ98qM
-W3T3dC6dejXnDD5eXuaeOSIqYDWfmlOjpomYBLPLEtPAnxyPT9GVH92PEoqJx+H5CY9Ybe7HpCuy
-5sFOwv5OxvTEw9/z0/j6uxltnPl7Ke6111CzwPmGnZm+xpHOuEm5CKFWRM1FrnsLnQY6HeQRt6hD
-kZLCxDfOLg3MaEbHefIxCHRJenAnuQtDpVaQ2hd5eP/KZejcvdVNLSr1YeKEF1rnzPlehMpuo2ma
-elZu1QFl5TwC1jFMHscEOfGTn/JzN2ZvViXUfRu1SYdSq7pEp1J/4Htg+mnBnVHDhj6OiRsiVr6r
-bs+acjMn8+hmtw4g+ClaDCsEJafLatkcRGdoGdTyeAkSJAbhJqtepmZA2lZLbzT/HRsfFlCiCplk
-35zNAMOGCIcvrv6DX7UHdqiY9IDTOnrN8nuutBEZOgt5YxGDtFak37Er/BaWSsi7N7NN2V4WSzhL
-8CzofKyjiOg8rWAN0r+Tvl6ovlLCnmkv9rnxtS99yFrU8O6UF+M3Xji7aENmrV3jgzyoOKROKR61
-SQmKrODhPW+WZe1aZt0qCUOlEQIX2UZVjrtLhLhP0kfpaIXJKhGbmzNFRNynUPDjP801++YNXrGP
-0pzSDDl9en5wSukO7DT5cqQ0HfGZ5WHvcUsu0HzMIQqz0NHS9CNOSRl43B93K+PG6s3PpcOsHrT2
-Pdq8sdYayDbtoQw9UURwmgZoNtQu+na5sDbCtvHpYVEO2lujrIJNOaobnzXECYwNy9r0FXsTccGe
-Gaqnra1qS9md4ysPpwcPS+dUOoHhxFqHXgDuubsX+EhfWiC/i/xk/Jknru+ZFchKsUqnVqJd+Baq
-JUOaI1hY5Ryv/jYOFxSBgLqJvJZZij85zXvt4jd4taznZ/jCXWV9WGU3fRhMgZzR5Tvnug9xuBc5
-Wa+aAHOM1sCCS1GrovUAsYlJoa596dKGGX3xN09fvHz94/Of0vygQy3R2UX/LBW+WkcAgGOsdo7K
-plr3PHYCbV5oUO9K7sZXte7R5zb79EvrNvWv7lAiaXa4fVqepKYD6hE59lelHTaU/TqkQ/53PYRj
-TuiJjCPyevqQTYm6KGD8QpeuTMsSPXTB00lsGx7HL3W7bFDIBAXPoC9POr679XIryBDN+T2aV05C
-e/ag/QV7OtmbpvegZ//X2F13p7aSr4mZUsaQi69wnw68HlflOkqHqn5A7dLcyQhVEhPOIR7Pb8dP
-bFV+PDo+7XF4lmKRk81vr8D6SJfgdK4gTGP2wGTUYT00hnF4kFCYG18L2p1MjN/mYZhIEENyw0VS
-0c+5aw6tebcptj8Ir1EsKOFSWCJcP/xW3Z7wt5WWo2Tm5N3i0nPYGHeG6Xo9/1fF5wiBuVwl1XK9
-vcWyQwaKqFyYiAgKmZEXqJaL7u4ikXXlE4UBqFmmD+aiqEadDNTJhziaPPcdvI3Vg+r7qTiA5zRO
-IiE50Q9IJfKgeIxXAlDbnPsi47lPTb2WxsBdMMbPodOoofjQvVEPO4yEcdefiL4ivO9sN1+XGO+0
-lr2LB3fBLgRegUhWPQJfOnrHD7p3ns043gM6CVQ3600A2d/bxVKwGJfhY298J4+mSxdIjhPkWAf9
-7FZwkOOSluMMc2Iv9ikQbGoMcrm7h+Lvs0E0lctGgfkPruxQPDwrYdTYFa6Z50MQ5hpUT4cHbUH/
-nw3yuDxXdrrBwavbNb8+hlboeJjGD980VzJsbRSWYvrVsOhC0IKXwWBBZlf2Oo1g4N3a5uabiKhx
-W1eLeXLb83TkEjcHB++vXv87Lx/Y++tXr/4nBqlZV5sRvy4p0O4RhwxbyXaWFQIJ1O2yHSZv38L3
-sNpv35J6gz6ez+GTgvExCREk0WA35NzPBJ+5E1NmJHO1AF0MJIaF0WFD/TCwBmP+pMNuLIzzOUXq
-3baCg2GhXjB4hF5Vex2x1TGCcaG0dD7XQBL5X6Clv6yaHsyL1p/FlFLQpUNORTdBQV0BXci8U39M
-hLOBeBZIYHp5JtxvgCZHeQEcTAsnd1wsadzYYFZclyDdoDW02pDbjlkG1HSX81tO10qNPNLYqZgd
-St1NyKth2hrZEoqn9qDTEI5Sw1XhapgY5Q4wC0MhE9xInX6ro8nzuWrSPmjmd2iDC+hEVM+4dZWN
-UWCsDoyHRwDMwFXRnu9nqTqQfBNwQuF08jOE/7a4Tkym/VO9HpykUBQZOhRPT72KrtwaPPa0QKwu
-lkEq85ojx2Ae6nec6/jr7xopbQKvScwsFwv/ctaQHHwXYBquu4pU294SkjarKxUrrkiqs606m9UZ
-Ji4nlvcyGic+5d8eq4RpkbSUTiPoT2N/tt46CPayBcGT0VLcSZxbIr0UKV5VyFlBBPoGK5hrf1Vd
-nwfoK2iFUSgq6etX34y+sF7X5wrYxF80bMobIVpdVxd107HMKkr7Zvvi+4GXrE8lNJPsxD7OmwGW
-m/AB7ALihw5+2s5lC7/5erBqrjugfZD2JUGps7o5ZVyL/uI04Tl5W8PD87/X+PYfnV7ZYHTmlz1H
-F9HjCHL+syDVXUQL3Z0oI7jeROgUZufmZmQsPQ9wwU/NGGDPzGwOEjDeaNmeuURV1X5rHvR8KplL
-9c3KuNgxW0ovDHT8RomSeoCfaG4vfK1WxUWR/JFk5fiymPvI2m2fwxALneo9DNQIlh9MadRsHoeL
-p1SHHwvm0I5Hv5VccYr1LE+qPHKral2dkA45fijKoQ8RC5i9aoxFmvGN56vsGHOUfkJnhwyFuSxn
-AaaczXbLHXpWyXWJMFoYs4mVoukK3MyRwQFwf7Y5nn+NRCzUeov8KYQnc1auWOOK3Q21uGUOKsEa
-0ykNaFN0Zbrs0A1eMCifoYHQ2zL3SrOIQpfwiAiPmS0hmdvSjHySeO0RDPQ6PqBYLyf88ZQzazom
-AW/bfFLWQksfmxSa35GzvS+FuDuPVBQVH+YVivlXJQbTiI/DIP8g0vB2JEwh/QE74i56t6lYHypa
-OxHDunxR4iPDJzMsUk/bA+v8nhydYppj9Xcfjpxd69iqdXwa9SrmX2M70MtbFKq76axL/lR0Eu67
-AAbc4hceh1RlLGxeUw7aVb+nkbSSum7nFjp8X4qTQkJqxlm+5fhN7lUZ6wqQq5KaoMti0p3S0JCG
-WpSszxIWlGYClA8d4N7q52LKgTbWyY2dRe+GjHVpB0/EJxHZlKCQu1b2gXLLFVOKj6r/VN19wKax
-pXDp3PekimFU88S8BAA+cHXvPW4wqdVlbr7xb/RAYOu5bT0prAv9UaZ8CH/Mdpu2vqpU/0NSkm/g
-9sKxJHHWZLt7M+I0HpglGgUWmJHxuqK8jFbjQTMRfwxkxHd5N0ZzRmvaEJ88N1e0SdYR1R74XAl+
-i0eosT6oA2eBUwxEZblwt1jwo2If0NVMqQ7u2ZNTKjzXHzocDYf/oZP/MHfJ+wgCcbK4/1St5B9R
-DhCkALEuqqlLpP1Szn5noZfs3T03l54aR+fVZ6QLW7Bwa/cIGLZc4VWy5QvjFhHFiLjjqAa1E3aE
-uNOKH7x1DuJPobjAQqyBnCumfLOfz+kThSPzqwOjUfg3SckC177CrG9RLkDzcuro/dUqSZsDzBpt
-UrWkaVqtSkILMu+ARlCoCH7ZYAQ+Moin1DspSg7MLY3rxGhD5VVZU26B5KoutVGjwJeSrHv+9q26
-vZAAuRn2AZXVwHoDwi/GvYHiZMsp1KiVDjulNUjZvYBmVmiSt3RlnKBACtAnhraKLHduo2IqnRcn
-Uxj4uqa8c6nP5/deacJmVBlZMRDjmJb58X9ei416j7tW+x7r7OkTLC2MBeJr5fZiklfCIMZ3tEnT
-otY1vc/GffN17mmmpWQ3gCkXozoBdqnWRduljCLS1tOZcPOOVuy3sKmmhdA73e2VWS7vk2JUX0qF
-FBVsfWVfjzRrUVtcTe31amjTtMEq8djK2CL4+5vX/wZ2c4rP6RJv7fe3rz83STjWtzF0VKoQpiZ9
-/6fX/72y3K7nZ+///Or//tdstSUJge5QPJJnu4sLrdr54evfDYnhSpD81/RztbkrBZif8+uXN8jC
-FO6F2A+3CVTZE66fqJI1dNbayBrMZQ1QiceukD5iP6WXW6OTvsb55rxrmC+HkxFmYykMKzzIC/39
-X/eB/jdabZ2dUM3Pfk724rb/MD97sbpq3pG5IoOqNX3KNKvQw9MsPfmhrXbzBomCYedgpNWG2Dku
-FRD6IoGGTPJFisSzMHL1uyyA1NTz948E0yeOjLrV5Qyhwo5umvWazMGr2+TF9+bKcdNAnm8k+Slc
-GOSyiZ9h7c+nmIrBkV50xm3822AdyOgPDjy9UrcEqO23lrLZ2xEYCX8xCC21Hk+jG4sZL5Tpfp3d
-R7cU0V3HVGHDUNXliJH0Du0EUvbLxYBXlUPkE1RluXs9ePH9yMgReJRQIjg/z60lEvsl0h+Qtn2k
-BrTR6oQCoetHE6+EJvRCtp608rFHKU0veECG32rHv4nqbw+XiJhy5A61iPPwN9Owj5khWu+O6nsR
-BZqBeNt8hPsfd11rzHWZ02hWNP4F3pHm4dgd97nfm9BKLacTJ/rYJn2JIi1RrniuMojl92yCiPoM
-iPp387P/bVdv45phfE11BRql12VLHrXp3XXZWtWiisEAi5ZnzRXmQJP1UTaIah5RRbFf6DVeBiN8
-v2F9HzY/a3UyM06TEUEhIHRZkKeXdLuUV02NGcxgVDoByqZCe9oczkCzw4eG1QjnKUVwhCUI9gwr
-u4AjiTdUi94nBw7H2os1+5G1aY7+1AfdLM1hZzrhT5p3eZbbPuVO3QolEJwxnJ7U9sB9msybGZHY
-61V1sybPSE1n6kqCxTzfLdhBqsHzgqNfFlYzr2WbdrClm8Ut9mTy3Um2kC7nwzAD6VAx4p6xeXS4
-PVM5T52W8BOjGD0+7TPBB7Wn8oddz5r7YHvmboKOq/KTatqqCmI9diOKsc3PjPMMfGA5R7G1gVxH
-uZvQBuhqSpHwCocOZGxfz4Y/AzfjKwTbKKK1Anyz7kTU2NayvMFIdROKn4yS49AMwgAHNUMsYrmT
-+hREARCVOBEa2fPSIK82kKsPpucMYDQ5jscN8lx5QWGUdIHzJ+fRti60OA6PAEYIhyV4/5fX/1Zn
-Tlyu4cnz/q+v/tN/x4+bdremFwmdgE1zVRP32CrvpgRK031Ws16C066LA6ryOw2fORTNq/pcNqt3
-1e0as7cnUtT6ymQPoaH9Lazp4s7cIfdKGMJC0sRNU0Q7xKthYxoz5ChOX2EUkffPENdhcrxHYvZw
-5W4Z/Qbfi+7JBKZyAe+mlfSBKQLxOxhfvaBclfDIghV+QcnPdu0OZQ6nhTNGJ4ZtUXdJxjPKQh9h
-1vG4eblouxHsRoVc7Fb1+101Ug61I3xZcECtmY2rPF2Ri8LFrtyUQHoV5U07q7i5wl4sw1GBGSya
-C3iuruvrcgN3x5Pj4hg5OU2Cxh8OP82jSgTYRcxBTvuVC17swN4ygh3Tu7t8Z+2sSl4+TFa75RnC
-uvtJ0lXTVgCe6c2Xg1QjXu4zSZmOdYrlOxjOIEyaHnLtta+1KEj8VX1MsR1G5J3oaUQCd6o1pspE
-kBZcCzUOAkx/N0X1MPrAueZRc2IGKS8XemAFq28lXrFXJfI6lQqUmT5yONw3aGfoNGl+VDf3iZb2
-99B1YQtalA1V34eM2mrPVSupH6JxR5oEZpcVXFAdF4AuBW9ckCkjgMceKe0D8tA14G6KygQ9LoYg
-O7Wa29q0jdoN0aQFlYScVtW1Lp8Gl7Pin4awLLwan99Li1xiv3yQNGTr3pGBbinNn331OGmI/OSE
-kqfgBGYMAmEDsyh4EGJwWqITN7skKGt7NmWmdsnNZ1BnSEYI9AYWlbBXVd2kmbmOsFphPgYtRG0P
-3HFofNCa/s7bilOaW8YBvILodkAOX5XwjSMKJOaqYEaEeXnx/UEgHu3uzOpA8jK7HIF33XCF5BWp
-zJQygzOsU7rmtw4Zv52y6GMG7VoqBM5MWyiM506h0RSljEipqHXfnQ3Skzd/OMVrCcU2w69vrMYU
-cTj7W8glE7tabGUnBgv98+t/j9poms0M1rTabevF+//91X/zb0g44xzVkoUC3f0x72hCr/LtJerN
-R215jkbAGWpi8TGHV2XJotnBwdPFInmGv3FkJR8s4NbNBvMgzjlUkv5UEP7zCvNzb245zvOA7URs
-XmTfC3W2WCYgEyg/drZ1uZV83jIekuo4STZjuyBUroh/9DdQxkUlMbAsAv6ubOsZjXjAW5l3ioEg
-qONIQSqdHD/+wmcP5leW6eWDW2i92a0Q1xCfuKvtwKozsuo8+sL3kZzXsy1HGljWCng+x60VWLrg
-3z0PbV5png6ud9xMQg2cwO+nNkzizq+NAQbwRdA9TRJ2DsiVPWUGselQ+wh3hG3YPlmLoBuX7fSA
-nhiXKDODvRy3MUqeO4lAGKAV0RE9FDFbQ1Qk3TM4mpbtK2WR/V6DdBvoOk/eXuxMN2q//D2nb/mB
-78Bi+rsYEbSoEMFYKjomExVXS7ieK22tSLSWY6LDSWm/XPHWlHsy8U+Ynw+lusLzUc5mzWYuuJg0
-qayVMQRu4RRDPuCZcxE+EJ1+pRJlLmtofOXprIm75GnYTdGSxvXAh99Dlm5NceSyh8BRlmo88SOv
-1bisCWiQxZMxVTrtArGAct++Stp6u2PeTVy0Ym6eLMm/7QxhRldVt0OmzbpD4UD4K9LmrGm3T2eY
-mpc5rWG6Rj5InnLZV8CcH3HhEQFp4obGrhtLZQi/iU8e5VDiXL1wjaG2cScSAeVj2sC9NsNSBy4G
-5W45KqnLqh0156NyxE18TLfGaNuM6IiNoI2RdU7wPxQZ6CshfewGOC/G2+5AYOFhMWYrUamLjG+u
-LusqwHu2vWwW9Mxtd/AyniGKpJnvN4io6axFcr6obuozeMPDi3rJ6AXwwqZQVCNVkcSntlZGg947
-JU3TlWEO+cLUspY8+MkREqbHZh9ZFShoJaSc7sEc2Zg7UZexdUAYYEFq2N74q3m0vPCwP9A6V/Nn
-QjHPiS6hMTywILNgf0CTQpTx0nfd/6JMhUXlXQ0uPpUjmknEDb1n8lTMW7eBzljqb7OEbD+O3e1S
-62HQUPwiNyNRY4MjAAS1pbXZmWP6FM22PYeTpEKmVGJSLTF9/sLQLdIS4Rs3CZCvS1B3ClT0WbAp
-JsdHxZE9dzwFAzPIIc0vL3SDpqk8EMukTRbL5MO+YpF754ZSBcJ30iUCMsLNusY0gDHvTFfIDQN8
-1IXv/m7fz/c7X92niKdDK2mdEX2uEJrPXbau4Vh0c6/jQ8tETAt79Ol7nyPktmAWxmyBd3K2fZxj
-q+ULOUjv/9Ou+H8AENJEAQ==
+eNrUvWl3I1d2IFjtWTyNbrft6Z79zJwoZKcRkMBIZkp2ldmCZJWUaadLS55cXPKwaGQQCJJRBCKQ
+EUCSdLnOmb8wv2B+zfyd/jif565vixcAqJLsGdmVJIH37tvuu+/u9//4g9+9+0n65k/Wd9lsWV9m
+s1lZlZvZ7N2/evO3w+Ewgc8uy+oy+fzF8yQdrZt6sZ0XTTtK8mqRjOZ11W5X9Df8WhXzTbFI3pd5
+cl3c3dTNoh0nAGQwePcHb/4QR2g3i3f/xev/61/95Cflal03m6S9aweD+TJv2+TVZpHW578BGOOT
+QQL/4fCr/Lpok029PloW74tlsr7bXNVVsoJpLOGL/H1eLvPzZZHk8EeV5JtNU55vN8WEIOB/PBAu
+YXNVrBLofFE27SbJ5/OibTMdaUC/LIqLRHcgbYvlhUwF/8M/YXsW5Ry+TKY49Uzm4Xa+LDY4C+k/
+Sap8VThQNs2d/QP/WwEoGJJmCZ2ouWlQ3M6L9SZ5Tt8+bZq68Ts3edkWyee6amqRDmGnYaNP4Ei2
+y0VS1RvZhORhO0weJv4QTbHZNrCjgwH0gbngMYwH7/7LN3+EBzavF0WG/7z7r17/n1fm2NZ3A3uA
+k6Rus3W+uRpcNPUqKat2DYeoY37x7ezvPn/5+cu/fjWR33/59O9/9e3LL18NBufbcglHM2uKdQND
+44/BAP9dlufwN0xAWmQz2DcGmI6wwWiSjKThaKwY9AXMs4tCN02+XhdNkjf1FnD2BWMQrinhti2d
+f/T4J7DDN9jUOUH5hOdH+wNHLh+m2tzHGvgUl8ff9aMCtb0olwWekO0Ag8z001h7wOZlWRVVHXax
+Xxwlj7s9u6N4Iwju+cgVQ7/Xd2vFPMS13N3bk+RhAzin+zIZj927Urwz+1zD7WzcXWa0tNs35Sb4
+hwuiKvaBwDlhAwPCdkekDa85ooz0zKmBrCRZ12XFdKRO2nrbzAtaqOIO/rdmpMBe2bKe58tU5++e
+oUWO8oJmt87mV8X8Oh37u/sg+e6774AC3p0XiCvJVd4sAI+X5XWBtCy5KcpmgQS6nAf9yooatBsg
+0jm2get0iqgwz2GkbLte5Bv+/SxZ1EX7mdcfVxGbd7ixa95I2iNYd1PDLdvcpfj3JPmmrgr9d8jb
+eAGTKlsXO4YONlxsl0ve1t0nInfuFZ+AnM1F3dCKEYgeDk6bB+WDcuGZ34liKaFTksUAbBsAOkmI
+5NMXcOWqhTNV3KcOPcVOA+0tM3I2yX7qbZV3Dv5/Q3dt8NhucqBT9Kr17+nvvZ8O3FGrg9fV8i66
+mQ/MrbUNBVQOWJ7D1sJ5eGehqOTNwtlVsxR8VpvLVq76+7yZPsuXbdG3rM12Dad/UwLe4TqgK7Ap
+1Ybevja2vIG39XAxRzDGKIG9bYtN8rrZAhA4MR0BezMswTBoXTIjUi08UMIJmSm0yc1VAStuihb+
+6tnHK4DC530FCDnf8onAHhABwo1wnyPnvpqPoQ08/7BiIvB4jfUTl/rArH2aY7p9aPpdLPPLNvkz
+5yG/Xw/z3AdnLo1hCrSRpycK6Uzf82cNfNF50H/lv+e5vugX2Dq5qpcL3KOLGRHglvjUi9nlsj6H
+vwgGUMebq3J+BS8cnkJbAhObzIF7BDpbvM+XWyCOi6yfJ5zwUCFrGDAFxIxQw+xiFuEJzJOtbSJP
+NT/wOnmnrbscp6Es2YFJH8SYEWrhUApgWgtEz5BYAJKY1WUOLYOLgRQr4Aeit3k4HEef9QAkslH+
+NGSPuLf5yiWj5sMDqejQQiG6yTgDv+Qe3UQskKMmriX54ANA0zYgNoorKAYtipG+us7O6n9IS1Bk
+aoDarDeAb/kyyReLUn6lUzIUpB1E9rQl0ICt2+VGSY6MDzDiT5tFBw89YN/Xd+m4007YgpRWGh4Y
+7QjvhY+UE9Pf3b/bYj47YAOh2ffZvP+0a/N+vK1wxBFe4O79SJwNQVFFuVSXnHXerVGbX8BupFVd
+HTXFfNu05XsYA7D6CC/DGK5Bg+SNJCZ8E0byOkfXbe9jWWcImeYhM7CzK1sQr7ZF3wQFivtOfo8X
+eVm2jLn4MrcJCbrYbbmFVeFKcnjuzCN56HNcVvPldlF0nmB9dsOn6tAnGKYNUwN8OT2z2IGTbC4R
+VS390l2AwQP2vSPeWbgZvmDVIk2h68RHyVP46Gw89jqKJPbL4i4igzELDq8lcw7MDsJjVs8Be3ih
+2xZR5kV7N687jzDNRx/c100+L87z+fXTCmbfFaXzBCHBDhf4PW4EcFrax2pR8F0tqwt83JAeD3bI
+1gSoo2TRL5h5oV+Dp65h2VVfGuYUtG22OZ/xE+2wVG8ur7LkSfYxYceT7M+TRXkBF6JNQCIseJ+K
+iviPAm+Y03MFNLek62cfoTaDpYGksIW++Xm93bDAVS+3SJYmCQjMDgTg4lATA/wFyheIoz28gLuC
+Pn6gKZY0l6nX98jZGHlZrfzvngCSgK5yS9Bh+ImPAsnD9uTh4lOU4EPwLOY5U/jw8fgAfuI+wse2
+afCltm+2e0ONTNVZt+EoOlzHvwSfoWKvvSd8wi6/EdNDuJxSsO33Ers3dUcyJrWFL1sx8dk/B4+l
+NI+qmYSBFMxEWsJeAMteNMv8jnh0BDn0nskSrx8Q5hjevLTf8pLycolg7F7j1VZ+KQeIICMvi0WC
+tKhZ+ZwSPgd0b29QNsXp0/ct8RnwF/YQKSBkhQ15i/LAFi83/ORnZn7jDF/vdepT91uHjs28HRD9
+gN3+iVCSGS59iq/gOHwnSdsLVBp1P8B7305wHuPIQxSq7uze8g4WqDmujoTfIC1eAuCCp8nfkGly
+G8UdbeChnKFPcS3FA1TV/y2LdsyrO/pMkdaOHifwkuZIJRyVhGq089t0B02cJMf+FXCmMUnydkP6
+sSkecJx8GfSzlyoLxPibAt5eZk7wiSZUNKDxZuJpAUEGNhMtGJtNUzgc7APSX0APfv8BOwmTE9zL
+jftEeUqsTAU01mW5xK7Jq8tiBuN8LyJaqj5pp+xHD76j+wDYMGDFsrH3JcAzWwEQcSu6UBlCLxF0
+YGHLXjB03c00dFh8CVLox2TKkc83qKqSYSOYOu5X4csgk2Q2ATqP9pToAbjPzkS2dZfyr/8/GXAq
+Pzumo1d31Sa/jfCNPDuXhfjQ4TQK4ORPvs8W08aeQssze/Lxd/iUtvkE5nHG97CrJTW30hNWrsrF
+oqh2MBYkHpQXHhMh2iE0E6KgAIyQeZABXjGbBcgMrNx7UfYjOF8eWdWAD6zaJLKJcihc9Kgk0UGR
+7qNKwvWwM6Nh5zBdg1h71xa3EXNM0Cc6NglqLlPYbiI8YWfmF5X7rOEljM2wQFzLIhhH3UefffaZ
+FVbFBBXeb8/a0JmGcr+R93UZPrBWdDqv82bxHE+r2Xa2Ze/GyZhDmH1HvB4myTO0NTxsgFdGCv+w
+/XWV0L/IOF9UAZvMNuEJwXQQGz88kAkU1anZJtlGc28YvseBSfOQBVNWMJD/UpTWHcHPfGFMpiAr
+5et2u0T9F7JdNQpTyVV5eYUmKrTVW1U0Wdr5Jrk8cFk45nf8+VRkPl8G6ZMeN+fB7cdvy3xZ/mPB
+L+Jl+R6lfGEhghX4TzUQCyANaLdPN+eTZATiV1XcbkYB40R2qhRISoShurlCHECZeyeJxP/uygKk
+QTpUFrQRYrQlgpviv5nMKEDKdpOFqmlYgMOjdel4rBN0sXg4327kY7zhU8Yfxl35w+Gi5BO4MqiG
+MR36BD6LAMqhsnkeUVHtQ8TsmYY+4T2/QyR/Txr+vLoD9F2dlxVx7tiVZSB5zkjx7/J78Bz49Ij8
+QPhhQJsuvfobYsyOzosjwwZb1IGJgVBRNCuAuPBnRrPOl8v6psUdVIcTGUTXFt0B4EMyf2I16fZA
+Ytmwri9vUTJJm2JVv2eWE6a8rejtKVpqdF5uWrazLYp86YEjKxhalIhdVeWx8pSPzPLGcd0pTOZW
+dV4+KonF49YhTZ3vRUztZdtSElyVpUxgMNtrSgc67pjU8L/UQTm3N948vcoKiXxFlpt6NIYW3XuG
+XbRpRg1d4OOe8QXLnKFvjR5nKjjY09WVZLz+cUkF4Tl/jsdRtSIzPkq/b60SLWp8CTyWSnhADTUA
+5s0ZgtWg7RZeltTA5xdtnLmdsZtLUB0plHjsDciaabss4e/jcbgIGYVdrOgxAojwYWfypK00tBh4
+oUIV6xfVdJmvzhd5cntCZ3qbGV5xfB+ChNdlDu9oDkiPa2sTunjhjQd2Bq98crGt5kSA6PYhy2r1
+pKpxnrhDPQeY/jWQoSdEs0RZ6PKypJ3EW4vTcbSJOSzOxy/R9jgHRbweQ4BN6ZBT2MYcbUpEv3id
+RMd8MM9pG9hqigoS3lYPFpxCYZnzMWpX3hfjXWYJi61yjsopjX3BfN7k7RWh8g6eH1BmQwoLnkCo
+buPDWRa53S7ZKitcE302/bI4N39u2FWec8eZZ3MemAG0R7j8zfnp0eMzV/lF5p4ayPqiuN2xVEIE
+bKO0nMjGI++w8MCbwsL0plQ35SW+mnDSKISvkW9sSvibuUVeie3LpoTGwTR3R1iAnya//Z33ZJQT
+ayQoKvQRRYNasCjxVlp4DhlkoEYeqigW+PrWyU3dXIu5P+jKXk4kVierYpPDSi5hM1b40IlFcVHM
+axi7bsgLSlQl6zIAxKh9WVQ0z9Z3DyTcucrfk/x49YhsVknxbgu85ubOB4QeWzhxpAEAZxNRZrD6
+t6NJLxdp5xt0gZF9lLfFH400QcDbo/cYKVRhlfbY8s2QiLnP/uFjTMqPttjI5Wf6fHrWUSYuuy/N
+hb+CzvfLeo7eBV3fAxc5yA0PW8IZLeM8Mox+kalh8iIT+/OMdr1fU4LmDVk+LVImMXs8hV/u3+3J
+VGcae3SD++yjlLHxuYdqTeUxrdlA10f80moN8kQ66l0RcgW98x5F1zr6DN1mcSutz+xTJX/Pq4s6
+7jzbkqsz0MkZqh+BtOu9MHKfPeWrYrmmI67y9+VlbtjggKwqAZmRvL4BwQZVA6NeUW+7NoIGa5JD
+KeNB8s0vMjYhq7+qqPKb8j3c6J8myavtOS0ZfbYEBZ3uJH+6e3FEfpbaY5XfMQVgqyEZG8xAmfsG
+wFzjClL8YhpsZXjhQtMCbbHDSAGM08dnk+RzmFSDMyU1SwQ3HZW8OKSbvqNVezkKVZ475hBHfGeA
+1gDfDQ/Xon9kJG21yGulo5xWk4x67hhzhR6m+Os/SUaBARl2WCYHE/O/QzZUFDJEyCfOm679uj1c
+RRX+DVwqfuSoDfkrw3VYm45lczwxe68l1sPG5CE8Q+fLopqyOTZJvamB0CsaUTuFseeQM0dnTL1O
+zR35Fe5y2PBZI1KbsinI5yCJrxwpwJEoTotW9abM0vrAkGv2HY7V+uUf64QdSMl/c75BumhhiEAd
+iODuKLi75N+R66BGoE/bOoJC0CTQlRLTzywDwj4vgGtCn9s4V0sGAj73drOw55CxKD8zU5uZo+gg
+o2NZUJqY/aYuK5I22863+CNrQp0nEiE5kI4Kn3o4dy+4W5Eb6Ax1apDM7XHWYWxRT2VRr2kcAsYI
+CFuxX3PvI0xlBbSa8DkmUQQD6QXH4ZyLh+EagBwkVoS3Ty6KXnW9N+bG+DZXdVLxL17myyyOA5mr
+nlI2ij+M8nhmltD4JfyOWuav4IXHTUldYKhTlqmOux4+AsSTqRyHNFjYDfMNTA/QYny3LKbDZV1d
+Dn1GIj9vSccnDTfnLAVN+aqjJIzOULvoCj4WY/LSCi6oav58Y6evGLNTPaHf1QMB3YEDgc/vhws6
+SXBB/0Tn+E9V/U+oNnzvcCbcKpDdeH0nKPAWqrROUhauOgabhNw8tqrUt+I9cNwt4S3v7JSHtvun
+cr8sDuGUl1UNIldcCi0FEvKAIwY2ihp6EGt8Dg8/MS/SN9Q17fqT7SNhaf9DTSSt/2u+kju665in
+x2dWh9XtMB4L3fSv89jZ+4sVEq5nrEgtFk/5bU8dfLe/KtLTv3Gcl58O1usvDubrL914kBVQanzw
+C50GEp69Nrg4hSHFgS9xdehDH3VBM+/Ep27jrooQbilKPe78tlWJr/T/Z+Yo85F5ashAeNodiUaI
+DmsIjF+QOAOpT8cz0emxjPPXrBaom9ZajR6wziI0aHHIz7K+ma3y5rpA683wU+6BsJ1Pn/aHF+yh
+yAYjmeoeSoTZVmqJzNQZJ2jEtCUgiHy8SrGmZtzAM1OGRyWA/Oo3kMmjdwD/FnytLiGkUfIebdR5
+VWqbEr8AVwK8KC/RHRPPkZty0AxZAQNflm7opRqUIy6CxPXwcEePxz+8bTnqKOxPCC9Tn0/wrsG7
+E+ibhHOxjsOb9jHcR96FcXLEkoaxtI8DzoqusedK1XHxVTcPvvG+55U5/3Hc7yhuWLVuTHx8i0Jw
+ZRx3PXGmbLzijfN7Vxbr+s8Hrv0zxxE+XK56Dept6MRbtb6XueNpzpId/MIaR9KkWmWS43nObGnE
+Hwe+d33NGaBw8LochT8OXPscFgLJ4ec4Fj9tLiM5885aXRaRjM9IRz09Yt7UKG0myV7Z80KJOFFf
+IpmLZLvWYyZZKIvKXs4+7nFXs85GQbASeniMO74fvBhofuwO4HzzSXJ80tfrw2ni0BBfTY6nSvpr
+l8yMO3JbqUZFBhkJAWiKi/LWGCecF+hDdFBJhj4F6LgF6JZ1pUZrzcVXc1v0Dz1MOgOJ34w0+VBd
+v8qzTiuDqOwW4ymQ5qqPil9/ofZTyxDqUxHsuB0LRFQcSz38ZspmyFgTgTnlHxNCwnwpPrcdqkIw
+/Wvha1xCsB9biOE9iKGyrm8I//eB/Ok8fJfiEN0Uno7EZW9qJx6huNUxZFo9Ym7WrpflJh39uho5
+SEsckrvfLl/zoUzu9PGJHzdDeECurDT2Sf/xOwN8mPi44FjZZPci9gl3fsFOxU+LCLjj/z4RqTJC
+wx35s7uALhm/Lu7oU+R+aRPE4iFC3gX+BmJO8lM42b8advtmLea7GHeeBlJGAiBs090BfiymMswp
+Nj6LXXVWaYIAOZuJU2E7m43id987oaHbAQb6RP/6dNhVAMcpDePta3Lrto4unK8ElfjnBTusAN0/
+v+s47lgIpENNx8YGPxFDHsAlNY6kCMnwEYMd64GyKNvLbUl8NlGZ90WDrkUVMZSoq8ji8ioIbJK5
+JHhSA12eNxoeO1J66TyGl+Nnx+q54iiwdgjKD3Y5BJPr3oTD7CYJZqvps135h/rw6PExYivliBEP
+QjPJnrXsOlyji8dhDPhf/5qU1wS+D6rJfdH/tSgo1mQAlR+yYzjpIl9NVXpEAnfTlMAe97I3X/Hl
+Fx2rTxiMhDezHgjC5Pl8jSeKRJ4sVmuWpNxBYk0OC5vzQFvlO+SHDHXgz/Ojszjd831gufaOV7yN
+ypg4PirHGMfxG3LC7B/SE/6PKHSjfxwbubGD9bNyLBDKdEjP2pAikUCEDi4Efal7bhRr0idAmnUj
+LLsXy+C8TD0clNNTovhUbAgO1Qh/ypoog91hrR22gl9t+ncXt9N5SnsmuyraNr8kh2dyZ0aKwOfh
+56/pJ/AWgl4Ftv4xv2EsakD2hv4Oi26A0R+zf1FsnFUUBa9huSzgnRMq3KMjd5ELNeUyt2CjiAYI
+oHuerdfXOV5hKmT8wPIfammJutBxTQyyTBzQE3excuIxNvnk9+B2P+6ytp25uV7l/C9zsI5MbY7N
+uhH7zJSmZFJl0AH6kKqbW2mcnRdI7Jc0Vhc5REXy7aueqGmV7iNeqfhCV2t8m+WtZvDjWOg14Wu1
+HsTA9rwlvlTghVxY+7G5LMYVOqRvxjwRbJ+F4WjwQ3c1390sEpxlhAPPgPdyC1Lgqoj5HXQg2tED
+3zY7C3oFnZae1ljtLR5xB1xuchErvSlzNA7Txa7nmTWLB2FQ4ieQ8kzkKRq75AqpVIcikPXKVXxH
+uQXlE+iYg/ArDoAQ9suA65Bo2cxpsL0xlw+7McOf/vSncHXVEwyd1ik1Y9oi1RUB5M+Sdd1SGo3x
+sAPtHJio6xgxsO4MsoSJHdlYUcxDGrJTrvUjdgGwkYvAka1VqjWO2kkVawOz0GCvYcwbeWJh2uAY
+8vvPl9j1ZJ/dprXezNZu4nNuIN+BoIHnQ85AKAh+knwUUUtnmJdgUaSj7ebi6Oejrk7zICtNkMxi
+c8P0tKwzXdiviEtO1XMtyFe0qTfSLt046c4Q7CpfpzpuzRIDvFydeQ6H4stg46AP94Z52FoHgHyT
+PDy+tVkJjMc4eVGqBzGCDWaVWvWu98hYPa/NN1mjGwPreg/Tt1s9u7Q1+BVZDkksRwW7njxsyKUn
+qmZm3Ouiq4uN45PeDBt9SH0S5pTwr533d7epXjbrW+DbjwoxnhHGmbnli4V846RGnZBekXRsbbGe
+Do+GHZOVQDOK7G431wjh4Kl4O93sXG0fYquixR/JJH/RWQVv7w18sYaB15OkyyrDtyQMC0DvdC1Z
+jZwsy4AFskDDWdJvONRXJEqVY7tgX1jnr0EQ3G+fFfP7LnvhwSexrhHVOBbV3XXzeofT7GjFA4GN
+ZLu4WhsHi2sqzJHhWmWfu4oJPbrhMMx/wKugGOHwfb/rwy2bSUL28ySKJ36bOLqIC4f3WT892Jyz
+kuMkfoBD9iUZ7kKUUyMRyNAK86wfb8S92ZIyp/thhKxn4ir8y9eH4h5sMKmEUn2SLLDxuDPR2BSZ
+hTrgSjoSnVoA+S/1O4lIdT2L5CV2jsaxuLt/dhsau7/9IwKNp4Pmezuxjg8Bq0vw56Fb7qjQQxE6
+HLvv1oS2BLs5MdluITvmejsOn6KBqv92M7U8r5cLcaYAMFP4n9/jQR8x4Ne9s2T3VPpWLl/veoz2
+LfvwJR++XHcJMcPHA5d6mjsxSYasUu0Zt0tEvSH2UU0HVU7uB78HwfYx88q1YUQ//4+U2MNfV13y
+sTeLR7DYw9vL5D365Gm7DqOkrt+o1YUFJEe1cKr46ElXFvir0pdW8ye/HUohHiQm9TkK3zJIvd2s
+Jf1tkWPOVt8d8IEkt8srp+Uq33DMFubpSIpFia5bCWV2o5TYpveqvVQ5TSdrkA0X0F5Srmc6aT+2
+FW12R4+DTP4EDf49PSldQUuQElOptSeiTTW77OWGmGBv/wUS28RhZ7vzjbzXC3kIwXHJiI+V6i5y
+2KzJqSSYtDxo9JDd84Xpklk2Hlzk5Hc3jJpTJROlWW4XCCkhcU5wkIGZrMfcp3rEdoyW7EKc+HEe
++MGT5FPcQUy0dFMuQh1o4GRCvfoj0NyT4AH6DX6yD7CWe9hqD5uGhf8hbBO8ArDMyDC7hwonGgDY
+PZM9G+E+EPAfPHxquhZ3Q0nGN78yFu401zgReSMlMs91uSK30u1GvyLy5YeXJGacTS35qket+dD6
+MlFOLOl4sjtJvWnnqWKcJbkBnkG0y8iP9jSxio4CxEAJQs1i2XB72lICKPkg+EoXKzt2ctAapPF9
+Ji9dds9aj80aSuUT1SF9P4zg+KGDkIIOWNKYH4oUB+2/s5WnIQ6cZetaw4ZiR7F7qzzIejIKcqBR
+JlIVpT7/DUWdzY0LlbtNxFw5AdeO2676ddjNiOntoBvqAGuTxmtP6RJo78RF0uRG5WqGg43YBXRn
+U2xHox3U+OCWuoKwLYdzzSm2tVp4CU64o1/rZdR1HvSbwzgAC8YZG3jiTiGVe7Kypbc89Z1h9b9b
+nrlztpmCtIcsNsHIO6KTud078+CUbyPHPhi8+6/f/MlsfYex9tlvtsBW3K6W7/7w9d//bz/5CWMX
+EUv8WrKnox45+ds30PLou6+/EnZxQjiHuRop+8ffbBctxgTA9iCSLyjL2yVnCAX+oEG9fTYY/CLH
+lI7kaUeZpxiJ6TK/rIEX+iq/WRZ32YASI3cqJ9Wt/tYUTjUl/RWtbPBGPVC68CT7jib0EfzE+waT
+OS8pAYG5EqjtvmrSv/jz8UBuwDf5ykV+boDh5VeN343sC5+PdnXkZD8gEtieqHBLH/d1wm/JCW9j
+wjP+Fk8IKTWcUobN23VuvPgxRSat+FcF5VDAt1JdG9vtOSb+loQXZQUsV7kw0yIH2hYTjdXNgrP2
+ARg83sfZsZO2hHuVklB0bQnuIkuSvyko+wtQ7Hw5p8RmA0mnvbgDPq9EvL4jI0SRY9w71eOB4SmS
+ZAMAXuM84QLxdLAFjQdQ5tAUHX9Oki/gt+TkZJo8uP3L5J/g38/p3y/h39MHt0+Oj+D3nz17dsZ/
+Pz0+xk+ePXv25dkg6vVFzR4fc7vHx9Dy2dlgtiwu8+WMR50m6fHt8V9OEvj3c/oX5HtpIfsGTegA
+oOGTY2zys6cix8InP6dPcFL2M5wXfooTs5/SNPBjngd8YQaC4541iD6nimzARR8BDz1GQVrwdllj
+tgv5AzPJRR3E8KJi0wklmxvjaXqrGcS51/om+YRLtuW3Moez+Oxg8NuxTXvlbuYZMLRen0G5DEA0
+hntIzb06/YeH7RmQ24c7ZX3TfDRmrYI3EuzFolh6s3E/kLU7n8gE6Sk+Lyv6u2jn+bpAL35HGgMS
+uUxXyOL49B4lYLhO5qvssqm3azcQiwThT6aECNHwQ7OkB7cPj598h1vgpMnoygCxbh+73ayhDgkI
+PEGpfwAZ0Am05C4n2sZZshoF+bWY5YsF15NIKf+uCqi0SuQF6UN0l+F1D1X2lDelRD8y2yOz4EZH
+R/oSYb4N+euI/8yJn5kO203dFH507QJmNR1CM9QLDCeU0AaDO4bytzDC007ucUy6MR3OmwKTMZrB
+JERUXkCqhoX5qTgpInrR7Jk+++y7KzCf7FiEmTQ8FPvnDBCRd9f4ACD49E5wZSW4fHYxrN0Z+keo
+PrpkUoPf5AhlCymNCn6c8coy+Vzi92DM95SgHWaANBy+XdaX+Jy3S8z0gZlr2yS9XWAqTOWSFXTI
+ifFAsFfUt6xgri47I/NALIVZfVVfwtuUCqxJMEtn88chgPVye1lWq7zKL7EUXnEJcyt0dALvbxBw
+qr1b5DCgZvYzRlKbG4SXbBeCBMYZbff8tpWZIc+MpgbfXi6LGc6PzpmUKKoA4pMHSnyLOs9lju6q
+2foOlQlDhygLgsDkUBE3SsejM9sdPSmm5lcL5xFAGWXiP6HFAbGVcidyLl7IaEzLVl/ibZoI1ro+
+FvwNEk6uiImZzwFVgLEE7tv7CEvLpNJ+HOpXO2Aq4FLJy00/EMe5PggmJId/CTw5YOcDpypRR1KK
+cvWDvS5Brl54/sAm3sM2IxeGllrZ/cIrhaNg2Ls1TfumLT3pDjpwywyvX7mQGJThycnQWaNDJPSg
+T1zHMVUF8uqDpJWmL8o7IBCnxxO39TiyWapiIPY1MyuLw50OMzEL2KECswA1Cx5lXgbGefptUQ6Y
+6kXlvQE0XmxZGhmRM7QNincOgSycIJitAdGLxYwJaN9ptAWa/DBaQPdfHRy6HhHkUT0CeJRNqmlC
+uU3cGwhD5pRjffiFzALepEWsCK3RQVDPiF4vv3TIFR0D0to7oC2ro9GHXWBWkcwnBwDSYMPVC8Pd
+NGkdiwW12ICHpHD9WFD+cIYXqX+j7U37cBrWduk5NIHSGQivIpL2nrEeiH3DIE6GIhnakgIXGMfH
+ICKpK9INb/L2Fofs+M87G905Bb4zQk1SMbMAm4OAjiS2k8TzNWfa2lZAIMlbcXk3jFWbUMLk7V6X
+l0T4sHgeXjfKDE8jyqeBtRA/1dVEti42JSd0LfKtEMzf+7TnNfC6882Peeruavydi+3EIRULzI7L
+7FGDYvY9GFjeEtqovsUrIv2zLN4M9gMuXmB2Fu+hdbh62pmdJMWbtzT/XrP2r0hbYNq673Ngew7q
++9KX3oPRzuND62iYhSq9SXyisCuJulqqrSEdZ8SJutnBxt31jtuaaet5arziRZ0kw4gi1INv/zj9
+y5Oz70uLPYt0OOd9u4ghPCC/seIVIQ739dD9tpOPJPUZ7Cf19yKdIgc1W+JHZ8Auc5MdaCkbwW90
+R5eu2IZ579DnELWCwxPMYksJm/jCPNoUebOob6o4T+LzxzrnHewLcxRhw2Jp58NvTOTa7B8rWNRP
+zaJ2zohJTAxe3LTr9tU3ZdeC5Oi/14rcsRTZ+zBDKPNerJBKTX2Yce+9jh1YOPfwwf9+ux2+nH07
+oZVs3LemuCX/v/Cxcem+0Qzkm5xNqI7aTfvvkKkGXQIVF7D8NjxLHHRiKbkpxkPfDnueAkdS46X3
+kC5uojCH4+6WtVI9Gom4ZkDhjzoetlskV9RwhhId+qzCjwz/SXsBX5RV2V75kPFQSspOtG0nyWxG
+1SnZ/OZjrBj1DoozsRoH6YX613mbIUKnrk4CpK6b0YQqZaLhY9qJSYkUHLHajIOh2c2TfavXsW3z
+W+GHs0WxJDwMOx7Fz8GqI7Yr1Yt4IprLwg9CRY94EY8++Qz1abLL0+Hj7HhoFzWkRQ0/+9TZJb+/
+xXqaXtqlLPRdRIcQR2C+nlPnqk46Eg7QE2nBa/NbIK2Qr4VsBEoJnM9U9yyisBg+zD66QLYiPBrb
+dpypnl+iT4/H3Q2aL+s2dkFUGT9rtysQIk1mW/mYaVzhEq7wK977GXqvDo9Qv6jJ3xekHMXRlTXy
+cBYm+e6/efPH6I7jROu8+9evP/3Dn/ykY+SF2zdRLd5gIB4TmjWCeMOB5Kjgu2fjj5o7BpGOsMGI
+aphQQ5u7+xUMjq51qZvmwnGtaCXjNZoiSQSiNBhcCaFcccEYLSpOZWWwdJK0dW4X5aDmOsutn1TG
+KU3YcvzTIllsG036jVTJz/cd1MK+7Sl1Re4EaCEo/LVl4iUvnYPYwiDJ7O2E61AdMIZ7Lj5gt5XU
+M4cPCPgHgd9iJ2z5QfK6uZPK1FW5XOZctZtzWl0XXDyYTsOp7V46mZbDSEAcOjUj/+DF4eYYjmDy
+YffnKcePJR+2MSBg15HmxEZk3VbXFTDAo/H+0G4dRuT2IhrFvWd190t054xoJhozRI4+OX3Yopw0
+HCt6l5VcjzNMyS0OS3CEx7cPbz8dIbGIjsbCoo4L+GODFk0qcYpevN0pd2rymHHyqbgt57d4ayNB
+T6Rav0Xlduq2PPpo/OjRk6608Rvb3m9+VI7jyQnRyxnex1GWZSN8Jzk79PjoN4FEaqNUqTC0E96I
+SbBolOmTj4+7LmE5EaQjIlWoOoaetPdak1aLhrBJU8q6EZBnksZTo0qNHxmXIG6LxgSTtslNyQmH
+TD5iKXRCnkC5JAcJSrDiHR7pUkZSNwTdQzZwsdkFYY4OJ1jiFWhQI+V2HWoJ1Be3OZEkSFpDiK4/
+lUSTxJpc9oTWiRTwkb4W2oNqkKhfDHm3g+SZPMn+Asud+MT3ASzxfVncOIvRqmBcf1OeJfOsjO3H
+hA+87VM9teBbfDx6vqNiC/Dl4784do1vrdHLsR793eDNv1VfrlVeVu/+zeuvfs1+XHOUreFBXFJK
+TpsxWqqfrZsaawyekCeWwyqL3A/sRL1mH8KuHxYPCKw0/6IfizOc9daa8GMOf1sHKPL1ssq9Vp1z
+v95SlfevpbRd3iby69flbVmpv9Rzaux4TBG4N4CeX5ZAVQQW/k7dOmAG1N7uWHNtxoffMUzYbwG7
+USHqcxuVC+uqmHHNWlFADQZGTTrfbhZl08m8oQBnM+SIQPDIoBXZI8fov4UCypys57auD3BpEtQx
+ePrd89ezb39JNkP6/fXTV69fPfv8+VdPv0Qk4Q+ff/P66cuXb168pg+fOB9+8/lX8M23L+Hjj/jj
+N68+/+un+tnHgwHR08YRZxyvnOE/nOZH//j50f8+O/v1zQf/cXiQU4g4g8C3gGDpEDU9mFuhgGW3
+yDvCT9jKGp77NSaubNjRO39fS20jk7vB4dRZg4ZPueMnkY6yD/D5/OLvXuGPGdzmeYu//RZ+ufrd
+SF6HB8GEePtpYBmBvMWGZjaIy+UFlfxc13A5MAH7UgKHWr1JxPR6AHiOeGqYVcyZ5+nwgw8e0Y59
+kG1uN24fk9DTtmADPvz9Adl58W9+Ix6Md/vcCGHF3oi8HOlDpTNFm86H1XquLDPXl0UcWBAlydU0
+9F6hAkPOwjjhcvjisWuOAdJVGLA7CzaQlwXrA6Opg8o/khCGaUTEFESboOqJyKSPgGZi05HjBATC
+VnfYwBGHz6vEWHWescBx1ne8a+r5BaZ25jnDeEZQxKmzIJn17zQ9y/O+DY6PCocqN48ibwhAsiJi
+dJM3eN4tPM1zLHdpx9+NMkLWhlTzVglzv6uTtMF0SIwp8sGRfLJzLbwIyjQo3Vgyhu2uqxFyDXDv
+N1QAfhWctzeJ9R2SgcNGo2J2NdedBoZlw0WPpM5gi2+E+LWugX7nl0Xb5+c1PDpinfXQjss6ua7v
+WTAH0XWTJ5TIe46FKyWV1BEVQy0WYx3/AReLmQPPcckSYklUEre8ujiCjToCMma8odZ3yRfwG9sX
+MKMruVgLJC6xtl1fNvlCHtibYrnsP+Tqgp+ykd4M+1Gvl5rZA2oUO/RlnS9ovkLVRlhkZil1JWoh
+uiUKxWWzH3MXxfn2klfvDKd2uFYy+UCbS6WDJkflbhw/z2EDi9XaLF4/CJfet2Rv5dg5wd51kwMu
+2qePH3s8VPK231a0ZPd1rdTjO5V3VW+NuJ5g5cIp/jOBs+d72UzNbxMqsz19RorDV7whU/npOXUR
+LAE9lZ8HOQ4Ct0AnyR8a/0FAOOtxvynvbMiM67dnXoeO2580EGJMLA5NBvl8VfUaH7xFXTrlCl5d
+w1MH1MnjoBIpc6iMvSLHVHdFV+V+m1m1MTQUHoxXUvEXhfH18sT0jswuq1rUzjYGZg4H4uNY36u6
+vs7iSnQ+1tY91hjYJ35hbtg0s4OdvkaFQIf7Bm0FkZRw4jng6T1O0dMHSPPpcWBlxeS8mwW8SZpI
+grjPE1P0HYBNOp4ifedg2dd71hawZc40cs1PEjTet/fXAp+NPziAZteadrJs7V6Dw67vVDJ9rylX
+9QaYV6f8jElc6N2we81VpYhuCb5Y2rtX5Gr29LaMlcjqYgNKryhzniTzfHt5tUlereGZrGEKFtBP
+vaDyqK5Hl0Bcc9tvMuxbqCNYsXyJCvDlnWub4q50+fCRml/Bv36iMnvrPoVrd3LgdRbTVd9k9YJP
+ItoyXcW0u7D+iT3uo1GuC/Qef+qiQpXsrL0CvqC+qVLvUelOxn9RVgvKzIon7z8q0j9K7Km5PE1u
+19COiCoQrdQcvgSbGp44yX5IPFL5jznnwvb2WOUntnIhABPHYKMrI+dpGbs4cY50Ea0LXoBun0HX
++O7A9vdM93xdNGh10PapDyUynIBxrpD/FDtc/0m3LPW28HL5V8Ut1ThPSy9bhSZzdiuAq8zPLPgT
+p/V1UZAqyH1f0FlEmGK4llyRCEH4lYMfKDSC4RdjTTallOqmmiA4nWVxsel/u4ONpfLmp+WHbtJN
+0U1hksnIK+kVrDVpNydcmTyo9eyM4Tp+y3ay+cDZXHu34e+sH69mivQpNpyWxC8qnKn+EuSNETpH
+aanRKhwxjphW5rUl97Wwp0cVGFlcLwoSjQymugEeymQS77+5cnRmNEvuiJ+0NnIF01iqgEHfoR7G
+CLkzI8BRPah1FJL3JxyWuP3DOaNFDy6EHQ0Go1wWqUh4QxMEYls7PgYOYE0xfOorCt1AOgvizNtC
+kiLhexecWjj/Bk7/RVPf3vUGY1y0kS22rrdaa+oiUmoq4PLdNEBi1zKjkIO5hY1ICaLSVb1wbGAO
+TMJazQDoxM5c0EWfUUQdXPcZNmvTDz64vglsiYQn9DYZhwQHIbS/tEidpUbzS9vpZmuyIUrHSWKG
+DolgZJ6M5iwIYcX4otncpc7G4LcX6O0fZE96AN+sQUYk0/oRBVkLJ165BcRlYN1N1co7e6j4omPj
+YMYW/g2wksAt39TNok1dLXl/HA8qvZ15gjzOUQsVF2Vv3NIhKPS2LLRT7Wd4PlP+PbuWUTMpgtJO
+xnjN0sDpSb9FF5a7NVyxxV3FH8H1JfCT5Lc0NC75hCjL78YBUiJhM/OHgXeZn4MN9SbBnUOa35cv
+wVJI2GH6LqXubt6s7tw0L457JfumYnLoOCAXxXLHcheoZ+lZlnvgQMl7E3pRulsCgJVUUi96ZrYs
+qt6Opg5upx99EO+EjLU3Ww93u4UKSc/CDZCGGjUIIR8qSbiwOupaHOXbpimkXInt0NrK51TDHC71
+cgG4OyEwXCfdRLdS2GNGprK+e0O2bMZ+0RsxcdL6XsLyhVUxToCz2Vblu23BYURoYC250nQ7hzut
+Vky5YzgR/wqJ0wGRDRes02luFk1XKQy7kRsul7sD4052k94FPpCdTwbec6EC7hvigFTVDDGLFaXv
+aTvFqyWhrCpx9DcLXD7xoJOthoRJfkG5Jq0d5yZvdTe0iHUqBTr80u/+Q2noL42MCUzoGxMU6k5B
+Kd8jJW3BeKiZppMN8kxqP8oM6pBtpySqIgzqkBOycl1y3edNk5txkd/G5wSvh75VkSSkM2nP71nB
+L+omdUeyjRHT9au/0qfG3IQSX8LwfuNllf1rQYQsSf2LDfGpur3DKVIuC0rhIjhGL2qkgrWLCsiO
+YTuC4j/yrAbnyu46aWdWD2RaQ94vXy4UK883gozmywKTYDxXE7s4QRCk87ukRROMpSNiS8cvv64X
+W/LuDDiDIX8hLOQXRMe6jehzafNc83t3m+lX0lLLs0Za6lfasozODT/WUVkU6YwIHw+D2pbzLfD/
+K86NE+UL55Re1X1xwzTQqDWGRj+dxhmdgAPEqiHA8uXrEq1h6fBJdox2rS0XkyYK95BkUMthTZJu
+Lv+h5blm6zuVHdAHjSSvLMvGhJ+cQIBXGQPjPDP0SnTjOJV7XLb3S+3OGdCDbO7WMWpXZIm/2yPs
+ocRK70nCzC+/o0AICrJY0RJ67jkHH8cuep6cnBy1BZBH4mfFJ2ZRoIqSEsG04WuM5KuBG+1XrOyX
+zHELePz78GduP8DBW6+GDiwlKhjcDoKqLd01u9OS10gG+TDBqGz1kLaPMp958c7wC+T9042mcLSr
+1GJCJGkc3RU/Sbh8GKALhuMQIOcjN9lnhJXQDibpqMcm6Lf8t8ccVkXv6jSxgJS4MWDc7ld5e9V7
+IfDLNDWznLiTcllNijQKYXAOJZMwU8KQdrearYpVjfSfZEPJyQmoxqOrcsst+H2rX1P26+J2hmig
+nw0CN/MORbTdJwErApihnXqLfbqOoE1BYkkqnU6PzyYK4PSx8/uTs2hgs7/U8V7xyWm76x5r7WvS
+a/7wbrp2W50Ijx5X3bZ34wXKeMfgbXTpGB7V1Rc0bmpZ1FHNr/KyihFQU4SzpXRexBMFvDta9sl+
+jgP760E7Bfl+In/Z1DXBCMUfj9DSRIL6cPzkI3jz2c0VcgqsxexDPQKlcUu+jtEBS9rLQH3APTHh
+TNMW3Wo09LW/f8S5XXucsb+PL42TbGE2MmCPJZktUba8upN9ZuHOYpjDIVvWeNdWkcZX1L2SG1jP
+Oyyu5AHPtusFKoZpg6KceWdjfAD+DnG2kDgNPb1lmm6Uj+E8zzwNv6tI63n7DlW/udVOyNwGhFWv
+0EVZdS4D58cJjAjnHDsB/AVZBzzhUYEuMiu/kA+xKCRRxiPnlF1A0N/nvZPsWvAIrh3tD6dDBHKB
+0oB6+Ihogo/OOHNXEZVjsxk1Jftc5u3FRVnxm+YXEmfk1CALr/zufNs0tuBwcGX1S83I5LAV8lUI
+zgcpv4U3Vm8mf+s8lutmWxX7K7kFTyyxwEJzgQcPy0Jz2axAYXKxMrl4dE8vyluMdxaD5f5qbRer
+7Bl3+QoEye06XrZNrhoDIEVcxkE+QSCQptXxbWmYwZr2I2BIaUlck2WHlZt5uGBTO74HVA5Wi4rq
+TKXCFzrXAnUgAkhBqIgJTqpwF4r4iQP5+sxbFRcKjRVRja95cx6WCY2Y5bWoSqSOaE/UrvbwNy04
+IFl2qjUjOAvx3jICpnT1NLIe++1+QFzhzSnu5uI2zD7EddVyGn1k6vD5SAStotIGZagsKppKoF5N
+vb28SqwF2I1O21xtW9Lmkusd0j7K2po72lCjr3ggerkN65NMQIbvU9kmlI6B2t5c1XAsK1ZnCDUU
+UJbzGGjY5MyBOU1S8amfyF55W8GqdOP/EkqalfgNdzwsuSRVjsahXMV1iYF2FDNsreHt6uXDEIKy
+Ymaz6YVuxcNQebJuHRZ6UQKdQPxhYOPBN/XGUS/x4oc53CS495thGM3nZ7npEljJ7sshO7gPnfwy
+Ph/YSyPpOrgn0mFi5k5dQSKPUcEdQ9du5+ouNo4HHYbvQPACCK0YB8LZjmM0Ie8cpKhcAKkb5yas
+kFz81cnA3CF/g7x5eiLhaGYUu6NJssxX54v8hNBGjZ4C0LOgHPhQduQx1TiHyjCnMHBgzWU57JDK
+qeR/EC+QOt+ytX7aa01FvYXT1+kcqRThDlL5o4ghnAYLIm3GMV+5rAeWKekqBPbZK0tizW/jvZbz
+extyjK3At/XLlgFVvL29ZRaUqAR5bhAWojJzffeZlwLQ2OYztHd5+gPMYcCSYa9E1hRLCwD+2NRq
+le05QGgTOSyeB3w3iHyMP0wSyRpLEmCBo0dDN/0Ahgc72y/8bWZ23DWZ6SZHHFWjPgv7NHTCoSBC
+usxilMkbZu59X7p3SnlMPQ2ntHL0RsCwvBmUMebRsHMwAlx+272DRovACVoVoTFey9nWfuOoEn/j
+38b2JzKSyZPIjVGtH/IfOUIr54mEobyXsCgW5PHVkihtHAhjUjFfpRHX2F+abG+rEj09Qeyi+AeU
+nGIQWz8o0/GGsj5V8giSd54Uy+0RS/US84XVp7+r0NZYrxDWbjW09rqPIlr7OMV7dR1BGbXEwTF2
+pHuHySKSFm1+3v4aqY2etMAhZobu/rOZWypkOHNAU6fhJPnt7w6IRTeXj3qd6mLgQT+LRaWrP8QO
+QPsulzNEN9C6O4uuL1Ow6amihOmFmlDkTswHT85iSQxnDpDOwbvOD/qd8V74GhUiHT6WGDQJmr8w
+9lnUTyAtJygFnLn5gnOyupdVoxm6JEAus+On1/GUD/iktryssPphXiWl7WZDVTxWaDZjbh+NCslI
+65yMsEQZGuXvPur1jei4oTlzz8JKbH41e/8l3i2GyTMdPCRT1qpEPBb6EkdbEyWwngxkSHmNUcXJ
+lVoCLybHE72bGtg6SXYKu3IaG+RdrLsh/ZmhFpezxHbi9VzDlkTcmohW12kxEpQbZpITB/cO19Kb
+EcwmdYpXsdzpRwpNfCdSr88Pkp9OziBMRG4yBGs+xFEsmaJ3jB+GQTo2UMlFIescqlGlHe5KOxpT
+mjfOp1Nt0JOwzEMfjIGU6HnyV3i4MOGow2iajejixhLX1c31RpgQ33x7PCgmlhvDBLGfbfcpVhdW
+Hl48KsSR1VFx+s4cyoF3wRmvV0PLnXNwkSdwi7fl9ISBvywqYjncmkvqvxqcLn7UzxWwQkBNyuG4
+XNRWB/OxIh5KgPQVw9GxfepSry7dE1LnzJWdzdtpMFonuGXH8CaxWoxuWu/AlavC7d9tZ+3eTaUi
+hlGtopQ3dA+gW7OXyGM6DMYdav4j32/X9mCCyjm1YpkzgVpcUE6RbgZ4D3U7tqCgSRNNIq+Yoj+d
+74l/bi7J2tApr6jwBMMwNhYaUd2OCPlyJ2Hqv+EfOxujn3q+kJaBjmZND4qfESONvKdlBKOEZPOP
+aePWD+85liP3WPRRMSdz0lG1wTaQ7sQSmXhb4gW55vYwrWoWYR82tOUVpYl52IyJfCrErr7Kf8s6
+QZP40KIshGMnphouw6N8yuPQ0UMvR1TQgN3KWDuwOxQO28USb5rE9GTZcuGd9L8QLIdJyAJ9onNM
+ySk86iwT0IMendwFe21u2sh7AJ92yACe1MmJFAxY5WtMaTxhCDEmXWkC2zHodZTQ/yFRhL4u/USh
+XxTybKcuse+p03ZXFsuFU6bNkZNERuj2e4AFt9D/GPjrcsHywDXmbqEnmt6pto73EkGC48+Xd2Rx
+M3YC1NsbRXxPFl69QkpAGIc7AcDjntS8e261iRxoivx6cGhvJ/Fc+MxEamfsIpYifrJUhWUZj8e+
+Zg1YYBAu59cp7OD0cXCmXHCSri9BmCRDLbqGSPuw0TvfNQsoM0QjvAcOapNelMspq42T25PkVsZF
+5QwMfFC+bjjjqWrQicmfJOcXUn+zRaobcDi7kRhHTgPeaxcmdymS7I+zi7KaQf/oJOmS12HaMxsW
+xdrIrHRGHfygzlHetHS5PI/77Cjy1Fktc/jdyPaU4gCd9ce6Td1oLJdpi6xJ3fi6nFfkjZ2ZXZp6
+auvAkUDR4/tsiQ3I88OMf6Al8+KCh2LjvuiBiNvZfBfbKsImHLt/Z30J/GB8iO2+yfLRewQ7o2gx
+nSlsynu4M5TrJpL/c0XBdKQDDUjYaVj0CIs4YepBJNWeKsytUHMrpYOwcZiXU/LXAEu0ueJUNPlm
+xDaGXOLLGA7qdYO+SAvIHZ67LsvrItEMPpxLEE2x6MEGIwd94XbNKY0dlZUXJRN3yuebLWUQJNAl
+0veburkWZ6tQcboFvMEZt9v1upbwAvT3qekVxUI7eRggEoCQtXKOoI6Zi/OnMcXiGL+4HOP5Eu/n
+KBYTPGZOU4WqtWAnjJkkNNz05cvbO424nwW6mS76jUp2un76Yac7LeD0yRnaPnARL37517Mvn798
++sXrb1/+fRdaiMhwm3CpKSx7fHbAhLU/tD8LLxp85gqpygvE2AbH/dJoFvjBSTZbtFewpoUojObw
+pdTdxW2JGds9HSnzrqhX9tiOuL8MX48Y8ysam4A8BJyMiIYyllsTLGLNUunOL/zGZqcOe+QYUZgF
+FziwdedtoACVh9KhwuNDfIVia7f5Zoa0wfQW0FVMHOnqEJ8hF0pv1z5RDjt/mHQ3myvoeVTDaLrg
+a4tvAUszMdr8Lifjii+227Db5V4qDS7SaGMdzHR6oWJeuylFcFLD8Z4JJqwqwtDlTxOYLXQHXpjn
+fm8xn8aeJscxpbGaUYKJn5487vqScOiKaxg++BgEiY3VhURnYfKjAnonsM4xi3t5kVRkcE34aN30
+6/Q9PnEpGMrpeoSBpkgFeh2/y4paFx5OXyr4jSbecZTo9yw0Mh0VCUkbEFNJbsoqcAOS5ffNylqw
+gk2OKp664+5RgVzlrThRLzqml440sk9HgnU1TYQMRaMP+uUyu2euPsXByNPbs4lFhGhN59gaiIHs
+Cv7oB5rPmR34smXDPCdbpNDmYToeskcAWQiNQ2EfOrhjUlKdAp8A3Z4xbsBj+sJuCA4R3xCzSKey
+ZLw04Q+xdeRud091pI3W0KFdA0Wl+vhIdgSXOmrLobQafL9b2V0AQjWuZpzdpXsTWBT2osN75fN/
+odt4wUH3h+okfTWBPQeGMO6/fTGN233QYiCGqYuWy5iltuQle3EtC7hd6F6dU1hOsZlrJmH0hMmr
+woRTDgJfPkrvPiIGbJa3rggG32AtmPPfZPot5xGSOTiZ4cKZDeInq23I0aGsNmMq3emmDNEWg8G7
+f/vm32HpDmsBfvdHr//zDSUZH9Dfor/yUo1nA/xakn1XGJuDKdhNHm36RH3y/cIf6HmRb9CQixFU
+mDvMSUBOAHU2FtxqVVf8HfbVz1/Nnr/66ptfTugXkDX4l5dP/1rSgItsoc21YjDsSAus7ER4ePyT
+sqyWLRfgKXFrrgeDsr0pq4+eSAZEOJkNGp2I3tEXQ8ppotFwNZV7kFhbem2IVI6qDVYnQT44qDqU
+fJqkH02OHW/EVb6Go5+RFyk6+5BVLxJISQ1QMe40Gg/sjXfgUPr5tfEeganGajnvye0TTZtSt3gU
+fIcnaJqmiEcnN03EFYR33+3ZLQMrAkuYmcgbj8pA2z/7PLzqm0ocOnxuTw42znJGHLLxgeUTd+i6
+oOyNE5JcYSJiuqvkpc4SUbGYcYKhmwXe3vXNtlyI9Rp+64Z3IRDkIXvWxIlx+4MIOZUuPcz1hePs
+9+Ms/7JZH7h8aMl5fS/N8i/3Lp/9DTRLTBcj5d5HMDIDfFzRG+UAMorhOCQgHIdCQgIRQmo3tlAW
+UlIE0VXkCs3aPRDf1hd1W96+QO0eE8AMf/9F3rrZpeZXGss8oSIeE0aACVkHjgMUoTzTBV+L9qqk
+gFJbLYRqgCBfx+mSPezwvwOSQrF0NpnzOT5+IMqdF5hNwOvKX6HDsPAIc1QzISvbmU/AeFB9AIxd
+iUdQbEtJNYaTKxcp/rDbfanf0ozha/o59r2G5ic7bBNsp8F97Npp8PyxOFdUpgoaxXmV+C2BF4tO
+lL0Tb+HZJmrh3ZRDehJqup0dH9p8EcNeh4SQSxPFz8KbtTqvl+UczdjX0diI3tnoQBP1NmuCaNDV
+NX69qTVpwHIRPDs4pTXeAYkCu8IyLtiHkkpWXEGFMcudWO+MZDb4VstYzmZ5E4Nle3OjHSH9V73c
+bgrPNEgXi0Ozgv3icjn2gvG+puu6rNgt21/FuEOodbxOtH98fTJrXhQnDws3v186IO9x436D5EZA
+BEpyWhOfiuUN22T0aET+ysub/I5CsAgEQQ2d4Nt628zNWCYxhQwnIQvYMRRElpip3fpQx5txrWFq
+CuvYSvisr+gkbXzeAHGwzshr1nWmoywD/m38QQXMTGpmO0kCSXP/IfAAHewX8cKlWZKY1WcouhlB
+mLwjM29PjujyNDG8BeARwzx9cuZy+/iZGduniN7o+p53R5dnxR9e8/abxx3HZ7DBBOjDweDZq18w
+njF05q/xXTFvXUKhC95zp+/hV4hv9B4yGMepWoqO1U1JjAv7M1+gZy1cMhUDcBy+boy51hrkqsxz
+7m9K+vmxCeJlTbv1ddmSYoLZJMcSE5JV9vjG+hNawHBMFhMKkSAv/5WAQqqrFYRGrYlbbEkIZ329
+GzNJuNe0yh/o315OQABInEhA73stUl60A/Ykh/uY7WlXyEMveMvQG9ge2xRwTd1MIXztnn717bcv
+7g992QO+Z9HeNkbY0F5WlIfJHL7RpAON8KC9fGg/GBZddwByAfhdY6//AfxrjIfdZAFnHJH3wlA5
+vBHPTYI1yboteTv4Xr5gbxkmPE5KB/pc8vW5NUWompYkLzBGecszPgeGfaO2WmxceT3QpEz5qkzR
+DizXkV8XlQVhA568uZn3bp430A9mpi82W8T8/jm8JQwEdWSc2tqsmQiUUDEyfreobrkLPSTYhyuH
+Ri1KeE6vDIukJVVxk1LiMnzbcvwTiOm6h4EW94m4Gdt9tnqFOqBImAPuZhEULHfeDfUEiQkwfWMx
+HWg8JUAcrps5iBLGUu6x3eBD1wlVC6GbIft97Kw3yYLy3yGzIvKxSS+y5tgfdDMP8GS426FrSMad
+6qhYrTd3kkCNwu/Nk+eI3l1tn7tA4v7G98us1cOg78xY1j4W83PgEPxEPub2e9UODOZxhnWRmjBT
+E8F60vlOKdxjiu98cv8kZKmXhcxPcbvZB8CsOfnEXairTbsHjE+jMPByO15sIRRHViM5GjZ3RG1G
+8DEW4CSco5wOlPEHDeE58OgIbdRLC+IJ6LzQoOBiaQ3L8EbZJY1jIbn0VfTR8gxcvZoqx5OLU1c0
+7Lhitu0wGbVzJXUZCsYTpd01OcL0qn5fmMCk+fTxRHO2S8FxVgSHR4e9xB0J+V379KQUT2v/pmSJ
+rKoAoTPz9sYdR1UqE6kJJ4mAaCT3cSuluKtN4l0IoEUvXrBIaN1iyae9q9iIKVRYZARWel7oqmtW
+QXAsPDLgyBfDKS/qm6hFMooCfjjfFTAh6ccf/1yOAMPt6/kGX9Xjnx0fDw7TvGjiuKvtplxmzQp3
+3hfe4k65/nF7f40PcWPqVZ+syCZxqPi+a6f8Xdq1PTuUOXh4vaoczBQLXI95TCb0rnClzNXiz4fA
+AFxtq2uqa/znTz5+8vOfx6nZVXG7KC8Lzr2CIFhlYjKrdNXZHRkjKnSIdIsQ0UoFtBBdxO7rTsem
+PFqWZDnKH/eYvW07atZ9/tm1E9hlGhDeC+0RhIrBp06ySPIUNC27iRRTXySbJHGhNM7GfEkuA1j5
+O7mC/2G6FD5WjJbBQdG/XQd3K3ldqNxQr4sqHTXnox25IJkwPe5u2/kW4VyQ3jA16DLu81KA5n0u
+K4axyQw+RUQ+aiDp9wDYnqC5C9/vkRLiAq/NyI4lI/o0ghTVhypyMf1xRnfKeO5KCMrcX9SY3htJ
+tmT4c+pYcoBg8j7nslnEznIEzckgWF5+8gidZh9hm0eb+lH+iK5OcbsJGt7e7mBLF42bEU87BP95
+HUo/3Wnff07fToqTXX2UTG2b4uB+2plzL0YfOWN+RzkKmcgbYeCsdrLj8nh9E/BC579xZAyXTsaY
+FzXGm12e6N5NzI5MvHVOYPJGZwr04PwOrS8BEzNkWArK9A0BDb3ljPSrEUqk4cKwgdtfGiHfMgJQ
+0T5xAqPRMmI2kswKFDcDEHa9butzWPr1jZvPwp+Tv1cHJLXg3by+OaU13DORBSUyPMinGofRcHT4
+nWPuW9ShR5zw/bnB98mHSXhjccZm1eSRei6t3BNNR4ICelg6B+yuX50Fw3vfYflR7/Z3lxich3Y1
+mGxPIWjZFlh2tauW96+QEcu9QYcPUwXfYnL0Nf4w596GqORcNy9tvdweJt/4a5gaoyBdCnEeN6iy
+GWGjkWifQkNY4Krpxe3KgsRB2y56EMQ9S+YqyTIFg2msxmQ0Thzhn5wwycahHpnRUI+uf7XEMJBP
+Ch3tqIt9bthwJwCWNDAWhBx3LxDfrsIgT446sYPxq6MnanzXjx6fRTkBnY65E/ErJXOKE4j+adAo
+MAftlzUYmkFXt89LtMTpHD3ud1DzaLHcdfv3aBQnCb3T2wfy9KQ8s2/KaXly1jdzs5ceZe0fVZGl
+l/DGEQfp7V6g0Gj8PTai/82h+jKxhydarMFL3U34K4wepzaIVCdzhBhWuxIVQ98HWhBFJS+XyYiK
+mlNFcpczQEYbLj4molbD7/QxyvRUJwVmg8+Gk+Abm1R3lnBykSDNrdCvh/YzE68d66fjxdIIRXK9
+0SgCO8iusJvZgSnyJlEemxFMKHzuYJdkpNOzWHQ/u4lSevBFKtOKO1yQO9+OKGw7VWjT10LmIrOK
+turGLTvrcBycvegRZzUySizmB/7FLSzXacdSvUu0fyDlgLaV8ZJge3yBDgdWs5J1qXQw7OhRhKbZ
+Rho4BM3w6Q6m6OCC/PYh4deH3obfi83uYQY6qpDYC09yqER91ItiOsIa91zJtkchxxe3op5Yqqlc
+FqH3xopSubpWJYZoVW8i80mCRlflhvSvKBY7lGwMK2K3MAG4UopXQtMPdMNZF1WgxEpCi91F3m4c
+EheW78EEuIefGjXvkYO0LAojRqzQIfXe52anAdH2y5hCitSVUem8R34zGaWNXbWrdoOuGAwB4CgI
+osNfDeFshr3ykLU/AKdNTc+Sf3DcG7vjKVhEx0PhUlsGbCwIWd+t4SydxsikOTp592jfeEtnEn89
+v8obTYIz/OCzU/T4NVpzJQpajEDXhUn+l5o+Ff3sIwZhclW2am/yH6/QNXtdt215zrpiDMSEF9Ve
+SfiMkiL69BTYY9MLx9tx6xCAGoYpQVfdbOLmUI3Y2uFcRivu09h60WPOu0r3SK9gJzDPN3nCbNm6
+12XsNVmBd1AZecG0Uk0aekeeR73f/kSoceyl1cOWa+Jd9/FOfdwptT3rQ9+QBaBUa2I1fvYNhQFS
+nQRnWr/vkTTREDuRnyIxcT1b1eV7A8QCqPAn71U0MYEJreMmgd874iThSoMpR/Cv3ewqak13OHfi
+18owbqtF0SzvqHgMmaLY/6C3Bh97oyAEx1kSA/N3FbWBfRIlqPDd2MHWtQRk2jcgDeEaG0yxCPWx
+o1c+9rJjW2bF0U+EWmf95i3JV9K5XtKxPzWM51Aorc2bmsWlIzHjY4ufTrmPj24wdVKDS7JEXW03
+wyAsPnKxoftKE3Z1+3blKLZnztN1f/KMte/YfJDvdOPpVrqh6bfiyem7ETi89W2wpdI13nYvu9Tn
+pv143Be/CEBdh+Bb49ic9sRtRkNhjRx8uwvXYmd/O6FJjHeD68NKs4a92xFHIw+VzFQcAzglbfBw
+LCQDRFKNycO5iPd0J5fKb75JXsZ0prTYrtbqN4EBd+dl1fHXXpfza0vv4JmseW6ax9edWGDdutlp
+3dppW+ZRM5ygzO2Cpnd/09Pq2jJXH0Q0ESKJ/JnuKpJay13hNcISSCjfkOTqu8/reum2feAL/b3H
+QzPiI1mPu9KJnfpNU24UYbA0jYpoN7tFNOrGtWzMcWUxMUzWbnPolOxr15XKfnhZjGwppHLvXibN
+lOE4rJXtOUajpriq8SEGFOtoJjV7qP9wj19Ad1iMzewb9f7zpJPFg2HHL2p1D/2qdHUHxEpFMkNO
+PndprAdFNa9Rm5b22p9XXmRy54ZeZIyB/jQPvXgzPnhMp9wtIOkU5LKoEindIFUJet12u10cIn/c
+qQFCDdyJjXd47xwf4gLOMfdEY6JJh6wX9tPvnr96HVNLUVZreAkXJdJTLs39CJNN8/XkiDEJftlc
+4ZP6SJA6i0BD/egSaxaW6svLuZoAYAyB96zZu2AxxtOet9zzQ7S/QobIwTdnA8yRUFp6W1hkSlJY
+uOBykvtqRnYIG2e4hLt664SVh74AZH6hVDyj0IOgMnw1VcZD1ytNheU6lvXrhXfS/0CrC/CAbB/H
+PdDXPUgZMe86lDXex6VM+xiotb7Uo7G5wLHpOSKTxkdMCCeAvIS5E93qkhUFYpBowjmiOnFbAgQv
+OsKJO/rbMftjiShO3pNex3vLVDiAdZ49EKyd2y8TsL/6amIKG0Sn4FftWMbCTzobuuzf0Xvs2DK6
+ZW59YCuvTlh2jamjsBRaV2ZlNzRVPgkHgm8+wRmpwG8gpcR28V0f27uJiDtqeXDsg4Ohs5XEI+DH
+jp7Zhh5suHQV2nWoohc6YNiRTXqCBRUqwDehj78xI8eKB+3mwrfYtaNRxg/3I+b9gKZHjxVyrF6w
+vD/Pv/m7z7/6IUajP3PCjbEd19EnR6J/nJBqx2O3tgVm1TaxXHTjU3Z7MdaOpskESO7Yh2++ffrN
+6xgIP3lkf+TwTj2ZrkJKo/9VkN5DNylvZ/ObxQ5dkPRLpCP6As6vZAtb9w4goyAl/jZO7Bn3W2D6
+jc3VUMFlybcVxiog+ZrNkD/QOn54Y3AbAFz8MjjbzCe8A4s5sQzuwk6mERoYWG7QtS0btddqLNui
+9QzRsd0NK/aLFXvhXgZVVE/rDRyjiPkh6jtMLoWJpO+ruMt9xd2MS/31haKMuPrIw2Y8Sh76RmUH
+RLuJQHD1mxQ8Y8sgMv2WWb/YM+tgtPXd+vrSrXRxfUl1YSIvhiNov7jbXGGspyQvVEeAZV1TnBnZ
+g332h8FmJM3KH0Z7jN3My4OnMQgcLoWcbNfAly1aQZ52gzFktiRmZSLzsvVdx1xycwVckvW5wdeE
+1nDE3sn5+bLwufKX9p0nX4RE9on8o8g7Fx8+LjfbZ37RLgGNkmTxVOKu0nDEZtOm4goQy2pddrYt
+Ktd6stQe/VuPCs+GyZid0ep6Rst7cg/fATsr4rZHzimNxvGMmt39C8o0H7QQfSUZyGHOjMFCkb2V
+bd9p+YlXkdaR3eKYxLmAvN9fXEZznnbssi2mndXkx6fHZ0F64zUQhU0ylCEk+YI2x/IhvrJHvnBc
+OlqPGcBQCutfsDPZyhovAZVUaf10K+RPgDd+pQXI/aT8aLzDR7J08vmT9kNCu+r2SP2ZCEQgOAep
+VqRiyv6sKt1AMF6iH/hv9VOv79aqnqKFPGyS1bYlCiB1xWARVF6D4Iy/XwaWuBVhBz9DkRKaQ8VX
+CR3SSzTMga+ECd83Z2+eA1VeCvbG5Ee3MFLOVdcIGioI+MnglM9ZxMDj0raJ/yYIkWcdZzd1NVcs
+hrNstnNWTMyxNDg2l1zb9PZ4fV5faW1njkWGs1xvN49wWJjsdk0HBHeE27Q7EcnRxUTxJ+BhAzuQ
+XlzgxuTS8p5JxZ99j0l3804GcRrKD41578eR90V1Kv0Zso3uWLBgV36CgNoJ/Fi+ff3PCRbS1v1+
+l9BC8tbJIZ2Gfc6iNV+N3zJGtwBzPR2NNCXLAVP08tp2XJ57fE65qjanwj16fEahVfoO9mUVNRU8
+xrHIKvEcHmZSQybwquh/5DAHvGHc2nm9JoMTJbDPrwskxeJZUvyQZ+8rjHetiLG0L/rFQRDp4sPi
+mDMXJ6TZWTRlt/vODx3GZNhrH8YBqA4NZ5+lW28rCgDNu5GKsH0OvNSZsiLQka1RiazHkWUZ3H8g
+APNrkrIJerg+cmOY4m+ZplGJUFP84vTo45MzHCsdwZrmo0mCP+tYTIYHl/qehO7oZIuVbzM8Wg7x
++I+YthNFskPB/iXWcMCJjHqmbYE7flfQxzuguFnHP9Sf7j3U3qU/ORscEHLZtg7OmoB2AbPHrBBR
+Z3gwu8mcDdvSRtlRtwhlJHeP3IOJrlIc4QZxHN+hyd6ZUWffxdsbd0TXg3I658kcmKx6lZiZL2oU
+w9piu6hFbOuJORVjNAZxttnXNB/k4eIkQ7qZyxTN+eCyzeECGXMOTw3kmAGL22LOLoweQ2aqG/cl
+CeoxMxbL/ScQ13lHMMBqlO9anKdjIXqPFqI1miBm9XrT9mkpFvV2k5A2jNz6EciWssJhEjmqUML+
+ZmIVmwRBtAWZmgrJ6SCxoJhYjqQMhtaV25GxU9sxcDJGrsB63NdO5VQtGWbm0l4Vy2Wcz+OsvNtz
+A5djrV+w7/GL5y+euqFO73sCC947/LnZu9MR7xMHuvkfA6Wgj70BcA74GRmATg3enLEjengyTigD
+joJPPYLFsQAOZcHbVmgBKPzkI9rgJi83gYE3YjVn4J1cS3T+UbO3mc1ewzdJUBsk5cddhUh8KrC+
+yOtgFx6dDnx3yHQ8pl6tufPVArExY0LbFJT4eeNKWYdF8MZOatJ1aKbvvetJEVvzZcvOtRPmG4pG
+pDaKltih0Mu9zExcJNRR5olZhm+Jr0RwnCtffP76b/zgIxL8SXrj2bhyRVBl1ohgeknhfosztKlY
+wXU8SX+Yo0dR3twFReIr0crRCiaiuWtllYVPoNHkdAK0oiQiAQd5nqMvNULQZFmo3ySDPGfwi60f
+CzJhnlgq2QTt53eX0LhXVlR2hmN5Ioq0dadOddTzdq952Jh/dzrNcBTNLm3izsQkWi1WHltYXFG9
+L5u6Oh2hDnp0ptGd/6k/knA0YpamEmhInDEo2P1wR0wgl3Zlx+LegMXed1jeczhVCjijHD9mCa/+
+/tXrp1+//Pbb16OzngjmPZxMbyT1gQGPsr2nTZHB05OOHr6iub6EuT4cTZyZx0pnRf8LyzS2Z/fw
+Ydp13HD37XGfjDqx6fmCyg6PRmcHR31Jrw/9U8GRnn732gwmN8qPNvaUbD0oRBaKxQJ5E2jEg/Ws
+u3Mnb8dW5HYKRuEDTBDvj4WH3OmgvRDVk72nLlKDtI+6Pt9Lq76TzuyUeD7/4ounrw68J66XhdxT
+fOQwYAJlTSzDh/pp/nTsB75f1Sv0rcEH0Vls5wBugxv/N99+/dRB0J33O3qaAcAhAvzy5fO/ezo8
+4xgibyi+NPcTjsJdcePKlm0qDtTOHgT75Xwje/ZAn6gH9HbnS0m7atSpmGgLL0uYTpYvlg9Dcu/O
+4Os1EqbgBAIbIsMZATNfIDsN77k19XkrT0UUgGacTQsLB29brpuovnaui3Hc59q5wSofCkTk+fB3
+smgzGHcZwSa6X/n+yvgps2H4Hbqv7WK6XjhMl5cvG8SNor0iW/kBW4Om0JvC7EONpUQxwC3OhLDg
+ogv3uGyeco/PjHyJO0Essj3jcQwT4/YHs9+yV5RGY4pcssDXrJTyfbDx8qm751g0mlPywxhy5+E5
+bIqL8nYKciMZpY5G/oFMkuuiWE8/2sWVA55cz9C0zyLM4589+fnx8fiEFBSbmzpZ5Hdt7FhBmHq3
+dX1l2ANd6wZc0imhUSP3MrT6Or78tlxtV8BQor0c5VnpjQa0tt2umEHmgHkj33IRR156x7yCC6ac
+r40zOU6U505vSS4QOLcUJgEfHmFH/zlXVp3TpfXHHX5/fPIy+VJlSzzjWGViinPABrSXWpthu+HE
+/sTqpOxOy8W+2KrIezT2JkzcfKWJWaOqZwB0XrnZbQTOPZJCa1xvtUnPq1OMs1UYZ73poK1zfB9f
+1rZ2yx6YhGa4UsUk2RlBNlKGYNoFE/7tdOcJmQ/QGwOghEYnznDWdfxkrEkwO0hvgXA5ew1djNn+
+GUZw9FHbCjTcW9DVTAp+Ebymgo4By/iADSCESUB64wQ3erRbRmVdGHuV80ZiQDgmtaNRP3w8/qF8
+zeN+5eYVkGCYCKCS6c6qyCvywgQCQ8HIW35/8kuQeGM7bRBhKvt5cg+tosUi7ntYaUV2J3Fxc4sO
+8fiGX3MwpyzGOy52JA2oVJJvPBzn3aK6XO4aHaLvLw+/ESMBHrZ4stBMAmlndbemqiycNhpLEHTE
+d62VpkAnyciJvouZUbSlF6VHeIWjHZRtyICQ4KSezkhyAcdnvG8z7RW7pA/YigVX+zodJ2252ZLa
+Z8LhO+rKZTa7vaq3y0UMtTlpKnagDZVcwDelkHVGdAEDJLzZVh7NciCV7TWS/rYoxK0S7qXHQsH/
+WtQX5A0g/jPKSH0TN0GEs1JcE78tWmNaZnCBbgp5lSOAjFMzKbobiufHurKAmhe1qLcZ4jjriUVX
+LEIVKJ3Yrqfl8KfI4IPk9z2gHMGeN8jzyKCadwD7EiOxmjSCUmPvZsOhGj9WZU4GAQNz8i/xpLC9
+AD77ZKpMUXJE0+kRpDH/c2ILS0eJxEFKgQ2mDV9eaNSAhIj3tsZE4uZQD+sjqgGP10W9yHmbbp4c
+bR5j+u9+mthHw+lA2+ty7TGa7GKA0IrFYeqC/Vo1GonvHt80ZPTgYWvNveOYyapORsuL0f2PQPyL
+6YJw3uU9qsBdQSb7n0nHvke0A6ZOrgTknOTtyyT5FSc9or/Qb2C3WmUQMDlU6srp1NkFLKYjDhmu
+4uLNq6cvR2cuiQNI29tJgqUYlr+H7mTHeN98jnoZHCuWQnuvzsSBPBIGeGT3o23miRh8t6QVsQ8h
+1wpp5qcn8I9mxTsakaUNfsK/CnpHjEObbSsKpEd4neCGb19FJu0R0xhEYQFSmNYkicJNBfAkCZMl
+R4ofjiPDhzL9VpnJjsQdyujh91IOyqZqMJPmYf2c5LYZms6auUTAU3sHkskZEQAzKZVhVpyDGxD+
+KsdQFSAMl8gbkJVQKs82cz7hMKmzt+kXgglUbeuQ+Ph92Z8Jm37PBNBxT2uaqjB4B6R75vphTvRg
+pxnN1QQIc74qxyvcsWCJn1snBRW1OT0+Q5vXcn2VAx8jGWjgQ8qVOBuN+2sfeIlw2OfOpGkbzoaY
+S3Icq37BtUGlch4OjU/+ePDu3735D1R4Vwy36hz07o/fpKhLuAJqe7Qs3qMfxfb8SFnXK+ABlshR
+osbg3Z+8+WOEUda2+5+++V+xe1mhCyk8lCioXBXLtenz3775k5nUoMYSzahrfffvX/8/f0YFiBP8
+yLedss6VeyTr5fayrLCGr1hHyR1hBYJatr4j/kTs2doyY2XM4EFy9EP9B7BMQSOa4Q8KfMCex1S2
+Ol8saItSXozEUdk6aKhJJIFOVgs8Rb7guB1UnlKqQICBW49yIcFK3pc5+hNhespNzXTHhW4YVR6Z
+/WfGFIPkzc147KV2PoJ16K+D9AWbHH0qal2OSV7liyK5XNbnpLDO3+flEq9PIoI2yQB3GQ7wSE7c
+jEP6P2ADCEPKNpHFi/SA3hu5JMfFStdJvWbkQQU5sboLW9nNXcd8hfhczKiNv9GSAjNcXmmqWZGr
+9UV5KarrCQ0k4pZTLdUm3YiNmV2UTWsLHVNNlOgE4bLTHHnMcHLwMEAL9F5ZjDV1vGwKb4hNLC9b
+xjukc846OwOYw01SGrdxN4JRBGHSd0eci9LseYVGiFI+lT2i2g6thLrSSWIuN5qCRhCU9jlmgfqk
+KS5O3gpyf8I/qdz6p295EH6+BBXqal6oi8Y5TLEiL3nSfxIqgWAlw59gpkte1UnyusZL4m+WrGRC
+oA1VPVnfneCkYUrUN7NbBBwkiAhK2HjJ2Yug1advLZspo+I2kTaFt4fvZWwcaEiDGAD9g0FTHIla
+fitHgpFaS9K3Y6QGBfiRbowdv1SHgAMTC3PyVk4tHOUL+gHbrygPiLvGlHMYYiJ1CY6cBUg3kNxl
+o+ih7AFrm8EAQpzoLQOxSRQQTrHayIFluyaAO7hvdNo6pFU66EBzNfDAyKzwm0PRLoriJGgqZhc+
+VSCnmpy2O2/IoQgxPq/uuGolsBnSkEkzLvLtW5nZ27cDViEI50rVMrUiHk9wgY7W3IkXpT1hUrcb
+TFGBYqwcOEHDUTxqoT3NoLspJb62QoSckpxyB+mt5uAjJYTYPiBFc3aKem0D5rUqKd9/juIkxSU/
+9Br6AmPikvglo5jrbUWTw0GWdb2O0lniD/aQWXw6Z0LaZzgSfkpZhoEKFHmzvJsp4Q3JoZ13Sy8w
+1/ojSImB1LOnuqTeDWVbVow4sWvweVFU8sAN3CAgpCPCAyk99iYk1ZioO066732ES7R3jqrBKxwd
+Z8k6ZQDbhSmHhueVimHycEySzuiTx84WqW4RdOP3hBWLgNoeNjijRpHhh2URnekQtv5oTKIdKLKX
+GgfI18fMCA5pU8PfQY4L6e/fIdNrL6NiWs6Y/yjRSVAnNUn0+tDH/Yhuty0X9JRFFIsJeRiKNyTM
+vCmOiBswvCOBBlQ/IrEo6942M0NGkX7sO2A2dK203k+XfZLaYALCFMYMbpBb1w/znGHYc7Uhn5MS
+VsaYr7n0Lmp3SpnlpAxPDN3QW5dvD5IA8RKpPG0yDFPiwde0WhiD9Rl4h02MKSGtJQnRRR2IETNj
+kNIynqzm76UjTU7Vk8g73hqz/NXzymKoaoc7dH5k1umZmsllYQb+BuNeYS6kEo8lifkc3naUtypo
+SHAwGTg56hPF9oWDt295SHiwMUpUo65FaF3Wl5e4D/zg+TsQWQlZ5FP5o3afKPMZ+0q0Bk6M88dr
+JN8XixT/ciDdFMlvkF83DZS9xnZZ0nPnQHjBSFr+EZ2XEu2dM1sUbeFMq40/G2Y6bWI7oB+3JNbq
+wiVdnaKDzDW2jUpP374132Z6w8dv3/rljb/gL14SOA9TI8P9MzxJkqmCX3+VvbQE+o/7SK3vdLW4
+dFYq7LlxecLRSg6K7Lh0AS1Um7eDFEU+v7Iu9LQJEvTsAihitIFhmlt8XnChDsnbdpNjGieWViQT
+pwOdby2TYTLFLGpSy3H9d7ryTusOwY1t3D6y5vfBe2BxWcMiQOSIEDkOMsMej5yLSUVKJWbd5FDl
+WndbNNnLsWQ7Jk60Ye+0ESk1hSr+HlAeko2dOAsPkTN/cANq36iXRVU0cGYz5vdXxSbHvs6w2iJJ
+VwCjBFZ/jEgL2wgSGCmBYJiW3RX9Kf0ImkeaDDzPygX/eNc3eA/4acHfJvSwuf6cuEuORDkhhyqf
+6wb56pJAjLM+cWCmXKmOUtxuAgxwBC1KjyYdW0Df9SM8hkcbENUW9Y3P4hr+kAmGeR5QjTxfbklg
+m+frDaegKjTZHfNNLovEpNo8yK42CeGdWNBSSgw9Up2Z2lkhS6eMpAumIqEJISGXMIf3EK7Y4mhT
+H50XR7gjzhCp0sOSa0xGzCMlbxTWEFsBBwXMX4VSEVNKk17SaijweagjcByNlH9mut+qbzoRUnJe
+18sir05MxeqqhnvRkP8Kc6uerK8+MU7gU4cUhmiy72aHmJci2paLiUn77CBWC4wtCMe06eRLinWL
+t6xAzBNkRZfFLi7Hw8Q0Qrcsd/s23EIieNTl7dt+yLZVB7CJAGXekqb59i223QVQT67/tnmiUHTa
+b99+b9xVxLV4EUE72x4TJyrELgKLToxe5Sj+Kt9W3OZoi5Clox0J3ZbkijNfW1SkEiUDIJD3Jnat
+2prfct009oEyDAI9VIQKR/oW9Oh/rPrquhC2k48DQcR4IkdDq0pMxNOiyV7D78xqqnJ2oL5BlvQ5
+3aX3c0STRE0n/eC/gAk9ry7qt7330q7hHjezTy5QNZI8qTEKz334BeR4AUPnrVI6WYPgTgpjN+Sa
+FvZjGAZlsqRU+GdirWU0JnFdfYZQHVXtkPJ2bO1nXfogLX0FyYSUeehJtXVlrpurWukiuiKKCCdS
++Q+9t44MTHxqaUxtUluD/S5+vJ3mYSipIXqW5421xdVreFaKC7SHoJdSx2ZY3K6XeZWbTK7cv2zx
+5QNe+iIvl5wzhRYCrRs5VaGvbgY+qltTK7PuQHa9RQ3BQD9AAoHOoJQssZVICvnLyEqSvfqclBeo
+aG4pqDev7AcE6IOy+gAfRc68qL2LFjgo0vbaFLZIBhEEp8FtUGmL+mvsQpDosV+wva9dlpebq+Xd
+hBV5VBAKd4uzWocgNMN1u12t8ubOIa4/Fs6V1cVyW4BMwtkmhQ1MPT8EIZkzzoSYL8c/GiryDGZX
+RQ7SkMFCogHoaBR5OOS4eOMWZQtYc8fGIwaCC6xFe8Kzt8vsKFJleBKZiCZ0CbitVQSPwBHKBZd1
+A6cLfF6zWWKQWUPs9fuiOcd0lJTw/IKUuu6ofQPue2J0ETPBkFQ/YEie+QbtsGg2RXzL8eFmzQh6
+OetWCBRncj8Kui3qORHTH/fFkFHEowAVUXTbUvnZPUR1OF9opTbRCTBPIeCc0+oZ4J9BxUV+odZJ
+iQ1fYmVdFOdbR5v64+m6yOo2UyeJYiFeJZOk48CjaYBd56bkskamRjtHtLOyIFprCtIqvkj4QM/x
+Csc1omYTqFPbBXotDrsMHT12050AtX1i2ndhGkGagQLnTSIYM7eTpEMyYETg00sSCpdUewjv4JPs
+47GOfHNVsKNQXlkxPbkBIkZexAvNpQxfr2t6QcjP6JzV8DoL8lVgJDHCt2dGIW5ehqTau9HBhNvM
+bYGKytln02FZXhfJEJ3AM5NGf+g8WO/+w5s/JUc81EIaN7r/7g1tybZiKwFpISXaOF+X7En337/5
+Y2XS5ca9+x9e/9//nh3pgMTP6/dCZJE5kyat1KvZql3IGoOZzEtcLAPG3PsD923LRA8orZ6xj8HL
+4t2WWj8DcUc+Q2GBu+LqMJFpNqfUp9zztZDWl4S8+O8zmMNXIpof4oh02dTbtQYyNOi9QZ+kQ1E8
+SqEc+tDx1BkeHclWHMk2DG30K3smTIfAWgHdwhDR4URdFLhQkW2LXo3TYbi1yPOgL2IXNvqYTofS
+Vr/eO0d0luuboDO3ITb+INvcYq5MVGK+z5vpEHBqGE7YTJZwys0pg6hrILIuSyDG10BTG9/Loiae
+MVOTnJn+HjhZWDKqZ47ZHL0sdZjmgb10xNPH38eo2+yX3OTriLVhYLL4pWZQTg4I66XkgPBSjcZc
+XZSnqhIUih3lhrN4UnZ11H//euDFSUj+iop2d2pdkMiJKPX3r5sZXeb9GibV3cfBgLMS0I0BsUEa
+p+59EpCcQZ0JitY7gW9V/TUhVtrNSkAJ89wmGMnp/Ok3ZBFhmljJgCLmamWatEycW42X0icgA685
+f6lzEBRxQ59iob5i3D+3zBlpc2P2RfYD1Rqpo+Lo3xK2h/DuThLWdkhs/AK7h4kLuIiuM4yW0TVw
+XYjhAgg8biv94n9Jw6F7Pf50qgmwtiRMgu/Awx+pBeFVIgBhFaVLW9bIf9apoXCdJqGNfOAVSeNe
+GHjj5IpOpWUG24H6p2c80iE5vrTnmwpffTTQmtdxHHjBS1NZBkxTJ0PXKQiByVGvjJvodcrki0FH
+u9hp6a2cQwGWkhiV9Ub6d6dsKH6JSAvCeW8mKfl+2k391ROrqu1d6B/qOu0Hfoz5CmgVJlG1W4X5
+H7GcN8w7yJEa3PfwJU51uROZy0Shj4NyuZzZLESi7FuKAfhCcu74nV4+ffHty9ezN18+f/as29P9
+tnMiSn38bCY62bGW7SzadN6ExUu172knB5M9vh1pnyV83jmRCX1wrFuUHCWPj+FheJB89913n0UT
+LikRNEs5LU+481lPLCU20gRfw4fHHy2Shy0lWi8/fMwD9xQoLTFz1OMDcc3mEHv63edfv/jqafLV
+t198/vr5t98kb7755Tff/uqbCef5vqpvSMLCMAJiJ6jmRr5R1IyEebKuB4PPPv3009HObVH8butt
+My84wxWf5viA7Rl99tlnsDvw/yPaIBp39x6ZqWVZ1knGGyd+cdo37tlXPAS5IxmHxcwW5cUFiHgI
+S9bbTzgDInWJqc7c+zGWLGDDX1fDQ2LgS3w3ZrIwvkbEohsijOx76hFaoKHzGT0d/Ss8Hb755ul3
+L55+8frpl8nT7754+gJR54RRdU/+rHWTerPiUcdn/aNp7iLMCHGez68ztPHkjuCZfnDICoTtCjmq
+GK+0I4ugpqTsYw+8p1gfYe+lJs3SRd1TL4fe94uWmUHmT4anghZnQgs4lTu+TT43ZFhJb17CHiG1
+d9ijHnZjL5PwIGlhq9qLu+StLxW+dTNouZG2vCKQGNHJGgD/9ndBLXTxYBcUDWTLFCt3nZ5NoJsb
+3UffzxoeGnt5cwlSGeNxoL/CpnYYAeIAaLeCHK6cwVTOgLMTg2AxYwPU+yKUD0npTmh4scwv26mC
+f/rVV89fvHr+ahJwLoDGKBFAw3K+wdRasphpsCgUJGTX+IZMuilZZ3U1I1UP5eObqJYVH0IfM1Q4
+iqKCerbdFxU0+zjvlJ9ZXv3Pu0nIxRtLC3Sx0GRc8TPWG+if3lHsuJU+UJmQKewx/v819qqalePp
+cA73xRxn+VvMJ2J1pXLExkOO3XFXBZa5KduVG067IK4vfA3pczcjmko+piGqY1/Sp6lBz8nOGzP2
+5Eh2DqhkChkFpatLmjjKKcO7XyBxr5+/rd3iUzQnebHbE83wUKzWmzujCuoMyPXkXOmUwEiVcxbO
+aTMmCctw7/7HN39qbPCkM1/Wl+/+p9e//CNW8MFfwHWi8qY4IhUYBVIGBmhStSMG4rsoRo2cc/kO
+OBs5RS75ir/fS/nWtR4N4aEyC1Alt8Sw9Oi/RkdHpgdqY/TPI/47VILZioGO4uvK0Y7RcxnowYxH
+vW4iSgy0h7JtMFbWUW9FQ2Hs6qaBlsp8MzApxci/H4Pn2ZKoPeFs2iW6h1dU8im9XZSazYDyfms7
+zdmumZPU9jei3hR27UaRQxdJ1kTx+gYOdMAS7I9RSCGm+3xLzKgNIlIC7C7uJf3+VX1phhX447Bb
+PKY47QAdHxZs5E4CcM1f+czFFdLWdLbN5abko0ym3ikajKUDOvPcvb5tZVYYrkwcNkm97/pvASEt
+Ud4mfzI00tMHMg0tU3RKH2LOAFu8gN8wxDT9jj8xXzYbr2QGuwssSKziLo9PHBmzKm4MRGzmQtPk
+BbbJVIbv0EQeuCtncA0hlctOIlJhZMq7RRcfpJvqutveb/soGN4MTaZIN7+Cboan55HEDpitAfZy
+lJ6OYoP5ZYq8CfgZzO226/4OHHZ/NOKkSZfM4Ritr15AdvHqV2uGFzRQHBpFvKOBt5pdQzT0N06G
+WDSUGd6nF2YClGwDfbqwNmtzp+pfuNcss7DRf04WwGVdoeuXm3DFqUVAVcBm6ZBEeNJxuH0VIjBQ
+lCHanfI4qmnW0XboESKjy9jYPDqSrXgNSwaRfl6bStP89u1dsq7EIWrac8TOqh5Bc9gPLU7W1VA5
+MNUZz7/QtIjwrPacklsTr8eDz134+MSvWUHTQNstlSFCw+pQImXoG/Y9jknTLtUOBAO01WZ73FGm
+Mh2HeC8K2pj21KnoRLalBYkno9tRmO2Qt0ASI8mM7cZY0uNC+a4fymjk99mxB04vJz2r24vl199j
+xvItMrDr+wE6fXI27lANcw0UjffhkR8d1o9DFflE9O7U7h1xTn74bBhJB7lrnaS3mTd5e3WIWk0c
++Pxt7Z3Mq52TAfJ38nAhurMkmJavmvi+2++7khj7UECmzA44dMq4nYzMtx1a1SVt3BDkAeHPO7St
+n64JsOH8ZnHCO+Jr/se7CRwTt9FPR5xFSxcJYtb//OZfo4MCbcG7/+X1H/wbEq8GEskFH1e1rbxK
+r7DEdD3/Fi2/NXvSoqMmdhMhqr1rQZTFzAHYX19vLorzlDO6oZuLm3TsgJLZgBEZvokNIkUCe5D6
+dcDhN9FJ7Zd4Oz0PlJQ7/UDiPaDbMJHijKt8zVWgCBDlsNlfE+gBaYdtj73i/HhvDXF8T4anD9sz
+uWDp/Rf2vdfUrWM0GMxugM9AZAFgqE2iJk9OGIGkRB7D/Cj24eOfmU8pcbJ8atv+4s2rv58AH8dq
+ivkiWTTleyAO6J8LgL5++uXzN19juthVm2wrysxU5lr58ok7kddfPn/J4J8cxz/+i59FP/9z8ymV
+v5hQykotF3lOfMdng995l+VrjCnweV3SfeT/WAIjum7q9yVKy8Zq4V1QivjUCp7Ji29fPf9O7qOp
+GZBjhPAF+T2vC/YyHlGTUaKZr5Lkc4zm2M4xvSqbflrHGeBcZhtcauvghT85NeWUf3JhChrlCXcm
+5aGDsEIxPReF4D20WeOGYdVUrsnlZzsMRA82KRtajlORUSyrtDQcF86H2tBsU+jsEluG4fpSYKmL
+SCUEvzKJA1DenareVaLEtYK4m3eKJtPDsm3CHES2YzQkkk9WL5hPSmbc4ZvquqpvqqfY4OEC6QJ+
+HqaVpo60QWhXT5mMpwJ/kvAHkx4a8NuRJdMgEWs201EPxRgJJRqdUMJL4JXY7xO263fjLhvQ2Rte
+Ls03tqHmO6feuVOngs8GlcZc7rDFonrXN07uMS86N7eB5cTgEyrmlTyj1ikSvSrXIIzNqWihV35g
+NjP2vCu43FSE0pPP+1ADR07DOYaYQXsUwQ0/C20nd2jPm+1g1oQzRIF4ei5Vd9XY2M167urvpJdQ
+nXFPLdOg8G93hyLKEwQI34jl06N7vblnu+XgZX5ujt3xjnz3yTdwAyyZCzbUfNlT7BST9eH4gCEy
+IEWXwzfoFJ0jwUcyLcfS5av7aRb+eggD35sDuR+2+3Kf0i/9FSx2l0jjHfx/2Xu77jaSJFGs/XJ9
+DH/t8bHvwz2+e2uKy0WVBEKkpOnu4QraUaulbnnUkixROz1mc3FBoEhiBaAgFCCS09P7T/xr/OIH
+/wo/+NHHxy/2442vzIzMygJAqXtm77H7zIiFqszIzMjIyMjI+KhbNfF7TCYDEuDugjQiSO1OauNg
+gPlGMvEWEv7XahV6b+L9FqTi//7tf2suH/oAG/2VJjDq9//26P/9Lz/7DEVdDi95CvL8nnw1zk0m
+KqBkVHG1KcsZEhZaVrfYXVJ9ftjb7/66+7mJ94lmxve6d+/c695LsnKC10wUFoZCgoJ40qLMiLOR
+hIY6B/GcnVw66J/Zf/T6m8cv0YLl6AnsLR+6gFfOu1igVXSFSSnR65Gi64zKgi1+sE+JTf+EW0Or
+pQdgC1aruTGTxn7e7f4ahIkJPEs4PVS1zs4L47w0WLaQtqcYvjAHmE8Nl8Ro8KoBc8mi3KHFDt0m
+t2GHvha1wUE8k0fiByshADmyO1JEhm0dXXCAuso0Qmi4RFsdDF8xw7shtJK/pBbRdb+U+P5lJT4x
+LRc80ovNig70CYVgwm7AskhS6CfS5J1U/IbpxYOjR189hMMRzD0G0Cs5Gabcztg6ScoBBMv50sU9
+7JumM4nSx6mJywWG+UGJA4bZa99qbzoS5F07/J6PjVbrJbrNdcyORPNihtlJbDnro35emgwIlDhq
+VFo/RNVdiQrBwfnYN1icr1Rg0CpxvWrZKH8V506fTLpJhik+9QKqJB+kLCL2lrN7LsZxdMECXYJg
+ctKTlKDoJI1k8ebVkydfv33V6vF/RCYmuoRushouxnP2+AkWeyu7UyyHd/Bt373tju7wothTULrV
+BZx66I7ZhhIBZn6+GEyxf6OCrw3F+341N62a2Bvkljgfz7utPwDJon8HYBHeQknFfKpyWhBdQ2Fa
+fzZ8loBblhLxAZngTvLqD0ffvnyhOUX/5e9a5Nwt+ShqA9kj6WivGFTXezILewLc8IaWmmvnoW85
+FekjeG7MQiB9EMpLcPziYA7kVNKaDhboW8h8NN7Z1rMXb44ePX9+52s44X3zzbMX35gJdf+1juyw
+BRvCvPAyWJLnaNqn5jHeGXldozODnYYWj7U6bO2R2xylNhkbXU0TRvGWacCnq2U5N6OmaH5CCwop
+ANl0Vq0y66OvmRu3yu4p3iqR1G4+b+0EXBArd4SH+iU5EIB4TusGacuQu2uOYDwi7V7AXpdlwD9d
+8N22xyRgp6XEwOSHK4GBKIEueREng8vBNWIac2zB8ROFar0XWX82og/YfoBy8W77bDUhT6mEORM7
+CrcSxckEc8UV4Qmm63Gf6Kd3AK0tVjMTj/4G1P83kn8PCMkdJIvhRZn8DVrAEgein/tM4WbLpjsa
+G1xP8hUfiCCKY4c1jRGtK8xogaOr7GqiqJyIFXZqA84Gw+WuawrsHXgjND1sJeItJlwdY+FeAney
+IlrSJgjPXjxpm+SCnB95jgGIcHEgn+HQuWwrEuGbuW9cAecC81hW7B2FVQ3F4rPRfzwdoBUN0NVj
+M208tDZ+kDVhKY6qtJvuAlXoP87PGlwG6tCAPS/tjIKIC8VC5IxeTWdB7T9XYhR6Y++hmHXVkBC6
+wux8M2mArqqTHV8RTF8k3wLmjTM1RYoweeQ4z6iBue6S2IO4ry6L7MbimYpjruZbLi8z5zajbM1/
+H7yNNYN2q1pcsdl5K3RLHmVIAmYIddMjlzYbc/vEEu5xA3faQT43voEmAXk+N/KK9CgjF8VT0sxT
+Ehz8iaMHth8Y+btdXq60r44d9nTmPhs20QoLLe6+5DMhlUtbL1Nz9t3xVhGfCETsoagJS9LmEctz
+wnf388OE7m3v4Ic7bO9krEDwMC4nBzqQHx/ePUkeJNndTvK5Xgp0Zh8vs4NI6gtZoFqkcey0pU54
+z6hgcMizoPcOTHoJb8PoRVZ7pnTYDacE14Du12CF4ZH8ki1H9evguYQrtQ6Sv8r7v377b82xkK+6
+2MiJ7pGAEJbv/93R//avPvuszu1CN1JXG5OdGPR+xVfwj8xHPuYLQ/TfZtGyzfYQtwI2Fa3ejVbS
+Kx9fbJHDh9jqtDqXO0Wsdbx/0pTx0Fge9AFhxdU2KiBJjbSu3fTB8emifAebqrlVQitxjI+/u381
+eoiqzeiZSfrqrkLgkDeyI1jHR8+UH8FTjI+HSalJW3JGv8KUj3HMkccHJodhQCDMTPhdTFklpTfm
+vVyf+N40Kd4m0GE0I6DoZNmZdfGxJMt76Lr0V89mo+JqQ9Yu22rNE2y9hqrea1S/c89HBTuyZHne
+JVafbUiySTdIayYh2jfJx4WnMJI5y+FwtUhGHD1PMQNREZAoGs9SOCz71rtuTOcNFO7SByCCPkxr
+mXu5V2uJXrUuOAGpvyMiHnlfRCYvjmdvKQ1JREQac0dVZVb7MI2peO1tYANwMRzPTEudnDbJcLtK
+HibZvU6yL8yrxrHMXQJ2VDhJlYopmcVGHxMKQgH8E04RBy+wuVhY/XYvVXtGA+sGYBaSYeHuBQZK
+8DsQH11PdmLU9BLHmE8GS0StTjCc/hN00DpLN/RnVlxu3R81OvXWJyHq8/vk7V+vb+r9r47+9zts
+NYBm79wkZpYnAwJU5wqe2TaUwwSwoYjlM5XNxWESGD16c9RtUVgKOaBIsqdEYx0P52RRTBngG88a
+A/Qn3rQTG4zhhty0WWtUrd+zzVyvmUwj770p4AS4XM4P79yBE23V/ScS67rl4vzOuKpWxcH933wh
+l6ZX8wUtmfSrspy8nKNp+VfjGT+8nQ0W1/z4fDA9HQ3w6dnZkyt69fV4qAMZyFnl+bhaosSFJb5h
+JUe5kBp/QIt9fHjMwb7oEW3XalDQcwy/vlhN8c+bJf2yN7D0bnXKB0IqB/wu3hf8erQCoUsM4/vV
+crrkERuV8dfFGfUEN2d55uhgNMoC5TVqvcKYlvVWHq3OzackfYUiMz48LanLv8d8bYw2+jkmK530
+NcofdVBHi2u+eKdeL66fcs40aR2ogSARlbinp0BYdVBProohzQGdo/EJJoG69AqGSdOMad54Nji3
+psEQ0kSfjebxfob8X+hmbYABSTjhy5nkP8OVx0Sk0HujyjQfuRMyx1V/QKFu5gsKblM32iE7YitM
+2R5wqzVACH97QK77gYC/Rb/UHR9H5RmQV4sxEdyyU1EoWB72MqvIYJ9H599vDTnYLoKUPpIr0LIX
+lCWQBRJHa5DpVey7XprWTJwHeJfReBdLZXRcvp6GJ8nOItLEgj12lERBd6/SOmzGAAiRwMm6uFou
+iXeq8ZLu2sj36ZmBDWc9gho5dkqVLv1F76ZcnzUFs4eePyOHSPAHra1dZeJQKpeJkb/Wa0KNrTbf
+WZq5DcO4T6INEUl54yXHRyr2KBwkjLVu4ZjSOZ1z5Kh9kvNfYXaQZDRmUQvBd5Pkzer8HHYh1Bkd
+xuDhKRWvO2rBE3VmafkIPUKi2Nvj3z3yhMqNlw+G0SjPzooZRoTui+E3zoyOAYLODgsRWP0DB7/e
+7gxkc8kZ+oq2a31I7FwVTnWrCJcShlrnZ/slKzSBCxFSHiugdV4fhjLGFB2Sb/u1+5BESlBgxNG8
+/cNMeVNwCIP9E1Q+pUny4IEx3GfzAW2GofuNQNiETrlXk18am78aKKazdCw1V961oZFt/NVSSxpt
+Xyw5NHTQ9qzwqT38c3zw+eGJnh982WqhxhcFg762zcM1/tV4+XKRAFX+SbY0efl9SW//0X/7CLgc
+vP1b9fb5m4vx2RLfPnigXr+2rx8+VK8fjQjAbfUK5Ap8tadefYd3qvDulnr39fgDvrqjXj2dlOXC
+vNcfviuplV316sl7fNPrqVcvyiW//ZV++5zH4r15Qq90qW94aN4bKvVQl3pVXtIw9DieVfhqXHmv
+oCv8FrmG/jKj1zO/1/yW9bQpmhuuUG6sTa0AxXK7XnOzD0hA8OmfvfdvzUz4b82UwVtsyzhfh/yf
+WxwV/8D83u2QthBuhuIbiFftk2IwRVaGdz3uIkgdSSUcX8POydwl2DAN/6K/rqrxYOM9SAz9fGFg
+B+2PJmhpwvvAJVpKzNpLTngzsBYVftD3rlasrZNY/I31iWXwXC7QUFsrHdwX0Ivf7pprlUE2LKVD
+RRfPbtmwjOpQrDTToK6zYk9YW/M/1RZZOHMnotEpvDi/XM535VgnrPkIFJ//Yyx0sg36QOrG6Nlp
+vqXiU7AHVfo/M/oWLg5yx1dORQJysB2srzVOhwOmSwz+KJbfJLjm2mTcjJ2J3Yh+mI27lyJRpHVB
+2FaRwukDdbD21C0PUwalGqSl1UfCdpLtoiEECC9DLCABUkIwMr0MCInfD7+G9CExILun5SiYQ9WE
+SPE+8BcD6+QWWCVHCNTQks9BfDtjPv7LlbBRBJJLhwq1YNSR6e6C/fngc8VhzJFBi6d+lpOwwImu
+Rx3t9lWjai2XR4mZ2tjADtbT8o6k+ypR6FjhwNCoA6gv2o5HzBiJit6LjEn5u41GkTsDqx3DU2ZU
+Lp423CAiZBdrOEow26L5sC6l07mWDYuzJTmQTuddfPY+9D3o9ManCaYF/OD7bGIkdUyr0C/pHviP
+43lGLZTzinvQ5djpKI+FsRmontcwvYk1LE3kQbSWfnU9PS0n7C5vZb7jcu4O3idr+Dl7rDqn1RAP
+toFtIuTFxxSYfNuV0aedEwWAPk0MdEO9InsS6pTrwkbOH66Rj9k7O0nQsZ6ihe2xUBtLT83sp20w
+jbhdZyAdWYjSl/iFzSlqr1pxg2CKo/zMhFH+lNu/eiubluLaFdPS/IiOmHSRKLkPmi/d2Fm3VkGR
+nu6F12Red+uM3J74i26h/HG2Z22sQBbOhtmKSs3bYFJJUaPUW1ymi/wJhaiXi+ihNggryBwNOAld
+C0g7vG8H41qzfTLHEjCN4qSNftdI0DYgBroN0Qg3kZC4yzA2cAwp7kTyD/1uONinWZrc5g2Ijve6
+n2iZk+bpR8yZaPhl0ujcpgMIcARjJD1zojump26cfQtCQw7NL2MzYIAF8+CP3PSCWG29gbVCiaqr
++XlBqvA8X+cBsx0DxoeeP8RtpZktmOYNFh/e2Zi1N56VoVixpfRAVbu+DEG7g1+fXzUD4JQtylgn
+JgJw0TglhbRvpIC8QQy4mQxQG1He+vjtv7b3f4xs/Avv97W9Xk/gX4ReHztXOJWYixg85pn0IOAb
+n8o4DSUmldT2Wv3mXYN+/6jnFGunySEB/0lDEa+M2qZDKQln1NuICULQPLkPRRcIvM9rNWVX0P2z
+Eu8sAwYfiJaz6thUQ29E11YImQdj9jFTJ1/Xda90dJYlWwXllzEYkd8fixWTRjgIovfL4kca7avD
+cNXbFcCmR7H58rEagIG6pu3Qy7UJ03EI3ibnmcwRxlEn/wl06MHYCuNYOP05yDC9JTi+KZ68ihvQ
+w1bUn4Kc0N91DWreXY6qnwk1H4+bLZCDA+Jv5KAPg+iYiAsh3CZpDNZIZvbhOqv2G/AbDpvjkW/Y
+eskF2bRHnsi/4EZ769as+hl3Qyc+A9J+mP24iyjAp5+0qD7fQmvdKBBDaQrvE7m723Y/Ri23WEgR
+wcV1kXosC2OTb7WEdHJx7402Ma3Preq7VabJw6dOrIrp/DHKRQHAbt+BtGINjwQ5aNBSD6ekjrZY
+oDtcXvHJ9nk5GOXN3fWVuQQ7QFwg7PK7qHSB7QabaG39doVRxGATgFgXgnVJ2nLDcEydP5MQTGcu
+Dwk/46KtYcst3C6vXUJdfMHeQP0W3u18EpjtJnInoZwR5moAP1IySDRMpExbTLzNtwTGlCuYiw5F
+1BgPl/1+m8IvR9a9Em1+JmrBbvdNn39JogkbCu8V/O/qfiGi0vTK1ljCfMsLzG02ll962xDGSDdy
+hitWlRdlTlLWKSASWzDCt7Bql8M0N6xEsTMRnlODnbc2K5RV8/kWLifMLeLWuD+7fjyGc9XfCOLH
+5zOHePihhkQ7gI96ftWAe6i9YdfodrtEY84EqQH7Ih2T+QVKE3W1m90SszWMjl1Eerpvxm2ksc6w
+nPTLs7OqWPr13PtcB+ntcyHprCBUKsJRB31WTPwlvzeb+tHcn1hPIlYEtm8na1lk1I6gRskR+4E6
+Y9TU8Qvrg3RTrffp239Tt4m3ORt3jv7X/4bdAIyDPblSQOWCDR5HsCONKamkH5HdT//MaZ9VMMH5
+dSvmUEcpFzw7/Wk5g8P5HJPOGet89Wobs/9PifxOZkgcnbU5rDs3G4nhzpkF+TNaR6Rxih1elONh
+UfWydFFQjEeOLs8WFvhMh7m0KfaWTZfoatuY8d+9/PpJQ6scMT7F5BXLRTlxE6Vsr5ZliVEg29SB
+NoaTwznGO7JYcShoet3WLidVxDOEA6lQGBG2uEWbAol9p2Arw1dtB4YN0VjbsA+5qCt5Iq9jLVLq
+Y5v+AROiCpW0ai03NYvmZ41UMCsbCGFDyk0mklk5MO4FPDFfP3n1+snjR5hzqHi/GsOaxQAs0FXf
+znddfygYAacagM6ZX9G+tUJi4k7euC+hW+sbxL81/KNfNvW5m2UOPL/WLN6E/p76RmDsZsahZ/GP
+/4FiRbn8BfSzuyhLShqSpbYD22VEkGZqmS/V+rY2u7VCdn7JJSzymaZH22BJc7L4DeCphGO2i31N
+eEHlKBX6csYcunWjlvussUXbSb4qlxfJ/8AO66h/ePzKOK9/3t1nSyG08EQHKA7AMh28K2pukzuK
+EnhUJp81lJ+YOEA1z8lGt7o2emK1Ec91S76a1/w9ijdJznrojhgxdYijxEzFr+wMuZr9CYhW4sJY
+ZVPPnnNKhGr3r6yWZKI/nBSDGS5m1ipOu6vZSKlQYKhyBlRO1sZFEta6LyVHAzAq1twNXM2pNKFe
+nbLWk52Ulg8O4Gszld9CAe2jAnOA+xMnh4ZO4/Flv0NwuNTlYDHrD07L1bI/HVcYAKVvKUSh0yCM
+vxGnh374rCfz+EZTta6MAf80liHukaWWOYw4XgNhRpx8JYzd1NhebpMFRJpu6pWZAJPGu26d4uNz
+UUzLD0XGyIxkMUYUSiod66u4bMoTzl7OetNEGxmBJDHAdzAwHUWmlTSlooHkaDiYPgQ3VxBvKJsi
+d2aPEsFIdQlDY6PQCXivXY8uTdLij0cZxdmHOesLKIsRD2MmHwBFjNJpTiigKNqGj2ekIEDzGbwR
+llv53G/InfgoLcpYB/nnrlMkA2NQFBiw4RB7VNFQcjnvmQZ7qtWe3Ph7d4R4jkHRHydE9aUWgsWU
+i4Ww/JqM3k34qvngvED2RrM5GiwHyWo2wcmVSJfAXa9NZrYk2/vwIY+Zm+GdoUkGYtrGuDh5njxM
+vty/9SVtJ2rYJveQgfwguRs3StPQ8Aa5/XXsfAJSz2yIsb865DqVQj9TXMBVUbRPYqaA7Nfzz0GX
+o2PTvY4LCQ2M1Ec7hq4TyqE4U6cgOGHIOPRHsOHmdhMeE7LZBjhs8CFBC3ChETSUuUULueCJo2Rh
+s6JcVQ2A2rvtyixsjknZTZ5Uw8GcdvRpgpC68RCghD/4tyvu3hk64iTp7m6aR5BNB1ZjAFc30evp
+tRddsMtisBiVlzO9ZmNwaIPTAIQNnIHkWV0EbPLnZj58utCdiIgNVnJ+zsHBrUTn5KUJRRIk3zwT
+fUoCdwmFdbwIAc2RBgzwsPT63X8TLCrP49u8rR/WnUXlQOZCAYsEG/jAqVsyCfbjy6vrB0HbqIkB
+iiHw0DfdKS5k4ZhAvuFBMl2rhkrN6h2fz+DANUrXRZsJOpEaJQpnI54OriVlBsZ9wJFiJrqWJwlU
+y1GxWHCqiCz9/aPXL569+OYwQctFD/jtVnMGgNOC3Ywjp3ZBAaqxVkh3zWNPOY4cbA8jDC2Ho5DT
+wdj5iK2rn2FjGMyVQuAZjrf38u9zSgfcatxCjZ1u/Uvr/d+8/StDrHMUToCNvN89+qsWpx+sVqfT
+8dJ6HJt8jFVdFUAeEIkBASUWH8ZDCfptlVkd0m3JkXi1kN0VM4fi3JroEASkOyuWjIur6WQxR2Mr
+Knc7Se/wmzv8GXNU64/4Gz79zNkNtVKh72kVzJDbSskUqLZEwdAmBUPbaMFMxcYMhkYLdtxmhRAq
+LoBU2ydhksMKg75xmT9hoEuKuIKhSS0m6xPTeMLv96fQlTEHAjRqBuMVLSE3i+mcguKyHZ8q35V1
+kIXnfpFWbDeQ7WCUjcPaac8Ukdxkpq3uUYGNDzAAxaTI2pe321rB7A4Mfs4+mFR+kbXNrPKkFgtV
+v5yMiD9ge4tuf3nJ7ELrgKAjRZ+ZSDw6voaTRYPTN41SeBNFePLsf11PCBHS/nanKNxxw+SRXqva
+OTraKxD93mX7OpQCLXovAaZfA3NrRs7vXpl1eRh1Qbd/Lcqr6/GIM1nQjyzHwDyvsHCWMhdMO6p7
+2tqFAQKr4YtJuSyC313kEx0DPV+zZailQy1getJDutqk/ESuiZ+PHhEpMv3mFvu4zerdExssQHBx
+2BQAEYMfqohSVjZh7jkZ23ikb4AlFItXCC4iKKg6MHlj1HM21BNBVb0mRHPdnNd+5VGvQUG/Wk2n
+A8pQ5+PEjS780m1gLL8SIQHkitCzsmWnJgRmGjGMliSaBarQlpW+Ow66wOmnqgK2jB6F/+HYDuG2
+SJRKaAHGm/pZ/sJx0NVBmOsv2ize+GUpIxe3UnFzdRjXRnYVzQlRjLeQvLPxgoOy1tojNHAoT8HP
+NjfVJlTb3E+yZrMV0C+MCD0uquO9gxP6jSt/Ug5jV9l+qpum9nDVuEAaF8CQCE+LInACXF5yCI9x
+CRsLj/f3iNZFxie5cRkJIYeDWZYGP9nyMnDTw/YvuwaAO+sG1pIsROKJP9gcHKtT8xXldaHtxY3Z
+nGwwmpR2q2Rv76GQEQaq83hb3nr/t2//O8yhBiMzKKDqi/fto//lNl+Jtr4FgQSkWKOj5swIRoON
+EbOlZkX6DIo/KjnVWkFWNXUvOr++906i3Xi66v0TjCt3j688nfLXiSlXy05yek1c53I8u3e3jx4x
+Q8zmU9lsKkEEM5JMqHB62BgglkHYtxHYNgXHuvsFOpq1TK6k0RiOFJT4IgvFLcBZWXXOhrPlpMNZ
+6lkpi8JeL6H3QMnD5SQ76Ejp7tGzl4+/+f2zF2/+p076w/7+fnrrS1EaFqgX61yOR5Rrj+F1V7M5
+LMoMpHD4L5WI6XmCUXQ1c5fKCdVu2b3IcXL6kMUOrl5VaDgcc2u7cKnOUTJ0kNxJnj56/vyrR49/
+p2aG24ITVhaGJX788vnb7168Aan6y31hlf7Ot5N8//33dGS75DQ1iddjOn3CMfa0PF9VlFK1XSXV
+YDY+u4aT0Ol4qRk9d+RBcn/f51ymg1/uaywLdn2kMuOuYbrV4n6uqGHSwPcL0kKN2EvlFDjqJU3U
+ADrep8BMGa8NKCdJbznWArAa5AXE+uDDZFVdeHGv0LKM4nfVgiKxsO6Ep1YQc6e70JFKAQ40bbOc
+KyNV6tESY+PpoAMVHv/oW62+t3Z/ZdeuZS/dMQrB11k9FJDVtx63f7g6OD3eraZt4JrDckRMC/8C
+L4F2TvIkoh0gKPXXDGt/2s6Fhh69ePMMVfgMskBtS2WOtqxodqkVHFyOmtQKR1vjNGuGCdUOZAQ+
+zZ1ylNBaliBGMyE/O75yMcvxPQC7QvQenKzT1ghkP00VVF9SyNFe8mOGWDlMnr58/eSb1y/fvvi6
+//tvnx096US0q5yxJqoNye4ddHIPyusnX3eiOtpFJDErg7gbgPjm9ZMnL2IdAdmlmDUAuRcD8qda
+x3aS6wITKTVAuR9A+er52whKAMppmDPKwfh1BEa9I5jie7WYT5qgfL4BiiBpJxleD5pw8kUAo3GG
+Ly/0GdsH8pttgdBqigJRHnRLkvoNIXIiQGQ0YQOebI7EHPjqIJw/9XS1Zy+OnsACP/qDLfjm6Ov+
+y7dHr94e9b999OLr50+g5b2DA+/7k9evX77Wn+96xrvCYh039bshYW16yTfF8s1y9C39zEK469Zp
+MwSv556ChFhYxXUew/ZXTopnGHaQYeXdSyugV60QYZmr/7fJ/tX+mVIrvLHgjoDzOa8Ghit+DW5D
+p/iRKDsjn8TLsXt3v/j8y8A62ilVKN7bIZUJgiDpgHAM48TPv361XAt1+xHYwceEjBpUu9Hi7huU
+o3eZaO4kgOOo7GMGodU8o4T1h560Jhog/NJJ2rxHtPP6rpH8oIdK6W8CaenoyevvoCZsAe3Ranra
+rtfAnXyjCYqAFoc1ADZbtq2RVHAS8xLC9tU2ghqR7HQC8mrv3j7e5ox6sCMwo+4BYxdu2wP2HNem
+Ix/tAdsVZtgD7kkcrQcMkNlSD9hYvO5X1O59aPc1tHsf2v2G2r0P7f6B271/r7EutHsf2n3F7d6H
+dh9ju/eh3d9Tu/eb2kV21DtAu1+824bGTkFueNf7NWZnw2B1vS+EdlgcHOHpGm90E3MetZ59jeHi
+nCBoD8Fi9VbMQHaBNzpE5lqB0EWbJDgNIcRs13pGgjRH8qvls5fZNgHcXT1glV1hmeUqCJumzhN4
+sEE64uXiKNeH7K+clO/HuHTwidZkGtpJSbeIkklhzaUtHs1DGKlWXuNuZR5BDDNOLrKOzSc4uqSr
+5dnel2kApi/Ne4pUNrpeTSZrTxNeaRgq8xaU7aPsJmgXlvESmDNl2HFkJscRITN79PDpyAr0XsOH
+MZ79s0juTlAPTcM5HKjpvYxW9x1V+7XjSeCab2JJv7us25bgJ7k3lWy+wtuavDT+AdVIEtpuxbmL
+pV+HbGKVxdxyoal3l8fk7huJrlMNjUGd3weukEej0tmZZDzwUQFnUkWQQ3WoRNQr5sOLwQLKjZeW
+s1gClN8BLpGhWBKNchVNwT5Jq4M7HtrPSw6ttiwlRJtkscMz+wCjz5Etvk0drmrTDa3k7JuNxi5d
+HsodCCJPHvSSersoNuBQm4MmUf7by8FsmdxNbid3byFAWEcTjJZDQg1Wb4DO9cfdootPrr6gOb/1
+Ymsg5r8aAF0n2dPQ9pK7DUCoVtZcLU/u3EkyvymfUF8knwgAUUjkQB+TW8mLVui4U4vbhnWENGnr
+m+RrLXvNvK1BWMNMBViFsWgYsY66cWSN9bQL5ZiTYibVeLmSSCNsxgR0uCjLKccKmbFFk4UO9Iwk
+TlZyHR/aHOS28XA1wVy6Zzh0WAfVmBfFYCkZfy0gyiSW9pPUM2SGRbgQY41qPnDpe1ipiaiUDuDl
+tSSLxPG3Aqs4Xm+39eCtMskn8sM6Lm9bZDoFlL9lke6bg3ETK3KMTG5lOcAmqsPrrApeH8ZywiiF
+FtXMSAnN20fUoprvLuArlq9x8WAvxl0y3FYICn2WfFTkBsBbl+v8FvKUBgL/bhkLtq+OMRZCNGLf
+29kY1WBPZvTvuqsc+JfloQI3Paq1x/tPmndHBX8YVMPxOGI0V+9V2B9Vwh6rzNQTUcgm1mu3a1NP
+db2b/lAQohSayFX0HY+qxoHVbYOLQjWpqPEw6kHaIB3VZYXhYIaV0HRJbLz2aFngAgYZ2d7GpNE+
+6lXRNDpanfEB6gvtUDq0C1uH43Uos2hQCBiNz87uIgTrc2jA7SlwCl2uwsNkP+J/KNf7wLZuubL2
+LPp71LTKsV7Oo/7xVJk+/wvhFFpJU0vptT0bubFy6BOVRIGjVf8URxgojPaf7tfKi1bPVYvZHr+7
+7M7LedbG0zOsY32ZEYXXpN1bB3tRfATo10++rsvkE91jWMY3B4sK2/VwSUtyc8Ck+V0PmbUuHwn6
+Txtx05Qmz0AMSWb/i/qs3UzZeIM97z/C3S6gZou+wxtjTSk4Dfe0eg9PiRdROlF/pwXsR6NmNVOT
+biTYXxQsKKR+xYU6dNbwubTXjo8H8uzo0R8zT15pclAmW/6aMkZ1JKM2XXd4LrBYLQ48J1cLL/y4
+lL8ToZ6ptlu14uYKZCohd4fyFVPc0XfRHpqbxSG5KEmW89/LDfiQ22htuumo3XKoaw6PXT16/Dsa
+dI/X7D7dcqFLB2lhasXfPkl08QM8ZqA6x1ywzpYD2FBJwdsNaxOf0bXvNtQmFlmrDlwp8Rq/31Ad
+9oNaZbpe0pW/CEvYvcaU+NIHP67IThzOYWdj0wDaOqzFJCASbZZnIwFCqK1X9bF6EK0awa2CEeL2
+7noYCsMKSIjh++uBLCJoCPH8xX5YIsTzl9FGQmwzUX/78vURWnbSCukO+9UFesuTKQ6xvccvX77+
+OpPPb8iwBlNuKUfYM0w3WGEWz+Os/T3slQSzIY5B1v6DLXGimnnz3aPnzwFbj4+2b+t5cbbc2NxR
+Od9Y5jXqCzaW+qpcLstptPePX7548/L5k/6bx0gz/a/ePn365DVMy9OX249mdPlm/EcUjwjjjb0Y
+XT5eLapy8aqsSIu3sYKST9sdyxm7v19Xp1owc8TB2olZ06XvBlfj6WrKlbxhnDCZ9bXg7cgNjZAo
+quliVkzu3e3qUvV6GCTUGKMd24F8jSM5iZReFBWWwG3TlGXGbbcq7zTwDvpSz1zSr5eRhRMXIJrH
+1lBhHbD4gHkQwVSerIUTQcVXL18+d3Mjtd4MkYl9tTo7KxZ4yIEK7k60ec4aam+CvnZ4m8P+cPFX
+L5H7vc6al2B+srEjTfhRhBI5+ik5i3G1hg04AWpNP6z0KWM7vV4UZxkCz2uXF/hWaRqixpYfdfSV
+scSHrLPfrE4rtHxeJhiHjYQwtiscLS9AfkZt7SUqb+jOgVgWSKqDeaVA4HFd1KUoBP+AQY5XFZmA
+JcV0vrxmjSfIa6NxBYLodTeGhS5zzu4fOt7P75O95KDVep+9/a/RxHdSnnfROREaep8f/Z//2Wef
+xV24vpZLZsDj77l4Vn/VLPuLkTGigONX1eKY1NSQ9BqrcPC4i7oyd4YTwg+qXXJ668clbUpCuDsy
+FvS2iY4GevugY/ukcqf2YVob4ZryYuM7mI8RqRmZRYghsyABXg3fTYoPxQRv9o31tD4G7bAdJwom
+07JaTq5hAb16BgKTGD+jZfjd7v07Mm1Vd37drhLjZSpLagcplQQolCuVm4IxOlHqKNclMgfI6xkw
+w5yXKrg/1IICB+pGFEUrSTrXPeuTd67KC989G+NFpG2SDE32DgKzH6p9WE9oo6GGx9phub6dHrYT
+zQBDfY6rHBwA0mXC323zwcRtGAQ7NYtMbuK2xqSeADPuUyPUN/jQ6t4yJMl4v1slGcz4kKIUkEcn
+hzXODFFaOnVxSLKQYN0jrhFLu+Yhd77OtaoHcVqnS2B+Hb9KNdPpDD+AbOfFkMIYnZG5hW3dj96n
+ErdC0cXgkk7ytjTTygLWl2MgPkJr+iCKDLKoLQdFY2GsIaeh9yFJ6GIDShy/WvUQhN7Sqs+3g8N9
+AwqRV3FYtpQatHGIMolY2yq2ci1A0or2TPl67OqcrOmkrZY+YCugh2lsegUo26D1aR0D4Fxbo888
+pnA2m4jhC613YJnFIvPuBaBEFzZRSVIPfHLIIahq78s0YtQj/TKPx4d7Bye+rZEP52+Q3HCz3AKY
+jQbRtrXQ5xdZed7owk9YpEDIUzgV9/vpFr5Zqm0kNRAtPxzvn3yM19UOyB6nxWhE4USsF3ulE4Oa
+FnD/LDD0VbLz5b3fHPz6YF232mY47fAGrD7lQVXGSUuC0l7wiqdQQBQDPDNFHUtjpWJEmKkLKAyW
+eY7daimOA4Y/GQ/Hy0xeowvNsjgvF9c9AdepEXgPfX6lPHVRHRslvqf5Ggb4XBTnY6h93Qs7Y/gG
+hvORuxHftg0oxRQ2QIBqKEgylQOG/f7W2xbKgVfTyXkxe3/7aPDv2L9L6O2MbNJmFEcFrWjIbGsx
+HkzGf8TfUI0t5ZbwUJnDfNU6vZbQBRWliDURDFhFjH5g2TBPLkpoc5G8WxTvUPSQnxgqrVgAElZX
+SbHqJnf393/TGD0TTUJbrZhL7MMe+sTuK5F0lVURwc19ZlV8duUrio0N4BXFmZZCyJiiEdWvuqpM
+VjetQkB5yy3uxn6Z3sidsvykXFj0ZFMPY5hbsrr4roB9CF9leEryRHExKrTSeBBdXwzVjg8PKCBc
+u9+OJl71+EOQ9VM06ljddmjTlbUtKNoi2P8HcnbSEWUH57jf26vgvrxQ2yUaY0kpJUOwvacywJMy
+Nx4b9U6uIH/8qXaJgAeD8fDdNe+EgcRgqh63YaVgiTZGZsIHBZ68SWHO2LRPwrvTQCUzVSfvOFD6
+zoFtRd2kYrGqRnXwztpdD86zCTACmX2JWIlAvNubhlNcQywE6a8wo9V8hMHnTEiEphPhLUqnEQNZ
+reZ4BT8452NYbgPyZn6QBWpW5oWeaRwuGINq2S3JNcc3s+Tg3FDMlj1xXJBzH3oxOjCtGtfgQUnV
+uzr9mW8w+ob4oVwWSnbwbCL2mQZA3nW5uWuzucrSNGej2Ik3yPjB12z+PEdCUF0juNXOxw92F7hQ
+hFMnu6OHNgcv9I4tSNEG1C3eXowFte07EGuEtjoJkDEnZG+rZdw+TFwwlLYme/iCVGA+6GUGnySU
+7E/2JvJb2IOQvuH/muvfcIIQStO8dBK6BiAdjHhL3mCmdjC0LlYfJRQ1kzfNmUGUjAJfZhZ7xiVC
+YQW6KyO19Onwoo+WCsfGk+IYtrGD3Pn7OXGhPegMTk8XncFwUc6up53BaIRRgDuAgEmx7AzgfNs5
+7ZyOys7p+LxDDgkdJ7C1T0Hgevd+VS6LDuag7gAkYKfLctYZDijcQWdYoNDYGWJULpwQ+GeiIcBP
+irkD76foutAZjTojEAtGZ7POaLyA/3/ojODnslNMOySJ6tp8ZQAdPStn+M9i2qHDGb66OOhc3O1c
+3Otc3O9c/Lpz8XkHgwV0ENEaxLgzpiqd8fS8M57NV8sORhV9dzrqTAan0JNJcY60MBl3aPTIRlHU
+UyCmg3lnOli8XxVFB8aw6mCYoA4HzYHRzkpAy6zkzs9K7qCuPyur4WI8X3ZkwUCdcs6hijocNaIz
+74Do2nnfqTpSVFUHIsRa1RROeR0gnxl6kI/fFfinhJ5Wy+sJ/Fidwv/nHTIB19WXNHPLUQdVRjTh
+y7OyXHZAJl4SxtiCdrnoLJedVWc16VxN5x4RDGBB4j88CYTMi0UHNU2j4qqDSZ6nnWoAlT4MFlwv
+71YgS8OBr9POyfP0RFiaXH9hj7femsJjF1J5J7lm2/wu3sx7KmDz3xWsjit3IOtT1Oh2zPRCb7cI
+ObdS2GJw6XcTBNZ/WlVLdA8vr9iWdjiYmRvNZGAlOj4SG2tbCpfGR14OOjmChQtnFdQCSvzBcrUE
+2jTx7iKoAMjQlVDBym9ZgIQH0/HofhSOBBgaqqrHcMT7wEVQ+czhimQcHP5rneWHZb77HVR8ux+K
+p1IgjpjxpTHy8D8NB8OLwpfKXGYJyjD2409wbkVCGMFhldVM5ZkZTjnzq3GXKIbAyDhPubZMl1GN
+Yp5DZfWinryRvZ/sENm9xvzACLL4S9T6yK8lNXyQccPIeH4EcJwavALAaMpwcoLBYYF2xavnDi7F
+ivNb2dlxEicWdRJBs9aL2remNg7vxwDmJFR4/a64jqgPcAKA7YiYTwIptDxdlKG8XG/v3Ft0BoiV
+XzokO0RjkWo4jV4aN9XfRpDR7/NyqYvEDk1QVtVsRaBlNLWtlnNqkRN9coYRP9FMhu+ayGAB7TpR
+jFiMPwxkUexQWL4P5XhEs38BM0/G+wgKBTqSA1VPeZnyC8GuzzV2lOksfomZ/rLZWmZkLCymHYSQ
+K8ZA+5CFNXlG2VW8TxJQB+RQfO95VsmajzKCY6lwEtxULGCWiymCgK+RMw0vPSyjOocipriIWUHT
+7xu+X9u32hqDGsI9DFUJLzn2dI4SYAZ308gq84B4VsEhLrCDPi7gjVHDyoJb4vnLnlppsJHzQ00D
+oPik8bfkVYJSAFm+S1N5s502hlu7DdJzOwGh4FYANg+O/REwrgu3e5qzNzUILT3ASEoPoTlM7sQd
+7LgDJpuJENryiLGlzJVxssNidUFENBANFqZMaVdrgKPdbb5uBHfMAAyC1yFmL46YOtNDSHLGFri3
+Y2iJGqD3OdItnB/KWcO0R2fijkyEaTv0doyz5hqYhw4lDpTFjlrRaiyxhb1jNZ6FKupFPkCGRWcs
+WjdB4jtToFvBTq/mcNLsSmqq1DIUGvZAZ33bGduoqPbC2cCKa7dAc9DFfG+qg104CFi3UcxIReI4
+LYMttRJBP13+yqpZC3n3hGIP9EM1JEVYUxxKg4k53rqrmXZNXas0I/W7nfoNOTXdwf0sAofTOOAW
+T/m+RL7eTLC2XrCLciq0PKZebie7VS/drdK2UsoQGIVzO1ExYmZpnoDZaaH9FmSrMUddIGkNAFCU
+cy031pN7YTOoWGDu0KXf9evMLS6YpEvHJ2svtwG6rLTjq9vtQ0DHbTje8TmPzke2Q+a0dxJtBbcW
+Ksq4RA4Br/4OthumYNuSsdOTTLWOm1nUBkSMOaXgmJdxBCf09j0FqetDsViMR8BpqY8iwxaVxq1W
+RLoDgte67J+/VNOSetbp0sxpMHZEhHY5JDNhRKuXEqVfatWNIk8XpF8h9QIrBFAzcrFgVQkpVkiN
+0I6K6W3Wy5Bqoa11B+LFzii6QXcGCWq9EtF6JaeJUV8kp6MyOR2fw8kgQZ0VR/QanaEFVkIFIj1s
+jxMYXEKdTN6djhJSHCXvE4wWN50nrKBJSEGDrrJ0IYQutTFYrLTBOUONeGKUMslymawSVKCY4QPZ
+5iefxHPp1odFu0/guVw26skfRGbVBE/KfkVuRukfjMJr+GZr0sR6EBHXCOVc8SYrrAEQ17KqIImc
+0GAKV3N14SwSPVGMm/+AHSFfOsSHv0W96t+18w7+eGDfTuy7h/bdOb0LIf2t/Q5EKJXSdmpfzsuq
+Vi3QqKBfdXHWXxRXFOm1a5JAAqA/mX1fjaf7rrgG7quFrL4o2MxRfopKi4abGAZyTEW6HKl932PF
+fY5BbhRerEMLdjk4uohbFceIGH8oZoHWzd/eBIy7Y80M4GgnHUq6sEbl0s4M0nWq1bJTLJQBIuD7
+ztv/ysTiX6xms2Lxfu/of+5xJH5gQeOhTQWE7FySe2Bs12UJHxLiyKgllxgAFFU1MNxk09MxEqoE
+F4VnG0DV2OWN7GfjafQ6TC1ibygyP+TUj0r9PhhP2pZ2DilCfUcppt+N5/oz/lafuQPlgosdJvq3
+KlZcjZcaCv7mzz+1WjutHemvZNSjXCPVz50cgH2/7A/K5NhL2UBi0pyPcLTiPDSVzkkWZszEK+De
+GG+ZvCQBLtfAC53NUvIBYEqEF0mFxk+UrWG5mt8hLNgmk+xFb5/jQoBQ0E1hoX9MYG4Hr7cpQrct
+amy3XN3a7rBVvO6RkfpYnJMI1vRShe/mfLueil/FupYKNddsY99B+ajbpqex8wL1wh2U5tY0Dc9V
+Ix+4GtbInf2AK/Ymg+npaJBcHSZXFlG5Krgo0IxFpVUg6AaB2jqxFpTcUIE//2ketW1srL1bhQBA
+PLY/VOR6c+jFv8eHtoTwaYX6ADeo6aTQ1xhkm3+45EiHhzB/h9gf+Dev91cCWO/f7d49q5LdvS8l
+yos3Wzg7FrmUaryL6dw60nSQnk6C/ZMNbJD4yGQ84jxoJs3eG/zBKfbybVMoRSB1Ta6mPizMzF5j
+v4A+om9Boy092rYtHWRnEi/v0VBZHqMposwuQimiMBLw1VIli6onajP1JuU54yiYSU7Rxs+ud/zW
+/OqIvRmtDYbX0I2e7Y/ea+hSmwYTrw19k1DGFo6yMoY1vijerwqiV7PguWLaly8uf6kqbcMW41hM
+SSU+02ucHPmUmU7PxdiW/HmZl5kGiQBS6rItDZ/p2ggeT1pWaTPHXAdVMdJshYoaJtTQAr6WBrwW
+NlQz5MhVOypZeTgzxsWAExnjYcbU5V2XrUFPi2Im2RSlPIVVQgtsNNBhyUYQbfLYnJfJ4HJwXZ+K
+EOluPv0QxPTVNqH04Da3GqFiu2SHBCy2cucABhMWMp3GYOG4a6DkY5ZvTt0WX5druUhxBRJFWNlv
+iQbfp4xaUHdVZfzGGePzb+KWZB9iqdVRh398lAqcLeIwFjfM2MbKRS+c1dAOxORJ3LssF6OYkiYt
+UEuELT+hf9DDPPXNr6VtFBPnYeMGinykDY4Sd/zu2atXT75el9vXVMXi9P8Wi5fPPKGbERtfSrzZ
+OJ6ExgkjY+Imofypppl6XDVeXamhs+85xqzWtCRuDVk15hpWPeoxaGyyh/9YVof5bfzkfHWeL3D4
+T08IxuZ8wkg+fbIHR3H2Q9FnZR/KvdhSJ/EoLGzGFrYg6B407K+B4rXuLWiZjZv1xphHwpcuFCQe
+1BAkVMUJZRAYKXRQXSHdp9F0yxpqF5Vwyt8KaLL7xPTsprXFCvx0dNr9anT6P67GSyPPbEVSLqOj
+6L/TYMrx7g1r8BQL8Rn9jyPCjoXhTcdj6AN5RrKce8gQNBVKP7hbPfzHij6msjM8eU1ZQO9YZPFG
+MVBOQ7MPImK4w/wOWxSiJYWtSG67fNvdNSklxKXTbhGxQLnQDvdUXwgdWse68kz14JBcPuGV45q8
+FeuaeptNp8W0lIN+GtyOX1D0LDsRKpDugJY9nuazfM2VcmM0G5uTFweXRYPZ/K64Pi2hm89wKS1W
+82VDuNJI3YZGHbqNU5Y3NTo/ER7/JteRe104KM/dyDdavtooL9x0zVMO9j8kf8sixCuUjPR1RT5X
+5uvd7gSY5Bg22bAVvjt53dbW0Dsvhd0FdOChq8fLlmHnNv9KNQHZCrtFJ6FZQ+pQaYJtfGwVMkhp
+bXElMzL2Qbaqs1khD7h0t+rS/+hweNzWrhftE0wt7x0Swj7gNSZCOd6tThLKRmQSZLqonX5MnuP2
+eNQ+6eBDdV2ZuOP45gNKE/Ca8xHiDVY7EtPWsJivBlXxmnc0a+XW2s6msMHMXVGiyhgl1isrvfOZ
+7FjmEtf8jrmbcP022XOFqQdXS45lWaMGgkokkcdgmvYArutpCN2m8FKDwWGsIf8oq7G9NAA/OmqW
+hZQ+WM0opw1dUxq4D1OZAT4sIYdZYOLn5XWmdS0AZVjyVUfKJeXEx6LrNtUk2RxXE8Fym3pGBpV+
+/tZUcLGh0ITvYp1vgqhJ+MaHVCPoxRc7RQSiH0tRAlU2FRIu7M5i9CTmA3LZPXkaSMybd8U1yulV
+kx05iQWm0EkebLBamNFaLf3eDdtizs5TbAHZTdsnxzWNxkMxSolOfFuqrzzTNaGF6NLBK/2gYTqv
+NMpzdA8QSIWNLRtq8s8srk3yTKZk34tBLfqb6iJlIV2IL2KyMG6H8DSFU+bgfO2OtwET4zNHZLQE
+hn4G2Eh3+ICMG7lk9DNTE7H9QV9UJRGy2ptTFrNstbGhvm6pP7+2dLAxvkrNIqGnk96LBnx5Sp98
+FRZM8mu3MK3CLKInq/9n1lbHYL6TOG5OgkJDRbO6e07XbFNw2P64TVHZfH9F11CkCpazpvgEZYNJ
+VWKkWY7Bz8inmCVGCYSzXQERsFxyUVwTk827BnbThhvqEP1BbcYB9IVzEfYyIGk79H3cyikiti/E
+c96p8R8phzwJ4WMxoU7GgSGp1VnzQ0uDGVCE8QLEEjTaUC7E0IUSXZuJijmEPpqWj4fsS+uF0D7E
+66DVYGLHjueIAaMfKSTZgz/JFCNyoV0HRrEtyNTTRJjxTyc0GhgXHkiK7nkXV+QgcdbQ49lFsSAb
+eao/UADZ8be7hW7ZwwGdJvceihUA7hJQZrC4Ni4P5D08mbitBChGQyCT5kWFZrTlcDzArknwccaB
+O+f5PVNbk3n0eka1LcEMJpeD68qe02SD6Vgu1nH8NWjHcTx58lox582BTaBOOU8roy2qodOyIysE
+anDSvzatLfRHwRWFf80Sa6OyVGipcPfDIOmFM6cPkroJur2BNmDpDdmQjAJWSuR4ndf28mI8vEhm
+RTHCGJHBnFUXkmQlOKXKQqQAPWTMPZTrI29u6HZ6CVDLdzggGEdCXjNktA4j8oEqScU8ttZL57zo
+W1tHB3rgmCIc4eyxTGYcHh/WjyaKP3QSfXBTVKOYLs8fibpN3Ldhc5WZdAqE5gsiwxXrbK+R/Jqm
+L3RlaUKxEkVRBO0LDzKKUflZLnwtqFUX2e/dvlKKBCoS3k9jUuDHSJS1EBtrlG6ue8genFqx+gg5
+TQ01lEJ0D2DsuI2kbApFwtxfQpQjNbyRqW3PPUFN9zqPhT43B1ALC+8TSheSPpKzRrX6mFs1S0aB
+aZRtbQl1HSdgXgf0aJduXaiw0I32k3XIbVbotMX3yF6xdZVmn63GC4OxPhTsz0zMKqe5tkZjfudq
+HGGNrBSRhUTh5EtDDawgFGw27Hk3YyNW0ygPsEHWPOMaN4qtGXv9PG1ElAY2z3oSPnTzJAq35lc3
+2S+8ecMtY1LMeLC93Wr9vlHbOzjtiUVb3rCF1JaDNtxaG4FvzTZgAu9tocWy6hgPBufm40TqxrXU
+mUnUHEorNJ4bJWxRIacIEorJfGlAdnh0lLACMDlG2lVbrfE3DYdJ8bliOxlpmkH8pzQGP/6kHEJG
+I/vNZsyT3x3shLqXNSMCBjEYorhqS5qA2mx5KLW63obD74xVVAeKjyv2AoYu+LAuBirLdCX36mFi
+Hc+gpKmpAR9F8ORpPI75NDfAbyBEO88VvAwjuY9SCnHUI+ZvMDa643Y4ROumPJkMluSJ2tXICX3k
+XF49i9S2selUjtc7Utz2faYmtHEudTQkqdmBuc+N9YMtqdf5vJzTNa69gw8IyXShp3oQuGRxP+wU
+4OHF9IqZkaEbnQjFxyCTWp2+PEKtjRe7YQfqu8NKMEVbNoykNaOQZB6kMN3WzLtqWTO8ps5LHhl/
+pBYXETW1HUvU5kDNhjV90LdHzCU8euk3ISCkr8qe46Ik5ydCTRIKHq5FRO425zRXtwJ6VQZ0xRPk
+mogF1qnRpj9aWHbYTeszq4cbDdSzZg5xCYeL1blwOriRwbH1iURZiRmwsClRMSpGfcfGUfCQYsJt
++EcXhzO8GCD5xcQGN4hleQlPVVYDHSVbU1pkqFqdbWfG3C3K3tKrgzo+tPs5FcojmRnrXueNM27H
+YkyPmpYb7a6sD+Vga8mA8h9yjkPpXUKoNRsU7rF7gWu6Yf9WpwftfhiXq2py7YPvav4em1+zWNWM
+fuxcStYKtPIg71/MI4dZn0LtHXASvp8e0caFklLIIPyV3WgVjM5JsDcJ0vHcF7MMVjlnQWCklrNb
+ULWrK+axLtTJJqCaw5PoRThuP8aar5xskccGe8P2bdF7OHvvEK+pxyGRJOGJbnuzvME0gE1SgvNP
+TQ9gDEzcecyZOHlWqFKALVBt6Z6Dp456XsW12oiwvhzh8DRnjxy4KxqbSre9ir6AFslWdkfaMmEb
+GyjbswZDqLx+ltwBTvQJ/0F91H8lL/nEYWmCTTXR4QAlEKJeYFxGhw0irZH4w4pZeJ2FzCksRMDH
+wKdUhBDeUiun4dTKYhNDh02BTjm7nRjrKk4g56Zq460DnH3E0wJmBPBfhGFobFe7kTPVdmHMGTBZ
+v9DT9tYrtXRyKpSkH6XcD+Pm0PjQhjqvx2/o1IPccXfsIY61WFk4azZWOWYgvwB2NK4uUG+d3HuH
+WUTPYNHh9jLBmEESuEhYZCUVMerGYsTHJLIXlqbU1R5d9lMUUfKIXdyZjYfiEtLv8z0FdbptQLdN
+t5+SJqup1+QEzfsDX39ETjfmWhaVXCCDGPrZ0O6Tq/Eyq1lPRZpF2XE6LUZ404EWBOeLwZQ8mqoE
+ln9CRIJRX6o77JczLqp8Aw3bfNGwOKvSE5obaLPW0SiBS+A67DbzALlHEiNq7HTmtAs4SHxFaxLn
+DgZH6aUGeCNYbzK5hA/Lxfj8vMAsPwrRFgcX41EQ2o6jdj4xLbda2KK7PIei+I37h3rYjPCTagUE
+vOV5R6shYmXIQ2zIHD60i/q0mwDjXxaHwKbaFZyVV2igRqBOyZoZ6WUlOR0M3eB9FimLx2dyt0UJ
+Gwqgk0VhbrXgjYT7MuYknJAaqJxYnE1KXXHq3em4IqdIwqvYQFXGfnRUoDxQzIZAK11MemI6xMbt
+2ADXI/c4CYoF1B1wyC0Qb5gCYpXw79suoIsMl+AZoCXEMxDlsUwyvP6KCV8W49wMVwu8kZxc762f
+pe9klpipHg4W56aVQ4oCjg4CVBxXgL2Xo8zJlFLY3tmFaRL8/9g02IQytkiyOhRxWRvdGJ3CrASb
+DkXyN29h/zz0co0Wo1e7S2bAnfg2bzqeiVGe9oRR4R+4GpCcRHrGiBekmgHivBifY0Cxft/Y9fVR
+ATWz98xs5oCrIMEAk5Q5K2m7JtvJnkp1QixVm7mIzCj3u7LIhBpFqrCkfgNsGqdkiwPM59suPqCR
+G8fHGiJEEF9BgLiiY0FVN50EFkiYASYogHJtMvmMPgamat7g0mG5moxUBmy2BrXdkhuDKYcQA1Ga
+J6A6lgLWA8jhs8lvEoG0xCpTovSYu4opZllsqxlsB9KrzkdrGwoTgPAX3DZsEWOE1o06FtoKpI9w
+tWyzpqdK2SKvFODkgQBqQrHQ7O6CCFbT6S6pot+vxqhfHldiipvFzWMspUgX9LLJPQEbEf2++/av
+jNe2Yafv7xy932W/7Wo1p9kmdTZ8vkPeAdZUnaVoMXPo1ly2Ga4Kbf5JrssbPZIXqxl1r+3Z2Hgu
+ybDUVuiXPIIO9FJTIXXuyRKBV/tIkFMyXuOTj1FSIHvmk/p1gvueBK4TvwlviGxBRfeJ9GQuitmw
+CjoPkgkZl4gPqGBSWdenvN1mdtfM2dVcbRW0fTjnAZBeAKSqkDhdhthyU8DCATEZCfADBwJ8YFOE
+CzqFc6w9kXMVCCFTTm1hnAa6IJwM0JeIewcdRpPmrtnPUZv0Q0rZQH/AGBCpP77Kqmyw+yBqI1rL
+mSSZgkpWMOjSDaSqfrFczg/v3BEKLhfnd1BbXy3vGGLuYkzcVLlq3gT5NKcOlR0RQ+VoBTQhWz7R
+AA/CDMROiOrswFw6sCGT3aLrU8Zblp4gBeZluFMBHUrPaKGKAGed+k28BSZubE4Buy5Xku6CCJvc
+GWFXYekkMp4uCWEfPQPbBGEgc1xCfY/+tbdv34tUIW35IsRHnIOu1EGIOsYvZJI92frKCHCB2GaN
+BR1LDCQ5hta9gexkhsk189ZVTVb63ghLjJfvgPpk/ZodPHKeEg22H/+Fo73wNRD+CW7SXTixpnvp
+i3IykhvFBjtvz5CaUuFY2Hr75h6fluWk8W4aP3JlbtUc9Gfl7I8FRl6lwz6DUEmTBxXgxsR5j/iT
+LEMPBVKJOgCYZGRVhNVrKkk95r7UyVs380LyPZBi3kfGi2e9yjJIhiZ1jg9OOskbkhRJ2Mub0nkf
+p0ma3Ep0xW55dgaUntxO7ufwT/qPaeckVtuocFPVziGaOuIUiJiabhP7kHsinoF2zXT5NKM0jOVs
+cp3dsj09vHviQ1fMIkupO8RtV6zsA2kL2MOCfZB/mKWNttIp/rNbrS2yWzV/3NVUL71FEwOMDMqx
+hvDUmTcba5sTFMfo9/NBSp6pkEQpWnS7rNqHBo9lBeQNdOPeUMKZNm+K8NatWH7lYiYhgzNXtVRA
+RwSsLYaRsWrBat2+SeGlo6tuEULPh4L/GEA19eDIi3oVW7BG+8i8I2jIXkIrbMYjgHJ1zAlVbXJG
+9N34vRi9MPf2umYtRLXmxQtjvogW8pc8E5e+xKHI2WFQqXpAM+k6ubSN+iSXhDTRSRj6KI/CiS/n
+EI24D6RGq9ccYc13vkfFrEg3pwVfUbDBiNKRU0iodWA8hoDiD15YoVhghCnZ/98cvX724psk3dp9
+IiVrVs4RhZtQMZiRitBpvLppvhn1tMshhvOmeRaPzEZQPhXW8jLemLRuEk18TduyUv3w587yMGRs
+RlLgQH9+BKkGUUNWEmfLIRLzqvrAUSwczKJGdfjJcATK3cck0Q5tUcQWFIsfrjMStXLFfBG7a7XR
+GbbArylrieowQe925eCrCUdKYwdbrdZvhfRJjwssm3JFbhc1pOZkxtKkAHxqMlBGo0UhE6Eza8+X
+VAVGm0+MLi2iKd81QlSDxsSWCyZTtBzsFIWFWHhvaJ1VBnI2pEtPegNCJaIjEg5lfk0bEUVD4WeF
+qAgEVUaHdKi34qO67oFl1BWKTtXgguFqGrUvIxjVZGyLMc2vkOCDe8NwIvjElB6/eHn0+u2LE6JF
+D04wMRvcO/t9zixDZnPmyKK8PT+JDncwCOJySec24vWov8DArKRUMNaaJQgQq5k5pFerId70tAIb
+CqGdesG21/ScDiRqSF05V/s5PU0wrya3wh3UiZhdCqTAWYVHbExZWSYYLE8mIynI5bhKrtAlIDib
+QAsS24N9+pGfMevA2wN236sPJ69BWWNar+7t1VxlYSyS1nYBQRx5qTN+Hqd9HcoDp8V+a+TYpkDs
+CNeK+E7wTfzNO3xY89NV6xq6TdqdzGkiaykYtyGhTTPs9Zv1SfrKNDK1cUcPf343920TexKUYNu1
+gEc3YYM1NmeP/DnN2yb+F5nvuHC1DZasa/RW3sJbLKvNcnUwMWvIopk1tzYA1UY5O8ZU+/S6FtyS
+L/7xctzqH28WrmtNTKJYlK61kbKunAvkFf1DcKIRt2LRviwY51P5Pf3z6tGbN2mAB1KUBrgw7OEO
+X1B/TIzS5giiskKW5LkErzF4rzpA7ujkCwYT9k5efpqR6cwQHmiOQoryAGsu9vOgaCSS5bfPXhwd
+kvFAe2/RlotVOmDBNsu+mGkdiLkPYHSEllCVOjntxM8kwrzZnw46UvnRVRE9Elo1ii+K/AVFcLFe
+BSsVQ9L2BYW1iWLX6Cr3ycrC+j4Ki/F+E1g4i2dPY8A4H3ETrA6HMi5GsBemTx89e47BaJoaqN5E
+GxDbiBuO/MlHdZbusNsmPJ7rLIZ2wyJewNf+8rKrwr1S3jGW7xQZpb6ZKoXTJ+tyD5qCyDFexig3
+sLnNNh3HldJJWD1p1u5lLLAwtOAHaamVcIsOn1y6+IBFqXC0Me41LysvIK3vWIidtu4j1OlkN5uj
+fjDXo95E9Nzk1TZjsdzYDuhqzYiubjwkuQHreXte86DT781iQDc2HHkeSTJDQlQ99IYHKLEncLmx
+8RC4YaULAm2gn7UI9IL8IALDYKoageG3nx+BuA3a6FZMPD4GtBYx1B16Bzpnm86FWISn6m3PZYkE
+QffRJUqMhQqrFT/Gxk9a/n1MoHfeUeYK9h1ZbSYPH+KVS7UcAY/qJGhADTD3puPKmGQkvvYFf0mK
+cxOKx9jzMBamaBSdYvcUj2roNWb0FAkuM4A9HaxJ1y4mVGeoCxsR764y4eDGldKhjZTRHzBGBmqj
+Q1kK/XB6/L0e2Ut8adC4n9zkgOXfA6xQ6U7iud2MtAMbfPGc16iCuMH7WzaVpM9ksTCq5zu1SZ4y
+7AYXzTt4QWXbF7RMNCvfsJ9tkrxcnCxPQmrL+zYNz5B3Dak7TroCsgfpyFUMhStfsKoLQOmuk+hI
+SupYJfaemLVPSzEC1AHFLQDyzBDaCASsILfJGRtq9OJ0paUoLhloMPzg7H0VlMTbr9N6lrnZCo70
+xrHZRgFgVoU7X6Q1j3tzyC9OmpWKDScci/Omo5Tlgfhw/JvDkw3cH6PvJse7Iwz6d7g7OozEbrcx
+3NeMBdD/fv/tXxtbLF5ceNwFdJMTxRwm5P3B0f/z9WefWRMrZVpFSbNQd8PpMITPLIy5HllTdWDN
+LlFZhrzjvJhx0XqTq+V4Yira+1Z7VuwkX/Gd0iNTgThoq4UbzvJiUa7OLyinir59gh4WV9qSfbUo
+1sYBqCWVuRrKvakkLqPn5WnzPbh1RJdIAKb1fxgX9cTG+JISJXGeWbG7fXaWPGb3YuvIUZ4RAPRr
+hpP94+wqZ8+RAkvB2ffq2sSUGgAmRNtFOY757VU3SY7gp4RGskDJrJmqS1a7x0jdYvPGt8KnK8y9
+fMt05RZWe0xZgJFHuWPoAi0vk9NiUl5iYzaFKuwrK5sh+FJsWD/gwLkX5E5X70/mj/4xoL40aGBs
+o45FhheBdCXItBe9YjXIBvc01jPElPGp4FbJony1LNF0eUi2ToBlDP6E8BDcyyXlB54XJg8HWZMb
+Le5ANQaQoBQSMkWPco3gehAa1DhEhwWHFpkvM31EDh+AgDmvnESqYniMjIoAUB7aft91RLCAsBTO
+OX2WmMPWp7Lfx7JoqowOuIy40GBZCsGGB+UYq9Dnr67NrReRqjQEkFXj48oCm5ZGKX42HvrznVxe
+lJXqCoYLJ4SHsywrZgYH/RWaJFvfp4on2HRksICv5EKBbvjWXIqzgvLQFDGR4f9TujMnC8MOLDq6
+lGAjdbrDSibocUf5YGyzDIj6jy3Y7veSrNvtduiatZPAI+sI0YxE7MVHZVGhQdzZeIbOltcSoUda
+QAPfOETKc4MAO2aeZgl94OF04NngCBOiXC/J5wGFbI3Lx0g+wLooIgKgeTxCJxJ2q9BJlM2qmgDN
+IGP+UEyuGcNR8sI8ehhkbUFGaUBegxlZswO9zk3+ZFn2htRpS1nSqjsLJruDECQRHw5CkSCPEY0E
+yY9VZi2M6oBBIXRUNjLBI2suBBTI9hrTXiSTGb7NFmW5pK4RpjvJLbz9DYKDmw0B475wxOxa7Vp4
+Fl7AVCH8ZCtRAfsrEJylsEXNutjWvjObrWyxcQwQtkxN3gCKacEsD98vXl2ia/zKvYrdmCkJrJZR
+FZut8XEORZhcjIFDw4q/JjQxB8atQ0NZFLS+0FdobqrzNLVRj2z2yXWWBGa+pJN6FA7/a6wUpbrK
+Hq8gkNeGA9Hhk4lLPelrpkUQ644rh+nDMOwjitKmIIxjuij9Galr+6WSTwgqWgJ+ryXXZTOM48dU
+8LGfMBP7KnUfd80aO2ltaWxiLwTwc4jSY53ZLiA8i0G9NF2nxM2iAFnZvc3q6y73tXrB2KIX3Oq+
+zg3YBLeoj9CVQcajaqiz+kU5HroUxh6lhDQSXm1J3TVGpHq4vo4Vz21Snw7eB1EoUgLDKjeT1Q6e
+FU5RJ0ouSniZh/xa6sbAYlK3rP33bcGc7UgH+PX2gabau1W2u8jbNja8N1znzestz1yUGwF1DCdm
+CZKjCn4gjQH8gZquILJgX1kG35SPdgiXIQWkcT0uJiNdseXeQmnrOf7MnNpQUsxIWrbHjUd8IINt
+oCg4voM4jp3B1s1XJCIfW8NxdQIzUQKVhXJfTlomtNMimuZT8uGaata6r15hB10MJ3vkDIh4Mn64
+zliWul01b2hiVAYyQPeJrZT5kxmW72LQWTE6bz/A7j1sx7Y2ZtWbCg85NYMcdlUvHsObb+hkhXZA
+pLNDHoyva7fqJq/EgrJvsyKzZsPqnXxvatHtHCZXEgMlXxtyLjwXa7KovYKp466TlYcOxaaS665m
+N6QCinGG54AbEMF3JO1l7DqDL94sp8vsWM/oSb6JJKCr6yeZW9l+gmVer4ph/88ysRbp6PbfX2OC
+KCu2rn7JwjnOLcd5AWPJPLYjANU+hph/Yf05hHlgcMEmTlCVqwWFeWjv0h0hla2y3OgprLU0cnJr
+477RTYIRD22TQYZaXtxe/jNPRZT/Qevc+y2H/h/3UNfvEN5YSVhSU43HWffaQ0MscLDzcfCTav9L
+RtCavZDzeb+wo8q5c1wslOrYWN4sqRDUOrbNXlYmIOaUImJtsZil6FYjEXbsSyYRs2FivLFBkgLE
+qNz4Lu+u9WMo51Vj0Cnf2DsibO9wQJThivV3KLxhYC2KnWL27Sqm5adzp0dAepeLa/kjxuw0khA1
+9La+J92N4qZhblO6II1mAHKo1tr1EL8+r/daM2s27eMOQdGB+5PijBLeqlcLDLGPzVvQN06rFa7J
+GySVCPrWoxFLPN+PgkLD6TFujDATif+1hknUGUUTs9gkoKlVRR0yC/jRbLTN4oVi2y5cQwJBAPOa
+NxFJZFEprE7bEXGribJ1D+zNbUC7kbVgKUjNemvjClaF800hBiNLrp21k9tJm7atNjvX6e7j9XA7
+t/GNXi62mamXi/9/on6RSQK0rJsjCgCXvKW0G+qyp9drvSuK+YCCcRGeSftfGUUwPM0H6ChGl8Q/
+ys0MiL5AaxhQB9OQLTVTId+cji33DENmLLFc9s9BqVyK/eTMEdj1g6iJevpogbfNMaqqUxarEJyp
+RIS+9HB67jHfgngim/tGCopMlmvUpjVvx5F3s//WE+bNNibXx4/bVvBBb05//k1F8pIJWZvF6ygq
+l9Xw1TiyHLaj/0ejkdB/FsoMt2t7bK4WxJvVaVPFvbUVv1tNmireWlvx6/GHpop31rdYNo5xd23F
+V+VlsWjoanNf43yA5+gvwgiow1FGgF/yWtlGRkDDjENiDNRL34SpqBW7ccFG2Q52vt2RATezka3h
+0QgAoIxEwftL8iUSmmmePl1o5pH9y+JvaqU4VRYm0UFvvq1OwFLW13aYWCHrVB3qQkihSgyMEELe
+/lTlxc12xbAXPX2W/QurQcSUKsIMyF7LT44bYwPNsvGHAeer0IvxbNY+ZFg8/J8i8+cVz9qerD2w
+gnY9sIIfK2HA+ujfcYiaiCwrwWuQ3HyNnzWFpU81//m4x5aDZlM9aTg+fgf+Kh008lcYpNGSK6zs
+jlBHh7eFiGK/Br45lmonNIC41G/62xijQebjds92AmT3Tjum6qidTAbNbLshvoBtrL1b9XarDikh
+pY8d04N8q8YZQgCgge+r6PiLfp2i7Ov4CrGf83itG04r1muvnUwHOTKpCoe38BDWPG1RrFEd1fXY
+BBp0jRrwNdqAsFEDxkYfizK0BVqPstHWOPsopFGl0Qa0xfWH2W6V17WHzGe15hBDg0aO0v6s0Di6
+0Cc2iYbOh/ppw1754fhw7+CkFUHDur1xk/YQ5GmfIf3SF6miZiKcqbsQJh/UQWjdPckOMdX9wg6m
+fp26QdhtY+yoH3eR3PHpJ+I6GNezk0Qu9FgI+kbsm7aQgaTon+cWILoBU2nmprzrQnfWX49tJJKt
+Dud/liv42lzKSLO6+t4bvPapkOwe1mQuoVD+zoTYyCMdNkCmnLOU1hamieOO1ycga5sLlgBXHbwT
+4GQPKd/ftSOCqNxrhrNoatbmcs1VHg6jb4Zgp9OIxfUgWDeb7Z93usO+elGKSM+pvv+FOAApel4X
+e9b3w2ZQpvDe1gKDdD/m0oEcMra6d6CS25iAkHdOlFngl9wrF2UWO5zygD0TeLEPKiA9cR97oIat
+TDt83kDAN1u/GJi403J/3OfW2gsH1UB+uPmsz/wi7gbzZz9U27kfn8+2nHsouc3cf/pGsfFmITaL
+3W4X/2AkoYC7xgyT9ig0MxPX0liqD2iMU+NPIO6KHgLc0ZXVpWQVU9dqK9bD0c3X2DJBEyd++XXW
+S1tYLgGEmOFShPlqK6a/8MYpBPn1uBoOFlvdgkrRf7kkWaNDk0kGp32LAWK5bUZHFqlQdt0dIX2v
+YQBe5rViGCrHjJ/tZiX8islybNoORkvNdmsWai5Am3sZvfnEUws6j3D0oXD9+uf6oBrbuoqbNaZl
+Ja/RDA5B6FhJ8VdJ7EKHP2UjXBivQP/w7sKtZZVgW4cPNFeaddUGv2bXQvSCoN/ZQV4rYPy6n1IB
+RWtCqGTmm1U2Z0NLeU7XwnX6trJcNqp1I3p0WjePH0TVb+vXulvnUs5z0KT3NTfLY3UorFFVPBd5
+fdtV6r3wEGod7Q0FWPdUE+wiMdTQQK1I8zsf/x9IYI9ePUvuJE9mgN9kDsfqZQUvPx4gZzYxE2nl
+XrnZqS4wxQYhUWL8HpqcGhhvPyQBISyB0Ube384VTUjIgvQckM4g0o48RLJlSB9MtOXreVExSR/B
+Y364Pdl7pCgOXooLfQqNGZefkMxuRNqKINm/2UaWVruriTVNKMRQ0471qVmq5+BOs5BIO+S0S0HA
+xpwWalGQwIKcvh7iK7XZwYhMTC4t4m0VJTcejTkLC8XwSpI3q/NzPBuWM+CPEXjoBo5HTeE4ynr/
+tDjDyAAiLOFHtO+GzXxvj3/3YCmNZ3k0I4oMmJ0QJJzqtDrPJHiaY68ei6NvdXcbE2HPUZUNn/cM
+ycAAZbIWSqUgPhT4b3lKwRGWp7rAOhLdMcmC7EpEAGYz5m2a/MpNxDxLEMdGE+ZUZHDyXp527Wks
+72KIZZMM6Ip8vML1DuUjS57TjMedla7CFDYsduHapDNHltpWZGoKpJLZHsd7ltgkAMbP/3Jl5+4T
+5QHEguzAOjaHxOBSVSQdTvuHmUqJTeWO909QqZgmyYMHxlbSbOp5g7CAYFjdqcJQYTYS1poeOjiB
+sBBqXlEzg0lMVKSItn+qOzSLpO0dja/4cHq1PD74XAJFGB8peCkiF0p7f2bhY/2eEdsufkG+HcoG
+rdaYfHdpNlDL0Ua3uTGmczIJGMVp2AWIOMvqrhG/VtGcI5/vuc8X2VXE/2yGTtjtlgvbm6XQTHIL
+oWG3fp3m+htx3Syvv8zOxEL+nPM67wdlzhjcua07BoTd1yXG+L0GG2/t4CVV3vc/Kd5w9/a92/eB
+vCblYIkAmAhh5lLiPn69KzMuV0plxIbGgDTKcl61pRqXgE2sk2Ds/4NOcjf+hTuvm5oOrrJjhAjj
+PqEx3Pf70r4oJpOyfYzfiQouvFbb56t3fHt5QViAb+/vvv1XHKvk/b2j//s/+eyzneTVH46+ffmi
+/+j1N49ffvfq+ZOjJ/2Xv2uhyxwXPKSQvzQ7JkHLYGLTOJLP3SvKfdelSv0+hTHFy+k2kmT7ZB2x
+sk4Xd3PK1lMNgfPTNnp6nbQlpd7eVAI+tls2kq9khuQEohilI0lxe01doHgT/uGsBBRdkjxA0kpL
+CS6SXMttB2+uK9iEKIGkjfM9Zjl4h/Zvk1nJZMlr+fFfOO6UAY91O8lbzGJHHLCTYMJkoLIRx7IE
+LjKcjpDxelBMdZW+rNUKamaSuW5ezlcUyFg6cCuxGYEwxAgm3pKR5MlluXhXtVrv77/9L1x/F8X7
+Xx/9+zuUqkwmPHlFbXwH/P0cAzqdDqrxMMHoMmObEp6jM8CmjsmJaN51GJ2yMj9NQB0XbqclqwUY
+rxqgSvKG6UeSh0g+B3gZd799gnHCaLFOJgNJAFsCL54acQ3dAzAOR1km5WSE0YCm5QdKIbeany8G
+cPgDUmpzjDqv1dxqWo4G50coojSl/glD6fSXg/O7GH/DRViw3+iwtQhtE/hiDBNx4oa3H4vRP4s6
+nNquvVmdSsHMJAx0zJ193CRnohSDPlZ0nR861yu7DfiIIlmHMkbVrGHRiZZMEqpjfYMpV8SV+eZd
+b9ZtDgwcQJSXrZlRkSYmectgnlWYaoB6rO4dDdIoSuAtjclWTVI69lpOUd+RHO9WJ3TMzbhWx7Te
+SdJDaRxxpdo8aXkKJckGyPdJMx5QPZJaPbAVNJ5gyht30LZdUCDzWhAJguJmV3Llbje7mgbFv5Ay
+KuKKrRsRGLxRrYCKVAv1ixluIWt74uPG4Bxm2Rwj7JNoC2vjcsytfSdFoiuW0g1GCf8I16pdj/zg
+VRfMlgsPqfZt47rhcv6JgoY9oFXBTv34wzC2wzRfF5iirs7iFvig11qHRBRiTX9r7Ax4RmOIMAwV
+wCMOMYZfJCaL/8EMD/4oqBy4XKDeCijSAuxGqLgbEoBMy/Q6nJjYlDjQtZnshhO5Nbv1I79kto2O
+wsBtxYEZ4d6W6UdGi2D+oizf4b5YhYlYuHGEfVfyMde3lz7G9sDb5CDCjysgMoJvH8ifLsZ03Vn7
+YPLQW8LJco6XyrCmNLA0jzbUH41RFiT1Q63B6mK1HKG/e/0bYgFefwt/XheTwXVm0YJb9zHsSfNp
+L3D5honuL4pzaLBYEN2hTkGwan4qfCrJ3PeiTC0UU6s2uLAAZXTiR3UPIYUMlRJCmLQkwyXIbbgX
+ePpIzan1bKsg4UQYKCzvHTTmVyBVtUsviFgz4XxMR9pG7m4Tt8rGI/mUR+zyxpUZTjHK9FDy2I3V
+P+DWJboTJv8EY3wORteJA4MbXw/3Po5vu8GQl4duWq6hR4fXdFSLKbC4OZBF044HJG9eWcfGZk3i
+yjv8nqtsGI3UEkmKgTXVhhtO27mP0lCrL3QS2zRlPRupIhxafTfxq8H/0aRhv44UI2Gi7YYl6dUs
+StRCzrNABSMjEG4VtW+1nMzkguIXROi9Wf1m0Xac5fjaeCMCGYU7qi8nkdDqqXq4Ys9Mft1KYFRM
+mkjGYWowGln+Zm4j4YRc4+emjI0VjoWUmdmsWi0KH5KCcXkxnhQBpODqWqUVdI3B0TAM1IHOAPn2
+m4VG5XBSDBa1yt5WZMsoHwLFUBo4ZIQl+iSSr1tUjn41dcD02utfbxR8CxDJ3WRotId1GwN1+QsF
+pp92LBkZ7lzE7s/GV71UUlSkITFgjW7fVdWV+I+fYc2c9+OhTRTdS0G9V1JOMAytDYwxLvPogAuw
+QWqsB2vYS7Mu2NqlA4Y0QLeITvtPOkMLcZ3A5TLSBvMeQ0TzMKJq4PCiZZMjStOS3+ps0gSDBSmj
+csHrfJ23V3RaeE9KiadB1ISNekBpn/mbkyKL2Qc748j9FgEekO57Lk9pF8qPFyV3QEpH9i1aLRuW
+GJQxFw+ddm0D0WvexNvEzoZUS7YZQPFucZoRpa/+cPTkzVH/1fO33zx78SaNxftgHVLfEALAiTVL
+efeWQFMVAId55kvnjZmHSQE3f3cOOz1fMlVGDYdnRgbVZ1gdtMthA9RxOXtRLp/aIMWKRp5R7WYy
+4UycsHZgIxoklzA72jqVPN0pjmOt+azNlHRwEFqdiyyImQlCDxtZIV4g7wiLikiVx18c1uIZSgtR
+HpuolDm1j/WWUBMzngXZNaMGg1aMgNZRE5pFne9iU7Nlq9EzjQ2OD63iOytERf3/RW7yNrmAKVpC
+RYGPL5M4Lqh/bOYoMcuDDvxD4WH+CIyXg7KSyu3g8KS+i2EFShuzN08bvCtd89RHgJVhC9EO2hK2
+hz7PhRceQc3KwzROklDy+F6djm6229sxKAlVCaWzuL9sVObfO1gjPdc7hiNf47tVZ05YIYJRvB7A
+NWcOrPKT7wojgpAdpl9SBuy/7Pb7aCjZ78dYp+0Blw3gxboqBbmjaEOpDtVLSutgjkjwEU5IJrEn
+SyFwPMr8AyYW3RRQlBPNZhNaZqz5ivAmaZ5L13MdmP2l3uB2G0nw0Yw/2Gnr+jopw0rBNSKtgbVp
+y23eqtiGlvsZAI0IKqflYDGiO+zFKmp6uvXGBWORdrbdRrRE5ONVAOHmkt/QXrZwIk7zlbkiMKP4
+ERFWkuVGcwjXjcgndSplGy8rDUcTVTZDVGo4e0tgsnhYsVrMLjJHVJRtMs83Hvotx6BVWSOLRoaA
+K9ytAXOsUyGrtValalQAVOs0AC7Er/wOQn1nth2MXMMqdHuq2SS5q5OQdyilUM83uVywFyP+iZgC
+sdeCERm1x8wMcQvHBwxKq9inkRXq/kGREHBYFwjY5J1uN8Rmw84a6sIqeTy7Zh0qVmwEqhRJTUCb
+smtOmnsjM2IzW0TmJSqxYZrRJYLEPq/VSxAJmJjYk/pdm9r98CLD4/xmdrDfvAQ4MXr9GPsdRn3G
+MAqZRB3muAN2KTkIZhEd88NJXo9vwI30+E+HEzSwjS8buakksWISq3cD/kH7GndTpDD3PmqvREHw
+glPq+vRdKYBgoGwYq6KyCLvvM2cJNwSAwYynOoa/Xjax6PazsxXT3zF2dHkX806IPBno0HfqfBnX
+vRyzPZxsHnOA0WDoah42jpB16upTrXYEd67IibmIsmRo42QnQitwyqRsNZTy2sYoFxsbY9lT3TEx
+sxMTNDtyfyVlzGLwCTS86KBlYDLVyCqUn8GyZWhQhh9i/iYxPaVqHM2o3K/NcdQ5fy7ZOo7Esw5G
+s8uZddjykdJ7qQ7kncS+MsOoEXj6wM4DbOUGT73dxUPc1rnVjh60VgfL0m5WA0uzgVRIL80Wa2ax
+rgS2SDZyKb+QKamF7oaC/CXDXCB1WwDObrDFoU3QZzaCRVFFd7pwRjdka66iqszG+loglQ55SkbB
+haZyNQUWderGlcKkSBiD8czo5Cw6t5AHGKoXeMLRhX0d2zPjUow7nDPbp9CmKsF4QwbteDdCwpaV
+SXuOHau69IilkMTP3b4p3dpi07eCmJG+bTYQw6e4TbJp8QsIsQb3MHJDYmQu/El3o4yRttzbcJOV
+XUlxqGIueBlkpQTY8lIV89CBxqRSBKpYhBwb8IfqI2B5WK5my5Nt0HXFSX1ET2/zxaHZM/QEDbu4
+S8dt22ibcmEGluy8g9j7+M3mC3hDv/bKo356UnVxJwgWiLMAADZvf9SMGHSp8ON8ipMyjZs3zKf8
+yFYjpJdHYEF2YwMfF7RtK3bDaq9xTCmDDJ3CI7gm0sjjsodNwzO80r5w3QSglDyTQ0/Vb0aFhpkj
+VQpC3Gotoh6udc424m23VgtEDWKibPcZ1hULAzUYF0Mx/MAd0l40c9e1LKGe88i2og+pXPliWC9n
+cOVdEwYyHhzCJevdrLikOUob7ukJ2iZ7COtihOnPEOKuUFVC5/uoKQQjXBNI7mK5OVytXZULXLcR
+RMZuIaksoMU+B1kf3RXAtuJWdMn57fHrrRPcpA/cwBMjPdn4+F6iHN8I7VbtmOYk0KBHwDG6nsIj
+iLjvXeuNMCS9PeLZ06Ay1aTv+vBY/RzdcafGmkbkZv0zJaKCfEgmbF+jOhFKgK4Uc1Qx1b3dS5yC
+fYprvXY6jp8dQgJbq/ch2XSojsJ1ubRBFhW7IVid4+oi7eiUC+ne3sMUTcjVKM8we/EkZs9aH/qe
+HroSU1vvP3/7r9H6nHb4vnVyBObw/oujf7/PBvhPx5T7TfktohfySgKXmCMQardZ/6xCmIjjZiLb
+f/LozVG3dYQ5AtlFLpFonYlru5yMuvNrzg69whGyJb8y5TePg2rZUjb8fFlqBuMcNo3jwg0S3qJv
+CB5poeQSq3mq5X8afBhI6B0sY+z2ydbwQZLd7SS/7iR3c+PyhAkTL5bL+eGdO6er86r7T+yWUi7O
+79A968H933zBoQXQiRPJJ0u/KsvJyznmUv5qPOMHChbMj88H09PRAJ+enT25oldfgziVhhqb9Dms
+WMwigSVs7Amp8QdMa4UPkmaCHgHddSivgRfi1xerKf55s6RfVuyjd6tTdpKhckCy8b7g1yPUoIpo
+08dYBjzipyJCf12cUU9wf5Hn10SvNMpiUnCDHOmj3sqj1bn5lKSvcBPFh6cldfn3eFhltNFPmE2C
+jxtlHdTR4pqV6NTrxfVTXm/SekGalvSZ0bnI01OgwTqoJ8AMaA4ovwo+YTAA6iIMk6YZg6rzbLBG
+0WAIaaJPwSKIKS8zI9pQwmfWJZ2py20mIoXeG1Wm+XBWyf1xBeuSlswiC3I3CxchB1KXktL0oO/S
+R2lACH97QK77LafE3bJfSrjHAhyCwUUS2bJTUSgckiNIeZ2FFy7As4iZSOpMVpRYb16U6ZAX2uyo
+EdFJMapeWjPZGg7Qp3t9juxarBMX5uSjQxZI4BMdpYBb/QDIAvYC378ugNFZB1UQpJvCCEiVLv11
+Otkmf1RxNb1hNAH5+/8pR/9ZKb7+5LxpnJXLszM4uEHf+sov/maey75jcujH7KmEHXFF281rPupm
+omKe6pHN25Svx9sUO1pDL7xUDJGINn5rn3b6kNUOXPR6nZNV2uQH79zg1zvBpz/M0m2c4P1R7p/c
+0B8+bfCHT2/kD9/ilAXloj8dzFEXaUPvfzVevlwkQNp/Sjv65fclvf1H/+0jYJXw9m/V2+dvLsZn
+mLAjffBAvX5tXz98qF5jGgR4dzv1ExzAq73US11AVW+lflYCeHVHvXo6KcuFea8/YCICeLerXj15
+j296PfXqRbnkt7/Sb5/zWLw3T+iVLvUND817Q6Ue6lKvyksahh7HswpfjSvvFWZHobdIvPrLjF7P
+/F7zW1Zhpq2fWq0VCp+1qRWgWG7Xa86kWEn/2Xv/1syE/9ZMGbzFtkyUsXAT4RZHxT/wpuG2WVsI
+d1TOW4lOyOeTYjBFfni2msD2CtDOmS0zK8EFnqzbfmvB5ekUKHyQ/molPQjX42GfNzJR/fgSxQ5q
+ndhlhzaTyyIZlZiM/mLwAW/BULkyRptXjI+AhyfuouY768Qef3dWeVn9EO42PB0fzHFzGRtDi83B
+EY16xaGinjhVbeBWJNoU77Axz5HfFgXmjOndhBV5J7tA+0OmBeskvmgcwGMsdLIN+kB0xyN/um0+
+iab0pJ+OPmVZ3vHty+uWEAzH3wGydDhgupyNQGRlmx+SfrXtux27uBmI/AiYKHopEkVal6ZtFSmc
+PlCHdC8a6kO+udc2gLS0+kjYTjxeNDhK8jKkWGq8z4dgvmu2I9SR+jDO42k5iulYZKXzUcAHTuEm
+ox4BEQJ1V56ag4QRhlGHIFGGjUsBpaHs1gMHpxuSuZLMQGr18UjnO69TtRbuo8RMbWxgB+tpeYe5
+H3BroIQVDgyvZYD6ou341wpGEMOP0ftUM8iGTPYxbhHMpEnWaQxjp3MtMXIyHnxL6Xe8D76Wid74
+883z7KftYetqoBoQqfrl3NhXUwvlvOIedIfUKZS1wvzlVM9rmN7EGpYmfM5RzvvV9fS0RFxree64
+nLuT+ckaXu1nxKzjwTawfe6UcEyfmCczc13YyNVD+v+YfbETzffT//R8P2pmP23zuFmONll066wg
+YilYtzH7vVnA5Horm5bd2tXhAmsscPrVSZeugoaSilfr8fFdTPlPHxSd6W54bW53NeCvMG1bsj0f
+Y3WysDH0bCs1IwOhiNQ2StnFZbrIjDhFZr5lHkxiG3RbIO2Ic+NhE9cI90FmTwJmq/yXcepldBLg
+Ho9wEw0Zc0TCBo4hRX2K/EO/mw7qmbFLjGe7TPP0I+ZM9P0yaXQAy7UtCqcA7CX2aHZMT904rxaE
+9uv5iOFlbAYMsGAe/JGbXhBfrTewVrpQddMgqnXayddfsW3FbSk+tj/EbcWSLTjkDRYf3uCYtTee
+laEMsaWoQFWDPH+0Ffj1+VUzgCC9X3y/56JxSgpp32z5ecOef7MNvzaiSG6Srff62kb/MULuL7y5
+xxP5/SXp9bG7iMc7+cBezZ9c7ePPVIZVus7UTGJy9Zt3Dfr9o55TrJ0mhwT8Jw1lJWkxwk0HPlFa
+eWy6HksqaJ48BqMLhNzjwpqyK+j+7ToTXGDwgRw5I2PFvk29ZtsKIfNgbLY0qZOv67pXOjrLiA2b
+1U0wIr8/FitS3Ryk/zz4kUb76lRb9XYFsOlRbL58rAZgoK5pu5Nvh+k4BG+T864GCOOoXf8EOvRg
+bIVxLJz+HGSY3hIc3xRPXsUN6GETm09BTszkuwE1mB3uZ0LNx+NmC+TggPjbeEZ2gWgMwPJkCLfx
+wkjlk6uzar8Bv+GwOR75hq2X4raY9sho6hfcaG/dmlU/427oxOc0yN2kRfX5FurnRoEYSuMOO4/c
+wm27H/ddPjsiuLhSUY9lIXbnTt1HJxf33qgF0/rcqr5bzZk8fOrEOs3sR2kJ4wltWVqxZkjKK3St
+qTcW6A6XV3yyfV4OQncI3V1fK0uwA8QFwi6/i0oX2G6widbWb1cYRQw2AYh1IViXkq6Pl6Wp82cS
+gunM5SHhZ1y0NWy5hdvltUuoiy/Ym2VrTpKfC8x2E7mTPMbY2TqTICruyaJxMLMJBJvV/cawq5Ys
+sG1T/nWSH3+KrXsl2vxM1BJm4fvFiOZT0v1txd233St+6Z1AeB1nARRGV1WLZZDOz6czehNlRVg1
+yPJHliE+BM9KhJgvjJ7+Jj2xf/2hthxqQGw+WrRnCT3PgsKSEFC/Oj749eHe3Ub1gxirCLur4aBm
+tqNw8vNnA/w0nXuMDlR3I8Rgct11JCueH3NrFbAdftVAD1B7w+bEufu05VIDpk1wHZN4r67dsztv
+toafotHTrOzpvnX5XXOdYTnpl2dnVbH067n3qpvFZZ8L+ckDpSKQPvDUynit+L3Z1I/m/sR6ErE6
+sH07WcuJo3YH8RjXmxIJaur4hdVOuqnW+y/f/hvj3o98ejSYlLNiWUzR9L54/5uj/+M//eyznV8l
+d1bV4s7peHanmH0Q9/BWy8RE65Ehz2/fvHz7+vGTN79tcBc4HVTF5/fNrz9Oxqc2H8B07pIbDpds
+yr1FxGRpPzQSct2SJxURfzwb+VGMMOmr+NIMlheRGCamAPnMAlWS5W0adz942EP/gy/y8Jb9ElNE
+LAq2UwK8jjhDxgNG5N3uF0l2eTEeXiRzaIxdOaShPIBExrCcbWKxms3IN628TDD3QlItR4DUhCFd
+DAAOxqcuySZ1eTFYdjdGQNTDNZHaBIeNQnq08u2k3TWT1b45KC8Nlo0/AxwrPneemZekZ1OlD4Hl
+2bItL7YfJWQzHiq8/DH505rFbJiAjOXYwA2iDFX9+bvzms3EWhftRtA+NhsaclFILbOyAqOmcslQ
+FKQkEptuCSGBkdMB4wNgEJmr6dBjX+YhHBtvjMW1O7JfmbdqyuoVccaKBVUN6YpHWTMW43q4bjm1
+jJsLW3KE/LUYEs+1NVgiXxuAJAAlptKih2yKXBrOoI3cHUSErppikjYC8Ekgj/qSBfl0UpNPJ7XG
+5VF+da+T7Hs2UoCtFMerUTcph/lh4v1EcTLM+TcfD99NiuCMoxgxSKPkCw9y43A8TjFdDcc5Tk5x
+C4pUZIgU2rHKcM/ojgqkazSvzHhHoTejgiBkZkvIo6kyuZfDVwQUkwsFHd40eFxXrMXxRv8x3eUM
+crq/KgcRJabwtkJTzmZxncKJk0hfBWAylQUWxQfFhfjbJy+OXv/htxK5RUZGXztWI5W33h++/c8p
+Ew5T2fu/O/q//rXJAESnFdrz5tcwqkOQPebjkc33hB9GxYdiUs5RdZmsluMJUOQSHQ2FwcAmVCVQ
+CdYxuhfiTclk8MfrPUQVgqhWp1K0aiE4EgeAYpLk6KKgPENQcw9XLqaagnFJhiey2z0bQy0k/b2H
+7Hww5VC5Fdr6LsT9IxkO0GkDOlvCIX/hciK1FFSyPbDkjOhttbJhnnxbTjCz1O8WxbtiQuMlIMBa
+7+7v39+7u39wTxJd2TxCmEjvoHu/e/B5u2WcI60zJGMCE0jBBo2bMxq8FLgpdG9ZfUNF+zzRFKaZ
+0zKV5lVtU5XiNwjo7qPJeFCJRJuaEikFZez2zY821wOCMdUE05nzYkCNRO/HthRoH5oWfqIDNXQI
+1kvV+1HcLQdDzK1BJoWTScIi5WKUoGBiphcLtkFYAVDA1ODhEH90ogDmZTW+SqCXs7Jd4YoVumAg
+3HsCQ4+H/KLD9N8GwXY0XrQTKtDHFYNc75DfcnttmS4EMr8+VNPX7qC4NRj+B/bedUuOJDkTG+mP
+dPKclbRHKx390TmxBWEjA8jKBjDkkixO9SwGjZ7Bchpo4cLhsrqYnZUZVRVEVkYiIxNV1Zz5r796
+Az2ZXkGvILebu/ktMguNHg73cHbZyAq/u5ubm5ubfQaPHXM8S438fNYsms2twDOT3Hz4ZPwIxa1p
+cW6EZkdXI5DUQPiawlJ4w8cwXe/regWxqQz7PjdUigsu7TBTKjHCWYGdw58j9xkuMwsjH2eTKYqY
+n8ytY5QNxHwCfdemXR0uYPt667U2+4Gq44ApUNM/WaYHmq12BuId/w9nmbMeSaK7pJWmPyh7pPKP
+OfFIMqly75vFolTHpFcOEuH3EeZSpb5u1+/rObi1lnGpc0yEF5QjlY9K/0Goh+ndHzRvj1JqpExH
+8ll14Omqod1Xejnd56A5UwUFigtafLFsnvF3NxCb+cglq7a/hasDiphlqoxKDjoBHG+vZTb5Umvc
+fVxez8pwrYCNYsrRm4/L3z171l5dGTL7Ftryy27XaqW9siYFCmeK4iGWbJbMk38L/w0LmeqebmG4
++b5iuj9F9wQcjXGADK/4As7zQ77bgbrm6bcvaDohYcd0SsOQNblrSIhP5mcx8YjzeOXeYJIuFpfj
+PKrUM+xwkS6FXcQcep+BYqPsK0E5VBEvCnGZKuLnUEXfSsTgMteay6GKgZdjR1qjMjcZOo9flBGY
+ykyLKocqZwhpdinPh12ZKBfkUGW3y6h0UDbKoUpPfE1p6bVsPT6Ogly6gnVt3UEm5nwq0xWEuTI1
+lOGkJWsISluT357SXjZdPPZVLdMVJDKGmx0oCeEUKVLenMKIdkV7LpgaLIrwX/swT86a2u31cnuF
+GqIykd8lqhJrCLbb1fMy1YJN1GwWQ5QG+0cKcKLKPl3exkxEskOizusf1EFe/3zuLGWkuuEThBGe
+fzD3RJ+WJK9LVCV+Za5alomUQQk/UZVSGB3NJizlJ2p6M7J4fZOZUE7UjAH0U5NMdk70NwPqeZPr
+axN1AQtFWiYKuERNdaCWLjNrQYm6AbjH0vW1jBtQiV6nWnBUzuwDTtT5mw7v8+lRS6JfoKcBTtT5
+DddurkDXkpollxgUEei8MlXEJgaF9OERFQrPDe/ECAuk2D2sz7mSEKLFw0QtUUDE3LNMAZuou5Rd
+iWgZ9Bp4OdX8O+baLFfbzWG73Zh/MCqxBDspm3a32CRibZtipPPt6jwQm2z+8Wy62gCyhWTSAobp
+54tXKRFIleNMmt/ARITlwmKSSUtPXz2jxLKnnMuk5bvNPC4allSZkkW//qrcXdRk8iZofQVIPL/D
+sKmlX3jDiRRT9SjI650qXTNBZpfofVCLyuvLZRPJOLlu5ijIZ2pI5NUn0RRu36t1mVo7STyyuUIi
+7q5ATwHSwVU9XRY3V4svLjdXi8LdB4ikTcIeNI3tmqymdIqsoeaAOL0imK5Xa3oRZvfyQ7oWJqbX
+vdkhXWV/KZqOMp3dpWt+1RkSS21MLsTpwcV00Qb34nuF+YSIAhAkawg6ivl2ZqSdEteihFgGIC6Z
+v2cAqDaDV7ePzVRsm5U5Y34hTBOpVYC7PMRmKhP5xxy06chm0vdy7mSyIDRmM/iSkgymTBbSGTy5
+pN4gFFyZacymB+dVb6GLRCG8WafIxg4rvHq//erVu7dlvgBn8Is8f/26vwhk0EVuOySbfBHK4Ejt
+D9Xgwy/e/U/yIG5V4cfv/rd7oWr3yfjPxo/KwYcv3/1bh+AnBX75DqClMqqCwlcV4OP5h//07t9B
+NaFe68PTt//Xf/uznzmUPf7VAlL4bRch5eHLz3Wz/PmTAx35FbKXqNEtzY8S8e9Lw1AT+MzySIJP
+ozsR6umtBHo7XDXzOD5goN8bHmym3XvIXnzxdfHFty++Ku7PAeBgBd7wqTeb3ga+ff3q2fM3byZv
+n7/+5sXLp2+fFxpoETFlCUXhmMczNlMzR6eM9bJe/PzJ+NWqXn5LfczHoY2aYQjbUbFqAifJTDN8
+Em5qaYv6NSoOH+9V/tmi7erfYBkuWgWYbMk5aomQcHaLx3/OmE9BRiBUXBFeq+LstmjmCurf1Tz4
+8Kt3/7Psjqt2aXgp6iE+PHv7X/53fCsq1Fd5GbpqZ+/ht8B0T0GHPi4KbSfC9DySveJwJaEt6jdD
+SUM1YJM/UU0N1/WHbW2Ro03N8GpEr6OG73//vcr7/fcFVwEj/tggXs1lzc/0IIbWa4vEClER2nlz
+fluQMYrpoX0tamqMSe1CKh4dDdSztm1wLJjEpoqRDlI7QhMeMzUUvyNZdl4vwrK7C5kGAdF5yM9g
+XqPZZrDEXZuBeI7eiPzI1rm2omJ7NHbb4Us/NwAOrJfpnLPLebPmdMzw1BA3rmIzYxe4a6D3s7rY
+Luftsi6m5/DkukGSQTqSiwg+ewrd4iMPwcPWZn8AhX3/PXf8++8JaX0Kyk6obF6TxAmP/efF1Np8
+AMX4kO1YUDqE1/m5GCKbCf4CZgtbJxdR6ceyLchGbiwUTwiBOAWAgas2h+DC4dDG0/kcsWubHyAi
+FE0ZzIOHHkffBwxUOK/XzceaY5jAxA4lcBdM8tEgbeqv8lAANPTlHh+IM4RKD0OegJUJo+Fcbc0S
+wLPtWdcuAIlPPc4WpGkYYY2IoJ3l4V5vLFKeDt9E02kj4mBOWhvEjqTknmChZuvA86uL9EIlRgoK
+CIKGkzh5UN0lwpqatLAbzpF1I5rvS8PSUEZJYpsz9wbYuuHBDEGAsWrG9F3e4lO8IeQNQ9z1mllq
+OvANennwbI7KtLqmcLFmPOY8isKK2PBUQdi6CDeJzY6hyG4rYlo+cIeE/FXxZfE4jZzBMQSxI3GI
+FH+ZLzRL950JEtWdPDqNknfUsGcErE9bdjrLEH+eWMlUmqFdVKheJdGtKCijyQQcwpBPhxuHqoXw
+U2TMqXiQEzW4bXj8RgHBVDkDf9n2XLD7v4CTCAxNv2CeX8yMzHNR94UfisOrU12pYBB8OqaSZtdg
+C+zbHfoRBTRd8+l1TBMQHGKuQzBqmCA3yWSP0i5tbVf1VbtufoAJAb4PRgFkOm0r+dVtwSZ5ghrm
+UYZ2XaE2BOe0vmnMujvB5GuT2VwXP9bLBkwOitt2i5YxZEhzi3aka1yZzhxv1EEjMqFVqYs7xMeV
+fb8xZxZaQMzbDfxWPHpEtq7QOQyXB5zF1nNWy5Bdx9HprSie30wBis9NoyfEWZnqoEUrObNwhqUs
+EJm7uEEcyYrPZOwv8jlYhA2e2lSCJUE6Xc85qe3MZzYVdLMWHPa8gv4hzyc2kh3Dq8N283w8vJEy
+Nth0sa6n81sQnTqwnhryQqP06W1mMu0FPVOHaLiwCkgN1VhT22AndwgifW+lL114tMSnupBs5zn6
+ZY9vsH+RtUrsHZIJUoz2ICzF+Yma6Kwm8rFUl65HrKaQqgOAQIGqjUJjUxetSBALQJRUuZk0e5Yi
+rV8kR0uT6xuCEjWRNRmVzqxCascPD7Ls22u6Un28V0w/tg0b15lBEWh8u+6KRfO+xsABzYyuPl9g
+HvrtmeLa8EeYQeYhEIVkLvjYF5Nba88az4fHtZVNYzCNVHOly+Vpy/FwuUXFPHwf5o0iuN64338P
+RYF9gFmf45IjuDt7bNrWE7LrTYZdGybwsWm33eI24twvYC+6tiGIAxs/zpGGFLduOsvH3eJt7sK2
+Ldf2g50C985zba+vQt7QT2C8reGGqDSJmOB0sWivTfMmi5kC51m9rg95Du7E3DTvYrTGn4y1CWF5
+Oy7L03zG5Je9O2fbn83dnZsFYZK94UXTyCudm7KAb+0S7vfjBPs5Avfy4kC0TS6lJwaihoRYiOFn
+Pq+JxT1lVUyW2HbnGjon6c6jZ0841eNWbZmfMQ9V4zDpNpw9NuGxwHT/dzM+n93BuEa8tFarASeD
+GXJbA3oocy49ONmLfIs1ddyViqSp/ennR8wj04ObT48OQHul44sFqq/Ah0zogZWEaCD/cbpu4Jnd
+o4nvv8eKvv9+jPPx/fdcoZJjka+b25BhfIaDg6PydI78dLZdr6HiZCNECfZeClb8VDOLvNxsMZ0D
+Aol4p1Ga7YNr1ltYkaAcqL8XAJzbwZCM7FWm9KVJWYz+fWjLPlQlTnxXK/KV4Y3pcvVIAeHS3ZX4
+1fzGe2DjLlzdONraVsUa9VM6wf9qphMoPTmEmNO6SWdlssyCmUShJ3wZor8hehhccviYALtYQskp
+wm2q2D41V0666ceauxIGAufd5jKwKxn8PDlSS8Xf1IYEksGhqAGT7jY7TFIEeBR/3a7xdcGUM3Jp
+a/gsW7U74chq8hhP4NK6gshdF9w+8LnK2gyzniIpeUhEWlQXJF25tDbBXlD9KBYyx3RHPsCBhw76
+2B2akj6OZ1qIdN4wmaDVDbUjMIvw3QqaTrlSYGAwDAfN78mdJwBiMSMqzd6bvABTh9LdBmaxNgUM
+N2nMDucrSX1+Dmqe7XJRd86xC5QN5pQw9+t1HT0VWSU8NoRIU3rWEd80eEGxrqUiL0Snir7dJsVA
+fYkIqw9UcslI9tEDTeZOYzZDDJ3nZIT8sIBp9A4rOaSkKlQda9zsSey7utNR1VEnREjHmDyiwiCe
+OUe34+ua0cUvQUzuzPacU2i6fSY16KAVZ5KHfDS1anvtw8Icu7Iu/ip7JBTEObKcIR3+2u5Xm7fK
+cg/URX746t2/lWfXi3pJ1/YPz9/+44AeXcWvHLai2UqL+vBc4oIfmp25IVAzNl+AU0A8+mB/RbYF
+aFdgveU37Qp9g4ZK9keQfmb3hlRNbd1mPpZ5dIMFY1DCcnaMdcgFdXyeM5MJ8n7h6WHMZIIH5Qyg
+eYzwtj5+nIaKAiQBH8wB6iI0NQB1Wt2CSjvyw4XoAlQ3TFau8itWf9BZ/9u2fb9daTmUXqbfY3zs
+ocyVOdLbdkOcXZ1icHnuCJzmcox/DKsTfJjg3PKx8mP8lOOSRnMiDZwaqejkZrzarmsYK4pWsCg3
+uBxQyanrmlnCCb8E60WUujBea7TQA7k3PunWMxfdHHSYnC+YPMMJSGvqIZFAadtrr7+w12wCcI+h
+Mv8ANxtzzkwv/DDGq9tzCuPmShKESvnArHK4r8kxXtaG78B2haiu+J6MPTaFTpFwIY/unYptABlp
+jsXD184y/yvIFdPNlHYB7BJ2EZ5vr1ade6B/UiWyogOxdR+GtFHxV6mM7FlM3tXsWQw5vLzwDzsf
+D0t0wC69MUH6IBgQL0KHsydAG9xpRxQ6hiFmVBFtKe94uzLV18MUNXqdyE6lhCsjRjchFihOzNJN
+f8LjUdh8tAGuVouIOwlUQTU2HAd1IxXtvTKGR0GaYxMpfOQ0nz1Sxq/mv2MOszosLUhKOSrcCqUy
+ks+2yYZj9CbJZBx4JjHT+bxFb4YhgoaI9upi3W4RSx8/ghSKX8DD/Wx7Qc6ArCnChLGr5+Dw0B40
+gBg0ozCInRGwIYQn6zjxqjtStlrd5vhAlwOfW3MNPT6AmVSBOcHK5vhgZuZqUxduYu25RBUU001x
+0Xys5Z2MGKeE1OOxs5srgh0MaUwyfOkI0gIkwBSgHDFUvbSh2ewn9ch/TQTStGPfmFnJ4/N6BUy9
+AD9ssK6biLOtdbv1BJN0zNoQMwYqtQCmFnUmeGK/RiQkHAvDyvB46WFou4QnRsGY+fND+vXz8c8f
+Pjzou07Yen/39PXLFy9/fVSkG8BIFH4j/zGjqTwwHIL89edbjDdTyphKGGoNYZJnt+PiXVfvrguC
+izmBx47vi/+ovKcLS4JG7AysiixRhNzEa660ctFf8+H/5rYzOx/cf4ZMp+JjPUbiq6pyFC2i++I6
+oAnT5z42JZF5jNbswzA9QQVEdnpfMV0zfpitMtainrWLcLqY6TwafPj63X8vy/bh12//v7/9b352
+rwAXWQhb+GYDEaOL/zwuflVvLsGF/Bcdfhqf0d//6eIKIm6aJfpyPACsBPblPYTeI4uCM0X8zilI
+NWNHgNYL7J822PQhPEHhbWLWUwOCKrA93iGbgXZmeEZiJRY3JaN9ABiQPwV5lwuxSXlXXDYXl4tb
+F7ruI7j1m3PEsLcO/pUC3XZFvoLEcDsCdpg3HRllGbrttmeHnAhDBKEN3j74mQSkd3jz5tpregGn
+Wsx1vMN3mwuomMCLzN3cmwIYDxJJx7ZsiDUHSAoFHGpinkgdIOxl/D1+yiNHx/D1UDN0pBPg/aXp
+AVZrOzGlNyzuAmK08XHIB445TiYyqUPtQ08VlO58KNG7wwgP64vuuHxofoId7LH5GpwZ5XQpHYCB
+ndUwMVf1fK+GDw/R3NueXsCKjfjUbjfcnp2QrxtGOiqvyyrsAgwa5VACF0Fdk5kbfvI3XYI12NRL
+7hMjPHPX8B/onAQ1hZ9jdBzA7V3e70qzRU2FCOo8lsmqgtwzsAgGUxugIt4nfNWj1XeUtdqeLZqZ
+IGfYPeEvenF4iEYOwMn4vWLVApLWOdqLxBttXDz11UNCrtOz1mwQMxvXHb/16dWo2LQW6H3b0aPf
+ql1tF1oxAKWYSlEVTeJHxyFuduxetMxcxnXxpKv2m+XH9j11AS1i1vwoCwtGxK0AtdQMIHAGcCQy
+ZaIuyiNXNw4nmLTDPL+1OJ6KqefZbbgSbGmMcSr1MNaE+4YYJ53T0dNEATrKjDW6zykHN4D2b0r9
+SWxS7VxmHmtAyNleXG4SXYK5rq+Aqp0xwLTzKxBmaMcvmwiG/rQ4n5J2FtVeNZjRQi8Qf609x/3U
+8Y4msXC+H4E5rBxTi20RBmPqbkCJeIuKKnzp9ogCd7wlGygeECoUVqtJdkK8jKjZIDMKvJjyNMkK
+vLVtC+nq8FVdvSB/pDPqG+If4a2NDTFKlLMnG3MOl6CbLkkSnIBadlOaafIGwsJ5z1DGxW/aa/AF
+H2FvL3CCHYbqbGvau2p+mIolVLj6NIYRHF/MRTAXzcjV9FbZc9HaskWCnfhkP+3U/saw1a/xaMVH
+rdfT66/cwRMngvul/9VZWXDVX7EFlZcN1s79IQPxDdvMYGAQfsfPpRCF41EzTU8NUfM8b7hc6y3Q
+/dgfJHAf0otiP90AesaOM5oafrGpjTTuWIFTwLTYQ/VowiNBbwxDCHCeYQTpEVS+5ywa0up0GF/Y
+j9uNmxOxXnM0Su8x0JhZcjDGJwAuWQFQ5yhpDxmRmblmXq/JJkUF5AWTOyNGmm05fLro0F6EBaTk
+XOXncg32l4vbgWqJz0mz6MzYUZcBVAPdB08tNhK09GBZddMNuk3DDydcHeGIxX0fV4gUFkOFPRk/
+Ls1XwzYIzpA8H32aEoQn72wJP1obFUkQvih/e3MRlk6uumTqmVOVJSJRSQs9QkviIfLXq5fPJ69e
+T7559fq5/fTt2xevXj79rfz97dPXb56/tm09/+bpi5dfuQ9v3n377evnb97I33///PUrVeXpwHoc
+zdrVLaz1BH44NyT81FrQ2jXCBE7WGnwNvyhgW9hA1+vpCr/LHwz5dlFvMHo7Z5U/IedgYN9ounoz
+4CcXmCH15nKP9Z7oR/iL4sn4z3woMgDc3+iLEskJ5kiZ1Sb3z0VhD33BnNyRNzV2Ahp23XDYDZne
+uAz04q+HgMghnzgK58ZG1QxBxQKmC3B9RwgT9ify0DYJSBsetm3+KkgfQ33DAH4TK0wFWBhz2jAF
+sIkY4AOKvcwgCfDmx13ifPLqhI+B5QRzAmAnHOJhGk4monkOBkK2wAiOj+Wv4+NyMJANAEm/LAea
+oOHTg3Kgdg18eVgOaJPAH0/H43E5sNsEPuGXybuXr58/e/Xrly/+/vlXk6evf/1m8vTtW0yfbJdg
+kn+xbH6oUYjoSsApPO77n0l/tyGCFItqQswRuL5d5dljwMUT+U27mIcQ0IZtPj3rwOpvowUwgk8U
+V74J4gJNJixdgLAmn0T0p8VyJpJ0AglfP3Kk8QzqRxR1BEGkJwT100xlZVtxNwA8XaxtuJGcGzzv
+zsC4HrvMaHu2BDOrCQZWQjdduBy3WESch1lmt+EWrE2t9f9SnhE03vDtHyReCdIEvyl9LFCPXsQ4
+kUdz0d7ojRKQFehaFceT4hpEi4kBHiBmmB8uLfnqDdVSkKk9Ki4hNtm6lMA58nQf7eGS4jNhRjsT
+Ziea/+8CPXHdXqh11ZtgQgU4mJgW9V2WBR6mEVfVr6inmpNTYTAEijshVbXCk4wNDlFtTcYLUT60
+Q4vtU7pcfmXywD3KVA0cK9rQ5svXTrqE0z+Rh7e5JxtEe9xJaXhZYWd5U6mvdCNELpE6UZQVyqA5
+f2XkOxezHWW3hgFEYVa0qCaynxHyxuguCsXYB5gUS8Re8MqGV2esJRBVsxJfaotqJPtYz23au0h8
+bkBRvjFlzR0ZWjl+ksh0Nb2ZwHRMRDty/OTPEtkQCEWMFZWLgNivGzqxFwXMq09R/JC2fUo74WH+
+Y1CdDCfKnq989uq37755+aY8Tbq/DcUCZVT8LVAn/q7y1f/lo0H8+fC4eDIILEdgfkEpZ/4JUsIp
+xk77n4IS0XyD+234LSgjHaaJDb3QyLSNu2JyPQoyyLt9+J1u2NihRb28wBYehbWDscGkIzwKa+/y
+hv5mcxkkikynwpK6urApc7feEOMwfdrMLlHrbA6nsUDTr8vvuodl2NSiXV5MMDp0vtgS/h8UZQHz
+uP9/nIuHWVCM7Lndp3qr71cXBYjDKtIOiMEiPjzO0FdyaR8CjoVrxzCefds53NkOO88mS39p6GUE
+mLNzusmDKg6VlPh298gIjqneHtreshQn1GQ5uwfnEUTxOHfKHYByBMPayxpBwUNLahdNxZ4Qx654
+nI2qI927ngGbgdsxOfhXnAWPcZKCvEEwdiTs8XBd7I3nil9IaHLh9ZS3SWDMpzubNRqLBy9rHDgq
+gyxjY2u5vPB5gqZBfgwvw91BZKcIlVYEw2HHHcCgkw/i6J+QHefCNEyWSipnbxun1WebDd4lyouF
+VkJsdtoN2plaT01iBWC+WF+tNrdJ5yAZV8IrgaXKMmxuOp+zvouIK9Hesl0eJtv0qJIHb++GGHIm
+kSE9O9EhEk6XnyEq7/ZGef9Bd787+m6JorNfDNCERl6v9rGZVXVH04fkqybsEJhFM11AxCh4Zxh5
+kztdzq1yMWW+R8RojovScpWRW1XTe5NyqmV0UJwrPxlHtlnGy/0kcpZLyVAV3HlGcfI3JNgisCwO
+br9TyelOIF6cdIf7L4tylJRyhvrk7RMIkiN2tYdiiJtDmhrFLEeGk+4jWih5AsYGrx96ZLtWw8Xq
+ClYpOAook885oD0YAmjqxGPU/PTDQpFWL7FDdULOMcAjsrHgEJMi/gT+OQ26gjcf7gv+HrlHGTTd
+6tD96Ly5SUSwomtT0NfoWg2HXH/Vew9EqsFjwhuHfZLiuHnYkN9b+jbGwyTqc3jGNnAFNNc1eMll
+h5ZB4P83cWmWKLifLC67DD47dnXC+e9XNeSun0aHabc9ozSnzgDt5ESEgInN0A2j8SfaFo4StG9r
+qaLzjmwt6Qo7vWmutlfI8Qq6EmTG6C4MpswQrZL55MYDW3UoOLF5Em3xuMqHSVkzRU2J6wv0JpN6
+l2CwXi+r3JGN08TPVaBX3pvip8wQT+jHaYbsO4/u9ZGCmjVLNpyeYB3eJmIC2HG8cCroXA7V+99e
+h8tgD3GXxb74NqjZfuD7FElUXiXx/W9syH2Ilz48xxerKlUaXxhBB7SCvGUFUbPMv6GeDWUFd+I7
+wdj6ncExyorASEtXii2+B2QSCcpkFLARe3ypL1sAnCWna46xhAV93ucJKZrP7nUq+CyWvqW1N5xm
+7tvDEus8KkoPQUIfKNbFbmSDDGYPnrgpSuZTx4iWoDgdgkbm2OlowqaXrTUAQvA9ZwBE2rjpx2mz
+oJcj2/o/AoKYp+mpF7p3L1u2nUMwltTWk56W97F/FZpo7dNd11ffWinq7Gy6mKENFLXV09NwudqL
+O3aMYYsBiEv1jwJUuQ76Dks2m/ccgB1QY4oS9+Bq/qlPDclmSbud2c7IyShsMHJiS949gk6HlUTx
+NhuA8dkaGYNWIQDV4FHCTT8pXHQTfz3VWSRERfmHbo4f6v7JTq7SBClvFyedO6tPUHnsNXOKl8vT
+aHj4bI0ul1ghOSihL38J1lhtAaw4iBl9s7HaS63LPNx9yoNDl5ErmCWZccJf2DKgsrmaAzmPVwLO
+A9kKYIAHfV+hf3us1RBvq8m6vqhv4GxYl98Nxw9++V318PffncCPU/PjzcNykCCv7NKkF4MpKiy1
+cxGlNXELAw0nSLRTQFt1nR+5LqXb3Vnedi4BUkfKQEtHtj8IEWwb3lnO9gPL2QZTC8kIq/issGZX
+IrjYdwnXWoq6iak4JDT4I71D+rqj/4fFYqakk/Op3jGZ17LoykC6BIMEReKHARzxbtaUqIxGnK8s
+lDW6oz4pw1b+sHjMWxAKhTuwT5jGiRXGKfptRwuQXFU7a8jP/SfOgxSRnuGwdk/yw2M1CQ8zdfPE
+9a/Zp83JJ1Bad/LoFE1f6OeJmp2j9JRaV9mlhMP2NyV2oiWwpst2vRmx/TihRimniVDqSh3mMZNH
+EaT4xXHxaPwXf1482ElpVmlpJtBkH+ZqfBiiiKpeWFa2Yy4Jso2ZDJ6d4F1rS4ccp9pBAmZkcl1n
+viWsUWrK0AGKejbzJ3U6aqq/07u5ELJPrH0H0YCcYBrbgsocHMIacyK110RwdxDMgnVXy55BIKCT
+z52iag4G+02evzTZzV/THu568GP3OHN6yCQiuOonozR/ZWFD5dgCKuMpO8pcaWHASqPmsu3YXedd
+hpjFIS/hi2WZsNC53+ElHx4aqATf4xK3X0/A9hUrVt7SgeFRWUguseZXM2MLkgYmCoFP2WzNjJhK
+Oxc8+FPaQ7HXsylEQJvOuUPLmSxtcXV7WEmgBh8cs9iPAFbxZki+uROvF4brJw0mnJVE4kWoNQNd
+bvfB3wAooWPuDvHbVCeq/E2uO8HCR6aiU5AIU8WPstKMuzPuXy5aKNCVZe+G6o2PmgB0dHAq7JWd
+aEJQHYpr3i8mcSaaiVOQM8ripMwW6efGiQpNfT3VSWZagaI8LT/hDPgsYx5+3jEP9x9zVWZJrIEh
+rcExYihk/hh87efV0c7qG6z896XmbxyMGV8jlLsaKAZC1Z+cWoFhZTNSdG9jPQ6drjjU4GxXCG9Q
+Oys4UitdTSGkMbFahI8Jn8OvwH/q94aNQbgChH+lh4u4vkFaTSOPM+nHJDtGEYd9cyIfTBYmFKH4
+GgpK8/syJxlQVgBmb1K6nrA6lA33r5JEyWCq2AOYFnV9UaSUuNiy0xzuVGGtiMX7uiIwCpU3BK4H
+wBSqjNSF6hnQqBHzQii1hhQ57RbMYhLih109y1b7+SkrpPGmgZzGqqZPDh/Tt9Myv1d4mJj/8ZEp
+kRqKvLtwx9gaO/cAE9EVXfAya0ZeuuvO3F+miAlH3p40SSuZiLP1dPa+3nR7nInewtpDOlhvQPpP
+rxm0+0p8VwUoczN9DxgGDCDJ/KJJrMg99JTDyxd4MQdKOX93Luk111y2jgY9S8Oexl7/9+k79Lm7
+U6fBvcD1HP+8w51A7FGP9c4YG2bloXCEr9lunfI7jWuudsxSQRM19GZqpFtJ7tMrWNsGoBbb985r
+WXYvgmewzAFz43bzICOn8OhtITR/po3DqKp77GoZ1cn97hQGhY9YP/nOvMe8tkALLIscsKwh3hSA
+NbBAPohOaPEHIlbt3IECvE7bgZPmCE/nE3dWn+p+4IVmygbewg/RxA+PS7RVVZ6LYMuhtez4QIyd
+gx+ib6NFhQ9OgXPqDX+2gNiQ5jYQnLlX280W3YSN+L7YdoAsEdw92hXqv9blyXcnQyXDof8/J5xW
+KoH7DMpgeDRdl+D0UNBOrw3Rr8vvHpds0ZIvVIirBLazbymzVx7YzQKNYekKiu8u/N1wePIPvz99
+UH1Xlf0Nwj/8zuvNMl8j0bnbZAmvl/gtukb2WvnIu1qJLkIm+Sh6DOH+ZN/dfuzDSaAS6c0r/ijE
+8ZrFgkZHhkWuA1Y9QA/k8ESeuV3n7HTuOfcmGzYLmRINSazyCEdiMT2rF565gGcp3yxzBh6me0/6
+jTwyBviV31p61tPm+dwJKeL39jBjc108CcuDZRyaJ/cbHMXPjveKy9YwxsXqr/nmBdwX/Fcswguw
+ZgB0WTqbyEH6qIjNLDbbVWQZpw05vd6nHi3tuMgolFQ1plY9AFQg26PJ9F0NBQ07veGsAMH6ug1Z
+L4rVoHjwGkYdsl6iTxoeb4I7DvbwQVcUMtyEUw4Jm57DxT3Ui/ZMxRI4h7eCCTiun2zNegbhb47E
+PRfhBpqagTfUaepZ4tqrrteV08BKgnyWwTAaL5ZwMLoKR0jwpINszx1kQcZmMDYrmjCXphmsb1aG
+6sgmKaUcwhKiIGWkVzCVYBWrrXCkWEs1yApCesqHeo5p7VxroNCrIuMJhpvR+R4fne64bnttegtJ
+jfJblFqDds1chfmJyPwK/8lh+y9ZtdAuAzMVx3l4nccmbwd5yRzrqGeaID1JFWgnQ0HpDq12l6XT
+hhEsDOFc14vF4LOaYXr9S3DxtAWmFUIEiTc0GPGOaGV6Ro/nuXPYs/zMms7uqYVg0K2RJXD+MLHO
+AUldxPBxMhQcFx70cDCl8Bp8xnsxXy9HqRvxfrdhWmN+R0nOXLWrx/vdhvVNeJS9B+cAxu9y//3R
+d1+HsTVx3vF3MM8KWNE+t+dgkuU1yDpmR3sjJli9KezgJF/SwJzT8o/uFmHCL+DzPE6bXbb4oJSt
+jDLAgHEjQOgD+kQ21vRbzTRXeJruUflP97s/wKyWI54iVX8ftKetIZihlG/b0IgIC1Nl80Mi5I+K
+mkR1jgrMXmUdpRhCYze9c35bbwX2ArYrISOlvib4pvjZ70MV8IQq9LCbKYb1DHJMJ2mx6RaRNoZq
+W3NYTV2WhQkWSK5G0ercpU4NKNJTbwH/Nx6PT6MGnuzqtIMnyc+Erf6utVtok1zdCHfSWwWhpfT0
+Darom9WQiolkcKPjIsMOn7j3Jt1+ldvhwvu4ripo36sjh1Zj94QWejPiA0auhi6jFsM0YcWiUZHV
+aWjgb8ThoVpidkHfOZZD78MRBFjQue/elgus4mpBwB1COSmrpBzgunfs/Rmjo9jh4DtTyZy6rHYx
+fzzuYGlHzmgXjgE+AVibCA3bOk9Po6uFnw7I1q7ytJAJZIO3AAaG52Ul5a+pTtFJVkLOEE1kxABt
+uWLu7Jz4CWHs674oxwDFtzPaV9IROroG+J0YJgjhtqkhTqzkSbQUuwp690OnSByRLkzPlr6HxtAI
+5ONSiNLTKjiDRbUIY2P4z1A3pU9Bq/yLemS1fz9dz6D1YdAkOvHyQh2z/uIODlywKB1EsLfaj2Mx
+2fIBdjSpZ8hWrmhOazAQZJoefLuh95eDq4HPAkqjoAEpVu+6JkReuMIq5ysIgeea+RcBWHM3igqd
+paxFLKoXtGqDlPmwhWgH4csOvJ64FYngBIc9y3THhVGLArCpZiathulfwqrsy3vUE4iebDfNveiP
+n0T6iBMql1e8HiPAr4fY9C9hivdkKuyDqJmK/5AkN+5SnmuzWksno8r09TpvKyWB6d+E5driRG4L
+I0/GP93b/aqwlnhyn1lG7aR1ADgXZPvFBY4KNwFdlXHJzKEEmu+kbyGLzafWOimXf+Dg1kh9hhGA
+hPIcdJqlxeimxv2y5lN0cRDg4pwehEsV5RcOUi5VokrUKfdPJg40mhrZFU+cXkHBRJWgKLp7fVBq
+EAtbekZCpkEBsZ4LtLmCa1wSXDm5FyKwN4db3HLoc7cG1s3K9zCoFJAjK6QILVDYhENUZ1BlZkhm
+j24vrgh4B5TQtOgRbjEjvjOeM0BJzqYITN9sduK22YIjaTTEpZAMAruYJ0q/nDDVY6lYd8FMQwzu
+KOgxfotJFYR1WDRcSfrdlTsvtFDAztT9oddQ1cEOT1TmqWnkkZzzHeuh7hAGvdaO45HGJ5mL1L2T
+MM09hs1bJA7A1AtroexfpoicaQNT4u0kZlzmA6Oj5wBQbW/pMSEEPnU9fRFR7GV7rbua6CgetN8S
+3C5DVPMu4l4JbjUci1uOQmD2YoBfbioB1M66o61R691D8eHqes4hHKCEe/SwZILTC/7VYOwCQT+l
+gzaCCVmmuyFg+IbifX173a61ZSvbHsm0Omh1eiJadASKj6aaDonVwdTbQAE8E3/DLdjTRBnYHhbB
+SYgRDCSErhf1gE0JJaOPJo/b2YYFMcvdzprpxgVYbiRow1i3jWyb4ww4gUgBzMJcXBoyIfmGoiXw
+kg71i8UhBVSxdW2vzgCz/DwM/GCnGAPNSH8Hge8ABISdj4tf3VrUelxYu9QYE+qstlnJWIEpIhHp
+WfKzwaapuniFOLksKzbL2WI7TyiID4uXxdDFgalctNqXajBDinPNIXymuHpVoq7yl6Wr4Id63QKp
+6oF1qUIPEoWQvj+hAw9VXXqr3KWqlxYHH99tm/NzI+cCTPBZvbmu66WONsDRuCHUzmM6M6ebADaT
+Q4vYhbYbO710Iwoy4o5Z+R+3MuI+S4QaPPr7q/R2BO52IWPKT6FCJLc8y7VWEHDRn9kYKQFoAKwP
+Q0uxiojmDx/0li2TYbAzaQLv1BMQwGxvvOo2HBzlLUcj4YtTIjSLEIJjJsz9VTwWVOS0I5UHiekc
+ookAcwK9I4VZKs8X7RR/AKDmor7BICNTf8MzxrnEQsC5mc7gIO3Cx20nOxYvzgs/JiD8TzqAMa46
+4iPe8vLrGXJZiVeLjEqujR5jAh7fXgPDeHFuNa5+ixRLepqeRgxRfQabwk6inC7TlVnH1boJoxTD
+6kCMDCVsCsFylB00AZXlnhqpTXgtcPmAlaIFTcj1rQkdEMR6a20wmDavAMRkurie3nYY9cqR9yai
+7vA4bfAWDeEuTL+msPvOtws/mJKeqEFK7vI3Al7wmHIV8jIrtc4ErDyI9EJl5aKjTzjaQyiJiPUP
+dQ3CGrkDhthSDP1DrTvqwwpKOEfLgL1sVVgXaPkToJl90SCRAdpNfCZeGNOqPV83ucR0tE2POLP1
+0tbKJQvRUXiFRAaMeJYpLMHbAggGlM0D+ek4mDU/Mwo8x4W9eNoEUWXgv34SHQnHNHFhdWIwwb/8
+ZOS0BIAfVMlsyL6p+Ml2gx7bafMzKBSq8DInT8vec/sOcHmKPiNxYCwv9ScyiDhJNB98w9kLP1Io
+qag0zlf4eeNCx7jy/AQVfIbBh9940OrzaQR9z9D9AjhPt2sKDxyHFz7Vm5VCbDjorg6AhBVgPR0h
+I58AQ5qlAJ9GiHohWsF6TnfHybAc20Yq5O4c4aqs3J1z8gYCdvFd7qmoBv+VpXwmlgK2bRkzLlo5
+5/Y8JHKnx78NitH8GIknqDkCviwe/TXUeNtui7Jf6VBeTj/WFjgY4ndCjdbNvOi2oOfuuKFdlUE4
+t8J2ixgYxxsjed8JH6VnVEJZ1fOyk+CLf5+1CslMjEzD/TUFJF2tjFjAgeXu27qUOmoLhmaawAkO
+FuKGMFUP8rR83EfaGC86Jm2iavzvaBBTNP43rIioOQqnZmkZBbjUo/wx/zsaJIlYfowioeMY0WxT
+hpXH1jDoc7OpROgOe4BKFSFTegbT9UfnTIlF2ofv/CTyiCJgNRl/HCp+9DkoeF9q/GMTnBPEQqKD
+C4xoNsOJ/2OQn0xnjoz2p7MMIbkB/tR0RCQD7f00FOOtG07Hn8LCxeP9POumBvjHWbhERz/3yj1F
+W+t/FT7/tIRPsoDPSp8AJ7FLYJTbMzxwoBYRhTVRrljtI7U02i1/koILekUS5dQG8P2XIYNqQv9X
+IfSfSwiViDgYOHUM/xlmA9YpYeFE+7d5sTJEbt1P6MCiEff7VylXb5H/usXcf+n0rsXmT6P5Z+12
++cen9s9G1THZqgH9sxDsn+j1a1lfG6rbIvzDPjT3yAew7ScqW7kiLDDo/GnpygY37iGwniw9NOT6
+/lOTUC+1JOnrJ6QRKjc2MtsyCrXBafVNs1GmvpO/pbjzP91Cc2D7vPz/eejgoANTKHBJWk+vyk6a
+FUMXEFBh6AcxrXgz8CdNLt5DkgzwWIb62anJtaAb1BcByZG0LHTFmfTCCnTkRs6CT2DOy7KK845t
+NC6uLk3hYlXoynkBaLSuY3tGJm5dcg/IKUtC+bddvZ23yYwZq1B6y8L1C5yVCMqD9RFBJ8apBpk2
+w1ocrQbkeXI6IjJ0fYj5zo/c3ZnYxLQUE5y8T9j0d5B5E7F8JzZuTSKkr+6ZpTv6M8iJrn6cfjVd
++Zi+DMHC/nbOx03DGmTW9o8j1JAja/qGmRzfjxSwYVtSZR7hP3hAD9oeXpSRRQgsXAw/gTV3aA0e
+RJczPIbKk38lFCqrNLuhfCeU59RH64tow8YuV2A2aDsJTiW45Q7FDkybV5JnfuTPgQ/d8CJNfUhG
+s+JhAL4o5a9SmABTP2BhiusohpJwSQwoUq4ZXvWpYSOED1n6Cq5UsxFLKEMdAZO1PdT7Z2gXu38n
+ad/aro48VfmrbxYR+J/GLgvJ4f9EApYY8FMRgPlUFlLKzoXTHx95IEdA/Wq6yZrhHG8WZi8rQxKx
+4keTmF6vn37hXnW68jvi0Jv8lYh8eYNVDxdUtXAa+vNK1PYUkJUqN1K+0MlGfGq/6i44Ltny/RKC
+C3AP768LJnZwQiDYQtNWlVBF+g4rRBemWh+pnkzZ2bVsXV+xwWq7Enx43iJ25vX8ksnB8rbYLtf1
+rL1YNj+AcTaXZdgvsqk0C9Y6m91Nu9K4YRhYmwc4m4Lj1ayZg4XoFLfovLXmcFe+xRCRgk+UckeA
+fyY4dwwG43KpfeEDWrgsgagHEAGuzNjQIwu4w8m7l6+fP3v165cv/v75VxOAuZk8ffv2tR/6ld3F
+QxrOlK0sSo/rT5V2vAC/j51uF183ixoyuhDlbAf49RR8Cm7JJ1/8lc4bZQhrSjGTeSEuBWDnKTWi
+tt5kamYI7AkOImxyCCrgyKGBvDJ8vwsvyGPF3o15twVlWtnOa7KitdA982ZGY0CvEcREXqBbEJlc
+AkwnWNI+Zcve0LwSsfrYCpfNJiEkmqkRi5reQaBjMmZ1/TjbngNWi5h4QpMl+IJ2aD9nUs/NKCGH
+13DQmM87djXc56UF03Jcrg2z4Y4lTRYnOHvHmDtIkfEcSwXZQ4YRjbTkgyMDc93pwtmyHhweoC1u
+V3S33bjbzP+pWY7a7eYP3knAME5GrjksIxdRMyCHbQadzkLpTLiNZhkjl5fXd63F9HIPFB/LrL0h
+I8/Ceb6/Bjbtmo09I6LHo5BRA4tu0WPEx78XG1+kdGQt0fEqK3qUAp5C+hKcKtfDkV+0H2apryLv
+LgYOVrEzn7jwZlv3xI8EsghUC7ySrCfhsbFZUq389uhDFYdu+/c7wf8dAtsayu2FoFAceleV9dkN
+PHeB9o2M+a116yyA1wEwXn95Ztcv5YDocZR7gx7dwqbF/g/dE6w/GDNRa+XZFUYCmy6azS16wFkH
+K7K9hR6LiMgeOOBaTv4PUAVWxrvUespN92NKiVuSNnRNXSu6yDp2JFcgFMOYsCaTy2l3OZkYiiBv
+XdeD+oNtH3dOLFPjsY7LDXwH/6KcupplvasaoC3MgWEEowrYyaOz1byvb+NKzEfHmybgOTqZqIc/
+kvefib+IO8r3VnUoDI6kngOujeZ+YSYhkWzdT5N6PXkHO19Aty8N+Sy8eZL3umAQkaKgGkS28haS
+81gPION3rNADg09+AT1Y1KK4PyPDe29MZIPvfQpvPkbuX9cXDWyU0Kh+4hJI2eIhaUJSLSAEkTk+
+pZoTBpMN8yPfD22qWu0sU6LEXn5asQlb0cemlnvXAEbBtgJnVbZ3+XN4bLMVKPOmPWogRQEU1pYV
+exd0o49enfeoA5+eoLB6+9ujGDkY6JeqPQqx2hjKeZr/PYrS1anDGQ6Uej7sK0ornocYO3DJ7ihk
+w4A71tKcK03gP0JII5TJB7a3URjatY6/pmHTg4BClOTpNVRGf58FEQc8MHZKS9UtoQsmNnSBl9mD
+iidImUz/bXLYLwsxD27VNQl6y+KABnWAcTW6YtEgUuyyvjDn7kdxcg6VUZw6oVTBteLwA+AEaUTF
+4br8h8Pv5g//j9/DPw++G8NvH5VYutESTIePUOwiZOKdHsN+YO+kdVUR9QM9HskHldxjuxY0cHDd
+Bxc/w3vZfbWeN5vQ2wgO+WhgQaDuAbWWlKwo6TWxX4IX0DA6PaXgZLVbhY5v5uK3rNZhMFzvbk3n
+OmWzSiXH/bX+IKjtn/5QRTWcYBOgUKRG1JlvS4P6uK972p4hp1x0HTzxKjlF5bRfUdU338nZt2Kt
+c82eQUgU8ADfuRaZlTHzaLdUXtT0t954u5pDrDFR5UZA3F3tdjFuHqR4q8G39y+Y6tXCV4mhrnFd
+f2zarcOD8hRhzuF8WV97uOJ+MECP3+Uhk7pNToBGsc1HVhIt/YkqrvzLLtxs8mQiFvbRj+7hMfk7
+qig+IdhTOgywj10XinIe7drVBVIltTBFYttBp5z6dD7Xa+tJYf1l5W3I6rCYDNGYMkWNgqaC66ML
+Uq/H4zFdd455w5kPVbpAgDId/Nlfkb2tWcpftgqIiK7PwO3RYLWhuE3oVQ3msIA5IN/NouqKNhbX
+3B0K06UPHTKyECquRS0B8ABd/B8W1CPhPQKEXxOSF8bSgGkH0ntMdLfGgGUQ4o1RorCGmG5x4KYA
+u1T37K7Y4hep3M7M5hpe0849hCc7uOB9jNqwZwVsRVdInGZDovLCGsABfd1A/KLruoRjmkl66Rzf
+o4mNtTmJfkjxfXpBdCSbG6JcyGxAbFv9DHdIWv9wU4OWTjxzZaFS889u1PIoimt1Gq6lsEefRcQL
+6Wqhhk/t+KXMCbHKSKOYvn/2MrVsY9GdNf2KOdWoRqPEa2bw1sXCrRgE8LNmK7HT+GkzfNjkDTUR
+aIyhzl3tsnyXRyvu68H97gD0a14dQQctnGD01pq8eCCelY8agb7uPPXS7YG2SZ+AFj0Ux0h0Yrdv
+OWoYAsP90TMxtuads3J/HXYPX+9s+UH6aEOeP4sjKIUnD11Jdp4/FKnZ3AbkVeXXPcX6Lkry9o5/
+RWpVCu/ndTR3i8pLbrav33DR51Ly16mC+97a7tRzPf/ZCGHrumsXH+luJHfgLjKmqWfvJ5KaioaF
+oV5a60bjhR70pC0ZQBjURwIqWFgZInY/OOG8vtHbBtHQbkNsrwaRYzzJ71MCZfRczU+8r6d2/6dM
+Cc4X0ws8nOOOxldPuXD+6M7bB5TMlXqM//piWAJnmznGHhfZNMDoHgWFHhBPOBMlULDTArRvT8b2
+bpYQOXkH4ftESUViJoU7yNLkxMdZt9+9/SSRt1jLAvC2zWaho1XCnxwqPTJe8wLSJzhXtMwUFh3r
+RJhmv/KeB7/ZdAlre1WvLxz4wiHGeOOuoz/bFCDi7q/L/R7+4CVK9SgIlRV07kTlhE2kuBdNJcxO
+PYVbrDX4aszN1g+/us9E2pWKZjMOG8ThXd1ll+YWL9GdiILTzciJrUEd1loNbslUF+42cQi0nSm7
+RCTZYElZjty5rDumlqS0+MRN7losdaxqGGUC/tpHDc7c/06TeGjhctH7S7gssLqO74tNRrN2UxxF
+FAiCaI8nO6LuuqmjLDBrfZMaHn56VXeHi71XvHz19vkR0luPeFFAGN3iAhHQaVWCO6teA5iSJUNy
+w9M9YmkB9CfbkFB0EXpzn561H+udeyUrhQSByrab+mYiAo8ltazMNMi6JNEEy593IwPsxU9IDGqU
+4dojmKnuE4GhCz7emnvp983vV8Shgl7ZHqGWaOpbK/eJ2Zn7uFOSZQyBMSw2eDI5xLsQJNG7+Uqu
+rNpBDp4DnRVhHfmVRaHRenqH7iBlIuhgg0N7k6vp+n1KbYGWUW4w5wDJt6inABaLeiHPZAUB/CL8
+sMDmmRC7KmHSOST3tDG0nQUgLpB+drUSBIESTc9uhUO+xbS4FYP64lm4bAMBNhTEEDOaGhspC/gi
+8n0IyTNU0+y6B+qwxhzFFmAUW2v9GfUwwrlT72RQbtKXIS2ER9N8j6/2SsLHF6Z5CypFiieLEwlI
+ps5/P7SrV3K31yio/0Qm1IrEHhFPNpY3KUaYO+rBICjR6V/3FrWNhq+gCW9CDiR74UCFm9d37hAf
+0SI4mFeZTuwVDIFkMyOpsjuJ7SEJrYoSuh4PDrl6+LegcCE+cRE4LLJfd/Fl8Th9U4oaerxvQz1k
+nBmgd6UGE0/Yps1yyqFnDw/P2/bwbLoui8Mvi9L8McE/kN8c3tDXm3KQ1GeSFwXBG/IzRqTVTLmI
+wHTFA0gF0Og2fibTdKKktvzPWz8ma+uvSIFg+iXHC4q3FC1ZldraUL5n5yL3hJmy55VjQvyYfpc7
+WQ+Fq/GM+VFwWB6CScWkzN3H6RlyHh8Un3giJGO54ukQKXvZDM1WmXwatmpZTZPWViQKqZp6SWbd
+qi3kR9qNglmxNUhgHqrPKTGD5hAbobFJEH6YP6NyVVxaSm7G6uEm5EKVNPfK+4uIqtAzUozaq+4S
++y06cGxvULm4xXHjU95RTLYZkk2OSs97oJMM1DxqDc6bJYnosn0oeoisgMP4b30DPcwRmmp8BsVc
+VKxH0xizCL9X9klgHz3ljrrscRG+zvrZwjDafdpjAiTSbRwN+vQB3uOdM7HqK2LvQkFDmlTCfVMr
+tyKvuElU06d2sovzApozl9UXrYamCPg1VoOot/Z0Ucbf3jTvF2MvIrtRkQiBmP0fXTTDcWrD8oT7
+lcyQzMH9cFR9U830sddke2QF+ljctfFs96jHR/6VOmwk0vdxO9r+z7UzSNijBAIW6417ztee7Ynn
+UtB9tvyItJIqVsGyvUZo/PA+NpLRNBs/bIvWTYtSAhxnkf1sUtLJnnHEwzebcaB6t4eltQX33u0i
+q+q8Tbjr+YgVYWRErPVf9CV5XUQljeFQV02H8aziG+6ZYV9woERKWlsLCT1OqHCGcEEWxyCER5Wq
+/4kzLSyuhUevaFqqlGLhI7xXNEwMQNtwsh3mgbdOoa17ouRQr4PWAqdNLUhV6Nw9AuB3VHyz9jU0
+vdV6u8iCFU0xi6sW7LVcbCGryI/XNGHb7hFzxhjetR+r7fY07VUFk1nyxreqpHy9o8Xpd+GBKvX1
+FrzTs7Jzlu8jqITesme5cy/HP+4ZsK9/aW7W18XwHVEYX8YIwG93P/bn43fFQ0k3FTmsuMfLO4ZP
+mOgnerel7kIdzsZSmsjcJxIPKY5lCzqlUOge94qE5U4wpj8Nogz79NkI0fdgjrz0RkXqTGajy1fO
+Y29FToHpmHboeJ+MatfrFI2oI4lwaowbpUKUgoOrIYOPJ4+U5AoW+iCdols1/RSB1ZWcbjft4UVt
+hoX6C5SSLEFVfmw3676FNeoPpmPXAgcgvQPLUVW+XjULHg7E7D5vIRRSGG7Hiy2tZ8KcYkDgpjQ7
+spj22i4XYGoFBpuMdoDxg2pVlwVZYis6U6cXJJhBlHBRAZoMXdBVuGCvX9r3zFT0zGld8UrNytjI
+ZlPXAVMODr+TPSuDvJ2KR+bL5PN509NWZNzI1OUFO6Z3uEW6huh+amp4k3bZb1mHkrgFH+Ibr8Ri
+egqyaHF4+cUhflFXjTuFNwLCy+EwIfn3oLr5InOchag3l7oDNY6pFyCuBqn7qybHY48Wd/h2HoNa
+MlFliqJynQtJogcX2zdUKFFnkGpf1hax0PUt1gdhS1vVNlcreL4yIvLSe6+C/8nHMfyIH80NtQAx
+H3AbByo6bhsiVTTg0WHmZwZsb+zZ8avqvoXXUPTLz+U48Iz40UyfTphj5bsn9HHw8oAs9w9y1UGs
+z3o6N79GxVfcP1PydzTwKoDr8q4o/gD7ryi9N5SE4sQjpB3exTFF7eFvHJNXjwWMdcwDk0KCOUFm
+reDTDKXh6Zl8WcEUI0213Xg13VyOz8waY0jjiXeOhm7GWCgGaduyGgz/9ZP4zDtm9rELEtFLDo+p
+45BTBNmTp8hxmhcEHtfCio/tzh14PiqRHYtvMhVi1jkzBa6RbFyM8JoyQSirKnlBTBSPj9G4cLc9
+Y8dXD0Qg8MsmKBwNhNjMTX3N5naYtPyU9xBfLxm43rLVOSldpL7IJBhnGvEZeP2dCAOqphq86Kbr
+W1VqSBHH65uV2Q/NxhK/YWpGoF2vAV3pYtGeqYmJdRpgkHKIlij5t1Mu5BAJTYke75Iou65ZPxJa
+1wqmroRVscdFBxlYVW7pYXnp3qz424MnD1MR3Ny95lj8r3dDtOLRZcitI+Ahw0K0+GfBWTXtyQh5
+TX/0AD8mB2gPlOwY3ZGze5hyKOmOZydjb8DaiN5J+NEmRyZvpKbhKxTkbJYiMKWsz9PWx1QgMK0N
+n/nURDO0GAT4jFVGez7xkWTXdXs8qqd9VuXvaj+vxm8NE9rcWuCd/fxsf0S4RoSmDAIi4hmXiNwo
+skOYlKbYMjjJEhEeA2Wxny585LPHZbyDA7SAA32hgIHYSe+THaBhXO78yjvSWFcGddhl5WkSRCQi
+JJu4Y3TAK0N8DQAP2Wr8gzX0ZXEokCSRSORhfX4ZtkgdYUihgW9xp33lS43GaTiWg2uqvBtDiVpv
+ZUQJ5qMe0eWs/ERtPhlqqweqDmBItmesrfHkiOBGGJX3yJ1ep1LvW54gkjM2J1ty3VwfOFeuYi1y
+eXiQILJajsfL5SuCOMyzhRjt3jerlZZx7iWUF8jCxQDyACs8OvgRYLgaWts9dqeAtZHnevJl0sNW
+joUqNhh2ZbKm3Om+4fLhWIdO7B/p3oy4BUNaSX9ghfabAfoek71UP+RtJ5rahLOomhrP34xL7uc3
+qrBjEtphr6oUiHfOgc/Rbd48O+vn5A99p075Lgr3fT3ewBykTxWe269qUXrL58bimQP3wwqfZCwf
+eqAeUlaayYk5zRvQ/1E6lX2Ev8PZ7Y7vZ1pNb9VEosS/6wmuD3GCqlVG2y7YnAOqjczzcNuB5sEC
+IyQQb/ugbj8e5RCHFZiv5eCBTU4gJ5C5WSlWOVB7FdMpBDYPRq26u//Y7xFKg7rVIu7orblUXxVe
++HQBdEgeIox04FQ4AZC11O+QaxCVlV48WK6JrgIYQU/yJ5t1yccK6zESnsDUgondHcig1IdLSBmL
+S58MH9MHvK120uW0C/GLVTVV1iI7DfiSby64d1m/4Aj/JdFW0zUMUzz0C40K0NhlXXTT7TpBgeIQ
+ieFVpCmJL2+bnqkKMZT8JQ/oaueS74NxkV/BzNIlBqCi4AaoGAlAcV/Il6s+m2ApGDFkHl3ezNYH
++e58VP69WB0PPzH0HPh2wkILRFKG5L4DineVUCUs9i2c0iUGsxEZF2uDQ38UZp6F0ZnMk2Z53g6r
+k8enOXZuNsrQ/Ko8K/Isv07BqvvgCGgRj1C8nlMPkAECF5t7gCELQBePbqxpLXX27upjwYtp0hSv
+Ud0EKpvga2iAre67R8JLZq/VBJ84ASCzjwN2C9h2ZtO2s9l2jXefCJJFHjljp2vtDeoQq/fzJA3N
+u1RdgYFD5OLZjDi3O0jqpRkcvPQP8/VUGQtrHls4XH2l183FmPleTXYL6qZPjpq7l2kgctyRz7gC
+A3d6mhYwZOeBwJxNDM1WeCVberCJzewSTUuny6J8VTqmR36aXD1Q/5LAOEb6FDBlnkZlhMJGoMeY
+klZe5wB3ozLtpjfhcfgkFo8AtvcmMM9XW2TS0F0b/vG3TkA+Ls0nnrCuKrIiZvMBM5zzDRkJUCjg
+5WHKCc2L1kCo8SFsfN9AxeLITGWVvmZ44wh7n5Ygdjb2tIyskhVsl2jMgE06RVnkhSmEMgcOSARJ
+mC6oS0PMLUtmeyiamVo22xUqvvT5KldItXjVIO9zR1UkRV6nVMBpgXeip7H3ZLqDWZI+aU6doxk2
+vqvNV+WdCYQ/eqwCrjikPGng7c0s1gVBpZpVA+UMa158zqBJSHXJXZiS3fD1Ou3yY71G4H91kDKl
+KF9YoA2CMZi+rzvl7K/UK/VSnRCGHw8rP9HsOxHzoozeKyi04esnRu5N0QoGvUGHwh6B3izSdXhm
+Ahw3IxLRu2wXoo2nEMSazt3nWbCYgqlZzSpLOuYF1nNxGzrWmq5rVNBp122vyExtunGQBvCHQOCl
+rjL32JSKPJ2NzLLAOOEQENVs6QOW/Q8SXNCbExmAd/1JSfjpRc7OvTBG+9LiRITofNfoCuZIz14N
+E3Xl+pW/s1m9RbRudlEjzUX8ECr+gUhL6tMw6GO+nl6vH1SPqGojcoRtpFG5zOxcG1po5kQMsxoF
+UHttJloJ6hjW44sx22OmL6l5esnfxz2lqH8F0RWNiryDtHXbNMyKmZgnqKPdpQdU6bMr4DOAv27a
+c4cS+rFP8OiLhYkLBg6zNZJxxTkClm5oz2PRQc9ZmD51VLunCeemCIdVjDDgBhKeV6GLEnXyVttk
+OtMWPnQwcJA7AZI0cHhz+wPGPbL5O/OtOLwtDn9gjE4L8OqAYrxdBWBL9u3JvYB4nxPDp4EFgiQa
+4l3CRQ/M+4LFst5Z12BGukW5JqQEemUK/aw8BVO/4GGuAeupszN3tOctZ3pzW0semxEDT6cHocV2
+a37j5HfAAze0TrDSoWuZ/3hWdoI14d07EYMX6Dc1FR6t9aKQikgiEbf9hbWMKxZZI4c6N/0QKWZ5
+sagP59Pu0l50QBhBOWTZZipSZyfPD2mRriC8XFxlV4RRmdTkUZ8202Yhvz33vjSg1k544cTNgyfu
+uHiEQ4xwJ/Igw9lNY12H3dkZctX88QMNhTwrhF3IitTghALlH3oU1FccAqoHnM0raq7XcFl9qQ3p
+010wrI2B53qcvfqUvpEruFdvv7LXvlF6ZXa5fPucxZuEcF6yZfOXnRgQ4GLZgjNRxE/S8BV3E0p0
+Z/fc6qYI+LDUN+ZvBgR3HO66Lj/WmWq6LSL+n29BtCUQzbnao39NWmL4sGjbVZqRL8L99zg/i92m
+RboKOHeWGDgQmZ6S00/cuqSQ3nfznhlx/31u8u1NxQh17fYs4K9GRERew1eLXB0h6QzuTpM/lh5/
+NC36B6yREj7/AWvdXJ2zUUr/YnvjKHq0g3jzc0swUfuRKYW0reeiJego1lWoWSCp5uj0U4/9qJlq
+sGt/mS7bigc9uyuSvY6glkxPP9MWS2wvZ6BmY/axJgWD08CRrmxKaFHMxQG1u+HVTVXi0RQGATKd
+nvtyctfh/UePLYO1mByjunFT4QSOaVonE9/RkmJu60Ez2ikx4tS32lioPt8wJiZKa/O/5ltVBzEv
+fWjDe4gMwBc4ZdyilE53MtG669VSOxEE8oS+Wuqe+bdLf8E5KAxEh1neepNivplKuuYs0EXSNgON
+XqPgZvzN10n6oG/D9+136m6w6+2m7Ox253aGniFa2FCMH7eAaBbt+Xmsb1TqSCBeRBv+No7s4TTX
+sve0JexyjrjEuG/UVuzbGszGzIb4oVn5w3HDzjzoplgRT2DAiW1VMZPyMh73MMDcjtwxy5q2UIFo
+7sj/CB7btOUCNhVqEzymFdZX7mRUaj5PjjCcvfrAEVbsHJ8O+q/MgR4b9pu/c8xIXllVx3QBJGho
+a3E7KkwD5jZnRg4myJ6pAUabRkJBANLkRY9u/kFQN7Vs5gI3yF0mROcTGEpNbyZRNqzJpAyTFfSZ
+/OWrO3QyAGlPdL9/cZwrGSnDZL5DbgW+gvVcHKqX4GOdeDaC77nxAgBTrIeI9Gr2fZDeqZbpWU4p
+NKjEl55wdBrpNPW8/PvjbI8TzhhuNiYQ5FEGtutESMmmpJjR+otgVkELqbW63EiiqkhtUcy3a1kn
+fVKy9WFq5tJD+1LPVY84amciWU0OlnzTLLf1XSXfHU0NUnpCnjp6sA8nBdPBsR9tzjEWkrkghafQ
+Rgl27XkiRBVdNK7hP8hDEnYeCfJjtc8ebIQmQCxVcmdRjpbjs4hVnGzwEL3Pp+c8V32OhcQkjcc5
+mCraOxTudH++/UZ7VfmpgwLt4tQK+0gQyPzl7Bjou8kn7Od7yT1q6czedO3LZkgm3SC9IP4CS98C
+IxSvbbjRS7tKUGI0EK/lTdsW5/W1byDrEH85BNd4kOYPfd4/XHPWzcchnENXLe6NvHpi7z6DpWoa
+4sZ/AOCtp1+S02wn99TX98Lnz4p6WdT4smVV3C+C573sFLFvyeV0jho05j6pufo0MzAbAyM/d5+C
+6h88unzKi21G2yXR4zzaMZtgjoE2AeEBdgKuwR3OGOuqeKflvsMU9Zd3JIwewcFra1rtYRVtSBfn
+gTVtSHK7yDUwzcf5qHaBEjsbdTYmyZ6BsW0qs0EN15Swv4ysRz2TUQqzoUYtFqII3dBolQlo3H2r
+zwBhNmvKFQnKkHtdX2wX07V+lMIbF19Zr4qz6ey9IAUlrqieYZqKNpk3Zo3pNhhS/GxZxRCc1sQ2
+N2FKt9kQws4m1AOnd1HSK1qu0bia+H5SayumEzSvTBXK1hZb757kle+yruiMw4EEsCtjIDZwizMn
+3gZSu+EOe3+uyq4Ra5EmUv1k01obc/ywo75gHGrxqj3Hva/Vct/bnO5BLIGky543SzhXepeHZ3m2
+aLt6WCWEUDRFf/Eq4/2+tzH6bqP0iHeJ2tEJad7mFEblT45jU9l1d5wqWH3rrcZJ2t8tUKz7yL0J
+DV4QNoZfL6zx4jnGv2k6FcQrZx+KkU6UutDpUr2U6PijRilKPAW28/Kne50OzolE4KyY4CAHgRYi
+XqKNJJpaU4NaJKUeZHymoCvkLgKmzBGtYBE4M+lxsp57z5JlFcNUSJwZv5S5FyL06c7SL59LDJmo
+AhcPJ1fDHwZpjyNd0X1nlTjsKhQtWZJYet4fTmLQk6Rs8Ch/xm1px6Ncbq8xiEd7rqEk6UE33B6g
+KcSkMTmwP/a8SjI6cG/DdLt3DMKM1B0Iw4tbCmdTL70wV/iGcXaLClZEpyYVq+8B4B4InNYxSa2m
+LVqxQNZo4BhZT5cX9RA1pOwfMSoejYrDx8HJwakT0vmKnwS6NAwyFsyCer7vpt5LqvX6cZqwA/O4
+Qj8/CEQhu6X7grzDVMohhYplCfQC3XSSmyIic6gnxIvgXuERrDxhOY5JtrWRIEvdifyenK4ikFs9
+MhQ4C2CCV6vNrVUmsWH+VT1dyqtZMvi5i2PO1SdBpUKQKrL8l7jrXtghEjSTHdin+f1C9eS7FWsy
+m07uuGLQKEASarUC+0/f2eMuwR4ChNp0gAdXd/IVIz61R+kVMAtPVwU2WnMRle4w/wtPjq4SFi53
+me2z+hyM6CDh4PhATf6O6S6PS/+ydJQPARWZuLpSJIYPTW2j4nH1eWN47LW0Owy5ghXuGZYflXi6
+RvnMsKKLS9TqyKsv7zdz2+q1PuRXUBXx0NsLEruPqjR3zXpt6t1MfX2DtiT2H829lPS1EenFwvlI
+L5DFjhJ0hF5FV2fNxbbddiG5es0lwnOJ2eYd4nboh94+YnOqdmo9OBUoqpreuClfskC3J8PkvAB8
+wA8KdJqBN0EUY+0emd8qizgiTxaKRiS9d/UFiDlTsZi9aNu5dv/rWr0t5ZHX351oAZeY9phR6Ayj
+wPS8S7GUtG36PeVZBqcDGWlrN7NRcbbdQBYIxs2RtaY2HreqiMTGfbnhPSOEmZ52ymlc6jykmg6x
+qXBN94zbnTzD1Sn4SQG7e09oRqFDS2nSld1BLiiLXpacazjRgHK0gHXTFnXddnYZPgLfI+ZkIZ+K
+4eYSGZ+p+6q5uNxQr70oidBRBxIWIYEQvkf6QA0QbISLkdyVi7Wu5fEIiOrOoQ/hKVfvSjjE5MXQ
+nGWD/Q3HM6EPqWDSbjxtM+6OZK9A1p1TxL6088nOw7nXVdSCd/az8KDpyBI8GfzrThJAOLljXN8O
+Fnfo9TWjsfscEoQ6ZfYQItLuJXj/YTVheKqEkqQ9TGdmGyNy/RLwqJeotRcNb5MGJYDNbo/8uEaO
+14tAf4jETjGdVGWeDGS2tmnUP5buSOt5H4n9SW0XmaEuYNJb38nRk9NEmb69c/JEQwX9NOQMJ3qi
+9/+MtBzPy74UnTTj/69/82KACbiTUwj6elPAWbsL/82Kotul02bqk+xIZNC8y6UGxGsXC6+SQADM
+KT5i7VIGGA8FBLjMGPn3Ci8jZ/WivR6JzR5wE3TMxU0CQA0+fo2AZpA3Il9QaxQxGYA65VC/FCtO
+rRQNDJdFszpEj3P0UevIcEhkLeavEYdDGK8sclioYy+Hhw+eHj6oSg/RCYf8Q71uCwxoXSeYMu4D
+HsmxU0nvbuyX/a2h69yu5nQg9N1Nnjw9PE22ia/Uezap1ea7B5ltEgyCnAraugWud7b/+vk3T1+8
+/Or5612tnxw+fZUfrn1hIkskQ09nt5/eqW+fvn6zu0cwH+lOEUCBjmcDKoOLet31cJpUA/c7oCqw
+Fjh8wPd0QKN5QJmrSNtE5v6x4/YI0Ft8JIU7omiGvfP+ViGWH5QxdOq+ZblommmG3MaaOai6dqFI
+cjJGz+LnRURA3w8r0mfEDG+RfUf02DEa4ZvWbs0SgRLQyH1EY+wFgpix4EXrAwe5pSHSZPHshMqO
+3OY57cPcOiELwC4wtsBbOVjnQpOJS5pCC4bXnPkWkFUsjIE5IeplEiU6UlmTrOkNJMta9yNG+B9h
+cxyraJ3dPrYTQbEU7ocPW4gFdqAVSqU5fEL8q8pAylPE52QB70CumdiPywdlAX7cSi0xco54aKS1
+bCWI2SG8gwc4naMQ9oS1Icg6mEQJYmVzOV36EjwyyuE+C6wPM8gQDD+LBVvlwTE9wMr049Ue67uD
+MJQpwqcuViDDFPYmktlTnN+HELFqRc1UUKkYTzcwBVLhyLbKcoRRzxh30XEOduouc2N5lnqotn5i
+5ugU8BIbt3YZkV9IaRkZQkZzkt2W9KD5MWCMHi90bLqnr8DPsb8CBgGP1GvFj5LdTkkZn97nO6yH
+HxlJSSwUUweEJeokk6ihUM9wJ95An6fbNgeWPboLv8xftXC1jDzoby7OQh8TB3v2XFfcCSZrAu6O
+ykIMQ+veThAun2MJ8bLDX94fVXhiTmZmIcAkZ2hrrjKI0PfXwgWlTHknKxJ4LbFtJBDNcO5oURNw
+ZlA0DxFrNb+2hdyDl3Tvrcn4nCyJOP5gHQLRBoiqtkSMTmsaFkhYb+bLCRoZTyYlWi97qYGXMk0z
+WLfFNnGfbqyjRmno3EVwBT1f1+4a+dAWH6my1U84fsAVWNIbwv2Ot2SMJ7Cb0DiIi6KBT9yskT5E
+cwJ/v9KxcxQTttTtwuw6i+7ZZYvAnEMQjFf1DG0Xq4QwLhmVIELRwLBmFtL9vEeJV1CWLN0T7NV0
+NYSlGQWFdy0PZYPFKYbmN8RURcyx+2ylttmuPoFqd8UygiCXhxwEY2/Afbt4HDPDBeNQq7V/LJFd
+kT08V5ZRrxHWDleO6MUsE/5jEI4QP995gPrJ1YtJ+MccsYe8b6PbZLqyqW/IqnbsRcLRJoHaHdyh
+qMHOMfeR9aGZNHNXET+chHNSCL+sv3aZcDSkxZ50tXb1ZsxkjNxT9YSKwTF5RZJRfuKCVlz0Swcg
+zZkKwNVS+utNYBCBMjf/lC1YPoFLRqcX5A5UvJietR/rTyVuVqCE9J2L/9oT+7V8ixgvulbmKH6Y
+V1BkbbwAsWUQWKw3Xqy5GC/a5YX5A3zwwCh1Pg5Ck6VCtv5YzuQWh7t9d3YStJSO05KKOjrEmMo2
+/mk/d9e83UbO3oOzuyAiUEjxpRE6t4QAs+YsRTeVdCgpcmBB2avbzDW2HIMhYxsc/mqoxsztVtSo
+mjwqYVnxH7dTtJKZPukdlOnWJ24mr/4/wb20a9pkZuKZSxQaSTS07NJyeqRcyi95YtmNbB5Rxfh6
+3QAYP9Wf21789flNs3tL2YECgBUPzxxjm213/MgOdN8hpqbZzpUal1sYvvRA09iomnn2+9ETrrpw
+cHDAHo7ckSK69H0L/QCVlx/CrlnO2rUhIYo8j75DnGIoj/rnqRChd93YVfvivLhtty6ULsPJkskT
+ckG07OL3GJDQmWHCs4jayZReN6gMQfgwcECM3GjGeshhiGnH/5KzS0c0zO6TEV7luyOaVnhD/m6J
+AvvQcms3zdXgw2/e/ZvV7RiCgQMGcnPx4cXbF//uZz8zfSjOTCeXRoKazouugSdfbbhqChx2m9sF
+ORqaeRs+q4rX7RLQR86ny2U3u7xq5ptR8Zt2Adv5b9b1+3oBc/PNi7cF+CAsu3o+gLFOZFtOJmZb
+HDwaPzEi0ccnBwOTYqRI/HpSvlg2z7CHcLdBhoGXDHhlePbqm2+ev3z77DdPX7+BGu79tSlLIe1c
+xuFzmWmmLtz1HAWdyQ+ifo8w9teypWuLI0RbfLyzULB6Jh3j46nYIJhARUwS/fAT6UJm/qtYFNx1
+udn4mD4wi34fA3gdFPeHtuWRbuvh45GtvZIpekNi4e/WYN+wHhLyQH6OiEw4ZOqR32lKIygG88NP
+ZEUC/OPGBP1qz3UU1rT8QRWOVfYxqQCUIz7UB0oyqux9feuiHZMem+/rx2Ya+5uRWrgNrEoK87+u
+bj/OE82YqcDw7ys7aaaG/hZZNu9ObLOnJ6aQdjbEmBTx8nNJER6D+sKh6Ngrav79/u09+VDMu1NJ
+8NwOT+4h9wIzHlPxoJnbpl7MA5qAmesS11tXu0nKVUMEfoIzOBASt7xjJ3XTlplPN9PwLNR7GdR4
+8LMSJdCygbhG+tyEKjJSnzhS2xr3iE+9ad/XyyA01hDjtJwHmpysf+955M8b69yTzcBQtKs1wHtr
+fRuH8Wy36ygEDSYJLVKSt6LCNS2h0BKS0gtMgrA/kXwlNJ8VsVh1DofsUNoowfKZC16aQ43ir4F2
+oEzG6aXxnHhdO425tbUjuuoR+XSfl/6sHOU9osMBzLdgqAb6XKns/rq873ZZlXkOVswFf5z6i5R/
+v7TjWmYq+qTOY5XYc1rtvbt9IksQPrFQU7SD06c3yVtKGlAHpHd0By6BqlKJaNTnHeqYsffArUld
+wAxc1KRU5aJ5J17kb0jIj4Wk61WAE7GsrxOhIxSRehpm4VQ7nTcFmjWzaaGeKtUVzjeITEN7u5Pd
+SJAbSt6B9thNkxcHCpcpmpO1w+PorpNAIkYi7Pc9AU2b9s/CHRaEZ4G6dId5UKamH8VeyfYsMSUI
+unUsQ4co5+k8E6IA/Mn0Cr9PDp8k0InBAkHK9Mdz+KQxZNuDjqXb4S6XcFe634Fp3NCWYLreQQ44
+2qPDx6fFwwLPy1EcGDftc4yb2TEZu6X1O9PZYrp8jwmez0nTgT1OvdxYhhAwEGQ15j500HPicx74
+Z7yWMOMBnUFi1g9p5LO6e9F2b0jKBEcBiOB2UoZVGXHFdSJ6vJ8Bs9Q3vHgN9RjI3WVWmebi8eju
+wGKZ/hycHmT9uzDfY1jWUexy4E2BDGIctngvZYAjcwp9bDqODHy0WwjUwpE33JR3D4/14OgAJjDP
+MOlkdM+/wXTxU7FLvwN0ULa/plPJ/u7R2D58AekVJAyzk3Fb5OKsynJxJxOrl2Td8S7yiMEjhPRN
+1zs6w5uG1Qt4gije5IZewaoKN5kplj04FFGbbDa4jX9rDs/0Pe7PCWMNbIhzD/tkuSo0Sfib+jax
+8FyjGN71XLQDFYIcrxqeKy140zaQ5oekVgjaDzQlqsXd1/Tk7Vj1hu7IVleTuSjv1wPxQLWzArBU
+R4lA7dGcDAZ4Ac8dLDPZxgsm75MjRnSSNQ+Z9eDDf373P4KCcdbOzaZAUv7wN2/f/dXPfoYPhpPJ
++daUrCcTeZO4qJcgFoO5Cn/pbu1PMyjY4yO6GDY/1JKwuh1gfWRsxh+/aefbRQ1GLoPZ6tZ04WpF
+qnf+NRhY2uUSkymbpFHnQPzhlG9vn309efXyt/9l8vTNW3BagX8nX//26a8HAoeFGRX12hwWfnpC
+8hS5wYr6DefEV0yA9tWIgFdX2w3CKVFicdkuEMh5WtBEFjCppqtT9DcfaZh9ABW4NeQA+KP04NZs
+xgOtXZbpQIAUfHx8lFOKPMAolebfB++v0UfgKFZkdkwaAaTbHKabSiEDK6VL5sBCPYKjSrJX93PT
+xygvIidMkR7w33QkdEhJoEGbr4mOxkbakHHEy1P11wO/x758Zg/7qMYhu+qD+WO1o+KTGxFiDr5b
+HpC9442M+nSPxszWO9s2C0MB40mvuXk0HJYsvkvdC0xL1K30+Uw45rbGo764TjYXCGRyavZj7xEC
+UC7VVpi4r6S1HHrohupob/H8Cbkez+sqscKg6NtRo9QwtB+rSAC36H0qj9qM9Qe7FdGkdo/DV+/L
+YyoVdF+sHzdmys+2m5S85RMUVoJuJVVWYgbFKB58ttVU576emnXYX13udwOV8c1yU+0YN6nP8ytv
+ajU5DMXVKxEPhiTmPE6ND8WDF4DmTALCwWy6RPwIhPWaMp8QQCao9aDKdhBHjCXNkKkXSG30s115
+q7+ol9lHn4WokWOiUS3Y115ow5CZqmdZX/NZciwnURUnWg6vppfC+pjaThPgi1TMdYf2dTAGOOVc
+ETnT+KwjL3cz7YvQFxxUJIt6iiehuhmbqq7ajxr/2ntHtYOHg25kJ65KBV8ofoEZOfp2NOgMm+IA
+ScdFGNAB6mJI/lSdJjnL+qDooa4xv1h6pSiSx16LFa7Uyogca8B+YaohbKnjEozOIWQ7/mKeCGAl
+D4o/Sy/p1Egnq1uxg40X17cKoWZKnJ8SGyqLa5RyAekTsWhEgAmXltGv7JTQ325iKNK8TcY/q/02
+gD2GiyEN2VybUBy2Gl0rQWPW056tQ93iPx8W8i91L+DN+Y3EZwmtzWdfBnDaoI5R1eTyCgUvmo/1
+kr8esi9/cjXuyFBOeGIf7jet+YkBdreZmkPETY+oBigWl7neHOPBk54n5t+2DvZWt2A+YeQdmhBs
+gryBhyRIz+nq8Kjagw/hCHXHGVMy7HeVejnWezo5C1TZJ0zFUJ0UBCPAk9GtpjQTEBOmuQqDWNmp
+A5eVdunPoNjgqHlr01PE0vvwEUS/YW3FLxzDrlL3dn0wcxFwfDVUj7OgjmJzAxv5qxDNGdzSlH5f
+HxI65BGWd1Nv5TwW1M7Pu3oTqna8jRkfelIH7TuqYuwN98U5f7YvBhtw4rzYAoLWVHYoQY9xRqBH
+X7cormTgBnfojtBxUbzZnnX1hy3BKsMOpTVEfIepL7a21/U61dx1Y5gIYtasAKb5Y70+M+lXxbQL
+O3GLWBA+VgPe6loGrSPROEkk94q/+7u/K66mt2e1dTwVncAag/Os21W9NnfgS3OkLGpXoaqCqJa8
+TevNbLxa/fKT+Bgdtx4BUIKQQbUPZ+/wPQB9tYiE7N0DL79JIoIUfFymrgp6F1QyKi7r7drcMRtw
+57oNsIi1XgBojVVr6cmOLhmidEFzsPBGEelBLIO4NaRyQx42eCIvpldn82lxcyQKmeHNyJz+3RxM
+vOqbelb22SpE1VF3xt3W3CUGni0GDzcoL8srl5axXcGqt92wXJWfqHsyMCr0EK7To+Lg5sD8BwYY
+3BH8IelCKUXpWTtdz1+A8ma9XW0SbDEsY03YjvK3sp06biC5vW3SvlsekBtS8pJiJ8faKVt1+AiA
+3o3YiVQQu5ycL6YXx05TOOaa1hNIiLPPzRk0aZbmOtpswNzVXI6W5+uE6l1tLa5yTko2YtBjMe7V
+b5f+zgBjIBDzCwChO29mEArSliBuOjdbfTG9jfghU9YXKACJY4t1JDObGEwvode956ZtDHRkt2ji
+MF60pvhQUqoxEhj+ffwodo23s5N/nXVZjkE9iy4L+PfwccWoPNRh/zlvObJvG7aG8TnphmftRDo4
+8lIT9jagyYKHzV/cnx9CYZO7OCjuizOvp9hMmPaQD8NkEmb1L2+JOU3bcrNhI3bqIbwiH92ff4mv
+yGbASRONtB4qVde60NXZ+UlVbPlSctdBbYaP5FnVDFZFqcmZ+7h9SVtyhHsvYkdvkHMlmD5G5uqP
+AgH+mocWEoqZILuskjTNEfAMPW8uHdJj6MCYUFIc1Tds+hppek0KHc7xQkhd8rp/UBw8sNlhIv+h
+rAa9BYbINACT07IRI5CcTUEpjyMCWA2w1a2AbO3GDEIyXuPkqalFdSz7dXKTVaKQ9PTYDTKRyW5F
++zuRCZyMKAv8SkjemK1fzQYEU/wH9xyS1R7O2lgzindECNAaKMBTt0OxtDPUJhblQHFgefDlcfHz
+o0QwKpAiV7c/Lzt5WhpbDTCsyrAiDAZCu5nCDtguUsEcET2jWNWrnz96Ajq7FuwLJ5NiPB5jsLcW
+8OFIjO6pZEOHDdPMoRGb4VCACpY1icjnEGasCRDmLBmayXJvXsODyeoW6uPqJquu3s7bCTV/EGv1
+V6B8nI9lIihfd3YLE3EiNHqagl9UpWHyuSSih0D+q7inYzVHIdPlmmBxZ1Mz/WP8r9eD4eORemzv
+Rpkt5OhqcG9wr1htzxbNrHj67QsCOZyZK6KElu5MjoESSiYR/0vIJUja3bGvGMhJJYEUop765GHS
+3Y+ZlwOkntln11oGcdIN0NyVuVrD9ZrufhhPd1HgfAncHiBzdUbU1kehmZd1U3+EOIOeXojeEzEK
+Ta3b9JoEBLR1PduuOQ7HbF2j45fK3/lPjSBT4FNqYOqntPoy2ZBvbBiFZ/8Em5TdaERNQ85hsKPg
+XDAFfhnKnvseZZ2/MERAd5NvOndHpJaoEjxRLRUMM407WdT+qgYB8Q5Yt3PeEaOG12JFP6+1KrcA
+YQ8lx6E2b63suhKFsUA7YKWCJgJ62DirnYevjT89PDjAECfe8nqiBFLBMexhlOqemf9gbwdKWEgg
+bUTiyDkYYg4DluTzZqi2SIQJjDgZzJwUiCSXDOyH3GBwvMpovWMXgPMlknAgYS+hQz5/tMesCvQM
+hyJWtIfR12TkqoAoNZ21F0gaamWDckEg7UF8RtsB4XJ5Tkq2WUxCjZGSE0iVqPewqMzgcU5TMDUh
+wyBWDP6rcJ0JuW8wwqOYwCiV2b7tYrDiqYniCdIv4mZr6wDJ7tJMeY/SiOa8kGn1UKjf9gwrff22
+G4hnQyPMSqZL9Lp2OJEhhvmmtpzJa46Mmbfx/BncrLs1mPJE2yqarBdOvxeQla3k4LuDX20vLm5F
+OBfnYADPa8DJYru6WONr3UhYC0DkUoPfMQuJiYnqp+dmPTvCZznZzgTNk9XgeOo3fctvQgXqUWSl
+D4uTMFzQVqYUuXIzPesCC4MutJCKhNME4rpI66DjxneQQ9R252If5YVtW9OjYKzH5lP8eNywnptb
+MqJ8YBgDUwoRCtFDwQo2XGbviSPTNcwQXELpfRQ0SqkSJUOgrtEEPdOLmLwlK5QaL+XWssPcwSs0
+mWDE7MkgrhyGajiy+f/Djuy1J5X5XbvfE+u31PwAmxG7C3EGwZNpKO3EWhesrvjSEkGXsELA9QeP
+b8BZh8fA1RZeW6ZeRLZEfbKyVa/tdHdCZQ6Lx6d5ClfWppbI6U0eLJqPiOCyds2JZk/4Gn5qBvYV
+799UsFTvhk1mvZGxuIrMxstTZ4J5mrbwTiYcQyx9QZykXdCeJwrZZwRxlRs243qsPmdjb6ZG0J00
+px6/HYYM11k6jt/CjxChy57q94qnc5LN+eHGRhjvatPB5+MLVF56gRtBP4FnHhtN2C6yNRJ10Seg
+U48by3d7Sk3sU9oEH8mkGpALluZIQqO3I2diedaA6ak8KNBfkzXEGxnJX4v6fMND5OOeQOThuvyI
++32zsZKAFb6IuTwO7aonGCQOTevow+Fjp1WQLgIt4o0F3hXrTow3Nuqmak6qWoW7110fqpZiPR2Y
+M+myXxLjD2Yn2YxnCkJYnvI+asuf6BKnouUxe5p2qd+0PhX6W1OnNFdp+r1Ho+rN7GazpMtButQg
+fxnwFjhZ+uFj3Wr0JGWfh48GSZlYHJmkbtWMG4BLM4Qufw1lXJHXjORIWAnJ07OUtZQ4UkNNGBcd
+w8O7e5qGb1VqhdiKyT6f48oPa7xy0/XbOiSSrVPgsYaAE8UBbXLDzg70k3nSqk09iDMncBMEk5O2
+sl44UUPahNwHxCtGxcE5CAId/z2e0J/mO/XdfBdYQs5vvz+qLB0gTvX2TIzvDzZ1t4H3NzAVh3/P
+2vkt/EsPxWto7aBdg3B1gD1YTheYxa0jtKggEaltboJdAD2EP8iedcvwrRshL5sGJ85qG+R5s1lX
+sfXv5bQjjEasRCYjWZHEq7YVRWtu6dfMwkLz/IW7kvSYTfAlJjA4gQ9IGYFIzl9jmZwDmMtrq9Ku
+ZJS9wAqfjP6iCh83qJqH9DqS5zTSEesjMOSiZj6pdft0OyoeP3ryZxWcS/AD6ezpm7eDPZ2Zdtig
+tIt5fjKrvPNRsE/DVvrOZ71peR5YXXJPq6Bn7XoNZzaojEzxI85xCHN3KC81KBji64eLiQB5YFs5
+S6GumLe4LVgzLvGGtI89lCIUchuGjNx5nckcvOY43uammUaNdyl1K68GnmmmLx8AoWnLDjbOXCQ8
+I4fixifMVAe3Obh3UCW/46XtINJbRfkExuGg2mUSGl8D3TVRbI1oNUcpPn0XuvOsxn6cxdiPsRaz
+4EnuXKdDlyLb+SOSGFoY0NDXS5NmGXGdFu1FMwMKQrDtbYehxVml8WT8Z3iAYrwbLvh4TCGjUW+6
+YaMl/oMadzIuqGLalRx+8r7AWPruiNqwQ4tvBAgygRdTGrklr0dSQeHRLxksB8+taACGMU3cbQfj
+LsJT93YBaOPmjIR4lrNLnEI0xp5N1xGgQNltV2Cqyxd/Mt+Fp7ngkzgU2c/7WNhD2EfTF4e3dRBp
+Uw5oKg7Egt+2eIDVed/jJvnK5+FO20fkaBaPBEPpVD1NfNg2s/eGfZn/oNEZMLDavldbgzx2SvUt
+bu+FtGAu0kPaBvz4bUiQD+QDsGcEfRroZLoq6vGYhOHhI0DaMBv75ubGXL1LL6NVWJbfLQUeWMpX
+gVmc/d8/UBBL/8ExYTzgD8S2Fqnbh+o5e1S8Mkf3uaHDXSDUdqVUN5+oLViTQiTegLK78Hzw9xaA
+YbmzoXr4OHbBdqZe+CNlRs+EaDOPtR1fn6OMd0wT8euXfiMIc7BN7gQxM7aFR2K6P0ejF2EVAMkz
++PDbdwNwt5yumtX7iw/fvP1//hcEcxvQhyOcyXW7oFm7IYRF9CClZYbg6aLJNR/eTy/q8WDQ1YYA
+NpvV0RdfrG5XzZgyjNv1Bf79BVU+GAxnFTgpAt7be8R7GxVPHj36q8IDfUPMN2aGrefk2evBGcDE
+lY/HT0p2VzWsxTQ/NP9HEjiNCzbKCIXv43kzA6M+d25BkcbM7g9yxPBYiWG7uSGEoIagtOy5Yc7I
+q3bOT4P82I3+itwDIvq5Q9k5V7cFKozY6fAohdjp7soAL0NK2whQUR29ME3P8BllyOaG8xNXAbyI
+n0txuQSoduy8lYogsQKXAnVQkbH63FOpPN9HddoEr0r52lMjDC9RH3+G2k7CyVjRkwriN9umqMCp
+tGSqmLczOHv4MHDkgUdFYmEoP69L0B1K88aGn2hVxtvVHDB93MUqMdYDU8RQ5GSi72auNkySivhq
+TvT2dNXQjkjTOoA0UjjFY5tO9M9vU8o2gzOcFqBUaFkcpF3Xnv3j0HyiRzsor5zqqTjY700o82Ti
+8jo4kFGhpsrOA4bn4fqi1wi2ihGxFYwTjrWpDPIoiDPDFQiUxJilAqfDg4xe9VSXrDN9GBU3niaT
+vopTtptox4E80DgzNAFN2NcbEwvd0f3S0a4FKJ9cTVeTSf5gkUzvaxytraHye99ZyIcwroHrrEXa
+wndoqgceGtG0fnM7lGkY2Sp9IATtQ07USDQDr44etXKkaCDVFOqeRJkIoZk40WKE3jgicA3BNN5g
+SLLJBDAA1+bonc1qsP8sT8OqcG4TEHZI7dxbzOD+LBjYIdT4RNjxDg4FUWRNljEhHaZeJ1gbY6Z0
+w/o3PREKJy8BY0Vkrqfd5ItxGkfeJOkpS/fLV1TplQSOlRiEKN0QWWl8vysZltQfRfxSYqSJkN1Z
+5VqagBJgXorVcWFg2VT1XnNGWff1H++IJmQC2Xn+KOE7z9yS3ezJS/1RYhKYzUk+sjaBX2DOaJZQ
+WX6rFeLaBWxpXKaf31wnFCE/lM+DHOBYzLw/x3r7a75opl246tyvdNG7LbUw1rEVB/IDugtp5Mkj
+ZC8WxTBxyGr2CRbRsWfFwoetUNIF9TAn7nlqXwFnPz4wi46Be7iDtqgPLRQ1wYJnrv4SxegyqJwK
+BaBFyfOy/IXd+gWawJP9e0BNBwWbuS9isDW/hlRxb67tcZlEETJy/2L6QwO2juaeaw5rxrSymD4W
+0Ns/zmGA2+X7ZXu9HHvOa8zdpdU0e3dSxXR9UW9Cu1uSDsITrV9OsDXpLMiBElVVCZcvEA0fUC3V
+sMfvKaLsoE3G590L/Alu19Tv0H4UK06f7KkHf7B6vR0VXlZWKqP+GQxloL9dTra6iHhBMm6VRwMB
+klTKrYphRPuE78EulkS17AEkPK8XfSuxczXk2ZTjgTtL4EO5yDcbgkuDuK7t9mxRH0KboIW9RPaQ
+2vAaGxGhK2CAKGi5van3K92RQt6IMXEBjWOxkNhf+OrDmiG+u5CjKd5H5xQCVeoDAgMDHXfhM58x
+Oo9nWG/vaHjHwV9KkoQP4A0qRQnsQzrruSVCzuy7YMBzuzYCLQ0hsUUUvgNCX3hbSB/Qe9xVki/q
+AtvWsAW5nWf/DoHfKrZy1ue/WTDv/HcbQl8TSG448b3gzcdhgANnZtl89bt9k953/hOuEupDxNp4
+Em7UTfMmt4Phos9H5U2VuAgb8Y1Gw7dRNSfefdSDcs9JDNIrEe4yw0oNBZ5LxyAjSKbMYe36B8c1
+0KWcuXYJb6qwtzxLSFE5/L4E85XF9XDvlDuq8I7wArQN6+2SFcbhZZnj1Iuo3qBCzpLuIY8iQd7V
+4MPLd//d6nYMjy4fXr37fzXsHTQtl1886MDhw55vFvwOiloVDwYCoW9jyA7uzO7ccbWPwoIiRZfc
+GdRycZ4BBRy/AqgVcKCB57XbYtVi6BXQDwOHLSFrVyqt6QCPCdEFjFe3gw/fvvtfQUNtOAAcwBCZ
+5309B0PwD//n2//0b372s4GISl9jytcQDNVk/tjMMa7x9fQWWPh6CweM2I/TWURVFVzzQBxWLvBc
+L5pN54VohddQiLmEeTgejPkTTCqnYD+3WLBpsjnSLmxUOYwSgyFsthIsBt1TavTDN/fm1bxZE+gA
+eteb0tMl6bwVVmFS/c0/r6br7tKpotws+BiBz//uxds3b5++ffdm8vzvnj3HEM1muX6eU8CYqUIg
+yI61LWQ3zX8sAShqUX+sF55DMLAHDAWd8gOmkMPBZYRqTRfgtFi7YroGGuzt0v/MueEfP8FWRD/8
+RFmC48L98rw0xlfv55A0DOK0vH7+9m+f/taVG9fLbruuhyWpBssg+5u3X7169zaRnagqkf3569fp
+7IbyNHD1qpmT3h/o2bc5MElHJHnBOyMF/La07rVHlZj/+qInFZ5dNot5vuwE04eOKCovQCqkMRN0
+ObQUhkaQ5oy89sxGQCpzO5YCXBMMiculKjHSKQpyL15BxPiNFdQ9ERKyvQd3MMOVXBQ1YUvgLwlW
+HhJgEUKmqxuUKnBcuB9ucccYpqO81mtpy4zPF9vuUkfnmweVjdHjq/VX0OYy95bHgfV+N55vV0+G
+ksWDSHZhn6h+/uFIK9FZrEiXyPcIcpkePenpkckyKp5UgWL9XHpB24d6cXB9pt7qHaeynglpVJFz
+RVAJN4luDMkeWe4Ucq32XxjN8IHlLeA9ovhJlSl8LsHYiC+bGbladfyKUKV8sI5SAjTapjknHQvF
+8QJd4mONJK0XtczFwYUezFOGiYAZ3hzjoFLng6OMVJAYptowSozqTipJJilMM8tFnx4nvj3xvk1Q
+YnEdVuzmetpsQJYwO41YDnyo18cthChsNoa/aWP4Zj6CjQLaazyizVxQ/qHwRLAMDcwHbe6IGk0j
+v3vx9ZsXv3759LfPvxrqvFVqkUUyIO79u7fPX39jCvvlAHj7yV/uoVWOqnPz49foG/eQDuL5jbmW
+A3l9PQXwAQ6650/OqJhdzUeBaVDyfyUbixjqMEKt/AUR6PoUG94A3LYnYYoez91C/Yfi0c1fnIf3
+NVWFBU7E4keD/CbXjKhcn5V7cwkJXUF/jUETMNwzthIXye8PuH8x/wDNg/CPiR9cIgm6Q6U93V/y
+sAr6mzwjwjwEpI/AmYFIxJLya1TMDN1CjHgFRoW8o8phJUEJVVgeV3EYzPfcE9YYkKZKRJmUHFSX
+F7wW7mSpeGjRmFiS5rHsCgF2h7EexREYLcW7P4JoWJb+8YefaJebn6O9RC1bBA2rM37w4fW7/wFD
+Orbj2XQF4Oof3rz9v0c/+1nfpcPdSWDOzn1wdNTmN61cHd+gi9OLV1ngc8wvuaJSg4zV9s9HcvWg
+5Xpb32xevBpKOW2HAQcDnowMlAabKAkBrh4sKZjLFuJczlMOYbz5OQNn9zW+5aRemkTTHQAoe/f2
+68O/LIEhruvVYjoL1XPS8XHUVXUbp0GCE7Gdnty0/wou4j2zTrPGuT592u4wZXTWWAd6sFkzd+fi
+7FZeSCAIB0SjDCPi7JiegbmszS4NjbAu9Z8eHRVwT2oAPO0x/YYrlhFH6Q+4QP3BXpi/ekZk78y9
++APeJdovcF6ngoPQHaIsiTcFd1EgY68ci6D3iHMjTWxos8g1ur1GsD6MI4gjSOJsdvDaIHWo28kI
+Tzk4uAgd0j+4aljw6fqW7jRoEj9G7IZlK90wi+dz0FU9a84BhnFq9/X4Lf8YVharEZoMPUiXBWL/
+AFZFT2haO4pjOyDN5F2/3KvN/8/duzU3kl3pYsdPjqBPOBx+cYSfUkmXkdkNooql8fgEjtBSTXe1
+VDHq6o7uamvmsGkQBJJkigASjQSK5OhoXv0z/LP8d7zXbe+1L5kASxqdY0dIXWDmzn3fa6/rt+wn
+v5iE4Wc3LB/bfuKAv4bODh6uPw+vcq58khkhBUcE1JtP6CTH8xm4DMdsKo3C1sS/wtyGZsFuWCg3
+bRXe0H0Bndc9lS+5WS7MG6UfJh2c2usXUudlEE32kKgPXUj1hUgPDrkkgV4B7qVCDy1y0/32hxQm
+RpgqKIevF8HRQcKLrqvDLPZRyBf1AvMqoz6Ax5DtHoxQ9+u8jBkEu7/MZvHRs3mpgh3Eq4Tc36L6
+uN4vl6TTNw+/nX7/FaTwKDuEXE848OSVm0VkDght4rS6g5QfTOdye0O8HEJI8u57w6J9bSjUOwju
+7keilJ7r6bAi/jDr2KX/hv3XHVEbc9FwjrOADu7XWBsu63xZzdbZfjNkzpOiRrzTiQg6DFxTJkmS
+NyG8tTvnwS5u+iBEOzAmV968t1V1X7zqdZtIT/Ezp5drSWJCS2eU/AyXa7O9TV/5sAhYAlMWbDHq
+psGJb7b1LQg7oQItjQ8LJHvTTbvLXmqUWDGq0G7lMroIzUtiG3z5KSmfcXkh/AwU4m6MlYQjgkry
+5qaCaQCQUKB28JMDF+3FokyPEZwz3t1qm6LqcgBmC5f+tLnJbpyyd8Vhj/b9QnhX5E/MtrGdGojz
+vrvk6Z0RJf7FHA/G8OVVNFyB/ZJCvwc8ooHmCBnlucLs9B46QC3gAGQkx1gW8H+Z7eprdUPq0SL+
+cAufQDYNyBJDLcILnkYCn1bfy6c72AKWI6FZrRY9SFNI6m9ileaK4jfxH3Mb3YBZqzoGA8T1tw9L
+V0CNBDFB8wVCP1ISDoTLOxHHhi3Spuq2KavRjFjOKPJrCEINWBu72KY0YvQGHYZ7f4HXInZaUMjs
+Z26HDzM8KzeLicu6FIBGsX2ir77yeePkXr6FgtXi64CbK+PpZ25ff3BIsges4mq2UtWGagMqAG4n
+9CsQs2UUE1tDQGkF/N1CV8VCFQI4pWUqwnEy/6WW+GaK5yBM9YRVxnl5PF+MBPeArUFYtYclpieC
+iSy+9wdKmcBdcoEgYl0yqrKq0JbwW9Ek/CRyDOgytSecsUZ2ZdniTnuDxb54XwDvWcyXLVpFAUVK
+zAFRfjOPwhdbxJQCBRBof2yka4jFKUZlUMs4XFu8VtG+/BLD+/gP34VgjyfYmrUr0eP6WQDm4uFE
+MqwtTtmHzAheBpZRMYWzQsjvBzcK9vFEe57Ih2hwy7bvRt9ilAZ0qQintf+elnnFcLsRTNquSCXR
+dStwYudiQtqPlbnGmkUBj9SOoqqSyYfA5c+Z9F6yzhRmStAXacIWyjOAEX5GIfh2yO1h7YPykAgF
+IDyzJShmn6hDeayfJVAvj6qb/sDNh/PAsith2COvbfgo1jycJKY3x+tD951rswIW/01M0yJaJ6BS
+XCKhJfc+9m2N0lk+Hfj7F5OoeX6VbJ6GICUSzXsfxzvIbh4nN+9bdMXqTk8132/R2t6uZ5v2znSQ
+t4XZi6tqZXhlw34J7xtsDNOcUsNDd+lJUR63lKn+Y+8lfeRuwWTu668K/qW40w8Q3E4lGQkWTfFE
+BZD+4pOvvzrHyf/6q9cBvCz4PK/XwKHNsvc//v73rH2CT15lBQYlbKuPOtwWxsi43Xy06nVJmiqA
+p2JnzFfD8+HrULpQ6a0BkJniX2vOKcKgpHIi/VD+xG1vJoqVcWa++NeqfqwWzNErJKdpqLWjP0Wd
+F7EJDXLIiPUHHiVtZFKBA1gcq8OBy0hfgPhxaDBZT60LNbd+MTAPleOpsgi5IqAmVX7Wbie6IqA8
+dUVwhuJC+FgVk5mKS8qbwaWPeDU9AusUq6KhWi0uhLTHWtZgCX22hxdRfiRxUpMKrohrItI47lA7
+xtkfVKwnkJkBnrCUTsVV0gQsQPfE0AK7iTl3E8P/DvvyZrppOzRF0UbnfSSLDV4CoaL0U6bW7LzY
+5s68E264vnnr74mGQ0LHlWOWQliKfsN8z/p3rx2dPLd2r/+Ga4cHXGYM3Dg+ee18VTPQrdiuG7BB
+QKNSdl3z3Gqwu79GR7rE17Duh79Gv7rE1zAHkfYcQhBWVQebaN7wxQOcMrLZVkMGF3+WuPk7CbxV
+hw7REtST3qkIWYOSnVWbjetOxG+43Zzapx2T7OvW1bnq4gHDYxhwKx2r4TejNmMXr6ebgeIHm0ls
+uIBowNaLq4GlSFltgqvccWHewpx4eLnM4nUzlJaRpECy5ibzJRC7uMGeCqL/dARIMSCTaGrXk0wW
+RIxGU5dwaQ/BK1TBJBUhG1uoCg9EwxTTTshWc9UUbhlnbo9DMpxqKR2KQq1puO9dAyZNkuIrkPs7
+LPc0it3WyLAAwfCqPHKMNv5xW8X6+WXMsX86v+5k1v/MOyav12coizzlHgePrDNJnQ5UCLI/YD2w
+EgGrPsre7RAFSytUwYjcxq3+Z/wis2Ec5Ka1aCrU8jkdQQOwXPv1AhLyAQEFbV32lWP7swJy+GlR
+hrMVzHblJ/H5jqXXHH8PQ78Uhyo7xLgEc8/WETcuYebClajXJwm+htDuNI8Ihyg8sNQZ9oApU25A
+uocdrFQHC0XDCNlO5Jh05w5wTVRLuodWRD9JMPbmv58mF/XwHDIvYYJA7d/NRaLPopnzPa25SPRZ
+JNDYVc/UPQO/E0bd/4p4Abulovs/dSHHU8pH5wB3kNQPJSymdvtEbEJPbzypdrmIuPiIiUiqi7p6
+07PQE33yn8Mh/K04zX9TXoQ2gWgUDx9H/xwCXhY2GHqaW/az4/p1/H/39klpDO1O6msYGdK+hlF0
+CBqOFIt0f0fn3t7y1jpuZnp/Tdc9KMgWFWjFydxKO8wwAxSnDmCMkoLabQ9OinRdZWQthXQPQ9o0
+m6Zta0g3B+pxNMeI4ozTlGQ3s21Ghgky+ZvbuKrM9U88iKt6DgHzt/stJZXdmee3dySsXlfzGVzc
+wALsd80KrdcQAgjReS0o7kxF19VuRyl559tZeweXOp0VgJZEeESMFayWT/FNj4wiUcfPAsMMw0V+
+y1p0KImWE+RlcO4I4ZX19sBV8fhzwX1yGR8k5luetfqhYTd2nKcMn9neseU5TH0aafhNmzUg5prJ
++UFWlXKxEYEwNy5Y68WQnZcqJ7C5ip86kqu6fK1o0rKuLGF2AOdQqvyh2GZND056DOMUBkEQDpNs
+sN4NtEOprm/w/sffDxLG4qDUS/P3S3gwOPn5w4//I3gqY0SMBTX9+ccP/8+/t97Kvo/yyT8QL/9G
+ChPOhsfm87/tyC90coLx0ejBsJWbEMLhgGzshi5vNeT1wvzbDKa+rTCx2gZZUvq8biEx64bTHkzN
+C7P3p9WjESbWiH1QqN+Ou8eDRYVb8rWwhWhXvYd3Sz601eq6WgBGgc3LAv02TPNsA9TgrnmoPlZb
+xkYWbNbdnTnEzomjHWc/rf80NP/5M16pP63/FQ+4JADfPTRYK4zQnMQF5y2DetcIAav7CP7wpnJr
+bcRkcLJlvIIWkK16nK025r7KitHHujVM+5d4Qw0z+stuuKIsuV+Awg9ReuLKCrUgQYRnqg2MGCRZ
+aGOmEhNwgDWWE/9UkO8CvqONTxl3gUAYUeYmSE+3nT1M5dTrhQPvkcGgFDAnm4X5lBfBLQwC5yKg
+Lu0cM+M03/9KMPeSVce2dPHq8tIOb0nIpPLqfHzpMbdLjQs9+NOAcKW9h39OPfzXCJ7HSz/S51hI
+HTk7vwQEgMFPZuTZ5yDAenglnGGV4XABUOUexvhK/T1H5HZ5FKUJiocaoGDDaONEOVwz9C+hbQUa
+A1OfZYMjlLlYHC34QXFsxU5WtS4YYaWMS3Ff4uzB8laqeVUmkF8sZlL2OczywPT7M2wQvy7PziFk
+rIX5h1w55+PLMs4AEm6GcVfajrBgYsiABpQeZOIVDeECS8Ac4CRIR3s2WFeX/nXQP0VmbtzURHMi
+tboSE1kSwaqw+XMFMMciPnqXRZG8Z7o9i0LuJPn5KPlRGGx/rJls1d6y+w58Zc5Y0szVk+0u7d7W
+F8aq2s1/dXG9hYREFnbkMnuBKXlevHpcfAFBH2mcN+qry8E9zOqFHUEfTbpR0bNfYyrOMDHnEYF+
+FtD5hioCtHN6llItculevJdeeB2vScaH1pD7xc1IcN4dxr5zuuvA4enKZpNsNZmrtx+szu+1Tbsx
+ssn1zGWdym7nthxqGkdv33/79v2HnkVI9u2UAPkBL8owuE3WzOd766MkvNi2ohxZQ+INRDLy61EZ
+5RGHo0JRJ/+VEU6+yEcnycXu3fSqdZdSdsii0vRmVi8Ti9dx7+ijNEdRC/aYzbiagc8oMIpmkF/k
+qdA2G8beUTlDZBTSEgDeJf1SwS01E7/UiGIRJgxKP7lw1sw2udkADQgUgH/CJSLgyI9mckCAJLjm
+p1/mKgaOUryLHDC1JwFqY9bfVgkOWEHDJ13etq+H2d8jX4SUwrB1O5hSL8vGH03HbIaNrn6AY/eB
+fqjRqKf+lsG+nvz8f/z4308ZnIdg1H/+w4c//M//DYC0Z98R8DqK0IZnRUb8Cbju3X5DXmn7NTrQ
+QAGbO5XUMlEgJ2f3TAZ7IqQPjneqgIJklCrTcFhoe2+h2c3vr6p5g8kYh/gnYBkEHzTr++qJojwE
+3sY9OvFnHFMHc6kPeAxmy+/N3WKBc7jWk/l+l8B1KaRRizQ5MqUQJtxsfaA1EKkIUQqQHJ3sSScg
+7eG+9ERIeWqTpNQrdGiE/6Ry0opTsnkNrZt/GA/8gMd5F140VlSvsKbnIEarzy1j83X9iCYV3i2w
+TtW2k5Exe26DTgbmTgX0/P2u2beV2E8wL+d89xhFNZIGEr6FKwP+9V9RfYRla34EOD/UCED90C//
+tTRq3stP7S08R8w7B3I0VzK3dT6iPLfmRMGUFIlSSc1N8nbMaVpvaFqJNeB05Eb4K8Bj7hpFHIx0
+2KN9T7l0Stsj3q1cjxWqSVGZ2lmkJuAsyfhRgTM9yeVtLgsngNp69ZSRsRCP5tLMIZ9guBrxeM+k
+9uxmNjcvnlyXadpRi+G+4/Q6mDKnYH01/A9+IhYP9AiutbaENijkhNh115K0QDoAwlS94VgRvwi2
+h9nsTatMcG+M+LaeC8wQaiR36D8omdBnd2DnNDUa+km5hQCnbJxZ9DNGPoN+4/JWxIBAVdAJRf5G
+5pmsfcE/HMDfCk8XDMOj0FgZKQEpu5AdFqHaz1rK5XrCLPKekmPVNivSjDsin4nrv42TcYkruMiJ
+3mxWuVWv/4iKSF7KsWmLjuuYVcBwgknlAu0iJ2bbBKXwbAu6J8wgGKdHdRvRBiOVQz4w4HJMswy/
+zATDXZ3rftDWHYNijFyXZktMhAfr5jYR9wwHRGstqp+Yg7cboO3cTajDMlXxe9wXUUV7imHa6d7y
+2RoDfSFLc1g/Ke939UdUi8Okotc+tICW7Tgd0WxNOHI78pbFY5sVUK/MJjSyFtVhPa93CR8LPg0o
+tlTVgo6FdET3kocjarCa4iIwcQ1uhFIwx4F06whuS7An1EeN/UW7XOgDkKxQbZ26j4qevRTdRiV3
+L6Fr7m0jfbdx5nC8Wqb/toQV2zjrIq9YS/H2n757+/27b4zg9Ob3paa4u9l9xUGxQB4dlTDEY7x5
+GkM14yumVNzGFYCsMSMCN2CboLnQP1jMWXZ1hR28ukLywhQTHtOorq5EsceJ2zDhFeIyumrNzv2h
+oqNoEwZhjyBXULV+CZS73b3EhuSTu91q6cAlEenq/5sbUzFIKAf+VfdpWDluWyAK0B+zGwjEny4g
+UHDwTubtvXlqrv84tai7ytWLOdzQdMRZMJEDM68JbrAQ5yxaVPYEC/zcF9XBKD/M5mo6RB3ARCM5
+J5160brQWazGVAchMvNmuSQbGt50BbMdyMaPMA2Wagjzw4A2fluUQy/Ni50BTFuiE9aYbkhwMI1u
+Olss6CIqMKOXqP9ut81+Q6yseQiTg0+KnHK9L5nZw4cjV8fgTE5+C1565i9aN/NXuMdmuBsmeWvo
+QzXdmdU2e21humQe3TUPUg0+xC3Q4Q5/Vy039IkWwPlrSO+ILOv1U7ZZ7m/BiLvZVGbTmcuDx8BD
+NIMwQkKRK9bHtA1i1CSHEaiOXFy6XlDzcoVzCcc4Ew438o3INuJ6m/WBxU+3T1sEpbuwAzqkGTtS
+IBbt9DMjZMN0fzZliXtQhh28XTbXZ+3uaUmByeBgbRiNNVrqPImc8cOtYN7bSWYju+apyD9gGuKo
+N3SMq7h1EjuOa9wynt3N757ZvMcxUZyd1xl9cOYrtKIjVnFB7gMu1S/9PaJTMdL7WYmT6qlUENLO
+V/5hpcO3q3Cd28L0cNYlrRONBGlUSo2sAMKMJkR0HSPAU1+sdYuprzlK3IZqVJpSLRSfsbwgcZL8
+p4RLenPKXhiVP6E8m7T+6NaCVsQi5w6ok5Hrlk0DKHogJDB+15ZjwWj1F9yaVp0aMt/VILaAewFy
+xqoQ2FcrDJYTDoX9itpq146yt2QQHuvKfqM7NjCfnZsTe3E+fH1ZZg+oGl0CMwJuKg+EI2v5eb7N
+DQnRndPdJ2FFAmPPJxTnNjPXEwAeuOevR6qGzEt4aPkXZl5UdxO8C6UfdXWJCZzrL5+9bB0C5/kw
+U3+9Hmaj0cgsIbKaJGTMSACAFVL9UdKOg4eSBkb9I9cc26nqVyZj0zuWZTxBJcI/eNfyXyPht1ez
+9ewW2RbmiL6hB/azk5PfaBkcspZCDnnVmk1hKSiCqM1pHdCqhTIfgaLePdfcwZ/sNA24Z4OxzI1b
+kYEnK5gS3t+qHHVhkI25M+oVszPmY9Um4cKbZ/TDXFtfAtE3D/Bf8/c7lvvNI/mpKhU+0rz92m7/
+wW+JMjZb89j+Vl/Bfbq0zAiM1/zJC0tA3X820+/4STfptIuN0POzIR87JQc5nQnvdOHp6LxR5hVM
+JY7pYjmL9sYQCOuTIeHeWPWIavEp/uYJFa0Yyz+dIgEiXSDg2sMryGLm7h1gSL1iIwp297K0okbO
+qeJcPZZbFZwv92Zat7gBCMQeeb0w/kTVWnymP/UtwAmjJy+L3xd5GjUS46vLzQQqC0ANV23ziqK8
+JddBItqNq70w/7nkwH77d88oP5MPw2sM9z3ycAUBc5FowVMGkHPAWu/uzPKQ6Lq5licb093rWVvZ
+TBTg+A4fQJqKzVMe5fugqkdCbgAyo95R4lBIJxan6NvMdg5cnXcdcPjAXA00+5lyiSf4t7vRzXoF
+1g1oo0xbWF2C9l4roeIusP67prknwUOP6haYsebecM6PT4WfJo1PEX44ssdG1gCg01ecTtR8NtHL
+MeFVCU5cx6fBInKz3yQK9NQHuzI8yPweDEyUnMMhq1B4T8eJlt0BhZLCqIOTOOkwEvgYLqcqWsp2
+aoTAK4O92VSYLsMDwXeNnALAvakSXLtrQoNa1Y8Aw0+WBDieqDD+EtS8i2pbf8T0856fvmsUv4LZ
+MBsRoK0TYVt4XQAohv0I/CTmeyNQrmh0+ZeJhOrcX3xV0HzzbrAViTLD6xGc+rBDyAbZQBecJ7HV
+cBTgT7ZtsDcKI4AaEJj7OIcEgt4Io99sgxVSA7C3XO8gOgGXMVrLSK2FN31rK1QVbivyfva6dcBI
+KD4sZtDb2QPC/OAXI3BXWM5uAQv7l6/NprE1+hrCtERiyrPxUlkdMKsZ4ICZ4zYXECzanbwdzUW9
+IrAwxFawTbZpZ2M2KX4HyqQvIbnWYwCnbNMDB/qmnGgB77f5sk0U0TvS2jfiYsL35KXXnW/gRBW6
+Z0q/BcmdAiDcm4TOqw8f3OXW1ZzAkXZZFSQmEE82eMT0A7vX1ahuDjvenbk3bMYl701pwG5QBXbT
+OkVYrkL0WB1Hq8urYjvvwVXwANJO6h5KE19cBFcFD4Kcl5Q4Ce9ntkbvGvMXbSob2Tdf7hd8+STR
+de054yT2huPcQmam+mMloQ6Aozer0RJIFfmRLfO7mYvuAUqAD9QS4d8jwD3ZehAzkgk2DNFFneia
+PusDXF4jhJrs8ATzAB2v13vf1sX5FVGpGiXpSjVAhzFRPTtQovq0Wi/YSQZYq3h7Sqvmn4vx2S8v
+kw50av3GXalYvRXt9kijbLnsCdqdSDZmrXo+pFfxOmK09Iizi2KhGG7TofGNLsCkeZEHh0JcaLpP
+hldi5KOsmdqb7Q6Y8zjLISScms/md2b//vokgHPjmlIB8nQLE4TjFJ3jtu2OehCys6dmN7VVJnCP
+9bLePfnMcsvxHDpvGCDXOY+xS+uIE25I+tjfYfM8FXourdAPs8/OLyNH9XXDoHnJkaXSknJ519U+
+Cawl/tW2pNfNA87zGxDDiRA0V44PmTqV4gNar3cx0KHX/tClaJa770thUgp3D0pmt5F9KckC8Qbx
+2bVk8D8KQ5QWWrJL+tJQrGpOIPADHVHudpysu/N+RYAzFdHk87l/WT9FH/9X7yXNcHxI3//DCPn+
+j029yLaG4W1WchtyMu+quhc/IZeBlCyvqp4CTruEgC6fYJNszbadiyVsZvbAd0+o6YMLE/wiwGL0
+69LLSIq3kncZC0/OCUyH2Z/+XPrXFojawKqBYyALR7Cht45eOTfuMBUiNCk0l+sZuVSfjlmp1r6+
+IgFwYT6CLmCV42QCVOTFuUw6d71aaton1Tp90yQvWOmqzdztIfH5eBPkbivirJMUUt1h6bTbsbyz
+N3F6C7ToBSicce8uzD/xTb0EXUuEW7EcgYGwuK+eJsvZ6noxy2BIY/zvSF1P5cX49WUK7kKOiJ0N
+nZEzEK+ZKFLENaorhPZL6i6mgynvOPVVt2bBB9AUujhxfZrYjk38q9gX/vQg4Kk/ECsABYZzZrm8
+q9mcCdOPuCwKQqUuRqibUJig0uEnVAX+ap4TvREp1+1NtZ2yHaHgHgKkbzvk3ilnxJW03qGRV4id
+VlkI1/Fq5GR2y6PY+cDWysj0BUmU+afrl6pkqOl3LxwW1D9RI5qEAzMrBvuAFWb6WtC7xLcZKkdb
+M41wWKhWD8cO6WGXdwN+KFQPYVIVq4km9lavNj0pII4Jv0z1frRB/TaXHdq5nFgDp/3qa9+FNFb5
+SIG8jPIii3ESNTQBlUXltq3dV6n4Oa0T3BM6iJoqze2BZsK+hpDM7q9ZsMhftBcv2kuIJKImpZ5R
+vYipaaKTE67L62z/tmI4WWhlIj+oYaAKsmcPVWEo5kOzXbSTP6kuj+HO+LOLN4OusrEL3OY7HbKd
+oRb/mUKcN1iZ8M/XfHrMd23ojS0fUgZV/OkX8OpjSc7+HRfVbXFp/YgUYYfpD3eThJidQhowB/EO
+nXqzOYvLmLMdzJnsnoKIQPSI6+AXXMOq2t5W4ktSWQUAlhlZG/0dQoQgYlbQp6T6h0gFdmPC347c
+s+c450eXuS+au0qT97i4F5AVR4rGBwieyqz3nUxXhyvNW1P09iRCfI0YBUrOUHY++4zgmqybCgNB
+BREqx2mMiHYBlFX9L9UCqd8A9FkDyX9BwSDYe6b6h5jxvhtuhB405ItZM6R5LOzvN0YAEassFhlJ
+W5pRCLsWSwXOEvCAQfuItCWYAw1oPE1LfKt1b0pKea/4IrMlqe2C0gobqRxNOn44Gm/SH57Wu1kq
+gPB5aUopXAI7wfuAoiYkWykouKuNkTbAtQrd0La7vIx6o0dBOc2+qVs0oKV6yBoH8+2Umc9AI9DV
+q9iPk4OK0OdrxU2Of1rnXSXNAq1sjnvA7EDqJToOh4SQriPLXrTJF+TPzjyFc+9trT869fAB3CDJ
+6ZZ33jPb+d279x/GGeVFNL02HPJsfgcdf5mB+oVwheDYvjRHmRyCE7Xs1/XP+yoTKyye+6dmv1U9
+ZW1Q/HH2IqtGkd3abYjTzdYIt2q6ldddjoTaP9HM0RGBl+NsHrb1Am4gOoFA3sPjDDU5WDEIrosp
+hnk4tcz8I5j4XEGSnXPz4MeNZ9iwMETq66SAd2z9tlB/A2l29NRcsWOtyDO7dn4PE0macHxDsxco
+/+Bm2rHH+QyghGqOxzCrN8Tgms22uZ4hvJA4epAHZRjRewpIQw8VuoqR6p2h1LnzZF+INNZO3QD7
+xfwu9JDLi1eXyTRVtoTSqB4Ti6s+9JIUBMiXrDPZVbPtV83Dmt11QmxKUHASyE+8JL11Lkyd3I2e
+Sv8Lr/Xob7HYZqjpNcbEEYYvAFcxUkqAv9L6Wcut67gJpoM458XClinsL8e6k338aI6InGUDHqiD
+UyFtPQgAbkgpvm3U3tebgkMRX7SjFy3xvSI8ZA/NeoCBvM5xPnSS13BqnjZ82FcIqH5YpIwo7EVa
+AnW2W5LQ8qLMfVny8ijCPGf/hiTdHKgygwTZpI87T5Lfgjuq9ilgDFNo7mCoS5fPrkZChY+sJzQT
+8WZONBKTFZqNNFU5NCOpNuwzbzbs0/JZFah56KghPpfq9IezYwUZ2W6Js9ojhyhDmjNYJxCgr//4
+txI8rKtnt+ixrh6sJJnqRK/HgZa8cFhORYFhSc61An8qckd+TDcsmaPgDj6dFFX2tQ4ZsD45Lrar
+/6RD9WbwANnAAAjUDITCaQfvg3l4MP/S9mO1oNUcJJNu0cwERTsTbqnN0Wmuj7eRXqMUpmXfEnWm
+7/K3aTrqndMiddwoRGFY68bEk74YBP6dTEukqONZgtJxZ1NtyAIe20pc3tUzbbbcC/9WYFcTaTxx
+GwRfH7gW/NIJtsNn8LB5b0TP5et6CZ9H8ixV22z3a/Atm1fXhgW0Se1RKO9N1YBalgCh34/WAbgk
+rDnUbC0qpTT40qauizgysuEo8zw6KZpv6AVhMnUY7+2QAHWWdQz2me8Qo4va36P5fqcdXVU7E/U7
+SpSra1PVxYyl1+y6o92kIfDoJg41Y+YFfGmwNUJJKVManlFHFWxp17sJwb0gYsLcXNPNk7+dhhkr
+d5bN+jYPUltyU9V2G2k5gxCMhE0ekoBxBejFBjrXeOPpy2vnNE/kF5e+S71LTS7UaJQyvgAHD8aK
+//Uddeyn4ewQ9rLOGKscQDgzGMuJRt5HQz893LeGRcC0sJA+ENPC5mlF6XN6Hh/o3bUMh+985zob
+TFSaher0fsAr2rmToqoTrf0ulBceX+9R5/WEUF/qc4BuuK+I6L4UAgqZCzbNZr+cbSUwRPtJ1Gvy
+irh+YmYE+ZCcwkBzMFgQZDJAWJC0tEa4VYqWKjuYNuwCxryPzErATRtwaqcYMuXN1sgBNnEklNQx
+rVvHZEzPf/l3QQ6BgAHpueADR4nYkwK4pXqYoV9Mtd6v0NJpyXJRBofO2djQ5qQNlRh8bx4Vj2Xq
+nNrYfEy72IEvmAH2EuMhv9hmHDBjvl/b72nPvNiCxc+JMNijsjxJenJ0+U6ICfHixQIMiFl9hFrA
+fjN40Q7wq5QvZb8HSYz9bMYqVuYFh+Xx1lufsS4Vq3TDjoLqD3uf2LwjOG2BpdaaEdsJhZmKOROX
+q89vQy99R17bwAkFV6zAtKhsxEoyxVhOnyBCM9nxGe1OnHvx6nLoQVqCHprycSa2M7n5Cfqs3wV4
+0Q9RyjV47hXe8ZD+hFUJxkFwoDh4TdQ7birhz5BnHIgixxPZkamvdwG2lfn6FxPWrVmI0WRQA3mu
+CYSUi/ILAbFA9IL3YBZpJR8tjppiVTrkL9ObczDSWhHfxiDmU44/x7HYc0t+pjtBRqkWfqRDB0Ia
+En6ORCMkrfAyOMIYq+3PEAVrrgHkYtHnqG7JLEegKQSgw6FFQSXW2NxUf2zvzUqwtTmDJDp7hJFi
+eyiWTAbunVKeHgjG2HPMhmnvoUHImOsaTT6YCwi76+NWogOPnYhDTjwkoCT9d3QAPEq19gHuxzj7
+kpv9wDWoPna5XLTv9/TAbcNUFaOpt2XLYA5R6sEcE95m/WMbQzpBvnIXV5kIlhQif1P3BEaqWixl
+tmP036QnTvVB1dUbmpSeiJOT6RoyW9XtjukSK4ckC/Zy+YPZyK8P5kcPQBMcTqlz4JKffoH0dLK5
+foEIIAG3ojEBo08AkQNTv04yN7KOMlPLrOyiLKxUBtvpq8rU8BoxdwyXhN2B/YS4JLAZWvRzvM1U
+1D+AnBL+a1CVeP7QoBSXbAWnxBTPobhbJG/GlRdga2d5tN8sLC8nD72SNLVeOXrklZLeeuXkoVfS
+myKvuPfG/8YuPMbS6c3gl1Or7S9tstRUM6f+00R5WftoP4S39Vwlt5zO76r5PZz8ZseRQtXCuWP5
+HBAHVusd7cKtvRU6lAh8sQcmCDDaiBkE+1vpR0dhA2lH+C4oUdWxgBjxLfmP1VPifpRkOt48gruD
+PURHcL9xlI4nuurlwFK/kdg0lwBl0eEllJ9xdM5qtikMBwjqHNRdkCzt7TY9iYZMYMCwi6ADfBzt
+ZvcRQsp2AEs+tJ58jItqtvjkVRB8AKtkPoHV/pd6U4T1JKPzkvsLdpZX1s+5yD0tJQ7f/B3yIuwh
+orciYSzNlg+zJwLAlpQ9AXrjqSZvUwKGKkrGWkQkq5alF0CLwrpf+jCvvGm4mxiSLxs/7wiG5F3J
+A1LnPU2apaD8nWj60A6lSqvVxvQRG7cAKIFUpfePCFfa7dQjlUIQHenU200y1g0tY0J7CzsQbCYU
+1tP0omfnPJbp21j6FV8RIDdYXXfXhB2ag5phOQ/Vo137u8lJommfhDOdULYpOWtfosMDcPtOfAE0
+q4rBXMErAQA3rff50DdN+VwoY9KB+RxiapD3n5lTQMC1yOzLzsbWcz9KzvmB+SCGMW3TlaSMX+Ze
+m7UqwQ5skKsrhfnTXl1J/NPZ69Ev/X5oo5imuvp76/ApXvnpWe1mGJ2E57nxswc/eukTPWY3/UAR
+qhSSaAdAjBef8xQPqcAj0u5zdniP5MZorA4SEVXEPc7OSHR8Z+fwS8/x2R+NBGs8YxzkC5/gkM3h
+C1LYEpdrl0MDZ4Xu4hbXC+IKCfxSYLxNtbQurjnEOw2WBzbhmwXmn/KwdDmIWgWL+4BhBJcLRYB0
+OLv6jeuTNRnf1h9BKcy9NnLzd3ZIBN0MmIBkBa7cBcHZIEjNi8pkKLq5m7UVQec+NXt7ekkZC7L8
+uoUY8BTvbu7Ia5AdTdkdIZrxjMGtgLDVDXhJsY+6ISXkBYU1AxbayHlkEDqwiI1GhEeQo7MWdMeo
+BSR9lVk/Q/vgB4IpM4CYYKZ1hRjw2qIWBib3JeraeGoJbY2qbxM9oqkfU5otRmV0K2JTT7SQWsy8
+28HCRAg/sCCknWclehfgW0srgYqU0FGMpweBPd0d7PoCyMm2i20N+Glepe9TtbWGA9oqUDN1BLLV
+vkWAC1fr+zOcutY3lFAmKKT3+PqsWhLWrdQKHSM8O9Sv7yALBJrZzc5KdSpcBtlYFjeaGpOems2y
+hQqbNcK2geZn7WbLiP1eG9fkagdT11rtAN2XuybonK1F44OHOgl7U9Y7RKMW/wvcm+4EkT1DncLY
+Uk6HkQCEKSMkHR3I/gjnRx3b1PkxFGrsNgAdGCCGOFnRHAEdcGvdBmZjGA/ZmLYVRvxrsG9T6wh2
+1LrB+rEIYRov6KPUpDuNPqe9RPyhJ4fBbjsTjoux1kG6stu+3hEtEHRnxGDnLjrcc1/v98EWNEfF
+qiqQUbfw9pZVh+8tokpQ0bsdQalTqp2PYKwFOOf1k+yTM7s3iAFaSIoIVElqbT1ONpJbs+aLJ9Dl
+z7mTfCMwHhyAsyDSviQWpeQC6to58UyBi9qsx95w954KxhG8atdKFoKHLTCqC8xIqupwuJwKT/8B
+rjD4AGeaNw+CQ242yyc/1Ij1tDvHOAIfdKJ0gb7qxyLHr7lHU7c/owDnWiiVb6pTwJw9iB5Uauin
+YymT6koOYvJK8vcIq4gWi0PBbZrAwYeo5QRcBhmERS9N9EAm6aIGQe5P3Cfb+Fh6+eeTdGsUy2ab
+DdEgErMtggs9UCAMajkSn530GLkci9Vn6VLhdxePki7LCXmW46HkkvkwL6EpW9ILOoWEdvIB5bSL
+2nJ7q4DtQC3xlrKvL8NROaagpz4no5lqP/M7c+lNlKVICT8mzg2Tt/trC6Dus5+kfcWf7QgyjT1q
+/HS9FnKHRh7wEgkIsVVA0FBctrxms0Hv9gqP/6+7IBK7Nf6s7aMuxBJGR9x9yiSMliFM+UtY/KTw
+O+7oeaIPKSTdDFn1i50kgqMlbUcOVNepZXx1ANE+WF3zuwSTIq90kghFwxq8EPu2u9mQPzTPTYWD
+g+PzWxvanpTx+i+CuSYxqV5ArP82CW2sKXVC2grDlLVYZl5d+Nr58jIOzaxF4XccDVd6ERgn6wrh
+aHvHK0VDbT8nLiLaGhh6vxhZ5Wev2hOo85HXgCLpYFAsakQRcdrS7u5YPCbXvbJDKpYiTuydLSgu
+1FersaqhXkwUxSKeQT0J5NvCOVgNMepN8RglSr8zlH8RGTsSfD3cWMdF94inmiPeg534fYNJWVQ6
+GGHkZZQlJS/HCFFVM3NTQfWbbQ2kbO1kZaCkMNWGVQKuBlPB7Nnria3alHnpn43MzPQThTaMAZQ+
+6DPoCdd42J8c/rfLS+JGGiSQstyw1XQ6Zo63E6K9QBjS9okzBEDeG5Q7I5bThkl2tFIvxo5FFtyS
+W6R2NcyKoVWcJmqz35obQoRMM0wf0wZ1gpDqC0Kh1tlVvbhC8UxkgIwdeuqFzbdkJYWwU7jNQDvg
+OHSV2Ogapa2m5dw9nO8qzNzi00CX7Wp3Z+SAW/JLgOQtSi68ugr1k1pHqaiStehKehWgcY4Hcqps
+WCjfnVl92RFPok3sSWW3drZ63nWr/EsLuekgXhdqwU2AuAKQ1Up2i3h6HQnDrJh7q0VP5DmJbn1D
+lnAeke2iTOF5QiHfpURH8ygmNna0UX2+4EytgX6+XrjbLLo1+yyQ5kPkSbLI6AH1AGnCpvps2J6R
+l+0gKQtIiupbDBVBj+6729mLKnAzYP4X+cjj72bYGlOczRDC0bTq6vIrSlr6YrkBxbTiZtnMdgj1
+Bs7T22F23TRLcrABF8kywShwp6yT387Nw4Xt12X5ObyQIZfHREImKgYhSe8rbfyxNlf+rvQy61BZ
+Wq5U/g6VYzWVcxREMEkZoKvVzwsxLEx1A5hmhPdJ/MJ+k85AwBquqQupwh2736YSjFovPAsoDlhj
+fs4k9mNQ7yHdNb1JJIJCfZT7AM0rNRq9dq32XLRV5+NxaPm+oO6OrsEVsloyvvl2Bxm1L7PPsQ1M
+kl4G1VkIS2meYRjaajPM8pcCaLl7oJmom5GkZf3DtqZAARQ6qu11g/k7HfQenqwi51dSE+NNpb3U
+KPmhzVPknWRRXsKNsYosNOMQpkrMNtrNDZ7JuRnyBESgjPp7dX+FEkiy7STGiyvpzEjwmae7WGIG
+LNPVJV/hhSs5IoMlLbHqr8yTHM4CLgf1GXjGmgH2MfJBI70RwGqI8WYz3T62IbsA7pm4Z7ghIe6c
+PYlgW7D2M7saAlAIF8mKgVm4T1as0a2gaC8teB48fhO/EBtdkpwzWrBOIS3ELIVfunvA/O4JcGfz
+xpwyIKnmpNk0KqJiRSr5ogWlAI+tjKsIpyYwLYJHBB/MX02yV6TZpHkxhAEdNKb5YYQiqeOL7FWa
+JyJRNH/RZmdn3Gc7/bIgx/BWVA9/ehLOoCo1zG63VbUOsG0+4QxR4rn4FJjn0ymqSjwViXkc87FL
+ytUOL0WV99O6byvkhNLyOX4p2r6++fE+fNECyAO0xkYRu6Vh3s3Qh4mDaAanUgb6c2T1SDw5zEz5
+GcRxsOvoOlTADZjOw7rv0nBsgJ922IeYAoG8x7KjBFwvSBEAr73cNYXXL9uR8LXmGMxWHL8AtIPi
+Zi24uZ+fm8E7iHw+spSVh31FaHLoUfGWPb9tiNow+0ySdLF+2/ma8N2BhqYZuZFfmxm6f6lyFhuh
+jlv7TVQ3UT/I7o4c+SzjcC720IMKMFvVg3mrM4Kyj8uG4GBbTNXZAdxk5D4OEKDvjXhLNhlO8fZ6
+9L+hUfm6+QiJJo2AD3msKf2xEpbAzjiTBFZoxuHLezx2ssAXX3xBmj+ey/9UbZuv6o81XPooaKjF
+HI1G8M/5y1f0/beIJkSZcFmzMHMBQmjQooiEmRGMz66rM9aLcFBs0IuuDgwtdohp2J29X3mTBn37
+guprEr0CRfF1vduChsJ2UNKJkQYk7A46/RSP5Vh26vnLRz0TR/b9Zpgd6PTR9TxOjhn+G9gE2wVg
+w7Ti5VS3Lm8skyLyNeQ4icXxa5HfFK90hvSuEYmWYjq1Aat39QIQrJTzniEd0fmCzr7BMyqNBohs
+FlgLIMDMgPzCqizzyxkAXrX7a/KesjEgQl00w3hqE6q145cvzYa53s/vK0qqdre5/7vXnGXtZd22
+++rl+f/+9/yA5stRPS03zaR/o/2uXgq1/gdq3u88nNiY4Jz4NqA2cq/9HluXFB9RBSoLjG8YazEi
+qt3pMz7HnAOTzHPRjkHQqRh8qgZNMViA+IaI+vB3cR5e+vh4dDPFW6klZbhXxjpoBpZJARxjykzN
+sYme1B9+1d3O1kEE/A/oYIRDKhGWvl6GTKC6FOHITHn80iD5PgKkczMvE5FLi3qxHnzIVpUhRLY0
+MHXS16xtAKQAQ14pwOnXQTWiAaAwYzPxzZOhpOgAo4kRu4lHeyDpbd6HG+izNhxPwnume2bRLxHv
+XhBh1f371+8gYrcCL2toEonYF4aXmNBOeHS2W+qAAI1fehq3IGYfqoP0s4bf01ihG9AtDF60xYvt
+i7YE25iOmcPwP8JZGpB5o6QQwmF2z1lftZbzq3dfZe+//ZB9/+bdD29dVhz/CB8K/YmPeOCmGVPV
+SZbmZOwnDk4SpTbVNOAbb7ntsCH3lQ1pXFcPpnBy6dIgNlyH1+SjGu1nu41qtvdC4XXdbUBoSup6
+excjNTQbpFmYbkS52lq5WArvG7LXpZcCeFvD3dIlNGvrucVpc+4qZrOaQtPFfrV60kFiPtRPGPXP
+Y3tnvh5mvd7ByAi79uALmC5y1DJsw5I85sTBksPj2f4EDB3Wkso47PtRA2g3KsKsJiCxmzXsM8c+
+k3GQFFSB82uM/cyFOVCaJs1Fg0wkxgT1WJFTswczYREmpIN+17g/x0Ceey4A1LLNjhr5L7fhfQt6
+DhqOddfHUY27cIi49EmkBbcK8CKQ62C9wBrkoF+Acf7Tn8t0SgYvhMJGUOqwFu4zrEhX3gfuirVw
+W2t0ZxaIo5qV9wea/Uta+wQMfs4zasPZEnlHg50QhuZ2QvfbsF8LvHC0H1g4WgDV/pSPrRmfzCY4
+tPKAP3+HG7/aOAeQlRLOFKG5yxxbNqH6UM/qeQzi2LlAydAY6KCPxZRLb3Jz9Sewi8N4+VY7MpQg
+qVKdHys7r3kCcixt14x1UBFWlOpfIkmZm1Rvkk86XZm4D/YY2wimgJcP4oP4JlAo+ykrsk3baQH9
+yR0q78iU4mLTdN1+1GgfmOyBeOjO6HcymvYEC+EOCgOF4pR9AwuUJtn7epPyEd6ERrSMcpF1ACUy
+QobNEOAOAOcHMAcWzIYXeekFGM48VhFkSNC6n50n8Tcov1x9eXRiQZVTMJ7GqUuAHM1kQfFT4PtC
+7pMo1BEGBE+vWaaz16PXDH8rK0mz3CbjrTTFiKjB4ZSJKegMa5RyEFR7zBeSCiJjdUxvwI6PoJhK
+puMSbbv5m6j92gnieMoumPVNuP7mWKLhinVm6wyjMv2IoUgYpDIBWUkGdD4HCwR0ir0Z4FT2NwvP
+aHPAld3wvLeAYoZddl4+6GRn9akvIMAvswrrk15nT4e+q/qkbAdpzpPWRSMUKvCIYA2NmPSzZaJR
+53xEhHlhCQDoH/Ar+kt7oSVDe1v3Af3Z+4VAYskn/HfvN8jLygfwR1dp/9AN6G4R8B1TRe9HWH30
+VQfK/XM3pJ+A163UuupcKUEgYhBHOwP6c3Mr3sUSOH8JL4sEY8jIVCeoI3sN1BWuOGb6SSYBY5Z6
+fZEzfj3wvUVODgagYLGw9l5hlEZzG+Ud1fF5BqDXhhwG34kWMf5UaoQvbalhFnxvXdKj71XNUIUt
+aIYgfH3OhjX8zqbXRYBrkhQXzVxLiVB2QQEYFX5ThKAr6D7r7r+Mc0BbAuAlBOZ4pVQyY3bHs9+h
+N5gaHYkd8OCyE1gRFXCxbzHZqvxdXIAVGHXK1oujBhp3hk0sxGjUAUQug+a9Rr7/ZWf6Yh625C6m
+/2oLrmcU9ObbRZH7HNhBBccbe+cTEJb1yKREjHirNrGj5kjsKD7HgMGvhujN51Vro2q5SBgvZW2E
+kHjE3JaE32jE0KuryLGTJOKW+DGoU/oDsbQ6hEpiBJZPCVDmQKXiLv5QYad4KlSByx8ppFn3Fsgl
+jxX7NEipB2zsv/1s5H3k+Iyxm/RGXGlRuS1Tbn5eV8jGRdHEoWwZor6Zyn/A8BUydA0pYvcm84gB
+UiVL1jB7BxLEgLGycTCJIBgvC6A/avs4FPBF0HAQ1u6jLimqUzegp1m9PiI8/kBUPH6DfokJiSiQ
+6qPe9cbq+6oSfwyH9Ck8YTivKEiqbwWy2/ntRW2aewHxcy8uu6SNdROTZSAjihFXDvyYJbwgZ30A
+oLPZM2QLE0XsAnYAphRLWOGGSagvx60NMXHr5KMGlF2OdMmFx4gP6+qTgLX2XOkSKUsoBdYWIorR
+6uSwaQwtZYWiOOlKQyVD4+IJD6szpHE9M41iMC7cQ/fr5gGvIcNkA9y+mfGXQeTxSdpRLdqJgtof
+OBSeHAiRVBea3WllB9CNdg/kTy99r0ElVwXTW69W+x0OlVKwgOsrwMNAKG4131azlmENqkcvMuTR
+W1184q/rqzI7y84PLCxcesUZ1fdF5nsitmUydIyv3t8bOXO/Ie7Bm66yi4LoqfHHIwyLmkZyje46
+n6R2T51Qzh/IFzDgk/CVbbiGZl5j7Dfb/d0d48vR3tlUlIVhTrhPPs9YHtb3QOe8YCPuWH2j2Qdi
+E+Cuc/Hb2NRxfbSK/6B/zE2XKkd3ErqGuKuCg7JJhiJohShaB0+tzVHjd89PkDtN3YcCKB7kzKVM
+rebjpMTqEuh24o515NKAwcm7YHyNBJcfPbxTCBjaEZLIfoM+HJS0CVxGxNdDiow+mP98abi6r4+A
+SE2vKqa5tYzhkbKos5trW0+9gtoLTz1RHtjS6ZSImOaDFJdelqhP2S9dA492i87GfOAcosDaRSIw
+31371ALri8ixGlmCh8OIA9Jjl8HkuL5TB7r2qYigqQ7Ku5eci1XH1ElItOJEgP3o7hK+lRq7eiNh
+GuklJsQcLCGm/aNmQIJCdPinS4fBMaA2S5fXrCnpXjkcebuXyGWNfQhnNzsEKHHHw9AURvoBWs8Z
+aTsENGinbu88zaONrfRPPfjv7Ns9cim4G1zukfZutoDQMHB1VL7rrNacg+QRsdbJbGUcgztJ84F9
+M8hfBvYsFFt+oeUWkUa1rjppVzntgE6lnACU6VGgSpLp5Bg6pt0BCo3tJ+JCZY5pCKLJyCtryVJp
+EUoaQyVg9nlfuypSTLYPT9C1c70kAt7Uh1my6PFErQW3P+F/1SIiSgkdbcGWxT9CAC8KVxUIFAwn
+BV5wGdJVF0DqfL8++LvTMOc3+6WEAFM8rPhOoq1xJkSHaY7D/lpD0GOqsQgih76E0Njx5mmMnMT4
+ykWMbe9HHoDJVSqrIDC8vK1mNnQbnaNdLe/ffPO2GI1G5dVVOhI2uldjQnhBnbUAJsCTBiM/5ooN
+AzF5IZWBB0pU+I6Xur0N1ll8x2O+2jmoEtiaEaZBhAqIr0ubG0o8CU7dgaxSVxRpic0LipDok5RQ
+FAWaAFGvk7oo12/zYaw7KENcVgfj3RU1TIgeOszYU5wkgpL1ay2JiPImKbMqJGjIubuYOlsZZ6dy
+WaLEuQipt1MnmRtmOzPbLoXR55n+v6dblJSRcEkJvWVXfTwUV1fY6tVV9r/amq6upAvmMUXhwkPs
+CGgXDbW/upJumAcWL45i8/W96VXlGDeObOfrVqDG2v11C1fqmjKJgCJUVST9fKAc8RWdbL6IaWCm
+m3+AHW7ts79E8oQAdirWB1cYYQuurrxlgOAIw1OKh7+oREFuXsIVNct8pFugZZGKl+I3qtu6BSZi
+ppKMcjS+GpMCeHBXAZIhnxLKJI5dK6ZrVf2RAiDMmn+sm31rukqQa3ZCAswxeAn0dN2cWZwFF5oC
+E0oVdn1PDtHWz5+A6gAt0XC7V1dS09XVEGYW6DX9pL17deVn39jiouK9aOYdNNBzah/RMsy6wO9l
+fVPNn+ZLi4PW0TXZjmPgCQksoQbXUlCMS13mNdRSKLhVYXHSdJ/94jVrM5Ig4gHtGdw/SY01R8Cq
+YoQoT1zfQzW731Y3v1YJRUwJ6GE3i5JiORw9KP2qrG086kb3tUa4WljoQvpzJEr4Qc9ZzT5KjnWl
+m4x5Tf8+QrW7lw6+yAGmxGxEhsYg28kMIB7YyJQnVXK5JYPkb6A+8I0ynUBMhfRYGafKg7NBZtt4
+ukOrvF1BtwQJkG9Q8ogQ0+nYZkVXR1vSjk6Latm57D7sJzVZeAhqz5JCfEaZJT3rBslRid7d2aWY
+hgvvKwIXRAFqC3JFhbwnlFwkKDPTPEVe3yA6jbswIM81TCioSSuEz7EC2nW12zHfTHuNLOkByyLw
+geZuBTYfda27jEx19XqzV+CoLEaGMJzOGUfwaxGEB28kI/wtBKGWwvZma+yGbZ4Raf3MmKjf7ovm
+M4Oy01djuCe209m37LpZPB3JLHvSfMQxHUdePD+IODJEh9ZbUhnYNywLFjQYM7WdnCFESjONyLvT
+D4KvV0TAegxHErev4uD7JrPdL3ee+5E+K6k6YhuhZlepwtSCBW/wKC9TgpA/mk2zKQJLU+I4q44e
+9itSgdnMr/E0nFImA60hGbGfW/F8PxulmOEEf87Ir2zCQBPIHG3t7GBRNqKGDvYDmkSGll3Tjddk
+d1YCGcGD6OgTllYbjPlfG7K9wWu1VK8QcEf5M6mRDBxV7V4CMbyjtGsd7WwGkq5TVfizPVRCbfks
+n7t4BOQkwGqeIR4vM9GEaF56eLE3DlULNE4aGYuwaRmmkpFvBfRWJ68EdN0dQnpRWcFlsJJ059KK
+fV8trC89pKdaAWD6Ux5lwEiSz0Lo5zDY78+bdfHStL35hcu2MVXAneO0845F77zwark8SbmDzrK7
++tZcYWdLc/sshRez9xnetRjTDlBZ24xKBVAsFm80zQj923Gnp7CMdH2i2cbFWkJM/s1+GX2xRGB1
+a1PGrO9PLklz+RcywLAnD7LACg7tABM87KoCztLyIyyU5K3/aU2YH708s28I54cAlEFhljg55aex
+0xGlyLH6XBZPb74tZNfNUuJ35si1ObLdhDTXH+VDj36rN6rV6LyfWlR1TUjgwCfEhMQNx92f+Eby
+5D19KlbhiCeGYEWCHl+ZUwhJA4AUgg43qEBUGtVCa95JLw+8qbw/idLx0VXKHxH5NZu12Qpoe5w+
+6DQrQEiemS+eWvC8N3tMKoCPVtX8brau5232Mpsvq9l6v0nwOweV7hrwBW02nxKuZHXBZTdnJApU
+07o5AH0diG9kUWMaqhtrMhW70I5ZtQBK7kW1aX/dIaA9u0+fEsOVqf567Mh+vdCe8ikBMCaKgfZY
+SGiAzOdDPMWsaSA0UCMx7k+3y7929ufPA5//lIdCAKmm4bJuAmBfjhQSOB2gDbMdgx0VnymUHXkm
+vfCrwfmxWH0YUzCmqX3RdtDojQxzKBOjYgwwyj7ODwyt+Iy+73XWYz+caPvhUT4LilnxahHnyu5K
+NJRgogJyZPE/f/wUTxMe4GO/PoZ79hjQuxtzamGr4/WTQnU9NC3emNhYcJwzSJdPxEk3POh+Df50
+a5+mU/Ocvhov9tILKMH89F1xBvmvfA9sPNAvtl/YFOBEYdlbO8EMhXAF5KQdXXfALinAGpeyJirp
+/ArJb4P8qIgHpaEW1eh2ZJ79IK4M64oNFzPllCXOkOhSTVxx5vat+IbQuJyHlsLGZzQxjlMIGPAQ
+J99D1S9dMIJlatmVlDmvdfWgz6hsEV2jLZJ94b/QNZWBH702Earfam3maMaBc7IVOxXzM5XNw5YV
+knYaMIfXgGi6KJ21MuGbbtlLrguNkslkY07yDsVtfO1iM8OU0lo5L46/mNdUJeV1LwOfANMbkNXb
+W3cwiMjD4QiPxu46cdGZ6xqR5ibymum8a0eckfU4Qp++S7+4YSl3cFcAkCgBYmWP4+yR0fKiEau7
+gAYkY9PUCN50h1xzJ/FfTBrCwjY62shZZEv2OqsYq6vaDVpgKNuexFiK5d1llPBHe+q0WsC/4XAa
+9kTIUmwC3tpdTEAyTTUuyzCbqpsc7kY0OuC7ju94aYscncleMOdBSIpZ4Xfk8/OyTKUeEBRCh0lM
+ItU4KYfi1l1Xoy2jD8aZCaRLDqmwTEVWYy1LrkWDYg7MFh90WB2ut9Xs/iSxZxJA4dZbIDxlqczm
+Cn3XOwLsde1PegwzG6M8+JxlAne2G/fBcFM6+TF8i4TYis2K4R52dLhMzjnXnJ7bCBU2Firo6OYu
+8wgB2jaGQ8cNp8nkMP708wnI7Wr+hEKMGfvTgSfZMmV3PXAfDwSs5uzMAqFe7DDEZ3d3OcAFAbVK
+htD2hpKp9FASHBndP98DZfUPz1BoJ14PQ+9C6LnJsCbBPYY/etJhmhMsW8ciWqpmkaBJEFFs2sIO
+OfLPvwIIIVeFKaL+Cm+qZWVVzPQzLGA7iGV8AM6e+9KOfdfseFJ49LsHHfhtYUsTlhbeKt4CDBVM
+qT6KNAtWtONJSUOk0ktL1/yKvGrUxHXDtnrIqynY1lSfY8hfW42EeVtT/1Lb+dUaIJn3N+Q3jLPp
+YSGxU60PH1wTHgimt1gTm8EYiOhAucA37AvkINnRMIgtspn0K8o0oqJlbjAqqq0cDdOZSWwCEDA6
+Iq+NhU+0kdRPJccdRVMJj/Irs68YTYEHQM4ctOmMUAw+KPs5jrazn+Ayoj0b4bxzgtszp0IiL/4d
+hHJQbCViV3E/EHjS+qGDHIADBSMUep3CVYPormeU49H6SnbUYd5QCg8xt6IXlgXLgupaJXQAlTN7
+AoJDG5BUnEmWXONUCg9uuupq+a5ZLlpvI5AZ2e4ZlQD5K4kw2lbL6iP4dVKUK+DH1/P9crbVVuo3
+lAOvni1tokZbaU31ALzN6hrxWet7Mj4zKugZfHsmZhXwK+VP+S3kVDFPz9ATcqF6u2zixDpmSc25
+3m9c/kVPlj7T9WfiDD8TB/2XuOsdVi9aGvhD30NWDKk0hB+s3xonC4TXOmwxvWS4k5rVBjBSeZJo
+PBTeKA5Ptr/gsabz2MJLmXcpRLq6epRVo+hDZyZVYEFqg6GHGzIL3B+OQ/Z6j1kgaNg/bugaxrk5
+U7k+W/Lw9QYNMcfunC2Gbv9jXeieu8SLgcddb8ONHEQmAwtmRAHTDHAxDFDCCzOdEllMuMBOEg87
+ysIVnywPLzrDo/3sEqEy2mU96Mh9LdrCVA7sRMBtBCrUVtV6s9zfmtkm56Io3BcIQbU1VAGKdpSh
+hkD7m2qD+OupIRhTPp42wWGRi0OuywBh6ilydfLystTprfV4R9R10U2LTUFsLrC89C5XhhXXKR17
+zOHMpvOeZ1EAd0b5HwguANOUqyxieJ27ZWTnPFfeakjLI51fUl28ON7HzrPZ6vxKQLm1oyJ1MV83
+DvErMu9CevJeRSUKcRIYen4M3pX+4H1Homf25vYy3rOWwX7eF4WhqlGbVpN15y1O9Xo7L4pOJvop
+VUrtepZ13Z0TFtSjvsH8pIZb1CV8xD808x+KUPci31FkeN2T4YTLFbrRTzTjeEJ1GXq78SELKLVK
+zuT3+8guBKMrjzjpF+wnmQIr8L2IHBzs6SkZzJDjBZgrSXrnXNNR4qyBXa7nmbmtIJsdcjB830ji
+4spWKM7sDxWHxWA4DOWNR1TWatk8RJ9j85ZOCdoW0sKpM7wKAAc+980q9MzZvdQ1kCJIcTYh78DG
+rilRygeq3JBAEF40CfzLYbZgOJi1BllqnWEF5gtNFJunFGafHcxmtKi3aGErOTuEZxAmbUBSqQJm
+/g2Gt73M05oV20iQOWmjkiWF0CVaVKKJi/MOReuGudV4rSXOUsU+mTVCQTHcNXZP8W7xkm7h7Fvu
+IHnngjmIShS+2Oy2WHJj0Vi7dq43DjEXauZB3cZmVoKIJhvJAlmWlXxB5IWDNyGpnx/KFDInvrlY
+cgbJTmvd6elgcBKJgHALqC3KyZaSSQzpXXpX1ZzUj79P77zqcWcknK3dexf1uP78PO2qDb2T8sgf
+yB8c3pSPuzY4BTsG+X9SUypWAzuBpZdo3VBJlGO8VfAjPbVzFXiZvULlRMAfe01iQigfWL16mjib
+RRpD4/ESsmyN4mS0srNUEyl2Ue5Tz3eVbzhS0uLt6KEdklQaSnRKMmozy/TcBpF5MboHz17rSX2G
+cx+hC7u5bOSagYQamFdS18GuDr5W6Olh9jS0CbLtGQvmzlvSzQZNKHzFUZyOGeaWHYBAh1tTnulF
+U7WZIM9qh0po6WxRm6X4WG09BJHZLQjvcDKr2fxOD1x9X8in6AYEinT4YWeU1BQU3QhfvkTfWfDn
+fzQr35rnSm7QeD92EUOgHz3/wsdo92uPhsW4Lgh3UG1vK4IGxPzw466E47bIoYzjqU6lD3OqpJgE
+IGG4M+RhJ9NRlL1iJ1jslihInjkp4eEOTFjyijOIp/oSTIarrPOD1OSl4ju750V59FOW99edWfwO
+0sMETlBXosE06E9ifg9B/nQj8HRLc2kfqYPjjnaGdjgrOzjsflnlJGRYJDMygpIIHyB6Wg1E5a+1
+lOhJBexsb7ZwJ7zSSdq6ljZH6i0BcFO1JPVKaZwgstUG4ZwcWJAum5631gRWcMSK22ErL/gikRKR
+KxxaHEDUfTxDYqTgrtDVvTyJmVPR1UKGyfrmieymtOb427tEW3AdhShfDzeC3Dm9WPL2YnxJZFyK
+TYnLwJDxdkhKLshJjymzwm4xbPLUxre5Dg2RcwrQDllulAA8ULAKF7oG9foS+4lMs+64hpw9hSBc
+761VyvYkF2rPwakAwaNCKPWjEXy0H7QO3a7dpUt8moRJY8+fVg1DKsK1D3Pix5kZNsxPu6wt6IhD
+2Z7zNgtsa+EghXvl72T6Rz4AO2m9fkpTa9uUJFqYdFZDJZ5B9Y+Y50jGVerDM+icH8uBPZBUJWHf
+y7ASnYcZw371eYEQBOGrs8IH/CLb7hDWb80hF4giU4ZrqLOuyioW0luVUmW2Kjn3RUyzOlFPEDzc
+OZAXha4u8KMJ8AZBHY3hZSmcQXFE6SeKRHFRiN1Whos0ImOxLLtYp7UOZAvEeCeuTpvtlPDmkXO0
+SWIEr4sjk8YnkeDYl4DFaulZ2uNWetQmHV+M9FeRAkMKBVwvALXa6qxY7FkOetVKifKozrBPyiOF
+dKEC5lpSH/tt05BF62tLyU5N7hOYdknWWMRVdp7+04QNjQFvQhNUxtapwvyLWBSYKyBM4YZMTZXl
+otvh6nMyT/q+SozcM1GSKcP+eDMqzlRUupOB4VkIlWz2xFH3y2cyxLaP5szM9kvR9FNlASKOVm5L
+ggfg+6MuXAbmB+66yhlINQ+F/7LJq0IgJC3N3tbzTPLlkQA+nfIuMqtH4TC4toDevwev3odto/xr
+4j1hbbvHbaa0HUWlgjm0Nt1R0M6Q7ynW5EwcndeHYY1YUcN/Mbd4VAWY6WK+e5zwt/L3cV9bGio/
+yg4GP41La+4d3oZ8Z1xcJimBYlzvZu1UkiKnts0bp8BBqQv3zbrJ5Bsyo5Ny5MZsl12iDlSg1Oh5
+Ylaarf4M8atWMYahc1VUjzX5s+q+oNcDKOUQ9kT0vGY/JiqggGVt4McqGEt9gRwba9vb0UmXuvLi
+hq5UJbvYOfWmMpj39M6XWrmmEvoZeDerVR/R9BW1F02epoIjvmXG/QrNpK8kqAs6lcC9+mKpr+Ar
+18zUAIKuVREdIhEoDgKP9kgz3gOD0InU/EzYBZbrPdtQvHRcCpXzTKI6XVxbOxBtCwiKhxABbWL0
+z1BmJBX16sh36uwpyZqKBtXAk17QXIScGPt0JrlZRaDsQmsatXTgEH5AKWLBVavmY3UMACZ6PTo+
+TnWA0EpCx+WkTLYcUYO6LwnByMUJdQhFGJQCYadi68a8Euq3BrXrjr9z5TnJvBDgCeV9F695nfgd
+TyyB/0QpeqMKdTZPdFTO8vFP65/W4PvZQhww4VCBy8LaiEslFKC30pX4jttQUKMFKyAkuKWdimk8
+FzaShZLNDu2NyjMEGIz8ZBwiV9WtaNearTfAUE/Wsxgxh9feTijt3NQGapg+1qA2oBODkp5A3Kho
+JCUcbp1uk/L6Rsl8UcXgQf9BhnDIdvO4m07zBM48fpFkd9N1wdNcKzGBbMLDwtffW63QMack+F4d
+jB92zebdDhYjyVpECoP0Hfm8tUILqr9WVikAAW0r4gFmFLw2wJIDb04SAHUyH6lkzpgH/N9q0/ki
+kpLAOMsh2J+urnAQV1ejLuSCd0ZmqGYLw8ybfcBofWT7Ar3AunK+rS/tOLrqgq+XFZvCTE8g6IZg
+RtFpGVe7QmAR88co2mzdJ8Bh8ATu34aj1wGOIFfMauw05aGJTH298XK+t9HQ2sSdjph8s4j9D/l+
+y8t36zo6cnP05eGgPphC/AO5Jr+I5ixdQZ0Rzw9xoAzjXnD3MUGAHpZJ4hXBtHhBkfQJbJgE3XNA
+w60oq9uTpPuchYOHbXQO9cWjeoZH3STlXIeVyBKaSuSnX8D2xHUqWlyBznAZUJ4Bzh1U0sfwEM8S
+hkmSrTGoJk4dr9J4SFMEVRUWLMoIpWZdAbhKvUP8SLxM5s0KLjhIZaVt7UmEhRSfxtgKqqnNtjYX
+Zi7g4exG283tA2YfZz9UkFifBnoFkyuoIrRSTPi1++tDnMcUNXTVgyjpvG3pt0VfX3DhSxdXG0Hl
+cpEySqIr268PEA3XT2oW5dAwi7mLRHJHR4t1bYG6Lomhou0/1xA/J67zhhjvA+DG0yzsnvWnwCyj
+D8323jqE5NCN3FQLaqg2qGfWckpScHsCe1RcMbkzrmZP11VSluM4Wb4QmxsB0wq2zVH2mqj1w/Zo
+b8Yxl4RNMTdyfHi3KRS//IVarG4jtt+W+muEOj9zIYb9L/8qVh+7PZ/J5R+fAF4RcaVU70knrahF
+eDf56HoROKAPDHgstENhsR0gqAuTIQraFPygyxt+URTOhFAfTmIEKR2P6uFHKbZh6DaDWVmqcTot
+WdRK3ZOcIdXdlQotgOy86ABBBxKSKY02T4M2+zjbOl/uUzXfEvJdt8i3BbHe22q2VNgNXngSXWSy
+XrokCj4PW7gaF0b28ebYq0//OVKfiKSomIxIUPIYEDcKAv13w3AsyasTe/RVJ37hRpWs+3PS8Wkn
+fR7iht25wE3/4lIHbaYHeBIEBAT4OIUI+Obv7ewBfrpRlBevLmUDg/oljBugLmEC7akUGXSeysSX
+U/vZdCp5YEvMjkXjMryjahpmRP4sZVpVkehQkbJNBn/h5nd8pj679ISJ7m9MuRNzoSxvGyMT3a0I
+b6ohz0QEOYf0UcncHezaYg5fzZqdbh+M+nbdgEMQUhnn9en0GJap/mKS/TIaMtbCnvvgtripAS7n
+ju3alFJAQ7WYgb4k9ErDrF03DLd74l3C4E2CHDtsarSeE5outuWcMltgcLCWE7kyzQ2fG1YFC+Yu
+WhPDa2c2DhIkQaqL0HpB7c9V2O5xOF1br+rlbDul4tYQiv0JH7bLem6qQ0sQ43Pae13eyUmmU4rw
+EDBDnNlA7SiphC0pjkaSgMJJF2TxnB8ALqPPpoXdkqRwMLu6mUCHHo9GF5aTGhaXAcLZUbN0oEfr
+vo7oJRBBhJKtdPONqmn/E9nVBZo0ddWgKvRGAdg6Kuk97CucbiBq+CNM3GlLoFU9HGWpXVx3r9OO
+UZ0chr8RP9cDvPB6Pb7sZlNsB+Pj7nXu/Jmd050Ze725HKpGux3b/c6IUliRGerV5zR1CQ2XfyAT
+fVcFOmmetMtt6jo/9xcgZFyOOpROQ2Sx2ogeAfUfsusOXgdD5Y1/vW1mC4tuhVTVKY+Yw7Ek+lfZ
+L9Hyre9iTzSYt0lXtQOMNPeX6Zy+EyaGlMVEC4niI5K3R/IyYwWLILIQJJvkdMH56twcQKZMBb53
+1qOhP+hB5lBsfRQ57tz5GL0KkONMd/My5crKWrVk3+OgzbYDBlj3L5ZK2PXMb3GYqaxyyVgo+MxO
+2jPdQOzAPVe15MS9xolDZvm/snmz2TC0nU7NWuxP0CkgW/M26wnpYCzb+PMjzGjaVr5MC8lLfRel
+Gzq8K8wff8ONcRrtjF+KFJbeEafP3hKnn7YnTo+YNm2bFJQ1FmFOD0/fae/8nR43gWLGkAIndHc8
+guKMsoxYrzieD5DtlOCTdJqrb2J3M/iujCVI7gC8dddW5KcWXU5eEdF1oyVph3FEEEWL/i7wDt3s
+F+oqwcxxckt5Z4+r90aXc/44pXzhvO1uxM4l4rqZbRfvAHpmu98oZtGldOCyFn3S815vVpUFsaHw
+AEIbohBigRgs0G3nxtC/+6xeIYq4aF9VZTaemHR+CNzBKsfIHnaS8t84+fmffvzvjEg8XTa3I/P/
+n//5w3/7P/27fwczB9LbPDPPbtGjiKuZLUHhDWqVBQuBW3O5zavtS2vpag1tBNSbE1CTmL4vyeqL
+zk1vvns3zgrSPULaE0wrAuAl0A4o359+rXyXzUOzEX+Pr9LcH8RtT0z/ofs/fPjq2x8/DDty2Vzv
+b48pCCp8c+NPfDsyfIXoEPldtVw2AGL20GyXi9wvwh8nSqWHhL3n3xYjfgJJBzt41aOHEYwD1pN3
+0eZpCClpxYD4DWX7K2hHdmOXSUpDxv0NLDXy1gzNJoENzVIMpaCMC5gadb3rAn8VoDjAn2x3W4fI
+5vlHkdNjVx0XL9rLDH0+8jFX53XYB6Ntd90KSzLTUWMoqjGcCY7A1MLz+R0fB39CozR8ZtHtyYFD
+wbqC1pDuVjIwivEAj4ZzdsMUnQM5bQMLya+0DWg1ai01aHeLZr8bKr2bYei3hEcHsHO7+Sj7EQ40
+hu5CPCQkNnrKvnv67unsfHQeYOzwljHLKb8ohNMw9M0DA1nN9+2uWTEI8AnfkDjjry2d8GFYOvcb
+/4I402rL6Q/BdOP7zouC1H03QOC2EGZS7VTSfMkDAdQNY+/7tnZ94/cu7WfiF7E+0FPvebpV+41f
+9nj8ZCYVsiuzFy2o0TP/MNgxeofBOj2Lr7DvuWbGPpgOMBbHvEhlLPWlucB/0m5+McBO8fxwa2ra
+P8/IS9dbGJ1zgRkuri+W3PmFHhqaXWRcnwUEDc4qe4HISbSWuw3ktN4CWJV17Cja0oMX8KzK3rKB
+ytl9FUx8gODTbSdzxjAh3X5VFpidCdI/0vNvsAsd5L2LnHedVQCuBW+uPlIZ1aG1VZQNXFUyJPew
+gx0ZQWKHbYhMFRfbbxZYNVbqddxbAUdnusAl7AzYsHKXKdeSjpPAFspo4jc1GH1N8VUDuc339Q4h
+UW2VhsQ+zJb3CPdpY/6B7/OrA3yY2fx+SFDIrLNxy+2U3XFfZylCBHuLxmdIfnHDKakEZ54pBhOp
+MpnNDfXGGC41W5sNCBKnncdh9mqYnZ0f4xXXu10ubBLlcX15mTK7pr2Tk3Jm/8Y0uwIhiWHAg6Gl
+z/Je7Z+2c/8M7ewHO4lyStmlIYcseKgWMcwAb8NFkfDANdX6vnQ2wsU1b3iXQ1edue8BNo2u0Oje
+K/1cCIkL1dKYnkvVVjuNbstUhI7axtDFMnWPfHjaSIoBEJJfbIU42pSzEH8KnyOjZ6ssPapqV0BR
+VouRZjb99d7MTr0e2fivxHoqJ1qZHillpgcvjUFnslI3jLTXIJi/LdIUrZH0JUO39mV1BiIiDtI2
+W4Yp7S3B/rrWgzhAMO1puyQEIHxI4np4HArnhw37G8gPF8ncZDgOVN+hxIhmBZm9Blho4K5PI5aM
+iDcd4VwC14+tfY7ou9idmHMyHfbuuILN+vqsdp7SZI2jA5/a+vn+UjdXZ3266Il3h/pZFtIVuMIn
+J6cnp9mX3JXW/GU9QZdVLHSAuGn3BBr+KZcz7KYCt1MpULB9DqFqU7PKX/b/jdv4joBxGXXOGf0a
+bd36+MDnoFQblJG3HIKv33SybXGK+w6mDaZAk1dXf7DL2FW/TIkV7iOw/y/37V0yvTNVi+8Ly4F9
+B5Bj/SuDnl4wDxTAjv1qSdKDr/uddQUmmjR/5Gyb0AosquXsqVpMKUU6F8uu94Ag7FIlhi6YVCmI
+7kFCCTtc9pWFWZQ/w8W0jYBbrvwOwxL8/qUmFyYIN66WU+zDgBdd6fyYPAqY28FsgM7DD857GEIj
+oZrCH9QQ6/jbbcxEYnFQTUKDeXlgPj5pc0NrwQId3tMwYtI8BReBv5ndFmaqDoQ/IPTmUTehh0be
+fv/98xoxV8fxtwlnDXoC3ePhFtDjA8tmi1m1atZOIZI4leZqA6+ZJ/bBCGAZ5WVSXaA+xfn//be/
+nb57//W3gcO4KyU///o70rBFZgZHNGz+p/CaR74TZ9VMKPC2U3iDUHJvv3n7/W+zN79/+/2H7Mvv
+333IzGpmf3jz/ft373+bvf/2w7sv32Ywruyrt//w429tQiPqKFUzyXIYPURP4YNYmy+qAFrFIRUb
+Wu2+NwB+W5bHmJzRZ/Pn//Tj/8CmAQYxrLY/X3z4v/5P1JAj7NgM8cuvn+TiLo2ct0FFK6KicH4Z
+SWGBWYL5twA60j5S2llqSZ6Yvg+zppU/wWFtbv/aVvKL3dzkT0QVIhPCGqVBMSLwn/RuaqEjwfJE
+BThv1TB7+0/vPky//Ucq6RhkKYfM29SvZw7eKfz+d01z/z2Q9BNr9Zlu9tfLej4lN8ulO9bfrilT
+OzBA5LeH1VKkDEYpgtMVUJBZZuR/TBG5X5uj3UKL1s4jbgLK8r9ES//Fq0tE75zml9wbhmWYLRYN
+WmgKBPIQrvB22+w35MfREveFT4p887Ssr5mI4qORq2FwdrZuznZNs2zPmvUZmEp938AZGlAmOeZZ
+mO62e8hCuoD4mNxQYviuWcNXuRVBE3c5ZDqZFLnFysPvwBLz3ZsPv9NO27cNKStML2/vMKxxhVl7
+JN6o9CbC4YN6yKCnlLaAUA8cAK6fzGGU4frtZveVU0aQzpiAFGR/TG/2S0xxSCZE2fE2esQ72clv
++NC+N3skOK9hcbjSW4KmnV2j3VoS2Qk4reQByZt5rqSoREXhI4vumv8vMK+YKhDS2gD+rDerFvWD
+ayj8AArer9/huzfbW/vaco7yptMsE0dkdCQq0yowgBXeVpBr1aox4JGqRJcwldBZ5g/g3Wi6US5b
+ujRFU0/pT7MDuTj8FwhUCNucDCX06qPQF1dhpODVpR3LDSA+X5rd2jlzxOEhbHEbizcDJFIDcRGi
+YgGXNV3Uc1Of6Bq5qo5CEFU0gEeRpKNwTg4r9hdOX84VBz6AEAC0uODuX8YGATcz2Ytt8dlnL7al
+S6c4pUlZ2A2oF75zJj2k4EiA8N4CTdV/h4EGkCbR8+2hOmR520APHe41t5dpryVCn61EaksNswKU
+qqKBKkP8JC4G/bJ/+M5H8hh2ii0SINSz1CwleV8Fw/NVObgCNPuwXgkwxqk6o15cmAZKQtjEuwbB
+Oz6a1bcjL7vzkzHSmrs30/48wn2pTsrBEsSH+wpWlS7SgjoSqKzUGFQ9RSpxsp0ouxIUM8aHP/6g
+I3GEfBEcRUR7nzjORe+RzWqSqHIYcO5gHZaI5GkeBSkGWzXAYrATEW+MDkQGCYILxlm3CmPbjnXc
+kfnZ/3a/PjRLqldijNGYHd6CW9hOWPbxSQDtRM9twgzt52dm3OxV++P+wfJEhNEAXH0i8zG3FB57
+9D4gl7BW9jQG0UVpJFrBj3kFBmSfXN/gyY2a9/Mx9/Y9cN3ZYxZzU+e1mTP4wzx7gLxKRhxDiCkz
+u8BYPW002DF7C0EyWgCeMrsFHGlMc3twszFtonZVfYAGzpcS7Uh6lpbccUAeAVtWy7XqZgzn+XBX
+KcdY7KqNn4EkRaB70PKibIMXZOxtXxQ4Z2UPjqy/pegKEB+23nA3d5EV3NxWrnPPmAGC2ovUC3GC
+5jcErOibCpEQOXYhuFDUZcKo37ENRqKQGKecc/amsOxSSLXmNWZkiehBLzYmEvn5su1NsHkYUyJO
+8AzzgY3orJDQIqV3TiK4DSOicV89+QuxjN15ESxBhj2PL7+aAFKYeUrPnufwCqXjpfddkWaQ3YBW
+2xwkMOKqGZxObeL5u3phqJXpNMDhum73isnaQfeVO1HUjKQBlVbte2iN9qcjO6DWAt+MGwgxKM7L
+0c004E4pYpAri7fjkMPXJ1IEedNXicSx68XQroRLHevW5KIeX6aZB7U4k0nCQUTpuszsFPn7N9+8
+/ebNhy9/l1vEU2/Bguorcx0WOIqhmqMhN8uccdlNdKTZL3/39st/fPu9tIzplrHa0ohzZ1/kfd1I
+H5poYN/2t9HbRK/LNO2mzyHAcZF9HuRi6j7rfufiec9B05LsVXrArM0iQKTc5e9G3wdDJ2ivIYFg
+Rx565LnwNRtoLu1ndPjgUY7jvo1a9lGPzg2qsBRws192OTB4YA82O3c4GXOSuQBOe+xmQyU9o8Td
+nD7jIs84xzMoWB9Lp9JyXVJhBv4y/LRm9y5K81xGt1p6qpcKrJ7uPt+Yw0IMBRhgdMtQ1jRBXCFC
+L60NgV4B+5BWh/zevP0S3nboUuD9N6DDRBa1owIukK4B/gLoWP/r3WrDL2CHrTYfglJe0Kwte3Ky
+rR6nzX43b5Cn3SrOqPhp8XmZFT89fF4aWYDluf36e4yU71HpGFnUVOiSAvOvxZ5QomJlDyl6AggW
+qQI0YfwzyhUsBeRnAGdDVpuJntFC6iqjsmB88ctKtUFZGQj4QvLPAFGZ57NNiUmSqNdCNXujjY+6
+YeMNEV206KsIZeKTLs3hNNrVBNXTAg5LZ4Jz+S59Dyx8WJRINqfIPNQD9FeElV2YopcYz74rvIDJ
+BEFaiP7GbeO/XIPovf5SMlOKAo+zRlk3zlAL9LTzaosAXiQEIy8DPH3CyTEbxfDOjO1EEdirDRxV
+kl4Vx9RW5k2iY1T+zkg8SyNnVGtIQ7GrDJnJ+SSrllk+lSoUdkIgqQaOcOevXh3j98Zdn0hvR6t7
+IDTYKqEI1mUSaMRQeZTTRm/f/tO7Hz4ciU7tMwGUJlt6QD8C06JNBRYp4gzzCQpwXpO4wPwOBlJC
+IPvyAaRMfHCEylfQj/DP8hkOzm6HZwQRwpAgNLChr4LB2lM0ZaNy5OkhBpZZx4GzGQCRLzedHiPg
+M9csF6YjaW8Reiez5mVgWJrNyXGjLZmiUSNwDdlZlxCRu+B0xv4CKqUfafxQsIAec12i84vppCmQ
+ABZcq0gwUwIxLMh+MkiBqIsL8xpVCzdrD6da/Gioz2UHg45sl+twQi43W8KIVoEFw4drVwuBEV4D
+IgODJEg8QN0HmXWj70EV2P21TdSY8JCi750FZFBiZ9VWhrAQ1H7CsKydxUNvp0KjwC6jaesoNOx0
+fY+ELarNH4LF9IFySkrGjRqcH7OJpSu0sNF+Tjq2HHMyYHaXi0C9aJ19hhCvMmRtIUN5jf0EMCJZ
+01u79z0UZ/Mi6IHCghWv0Omu2QGGJ7qOEG+dALnfFPEn4o8P4AEd9fnUmvPmyZwevoTsaJXu0qbf
+G/JwfMVXmNrTkQ28jRN4IEj/gnXGaUARYbSuHgoznon5f3n0ZAZYu9h0WY7ILBv5tUKgFXSAAHar
+NUL35Pvdzdl/yOHGIQcnH8XMfca/xOhbpopv2FGIy4IwfJ1H2OEwfZ3pE2huN/FB2p24bZzaxZ/R
+NraYdOmgCncA4q3v1w/ptTmwgtY/XaGtbzC/uR0MCbhnwp/4NQrw+7HVbp5u2AMZP0tX+uxumj1e
+m37umse4QsoqbgbSVaXdwLZpriKMGXqCZphzfLeuids1F/3FgIjt4NIfBo9VBRQ9YykHgB3Wu5i7
+x91fVL/5vrsBZniYdrBJ1zyYJBzXwB8i7bRGnhKKOpx0cU2OSAFDgDgTZR+bKSpcVdpNzr1cSJEy
+Q88F0yvHZntVbJ46K3EbRn3qyAVJEUZ2YZGKPEDCzURtsV+VqfAHlcqUty0g0XuZeXG1PJks+Fr8
+dCLHhfHYei3AjHnpHOOEzd7rRxytzoY8ujabfVstyX/GleSjgb4drF3hD5HfK/iPCf8bIhxLI5tq
+C9YzSQBXXABez221xruHHZI10FN3sxYE1msXaGuNnvP7dsL+bGUCuNAjITBWtR645cZBF2RboLLC
++U75oCmH1+zQhHvV/f94ztc64Z/pWJjzz82kvDQ9HIUpgS1AZWhMom8oeckywdfQh6J5lYmy3eKP
+yvIQ5OV2j1903T6nmIyaxDZTVGOKz5boKuqnL1TaWKo2uKwIdxb1KqTtQXMt5u7dulz10BoYldGJ
+mRO54IfUBRdWburBaixUa8CAynM3CzSGSfwpgivi2yKeNHqu0NAoUwco2SDlIo3Sm0Nz17HzYnDf
+efe53MHBLC1FBtBVGO7vYnOZvCtcT4rPlj09PO8IH2akA2zSRxe2rDDKIj7M9LNGkh4CS5GpQahC
+zXbXOgnQCtNtkQdZL5fNLb3KkwYA/gzNAL8c2ppPiYN8CbvvpaQESIiVUPji/DKa3oAWfNbD4NRr
+s5vn5rDiMP2JGZydMX1r1sunwWVyHTvaYIw2bzZ1S/6i2iHNdRO6vM3Y04qrXBuyVtSWIlsBsqNz
+B/uSRjWOXC4iP95HYSVSAYlm6YWrYgoT6FT407KrHeggzzBr4AkjKmUO7sZNZMUAz0rAUaa0kOIz
+z7XxbBSRcKv82tXOcPPP/5bx8TH/1bcfn5PYxOIdhTlZw5LYpMNIi6KYhn4achGa/uC5f7fZx7Fj
+GH6r9W/mUKDCuVptUlGqvpo4tvYi1eKJz11VE7ZSKj7b/B/5l4FrTq05+UW4kAFP72bZK//9aGqm
+EFJl87TRadLa6iQq0v26eTC3Iidew5sSszIvGkFxrSFR4/LmjABrg86cSmjkDOP49y3UDAQ6w3zv
+9Q6DODNzh8upW8ANazisJWJ5zdZPOmmAmYyMcCAfwLNmPtuYXQJO+mQobnfQtWvEh68/QpYNSHr/
+OAMAJT/1DIkdU9VuwjFQBSjDBPpui1nOlCJPp7iMvhgtGq+9kJPt/I772t7td5Qt5+QIa0A8wIjg
+8lKlDhX0L32uOpn34jOfqvNQzKDVFB/R8eVsdb2YjRP1eIt1cDSW5cNhWDYI2EWESs+tQTtPqDw1
+19hGbEQP6K84tgFSnfhGSJud8A1QOiSLRriHeHZsxvMUI6X++Kf1i/YnuunH5OaQcvaTph0fyFi+
+4Ty1/kT5UaDmmlJzQh0wz7p0P1yQ2ZALquDSb1NV4i8QrSPspQkkFgciA5qBKLb2/gFsw/363XGY
+i4w7LPrRP5+klC+Kf0SQJH3XSncSCnf1mSgzIPruNMoFICfooBwMTLudDWVaVWG5ovgQlYcv70o8
+mCmh/fTwxp9eP+EsiYMxLlKkvQmEPyo1mq6qVSPSb8IziD4Y9fsG2XOLhT1XpkpYPiNw8D1F+FsW
+dytAr6rWHylayfyot2YHBCEd5vHF4Lt//vC7b99DkNfg0sU2tdWGtPAetMeFv75gg2rRp+dhYWgP
+eDd+JMwTVekwGwxKDa9//3AxMAWxNfNvlJLGPMuH3hunPEV93/6aueDRdzgpMh1HJ7HAWZv4kzfx
+5tATvYXmcztdalGUiaSMMi311sBPUjwZv1I86nnKTJLTONR52rzuKmcGqMuxtx4IzoZbyNXGyuf7
+rflykg8DtZ5Ok3COpxWiRke0OUGPeg7ehw+4gOYdhP+DJeU/qGZvXqe+e33wu8jjAXiwCUYKjuA/
+gWEHD4wlI95GkR1wc25X/+Z1vH3my6atpjcLQ3JRx7yc7UDBhU7+D/X6l6/zKOAERQRoa/Qw8x2y
+4SZfhhlUz0fYRpgV6nX0uGeut58419tnzTW5a5kOG17enHVyOEe/qDD7IPpqmSH0FfwLZ4PO22K/
+2kypZjrHNva/pyQecRfAH10K1ouuEG85dJQb6m12ZjaePuCqejrn7FZ3s+lNn6s8zvCDpAusWDb5
+rEJBQuaY3CitOXvx/AimpUX1Fi2YqQxcUAn70oIUQwR31xhGyUaKNDd2V1BG082w9Mnh5um6ForW
+zg3HsCNWKuSJIaiVaRstA6jA4VvMluK+BL0KwnemqCoSValJT7pfWdCZOD7P44iYeTZVsIuYHyUd
+XN3kLfYACLpG+mrW3I75k6FHGONg3my3INPxZQsxM0E9D5VOHZkrEIERpUODmP8hVV8GBmdaoAqj
+c+q1kXgIA4n7YqTNanQ7AtRc9tc1FaayJne0GUUiD/tyUEgb7T1EOfOQzEqBWzaKv3HAOkrybn2C
+DbW7a/wdBTgXFYLOgEd2CHKBbwJeU+8ysPJRoSIysieOGTUpWB4ury4/J0JWdm7PcCp5/fy9qroU
+eLlIqN2nbU4Yd+4AHf5jbAx9sS3/o3h7Ax4zGiWtJqXsW2esPI8Gnli86dzaWBAd2BON8UnX+ph5
+5hKdE9yxZfOzee4aDDvl/Ak+S+j2PaYGZZTper+6hrjGKdhjJeDS1nWWDwNgumrDkLHbpgEvwYn2
+QAsVblpFNnnRDsx6bIZZRPlOOzRvp+JxDNrn9Y2ZAvBvEkvsYxmUjJVup/7inlogEu+J6qxrZjIa
+DKOOKh3qYxBAIK/8OLZHimG79A5ySjvr+rAZWLXqxavLQ7cE3Uo5k6Zcll15I2xmD+uptzMI5G/I
+GOdTuN2BLTx/NXr1VzugPq2MCSOQs48QXpkxG55tqDtn2GGy3uWl74dcrUKPKXIjyPlbjca0/tjc
+g2DcgXrtX6R2/nQYnWGbKct55m1ijiIpqIWh7ZnMa5pi4qiAE4+m3f8zXDkn+h5aL54DOuU490Qf
+my2tgcyRoSCvR3/XgcoG2DiDzdPmaQqxALWhcACpPqB0dIO//zs8fEyYRDAwdATAUSOdKSucuXVT
+59nf/112XVP+Pgb1qRZ+RzyBY2Jm30gu5t7PkzU/UnCODBySGGDdkNwTuJbaEEzkXKiSX/+iuy2t
+1s9vtlV13S7y8i9r1VajseoZ7SwhpsJqj3yJ1kwr+oJyW3oTcVUT/pekHCNIlsHXI94toHTwtk+k
+MYXSFlnISE6Gl16AhNHHzEtipf1uRF9Y/8EOHv2rqoNHF//zd+8/vP3+/Zvfw5SegXR2RhXT3QdG
+cAR857OGek88jeloyKdR3YzamWFYIUoQBjO0UByxd3AvXn8A6KLxDTxPX3UZOIwOgXjpKeXAFJBR
+OjLCTJMYz/tYvgrYzt7IwM7K5KugsgMR3YnEWAosRa7INgUEjVcD1OcD+R4aLcXXye13GuTYEPww
+MZcnXOC9oUw6LfjOOIxKTzHrx/m1Hkf8gc8rBN31fB/NXNA3YgSGMpAlbZIrXuyTOggpDap1aCv3
+0Ll36C2FVTzcNS3Y/XZw3CT4eobZWSEYrfVWJhFybqrRA5YJpp6He6UztIflWOg43kGmmhH+Adoo
+mMTcPgbGrlqkYyDEjUI8KJALhD0nfhZn2bLaDVpOF2S2YtNWx6dc+tS8xWBDkJFJUIjpEUDAmscS
+EAJjhb+PDE8SaB7ZOBmGnssfGOi3GYEVoF4wgEI+HqfsljbY33wQ+RgsU8jSHriBH62rTp478S+2
+Y1PCO5XZbAeJL36RTE5shxFgUXMErZfeMd0rMpytaI1n5upaV3rTez3rtKPpybY9ypZlR8yuIjPA
+O+y3lU9nBs86xoMEnYGzdujMleRrv8GQ5moR96tacDvgAdmXiUCPY5DuoqscSH9X9Cmd2CDszbCL
+m/Ahde9oGuMtWZ7qYdbtnDWO4xO6aQul7XLnNodzKmmukIFFGtUB1oCVJg+ZhXeHxnlKEhocenG4
+Bpq/RDQaPk9+b/N0Qh+H0tSQP9EGRDOFXQss+xPOZxRy7+0MfQmSzZtfWa9h6Mfkle0J/KS+TF4F
+mbqlz/Db9htTWss2SrQfWtxlb07YJUmqjQraDetK8qOoqLTvStITdVwIASqVQ8RjeAhBYXxJR8J+
+rcCmUlV0IlMRy9ndXIS2ZbloARc4MhEKse2IREvM+YfqcffuWw15RXM1FQCZ2MLwOmBeeHIxppMK
+kL8uVQApOchNdflUWqMDp2AK9qnLKG16tZ1RMD/eGKNk2o6DUBofZ9ZVQkbuFChlempGIuRoCBm/
+RFtV9/otDcm0ZCqWK92Lg4uBHAjJAtBuCL+Wp5knWK8uf9ApGGUhTAAfrjXj8Ky1a7qErCYijy3G
+hvs+UCb37gRf70avUwBSvEMmoTOIjLy/Pv+jrqrph/iVjHwkCCsSQRkVTa3XYbo1HGGz6hqrbciq
+svzV67S1vY5tcZoeJ61xwF5BHYZqPWLeDOooqDYRx6EfiIiEhcU4E6ge/Kb8KwNpYQdDEC1D2zf7
+HYKVId5Eeqq75hh3613zAK6R5+hu/DpWcQZmSleUjZVKhR8aXo9dQ3u23RoZuq9SlD/uaHn8AFRF
+wDyu6Sj0n749s25w8nDEeJeiK5ZXhPCyqOPx6qkeMylOwGUFG0++6UDNhGXKq8fZnBn48SdtNssx
+yQ6XVns3OjXOnxzTMH0A01Tv3AfS1jN72wWZxUKav1g9oIHYJy59zCCSO8HbR8khg6B7zJDd7hXe
+1BZ+NoQWpLwFw8x+bWnRC7QCVOwEg/pDXGfTk59/+vHfOxT37f3Plx/+71NCp7+t1tW2nmeram4k
+x7pd4VmBQpgCxhAdc0RBfEJ8ejAPulyxpMeyCN0+jhOKZxvAv/Zxl/40gMoH4+wb889voXUAbwdH
+xb8Icx3HMVt6qOuqEjudg7N7hbfuga1bnHXOqqMQ1gcDxCedfZxtJ/nbf/ru+7c//PDu2/dKd4WI
+63mDEPV7tvRwsk1C1nd6wHZ/zRmpqsfNluPIMt9FIMvfrNVr8AmYyfwDrt1+RlniVJGwAorzAq0k
+wUsC+2ibPuNtk81uYR/tSFtBBcOKyK+9AhgdU8ea48gA0f0t+Z2Ps7P7bIDLxiDCopQMq0K/9oFV
+tkHnsJzdUrjjuH5W1qGLZViRMNJes5SyBR9QQ4lZXSxqUp6ahbIJyWBqZEJ2jW0fwUlszzq6QOto
+TjbPnrlhaLIG+FRSNE15zAPQ2Q3jOYaoATMb5l/XIm0fRHThJTQrfQvM/6IG7xRAfUV3ldUoF7T+
+/t2fn63yQ7sfc2mbbaW2f56r7f/Nm+//EY7Aoc1vtU6066Fab8NHc1DZ3bTKkEic28xr8NfrQWqU
+yUGeUT5wwNtPpVMI+g2EPOMvsoK5HzFXUzKOanu22TYY5dEAC+/3hImR6QqgBeSucfnptPR2cc3b
+AZBnkM1As+SlWaAYxCkGJnnhWZShDizWNOgRNzA+MiZh96Bk1O0KPPf+AJ4y2yLNXzvzuDeyMoUX
+uiXoLsweIRpYM8pz/3LbPbBvTv4bdSGNXrSIdkg1XTdL9hUKP4XKi62X3ly/KQ+FVITyyquTxJQb
+WfWJUmXy7R/kwBB14nTVLOqbJwoB4Cgub7X46MOmt77wsnD87oQgYYA0pErJWTxR7I+u1Z0PriGU
+QE9YdjU93q939dJjbV1iYvj04uwcVC8TSPvryb3qW48Z8oenaxqfSdAm8SmU04sZdkNlKooIdM8C
+H/wg4MTvpz9ofiHh10NdsgwDIKVhi/fLMds9blPkMCJTELNl/iR40oogZsVrEzC0WAKW2o3CftQJ
+f3VwLAdNKnZtoipkd7hWxn2R/q4YHYOJe1D6YUek3LMN23zowAt+Q2kHbbqf7ygKHRgf9OwC5CTM
+SygMKsBEY2FKLANJJPGpTg7kuK4xtjS+et8sKs4E2V5RoN91hXVXC7oZWnIBdVwT5KwBo4ppBSuV
+qqDX79Y3zZXhO/BL/QKcApC1veLY1hOtaOvJZa7jkp5gROQOGSKCm+IKh8kmVE0ma/DVPvjRMJPe
+Y7bF9Gs7hsQu5L7BrQfZL0M3bdd1/hUkDYd+utRjpkDabC9vHPKerS7OXH307nEpmaH0b3F/ODUp
+w7SbDyA2U7Hr5h1Y1sw/Zn+0skMMCwZk8eD6htZhl0vFQr/3zZHpRiJwyZ+bBL450C/6Mp2EXc21
+R9z5GV0WdAEmyRTdTy5J1wdJa01ST4Pxrd7BNDzZbjcTXtsdUAmpCvJ0IYq3tDPM/vTnoaYW0hWb
+q7YsdW+PuB3iPntpu7WEZUrYriJqAMUucmLvPwApsaMWCgK7xbZer+fL/UK8QmjpG4ikbFm00gRN
+hCRVDAI3SSgAslTVIOSYjStk50v45wpTWHjk6GtmOq+odi0DDW0zzdoTYPrEF9OZE9J7PGU0MCW+
+UCVWQLEiy64JOGD/wHQyEy6NFsCgg39mxkI+0Wx7gohEspOMGaM/x+jUv9+i/IpsxgwzfT6JTIuT
+25FxTMfCyn4DYjG/Awa9N38QTQ9zuu/4aUBN9TiQnNrIwo7hmDIgubcsd1oxFkRXHmKzjQem6YUe
+BtYilejhRB3r61NwpqUjstw2xxztDN4XNq4i1TcV60pY/cf1TNMNtY+IdPi3RaHrKUMpLJ3sLt4e
+kVAG14VG39CCzjSIjfVYIKsOc4lGv54BnSE/rw72gpz8wNvHjLNpcWvQ+cyurkRtCI1fXWXgHrSs
+dqBREhSezKpxxi7q3g3TPfqNrmvULpuHnUZ8xnvLRpyjSB7aFsBTCJ8g20U57wdS0SDFV+HQ8BOm
+qVdXXhNXUmYUJlplDwbv+g2OKueumiRyV5E1xnd9CoDdEii+afhYupsxn0FQBW9Vbz1Df0T+MDmI
+yLlM5XcReL9AP5AQD4/09fL8vLzaQepP8qiiRuAZOEqZcF3d1muWGA/oEgAYzRZHrC8qWmBRDdDC
+jl+GUDyW4Rbws6wlJyy5G3I2zc0yl0eLGR2VuKH0DrhdZXfA32QLeZhQExGoiAXvAqVr9gd0rtuY
+sVakP6gZsIRyYnceI6ePfjLTRhzCtroZX5m9YDigj5ShFhGI4XLBG8/eLb8yO8QIkdsG/UC+YFbC
+G5PyfgX2pLnZAauEfVpkkEQekVQ0lSEln/PtR8IC2UYiP8caCJTfnFfL61QtuATnE0KMNbWYG9E8
+MGP9F9Mhvy7mZyD/BtKZNUKs0BzDZNg1amNGRo/oN9iZk+eRxCMEB4KG4iAlAucMXV4ZoYHlJU4V
+6b3kcBzJcxb6avy/7L3ZdhvZlShYb70Weqhe3U/3PkWCpQpAAkJT2mmjEpklS0ybq5SSlgZnuika
+DgJBEiaAgBAASbjs+oB+7N/oH+k/6d/oPZ4pToCgMuuOncsWERFn2GfaZ89bMn8NpX0s4qZR/Oxk
+kwLPhLNbKoRptx6m3d9O92ywdptx0kLjJa9ujnaKZ4yCkpLlUy43IAW+Iw2KpkQb6BoXfJ7IJnh1
+maCriG9XY4PzAEIJ86ZNF30iV5mdkPqY+o2VPH4i93pIJtwnskQh/hKLUI5ehoGkaL/qFYQVKew6
+T0tKXP3HEO3XSqOfT4XFo8KpuxSPV2HShzR+OzIt4e2BFTJbvLFsncae9Yh139G+zqzTPsoeZ+w2
+ddJYb3f2Js+a2Dc227+RCFhxmJqbuShnHOhdjTZ57j180BSFX1eNm2gMWF3rSu+W3YbEAQgGCfVc
+hNPYQndHOsAdA2UYP2ctuCaRCXFQu02iEwTED9vj1Arx4eW1JgMOW3U97On3DjdJk0OlE4yf7gY3
+ivOQYqA4VAgunCVAvhddv0Qx0wsbSIEmcaZe89l+t1Yk7P7BwAhHcqWq/MsodolBLeBvRHZhEHfC
+eXmL+XK9ZewARCfmUJieKYEUuwHdVlXWY5rEiwx7WW29htekz2xoO7g+A1IZXpF8Ec53x50U2Ryu
+pfCt2Ux0DfGGpAWGv7LUemHWGZC9jqBrsTqZeEEpoxcrXoC52VMaLk8lejQfeEnJUL3rz5sWxaLe
+1IQBv/lEBKvnnrPgVLk7E6jz+oTiCLbTYjaxI1BKuciBUF4Vs3wtQSFytYnpU1I4byhnkjRWAbfc
+hAzPRzl+lx1ndfzY65/++OF/Jyd/CZA0nk/QZf7T6P0//A9kvNNq0T/CqpcVBUPRRxtZybHQIfWF
+/aJcPoVe6iVvjt4csghEukKvTCsm1Q24Ya9HMUVkw2L05MeZSqEGudMCoYUeJEhOKfwiniFeSjrI
+iJWi+gXJTvCccfwNDjQgtvyceu2iED6V0zsBx6ORioFoT4vVKrXYJLHmGbYydtYXsI16SLrKVJZD
+kTjsFHEUN+sRa7qUII4mwspDnRfWFvAWRSNJ8jwlQwot2ukaxdOGjPqp29zxuy1uCKmlH95/1/9V
+6otKFbJhEoueBZvgopjNSH/uhzkA+ND/OZ+NFsU12aFFCmk8Ladl2BU2sJb/nk+oBtZBHkz3Kkwq
+zgeex27L8U12PbBR+PJ18nSAITTRAfspBlWB2UqCmezx5yc4M82yD5njkU4yzk/T7B8kf2ZbKuSF
+OevMFdL9d5GHNPTHE5iZt2iSxKvY8uMvySA53pHOW6R22I+jraYp13YospHTDjzv0Q6HYHdWblnO
+Zs6S0WfnDqLTe8jnvVx8R8ezw6V6if6lbai7wkuJiD7aQomEjdi0Zfhvs8+y6WxboWg72qUF+FAR
+Rua7cIROCDIL/CP46HTEi2weg7CHFFsB/q1lUOTkibXMi5x00b2oqvWOiz+YsUFyb4LpP8VdvOOM
+pGcA6hkY4EI8IAnxah2g0s0CiXqjsUoxoIp/5/CapC0fbQ/DNWyZQxl8gMlnPEqm2ZEO0oZaHOQS
+6wgEcjA7/snsJe+3y8LdOCRY+fSnD/8j3qBi0/Upf/+n//B3f2cj7LQswJonkswT+Kf29QpgcM4/
+haWxWSU/bQpfpQNouv456X+jlVCwxgKOEp5ZhW9UVFrBSpTeqhdPWD3qvOMJpbkpYtwVojrvbngK
+Lp25ZXdl53IaN6rqWtuELczSdNqGwAaKykxSN5lvgDJGgZsBox2JnS5Q6fjt5PJkMVapFzMxEDyp
+XIhUik8xqT28Jn7sU/2Ta9k0o2ien7q1LqJkZ8DJ+ZXQJDxWYWoTLcwdssa18Ei+SR5FxDhJfxjJ
+++ymjgDQY3mLa8Oc7hXc1y78u3W5PKJlMLlb7dzAnJ2vL0YX6GNy2xQ5g7YnFpW3Q4qe3XxO4WuH
+NsLpLLScuBFDM/pW06LcfI6VhAVthhItzPe8AzS4Zj8LNDyGzeD5jisuzBa8imLUUJY0/NEApCDN
+0ZjiE+G/B7A7WcO7IRJ+iZJxh3d2POKoYTM+vJ41whaU11hbfFQ9T1doWDr0TOnYAhDlUzj6uowK
+VbBQq1F+RW6k3DS6eG0bZIUyXc7IOzdApEIFDFq1h5PG3frZ1T7FnkD9daeYFYgyMSKv/OKY7/zg
+bpWT3XaMMkPxGfQnH/6tQUMZEsyOdZdG6zU2PstwQ3Sk3C5zSynpNS/7JCwor/2yO3eJOm7r1OE0
+dkbOvKJ3WC3fy8w9OWi7D5zjX4pFRfFh/RcNJ4m5bkwCoKSHX6t1QOSKmki0THJ6Cqosvx0ofpNX
+haFroYz33ABDWMeWt+0a84PDmykOzntuaJdvXa9kx7QdyFreYyIFS3biOuEa8m2BXDDFvlyT3wqp
+Ty5JF7Msq2qKqpp1aZojG3IKhov8+xJuGCxA8qfnb5i1e5L9gkLu0KqW19CPfLGOzMyLVplLQRmN
+nDemgIA1g6jSVgsT0RWoi+78S7E9LfPV5GgBx2S1wdCX74hbwCZ6yffFvFxthWD1mu86q2A0U0Pz
+c8c1okU6fmZb2btedtm2KoeAuGpF2PHkGxjC016i+Bjp8qTTZjdQ4hAxwuw/0fvREP8VKk12taDN
+Sg2EKsx1jz6Z1zAlZpmmFLYIPS+gayrJWiU2sUQObGX5IUkBSuCb+MZ8exCvWEXSDzqaIap3isqV
+ukEs12++MmzaXgkCVue/m++BxsoKt4sD6xotgrvu5c2tVuta1l5mrU//7HCS04rG7cWTVGrNi+TI
+0+NWpCm/tR6Cx/1heWfhqEG0zMC/Ld/ZfTpHcq6j2vB6H64Ka0154oC/wDpOJmmvRSyI0vo7tdlW
+VXU72iat2B3bwzqx9vCYUMKEMyh3PitPVYk/K8ex3UtF4rsSj5IImWjkaMzQCUxiuPqQymZnI3wE
+gtC/OaFjW4KMo6tAsDWjr/4WpWpRuKRB6trSsUhGkEwSB95e7YpHblKenS0lQO8twcWXtSji45Is
+6uZLmxINbljsmfBUD1P9rAHLwd0yXQe+RYTPOuNS1oeXBpbQHm3NRqSCBLgEgPI1+I6QGKMqK4+L
+oDb74J4bt7yeHT1Lunso0CH/bLwj7n706Qjf+eALvN2ffrKnczra//kPdlMIyF0nvXsXWXFze/iT
+mqxDLPEXdpu2zIEtnud8YFkNhAasTy/ltkZxIBG3ofINj2eapC7qSeEt6W64o1AcsjSqTTbkwdJu
++hFkKNOPC79JeN3YJFdxm8TS7tmnDZ7iX6cRV6NIteg72btY+bvHE0T6FlUtWpRzfJZaxg6uFXBl
+NYHWdHGVz6aTmgZZExYlgYJ/PaKYrLH4FM1J2sjKUGpGwl1hpFSJdx7GynK/0fj8zw44vtzAqVd4
+8bgZVxJ9IneLvc70Yd8dSvRlwwa9NaKHXJXQZ/xSottxn9sSWxhy8YYLky+/xp7kCvTbCa5VvUEb
+GzENhADgJD3xJlzneicR/8jVn6wK2redMVaG/dpL1qfOIt061xKLSpkJaiF1aqHgN9AQQRnn/hRO
+Atb3Nnh2wiKqY6dWS/dkwxTt0SjBhpQ1nL6gOqrXu6wQhxa2TAV07ruOXI5aHMX37DZcbcao28D0
+C1uhHdA0mPhHu81lVtnxK/SBCDy5ahfUaMTtjkaBSblcRkf0NXITwXfaJnwy4Il2TWeXTEYFsVCe
+x1AdY58sKDGLeV9a7rY+nX74e402sirGgEcXn8bv/8//iQOOmHBrCX5A9W4y4QSHnlWt2hSo1aRj
+xGD1N72krDyfDawNKBR1GNRvR+K829Uy6pQfpHeNlWzMmlgTv1T/QXb14wATlSgR7qNjBVw9qN4+
+B5ae0d6f/jQwMqMck0hyD34oYK2SmYY4OB7Vpp/GD1HnB0tKcvgiuVivl4OHDydAomYcDyQrV+cP
+Z9PTVb7aPtQ62cV6PmPHJWt/qn4UCpjAMi0CX6wmtPKk95XLrPAyuFAylzqbcJ4xRGcGHnnlRnky
+39i6W5KTpaKnTv1slitYBVhfbiW0oo70gtyHAcQhHCPpGL2muddrTvMa7pGO6rIjrWCVTB89nfc1
+5XXdKzTOhJLAov0diWpSNEr23vyNGwreiiFknFIMowliBVz9P/0Ja9XIyz/9iZmT1fT8HNcwT15I
+Z7AXZEL87SKzL4YyQ42k720MJ5QyLAt+GhU3y9l0TIJGpYu9ljBesFsutbyK934HgWysc30qLISg
+1oIL5y3gBVB9NjB1GOpzm4Xz5j03lJdirdo1wgnOonugFWW97wrL7fDUoy5L3kCv2v6Eivjp0GaH
+3Wr9dCbTiRpvTTaA4utbGg0o6BR1vbOLyZxtbH3CAhOp0WigAoe7ys9R6SW4nuPmsYkf2l0tylrw
+Nbbh5YroM8+/AvMSaY6Yfv7pF9BecFnlZz1+5aIUx6pFWf8on3TEIf67PR7qPrjA6ZENYk9q8Qml
+fGfvqfSUiF4HeuqC1asbru+/bN3bI7yzhc9sMto9mqh2sGGEkUBxTOsZdrQOxkHytUQNe5L98nOB
+rAEUGE8FLdhbX069860BL/i13fJujgfNGgNspixiwGlCGYcKlzi/E+2rJ+jBUUCdWVtLXwlEhFMv
+uUZS3GjgOmZPxcJrVJtTOjSd68zO3HhWdRtV9XaL4uCm3TszZJI/2YsPeg+dD5mzsuCKRsbQUeyw
+uNq6p/egiaY78CisEihkrZ4J6RopNhrJTy2LbmFSeo+w0Ah1PRC0Ule1iOs+kgm3U2SPtj5NPvyv
+yqNsAJPhj0/F+/w/MpMymVZjtM7ach4GSeZUoj3kpC+0dtLWim14vZ1xyP0wKCK+64Vcy3Jyikpf
+cvdc5YtKcg+K7ylbaSt0EvRPqmtx9VMVl/VpNVJgHEUgAHJUEW+bJ7o9cRBaNHsP/zzPq+Jb3fv6
+RdhDYfc4DbB+S41xqCldE2nIDkeLkfK0nGzJrZJsbOEWmaKnaQ2GKIHC0mdztIjHr9XsthxkWFPB
+BrarTtnBrmAnQqovt5pLGrXRlG3dBP9QHxc74dOmlXA6+QBfFXLxa+RIDUPTsPXW8QrLhqAoH9Lu
+ohSOtxIUgVMuwVZwd51Nb6DTYp4vzjlaprwIeP7arbEu0Rtylq+EGy43K86lBIAmk9JNdpUoBI2t
+WasgzFYSHt7xzLg8oQYzkoOAkFk6MvM6Qg9k0geGCdP9rScB6x3MsqbYoX678PbDkuY0DZ3kpgJy
+s0UJj8hRbWkmlrAX/PACPjR2ZGru6At9YFyWU+s49/FmCe/dXcPXQDdTSMMc6fGA9hKjcWT3DwXX
+p0CHZxSRYmqCTOuyBFq1WZmzq6BgZ+/YvqSPzsQZglGzXvCZ0D3/PX3uejukYePQTYimB+ysVZNs
+O0I2BhF709lCAwseV+YfXg03oKuqRSQkQ82Hl1X1WvqGlV34Adb+JqQffZTekfo9lnTyzNRSn7p+
+tlQ4XZeTMuZk60Yf4TRvqyKvysWwstUzrNzt6mM34q+kU6TBhHzcVXd/ra0DGyEGag2/VHCSOY1J
+dNZT+IgQpTHH1umZqbvb3i12z7XX16gJnWTr1TSfmW3bbvKgxXvQ3ICohNKuvxjCB3NJZQJw3CCw
+YYqdUXrzbO6HWg1Z7O98HefISn3JrHI3RmbXNWxnDE2brOsEAM6+9VgLg775u95vp5dEqgUxVNzS
+KaLvdEf2Rb8CvdvRMO+a/drEA3FLcy6cOIcagTga+sXC6BS1fe0IKdMeiayxHW1YBZEovJwJrq5c
+JK83RCRPceN4tM5+QwpKu6Ny8mPkK0KxMiqtHCRNcnT1GOGKt6xUWeXXql9wM99uFterfAmM3xr2
+JhxXl7nD/d7BgOhyoBM60IZsOS1mmPndEofX9pCY7EfmJRIg9in1AGrW0tgWNcWGMY0k189YI7uZ
++qiwIfpSpa5y/RqOMmN1wMjMVOd+DAzf1tYkoE7ar16/PxwkRwvH7NLalb5FuVoFa5GLeUOjr30b
+WKzlLN/i3bCA0lfFbDv4uPASvEROKUe/F539rEuh1XBkQyYFIzH32V3IqW7XoFfnFpoMtg3rUG98
+cDu8h2/fvn47AGr+coEkXsPk7ZislTevmCCU2Hxnf+6eituZo+aRSt3oDA5ic7Jzy4dXhsaMqYyb
+Zicd2WN2fNJVAZ7Zoq6LOot4fbTSgC3EI9tilnDbS5PfcRa4n6FRt9V3er14TRIhtssQyb2cpHQr
+vjBYpGlhalD6ut9gSimjbrHHPOgAhu32HmNg2rOipHI0kKaR3OzaY3cayodFIYN5xyr5hhXwB8Bd
+bExdUeeTZyCW9tc12nDjzVaty+VdbkIhJneTaKjBxDD9QY7d0RJqFwbxS5f1PRzQjNnues46SwEy
+TqSP7i3D2lzfyCWfn07y5GZALkxZYHPDUibL5qd+NkzTdPSKzVxozO9Wywsyr3HdXQGP5kpE8Y6k
+qOWYnagmdcU6QUjPkPIObNAxfqWiMR9gCh9hsaRXMpY0KHq5o4kuNcQr/9lpW1sHceooNkPLVbku
+x+VMJmA0mkPPU/Yo+OyJSuPcFpn7OZyZD37Itx2bVsQiQhJ5pr5PoyA0VV0lxJ/JS+Mdngmf7q8Z
+hmA0x21E5gpk5TcisEe8cTyBhjWYG1PqCXuKRuTxq14M8LwGUs99POWHel7cfIkE/u/zutuD69eg
+PeyO5iQMhEv1NhgE3R47SXrFcdweQsqUhHMKfzoG3u6+cHa0CWc6deq6+xPHwXYIF8iujbbdaxyT
+uzLO70ZydIfG7rMg6wbHo7arGUXTRrwduYgE1TvgGZtjFZ3QvjRint8MQzAwiTWz7+GawL4aAkFo
+cM0konOwDnd/KZdFhlm8VmcYj08UKCQ3OTJ92OI+IpoyOpRKR28FBuvyZpvohBiuZ8sLYQlwKhX7
+uNv6dPbh7ymuT76+oEAp5eLT+fv/9yHH9HG0R0FEH8ywxWKf5zhlJkrpaFJg06MS7S9wEAtypkhZ
+r5lyoplL/DuZrvAPGUy3mswXEKxajlVMkT6kT7YetFaLVEEa1lfl2kxPwSS6q8SbFZ9RbVKuozUd
+VSrNJ/pYoIwpI6FDhR6BnTRLPRPmtQ1sVQ/eDS/DujXTcZzdLOXobM2gkHvH0HeM5jX5jPHruKKg
+N85CrX92QcHR3a0hd0qwikOhFrN1uV9jXNSvrmkJ92pAC/tNwN5nwHa1oZIu2t2ZqeK3NJLUajrL
+l9eRdAtu1o3rhnwbi6siYlXPViZ0kmqJYqKYWAq7AtWYwmFPik9DXg+eUszrFHZ72nChK/yNyQ8b
+b9WdYB8/HZw0BGbcbwjRWNQyNuq1kfwIPTeiTbcXFFNvzOg1ya/gviI3qzMKR+uEorV7aQ9qHcPP
+ijAE87nn1+SHhPB24S0GiaN848k3yeNGAqtDiYKgCudn6XaTP8oyNc9SNCTEXuTcaQl0vsRN/iM/
+Ud8/rVsrjNNIT69eH756TwmIzYv3L47eum9+8+HdH7oxyyb6kpwVMBA241msp4Bhtsm4XGGKgV6k
+zimqatZVcjldTCjVS4HMOxpzANsCtyb0//3hi6MP30fqiiopJ36fRHfThRhX1X1yaqlZInd0c5JT
+qXl5PdgVBhewD7LMQUz4O28EsiNgq0FCCXCteZaDnwccZSr7aQB6wUuY8HmF8QLeUriAWpQBZmi5
+3Bs4mRjxwAb/URux6iLHOO2GyiSBqthKACtJ3vpE52goSGMXpkQXzJP+dGmoyfTKkFAUIbrhIuNs
+4OjDTYW6xkNlU1AT0Lw0hhHLt08vG2iAwPbN3PjLXFys8ML0fKq86LGwMKdbjGTaSbVqakLmW/JB
+ghyutx19x3pQ/dfQBwBzOR6Nuh552ASsfPoMWKWmBVWbciCVVz6g8jIC5xI4kl0zi99pnCZkLdoY
+Esj7QOw2b8F237qwu+/9AbhfIqOIhI1C4OF1saDkRQ7cScdPRIQ07l5jgdbsENh72UAOjz7A8CK+
+KxCEvcK2O45VnDUGjZ/f0Nn0E/rQOzxYjrUPmSNiPBCME8XxaGnsxkMziwZQc4e+KK7Nth+mMEd0
+duOG+kwK5xozdw43/DBdpbUR5RM2KVQ3JHLVZgdxYkOxhK5L/VjEPHO+RsecpwGCNQ6l6QY5vg9p
+lCqhEghqHDvjFzRGR8JFszChKYvro2tMcNDVf05+4bd5VZ/t5+RvfPy9+XXT249Xw8e3TrB6U3Ha
+eBP1lecWoyJR2HO6eXr4pSXBUU2E1lUxL9Fi0VQtmHagEMGUoSRcIrz7xgH1iuFocauaKG4wA+nq
+Q9qNzZAUlnwm6FS9yz/PX4N6o7uEPAwJT+qeop3IwqAhVQz7dKyfUtcJU4JhxjeL5XR8OdN5tZPS
+9UMrB2M7TW/fX4Z2ZDpeXKRED869ZghxLzm7+x7EvaDKGzj+xTr0dobvlOeEsQ0mC6FitU0iry37
+HI2daOngo1e/f/ayw7XqpG17nC+IQ8DuqefpgqJWV5tTizs51xz0tTMaBy8FXYcyxLqiTqH68cXh
+7wdEHYsj/HhVVlV/UlxNgZxGuVO9bYp4HrbsBhzEKe7eHg/duSJyCRWc+IpyvidkLaIEBpbvqHDA
+1R66WZcQ1Qf90meMAY1TTeHYjOSNEkbzrUield4Qf4AbCQO/mluo55K5Gn6aWmVRUc9JN0JIKmhQ
+Zl0FgoNWND7A8LHhYfLERBGplXrkczocgaGjMZIpmBZBVefhYY9xH9oJvKh7ycN28CCp7Q/eYzhu
+LHcgv/0x/aHckDk5h+HfJiSlxuxAyrbD8qFAE6Nz9WRt6vnNjCABZbC01jxPPYGyi90zhMkSrn0b
+B96bvgjmDxkjSgfxryqNTQbJ479FqQ1lKngrZlYWRekb4vIyAH9drBZh9Fkmm5wNpVTMQ/RJJ5pT
+0z5StP5ZedpPpa3U2WC8ueQDzG++ysfryDa7rwSDNIpc2pYsOr1i3wbFKLuqpOPRtr0Kx1Xx6SSo
+YEoyb+1HZj3+gmuEFWyOr08W8iNz2Hh4HDC+klPdl/j15YrzQZFj0QZjzqMQ3Kx5RRHcaZtpQ8bf
+m1JMJun9FIsBXkIJgMmQ6Cj8qVrm2ca6gGFQ+EW6VgCj8GlhF7DSZhEFOM5xbGtvN+ykgL979T1V
+XXV0k3UC+wJX8gu/A71BDDtz/jGO8SfZFa4sF6iYz15NbnrYVLpIs12Hz1E/S/legvi9Z0QC3dti
+FN9bDQT9adrflSsQILsradrNULFeyVsJ0aYz4tHuthDuDft43H98ggbDYn2/DG5kW+2BLWPNIMUd
+LGhuuGfRJ17P7oDwnYzGt+8WNgQ4gjVaE1IGxevp4umTNk6Wyn1LctsgvleMp1nsHEqdobWyYgH/
+AlojixbpvevqHULkHauks77D645bPqaYzbbC4MQP1iLF3P7d0q3PalkDuTuJKk+R++OScpQmRbXe
+9xzl7ilCSkRpaQ++Dqw6UBuEeSjKtqEIu+zpwzFLLsjXp06REdfrwEnLSJVwE8vBw/qt8Gale/oU
+nb4AgcyRPdehYPX4QY7ltOSNyJ02Lixsh/FmFdIdp44JO+taOzTBsRhLWJaIWQGb43VAfUo3spiU
+19WOXRVpF3t94kLAKPM0D+0z4f2EXR0mHDUlXkymgpqsz8NCeqHPGakUOnqsu8mDIAh4XP6PbTyq
+ByKmo4ZzewJ3/aLmbMHQR8IiqdZbSgR8KbEAOmYAUq16Y4eLC39GzDW7MrcpYR1ajClCp8q0imm7
+azWIDPaq3aa0dmlPVyjpqGg1Tnbo7eZhhlVZrvvs+KwSD4xCTnm6kEbQIz8t/D28nG0qy3Mwdxg/
+mCpsG/oIZlZPWQfoCUi6QJdFIXGG2oovGzEty69MpYS17c+tmIL1LXe6KvLLVnQTSp1aToO940vb
+gNDWiY4wSlzqH4gwuSxTO6KFMPmyqKpP/NANt2KvIiYIVwVzZm5L8aWSufaUzCQR7CVbJIP/oq4u
+vM26Ars+1t3bb5BEaJYiYX+xxb5pxQo6jH0+mTQqTZzpWxTXLgnG85ZShVSyoQutqKTtXiJdeqNP
+D1ydjJtmdL7cB0QMWy6GAZ0+cJGPesmDx91s99XmxIEXYmPFJCsvhzx+TqRJalLptl7ijA0dY1V5
+bdcde3EGPVs3jrlpEO4Akq/9EXwm2ibgoS0LvYXxCih9teMB7GlSCozl1/QcyMJi6CgMe8np2VDk
+vLhaUXxKjngVoU4EvGI3IU/ZYBzoHNGJEawgX9pBftpwb3DsNERrt6coxw0JVqeaSPJMBEnBACHw
+4h0hYghCCx3LZwMAkVksJt1W8Hq8J6gSK0pSPgNKL3ABfEMogHFCOAnu1zHxtjEwfQh4XQiIheP7
+wmpb6hM+caHJNfLdGq4KrgTKQOBfCVAVeXyHe6ySzulWwejRStpo7ZSYWgwKw7k5PcPVITEcZ9PO
+MctFTjfKZH0hof2KfIWkNzCZqGngfmNpwTBEl1TKkhf8bqARBjwaERGH1zG9gZ2GdzWhOgxCgsoG
+K8idwcrP4rjfaH5+jycEGFpYajoYeibwHPAJ6GbnxSIme2Z31BsHI2Bxmn4lSSppwrOfwzeDJk9l
+/OhlKI5dJxXnf6Cm9yBXTQXX2xCQuaG6duJsFbny7bsqzgpJ742JmFBIhsFJ9c7JK0ZxjdpCxX3D
+oYeweGfLYjTGjNqxSE3B7alKPUg8YqOhI72B525DC9RfvQXhVMZeM/AciVmva0stucmnWQU3bmxY
+XEFwwga+lVl9oZ1qGEkvDHnF0a7814JlhjKb/kfvQA9hooNwRss1nUBOj8OCGo7gielCjA8LuvGb
+1dRzVLOerbuEyrlmY1oKdIOcRe2Od4YRux9bLkY3zKWdHGjTRkfgAXWOlyym5KBG6xor4JqrefwM
+zUFH7g7j5l6MO8tu96RGTtfmuK6ZZqUUwoFwDqLmU0tjO0WTSzW6u7znl614dR2+DLkblS5kconr
+6PQdDLHeZ9iftvGfZdCCYMxJHeyw6w50BUoH0uU/NCJkl/il8xzf2rai2447KSrZPpsC90XbnSQR
+gCD7AXOoZjCuyfEOjCDFEc2yQOqAqyoKPkh+/PHHpLpafBsT86jccFrlp1WnPi31AaII/0GiI+Cf
+3mCt5hl1zKKjMebKGimDO2q1Pl18+A8a3inXYIVwfCng9qfp+/9rRK4Ab/lFYookz969x/tJoxgu
+UMdKilgNXle5oXKR15KfUGhR6gPmcFqXQNWZF/Ol/pznK+BNZ9YDQX8BEtUIVuvVZrx24lnpT/RI
+qVphtuHaQNWpYrMGrE25j7YZBcwY56Sz4XlYo73Odky5lEcYhgk/jkZZy6EooKFe0j4v1qN1fq4e
+nG/+8P7w3fvR+2e/RfQ/X2byvYMisHafP7fd5A4OiYLBudrL7XI7ck1s2n7UW7xxqBDTASwuDsXh
+f86v8na9Gqed1YruvtYS46VT5Ioi6IQmP/Vxtu9V/XsV/CPDQ0NlbLCHLVCGMfz7+EQdnWf43KM+
+W603f3g+OvzxPTaTwaBgmjqj0aQ43ZxjngtA/e0xyfXbMBFU+P2zo5dUGss6cOADNdVqvT384e3R
++8PRq8MfXh69OnwXGcXxgDUPnSe95Cu+Y2K2TU97yZNu69m750dHo6N3oxeH3z378PL96PDV89cv
+jl79NtYwpxVWzGjCgfJ5Al7id2V5WbMMfXP45umjJxI4O7mAIiJml3NZyTlkg9BbA2G6cZRCUQwH
++2TfRdQN/80LyDKSWiYzJT2FTZ8tAJ/wFc+xmoBVO5ue424HgDpt3kUjMmptd5vAkl9eiL2JZLpy
+7PYZ90ey1XjNRW3vBTMG468qm3uSIbBqJ857VnEWaRrTSGYeP/kF2e2303bAJoaRNbKag8H3mKDo
+y9ADaUBXbGIFW7mXOMkBUE4llwwVR4WavfjqHhx82V244YZoQ6MqyKhMgjtvaVyq1KJSW2ryY4ga
+cp1NONEN8uCC8dxF1JHI9R2zx2+MFd+0fgLn2WR3eKWzSS1ND41iySL/8fGTk7BJ/MZjePOH0fPX
+3785enn4Imq66N8BnPFnhBfOiG6KdgPVdLaQOarV6Jwt7uLzSg2dLY4H7s4w1wGM4wszjnevP7x9
+fhhzYXhRol4fg4IArsnXbKs0dSxTd61CxBAQYVLqhnQpS5Tx8UZH2S4ZxeBm78Lc43WI+N6xgVvA
+RauufltuhjIheHNzkBxVDGkuIfsBx3xb5wLg/CKvOV2TJP8spLAOkh8KDgnJWkmKtjnOgQvfzBIS
+dp8WLIJheoEoAeqWs/7li6A5iVgOUI2341mRxbL5RtFx89Fizb+hyRnnNrptmOkzhB887HB88DCY
+2mmYGVV/Izjb3cZIjRF1x+5t23ScG609IxfGLlZ995A61yhFIbutKfLTKKeecCRsHm7jOINpOEje
+kwUJhb8yuTWSGdzaVTKbXhbu3kQ5it7iQPxmnIfSEZgekMRnXlZI/56jx7Nvk8Kpygdk5srCIUkw
+po26MsADpRN6fANoHUvWcu0M938+A9AI/fhlnNb0ViNRK9kA4PwhiNsxtWGSZ1+jcFNhppyZnGux
+PHOagytVBdlKd8v4DOmtpksIOv5GMhwmrUzyq3I6aXknbny5TXC1sd2J2txdo3nZlI2VyGyqnM3K
+a5JSL67y1TRfrAe4gC5YOW0V6IpEw7PrfIv4BeMkzYo1+1xOJzzm10tJKY0mTpggVGbAXYJ1OZ9C
+0Tev3x39mFbynLBVK7ZaEDq5gGFusyCp6JDxFxCVlDOOXo7QTN9kaWOXf+RHkKEPUK7FAsYPpe0w
+MG1PXkKN73HJQw/zS5QTmW6jN/nrdw23eFEL7wDMQMZcYSyaA97C9DU7PPzx6N37ODI5SA6nJDrF
+RXbG6Aiq8xnKRLaick86obTc3Zik1KRoOMhtTNewbqdw/VzCvjjdkrZh0ccJR61DlhwtkubGZsRr
+Jxzj57pIZzOjeCB0LquK26m1l3+pudnpEB7L3Ij7onlC38WTprl6vfCch2hvAxpewLQgWmSTMzNz
+PUJjs21DY3o3wthWghf+Ml1y3q5oFd3bTc6gwao/e/788F1D5BAXx5O/BRkaGsgFlSe1g9D9LMAa
+bzIvUBnvPE1+YHpWWRKQaU9PhD9F7tWJfTQOD7A5Yj2nVffqeVWup5omiBMMn7nrgFPS96eklxyl
+8+S8dA1iKcgym5EjnZE7KFBuKLW7BtxeLteYQy3LMj/j5Qg7w21s0Q76zo49JAMlo+xEsJCK+hvp
+Du2Rzw6HpcImenbCa/YaTX3zDLxZlaf56QwP97st3Bc3hL4SuTbWno3YHgxJBJuScyXGdhqZu5Wm
+KwScZg0WvOzuS91wxH1ZNE9m5XqL+7PoMv6cQ4uyllLnMZ2S72FT58vdMNrcirLVGtEWA0qF+/co
+uZ5WF/BnXG5mk+TPm4qTAhG/Qh1JItUJ0eE98poekSgBcDswXm4ibkRFKLUQl4fZljCzpOB+mj15
+0BNeAdq/pv5OC7p3sXnx1Haw3AGieg+GzI0RHcR90ilEwBfFtU6QP+DahQqlMjMcnH90wq8lTNGz
+vpojYayjUMMF3NU4uizSMu8JattdV1uA405TgZqtJhBlklc2s3lpuRpHSgw1RYNa7t54orY43mzM
+7dZyjdhGy3x8mZ83bL3aBN8ikrhbwrqoa/gt0oeI5CEqdVDrLCt1+JffjuAOP3z+/vXbP0jmP0Mq
+KNLAFRHxgUW4mkTjfTG+WFDQpC0RwhNi8ZXP5b+qXhZcAXwS8AxSv/O8y4enJyEJOP9cG4lw9F6n
+I7RAww8+eIBy4MTIlpE2mGHOkt+V1wXJecl4LEXOaL2eFRLGMEEnLRoQEvtHyQWcXydzO1w4yppT
+CAz4Kcx4gCPggzI58yzpvCu0FTV6Q15Doq2rjC4/La+KjFdnTj0N0WGt40xrRu87gj29PWZzSxPS
+bl+ftr0cEEevg30ERM0eBLCH3lmtoncirRRysLBU94ATpIpDki4yDPDCY09h5YXgRPMUiUeHU2UY
+RmH7PG+iAzHzQ0ZujhV5pTBjCNpPExPenxSLKVrauAT3aUFMm9MQQVusHfq2dpCCOZV8r6oyIU64
+4wzKlGAFUIY4odP+etbu8RI6RUWLlE028yUhsLNlQ06xIJW3F/Lh7StUMnxcfVy0s2JBMVPam/VZ
+/1ew2vwp8qE1LsvLKV73ZC6QaU7wNhSDOToeDE8+VveP+x+vs5MHUP43r78ffXj/3a8oefFNcfbx
+5vQU/n+WtjRXaYzcsWqD98DkrEvX75hX+P7Z4r7riMyHAXh41jsYd3tvEWwi9AU7w7ZXwdY+XFxN
+V+UCz1Swx0O6CFBko9LEDaFNhdQnR42XaFaZYde7/ElmnRcT/uq0wtlCJOqz1hA7KuThyW/plCrD
+tuY05yod8E8AlKmmEz4iDNsKs5dkybt8Yu7h0wIw6RTNmstCor9goIOJT5no2hM/mWMunZwMenui
+2VmSyQ8uH4WJW2JGPDIi3bK6p+UxlNNF/zHgt2frZFbk7Em1NVSPkDSJSYgn88e7scq6yXsXMnJS
+XamnMOMaHRNdG0yaweWADqUWcsXCNDGeyEk806XbUzTzJbUXogUfmCz5gClB15sFbGaeUcfr44BU
+yTD8zZKc25PFZn5arFAAdLFh2Y5eZsy8wJYFquAK1/MMF9d3+yNHz4Yl1Q1ALhaL0tl0lZlHjzSU
+lDSTLPkOVd6IXclTHiNPYKB3zBRUJAdPfvnrLPkDME9IhyslykvuNAY4TsTYq+n5hcNowDZ6TMY/
+JKUj24W2F5YcCjyJFOhxzQeuHkkDN0lZx5lI8Q4pPn1vHQofoFgsE3dPauD40QD7OMEN7RtENFfB
+CljryUk3YthtNN+M2dpwOU5I0NXu7tQFkXOurFdlcxxvKnY0dEgfQYgRRsr0FQs0drdA9zK/3Fyn
+nVfj6bTdGH7zAxBoUO4Fld4RaewgeVmguQTd37hbASdrTMjs5xGvE73uz0ZLxUW6d0W3XQnWQuIA
+1/tJ9pXoGNlylux3i08bABEO59Pscc8IyNA8Bk4pekJjSOsqub+Y3iQS6ELUTbAZQqV95GKSidZo
+IG9f9ZJXaFjxqn6ZrVcF1rDYi+t615nD9bt30stCdGGY0Q8QEe0pRRfRRfBZ81wJU+p4EGfGw7XS
+m17E9x2EP0J8khREbxYsg/SAtdxvI9fW3meQRyjgZDn9TKRJzm0wlVglSIoDeX8uo6+pGVAtY2Q3
+zKofyckjvSL6AcH+pXTURKkAzp/dOm8yvr1nTqKWCM20S95iBS0hCYXEoiNIIcQAr+9D+ftZkJpa
+TW1cjIoeqG0vO8gP7LOXnMN1s8Y7ZTzbVOgryTHcsHXkIjjyF50ldbWmK46VBk57KwnLVJUsNBGN
+0kJMhumQByLYOPco09CNmAEB1Gj1TnZqxuuwl7AHpyowppXRcLzAWQuIS/f2XZiYBap4G7OJM7mk
+k+KH/dSpPURSiRxuVJVZOSkUHbF8Cf99IMY/ZOhMkduX00nHD9i+Y+jSWHDFQEMSdkQLyCwpJS6i
+TtW+2RbQfIcP0lYocavcAmjFcZ7jg7j7S3zu32osEG/v4Vbj4P6okXZcsWBt/ATYO5nT1W3MaXia
+AiQaCq9q3LLPKJuLJV/nyEgsmZH4VU3g0sxJNF1kBxz3TrLKs0IOfiJRD1hmgnY7yidnHgWEVjAI
+TxeNIn6FdfDpePDliVpJOAxnSNqILzpynJuFw3NSE18OTjAeGTbDPOjtoyD8rQwqBS46W3Z3hBHA
+TUuWjdlz2BUYJ6BmyPAecHdaMRMBew4TpLuS+iZILNq8jTXmExBeUPNyYvf/W6uKToyTPywJBZmR
+MF8GiwYmcRi4HvOTUYvQ2ajKzzAZgmTvm5aZvmgw6czQllPtOk1+IcAiCw7DA+zJqP5azjXLtDjG
+D6eCII2Lkz1TvQAdhwNK59UeUUlUqhIOowzfVn6qvkwdzkZFnQkUGNG0XHYcYADHTqtRufK7bHfI
+HJK+sCkkGULyP/QsQeHclsjQtNuWHsmEGgdHOX9WAM2Sgv5g3oaqR4wO/snHFyM7Ysk/TG42WEKd
+NolvovMErXS7YTu7hLIYhFx02yvH8F+xQTzbilTyqPNa4HXfDoXy4U1nmTvmuKR2DHco7KZhvTyO
+7nh6YqcleEAmy3c8kLYaJcJ61qiYu8I4b7DlgRlebQEFIfL+V/qOdOurcj3AoMAo9Gv3zOsjDoCb
+tP/Ne/3h3eYUXvb9l88mE3j5AF62/tZqnU4X5bLWz2+m69crKPVXpyK8+xFNGNt/9F8+W2B7/+i8
+fPnuYnqG4Hz9tfP2rb795hvnrUDjvBGgnTffk6ta+77z6sX0Ct48dN58NyvLlbx2339fYgf37gGG
+Bg6xGudLiY6jQQ7pAK5VRoBVDj9BjeHQaQTmnV5+4b58SUP0XhziG7fMb2nA3gss841b5k15jaNz
+h3dUwZupt8QVrz1vKG/t8e3CB5ZecoghWuWWmvKi9Rwny4S7w+ZzH5ezUXl2VhWO/fE74HnIn1Lr
+UAY7nCwm8cebVUVZ0gwWZ4Q2vbmtcTkibS7QRlxCJhQjo80KbNroK5dGVy364bVku9i3NVuDuCd9
+8Fx2KMEw6dBhVvFWGtGbETZQ0SCDm5cGT2Wio2+ZMo0T5F8vk6LVYDQONyQv9aQQT77uwEvSZMN+
++q6G32GgaQrEELuT70P5+57YmJQokbhGeHtjIu1BTT/J7r/IP5XZLkcxYDgXDAJylGpEpraVOUs+
+18Bvi42KaGqQoczP0JgmX3iyuHLMJ5rZh9HobLOm1B7apAUGCEXMOoBxInAS6bHj3NPyF5PG83UO
+N/s/L7cjfd/uRjOv2Lbajc40bW6K8hflq3bXCfJDkpCRGUZ4ywFj7oVCMcfhkbdnMfy/Ulf19UHi
+t9YRBc0JsyQRHrxZruriQBvQy6uSSSoYQuHrVSzgEXSpCaaocFbFbL3a4sDx4vWr9yORANGphupN
+YrH3dn+gOcAEPalQchARSeySk8UCBOIkPxiS4TwA0E36QdiahrWLBJufqfA1Otmsb/4OyFmxNoNZ
+Iq/q5JvkUYwHSbiMDBsYjrbd8zFhqdkw3LSPRJvNd3Hfwfgfu35BdELl9DDcnWPa+SeK1IZ13DZ8
+FLW3IlsjrEuIlk/miWtiQdv4GMAYwP/FuAIBcNlATh1uHGJaLqonSKGdMBwMfavfDESSTsRSpVtz
+mmSByxn5Oro3A72JXgoxR+mCb4iqyRob44sA1CdxS3+mxc3tVCw2czRAlYa7O8Pgu4wkX1REhdHE
+3RITH44ZZQZHjzKe6WxneRhExlowDibCETKo1x0G5M0Gdm67GkGHGttZunnM797fMmCzg/borpIY
+c3yz8y4BQLtxy8ZOfTcoSI341vpnMO0lgj7APSu2hq9E64ZeC054xsbGaqclHPk6iYOJXXabdq47
+X7wfnRgpaGt9OotFtf9tgWpc3PdayKM6DpIPFPvCDbbJAh+T8yKZTjDjBvTJQRPIOJzieFx4aF9s
+MulG5ylQweFCY9ZnCsOIgpYVq9BkTr+bkfomRErAofmWzc0Ji3S+MLnTlkEMiN+iHPg+vr+PE4Eu
+Mu4EqIex23uYu9bScgqWnG3sl5D1K5Rj8ObkexoTAXa7JwJQbQSROi9RQtX1AuhT3uTGgT2n2DWe
+1AYlyaQeNnu3Mdr/RTFbArHb1qpt6cL2LyVc58D79dj9BEUuhY3nDl+eXuewK2SuzeBdis2fBEP6
+wdGXGiaUUEdaQrFQW3KYxGs7k41gdrA1vh46NBDMOuymMnAGLyRp3A6OpHDG2EOKqjvifSx83xu6
+lIiO3xK/t47BzoDbYC/ZsYccadUIg8jO47tJPXVW7PB893Pr9mMaq47NzxPKS7hc1QJk3iO5m+0f
+BWpV283ZUV2oLE9MAKIOuHEA2Oc2PMvjSz3GO6q6IfrKZQwEFsWNgqn0g+dJdz7JY9xp17Ukt7vH
+Ymt5bqqXxdZQjcAhdOC5S8QM/MATqbH2sFzH4YxkTGhtKrvyBfzE6pWcEq1JXAXGi+t6laXWb6aL
+1yxipcnoqXgI7W+cPrrRm4IL3H3Hocuz5J28M07GPj8PJ58Xi2I1HY/coGQBaQoH/3fGRMhQEL6B
+qAgxSfsEwHjIQuQHDoXApI8hEBy4zaaQO3DhpeUwke+rXn1jWWyQ6UUDBbth4LURU7CacY8eRr64
+SV5m8+q8ri9hc1R1Dso1fEUmFBc+cpC/6TqqRzmW1k+abmSfnJfor4vJCAiaKfoxdpoojEjFcM8x
+T8chNCTMajeCTSIt2d0Z+RjDaa5JqR8ORDW7p5vFmPLhONSIE0B7OTKOeT0X7RvahnasrtXai9EK
+jB6sD/SoMOsq2RsMWEUTZciMzR7o4lw7I1E4ytgBJYjQFPGAB+Be5NXRWUeb7VH/eFt7qeTdMbZl
+shCRuJonM0EF2iau9fpFNOkUcwxaq3MT56aO9rUVBw3ODapXiqqu/0LD2eq861op12kBI4gkJW0D
+NVDcjKUSETTaEEwNAHJSp2fcKycSPOObYfI0EiR9JH1QOEVMwhw2V+cld9ULa+NimnjBVM/birMi
+X9F6lSvM12cP7OkWucG1RFOca9jBrHaxmiqDIIOGc/R33BDNvGst259p0pcojGkMw8S5kkzJnrPm
+CL6/0pE8KfXjQc27c/bd9Ma34fREl9V6bl3bbWsh5eEoMbCGwfaZipz0ORSr1+PjaRfhZfLK5rUN
+SGpgwfkWEssv5GVYPM3zfcZuojkpTWZmKV353UGzhhmDXE4Xl5U0MkYVKLHCVupbjiv3ZHGYL2EC
+2tQpiqfpgDUesoXbiig4FdsQ4zmdYBOsXeogJXKMNRwF56QUbbzPo8WH1Q5TxK45sjjRZHBnCQZ+
+vUIEfMzQ9aSLEw+R6l49Oju8WXawGaEYlDSgfowM2gwmypk3EhsBf8lbQgDlTcHaei+AdjW6ylc7
+GHQiOykQtk8K0ZlCGhZXK3rA4DDVWEvTGjCXfNgaEDEbCrB1jkOq8QCycsm1Xrtkq96hSAAOayfF
+HFi4Wkdumch1S+Jr3GgoPJcumUT3xeh7URtvxDaMAo+ijTsQrz30P1qt++PparwhhIvaqaKYuF56
+Ii698kWlPjg1Lck0EnwDRzxdLIjeiohmd5D7QCMgUdFz2giohGaqzFapo9zdcyYbUww2PPrqyi/l
+3nRR9kT2d41DYVI8UIXMBKQdBIpL24ROvSiocTAcgAVz5TS7A7Pdsgyoz+pg+92aW/A0+Vq2a33h
+cenId6eKy/VHTebaUrGB1MSv9Q1w2wZrJEJ5g926tzyORI66v7vqxfCYt27ZoV4ZWi2HlI3RnXwA
+273EwWU0O5s5mzcFNPSO3eR118wve5tYEOWuS2BWuwR0FfkWIBOdaPxJY7xzTL8Az6IXLurxRw6H
+KEhsRGdUH+pnVZug77u4anefaaWe20s3znMr3PeSjgtFr34HkgBFrkC0G3KlW9v5aYmQG4OiY/rV
+MPZZcbYWKYz+DIbNtfGjAzU6xkg18ztaj742MmGde1VC/+uSMbmBoCfDcFu/bcZ5Upzx6LCdRlYN
+M+/ZHvpzbai7HmFEZ6bRr/wMmGy4TeDfyAxg+Qy/OTTE6pwKBtIEbAolzPW3nEq2/h7N21FDqkVi
+SR3wtciZM2xlsM+NBAV9jKWw2YwtlV/AjElL+KslgsXrcjUx0MjzfhBJYSYR6rDxDLlIWCqYivA9
+dkPW4HbKo1x5qLIB354Q4cfZr8+orktsEF61W+Bo32/umUc7iM9CY8eakPiWbiP9SoPte1VHT6nZ
+7b0EMwizmatpzZlkhCukIuyh0X3Vc1axd5u+WebX1Ngp3JTuvTLeMd1LvmluiQ2aF9j5+Lj413vY
+Jf76G02MNt9L7K8Qc1mcY9uriVANeyFS1LUXib1uiY4FsvH6xt6o3eZMHL5Imtp20zpuOKTWpogg
+NOonOIZxZGyHoNZIWJX1aVHm6ictzZJoXG9NMl6WcB9jyYaVsoN2oG2+Lmr3hPDvclXAUy2e9k4m
+gS4uar3hHsYmw2uYCSkrpAqYXma5yD/RmIdTM2Qj7hABGIBBo59aZuPKWytq7IqdHZ1uHVk1siPN
+zSi3cms7U1xM36bdAs1Tm5GpPP1iw3DMdln5WCsU2G/nwRuxkMeXOvknIbOK1APqmEZCkCHY03WI
+fm9k5ehXfeXcBmpcIYJgjBekpYCR2s49ci5OyOkY3YvwHUWunkc4Qz4uTHtFSC9nKPW6tS4izKMc
+q1Ug3LKbHEaB/KOO+GQvOabLEju77Xh6cmJO8iqAJH6uImsWmLgstxk5gvneCmfkjokywStgtnyR
+IHE/ct95jFbo6NHu3WrthCN9v1mihQ6sqc8p3aGyPdif3YS4oXxmbeOFEkX6mLbNPd3JN2EoZL5d
+AgHlswWpiu3gdioaqAVb1g2pvK/Cs4nVFRHGpz9/+F9gu3BwmupqcT3+dPn+2/+bQvW34LkP23+O
+yAODzk0woNGM9rXJRJ4n7zanomtJfihXl9PF+fNyuaXUtOSK+O5q8cNzaQZfJhqXA8Npco4kKOfG
++MccqxS1Hr3f8HQQ/wKnKF85gfg1Vv/mVFw+2Y9LR6OeWxyCsdU66H/+f62D5HnOua1QPFCtKd0S
+mcyjbyaiSsrZNKH3fcrYBHU6564KB0ZdYdotkx9PzSem3qTCjjhoca4HdDlO5us+2i39NPjFAYAi
+6/AewxgfIkoWsxGKTW+ebEoXeYEVJK47N/YWhnq4MC5ZkeQcmxVRKVe8kIAT64QFFEFZxypIdQOV
+SFp25b82zcBH89sNW1+tV/Wo9Wp/g2uD0dP/Ca4Ovjs6CkPPdNsLeuq6w31u5w8zLqHFOL7moEew
+vzFZBdqyjUs4EcXE3SW8JwjDLCis1HRldk6VUd5uoIkxoEhOQ0MHVBNQiepR3BkKzehE3zGbTzRI
+mDEz8OOVxobJk0eUJg+FfJW4P3DwhWuyzDin+ARAZMIjedlje5TzUDvZM0EAjZrpFZtTEtV4e5de
+btbNWygSsR+3y45A/V4OcrOF4tHogx2WsRtyyyOu8GxsjZaRBlAT/tPGHnJR3GGR8LX0Kb6l42Xr
+p8Lc+8vVFDBJG12REB6K2wJVbrHNr185PLShPdyd2CGOZbKCSTBCFKzoF1IAuYQcDQOlY3PkLLwr
+ryqvgwX5jPVw4yqYdYkb2mN/X9dW6IHFDXCiGvxIZKC880idNJ8XE4xJlxyuV4tt49K4/psKXc+u
+fOv2sv3HIc7T1y2DiRinG2RGftgHmFUILtKlXJjoMvbs5cvXPxy+GD3/3bO3mOikPUr6Dz9+HP5D
+9m8P7rWTg3wysYbUZDW+KPASRjMGSnG4piDmreas6jx/fj8P4Oug7Xc++t3rd5jHJSiZpP880Hhm
+GPboaiFUSAf+Do9PZGE9l2GZFU4f48UvgD0ZBjO5koQBTFxk4/kEo6B02jhX/U9Jvy/9OSF5rjBk
+ytS1f8RG0kwETfCZEnPAiy4minGKFSs9PFc1vv1KRsmOpyMhzZGU0zHCT8kcRW/VZVkyN3nz/wXA
+Q/Pv5KsP65tIOOk/oJTs48d/SD2nQiykjuAYPAEJzNFpToZoq6rDsatyDI9eyLuht3iOP/iYju3a
+G47KDDGX1WyxmXeCM4p07HThO2+P2fPH6fKWOm5QvlogQRobDQ1GxYOyqALouovlZZcEWZ82aLxW
+oQ6LA8GxRTocCrjDVnDkgHQ930wnZXKdfatk1LpE9DZluke2RHuADscaZQvXDsuRRxaGnnCSLl2U
+qOWC+pLTAn7ptnqYevleDjiGtQ3HDIOhM2ui1GHwcepoXHJ2gMoLcRFdXe6/fkK7yccwzXO0vkAe
+NBG6gpCtVPJ7lGvRsey0FXiEXQL4EHbrEgYb/bT/lMgDXgVZlN8As9NhxiHTZ+vUnOBjQLXT/Ert
+kKC32TUxzxqcv4epQ0md48ab7cqm7uYbZnqZA/Sttx2p7Wqye0kbCxE9iCwH8HDE3LW7txLKXu51
+8UJE3r+ozDA708V4tpnwl6s+22B1b0sf6vZ8kVcXjTQ6fvSyRjtAY5Zrpg3u37+8DsAes1Fnjt4Y
+nIdDeVKdCJqE5FmSAtwpahA28zBl+3QxmY5zCpNIXkRK9/rWun7yB1UPaYMVQ8C2fOWG++WzNRi0
+gkv8Yr1ewsHHI4XCwId4Sz/ECg8p3gyiWb/CXxsYvL86DrIcl/5WQUfQ5F+TWorCPWpyv4DqijvX
+Ni24o3T3UXn6Zww6xJFFRyNUifC2sSLErltYyOPLawy806FltmydXzLfEOrUovioZfF3txVMZs9M
+Ts8bLIrTjYkKnsXTLToxdPxJaGsrpprXBjTh589I9VOKuO7yukbLpm59KYT4NoWmonXiGFW93zSE
+Fp9wxq2X17sEU8tTnj1gNyS4aseHyZ+mUA67rtdGyGk2a1Y1WFzj4MBvl4hHOirCV1H78I0Ugv4J
+urw+trOLjjowEi5lPUx8wGTtALhawoegJCB33USYEdRdUb/bIEAY7EeTZRmdhLSfCsUTS/xj5rHi
+pdmxMs2tBVUF4UJ5/y6SHSxp+uBngGhRSmCTHRFecxOAZEmSAipMOSE73yEegCT9wqs1x9sQtR/U
+jOLIjIQq3CynNeeU7wGeZhprxha0gH4LY0LrbebMR7jbckP5J7jMNsDkjKP9GndE0D87ev5c5PxT
+UfNOxLwKHUp4uYbelS80af04eHblsBBKvPbCs+ykKqyxVcqmUxE47HpK48nUXQ84gEWyyCHQlOku
+1DHN3JbNsd3ZNDfWf3yyT353bZJ0ulKvLoRAvZkUzFYUjxfRXdR6MJZ82KxN5Lqyz2l6h+Q0u5o6
+HmAwK/M0HZxExSo6q95l0ZTUzc5u411SXy+8SG5tsHbP7B44X52oEJab00lxSDnV+M6M+m+jxadD
+/RafjHS8xLD4cep7DVypSb/JaoUrm6ZD7JcpIHKM8sZY9kxf44xQNEvqKhYVoGPF7UOGiB40WXj4
+oesxEYuicTBOdDssYBqx1ekQCj1fd7W2fAgS4sRVdYzihPJMKHHeFSE25VCcI8vtD1LvBYSC2mGM
+z/m38K6q0jB1VRZFe2K7ErNGC3LbiIkSosQ1qRKP4UlwmEGIrpkbFj7p1vCpxwkBpwukCpZ0jZTk
+ovfJ4him69ZUHD6lqwvGTTqieGA1rVS27hzupwJYrFGhJVN+PkVlhfKqmTeZZLFiANdOoieIivoA
+kcNuhHklhRaFCpBOOdGt37VC6XZODXbrQSyppJPIePqXWNyJxPGQxyI6ARSgNpgUUos28sucxSPD
+RmyvHAp1d7ekp2HeV+h4CqnqAHJrp9RNS5OlXGBMegp1kMyL9UU5cdEYSyLVXmg+qR/8QFiJZST5
+zoHIDaezyTy/ge3ojuwg2FVQYjrfzK2aiwUOOC5qoUo6LqqiIypfrFDigOG60hVXYfqBH4+H9J+q
+RCBjcqAqSPHOE+RAaBsEADt0pLBMxlIItJMWhvPAuwmu3BmA/c66ZB3brnlwtM59MxcIuiPa8IbL
+cqKa+OhATM4iOMOIkQRyW54Sv6BHDLmkAaV8nc8u0SMRqRKjdewjcHpZTU366wMbLOlxMINGNH/g
+Y1NvXmls3nbpduuVltgnSls493SkQG4SU2PmPsreG7QjqoCOxDLuJYHkP6PX3QjIVql20KSQPPBp
+CdNHm3Ni4MUyKdaYDwc9G4trXe3EW202eDLptaK7iwWZFNS4WFUqxdRn56Ry3JWaUjYaZzVEGTSP
+gjcucRcIEZ7GEngutxmFf892Z+P2zt11ubqsXL0rnRnv475wW4Cleqe7G0pKgNkIZiwoW4xw9LL+
+uKNAZPzzTTq2lv708XgQcl7TnwrjTwEqvhfo+sfkB6N8uRrRrcjKWT2VU6NEX4U8U4xPqovE7Gmk
+fuTAaSctayGwsj0h69MSsg2ITwllTrpqRL0umHDe7/2hf2/evzd5f+93g3vfD+69a/uqNaw2v6RK
+tj1jhPIGaBX09KTgJRRoxGol8gTfAqpgFSzSxGcFJquumISCu/IIFubd1UJtutQIG+7KWf6X6Wzr
+BWH1bXmYBL0stmy15qCRKYlnvcLHnRu5Swht3ZBMUqqeBBERHMzs8hZwPWKMQdMkBnoZ1MhH6TxW
+2KXbuXjU4MMjRGn3KjHqNeKMtKp3JhbYTaQrn/ob8qwulJAIFeMxxaw0k758Pnr28uXweZK6ewWY
+9xantQMKplqjpm+zuCTaSNJMVOXsqrBcJBIFQI6qZgRffdqU7POKWYaq1tHLl4e/ffbSaP3T+8lf
+k4/Jw2SQfJ18k3ybfFwnHxfJx5tHp/jPOPm4SlWAk8BJg0GVFXIeuOJeYzwo7xUQYvPyquhwjW7r
+6N0PR69evP7hnaS1c20GZGpaQFqdj0jPO5pMq0s/Hdoq/SOwWv2/nHwcfPzY/fb4j4OTB6jBhiJH
+XVdfTdc/qZdkLWaz4jxHiskD8FikGNVSSQeXloKxGogdxTU3pWNLB2ktDn8wBs1stLxNBZrSQmoC
+XYnMR4mwZqiZG3SlKw47zJrSaunr1PE1x3QW4WxG9ioSX8BUk1HcBpDOm42od4+qI6ApamjxAyZZ
+EdS9vhity9FZZea/l+STSb4e4i0pw68t0e4loPq0lekrEl5f+Fieqqb3qn++VxFM1bJnymqyEm0o
+Uut3h89eaD0PVVdLHhacqhFantZ2FY9T4K4NnO5dbhAPYcHWJmivAQ3OpqcZvd2x01j+M2zYTtyX
+I3ZVYPiHNfH4+BFtPB7625TayM5X5WbZeRzsS9NS+vBeJXPql480frvhNQ1XwD5G02q/ze7AC4hT
+I7kMVG47sVw0OwqKxC22ieyg7Ubid/XNFO3N20pS09tORMkNHj70G+86lgnPNrB5WB/qXPuCB+Ds
+kUAJNZtujHWyS7AW2jtu+E1ViLITE8WjUltzhWOjdER7nA4Ejvr0qnAPrbXnlUbQMEV+htc9t03H
+gn8GEa1MlxhU3Tz4hRwwODCFPjlSk/yyAM6tpAQQNWJ248bCVEjtvm2z3VM7dYVyAO3EUgoM+84q
+KwoM7yhK0A4RO6rJD1Uwnfb7CsywDcQnbQWq0vN9DxiaXe0ohLYdrhM0pBJaZ953tboo+1ikT6XT
+eEvOcuxuatF3iqY16ilVB80VRt/Z18r7azkpZv8N71VJlmXfWHtv3ehdtIu8GZ3OeC94lMTH6n7n
+4+RBl/6+e9BNOtl9vGDtcfScGnZYCy3rJkFAo50VHDedcjE99CV3JdljXrMzBRzw5bRwZNJHlDBG
+pXJJNZ1PZ/kq0XxdmwUxAWTjBZSVIf78co40lMZglLjY83g2xUiInhk5my4xqebrANAsY4x+Ntdj
+7GzIRkiEMwJLbdYEhCYdUNfbR45zKLcIaGgWCa/CH60EC8nEcSz2huwMLu8ro8eCnaUtotC9UtMG
+G0fUqnClPa42+1/MDHI/kzcBVVzedGLCSJFmAGK7agalwPrFBct6+LWmzbDmBMbsDA7M6SRPbgak
+Xbqx3XYDSzQxIsNPhs+9ird0w2IDOJyEW4aPuqyr8NpTaZhvzLZDqebKE5zJGaIdA+dcwgqAuc3H
+tBYft8FEb3pmGuG+0xGU0upxblN8bByxe92UfsSyWxIo488DMSvs6BsRNntWTfVImqatnps+aoR6
+VF6VeEAzrNH6PFPDH55TWgBvbT5TU2Dkk5hrW1bW5JEyiHU6vpxpekAOHUmrq6HdmvQdZqk5lTcn
+0jIqnqtFZK0dUbx6bamxp5HC//C8T1kRfKVh84JLe3pMpWNdZG+DUzS0xhuP3PY691Yc4sCznkwO
+kp5d170vUVUgOwfbqYqUFaKMBtJKIxMyKdrsleMaH7jLg/WygHpzu8fvMGS7p3qkFQ0vG1HA0h/K
+KGtCYSOj6xBlbggOnqpwgN2Go4JQUP+swHZgDOALFdx4sI5TvGqZ2odCJyHg7BCvBwh3VtdLzkI6
+Y9uiZknwg2XMDL2lVKDXqrdXXMNx9Kc5m96I7yIHIiySU0DNmKgbU3lTdgBCntd4bZGs0nGnlwwm
+jtQLw5IkbSboHM/smkQ5KmLG6M5DkoN9f/ju3bPfHr6rG65clLMJkygFZ4HMolI8sgkwZY7hO9oB
+ps/rDbLXXMQFJMSfxOg1JUPGfNQAWdyypA4Ilr2DaQqmWg4aadVl7lFNVuD4JUI3qDRiRHUcWCWh
+pnKFcu8CZfgZ2lCs6iZZXIoTiKfIEpyVm8Uk7YYMtU/1BHoBRil1qyy38fbhk0fw368H7Z/cNvo6
+eHCT4p61IAp5QwbPoI4Gf75j3evHv4ChPBnsW6EtyTnY6H0yXcEFWK62OhPd26fi8Mejd7GpoHI1
+I9GNawNxPSVxZcRLD29J/oxcBpt/fHj70r8RGQEpEk+5PFBNx9DWiYNDieouXUdQ4SyA7glxPclB
+pDxnmEa6BGDgCKpC3Xtg1ENTidNm9MZy1Omur7Kv6cV7RQymwt2IO2y3N1ZjypbAuY1sutLH2dOY
+6TOCiS50JGlq75CWTc+a293R7L0JkhihM2IcO7nXatpfpRL1no3IYoWIQGnYJeMy5Vve2SCbJWbn
+le2BmyIl+dpOGRVuFK7nstdbvlTNnjV+H0mH1rX/TYJNd/0dBNQB7SAcHAFwUgtz1CQIwaomdFVN
+EtJunIYNWphjZWcaKH66Cd1DtkaUsq8YptdpMHSOta4WSUQx8wmhZOHbCmfhehw5r5Zk5u68jrw8
+LmxacatdH1IVBm+xXZ4IIJS+3m0oFdi6OSS9QHBfsp6QHMKxd3NYkwX67UH5GgWLgU6sgZhvLmLk
+b5QsgpAO2tgDuxq4SHABt5d6Vozm6vR5fulbK9RYc1LWUwfujLODVGTuuSg7+edMQfaRHlMLfL61
+ks7pNhGvBuAr/cBrtFPgIMAI0JpeLenzmh8UmYPw8tIhTEMfqoXxGUD8CdhwDGDgGTxFNy67N2hV
+owaZS10hoinv+5QvrpHMb110pF8E+RWTIWtj6lhsmeWTSS0eLjNuvocHoTJyJ0I7mF7yKB7HbNmw
+JcyeW0Y23M7NtJQz2W6773ywDchWPH6ptj/xcyq0xT/GD6zsGrLIpYGHlrI7rWTdBatt8vptYpmt
+lAqn3d3mt5QoazKJ8fDotV5i3rPZmYpZ67QJ9QQlUwdbiDpXL5vx8HGP9+zwcQ3BYUk5KUgSuJsZ
+aLgiQxfEccqZb2Hv+5vzfFGi4SVyrIBkMSAIPc6u823FduEdZcPKM59GWUDZ2RbvNHLnL+b5Yj0d
+N1gzi8AIIOmRBAE5Ok6jTeDjleSk523HVQbBIQouW2YlyWZ6giEfZMI7+WI7h0F+C9j5z5tKu/Sx
+pye7pIVUjXp3V4CPs1keIetooQJ1IRZ0lBFUJO3GdgL3Cyf6PlVySVQgHWRLrHOMnxKeISQtCMOh
+0J1KBGnC4tEFqJ7GN7PW/D12lOeeut7mXNhkA1FIuIS1FnUASvaBiPaEzNJdIIP1u4ydw4oy9eFX
+zCU7nm1wm3U1pduqqOCQQk8eubWxJtuGIMIW0m7NPUg2aS1Ix0ECaJqCcmDUELbAZM6o0FTxt4jk
+Nwv0+lhwZbKigNmhcYgixZV+bhZN498seAbUbnVG6T64oVsHzc3Ghw0VPA9JqDBIuz/HLBzqtw70
+cfzlwOPVZkW+2CzjUlNGh4stja5i9qxxlTnwFSeBQErgbHqD1AkJoWfbL774ollwxNwZT3k3EIKE
+tFnlWLNjrL5NpWwmMQfV8BFj+Ufk54Tqwlnl0WgOKQvEMGWOpR38jhpTmbSRDdcN8A/UtxBW6LQs
+LwG9TfqnMI3kZ0hvLtbz2QH6748v+k/7FTTY/zJ7mj122nD/e/Lk0WP+8fjXT/TlnzfzhJNl+FPc
+8j1seYS36aNwaeSagOUgBlYmr5u0d2vB2uXC9EPcVpVsC9fvuX7tHzzOnmhQmmpgoURpXb/PF2Xf
+vA1tYJ3Cqc+vj0O6ZOyViYXhG3Of3qWYtoJNOymLitAOcpaIytARpbKmF/LXyTksaCoy/we1QcRG
+7IkueOMGYgt+SfU3u4boFHSarR0xuBOwCC960r+CK+FmPkvILIDBSzQyJ1kcRPeE9NVj2sMMx7/X
+Y4iPVEOfJdyMwP2fHmLaSmW5FiiGyQ/P31nU080QMbJkGTEsq212Rod02/rx+5d3ak69BkwbLg9/
+duZIVSKiNuObh0VDvp0NDs5zVERa7wWUi3WEqQxdwsVygVyYsLMGgjUmsBPpG56iutDOFS61+6vE
+SK+6u+9XHJURN+0ShZLhyM4gKuSQhhOEboBiYwEsAKxmLC9VR6eL4gPPMR8f50LvxgNkOMAT4ASP
+Z0eDEUz9SaMy2CZOJlELaL1LLzx+EZCXFAoUlCoERYI8n4QVJfZwx3QjA/AT59ROGYZMtpD1bP9h
+XKA52emIzY6YOpqKdf9w2BfzfUJhwEQsYTYpr9g9ci9Duo4NgwxeF4fb28092sXNEm5rIFw04ydG
+KabJqMUavtKctphQbs7mjlUnFmpZt3IH8zDhLtaaNPSY4zFU4s06winjLRXaOWX3n9P7dWEdtxK2
+fMrEdvrF6/fPXr7sOmwPVhAUMa/Oh2kqPHGN/6EeSUqg0eXI3869R6VUFSEDp8n5htI1obaS+FpD
+F05QLntaYNKRBBNvfvvFt60A20vv/TmGi24r99Kfledsslqdx4z3ejUuokYxYPsPoIOk/ypt7Y3+
+a5cpqu7I1IUMA0jdW9Pd/UuxjVxnRL/6RH/9lDAoduHlsEDZqPgEN9XcWtv6/raV5wDc01j7MbkR
+sjGe9y2id3ayKBcxd0XqJzRXQqkQJuPp7Jg/FP9NWJSUUgeBXEjlYpHcGw7OlOGlOjSUBaBLFbO0
+y65R7u9U9E6sdGJ/z+nz2lQ1z5CTqsDCfW7gjp1+im2BrrzIJcL05dMZnqFFcY0Iw4cT9mIznPCx
+WBc/DVRo42cC1fh+C4fWdPXOAV0Sj3sWeIPjhjRv2DMqax0RZ4C0BNs5k4DaoXOMY5U2C4Q9x3km
+sdaG4jHQF2gskIVGWI7IDBGp0H8bF26iRcrIoExyWUeYzDzsEUY80l3Ql174GChDfHo+LhrKHN+o
+9MF6eNG348eDk5PYEDzXNYabb3hXjnVl8y/HFxcLWJMUtI5cnCthZXbjNFjMCXpCtRxxZk1cHVsi
+Jp08QSD17q1RdLYbaqY77+j/NkLc/f8R7u4QSIn0Rv7ucQ14A80mbg7aFjs2X3P1W7SoptwOjWkY
+saVRz/hfaeyWPdbAKq6cwf8MU0sWV8YNhw2gHzfM6iJBN168KzfjNepzmb6+olCuV1PUtDgOQFFz
+VO2D1UyGBs2UXOnWLRnOyj3M9ISN8nAfVk2bnMH3kN3sZ5ymoszMGlW9EdUyLbxv7mEUcs12abvt
+x3rcU0MwKgeKtgBAyjmDsNF8YlXO2j937771lmWk3v3+VfI4e0p+I7JGJVr5TtCgDwU1wMkT07ue
+IB/T4XgdwDwh7xu0J9vw0Reo9SlhZk+hHPkf95LTDWUPgH2/QafkUjubardBW0g6ERBZltXspbiG
+ITPQPCmNGcbZjac2iY71YZ4Y9aRROKT7m8m5c859dGP2/OJXbzyCOlo2GO9zMttbwSbJTzEys6Tm
+wcwpAHF5XdFZxiVgvyCcIDIPA/a3ZsOwZ3Bv17MGzzghti9CzHb3Ldhumt5BO3mw845so7z1i6H6
+shioegFMtaS+Pq8sPhKtGiML76wCUkJ+MMxAc4gRYVWu1jtFm1XxaVMsxhRCCTFJ5cSSlEY5I4eG
+4Z+iLTQm70BRH+v9Vfpnc38wWCjGIdZkEfqFjS/K6bhovsQc/w4YC/GooXfuFC0VxRvtu1ffI9MP
+ZwJedwPpymZBljtqrwOkDcJEl8lLXII3TsgULzwILDxidsfTOTQzwZomyiFuShQeOooFZpw8uSRy
+EfbindZcNXQhufNuXRSw/61bFxLScCg+XtIhm2WYRIAH/sDrmFUQbQiNTlizGoC9RVwqFeO9VjfF
+oT1h9imwo0pbse3eKm28/rEsyhYRRxu6ii0XsW7UaM60b8PJBaZ7twV/jXvQuLWwfDQGkS/aaQhF
+FIk3ErOJI2cXN2ZINNSPBguok7+U9VBx1v4xhEwwLe1+R5CbToAwe6HddfcuwYX+k9BKUTIp7X4x
+bCROmuD1Gr/bffwZPdUJnj2DMbFxyrnVc1F21rU1MR/B0UYjLwD3FPiSmoFgVM3zsjw/lFw0Elkn
+CNLWMj1pEjR6kHD6Iny3ajLj1DtdGd2YwKb1vQRNYV22WsaoLDKMQMCFDURghqGWHN1UwgihdbDI
+Wia+eEvMyBxzsC5dMJS6DAjDii64lUwD0BLTpeteoJMxTLyJIatrxMZtMmQXw3r+7tXGiRgmzpQ0
+1Cwc43pWG2rHQy0pkeu4yWEScyeBr+WS0rW2dwqATDFUOlYDoXNMp2Z/eflfcHmkni4WjaN/RaNw
+umSPKmjgyvewcu53Cgp0CmQh0iSG1LerBveg9NXg8Wbbwmt30RPWoKdMAztaLfFaedpxAHrQYJwS
+/y9l66lzsSNQTXxiQhbcqTWd+Z47nT0z2N7dGmvwjWPlkjviO4xiDyCTSPYLIjlwqnG9TLrD7A1d
+6uhgGEWcvGJDt8LRm8PGsrCqe5a9KGYzDgdivjskkL9Phgw4yv7mQHCi6LETFmblj/FQXpeUpdI0
+tCWzakFsQJKXSDu7PplAt04n5bx3eANzRrcisgaU/RHWo7PT17DA61IayMiJ8R3bTHD3NXsT28dt
+sZEWohZQ3HyLXp7p33OTygxw7hruTr6PyGyYLoHnGAgzo3CYr4B+i4RF0EayBXx/v11SWGzz8vDl
+4fdAkoxevX5xGI1o7iia9WboaO3urQLs/14C5O6byiYguX0exY3DjNFxmWpWMx5uEMMLaFrqTqqS
+/7SXkkk1aq1h+s5m0zFqAtPNQi5pfFA7pbR+jFNW6VExVAaNbMPYCJm40k8yfBqZhMGxpqYLFGNg
+c1gD41LOpxXpmvFZ7NlTjrBwyb9E7T6pu9x2W03RiTTihZokEf9iH+jyWsUCjmRBkI+9Eo1y24ga
+6Ec9agbhGP7Riqc2oJK6eiEj44aNYL3zsWtPm89mjhsVySqYagvUQhObnvUu/Wu8fAkEx8ljLq+P
+8eVJHStgs8qVn9dA7zY4Jh9jFRTSPPbc3ifZZbENfaFggIEeI8N3dQeWmcanRgEGix6rMaplgdgV
+qSOSPAVmuWaXiSfAx+ZI1J4W6+sCrlAToUodLg8ktuUFMCtXmBMVWWqSonFCOdL2chtTrq56ZOyJ
+RKSLdK1xswt2JDxlRR18r0rMsQModVVi1P5Bx1rkGOu9IPLQA7S/+Wu/S7/ePaC/2YNv4e+/Pun9
+TQMR6WZxDP3gtOY9Mur7rONS090oLjL2zGi7jZ0AzZPGc4NEDRwDiBQYhcMusyAcPnsInX8/onkW
+rAFC4GqoBzG7LyyswuP6Fq3lA6Tlk9ydQgPhwnNmB7JCqLmPkOIdr3H8fDz41QlrtI9/FSS/OBD+
+bVzONnPftH78qDd+3Bs/6Y2f9sZf9sa/6N38sjf+Cul67MFvBjM/3U9V0x7a9CONyOBT1XaPUrd1
+2GeFQudUa32JvwPhNAaHfIRtp9/+eBQRH58tZKAy8byPHjcJF6AtFNh/25CLw+BkuzNYt3YGrEZ+
+Wg0fd+PCALO9MrmmlFgJ4xt5ChmB5sc7QGMliY2ybKd0oCG0o2gODkVSSaeJumwyMmi90+8y6qN/
+vzWQ2z2Epvm0+XtWocRd929fpBSA9EuC+V0a2d6ShqVcmyz0xUTsN1fFuJheoVAUtrsc2vGjAJK5
+g5IyBwGLZRwfiv0sSBHurwjS+w2zS+cFm4zmLvo5z0FAo922NRqxn/IPeMZ9wV1ozT3YJRn0UDib
+qlZrxdZQExCGTsnPApzcNo5/SdpNvmkUJzLpQC6MpDtHX2i4ryclmZFmWYauLRf5skJF5nW+wK8N
+DVVrvt/nJMVbF64mlRwbZSRwj/QwQfJqen6xbmgLhW3TNYnNWK63Lpf9GdAjM+s2g/aC4kl5PR0X
+DS11StRaQXdar5foG+BJV3OYn8TwCeSK021oyfqZEkRATpEiWfKBVoE/z93W8iC5LAo09duG3gBx
+A+0wMLtYauvl3N1LBlwjPHp8TBvMru96OA9EGCpFRRzait+M30fwRqw+cqZ4j2AWyQlqj9m23PMq
+5px6sqLKTuN2rtuqO4hDeb5dCMO9R54xgn5KDw/SZLCrcdqn+7b8It3ZljCr+7b2fHdryi/v29y/
+7W7OZXj3bfKL3U1ajnrfBt/ublD57Vubo7jij5qpZo/8Un3AzkajB/En3uM47seNh8iB0RNt7IJT
+HfgoslmJTCD67nEYVOO3x34GNUieECQv+XD8gh7+ZTdYLAjZBc9u8uIOl388Ziq2bHHaLVsnlI/E
+MUlUWhLDC4HsJHLHWwJisCftw53bh9u5vbr7G9FshpNGQTuaZIw5ym7HfjERgF2PO/0hR+bn58r5
+0kuxpTTpQNcaYs8YdK3ZKJIiP6y7HNsnTyrDvke5dd73yFobp8aeF5alukBndyI3BkRGOFXp1rE0
+gDU57JHiiogOKnO2mfF3hHZ65oYZvCg49NJ1TgbJRJ6Qe5BhdIAgc70LkQgp3SYmRT4zdiukaKVU
+Fgg8TAcxKJTfYp30+TO5cyGd5TRiPW3x/OQrl3wSb+UcCUIYh0NGuQolS1GVCxYUiXLXkZ5UpQKY
+nEEfJEyZIvz//tITVZEkd9eRTMpxg4oEd+PeCpLbzRJqRB864LiObRs0oydvaIAJdUKH4kX5m+37
+/BzTcxpWxY9MLhWb3GcDNMKFMSkr9vFMs26SFX+oyaGjg6qRYkaCqUa4qFBaixFF5KU0EPRGsYgD
+tyUCt5j5dSK9XY/7XBbYrUf+LNNu1i2mDQZdY5m0fnm4VYeoJzCmHJFLqpF4FpusOG97d/lOlMMg
+YiYA13CH+8F6i/ynWfbjji8u/dlP8vMZUp+950K1Mv8Oy9YgEvp8UK166d8D2r1I7WYRlmSVjB+j
+CL6InyTW5SUS3Nf5ADdhPPE09po+quvPDCWWflv/aGiv2EeKiTgME0JHVqSt3EQ7ZhdZVXswACJn
+Vxy2Lv0ryE45+cDfju64YB3XKSkt7cTJSTNlWmy/VaxParrj+4jvLbeL2OVFZRs6wqBqpq1Bo1iZ
+kj9RfGhTGKbFsRgY7LTNluE8AFjJgICu47iCL7phamDcMmRshRbu406w9oKfIAogb90dXbQiIhnn
+CKA5s1GX45mNi2s6EaX7dPLxjgKc2i0McKhSF3W/9U6ENh14xgD1Yt7l7ej86yVVXsIFrbVBrGvE
+VorO/AJ/I98iO409Z0rDKV9TdkXVNFts3fOG361V2sn8kp/3bYQPFaqja7eu6Mw7PNqemfDu50si
+/qtj0l3ZHGMB/BM6u8Dmm8wKymJbCTmqcU/QGHJeksT8rAwcnnVpqlvRvttyfdFsQ5G5cyhpWy52
+faw8enm1m2COoGy3Pm0bY7djcEh38FNVPKEL6OU+s8cx5GrWY8WiIy10P0OI9XMKWEKnqkGTaZA4
+W7nRs9CIbBCGPfvw9uVAHZIxQ2YFrP5ltijWGIPtITpTkWPyegXY8OFkWq2dd35Lb3HnTQl1f/hw
+9GKQnE0eTb46PXvSn5yd/rL/6OnjR/1fTZ4+7p9+VYzPil//Ms8nuVdfFGnJk8e/cOO54Q2X/MsU
+BmtvB+fzO7hkJptZMRBRifPpJdq3PZcr5BmdWxjs8rKpCICAvT961FTgBWw5KPHo0dM+jObJV/Bz
+8OXTweMvkwePoFrS+R4lPfD+NVxmWMy1P37D8RWmRcWNfqAdPNH2HsMUJY+/HHz51eDLX3ntwftX
+5ZW0t8vOSW1B1Evw57cGsXldfcuHdJCi4UNYFgrBv0Y5aULLJHjYg4OmrdLfqIJ4ovkgrjwCrCHo
+IUWnnxynmH9ozxgyLG3xdGyvGvwz2oGwPBTU9JLGqiLCr9vdcf5qhBlpNXxKTzSJuLjmkhSRgikj
+leWVvGU+rO4Zahn6/aS738w4TZAMLZ6u2AtQC92QuCbMbUy2rm5uYbKP9WRTKRqmCqFGYRtQjBQB
+iKM/TEbe2IK6J40tC2fR1DiWHJlb329Yqp40NU0UfFPDc8mGzVm7r8d435Oxrt8HtXESidEj1Z22
+7iePH9F/n5EAbDTCoCmcKY7KmTdubnEHSj+7uLUorqA9wBmUfQ/F3HAdjIGB+PD+uTUiRqlyjrKF
+z0CiHOVM7VJSNAfsy/8T+P9A/t9NOscP+if0K7sPeMZLVF63Xqmr1aUCW7oFkc6aMp9zN39BR5ua
+6vwAlWjYghB/piQFise4ST0vN7YT0Qsm7+5Z1JN4FnV0zlhM8hXtn/O5n0ldk4PG4ulcj5Fi2Z3R
+j2+c3WVWxY1v1tl2bsRykaRkxDlod2tby482JM7D/W/c6Dk20pDZbDYsjw3HU78ZcUvcSK567MTe
+quzwT604WaqmC736yNWn88jxueA4fLJFfROMuNnU7TYdEtKqT9aNUeMOQb5207kku2PnjYu4QxCI
+HalRveOC4UyCZAzDeEaPTryAysDnhlJ8aS2Yqui1bno2zsPyopbJz5SE3T5HY6KL/KrgZEoavQr2
+0hdO6G5c0WOeBCQcvHhLqj4yrXrHhaq2+GRYnRBHITk+sfnq6U0NtdJbQ94nUDWboGaLGlLFkf+d
+1nuFgm0AS0tazVHLuvtLVrPjiALrJDjyCIWwDuq50sgyGI+WQauBcjAeM03SQF8JNFuS62Lgt2Ma
+2emwg1V9bx16s9tVx6v4irYfSpL5so5zlL7zAtd2nIqaxX0kBY70Nq/OG7oy5W37zXI7vt2r87sB
+1SxejrQbkVI2DYpokQbbQbrIH33Vf/Lr93CRP/rF4PHj7Be//tUvn371f0QryIV194Fx4hmWrTBV
+ki9XI48m2XtAFGlg15YQ96QAG9Y8QOI7nPpr3N6hIK221Zd7bPVGgBWJIrfPnmrUXLe7b+rM9OuX
+6nKHVhhAT4gJxr2KRFrw95u6B6diip57onp2zdCX69Psw/8MPMJoNC8wO/tZ+Wn+4StBdMtta7nF
++CEhG0EVUII8GnWdLDCfFh/+t9FyizKIDLOkogx2ev6pfP///Me/+zukHDSsEPbTS7BIAnukys/x
+9liv8jF79GOtzUqiQhHpYAEyv0jSIU8lilwXSLqxH2aLELiCMkbrVyl5lbOfkdDRVGCUTyR/J9Nf
+SkbT3a37eoX4laOOppPidHPOYAq/TB8y207a78tYMT4zUUnDNpnhjjA1StsnynAihu3JFCigfCtA
+wRV9auYLL3kZgBsxq+127oyi3b9ow23c72PD7TgAsOuq9bDNJSLQoEGNt0Ka6cWuDcHSBEPaXzpD
+5/1vel3ONuewXvTM6ZvwRNcoVdySsGDDNi5Zu/aZAS3y1Wzbn5X5REKLcONJZ47hBfo5x2Hr+pPl
+rRRuvEKWk+Kq0ou+vgm7bZhNGgdHX2iAlJo1yXJyTn5entGk0kZdbjmCAcDaawKW9t7eQOFkU409
+QWRLcUrxhhZFeiSpCXfrkScEb1T6lmGwYpxi71yN5xR2e0QHqAMoBlcE8McM0AYfMZ5jWH3vY4Zh
+QzbGAXt6JuUynoaMuhyExLbkkM+AhiZ81A7gc6RDlNwdfdKZ2MT8c06eeepqRPXI73eYWDuuM81h
+ZYwtuZf+vQqjp8gfwLML+PlxMb6eDPEv5f3FHx8XmI8mSCFEiz8aSZPob0sI1nluZ5KQFjiqDnGW
+aKKkBUg5EdhwlOSMDv13uj0zpnI1PadIgLXh0t7MiB2pijWNcdWRwTqyIuhU4qDJNOAfSpxu59rb
+J+sywWGrbM2nhKnrVuufZQbm+eoSANmivMXdRpuFoh3K5we/LKV/kVekfOP3mNrcrJvL/tQWNRvP
+ysrz8I8MDRU/tw+sFQhog458pmnXdEs299gJmsPVXBu7fyhkMwy8rHPhtS07Ta7uHYN/L/Z/0ADd
+RnoT4f7mmwhtn/GWjc1CJ7qnnV3HOFqC0sE+5WcpTFZ3MlgvTZ6pFEQSc6TsTWWio6RKD5I2DKDm
+wMvqBrZd9+YZEWVtY03Kkd2jzrzCJYrla6Ox1dzNHQGCNkPYDHe/vuYFnpbZ+2I1x2jfP/BGEinY
+tc2BSXtS6BgYh/zi3UwJ7dXHae9KxXKKYYloz5qqOKGd2NMBPFbFspO0h0iZCNon7Ar7HzFI1fbr
+tY95D53Aqk77Eu5FzVUXwG0H+Q0E22dQ+q/r8ob+QtNwfY7PuKdBO4SsFfqiB4NGVjzwSse5AlIV
+mAKXdonUIyEH+am7WxgrxhP30pdh0mYhp5Ppb0lJfdpA6HfuVV0K0MOO+FijG8rA2klyr//kS5P4
+bImJYBBox3BWxs/OwPCEZs/X08n6Qj37zQwl/9SwjrCMwXJhhMwCiERV/SaIzeE8E5gDg0f6fXl/
+a/2z6Q0Gja03oB88SaoPeNslqWTv1JdfDyIWZNvpIXn4F5Nw94+0GK5qRmX1wOj2EXZGNhEhb920
+D/xeBpE1g0V7/IsqkVWz7e25arsPHCqqQ5iA3qZyHaHiRkKSU/wLjQbJhLSJRY80dgpkxgljpV1o
+e+ALe0WU6yJ9mWF+N88XwGHAPPPjCHXaJmRmA+ZnEaZmzaGjvi7LWQUb4hyqUzZKGdSg7cvAsPme
+Dm/HpTEji3K17+FSSGLI/ZmKkzp/CIOAinEUHV2gBZN8rXFEsXs0tEFb+xGvNb2SeURp3DgSzN6M
+FQOTPtAOPIqKynkEBJqerBDF53Dv7VydOJVNzkLea4dbalqMDUYkGFjKGH4BN9un4d9KJ/ikb9dR
+rsPLO1IMUmMQmUyR10oJ6aU2B3sMllNhx7aavApyQQmiie9/3A1P+J2imVrQFHfnBgglIIrrOzZm
+KoNUBPeoxfZxjSO1it38O7cr3UmPqoGH3lbd2NZtHSTDz/kP6l3lsylJImV6qu1ind+Q2OKiLC+r
+z27aPU+CoCyO6cja6arIDLO1EC80JV10FoTHTTBZxRauLr3C+36KiTR4S+C7bKRfXEoEX4nFVcft
+RMvq0WGKYlo61OLN+uh1xwof36CVcydMkhNNjqyNKZ+QhHwps5du5DS/AtHaPOKcIgDbeJms1pKZ
+s93yduHXqFPj76i8wt3vRgCUsCJk4IpEFMf98cMSnxcLOPJjnKROJCpQzcAmCEFEkxs13NFrguGD
+Q8coJJ9hFbgqmhJ38+S3WWGmWVuxzqAd5qExmIBnjoKENh/TyHQwbK1AxgavRpK0jqIBq4xUhtKt
+2d6lnrSGbCqcZupDdD5q+qGgCb8LHD0AQ3Md0ND6WeA1oOK7bo0rhFK3Asfb3F3feDlnrUwo6nsr
+jkarRCtS3x34WkufFjYwXm/yGZ49VPaRfR2jRmau4L2Z+93tGGqZpszkPZHmdgc37+nZ1TE39BXb
+be5/p6siv6wFAKLo1FCzOfoPaeRRdqSbvTZ4LzV2rS1RZUfIM/xC5FnscmL1/hv68nu+MmABRNN/
+rxp8XAiZxnjH4C/ohyxBOpQ3mtW38VZMAmLHZkLuJBwF5sMxNdgyghXaTbhJbsiF6MnaPsVOQVc9
+pwQs6JoCaIWzzWIM6zwatcW4xL01ytM/164u52rCtHbCJGNwc1tajxB/j3XbDjMjcvvHUuXEWUNo
+tqdNedSB1GGw7T7BEfmTBCsoy2fpJiiU6aboORlGSF8k8gzc/xgb/L6+RpDkHfXC4MDEfVp++Huk
+UZ1Uk58+vf/Lr0nD1ZqXaPYqJxvdnt3EuiSoFh9bjDo/0Tzi6jfXktzcFKk1zRKSwnGTwEBM55xn
+AbP2aioVypZBJM70/KJYtTCxxRzDt3BsZJLkA7Zhl2B2hM5Xs6lN8SFZwFxNWrWt2HQK+RtH9Ubi
+PmCo9Y0aamAIMv3I86JFOLp//BsFKEcvZfgRK5eRocRmDchHavxmM51NxmW1fkY5J57j917yDA7B
++XM2qnhx+JsPv2UFhx7Rd1cLMct+Q4EKtbMMPuCb3+TmVmb/dYbQzXWwxtA75dkZSjNsuovOsqyq
+KWbHYBeBrrPSsiPF9npaiAEUB9SbVaviirPaDKNjAmLqBnW9UG/4+MmvuloN/RVNRTtsr/ijR4/g
+ms9vxOxv+MtH2SMvVuWiuB6NOmP0nw9d/MndMxKYEpUltGkzp3q3IdsDNzquWeWzwQotbOjUgf3q
+N/wdcz3m08bqdAucWUyicU7zyfgixzD+nmOk28KKbZ3Sh2loAMtNh7H6d4XeFLA9iN0sTbfq9jGg
+pGm/HldeVf+SzvbeqosafhfanbG9g8q9RBqIRXqlVMMWXjyaU8z/eyVWSBi6OZpEUxR1mOwBkZGg
+r17CvF9SblYJkrNo9y1hyzn8e5AtxExDVDTqWcYibCygtjDtmAdNxpz2V6kd7EnygEldv/p+nfnz
+RJ9/vllyJ2ZGgGMNzvkN7Z/UskynGrybIaYMtAX5r3HCQ4pagV6WUN7Wnqn8w58A47gdtorBrIsJ
+7qSu6z1xNr2hAP6a5rAwobgwPg3lECLz5WvKzoOy1IAvJOmnkKEzD6UQKg/tF4noxdkkO2C659UX
+xzF6ddN6SQ4KPKSdsGgsU3atjq7sXkuapBg4BBbLXUYOxG5xlRMIH8V480ntJBBmacwWbrL6plDd
+lM/QUhg+1QPjeztaxsYZf+2o9XVsuDXXBYmE7mf5+AlJ72+PuIFZttwsIN+hoODwBk5wpTk5mhJu
+mU7C6vkM04JvAVS3mT1SbVFmlCD7nCl36+aiKPOfsbV6NuAtpqags40DoKC/mPngv9w9t9Tw/+6O
+WzqJhPw50JmTrA1hRQcXxW3lPEQYSVJArRAtNcKAbWSOF03lIxe8nR484c2DRz7Mi2XDgLh0W2Y6
+pJgx1B/TXW4i63+3FEuw1vjSuAa3VygEWH1o97q3mcBTPRF3SIb0YkJ8Fn7pdbs7Eq2IqzkGosT9
+nK8FfjReT4r5cs1mT/aq+HzSwJ6uVPuKJ7e4xXAzun08qU4jybULFkqz8nkQWTPOKGzu/lGDzDtk
+QMVdY738mU898+JZ0Tu8p4PMp7Tp8sVWje+wmJFDxdPDzUyOKgZePD/4VbH0yABy8+0mXydfxnao
+RcpHr37/7KUm/EPeWnEZiVra7rrZVoHo/rJ5DXenUN29/pgCV/PKDdO029CYuCJxlmLE5Cp7YZ+G
+hPwpTlHqosqNiZXazy9tvsDdiywJmf8xvtq8qLKQKKJtuVFS4L4h8/lacmXKiVlwjmuOnaGWovFV
+5zIjNnNnMCnUArWOviM4HAyFttyS7SuMueQEGM7q8UjclLd2YmOlHBI+pQ7IwHOe9hxwwqx4wdXg
+NGYsnWsXnS1kjyFmJpPlQVFSsQZ0Xp0PU3g/5Rh4tZGGeJ5ywNJoMb8WNaIhOEimb2xzoeEswPQq
+U9O+Kdd2j3Bot/mij58rbaOtDBxsC7Kpnm/WJPeuZRb0qWhGgDiY/pzQn/0HEGEHoN/tpVZHfN0A
+GTKEnuIptphczF1IJ6c7HtbIgrX5y6Rhb4b4lMSkJpHa/9fe2225kSRpYnOjC6Wk3T26WN1GI8WD
+CBIAmayu7h6cAnvZLNYMNd1VdarIbc3JSoGRQGRmNJEAiACSmV1Tvfp7Db2AXkRPoXeRf2bm/x4B
+JKuqe+Yc1c42E4D/u7m5mbnZZ4dsXNayczyUH7Nvwg9/zK7htcbs2nCoxM5Z5e9e985hb3+y7ePI
+hfgUthb29pcennQevRly5tF55B8OO5BcVvFEFlg2DhvNKZOq/UwpmyiF2wzCD3b/6IBj68o7f+Wt
+3lx7x1OfzMTu3XefzCZUt5Ac9SFbBQI3az9k6yVQUFJZMstVjUZKFXVILlaJlDgYCJC9b4Ww2gUb
+JupmYKXNwO3acY01OQWTV5f0F7rTyvjbTTJ5gu4TUHst5aX5QXF2P/oITF7CSMjGB7sXfj6AGGQf
+2PIEcAi+aemiHcQXIA/W2eglUOsPkk64KFvZSzZUDUUmoWVnBT3L1fnUHpelD97Gx7EYZa8usrvV
+jmO4kTI4FloA00Apivw4O5NkUuPJEp+bmwQ5vmzcmvX4b8C55XLpkIY4gMuVuFgOeuK7FlEottyP
+CE5rkAey2jQVLVccDXqrceNji4n/IpyQlJPZuo2QgeTv9KyutAqSe+mx7Bc9TzG4hfTOVZLuGHp4
+2G/1/1vtOlgd6PXuaF5//uqb/JYUemdfvuVvUzL/rcMqRNjWg1PnbrFdufVMvumJKR1oQJSuxgkY
+3yolORGGN1ISLX7qTBzIVUdyHnWH8DjkdYnMPBNOEylvbil5rUVx7clBFrusz8q42xacUb+sjJhI
+Wa9V0VLzNijWZqpu5XWe1bL1PnN27wJ+9ouWVRYZI+aORApa3SOb/0Ws9TnGMQYYSCcv21SNa+HW
+LzV9qdQPvYZsBsTT8fDkjPKBbGqktChruiWVskp5o/z+6X0ksrC1d43yfd8fnTOGNS6yQ/T76a3G
+H7BciPEMTsZnZ5Ftz1g0PdQAiZVHNUfYIFtyItmitZ4BuQursZttKceKPKoP1XxuauQvcaMtPWav
+OCR79/qijue0hsrTpnrPIaSq+GgqyeGn+menxvlSt6apOeH5Sf6v4pOtm0+nzFPc8XzZml/aOFe3
+s2MRny1RRGNvX1o1ql0FvJkVj2ZI47aXqDxX42d6YHZXFn0hxSr8lQ/JeN5GkwvyZR/e9JOpz3/O
+HOUMCw//0OWWI1bKrZNdtTOHeOtWDLiLlmh6p/vey6dAHfr7ce/n7onfUcjRC86LP/vM+oLAQsEJ
+pfWv6M7//hP0+2ZJPnZKGIRJ9+frzc8XJR6vJAlxEPN9en7+4sXLb7t7DquQpT9Rdh8rT/C7AJ6B
+IvQaHaMXoPe41t4mThho/bXI9V/AFsWnJ+carUDEqMRe9QSHO+qPM3mGOBl9CiYw3yFdpvoB3Klp
+t0K589OP5LltnTlz0b4mYZrQwK9PF/vJ3p4OsyS4LxbWLQlKwmpDPDhv8RaRR6vBgS8YVjNgxn7w
+M4r3eNY+rI8bjDMcc8vJJScHR6mV4htFqW0T+U4oVspebBKUA+cq7R3GKCSwLtmnOfUduSX6Wiy0
+EF2L49BaFU3H4Uq1RVp+cFdekNOuCEtffPkHONsipLtetAopsuTtIoq8nLjV6BHlJHbMHejz6haO
+UjxYWcUTfBjvAoeL0RfVyaWA7gRAu2h7zmsjFJtDnvFFzfPf8Q28jNWmSZgmDpY7Jz0UwjwbzUXo
+qmyadVDP+DsurRSMs9AmowiARHAqxwQYyfT0myOjISJXGzhvpuSLK/SLz4pnweiplPrzlVLrw4AE
+L6mujgHUAFXGQEamEWvfHh2ZnsBnJJfMhjABjLdXLnYbMsmtJI85Es3iPHEL0ImkPiVAb6v7jy+f
+f66qcGwXpoFanHLa2HASYyZnWIRWIMhkdsUwGxrInD1g29+vi+wY/BapeRpyDd3IGlTkiuFsil6J
+SeatCraAaLqH4ZPDtvndq10R1qizHi011a9HLsE5PU90UfG34zajM4pf1O0B/6teJzM2xejteizO
+1aZDQ1mFG6aHjZF6eptoEsMbmoLT5e31gtxZJlnrw7ki6mw4VAXxdm6fzw/k9rlMYeCOa5D5j+dW
+09oDDMdaSFWFiYZymYd7QhuNa+Pjr2kcpxCgCs26uFudSGwars0DY9NfdoNU8cC0DGMVan1qDKBc
+kTIhqKpHR8dPTp5+8stPf/Xr3/z9AX/96tdHCPt4+vTTX0n8zvqdbvjkV58yjPIvs5Nfjz/91MDf
+jdZ3R5z0q1mvdM6wf9ipFR9Qbs+T0SejJwh0VJcvPLOhapWL+nJJOUzJANnI0/S8+sUvfkFDOPnk
+5Gn2p9XVcnnnLMjJr57+OvtDeZc9+RRQz588JTju6byarTalutUbGouP9e0hfXN6sP6T3/YzDT2G
+L67rOZBFa3JzUfdYzU9K4Kofrir4ulAxg0BcN9IaI5YPKB6eTgBFli8kkfkC6DYIF/BxO+1e9f+X
+7GH+268/U4T/jBBXH+ETg389Q3Z29cWT33IZwPxSoeK3mW8R79PvcDl49t2HR9mj7+bfP/0he3T6
+3Xx8ptsEF302elj8j/2iFb+w9kSmY5NYrERcP8K/OAqeDh4f90ZDn49GIzum4ynt1YnaK/rvT7tr
+/dOT7H/aLdTmZiefjp/+Rm2+4vlXjy0CKEQfLd6Y1UsCglLG+AnXYOhOAluNXrvYeovSpyyZxE80
+VAi5uUh8edwfp6yMpQUN5vIw0MUFBYOa7PYdzNorS8Oyq0e/qeNCpj2K9BP0Txre1/2jfRjONNcA
+uzkFyUzlIihmF2Sai+BD/0wkPd0+f0nazJOjDnxmfJjC0jO9rhsEm0/vqnIjjYQYzX9lfOaj4+lH
+/KcYzDGdcwgXSjMgve4jm7II0S3rFKNFl8tycffnihM6Y3WIkdGhLAEdfSl4s2BePTml6jI/krcz
+0qgZxpewmeH4TQBy+A1dOvmi+9I7k1x5fV5frnbidKTlMB0+JOjI3M0U4psgLV/SHmoIly29V8lv
+qmmxUghEtVLJrmKEZqoiZ2CQ9R+c941pb17e7S8/V+WfcnkSWCeZV0RxOpo3RXXvNmMlLey2LCp6
+VkzFLnrjHllFVCt7vDAtTVPb4RjRAob2z36CKfTP8sqO3qUE2YjtoLb1sVdhYMunOwGcternk/Gn
+Z9GosFMYgRWZpkYcylFowLsywFIPvP4G2ZMB/T9P6zT1n3Hj/jpRt0Ml4h79qL5aILl1ezboU4N4
+toL2MrjnuDXCqBVidcSvV3n/zesvhr8JY5QY48804OP98o/9orUJ4+gtrVCi7BR+/2p9h4M/9Ubr
+d6bLDDn3Y2ufbr9euwlwLq+MvXg6u8d9BPeS95s3/86ifRLoaPP6f/gvDDqqYzOYf7HFbECoUuTE
+o2EtNVyQvAwonidBexH2KMVHrnyQUc2yDITDsQnsXHLs5wpBzzbiuwOjlKOK/8AAEEDEkC5I4dqt
+NTC8eGOIgi/RwK6NylHoq9t6S6LwICsvYI5S9wxetihEFdLpUKZNsm+22S1HfHrHiI2ngHhjEvDW
+03H1teU1FkoWIAlxFGGjvSp229XQAeuZ7xCec5Sy/KoVU8L9n/kdzrspLIDkelPhlY2/yNnjRAZS
+CMerbc5agV8hdI12rL2JiynjLKVkChKGIBXJtAxxXA3zvFYX0B1DJ61LcStCw2E6IXxnOMsbOIW1
+x5CT4YpMR4KFtSMnMvrO+COCYrEWWDTWPo/EgjK1eDSiLfSAxcXD2gqCHLZ+CfogDMtsPT/Pdqol
+6m5WrumZtHlXE6y/RmDrbdk9QfHZd9XdmsRttREfSrJQqd09r1mHkc1akj2AzCw4GUrbbGabem0Q
+3Xp/QpdQ+JnzwgAwX80whl5h7vYjeamuAEslU9MPhmLDgWVQrwUH0coHrf0qtqIRXQRvhbzVBN0q
++skgL+p2IunQdOBkIThGYDC/iJJIs6ADQKv+oUb2dnYYKZW4VTVXvieaBw8ErHwiVY9BiFTgAwmZ
+Y2H+eMHnwitWSF5tSmS3rKp5Nf+tifjXQDQB9YwDeCPdI/MuKUW4cz5yv1vY7l1wYtt5mYDRxFEg
+4u2GR1r15w28Bixyo2MmF4bg+s8UUSun8JYj7ymnEYqWCRvKFSNeAFZcca/Cj+lNlo8N9HGMDb30
+6cBIRi9hpzV0ovNMcHtF5HWoZoYkYM3VorqVM2LdwEIyShG3j7Xm7DNhqgdYacHznU8Kmqd7cEcp
+OkiyX7antTc/8T4x4NBEwilEQEscEu9T0Sq5GZylyan+88wV5HZrtBW3zwbFYmSasw2Zv4owqlxW
+yX+BUDuwapRAdVNv1F1H7npf//Prl9++nlJEbIjgpe4EoX5GNvV/hFjGUbbaM1EVUdK7/gEeErvt
+RSiyJf0suCdGkJrv1pCduDXd2ET/kXS4MBfaAcl4WWNPQeQa7FbnyU7Tj4FRlaBCF+vOwVwt52qM
+NUG5TBksUiNS+g+IPbUKJKOPCcpSnUzC2AmwIbSurkhjdsWeHpD7QmxSPj7XJQBvKsqjugC69p12
+VsbbAnX2uGwIoeMOyBjyGliNesWPmQVpln+lSaAvzGFBV5o/BatAAVTTyjX8mTPxJmVLsRKJwE6T
+biQxQNtBJtFIXycs2irRP4VuMZqWy9Xy7npFcuFXRKP/QDj/vdmu2SoZXXSG3kAyAUz8E8uNcKIf
+394v4a+mexs1rT4EpViWm/DAg98ETtbPLWh+SiQIYmtfvdzK9/asmO4BJy+GLlfO9EyYtnT0AmEw
+IkOjRWreuXRhx2FyKVgPR4KrJzmQgOx7oqmkHt3h8IxwC3EqVVTNATrcTUa7N7LWhzF+HfNTs0Q1
+SknG17cFnREo5WVFyPfmGyJQzqmgU1bZmjRW2wcZBbl50CIidFcwBs0rutyDVkwzr+k9ABelqsHp
+JwQuCC8dSlF7+9YkA3j7VmPimbjfxnUabOrLZUnyuqo6Xt+NccrHbwXR1jRjyn/mK9Cjr4OCz95m
+ABeiQ39O+dA+LOWpw330AngS8DB59PIUIqZBtTBv30ovsgZv36Z9HLBcpgn3hEWUyHuo/Qhoq9u8
+Hqmo+VGn93CPfESILWe+NnY0Pdh6oBqk0VZLxbU2pcCC6HEXiYHbYTP57HGkd5sbKRlMqTh5/ehk
+wDOJXut4tubI2SwSEpShPlFQBuSCOCyYhRN1tBLmE/dsoZWxPk+SB2ymKJVJBL56Gz5JwkXdM4OO
+x0S1pIKQdaeRF3qQDVG7QBbnhSJ4c1HxMXbX661GKEcE16Z0stGCtuVFSWmReM2DajtabS4fS9HH
+uu7oanu9OGbAraH+8tlbDxAVCFBrY+/Af8/JouKtEyrWdtIUvWHB+gT1S8w6kgbBoGvwgb+pSzV/
+H432y+d/eKlW4QMSrqsf5aNSiXbNDk7piMe1/sR3JFgxCNnbt+DUqrBZZ4Lb05kfTSWHv+S94RAb
+Z/KIoDv1YTQaFW2nNrhPncwlAbU5NxKJ+0ySQXCQZyADeiOMK4tqawxlSvZwv/aHYRDrzQsbUIPp
+Gz9gwm0i96umAS0sFr5kvFLDzkl1vHWc2Alwx4WcsN0HjtN750neKvpLK+K7M/zDHbOxr50efE5n
+vaTl4yPxcrL7dZZmv52MV6OrR7wLTBSKB5Vyr1Hd9MjzcXfUWc2Y7TqDDWhpkIefo8UEMipu2bXO
+ULNnhOSrxv3gdDGQaNqVtLTFiIDbisngvQHnD5dE+C5w0nnZXClO8Y6toLK1WsaAJ6rS88lEhePr
+oZWlFyX/4tXvX06/+mb6+atvIE5BJ+4/7O/zkSlGhqomLUSm0Vh0t8HJnSqW410rbO6IZEpObCpb
+YxIN4+j7wWo21IHTrpKjnK1q3lk1Onb4gCE4knJ3Oy3F16PGDXWaH2TOOoZMakrQvHzak/zqMI7j
+mpoiftG67KNoCNS5eWWTG16pA55IbdNViC6kk0AlpGp75y+tshVf+LEwjcI35abG3WbLcdoGSmsh
+5XQZIyAoYbDcXsG69fbtAHePmpK6o9SKvH2La5R/8eRzGv3YBIIKkcDoFo5Zx41CaFVX5PudEr3h
+6+cJ21x/deHNodHjU5ug6iA2HLdxyUru1gbOWKla7mm139gBdhkNBeoXbplnLTeoWK45T8gyE9+w
+nl4n4PVglfCvXqEottvLPgJrfyJpSdGiR2rLOIeQaY39ubCZ1rcJ+vcbWDTnZKpdmirGno1NEL8S
+1lgE1EQDd9VLyozGUTMBgkyXpk8h6hG/cVJqqv+NJAPKmkUQWYZbeCiZ6ut2vEZTP+m43hPye6BR
+mLPcrzUwgzvUDR4zCLfCLD1/TUab6/q6njWSIQe6NzIzn1dX5U1NGIMX2kps5F0WGswOThWNTK9L
+XL7fm9H06+W2P8ZjrDUt9dlKrb4G6Lv5+gcT4UhyLj81NqtrqIPIfbdWZ3A1dy3KbNdj89/rf/76
+5fSPz7/50qDCt+35Q1E0ksoL57BT87umfEHrTX0DY5Q63ey7DHhC8Fvn+kzIsGgX6J74N3TNhl4D
+tSRp7oHM3PYjBGndqIRiV17UpCYxsxQHBMCRKUEaPe3jUz8ZotZ/IGefANv9NFYBMAJoBM93lLsb
+f7SDfPT1YyS8c9TSQte5ZOLKerrHnk2f3i6T9LU/NuyJvQfa8btQZ6jfHtvxxQ42jj/yYNuLKR40
+e7dQvHwx+SRpn/6n6q4lBtAzT8cB1nfO4oPFOovf2bTXbAK9nz0lGcuZ34oIzoAfgcuGEJ0VO1/B
+1+pDyXhMM3p7BS8IhXXnQUoNMvUepV1tMJ9J1p9drepZ1Z41uYtMP56aiA7o8nNhpqwaWbDrqLyR
+PdiMukXcfvYFWA2oEX4J2vdUZ2Ygu/IHhA0A0m4BVKZ97Rk6ZgfWau8Acq1+qMuA8Xdp/Tm3eXfI
+0oGk3U3elp70uQS0B7lh8AwysiZsJcABumhLffINdMQ5DuGo+CEhrQ65pwKOYeqPXL5k+mr6Z0qE
+TQVFtuXL/rdMev9miSfcSC2EjLTAcKr+jS+dYzZ9k3sJEhZgMfAMMnzmfDEVPq+uQ1fv9N8COTle
+msu204tbV/3TzsSPrV0sk8htFlgxTJ7BC50RLn7Aca53nRBQRqov3I+5EkTWqEjSmDLZNTlvfehu
+YISLcdL1zsokLWskcklQWJ3M06fjs9GmWi+U9Jb3h3gvDpO1pJc+Kamk+7PiFDrU/huJK/rVcl7d
+tlzS1qPC11XapQ34uxDGFDtbiLGazpsghTsaAduGuvBmHaHwUbiQjopOxqOgHXVMKIsTAd44hnCg
+K57fpZ4MtXSqCYwstCTS9T3fZ5cIYvJgMVQHAukyvi2GXIMgLZOtfr8w6kjPp/hfN7uHGE3Un0kJ
+zDh4HiKHGdJ2ZGmafyDVlIbM2uVjlCktlRsxGW7OVgoNyP44rKW26ZKr4K+ofGIQaCBNTKx1OLjR
+ARcwD7eB6sOByAg63vC7NWOu21AYkibBMc5dFbFsjGiERWYJ3IgLeMpXyuMyfJ4DJ6/JRBXbhhEm
+rH4AcOvTtlDcAw5qz9gIWE81l+84cE4wFTRiqtKGFxX88rcfVtArkAQF+TvoRUNdpCYIMGRm7uCV
+HPw0KSRjBVFEMSyKuBxyuCW+OTkD0oD6pvgJmJSZv8ud9q+CtxJaWlsB3u92kOW3xGcAUjKHFRqL
+U+glOeoC4CxaTrtlfZqZYPUOuCS8lRw/lbV0FvPpz7KYznPkfdaSA2zJdDUc4vmMQTnAovVi/qhl
+NNeFt4p7s4hsKC8VLgO9Dnk/ZpN2jyIzE2oD290tQzjvlN8xrA78eLC5o0OFDLcHWyTswPwSte/U
+pyssqElXVmJMOgemQPGRzFi0joyN1X7LlF95f8v6tmhv3Fitw5HzzZLogiufDpX0Rcq4+pm8y8vF
+h/KOmVhWLVe7S8aXxeWf98z297IiNZSJbnY8fHqWWt6iHwf84kdje3Q8JVo9KNOuPOJEkXK/kiBI
+7zFQ76x5M5y4LaasuSlrm3mMCV+uUq4QXRZFVGCwfc4HteLr8jLwM4Lhmzk1YfLrrF8EVuTyHGiC
+hFAJg0PNLjX22b4iY8SmarTqdFWRZDdyht0fDtW9BmRLBrnCpyF/DCPQG23sI48dek50i6t7fXE3
+oEcS2yYkNitqscODGoxam+X84UMaEZ4tgYs2I9GzXpZ6ZvKSNdJtJV85zDugodnEFoQWWT37qbFk
+6Uc7WnO1aIrCGNTC4Zr32uufb1yEoZkalq3leuMl5hT5mNsS46PEG7jIZvRo2sb9rTOfSDJKxXMk
+mVHdCCRV1/XrurBT8Rng96lLfTYVKVabm2rei9WSteMMmji9I99jUT/VpDiAc23yc45wrcA1QqxC
+xkqtt5p/bncNX7u/O16OAZMJjE8t3YyS7qo62zx98oUIvFbgFDMx6FyZSqSd0iQnn29W62+J9Wx+
+r1jNP6qiX+giDt1xtWm1ri1UjGnKmZv2HXXnyA6l3k2IL4KtA1TId0tJ6XTaQ5Ex5St3oG+o3hku
+PhRN1ocSnfpdq0nhTeU+EDpeOfadXt6/TURW4gWcUNYy0p8JbgbvZUCYE1uxfpL0nmvJ2wGBJ55T
+Q/hO7/RbBPmVb8ZtWWvjH20tOqTqX3ts0yeUX0BDWpzm/d0SgTeXy/rP1dzPG9sv2u029PgAUHAl
+57qQ0DcB8pnW+Hnurk+Fk3fsJnLJIGhqObVdBB2dYZ/czdOo3MV8/V0Ejoj8ZMroIXQLku/m7XZT
+Zld366tqKQr4kNKklmvF0x4+RAPqBvSaKDeV8b7Vtgz2rXPb4qbo3gcxsRujtTpel2sjA9MvoEUl
+J+w2JAqQF998LrQo6+bORrePGc/g8UBaH7wONxXPDoqwcUcEi19q3fBaLNusYwqInJo2pSCRYGoM
+SVwv2T/RsRnALQJUpFXupxyH7/kGEEMV7sMNTW3Qoj6ms+ARf6XoYbtJELC336MD2/VCbLhlWgf6
+EwfpF3yQlJxNC2ZfifTxSHEirh4g5Br6n/Fl3p9qJjuPR6khwn0FoEm6A2yqJhBW0B2PQWMzqu4i
+yDYpyyYNmnbufI0nGP4FZ8T5/kS+LyJzuaU0kHp/eDUQh+5+Rp+H5fmMRNPSf+Pg2Y+61sNM6KDl
+xreEWecrACJcsS9DvB/BcVMj/f4Hn0Bs/WTiKa99NyqDJC06md73vmNi0iXR2yq7H/z5lK0jiunG
+jD7KWe8IiSIBOmmZ1d70i8Nscn2HwzjngGwgSAIIW804O33QnPUPQuN6oB+0ipTt7fbWiN96zuMI
+L1AX0mZunFtJZ2a3JGGWNlrZxDbhv2sk7j3IqKai9OJscJh32+ClIn2bKXZqmjiDORQ/6hG0iNXJ
+us7AnYcDOF04I0KUyHnFAJNgydgkAdzD77ATkP0KtiqHkxwb1e5Dlb2rqjUDU5GxeKWddiV0hTFh
+HN+ZPSSeHf80RO6c9FDQT4YmnYrtxK4OPRK0bH3xUR0exszQA0tKTpOx7LO/LaPRvBC4ipzvYgci
+gOQQhuuhCbI8ORNACwmd06BLlBnchVzYrj6UUP81HIZJPa4Tc9OXguIwiu93X6dZLdl9XSRvNKru
+C8BzJqPw4OL4FIWuveTztoBuD/xB/gxK6HFTU6qZVCt2GBIdzx+s9tCQfyYAJ9JevrTMHPQInGZK
+PgJHCICO0Yu/Ol8sa67eYc136+xysTpX/JNX3xf3sbB62I0kfDdRLk5kh8hY0/NKtV1Nw4QvzJcl
+6mSU2R1koMvr8o5sWCkolAiD9gPE2V2jmMkN0L0z7ROO+JLyoso+qMaU4DivGDMixOzg8B1GZJK3
+ByeQExLpbMtz2lQL8gbdrtrHQo2hFnn2NncN0hkT7Kma5R+r7E+wzGM72Itlhavea+V8tdoqiQEn
+eI7YlXRuOklyGGb48dzucZSHQ0syfT/+C0xvA/81kqyIaIpIZjgRl1P8fFqfpXjXiXtZ4wmgzWRz
+Quhj622rn4wZR/YsqzvcZHAQeAFsjp/T+tHJmaL980ZMV7GHTnq4UNonbe81UVdo4FS/tz06GUuX
+J21vJN7pXe+JlyNUejmW2qM0rWfHkpg28qsfB/B21VPsF1r1ducNQag4UDAzAwrXPDl1YMOTH3vO
+9QqoJx8qnhu71rLPOzHlllVDkBNQUgyD1I0l4mfcJcPOh1ZHp0QK0jDuSqbpGj/jQsJpZYpdN8Mp
+Lo8zbW1Rp123IXdVNLVjdQ62fYEAJhfzOZA3VY2HAGZBsI1nkqHqHVjSNmCDS2rE8B412Usf19s9
+4NRmsokJ3fpx0+HPydTFkW/GTFSk1Iri04EeSsAHkQxZsU6UNgkL8qAJ2TBYW70iOcJE6gBJtiKg
+2ZKdKr3QEZswuPnOl5KTiZtt2Y3k2dUADFrIsJld6BD3HByxXlKdcCv72ZFbRuGKnzQNFnzs6XIa
+TOY7Smw1eA/ajZKY0pc2YaKfgYhpLJTdVKs6VEuIC9UYc1J6zW3tSOqlmn6Xft0D+icJtZ0f+P3K
+tyPJbZb73k6QGeulLnRQ8hmaBq2CNjLQBz8F0z28nCK64xOlj6MOzNErFpCDhT4xRDEOY4sSNFj4
+ddrZiOelFIrbp+4Xh7o8vruUg+QNa30nP+TRdahrtLKgKechm0pez6kSGnlDc78LVcbkDTtKixrt
+s0NcESkYwbB5P4JRS3qosHScNUqmqMsb6APvEI+TUa+cCIN0p3S1dMRkyNgpCQUGxyxSRsKp8GgK
+Ez26doFS6Ox6ZYwm16t501qcBicsTv2dZGKrZisrG5WwR9BNYGYrSJSYqpZAONGKZEqU0b/5Xbrd
+UVet1Kb+cTK3eUdpXi0Is0kYzakUPTvqPC/kAKlNANfzryT5S2QEuFot5gaV0Nr8G8e3dNShtyfS
+dHqgxyP2Vs3djOh7HJTohe4zO+bsweZZL3uQe+0OFFtznoo0iPV0tZmStmVtH/VlPGk2clAQjABB
+sf2Fle5BAIFGZM4RaITPtQdNyEfNczx3x16/kXIdLLpbL5+rxapmlNKdIGKcaNJLE1PdFUVqYFng
+QVCV89SjOID/LKVYKp7Ce9VZ7LZHbXkz904Hv1X3HmhH1+xUSOyMTMHyP0rVPqPgx2k5UN0F0QoO
+JFMIFmQLFt46BzsYJezl19cA6M6HHYzxxcyrrQdL50CPQQbq8dJHcbbGyDJxLHLa6OXzEF00aILA
+uJJDwC9xiC4/yaVsY+vtU3Gqjy1ei6pcEqBC5CCVhu2T3LNMd+m5+zXhnqxrT2GpOi+VUMG9m+9d
+MEB/DQm1bZ4I+gzqeocxSouJfqVgekmdAqlKuW5XJg4XHeINvbQ75/d9r3mEwkZ9/pDYb413KPiL
+FgBXBiD4hvfKZqWhEeMRuGmAAcfRNWHjo9Cj5zDc+Q4xkVwyC9RBDY2M+iESg2I4/AOSzTpYHXvW
+nJkJhtBnNqRXVrjSD7EPkUNFgdbb0ZWpQ13xJ+nqB0fAnq8CZMFYoDYROM44usjcM6tEdGF7Ewzi
+IBRFDWi33Dek+wzHN4xF43E780bUwRBEJmqulLq9+rDME2iNHtpn4paN7O7OzCCFpvBuB1mqpZEL
+4uy7lwXgI452Ew04XgZnbB+uYIOTG1oz3DAf29LCTusiBBNchOXc5VK0VV/cTSsNuaAzOt7OkHlM
+uwuGWrF5BdPOfHhautgtFnSzBcLu9m6BO6VHoRFd6UV0QTh73lQ9V8GD5Kd+kmHh1iQ/Z4gz5HxF
+GbqOgkfOD2RkbyaXAWpL3/7WHzB5BuIDDWVC/5sSF5yUsC4l05PXslywF5OMeiL/3jN7oMx0Iv9G
+EXnruxGSCypVflQu7/JNlMWJnogkISZeBGQYGt8ajm8JVc0CvTIMat579eXrl998+fz3L7/55qtv
+nmUPGjjPPUgnxXRqXyx2DTRPprT/RLI1wwlaX8HN6hqSOXmxzRYG1YfE9eSzGKyrlEyZURYIA4Kg
+pHfnIt8Bt9NLo3woMLG2vBGWdep4hwCpgi7daABmvlka7SAclA7RhUTFcSbsG4rIAOzXTQIjS5Fo
+wGSElpmq8bkJxrUxjmdlhaFQlAxsPaxKhjobnXe45ZbIZu2XZUDp3P/SRZZOyVB66JEBUvr3k4hr
+/E/j2lyMI6QncRYIIijpm5aIEl/kNTA3qIIvjlLBGhTvZWM1NF9MB83iALtRHiPNmXSN1Ml0ghyj
+8vovgd7xMOEo2VS9vNQQ9uKU24TGu8XCvBMbO76xN0fWqhHrvc7psej/bhbKxB4DtErD6bcyRbxp
+aOuOO7SzqL9H0WATRlqZbpTfktuILmN6PJJXetNu4zlqRwwqGITzzO/gpHc1PxIoZS3B2V2kogZ5
+K9UvdLcLweFWfwhPOhVZFD8D0Wm7utV/quEp8UAV7YWZrKYW/g199oWxwcuEPU5Tj/z4FX329zR2
+XS8lbAU18Lp/LU/173c1xEXBrNSF/PNehWCOlu3SI/I41mhp3XwprNYBOsGxp2fpsfv0h7o9KduD
+Ozk5EAcbDgO3DDc/jLd5N8dhVWi7tqvVoplS7kTK9tIc2F+1vMk7FMUWYieU8KkjkQ+i1ZpI0gOL
+YKs33N03b4VCyKukgsdUojeCaZtDsD36ibxa+Vd/V7kh/kXLPuHT4PUdl9IQmVPpQ13ULTXQGVX6
+LLtJAevqZMDUnpN2JR1UjLyn87E+BI3UGz5oBuLMYr/p40ptf96VtdJigc2pLT/gzK4uvHVswfng
+EoPEmhSHoase84+SkVpbi62rjiJgiXMTuYtNro4RU23wttJw8TWj5pHn9Hml/ZVWS0b9ovd2vAKL
+UDBK6dBBYCXzq0EWL2fP9MRTcAYPe2t2vaLcwtL1C3f4kRFvtakvBZIxwT1aWAGnTbEWXDIijzt0
+eq3t6ubcY+tmsEgyZwqX0YETCUYypQIRwqTXRgjWKVlJrLASaTCxWwzF9clDjQaSI+iF2Yd5HsqN
+7poGCJVO1gL3eTdIFWriLvkiAyJBjEtJII6i6lKQNjmtwQXWeWtRyg2uLsQ4WgCEu4qi44GxARg6
+8jOjwDVylkWP55W6STlpoX0QNbhHWner1VGhCfmKzW1wTfmvjEL0DijXraSSsQ3olaZlURSnRCVE
+jEpWWxiC55xfq16iiOcj4sOApnN8J55JxLl3mY031cX4rWqFnYs+U3+RI+Gzt6PslQ+9bSNZSZhX
+ZxiAZOSE7OT22l5tKFq5BBzfapNA0PQEkeyzNix6gs70TIlZrn0kJV2lGJrVuXL8UPBcTEx/7u9T
+9wu3Nrmf2te5vS/aqZrIg00R2AYWNqYJ3yvC1xFa9zMavgdd7yF+hhzBhwk9bG6xd89uSaFuKWqS
+jEXs/lEU7WP23Ef4IrzPoGCYlimqTcbZbnFN4sWVskcx7l3V4dbEdfv91Hadetl/t5KO22K2Bju0
+jtxMW0SDosVDYJH2ktpUC+01kEgGxSDI8cwWms/M19pJfcFyifH9TNLo4sjzBDWzJnTa5JFqHVRL
+SwbfNtnaKUcesXtBuc4X5fX5vMxux4pzAtRjDacWZsyORa2gHTrrsHJ6ALxMDi1H1FMBHZ12qjd+
+r/NSdBLIdUhtAJ4eE1r+Ya5V3SeYh+9NSzWkndk8soQZYTqlN/hpihYXcXZ7GTv5Qss0ktYV5+aT
+cu252ezQue2J/stEcfQe94LqSr1fFx0tyJQNxfMI0t7O5oRIuchKsUjTQXr7BxnpW6mgfvohdZnQ
+D6ZZ/9pIemQRpXjE4UoHHh5Cl4AQ+zPwgXLQwOFD3ZZeZ5Rl/7zacfABnG9ZVLjzvepI2kIoyiJ7
++3Y4/Orr10AA12FE5NigW+3BlNZzc42kvfm9tOraTDiyK+IvYJsEcJky6PlVD3DpS2X5c2cw12n9
+9C3pbhSt9l4u8tNsWaKqreM6q4BSP0AChZxHETBOQiXaZ0S+OHl2CI5aDL1lps2dfohKeiN/5q1x
+T457bu1S+4c13pvVBrlQD9ohbwntPHiLGTAeGa1KBwpGAq5G6EMw7llU4ogAX5CdTsnWD8+Lq3pe
+ITe9/9CcErscJcUOJLxPhDuh+B6378BJtUWyPcwv1Jk7nZkHG62jIADBlSvJDU+CJHjT6svlalNN
+XnISRRPPmvLE07KJ4wvrOuFxS1FxcVTRHvnGoKtkOO1Sqk0tOt3DrZ/pwYC4UBYIP5akJ9lHk4q4
+bi8IVDo76oxqwZfh9a6+8x+1MHSpKj724iUdWm9NzJOdLqnCzuwT8I1qAPiZ71ynbNJRXu9nm7uq
+EpbNa+DdyHwcvVrWOtNt0ebo2mflsi9jlppNNevIE+Nsvqlyqhs6czOcfv/DEVMGu8Cszv/E/i+S
+xzYyqCYynqjisbeuD+JNZanh8DGK3ZLNmzq65+Z9c6y2ksLjve1Ui1sq3vxFH+eEBsnEPdyvCPkQ
+n5vRH+h15zVQn7UzbPJNOnSDZQEt1YOSR+HSM401IPcNzpl05C6sftON+LkuYu8lG9vQlagh0WlQ
+5+Buj+G3cf4nAFHweoewC+aJ6qApcHobccHyRvZ+++a/1X6lyMb9fvf6/dHf/R1JEjtGa86aXU3Z
+2DbI/s2JiVCUb50jj44hfOtvFIUCXVx/VNvrJbrXB0AnFeejImZS1Tf9e12+q5RsD9/r6fRaKes1
+OXJNFYNVp2JAt6RQ/bfqfnjNjo9GKrAUxY8SGLZ+jhhkfV3Fe6FQK6+/92Vy1dVInDzo0dj9Ang4
+zpnUDURoGRyAhizg23q727KNUTdKAfmlf9mHSic6fSree2rryVtjOhWdtwsA3d6huGi8sTMpFLya
+I6DgF1GfZubc9VP9WXG4/ySNI62sfhlN7SW9jOXYN5vJu26m6xXyvOBFC7tDYpdTJuZ3+HHEsVbm
+zeMfqiXyLK7CTAaXFVytnBpd7/uqMPBZMAokosdoU/AYRIAaCQOVRnTe+1IhdYU5o0f5YPCv5Le2
+wK+oPwk06+4WBb25tERx+s3TUnkNhxRMhlZxGyGk+IxbNzBDZHnT2EBcIkXEQZ+dczrGGwtjDF0j
+OQNSXvCrD+dhqsoNnAslgQMN58Nq885xdqQ+GmAfEAgeiqhF31YwJCvNpVzUf642uT5GpkVaQCbH
+glmOCJmJAvem6c7V1x2EG7Bv6Wy9I/cu0TTuHZ52Wqf75TjRl1ejpTsd1uIOzqvncXpw+ClwtRS5
+TIXVy0dznA9h7foauQd7TxuJTefELa2/JfmvGM4+KH6uS+cnGJXPckzVTnbpb7btzj+RvHV7KfxY
+IM9Ij8qAr1/NgUYyq3By5yuaIP0DfEjyJqUeHmt6klZWkIABZG6kBClN954gaGhh3L8izGS/EAwN
+9vSyMD2B8ZHr6G5GWM0XSi0xtWXq/jIZSU/mLWmY9wjddXNR31I+5ok5mFxzkPVEOpISGgCkZzZW
+unCIhObFs9HtUlCT9TvFoOGCKb14B/2V8G3ExS8pxYAqeN0w7JwWTyoDd8vqvSIeZLXeXpUuBFFT
+LxRNAD4PujIsO4CUs8Zl6jyPDJZ0K72/efMftBzKaCLl4v2H189esSyqv8qYQwgmI73B7ugGCHwK
+jl4LIl2ZXa5WgEfYbQQDR6OxSGp7pPpDwnfbMIeBHUG49XU088kVaeXPVeNxNYs164GF6nym8vBm
+cp/34vnB9cv9wCnQe5d0dBdCD4w7PHXhgG8YBlhp6+fMdxg8aNKbrZQcFkewcEZfKd6zaSGfcMrI
+SU+d2k0FewCXqbd3o554oiS6f8/dv9/V1fbQzqlwqut5dZ+uN25uMN0xpYAziYt5QYFz3/T8DJgD
+kGepiEGNlX+2bfFg4IoubE20outrpExgfcAFcj6/Iyj9JssvilKdCRzrYOa9/GVBzucIVCjA0tco
+lt8WF1Ij/58LzsAwat/rBS+26yTfsgLTrTpkZhlsBWcVGE42OWsuSxDU2rKoJjevGzAVmq92aO0Y
+7JAX/9BNat8f8vGLBupYVTmIcrgpOgazPe87TdKlEpNnenzbcyluBkjoeHFmOklsNTmV3ymcYUPZ
+RJYr/C8s7PSJwij6Z1ELPDWz6HCZWFI4dZXlaPMxNfgY7TzmRh4vV52bYEI/mHTwcSifO2dvCShN
+Le54ORMdECFxo3gkY1/nESa7Y4JxGWdLaI3vYC/cKhtOgh+Ik4jsAPAqoEEpgQKdQc7k9QOP31Tq
+sqopv+hlCRlAKnGGE84+2ED8+OJz1mFGWb5bLhDfOyvX6tpCI5iFusDg3HYhUVDNdg6kPWP9kjgL
+9R1Pg+pWWThu/T1SXCxXvSNjclib69y4rzfwXocw5n3NnQw4UFpRV9fb8rL64I6zXo1Ue6hnWjnf
+AQtXzXFycmg0TLWcrZCjesJtjPTn6CHGvoDdKwtiGC+lfaJEYzNzGs0WUMkCVwUdMuaPDc4FtqL+
+NogvkoUy5Y5E6FwTIjG0arm7v5Gvch2CxuWLo9bwDxNnq1sjjYpb01/1jeTnk8y8Ot8R8KT/NZ02
+/soFGYATLCdYzbelAFWHcUiMEN3LBLEbrhRI6cpFwzccHhyHHrEDX+/U6fuMgL69xLYyTieiWon8
+OjJkk4tdeSxRxgMz4MK8rnCviCLxeIP5mhDD+fCoT9qXyF8fLnxkQ+PYQcl9adNSMzGLad77/OXX
+37x88fz1y8/HcrG4z9H6XtMv3cEtQpg+PjNQ934IMBsMQj8GqAUibsVxMZ4Ly6CXjjyh8hP9l/Z/
+SeMjSWG1aCKA9FrA/e0CP0LhXhoCzm3wlsWYwxq87Tn7yJJTetvotyMDjGy+8kOJ8BW7nSQKGAeL
+cqODVuxoUp4m7khR68jDYNa/+sZr+npKzvlKDdw1cr6tiYg/j1jAs70uKPEhqHjES0LrKoVlj1Kl
+m7g0r3+q8Bc9H16aipPlDLcPVMVg12zVi148+5FicfCOHUi5QfD9iPJSIL6QUTtCbtmaZUFzUTpB
+KZxQ8+wXhP3Rj0Zj0A/bSQnCrwNZ90odaxvQYFt5NsmexKU5WOnQ0pDYWFMlO3pYJ6wyXe6uxQ5D
+0dlPjoImFW2l4FHpBZlxEXnmu42gJLYgWioyIOfe5Osf/dImzzhofx90d8y1jWih9/uPfPugucA/
+XGABzVp6HmkMJOZxhtRNEDjclw0eI0jV1sOzX1rnDfWVjUmk7GeOPQwcQi1uX1hZf5z1b0mG53OI
+z03/BzLxoaw0EAVvCjMK52EHwVcoz37KGPte5B8OVONbjmWpfjFJLGDCayxcYP7Dt+v7lKxJaHSu
+yFXcQKPIPHfzKVwluGeOtRvqRzfKgc0ytEcQTYqjlkJYo3BNBXtAqYUX9a0OCaQPA1bkKSFVAuRI
+o0n4C4e3WKo9PngJksvPjXTNmEt4B5TGO+6qRCWc6ewfyPCpXTFZKyXlmmiMfQvyI5eBjrm/Y5bz
+b+mB4uFDPrFRuKCZdFw0JAInuAR/JhslTzeG4/XD5TnVib80CRKk74PWHSjDyp3cRw7CTrn33Qay
+dWt3PO2m0s5o6q9Btq23cou2r+r+eXKjurlk7+I7I31LOVVn0pvIWUttZtywKmcbdfZQqRTtzVA5
+WyIKFvZhHwx+BqEt+DLk/fAY7L0nqlAAxaD3K7odTqIhxlhALo5J6kjuV/8c5e7r37/5h1dfOvE4
+yPNDXqcCihOw8My8vFY3sJbAg/eKVO9szkYQ/92G8r3ErioSVbVTgs9mu1uWBCEu1o0mW+02yE+w
+3m0Ju7u1+mW5OV/45dkDFVpZsAed+0N6abjy80oVI1lLlpz8rkIyI6ELmquYsvK+raekg9Mzk9eI
+q0fdaG+IxeqSLkTtMrqaV/V8QKbWICHEsTBnHV9ZGeBd0lBhgCUoeC8Y6zg7ARw6ofQj66C82LN3
+IVx7PLR2w5R5GJrSx+Me0mpENBcKs4G+IIxMsnnyfGjdtUDz0MyybZv8q5t5Xa8XxIcEYnjrmfRl
+Kz0INNexOfIUzbvj6W+iF1L0gZd6wAGbkVPpRn62aYWTjRugoNbFalJIm0jdNHuIkGqB9kx8wjpi
+3+h3uimXLX4gouXpt0R0Hbp+4G2wPKdYW0pJmXiy9flbRDhW2/lM6TOdaBsbXAd90KNYOjt3u3PH
+VVMjves8zUNSEgfXblgxruS/umMB1X22Wy9Sjj38q1FS8PGwLMmYS2g28PHfpMnv+4qEq2V/jM3+
+IW2xoYUJDAUtjW2g8expKrJQtLR1V+FtOdVcO+tomCRkHwvFQ/ApzUc6KKmTalJMhzfKCjph9eOA
+TLrKd9BZq+yVALDpnk9KYiQcTtzyWDNUHF2qK/hDqRT0ebGP8PetQNhZQto5WAsxj0Bk9UihUFxY
+jD2r5Rv2kH4mejbJTtouB0B6cmdKlhmNRpmSUs9Xi3mYptUfWffl0G6Fa+fgPZJJeyEXR8NH4UFL
+WgM7mtbW3c7GSVwJwhOkL0n85/O3W+u/CL+fsy7b1aMJZSARiSi8FMw+BvdNFz+nxRWW3n/ZT8gR
+ct3KIHJPH/N+EVsLbFSpULwOuvosvMLk1rMbhj3FolIeMLs55BZGP7LI6NzVvFUtVbTpKahE9js1
+/KQY1rPb0AXpF5TGaej5qukj1k3j7aXsrUw/nmmZZ5/oBjb/7HH2YC5FwJn4L2/hUxQe1NeUrRqQ
+Pw+lrvSa+V1EGWmZrkQeoOvBYRVdcQG++sHMsZ3pTQng4Y7jPgIGmKJth1UlfbGDjsQN1tU+5KtI
+p3aLQrNzwjrUJ/qfvEgyZ2tLH3cJhs7SwAZARoIeu9dw16Kx9JJLfYM3arKl90bhqyUs1RoIB4VO
+x5+4Z0b04fWi3CLPmtKCs+Ew+/pue6X6FJUYTegCA91ZkcKUUyUHCCZa303dPsP7ed94owaCQeuB
+gzpPUXj4oFH/x+ja0nhbS5+c+ZMnCldTNnhFbAWQ2AMXRKhDin+WPcnonTLikeZ52suL6IVrehWw
+fIpWq/Pa4EWNk/PGmCkntLjaVrfVbLeFI1Jx1Knvu+f7AD2NiTdP+CBMnJqDTFu1J56NO+iuJcmI
+tjJdLJDnb0mMoSk+hnn4g3Yf0Jzm2MSjozhSDgna/DSvWbF3t97WHh+CQYEmtNmKgChaqjth2qiC
+LO+IHJgmI8vAYRDs7QZJCgG3JRqTtvHP6a/HZ+2oF62Rqj2N5yl8ASyKD++ik4ur+6Vurlo5bFq2
+0I7Xy8Vdyr5OFh9z8+obgsMaAvHKM9hYGUJes4oOhZc48S8wTTubDPVgresVyaQjMIjoZ66DehMr
+ymi70h4vuR5A0Qa6cpLanic/5v45puDVARnKJFy2UrINvOMrj0tFkGkpsy9dXKTWPNCG1bx+dGKa
+L3yQxNRWpgyPx/BfY9c/+CKxpF5yuH1tcmIZl303myuc4OD4Nis5J+KiAioWWtFRR6qld2WWu/Eb
+59WshEmVneHkIuCMjZcrcuum5IrZpp6bvOHl8k7pkx8rOO8rPjxJpUfaLcP3by8kGfkhCZZLLVcn
+b6BAFc/y2R+P1S104hk/474NohN/dHAlnkAmPkkOiwtQDTowcIKY59KChPruU+uZ2h6AI80tZAQ3
+Whxiczh0fWhN/BXqLiiraOBYxuO8GI/BSmBLPmBW3EDRKTNu4QrrXTr1cs5JOx0YhD1z5KCUqT01
+eprA65ldlQBfPz0ZnyGuAU5UGeHFYHhhjlM2q4d4LZqsebCTuL/TMal4+L04S6+/n8TSm38KL56c
+AReYb9yZ7Wuc6IyblItQ1UrYucgBcTHiI6MWOi8Szl3HIiWl8+WZXcrtaLKhOmbZQyXSZb2jvQQv
+Uio3BIJfFPEVLPehd/1Wt7VY3QeZF0jsHDXve5Er25973dcIRimQDrD++RPFPQbZ00H2y5Q4J6ED
+U1Z6U4/luoS+dbvKXAUAs4GDlCfc6rt2KpXz0N00yOjgzww5ulNSiUif76q781W5mdMz62a3jpKf
+UbAoKkQlp9fV9eooOT3nXa5IlyB5I5FZQvcytQPyciZE6m56WPuyGRSdGSJiA2YAbtrSa7+450q7
+yXJaCgVjsdkaDtoVVpmlElj8ZrYpm6vRtTpvSnto1ekhSXoamFqD3j9JX690Xz2Cb2suDxEMWvJX
+OHPaL1amL8Z4dsmG7Fr7jxSid3Ewq7ZPmqcnVWSp9PP56rqs/Qdev0rGaKMElkBPrDr79RWSiGW9
+x73hErnhEbTMOfoSzmGQD/lPext/9x1u4se9Ar5Mfp+B0582ziuem3021AaR9MyKuPf0g7Ci+ZS7
+V30hS9MN2ihlHk0SgpWx2Y21aYBLx/kUae07jH5jY1yQbTrAZnqqieCsFwHCUbvwXPOR4YSvQ0Nx
+KAfPtklWwU8+upuQNaQJjN+nzRNZSnXigh0z1Bqwa5HrsVfIbwOoOxyW1qm0YqvKqx6cCfxzdy/8
+rq6ErGEXxen400CqPzAfq14M2cpjCRniWwigBOyy7wgfTjkvhKFJI+4lUBRvE0o1C/unZ0Xn+/kt
+rpb1/ByK8LLfBfd52wVj6AsZbW6Bh/kgYUJox8wpbYOirsb7hEGU0hYZ/F3EYzbC02HD5rA+HYM1
+TgS8uMmF9U4aE0dqM6RQGy21GfqsKfyL569+/+abl9/2iqMWi0trF92z1LCqLREa3kO8d7w31bpD
+j4sMlbGzQOrateKF6THkkIf0S+s2DcWNmIhWO2yfkYGp6Yh6RDj/WWmH3wB/HtIh38MOwrFc5VTG
+kVAMP2ZTku4XCDBpMwMa+aeDLng6mfs8yQFm7e4oFNNC0U3wU+qN97debgU9ZnVxj+a1A9SBPRhX
+yY5ODqbpA+g5/DV1P+81xPLVNtN2JnK6Fu7TApfnW5OHvYGuH1G7NHc6hLUFC/pdail1pxNTfjw8
+OetwQZdiiZPN+mL0sEoX93SukctTT53ZsOVh1L75KyWK4hD5WjCucvKub5XZTOJKslsu0hPTo7/m
+qrVAAkD7eXz1o6DEs6FEvH74Vt/46m8nG1TJzCmQPKTnuDHubAzJx3f91XyOEi+Uy6y6Xm/vUFbD
+cPpwIOZR1IKPWhmHasUwhdL/Terd3sxFz7L3YK4VF9ibVKVigOEURehzb190qIHolfgBGXUejJ6S
+f/tqOZdWyQUgJJzC0oLj84bX6/44813egEAp4oO/y3g4Fabs/xC8iQb+edS8YrbJzuKbN/YVTDbQ
+9f4beXGmriLxyA8dyOLm1OEfnoz3uW6n4w5ia1F8c7u+2l3rmnjSfJeOI1TkFPlu4oB0iNu94Tum
+ynfBw366B8y0ul1vIrjOzi6uBUz6Ola1x3tvGxIf1OHhDHMOyzq/0xjVaaHRc1k6dVf7TB29nn02
+LXwnO/HK2gAA6Gql8x3lN27YJ459HKF4g0ULPD1aoX3VOR7R/7HbBCZy40L85sAnfcmoLBalIM5f
+D5XyRoZtnu6lmFHaFm34hUoxyxf0OM7OwQk03TvXKeA2ITXd1dVint11nG0ucXt09P72zb83ieM5
+4uL93ev/O2NcpXW1GQqsFoI6H3N4uoNxcV0BDKNurptB9vat+l6t9tu3ZF2ijxdz9UmjVNmcUaNs
+DzjoTwedtBcRaSjTduCILKCLgzDjAlUxLAwjVvUGDpLLxZxiQO8aQXFxMFsY/MSsqLuGaGYMGEQI
+fRdzA4RS/Itq6V+Wqw7EliYc9pRyq/YGnGN1An1DI9PIRHvhmAglBngsIC6zHhPuN8LvpKxGR/tz
+LLpp5/xci+k3Fso46SWhooQxU8oqa0MWDYbastEE62Jgy2IGqGIkcc17AUjahL81QQ0uhkpvrnSC
+ItWO2pKeRmu5pniJFzyMP0geWkFRY9bhLEIbuge3A3cKbkcKyJ4fMzSNjfDxS3Gcz0qRFSVfRJaq
+csu+i5nOqm1uQS2L5V22Nx7OiNqaGip1X5AORWrpmLwiYZv0Ww8rnvBidXmJIzJfVWz7ZXw5B94Q
+zJMAg5hbVDYrMcHNzaqptDEtt06acY/79qQIvTE4+IyBqOHgT5saZyMa0Us7IDdN+qEL0DFUkWGO
+eUsXwEuqL7HvJisCjh/WCFnLJL24YS153TS76u8/KY78nVVcWMhIttWjgjZz7L4XUBmiX5cAg3Bp
+THT/za6BGOIPgLfU0bcMkoA44huoHOdXm93aA02hLeFLA6xyhycktjPw385dnFJa/1yv89OeKgo5
+RxXvnQUVfcU0suYYjVfLW3lPOMQc9yhLFmHHhUHA+HIlpS30BemRamlDmdWcNJaQsK37ilTbzhKy
+N2EZY9sekH2bB+qzvVagDrnLmCsmkTqm/NtTC38VYlZMvUbgC+h+dowZYB1bpVkyXJU/iQtHZ5ci
+o9cV2IbSDL5ABUtCy+rDRQR/hadhDWPVe/P6i+FvHPPZhUaWChcNTQUjhMfI8rJetSyzRsa43b76
+Kg+SQOtTI+HOIWBndLm1JdhSHXy7ncsWfvF5rq7aFtA20L6khPVWt6BjnfzFayIIUHGGh5v0oPEd
+PjqzstHo7C8Hji5hqJWMWC88ztXyNNaeAC8S/EQXE7HBz/nNoKgB5E2Y8jtC/5q5HCQSYZJlO+aS
+fD8LWwtSSvW49amROTnfTeqBtzO9S1qGO1yOYyw8mKOq0eUo+xNpkOllsZKds9shh4nEopDJWB++
+0trRAw4X5+yQ65mlLj8aybmsp6jneIGm5FNjjBfSIac1TTn0IfEs764aIx33+cYLbfIMQU4/wVGr
+DzWnX7AnaTmb7ZSAUG4ruS4BkIh4dFRKpiHzJZHoAPg/uxwvvEYSbjNmi8IpxCdzVi75SQXdKRVl
+sanK+Z1zUCnzAp3SiDbFGG7KDvzAKwvHHHstBFvmX2kOUZgSARHhmLm6hr0t7cgnWdAew0amB5Tq
+5ZQ/nrH45r35BdsWkrIRWrrYpND8jgKFQinE33lQUVJ8mFdQgG9KBAKK41VefBRpBDtiyoVDvs+O
++Ive7r9iDhWtnYhhbQ5y6ZGRLlRdd7SdO+f39MlZ9igzf3cBebq1TpxaJ2fJiAj+NbUDnbxFA7Xb
+ztrkT00n8b4LGsodvgg4pC7jwK/bcqpd/XsvkY/e1G3dQo/vS3Ey00nNNMt3glbIL7TPFjRwVTKe
+tT2JtudCt6ShF6Xf9dQdlWYClA8tCUf0z6MpBwk6Jzd1FoMbMtWlG/iVnkRiU6JCkeJpDpRfbjTV
+OT32H7Bpail8Og/dO1MpK3hiQY6iMI9F5z1uUy7oy9x+E97okcDWcdseaNSRKR+rP2a7TVPfVLr/
+AYEAbdTthbFkadbkhqpw6gAcmGu8+i2Qaf1DRfnWncajZhJWCTDijzVKMG2Io3DCIEHHLGk9CLmS
++i0dXcuW0hYMGU53lJTl4t1iwU8SzNy7q5k2HdyzJ69UfK4/djjGCvmxk/84H+77CAJpsrj/VJ38
+ZEkOEGUpcy6qqU+k3VLOYWehk+z9PbeXnh5H69VnpQtXsPBrdwgYrlwRVHLliz1n0bpFCf5Nxq5M
+e/1wImXmKK3rpCUSOvv0Ej/lq/tiTp8IK4HVCoTK8W+SFk7d6zq7SIOLHw4iPe+NSy+DtKlm/H5n
+08X1er1qWRLUmRX0V4LsR8j51nj62FpKqXeyhLhY83MNlVbelDVlgclu6tK85Y2gCsm6F2/f6usJ
+FMbNsOe5rAbq5drgi+L0hDnSo9bPLz1agx47CNHMRoamx74V1xSgTwzMl1juwgUe1kYtTnaTh8ak
+onWpL+b3XmmCv51XzWxTrylK7ISW+em/rsWGYWPfat9jnQODgWNmcXDSnaS8TPJa2kPwWZOtmhG9
+sN1j4774vAhMz1KyHSOai1GdCB7a5lpwSllLo2uIs1gYLa24yq6tZqTMvUE++gm66BJTggtBd61N
+RklBNjTudUivDvEF4211z/eHYWn3o5Nrh2Nik3pq4V0R/v2f3/xHRSxK5p5XoynrRvVquVrM33//
++v95+Xd/l8rMNDAJSCmQZra6XquzvDF5d/ECPVCKFrkloOXLaslFTVemJ13pd5wa4Ln+XpxFpkAI
+KbfT6na9KJccbnGEW2p7tVntLq+qW35q0JkFpmp41a2m9S/YqbaVyBFzGmG13s4G4j3F6X/p7+25
+uMOon8kVJoyYQ1MSpat7/8919SHnbI2WKeJLTgJNhSRn/KuL7AXn1Gp251xb8UqUHeCyU+c7vy0y
+pGwC8yzxbH17pzNBlhtk6+a3SGSJ529vR1n2+gqmxe2uXGSmUUK5pOoilbwAexNXDxY08BxaZg/1
+UB6i2gu1fuzFyt5KaGaDB93svFI6CTpT6snNqp6TVXvX6MAYSmO/WChurSbOo0DdxHhyf/Yv1NKv
+9DLwauNmkOklWrqVxTRHhqUGvgp4rpTXnLItmV4Re1/utitFZST93dFphv31li+EryghG9wESn6m
+XtTvKpOSoXQ6Uy2pUqDYaq4NuNQJDoPQoLuG9bZxlkX2S28fkYO56zhiTbfHi9FQA9OpqjGd2oHI
+KqAtZ83ZX4wOXJPYyukUZVUzdBMaDASd8YNy8kkhpTeocryqasy/MymqBiyXaZc2p/O6MY1dr+AS
+xQm9Zv5+qzsamARmKHB3ogUPd1lOzFJJazt1qZtG6oY3WA+k3KhfKQ8Krk2yRDPGq8lX6xJThR34
+Qsmf1W15vQZW8gvGf1I1Ff2SskIp7jgDvOmWG6LxowczfCUWj0YjuOOtFgMA4DHYJiVXZdcLuGYg
+n5Pix3PAPFBLpgf4NKVbrBGhjQYHep+WGf3A0xmov/UaARznbnsFSoU7rLuWL0A+inVh2eDwVM+B
+WgzJ7JyTJ8u26lO1IIRnZMJa3PEKJ8lLie5oYL5RBZcgr1IdPJygkq8MWS2XUw3crC/+Zg/QwuoG
+OaDJU8MhQZ7jtxXQNNTOyK5p9aBaSmtqdux6YsU7+oMampWzK+fR3F1pVxoBeqS6NIBTQEOjlR5k
+D9kjC4jY81BIgtpD0xtFtcMnBznAVCH8yVSiAuaT6xNvZBy7NPk+e5ZJb20qm9U4VS2cHR30wNjS
+FNOCPh6+S7wjsrjrK0ZMczHjgxfG67DZiI9zxG52VSsOrU78HS0Tc2BcHW4r5Be1eqd+3K11dd6m
+PvJU6nsyHK4HriX7JYN0Z2HXP+2c4Fa36+a2oC6h2ZVtYsA+/nopw2QVIoWN6sautL9DEjKhC8Ik
+uln5OxI/LEklnxA6AxcExlLVeUEFSaSwo9ZRFOrLFyN9xs7C9xdupDU4lH8Ol/T0zNU1fMIzK+ge
+TTuoSQZf4RygRPbbPD53hR83EswtGSnq+CTbCbdDFtsyYDxODQe8mt1k7Vl3KCWkkSgTNtft0B3c
+6fpOHXA8l/oFTEEnyVakhIvpE5MVYtGuzxEWglNH1jbwa6mbanZ7t67y/m/7snJmIAPFr72DRx7u
+baeu/6DJH2yKPuEORtMFey6vK2yPezx1UuKAOmaLxvWAww8UwKL+UTVtQbBg37FB/WbllGXYLrdU
+pBzNnYpH9ltV+kjrGQT0sFazpUTEJC0bdeM5a2PqGqgqUk5YpCizi0qnXBX5eKQNH46qFeUSqZup
+aFoa3HXjB1rLmrMfp02BclMuWiocK7lksRhSDk6sk3b1QWCG4FRi2E37hYaSaqBKBhi9NJVyfzPD
+8iPK5cgYVf3PMLxn/dTVxqx6X+HZipRQ0XSdUbxQ35iM4Dk6LsCD8XVepDkorc+IFmy2iqwBnuab
+8M0Iyqe8N0Qnzn00GvN0QIMIeK3oxS5ZRF+preOhE4qL05zrlLJb3pMKEO5SQQ+4BxH8gaS9nDOy
+4Itvt9fb/NTd0RD5MyYJNdTuTeZeDt9g2dfbajb9q2ysWfSlYpmu+aSFSyYMLXm4yYVhOV+qyeQe
+35EWnYsMS49yHvfgBGlpIpBM4mr5H1BiL86NnBfaUHG5WJ3TF31yAobRxUWybDO18cqrvpFnN3fO
+F/dX/MR7kWSAqnce/YFT/7c91e4rwpurBNaarYY+a7/2liGPGTR7jZg/i38TC9RxGTY7JHT80syq
+4MFxsSQYpzlSYVNdfJtoST8HrK5hDznkMEvRg2Yi/NgXTfR43Fwf4LypSZIFRNvcBlTuqfEJXa1j
+uTt4FuDLJ+UEdJzpoC2dAZYwCZVOaGWOpg16wScg95o7FGeQZxIuDX0bX0pPk2vTsrcIpqb/S8eR
+8lLbGoNofX1e7/Wmz2xvihuC4LCni+piiw6drzZwRUH3pun93tC+6BGdyUOzZBO9emOb0Iy55Y9r
+haYz4bXR0kzC/bqDScSMoo1Z7JPQnFNFA9IH+PlyfsjhVcUOPbiaBBLQBTQAfQpJJEuKYTFtJ+St
+Nsp2R6DDgELaLY7aKcjZ9aO9J9gpnDjB/ulNHLl+3s8eZX26tvocgu0OH1i1/aKvt+qrzSE79dXm
+/9+on2WTgPzQsUdHxzBwvFmWmzv3tWcyOXpXVetyAdc6Wmcy/zfaEqz+WiOcfENY7N/L04wSfRWt
+qf/GiGXeukwFf/QHptwrBOVvUS7/S1CqkGI/WA9YdokgaqKRPt8AqT1FVTFlsQ3BS10f0pc7nYn9
+sziAeBKX+14KSmyW7dSAK/bTi3e//7oJ834Xkx3jx10r+MO9nP76l8oR23mFrPXhtRRVyGn4XZ04
+DofR//P5XOg/D2WGR9EdWzgH4tvdeVvFYWfFP+wWbRUfdlb8vL5pq/i4u8dV6xwfdFb8evWh2rQM
+tX2saT7Ae/Q3YQQ04CQjwC9FVLaVEdA00y3xCsSl78NUnBO798Am2Q4G3x/IhNvZyMHt0QxUgzIT
+p72/JV8ioZn26ccLzTyzf138zTkp1pT1olwsvtgtZwdpwFLWt3asVvvNOs6LkLNU4mGEFor+jzVe
+3O9WDEcxcXXZv7EZRHypEsyAHLa8ckk20C4b35SUjuB79zBeAJ6L2uLp/5DYP6943vdk7dII2r5f
+aAxQVLJB+p8Y2qpIQslJZtpylEzTU9JPEWpVGvvTtkavOGE7/vqW/iktW/mrmqQ2kzur8mAOGx2j
+wW2CXDn45lSqndEE0lK/Hm8ywtLZj0cTMwgluw/6KVNHpJmU7Wy7JXuo6az/oJk8aAZkhJQxDvQI
+ioM65xaCBlr4vpNZaDONKcp8nT4h5uciXeue24p6/c7NtC0nNtVZw4dQwtq3LblqVMcZemoD9XLN
+W9ZrvmfB5i0rNv/YJYMzUPeSzQ9es49aNKo037Nsafth/qApYush81nXcohwj4Qq7e8KzWOkxsTp
+xNTgQ/u0Zq/8hw876ixD1924z3qo5GmfIf3cL6liZqI1c95CmHxgg3Bt9yQ7pEz3GzOZ+D11j7Cr
+eM13y+8fgNzx1w/EdTZK1hxkiQc9FoL+QRycDpCBpOhf5xUgeQFTaeamfOuq4XQ/j+0lkoOU87/K
+G3y0lzLTPDbfe5N3s4zV7EVpfOa8rBcAlRB5ZMAeyBD/CAYM24SkGE7kqNmAvK8fWIK1GuBNYF7P
+ttNpj9/v+glBVN41w13UNaO97HjKwzSmegpmO7VYHCfkut9u/7TbHY4V/sRenKD7+9+IA5Ch55tq
+WJtTyg4diGJcLKwLBtl+9KMDhWkc9O5AJQ/xASFEtiSzwC+FVy7JLI6zpr5eL+qLu6wvUf6kc2Qf
+rhRdy98TeEr33T3IuUG7Jm4OzD7VUqupa/eJxn0lPaxvrzwsfghDGhZXjYZfnZ58Oh4+PXNmxjkK
+KeiC2VjZZGaWnzlVHa8Vn+sxvtBexx7dJmSIcFhHnU8pTgfFIUlEiBMmw37++uYCQ9X15fJAqlYl
+D6HqH38F7n0zSe2iInL8ozYxvDdSPldDNX5NXFvthF/SHK91qIRgZ3gLYJVyNgSTv09sr3eTQxNA
+Q4eblurizC/f5Zh1gFOWaiHlk5W4VlwHrb+xSCAE+XndzMrNQe+7UvRfL0lGdChzpG0/YIIod8js
+yNlWle16/aTfoxVQXxZRsRF6kvkbOG3kgJOEHbnuO5gtdTuKnO9MFLDzZfJNl7Hz6yVnzQrPr2+x
+CKqxG2+EAspZTRtIBKTigdhnjvtzpQMefbMEzXl2Vc3e5Y2sdgAeTt/FRhv+mqMmKcMJPucnRVRg
+fTeimNAvqIBDa0Ko5MGMzvsgRkEZkGvKMa6xMOq7AXPZpD2R6NHaEz1+kDQsdp91e86lnBd7St9H
+EaSnjrobUVVin5PXrmO4LGLUXQ/ptWejbjk3wjjT1NBCraD544//T8mWz79+lT3OXi7V+mbrFfJP
+qS8/vkGiRiOpGole3qyaq9VuMadFlEj0sQQd4l6ISEAIS9rog/f3C4cmjlnq6l0CHJuaQMoF+uMo
+Nu7KGDRM6t26apikgX1fjA8ne48UJXbN4UI/hsZ0NFNIZvcibYcgOXab0pJBjnBuV/lmREuoiGpm
+WZ+zS5Ebct7LQyIdCDxzBXyz7EOJQC0SWMDp48y2PeqRPfsQ5VrNa8AqEm9D5Po2m9eMdYnmR1n2
+7e7yElov8uyk2kN4O5Ro4ThOYMJ5dSG5V/SPcF1Xl/lwuFxdl5f1rOilzrFBQ10K1DLisprL3Afe
+8alLfouDiOQHh6AMovYrUIBulClaiFSys6h+t+eU/GN77hboos5jjTVnDiEna9F3JG3/uZPZ1dDC
+qTbvWbvfdqN6HhkVsxhRQmghlVuKXAuPuiqfOO2c7iIdgnU7QEdFCI9iUlLkPdOLbE0FAlkOGfdW
+J+a41fiUsgC3Zu9+pCiAVZDL101ZqFa1YbnJKqacQv27Zd9PtNMQbtAEqZ4/+0w7gOr7vGiRE9CM
+ZA1BE8J7qtstm4LHtp1ATgjNyTA3qWqe2uwrdGN9Pvqevn/Leunt9vTkV+Mzd23xpUhbEPT+ynJH
+93WRuil+RpYdigVHRzVFJNNuwHTTRzBgvZxO+2PBu5dQaAt7cZHHAR+f2uSZiV8/Mb9eeWlSdEzd
+EoHlrIexbNhTfWQP0RbG9KnwPfmNuG1exF/mF+Lzj3qKeT4Jylxwc5embq1W65duiRq/R23jHVJ9
+SZWf+D85jOHpo08e/VLR1mJVbtEAU6Dath6xHr/erZ6XLeVASV4ANbu/Wq2bvgbmoRLq8hpkM9Ua
+cpanf+HBu11dl7f5KVpU8z6jOfzSH0v/qlosVv1T/E4kcOX12r/cveP32CtaBfXb+39589/oXDXr
++fn7H17/X/8d56kh3kf4aIj4P99x1giKEvz6899xoP/XBP2cfU4/V5vRARloft68M2oKsRegn8sF
+wrFJ36IuZVXFSUuTRkSXnC7gY2Iot2sjazCXNUB0OeexpEwvzmxxMps1PH5knnJmvu8D/ppuw/5Y
+CqsVztWlp7//wWvIZjrnvyznE9xwtWLE4nM9PxcqtDNvytfz81fLm9U7gqLvq6o1feoLHa7UtUoD
+srD/qowdp2UstZcQJFUWuAa6uaOOQhr2yuvDAKQvqnKpqEDeOC9q+3RlFtLEvGZfN9VuvgL5ctoX
+NdJqQ5hjbOMqFxl6t1BfSvpwnSQMOmgU/2pGF0bR8UnCGlK3dmLmSCna26zWa8KMWd5lr76yuGh2
+JO33VzG6mHoitgyaXxLxN6XkoCRnMnovvRwVacUhNPl4HMjzgHbUSPiLPJ1sxwHeOiRpyX0RjhMI
+6ilA5kEMuOxhHdJl/cGkp3gteTn/CP14k4flON1l9C2lcnsGQGV/r/NXXw0t2J0IkquLi8JZIof6
+1SF0D7+xMhELUEfSQHeOjywunOpxJFtP2PApaFRzmjwY0/hbk19yovs7IGVVCqJ3DzivJx3ZabjH
+zBJtGJfagcsZ4dOm27Z6VjvEaNsac13mNIZpjkPMUpNUaapvDAdgjEFKByLKJSJvK9RBQvHcFh8Z
+fU+qRfCt1JOaPwMOGuRWPBamIFyhLJPWV3OWPSlaiE6BzLB7zUevvnz98psvn/+eEu4+07ajOBu1
+U/NisWuuXLM7NMPpetVsr5Fy6npqtENfUaXNWGGPqBjpp7yH0XK5K1VoERi4yh/A64fQx8H29VH/
+htZTCa/qQpCvaHobqXlezUquUwPWqLqmi4ORzZrVdWXy2KjGkbBhrsh7tQPQpc42JT4esBssqm21
+uMtwfQFStWzgqHNkmBAphvu4rR7lRgbeK5CJ9yjmUB5nMutqcCK9PMQ6A7FXh1YWM1MHQKodul/h
+XukusU9KTyceYx6/XQBY3tPODvSePs/mqxkxpzdLpYQSypixdei7TW3dxW5Bm+CMaSRNvBFi2C3n
+yPqGuVa2BQah6rC+aAu5MPGO4cTH3GvCaHun8sqbNBDpKlP5A4VlwQAZNgXu1XSpuM5VPZ9XyylL
+CmrIs3daVkQWC6VNPBlwClH6KRtmog1zzrOaNDD67bQ+U1epEjU4IJuyMvSmdk9UR0rrVLTiWle5
+o6HScdzdrWWoHmVoNjs/9yRLJ5oBl6Jcjk7zYmiZ0iD1w4/STYrIN3L2bkCzljZGyVpRuFm7yyna
+2r/aSWgdGQzPWDVD9z1/8pBH1yOjZyjthh9E1Rjf/+XNv9Mq2/Z6Pa837//L69v/mrW2ZrcmVYvo
+fLO6YXS0rU7JlanSdP3VjLVLvhU6l6hOIRrrb+QhpPu8Xi3fVXdr4AxpQ6/zlb4UkQVMdfaPioQW
+HZnMPA3GQsDStyYRkv+jVgyEP9JHJkhejZ5zJ1ZL5DzE9KU/Nt0NsA6Tk0BOz+fq4lNcXp3Xwhqc
+wpW7o6xLpAj78p9iH5eEbSfmwZJB9dT46gU+I9G1WuFXlFpx1+wgongtnFeI0cC26LupzzPqx+le
+GbfYzxFJ200YjZIIfLes3++qoc6POoQiMmMzn5mN77i6JCfry125KRXpGdQ/am7kLpb1FlCndbFS
+qli5rj+UG3UvPTsZneDWoEnQ+OPh95LIb9hFQKDSfhUj3rzc3TL1/53dvX7n7CwqMu7Dcnd9DshC
+Nv7aPdZNa+3I6y3y05RGgjycqq6uM7p+p4aT6367kNNY8h6BcEbEQUckLes+pmhHkd5FfTsx00h4
+7VfriWLYAKnCWuhxDICS8W4KyHMkbvNzetgTk/d4uZA2LFr9tV1Ud1USyqxUIKTaxOHwVdZOlOOp
+7uY+0MbhHvp516IWZUP194kgYduet0G5/qFIIT4YEmC7WxvGgy6lVOLVTagveiWYlA6JPmgbcDtF
+9ZlvD/sJ/8Cp09zWpW0YQ9B4nqgk5LQUwGIhqm3ysnNcM9RlWSuZP4U8LS1yicBs1mLtoiE7946W
+dSFPelePrpa0G1W3W9iNTtWMleiHV7QRD0KyJFwj8yi7QOsUMf0pM7Urbh4gdAN6OUIKS4E5D6rq
+m7RvryNUG9mPUQtG375gPHZaEe44BtQ36PWttxVjWTqA97iC6HYAh69K9Y0nCmT2qmBGxBDTc1xq
+hHDrdCBuYT5H4F23XIFgh80jmgC8ErD1W4+M3zLOoDNoH31f/L00tD6/oGkf76V5v4H8CAj53Xne
+O/3uj2e4jyCeWkZ967SiqcLb2JHcLqk7xX/ue/+/vvnvAWBOsyCs1N22Xrz/317/V2xKP3ptwWYp
+N22p9AcGOtxeAVR62JQXQMMG5iw8VenNU6I3jo6eLxbZC/zWZFfljRgdFZdebRBDMGeYR/qzEoPW
+vFJCveK9DOh5pIGucbtzoiB9plgW4Cd0Umm2dUlP5AS2S+MRNHJMg/3E6+vKvO/jb0UReC6uLXTQ
+78qmntGIfZTzhPindBCMVEmjk5OnvwnZgv2V1RX54Bdab3ZLoCbyo3Du1Bk6dR7/JkTXhYM5I/w6
+0PhKHU9D46P0iH8P0onySqcwRb3LDg0wcqqtDfcBvzay4aovou5pkmrnFLVyWqc8NR1qH0/DaMNN
+ILaIuvHZTUdeApu/y87gIBBgILdyJ21eua7IoYnZGaIm6Y7B0bTcxF4O2R80SL+BtvMU7MXOdqP3
+K9LQ8S2r9O5+R7uYELCoEEzWmaZjenPjahnX86WsJYnUckxInTf75Yu1ttyzSXjCQkzW6gbno5zN
+VhtWIVc8qX4jY4hymFJEbc4z5yJ8IFrDjwU6WNbQJnalsyaIBmdxN6OGDLP+D8s5ZXxwpjj02UMU
+fUs1nmVPYurEuJwJYGDU8emYKp2lpb1jlPvD66ypt7vS4tNXzM2za0IyULrUZRhy61GXy7pjoUD4
+K2hztmq2z2ezqmmY01qma+WC7DmXfa2Y82MuPJytduwFlbpurIqHoUsCOXW/lzYYSLye5lq9VVrn
+fDdDqSM/NnB3PSypy6oZri6G5ZCbeEi3xnC7GtIRG6o2hs45wX+UoYDcsiw2v+K8yA8AWH8eFqdV
+ICqtvFSs9upyrgLcs83VakHqLaHpzap5NbfzBb6/vxbZxaK6rc+V7q406Wv251KaNdD3HWmKJD29
+tTIaQM2XNE1fdjnmC9PIWKLoU9Y+NT1+HZJVUQUbh3McwBz5dXqiL2PngKi1hGjPNdxMMst5srzw
+sD/SOlfzF0Ix5KuZq8ZwYJXMgv4sXEK69L77X+ymalF5V6OLj4lmwgX934Q8TSYf3QYelvXfdgn5
+QTx1t0utR1FD6YvcjkSPTR0BRVBbWpudPabP8brbcThJKmRKJSbVENPnLyzdgpZAe6sVnst9gtor
+UNHnplLi3lx9fjJ6EmFK2kFqZEnToG2qiMQyaZPFMvlwqFjk37mxVAEneLpElIxwu1YqxDxP4Vf6
+Qm4cOKEv/GSegUBCOuR8tZ8ing6tpHNGzLlCqLq/bG3DcejmXseHlomYFnoM6fuQI+S34MKY6C0I
+81d1cY6tkS/kIL3/39/8R20+Nm68I9KS/o/X/2+PtKQ3W7BaED3jSGlnX+Mo4fsWHRlhUHJNLSTR
+SDMqz2daQ/kWGt5yVh2JFPiKvnYEQU+kDFuKWnHkyagl/KcLSg4BxRyTcWx+air5txkFwW5Hx3QT
+Eoj9jCFWndBdSSOENdSqJZmVbeoe2GfMMh4dZ0EcJ1wcWSU0S72p+MUTNxNSAc22/NrJL45wsVbN
+LFblHHec5NkgmH94EaDLq9XqHbIIXRBsKkVXKjEBhm+xEqj65CxmHCiVnn3kzVA/rZPBI4E97XqZ
+Gl5KrJQLs/nbDSdCmS8pFcjiDvpvVilVfo45qBVib1oSJZpZuYZX+ZWStG+wCDx+yfQGCaKyj4LN
+OPtu+f1A/c8PtBTfLf8iRg7OB7T9sKJWsehKaJyL9Qntqg63DCprABLAex3BgHbF7LRb8MjiOJIr
+Z5PloxslI26nLyhTnmIJ9MmYUPOikHFRMhxIL7VthTR/fOd6AHMyQaS8XKulNPkYaKUQDXQ5onpi
+4WlURXovndcXF00o8Nwv8Ja/nmRPnEdI2FtiIUeXdJ2g8RiX98K43N6AC3uakFSfZMMgb4WPGblQ
+dLAw49GLVsM9U1I1IJawcmnylEY4PisiZXhGGVO/78XaA3fzSL+TWvuvqfVDa61hWMt5wqASh8AP
+x5ZmvkJ9hpT3dsvzcoF3b8VjYLGFLzj7wLv4A0UoYfKmPZIXT3ejq6UnurvriKrD7ITdWL9b9sdt
+ACfw+HIrjqm7Mz84jrfl0cmnY4iucP866saEdMfx6GR85ksYPH6s/a/ZFFh+mGq//DzIftDvF5F/
+/rFwG8uBOHkRjHPMwBVrYcbylyPX6f/U9HT65OzMnOMFZSI1P6nxesFhC88F//s+uVT7X/6Q+vIv
+obMdNa+dLRddL148EFpp7J+audqQhfhI6whRLjTW0R94F8ccnzifZ8ut85XrrNQyVfVtONvoKOqW
+Mb4EvhNFuy+B4Ng/BA4KxZkg+rHTgVmsaplHSBLuLPVanSR/1c08SWUHMQg/2SMGtM36D3Pr1jE8
+IREU668W59QjZs7lE67ZD+GaCfNOFUxMeb1a5+lJJn7iKZyyl4laA1oEPdAOAmsb0l/63Uuk1sbx
+eAnXRLdqS0wC9xUbHWPSmCih5mt+e6dHEHn+VyS6JtfwT6yo6vw8cT5o6RRR8o5E6ZVuAK1DQhGP
+kVIbidBk3qZWeAyuLrYCIGkFpG9Eg0V+xVKJpoH8wcHRcGJjRNfVpnlMfyllRV/mH+r59koN5DdP
+wJc/Vf+DVVqt4Tb0FCxNfTe7AowerGRiRBlkJxn5vEsyUtX+kQb9JLHPeNziCYQATXj8UJbqP1cT
+mPSp58dPdZQVZtZSd8NGO12ZKg4xTNOfNNLsrq9LUtv6GhyfwFBMOV5L25cY/Wu19lbEL6/P52V2
+O85yP6osh/AvEXkDoxQU3Zig4DhxgJqlAakOP32Kj7K9t9aQCvLS0VbB2okxu66SSgncIuRq9edq
+qf4sZFGUUHu+ahyXHNjzJSRDfusXbSmkIiVMMaTVmm79yaSfAE3E9GmfCnFXoS82gfUoLShMIaRO
+TQuywQM9gyKWv+yGe32aLw/sVw7qtHo/9do7cATboPPtR/V7j0mDJrw+6Yv7d2raae+VepQd5/Qu
+P/muq2br5b5t17HOYc7oQ+Kd98XatoVannoj7+c6Lspo5Kx5j+ESC8/ApcVgUvo55W3lWOhRKKv0
+1Y10Xp5D413q5/YrerynOKc7kxxvVPQH2vGbvGrlgVJ0iCQchRen7HxxKmw1EL61b2r34fOeIu2V
+RW8ozqLhpqIktKoxeMx9qCodFoqKb5ZKKW6y4VAzJW0UIUMGJext3tVrvCfMOeRmbjz0JJKuhMcl
+4oLYU4K0eFxoiDWAWgw/LDuE63pZX5cLX/ENdvnMXVEZmOsiqzRMXKB/2jWETjKDJwUhSqu5MgI2
+tu7P1WaFO/fScTwkfZSF/+VllV8jaFeuu4Jde/mIFLEQjDKn9Vn2iwn3of7el0MBJzF7lv3yadAY
+aUJPEi9iWiwi0QKeD9in9oN62v9W7Q2FQqkr2S663qx+1wXad3auXtLmDDjo/oaMGVerD7ji67MU
+UjkvxvgsCT4uyzP2TNRmmcG47EIH2EH+9pg6qRgm2ZGhuyXD+uzQ9EEtexPuzwF7Eu7Lo/aNMb6t
+/b0Y0x+3PeEWjYeJAv4+mSLhHERVAI6AHykf7pjWMLU3vxrqoj4fLfEH7R/r86SA5sXHJJ0wWPVu
+Q4UX6Z7gn4cKER4nTbKij2Ebh7CMiGyeb+WhXZENlg8GI1R/sFGb3blweT3Q/Q1Mb4E7gD0F3oF8
+ljyP4dj86/L3IDLrm4XnXnrzH4g9l1Oi4qsx6wq+f2+swpzaMZwNCh3M4Y3zs48Y5zdE6z/VQHld
+zYjMQGMaBOd45F7hOkiDUFVGaza+CwW1buxxFgwm0YRQXpLotx9J7zRsh48olXVjXnjpR4+HkG57
+sdWUZWonN8mYFl6alW90CnHqSw173PcT2HHQ7TLVckvrwcZR+GfhDZBGfu8R8nz3DTFo+95jPIin
+teoK+/dXtXItaQyFBjl0puGHvNxqTKL+s6Mo9Zi/E0bz7qxglySSwbhFzfTekR2aj8u7M4vQgna0
+4h4JdhE3/Oq65tyC3iUqxze6C1tPEVmn4MjqcBV87uj5hUwHXY37Z20F0yeS+vKuKnNuZMnfdS3c
+LxILR3dB+3A/Vz9zxGE0YtOR30SqmYAev3831mP6gZJ7YWT97peALNGGnswPev1xqjR3sbr6MLNU
+Z8H9dNHug9p2G7mH1AOWZTf29Pb57pztJG8HV/i7XTjT3BifGz03mahN7GPmeQBHar3OfsKZGuIL
+pyocITHXdn7lmBIQMzsg1TPNqbRPImEg0eMkanAHV0qj0RhH4lXIljAlT+vv6etHOOxUb6xZ3QZO
+9VOxAlJDj6ieeyidi9qtEAxXUBCrD1LrFMZQ8vGj/ZAn/DHk8uAc8Ny1nfWXT4v4fcY/n6lnBq1T
+hK8N6L5e+oDYUeVh9lHVHkXVZPruC4F+FnjqP5WETxBBTRvvLuQjvx+9/z93o/8PMelL1A==
 """
 
 import sys
@@ -2605,6 +3107,10 @@ class DictImporter(object):
         self.sources = sources
 
     def find_module(self, fullname, path=None):
+        if fullname == "argparse" and sys.version_info >= (2,7):
+            # we were generated with <python2.7 (which pulls in argparse)
+            # but we are running now on a stdlib which has it, so use that.
+            return None
         if fullname in self.sources:
             return self
         if fullname + '.__init__' in self.sources:
@@ -2649,7 +3155,7 @@ if __name__ == "__main__":
         sources = pickle.loads(zlib.decompress(base64.decodestring(sources)))
 
     importer = DictImporter(sources)
-    sys.meta_path.append(importer)
+    sys.meta_path.insert(0, importer)
 
     entry = "import py; raise SystemExit(py.test.cmdline.main())"
     do_exec(entry, locals())
diff --git a/astropy/wcs/tests/__init__.py b/astropy/extern/setup_package.py
similarity index 63%
copy from astropy/wcs/tests/__init__.py
copy to astropy/extern/setup_package.py
index 975bdd1..6174d7b 100644
--- a/astropy/wcs/tests/__init__.py
+++ b/astropy/extern/setup_package.py
@@ -1,2 +1,4 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
+def requires_2to3():
+    return False
diff --git a/astropy/extern/six.py b/astropy/extern/six.py
new file mode 100644
index 0000000..85898ec
--- /dev/null
+++ b/astropy/extern/six.py
@@ -0,0 +1,577 @@
+"""Utilities for writing code that runs on Python 2 and 3"""
+
+# Copyright (c) 2010-2013 Benjamin Peterson
+#
+# 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.
+
+import operator
+import sys
+import types
+
+__author__ = "Benjamin Peterson <benjamin at python.org>"
+__version__ = "1.4.1"
+
+
+# Useful for very coarse version differentiation.
+PY2 = sys.version_info[0] == 2
+PY3 = sys.version_info[0] == 3
+
+if PY3:
+    string_types = str,
+    integer_types = int,
+    class_types = type,
+    text_type = str
+    binary_type = bytes
+
+    MAXSIZE = sys.maxsize
+else:
+    string_types = basestring,
+    integer_types = (int, long)
+    class_types = (type, types.ClassType)
+    text_type = unicode
+    binary_type = str
+
+    if sys.platform.startswith("java"):
+        # Jython always uses 32 bits.
+        MAXSIZE = int((1 << 31) - 1)
+    else:
+        # It's possible to have sizeof(long) != sizeof(Py_ssize_t).
+        class X(object):
+            def __len__(self):
+                return 1 << 31
+        try:
+            len(X())
+        except OverflowError:
+            # 32-bit
+            MAXSIZE = int((1 << 31) - 1)
+        else:
+            # 64-bit
+            MAXSIZE = int((1 << 63) - 1)
+        del X
+
+
+def _add_doc(func, doc):
+    """Add documentation to a function."""
+    func.__doc__ = doc
+
+
+def _import_module(name):
+    """Import module, returning the module after the last dot."""
+    __import__(name)
+    return sys.modules[name]
+
+
+class _LazyDescr(object):
+
+    def __init__(self, name):
+        self.name = name
+
+    def __get__(self, obj, tp):
+        result = self._resolve()
+        setattr(obj, self.name, result)
+        # This is a bit ugly, but it avoids running this again.
+        delattr(tp, self.name)
+        return result
+
+
+class MovedModule(_LazyDescr):
+
+    def __init__(self, name, old, new=None):
+        super(MovedModule, self).__init__(name)
+        if PY3:
+            if new is None:
+                new = name
+            self.mod = new
+        else:
+            self.mod = old
+
+    def _resolve(self):
+        return _import_module(self.mod)
+
+
+class MovedAttribute(_LazyDescr):
+
+    def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None):
+        super(MovedAttribute, self).__init__(name)
+        if PY3:
+            if new_mod is None:
+                new_mod = name
+            self.mod = new_mod
+            if new_attr is None:
+                if old_attr is None:
+                    new_attr = name
+                else:
+                    new_attr = old_attr
+            self.attr = new_attr
+        else:
+            self.mod = old_mod
+            if old_attr is None:
+                old_attr = name
+            self.attr = old_attr
+
+    def _resolve(self):
+        module = _import_module(self.mod)
+        return getattr(module, self.attr)
+
+
+
+class _MovedItems(types.ModuleType):
+    """Lazy loading of moved objects"""
+
+
+_moved_attributes = [
+    MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"),
+    MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"),
+    MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"),
+    MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"),
+    MovedAttribute("map", "itertools", "builtins", "imap", "map"),
+    MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"),
+    MovedAttribute("reload_module", "__builtin__", "imp", "reload"),
+    MovedAttribute("reduce", "__builtin__", "functools"),
+    MovedAttribute("StringIO", "StringIO", "io"),
+    MovedAttribute("UserString", "UserString", "collections"),
+    MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"),
+    MovedAttribute("zip", "itertools", "builtins", "izip", "zip"),
+    MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"),
+
+    MovedModule("builtins", "__builtin__"),
+    MovedModule("configparser", "ConfigParser"),
+    MovedModule("copyreg", "copy_reg"),
+    MovedModule("http_cookiejar", "cookielib", "http.cookiejar"),
+    MovedModule("http_cookies", "Cookie", "http.cookies"),
+    MovedModule("html_entities", "htmlentitydefs", "html.entities"),
+    MovedModule("html_parser", "HTMLParser", "html.parser"),
+    MovedModule("http_client", "httplib", "http.client"),
+    MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"),
+    MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"),
+    MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"),
+    MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"),
+    MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"),
+    MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"),
+    MovedModule("cPickle", "cPickle", "pickle"),
+    MovedModule("queue", "Queue"),
+    MovedModule("reprlib", "repr"),
+    MovedModule("socketserver", "SocketServer"),
+    MovedModule("tkinter", "Tkinter"),
+    MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"),
+    MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"),
+    MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"),
+    MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"),
+    MovedModule("tkinter_tix", "Tix", "tkinter.tix"),
+    MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"),
+    MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"),
+    MovedModule("tkinter_colorchooser", "tkColorChooser",
+                "tkinter.colorchooser"),
+    MovedModule("tkinter_commondialog", "tkCommonDialog",
+                "tkinter.commondialog"),
+    MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"),
+    MovedModule("tkinter_font", "tkFont", "tkinter.font"),
+    MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"),
+    MovedModule("tkinter_tksimpledialog", "tkSimpleDialog",
+                "tkinter.simpledialog"),
+    MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"),
+    MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"),
+    MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"),
+    MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"),
+    MovedModule("winreg", "_winreg"),
+]
+for attr in _moved_attributes:
+    setattr(_MovedItems, attr.name, attr)
+del attr
+
+moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves")
+
+
+
+class Module_six_moves_urllib_parse(types.ModuleType):
+    """Lazy loading of moved objects in six.moves.urllib_parse"""
+
+
+_urllib_parse_moved_attributes = [
+    MovedAttribute("ParseResult", "urlparse", "urllib.parse"),
+    MovedAttribute("parse_qs", "urlparse", "urllib.parse"),
+    MovedAttribute("parse_qsl", "urlparse", "urllib.parse"),
+    MovedAttribute("urldefrag", "urlparse", "urllib.parse"),
+    MovedAttribute("urljoin", "urlparse", "urllib.parse"),
+    MovedAttribute("urlparse", "urlparse", "urllib.parse"),
+    MovedAttribute("urlsplit", "urlparse", "urllib.parse"),
+    MovedAttribute("urlunparse", "urlparse", "urllib.parse"),
+    MovedAttribute("urlunsplit", "urlparse", "urllib.parse"),
+    MovedAttribute("quote", "urllib", "urllib.parse"),
+    MovedAttribute("quote_plus", "urllib", "urllib.parse"),
+    MovedAttribute("unquote", "urllib", "urllib.parse"),
+    MovedAttribute("unquote_plus", "urllib", "urllib.parse"),
+    MovedAttribute("urlencode", "urllib", "urllib.parse"),
+]
+for attr in _urllib_parse_moved_attributes:
+    setattr(Module_six_moves_urllib_parse, attr.name, attr)
+del attr
+
+sys.modules[__name__ + ".moves.urllib_parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse")
+sys.modules[__name__ + ".moves.urllib.parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib.parse")
+
+
+class Module_six_moves_urllib_error(types.ModuleType):
+    """Lazy loading of moved objects in six.moves.urllib_error"""
+
+
+_urllib_error_moved_attributes = [
+    MovedAttribute("URLError", "urllib2", "urllib.error"),
+    MovedAttribute("HTTPError", "urllib2", "urllib.error"),
+    MovedAttribute("ContentTooShortError", "urllib", "urllib.error"),
+]
+for attr in _urllib_error_moved_attributes:
+    setattr(Module_six_moves_urllib_error, attr.name, attr)
+del attr
+
+sys.modules[__name__ + ".moves.urllib_error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib_error")
+sys.modules[__name__ + ".moves.urllib.error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib.error")
+
+
+class Module_six_moves_urllib_request(types.ModuleType):
+    """Lazy loading of moved objects in six.moves.urllib_request"""
+
+
+_urllib_request_moved_attributes = [
+    MovedAttribute("urlopen", "urllib2", "urllib.request"),
+    MovedAttribute("install_opener", "urllib2", "urllib.request"),
+    MovedAttribute("build_opener", "urllib2", "urllib.request"),
+    MovedAttribute("pathname2url", "urllib", "urllib.request"),
+    MovedAttribute("url2pathname", "urllib", "urllib.request"),
+    MovedAttribute("getproxies", "urllib", "urllib.request"),
+    MovedAttribute("Request", "urllib2", "urllib.request"),
+    MovedAttribute("OpenerDirector", "urllib2", "urllib.request"),
+    MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"),
+    MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"),
+    MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"),
+    MovedAttribute("ProxyHandler", "urllib2", "urllib.request"),
+    MovedAttribute("BaseHandler", "urllib2", "urllib.request"),
+    MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"),
+    MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"),
+    MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"),
+    MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"),
+    MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"),
+    MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"),
+    MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"),
+    MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"),
+    MovedAttribute("HTTPHandler", "urllib2", "urllib.request"),
+    MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"),
+    MovedAttribute("FileHandler", "urllib2", "urllib.request"),
+    MovedAttribute("FTPHandler", "urllib2", "urllib.request"),
+    MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"),
+    MovedAttribute("UnknownHandler", "urllib2", "urllib.request"),
+    MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"),
+    MovedAttribute("urlretrieve", "urllib", "urllib.request"),
+    MovedAttribute("urlcleanup", "urllib", "urllib.request"),
+    MovedAttribute("URLopener", "urllib", "urllib.request"),
+    MovedAttribute("FancyURLopener", "urllib", "urllib.request"),
+]
+for attr in _urllib_request_moved_attributes:
+    setattr(Module_six_moves_urllib_request, attr.name, attr)
+del attr
+
+sys.modules[__name__ + ".moves.urllib_request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib_request")
+sys.modules[__name__ + ".moves.urllib.request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib.request")
+
+
+class Module_six_moves_urllib_response(types.ModuleType):
+    """Lazy loading of moved objects in six.moves.urllib_response"""
+
+
+_urllib_response_moved_attributes = [
+    MovedAttribute("addbase", "urllib", "urllib.response"),
+    MovedAttribute("addclosehook", "urllib", "urllib.response"),
+    MovedAttribute("addinfo", "urllib", "urllib.response"),
+    MovedAttribute("addinfourl", "urllib", "urllib.response"),
+]
+for attr in _urllib_response_moved_attributes:
+    setattr(Module_six_moves_urllib_response, attr.name, attr)
+del attr
+
+sys.modules[__name__ + ".moves.urllib_response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib_response")
+sys.modules[__name__ + ".moves.urllib.response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib.response")
+
+
+class Module_six_moves_urllib_robotparser(types.ModuleType):
+    """Lazy loading of moved objects in six.moves.urllib_robotparser"""
+
+
+_urllib_robotparser_moved_attributes = [
+    MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"),
+]
+for attr in _urllib_robotparser_moved_attributes:
+    setattr(Module_six_moves_urllib_robotparser, attr.name, attr)
+del attr
+
+sys.modules[__name__ + ".moves.urllib_robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib_robotparser")
+sys.modules[__name__ + ".moves.urllib.robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser")
+
+
+class Module_six_moves_urllib(types.ModuleType):
+    """Create a six.moves.urllib namespace that resembles the Python 3 namespace"""
+    parse = sys.modules[__name__ + ".moves.urllib_parse"]
+    error = sys.modules[__name__ + ".moves.urllib_error"]
+    request = sys.modules[__name__ + ".moves.urllib_request"]
+    response = sys.modules[__name__ + ".moves.urllib_response"]
+    robotparser = sys.modules[__name__ + ".moves.urllib_robotparser"]
+
+
+sys.modules[__name__ + ".moves.urllib"] = Module_six_moves_urllib(__name__ + ".moves.urllib")
+
+
+def add_move(move):
+    """Add an item to six.moves."""
+    setattr(_MovedItems, move.name, move)
+
+
+def remove_move(name):
+    """Remove item from six.moves."""
+    try:
+        delattr(_MovedItems, name)
+    except AttributeError:
+        try:
+            del moves.__dict__[name]
+        except KeyError:
+            raise AttributeError("no such move, %r" % (name,))
+
+
+if PY3:
+    _meth_func = "__func__"
+    _meth_self = "__self__"
+
+    _func_closure = "__closure__"
+    _func_code = "__code__"
+    _func_defaults = "__defaults__"
+    _func_globals = "__globals__"
+
+    _iterkeys = "keys"
+    _itervalues = "values"
+    _iteritems = "items"
+    _iterlists = "lists"
+else:
+    _meth_func = "im_func"
+    _meth_self = "im_self"
+
+    _func_closure = "func_closure"
+    _func_code = "func_code"
+    _func_defaults = "func_defaults"
+    _func_globals = "func_globals"
+
+    _iterkeys = "iterkeys"
+    _itervalues = "itervalues"
+    _iteritems = "iteritems"
+    _iterlists = "iterlists"
+
+
+try:
+    advance_iterator = next
+except NameError:
+    def advance_iterator(it):
+        return it.next()
+next = advance_iterator
+
+
+try:
+    callable = callable
+except NameError:
+    def callable(obj):
+        return any("__call__" in klass.__dict__ for klass in type(obj).__mro__)
+
+
+if PY3:
+    def get_unbound_function(unbound):
+        return unbound
+
+    create_bound_method = types.MethodType
+
+    Iterator = object
+else:
+    def get_unbound_function(unbound):
+        return unbound.im_func
+
+    def create_bound_method(func, obj):
+        return types.MethodType(func, obj, obj.__class__)
+
+    class Iterator(object):
+
+        def next(self):
+            return type(self).__next__(self)
+
+    callable = callable
+_add_doc(get_unbound_function,
+         """Get the function out of a possibly unbound function""")
+
+
+get_method_function = operator.attrgetter(_meth_func)
+get_method_self = operator.attrgetter(_meth_self)
+get_function_closure = operator.attrgetter(_func_closure)
+get_function_code = operator.attrgetter(_func_code)
+get_function_defaults = operator.attrgetter(_func_defaults)
+get_function_globals = operator.attrgetter(_func_globals)
+
+
+def iterkeys(d, **kw):
+    """Return an iterator over the keys of a dictionary."""
+    return iter(getattr(d, _iterkeys)(**kw))
+
+def itervalues(d, **kw):
+    """Return an iterator over the values of a dictionary."""
+    return iter(getattr(d, _itervalues)(**kw))
+
+def iteritems(d, **kw):
+    """Return an iterator over the (key, value) pairs of a dictionary."""
+    return iter(getattr(d, _iteritems)(**kw))
+
+def iterlists(d, **kw):
+    """Return an iterator over the (key, [values]) pairs of a dictionary."""
+    return iter(getattr(d, _iterlists)(**kw))
+
+
+if PY3:
+    def b(s):
+        return s.encode("latin-1")
+    def u(s):
+        return s
+    unichr = chr
+    if sys.version_info[1] <= 1:
+        def int2byte(i):
+            return bytes((i,))
+    else:
+        # This is about 2x faster than the implementation above on 3.2+
+        int2byte = operator.methodcaller("to_bytes", 1, "big")
+    byte2int = operator.itemgetter(0)
+    indexbytes = operator.getitem
+    iterbytes = iter
+    import io
+    StringIO = io.StringIO
+    BytesIO = io.BytesIO
+else:
+    def b(s):
+        return s
+    def u(s):
+        return unicode(s, "unicode_escape")
+    unichr = unichr
+    int2byte = chr
+    def byte2int(bs):
+        return ord(bs[0])
+    def indexbytes(buf, i):
+        return ord(buf[i])
+    def iterbytes(buf):
+        return (ord(byte) for byte in buf)
+    import StringIO
+    StringIO = BytesIO = StringIO.StringIO
+_add_doc(b, """Byte literal""")
+_add_doc(u, """Text literal""")
+
+
+if PY3:
+    import builtins
+    exec_ = getattr(builtins, "exec")
+
+
+    def reraise(tp, value, tb=None):
+        if value.__traceback__ is not tb:
+            raise value.with_traceback(tb)
+        raise value
+
+
+    print_ = getattr(builtins, "print")
+    del builtins
+
+else:
+    def exec_(_code_, _globs_=None, _locs_=None):
+        """Execute code in a namespace."""
+        if _globs_ is None:
+            frame = sys._getframe(1)
+            _globs_ = frame.f_globals
+            if _locs_ is None:
+                _locs_ = frame.f_locals
+            del frame
+        elif _locs_ is None:
+            _locs_ = _globs_
+        exec("""exec _code_ in _globs_, _locs_""")
+
+
+    exec_("""def reraise(tp, value, tb=None):
+    raise tp, value, tb
+""")
+
+
+    def print_(*args, **kwargs):
+        """The new-style print function."""
+        fp = kwargs.pop("file", sys.stdout)
+        if fp is None:
+            return
+        def write(data):
+            if not isinstance(data, basestring):
+                data = str(data)
+            fp.write(data)
+        want_unicode = False
+        sep = kwargs.pop("sep", None)
+        if sep is not None:
+            if isinstance(sep, unicode):
+                want_unicode = True
+            elif not isinstance(sep, str):
+                raise TypeError("sep must be None or a string")
+        end = kwargs.pop("end", None)
+        if end is not None:
+            if isinstance(end, unicode):
+                want_unicode = True
+            elif not isinstance(end, str):
+                raise TypeError("end must be None or a string")
+        if kwargs:
+            raise TypeError("invalid keyword arguments to print()")
+        if not want_unicode:
+            for arg in args:
+                if isinstance(arg, unicode):
+                    want_unicode = True
+                    break
+        if want_unicode:
+            newline = unicode("\n")
+            space = unicode(" ")
+        else:
+            newline = "\n"
+            space = " "
+        if sep is None:
+            sep = space
+        if end is None:
+            end = newline
+        for i, arg in enumerate(args):
+            if i:
+                write(sep)
+            write(arg)
+        write(end)
+
+_add_doc(reraise, """Reraise an exception.""")
+
+
+def with_metaclass(meta, *bases):
+    """Create a base class with a metaclass."""
+    return meta("NewBase", bases, {})
+
+def add_metaclass(metaclass):
+    """Class decorator for creating a class with a metaclass."""
+    def wrapper(cls):
+        orig_vars = cls.__dict__.copy()
+        orig_vars.pop('__dict__', None)
+        orig_vars.pop('__weakref__', None)
+        for slots_var in orig_vars.get('__slots__', ()):
+            orig_vars.pop(slots_var)
+        return metaclass(cls.__name__, cls.__bases__, orig_vars)
+    return wrapper
diff --git a/astropy/io/ascii/basic.py b/astropy/io/ascii/basic.py
index b91fa03..3aef7ab 100644
--- a/astropy/io/ascii/basic.py
+++ b/astropy/io/ascii/basic.py
@@ -33,8 +33,9 @@ basic.py:
 ## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import re
+
 from . import core
-from .core import io, next, izip
+
 
 class Basic(core.BaseReader):
     """Read a character-delimited table with a single header line at the top
@@ -62,6 +63,9 @@ class Basic(core.BaseReader):
       1 2 3
       4 5 6
     """
+    _format_name = 'basic'
+    _description = 'Basic table with custom delimiters'
+
     def __init__(self):
         core.BaseReader.__init__(self)
         self.header.splitter.delimiter = ' '
@@ -83,6 +87,9 @@ class NoHeader(Basic):
       1 2 "hello there"
       3 4 world
     """
+    _format_name = 'no_header'
+    _description = 'Basic table with no headers'
+
     def __init__(self):
         Basic.__init__(self)
         self.header.start_line = None
@@ -103,7 +110,7 @@ class CommentedHeaderHeader(core.BaseHeader):
                 yield line[match.end():]
 
     def write(self, lines):
-        lines.append(self.write_comment + self.splitter.join([x.name for x in self.cols]))
+        lines.append(self.write_comment + self.splitter.join(self.colnames))
 
 
 class CommentedHeader(core.BaseReader):
@@ -118,6 +125,9 @@ class CommentedHeader(core.BaseReader):
       1 2 3
       4 5 6
     """
+    _format_name = 'commented_header'
+    _description = 'Column names in a commented line'
+
     def __init__(self):
         core.BaseReader.__init__(self)
         self.header = CommentedHeaderHeader()
@@ -144,6 +154,9 @@ class Tab(Basic):
       # Comment line
       1 <tab> 2 <tab> 5
     """
+    _format_name = 'tab'
+    _description = 'Basic table with tab-separated values'
+
     def __init__(self):
         Basic.__init__(self)
         self.header.splitter.delimiter = '\t'
@@ -166,6 +179,11 @@ class Rdb(Tab):
 
     In this reader the second line is just ignored.
     """
+    _format_name = 'rdb'
+    _io_registry_format_aliases = ['rdb']
+    _io_registry_suffix = '.rdb'
+    _description = 'Tab-separated with a type definition header line'
+
     def __init__(self):
         Tab.__init__(self)
         self.header = RdbHeader()
@@ -215,7 +233,7 @@ class RdbHeader(core.BaseHeader):
             col.type = self.get_col_type(col)
 
     def write(self, lines):
-        lines.append(self.splitter.join([x.name for x in self.cols]))
+        lines.append(self.splitter.join(self.colnames))
         rdb_types = []
         for col in self.cols:
             # Check if dtype.kind is string or unicode.  See help(np.core.numerictypes)
diff --git a/astropy/io/ascii/cds.py b/astropy/io/ascii/cds.py
index b891cc2..e51244c 100644
--- a/astropy/io/ascii/cds.py
+++ b/astropy/io/ascii/cds.py
@@ -38,6 +38,10 @@ import re
 from . import core
 from . import fixedwidth
 
+
+__doctest_skip__ = ['*']
+
+
 class CdsHeader(core.BaseHeader):
     col_type_map = {'e': core.FloatType,
                     'f': core.FloatType,
@@ -48,7 +52,7 @@ class CdsHeader(core.BaseHeader):
         match = re.match(r'\d*(\S)', col.raw_type.lower())
         if not match:
             raise ValueError('Unrecognized CDS format "%s" for column "%s"' % (
-                    col.raw_type, col.name))
+                col.raw_type, col.name))
         return match.group(1)
 
     def __init__(self, readme=None):
@@ -77,7 +81,7 @@ class CdsHeader(core.BaseHeader):
         # me file ``self.readme``.
         if self.readme and self.data.table_name:
             in_header = False
-            f = open(self.readme,"r")
+            f = open(self.readme, "r")
             # Header info is not in data lines but in a separate file.
             lines = []
             comment_lines = 0
@@ -86,16 +90,16 @@ class CdsHeader(core.BaseHeader):
                 if in_header:
                     lines.append(line)
                     if line.startswith('------') or line.startswith('======='):
-                         comment_lines += 1
-                         if comment_lines == 3:
-                             break
+                        comment_lines += 1
+                        if comment_lines == 3:
+                            break
                 else:
                     match = re.match(r'Byte-by-byte Description of file: (?P<name>.+)$',
-                            line, re.IGNORECASE)
+                                     line, re.IGNORECASE)
                     if match:
                         # Split 'name' in case in contains multiple files
                         names = [s for s in re.split('[, ]+', match.group('name'))
-                                                                        if s]
+                                 if s]
                         # Iterate on names to find if one matches the tablename
                         # including wildcards.
                         for pattern in names:
@@ -106,7 +110,7 @@ class CdsHeader(core.BaseHeader):
 
             else:
                 raise core.InconsistentTableError("Cant' find table {0} in {1}".format(
-                        self.data.table_name, self.readme))
+                    self.data.table_name, self.readme))
             f.close()
 
         for i_col_def, line in enumerate(lines):
@@ -123,22 +127,24 @@ class CdsHeader(core.BaseHeader):
                                 re.VERBOSE)
 
         cols = []
-        for i, line in enumerate(itertools.islice(lines, i_col_def+4, None)):
+        for line in itertools.islice(lines, i_col_def+4, None):
             if line.startswith('------') or line.startswith('======='):
                 break
             match = re_col_def.match(line)
             if match:
-                col = core.Column(name=match.group('name'), index=i)
-                col.start = int(re.sub(r'[-\s]', '', match.group('start') or match.group('end'))) - 1
+                col = core.Column(name=match.group('name'))
+                col.start = int(re.sub(r'[-\s]', '',
+                                       match.group('start') or match.group('end'))) - 1
                 col.end = int(match.group('end'))
-                col.units = match.group('units')
-                if col.units == '---':
-                    col.units = None  # "---" is the marker for no units in CDS table
+                col.unit = match.group('units')
+                if col.unit == '---':
+                    col.unit = None  # "---" is the marker for no unit in CDS table
                 col.description = match.group('descr').strip()
                 col.raw_type = match.group('format')
                 col.type = self.get_col_type(col)
 
-                match = re.match(r'\? (?P<equal> =)? (?P<nullval> \S*)', col.description, re.VERBOSE)
+                match = re.match(
+                    r'\? (?P<equal> =)? (?P<nullval> \S*)', col.description, re.VERBOSE)
                 if match:
                     if issubclass(col.type, core.FloatType):
                         fillval = 'nan'
@@ -160,19 +166,8 @@ class CdsHeader(core.BaseHeader):
                     raise ValueError('Line "%s" not parsable as CDS header' % line)
 
         self.names = [x.name for x in cols]
-        names = set(self.names)
-        if self.include_names is not None:
-            names.intersection_update(self.include_names)
-        if self.exclude_names is not None:
-            names.difference_update(self.exclude_names)
-
-        self.cols = [x for x in cols if x.name in names]
-        self.n_data_cols = len(self.cols)
 
-        # Re-index the cols because the FixedWidthSplitter does NOT return the ignored
-        # cols (as is the case for typical delimiter-based splitters)
-        for i, col in enumerate(self.cols):
-            col.index = i
+        self.cols = cols
 
 
 class CdsData(core.BaseData):
@@ -192,7 +187,7 @@ class CdsData(core.BaseData):
                       if x.startswith('------') or x.startswith('=======')]
         if not i_sections:
             raise core.InconsistentTableError('No CDS section delimiter found')
-        return lines[i_sections[-1]+1 : ]
+        return lines[i_sections[-1]+1:]
 
 
 class Cds(core.BaseReader):
@@ -279,13 +274,15 @@ class Cds(core.BaseReader):
 
     Caveats:
 
-    * Format, Units, and Explanations are available in the ``Reader.cols`` attribute.
-    * All of the other metadata defined by this format is ignored.
-
-    Code contribution to enhance the parsing to include metadata in a Reader.meta
-    attribute would be welcome.
-
+    * The Units and Explanations are available in the column ``unit`` and
+      ``description`` attributes, respectively.
+    * The other metadata defined by this format is not available in the output table.
     """
+    _format_name = 'cds'
+    _io_registry_format_aliases = ['cds']
+    _io_registry_can_write = False
+    _description = 'CDS format table'
+
     def __init__(self, readme=None):
         core.BaseReader.__init__(self)
         self.header = CdsHeader(readme)
diff --git a/astropy/io/ascii/connect.py b/astropy/io/ascii/connect.py
index 6fbd853..30fcf52 100644
--- a/astropy/io/ascii/connect.py
+++ b/astropy/io/ascii/connect.py
@@ -1,7 +1,7 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 # This file connects the readers/writers to the astropy.table.Table class
 
-
+import re
 
 from .. import registry as io_registry
 from ...table import Table
@@ -27,106 +27,41 @@ def write_asciitable(table, filename, **kwargs):
 io_registry.register_writer('ascii', Table, write_asciitable)
 
 
-# IPAC
-# ====
-
-def read_ipac(filename, **kwargs):
-    from .ipac import Ipac
-    from .ui import read
-    if 'guess' not in kwargs:
-        kwargs['guess'] = False
-    return read(filename, Reader=Ipac, **kwargs)
-
-io_registry.register_reader('ipac', Table, read_ipac)
-
-
-# CDS
-# ===
-
-
-def read_cds(filename, **kwargs):
-    from .cds import Cds
-    from .ui import read
-    if 'guess' not in kwargs:
-        kwargs['guess'] = False
-    return read(filename, Reader=Cds, **kwargs)
-
-io_registry.register_reader('cds', Table, read_cds)
-
-
-# DAOPhot
-# =======
-
-def read_daophot(filename, **kwargs):
-    from .daophot import Daophot
-    from .ui import read
-    if 'guess' not in kwargs:
-        kwargs['guess'] = False
-    return read(filename, Reader=Daophot, **kwargs)
-
-io_registry.register_reader('daophot', Table, read_daophot)
-
-# SExtractor
-# =======
-
-def read_sextractor(filename, **kwargs):
-    from .sextractor import SExtractor
-    from .ui import read
-    if 'guess' not in kwargs:
-        kwargs['guess'] = False
-    return read(filename, Reader=SExtractor, **kwargs)
-
-io_registry.register_reader('sextractor', Table, read_sextractor)
-
-# LaTeX
-# =====
-
-def read_latex(filename, **kwargs):
-    from .latex import Latex
+def io_read(format, filename, **kwargs):
     from .ui import read
-    if 'guess' not in kwargs:
-        kwargs['guess'] = False
-    return read(filename, Reader=Latex, **kwargs)
-
-io_registry.register_reader('latex', Table, read_latex)
+    format = re.sub(r'^ascii\.', '', format)
+    return read(filename, format=format, **kwargs)
 
 
-def write_latex(table, filename, **kwargs):
-    from .latex import Latex
+def io_write(format, table, filename, **kwargs):
     from .ui import write
-    write(table, filename, Writer=Latex, **kwargs)
+    format = re.sub(r'^ascii\.', '', format)
+    return write(table, filename, format=format, **kwargs)
 
-io_registry.register_writer('latex', Table, write_latex)
 
+def io_identify(suffix, origin, filepath, fileobj, *args, **kwargs):
+    return filepath is not None and filepath.endswith(suffix)
 
-def is_latex(origin, args, kwargs):
-    return isinstance(args[0], basestring) and args[0].endswith('.tex')
 
-io_registry.register_identifier('latex', Table, is_latex)
-
-
-# RDB
-# ===
-
-def read_rdb(filename, **kwargs):
-    from .basic import Rdb
-    from .ui import read
-    if 'guess' not in kwargs:
-        kwargs['guess'] = False
-    return read(filename, Reader=Rdb, **kwargs)
-
-io_registry.register_reader('rdb', Table, read_rdb)
-
-
-def write_rdb(table, filename, **kwargs):
-    from .basic import Rdb
-    from .ui import write
-    write(table, filename, Writer=Rdb, **kwargs)
+def _get_connectors_table():
+    from .core import FORMAT_CLASSES
 
-io_registry.register_writer('rdb', Table, write_rdb)
+    rows = []
+    rows.append(('ascii', '', 'Yes', 'ASCII table in any supported format (uses guessing)'))
+    for format in sorted(FORMAT_CLASSES):
+        cls = FORMAT_CLASSES[format]
 
+        io_format = 'ascii.' + cls._format_name
+        description = getattr(cls, '_description', '')
+        class_link = ':class:`~{}.{}`'.format(cls.__module__, cls.__name__)
+        suffix = getattr(cls, '_io_registry_suffix', '')
+        can_write = 'Yes' if getattr(cls, '_io_registry_can_write', True) else ''
 
-def is_rdb(origin, args, kwargs):
-    return isinstance(args[0], basestring) and args[0].endswith('.rdb')
+        rows.append((io_format, suffix, can_write,
+                     '{}: {}'.format(class_link, description)))
+    out = Table(zip(*rows), names=('Format', 'Suffix', 'Write', 'Description'))
+    for colname in ('Format', 'Description'):
+        width = max(len(x) for x in out[colname])
+        out[colname].format = '%-{}s'.format(width)
 
-io_registry.register_identifier('rdb', Table, is_rdb)
+    return out
diff --git a/astropy/io/ascii/core.py b/astropy/io/ascii/core.py
index 8edc315..4b846cf 100644
--- a/astropy/io/ascii/core.py
+++ b/astropy/io/ascii/core.py
@@ -31,24 +31,29 @@ core.py:
 ## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import os
-import sys
 import re
 import csv
 import itertools
+import functools
 import numpy
-from contextlib import contextmanager
 
 from ...table import Table
 from ...utils.data import get_readable_fileobj
+from ...utils import OrderedDict
+from . import connect
+
+# Global dictionary mapping format arg to the corresponding Reader class
+FORMAT_CLASSES = {}
+
 
 class InconsistentTableError(ValueError):
     pass
 
 # Python 3 compatibility tweaks.  Should work back through 2.4.
 try:
-    import cStringIO as io
+    from cStringIO import StringIO
 except ImportError:
-    import io
+    from io import StringIO
 
 try:
     next = next
@@ -101,14 +106,12 @@ class Column(object):
     The key attributes of a Column object are:
 
     * **name** : column name
-    * **index** : column index (first column has index=0, second has index=1, etc)
     * **type** : column type (NoType, StrType, NumType, FloatType, IntType)
     * **str_vals** : list of column values as strings
     * **data** : list of converted column values
     """
-    def __init__(self, name, index):
+    def __init__(self, name):
         self.name = name
-        self.index = index
         self.type = NoType
         self.str_vals = []
         self.fill_values = {}
@@ -132,7 +135,7 @@ class BaseInputter(object):
         """
         try:
             if (hasattr(table, 'read') or
-                ('\n' not in table and '\r' not in table + '')):
+                    ('\n' not in table and '\r' not in table + '')):
                 with get_readable_fileobj(table) as file_obj:
                     table = file_obj.read()
             lines = table.splitlines()
@@ -246,7 +249,7 @@ class DefaultSplitter(BaseSplitter):
 
     def __init__(self):
         self.csv_writer = None
-        self.csv_writer_out = io.StringIO()
+        self.csv_writer_out = StringIO()
 
     def __call__(self, lines):
         """Return an iterator over the table ``lines``, where each iterator output
@@ -264,12 +267,12 @@ class DefaultSplitter(BaseSplitter):
             delimiter = self.delimiter
 
         csv_reader = csv.reader(lines,
-                                delimiter = delimiter,
-                                doublequote = self.doublequote,
-                                escapechar =self.escapechar,
-                                quotechar = self.quotechar,
-                                quoting = self.quoting,
-                                skipinitialspace = self.skipinitialspace
+                                delimiter=delimiter,
+                                doublequote=self.doublequote,
+                                escapechar=self.escapechar,
+                                quotechar=self.quotechar,
+                                quoting=self.quoting,
+                                skipinitialspace=self.skipinitialspace
                                 )
         for vals in csv_reader:
             if self.process_val:
@@ -285,12 +288,12 @@ class DefaultSplitter(BaseSplitter):
 
         if self.csv_writer is None:
             self.csv_writer = csv.writer(self.csv_writer_out,
-                                         delimiter = self.delimiter,
-                                         doublequote = self.doublequote,
-                                         escapechar = self.escapechar,
-                                         quotechar = self.quotechar,
-                                         quoting = self.quoting,
-                                         lineterminator = '',
+                                         delimiter=delimiter,
+                                         doublequote=self.doublequote,
+                                         escapechar=self.escapechar,
+                                         quotechar=self.quotechar,
+                                         quoting=self.quoting,
+                                         lineterminator='',
                                          )
         self.csv_writer_out.seek(0)
         self.csv_writer_out.truncate()
@@ -341,38 +344,33 @@ class BaseHeader(object):
     :param comment: regular expression for comment lines
     :param splitter_class: Splitter class for splitting data lines into columns
     :param names: list of names corresponding to each data column
-    :param include_names: list of names to include in output (default=None selects all names)
-    :param exclude_names: list of names to exlude from output (applied after ``include_names``)
     """
     auto_format = 'col%d'
     start_line = None
     comment = None
     splitter_class = DefaultSplitter
     names = None
-    include_names = None
-    exclude_names = None
     write_spacer_lines = ['ASCII_TABLE_WRITE_SPACER_LINE']
 
     def __init__(self):
         self.splitter = self.__class__.splitter_class()
 
     def _set_cols_from_names(self):
-        # Filter full list of non-null column names with the include/exclude lists
-        names = set(self.names)
-        if self.include_names is not None:
-            names.intersection_update(self.include_names)
-        if self.exclude_names is not None:
-            names.difference_update(self.exclude_names)
+        self.cols = [Column(name=x) for x in self.names]
 
-        self.cols = [Column(name=x, index=i) for i, x in enumerate(self.names) if x in names]
+    def update_meta(self, lines, meta):
+        """
+        Extract any table-level metadata, e.g. keywords, comments, column metadata, from
+        the table ``lines`` and update the OrderedDict ``meta`` in place.  This base
+        method does nothing.
+        """
+        pass
 
     def get_cols(self, lines):
         """Initialize the header Column objects from the table ``lines``.
 
         Based on the previously set Header attributes find or create the column names.
-        Sets ``self.cols`` with the list of Columns.  This list only includes the actual
-        requested columns after filtering by the include_names and exclude_names
-        attributes.  See ``self.names`` for the full list.
+        Sets ``self.cols`` with the list of Columns.
 
         :param lines: list of table lines
         :returns: None
@@ -381,22 +379,20 @@ class BaseHeader(object):
         start_line = _get_line_index(self.start_line, self.process_lines(lines))
         if start_line is None:
             # No header line so auto-generate names from n_data_cols
-            if self.names is None:
-                # Get the data values from the first line of table data to determine n_data_cols
-                try:
-                    first_data_vals = next(self.data.get_str_vals())
-                except StopIteration:
-                    raise InconsistentTableError('No data lines found so cannot autogenerate '
-                                                 'column names')
-                n_data_cols = len(first_data_vals)
-                self.names = [self.auto_format % i for i in range(1, n_data_cols+1)]
-
-        elif self.names is None:
-            # No column names supplied so read them from header line in table.
+            # Get the data values from the first line of table data to determine n_data_cols
+            try:
+                first_data_vals = next(self.data.get_str_vals())
+            except StopIteration:
+                raise InconsistentTableError('No data lines found so cannot autogenerate '
+                                             'column names')
+            n_data_cols = len(first_data_vals)
+            self.names = [self.auto_format % i for i in range(1, n_data_cols+1)]
+
+        else:
             for i, line in enumerate(self.process_lines(lines)):
                 if i == start_line:
                     break
-            else: # No header line matching
+            else:  # No header line matching
                 raise ValueError('No header line found in table')
 
             self.names = next(self.splitter([line]))
@@ -424,22 +420,6 @@ class BaseHeader(object):
         """Return the column names of the table"""
         return tuple(col.name for col in self.cols)
 
-    def _get_n_data_cols(self):
-        """Return the number of expected data columns from data splitting.
-        This is either explicitly set (typically for fixedwidth splitters)
-        or set to self.names otherwise.
-        """
-        if not hasattr(self, '_n_data_cols'):
-            self._n_data_cols = len(self.names)
-        return self._n_data_cols
-
-    def _set_n_data_cols(self, val):
-        """Return the number of expected data columns from data splitting.
-        """
-        self._n_data_cols = val
-
-    n_data_cols = property(_get_n_data_cols, _set_n_data_cols)
-
     def get_type_map_key(self, col):
         return col.raw_type
 
@@ -449,7 +429,7 @@ class BaseHeader(object):
             return self.col_type_map[type_map_key.lower()]
         except KeyError:
             raise ValueError('Unknown data type ""%s"" for column "%s"' % (
-                    col.raw_type, col.name))
+                col.raw_type, col.name))
 
 
 class BaseData(object):
@@ -523,7 +503,13 @@ class BaseData(object):
 
         """
         if self.fill_values:
-            #if input is only one <fill_spec>, then make it a list
+            # when we write tables the columns may be astropy.table.Columns
+            # which don't carry a fill_values by default
+            for col in cols:
+                if ~hasattr(col, 'fill_values'):
+                    col.fill_values = {}
+
+            # if input is only one <fill_spec>, then make it a list
             try:
                 self.fill_values[0] + ''
                 self.fill_values = [self.fill_values]
@@ -561,6 +547,14 @@ class BaseData(object):
                     col.str_vals[i] = col.fill_values[str_val]
                     col.mask[i] = True
 
+    def _replace_vals(self, cols):
+        """Replace string values in col.str_vals"""
+        if self.fill_values:
+            for col in (col for col in cols if col.fill_values):
+                for i, str_val in ((i, x) for i, x in enumerate(col.str_vals)
+                                   if x in col.fill_values):
+                    col.str_vals[i] = col.fill_values[str_val]
+
     def write(self, lines):
         if hasattr(self.start_line, '__call__'):
             raise TypeError('Start_line attribute cannot be callable for write()')
@@ -570,27 +564,22 @@ class BaseData(object):
         while len(lines) < data_start_line:
             lines.append(itertools.cycle(self.write_spacer_lines))
 
-        with self._set_col_formats(self.cols, self.formats):
-            col_str_iters = [col.iter_str_vals() for col in self.cols]
-            for vals in izip(*col_str_iters):
-                lines.append(self.splitter.join(vals))
+        self._set_fill_values(self.cols)
+        self._set_col_formats()
+        for col in self.cols:
+            col.str_vals = list(col.iter_str_vals())
+        self._replace_vals(self.cols)
+        col_str_iters = [col.str_vals for col in self.cols]
+        for vals in zip(*col_str_iters):
+            lines.append(self.splitter.join(vals))
 
-    @contextmanager
-    def _set_col_formats(self, cols, formats):
+    def _set_col_formats(self):
         """
-        Context manager to save the internal column formats in `cols` and
-        override with any custom `formats`.
         """
-        orig_formats = [col.format for col in cols]
-        for col in cols:
-            if col.name in formats:
-                col.format = formats[col.name]
+        for col in self.cols:
+            if col.name in self.formats:
+                col.format = self.formats[col.name]
 
-        yield  # execute the nested context manager block
-
-        # Restore the original column format values
-        for col, orig_format in izip(cols, orig_formats):
-            col.format = orig_format
 
 def convert_numpy(numpy_type):
     """Return a tuple ``(converter_func, converter_type)``.  The converter
@@ -617,6 +606,7 @@ def convert_numpy(numpy_type):
         return numpy.array(vals, numpy_type)
     return converter, converter_type
 
+
 class BaseOutputter(object):
     """Output table as a dict of column objects keyed on column name.  The
     table data are stored as plain python lists within the column objects.
@@ -671,24 +661,99 @@ class TableOutputter(BaseOutputter):
                           convert_numpy(numpy.float),
                           convert_numpy(numpy.str)]
 
-    def __call__(self, cols):
+    def __call__(self, cols, meta):
         self._convert_vals(cols)
 
         # If there are any values that were filled and tagged with a mask bit then this
         # will be a masked table.  Otherwise use a plain table.
         masked = any(hasattr(col, 'mask') and numpy.any(col.mask) for col in cols)
 
-        out = Table([x.data for x in cols], names=[x.name for x in cols], masked=masked)
+        out = Table([x.data for x in cols], names=[x.name for x in cols], masked=masked,
+                    meta=meta['table'])
         for col, out_col in zip(cols, out.columns.values()):
             if masked and hasattr(col, 'mask'):
                 out_col.data.mask = col.mask
-            for attr in ('format', 'units', 'description'):
+            for attr in ('format', 'unit', 'description'):
                 if hasattr(col, attr):
                     setattr(out_col, attr, getattr(col, attr))
 
         return out
 
 
+class MetaBaseReader(type):
+    def __init__(cls, name, bases, dct):
+        super(MetaBaseReader, cls).__init__(name, bases, dct)
+
+        format = dct.get('_format_name')
+        if format is None:
+            return
+
+        FORMAT_CLASSES[format] = cls
+
+        io_formats = ['ascii.' + format] + dct.get('_io_registry_format_aliases', [])
+
+        if dct.get('_io_registry_suffix'):
+            func = functools.partial(connect.io_identify, dct['_io_registry_suffix'])
+            connect.io_registry.register_identifier(io_formats[0], Table, func)
+
+        for io_format in io_formats:
+            func = functools.partial(connect.io_read, io_format)
+            connect.io_registry.register_reader(io_format, Table, func)
+
+            if dct.get('_io_registry_can_write', True):
+                func = functools.partial(connect.io_write, io_format)
+                connect.io_registry.register_writer(io_format, Table, func)
+
+
+def _is_number(x):
+    try:
+        x = float(x)
+        return True
+    except ValueError:
+        pass
+    return False
+
+
+def _apply_include_exclude_names(table, names, include_names, exclude_names, strict_names):
+    """Apply names, include_names and exclude_names to a table.
+
+    :param table: input table (Reader object, NumPy struct array, list of lists, etc)
+    :param names: list of names to override those in table (default=None uses existing names)
+    :param include_names: list of names to include in output (default=None selects all names)
+    :param exclude_names: list of names to exlude from output (applied after ``include_names``)
+    :param strict_names: apply strict checks on column names
+    """
+    # Check column names.  This must be done before applying the names transformation
+    # so that guessing will fail appropriately if `names` is supplied.  For instance
+    # if the basic reader is given a table with no column header row.
+    if strict_names:
+        # Impose strict requirements on column names (normally used in guessing)
+        bads = [" ", ",", "|", "\t", "'", '"']
+        for name in table.colnames:
+            if (_is_number(name) or
+                    len(name) == 0 or
+                    name[0] in bads or
+                    name[-1] in bads):
+                raise ValueError('Column name {0!r} does not meet strict name requirements'
+                                 .format(name))
+
+    if names is not None:
+        if len(names) != len(table.colnames):
+            raise ValueError('Length of names argument ({0}) does not match number'
+                             ' of table columns ({1})'.format(len(names), len(table.colnames)))
+        for name, colname in zip(names, table.colnames):
+            table.rename_column(colname, name)
+
+    names = set(table.colnames)
+    if include_names is not None:
+        names.intersection_update(include_names)
+    if exclude_names is not None:
+        names.difference_update(exclude_names)
+    if names != set(table.colnames):
+        remove_names = set(table.colnames) - set(names)
+        table.remove_columns(remove_names)
+
+
 class BaseReader(object):
     """Class providing methods to read and write an ASCII table using the specified
     header, data, inputter, and outputter instances.
@@ -702,18 +767,30 @@ class BaseReader(object):
     The default behavior is to raise an InconsistentTableError.
 
     """
+    __metaclass__ = MetaBaseReader
+
+    names = None
+    include_names = None
+    exclude_names = None
+    strict_names = False
+
     def __init__(self):
         self.header = BaseHeader()
         self.data = BaseData()
         self.inputter = BaseInputter()
         self.outputter = TableOutputter()
-        self.meta = {}                  # Placeholder for storing table metadata
         # Data and Header instances benefit from a little cross-coupling.  Header may need to
         # know about number of data columns for auto-column name generation and Data may
         # need to know about header (e.g. for fixed-width tables where widths are spec'd in header.
         self.data.header = self.header
         self.header.data = self.data
 
+        # Metadata, consisting of table-level meta and column-level meta.  The latter
+        # could include information about column type, description, formatting, etc,
+        # depending on the table meta format.
+        self.meta = OrderedDict(table=OrderedDict(),
+                                cols=OrderedDict())
+
     def read(self, table):
         """Read the ``table`` and return the results in a format determined by
         the ``outputter`` attribute.
@@ -743,23 +820,31 @@ class BaseReader(object):
         self.data.header = self.header
         self.header.data = self.data
 
+        # Get a list of the lines (rows) in the table
         self.lines = self.inputter.get_lines(table)
+
+        # Set self.data.data_lines to a slice of lines contain the data rows
         self.data.get_data_lines(self.lines)
+
+        # Extract table meta values (e.g. keywords, comments, etc).  Updates self.meta.
+        self.header.update_meta(self.lines, self.meta)
+
+        # Get the table column definitions
         self.header.get_cols(self.lines)
-        cols = self.header.cols         # header.cols corresponds to *output* columns requested
-        n_data_cols = self.header.n_data_cols # number of data cols expected from splitter
+
+        cols = self.header.cols
         self.data.splitter.cols = cols
 
         for i, str_vals in enumerate(self.data.get_str_vals()):
-            if len(str_vals) != n_data_cols:
-                str_vals = self.inconsistent_handler(str_vals, n_data_cols)
+            if len(str_vals) != len(cols):
+                str_vals = self.inconsistent_handler(str_vals, len(cols))
 
-                #if str_vals is None, we skip this row
+                # if str_vals is None, we skip this row
                 if str_vals is None:
                     continue
 
-                #otherwise, we raise an error only if it is still inconsistent
-                if len(str_vals) != n_data_cols:
+                # otherwise, we raise an error only if it is still inconsistent
+                if len(str_vals) != len(cols):
                     errmsg = ('Number of header columns (%d) inconsistent with '
                               'data columns (%d) at data line %d\n'
                               'Header values: %s\n'
@@ -767,13 +852,16 @@ class BaseReader(object):
                                                    [x.name for x in cols], str_vals))
                     raise InconsistentTableError(errmsg)
 
-            for col in cols:
-                col.str_vals.append(str_vals[col.index])
+            for j, col in enumerate(cols):
+                col.str_vals.append(str_vals[j])
 
         self.data.masks(cols)
-        table = self.outputter(cols)
+        table = self.outputter(cols, self.meta)
         self.cols = self.header.cols
 
+        _apply_include_exclude_names(table, self.names, self.include_names, self.exclude_names,
+                                     self.strict_names)
+
         return table
 
     def inconsistent_handler(self, str_vals, ncols):
@@ -793,7 +881,7 @@ class BaseReader(object):
             raised in read().  Can also be None, in which case the row will be
             skipped.
         """
-        #an empty list will always trigger an InconsistentTableError in read()
+        # an empty list will always trigger an InconsistentTableError in read()
         return str_vals
 
     @property
@@ -814,9 +902,13 @@ class BaseReader(object):
         :param table: input table data (astropy.table.Table object)
         :returns: list of strings corresponding to ASCII table
         """
+
+        _apply_include_exclude_names(table, self.names, self.include_names, self.exclude_names,
+                                     self.strict_names)
+
         # link information about the columns to the writer object (i.e. self)
-        self.header.cols = table.cols
-        self.data.cols = table.cols
+        self.header.cols = table.columns.values()
+        self.data.cols = table.columns.values()
 
         # Write header and data to lines list
         lines = []
@@ -825,6 +917,7 @@ class BaseReader(object):
 
         return lines
 
+
 class ContinuationLinesInputter(BaseInputter):
     """Inputter where lines ending in ``continuation_char`` are joined
     with the subsequent line.  Example::
@@ -882,9 +975,10 @@ extra_reader_pars = ('Reader', 'Inputter', 'Outputter',
                      'delimiter', 'comment', 'quotechar', 'header_start',
                      'data_start', 'data_end', 'converters',
                      'data_Splitter', 'header_Splitter',
-                     'names', 'include_names', 'exclude_names',
+                     'names', 'include_names', 'exclude_names', 'strict_names',
                      'fill_values', 'fill_include_names', 'fill_exclude_names')
 
+
 def _get_reader(Reader, Inputter=None, Outputter=None, **kwargs):
     """Initialize a table reader allowing for common customizations.  See ui.get_reader()
     for param docs.  This routine is for internal (package) use only and is useful
@@ -923,11 +1017,17 @@ def _get_reader(Reader, Inputter=None, Outputter=None, **kwargs):
     if 'header_Splitter' in kwargs:
         reader.header.splitter = kwargs['header_Splitter']()
     if 'names' in kwargs:
-        reader.header.names = kwargs['names']
+        reader.names = kwargs['names']
     if 'include_names' in kwargs:
-        reader.header.include_names = kwargs['include_names']
+        reader.include_names = kwargs['include_names']
     if 'exclude_names' in kwargs:
-        reader.header.exclude_names = kwargs['exclude_names']
+        reader.exclude_names = kwargs['exclude_names']
+    # Strict names is normally set only within the guessing process to
+    # indicate that column names cannot be numeric or have certain
+    # characters at the beginning or end.  It gets used in
+    # core._apply_include_exclude_names().
+    if 'strict_names' in kwargs:
+        reader.strict_names = kwargs['strict_names']
     if 'fill_values' in kwargs:
         reader.data.fill_values = kwargs['fill_values']
     if 'fill_include_names' in kwargs:
@@ -937,12 +1037,13 @@ def _get_reader(Reader, Inputter=None, Outputter=None, **kwargs):
 
     return reader
 
-extra_writer_pars = ('delimiter', 'comment', 'quotechar', 'formats', 
+extra_writer_pars = ('delimiter', 'comment', 'quotechar', 'formats',
                      'strip_whitespace',
                      'names', 'include_names', 'exclude_names',
                      'fill_values', 'fill_include_names',
                      'fill_exclude_names')
 
+
 def _get_writer(Writer, **kwargs):
     """Initialize a table writer allowing for common customizations. This
     routine is for internal (package) use only and is useful because it depends
@@ -975,9 +1076,9 @@ def _get_writer(Writer, **kwargs):
     if 'names' in kwargs:
         writer.header.names = kwargs['names']
     if 'include_names' in kwargs:
-        writer.header.include_names = kwargs['include_names']
+        writer.include_names = kwargs['include_names']
     if 'exclude_names' in kwargs:
-        writer.header.exclude_names = kwargs['exclude_names']
+        writer.exclude_names = kwargs['exclude_names']
     if 'fill_values' in kwargs:
         writer.data.fill_values = kwargs['fill_values']
     if 'fill_include_names' in kwargs:
diff --git a/astropy/io/ascii/daophot.py b/astropy/io/ascii/daophot.py
index 2687dd6..cb57c09 100644
--- a/astropy/io/ascii/daophot.py
+++ b/astropy/io/ascii/daophot.py
@@ -8,7 +8,7 @@ daophot.py:
 :Author: Tom Aldcroft (aldcroft at head.cfa.harvard.edu)
 """
 
-## 
+##
 ## Redistribution and use in source and binary forms, with or without
 ## modification, are permitted provided that the following conditions are met:
 ##     * Redistributions of source code must retain the above copyright
@@ -19,7 +19,7 @@ daophot.py:
 ##     * Neither the name of the Smithsonian Astrophysical Observatory nor the
 ##       names of its contributors may be used to endorse or promote products
 ##       derived from this software without specific prior written permission.
-## 
+##
 ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 ## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 ## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -28,7 +28,7 @@ daophot.py:
 ## (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 ## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 ## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import re
@@ -38,42 +38,60 @@ from . import basic
 from . import fixedwidth
 from ...utils import OrderedDict
 
+
 class Daophot(core.BaseReader):
     """Read a DAOphot file.
     Example::
 
-      #K MERGERAD   = INDEF                   scaleunit  %-23.7g  
+      #K MERGERAD   = INDEF                   scaleunit  %-23.7g
       #K IRAF = NOAO/IRAFV2.10EXPORT version %-23s
       #K USER = davis name %-23s
       #K HOST = tucana computer %-23s
       #
       #N ID    XCENTER   YCENTER   MAG         MERR          MSKY           NITER    \\
       #U ##    pixels    pixels    magnitudes  magnitudes    counts         ##       \\
-      #F %-9d  %-10.3f   %-10.3f   %-12.3f     %-14.3f       %-15.7g        %-6d     
-      #                                                                              
+      #F %-9d  %-10.3f   %-10.3f   %-12.3f     %-14.3f       %-15.7g        %-6d
+      #
       #N         SHARPNESS   CHI         PIER  PERROR                                \\
       #U         ##          ##          ##    perrors                               \\
-      #F         %-23.3f     %-12.3f     %-6d  %-13s                                 
-      #                                                                              
+      #F         %-23.3f     %-12.3f     %-6d  %-13s
+      #
       14       138.538     INDEF   15.461      0.003         34.85955       4        \\
-                  -0.032      0.802       0     No_error                             
+                  -0.032      0.802       0     No_error
 
-    The keywords defined in the #K records are available via output table
+    The keywords defined in the #K records are available via the output table
     ``meta`` attribute::
 
-      data = ascii.read('t/daophot.dat')
-      for keyword in data.meta['keywords']:
-          print keyword['name'], keyword['value'], keyword['units'], keyword['format']
-
-    The units and formats are available in the output table columns::
-
-      for colname in data.colnames:
-           col = data[colname]
-           print colname, col.units, col.format
+      >>> import os
+      >>> from astropy.io import ascii
+      >>> filename = os.path.join(ascii.__path__[0], 'tests/t/daophot.dat')
+      >>> data = ascii.read(filename)
+      >>> for name, keyword in data.meta['keywords'].items():
+      ...     print name, keyword['value'], keyword['units'], keyword['format']
+      ...
+      MERGERAD INDEF scaleunit %-23.7g
+      IRAF NOAO/IRAFV2.10EXPORT version %-23s
+      USER  name %-23s
+      ...
+
+    The unit and formats are available in the output table columns::
+
+      >>> for colname in data.colnames:
+      ...     col = data[colname]
+      ...     print colname, col.unit, col.format
+      ...
+      ID None %-9d
+      XCENTER pixels %-10.3f
+      YCENTER pixels %-10.3f
+      ...
 
     Any column values of INDEF are interpreted as a missing value and will be
     masked out in the resultant table.
     """
+    _format_name = 'daophot'
+    _io_registry_format_aliases = ['daophot']
+    _io_registry_can_write = False
+    _description = 'IRAF DAOphot format table'
 
     def __init__(self):
         core.BaseReader.__init__(self)
@@ -84,39 +102,39 @@ class Daophot(core.BaseReader):
         self.data.start_line = 0
         self.data.comment = r'\s*#'
 
-    def read(self, table):
-        out = core.BaseReader.read(self, table)
+    def write(self, table=None):
+        raise NotImplementedError
+
 
+class DaophotHeader(core.BaseHeader):
+    """Read the header from a file produced by the IRAF DAOphot routine."""
+    def __init__(self):
+        core.BaseHeader.__init__(self)
+        self.comment = r'\s*#K'
+
+    def update_meta(self, lines, meta):
+        """
+        Extract table-level keywords for DAOphot table.  These are indicated by
+        a leading '#K ' prefix.
+        """
+        table_meta = meta['table']
         # Read keywords as a table embedded in the header comments
-        if len(self.comment_lines) > 0:
+        comment_lines = [line for line in lines if line.startswith('#')]
+        if len(comment_lines) > 0:
             re_header_keyword = re.compile(r'[#]K'
                                            r'\s+ (?P<name> \w+)'
                                            r'\s* = (?P<stuff> .+) $',
                                            re.VERBOSE)
 
-            out.meta['keywords'] = OrderedDict()
-            for line in self.comment_lines:
+            table_meta['keywords'] = OrderedDict()
+            for line in comment_lines:
                 m = re_header_keyword.match(line)
                 if m:
                     vals = m.group('stuff').strip().rsplit(None, 2)
                     keyword_dict = {'units': vals[-2],
                                     'format': vals[-1]}
                     keyword_dict['value'] = (vals[0] if len(vals) > 2 else "")
-                    out.meta['keywords'][m.group('name')] = keyword_dict
-
-        self.cols = self.header.cols
-
-        return out
-
-    def write(self, table=None):
-        raise NotImplementedError
-
-
-class DaophotHeader(core.BaseHeader):
-    """Read the header from a file produced by the IRAF DAOphot routine."""
-    def __init__(self):
-        core.BaseHeader.__init__(self)
-        self.comment = r'\s*#K'
+                    table_meta['keywords'][m.group('name')] = keyword_dict
 
     def get_cols(self, lines):
         """Initialize the header Column objects from the table ``lines`` for a DAOphot
@@ -130,9 +148,9 @@ class DaophotHeader(core.BaseHeader):
         # Parse a series of column defintion lines like below.  There may be several
         # such blocks in a single file (where continuation characters have already been
         # stripped).
-        # #N ID    XCENTER   YCENTER   MAG         MERR          MSKY           NITER    
-        # #U ##    pixels    pixels    magnitudes  magnitudes    counts         ##       
-        # #F %-9d  %-10.3f   %-10.3f   %-12.3f     %-14.3f       %-15.7g        %-6d     
+        # #N ID    XCENTER   YCENTER   MAG         MERR          MSKY           NITER
+        # #U ##    pixels    pixels    magnitudes  magnitudes    counts         ##
+        # #F %-9d  %-10.3f   %-10.3f   %-12.3f     %-14.3f       %-15.7g        %-6d
         coldef_lines = ['', '', '']
         starts = ('#N ', '#U ', '#F ')
         col_width = []
@@ -140,7 +158,7 @@ class DaophotHeader(core.BaseHeader):
         re_colformat_def = re.compile(r'#F([^#]+)')
         for line in lines:
             if not line.startswith('#'):
-                break # End of header lines
+                break  # End of header lines
             else:
                 formatmatch = re_colformat_def.search(line)
                 if formatmatch:
@@ -155,9 +173,9 @@ class DaophotHeader(core.BaseHeader):
                         line_stripped = line[2:]
                         coldef_lines[i] = coldef_lines[i] + line_stripped
                         break
-        
+
         # At this point colddef_lines has three lines corresponding to column
-        # names, units, and format.  Get the column names by splitting the
+        # names, unit, and format.  Get the column names by splitting the
         # first line on whitespace.
         self.names = coldef_lines[0].split()
         if not self.names:
@@ -181,20 +199,17 @@ class DaophotHeader(core.BaseHeader):
         # Create the list of io.ascii column objects
         self._set_cols_from_names()
 
-        # Set units and format as needed.
+        # Set unit and format as needed.
         for col in self.cols:
             if coldefs[col.name][0] != '##':
-                col.units = coldefs[col.name][0]
+                col.unit = coldefs[col.name][0]
             if coldefs[col.name][1] != '##':
                 col.format = coldefs[col.name][1]
 
-        # Set column start and end positions.  Also re-index the cols because
-        # the FixedWidthSplitter does NOT return the ignored cols (as is the
-        # case for typical delimiter-based splitters).
+        # Set column start and end positions.
         for i, col in enumerate(self.cols):
-            col.start = starts[col.index]
-            col.end = ends[col.index]
-            col.index = i
+            col.start = starts[i]
+            col.end = ends[i]
             if hasattr(col, 'format'):
                 if any(x in col.format for x in 'fg'):
                     col.type = core.FloatType
@@ -203,6 +218,5 @@ class DaophotHeader(core.BaseHeader):
                 elif 's' in col.format:
                     col.type = core.StrType
 
-        self.n_data_cols = len(self.cols)
         # INDEF is the missing value marker
         self.data.fill_values.append(('INDEF', '0'))
diff --git a/astropy/io/ascii/fixedwidth.py b/astropy/io/ascii/fixedwidth.py
index 272d239..5fa22bd 100644
--- a/astropy/io/ascii/fixedwidth.py
+++ b/astropy/io/ascii/fixedwidth.py
@@ -31,10 +31,10 @@ fixedwidth.py:
 ## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 ## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import re
 import itertools
+
 from . import core
-from .core import io, next, izip, InconsistentTableError
+from .core import InconsistentTableError
 
 
 class FixedWidthSplitter(core.BaseSplitter):
@@ -85,9 +85,6 @@ class FixedWidthHeader(core.BaseHeader):
     :param start_line: None, int, or a function of ``lines`` that returns None or int
     :param comment: regular expression for comment lines
     :param splitter_class: Splitter class for splitting data lines into columns
-    :param names: list of names corresponding to each data column
-    :param include_names: list of names to include in output (default=None selects all names)
-    :param exclude_names: list of names to exlude from output (applied after ``include_names``)
     :param position_line: row index of line that specifies position (default = 1)
     :param position_char: character used to write the position line (default = "-")
     :param col_starts: list of start positions for each column (0-based counting)
@@ -102,7 +99,7 @@ class FixedWidthHeader(core.BaseHeader):
         for i, line in enumerate(self.process_lines(lines)):
             if i == index:
                 break
-        else: # No header line matching
+        else:  # No header line matching
             raise InconsistentTableError('No header line found in table')
         return line
 
@@ -110,9 +107,7 @@ class FixedWidthHeader(core.BaseHeader):
         """Initialize the header Column objects from the table ``lines``.
 
         Based on the previously set Header attributes find or create the column names.
-        Sets ``self.cols`` with the list of Columns.  This list only includes the actual
-        requested columns after filtering by the include_names and exclude_names
-        attributes.  See ``self.names`` for the full list.
+        Sets ``self.cols`` with the list of Columns. 
 
         :param lines: list of table lines
         :returns: None
@@ -130,11 +125,11 @@ class FixedWidthHeader(core.BaseHeader):
                 raise ValueError("Cannot set position_line without also setting header_start")
             data_lines = self.data.process_lines(lines)
             if not data_lines:
-                raise InconsistentTableError('No data lines found so cannot autogenerate column names')
+                raise InconsistentTableError(
+                    'No data lines found so cannot autogenerate column names')
             vals, starts, ends = self.get_fixedwidth_params(data_lines[0])
 
-            if self.names is None:
-                self.names = [self.auto_format % i for i in range(1, len(vals) + 1)]
+            self.names = [self.auto_format % i for i in range(1, len(vals) + 1)]
 
         else:
             # This bit of code handles two cases:
@@ -159,22 +154,14 @@ class FixedWidthHeader(core.BaseHeader):
             line = self.get_line(lines, start_line)
             vals, starts, ends = self.get_fixedwidth_params(line)
 
-            # Possibly override the column names with user-supplied values
-            if self.names is None:
-                self.names = vals
+            self.names = vals
 
-        # Filter self.names using include_names and exclude_names, then create
-        # the actual Column objects.
         self._set_cols_from_names()
-        self.n_data_cols = len(self.cols)
 
-        # Set column start and end positions.  Also re-index the cols because
-        # the FixedWidthSplitter does NOT return the ignored cols (as is the
-        # case for typical delimiter-based splitters)
+        # Set column start and end positions. 
         for i, col in enumerate(self.cols):
-            col.start = starts[col.index]
-            col.end = ends[col.index]
-            col.index = i
+            col.start = starts[i]
+            col.end = ends[i]
 
     def get_fixedwidth_params(self, line):
         """Split ``line`` on the delimiter and determine column values and
@@ -192,7 +179,7 @@ class FixedWidthHeader(core.BaseHeader):
         # figure out positions between delimiters.
         if self.col_starts is not None and self.col_ends is not None:
             starts = list(self.col_starts)  # could be any iterable, e.g. np.array
-            ends = [x + 1 for x in self.col_ends] # user supplies inclusive endpoint
+            ends = [x + 1 for x in self.col_ends]  # user supplies inclusive endpoint
             if len(starts) != len(ends):
                 raise ValueError('Fixed width col_starts and col_ends must have the same length')
             vals = [line[start:end].strip() for start, end in zip(starts, ends)]
@@ -232,13 +219,19 @@ class FixedWidthData(core.BaseData):
     splitter_class = FixedWidthSplitter
 
     def write(self, lines):
-        with self._set_col_formats(self.cols, self.formats):
-            vals_list = []
-            # Col iterator does the formatting defined above so each val is a string
-            # and vals is a tuple of strings for all columns of each row
-            col_str_iters = [col.iter_str_vals() for col in self.cols]
-            for vals in izip(*col_str_iters):
-                vals_list.append(vals)
+
+        self._set_fill_values(self.cols)
+        self._set_col_formats()
+        for col in self.cols:
+            col.str_vals = list(col.iter_str_vals())
+        self._replace_vals(self.cols)
+        col_str_iters = [col.str_vals for col in self.cols]
+
+        vals_list = []
+        # Col iterator does the formatting defined above so each val is a string
+        # and vals is a tuple of strings for all columns of each row
+        for vals in itertools.izip(*col_str_iters):
+            vals_list.append(vals)
 
         for i, col in enumerate(self.cols):
             col.width = max([len(vals[i]) for vals in vals_list])
@@ -292,6 +285,9 @@ class FixedWidth(core.BaseReader):
     :param delimiter_pad: padding around delimiter when writing (default = None)
     :param bookend: put the delimiter at start and end of line when writing (default = False)
     """
+    _format_name = 'fixed_width'
+    _description = 'Fixed width'
+
     def __init__(self, col_starts=None, col_ends=None, delimiter_pad=' ', bookend=True):
         core.BaseReader.__init__(self)
 
@@ -343,6 +339,9 @@ class FixedWidthNoHeader(FixedWidth):
     :param delimiter_pad: padding around delimiter when writing (default = None)
     :param bookend: put the delimiter at start and end of line when writing (default = False)
     """
+    _format_name = 'fixed_width_no_header'
+    _description = 'Fixed width with no header'
+
     def __init__(self, col_starts=None, col_ends=None, delimiter_pad=' ', bookend=True):
         FixedWidth.__init__(self, col_starts, col_ends,
                             delimiter_pad=delimiter_pad, bookend=bookend)
@@ -378,6 +377,9 @@ class FixedWidthTwoLine(FixedWidth):
     :param delimiter_pad: padding around delimiter when writing (default = None)
     :param bookend: put the delimiter at start and end of line when writing (default = False)
     """
+    _format_name = 'fixed_width_two_line'
+    _description = 'Fixed width with second header line'
+
     def __init__(self, position_line=1, position_char='-', delimiter_pad=None, bookend=False):
         FixedWidth.__init__(self, delimiter_pad=delimiter_pad, bookend=bookend)
         self.header.position_line = position_line
@@ -385,5 +387,3 @@ class FixedWidthTwoLine(FixedWidth):
         self.data.start_line = position_line + 1
         self.header.splitter.delimiter = ' '
         self.data.splitter.delimiter = ' '
-
-
diff --git a/astropy/io/ascii/ipac.py b/astropy/io/ascii/ipac.py
index 14901d8..9da2855 100644
--- a/astropy/io/ascii/ipac.py
+++ b/astropy/io/ascii/ipac.py
@@ -31,25 +31,92 @@ ipac.py:
 ## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 ## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import re
+from collections import defaultdict
+from textwrap import wrap
+from warnings import warn
+
 from . import core
 from . import fixedwidth
+from ...utils import OrderedDict
+from ...utils.exceptions import AstropyUserWarning
+from ...table.pprint import _format_funcs, _auto_format_func
+
+
+class IpacFormatErrorDBMS(Exception):
+    def __str__(self):
+        return '{0}\nSee {1}'.format(
+            super(Exception, self).__str__(),
+            'http://irsa.ipac.caltech.edu/applications/DDGEN/Doc/DBMSrestriction.html')
+
 
-class Ipac(core.BaseReader):
-    """Read an IPAC format table.  See
+class IpacFormatError(Exception):
+    def __str__(self):
+        return '{0}\nSee {1}'.format(
+            super(Exception, self).__str__(),
+            'http://irsa.ipac.caltech.edu/applications/DDGEN/Doc/ipac_tbl.html')
+
+
+class Ipac(fixedwidth.FixedWidth):
+    """Read or write an IPAC format table.  See
     http://irsa.ipac.caltech.edu/applications/DDGEN/Doc/ipac_tbl.html::
 
       \\name=value
       \\ Comment
-      |  column1 |  column2 | column3 | column4  |    column5       |
-      |  double  |  double  |   int   |   double |     char         |
-      |   unit   |   unit   |   unit  |    unit  |     unit         |
-      |   null   |   null   |   null  |    null  |     null         |
-       2.0978     29.09056   73765     2.06000    B8IVpMnHg
+      |  column1 |   column2 | column3 | column4  |    column5    |
+      |  double  |   double  |   int   |   double |     char      |
+      |  unit    |   unit    |   unit  |    unit  |     unit      |
+      |  null    |   null    |   null  |    null  |     null      |
+       2.0978     29.09056    73765     2.06000    B8IVpMnHg
 
     Or::
 
       |-----ra---|----dec---|---sao---|------v---|----sptype--------|
-        2.09708   29.09056     73765    2.06000   B8IVpMnHg
+        2.09708   29.09056     73765   2.06000    B8IVpMnHg
+
+    The comments and keywords defined in the header are available via the output
+    table ``meta`` attribute::
+
+      >>> import os
+      >>> from astropy.io import ascii
+      >>> filename = os.path.join(ascii.__path__[0], 'tests/t/ipac.dat')
+      >>> data = ascii.read(filename)
+      >>> print data.meta['comments']
+      ['This is an example of a valid comment']
+      >>> for name, keyword in data.meta['keywords'].items():
+      ...     print name, keyword['value']
+      ...
+      intval 1
+      floatval 2300.0
+      date Wed Sp 20 09:48:36 1995
+      key_continue IPAC keywords can continue across lines
+
+    Note that there are different conventions for characters occuring below the
+    position of the ``|`` symbol in IPAC tables. By default, any character
+    below a ``|`` will be ignored (since this is the current standard),
+    but if you need to read files that assume characters below the ``|``
+    symbols belong to the column before or after the ``|``, you can specify
+    ``definition='left'`` or ``definition='right'`` respectively when reading
+    the table (the default is ``definition='ignore'``). The following examples
+    demonstrate the different conventions:
+
+    * ``definition='ignore'``::
+
+        |   ra  |  dec  |
+        | float | float |
+          1.2345  6.7890
+
+    * ``definition='left'``::
+
+        |   ra  |  dec  |
+        | float | float |
+           1.2345  6.7890
+
+    * ``definition='right'``::
+
+        |   ra  |  dec  |
+        | float | float |
+        1.2345  6.7890
 
     Parameters
     ----------
@@ -61,33 +128,109 @@ class Ipac(core.BaseReader):
           * 'right' - Character is associated with the column to the right
           * 'left' - Character is associated with the column to the left
 
-    Notes
-    -----
-    Caveats:
-
-    * Data type, Units, and Null value specifications are ignored.
-    * Keywords are ignored.
-    * The IPAC spec requires the first two header lines but this reader only
-      requires the initial column name definition line
-
-    Overcoming these limitations would not be difficult, code contributions
-    welcome from motivated users.
-
+    DBMS : bool, optional
+        If true, this varifies that written tables adhere (semantically)
+        to the `IPAC/DBMS <http://irsa.ipac.caltech.edu/applications/DDGEN/Doc/DBMSrestriction.html>`_
+        definiton of IPAC tables. If 'False' it only checks for the (less strict)
+        `IPAC <http://irsa.ipac.caltech.edu/applications/DDGEN/Doc/ipac_tbl.html>`_
+        definition.
     """
-    def __init__(self, definition='ignore'):
-        core.BaseReader.__init__(self)
+    _format_name = 'ipac'
+    _io_registry_format_aliases = ['ipac']
+    _io_registry_can_write = True
+    _description = 'IPAC format table'
+
+    def __init__(self, definition='ignore', DBMS=False):
+        super(fixedwidth.FixedWidth, self).__init__()
         self.header = IpacHeader(definition=definition)
         self.data = IpacData()
+        self.data.header = self.header
+        self.header.data = self.data
+        self.header.DBMS = DBMS
+        self.data.splitter.delimiter = ' '
+        self.data.splitter.delimiter_pad = ''
+        self.data.splitter.bookend = True
+
+    def write(self, table):
+        """Write ``table`` as list of strings.
+
+        :param table: input table data (astropy.table.Table object)
+        :returns: list of strings corresponding to ASCII table
+        """
+
+        core._apply_include_exclude_names(table, self.names, self.include_names,
+                                          self.exclude_names, self.strict_names)
+
+        # link information about the columns to the writer object (i.e. self)
+        self.header.cols = table.columns.values()
+        self.data.cols = table.columns.values()
+
+        # Write header and data to lines list
+        lines = []
+        # Write meta information
+        if 'comments' in table.meta:
+            for comment in table.meta['comments']:
+                if len(str(comment)) > 78:
+                    warn('Comment string > 78 characters was automatically wrapped.',
+                         AstropyUserWarning)
+                for line in wrap(str(comment), 80, initial_indent='\\ ', subsequent_indent='\\ '):
+                    lines.append(line)
+        if 'keywords' in table.meta:
+            keydict = table.meta['keywords']
+            for keyword in keydict:
+                try:
+                    val = keydict[keyword]['value']
+                    lines.append('\\{0}={1!r}'.format(keyword.strip(), val))
+                    # meta is not standardized: Catch some common Errors.
+                except TypeError:
+                    pass
+
+        # get header and data as strings to find width of each column
+        for i, col in enumerate(table.columns.values()):
+            col.headwidth = max([len(vals[i]) for vals in self.header.str_vals()])
+        # keep data_str_vals because they take some time to make
+        data_str_vals = self.data.str_vals()
+        for i, col in enumerate(table.columns.values()):
+            col.width = max([len(vals[i]) for vals in data_str_vals])
+
+        widths = [max(col.width, col.headwidth) for col in table.columns.values()]
+        # then write table
+        self.header.write(lines, widths)
+        self.data.write(lines, widths, data_str_vals)
+
+        return lines
+
 
-    def write(self, table=None):
-        """Not available for the Ipac class (raises NotImplementedError)"""
-        raise NotImplementedError
+class IpacHeaderSplitter(core.BaseSplitter):
+    '''Splitter for Ipac Headers.
 
+    This splitter is similar its parent when reading, but supports a
+    fixed width format (as required for Ipac table headers) for writing.
+    '''
+    process_line = None
+    process_val = None
+    delimiter = '|'
+    delimiter_pad = ''
+    skipinitialspace = False
+    comment = r'\s*\\'
+    write_comment = r'\\'
+    col_starts = None
+    col_ends = None
 
-class IpacHeader(core.BaseHeader):
+    def join(self, vals, widths):
+        pad = self.delimiter_pad or ''
+        delimiter = self.delimiter or ''
+        padded_delim = pad + delimiter + pad
+        bookend_left = delimiter + pad
+        bookend_right = pad + delimiter
+
+        vals = [' ' * (width - len(val)) + val for val, width in zip(vals, widths)]
+        return bookend_left + padded_delim.join(vals) + bookend_right
+
+
+class IpacHeader(fixedwidth.FixedWidthHeader):
     """IPAC table header"""
-    comment = r'\\'
-    splitter_class = core.BaseSplitter
+    splitter_class = IpacHeaderSplitter
     col_type_map = {'int': core.IntType,
                     'integer': core.IntType,
                     'long': core.IntType,
@@ -104,10 +247,8 @@ class IpacHeader(core.BaseHeader):
                     'c': core.StrType}
 
     def __init__(self, definition='ignore'):
-        self.splitter = self.__class__.splitter_class()
-        self.splitter.process_line = None
-        self.splitter.process_val = None
-        self.splitter.delimiter = '|'
+
+        fixedwidth.FixedWidthHeader.__init__(self)
         if definition in ['ignore', 'left', 'right']:
             self.ipac_definition = definition
         else:
@@ -121,13 +262,72 @@ class IpacHeader(core.BaseHeader):
             if line.startswith(delim) and line.endswith(delim):
                 yield line.strip(delim)
 
+    def update_meta(self, lines, meta):
+        """
+        Extract table-level comments and keywords for IPAC table.  See:
+        http://irsa.ipac.caltech.edu/applications/DDGEN/Doc/ipac_tbl.html#kw
+        """
+        def process_keyword_value(val):
+            """
+            Take a string value and convert to float, int or str, and strip quotes
+            as needed.
+            """
+            val = val.strip()
+            try:
+                val = int(val)
+            except:
+                try:
+                    val = float(val)
+                except:
+                    # Strip leading/trailing quote.  The spec says that a matched pair
+                    # of quotes is required, but this code will allow a non-quoted value.
+                    for quote in ('"', "'"):
+                        if val.startswith(quote) and val.endswith(quote):
+                            val = val[1:-1]
+                            break
+            return val
+
+        table_meta = meta['table']
+        table_meta['comments'] = []
+        table_meta['keywords'] = OrderedDict()
+        keywords = table_meta['keywords']
+
+        re_keyword = re.compile(r'\\'
+                                r'(?P<name> \w+)'
+                                r'\s* = (?P<value> .+) $',
+                                re.VERBOSE)
+        for line in lines:
+            # Keywords and comments start with "\".  Once the first non-slash
+            # line is seen then bail out.
+            if not line.startswith('\\'):
+                break
+
+            m = re_keyword.match(line)
+            if m:
+                name = m.group('name')
+                val = process_keyword_value(m.group('value'))
+
+                # IPAC allows for continuation keywords, e.g.
+                # \SQL     = 'WHERE '
+                # \SQL     = 'SELECT (25 column names follow in next row.)'
+                if name in keywords and isinstance(val, basestring):
+                    prev_val = keywords[name]['value']
+                    if isinstance(prev_val, basestring):
+                        val = prev_val + val
+
+                table_meta['keywords'][name] = {'value': val}
+            else:
+                # Comment is required to start with "\ "
+                if line.startswith('\\ '):
+                    val = line[2:].strip()
+                    if val:
+                        table_meta['comments'].append(val)
+
     def get_cols(self, lines):
         """Initialize the header Column objects from the table ``lines``.
 
         Based on the previously set Header attributes find or create the column names.
-        Sets ``self.cols`` with the list of Columns.  This list only includes the actual
-        requested columns after filtering by the include_names and exclude_names
-        attributes.  See ``self.names`` for the full list.
+        Sets ``self.cols`` with the list of Columns.  
 
         :param lines: list of table lines
         :returns: list of table Columns
@@ -135,7 +335,8 @@ class IpacHeader(core.BaseHeader):
         header_lines = self.process_lines(lines)  # generator returning valid header lines
         header_vals = [vals for vals in self.splitter(header_lines)]
         if len(header_vals) == 0:
-            raise ValueError('At least one header line beginning and ending with delimiter required')
+            raise ValueError('At least one header line beginning and ending with '
+                             'delimiter required')
         elif len(header_vals) > 4:
             raise ValueError('More than four header lines were found')
 
@@ -143,14 +344,14 @@ class IpacHeader(core.BaseHeader):
         cols = []
         start = 1
         for i, name in enumerate(header_vals[0]):
-            col = core.Column(name=name.strip(' -'), index=i)
+            col = core.Column(name=name.strip(' -'))
             col.start = start
             col.end = start + len(name)
             if len(header_vals) > 1:
                 col.raw_type = header_vals[1][i].strip(' -')
                 col.type = self.get_col_type(col)
             if len(header_vals) > 2:
-                col.units = header_vals[2][i].strip() # Can't strip dashes here
+                col.unit = header_vals[2][i].strip()  # Can't strip dashes here
             if len(header_vals) > 3:
                 # The IPAC null value corresponds to the io.ascii bad_value.
                 # In this case there isn't a fill_value defined, so just put
@@ -171,25 +372,10 @@ class IpacHeader(core.BaseHeader):
             elif self.ipac_definition == 'left':
                 col.end += 1
 
-        # Standard column name filtering (include or exclude names)
         self.names = [x.name for x in cols]
-        names = set(self.names)
-        if self.include_names is not None:
-            names.intersection_update(self.include_names)
-        if self.exclude_names is not None:
-            names.difference_update(self.exclude_names)
-
-        # Generate final list of cols and re-index the cols because the
-        # FixedWidthSplitter does NOT return the ignored cols (as is the
-        # case for typical delimiter-based splitters)
-        self.cols = [x for x in cols if x.name in names]
-        for i, col in enumerate(self.cols):
-            col.index = i
-
-        # Since the splitter returns only the actual requested columns, at this
-        # point set self.n_data_cols to be the number of requested columns.  This
-        # gets used later to validate the data as it gets read and split.
-        self.n_data_cols = len(self.cols)
+        self.cols = cols
+
+
 
     def str_vals(self):
 
@@ -229,6 +415,7 @@ class IpacHeader(core.BaseHeader):
 
         dtypelist = []
         unitlist = []
+        nullist = []
         for col in self.cols:
             if col.dtype.kind in ['i', 'u']:
                 dtypelist.append('long')
@@ -240,15 +427,25 @@ class IpacHeader(core.BaseHeader):
                 unitlist.append('')
             else:
                 unitlist.append(str(col.unit))
-        nullist = [getattr(col, 'fill_value', 'null') for col in self.cols]
+            null = getattr(col, 'fill_value', 'null')
+            try:
+                format_func = _format_funcs.get(col.format, _auto_format_func)
+                nullist.append((format_func(col.format, null)).strip())
+            except:
+                # It is pssible that null and the column values have different
+                # data types (e.g. number und null = 'null' (i.e. a string).
+                # This could cause all kinds of exceptions, so a catch all
+                # block is needed here
+                nullist.append(str(null).strip())
+
         return [namelist, dtypelist, unitlist, nullist]
 
     def write(self, lines, widths):
         '''Write header.
 
-        The width of each column is determined in IpacData.write. Writing the header
+        The width of each column is determined in Ipac.write. Writing the header
         must be delayed until that time.
-        This function is called from data, once the width information is
+        This function is called from there, once the width information is
         available.'''
 
         for vals in self.str_vals():
@@ -258,5 +455,21 @@ class IpacHeader(core.BaseHeader):
 
 class IpacData(fixedwidth.FixedWidthData):
     """IPAC table data reader"""
-    splitter_class = fixedwidth.FixedWidthSplitter
     comment = r'[|\\]'
+
+    def str_vals(self):
+        '''return str vals for each in the table'''
+        vals_list = []
+        # just to make sure
+        self._set_col_formats()
+        col_str_iters = [col.iter_str_vals() for col in self.cols]
+        for vals in core.izip(*col_str_iters):
+            vals_list.append(vals)
+
+        return vals_list
+
+    def write(self, lines, widths, vals_list):
+        """ IPAC writer, modified from FixedWidth writer """
+        for vals in vals_list:
+            lines.append(self.splitter.join(vals, widths))
+        return lines
diff --git a/astropy/io/ascii/latex.py b/astropy/io/ascii/latex.py
index e2923d1..11e61a1 100644
--- a/astropy/io/ascii/latex.py
+++ b/astropy/io/ascii/latex.py
@@ -34,19 +34,20 @@ latex.py:
 import re
 from . import core
 
-latexdicts ={'AA':  {'tabletype': 'table',
-                 'header_start': r'\hline \hline', 'header_end': r'\hline',
-                 'data_end': r'\hline'},
-             'doublelines': {'tabletype': 'table',
-                 'header_start': r'\hline \hline', 'header_end': r'\hline\hline',
-                 'data_end': r'\hline\hline'},
-             'template': {'tabletype': 'tabletype', 'caption': 'caption',
-                          'col_align': 'col_align', 'preamble': 'preamble',
-                          'header_start': 'header_start',
-                          'header_end': 'header_end', 'data_start': 'data_start',
-                          'data_end': 'data_end', 'tablefoot': 'tablefoot',
-                          'units': {'col1': 'unit of col1', 'col2': 'unit of col2'}}
-             }
+latexdicts = {'AA':  {'tabletype': 'table',
+                      'header_start': r'\hline \hline', 'header_end': r'\hline',
+                      'data_end': r'\hline'},
+              'doublelines': {'tabletype': 'table',
+                              'header_start': r'\hline \hline', 'header_end': r'\hline\hline',
+                              'data_end': r'\hline\hline'},
+              'template': {'tabletype': 'tabletype', 'caption': 'caption',
+                           'col_align': 'col_align', 'preamble': 'preamble',
+                           'header_start': 'header_start',
+                           'header_end': 'header_end', 'data_start': 'data_start',
+                           'data_end': 'data_end', 'tablefoot': 'tablefoot',
+                           'units': {'col1': 'unit of col1', 'col2': 'unit of col2'}}
+              }
+
 
 def add_dictval_to_list(adict, key, alist):
     '''add a value from a dictionary to a list
@@ -61,6 +62,7 @@ def add_dictval_to_list(adict, key, alist):
         else:
             alist.extend(adict[key])
 
+
 def find_latex_line(lines, latex):
     '''Find the first line which matches a patters
 
@@ -69,7 +71,7 @@ def find_latex_line(lines, latex):
     :returns: line number or None, if no match was found
     '''
     re_string = re.compile(latex.replace('\\', '\\\\'))
-    for i,line in enumerate(lines):
+    for i, line in enumerate(lines):
         if re_string.match(line):
             return i
     else:
@@ -93,7 +95,7 @@ class LatexHeader(core.BaseHeader):
         lines.append(r'\begin{' + self.latex['tabletype'] + r'}')
         add_dictval_to_list(self.latex, 'preamble', lines)
         if 'caption' in self.latex.keys():
-            lines.append(r'\caption{' + self.latex['caption'] +'}')
+            lines.append(r'\caption{' + self.latex['caption'] + '}')
         lines.append(self.header_start + r'{' + self.latex['col_align'] + r'}')
         add_dictval_to_list(self.latex, 'header_start', lines)
         lines.append(self.splitter.join([x.name for x in self.cols]))
@@ -103,7 +105,6 @@ class LatexHeader(core.BaseHeader):
         add_dictval_to_list(self.latex, 'header_end', lines)
 
 
-
 class LatexData(core.BaseData):
     data_start = None
     data_end = r'\end{tabular}'
@@ -129,7 +130,6 @@ class LatexData(core.BaseData):
         lines.append(r'\end{' + self.latex['tabletype'] + '}')
 
 
-
 class LatexSplitter(core.BaseSplitter):
     '''Split LaTeX table date. Default delimiter is `&`.
     '''
@@ -140,7 +140,7 @@ class LatexSplitter(core.BaseSplitter):
         \\ at end of line"""
         line = line.split('%')[0]
         line = line.strip()
-        if line[-2:] ==r'\\':
+        if line[-2:] == r'\\':
             line = line.strip(r'\\')
         else:
             raise core.InconsistentTableError(r'Lines in LaTeX table have to end with \\')
@@ -158,6 +158,7 @@ class LatexSplitter(core.BaseSplitter):
         delimiter = ' ' + self.delimiter + ' '
         return delimiter.join(x.strip() for x in vals) + r' \\'
 
+
 class Latex(core.BaseReader):
     r'''Write and read LaTeX tables.
 
@@ -257,8 +258,13 @@ class Latex(core.BaseReader):
             latexdict['col_align'] = col_align
 
     '''
+    _format_name = 'latex'
+    _io_registry_format_aliases = ['latex']
+    _io_registry_suffix = '.tex'
+    _description = 'LaTeX table'
 
-    def __init__(self, ignore_latex_commands = ['hline', 'vspace', 'tableline'], latexdict = {}, caption ='', col_align = None):
+    def __init__(self, ignore_latex_commands=['hline', 'vspace', 'tableline'],
+                 latexdict={}, caption='', col_align=None):
 
         core.BaseReader.__init__(self)
         self.header = LatexHeader()
@@ -275,14 +281,16 @@ class Latex(core.BaseReader):
         self.data.latex = self.latex
         self.latex['tabletype'] = 'table'
         self.latex.update(latexdict)
-        if caption: self.latex['caption'] = caption
-        if col_align: self.latex['col_align'] = col_align
+        if caption:
+            self.latex['caption'] = caption
+        if col_align:
+            self.latex['col_align'] = col_align
 
         self.ignore_latex_commands = ignore_latex_commands
-        self.header.comment = '%|' + '|'.join([r'\\' + command for command in self.ignore_latex_commands])
+        self.header.comment = '%|' + '|'.join(
+            [r'\\' + command for command in self.ignore_latex_commands])
         self.data.comment = self.header.comment
 
-
     def write(self, table=None):
         self.header.start_line = None
         self.data.start_line = None
@@ -306,10 +314,11 @@ class AASTexHeader(LatexHeader):
         lines.append(r'\begin{' + self.latex['tabletype'] + r'}{' + self.latex['col_align'] + r'}')
         add_dictval_to_list(self.latex, 'preamble', lines)
         if 'caption' in self.latex.keys():
-            lines.append(r'\tablecaption{' + self.latex['caption'] +'}')
+            lines.append(r'\tablecaption{' + self.latex['caption'] + '}')
         tablehead = ' & '.join([r'\colhead{' + x.name + '}' for x in self.cols])
         if 'units' in self.latex.keys():
-            tablehead += r'\\ ' + (self.splitter.join([ self.latex['units'].get(x.name, ' ') for x in self.cols]))
+            tablehead += r'\\ ' + (self.splitter.join([self.latex[
+                                   'units'].get(x.name, ' ') for x in self.cols]))
         lines.append(r'\tablehead{' + tablehead + '}')
 
 
@@ -329,6 +338,7 @@ class AASTexData(LatexData):
         add_dictval_to_list(self.latex, 'tablefoot', lines)
         lines.append(r'\end{' + self.latex['tabletype'] + r'}')
 
+
 class AASTexHeaderSplitter(LatexSplitter):
     '''extract column names from a `deluxetable`
 
@@ -340,19 +350,18 @@ class AASTexHeaderSplitter(LatexSplitter):
         """extract column names from tablehead
         """
         line = line.split('%')[0]
-        line = line.replace(r'\tablehead','')
+        line = line.replace(r'\tablehead', '')
         line = line.strip()
-        if (line[0] =='{') and (line[-1] == '}'):
+        if (line[0] == '{') and (line[-1] == '}'):
             line = line[1:-1]
         else:
             raise core.InconsistentTableError(r'\tablehead is missing {}')
-        return line.replace(r'\colhead','')
+        return line.replace(r'\colhead', '')
 
     def join(self, vals):
         return ' & '.join([r'\colhead{' + str(x) + '}' for x in vals])
 
 
-
 class AASTex(Latex):
     '''Write and read AASTeX tables.
 
@@ -365,11 +374,17 @@ class AASTex(Latex):
     ``data_start`` and ``data_end`` in ``latexdict`` have no effect.
     '''
 
+    _format_name = 'aastex'
+    _io_registry_format_aliases = ['aastex']
+    _io_registry_suffix = ''  # AASTex inherits from Latex, so override this class attr
+    _description = 'AASTeX deluxetable used for AAS journals'
+
     def __init__(self, **kwargs):
         Latex.__init__(self, **kwargs)
         self.header = AASTexHeader()
         self.data = AASTexData()
-        self.header.comment = '%|' + '|'.join([r'\\' + command for command in self.ignore_latex_commands])
+        self.header.comment = '%|' + '|'.join(
+            [r'\\' + command for command in self.ignore_latex_commands])
         self.header.splitter = AASTexHeaderSplitter()
         self.data.splitter = LatexSplitter()
         self.data.comment = self.header.comment
diff --git a/astropy/io/ascii/setup_package.py b/astropy/io/ascii/setup_package.py
index 21b78b6..9892e15 100644
--- a/astropy/io/ascii/setup_package.py
+++ b/astropy/io/ascii/setup_package.py
@@ -55,4 +55,4 @@ def get_package_data():
                                    't/vots_spec.dat',
                                    't/whitespace.dat',
                                    ]
-        }
+    }
diff --git a/astropy/io/ascii/sextractor.py b/astropy/io/ascii/sextractor.py
index 5d2cbc6..7421fea 100644
--- a/astropy/io/ascii/sextractor.py
+++ b/astropy/io/ascii/sextractor.py
@@ -53,6 +53,9 @@ class SExtractor(core.BaseReader):
     Note the skipped numbers since flux_radius has 3 columns.  The three FLUX_RADIUS
     columns will be named FLUX_RADIUS, FLUX_RADIUS_1, FLUX_RADIUS_2
     """
+    _format_name = 'sextractor'
+    _io_registry_can_write = False
+    _description = 'SExtractor format table'
 
     def __init__(self):
         core.BaseReader.__init__(self)
@@ -100,7 +103,7 @@ class SExtractorHeader(core.BaseHeader):
                 match = re_name_def.search(line)
                 if match:
                     words = match.group(0).strip().strip('#').split()
-                    colnumber = int(words[0]) # First string is the column number
+                    colnumber = int(words[0])  # First string is the column number
                     colname = words[1]   # second string is the column name
                     columns[colnumber] = colname
         # Handle skipped column numbers
@@ -108,7 +111,7 @@ class SExtractorHeader(core.BaseHeader):
         previous_column = 0
         for n in colnumbers:
             if n != previous_column + 1:
-                for c in range(previous_column+1,n):
+                for c in range(previous_column+1, n):
                     column_name = columns[previous_column]+"_%d" % (c-previous_column)
                     columns[c] = column_name
             previous_column = n
diff --git a/astropy/io/ascii/tests/common.py b/astropy/io/ascii/tests/common.py
index 53c34de..45b7971 100644
--- a/astropy/io/ascii/tests/common.py
+++ b/astropy/io/ascii/tests/common.py
@@ -1,27 +1,28 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
 from __future__ import absolute_import
+
 import os
+
 from distutils import version
-import numpy as np
 
+import numpy as np
 
 from ... import ascii
 
-__all__ = ['raises', 'numpy_lt_1p5'
-           'assert_equal', 'assert_almost_equal', 'assert_true',
-           'setup_function', 'teardown_function', 'has_isnan']
-
-numpy_lt_1p5 = version.LooseVersion(np.__version__) < version.LooseVersion('1.5')
+__all__ = ['raises', 'assert_equal', 'assert_almost_equal',
+           'assert_true', 'setup_function', 'teardown_function',
+           'has_isnan']
 
 CWD = os.getcwd()
 TEST_DIR = os.path.dirname(__file__)
 
 has_isnan = True
 try:
-    from math import isnan
+    from math import isnan  # pylint: disable=W0611
 except ImportError:
     try:
-        from numpy import isnan
+        from numpy import isnan  # pylint: disable=W0611
     except ImportError:
         has_isnan = False
         print('Tests requiring isnan will fail')
diff --git a/astropy/io/ascii/tests/t/ipac.dat b/astropy/io/ascii/tests/t/ipac.dat
index 453928e..a5492d4 100644
--- a/astropy/io/ascii/tests/t/ipac.dat
+++ b/astropy/io/ascii/tests/t/ipac.dat
@@ -1,9 +1,9 @@
-\catalog = sao
+\intval = 1
+\floatval=2.3e3
 \date = "Wed Sp 20 09:48:36 1995"
-\mykeyword = 'Another way for defining keyvalue string'
-\ This is an example of a valid comment.
-\ The 2nd data line is used to verify the exact column parsing 
-\ (unclear if this is a valid for the IPAC format)
+\key_continue = 'IPAC keywords '
+\key_continue = 'can continue across lines'
+\ This is an example of a valid comment
 |     ra   |    dec   |   sai   |-----v2---|    sptype        |
 |    real  |   real   |   int   |    real  |     char         |
 |    unit  |   unit   |   unit  |    unit  |     ergs         |
diff --git a/astropy/io/ascii/tests/test_cds_header_from_readme.py b/astropy/io/ascii/tests/test_cds_header_from_readme.py
index dfd7b4e..6d8566b 100644
--- a/astropy/io/ascii/tests/test_cds_header_from_readme.py
+++ b/astropy/io/ascii/tests/test_cds_header_from_readme.py
@@ -1,10 +1,9 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
 from ....tests.helper import pytest
 from ... import ascii as asciitable
-
-from .common import (raises, numpy_lt_1p5,
-                     assert_equal, assert_almost_equal, assert_true,
-                     setup_function, teardown_function, has_isnan)
+from .common import (assert_equal, assert_almost_equal, has_isnan,
+                     setup_function, teardown_function)
 
 
 def read_table1(readme, data):
@@ -42,7 +41,6 @@ def test_glob_header():
         assert_equal(table['BibCode'][-2], '2005A&A...432..235R')
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_header_from_readme():
     r = asciitable.Cds("t/vizier/ReadMe")
     table = r.read("t/vizier/table1.dat")
@@ -71,61 +69,61 @@ def test_header_from_readme():
     assert len(r.data.data_lines) == 49
     assert len(table) == 49
     assert len(table.keys()) == 10
-    Q = [ 0.289,
-          0.325,
-          0.510,
-          0.577,
-          0.539,
-          0.390,
-          0.957,
-          0.736,
-          1.435,
-          1.117,
-          1.473,
-          0.808,
-          1.416,
-          2.209,
-          0.617,
-          1.046,
-          1.604,
-          1.419,
-          1.431,
-          1.183,
-          1.210,
-          1.005,
-          0.706,
-          0.665,
-          0.340,
-          0.323,
-          0.391,
-          0.280,
-          0.343,
-          0.369,
-          0.495,
-          0.828,
-          1.113,
-          0.499,
-          1.038,
-          0.260,
-          0.863,
-          1.638,
-          0.479,
-          0.232,
-          0.627,
-          0.671,
-          0.371,
-          0.851,
-          0.607,
+    Q = [0.289,
+         0.325,
+         0.510,
+         0.577,
+         0.539,
+         0.390,
+         0.957,
+         0.736,
+         1.435,
+         1.117,
+         1.473,
+         0.808,
+         1.416,
+         2.209,
+         0.617,
+         1.046,
+         1.604,
+         1.419,
+         1.431,
+         1.183,
+         1.210,
+         1.005,
+         0.706,
+         0.665,
+         0.340,
+         0.323,
+         0.391,
+         0.280,
+         0.343,
+         0.369,
+         0.495,
+         0.828,
+         1.113,
+         0.499,
+         1.038,
+         0.260,
+         0.863,
+         1.638,
+         0.479,
+         0.232,
+         0.627,
+         0.671,
+         0.371,
+         0.851,
+         0.607,
          -9.999,
-          1.958,
-          1.416,
-          0.949]
+         1.958,
+         1.416,
+         0.949]
     if has_isnan:
         from .common import isnan
         for i, val in enumerate(table.field('Q')):
             if isnan(val):
-                assert Q[i] == -9.999  # text value for a missing value in that
-                                       # table
+                # text value for a missing value in that table
+                assert Q[i] == -9.999
             else:
                 assert val == Q[i]
 
diff --git a/astropy/io/ascii/tests/test_compressed.py b/astropy/io/ascii/tests/test_compressed.py
index 6f412ec..280c28c 100644
--- a/astropy/io/ascii/tests/test_compressed.py
+++ b/astropy/io/ascii/tests/test_compressed.py
@@ -4,7 +4,6 @@ import numpy as np
 
 from ....tests.helper import pytest
 from .. import read
-from .common import numpy_lt_1p5
 
 ROOT = os.path.abspath(os.path.dirname(__file__))
 
@@ -20,9 +19,6 @@ def test_gzip(filename):
 
 @pytest.mark.parametrize('filename', ['t/short.rdb.bz2', 't/ipac.dat.bz2'])
 def test_bzip2(filename):
-    # Can't read IPAC file with numpy 1.4
-    if numpy_lt_1p5 and filename == 't/ipac.dat.bz2':
-        return
     t_comp = read(os.path.join(ROOT, filename))
     t_uncomp = read(os.path.join(ROOT, filename.replace('.bz2', '')))
     assert t_comp.dtype.names == t_uncomp.dtype.names
diff --git a/astropy/io/ascii/tests/test_connect.py b/astropy/io/ascii/tests/test_connect.py
index c6169b3..cbda7a1 100644
--- a/astropy/io/ascii/tests/test_connect.py
+++ b/astropy/io/ascii/tests/test_connect.py
@@ -4,31 +4,26 @@ from ....tests.helper import pytest
 
 from ....table import Table, Column
 
-from .common import numpy_lt_1p5
 ROOT = os.path.abspath(os.path.dirname(__file__))
 
 
 @pytest.mark.parametrize('filename', ['t/cds.dat', 't/ipac.dat',
                                       't/daophot.dat', 't/latex1.tex'])
 def test_read_generic(filename):
-    if numpy_lt_1p5 and filename in ['t/cds.dat', 't/ipac.dat']:
-        return
     Table.read(os.path.join(ROOT, filename), format='ascii')
 
 
 def test_write_generic(tmpdir):
     t = Table()
-    t.add_column(Column(name='a', data=[1,2,3]))
+    t.add_column(Column(name='a', data=[1, 2, 3]))
     t.add_column(Column(name='b', data=['a', 'b', 'c']))
     t.write(str(tmpdir.join("test")), format='ascii')
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_read_ipac():
     Table.read(os.path.join(ROOT, 't/ipac.dat'), format='ipac')
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_read_cds():
     Table.read(os.path.join(ROOT, 't/cds.dat'), format='cds')
 
@@ -47,7 +42,7 @@ def test_read_latex_noformat():
 
 def test_write_latex(tmpdir):
     t = Table()
-    t.add_column(Column(name='a', data=[1,2,3]))
+    t.add_column(Column(name='a', data=[1, 2, 3]))
     t.add_column(Column(name='b', data=['a', 'b', 'c']))
     path = str(tmpdir.join("data.tex"))
     t.write(path, format='latex')
@@ -55,7 +50,7 @@ def test_write_latex(tmpdir):
 
 def test_write_latex_noformat(tmpdir):
     t = Table()
-    t.add_column(Column(name='a', data=[1,2,3]))
+    t.add_column(Column(name='a', data=[1, 2, 3]))
     t.add_column(Column(name='b', data=['a', 'b', 'c']))
     path = str(tmpdir.join("data.tex"))
     t.write(path)
@@ -71,7 +66,7 @@ def test_read_rdb_noformat():
 
 def test_write_rdb(tmpdir):
     t = Table()
-    t.add_column(Column(name='a', data=[1,2,3]))
+    t.add_column(Column(name='a', data=[1, 2, 3]))
     t.add_column(Column(name='b', data=['a', 'b', 'c']))
     path = str(tmpdir.join("data.rdb"))
     t.write(path, format='rdb')
@@ -79,7 +74,7 @@ def test_write_rdb(tmpdir):
 
 def test_write_rdb_noformat(tmpdir):
     t = Table()
-    t.add_column(Column(name='a', data=[1,2,3]))
+    t.add_column(Column(name='a', data=[1, 2, 3]))
     t.add_column(Column(name='b', data=['a', 'b', 'c']))
     path = str(tmpdir.join("data.rdb"))
     t.write(path)
diff --git a/astropy/io/ascii/tests/test_fixedwidth.py b/astropy/io/ascii/tests/test_fixedwidth.py
index 4784104..6588934 100644
--- a/astropy/io/ascii/tests/test_fixedwidth.py
+++ b/astropy/io/ascii/tests/test_fixedwidth.py
@@ -1,13 +1,12 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-import re
-import glob
-import numpy as np
-from ... import ascii as asciitable
 
-io = asciitable.core.io
+try:
+    from cStringIO import StringIO
+except ImportError:
+    from io import StringIO
 
-from .common import (raises,
-                     assert_equal, assert_almost_equal, assert_true,
+from ... import ascii as asciitable
+from .common import (assert_equal, assert_almost_equal,
                      setup_function, teardown_function)
 
 
@@ -25,7 +24,7 @@ def test_read_normal():
 """
     reader = asciitable.get_reader(Reader=asciitable.FixedWidth)
     dat = reader.read(table)
-    assert_equal(reader.header.colnames, ('Col1', 'Col2'))
+    assert_equal(dat.colnames, ['Col1', 'Col2'])
     assert_almost_equal(dat[1][0], 2.4)
     assert_equal(dat[0][1], '"hello"')
     assert_equal(dat[1][1], "'s worlds")
@@ -42,7 +41,7 @@ def test_read_normal_names():
     reader = asciitable.get_reader(Reader=asciitable.FixedWidth,
                                    names=('name1', 'name2'))
     dat = reader.read(table)
-    assert_equal(reader.header.colnames, ('name1', 'name2'))
+    assert_equal(dat.colnames, ['name1', 'name2'])
     assert_almost_equal(dat[1][0], 2.4)
 
 
@@ -58,7 +57,7 @@ def test_read_normal_names_include():
                                    names=('name1', 'name2', 'name3'),
                                    include_names=('name1', 'name3'))
     dat = reader.read(table)
-    assert_equal(reader.header.colnames, ('name1', 'name3'))
+    assert_equal(dat.colnames, ['name1', 'name3'])
     assert_almost_equal(dat[1][0], 2.4)
     assert_equal(dat[0][1], 3)
 
@@ -74,7 +73,7 @@ def test_read_normal_exclude():
     reader = asciitable.get_reader(Reader=asciitable.FixedWidth,
                                    exclude_names=('Col1',))
     dat = reader.read(table)
-    assert_equal(reader.header.colnames, ('Col2',))
+    assert_equal(dat.colnames, ['Col2'])
     assert_equal(dat[1][0], "'s worlds")
 
 
@@ -87,7 +86,7 @@ def test_read_weird():
 """
     reader = asciitable.get_reader(Reader=asciitable.FixedWidth)
     dat = reader.read(table)
-    assert_equal(reader.header.colnames, ('Col1', 'Col2'))
+    assert_equal(dat.colnames, ['Col1', 'Col2'])
     assert_almost_equal(dat[1][0], 2.4)
     assert_equal(dat[0][1], '"hel')
     assert_equal(dat[1][1], "df's wo")
@@ -144,8 +143,8 @@ def test_read_no_header_names():
     and third rows also have hanging spaces after final |."""
     table = """
 |  John  | 555-1234 |192.168.1.10|
-|  Mary  | 555-2134 |192.168.1.12|  
-|   Bob  | 555-4527 | 192.168.1.9|  
+|  Mary  | 555-2134 |192.168.1.12|
+|   Bob  | 555-4527 | 192.168.1.9|
 """
     dat = asciitable.read(table, Reader=asciitable.FixedWidth, guess=False,
                           header_start=None, data_start=0,
@@ -175,8 +174,8 @@ def test_read_no_header_names_NoHeader():
     and third rows also have hanging spaces after final |."""
     table = """
 |  John  | 555-1234 |192.168.1.10|
-|  Mary  | 555-2134 |192.168.1.12|  
-|   Bob  | 555-4527 | 192.168.1.9|  
+|  Mary  | 555-2134 |192.168.1.12|
+|   Bob  | 555-4527 | 192.168.1.9|
 """
     dat = asciitable.read(table, Reader=asciitable.FixedWidthNoHeader,
                           names=('Name', 'Phone', 'TCP'))
@@ -217,7 +216,7 @@ dat = asciitable.read(table, Reader=asciitable.FixedWidth)
 
 def test_write_normal():
     """Write a table as a normal fixed width table."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidth)
     assert_equal_splitlines(out.getvalue(), """\
 | Col1 |      Col2 | Col3 | Col4 |
@@ -226,9 +225,21 @@ def test_write_normal():
 """)
 
 
+def test_write_fill_values():
+    """Write a table as a normal fixed width table."""
+    out = StringIO()
+    asciitable.write(dat, out, Writer=asciitable.FixedWidth,
+                     fill_values=('a', 'N/A'))
+    assert_equal_splitlines(out.getvalue(), """\
+| Col1 |      Col2 | Col3 | Col4 |
+|  1.2 |   "hello" |    1 |  N/A |
+|  2.4 | 's worlds |    2 |    2 |
+""")
+
+
 def test_write_no_pad():
     """Write a table as a fixed width table with no padding."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidth,
                      delimiter_pad=None)
     assert_equal_splitlines(out.getvalue(), """\
@@ -240,7 +251,7 @@ def test_write_no_pad():
 
 def test_write_no_bookend():
     """Write a table as a fixed width table with no bookend."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidth, bookend=False)
     assert_equal_splitlines(out.getvalue(), """\
 Col1 |      Col2 | Col3 | Col4
@@ -251,7 +262,7 @@ Col1 |      Col2 | Col3 | Col4
 
 def test_write_no_delimiter():
     """Write a table as a fixed width table with no delimiter."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidth, bookend=False,
                      delimiter=None)
     assert_equal_splitlines(out.getvalue(), """\
@@ -263,7 +274,7 @@ Col1       Col2  Col3  Col4
 
 def test_write_noheader_normal():
     """Write a table as a normal fixed width table."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidthNoHeader)
     assert_equal_splitlines(out.getvalue(), """\
 | 1.2 |   "hello" | 1 | a |
@@ -273,7 +284,7 @@ def test_write_noheader_normal():
 
 def test_write_noheader_no_pad():
     """Write a table as a fixed width table with no padding."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidthNoHeader,
                      delimiter_pad=None)
     assert_equal_splitlines(out.getvalue(), """\
@@ -284,7 +295,7 @@ def test_write_noheader_no_pad():
 
 def test_write_noheader_no_bookend():
     """Write a table as a fixed width table with no bookend."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidthNoHeader,
                      bookend=False)
     assert_equal_splitlines(out.getvalue(), """\
@@ -295,7 +306,7 @@ def test_write_noheader_no_bookend():
 
 def test_write_noheader_no_delimiter():
     """Write a table as a fixed width table with no delimiter."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidthNoHeader, bookend=False,
                      delimiter=None)
     assert_equal_splitlines(out.getvalue(), """\
@@ -306,7 +317,7 @@ def test_write_noheader_no_delimiter():
 
 def test_write_formats():
     """Write a table as a fixed width table with no delimiter."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidth,
                      formats={'Col1': '%-8.3f', 'Col2': '%-15s'})
     assert_equal_splitlines(out.getvalue(), """\
@@ -320,9 +331,9 @@ def test_read_twoline_normal():
     """Typical fixed format table with two header lines (with some cruft
     thrown in to test column positioning"""
     table = """
-  Col1    Col2 
-  ----  --------- 
-   1.2xx"hello" 
+  Col1    Col2
+  ----  ---------
+   1.2xx"hello"
   2.4   's worlds
 """
     dat = asciitable.read(table, Reader=asciitable.FixedWidthTwoLine)
@@ -336,9 +347,9 @@ def test_read_twoline_ReST():
     """Read restructured text table"""
     table = """
 ======= ===========
-  Col1    Col2 
+  Col1    Col2
 ======= ===========
-  1.2   "hello" 
+  1.2   "hello"
   2.4   's worlds
 ======= ===========
 """
@@ -373,7 +384,7 @@ def test_read_twoline_human():
 
 def test_write_twoline_normal():
     """Write a table as a normal fixed width table."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidthTwoLine)
     assert_equal_splitlines(out.getvalue(), """\
 Col1      Col2 Col3 Col4
@@ -385,7 +396,7 @@ Col1      Col2 Col3 Col4
 
 def test_write_twoline_no_pad():
     """Write a table as a fixed width table with no padding."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidthTwoLine,
                      delimiter_pad=' ', position_char='=')
     assert_equal_splitlines(out.getvalue(), """\
@@ -398,7 +409,7 @@ Col1        Col2   Col3   Col4
 
 def test_write_twoline_no_bookend():
     """Write a table as a fixed width table with no bookend."""
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.FixedWidthTwoLine,
                      bookend=True, delimiter='|')
     assert_equal_splitlines(out.getvalue(), """\
diff --git a/astropy/io/ascii/tests/test_ipac_definitions.py b/astropy/io/ascii/tests/test_ipac_definitions.py
index cfe396e..bbcd82c 100644
--- a/astropy/io/ascii/tests/test_ipac_definitions.py
+++ b/astropy/io/ascii/tests/test_ipac_definitions.py
@@ -1,6 +1,18 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+import os
+
 from ..ui import read
-from ..ipac import Ipac
+from ..ipac import Ipac, IpacFormatError, IpacFormatErrorDBMS
+from ....tests.helper import pytest
+from ... import ascii
+from ....table import Table
+
+try:
+    from cStringIO import StringIO
+except ImportError:
+    from io import StringIO
+
 
 DATA = '''
 |   a  |   b   |
@@ -8,6 +20,7 @@ DATA = '''
 ABBBBBBABBBBBBBA
 '''
 
+
 def test_ipac_default():
     # default should be ignore
     table = read(DATA, Reader=Ipac)
@@ -19,15 +32,100 @@ def test_ipac_ignore():
     table = read(DATA, Reader=Ipac, definition='ignore')
     assert table['a'][0] == 'BBBBBB'
     assert table['b'][0] == 'BBBBBBB'
-    
-    
+
+
 def test_ipac_left():
     table = read(DATA, Reader=Ipac, definition='left')
     assert table['a'][0] == 'BBBBBBA'
     assert table['b'][0] == 'BBBBBBBA'
-    
-    
+
+
 def test_ipac_right():
     table = read(DATA, Reader=Ipac, definition='right')
     assert table['a'][0] == 'ABBBBBB'
-    assert table['b'][0] == 'ABBBBBBB'
\ No newline at end of file
+    assert table['b'][0] == 'ABBBBBBB'
+
+
+def test_too_long_colname_default():
+    table = Table([[3]], names=['a1234567890123456789012345678901234567890'])
+    out = StringIO()
+    with pytest.raises(IpacFormatError):
+        ascii.write(table, out, Writer=Ipac)
+
+
+def test_too_long_colname_strict():
+    table = Table([[3]], names=['a1234567890123456'])
+    out = StringIO()
+    with pytest.raises(IpacFormatErrorDBMS):
+        ascii.write(table, out, Writer=Ipac, DBMS=True)
+
+
+def test_too_long_colname_notstrict():
+    table = Table([[3]], names=['a1234567890123456789012345678901234567890'])
+    out = StringIO()
+    with pytest.raises(IpacFormatError):
+        ascii.write(table, out, Writer=Ipac, DBMS=False)
+
+
+ at pytest.mark.parametrize(("strict_", "Err"), [(True, IpacFormatErrorDBMS), (False, IpacFormatError)])
+def test_non_alfnum_colname(strict_, Err):
+    table = Table([[3]], names=['a123456789 01234'])
+    out = StringIO()
+    with pytest.raises(Err):
+        ascii.write(table, out, Writer=Ipac, DBMS=strict_)
+
+
+def test_colname_starswithnumber_strict():
+    table = Table([[3]], names=['a123456789 01234'])
+    out = StringIO()
+    with pytest.raises(IpacFormatErrorDBMS):
+        ascii.write(table, out, Writer=Ipac, DBMS=True)
+
+
+def test_double_colname_strict():
+    table = Table([[3], [1]], names=['DEC', 'dec'])
+    out = StringIO()
+    with pytest.raises(IpacFormatErrorDBMS):
+        ascii.write(table, out, Writer=Ipac, DBMS=True)
+
+
+ at pytest.mark.parametrize('colname', ['x', 'y', 'z', 'X', 'Y', 'Z'])
+def test_reserved_colname_strict(colname):
+    table = Table([['reg']], names=[colname])
+    out = StringIO()
+    with pytest.raises(IpacFormatErrorDBMS):
+        ascii.write(table, out, Writer=Ipac, DBMS=True)
+
+
+def test_too_long_comment(recwarn):
+    table = Table([[3]])
+    table.meta['comments'] = ['a' * 79]
+    out = StringIO()
+    ascii.write(table, out, Writer=Ipac)
+    w = recwarn.pop(UserWarning)
+    assert 'Comment string > 78 characters was automatically wrapped.' == str(w.message)
+    expected_out = """\
+\\ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\\ a
+|col0|
+|long|
+|    |
+|null|
+    3 
+"""
+    assert out.getvalue().splitlines() == expected_out.splitlines()
+
+def test_out_with_nonstring_null():
+    # unmasked tables don't have fill_values
+    table = Table([[3]], masked=True)
+    table['col0'].fill_value = -99999
+    out = StringIO()
+    ascii.write(table, out, Writer=Ipac)
+    expected_out = """\
+|  col0|
+|  long|
+|      |
+|-99999|
+      3 
+"""
+    assert out.getvalue().splitlines() == expected_out.splitlines()
diff --git a/astropy/io/ascii/tests/test_read.py b/astropy/io/ascii/tests/test_read.py
index 64b3fec..490ae1c 100644
--- a/astropy/io/ascii/tests/test_read.py
+++ b/astropy/io/ascii/tests/test_read.py
@@ -3,12 +3,78 @@ import re
 
 import numpy as np
 
+from ....utils import OrderedDict
 from ....tests.helper import pytest
-from ... import ascii as asciitable
+from ... import ascii as asciitable  # TODO: delete this line, use ascii.*
+from ... import ascii
+from ....table import Table
 
-from .common import (raises, numpy_lt_1p5,
-                     assert_equal, assert_almost_equal, assert_true,
-                     setup_function, teardown_function, has_isnan)
+from .common import (raises, assert_equal, assert_almost_equal,
+                     assert_true, setup_function, teardown_function)
+
+
+def test_guess_with_names_arg():
+    """
+    Make sure reading a table with guess=True gives the expected result when
+    the names arg is specified.
+    """
+    # This is a NoHeader format table and so `names` should replace
+    # the default col0, col1 names.  It fails as a Basic format
+    # table when guessing because the column names would be '1', '2'.
+    dat = ascii.read(['1,2', '3,4'], names=('a', 'b'))
+    assert len(dat) == 2
+    assert dat.colnames == ['a', 'b']
+
+    # This is a Basic format table and the first row
+    # gives the column names 'c', 'd', which get replaced by 'a', 'b'
+    dat = ascii.read(['c,d', '3,4'], names=('a', 'b'))
+    assert len(dat) == 1
+    assert dat.colnames == ['a', 'b']
+
+    # This is also a Basic format table and the first row
+    # gives the column names 'c', 'd', which get replaced by 'a', 'b'
+    dat = ascii.read(['c d', 'e f'], names=('a', 'b'))
+    assert len(dat) == 1
+    assert dat.colnames == ['a', 'b']
+
+
+def test_guess_with_format_arg():
+    """
+    When the format or Reader is explicitly given then disable the
+    strict column name checking in guessing.
+    """
+    dat = ascii.read(['1,2', '3,4'], format='basic')
+    assert len(dat) == 1
+    assert dat.colnames == ['1', '2']
+
+    dat = ascii.read(['1,2', '3,4'], names=('a', 'b'), format='basic')
+    assert len(dat) == 1
+    assert dat.colnames == ['a', 'b']
+
+    dat = ascii.read(['1,2', '3,4'], Reader=ascii.Basic)
+    assert len(dat) == 1
+    assert dat.colnames == ['1', '2']
+
+    dat = ascii.read(['1,2', '3,4'], names=('a', 'b'), Reader=ascii.Basic)
+    assert len(dat) == 1
+    assert dat.colnames == ['a', 'b']
+
+    # For good measure check the same in the unified I/O interface
+    dat = Table.read(['1,2', '3,4'], format='ascii.basic')
+    assert len(dat) == 1
+    assert dat.colnames == ['1', '2']
+
+    dat = Table.read(['1,2', '3,4'], format='ascii.basic', names=('a', 'b'))
+    assert len(dat) == 1
+    assert dat.colnames == ['a', 'b']
+
+
+ at raises(ValueError)
+def test_read_with_names_arg():
+    """
+    Test that a bad value of `names` raises an exception.
+    """
+    dat = ascii.read(['c d', 'e f'], names=('a', ), guess=False)
 
 
 def test_read_all_files():
@@ -21,7 +87,28 @@ def test_read_all_files():
             test_opts = testfile['opts'].copy()
             if 'guess' not in test_opts:
                 test_opts['guess'] = guess
-            table = asciitable.read(testfile['name'], **testfile['opts'])
+            table = asciitable.read(testfile['name'], **test_opts)
+            assert_equal(table.dtype.names, testfile['cols'])
+            for colname in table.dtype.names:
+                assert_equal(len(table[colname]), testfile['nrows'])
+
+
+def test_read_all_files_via_table():
+    for testfile in get_testfiles():
+        if testfile.get('skip'):
+            print('\n\n******** SKIPPING %s' % testfile['name'])
+            continue
+        print('\n\n******** READING %s' % testfile['name'])
+        for guess in (True, False):
+            test_opts = testfile['opts'].copy()
+            if 'guess' not in test_opts:
+                test_opts['guess'] = guess
+            if 'Reader' in test_opts:
+                format = 'ascii.{0}'.format(test_opts['Reader']._format_name)
+                del test_opts['Reader']
+            else:
+                format = 'ascii'
+            table = Table.read(testfile['name'], format=format, **test_opts)
             assert_equal(table.dtype.names, testfile['cols'])
             for colname in table.dtype.names:
                 assert_equal(len(table[colname]), testfile['nrows'])
@@ -45,7 +132,6 @@ def test_guess_all_files():
                 assert_equal(len(table[colname]), testfile['nrows'])
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_daophot_indef():
     """Test that INDEF is correctly interpreted as a missing value"""
     table = asciitable.read('t/daophot2.dat', Reader=asciitable.Daophot)
@@ -55,7 +141,6 @@ def test_daophot_indef():
         assert np.all(table[colname].mask == mask_value)
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_daophot_types():
     """
     Test specific data types which are different from what would be
@@ -110,13 +195,13 @@ def test_missing_file():
 
 
 def test_set_names():
-    names = ('c1','c2','c3', 'c4', 'c5', 'c6')
+    names = ('c1', 'c2', 'c3', 'c4', 'c5', 'c6')
     data = asciitable.read('t/simple3.txt', names=names, delimiter='|')
     assert_equal(data.dtype.names, names)
 
 
 def test_set_include_names():
-    names = ('c1','c2','c3', 'c4', 'c5', 'c6')
+    names = ('c1', 'c2', 'c3', 'c4', 'c5', 'c6')
     include_names = ('c1', 'c3')
     data = asciitable.read('t/simple3.txt', names=names, include_names=include_names,
                            delimiter='|')
@@ -153,7 +238,6 @@ def test_custom_process_lines():
     assert_equal(len(data), 3)
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_custom_process_line():
     def process_line(line):
         line_out = re.sub(r'^\|\s*', '', line.strip())
@@ -234,66 +318,59 @@ def test_comment_lines():
     assert_equal(table.comment_lines, ['# first comment', '  # second comment'])
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_fill_values():
     f = 't/fill_values.txt'
     testfile = get_testfiles(f)
-    data = asciitable.read(f, fill_values=('a','1'), **testfile['opts'])
-    assert_true((data['a'].mask==[False,True]).all())
-    assert_true((data['a']==[1,1]).all())
-    assert_true((data['b'].mask==[False,True]).all())
-    assert_true((data['b']==[2,1]).all())
+    data = asciitable.read(f, fill_values=('a', '1'), **testfile['opts'])
+    assert_true((data['a'].mask == [False, True]).all())
+    assert_true((data['a'] == [1, 1]).all())
+    assert_true((data['b'].mask == [False, True]).all())
+    assert_true((data['b'] == [2, 1]).all())
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_fill_values_col():
     f = 't/fill_values.txt'
     testfile = get_testfiles(f)
-    data = asciitable.read(f, fill_values=('a','1', 'b'), **testfile['opts'])
+    data = asciitable.read(f, fill_values=('a', '1', 'b'), **testfile['opts'])
     check_fill_values(data)
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_fill_values_include_names():
     f = 't/fill_values.txt'
     testfile = get_testfiles(f)
-    data = asciitable.read(f, fill_values=('a','1'),
+    data = asciitable.read(f, fill_values=('a', '1'),
                            fill_include_names = ['b'], **testfile['opts'])
     check_fill_values(data)
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_fill_values_exclude_names():
     f = 't/fill_values.txt'
     testfile = get_testfiles(f)
-    data = asciitable.read(f, fill_values=('a','1'),
+    data = asciitable.read(f, fill_values=('a', '1'),
                            fill_exclude_names = ['a'], **testfile['opts'])
     check_fill_values(data)
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def check_fill_values(data):
     """compare array column by column with expectation """
-    assert_true((data['a'].mask==[False,False]).all())
-    assert_true((data['a']==['1','a']).all())
-    assert_true((data['b'].mask==[False,True]).all())
+    assert_true((data['a'].mask == [False, False]).all())
+    assert_true((data['a'] == ['1', 'a']).all())
+    assert_true((data['b'].mask == [False, True]).all())
     # Check that masked value is "do not care" in comparison
-    assert_true((data['b']==[2, -999]).all())
+    assert_true((data['b'] == [2, -999]).all())
     data['b'].mask = False  # explicitly unmask for comparison
-    assert_true((data['b']==[2,1]).all())
+    assert_true((data['b'] == [2, 1]).all())
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_fill_values_list():
     f = 't/fill_values.txt'
     testfile = get_testfiles(f)
-    data = asciitable.read(f, fill_values=[('a','42'),('1','42','a')],
+    data = asciitable.read(f, fill_values=[('a', '42'), ('1', '42', 'a')],
                            **testfile['opts'])
     data['a'].mask = False  # explicitly unmask for comparison
-    assert_true((data['a']==[42,42]).all())
+    assert_true((data['a'] == [42, 42]).all())
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_masking_Cds():
     f = 't/cds.dat'
     testfile = get_testfiles(f)
@@ -303,7 +380,6 @@ def test_masking_Cds():
     assert_true(not data['Fit'].mask[0])
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_null_Ipac():
     f = 't/ipac.dat'
     testfile = get_testfiles(f)
@@ -315,6 +391,21 @@ def test_null_Ipac():
     assert np.all(data.mask == mask)
 
 
+def test_Ipac_meta():
+    keywords = OrderedDict((('intval', 1),
+                            ('floatval', 2.3e3),
+                            ('date', "Wed Sp 20 09:48:36 1995"),
+                            ('key_continue', 'IPAC keywords can continue across lines')))
+    comments = ['This is an example of a valid comment']
+    f = 't/ipac.dat'
+    testfile = get_testfiles(f)
+    data = asciitable.read(f, **testfile['opts'])
+    assert data.meta['keywords'].keys() == keywords.keys()
+    for data_kv, kv in zip(data.meta['keywords'].values(), keywords.values()):
+        assert data_kv['value'] == kv
+    assert data.meta['comments'] == comments
+
+
 def test_set_guess_kwarg():
     """Read a file using guess with one of the typical guess_kwargs explicitly set."""
     data = asciitable.read('t/space_delim_no_header.dat',
@@ -329,7 +420,48 @@ def test_read_rdb_wrong_type():
     table = """col1\tcol2
 N\tN
 1\tHello"""
-    dat = asciitable.read(table, Reader=asciitable.Rdb)
+    asciitable.read(table, Reader=asciitable.Rdb)
+
+
+def test_default_missing():
+    """Read a table with empty values and ensure that corresponding entries are masked"""
+    table = '\n'.join(['a,b,c,d',
+                       '1,3,,',
+                       '2, , 4.0 , ss '])
+    dat = asciitable.read(table)
+    assert dat.masked is True
+    assert dat.pformat() == [' a   b   c   d ',
+                             '--- --- --- ---',
+                             '  1   3  --  --',
+                             '  2  -- 4.0  ss']
+
+    # Single row table with a single missing element
+    table = """ a \n "" """
+    dat = asciitable.read(table)
+    assert dat.pformat() == [' a ',
+                             '---',
+                             ' --']
+    assert dat['a'].dtype.kind == 'i'
+
+    # Same test with a fixed width reader
+    table = '\n'.join([' a   b   c   d ',
+                       '--- --- --- ---',
+                       '  1   3        ',
+                       '  2     4.0  ss'])
+    dat = asciitable.read(table, Reader=asciitable.FixedWidthTwoLine)
+    assert dat.masked is True
+    assert dat.pformat() == [' a   b   c   d ',
+                             '--- --- --- ---',
+                             '  1   3  --  --',
+                             '  2  -- 4.0  ss']
+
+    dat = asciitable.read(table, Reader=asciitable.FixedWidthTwoLine, fill_values=None)
+    assert dat.masked is False
+    assert dat.pformat() == [' a   b   c   d ',
+                             '--- --- --- ---',
+                             '  1   3        ',
+                             '  2     4.0  ss']
+
 
 def get_testfiles(name=None):
     """Set up information about the columns, number of rows, and reader params to
@@ -358,7 +490,6 @@ def get_testfiles(name=None):
                   'Fit'),
          'name': 't/cds.dat',
          'nrows': 1,
-         'skip': numpy_lt_1p5,
          'opts': {'Reader': asciitable.Cds}},
         {'cols': ('a', 'b', 'c'),
          'name': 't/commented_header.dat',
@@ -401,7 +532,6 @@ def get_testfiles(name=None):
         {'cols': ('ra', 'dec', 'sai', 'v2', 'sptype'),
          'name': 't/ipac.dat',
          'nrows': 2,
-         'skip': numpy_lt_1p5,
          'opts': {'Reader': asciitable.Ipac}},
         {'cols': ('col0',
                   'objID',
@@ -423,7 +553,6 @@ def get_testfiles(name=None):
                   'detlim90',
                   'fBlim90'),
          'name': 't/nls1_stackinfo.dbout',
-         'skip': numpy_lt_1p5,
          'nrows': 58,
          'opts': {'data_start': 2, 'delimiter': '|', 'guess': False}},
         {'cols': ('Index',
@@ -439,7 +568,6 @@ def get_testfiles(name=None):
                   'AK',
                   'Fit'),
          'name': 't/no_data_cds.dat',
-         'skip': numpy_lt_1p5,
          'nrows': 0,
          'opts': {'Reader': asciitable.Cds}},
         {'cols': ('ID',
@@ -470,12 +598,10 @@ def get_testfiles(name=None):
         {'cols': ('ra', 'dec', 'sai', 'v2', 'sptype'),
          'name': 't/no_data_ipac.dat',
          'nrows': 0,
-         'skip': numpy_lt_1p5,
          'opts': {'Reader': asciitable.Ipac}},
         {'cols': ('ra', 'v2'),
          'name': 't/ipac.dat',
          'nrows': 2,
-         'skip': numpy_lt_1p5,
          'opts': {'Reader': asciitable.Ipac, 'include_names': ['ra', 'v2']}},
         {'cols': ('a', 'b', 'c'),
          'name': 't/no_data_with_header.dat',
@@ -508,7 +634,7 @@ def get_testfiles(name=None):
         {'cols': ('col1', 'col2', 'col3'),
          'name': 't/space_delim_no_header.dat',
          'nrows': 2,
-         'opts': {}},
+         'opts': {'Reader': asciitable.NoHeader}},
         {'cols': ('obsid', 'offset', 'x', 'y', 'name', 'oaa'),
          'name': 't/space_delim_blank_lines.txt',
          'nrows': 3,
@@ -533,7 +659,7 @@ def get_testfiles(name=None):
          'name': 't/latex2.tex',
          'nrows': 3,
          'opts': {'Reader': asciitable.AASTex}},
-         ]
+    ]
 
     if name is not None:
         return [x for x in testfiles if x['name'] == name][0]
diff --git a/astropy/io/ascii/tests/test_types.py b/astropy/io/ascii/tests/test_types.py
index fb7467a..5bcc98a 100644
--- a/astropy/io/ascii/tests/test_types.py
+++ b/astropy/io/ascii/tests/test_types.py
@@ -1,22 +1,17 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-import re
-import sys
-import glob
-import math
-
-import numpy as np
 
 try:
-    import StringIO as io
+    from cStringIO import StringIO
 except ImportError:
-    import io
+    from io import StringIO
+
+import numpy as np
 
 from ....tests.helper import pytest
 from ... import ascii as asciitable
 
-from .common import (raises, numpy_lt_1p5,
-                     assert_equal, assert_almost_equal, assert_true,
-                     setup_function, teardown_function)
+from .common import assert_equal, setup_function, teardown_function
+
 
 def test_types_from_dat():
     converters = {'a': [asciitable.convert_numpy(np.float)],
@@ -36,13 +31,12 @@ def test_types_from_dat():
 def test_rdb_write_types():
     dat = asciitable.read(['a b c d', '1 1.0 cat 2.1'],
                           Reader=asciitable.Basic)
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(dat, out, Writer=asciitable.Rdb)
     outs = out.getvalue().splitlines()
     assert_equal(outs[1], 'N\tN\tS\tN')
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_ipac_read_types():
     table = r"""\
 |     ra   |    dec   |   sai   |-----v2---|    sptype        |
diff --git a/astropy/io/ascii/tests/test_write.py b/astropy/io/ascii/tests/test_write.py
index 3c74a74..f33b8c2 100644
--- a/astropy/io/ascii/tests/test_write.py
+++ b/astropy/io/ascii/tests/test_write.py
@@ -1,16 +1,13 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-import sys
 
 try:
-    import StringIO as io
+    from cStringIO import StringIO
 except ImportError:
-    import io
+    from io import StringIO
 
 from ... import ascii as asciitable
 
-from .common import (raises,
-                     assert_equal, assert_almost_equal, assert_true,
-                     setup_function, teardown_function)
+from .common import setup_function, teardown_function
 
 test_defs = [
     dict(kwargs=dict(),
@@ -20,6 +17,13 @@ ID XCENTER YCENTER MAG MERR MSKY NITER SHARPNESS CHI PIER PERROR
 18 18.114 280.170 22.329 0.206 30.12784 4 -2.544 1.104 0 No_error
 """
          ),
+    dict(kwargs=dict(delimiter=None),
+         out="""\
+ID XCENTER YCENTER MAG MERR MSKY NITER SHARPNESS CHI PIER PERROR
+14 138.538 256.405 15.461 0.003 34.85955 4 -0.032 0.802 0 No_error
+18 18.114 280.170 22.329 0.206 30.12784 4 -2.544 1.104 0 No_error
+"""
+         ),
     dict(kwargs=dict(formats={'XCENTER': '%12.1f',
                               'YCENTER': '{0:.1f}'},
                      include_names=['XCENTER', 'YCENTER'],
@@ -58,7 +62,7 @@ ID	XCENTER	YCENTER	MAG	MERR	MSKY	NITER	SHARPNESS	CHI	PIER	PERROR
 18 18.114 280.170 22.329 0.206 30.12784 4 -2.544 1.104 0 No_error
 """
          ),
-    dict(kwargs=dict(Writer=asciitable.CommentedHeader, comment = '&'),
+    dict(kwargs=dict(Writer=asciitable.CommentedHeader, comment='&'),
          out="""\
 &ID XCENTER YCENTER MAG MERR MSKY NITER SHARPNESS CHI PIER PERROR
 14 138.538 256.405 15.461 0.003 34.85955 4 -0.032 0.802 0 No_error
@@ -87,11 +91,10 @@ ID & XCENTER & YCENTER & MAG & MERR & MSKY & NITER & SHARPNESS & CHI & PIER & PE
 \\end{deluxetable}
 """
          ),
-    dict(kwargs=dict(Writer=asciitable.AASTex, caption='Mag values \\label{tab1}',
-                     latexdict={'units': {'MAG': '[mag]',
-                                          'XCENTER': '[pixel]'},
-                                'tabletype': 'deluxetable*'}),
-         out="""\
+    dict(
+        kwargs=dict(Writer=asciitable.AASTex, caption='Mag values \\label{tab1}', latexdict={
+                    'units': {'MAG': '[mag]', 'XCENTER': '[pixel]'}, 'tabletype': 'deluxetable*'}),
+        out="""\
 \\begin{deluxetable*}{ccccccccccc}
 \\tablecaption{Mag values \\label{tab1}}
 \\tablehead{\\colhead{ID} & \\colhead{XCENTER} & \\colhead{YCENTER} & \\colhead{MAG} & \\colhead{MERR} & \\colhead{MSKY} & \\colhead{NITER} & \\colhead{SHARPNESS} & \\colhead{CHI} & \\colhead{PIER} & \\colhead{PERROR}\\\\ \\colhead{ } & \\colhead{[pixel]} & \\colhead{ } & \\colhead{[mag]} & \\colhead{ } & \\colhead{ } & \\colhead{ } & \\colhead{ } & \\colhead{ } & \\colhead{ } & \\colhead{ }}
@@ -101,13 +104,11 @@ ID & XCENTER & YCENTER & MAG & MERR & MSKY & NITER & SHARPNESS & CHI & PIER & PE
 \\enddata
 \\end{deluxetable*}
 """
-         ),
-    dict(kwargs=dict(Writer=asciitable.Latex, caption='Mag values \\label{tab1}',
-                     latexdict={'preamble': '\\begin{center}', 'tablefoot':'\\end{center}',
-                                'data_end': ['\\hline','\\hline'],
-                                'units': {'MAG': '[mag]', 'XCENTER': '[pixel]'},
-                                'tabletype': 'table*'}, col_align='|lcccccccccc|'),
-         out="""\
+    ),
+    dict(
+        kwargs=dict(Writer=asciitable.Latex, caption='Mag values \\label{tab1}', latexdict={'preamble': '\\begin{center}', 'tablefoot': '\\end{center}', 'data_end': [
+                    '\\hline', '\\hline'], 'units':{'MAG': '[mag]', 'XCENTER': '[pixel]'}, 'tabletype': 'table*'}, col_align='|lcccccccccc|'),
+        out="""\
 \\begin{table*}
 \\begin{center}
 \\caption{Mag values \\label{tab1}}
@@ -122,8 +123,8 @@ ID & XCENTER & YCENTER & MAG & MERR & MSKY & NITER & SHARPNESS & CHI & PIER & PE
 \\end{center}
 \\end{table*}
 """
-         ),
-    dict(kwargs=dict(Writer=asciitable.Latex, latexdict = asciitable.latexdicts['template']),
+    ),
+    dict(kwargs=dict(Writer=asciitable.Latex, latexdict=asciitable.latexdicts['template']),
          out="""\
 \\begin{tabletype}
 preamble
@@ -142,21 +143,145 @@ tablefoot
 \\end{tabletype}
 """
          ),
+    dict(kwargs=dict(Writer=asciitable.Ipac),
+         out="""\
+\\MERGERAD='INDEF'
+\\IRAF='NOAO/IRAFV2.10EXPORT'
+\\USER=''
+\\HOST='tucana'
+\\DATE='05-28-93'
+\\TIME='14:46:13'
+\\PACKAGE='daophot'
+\\TASK='nstar'
+\\IMAGE='test'
+\\GRPFILE='test.psg.1'
+\\PSFIMAGE='test.psf.1'
+\\NSTARFILE='test.nst.1'
+\\REJFILE='"hello world"'
+\\SCALE='1.'
+\\DATAMIN='50.'
+\\DATAMAX='24500.'
+\\GAIN='1.'
+\\READNOISE='0.'
+\\OTIME='00:07:59.0'
+\\XAIRMASS='1.238106'
+\\IFILTER='V'
+\\RECENTER='yes'
+\\FITSKY='no'
+\\PSFMAG='16.594'
+\\PSFRAD='5.'
+\\FITRAD='3.'
+\\MAXITER='50'
+\\MAXGROUP='60'
+\\FLATERROR='0.75'
+\\PROFERROR='5.'
+\\CLIPEXP='6'
+\\CLIPRANGE='2.5'
+|       ID|   XCENTER|   YCENTER|         MAG|          MERR|           MSKY| NITER|              SHARPNESS|         CHI|  PIER|       PERROR|
+|     long|    double|    double|      double|        double|         double|  long|                 double|      double|  long|         char|
+|         |    pixels|    pixels|  magnitudes|    magnitudes|         counts|      |                       |            |      |      perrors|
+|     null|      null|      null|        null|          null|           null|  null|                   null|        null|  null|         null|
+ 14        138.538    256.405    15.461       0.003          34.85955        4      -0.032                  0.802        0      No_error      
+ 18        18.114     280.170    22.329       0.206          30.12784        4      -2.544                  1.104        0      No_error      
+"""
+         ),
+]
+
+tab_to_fill = ['a b c', '1 2 3', '1 1 3']
 
+test_defs_fill_value = [
+    dict(kwargs=dict(),
+         out="""\
+a b c
+1 2 3
+1 1 3
+"""
+         ),
+    dict(kwargs=dict(fill_values=('1', 'w')),
+         out="""\
+a b c
+w 2 3
+w w 3
+"""
+         ),
+    dict(kwargs=dict(fill_values=('1', 'w', 'b')),
+         out="""\
+a b c
+1 2 3
+1 w 3
+"""
+         ),
+    dict(kwargs=dict(fill_values = ('1', 'w'),
+                     fill_include_names = ['b']),
+         out="""\
+a b c
+1 2 3
+1 w 3
+"""
+         ),
+    dict(kwargs=dict(fill_values = ('1', 'w'),
+                     fill_exclude_names = ['a']),
+         out="""\
+a b c
+1 2 3
+1 w 3
+"""
+         ),
+    dict(kwargs=dict(fill_values = ('1', 'w'),
+                     fill_include_names = ['a'],
+                     fill_exclude_names = ['a', 'b']),
+         out="""\
+a b c
+1 2 3
+1 1 3
+"""
+         ),
+    dict(kwargs=dict(fill_values = [('1', 'w')],
+                     formats={'a': '%4.2f'}),
+         out="""\
+a b c
+1.00 2 3
+1.00 w 3
+"""
+         ),
 ]
 
 
 def check_write_table(test_def, table):
-    out = io.StringIO()
+    out = StringIO()
     asciitable.write(table, out, **test_def['kwargs'])
     print('Expected:\n%s' % test_def['out'])
     print('Actual:\n%s' % out.getvalue())
     assert out.getvalue().splitlines() == test_def['out'].splitlines()
 
 
+def check_write_table_via_table(test_def, table):
+    out = StringIO()
+
+    test_def = test_def.copy()
+    if 'Writer' in test_def['kwargs']:
+        format = 'ascii.{0}'.format(test_def['kwargs']['Writer']._format_name)
+        del test_def['kwargs']['Writer']
+    else:
+        format = 'ascii'
+
+    table.write(out, format=format, **test_def['kwargs'])
+    print('Expected:\n%s' % test_def['out'])
+    print('Actual:\n%s' % out.getvalue())
+    assert out.getvalue().splitlines() == test_def['out'].splitlines()
+
+
 def test_write_table():
     table = asciitable.get_reader(Reader=asciitable.Daophot)
     data = table.read('t/daophot.dat')
 
     for test_def in test_defs:
         check_write_table(test_def, data)
+        check_write_table_via_table(test_def, data)
+
+
+def test_write_fill_values():
+    data = asciitable.read(tab_to_fill)
+
+    for test_def in test_defs_fill_value:
+        check_write_table(test_def, data)
diff --git a/astropy/io/ascii/ui.py b/astropy/io/ascii/ui.py
index 3ee403e..edc3329 100644
--- a/astropy/io/ascii/ui.py
+++ b/astropy/io/ascii/ui.py
@@ -10,7 +10,7 @@ ui.py:
 
 ## Copyright (c) 2010, Smithsonian Astrophysical Observatory
 ## All rights reserved.
-## 
+##
 ## Redistribution and use in source and binary forms, with or without
 ## modification, are permitted provided that the following conditions are met:
 ##     * Redistributions of source code must retain the above copyright
@@ -21,7 +21,7 @@ ui.py:
 ##     * Neither the name of the Smithsonian Astrophysical Observatory nor the
 ##       names of its contributors may be used to endorse or promote products
 ##       derived from this software without specific prior written permission.
-## 
+##
 ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 ## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 ## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -30,7 +30,7 @@ ui.py:
 ## (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 ## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 ## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import re
@@ -43,13 +43,14 @@ from . import cds
 from . import daophot
 from . import sextractor
 from . import ipac
-from .core import next, izip
 from . import latex
 
 from ...table import Table
 
 # Default setting for guess parameter in read()
 _GUESS = True
+
+
 def set_guess(guess):
     """Set the default value of the ``guess`` parameter for read()
 
@@ -58,12 +59,13 @@ def set_guess(guess):
     global _GUESS
     _GUESS = guess
 
+
 def get_reader(Reader=None, Inputter=None, Outputter=None, **kwargs):
     """Initialize a table reader allowing for common customizations.  Most of the
     default behavior for various parameters is determined by the Reader class.
 
-    :param Reader: Reader class (default= :class:`Basic`)
-    :param Inputter: Inputter class 
+    :param Reader: Reader class (DEPRECATED) (default= :class:`Basic`)
+    :param Inputter: Inputter class
     :param Outputter: Outputter class
     :param delimiter: column delimiter string
     :param comment: regular expression defining a comment line in table
@@ -88,6 +90,20 @@ def get_reader(Reader=None, Inputter=None, Outputter=None, **kwargs):
     reader = core._get_reader(Reader, Inputter=Inputter, Outputter=Outputter, **kwargs)
     return reader
 
+
+def _get_format_class(format, ReaderWriter, label):
+    if format is not None and ReaderWriter is not None:
+        raise ValueError('Cannot supply both format and {0} keywords'.format(label))
+
+    if format is not None:
+        if format in core.FORMAT_CLASSES:
+            ReaderWriter = core.FORMAT_CLASSES[format]
+        else:
+            raise ValueError('ASCII format {0!r} not in allowed list {1}'
+                             .format(format, sorted(core.FORMAT_CLASSES)))
+    return ReaderWriter
+
+
 def read(table, guess=None, **kwargs):
     """Read the input ``table`` and return the table.  Most of
     the default behavior for various parameters is determined by the Reader
@@ -95,9 +111,9 @@ def read(table, guess=None, **kwargs):
 
     :param table: input table (file name, list of strings, or single newline-separated string)
     :param guess: try to guess the table format (default=True)
-    :param Reader: Reader class (default=``ascii.Basic``)
+    :param format: input table format
     :param Inputter: Inputter class
-    :param Outputter: Outputter class
+    :param Outputter: Outputter class (default=TableOutputter)
     :param delimiter: column delimiter string
     :param comment: regular expression defining a comment line in table
     :param quotechar: one-character string to quote fields containing special characters
@@ -110,18 +126,28 @@ def read(table, guess=None, **kwargs):
     :param names: list of names corresponding to each data column
     :param include_names: list of names to include in output (default=None selects all names)
     :param exclude_names: list of names to exlude from output (applied after ``include_names``)
-    :param fill_values: specification of fill values for bad or missing table values
+    :param fill_values: specification of fill values for bad or missing table values (default=('', '0'))
     :param fill_include_names: list of names to include in fill_values (default=None selects all names)
     :param fill_exclude_names: list of names to exlude from fill_values (applied after ``fill_include_names``)
-
+    :param Reader: Reader class (DEPRECATED) (default=``ascii.Basic``)
     """
 
-    # Provide a simple way to choose between the two common outputters.  If an
-    # Outputter is supplied in kwargs that will take precedence.
+    if 'fill_values' not in kwargs:
+        kwargs['fill_values'] = [('', '0')]
+
+    # If an Outputter is supplied in kwargs that will take precedence.
     new_kwargs = {}
     new_kwargs['Outputter'] = core.TableOutputter
     new_kwargs.update(kwargs)
 
+    # Get the Reader class based on possible format and Reader kwarg inputs.
+    Reader = _get_format_class(kwargs.get('format'), kwargs.get('Reader'), 'Reader')
+    if Reader is not None:
+        new_kwargs['Reader'] = Reader
+    # Remove format keyword if there, this is only allowed in read() not get_reader()
+    if 'format' in new_kwargs:
+        del new_kwargs['format']
+
     if guess is None:
         guess = _GUESS
     if guess:
@@ -129,16 +155,8 @@ def read(table, guess=None, **kwargs):
     else:
         reader = get_reader(**new_kwargs)
         dat = reader.read(table)
-    return dat
-
 
-def _is_number(x):
-    try:
-        x = float(x)
-        return True
-    except ValueError:
-        pass
-    return False
+    return dat
 
 
 def _guess(table, read_kwargs):
@@ -165,22 +183,23 @@ def _guess(table, read_kwargs):
 
         if not guess_kwargs_ok:
             # User-supplied kwarg is inconsistent with the guess-supplied kwarg, e.g.
-            # user supplies delimiter="|" but the guess wants to try delimiter=" ", 
+            # user supplies delimiter="|" but the guess wants to try delimiter=" ",
             # so skip the guess entirely.
             continue
 
         try:
+            # If guessing will try all Readers then use strict req'ts on column names
+            if 'Reader' not in read_kwargs:
+                guess_kwargs['strict_names'] = True
+
             reader = get_reader(**guess_kwargs)
             dat = reader.read(table)
-            # When guessing impose additional requirements on column names and number of cols
-            bads = [" ", ",", "|", "\t", "'", '"']
-            if (len(reader.cols) <= 1 or
-                any(_is_number(col.name) or 
-                     len(col.name) == 0 or 
-                     col.name[0] in bads or 
-                     col.name[-1] in bads for col in reader.cols)):
+
+            # When guessing require at least two columns
+            if len(dat.colnames) <= 1:
                 raise ValueError
             return dat
+
         except (core.InconsistentTableError, ValueError, TypeError):
             failed_kwargs.append(guess_kwargs)
             pass
@@ -193,16 +212,19 @@ def _guess(table, read_kwargs):
             failed_kwargs.append(read_kwargs)
             lines = ['\nERROR: Unable to guess table for with the guesses listed below:']
             for kwargs in failed_kwargs:
-                sorted_keys = sorted([x for x in sorted(kwargs) if x not in ('Reader', 'Outputter')])
+                sorted_keys = sorted([x for x in sorted(kwargs)
+                                      if x not in ('Reader', 'Outputter')])
                 reader_repr = repr(kwargs.get('Reader', basic.Basic))
                 keys_vals = ['Reader:' + re.search(r"\.(\w+)'>", reader_repr).group(1)]
                 kwargs_sorted = ((key, kwargs[key]) for key in sorted_keys)
                 keys_vals.extend(['%s: %s' % (key, repr(val)) for key, val in kwargs_sorted])
                 lines.append(' '.join(keys_vals))
             lines.append('ERROR: Unable to guess table for with the guesses listed above.')
-            lines.append('Check the table and try with guess=False and appropriate arguments to read()')
+            lines.append('Check the table and try with guess=False '
+                         'and appropriate arguments to read()')
             raise core.InconsistentTableError('\n'.join(lines))
-    
+
+
 def _get_guess_kwargs_list():
     guess_kwargs_list = [dict(Reader=basic.Rdb),
                          dict(Reader=basic.Tab),
@@ -223,11 +245,12 @@ def _get_guess_kwargs_list():
 extra_writer_pars = ('delimiter', 'comment', 'quotechar', 'formats',
                      'names', 'include_names', 'exclude_names', 'strip_whitespace')
 
+
 def get_writer(Writer=None, **kwargs):
     """Initialize a table writer allowing for common customizations.  Most of the
     default behavior for various parameters is determined by the Writer class.
 
-    :param Writer: Writer class (default=``ascii.Basic``)
+    :param Writer: Writer class (DEPRECATED) (default=``ascii.Basic``)
     :param delimiter: column delimiter string
     :param write_comment: string defining a comment line in table
     :param quotechar: one-character string to quote fields containing special characters
@@ -244,13 +267,14 @@ def get_writer(Writer=None, **kwargs):
     writer = core._get_writer(Writer, **kwargs)
     return writer
 
-def write(table, output=sys.stdout,  Writer=None, **kwargs):
+
+def write(table, output=None,  format=None, Writer=None, **kwargs):
     """Write the input ``table`` to ``filename``.  Most of the default behavior
     for various parameters is determined by the Writer class.
 
     :param table: input table (Reader object, NumPy struct array, list of lists, etc)
     :param output: output [filename, file-like object] (default = sys.stdout)
-    :param Writer: Writer class (default=``ascii.Basic``)
+    :param format: output format (default=``basic``)
     :param delimiter: column delimiter string
     :param write_comment: string defining a comment line in table
     :param quotechar: one-character string to quote fields containing special characters
@@ -259,25 +283,18 @@ def write(table, output=sys.stdout,  Writer=None, **kwargs):
     :param names: list of names corresponding to each data column
     :param include_names: list of names to include in output (default=None selects all names)
     :param exclude_names: list of names to exlude from output (applied after ``include_names``)
+    :param Writer: Writer class (DEPRECATED) (default=``ascii.Basic``)
     """
+    if output is None:
+        output = sys.stdout
 
     table = Table(table, names=kwargs.get('names'))
 
-    names = set(table.colnames)
-    if 'include_names' in kwargs:
-        names.intersection_update(kwargs['include_names'])
-    if 'exclude_names' in kwargs:
-        names.difference_update(kwargs['exclude_names'])
-    if names != set(table.colnames):
-        remove_names = set(table.colnames) - set(names)
-        table.remove_columns(remove_names)
-
-    table.cols = table.columns.values()
-
+    Writer = _get_format_class(format, Writer, 'Writer')
     writer = get_writer(Writer=Writer, **kwargs)
     lines = writer.write(table)
 
-    # Write the lines to output 
+    # Write the lines to output
     outstr = os.linesep.join(lines)
     if not hasattr(output, 'write'):
         output = open(output, 'w')
@@ -287,4 +304,3 @@ def write(table, output=sys.stdout,  Writer=None, **kwargs):
     else:
         output.write(outstr)
         output.write(os.linesep)
-
diff --git a/astropy/io/fits/card.py b/astropy/io/fits/card.py
index 45c8df5..3521de0 100644
--- a/astropy/io/fits/card.py
+++ b/astropy/io/fits/card.py
@@ -2,8 +2,6 @@
 
 import copy
 import re
-import string
-import sys
 import warnings
 
 import numpy as np
@@ -12,12 +10,13 @@ from .util import _str_to_num, _is_int, maketrans, translate, _words_group
 from .verify import _Verify, _ErrList, VerifyError, VerifyWarning
 
 from . import ENABLE_RECORD_VALUED_KEYWORD_CARDS, STRIP_HEADER_WHITESPACE
+
 from ...utils import deprecated
+from ...utils.exceptions import AstropyUserWarning, AstropyDeprecationWarning
 
 
 __all__ = ['Card', 'CardList', 'create_card', 'create_card_from_string',
-           'upper_key', 'createCard', 'createCardFromString', 'upperKey',
-           'Undefined']
+           'upper_key', 'Undefined']
 
 
 FIX_FP_TABLE = maketrans('de', 'DE')
@@ -69,7 +68,7 @@ class CardList(list):
                 'functionality has been subsumed by the Header class, so '
                 'CardList objects should not be directly created.  See the '
                 'PyFITS 3.1.0 CHANGELOG for more details.',
-                DeprecationWarning)
+                AstropyDeprecationWarning)
 
         # This is necessary for now to prevent a circular import
         from .header import Header
@@ -288,11 +287,6 @@ class CardList(list):
 
         return CardList(self._header[key])
 
-    # For API backwards-compatibility
-    @deprecated('3.0', alternative=':meth:`filter_list`', pending=False)
-    def filterList(self, key):
-        return self.filter_list(key)
-
     @deprecated('3.1', pending=False)
     def count_blanks(self):
         """
@@ -784,9 +778,11 @@ class Card(_Verify):
         Examples
         --------
 
-        >>> self._check_if_rvkc('DP1', 'AXIS.1: 2')
-        >>> self._check_if_rvkc('DP1.AXIS.1', 2)
-        >>> self._check_if_rvkc('DP1     = AXIS.1: 2')
+        ::
+
+            self._check_if_rvkc('DP1', 'AXIS.1: 2')
+            self._check_if_rvkc('DP1.AXIS.1', 2)
+            self._check_if_rvkc('DP1     = AXIS.1: 2')
         """
 
         if not ENABLE_RECORD_VALUED_KEYWORD_CARDS():
@@ -866,7 +862,7 @@ class Card(_Verify):
         else:
             warnings.warn('The following header keyword is invalid or follows '
                           'an unrecognized non-standard convention:\n%s' %
-                          self._image)
+                          self._image, AstropyUserWarning)
             self._invalid = True
             return keyword
 
@@ -1287,34 +1283,27 @@ def create_card(key='', value='', comment=''):
     return Card(key, value, comment)
 create_card.__doc__ = Card.__init__.__doc__
 # For API backwards-compatibility
-createCard = deprecated('3.0', name='createCard',
-                        alternative=':meth:`Card.__init__`')(create_card)
 create_card = deprecated('3.1', name='create_card',
                          alternative=':meth:`Card.__init__`',
-                         pending=True)(create_card)
+                         pending=False)(create_card)
 
 
 def create_card_from_string(input):
     return Card.fromstring(input)
 create_card_from_string.__doc__ = Card.fromstring.__doc__
 # For API backwards-compat
-createCardFromString = \
-    deprecated('3.0', name='createCardFromString',
-               alternative=':meth:`Card.fromstring`')(create_card_from_string)
 create_card_from_string = deprecated('3.1', name='create_card_from_string',
                                      alternative=':meth:`Card.fromstring`',
-                                     pending=True)(create_card_from_string)
+                                     pending=False)(create_card_from_string)
 
 
 def upper_key(key):
     return Card.normalize_keyword(key)
 upper_key.__doc__ = Card.normalize_keyword.__doc__
 # For API backwards-compat
-upperKey = deprecated('3.0', name='upperKey',
-                      alternative=':meth:`Card.normalize_keyword`')(upper_key)
 upper_key = deprecated('3.1', name='upper_key',
                        alternative=':meth:`Card.normalize_keyword`',
-                       pending=True)(upper_key)
+                       pending=False)(upper_key)
 
 
 def _int_or_float(s):
diff --git a/astropy/io/fits/column.py b/astropy/io/fits/column.py
index b3d110b..3e08b1f 100644
--- a/astropy/io/fits/column.py
+++ b/astropy/io/fits/column.py
@@ -1,8 +1,10 @@
 # Licensed under a 3-clause BSD style license - see PYFITS.rst
 
+import copy
 import operator
 import re
 import sys
+import warnings
 import weakref
 
 import numpy as np
@@ -12,7 +14,7 @@ from .card import Card
 from .util import pairwise, _is_int, _convert_array, encode_ascii
 from .verify import VerifyError
 
-from ...utils import lazyproperty, deprecated
+from ...utils import lazyproperty
 
 
 __all__ = ['Column', 'ColDefs', 'Delayed']
@@ -37,11 +39,37 @@ NUMPY2FITS = dict([(val, key) for key, val in FITS2NUMPY.items()])
 # Normally booleans are represented as ints in pyfits, but if passed in a numpy
 # boolean array, that should be supported
 NUMPY2FITS['b1'] = 'L'
+# Add unsigned types, which will be stored as signed ints with a TZERO card.
+NUMPY2FITS['u2'] = 'I'
+NUMPY2FITS['u4'] = 'J'
+NUMPY2FITS['u8'] = 'K'
 
 # This is the order in which values are converted to FITS types
 # Note that only double precision floating point/complex are supported
 FORMATORDER = ['L', 'B', 'I', 'J', 'K', 'D', 'M', 'A']
 
+# mapping from ASCII table TFORM data type to numpy data type
+# A: Character
+# I: Integer (32-bit)
+# J: Integer (64-bit; non-standard)
+# F: Float (32-bit; fixed decimal notation)
+# E: Float (32-bit; exponential notation)
+# D: Float (64-bit; exponential notation, always 64-bit by convention)
+ASCII2NUMPY = {'A': 'a', 'I': 'i4', 'J': 'i8', 'F': 'f4', 'E': 'f4',
+               'D': 'f8'}
+
+# Maps FITS ASCII column format codes to the appropriate Python string
+# formatting codes for that type.
+ASCII2STR = {'A': 's', 'I': 'd', 'J': 'd', 'F': 'f', 'E': 'E', 'D': 'E'}
+
+# For each ASCII table format code, provides a default width (and decimal
+# precision) for when one isn't given explicity in the column format
+ASCII_DEFAULT_WIDTHS= {'A': (1, 0), 'I': (10, 0), 'J': (15, 0),
+                       'E': (15, 7), 'F': (16, 7), 'D': (25, 17)}
+
+
+
+
 # lists of column/field definition common names and keyword names, make
 # sure to preserve the one-to-one correspondence when updating the list(s).
 # Use lists, instead of dictionaries so the names can be displayed in a
@@ -51,9 +79,17 @@ KEYWORD_NAMES = ['TTYPE', 'TFORM', 'TUNIT', 'TNULL', 'TSCAL', 'TZERO',
 KEYWORD_ATTRIBUTES = ['name', 'format', 'unit', 'null', 'bscale', 'bzero',
                       'disp', 'start', 'dim']
 
-# TFORM regular expression
-TFORMAT_RE = re.compile(r'(?P<repeat>^[0-9]*)(?P<dtype>[A-Za-z])'
-                        r'(?P<option>[!-~]*)')
+# TFORMn regular expression
+TFORMAT_RE = re.compile(r'(?P<repeat>^[0-9]*)(?P<format>[LXBIJKAEDCMPQ])'
+                        r'(?P<option>[!-~]*)', re.I)
+
+# TFORMn for ASCII tables; two different versions depending on whether
+# the format is floating-point or not; allows empty values for width
+# in which case defaults are used
+TFORMAT_ASCII_RE = re.compile(r'(?:(?P<format>[AIJ])(?P<width>[0-9]+)?)|'
+                              r'(?:(?P<formatf>[FED])'
+                              r'(?:(?P<widthf>[0-9]+)\.'
+                              r'(?P<precision>[0-9]+))?)')
 
 # table definition keyword regular expression
 TDEF_RE = re.compile(r'(?P<label>^T[A-Z]*)(?P<num>[1-9][0-9 ]*$)')
@@ -64,6 +100,10 @@ TDIM_RE = re.compile(r'\(\s*(?P<dims>(?:\d+,\s*)+\s*\d+)\s*\)\s*')
 ASCIITNULL = 0          # value for ASCII table cell with value = TNULL
                         # this can be reset by user.
 
+# The default placeholder to use for NULL values in ASCII tables when
+# converting from binary to ASCII tables
+DEFAULT_ASCII_TNULL = '---'
+
 
 class Delayed(object):
     """Delayed file-reading data."""
@@ -80,42 +120,69 @@ class Delayed(object):
         return self.hdu.data[key][self.field]
 
 
-class _ColumnFormat(str):
+class _BaseColumnFormat(str):
     """
-    Represents a FITS column format.
-
-    This is an enhancement over using a normal string for the format, since the
-    repeat count, format code, and option are available as separate attributes,
-    and smart comparison is used.  For example 1J == J.
+    Base class for binary table column formats (just called _ColumnFormat)
+    and ASCII table column formats (_AsciiColumnFormat).
     """
 
-    def __new__(cls, format):
-        self = super(_ColumnFormat, cls).__new__(cls, format)
-        self.repeat, self.format, self.option = _parse_tformat(format)
-        self.format = self.format.upper()
-        return self
-
     def __eq__(self, other):
         if not other:
             return False
 
         if isinstance(other, str):
-            if not isinstance(other, _ColumnFormat):
+            if not isinstance(other, self.__class__):
                 try:
-                    other = _ColumnFormat(other)
+                    other = self.__class__(other)
                 except ValueError:
                     return False
         else:
             return False
 
-        a = (self.repeat, self.format, self.option)
-        b = (other.repeat, other.format, other.option)
-        return a == b
+        return self.canonical == other.canonical
 
     def __hash__(self):
         return hash(self.canonical)
 
     @classmethod
+    def from_column_format(cls, format):
+        """Creates a column format object from another column format object
+        regardless of their type.
+
+        That is, this can convert a _ColumnFormat to an _AsciiColumnFormat
+        or vice versa at least in cases where a direct translation is possible.
+        """
+
+        return cls.from_recformat(format.recformat)
+
+
+class _ColumnFormat(_BaseColumnFormat):
+    """
+    Represents a FITS binary table column format.
+
+    This is an enhancement over using a normal string for the format, since the
+    repeat count, format code, and option are available as separate attributes,
+    and smart comparison is used.  For example 1J == J.
+    """
+
+    def __new__(cls, format):
+        self = super(_ColumnFormat, cls).__new__(cls, format)
+        self.repeat, self.format, self.option = _parse_tformat(format)
+        self.format = self.format.upper()
+        if self.format in ('P', 'Q'):
+            # TODO: There should be a generic factory that returns either
+            # _FormatP or _FormatQ as appropriate for a given TFORMn
+            if self.format == 'P':
+                recformat = _FormatP.from_tform(format)
+            else:
+                recformat = _FormatQ.from_tform(format)
+            # Format of variable length arrays
+            self.p_format = recformat.format
+        else:
+            self.p_format = None
+        return self
+
+    @classmethod
     def from_recformat(cls, recformat):
         """Creates a column format from a Numpy record dtype format."""
 
@@ -145,10 +212,86 @@ class _ColumnFormat(str):
         return '%s%s%s' % (repeat, self.format, self.option)
 
 
+class _AsciiColumnFormat(_BaseColumnFormat):
+    """Similar to _ColumnFormat but specifically for columns in ASCII tables.
+
+    The formats of ASCII table columns and binary table columns are inherently
+    incompatible in FITS.  They don't support the same ranges and types of
+    values, and even reuse format codes in subtly different ways.  For example
+    the format code 'Iw' in ASCII columns refers to any integer whose string
+    representation is at most w characters wide, so 'I' can represent
+    effectively any integer that will fit in a FITS columns.  Whereas for
+    binary tables 'I' very explicitly refers to a 16-bit signed integer.
+
+    Conversions between the two column formats can be performed using the
+    ``to/from_binary`` methods on this class, or the ``to/from_ascii``
+    methods on the `_ColumnFormat` class.  But again, not all conversions are
+    possible and may result in a `ValueError`.
+    """
+
+    def __new__(cls, format, strict=False):
+        self = super(_AsciiColumnFormat, cls).__new__(cls, format)
+        self.format, self.width, self.precision = \
+            _parse_ascii_tformat(format, strict)
+
+        # This is to support handling logical (boolean) data from binary tables
+        # in an ASCII table
+        self._pseudo_logical = False
+        return self
+
+    def __hash__(self):
+        return hash(self.canonical)
+
+    @classmethod
+    def from_column_format(cls, format):
+        inst = cls.from_recformat(format.recformat)
+        # Hack
+        if format.format == 'L':
+            inst._pseudo_logical = True
+        return inst
+
+    @classmethod
+    def from_recformat(cls, recformat):
+        """Creates a column format from a Numpy record dtype format."""
+
+        return cls(_convert_ascii_format(recformat, reverse=True))
+
+    @lazyproperty
+    def recformat(self):
+        """Returns the equivalent Numpy record format string."""
+
+        return _convert_ascii_format(self)
+
+    @lazyproperty
+    def canonical(self):
+        """
+        Returns a 'canonical' string representation of this format.
+
+        This is in the proper form of Tw.d where T is the single character data
+        type code, w is the width in characters for this field, and d is the
+        number of digits after the decimal place (for format codes 'E', 'F',
+        and 'D' only).
+        """
+
+        if self.format in ('E', 'F', 'D'):
+            return '%s%s.%s' % (self.format, self.width, self.precision)
+
+        return '%s%s' % (self.format, self.width)
+
+
 class _FormatX(str):
     """For X format in binary tables."""
 
-    pass
+    def __new__(cls, repeat=1):
+        nbytes = ((repeat - 1) // 8) + 1
+        # use an array, even if it is only ONE u1 (i.e. use tuple always)
+        obj = super(_FormatX, cls).__new__(cls, repr((nbytes,)) + 'u1')
+        obj.repeat = repeat
+        return obj
+
+    @property
+    def tform(self):
+        return '%sX' % self.repeat
 
 
 # TODO: Table column formats need to be verified upon first reading the file;
@@ -157,11 +300,17 @@ class _FormatX(str):
 class _FormatP(str):
     """For P format in variable length table."""
 
-    _formatp_re = re.compile(r'(?P<repeat>\d+)?P(?P<dtype>[A-Z])'
-                              '(?:\((?P<max>\d*)\))?')
+    # As far as I can tell from my reading of the FITS standard, a type code is
+    # *required* for P and Q formats; there is no default
+    _format_re_template = (r'(?P<repeat>\d+)?%s(?P<dtype>[LXBIJKAEDCM])'
+                            '(?:\((?P<max>\d*)\))?')
+    _format_code = 'P'
+    _format_re = re.compile(_format_re_template % _format_code)
+    _descriptor_format = '2i4'
 
     def __new__(cls, dtype, repeat=None, max=None):
-        obj = super(_FormatP, cls).__new__(cls, '2i4')
+        obj = super(_FormatP, cls).__new__(cls, cls._descriptor_format)
+        obj.format = NUMPY2FITS[dtype]
         obj.dtype = dtype
         obj.repeat = repeat
         obj.max = max
@@ -169,7 +318,7 @@ class _FormatP(str):
 
     @classmethod
     def from_tform(cls, format):
-        m = cls._formatp_re.match(format)
+        m = cls._format_re.match(format)
         if not m or m.group('dtype') not in FITS2NUMPY:
             raise VerifyError('Invalid column format: %s' % format)
         repeat = m.group('repeat')
@@ -183,7 +332,19 @@ class _FormatP(str):
     def tform(self):
         repeat = '' if self.repeat is None else self.repeat
         max = '' if self.max is None else self.max
-        return '%sP%s(%s)' % (repeat, NUMPY2FITS[self.dtype], max)
+        return '%s%s%s(%s)' % (repeat, self._format_code, self.format, max)
+
+
+class _FormatQ(_FormatP):
+    """Carries type description of the Q format for variable length arrays.
+
+    The Q format is like the P format but uses 64-bit integers in the array
+    descriptors, allowing for heaps stored beyond 2GB into a file.
+    """
+
+    _format_code = 'Q'
+    _format_re = re.compile(_FormatP._format_re_template % _format_code)
+    _descriptor_format = '2l4'
 
 
 class Column(object):
@@ -194,8 +355,8 @@ class Column(object):
     """
 
     def __init__(self, name=None, format=None, unit=None, null=None,
-                       bscale=None, bzero=None, disp=None, start=None,
-                       dim=None, array=None):
+                 bscale=None, bzero=None, disp=None, start=None, dim=None,
+                 array=None, ascii=None):
         """
         Construct a `Column` by specifying attributes.  All attributes
         except `format` can be optional.
@@ -229,6 +390,20 @@ class Column(object):
 
         dim : str, optional
             column dimension corresponding to ``TDIM`` keyword
+
+        array : iterable, optional
+            a `list`, `numpy.ndarray` (or other iterable that can be used to
+            initialize an ndarray) providing intial data for this column.
+            The array will be automatically converted, if possible, to the data
+            format of the column.  In the case were non-trivial ``bscale``
+            and/or ``bzero`` arguments are given, the values in the array must
+            be the *physical* values--that is, the values of column as if the
+            scaling has already been applied (the array stored on the column
+            object will then be converted back to its storage values).
+
+        ascii : bool, optional
+            set `True` if this describes a column for an ASCII table; this
+            may be required to disambiguate the column format
         """
 
         if format is None:
@@ -244,22 +419,24 @@ class Column(object):
             else:
                 setattr(self, attr, value)
 
-        # if the column data is not ndarray, make it to be one, i.e.
-        # input arrays can be just list or tuple, not required to be ndarray
+        # If the given format string is unabiguously a Numpy dtype or one of
+        # the Numpy record format type specifiers supported by PyFITS then that
+        # should take priority--otherwise assume it is a FITS format
+        if isinstance(format, np.dtype):
+            format, _, _ = _dtype_to_recformat(format)
 
         # check format
-        if not isinstance(format, _ColumnFormat):
-            try:
-                # legit FITS format?
-                format = _ColumnFormat(format)
-                recformat = format.recformat
-            except ValueError:
-                try:
-                    # legit recarray format?
-                    recformat = format
-                    format = _ColumnFormat.from_recformat(format)
-                except ValueError:
-                    raise ValueError('Illegal format `%s`.' % format)
+        if ascii is None and not isinstance(format, _BaseColumnFormat):
+            # We're just give a string which could be either a Numpy format
+            # code, or a format for a binary column array *or* a format for an
+            # ASCII column array--there may be many ambiguities here.  Try
+            # our best to guess what the user intended.
+            format, recformat = self._guess_format(format)
+        elif not ascii and not isinstance(format, _BaseColumnFormat):
+            format, recformat = self._convert_format(format, _ColumnFormat)
+        elif ascii and not isinstance(format, _AsciiColumnFormat):
+            format, recformat = self._convert_format(format,
+                                                     _AsciiColumnFormat)
 
         self.format = format
         # Zero-length formats are legal in the FITS format, but since they
@@ -272,6 +449,79 @@ class Column(object):
         else:
             self._phantom = False
 
+        # Awful hack to use for now to keep track of whether the column holds
+        # pseudo-unsigned int data
+        self._pseudo_unsigned_ints = False
+
+        # TODO: Perhaps offload option verification/handling to a separate
+        # method
+
+        # Validate null option
+        # Note: Enough code exists that thinks empty strings are sensible
+        # inputs for these options that we need to treat '' as None
+        if null is not None and null != '':
+            if isinstance(format, _AsciiColumnFormat):
+                null = str(null)
+                if len(null) > format.width:
+                    warnings.warn(
+                        "ASCII table null option (TNULLn) is longer than "
+                        "the column's character width and will be truncated "
+                        "(got %r)." % null)
+            else:
+                if not _is_int(null):
+                    # Make this an exception instead of a warning, since any
+                    # non-int value is meaningless
+                    # TODO: We *might* be able to issue just a warning if we
+                    # get an object that can be converted to an int, such as a
+                    # string
+                    raise TypeError('Column null option (TNULLn) must be an '
+                                    'integer for binary table columns '
+                                    '(got %r).' % null)
+                tnull_formats = ('B', 'I', 'J', 'K')
+                if not (format.format in tnull_formats or
+                        (format.format in ('P', 'Q') and
+                         format.p_format in tnull_formats)):
+                    # TODO: We should also check that TNULLn's integer value
+                    # is in the range allowed by the column's format
+                    warnings.warn('Column null option (TNULLn) is invalid '
+                                  'for binary table columns of type %r '
+                                  '(got %r).' % (format, null))
+
+        # Validate the disp option
+        # TODO: Add full parsing and validation of TDISPn keywords
+        if disp is not None and null != '':
+            if not isinstance(disp, basestring):
+                raise TypeError('Column disp option (TDISPn) must be a '
+                                'string (got %r).' % disp)
+            if (isinstance(format, _AsciiColumnFormat) and
+                    disp[0].upper() == 'L'):
+                # disp is at least one character long and has the 'L' format
+                # which is not recognized for ASCII tables
+                warnings.warn("Column disp option (TDISPn) may not use the "
+                              "'L' format with ASCII table columns.")
+
+        # Validate the start option
+        if start is not None and start != '':
+            if not isinstance(format, _AsciiColumnFormat):
+                # The 'start' option only applies to ASCII columns
+                warnings.warn('Column start option (TBCOLn) is not allowed '
+                              'for binary table columns (got %r).' % start)
+            try:
+                start = int(start)
+            except (TypeError, ValueError):
+                pass
+
+            if not _is_int(start) and start < 1:
+                raise TypeError('Column start option (TBCOLn) must be a '
+                                'positive integer (got %r).' % start)
+
+        # Process TDIMn options
+        # ASCII table columns can't have a TDIMn keyword associated with it;
+        # for now we just issue a warning and ignore it.
+        # TODO: This should be checked by the FITS verification code
+        if dim is not None and isinstance(format, _AsciiColumnFormat):
+            warnings.warn('Column dim option (TDIMn) is not allowed for ASCII '
+                          'table columns (got %r).' % dim)
         if isinstance(dim, basestring):
             self._dims = _parse_tdim(dim)
         elif isinstance(dim, tuple):
@@ -285,12 +535,14 @@ class Column(object):
                 "or a tuple containing the C-order dimensions for the column")
 
         if self._dims:
-            repeat = _parse_tformat(format)[0]
-            if reduce(operator.mul, self._dims) > repeat:
+            if reduce(operator.mul, self._dims) > self.format.repeat:
                 raise ValueError(
                     "The repeat count of the column format %r for column %r "
                     "is fewer than the number of elements per the TDIM "
                     "argument %r." % (name, format, dim))
+
+        # if the column data is not ndarray, make it to be one, i.e.
+        # input arrays can be just list or tuple, not required to be ndarray
         # does not include Object array because there is no guarantee
         # the elements in the object array are consistent.
         if not isinstance(array,
@@ -304,22 +556,23 @@ class Column(object):
                     array = chararray.array(array, itemsize=itemsize)
                 except ValueError:
                     # then try variable length array
+                    # Note: This includes _FormatQ by inheritance
                     if isinstance(recformat, _FormatP):
                         array = _VLF(array, dtype=recformat.dtype)
                     else:
                         raise ValueError('Data is inconsistent with the '
                                          'format `%s`.' % format)
 
-        # scale the array back to storage values if there is bscale/bzero
+        array = self._convert_to_valid_data_type(array)
+
+        # We have required (through documentation) that arrays passed in to
+        # this constructor are already in their physical values, so we make
+        # note of that here
         if isinstance(array, np.ndarray):
-            # make a copy if scaled, so as not to corrupt the original array
-            if bzero not in ['', None, 0] or bscale not in ['', None, 1]:
-                if bzero not in ['', None, 0]:
-                    array = array - bzero
-                if bscale not in ['', None, 1]:
-                    array = array / bscale
+            self._physical_values = True
+        else:
+            self._physical_values = False
 
-        array = self._convert_to_valid_data_type(array)
         self.array = array
 
     def __repr__(self):
@@ -344,11 +597,16 @@ class Column(object):
     def __hash__(self):
         """
         Like __eq__, the hash of a column should be based on the unique column
-        name and format, and be case-insensitive with respect to the column name.
+        name and format, and be case-insensitive with respect to the column
+        name.
         """
 
         return hash((self.name.lower(), self.format))
 
+    @lazyproperty
+    def dtype(self):
+        return np.dtype(_convert_format(self.format))
+
     def copy(self):
         """
         Return a copy of this `Column`.
@@ -357,6 +615,80 @@ class Column(object):
         tmp.__dict__ = self.__dict__.copy()
         return tmp
 
+    @staticmethod
+    def _convert_format(format, cls):
+        """The format argument to this class's initializer may come in many
+        forms.  This uses the given column format class ``cls`` to convert
+        to a format of that type.
+
+        TODO: There should be an abc base class for column format classes
+        """
+
+        # Short circuit in case we're already a _BaseColumnFormat--there is at
+        # least one case in which this can happen
+        if isinstance(format, _BaseColumnFormat):
+            return format, format.recformat
+
+        if format in NUMPY2FITS:
+            try:
+                # legit recarray format?
+                recformat = format
+                format = cls.from_recformat(format)
+            except VerifyError:
+                pass
+
+        try:
+            # legit FITS format?
+            format = cls(format)
+            recformat = format.recformat
+        except VerifyError:
+            raise VerifyError('Illegal format `%s`.' % format)
+
+        return format, recformat
+
+    def _guess_format(self, format):
+        if self.start and self.dim:
+            # This is impossible; this can't be a valid FITS column
+            raise ValueError(
+                'Columns cannot have both a start (TCOLn) and dim '
+                '(TDIMn) option, since the former is only applies to '
+                'ASCII tables, and the latter is only valid for binary '
+                'tables.')
+        elif self.start:
+            # Only ASCII table columns can have a 'start' option
+            guess_format = _AsciiColumnFormat
+        elif self.dim:
+            # Only binary tables can have a dim option
+            guess_format = _ColumnFormat
+        else:
+            # If the format is *technically* a valid binary column format
+            # (i.e. it has a valid format code followed by arbitrary
+            # "optional" codes), but it is also strictly a valid ASCII
+            # table format, then assume an ASCII table column was being
+            # requested (the more likely case, after all).
+            try:
+                format = _AsciiColumnFormat(format, strict=True)
+            except VerifyError:
+                pass
+            # A safe guess which reflects the existing behavior of previous
+            # PyFITS versions
+            guess_format = _ColumnFormat
+
+        try:
+            format, recformat = self._convert_format(format, guess_format)
+        except VerifyError:
+            # For whatever reason our guess was wrong (for example if we got
+            # just 'F' that's not a valid binary format, but it an ASCII format
+            # code albeit with the width/precision ommitted
+            guess_format = (_AsciiColumnFormat
+                            if guess_format is _ColumnFormat
+                            else _ColumnFormat)
+            # If this fails too we're out of options--it is truly an invalid
+            # format, or at least not supported
+            format, recformat = self._convert_format(format, guess_format)
+
+        return format, recformat
+
     def _convert_to_valid_data_type(self, array):
         # Convert the format to a type we understand
         if isinstance(array, Delayed):
@@ -366,7 +698,9 @@ class Column(object):
         else:
             format = self.format
             dims = self._dims
-            if 'A' in format and 'P' not in format:
+            if 'P' in format or 'Q' in format:
+                return array
+            elif 'A' in format:
                 if array.dtype.char in 'SU':
                     if dims:
                         # The 'last' dimension (first in the order given
@@ -374,26 +708,44 @@ class Column(object):
                         # characters in each string
                         fsize = dims[-1]
                     else:
-                        fsize = int(_convert_format(format)[1:])
+                        fsize = np.dtype(format.recformat).itemsize
                     return chararray.array(array, itemsize=fsize)
                 else:
-                    numpy_format = _convert_format(format)
-                    return _convert_array(array, np.dtype(numpy_format))
+                    return _convert_array(array, np.dtype(format.recformat))
             elif 'L' in format:
                 # boolean needs to be scaled back to storage values ('T', 'F')
                 if array.dtype == np.dtype('bool'):
                     return np.where(array == False, ord('F'), ord('T'))
                 else:
                     return np.where(array == 0, ord('F'), ord('T'))
-            elif 'X' not in format and 'P' not in format:
-                (repeat, fmt, option) = _parse_tformat(format)
-                # Preserve byte order of the original array for now; see #77
-                numpy_format = array.dtype.byteorder + _convert_format(fmt)
-                return _convert_array(array, np.dtype(numpy_format))
             elif 'X' in format:
                 return _convert_array(array, np.dtype('uint8'))
             else:
-                return array
+                # Preserve byte order of the original array for now; see #77
+                # TODO: For some reason we drop the format repeat here; need
+                # to investigate why that was and if it's something we can
+                # avoid doing...
+                new_format = _convert_format(format.format)
+                numpy_format = array.dtype.byteorder + new_format
+
+                # Handle arrays passed in as unsigned ints as pseudo-unsigned
+                # int arrays; blatantly tacked in here for now--we need columns
+                # to have explicit knowledge of whether they treated as
+                # pseudo-unsigned
+                bzeros = {2: np.uint16(2**15), 4: np.uint32(2**31),
+                          8: np.uint64(2**63)}
+                if (array.dtype.kind == 'u' and
+                        array.dtype.itemsize in bzeros and
+                        self.bscale in (1, None, '') and
+                        self.bzero == bzeros[array.dtype.itemsize]):
+                    # Basically the array is uint, has scale == 1.0, and the
+                    # bzero is the appropriate value for a pseudo-unsigned
+                    # integer of the input dtype, then go ahead and assume that
+                    # uint is assumed
+                    numpy_format = numpy_format.replace('i', 'u')
+                    self._pseudo_unsigned_ints = True
+
+                return _convert_array(array, np.dtype(numpy_format))
 
 
 class ColDefs(object):
@@ -407,6 +759,7 @@ class ColDefs(object):
     """
 
     _padding_byte = '\x00'
+    _col_format_cls = _ColumnFormat
 
     def __new__(cls, input, tbtype='BinTableHDU'):
         from .hdu.table import TableHDU
@@ -414,12 +767,12 @@ class ColDefs(object):
         if tbtype == 'BinTableHDU':
             klass = cls
         elif tbtype == 'TableHDU':
-            klass = _ASCIIColDefs
+            klass = _AsciiColDefs
         else:
             raise ValueError('Invalid table type: %s.' % tbtype)
 
         if isinstance(input, TableHDU):
-            klass = _ASCIIColDefs
+            klass = _AsciiColDefs
 
         return object.__new__(klass)
 
@@ -444,79 +797,158 @@ class ColDefs(object):
         self._tbtype = tbtype
 
         if isinstance(input, ColDefs):
-            self.columns = [col.copy() for col in input.columns]
-            # Prevent duplicating any additional work in the __init__
-            return
-
-        # if the input is a list of Columns
+            self._init_from_coldefs(input)
         elif isinstance(input, (list, tuple)):
-            for col in input:
-                if not isinstance(col, Column):
-                    raise TypeError(
-                           'Element %d in the ColDefs input is not a Column.'
-                           % input.index(col))
-            self.columns = [col.copy() for col in input]
-
-        # Construct columns from the fields of a record array
+            # if the input is a list of Columns
+            # TODO: Expand this to accept any iterable
+            self._init_from_sequence(input)
         elif isinstance(input, np.ndarray) and input.dtype.fields is not None:
-            self.columns = []
-            for idx in range(len(input.dtype)):
-                cname = input.dtype.names[idx]
-                ftype = input.dtype.fields[cname][0]
-                # String formats should have 'A' first
-                if ftype.type == np.string_:
-                    format = 'A' + str(ftype.itemsize)
-                else:
-                    format = _convert_format(ftype, reverse=True)
-                # Determine the appropriate dimensions for items in the column
-                # (typically just 1D)
-                dim = input.dtype[idx].shape[::-1]
-                if dim and (len(dim) > 1 or 'A' in format):
-                    if 'A' in format:
-                        # n x m string arrays must include the max string
-                        # length in their dimensions (e.g. l x n x m)
-                        dim = (input.dtype[idx].base.itemsize,) + dim
-                    dim = repr(dim).replace(' ', '')
-                else:
-                    dim = None
-
-                c = Column(name=cname, format=format,
-                           array=input.view(np.ndarray)[cname], dim=dim)
-                self.columns.append(c)
-
+            # Construct columns from the fields of a record array
+            self._init_from_array(input)
         # Construct columns from fields in an HDU header
         elif isinstance(input, _TableBaseHDU):
-            hdr = input._header
-            nfields = hdr['TFIELDS']
-            self._width = hdr['NAXIS1']
-            self._shape = hdr['NAXIS2']
-
-            # go through header keywords to pick out column definition keywords
-            # definition dictionaries for each field
-            col_attributes = [{} for i in range(nfields)]
-            for keyword, value in hdr.iteritems():
-                key = TDEF_RE.match(keyword)
-                try:
-                    keyword = key.group('label')
-                except:
-                    continue               # skip if there is no match
-                if (keyword in KEYWORD_NAMES):
-                    col = int(key.group('num'))
-                    if col <= nfields and col > 0:
-                        idx = KEYWORD_NAMES.index(keyword)
-                        attr = KEYWORD_ATTRIBUTES[idx]
-                        col_attributes[col - 1][attr] = value
-
-            # data reading will be delayed
-            for col in range(nfields):
-                col_attributes[col]['array'] = Delayed(input, col)
-
-            # now build the columns
-            self.columns = [Column(**attrs) for attrs in col_attributes]
-            self._listener = weakref.proxy(input)
+            self._init_from_table(input)
+        else:
+            raise TypeError('Input to ColDefs must be a table HDU, a list '
+                            'of Columns, or a record/field array.')
+
+    def _init_from_coldefs(self, coldefs):
+        """Initialize from an existing ColDefs object (just copy the
+        columns and convert their formats if necessary).
+        """
+
+        self.columns = [self._copy_column(col) for col in coldefs]
+
+    def _init_from_sequence(self, columns):
+        for col in columns:
+            if not isinstance(col, Column):
+                raise TypeError(
+                       'Element %d in the ColDefs input is not a Column.'
+                       % input.index(col))
+
+        self._init_from_coldefs(columns)
+
+    def _init_from_array(self, array):
+        self.columns = []
+        for idx in range(len(array.dtype)):
+            cname = array.dtype.names[idx]
+            ftype = array.dtype.fields[cname][0]
+            format = self._col_format_cls.from_recformat(ftype)
+
+            # Determine the appropriate dimensions for items in the column
+            # (typically just 1D)
+            dim = array.dtype[idx].shape[::-1]
+            if dim and (len(dim) > 1 or 'A' in format):
+                if 'A' in format:
+                    # n x m string arrays must include the max string
+                    # length in their dimensions (e.g. l x n x m)
+                    dim = (array.dtype[idx].base.itemsize,) + dim
+                dim = repr(dim).replace(' ', '')
+            else:
+                dim = None
+
+            # Check for unsigned ints.
+            bzero = None
+            if 'I' in format and ftype == np.dtype('uint16'):
+                bzero = np.uint16(2**15)
+            elif 'J' in format and ftype == np.dtype('uint32'):
+                bzero = np.uint32(2**31)
+            elif 'K' in format and ftype == np.dtype('uint64'):
+                bzero = np.uint64(2**63)
+
+            c = Column(name=cname, format=format,
+                       array=array.view(np.ndarray)[cname], bzero=bzero,
+                       dim=dim)
+            self.columns.append(c)
+
+    def _init_from_table(self, table):
+        hdr = table._header
+        nfields = hdr['TFIELDS']
+        self._width = hdr['NAXIS1']
+        self._shape = hdr['NAXIS2']
+
+        # go through header keywords to pick out column definition keywords
+        # definition dictionaries for each field
+        col_attributes = [{} for i in range(nfields)]
+        for keyword, value in hdr.iteritems():
+            key = TDEF_RE.match(keyword)
+            try:
+                keyword = key.group('label')
+            except:
+                continue  # skip if there is no match
+            if keyword in KEYWORD_NAMES:
+                col = int(key.group('num'))
+                if col <= nfields and col > 0:
+                    idx = KEYWORD_NAMES.index(keyword)
+                    attr = KEYWORD_ATTRIBUTES[idx]
+                    if attr == 'format':
+                        # Go ahead and convert the format value to the
+                        # appropriate ColumnFormat container now
+                        value = self._col_format_cls(value)
+                    col_attributes[col - 1][attr] = value
+
+        # data reading will be delayed
+        for col in range(nfields):
+            col_attributes[col]['array'] = Delayed(table, col)
+
+        # now build the columns
+        self.columns = [Column(**attrs) for attrs in col_attributes]
+        self._listener = weakref.proxy(table)
+
+    def __copy__(self):
+        return self.__class__(self, self._tbtype)
+
+    def __deepcopy__(self, memo):
+        return self.__class__([copy.deepcopy(c, memo) for c in self.columns],
+                              tbtype=self._tbtype)
+
+    def _copy_column(self, column):
+        """Utility function used currently only by _init_from_coldefs
+        to help convert columns from binary format to ASCII format or vice
+        versa if necessary (otherwise performs a straight copy).
+        """
+
+        if isinstance(column.format, self._col_format_cls):
+            # This column has a FITS format compatible with this column
+            # definitions class (that is ascii or binary)
+            return column.copy()
+
+        new_column = column.copy()
+
+        # Try to use the Numpy recformat as the equivalency between the
+        # two formats; if that conversion can't be made then these
+        # columns can't be transferred
+        # TODO: Catch exceptions here and raise an explicit error about
+        # column format conversion
+        new_column.format = self._col_format_cls.from_column_format(
+                column.format)
+
+        # Handle a few special cases of column format options that are not
+        # compatible between ASCII an binary tables
+        # TODO: This is sort of hacked in right now; we really neet
+        # separate classes for ASCII and Binary table Columns, and they
+        # should handle formatting issues like these
+        if not isinstance(new_column.format, _AsciiColumnFormat):
+            # the column is a binary table column...
+            new_column.start = None
+            if new_column.null is not None:
+                # We can't just "guess" a value to represent null
+                # values in the new column, so just disable this for
+                # now; users may modify it later
+                new_column.null = None
         else:
-            raise TypeError('Input to ColDefs must be a table HDU or a list '
-                            'of Columns.')
+            # the column is an ASCII table column...
+            if new_column.null is not None:
+                new_column.null = DEFAULT_ASCII_TNULL
+            if (new_column.disp is not None and
+                    new_column.disp.upper().startswith('L')):
+                # ASCII columns may not use the logical data display format;
+                # for now just drop the TDISPn option for this column as we
+                # don't have a systematic conversion of boolean data to ASCII
+                # tables yet
+                new_column.disp = None
+
+        return new_column
 
     def __getattr__(self, name):
         """
@@ -528,26 +960,24 @@ class ColDefs(object):
 
         cname = name[:-1]
         if cname in KEYWORD_ATTRIBUTES and name[-1] == 's':
-            attr = [''] * len(self)
-            for idx in range(len(self)):
-                val = getattr(self[idx], cname)
+            attr = []
+            for col in self:
+                val = getattr(col, cname)
                 if val is not None:
-                    attr[idx] = val
-            self.__dict__[name] = attr
-            return self.__dict__[name]
+                    attr.append(val)
+                else:
+                    attr.append('')
+            return attr
         raise AttributeError(name)
 
-    @property
-    @deprecated('3.0', message='The %(func)s attribute is deprecated; use the '
-                               '%(alternative)s attribute instead.',
-                alternative='`ColDefs.columns`')
-    def data(self):
-        """
-        What was originally self.columns is now self.data; this provides some
-        backwards compatibility.
-        """
-
-        return self.columns
+    @lazyproperty
+    def dtype(self):
+        recformats = [f for idx, f in enumerate(self._recformats)
+                      if not self[idx]._phantom]
+        formats = ','.join(recformats)
+        names = [n for idx, n in enumerate(self.names)
+                 if not self[idx]._phantom]
+        return np.rec.format_parser(formats, names, None).dtype
 
     @lazyproperty
     def _arrays(self):
@@ -555,7 +985,7 @@ class ColDefs(object):
 
     @lazyproperty
     def _recformats(self):
-        return [_convert_format(fmt) for fmt in self.formats]
+        return [fmt.recformat for fmt in self.formats]
 
     @lazyproperty
     def _dims(self):
@@ -575,7 +1005,9 @@ class ColDefs(object):
 
     def __repr__(self):
         rep = 'ColDefs('
-        if self.columns:
+        if hasattr(self, 'columns') and self.columns:
+            # The hasattr check is mostly just useful in debugging sessions
+            # where self.columns may not be defined yet
             rep += '\n    '
             rep += '\n    '.join([repr(c) for c in self.columns])
             rep += '\n'
@@ -630,7 +1062,9 @@ class ColDefs(object):
 
         self._arrays.append(column.array)
         # Obliterate caches of certain things
+        del self.dtype
         del self._recformats
+        del self._dims
 
         self.columns.append(column)
 
@@ -655,7 +1089,9 @@ class ColDefs(object):
 
         del self._arrays[indx]
         # Obliterate caches of certain things
+        del self.dtype
         del self._recformats
+        del self._dims
 
         del self.columns[indx]
 
@@ -764,7 +1200,7 @@ class ColDefs(object):
                 if attr not in KEYWORD_ATTRIBUTES:
                     output.write("'%s' is not an attribute of the column "
                                  "definitions.\n" % attr)
-                continue
+                    continue
                 output.write("%s:\n" % attr)
                 output.write('    %s\n' % getattr(self, attr + 's'))
             else:
@@ -774,38 +1210,41 @@ class ColDefs(object):
             return ret
 
 
-class _ASCIIColDefs(ColDefs):
+class _AsciiColDefs(ColDefs):
     """ColDefs implementation for ASCII tables."""
 
-    _ascii_fmt = {'A': 'A1', 'I': 'I10', 'J': 'I15', 'E': 'E15.7',
-                  'F': 'F16.7', 'D': 'D25.17'}
-
     _padding_byte = ' '
+    _col_format_cls = _AsciiColumnFormat
 
     def __init__(self, input, tbtype='TableHDU'):
-        super(_ASCIIColDefs, self).__init__(input, tbtype)
+        super(_AsciiColDefs, self).__init__(input, tbtype)
 
         # if the format of an ASCII column has no width, add one
-        if not isinstance(input, _ASCIIColDefs):
-            for col in self.columns:
-                (type, width) = _convert_ascii_format(col.format)
-                if width is None:
-                    col.format = self._ascii_fmt[col.format]
+        if not isinstance(input, _AsciiColDefs):
+            self._update_field_metrics()
+        else:
+            for idx, s in enumerate(input.starts):
+                self.columns[idx].start = s
+
+            self._spans = input.spans
+            self._width = input._width
 
     @lazyproperty
+    def dtype(self):
+        _itemsize = self.spans[-1] + self.starts[-1] - 1
+        dtype = {}
+
+        for j in range(len(self)):
+            data_type = 'S' + str(self.spans[j])
+            dtype[self.names[j]] = (data_type, self.starts[j] - 1)
+
+        return np.dtype(dtype)
+
+    @property
     def spans(self):
-        # make sure to consider the case that the starting column of
-        # a field may not be the column right after the last field
-        end = 0
-        spans = [0] * len(self)
-        for idx in range(len(self)):
-            format, width = _convert_ascii_format(self.formats[idx])
-            if not self.starts[idx]:
-                self.starts[idx] = end + 1
-            end = self.starts[idx] + width - 1
-            spans[idx] = width
-        self._width = end
-        return spans
+        """A list of the widths of each field in the table."""
+
+        return self._spans
 
     @lazyproperty
     def _recformats(self):
@@ -813,23 +1252,42 @@ class _ASCIIColDefs(ColDefs):
             widths = []
         else:
             widths = [y - x for x, y in pairwise(self.starts)]
-        # NOTE: The self._width attribute only exists if this ColDefs was
-        # instantiated with a _TableHDU object; make sure that's the only
-        # context in which this is used, for now...
-        # Touch spans to make sure self.starts is set
-        self.spans
+
+        # Widths is the width of each field *including* any space between
+        # fields; this is so that we can map the fields to string records in a
+        # Numpy recarray
         widths.append(self._width - self.starts[-1] + 1)
         return ['a' + str(w) for w in widths]
 
     def add_col(self, column):
-        # Clear existing spans value
-        del self.spans
-        super(_ASCIIColDefs, self).add_col(column)
+        super(_AsciiColDefs, self).add_col(column)
+        self._update_field_metrics()
 
     def del_col(self, col_name):
-        # Clear existing spans value
-        del self.spans
-        super(_ASCIIColDefs, self).del_col(col_name)
+        super(_AsciiColDefs, self).del_col(col_name)
+        self._update_field_metrics()
+
+    def _update_field_metrics(self):
+        """
+        Updates the list of the start columns, the list of the widths of each
+        field, and the total width of each record in the table.
+        """
+
+        spans = [0] * len(self.columns)
+        end_col = 0  # Refers to the ASCII text column, not the table col
+        for idx, col in enumerate(self.columns):
+            width = col.format.width
+
+            # Update the start columns and column span widths taking into
+            # account the case that the starting column of a field may not
+            # be the column immediately after the previous field
+            if not col.start:
+                col.start = end_col + 1
+            end_col = col.start + width - 1
+            spans[idx] = width
+
+        self._spans = spans
+        self._width = end_col
 
 
 class _VLF(np.ndarray):
@@ -847,12 +1305,12 @@ class _VLF(np.ndarray):
             try:
                 # this handles ['abc'] and [['a','b','c']]
                 # equally, beautiful!
-                input = map(lambda x: chararray.array(x, itemsize=1), input)
+                input = [chararray.array(x, itemsize=1) for x in input]
             except:
                 raise ValueError('Inconsistent input data array: %s' % input)
 
         a = np.array(input, dtype=np.object)
-        self = np.ndarray.__new__(cls, shape=(len(input)), buffer=a,
+        self = np.ndarray.__new__(cls, shape=(len(input),), buffer=a,
                                   dtype=np.object)
         self.max = 0
         self.element_dtype = dtype
@@ -928,7 +1386,7 @@ def _get_index(names, key):
     return indx
 
 
-def _unwrapx(input, output, nx):
+def _unwrapx(input, output, repeat):
     """
     Unwrap the X format column into a Boolean array.
 
@@ -938,43 +1396,43 @@ def _unwrapx(input, output, nx):
         input ``Uint8`` array of shape (`s`, `nbytes`)
 
     output
-        output Boolean array of shape (`s`, `nx`)
+        output Boolean array of shape (`s`, `repeat`)
 
-    nx
+    repeat
         number of bits
     """
 
     pow2 = np.array([128, 64, 32, 16, 8, 4, 2, 1], dtype='uint8')
-    nbytes = ((nx - 1) // 8) + 1
+    nbytes = ((repeat - 1) // 8) + 1
     for i in range(nbytes):
         _min = i * 8
-        _max = min((i + 1) * 8, nx)
+        _max = min((i + 1) * 8, repeat)
         for j in range(_min, _max):
             output[..., j] = np.bitwise_and(input[..., i], pow2[j - i * 8])
 
 
-def _wrapx(input, output, nx):
+def _wrapx(input, output, repeat):
     """
     Wrap the X format column Boolean array into an ``UInt8`` array.
 
     Parameters
     ----------
     input
-        input Boolean array of shape (`s`, `nx`)
+        input Boolean array of shape (`s`, `repeat`)
 
     output
         output ``Uint8`` array of shape (`s`, `nbytes`)
 
-    nx
+    repeat
         number of bits
     """
 
     output[...] = 0  # reset the output
-    nbytes = ((nx - 1) // 8) + 1
-    unused = nbytes * 8 - nx
+    nbytes = ((repeat - 1) // 8) + 1
+    unused = nbytes * 8 - repeat
     for i in range(nbytes):
         _min = i * 8
-        _max = min((i + 1) * 8, nx)
+        _max = min((i + 1) * 8, repeat)
         for j in range(_min, _max):
             if j != _min:
                 np.left_shift(output[..., i], 1, output[..., i])
@@ -984,9 +1442,9 @@ def _wrapx(input, output, nx):
     np.left_shift(output[..., i], unused, output[..., i])
 
 
-def _makep(input, desp_output, format, nrows=None):
+def _makep(array, descr_output, format, nrows=None):
     """
-    Construct the P format column array, both the data descriptors and
+    Construct the P (or Q) format column array, both the data descriptors and
     the data.  It returns the output "data" array of data type `dtype`.
 
     The descriptor location will have a zero offset for all columns
@@ -995,26 +1453,29 @@ def _makep(input, desp_output, format, nrows=None):
 
     Parameters
     ----------
-    input
+    array
         input object array
 
-    desp_output
-        output "descriptor" array of data type ``Int32``--must be nrows wide in
-        its first dimension
+    descr_output
+        output "descriptor" array of data type int32 (for P format arrays) or
+        int64 (for Q format arrays)--must be nrows long in its first dimension
 
     format
-        the _FormatP object reperesenting the format of the variable array
+        the _FormatP object representing the format of the variable array
 
     nrows : int, optional
         number of rows to create in the column; defaults to the number of rows
         in the input array
     """
 
+    # TODO: A great deal of this is redundant with FITS_rec._convert_p; see if
+    # we can merge the two somehow.
+
     _offset = 0
 
     if not nrows:
-        nrows = len(input)
-    n = min(len(input), nrows)
+        nrows = len(array)
+    n = min(len(array), nrows)
 
     data_output = _VLF([None] * nrows, dtype=format.dtype)
 
@@ -1024,8 +1485,8 @@ def _makep(input, desp_output, format, nrows=None):
         _nbytes = np.array([], dtype=format.dtype).itemsize
 
     for idx in range(nrows):
-        if idx < len(input):
-            rowval = input[idx]
+        if idx < len(array):
+            rowval = array[idx]
         else:
             if format.dtype == 'a':
                 rowval = ' ' * data_output.max
@@ -1037,30 +1498,99 @@ def _makep(input, desp_output, format, nrows=None):
         else:
             data_output[idx] = np.array(rowval, dtype=format.dtype)
 
-        desp_output[idx, 0] = len(data_output[idx])
-        desp_output[idx, 1] = _offset
+        descr_output[idx, 0] = len(data_output[idx])
+        descr_output[idx, 1] = _offset
         _offset += len(data_output[idx]) * _nbytes
 
     return data_output
 
 
 def _parse_tformat(tform):
-    """Parse the ``TFORM`` value into `repeat`, `dtype`, and `option`."""
+    """Parse ``TFORMn`` keyword for a binary table into a
+    ``(repeat, format, option)`` tuple.
+    """
 
     try:
-        (repeat, dtype, option) = TFORMAT_RE.match(tform.strip()).groups()
+        (repeat, format, option) = TFORMAT_RE.match(tform.strip()).groups()
     except:
         # TODO: Maybe catch this error use a default type (bytes, maybe?) for
         # unrecognized column types.  As long as we can determine the correct
         # byte width somehow..
-        raise VerifyError('Format "%s" is not recognized.' % tform)
+        raise VerifyError('Format %r is not recognized.' % tform)
 
     if repeat == '':
         repeat = 1
     else:
         repeat = int(repeat)
 
-    return (repeat, dtype, option)
+    return (repeat, format.upper(), option)
+
+
+def _parse_ascii_tformat(tform, strict=False):
+    """Parse the ``TFORMn`` keywords for ASCII tables into a
+    ``(format, width, precision)`` tuple (the latter is zero unless
+    width is one of 'E', 'F', or 'D').
+    """
+
+    match = TFORMAT_ASCII_RE.match(tform.strip())
+    if not match:
+        raise VerifyError('Format %r is not recognized.' % tform)
+
+    # Be flexible on case
+    format = match.group('format')
+    if format is None:
+        # Floating point format
+        format = match.group('formatf').upper()
+        width = match.group('widthf')
+        precision = match.group('precision')
+        if width is None or precision is None:
+            if strict:
+                raise VerifyError('Format %r is not unambiguously an ASCII '
+                                  'table format.')
+            else:
+                width = 0 if width is None else width
+                precision = 1 if precision is None else precision
+    else:
+        format = format.upper()
+        width = match.group('width')
+        if width is None:
+            if strict:
+                raise VerifyError('Format %r is not unambiguously an ASCII '
+                                  'table format.')
+            else:
+                # Just use a default width of 0 if unspecified
+                width = 0
+        precision = 0
+
+    def convert_int(val):
+        msg = ('Format %r is not valid--field width and decimal precision '
+               'must be positive integers.')
+        try:
+            val = int(val)
+        except (ValueError, TypeError):
+            raise VerifyError(msg % tform)
+
+        if val <= 0:
+            raise VerifyError(msg % tform)
+
+        return val
+
+    if width and precision:
+        # This should only be the case for floating-point formats
+        width, precision = convert_int(width), convert_int(precision)
+    elif width:
+        # Just for integer/string formats; ignore precision
+        width = convert_int(width)
+    else:
+        # For any format, if width was unspecified use the set defaults
+        width, precision = ASCII_DEFAULT_WIDTHS[format]
+
+    if precision >= width:
+        raise VerifyError("Format %r not valid--the number of decimal digits "
+                          "must be less than the format's total width %s." &
+                          (tform, width))
+
+    return format, width, precision
 
 
 def _parse_tdim(tdim):
@@ -1133,14 +1663,16 @@ def _convert_fits2record(format):
 
     repeat, dtype, option = _parse_tformat(format)
 
-    if dtype in FITS2NUMPY:                            # FITS format
+    if dtype in FITS2NUMPY:
         if dtype == 'A':
             output_format = FITS2NUMPY[dtype] + str(repeat)
             # to accomodate both the ASCII table and binary table column
             # format spec, i.e. A7 in ASCII table is the same as 7A in
             # binary table, so both will produce 'a7'.
+            # Technically the FITS standard does not allow this but it's a very
+            # common mistake
             if format.lstrip()[0] == 'A' and option != '':
-                 # make sure option is integer
+                # make sure option is integer
                 output_format = FITS2NUMPY[dtype] + str(int(option))
         else:
             repeat_str = ''
@@ -1149,13 +1681,11 @@ def _convert_fits2record(format):
             output_format = repeat_str + FITS2NUMPY[dtype]
 
     elif dtype == 'X':
-        nbytes = ((repeat - 1) // 8) + 1
-        # use an array, even if it is only ONE u1 (i.e. use tuple always)
-        output_format = _FormatX(repr((nbytes,)) + 'u1')
-        output_format._nx = repeat
-
+        output_format = _FormatX(repeat)
     elif dtype == 'P':
         output_format = _FormatP.from_tform(format)
+    elif dtype == 'Q':
+        output_format = _FormatQ.from_tform(format)
     elif dtype == 'F':
         output_format = 'f8'
     else:
@@ -1169,24 +1699,18 @@ def _convert_record2fits(format):
     Convert record format spec to FITS format spec.
     """
 
-    if isinstance(format, np.dtype):
-        shape = format.shape
-        kind = format.base.kind
-        option = str(format.base.itemsize)
-        if kind in ('U', 'S'):
-            kind = 'a'
-        dtype = kind
+    recformat, kind, dtype = _dtype_to_recformat(format)
+    shape = dtype.shape
+    option = str(dtype.base.itemsize)
 
-        ndims = len(shape)
-        repeat = 1
-        if ndims > 0:
-            nel = np.array(shape, dtype='i8').prod()
-            if nel > 1:
-                repeat = nel
-    else:
-        repeat, dtype, option = _parse_tformat(format)
+    ndims = len(shape)
+    repeat = 1
+    if ndims > 0:
+        nel = np.array(shape, dtype='i8').prod()
+        if nel > 1:
+            repeat = nel
 
-    if dtype == 'a':
+    if kind == 'a':
         # This is a kludge that will place string arrays into a
         # single field, so at least we won't lose data.  Need to
         # use a TDIM keyword to fix this, declaring as (slength,
@@ -1194,19 +1718,43 @@ def _convert_record2fits(format):
 
         ntot = int(repeat) * int(option)
 
-        output_format = str(ntot) + NUMPY2FITS[dtype]
-    elif dtype + option in NUMPY2FITS:  # record format
+        output_format = str(ntot) + 'A'
+    elif recformat in NUMPY2FITS:  # record format
         if repeat != 1:
             repeat = str(repeat)
         else:
             repeat = ''
-        output_format = repeat + NUMPY2FITS[dtype + option]
+        output_format = repeat + NUMPY2FITS[recformat]
     else:
         raise ValueError('Illegal format %s.' % format)
 
     return output_format
 
 
+def _dtype_to_recformat(dtype):
+    """
+    Utility function for converting a dtype object or string that instantiates
+    a dtype (e.g. 'float32') into one of the two character Numpy format codes
+    that have been traditionally used by PyFITS.
+
+    In particular, use of 'a' to refer to character data is long since
+    deprecated in Numpy, but PyFITS remains heavily invested in its use
+    (something to try to get away from sooner rather than later).
+    """
+
+    if not isinstance(dtype, np.dtype):
+        dtype = np.dtype(dtype)
+
+    kind = dtype.base.kind
+    itemsize = dtype.base.itemsize
+    recformat = kind + str(itemsize)
+
+    if kind in ('U', 'S'):
+        recformat = kind = 'a'
+
+    return recformat, kind, dtype
+
+
 def _convert_format(format, reverse=False):
     """
     Convert FITS format spec to record format spec.  Do the opposite if
@@ -1219,23 +1767,61 @@ def _convert_format(format, reverse=False):
         return _convert_fits2record(format)
 
 
-def _convert_ascii_format(input_format):
+def _convert_ascii_format(format, reverse=False):
     """Convert ASCII table format spec to record format spec."""
 
-    ascii2rec = {'A': 'a', 'I': 'i4', 'J': 'i8', 'F': 'f4', 'E': 'f4',
-                 'D': 'f8'}
-    _re = re.compile(r'(?P<dtype>[AIJFED])(?P<width>[0-9]*)')
-
-    # Parse the TFORM value into data type and width.
-    try:
-        (dtype, width) = _re.match(input_format.strip()).groups()
-        dtype = ascii2rec[dtype]
-        if width == '':
-            width = None
-        else:
-            width = int(width)
-    except KeyError:
-        raise ValueError('Illegal format `%s` for ASCII table.'
-                         % input_format)
-
-    return (dtype, width)
+    if reverse:
+        recformat, kind, dtype = _dtype_to_recformat(format)
+        itemsize = dtype.itemsize
+
+        if kind == 'a':
+            return 'A' + str(itemsize)
+        elif NUMPY2FITS.get(recformat) == 'L':
+            # Special case for logical/boolean types--for ASCII tables we
+            # represent these as single character columns containing 'T' or 'F'
+            # (a la the storage format for Logical columns in binary tables)
+            return 'A1'
+        elif kind == 'i':
+            # Use for the width the maximum required to represent integers
+            # of that byte size plus 1 for signs, but use a minumum of the
+            # default width (to keep with existing behavior)
+            width = 1 + len(str(2 ** (itemsize * 8)))
+            width = max(width, ASCII_DEFAULT_WIDTHS['I'][0])
+            return 'I' + str(width)
+        elif kind == 'f':
+            # This is tricky, but go ahead and use D if float-64, and E
+            # if float-32 with their default widths
+            if itemsize >= 8:
+                format = 'D'
+            else:
+                format = 'E'
+            width = '.'.join(str(w) for w in ASCII_DEFAULT_WIDTHS[format])
+            return format + width
+        # TODO: There may be reasonable ways to represent other Numpy types so
+        # let's see what other possibilities there are besides just 'a', 'i',
+        # and 'f'.  If it doesn't have a reasonable ASCII representation then
+        # raise an exception
+    else:
+        format, width, precision = _parse_ascii_tformat(format)
+
+        # This gives a sensible "default" dtype for a given ASCII
+        # format code
+        recformat = ASCII2NUMPY[format]
+
+        # The following logic is taken from CFITSIO:
+        # For integers, if the width <= 4 we can safely use 16-bit ints for all
+        # values [for the non-standard J format code just always force 64-bit]
+        if format == 'I' and width <= 4:
+            recformat = 'i2'
+        elif format == 'F' and width > 7:
+            # 32-bit floats (the default) may not be accurate enough to support
+            # all values that can fit in this field, so upgrade to 64-bit
+            recformat = 'f8'
+        elif format == 'E' and precision > 6:
+            # Again upgrade to a 64-bit int if we require greater decimal
+            # precision
+            recformat = 'f8'
+        elif format == 'A':
+            recformat += str(width)
+
+        return recformat
diff --git a/astropy/io/fits/connect.py b/astropy/io/fits/connect.py
new file mode 100644
index 0000000..1def7f3
--- /dev/null
+++ b/astropy/io/fits/connect.py
@@ -0,0 +1,269 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+from __future__ import print_function
+
+import os
+import re
+import warnings
+
+import numpy as np
+
+from ...utils import OrderedDict
+from ...utils.exceptions import AstropyUserWarning
+from .. import registry as io_registry
+from ...table import Table
+from ... import log
+from ... import units as u
+
+from . import HDUList, TableHDU, BinTableHDU, GroupsHDU
+from .hdu.hdulist import fitsopen as fits_open
+
+
+# FITS file signature as per RFC 4047
+FITS_SIGNATURE = (b"\x53\x49\x4d\x50\x4c\x45\x20\x20\x3d\x20\x20\x20\x20\x20"
+                  b"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20"
+                  b"\x20\x54")
+
+# Keywords to remove for all tables that are read in
+REMOVE_KEYWORDS = ['XTENSION', 'BITPIX', 'NAXIS', 'NAXIS1', 'NAXIS2',
+                   'PCOUNT', 'GCOUNT', 'TFIELDS']
+
+# Column-specific keywords
+COLUMN_KEYWORDS = ['TFORM[0-9]+',
+                   'TBCOL[0-9]+',
+                   'TSCAL[0-9]+',
+                   'TZERO[0-9]+',
+                   'TNULL[0-9]+',
+                   'TTYPE[0-9]+',
+                   'TUNIT[0-9]+',
+                   'TDISP[0-9]+',
+                   'TDIM[0-9]+',
+                   'THEAP']
+
+
+def is_column_keyword(keyword):
+    for c in COLUMN_KEYWORDS:
+        if re.match(c, keyword) is not None:
+            return True
+    return False
+
+
+def is_fits(origin, filepath, fileobj, *args, **kwargs):
+    """
+    Determine whether `origin` is a FITS file.
+
+    Parameters
+    ----------
+    origin : str or readable file-like object
+        Path or file object containing a potential FITS file.
+
+    Returns
+    -------
+    is_fits : bool
+        Returns `True` if the given file is a FITS file.
+    """
+    if fileobj is not None:
+        pos = fileobj.tell()
+        sig = fileobj.read(30)
+        fileobj.seek(pos)
+        return sig == FITS_SIGNATURE
+    elif filepath is not None:
+        if filepath.lower().endswith(('.fits', '.fits.gz', '.fit', '.fit.gz')):
+            return True
+    elif isinstance(args[0], (HDUList, TableHDU, BinTableHDU, GroupsHDU)):
+        return True
+    else:
+        return False
+
+
+def read_table_fits(input, hdu=None):
+    """
+    Read a Table object from an FITS file
+
+    Parameters
+    ----------
+    input : str or file-like object or compatible `astropy.io.fits` HDU object
+        If a string, the filename to read the table from. If a file object, or
+        a compatible HDU object, the object to extract the table from. The
+        following `astropy.io.fits` HDU objects can be used as input:
+        - :class:`~astropy.io.fits.hdu.table.TableHDU`
+        - :class:`~astropy.io.fits.hdu.table.BinTableHDU`
+        - :class:`~astropy.io.fits.hdu.table.GroupsHDU`
+        - :class:`~astropy.io.fits.hdu.hdulist.HDUList`
+    hdu : int or str, optional
+        The HDU to read the table from.
+    """
+
+    if isinstance(input, HDUList):
+
+        # Parse all table objects
+        tables = OrderedDict()
+        for ihdu, hdu_item in enumerate(input):
+            if isinstance(hdu_item, (TableHDU, BinTableHDU, GroupsHDU)):
+                tables[ihdu] = hdu_item
+
+        if len(tables) > 1:
+
+            if hdu is None:
+                warnings.warn("hdu= was not specified but multiple tables"
+                              " are present, reading in first available"
+                              " table (hdu={0})".format(tables.keys()[0]),
+                              AstropyUserWarning)
+                hdu = tables.keys()[0]
+
+            # hdu might not be an integer, so we first need to convert it
+            # to the correct HDU index
+            hdu = input.index_of(hdu)
+
+            if hdu in tables:
+                table = tables[hdu]
+            else:
+                raise ValueError("No table found in hdu={0}".format(hdu))
+
+        elif len(tables) == 1:
+            table = tables[tables.keys()[0]]
+        else:
+            raise ValueError("No table found")
+
+    elif isinstance(input, (TableHDU, BinTableHDU, GroupsHDU)):
+
+        table = input
+
+    else:
+
+        hdulist = fits_open(input)
+
+        try:
+            return read_table_fits(hdulist, hdu=hdu)
+        finally:
+            hdulist.close()
+
+    # Check if table is masked
+    masked = False
+    for col in table.columns:
+        if col.null is not None:
+            masked = True
+            break
+
+    # Convert to an astropy.table.Table object
+    t = Table(table.data, masked=masked)
+
+    # Copy over null values if needed
+    if masked:
+        for col in table.columns:
+            if col.null is not None:
+                t[col.name].set_fill_value(col.null)
+                t[col.name].mask[t[col.name] == col.null] = True
+
+    # Copy over units
+    for col in table.columns:
+        if col.unit is not None:
+            t[col.name].unit = u.Unit(
+                col.unit, format='fits', parse_strict='warn')
+
+    # TODO: deal properly with unsigned integers
+
+    for key, value, comment in table.header.cards:
+
+        if key in ['COMMENT', 'HISTORY']:
+            if key in t.meta:
+                t.meta[key].append(value)
+            else:
+                t.meta[key] = [value]
+
+        elif key in t.meta:  # key is duplicate
+
+            if isinstance(t.meta[key], list):
+                t.meta[key].append(value)
+            else:
+                t.meta[key] = [t.meta[key], value]
+
+        elif (is_column_keyword(key.upper()) or
+              key.upper() in REMOVE_KEYWORDS):
+
+            pass
+
+        else:
+
+            t.meta[key] = value
+
+    # TODO: implement masking
+
+    return t
+
+
+def write_table_fits(input, output, overwrite=False):
+    """
+    Write a Table object to a FITS file
+
+    Parameters
+    ----------
+    input : Table
+        The table to write out.
+    output : str
+        The filename to write the table to.
+    overwrite : bool
+        Whether to overwrite any existing file without warning.
+    """
+
+    # Check if output file already exists
+    if isinstance(output, basestring) and os.path.exists(output):
+        if overwrite:
+            os.remove(output)
+        else:
+            raise IOError("File exists: {0}".format(output))
+
+    # Create a new HDU object
+    if input.masked:
+        table_hdu = BinTableHDU(np.array(input.filled()))
+        for col in table_hdu.columns:
+            # Binary FITS tables support TNULL *only* for integer data columns
+            # TODO: Determine a schema for handling non-integer masked columns
+            # in FITS (if at all possible)
+            int_formats = ('B', 'I', 'J', 'K')
+            if not (col.format in int_formats or
+                    col.format.p_format in int_formats):
+                continue
+
+            # The astype is necessary because if the string column is less
+            # than one character, the fill value will be N/A by default which
+            # is too long, and so no values will get masked.
+            fill_value = input[col.name].get_fill_value()
+
+            col.null = fill_value.astype(input[col.name].dtype)
+    else:
+        table_hdu = BinTableHDU(np.array(input))
+
+    # Set units for output HDU
+    for col in table_hdu.columns:
+        if input[col.name].unit is not None:
+            col.unit = input[col.name].unit.to_string(format='fits')
+
+    for key, value in input.meta.items():
+
+        if is_column_keyword(key.upper()) or key.upper() in REMOVE_KEYWORDS:
+
+            warnings.warn("Meta-data keyword {0} will be ignored since it "
+                          "conflicts with a FITS reserved keyword".format(key), AstropyUserWarning)
+
+        if isinstance(value, list):
+            for item in value:
+                try:
+                    table_hdu.header.append((key, item))
+                except ValueError:
+                    warnings.warn("Attribute `{0}` of type {1} cannot be written "
+                                  "to FITS files - skipping".format(key,
+                                                               type(value)), AstropyUserWarning)
+        else:
+            try:
+                table_hdu.header[key] = value
+            except ValueError:
+                warnings.warn("Attribute `{0}` of type {1} cannot be written to "
+                              "FITS files - skipping".format(key, type(value)), AstropyUserWarning)
+
+    # Write out file
+    table_hdu.writeto(output)
+
+io_registry.register_reader('fits', Table, read_table_fits)
+io_registry.register_writer('fits', Table, write_table_fits)
+io_registry.register_identifier('fits', Table, is_fits)
diff --git a/astropy/io/fits/convenience.py b/astropy/io/fits/convenience.py
index b674db9..4191d1d 100644
--- a/astropy/io/fits/convenience.py
+++ b/astropy/io/fits/convenience.py
@@ -7,9 +7,9 @@ Convenience functions
 The functions in this module provide shortcuts for some of the most basic
 operations on FITS files, such as reading and updating the header.  They are
 included directly in the 'astropy.io.fits' namespace so that they can be used
-like:
+like::
 
-    >>> astropy.io.fits.getheader(...)
+    astropy.io.fits.getheader(...)
 
 These functions are primarily for convenience when working with FITS files in
 the command-line interpreter.  If performing several operations on the same
@@ -30,22 +30,22 @@ explanation of all the different formats.
     arguments.  This is to avoid ambiguity and conflicts with the
     extension arguments.  For example, to set NAXIS=1 on the Primary HDU:
 
-    Wrong:
+    Wrong::
 
-        >>> astropy.io.fits.setval('myimage.fits', 'NAXIS', 1)
+        astropy.io.fits.setval('myimage.fits', 'NAXIS', 1)
 
     The above example will try to set the NAXIS value on the first extension
     HDU to blank.  That is, the argument '1' is assumed to specify an extension
     HDU.
 
-    Right:
+    Right::
 
-        >>> astropy.io.fits.setval('myimage.fits', 'NAXIS', value=1)
+        astropy.io.fits.setval('myimage.fits', 'NAXIS', value=1)
 
     This will set the NAXIS keyword to 1 on the primary HDU (the default).  To
-    specify the first extension HDU use:
+    specify the first extension HDU use::
 
-        >>> astropy.io.fits.setval('myimage.fits', 'NAXIS', value=1, ext=1)
+        astropy.io.fits.setval('myimage.fits', 'NAXIS', value=1, ext=1)
 
     This complexity arises out of the attempt to simultaneously support
     multiple argument formats that were used in past versions of PyFITS.
@@ -55,18 +55,18 @@ explanation of all the different formats.
 """
 
 
-import gzip
 import os
 
 import numpy as np
 
-from .file import PYTHON_MODES, _File
+from .file import FILE_MODES, _File
 from .hdu.base import _BaseHDU, _ValidHDU
 from .hdu.hdulist import fitsopen
 from .hdu.image import PrimaryHDU, ImageHDU
 from .hdu.table import BinTableHDU
 from .header import Header
-from .util import fileobj_closed, fileobj_name, isfile, _is_int
+from .util import (fileobj_closed, fileobj_name, fileobj_mode,
+                   fileobj_closed, _is_int)
 from ...utils import deprecated
 
 
@@ -123,31 +123,31 @@ def getdata(filename, *args, **kwargs):
 
         No extra arguments implies the primary header::
 
-            >>> getdata('in.fits')
+            getdata('in.fits')
 
         By extension number::
 
-            >>> getdata('in.fits', 0)    # the primary header
-            >>> getdata('in.fits', 2)    # the second extension
-            >>> getdata('in.fits', ext=2) # the second extension
+            getdata('in.fits', 0)      # the primary header
+            getdata('in.fits', 2)      # the second extension
+            getdata('in.fits', ext=2)  # the second extension
 
         By name, i.e., ``EXTNAME`` value (if unique)::
 
-            >>> getdata('in.fits', 'sci')
-            >>> getdata('in.fits', extname='sci') # equivalent
+            getdata('in.fits', 'sci')
+            getdata('in.fits', extname='sci')  # equivalent
 
         Note ``EXTNAME`` values are not case sensitive
 
         By combination of ``EXTNAME`` and EXTVER`` as separate
         arguments or as a tuple::
 
-            >>> getdata('in.fits', 'sci', 2) # EXTNAME='SCI' & EXTVER=2
-            >>> getdata('in.fits', extname='sci', extver=2) # equivalent
-            >>> getdata('in.fits', ('sci', 2)) # equivalent
+            getdata('in.fits', 'sci', 2)  # EXTNAME='SCI' & EXTVER=2
+            getdata('in.fits', extname='sci', extver=2)  # equivalent
+            getdata('in.fits', ('sci', 2))  # equivalent
 
         Ambiguous or conflicting specifications will raise an exception::
 
-            >>> getdata('in.fits', ext=('sci',1), extname='err', extver=2)
+            getdata('in.fits', ext=('sci',1), extname='err', extver=2)
 
     header : bool (optional)
         If `True`, return the data and the header of the specified HDU as a
@@ -250,7 +250,7 @@ def getval(filename, keyword, *args, **kwargs):
 
     Returns
     -------
-    keyword value : string, integer, or float
+    keyword value : str, int, or float
     """
 
     if 'do_not_scale_image_data' not in kwargs:
@@ -431,7 +431,7 @@ def append(filename, data, header=None, checksum=False, verify=True, **kwargs):
         When `True` adds both ``DATASUM`` and ``CHECKSUM`` cards to
         the header of the HDU when written to the file.
 
-    verify: bool (optional)
+    verify : bool (optional)
         When `True`, the existing FITS file will be read in to verify
         it for correctness before appending.  When `False`, content is
         simply appended to the end of the file.  Setting *verify* to
@@ -497,12 +497,12 @@ def update(filename, data, *args, **kwargs):
         assumed to be the extension specification(s).  Header and
         extension specs can also be keyword arguments.  For example::
 
-            >>> update(file, dat, hdr, 'sci')  # update the 'sci' extension
-            >>> update(file, dat, 3)  # update the 3rd extension
-            >>> update(file, dat, hdr, 3)  # update the 3rd extension
-            >>> update(file, dat, 'sci', 2)  # update the 2nd SCI extension
-            >>> update(file, dat, 3, header=hdr)  # update the 3rd extension
-            >>> update(file, dat, header=hdr, ext=5) # update the 5th extension
+            update(file, dat, hdr, 'sci')  # update the 'sci' extension
+            update(file, dat, 3)  # update the 3rd extension
+            update(file, dat, hdr, 3)  # update the 3rd extension
+            update(file, dat, 'sci', 2)  # update the 2nd SCI extension
+            update(file, dat, 3, header=hdr)  # update the 3rd extension
+            update(file, dat, header=hdr, ext=5)  # update the 5th extension
 
     kwargs
         Any additional keyword arguments to be passed to
@@ -555,7 +555,7 @@ def info(filename, output=None, **kwargs):
         *Note:* This function sets ``ignore_missing_end=True`` by default.
     """
 
-    mode, closed = _get_file_mode(filename, default='copyonwrite')
+    mode, closed = _get_file_mode(filename, default='readonly')
     # Set the default value for the ignore_missing_end parameter
     if not 'ignore_missing_end' in kwargs:
         kwargs['ignore_missing_end'] = True
@@ -613,12 +613,14 @@ def tabledump(filename, datafile=None, cdfile=None, hfile=None, ext=1,
     # and leave the file in the same state (opened or closed) as when
     # the function was called
 
-    mode, closed = _get_file_mode(filename, default='copyonwrite')
+    mode, closed = _get_file_mode(filename, default='readonly')
     f = fitsopen(filename, mode=mode)
 
     # Create the default data file name if one was not provided
 
     if not datafile:
+        # TODO: Really need to provide a better way to access the name of any
+        # files underlying an HDU
         root, tail = os.path.splitext(f._HDUList__file.name)
         datafile = root + '_' + repr(ext) + '.txt'
 
@@ -723,12 +725,12 @@ def _getext(filename, mode, *args, **kwargs):
         raise TypeError('Too many positional arguments.')
 
     if (ext is not None and
-        not (_is_int(ext) or
-             (isinstance(ext, tuple) and len(ext) == 2 and
-              isinstance(ext[0], basestring) and _is_int(ext[1])))):
-            raise ValueError(
-                'The ext keyword must be either an extension number '
-                '(zero-indexed) or a (extname, extver) tuple.')
+            not (_is_int(ext) or
+                 (isinstance(ext, tuple) and len(ext) == 2 and
+                  isinstance(ext[0], basestring) and _is_int(ext[1])))):
+        raise ValueError(
+            'The ext keyword must be either an extension number '
+            '(zero-indexed) or a (extname, extver) tuple.')
     if extname is not None and not isinstance(extname, basestring):
         raise ValueError('The extname argument must be a string.')
     if extver is not None and not _is_int(extver):
@@ -785,8 +787,7 @@ def _stat_filename_or_fileobj(filename):
     return name, closed, noexist_or_empty
 
 
-# TODO: Replace this with fileobj_mode
-def _get_file_mode(filename, default='copyonwrite'):
+def _get_file_mode(filename, default='readonly'):
     """
     Allow file object to already be opened in any of the valid modes and
     and leave the file in the same state (opened or closed) as when
@@ -794,23 +795,14 @@ def _get_file_mode(filename, default='copyonwrite'):
     """
 
     mode = default
-    closed = True
-
-    if hasattr(filename, 'closed'):
-        closed = filename.closed
-    elif hasattr(filename, 'fileobj') and filename.fileobj is not None:
-        closed = filename.fileobj.closed
-
-    if (isfile(filename) or
-        isinstance(filename, gzip.GzipFile) and not closed):
-        if isinstance(filename, gzip.GzipFile):
-            file_mode = filename.fileobj.mode
-        else:
-            file_mode = filename.mode
+    closed = fileobj_closed(filename)
 
-        for key, val in PYTHON_MODES.iteritems():
-            if val == file_mode:
-                mode = key
-                break
+    fmode = fileobj_mode(filename)
+    if fmode is not None:
+        mode = FILE_MODES.get(fmode)
+        if mode is None:
+            raise IOError(
+                "File mode of the input file object (%r) cannot be used to "
+                "read/write FITS files." % fmode)
 
     return mode, closed
diff --git a/astropy/io/fits/diff.py b/astropy/io/fits/diff.py
index 1d58e91..acefb2a 100644
--- a/astropy/io/fits/diff.py
+++ b/astropy/io/fits/diff.py
@@ -13,28 +13,22 @@ import functools
 import glob
 import inspect
 import io
-import os
 import textwrap
 
 from collections import defaultdict
 from itertools import islice, izip
 
-try:
-    from functools import reduce
-except ImportError:
-    # Python versions (i.e. 2.5) that don't have functools.reduce will have the
-    # reduce() builtin
-    pass
-
 import numpy as np
-from numpy import char
 
 from ... import __version__
+from ...extern.six.moves import reduce
+from ...utils import indent
 from .card import Card, BLANK_CARD
 from .header import Header
-from .hdu.hdulist import fitsopen
+# HDUList is used in one of the doctests
+from .hdu.hdulist import fitsopen, HDUList  # pylint: disable=W0611
 from .hdu.table import _TableLikeHDU
-from .util import indent, u
+from .util import u
 
 
 __all__ = ['FITSDiff', 'HDUDiff', 'HeaderDiff', 'ImageDataDiff', 'RawDataDiff',
@@ -99,9 +93,11 @@ class _BaseDiff(object):
 
         For example::
 
-            >>> fd = FITSDiff('a.fits', 'b.fits', ignore_keywords=['*'])
-            >>> hd = HeaderDiff.fromdiff(fd, header_a, header_b)
-            >>> hd.ignore_keywords
+            >>> hdul1, hdul2 = HDUList(), HDUList()
+            >>> headera, headerb = Header(), Header()
+            >>> fd = FITSDiff(hdul1, hdul2, ignore_keywords=['*'])
+            >>> hd = HeaderDiff.fromdiff(fd, headera, headerb)
+            >>> list(hd.ignore_keywords)
             ['*']
         """
 
@@ -357,6 +353,9 @@ class HDUDiff(_BaseDiff):
     - `diff_extvers`: If the two HDUS have different EXTVER values, this
       contains a 2-tuple of the different extension versions.
 
+    - `diff_extlevels`: If the two HDUs have different EXTLEVEL values, this
+      contains a 2-tuple of the different extension levels.
+
     - `diff_extension_types`: If the two HDUs have different XTENSION values,
       this contains a 2-tuple of the different extension types.
 
@@ -387,6 +386,7 @@ class HDUDiff(_BaseDiff):
 
         self.diff_extnames = ()
         self.diff_extvers = ()
+        self.diff_extlevels = ()
         self.diff_extension_types = ()
         self.diff_headers = None
         self.diff_data = None
@@ -397,12 +397,11 @@ class HDUDiff(_BaseDiff):
         if self.a.name != self.b.name:
             self.diff_extnames = (self.a.name, self.b.name)
 
-        # TODO: All extension headers should have a .extver attribute;
-        # currently they have a hidden ._extver attribute, but there's no
-        # reason it should be hidden
-        if self.a.header.get('EXTVER') != self.b.header.get('EXTVER'):
-            self.diff_extvers = (self.a.header.get('EXTVER'),
-                                 self.b.header.get('EXTVER'))
+        if self.a.ver != self.b.ver:
+            self.diff_extvers = (self.a.ver, self.b.ver)
+
+        if self.a.level != self.b.level:
+            self.diff_extlevels = (self.a.level, self.b.level)
 
         if self.a.header.get('XTENSION') != self.b.header.get('XTENSION'):
             self.diff_extension_types = (self.a.header.get('XTENSION'),
@@ -441,6 +440,10 @@ class HDUDiff(_BaseDiff):
             self._writeln(u(" Extension versions differ:\n  a: %s\n  b: %s") %
                           self.diff_extvers)
 
+        if self.diff_extlevels:
+            self._writeln(" Extension levels differ:\n  a: %s\n  b: %s" %
+                          self.diff_extlevels)
+
         if not self.diff_headers.identical:
             self._fileobj.write(u('\n'))
             self._writeln(u(" Headers contain differences:"))
diff --git a/astropy/io/fits/file.py b/astropy/io/fits/file.py
index 677f3fd..c88b641 100644
--- a/astropy/io/fits/file.py
+++ b/astropy/io/fits/file.py
@@ -1,12 +1,10 @@
 # Licensed under a 3-clause BSD style license - see PYFITS.rst
 
-from __future__ import division
-from __future__ import with_statement
+from __future__ import division, with_statement
 
 import gzip
 import mmap
 import os
-import sys
 import tempfile
 import urllib
 import warnings
@@ -18,13 +16,39 @@ from numpy import memmap as Memmap
 from .util import (isreadable, iswritable, isfile, fileobj_open, fileobj_name,
                    fileobj_closed, fileobj_mode, _array_from_file,
                    _array_to_file, _write_string, b)
-from ...utils import deprecated
+from ...utils.exceptions import AstropyUserWarning
+
+
+# Maps PyFITS-specific file mode names to the appropriate file modes to use
+# for the underlying raw files
+# TODO: This should probably renamed IO_FITS_MODES or something, but since it's
+# used primarily internally I'm going to leave PYFITS in the name for now for
+# in the off chance any third-party software is trying to do anything with this
+# object.
+PYFITS_MODES = {
+    'readonly': 'rb',
+    'copyonwrite': 'rb',
+    'update': 'rb+',
+    'append': 'ab+',
+    'ostream': 'wb',
+    'denywrite': 'rb'}
+
+# This is the old name of the PYFITS_MODES dict; it is maintained here for
+# backwards compatibility and should be removed no sooner than PyFITS 3.4
+PYTHON_MODES = PYFITS_MODES
+
+# Maps OS-level file modes to the appropriate PyFITS specific mode to use
+# when given file objects but no mode specified; obviously in PYFITS_MODES
+# there are overlaps; for example 'readonly' and 'denywrite' both require
+# the file to be opened in 'rb' mode.  But 'readonly' is the default
+# behavior for such files if not otherwise specified.
+# Note: 'ab' is only supported for 'ostream' which is output-only.
+FILE_MODES = {
+    'rb': 'readonly', 'rb+': 'update',
+    'wb': 'ostream', 'wb+': 'update',
+    'ab': 'ostream', 'ab+': 'append'}
 
 
-# File object open modes
-PYTHON_MODES = {'readonly': 'rb', 'copyonwrite': 'rb', 'update': 'rb+',
-                'append': 'ab+', 'ostream': 'wb', 'denywrite': 'rb'}
-
 # readonly actually uses copyonwrite for mmap so that readonly without mmap and
 # with mmap still have to same behavior with regard to updating the array.  To
 # get a truly readonly mmap use denywrite
@@ -52,10 +76,11 @@ class _File(object):
     # See self._test_mmap
     _mmap_available = None
 
-    def __init__(self, fileobj=None, mode='readonly', memmap=False):
+    def __init__(self, fileobj=None, mode=None, memmap=False, clobber=False):
         if fileobj is None:
             self.__file = None
             self.closed = False
+            self.binary = True
             self.mode = mode
             self.memmap = memmap
             self.compression = None
@@ -66,20 +91,35 @@ class _File(object):
         else:
             self.simulateonly = False
 
-        if mode not in PYTHON_MODES:
+        if mode is None:
+            if _is_random_access_file_backed(fileobj):
+                fmode = fileobj_mode(fileobj)
+                # If the mode is unsupported just leave it as None; we'll
+                # catch this case below
+                mode = FILE_MODES.get(fmode)
+            else:
+                mode = 'readonly'  # The default
+
+        if mode not in PYFITS_MODES:
             raise ValueError("Mode '%s' not recognized" % mode)
 
-        if (isinstance(fileobj, basestring) and mode != 'append' and
-            not os.path.exists(fileobj) and
-            not os.path.splitdrive(fileobj)[0]):
-                #
-                # Not writing file and file does not exist on local machine and
-                # name does not begin with a drive letter (Windows), try to
-                # get it over the web.
-                #
+        if (isinstance(fileobj, basestring) and
+                mode not in ('ostream', 'append') and
+                not os.path.exists(fileobj)):
+
+            # Not writing file and file does not exist on local machine and
+            # name does not begin with a drive letter (Windows), try to get it
+            # over the web.
             try:
-                self.name, _ = urllib.urlretrieve(fileobj)
-            except (TypeError, ValueError):
+                if not os.path.splitdrive(fileobj)[0]:
+                    # Basically if the filename (on Windows anyways) doesn't
+                    # have a drive letter try to open it as a URL
+                    self.name, _ = urllib.urlretrieve(fileobj)
+                else:
+                    # Otherwise the file was already not found so just raise
+                    # a ValueError
+                    raise ValueError("File not found")
+            except (TypeError, ValueError, IOError):
                 # A couple different exceptions can occur here when passing a
                 # filename into urlretrieve in Python 3
                 raise IOError('File does not exist: %r' % fileobj)
@@ -87,6 +127,7 @@ class _File(object):
             self.name = fileobj_name(fileobj)
 
         self.closed = False
+        self.binary = True
         self.mode = mode
         self.memmap = memmap
 
@@ -99,12 +140,12 @@ class _File(object):
         self.writeonly = False
 
         # Initialize the internal self.__file object
-        if isfile(fileobj) or isinstance(fileobj, gzip.GzipFile):
-            self._open_fileobj(fileobj, mode)
+        if _is_random_access_file_backed(fileobj):
+            self._open_fileobj(fileobj, mode, clobber)
         elif isinstance(fileobj, basestring):
-            self._open_filename(fileobj, mode)
+            self._open_filename(fileobj, mode, clobber)
         else:
-            self._open_filelike(fileobj, mode)
+            self._open_filelike(fileobj, mode, clobber)
 
         if isinstance(fileobj, gzip.GzipFile):
             self.compression = 'gzip'
@@ -151,12 +192,6 @@ class _File(object):
     def __exit__(self, type, value, traceback):
         self.close()
 
-    @deprecated('3.0', message='This method should not be treated as public.')
-    def getfile(self):
-        """Will be going away as soon as I figure out how."""
-
-        return self.__file
-
     def readable(self):
         if self.writeonly:
             return False
@@ -165,7 +200,15 @@ class _File(object):
     def read(self, size=None):
         if not hasattr(self.__file, 'read'):
             raise EOFError
-        return self.__file.read(size)
+        try:
+            return self.__file.read(size)
+        except IOError:
+            # On some versions of Python, it appears, GzipFile will raise an
+            # IOError if you try to read past its end (as opposed to just
+            # returning '')
+            if self.compression == 'gzip':
+                return ''
+            raise
 
     def readarray(self, size=None, offset=0, dtype=np.uint8, shape=None):
         """
@@ -203,7 +246,7 @@ class _File(object):
 
         if not (size or shape):
             warnings.warn('No size or shape given to readarray(); assuming a '
-                          'shape of (1,)')
+                          'shape of (1,)', AstropyUserWarning)
             shape = (1,)
 
         if self.memmap:
@@ -263,7 +306,7 @@ class _File(object):
         if self.size and pos > self.size:
             warnings.warn('File may have been truncated: actual file length '
                           '(%i) is smaller than the expected size (%i)' %
-                          (self.size, pos))
+                          (self.size, pos), AstropyUserWarning)
 
     def tell(self):
         if not hasattr(self.__file, 'tell'):
@@ -284,31 +327,65 @@ class _File(object):
 
         self.closed = True
 
-    def _open_fileobj(self, fileobj, mode):
+    def _overwrite_existing(self, clobber, fileobj, closed):
+        """Overwrite an existing file if ``clobber`` is ``True``, otherwise
+        raise an IOError.  The exact behavior of this method depends on the
+        _File object state and is only meant for use within the ``_open_*``
+        internal methods.
+        """
+
+        # The file will be overwritten...
+        if ((self.file_like and
+                (hasattr(fileobj, 'len') and fileobj.len > 0)) or
+                (os.path.exists(self.name) and
+                 os.path.getsize(self.name) != 0)):
+            if clobber:
+                warnings.warn("Overwriting existing file %r." % self.name,
+                              AstropyUserWarning)
+                if self.file_like and hasattr(fileobj, 'truncate'):
+                    fileobj.truncate(0)
+                else:
+                    if not closed:
+                        fileobj.close()
+                    os.remove(self.name)
+            else:
+                raise IOError("File %r already exists." % self.name)
+
+    def _open_fileobj(self, fileobj, mode, clobber):
         """Open a FITS file from a file object or a GzipFile object."""
 
         closed = fileobj_closed(fileobj)
-        fmode = fileobj_mode(fileobj) or PYTHON_MODES[mode]
+        fmode = fileobj_mode(fileobj) or PYFITS_MODES[mode]
+
+        if mode == 'ostream':
+            self._overwrite_existing(clobber, fileobj, closed)
 
         if not closed:
-            # In some cases (like on Python 3) a file opened for appending
-            # still shows a mode of 'r+', hence the extra check for the append
-            # case
-            if ((mode == 'append' and fmode not in ('ab+', 'rb+')) or
-                (mode != 'append' and PYTHON_MODES[mode] != fmode)):
+            # Although we have a specific mapping in PYFITS_MODES from our
+            # custom file modes to raw file object modes, many of the latter
+            # can be used appropriately for the former.  So determine whether
+            # the modes match up appropriately
+            if ((mode in ('readonly', 'denywrite', 'copyonwrite') and
+                    not ('r' in fmode or '+' in fmode)) or
+                    (mode == 'append' and fmode not in ('ab+', 'rb+')) or
+                    (mode == 'ostream' and
+                     not ('w' in fmode or 'a' in fmode or '+' in fmode)) or
+                    (mode == 'update' and fmode not in ('rb+', 'wb+'))):
                 raise ValueError(
-                    "Input mode '%s' (%s) does not match mode of the "
-                    "input file (%s)." % (mode, PYTHON_MODES[mode], fmode))
+                    "Mode argument '%s' does not match mode of the input "
+                    "file (%s)." % (mode, fmode))
             self.__file = fileobj
         elif isfile(fileobj):
-            self.__file = fileobj_open(self.name, PYTHON_MODES[mode])
+            self.__file = fileobj_open(self.name, PYFITS_MODES[mode])
+        else:
+            self.__file = gzip.open(self.name, PYFITS_MODES[mode])
+
+        if fmode == 'ab+':
             # Return to the beginning of the file--in Python 3 when opening in
             # append mode the file pointer is at the end of the file
             self.__file.seek(0)
-        else:
-            self.__file = gzip.open(self.name, PYTHON_MODES[mode])
 
-    def _open_filelike(self, fileobj, mode):
+    def _open_filelike(self, fileobj, mode, clobber):
         """Open a FITS file from a file-like object, i.e. one that has
         read and/or write methods.
         """
@@ -316,54 +393,62 @@ class _File(object):
         self.file_like = True
         self.__file = fileobj
 
+        if fileobj_closed(fileobj):
+            raise IOError("Cannot read from/write to a closed file-like "
+                          "object (%r)." % fileobj)
+
+        if isinstance(fileobj, zipfile.ZipFile):
+            self._open_zipfile(fileobj, mode)
+            self.__file.seek(0)
+            # We can bypass any additional checks at this point since now
+            # self.__file points to the temp file extracted from the zip
+            return
+
         # If there is not seek or tell methods then set the mode to
         # output streaming.
         if (not hasattr(self.__file, 'seek') or
             not hasattr(self.__file, 'tell')):
             self.mode = mode = 'ostream'
 
-        if (self.mode in ('copyonwrite', 'update', 'append') and
+        if mode == 'ostream':
+            self._overwrite_existing(clobber, fileobj, False)
+
+        # Any "writeable" mode requires a write() method on the file object
+        if (self.mode in ('update', 'append', 'ostream') and
             not hasattr(self.__file, 'write')):
             raise IOError("File-like object does not have a 'write' "
                           "method, required for mode '%s'."
                           % self.mode)
 
-        if (self.mode in ('readonly', 'denywrite') and
-            not hasattr(self.__file, 'read')):
+        # Any mode except for 'ostream' requires readability
+        if self.mode != 'ostream' and not hasattr(self.__file, 'read'):
             raise IOError("File-like object does not have a 'read' "
                           "method, required for mode %r."
                           % self.mode)
 
-    def _open_filename(self, filename, mode):
+    def _open_filename(self, filename, mode, clobber):
         """Open a FITS file from a filename string."""
 
+        if mode == 'ostream':
+            self._overwrite_existing(clobber, None, True)
+
         if os.path.exists(self.name):
             with fileobj_open(self.name, 'rb') as f:
                 magic = f.read(4)
         else:
             magic = b('')
+
         ext = os.path.splitext(self.name)[1]
+
         if ext == '.gz' or magic.startswith(GZIP_MAGIC):
             # Handle gzip files
-            self.__file = gzip.open(self.name, PYTHON_MODES[mode])
+            self.__file = gzip.open(self.name, PYFITS_MODES[mode])
             self.compression = 'gzip'
         elif ext == '.zip' or magic.startswith(PKZIP_MAGIC):
             # Handle zip files
-            if mode in ['update', 'append']:
-                raise IOError(
-                      "Writing to zipped fits files is not currently "
-                      "supported")
-            zfile = zipfile.ZipFile(self.name)
-            namelist = zfile.namelist()
-            if len(namelist) != 1:
-                raise IOError(
-                  "Zip files with multiple members are not supported.")
-            self.__file = tempfile.NamedTemporaryFile(suffix='.fits')
-            self.__file.write(zfile.read(namelist[0]))
-            zfile.close()
-            self.compression = 'zip'
+            self._open_zipfile(self.name, mode)
         else:
-            self.__file = fileobj_open(self.name, PYTHON_MODES[mode])
+            self.__file = fileobj_open(self.name, PYFITS_MODES[mode])
             # Make certain we're back at the beginning of the file
         self.__file.seek(0)
 
@@ -388,14 +473,15 @@ class _File(object):
                 mm = mmap.mmap(tmpfd, 1, access=mmap.ACCESS_WRITE)
             except mmap.error as e:
                 warnings.warn('Failed to create mmap: %s; mmap use will be '
-                              'disabled' % str(e))
+                              'disabled' % str(e), AstropyUserWarning)
                 _File._mmap_available = False
                 return False
             try:
                 mm.flush()
             except mmap.error:
                 warnings.warn('mmap.flush is unavailable on this platform; '
-                              'using mmap in writeable mode will be disabled')
+                              'using mmap in writeable mode will be disabled',
+                              AstropyUserWarning)
                 _File._mmap_available = False
                 return False
             finally:
@@ -406,3 +492,44 @@ class _File(object):
 
         _File._mmap_available = True
         return True
+
+    def _open_zipfile(self, fileobj, mode):
+        """Limited support for zipfile.ZipFile objects containing a single
+        a file.  Allows reading only for now by extracting the file to a
+        tempfile.
+        """
+
+        if mode in ('update', 'append'):
+            raise IOError(
+                  "Writing to zipped fits files is not currently "
+                  "supported")
+
+        if not isinstance(fileobj, zipfile.ZipFile):
+            zfile = zipfile.ZipFile(fileobj)
+            close = True
+        else:
+            zfile = fileobj
+            close = False
+
+        namelist = zfile.namelist()
+        if len(namelist) != 1:
+            raise IOError(
+              "Zip files with multiple members are not supported.")
+        self.__file = tempfile.NamedTemporaryFile(suffix='.fits')
+        self.__file.write(zfile.read(namelist[0]))
+
+        if close:
+            zfile.close()
+        self.compression = 'zip'
+
+
+def _is_random_access_file_backed(fileobj):
+    """Returns `True` if fileobj is a `file` or `io.FileIO` object or a
+    `gzip.GzipFile` object.
+
+    Although reading from a zip file is supported, this does not include
+    support for random access, and we do not yet support reading directly
+    from an already opened `zipfile.ZipFile` object.
+    """
+
+    return isfile(fileobj) or isinstance(fileobj, gzip.GzipFile)
diff --git a/astropy/io/fits/fitsrec.py b/astropy/io/fits/fitsrec.py
index 68d590a..99088c2 100644
--- a/astropy/io/fits/fitsrec.py
+++ b/astropy/io/fits/fitsrec.py
@@ -1,18 +1,21 @@
 # Licensed under a 3-clause BSD style license - see PYFITS.rst
 
+import copy
 import operator
-import sys
 import warnings
 import weakref
 
 import numpy as np
 
-from .column import (ASCIITNULL, FITS2NUMPY, Column, ColDefs,
-                     _FormatX, _FormatP, _VLF, _get_index, _wrapx, _unwrapx,
-                     _convert_ascii_format)
-from .util import _array_from_file, decode_ascii
+from numpy import char as chararray
 
+from .column import (ASCIITNULL, FITS2NUMPY, ASCII2NUMPY, ASCII2STR, ColDefs,
+                     _AsciiColDefs, _FormatX, _FormatP, _VLF, _get_index,
+                     _wrapx, _unwrapx, _makep, _convert_ascii_format, Delayed)
+
+from .util import decode_ascii
 from ...utils import lazyproperty
+from ...utils.exceptions import AstropyDeprecationWarning, AstropyUserWarning
 
 
 class FITS_record(object):
@@ -49,7 +52,7 @@ class FITS_record(object):
         for arg in [('startColumn', 'start'), ('endColumn', 'end')]:
             if arg[0] in kwargs:
                 warnings.warn('The %s argument to FITS_record is deprecated; '
-                              'use %s instead' % arg, DeprecationWarning)
+                              'use %s instead' % arg, AstropyDeprecationWarning)
                 if arg[0] == 'startColumn':
                     start = kwargs[arg[0]]
                 elif arg[0] == 'endColumn':
@@ -179,10 +182,9 @@ class FITS_rec(np.recarray):
         self._convert = [None] * len(self.dtype.names)
         self._heapoffset = 0
         self._heapsize = 0
-        self._file = None
-        self._buffer = None
         self._coldefs = None
         self._gap = 0
+        self._uint = False
         self.names = list(self.dtype.names)
         self.formats = None
         return self
@@ -195,11 +197,10 @@ class FITS_rec(np.recarray):
             self._convert = obj._convert
             self._heapoffset = obj._heapoffset
             self._heapsize = obj._heapsize
-            self._file = obj._file
-            self._buffer = obj._buffer
             self._coldefs = obj._coldefs
             self._nfields = obj._nfields
             self._gap = obj._gap
+            self._uint = obj._uint
             self.names = obj.names
             self.formats = obj.formats
         else:
@@ -210,11 +211,10 @@ class FITS_rec(np.recarray):
 
             self._heapoffset = getattr(obj, '_heapoffset', 0)
             self._heapsize = getattr(obj, '_heapsize', 0)
-            self._file = getattr(obj, '_file', None)
-            self._buffer = getattr(obj, '_buffer', None)
 
             self._coldefs = None
-            self._gap = 0
+            self._gap = getattr(obj, '_gap', 0)
+            self._uint = getattr(obj, '_uint', False)
 
             # Bypass setattr-based assignment to fields; see #86
             self.names = list(obj.dtype.names)
@@ -225,13 +225,193 @@ class FITS_rec(np.recarray):
                 if hasattr(obj, attr):
                     value = getattr(obj, attr, None)
                     if value is None:
-                        warnings.warn('Setting attribute %s as None' % attr)
+                        warnings.warn('Setting attribute %s as None' % attr, AstropyUserWarning)
                     setattr(self, attr, value)
 
             if self._coldefs is None:
                 self._coldefs = ColDefs(self)
             self.formats = self._coldefs.formats
 
+    @classmethod
+    def from_columns(cls, columns, nrows=0, fill=False):
+        """
+        Given a ColDefs object of unknown origin, initialize a new FITS_rec
+        object.
+
+        This was originally part of the new_table function in the table module
+        but was moved into a class method since most of its functionality
+        always had more to do with initializing a FITS_rec object than anything
+        else, and much of it also overlapped with FITS_rec._scale_back.
+
+        Parameters
+        ----------
+        columns : sequence of Columns or a ColDefs
+            The columns from which to create the table data.  If these
+            columns have data arrays attached that data may be used in
+            initializing the new table.  Otherwise the input columns
+            will be used as a template for a new table with the requested
+            number of rows.
+
+        nrows : int
+            Number of rows in the new table.  If the input columns have data
+            associated with them, the size of the largest input column is used.
+            Otherwise the default is 0.
+
+        fill : bool
+            If `True`, will fill all cells with zeros or blanks.  If
+            `False`, copy the data from input, undefined cells will still
+            be filled with zeros/blanks.
+        """
+
+        # read the delayed data
+        for idx in range(len(columns)):
+            arr = columns._arrays[idx]
+            if isinstance(arr, Delayed):
+                if arr.hdu.data is None:
+                    columns._arrays[idx] = None
+                else:
+                    columns._arrays[idx] = np.rec.recarray.field(arr.hdu.data,
+                                                                 arr.field)
+
+        # use the largest column shape as the shape of the record
+        if nrows == 0:
+            for arr in columns._arrays:
+                if arr is not None:
+                    dim = arr.shape[0]
+                else:
+                    dim = 0
+                if dim > nrows:
+                    nrows = dim
+
+        raw_data = np.empty(columns.dtype.itemsize * nrows, dtype=np.uint8)
+        raw_data.fill(ord(columns._padding_byte))
+        data = np.recarray(nrows, dtype=columns.dtype, buf=raw_data).view(cls)
+
+        # Previously this assignment was made from hdu.columns, but that's a
+        # bug since if a _TableBaseHDU has a FITS_rec in its .data attribute
+        # the _TableBaseHDU.columns property is actually returned from
+        # .data._coldefs, so this assignment was circular!  Don't make that
+        # mistake again.
+        # All of this is an artifact of the fragility of the FITS_rec class,
+        # and that it can't just be initialized by columns...
+        data._coldefs = columns
+        data.formats = columns.formats
+
+        # If fill is True we don't copy anything from the column arrays.  We're
+        # just using them as a template, and returning a table filled with
+        # zeros/blanks
+        if fill:
+            return data
+
+        # Otherwise we have to fill the recarray with data from the input
+        # columns
+        for idx in range(len(columns)):
+            # For each column in the ColDef object, determine the number of
+            # rows in that column.  This will be either the number of rows in
+            # the ndarray associated with the column, or the number of rows
+            # given in the call to this function, which ever is smaller.  If
+            # the input FILL argument is true, the number of rows is set to
+            # zero so that no data is copied from the original input data.
+            arr = columns._arrays[idx]
+
+            if arr is None:
+                array_size = 0
+            else:
+                array_size = len(arr)
+
+            n = min(array_size, nrows)
+
+            # TODO: At least *some* of this logic is mostly redundant with the
+            # _convert_foo methods in this class; see if we can eliminate some
+            # of that duplication.
+
+            if not n:
+                # The input column had an empty array, so just use the fill
+                # value
+                continue
+
+            field = np.rec.recarray.field(data, idx)
+            fitsformat = columns.formats[idx]
+            recformat = columns._recformats[idx]
+
+            outarr = field[:n]
+            inarr = arr[:n]
+
+            if isinstance(recformat, _FormatX):
+                # Data is a bit array
+                if inarr.shape[-1] == recformat.repeat:
+                    _wrapx(inarr, outarr, recformat.repeat)
+                    continue
+            elif isinstance(recformat, _FormatP):
+                data._convert[idx] = _makep(inarr, field, recformat,
+                                            nrows=nrows)
+                continue
+            # TODO: Find a better way of determining that the column is meant
+            # to be FITS L formatted
+            elif recformat[-2:] == FITS2NUMPY['L'] and inarr.dtype == bool:
+                # column is boolean
+                # The raw data field should be filled with either 'T' or 'F'
+                # (not 0).  Use 'F' as a default
+                field[:] = ord('F')
+                # Also save the original boolean array in data._converted so
+                # that it doesn't have to be re-converted
+                data._convert[idx] = np.zeros(field.shape, dtype=bool)
+                data._convert[idx][:n] = inarr
+                # TODO: Maybe this step isn't necessary at all if _scale_back
+                # will handle it?
+                inarr = np.where(inarr == False, ord('F'), ord('T'))
+            elif (columns[idx]._physical_values and
+                    columns[idx]._pseudo_unsigned_ints):
+                # Temporary hack...
+                bzero = columns[idx].bzero
+                data._convert[idx] = np.zeros(field.shape, dtype=inarr.dtype)
+                data._convert[idx][:n] = inarr
+                if n < nrows:
+                    # Pre-scale rows below the input data
+                    field[n:] = -bzero
+
+                inarr = inarr - bzero
+            elif isinstance(columns, _AsciiColDefs):
+                # Regardless whether the format is character or numeric, if the
+                # input array contains characters then it's already in the raw
+                # format for ASCII tables
+                if fitsformat._pseudo_logical:
+                    # Hack to support converting from 8-bit T/F characters
+                    # Normally the column array is a chararray of 1 character
+                    # strings, but we need to view it as a normal ndarray of
+                    # 8-bit ints to fill it with ASCII codes for 'T' and 'F'
+                    outarr = field.view(np.uint8, np.ndarray)[:n]
+                elif not isinstance(arr, chararray.chararray):
+                    # Fill with the appropriate blanks for the column format
+                    data._convert[idx] = np.zeros(nrows, dtype=arr.dtype)
+                    outarr = data._convert[idx][:n]
+
+                outarr[:] = inarr
+                continue
+
+            if inarr.shape != outarr.shape:
+                if inarr.dtype != outarr.dtype:
+                    inarr = inarr.view(outarr.dtype)
+
+                # This is a special case to handle input arrays with
+                # non-trivial TDIMn.
+                # By design each row of the outarray is 1-D, while each row of
+                # the input array may be n-D
+                if outarr.ndim > 1:
+                    # The normal case where the first dimension is the rows
+                    inarr_rowsize = inarr[0].size
+                    inarr = inarr.reshape((n, inarr_rowsize))
+                    outarr[:, :inarr_rowsize] = inarr
+                else:
+                    # Special case for strings where the out array only has one
+                    # dimension (the second dimension is rolled up into the
+                    # strings
+                    outarr[:n] = inarr.ravel()
+            else:
+                outarr[:] = inarr
+
+        return data
+
     def __repr__(self):
         return np.recarray.__repr__(self)
 
@@ -307,7 +487,7 @@ class FITS_rec(np.recarray):
         if isinstance(value, FITS_record):
             for idx in range(self._nfields):
                 self.field(self.names[idx])[row] = value.field(self.names[idx])
-        elif isinstance(value, (tuple, list)):
+        elif isinstance(value, (tuple, list, np.void)):
             if self._nfields == len(value):
                 for idx in range(self._nfields):
                     self.field(idx)[row] = value[idx]
@@ -324,6 +504,31 @@ class FITS_rec(np.recarray):
     def __setslice__(self, start, end, value):
         self[slice(start, end)] = value
 
+    def copy(self, order='C'):
+        """
+        The Numpy documentation lies; ndarray.copy is not equivalent to
+        np.copy.  Differences include that it re-views the copied array
+        as self's ndarray subclass, as though it were taking a slice;
+        this means __array_finalize__ is called and the copy shares all
+        the array attributes (including ._convert!).  So we need to make
+        a deep copy of all those attributes so that the two arrays truly do
+        not share any data.
+
+        Note: The ``order`` argument is unsupported in Numpy 1.5 and will be
+        ignored when used with that version.
+        """
+
+        try:
+            new = super(FITS_rec, self).copy(order=order)
+        except TypeError:
+            # This will probably occur if the order argument is not supported,
+            # such as on Numpy 1.5; in other words we're just going to ask
+            # forgiveness rather than check the Numpy version explicitly.
+            new = super(FITS_rec, self).copy()
+
+        new.__dict__ = copy.deepcopy(self.__dict__)
+        return new
+
     @property
     def columns(self):
         """
@@ -344,8 +549,8 @@ class FITS_rec(np.recarray):
         # contains a reference to the ._coldefs object of the original data;
         # this can lead to a circular reference; see ticket #49
         base = self
-        while isinstance(base, FITS_rec) and \
-                isinstance(base.base, np.recarray):
+        while (isinstance(base, FITS_rec) and
+                isinstance(base.base, np.recarray)):
             base = base.base
         # base could still be a FITS_rec in some cases, so take care to
         # use rec.recarray.field to avoid a potential infinite
@@ -353,141 +558,208 @@ class FITS_rec(np.recarray):
         field = np.recarray.field(base, indx)
 
         if self._convert[indx] is None:
-            # for X format
-            if isinstance(recformat, _FormatX):
-                _nx = recformat._nx
-                dummy = np.zeros(self.shape + (_nx,), dtype=np.bool_)
-                _unwrapx(field, dummy, _nx)
-                self._convert[indx] = dummy
-                return self._convert[indx]
+            if isinstance(recformat, _FormatP):
+                # for P format
+                converted = self._convert_p(indx, field, recformat)
+            else:
+                # Handle all other column data types which are fixed-width
+                # fields
+                converted = self._convert_other(indx, field, recformat)
 
-            (_str, _bool, _number, _scale, _zero, bscale, bzero, dim) = \
-                self._get_scale_factors(indx)
+            self._convert[indx] = converted
+            return converted
 
-            # for P format
-            buff = None
-            if isinstance(recformat, _FormatP):
-                dummy = _VLF([None] * len(self), dtype=recformat.dtype)
-                raw_data = self._get_raw_data()
-                if raw_data is None:
-                    raise IOError(
-                        "Could not find heap data for the %r variable-length "
-                        "array column." % self.names[indx])
-                for i in range(len(self)):
-                    offset = field[i, 1] + self._heapoffset
-                    count = field[i, 0]
-
-                    if recformat.dtype == 'a':
-                        dt = np.dtype(recformat.dtype + str(1))
-                        arr_len = count * dt.itemsize
-                        da = raw_data[offset:offset + arr_len].view(dt)
-                        da = np.char.array(da.view(dtype=dt), itemsize=count)
-                        dummy[i] = decode_ascii(da)
-                    else:
-                        dt = np.dtype(recformat.dtype)
-                        arr_len = count * dt.itemsize
-                        dummy[i] = raw_data[offset:offset + arr_len].view(dt)
-                        dummy[i].dtype = dummy[i].dtype.newbyteorder('>')
-
-                # scale by TSCAL and TZERO
-                if _scale or _zero:
-                    for i in range(len(self)):
-                        dummy[i][:] = dummy[i] * bscale + bzero
-
-                # Boolean (logical) column
-                if recformat.dtype == FITS2NUMPY['L']:
-                    for i in range(len(self)):
-                        dummy[i] = np.equal(dummy[i], ord('T'))
-
-                self._convert[indx] = dummy
-                return self._convert[indx]
-
-            # ASCII table, convert strings to numbers
-            if not _str and self._coldefs._tbtype == 'TableHDU':
-                _fmap = {'I': np.int32, 'F': np.float32, 'E': np.float32,
-                         'D': np.float64}
-                _type = _fmap[self._coldefs.formats[indx][0]]
-
-                # if the string = TNULL, return ASCIITNULL
-                nullval = self._coldefs.nulls[indx].strip().encode('ascii')
-                dummy = field.replace('D'.encode('ascii'),
-                                      'E'.encode('ascii'))
-                dummy = np.where(dummy.strip() == nullval, str(ASCIITNULL),
-                                 dummy)
-                try:
-                    dummy = np.array(dummy, dtype=_type)
-                except ValueError as e:
-                    raise ValueError(
-                        '%s; the header may be missing the necessary TNULL%d '
-                        'keyword or the table contains invalid data' %
-                        (e, indx + 1))
-
-                self._convert[indx] = dummy
+        return self._convert[indx]
+
+    def _convert_x(self, field, recformat):
+        """Convert a raw table column to a bit array as specified by the
+        FITS X format.
+        """
+
+        dummy = np.zeros(self.shape + (recformat.repeat,), dtype=np.bool_)
+        _unwrapx(field, dummy, recformat.repeat)
+        return dummy
+
+    def _convert_p(self, indx, field, recformat):
+        """Convert a raw table column of FITS P or Q format descriptors
+        to a VLA column with the array data returned from the heap.
+        """
+
+        dummy = _VLF([None] * len(self), dtype=recformat.dtype)
+        raw_data = self._get_raw_data()
+
+        if raw_data is None:
+            raise IOError(
+                "Could not find heap data for the %r variable-length "
+                "array column." % self.names[indx])
+
+        for idx in xrange(len(self)):
+            offset = field[idx, 1] + self._heapoffset
+            count = field[idx, 0]
+
+            if recformat.dtype == 'a':
+                dt = np.dtype(recformat.dtype + str(1))
+                arr_len = count * dt.itemsize
+                da = raw_data[offset:offset + arr_len].view(dt)
+                da = np.char.array(da.view(dtype=dt), itemsize=count)
+                dummy[idx] = decode_ascii(da)
             else:
-                dummy = field
-
-            # Test that the dimensions given in dim are sensible; otherwise
-            # display a warning and ignore them
-            if dim:
-                # See if the dimensions already match, if not, make sure the
-                # number items will fit in the specified dimensions
-                if dummy.ndim > 1:
-                    actual_shape = dummy[0].shape
-                    if _str:
-                        actual_shape = (dummy[0].itemsize,) + actual_shape
+                dt = np.dtype(recformat.dtype)
+                arr_len = count * dt.itemsize
+                dummy[idx] = raw_data[offset:offset + arr_len].view(dt)
+                dummy[idx].dtype = dummy[idx].dtype.newbyteorder('>')
+                # Each array in the field may now require additional
+                # scaling depending on the other scaling parameters
+                # TODO: The same scaling parameters apply to every
+                # array in the column so this is currently very slow; we
+                # really only need to check once whether any scaling will
+                # be necessary and skip this step if not
+                # TODO: Test that this works for X format; I don't think
+                # that it does--the recformat variable only applies to the P
+                # format not the X format
+                dummy[idx] = self._convert_other(indx, dummy[idx], recformat)
+
+        return dummy
+
+    def _convert_ascii(self, indx, field):
+        """Special handling for ASCII table columns to convert columns
+        containing numeric types to actual numeric arrays from the string
+        representation.
+        """
+
+        format = self._coldefs.formats[indx]
+        recformat = ASCII2NUMPY[format[0]]
+        # if the string = TNULL, return ASCIITNULL
+        nullval = str(self._coldefs.nulls[indx]).strip().encode('ascii')
+        if len(nullval) > format.width:
+            nullval = nullval[:format.width]
+        dummy = field.replace('D'.encode('ascii'), 'E'.encode('ascii'))
+        dummy = np.where(dummy.strip() == nullval, str(ASCIITNULL), dummy)
+
+        try:
+            dummy = np.array(dummy, dtype=recformat)
+        except ValueError as e:
+            raise ValueError(
+                '%s; the header may be missing the necessary TNULL%d '
+                'keyword or the table contains invalid data' % (e, indx + 1))
+
+        return dummy
+
+    def _convert_other(self, indx, field, recformat):
+        """Perform conversions on any other fixed-width column data types.
+
+        This may not perform any conversion at all if it's not necessary, in
+        which case the original column array is returned.
+        """
+
+        if isinstance(recformat, _FormatX):
+            # special handling for the X format
+            return self._convert_x(field, recformat)
+
+        (_str, _bool, _number, _scale, _zero, bscale, bzero, dim) = \
+            self._get_scale_factors(indx)
+
+        # ASCII table, convert strings to numbers
+        # TODO:
+        # For now, check that these are ASCII columns by checking the coldefs
+        # type; in the future all columns (for binary tables, ASCII tables, or
+        # otherwise) should "know" what type they are already and how to handle
+        # converting their data from FITS format to native format and vice
+        # versa...
+        if not _str and isinstance(self._coldefs, _AsciiColDefs):
+            field = self._convert_ascii(indx, field)
+
+        # Test that the dimensions given in dim are sensible; otherwise
+        # display a warning and ignore them
+        if dim:
+            # See if the dimensions already match, if not, make sure the
+            # number items will fit in the specified dimensions
+            if field.ndim > 1:
+                actual_shape = field[0].shape
+                if _str:
+                    actual_shape = (field[0].itemsize,) + actual_shape
+            else:
+                actual_shape = len(field[0])
+
+            if dim == actual_shape:
+                # The array already has the correct dimensions, so we
+                # ignore dim and don't convert
+                dim = None
+            else:
+                nitems = reduce(operator.mul, dim)
+                if _str:
+                    actual_nitems = field.itemsize
                 else:
-                    actual_shape = len(dummy[0])
-                if dim == actual_shape:
-                    # The array already has the correct dimensions, so we
-                    # ignore dim and don't convert
+                    actual_nitems = field.shape[1]
+                if nitems > actual_nitems:
+                    warnings.warn(
+                        'TDIM%d value %s does not fit with the size of '
+                        'the array items (%d).  TDIM%d will be ignored.'
+                        % (indx + 1, self._coldefs.dims[indx],
+                           actual_nitems, indx + 1))
                     dim = None
+
+        # further conversion for both ASCII and binary tables
+        # For now we've made columns responsible for *knowing* whether their
+        # data has been scaled, but we make the FITS_rec class responsible for
+        # actually doing the scaling
+        # TODO: This also needs to be fixed in the effort to make Columns
+        # responsible for scaling their arrays to/from FITS native values
+        column = self._coldefs[indx]
+        if (_number and (_scale or _zero) and not column._physical_values):
+            # This is to handle pseudo unsigned ints in table columns
+            # TODO: For now this only really works correctly for binary tables
+            # Should it work for ASCII tables as well?
+            if self._uint:
+                if bzero == 2**15 and 'I' in self._coldefs.formats[indx]:
+                    field = np.array(field, dtype=np.uint16)
+                elif bzero == 2**31 and 'J' in self._coldefs.formats[indx]:
+                    field = np.array(field, dtype=np.uint32)
+                elif bzero == 2**63 and 'K' in self._coldefs.formats[indx]:
+                    field = np.array(field, dtype=np.uint64)
+                    bzero64 = np.uint64(2 ** 63)
                 else:
-                    nitems = reduce(operator.mul, dim)
-                    if _str:
-                        actual_nitems = dummy.itemsize
-                    else:
-                        actual_nitems = dummy.shape[1]
-                    if nitems > actual_nitems:
+                    field = np.array(field, dtype=np.float64)
+            else:
+                field = np.array(field, dtype=np.float64)
+
+            if _scale:
+                np.multiply(field, bscale, field)
+            if _zero:
+                if self._uint and 'K' in self._coldefs.formats[indx]:
+                    # There is a chance of overflow, so be careful
+                    test_overflow = field.copy()
+                    try:
+                        test_overflow += bzero64
+                    except OverflowError:
                         warnings.warn(
-                            'TDIM%d value %s does not fit with the size of '
-                            'the array items (%d).  TDIM%d will be ignored.'
-                            % (indx + 1, self._coldefs.dims[indx],
-                               actual_nitems, indx + 1))
-                        dim = None
-
-            # further conversion for both ASCII and binary tables
-            if _number and (_scale or _zero):
-
-                # only do the scaling the first time and store it in _convert
-                self._convert[indx] = np.array(dummy, dtype=np.float64)
-                if _scale:
-                    np.multiply(self._convert[indx], bscale,
-                                self._convert[indx])
-                if _zero:
-                    self._convert[indx] += bzero
-            elif _bool and dummy.dtype != bool:
-                self._convert[indx] = np.equal(dummy, ord('T'))
-            elif _str:
-                try:
-                    self._convert[indx] = decode_ascii(dummy)
-                except UnicodeDecodeError:
-                    pass
-
-            if dim:
-                nitems = reduce(operator.mul, dim)
-                if self._convert[indx] is None:
-                    self._convert[indx] = dummy[:, :nitems]
-                if _str:
-                    fmt = self._convert[indx].dtype.char
-                    dtype = ('|%s%d' % (fmt, dim[-1]), dim[:-1])
-                    self._convert[indx].dtype = dtype
+                            "Overflow detected while applying TZERO{0:d}. "
+                            "Returning unscaled data.".format(indx))
+                    else:
+                        field = test_overflow
                 else:
-                    self._convert[indx].shape = (dummy.shape[0],) + dim
+                    field += bzero
+        elif _bool and field.dtype != bool:
+            field = np.equal(field, ord('T'))
+        elif _str:
+            try:
+                field = decode_ascii(field)
+            except UnicodeDecodeError:
+                pass
+
+        if dim:
+            # Apply the new field item dimensions
+            nitems = reduce(operator.mul, dim)
+            if field.ndim > 1:
+                field = field[:, :nitems]
+            if _str:
+                fmt = field.dtype.char
+                dtype = ('|%s%d' % (fmt, dim[-1]), dim[:-1])
+                field.dtype = dtype
+            else:
+                field.shape = (field.shape[0],) + dim
 
-        if self._convert[indx] is not None:
-            return self._convert[indx]
-        else:
-            return dummy
+        return field
 
     def _clone(self, shape):
         """
@@ -530,17 +802,20 @@ class FITS_rec(np.recarray):
         `indx` is the index of the field.
         """
 
-        if self._coldefs._tbtype == 'BinTableHDU':
+        if isinstance(self._coldefs, _AsciiColDefs):
+            _str = self._coldefs.formats[indx][0] == 'A'
+            _bool = False  # there is no boolean in ASCII table
+        else:
             _str = 'a' in self._coldefs._recformats[indx]
+            # TODO: Determine a better way to determine if the column is bool
+            # formatted
             _bool = self._coldefs._recformats[indx][-2:] == FITS2NUMPY['L']
-        else:
-            _str = self._coldefs.formats[indx][0] == 'A'
-            _bool = False             # there is no boolean in ASCII table
-        _number = not(_bool or _str)
+
+        _number = not (_bool or _str)
         bscale = self._coldefs.bscales[indx]
         bzero = self._coldefs.bzeros[indx]
-        _scale = bscale not in ['', None, 1]
-        _zero = bzero not in ['', None, 0]
+        _scale = bscale not in ('', None, 1)
+        _zero = bzero not in ('', None, 0)
         # ensure bscale/bzero are numbers
         if not _scale:
             bscale = 1
@@ -556,19 +831,6 @@ class FITS_rec(np.recarray):
         Update the parent array, using the (latest) scaled array.
         """
 
-        _fmap = {'A': 's', 'I': 'd', 'J': 'd', 'F': 'f', 'E': 'E', 'D': 'E'}
-        # calculate the starting point and width of each field for ASCII table
-        # TODO: Ick--fix this _tbtype usage eventually...
-        if self._coldefs._tbtype == 'TableHDU':
-            loc = self._coldefs.starts
-            widths = []
-
-            idx = 0
-            for idx in range(len(self.dtype.names)):
-                f = _convert_ascii_format(self._coldefs.formats[idx])
-                widths.append(f[1])
-            loc.append(loc[-1] + super(FITS_rec, self).field(idx).itemsize)
-
         for indx in range(len(self.dtype.names)):
             recformat = self._coldefs._recformats[indx]
             field = super(FITS_rec, self).field(indx)
@@ -577,10 +839,10 @@ class FITS_rec(np.recarray):
                 continue
 
             if isinstance(recformat, _FormatX):
-                _wrapx(self._convert[indx], field, recformat._nx)
+                _wrapx(self._convert[indx], field, recformat.repeat)
                 continue
 
-            (_str, _bool, _number, _scale, _zero, bscale, bzero, dim) = \
+            _str, _bool, _number, _scale, _zero, bscale, bzero, _ = \
                 self._get_scale_factors(indx)
 
             # add the location offset of the heap area for each
@@ -592,7 +854,7 @@ class FITS_rec(np.recarray):
                     self._heapsize = 0
 
                 field[:] = 0  # reset
-                npts = map(len, self._convert[indx])
+                npts = [len(arr) for arr in self._convert[indx]]
 
                 # Irritatingly, this can return a different dtype than just
                 # doing np.dtype(recformat.dtype); but this returns the results
@@ -607,49 +869,72 @@ class FITS_rec(np.recarray):
 
             # conversion for both ASCII and binary tables
             if _number or _str:
-                if _number and (_scale or _zero):
+                column = self._coldefs[indx]
+                if _number and (_scale or _zero) and column._physical_values:
                     dummy = self._convert[indx].copy()
                     if _zero:
                         dummy -= bzero
                     if _scale:
                         dummy /= bscale
+                    # This will set the raw values in the recarray back to
+                    # their non-physical storage values, so the column should
+                    # be mark is not scaled
+                    column._physical_values = False
                 elif _str:
                     dummy = self._convert[indx]
-                elif self._coldefs._tbtype == 'TableHDU':
+                elif isinstance(self._coldefs, _AsciiColDefs):
                     dummy = self._convert[indx]
                 else:
                     continue
 
                 # ASCII table, convert numbers to strings
-                if self._coldefs._tbtype == 'TableHDU':
+                if isinstance(self._coldefs, _AsciiColDefs):
+                    starts = self._coldefs.starts[:]
+                    spans = self._coldefs.spans
                     format = self._coldefs.formats[indx].strip()
-                    lead = self._coldefs.starts[indx] - loc[indx]
+
+                    # The the index of the "end" column of the record, beyond
+                    # which we can't write
+                    end = super(FITS_rec, self).field(-1).itemsize
+                    starts.append(end + starts[-1])
+
+                    if indx > 0:
+                        lead = (starts[indx] - starts[indx - 1] -
+                                spans[indx - 1])
+                    else:
+                        lead = 0
+
                     if lead < 0:
-                        raise ValueError(
-                            'Column `%s` starting point overlaps to the '
-                            'previous column.' % indx + 1)
-                    trail = (loc[indx + 1] - widths[indx] -
-                             self._coldefs.starts[indx])
+                        warnings.warn(
+                            'Column %r starting point overlaps the '
+                            'previous column.' % (indx + 1))
+
+                    trail = starts[indx + 1] - starts[indx] - spans[indx]
+
                     if trail < 0:
-                        raise ValueError(
-                            'Column `%s` ending point overlaps to the next '
-                            'column.' % indx + 1)
+                        warnings.warn(
+                            'Column %r ending point overlaps the next '
+                            'column.' % (indx + 1))
+
+                    # TODO: It would be nice if these string column formatting
+                    # details were left to a specialized class, as is the case
+                    # with FormatX and FormatP
                     if 'A' in format:
                         _pc = '%-'
                     else:
                         _pc = '%'
 
-                    fmt = ''.join([(' ' * lead), _pc, format[1:],
-                                   _fmap[format[0]], (' ' * trail)])
+                    fmt = ''.join([_pc, format[1:], ASCII2STR[format[0]],
+                                   (' ' * trail)])
 
                     # not using numarray.strings's num2char because the
                     # result is not allowed to expand (as C/Python does).
                     for jdx in range(len(dummy)):
                         x = fmt % dummy[jdx]
-                        if len(x) > (loc[indx + 1] - loc[indx]):
+                        if len(x) > starts[indx + 1] - starts[indx]:
                             raise ValueError(
-                                "Number `%s` does not fit into the output's "
-                                "itemsize of %s." % (x, widths[indx]))
+                                "Value %r does not fit into the output's "
+                                "itemsize of %s." % (x, spans[indx]))
                         else:
                             field[jdx] = x
                     # Replace exponent separator in floating point numbers
diff --git a/astropy/io/fits/hdu/base.py b/astropy/io/fits/hdu/base.py
index 786731a..6fc47e6 100644
--- a/astropy/io/fits/hdu/base.py
+++ b/astropy/io/fits/hdu/base.py
@@ -6,7 +6,6 @@ from __future__ import division
 import datetime
 import inspect
 import os
-import re
 import warnings
 
 import numpy as np
@@ -14,13 +13,14 @@ import numpy as np
 from .. import EXTENSION_NAME_CASE_SENSITIVE
 from ..card import Card
 from ..file import _File
-from ..header import Header, HEADER_END_RE, BLOCK_SIZE, _pad_length
+from ..header import Header, HEADER_END_RE, _pad_length
 from ..util import (_is_int, _is_pseudo_unsigned, _unsigned_zero,
                     itersubclasses, encode_ascii, decode_ascii,
-                    _get_array_mmap)
+                    _get_array_mmap, _array_to_file)
 from ..verify import _Verify, _ErrList
 
-from ....utils import lazyproperty
+from ....utils import lazyproperty, deprecated
+from ....utils.exceptions import AstropyUserWarning
 
 
 class _Delayed(object):
@@ -59,8 +59,8 @@ def _hdu_class_from_header(cls, header):
             except Exception as e:
                 warnings.warn(
                     'An exception occurred matching an HDU header to the '
-                    'appropriate HDU type: %s' % unicode(e))
-                warnings.warn('The HDU will be treated as corrupted.')
+                    'appropriate HDU type: %s' % unicode(e), AstropyUserWarning)
+                warnings.warn('The HDU will be treated as corrupted.', AstropyUserWarning)
                 klass = _CorruptedHDU
                 break
 
@@ -80,6 +80,8 @@ class _BaseHDU(object):
     # Byte to use for padding out blocks
     _padding_byte = '\x00'
 
+    _default_name = ''
+
     def __new__(cls, data=None, header=None, *args, **kwargs):
         """
         Iterates through the subclasses of _BaseHDU and uses that class's
@@ -98,28 +100,28 @@ class _BaseHDU(object):
         return super(_BaseHDU, cls).__new__(klass)
 
     def __init__(self, data=None, header=None, *args, **kwargs):
+        if header is None:
+            header = Header()
         self._header = header
         self._file = None
         self._buffer = None
-        self._hdrLoc = None
-        self._datLoc = None
-        self._datSpan = None
+        self._header_offset = None
+        self._data_offset = None
+        self._data_size = None
 
         # This internal variable is used to track whether the data attribute
         # still points to the same data array as when the HDU was originally
         # created (this does not track whether the data is actually the same
         # content-wise)
         self._data_replaced = False
+        self._data_needs_rescale = False
         self._new = True
         self._output_checksum = False
 
-        if self._header:
-            if 'DATASUM' in self._header and 'CHECKSUM' not in self._header:
-                self._output_checksum = 'datasum'
-            elif 'CHECKSUM' in self._header:
-                self._output_checksum = True
-
-        self._name = ''
+        if 'DATASUM' in self._header and 'CHECKSUM' not in self._header:
+            self._output_checksum = 'datasum'
+        elif 'CHECKSUM' in self._header:
+            self._output_checksum = True
 
     @property
     def header(self):
@@ -131,13 +133,46 @@ class _BaseHDU(object):
 
     @property
     def name(self):
-        return self._name
+        # Convert the value to a string to be flexible in some pathological
+        # cases (see ticket #96)
+        return str(self._header.get('EXTNAME', self._default_name))
 
     @name.setter
     def name(self, value):
         if not isinstance(value, basestring):
             raise TypeError("'name' attribute must be a string")
-        self._name = value
+        if not EXTENSION_NAME_CASE_SENSITIVE():
+            value = value.upper()
+        if 'EXTNAME' in self._header:
+            self._header['EXTNAME'] = value
+        else:
+            self._header['EXTNAME'] = (value, 'extension name')
+
+    @property
+    def ver(self):
+        return self._header.get('EXTVER', 1)
+
+    @ver.setter
+    def ver(self, value):
+        if not _is_int(value):
+            raise TypeError("'ver' attribute must be an integer")
+        if 'EXTVER' in self._header:
+            self._header['EXTVER'] = value
+        else:
+            self._header['EXTVER'] = (value, 'extension value')
+
+    @property
+    def level(self):
+        return self._header.get('EXTLEVEL', 1)
+
+    @level.setter
+    def level(self, value):
+        if not _is_int(value):
+            raise TypeError("'level' attribute must be an integer")
+        if 'EXTLEVEL' in self._header:
+            self._header['EXTLEVEL'] = value
+        else:
+            self._header['EXTLEVEL'] = (value, 'extension level')
 
     @property
     def is_image(self):
@@ -150,8 +185,107 @@ class _BaseHDU(object):
 
     @property
     def _data_loaded(self):
-        return ('data' in self.__dict__ and self.data is not None and
-                self.data is not DELAYED)
+        return ('data' in self.__dict__ and self.data is not DELAYED)
+
+    @property
+    def _has_data(self):
+        return self._data_loaded and self.data is not None
+
+    @property
+    @deprecated('3.2', alternative='the `._header_offset` attribute',
+                pending=True)
+    def _hdrLoc(self):
+        """The byte offset of this HDU's header in the file it came from;
+        available for backwards compatibility--use ._header_offset instead.
+        """
+
+        return self._header_offset
+
+    @_hdrLoc.setter
+    @deprecated('3.2', alternative='the `._header_offset` attribute',
+                pending=True)
+    def _hdrLoc(self, value):
+        self._header_offset = value
+
+    @property
+    @deprecated('3.2', alternative='the `._data_offset` attribute',
+                pending=True)
+    def _datLoc(self):
+        """The byte offset of this HDU's data portion in the file it came from;
+        available for backwards compatibility--use ._data_offset instead.
+        """
+
+        return self._data_offset
+
+    @_datLoc.setter
+    @deprecated('3.2', alternative='the `._data_offset` attribute',
+                pending=True)
+    def _datLoc(self, value):
+        self._data_offset = value
+
+    @property
+    @deprecated('3.2', alternative='the `._data_size` attribute',
+                pending=True)
+    def _datSpan(self):
+        """The byte size of this HDU's data portion in the file it came from;
+        available for backwards compatibility--use ._data_size instead.
+        """
+
+        return self._data_size
+
+    @_datSpan.setter
+    @deprecated('3.2', alternative='the `._data_size` attribute',
+                pending=True)
+    def _datSpan(self, value):
+        self._data_size = value
+
+    @property
+    @deprecated('3.2', alternative='the `._header_offset` attribute',
+                pending=True)
+    def _hdrLoc(self):
+        """The byte offset of this HDU's header in the file it came from;
+        available for backwards compatibility--use ._header_offset instead.
+        """
+
+        return self._header_offset
+
+    @_hdrLoc.setter
+    @deprecated('3.2', alternative='the `._header_offset` attribute',
+                pending=True)
+    def _hdrLoc(self, value):
+        self._header_offset = value
+
+    @property
+    @deprecated('3.2', alternative='the `._data_offset` attribute',
+                pending=True)
+    def _datLoc(self):
+        """The byte offset of this HDU's data portion in the file it came from;
+        available for backwards compatibility--use ._data_offset instead.
+        """
+
+        return self._data_offset
+
+    @_datLoc.setter
+    @deprecated('3.2', alternative='the `._data_offset` attribute',
+                pending=True)
+    def _datLoc(self, value):
+        self._data_offset = value
+
+    @property
+    @deprecated('3.2', alternative='the `._data_size` attribute',
+                pending=True)
+    def _datSpan(self):
+        """The byte size of this HDU's data portion in the file it came from;
+        available for backwards compatibility--use ._data_size instead.
+        """
+
+        return self._data_size
+
+    @_datSpan.setter
+    @deprecated('3.2', alternative='the `._data_size` attribute',
+                pending=True)
+    def _datSpan(self, value):
+        self._data_size = value
 
     @classmethod
     def register_hdu(cls, hducls):
@@ -269,15 +403,15 @@ class _BaseHDU(object):
             # Provide an underlying buffer to read the data from
             hdu._buffer = data
 
-        hdu._hdrLoc = offset                 # beginning of the header area
+        hdu._header_offset = offset            # beginning of the header area
         if fileobj:
-            hdu._datLoc = fileobj.tell()     # beginning of the data area
+            hdu._data_offset = fileobj.tell()  # beginning of the data area
         else:
-            hdu._datLoc = hdrlen
+            hdu._data_offset = hdrlen
 
         # data area size, including padding
         size = hdu.size
-        hdu._datSpan = size + _pad_length(size)
+        hdu._data_size = size + _pad_length(size)
 
         # Checksums are not checked on invalid HDU types
         if checksum and checksum != 'remove' and isinstance(hdu, _ValidHDU):
@@ -323,7 +457,7 @@ class _BaseHDU(object):
 
         # If the checksum had to be checked the data may have already been read
         # from the file, in which case we don't want to see relative
-        fileobj.seek(hdu._datLoc + hdu._datSpan, os.SEEK_SET)
+        fileobj.seek(hdu._data_offset + hdu._data_size, os.SEEK_SET)
         return hdu
 
     def writeto(self, name, output_verify='exception', clobber=False,
@@ -336,8 +470,8 @@ class _BaseHDU(object):
         Parameters
         ----------
         name : file path, file object or file-like object
-            Output FITS file.  If opened, must be opened for append
-            ("ab+")).
+            Output FITS file.  If the file object is already opened, it must
+            be opened in a writeable mode.
 
         output_verify : str
             Output verification option.  Must be one of ``"fix"``,
@@ -370,16 +504,28 @@ class _BaseHDU(object):
         if self._buffer:
             return np.ndarray(shape, dtype=code, buffer=self._buffer,
                               offset=offset)
-        else:
+        elif self._file:
             return self._file.readarray(offset=offset, dtype=code, shape=shape)
+        else:
+            return None
 
     # TODO: Rework checksum handling so that it's not necessary to add a
     # checksum argument here
     def _prewriteto(self, checksum=False, inplace=False):
-        # If the data is unsigned int 16, 32, or 64 add BSCALE/BZERO
-        # cards to header
-        if self._data_loaded and self.data is not None and \
-           self._standard and _is_pseudo_unsigned(self.data.dtype):
+        self._update_uint_scale_keywords()
+
+        # Handle checksum
+        self._update_checksum(checksum)
+
+
+    def _update_uint_scale_keywords(self):
+        """
+        If the data is unsigned int 16, 32, or 64 add BSCALE/BZERO cards to
+        header.
+        """
+
+        if (self._has_data and self._standard and
+                _is_pseudo_unsigned(self.data.dtype)):
             if 'GCOUNT' in self._header:
                 self._header.set('BSCALE', 1, after='GCOUNT')
             else:
@@ -387,36 +533,50 @@ class _BaseHDU(object):
             self._header.set('BZERO', _unsigned_zero(self.data.dtype),
                              after='BSCALE')
 
-        # Handle checksum
+    def _update_checksum(self, checksum, checksum_keyword='CHECKSUM',
+                         datasum_keyword='DATASUM'):
+        """Update the 'CHECKSUM' and 'DATASUM' keywords in the header (or
+        keywords with equivalent semantics given by the ``checksum_keyword``
+        and ``datasum_keyword`` arguments--see for example ``CompImageHDU``
+        for an example of why this might need to be overridden).
+        """
 
         # If the data is loaded it isn't necessarily 'modified', but we have no
         # way of knowing for sure
         modified = self._header._modified or self._data_loaded
 
         if checksum == 'remove':
-            if 'CHECKSUM' in self._header:
-                del self._header['CHECKSUM']
+            if checksum_keyword in self._header:
+                del self._header[checksum_keyword]
 
-            if 'DATASUM' in self._header:
-                del self._header['DATASUM']
+            if datasum_keyword in self._header:
+                del self._header[datasum_keyword]
         elif modified or self._new:
             if checksum == 'datasum':
-                self.add_datasum()
+                self.add_datasum(datasum_keyword=datasum_keyword)
             elif checksum == 'nonstandard_datasum':
-                self.add_datasum(blocking='nonstandard')
+                self.add_datasum(blocking='nonstandard',
+                                 datasum_keyword=datasum_keyword)
             elif checksum == 'test':
-                self.add_datasum(self._datasum_comment)
-                self.add_checksum(self._checksum_comment, True)
+                self.add_datasum(self._datasum_comment,
+                                 datasum_keyword=datasum_keyword)
+                self.add_checksum(self._checksum_comment, True,
+                                  checksum_keyword=checksum_keyword,
+                                  datasum_keyword=datasum_keyword)
             elif checksum == 'nonstandard':
-                self.add_checksum(blocking='nonstandard')
+                self.add_checksum(blocking='nonstandard',
+                                  checksum_keyword=checksum_keyword,
+                                  datasum_keyword=datasum_keyword)
             elif checksum:
-                self.add_checksum(blocking='standard')
+                self.add_checksum(blocking='standard',
+                                  checksum_keyword=checksum_keyword,
+                                  datasum_keyword=datasum_keyword)
 
     def _postwriteto(self):
         # If data is unsigned integer 16, 32 or 64, remove the
         # BSCALE/BZERO cards
-        if (self._data_loaded and self.data is not None and
-                self._standard and _is_pseudo_unsigned(self.data.dtype)):
+        if (self._has_data and self._standard and
+                _is_pseudo_unsigned(self.data.dtype)):
             for keyword in ('BSCALE', 'BZERO'):
                 try:
                     del self._header[keyword]
@@ -441,7 +601,7 @@ class _BaseHDU(object):
             size = len(str(self._header))
 
         # Update hdrLoc with the new offset
-        self._hdrLoc = offset
+        self._header_offset = offset
 
         return offset, size
 
@@ -458,24 +618,32 @@ class _BaseHDU(object):
             except IOError:
                 offset = 0
 
-        if self.data is not None:
-            size += self._writedata_internal(fileobj)
+        if self._data_loaded or self._data_needs_rescale:
+            if self.data is not None:
+                size += self._writedata_internal(fileobj)
             # pad the FITS data block
-            if size > 0 and not fileobj.simulateonly:
+            if size > 0:
                 padding = _pad_length(size) * self._padding_byte
                 # TODO: Not that this is ever likely, but if for some odd
                 # reason _padding_byte is > 0x80 this will fail; but really if
                 # somebody's custom fits format is doing that, they're doing it
                 # wrong and should be reprimanded harshly.
                 fileobj.write(padding.encode('ascii'))
+                size += len(padding)
+        else:
+            # The data has not been modified or does not need need to be
+            # rescaled, so it can be copied, unmodified, directly from an
+            # existing file or buffer
+            size += self._writedata_direct_copy(fileobj)
+
 
         # flush, to make sure the content is written
         if not fileobj.simulateonly:
             fileobj.flush()
 
         # Update datLoc with the new offset
-        self._datLoc = offset
-        self._datSpan = size = size + _pad_length(size)
+        self._data_offset = offset
+        self._data_size = size
 
         # return both the location and the size of the data area
         return offset, size
@@ -493,6 +661,24 @@ class _BaseHDU(object):
             fileobj.writearray(self.data)
         return self.data.size * self.data.itemsize
 
+    def _writedata_direct_copy(self, fileobj):
+        """Copies the data directly from one file/buffer to the new file.
+
+        For now this is handled by loading the raw data from the existing data
+        (including any padding) via a memory map or from an already in-memory
+        buffer and using Numpy's existing file-writing facilities to write to
+        the new file.
+
+        If this proves too slow a more direct approach may be used.
+        """
+
+        raw = self._get_raw_data(self._data_size, 'ubyte', self._data_offset)
+        if raw is not None:
+            _array_to_file(raw, fileobj)
+            return raw.nbytes
+        else:
+            return 0
+
     # TODO: This is the start of moving HDU writing out of the _File class;
     # Though right now this is an internal private method (though still used by
     # HDUList, eventually the plan is to have this be moved into writeto()
@@ -504,10 +690,10 @@ class _BaseHDU(object):
             self._writedata(fileobj)
             return
 
-        hdrloc = self._hdrLoc
-        hdrsize = self._datLoc - self._hdrLoc
-        datloc = self._datLoc
-        datsize = self._datSpan
+        hdrloc = self._header_offset
+        hdrsize = self._data_offset - self._header_offset
+        datloc = self._data_offset
+        datsize = self._data_size
 
         if self._header._modified:
             # Seek to the original header location in the file
@@ -529,6 +715,7 @@ class _BaseHDU(object):
             # The header size is unchanged, but the data location may be
             # different from before depending on if previous HDUs were resized
             datloc = fileobj.tell()
+
         if self._data_loaded:
             if self.data is not None:
                 # Seek through the array's bases for an memmap'd array; we
@@ -545,16 +732,14 @@ class _BaseHDU(object):
                 if array_mmap is not None:
                     array_mmap.flush()
                 else:
-                    self._file.seek(self._datLoc)
+                    self._file.seek(self._data_offset)
                     datloc, datsize = self._writedata(fileobj)
         elif copy:
-            # Seek to the data location in the original file
-            self._file.seek(self._datLoc)
-            fileobj.write(self._file.read(datsize))
+            datsize = self._writedata_direct_copy(fileobj)
 
-        self._hdrLoc = hdrloc
-        self._datLoc = datloc
-        self._datSpan = datsize + _pad_length(datsize)
+        self._header_offset = hdrloc
+        self._data_offset = datloc
+        self._data_size = datsize
         self._data_replaced = False
 
 _AllHDU = _BaseHDU  # For backwards-compatibility, though nobody should have
@@ -594,9 +779,9 @@ class _CorruptedHDU(_BaseHDU):
         # Note: On compressed files this might report a negative size; but the
         # file is corrupt anyways so I'm not too worried about it.
         if self._buffer is not None:
-            return len(self._buffer) - self._datLoc
+            return len(self._buffer) - self._data_offset
 
-        return self._file.size - self._datLoc
+        return self._file.size - self._data_offset
 
     def _summary(self):
         return (self.name, 'CorruptedHDU')
@@ -649,9 +834,9 @@ class _NonstandardHDU(_BaseHDU, _Verify):
         """
 
         if self._buffer is not None:
-            return len(self._buffer) - self._datLoc
+            return len(self._buffer) - self._data_offset
 
-        return self._file.size - self._datLoc
+        return self._file.size - self._data_offset
 
     def _writedata(self, fileobj):
         """
@@ -689,7 +874,7 @@ class _NonstandardHDU(_BaseHDU, _Verify):
         Return the file data.
         """
 
-        return self._get_raw_data(self.size, 'ubyte', self._datLoc)
+        return self._get_raw_data(self.size, 'ubyte', self._data_offset)
 
     def _verify(self, option='warn'):
         errs = _ErrList([], unit='Card')
@@ -711,29 +896,6 @@ class _ValidHDU(_BaseHDU, _Verify):
         if name is not None:
             self.name = name
 
-        if header and not hasattr(self, '_extver'):
-            self._extver = header.get('EXTVER', 1)
-
-    @property
-    def name(self):
-        # Convert the value to a string to be flexible in some pathological
-        # cases (see ticket #96)
-        if self._header and 'EXTNAME' in self._header:
-            self._name = str(self._header['EXTNAME'])
-        return self._name
-
-    @name.setter
-    def name(self, value):
-        if not isinstance(value, basestring):
-            raise TypeError("'name' attribute must be a string")
-        if not EXTENSION_NAME_CASE_SENSITIVE():
-            value = value.upper()
-        if self._header:
-            if 'EXTNAME' in self._header:
-                self._header['EXTNAME'] = value
-            else:
-                self._header.append(('EXTNAME', value, 'extension name'))
-
     @classmethod
     def match_header(cls, header):
         """
@@ -818,8 +980,8 @@ class _ValidHDU(_BaseHDU, _Verify):
 
         if hasattr(self, '_file') and self._file:
             return {'file': self._file, 'filemode': self._file.mode,
-                    'hdrLoc': self._hdrLoc, 'datLoc': self._datLoc,
-                    'datSpan': self._datSpan}
+                    'hdrLoc': self._header_offset, 'datLoc': self._data_offset,
+                    'datSpan': self._data_size}
         else:
             return None
 
@@ -834,10 +996,8 @@ class _ValidHDU(_BaseHDU, _Verify):
             data = None
         return self.__class__(data=data, header=self._header.copy())
 
-    # TODO: self.name should be a property that updates the EXTNAME keyword
-    # automatically; likewise for self.version.  Likewise it should
-    # automatically get its value from the Header keyword.  This method should
-    # just be deprecated, as should update_ext_version
+    @deprecated('3.2', alternative='the ``.name`` attribute or `Header.set`',
+                pending=True)
     def update_ext_name(self, value, comment=None, before=None,
                         after=None, savecomment=False):
         """
@@ -874,12 +1034,19 @@ class _ValidHDU(_BaseHDU, _Verify):
             preserved.
         """
 
-        if 'extname' in self._header and savecomment:
+        if 'EXTNAME' in self._header and savecomment:
             comment = None
 
         self._header.set('EXTNAME', value, comment, before, after)
+        # This may seem redundant, but the previous header.set call just
+        # handles anyone who might use the before/after keywords to set the
+        # position of the EXTNAME keyword.  Setting self.name = name does some
+        # additional processing on the value such as handling
+        # EXTENSION_NAME_CASE_SENSITIVE
         self.name = value
 
+    @deprecated('3.2', alternative='the `.ver` attribute or `Header.set`',
+                pending=True)
     def update_ext_version(self, value, comment=None, before=None,
                            after=None, savecomment=False):
         """
@@ -916,11 +1083,10 @@ class _ValidHDU(_BaseHDU, _Verify):
             preserved.
         """
 
-        if 'extver' in self._header and savecomment:
+        if 'EXTVER' in self._header and savecomment:
             comment = None
 
-        self._header.set('extver', value, comment, before, after)
-        self._extver = value
+        self._header.set('EXTVER', value, comment, before, after)
 
     def _verify(self, option='warn'):
         errs = _ErrList([], unit='Card')
@@ -1067,7 +1233,8 @@ class _ValidHDU(_BaseHDU, _Verify):
 
         return errs
 
-    def add_datasum(self, when=None, blocking='standard'):
+    def add_datasum(self, when=None, blocking='standard',
+                    datasum_keyword='DATASUM'):
         """
         Add the ``DATASUM`` card to this HDU with the value set to the
         checksum calculated for the data.
@@ -1078,10 +1245,15 @@ class _ValidHDU(_BaseHDU, _Verify):
             Comment string for the card that by default represents the
             time when the checksum was calculated
 
-        blocking: str, optional
+        blocking : str, optional
             "standard" or "nonstandard", compute sum 2880 bytes at a time, or
             not
 
+        datasum_keyword: str, optional
+            The name of the header keyword to store the datasum value in;
+            this is typically 'DATASUM' per convention, but there exist
+            use cases in which a different keyword should be used
+
         Returns
         -------
         checksum : int
@@ -1100,11 +1272,12 @@ class _ValidHDU(_BaseHDU, _Verify):
         if when is None:
             when = 'data unit checksum updated %s' % self._get_timestamp()
 
-        self._header['DATASUM'] = (str(cs), when)
+        self._header[datasum_keyword] = (str(cs), when)
         return cs
 
     def add_checksum(self, when=None, override_datasum=False,
-                     blocking='standard'):
+                     blocking='standard', checksum_keyword='CHECKSUM',
+                     datasum_keyword='DATASUM'):
         """
         Add the ``CHECKSUM`` and ``DATASUM`` cards to this HDU with
         the values set to the checksum calculated for the HDU and the
@@ -1120,10 +1293,18 @@ class _ValidHDU(_BaseHDU, _Verify):
         override_datasum : bool, optional
            add the ``CHECKSUM`` card only
 
-        blocking: str, optional
+        blocking : str, optional
             "standard" or "nonstandard", compute sum 2880 bytes at a time, or
             not
 
+        checksum_keyword: str, optional
+            The name of the header keyword to store the checksum value in; this
+            is typically 'CHECKSUM' per convention, but there exist use cases
+            in which a different keyword should be used
+
+        datasum_keyword: str, optional
+            See ``checksum_keyword``
+
         Notes
         -----
         For testing purposes, first call `add_datasum` with a `when`
@@ -1135,7 +1316,8 @@ class _ValidHDU(_BaseHDU, _Verify):
 
         if not override_datasum:
             # Calculate and add the data checksum to the header.
-            data_cs = self.add_datasum(when, blocking)
+            data_cs = self.add_datasum(when, blocking,
+                                       datasum_keyword=datasum_keyword)
         else:
             # Just calculate the data checksum
             data_cs = self._calculate_datasum(blocking)
@@ -1144,12 +1326,15 @@ class _ValidHDU(_BaseHDU, _Verify):
             when = 'HDU checksum updated %s' % self._get_timestamp()
 
         # Add the CHECKSUM card to the header with a value of all zeros.
-        if 'DATASUM' in self._header:
-            self._header.set('CHECKSUM', '0' * 16, when, before='DATASUM')
+        if datasum_keyword in self._header:
+            self._header.set(checksum_keyword, '0' * 16, when,
+                             before=datasum_keyword)
         else:
-            self._header.set('CHECKSUM', '0' * 16, when)
+            self._header.set(checksum_keyword, '0' * 16, when)
 
-        self._header['CHECKSUM'] = self._calculate_checksum(data_cs, blocking)
+        csum = self._calculate_checksum(data_cs, blocking,
+                                        checksum_keyword=checksum_keyword)
+        self._header[checksum_keyword] = csum
 
     def verify_datasum(self, blocking='standard'):
         """
@@ -1230,7 +1415,7 @@ class _ValidHDU(_BaseHDU, _Verify):
             self._checksum_comment = self._header.comments['CHECKSUM']
             if not self.verify_checksum(blocking):
                 warnings.warn('Checksum verification failed for HDU %s.\n' %
-                              ((self.name, self._extver),))
+                              ((self.name, self.ver),), AstropyUserWarning)
             del self._header['CHECKSUM']
         else:
             self._checksum = None
@@ -1242,7 +1427,7 @@ class _ValidHDU(_BaseHDU, _Verify):
 
             if not self.verify_datasum(blocking):
                 warnings.warn('Datasum verification failed for HDU %s.\n' %
-                              ((self.name, self._extver),))
+                              ((self.name, self.ver),), AstropyUserWarning)
             del self._header['DATASUM']
         else:
             self._checksum = None
@@ -1270,8 +1455,8 @@ class _ValidHDU(_BaseHDU, _Verify):
             # yet.  We find the data in the file, read it, and calculate the
             # datasum.
             if self.size > 0:
-                raw_data = self._get_raw_data(self._datSpan, 'ubyte',
-                                              self._datLoc)
+                raw_data = self._get_raw_data(self._data_size, 'ubyte',
+                                              self._data_offset)
                 return self._compute_checksum(raw_data, blocking=blocking)
             else:
                 return 0
@@ -1281,13 +1466,14 @@ class _ValidHDU(_BaseHDU, _Verify):
         else:
             return 0
 
-    def _calculate_checksum(self, datasum, blocking):
+    def _calculate_checksum(self, datasum, blocking,
+                            checksum_keyword='CHECKSUM'):
         """
         Calculate the value of the ``CHECKSUM`` card in the HDU.
         """
 
-        oldChecksum = self._header['CHECKSUM']
-        self._header['CHECKSUM'] = '0' * 16
+        old_checksum = self._header[checksum_keyword]
+        self._header[checksum_keyword] = '0' * 16
 
         # Convert the header to a string.
         s = str(self._header)
@@ -1300,7 +1486,7 @@ class _ValidHDU(_BaseHDU, _Verify):
         s = self._char_encode(~cs)
 
         # Return the header card value.
-        self._header['CHECKSUM'] = oldChecksum
+        self._header[checksum_keyword] = old_checksum
 
         return s
 
@@ -1544,7 +1730,7 @@ class NonstandardExtHDU(ExtensionHDU):
         Return the file data.
         """
 
-        return self._get_raw_data(self.size, 'ubyte', self._datLoc)
+        return self._get_raw_data(self.size, 'ubyte', self._data_offset)
 
 # TODO: Mark this as deprecated
 _NonstandardExtHDU = NonstandardExtHDU
diff --git a/astropy/io/fits/hdu/compressed.py b/astropy/io/fits/hdu/compressed.py
index dc27336..95da871 100644
--- a/astropy/io/fits/hdu/compressed.py
+++ b/astropy/io/fits/hdu/compressed.py
@@ -1,22 +1,22 @@
 # Licensed under a 3-clause BSD style license - see PYFITS.rst
 
-import operator
-import sys
+import ctypes
+import math
+import time
 import warnings
 
 import numpy as np
 
-from functools import reduce
-
 from .base import DELAYED, ExtensionHDU
 from .image import _ImageBaseHDU, ImageHDU
 from .table import BinTableHDU
-from ..column import Column, ColDefs, _FormatP, _makep
+from ..column import Column, ColDefs, _FormatP
 from ..fitsrec import FITS_rec
-from ..header import Header, BLOCK_SIZE, _pad_length
-from ..util import _is_pseudo_unsigned, _unsigned_zero
+from ..header import Header
+from ..util import _is_pseudo_unsigned, _unsigned_zero, _is_int
 
-from ....utils import lazyproperty
+from ....utils import lazyproperty, deprecated
+from ....utils.exceptions import AstropyPendingDeprecationWarning, AstropyUserWarning
 
 try:
     from .. import compression
@@ -25,10 +25,24 @@ except ImportError:
     COMPRESSION_SUPPORTED = COMPRESSION_ENABLED = False
 
 
-# Default compression parameter values
+# Quantization dithering method constants; these are right out of fitsio.h
+NO_DITHER = -1
+SUBTRACTIVE_DITHER_1 = 1
+SUBTRACTIVE_DITHER_2 = 2
+QUANTIZE_METHOD_NAMES = {
+    NO_DITHER: 'NO_DITHER',
+    SUBTRACTIVE_DITHER_1: 'SUBTRACTIVE_DITHER_1',
+    SUBTRACTIVE_DITHER_2: 'SUBTRACTIVE_DITHER_2'
+}
+DITHER_SEED_CLOCK = 0
+DITHER_SEED_CHECKSUM = -1
 
+
+# Default compression parameter values
 DEFAULT_COMPRESSION_TYPE = 'RICE_1'
 DEFAULT_QUANTIZE_LEVEL = 16.
+DEFAULT_QUANTIZE_METHOD = NO_DITHER
+DEFAULT_DITHER_SEED = DITHER_SEED_CLOCK
 DEFAULT_HCOMP_SCALE = 0
 DEFAULT_HCOMP_SMOOTH = 0
 DEFAULT_BLOCK_SIZE = 32
@@ -39,10 +53,12 @@ DEFAULT_BYTE_PIX = 4
 if COMPRESSION_SUPPORTED:
     try:
         CFITSIO_SUPPORTS_GZIPDATA = compression.CFITSIO_VERSION >= 3.28
+        CFITSIO_SUPPORTS_Q_FORMAT = compression.CFITSIO_VERSION >= 3.35
     except AttributeError:
         # This generally shouldn't happen unless running setup.py in an
         # environment where an old build of pyfits exists
         CFITSIO_SUPPORTS_GZIPDATA = True
+        CFITSIO_SUPPORTS_Q_FORMAT = True
 
 
 class CompImageHeader(Header):
@@ -96,12 +112,21 @@ class CompImageHDU(BinTableHDU):
     Compressed Image HDU class.
     """
 
+    # Maps deprecated keyword arguments to __init__ to their new names
+    DEPRECATED_KWARGS = {
+        'compressionType': 'compression_type', 'tileSize': 'tile_size',
+        'hcompScale': 'hcomp_scale', 'hcompSmooth': 'hcomp_smooth',
+        'quantizeLevel': 'quantize_level'
+    }
+
     def __init__(self, data=None, header=None, name=None,
-                 compressionType=DEFAULT_COMPRESSION_TYPE,
-                 tileSize=None,
-                 hcompScale=DEFAULT_HCOMP_SCALE,
-                 hcompSmooth=DEFAULT_HCOMP_SMOOTH,
-                 quantizeLevel=DEFAULT_QUANTIZE_LEVEL,
+                 compression_type=DEFAULT_COMPRESSION_TYPE,
+                 tile_size=None,
+                 hcomp_scale=DEFAULT_HCOMP_SCALE,
+                 hcomp_smooth=DEFAULT_HCOMP_SMOOTH,
+                 quantize_level=DEFAULT_QUANTIZE_LEVEL,
+                 quantize_method=DEFAULT_QUANTIZE_METHOD,
+                 dither_seed=DEFAULT_DITHER_SEED,
                  do_not_scale_image_data=False,
                  uint=False, scale_back=False, **kwargs):
         """
@@ -120,22 +145,32 @@ class CompImageHDU(BinTableHDU):
             input image header then the default name ``COMPRESSED_IMAGE`` is
             used.
 
-        compressionType : str, optional
+        compression_type : str, optional
             compression algorithm 'RICE_1', 'PLIO_1', 'GZIP_1', 'HCOMPRESS_1'
 
-        tileSize : int, optional
+        tile_size : int, optional
             compression tile sizes.  Default treats each row of image as a
             tile.
 
-        hcompScale : float, optional
+        hcomp_scale : float, optional
             HCOMPRESS scale parameter
 
-        hcompSmooth : float, optional
+        hcomp_smooth : float, optional
             HCOMPRESS smooth parameter
 
-        quantizeLevel : float, optional
+        quantize_level : float, optional
             floating point quantization level; see note below
 
+        quantize_method : int, optional
+            floating point quantization dithering method; can be either
+            NO_DITHER (-1), SUBTRACTIVE_DITHER_1 (1; default), or
+            SUBTRACTIVE_DITHER_2 (2); see note below
+
+        dither_seed : int, optional
+            random seed to use for dithering; can be either an integer in the
+            range 1 to 1000 (inclusive), DITHER_SEED_CLOCK (0; default), or
+            DITHER_SEED_CHECKSUM (-1); see note below
+
         Notes
         -----
         The astropy.io.fits package supports 2 methods of image compression:
@@ -144,12 +179,12 @@ class CompImageHDU(BinTableHDU):
                or pkzip utility programs, producing a ``*.gz`` or ``*.zip``
                file, respectively.  When reading compressed files of this type,
                Astropy first uncompresses the entire file into a temporary file
-               before performing the requested read operations.
-               The astropy.io.fits package does not support writing to these
-               types of compressed files.  This type of compression is
-               supported in the `_File` class, not in the `CompImageHDU` class.
-               The file compression type is recognized by the ``.gz`` or
-               ``.zip`` file name extension.
+               before performing the requested read operations.  The
+               astropy.io.fits package does not support writing to these types
+               of compressed files.  This type of compression is supported in
+               the `_File` class, not in the `CompImageHDU` class.  The file
+               compression type is recognized by the ``.gz`` or ``.zip`` file
+               name extension.
 
             2) The `CompImageHDU` class supports the FITS tiled image
                compression convention in which the image is subdivided into a
@@ -171,7 +206,7 @@ class CompImageHDU(BinTableHDU):
         designed for data masks with positive integer pixel values.  The 3
         general purpose algorithms are GZIP, Rice, and HCOMPRESS, and the
         special-purpose technique is the IRAF pixel list compression technique
-        (PLIO).  The `compressionType` parameter defines the compression
+        (PLIO).  The `compression_type` parameter defines the compression
         algorithm to be used.
 
         The FITS image can be subdivided into any desired rectangular grid of
@@ -184,35 +219,35 @@ class CompImageHDU(BinTableHDU):
         efficient to compress the whole image as a single tile.  Note that the
         image dimensions are not required to be an integer multiple of the tile
         dimensions; if not, then the tiles at the edges of the image will be
-        smaller than the other tiles.  The `tileSize` parameter may be provided
-        as a list of tile sizes, one for each dimension in the image.  For
-        example a `tileSize` value of ``[100,100]`` would divide a 300 X 300
-        image into 9 100 X 100 tiles.
+        smaller than the other tiles.  The ``tile_size`` parameter may be
+        provided as a list of tile sizes, one for each dimension in the image.
+        For example a ``tile_size`` value of ``[100,100]`` would divide a 300 X
+        300 image into 9 100 X 100 tiles.
 
-        The 4 supported image compression algorithms are all 'loss-less' when
+        The 4 supported image compression algorithms are all 'lossless' when
         applied to integer FITS images; the pixel values are preserved exactly
         with no loss of information during the compression and uncompression
         process.  In addition, the HCOMPRESS algorithm supports a 'lossy'
         compression mode that will produce larger amount of image compression.
-        This is achieved by specifying a non-zero value for the `hcompScale`
+        This is achieved by specifying a non-zero value for the ``hcomp_scale``
         parameter.  Since the amount of compression that is achieved depends
         directly on the RMS noise in the image, it is usually more convenient
-        to specify the `hcompScale` factor relative to the RMS noise.  Setting
-        `hcompScale` = 2.5 means use a scale factor that is 2.5 times the
-        calculated RMS noise in the image tile.  In some cases it may be
-        desirable to specify the exact scaling to be used, instead of
+        to specify the ``hcomp_scale`` factor relative to the RMS noise.
+        Setting ``hcomp_scale = 2.5`` means use a scale factor that is 2.5
+        times the calculated RMS noise in the image tile.  In some cases it may
+        be desirable to specify the exact scaling to be used, instead of
         specifying it relative to the calculated noise value.  This may be done
         by specifying the negative of the desired scale value (typically in the
         range -2 to -100).
 
         Very high compression factors (of 100 or more) can be achieved by using
-        large `hcompScale` values, however, this can produce undesireable
+        large ``hcomp_scale`` values, however, this can produce undesireable
         'blocky' artifacts in the compressed image.  A variation of the
         HCOMPRESS algorithm (called HSCOMPRESS) can be used in this case to
         apply a small amount of smoothing of the image when it is uncompressed
         to help cover up these artifacts.  This smoothing is purely cosmetic
         and does not cause any significant change to the image pixel values.
-        Setting the `hcompSmooth` parameter to 1 will engage the smoothing
+        Setting the ``hcomp_smooth`` parameter to 1 will engage the smoothing
         algorithm.
 
         Floating point FITS images (which have ``BITPIX`` = -32 or -64) usually
@@ -228,16 +263,16 @@ class CompImageHDU(BinTableHDU):
         properly, this integer scaling technique will only discard the
         insignificant noise while still preserving all the real imformation in
         the image.  The amount of precision that is retained in the pixel
-        values is controlled by the `quantizeLevel` parameter.  Larger values
-        will result in compressed images whose pixels more closely match the
-        floating point pixel values, but at the same time the amount of
+        values is controlled by the ``quantize_level`` parameter.  Larger
+        values will result in compressed images whose pixels more closely match
+        the floating point pixel values, but at the same time the amount of
         compression that is achieved will be reduced.  Users should experiment
         with different values for this parameter to determine the optimal value
         that preserves all the useful information in the image, without
         needlessly preserving all the 'noise' which will hurt the compression
         efficiency.
 
-        The default value for the `quantizeLevel` scale factor is 16, which
+        The default value for the ``quantize_level`` scale factor is 16, which
         means that scaled integer pixel values will be quantized such that the
         difference between adjacent integer values will be 1/16th of the noise
         level in the image background.  An optimized algorithm is used to
@@ -250,10 +285,48 @@ class CompImageHDU(BinTableHDU):
         the exact quantization level to be used, instead of specifying it
         relative to the calculated noise value.  This may be done by specifying
         the negative of desired quantization level for the value of
-        `quantizeLevel`.  In the previous example, one could specify
-        `quantizeLevel`=-2.0 so that the quantized integer levels differ by
-        2.0.  Larger negative values for `quantizeLevel` means that the levels
-        are more coarsely-spaced, and will produce higher compression factors.
+        ``quantize_level``.  In the previous example, one could specify
+        ``quantize_level = -2.0`` so that the quantized integer levels differ
+        by 2.0.  Larger negative values for ``quantize_level`` means that the
+        levels are more coarsely-spaced, and will produce higher compression
+        factors.
+
+        The quantization algorithm can also apply one of two random dithering
+        methods in order to reduce bias in the measured intensity of background
+        regions.  The default method, specified with the constant
+        ``SUBTRACTIVE_DITHER_1`` adds dithering to the zero-point of the
+        quantization array itself rather than adding noise to the actual image.
+        The random noise is added on a pixel-by-pixel basis, so in order
+        restore each pixel from its integer value to its floating point value
+        it is necessary to replay the same sequence of random numbers for each
+        pixel (see below).  The other method, ``SUBTRACTIVE_DITHER_2``, is
+        exactly like the first except that before dithering any pixel with a
+        floating point value of ``0.0`` is replaced with the special integer
+        value ``-2147483647``.  When the image is uncompressed, pixels with
+        this value are restored back to ``0.0`` exactly.  Finally, a value of
+        ``NO_DITHER`` disables dithering entirely.
+
+        As mentioned above, when using the subtractive dithering algorithm it
+        is necessary to be able to generate a (pseudo-)random sequence of noise
+        for each pixel, and replay that same sequence upon decompressing.  To
+        facilitate this, a random seed between 1 and 10000 (inclusive) is used
+        to seed a random number generator, and that seed is stored in the
+        ``ZDITHER0`` keyword in the header of the compressed HDU.  In order to
+        use that seed to generate the same sequence of random numbers the same
+        random number generator must be used at compression and decompression
+        time; for that reason the tiled image convention provides an
+        implementation of a very simple pseudo-random number generator.  The
+        seed itself can be provided in one of three ways, controllable by the
+        ``dither_seed`` argument:  It may be specified manually, or it may be
+        generated arbitrarily based on the system's clock
+        (``DITHER_SEED_CLOCK``) or based on a checksum of the pixels in the
+        image's first tile (``DITHER_SEED_CHECKSUM``).  The clock-based method
+        is the default, and is sufficient to ensure that the value is
+        reasonably "arbitrary" and that the same seed is unlikely to be
+        generated sequentially.  The checksum method, on the other hand,
+        ensures that the same seed is used every time for a specific image.
+        This is particularly useful for software testing as it ensures that the
+        same image will always use the same seed.
         """
 
         if not COMPRESSION_SUPPORTED:
@@ -262,6 +335,23 @@ class CompImageHDU(BinTableHDU):
                             'available.  Creation of compressed image HDUs is '
                             'disabled.')
 
+        # Handle deprecated keyword arguments
+        compression_opts = {}
+        for oldarg, newarg in self.DEPRECATED_KWARGS.items():
+            if oldarg in kwargs:
+                warnings.warn('Keyword argument %s to %s is pending '
+                              'deprecation; use %s instead' %
+                              (oldarg, self.__class__.__name__, newarg),
+                              AstropyPendingDeprecationWarning)
+                compression_opts[newarg] = kwargs[oldarg]
+                del kwargs[oldarg]
+            else:
+                compression_opts[newarg] = locals()[newarg]
+        # Include newer compression options that don't required backwards
+        # compatibility with deprecated spellings
+        compression_opts['quantize_method'] = quantize_method
+        compression_opts['dither_seed'] = dither_seed
+
         if data is DELAYED:
             # Reading the HDU from a file
             super(CompImageHDU, self).__init__(data=data, header=header)
@@ -279,8 +369,7 @@ class CompImageHDU(BinTableHDU):
             # image header (if any) and ensure it matches the input
             # data; Create the initially empty table data array to
             # hold the compressed data.
-            self.updateHeaderData(header, name, compressionType, tileSize,
-                                  hcompScale, hcompSmooth, quantizeLevel)
+            self._update_header_data(header, name, **compression_opts)
 
         # TODO: A lot of this should be passed on to an internal image HDU o
         # something like that, see ticket #88
@@ -325,19 +414,22 @@ class CompImageHDU(BinTableHDU):
         elif not COMPRESSION_SUPPORTED:
             warnings.warn('Failure matching header to a compressed image '
                           'HDU: The compression module is not available.\n'
-                          'The HDU will be treated as a Binary Table HDU.')
+                          'The HDU will be treated as a Binary Table HDU.',
+                          AstropyUserWarning)
             return False
         else:
             # Compression is supported but disabled; just pass silently (#92)
             return False
 
-    def updateHeaderData(self, image_header,
-                         name=None,
-                         compressionType=None,
-                         tileSize=None,
-                         hcompScale=None,
-                         hcompSmooth=None,
-                         quantizeLevel=None):
+    def _update_header_data(self, image_header,
+                            name=None,
+                            compression_type=None,
+                            tile_size=None,
+                            hcomp_scale=None,
+                            hcomp_smooth=None,
+                            quantize_level=None,
+                            quantize_method=None,
+                            dither_seed=None):
         """
         Update the table header (`_header`) to the compressed
         image format and to match the input data (if any).  Create
@@ -360,27 +452,37 @@ class CompImageHDU(BinTableHDU):
             the input image header will be used; if there is no name in the
             input image header then the default name 'COMPRESSED_IMAGE' is used
 
-        compressionType : str, optional
+        compression_type : str, optional
             compression algorithm 'RICE_1', 'PLIO_1', 'GZIP_1', 'HCOMPRESS_1';
             if this value is `None`, use value already in the header; if no
             value already in the header, use 'RICE_1'
 
-        tileSize : sequence of int, optional
+        tile_size : sequence of int, optional
             compression tile sizes as a list; if this value is `None`, use
             value already in the header; if no value already in the header,
             treat each row of image as a tile
 
-        hcompScale : float, optional
+        hcomp_scale : float, optional
             HCOMPRESS scale parameter; if this value is `None`, use the value
             already in the header; if no value already in the header, use 1
 
-        hcompSmooth : float, optional
+        hcomp_smooth : float, optional
             HCOMPRESS smooth parameter; if this value is `None`, use the value
             already in the header; if no value already in the header, use 0
 
-        quantizeLevel : float, optional
+        quantize_level : float, optional
             floating point quantization level; if this value is `None`, use the
             value already in the header; if no value already in header, use 16
+
+        quantize_method : int, optional
+            floating point quantization dithering method; can be either
+            NO_DITHER (-1), SUBTRACTIVE_DITHER_1 (1; default), or
+            SUBTRACTIVE_DITHER_2 (2)
+
+        dither_seed : int, optional
+            random seed to use for dithering; can be either an integer in the
+            range 1 to 1000 (inclusive), DITHER_SEED_CLOCK (0; default), or
+            DITHER_SEED_CHECKSUM (-1)
         """
 
         image_hdu = ImageHDU(data=self.data, header=self._header)
@@ -388,6 +490,23 @@ class CompImageHDU(BinTableHDU):
         self._axes = image_hdu._axes
         del image_hdu
 
+        # Determine based on the size of the input data whether to use the Q
+        # column format to store compressed data or the P format.
+        # The Q format is used only if the uncompressed data is larger than
+        # 4 GB.  This is not a perfect heuristic, as one can contrive an input
+        # array which, when compressed, the entire binary table representing
+        # the compressed data is larger than 4GB.  That said, this is the same
+        # heuristic used by CFITSIO, so this should give consistent results.
+        # And the cases where this heuristic is insufficient are extreme and
+        # almost entirely contrived corner cases, so it will do for now
+        huge_hdu = self.data.nbytes > 2 ** 32
+
+        if huge_hdu and not CFITSIO_SUPPORTS_Q_FORMAT:
+            raise IOError(
+                "Astropy cannot compress images greater than 4 GB in size "
+                "(%s is %s bytes) without CFITSIO >= 3.35" %
+                ((self.name, self.ver), self.data.nbytes))
+
         # Update the extension name in the table header
         if not name and not 'EXTNAME' in self._header:
             name = 'COMPRESSED_IMAGE'
@@ -401,19 +520,18 @@ class CompImageHDU(BinTableHDU):
             self.name = self._header['EXTNAME']
 
         # Set the compression type in the table header.
-
-        if compressionType:
-            if compressionType not in ['RICE_1', 'GZIP_1', 'PLIO_1',
-                                       'HCOMPRESS_1']:
+        if compression_type:
+            if compression_type not in ['RICE_1', 'GZIP_1', 'PLIO_1',
+                                        'HCOMPRESS_1']:
                 warnings.warn('Unknown compression type provided.  Default '
                               '(%s) compression used.' %
-                              DEFAULT_COMPRESSION_TYPE)
-                compressionType = DEFAULT_COMPRESSION_TYPE
+                              DEFAULT_COMPRESSION_TYPE, AstropyUserWarning)
+                compression_type = DEFAULT_COMPRESSION_TYPE
 
-            self._header.set('ZCMPTYPE', compressionType,
+            self._header.set('ZCMPTYPE', compression_type,
                              'compression algorithm', after='TFIELDS')
         else:
-            compressionType = self._header.get('ZCMPTYPE',
+            compression_type = self._header.get('ZCMPTYPE',
                                                 DEFAULT_COMPRESSION_TYPE)
 
         # If the input image header had BSCALE/BZERO cards, then insert
@@ -422,14 +540,14 @@ class CompImageHDU(BinTableHDU):
         if image_header:
             bzero = image_header.get('BZERO', 0.0)
             bscale = image_header.get('BSCALE', 1.0)
-            afterCard = 'EXTNAME'
+            after_keyword = 'EXTNAME'
 
             if bscale != 1.0:
-                self._header.set('BSCALE', bscale, after=afterCard)
-                afterCard = 'BSCALE'
+                self._header.set('BSCALE', bscale, after=after_keyword)
+                after_keyword = 'BSCALE'
 
             if bzero != 0.0:
-                self._header.set('BZERO', bzero, after=afterCard)
+                self._header.set('BZERO', bzero, after=after_keyword)
 
             bitpix_comment = image_header.comments['BITPIX']
             naxis_comment = image_header.comments['NAXIS']
@@ -445,10 +563,10 @@ class CompImageHDU(BinTableHDU):
         # Set the data format for the first column.  It is dependent
         # on the requested compression type.
 
-        if compressionType == 'PLIO_1':
-            tform1 = '1PI'
+        if compression_type == 'PLIO_1':
+            tform1 = '1QI' if huge_hdu else '1PI'
         else:
-            tform1 = '1PB'
+            tform1 = '1QB' if huge_hdu else '1PB'
 
         self._header.set('TFORM1', tform1,
                          'data format of field: variable length array',
@@ -461,7 +579,8 @@ class CompImageHDU(BinTableHDU):
         # Create the additional columns required for floating point
         # data and calculate the width of the output table.
 
-        if self._image_header['BITPIX'] < 0 and quantizeLevel != 0.0:
+        zbitpix = self._image_header['BITPIX']
+        if zbitpix < 0 and quantize_level != 0.0:
             # floating point image has 'COMPRESSED_DATA',
             # 'UNCOMPRESSED_DATA', 'ZSCALE', and 'ZZERO' columns (unless using
             # lossless compression, per CFITSIO)
@@ -478,13 +597,20 @@ class CompImageHDU(BinTableHDU):
                 # The required format for the GZIP_COMPRESSED_DATA is actually
                 # missing from the standard docs, but CFITSIO suggests it
                 # should be 1PB, which is logical.
-                tform2 = '1PB'
+                tform2 = '1QB' if huge_hdu else '1PB'
             else:
+                # Q format is not supported for UNCOMPRESSED_DATA columns.
                 ttype2 = 'UNCOMPRESSED_DATA'
-                if self._image_header['BITPIX'] == -32:
-                    tform2 = '1PE'
+                if zbitpix == 8:
+                    tform2 = '1QB' if huge_hdu else '1PB'
+                elif zbitpix == 16:
+                    tform2 = '1QI' if huge_hdu else '1PI'
+                elif zbitpix == 32:
+                    tform2 = '1QJ' if huge_hdu else '1PJ'
+                elif zbitpix == -32:
+                    tform2 = '1QE' if huge_hdu else '1PE'
                 else:
-                    tform2 = '1PD'
+                    tform2 = '1QD' if huge_hdu else '1PD'
 
             # Set up the second column for the table that will hold any
             # uncompressable data.
@@ -527,10 +653,10 @@ class CompImageHDU(BinTableHDU):
 
             # remove any header cards for the additional columns that
             # may be left over from the previous data
-            keyList = ['TTYPE2', 'TFORM2', 'TTYPE3', 'TFORM3', 'TTYPE4',
-                       'TFORM4']
+            to_remove = ['TTYPE2', 'TFORM2', 'TTYPE3', 'TFORM3', 'TTYPE4',
+                         'TFORM4']
 
-            for k in keyList:
+            for k in to_remove:
                 try:
                     del self._header[k]
                 except KeyError:
@@ -543,11 +669,12 @@ class CompImageHDU(BinTableHDU):
         # number of fields in the table, the indicator for a compressed
         # image HDU, the data type of the image data and the number of
         # dimensions in the image data array.
-        self._header.set('NAXIS1', ncols * 8, 'width of table in bytes')
+        self._header.set('NAXIS1', cols.dtype.itemsize,
+                         'width of table in bytes')
         self._header.set('TFIELDS', ncols, 'number of fields in each row')
         self._header.set('ZIMAGE', True, 'extension contains compressed image',
                          after=after)
-        self._header.set('ZBITPIX', self._image_header['BITPIX'],
+        self._header.set('ZBITPIX', zbitpix,
                          bitpix_comment, after='ZIMAGE')
         self._header.set('ZNAXIS', self._image_header['NAXIS'], naxis_comment,
                          after='ZBITPIX')
@@ -569,41 +696,41 @@ class CompImageHDU(BinTableHDU):
 
         naxis = self._image_header['NAXIS']
 
-        if not tileSize:
-            tileSize = []
-        elif len(tileSize) != naxis:
+        if not tile_size:
+            tile_size = []
+        elif len(tile_size) != naxis:
             warnings.warn('Provided tile size not appropriate for the data.  '
-                          'Default tile size will be used.')
-            tileSize = []
+                          'Default tile size will be used.', AstropyUserWarning)
+            tile_size = []
 
         # Set default tile dimensions for HCOMPRESS_1
 
-        if compressionType == 'HCOMPRESS_1':
+        if compression_type == 'HCOMPRESS_1':
             if (self._image_header['NAXIS1'] < 4 or
-                self._image_header['NAXIS2'] < 4):
+                    self._image_header['NAXIS2'] < 4):
                 raise ValueError('Hcompress minimum image dimension is '
                                  '4 pixels')
-            elif tileSize:
-                if tileSize[0] < 4 or tileSize[1] < 4:
+            elif tile_size:
+                if tile_size[0] < 4 or tile_size[1] < 4:
                     # user specified tile size is too small
                     raise ValueError('Hcompress minimum tile dimension is '
                                      '4 pixels')
-                major_dims = len(filter(lambda x: x > 1, tileSize))
+                major_dims = len(filter(lambda x: x > 1, tile_size))
                 if major_dims > 2:
                     raise ValueError(
                         'HCOMPRESS can only support 2-dimensional tile sizes.'
-                        'All but two of the tileSize dimensions must be set '
+                        'All but two of the tile_size dimensions must be set '
                         'to 1.')
 
-            if tileSize and (tileSize[0] == 0 and tileSize[1] == 0):
-                #compress the whole image as a single tile
-                tileSize[0] = self._image_header['NAXIS1']
-                tileSize[1] = self._image_header['NAXIS2']
+            if tile_size and (tile_size[0] == 0 and tile_size[1] == 0):
+                # compress the whole image as a single tile
+                tile_size[0] = self._image_header['NAXIS1']
+                tile_size[1] = self._image_header['NAXIS2']
 
                 for i in range(2, naxis):
                     # set all higher tile dimensions = 1
-                    tileSize[i] = 1
-            elif not tileSize:
+                    tile_size[i] = 1
+            elif not tile_size:
                 # The Hcompress algorithm is inherently 2D in nature, so the
                 # row by row tiling that is used for other compression
                 # algorithms is not appropriate.  If the image has less than 30
@@ -617,44 +744,44 @@ class CompImageHDU(BinTableHDU):
                 # least 4 rows.
 
                 # 1st tile dimension is the row length of the image
-                tileSize.append(self._image_header['NAXIS1'])
+                tile_size.append(self._image_header['NAXIS1'])
 
                 if self._image_header['NAXIS2'] <= 30:
-                    tileSize.append(self._image_header['NAXIS1'])
+                    tile_size.append(self._image_header['NAXIS1'])
                 else:
                     # look for another good tile dimension
                     naxis2 = self._image_header['NAXIS2']
                     for dim in [16, 24, 20, 30, 28, 26, 22, 18, 14]:
                         if naxis2 % dim == 0 or naxis2 % dim > 3:
-                            tileSize.append(dim)
+                            tile_size.append(dim)
                             break
                     else:
-                        tileSize.append(17)
+                        tile_size.append(17)
 
                 for i in range(2, naxis):
                     # set all higher tile dimensions = 1
-                    tileSize.append(1)
+                    tile_size.append(1)
 
             # check if requested tile size causes the last tile to have
             # less than 4 pixels
 
-            remain = self._image_header['NAXIS1'] % tileSize[0]  # 1st dimen
+            remain = self._image_header['NAXIS1'] % tile_size[0]  # 1st dimen
 
             if remain > 0 and remain < 4:
-                tileSize[0] += 1  # try increasing tile size by 1
+                tile_size[0] += 1  # try increasing tile size by 1
 
-                remain = self._image_header['NAXIS1'] % tileSize[0]
+                remain = self._image_header['NAXIS1'] % tile_size[0]
 
                 if remain > 0 and remain < 4:
                     raise ValueError('Last tile along 1st dimension has '
                                      'less than 4 pixels')
 
-            remain = self._image_header['NAXIS2'] % tileSize[1]  # 2nd dimen
+            remain = self._image_header['NAXIS2'] % tile_size[1]  # 2nd dimen
 
             if remain > 0 and remain < 4:
-                tileSize[1] += 1  # try increasing tile size by 1
+                tile_size[1] += 1  # try increasing tile size by 1
 
-                remain = self._image_header['NAXIS2'] % tileSize[1]
+                remain = self._image_header['NAXIS2'] % tile_size[1]
 
                 if remain > 0 and remain < 4:
                     raise ValueError('Last tile along 2nd dimension has '
@@ -677,8 +804,8 @@ class CompImageHDU(BinTableHDU):
             znaxis = 'ZNAXIS' + str(idx + 1)
             ztile = 'ZTILE' + str(idx + 1)
 
-            if tileSize and len(tileSize) >= idx + 1:
-                ts = tileSize[idx]
+            if tile_size and len(tile_size) >= idx + 1:
+                ts = tile_size[idx]
             else:
                 if not ztile in self._header:
                     # Default tile size
@@ -688,7 +815,7 @@ class CompImageHDU(BinTableHDU):
                         ts = 1
                 else:
                     ts = self._header[ztile]
-                tileSize.append(ts)
+                tile_size.append(ts)
 
             nrows = nrows * ((axis - 1) // ts + 1)
 
@@ -725,24 +852,24 @@ class CompImageHDU(BinTableHDU):
                 break
             zval = 'ZVAL' + str(idx)
             if self._header[zname] == 'NOISEBIT':
-                if quantizeLevel is None:
-                    quantizeLevel = self._header[zval]
+                if quantize_level is None:
+                    quantize_level = self._header[zval]
             if self._header[zname] == 'SCALE   ':
-                if hcompScale is None:
-                    hcompScale = self._header[zval]
+                if hcomp_scale is None:
+                    hcomp_scale = self._header[zval]
             if self._header[zname] == 'SMOOTH  ':
-                if hcompSmooth is None:
-                    hcompSmooth = self._header[zval]
+                if hcomp_smooth is None:
+                    hcomp_smooth = self._header[zval]
             idx += 1
 
-        if quantizeLevel is None:
-            quantizeLevel = DEFAULT_QUANTIZE_LEVEL
+        if quantize_level is None:
+            quantize_level = DEFAULT_QUANTIZE_LEVEL
 
-        if hcompScale is None:
-            hcompScale = DEFAULT_HCOMP_SCALE
+        if hcomp_scale is None:
+            hcomp_scale = DEFAULT_HCOMP_SCALE
 
-        if hcompSmooth is None:
-            hcompSmooth = DEFAULT_HCOMP_SCALE
+        if hcomp_smooth is None:
+            hcomp_smooth = DEFAULT_HCOMP_SCALE
 
         # Next, strip the table header of all the ZNAMEn and ZVALn keywords
         # that may be left over from the previous data
@@ -761,12 +888,12 @@ class CompImageHDU(BinTableHDU):
         # Finally, put the appropriate keywords back based on the
         # compression type.
 
-        afterCard = 'ZCMPTYPE'
+        after_keyword = 'ZCMPTYPE'
         idx = 1
 
-        if compressionType == 'RICE_1':
+        if compression_type == 'RICE_1':
             self._header.set('ZNAME1', 'BLOCKSIZE', 'compression block size',
-                             after=afterCard)
+                             after=after_keyword)
             self._header.set('ZVAL1', DEFAULT_BLOCK_SIZE, 'pixels per block',
                              after='ZNAME1')
 
@@ -783,28 +910,77 @@ class CompImageHDU(BinTableHDU):
             self._header.set('ZVAL2', bytepix,
                              'bytes per pixel (1, 2, 4, or 8)',
                              after='ZNAME2')
-            afterCard = 'ZVAL2'
+            after_keyword = 'ZVAL2'
             idx = 3
-        elif compressionType == 'HCOMPRESS_1':
+        elif compression_type == 'HCOMPRESS_1':
             self._header.set('ZNAME1', 'SCALE', 'HCOMPRESS scale factor',
-                             after=afterCard)
-            self._header.set('ZVAL1', hcompScale, 'HCOMPRESS scale factor',
+                             after=after_keyword)
+            self._header.set('ZVAL1', hcomp_scale, 'HCOMPRESS scale factor',
                              after='ZNAME1')
             self._header.set('ZNAME2', 'SMOOTH', 'HCOMPRESS smooth option',
                              after='ZVAL1')
-            self._header.set('ZVAL2', hcompSmooth, 'HCOMPRESS smooth option',
+            self._header.set('ZVAL2', hcomp_smooth, 'HCOMPRESS smooth option',
                              after='ZNAME2')
-            afterCard = 'ZVAL2'
+            after_keyword = 'ZVAL2'
             idx = 3
 
         if self._image_header['BITPIX'] < 0:   # floating point image
             self._header.set('ZNAME' + str(idx), 'NOISEBIT',
                              'floating point quantization level',
-                             after=afterCard)
-            self._header.set('ZVAL' + str(idx), quantizeLevel,
+                             after=after_keyword)
+            self._header.set('ZVAL' + str(idx), quantize_level,
                              'floating point quantization level',
                              after='ZNAME' + str(idx))
 
+            # Add the dither method and seed
+            if quantize_method:
+                if quantize_method not in [NO_DITHER, SUBTRACTIVE_DITHER_1,
+                                           SUBTRACTIVE_DITHER_2]:
+                    name = QUANTIZE_METHOD_NAMES[DEFAULT_QUANTIZE_METHOD]
+                    warnings.warn('Unknown quantization method provided.  '
+                                  'Default method (%s) used.' % name)
+                    quantize_method = DEFAULT_QUANTIZE_METHOD
+
+                if quantize_method == NO_DITHER:
+                    zquantiz_comment = 'No dithering during quantization'
+                else:
+                    zquantiz_comment = 'Pixel Quantization Algorithm'
+
+                self._header.set('ZQUANTIZ',
+                                 QUANTIZE_METHOD_NAMES[quantize_method],
+                                 zquantiz_comment,
+                                 after='ZVAL' + str(idx))
+            else:
+                # If the ZQUANTIZ keyword is missing the default is to assume
+                # no dithering, rather than whatever DEFAULT_QUANTIZE_METHOD
+                # is set to
+                quantize_method = self._header.get('ZQUANTIZ', NO_DITHER)
+                if isinstance(quantize_method, basestring):
+                    for k, v in QUANTIZE_METHOD_NAMES:
+                        if v.upper() == quantize_method:
+                            quantize_method = k
+                            break
+                    else:
+                        quantize_method = NO_DITHER
+
+            if quantize_method == NO_DITHER:
+                if 'ZDITHER0' in self._header:
+                    # If dithering isn't being used then there's no reason to
+                    # keep the ZDITHER0 keyword
+                    del self._header['ZDITHER0']
+            else:
+                if dither_seed:
+                    dither_seed = self._generate_dither_seed(dither_seed)
+                elif 'ZDITHER0' in self._header:
+                    dither_seed = self._header['ZDITHER0']
+                else:
+                    dither_seed = self._generate_dither_seed(
+                            DEFAULT_DITHER_SEED)
+
+                self._header.set('ZDITHER0', dither_seed,
+                                 'dithering offset when quantizing floats',
+                                 after='ZQUANTIZ')
+
         if image_header:
             # Move SIMPLE card from the image header to the
             # table header as ZSIMPLE card.
@@ -904,6 +1080,21 @@ class CompImageHDU(BinTableHDU):
             for _ in range(required_blanks - table_blanks):
                 self._header.append()
 
+    @deprecated('3.2', alternative='(refactor your code)', pending=True)
+    def updateHeaderData(self, image_header,
+                         name=None,
+                         compressionType=None,
+                         tileSize=None,
+                         hcompScale=None,
+                         hcompSmooth=None,
+                         quantizeLevel=None):
+        self._update_header_data(image_header, name=name,
+                                 compression_type=compressionType,
+                                 tile_size=tileSize,
+                                 hcomp_scale=hcompScale,
+                                 hcomp_smooth=hcompSmooth,
+                                 quantize_level=quantizeLevel)
+
     @lazyproperty
     def data(self):
         # The data attribute is the image data (not the table data).
@@ -916,8 +1107,8 @@ class CompImageHDU(BinTableHDU):
 
             zblank = None
 
-            if 'ZBLANK' in self.compData.columns.names:
-                zblank = self.compData['ZBLANK']
+            if 'ZBLANK' in self.compressed_data.columns.names:
+                zblank = self.compressed_data['ZBLANK']
             else:
                 if 'ZBLANK' in self._header:
                     zblank = np.array(self._header['ZBLANK'], dtype='int32')
@@ -943,26 +1134,32 @@ class CompImageHDU(BinTableHDU):
     @data.setter
     def data(self, data):
         if (data is not None) and (not isinstance(data, np.ndarray) or
-             data.dtype.fields is not None):
-                raise TypeError('CompImageHDU data has incorrect type:%s; '
-                                'dtype.fields = %s' %
-                                (type(data), data.dtype.fields))
+                data.dtype.fields is not None):
+            raise TypeError('CompImageHDU data has incorrect type:%s; '
+                            'dtype.fields = %s' %
+                            (type(data), data.dtype.fields))
 
     @lazyproperty
-    def compData(self):
+    def compressed_data(self):
         # First we will get the table data (the compressed
         # data) from the file, if there is any.
-        compData = super(BinTableHDU, self).data
-        if isinstance(compData, np.rec.recarray):
+        compressed_data = super(BinTableHDU, self).data
+        if isinstance(compressed_data, np.rec.recarray):
             del self.data
-            return compData
+            return compressed_data
         else:
-            # This will actually set self.compData with the pre-allocated space
-            # for the compression data; this is something I might do away with
-            # in the future
-            self.updateCompressedData()
+            # This will actually set self.compressed_data with the
+            # pre-allocated space for the compression data; this is something I
+            # might do away with in the future
+            self._update_compressed_data()
 
-        return self.compData
+        return self.compressed_data
+
+    @lazyproperty
+    @deprecated('3.2', alternative='the `.compressed_data attribute`',
+                pending=True)
+    def compData(self):
+        return self.compressed_data
 
     @property
     def shape(self):
@@ -1144,7 +1341,7 @@ class CompImageHDU(BinTableHDU):
             del self._image_header['ZTENSION']
             if self._header['ZTENSION'] != 'IMAGE':
                 warnings.warn("ZTENSION keyword in compressed "
-                              "extension != 'IMAGE'")
+                              "extension != 'IMAGE'", AstropyUserWarning)
             self._image_header.set('XTENSION', 'IMAGE',
                                    self._header.comments['ZTENSION'])
         except KeyError:
@@ -1201,7 +1398,7 @@ class CompImageHDU(BinTableHDU):
         return (self.name, class_name, len(self.header), _shape,
                 _format)
 
-    def updateCompressedData(self):
+    def _update_compressed_data(self):
         """
         Compress the image data so that it may be written to a file.
         """
@@ -1214,7 +1411,7 @@ class CompImageHDU(BinTableHDU):
                 self._header.get('ZNAXIS', 0) != len(self.data.shape) or
                 self._header.get('ZBITPIX', 0) != image_bitpix or
                 self.shape != self.data.shape):
-            self.updateHeaderData(self.header)
+            self._update_header_data(self.header)
 
         # TODO: This is copied right out of _ImageBaseHDU._writedata_internal;
         # it would be cool if we could use an internal ImageHDU and use that to
@@ -1245,59 +1442,63 @@ class CompImageHDU(BinTableHDU):
             # Compress the data.
             # The current implementation of compress_hdu assumes the empty
             # compressed data table has already been initialized in
-            # self.compData, and writes directly to it
+            # self.compressed_data, and writes directly to it
             # compress_hdu returns the size of the heap for the written
             # compressed image table
-            heapsize, self.compData = compression.compress_hdu(self)
+            heapsize, self.compressed_data = compression.compress_hdu(self)
         finally:
             # if data was byteswapped return it to its original order
             if should_swap:
                 self.data.byteswap(True)
             self.data = old_data
 
-        dtype = np.rec.format_parser(','.join(self.columns._recformats),
-                                     self.columns.names, None).dtype
         # CFITSIO will write the compressed data in big-endian order
-        dtype = dtype.newbyteorder('>')
-        buf = self.compData
-        compData = buf[:self._theap].view(dtype=dtype, type=np.rec.recarray)
-        self.compData = compData.view(FITS_rec)
-        self.compData._coldefs = self.columns
-        self.compData._heapoffset = self._theap
-        self.compData._heapsize = heapsize
-        self.compData._buffer = buf
-        self.compData.formats = self.columns.formats
+        dtype = self.columns.dtype.newbyteorder('>')
+        buf = self.compressed_data
+        compressed_data = buf[:self._theap].view(dtype=dtype,
+                                                 type=np.rec.recarray)
+        self.compressed_data = compressed_data.view(FITS_rec)
+        self.compressed_data._coldefs = self.columns
+        self.compressed_data._heapoffset = self._theap
+        self.compressed_data._heapsize = heapsize
+        self.compressed_data.formats = self.columns.formats
 
         # Update the table header cards to match the compressed data.
-        self.updateHeader()
+        self._update_header()
 
-    def updateHeader(self):
+    @deprecated('3.2', alternative='(refactor your code)', pending=True)
+    def updateCompressedData(self):
+        self._update_compressed_data()
+
+    def _update_header(self):
         """
         Update the table header cards to match the compressed data.
         """
 
         # Get the _heapsize attribute to match the data.
-        self.compData._scale_back()
+        self.compressed_data._scale_back()
 
         # Check that TFIELDS and NAXIS2 match the data.
-        self._header['TFIELDS'] = self.compData._nfields
-        self._header['NAXIS2'] = self.compData.shape[0]
+        self._header['TFIELDS'] = self.compressed_data._nfields
+        self._header['NAXIS2'] = self.compressed_data.shape[0]
 
         # Calculate PCOUNT, for variable length tables.
         _tbsize = self._header['NAXIS1'] * self._header['NAXIS2']
         _heapstart = self._header.get('THEAP', _tbsize)
-        self.compData._gap = _heapstart - _tbsize
-        _pcount = self.compData._heapsize + self.compData._gap
+        self.compressed_data._gap = _heapstart - _tbsize
+        _pcount = self.compressed_data._heapsize + self.compressed_data._gap
 
         if _pcount > 0:
             self._header['PCOUNT'] = _pcount
 
         # Update TFORM for variable length columns.
-        for idx in range(self.compData._nfields):
-            format = self.compData._coldefs._recformats[idx]
+        for idx in range(self.compressed_data._nfields):
+            format = self.compressed_data._coldefs._recformats[idx]
             if isinstance(format, _FormatP):
-                _max = self.compData.field(idx).max
-                format = _FormatP(format.dtype, repeat=format.repeat, max=_max)
+                _max = self.compressed_data.field(idx).max
+                format_cls = format.__class__
+                format = format_cls(format.dtype, repeat=format.repeat,
+                                    max=_max)
                 self._header['TFORM' + str(idx + 1)] = format.tform
         # Insure that for RICE_1 that the BLOCKSIZE and BYTEPIX cards
         # are present and set to the hard coded values used by the
@@ -1322,6 +1523,10 @@ class CompImageHDU(BinTableHDU):
                              'bytes per pixel (1, 2, 4, or 8)',
                              after='ZNAME2')
 
+    @deprecated('3.2', alternative='(refactor your code)', pending=True)
+    def updateHeader(self):
+        self._update_header()
+
     def scale(self, type=None, option='old', bscale=1, bzero=0):
         """
         Scale image data by using ``BSCALE`` and ``BZERO``.
@@ -1375,7 +1580,6 @@ class CompImageHDU(BinTableHDU):
                 else:
                     _min = np.minimum.reduce(self.data.flat)
                     _max = np.maximum.reduce(self.data.flat)
-                    self.data.shape = dims
 
                     if _type == np.uint8:  # uint8 case
                         _zero = _min
@@ -1422,7 +1626,7 @@ class CompImageHDU(BinTableHDU):
         self.header['BITPIX'] = self._bitpix
 
         # Update the table header to match the scaled data
-        self.updateHeaderData(self.header)
+        self._update_header_data(self.header)
 
         # Since the image has been manually scaled, the current
         # bitpix/bzero/bscale now serve as the 'original' scaling of the image,
@@ -1436,8 +1640,25 @@ class CompImageHDU(BinTableHDU):
     def _prewriteto(self, checksum=False, inplace=False):
         if self._scale_back:
             self.scale(_ImageBaseHDU.NumCode[self._orig_bitpix])
-        if self._data_loaded and self.data is not None:
-            self.updateCompressedData()
+
+        if self._has_data:
+            self._update_compressed_data()
+
+            # Use methods in the superclass to update the header with
+            # scale/checksum keywords based on the data type of the image data
+            self._update_uint_scale_keywords()
+            self._update_checksum(checksum, checksum_keyword='ZHECKSUM',
+                                  datasum_keyword='ZDATASUM')
+
+            # Store a temporary backup of self.data in a different attribute;
+            # see below
+            self._imagedata = self.data
+
+            # Now we need to perform an ugly hack to set the compressed data as
+            # the .data attribute on the HDU so that the call to _writedata
+            # handles it propertly
+            self.__dict__['data'] = self.compressed_data
+
         # Doesn't call the super's _prewriteto, since it calls
         # self.data._scale_back(), which is meaningless here.
         return ExtensionHDU._prewriteto(self, checksum=checksum,
@@ -1452,28 +1673,21 @@ class CompImageHDU(BinTableHDU):
 
         return ExtensionHDU._writeheader(self, fileobj)
 
-    def _writedata_internal(self, fileobj):
+    def _writedata(self, fileobj):
         """
-        Like the normal `BinTableHDU._writedata_internal`(), but we need to
-        make sure the byte swap is done on the compressed data and not the
-        image data, which requires a little messing with attributes.
+        Wrap the basic ``_writedata`` method to restore the ``.data``
+        attribute to the uncompressed image data in the case of an exception.
         """
 
-        size = 0
-
-        if self.data is not None:
-            imagedata = self.data
-            # TODO: Ick; have to assign to __dict__ to bypass _setdata; need to
-            # find a way to fix this
-            self.__dict__['data'] = self.compData
-            #self.data = self.compData
-            try:
-                size += self._binary_table_byte_swap(fileobj)
-            finally:
-                self.data = imagedata
-            size += self.compData.size * self.compData.itemsize
-
-        return size
+        try:
+            return super(CompImageHDU, self)._writedata(fileobj)
+        finally:
+            # Restore the .data attribute to its rightful value (if any)
+            if hasattr(self, '_imagedata'):
+                self.__dict__['data'] = self._imagedata
+                del self._imagedata
+            else:
+                del self.data
 
     # TODO: This was copied right out of _ImageBaseHDU; get rid of it once we
     # find a way to rewrite this class as either a subclass or wrapper for an
@@ -1529,9 +1743,9 @@ class CompImageHDU(BinTableHDU):
         Calculate the value for the ``DATASUM`` card in the HDU.
         """
 
-        if self._data_loaded and self.data is not None:
+        if self._has_data:
             # We have the data to be used.
-            return self._calculate_datasum_from_data(self.compData,
+            return self._calculate_datasum_from_data(self.compressed_data,
                                                      blocking)
         else:
             # This is the case where the data has not been read from the
@@ -1540,3 +1754,46 @@ class CompImageHDU(BinTableHDU):
             # is no data at all.  This can also be handled in a generic
             # manner.
             return super(CompImageHDU, self)._calculate_datasum(blocking)
+
+    def _generate_dither_seed(self, seed):
+        if not _is_int(seed):
+            raise TypeError("Seed must be an integer")
+
+        if not -1 <= seed <= 10000:
+            raise ValueError(
+                "Seed for random dithering must be either between 1 and "
+                "10000 inclusive, 0 for autogeneration from the system "
+                "clock, or -1 for autogeneration from a checksum of the first "
+                "image tile (got %s)" % seed)
+
+        if seed == DITHER_SEED_CHECKSUM:
+            # Determine the tile dimensions from the ZTILEn keywords
+            naxis = self._header['ZNAXIS']
+            tile_dims = [self._header['ZTILE%d' % (idx + 1)]
+                         for idx in range(naxis)]
+            tile_dims.reverse()
+
+            # Get the first tile by using the tile dimensions as the end
+            # indices of slices (starting from 0)
+            first_tile = self.data[tuple(slice(d) for d in tile_dims)]
+
+            # The checksum agorithm used is literally just the sum of the bytes
+            # of the tile data (not its actual floating point values).  Integer
+            # overflow is irrelevant.
+            csum = first_tile.view(dtype='uint8').sum()
+
+            # Since CFITSIO uses an unsigned long (which may be different on
+            # different platforms) go ahead and truncate the sum to its
+            # unsigned long value and take the result modulo 10000
+            return (ctypes.c_ulong(csum).value % 10000) + 1
+        elif seed == DITHER_SEED_CLOCK:
+            # This isn't exactly the same algorithm as CFITSIO, but that's okay
+            # since the result is meant to be arbitrary. The primary difference
+            # is that CFITSIO incorporates the HDU number into the result in
+            # the hopes of heading off the possibility of the same seed being
+            # generated for two HDUs at the same time.  Here instead we just
+            # add in the HDU object's id
+            return ((sum(int(x) for x in math.modf(time.time())) + id(self)) %
+                    10000) + 1
+        else:
+            return seed
diff --git a/astropy/io/fits/hdu/groups.py b/astropy/io/fits/hdu/groups.py
index fe7804c..db6151f 100644
--- a/astropy/io/fits/hdu/groups.py
+++ b/astropy/io/fits/hdu/groups.py
@@ -7,7 +7,7 @@ from .image import _ImageBaseHDU, PrimaryHDU
 from .table import _TableLikeHDU
 from ..column import Column, ColDefs, FITS2NUMPY
 from ..fitsrec import FITS_rec, FITS_record
-from ..util import _is_int, _is_pseudo_unsigned
+from ..util import _is_int, _is_pseudo_unsigned, _unsigned_zero
 
 from ....utils import lazyproperty
 
@@ -93,7 +93,7 @@ class GroupData(FITS_rec):
 
     _record_type = Group
 
-    def __new__(subtype, input=None, bitpix=None, pardata=None, parnames=[],
+    def __new__(cls, input=None, bitpix=None, pardata=None, parnames=[],
                 bscale=None, bzero=None, parbscales=None, parbzeros=None):
         """
         Parameters
@@ -164,7 +164,7 @@ class GroupData(FITS_rec):
 
             coldefs = ColDefs(cols)
 
-            self = FITS_rec.__new__(subtype,
+            self = FITS_rec.__new__(cls,
                                     np.rec.array(None,
                                                  formats=formats,
                                                  names=coldefs.names,
@@ -185,7 +185,7 @@ class GroupData(FITS_rec):
             else:
                 np.rec.recarray.field(self, npars)[:] = input
         else:
-            self = FITS_rec.__new__(subtype, input)
+            self = FITS_rec.__new__(cls, input)
             self.parnames = None
         return self
 
@@ -240,7 +240,7 @@ class GroupsHDU(PrimaryHDU, _TableLikeHDU):
     _width2format = {8: 'B', 16: 'I', 32: 'J', 64: 'K', -32: 'E', -64: 'D'}
     _data_type = GroupData
 
-    def __init__(self, data=None, header=None, name=None):
+    def __init__(self, data=None, header=None):
         """
         TODO: Write me
         """
@@ -289,7 +289,7 @@ class GroupsHDU(PrimaryHDU, _TableLikeHDU):
 
     @lazyproperty
     def columns(self):
-        if self._data_loaded and hasattr(self.data, '_coldefs'):
+        if self._has_data and hasattr(self.data, '_coldefs'):
             return self.data._coldefs
 
         format = self._width2format[self._header['BITPIX']]
@@ -355,29 +355,29 @@ class GroupsHDU(PrimaryHDU, _TableLikeHDU):
 
         if self._data_loaded:
             if isinstance(self.data, GroupData):
-                field0 = self.data.dtype.names[0]
-                field0_code = self.data.dtype.fields[field0][0].name
-                self._header['BITPIX'] = _ImageBaseHDU.ImgCode[field0_code]
                 self._axes = list(self.data.data.shape)[1:]
                 self._axes.reverse()
                 self._axes = [0] + self._axes
+                field0 = self.data.dtype.names[0]
+                field0_code = self.data.dtype.fields[field0][0].name
             elif self.data is None:
-                self._axes = []
+                self._axes = [0]
+                field0_code = 'uint8'  # For lack of a better default
             else:
                 raise ValueError('incorrect array type')
 
+            self._header['BITPIX'] = _ImageBaseHDU.ImgCode[field0_code]
+
         self._header['NAXIS'] = len(self._axes)
 
         # add NAXISi if it does not exist
         for idx, axis in enumerate(self._axes):
-            try:
-                self._header['NAXIS' + str(idx + 1)] = axis
-            except KeyError:
-                if (idx == 0):
-                    after = 'NAXIS'
-                else:
-                    after = 'NAXIS' + str(idx)
-                self._header.set('NAXIS' + str(idx + 1), axis, after=after)
+            if (idx == 0):
+                after = 'NAXIS'
+            else:
+                after = 'NAXIS' + str(idx)
+
+            self._header.set('NAXIS' + str(idx + 1), axis, after=after)
 
         # delete extra NAXISi's
         for idx in range(len(self._axes) + 1, old_naxis + 1):
@@ -386,7 +386,7 @@ class GroupsHDU(PrimaryHDU, _TableLikeHDU):
             except KeyError:
                 pass
 
-        if self._data_loaded and isinstance(self.data, GroupData):
+        if self._has_data and isinstance(self.data, GroupData):
             self._header.set('GROUPS', True,
                              after='NAXIS' + str(len(self._axes)))
             self._header.set('PCOUNT', len(self.data.parnames), after='GROUPS')
@@ -494,7 +494,7 @@ class GroupsHDU(PrimaryHDU, _TableLikeHDU):
         Calculate the value for the ``DATASUM`` card in the HDU.
         """
 
-        if self._data_loaded and self.data is not None:
+        if self._has_data:
             # We have the data to be used.
             # Check the byte order of the data.  If it is little endian we
             # must swap it before calculating the datasum.
@@ -534,10 +534,9 @@ class GroupsHDU(PrimaryHDU, _TableLikeHDU):
         if shape:
             shape = shape[1:]
 
-        if self._data_loaded:
-            # Update the format
-            format = self.data.dtype.fields[self.data.dtype.names[0]][0].name
-            format = format[format.rfind('.') + 1:]
+            if shape and all(shape):
+                # Update the format
+                format = self.columns[0].dtype.name
 
         # Update the GCOUNT report
         gcount = '%d Groups  %d Parameters' % (self._gcount, self._pcount)
diff --git a/astropy/io/fits/hdu/hdulist.py b/astropy/io/fits/hdu/hdulist.py
index 46eddac..de46274 100644
--- a/astropy/io/fits/hdu/hdulist.py
+++ b/astropy/io/fits/hdu/hdulist.py
@@ -8,19 +8,19 @@ import shutil
 import sys
 import warnings
 
-from numpy import memmap as Memmap
-
 from . import compressed
 from .base import _BaseHDU, _ValidHDU, _NonstandardHDU, ExtensionHDU
 from .groups import GroupsHDU
 from .image import PrimaryHDU, ImageHDU
-from .table import _TableBaseHDU
-from ..file import PYTHON_MODES, _File
-from ..header import BLOCK_SIZE, _pad_length
-from ..util import (_is_int, _tmp_name, isfile, fileobj_name, fileobj_closed,
-                    fileobj_mode, ignore_sigint, _get_array_mmap, indent)
+from ..file import _File
+from ..header import _pad_length
+from ..util import (_is_int, _tmp_name, fileobj_closed, ignore_sigint,
+                    _get_array_mmap)
 from ..verify import _Verify, _ErrList, VerifyError, VerifyWarning
 
+from ....utils import indent
+from ....utils.exceptions import AstropyUserWarning
+
 
 def fitsopen(name, mode='readonly', memmap=None, save_backup=False, **kwargs):
     """Factory function to open a FITS file and return an `HDUList` object.
@@ -35,9 +35,8 @@ def fitsopen(name, mode='readonly', memmap=None, save_backup=False, **kwargs):
         'ostream'.
 
         If `name` is a file object that is already opened, `mode` must
-        match the mode the file was opened with, copyonwrite (rb),
-        readonly (rb), update (rb+), append (ab+), ostream (w),
-        denywrite (rb)).
+        match the mode the file was opened with, readonly (rb), update (rb+),
+        append (ab+), ostream (w), denywrite (rb)).
 
     memmap : bool
         Is memory mapping to be used?
@@ -235,7 +234,7 @@ class HDUList(list, _Verify):
         self.close()
 
     @classmethod
-    def fromfile(cls, fileobj, mode='readonly', memmap=False,
+    def fromfile(cls, fileobj, mode=None, memmap=False,
                  save_backup=False, **kwargs):
         """
         Creates an HDUList instance from a file-like object.
@@ -307,7 +306,7 @@ class HDUList(list, _Verify):
             file       File object associated with the HDU
             filename   Name of associated file object
             filemode   Mode in which the file was opened (readonly,
-                       copyonwrite, update, append, denywrite, ostream)
+                       update, append, denywrite, ostream)
             resized    Flag that when `True` indicates that the data has been
                        resized since the last read/write so the returned values
                        may not be valid.
@@ -433,7 +432,7 @@ class HDUList(list, _Verify):
                 # You passed a Primary HDU but we need an Extension HDU
                 # so create an Extension HDU from the input Primary HDU.
                 # TODO: This isn't necessarily sufficient to copy the HDU;
-                # _hdrLoc and friends need to be copied too.
+                # _header_offset and friends need to be copied too.
                 hdu = ImageHDU(hdu.data, hdu.header)
         else:
             if not isinstance(hdu, (PrimaryHDU, _NonstandardHDU)):
@@ -495,7 +494,7 @@ class HDUList(list, _Verify):
                 name = name.strip().upper()
             # 'PRIMARY' should always work as a reference to the first HDU
             if ((name == _key or (_key == 'PRIMARY' and idx == 0)) and
-                (_ver is None or _ver == hdu._extver)):
+                (_ver is None or _ver == hdu.ver)):
                 found = idx
                 nfound += 1
 
@@ -535,7 +534,7 @@ class HDUList(list, _Verify):
 
         if self.__file.mode not in ('append', 'update', 'ostream'):
             warnings.warn("Flush for '%s' mode is not supported."
-                          % self.__file.mode)
+                          % self.__file.mode, AstropyUserWarning)
             return
 
         if self._save_backup and self.__file.mode in ('append', 'update'):
@@ -549,7 +548,7 @@ class HDUList(list, _Verify):
                     backup = filename + '.bak.' + str(idx)
                     idx += 1
                 warnings.warn('Saving a backup of %s to %s.' %
-                              (filename, backup))
+                              (filename, backup), AstropyUserWarning)
                 try:
                     shutil.copy(filename, backup)
                 except IOError as e:
@@ -613,8 +612,8 @@ class HDUList(list, _Verify):
         Parameters
         ----------
         fileobj : file path, file object or file-like object
-            File to write to.  If a file object, must be opened for
-            append (ab+).
+            File to write to.  If a file object, must be opened in a
+            writeable mode.
 
         output_verify : str
             Output verification option.  Must be one of ``"fix"``,
@@ -630,44 +629,25 @@ class HDUList(list, _Verify):
         """
 
         if (len(self) == 0):
-            warnings.warn("There is nothing to write.")
+            warnings.warn("There is nothing to write.", AstropyUserWarning)
             return
 
         self.verify(option=output_verify)
 
-        # check if the file object is closed
-        closed = fileobj_closed(fileobj)
-        fmode = fileobj_mode(fileobj) or 'ab+'
-        filename = fileobj_name(fileobj)
-
-        # check if the output file already exists
-        if (isfile(fileobj) or
-            isinstance(fileobj, (basestring, gzip.GzipFile))):
-            if (os.path.exists(filename) and os.path.getsize(filename) != 0):
-                if clobber:
-                    warnings.warn("Overwriting existing file '%s'." % filename)
-                    if not closed:
-                        fileobj.close()
-                    os.remove(filename)
-                else:
-                    raise IOError("File '%s' already exists." % filename)
-        elif (hasattr(fileobj, 'len') and fileobj.len > 0):
-            if clobber:
-                warnings.warn("Overwriting existing file '%s'." % filename)
-                name.truncate(0)
-            else:
-                raise IOError("File '%s' already exists." % filename)
-
         # make sure the EXTEND keyword is there if there is extension
         self.update_extend()
 
-        mode = 'copyonwrite'
-        for key, val in PYTHON_MODES.iteritems():
-            if val == fmode:
-                mode = key
-                break
+        # make note of whether the input file object is already open, in which
+        # case we should not close it after writing (that should be the job
+        # of the caller)
+        closed = fileobj_closed(fileobj)
 
-        hdulist = fitsopen(fileobj, mode=mode)
+        # writeto is only for writing a new file from scratch, so the most
+        # sensible mode to require is 'ostream'.  This can accept an open
+        # file object that's open to write only, or in append/update modes
+        # but only if the file doesn't exist.
+        fileobj = _File(fileobj, mode='ostream', clobber=clobber)
+        hdulist = self.fromfile(fileobj)
 
         for hdu in self:
             hdu._prewriteto(checksum=checksum)
@@ -675,6 +655,7 @@ class HDUList(list, _Verify):
                 hdu._writeto(hdulist.__file)
             finally:
                 hdu._postwriteto()
+
         hdulist.close(output_verify=output_verify, closed=closed)
 
     def close(self, output_verify='exception', verbose=False, closed=True):
@@ -764,7 +745,7 @@ class HDUList(list, _Verify):
         return None
 
     @classmethod
-    def _readfrom(cls, fileobj=None, data=None, mode='readonly',
+    def _readfrom(cls, fileobj=None, data=None, mode=None,
                   memmap=False, save_backup=False, **kwargs):
         """
         Provides the implementations from HDUList.fromfile and
@@ -773,10 +754,20 @@ class HDUList(list, _Verify):
         """
 
         if fileobj is not None:
-            # instantiate a FITS file object (ffo)
-            ffo = _File(fileobj, mode=mode, memmap=memmap)
+            if not isinstance(fileobj, _File):
+                # instantiate a FITS file object (ffo)
+                ffo = _File(fileobj, mode=mode, memmap=memmap)
+            else:
+                ffo = fileobj
+            # The pyfits mode is determined by the _File initializer if the
+            # supplied mode was None
+            mode = ffo.mode
             hdulist = cls(file=ffo)
         else:
+            if mode is None:
+                # The default mode
+                mode = 'readonly'
+
             hdulist = cls()
             # This method is currently only called from HDUList.fromstring and
             # HDUList.fromfile.  If fileobj is None then this must be the
@@ -792,15 +783,15 @@ class HDUList(list, _Verify):
                 kwargs['disable_image_compression']):
                 compressed.COMPRESSION_ENABLED = False
 
-            if mode == 'ostream':
-                # Output stream--not interested in reading/parsing the
-                # HDUs--just writing to the output file
-                return hdulist
-
             # read all HDUs
             while True:
                 try:
                     if fileobj is not None:
+                        if ffo.writeonly:
+                            # Output stream--not interested in reading/parsing
+                            # the HDUs--just writing to the output file
+                            return hdulist
+
                         try:
                             hdu = _BaseHDU.readfrom(ffo, **kwargs)
                         except EOFError:
@@ -814,7 +805,7 @@ class HDUList(list, _Verify):
                         if not data:
                             break
                         hdu = _BaseHDU.fromstring(data)
-                        data = data[hdu._datLoc + hdu._datSpan:]
+                        data = data[hdu._data_offset + hdu._data_size:]
                     hdulist.append(hdu)
                     hdu._new = False
                     if 'checksum' in kwargs:
@@ -823,7 +814,7 @@ class HDUList(list, _Verify):
                 # corrupted HDU
                 except (VerifyError, ValueError) as err:
                     warnings.warn(
-                        'Error validating header for HDU #%d (note: PyFITS '
+                        'Error validating header for HDU #%d (note: Astropy '
                         'uses zero-based indexing).\n%s\n'
                         'There may be extra bytes after the last HDU or the '
                         'file is corrupted.' %
@@ -948,7 +939,7 @@ class HDUList(list, _Verify):
                 # Collect a list of open mmaps to the data; this well be used
                 # later.  See below.
                 mmaps = [(idx, _get_array_mmap(hdu.data), hdu.data)
-                         for idx, hdu in enumerate(self) if hdu._data_loaded]
+                         for idx, hdu in enumerate(self) if hdu._has_data]
 
             hdulist.__file.close()
             self.__file.close()
@@ -979,8 +970,7 @@ class HDUList(list, _Verify):
             for hdu in self:
                 # Need to update the _file attribute and close any open mmaps
                 # on each HDU
-                if (hdu._data_loaded and
-                    _get_array_mmap(hdu.data) is not None):
+                if hdu._has_data and _get_array_mmap(hdu.data) is not None:
                     del hdu.data
                 hdu._file = ffo
 
@@ -1043,7 +1033,7 @@ class HDUList(list, _Verify):
             for hdu in self:
                 # Header:
                 nbytes = len(str(hdu._header))
-                if nbytes != (hdu._datLoc - hdu._hdrLoc):
+                if nbytes != (hdu._data_offset - hdu._header_offset):
                     self._resize = True
                     self._truncate = False
                     if verbose:
@@ -1051,12 +1041,12 @@ class HDUList(list, _Verify):
                     break
 
                 # Data:
-                if not hdu._data_loaded or hdu.data is None:
+                if not hdu._has_data:
                     continue
 
                 nbytes = hdu.size
                 nbytes = nbytes + _pad_length(nbytes)
-                if nbytes != hdu._datSpan:
+                if nbytes != hdu._data_size:
                     self._resize = True
                     self._truncate = False
                     if verbose:
@@ -1065,7 +1055,7 @@ class HDUList(list, _Verify):
 
             if self._truncate:
                 try:
-                    self.__file.truncate(hdu._datLoc + hdu._datSpan)
+                    self.__file.truncate(hdu._data_offset + hdu._data_size)
                 except IOError:
                     self._resize = True
                 self._truncate = False
diff --git a/astropy/io/fits/hdu/image.py b/astropy/io/fits/hdu/image.py
index 646921c..20c9799 100644
--- a/astropy/io/fits/hdu/image.py
+++ b/astropy/io/fits/hdu/image.py
@@ -134,6 +134,11 @@ class _ImageBaseHDU(_ValidHDU):
         self._modified = False
 
         if data is DELAYED:
+            if (not do_not_scale_image_data and
+                    (self._bscale != 1 or self._bzero != 0)):
+                # This indicates that when the data is accessed or written out
+                # to a new file it will need to be rescaled
+                self._data_needs_rescale = True
             return
         else:
             self.data = data
@@ -193,7 +198,7 @@ class _ImageBaseHDU(_ValidHDU):
         if len(self._axes) < 1:
             return
 
-        data = self._get_scaled_image_data(self._datLoc, self.shape)
+        data = self._get_scaled_image_data(self._data_offset, self.shape)
         self._update_header_scale_info(data.dtype)
 
         return data
@@ -244,7 +249,7 @@ class _ImageBaseHDU(_ValidHDU):
         """
 
         if not (self._modified or self._header._modified or
-                (self._data_loaded and self.shape != self.data.shape)):
+                (self._has_data and self.shape != self.data.shape)):
             # Not likely that anything needs updating
             return
 
@@ -262,7 +267,7 @@ class _ImageBaseHDU(_ValidHDU):
         # If the data's shape has changed (this may have happened without our
         # noticing either via a direct update to the data.shape attribute) we
         # need to update the internal self._axes
-        if self._data_loaded and self.shape != self.data.shape:
+        if self._has_data and self.shape != self.data.shape:
             self._axes = list(self.data.shape)
             self._axes.reverse()
 
@@ -433,7 +438,7 @@ class _ImageBaseHDU(_ValidHDU):
             self.scale(self.NumCode[self._orig_bitpix])
 
         self.update_header()
-        if not inplace and not self._data_loaded:
+        if not inplace and not self._has_data:
             self._update_header_scale_info()
         return super(_ImageBaseHDU, self)._prewriteto(checksum, inplace)
 
@@ -590,8 +595,12 @@ class _ImageBaseHDU(_ValidHDU):
                 format = self.data.dtype.name
                 format = format[format.rfind('.')+1:]
         else:
-            # if data is not touched yet, use header info.
-            format = self.NumCode[self._bitpix]
+            if self.shape and all(self.shape):
+                # Only show the format if all the dimensions are non-zero
+                # if data is not touched yet, use header info.
+                format = self.NumCode[self._bitpix]
+            else:
+                format = ''
 
         # Display shape in FITS-order
         shape = tuple(reversed(self.shape))
@@ -603,7 +612,7 @@ class _ImageBaseHDU(_ValidHDU):
         Calculate the value for the ``DATASUM`` card in the HDU.
         """
 
-        if self._data_loaded and self.data is not None:
+        if self._has_data:
             # We have the data to be used.
             d = self.data
 
@@ -705,7 +714,7 @@ class Section(object):
 
             dims = tuple(dims)
             bitpix = self.hdu._orig_bitpix
-            offset = self.hdu._datLoc + (offset * abs(bitpix) // 8)
+            offset = self.hdu._data_offset + (offset * abs(bitpix) // 8)
             data = self.hdu._get_scaled_image_data(offset, dims)
         else:
             data = self._getdata(key)
@@ -714,15 +723,14 @@ class Section(object):
 
     def _getdata(self, keys):
         out = []
-        naxis = len(self.hdu.shape)
 
         # Determine the number of slices in the set of input keys.
         # If there is only one slice then the result is a one dimensional
         # array, otherwise the result will be a multidimensional array.
-        numSlices = 0
+        n_slices = 0
         for idx, key in enumerate(keys):
             if isinstance(key, slice):
-                numSlices = numSlices + 1
+                n_slices = n_slices + 1
 
         for idx, key in enumerate(keys):
             if isinstance(key, slice):
@@ -736,7 +744,7 @@ class Section(object):
                     key1[idx] = k
                     key1 = tuple(key1)
 
-                    if numSlices > 1:
+                    if n_slices > 1:
                         # This is not the only slice in the list of keys so
                         # we simply get the data for this section and append
                         # it to the list that is output.  The out variable will
@@ -770,6 +778,8 @@ class PrimaryHDU(_ImageBaseHDU):
     FITS primary HDU class.
     """
 
+    _default_name = 'PRIMARY'
+
     def __init__(self, data=None, header=None, do_not_scale_image_data=False,
                  uint=False, scale_back=False):
         """
@@ -807,9 +817,6 @@ class PrimaryHDU(_ImageBaseHDU):
             do_not_scale_image_data=do_not_scale_image_data, uint=uint,
             scale_back=scale_back)
 
-        self._name = 'PRIMARY'
-        self._extver = 1
-
         # insert the keywords EXTEND
         if header is None:
             dim = self._header['NAXIS']
diff --git a/astropy/io/fits/hdu/nonstandard.py b/astropy/io/fits/hdu/nonstandard.py
index 436b3c1..859dad9 100644
--- a/astropy/io/fits/hdu/nonstandard.py
+++ b/astropy/io/fits/hdu/nonstandard.py
@@ -6,7 +6,7 @@ import io
 from ..file import _File
 from .base import NonstandardExtHDU
 from .hdulist import HDUList
-from ..header import Header
+from ..header import Header, _pad_length
 from ..util import fileobj_name
 
 from ....utils import lazyproperty
@@ -26,7 +26,7 @@ class FitsHDU(NonstandardExtHDU):
 
     @lazyproperty
     def hdulist(self):
-        self._file.seek(self._datLoc)
+        self._file.seek(self._data_offset)
         fileobj = io.BytesIO()
         # Read the data into a BytesIO--reading directly from the file
         # won't work (at least for gzipped files) due to problems deep
@@ -52,7 +52,7 @@ class FitsHDU(NonstandardExtHDU):
             Gzip compress the FITS file
         """
 
-        return cls.fromhdulist(HDUList(filename), compress=compress)
+        return cls.fromhdulist(HDUList.fromfile(filename), compress=compress)
 
     @classmethod
     def fromhdulist(cls, hdulist, compress=False):
@@ -74,9 +74,17 @@ class FitsHDU(NonstandardExtHDU):
             else:
                 name = None
             fileobj = gzip.GzipFile(name, mode='wb', fileobj=bs)
+
         hdulist.writeto(fileobj)
+
         if compress:
             fileobj.close()
+
+        # A proper HDUList should still be padded out to a multiple of 2880
+        # technically speaking
+        padding = (_pad_length(bs.tell()) * cls._padding_byte).encode('ascii')
+        bs.write(padding)
+
         bs.seek(0)
 
         cards = [
@@ -92,7 +100,7 @@ class FitsHDU(NonstandardExtHDU):
         # these at the moment
         if len(hdulist) > 1:
             for idx, hdu in enumerate(hdulist[1:]):
-                cards.append(('XIND' + str(idx + 1), hdu._hdrLoc,
+                cards.append(('XIND' + str(idx + 1), hdu._header_offset,
                               'byte offset of extension %d' % (idx + 1)))
 
         cards.append(('COMPRESS',  compress, 'Uses gzip compression'))
diff --git a/astropy/io/fits/hdu/streaming.py b/astropy/io/fits/hdu/streaming.py
index 3d000e3..1b13680 100644
--- a/astropy/io/fits/hdu/streaming.py
+++ b/astropy/io/fits/hdu/streaming.py
@@ -121,8 +121,8 @@ class StreamingHDU(object):
         # values to be modified in undesired ways...need to have a better way
         # of doing this
         tmp_hdu._header = self._header
-        self._hdrLoc = tmp_hdu._writeheader(self._ffo)[0]
-        self._datLoc = self._ffo.tell()
+        self._header_offset = tmp_hdu._writeheader(self._ffo)[0]
+        self._data_offset = self._ffo.tell()
         self._size = self.size
 
         if self._size != 0:
@@ -167,9 +167,9 @@ class StreamingHDU(object):
         `TypeError` exception is raised.
         """
 
-        curDataSize = self._ffo.tell() - self._datLoc
+        size = self._ffo.tell() - self._data_offset
 
-        if self.writecomplete or curDataSize + data.nbytes > self._size:
+        if self.writecomplete or size + data.nbytes > self._size:
             raise IOError('Attempt to write more data to the stream than the '
                           'header specified.')
 
@@ -187,7 +187,7 @@ class StreamingHDU(object):
 
         self._ffo.writearray(output)
 
-        if self._ffo.tell() - self._datLoc == self._size:
+        if self._ffo.tell() - self._data_offset == self._size:
 #
 #           the stream is full so pad the data to the next FITS block
 #
diff --git a/astropy/io/fits/hdu/table.py b/astropy/io/fits/hdu/table.py
index 52ef152..27fdaf7 100644
--- a/astropy/io/fits/hdu/table.py
+++ b/astropy/io/fits/hdu/table.py
@@ -14,14 +14,16 @@ from numpy import char as chararray
 
 from .base import DELAYED, _ValidHDU, ExtensionHDU
 from ..column import (FITS2NUMPY, KEYWORD_NAMES, KEYWORD_ATTRIBUTES, TDEF_RE,
-                      Delayed, Column, ColDefs, _ASCIIColDefs, _FormatX,
-                      _FormatP, _wrapx, _makep, _VLF, _parse_tformat,
-                      _scalar_to_format, _convert_format, _cmp_recformats)
+                      Column, ColDefs, _AsciiColDefs, _FormatX, _FormatP,
+                      _FormatQ, _makep, _VLF, _parse_tformat,
+                      _scalar_to_format, _convert_format, _cmp_recformats,
+                      _get_index)
 from ..fitsrec import FITS_rec
 from ..header import Header, _pad_length
 from ..util import _is_int, _str_to_num
 
 from ....utils import deprecated, lazyproperty
+from ....utils.exceptions import AstropyUserWarning
 
 
 class FITSTableDumpDialect(csv.excel):
@@ -44,6 +46,11 @@ class _TableLikeHDU(_ValidHDU):
     """
 
     _data_type = FITS_rec
+    _columns_type = ColDefs
+
+    # TODO: Temporary flag representing whether uints are enabled; remove this
+    # after restructuring to support uints by default on a per-column basis
+    _uint = False
 
     @classmethod
     def match_header(cls, header):
@@ -64,27 +71,22 @@ class _TableLikeHDU(_ValidHDU):
     def _get_tbdata(self):
         """Get the table data from an input HDU object."""
 
-        # TODO: Need to find a way to eliminate the check for phantom columns;
-        # this detail really needn't be worried about outside the ColDefs class
         columns = self.columns
-        recformats = [f for idx, f in enumerate(columns._recformats)
-                      if not columns[idx]._phantom]
-        formats = ','.join(recformats)
-        names = [n for idx, n in enumerate(columns.names)
-                 if not columns[idx]._phantom]
-        dtype = np.rec.format_parser(formats, names, None).dtype
 
         # TODO: Details related to variable length arrays need to be dealt with
         # specifically in the BinTableHDU class, since they're a detail
         # specific to FITS binary tables
-        if (_FormatP in [type(r) for r in recformats] and
-            self._datSpan > self._theap):
+        if (any(type(r) in (_FormatP, _FormatQ)
+                for r in columns._recformats) and
+                self._data_size > self._theap):
             # We have a heap; include it in the raw_data
-            raw_data = self._get_raw_data(self._datSpan, np.byte, self._datLoc)
-            data = raw_data[:self._theap].view(dtype=dtype,
+            raw_data = self._get_raw_data(self._data_size, np.uint8,
+                                          self._data_offset)
+            data = raw_data[:self._theap].view(dtype=columns.dtype,
                                                type=np.rec.recarray)
         else:
-            raw_data = self._get_raw_data(columns._shape, dtype, self._datLoc)
+            raw_data = self._get_raw_data(columns._shape, columns.dtype,
+                                          self._data_offset)
             data = raw_data.view(np.rec.recarray)
 
         self._init_tbdata(data)
@@ -95,11 +97,12 @@ class _TableLikeHDU(_ValidHDU):
 
         data.dtype = data.dtype.newbyteorder('>')
 
+        # hack to enable pseudo-uint support
+        data._uint = self._uint
+
         # pass datLoc, for P format
         data._heapoffset = self._theap
         data._heapsize = self._header['PCOUNT']
-        data._file = self._file
-        data._buffer = self._buffer
         tbsize = self._header['NAXIS1'] * self._header['NAXIS2']
         data._gap = self._theap - tbsize
 
@@ -121,7 +124,7 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
     FITS table extension base HDU class.
     """
 
-    def __init__(self, data=None, header=None, name=None):
+    def __init__(self, data=None, header=None, name=None, uint=False):
         """
         Parameters
         ----------
@@ -133,6 +136,9 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
 
         name : str
             name to be populated in ``EXTNAME`` keyword
+
+        uint : bool, optional
+            set to ``True`` if the table contains unsigned integer columns.
         """
 
         super(_TableBaseHDU, self).__init__(data=data, header=header,
@@ -140,7 +146,7 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
 
         if header is not None and not isinstance(header, Header):
             raise ValueError('header must be a Header object.')
-
+        self._uint = uint
         if data is DELAYED:
             # this should never happen
             if header is None:
@@ -169,7 +175,77 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
                 cards.extend(hcopy.cards)
 
             self._header = Header(cards)
-            self.data = data
+
+            if isinstance(data, np.ndarray) and data.dtype.fields is not None:
+                # self._data_type is FITS_rec.
+                if isinstance(data, self._data_type):
+                    self.data = data
+                else:
+                    # Just doing a view on the input data screws up unsigned
+                    # columns, so treat those more carefully.
+                    # TODO: I need to read this code a little more closely
+                    # again, but I think it can be simplified quite a bit with
+                    # the use of some appropriate utility functions
+                    update_coldefs = {}
+                    if 'u' in [data.dtype[k].kind for k in data.dtype.names]:
+                        self._uint = True
+                        bzeros = {2: np.uint16(2**15), 4: np.uint32(2**31),
+                                  8: np.uint64(2**63)}
+
+                        new_dtype = [
+                            (k, data.dtype[k].kind.replace('u', 'i') +
+                            str(data.dtype[k].itemsize))
+                            for k in data.dtype.names]
+
+                        new_data = np.zeros(data.shape, dtype=new_dtype)
+
+                        for k in data.dtype.fields:
+                            dtype = data.dtype[k]
+                            if dtype.kind == 'u':
+                                new_data[k] = data[k] - bzeros[dtype.itemsize]
+                                update_coldefs[k] = bzeros[dtype.itemsize]
+                            else:
+                                new_data[k] = data[k]
+                        self.data = new_data.view(self._data_type)
+                        # Uck...
+                        self.data._uint = True
+                    else:
+                        self.data = data.view(self._data_type)
+                    for k in update_coldefs:
+                        indx = _get_index(self.data.names, k)
+                        self.data._coldefs[indx].bzero = update_coldefs[k]
+                        # This is so bad that we have to update this in
+                        # duplicate...
+                        self.data._coldefs.bzeros[indx] = update_coldefs[k]
+                        # More uck...
+                        self.data._coldefs[indx]._physical_values = False
+                        self.data._coldefs[indx]._pseudo_unsigned_ints = True
+
+                self._header['NAXIS1'] = self.data.itemsize
+                self._header['NAXIS2'] = self.data.shape[0]
+                self._header['TFIELDS'] = len(self.data._coldefs)
+
+                self.columns = self.data._coldefs
+                self.update()
+
+                try:
+                   # Make the ndarrays in the Column objects of the ColDefs
+                   # object of the HDU reference the same ndarray as the HDU's
+                   # FITS_rec object.
+                    for idx in range(len(self.columns)):
+                        self.columns[idx].array = self.data.field(idx)
+
+                    # Delete the _arrays attribute so that it is recreated to
+                    # point to the new data placed in the column objects above
+                    del self.columns._arrays
+                except (TypeError, AttributeError) as e:
+                    # This shouldn't happen as long as self.columns._arrays
+                    # is a lazyproperty
+                    pass
+            elif data is None:
+                pass
+            else:
+                raise TypeError('Table data has incorrect type.')
 
         if not (isinstance(self._header[0], basestring) and
                 self._header[0].rstrip() == self._extension):
@@ -192,9 +268,9 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
 
     @lazyproperty
     def columns(self):
-        if self._data_loaded and hasattr(self.data, '_coldefs'):
+        if self._has_data and hasattr(self.data, '_coldefs'):
             return self.data._coldefs
-        return ColDefs(self)
+        return self._columns_type(self)
 
     @lazyproperty
     def data(self):
@@ -225,12 +301,21 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
                                 shape=0)
 
         if isinstance(data, np.ndarray) and data.dtype.fields is not None:
-            if not isinstance(data, self._data_type):
-                data = data.view(self._data_type)
+            # Go ahead and always make a view, even if the data is already the
+            # correct class (self._data_type) so we can update things like the
+            # column defs, if necessary
+            data = data.view(self._data_type)
+
+            if not isinstance(data.columns, self._columns_type):
+                # This would be the place, if the input data was for an ASCII
+                # table and this is binary table, or vice versa, to convert the
+                # data to the appropriate format for the table type
+                new_columns = self._columns_type(data.columns)
+                data = FITS_rec.from_columns(new_columns)
 
             self.__dict__['data'] = data
 
-            self.columns = self.data._coldefs
+            self.columns = self.data.columns
             self.update()
 
             try:
@@ -243,7 +328,7 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
                 # Delete the _arrays attribute so that it is recreated to
                 # point to the new data placed in the column objects above
                 del self.columns._arrays
-            except (TypeError, AttributeError) as e:
+            except (TypeError, AttributeError):
                 # This shouldn't happen as long as self.columns._arrays
                 # is a lazyproperty
                 pass
@@ -261,15 +346,6 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
         size = self._header['NAXIS1'] * self._header['NAXIS2']
         return self._header.get('THEAP', size)
 
-    @deprecated('3.0', alternative='the `~astropy.io.fits.FITS_rec.columns` '
-                                   'attribute')
-    def get_coldefs(self):
-        """
-        Returns the table's column definitions.
-        """
-
-        return self.columns
-
     # TODO: Need to either rename this to update_header, for symmetry with the
     # Image HDUs, or just at some point deprecate it and remove it altogether,
     # since header updates should occur automatically when necessary...
@@ -297,7 +373,7 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
                          tbtype=self.columns._tbtype)
 
     def _prewriteto(self, checksum=False, inplace=False):
-        if self._data_loaded and self.data is not None:
+        if self._has_data:
             self.data._scale_back()
             # check TFIELDS and NAXIS2
             self._header['TFIELDS'] = len(self.data._coldefs)
@@ -311,13 +387,18 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
             if pcount > 0:
                 self.header['PCOUNT'] = pcount
 
+            # update the other T****n keywords
+            self._populate_table_keywords()
+
             # update TFORM for variable length columns
             for idx in range(self.data._nfields):
-                format = self.data._coldefs.formats[idx]
+                format = self.data._coldefs._recformats[idx]
                 if isinstance(format, _FormatP):
                     _max = self.data.field(idx).max
-                    format = _FormatP(format.dtype, repeat=format.repeat,
-                                      max=_max)
+                    # May be either _FormatP or _FormatQ
+                    format_cls = format.__class__
+                    format = format_cls(format.dtype, repeat=format.repeat,
+                                        max=_max)
                     self._header['TFORM' + str(idx + 1)] = format.tform
         return super(_TableBaseHDU, self)._prewriteto(checksum, inplace)
 
@@ -353,7 +434,7 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
             else:
                 nrows = len(self.data)
 
-            ncols = len(self.columns.formats)
+            ncols = len(self.columns)
             format = self.columns.formats
 
         # if data is not touched yet, use header info.
@@ -386,14 +467,13 @@ class _TableBaseHDU(ExtensionHDU, _TableLikeHDU):
         """Populate the new table definition keywords from the header."""
 
         cols = self.columns
-        append = self._header.append
 
-        for idx, col in enumerate(cols):
+        for idx in range(len(cols)):
             for attr, keyword in zip(KEYWORD_ATTRIBUTES, KEYWORD_NAMES):
                 val = getattr(cols, attr + 's')[idx]
                 if val:
                     keyword = keyword + str(idx + 1)
-                    append((keyword, val))
+                    self._header[keyword] = val
 
 
 class TableHDU(_TableBaseHDU):
@@ -405,15 +485,13 @@ class TableHDU(_TableBaseHDU):
     _ext_comment = 'ASCII table extension'
 
     _padding_byte = ' '
+    _columns_type = _AsciiColDefs
 
     __format_RE = re.compile(
         r'(?P<code>[ADEFIJ])(?P<width>\d+)(?:\.(?P<prec>\d+))?')
 
     def __init__(self, data=None, header=None, name=None):
         super(TableHDU, self).__init__(data, header, name=name)
-        if (self._data_loaded and self.data is not None and
-                not isinstance(self.data._coldefs, _ASCIIColDefs)):
-            self.data._coldefs = _ASCIIColDefs(self.data._coldefs)
 
     @classmethod
     def match_header(cls, header):
@@ -435,6 +513,9 @@ class TableHDU(_TableBaseHDU):
         if dup:
             raise ValueError("Duplicate field names: %s" % dup)
 
+        # TODO: Determine if this extra logic is necessary--I feel like the
+        # _AsciiColDefs class should be responsible for telling the table what
+        # its dtype should be...
         itemsize = columns.spans[-1] + columns.starts[-1] - 1
         dtype = {}
 
@@ -448,7 +529,7 @@ class TableHDU(_TableBaseHDU):
                                 self._header['NAXIS1'] - itemsize)
             dtype[columns.names[idx]] = (data_type, columns.starts[idx] - 1)
 
-        raw_data = self._get_raw_data(columns._shape, dtype, self._datLoc)
+        raw_data = self._get_raw_data(columns._shape, dtype, self._data_offset)
         data = raw_data.view(np.rec.recarray)
         self._init_tbdata(data)
         return data.view(self._data_type)
@@ -458,7 +539,7 @@ class TableHDU(_TableBaseHDU):
         Calculate the value for the ``DATASUM`` card in the HDU.
         """
 
-        if self._data_loaded and self.data is not None:
+        if self._has_data:
             # We have the data to be used.
             # We need to pad the data to a block length before calculating
             # the datasum.
@@ -550,7 +631,7 @@ class BinTableHDU(_TableBaseHDU):
         Calculate the value for the ``DATASUM`` card in the HDU.
         """
 
-        if self._data_loaded and self.data is not None:
+        if self._has_data:
             # We have the data to be used.
             return self._calculate_datasum_from_data(self.data, blocking)
         else:
@@ -570,6 +651,13 @@ class BinTableHDU(_TableBaseHDU):
         return size
 
     def _binary_table_byte_swap(self, fileobj):
+        """Prepares data in the native FITS format and writes the raw bytes
+        out to the given file object.  This handles byte swapping from native
+        to big endian (if necessary).  In addition, however, this also handles
+        writing the binary table heap when variable length array columns are
+        present.
+        """
+
         to_swap = []
         swapped = []
         nbytes = 0
@@ -590,7 +678,7 @@ class BinTableHDU(_TableBaseHDU):
                     # deal with var length table
                     if isinstance(recformat, _FormatP):
                         coldata = self.data.field(idx)
-                        for jdx, c in enumerate(coldata):
+                        for c in coldata:
                             if (not isinstance(c, chararray.chararray) and
                                 c.itemsize > 1 and
                                     c.dtype.str[0] in swap_types):
@@ -613,12 +701,11 @@ class BinTableHDU(_TableBaseHDU):
             for idx in range(self.data._nfields):
                 if isinstance(self.data.columns._recformats[idx], _FormatP):
                     field = self.data.field(idx)
-                    for jdx in range(len(field)):
-                        coldata = field[jdx]
-                        if len(coldata) > 0:
-                            nbytes = nbytes + coldata.nbytes
+                    for row in field:
+                        if len(row) > 0:
+                            nbytes += row.nbytes
                             if not fileobj.simulateonly:
-                                fileobj.writearray(coldata)
+                                fileobj.writearray(row)
 
             self.data._heapsize = nbytes - self.data._gap
         finally:
@@ -627,26 +714,31 @@ class BinTableHDU(_TableBaseHDU):
 
         return nbytes
 
-    def _populate_table_keywords(self):
+    def __populate_table_keywords(self):
         """Populate the new table definition keywords from the header."""
 
         cols = self.columns
-        append = self._header.append
 
-        for idx, col in enumerate(cols):
+        for idx in range(len(cols)):
             for attr, keyword in zip(KEYWORD_ATTRIBUTES, KEYWORD_NAMES):
                 val = getattr(cols, attr + 's')[idx]
                 if val:
                     keyword = keyword + str(idx + 1)
                     if attr == 'format':
                         val = cols._recformats[idx]
-                        if isinstance(val, _FormatX):
-                            val = repr(val._nx) + 'X'
-                        elif isinstance(val, _FormatP):
+                        if isinstance(val, (_FormatX, _FormatP)):
                             val = val.tform
                         else:
+                            # There are some cases where the original TFORM and
+                            # the one generated from the recformat can have the
+                            # same meaning but different string representation;
+                            # make sure to use the original representation in
+                            # this case
+                            orig_val = cols.formats[idx]
                             val = _convert_format(val, reverse=True)
-                    append((keyword, val))
+                            if _parse_tformat(orig_val) == _parse_tformat(val):
+                                val = orig_val
+                    self._header[keyword] = val
 
     _tdump_file_format = textwrap.dedent("""
 
@@ -672,6 +764,13 @@ class BinTableHDU(_TableBaseHDU):
           integer length of the array for that row, left-justified in a
           21-character field, followed by a blank.
 
+          .. note::
+
+              This format does *not* support variable length arrays using the
+              ('Q' format) due difficult to overcome ambiguities. What
+              this means is that this file format cannot support VLA columns
+              in tables stored in files that are over 2 GB in size.
+
           For column data representing a bit field ('X' format), each bit
           value in the field is output right-justified in a 21-character field
           as 1 (for true) or 0 (for false).
@@ -737,7 +836,7 @@ class BinTableHDU(_TableBaseHDU):
             if isinstance(f, basestring):
                 if os.path.exists(f) and os.path.getsize(f) != 0:
                     if clobber:
-                        warnings.warn("Overwriting existing file '%s'." % f)
+                        warnings.warn("Overwriting existing file '%s'." % f, AstropyUserWarning)
                     else:
                         exist.append(f)
 
@@ -857,7 +956,7 @@ class BinTableHDU(_TableBaseHDU):
         """
 
         if not fileobj and self._file:
-            root, ext = os.path.splitext(self._file.name)
+            root = os.path.splitext(self._file.name)[0]
             fileobj = root + '.txt'
 
         close_file = False
@@ -897,7 +996,7 @@ class BinTableHDU(_TableBaseHDU):
                     # for the VLA data
                     line.append('VLA_Length=')
                     line.append('%-21d' % len(row[column.name]))
-                    repeat, dtype, option = _parse_tformat(column.format)
+                    _, dtype, option = _parse_tformat(column.format)
                     vla_format = FITS2NUMPY[option[0]][0]
 
                 if vla_format:
@@ -1021,6 +1120,11 @@ class BinTableHDU(_TableBaseHDU):
             if length is not None:
                 arr = data.columns._arrays[idx]
                 dt = recformats[idx][len(str(length)):]
+
+                # NOTE: FormatQ not supported here; it's hard to determine
+                # whether or not it will be necessary to use a wider descriptor
+                # type. The function documentation will have to serve as a
+                # warning that this is not supported.
                 recformats[idx] = _FormatP(dt, max=length)
                 data.columns._recformats[idx] = recformats[idx]
                 data._convert[idx] = _makep(arr, arr, recformats[idx])
@@ -1093,10 +1197,13 @@ class BinTableHDU(_TableBaseHDU):
         return ColDefs(columns)
 
 
-# TODO: Allow tbtype to be either a string or a class; perhaps eventually
-# replace this with separate functions for creating tables (possibly in the
-# form of a classmethod)  See ticket #60
-def new_table(input, header=None, nrows=0, fill=False, tbtype='BinTableHDU'):
+ at deprecated('3.2',
+            alternative=':meth:`FITS_rec.from_columns` to create a new '
+                        ':class:`FITS_rec` data object from the input '
+                        'columns to pass into the constructor for '
+                        ':class:`BinTableHDU` or :class:`TableHDU`',
+            pending=True)
+def new_table(input, header=None, nrows=0, fill=False, tbtype=BinTableHDU):
     """
     Create a new table from the input column definitions.
 
@@ -1106,7 +1213,7 @@ def new_table(input, header=None, nrows=0, fill=False, tbtype='BinTableHDU'):
 
     If the column data is already in a single contiguous array (such as an
     existing record array) it may be better to create a BinTableHDU instance
-    directly.  See the PyFITS documentation for more details.
+    directly.  See the Astropy documentation for more details.
 
     Parameters
     ----------
@@ -1124,168 +1231,43 @@ def new_table(input, header=None, nrows=0, fill=False, tbtype='BinTableHDU'):
         `False`, copy the data from input, undefined cells will still
         be filled with zeros/blanks.
 
-    tbtype : str
-        Table type to be created ("BinTableHDU" or "TableHDU").
+    tbtype : str or class
+        Table type to be created (BinTableHDU or TableHDU) or the class
+        name as a string.  Currently only BinTableHDU and TableHDU (ASCII
+        tables) are supported.
     """
 
-    # construct a table HDU
-    # TODO: Something needs to be done about this as part of #60....
-    hdu = eval(tbtype)(header=header)
+    # tbtype defaults to classes now, but in all prior version of PyFITS it was
+    # a string, so we still support that use case as well
+    if not isinstance(tbtype, basestring):
+        cls = tbtype
+        tbtype = cls.__name__
+    else:
+        # Right now the string input must be one of 'TableHDU' or 'BinTableHDU'
+        # and nothing else, though we will allow this to be case insensitive
+        # This could be done more generically through the HDU registry, but my
+        # hope is to deprecate this function anyways so there's not much point
+        # in trying to make it more "generic".
+        if tbtype.lower() == 'tablehdu':
+            tbtype = 'TableHDU'
+            cls = TableHDU
+        elif tbtype.lower() == 'bintablehdu':
+            tbtype = 'BinTableHDU'
+            cls = BinTableHDU
+        else:
+            raise ValueError("tbtype must be one of 'TableHDU' or "
+                             "'BinTableHDU'")
 
-    if isinstance(input, ColDefs):
-        # NOTE: This previously raised an error if the tbtype didn't match the
-        # tbtype of the input ColDefs. This should no longer be necessary, but
-        # just beware.
-        columns = hdu.columns = ColDefs(input)
-    elif isinstance(input, FITS_rec):  # input is a FITS_rec
+    if isinstance(input, FITS_rec):  # input is a FITS_rec
         # Create a new ColDefs object from the input FITS_rec's ColDefs
         # object and assign it to the ColDefs attribute of the new hdu.
-        columns = hdu.columns = ColDefs(input._coldefs, tbtype)
+        columns = ColDefs(input._coldefs, tbtype)
     else:  # input is a list of Columns or possibly a recarray
         # Create a new ColDefs object from the input list of Columns and
         # assign it to the ColDefs attribute of the new hdu.
-        columns = hdu.columns = ColDefs(input, tbtype)
-
-    # read the delayed data
-    for idx in range(len(columns)):
-        arr = columns._arrays[idx]
-        if isinstance(arr, Delayed):
-            if arr.hdu.data is None:
-                columns._arrays[idx] = None
-            else:
-                columns._arrays[idx] = np.rec.recarray.field(arr.hdu.data,
-                                                             arr.field)
-
-    # use the largest column shape as the shape of the record
-    if nrows == 0:
-        for arr in columns._arrays:
-            if arr is not None:
-                dim = arr.shape[0]
-            else:
-                dim = 0
-            if dim > nrows:
-                nrows = dim
-
-    if tbtype == 'TableHDU':
-        columns = hdu.columns = _ASCIIColDefs(hdu.columns)
-        _itemsize = columns.spans[-1] + columns.starts[-1] - 1
-        dtype = {}
-
-        for j in range(len(columns)):
-            data_type = 'S' + str(columns.spans[j])
-            dtype[columns.names[j]] = (data_type, columns.starts[j] - 1)
-
-        data = np.rec.array((' ' * _itemsize * nrows).encode('ascii'),
-                            dtype=dtype, shape=nrows).view(FITS_rec)
-        data.setflags(write=True)
-    else:
-        formats = ','.join(columns._recformats)
-        data = np.rec.array(None, formats=formats,
-                            names=columns.names,
-                            shape=nrows).view(FITS_rec)
-
-    # Previously this assignment was made from hdu.columns, but that's a bug
-    # since if a _TableBaseHDU has a FITS_rec in its .data attribute the
-    # _TableBaseHDU.columns property is actually returned from .data._coldefs,
-    # so this assignment was circular!  Don't make that mistake again
-    data._coldefs = columns
-    data.formats = columns.formats
-
-    # Populate data to the new table from the ndarrays in the input ColDefs
-    # object.
-    for idx in range(len(columns)):
-        # For each column in the ColDef object, determine the number
-        # of rows in that column.  This will be either the number of
-        # rows in the ndarray associated with the column, or the
-        # number of rows given in the call to this function, which
-        # ever is smaller.  If the input FILL argument is true, the
-        # number of rows is set to zero so that no data is copied from
-        # the original input data.
-        arr = columns._arrays[idx]
-        recformat = columns._recformats[idx]
-
-        if arr is None:
-            size = 0
-        else:
-            size = len(arr)
-
-        n = min(size, nrows)
-        if fill:
-            n = 0
-
-        # Get any scale factors from the FITS_rec
-        scale, zero, bscale, bzero, dim = data._get_scale_factors(idx)[3:]
-
-        field = np.rec.recarray.field(data, idx)
-
-        if n > 0:
-            # Only copy data if there is input data to copy
-            # Copy all of the data from the input ColDefs object for this
-            # column to the new FITS_rec data array for this column.
-            if isinstance(recformat, _FormatX):
-                # Data is a bit array
-                if arr[:n].shape[-1] == recformat._nx:
-                    _wrapx(arr[:n], field[:n], recformat._nx)
-                else:
-                    # from a table parent data, just pass it
-                    field[:n] = arr[:n]
-            elif isinstance(recformat, _FormatP):
-                data._convert[idx] = _makep(arr[:n], field, recformat,
-                                            nrows=nrows)
-            elif recformat[-2:] == FITS2NUMPY['L'] and arr.dtype == bool:
-                # column is boolean
-                field[:n] = np.where(arr == False, ord('F'), ord('T'))
-            else:
-                if tbtype == 'TableHDU':
-                    # string no need to convert,
-                    if isinstance(arr, chararray.chararray):
-                        field[:n] = arr[:n]
-                    else:
-                        data._convert[idx] = np.zeros(nrows, dtype=arr.dtype)
-                        if scale or zero:
-                            arr = arr.copy()
-                        if scale:
-                            arr *= bscale
-                        if zero:
-                            arr += bzero
-                        data._convert[idx][:n] = arr[:n]
-                else:
-                    outarr = field[:n]
-                    inarr = arr[:n]
-                    if inarr.shape != outarr.shape:
-                        if inarr.dtype != outarr.dtype:
-                            inarr = inarr.view(outarr.dtype)
-
-                        # This is a special case to handle input arrays with
-                        # non-trivial TDIMn.
-                        # By design each row of the outarray is 1-D, while each
-                        # row of the input array may be n-D
-                        if outarr.ndim > 1:
-                            # The normal case where the first dimension is the
-                            # rows
-                            inarr_rowsize = inarr[0].size
-                            inarr = inarr.reshape((n, inarr_rowsize))
-                            outarr[:, :inarr_rowsize] = inarr
-                        else:
-                            # Special case for strings where the out array only
-                            # has one dimension (the second dimension is rolled
-                            # up into the strings
-                            outarr[:n] = inarr.ravel()
-                    else:
-                        field[:n] = arr[:n]
-
-        if n < nrows:
-            # If there are additional rows in the new table that were not
-            # copied from the input ColDefs object, initialize the new data
-            if tbtype == 'BinTableHDU':
-                if isinstance(field, np.ndarray):
-                    field[n:] = -bzero / bscale
-                else:
-                    field[n:] = ''
-            else:
-                field[n:] = ' ' * data._coldefs.spans[idx]
+        columns = ColDefs(input, tbtype)
 
-    del hdu.columns
-    hdu.data = data
+    data = FITS_rec.from_columns(columns, nrows=nrows, fill=fill)
 
-    return hdu
+    # construct a table HDU of the requested type
+    return cls(header=header, data=data)
diff --git a/astropy/io/fits/header.py b/astropy/io/fits/header.py
index a9bca8f..4cb9b34 100644
--- a/astropy/io/fits/header.py
+++ b/astropy/io/fits/header.py
@@ -6,17 +6,17 @@ import collections
 import copy
 import inspect
 import itertools
-import os
 import re
 import sys
 import warnings
 
 from .card import Card, CardList, _pad, BLANK_CARD, KEYWORD_LENGTH
-from .file import _File, PYTHON_MODES
-from .util import (encode_ascii, decode_ascii, fileobj_mode,
+from .file import _File
+from .util import (encode_ascii, decode_ascii, fileobj_mode, fileobj_closed,
                    fileobj_is_binary)
 
 from ...utils import deprecated, isiterable
+from ...utils.exceptions import AstropyUserWarning, AstropyDeprecationWarning
 
 
 PY3K = sys.version_info[:2] >= (3, 0)
@@ -32,6 +32,9 @@ HEADER_END_RE = re.compile(encode_ascii('END {77} *'))
 VALID_HEADER_CHARS = set(chr(x) for x in range(0x20, 0x7F))
 
 
+__doctest_skip__ = ['Header', 'Header.*']
+
+
 class Header(object):
     """
     FITS header class.  This class exposes both a dict-like interface and a
@@ -88,7 +91,7 @@ class Header(object):
             warnings.warn(
                 'The txtfile argument is deprecated.  Use Header.fromfile to '
                 'create a new Header object from a text file.',
-                DeprecationWarning)
+                AstropyDeprecationWarning)
             # get the cards from the input ASCII file
             self.update(self.fromfile(txtfile))
             self._modified = False
@@ -215,14 +218,14 @@ class Header(object):
                     raise KeyError("Keyword '%s' not found." % key)
                 # Warn everyone else.
                 # TODO: Remove this warning and make KeyError the default after
-                # a couple versions (by 3.2 or 3.3, say)
+                # a couple versions (by 3.3, say)
                 warnings.warn(
                     'Deletion of non-existent keyword %r: '
                     'In a future Astropy version Header.__delitem__ may be '
                     'changed so that this raises a KeyError just like a dict '
                     'would. Please update your code so that KeyErrors are '
                     'caught and handled when deleting non-existent keywords.' %
-                    key, DeprecationWarning)
+                    key, AstropyDeprecationWarning)
                 return
             for idx in reversed(self._keyword_indices[key]):
                 # Have to copy the indices list since it will be modified below
@@ -475,7 +478,7 @@ class Header(object):
                 if is_eof and blocks.strip('\0') == '':
                     warnings.warn('Unexpected extra padding at the end of the '
                                   'file.  This padding may not be preserved '
-                                  'when saving changes.')
+                                  'when saving changes.', AstropyUserWarning)
                     raise EOFError()
                 else:
                     # Replace the illegal null bytes with spaces as required by
@@ -483,7 +486,7 @@ class Header(object):
                     warnings.warn('Header block contains null bytes instead '
                                   'of spaces for padding, and is not FITS-'
                                   'compliant. Nulls may be replaced with '
-                                  'spaces upon writing.')
+                                  'spaces upon writing.', AstropyUserWarning)
                     blocks.replace('\0', ' ')
 
             if not HEADER_END_RE.search(last_block) and endcard:
@@ -526,7 +529,7 @@ class Header(object):
 
         Returns
         -------
-        s : string
+        s : str
             A string representing a FITS header.
         """
 
@@ -578,34 +581,10 @@ class Header(object):
             If `True`, overwrites the output file if it already exists
         """
 
-        close_file = False
-
-        # check if the output file already exists
-        # TODO: Perhaps this sort of thing could be handled by the _File
-        # initializer...
-        if isinstance(fileobj, basestring):
-            if os.path.exists(fileobj) and os.path.getsize(fileobj) != 0:
-                if clobber:
-                    warnings.warn("Overwriting existing file '%s'." % fileobj)
-                    os.remove(fileobj)
-                else:
-                    raise IOError("File '%s' already exists." % fileobj)
-
-            fileobj = open(fileobj, 'wb')
-            close_file = True
+        close_file = fileobj_closed(fileobj)
 
         if not isinstance(fileobj, _File):
-            # TODO: There needs to be a way of handling this built into the
-            # _File class.  I think maybe there used to be, but I took it out;
-            # now the design is such that it would be better for it to go back
-            # in
-            mode = 'append'
-            fmode = fileobj_mode(fileobj) or 'ab+'
-            for key, val in PYTHON_MODES.iteritems():
-                if val == fmode:
-                    mode = key
-                    break
-            fileobj = _File(fileobj, mode=mode)
+            fileobj = _File(fileobj, mode='ostream', clobber=clobber)
 
         try:
             blocks = self.tostring(sep=sep, endcard=endcard, padding=padding)
@@ -816,12 +795,6 @@ class Header(object):
         else:
             self[keyword] = (value, comment)
 
-    @deprecated('3.0', alternative='``key in header`` syntax')
-    def has_key(self, key):
-        """Like :meth:`dict.has_key`."""
-
-        return key in self
-
     def items(self):
         """Like :meth:`dict.items`."""
 
@@ -908,13 +881,13 @@ class Header(object):
         (keyword, value, comment) tuples.
 
         Arbitrary arguments are also accepted, in which case the update() is
-        called again with the kwargs dict as its only argument.  That is,
+        called again with the kwargs dict as its only argument.  That is, ::
 
-            >>> header.update(NAXIS1=100, NAXIS2=100)
+            header.update(NAXIS1=100, NAXIS2=100)
 
-        is equivalent to
+        is equivalent to ::
 
-            >>> header.update({'NAXIS1': 100, 'NAXIS2': 100})
+            header.update({'NAXIS1': 100, 'NAXIS2': 100})
 
         .. warning::
             As this method works similarly to dict.update() it is very
@@ -926,38 +899,38 @@ class Header(object):
             **deprecated**.  Most uses of the old API can be replaced as
             follows:
 
-            * Replace
+            * Replace ::
 
-                  >>> header.update(keyword, value)
+                  header.update(keyword, value)
 
-              with
+              with ::
 
-                  >>> header[keyword] = value
+                  header[keyword] = value
 
-            * Replace
+            * Replace ::
 
-                  >>> header.update(keyword, value, comment=comment)
+                  header.update(keyword, value, comment=comment)
 
-              with
+              with ::
 
-                  >>> header[keyword] = (value, comment)
+                  header[keyword] = (value, comment)
 
-            * Replace
+            * Replace ::
 
-                  >>> header.update(keyword, value, before=before_keyword)
+                  header.update(keyword, value, before=before_keyword)
 
-              with
+              with ::
 
-                  >>> header.insert(before_keyword, (keyword, value))
+                  header.insert(before_keyword, (keyword, value))
 
-            * Replace
+            * Replace ::
 
-                  >>> header.update(keyword, value, after=after_keyword)
+                  header.update(keyword, value, after=after_keyword)
 
-              with
+              with ::
 
-                  >>> header.insert(after_keyword, (keyword, value),
-                  ...               after=True)
+                  header.insert(after_keyword, (keyword, value),
+                                after=True)
 
             See also :meth:`Header.set` which is a new method that provides an
             interface similar to the old Header.update() and may help make
@@ -1026,7 +999,7 @@ class Header(object):
                 "`header[keyword] = value` or "
                 "`header[keyword] = (value, comment)`.  header.set() is only "
                 "necessary to use if you also want to use the before/after "
-                "keyword arguments.", DeprecationWarning)
+                "keyword arguments.", AstropyDeprecationWarning)
 
             for k, v in zip(legacy_args, args):
                 if k in kwargs:
@@ -1398,7 +1371,7 @@ class Header(object):
             if keyword not in Card._commentary_keywords:
                 warnings.warn(
                     'A %r keyword already exists in this header.  Inserting '
-                    'duplicate keyword.' % keyword)
+                    'duplicate keyword.' % keyword, AstropyUserWarning)
             self._keyword_indices[keyword].sort()
 
         if useblanks:
@@ -1840,19 +1813,11 @@ class Header(object):
 
         return CardList(self)
 
-    @deprecated('3.0', alternative='the `.ascard` attribute')
-    def ascardlist(self):
-        """
-        Returns a `CardList` object.
-        """
-
-        return self.ascard
-
     @deprecated('3.1', alternative=':meth:`Header.rename_keyword`')
     def rename_key(self, oldkey, newkey, force=False):
         self.rename_keyword(oldkey, newkey, force)
 
-    @deprecated('3.1', alternative="``header['HISTORY']``", pending=True)
+    @deprecated('3.1', alternative="``header['HISTORY']``")
     def get_history(self):
         """
         Get all history cards as a list of string texts.
@@ -1863,7 +1828,7 @@ class Header(object):
         else:
             return []
 
-    @deprecated('3.1', alternative="``header['COMMENT']``", pending=True)
+    @deprecated('3.1', alternative="``header['COMMENT']``")
     def get_comment(self):
         """
         Get all comment cards as a list of string texts.
@@ -1948,7 +1913,7 @@ class Header(object):
                         not (card.keyword == '' and card.value == '')):
                     # Don't add duplicate commentary cards (though completely
                     # blank cards are allowed to be duplicated)
-                    for idx, c in enumerate(self.cards):
+                    for c in self.cards:
                         if c.keyword == card.keyword and c.value == card.value:
                             break
                     else:
diff --git a/astropy/io/fits/py3compat.py b/astropy/io/fits/py3compat.py
index 66dc561..b1eab04 100644
--- a/astropy/io/fits/py3compat.py
+++ b/astropy/io/fits/py3compat.py
@@ -111,14 +111,14 @@ if PY3:  # pragma: py3
 
     class chararray(_chararray):
         def __getitem__(self, obj):
-                val = numpy.ndarray.__getitem__(self, obj)
-                if isinstance(val, numpy.character):
-                    temp = val.rstrip()
-                    if numpy.char._len(temp) == 0:
-                        val = ''
-                    else:
-                        val = temp
-                return val
+            val = numpy.ndarray.__getitem__(self, obj)
+            if isinstance(val, numpy.character):
+                temp = val.rstrip()
+                if numpy.char._len(temp) == 0:
+                    val = ''
+                else:
+                    val = temp
+            return val
     for m in [numpy.char, numpy.core.defchararray, numpy.core.records]:
         m.chararray = chararray
 
diff --git a/astropy/io/fits/scripts/fitscheck.py b/astropy/io/fits/scripts/fitscheck.py
index c236652..18ca0d8 100644
--- a/astropy/io/fits/scripts/fitscheck.py
+++ b/astropy/io/fits/scripts/fitscheck.py
@@ -179,7 +179,7 @@ def update(filename):
         output_verify = 'silentfix' if OPTIONS.compliance else 'ignore'
         hdulist.writeto(filename, checksum=OPTIONS.checksum_kind, clobber=True,
                         output_verify=output_verify)
-    except pyfits.VerifyError:
+    except fits.VerifyError:
         pass  # unfixable errors already noted during verification phase
     finally:
         hdulist.close()
diff --git a/astropy/io/fits/setup_package.py b/astropy/io/fits/setup_package.py
index 54e3792..67d24c1 100644
--- a/astropy/io/fits/setup_package.py
+++ b/astropy/io/fits/setup_package.py
@@ -50,8 +50,3 @@ def get_package_data():
 
 def get_external_libraries():
     return ['cfitsio']
-
-
-def get_legacy_alias():
-    return setup_helpers.add_legacy_alias(
-        'pyfits', 'astropy.io.fits', '3.2.dev', {'__svn_revision__': '1927'})
diff --git a/astropy/io/fits/src/compressionmodule.c b/astropy/io/fits/src/compressionmodule.c
index bb99b4e..a048f98 100644
--- a/astropy/io/fits/src/compressionmodule.c
+++ b/astropy/io/fits/src/compressionmodule.c
@@ -15,19 +15,15 @@
 /* This module contains three functions that are callable from python.  The  */
 /* first is compress_hdu.  This function takes an                            */
 /* astropy.io.fits.CompImageHDU object containing the uncompressed image     */
-/* data and returns the compressed data for all tiles into the .compData     */
-/* attribute of that HDU.                                                    */
+/* data and returns the compressed data for all tiles into the               */
+/* .compressed_data attribute of that HDU.                                   */
 /*                                                                           */
 /* The second function is decompress_hdu.  It takes an                       */
 /* astropy.io.fits.CompImageHDU object that already has compressed data in   */
-/* its .compData attribute. It returns the decompressed image data into the  */
-/* HDU's .data attribute.                                                    */
+/* its .compressed_data attribute.  It returns the decompressed image data   */
+/* into the HDU's .data attribute.                                           */
 /*                                                                           */
-/* Finally, the utility function calc_max_elm is used internally by the      */
-/* CompImageHDU class to estimate how much memory to allocate for the        */
-/* compressed data when compressing an image.                                */
-/*                                                                           */
-/* Copyright (C) 2012 Association of Universities for Research in Astronomy  */
+/* Copyright (C) 2013 Association of Universities for Research in Astronomy  */
 /* (AURA)                                                                    */
 /*                                                                           */
 /* Redistribution and use in source and binary forms, with or without        */
@@ -659,13 +655,44 @@ void configure_compression(fitsfile* fileptr, PyObject* header) {
                 (0 == strcmp(tmp, "NONE"))) {
             Fptr->quantize_level = NO_QUANTIZE;
         } else if (0 == strcmp(tmp, "SUBTRACTIVE_DITHER_1")) {
+#ifdef CFITSIO_SUPPORTS_SUBTRACTIVE_DITHER_2
+            // Added in CFITSIO 3.35, this also changed the name of the
+            // quantize_dither struct member to quantize_method
+            Fptr->quantize_method = SUBTRACTIVE_DITHER_1;
+        } else if (0 == strcmp(tmp, "SUBTRACTIVE_DITHER_2")) {
+            Fptr->quantize_method = SUBTRACTIVE_DITHER_2;
+        } else {
+            Fptr->quantize_method = NO_DITHER;
+        }
+    } else {
+        Fptr->quantize_method = NO_DITHER;
+    }
+
+    if (Fptr->quantize_method != NO_DITHER) {
+        if (0 != get_header_int(header, "ZDITHER0", &(Fptr->dither_seed), 0)) {
+            // ZDITHER0 keyword not found
+            Fptr->dither_seed = 0;
+            Fptr->request_dither_seed = 0;
+        }
+    }
+#else
             Fptr->quantize_dither = SUBTRACTIVE_DITHER_1;
         } else {
-            Fptr->quantize_dither = 0;
+            Fptr->quantize_dither = NO_DITHER;
         }
     } else {
-        Fptr->quantize_dither = 0;
+        Fptr->quantize_dither = NO_DITHER;
+    }
+
+    if (Fptr->quantize_dither != NO_DITHER) {
+        if (0 != get_header_int(header, "ZDITHER0", &(Fptr->dither_offset),
+                                0)) {
+            // ZDITHER0 keyword no found
+            Fptr->dither_offset = 0;
+            Fptr->request_dither_offset = 0;
+        }
     }
+#endif
 
     Fptr->compressimg = 1;
     Fptr->maxelem = imcomp_calc_max_elem(Fptr->compress_type,
@@ -680,7 +707,7 @@ void configure_compression(fitsfile* fileptr, PyObject* header) {
 void init_output_buffer(PyObject* hdu, void** buf, size_t* bufsize) {
     // Determines a good size for the output data buffer and allocates
     // memory for it, returning the address and size of the allocated
-    // membory in to **buf and *bufsize respectively.
+    // memory into **buf and *bufsize respectively.
 
     PyObject* header = NULL;
     char keyword[9];
@@ -757,7 +784,7 @@ void get_hdu_data_base(PyObject* hdu, void** buf, size_t* bufsize) {
     PyArrayObject* base;
     PyArrayObject* tmp;
 
-    data = (PyArrayObject*) PyObject_GetAttrString(hdu, "compData");
+    data = (PyArrayObject*) PyObject_GetAttrString(hdu, "compressed_data");
     if (data == NULL) {
         goto fail;
     }
@@ -767,7 +794,7 @@ void get_hdu_data_base(PyObject* hdu, void** buf, size_t* bufsize) {
     // allocated for the table and its heap
     if (!PyObject_TypeCheck(data, &PyArray_Type)) {
         PyErr_SetString(PyExc_TypeError,
-                        "CompImageHDU.compData must be a numpy.ndarray");
+                        "CompImageHDU.compressed_data must be a numpy.ndarray");
         goto fail;
     }
 
@@ -990,7 +1017,8 @@ PyObject* compression_decompress_hdu(PyObject* self, PyObject* args)
         return NULL;
     }
 
-    // Grab a pointer to the input data from the HDU's compData attribute
+    // Grab a pointer to the input data from the HDU's compressed_data
+    // attribute
     get_hdu_data_base(hdu, &inbuf, &inbufsize);
     if (PyErr_Occurred()) {
         return NULL;
diff --git a/astropy/io/fits/src/compressionmodule.h b/astropy/io/fits/src/compressionmodule.h
index 64bed3a..c4bbebd 100644
--- a/astropy/io/fits/src/compressionmodule.h
+++ b/astropy/io/fits/src/compressionmodule.h
@@ -30,6 +30,14 @@
 
 
 #if CFITSIO_MAJOR >= 3
+    #if CFITSIO_MINOR >= 35
+        #define CFITSIO_SUPPORTS_Q_FORMAT_COMPRESSION
+        #define CFITSIO_SUPPORTS_SUBTRACTIVE_DITHER_2
+    #else
+        /* This constant isn't defined in older versions and has a different */
+        /* value anyways. */
+        #define NO_DITHER 0
+    #endif
     #if CFITSIO_MINOR >= 28
         #define CFITSIO_SUPPORTS_GZIPDATA
     #else
diff --git a/astropy/io/fits/tests/__init__.py b/astropy/io/fits/tests/__init__.py
index a528abf..e8f2aee 100644
--- a/astropy/io/fits/tests/__init__.py
+++ b/astropy/io/fits/tests/__init__.py
@@ -9,6 +9,7 @@ import time
 import warnings
 
 from ... import fits
+from .... import log
 
 
 class FitsTestCase(object):
diff --git a/astropy/io/fits/tests/test_connect.py b/astropy/io/fits/tests/test_connect.py
new file mode 100644
index 0000000..70dacc9
--- /dev/null
+++ b/astropy/io/fits/tests/test_connect.py
@@ -0,0 +1,220 @@
+import os
+import sys
+import warnings
+
+import numpy as np
+from numpy.testing import assert_allclose
+
+from .. import HDUList, PrimaryHDU, BinTableHDU
+from ....table import Table
+from .... import units as u
+from .... import log
+from ....tests.helper import pytest
+
+PY3 = sys.version_info[0] >= 3
+DATA = os.path.join(os.path.dirname(__file__), 'data')
+
+
+def equal_data(a, b):
+    for name in a.dtype.names:
+        if not np.all(a[name] == b[name]):
+            return False
+    return True
+
+
+class TestSingleTable(object):
+
+    def setup_class(self):
+        self.data = np.array(list(zip([1, 2, 3, 4],
+                                      ['a', 'b', 'c', 'd'],
+                                      [2.3, 4.5, 6.7, 8.9])),
+                             dtype=[('a', int), ('b', 'U1'), ('c', float)])
+
+    def test_simple(self, tmpdir):
+        filename = str(tmpdir.join('test_simple.fits'))
+        t1 = Table(self.data)
+        t1.write(filename, overwrite=True)
+        t2 = Table.read(filename)
+        assert equal_data(t1, t2)
+
+    def test_simple_meta(self, tmpdir):
+        filename = str(tmpdir.join('test_simple.fits'))
+        t1 = Table(self.data)
+        t1.meta['A'] = 1
+        t1.meta['B'] = 2.3
+        t1.meta['C'] = 'spam'
+        t1.meta['COMMENT'] = ['this', 'is', 'a', 'long', 'comment']
+        t1.meta['HISTORY'] = ['first', 'second', 'third']
+        t1.write(filename, overwrite=True)
+        t2 = Table.read(filename)
+        assert equal_data(t1, t2)
+        for key in t1.meta:
+            if isinstance(t1.meta, list):
+                for i in range(len(t1.meta[key])):
+                    assert t1.meta[key][i] == t2.meta[key][i]
+            else:
+                assert t1.meta[key] == t2.meta[key]
+
+    def test_simple_meta_conflicting(self, tmpdir):
+        filename = str(tmpdir.join('test_simple.fits'))
+        t1 = Table(self.data)
+        t1.meta['ttype1'] = 'spam'
+        with log.log_to_list() as l:
+            t1.write(filename, overwrite=True)
+        assert len(l) == 1
+        assert l[0].message.startswith('Meta-data keyword ttype1 will be ignored since it conflicts with a FITS reserved keyword')
+
+    def test_simple_noextension(self, tmpdir):
+        """
+        Test that file type is recognized without extension
+        """
+        filename = str(tmpdir.join('test_simple'))
+        t1 = Table(self.data)
+        t1.write(filename, overwrite=True, format='fits')
+        t2 = Table.read(filename)
+        assert equal_data(t1, t2)
+
+    def test_with_units(self, tmpdir):
+        filename = str(tmpdir.join('test_with_units.fits'))
+        t1 = Table(self.data)
+        t1['a'].unit = u.m
+        t1['c'].unit = u.km / u.s
+        t1.write(filename, overwrite=True)
+        t2 = Table.read(filename)
+        assert equal_data(t1, t2)
+        assert t2['a'].unit == u.m
+        assert t2['c'].unit == u.km / u.s
+
+    def test_masked(self, tmpdir):
+        filename = str(tmpdir.join('test_masked.fits'))
+        t1 = Table(self.data, masked=True)
+        t1.mask['a'] = [1, 0, 1, 0]
+        t1.mask['b'] = [1, 0, 0, 1]
+        t1.mask['c'] = [0, 1, 1, 0]
+        t1.write(filename, overwrite=True)
+        t2 = Table.read(filename)
+        assert t2.masked
+        assert equal_data(t1, t2)
+        assert np.all(t1['a'].mask == t2['a'].mask)
+        # Disabled for now, as there is no obvious way to handle masking of
+        # non-integer columns in FITS
+        # TODO: Re-enable these tests if some workaround for this can be found
+        # assert np.all(t1['b'].mask == t2['b'].mask)
+        # assert np.all(t1['c'].mask == t2['c'].mask)
+
+    def test_read_from_fileobj(self, tmpdir):
+        filename = str(tmpdir.join('test_read_from_fileobj.fits'))
+        hdu = BinTableHDU(self.data)
+        hdu.writeto(filename)
+        with open(filename, 'rb') as f:
+            t = Table.read(f)
+        assert equal_data(t, self.data)
+
+    def test_read_with_nonstandard_units(self):
+        hdu = BinTableHDU(self.data)
+        hdu.columns[0].unit = 'RADIANS'
+        hdu.columns[1].unit = 'spam'
+        hdu.columns[2].unit = 'millieggs'
+        t = Table.read(hdu)
+        assert equal_data(t, self.data)
+
+
+class TestMultipleHDU(object):
+
+    def setup_class(self):
+        self.data1 = np.array(list(zip([1, 2, 3, 4],
+                                       ['a', 'b', 'c', 'd'],
+                                       [2.3, 4.5, 6.7, 8.9])),
+                              dtype=[('a', int), ('b', 'U1'), ('c', float)])
+        self.data2 = np.array(list(zip([1.4, 2.3, 3.2, 4.7],
+                                       [2.3, 4.5, 6.7, 8.9])),
+                              dtype=[('p', float), ('q', float)])
+        hdu1 = PrimaryHDU()
+        hdu2 = BinTableHDU(self.data1, name='first')
+        hdu3 = BinTableHDU(self.data2, name='second')
+
+        self.hdus = HDUList([hdu1, hdu2, hdu3])
+
+    def setup_method(self, method):
+        warnings.filterwarnings('always')
+
+    def test_read(self, tmpdir):
+        filename = str(tmpdir.join('test_read.fits'))
+        self.hdus.writeto(filename)
+        with log.log_to_list() as l:
+            t = Table.read(filename)
+        assert len(l) == 1
+        assert l[0].message.startswith('hdu= was not specified but multiple tables are present, reading in first available table (hdu=1)')
+        assert equal_data(t, self.data1)
+
+    def test_read_with_hdu_0(self, tmpdir):
+        filename = str(tmpdir.join('test_read_with_hdu_0.fits'))
+        self.hdus.writeto(filename)
+        with pytest.raises(ValueError) as exc:
+            Table.read(filename, hdu=0)
+        assert exc.value.args[0] == 'No table found in hdu=0'
+
+    @pytest.mark.parametrize('hdu', [1, 'first'])
+    def test_read_with_hdu_1(self, tmpdir, hdu):
+        filename = str(tmpdir.join('test_read_with_hdu_1.fits'))
+        self.hdus.writeto(filename)
+        with log.log_to_list() as l:
+            t = Table.read(filename, hdu=hdu)
+        assert len(l) == 0
+        assert equal_data(t, self.data1)
+
+    @pytest.mark.parametrize('hdu', [2, 'second'])
+    def test_read_with_hdu_2(self, tmpdir, hdu):
+        filename = str(tmpdir.join('test_read_with_hdu_2.fits'))
+        self.hdus.writeto(filename)
+        with log.log_to_list() as l:
+            t = Table.read(filename, hdu=hdu)
+        assert len(l) == 0
+        assert equal_data(t, self.data2)
+
+    def test_read_from_hdulist(self):
+        with log.log_to_list() as l:
+            t = Table.read(self.hdus)
+        assert len(l) == 1
+        assert l[0].message.startswith('hdu= was not specified but multiple tables are present, reading in first available table (hdu=1)')
+        assert equal_data(t, self.data1)
+
+    def test_read_from_hdulist_with_hdu_0(self, tmpdir):
+        with pytest.raises(ValueError) as exc:
+            Table.read(self.hdus, hdu=0)
+        assert exc.value.args[0] == 'No table found in hdu=0'
+
+    @pytest.mark.parametrize('hdu', [1, 'first'])
+    def test_read_from_hdulist_with_hdu_1(self, tmpdir, hdu):
+        with log.log_to_list() as l:
+            t = Table.read(self.hdus, hdu=hdu)
+        assert len(l) == 0
+        assert equal_data(t, self.data1)
+
+    @pytest.mark.parametrize('hdu', [2, 'second'])
+    def test_read_from_hdulist_with_hdu_2(self, tmpdir, hdu):
+        with log.log_to_list() as l:
+            t = Table.read(self.hdus, hdu=hdu)
+        assert len(l) == 0
+        assert equal_data(t, self.data2)
+
+    def test_read_from_single_hdu(self):
+        with log.log_to_list() as l:
+            t = Table.read(self.hdus[1])
+        assert len(l) == 0
+        assert equal_data(t, self.data1)
+
+def test_masking_regression_1795():
+    """
+    Regression test for #1795 - this bug originally caused columns where TNULL
+    was not defined to have their first element masked.
+    """
+    t = Table.read(os.path.join(DATA, 'tb.fits'))
+    assert np.all(t['c1'].mask == np.array([False, False]))
+    assert np.all(t['c2'].mask == np.array([False, False]))
+    assert np.all(t['c3'].mask == np.array([False, False]))
+    assert np.all(t['c4'].mask == np.array([False, False]))
+    assert np.all(t['c1'].data == np.array([1,2]))
+    assert np.all(t['c2'].data == np.array(['abc', 'xy ']))
+    assert_allclose(t['c3'].data, np.array([3.70000007153, 6.6999997139]))
+    assert np.all(t['c4'].data == np.array([False, True]))
diff --git a/astropy/io/fits/tests/test_core.py b/astropy/io/fits/tests/test_core.py
index 9f20544..d9f596b 100644
--- a/astropy/io/fits/tests/test_core.py
+++ b/astropy/io/fits/tests/test_core.py
@@ -10,7 +10,7 @@ import zipfile
 import numpy as np
 
 from ....io import fits
-from ....tests.helper import pytest, raises
+from ....tests.helper import pytest, raises, catch_warnings
 
 from . import FitsTestCase
 from .util import ignore_warnings
@@ -85,8 +85,8 @@ class TestCore(FitsTestCase):
         hdulist.writeto(self.temp('test.fits'), clobber=True)
         with fits.open(self.temp('test.fits')) as hdulist:
             table = hdulist[1]
-            assert table.data.dtype.names == ('c1', 'c2', 'c3')
-            assert table.columns.names == ['c1', 'c2', 'c3']
+            assert table.data.dtype.names == ('c2', 'c4', 'foo')
+            assert table.columns.names == ['c2', 'c4', 'foo']
 
     def test_update_header_card(self):
         """A very basic test for the Header.update method--I'd like to add a
@@ -195,7 +195,7 @@ class TestCore(FitsTestCase):
         hdu = fits.ImageHDU()
         # The default here would be to issue a warning; ensure that no warnings
         # or exceptions are raised
-        with warnings.catch_warnings():
+        with catch_warnings():
             warnings.simplefilter('error')
             del hdu.header['NAXIS']
             try:
@@ -295,7 +295,7 @@ class TestCore(FitsTestCase):
 
         offset = 0
         with fits.open(self.data('test0.fits')) as hdul:
-            hdulen = hdul[0]._datLoc + hdul[0]._datSpan
+            hdulen = hdul[0]._data_offset + hdul[0]._data_size
             hdu = fits.PrimaryHDU.fromstring(dat[:hdulen])
             assert isinstance(hdu, fits.PrimaryHDU)
             assert hdul[0].header == hdu.header
@@ -312,7 +312,7 @@ class TestCore(FitsTestCase):
         with fits.open(self.data('test0.fits'))as hdul:
             for ext_hdu in hdul[1:]:
                 offset += hdulen
-                hdulen = len(str(ext_hdu.header)) + ext_hdu._datSpan
+                hdulen = len(str(ext_hdu.header)) + ext_hdu._data_size
                 hdu = fits.ImageHDU.fromstring(dat[offset:offset + hdulen])
                 assert isinstance(hdu, fits.ImageHDU)
                 assert ext_hdu.header == hdu.header
@@ -341,6 +341,70 @@ class TestCore(FitsTestCase):
             assert (hdul[0].data[:100] == data).all()
             assert (hdul[0].data[100:] == 0).all()
 
+    def test_extname(self):
+        """Test getting/setting the EXTNAME of an HDU."""
+
+        h1 = fits.PrimaryHDU()
+        assert h1.name == 'PRIMARY'
+        # Normally a PRIMARY HDU should not have an EXTNAME, though it should
+        # have a default .name attribute
+        assert 'EXTNAME' not in h1.header
+
+        # The current version of the FITS standard does allow PRIMARY HDUs to
+        # have an EXTNAME, however.
+        h1.name = 'NOTREAL'
+        assert h1.name == 'NOTREAL'
+        assert h1.header.get('EXTNAME') == 'NOTREAL'
+
+        # Updating the EXTNAME in the header should update the .name
+        h1.header['EXTNAME'] = 'TOOREAL'
+        assert h1.name == 'TOOREAL'
+
+        # If we delete an EXTNAME keyword from a PRIMARY HDU it should go back
+        # to the default
+        del h1.header['EXTNAME']
+        assert h1.name == 'PRIMARY'
+
+        # For extension HDUs the situation is a bit simpler:
+        h2 = fits.ImageHDU()
+        assert h2.name == ''
+        assert 'EXTNAME' not in h2.header
+        h2.name = 'HELLO'
+        assert h2.name == 'HELLO'
+        assert h2.header.get('EXTNAME') == 'HELLO'
+        h2.header['EXTNAME'] = 'GOODBYE'
+        assert h2.name == 'GOODBYE'
+
+    def test_extver_extlevel(self):
+        """Test getting/setting the EXTVER and EXTLEVEL of and HDU."""
+
+        # EXTVER and EXTNAME work exactly the same; their semantics are, for
+        # now, to be inferred by the user.  Although they should never be less
+        # than 1, the standard does not explicitly forbid any value so long as
+        # it's an integer
+        h1 = fits.PrimaryHDU()
+        assert h1.ver == 1
+        assert h1.level == 1
+        assert 'EXTVER' not in h1.header
+        assert 'EXTLEVEL' not in h1.header
+
+        h1.ver = 2
+        assert h1.header.get('EXTVER') == 2
+        h1.header['EXTVER'] = 3
+        assert h1.ver == 3
+        del h1.header['EXTVER']
+        h1.ver == 1
+
+        h1.level = 2
+        assert h1.header.get('EXTLEVEL') == 2
+        h1.header['EXTLEVEL'] = 3
+        assert h1.level == 3
+        del h1.header['EXTLEVEL']
+        assert h1.level == 1
+
+        pytest.raises(TypeError, setattr, h1, 'ver', 'FOO')
+        pytest.raises(TypeError, setattr, h1, 'level', 'BAR')
+
 
 class TestConvenienceFunctions(FitsTestCase):
     def test_writeto(self):
@@ -382,6 +446,27 @@ class TestFileFunctions(FitsTestCase):
     astropy.io.fits.file._File class.
     """
 
+    def test_open_nonexistent(self):
+        """Test that trying to open a non-existent file results in an
+        IOError (and not some other arbitrary exception).
+        """
+
+        try:
+            fits.open(self.temp('foobar.fits'))
+        except IOError, e:
+            assert 'File does not exist' in str(e)
+        except:
+            raise
+
+        # But opening in ostream or append mode should be okay, since they
+        # allow writing new files
+        for mode in ('ostream', 'append'):
+            with fits.open(self.temp('foobar.fits'), mode=mode) as h:
+                pass
+
+            assert os.path.exists(self.temp('foobar.fits'))
+            os.remove(self.temp('foobar.fits'))
+
     def test_open_gzipped(self):
         with ignore_warnings():
             assert len(fits.open(self._make_gzip_file())) == 5
@@ -392,10 +477,37 @@ class TestFileFunctions(FitsTestCase):
         with ignore_warnings():
             assert len(fits.open(self._make_gzip_file('test0.fz'))) == 5
 
+    def test_writeto_append_mode_gzip(self):
+        """Regression test for
+        https://github.com/spacetelescope/PyFITS/issues/33
+
+        Check that a new GzipFile opened in append mode can be used to write
+        out a new FITS file.
+        """
+
+        # Note: when opening a GzipFile the 'b+' is superfluous, but this was
+        # still how the original test case looked
+        # Note: with statement not supported on GzipFile in older Python
+        # versions
+        fileobj =  gzip.GzipFile(self.temp('test.fits.gz'), 'ab+')
+        h = fits.PrimaryHDU()
+        try:
+            h.writeto(fileobj)
+        finally:
+            fileobj.close()
+
+        with fits.open(self.temp('test.fits.gz')) as hdul:
+            assert hdul[0].header == h.header
+
     def test_open_zipped(self):
+        zf = self._make_zip_file()
+
         with ignore_warnings():
             assert len(fits.open(self._make_zip_file())) == 5
 
+        with ignore_warnings():
+            assert len(fits.open(zipfile.ZipFile(zf))) == 5
+
     def test_detect_zipped(self):
         """Test detection of a zip file when the extension is not .zip."""
 
@@ -410,6 +522,10 @@ class TestFileFunctions(FitsTestCase):
         pytest.raises(IOError, fits.open, zf, 'update')
         pytest.raises(IOError, fits.open, zf, 'append')
 
+        zf = zipfile.ZipFile(zf, 'a')
+        pytest.raises(IOError, fits.open, zf, 'update')
+        pytest.raises(IOError, fits.open, zf, 'append')
+
     @raises(IOError)
     def test_open_multiple_member_zipfile(self):
         """
diff --git a/astropy/io/fits/tests/test_diff.py b/astropy/io/fits/tests/test_diff.py
index 4347c5b..ffea31e 100644
--- a/astropy/io/fits/tests/test_diff.py
+++ b/astropy/io/fits/tests/test_diff.py
@@ -1,5 +1,4 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-import textwrap
 
 import numpy as np
 
diff --git a/astropy/io/fits/tests/test_division.py b/astropy/io/fits/tests/test_division.py
index ef4f99f..10778f9 100644
--- a/astropy/io/fits/tests/test_division.py
+++ b/astropy/io/fits/tests/test_division.py
@@ -1,11 +1,10 @@
 # Licensed under a 3-clause BSD style license - see PYFITS.rst
 
-import warnings
-
 import numpy as np
 
 from ....io import fits
 from . import FitsTestCase
+from ....tests.helper import catch_warnings
 
 
 class TestDivisionFunctions(FitsTestCase):
@@ -21,22 +20,22 @@ class TestDivisionFunctions(FitsTestCase):
 
     def test_card_with_continue(self):
         h = fits.PrimaryHDU()
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             h.header['abc'] = 'abcdefg' * 20
-            assert len(w) == 0
+        assert len(w) == 0
 
     def test_valid_hdu_size(self):
         t1 = fits.open(self.data('tb.fits'))
         assert type(t1[1].size) == type(1)
 
     def test_hdu_get_size(self):
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             t1 = fits.open(self.data('tb.fits'))
-            assert len(w) == 0
+        assert len(w) == 0
 
     def test_section(self, capsys):
         # section testing
         fs = fits.open(self.data('arange.fits'))
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             assert np.all(fs[0].section[3, 2, 5] == np.array([357]))
             assert len(w) == 0
diff --git a/astropy/io/fits/tests/test_groups.py b/astropy/io/fits/tests/test_groups.py
index 5c8729b..057554e 100644
--- a/astropy/io/fits/tests/test_groups.py
+++ b/astropy/io/fits/tests/test_groups.py
@@ -5,7 +5,6 @@ import os
 import time
 
 import numpy as np
-from numpy import char as chararray
 
 from . import FitsTestCase
 from .test_table import comparerecords
diff --git a/astropy/io/fits/tests/test_hdulist.py b/astropy/io/fits/tests/test_hdulist.py
index cfba172..9794115 100644
--- a/astropy/io/fits/tests/test_hdulist.py
+++ b/astropy/io/fits/tests/test_hdulist.py
@@ -3,7 +3,6 @@
 import glob
 import io
 import os
-import warnings
 import sys
 
 import numpy as np
@@ -11,7 +10,8 @@ import numpy as np
 from .util import ignore_warnings
 from ..verify import VerifyError
 from ....io import fits
-from ....tests.helper import pytest, raises
+from ....tests.helper import pytest, raises, catch_warnings
+from ....utils.exceptions import AstropyUserWarning
 
 from . import FitsTestCase
 
@@ -100,7 +100,7 @@ class TestHDUListFunctions(FitsTestCase):
         hdul = fits.HDUList()
         hdul1 = fits.open(self.data('tb.fits'))
         hdul.append(hdul1[1])
-        info = [(0, 'PRIMARY', 'PrimaryHDU', 4, (), 'uint8', ''),
+        info = [(0, 'PRIMARY', 'PrimaryHDU', 4, (), '', ''),
                 (1, '', 'BinTableHDU', 24, '2R x 4C', '[1J, 3A, 1E, 1L]', '')]
 
         assert hdul.info(output=False) == info
@@ -116,7 +116,7 @@ class TestHDUListFunctions(FitsTestCase):
         hdu = fits.GroupsHDU()
         hdul.append(hdu)
 
-        info = [(0, 'PRIMARY', 'GroupsHDU', 8, (), 'uint8',
+        info = [(0, 'PRIMARY', 'GroupsHDU', 8, (), '',
                  '1 Groups  0 Parameters')]
 
         assert hdul.info(output=False) == info
@@ -147,7 +147,7 @@ class TestHDUListFunctions(FitsTestCase):
         hdul = fits.open(self.data('tb.fits'))
         hdul.append(hdul[1])
 
-        info = [(0, 'PRIMARY', 'PrimaryHDU', 11, (), 'int16', ''),
+        info = [(0, 'PRIMARY', 'PrimaryHDU', 11, (), '', ''),
                 (1, '', 'BinTableHDU', 24, '2R x 4C', '[1J, 3A, 1E, 1L]', ''),
                 (2, '', 'BinTableHDU', 24, '2R x 4C', '[1J, 3A, 1E, 1L]', '')]
 
@@ -203,7 +203,7 @@ class TestHDUListFunctions(FitsTestCase):
         hdul1 = fits.open(self.data('tb.fits'))
         hdul.insert(0, hdul1[1])
 
-        info = [(0, 'PRIMARY', 'PrimaryHDU', 4, (), 'uint8', ''),
+        info = [(0, 'PRIMARY', 'PrimaryHDU', 4, (), '', ''),
                 (1, '', 'BinTableHDU', 24, '2R x 4C', '[1J, 3A, 1E, 1L]', '')]
 
         assert hdul.info(output=False) == info
@@ -219,7 +219,7 @@ class TestHDUListFunctions(FitsTestCase):
         hdu = fits.GroupsHDU()
         hdul.insert(0, hdu)
 
-        info = [(0, 'PRIMARY', 'GroupsHDU', 8, (), 'uint8',
+        info = [(0, 'PRIMARY', 'GroupsHDU', 8, (), '',
                  '1 Groups  0 Parameters')]
 
         assert hdul.info(output=False) == info
@@ -250,7 +250,7 @@ class TestHDUListFunctions(FitsTestCase):
         hdul = fits.open(self.data('tb.fits'))
         hdul.insert(1, hdul[1])
 
-        info = [(0, 'PRIMARY', 'PrimaryHDU', 11, (), 'int16', ''),
+        info = [(0, 'PRIMARY', 'PrimaryHDU', 11, (), '', ''),
                 (1, '', 'BinTableHDU', 24, '2R x 4C', '[1J, 3A, 1E, 1L]', ''),
                 (2, '', 'BinTableHDU', 24, '2R x 4C', '[1J, 3A, 1E, 1L]', '')]
 
@@ -271,7 +271,7 @@ class TestHDUListFunctions(FitsTestCase):
         with pytest.raises(ValueError):
             hdul.insert(1, hdu)
 
-        info = [(0, 'PRIMARY', 'GroupsHDU', 8, (), 'uint8',
+        info = [(0, 'PRIMARY', 'GroupsHDU', 8, (), '',
                  '1 Groups  0 Parameters'),
                 (1, '', 'ImageHDU', 6, (100,), 'int32', '')]
 
@@ -300,9 +300,9 @@ class TestHDUListFunctions(FitsTestCase):
         hdul = fits.open(self.data('tb.fits'))
         hdul.insert(0, hdul[1])
 
-        info = [(0, 'PRIMARY', 'PrimaryHDU', 4, (), 'uint8', ''),
+        info = [(0, 'PRIMARY', 'PrimaryHDU', 4, (), '', ''),
                 (1, '', 'BinTableHDU', 24, '2R x 4C', '[1J, 3A, 1E, 1L]', ''),
-                (2, '', 'ImageHDU', 12, (), 'uint8', ''),
+                (2, '', 'ImageHDU', 12, (), '', ''),
                 (3, '', 'BinTableHDU', 24, '2R x 4C', '[1J, 3A, 1E, 1L]', '')]
 
         assert hdul.info(output=False) == info
@@ -322,7 +322,7 @@ class TestHDUListFunctions(FitsTestCase):
         hdul.insert(0, hdu)
 
         info = [(0, 'PRIMARY', 'PrimaryHDU', 5, (100,), 'int32', ''),
-                (1, '', 'ImageHDU', 12, (), 'uint8', ''),
+                (1, '', 'ImageHDU', 12, (), '', ''),
                 (2, '', 'BinTableHDU', 24, '2R x 4C', '[1J, 3A, 1E, 1L]', '')]
 
         assert hdul.info(output=False) == info
@@ -417,10 +417,10 @@ class TestHDUListFunctions(FitsTestCase):
         oldmtime = os.stat(self.data('test0.fits')).st_mtime
         hdul = fits.open(self.data('test0.fits'))
         hdul[0].header['FOO'] = 'BAR'
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings(AstropyUserWarning) as w:
             hdul.flush()
-            assert len(w) == 1
-            assert 'mode is not supported' in str(w[0].message)
+        assert len(w) == 1
+        assert 'mode is not supported' in str(w[0].message)
         assert oldmtime == os.stat(self.data('test0.fits')).st_mtime
 
     def test_fix_extend_keyword(self):
@@ -496,14 +496,14 @@ class TestHDUListFunctions(FitsTestCase):
             f.seek(padding_start)
             f.write('\0'.encode('ascii') * padding_len)
 
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings(AstropyUserWarning) as w:
             with fits.open(self.temp('temp.fits')) as hdul:
-                assert ('contains null bytes instead of spaces' in
-                        str(w[0].message))
-                assert len(w) == 1
-                assert len(hdul) == 1
-                assert str(hdul[0].header) == str(hdu.header)
                 assert (hdul[0].data == a).all()
+        assert ('contains null bytes instead of spaces' in
+                str(w[0].message))
+        assert len(w) == 1
+        assert len(hdul) == 1
+        assert str(hdul[0].header) == str(hdu.header)
 
     def test_update_with_truncated_header(self):
         """
diff --git a/astropy/io/fits/tests/test_header.py b/astropy/io/fits/tests/test_header.py
index 174b342..ee3f0ae 100644
--- a/astropy/io/fits/tests/test_header.py
+++ b/astropy/io/fits/tests/test_header.py
@@ -6,7 +6,8 @@ import warnings
 import numpy as np
 
 from ....io import fits
-from ....tests.helper import pytest
+from ....io.fits.verify import VerifyWarning
+from ....tests.helper import pytest, catch_warnings
 
 from . import FitsTestCase
 from .util import ignore_warnings
@@ -68,12 +69,6 @@ class TestOldApiHeaderFunctions(FitsTestCase):
         assert header.cards[1].value == 0
         assert header[''] == [0, 1, 2, 3, '', '', 4]
 
-    def test_has_key(self):
-        header = fits.Header([('A', 'B', 'C'), ('D', 'E', 'F')])
-        assert header.has_key('A')
-        assert header.has_key('D')
-        assert not header.has_key('C')
-
     def test_totxtfile(self):
         hdul = fits.open(self.data('test0.fits'))
         hdul[0].header.toTxtFile(self.temp('header.txt'))
@@ -81,9 +76,9 @@ class TestOldApiHeaderFunctions(FitsTestCase):
         hdu.header.update('MYKEY', 'FOO', 'BAR')
         hdu.header.fromTxtFile(self.temp('header.txt'), replace=True)
         assert len(hdul[0].header.ascard) == len(hdu.header.ascard)
-        assert not hdu.header.has_key('MYKEY')
-        assert not hdu.header.has_key('EXTENSION')
-        assert hdu.header.has_key('SIMPLE')
+        assert 'MYKEY' not in hdu.header
+        assert 'EXTENSION' not in hdu.header
+        assert 'SIMPLE' in hdu.header
 
         # Write the hdu out and read it back in again--it should be recognized
         # as a PrimaryHDU
@@ -97,16 +92,16 @@ class TestOldApiHeaderFunctions(FitsTestCase):
         # hdu.header should have MYKEY keyword, and also adds PCOUNT and
         # GCOUNT, giving it 3 more keywords in total than the original
         assert len(hdul[0].header.ascard) == len(hdu.header.ascard) - 3
-        assert hdu.header.has_key('MYKEY')
-        assert not hdu.header.has_key('EXTENSION')
-        assert hdu.header.has_key('SIMPLE')
+        assert 'MYKEY' in hdu.header
+        assert 'EXTENSION' not in hdu.header
+        assert 'SIMPLE' in hdu.header
 
         with ignore_warnings():
             hdu.writeto(self.temp('test.fits'), output_verify='ignore',
                         clobber=True)
         hdul2 = fits.open(self.temp('test.fits'))
         assert len(hdul2) == 2
-        assert hdul2[1].header.has_key('MYKEY')
+        assert 'MYKEY' in hdul2[1].header
 
     def test_update_comment(self):
         hdul = fits.open(self.data('arange.fits'))
@@ -198,17 +193,17 @@ class TestOldApiHeaderFunctions(FitsTestCase):
         # The old header.update method won't let you append a duplicate keyword
         header.append(('D', 'G', 'H'))
 
-        assert header.ascardlist().index(header.cards['A']) == 0
-        assert header.ascardlist().index(header.cards['D']) == 1
-        assert header.ascardlist().index(header.cards[('D', 1)]) == 2
+        assert header.ascard.index(header.cards['A']) == 0
+        assert header.ascard.index(header.cards['D']) == 1
+        assert header.ascard.index(header.cards[('D', 1)]) == 2
 
         # Since the original CardList class really only works on card objects
         # the count method is mostly useless since cards didn't used to compare
         # equal sensibly
-        assert header.ascardlist().count(header.cards['A']) == 1
-        assert header.ascardlist().count(header.cards['D']) == 1
-        assert header.ascardlist().count(header.cards[('D', 1)]) == 1
-        assert header.ascardlist().count(fits.Card('A', 'B', 'C')) == 0
+        assert header.ascard.count(header.cards['A']) == 1
+        assert header.ascard.count(header.cards['D']) == 1
+        assert header.ascard.count(header.cards[('D', 1)]) == 1
+        assert header.ascard.count(fits.Card('A', 'B', 'C')) == 0
 
 
 class TestHeaderFunctions(FitsTestCase):
@@ -285,7 +280,7 @@ class TestHeaderFunctions(FitsTestCase):
     def test_keyword_too_long(self):
         """Test that long Card keywords are allowed, but with a warning"""
 
-        with warnings.catch_warnings():
+        with catch_warnings():
             warnings.simplefilter('error')
             pytest.raises(UserWarning, fits.Card, 'abcdefghi', 'long')
 
@@ -299,10 +294,10 @@ class TestHeaderFunctions(FitsTestCase):
         # keyword like 'abc+' was simply not allowed.  Now it should create a
         # HIERARCH card.
 
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             c = fits.Card('abc+', 9)
-            assert len(w) == 1
-            assert c.image == _pad('HIERARCH abc+ =                    9')
+        assert len(w) == 1
+        assert c.image == _pad('HIERARCH abc+ =                    9')
 
     def test_commentary_cards(self):
         # commentary cards
@@ -396,23 +391,23 @@ class TestHeaderFunctions(FitsTestCase):
     def test_verify_invalid_equal_sign(self):
         # verification
         c = fits.Card.fromstring('abc= a6')
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             c.verify()
-            err_text1 = ("Card 'ABC' is not FITS standard (equal sign not at "
-                         "column 8)")
-            err_text2 = ("Card 'ABC' is not FITS standard (invalid value "
-                         "string: a6")
-            assert len(w) == 4
-            assert err_text1 in str(w[1].message)
-            assert err_text2 in str(w[2].message)
+        err_text1 = ("Card 'ABC' is not FITS standard (equal sign not at "
+                     "column 8)")
+        err_text2 = ("Card 'ABC' is not FITS standard (invalid value "
+                     "string: a6")
+        assert len(w) == 4
+        assert err_text1 in str(w[1].message)
+        assert err_text2 in str(w[2].message)
 
     def test_fix_invalid_equal_sign(self):
         c = fits.Card.fromstring('abc= a6')
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             c.verify('fix')
-            fix_text = "Fixed 'ABC' card to meet the FITS standard."
-            assert len(w) == 4
-            assert fix_text in str(w[1].message)
+        fix_text = "Fixed 'ABC' card to meet the FITS standard."
+        assert len(w) == 4
+        assert fix_text in str(w[1].message)
         assert str(c) == _pad("ABC     = 'a6      '")
 
     def test_long_string_value(self):
@@ -546,14 +541,14 @@ class TestHeaderFunctions(FitsTestCase):
 
     def test_hierarch_card_creation(self):
         # Test automatic upgrade to hierarch card
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             c = fits.Card('ESO INS SLIT2 Y1FRML',
                           'ENC=OFFSET+RESOL*acos((WID-(MAX+MIN))/(MAX-MIN)')
-            assert len(w) == 1
-            assert 'HIERARCH card will be created' in str(w[0].message)
-            assert (str(c) ==
-                    "HIERARCH ESO INS SLIT2 Y1FRML= "
-                    "'ENC=OFFSET+RESOL*acos((WID-(MAX+MIN))/(MAX-MIN)'")
+        assert len(w) == 1
+        assert 'HIERARCH card will be created' in str(w[0].message)
+        assert (str(c) ==
+                "HIERARCH ESO INS SLIT2 Y1FRML= "
+                "'ENC=OFFSET+RESOL*acos((WID-(MAX+MIN))/(MAX-MIN)'")
 
         # Test manual creation of hierarch card
         c = fits.Card('hierarch abcdefghi', 10)
@@ -657,7 +652,7 @@ class TestHeaderFunctions(FitsTestCase):
         msg = 'a HIERARCH card will be created'
 
         header = fits.Header()
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings(VerifyWarning) as w:
             header.update('HIERARCH BLAH BLAH', 'TESTA')
             assert len(w) == 0
             assert 'BLAH BLAH' in header
@@ -720,7 +715,7 @@ class TestHeaderFunctions(FitsTestCase):
         msg = 'a HIERARCH card will be created'
 
         header = fits.Header()
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings(VerifyWarning) as w:
             header.update('HIERARCH BLA BLA', 'TESTA')
             assert len(w) == 0
             assert 'BLA BLA' in header
@@ -747,10 +742,11 @@ class TestHeaderFunctions(FitsTestCase):
             assert header['bla bla'], 'TESTE'
 
         header = fits.Header()
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings(VerifyWarning) as w:
             # Create a HIERARCH card containing invalid characters without
             # explicitly stating 'HIERARCH'
             header.update('BLA BLA', 'TESTA')
+            print([x.category for x in w])
             assert len(w) == 1
             assert msg in str(w[0].message)
 
@@ -1136,26 +1132,6 @@ class TestHeaderFunctions(FitsTestCase):
         assert len(hdu.header) == 5
         assert hdu.header[-1] == 'some val'
 
-    def test_header_extend_unique(self):
-        """
-        Test extending the header with and without unique=True.
-        """
-        hdu = fits.PrimaryHDU()
-        hdu2 = fits.ImageHDU()
-        hdu.header['MYKEY'] = ('some val', 'some comment')
-        hdu2.header['MYKEY'] = ('some other val', 'some other comment')
-        hdu.header.extend(hdu2.header)
-        assert len(hdu.header) == 6
-        assert hdu.header[-2] == 'some val'
-        assert hdu.header[-1] == 'some other val'
-
-        hdu = fits.PrimaryHDU()
-        hdu2 = fits.ImageHDU()
-        hdu.header['MYKEY'] = ('some val', 'some comment')
-        hdu.header.extend(hdu2.header, unique=True)
-        assert len(hdu.header) == 5
-        assert hdu.header[-1] == 'some val'
-
     def test_header_extend_update(self):
         """
         Test extending the header with and without update=True.
@@ -1557,15 +1533,15 @@ class TestHeaderFunctions(FitsTestCase):
             f.write(encode_ascii('e'))
 
         hdul = fits.open(self.temp('test.fits'))
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             hdul.writeto(self.temp('temp.fits'), output_verify='warn')
-            assert len(w) == 5
-            # The first two warnings are just the headers to the actual warning
-            # message (HDU 0, Card 4).  I'm still not sure things like that
-            # should be output as separate warning messages, but that's
-            # something to think about...
-            msg = str(w[3].message)
-            assert '(invalid value string: 5.0022221e-07)' in msg
+        assert len(w) == 5
+        # The first two warnings are just the headers to the actual warning
+        # message (HDU 0, Card 4).  I'm still not sure things like that
+        # should be output as separate warning messages, but that's
+        # something to think about...
+        msg = str(w[3].message)
+        assert '(invalid value string: 5.0022221e-07)' in msg
 
     def test_leading_zeros(self):
         """
@@ -1847,15 +1823,15 @@ class TestHeaderFunctions(FitsTestCase):
 
         hdu = fits.PrimaryHDU()
         # This should work with some warnings
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             hdu.header.append(c1)
             hdu.header.append(c2)
             hdu.header.append(c3)
-            assert len(w) == 3
+        assert len(w) == 3
 
         hdu.writeto(self.temp('test.fits'))
 
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             with fits.open(self.temp('test.fits')) as hdul:
                 # Merely opening the file should blast some warnings about the
                 # invalid keywords
diff --git a/astropy/io/fits/tests/test_image.py b/astropy/io/fits/tests/test_image.py
index 40a4f64..713cdab 100644
--- a/astropy/io/fits/tests/test_image.py
+++ b/astropy/io/fits/tests/test_image.py
@@ -1,5 +1,7 @@
 # Licensed under a 3-clause BSD style license - see PYFITS.rst
 
+from __future__ import division, with_statement
+
 import math
 import os
 import time
@@ -8,7 +10,9 @@ import warnings
 import numpy as np
 
 from ....io import fits
-from ....tests.helper import pytest, raises
+from ....tests.helper import pytest, raises, catch_warnings
+from ..hdu.compressed import SUBTRACTIVE_DITHER_1, DITHER_SEED_CHECKSUM
+from .test_table import comparerecords
 
 from . import FitsTestCase
 from .util import ignore_warnings
@@ -74,7 +78,7 @@ class TestImageFunctions(FitsTestCase):
     def test_open_2(self):
         r = fits.open(self.data('test0.fits'))
 
-        info = ([(0, 'PRIMARY', 'PrimaryHDU', 138, (), 'int16', '')] +
+        info = ([(0, 'PRIMARY', 'PrimaryHDU', 138, (), '', '')] +
                 [(x, 'SCI', 'ImageHDU', 61, (40, 40), 'int16', '')
                  for x in range(1, 5)])
 
@@ -98,7 +102,7 @@ class TestImageFunctions(FitsTestCase):
         assert hdul[0].name == 'XPRIMARY'
         assert hdul[0].name == hdul[0].header['EXTNAME']
 
-        info = [(0, 'XPRIMARY', 'PrimaryHDU', 5, (), 'uint8', '')]
+        info = [(0, 'XPRIMARY', 'PrimaryHDU', 5, (), '', '')]
         assert hdul.info(output=False) == info
 
         assert hdul['PRIMARY'] is hdul['XPRIMARY']
@@ -258,18 +262,18 @@ class TestImageFunctions(FitsTestCase):
         # make a defect HDUList first
         x = fits.ImageHDU()
         hdu = fits.HDUList(x)  # HDUList can take a list or one single HDU
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             hdu.verify()
-            text = "HDUList's 0th element is not a primary HDU."
-            assert len(w) == 3
-            assert text in str(w[1].message)
+        text = "HDUList's 0th element is not a primary HDU."
+        assert len(w) == 3
+        assert text in str(w[1].message)
 
-        with warnings.catch_warnings(record=True) as w:
+        with catch_warnings() as w:
             hdu.writeto(self.temp('test_new2.fits'), 'fix')
-            text = ("HDUList's 0th element is not a primary HDU.  "
-                    "Fixed by inserting one as 0th HDU.")
-            assert len(w) == 3
-            assert text in str(w[1].message)
+        text = ("HDUList's 0th element is not a primary HDU.  "
+                "Fixed by inserting one as 0th HDU.")
+        assert len(w) == 3
+        assert text in str(w[1].message)
 
     def test_section(self):
         # section testing
@@ -590,8 +594,33 @@ class TestImageFunctions(FitsTestCase):
         with fits.open(self.temp('test.fits')) as hdul:
             assert (hdul['SCI'].data == cube).all()
 
+    def test_subtractive_dither_seed(self):
+        """
+        Regression test for https://github.com/spacetelescope/PyFITS/issues/32
+
+        Ensure that when floating point data is compressed with the
+        SUBTRACTIVE_DITHER_1 quantization method that the correct ZDITHER0 seed
+        is added to the header, and that the data can be correctly
+        decompressed.
+        """
+
+        array = np.arange(100.0).reshape(10, 10)
+        csum = (array[0].view('uint8').sum() % 10000) + 1
+        hdu = fits.CompImageHDU(data=array,
+                                quantize_method=SUBTRACTIVE_DITHER_1,
+                                dither_seed=DITHER_SEED_CHECKSUM)
+        hdu.writeto(self.temp('test.fits'))
+
+        with fits.open(self.temp('test.fits')) as hdul:
+            assert isinstance(hdul[1], fits.CompImageHDU)
+            assert 'ZQUANTIZ' in hdul[1]._header
+            assert hdul[1]._header['ZQUANTIZ'] == 'SUBTRACTIVE_DITHER_1'
+            assert 'ZDITHER0' in hdul[1]._header
+            assert hdul[1]._header['ZDITHER0'] == csum
+            assert np.all(hdul[1].data == array)
+
     def test_disable_image_compression(self):
-        with warnings.catch_warnings():
+        with catch_warnings():
             # No warnings should be displayed in this case
             warnings.simplefilter('error')
             with fits.open(self.data('comp.fits'),
@@ -624,6 +653,16 @@ class TestImageFunctions(FitsTestCase):
         # opening and closing it.
         assert mtime == os.stat(self.temp('comp.fits')).st_mtime
 
+    def test_write_comp_hdu_direct_from_existing(self):
+        with fits.open(self.data('comp.fits')) as hdul:
+            hdul[1].writeto(self.temp('test.fits'))
+
+        with fits.open(self.data('comp.fits')) as hdul1:
+            with fits.open(self.temp('test.fits')) as hdul2:
+                assert np.all(hdul1[1].data == hdul2[1].data)
+                assert comparerecords(hdul1[1].compressed_data,
+                                      hdul2[1].compressed_data)
+
     def test_do_not_scale_image_data(self):
         hdul = fits.open(self.data('scale.fits'), do_not_scale_image_data=True)
         assert hdul[0].data.dtype == np.dtype('>i2')
@@ -998,8 +1037,8 @@ class TestImageFunctions(FitsTestCase):
             assert h[1].header['TFORM2'] == '1PB(359)'
 
     def test_image_none(self):
-        """Regression test
-        for https://github.com/spacetelescope/PyFITS/issues/27
+        """
+        Regression test for https://github.com/spacetelescope/PyFITS/issues/27
         """
 
         with fits.open(self.data('test0.fits')) as h:
diff --git a/astropy/io/fits/tests/test_nonstandard.py b/astropy/io/fits/tests/test_nonstandard.py
index de0ca45..7ddc9d2 100644
--- a/astropy/io/fits/tests/test_nonstandard.py
+++ b/astropy/io/fits/tests/test_nonstandard.py
@@ -1,5 +1,7 @@
 # Licensed under a 3-clause BSD style license - see PYFITS.rst
 
+import numpy as np
+
 from ....io import fits
 from . import FitsTestCase
 
@@ -19,6 +21,27 @@ class TestNonstandardHdus(FitsTestCase):
 
         self._test_create_fitshdu(compression=True)
 
+    def test_create_fitshdu_from_filename(self):
+        """Regression test on `FitsHDU.fromfile`"""
+
+        # Build up a simple test FITS file
+        a = np.arange(100)
+        phdu = fits.PrimaryHDU(data=a)
+        phdu.header['TEST1'] = 'A'
+        phdu.header['TEST2'] = 'B'
+        imghdu = fits.ImageHDU(data=a + 1)
+        phdu.header['TEST3'] = 'C'
+        phdu.header['TEST4'] = 'D'
+
+        hdul = fits.HDUList([phdu, imghdu])
+        hdul.writeto(self.temp('test.fits'))
+
+        fitshdu = fits.FitsHDU.fromfile(self.temp('test.fits'))
+        hdul2 = fitshdu.hdulist
+
+        assert len(hdul2) == 2
+        assert fits.FITSDiff(hdul, hdul2).identical
+
     def _test_create_fitshdu(self, compression=False):
         hdul_orig = fits.open(self.data('test0.fits'),
                               do_not_scale_image_data=True)
diff --git a/astropy/io/fits/tests/test_table.py b/astropy/io/fits/tests/test_table.py
index c2b4dc5..5f3a08b 100644
--- a/astropy/io/fits/tests/test_table.py
+++ b/astropy/io/fits/tests/test_table.py
@@ -6,6 +6,7 @@ from numpy import char as chararray
 from ....io import fits
 from ....tests.helper import pytest
 
+from ..column import Delayed, NUMPY2FITS
 from ..util import decode_ascii
 from . import FitsTestCase
 from .util import ignore_warnings
@@ -79,7 +80,7 @@ def comparerecords(a, b):
                 if np.any(fielda[row] != fieldb[row]):
                     print 'fielda[%d]: %s' % (row, fielda[row])
                     print 'fieldb[%d]: %s' % (row, fieldb[row])
-                    print 'field %d differs in row %d' (i, row)
+                    print 'field %d differs in row %d' % (i, row)
         else:
             if np.any(fielda != fieldb):
                 print "fielda: ", fielda
@@ -90,7 +91,6 @@ def comparerecords(a, b):
 
 
 class TestTableFunctions(FitsTestCase):
-
     def test_constructor_copies_header(self):
         """
         Regression test for https://trac.assembla.com/pyfits/ticket/153
@@ -284,34 +284,45 @@ class TestTableFunctions(FitsTestCase):
         a.close()
 
     def test_variable_length_columns(self):
-        col = fits.Column(name='QUAL_SPE', format='PJ()',
-                          array=[[0] * 1571] * 225)
-        tb_hdu = fits.new_table([col])
-        pri_hdu = fits.PrimaryHDU()
-        hdu_list = fits.HDUList([pri_hdu, tb_hdu])
-        hdu_list.writeto(self.temp('toto.fits'), clobber=True)
-        toto = fits.open(self.temp('toto.fits'))
-        q = toto[1].data.field('QUAL_SPE')
-        assert (q[0][4:8] == np.array([0, 0, 0, 0], dtype=np.uint8)).all()
-        toto.close()
+        def test(format_code):
+            col = fits.Column(name='QUAL_SPE', format=format_code,
+                              array=[[0] * 1571] * 225)
+            tb_hdu = fits.new_table([col])
+            pri_hdu = fits.PrimaryHDU()
+            hdu_list = fits.HDUList([pri_hdu, tb_hdu])
+            with ignore_warnings():
+                hdu_list.writeto(self.temp('toto.fits'), clobber=True)
+
+            with fits.open(self.temp('toto.fits')) as toto:
+                q = toto[1].data.field('QUAL_SPE')
+                assert (q[0][4:8] ==
+                        np.array([0, 0, 0, 0], dtype=np.uint8)).all()
+                assert toto[1].columns[0].format.endswith('J(1571)')
+
+        for code in ('PJ()', 'QJ()'):
+            test(code)
 
     def test_extend_variable_length_array(self):
         """Regression test for https://trac.assembla.com/pyfits/ticket/54"""
 
-        arr = [[1] * 10] * 10
-        col1 = fits.Column(name='TESTVLF', format='PJ()', array=arr)
-        col2 = fits.Column(name='TESTSCA', format='J', array=[1] * 10)
-        tb_hdu = fits.new_table([col1, col2], nrows=15)
-        # This asserts that the normal 'scalar' column's length was extended
-        assert len(tb_hdu.data['TESTSCA']) == 15
-        # And this asserts that the VLF column was extended in the same manner
-        assert len(tb_hdu.data['TESTVLF']) == 15
-        # We can't compare the whole array since the _VLF is an array of
-        # objects, but comparing just the edge case rows should suffice
-        assert (tb_hdu.data['TESTVLF'][0] == arr[0]).all()
-        assert (tb_hdu.data['TESTVLF'][9] == arr[9]).all()
-        assert (tb_hdu.data['TESTVLF'][10] == ([0] * 10)).all()
-        assert (tb_hdu.data['TESTVLF'][-1] == ([0] * 10)).all()
+        def test(format_code):
+            arr = [[1] * 10] * 10
+            col1 = fits.Column(name='TESTVLF', format=format_code, array=arr)
+            col2 = fits.Column(name='TESTSCA', format='J', array=[1] * 10)
+            tb_hdu = fits.new_table([col1, col2], nrows=15)
+            # This asserts that the normal 'scalar' column's length was extended
+            assert len(tb_hdu.data['TESTSCA']) == 15
+            # And this asserts that the VLF column was extended in the same manner
+            assert len(tb_hdu.data['TESTVLF']) == 15
+            # We can't compare the whole array since the _VLF is an array of
+            # objects, but comparing just the edge case rows should suffice
+            assert (tb_hdu.data['TESTVLF'][0] == arr[0]).all()
+            assert (tb_hdu.data['TESTVLF'][9] == arr[9]).all()
+            assert (tb_hdu.data['TESTVLF'][10] == ([0] * 10)).all()
+            assert (tb_hdu.data['TESTVLF'][-1] == ([0] * 10)).all()
+
+        for code in ('PJ()', 'QJ()'):
+            test(code)
 
     def test_endianness(self):
         x = np.ndarray((1,), dtype=object)
@@ -329,6 +340,76 @@ class TestTableFunctions(FitsTestCase):
         assert (channelsIn == channelsOut).all()
         hduL.close()
 
+    def test_column_format_interpretation(self):
+        """
+        Test to ensure that when Numpy-style record formats are passed in to
+        the Column constructor for the format argument, they are recognized so
+        long as it's unambiguous (where "unambiguous" here is questionable
+        since Numpy is case insensitive when parsing the format codes.  But
+        their "proper" case is lower-case, so we can accept that.  Basically,
+        actually, any key in the NUMPY2FITS dict should be accepted.
+        """
+
+        for recformat, fitsformat in NUMPY2FITS.items():
+            c = fits.Column('TEST', np.dtype(recformat))
+            c.format == fitsformat
+            c = fits.Column('TEST', recformat)
+            c.format == fitsformat
+            c = fits.Column('TEST', fitsformat)
+            c.format == fitsformat
+
+        # Test a few cases that are ambiguous in that they *are* valid binary
+        # table formats though not ones that are likely to be used, but are
+        # also valid common ASCII table formats
+        c = fits.Column('TEST', 'I4')
+        assert c.format == 'I4'
+        assert c.format.format == 'I'
+        assert c.format.width == 4
+
+        c = fits.Column('TEST', 'F15.8')
+        assert c.format == 'F15.8'
+        assert c.format.format == 'F'
+        assert c.format.width == 15
+        assert c.format.precision == 8
+
+        c = fits.Column('TEST', 'E15.8')
+        assert c.format.format == 'E'
+        assert c.format.width == 15
+        assert c.format.precision == 8
+
+        c = fits.Column('TEST', 'D15.8')
+        assert c.format.format == 'D'
+        assert c.format.width == 15
+        assert c.format.precision == 8
+
+        # These are a couple cases where the format code is a valid binary
+        # table format, and is not strictly a valid ASCII table format but
+        # could be *interpreted* as one by appending a default width.  This
+        # will only happen either when creating an ASCII table or when
+        # explicitly specifying ascii=True when the column is created
+        c = fits.Column('TEST', 'I')
+        assert c.format == 'I'
+        assert c.format.recformat == 'i2'
+        c = fits.Column('TEST', 'I', ascii=True)
+        assert c.format == 'I10'
+
+        c = fits.Column('TEST', 'E')
+        assert c.format == 'E'
+        assert c.format.recformat == 'f4'
+        c = fits.Column('TEST', 'E', ascii=True)
+        assert c.format == 'E15.7'
+
+        # F is not a valid binary table format so it should be unambiguously
+        # treated as an ASCII column
+        c = fits.Column('TEST', 'F')
+        assert c.format == 'F16.7'
+
+        c = fits.Column('TEST', 'D')
+        assert c.format == 'D'
+        assert c.format.recformat == 'f8'
+        c = fits.Column('TEST', 'D', ascii=True)
+        assert c.format == 'D25.17'
+
     def test_column_endianness(self):
         """
         Regression test for https://trac.assembla.com/pyfits/ticket/77
@@ -536,7 +617,7 @@ class TestTableFunctions(FitsTestCase):
 
         hdu.writeto(self.temp('newtable.fits'))
 
-        info = [(0, 'PRIMARY', 'PrimaryHDU', 4, (), 'uint8', ''),
+        info = [(0, 'PRIMARY', 'PrimaryHDU', 4, (), '', ''),
                 (1, '', 'BinTableHDU', 19, '8R x 5C', '[10A, J, 10A, 5E, L]',
                  '')]
 
@@ -544,14 +625,14 @@ class TestTableFunctions(FitsTestCase):
 
         z = np.array([0.,  0.,  0.,  0.,  0.], dtype=np.float32)
         array = np.rec.array(
-            [('NGC1', 312, '0.0', z, True),
-             ('NGC2', 334, '0.0', z, False),
-             ('NGC3', 308, '0.0', z, True),
-             ('NCG4', 317, '0.0', z, True),
-             ('NGC5', 412, '0.0', z, False),
-             ('NGC6', 434, '0.0', z, True),
-             ('NGC7', 408, '0.0', z, False),
-             ('NCG8', 417, '0.0', z, False)],
+            [('NGC1', 312, '', z, True),
+             ('NGC2', 334, '', z, False),
+             ('NGC3', 308, '', z, True),
+             ('NCG4', 317, '', z, True),
+             ('NGC5', 412, '', z, False),
+             ('NGC6', 434, '', z, True),
+             ('NGC7', 408, '', z, False),
+             ('NCG8', 417, '', z, False)],
              formats='a10,u4,a10,5f4,l')
 
         assert comparerecords(hdu.data, array)
@@ -656,10 +737,10 @@ class TestTableFunctions(FitsTestCase):
 
         z = np.array([0.,  0.,  0.,  0.,  0.], dtype=np.float32)
         array = np.rec.array(
-            [('NGC1', 312, '0.0', z, True),
-             ('NGC2', 334, '0.0', z, False),
-             ('NGC3', 308, '0.0', z, True),
-             ('NCG4', 317, '0.0', z, True)],
+            [('NGC1', 312, '', z, True),
+             ('NGC2', 334, '', z, False),
+             ('NGC3', 308, '', z, True),
+             ('NCG4', 317, '', z, True)],
              formats='a10,u4,a10,5f4,l')
         assert comparerecords(tbhdu1.data, array)
 
@@ -697,10 +778,10 @@ class TestTableFunctions(FitsTestCase):
 
         z = np.array([0.,  0.,  0.,  0.,  0.], dtype=np.float32)
         array = np.rec.array(
-            [('NGC1', 312, '0.0', z, True, 'NGC5', 412, '0.0', z, False),
-             ('NGC2', 334, '0.0', z, False, 'NGC6', 434, '0.0', z, True),
-             ('NGC3', 308, '0.0', z, True, 'NGC7', 408, '0.0', z, False),
-             ('NCG4', 317, '0.0', z, True, 'NCG8', 417, '0.0', z, False)],
+            [('NGC1', 312, '', z, True, 'NGC5', 412, '', z, False),
+             ('NGC2', 334, '', z, False, 'NGC6', 434, '', z, True),
+             ('NGC3', 308, '', z, True, 'NGC7', 408, '', z, False),
+             ('NCG4', 317, '', z, True, 'NCG8', 417, '', z, False)],
              formats='a10,u4,a10,5f4,l,a10,u4,a10,5f4,l')
         assert comparerecords(hdu.data, array)
 
@@ -743,7 +824,7 @@ class TestTableFunctions(FitsTestCase):
         assert hdu.columns.columns[1].array[0] == 80
         assert hdu.data[0][1] == 80
 
-        info = [(0, 'PRIMARY', 'PrimaryHDU', 4, (), 'uint8', ''),
+        info = [(0, 'PRIMARY', 'PrimaryHDU', 4, (), '', ''),
                 (1, '', 'BinTableHDU', 30, '4R x 10C',
                  '[10A, J, 10A, 5E, L, 10A, J, 10A, 5E, L]', '')]
 
@@ -758,10 +839,10 @@ class TestTableFunctions(FitsTestCase):
 
         z = np.array([0.,  0.,  0.,  0.,  0.], dtype=np.float32)
         array = np.rec.array(
-            [('NGC1', 312, '0.0', z, True, 'NGC5', 412, '0.0', z, False),
-             ('NGC2', 334, '0.0', z, False, 'NGC6', 434, '0.0', z, True),
-             ('NGC3', 308, '0.0', z, True, 'NGC7', 408, '0.0', z, False),
-             ('NCG4', 317, '0.0', z, True, 'NCG8', 417, '0.0', z, False)],
+            [('NGC1', 312, '', z, True, 'NGC5', 412, '', z, False),
+             ('NGC2', 334, '', z, False, 'NGC6', 434, '', z, True),
+             ('NGC3', 308, '', z, True, 'NGC7', 408, '', z, False),
+             ('NCG4', 317, '', z, True, 'NCG8', 417, '', z, False)],
              formats='a10,u4,a10,5f4,l,a10,u4,a10,5f4,l')
         assert comparerecords(hdu.data, array)
 
@@ -805,6 +886,35 @@ class TestTableFunctions(FitsTestCase):
         t2.close()
         hdul.close()
 
+    def test_modify_column_attributes(self):
+        """Regression test for https://github.com/astropy/astropy/issues/996
+
+        This just tests one particular use case, but it should apply pretty
+        well to other similar cases.
+        """
+
+        NULLS = {}
+        NULLS['a'] = 2
+        NULLS['b'] = 'b'
+        NULLS['c'] = 2.3
+
+        data = np.array(list(zip([1, 2, 3, 4],
+                                 ['a', 'b', 'c', 'd'],
+                                 [2.3, 4.5, 6.7, 8.9])),
+                        dtype=[('a', int), ('b', 'S1'), ('c', float)])
+
+        b = fits.BinTableHDU(data=data)
+        for col in b.columns:
+            col.null = NULLS[col.name]
+
+        b.writeto(self.temp('test.fits'), clobber=True)
+
+        with fits.open(self.temp('test.fits')) as hdul:
+            header = hdul[1].header
+            assert header['TNULL1'] == 2
+            assert header['TNULL2'] == 'b'
+            assert header['TNULL3'] == 2.3
+
     def test_mask_array(self):
         t = fits.open(self.data('table.fits'))
         tbdata = t[1].data
@@ -839,7 +949,7 @@ class TestTableFunctions(FitsTestCase):
         assert row['counts'] == 308
         a, b, c = row[1:4]
         assert a == counts[2]
-        assert b == '0.0'
+        assert b == ''
         assert (c == np.array([0., 0.,  0.,  0., 0.], dtype=np.float32)).all()
         row['counts'] = 310
         assert row['counts'] == 310
@@ -962,7 +1072,7 @@ class TestTableFunctions(FitsTestCase):
         assert tbhdu.columns._arrays[1][0] == 312
         assert tbhdu.columns.columns[1].array[0] == 312
         assert tbhdu.columns.columns[0].array[0] == 'NGC1'
-        assert tbhdu.columns.columns[2].array[0] == '0.0'
+        assert tbhdu.columns.columns[2].array[0] == ''
         assert (tbhdu.columns.columns[3].array[0] ==
                 np.array([0., 0., 0., 0., 0.], dtype=np.float32)).all()
         assert tbhdu.columns.columns[4].array[0] == True
@@ -1024,7 +1134,7 @@ class TestTableFunctions(FitsTestCase):
         assert tbhdu2.columns._arrays[1][0] == 312
         assert tbhdu2.columns.columns[1].array[0] == 312
         assert tbhdu2.columns.columns[0].array[0] == 'NGC1'
-        assert tbhdu2.columns.columns[2].array[0] == '0.0'
+        assert tbhdu2.columns.columns[2].array[0] == ''
         assert (tbhdu2.columns.columns[3].array[0] ==
                 np.array([0., 0., 0., 0., 0.], dtype=np.float32)).all()
         assert tbhdu2.columns.columns[4].array[0] == True
@@ -1035,14 +1145,14 @@ class TestTableFunctions(FitsTestCase):
         assert tbhdu2.columns._arrays[1][4] == 112
         assert tbhdu2.columns.columns[1].array[4] == 112
         assert tbhdu2.columns.columns[0].array[4] == 'NGC5'
-        assert tbhdu2.columns.columns[2].array[4] == '0.0'
+        assert tbhdu2.columns.columns[2].array[4] == ''
         assert (tbhdu2.columns.columns[3].array[4] ==
                 np.array([1., 2., 3., 4., 5.], dtype=np.float32)).all()
         assert tbhdu2.columns.columns[4].array[4] == False
 
         assert tbhdu2.columns.columns[1].array[8] == 0
-        assert tbhdu2.columns.columns[0].array[8] == '0.0'
-        assert tbhdu2.columns.columns[2].array[8] == '0.0'
+        assert tbhdu2.columns.columns[0].array[8] == ''
+        assert tbhdu2.columns.columns[2].array[8] == ''
         assert (tbhdu2.columns.columns[3].array[8] ==
                 np.array([0., 0., 0., 0., 0.], dtype=np.float32)).all()
         assert tbhdu2.columns.columns[4].array[8] == False
@@ -1514,58 +1624,74 @@ class TestTableFunctions(FitsTestCase):
                 np.array([False, True], dtype=np.bool)).all()
 
     def test_variable_length_table_format_pd_from_object_array(self):
-        a = np.array([np.array([7.2e-20, 7.3e-20]), np.array([0.0]),
-                      np.array([0.0])], 'O')
-        acol = fits.Column(name='testa', format='PD()', array=a)
-        tbhdu = fits.new_table([acol])
-        tbhdu.writeto(self.temp('newtable.fits'))
-        tbhdu1 = fits.open(self.temp('newtable.fits'))
-
-        for j in range(3):
-            for i in range(len(a[j])):
-                assert tbhdu1[1].data.field(0)[j][i] == a[j][i]
-
-        tbhdu1.close()
+        def test(format_code):
+            a = np.array([np.array([7.2e-20, 7.3e-20]), np.array([0.0]),
+                          np.array([0.0])], 'O')
+            acol = fits.Column(name='testa', format=format_code, array=a)
+            tbhdu = fits.new_table([acol])
+            with ignore_warnings():
+                tbhdu.writeto(self.temp('newtable.fits'), clobber=True)
+            with fits.open(self.temp('newtable.fits')) as tbhdu1:
+                assert tbhdu1[1].columns[0].format.endswith('D(2)')
+                for j in range(3):
+                    for i in range(len(a[j])):
+                        assert tbhdu1[1].data.field(0)[j][i] == a[j][i]
+
+        for code in ('PD()', 'QD()'):
+            test(code)
 
     def test_variable_length_table_format_pd_from_list(self):
-        a = [np.array([7.2e-20, 7.3e-20]), np.array([0.0]), np.array([0.0])]
-        acol = fits.Column(name='testa', format='PD()', array=a)
-        tbhdu = fits.new_table([acol])
-        tbhdu.writeto(self.temp('newtable.fits'))
-        tbhdu1 = fits.open(self.temp('newtable.fits'))
-
-        for j in range(3):
-            for i in range(len(a[j])):
-                assert tbhdu1[1].data.field(0)[j][i] == a[j][i]
-
-        tbhdu1.close()
+        def test(format_code):
+            a = [np.array([7.2e-20, 7.3e-20]), np.array([0.0]),
+                 np.array([0.0])]
+            acol = fits.Column(name='testa', format=format_code, array=a)
+            tbhdu = fits.new_table([acol])
+            with ignore_warnings():
+                tbhdu.writeto(self.temp('newtable.fits'), clobber=True)
+
+            with fits.open(self.temp('newtable.fits')) as tbhdu1:
+                assert tbhdu1[1].columns[0].format.endswith('D(2)')
+                for j in range(3):
+                    for i in range(len(a[j])):
+                        assert tbhdu1[1].data.field(0)[j][i] == a[j][i]
+
+        for code in ('PD()', 'QD()'):
+            test(code)
 
     def test_variable_length_table_format_pa_from_object_array(self):
-        a = np.array([np.array(['a', 'b', 'c']), np.array(['d', 'e']),
-                      np.array(['f'])], 'O')
-        acol = fits.Column(name='testa', format='PA()', array=a)
-        tbhdu = fits.new_table([acol])
-        tbhdu.writeto(self.temp('newtable.fits'))
-        hdul = fits.open(self.temp('newtable.fits'))
-
-        for j in range(3):
-            for i in range(len(a[j])):
-                assert hdul[1].data.field(0)[j][i] == a[j][i]
-
-        hdul.close()
+        def test(format_code):
+            a = np.array([np.array(['a', 'b', 'c']), np.array(['d', 'e']),
+                          np.array(['f'])], 'O')
+            acol = fits.Column(name='testa', format=format_code, array=a)
+            tbhdu = fits.new_table([acol])
+            with ignore_warnings():
+                tbhdu.writeto(self.temp('newtable.fits'), clobber=True)
+
+            with fits.open(self.temp('newtable.fits')) as hdul:
+                assert hdul[1].columns[0].format.endswith('A(3)')
+                for j in range(3):
+                    for i in range(len(a[j])):
+                        assert hdul[1].data.field(0)[j][i] == a[j][i]
+
+        for code in ('PA()', 'QA()'):
+            test(code)
 
     def test_variable_length_table_format_pa_from_list(self):
-        a = ['a', 'ab', 'abc']
-        acol = fits.Column(name='testa', format='PA()', array=a)
-        tbhdu = fits.new_table([acol])
-        tbhdu.writeto(self.temp('newtable.fits'))
-        hdul = fits.open(self.temp('newtable.fits'))
-
-        for j in range(3):
-            for i in range(len(a[j])):
-                assert hdul[1].data.field(0)[j][i] == a[j][i]
-
-        hdul.close()
+        def test(format_code):
+            a = ['a', 'ab', 'abc']
+            acol = fits.Column(name='testa', format=format_code, array=a)
+            tbhdu = fits.new_table([acol])
+            with ignore_warnings():
+                tbhdu.writeto(self.temp('newtable.fits'), clobber=True)
+
+            with fits.open(self.temp('newtable.fits')) as hdul:
+                assert hdul[1].columns[0].format.endswith('A(3)')
+                for j in range(3):
+                    for i in range(len(a[j])):
+                        assert hdul[1].data.field(0)[j][i] == a[j][i]
+
+        for code in ('PA()', 'QA()'):
+            test(code)
 
     def test_fits_rec_column_access(self):
         t = fits.open(self.data('table.fits'))
@@ -1999,7 +2125,8 @@ class TestTableFunctions(FitsTestCase):
         """Regression test for https://trac.assembla.com/pyfits/ticket/197"""
 
         c = fits.Column('F1', 'A3', null='---',
-                        array=np.array(['1.0', '2.0', '---', '3.0']))
+                        array=np.array(['1.0', '2.0', '---', '3.0']),
+                        ascii=True)
         table = fits.new_table([c], tbtype='TableHDU')
         table.writeto(self.temp('test.fits'))
 
@@ -2022,19 +2149,25 @@ class TestTableFunctions(FitsTestCase):
 
     def test_getdata_vla(self):
         """Regression test for https://trac.assembla.com/pyfits/ticket/200"""
-        col = fits.Column(name='QUAL_SPE', format='PJ()',
-                          array=[np.arange(1572)] * 225)
-        tb_hdu = fits.new_table([col])
-        pri_hdu = fits.PrimaryHDU()
-        hdu_list = fits.HDUList([pri_hdu, tb_hdu])
-        hdu_list.writeto(self.temp('toto.fits'))
 
-        data = fits.getdata(self.temp('toto.fits'))
+        def test(format_code):
+            col = fits.Column(name='QUAL_SPE', format=format_code,
+                              array=[np.arange(1572)] * 225)
+            tb_hdu = fits.new_table([col])
+            pri_hdu = fits.PrimaryHDU()
+            hdu_list = fits.HDUList([pri_hdu, tb_hdu])
+            with ignore_warnings():
+                hdu_list.writeto(self.temp('toto.fits'), clobber=True)
 
-        # Need to compare to the original data row by row since the FITS_rec
-        # returns an array of _VLA objects
-        for row_a, row_b in zip(data['QUAL_SPE'], col.array):
-            assert (row_a == row_b).all()
+            data = fits.getdata(self.temp('toto.fits'))
+
+            # Need to compare to the original data row by row since the FITS_rec
+            # returns an array of _VLA objects
+            for row_a, row_b in zip(data['QUAL_SPE'], col.array):
+                assert (row_a == row_b).all()
+
+        for code in ('PJ()', 'QJ()'):
+            test(code)
 
     def test_column_array_type_mismatch(self):
         """Regression test for https://trac.assembla.com/pyfits/ticket/218"""
@@ -2043,7 +2176,7 @@ class TestTableFunctions(FitsTestCase):
         col = fits.Column('mag', format='E', array=arr)
         assert (arr == col.array).all()
 
-    def test_image_none(self):
+    def test_table_none(self):
         """Regression test
         for https://github.com/spacetelescope/PyFITS/issues/27
         """
@@ -2061,3 +2194,65 @@ class TestTableFunctions(FitsTestCase):
             assert h[1].header['NAXIS2'] == 0
             assert isinstance(h[1].data, fits.FITS_rec)
             assert len(h[1].data) == 0
+
+    def test_unncessary_table_load(self):
+        """Test unnecessary parsing and processing of FITS tables when writing
+        direclty from one FITS file to a new file without first reading the
+        data for user manipulation.
+
+        In other words, it should be possible to do a direct copy of the raw
+        data without unecessary processing of the data.
+        """
+
+        with fits.open(self.data('table.fits')) as h:
+            h[1].writeto(self.temp('test.fits'))
+
+        # Since this was a direct copy the h[1].data attribute should not have
+        # even been accessed (since this means the data was read and parsed)
+        assert 'data' not in h[1].__dict__
+
+        with fits.open(self.data('table.fits')) as h1:
+            with fits.open(self.temp('test.fits')) as h2:
+                assert str(h1[1].header) == str(h2[1].header)
+                assert comparerecords(h1[1].data, h2[1].data)
+
+    def test_table_from_columns_of_other_table(self):
+        """Tests a rare corner case where the columns of an existing table
+        are used to create a new table with the new_table function.  In this
+        specific case, however, the existing table's data has not been read
+        yet, so new_table has to get at it through the Delayed proxy.
+        """
+
+        hdul = fits.open(self.data('table.fits'))
+
+        # Make sure the column array is in fact delayed...
+        assert isinstance(hdul[1].columns._arrays[0], Delayed)
+
+        # Create a new table...
+        t = fits.new_table(hdul[1].columns)
+
+        # The original columns should no longer be delayed...
+        assert not isinstance(hdul[1].columns._arrays[0], Delayed)
+
+        t.writeto(self.temp('test.fits'))
+
+        with fits.open(self.temp('test.fits')) as hdul2:
+            assert comparerecords(hdul[1].data, hdul2[1].data)
+
+    def test_bintable_to_asciitable(self):
+        """Tests initializing a TableHDU with the data from a BinTableHDU."""
+
+        with fits.open(self.data('tb.fits')) as hdul:
+            tbdata = hdul[1].data
+            tbhdu = fits.TableHDU(data=tbdata)
+            with ignore_warnings():
+                tbhdu.writeto(self.temp('test.fits'), clobber=True)
+            with fits.open(self.temp('test.fits')) as hdul2:
+                tbdata2 = hdul2[1].data
+                assert np.all(tbdata['c1'] == tbdata2['c1'])
+                assert np.all(tbdata['c2'] == tbdata2['c2'])
+                assert np.all(tbdata['c3'] == tbdata2['c3'])
+                # c4 is a boolean column in the original table; we want ASCII
+                # columns to convert these to columns of 'T'/'F' strings
+                assert np.all(np.where(tbdata['c4'] == True, 'T', 'F') ==
+                              tbdata2['c4'])
diff --git a/astropy/io/fits/tests/test_uint.py b/astropy/io/fits/tests/test_uint.py
index 03ca81b..7868f30 100644
--- a/astropy/io/fits/tests/test_uint.py
+++ b/astropy/io/fits/tests/test_uint.py
@@ -6,78 +6,109 @@ import numpy as np
 
 from ....io import fits
 from . import FitsTestCase
+from .util import ignore_warnings
+from ....tests.helper import pytest
 
 
 class TestUintFunctions(FitsTestCase):
-    def test_uint16(self):
-        hdu = fits.PrimaryHDU(np.array([-3, -2, -1, 0, 1, 2, 3]))
-        hdu.scale('int16', '', bzero=2 ** 15)
-        hdu.writeto(self.temp('tempfile.fits'))
-        hdul = fits.open(self.temp('tempfile.fits'), uint=True)
-        assert hdul[0].data.dtype == np.uint16
-        assert np.all(hdul[0].data ==
-                      np.array([(2 ** 16) - 3, (2 ** 16) - 2, (2 ** 16) - 1,
-                                0, 1, 2, 3],
-                               dtype=np.uint16))
-        hdul.writeto(self.temp('tempfile1.fits'))
-        hdul1 = fits.open(self.temp('tempfile1.fits'), uint16=True)
-        assert (hdul[0].data == hdul1[0].data).all()
-        assert hdul[0].section[:1].dtype.name == 'uint16'
-        assert (hdul[0].section[:1] == hdul[0].data[:1]).all()
-        hdul.close()
-        hdul1.close()
-
-    def test_uint32(self):
-        hdu = fits.PrimaryHDU(np.array([-3, -2, -1, 0, 1, 2, 3]))
-        hdu.scale('int32', '', bzero=2 ** 31)
-        hdu.writeto(self.temp('tempfile.fits'))
-        hdul = fits.open(self.temp('tempfile.fits'), uint=True)
-        assert hdul[0].data.dtype == np.uint32
-        assert np.all(hdul[0].data ==
-                      np.array([(2 ** 32) - 3, (2 ** 32) - 2, (2 ** 32) - 1,
-                                0, 1, 2, 3], dtype=np.uint32))
-
-        hdul.writeto(self.temp('tempfile1.fits'))
-        hdul1 = fits.open(self.temp('tempfile1.fits'), uint=True)
-
-        assert (hdul[0].data == hdul1[0].data).all()
-        assert hdul[0].section[:1].dtype.name == 'uint32'
-        assert (hdul[0].section[:1] == hdul[0].data[:1]).all()
-        hdul.close()
-        hdul1.close()
-
-    def test_uint64(self):
-        if platform.architecture()[0] == '64bit':
-            hdu = fits.PrimaryHDU(np.array([-3, -2, -1, 0, 1, 2, 3]))
-            hdu.scale('int64', '', bzero=2 ** 63)
-            hdu.writeto(self.temp('tempfile.fits'))
-            hdul = fits.open(self.temp('tempfile.fits'), uint=True)
-            assert hdul[0].data.dtype == np.uint64
-            assert np.all(hdul[0].data ==
-                          np.array([(2 ** 64) - 3, (2 ** 64) - 2,
-                                    (2 ** 64) - 1, 0, 1, 2, 3],
-                                   dtype=np.uint64))
-            hdul.writeto(self.temp('tempfile1.fits'))
-            hdul1 = fits.open(self.temp('tempfile1.fits'), uint=True)
-            assert (hdul[0].data == hdul1[0].data).all()
-            assert hdul[0].section[:1].dtype.name == 'uint64'
-            assert (hdul[0].section[:1] == hdul[0].data[:1]).all()
-            hdul.close()
-            hdul1.close()
-
-    def test_uint_compressed(self):
-        hdu = fits.CompImageHDU(np.array([-3, -2, -1, 0, 1, 2, 3]))
-        hdu.scale('int32', '', bzero=2 ** 31)
-        hdu.writeto(self.temp('temp.fits'))
-        with fits.open(self.temp('temp.fits'), uint=True) as hdul:
-            assert hdul[1].data.dtype == np.uint32
-            assert (hdul[1].data ==
-                    np.array([(2 ** 32) - 3, (2 ** 32) - 2, (2 ** 32) - 1, 0,
-                              1, 2, 3], dtype=np.uint32)).all()
-            hdul.writeto(self.temp('temp2.fits'))
-            with fits.open(self.temp('temp2.fits'), uint=True) as hdul2:
-                assert (hdul[1].data == hdul2[1].data).all()
-                # TODO: Enable these lines if CompImageHDUs ever grow .section
-                # support
-                # assert hdul[1].section[:1].dtype.name == 'uint32'
-                # assert (hdul[1].section[:1] == hdul[1].data[:1]).all()
+    @classmethod
+    def setup_class(cls):
+        cls.utypes = ('u2','u4','u8')
+        cls.utype_map = {'u2': np.uint16, 'u4': np.uint32, 'u8': np.uint64}
+        cls.itype_map = {'u2': np.int16, 'u4': np.int32, 'u8': np.int64}
+        cls.format_map = {'u2': 'I', 'u4': 'J', 'u8': 'K'}
+
+    # Test of 64-bit compressed image is disabled.  cfitsio library doesn't
+    # like it
+    @pytest.mark.parametrize(('utype','compressed'),
+        [('u2', False), ('u4', False), ('u8', False), ('u2', True),
+         ('u4',True)]) #,('u8',True)])
+    def test_uint(self, utype, compressed):
+        bits = 8*int(utype[1])
+        if platform.architecture()[0] == '64bit' or bits != 64:
+            if compressed:
+                hdu = fits.CompImageHDU(np.array([-3, -2, -1, 0, 1, 2, 3]))
+                hdu_number = 1
+            else:
+                hdu = fits.PrimaryHDU(np.array([-3, -2, -1, 0, 1, 2, 3]))
+                hdu_number = 0
+
+            hdu.scale('int{0:d}'.format(bits), '', bzero=2 ** (bits-1))
+
+            with ignore_warnings():
+                hdu.writeto(self.temp('tempfile.fits'), clobber=True)
+
+            with fits.open(self.temp('tempfile.fits'), uint=True) as hdul:
+                assert hdul[hdu_number].data.dtype == self.utype_map[utype]
+                assert (hdul[hdu_number].data == np.array(
+                    [(2 ** bits) - 3, (2 ** bits) - 2, (2 ** bits) - 1,
+                    0, 1, 2, 3],
+                    dtype=self.utype_map[utype])).all()
+                hdul.writeto(self.temp('tempfile1.fits'))
+                with fits.open(self.temp('tempfile1.fits'),
+                               uint16=True) as hdul1:
+                    d1 = hdul[hdu_number].data
+                    d2 = hdul1[hdu_number].data
+                    assert (d1 == d2).all()
+                    if not compressed:
+                        # TODO: Enable these lines if CompImageHDUs ever grow
+                        # .section support
+                        sec = hdul[hdu_number].section[:1]
+                        assert sec.dtype.name == 'uint%s' % bits
+                        assert (sec == d1[:1]).all()
+
+    @pytest.mark.parametrize('utype', ('u2', 'u4', 'u8'))
+    def test_uint_columns(self, utype):
+        """Test basic functionality of tables with columns containing
+        pseudo-unsigned integers.  See
+        https://github.com/astropy/astropy/pull/906
+        """
+
+        bits = 8*int(utype[1])
+        if platform.architecture()[0] == '64bit' or bits != 64:
+            bzero = self.utype_map[utype](2**(bits-1))
+            one = self.utype_map[utype](1)
+            u0 = np.arange(bits+1,dtype=self.utype_map[utype])
+            u = 2**u0 - one
+            if bits == 64:
+                u[63] = bzero - one
+                u[64] = u[63] + u[63] + one
+            uu = (u - bzero).view(self.itype_map[utype])
+
+            # Construct a table from explicit column
+            col = fits.Column(name=utype, array=u,
+                              format=self.format_map[utype], bzero=bzero)
+
+            table = fits.new_table([col])
+            assert (table.data[utype] == u).all()
+            # This used to be table.data.base, but now after adding a table to
+            # a BinTableHDU it gets stored as a view of the original table,
+            # even if the original was already a FITS_rec.  So now we need
+            # table.data.base.base
+            assert (table.data.base.base[utype] == uu).all()
+            hdu0 = fits.PrimaryHDU()
+            hdulist = fits.HDUList([hdu0,table])
+
+            with ignore_warnings():
+                hdulist.writeto(self.temp('tempfile.fits'), clobber=True)
+
+            # Test write of unsigned int
+            del hdulist
+            with fits.open(self.temp('tempfile.fits'), uint=True) as hdulist2:
+                hdudata = hdulist2[1].data
+                assert (hdudata[utype] == u).all()
+                assert (hdudata[utype].dtype == self.utype_map[utype])
+                assert (hdudata.base[utype] == uu).all()
+
+            # Construct recarray then write out that.
+            v = u.view(dtype=[(utype, self.utype_map[utype])])
+
+            with ignore_warnings():
+                fits.writeto(self.temp('tempfile2.fits'), v, clobber=True)
+
+            with fits.open(self.temp('tempfile2.fits'), uint=True) as hdulist3:
+                hdudata3 = hdulist3[1].data
+                assert (hdudata3.base[utype] ==
+                        table.data.base.base[utype]).all()
+                assert (hdudata3[utype] == table.data[utype]).all()
+                assert (hdudata3[utype] == u).all()
diff --git a/astropy/io/fits/tests/test_util.py b/astropy/io/fits/tests/test_util.py
index e8835da..0a8539d 100644
--- a/astropy/io/fits/tests/test_util.py
+++ b/astropy/io/fits/tests/test_util.py
@@ -4,10 +4,8 @@ from __future__ import with_statement
 
 import os
 import signal
-import sys
-import warnings
 
-from ....tests.helper import pytest
+from ....tests.helper import pytest, catch_warnings
 from ..util import ignore_sigint
 
 from . import FitsTestCase
@@ -18,13 +16,13 @@ class TestUtils(FitsTestCase):
     def test_ignore_sigint(self):
         @ignore_sigint
         def test():
-            with warnings.catch_warnings(record=True) as w:
+            with catch_warnings(UserWarning) as w:
                 pid = os.getpid()
                 os.kill(pid, signal.SIGINT)
                 # One more time, for good measure
                 os.kill(pid, signal.SIGINT)
-                assert len(w) == 2
-                assert (str(w[0].message) ==
-                        'KeyboardInterrupt ignored until test is complete!')
+            assert len(w) == 2
+            assert (str(w[0].message) ==
+                    'KeyboardInterrupt ignored until test is complete!')
 
         pytest.raises(KeyboardInterrupt, test)
diff --git a/astropy/io/fits/util.py b/astropy/io/fits/util.py
index 2493e7d..4fccea1 100644
--- a/astropy/io/fits/util.py
+++ b/astropy/io/fits/util.py
@@ -1,7 +1,9 @@
 # Licensed under a 3-clause BSD style license - see PYFITS.rst
+
 from __future__ import division
 
 import functools
+import gzip
 import itertools
 import mmap
 import os
@@ -14,7 +16,7 @@ import threading
 import warnings
 
 import numpy as np
-
+from ...utils.exceptions import AstropyUserWarning
 
 def itersubclasses(cls, _seen=None):
     """
@@ -22,8 +24,6 @@ def itersubclasses(cls, _seen=None):
 
     Generator over all subclasses of a given class, in depth first order.
 
-    >>> list(itersubclasses(int)) == [bool]
-    True
     >>> class A(object): pass
     >>> class B(A): pass
     >>> class C(A): pass
@@ -37,7 +37,7 @@ def itersubclasses(cls, _seen=None):
     E
     C
     >>> # get ALL (new-style) classes currently defined
-    >>> [cls.__name__ for cls in itersubclasses(object)] #doctest: +ELLIPSIS
+    >>> [cls.__name__ for cls in itersubclasses(object)]
     ['type', ...'tuple', ...]
 
     From http://code.activestate.com/recipes/576949/
@@ -80,7 +80,7 @@ def ignore_sigint(func):
 
             def __call__(self, signum, frame):
                 warnings.warn('KeyboardInterrupt ignored until %s is '
-                              'complete!' % func.__name__)
+                              'complete!' % func.__name__, AstropyUserWarning)
                 self.sigint_received = True
 
         sigint_handler = SigintHandler()
@@ -236,7 +236,7 @@ def fileobj_closed(f):
         return f.closed
     elif hasattr(f, 'fileobj') and hasattr(f.fileobj, 'closed'):
         return f.fileobj.closed
-    elif hasattr(f, 'fp') and hasattr(f.fp.closed):
+    elif hasattr(f, 'fp') and hasattr(f.fp, 'closed'):
         return f.fp.closed
     else:
         return True
@@ -251,46 +251,201 @@ def fileobj_mode(f):
     # Go from most to least specific--for example gzip objects have a 'mode'
     # attribute, but it's not analogous to the file.mode attribute
     if hasattr(f, 'fileobj') and hasattr(f.fileobj, 'mode'):
-        mode = f.fileobj.mode
+        fileobj = f.fileobj
     elif hasattr(f, 'fp') and hasattr(f.fp, 'mode'):
-        mode = f.fp.mode
+        fileobj = f.fp
     elif hasattr(f, 'mode'):
-        mode = f.mode
-    else:
-        mode = None
-
-    if isinstance(mode, basestring):
-        # On Python 3 files opened in 'a' mode actually get opened in 'w' or
-        # 'r+' instead of 'a', since the behavior of 'a' mode is not normalized
-        # across systems.  So we should normalize in the same way...
-        if 'a' in mode:
-            if '+' in mode:
-                mode = mode.replace('a', 'r')
-            else:
-                mode = mode.replace('a', 'w')
-
-        # I've noticed that sometimes Python can produce modes like 'r+b' which
-        # I would consider kind of a bug--mode strings should be normalized.
-        # Let's normalize it for them:
-        if '+' in mode:
-            mode = mode.replace('+', '')
-            mode += '+'
+        fileobj = f
     else:
-        # If mode still turned out to be something other than a string, it's
-        # not the droid we were looking for, and we should just toss it
-        mode = None
+        return None
+
+    return _fileobj_normalize_mode(fileobj)
+
+
+def _fileobj_normalize_mode(f):
+    """Takes care of some corner cases in Python where the mode string
+    is either oddly formatted or does not truly represent the file mode.
+    """
+
+    # I've noticed that sometimes Python can produce modes like 'r+b' which I
+    # would consider kind of a bug--mode strings should be normalized.  Let's
+    # normalize it for them:
+    mode = f.mode
+
+    if isinstance(f, gzip.GzipFile):
+        # GzipFiles can be either readonly or writeonly
+        if mode == gzip.READ:
+            return 'rb'
+        elif mode == gzip.WRITE:
+            return 'wb'
+        else:
+            # This shouldn't happen?
+            return None
+
+    if '+' in mode:
+        mode = mode.replace('+', '')
+        mode += '+'
+
+    if _fileobj_is_append_mode(f) and 'a' not in mode:
+        mode = mode.replace('r', 'a').replace('w', 'a')
+
     return mode
 
 
+def _fileobj_is_append_mode(f):
+    """Normally the way to tell if a file is in append mode is if it has
+    'a' in the mode string.  However on Python 3 (or in particular with
+    the io module) this can't be relied on.  See
+    http://bugs.python.org/issue18876.
+    """
+
+    if 'a' in f.mode:
+        # Take care of the obvious case first
+        return True
+
+    # We might have an io.FileIO in which case the only way to know for sure
+    # if the file is in append mode is to ask the file descriptor
+    if not hasattr(f, 'fileno'):
+        # Who knows what this is?
+        return False
+
+    # Call platform-specific _is_append_mode
+    # If this file is already closed this can result in an error
+    try:
+        return _is_append_mode_platform(f.fileno())
+    except (ValueError, IOError):
+        return False
+
+
+if sys.platform.startswith('win32'):
+    # This global variable is used in _is_append_mode to cache the computed
+    # size of the ioinfo struct from msvcrt which may have a different size
+    # depending on the version of the library and how it was compiled
+    _sizeof_ioinfo = None
+
+    def _make_is_append_mode():
+        # We build the platform-specific _is_append_mode function for Windows
+        # inside a function factory in order to avoid cluttering the local
+        # namespace with ctypes stuff
+        from ctypes import (cdll, c_size_t, c_void_p, c_int, c_char,
+                            Structure, POINTER, cast)
+
+        try:
+            from ctypes.util import find_msvcrt
+        except ImportError:
+            # find_msvcrt is not available on Python 2.5 so we have to provide
+            # it ourselves anyways
+            from distutils.msvccompiler import get_build_version
+
+            def find_msvcrt():
+                version = get_build_version()
+                if version is None:
+                    # better be safe than sorry
+                    return None
+                if version <= 6:
+                    clibname = 'msvcrt'
+                else:
+                    clibname = 'msvcr%d' % (version * 10)
+
+                # If python was built with in debug mode
+                import imp
+                if imp.get_suffixes()[0][0] == '_d.pyd':
+                    clibname += 'd'
+                return clibname+'.dll'
+
+        def _dummy_is_append_mode(fd):
+            warnings.warn(
+                'Could not find appropriate MS Visual C Runtime '
+                'library or library is corrupt/misconfigured; cannot '
+                'determine whether your file object was opened in append '
+                'mode.  Please consider using a file object opened in write '
+                'mode instead.')
+            return False
+
+        msvcrt_dll = find_msvcrt()
+        if msvcrt_dll is None:
+            # If for some reason the C runtime can't be located then we're dead
+            # in the water.  Just return a dummy function
+            return _dummy_is_append_mode
+
+        msvcrt = cdll.LoadLibrary(msvcrt_dll)
+
+
+        # Constants
+        IOINFO_L2E = 5
+        IOINFO_ARRAY_ELTS = 1 << IOINFO_L2E
+        IOINFO_ARRAYS = 64
+        FAPPEND = 0x20
+        _NO_CONSOLE_FILENO = -2
+
+
+        # Types
+        intptr_t = POINTER(c_int)
+
+        class my_ioinfo(Structure):
+            _fields_ = [('osfhnd', intptr_t),
+                        ('osfile', c_char)]
+
+        # Functions
+        _msize = msvcrt._msize
+        _msize.argtypes = (c_void_p,)
+        _msize.restype = c_size_t
+
+        # Variables
+        # Since we don't know how large the ioinfo struct is just treat the
+        # __pioinfo array as an array of byte pointers
+        __pioinfo = cast(msvcrt.__pioinfo, POINTER(POINTER(c_char)))
+
+        # Determine size of the ioinfo struct; see the comment above where
+        # _sizeof_ioinfo = None is set
+        global _sizeof_ioinfo
+        if __pioinfo[0] is not None:
+            _sizeof_ioinfo = _msize(__pioinfo[0]) // IOINFO_ARRAY_ELTS
+
+        if not _sizeof_ioinfo:
+            # This shouldn't happen, but I suppose it could if one is using a
+            # broken msvcrt, or just happened to have a dll of the same name
+            # lying around.
+            return _dummy_is_append_mode
+
+        def _is_append_mode(fd):
+            global _sizeof_ioinfo
+            if fd != _NO_CONSOLE_FILENO:
+                idx1 = fd >> IOINFO_L2E # The index into the __pioinfo array
+                # The n-th ioinfo pointer in __pioinfo[idx1]
+                idx2 = fd & ((1 << IOINFO_L2E) - 1)
+                if 0 <= idx1 < IOINFO_ARRAYS and __pioinfo[idx1] is not None:
+                    # Doing pointer arithmetic in ctypes is irritating
+                    pio = c_void_p(cast(__pioinfo[idx1], c_void_p).value +
+                                   idx2 * _sizeof_ioinfo)
+                    ioinfo = cast(pio, POINTER(my_ioinfo)).contents
+                    return bool(ord(ioinfo.osfile) & FAPPEND)
+            return False
+
+        return _is_append_mode
+
+    _is_append_mode_platform = _make_is_append_mode()
+    del _make_is_append_mode
+else:
+    import fcntl
+
+    def _is_append_mode_platform(fd):
+        return bool(fcntl.fcntl(fd, fcntl.F_GETFL) & os.O_APPEND)
+
+
 def fileobj_is_binary(f):
     """
     Returns True if the give file or file-like object has a file open in binary
     mode.  When in doubt, returns True by default.
     """
 
+    # This is kind of a hack for this to work correctly with _File objects,
+    # which, for the time being, are *always* binary
+    if hasattr(f, 'binary'):
+        return f.binary
+
     # TODO: In Python 3 it might be more reliable to check if the fileobj is a
     # text reader or a binary reader
-
     mode = fileobj_mode(f)
     if mode:
         return 'b' in mode
@@ -315,15 +470,6 @@ def translate(s, table, deletechars):
         return s.translate(table)
 
 
-def indent(s, shift=1, width=4):
-    indented = '\n'.join(' ' * (width * shift) + l if l else ''
-                         for l in s.splitlines())
-    if s[-1] == '\n':
-        indented += '\n'
-
-    return indented
-
-
 def fill(text, width, *args, **kwargs):
     """
     Like :func:`textwrap.wrap` but preserves existing paragraphs which
@@ -363,9 +509,10 @@ def _array_to_file(arr, outfile):
         def write(a, f):
             a.tofile(f)
     else:
-        # treat as file-like object with "write" method
+        # treat as file-like object with "write" method and write the array
+        # via its buffer interface
         def write(a, f):
-            _write_string(f, a.tostring())
+            f.write(a.flatten().view(np.ubyte))
 
     # Implements a workaround for a bug deep in OSX's stdlib file writing
     # functions; on 64-bit OSX it is not possible to correctly write a number
diff --git a/astropy/io/fits/verify.py b/astropy/io/fits/verify.py
index c1079cc..b1a9c0c 100644
--- a/astropy/io/fits/verify.py
+++ b/astropy/io/fits/verify.py
@@ -2,7 +2,9 @@
 
 import warnings
 
-from .util import indent, u
+from .util import u
+from ...utils import indent
+from ...utils.exceptions import AstropyUserWarning
 
 
 class VerifyError(Exception):
@@ -12,7 +14,7 @@ class VerifyError(Exception):
     pass
 
 
-class VerifyWarning(UserWarning):
+class VerifyWarning(AstropyUserWarning):
     """
     Verify warning class.
     """
@@ -68,12 +70,12 @@ class _Verify(object):
         if opt in ['fix', 'silentfix'] and 'Unfixable' in x:
             raise VerifyError('\n' + x)
         if opt not in ['silentfix', 'exception'] and x:
-            warnings.warn(u('Output verification result:'))
+            warnings.warn(u('Output verification result:'), VerifyWarning)
             for line in x.splitlines():
                 # Each line contains a single issue that was fixed--issue a
                 # separate warning for each of those issues
                 warnings.warn(line, VerifyWarning)
-            warnings.warn(u('Note: Astropy uses zero-based indexing.\n'))
+            warnings.warn(u('Note: Astropy uses zero-based indexing.\n'), VerifyWarning)
         if opt == 'exception' and x:
             raise VerifyError('\n' + x)
 
diff --git a/astropy/io/misc/hdf5.py b/astropy/io/misc/hdf5.py
index 9750c9c..97bbeba 100644
--- a/astropy/io/misc/hdf5.py
+++ b/astropy/io/misc/hdf5.py
@@ -8,27 +8,41 @@ not meant to be used directly, but instead are available as readers/writers in
 from __future__ import print_function
 
 import os
+import warnings
 
 import numpy as np
-
-from ... import log
+from ...utils.exceptions import AstropyUserWarning
 
 HDF5_SIGNATURE = b'\x89HDF\r\n\x1a\n'
 
 __all__ = ['read_table_hdf5', 'write_table_hdf5']
 
 
-def is_hdf5(origin, args, kwargs):
+def _find_all_structured_arrays(handle):
+    """
+    Find all sturctured arrays in an HDF5 file
+    """
+    import h5py
+    structured_arrays = []
+
+    def append_structured_arrays(name, obj):
+        if isinstance(obj, h5py.Dataset) and obj.dtype.kind == 'V':
+            structured_arrays.append(name)
+    handle.visititems(append_structured_arrays)
+    return structured_arrays
 
-    if isinstance(args[0], basestring):
-        if os.path.exists(args[0]):
-            with open(args[0], 'rb') as f:
-                if f.read(8) == HDF5_SIGNATURE:
-                    return True
-                else:
-                    return False
-        elif args[0].endswith('.hdf5') or args[0].endswith('.h5'):
-            return True
+
+def is_hdf5(origin, filepath, fileobj, *args, **kwargs):
+
+    if fileobj is not None:
+        loc = fileobj.tell()
+        try:
+            signature = fileobj.read(8)
+        finally:
+            fileobj.seek(loc)
+        return signature == HDF5_SIGNATURE
+    elif filepath is not None:
+        return filepath.endswith('.hdf5') or filepath.endswith('.h5')
 
     try:
         import h5py
@@ -43,11 +57,12 @@ def read_table_hdf5(input, path=None):
     Read a Table object from an HDF5 file
 
     This requires `h5py <http://alfven.org/wp/hdf5-for-python/>`_ to be
-    installed.
+    installed. If more than one table is present in the HDF5 file or group, the
+    first table is read in and a warning is displayed.
 
     Parameters
     ----------
-    input : str or `h5py.highlevel.File` or `h5py.highlevel.Group`
+    input : str or `h5py.highlevel.File` or `h5py.highlevel.Group` or `h5py.highlevel.Dataset`
         If a string, the filename to read the table from. If an h5py object,
         either the file or the group object to read the table from.
     path : str
@@ -60,55 +75,71 @@ def read_table_hdf5(input, path=None):
     except ImportError:
         raise Exception("h5py is required to read and write HDF5 files")
 
-    if path is None:
-        raise ValueError("table path should be set via the path= argument")
-    elif path.endswith('/'):
-        raise ValueError("table path should end with table name, not /")
+    if isinstance(input, (h5py.highlevel.File, h5py.highlevel.Group)):
 
-    if '/' in path:
-        group, name = path.rsplit('/', 1)
-    else:
-        group, name = None, path
+        # If a path was specified, follow the path
 
-    if isinstance(input, (h5py.highlevel.File, h5py.highlevel.Group)):
-        f, g = None, input
-        if group:
+        if path:
             try:
-                g = g[group]
+                input = input[path]
             except KeyError:
-                raise IOError("Group {0} does not exist".format(group))
-    else:
+                raise IOError("Path {0} does not exist".format(path))
+
+        # `input` is now either a group or a dataset. If it is a group, we
+        # will search for all structured arrays inside the group, and if there
+        # is one we can proceed otherwise an error is raised. If it is a
+        # dataset, we just proceed with the reading.
+
+        if isinstance(input, h5py.highlevel.Group):
+
+            # Find all structured arrays in group
+            arrays = _find_all_structured_arrays(input)
+
+            if len(arrays) == 0:
+                raise ValueError("no table found in HDF5 group {0}".format(path))
+            elif len(arrays) > 0:
+                path = arrays[0] if path is None else path + '/' + arrays[0]
+                warnings.warn("path= was not specified but multiple tables"
+                              " are present, reading in first available"
+                              " table (path={0})".format(path), AstropyUserWarning)
+                return read_table_hdf5(input, path=path)
+
+    elif not isinstance(input, h5py.highlevel.Dataset):
+
+        # If a file object was passed, then we need to extract the filename
+        # because h5py cannot properly read in file objects.
+
+        if hasattr(input, 'read'):
+            try:
+                input = input.name
+            except AttributeError:
+                raise TypeError("h5py can only open regular files")
+
+        # Open the file for reading, and recursively call read_table_hdf5 with
+        # the file object and the path.
+
         f = h5py.File(input, 'r')
-        try:
-            g = f[group] if group else f
-        except KeyError:
-            f.close()
-            raise IOError("Group {0} does not exist".format(group))
 
-    # Check whether table exists
-    if name not in g:
-        if f is not None:
+        try:
+            return read_table_hdf5(f, path=path)
+        finally:
             f.close()
-        raise IOError("Table {0} does not exist".format(path))
 
-    # Read the table from the file
-    dset = g[name]
+    # If we are here, `input` should be a Dataset object, which we can now
+    # convert to a Table.
 
     # Create a Table object
     from ...table import Table
-    table = Table(np.array(dset))
+    table = Table(np.array(input))
 
     # Read the meta-data from the file
-    table.meta.update(dset.attrs)
-
-    if f is not None:
-        f.close()
+    table.meta.update(input.attrs)
 
     return table
 
 
 def write_table_hdf5(table, output, path=None, compression=False,
-               append=False, overwrite=False):
+                     append=False, overwrite=False):
     """
     Write a Table object to an HDF5 file
 
@@ -146,15 +177,18 @@ def write_table_hdf5(table, output, path=None, compression=False,
     else:
         group, name = None, path
 
-    if isinstance(output, h5py.highlevel.File) or \
-       isinstance(output, h5py.highlevel.Group):
-        f, g = None, output
+    if isinstance(output, (h5py.highlevel.File, h5py.highlevel.Group)):
+
         if group:
             try:
-                g = g[group]
+                output_group = output[group]
             except KeyError:
-                g = g.create_group(group)
-    else:
+                output_group = output.create_group(group)
+        else:
+            output_group = output
+
+    elif isinstance(output, basestring):
+
         if os.path.exists(output) and not append:
             if overwrite:
                 os.remove(output)
@@ -164,25 +198,24 @@ def write_table_hdf5(table, output, path=None, compression=False,
         # Open the file for appending or writing
         f = h5py.File(output, 'a' if append else 'w')
 
-        if group:
-            if append:
-                if group in f.keys():
-                    g = f[group]
-                else:
-                    g = f.create_group(group)
-            else:
-                g = f.create_group(group)
-        else:
-            g = f
+        # Recursively call the write function
+        try:
+            return write_table_hdf5(table, f, path=path,
+                                    compression=compression, append=append,
+                                    overwrite=overwrite)
+        finally:
+            f.close()
+
+    else:
+
+        raise TypeError('output should be a string or an h5py File or Group object')
 
     # Check whether table already exists
-    if name in g:
-        if f is not None:
-            f.close()
+    if name in output_group:
         raise IOError("Table {0} already exists".format(path))
 
     # Write the table to the file
-    dset = g.create_dataset(name, data=table._data, compression=compression)
+    dset = output_group.create_dataset(name, data=table._data, compression=compression)
 
     # Write the meta-data to the file
     for key in table.meta:
@@ -190,8 +223,5 @@ def write_table_hdf5(table, output, path=None, compression=False,
         try:
             dset.attrs[key] = val
         except TypeError:
-            log.warn("Attribute `{0}` of type {1} cannot be written to "
-                     "HDF5 files - skipping".format(key, type(val)))
-
-    if f is not None:
-        f.close()
+            warnings.warn("Attribute `{0}` of type {1} cannot be written to "
+                          "HDF5 files - skipping".format(key, type(val)), AstropyUserWarning)
diff --git a/astropy/io/misc/pickle_helpers.py b/astropy/io/misc/pickle_helpers.py
index 62b4ae4..f496f7b 100644
--- a/astropy/io/misc/pickle_helpers.py
+++ b/astropy/io/misc/pickle_helpers.py
@@ -4,9 +4,13 @@ This module contains simple input/output related functionality that is not
 part of a larger framework or standard.
 """
 
+import sys
+
+
 __all__ = ['fnpickle', 'fnunpickle']
 
 
+
 def fnunpickle(fileorname, number=0, usecPickle=True):
     """ Unpickle pickled objects from a specified file and return the contents.
 
@@ -38,7 +42,6 @@ def fnunpickle(fileorname, number=0, usecPickle=True):
         file.
 
     """
-    import sys
 
     if usecPickle and sys.version_info[0] < 3:  # pragma: py2
         import cPickle as pickle
@@ -96,7 +99,6 @@ def fnpickle(object, fileorname, usecPickle=True, protocol=None, append=False):
         file name, this has no effect).
 
     """
-    import sys
 
     if usecPickle and sys.version_info[0] < 3:  # pragma: py2
         import cPickle as pickle
diff --git a/astropy/io/misc/tests/test_hdf5.py b/astropy/io/misc/tests/test_hdf5.py
index d0a5da8..3332488 100644
--- a/astropy/io/misc/tests/test_hdf5.py
+++ b/astropy/io/misc/tests/test_hdf5.py
@@ -34,28 +34,36 @@ def _default_values(dtype):
 def test_write_nopath(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     with pytest.raises(ValueError) as exc:
         t1.write(test_file)
     assert exc.value.args[0] == "table path should be set via the path= argument"
 
 
 @pytest.mark.skipif('not HAS_H5PY')
+def test_read_notable_nopath(tmpdir):
+    test_file = str(tmpdir.join('test.hdf5'))
+    h5py.File(test_file, 'w').close()  # create empty file
+    with pytest.raises(ValueError) as exc:
+        t1 = Table.read(test_file, path='/', format='hdf5')
+    assert exc.value.args[0] == 'no table found in HDF5 group /'
+
+
+ at pytest.mark.skipif('not HAS_H5PY')
 def test_read_nopath(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     t1.write(test_file, path='the_table')
-    with pytest.raises(ValueError) as exc:
-        Table.read(test_file)
-    assert exc.value.args[0] == "table path should be set via the path= argument"
+    t2 = Table.read(test_file)
+    assert np.all(t1['a'] == t2['a'])
 
 
 @pytest.mark.skipif('not HAS_H5PY')
 def test_write_invalid_path(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     with pytest.raises(ValueError) as exc:
         t1.write(test_file, path='test/')
     assert exc.value.args[0] == "table path should end with table name, not /"
@@ -65,11 +73,11 @@ def test_write_invalid_path(tmpdir):
 def test_read_invalid_path(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     t1.write(test_file, path='the_table')
-    with pytest.raises(ValueError) as exc:
+    with pytest.raises(IOError) as exc:
         Table.read(test_file, path='test/')
-    assert exc.value.args[0] == "table path should end with table name, not /"
+    assert exc.value.args[0] == "Path test/ does not exist"
 
 
 @pytest.mark.skipif('not HAS_H5PY')
@@ -78,7 +86,7 @@ def test_read_missing_group(tmpdir):
     h5py.File(test_file, 'w').close()  # create empty file
     with pytest.raises(IOError) as exc:
         Table.read(test_file, path='test/path/table')
-    assert exc.value.args[0] == "Group test/path does not exist"
+    assert exc.value.args[0] == "Path test/path/table does not exist"
 
 
 @pytest.mark.skipif('not HAS_H5PY')
@@ -88,7 +96,7 @@ def test_read_missing_table(tmpdir):
         f.create_group('test').create_group('path')
     with pytest.raises(IOError) as exc:
         Table.read(test_file, path='test/path/table')
-    assert exc.value.args[0] == "Table test/path/table does not exist"
+    assert exc.value.args[0] == "Path test/path/table does not exist"
 
 
 @pytest.mark.skipif('not HAS_H5PY')
@@ -97,14 +105,14 @@ def test_read_missing_group_fileobj(tmpdir):
     with h5py.File(test_file, 'w') as f:
         with pytest.raises(IOError) as exc:
             Table.read(f, path='test/path/table')
-        assert exc.value.args[0] == "Group test/path does not exist"
+        assert exc.value.args[0] == "Path test/path/table does not exist"
 
 
 @pytest.mark.skipif('not HAS_H5PY')
 def test_read_write_simple(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     t1.write(test_file, path='the_table')
     t2 = Table.read(test_file, path='the_table')
     assert np.all(t2['a'] == [1, 2, 3])
@@ -114,7 +122,7 @@ def test_read_write_simple(tmpdir):
 def test_read_write_existing_table(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     t1.write(test_file, path='the_table')
     with pytest.raises(IOError) as exc:
         t1.write(test_file, path='the_table', append=True)
@@ -125,7 +133,7 @@ def test_read_write_existing_table(tmpdir):
 def test_read_write_memory(tmpdir):
     with h5py.File('test', driver='core', backing_store=False) as output_file:
         t1 = Table()
-        t1.add_column(Column('a', [1, 2, 3]))
+        t1.add_column(Column(name='a', data=[1, 2, 3]))
         t1.write(output_file, path='the_table')
         t2 = Table.read(output_file, path='the_table')
         assert np.all(t2['a'] == [1, 2, 3])
@@ -136,7 +144,7 @@ def test_read_write_existing(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
     h5py.File(test_file, 'w').close()  # create empty file
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     with pytest.raises(IOError) as exc:
         t1.write(test_file, path='the_table')
     assert exc.value.args[0].startswith("File exists:")
@@ -147,7 +155,7 @@ def test_read_write_existing_overwrite(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
     h5py.File(test_file, 'w').close()  # create empty file
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     t1.write(test_file, path='the_table', overwrite=True)
     t2 = Table.read(test_file, path='the_table')
     assert np.all(t2['a'] == [1, 2, 3])
@@ -158,7 +166,7 @@ def test_read_write_existing_append(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
     h5py.File(test_file, 'w').close()  # create empty file
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     t1.write(test_file, path='the_table_1', append=True)
     t1.write(test_file, path='the_table_2', append=True)
     t2 = Table.read(test_file, path='the_table_1')
@@ -173,7 +181,7 @@ def test_read_write_existing_append_groups(tmpdir):
     with h5py.File(test_file, 'w') as f:
         f.create_group('test_1')
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     t1.write(test_file, path='test_1/the_table_1', append=True)
     t1.write(test_file, path='test_2/the_table_2', append=True)
     t2 = Table.read(test_file, path='test_1/the_table_1')
@@ -188,7 +196,7 @@ def test_read_fileobj(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
 
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     t1.write(test_file, path='the_table')
 
     import h5py
@@ -203,7 +211,7 @@ def test_read_filobj_path(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
 
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     t1.write(test_file, path='path/to/data/the_table')
 
     import h5py
@@ -218,7 +226,7 @@ def test_read_filobj_group_path(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
 
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
     t1.write(test_file, path='path/to/data/the_table')
 
     import h5py
@@ -228,6 +236,20 @@ def test_read_filobj_group_path(tmpdir):
 
 
 @pytest.mark.skipif('not HAS_H5PY')
+def test_read_wrong_fileobj():
+
+    class FakeFile(object):
+        def read(self):
+            pass
+
+    f = FakeFile()
+
+    with pytest.raises(TypeError) as exc:
+        t1 = Table.read(f, format='hdf5')
+    assert exc.value.args[0] == 'h5py can only open regular files'
+
+
+ at pytest.mark.skipif('not HAS_H5PY')
 def test_write_fileobj(tmpdir):
 
     test_file = str(tmpdir.join('test.hdf5'))
@@ -235,7 +257,7 @@ def test_write_fileobj(tmpdir):
     import h5py
     with h5py.File(test_file, 'w') as output_file:
         t1 = Table()
-        t1.add_column(Column('a', [1, 2, 3]))
+        t1.add_column(Column(name='a', data=[1, 2, 3]))
         t1.write(output_file, path='the_table')
 
     t2 = Table.read(test_file, path='the_table')
@@ -250,7 +272,7 @@ def test_write_filobj_group(tmpdir):
     import h5py
     with h5py.File(test_file, 'w') as output_file:
         t1 = Table()
-        t1.add_column(Column('a', [1, 2, 3]))
+        t1.add_column(Column(name='a', data=[1, 2, 3]))
         t1.write(output_file, path='path/to/data/the_table')
 
     t2 = Table.read(test_file, path='path/to/data/the_table')
@@ -258,6 +280,17 @@ def test_write_filobj_group(tmpdir):
 
 
 @pytest.mark.skipif('not HAS_H5PY')
+def test_write_wrong_type():
+
+    t1 = Table()
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
+    with pytest.raises(TypeError) as exc:
+        t1.write(1212, path='path/to/data/the_table', format='hdf5')
+    assert exc.value.args[0] == ('output should be a string '
+                                 'or an h5py File or Group object')
+
+
+ at pytest.mark.skipif('not HAS_H5PY')
 @pytest.mark.parametrize(('dtype'), ALL_DTYPES)
 def test_preserve_single_dtypes(tmpdir, dtype):
 
@@ -266,7 +299,7 @@ def test_preserve_single_dtypes(tmpdir, dtype):
     values = _default_values(dtype)
 
     t1 = Table()
-    t1.add_column(Column('a', np.array(values, dtype=dtype)))
+    t1.add_column(Column(name='a', data=np.array(values, dtype=dtype)))
     t1.write(test_file, path='the_table')
 
     t2 = Table.read(test_file, path='the_table')
@@ -284,7 +317,7 @@ def test_preserve_all_dtypes(tmpdir):
 
     for dtype in ALL_DTYPES:
         values = _default_values(dtype)
-        t1.add_column(Column(str(dtype), np.array(values, dtype=dtype)))
+        t1.add_column(Column(name=str(dtype), data=np.array(values, dtype=dtype)))
 
     t1.write(test_file, path='the_table')
 
@@ -302,7 +335,7 @@ def test_preserve_meta(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
 
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
 
     t1.meta['a'] = 1
     t1.meta['b'] = 'hello'
@@ -324,7 +357,7 @@ def test_skip_meta(tmpdir):
     test_file = str(tmpdir.join('test.hdf5'))
 
     t1 = Table()
-    t1.add_column(Column('a', [1, 2, 3]))
+    t1.add_column(Column(name='a', data=[1, 2, 3]))
 
     t1.meta['a'] = 1
     t1.meta['b'] = 'hello'
@@ -335,4 +368,4 @@ def test_skip_meta(tmpdir):
 
     with log.log_to_list() as warning_list:
         t1.write(test_file, path='the_table')
-    assert warning_list[0].message == "Attribute `f` of type {0} cannot be written to HDF5 files - skipping".format(type(t1.meta['f']))
+    assert warning_list[0].message.startswith("Attribute `f` of type {0} cannot be written to HDF5 files - skipping".format(type(t1.meta['f'])))
diff --git a/astropy/io/registry.py b/astropy/io/registry.py
index 70fcbef..037072f 100644
--- a/astropy/io/registry.py
+++ b/astropy/io/registry.py
@@ -1,24 +1,139 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
+import re
 import sys
 
+import numpy as np
+
 from ..utils import OrderedDict
 
+
 __all__ = ['register_reader', 'register_writer', 'register_identifier',
-           'identify_format', 'get_reader', 'get_writer', 'read', 'write']
+           'identify_format', 'get_reader', 'get_writer', 'read', 'write',
+           'get_formats']
+
+
+__doctest_skip__ = ['register_identifier']
+
 
 _readers = OrderedDict()
 _writers = OrderedDict()
 _identifiers = OrderedDict()
 
 
+def get_formats(data_class=None):
+    """
+    Get the list of registered I/O formats as a Table.
+
+    Parameters
+    ----------
+    data_class : classobj
+        Filter readers/writer to match data class (default = all classes)
+
+    Returns
+    -------
+    format_table: Table
+        Table of available I/O formats
+    """
+    from ..table import Table
+    format_classes = sorted(set(_readers) | set(_writers))
+    rows = []
+
+    for format_class in format_classes:
+        if data_class is not None and format_class[1] is not data_class:
+            continue
+
+        has_read = 'Yes' if format_class in _readers else 'No'
+        has_write = 'Yes' if format_class in _writers else 'No'
+        has_identify = 'Yes' if format_class in _identifiers else 'No'
+
+        # Check if this is a short name (e.g. 'rdb') which is deprecated in favor
+        # of the full 'ascii.rdb'.
+        ascii_format_class = ('ascii.' + format_class[0], format_class[1])
+
+        # In the following, we use '   ' instead of '' because if the first
+        # format that is added is not deprecated, the data type for this
+        # element would be U0, which Numpy 1.5.x in Python 3 doesn't support,
+        # so we have to give it a non-zero length.
+        deprecated = 'Yes' if ascii_format_class in format_classes else '   '
+
+        rows.append((format_class[1].__name__, format_class[0], has_read, has_write,
+                     has_identify, deprecated))
+
+    data = zip(*rows) if rows else None
+    format_table = Table(data, names=('Data class', 'Format', 'Read', 'Write',
+                                      'Auto-identify', 'Deprecated'))
+    format_table.sort(['Data class', 'Deprecated', 'Format'])
+
+    if not np.any(format_table['Deprecated'] == 'Yes'):
+        format_table.remove_column('Deprecated')
+
+    return format_table
+
+
+def _update__doc__(data_class, readwrite):
+    """
+    Update the docstring to include all the available readers / writers for the
+    ``data_class.read`` or ``data_class.write`` functions (respectively).
+    """
+    FORMATS_TEXT = 'The available built-in formats are:'
+
+    # Get the existing read or write method and its docstring
+    class_readwrite_func = getattr(data_class, readwrite)
+    lines = class_readwrite_func.__doc__.splitlines()
+
+    # Find the location of the existing formats table if it exists
+    sep_indices = [ii for ii, line in enumerate(lines) if FORMATS_TEXT in line]
+    if sep_indices:
+        # Chop off the existing formats table, including the initial blank line.
+        chop_index = sep_indices[0]
+        lines = lines[:chop_index]
+
+    # Find the minimum indent, skipping the first line because it might be odd
+    matches = [re.search('(\S)', line) for line in lines[1:]]
+    left_indent = min(match.start() for match in matches if match)
+
+    # Get the available unified I/O formats for this class
+    format_table = get_formats(data_class)
+
+    # Include only formats that have a reader, and drop the 'Data class' column
+    has_readwrite = format_table[readwrite.capitalize()] == 'Yes'
+    format_table = format_table[has_readwrite]
+    format_table.remove_column('Data class')
+
+    # Get the available formats as a table, then munge the output of pformat() a bit and
+    # put it into the docstring.
+    new_lines = format_table.pformat(max_lines=-1)
+    table_rst_sep = re.sub('-', '=', new_lines[1])
+    new_lines[1] = table_rst_sep
+    new_lines.insert(0, table_rst_sep)
+    new_lines.append(table_rst_sep)
+
+    # Check for deprecated names and include a warning at the end.
+    if 'Deprecated' in format_table.colnames:
+        new_lines.extend(['',
+                          'Deprecated format names like ``aastex`` will be removed in a '
+                          'future version.',
+                          'Use the full name (e.g. ``ascii.aastex``) instead.'])
+
+    new_lines = [FORMATS_TEXT, ''] + new_lines
+    lines.extend([' ' * left_indent + line for line in new_lines])
+
+    # Depending on Python version and whether class_readwrite_func is
+    # an instancemethod or classmethod, one of the following will work.
+    try:
+        class_readwrite_func.__doc__ = '\n'.join(lines)
+    except AttributeError:
+        class_readwrite_func.__func__.__doc__ = '\n'.join(lines)
+
+
 def register_reader(data_format, data_class, function, force=False):
     """
     Register a reader function.
 
     Parameters
     ----------
-    data_format : string
+    data_format : str
         The data type identifier. This is the string that will be used to
         specify the data type when reading.
     data_class : classobj
@@ -36,6 +151,8 @@ def register_reader(data_format, data_class, function, force=False):
                         'already defined'.format(data_format,
                                                  data_class.__name__))
 
+    _update__doc__(data_class, 'read')
+
 
 def register_writer(data_format, data_class, function, force=False):
     """
@@ -43,7 +160,7 @@ def register_writer(data_format, data_class, function, force=False):
 
     Parameters
     ----------
-    data_format : string
+    data_format : str
         The data type identifier. This is the string that will be used to
         specify the data type when writing.
     data_class : classobj
@@ -61,6 +178,8 @@ def register_writer(data_format, data_class, function, force=False):
                         'already defined'.format(data_format,
                                                  data_class.__name__))
 
+    _update__doc__(data_class, 'write')
+
 
 def register_identifier(data_format, data_class, identifier, force=False):
     """
@@ -76,11 +195,23 @@ def register_identifier(data_format, data_class, identifier, force=False):
     identifier : function
         A function that checks the argument specified to `read` or `write` to
         determine whether the input can be interpreted as a table of type
-        `data_format`. This function should take two arguments, which will be
-        set to the list of arguments and a dictionary of keyword arguments
-        passed to `read` or `write`. The function should return True if the
-        input can be identified as being of format `data_format`, and False
-        otherwise.
+        `data_format`. This function should take the following arguments:
+
+           - `origin`: A string `read` or `write` identifying whether
+             the file is to be opened for reading or writing.
+           - `path`: The path to the file.
+           - `fileobj`: An open file object to read the file's contents, or
+             `None` if the file could not be opened.
+           - `*args`: A list of positional arguments to the `read` or
+             `write` function.
+           - `**kwargs`: A list of keyword arguments to the `read` or
+             `write` function.
+
+        One or both of `path` or `fileobj` may be `None`.  If they are
+        both `None`, the identifier will need to work from `args[0]`.
+
+        The function should return True if the input can be identified
+        as being of format `data_format`, and False otherwise.
     force : bool
         Whether to override any existing function if already present.
 
@@ -90,7 +221,7 @@ def register_identifier(data_format, data_class, identifier, force=False):
     To set the identifier based on extensions, for formats that take a
     filename as a first argument, you can do for example::
 
-        >>> def my_identifier(args, kwargs):
+        >>> def my_identifier(*args, **kwargs):
         ...     return (isinstance(args[0], basestring) and
         ...             args[0].endswith('.tbl'))
         >>> register_identifier('ipac', Table, my_identifier)
@@ -104,38 +235,48 @@ def register_identifier(data_format, data_class, identifier, force=False):
                                                  data_class.__name__))
 
 
-def identify_format(origin, data_class_required, fileobj, args, kwargs):
+def identify_format(origin, data_class_required, path, fileobj, args, kwargs):
     # Loop through identifiers to see which formats match
     valid_formats = []
     for data_format, data_class in _identifiers:
         if data_class is data_class_required:
-            # We try first with the fileobj, and failing that with the
-            # original arguments
-            if (fileobj is not None and
-                _identifiers[(data_format, data_class)](
-                    origin, [fileobj] + list(args[1:]), kwargs)):
-                valid_formats.append((data_format, [fileobj] + list(args[1:])))
-            elif _identifiers[(data_format, data_class)](
-                    origin, args, kwargs):
-                valid_formats.append((data_format, args))
+            if _identifiers[(data_format, data_class)](
+                origin, path, fileobj, *args, **kwargs):
+                valid_formats.append(data_format)
 
     return valid_formats
 
 
+def _get_format_table_str(data_class, readwrite):
+    format_table = get_formats(data_class)
+    if len(format_table) > 0:
+        has_readwrite = format_table[readwrite] == 'Yes'
+        format_table = format_table[has_readwrite]
+    format_table.remove_column('Data class')
+    format_table_str = '\n'.join(format_table.pformat(max_lines=-1))
+    return format_table_str
+
+
 def get_reader(data_format, data_class):
     if (data_format, data_class) in _readers:
         return _readers[(data_format, data_class)]
     else:
-        raise Exception('No reader defined for format {0!r} and class '
-                        '{1!r}'.format(data_format, data_class.__name__))
+        format_table_str = _get_format_table_str(data_class, 'Read')
+        raise Exception('No reader defined for format {0!r} and class {1!r}.\n'
+                        'The available formats are:\n'
+                        '{2}'
+                        .format(data_format, data_class.__name__, format_table_str))
 
 
 def get_writer(data_format, data_class):
     if (data_format, data_class) in _writers:
         return _writers[(data_format, data_class)]
     else:
-        raise Exception('No writer defined for format {0!r} and class '
-                        '{1!r}'.format(data_format, data_class.__name__))
+        format_table_str = _get_format_table_str(data_class, 'Write')
+        raise Exception('No writer defined for format {0!r} and class {1!r}.\n'
+                        'The available formats are:\n'
+                        '{2}'
+                        .format(data_format, data_class.__name__, format_table_str))
 
 
 def read(cls, *args, **kwargs):
@@ -150,25 +291,31 @@ def read(cls, *args, **kwargs):
     else:
         format = None
 
-    fileobj = None
     ctx = None
     try:
         if format is None:
-            if len(args) and isinstance(args[0], (bytes, unicode)):
-                from ..utils.data import get_readable_fileobj
-                try:
-                    ctx = get_readable_fileobj(args[0], encoding='binary')
-                    fileobj = ctx.__enter__()
-                except:
-                    ctx = None
-                    fileobj = None
-
-            format, args = _get_valid_format('read', cls, fileobj, *args,
-                                             **kwargs)
+            path = None
+            fileobj = None
+
+            if len(args):
+                if isinstance(args[0], basestring):
+                    from ..utils.data import get_readable_fileobj
+                    path = args[0]
+                    try:
+                        ctx = get_readable_fileobj(args[0], encoding='binary')
+                        fileobj = ctx.__enter__()
+                    except Exception as e:
+                        fileobj = None
+                    else:
+                        args = [fileobj] + list(args[1:])
+                elif hasattr(args[0], 'read'):
+                    path = None
+                    fileobj = args[0]
+
+            format = _get_valid_format(
+                'read', cls, path, fileobj, args, kwargs)
 
         reader = get_reader(format, cls)
-        if fileobj is not None:
-            fileobj.seek(0)
         table = reader(*args, **kwargs)
 
         if not isinstance(table, cls):
@@ -194,14 +341,24 @@ def write(data, *args, **kwargs):
         format = None
 
     if format is None:
-        format, args = _get_valid_format('write', data.__class__, None, *args,
-                                         **kwargs)
+        path = None
+        fileobj = None
+        if len(args):
+            if isinstance(args[0], basestring):
+                path = args[0]
+                fileobj = None
+            elif hasattr(args[0], 'read'):
+                path = None
+                fileobj = args[0]
+
+        format = _get_valid_format(
+            'write', data.__class__, path, fileobj, args, kwargs)
 
     writer = get_writer(format, data.__class__)
     writer(data, *args, **kwargs)
 
 
-def _get_valid_format(mode, cls, fileobj, *args, **kwargs):
+def _get_valid_format(mode, cls, path, fileobj, args, kwargs):
     """
     Returns the first valid format that can be used to read/write the data in
     question.  Mode can be either 'read' or 'write'.
@@ -212,16 +369,16 @@ def _get_valid_format(mode, cls, fileobj, *args, **kwargs):
     elif mode == 'write':
         funcs = _writers
 
-    valid_formats = identify_format(mode, cls, fileobj, args, kwargs)
+    valid_formats = identify_format(mode, cls, path, fileobj, args, kwargs)
 
     if len(valid_formats) == 0:
-        raise Exception(
-            "Format could not be identified. ",
-            "Valid formats are {0}".format(
-                ', '.join(sorted(r[0] for r in funcs))))
+        format_table_str = _get_format_table_str(cls, mode.capitalize())
+        raise Exception("Format could not be identified.\n"
+                        "The available formats are:\n"
+                        "{0}".format(format_table_str))
     elif len(valid_formats) > 1:
         raise Exception(
             "Format is ambiguous - options are: {0}".format(
-                ', '.join(sorted(x[0] for x in valid_formats))))
+                ', '.join(sorted(valid_formats))))
 
     return valid_formats[0]
diff --git a/astropy/io/tests/test_registry.py b/astropy/io/tests/test_registry.py
index d4ed442..a03ba21 100644
--- a/astropy/io/tests/test_registry.py
+++ b/astropy/io/tests/test_registry.py
@@ -32,20 +32,22 @@ def empty_writer(table, *args, **kwargs):
     pass
 
 
-def empty_identifier(args, kwargs):
+def empty_identifier(*args, **kwargs):
     return True
 
 
 def test_get_reader_invalid():
     with pytest.raises(Exception) as exc:
         io_registry.get_reader('test', TestData)
-    assert exc.value.args[0] == "No reader defined for format 'test' and class 'TestData'"
+    assert exc.value.args[0].startswith(
+        "No reader defined for format 'test' and class 'TestData'")
 
 
 def test_get_writer_invalid():
     with pytest.raises(Exception) as exc:
         io_registry.get_writer('test', TestData)
-    assert exc.value.args[0] == "No writer defined for format 'test' and class 'TestData'"
+    assert exc.value.args[0].startswith(
+        "No writer defined for format 'test' and class 'TestData'")
 
 
 def test_register_reader():
@@ -106,13 +108,13 @@ def test_register_identifier_force():
 def test_read_noformat():
     with pytest.raises(Exception) as exc:
         TestData.read()
-    assert exc.value.args[0] == "Format could not be identified. "
+    assert exc.value.args[0].startswith("Format could not be identified.")
 
 
 def test_write_noformat():
     with pytest.raises(Exception) as exc:
         TestData().write()
-    assert exc.value.args[0] == "Format could not be identified. "
+    assert exc.value.args[0].startswith("Format could not be identified.")
 
 
 def test_read_noformat_arbitrary():
@@ -120,7 +122,7 @@ def test_read_noformat_arbitrary():
     _identifiers.update(_IDENTIFIERS_ORIGINAL)
     with pytest.raises(Exception) as exc:
         TestData.read(object())
-    assert exc.value.args[0] == "Format could not be identified. "
+    assert exc.value.args[0].startswith("Format could not be identified.")
 
 
 def test_read_noformat_arbitrary_file(tmpdir):
@@ -132,8 +134,7 @@ def test_read_noformat_arbitrary_file(tmpdir):
 
     with pytest.raises(Exception) as exc:
         Table.read(testfile)
-    assert exc.value.args[0] == "Format could not be identified. "
-    assert ', '.join(sorted(r[0] for r in _readers)) in exc.value.args[1]
+    assert exc.value.args[0].startswith("Format could not be identified.")
 
 
 def test_write_noformat_arbitrary():
@@ -141,7 +142,7 @@ def test_write_noformat_arbitrary():
     _identifiers.update(_IDENTIFIERS_ORIGINAL)
     with pytest.raises(Exception) as exc:
         TestData().write(object())
-    assert exc.value.args[0] == "Format could not be identified. "
+    assert exc.value.args[0].startswith("Format could not be identified.")
 
 
 def test_write_noformat_arbitrary_file(tmpdir):
@@ -151,21 +152,20 @@ def test_write_noformat_arbitrary_file(tmpdir):
 
     with pytest.raises(Exception) as exc:
         Table().write(testfile)
-    assert exc.value.args[0] == "Format could not be identified. "
-    assert ', '.join(sorted(r[0] for r in _writers)) in exc.value.args[1]
+    assert exc.value.args[0].startswith("Format could not be identified.")
 
 
 def test_read_toomanyformats():
-    io_registry.register_identifier('test1', TestData, lambda o, x, y: True)
-    io_registry.register_identifier('test2', TestData, lambda o, x, y: True)
+    io_registry.register_identifier('test1', TestData, lambda o, *x, **y: True)
+    io_registry.register_identifier('test2', TestData, lambda o, *x, **y: True)
     with pytest.raises(Exception) as exc:
         TestData.read()
     assert exc.value.args[0] == "Format is ambiguous - options are: test1, test2"
 
 
 def test_write_toomanyformats():
-    io_registry.register_identifier('test1', TestData, lambda o, x, y: True)
-    io_registry.register_identifier('test2', TestData, lambda o, x, y: True)
+    io_registry.register_identifier('test1', TestData, lambda o, *x, **y: True)
+    io_registry.register_identifier('test2', TestData, lambda o, *x, **y: True)
     with pytest.raises(Exception) as exc:
         TestData().write()
     assert exc.value.args[0] == "Format is ambiguous - options are: test1, test2"
@@ -174,19 +174,25 @@ def test_write_toomanyformats():
 def test_read_format_noreader():
     with pytest.raises(Exception) as exc:
         TestData.read(format='test')
-    assert exc.value.args[0] == "No reader defined for format 'test' and class 'TestData'"
+    assert exc.value.args[0].startswith(
+        "No reader defined for format 'test' and class 'TestData'")
 
 
 def test_write_format_nowriter():
     with pytest.raises(Exception) as exc:
         TestData().write(format='test')
-    assert exc.value.args[0] == "No writer defined for format 'test' and class 'TestData'"
+    assert exc.value.args[0].startswith(
+        "No writer defined for format 'test' and class 'TestData'")
 
 
 def test_read_identifier():
 
-    io_registry.register_identifier('test1', TestData, lambda o, x, y: x[0].startswith('a'))
-    io_registry.register_identifier('test2', TestData, lambda o, x, y: x[0].startswith('b'))
+    io_registry.register_identifier(
+        'test1', TestData,
+        lambda o, path, fileobj, *x, **y: path.startswith('a'))
+    io_registry.register_identifier(
+        'test2', TestData,
+        lambda o, path, fileobj, *x, **y: path.startswith('b'))
 
     # Now check that we got past the identifier and are trying to get
     # the reader. The io_registry.get_reader will fail but the error message will
@@ -194,17 +200,19 @@ def test_read_identifier():
 
     with pytest.raises(Exception) as exc:
         TestData.read('abc')
-    assert exc.value.args[0] == "No reader defined for format 'test1' and class 'TestData'"
+    assert exc.value.args[0].startswith(
+        "No reader defined for format 'test1' and class 'TestData'")
 
     with pytest.raises(Exception) as exc:
         TestData.read('bac')
-    assert exc.value.args[0] == "No reader defined for format 'test2' and class 'TestData'"
+    assert exc.value.args[0].startswith(
+        "No reader defined for format 'test2' and class 'TestData'")
 
 
 def test_write_identifier():
 
-    io_registry.register_identifier('test1', TestData, lambda o, x, y: x[0].startswith('a'))
-    io_registry.register_identifier('test2', TestData, lambda o, x, y: x[0].startswith('b'))
+    io_registry.register_identifier('test1', TestData, lambda o, *x, **y: x[0].startswith('a'))
+    io_registry.register_identifier('test2', TestData, lambda o, *x, **y: x[0].startswith('b'))
 
     # Now check that we got past the identifier and are trying to get
     # the reader. The io_registry.get_writer will fail but the error message will
@@ -212,17 +220,19 @@ def test_write_identifier():
 
     with pytest.raises(Exception) as exc:
         TestData().write('abc')
-    assert exc.value.args[0] == "No writer defined for format 'test1' and class 'TestData'"
+    assert exc.value.args[0].startswith(
+        "No writer defined for format 'test1' and class 'TestData'")
 
     with pytest.raises(Exception) as exc:
         TestData().write('bac')
-    assert exc.value.args[0] == "No writer defined for format 'test2' and class 'TestData'"
+    assert exc.value.args[0].startswith(
+        "No writer defined for format 'test2' and class 'TestData'")
 
 
 def test_identifier_origin():
 
-    io_registry.register_identifier('test1', TestData, lambda o, x, y: o == 'read')
-    io_registry.register_identifier('test2', TestData, lambda o, x, y: o == 'write')
+    io_registry.register_identifier('test1', TestData, lambda o, *x, **y: o == 'read')
+    io_registry.register_identifier('test2', TestData, lambda o, *x, **y: o == 'write')
     io_registry.register_reader('test1', TestData, empty_reader)
     io_registry.register_writer('test2', TestData, empty_writer)
 
@@ -232,11 +242,13 @@ def test_identifier_origin():
 
     with pytest.raises(Exception) as exc:
         TestData.read(format='test2')
-    assert exc.value.args[0] == "No reader defined for format 'test2' and class 'TestData'"
+    assert exc.value.args[0].startswith(
+        "No reader defined for format 'test2' and class 'TestData'")
 
     with pytest.raises(Exception) as exc:
         TestData().write(format='test1')
-    assert exc.value.args[0] == "No writer defined for format 'test1' and class 'TestData'"
+    assert exc.value.args[0].startswith(
+        "No writer defined for format 'test1' and class 'TestData'")
 
 
 def test_read_valid_return():
diff --git a/astropy/io/votable/__init__.py b/astropy/io/votable/__init__.py
index 62ce861..3c9d984 100644
--- a/astropy/io/votable/__init__.py
+++ b/astropy/io/votable/__init__.py
@@ -4,6 +4,8 @@ This package reads and writes data formats used by the Virtual
 Observatory (VO) initiative, particularly the VOTable XML format.
 """
 
+from __future__ import absolute_import, division, print_function, unicode_literals
+
 from .table import (
     parse, parse_single_table, validate, from_table, is_votable, writeto)
 from .exceptions import (
diff --git a/astropy/io/votable/connect.py b/astropy/io/votable/connect.py
index b85beb7..411ca78 100644
--- a/astropy/io/votable/connect.py
+++ b/astropy/io/votable/connect.py
@@ -1,17 +1,18 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
-from __future__ import print_function
+from __future__ import absolute_import, division, print_function, unicode_literals
 
 import os
 
+from ...extern import six
+
 from . import parse, from_table
 from .tree import VOTableFile, Table as VOTable
-from ...utils import OrderedDict
 from .. import registry as io_registry
 from ...table import Table
 
 
-def is_votable(origin, args, kwargs):
+def is_votable(origin, filepath, fileobj, *args, **kwargs):
     """
     Reads the header of a file to determine if it is a VOTable file.
 
@@ -27,8 +28,14 @@ def is_votable(origin, args, kwargs):
     """
     from . import is_votable
     if origin == 'read':
-        if isinstance(args[0], basestring) or hasattr(args[0], 'read'):
-            return is_votable(args[0])
+        if fileobj is not None:
+            try:
+                result = is_votable(fileobj)
+            finally:
+                fileobj.seek(0)
+            return result
+        elif filepath is not None:
+            return is_votable(filepath)
         elif isinstance(args[0], (VOTableFile, VOTable)):
             return True
         else:
@@ -37,7 +44,7 @@ def is_votable(origin, args, kwargs):
         return False
 
 
-def read_table_votable(input, table_id=None):
+def read_table_votable(input, table_id=None, use_names_over_ids=False):
     """
     Read a Table object from an VO table file
 
@@ -55,6 +62,12 @@ def read_table_votable(input, table_id=None):
         assign IDs to their tables).  If an `int`, it is the index of
         the table in the file, starting at 0.
 
+    use_names_over_ids : bool, optional
+        When `True` use the `name` attributes of columns as the names
+        of columns in the `astropy.table.Table` instance.  Since names
+        are not guaranteed to be unique, this may cause some columns
+        to be renamed by appending numbers to the end.  Otherwise
+        (default), use the ID attributes as the column names.
     """
     if not isinstance(input, (VOTableFile, VOTable)):
         input = parse(input, table_id=table_id)
@@ -72,15 +85,16 @@ def read_table_votable(input, table_id=None):
             if table_id is None:
                 raise ValueError(
                     "Multiple tables found: table id should be set via "
-                    "the table_id= argument. The available tables are " +
-                    ', '.join(tables.keys()))
-            elif isinstance(table_id, basestring):
+                    "the table_id= argument. The available tables are {0}, "
+                    'or integers less than {1}.'.format(
+                        ', '.join(table_id_mapping.keys()), len(tables)))
+            elif isinstance(table_id, six.string_types):
                 if table_id in table_id_mapping:
                     table = table_id_mapping[table_id]
                 else:
                     raise ValueError(
                         "No tables with id={0} found".format(table_id))
-            elif isinstance(table_id, (int, long)):
+            elif isinstance(table_id, six.integer_types):
                 if table_id < len(tables):
                     table = tables[table_id]
                 else:
@@ -96,7 +110,7 @@ def read_table_votable(input, table_id=None):
         table = input
 
     # Convert to an astropy.table.Table object
-    return table.to_table()
+    return table.to_table(use_names_over_ids=use_names_over_ids)
 
 
 def write_table_votable(input, output, table_id=None, overwrite=False):
@@ -117,7 +131,7 @@ def write_table_votable(input, output, table_id=None, overwrite=False):
     """
 
     # Check if output file already exists
-    if isinstance(output, basestring) and os.path.exists(output):
+    if isinstance(output, six.string_types) and os.path.exists(output):
         if overwrite:
             os.remove(output)
         else:
diff --git a/astropy/io/votable/converters.py b/astropy/io/votable/converters.py
index 2f10339..67e3b01 100644
--- a/astropy/io/votable/converters.py
+++ b/astropy/io/votable/converters.py
@@ -4,13 +4,15 @@ This module handles the conversion of various VOTABLE datatypes
 to/from TABLEDATA_ and BINARY_ formats.
 """
 
-from __future__ import division, absolute_import
+from __future__ import absolute_import, division, print_function, unicode_literals
+from ...extern import six
+from ...extern.six.moves import xrange
 
 # STDLIB
 import re
 import sys
-from struct import unpack as struct_unpack
-from struct import pack as struct_pack
+from struct import unpack as _struct_unpack
+from struct import pack as _struct_pack
 
 # THIRD-PARTY
 import numpy as np
@@ -22,7 +24,6 @@ from ...utils.xml.writer import xml_escape_cdata
 # LOCAL
 from .exceptions import (vo_raise, vo_warn, warn_or_raise, W01,
     W30, W31, W39, W46, W47, W49, W51, E01, E02, E03, E04, E05, E06)
-from .util import IS_PY3K
 
 
 __all__ = ['get_converter', 'Converter', 'table_column_to_votable_datatype']
@@ -42,6 +43,17 @@ _empty_bytes = b''
 _zero_byte = b'\0'
 
 
+if six.PY3:
+    struct_unpack = _struct_unpack
+    struct_pack = _struct_pack
+else:
+    def struct_unpack(format, s):
+        return _struct_unpack(format.encode('ascii'), s)
+
+    def struct_pack(format, *args):
+        return _struct_pack(format.encode('ascii'), *args)
+
+
 if sys.byteorder == 'little':
     def _ensure_bigendian(x):
         if x.dtype.byteorder != '>':
@@ -70,6 +82,75 @@ def _make_masked_array(data, mask):
         return ma.array(np.array(data))
 
 
+def bitarray_to_bool(data, length):
+    """
+    Converts a bit array (a string of bits in a bytes object) to a
+    boolean Numpy array.
+
+    Parameters
+    ----------
+    data : bytes
+        The bit array.  The most significant byte is read first.
+
+    length : int
+        The number of bits to read.  The least significant bits in the
+        data bytes beyond length will be ignored.
+
+    Returns
+    -------
+    array : numpy bool array
+    """
+    results = []
+    for byte in data:
+        if not six.PY3:
+            byte = ord(byte)
+        for bit_no in range(7, -1, -1):
+            bit = byte & (1 << bit_no)
+            bit = (bit != 0)
+            results.append(bit)
+            if len(results) == length:
+                break
+        if len(results) == length:
+            break
+
+    return np.array(results, dtype='b1')
+
+
+def bool_to_bitarray(value):
+    """
+    Converts a numpy boolean array to a bit array (a string of bits in
+    a bytes object).
+
+    Parameters
+    ----------
+    value : numpy bool array
+
+    Returns
+    -------
+    bit_array : bytes
+        The first value in the input array will be the most
+        significant bit in the result.  The length will be `floor((N +
+        7) / 8)` where `N` is the length of `value`.
+    """
+    value = value.flat
+    bit_no = 7
+    byte = 0
+    bytes = []
+    for v in value:
+        if v:
+            byte |= 1 << bit_no
+        if bit_no == 0:
+            bytes.append(byte)
+            bit_no = 7
+            byte = 0
+        else:
+            bit_no -= 1
+    if bit_no != 7:
+        bytes.append(byte)
+
+    return struct_pack("%sB" % len(bytes), *bytes)
+
+
 class Converter(object):
     """
     The base class for all converters.  Each subclass handles
@@ -257,7 +338,7 @@ class Char(Converter):
 
     def output(self, value, mask):
         if mask:
-            return u''
+            return ''
         if not isinstance(value, str):
             value = value.decode('ascii')
         return xml_escape_cdata(value)
@@ -274,7 +355,7 @@ class Char(Converter):
         return s, False
 
     def _binoutput_var(self, value, mask):
-        if mask or value is None or value == u'':
+        if mask or value is None or value == '':
             return _zero_int
         return self._write_length(len(value)) + value
 
@@ -290,7 +371,7 @@ class UnicodeChar(Converter):
 
     Missing values are not handled for string or unicode types.
     """
-    default = u''
+    default = ''
 
     def __init__(self, field, config={}, pos=None):
         Converter.__init__(self, field, config, pos)
@@ -321,8 +402,8 @@ class UnicodeChar(Converter):
 
     def output(self, value, mask):
         if mask:
-            return u''
-        return xml_escape_cdata(unicode(value))
+            return ''
+        return xml_escape_cdata(six.text_type(value))
 
     def _binparse_var(self, read):
         length = self._parse_length(read)
@@ -344,7 +425,7 @@ class UnicodeChar(Converter):
 
     def _binoutput_fixed(self, value, mask):
         if mask:
-            value = u''
+            value = ''
         return struct_pack(self._struct_format, value.encode('utf_16_be'))
 
 
@@ -389,7 +470,7 @@ class VarArray(Array):
     def output(self, value, mask):
         output = self._base.output
         result = [output(x, m) for x, m in np.broadcast(value, value.mask)]
-        return u' '.join(result)
+        return ' '.join(result)
 
     def binparse(self, read):
         length = self._parse_length(read)
@@ -485,6 +566,8 @@ class NumericArray(Array):
         self.default[...] = self._base.default
 
     def parse(self, value, config={}, pos=None):
+        if config['version_1_3_or_later'] and value == '':
+            return np.zeros(self._arraysize, dtype=self._base.format), True
         parts = self._splitter(value, config, pos)
         if len(parts) != self._items:
             warn_or_raise(E02, E02, (self._items, len(parts)), config, pos)
@@ -518,7 +601,7 @@ class NumericArray(Array):
         base_output = self._base.output
         value = np.asarray(value)
         mask = np.asarray(mask)
-        return u' '.join(base_output(x, m) for x, m in
+        return ' '.join(base_output(x, m) for x, m in
                          zip(value.flat, mask.flat))
 
     def binparse(self, read):
@@ -573,26 +656,26 @@ class FloatingPoint(Numeric):
 
         precision = field.precision
         width = field.width
-        format_parts = [u'%']
+        format_parts = ['%']
 
         if width is not None:
-            format_parts.append(unicode(width))
+            format_parts.append(six.text_type(width))
 
         if precision is None:
-            format_parts.append(u's')
+            format_parts.append('s')
         elif precision.startswith("E"):
-            format_parts.append(u'.%dg' % int(precision[1:]))
+            format_parts.append('.%dg' % int(precision[1:]))
         elif precision.startswith("F"):
-            format_parts.append(u'.%df' % int(precision[1:]))
+            format_parts.append('.%df' % int(precision[1:]))
         else:
-            format_parts.append(u'.%df' % int(precision))
+            format_parts.append('.%df' % int(precision))
 
-        self._output_format = u''.join(format_parts)
+        self._output_format = ''.join(format_parts)
 
         self.nan = np.array(np.nan, self.format)
 
         if self.null is None:
-            self._null_output = u'NaN'
+            self._null_output = 'NaN'
             self._null_binoutput = self.binoutput(self.nan, False)
             self.filter_array = self._filter_nan
         else:
@@ -631,16 +714,16 @@ class FloatingPoint(Numeric):
             return self._null_output
         if np.isfinite(value):
             result = self._output_format % value
-            if (self._output_format[-1] == u's' and
-                result.endswith(u'.0')):
+            if (self._output_format[-1] == 's' and
+                result.endswith('.0')):
                 result = result[:-2]
             return result
         elif np.isnan(value):
-            return u'NaN'
+            return 'NaN'
         elif np.isposinf(value):
-            return u'+InF'
+            return '+InF'
         elif np.isneginf(value):
-            return u'-InF'
+            return '-InF'
         # Should never raise
         vo_raise("Invalid floating point value '%s'" % value)
 
@@ -684,10 +767,13 @@ class Integer(Numeric):
 
     def parse(self, value, config={}, pos=None):
         mask = False
-        if isinstance(value, basestring):
+        if isinstance(value, six.string_types):
             value = value.lower()
             if value == '':
-                warn_or_raise(W49, W49, (), config, pos)
+                if config['version_1_3_or_later']:
+                    mask = True
+                else:
+                    warn_or_raise(W49, W49, (), config, pos)
                 if self.null is not None:
                     value = self.null
                 else:
@@ -721,9 +807,9 @@ class Integer(Numeric):
         if mask:
             if self.null is None:
                 warn_or_raise(W31, W31)
-                return u'NaN'
-            return unicode(self.null)
-        return unicode(value)
+                return 'NaN'
+            return six.text_type(self.null)
+        return six.text_type(value)
 
     def binoutput(self, value, mask):
         if mask:
@@ -789,7 +875,7 @@ class ComplexArrayVarArray(VarArray):
 
     def parse(self, value, config={}, pos=None):
         if value.strip() == '':
-            return ma.array([]), False
+            return ma.array([]), True
 
         parts = self._splitter(value, config, pos)
         items = self._base._items
@@ -815,7 +901,7 @@ class ComplexVarArray(VarArray):
 
     def parse(self, value, config={}, pos=None):
         if value.strip() == '':
-            return ma.array([]), False
+            return ma.array([]), True
 
         parts = self._splitter(value, config, pos)
         parse_parts = self._base.parse_parts
@@ -895,17 +981,17 @@ class Complex(FloatingPoint, Array):
     def output(self, value, mask):
         if mask:
             if self.null is None:
-                return u'NaN'
+                return 'NaN'
             else:
                 value = self.null
         real = self._output_format % value.real
         imag = self._output_format % value.imag
-        if self._output_format[-1] == u's':
-            if real.endswith(u'.0'):
+        if self._output_format[-1] == 's':
+            if real.endswith('.0'):
                 real = real[:-2]
-            if imag.endswith(u'.0'):
+            if imag.endswith('.0'):
                 imag = imag[:-2]
-        return real + u' ' + imag
+        return real + ' ' + imag
 
 
 class FloatComplex(Complex):
@@ -947,25 +1033,13 @@ class BitArray(NumericArray):
 
     def output(self, value, mask):
         value = np.asarray(value)
-        mapping = {False: u'0', True: u'1'}
-        return u''.join(mapping[x] for x in value.flat)
+        mapping = {False: '0', True: '1'}
+        return ''.join(mapping[x] for x in value.flat)
 
     def binparse(self, read):
         data = read(self._bytes)
-        results = []
-        for byte in data:
-            if not IS_PY3K:
-                byte = ord(byte)
-            for bit_no in range(7, -1, -1):
-                bit = byte & (1 << bit_no)
-                bit = (bit != 0)
-                results.append(bit)
-                if len(results) == self._items:
-                    break
-            if len(results) == self._items:
-                break
-
-        result = np.array(results, dtype='b1').reshape(self._arraysize)
+        result = bitarray_to_bool(data, self._items)
+        result = result.reshape(self._arraysize)
         result_mask = np.zeros(self._arraysize, dtype='b1')
         return result, result_mask
 
@@ -973,25 +1047,7 @@ class BitArray(NumericArray):
         if np.any(mask):
             vo_warn(W39)
 
-        value = value.flat
-        bit_no = 7
-        byte = 0
-        bytes = []
-        for v in value:
-            if v:
-                byte |= 1 << bit_no
-            if bit_no == 0:
-                bytes.append(byte)
-                bit_no = 7
-                byte = 0
-            else:
-                bit_no -= 1
-        if bit_no != 7:
-            bytes.append(byte)
-
-        assert len(bytes) == self._bytes
-
-        return struct_pack("%sB" % len(bytes), *bytes)
+        return bool_to_bitarray(value)
 
 
 class Bit(Converter):
@@ -1011,7 +1067,8 @@ class Bit(Converter):
     def parse(self, value, config={}, pos=None):
         mapping = {'1': True, '0': False}
         if value is False or value.strip() == '':
-            warn_or_raise(W49, W49, (), config, pos)
+            if not config['version_1_3_or_later']:
+                warn_or_raise(W49, W49, (), config, pos)
             return False, True
         else:
             try:
@@ -1024,9 +1081,9 @@ class Bit(Converter):
             vo_warn(W39)
 
         if value:
-            return u'1'
+            return '1'
         else:
-            return u'0'
+            return '0'
 
     def binparse(self, read):
         data = read(1)
@@ -1056,7 +1113,7 @@ class BooleanArray(NumericArray):
         result = []
         result_mask = []
         for char in data:
-            if not IS_PY3K:
+            if not six.PY3:
                 char = ord(char)
             value, mask = binparse(char)
             result.append(value)
@@ -1092,6 +1149,8 @@ class Boolean(Converter):
         Converter.__init__(self, field, config, pos)
 
     def parse(self, value, config={}, pos=None):
+        if value == '':
+            return False, True
         if value is False:
             return False, True
         mapping = {'TRUE'  : (True, False),
@@ -1111,10 +1170,10 @@ class Boolean(Converter):
 
     def output(self, value, mask):
         if mask:
-            return u'?'
+            return '?'
         if value:
-            return u'T'
-        return u'F'
+            return 'T'
+        return 'F'
 
     def binparse(self, read):
         value = ord(read(1))
@@ -1232,11 +1291,7 @@ numpy_dtype_to_field_mapping = {
 }
 
 
-# numpy 1.4.1 doesn't have a "bytes_" type
-if hasattr(np, 'bytes_'):
-    numpy_dtype_to_field_mapping[np.bytes_().dtype.num] = 'char'
-else:
-    numpy_dtype_to_field_mapping[np.str_().dtype.num] = 'char'
+numpy_dtype_to_field_mapping[np.bytes_().dtype.num] = 'char'
 
 
 def _all_bytes(column):
@@ -1248,7 +1303,7 @@ def _all_bytes(column):
 
 def _all_unicode(column):
     for x in column:
-        if not isinstance(x, unicode):
+        if not isinstance(x, six.text_type):
             return False
     return True
 
@@ -1345,7 +1400,7 @@ def table_column_to_votable_datatype(column):
         if isinstance(column[0], bytes):
             if _all_bytes(column[1:]):
                 return {'datatype': 'char', 'arraysize': '*'}
-        elif isinstance(column[0], unicode):
+        elif isinstance(column[0], six.text_type):
             if _all_unicode(column[1:]):
                 return {'datatype': 'unicodeChar', 'arraysize': '*'}
         elif isinstance(column[0], np.ndarray):
diff --git a/astropy/io/votable/data/VOTable.v1.3.xsd b/astropy/io/votable/data/VOTable.v1.3.xsd
new file mode 100644
index 0000000..052e348
--- /dev/null
+++ b/astropy/io/votable/data/VOTable.v1.3.xsd
@@ -0,0 +1,572 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--W3C Schema for VOTable  = Virtual Observatory Tabular Format
+.Version 1.0 : 15-Apr-2002
+.Version 1.09: 23-Jan-2004 Version 1.09
+.Version 1.09: 30-Jan-2004 Version 1.091
+.Version 1.09: 22-Mar-2004 Version 1.092
+.Version 1.094: 02-Jun-2004 GROUP does not contain FIELD
+.Version 1.1 :  10-Jun-2004 remove the complexContent
+.Version 1.11: GL: 23-May-2006 remove most root elements, use name= type= iso ref= structure
+.Version 1.11: GL: 29-Aug-2006 review and added comments (prefixed by GL)
+              before sending to Francois Ochsenbein
+.Version 1.12: FO: Preliminary Version 1.2
+.Version 1.18: FO: Tested (jax) version 1.2
+.Version 1.19: FO: Completed INFO attributes
+.Version 1.20: FO: Added xtype; content-role is less restrictive (May2009)
+.Version 1.20a: FO: PR-20090710 Cosmetics.
+.Version 1.20b: FO: INFO does not accept sub-elements (2009-09-29)
+.Version 1.20c: FO: elementFormDefault="qualified" to stay compatible with 1.1
+.Version 1.3: MT: Added BINARY2 element
+.Version 1.3: MT: Further relaxed LINK content-role type to token
+-->
+<xs:schema
+   xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
+   xmlns="http://www.ivoa.net/xml/VOTable/v1.3"
+   targetNamespace="http://www.ivoa.net/xml/VOTable/v1.3"
+>
+<xs:annotation><xs:documentation>
+    VOTable is meant to serialize tabular documents in the
+    context of Virtual Observatory applications. This schema
+    corresponds to the VOTable document available from
+    http://www.ivoa.net/Documents/latest/VOT.html
+</xs:documentation></xs:annotation>
+
+<!-- Here we define some interesting new datatypes:
+     - anyTEXT   may have embedded XHTML (conforming HTML)
+     - astroYear is an epoch in Besselian or Julian year, e.g. J2000
+     - arrayDEF  specifies an array size e.g. 12x23x*
+     - dataType  defines the acceptable datatypes
+     - ucdType   defines the acceptable UCDs (UCD1+)
+     - precType  defines the acceptable precisions
+     - yesno     defines just the 2 alternatives
+-->
+
+<xs:complexType name="anyTEXT" mixed="true">
+  <xs:sequence>
+    <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
+  </xs:sequence>
+</xs:complexType>
+
+<xs:simpleType  name="astroYear">
+  <xs:restriction base="xs:token">
+    <xs:pattern  value="[JB]?[0-9]+([.][0-9]*)?"/>
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType  name="ucdType">
+  <xs:restriction base="xs:token">
+    <xs:annotation><xs:documentation>
+      Accept UCD1+
+      Accept also old UCD1 (but not / + %) including SIAP convention (with :)
+    </xs:documentation></xs:annotation>
+    <xs:pattern  value="[A-Za-z0-9_.:;\-]*"/><!-- UCD1 use also / + % -->
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType  name="arrayDEF">
+  <xs:restriction base="xs:token">
+    <xs:pattern  value="([0-9]+x)*[0-9]*[*]?(s\W)?"/>
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType  name="encodingType">
+  <xs:restriction base="xs:NMTOKEN">
+    <xs:enumeration value="gzip"/>
+    <xs:enumeration value="base64"/>
+    <xs:enumeration value="dynamic"/>
+    <xs:enumeration value="none"/>
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="dataType">
+  <xs:restriction base="xs:NMTOKEN">
+    <xs:enumeration value="boolean"/>
+    <xs:enumeration value="bit"/>
+    <xs:enumeration value="unsignedByte"/>
+    <xs:enumeration value="short"/>
+    <xs:enumeration value="int"/>
+    <xs:enumeration value="long"/>
+    <xs:enumeration value="char"/>
+    <xs:enumeration value="unicodeChar"/>
+    <xs:enumeration value="float"/>
+    <xs:enumeration value="double"/>
+    <xs:enumeration value="floatComplex"/>
+    <xs:enumeration value="doubleComplex"/>
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="precType">
+  <xs:restriction base="xs:token">
+    <xs:pattern value="[EF]?[1-9][0-9]*"/>
+  </xs:restriction>
+</xs:simpleType>
+
+<xs:simpleType name="yesno">
+  <xs:restriction base="xs:NMTOKEN">
+    <xs:enumeration value="yes"/>
+    <xs:enumeration value="no"/>
+  </xs:restriction>
+</xs:simpleType>
+
+  <xs:complexType name="Min">
+    <xs:attribute name="value" type="xs:string" use="required"/>
+    <xs:attribute name="inclusive" type="yesno" default="yes"/>
+  </xs:complexType>
+  <xs:complexType name="Max">
+    <xs:attribute name="value" type="xs:string" use="required"/>
+    <xs:attribute name="inclusive" type="yesno" default="yes"/>
+  </xs:complexType>
+  <xs:complexType name="Option">
+    <xs:sequence>
+      <xs:element name="OPTION" type="Option" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute name="name" type="xs:token"/>
+    <xs:attribute name="value" type="xs:string" use="required"/>
+  </xs:complexType>
+
+  <!-- VALUES expresses the values that can be taken by the data
+    in a column or by a parameter
+  -->
+  <xs:complexType name="Values">
+    <xs:sequence>
+      <xs:element name="MIN" type="Min" minOccurs="0"/>
+      <xs:element name="MAX" type="Max" minOccurs="0"/>
+      <xs:element name="OPTION" type="Option" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute name="ID" type="xs:ID"/>
+    <xs:attribute name="type" default="legal">
+      <xs:simpleType>
+        <xs:restriction base="xs:NMTOKEN">
+          <xs:enumeration value="legal"/>
+          <xs:enumeration value="actual"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:attribute>
+    <xs:attribute name="null" type="xs:token"/>
+    <xs:attribute name="ref"  type="xs:IDREF"/>
+    <!-- xs:attribute name="invalid" type="yesno" default="no"/ -->
+  </xs:complexType>
+
+  <!-- The LINK is a URL (href) or some other kind of reference (gref) -->
+  <xs:complexType name="Link">
+    <xs:annotation><xs:documentation>
+    content-role was previsouly restricted as: <![CDATA[
+    <xs:attribute name="content-role">
+      <xs:simpleType>
+        <xs:restriction base="xs:NMTOKEN">
+          <xs:enumeration value="query"/>
+          <xs:enumeration value="hints"/>
+          <xs:enumeration value="doc"/>
+          <xs:enumeration value="location"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:attribute>]]>; is now a token.
+    </xs:documentation></xs:annotation>
+    <xs:attribute name="ID" type="xs:ID"/>
+    <xs:attribute name="content-role" type="xs:token"/>
+    <xs:attribute name="content-type" type="xs:token"/>
+    <xs:attribute name="title" type="xs:string"/>
+    <xs:attribute name="value" type="xs:string"/>
+    <xs:attribute name="href" type="xs:anyURI"/>
+    <xs:attribute name="gref" type="xs:token"/><!-- Deprecated in V1.1 -->
+    <xs:attribute name="action" type="xs:anyURI"/>
+  </xs:complexType>
+
+<!-- INFO is defined in Version 1.2 as a PARAM of String type
+<xs:complexType name="Info">
+  <xs:complexContent>
+    <xs:restriction base="Param">
+      <xs:attribute name="unit" fixed=""/>
+      <xs:attribute name="datatype" fixed="char"/>
+      <xs:attribute name="arraysize" fixed="*"/>
+    </xs:restriction>
+  </xs:complexContent>
+</xs:complexType>
+ -or- as a full definition:
+<xs:complexType name="Info">
+  <xs:sequence>
+  <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+    <xs:element name="VALUES" type="Values" minOccurs="0"/>
+    <xs:element name="LINK" type="Link" minOccurs="0" maxOccurs="unbounded"/>
+  </xs:sequence>
+  <xs:attribute name="name" type="xs:token" use="required"/>
+  <xs:attribute name="value" type="xs:string" use="required"/>
+  <xs:attribute name="ID" type="xs:ID"/>
+  <xs:attribute name="unit" type="xs:token"/>
+  <xs:attribute name="xtype" type="xs:token"/>
+  <xs:attribute name="ref" type="xs:IDREF"/>
+  <xs:attribute name="ucd" type="ucdType"/>
+  <xs:attribute name="utype" type="xs:string"/>
+</xs:complexType>
+-->
+<!-- No sub-element is accepted in INFO for backward compatibility -->
+<xs:complexType name="Info">
+  <xs:simpleContent>
+    <xs:extension base="xs:string">
+      <xs:attribute name="ID" type="xs:ID"/>
+      <xs:attribute name="name"  type="xs:token" use="required"/>
+      <xs:attribute name="value" type="xs:string" use="required"/>
+      <xs:attribute name="unit"  type="xs:token"/>
+      <xs:attribute name="xtype" type="xs:token"/>
+      <xs:attribute name="ref"   type="xs:IDREF"/>
+      <xs:attribute name="ucd"   type="ucdType"/>
+      <xs:attribute name="utype" type="xs:string"/>
+    </xs:extension>
+  </xs:simpleContent>
+</xs:complexType>
+
+<!-- Expresses the coordinate system we are using --><!-- Deprecated V1.2 -->
+<xs:complexType name="CoordinateSystem">
+  <xs:annotation><xs:documentation>
+    Deprecated in Version 1.2
+  </xs:documentation></xs:annotation>
+  <xs:simpleContent>
+    <xs:extension base="xs:string">
+      <xs:attribute name="ID" type="xs:ID" use="required"/>
+      <xs:attribute name="equinox" type="astroYear"/>
+      <xs:attribute name="epoch" type="astroYear"/>
+      <xs:attribute name="system" default="eq_FK5">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="eq_FK4"/>
+            <xs:enumeration value="eq_FK5"/>
+            <xs:enumeration value="ICRS"/>
+            <xs:enumeration value="ecl_FK4"/>
+            <xs:enumeration value="ecl_FK5"/>
+            <xs:enumeration value="galactic"/>
+            <xs:enumeration value="supergalactic"/>
+            <xs:enumeration value="xy"/>
+            <xs:enumeration value="barycentric"/>
+            <xs:enumeration value="geo_app"/>
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+    </xs:extension>
+  </xs:simpleContent>
+</xs:complexType>
+
+<xs:complexType name="Definitions">
+  <xs:annotation><xs:documentation>
+    Deprecated in Version 1.1
+  </xs:documentation></xs:annotation>
+  <xs:choice minOccurs="0" maxOccurs="unbounded">
+    <xs:element name="COOSYS" type="CoordinateSystem"/><!-- Deprecated in V1.2 -->
+    <xs:element name="PARAM" type="Param"/>
+  </xs:choice>
+</xs:complexType>
+
+<!-- FIELD is the definition of what is in a column of the table -->
+<xs:complexType name="Field">
+  <xs:sequence> <!-- minOccurs="0" maxOccurs="unbounded" -->
+    <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+    <xs:element name="VALUES" type="Values" minOccurs="0"/> <!-- maxOccurs="2" -->
+    <xs:element name="LINK" type="Link" minOccurs="0" maxOccurs="unbounded"/>
+  </xs:sequence>
+  <xs:attribute name="ID" type="xs:ID"/>
+  <xs:attribute name="unit" type="xs:token"/>
+  <xs:attribute name="datatype" type="dataType" use="required"/>
+  <xs:attribute name="precision" type="precType"/>
+  <xs:attribute name="width" type="xs:positiveInteger"/>
+  <xs:attribute name="xtype" type="xs:token"/>
+  <xs:attribute name="ref" type="xs:IDREF"/>
+  <xs:attribute name="name" type="xs:token" use="required"/>
+  <xs:attribute name="ucd" type="ucdType"/>
+  <xs:attribute name="utype" type="xs:string"/>
+  <xs:attribute name="arraysize" type="xs:string"/>
+    <!-- GL: is the next deprecated element remaining
+        (is not in PARAM, but will in new model be inherited)
+    -->
+  <xs:attribute name="type">
+    <!-- type is not in the Version 1.1, but is kept for
+         backward compatibility purposes
+    -->
+    <xs:simpleType>
+      <xs:restriction base="xs:NMTOKEN">
+        <xs:enumeration value="hidden"/>
+        <xs:enumeration value="no_query"/>
+        <xs:enumeration value="trigger"/>
+        <xs:enumeration value="location"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:attribute>
+</xs:complexType>
+
+
+<!-- A PARAM is similar to a FIELD, but it also has a "value" attribute -->
+<!--  GL: implemented here as a subtype as suggested we do in Kyoto. -->
+<xs:complexType name="Param">
+  <xs:complexContent>
+    <xs:extension base="Field">
+      <xs:attribute name="value" type="xs:string" use="required"/>
+    </xs:extension>
+  </xs:complexContent>
+</xs:complexType>
+
+
+<!-- GROUP groups columns; may include descriptions, fields/params/groups -->
+<xs:complexType name="Group">
+  <xs:sequence>
+    <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+<!--  GL I guess I can understand the next choice element as one may (?)
+      really want to group fields and params and groups in a particular order.
+-->
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
+      <xs:element name="FIELDref" type="FieldRef"/>
+      <xs:element name="PARAMref" type="ParamRef"/>
+      <xs:element name="PARAM" type="Param"/>
+      <xs:element name="GROUP" type="Group"/>
+      <!-- GL a GroupRef could remove recursion -->
+    </xs:choice>
+  </xs:sequence>
+  <xs:attribute name="ID"   type="xs:ID"/>
+  <xs:attribute name="name" type="xs:token"/>
+  <xs:attribute name="ref"  type="xs:IDREF"/>
+  <xs:attribute name="ucd"  type="ucdType"/>
+  <xs:attribute name="utype" type="xs:string"/>
+</xs:complexType>
+
+<!-- FIELDref and PARAMref are references to FIELD or PARAM defined
+     in the parent TABLE or RESOURCE -->
+<!-- GL This can not be enforced in XML Schema, so why not IDREF in <Group> ?
+     In particular if the UCD and utype attributes will NOT be added -->
+<xs:complexType name="FieldRef">
+  <xs:attribute name="ref" type="xs:IDREF" use="required"/>
+  <xs:attribute name="ucd"  type="ucdType"/>
+  <xs:attribute name="utype" type="xs:string"/>
+</xs:complexType>
+
+<xs:complexType name="ParamRef">
+  <xs:attribute name="ref" type="xs:IDREF" use="required"/>
+  <xs:attribute name="ucd"  type="ucdType"/>
+  <xs:attribute name="utype" type="xs:string"/>
+</xs:complexType>
+
+<!-- DATA is the actual table data, in one of three formats -->
+<!--
+  GL in Kyoto we discussed the option of having the specific Data items
+  be subtypes of Data:
+-->
+<!--
+<xs:complexType name="Data" abstract="true"/>
+
+<xs:complexType name="TableData">
+  <xs:complexContent>
+    <xs:extension base="Data">
+     ... etc
+    </xs:extension>
+  </xs:complexContent>
+</xs:complexType>
+ -->
+<xs:complexType name="Data">
+  <xs:annotation><xs:documentation>
+    Added in Version 1.2: INFO for diagnostics
+  </xs:documentation></xs:annotation>
+  <xs:sequence>
+    <xs:choice>
+      <xs:element name="TABLEDATA" type="TableData"/>
+      <xs:element name="BINARY" type="Binary"/>
+      <xs:element name="BINARY2" type="Binary2"/>
+      <xs:element name="FITS" type="FITS"/>
+    </xs:choice>
+    <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+  </xs:sequence>
+</xs:complexType>
+
+<!-- Pure XML data -->
+<xs:complexType name="TableData">
+  <xs:sequence>
+    <xs:element name="TR" type="Tr" minOccurs="0" maxOccurs="unbounded"/>
+  </xs:sequence>
+</xs:complexType>
+
+<xs:complexType name="Td">
+  <xs:simpleContent>
+    <xs:extension base="xs:string">
+      <!-- xs:attribute name="ref" type="xs:IDREF"/ -->
+      <xs:annotation><xs:documentation>
+          The 'encoding' attribute is added here to avoid
+          problems of code generators which do not properly
+          interpret the TR/TD structures.
+          'encoding' was chosen because it appears in
+          appendix A.5
+      </xs:documentation></xs:annotation>
+      <xs:attribute name="encoding" type="encodingType"/>
+    </xs:extension>
+  </xs:simpleContent>
+</xs:complexType>
+
+<xs:complexType name="Tr">
+  <xs:annotation><xs:documentation>
+    The ID attribute is added here to the TR tag to avoid
+    problems of code generators which do not properly
+    interpret the TR/TD structures
+  </xs:documentation></xs:annotation>
+  <xs:sequence>
+    <xs:element name="TD" type="Td" maxOccurs="unbounded"/>
+  </xs:sequence>
+  <xs:attribute name="ID" type="xs:ID"/>
+</xs:complexType>
+
+<!-- FITS file, perhaps with specification of which extension to seek to -->
+<xs:complexType name="FITS">
+  <xs:sequence>
+    <xs:element name="STREAM" type="Stream"/>
+  </xs:sequence>
+  <xs:attribute name="extnum" type="xs:positiveInteger"/>
+</xs:complexType>
+
+<!-- BINARY data format -->
+<xs:complexType name="Binary">
+  <xs:sequence>
+    <xs:element name="STREAM" type="Stream"/>
+  </xs:sequence>
+</xs:complexType>
+
+<!-- BINARY2 data format -->
+<xs:complexType name="Binary2">
+  <xs:sequence>
+    <xs:element name="STREAM" type="Stream"/>
+  </xs:sequence>
+</xs:complexType>
+
+<!-- STREAM can be local or remote, encoded or not -->
+<xs:complexType name="Stream">
+  <xs:simpleContent>
+    <xs:extension base="xs:string">
+      <xs:attribute name="type" default="locator">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="locator"/>
+            <xs:enumeration value="other"/>
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="href" type="xs:anyURI"/>
+      <xs:attribute name="actuate" default="onRequest">
+        <xs:simpleType>
+          <xs:restriction base="xs:NMTOKEN">
+            <xs:enumeration value="onLoad"/>
+            <xs:enumeration value="onRequest"/>
+            <xs:enumeration value="other"/>
+            <xs:enumeration value="none"/>
+          </xs:restriction>
+        </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="encoding" type="encodingType" default="none"/>
+      <xs:attribute name="expires" type="xs:dateTime"/>
+      <xs:attribute name="rights" type="xs:token"/>
+    </xs:extension>
+  </xs:simpleContent>
+</xs:complexType>
+
+<!-- A TABLE is a sequence of FIELD/PARAMs and LINKS and DESCRIPTION,
+     possibly followed by a DATA section
+-->
+<xs:complexType name="Table">
+  <xs:annotation><xs:documentation>
+    Added in Version 1.2: INFO for diagnostics
+  </xs:documentation></xs:annotation>
+  <xs:sequence>
+    <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+<!-- GL: why a choice iso for example -->
+<!--
+      <xs:element name="PARAM" type="Param" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="FIELD" type="Field" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="GROUP" type="Group" minOccurs="0" maxOccurs="unbounded"/>
+-->
+<!--
+  This could also enforce groups to be defined after the fields and params
+  to which they must have a reference, which is somewhat more logical
+-->
+    <!-- Added Version 1.2: -->
+    <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+    <!-- An empty table without any FIELD/PARAM should not be acceptable -->
+    <xs:choice minOccurs="1" maxOccurs="unbounded">
+      <xs:element name="FIELD" type="Field"/>
+      <xs:element name="PARAM" type="Param"/>
+      <xs:element name="GROUP" type="Group"/>
+    </xs:choice>
+    <xs:element name="LINK" type="Link" minOccurs="0" maxOccurs="unbounded"/>
+    <!-- This would allow several DATA parts in a table (future extension?)
+    <xs:sequence minOccurs="0" maxOccurs="unbounded">
+      <xs:element name="DATA" type="Data"/>
+      <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    -->
+    <xs:element name="DATA" type="Data" minOccurs="0"/>
+    <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+  </xs:sequence>
+  <xs:attribute name="ID"   type="xs:ID"/>
+  <xs:attribute name="name" type="xs:token"/>
+  <xs:attribute name="ref"  type="xs:IDREF"/>
+  <xs:attribute name="ucd"  type="ucdType"/>
+  <xs:attribute name="utype" type="xs:string"/>
+  <xs:attribute name="nrows" type="xs:nonNegativeInteger"/>
+</xs:complexType>
+
+<!-- RESOURCES can contain DESCRIPTION, (INFO|PARAM|COSYS), LINK, TABLEs -->
+<xs:complexType name="Resource">
+  <xs:annotation><xs:documentation>
+     Added in Version 1.2: INFO for diagnostics in several places
+  </xs:documentation></xs:annotation>
+  <xs:sequence>
+    <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+    <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
+      <xs:element name="COOSYS" type="CoordinateSystem"/><!-- Deprecated in V1.2 -->
+      <xs:element name="GROUP" type="Group" />
+      <xs:element name="PARAM" type="Param" />
+    </xs:choice>
+    <xs:sequence minOccurs="0" maxOccurs="unbounded">
+      <xs:element name="LINK" type="Link" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:choice>
+        <xs:element name="TABLE" type="Table" />
+        <xs:element name="RESOURCE" type="Resource" />
+      </xs:choice>
+      <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <!-- Suggested Doug Tody, to include new RESOURCE types -->
+    <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+  </xs:sequence>
+  <xs:attribute name="name" type="xs:token"/>
+  <xs:attribute name="ID"   type="xs:ID"/>
+  <xs:attribute name="utype" type="xs:string"/>
+  <xs:attribute name="type" default="results">
+    <xs:simpleType>
+      <xs:restriction base="xs:NMTOKEN">
+        <xs:enumeration value="results"/>
+        <xs:enumeration value="meta"/>
+      </xs:restriction>
+    </xs:simpleType>
+  </xs:attribute>
+  <!-- Suggested Doug Tody, to include new RESOURCE attributes -->
+  <xs:anyAttribute namespace="##other" processContents="lax"/>
+</xs:complexType>
+
+<!-- VOTable is the root element -->
+<xs:element name="VOTABLE">
+<xs:complexType>
+  <xs:sequence>
+    <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+    <xs:element name="DEFINITIONS" type="Definitions" minOccurs="0"/><!-- Deprecated -->
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
+      <xs:element name="COOSYS" type="CoordinateSystem"/><!-- Deprecated in V1.2 -->
+      <xs:element name="GROUP" type="Group" />
+      <xs:element name="PARAM" type="Param" />
+      <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:choice>
+    <xs:element name="RESOURCE" type="Resource" minOccurs="1" maxOccurs="unbounded"/>
+    <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+  </xs:sequence>
+  <xs:attribute name="ID" type="xs:ID"/>
+  <xs:attribute name="version">
+     <xs:simpleType>
+       <xs:restriction base="xs:NMTOKEN">
+         <xs:enumeration value="1.3"/>
+       </xs:restriction>
+     </xs:simpleType>
+   </xs:attribute>
+</xs:complexType>
+</xs:element>
+
+</xs:schema>
\ No newline at end of file
diff --git a/astropy/io/votable/exceptions.py b/astropy/io/votable/exceptions.py
index e6029dd..c7d54a9 100644
--- a/astropy/io/votable/exceptions.py
+++ b/astropy/io/votable/exceptions.py
@@ -1,6 +1,6 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 # -*- coding: utf-8 -*-
-u"""
+"""
 .. _warnings:
 
 Warnings
@@ -31,15 +31,19 @@ Exceptions
 {exceptions}
 """
 
-from __future__ import division, absolute_import
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from ...extern import six
 
 # STDLIB
 import io
 import re
+
+from textwrap import dedent
 from warnings import warn
 
-# LOCAL
-from .util import IS_PY3K
+from ...utils.exceptions import AstropyWarning
 
 
 __all__ = [
@@ -146,8 +150,14 @@ def parse_vowarning(line):
             result['is_other'] = True
             result['number'] = None
             result['doc_url'] = None
-        result['nline'] = int(match.group('nline'))
-        result['nchar'] = int(match.group('nchar'))
+        try:
+            result['nline'] = int(match.group('nline'))
+        except ValueError:
+            result['nline'] = 0
+        try:
+            result['nchar'] = int(match.group('nchar'))
+        except ValueError:
+            result['nchar'] = 0
         result['message'] = match.group('rest')
         result['is_something'] = True
     else:
@@ -156,14 +166,14 @@ def parse_vowarning(line):
         result['is_exception'] = False
         result['is_other'] = False
         result['is_something'] = False
-        if not isinstance(line, unicode):
+        if not isinstance(line, six.text_type):
             line = line.decode('utf-8')
         result['message'] = line
 
     return result
 
 
-class VOWarning(Warning):
+class VOWarning(AstropyWarning):
     """
     The base class of all VO warnings and exceptions.
 
@@ -402,7 +412,7 @@ class W08(VOTableSpecWarning):
     make more sense.
     """
 
-    if IS_PY3K:
+    if six.PY3:
         message = "'%s' must be a str or bytes object"
     else:
         message = "'%s' must be a str or unicode object"
@@ -593,11 +603,11 @@ class W20(VOTableSpecWarning):
 class W21(UnimplementedWarning):
     """
     Unknown issues may arise using ``vo.table`` with VOTable files
-    from a version other than 1.1 or 1.2.
+    from a version other than 1.1, 1.2 or 1.3.
     """
 
     message = (
-        'vo.table is designed for VOTable version 1.1 and 1.2, but ' +
+        'vo.table is designed for VOTable version 1.1, 1.2 and 1.3, but ' +
         'this file is %s')
     default_args = ('x',)
 
@@ -943,10 +953,16 @@ class W45(VOWarning, ValueError):
 
         query, hints, doc, location
 
+    And in VOTable 1.3, additionally::
+
+        type
+
     **References**: `1.1
     <http://www.ivoa.net/Documents/VOTable/20040811/REC-VOTable-1.1-20040811.html#ToC54>`__,
     `1.2
     <http://www.ivoa.net/Documents/VOTable/20091130/REC-VOTable-1.2.html#ToC58>`__
+    `1.3
+    <http://www.ivoa.net/documents/VOTable/20130315/PR-VOTable-1.3-20130315.html#sec:link>`__
     """
 
     message = "content-role attribute '%s' invalid"
@@ -983,7 +999,8 @@ class W48(VOTableSpecWarning):
 
 class W49(VOTableSpecWarning):
     """
-    Empty cell illegal for integer fields.
+    Prior to VOTable 1.3, the empty cell was illegal for integer
+    fields.
 
     If a \"null\" value was specified for the cell, it will be used
     for the value, otherwise, 0 will be used.
@@ -997,6 +1014,9 @@ class W50(VOTableSpecWarning):
     Invalid unit string as defined in the `Standards for Astronomical
     Catalogues, Version 2.0
     <http://cdsarc.u-strasbg.fr/doc/catstd-3.2.htx>`_.
+
+    Consider passing an explicit `unit_format` parameter if the units
+    in this file conform to another specification.
     """
 
     message = "Invalid unit string '%s'"
@@ -1230,7 +1250,7 @@ class E12(VOWarning, ValueError):
 
 
 class E13(VOWarning, ValueError):
-    u"""
+    """
     From the VOTable 1.2 spec:
 
         A table cell can contain an array of a given primitive type,
@@ -1372,7 +1392,7 @@ class E21(VOWarning, ValueError):
 
 def _get_warning_and_exception_classes(prefix):
     classes = []
-    for key, val in globals().iteritems():
+    for key, val in six.iteritems(globals()):
         if re.match(prefix + "[0-9]{2}", key):
             classes.append((key, val))
     classes.sort()
@@ -1380,37 +1400,35 @@ def _get_warning_and_exception_classes(prefix):
 
 
 def _build_doc_string():
-    from textwrap import dedent
-
     def generate_set(prefix):
         classes = _get_warning_and_exception_classes(prefix)
 
         out = io.StringIO()
 
         for name, cls in classes:
-            out.write(u".. _%s:\n\n" % name)
+            out.write(".. _%s:\n\n" % name)
             msg = "%s: %s" % (cls.__name__, cls.get_short_name())
-            if not isinstance(msg, unicode):
+            if not isinstance(msg, six.text_type):
                 msg = msg.decode('utf-8')
             out.write(msg)
-            out.write(u'\n')
-            out.write(u'~' * len(msg))
-            out.write(u'\n\n')
+            out.write('\n')
+            out.write('~' * len(msg))
+            out.write('\n\n')
             doc = cls.__doc__
-            if not isinstance(doc, unicode):
+            if not isinstance(doc, six.text_type):
                 doc = doc.decode('utf-8')
             out.write(dedent(doc))
-            out.write(u'\n\n')
+            out.write('\n\n')
 
         return out.getvalue()
 
-    warnings = generate_set(u'W')
-    exceptions = generate_set(u'E')
+    warnings = generate_set('W')
+    exceptions = generate_set('E')
 
-    return {u'warnings': warnings,
-            u'exceptions': exceptions}
+    return {'warnings': warnings,
+            'exceptions': exceptions}
 
 __doc__ = __doc__.format(**_build_doc_string())
 
-__all__.extend([x[0] for x in _get_warning_and_exception_classes(u'W')])
-__all__.extend([x[0] for x in _get_warning_and_exception_classes(u'E')])
+__all__.extend([x[0] for x in _get_warning_and_exception_classes('W')])
+__all__.extend([x[0] for x in _get_warning_and_exception_classes('E')])
diff --git a/astropy/io/votable/setup_package.py b/astropy/io/votable/setup_package.py
index bf47a64..5b5e61b 100755
--- a/astropy/io/votable/setup_package.py
+++ b/astropy/io/votable/setup_package.py
@@ -25,6 +25,5 @@ def get_package_data():
             'urls/*.dat.gz']}
 
 
-def get_legacy_alias():
-    return setup_helpers.add_legacy_alias(
-        'vo', 'astropy.io.votable', '0.8')
+def requires_2to3():
+    return False
diff --git a/astropy/io/votable/table.py b/astropy/io/votable/table.py
index 80a30d1..9f6b3d8 100644
--- a/astropy/io/votable/table.py
+++ b/astropy/io/votable/table.py
@@ -1,15 +1,20 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
 """
 This file contains a contains the high-level functions to read a
 VOTable file.
 """
 
-from __future__ import division, absolute_import
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from ...extern import six
 
 # STDLIB
 import io
 import os
 import sys
+import textwrap
 import warnings
 
 # LOCAL
@@ -20,7 +25,8 @@ from ...utils import data
 from ...config import ConfigurationItem
 
 
-__all__ = ['parse', 'parse_single_table', 'from_table', 'writeto', 'validate']
+__all__ = ['parse', 'parse_single_table', 'from_table', 'writeto', 'validate',
+           'reset_vo_warnings']
 
 
 PEDANTIC = ConfigurationItem(
@@ -31,7 +37,7 @@ PEDANTIC = ConfigurationItem(
 
 def parse(source, columns=None, invalid='exception', pedantic=None,
           chunk_size=tree.DEFAULT_CHUNK_SIZE, table_number=None,
-          table_id=None, filename=None,
+          table_id=None, filename=None, unit_format=None,
           _debug_python_based_parser=False):
     """
     Parses a VOTABLE_ xml file (or file-like object), and returns a
@@ -84,6 +90,17 @@ def parse(source, columns=None, invalid='exception', pedantic=None,
         Therefore, *filename* is only required when source is a
         file-like object.
 
+    unit_format : str, astropy.units.format.Base instance or None, optional
+        The unit format to use when parsing unit attributes.  If a
+        string, must be the name of a unit formatter. The built-in
+        formats include ``generic``, ``fits``, ``cds``, and
+        ``vounit``.  A custom formatter may be provided by passing a
+        `astropy.units.format.Base` instance.  If `None` (default),
+        the unit format to use will be the one specified by the
+        VOTable specification (which is `cds` up to version 1.2 of
+        VOTable, and (probably) `vounit` in future versions of the
+        spec).
+
     Returns
     -------
     votable : `astropy.io.votable.tree.VOTableFile` object
@@ -104,9 +121,10 @@ def parse(source, columns=None, invalid='exception', pedantic=None,
         'pedantic'     :     pedantic,
         'chunk_size'   :   chunk_size,
         'table_number' : table_number,
-        'filename'     :     filename}
+        'filename'     :     filename,
+        'unit_format'  :  unit_format}
 
-    if filename is None and isinstance(source, basestring):
+    if filename is None and isinstance(source, six.string_types):
         config['filename'] = source
 
     with iterparser.get_xml_iterator(
@@ -157,7 +175,7 @@ def writeto(table, file):
     table.to_xml(file, _debug_python_based_parser=True)
 
 
-def validate(source, output=sys.stdout, xmllint=False, filename=None):
+def validate(source, output=None, xmllint=False, filename=None):
     """
     Prints a validation report for the given file.
 
@@ -186,10 +204,12 @@ def validate(source, output=sys.stdout, xmllint=False, filename=None):
         Returns `True` if no warnings were found.  If `output` is
         `None`, the return value will be a string.
     """
-    import textwrap
-    from . import converters, xmlutil
+
     from ...utils.console import print_code_line, color_print
 
+    if output is None:
+        output = sys.stdout
+
     return_as_str = False
     if output is None:
         output = io.StringIO()
@@ -197,13 +217,7 @@ def validate(source, output=sys.stdout, xmllint=False, filename=None):
     lines = []
     votable = None
 
-    # This is a special variable used by the Python warnings
-    # infrastructure to keep track of warnings that have already been
-    # seen.  Since we want to get every single warning out of this, we
-    # have to delete all of them first.
-    for module in (exceptions, converters, tree, xmlutil):
-        if hasattr(module, '__warningregistry__'):
-            del module.__warningregistry__
+    reset_vo_warnings()
 
     with data.get_readable_fileobj(source, encoding='binary') as fd:
         content = fd.read()
@@ -211,7 +225,7 @@ def validate(source, output=sys.stdout, xmllint=False, filename=None):
     content_buffer.seek(0)
 
     if filename is None:
-        if isinstance(source, basestring):
+        if isinstance(source, six.string_types):
             filename = source
         elif hasattr(source, 'name'):
             filename = source.name
@@ -232,7 +246,7 @@ def validate(source, output=sys.stdout, xmllint=False, filename=None):
              issubclass(x.category, exceptions.VOWarning)] + lines
 
     content_buffer.seek(0)
-    output.write(u"Validation report for {0}\n\n".format(filename))
+    output.write("Validation report for {0}\n\n".format(filename))
 
     if len(lines):
         xml_lines = iterparser.xml_readlines(content_buffer)
@@ -242,7 +256,7 @@ def validate(source, output=sys.stdout, xmllint=False, filename=None):
 
             if not w['is_something']:
                 output.write(w['message'])
-                output.write(u'\n\n')
+                output.write('\n\n')
             else:
                 line = xml_lines[w['nline'] - 1]
                 warning = w['warning']
@@ -251,18 +265,18 @@ def validate(source, output=sys.stdout, xmllint=False, filename=None):
                 else:
                     color = 'red'
                 color_print(
-                    u'{0:d}: '.format(w['nline']), '',
+                    '{0:d}: '.format(w['nline']), '',
                     warning or 'EXC', color,
-                    u': ', '',
+                    ': ', '',
                     textwrap.fill(
                         w['message'],
-                        initial_indent=u'          ',
-                        subsequent_indent=u'  ').lstrip(),
+                        initial_indent='          ',
+                        subsequent_indent='  ').lstrip(),
                     file=output)
                 print_code_line(line, w['nchar'], file=output)
-            output.write(u'\n')
+            output.write('\n')
     else:
-        output.write(u'astropy.io.votable found no violations.\n\n')
+        output.write('astropy.io.votable found no violations.\n\n')
 
     success = 0
     if xmllint and os.path.exists(filename):
@@ -277,10 +291,10 @@ def validate(source, output=sys.stdout, xmllint=False, filename=None):
 
         if success != 0:
             output.write(
-                u'xmllint schema violations:\n\n')
+                'xmllint schema violations:\n\n')
             output.write(stderr)
         else:
-            output.write(u'xmllint passed\n')
+            output.write('xmllint passed\n')
 
     if return_as_str:
         return output.getvalue()
@@ -337,3 +351,24 @@ def is_votable(source):
             return True
     except ValueError:
         return False
+
+
+def reset_vo_warnings():
+    """
+    Resets all of the vo warning state so that warnings that
+    have already been emitted will be emitted again. This is
+    used, for example, by `validate` which must emit all
+    warnings each time it is called.
+
+    """
+    from . import converters, xmlutil
+
+    #-----------------------------------------------------------#
+    # This is a special variable used by the Python warnings    #
+    # infrastructure to keep track of warnings that have        #
+    # already been seen.  Since we want to get every single     #
+    # warning out of this, we have to delete all of them first. #
+    #-----------------------------------------------------------#
+    for module in (converters, exceptions, tree, xmlutil):
+        if hasattr(module, '__warningregistry__'):
+            del module.__warningregistry__
diff --git a/astropy/io/votable/tests/converter_test.py b/astropy/io/votable/tests/converter_test.py
index fa5b4d3..1702d4c 100644
--- a/astropy/io/votable/tests/converter_test.py
+++ b/astropy/io/votable/tests/converter_test.py
@@ -1,4 +1,7 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+from __future__ import absolute_import, division, print_function, unicode_literals
+
 # THIRD-PARTY
 import numpy as np
 from numpy.testing import assert_array_equal
@@ -25,7 +28,7 @@ def test_oversize_char(recwarn):
     c = converters.get_converter(field, config=config)
     w = recwarn.pop(exceptions.W47)
 
-    c.parse(u"XXX")
+    c.parse("XXX")
     w = recwarn.pop(exceptions.W46)
 
 
@@ -45,7 +48,7 @@ def test_oversize_unicode(recwarn):
         config=config)
     c = converters.get_converter(field, config=config)
 
-    c.parse(u"XXX")
+    c.parse("XXX")
     w = recwarn.pop(exceptions.W46)
 
 
@@ -55,7 +58,7 @@ def test_unicode_mask():
         None, name='c', datatype='unicodeChar',
         config=config)
     c = converters.get_converter(field, config=config)
-    assert c.output(u"Foo", True) == u''
+    assert c.output("Foo", True) == ''
 
 
 @raises(exceptions.E02)
@@ -108,7 +111,7 @@ def test_complex_array_vararray2():
     assert len(x[0]) == 0
 
 
-def test_complex_array_vararray():
+def test_complex_array_vararray3():
     config = {'pedantic': True}
     field = tree.Field(
         None, name='c', datatype='doubleComplex', arraysize='2x3*',
@@ -223,4 +226,4 @@ def test_float_default_precision():
         config=config)
     c = converters.get_converter(field, config=config)
     assert (c.output([1, 2, 3, 8.999999], [False, False, False, False]) ==
-            u'1 2 3 8.999999')
+            '1 2 3 8.999999')
diff --git a/astropy/io/votable/tests/data/nonstandard_units.xml b/astropy/io/votable/tests/data/nonstandard_units.xml
new file mode 100644
index 0000000..6ab30b6
--- /dev/null
+++ b/astropy/io/votable/tests/data/nonstandard_units.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<VOTABLE version="1.1"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:noNamespaceSchemaLocation="xmlns:http://www.ivoa.net/xml/VOTable/VOTable-1.1.xsd"
+xmlns:spec="http://www.ivoa.net/xml/SpectrumModel/v1.01"
+xmlns="http://www.ivoa.net/xml/VOTable/v1.1">
+<RESOURCE utype="spec:Spectrum">
+<TABLE utype="spec:Spectrum">
+<FIELD name="Flux" ID="Flux1" utype="spec:Data.FluxAxis.value" ucd="phot.flux.density;em.wl"
+datatype="double" unit="erg cm**(-2) s**(-1) angstrom**(-1)"/>
+</TABLE>
+</RESOURCE>
+</VOTABLE>
diff --git a/astropy/io/votable/tests/data/regression.bin.tabledata.truth.xml b/astropy/io/votable/tests/data/regression.bin.tabledata.truth.1.1.xml
similarity index 99%
copy from astropy/io/votable/tests/data/regression.bin.tabledata.truth.xml
copy to astropy/io/votable/tests/data/regression.bin.tabledata.truth.1.1.xml
index 10480b5..7bee6cf 100644
--- a/astropy/io/votable/tests/data/regression.bin.tabledata.truth.xml
+++ b/astropy/io/votable/tests/data/regression.bin.tabledata.truth.1.1.xml
@@ -39,7 +39,7 @@
    <FIELD ID="string_array_test" arraysize="4" datatype="char" name="string array test"/>
    <FIELD ID="unsignedByte" datatype="unsignedByte" name="unsignedByte"/>
    <FIELD ID="short" datatype="short" name="short"/>
-   <FIELD ID="int" datatype="int" name="int">
+   <FIELD ID="int" datatype="int" name="int" utype="myint">
     <VALUES ID="int_nulls" null="123456789">
      <MIN inclusive="no" value="-1000"/>
      <MAX inclusive="yes" value="1000"/>
diff --git a/astropy/io/votable/tests/data/regression.bin.tabledata.truth.xml b/astropy/io/votable/tests/data/regression.bin.tabledata.truth.1.3.xml
similarity index 94%
rename from astropy/io/votable/tests/data/regression.bin.tabledata.truth.xml
rename to astropy/io/votable/tests/data/regression.bin.tabledata.truth.1.3.xml
index 10480b5..ea312a7 100644
--- a/astropy/io/votable/tests/data/regression.bin.tabledata.truth.xml
+++ b/astropy/io/votable/tests/data/regression.bin.tabledata.truth.1.3.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- Produced with astropy.io.votable version testing
      http://www.astropy.org/ -->
-<VOTABLE version="1.1" xmlns="http://www.ivoa.net/xml/VOTable/v1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.ivoa.net/xml/VOTable/v1.1">
+<VOTABLE version="1.3" xmlns="http://www.ivoa.net/xml/VOTable/v1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.ivoa.net/xml/VOTable/v1.3">
  <DESCRIPTION>
   The VOTable format is an XML standard for the interchange of data
   represented as a set of tables. In this context, a table is an
@@ -12,7 +12,6 @@
   itself modeled on the FITS Table format [2]; VOTable was designed to
   be closer to the FITS Binary Table format.
  </DESCRIPTION>
- <COOSYS ID="J2000" equinox="J2000" system="eq_FK5"/>
  <PARAM ID="wrong_arraysize" arraysize="0" datatype="float" name="wrong_arraysize" value=""/>
  <PARAM ID="INPUT" arraysize="*" datatype="float" name="INPUT" ucd="phys.size;instr.tel" unit="km.h-1" value="0 0">
   <DESCRIPTION>
@@ -39,7 +38,7 @@
    <FIELD ID="string_array_test" arraysize="4" datatype="char" name="string array test"/>
    <FIELD ID="unsignedByte" datatype="unsignedByte" name="unsignedByte"/>
    <FIELD ID="short" datatype="short" name="short"/>
-   <FIELD ID="int" datatype="int" name="int">
+   <FIELD ID="int" datatype="int" name="int" utype="myint">
     <VALUES ID="int_nulls" null="123456789">
      <MIN inclusive="no" value="-1000"/>
      <MAX inclusive="yes" value="1000"/>
@@ -163,7 +162,7 @@
       <TD>         1</TD>
       <TD>1.000</TD>
       <TD>0 1 +InF -InF NaN 0 -1</TD>
-      <TD>0000000000000000</TD>
+      <TD/>
      </TR>
      <TR>
       <TD>XXXX</TD>
@@ -193,7 +192,7 @@
       <TD>     1e+34</TD>
       <TD>9999999999999999455752309870428160.000</TD>
       <TD/>
-      <TD>0000000000000000</TD>
+      <TD/>
      </TR>
      <TR>
       <TD/>
@@ -209,7 +208,7 @@
       <TD>+InF</TD>
       <TD>-1 23</TD>
       <TD>0</TD>
-      <TD>000000</TD>
+      <TD/>
       <TD/>
       <TD/>
       <TD/>
@@ -223,7 +222,7 @@
       <TD/>
       <TD/>
       <TD/>
-      <TD>0000000000000000</TD>
+      <TD/>
      </TR>
      <TR>
       <TD/>
@@ -238,8 +237,8 @@
       <TD>-InF</TD>
       <TD/>
       <TD>31 -1</TD>
-      <TD>0</TD>
-      <TD>000000</TD>
+      <TD/>
+      <TD/>
       <TD/>
       <TD/>
       <TD/>
@@ -253,16 +252,18 @@
       <TD/>
       <TD/>
       <TD/>
-      <TD>0000000000000000</TD>
+      <TD/>
      </TR>
     </TABLEDATA>
    </DATA>
+   <INFO ID="Error" name="Error" value="One might expect to find some INFO here, too..."/>
   </TABLE>
   <RESOURCE type="results">
    <TABLE nrows="1" ref="main_table">
     <DESCRIPTION>
      This is a referenced table
     </DESCRIPTION>
+    <GROUP ID="_g1"/>
     <DATA>
      <TABLEDATA>
       <TR>
@@ -298,7 +299,9 @@
      </TABLEDATA>
     </DATA>
    </TABLE>
-   <TABLE ID="last_table" nrows="0" ref="main_table"/>
+   <TABLE ID="last_table" nrows="0" ref="main_table">
+    <GROUP ID="_g2"/>
+   </TABLE>
   </RESOURCE>
  </RESOURCE>
 </VOTABLE>
diff --git a/astropy/io/votable/tests/data/regression.xml b/astropy/io/votable/tests/data/regression.xml
index ca84f67..0b8f03a 100644
--- a/astropy/io/votable/tests/data/regression.xml
+++ b/astropy/io/votable/tests/data/regression.xml
@@ -41,7 +41,7 @@ The VOTable format is an XML standard for the interchange of data represented as
 <FIELD ID="string_array_test" name="string array test" datatype="string" arraysize="4*"/>
 <FIELD ID="unsignedByte" name="unsignedByte" datatype="unsignedByte"/>
 <FIELD ID="short" name="short" datatype="short"/>
-<FIELD ID="int" name="int" datatype="int">
+<FIELD ID="int" name="int" datatype="int" utype="myint">
   <VALUES null="123456789" ID="int_nulls">
     <MIN value="-1000" inclusive="no"/>
     <MAX value="1000" inclusive="yes"/>
diff --git a/astropy/io/votable/tests/exception_test.py b/astropy/io/votable/tests/exception_test.py
index f221996..2ad0f3d 100644
--- a/astropy/io/votable/tests/exception_test.py
+++ b/astropy/io/votable/tests/exception_test.py
@@ -1,5 +1,4 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from ....tests.helper import raises
 
 # LOCAL
 from .. import converters
diff --git a/astropy/io/votable/tests/table_test.py b/astropy/io/votable/tests/table_test.py
index 442a028..c0777cd 100644
--- a/astropy/io/votable/tests/table_test.py
+++ b/astropy/io/votable/tests/table_test.py
@@ -16,8 +16,6 @@ from ....utils.data import get_pkg_data_filename, get_pkg_data_fileobj
 from ..table import parse, writeto
 from .. import tree
 
-numpy_lt_1p5 = version.LooseVersion(np.__version__) < version.LooseVersion('1.5')
-
 TMP_DIR = None
 def setup_module():
     global TMP_DIR
@@ -28,7 +26,6 @@ def teardown_module():
     shutil.rmtree(TMP_DIR)
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_table():
     # Read the VOTABLE
     votable = parse(
@@ -83,7 +80,6 @@ def test_table():
     writeto(votable2, os.path.join(TMP_DIR, "through_table.xml"))
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_read_through_table_interface():
     from ....table import Table
 
@@ -101,7 +97,6 @@ def test_read_through_table_interface():
     assert len(t2) == 5
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_read_through_table_interface2():
     from ....table import Table
 
@@ -111,17 +106,18 @@ def test_read_through_table_interface2():
     assert len(t) == 0
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
-def test_from_table_without_mask():
-    from ....table import Table, Column
-    t = Table()
-    c = Column(data=[1,2,3], name='a')
-    t.add_column(c)
-    output = io.BytesIO()
-    t.write(output, format='votable')
+def test_names_over_ids():
+    with get_pkg_data_fileobj('data/names.xml', encoding='binary') as fd:
+        votable = parse(fd)
+
+    table = votable.get_first_table().to_table(use_names_over_ids=True)
+
+    assert table.colnames == [
+        'Name', 'GLON', 'GLAT', 'RAdeg', 'DEdeg', 'Jmag', 'Hmag', 'Kmag',
+        'G3.6mag', 'G4.5mag', 'G5.8mag', 'G8.0mag', '4.5mag', '8.0mag',
+        'Emag', '24mag', 'f_Name']
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_table_read_with_unnamed_tables():
     """
     Issue #927
@@ -132,3 +128,12 @@ def test_table_read_with_unnamed_tables():
         t = Table.read(fd, format='votable')
 
     assert len(t) == 1
+
+
+def test_from_table_without_mask():
+    from ....table import Table, Column
+    t = Table()
+    c = Column(data=[1,2,3], name='a')
+    t.add_column(c)
+    output = io.BytesIO()
+    t.write(output, format='votable')
diff --git a/astropy/io/votable/tests/tree_test.py b/astropy/io/votable/tests/tree_test.py
index 1e438f4..cbc4cfc 100644
--- a/astropy/io/votable/tests/tree_test.py
+++ b/astropy/io/votable/tests/tree_test.py
@@ -16,3 +16,15 @@ def test_check_astroyear_fail():
 def test_string_fail():
     config = {'pedantic': True}
     tree.check_string(42, 'foo', config)
+
+def test_make_Fields():
+    votable = tree.VOTableFile()
+    # ...with one resource...
+    resource = tree.Resource()
+    votable.resources.append(resource)
+
+    # ... with one table
+    table = tree.Table(votable)
+    resource.tables.append(table)
+
+    table.fields.extend([tree.Field(votable, name='Test', datatype="float", unit = "mag")])
diff --git a/astropy/io/votable/tests/ucd_test.py b/astropy/io/votable/tests/ucd_test.py
index 5321c5c..5cc711e 100644
--- a/astropy/io/votable/tests/ucd_test.py
+++ b/astropy/io/votable/tests/ucd_test.py
@@ -1,4 +1,9 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+from __future__ import absolute_import, division, print_function, unicode_literals
+from ....extern import six
+
+
 from ....tests.helper import raises
 
 # LOCAL
@@ -35,7 +40,7 @@ examples = {
 
 
 def test_check():
-    for s, p in examples.iteritems():
+    for s, p in six.iteritems(examples):
         assert ucd.parse_ucd(s, True, True) == p
         assert ucd.check_ucd(s, True, True)
 
@@ -53,5 +58,3 @@ def test_invalid_namespace():
 @raises(ValueError)
 def test_invalid_word():
     ucd.parse_ucd("-pho")
-
-
diff --git a/astropy/io/votable/tests/util_test.py b/astropy/io/votable/tests/util_test.py
index 2a67df1..9cabbe1 100644
--- a/astropy/io/votable/tests/util_test.py
+++ b/astropy/io/votable/tests/util_test.py
@@ -2,11 +2,6 @@
 """
 A set of tests for the util.py module
 """
-from __future__ import absolute_import, print_function
-
-# THIRD-PARTY
-from numpy.testing import assert_array_equal
-
 #LOCAL
 from .. import util
 from ....tests.helper import raises
@@ -68,4 +63,3 @@ def test_range_list9a():
 def test_range_list9():
     assert util.coerce_range_list_param(
         "52,-27.8;GALACTIC", util.stc_reference_frames)
-
diff --git a/astropy/io/votable/tests/vo_test.py b/astropy/io/votable/tests/vo_test.py
index c7ecdcd..a5af70d 100644
--- a/astropy/io/votable/tests/vo_test.py
+++ b/astropy/io/votable/tests/vo_test.py
@@ -3,7 +3,9 @@
 This is a set of regression tests for vo.
 """
 
-from __future__ import absolute_import, print_function
+from __future__ import absolute_import, division, print_function, unicode_literals
+from ....extern import six
+from ....extern.six.moves import xrange
 
 # STDLIB
 import difflib
@@ -13,7 +15,6 @@ import os
 import shutil
 import sys
 import tempfile
-import warnings
 
 # THIRD-PARTY
 from numpy.testing import assert_array_equal
@@ -22,17 +23,12 @@ import numpy as np
 # LOCAL
 from ..table import parse, parse_single_table, validate
 from .. import tree
-from ..util import IS_PY3K
 from ..exceptions import VOTableSpecError, VOWarning
 from ..xmlutil import validate_schema
-from ....utils.data import get_pkg_data_filename, get_pkg_data_fileobj, get_pkg_data_filenames
-from ....tests.helper import pytest, raises
+from ....utils.data import get_pkg_data_filename, get_pkg_data_filenames
+from ....tests.helper import pytest, raises, catch_warnings
 from ....utils.compat import gzip
 
-numpy_has_complex_bug = (
-    version.LooseVersion(np.__version__) < version.LooseVersion('1.5')
-    )
-
 # Determine the kind of float formatting in this build of Python
 if hasattr(sys, 'float_repr_style'):
     legacy_float_repr = (sys.float_repr_style == 'legacy')
@@ -52,12 +48,12 @@ def teardown_module():
     shutil.rmtree(TMP_DIR)
 
 
-def assert_validate_schema(filename):
+def assert_validate_schema(filename, version):
     if sys.platform.startswith('win'):
         return
 
     try:
-        rc, stdout, stderr = validate_schema(filename, '1.1')
+        rc, stdout, stderr = validate_schema(filename, version)
     except OSError:
         # If xmllint is not installed, we want the test to pass anyway
         return
@@ -89,7 +85,7 @@ def test_parse_single_table3():
         table_number=3, pedantic=False)
 
 
-def _test_regression(_python_based=False):
+def _test_regression(_python_based=False, binary_mode=1):
     # Read the VOTABLE
     votable = parse(
         get_pkg_data_filename('data/regression.xml'),
@@ -98,52 +94,64 @@ def _test_regression(_python_based=False):
     table = votable.get_first_table()
 
     dtypes = [
-        (('string test', 'string_test'), '|O8'),
-        (('fixed string test', 'string_test_2'), '|S10'),
-        ('unicode_test', '|O8'),
-        (('unicode test', 'fixed_unicode_test'), '<U10'),
-        (('string array test', 'string_array_test'), '|S4'),
-        ('unsignedByte', '|u1'),
-        ('short', '<i2'),
-        ('int', '<i4'),
-        ('long', '<i8'),
-        ('double', '<f8'),
-        ('float', '<f4'),
-        ('array', '|O8'),
-        ('bit', '|b1'),
-        ('bitarray', '|b1', (3, 2)),
-        ('bitvararray', '|O8'),
-        ('bitvararray2', '|O8'),
-        ('floatComplex', '<c8'),
-        ('doubleComplex', '<c16'),
-        ('doubleComplexArray', '|O8'),
-        ('doubleComplexArrayFixed', '<c16', (2,)),
-        ('boolean', '|b1'),
-        ('booleanArray', '|b1', (4,)),
-        ('nulls', '<i4'),
-        ('nulls_array', '<i4', (2, 2)),
-        ('precision1', '<f8'),
-        ('precision2', '<f8'),
-        ('doublearray', '|O8'),
-        ('bitarray2', '|b1', (16,))
+        ((str('string test'), str('string_test')), str('|O8')),
+        ((str('fixed string test'), str('string_test_2')), str('|S10')),
+        (str('unicode_test'), str('|O8')),
+        ((str('unicode test'), str('fixed_unicode_test')), str('<U10')),
+        ((str('string array test'), str('string_array_test')), str('|S4')),
+        (str('unsignedByte'), str('|u1')),
+        (str('short'), str('<i2')),
+        (str('int'), str('<i4')),
+        (str('long'), str('<i8')),
+        (str('double'), str('<f8')),
+        (str('float'), str('<f4')),
+        (str('array'), str('|O8')),
+        (str('bit'), str('|b1')),
+        (str('bitarray'), str('|b1'), (3, 2)),
+        (str('bitvararray'), str('|O8')),
+        (str('bitvararray2'), str('|O8')),
+        (str('floatComplex'), str('<c8')),
+        (str('doubleComplex'), str('<c16')),
+        (str('doubleComplexArray'), str('|O8')),
+        (str('doubleComplexArrayFixed'), str('<c16'), (2,)),
+        (str('boolean'), str('|b1')),
+        (str('booleanArray'), str('|b1'), (4,)),
+        (str('nulls'), str('<i4')),
+        (str('nulls_array'), str('<i4'), (2, 2)),
+        (str('precision1'), str('<f8')),
+        (str('precision2'), str('<f8')),
+        (str('doublearray'), str('|O8')),
+        (str('bitarray2'), str('|b1'), (16,))
         ]
     if sys.byteorder == 'big':
         new_dtypes = []
         for dtype in dtypes:
             dtype = list(dtype)
-            dtype[1] = dtype[1].replace('<', '>')
+            dtype[1] = dtype[1].replace(b'<', b'>')
             new_dtypes.append(tuple(dtype))
         dtypes = new_dtypes
     assert table.array.dtype == dtypes
 
     votable.to_xml(join(TMP_DIR, "regression.tabledata.xml"),
                    _debug_python_based_parser=_python_based)
-    assert_validate_schema(join(TMP_DIR, "regression.tabledata.xml"))
-    votable.get_first_table().format = 'binary'
+    assert_validate_schema(
+        join(TMP_DIR, "regression.tabledata.xml"),
+        votable.version)
+
+    if binary_mode == 1:
+        votable.get_first_table().format = 'binary'
+        votable.version = '1.1'
+    elif binary_mode == 2:
+        votable.get_first_table()._config['version_1_3_or_later'] = True
+        votable.get_first_table().format = 'binary2'
+        votable.version = '1.3'
+
     # Also try passing a file handle
     with open(join(TMP_DIR, "regression.binary.xml"), "wb") as fd:
         votable.to_xml(fd, _debug_python_based_parser=_python_based)
-    assert_validate_schema(join(TMP_DIR, "regression.binary.xml"))
+    assert_validate_schema(
+        join(TMP_DIR, "regression.binary.xml"),
+        votable.version)
     # Also try passing a file handle
     with open(join(TMP_DIR, "regression.binary.xml"), "rb") as fd:
         votable2 = parse(fd, pedantic=False,
@@ -152,10 +160,14 @@ def _test_regression(_python_based=False):
     votable2.to_xml(join(TMP_DIR, "regression.bin.tabledata.xml"),
                     _astropy_version="testing",
                     _debug_python_based_parser=_python_based)
-    assert_validate_schema(join(TMP_DIR, "regression.bin.tabledata.xml"))
+    assert_validate_schema(
+        join(TMP_DIR, "regression.bin.tabledata.xml"),
+        votable.version)
 
     with io.open(
-        get_pkg_data_filename('data/regression.bin.tabledata.truth.xml'),
+        get_pkg_data_filename(
+            'data/regression.bin.tabledata.truth.{0}.xml'.format(
+                votable.version)),
         'rt', encoding='utf-8') as fd:
         truth = fd.readlines()
     with io.open(
@@ -187,16 +199,21 @@ def _test_regression(_python_based=False):
     assert truth == output
 
 
- at pytest.mark.xfail('legacy_float_repr')
+ at pytest.mark.xfail(str('legacy_float_repr'))
 def test_regression():
     _test_regression(False)
 
 
- at pytest.mark.xfail('legacy_float_repr')
+ at pytest.mark.xfail(str('legacy_float_repr'))
 def test_regression_python_based_parser():
     _test_regression(True)
 
 
+ at pytest.mark.xfail(str('legacy_float_repr'))
+def test_regression_binary2():
+    _test_regression(False, 2)
+
+
 class TestFixups:
     def setup_class(self):
         self.table = parse(
@@ -280,9 +297,10 @@ def test_select_columns_by_name():
 
 class TestParse:
     def setup_class(self):
-        self.table = parse(
+        self.votable = parse(
             get_pkg_data_filename('data/regression.xml'),
-            pedantic=False).get_first_table()
+            pedantic=False)
+        self.table = self.votable.get_first_table()
         self.array = self.table.array
         self.mask = self.table.array.mask
 
@@ -305,17 +323,17 @@ class TestParse:
         assert issubclass(self.array['unicode_test'].dtype.type,
                           np.object_)
         assert_array_equal(self.array['unicode_test'],
-                           [u"Ce\xe7i n'est pas un pipe",
-                            u'\u0bb5\u0ba3\u0b95\u0bcd\u0b95\u0bae\u0bcd',
-                            u'XXXX', u'', u''])
+                           ["Ce\xe7i n'est pas un pipe",
+                            '\u0bb5\u0ba3\u0b95\u0bcd\u0b95\u0bae\u0bcd',
+                            'XXXX', '', ''])
 
     def test_fixed_unicode_test(self):
         assert issubclass(self.array['fixed_unicode_test'].dtype.type,
                           np.unicode_)
         assert_array_equal(self.array['fixed_unicode_test'],
-                           [u"Ce\xe7i n'est",
-                            u'\u0bb5\u0ba3\u0b95\u0bcd\u0b95\u0bae\u0bcd',
-                            u'0123456789', u'', u''])
+                           ["Ce\xe7i n'est",
+                            '\u0bb5\u0ba3\u0b95\u0bcd\u0b95\u0bae\u0bcd',
+                            '0123456789', '', ''])
 
     def test_unsignedByte(self):
         assert issubclass(self.array['unsignedByte'].dtype.type,
@@ -396,7 +414,7 @@ class TestParse:
     def test_bitarray(self):
         assert issubclass(self.array['bitarray'].dtype.type,
                           np.bool_)
-        self.array['bitarray'].shape == (5, 3, 2)
+        assert self.array['bitarray'].shape == (5, 3, 2)
         assert_array_equal(self.array['bitarray'],
                            [[[ True, False],
                              [ True,  True],
@@ -481,7 +499,6 @@ class TestParse:
                 assert issubclass(a0.dtype.type, np.bool_)
                 assert_array_equal(a0, b0)
 
-    @pytest.mark.xfail('numpy_has_complex_bug')
     def test_floatComplex(self):
         assert issubclass(self.array['floatComplex'].dtype.type,
                           np.complex64)
@@ -490,7 +507,6 @@ class TestParse:
         assert_array_equal(self.mask['floatComplex'],
                            [True, False, False, True, True])
 
-    @pytest.mark.xfail('numpy_has_complex_bug')
     def test_doubleComplex(self):
         assert issubclass(self.array['doubleComplex'].dtype.type,
                           np.complex128)
@@ -500,7 +516,6 @@ class TestParse:
         assert_array_equal(self.mask['doubleComplex'],
                            [True, False, False, True, True])
 
-    @pytest.mark.xfail('numpy_has_complex_bug')
     def test_doubleComplexArray(self):
         assert issubclass(self.array['doubleComplexArray'].dtype.type,
                           np.object_)
@@ -584,6 +599,15 @@ class TestParse:
         assert not np.any(self.mask['bitarray2'][0])
         assert np.all(self.mask['bitarray2'][1:])
 
+    def test_get_coosys_by_id(self):
+        coosys = self.votable.get_coosys_by_id('J2000')
+        assert coosys.system == 'eq_FK5'
+
+    def test_get_field_by_utype(self):
+        fields = list(self.votable.get_fields_by_utype("myint"))
+        assert fields[0].name == "int"
+        assert fields[0].values.min == -1000
+
 
 class TestThroughTableData(TestParse):
     def setup_class(self):
@@ -591,13 +615,15 @@ class TestThroughTableData(TestParse):
             get_pkg_data_filename('data/regression.xml'),
             pedantic=False)
         votable.to_xml(join(TMP_DIR, "test_through_tabledata.xml"))
-        self.table = parse(join(TMP_DIR, "test_through_tabledata.xml"),
-                           pedantic=False).get_first_table()
+        self.votable = parse(join(TMP_DIR, "test_through_tabledata.xml"),
+                           pedantic=False)
+        self.table = self.votable.get_first_table()
         self.array = self.table.array
         self.mask = self.table.array.mask
 
     def test_schema(self):
-        assert_validate_schema(join(TMP_DIR, "test_through_tabledata.xml"))
+        assert_validate_schema(
+            join(TMP_DIR, "test_through_tabledata.xml"), '1.1')
 
 
 class TestThroughBinary(TestParse):
@@ -607,8 +633,9 @@ class TestThroughBinary(TestParse):
             pedantic=False)
         votable.get_first_table().format = 'binary'
         votable.to_xml(join(TMP_DIR, "test_through_binary.xml"))
-        self.table = parse(join(TMP_DIR, "test_through_binary.xml"),
-                           pedantic=False).get_first_table()
+        self.votable = parse(join(TMP_DIR, "test_through_binary.xml"),
+                           pedantic=False)
+        self.table = self.votable.get_first_table()
         self.array = self.table.array
         self.mask = self.table.array.mask
 
@@ -625,6 +652,27 @@ class TestThroughBinary(TestParse):
         assert not np.any(self.mask['bitarray2'])
 
 
+class TestThroughBinary2(TestParse):
+    def setup_class(self):
+        votable = parse(
+            get_pkg_data_filename('data/regression.xml'),
+            pedantic=False)
+        votable.version = '1.3'
+        votable.get_first_table()._config['version_1_3_or_later'] = True
+        votable.get_first_table().format = 'binary2'
+
+        votable.to_xml(join(TMP_DIR, "test_through_binary2.xml"))
+        self.votable = parse(join(TMP_DIR, "test_through_binary2.xml"),
+                           pedantic=False)
+        self.table = self.votable.get_first_table()
+        self.array = self.table.array
+        self.mask = self.table.array.mask
+
+    def test_get_coosys_by_id(self):
+        # No COOSYS in VOTable 1.2 or later
+        pass
+
+
 def table_from_scratch():
     from ..tree import VOTableFile, Resource, Table, Field
 
@@ -708,8 +756,8 @@ def test_build_from_scratch():
     assert_array_equal(
         table.array.mask, np.array([(False, [[False, False], [False, False]]),
                                     (False, [[False, False], [False, False]])],
-                                    dtype=[('filename', '?'),
-                                           ('matrix', '?', (2, 2))]))
+                                    dtype=[(str('filename'), str('?')),
+                                           (str('matrix'), str('?'), (2, 2))]))
 
 
 def test_validate():
@@ -738,7 +786,7 @@ def test_validate():
     output = output[1:-1]
 
     for line in difflib.unified_diff(truth, output):
-        if IS_PY3K:
+        if six.PY3:
             sys.stdout.write(
                 line.replace('\\n', '\n'))
         else:
@@ -767,9 +815,7 @@ def test_gzip_filehandles():
 
 
 def test_from_scratch_example():
-    with warnings.catch_warnings(record=True) as warning_lines:
-        warnings.resetwarnings()
-        warnings.simplefilter("always", VOWarning, append=True)
+    with catch_warnings(VOWarning) as warning_lines:
         try:
             _run_test_from_scratch_example()
         except ValueError as e:
@@ -823,6 +869,25 @@ def test_fileobj():
                 assert isinstance(fd, file)
 
 
+def test_nonstandard_units():
+    from .... import units as u
+
+    votable = parse(
+        get_pkg_data_filename('data/nonstandard_units.xml'),
+        pedantic=False)
+
+    assert isinstance(
+        votable.get_first_table().fields[0].unit, u.UnrecognizedUnit)
+
+    votable = parse(
+        get_pkg_data_filename('data/nonstandard_units.xml'),
+        pedantic=False,
+        unit_format='generic')
+
+    assert not isinstance(
+        votable.get_first_table().fields[0].unit, u.UnrecognizedUnit)
+
+
 def test_resource_structure():
     # Based on issue #1223, as reported by @astro-friedel and @RayPlante
     from astropy.io.votable import tree as vot
diff --git a/astropy/io/votable/tree.py b/astropy/io/votable/tree.py
index b42bef5..57f4fe9 100644
--- a/astropy/io/votable/tree.py
+++ b/astropy/io/votable/tree.py
@@ -1,18 +1,16 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 # TODO: Test FITS parsing
 
-from __future__ import division, absolute_import
-
-from .util import IS_PY3K
+from __future__ import absolute_import, division, print_function, unicode_literals
+from ...extern import six
+from ...extern.six.moves import xrange, urllib
 
 # STDLIB
+import base64
 import codecs
 import io
 import re
-if IS_PY3K:
-    string_types = (str, bytes)
-else:
-    string_types = (str, unicode)
+import sys
 
 # THIRD-PARTY
 import numpy as np
@@ -29,8 +27,8 @@ from .exceptions import (warn_or_raise, vo_warn, vo_raise, vo_reraise,
     warn_unknown_attrs,
     W06, W07, W08, W09, W10, W11, W12, W13, W15, W17, W18, W19, W20,
     W21, W22, W26, W27, W28, W29, W32, W33, W35, W36, W37, W38, W40,
-    W41, W42, W43, W44, W45, W50, W52, W53, E06, E08, E09, E10, E11, E12, E13,
-    E14, E15, E16, E17, E18, E19, E20, E21)
+    W41, W42, W43, W44, W45, W50, W52, W53, E06, E08, E09, E10, E11,
+    E12, E13, E14, E15, E16, E17, E18, E19, E20, E21)
 from . import ucd as ucd_mod
 from . import util
 from . import xmlutil
@@ -72,12 +70,21 @@ def _resize(masked, new_size):
     return new_array
 
 
-def _lookup_by_id_factory(iterator, element_name, doc):
+def _lookup_by_attr_factory(attr, unique, iterator, element_name, doc):
     """
-    Creates a function useful for looking up an element by ID.
+    Creates a function useful for looking up an element by a given
+    attribute.
 
     Parameters
     ----------
+    attr : str
+        The attribute name
+
+    unique : bool
+        Should be `True` if the attribute is unique and therefore this
+        should return only one value.  Otherwise, returns a list of
+        values.
+
     iterator : generator
         A generator that iterates over some arbitrary set of elements
 
@@ -91,38 +98,47 @@ def _lookup_by_id_factory(iterator, element_name, doc):
     Returns
     -------
     factory : function
-        A function that looks up an element by ID
+        A function that looks up an element by the given attribute.
     """
-    def lookup_by_id(self, ref, before=None):
+    def lookup_by_attr(self, ref, before=None):
         """
-        Given an XML id *ref*, finds the first element in the iterator
-        with the attribute ID == *ref*.  If *before* is provided, will
-        stop searching at the object *before*.  This is important,
-        since "forward references" are not allowed in the VOTABLE
-        format.
+        Given a string *ref*, finds the first element in the iterator
+        where the given attribute == *ref*.  If *before* is provided,
+        will stop searching at the object *before*.  This is
+        important, since "forward references" are not allowed in the
+        VOTABLE format.
         """
         for element in getattr(self, iterator)():
             if element is before:
-                if element.ID == ref:
+                if getattr(element, attr, None) == ref:
                     vo_raise(
                         "%s references itself" % element_name,
                         element._config, element._pos, KeyError)
                 break
-            if element.ID == ref:
-                return element
+            if getattr(element, attr, None) == ref:
+                yield element
+
+    def lookup_by_attr_unique(self, ref, before=None):
+        for element in lookup_by_attr(self, ref, before=before):
+            return element
         raise KeyError(
-            "No %s with ID '%s' found before the referencing %s" %
-            (element_name, ref, element_name))
+            "No %s with %s '%s' found before the referencing %s" %
+            (element_name, attr, ref, element_name))
 
-    lookup_by_id.__doc__ = doc
-    return lookup_by_id
+    if unique:
+        lookup_by_attr_unique.__doc__ = doc
+        return lookup_by_attr_unique
+    else:
+        lookup_by_attr.__doc__ = doc
+        return lookup_by_attr
 
 
 def _lookup_by_id_or_name_factory(iterator, element_name, doc):
     """
-    Like `_lookup_by_id_factory`, but also looks in the "name" attribute.
+    Like `_lookup_by_attr_factory`, but looks in both the "ID" and
+    "name" attributes.
     """
-    def lookup_by_id(self, ref, before=None):
+    def lookup_by_id_or_name(self, ref, before=None):
         """
         Given an key *ref*, finds the first element in the iterator
         with the attribute ID == *ref* or name == *ref*.  If *before*
@@ -143,8 +159,29 @@ def _lookup_by_id_or_name_factory(iterator, element_name, doc):
             "No %s with ID or name '%s' found before the referencing %s" %
             (element_name, ref, element_name))
 
-    lookup_by_id.__doc__ = doc
-    return lookup_by_id
+    lookup_by_id_or_name.__doc__ = doc
+    return lookup_by_id_or_name
+
+
+def _get_default_unit_format(config):
+    """
+    Get the default unit format as specified in the VOTable spec.
+    """
+    # In the future, this should take into account the VOTable
+    # version.
+    return 'cds'
+
+
+def _get_unit_format(config):
+    """
+    Get the unit format based on the configuration.
+    """
+    if config.get('unit_format') is None:
+        format = _get_default_unit_format(config)
+    else:
+        format = config['unit_format']
+    return format
+
 
 
 ######################################################################
@@ -168,7 +205,7 @@ def check_astroyear(year, field, config={}, pos=None):
         Information about the source of the value
     """
     if (year is not None and
-        re.match(ur"^[JB]?[0-9]+([.][0-9]*)?$", year) is None):
+        re.match(r"^[JB]?[0-9]+([.][0-9]*)?$", year) is None):
         warn_or_raise(W07, W07, (field, year), config, pos)
         return False
     return True
@@ -191,7 +228,7 @@ def check_string(string, attr_name, config={}, pos=None):
     config, pos : optional
         Information about the source of the value
     """
-    if string is not None and not isinstance(string, string_types):
+    if string is not None and not isinstance(string, six.string_types):
         warn_or_raise(W08, W08, attr_name, config, pos)
         return False
     return True
@@ -229,9 +266,9 @@ def check_ucd(ucd, config={}, pos=None):
         except ValueError as e:
             # This weird construction is for Python 3 compatibility
             if config.get('pedantic'):
-                vo_raise(W06, (ucd, unicode(e)), config, pos)
+                vo_raise(W06, (ucd, six.text_type(e)), config, pos)
             else:
-                vo_warn(W06, (ucd, unicode(e)), config, pos)
+                vo_warn(W06, (ucd, six.text_type(e)), config, pos)
                 return False
     return True
 
@@ -372,12 +409,12 @@ class Element(object):
         warn_or_raise(W10, W10, tag, config, pos)
 
     def _ignore_add(self, iterator, tag, data, config, pos):
-        warn_unknown_attrs(tag, data.iterkeys(), config, pos)
+        warn_unknown_attrs(tag, six.iterkeys(data), config, pos)
 
     def _add_definitions(self, iterator, tag, data, config, pos):
         if config.get('version_1_1_or_later'):
             warn_or_raise(W22, W22, (), config, pos)
-        warn_unknown_attrs(tag, data.iterkeys(), config, pos)
+        warn_unknown_attrs(tag, six.iterkeys(data), config, pos)
 
 
 class SimpleElement(Element):
@@ -475,7 +512,7 @@ class Link(SimpleElement, _IDProperty):
         self.action       = action
 
         warn_unknown_attrs(
-            'LINK', kwargs.iterkeys(), config, pos,
+            'LINK', six.iterkeys(kwargs), config, pos,
             ['content-role', 'content_role', 'content-type', 'content_type',
              'gref'])
 
@@ -484,13 +521,16 @@ class Link(SimpleElement, _IDProperty):
         """
         Defines the MIME role of the referenced object.  Must be one of:
 
-          None, 'query', 'hints', 'doc' or 'location'
+          None, 'query', 'hints', 'doc', 'location' or 'type'
         """
         return self._content_role
 
     @content_role.setter
     def content_role(self, content_role):
-        if content_role not in (None, 'query', 'hints', 'doc', 'location'):
+        if ((content_role == 'type' and
+             not self._config['version_1_3_or_later']) or
+             content_role not in
+             (None, 'query', 'hints', 'doc', 'location')):
             vo_warn(W45, (content_role,), self._config, self._pos)
         self._content_role = content_role
 
@@ -590,7 +630,7 @@ class Info(SimpleElementWithContent, _IDProperty, _XtypeProperty,
             if utype is not None:
                 warn_unknown_attrs('INFO', ['utype'], config, pos)
 
-        warn_unknown_attrs('INFO', extra.iterkeys(), config, pos)
+        warn_unknown_attrs('INFO', six.iterkeys(extra), config, pos)
 
     @property
     def name(self):
@@ -685,11 +725,21 @@ class Info(SimpleElementWithContent, _IDProperty, _XtypeProperty,
             warn_or_raise(W28, W28, ('unit', 'INFO', '1.2'),
                           self._config, self._pos)
 
-        unit = u.Unit(unit, format='cds', parse_strict='silent')
-        if isinstance(unit, u.UnrecognizedUnit):
-            warn_or_raise(W50, W50, (unit.to_string(),),
+        # First, parse the unit in the default way, so that we can
+        # still emit a warning if the unit is not to spec.
+        default_format = _get_default_unit_format(self._config)
+        unit_obj = u.Unit(
+            unit, format=default_format, parse_strict='silent')
+        if isinstance(unit_obj, u.UnrecognizedUnit):
+            warn_or_raise(W50, W50, (unit,),
                           self._config, self._pos)
-        self._unit = unit
+
+        format = _get_unit_format(self._config)
+        if format != default_format:
+            unit_obj = u.Unit(
+                unit, format=format, parse_strict='silent')
+
+        self._unit = unit_obj
 
     @unit.deleter
     def unit(self):
@@ -730,7 +780,7 @@ class Values(Element, _IDProperty):
         self.max_inclusive = True
         self._options      = []
 
-        warn_unknown_attrs('VALUES', extras.iterkeys(), config, pos)
+        warn_unknown_attrs('VALUES', six.iterkeys(extras), config, pos)
 
     @property
     def null(self):
@@ -742,7 +792,7 @@ class Values(Element, _IDProperty):
 
     @null.setter
     def null(self, null):
-        if null is not None and isinstance(null, string_types):
+        if null is not None and isinstance(null, six.string_types):
             try:
                 null_val = self._field.converter.parse_scalar(
                     null, self._config, self._pos)[0]
@@ -910,7 +960,7 @@ class Values(Element, _IDProperty):
                         self.min = data['value']
                         self.min_inclusive = data.get('inclusive', 'yes')
                         warn_unknown_attrs(
-                            'MIN', data.iterkeys(), config, pos,
+                            'MIN', six.iterkeys(data), config, pos,
                             ['value', 'inclusive'])
                     elif tag == 'MAX':
                         if 'value' not in data:
@@ -918,7 +968,7 @@ class Values(Element, _IDProperty):
                         self.max = data['value']
                         self.max_inclusive = data.get('inclusive', 'yes')
                         warn_unknown_attrs(
-                            'MAX', data.iterkeys(), config, pos,
+                            'MAX', six.iterkeys(data), config, pos,
                             ['value', 'inclusive'])
                     elif tag == 'OPTION':
                         if 'value' not in data:
@@ -928,7 +978,7 @@ class Values(Element, _IDProperty):
                         self.options.append(
                             (data.get('name'), data.get('value')))
                         warn_unknown_attrs(
-                            'OPTION', data.iterkeys(), config, pos,
+                            'OPTION', six.iterkeys(data), config, pos,
                             ['data', 'name'])
                 elif tag == 'VALUES':
                     break
@@ -944,40 +994,38 @@ class Values(Element, _IDProperty):
     def to_xml(self, w, **kwargs):
         def yes_no(value):
             if value:
-                return u'yes'
-            return u'no'
+                return 'yes'
+            return 'no'
 
         if self.is_defaults():
             return
 
         if self.ref is not None:
-            w.element(u'VALUES', attrib=w.object_attrs(self, [u'ref']))
+            w.element('VALUES', attrib=w.object_attrs(self, ['ref']))
         else:
-            with w.tag(u'VALUES',
+            with w.tag('VALUES',
                        attrib=w.object_attrs(
-                           self, [u'ID', u'null', u'ref'])):
+                           self, ['ID', 'null', 'ref'])):
                 if self.min is not None:
                     w.element(
-                        u'MIN',
+                        'MIN',
                         value=self._field.converter.output(self.min, False),
                         inclusive=yes_no(self.min_inclusive))
                 if self.max is not None:
                     w.element(
-                        u'MAX',
+                        'MAX',
                         value=self._field.converter.output(self.max, False),
                         inclusive=yes_no(self.max_inclusive))
                 for name, value in self.options:
                     w.element(
-                        u'OPTION',
+                        'OPTION',
                         name=name,
                         value=value)
 
     def to_table_column(self, column):
         # Have the ref filled in here
-        ref = self.ref
-
         meta = {}
-        for key in [u'ID', u'null']:
+        for key in ['ID', 'null']:
             val = getattr(self, key, None)
             if val is not None:
                 meta[key] = val
@@ -999,7 +1047,7 @@ class Values(Element, _IDProperty):
             return
 
         meta = column.meta['values']
-        for key in [u'ID', u'null']:
+        for key in ['ID', 'null']:
             val = meta.get(key, None)
             if val is not None:
                 setattr(self, key, val)
@@ -1010,7 +1058,7 @@ class Values(Element, _IDProperty):
             self.max = meta['max']['value']
             self.max_inclusive = meta['max']['inclusive']
         if 'options' in meta:
-            self._options = meta['options'].items()
+            self._options = list(meta['options'].items())
 
 
 class Field(SimpleElement, _IDProperty, _NameProperty, _XtypeProperty,
@@ -1110,7 +1158,7 @@ class Field(SimpleElement, _IDProperty, _NameProperty, _XtypeProperty,
 
         self._setup(config, pos)
 
-        warn_unknown_attrs(self._element_name, extra.iterkeys(), config, pos)
+        warn_unknown_attrs(self._element_name, six.iterkeys(extra), config, pos)
 
     @classmethod
     def uniqify_names(cls, fields):
@@ -1195,7 +1243,7 @@ class Field(SimpleElement, _IDProperty, _NameProperty, _XtypeProperty,
 
     @precision.setter
     def precision(self, precision):
-        if precision is not None and not re.match(ur"^[FE]?[0-9]+$", precision):
+        if precision is not None and not re.match(r"^[FE]?[0-9]+$", precision):
             vo_raise(E11, precision, self._config, self._pos)
         self._precision = precision
 
@@ -1260,12 +1308,21 @@ class Field(SimpleElement, _IDProperty, _NameProperty, _XtypeProperty,
 
         from ... import units as u
 
-        unit = u.Unit(unit, format='cds', parse_strict='silent')
-        if isinstance(unit, u.UnrecognizedUnit):
-            warn_or_raise(
-                W50, W50, (unit.to_string(),),
-                self._config, self._pos)
-        self._unit = unit
+        # First, parse the unit in the default way, so that we can
+        # still emit a warning if the unit is not to spec.
+        default_format = _get_default_unit_format(self._config)
+        unit_obj = u.Unit(
+            unit, format=default_format, parse_strict='silent')
+        if isinstance(unit_obj, u.UnrecognizedUnit):
+            warn_or_raise(W50, W50, (unit,),
+                          self._config, self._pos)
+
+        format = _get_unit_format(self._config)
+        if format != default_format:
+            unit_obj = u.Unit(
+                unit, format=format, parse_strict='silent')
+
+        self._unit = unit_obj
 
     @unit.deleter
     def unit(self):
@@ -1284,7 +1341,7 @@ class Field(SimpleElement, _IDProperty, _NameProperty, _XtypeProperty,
     @arraysize.setter
     def arraysize(self, arraysize):
         if (arraysize is not None and
-            not re.match(ur"^([0-9]+x)*[0-9]*[*]?(s\W)?$", arraysize)):
+            not re.match(r"^([0-9]+x)*[0-9]*[*]?(s\W)?$", arraysize)):
             vo_raise(E13, arraysize, self._config, self._pos)
         self._arraysize = arraysize
 
@@ -1348,7 +1405,7 @@ class Field(SimpleElement, _IDProperty, _NameProperty, _XtypeProperty,
                     link.parse(iterator, config)
                 elif tag == 'DESCRIPTION':
                     warn_unknown_attrs(
-                        'DESCRIPTION', data.iterkeys(), config, pos)
+                        'DESCRIPTION', six.iterkeys(data), config, pos)
                 elif tag != self._element_name:
                     self._add_unknown_tag(iterator, tag, data, config, pos)
             else:
@@ -1362,7 +1419,7 @@ class Field(SimpleElement, _IDProperty, _NameProperty, _XtypeProperty,
 
         if self.description is not None:
             self.title = " ".join(x.strip() for x in
-                                  self.description.split("\n"))
+                                  self.description.splitlines())
         else:
             self.title = self.name
 
@@ -1376,7 +1433,7 @@ class Field(SimpleElement, _IDProperty, _NameProperty, _XtypeProperty,
             attrib['unit'] = self.unit.to_string('cds')
         with w.tag(self._element_name, attrib=attrib):
             if self.description is not None:
-                w.element(u'DESCRIPTION', self.description, wrap=True)
+                w.element('DESCRIPTION', self.description, wrap=True)
             if not self.values.is_defaults():
                 self.values.to_xml(w, **kwargs)
             for link in self.links:
@@ -1399,7 +1456,7 @@ class Field(SimpleElement, _IDProperty, _NameProperty, _XtypeProperty,
             column.description = self.description
         if self.unit is not None:
             # TODO: Use units framework when it's available
-            column.units = self.unit
+            column.unit = self.unit
         if isinstance(self.converter, converters.FloatingPoint):
             column.format = self.converter.output_format
 
@@ -1415,8 +1472,8 @@ class Field(SimpleElement, _IDProperty, _NameProperty, _XtypeProperty,
             if val is not None:
                 kwargs[key] = val
         # TODO: Use the unit framework when available
-        if column.units is not None:
-            kwargs['unit'] = column.units
+        if column.unit is not None:
+            kwargs['unit'] = column.unit
         kwargs['name'] = column.name
         result = converters.table_column_to_votable_datatype(column)
         kwargs.update(result)
@@ -1467,8 +1524,8 @@ class Param(Field):
     def value(self, value):
         if value is None:
             value = ""
-        if ((IS_PY3K and isinstance(value, unicode)) or
-            (not IS_PY3K and isinstance(value, string_types))):
+        if ((six.PY3 and isinstance(value, six.text_type)) or
+            (not six.PY3 and isinstance(value, six.string_types))):
             self._value = self.converter.parse(
                 value, self._config, self._pos)[0]
         else:
@@ -1483,7 +1540,7 @@ class Param(Field):
         self._value = self.converter.output(tmp_value, False)
         # We must always have a value
         if self._value is None:
-            self._value = u""
+            self._value = ""
         Field.to_xml(self, w, **kwargs)
         self._value = tmp_value
 
@@ -1513,7 +1570,7 @@ class CooSys(SimpleElement):
         self.epoch   = epoch
         self.system  = system
 
-        warn_unknown_attrs('COOSYS', extra.iterkeys(), config, pos)
+        warn_unknown_attrs('COOSYS', six.iterkeys(extra), config, pos)
 
     @property
     def ID(self):
@@ -1750,7 +1807,7 @@ class Group(Element, _IDProperty, _NameProperty, _UtypeProperty,
         self._entries = HomogeneousList(
             (FieldRef, ParamRef, Group, Param))
 
-        warn_unknown_attrs('GROUP', extra.iterkeys(), config, pos)
+        warn_unknown_attrs('GROUP', six.iterkeys(extra), config, pos)
 
     @property
     def ref(self):
@@ -1823,11 +1880,11 @@ class Group(Element, _IDProperty, _NameProperty, _UtypeProperty,
 
     def to_xml(self, w, **kwargs):
         with w.tag(
-            u'GROUP',
+            'GROUP',
             attrib=w.object_attrs(
-                self, [u'ID', u'name', u'ref', u'ucd', u'utype'])):
+                self, ['ID', 'name', 'ref', 'ucd', 'utype'])):
             if self.description is not None:
-                w.element(u"DESCRIPTION", self.description, wrap=True)
+                w.element("DESCRIPTION", self.description, wrap=True)
             for entry in self.entries:
                 entry.to_xml(w, **kwargs)
 
@@ -1909,7 +1966,7 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
 
         self.array = ma.array([])
 
-        warn_unknown_attrs('TABLE', extra.iterkeys(), config, pos)
+        warn_unknown_attrs('TABLE', six.iterkeys(extra), config, pos)
 
     @property
     def ref(self):
@@ -1955,7 +2012,8 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
         [*required*] The serialization format of the table.  Must be
         one of:
 
-          'tabledata' (TABLEDATA_), 'binary' (BINARY_), 'fits' (FITS_).
+          'tabledata' (TABLEDATA_), 'binary' (BINARY_), 'binary2' (BINARY2_)
+          'fits' (FITS_).
 
         Note that the 'fits' format, since it requires an external
         file, can not be written out.  Any file read in with 'fits'
@@ -1969,7 +2027,12 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
         if format == 'fits':
             vo_raise("fits format can not be written out, only read.",
                      self._config, self._pos, NotImplementedError)
-        if format not in ('tabledata', 'binary'):
+        if format == 'binary2':
+            if not self._config['version_1_3_or_later']:
+                vo_raise(
+                    "binary2 only supported in votable 1.3 or later",
+                    self._config, self._pos)
+        elif format not in ('tabledata', 'binary'):
             vo_raise("Invalid format '%s'" % format,
                      self._config, self._pos)
         self._format = format
@@ -2054,7 +2117,7 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
 
             dtype = []
             for x in fields:
-                if IS_PY3K:
+                if six.PY3:
                     if x._unique_name == x.ID:
                         id = x.ID
                     else:
@@ -2151,7 +2214,7 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                 if start:
                     if tag == 'DATA':
                         warn_unknown_attrs(
-                            'DATA', data.iterkeys(), config, pos)
+                            'DATA', six.iterkeys(data), config, pos)
                         break
                 else:
                     if tag == 'TABLE':
@@ -2173,7 +2236,7 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                 if start:
                     if tag == 'DATA':
                         warn_unknown_attrs(
-                            'DATA', data.iterkeys(), config, pos)
+                            'DATA', six.iterkeys(data), config, pos)
                         break
 
                     tag_mapping.get(tag, self._add_unknown_tag)(
@@ -2193,9 +2256,9 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
         names = [x.ID for x in fields]
         # Deal with a subset of the columns, if requested.
         if not columns:
-            colnumbers = range(len(fields))
+            colnumbers = list(range(len(fields)))
         else:
-            if isinstance(columns, string_types):
+            if isinstance(columns, six.string_types):
                 columns = [columns]
             columns = np.asarray(columns)
             if issubclass(columns.dtype.type, np.integer):
@@ -2217,19 +2280,26 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                 if start:
                     if tag == 'TABLEDATA':
                         warn_unknown_attrs(
-                            'TABLEDATA', data.iterkeys(), config, pos)
+                            'TABLEDATA', six.iterkeys(data), config, pos)
                         self.array = self._parse_tabledata(
                             iterator, colnumbers, fields, config)
                         break
                     elif tag == 'BINARY':
                         warn_unknown_attrs(
-                            'BINARY', data.iterkeys(), config, pos)
+                            'BINARY', six.iterkeys(data), config, pos)
                         self.array = self._parse_binary(
-                            iterator, colnumbers, fields, config)
+                            1, iterator, colnumbers, fields, config, pos)
+                        break
+                    elif tag == 'BINARY2':
+                        if not config['version_1_3_or_later']:
+                            warn_or_raise(
+                                W52, W52, config['version'], config, pos)
+                        self.array = self._parse_binary(
+                            2, iterator, colnumbers, fields, config, pos)
                         break
                     elif tag == 'FITS':
                         warn_unknown_attrs(
-                            'FITS', data.iterkeys(), config, pos, ['extnum'])
+                            'FITS', six.iterkeys(data), config, pos, ['extnum'])
                         try:
                             extnum = int(data.get('extnum', 0))
                             if extnum < 0:
@@ -2293,7 +2363,7 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                     if start:
                         binary = (data.get('encoding', None) == 'base64')
                         warn_unknown_attrs(
-                            tag, data.iterkeys(), config, pos, ['encoding'])
+                            tag, six.iterkeys(data), config, pos, ['encoding'])
                     else:
                         if tag == 'TD':
                             if i >= len(fields):
@@ -2302,7 +2372,6 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                             if colnumbers_bits[i]:
                                 try:
                                     if binary:
-                                        import base64
                                         rawdata = base64.b64decode(
                                             data.encode('ascii'))
                                         buf = io.BytesIO(rawdata)
@@ -2377,15 +2446,13 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
 
         return array
 
-    def _parse_binary(self, iterator, colnumbers, fields, config):
-        fields = self.fields
-
+    def _get_binary_data_stream(self, iterator, config):
         have_local_stream = False
         for start, tag, data, pos in iterator:
             if tag == 'STREAM':
                 if start:
                     warn_unknown_attrs(
-                        'STREAM', data.iterkeys(), config, pos,
+                        'STREAM', six.iterkeys(data), config, pos,
                         ['type', 'href', 'actuate', 'encoding', 'expires',
                          'rights'])
                     if 'href' not in data:
@@ -2403,7 +2470,6 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                     break
 
         if have_local_stream:
-            import base64
             buffer = base64.b64decode(buffer.encode('ascii'))
             string_io = io.BytesIO(buffer)
             string_io.seek(0)
@@ -2416,8 +2482,7 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                     "The vo package only supports remote data through http, " +
                     "ftp or file",
                     self._config, self._pos, NotImplementedError)
-            import urllib2
-            fd = urllib2.urlopen(href)
+            fd = urllib.request.urlopen(href)
             if encoding is not None:
                 if encoding == 'gzip':
                     from ...utils.compat import gzip
@@ -2436,6 +2501,13 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                 raise EOFError
             return result
 
+        return careful_read
+
+    def _parse_binary(self, mode, iterator, colnumbers, fields, config, pos):
+        fields = self.fields
+
+        careful_read = self._get_binary_data_stream(iterator, config)
+
         # Need to have only one reference so that we can resize the
         # array
         array = self.array
@@ -2453,7 +2525,12 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
 
             row_data = []
             row_mask_data = []
+
             try:
+                if mode == 2:
+                    mask_bits = careful_read(int((len(fields) + 7) / 8))
+                    row_mask_data = list(converters.bitarray_to_bool(
+                        mask_bits, len(fields)))
                 for i, binparse in enumerate(binparsers):
                     try:
                         value, value_mask = binparse(careful_read)
@@ -2464,7 +2541,10 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                                    "(in row %d, col '%s')" %
                                    (numrows, fields[i].ID))
                     row_data.append(value)
-                    row_mask_data.append(value_mask)
+                    if mode == 1:
+                        row_mask_data.append(value_mask)
+                    else:
+                        row_mask_data[i] = row_mask_data[i] or value_mask
             except EOFError:
                 break
 
@@ -2487,7 +2567,7 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
             if tag == 'STREAM':
                 if start:
                     warn_unknown_attrs(
-                        'STREAM', data.iterkeys(), config, pos,
+                        'STREAM', six.iterkeys(data), config, pos,
                         ['type', 'href', 'actuate', 'encoding', 'expires',
                          'rights'])
                     href = data['href']
@@ -2503,8 +2583,7 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                 "ftp or file",
                 self._config, self._pos, NotImplementedError)
 
-        import urllib2
-        fd = urllib2.urlopen(href)
+        fd = urllib.request.urlopen(href)
         if encoding is not None:
             if encoding == 'gzip':
                 from ...utils.compat import gzip
@@ -2526,13 +2605,13 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
 
     def to_xml(self, w, **kwargs):
         with w.tag(
-            u'TABLE',
+            'TABLE',
             attrib=w.object_attrs(
                 self,
-                (u'ID', u'name', u'ref', u'ucd', u'utype', u'nrows'))):
+                ('ID', 'name', 'ref', 'ucd', 'utype', 'nrows'))):
 
             if self.description is not None:
-                w.element(u"DESCRIPTION", self.description, wrap=True)
+                w.element("DESCRIPTION", self.description, wrap=True)
 
             for element_set in (self.fields, self.params):
                 for element in element_set:
@@ -2543,18 +2622,24 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                                     self.links):
                     for element in element_set:
                         element.to_xml(w, **kwargs)
+            elif kwargs['version_1_2_or_later']:
+                index = list(self._votable.iter_tables()).index(self)
+                group = Group(self, ID="_g{0}".format(index))
+                group.to_xml(w, **kwargs)
 
             if len(self.array):
-                with w.tag(u'DATA'):
-                    if self.format == u'fits':
-                        self.format = u'tabledata'
+                with w.tag('DATA'):
+                    if self.format == 'fits':
+                        self.format = 'tabledata'
 
-                    if self.format == u'tabledata':
+                    if self.format == 'tabledata':
                         self._write_tabledata(w, **kwargs)
-                    elif self.format == u'binary':
-                        self._write_binary(w, **kwargs)
+                    elif self.format == 'binary':
+                        self._write_binary(1, w, **kwargs)
+                    elif self.format == 'binary2':
+                        self._write_binary(2, w, **kwargs)
 
-            if self.ref is None and kwargs['version_1_2_or_later']:
+            if kwargs['version_1_2_or_later']:
                 for element in self._infos:
                     element.to_xml(w, **kwargs)
 
@@ -2563,7 +2648,7 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
         array = self.array
 
         write_null_values = kwargs.get('write_null_values', False)
-        with w.tag(u'TABLEDATA'):
+        with w.tag('TABLEDATA'):
             w._flush()
             if (_has_c_tabledata_writer and
                 not kwargs.get('_debug_python_based_parser')):
@@ -2575,10 +2660,10 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
             else:
                 write = w.write
                 indent_spaces = w.get_indentation_spaces()
-                tr_start = indent_spaces + u"<TR>\n"
-                tr_end = indent_spaces + u"</TR>\n"
-                td = indent_spaces + u" <TD>%s</TD>\n"
-                td_empty = indent_spaces + u" <TD/>\n"
+                tr_start = indent_spaces + "<TR>\n"
+                tr_end = indent_spaces + "</TR>\n"
+                td = indent_spaces + " <TD>%s</TD>\n"
+                td_empty = indent_spaces + " <TD/>\n"
                 fields = [(i, field.converter.output)
                           for i, field in enumerate(fields)]
                 for row in xrange(len(array)):
@@ -2604,14 +2689,16 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                             write(td_empty)
                     write(tr_end)
 
-    def _write_binary(self, w, **kwargs):
-        import base64
-
+    def _write_binary(self, mode, w, **kwargs):
         fields = self.fields
         array = self.array
+        if mode == 1:
+            tag_name = 'BINARY'
+        else:
+            tag_name = 'BINARY2'
 
-        with w.tag(u'BINARY'):
-            with w.tag(u'STREAM', encoding='base64'):
+        with w.tag(tag_name):
+            with w.tag('STREAM', encoding='base64'):
                 fields_basic = [(i, field.converter.binoutput)
                                 for (i, field) in enumerate(fields)]
 
@@ -2619,6 +2706,11 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                 for row in xrange(len(array)):
                     array_row = array.data[row]
                     array_mask = array.mask[row]
+
+                    if mode == 2:
+                        flattened = np.array([np.all(x) for x in array_mask])
+                        data.write(converters.bool_to_bitarray(flattened))
+
                     for i, converter in fields_basic:
                         try:
                             chunk = converter(array_row[i], array_mask[i])
@@ -2632,10 +2724,20 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
                 w._flush()
                 w.write(base64.b64encode(data.getvalue()).decode('ascii'))
 
-    def to_table(self):
+    def to_table(self, use_names_over_ids=False):
         """
         Convert this VO Table to an `astropy.table.Table` instance.
 
+        Parameters
+        ----------
+        use_names_over_ids : bool, optional
+           When `True` use the `name` attributes of columns as the
+           names of columns in the `astropy.table.Table` instance.
+           Since names are not guaranteed to be unique, this may cause
+           some columns to be renamed by appending numbers to the end.
+           Otherwise (default), use the ID attributes as the column
+           names.
+
         .. warning::
 
            Variable-length array fields may not be restored
@@ -2650,10 +2752,30 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
             if val is not None:
                 meta[key] = val
 
+        if use_names_over_ids:
+            names = [field.name for field in self.fields]
+            unique_names = []
+            for i, name in enumerate(names):
+                new_name = name
+                i = 2
+                while new_name in unique_names:
+                    new_name = '{0}{1}'.format(name, i)
+                    i += 1
+                if sys.version_info[0] < 3:
+                    new_name = new_name.encode(
+                        sys.getdefaultencoding(), 'replace')
+                unique_names.append(new_name)
+            array = self.array.copy()
+            array.dtype.names = unique_names
+            names = unique_names
+        else:
+            array = self.array
+            names = [field.ID for field in self.fields]
+
         table = Table(self.array, meta=meta)
 
-        for field in self.fields:
-            column = table[field.ID]
+        for name, field in zip(names, self.fields):
+            column = table[name]
             field.to_table_column(column)
 
         return table
@@ -2697,8 +2819,8 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
             for field in group.iter_fields_and_params():
                 yield field
 
-    get_field_by_id = _lookup_by_id_factory(
-        'iter_fields_and_params', 'FIELD or PARAM',
+    get_field_by_id = _lookup_by_attr_factory(
+        'ID', True, 'iter_fields_and_params', 'FIELD or PARAM',
         """
         Looks up a FIELD or PARAM element by the given ID.
         """)
@@ -2709,6 +2831,13 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
         Looks up a FIELD or PARAM element by the given ID or name.
         """)
 
+    get_fields_by_utype = _lookup_by_attr_factory(
+        'utype', False, 'iter_fields_and_params', 'FIELD or PARAM',
+        """
+        Looks up a FIELD or PARAM element by the given utype and
+        returns an iterator emitting all matches.
+        """)
+
     def iter_groups(self):
         """
         Recursively iterate over all GROUP elements in the TABLE.
@@ -2718,13 +2847,19 @@ class Table(Element, _IDProperty, _NameProperty, _UcdProperty,
             for g in group.iter_groups():
                 yield g
 
-    get_group_by_id = _lookup_by_id_factory(
-        'iter_groups', 'GROUP',
+    get_group_by_id = _lookup_by_attr_factory(
+        'ID', True, 'iter_groups', 'GROUP',
         """
         Looks up a GROUP element by the given ID.  Used by the group's
         "ref" attribute
         """)
 
+    get_groups_by_utype = _lookup_by_attr_factory(
+        'utype', False, 'iter_groups', 'GROUP',
+        """
+        Looks up a GROUP element by the given utype and returns an
+        iterator emitting all matches.
+        """)
 
 
 class Resource(Element, _IDProperty, _NameProperty, _UtypeProperty,
@@ -2755,7 +2890,7 @@ class Resource(Element, _IDProperty, _NameProperty, _UtypeProperty,
         self._tables             = HomogeneousList(Table)
         self._resources          = HomogeneousList(Resource)
 
-        warn_unknown_attrs('RESOURCE', kwargs.iterkeys(), config, pos)
+        warn_unknown_attrs('RESOURCE', six.iterkeys(kwargs), config, pos)
 
     @property
     def type(self):
@@ -2894,11 +3029,11 @@ class Resource(Element, _IDProperty, _NameProperty, _UtypeProperty,
         return self
 
     def to_xml(self, w, **kwargs):
-        attrs = w.object_attrs(self, (u'ID', u'type', u'utype'))
+        attrs = w.object_attrs(self, ('ID', 'type', 'utype'))
         attrs.update(self.extra_attributes)
-        with w.tag(u'RESOURCE', attrib=attrs):
+        with w.tag('RESOURCE', attrib=attrs):
             if self.description is not None:
-                w.element(u"DESCRIPTION", self.description, wrap=True)
+                w.element("DESCRIPTION", self.description, wrap=True)
             for element_set in (self.coordinate_systems, self.params,
                                 self.infos, self.links, self.tables,
                                 self.resources):
@@ -2978,6 +3113,15 @@ class VOTableFile(Element, _IDProperty, _DescriptionProperty):
         """
         return self._version
 
+    @version.setter
+    def version(self, version):
+        version = str(version)
+        if version not in ('1.1', '1.2', '1.3'):
+            raise ValueError(
+                "astropy.io.votable only supports VOTable versions "
+                "1.1, 1.2 and 1.3")
+        self._version = version
+
     @property
     def coordinate_systems(self):
         """
@@ -3064,7 +3208,7 @@ class VOTableFile(Element, _IDProperty, _DescriptionProperty):
                                 W29, W29, config['version'], config, pos)
                             self._version = config['version'] = \
                                             config['version'][1:]
-                        if config['version'] not in ('1.1', '1.2'):
+                        if config['version'] not in ('1.1', '1.2', '1.3'):
                             vo_warn(W21, config['version'], config, pos)
 
                     if 'xmlns' in data:
@@ -3083,6 +3227,8 @@ class VOTableFile(Element, _IDProperty, _DescriptionProperty):
             util.version_compare(config['version'], '1.1') >= 0
         config['version_1_2_or_later'] = \
             util.version_compare(config['version'], '1.2') >= 0
+        config['version_1_3_or_later'] = \
+            util.version_compare(config['version'], '1.3') >= 0
 
         tag_mapping = {
             'PARAM'       : self._add_param,
@@ -3132,10 +3278,13 @@ class VOTableFile(Element, _IDProperty, _DescriptionProperty):
             'write_null_values': write_null_values,
             'version': self.version,
             'version_1_1_or_later':
-                util.version_compare(self.version, u'1.1') >= 0,
+                util.version_compare(self.version, '1.1') >= 0,
             'version_1_2_or_later':
-                util.version_compare(self.version, u'1.2') >= 0,
-            '_debug_python_based_parser': _debug_python_based_parser}
+                util.version_compare(self.version, '1.2') >= 0,
+            'version_1_3_or_later':
+                util.version_compare(self.version, '1.3') >= 0,
+            '_debug_python_based_parser': _debug_python_based_parser,
+            '_group_number': 1}
 
         with util.convert_to_writable_filelike(
             fd, compressed=compressed) as fd:
@@ -3146,22 +3295,22 @@ class VOTableFile(Element, _IDProperty, _DescriptionProperty):
             else:
                 lib_version = _astropy_version
 
-            xml_header = u"""
+            xml_header = """
 <?xml version="1.0" encoding="utf-8"?>
 <!-- Produced with astropy.io.votable version %(lib_version)s
      http://www.astropy.org/ -->\n"""
             w.write(xml_header.lstrip() % locals())
 
-            with w.tag(u'VOTABLE',
-                       {u'version': version,
-                        u'xmlns:xsi':
-                            u"http://www.w3.org/2001/XMLSchema-instance",
-                        u'xsi:noNamespaceSchemaLocation':
-                            u"http://www.ivoa.net/xml/VOTable/v%s" % version,
-                        u'xmlns':
-                            u"http://www.ivoa.net/xml/VOTable/v%s" % version}):
+            with w.tag('VOTABLE',
+                       {'version': version,
+                        'xmlns:xsi':
+                            "http://www.w3.org/2001/XMLSchema-instance",
+                        'xsi:noNamespaceSchemaLocation':
+                            "http://www.ivoa.net/xml/VOTable/v%s" % version,
+                        'xmlns':
+                            "http://www.ivoa.net/xml/VOTable/v%s" % version}):
                 if self.description is not None:
-                    w.element(u"DESCRIPTION", self.description, wrap=True)
+                    w.element("DESCRIPTION", self.description, wrap=True)
                 element_sets = [self.coordinate_systems, self.params,
                                 self.infos, self.resources]
                 if kwargs['version_1_2_or_later']:
@@ -3189,13 +3338,20 @@ class VOTableFile(Element, _IDProperty, _DescriptionProperty):
                 return table
         raise IndexError("No table found in VOTABLE file.")
 
-    get_table_by_id = _lookup_by_id_factory(
-        'iter_tables', 'TABLE',
+    get_table_by_id = _lookup_by_attr_factory(
+        'ID', True, 'iter_tables', 'TABLE',
         """
         Looks up a TABLE_ element by the given ID.  Used by the table
         "ref" attribute.
         """)
 
+    get_tables_by_utype = _lookup_by_attr_factory(
+        'utype', False, 'iter_tables', 'TABLE',
+        """
+        Looks up a TABLE_ element by the given utype, and returns an
+        iterator emitting all matches.
+        """)
+
     def get_table_by_index(self, idx):
         """
         Get a table by its ordinal position in the file.
@@ -3214,13 +3370,20 @@ class VOTableFile(Element, _IDProperty, _DescriptionProperty):
             for field in resource.iter_fields_and_params():
                 yield field
 
-    get_field_by_id = _lookup_by_id_factory(
-        'iter_fields_and_params', 'FIELD',
+    get_field_by_id = _lookup_by_attr_factory(
+        'ID', True, 'iter_fields_and_params', 'FIELD',
         """
         Looks up a FIELD_ element by the given ID_.  Used by the field's
         "ref" attribute.
         """)
 
+    get_fields_by_utype = _lookup_by_attr_factory(
+        'utype', False, 'iter_fields_and_params', 'FIELD',
+        """
+        Looks up a FIELD_ element by the given utype and returns an
+        iterator emitting all matches.
+        """)
+
     get_field_by_id_or_name = _lookup_by_id_or_name_factory(
         'iter_fields_and_params', 'FIELD',
         """
@@ -3235,8 +3398,8 @@ class VOTableFile(Element, _IDProperty, _DescriptionProperty):
         for field in self.iter_fields_and_params():
             yield field.values
 
-    get_values_by_id = _lookup_by_id_factory(
-        'iter_values', 'VALUES',
+    get_values_by_id = _lookup_by_attr_factory(
+        'ID', True, 'iter_values', 'VALUES',
         """
         Looks up a VALUES_ element by the given ID.  Used by the values
         "ref" attribute.
@@ -3251,13 +3414,20 @@ class VOTableFile(Element, _IDProperty, _DescriptionProperty):
             for group in table.iter_groups():
                 yield group
 
-    get_group_by_id = _lookup_by_id_factory(
-        'iter_groups', 'GROUP',
+    get_group_by_id = _lookup_by_attr_factory(
+        'ID', True, 'iter_groups', 'GROUP',
         """
         Looks up a GROUP_ element by the given ID.  Used by the group's
         "ref" attribute
         """)
 
+    get_groups_by_utype = _lookup_by_attr_factory(
+        'utype', False, 'iter_groups', 'GROUP',
+        """
+        Looks up a GROUP_ element by the given utype and returns an
+        iterator emitting all matches.
+        """)
+
     def iter_coosys(self):
         """
         Recursively iterate over all COOSYS_ elements in the VOTABLE_
@@ -3269,8 +3439,8 @@ class VOTableFile(Element, _IDProperty, _DescriptionProperty):
             for coosys in resource.iter_coosys():
                 yield coosys
 
-    get_coosys_by_id = _lookup_by_id_factory(
-        'iter_coosys', 'COOSYS',
+    get_coosys_by_id = _lookup_by_attr_factory(
+        'ID', True, 'iter_coosys', 'COOSYS',
         """Looks up a COOSYS_ element by the given ID.""")
 
     def set_all_tables_format(self, format):
diff --git a/astropy/io/votable/ucd.py b/astropy/io/votable/ucd.py
index 50e1753..ef796a3 100644
--- a/astropy/io/votable/ucd.py
+++ b/astropy/io/votable/ucd.py
@@ -3,7 +3,7 @@
 This file contains routines to verify the correctness of UCD strings.
 """
 
-from __future__ import with_statement, absolute_import
+from __future__ import absolute_import, division, print_function, unicode_literals
 
 #STDLIB
 import re
@@ -31,11 +31,11 @@ class UCDWords:
                 "data/ucd1p-words.txt", encoding='ascii') as fd:
             for line in fd.readlines():
                 type, name, descr = [
-                    x.strip() for x in line.split(u'|')]
+                    x.strip() for x in line.split('|')]
                 name_lower = name.lower()
-                if type in u'QPEV':
+                if type in 'QPEV':
                     self._primary.add(name_lower)
-                if type in u'QSEV':
+                if type in 'QSEV':
                     self._secondary.add(name_lower)
                 self._descriptions[name_lower] = descr
                 self._capitalization[name_lower] = name
@@ -105,34 +105,34 @@ def parse_ucd(ucd, check_controlled_vocabulary=False, has_colon=False):
         _ucd_singleton = UCDWords()
 
     if has_colon:
-        m = re.search(u'[^A-Za-z0-9_.:;\-]', ucd)
+        m = re.search('[^A-Za-z0-9_.:;\-]', ucd)
     else:
-        m = re.search(u'[^A-Za-z0-9_.;\-]', ucd)
+        m = re.search('[^A-Za-z0-9_.;\-]', ucd)
     if m is not None:
         raise ValueError("UCD has invalid character '%s' in '%s'" %
                          (m.group(0), ucd))
 
-    word_component_re = u'[A-Za-z0-9][A-Za-z0-9\-_]*'
-    word_re = u'%s(\.%s)*' % (word_component_re, word_component_re)
+    word_component_re = '[A-Za-z0-9][A-Za-z0-9\-_]*'
+    word_re = '%s(\.%s)*' % (word_component_re, word_component_re)
 
-    parts = ucd.split(u';')
+    parts = ucd.split(';')
     words = []
     for i, word in enumerate(parts):
-        colon_count = word.count(u':')
+        colon_count = word.count(':')
         if colon_count == 1:
-            ns, word = word.split(u':', 1)
+            ns, word = word.split(':', 1)
             if not re.match(word_component_re, ns):
                 raise ValueError("Invalid namespace '%s'" % ns)
             ns = ns.lower()
         elif colon_count > 1:
             raise ValueError("Too many colons in '%s'" % word)
         else:
-            ns = u'ivoa'
+            ns = 'ivoa'
 
         if not re.match(word_re, word):
             raise ValueError("Invalid word '%s'" % word)
 
-        if ns == u'ivoa' and check_controlled_vocabulary:
+        if ns == 'ivoa' and check_controlled_vocabulary:
             if i == 0:
                 if not _ucd_singleton.is_primary(word):
                     if _ucd_singleton.is_secondary(word):
diff --git a/astropy/io/votable/util.py b/astropy/io/votable/util.py
index 8fc5571..0270a3c 100644
--- a/astropy/io/votable/util.py
+++ b/astropy/io/votable/util.py
@@ -3,27 +3,25 @@
 Various utilities and cookbook-like things.
 """
 
-from __future__ import division, with_statement, absolute_import
+from __future__ import absolute_import, division, print_function, unicode_literals
+from ...extern import six
 
 # STDLIB
+import codecs
 import contextlib
-from distutils import version
 import io
 import re
-import sys
+
+from distutils import version
 
 
 __all__ = [
     'convert_to_writable_filelike',
     'stc_reference_frames',
     'coerce_range_list_param',
-    'is_callable'
     ]
 
 
-IS_PY3K = sys.hexversion >= 0x03000000
-
-
 @contextlib.contextmanager
 def convert_to_writable_filelike(fd, compressed=False):
     """
@@ -47,7 +45,7 @@ def convert_to_writable_filelike(fd, compressed=False):
     -------
     fd : writable file-like object
     """
-    if isinstance(fd, basestring):
+    if isinstance(fd, six.string_types):
         if fd.endswith('.gz') or compressed:
             from ...utils.compat import gzip
             with gzip.GzipFile(fd, 'wb') as real_fd:
@@ -61,7 +59,7 @@ def convert_to_writable_filelike(fd, compressed=False):
                 yield real_fd
                 return
     elif hasattr(fd, 'write'):
-        assert is_callable(fd.write)
+        assert six.callable(fd.write)
 
         if compressed:
             from ...utils.compat import gzip
@@ -71,7 +69,7 @@ def convert_to_writable_filelike(fd, compressed=False):
         # object
         needs_wrapper = False
         try:
-            fd.write(u'')
+            fd.write('')
         except TypeError:
             needs_wrapper = True
 
@@ -79,7 +77,6 @@ def convert_to_writable_filelike(fd, compressed=False):
             needs_wrapper = True
 
         if needs_wrapper:
-            import codecs
             yield codecs.getwriter('utf-8')(fd)
             fd.flush()
         else:
@@ -158,7 +155,7 @@ def coerce_range_list_param(p, frames=None, numeric=True):
             return str_or_none(x)
 
     def is_frame_of_reference(x):
-        return isinstance(x, basestring)
+        return isinstance(x, six.string_types)
 
     if p is None:
         return None, 0
@@ -181,7 +178,7 @@ def coerce_range_list_param(p, frames=None, numeric=True):
 
         return out, length
 
-    elif isinstance(p, basestring):
+    elif isinstance(p, six.string_types):
         number = r'([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)?'
         if not numeric:
             number = r'(' + number + ')|([A-Z_]+)'
@@ -218,19 +215,3 @@ def version_compare(a, b):
     bv = version_to_tuple(b)
     # Can't use cmp because it was removed from Python 3.x
     return (av > bv) - (av < bv)
-
-
-if IS_PY3K:  # pragma: py3
-    import collections
-
-    def is_callable(o):
-        """
-        Returns `True` if `o` is callable.
-        """
-        return isinstance(o, collections.Callable)
-else:  # pragma: py2
-    def is_callable(o):
-        """
-        Returns `True` if `o` is callable.
-        """
-        return callable(o)
diff --git a/astropy/io/votable/validator/__init__.py b/astropy/io/votable/validator/__init__.py
index ec43f18..155d0ea 100644
--- a/astropy/io/votable/validator/__init__.py
+++ b/astropy/io/votable/validator/__init__.py
@@ -1,6 +1,6 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 from .main import make_validation_report
 
-import main
+from . import main
 __doc__ = main.__doc__
 del main
diff --git a/astropy/io/votable/validator/html.py b/astropy/io/votable/validator/html.py
index 77bfdb6..0cddee9 100644
--- a/astropy/io/votable/validator/html.py
+++ b/astropy/io/votable/validator/html.py
@@ -1,5 +1,7 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from __future__ import with_statement, absolute_import
+from __future__ import absolute_import, division, print_function, unicode_literals
+from ....extern import six
+from ....extern.six.moves import xrange
 
 # STDLIB
 import contextlib
@@ -15,13 +17,13 @@ from .... import online_docs_root
 # VO
 from .. import exceptions
 
-html_header = u"""<?xml version="1.0" encoding="UTF-8"?>
+html_header = """<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html
         PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"
         "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
 """
 
-default_style = u"""
+default_style = """
 body {
 font-family: sans-serif
 }
@@ -64,12 +66,12 @@ table td {
 @contextlib.contextmanager
 def make_html_header(w):
     w.write(html_header)
-    with w.tag(u'html', xmlns=u"http://www.w3.org/1999/xhtml", lang=u"en-US"):
-        with w.tag(u'head'):
-            w.element(u'title', u'VO Validation results')
-            w.element(u'style', default_style)
+    with w.tag('html', xmlns="http://www.w3.org/1999/xhtml", lang="en-US"):
+        with w.tag('head'):
+            w.element('title', 'VO Validation results')
+            w.element('style', default_style)
 
-            with w.tag(u'body'):
+            with w.tag('body'):
                 yield
 
 
@@ -78,11 +80,11 @@ def write_source_line(w, line, nchar=0):
     char = xml_escape(line[nchar:nchar+1].decode('utf-8'))
     part2 = xml_escape(line[nchar+1:].decode('utf-8'))
 
-    w.write(u'  ')
+    w.write('  ')
     w.write(part1)
-    w.write(u'<span class="highlight">%s</span>' % char)
+    w.write('<span class="highlight">%s</span>' % char)
     w.write(part2)
-    w.write(u'\n\n')
+    w.write('\n\n')
 
 
 def write_warning(w, line, xml_lines):
@@ -90,22 +92,23 @@ def write_warning(w, line, xml_lines):
     if not warning['is_something']:
         w.data(line)
     else:
-        w.write(u'Line %d: ' % warning['nline'])
+        w.write('Line %d: ' % warning['nline'])
         if warning['warning']:
-            w.write(u'<a href="%s/%s">%s</a>: ' % (
+            w.write('<a href="%s/%s">%s</a>: ' % (
                 online_docs_root, warning['doc_url'], warning['warning']))
         msg = warning['message']
-        if not isinstance(warning['message'], unicode):
+        if not isinstance(warning['message'], six.text_type):
             msg = msg.decode('utf-8')
         w.write(xml_escape(msg))
-        w.write(u'\n')
-        write_source_line(w, xml_lines[warning['nline'] - 1], warning['nchar'])
+        w.write('\n')
+        if warning['nline'] >= 1 and warning['nline'] < len(xml_lines):
+            write_source_line(w, xml_lines[warning['nline'] - 1], warning['nchar'])
 
 
 def write_votlint_warning(w, line, xml_lines):
     match = re.search("(WARNING|ERROR|INFO) \(l.(?P<line>[0-9]+), c.(?P<column>[0-9]+)\): (?P<rest>.*)", line)
     if match:
-        w.write(u'Line %d: %s\n' %
+        w.write('Line %d: %s\n' %
                 (int(match.group('line')), xml_escape(match.group('rest'))))
         write_source_line(
             w, xml_lines[int(match.group('line')) - 1],
@@ -116,130 +119,131 @@ def write_votlint_warning(w, line, xml_lines):
 
 
 def write_result(result):
-    if result['network_error'] is not None:
+    if 'network_error' in result and result['network_error'] is not None:
         return
 
     xml = result.get_xml_content()
-    xml_lines = xml.split(b'\n')
+    xml_lines = xml.splitlines()
 
     path = os.path.join(result.get_dirpath(), 'index.html')
 
     with io.open(path, 'w', encoding='utf-8') as fd:
         w = XMLWriter(fd)
         with make_html_header(w):
-            with w.tag(u'p'):
-                with w.tag(u'a', href=u'vo.xml'):
+            with w.tag('p'):
+                with w.tag('a', href='vo.xml'):
                     w.data(result.url.decode('ascii'))
-            w.element(u'hr')
+            w.element('hr')
 
-            with w.tag(u'pre'):
+            with w.tag('pre'):
                 w._flush()
                 for line in result['warnings']:
                     write_warning(w, line, xml_lines)
 
             if result['xmllint'] is False:
-                w.element(u'hr')
-                w.element(u'p', 'xmllint results:')
+                w.element('hr')
+                w.element('p', 'xmllint results:')
                 content = result['xmllint_content']
-                if not isinstance(content, unicode):
+                if not isinstance(content, six.text_type):
                     content = content.decode('ascii')
                 content = content.replace(result.get_dirpath() + '/', '')
-                with w.tag(u'pre'):
+                with w.tag('pre'):
                     w.data(content)
 
             if 'votlint' in result:
                 if result['votlint'] is False:
-                    w.element(u'hr')
-                    w.element(u'p', 'votlint results:')
+                    w.element('hr')
+                    w.element('p', 'votlint results:')
                     content = result['votlint_content']
-                    if not isinstance(content, unicode):
+                    if not isinstance(content, six.text_type):
                         content = content.decode('ascii')
-                    with w.tag(u'pre'):
+                    with w.tag('pre'):
                         w._flush()
-                        for line in content.split('\n'):
+                        for line in content.splitlines():
                             write_votlint_warning(w, line, xml_lines)
 
 
 def write_result_row(w, result):
-    with w.tag(u'tr'):
-        with w.tag(u'td'):
-            if result['network_error'] is not None:
+    with w.tag('tr'):
+        with w.tag('td'):
+            if ('network_error' in result and
+                    result['network_error'] is not None):
                 w.data(result.url.decode('ascii'))
             else:
-                w.element(u'a', result.url.decode('ascii'),
-                          href=u'%s/index.html' % result.get_htmlpath())
-
-        if result['network_error'] is not None:
-            w.element(u'td', unicode(result['network_error']),
-                      attrib={u'class': u'red'})
-            w.element(u'td', '-')
-            w.element(u'td', '-')
-            w.element(u'td', '-')
-            w.element(u'td', '-')
+                w.element('a', result.url.decode('ascii'),
+                          href='%s/index.html' % result.get_htmlpath())
+
+        if 'network_error' in result and result['network_error'] is not None:
+            w.element('td', six.text_type(result['network_error']),
+                      attrib={'class': 'red'})
+            w.element('td', '-')
+            w.element('td', '-')
+            w.element('td', '-')
+            w.element('td', '-')
         else:
-            w.element(u'td', u'-', attrib={u'class': u'green'})
+            w.element('td', '-', attrib={'class': 'green'})
 
             if result['nexceptions']:
-                cls = u'red'
-                msg = u'Fatal'
+                cls = 'red'
+                msg = 'Fatal'
             elif result['nwarnings']:
-                cls = u'yellow'
-                msg = unicode(result['nwarnings'])
+                cls = 'yellow'
+                msg = six.text_type(result['nwarnings'])
             else:
-                cls = u'green'
-                msg = u'-'
-            w.element(u'td', msg, attrib={u'class': cls})
+                cls = 'green'
+                msg = '-'
+            w.element('td', msg, attrib={'class': cls})
 
             msg = result['version']
             if result['xmllint'] is None:
-                cls = u''
+                cls = ''
             elif result['xmllint'] is False:
-                cls = u'red'
+                cls = 'red'
             else:
-                cls = u'green'
-            w.element(u'td', msg, attrib={u'class': cls})
+                cls = 'green'
+            w.element('td', msg, attrib={'class': cls})
 
             if result['expected'] == 'good':
-                cls = u'green'
-                msg = u'-'
+                cls = 'green'
+                msg = '-'
             elif result['expected'] == 'broken':
-                cls = u'red'
-                msg = u'net'
+                cls = 'red'
+                msg = 'net'
             elif result['expected'] == 'incorrect':
-                cls = u'yellow'
-                msg = u'invalid'
-            w.element(u'td', msg, attrib={u'class': cls})
+                cls = 'yellow'
+                msg = 'invalid'
+            w.element('td', msg, attrib={'class': cls})
 
             if 'votlint' in result:
                 if result['votlint']:
-                    cls = u'green'
-                    msg = u'Passed'
+                    cls = 'green'
+                    msg = 'Passed'
                 else:
-                    cls = u'red'
-                    msg = u'Failed'
+                    cls = 'red'
+                    msg = 'Failed'
             else:
-                cls = u''
+                cls = ''
                 msg = '?'
-            w.element(u'td', msg, attrib={u'class': cls})
+            w.element('td', msg, attrib={'class': cls})
 
 
 def write_table(basename, name, results, root="results", chunk_size=500):
     def write_page_links(j):
         if npages <= 1:
             return
-        with w.tag(u'center'):
+        with w.tag('center'):
             if j > 0:
-                w.element(u'a', u'<< ', href=u'%s_%02d.html' % (basename, j-1))
+                w.element('a', '<< ', href='%s_%02d.html' % (basename, j-1))
             for i in xrange(npages):
                 if i == j:
-                    w.data(unicode(i+1))
+                    w.data(six.text_type(i+1))
                 else:
                     w.element(
-                        u'a', unicode(i+1),
-                        href=u'%s_%02d.html' % (basename, i))
+                        'a', six.text_type(i+1),
+                        href='%s_%02d.html' % (basename, i))
                 w.data(' ')
             if j < npages - 1:
-                w.element(u'a', u'>>', href=u'%s_%02d.html' % (basename, j+1))
+                w.element('a', '>>', href='%s_%02d.html' % (basename, j+1))
 
     npages = int(ceil(float(len(results)) / chunk_size))
 
@@ -253,14 +257,14 @@ def write_table(basename, name, results, root="results", chunk_size=500):
 
                 w.element('h2', name)
 
-                with w.tag(u'table'):
-                    with w.tag(u'tr'):
-                        w.element(u'th', u'URL')
-                        w.element(u'th', u'Network')
-                        w.element(u'th', u'Warnings')
-                        w.element(u'th', u'Schema')
-                        w.element(u'th', u'Expected')
-                        w.element(u'th', u'votlint')
+                with w.tag('table'):
+                    with w.tag('tr'):
+                        w.element('th', 'URL')
+                        w.element('th', 'Network')
+                        w.element('th', 'Warnings')
+                        w.element('th', 'Schema')
+                        w.element('th', 'Expected')
+                        w.element('th', 'votlint')
 
                     for result in subresults:
                         write_result_row(w, result)
@@ -277,7 +281,7 @@ def add_subset(w, basename, name, subresults, inside=['p'], total=None):
         with w.tag('td'):
             for element in inside:
                 w.start(element)
-            w.element(u'a', name, href=u'%s_00.html' % basename)
+            w.element('a', name, href='%s_00.html' % basename)
             for element in reversed(inside):
                 w.end(element)
         numbers = '%d (%.2f%%)' % (len(subresults), percentage * 100.0)
@@ -290,7 +294,7 @@ def write_index(subsets, results, root='results'):
     with io.open(path, 'w', encoding='utf-8') as fd:
         w = XMLWriter(fd)
         with make_html_header(w):
-            w.element(u'h1', u'VO Validation results')
+            w.element('h1', 'VO Validation results')
 
             with w.tag('table'):
                 for subset in subsets:
diff --git a/astropy/io/votable/validator/main.py b/astropy/io/votable/validator/main.py
index 94ad7b3..11462a7 100644
--- a/astropy/io/votable/validator/main.py
+++ b/astropy/io/votable/validator/main.py
@@ -3,7 +3,8 @@
 Validates a large collection of web-accessible VOTable files,
 and generates a report as a directory tree of HTML files.
 """
-from __future__ import print_function
+from __future__ import absolute_import, division, print_function, unicode_literals
+from ....extern import six
 
 # STDLIB
 import os
@@ -34,7 +35,7 @@ def get_urls(destdir, s):
             'urls/cone.{0}.dat.gz'.format(type))
         with gzip.open(filename, 'rb') as fd:
             for url in fd.readlines():
-                s.next()
+                six.next(s)
                 url = url.strip()
                 if url not in seen:
                     with result.Result(url, root=destdir) as r:
diff --git a/astropy/io/votable/validator/result.py b/astropy/io/votable/validator/result.py
index a0a619d..8607400 100644
--- a/astropy/io/votable/validator/result.py
+++ b/astropy/io/votable/validator/result.py
@@ -4,28 +4,28 @@ Contains a class to handle a validation result for a single VOTable
 file.
 """
 
-from __future__ import absolute_import
+from __future__ import absolute_import, division, print_function, unicode_literals
+from ....extern import six
+from ....extern.six.moves import http_client, urllib
+from ....extern.six.moves import cPickle as pickle
 
 # STDLIB
+from xml.parsers.expat import ExpatError
 import hashlib
-import httplib
 import os
-import cPickle as pickle
 import shutil
 import socket
 import subprocess
-import urllib2
 import warnings
 
 # VO
 from .. import table
 from .. import exceptions
 from .. import xmlutil
-from ..util import IS_PY3K
 
 
 class Result:
-    def __init__(self, url, root='results'):
+    def __init__(self, url, root='results', timeout=10):
         self.url = url
         m = hashlib.md5()
         m.update(url)
@@ -35,6 +35,7 @@ class Result:
             self._hash[0:2], self._hash[2:4], self._hash[4:])
         if not os.path.exists(self.get_dirpath()):
             os.makedirs(self.get_dirpath())
+        self.timeout = timeout
         self.load_attributes()
 
     def __enter__(self):
@@ -98,26 +99,27 @@ class Result:
         def fail(reason):
             reason = str(reason)
             with open(path, 'wb') as fd:
-                fd.write("FAILED: %s\n" % reason)
+                fd.write('FAILED: {0}\n'.format(reason).encode('utf-8'))
             self['network_error'] = reason
 
         r = None
         try:
-            if IS_PY3K:
-                r = urllib2.urlopen(self.url.decode('ascii'))
+            if six.PY3:
+                r = urllib.request.urlopen(
+                    self.url.decode('ascii'), timeout=self.timeout)
             else:
-                r = urllib2.urlopen(self.url, timeout=10)
-        except urllib2.URLError as e:
+                r = urllib.request.urlopen(self.url, timeout=self.timeout)
+        except urllib.error.URLError as e:
             if hasattr(e, 'reason'):
                 reason = e.reason
             else:
                 reason = e.code
             fail(reason)
             return
-        except httplib.HTTPException as e:
+        except http_client.HTTPException as e:
             fail("HTTPException: %s" % str(e))
             return
-        except socket.timeout as e:
+        except (socket.timeout, socket.error) as e:
             fail("Timeout")
             return
 
@@ -149,7 +151,7 @@ class Result:
         if not os.path.exists(path):
             self.download_xml_content()
         self['version'] = ''
-        if self['network_error'] is not None:
+        if 'network_error' in self and self['network_error'] is not None:
             self['nwarnings'] = 0
             self['nexceptions'] = 0
             self['warnings'] = []
@@ -165,7 +167,7 @@ class Result:
             with warnings.catch_warnings(record=True) as warning_lines:
                 try:
                     t = table.parse(input, pedantic=False, filename=path)
-                except ValueError as e:
+                except (ValueError, TypeError, ExpatError) as e:
                     lines.append(str(e))
                     nexceptions += 1
         lines = [str(x.message) for x in warning_lines] + lines
@@ -200,6 +202,9 @@ class Result:
         return warning_code in self['warning_types']
 
     def match_expectations(self):
+        if 'network_error' not in self:
+            self['network_error'] = None
+
         if self['expected'] == 'good':
             return (not self['network_error'] and
                     self['nwarnings'] == 0 and
@@ -245,29 +250,35 @@ def get_result_subsets(results, root, s=None):
 
     for url in results:
         if s:
-            s.next()
+            six.next(s)
+
+        if isinstance(url, Result):
+            x = url
+        else:
+            x = Result(url, root=root)
 
-        x = Result(url, root=root)
         all_results.append(x)
         if (x['nwarnings'] == 0 and
-            x['nexceptions'] == 0 and
-            x['xmllint'] is True):
+                x['nexceptions'] == 0 and
+                x['xmllint'] is True):
             correct.append(x)
         if not x.match_expectations():
             not_expected.append(x)
         if x['xmllint'] is False:
             fail_schema.append(x)
         if (x['xmllint'] is False and
-            x['nwarnings'] == 0 and
-            x['nexceptions'] == 0):
+                x['nwarnings'] == 0 and
+                x['nexceptions'] == 0):
             schema_mismatch.append(x)
         if 'votlint' in x and x['votlint'] is False:
             fail_votlint.append(x)
+            if 'network_error' not in x:
+                x['network_error'] = None
             if (x['nwarnings'] == 0 and
-                x['nexceptions'] == 0 and
-                x['network_error'] is None):
+                    x['nexceptions'] == 0 and
+                    x['network_error'] is None):
                 votlint_mismatch.append(x)
-        if x['network_error'] is not None:
+        if 'network_error' in x and x['network_error'] is not None:
             network_failures.append(x)
         version = x['version']
         if version == '1.0':
@@ -282,8 +293,8 @@ def get_result_subsets(results, root, s=None):
             has_warnings.append(x)
             for warning in x['warning_types']:
                 if (warning is not None and
-                    len(warning) == 3 and
-                    warning.startswith('W')):
+                        len(warning) == 3 and
+                        warning.startswith('W')):
                     warning_set.setdefault(warning, [])
                     warning_set[warning].append(x)
         if x['nexceptions'] > 0:
@@ -299,16 +310,16 @@ def get_result_subsets(results, root, s=None):
     exception_set.sort()
 
     tables = [
-        ('all', u'All tests', all_results),
-        ('correct', u'Correct', correct),
-        ('unexpected', u'Unexpected', not_expected),
-        ('schema', u'Invalid against schema', fail_schema),
-        ('schema_mismatch', u'Invalid against schema/Passed vo.table',
+        ('all', 'All tests', all_results),
+        ('correct', 'Correct', correct),
+        ('unexpected', 'Unexpected', not_expected),
+        ('schema', 'Invalid against schema', fail_schema),
+        ('schema_mismatch', 'Invalid against schema/Passed vo.table',
          schema_mismatch, ['ul']),
-        ('fail_votlint', u'Failed votlint', fail_votlint),
-        ('votlint_mismatch', u'Failed votlint/Passed vo.table',
+        ('fail_votlint', 'Failed votlint', fail_votlint),
+        ('votlint_mismatch', 'Failed votlint/Passed vo.table',
          votlint_mismatch, ['ul']),
-        ('network_failures', u'Network failures', network_failures),
+        ('network_failures', 'Network failures', network_failures),
         ('version1.0', 'Version 1.0', version_10),
         ('version1.1', 'Version 1.1', version_11),
         ('version1.2', 'Version 1.2', version_12),
@@ -316,7 +327,7 @@ def get_result_subsets(results, root, s=None):
         ('warnings', 'Warnings', has_warnings)]
     for warning_code, warnings in warning_set:
         if s:
-            s.next()
+            six.next(s)
 
         warning_class = getattr(exceptions, warning_code, None)
         if warning_class:
@@ -329,7 +340,7 @@ def get_result_subsets(results, root, s=None):
         ('exceptions', 'Exceptions', has_exceptions))
     for exception_code, exc in exception_set:
         if s:
-            s.next()
+            six.next(s)
 
         exception_class = getattr(exceptions, exception_code, None)
         if exception_class:
diff --git a/astropy/io/votable/voexceptions.py b/astropy/io/votable/voexceptions.py
index 2ae895a..5781b15 100644
--- a/astropy/io/votable/voexceptions.py
+++ b/astropy/io/votable/voexceptions.py
@@ -1,9 +1,11 @@
+from ...utils.exceptions import AstropyDeprecationWarning
+
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 if not _ASTROPY_SETUP_:
     import warnings
     warnings.warn(
         "astropy.io.votable.voexceptions is deprecated. "
         "Use astropy.io.votable.exceptions",
-        DeprecationWarning)
+        AstropyDeprecationWarning)
 
 from .exceptions import *
diff --git a/astropy/io/votable/volint.py b/astropy/io/votable/volint.py
index d3fc390..429332e 100644
--- a/astropy/io/votable/volint.py
+++ b/astropy/io/votable/volint.py
@@ -3,7 +3,6 @@
 Script support for validating a VO file.
 """
 
-from __future__ import absolute_import
 
 def main(args=None):
     from . import table
diff --git a/astropy/io/votable/xmlutil.py b/astropy/io/votable/xmlutil.py
index ba5a6e9..26f8691 100644
--- a/astropy/io/votable/xmlutil.py
+++ b/astropy/io/votable/xmlutil.py
@@ -3,16 +3,16 @@
 Various XML-related utilities
 """
 
-from __future__ import division, absolute_import
+from __future__ import absolute_import, division, print_function, unicode_literals
 
 # ASTROPY
+from ...logger import log
+from ...utils import data
 from ...utils.xml import check as xml_check
 from ...utils.xml import validate
 
 # LOCAL
-from .exceptions import (warn_or_raise, vo_warn,
-     W02, W03, W04, W05)
-from ...utils import data
+from .exceptions import (warn_or_raise, vo_warn, W02, W03, W04, W05)
 
 
 __all__ = [
@@ -91,7 +91,7 @@ def check_anyuri(uri, config={}, pos=None):
     return True
 
 
-def validate_schema(filename, version='1.2'):
+def validate_schema(filename, version='1.1'):
     """
     Validates the given file against the appropriate VOTable schema.
 
@@ -100,9 +100,10 @@ def validate_schema(filename, version='1.2'):
     filename : str
         The path to the XML file to validate
 
-    version : str
+    version : str, optional
         The VOTABLE version to check, which must be a string \"1.0\",
-        \"1.1\", or \"1.2\".
+        \"1.1\", \"1.2\" or \"1.3\".  If it is not one of these,
+        version \"1.1\" is assumed.
 
         For version \"1.0\", it is checked against a DTD, since that
         version did not have an XML Schema.
@@ -113,9 +114,12 @@ def validate_schema(filename, version='1.2'):
         Returns the returncode from xmllint and the stdout and stderr
         as strings
     """
-    assert version in ('1.0', '1.1', '1.2')
+    if version not in ('1.0', '1.1', '1.2', '1.3'):
+        log.info('{0} has version {1}, using schema 1.1'.format(
+            filename, version))
+        version = '1.1'
 
-    if version in ('1.1', '1.2'):
+    if version in ('1.1', '1.2', '1.3'):
         schema_path = data.get_pkg_data_filename(
             'data/VOTable.v{0}.xsd'.format(version))
     else:
diff --git a/astropy/logger.py b/astropy/logger.py
index 0746b3b..e72290a 100644
--- a/astropy/logger.py
+++ b/astropy/logger.py
@@ -14,7 +14,7 @@ from . import config
 from .utils.compat import inspect_getmodule
 from .utils.console import color_print
 from .utils.misc import find_current_module
-
+from .utils.exceptions import AstropyWarning, AstropyUserWarning
 
 __all__ = ['log', 'AstropyLogger', 'LoggingError']
 
@@ -52,11 +52,11 @@ USE_COLOR = ConfigurationItem('use_color', True,
 LOG_WARNINGS = ConfigurationItem('log_warnings', True,
                                  "Whether to log warnings.warn calls")
 
-LOG_EXCEPTIONS = ConfigurationItem('log_exceptions', True,
+LOG_EXCEPTIONS = ConfigurationItem('log_exceptions', False,
                                    "Whether to log exceptions before raising "
                                    "them")
 
-LOG_TO_FILE = ConfigurationItem('log_to_file', True,
+LOG_TO_FILE = ConfigurationItem('log_to_file', False,
                                 "Whether to always log messages to a log "
                                 "file")
 
@@ -160,12 +160,17 @@ class AstropyLogger(Logger):
     _showwarning_orig = None
 
     def _showwarning(self, *args, **kwargs):
+
+        # Bail out if we are not catching a warning from Astropy
+        if not isinstance(args[0], AstropyWarning):
+            return self._showwarning_orig(*args, **kwargs)
+
         warning = args[0]
         # Deliberately not using isinstance here: We want to display
         # the class name only when it's not the default class,
-        # UserWarning.  The name of subclasses of UserWarning should
+        # AstropyWarning.  The name of subclasses of AstropyWarning should
         # be displayed.
-        if type(warning) != UserWarning:
+        if type(warning) not in (AstropyWarning, AstropyUserWarning):
             message = '{0}: {1}'.format(warning.__class__.__name__, args[0])
         else:
             message = unicode(args[0])
@@ -372,7 +377,8 @@ class AstropyLogger(Logger):
             color_print(record.levelname, 'brown', end='')
         else:
             color_print(record.levelname, 'red', end='')
-        print(": {0} [{1:s}]".format(record.msg, record.origin))
+        record.message = "{0} [{1:s}]".format(record.msg, record.origin)
+        print(": " + record.message)
 
     @contextmanager
     def log_to_file(self, filename, filter_level=None, filter_origin=None):
diff --git a/astropy/modeling/__init__.py b/astropy/modeling/__init__.py
new file mode 100644
index 0000000..6d21ff3
--- /dev/null
+++ b/astropy/modeling/__init__.py
@@ -0,0 +1,13 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+This subpackage provides a framework for representing models and
+performing model evaluation and fitting. It supports 1D and 2D models
+and fitting with parameter constraints. It has some predefined models
+and fitting routines.
+"""
+
+from . import fitting
+from . import models
+from .core import *
+from .parameters import *
diff --git a/astropy/modeling/core.py b/astropy/modeling/core.py
new file mode 100644
index 0000000..e86694e
--- /dev/null
+++ b/astropy/modeling/core.py
@@ -0,0 +1,1115 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+This module defines base classes for all models.
+The base class of all models is `~astropy.modeling.Model`.
+`~astropy.modeling.ParametricModel` is the base class for all fittable models. Parametric
+models can be linear or nonlinear in a regression analysis sense.
+
+All models provide a `__call__` method which performs the transformation in a
+purely mathematical way, i.e. the models are unitless. In addition, when
+possible the transformation is done using multiple parameter sets, `param_sets`.
+The number of parameter sets is stored in an attribute `param_dim`.
+
+Parametric models also store a flat list of all parameters as an instance of
+`~astropy.modeling.parameters.Parameters`. When fitting, this list-like object is modified by a
+subclass of `~astropy.modeling.fitting.Fitter`. When fitting nonlinear models, the values of the
+parameters are used as initial guesses by the fitting class. Normally users
+will not have to use the `~astropy.modeling.parameters` module directly.
+
+Input Format For Model Evaluation and Fitting
+
+Input coordinates are passed in separate arguments, for example 2D models
+expect x and y coordinates to be passed separately as two scalars or aray-like
+objects.
+The evaluation depends on the input dimensions and the number of parameter
+sets but in general normal broadcasting rules apply.
+For example:
+
+- A model with one parameter set works with input in any dimensionality
+
+- A model with N parameter sets works with 2D arrays of shape (M, N).
+  A parameter set is applied to each column.
+
+- A model with N parameter sets works with multidimensional arrays if the
+  shape of the input array is (N, M, P). A parameter set is applied to each plane.
+
+In all these cases the output has the same shape as the input.
+
+- A model with N parameter sets works with 1D input arrays. The shape
+  of the output is (M, N)
+"""
+
+from __future__ import division
+
+import abc
+import functools
+import copy
+from itertools import izip
+from textwrap import dedent
+
+import numpy as np
+
+from .parameters import Parameter, InputParameterError
+from ..utils import indent, isiterable
+
+
+__all__ = ['Model', 'ParametricModel', 'SummedCompositeModel',
+           'SerialCompositeModel', 'LabeledInput', 'Parametric1DModel',
+           'Parametric2DModel', 'ModelDefinitionError', 'format_input']
+
+
+class ModelDefinitionError(Exception):
+    """Used for incorrect models definitions"""
+
+
+def format_input(func):
+    """
+    Wraps a model's ``__call__`` method so that the input arrays are converted
+    into the appropriate shape given the model's parameter dimensions.
+
+    Wraps the result to match the shape of the last input array.
+    """
+
+    @functools.wraps(func)
+    def wrapped_call(self, *args):
+        converted = []
+
+        for arg in args:
+            # Reset these flags; their value only matters for the last
+            # argument
+            transposed = False
+            scalar = False
+
+            arg = np.asarray(arg) + 0.
+            if self.param_dim == 1:
+                if arg.ndim == 0:
+                    scalar = True
+                converted.append(arg)
+                continue
+
+            if arg.ndim < 2:
+                converted.append(np.array([arg]).T)
+            elif arg.ndim == 2:
+                assert arg.shape[-1] == self.param_dim, \
+                    ("Cannot broadcast with shape "
+                     "({0}, {1})".format(arg.shape[0], arg.shape[1]))
+                converted.append(arg)
+            elif arg.ndim > 2:
+                assert arg.shape[0] == self.param_dim, \
+                    ("Cannot broadcast with shape "
+                     "({0}, {1}, {2})".format(arg.shape[0], arg.shape[1],
+                                              arg.shape[2]))
+                transposed = True
+                converted.append(arg.T)
+
+        result = func(self, *converted)
+
+        if transposed:
+            return result.T
+        elif scalar:
+            try:
+                return result[0]
+            except IndexError:
+                return result
+
+        return result
+
+    return wrapped_call
+
+
+class _ModelMeta(abc.ABCMeta):
+    """
+    Metaclass for Model.
+
+    Currently just handles auto-generating the param_names list based on
+    Parameter descriptors declared at the class-level of Model subclasses.
+    """
+
+    def __new__(mcls, name, bases, members):
+        param_names = members.get('param_names', [])
+        parameters = dict((value.name, value) for value in members.values()
+                          if isinstance(value, Parameter))
+
+        # If no parameters were defined get out early--this is especially
+        # important for PolynomialModels which take a different approach to
+        # parameters, since they can have a variable number of them
+        if not parameters:
+            return super(_ModelMeta, mcls).__new__(mcls, name, bases, members)
+
+        # If param_names was declared explicitly we use only the parameters
+        # listed manually in param_names, but still check that all listed
+        # parameters were declared
+        if param_names and isiterable(param_names):
+            for param_name in param_names:
+                if param_name not in parameters:
+                    raise RuntimeError(
+                        "Parameter {0!r} listed in {1}.param_names was not "
+                        "declared in the class body.".format(param_name, name))
+        else:
+            param_names = [param.name for param in
+                           sorted(parameters.values(),
+                                  key=lambda p: p._order)]
+            members['param_names'] = param_names
+
+        return super(_ModelMeta, mcls).__new__(mcls, name, bases, members)
+
+
+class Model(object):
+    """
+    Base class for all models.
+
+    This is an abstract class and should not be instantiated directly.
+
+    Notes
+    -----
+    Models which are not meant to be fit to data should subclass this class.
+
+    This class sets the properties for all individual parameters and performs
+    parameter validation.
+    """
+
+    __metaclass__ = _ModelMeta
+
+    param_names = []
+    n_inputs = 1
+    n_outputs = 1
+    fittable = False
+    linear = True
+
+    def __init__(self, param_dim=1):
+        self._param_dim = param_dim
+
+    @property
+    def param_dim(self):
+        """Number of parameter sets in a model."""
+
+        return self._param_dim
+
+    def __repr__(self):
+        fmt = "{0}(".format(self.__class__.__name__)
+        for name in self.param_names:
+            fmt1 = """
+            {0}={1},
+            """.format(name, getattr(self, name))
+            fmt += fmt1
+        fmt += ")"
+
+        return fmt
+
+    def __str__(self):
+        fmt = """
+        Model: {0}
+        Parameter sets: {1}
+        Parameters: \n{2}
+        """.format(
+              self.__class__.__name__,
+              self.param_dim,
+              indent('\n'.join('{0}: {1}'.format(n, getattr(self, n))
+                               for n in self.param_names),
+                     width=19))
+
+        return dedent(fmt[1:])
+
+    @property
+    def param_sets(self):
+        """
+        Return parameters as a pset.
+
+        This is an array where each column represents one parameter set.
+        """
+
+        parameters = [getattr(self, attr) for attr in self.param_names]
+        values = [par.value for par in parameters]
+        shapes = [par.shape for par in parameters]
+        n_dims = np.asarray([len(p.shape) for p in parameters])
+
+        if (n_dims > 1).any():
+            if () in shapes:
+                psets = np.asarray(values, dtype=np.object)
+            else:
+                psets = np.asarray(values)
+        else:
+            psets = np.asarray(values)
+            psets.shape = (len(self.param_names), self.param_dim)
+        return psets
+
+    def inverse(self):
+        """Returns a callable object which performs the inverse transform."""
+
+        raise NotImplementedError("An analytical inverse transform has not "
+                                  "been implemented for this model.")
+
+    def invert(self):
+        """Invert coordinates iteratively if possible."""
+
+        raise NotImplementedError("Subclasses should implement this")
+
+    def add_model(self, newtr, mode):
+        """
+        Create a CompositeModel by chaining the current model with the new one
+        using the specified mode.
+
+        Parameters
+        ----------
+        newtr : an instance of a subclass of Model
+        mode :  string
+               'parallel', 'serial', 'p' or 's'
+               a flag indicating whether to combine the models
+               in series or in parallel
+
+        Returns
+        -------
+        model : CompositeModel
+            an instance of CompositeModel
+        """
+
+        if mode in ['parallel', 'p']:
+            return SummedCompositeModel([self, newtr])
+        elif mode in ['serial', 's']:
+            return SerialCompositeModel([self, newtr])
+        else:
+            raise InputParameterError("Unrecognized mode {0}".format(mode))
+
+    def copy(self):
+        return copy.deepcopy(self)
+
+    @abc.abstractmethod
+    def __call__(self):
+        raise NotImplementedError("Subclasses should implement this")
+
+
+class ParametricModel(Model):
+    """
+    Base class for all fittable models.
+
+    Notes
+    -----
+    All models which can be fit to data should subclass this class.
+
+    Sets the ``parameters`` attributes.
+
+    Parameters
+    ----------
+    param_dim : int
+        number of parameter sets
+    fittable : bool
+        indicator if the model is fittable
+    fixed : a dict
+        a dictionary ``{parameter_name: boolean}`` of parameters to not be
+        varied during fitting. True means the parameter is held fixed.
+        Alternatively the `~astropy.modeling.parameters.Parameter.fixed`
+        property of a parameter may be used.
+    tied : dict
+        a dictionary ``{parameter_name: callable}`` of parameters which are
+        linked to some other parameter. The dictionary values are callables
+        providing the linking relationship.
+        Alternatively the `~astropy.modeling.parameters.Parameter.tied`
+        property of a parameter may be used.
+    bounds : dict
+        a dictionary ``{parameter_name: boolean}`` of lower and upper bounds of
+        parameters. Keys are parameter names. Values are a list of length 2
+        giving the desired range for the parameter.  Alternatively the
+        `~astropy.modeling.parameters.Parameter.min` and
+        `~astropy.modeling.parameters.Parameter.max` properties of a parameter
+        may be used.
+    eqcons : list
+        A list of functions of length n such that
+        ``eqcons[j](x0, *args) == 0.0`` in a successfully optimized
+        problem.
+    ineqcons : list
+        A list of functions of length n such that
+        ``ieqcons[j](x0, *args) >= 0.0`` is a successfully optimized
+        problem.
+
+    Examples
+    --------
+    >>> from astropy.modeling import models
+    >>> def tie_center(model):
+    ...         mean = 50 * model.stddev
+    ...         return mean
+    >>> tied_parameters = {'mean': tie_center}
+
+    Specify that ``'mean'`` is a tied parameter in one of two ways:
+
+    >>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3,
+    ...                             tied=tied_parameters)
+
+    or
+
+    >>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3)
+    >>> g1.mean.tied
+    False
+    >>> g1.mean.tied = tie_center
+    >>> g1.mean.tied
+    <function tie_center at 0x...>
+
+    Fixed parameters:
+
+    >>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3,
+    ...                             fixed={'stddev': True})
+    >>> g1.stddev.fixed
+    True
+
+    or
+
+    >>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3)
+    >>> g1.stddev.fixed
+    False
+    >>> g1.stddev.fixed = True
+    >>> g1.stddev.fixed
+    True
+    """
+
+    linear = False
+    deriv = None
+    # Flag that indicates if the model derivatives are given in columns
+    # or rows
+    col_deriv = True
+    fittable = True
+
+
+    def __init__(self, **kwargs):
+        # Pop any constraints off the keyword arguments
+        bounds = kwargs.pop('bounds', None)
+        fixed = kwargs.pop('fixed', None)
+        tied = kwargs.pop('tied', None)
+        eqcons = kwargs.pop('eqcons', None)
+        ineqcons = kwargs.pop('ineqcons', None)
+
+        # Pop off the param_dims
+        param_dim = kwargs.pop('param_dim', None)
+
+        # Remaining keyword args are either parameter values or invalid
+        # Parameter values must be passed in as keyword arguments in order to
+        # distinguish them
+        params = kwargs
+
+        # Determine the number of parameter sets: This will be based
+        # on the size of any parameters whose values have been specified
+        # or the default of 1 is used
+        # This loop also checks that all the supplied parameter names are
+        # valid
+        param_names = set(self.param_names)
+
+        max_param_dim = 1
+        for name, value in params.items():
+            if param_dim is None:
+                # Determine the best param_dims, if not already specified,
+                # based on the sizes of the input parameter values
+                max_param_dim = max(max_param_dim, np.size(value))
+
+            if name not in param_names:
+                raise ValueError(
+                    "Unrecognized parameter: {0}".format(name))
+
+        if param_dim is None:
+            param_dim = max_param_dim
+
+        super(ParametricModel, self).__init__(param_dim=param_dim)
+
+        # Initialize the constraints for each parameter
+        if eqcons is None:
+            self._eqcons = []
+        else:
+            self._eqcons = eqcons
+        if ineqcons is None:
+            self._ineqcons = []
+        else:
+            self._ineqcons = ineqcons
+
+        # Set constraints
+        self._constraints = {}
+
+        if fixed:
+            self._constraints['fixed'] = fixed
+        if tied:
+            self._constraints['tied'] = tied
+        if bounds:
+            self._constraints['bounds'] = bounds
+
+        self._initialize_parameters(params)
+
+
+    @property
+    def fixed(self):
+        """
+        A dictionary mapping parameter names to their fixed constraint
+        """
+
+        return dict((name, getattr(self, name).fixed)
+                    for name in self.param_names)
+
+    @property
+    def tied(self):
+        """
+        A dictionary mapping parameter names to their tied constraint
+        """
+
+        return dict((name, getattr(self, name).tied)
+                    for name in self.param_names)
+
+    @property
+    def bounds(self):
+        return dict((name, getattr(self, name).bounds)
+                    for name in self.param_names)
+
+    @property
+    def eqcons(self):
+        return self._eqcons
+
+    @property
+    def ineqcons(self):
+        return self._ineqcons
+
+    @property
+    def parameters(self):
+        """
+        A flattened array of all parameter values in all parameter sets
+
+        Fittable parameters maintain this list and fitters modify it.
+        """
+
+        return self._parameters
+
+    @parameters.setter
+    def parameters(self, value):
+        """
+        Assigning to this attribute updates the parameters array rather than
+        replacing it.
+        """
+
+        try:
+            value = np.array(value).reshape(self._parameters.shape)
+        except ValueError as e:
+            raise InputParameterError(
+                "Input parameter values not compatible with the model "
+                "parameters array: {0}".format(e))
+
+        self._parameters[:] = value
+
+    def __getattr__(self, attr):
+        if len(attr) > 1 and attr[0] == '_' and attr != '_param_metrics':
+            param_name = attr[1:]
+            if param_name in self._param_metrics:
+                param_slice, param_shape = self._param_metrics[param_name]
+                value = self._parameters[param_slice]
+                if self.param_dim == 1:
+                    return value[0]
+                else:
+                    if param_shape:
+                        return value.reshape(param_shape)
+                    else:
+                        return value[0]
+
+        raise AttributeError(attr)
+
+    def __setattr__(self, attr, value):
+        if (len(attr) > 1 and attr[0] == '_' and
+                hasattr(self, '_param_metrics')):
+            param_name = attr[1:]
+            if param_name in self._param_metrics:
+                # TODO: Maybe handle exception on invalid input shape
+                param_slice = self._param_metrics[param_name][0]
+                self._parameters[param_slice] = np.array(value).ravel()
+                return
+
+        super(ParametricModel, self).__setattr__(attr, value)
+
+    def __repr__(self):
+        try:
+            degree = str(self.deg)
+        except AttributeError:
+            degree = ""
+        try:
+            param_dim = str(self.param_dim)
+        except AttributeError:
+            param_dim = " "
+
+        if degree:
+            fmt = "<{0}({1}, ".format(self.__class__.__name__, repr(self.deg))
+        else:
+            fmt = "<{0}(".format(self.__class__.__name__)
+
+        for name in self.param_names:
+            fmt1 = "{0}={1}, ".format(name, getattr(self, name))
+            fmt += fmt1
+        if param_dim:
+            fmt += "param_dim={0})>".format(self.param_dim)
+
+        return fmt
+
+    def __str__(self):
+        try:
+            degree = str(self.degree)
+        except AttributeError:
+            degree = 'N/A'
+
+        fmt = """
+        Model: {0}
+        n_inputs:   {1}
+        Degree: {2}
+        Parameter sets: {3}
+        Parameters: \n{4}
+        """.format(
+              self.__class__.__name__,
+              self.n_inputs,
+              degree,
+              self.param_dim,
+              indent('\n'.join('{0}: {1}'.format(n, getattr(self, n))
+                     for n in self.param_names),
+                     width=19))
+
+        return dedent(fmt[1:])
+
+    def set_joint_parameters(self, jparams):
+        """
+        Used by the `JointFitter` class to store parameters which are
+        considered common for several models and are to be fitted together.
+        """
+        self.joint = jparams
+
+    def _model_to_fit_params(self):
+        """
+        Create a set of parameters to be fitted.
+
+        These may be a subset of the model parameters, if some of them are held
+        constant or tied.
+        """
+        fitparam_indices = range(len(self.param_names))
+        if any(self.fixed.values()) or any(self.tied.values()):
+            params = list(self.parameters)
+            for idx, name in list(enumerate(self.param_names))[::-1]:
+                if self.fixed[name] or self.tied[name]:
+                    sl = self._param_metrics[name][0]
+                    del params[sl]
+                    del fitparam_indices[idx]
+            return (np.array(params), fitparam_indices)
+        else:
+            return (self.parameters, fitparam_indices)
+
+    def _fitter_to_model_params(self, fps):
+        _fit_params, _fit_param_indices = self._model_to_fit_params()
+        if any(self.fixed.values()) or any(self.tied.values()):
+            self.parameters[_fit_param_indices] = fps
+            for idx, name in enumerate(self.param_names):
+                if self.tied[name] != False:
+                    value = self.tied[name](self)
+                    slice_ = self._param_metrics[name][0]
+                    self.parameters[slice_] = value
+        elif any([tuple(b) != (None, None) for b in self.bounds.values()]):
+            for name, par in zip(self.param_names, _fit_params):
+                if self.bounds[name] != (None, None):
+                    b = self.bounds[name]
+                    if b[0] is not None:
+                        par = max(par, self.bounds[name][0])
+                    if b[1] is not None:
+                        par = min(par, self.bounds[name][1])
+                    setattr(self, name, par)
+        else:
+            self.parameters = fps
+
+    def _initialize_parameters(self, params):
+        """
+        Initialize the _parameters array that stores raw parameter values for
+        all parameter sets for use with vectorized fitting algorithms; on
+        ParametricModels the _param_name attributes actually just reference
+        slices of this array.
+        """
+
+        # First we need to determine how much array space is needed by all the
+        # parameters based on the number of parameters, the shape each input
+        # parameter, and the param_dim
+        self._param_metrics = {}
+        total_size = 0
+        for name in self.param_names:
+
+            if params.get(name) is None:
+                # parameters that were not supplied at all or that have
+                # defaults of None should attempt to use the default provided
+                # by their Parameter descriptor
+                params[name] = getattr(self, name).default
+
+            value = params[name]
+
+            param_size = np.size(value)
+            param_shape = np.shape(value)
+
+            if self.param_dim == 1:
+                pass
+            elif self.param_dim > 1:
+                if param_size == 1:
+                    param_size = self.param_dim
+                    # Update the value for this param to the new repeated
+                    # version
+                    value = params[name] = np.repeat(value, param_size)
+                    param_shape = value.shape
+            else:
+                raise ValueError("Model param_dim must be 1 or greater.")
+
+            if (param_size > 1 and param_size != self.param_dim and
+                    len(value) != self.param_dim):
+                # The len(value) == self.param_dim case is a special case
+                # (see #1680) where the parameter has compound values (like [1,
+                # 2]) but we're passing in two (or more) param sets, so we want
+                # to make sure a value like [[1, 2], [3, 4]] is interpreted as
+                # having values for 2 param sets, not 4.
+
+                # For now all parameter values must have a number of elements
+                # equal to param_dim (the number of param sets) or it is
+                # invalid.  The *only* exception is, again, a scalar value is
+                # allowed to be repeated across param sets
+                raise InputParameterError(
+                    "The input value for {0!r} has too many elements for "
+                    "param_dim={1}.  Parameter values must either match the "
+                    "model's param_dim in size, or may be a scalar value, in "
+                    "which case the value is repeated accross parameter "
+                    "sets.".format(name, self.param_dim))
+
+            param_slice = slice(total_size, total_size + param_size)
+            self._param_metrics[name] = (param_slice, param_shape)
+            total_size += param_size
+
+        self._parameters = np.empty(total_size, dtype=np.float64)
+
+        # Now set the parameter values (this will also fill
+        # self._parameters)
+        for name, value in params.items():
+            setattr(self, name, value)
+
+
+    def _model_to_fit_params(self):
+        """
+        Create a set of parameters to be fitted.
+
+        These may be a subset of the model parameters, if some of them are held
+        constant or tied.
+
+        This is an adapter of the model parameters to fitters, none of which
+        currently support parameters with tied/fixed constraints.
+
+        TODO: It may make more sense to make this adaptation on the Fitter end,
+        since one could conceivably implement a fitter from scratch (for
+        Astropy specifically) that understands how to use tied constraints, for
+        example.
+        """
+
+        fitparam_indices = range(len(self.param_names))
+        if any(self.fixed.values()) or any(self.tied.values()):
+            params = list(self.parameters)
+            for idx, name in list(enumerate(self.param_names))[::-1]:
+                if self.fixed[name] or self.tied[name]:
+                    sl = self._param_metrics[name][0]
+                    del params[sl]
+                    del fitparam_indices[idx]
+            return (np.array(params), fitparam_indices)
+        else:
+            return (self.parameters, fitparam_indices)
+
+
+class LabeledInput(dict):
+    """
+    Create a container with all input data arrays, assigning labels for
+    each one.
+
+    Used by CompositeModel to choose input data using labels
+
+    Parameters
+    ----------
+    data : list
+        a list of all input data
+    labels : list of strings
+        names matching each coordinate in data
+
+    Returns
+    -------
+    data : LabeledData
+        a dict of input data and their assigned labels
+
+    Examples
+    --------
+    >>> x,y = np.mgrid[:5, :5]
+    >>> l = np.arange(10)
+    >>> ado = LabeledInput([x, y, l], ['x', 'y', 'pixel'])
+    >>> ado.x
+    array([[0, 0, 0, 0, 0],
+           [1, 1, 1, 1, 1],
+           [2, 2, 2, 2, 2],
+           [3, 3, 3, 3, 3],
+           [4, 4, 4, 4, 4]])
+    >>> ado['x']
+    array([[0, 0, 0, 0, 0],
+           [1, 1, 1, 1, 1],
+           [2, 2, 2, 2, 2],
+           [3, 3, 3, 3, 3],
+           [4, 4, 4, 4, 4]])
+    """
+
+    def __init__(self, data, labels):
+        dict.__init__(self)
+        assert len(labels) == len(data)
+        self.labels = [l.strip() for l in labels]
+        for coord, label in zip(data, labels):
+            self[label] = coord
+            setattr(self, '_' + label, coord)
+        self._set_properties(self.labels)
+
+    def _getlabel(self, name):
+        par = getattr(self, '_' + name)
+        return par
+
+    def _setlabel(self, name, val):
+        setattr(self, '_' + name, val)
+        self[name] = val
+
+    def _dellabel(self, name):
+        delattr(self, '_' + name)
+        del self[name]
+
+    def add(self, label=None, value=None, **kw):
+        """
+        Add input data to a LabeledInput object
+
+        Parameters
+        --------------
+        label : str
+            coordinate label
+        value : numerical type
+            coordinate value
+        kw : dictionary
+            if given this is a dictionary of {label: value} pairs
+        """
+
+        if kw:
+            if label is None or value is None:
+                self.update(kw)
+            else:
+                kw[label] = value
+                self.update(kw)
+        else:
+            kw = dict({label: value})
+            assert(label is not None and value is not None), (
+                "Expected label and value to be defined")
+            self[label] = value
+
+        for key in kw:
+            self.__setattr__('_' + key, kw[key])
+        self._set_properties(kw.keys())
+
+    def _set_properties(self, attributes):
+        for attr in attributes:
+            setattr(self.__class__, attr, property(lambda self, attr=attr:
+                                                   self._getlabel(attr),
+                    lambda self, value, attr=attr:
+                                                   self._setlabel(attr, value),
+                    lambda self, attr=attr:
+                                                   self._dellabel(attr)
+                                                   )
+                    )
+
+    def copy(self):
+        data = [self[label] for label in self.labels]
+        return LabeledInput(data, self.labels)
+
+
+class _CompositeModel(Model):
+    def __init__(self, transforms, n_inputs, n_outputs):
+        """Base class for all composite models."""
+
+        self._transforms = transforms
+        param_names = []
+        for tr in self._transforms:
+            param_names.extend(tr.param_names)
+        super(_CompositeModel, self).__init__()
+        self.param_names = param_names
+        self.n_inputs = n_inputs
+        self.n_outputs = n_outputs
+        self.fittable = False
+
+    def __repr__(self):
+        fmt = """
+            Model:  {0}
+            """.format(self.__class__.__name__)
+        fmt_args = tuple(repr(tr) for tr in self._transforms)
+        fmt1 = (" %s  " * len(self._transforms)) % fmt_args
+        fmt = fmt + fmt1
+        return fmt
+
+    def __str__(self):
+        fmt = """
+            Model:  {0}
+            """.format(self.__class__.__name__)
+        fmt_args = tuple(str(tr) for tr in self._transforms)
+        fmt1 = (" %s  " * len(self._transforms)) % fmt_args
+        fmt = fmt + fmt1
+        return fmt
+
+    def add_model(self, transf, inmap, outmap):
+        self[transf] = [inmap, outmap]
+
+    def invert(self):
+        raise NotImplementedError("Subclasses should implement this")
+
+    def __call__(self):
+        # implemented by subclasses
+        raise NotImplementedError("Subclasses should implement this")
+
+
+class SerialCompositeModel(_CompositeModel):
+    """
+    Composite model that evaluates models in series.
+
+    Parameters
+    ----------
+    transforms : list
+        a list of transforms in the order to be executed
+    inmap : list of lists or None
+        labels in an input instance of LabeledInput
+        if None, the number of input coordinates is exactly what
+        the transforms expect
+    outmap : list or None
+        labels in an input instance of LabeledInput
+        if None, the number of output coordinates is exactly what
+        the transforms expect
+
+    Notes
+    -----
+    Output values of one model are used as input values of another.
+    Obviously the order of the models matters.
+
+    Examples
+    --------
+    Apply a 2D rotation followed by a shift in x and y::
+
+        >>> import numpy as np
+        >>> from astropy.modeling import models, LabeledInput, SerialCompositeModel
+        >>> x, y = np.mgrid[:5, :5]
+        >>> rotation = models.MatrixRotation2D(angle=23.5)
+        >>> offset_x = models.Shift(-4.23)
+        >>> offset_y = models.Shift(2)
+        >>> labeled_input = LabeledInput([x, y], ["x", "y"])
+        >>> transform = SerialCompositeModel([rotation, offset_x, offset_y],
+        ...                                  inmap=[['x', 'y'], ['x'], ['y']],
+        ...                                  outmap=[['x', 'y'], ['x'], ['y']])
+        >>> result = transform(labeled_input)
+    """
+
+    def __init__(self, transforms, inmap=None, outmap=None, n_inputs=None,
+                 n_outputs=None):
+        if n_inputs is None:
+            n_inputs = max([tr.n_inputs for tr in transforms])
+            # the output dimension is equal to the output dim of the last
+            # transform
+            n_outputs = transforms[-1].n_outputs
+        else:
+            assert n_outputs is not None, "Expected n_inputs and n_outputs"
+            n_inputs = n_inputs
+            n_outputs = n_outputs
+
+        super(SerialCompositeModel, self).__init__(transforms, n_inputs,
+                                                   n_outputs)
+
+        if transforms and inmap and outmap:
+            assert len(transforms) == len(inmap) == len(outmap), \
+                "Expected sequences of transform, " \
+                "inmap and outmap to have the same length"
+
+        if inmap is None:
+            inmap = [None] * len(transforms)
+
+        if outmap is None:
+            outmap = [None] * len(transforms)
+
+        self._inmap = inmap
+        self._outmap = outmap
+
+    def inverse(self):
+        try:
+            transforms = [tr.inverse() for tr in self._transforms[::-1]]
+        except NotImplementedError:
+            raise
+        if self._inmap is not None:
+            inmap = self._inmap[::-1]
+            outmap = self._outmap[::-1]
+        else:
+            inmap = None
+            outmap = None
+        return SerialCompositeModel(transforms, inmap, outmap)
+
+    def __call__(self, *data):
+        """Transforms data using this model."""
+
+        if len(data) == 1:
+            if not isinstance(data[0], LabeledInput):
+                assert self._transforms[0].n_inputs == 1, \
+                    "First transform expects {0} inputs, 1 given".format(
+                        self._transforms[0].n_inputs)
+
+                result = data[0]
+                for tr in self._transforms:
+                    result = tr(result)
+                return result
+            else:
+                labeled_input = data[0].copy()
+                # we want to return the entire labeled object because some
+                # parts of it may be used in another transform of which this
+                # one is a component
+                assert self._inmap is not None, \
+                    ("Parameter 'inmap' must be provided when "
+                     "input is a labeled object.")
+                assert self._outmap is not None, \
+                    ("Parameter 'outmap' must be provided when input is a "
+                     "labeled object")
+
+                for transform, incoo, outcoo in izip(self._transforms,
+                                                     self._inmap,
+                                                     self._outmap):
+                    inlist = [labeled_input[label] for label in incoo]
+                    result = transform(*inlist)
+                    if len(outcoo) == 1:
+                        result = [result]
+                    for label, res in zip(outcoo, result):
+
+                        if label not in labeled_input.labels:
+                            labeled_input[label] = res
+                        setattr(labeled_input, label, res)
+                return labeled_input
+        else:
+            assert self.n_inputs == len(data), \
+                "This transform expects {0} inputs".format(self._n_inputs)
+
+            result = self._transforms[0](*data)
+            for transform in self._transforms[1:]:
+                result = transform(*result)
+        return result
+
+
+class SummedCompositeModel(_CompositeModel):
+    """
+    Composite model that evaluates models in parallel.
+
+    Parameters
+    --------------
+    transforms : list
+        transforms to be executed in parallel
+    inmap : list or None
+        labels in an input instance of LabeledInput
+        if None, the number of input coordinates is exactly what the
+        transforms expect
+    outmap : list or None
+
+    Notes
+    -----
+    Evaluate each model separately and add the results to the input_data.
+    """
+
+    def __init__(self, transforms, inmap=None, outmap=None):
+        self._transforms = transforms
+        n_inputs = self._transforms[0].n_inputs
+        n_outputs = n_inputs
+        for transform in self._transforms:
+            assert transform.n_inputs == transform.n_outputs == n_inputs, \
+                ("A SummedCompositeModel expects n_inputs = n_outputs for "
+                 "all transforms")
+
+        super(SummedCompositeModel, self).__init__(transforms, n_inputs,
+                                                   n_outputs)
+
+        self._inmap = inmap
+        self._outmap = outmap
+
+    def __call__(self, *data):
+        """Transforms data using this model."""
+
+        if len(data) == 1:
+            if not isinstance(data[0], LabeledInput):
+                x = data[0]
+                deltas = sum(tr(x) for tr in self._transforms)
+                return deltas
+            else:
+                assert self._inmap is not None, \
+                    ("Parameter 'inmap' must be provided when "
+                     "input is a labeled object.")
+                assert self._outmap is not None, \
+                    ("Parameter 'outmap' must be provided when input is a "
+                     "labeled object")
+                labeled_input = data[0].copy()
+                # create a list of inputs to be passed to the transforms
+                inlist = [getattr(labeled_input, label)
+                          for label in self._inmap]
+                sum_of_deltas = [np.zeros_like(x) for x in inlist]
+                for transform in self._transforms:
+                    delta = [transform(*inlist)]
+                    for i in range(len(sum_of_deltas)):
+                        sum_of_deltas[i] += delta[i]
+
+                for outcoo, delta in izip(self._outmap, sum_of_deltas):
+                    setattr(labeled_input, outcoo, delta)
+                # always return the entire labeled object, not just the result
+                # since this may be part of another composite transform
+                return labeled_input
+        else:
+            result = self._transforms[0](*data)
+            assert self.n_inputs == self.n_outputs
+            for tr in self._transforms[1:]:
+                result += tr(*data)
+            return result
+
+
+class Parametric1DModel(ParametricModel):
+    """
+    Base class for one dimensional parametric models.
+
+    This class provides an easier interface to defining new models.
+    Examples can be found in functional_models.py
+
+    Parameters
+    ----------
+    parameters : dictionary
+        Dictionary of model parameters with initialisation values
+        {'parameter_name': 'parameter_value'}
+    """
+
+    @format_input
+    def __call__(self, x):
+        """
+        Transforms data using this model.
+
+        Parameters
+        ----------
+        x : array like or a number
+            input
+        """
+
+        return self.eval(x, *self.param_sets)
+
+
+class Parametric2DModel(ParametricModel):
+    """
+    Base class for two dimensional parametric models.
+
+    This class provides an easier interface to defining new models.
+    Examples can be found in functional_models.py
+
+    Parameters
+    ----------
+    parameter_dict : dictionary
+        Dictionary of model parameters with initialization values
+        {'parameter_name': 'parameter_value'}
+    """
+
+    n_inputs = 2
+    n_outputs = 1
+
+    @format_input
+    def __call__(self, x, y):
+        """
+        Transforms data using this model.
+
+        Parameters
+        ----------
+        x : array like or a number
+            input
+        """
+
+        return self.eval(x, y, *self.param_sets)
diff --git a/astropy/modeling/fitting.py b/astropy/modeling/fitting.py
new file mode 100644
index 0000000..b110cc7
--- /dev/null
+++ b/astropy/modeling/fitting.py
@@ -0,0 +1,779 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+This module provides wrappers, called Fitters, around some Numpy and Scipy
+fitting functions. All Fitters take an instance of `~astropy.modeling.core.ParametricModel`
+as input and define a ``__call__`` method which fits the model to the data and changes the
+model's parameters attribute. The idea is to make this extensible and allow
+users to easily add other fitters.
+
+Linear fitting is done using Numpy's `~numpy.linalg.lstsq` function.
+There are currently two non-linear fitters which use `~scipy.optimize.leastsq` and
+`~scipy.optimize.slsqp` functions in scipy.optimize.\
+"""
+
+from __future__ import division
+
+import abc
+import numbers
+import warnings
+
+from functools import reduce
+
+import numpy as np
+
+from ..logger import log
+from .utils import poly_map_domain
+from ..utils.exceptions import AstropyUserWarning
+
+
+
+__all__ = ['LinearLSQFitter', 'NonLinearLSQFitter', 'SLSQPFitter',
+           'JointFitter', 'Fitter']
+
+
+
+DEFAULT_MAXITER = 100
+DEFAULT_EPS = np.sqrt(np.finfo(float).eps)
+DEFAULT_MAX_BOUND = 10 ** 12
+DEFAULT_MIN_BOUND = -10 ** 12
+
+
+def _convert_input(x, y, z=None):
+    x = np.asarray(x)
+    y = np.asarray(y)
+    if x.shape[0] != y.shape[0]:
+        raise ValueError("x and y should have the same shape")
+    if z is None:
+        farg = (x, y)
+    else:
+        z = np.asarray(z)
+        if x.shape != z.shape:
+            raise ValueError("x, y and z should have the same shape")
+        farg = (x, y, z)
+    return farg
+
+
+class ModelsError(Exception):
+    """Base class for model exceptions"""
+
+
+class ModelLinearityError(ModelsError):
+    """
+    Raised when a linear model is passed to a non-linear fitter and vice versa.
+    """
+
+
+class UnsupportedConstraintError(ModelsError, ValueError):
+    """
+    Raised when a fitter does not support a type of constraint.
+    """
+
+
+class Fitter(object):
+    """
+    Base class for all fitters.
+
+    The purpose of this class is to manage constraints.
+    """
+
+    __metaclass__ = abc.ABCMeta
+
+    # The base Fitter does not support any constraints by default; individual
+    # fitters should explicitly set this list to the specific constraints
+    # it supports
+    # May contain any of 'bounds', 'eqcons', 'ineqcons', 'fixed', or 'tied'
+    supported_constraints = []
+
+    def __init__(self):
+        self._weights = None
+
+    def _validate_constraints(self, model):
+        message = '{0} cannot handle {{0}} constraints.'.format(
+                self.__class__.__name__)
+
+        if (any(model.fixed.values()) and
+                'fixed' not in self.supported_constraints):
+            raise UnsupportedConstraintError(
+                    message.format('fixed parameter'))
+
+        if (any(model.tied.values()) and
+                'tied' not in self.supported_constraints):
+            raise UnsupportedConstraintError(
+                    message.format('tied parameter'))
+
+        if (any([tuple(b) != (None, None) for b in model.bounds.values()]) and
+                'bounds' not in self.supported_constraints):
+            raise UnsupportedConstraintError(
+                    message.format('bound parameter'))
+
+        if model.eqcons and 'eqcons' not in self.supported_constraints:
+            raise UnsupportedConstraintError(message.format('equality'))
+
+        if (model.ineqcons and
+                'ineqcons' not in self.supported_constraints):
+            raise UnsupportedConstraintError(message.format('inequality'))
+
+    # TODO
+    # @property
+    # def covar(self):
+    #     return None
+
+    @abc.abstractmethod
+    def __call__(self):
+        """
+        This method performs the actual fitting and modifies the parameter list
+        of a model.
+
+        Fitter subclasses should implement this method.
+        """
+
+        raise NotImplementedError("Subclasses should implement this")
+
+    def _fitter_to_model_params(self, model, fps):
+        _fit_params, _fit_param_indices = model._model_to_fit_params()
+        if any(model.fixed.values()) or any(model.tied.values()):
+            model.parameters[_fit_param_indices] = fps
+            for idx, name in enumerate(model.param_names):
+                if model.tied[name] != False:
+                    value = model.tied[name](model)
+                    slice_ = model._param_metrics[name][0]
+                    model.parameters[slice_] = value
+        elif any([tuple(b) != (None, None) for b in model.bounds.values()]):
+            for name, par in zip(model.param_names, _fit_params):
+                if model.bounds[name] != (None, None):
+                    b = model.bounds[name]
+                    if b[0] is not None:
+                        par = max(par, model.bounds[name][0])
+                    if b[1] is not None:
+                        par = min(par, model.bounds[name][1])
+                    setattr(model, name, par)
+        else:
+            model.parameters = fps
+
+
+class LinearLSQFitter(Fitter):
+    """
+    A class performing a linear least square fitting.
+
+    Uses `numpy.linalg.lstsq` to do the fitting.
+    Given a model and data, fits the model to the data and changes the
+    model's parameters. Keeps a dictionary of auxiliary fitting information.
+
+    Parameters
+    ----------
+    model : an instance of `~astropy.modeling.core.ParametricModel`
+
+    Raises
+    ------
+    ModelLinearityError
+        A nonlinear model is passed to a linear fitter
+    """
+
+    supported_constraints = ['fixed']
+
+    def __init__(self):
+        super(LinearLSQFitter, self).__init__()
+        self.fit_info = {'residuals': None,
+                         'rank': None,
+                         'singular_values': None,
+                         'params': None
+                         }
+
+    @staticmethod
+    def _deriv_with_constraints(model, param_indices, x=None, y=None):
+        if y is None:
+            d = np.array(model.deriv(x=x))
+        else:
+            d = np.array(model.deriv(x=x, y=y))
+
+        if model.col_deriv:
+            return d[param_indices]
+        else:
+            return d[:, param_indices]
+
+    def _map_domain_window(self, model, x, y=None):
+        """
+        Maps domain into window for a polynomial model which has these
+        attributes.
+        """
+
+        if y is None:
+            if hasattr(model, 'domain') and model.domain is None:
+                model.domain = [x.min(), x.max()]
+            if hasattr(model, 'window') and model.window is None:
+                model.window = [-1, 1]
+            return poly_map_domain(x, model.domain, model.window)
+        else:
+            if hasattr(model, 'x_domain') and model.x_domain is None:
+                model.x_domain = [x.min(), x.max()]
+            if hasattr(model, 'y_domain') and model.y_domain is None:
+                model.y_domain = [y.min(), y.max()]
+            if hasattr(model, 'x_window') and model.x_window is None:
+                model.x_window = [-1., 1.]
+            if hasattr(model, 'y_window') and model.y_window is None:
+                model.y_window = [-1., 1.]
+
+            xnew = poly_map_domain(x, model.x_domain, model.x_window)
+            ynew = poly_map_domain(y, model.y_domain, model.y_window)
+            return xnew, ynew
+
+    def __call__(self, model, x, y, z=None, weights=None, rcond=None):
+        """
+        Fit data to this model.
+
+        Parameters
+        ----------
+        model : `ParametricModel`
+            model to fit to x, y, z
+        x : array
+            input coordinates
+        y : array
+            input coordinates
+        z : array (optional)
+            input coordinates
+        weights : array (optional)
+            weights
+        rcond :  float, optional
+            Cut-off ratio for small singular values of `a`.
+            Singular values are set to zero if they are smaller than `rcond`
+            times the largest singular value of `a`.
+
+        Returns
+        ------
+        model_copy : `ParametricModel`
+            a copy of the input model with parameters set by the fitter
+        """
+        if not model.fittable:
+            raise ValueError("Model must be a subclass of ParametricModel")
+        if not model.linear:
+            raise ModelLinearityError('Model is not linear in parameters, '
+                                      'linear fit methods should not be used.')
+
+        self._validate_constraints(model)
+        multiple = False
+        model_copy = model.copy()
+        _, fitparam_indices = model_copy._model_to_fit_params()
+        self._weights = weights
+        if model_copy.n_inputs == 2 and z is None:
+            raise ValueError("Expected x, y and z for a 2 dimensional model.")
+
+        farg = _convert_input(x, y, z)
+
+        if len(farg) == 2:
+            x, y = farg
+            if y.ndim == 2:
+                assert y.shape[1] == model_copy.param_dim, (
+                    "Number of data sets (Y array is expected to equal "
+                    "the number of parameter sets")
+            # map domain into window
+            if hasattr(model_copy, 'domain'):
+                x = self._map_domain_window(model_copy, x)
+            if any(model_copy.fixed.values()):
+                lhs = self._deriv_with_constraints(model_copy,
+                                                   fitparam_indices,
+                                                   x=x)
+            else:
+                lhs = model_copy.deriv(x=x)
+            if len(y.shape) == 2:
+                rhs = y
+                multiple = y.shape[1]
+            else:
+                rhs = y
+        else:
+            x, y, z = farg
+            if x.shape[-1] != z.shape[-1]:
+                raise ValueError("x and z should have equal last dimensions")
+
+            # map domain into window
+            if hasattr(model_copy, 'x_domain'):
+                x, y = self._map_domain_window(model_copy, x, y)
+
+            if any(model_copy.fixed.values()):
+                lhs = self._deriv_with_constraints(model_copy,
+                                                   fitparam_indices, x=x, y=y)
+            else:
+                lhs = model_copy.deriv(x=x, y=y)
+            if len(z.shape) == 3:
+                rhs = np.array([i.flatten() for i in z]).T
+                multiple = z.shape[0]
+            else:
+                rhs = z.flatten()
+
+        if weights is not None:
+            weights = np.asarray(weights, dtype=np.float)
+            if len(x) != len(weights):
+                raise ValueError("x and weights should have the same length")
+            if rhs.ndim == 2:
+                lhs *= weights[:, np.newaxis]
+                rhs *= weights[:, np.newaxis]
+            else:
+                lhs *= weights[:, np.newaxis]
+                rhs *= weights
+
+        if not multiple and model_copy.param_dim > 1:
+            raise ValueError("Attempting to fit a 1D data set to a model "
+                             "with multiple parameter sets")
+        if rcond is None:
+            rcond = len(x) * np.finfo(x.dtype).eps
+
+        scl = (lhs * lhs).sum(0)
+        lacoef, resids, rank, sval = np.linalg.lstsq(lhs / scl, rhs, rcond)
+
+        self.fit_info['residuals'] = resids
+        self.fit_info['rank'] = rank
+        self.fit_info['singular_values'] = sval
+
+        # If y.n_inputs > model.n_inputs we are doing a simultanious 1D fitting
+        # of several 1D arrays. Otherwise the model is 2D.
+        # if y.n_inputs > self.model.n_inputs:
+        if multiple and model_copy.param_dim != multiple:
+            model_copy.param_dim = multiple
+        # TODO: Changing the model's param_dim needs to be handled more
+        # carefully; for now it's not actually allowed
+        lacoef = (lacoef.T / scl).T
+        self.fit_info['params'] = lacoef
+        # TODO: Only Polynomial models currently have an _order attribute;
+        # maybe change this to read isinstance(model, PolynomialBase)
+        if hasattr(model_copy, '_order') and rank != model_copy._order:
+            warnings.warn("The fit may be poorly conditioned\n",
+                          AstropyUserWarning)
+        self._fitter_to_model_params(model_copy, lacoef.flatten())
+        return model_copy
+
+
+class NonLinearLSQFitter(Fitter):
+    """
+    A class performing non-linear least squares fitting using the
+    Levenberg-Marquardt algorithm implemented in `scipy.optimize.leastsq`.
+
+    Parameters
+    ----------
+    model : a fittable `~astropy.modeling.core.ParametricModel`
+        model to fit to data
+
+    Raises
+    ------
+    ModelLinearityError
+        A linear model is passed to a nonlinear fitter
+    """
+
+    supported_constraints = ['fixed', 'tied', 'bounds']
+
+    def __init__(self):
+
+        self.fit_info = {'nfev': None,
+                         'fvec': None,
+                         'fjac': None,
+                         'ipvt': None,
+                         'qtf': None,
+                         'message': None,
+                         'ierr': None,
+                         'status': None}
+
+        super(NonLinearLSQFitter, self).__init__()
+
+    def errorfunc(self, fps, *args):
+        model = args[0]
+        self._fitter_to_model_params(model, fps)
+        meas = args[-1]
+        if self._weights is None:
+            return np.ravel(model(*args[1 : -1]) - meas)
+        else:
+            return np.ravel(self._weights * (model(*args[1 : -1]) - meas))
+
+    # @property
+    # def covar(self):
+    #     """
+    #     Calculate the covariance matrix (doesn't take into account
+    #     constraints).
+    #     """
+
+        # NOTE: Not currently used; won't work with Fitter implementation where
+        # models are not tied to fitters
+
+        # n = len(self.model.parameters)
+        #  construct the permutation matrix
+        # P = np.take(np.eye(n), self.fit_info['ipvt'] - 1, 0)
+        #  construct the R matrix as in JP = QR
+        # r = np.triu(self.fit_info['fjac'].T[:n, :])
+        # r_pt = np.dot(r, P.T)
+        # p_rt = np.dot(P, r.T)
+        # try:
+        #     return np.dual.inv(np.dot(p_rt, r_pt))
+        # except:
+        #     log.info("Could not construct a covariance matrix")
+        #     return None
+
+    def __call__(self, model, x, y, z=None, weights=None,
+                 maxiter=DEFAULT_MAXITER,
+                 epsilon=DEFAULT_EPS, estimate_jacobian=False):
+        """
+        Fit data to this model.
+
+        Parameters
+        ----------
+        model : `ParametricModel`
+            model to fit to x, y, z
+        x : array
+           input coordinates
+        y : array
+           input coordinates
+        z : array (optional)
+           input coordinates
+        weights : array (optional
+           weights
+        maxiter : int
+            maximum number of iterations
+        epsilon : float
+            A suitable step length for the forward-difference
+            approximation of the Jacobian (if model.fjac=None). If
+            epsfcn is less than the machine precision, it is
+            assumed that the relative errors in the functions are
+            of the order of the machine precision.
+        estimate_jacobian : bool
+            If False (default) and if the model has a deriv method,
+            it will be used. Otherwise the Jacobian will be estimated.
+            If True, the Jacobian will be estimated in any case.
+
+        Returns
+        ------
+        model_copy : `ParametricModel`
+            a copy of the input model with parameters set by the fitter
+        """
+        if not model.fittable:
+            raise ValueError("Model must be a subclass of ParametricModel")
+        self._validate_constraints(model)
+        from scipy import optimize
+        model_copy = model.copy()
+        farg = (model_copy, ) + _convert_input(x, y, z)
+        self._weights = weights
+        if model_copy.param_dim != 1:
+            # only single data sets ca be fitted
+            raise ValueError("NonLinearLSQFitter can only fit one "
+                             "data set at a time")
+        if model_copy.deriv is None or estimate_jacobian:
+            dfunc = None
+        else:
+            dfunc = self._wrap_deriv
+        init_values, _ = model_copy._model_to_fit_params()
+        fitparams, status, dinfo, mess, ierr = optimize.leastsq(
+            self.errorfunc, init_values, args=farg, Dfun=dfunc,
+            col_deriv=model_copy.col_deriv, maxfev=maxiter, epsfcn=epsilon,
+            full_output=True)
+        self._fitter_to_model_params(model_copy, fitparams)
+        self.fit_info.update(dinfo)
+        self.fit_info['status'] = status
+        self.fit_info['message'] = mess
+        self.fit_info['ierr'] = ierr
+        if ierr not in [1, 2, 3, 4]:
+            warnings.warn("The fit may be unsuccessful; check "
+                          "fit_info['message'] for more information.",
+                          AstropyUserWarning)
+        return model_copy
+
+    @staticmethod
+    def _wrap_deriv(params, model, x, y, z=None):
+        """
+        Wraps the method calculating the Jacobian of the function to account
+        for model constraints.
+
+        Currently the only fitter that uses a derivative is the
+        `NonLinearLSQFitter`. This wrapper may need to be revised when other
+        fitters using function derivative are added or when the statistic is
+        separated from the fitting routines.
+
+        `~scipy.optimize.leastsq` expects the function derivative to have the
+        above signature (parlist, (argtuple)). In order to accomodate model
+        constraints, instead of using p directly, we set the parameter list in
+        this function.
+        """
+        if any(model.fixed.values()) or any(model.tied.values()):
+
+            if z is None:
+                full_deriv = np.array(model.deriv(x, *model.parameters))
+            else:
+                full_deriv = np.array(model.deriv(x, y, *model.parameters))
+
+            pars = [getattr(model, name) for name in model.param_names]
+            fixed = [par.fixed for par in pars]
+            tied = [par.tied for par in pars]
+            tied = list(np.where([par.tied != False for par in pars], True, tied))
+            fix_and_tie = np.logical_or(fixed, tied)
+            ind = np.logical_not(fix_and_tie)
+
+            if not model.col_deriv:
+                full_deriv = np.asarray(full_deriv).T
+                residues = np.asarray(full_deriv[np.nonzero(ind)])
+            else:
+                residues = full_deriv[np.nonzero(ind)]
+
+            return [np.ravel(_) for _ in residues]
+        else:
+            if z is None:
+                return model.deriv(x, *params)
+            else:
+                return [np.ravel(_) for _ in model.deriv(x, y, *params)]
+
+
+class SLSQPFitter(Fitter):
+    """
+    Sequential Least Squares Programming optimization algorithm.
+
+    The algorithm is described in [1]_. It supports tied and fixed
+    parameters, as well as bounded constraints. Uses
+    `scipy.optimize.fmin_slsqp`.
+
+    Raises
+    ------
+    ModelLinearityError
+        A linear model is passed to a nonlinear fitter
+
+    References
+    ----------
+    .. [1] http://www.netlib.org/toms/733
+    """
+
+    supported_constraints = ['bounds', 'eqcons', 'ineqcons', 'fixed', 'tied']
+
+    def __init__(self):
+        super(SLSQPFitter, self).__init__()
+        self.fit_info = {
+            'final_func_val': None,
+            'numiter': None,
+            'exit_mode': None,
+            'message': None
+        }
+
+    def errorfunc(self, fps, *args):
+        """
+        Compute the sum of the squared residuals
+
+        Parameters
+        ----------
+        fps : list
+            parameters returned by the fitter
+        args : list
+            input coordinates
+        """
+        model = args[0]
+        meas = args[-1]
+        self._fitter_to_model_params(model, fps)
+        res = model(*args[1:-1]) - meas
+
+        if self._weights is None:
+            return np.sum(res ** 2)
+        else:
+            return np.sum(self._weights * res ** 2)
+
+    def __call__(self, model, x, y, z=None, weights=None, verblevel=0,
+                 maxiter=DEFAULT_MAXITER, epsilon=DEFAULT_EPS):
+        """
+        Fit data to this model.
+
+        Parameters
+        ----------
+        model : `ParametricModel`
+            model to fit to x, y, z
+        x : array
+            input coordinates
+        y : array
+            input coordinates
+        z : array (optional)
+            input coordinates
+        weights : array (optional)
+            weights
+        verblevel : int
+            0-silent
+            1-print summary upon completion,
+            2-print summary after each iteration
+        maxiter : int
+            maximum number of iterations
+        epsilon : float
+            the step size for finite-difference derivative estimates
+
+        Returns
+        ------
+        model_copy : `ParametricModel`
+            a copy of the input model with parameters set by the fitter
+        """
+        if not model.fittable:
+            raise ValueError("Model must be a subclass of ParametricModel")
+        if model.linear:
+            warnings.warn('Model is linear in parameters; '
+                          'consider using linear fitting methods.',
+                          AstropyUserWarning)
+        self._validate_constraints(model)
+        model_copy = model.copy()
+        from scipy import optimize
+
+        farg = _convert_input(x, y, z)
+        farg = (model_copy, ) + farg
+        self._weights = weights
+        if model_copy.param_dim != 1:
+            # for now only single data sets ca be fitted
+            raise ValueError("NonLinearLSQFitter can only fit "
+                             "one data set at a time")
+
+        p0, param_indices = model_copy._model_to_fit_params()
+        pars = [getattr(model_copy, name) for name in model_copy.param_names]
+        bounds = [par.bounds for par in pars if par.fixed != True and par.tied == False]
+        
+        bounds = np.asarray(bounds)
+        for i in bounds:
+            if i[0] is None:
+                i[0] = DEFAULT_MIN_BOUND
+            if i[1] is None:
+                i[1] = DEFAULT_MAX_BOUND
+        # older versions of scipy require this array to be float
+        bounds = np.asarray(bounds, dtype=np.float)
+        eqcons = np.array(model_copy.eqcons)
+        ineqcons = np.array(model_copy.ineqcons) 
+        fitparams, final_func_val, numiter, exit_mode, mess = \
+            optimize.fmin_slsqp(
+            self.errorfunc, p0, args=farg, disp=verblevel, full_output=1,
+            bounds=bounds, eqcons=eqcons, ieqcons=ineqcons, iter=maxiter,
+            acc=1.E-6, epsilon=DEFAULT_EPS)
+
+        self._fitter_to_model_params(model_copy, fitparams)
+        self.fit_info['final_func_val'] = final_func_val
+        self.fit_info['numiter'] = numiter
+        self.fit_info['exit_mode'] = exit_mode
+        self.fit_info['message'] = mess
+
+        if exit_mode != 0:
+            warnings.warn("The fit may be unsuccessful; check "
+                          "fit_info['message'] for more information.",
+                          AstropyUserWarning)
+        return model_copy
+
+
+class JointFitter(object):
+    """
+    Fit models which share a parameter.
+
+    For example, fit two gaussians to two data sets but keep
+    the FWHM the same.
+
+    Parameters
+    ----------
+    models : list
+        a list of model instances
+    jointparameters : list
+        a list of joint parameters
+    initvals : list
+        a list of initial values
+    """
+
+    def __init__(self, models, jointparameters, initvals):
+        self.models = list(models)
+        self.initvals = list(initvals)
+        self.jointparams = jointparameters
+        self._verify_input()
+        for m in self.jointparams.keys():
+            m.set_joint_parameters(self.jointparams[m])
+        self.fitparams = self._model_to_fit_params()
+
+        # a list of model.n_inputs
+        self.modeldims = [m.n_inputs for m in self.models]
+        # sum all model dimensions
+        self.ndim = np.sum(self.modeldims)
+
+    def _model_to_fit_params(self):
+        fparams = []
+        fparams.extend(self.initvals)
+        for model in self.models:
+            params = [p.flatten() for p in model.parameters]
+            for pname in model.joint:
+                slc = model._param_metrics[pname][0]
+                del params[slc]
+            fparams.extend(params)
+        return fparams
+
+    def errorfunc(self, fps, *args):
+        """
+        fps : list
+            the fitted parameters - result of an one iteration of the
+            fitting algorithm
+        args : dict
+            tuple of measured and input coordinates
+            args is always passed as a tuple from optimize.leastsq
+        """
+
+        lstsqargs = list(args)
+        fitted = []
+        fitparams = list(fps)
+        numjp = len(self.initvals)
+        # make a separate list of the joint fitted parameters
+        jointfitparams = fitparams[:numjp]
+        del fitparams[:numjp]
+
+        for model in self.models:
+            margs = lstsqargs[:model.n_inputs + 1]
+            del lstsqargs[:model.n_inputs + 1]
+            # separate each model separately fitted parameters
+            numfp = len(model._parameters) - len(model.joint)
+            mfparams = fitparams[:numfp]
+
+            del fitparams[:numfp]
+            # recreate the model parameters
+            mparams = []
+            for pname in model.param_names:
+                if pname in model.joint:
+                    index = model.joint.index(pname)
+                    # should do this with slices in case the
+                    # parameter is not a number
+                    mparams.extend([jointfitparams[index]])
+                else:
+                    slc = model._param_metrics[pname][0]
+                    plen = slc.stop - slc.start
+                    mparams.extend(mfparams[:plen])
+                    del mfparams[:plen]
+            modelfit = model.eval(margs[:-1], *mparams)
+            fitted.extend(modelfit - margs[-1])
+        return np.ravel(fitted)
+
+    def _verify_input(self):
+        assert(len(self.models) > 1)
+        assert(len(self.jointparams.keys()) >= 2)
+        for j in self.jointparams.keys():
+            assert(len(self.jointparams[j]) == len(self.initvals))
+
+    def __call__(self, *args):
+        """
+        Fit data to these models keeping some of the pramaters common to the
+        two models.
+        """
+
+        from scipy import optimize
+
+        assert(len(args) == reduce(lambda x, y: x + 1 + y + 1, self.modeldims))
+        self.fitparams[:], _ = optimize.leastsq(self.errorfunc, self.fitparams,
+                                              args=args)
+
+        fparams = self.fitparams[:]
+        numjp = len(self.initvals)
+        # make a separate list of the joint fitted parameters
+        jointfitparams = fparams[:numjp]
+        del fparams[:numjp]
+
+        for model in self.models:
+            # extract each model's fitted parameters
+            numfp = len(model._parameters) - len(model.joint)
+            mfparams = fparams[:numfp]
+
+            del fparams[:numfp]
+            # recreate the model parameters
+            mparams = []
+            for pname in model.param_names:
+                if pname in model.joint:
+                    index = model.joint.index(pname)
+                    # should do this with slices in case the parameter
+                    # is not a number
+                    mparams.extend([jointfitparams[index]])
+                else:
+                    slc = model._param_metrics[pname][0]
+                    plen = slc.stop - slc.start
+                    mparams.extend(mfparams[:plen])
+                    del mfparams[:plen]
+            model.parameters = np.array(mparams)
diff --git a/astropy/modeling/functional_models.py b/astropy/modeling/functional_models.py
new file mode 100644
index 0000000..f840173
--- /dev/null
+++ b/astropy/modeling/functional_models.py
@@ -0,0 +1,1302 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""Mathematical models."""
+
+from __future__ import division
+
+import collections
+
+from textwrap import dedent
+
+import numpy as np
+
+from .core import (ParametricModel, Parametric1DModel, Parametric2DModel,
+                   Model, format_input, ModelDefinitionError)
+from .parameters import Parameter, InputParameterError
+from ..utils import find_current_module
+
+
+__all__ = sorted([
+    'AiryDisk2D', 'Beta1D', 'Beta2D', 'Box1D',
+    'Box2D', 'Const1D', 'Const2D', 'Disk2D',
+    'Gaussian1D', 'Gaussian2D', 'Linear1D', 'Lorentz1D',
+    'MexicanHat1D', 'MexicanHat2D', 'Scale', 'Shift',
+    'Sine1D', 'Trapezoid1D', 'TrapezoidDisk2D', 'Ring2D',
+    'custom_model_1d'
+])
+
+
+class Gaussian1D(Parametric1DModel):
+    """
+    One dimensional Gaussian model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Amplitude of the gaussian
+    mean : float
+        Mean of the gaussian
+    stddev : float
+        Standard deviation of the gaussian
+
+    Notes
+    -----
+
+    Model formula:
+
+        .. math:: f(x) = A e^{- \\frac{\\left(x - x_{0}\\right)^{2}}{2 \\sigma^{2}}}
+
+    Examples
+    --------
+    >>> from astropy.modeling import models
+    >>> def tie_center(model):
+    ...         mean = 50 * model.stddev
+    ...         return mean
+    >>> tied_parameters = {'mean': tie_center}
+
+    Specify that 'mean' is a tied parameter in one of two ways:
+
+    >>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3,
+    ...                             tied=tied_parameters)
+
+    or
+
+    >>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3)
+    >>> g1.mean.tied
+    False
+    >>> g1.mean.tied = tie_center
+    >>> g1.mean.tied
+    <function tie_center at 0x...>
+
+    Fixed parameters:
+
+    >>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3,
+    ...                        fixed={'stddev': True})
+    >>> g1.stddev.fixed
+    True
+
+    or
+
+    >>> g1 = models.Gaussian1D(amplitude=10, mean=5, stddev=.3)
+    >>> g1.stddev.fixed
+    False
+    >>> g1.stddev.fixed = True
+    >>> g1.stddev.fixed
+    True
+
+    See Also
+    --------
+    Gaussian2D, Box1D, Beta1D, Lorentz1D
+    """
+
+    amplitude = Parameter('amplitude')
+    mean = Parameter('mean')
+    stddev = Parameter('stddev')
+
+    def __init__(self, amplitude, mean, stddev, **constraints):
+        try:
+            param_dim = len(amplitude)
+        except TypeError:
+            param_dim = 1
+        super(Gaussian1D, self).__init__(param_dim=param_dim,
+                                         amplitude=amplitude, mean=mean,
+                                         stddev=stddev, **constraints)
+    @staticmethod
+    def eval(x, amplitude, mean, stddev):
+        """
+        Model function Gauss1D
+        """
+        return amplitude * np.exp(- 0.5 * (x - mean) ** 2 / stddev ** 2)
+
+    @staticmethod
+    def deriv(x, amplitude, mean, stddev):
+        """
+        Model function derivatives Gauss1D
+        """
+
+        d_amplitude = np.exp(-0.5 / stddev ** 2 * (x - mean) ** 2)
+        d_mean = amplitude * d_amplitude * (x - mean) / stddev ** 2
+        d_stddev = amplitude * d_amplitude * (x - mean) ** 2 / stddev ** 3
+        return [d_amplitude, d_mean, d_stddev]
+
+
+class Gaussian2D(Parametric2DModel):
+    """
+    Two dimensional Gaussian model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Amplitude of the gaussian
+    x_mean : float
+        Mean of the gaussian in x
+    y_mean : float
+        Mean of the gaussian in y
+    x_stddev : float
+        Standard deviation of the gaussian in x
+        Either x_fwhm or x_stddev must be specified
+    y_stddev : float
+        Standard deviation of the gaussian in y
+        Either y_fwhm or y_stddev must be specified
+    theta : float
+        Rotation angle in radians. Note: increases clockwise.
+    cov_matrix : ndarray
+        A 2x2 covariance matrix. If specified, overrides stddev, fwhm, and
+        theta specification.
+
+    Notes
+    -----
+    Model formula:
+
+        .. math::
+
+            f(x, y) = A e^{-a\\left(x - x_{0}\\right)^{2}  -b\\left(x - x_{0}\\right)
+            \\left(y - y_{0}\\right)  -c\\left(y - y_{0}\\right)^{2}}
+
+    Using the following definitions:
+
+        .. math::
+            a = \\left(- \\frac{\\sin^{2}{\\left (\\theta \\right )}}{2 \\sigma_{y}^{2}} -
+            \\frac{\\cos^{2}{\\left (\\theta \\right )}}{2 \\sigma_{x}^{2}}\\right)
+
+            b = \\left(\\frac{\\sin{\\left (2 \\theta \\right )}}{2 \\sigma_{y}^{2}} -
+            \\frac{\\sin{\\left (2 \\theta \\right )}}{2 \\sigma_{x}^{2}}\\right)
+
+            c = \\left(\\frac{\\cos^{2}{\\left (\\theta \\right )}}{2 \\sigma_{y}^{2}} +
+            \\frac{\\sin^{2}{\\left (\\theta \\right )}}{2 \\sigma_{x}^{2}}\\right)
+
+
+    See Also
+    --------
+    Gaussian1D, Box2D, Beta2D
+    """
+
+    amplitude = Parameter('amplitude')
+    x_mean = Parameter('x_mean')
+    y_mean = Parameter('y_mean')
+    x_stddev = Parameter('x_stddev')
+    y_stddev = Parameter('y_stddev')
+    theta = Parameter('theta')
+
+    def __init__(self, amplitude, x_mean, y_mean, x_stddev=None, y_stddev=None,
+                 theta=0.0, cov_matrix=None, **constraints):
+        if y_stddev is None and cov_matrix is None:
+            raise InputParameterError(
+                "Either y_stddev must be specified, or a "
+                "covariance matrix.")
+        elif x_stddev is None and cov_matrix is None:
+            raise InputParameterError(
+                "Either x_stddev must be specified, or a "
+                "covariance matrix.")
+        elif cov_matrix is not None and (x_stddev is not None or
+                                         y_stddev is not None):
+            raise InputParameterError(
+                "Cannot specify both cov_matrix and x/y_stddev")
+
+        # Compute principle coordinate system transformation
+        elif cov_matrix is not None:
+            cov_matrix = np.array(cov_matrix)
+            assert cov_matrix.shape == (2, 2), "Covariance matrix must be 2x2"
+            eig_vals, eig_vecs = np.linalg.eig(cov_matrix)
+            x_stddev, y_stddev = np.sqrt(eig_vals)
+            y_vec = eig_vecs[:, 0]
+            theta = np.arctan2(y_vec[1], y_vec[0])
+
+        super(Gaussian2D, self).__init__(
+            amplitude=amplitude, x_mean=x_mean, y_mean=y_mean,
+            x_stddev=x_stddev, y_stddev=y_stddev, theta=theta, **constraints)
+
+    @staticmethod
+    def eval(x, y, amplitude, x_mean, y_mean, x_stddev, y_stddev, theta):
+        """Two dimensional Gaussian function"""
+
+        a = 0.5 * ((np.cos(theta) / x_stddev) ** 2 +
+                         (np.sin(theta) / y_stddev) ** 2)
+        b = 0.5 * (np.cos(theta) * np.sin(theta) *
+                         (1. / x_stddev ** 2 - 1. / y_stddev ** 2))
+        c = 0.5 * ((np.sin(theta) / x_stddev) ** 2 +
+                         (np.cos(theta) / y_stddev) ** 2)
+
+        return amplitude * np.exp(-(a * (x - x_mean) ** 2 +
+                                    b * (x - x_mean) * (y - y_mean) +
+                                    c * (y - y_mean) ** 2))
+
+    @staticmethod
+    def deriv(x, y, amplitude, x_mean, y_mean, x_stddev, y_stddev, theta):
+        """Two dimensional Gaussian function derivative"""
+
+        # Helper quantities
+        # Derivatives are not checked yet
+        a = 0.5 * ((np.cos(theta) / x_stddev) ** 2 +
+                         (np.sin(theta) / y_stddev) ** 2)
+        b = 0.5 * (np.cos(theta) * np.sin(theta) *
+                         (1. / x_stddev ** 2 - 1. / y_stddev ** 2))
+        c = 0.5 * ((np.sin(theta) / x_stddev) ** 2 +
+                         (np.cos(theta) / y_stddev) ** 2)
+
+        da_dtheta = np.sin(theta) * np.cos(theta) * (1/y_stddev**2 - 1/x_stddev**2)
+        da_dx_stddev = -np.cos(theta)**2/x_stddev**3
+        da_dy_stddev = -np.sin(theta)**2/y_stddev**3
+        db_dtheta = 0.5*np.cos(2*theta) * (1/x_stddev**2 - 1/y_stddev**2)
+        db_dx_stddev = -np.cos(theta)*np.sin(theta)/x_stddev**3
+        db_dy_stddev = np.cos(theta)*np.sin(theta)/y_stddev**3
+        dc_dtheta = np.cos(theta)*np.sin(theta)*(1/x_stddev**2 - 1/y_stddev**2)
+        dc_dx_stddev = -np.sin(theta)**2/x_stddev**3
+        dc_dy_stddev = -np.cos(theta)**2/y_stddev**3
+
+        d_A = np.exp(- a * (x - x_mean) ** 2
+                     - b * (x - x_mean) * (y - y_mean)
+                     - c * (y - y_mean) ** 2)
+        d_theta = amplitude * (-(x - x_mean) ** 2 * da_dtheta - (x - x_mean) *
+                               (y - y_mean) * db_dtheta - (y - y_mean) ** 2 * dc_dtheta) * d_A
+
+        d_x_stddev = amplitude * (-(x - x_mean) ** 2 *da_dx_stddev -
+                                  (x - x_mean) * (y - y_mean) * db_dx_stddev
+                                  - (y - y_mean) ** 2 * dc_dx_stddev) * d_A
+        d_y_stddev = amplitude * (-(x - x_mean) ** 2 *da_dy_stddev -
+                                  (x - x_mean) * (y - y_mean) * db_dy_stddev
+                                  - (y - y_mean) ** 2 * dc_dy_stddev) * d_A
+        d_y_mean = amplitude * (+(x - x_mean) * b + 2 * (y - y_mean) * c) * d_A
+        d_x_mean = amplitude * ((y - y_mean) * b + 2 * (x - x_mean) * a) * d_A
+        return [d_A, d_x_mean, d_y_mean, d_x_stddev, d_y_stddev, d_theta]
+
+
+class Shift(Model):
+    """
+    Shift a coordinate.
+
+    Parameters
+    ----------
+    offsets : float or a list of floats
+        offsets to be applied to a coordinate
+        if a list - each value in the list is an offset to be applied to a
+        column in the input coordinate array
+    """
+
+    offsets = Parameter('offsets')
+
+    def __init__(self, offsets, param_dim=1):
+        if not isinstance(offsets, collections.Sequence):
+            param_dim = 1
+        else:
+            param_dim = len(offsets)
+
+        self._offsets = offsets
+
+        super(Shift, self).__init__(param_dim=param_dim)
+
+    def inverse(self):
+        if self.param_dim == 1:
+            return Shift(offsets=(-1) * self._offsets)
+        else:
+            return Shift(offsets=[off * (-1) for off in self._offsets])
+
+    @format_input
+    def __call__(self, x):
+        """
+        Transforms data using this model.
+
+        Parameters
+        ----------
+        x : array like or a number
+            input
+        """
+
+        return self._offsets + x
+
+
+class Scale(Model):
+    """
+    Multiply a model by a factor.
+
+    Parameters
+    ----------
+    factors : float or a list of floats
+        scale for a coordinate
+    """
+
+    factors = Parameter('factors')
+
+    def __init__(self, factors, param_dim=1):
+        if not isinstance(factors, collections.Sequence):
+            param_dim = 1
+        else:
+            param_dim = len(factors)
+
+        self._factors = factors
+
+        super(Scale, self).__init__(param_dim=param_dim)
+
+    def inverse(self):
+        if self.param_dim == 1:
+            return Scale(factors=1. / self._factors)
+        else:
+            return Scale(factors=[1 / factor for factor in self._factors])
+
+    @format_input
+    def __call__(self, x):
+        """
+        Transforms data using this model.
+
+        Parameters
+        ----------
+        x : array like or a number
+            input
+        """
+
+        return self._factors * x
+
+
+class Sine1D(Parametric1DModel):
+    """
+    One dimensional Sine model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Oscillation amplitude
+    frequency : float
+        Oscillation frequency
+
+    See Also
+    --------
+    Const1D, Linear1D
+
+
+    Notes
+    -----
+    Model formula:
+
+        .. math:: f(x) = A \\sin(2 \\pi f x)
+    """
+
+    amplitude = Parameter('amplitude')
+    frequency = Parameter('frequency')
+
+    def __init__(self, amplitude, frequency, **constraints):
+        super(Sine1D, self).__init__(amplitude=amplitude,
+                                     frequency=frequency,
+                                     **constraints)
+
+    @staticmethod
+    def eval(x, amplitude, frequency):
+        """One dimensional Sine model function"""
+
+        return amplitude * np.sin(2 * np.pi * frequency * x)
+
+    @staticmethod
+    def deriv(x, amplitude, frequency):
+        """One dimensional Sine model derivative"""
+
+        d_amplitude = np.sin(2 * np.pi * frequency * x)
+        d_frequency = (2 * np.pi * x * amplitude *
+                       np.cos(2 * np.pi * frequency * x))
+        return [d_amplitude, d_frequency]
+
+
+class Linear1D(Parametric1DModel):
+    """
+    One dimensional Line model.
+
+    Parameters
+    ----------
+    slope : float
+        Slope of the straight line
+
+    intercept : float
+        Intercept of the straight line
+
+    See Also
+    --------
+    Const1D
+
+    Notes
+    -----
+    Model formula:
+
+        .. math:: f(x) = a x + b
+    """
+
+    slope = Parameter('slope')
+    intercept = Parameter('intercept')
+    linear = True
+
+    def __init__(self, slope, intercept, **constraints):
+        super(Linear1D, self).__init__(slope=slope, intercept=intercept,
+                                            **constraints)
+
+    @staticmethod
+    def eval(x, slope, intercept):
+        """One dimensional Line model function"""
+
+        return slope * x + intercept
+
+    @staticmethod
+    def deriv(x, slope, intercept):
+        """One dimensional Line model derivative"""
+
+        d_slope = x
+        d_intercept = np.ones_like(x)
+        return [d_slope, d_intercept]
+
+
+class Lorentz1D(Parametric1DModel):
+    """
+    One dimensional Lorentzian model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Peak value
+    x_0 : float
+        Position of the peak
+    fwhm : float
+        Full width at half maximum
+
+    See Also
+    --------
+    Gaussian1D, Box1D, MexicanHat1D
+
+    Notes
+    -----
+    Model formula:
+
+    .. math::
+
+        f(x) = \\frac{A \\gamma^{2}}{\\gamma^{2} + \\left(x - x_{0}\\right)^{2}}
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    fwhm = Parameter('fwhm')
+
+    def __init__(self, amplitude, x_0, fwhm, **constraints):
+        super(Lorentz1D, self).__init__(amplitude=amplitude, x_0=x_0,
+                                       fwhm=fwhm, **constraints)
+
+    @staticmethod
+    def eval(x, amplitude, x_0, fwhm):
+        """One dimensional Lorentzian model function"""
+
+        return (amplitude * ((fwhm / 2.) ** 2) / ((x - x_0) ** 2 +
+                (fwhm / 2.) ** 2))
+
+    @staticmethod
+    def deriv(x, amplitude, x_0, fwhm):
+        """One dimensional Lorentzian model derivative"""
+
+        d_amplitude = fwhm ** 2 / (fwhm ** 2 + (x - x_0) ** 2)
+        d_x_0 = (amplitude * d_amplitude * (2 * x - 2 * x_0) /
+                 (fwhm ** 2 + (x - x_0) ** 2))
+        d_fwhm = 2 * amplitude * d_amplitude / fwhm * (1 - d_amplitude)
+        return [d_amplitude, d_x_0, d_fwhm]
+
+
+class Const1D(Parametric1DModel):
+    """
+    One dimensional Constant model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Value of the constant function
+
+    See Also
+    --------
+    Const2D
+
+    Notes
+    -----
+    Model formula:
+
+        .. math:: f(x) = A
+    """
+
+    amplitude = Parameter('amplitude')
+
+    def __init__(self, amplitude, **constraints):
+        super(Const1D, self).__init__(amplitude=amplitude, **constraints)
+
+    @staticmethod
+    def eval(x, amplitude):
+        """One dimensional Constant model function"""
+
+        return amplitude * np.ones_like(x)
+
+    @staticmethod
+    def deriv(x, amplitude):
+        """One dimensional Constant model derivative"""
+
+        d_amplitude = np.ones_like(x)
+        return [d_amplitude]
+
+
+class Const2D(Parametric2DModel):
+    """
+    Two dimensional Constant model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Value of the constant function
+
+    See Also
+    --------
+    Const1D
+
+    Notes
+    -----
+    Model formula:
+
+        .. math:: f(x, y) = A
+    """
+
+    amplitude = Parameter('amplitude')
+
+    def __init__(self, amplitude, **constraints):
+        super(Const2D, self).__init__(amplitude=amplitude, **constraints)
+
+    @staticmethod
+    def eval(x, y, amplitude):
+        """Two dimensional Constant model function"""
+
+        return amplitude * np.ones_like(x)
+
+
+class Disk2D(Parametric2DModel):
+    """
+    Two dimensional radial symmetric Disk model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Value of the disk function
+    x_0 : float
+        x position center of the disk
+    y_0 : float
+        y position center of the disk
+    R_0 : float
+        Radius of the disk
+
+    See Also
+    --------
+    Box2D, TrapezoidDisk2D
+
+    Notes
+    -----
+    Model formula:
+
+        .. math::
+
+            f(r) = \\left \\{
+                     \\begin{array}{ll}
+                       A & : r \\leq R_0 \\\\
+                       0 & : r > R_0
+                     \\end{array}
+                   \\right.
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    y_0 = Parameter('y_0')
+    R_0 = Parameter('R_0')
+
+    def __init__(self, amplitude, x_0, y_0, R_0, **constraints):
+        super(Disk2D, self).__init__(amplitude=amplitude, x_0=x_0,
+                                     y_0=y_0, R_0=R_0, **constraints)
+
+    @staticmethod
+    def eval(x, y, amplitude, x_0, y_0, R_0):
+        """Two dimensional Disk model function"""
+
+        rr = (x - x_0) ** 2 + (y - y_0) ** 2
+        return np.select([rr <= R_0 ** 2], [amplitude])
+
+
+class Ring2D(Parametric2DModel):
+
+    """
+    Two dimensional radial symmetric Ring model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Value of the disk function
+    x_0 : float
+        x position center of the disk
+    y_0 : float
+        y position center of the disk
+    r_in : float
+        Inner radius of the ring
+    width : float
+        Width of the ring.
+    r_out : float
+        Outer Radius of the ring. Can be specified instead of width.
+
+    See Also
+    --------
+    Disk2D, TrapezoidDisk2D
+
+    Notes
+    -----
+    Model formula:
+
+        .. math::
+
+            f(r) = \\left \\{
+                     \\begin{array}{ll}
+                       A & : r_{in} \\leq r \\leq r_{out} \\\\
+                       0 & : \\textnormal{else}
+                     \\end{array}
+                   \\right.
+
+    Where :math:`r_{out} = r_{in} + r_{width}`.
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    y_0 = Parameter('y_0')
+    r_in = Parameter('r_in')
+    width = Parameter('width')
+
+    def __init__(self, amplitude, x_0, y_0, r_in, width=None, r_out=None,
+                 **constraints):
+        if r_out is not None:
+            width = r_out - r_in
+        if r_out is None and width is None:
+            raise ModelDefinitionError("Either specify width or r_out.")
+
+        super(Ring2D, self).__init__(amplitude=amplitude, x_0=x_0,
+                                     y_0=y_0, r_in=r_in, width=width,
+                                     **constraints)
+
+    @staticmethod
+    def eval(x, y, amplitude, x_0, y_0, r_in, width):
+        """Two dimensional Ring model function."""
+
+        rr = (x - x_0) ** 2 + (y - y_0) ** 2
+        r_range = np.logical_and(rr >= r_in ** 2, rr <= (r_in + width) ** 2)
+        return np.select([r_range], [amplitude])
+
+
+class Delta1D(Parametric1DModel):
+    """One dimensional Dirac delta function."""
+
+    def __init__(self):
+        raise ModelDefinitionError("Not implemented")
+
+
+class Delta2D(Parametric2DModel):
+    """Two dimensional Dirac delta function."""
+
+    def __init__(self):
+        raise ModelDefinitionError("Not implemented")
+
+
+class Box1D(Parametric1DModel):
+    """
+    One dimensional Box model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Amplitude A
+    x_0 : float
+        Position of the center of the box function
+    width : float
+        Width of the box
+
+    See Also
+    --------
+    Box2D, TrapezoidDisk2D
+
+    Notes
+    -----
+    Model formula:
+
+      .. math::
+
+            f(x) = \\left \\{
+                     \\begin{array}{ll}
+                       A & : x_0 - w/2 \\geq x \\geq x_0 + w/2 \\\\
+                       0 & : \\textnormal{else}
+                     \\end{array}
+                   \\right.
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    width = Parameter('width')
+
+    def __init__(self, amplitude, x_0, width, **constraints):
+        super(Box1D, self).__init__(amplitude=amplitude, x_0=x_0,
+                                    width=width, **constraints)
+
+    @staticmethod
+    def eval(x, amplitude, x_0, width):
+        """One dimensional Box model function"""
+
+        return np.select([np.logical_and(x >= x_0 - width / 2.,
+                                         x <= x_0 + width / 2.)],
+                                        [amplitude], 0)
+
+    @classmethod
+    def deriv(cls, x, amplitude, x_0, width):
+        """One dimensional Box model derivative"""
+
+        d_amplitude = cls.eval(x, 1, x_0, width)
+        d_x_0 = np.zeros_like(x)
+        d_width = np.zeros_like(x)
+        return [d_amplitude, d_x_0, d_width]
+
+
+class Box2D(Parametric2DModel):
+    """
+    Two dimensional Box model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Amplitude A
+    x_0 : float
+        x position of the center of the box function
+    x_width : float
+        Width in x direction of the box
+    y_0 : float
+        y position of the center of the box function
+    y_width : float
+        Width in y direction of the box
+
+    See Also
+    --------
+    Box1D, Gaussian2D, Beta2D
+
+    Notes
+    -----
+    Model formula:
+
+      .. math::
+
+            f(x, y) = \\left \\{
+                     \\begin{array}{ll}
+                       A & : x_0 - w_x/2 \\geq x \\geq x_0 + w_x/2 \\\\
+                       A & : y_0 - w_y/2 \\geq y \\geq y_0 + w_y/2 \\\\
+                       0 & : \\textnormal{else}
+                     \\end{array}
+                   \\right.
+
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    y_0 = Parameter('y_0')
+    x_width = Parameter('x_width')
+    y_width = Parameter('y_width')
+
+    def __init__(self, amplitude, x_0, y_0, x_width, y_width, **constraints):
+        super(Box2D, self).__init__(amplitude=amplitude, x_0=x_0,
+                                    y_0=y_0, x_width=x_width,
+                                    y_width=y_width, **constraints)
+
+    @staticmethod
+    def eval(x, y, amplitude, x_0, y_0, x_width, y_width):
+        """Two dimensional Box model function"""
+        x_range = np.logical_and(x >= x_0 - x_width / 2., x <= x_0 + x_width / 2.)
+        y_range = np.logical_and(y >= y_0 - y_width / 2., y <= y_0 + y_width / 2.)
+        return np.select([np.logical_and(x_range, y_range)], [amplitude], 0)
+
+
+class Trapezoid1D(Parametric1DModel):
+    """
+    One dimensional Trapezoid model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Amplitude of the trapezoid
+    x_0 : float
+        Center position of the trapezoid
+    width : float
+        Width of the constant part of the trapezoid.
+    slope : float
+        Slope of the tails of the trapezoid
+
+    See Also
+    --------
+    Box1D, Gaussian1D, Beta1D
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    width = Parameter('width')
+    slope = Parameter('slope')
+
+    def __init__(self, amplitude, x_0, width, slope, **constraints):
+        super(Trapezoid1D, self).__init__(amplitude=amplitude, x_0=x_0,
+                                          width=width, slope=slope,
+                                          **constraints)
+
+    @staticmethod
+    def eval(x, amplitude, x_0, width, slope):
+        """One dimensional Trapezoid model function"""
+        # Compute the four points where the trapezoid changes slope
+        # x1 <= x2 <= x3 <= x4
+        x2 = x_0 - width / 2.
+        x3 = x_0 + width / 2.
+        x1 = x2 - amplitude / slope
+        x4 = x3 + amplitude / slope
+
+        # Compute model values in pieces between the change points
+        range_a = np.logical_and(x >= x1, x < x2)
+        range_b = np.logical_and(x >= x2, x < x3)
+        range_c = np.logical_and(x >= x3, x < x4)
+        val_a = slope * (x - x1)
+        val_b = amplitude
+        val_c = slope * (x4 - x)
+        return np.select([range_a, range_b, range_c], [val_a, val_b, val_c])
+
+
+class TrapezoidDisk2D(Parametric2DModel):
+    """
+    Two dimensional circular Trapezoid model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Amplitude of the trapezoid
+    x_0 : float
+        x position of the center of the trapezoid
+    y_0 : float
+        y position of the center of the trapezoid
+    R_0 : float
+        Radius of the constant part of the trapezoid.
+    slope : float
+        Slope of the tails of the trapezoid in x direction.
+
+    See Also
+    --------
+    Disk2D, Box2D
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    y_0 = Parameter('y_0')
+    R_0 = Parameter('R_0')
+    slope = Parameter('slope')
+
+    def __init__(self, amplitude, x_0, y_0, R_0, slope, **constraints):
+        super(TrapezoidDisk2D, self).__init__(amplitude=amplitude,
+                                              x_0=x_0, y_0=y_0, R_0=R_0,
+                                              slope=slope, **constraints)
+
+
+    @staticmethod
+    def eval(x, y, amplitude, x_0, y_0, R_0, slope):
+        """Two dimensional Trapezoid Disk model function"""
+
+        r = np.sqrt((x - x_0) ** 2 + (y - y_0) ** 2)
+        range_1 = r <= R_0
+        range_2 = np.logical_and(r > R_0,  r <= R_0 + amplitude / slope)
+        val_1 = amplitude
+        val_2 = amplitude + slope * (R_0 - r)
+        return np.select([range_1, range_2], [val_1, val_2])
+
+
+class MexicanHat1D(Parametric1DModel):
+    """
+    One dimensional Mexican Hat model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Amplitude
+    x_0 : float
+        Position of the peak
+    sigma : float
+        Width of the Mexican hat
+
+    See Also
+    --------
+    MexicanHat2D, Box1D, Gaussian1D, Trapezoid1D
+
+    Notes
+    -----
+    Model formula:
+
+    .. math::
+
+        f(x) = {A \\left(1 - \\frac{\\left(x - x_{0}\\right)^{2}}{\\sigma^{2}}\\right)
+        e^{- \\frac{\\left(x - x_{0}\\right)^{2}}{2 \\sigma^{2}}}}
+
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    sigma = Parameter('sigma')
+
+    def __init__(self, amplitude, x_0, sigma, **constraints):
+        super(MexicanHat1D, self).__init__(amplitude=amplitude,
+                                           x_0=x_0, sigma=sigma,
+                                           **constraints)
+
+    @staticmethod
+    def eval(x, amplitude, x_0, sigma):
+        """One dimensional Mexican Hat model function"""
+
+        xx_ww = (x - x_0) ** 2 / (2 * sigma ** 2)
+        return amplitude * (1 - 2 * xx_ww) * np.exp(-xx_ww)
+
+
+class MexicanHat2D(Parametric2DModel):
+    """
+    Two dimensional symmetric Mexican Hat model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Amplitude
+    x_0 : float
+        x position of the peak
+    y_0 : float
+        y position of the peak
+    sigma : float
+        Width of the Mexican hat
+
+    See Also
+    --------
+    MexicanHat1D, Gaussian2D
+
+    Notes
+    -----
+    Model formula:
+
+    .. math::
+
+        f(x, y) = A \\left(1 - \\frac{\\left(x - x_{0}\\right)^{2}
+        + \\left(y - y_{0}\\right)^{2}}{\\sigma^{2}}\\right)
+        e^{\\frac{- \\left(x - x_{0}\\right)^{2}
+        - \\left(y - y_{0}\\right)^{2}}{2 \\sigma^{2}}}
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    y_0 = Parameter('y_0')
+    sigma = Parameter('sigma')
+
+    def __init__(self, amplitude, x_0, y_0, sigma, **constraints):
+        super(MexicanHat2D, self).__init__(amplitude=amplitude, x_0=x_0,
+                                           y_0=y_0, sigma=sigma,
+                                           **constraints)
+
+    @staticmethod
+    def eval(x, y, amplitude, x_0, y_0, sigma):
+        """Two dimensional Mexican Hat model function"""
+
+        rr_ww = ((x - x_0) ** 2 + (y - y_0) ** 2) / (2 * sigma ** 2)
+        return amplitude * (1 - rr_ww) * np.exp(- rr_ww)
+
+
+class AiryDisk2D(Parametric2DModel):
+    """
+    Two dimensional Airy disk model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Amplitude of the Airy function.
+    x_0 : float
+        x position of the maximum of the Airy function.
+    y_0 : float
+        y position of the maximum of the Airy function.
+    width : float
+        Width of the Airy function.
+
+    See Also
+    --------
+    Box2D, TrapezoidDisk2D, Gaussian2D
+
+
+    Notes
+    -----
+    Model formula:
+
+        .. math:: f(r) = A \\frac{J_1(2 \\pi r)}{\\pi r}
+
+    Where J1 is the first order Bessel function of first kind.
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    y_0 = Parameter('y_0')
+    width = Parameter('width')
+
+    _j1 = None
+
+    def __init__(self, amplitude, x_0, y_0, width, **constraints):
+        if self._j1 is None:
+            try:
+                from scipy.special import j1
+                self.__class__._j1 = j1
+            # add a ValueError here for python3 + scipy < 0.12
+            except (ValueError, ImportError):
+                raise ImportError("AiryDisk2D model requires scipy > 0.11.")
+        super(AiryDisk2D, self).__init__(amplitude=amplitude, x_0=x_0,
+                                         y_0=y_0, width=width,
+                                         **constraints)
+
+    def __deepcopy__(self, memo):
+        new_model = self.__class__(self.amplitude.value, self.x_0.value,
+                                   self.y_0.value, self.width.value)
+        return new_model
+
+    def __copy__(self):
+        new_model = self.__class__(self.amplitude.value, self.x_0.value,
+                                   self.y_0.value, self.width.value)
+        return new_model
+
+    @classmethod
+    def eval(cls, x, y, amplitude, x_0, y_0, width):
+        """Two dimensional Airy model function"""
+
+        r = np.sqrt((x - x_0) ** 2 + (y - y_0) ** 2) / width
+
+        # Since r can be zero, we have to take care to treat that case
+        # separately so as not to raise a Numpy warning
+        z = np.ones(r.shape)
+        z[r > 0] = (amplitude * (cls._j1(2 * np.pi * r[r > 0]) /
+                    (np.pi * r[r > 0])) ** 2)
+
+        return z
+
+
+class Beta1D(Parametric1DModel):
+    """
+    One dimensional Beta model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Amplitude of the model.
+    x_0 : float
+        x position of the maximum of the Beta model.
+    gamma : float
+        Core width of the Beta model.
+    alpha : float
+        Power index of the beta model.
+
+    See Also
+    --------
+    Gaussian1D, Box1D
+
+    Notes
+    -----
+    Model formula:
+
+    .. math::
+
+        f(x) = A \\left(1 + \\frac{\\left(x - x_{0}\\right)^{2}}{\\gamma^{2}}\\right)^{- \\alpha}
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    gamma = Parameter('gamma')
+    alpha = Parameter('alpha')
+
+    def __init__(self, amplitude, x_0, gamma, alpha, **constraints):
+        super(Beta1D, self).__init__(amplitude=amplitude, x_0=x_0,
+                                     gamma=gamma, alpha=alpha,
+                                     **constraints)
+
+    @staticmethod
+    def eval(x, amplitude, x_0, gamma, alpha):
+        """One dimensional Beta model function"""
+
+        return amplitude * (1 + ((x - x_0) / gamma) ** 2) ** (-alpha)
+
+    @staticmethod
+    def deriv(x, amplitude, x_0, gamma, alpha):
+        """One dimensional Beta model derivative"""
+
+        d_A = (1 + (x - x_0) ** 2 / gamma ** 2) ** (-alpha)
+        d_x_0 = (-amplitude * alpha * d_A * (-2 * x + 2 * x_0) /
+                 (gamma ** 2 * d_A ** alpha))
+        d_gamma = (2 * amplitude * alpha * d_A * (x - x_0) ** 2 /
+                   (gamma ** 3 * d_A ** alpha))
+        d_alpha = -amplitude * d_A * np.log(1 + (x - x_0) ** 2 / gamma ** 2)
+        return [d_A, d_x_0, d_gamma, d_alpha]
+
+
+class Beta2D(Parametric2DModel):
+    """
+    Two dimensional Beta model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Amplitude of the model.
+    x_0 : float
+        x position of the maximum of the Beta model.
+    y_0 : float
+        y position of the maximum of the Beta model.
+    gamma : float
+        Core width of the Beta model.
+    alpha : float
+        Power index of the beta model.
+
+    See Also
+    --------
+    Gaussian2D, Box2D
+
+    Notes
+    -----
+    Model formula:
+
+    .. math::
+
+        f(x, y) = A \\left(1 + \\frac{\\left(x - x_{0}\\right)^{2} +
+        \\left(y - y_{0}\\right)^{2}}{\\gamma^{2}}\\right)^{- \\alpha}
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    y_0 = Parameter('y_0')
+    gamma = Parameter('gamma')
+    alpha = Parameter('alpha')
+
+    def __init__(self, amplitude, x_0, y_0, gamma, alpha, **constraints):
+        super(Beta2D, self).__init__(amplitude=amplitude, x_0=x_0,
+                                     y_0=y_0, gamma=gamma, alpha=alpha,
+                                     **constraints)
+
+    @staticmethod
+    def eval(x, y, amplitude, x_0, y_0, gamma, alpha):
+        """Two dimensional Beta model function"""
+
+        rr_gg = ((x - x_0) ** 2 + (y - y_0) ** 2) / gamma ** 2
+        return amplitude * (1 + rr_gg) ** (-alpha)
+
+    @staticmethod
+    def deriv(x, y, amplitude, x_0, y_0, gamma, alpha):
+        """Two dimensional Beta model derivative"""
+
+        rr_gg = ((x - x_0) ** 2 + (y - y_0) ** 2) / gamma ** 2
+        d_A = (1 + rr_gg) ** (-alpha)
+        d_x_0 = (-amplitude * alpha * d_A * (-2 * x + 2 * x_0) /
+                 (gamma ** 2 * (1 + rr_gg)))
+        d_y_0 = (-amplitude * alpha * d_A * (-2 * y + 2 * y_0) /
+                 (gamma ** 2 * (1 + rr_gg)))
+        d_alpha = -amplitude * d_A * np.log(1 + rr_gg)
+        d_gamma = 2 * amplitude * alpha * d_A * (rr_gg / (gamma * (1 + rr_gg)))
+        return [d_A, d_x_0, d_y_0, d_gamma, d_alpha]
+
+
+def custom_model_1d(func, func_deriv=None):
+    """
+    Create a one dimensional model from a user defined function. The
+    parameters of the model will be inferred from the arguments of
+    the function.
+
+    ..note ::
+        All model parameters have to be defined as keyword arguments
+        with default values in the model function.
+
+    If you want to use parameter sets in the model, the parameters should be
+    treated as lists or arrays.
+
+    Parameters
+    ----------
+    func : function
+        Function which defines the model.  It should take one positional
+        argument (the independent variable in the model), and any number of
+        keyword arguments (the parameters).  It must return the value
+        of the model (typically as an array, but can also be a scalar for
+        scalar inputs).  This corresponds to the `ParametricModel.eval` method.
+    func_deriv : function, optional
+        Function which defines the Jacobian derivative of the model. I.e., the
+        derivive with respect to the *parameters* of the model.  It should
+        have the same argument signature as `func`, but should return a
+        sequence where each element of the sequence is the derivative
+        with respect to the correseponding argument. This corresponds to the
+        `ParametricModel.deriv` method.
+
+
+    Examples
+    --------
+    Define a sinusoidal model function as a custom 1D model:
+
+        >>> from astropy.modeling.models import custom_model_1d
+        >>> import numpy as np
+        >>> def sine_model(x, amplitude=1., frequency=1.):
+        ...     return amplitude * np.sin(2 * np.pi * frequency * x)
+        >>> def sine_deriv(x, amplitude=1., frequency=1.):
+        ...     return 2 * np.pi * amplitude * np.cos(2 * np.pi * frequency * x)
+        >>> SineModel = custom_model_1d(sine_model, func_deriv=sine_deriv)
+
+    Create an instance of the custom model and evaluate it:
+
+        >>> model = SineModel()
+        >>> model(0.25)
+        1.0
+
+    This model instance can now be used like a usual astropy model.
+    """
+
+    if not callable(func):
+        raise ModelDefinitionError("Not callable. Must be function")
+
+    if func_deriv is not None and not callable(func_deriv):
+        raise ModelDefinitionError("func_deriv not callable. Must be function")
+
+    model_name = func.__name__
+    param_values = func.func_defaults
+
+    # Check if all parameters are keyword arguments
+    nparams = len(param_values)
+
+    if func_deriv is not None and len(func_deriv.func_defaults) != nparams:
+        raise ModelDefinitionError("derivative function should accept"
+                                   " same number of parameters as func.")
+
+    if func.func_code.co_argcount == nparams + 1:
+        param_names = func.func_code.co_varnames[1:nparams + 1]
+    else:
+        raise ModelDefinitionError(
+            "All parameters must be keyword arguments")
+
+    params = dict((name, Parameter(name, default=default))
+                  for name, default in zip(param_names, param_values))
+
+    arg_signature_1 = ', '.join('{0}=None'.format(name)
+                                for name in param_names)
+    arg_signature_2 = ', '.join('{0}={0}'.format(name)
+                                for name in param_names)
+
+    mod = find_current_module(2)
+    if mod:
+        filename = mod.__file__
+        modname = mod.__name__
+    else:
+        filename = '<string>'
+        modname = '__main__'
+
+    members = {'eval': staticmethod(func)}
+
+    eval_globals = {}
+
+    init_code_string = dedent("""
+        def __init__(self, {0}, **constraints):
+            super(self.__class__, self).__init__({1}, **constraints)
+    """).format(arg_signature_1, arg_signature_2)
+
+    eval(compile(init_code_string, filename, 'single'), eval_globals)
+
+    if func_deriv is not None:
+        members['deriv'] = staticmethod(func_deriv)
+
+    members['__init__'] = eval_globals['__init__']
+    members.update(params)
+
+    cls = type(model_name, (Parametric1DModel,), members)
+    cls.__module__ = modname
+
+    return cls
diff --git a/astropy/modeling/models.py b/astropy/modeling/models.py
new file mode 100644
index 0000000..632ef75
--- /dev/null
+++ b/astropy/modeling/models.py
@@ -0,0 +1,58 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+Creates a common namespace for all pre-defined models.
+"""
+
+from .projections import *
+from .rotations import *
+from .polynomial import *
+from .functional_models import *
+from .powerlaws import *
+
+"""
+Attach a docstring explaining constraints to all models which support them.
+
+Note: add new models to this list
+"""
+
+CONSTRAINTS_DOC = """
+    fixed: a dict
+        a dictionary ``{parameter_name: boolean}`` of parameters to not be
+        varied during fitting. True means the parameter is held fixed.
+        Alternatively the `~astropy.modeling.parameters.Parameter.fixed`
+        property of a parameter may be used.
+    tied: dict
+        a dictionary ``{parameter_name: callable}`` of parameters which are
+        linked to some other parameter. The dictionary values are callables
+        providing the linking relationship.  Alternatively the
+        `~astropy.modeling.parameters.Parameter.tied` property of a parameter
+        may be used.
+    bounds: dict
+        a dictionary ``{parameter_name: boolean}`` of lower and upper bounds of
+        parameters. Keys  are parameter names. Values  are a list of length 2
+        giving the desired range for the parameter.  Alternatively the
+        `~astropy.modeling.parameters.Parameter.min` and
+        `~astropy.modeling.parameters.Parameter.max` properties of a parameter
+        may be used.
+    eqcons: list
+        A list of functions of length ``n`` such that ``eqcons[j](x0,*args) ==
+        0.0`` in a successfully optimized problem.
+    ineqcons : list
+        A list of functions of length ``n`` such that ``ieqcons[j](x0,*args) >=
+        0.0`` is a successfully optimized problem.
+"""
+
+
+MODELS_WITH_CONSTRAINTS = [
+    AiryDisk2D, Beta1D, Beta2D, Box1D, Box2D,
+    Const1D, Const2D, Disk2D, Gaussian1D, Gaussian2D,
+    Linear1D, Lorentz1D, MexicanHat1D, MexicanHat2D,
+    PowerLaw1D, Sine1D, Trapezoid1D, TrapezoidDisk2D,
+    Chebyshev1D, Chebyshev2D, Legendre2D, Legendre1D,
+    Polynomial1D, Polynomial2D
+]
+
+
+for item in MODELS_WITH_CONSTRAINTS:
+    item.__doc__ += CONSTRAINTS_DOC
diff --git a/astropy/modeling/parameters.py b/astropy/modeling/parameters.py
new file mode 100644
index 0000000..6476c13
--- /dev/null
+++ b/astropy/modeling/parameters.py
@@ -0,0 +1,519 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+This module defines two classes that deal with parameters.
+
+It is unlikely users will need to work with these classes directly, unless they
+define their own models.
+"""
+
+from __future__ import division
+
+import inspect
+import functools
+import numbers
+
+import numpy as np
+
+from ..utils import isiterable
+
+
+__all__ = ['Parameter', 'InputParameterError']
+
+
+class InputParameterError(ValueError):
+    """Used for incorrect input parameter values and definitions."""
+
+
+def _tofloat(value):
+    """Convert a parameter to float or float array"""
+
+    if isiterable(value):
+        try:
+            value = np.array(value, dtype=np.float)
+            shape = value.shape
+        except (TypeError, ValueError):
+            # catch arrays with strings or user errors like different
+            # types of parameters in a parameter set
+            raise InputParameterError(
+                "Parameter of {0} could not be converted to "
+                "float".format(type(value)))
+    elif isinstance(value, bool):
+        raise InputParameterError(
+            "Expected parameter to be of numerical type, not boolean")
+    elif isinstance(value, (numbers.Number, np.number)):
+        value = float(value)
+        shape = ()
+    else:
+        raise InputParameterError(
+            "Don't know how to convert parameter of {0} to "
+            "float".format(type(value)))
+    return value, shape
+
+
+class Parameter(object):
+    """
+    Wraps individual parameters.
+
+    This class represents a model's parameter (in a somewhat broad sense).  It
+    acts as both a descriptor that can be assigned to a class attribute to
+    describe the parameters accepted by an individual model (this is called an
+    "unbound parameter"), or it can act as a proxy for the parameter values on
+    an individual model instance (called a "bound parameter").
+
+    Parameter instances never store the actual value of the parameter
+    directly.  Rather, each instance of a model stores its own parameters
+    as either hidden attributes or (in the case of
+    `~astropy.modeling.core.ParametricModel`) in an array.  A *bound*
+    Parameter simply wraps the value in a Parameter proxy which provides some
+    additional information about the parameter such as its constraints.
+
+    *Unbound* Parameters are not associated with any specific model instance,
+    and are merely used by model classes to determine the names of their
+    parameters and other information about each parameter such as their default
+    values and default constraints.
+
+    Parameters
+    ----------
+    name : str
+        parameter name
+    default : float or array
+        default value to use for this parameter
+    getter : callable
+        a function that wraps the raw (internal) value of the parameter
+        when returning the value through the parameter proxy (eg. a
+        parameter may be stored internally as radians but returned to the
+        user as degrees)
+    setter : callable
+        a function that wraps any values assigned to this parameter; should
+        be the inverse of getter
+    fixed : bool
+        if True the parameter is not varied during fitting
+    tied : callable or False
+        if callable is supplied it provides a way to link the value of this
+        parameter to another parameter (or some other arbitrary function)
+    min : float
+        the lower bound of a parameter
+    max : float
+        the upper bound of a parameter
+    model : object
+        an instance of a Model class; this should only be used internally for
+        creating bound Parameters
+    """
+
+    # See the _nextid classmethod
+    _nextid = 1
+
+    def __init__(self, name, description='', default=None, getter=None,
+                 setter=None, fixed=False, tied=False, min=None, max=None,
+                 model=None):
+        super(Parameter, self).__init__()
+        self._name = name
+        self.__doc__ = description.strip()
+        self._default = default
+        self._attr = '_' + name
+
+        self._default_fixed = fixed
+        self._default_tied = tied
+        self._default_min = min
+        self._default_max = max
+
+        self._order = None
+        self._shape = None
+        self._model = model
+
+        # The getter/setter functions take one or two arguments: The first
+        # argument is always the value itself (either the value returned or the
+        # value being set).  The second argument is optional, but if present
+        # will contain a reference to the model object tied to a parameter (if
+        # it exists)
+        if getter is not None:
+            self._getter = self._create_value_wrapper(getter, model)
+        else:
+            self._getter = None
+        if setter is not None:
+            self._setter = self._create_value_wrapper(setter, model)
+        else:
+            self._setter = None
+
+        if model is not None:
+            try:
+                _, self._shape = self._validate_value(model, self.value)
+            except AttributeError:
+                # This can happen if the paramter's value has not been set yet
+                pass
+        else:
+            # Only Parameters declared as class-level descriptors require
+            # and ordering ID
+            self._order = self._get_nextid()
+
+
+    def __get__(self, obj, objtype):
+        if obj is None:
+            return self
+
+        return self.__class__(self._name, default=self._default,
+                              getter=self._getter,
+                              setter=self._setter, model=obj)
+
+    def __set__(self, obj, value):
+        value, shape = self._validate_value(obj, value)
+        # Compare the shape against the previous value's shape, if it exists
+        if hasattr(obj, self._attr):
+            current_shape = getattr(obj, self.name).shape
+            if shape != current_shape:
+                raise InputParameterError(
+                    "Input value for parameter {0!r} does not have the "
+                    "required shape {1}".format(self.name, current_shape))
+
+        if self._setter is not None:
+            setter = self._create_value_wrapper(self._setter, obj)
+            value = setter(value)
+
+        setattr(obj, self._attr, value)
+
+    def __len__(self):
+        if self._model is None:
+            raise TypeError('Parameter definitions do not have a length.')
+        return self._model.param_dim
+
+    def __getitem__(self, key):
+        value = self.value
+        if self._model.param_dim == 1:
+            # Wrap the value in a list so that getitem can work for sensible
+            # indcies like [0] and [-1]
+            value = [value]
+        return value[key]
+
+    def __setitem__(self, key, value):
+        # Get the existing value and check whether it even makes sense to
+        # apply this index
+        oldvalue = self.value
+        param_dim = self._model.param_dim
+
+        if param_dim == 1:
+            # Convert the single-dimension value to a list to allow some slices
+            # that would be compatible with a length-1 array like [:] and [0:]
+            oldvalue = [oldvalue]
+
+        if isinstance(key, slice):
+            if len(oldvalue[key]) == 0:
+                raise InputParameterError(
+                    "Slice assignment outside the parameter dimensions for "
+                    "{0!r}".format(self.name))
+            for idx, val in zip(range(*key.indices(len(self))), value):
+                self.__setitem__(idx, val)
+        else:
+            try:
+                oldvalue[key] = value
+                if param_dim == 1:
+                    self.value = value
+            except IndexError:
+                raise InputParameterError(
+                    "Input dimension {0} invalid for {1!r} parameter with "
+                    "dimension {2}".format(key, self.name, param_dim))
+
+    def __repr__(self):
+        if self._model is None:
+            return 'Parameter({0!r})'.format(self._name)
+        else:
+            return 'Parameter({0!r}, value={1!r})'.format(
+                self._name, self.value)
+
+    @property
+    def name(self):
+        """Parameter name"""
+
+        return self._name
+
+    @property
+    def default(self):
+        """Parameter default value"""
+
+        if self._model is None:
+            return self._default
+
+        if self._model.param_dim == 1:
+            return self._default
+        else:
+            return np.repeat(self._default, self._model.param_dim)
+
+    @property
+    def value(self):
+        """The unadorned value proxied by this parameter"""
+
+        if self._model is not None:
+            if not hasattr(self._model, self._attr):
+                if self._default is not None:
+                    value = self.default
+                else:
+                    raise AttributeError(
+                        'Parameter value for {0!r} not set'.format(self._name))
+            else:
+                value = getattr(self._model, self._attr)
+            if self._getter is None:
+                return value
+            else:
+                return self._getter(value)
+        raise AttributeError('Parameter definition does not have a value')
+
+    @value.setter
+    def value(self, val):
+        if self._model is not None:
+            if self._setter is not None:
+                val = self._setter(val)
+            setattr(self._model, self._attr, val)
+        raise AttributeError('Cannot set a value on a parameter definition')
+
+    @property
+    def shape(self):
+        """The shape of this parameter's value array."""
+
+        return self._shape
+
+    @property
+    def size(self):
+        """The size of this parameter's value array."""
+
+        return np.size(self.value)
+
+    @property
+    def fixed(self):
+        """
+        Boolean indicating if the parameter is kept fixed during fitting.
+        """
+
+        if self._model is not None:
+            fixed = self._model._constraints.setdefault('fixed', {})
+            return fixed.setdefault(self._name, self._default_fixed)
+        else:
+            return self._default_fixed
+
+    @fixed.setter
+    def fixed(self, value):
+        """Fix a parameter"""
+        if self._model is not None:
+            assert isinstance(value, bool), "Fixed can be True or False"
+            fixed = self._model._constraints.setdefault('fixed', {})
+            fixed[self._name] = value
+            self._model._fit_parameters, self._model._fit_param_indices, \
+                = self._model._model_to_fit_params()
+        else:
+            raise AttributeError("can't set attribute 'fixed' on Parameter "
+                                 "definition")
+
+    @property
+    def tied(self):
+        """
+        Indicates that this parameter is linked to another one.
+
+        A callable which provides the relationship of the two parameters.
+        """
+
+        if self._model is not None:
+            tied = self._model._constraints.setdefault('tied', {})
+            return tied.setdefault(self._name, self._default_tied)
+        else:
+            return self._default_tied
+
+    @tied.setter
+    def tied(self, value):
+        """Tie a parameter"""
+
+        if self._model is not None:
+            assert callable(value) or value in (False, None), \
+                    "Tied must be a callable"
+            tied = self._model._constraints.setdefault('tied', {})
+            tied[self._name] = value
+            self._model._fit_parameters, self._model._fit_param_indices, \
+                = self._model._model_to_fit_params()
+        else:
+            raise AttributeError("can't set attribute 'tied' on Parameter "
+                                 "definition")
+
+    @property
+    def bounds(self):
+        """The minimum and maximum values of a parameter as a tuple"""
+
+        if self._model is not None:
+            bounds = self._model._constraints.setdefault('bounds', {})
+            return bounds.setdefault(self._name,
+                                     (self._default_min, self._default_max))
+        else:
+            return (self._default_min, self._default_max)
+
+    @bounds.setter
+    def bounds(self, value):
+        """Set the minimum and maximum values of a parameter from a tuple"""
+
+        if self._model is not None:
+            _min, _max = value
+            if _min is not None:
+                assert isinstance(_min, numbers.Number), \
+                        "Min value must be a number"
+                _min = float(_min)
+
+            if _max is not None:
+                assert isinstance(_max, numbers.Number), \
+                        "Max value must be a number"
+                _max = float(_max)
+
+            bounds = self._model._constraints.setdefault('bounds', {})
+            bounds[self._name] = (_min, _max)
+            self._model._model_to_fit_params()
+        else:
+            raise AttributeError("can't set attribute 'bounds' on Parameter "
+                                 "definition")
+
+    @property
+    def min(self):
+        """A value used as a lower bound when fitting a parameter"""
+
+        return self.bounds[0]
+
+    @min.setter
+    def min(self, value):
+        """Set a minimum value of a parameter"""
+
+        if self._model is not None:
+            self.bounds = (value, self.max)
+        else:
+            raise AttributeError("can't set attribute 'min' on Parameter "
+                                 "definition")
+
+    @property
+    def max(self):
+        """A value used as an upper bound when fitting a parameter"""
+
+        return self.bounds[1]
+
+    @max.setter
+    def max(self, value):
+        """Set a maximum value of a parameter."""
+
+        if self._model is not None:
+            self.bounds = (self.min, value)
+        else:
+            raise AttributeError("can't set attribute 'max' on Parameter "
+                                 "definition")
+
+    @classmethod
+    def _get_nextid(cls):
+        """Returns a monotonically increasing ID used to order Parameter
+        descriptors declared at the class-level of Model subclasses.
+
+        This allows the desired parameter order to be determined without
+        having to list it manually in the param_names class attribute.
+        """
+
+        nextid = cls._nextid
+        cls._nextid += 1
+        return nextid
+
+    def _validate_value(self, model, value):
+        if model is None:
+            return
+
+        param_dim = model.param_dim
+        if param_dim == 1:
+            # Just validate the value with _tofloat
+            return _tofloat(value)
+        else:
+            try:
+                # Validate each value
+                value, shape = _tofloat(value)
+            except (TypeError, IndexError):
+                raise InputParameterError(
+                    "Expected a multivalued input of dimension {0} "
+                    "for parameter {1!r}".format(param_dim, self.name))
+
+            return value, shape
+
+    def _create_value_wrapper(self, wrapper, model):
+        """Wrappers a getter/setter function to support optionally passing in
+        a reference to the model object as the second argument.
+
+        If a model is tied to this parameter and its getter/setter supports
+        a second argument then this creates a partial function using the model
+        instance as the second argument.
+        """
+
+        if isinstance(wrapper, np.ufunc):
+            if wrapper.nin != 1:
+                raise TypeError("A numpy.ufunc used for Parameter "
+                                "getter/setter may only take one input "
+                                "argument")
+        else:
+            wrapper_args = inspect.getargspec(wrapper)
+            nargs = len(wrapper_args.args)
+
+            if nargs == 1:
+                pass
+            elif nargs == 2:
+                if model is not None:
+                    # Don't make a partial function unless we're tied to a
+                    # specific model instance
+                    model_arg = wrapper_args.args[1]
+                    wrapper = functools.partial(wrapper, **{model_arg: model})
+            else:
+                raise TypeError("Parameter getter/setter must be a function "
+                                "of either one or two arguments")
+
+        return wrapper
+
+    def __add__(self, val):
+        return self.value + val
+
+    def __radd__(self, val):
+        return self.value + val
+
+    def __sub__(self, val):
+        return self.value - val
+
+    def __rsub__(self, val):
+        return val - self.value
+
+    def __mul__(self, val):
+        return self.value * val
+
+    def __rmul__(self, val):
+        return self.value * val
+
+    def __pow__(self, val):
+        return self.value ** val
+
+    def __div__(self, val):
+        return self.value / val
+
+    def __rdiv__(self, val):
+        return val / self.value
+
+    def __truediv__(self, val):
+        return self.value / val
+
+    def __rtruediv__(self, val):
+        return val / self.value
+
+    def __eq__(self, val):
+        return (np.asarray(self) == np.asarray(val)).all()
+
+    def __ne__(self, val):
+        return not (np.asarray(self) == np.asarray(val)).all()
+
+    def __lt__(self, val):
+        return (np.asarray(self) < np.asarray(val)).all()
+
+    def __gt__(self, val):
+        return (np.asarray(self) > np.asarray(val)).all()
+
+    def __le__(self, val):
+        return (np.asarray(self) <= np.asarray(val)).all()
+
+    def __ge__(self, val):
+        return (np.asarray(self) >= np.asarray(val)).all()
+
+    def __neg__(self):
+        return -self.value * (-1)
+
+    def __abs__(self):
+        return np.abs(self.value)
diff --git a/astropy/modeling/polynomial.py b/astropy/modeling/polynomial.py
new file mode 100644
index 0000000..99077f7
--- /dev/null
+++ b/astropy/modeling/polynomial.py
@@ -0,0 +1,1307 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+This module contains predefined polynomial models.
+"""
+
+from __future__ import division
+
+import collections
+
+from textwrap import dedent
+
+import numpy as np
+
+from .core import ParametricModel, Model, SerialCompositeModel, format_input
+from .functional_models import Shift
+from .parameters import Parameter
+from .utils import poly_map_domain, comb
+from ..logger import log
+from ..utils import lazyproperty, indent
+
+
+__all__ = [
+    'Chebyshev1D', 'Chebyshev2D', 'InverseSIP',
+    'Legendre1D', 'Legendre2D', 'Polynomial1D',
+    'Polynomial2D', 'SIP', 'OrthoPolynomialBase',
+    'PolynomialModel'
+]
+
+
+class PolynomialBase(ParametricModel):
+    """
+    Base class for all polynomial-like models with an arbitrary number of
+    parameters in the form of coeffecients.
+
+    In this case Parameter instances are returned through the class's
+    ``__getattr__`` rather than through class descriptors.
+    """
+
+    # Default _param_names list; this will be filled in by the implementation's
+    # __init__
+    _param_names = []
+
+    linear = True
+    col_deriv = False
+
+    @lazyproperty
+    def param_names(self):
+        """Coefficient names generated based on the model's polynomial degree
+        and number of dimensions.
+
+        Subclasses should implement this to return parameter names in the
+        desired format.
+
+        On most `Model` classes this is a class attribute, but for polynomial
+        models it is an instance attribute since each polynomial model instance
+        can have different parameters depending on the degree of the polynomial
+        and the number of dimensions, for example.
+        """
+
+        return self._param_names
+
+    def __getattr__(self, attr):
+        if self._param_names and attr in self._param_names:
+            return Parameter(attr, default=0.0, model=self)
+        else:
+            return super(PolynomialBase, self).__getattr__(attr)
+
+    def __setattr__(self, attr, value):
+        # TODO: Support a means of specifying default values for coefficients
+        # Check for self._ndim first--if it hasn't been defined then the
+        # instance hasn't been initialized yet and self.param_names probably
+        # won't work.
+        # This has to vaguely duplicate the functionality of
+        # Parameter.__set__.
+        # TODO: I wonder if there might be a way around that though...
+        if attr[0] != '_' and self._param_names and attr in self._param_names:
+            param = Parameter(attr, default=0.0, model=self)
+            # This is a little hackish, but we can actually reuse the
+            # Parameter.__set__ method here
+            param.__set__(self, value)
+        else:
+            super(PolynomialBase, self).__setattr__(attr, value)
+
+    def _deriv_with_constraints(self, params=None, x=None, y=None):
+        if y is None:
+            d = np.array(self.deriv(x=x))
+        else:
+            d = np.array(self.deriv(x=x, y=y))
+
+        if self.col_deriv:
+            return d[self._fit_param_indices]
+        else:
+            return d[:, self._fit_param_indices]
+
+class PolynomialModel(PolynomialBase):
+    """
+    Base class for polynomial models.
+
+    Its main purpose is to determine how many coefficients are needed
+    based on the polynomial order and dimension and to provide their
+    default values, names and ordering.
+    """
+
+    def __init__(self, degree, n_inputs=1, n_outputs=1, param_dim=1,
+                 **params):
+        self._degree = degree
+        self._order = self.get_num_coeff(n_inputs)
+        self._param_names = self._generate_coeff_names(n_inputs)
+        self._n_inputs = n_inputs
+        self._n_outputs = n_outputs
+
+        if params:
+            p = params.get('c0', params.get('c0_0'))
+            if isinstance(p, collections.Sequence):
+                n_params = len(p)
+            else:
+                n_params = 1
+            if param_dim != n_params:
+                if param_dim == 1:
+                    log.info("Inferred {0} dimensions when creating a {1} model. "
+                             "Resetting param_dim to {2}".format(
+                                 n_params, self.__class__.__name__, n_params))
+                    param_dim = n_params
+                else:
+                    raise ValueError("Number of coefficient sets ({0}) does "
+                                     "not match number of parameter sets "
+                                     "({1}).".format(n_params, param_dim))
+
+            self._validate_params(**params)
+
+        super(PolynomialModel, self).__init__(param_dim=param_dim)
+
+        for name, value in params.items():
+            setattr(self, name, value)
+
+    @property
+    def degree(self):
+        """TODO: Docstring for me"""
+
+        return self._degree
+
+    @property
+    def n_inputs(self):
+        """The number of input variables to model evaluation."""
+
+        return self._n_inputs
+
+    @property
+    def n_outputs(self):
+        """The number of outputs returned when model is evaluated."""
+
+        return self._n_outputs
+
+    def get_num_coeff(self, ndim):
+        """
+        Return the number of coefficients in one parameter set
+        """
+
+        if self.degree < 1  or self.degree > 16:
+            raise ValueError("Degree of polynomial must be 1< deg < 16")
+        # deg+1 is used to account for the difference between iraf using
+        # degree and numpy using exact degree
+        if ndim != 1:
+            nmixed = comb(self.degree, ndim)
+        else:
+            nmixed = 0
+        numc = self.degree * ndim + nmixed + 1
+        return numc
+
+    def _invlex(self):
+        c = []
+        lencoeff = self.degree + 1
+        for i in range(lencoeff):
+            for j in range(lencoeff):
+                if i + j <= self.degree:
+                    c.append((j, i))
+        return c[::-1]
+
+    def _validate_params(self, **params):
+        numcoeff = self._order
+        assert(len(params) == numcoeff)
+        valid_params = set(self._param_names)
+        provided_params = set(params)
+        diff = valid_params.difference(provided_params)
+        if diff:
+            raise TypeError('Unrecognized input parameters: %s' % diff)
+
+    def _generate_coeff_names(self, ndim):
+        names = []
+        if ndim == 1:
+            for n in range(self._order):
+                names.append('c{0}'.format(n))
+        else:
+            for i in range(self.degree + 1):
+                names.append('c{0}_{1}'.format(i, 0))
+            for i in range(1, self.degree + 1):
+                names.append('c{0}_{1}'.format(0, i))
+            for i in range(1, self.degree):
+                for j in range(1, self.degree):
+                    if i + j < self.degree + 1:
+                        names.append('c{0}_{1}'.format(i, j))
+        return names
+
+
+class OrthoPolynomialBase(PolynomialBase):
+    """
+    This is a base class for the 2D Chebyshev and Legendre models.
+
+    The polynomials implemented here require a maximum degree in x and y.
+
+    Parameters
+    ----------
+
+    x_degree : int
+        degree in x
+    y_degree : int
+        degree in y
+    x_domain : list or None
+        domain of the x independent variable
+    y_domain : list or None
+        domain of the y independent variable
+    x_window : list or None
+        range of the x independent variable
+    y_window : list or None
+        range of the y independent variable
+    param_dim : int
+        number of parameter sets
+    **params : dict
+        {keyword: value} pairs, representing {parameter_name: value}
+    """
+
+    n_inputs = 2
+    n_outputs = 1
+
+    def __init__(self, x_degree, y_degree, x_domain=None, x_window=None,
+                 y_domain=None, y_window=None, param_dim=1, **params):
+        # TODO: Perhaps some of these other parameters should be properties?
+        # TODO: An awful lot of the functionality in this method is still
+        # shared by PolynomialModel; perhaps some of it can be generalized in
+        # PolynomialBase
+        self.x_degree = x_degree
+        self.y_degree = y_degree
+        self._order = self.get_num_coeff()
+        self.x_domain = x_domain
+        self.y_domain = y_domain
+        self.x_window = x_window
+        self.y_window = y_window
+        self._param_names = self._generate_coeff_names()
+
+        if params:
+            p = params.get('c0_0')
+            if isinstance(p, collections.Sequence):
+                n_params = len(p)
+            else:
+                n_params = 1
+            if param_dim != n_params:
+                if param_dim == 1:
+                    log.info("Inferred {0} dimensions when creating a {1} "
+                             "model. Resetting param_dim to {2}".format(
+                                 n_params, self.__class__.__name__, n_params))
+                    param_dim = n_params
+                else:
+                    raise ValueError("Number of coefficient sets {0} does "
+                                     "not match number of parameter sets "
+                                     "({1})".format(n_params, param_dim))
+
+            self._validate_params(**params)
+
+        super(OrthoPolynomialBase, self).__init__(param_dim=param_dim)
+
+        for name, value in params.items():
+            setattr(self, name, value)
+
+    def get_num_coeff(self):
+        """
+        Determine how many coefficients are needed
+
+        Returns
+        -------
+        numc : int
+            number of coefficients
+        """
+
+        return (self.x_degree + 1) * (self.y_degree + 1)
+
+    def _validate_params(self, **params):
+        numcoeff = self.get_num_coeff()
+        assert(len(params) == numcoeff)
+
+    def _invlex(self):
+        # TODO: This is a very slow way to do this; fix it and related methods
+        # like _alpha
+        c = []
+        xvar = np.arange(self.x_degree + 1)
+        yvar = np.arange(self.y_degree + 1)
+        for j in yvar:
+            for i in xvar:
+                c.append((i, j))
+        return np.array(c[::-1])
+
+    def invlex_coeff(self):
+        coeff = []
+        xvar = np.arange(self.x_degree + 1)
+        yvar = np.arange(self.y_degree + 1)
+        for j in yvar:
+            for i in xvar:
+                name = 'c{0}_{1}'.format(i, j)
+                coeff.append(getattr(self, name))
+        return np.array(coeff[::-1])
+
+    def _alpha(self):
+        invlexdeg = self._invlex()
+        invlexdeg[:, 1] = invlexdeg[:, 1] + self.x_degree + 1
+        nx = self.x_degree + 1
+        ny = self.y_degree + 1
+        alpha = np.zeros((ny * nx + 3, ny + nx))
+        for n in range(len(invlexdeg)):
+            alpha[n][invlexdeg[n]] = [1, 1]
+            alpha[-2, 0] = 1
+            alpha[-3, nx] = 1
+        return alpha
+
+    def imhorner(self, x, y, coeff):
+        _coeff = list(coeff)
+        _coeff.extend([0, 0, 0])
+        alpha = self._alpha()
+        r0 = _coeff[0]
+        nalpha = len(alpha)
+
+        karr = np.diff(alpha, axis=0)
+        kfunc = self._fcache(x, y)
+        x_terms = self.x_degree + 1
+        y_terms = self.y_degree + 1
+        nterms = x_terms + y_terms
+        for n in range(1, nterms + 1 + 3):
+            setattr(self, 'r' + str(n), 0.)
+
+        for n in range(1, nalpha):
+            k = karr[n - 1].nonzero()[0].max() + 1
+            rsum = 0
+            for i in range(1, k + 1):
+                rsum = rsum + getattr(self, 'r' + str(i))
+            val = kfunc[k - 1] * (r0 + rsum)
+            setattr(self, 'r' + str(k), val)
+            r0 = _coeff[n]
+            for i in range(1, k):
+                setattr(self, 'r' + str(i), 0.)
+        result = r0
+        for i in range(1, nterms + 1 + 3):
+            result = result + getattr(self, 'r' + str(i))
+        return result
+
+    def _generate_coeff_names(self):
+        names = []
+        for j in range(self.y_degree + 1):
+            for i in range(self.x_degree + 1):
+                names.append('c{0}_{1}'.format(i, j))
+        return names
+
+    def _fcache(self, x, y):
+        # TODO: Write a docstring explaining the actual purpose of this method
+        """To be implemented by subclasses"""
+
+        raise NotImplementedError("Subclasses should implement this")
+
+    @format_input
+    def __call__(self, x, y):
+        """
+        Transforms data using this model.
+
+        Parameters
+        --------------
+        x : scalar, list or array
+        y : scalar, lis or array
+        """
+
+        assert x.shape == y.shape, \
+            "Expected input arrays to have the same shape"
+        if self.x_domain is not None:
+            x = poly_map_domain(x, self.x_domain, self.x_window)
+        if self.y_domain is not None:
+            y = poly_map_domain(y, self.y_domain, self.y_window)
+        invcoeff = self.invlex_coeff()
+
+        return self.imhorner(x, y, invcoeff)
+
+
+class Chebyshev1D(PolynomialModel):
+    """
+    1D Chebyshev polynomial of the 1st kind.
+
+    Parameters
+    ----------
+    degree : int
+        degree of the series
+    domain : list or None
+    window : list or None
+        If None, it is set to [-1,1]
+        Fitters will remap the domain to this window
+    param_dim : int
+        number of parameter sets
+    **params : dict
+        keyword : value pairs, representing parameter_name: value
+    """
+
+    def __init__(self, degree, domain=None, window=[-1, 1], param_dim=1,
+                 **params):
+        self.domain = domain
+        self.window = window
+        super(Chebyshev1D, self).__init__(degree, n_inputs=1, n_outputs=1,
+                                          param_dim=param_dim,
+                                          **params)
+
+    def clenshaw(self, x, coeff):
+        """
+        Evaluates the polynomial using Clenshaw's algorithm.
+        """
+
+        if isinstance(x, tuple) or isinstance(x, list):
+            x = np.asarray(x)
+        if len(coeff) == 1:
+            c0 = coeff[0]
+            c1 = 0
+        elif len(coeff) == 2:
+            c0 = coeff[0]
+            c1 = coeff[1]
+        else:
+            x2 = 2 * x
+            c0 = coeff[-2]
+            c1 = coeff[-1]
+            for i in range(3, len(coeff) + 1):
+                tmp = c0
+                c0 = coeff[-i] - c1
+                c1 = tmp + c1 * x2
+        return c0 + c1 * x
+
+    def deriv(self, x, *params):
+        """
+        Computes the Vandermonde matrix.
+
+        Parameters
+        ----------
+        x : ndarray
+            input
+        params : throw away parameter
+            parameter list returned by non-linear fitters
+
+        Returns
+        -------
+        result : ndarray
+            The Vandermonde matrix
+        """
+
+        x = np.array(x, dtype=np.float, copy=False, ndmin=1)
+        v = np.empty((self.degree + 1,) + x.shape, dtype=x.dtype)
+        v[0] = x * 0 + 1
+        x2 = 2 * x
+        v[1] = x
+        for i in range(2, self.degree + 1):
+            v[i] = v[i - 1] * x2 - v[i - 2]
+        return np.rollaxis(v, 0, v.ndim)
+
+    @format_input
+    def __call__(self, x):
+        """
+        Transforms data using this model.
+
+        Parameters
+        --------------
+        x : scalar, list or array
+            input
+        """
+
+        if self.domain is not None:
+            x = poly_map_domain(x, self.domain, self.window)
+        return self.clenshaw(x, self.param_sets)
+
+
+class Legendre1D(PolynomialModel):
+    """
+    1D Legendre polynomial.
+
+    Parameters
+    ----------
+    degree : int
+        degree of the series
+    domain : list or None
+    window : list or None
+        If None, it is set to [-1,1]
+        Fitters will remap the domain to this window
+    param_dim : int
+        number of parameter sets
+    **params : dict
+        keyword: value pairs, representing parameter_name: value
+    """
+
+    def __init__(self, degree, domain=None, window=[-1, 1], param_dim=1,
+                 **params):
+        self.domain = domain
+        self.window = window
+        super(Legendre1D, self).__init__(degree, n_inputs=1, n_outputs=1,
+                                         param_dim=param_dim,
+                                         **params)
+
+    def clenshaw(self, x, coeff):
+        if isinstance(x, tuple) or isinstance(x, list):
+            x = np.asarray(x)
+        if len(coeff) == 1:
+            c0 = coeff[0]
+            c1 = 0
+        elif len(coeff) == 2:
+            c0 = coeff[0]
+            c1 = coeff[1]
+        else:
+            nd = len(coeff)
+            c0 = coeff[-2]
+            c1 = coeff[-1]
+            for i in range(3, len(coeff) + 1):
+                tmp = c0
+                nd = nd - 1
+                c0 = coeff[-i] - (c1 * (nd - 1)) / nd
+                c1 = tmp + (c1 * x * (2 * nd - 1)) / nd
+        return c0 + c1 * x
+
+    def deriv(self, x, *params):
+        """
+        Computes the Vandermonde matrix.
+
+        Parameters
+        ----------
+        x : ndarray
+            input
+        params : throw away parameter
+            parameter list returned by non-linear fitters
+
+        Returns
+        -------
+        result : ndarray
+            The Vandermonde matrix
+        """
+
+        x = np.array(x, dtype=np.float, copy=False, ndmin=1)
+        v = np.empty((self.degree + 1,) + x.shape, dtype=x.dtype)
+        v[0] = x * 0 + 1
+        v[1] = x
+        for i in range(2, self.degree + 1):
+            v[i] = (v[i - 1] * x * (2 * i - 1) - v[i - 2] * (i - 1)) / i
+        return np.rollaxis(v, 0, v.ndim)
+
+    @format_input
+    def __call__(self, x):
+        """
+        Transforms data using this model.
+
+        Parameters
+        --------------
+        x : scalar, list or array
+            input
+        """
+
+        if self.domain is not None:
+            x = poly_map_domain(x, self.domain, self.window)
+        return self.clenshaw(x, self.param_sets)
+
+
+class Polynomial1D(PolynomialModel):
+    """
+    1D Polynomial model.
+
+    Parameters
+    ----------
+    degree : int
+        degree of the series
+    domain : list or None
+    window : list or None
+        If None, it is set to [-1,1]
+        Fitters will remap the domain to this window
+    param_dim : int
+        number of parameter sets
+    **params : dict
+        keyword: value pairs, representing parameter_name: value
+    """
+
+    def __init__(self, degree, domain=[-1, 1], window=[-1, 1], param_dim=1,
+                 **params):
+        self.domain = domain
+        self.window = window
+        super(Polynomial1D, self).__init__(degree, n_inputs=1,
+                                           n_outputs=1,
+                                           param_dim=param_dim, **params)
+
+    def deriv(self, x, *params):
+        """
+        Computes the Vandermonde matrix.
+
+        Parameters
+        ----------
+        x : ndarray
+            input
+        params : throw away parameter
+            parameter list returned by non-linear fitters
+
+        Returns
+        -------
+        result : ndarray
+            The Vandermonde matrix
+        """
+
+        v = np.empty((self.degree + 1,) + x.shape, dtype=np.float)
+        v[0] = x * 0 + 1
+        v[1] = x
+        for i in range(2, self.degree + 1):
+            v[i] = v[i - 1] * x
+        return np.rollaxis(v, 0, v.ndim)
+
+    def horner(self, x, coef):
+        c0 = coef[-1] + x * 0
+        for i in range(2, len(coef) + 1):
+            c0 = coef[-i] + c0 * x
+        return c0
+
+    @format_input
+    def __call__(self, x):
+        """
+        Transforms data using this model.
+
+        Parameters
+        --------------
+        x : scalar, list or array
+            input
+        """
+
+        return self.horner(x, self.param_sets)
+
+
+class Polynomial2D(PolynomialModel):
+    """
+    2D Polynomial  model.
+
+    Represents a general polynomial of degree n:
+
+    .. math::
+        P(x,y) = c_{0_0} + c_{1_0}*x + ...+ c_{n_0}*x^n + c_{0_1}*y + ...+ c_{0_n}*y^n
+        + c_{1_1}*x*y + c_{1_2}*x*y^2 + ... + c_{1_(n-1)}*x*y^{n-1}+ ... + c_{(n-1)_1}*x^{n-1}*y
+
+    Parameters
+    ----------
+    degree : int
+        highest power of the polynomial,
+        the number of terms is degree+1
+    x_domain : list or None
+        domain of the x independent variable
+    y_domain : list or None
+        domain of the y independent variable
+    x_window : list or None
+        range of the x independent variable
+    y_window : list or None
+        range of the y independent variable
+    param_dim : int
+        number of parameter sets
+    **params : dict
+        keyword: value pairs, representing parameter_name: value
+    """
+
+    def __init__(self, degree, x_domain=[-1, 1], y_domain=[-1, 1],
+                 x_window=[-1, 1], y_window=[-1, 1],
+                 param_dim=1, **params):
+        super(Polynomial2D, self).__init__(degree, n_inputs=2,
+                                           n_outputs=1,
+                                           param_dim=param_dim, **params)
+        self.x_domain = x_domain
+        self.y_domain = y_domain
+        self.x_window = x_window
+        self.y_window = y_window
+
+    def mhorner(self, x, y, coeff):
+        """
+        Multivariate Horner's scheme
+
+        Parameters
+        --------------
+        x, y : array
+        coeff : array of coefficients in inverse lexical order
+        """
+        alpha = np.array(self._invlex())
+        r0 = coeff[0]
+        r1 = r0 * 0.0
+        r2 = r0 * 0.0
+        karr = np.diff(alpha, axis=0)
+        for n in range(len(karr)):
+            if karr[n, 1] != 0:
+                r2 = y * (r0 + r1 + r2)
+                r1 = coeff[0] * 0.
+            else:
+                r1 = x * (r0 + r1)
+            r0 = coeff[n + 1]
+        return r0 + r1 + r2
+
+    def deriv(self, x, y, *params):
+        """
+        Computes the Vandermonde matrix.
+
+        Parameters
+        ----------
+        x : ndarray
+            input
+        y : ndarray
+            input
+        params : throw away parameter
+            parameter list returned by non-linear fitters
+
+        Returns
+        -------
+        result : ndarray
+            The Vandermonde matrix
+        """
+
+        if x.ndim == 2:
+            x = x.flatten()
+        if y.ndim == 2:
+            y = y.flatten()
+        if x.size != y.size:
+            raise ValueError('Expected x and y to be of equal size')
+
+        designx = x[:, None] ** np.arange(self.degree + 1)
+        designy = y[:, None] ** np.arange(1, self.degree + 1)
+
+        designmixed = []
+        for i in range(1, self.degree):
+            for j in range(1, self.degree):
+                if i + j <= self.degree:
+                    designmixed.append((x ** i) * (y ** j))
+        designmixed = np.array(designmixed).T
+        if designmixed.any():
+            v = np.hstack([designx, designy, designmixed])
+        else:
+            v = np.hstack([designx, designy])
+        return v
+
+    def invlex_coeff(self):
+        coeff = []
+        lencoeff = range(self.degree + 1)
+        for i in lencoeff:
+            for j in lencoeff:
+                if i + j <= self.degree:
+                    name = 'c{0}_{1}'.format(j, i)
+                    coeff.append(getattr(self, name))
+        return np.array(coeff[::-1])
+
+    @format_input
+    def __call__(self, x, y):
+        """
+        Transforms data using this model.
+
+        Parameters
+        --------------
+        x : scalar, list or array
+            input
+        y : scalar, list or array
+            input
+        """
+
+        invcoeff = self.invlex_coeff()
+        assert x.shape == y.shape, \
+            "Expected input arrays to have the same shape"
+
+        return self.mhorner(x, y, invcoeff)
+
+
+class Chebyshev2D(OrthoPolynomialBase):
+    """
+    2D Chebyshev polynomial of the 1st kind.
+
+    It is defined as
+
+    .. math:: P_{n_m}(x,y) = \sum C_{n_m}  T_n(x) T_m(y)
+
+    Parameters
+    ----------
+
+    x_degree : int
+        degree in x
+    y_degree : int
+        degree in y
+    x_domain : list or None
+        domain of the x independent variable
+    y_domain : list or None
+        domain of the y independent variable
+    x_window : list or None
+        range of the x independent variable
+    y_window : list or None
+        range of the y independent variable
+    param_dim : int
+        number of parameter sets
+    **params : dict
+        keyword: value pairs, representing parameter_name: value
+
+    """
+
+    def __init__(self, x_degree, y_degree, x_domain=None, x_window=[-1, 1],
+                 y_domain=None, y_window=[-1,1], param_dim=1, **params):
+        super(Chebyshev2D, self).__init__(x_degree, y_degree,
+                                          x_domain=x_domain,
+                                          y_domain=y_domain,
+                                          x_window=x_window,
+                                          y_window=y_window,
+                                          param_dim=param_dim, **params)
+
+    def _fcache(self, x, y):
+        """
+        Calculate the individual Chebyshev functions once and store them in a
+        dictionary to be reused.
+        """
+
+        x_terms = self.x_degree + 1
+        y_terms = self.y_degree + 1
+        kfunc = {}
+        kfunc[0] = np.ones(x.shape)
+        kfunc[1] = x.copy()
+        kfunc[x_terms] = np.ones(y.shape)
+        kfunc[x_terms + 1] = y.copy()
+        for n in range(2, x_terms):
+            kfunc[n] = 2 * x * kfunc[n - 1] - kfunc[n - 2]
+        for n in range(x_terms + 2, x_terms + y_terms):
+            kfunc[n] = 2 * y * kfunc[n - 1] - kfunc[n - 2]
+        return kfunc
+
+    def deriv(self, x, y, *params):
+        """
+        Derivatives with respect to the coefficients.
+
+        This is an array with Chebyshev polynomials:
+
+        Tx0Ty0  Tx1Ty0...TxnTy0...TxnTym
+
+        Parameters
+        ----------
+        x : ndarray
+            input
+        y : ndarray
+            input
+        params : throw away parameter
+            parameter list returned by non-linear fitters
+
+        Returns
+        -------
+        result : ndarray
+            The Vandermonde matrix
+        """
+
+        if x.shape != y.shape:
+            raise ValueError("x and y must have the same shape")
+
+        x = x.flatten()
+        y = y.flatten()
+        x_deriv = self._chebderiv1d(x, self.x_degree + 1).T
+        y_deriv = self._chebderiv1d(y, self.y_degree + 1).T
+
+        ij = []
+        for i in range(self.y_degree + 1):
+            for j in range(self.x_degree + 1):
+                ij.append(x_deriv[j] * y_deriv[i])
+
+        v = np.array(ij)
+        return v.T
+
+    def _chebderiv1d(self, x, deg):
+        """
+        Derivative of 1D Chebyshev series
+        """
+
+        x = np.array(x, dtype=np.float, copy=False, ndmin=1)
+        d = np.empty((deg + 1, len(x)), dtype=x.dtype)
+        d[0] = x * 0 + 1
+        if deg > 0:
+            x2 = 2 * x
+            d[1] = x
+            for i in range(2, deg + 1):
+                d[i] = d[i - 1] * x2 - d[i - 2]
+        return np.rollaxis(d, 0, d.ndim)
+
+
+class Legendre2D(OrthoPolynomialBase):
+    """
+    Legendre 2D polynomial.
+
+    Defined as:
+
+    .. math:: P_{nm}(x,y) = C_{n_m}  L_n(x ) L_m(y)
+
+
+    Parameters
+    ----------
+
+    x_degree : int
+        degree in x
+    y_degree : int
+        degree in y
+    x_domain : list or None
+        domain of the x independent variable
+    y_domain : list or None
+        domain of the y independent variable
+    x_window : list or None
+        range of the x independent variable
+    y_window : list or None
+        range of the y independent variable
+    param_dim : int
+        number of parameter sets
+    **params : dict
+        keyword: value pairs, representing parameter_name: value
+    """
+
+    def __init__(self, x_degree, y_degree, x_domain=None, x_window=[-1, 1],
+                 y_domain=None, y_window=[-1, 1], param_dim=1, **params):
+        super(Legendre2D, self).__init__(x_degree, y_degree,
+                                         x_domain=x_domain,
+                                         y_domain=y_domain,
+                                         x_window=x_window,
+                                         y_window=y_window,
+                                         param_dim=param_dim, **params)
+
+    def _fcache(self, x, y):
+        """
+        Calculate the individual Legendre functions once and store them in a
+        dictionary to be reused.
+        """
+
+        x_terms = self.x_degree + 1
+        y_terms = self.y_degree + 1
+        kfunc = {}
+        kfunc[0] = np.ones(x.shape)
+        kfunc[1] = x.copy()
+        kfunc[x_terms] = np.ones(y.shape)
+        kfunc[x_terms + 1] = y.copy()
+        for n in range(2, x_terms):
+            kfunc[n] = (((2 * (n - 1) + 1) * x * kfunc[n - 1] -
+                        (n - 1) * kfunc[n - 2]) / n)
+        for n in range(2, y_terms):
+            kfunc[n + x_terms] = ((2 * (n - 1) + 1) * y * kfunc[n + x_terms - 1] -
+                                  (n - 1) * kfunc[n + x_terms - 2]) / (n)
+        return kfunc
+
+    def deriv(self, x, y, *params):
+        """
+        Derivatives with repect to the coefficients.
+        This is an array with Legendre polynomials:
+
+        Lx0Ly0  Lx1Ly0...LxnLy0...LxnLym
+
+        Parameters
+        ----------
+        x : ndarray
+            input
+        y : ndarray
+            input
+        params : throw away parameter
+            parameter list returned by non-linear fitters
+
+        Returns
+        -------
+        result : ndarray
+            The Vandermonde matrix
+        """
+        if x.shape != y.shape:
+            raise ValueError("x and y must have the same shape")
+        x = x.flatten()
+        y = y.flatten()
+        x_deriv = self._legendderiv1d(x, self.x_degree + 1).T
+        y_deriv = self._legendderiv1d(y, self.y_degree + 1).T
+
+        ij = []
+        for i in range(self.y_degree + 1):
+            for j in range(self.x_degree + 1):
+                ij.append(x_deriv[j] * y_deriv[i])
+
+        v = np.array(ij)
+        return v.T
+
+    def _legendderiv1d(self, x, deg):
+        """Derivative of 1D Legendre polynomial"""
+
+        x = np.array(x, dtype=np.float, copy=False, ndmin=1)
+        d = np.empty((deg + 1,) + x.shape, dtype=x.dtype)
+        d[0] = x * 0 + 1
+        if deg > 0:
+            d[1] = x
+            for i in range(2, deg + 1):
+                d[i] = (d[i - 1] * x * (2 * i - 1) - d[i - 2] * (i - 1)) / i
+        return np.rollaxis(d, 0, d.ndim)
+
+
+class _SIP1D(Model):
+    """
+    This implements the Simple Imaging Polynomial Model (SIP) in 1D.
+
+    It's unlikely it will be used in 1D so this class is private
+    and SIP should be used instead.
+    """
+
+    n_inputs = 2
+
+    def __init__(self, order, coeff_prefix, param_dim=1, **params):
+        self.order = order
+        self.coeff_prefix = coeff_prefix
+        self._param_names = self._generate_coeff_names(coeff_prefix)
+        coeffname = '{0}_0_2'.format(coeff_prefix)
+
+        if params:
+            p = params.get(coeffname, None)
+            if isinstance(p, collections.Sequence):
+                n_params = len(p)
+            else:
+                n_params = 1
+
+            # TODO: This pattern is repeated in so many models and seems like a
+            # check that could be moved into a method
+            if param_dim != n_params:
+                if param_dim == 1:
+                    log.info("Inferred {0} dimensions when creating a {1} "
+                             "model. Resetting param_dim to {2}".format(
+                                 n_params, self.__class__.__name__, n_params))
+                    param_dim = n_params
+                else:
+                    raise ValueError(
+                        "Number of coefficient sets ({0}) does not match the "
+                        "number of parameter sets ({1}).".format(
+                            n_params, param_dim))
+
+            self._validate_params(ndim=2, **params)
+
+        super(_SIP1D, self).__init__(param_dim=param_dim, **params)
+
+    def __repr__(self):
+        fmt = """
+        Model: {0}
+        order: {1}
+        coeff_prefix: {2}
+        param_dim: {3}
+        params: {4}
+        """.format(
+              self.__class__.__name__,
+              self.order,
+              self.coeff_prefix,
+              self.param_dim,
+              indent('\n'.join('{0}: {1}'.format(n, getattr(self, '_' + n))
+                     for n in self.param_names), width=19))
+
+        return dedent(fmt[1:])
+
+    def __str__(self):
+        fmt = """
+        Model: {0}
+        order: {1}
+        coeff_prefix: {2}
+        Parameter sets: {3}
+        Parameters:
+                   {3}
+        """.format(
+              self.__class__.__name__,
+              self.order,
+              self.coeff_prefix,
+              self.param_dim,
+              indent('\n'.join('{0}: {1}'.format(n, getattr(self, '_' + n))
+                     for n in self.param_names), width=19))
+
+        return dedent(fmt[1:])
+
+    def get_num_coeff(self, ndim):
+        """
+        Return the number of coefficients in one param set
+        """
+
+        if self.order < 2 or self.order > 9:
+            raise ValueError("Degree of polynomial must be 2< deg < 9")
+
+        nmixed = comb(self.order - 1, ndim)
+        numc = self.order * ndim + nmixed + 1
+        return numc
+
+    def _generate_coeff_names(self, coeff_prefix):
+        names = []
+        for i in range(2, self.order + 1):
+            names.append('{0}_{1}_{2}'.format(coeff_prefix, i, 0))
+        for i in range(2, self.order + 1):
+            names.append('{0}_{1}_{2}'.format(coeff_prefix, 0, i))
+        for i in range(1, self.order):
+            for j in range(1, self.order):
+                if i + j < self.order + 1:
+                    names.append('{0}_{1}_{2}'.format(coeff_prefix, i, j))
+        return names
+
+    def _validate_params(self, ndim, **params):
+        numcoeff = self.get_num_coeff(ndim)
+        assert(len(params) == numcoeff)
+
+    def _coef_matrix(self, coeff_prefix):
+        mat = np.zeros((self.order + 1, self.order + 1))
+        for i in range(2, self.order + 1):
+            attr = '_{0}_{1}_{2}'.format(coeff_prefix, i, 0)
+            mat[i, 0] = getattr(self, attr).value
+        for i in range(2, self.order + 1):
+            attr = '_{0}_{1}_{2}'.format(coeff_prefix, 0, i)
+            mat[0, i] = getattr(self, attr).value
+        for i in range(1, self.order):
+            for j in range(1, self.order):
+                if i + j < self.order + 1:
+                    attr = '_{0}_{1}_{2}'.format(coeff_prefix, i, j)
+                    mat[i, j] = getattr(self, attr).value
+        return mat
+
+    def _eval_sip(self, x, y, coef):
+        x = np.asarray(x, dtype=np.float64)
+        y = np.asarray(y, dtype=np.float64)
+        if self.coeff_prefix == 'a':
+            result = np.zeros(x.shape)
+        else:
+            result = np.zeros(y.shape)
+
+        for i in range(coef.shape[0]):
+            for j in range(coef.shape[1]):
+                if i + j > 1 and i + j < self.order + 1:
+                    result = result + coef[i, j] * x ** i * y ** j
+        return result
+
+    def __call__(self, x, y):
+        mcoef = self._coef_matrix(self.coeff_prefix)
+        return self._eval_sip(x, y, mcoef)
+
+
+class _SIPModel(SerialCompositeModel):
+    """
+    Simple Imaging Polynomial (SIP) model.
+
+    The SIP convention is used to represent distortions in FITS image headers.
+    See [1]_ for a description of the SIP convention.
+
+    Parameters
+    ----------
+    crpix : list or ndarray of length(2)
+        CRPIX values
+    a_order : int
+        SIP polynomial order for first axis
+    a_coeff : dict
+        SIP coefficients for first axis
+    coeff_prefix : str: 'a', 'b', 'A' or 'B'
+        SIP coefficient preffix
+    b_order : int
+        SIP order for second axis
+    b_coeff : dict
+        SIP coefficients for the second axis
+    a_inv_order : int
+        order for the inverse transformation (AP coefficients)
+    a_inv_coeff : dict
+        coefficients for the inverse transform
+    b_inv_order : int
+        order for the inverse transformation (BP coefficients)
+    b_inv_coeff : dict
+        coefficients for the inverse transform
+    param_dim : int
+        number of parameter sets
+
+    References
+    ----------
+    .. [1] `David Shupe, et al, ADASS, ASP Conference Series, Vol. 347, 2005 <http://adsabs.harvard.edu/abs/2005ASPC..347..491S>`_
+    """
+
+    n_inputs = 2
+    n_outputs = 2
+
+    def __init__(self, crpix, a_order, a_coeff, b_order, b_coeff,
+                 ap_order=None, ap_coeff=None, bp_order=None, bp_coeff=None,
+                 param_dim=1):
+        self.crpix = crpix
+        self.a_order = a_order
+        self.b_order = b_order
+        self.a_coeff = a_coeff
+        self.b_coeff = b_coeff
+        self.ap_order = ap_order
+        self.bp_order = bp_order
+        self.ap_coeff = ap_coeff
+        self.bp_coeff = bp_coeff
+        self.shift_a = Shift(-crpix[0])
+        self.shift_b = Shift(-crpix[1])
+        self.sip1d_a = _SIP1D(a_order, coeff_prefix='A',
+                              param_dim=param_dim, **a_coeff)
+        self.sip1d_b = _SIP1D(b_order, coeff_prefix='B',
+                              param_dim=param_dim, **b_coeff)
+        if (ap_order is not None and ap_coeff is not None and
+                bp_order is not None and bp_coeff is not None):
+            self.sip1d_ap = _SIP1D(ap_order, coeff_prefix='AP', **ap_coeff)
+            self.sip1d_bp = _SIP1D(bp_order, coeff_prefix='BP', **bp_coeff)
+        else:
+            self.sip1d_ap = None
+            self.sip1d_bp = None
+
+        super(_SIPModel, self).__init__([self.shift_a, self.shift_b,
+                                         self.sip1d_a, self.sip1d_b])
+        
+
+class SIP(_SIPModel):
+    def __init__(self, crpix, a_order, a_coeff, b_order, b_coeff,
+                 ap_order=None, ap_coeff=None, bp_order=None, bp_coeff=None,
+                 param_dim=1):
+
+        super(SIP, self).__init__(crpix, a_order, a_coeff,
+                                  b_order, b_coeff, ap_order, ap_coeff,
+                                  bp_order, bp_coeff, param_dim=1)
+
+    def inverse(self):
+        if (self.ap_order is not None and self.ap_coeff is not None and
+                self.bp_order is not None and self.bp_coeff is not None):
+            return InverseSIP(self.crpix, self.a_order, self.a_coeff,
+                              self.b_order, self.b_coeff,
+                              self.ap_order, self.ap_coeff,
+                              self.bp_order, self.bp_coeff)
+        else:
+            raise NotImplementedError("An analytical inverse transform has "
+                                      "not been implemented for this model.")
+
+    def __repr__(self):
+        models = [self.shift_a, self.shift_b, self.sip1d_a, self.sip1d_b]
+        fmt = """
+            Model:  {0}
+            """.format(self.__class__.__name__)
+        fmt1 = " %s  " * len(models) % tuple([repr(model) for model in models])
+        fmt = fmt + fmt1
+        return fmt
+
+    def __str__(self):
+        models = [self.shift_a, self.shift_b, self.sip1d_a, self.sip1d_b]
+        fmt = """
+            Model:  {0}
+            """.format(self.__class__.__name__)
+        fmt1 = " %s  " * len(models) % tuple([str(model) for model in models])
+        fmt = fmt + fmt1
+        return fmt
+
+    def __call__(self, x, y):
+        """
+        Transforms data using this model.
+
+        Parameters
+        ----------
+        x : scalar, list, array
+            input
+        y : scalar, list or array
+            input
+        """
+        x = self.shift_a(x)
+        y = self.shift_b(y)
+        x1 = self.sip1d_a(x, y)
+        y1 = self.sip1d_b(x, y)
+        return x1, y1
+
+
+class InverseSIP(_SIPModel):
+    def __init__(self, crpix, a_order, a_coeff, b_order, b_coeff,
+                 ap_order, ap_coeff, bp_order, bp_coeff,
+                 param_dim=1):
+
+        super(InverseSIP, self).__init__(crpix, a_order, a_coeff,
+                                         b_order, b_coeff,
+                                         ap_order, ap_coeff,
+                                         bp_order, bp_coeff, param_dim=1)
+
+    def inverse(self):
+        if (self.a_order is not None and self.a_coeff is not None and
+                self.b_order is not None and self.bp_coeff is not None):
+            return SIP(self.crpix, self.a_order, self.a_coeff,
+                       self.b_order, self.b_coeff,
+                       self.ap_order, self.ap_coeff,
+                       self.bp_order, self.bp_coeff)
+        else:
+            raise NotImplementedError("An analytical inverse transform has "
+                                      "not been implemented for this model.")
+
+    def __call__(self, x, y):
+        if self.sip1d_ap is not None and self.sip1d_bp is not None:
+            x1 = self.sip1d_ap(x, y)
+            y1 = self.sip1d_bp(x, y)
+            x = self.shift_a.inverse()(x1)
+            y = self.shift_b.inverse()(y1)
+            return x, y
+        else:
+            raise NotImplementedError("An analytical inverse transform has "
+                                      "not been implemented for this model.")
+
+    def __repr__(self):
+        models = [self.sip1d_ap, self.sip1d_bp, self.shift_a.inverse(),
+                  self.shift_b.inverse()]
+        fmt = """
+            Model:  {0}
+            """.format(self.__class__.__name__)
+        fmt1 = " %s  " * len(models) % tuple([repr(model) for model in models])
+        fmt = fmt + fmt1
+        return fmt
+
+    def __str__(self):
+        models = [self.sip1d_ap, self.sip1d_bp, self.shift_a.inverse(),
+                  self.shift_b.inverse()]
+        fmt = """
+            Model:  {0}
+            """.format(self.__class__.__name__)
+        fmt1 = " %s  " * len(models) % tuple([str(model) for model in models])
+        fmt = fmt + fmt1
+        return fmt
diff --git a/astropy/modeling/powerlaws.py b/astropy/modeling/powerlaws.py
new file mode 100644
index 0000000..2bde7b0
--- /dev/null
+++ b/astropy/modeling/powerlaws.py
@@ -0,0 +1,256 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+Power law model variants
+"""
+
+from __future__ import division
+
+import numpy as np
+
+from .core import Parametric1DModel
+from .parameters import Parameter
+
+
+__all__ = sorted(['PowerLaw1D', 'BrokenPowerLaw1D',
+                  'ExponentialCutoffPowerLaw1D', 'LogParabola1D'])
+
+
+class PowerLaw1D(Parametric1DModel):
+    """
+    One dimensional power law model.
+
+    Parameters
+    ----------
+    amplitude : float
+        Model amplitude at the reference point
+    x_0 : float
+        Reference point
+    alpha : float
+        Power law index
+
+    See Also
+    --------
+    BrokenPowerLaw1D, ExponentialCutoffPowerLaw1D, LogParabola1D
+
+    Notes
+    -----
+    Model formula (with :math:`A` for ``amplitude`` and :math:`\\alpha` for ``alpha``):
+
+        .. math:: f(x) = A (x / x_0) ^ {-\\alpha}
+
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    alpha = Parameter('alpha')
+
+    def __init__(self, amplitude, x_0, alpha, **constraints):
+        super(PowerLaw1D, self).__init__(amplitude=amplitude, x_0=x_0,
+                                         alpha=alpha, **constraints)
+
+    @staticmethod
+    def eval(x, amplitude, x_0, alpha):
+        """One dimensional power law model function"""
+
+        xx = x / x_0
+        return amplitude * xx ** (-alpha)
+
+    @staticmethod
+    def deriv(x, amplitude, x_0, alpha):
+        """One dimensional power law derivative"""
+
+        xx = x / x_0
+
+        d_amplitude = xx ** (-alpha)
+        d_x_0 = amplitude * alpha * d_amplitude / x_0
+        d_alpha = -amplitude * d_amplitude * np.log(xx)
+
+        return [d_amplitude, d_x_0, d_alpha]
+
+
+class BrokenPowerLaw1D(Parametric1DModel):
+    """
+    One dimensional power law model with a break.
+
+    Parameters
+    ----------
+    amplitude : float
+        Model amplitude at the break point
+    x_break : float
+        Break point
+    alpha_1 : float
+        Power law index for x < x_break
+    alpha_2 : float
+        Power law index for x > x_break
+
+    See Also
+    --------
+    PowerLaw1D, ExponentialCutoffPowerLaw1D, LogParabola1D
+
+    Notes
+    -----
+    Model formula (with :math:`A` for ``amplitude`` and :math:`\\alpha_1`
+    for ``alpha_1`` and :math:`\\alpha_2` for ``alpha_2``):
+
+        .. math::
+
+            f(x) = \\left \\{
+                     \\begin{array}{ll}
+                       A (x / x_{break}) ^ {-\\alpha_1} & : x < x_{break} \\\\
+                       A (x / x_{break}) ^ {-\\alpha_2} & :  x > x_{break} \\\\
+                     \\end{array}
+                   \\right.
+    """
+
+    amplitude = Parameter('amplitude')
+    x_break = Parameter('x_break')
+    alpha_1 = Parameter('alpha_1')
+    alpha_2 = Parameter('alpha_2')
+
+    def __init__(self, amplitude, x_break, alpha_1, alpha_2, **constraints):
+        super(BrokenPowerLaw1D, self).__init__(
+            amplitude=amplitude, x_break=x_break, alpha_1=alpha_1,
+            alpha_2=alpha_2, **constraints)
+
+    @staticmethod
+    def eval(x, amplitude, x_break, alpha_1, alpha_2):
+        """One dimensional broken power law model function"""
+
+        alpha = np.where(x < x_break, alpha_1, alpha_2)
+        xx = x / x_break
+        return amplitude * xx ** (-alpha)
+
+    @staticmethod
+    def deriv(x, amplitude, x_break, alpha_1, alpha_2):
+        """One dimensional broken power law derivative"""
+
+        alpha = np.where(x < x_break, alpha_1, alpha_2)
+        xx = x / x_break
+
+        d_amplitude = xx ** (-alpha)
+        d_x_break = amplitude * alpha * d_amplitude / x_break
+        d_alpha = -amplitude * d_amplitude * np.log(xx)
+        d_alpha_1 = np.where(x < x_break, d_alpha, 0)
+        d_alpha_2 = np.where(x >= x_break, d_alpha, 0)
+
+        return [d_amplitude, d_x_break, d_alpha_1, d_alpha_2]
+
+
+class ExponentialCutoffPowerLaw1D(Parametric1DModel):
+    """
+    One dimensional power law model with an exponential cutoff.
+
+    Parameters
+    ----------
+    amplitude : float
+        Model amplitude
+    x_0 : float
+        Reference point
+    alpha : float
+        Power law index
+    x_cutoff : float
+        Cutoff point
+
+    See Also
+    --------
+    PowerLaw1D, BrokenPowerLaw1D, LogParabola1D
+
+    Notes
+    -----
+    Model formula (with :math:`A` for ``amplitude`` and :math:`\\alpha` for ``alpha``):
+
+        .. math:: f(x) = A (x / x_0) ^ {-\\alpha} \\exp (-x / x_{cutoff})
+
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    alpha = Parameter('alpha')
+    x_cutoff = Parameter('x_cutoff')
+
+    def __init__(self, amplitude, x_0, alpha, x_cutoff, **constraints):
+        super(ExponentialCutoffPowerLaw1D, self).__init__(
+            amplitude=amplitude, x_0=x_0, alpha=alpha, x_cutoff=x_cutoff,
+            **constraints)
+
+    @staticmethod
+    def eval(x, amplitude, x_0, alpha, x_cutoff):
+        """One dimensional exponential cutoff power law model function"""
+
+        xx = x / x_0
+        return amplitude * xx ** (-alpha) * np.exp(-x / x_cutoff)
+
+    @staticmethod
+    def deriv(x, amplitude, x_0, alpha, x_cutoff):
+        """One dimensional exponential cutoff power law derivative"""
+
+        xx = x / x_0
+        xc = x / x_cutoff
+
+        d_amplitude = xx ** (-alpha) * np.exp(-xc)
+        d_x_0 = alpha * amplitude * d_amplitude / x_0
+        d_alpha = -amplitude * d_amplitude * np.log(xx)
+        d_x_cutoff = amplitude * x * d_amplitude / x_cutoff ** 2
+
+        return [d_amplitude, d_x_0, d_alpha, d_x_cutoff]
+
+
+class LogParabola1D(Parametric1DModel):
+    """
+    One dimensional log parabola model (sometimes called curved power law).
+
+    Parameters
+    ----------
+    amplitude : float
+        Model amplitude
+    x_0 : float
+        Reference point
+    alpha : float
+        Power law index
+    beta : float
+        Power law curvature
+
+    See Also
+    --------
+    PowerLaw1D, BrokenPowerLaw1D, ExponentialCutoffPowerLaw1D
+
+    Notes
+    -----
+    Model formula (with :math:`A` for ``amplitude`` and :math:`\\alpha` for ``alpha`` and :math:`\\beta` for ``beta``):
+
+        .. math:: f(x) = A \\left(\\frac{x}{x_{0}}\\right)^{- \\alpha - \\beta \\log{\\left (\\frac{x}{x_{0}} \\right )}}
+
+    """
+
+    amplitude = Parameter('amplitude')
+    x_0 = Parameter('x_0')
+    alpha = Parameter('alpha')
+    beta = Parameter('beta')
+
+    def __init__(self, amplitude, x_0, alpha, beta, **constraints):
+        super(LogParabola1D, self).__init__(
+            amplitude=amplitude, x_0=x_0, alpha=alpha, beta=beta,
+            **constraints)
+
+    @staticmethod
+    def eval(x, amplitude, x_0, alpha, beta):
+        """One dimenional log parabola model function"""
+
+        xx = x / x_0
+        exponent = -alpha - beta * np.log(xx)
+        return amplitude * xx ** exponent
+
+    @staticmethod
+    def deriv(x, amplitude, x_0, alpha, beta):
+        """One dimensional log parabola derivative"""
+
+        xx = x / x_0
+        log_xx = np.log(xx)
+        exponent = -alpha - beta * log_xx
+
+        d_amplitude = xx ** exponent
+        d_beta = -amplitude * d_amplitude * log_xx ** 2
+        d_x_0 = amplitude * d_amplitude * (beta * log_xx / x_0 - exponent / x_0)
+        d_alpha = -amplitude * d_amplitude * log_xx
+        return [d_amplitude, d_x_0, d_alpha, d_beta]
diff --git a/astropy/modeling/projections.py b/astropy/modeling/projections.py
new file mode 100644
index 0000000..cea1743
--- /dev/null
+++ b/astropy/modeling/projections.py
@@ -0,0 +1,503 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+Implements sky projections defined in WCS Paper II [1]_
+
+All angles are set and reported in deg but internally the code works and keeps
+all angles in radians. For this to work, the mechanism of setting Model's
+properties is bypassed by passing an empty parlist to
+`~astropy.modeling.core.Model.__init__`.  This also has the effect of not
+creating Projection.parameters.  Projection.param_names is created within the
+Projection class.  For an example see the AZP classes.
+
+References
+----------
+.. [1] Calabretta, M.R., Greisen, E.W., 2002, A&A, 395, 1077 (Paper II)
+"""
+
+from __future__ import division
+
+import numpy as np
+
+from .core import Model
+from .parameters import Parameter
+
+
+projcodes = ['TAN', 'AZP', 'SZP', 'STG', 'SIN', 'ARC', 'ZPN', 'ZEA', 'AIR',
+                    'CYP', 'CEA', 'MER']
+
+
+__all__ = ['Pix2Sky_AZP', 'Sky2Pix_AZP', 'Pix2Sky_CAR', 'Sky2Pix_CAR',
+           'Pix2Sky_CEA', 'Sky2Pix_CEA', 'Pix2Sky_CYP', 'Sky2Pix_CYP',
+           'Pix2Sky_MER', 'Sky2Pix_MER',
+           'Pix2Sky_SIN', 'Sky2Pix_SIN', 'Pix2Sky_STG', 'Sky2Pix_STG',
+           'Pix2Sky_TAN', 'Sky2Pix_TAN']
+
+
+class Projection(Model):
+    """
+    Base class for all sky projections.
+
+    Parameters
+    ----------
+    param_names : list of strings
+        parameter names
+    """
+
+    n_inputs = 2
+    n_outputs = 2
+
+    # the radius of the projection sphere, by which x,y are scaled
+    r0 = 180 / np.pi
+
+
+class Zenithal(Projection):
+    """
+    Base class for all Zenithal projections.
+
+    Parameters
+    ----------
+    param_names : list of strings
+        parameter names
+    """
+
+    def _compute_rtheta(self):
+        # Subclasses must implement this method
+        raise NotImplementedError("Subclasses should implement this")
+
+    def __call__(self, x, y):
+        raise NotImplementedError("Subclasses should implement this")
+
+
+class Pix2Sky_AZP(Zenithal):
+    """
+    AZP : Zenital perspective projection - pixel to sky.
+
+    Parameters
+    --------------
+    mu : float
+        distance from point of projection to center of sphere
+        in spherical radii, default is 0.
+    gamma : float
+        look angle in deg, default is 0.
+    """
+
+
+    def _validate_mu(mu):
+        if mu == -1:
+            raise ValueError("AZP projection is not defined for mu=-1")
+        return mu
+
+    mu = Parameter('mu', setter=_validate_mu)
+    gamma = Parameter('gamma', getter=np.rad2deg, setter=np.deg2rad)
+
+    def __init__(self, mu=0.0, gamma=0.0):
+        self.check_mu(mu)
+        # units : mu - in spherical radii, gamma - in deg
+        # TODO: Support quantity objects here and in similar contexts
+        super(Pix2Sky_AZP, self).__init__()
+        self.mu = mu
+        self.gamma = gamma
+
+    def check_mu(self, val):
+        if val == -1:
+            raise ValueError("AZP projection is not defined for mu=-1")
+
+    def inverse(self):
+        return Sky2Pix_AZP(self.mu.value, self.gamma.value)
+
+    def _compute_rtheta(self, x, y):
+        return np.sqrt(x ** 2 + y ** 2 * (np.cos(self._gamma)) ** 2)
+
+    def __call__(self, x, y):
+        x = np.asarray(x) + 0.
+        y = np.asarray(y) + 0.
+        phi = np.rad2deg(np.arctan2(x / np.cos(self._gamma), -y))
+        r = self._compute_rtheta(x, y)
+        pho = r / (self.r0 * (self._mu + 1) +
+                   y * np.sin(self._gamma))
+        psi = np.arctan2(1, pho)
+        omega = np.arcsin((pho * self._mu) / (np.sqrt(pho ** 2 + 1)))
+        theta1 = np.rad2deg(psi - omega)
+        theta2 = np.rad2deg(psi + omega) + 180
+        if np.abs(self._mu) < 1:
+            if theta1 < 90 and theta1 > -90:
+                theta = theta1
+            else:
+                theta = theta2
+        else:
+            # theta1dif = 90 - theta1
+            # theta2dif = 90 - theta2
+            if theta1 < theta2:
+                theta = theta1
+            else:
+                theta = theta2
+        return phi, theta
+
+
+class Sky2Pix_AZP(Zenithal):
+    """
+    AZP : Zenital perspective projection - sky to pixel.
+
+    Parameters
+    --------------
+    mu : float
+        distance from point of projection to center of sphere
+        in spherical radii, default is 0.
+    gamma : float
+        look angle in deg, default is 0.
+    """
+
+    def _validate_mu(mu):
+        if mu == -1:
+            raise ValueError("AZP projection is not defined for mu=-1")
+        return mu
+
+    mu = Parameter('mu', setter=_validate_mu)
+    gamma = Parameter('gamma', getter=np.rad2deg, setter=np.deg2rad)
+
+    def __init__(self, mu=0.0, gamma=0.0):
+        super(Sky2Pix_AZP, self).__init__()
+        self.mu = mu
+        self.gamma = gamma
+
+    def check_mu(self, val):
+        if val == -1:
+            raise ValueError("AZP projection is not defined for mu=-1")
+
+    def inverse(self):
+        return Pix2Sky_AZP(self.mu.value, self.gamma.value)
+
+    def _compute_rtheta(self, phi, theta):
+        rtheta = (self.r0 * (self._mu + 1) *
+                  np.cos(theta)) / ((self._mu + np.sin(theta)) +
+                                    np.cos(theta) * np.cos(phi) *
+                                    np.tan(self._gamma))
+        return rtheta
+
+    def __call__(self, phi, theta):
+        phi = np.deg2rad(np.asarray(phi) + 0.)
+        theta = np.deg2rad(np.asarray(theta) + 0.)
+        r = self._compute_rtheta(phi, theta)
+        x = r * np.sin(phi)
+        y = (-r * np.cos(phi)) / np.cos(self._gamma)
+        return x, y
+
+
+class Pix2Sky_TAN(Zenithal):
+    """
+    TAN : Gnomonic projection - pixel to sky.
+    """
+
+    def _compute_rtheta(self, x, y):
+        return np.sqrt(x ** 2 + y ** 2)
+
+    def inverse(self):
+        return Sky2Pix_TAN()
+
+    def __call__(self, x, y):
+        x = np.asarray(x) + 0.
+        y = np.asarray(y) + 0.
+        phi = np.rad2deg(np.arctan2(x, -y))
+        rtheta = self._compute_rtheta(x, y)
+        theta = np.rad2deg(np.arctan2(self.r0, rtheta))
+        return phi, theta
+
+
+class Sky2Pix_TAN(Zenithal):
+    """
+    TAN : Gnomonic Projection - sky to pixel.
+    """
+
+    def _compute_rtheta(self, theta):
+        return 1 / np.tan(theta)
+
+    def inverse(self):
+        return Pix2Sky_TAN()
+
+    def __call__(self, phi, theta):
+        phi = np.deg2rad(np.asarray(phi) + 0.)
+        theta = np.deg2rad(np.asarray(theta) + 0.)
+        rtheta = self._compute_rtheta(theta)
+        x = np.rad2deg(rtheta * np.sin(phi))
+        y = - np.rad2deg(rtheta * np.cos(phi))
+        return x, y
+
+
+class Pix2Sky_STG(Zenithal):
+    """
+    STG : Stereographic Projection - pixel to sky.
+    """
+
+    def _compute_rtheta(self, x, y):
+        return np.sqrt(x ** 2 + y ** 2)
+
+    def inverse(self):
+        return Sky2Pix_STG()
+
+    def __call__(self, x, y):
+        x = np.asarray(x) + 0.
+        y = np.asarray(y) + 0.
+        phi = np.rad2deg(np.arctan2(x, -y))
+        rtheta = self._compute_rtheta(x, y)
+        theta = 90 - np.rad2deg(2 * np.arctan(rtheta / (2 * self.r0)))
+        return phi, theta
+
+
+class Sky2Pix_STG(Zenithal):
+    """
+    STG : Stereographic Projection - sky to pixel.
+    """
+
+    def inverse(self):
+        return Pix2Sky_STG()
+
+    def _compute_rtheta(self, theta):
+        return (self.r0 * 2 * np.cos(theta)) / (1 + np.sin(theta))
+
+    def __call__(self, phi, theta):
+        phi = np.deg2rad(np.asarray(phi) + 0.)
+        theta = np.deg2rad(np.asarray(theta) + 0.)
+        rtheta = self._compute_rtheta(theta)
+        x = rtheta * np.sin(phi)
+        y = - rtheta * np.cos(phi)
+        return x, y
+
+
+class Pix2Sky_SIN(Zenithal):
+    """
+    SIN : Slant orthographic projection - pixel to sky.
+    """
+
+    def inverse(self):
+        return Sky2Pix_SIN()
+
+    def _compute_rtheta(self, x, y):
+        return np.sqrt(x ** 2 + y ** 2)
+
+    def __call__(self, x, y):
+        x = np.asarray(x) + 0.
+        y = np.asarray(y) + 0.
+        rtheta = self._compute_rtheta(x, y)
+        theta = np.rad2deg(np.arccos(rtheta / self.r0))
+        phi = np.rad2deg(np.arctan2(x, -y))
+        return phi, theta
+
+
+class Sky2Pix_SIN(Zenithal):
+    """
+    SIN : Slant othographic projection - sky to pixel.
+    """
+
+    def inverse(self):
+        return Pix2Sky_SIN()
+
+    def _compute_rtheta(self, theta):
+        return self.r0 * np.cos(theta)
+
+    def __call__(self, phi, theta):
+        phi = np.deg2rad(np.asarray(phi) + 0.)
+        theta = np.deg2rad(np.asarray(theta) + 0.)
+        rtheta = self._compute_rtheta(theta)
+        x = rtheta * np.sin(phi)
+        y = - rtheta * np.cos(phi)
+        return x, y
+
+
+class Cylindrical(Projection):
+    """
+    Base class for Cylindrical projections.
+    """
+
+    def inverse(self):
+        raise NotImplementedError()
+
+    def __call__(self, x, y):
+        raise NotImplementedError()
+
+
+class Pix2Sky_CYP(Cylindrical):
+    """
+    CYP : Cylindrical perspective - pixel to sky.
+    """
+
+    def _validate_mu(mu, model):
+        try:
+            if mu == -model.lam:
+                raise ValueError(
+                    "CYP projection is not defined for mu=-lambda")
+        except AttributeError:
+            # An attribute error can occur if model.lam has not been set yet
+            pass
+        return mu
+
+    def _validate_lam(lam, model):
+        try:
+            if lam == -model.mu:
+                raise ValueError(
+                    "CYP projection is not defined for mu=-lambda")
+        except AttributeError:
+            # An attribute error can occur if model.lam has not been set yet
+            pass
+        return lam
+
+    mu = Parameter('mu', setter=_validate_mu)
+    lam = Parameter('lam', setter=_validate_lam)
+
+    def __init__(self, mu, lam):
+        super(Pix2Sky_CYP, self).__init__()
+        self.mu = mu
+        self.lam = lam
+
+    def inverse(self):
+        return Sky2Pix_CYP(self.mu.value, self.lam.value)
+
+    def __call__(self, x, y):
+        x = np.asarray(x) + 0.
+        y = np.asarray(y) + 0.
+        phi = x / self._lam
+        eta = y / (self.r0 * (self._mu + self._lam))
+        theta = np.arctan2(eta, 1) + np.arcsin(eta * self._mu /
+                                               (np.sqrt(eta ** 2 + 1)))
+        return phi, np.rad2deg(theta)
+
+
+class Sky2Pix_CYP(Cylindrical):
+    """
+    CYP : Cylindrical Perspective - sky to pixel.
+    """
+
+    # TODO: Eliminate duplication on these
+    def _validate_mu(mu, model):
+        try:
+            if mu == -model.lam:
+                raise ValueError(
+                    "CYP projection is not defined for mu=-lambda")
+        except AttributeError:
+            pass
+        return mu
+
+    def _validate_lam(lam, model):
+        try:
+            if lam == -model.mu:
+                raise ValueError(
+                    "CYP projection is not defined for mu=-lambda")
+        except AttributeError:
+            pass
+        return lam
+
+    mu = Parameter('mu', setter=_validate_mu)
+    lam = Parameter('lam', setter=_validate_lam)
+
+    def __init__(self, mu, lam):
+        super(Sky2Pix_CYP, self).__init__()
+        self.mu = mu
+        self.lam = lam
+
+    def inverse(self):
+        return Pix2Sky_CYP(self.mu, self.lam)
+
+    def __call__(self, phi, theta):
+        theta = np.asarray(np.deg2rad(theta))
+        x = self._lam * phi
+        y = (self.r0 * ((self._mu + self._lam) /
+                        (self._mu + np.cos(theta))) * np.sin(theta))
+        return x, y
+
+
+class Pix2Sky_CEA(Cylindrical):
+    """
+    CEA : Cylindrical equal area projection - pixel to sky.
+    """
+
+    lam = Parameter('lam')
+
+    def __init__(self, lam=1):
+        super(Pix2Sky_CEA, self).__init__()
+        self.lam = lam
+
+    def inverse(self):
+        return Sky2Pix_CEA(self.lam)
+
+    def __call__(self, x, y):
+        phi = np.asarray(x)
+        theta = np.rad2deg(np.arcsin(1 / self.r0 * self._lam * y))
+        return phi, theta
+
+
+class Sky2Pix_CEA(Cylindrical):
+    """
+    CEA: Cylindrical equal area projection - sky to pixel.
+    """
+
+    lam = Parameter('lam')
+
+    def __init__(self, lam=1):
+        super(Sky2Pix_CEA, self).__init__()
+        self.lam = lam
+
+    def inverse(self):
+        return Pix2Sky_CEA(self.lam)
+
+    def __call__(self, phi, theta):
+        x = np.asarray(phi, dtype=np.float)
+        theta = np.asarray(np.deg2rad(theta), dtype=np.float)
+        y = self.r0 * np.sin(theta) / self._lam
+        return x, y
+
+
+class Pix2Sky_CAR(Cylindrical):
+    """
+    CAR: Plate carree projection - pixel to sky.
+    """
+
+    def inverse(self):
+        return Sky2Pix_CAR()
+
+    def __call__(self, x, y):
+        phi = np.asarray(x, dtype=np.float)
+        theta = np.asarray(y, dtype=np.float)
+        return phi, theta
+
+
+class Sky2Pix_CAR(Cylindrical):
+    """
+    CAR: Plate carree projection - sky to pixel.
+    """
+
+    def inverse(self):
+        return Pix2Sky_CAR()
+
+    def __call__(self, phi, theta):
+        x = np.asarray(phi, dtype=np.float)
+        y = np.asarray(theta, dtype=np.float)
+        return x, y
+
+
+class Pix2Sky_MER(Cylindrical):
+    """
+    MER: Mercator - pixel to sky.
+    """
+
+    def inverse(self):
+        return Sky2Pix_MER()
+
+    def __call__(self, x, y):
+        phi = np.asarray(x, dtype=np.float)
+        theta = np.asarray(np.rad2deg(2 * np.arctan(np.e ** (y * np.pi / 180.))) - 90.)
+        return phi, theta
+
+
+class Sky2Pix_MER(Cylindrical):
+    """
+    MER: Mercator - sky to pixel.
+    """
+
+    def inverse(self):
+        return Pix2Sky_MER()
+
+    def __call__(self, phi, theta):
+        x = np.asarray(phi, dtype=np.float)
+        theta = np.asarray(np.deg2rad(theta))
+        y = self.r0 * np.log(np.tan((np.pi / 2 + theta) / 2))
+        return x, y
diff --git a/astropy/modeling/rotations.py b/astropy/modeling/rotations.py
new file mode 100644
index 0000000..41dc67c
--- /dev/null
+++ b/astropy/modeling/rotations.py
@@ -0,0 +1,222 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+Implements spherical rotations, defined in WCS Paper II [1]_
+
+RotateNative2Celestial and RotateCelestial2Native follow the convention
+in WCS paper II to rotate to/from a native sphere and the celestial sphere.
+
+The user interface uses angles in degrees but the values are stored internally
+in radians.  This is managed through the parameter setters/getters.
+
+References
+----------
+.. [1] Calabretta, M.R., Greisen, E.W., 2002, A&A, 395, 1077 (Paper II)
+"""
+
+from __future__ import division
+
+import math
+import numbers
+
+import numpy as np
+
+from .core import Model
+from .parameters import Parameter, InputParameterError
+
+
+__all__ = ['RotateCelestial2Native', 'RotateNative2Celestial',
+           'MatrixRotation2D']
+
+
+class EulerAngleRotation(Model):
+    """
+    Base class for Euler angle rotations.
+
+    Parameters
+    ----------
+    phi, theta, psi : float
+        Euler angles in deg
+    """
+
+    n_inputs = 2
+    n_outputs = 2
+    phi = Parameter('phi', getter=np.rad2deg, setter=np.deg2rad)
+    theta = Parameter('theta', getter=np.rad2deg, setter=np.deg2rad)
+    psi = Parameter('psi', getter=np.rad2deg, setter=np.deg2rad)
+
+    def __init__(self, phi, theta, psi):
+        super(EulerAngleRotation, self).__init__()
+        self.phi = phi
+        self.theta = theta
+        self.psi = psi
+
+
+class RotateNative2Celestial(EulerAngleRotation):
+    """
+    Transformation from Native to Celestial Spherical Coordinates.
+
+    Defines a ZXZ rotation.
+
+    Parameters
+    ----------
+    phi, theta, psi : float
+        Euler angles in deg
+    """
+
+    def inverse(self):
+        return RotateCelestial2Native(self.phi, self.theta, self.psi)
+
+    def __call__(self, nphi, ntheta):
+        nphi = np.deg2rad(nphi)
+        ntheta = np.deg2rad(ntheta)
+        phi = self._phi
+        psi = self._psi
+        theta = self._theta
+        calpha = np.rad2deg(
+            phi +
+            np.arctan2(-np.cos(ntheta) * np.sin(nphi - psi),
+                       np.sin(ntheta) * np.cos(theta) -
+                       np.cos(ntheta) * np.sin(theta) * np.cos(nphi - psi)))
+
+        cdelta = np.rad2deg(
+            np.arcsin(np.sin(ntheta) * np.sin(theta) +
+                      np.cos(ntheta) * np.cos(theta) * np.cos(nphi - psi)))
+
+        ind = calpha < 0
+        if isinstance(ind, np.ndarray):
+            calpha[ind] += 360
+        elif ind:
+            calpha += 360
+
+        return calpha, cdelta
+
+
+class RotateCelestial2Native(EulerAngleRotation):
+    """
+    Transformation from Celestial to Native to Spherical Coordinates.
+
+    Defines a ZXZ rotation.
+
+    Parameters
+    ----------
+    phi, theta, psi : float
+        Euler angles in deg
+    """
+
+    def inverse(self):
+        return RotateNative2Celestial(self.phi, self.theta, self.psi)
+
+    def __call__(self, calpha, cdelta):
+        calpha = np.deg2rad(calpha)
+        cdelta = np.deg2rad(cdelta)
+        psi = self._psi
+        phi = self._phi
+        theta = self._theta
+
+        nphi = np.rad2deg(
+            psi +
+            np.arctan2(-np.cos(cdelta) * np.sin(calpha - phi),
+                       np.sin(cdelta) * np.cos(theta) -
+                       np.cos(cdelta) * np.sin(theta) * np.cos(calpha - phi)))
+
+        ntheta = np.rad2deg(
+            np.arcsin(np.sin(cdelta) * np.sin(theta) +
+                      np.cos(cdelta) * np.cos(theta) * np.cos(calpha - phi)))
+
+        ind = nphi > 180
+        if isinstance(ind, np.ndarray):
+            nphi[ind] -= 360
+        elif ind:
+            nphi -= 360
+
+        return nphi, ntheta
+
+
+class MatrixRotation2D(Model):
+    """
+    Perform a clockwise 2D matrix rotation given either an angle or a
+    rotation matrix.
+
+    If both matrix and angle are given, angle will be ignored.
+
+    Parameters
+    ----------
+    matrix : ndarray
+        rotation matrix
+    angle : float
+        angle of rotation in deg
+    """
+
+    def _validate_angle(angle):
+        """Validates that an input angle is a number and converts it from
+        degrees to radians.
+        """
+
+        if not isinstance(angle, numbers.Number):
+            raise TypeError("Expected angle to be a number")
+
+        return np.deg2rad(angle)
+
+    def _validate_matrix(matrix):
+        """Validates that the input matrix is a 2D array."""
+
+        matrix = np.array(matrix)
+        if matrix.ndim != 2:
+            raise ValueError("Expected rotation matrix to be a 2D array")
+        return matrix
+
+    # By default n_inputs = n_outputs = 2 but this may differ depending
+    # on the size of any supplied rotation matrix
+    n_inputs = 2
+    n_outputs = 2
+
+    angle = Parameter('angle', getter=np.rad2deg, setter=_validate_angle)
+    matrix = Parameter('matrix', setter=_validate_matrix)
+
+    def __init__(self, matrix=None, angle=None):
+        if matrix is None and angle is None:
+            raise InputParameterError("Expected at least one argument - "
+                                      "a rotation matrix or an angle")
+        if matrix is not None:
+            # TODO: Why +0.0?
+            matrix = np.asarray(matrix) + 0.0
+            self.n_inputs = self.n_outputs = matrix.shape[0]
+            super(MatrixRotation2D, self).__init__(param_dim=1)
+            self.matrix = np.asarray(matrix) + 0.0
+        else:
+            # The computed rotation matrix is 2x2, naturally
+            super(MatrixRotation2D, self).__init__(param_dim=1)
+            self.angle = angle
+            self.matrix = self._compute_matrix(self._angle)
+
+    def _compute_matrix(self, angle):
+        return np.array([[math.cos(angle), math.sin(angle)],
+                         [-math.sin(angle), math.cos(angle)]],
+                        dtype=np.float64)
+
+    def inverse(self):
+        nrot = np.linalg.inv(self.matrix.value)
+        return MatrixRotation2D(matrix=nrot)
+
+    def __call__(self, x, y):
+        """
+        Parameters
+        ----------
+        x, y : 1D array or list
+              x and y coordinates
+        """
+
+        x = np.asarray(x)
+        y = np.asarray(y)
+        assert x.shape == y.shape
+        shape = x.shape
+        inarr = np.array([x.flatten(), y.flatten()], dtype=np.float64)
+        assert inarr.shape[0] == 2 and inarr.ndim == 2, \
+            "Incompatible shape in MatrixRotation"
+        result = np.dot(self._matrix, inarr)
+        x, y = result[0], result[1]
+        if x.shape != shape:
+            x.shape = shape
+            y.shape = shape
+        return x, y
diff --git a/astropy/coordinates/setup_package.py b/astropy/modeling/setup_package.py
similarity index 50%
copy from astropy/coordinates/setup_package.py
copy to astropy/modeling/setup_package.py
index fb10ce3..5d0034e 100644
--- a/astropy/coordinates/setup_package.py
+++ b/astropy/modeling/setup_package.py
@@ -1,4 +1,5 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
+
 def get_package_data():
-    return {'astropy.coordinates.tests.accuracy': ['*.csv']}
+    return {'astropy.modeling.tests': ['data/*.fits', '../../wcs/tests/maps/*.hdr']}
diff --git a/astropy/nddata/convolution/tests/__init__.py b/astropy/modeling/tests/__init__.py
similarity index 100%
rename from astropy/nddata/convolution/tests/__init__.py
rename to astropy/modeling/tests/__init__.py
diff --git a/astropy/modeling/tests/data/1904-66_AZP.fits b/astropy/modeling/tests/data/1904-66_AZP.fits
new file mode 100644
index 0000000..62f84be
--- /dev/null
+++ b/astropy/modeling/tests/data/1904-66_AZP.fits
@@ -0,0 +1,353 @@
+SIMPLE  =                    T                                                  BITPIX  =                  -32 / IEEE (big-endian) 32-bit floating point data   NAXIS   =                    2                                                  NAXIS1  =                  192                                                  NAXIS2  =                  192                                                  BUNIT   = 'JY/BEAM '                                                            CTYPE1  = 'R [...]
+�u��Ŧ��w��(Y��	K��V
���ʽ�����3:�Pn��B�ҽt�Ҿ:��>�@��W6�w���_֒��
�����<�,=w`#<�Lk<v;
=���=��W>��>��<������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [...]
iһnw���Ľ�m\���l�����Ps�������oA�u9�,����9��j<
+F
<�D�=- =�mm<�J
=@��<�B�=
�<C€=�Ϝ=��h>
>>"�>�
�?W�?.f�>��>�3>�
��ݘ�
+텾
+�V�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [...]
+x�>R4Q=Y�<�f9=*
�=��+=�!�>$S@>5o�>sb
>�@�>���?to>�E&>`S=��ڼ��n��̿�
�Ľ�ȡ��~��A��=2u=O�_=&=@�<�]��<���)�y�(-��#�Ҿ
�־�	���E=�	R��\C>�=]�0�
�a�>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [...]
+E��ߠG���Լۘ�=U�,=L�= �5�	��}潴����,߽
YW�o�K�ĵ���
�=���'��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������=1��=
g7=2e�<��&<� y<��=�?.=��<<�;�Pl=}T=�#(>�>E�K> [...]
+�=��(>
+�=+��& ����
������cml��rɽ#g��^J�9+�=��{=��W=I������v���v��{�˽��K��NP������,q*<������M���罶��� ֽx2���]��C|A�w����Ћ�;4�=��v7���9h�ŗ��hC߽���7�z	�s�
�uZ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ [...]
[/<V�=NQ=aa�=pQb=�[�=�
�=�م=��
+>2�c>I��>��>o��>\�\=���>N�>6�R>(�d>(��<��.;�1?<�#�<�\���o�9�}���/�6먽%
���踻�3ݼ{{��i��:�R=G�q>Y�r>
�=���nR��z������/K�v׽�
 a�c���iD=a��4����׽�
u��~��5G\������c�aAC=?�r>T�>F�4>3�-=�iϼ(x_���=l�=4�i<TϜ�
���`-����)������m齙x�������G�/�����b̽�
+�~�������d��&�ʼ���3D
+�awa��]��a��B ��4����}��D���\��=�
>=��o=
=E `<> ���
���ʽ�}�>C���㴰��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������=���=���=��x=��3=�����
+�eE�P�c=�=5�
+=���=�a>=�b>K�=�w%=�ݪ>�K>$�=њ_=�
=���>��=�g=��N<r�
���<��ٻ�~�Y=��|����|������m*!<���<TNN���f<ۆ=Y�j=���=� �>�h=�U<D9̽�a���� ���l��C�1ZT<
����ZO�'
+���.M��{3�&/�y���ǫ;������D=���>�M>C"> V�>
M�=fL�=1c�=nMx=6�Z<����⽣ۗ��Ъ��z �X����ӥ���+�]�=��9��sa�˿�-�(�Z�L<�	|�Ys�#��r�ھ����-S�n�Q�]����0��BѼ��i<8
��U��=��h=���=�ɫ<�e�<
 ��|�Ľv��`P�=<��=���af7��%�ȻY�r�6�M�]�� =��=�3��A-;��	����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [...]
+=��=2Z=��=�Z�=��=Ʋ=�W�=
+�;9��;��;�r��Nܼ����/��z�J�������y��/��]
<!�=O�j>6��>a]>�i�>II%>��=���<@�<W�⽜躽n��a�뽆�n���
+�����
+���vt����<
�a�r����Vɽ��I���I��
ý&��:���;�� ;�n�;7#:�6�=��=��8<kA�<�󚼯�a�0Oݼ��
>
+�0>��=�ׅ�5By�

\�坈�!H��S����RZ��&<ӾM��X
G�G���g�(�Qj��
/p�7ľ��Ͼd&1<E{�=�>�=���>6^=�>���G���� ��2�{�DR����=�V+<Y��<WPI��j��d?���<���~����=mZ=bD�]�����Tx�=��->A��>a�e>a�d>6��>=}?=ӎ:=�|4=�&�=�E�=�5�=�Y�<ʸ=f�=��:=z�"='�>Z�<�qT>D�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������E�X>`<�F
=q�=��n=�f�=���=���= [...]
+�����߽Y)���1E�������b�X��<(>�=21q=��>z��>�	�>d�2=�=�ҙ<�4�;v���|��Fi��#�s�@:���Υ��
"���`���ʬ�9�yN���0�%n�����6��B���+�*M6;<�|��$D;yt��V�����=��2=Ϳ#=�z<�D�<P�;��U<T�=�Ű=�n!=�U;G4���{��۾�ԼC������!R�t;�,AI�^���Q`��p�S�\�I�\�E�om�6�P���=���ѽ�ܾ�*<��h='���!H��V���˾0H���(s�H�i�k㘼��> �!=���={��< ����XZ<
r�<`�`=�J@<�Ē=.<=3Ȕ>vil>l�>�T�>oZ�>D�>EG�=՟,=赅=���=�D =�7�=k�D=&R<�y=O�"=A�(<�8�=��=�
=٧�=��=a
+>
v =�ܑ����=���>
*�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������X�^�"��
'E<���;g��=7ɠ=
�=���>%�>36m>9m�>$5I=�%�=�
=u/�=eK�:7r�=<���<&v�Ĺ���.!;�&Ӻ��p�V���"@�;��򽏺��!<i�i=��
>
�>zg>r<�>Fy�=�;&<��R<��;}���hM�C���%ŽX4���s��9!�QN��K���n���\�Ǽ���Z\�ǔ{�xt��
+�Ӽ�*���3<2l�;��m�6��<Bؼ��m���Y<���=
+�=0<�<ps<9�H<
��=�1q=Ħ8=z�X=ZQs;�R:�p����M�wl�������m��*��G_��:�d�C��Yܛ�S��J�/�D1�U��a�
[[��Y���i?R���u���H�!1� ��,���贼�F�e�d�0��<���=�=��d=Y��=6�_<i�=
o�=�5�=��9=̹H>
��>h>�>���>���>ds_>�>>^-k<H�l=�,>$��=��~=�>"=��
��=
+Y�=]�=I\<���=
j�=���=�6E=�N<ݬ�>�=���;����|y=���=��>$ڇ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������T<�=�,z>;�%=֭J=�&=
��=4�n=��f>8�>l)3>c�>y�]>Y� =��=��<�!�Q
r��W<����2>w��z�J@;� �<�[%�-�����T��ky��6����p�����n�<���=���>
�|>>��>q
+�>�
=���;��
��
�������6�$�f�S�S���n��R;��0���潭hq�lY�+�����
��%R��썽��h�%�.�Q+�
(z��<��j�+��Noy��'l������<�u�=%2=c<�ځ=yD=šp=� 
=��>=�r�<-Q��@
������xk�rb��w!�����N�7h����8\�
!�����:�?�
]�$�L�O�4�����g��<D왹j���OD�uE�W2��qB��B~�� ѽ�}��r�<=��
>�_H>ӯ�? ��?��?-'�?=�>�$�>
�r>>
=ےK>^��>�>D>>Vt>[��>&8>�E=�T�> �=�F>�M���#��ǽ�e����'��r�����p��c=�n-=3մ�I�>�E=��<]����-:=��=ۓ�>6���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������>��k>�m�>�>�>�Cj?
k�>^�v>]id>K=�>�=U�=H�
> ˇ>F}�>s�>�.>y��>
wB=��q<�톼ւ+�
{��G�T,��aؽ���ʼ�����Z�K2���-�����	]C��G���|�.��=s��=އ�=���>/��>#=�W�=@0�j�=��:��E$�@�ν����ֽ�.׽�
*��nF��[
�&s��ChC�GrD����Ɉ��jͽ6n��'Ƚ5�)�����.j������ܽ�@�������D��;�:�;��<���=��-=���=�k=�h�<�h��\��˜��û��r�����e����������!�����콫���~ɾ Q� ��:���82;�@.<�ˆ=�g�����-s�m��w������C�8����N=�{
>�=�>�|B>�oX?B�?"y{?%�?��>�1�>0\>
��>,k;> �>)�>H�>(�=P
�<;g`<��=�B=.%�>�򽄆�ãL��u�Rɰ�	�}� "�
��	JV�g4潶�	���u��XȽ� ����� �<��X=>n�W;���|�������������������������������������������������������������������������������������������������������������������������������������������������������������������������>�VU>�%�>�#>��>�cd?e$>ʨm>���>�h�>O��=��=�}�>Y�>C��>sPx>��P>��>ZL�=�P���8�C��������x��`��6f=����Z�m+ǽ�q��ļ���ټ�
X��<�l��ڼ��:i<[s�=�SQ=ܺ�>�@>�=�	�=5A<&�:��"
<< [...]
+�6 ��'7��c_ƽorx�.YS� +�����:N�;��s<	�^<���=�SS=���=��2=D�9Y
+���
*������l轴�νȭ��0_����Yc���ǽ�&����������Q�u!���뽠�;�%�;C>X<�
�=�
�=
�k<Z��
Y���׽�B��2z��M˼?e�<B�=ع�>�z�>���>�Op>���>�">���>6��>3��>
�Y=�τ>	/�>�>�=�Q=�W=��<�g��Q7���A=/��=R�ۼ���;'�*�	���Z����T���
������?�d�������D�ӐǾF����Q�:Sr���]�X�ҫy��Ͻ�0���������������������������������������������������������������������������������������������������������������������������������������������������������������������>���>���>��c>���>�Oe>�H
>��
>�>�M�>�3�=�>=���>2��>�f>���>���>�.c>	
<�
���+����
������'7�u�q�;����A��\u��9ӽ��(5��m�,&r����<�`;�
)�"� 4���E�Di<U�D=Zf=9
>=�-w= ��=r��=#~�=7�E=L��:��8�J���h������a���۽|ɽI潅#W������h����f�)��L��"�����Hu��hO^������b��o
��
м׻~:]#�;Ϟ�< �
=�d=#Y�=$b�<�v=�����DeJ��k�������k �L+�(kܽz4������K���l���ܽ�����潶������	;��=<i}-=7/=`�<��p�-���!Z"�<Ĉ� �����;���;<5M�=zS�>��>_�>��Q>]��>;4Z=��=@�0=N
i>
��>*B=�B>6�=��]=�#�=Yx=c�<��6�P)���ϑ= Ҥ=�0�=7�˼������)4U�=�o���2�YB���o���[��P��Kj�����;T������r��*0���ƽ�ƽ�p���ys�������������������������������������������������������������������������������� [...]
++�:�t��d���f^�̱;�������T���֙\�����
��BĽ;�~���߼/�J�Ӎ%:�Z���X;����<_�u�&�2�0;���<T'<Зi='LP<�f?=^ϭ=[?�=�1=�>�=��[<6�5���������`���� �_�p|�-I۽�*��I꽙e��6��*У����!.�%-#�\���������⽧|ѽ�ڼ�Ee<��<�8�<�
 =
4G=D�:��3�W���"��,���z�	�rH����
?��cҼ=%ʼ����u��㵾E��3*��Zн��$��Sl��!'���;
�v:��=<�=m
+�<ۙT��/<�������<m/ּ�捼��;���@=Yn=��4>��>ŵ�?L�>?��?��"@��>侬=ϲ�=ȉ�>��>ͪ=�<�<X�<��=��=�
<����^��t��<��R=�m�=��6=C�������!d�<��;�"08~
+B�,�=j���4
�<�2�=]z=X��=�_�=�p>8"
<�N����̽�/�������������������������������������������������������������������������������������������������������������������������������������������������������������������������>
�n=�[S=�}�=�_<2��>#6
>2�B><S�>7@�>ӵ=���=�h�=Ɠ>F��>]m�>>l�>@}�<Ğ9�a]h��\k��%���7��������
���{p�ȧ���`�֪��2H����ajn���½A ��e"
��}ҽ��+��Hͽu
~�Tm��U3м6��<٦
<_��;<�o=,�j=���=�
=o�t<^4����L���my�Mȵ��������W��h�j�@�<�{��H������a��J��*���Fy8�T�s������\ ��;���u���@<�4�=%��=�=?�����{b�����-��n����y�������K0�<��%�>�ü��������
Ͻ�iM��
�����������a������;��=- at Z;�c;k������T<�#6:����AP�=BZ�=�;�>3��>b�v>��~?��@s�U@�+�@�
+5@��?
5(>fT�> �->;a�=К�=$�<�O�=��7<L�A;vk�;�s񽟇g;���<o�Ѹ�(<�HN�sg�<.߽<�D
=Wa <���<�Y=�"�=��	=&�c=OG=g��=��
>eH�>Y�r=���=�G����������������������������������������������������������������������������������������������������������������������������������������������������������������������������>	��>#$%>6��>4�=�}F=��}>HH�>"/k>5xk> b�=��b=P�|=u�=�=
=��F=�Y�=�].=ax�_�I򂽝ު��s��p��nά�ɽ�t��X����-����2�ۼ&N9��A��7@�r0<��	
�����c��JB�^z���P��Aa��»�iM���ݼ�?ڼ�TU<���=.<�)��~	0�q��"A��TݼC�;�0�;�G�:�L(����ޓ�Yd����:���;* 4�x8̽&�~�.h�IO�\%w�f�˼�$漎�F��N̻R��<��=��=t��=KC�;WΦ�1
+�4���ip���y���߽m��;�Y<>;]<���=-��=kǼ�j���\G������Ἀ�N��)���C��4H�7=
�=	XW;�<��}<�b<q�<���=

b=��
+>C�h>R(�>�� ?[3&@@	�@�b�@��8@�
�@b'?d�S>�a6>jj>N��>�a=�{�=W�.=���<�<\<�����Ǔ۽s�m��2L�gZ������e�;�05�{�<1��<�Yw<���<��<��ݽ��!�y�Y<�:�=��2=�)=wq<eҴ��A�������������������������������������������������������������������������������������������������������������������������������������������������������������������������>cЉ>�>*�=�H=V)/=S�i=�`w>�.=���=�VM=��=stS=E�L=_��=�?�=�E�=�N�=U�M���Ltl�u�
��by���c���񽨀Խќ۽��߽���s�^�(D���D���@�r�����y��
��g���������"��!*�9�<oҵ��缰"b����O��:�ö<C00<)�T�w��|-���n=�A�E���;k
<\�=$k��=��<�d�<�n�=���=�%�=ke:P�7���:���*��L�ý�{$�(f�"�!��5½E��LI=k.�=_�=j�=g 
�-�
+�=���e�YZ��:����h�5
+;�[=�G=�ds=�gk=o�ý
�?�B(n���q������4���m���}p�i
S�B.��z�N�
�I��
�����:T�;��=~��>>�c>B�>���?TU
@9|3@���A3�vA"V-@�+@}�>�l�><��>/��>H>+3�>*>#R=A,x:��h�
��~~���3�㵳�(����(���M;���
���Fa��OH�
�-Ef�?$��ڛ��M�p�y~��C�=E�!=�e<�v�� ��yn��1��������������������������������������������������������������������������������������������������������������������������������������������������������������������������>hL>6�=�w�=���=
+�<�)<���=���=}dp<�Y��ġN:1e<���<0�<���=;�<�&�<�9�#����\�.�)�[����Rr�\���;���ڽ����vs��X �� ��:�9�m(���Aٽ�`�7��mL��{�řɽG䋼�\�<��
�Qܹ���Y���{�x������G�ʼ~-��yf�t�*�P`��_��ٔ�;��z=E�=�r�=��1=�DE>4�>֪�>�?>]`�=�M<g�����������۽{�ν5���,:���N���
�{x*����<�O0=J�~<&,�
����
�T[�
���l��"���Ż�*�<�eJ=r�$=
�<�\f;H��=h(>.��>q��=̺w<mX̼oU�M�B�t6�k����,Q�f�{F ��=�zמ��"�;��*=jD=�7>9z>�:�?~ e at HU@��A.��A,��@���@E.?�>>d'�>�=���>%X>!I>9�>
��<Zi��rý�'�9.�/*I�Eg�48�8�.}�/
�}�
+��{�+!T�C"B�J�Z�N}���8H����80]<a�,;��4��`�5��
k���������������������������������������������������������������������������������������������������������������������������������������������������������������������=N"V=���=u��=b�<|eE<X;٫g<��T��ꤽ2Q�`��n�Ӽ�ܻE����D���漂?0���޻�˒�q༭_i��ݽ
4,�
�,���N�������6��$>
�~����j�v�	�\���dȽ�Q
��~/��
���D��zƽ�]ٽu���)&��:jݽ�ཽ��hg�"������{�ɽ
�Evȼ�N�<�v/= 
�=N_�=
0!=��"=��>a�
>�S�?��r?�P?�+�>�D�=��ǻ��׼��(�?�/��vQ�y�뽏]���Fc��~������7V�` ��K_���!��{�T
��N�ʹ�{J�[M��
S_��$����=Qm�=VHY<�8v=2K�> ��>�D>�B�>�u�>/X�=�஼?�L�E-Ͻq��m���3	��g�)�9�������<�ED=�'>t�1>���?��<@(�M@��n@��@�$�@�ii@^W>�p�>
����e�<Y4�>
b>_�>=A>
x=��ֽ�:,�稾�\�����Lj���k�	��r��rw�mص�J䳾I�ž3�2�
��h齀Q����(n�ɧ+�@C
��g%��Ѽ,8�)�=��%>V�>N��>�HQ>�b<>�0�>x������������������������������������������������������������������������������������������������������������������������������������������=$=L��=4��=99==�D<�Ei;b܎����%@���mo��x���u[ؽem½1�*��

��P����9��û�;
9"׼-�F�#
���6�Fo�X���)ܾ�#��Z�A���C�<�.�Ҟ���G�Xv+�i7۽��c���<����T�d߽��н��*���:���޽1B��U�	ʽw���%����;�*a=���=əS=��=��=�l=�v>��s? [...]
�|�
7������im��T⽖5��vp(�����x�8;��<��}<�O<=��_>,��>�=?"4X?*`6>�_�>#��<.ɽ1%;�u��~����򎽜z���u�xfJ�*׷�p`ü�
�>�>�8,?��@t�@�_ at Z�a@��@�U�@;b?ǫI>��+=�/;����#y�<��V=�I>
��>'q�=��{;�'�����Ί˽X��T_:��	�����&�پP۾�<��TZ�� �
�2�)Ѕ��3�$-s��e位����_����;�n�Ƚk�;;�՘=�y =Ӽ�>7
�>4h/>a�>���>cnH>8T�����������������������������������������������������������������������������������������������������������������������������������������=&k�=Tvp=5kJ=m��=�tC=	HR��y�;��i�+��6�y��Y����Ҽ����D⃽?d��nEƼ:���
1D�a'�<�F�=-�<��#<�/<v����ت��+=�
9 �@}����<��k=)�=>�<�m���M#���o���%�rt�����9�`�%��|�*��4����
��	������_H���	���
�+N�:��=w�=�K=�xI=��\=r��=��>>�4H?e��?�cL@
�@ ��?��>ډ�;�|@�L�
�ɡ�������� �l3���y������
���Yǽe�N���t��|��˚߽���x���(�� ���ڷ���.���AF�v ��[M<�u�=��>�"?
+?f�P?P�?f>��
=��<����?��,Pǽ�,ڽ����׽��Ž�f
�xq�
R�>f��?QH{?��?�O�@�@�@	1=?�p�?�o]?��=�s�(!���&���Ľ
+�4=j=ț�=�n=Яu;�䨽���{�½;RνAq��e��Ϳ����6�
�l���nN�Tҽ��q��]q������u����>���5:�<~��<����mS<�}�=z�>PH�><�;>ṕ>��g>h�>67�>��|����������������������������������������������������������������������������������������������������������������������������������������=X�3=��?=��=øp=��  <kׯ����B��
&�n��҉��,X���u��Y�i��rx�<�d�=<�=K
+�=Q�#=o�=e�=JT�#�
+��zϼ������=�r=�`�=�-�<�
����L�@�4���	�3����7�L��;a�)� �{�S�d��� ��4�o�d�ظ���oR��#~�pl���_<���=��>=���=d�=6%o=z}�>G#�?G�}?�!�@ U�?��j?�]�>�-<��<�������ؽ�q���ھ
t
�$eu�d����}����D��
���ݽ����F����۽�������xf��J� D�;���)��,���U=���>r0�?�y?V^?OK�?��>�Ū>�=�p=��㼘S���
��L��s�U��Ѻ��R�j����>��?��l?���@#h�@�<?�1?�0^?�Z?=
�>�b��q��2R ��8I��国��;��=���=�0W=4�	��T�ZO[�f��i��k*���qټ3���u���E�4��<�
�X�ל��ƽ��ὖ,��c"Z�#G%�'6<>N�`>�< �������>�j�Ǽ�:�����>��
>�F�>�߂>p9�������������������������������������������������������������������������������������������������������������������������������������������������>J�L>s�>��;�޼������~���t$��ټ����缽�0���G�lˌ��{¹� ?<�`f=T�=A�=7�=8�,=;ج=�5<��f��C¼x�<N��>`x>(P>B	=)�ڼ
�6��3ӽ��Ҽ�	�<,;i=W=[�<a����z�r��n���Zc�
ˇ��;u���X��ӻ�야��D�I#[��Ce<1
+�;.��D�޻�5�����=P
�>��m?P<�?�q�?���?<��>��V=������y��6���p���,�Jھ
�T��K���ͽ�#i��OL�tg���jý�0 ��9޽݅:�񠖽���{���w� �Q���G�����Zp�Q�I=/	x>)�>�v�?( �?*yk? 
@>�">��>'N=Tt'�
�p��tɽ�)�>_�,���ɀ��%?<3M�>[L�?�}�?�5?@ ��@S?��?�d�?
��>��>
zs���R�_�&���ǾI���發�4;�!X!<�n<��ŽH�]�$�Q�&�u;�m59���:Nf���HL�<�_����	u��
���V��+��V�>�ҽXeM��b��n�O�m	�o�������h����;�!\<h'��#�=�4y>6��>���>�mg>K��>u( ������������������������������������������������������������������������������������������������������������������������������������������������>E>$�=&�J��ed;�=��n1���׽B]�� o�KV��������L�
�<�����`�=*<�J=��=,w�=6
4=' �<���:�i���f<�!�=ľ3> [...]
�?昚?���?
��>Prr=�w�={�\���_�o@������򞽍k$�Ʊn���Z;�:c;�t�<��;�.�h���=7]� j-�
�ͼWP��j⽨EϽ�	
+��;-�-�#�ս��;{����P��݋��
���G�@f������
�
����%�_ǟ<,�`>��>@�>>Z�S>M��>��>)��>m������������������������������������������������������������������������������������������������������������������������������������������>J/�=��H=)�M:muJ<�N�=
�<��;⊼��;��U��W���� ��O���༮>����c[1<�4<S��<)Y<�=S
=J=�<�w���_V��V�<k�g=1
�=��=�0�=�_�;�����ɽ������<o�=|`=��%=
X9�kNܽ^�P��m��\u����������½n�ҽe�
�9�8�4y׽vx������{�����5^��
�����W��=?�>g��>�T2>�y�>x	g>4v�=���=���,˽=�P���e�q�4�]�޽X�콫k3��
����7�����/���㘽�&���k���1���� ���̽��ý���8�ڽ"04��*�<�j�> �J>�
`>�1>�k�>�
'>�U�>��y>f>���޽�����j�62ս�{�E�_�]!����;��u>8?&�?A,�?Bx�?!/
>S2�=��۽
�սoF
���'���Խ� ��nE��n��T��}(>�+�B;�/#<��;���S9����mP��
C�2EQ�Q�Y&���ȡ�
��
�ϾF���eN�w5e�hPt�9�Ž@�&��VN��T��ɍY�b"��;����n��r
�B�A>�>'�f>`>v��>
+�'>Rן>TP����������������������������������������������������������������������������������������������������������������������������������������>1~(=���=R,�<��c=��;=��-=�=���=�<�]'<�-�<�am;ު���r���@d��d��uUL;���<���<��<ݏ=4�= fr�'�߼��S���m��(�;�!<��=���='��Ђ���~^��\����ֺN�<I\{<���<�/Z�����TM��X	������Ɠ���v���w�t]����n�R)��_%?�����Ԇ���!�ױ�����P���ѽ��)=|�>.�>n
�>~��>fM�>#"�=N���'�)�G�i�ս4����M*�@�۽Z\k�?I̽p�𽔉 �������~��� ���˽a˨�C
}�@���\9B;r�o������z��R�=.�6>
��>��>�2> [...]
�];_�;<L�;��`�
GO��59�N=	��ڽ�ӽ�#���E�������U��A�h�l�s
m�z�f���[�Ǹ߼�ʧ���V���Tܻc��<�
.=՝�>MQ>j�>q!>/�>14�������������������������������������������������������������������������������������������������������������������������������������>N������>R<�=��\=�y&=>&��>H��>@G�>1>A�=�ԡ=6e8=|tt=QϾ;�h�8�X�F,5;�%�=�$=`�=!u3=E<�:}<$���Ⱦ�Op$�󸦼�GżB
��޸h<�l[<
!8��߼��e���鼢�.�e�`�����a���p���3�Ͻ��]��D��Eҽ�W���$����-��-ѽ����F��\~��{7���B��
��rl�
+g'�����r��])�9}�=��> 9�>T�>xev>��>.K�=a�~<9��C�jK��TGe<�
�<t�a�	̘�Gn��
�.Z�W�ych�`&0�B�(�ĕ���D<��~<���<�U#<l/a<�L�<��t=?�;=���>J��>���>_�1>=M�>VS�>@B�=�no=
߹R�k�c†��\��
gq�j����%དྷ���K
\��,X����'�<�TS=6:t>
%�<;��ي��=6��,��s���Z�������+����f���G��O
+�lR�Bǀ��~
;��&<���<�"�<<��[�<�yZϼ���IX���uE������?ѽǾ��zQ��u���i�k�R�_;"ż�k6���Ƚ#'���$����j�N4� ��<�
+G>V��>=;>�kk>3��>r���������������������������������������������������������������������������������������������������������������������������������>Se�>y>
^�>�>z�>'>>��>v��>���>6<>Y3'>
c4=Ԯq=�H6=}03=,W<?¥�"��<��2=\�=���=�m�=���=��M=m2�<��
�(�� 6��D_� �����ڻ���;bS��|��s���h��-J�y�C��3��
Z�����x_���>���!���X���i�տ��nѽ������Y���\�����i�2�V^
��N׽㿋�
���
@9��v��ؽ��u����=�l=���>=�>C�n>R^�>
+q <W���$83��Rͽl���x��<�Eb���켨X׼�\��ܧؼ�p�������{�db8<�U��I
-<��a=`m�=�Q�=�K�=�[�=o��='�=�A`=�B�=�Il=�"�=�(�=���=�6=�=+��<cTƻ{�6�Qü���GD��z�f�VT�X
:���j��21��ԡ��
򽙛ӽCzϽ:%��7s���p'���g��u����d���?��-�&�E�z���3��i������I
��8�[�=�fd=��=z���s\�����洼�0�(��eU������
h��8��7Jz����]�;p��;�
�;і�ER�Q�m��Zh�ys��Į��6-��d> Q�;9ӏ;\��������������������������������������������������������������������������������������������������������������������������������������>M�>
+;�>T�=���>�q�>�(J>�0�>���>�b�>��	>S at N>��=���=�FC=m��=�:��F��5�<��<$<x=h�w=жY=ʶ�=��&=���<�f;�m��G=�o�ռ��9��
Ѻ� �� ��
��zĕ�.�԰ ���r�1�ݼ�Wo�~�߽�ҽ�?ཫs^��Z�hMʼ�Gy�}�c�q
����8���$���Z�S�
+��Vg������ꕽ�5��
+�
��[���Q���B;�U�=��4=�8�>&X>�=�$<�|��u���[�/��=v�Wxͼ]�(��&!���C�� �y
����1��
o�F�
;��<CX�<��K=|��=��=��>{R>�=���=���=��=[�=>
<�	�=%LN<̓�<�M�;�6{������z�ڪͼN7�9��n;&;a:�N��Emݼ�c8�E��������Uc��p���j������j��'���=��b>��9޽�`��{c�[�}��>�<��<� C�4�&�94����.�^X����<���=�t�=�9�=��1:�_'��@ļ�ܼ������νr騾_�_Ծ��2Y� w
+�%��<�
�=���=/��=���=Ph;�<�<Hem;����uRٽMG���B�;�;�
g< ��<4d���������������������������������������������������������������������������������������������������������������������������������>1&>�>
!�>��K>���>�*�>�KG>�>>���>���>"R�=��=J>0<�
+b;���<�4�<Gr�;���Uώ=:�3=���=���=�1�=�
,=#;$;�g�� ���7��������2#�����iL$�`ҽ�ּ�? ��5��h�6�DBp�`��dW�Q(r�iL��ռ�=-�;G�<��󌩽'�t���彬,ս�ά��?���c��J�����z�bQ��Kq�[)m<�wJ=��B=��=v��=<=<J���8����8��@꽃۾�;��<N~=.W�=��	<1�
����
��<X�w<2��<�Ҫ<�q�=�M�=� m>	�a>.�9>�>��=ëF=�J�=>�<���:�,ټ��V
7��5»�݈��MJ������
�
��e
��x�y;Q�i;�<n�;U�����w�ӽ`���C�;���
��5a������������Ľ�5
�P)u�Mi��!�L� = z_<��<��B�kt���/��һ�u<�=�V�>
cE=��
+�=
<�Y&N��O���%��UŽ혽ʼnf�
�5��ހ�a0y�	���
==G|�=Ԛ�=���=���=8�m=�݄=Ty&=��=^U
=���W9�;�R
;˕S;�7<
/
��������������������������������������������������������������������������������������������������������������������������������?�r�?y�?�
3?G\�>�
>]�>>�v�>�V*>�>I��=�7D=_�<��><���;�u<��9<�/<in;��p<��3=���=Q*�="�p<���<�
j;б�<<�#;K�����`�
�#ғ�~Fݽ�!���нP��eؼ_ ��ռy�ƺĒ[������i��i
�
�c��{�������{q�Q 	�2�&�L���b��齩Bq�}h������txн�#��l����=��<�z�=�>:=�l�=�ǝ;������-���O�H�Z����h��g2�՟�=�O�>Se>,�v>)0=��=���=�3R=��M=e1�=���=�}b=��>�>
��=�
+=�_<�T-<���=&��<��;�끼Pdh�n�^�o�<�$���t0��_���P���V��
�1��ː9�a{;�	L<���<h���	n�>+�_�F�cd���+�]!�������Z���5½G�w��:��,�kZ����T��3J<�:�<���<��ɹ��G�#������ψ=b(j=�eR>	Ԧ=���eֽkH%���J��Խ��9�ȼc��੽�s���\�ƽj�M�zr���2^<䃊=��=��\=��=�
v=|v�=��=�=W��=`�W;��<��;���<6E���������������������������������������������������������������������������������������������������������������������������������?h��?g��?�Z?[��>��9>"�|=��=�P{=�{.>b>
zL=���=�<��<��y=�.=˺<��u<�r�<߿�=K��;��@ܼ��� [...]
+���&;���Խ�S"�T�#�2`��M*7�R�D�0�2�;O����=.�_=��#=�k�<��e<$�@�&���!�
�7���5]�-H��h|;�"�>�^>a�>� >dŸ>�=���=�j=�Z
=�|�>`�>v�>2��>D�5>2k=و�=L'<���;Яh=�=��<�I��`W�<)�<�)��m���!a������I���5�D_�<��n;)��;�/;��
<}]h��	���p&�	vx�F9��I7+�->ʽb�^��&нl�
������+������9
9���C��G���<���<�Lۻv���ԭ��K��?�<ߔ�=��?=�?-=������M�ܽ����%��
+���k"��o��꡽�E����x�nm�7
+ۼ�Pg;�h�=�ā=|�%=s�=��=�=�=�y
=���=��(=�ir=0�=�[�<�l�������������������������������������������������������������������������������������������������������������������������������������?��m?b�@?K��>���>�j�>�e�>
�;=��6=���=���=�t�<�
u;�m�w8�=y=}X�=g��=i4c=8Z�=
�g=%������)O������$�5�q�I�	�!s6;ڴ�<�e<	}���d�ti���C����͡.���;C�Yy���:��
����v��	�B��g��"��̼�~����+�I�e��ƽ|Ш��;S�����	�V�'_��"*p��ּ�<u6�=��{=�Mp<�� �	���
�̽9;��E�!���H��ȼCs=lw�>A�Q>��}>�$�>���>w��>� >�/ [...]
ռ�< �7�l<=
]����F���=T�e=q|=�ju=��u=��7=~}�=@.U=���=��>=��	=�X�>��>�1>�>}p�>~�>n����������������������������������������������������������������������������������������������������������������������>���>���>Σ�>���>���>��>[��=��j=���=��2=OA{=��<��;r��<>�=Ks�=X�+=~�~=xUn<Áݼ�j;�(���w�W�!���9�dQ��3�R��q�R�;��<M�&<���<��л�H����B���e����q(��n�M�/�U:S�;��v��"p�&Z�����8_C��9N��}�%�۽�����7�7⼘�g�^���EL�~ͼ�����1��2<��==en�<�7Ҽ�S�D��[�Ž�������p�ӽI�9�m`=� m>:ԏ>�� [...]
�X���,/�݊��F�@��+�w���hK��=O߼�sǽ"g���mѽ�j�x%�$b:��?:��7;OB;�
b<��4=��<�T�(�j��1�����M��8�H�nw���
��v<�
 ���g<�u�=
kd=]�=��=���=��=���=��={�:=\�u=I�=1<s�0>Yu�>Y&]>k�>\_C>UJ�>1�*>�
�����������������������������������������������������������������������������������������������������������������>�5
>��'>��>��;>��>f�9=���=��q=�5;��e;����y!p�k�#���W�|��:iA<�5=,߭=Ue<�ʭ��P"��
m�=?1��������̻�����/���e�=9�20=-D=B��<�v}:�l��U
��{��%�n�ha��`K
�y끽DW
���4��C�� E����3;�(<�;�����O��l��
+BH���o��*��
_��-l�_���;�,����#���k�2Y�;���<˼X��K��5�b��ZK�g�'���������l���1�<����=�=�5U>\�<>���>�(>��r>S�>@�T>89�>�>���>��O>�^>���>z�=
�T��B �^̻*�5��8��\�H!���,W�^�H�e��J[�Y<}�~?U���ܽR�V�Sab�7��짚�������hk�I�Ҽ�鼉��B��;
�1�#l��O`��3�;�ԅ;��g~v�G7!�!��θs�s��"�+�������Զ�]��9a�g�;���AL�F#<���<Zj���	���#��j��K毽#��v3���f<���=�P<��
<_�;�9�<�m�=�h=T�=��=���=�N�<;��<�{d�"O<�y�9��=���>�s>��u>~��>m�(>Q��>������������������������������������������������������������� [...]
>i�>oV>��n>m�y>��=�q�=�o|=f��=��!�O�y��_A��v�Q������b<$G�<gv9<�����ѽ�
+�[E�Z�u��jԽ�B��	ȽB����;��
=\�=�tM=�P�=����o���
������Z�i�4�p�y��}E�x���YC��mZ��tS˼XF�G���#o�����x��񂩽<Z�
+
��X{��+�QC���O��ca���)��4鼤�S;��f<{
�DĽ\c���H��.2�Dm�����o����A/���<���=��@>I�>p�b>�u>�p�>{�+>5��>.��>r��>Π�?�>��>�F�>%�=�<�
ܿ�5�
�ZdS��j5:A i�����B
���s���ֽ����f���Z��������Q �W��
�M�{?��Bf�����7�]��~�;�%�-ؼ%�׻�.��p��'���j=;�ۼ���UDڼ�݈������#���m$���
�1��<�h�Ll�Xh���u#�g���9mν,�����
q ��΢�
��&��@7��*޻R�?<�'
<��\8�&;�
�<	��<
+I�<���<�~�<�v;<F�߼��6��'��C���@zZ��j��������������������>�ca����������������������������������������������������������������������������������������������������������������>5�
=�6�=���>I��>l>
Y�=�-=w���J)��V�0��G��U�
�SkĽ�"�˽D�8�k?|<�x�=x�-=���=h��<Y:ʼ�Ƕ�V:M��k潷�=���L���㼼?Һ��V=B�=��O=���<�[�;�󁼟�\�Ƭ��B�ǽpj��
���a��ꅽ�"8�*
��	��]�����0�3�
�
�촸���u��_Ѽ�m���Y3��̇��F�|�FG��{_��Á���˻��U�5bB��%��ʽ|�|�&��t���h�;m��<�is<9L�<b��=%4>$�%>��p>��>���>m�>)l�>l
j>��(>�}�>ܶ�>�b�> [...]
+���9����W�˽�y|��!N��
������E��nf�� нy
˽5�)�&���X6#���'�þ9�s3O�� ��S:<�:�o��5���Ô��[�����;��߻�̽6S��,�8;�^n���:ߠ�<�9��of~���9�(I׼���
}���ν�齍K��D7I�
4:�EK���v�N%Z�`(>��B]��=��Q�0<�����<];6N�;ɘ�=c�<�L�<�/�<��<ʌϼ8� ��˽j尿�&��C!
��fe=l��=S
c=g��=���=����������������������������������������������������������������������������������������������������������������������>
��>�r=�
���yQ�-��=��޻̸�� 
K��}轭wF������\��>f�����:uo�,��<���>�V>Oce>3�[=��<Ra%��½x�������۳_�����
;�ؐ=P��=�u+=��=Wng;�ߺ�K2�C�!c[��U�������z��* [...]
��:�F:�Ґ:�纼fjn�&H�H����׼�4����T�!䊽RA������i��;�:<��"<�N�=4�y<��<:��;��<��=�ۣ>q�>��k>�W�>�l�>HX+>#�>q�c>��>�}R>\�	=�
�<fb
�a��������`->����F
�*~�/�ս�U����W��lV�ӀI�����Խ%��)nH��� ���*��U���oF��$��7���;w����(��4^<�R<�M�<�x4<�˔;�ǧ��λ'��=_+�=��0=�O
=#�<ı���^�
�b�+���� 󼲎��ͷؽF_7�Y���]	i���_���ཋ�5���Ļ?ǻ��ۼ|=M�G<�n	���~���<���<��t= ;�<�
+=-�<�5V���h� ��@�`�#T ;�`�����=a��=1W=M�\=O?O=y�m����������������������������������������������������������������������������������������������������������������������������������P�������e{��A|��>.Z�h=Ľ�<b�}� ����ĺŽ�����@Y���=�|�>�H]>�%>��Y>���=΅o��̸��$����o���½�*Z����<���=R.~=���=�ܧ=^��<�la<+ 9���2��|���=�)������Ŧ$��	m��ν]G�������yN����f@���"ؽ~�����<���=FL*<�oN<	-����6�.B#�:%Ѽ�h��!d.���QgN�zT
��S��x
!;�,5=J��=�{Q=���=g�|=K��<�����*<;�=U`�>?
�>�[m>��Q>j��>S�=�g�=�[<=��Q= [...]
+�<���<�G=�U;"Q�<=��<җ<��;%w�<��=�;�=��j=��=�{�<����.!��u�Q�q�&�q��o�';p�C
g�r at 3�P*��ԣ��E�~`2�����]<���йD��=c�=�<[��;��<�O=S�g=�=�(<�t�<�"%<֕�<��X<��<�b�<:�2;��7=i��==�=?�}=`l�=r�������������������������������������������������������������������������������������������������������������������������������������-���
��&���c�
7S��I�&AD�*��@˽��_��6�үݽ�R�Zb�=�Q�>���?j?
+�>۸>$��;��(�H<۽ճ��ؼK��=����W;��=��=7Z�=/��=�*=a�<=)�K:u�#�ZU��e�ļ|���f
���d����R��"�Z��}.��
+��p޽���S��Fzȼ*�a=%=5=��.=Y��<���;B*@�U5(�
+��:W�)�X�1�=���O������+����<��=Ԑ4>^��>h�K>Fʈ=��#<��
�C~�:��Q=@k�=㛪>C;�>V�>=U}=�A=UI<=��==��Z=���=�zf<���f�1��F=�{�F�

��SF;�o���«,�o�$���j��S�J!ҽ�5'��6#��#V�|�l�fvS
��%��x�k����I�P��n[�4�<�<F�<���<���<Ĵ���4:��(<K:%=#<�
<���=�VD=�
�>"=�vz=+;��)�g���}���{��>g���3��ӽxɟ�����fQ½?�
���ν�+e�3ꏽ
-���0�<� �=~�<��W;��n<E�=��=&�r=��=#��<�k=�U=�<�p�<딤=a�=�� =�B�?�~2=s	N=�Xp=�@W@
+�������������������������������������������������������������������������������������������������������������������������������\��K=6��s�L����%�����蠡��*y�%�9��Ͻ�Q-��١�=:jF>�&�?�Z?�j?��>{�=Y7ӽ+����id�����9\�kO����N;DA:ʰ�;�P]<{H<�_�<�`}<�/�<�*C<՟<Y�m�Ux|��Rɽ�4d�F�?�DYѼ�7t�X��!�D��I�SPA�<6�;��
==�=�۱=�<K<��;�߻|M���*��8�ŕ�e����߽�
���:��j �=�2�>��5>�	�>�E�>��>�5<�]1�h��|rh��<�<��+=��h=��=�sm<U�<1�ݼ�ft���=��=�c=�o`<�~|<�������Eyٽc��������t뼈���ƆE��S߼�E3�E���>���� [...]
,<ݘ�=��N>���>�7�>�o�>>P�<	� ��V���ҽ�`��������6`_�ԈƼ7��;��˻�PۼBMK;ZC�<��a<�9�<�nr<���;��w��᥼;�Ȼ:#��g��׼t� ����LL�1
�!@�<e��=1l}=[JX='u<�0E9ͺ<
TC��@��=<�	��������s��&2�Q$<Z��>��v?Gz{?�a?�Uc?",q>o��;�1��2'��fm��f����
T�"���Dѯ�
+�ٽ>)����׼�z=���>�
>
��=�Iv=�����LɽE�2��������0�<!�F;$�L���̼����*Խ�ҽ�n������2 ��pe�K*�W���C�ݽG�t�	A�o�V;�L�<,��<~�<T�M:P
;Z��<��<�?\=W��<�9�<���=$�>>
+~v=�Az=U�W<���
�ͽ�����x/��&��ѫd��	��� ����r��n潽y4��$��������ME�!����0=�q<��(<���=��=��=��H=���=#�K<䵽�*��^��Ka<�d�=H=Q�N��ɹ</�R=�0�=�k=��@
+��������������������������������������������������������������������������������������������������������������������������������������$�������;��Ƭ�+Ҽ�
[�3�%�����?-��e�W�nto���9���)�*��<��>s >Y̷>2��=[���8�����ƾ&�?����������޽��g�#3@���5�{ײ�
6���[!<|
�=O�A=@�=
�<Y�5<��	<��5=��~=��<ō�	�̻��(@l��ƹ���s<��<<�kQ;��:��
�\�C��
�;O�r���н
�T�~�x��(��ߍh��

+=O#?>��`?��?ͺ�?�X�?n�.>ˆ<:��������̽�����C���#y������S������e*�!�8�\�>)}@>���>��~>���=睹��CȽ��Ľ��/��
�;��7<�
T<��V;��C��Hj9`JY�^8u���
��d#��9	��U���v���ļ�ݽ�̽+���Ĥ.9�,<'?�=%R�<��I;�Sغ��<�z+=^>D<��<��<�'Y<��%=r�&=<�;���
�� ��RY�������X���e���,���&ҽ�,��ן������@8�Nv�t�;�[���(9ҽ����:��<�N=h=��y=� �=�)S=S��8
-��24\�z;�^�ܷ��*<�r�= <�=)<`U�=e	�=���=�W�=�X��������������������������������������������������������������������������������������������������������������������=D3T� [...]
��T���Ὀ�p��]�U{o��vb�ƕV��[��(ǽ� �9Z�H'�=��<����h��课
���#)F�0y�����ߖX�����н�:9�#�
��
n�	n�:SJ�<{a�=;�=[s�=0�p= y==
=�=W�B=���=�9D=lj;��J���ǻ�o�������;��i<\[
��PҼ��������χH��:�
��	��*%�����ް���L����=�P
>�M?��D?�
l?�4�?��t>���;�w�����r�֓��-��� ����Ͻ��׽��C�Q��E��ć>U�
>ٝ;>�]�>׸�>fu<��a㽚-
���';��-=+IY=���=`��;o��;�~�;�� :p#��}`6��堽 
��W
s�
�Y�ϣ�‹j��m����Z�
�h
M;n�];�<�;j��<-<�qJ=�D�=x��=��=t�=��=)�<'�c;̳"����$ �\�Y��[��=��0�.MH�k�w�D�r�������y��j�S�9�u�Z���ý^�<�7⹼����x�~�j;V	��C�2;�n=a�=T��<�b��56�=�P�53��0��<A�G���2�
+��� <��N&��7�=��&=�� ����������������������������������������������������������������������������������������������������������������=o�<�

=
 s='[@��pC���������Dp��+��ޣ��u_�ٗH���2���
��娾w
��
���
�ٱ޽�a������B�vVؽ�hx�݊N�vm�
��'s�����?ֽ�P���I���'u��R��MQ;�� :�4A:��<��B='�*=*
=L�D=�St=�5�=�&=��d=u�h<�� ��%���<�<��<
+-�<N
�;�z�ۙ��/j����m�;f��9F��vR!��y������Ӗl���~��=�z|>�%�?��?���?�˯?v�>���5���,�Yν��.��
O��콙ꬽ|�޽u=�
+�����;Y��>T��>��^?�3>�
!>�����5���/��
���N;޲a=��f=��=�AV=˴ =�`�=�/{= �;��(�pg���k�(s(�������
%��Ͱ�,�P�1��;k�y;w<O]<O�<�~ =s��=�-e=�k�=�%�=y�=W;H{ɺ�
�� �Pbƽk^��-#$�����
�ۿ���D�
�ܽ@�F��pѽ�	��"���ɽ"*J�)ڠ�Ɏ�3r3��)$�)C��$�������,<�h�=G��;�ȸ�*b��-9߼�F�<
�<������E�_B�����
��Սl�����ĴA�-\�������������������������������������������������������������������������������������������������������������=�<�Ԃ<��<�3&= � ���ʽ#�f�����X�d��"+�)�	�7�"�
+
��)X��z�0�+��8���н�
��`���w��Ⱍ�
Nv��Y�G>����j����F�u�̽A��>�^�K^���x��X�<ܘ�;��8<&�<�W=\W=D,=�1�=���=���=��=Aʫ<�)-<�
<��3<�k�<��;��)��2��� »ӥ�9=P���/��@K;�o�:�������
~���Žx6*�
<���>E
+$>���?Mr
?Qu+? �C>%��EҾiо
����~��u��Rνd������Os�>ڼ��|�+�Q>y�>�͸>�~�>�^�>=	"�G��������t���^;�ؙ=��n=�B�=�ѵ=劷=�N�=Ɣ�=w2j<#'�;a�S�
нE뤽m��
������'2��0̵������t�:��Ż���<�҇<�y~='Q=b�=�<�=�1�>	�?=�b�=|98�o��0G�>E但n<��9v��Ch�6*�hT
;8�[;. �����9p�P祽�ļp�>��D�%h��������h&
�`wh��E����1���1���;*�k=��;�~�U�.��k�=;v
<��<�k��7G�1�`���.����� ���\��;`��������������������������������������������������������������������������������������������������������������������l�J��<���������`� [...]
���	�6�
���l�
���9���+��ýJQG�<"���ݕ��d������:�_�;yk;U�<�{D=<��<��i=j�=�K�=�,=�
+=sF'=
��=9��=��>K�=��R=� :�>�n���N�<>�;��	;��U<0�<t3p�G�<�G#��ge.�I�ی�������X=�S|>2
+�>�`�>��>W:q<��c��W�j'�-8C���
+�7�gp��¬���
��a�0�D��M=J��>#��>�6�>x�N>)6Y< 
��h�W��j��
���
<�K�=���=��`=�;}=�F=�C�=
X<V�ٻ��c��C��G����Sl���F���^�;r�3z����;w�����^�<���<O�
<�Kx=��=Ӎ�=���=���<�v�� ��
�c���������M�l�i�M�/��=<��1=*6�<ߊ��9
l��g��z
��dļ�O�	�#���ļz��#r%9��Ǽ���灶��Ӽ%��;�_9��?�,�6��J����.����=lB�<�>=�Lv�5�c���J��0�%`��?�
+:'�	�������������������������������������������������������������������������������������������������������������`l��:@��D������4��H��������7��ڽ�B���Gl���8��7����F��EC�	�'�ƾG�0�N�ž@���'t��
+xL�W|��|��E�ѯM��r��ƽ/���
�6���弯jټQ���#�ټ�R�:\S�;��U;�O�=nP=:Z<�޻<�=u��=���=�:P=��r={.
=�Ա>
>4 �>"��=�c�=
��aɻ�<�v<���<��<�%�<KK����ٻ��J��
�;�Z;VAûk)&�*�M�9<�q�=A.�=?� =A
��������x�
��
+�
�
Ͻ�M�����Y	��
�RK��o�?��k��\�<W2�=�#K=�
�>
�=;��⦽HD!�}��!����+=�޽=�!�=�ͱ=�cL=��<�1<<w0�ȍ�
伴��R����F��ؽ
+F�/:��gM8�/�
�T�r�E�S�<)Tͼ<��BD�;�1/=\lX=��=�k<d}��&�R�S��k�!��ή���
+���bӼٴ�<��+<澏<;g��+/�f=�n$��Ĥ��;��8�9ר�;�?<%2ڻ��u����ȋ��|��Z�ۼN�X���ּf�P��
��7E��:L�RX�<W2���龼j����ܾ�%��������������������������������������������������������������������������������������������������������������������������޽B+p��J��ȳ����ѽ�O���/_�-K��.�P�!1/��|��]��ǀ̽�Nh��Ƭ��l�|��6E[�L6]�`J�;QR�!�M��
���C��ϙ�;X��
���m�<I��;
�����n��
�e�V<
�`;����A;��<���=
��=@X�=[�=��=���=��=��J=���=�ƨ=���>:
+_>��k>j�>�R=��f<���;�9y<�h!=�=�=
�<P�p�ov8�&E�C��;(�<���:z�m��8ͼ�SS���Y��)�h0�8�t��eZ���1�ʇҽ�����/���Ž����'˽QdF��N��mB��Z���=����l���a=�-@=�3�>'�>
+=F��Cjb�g�֓�b?Y=f��>
+
+>
=�g=�2<9�- �
/ǸWl�<���<�����z������h��%Kz�����CK��5
��ܟ��+��<o'];
�=���\<�Vʻ���a�Ӽ��p���t�H�f�D�Ž��[��0f����􌉽����O����<���<S�d���J�!F[�h-��+�(SH:
Ss<�7b=t|�=��=���=41,������	�Z��k`��ۮ����,^��g3o�
�c��}�9��x���V����s������Jg��������������������������������������������������������������������������������������������������������������������=_���'c
��C̽�K:��2���Ƿ��+��<D��
+"�� ����4��G����\��Xh��]<�z
�-��EV�4�7�+�A� @���	>{��b��&<�24=6�K=AO�=��=_]�=��;�$�;�O=@��<��s<�W=
�=5�d=f�)=k�=W��= �G=���=�mA=�
�=�
�=雉>�,>s�u>�0�>��i>b3u=��i= n <�Ni<�=2x=I�<�����/���0�q��c��<~��<�.,<�gJ�ԃ��}s�#dI�
$p�#ó��܆��9ڽ}�
�������I��K׽�´&��X������C��k
����a���ʾ<:7�=��!>*I�>��>���>P��=N�B�Y�!�;����s<0
A=�v@>X�>?h�=���<��X��g��|6<���=2;=}�<G?,��ҹ����'�ڽ_��q޽�qR�Y
5�T�<@mD<��b<p����7�)�\���.����2IH�yL���B]�����]�;�˵2�ҏ�Zm#�?�5��<��;�
+k�z[���v���T���8;�o��z=DO=�l�>
��>.�> O�=(��<v*E�4F���輴%]��aF���Ͻ��j�O�����ú
+�bWV�ɦ��<+f��y�������������������������������������������������������������������������������������������������������������������������=��=0
6<MIV���(�e����]j��`�&��	u���;��k��*h�;���
+�g�ޭ½�H�����$�
�ʽ��཯����ݾ
�O��۽%P=Uo@=��_=��=��,=��=�=�"�=w<<���=x
=A\�=2��=�s�=�.=��=�!=��m=���=���=��[>�>�>
�>&@�>| h>���>��!>b�{=��=30<���<�O�=J�<q�ۻ�Y��dd�+��`L<��H=6��=$&t8��x�Hz%�9`���x���?�!^��mh�w�?���0���޽�(���,���(#����\e��u�\�r��{��
�ؼ�_�8�D/=��>V&�>�¤>��>��>4��=-:�<�6c<���=���>B�l>}�W>S�=���<�:��������<�

=���=�
+=���M2�r�k��Ej��O�B�N��c����=jq��O<oO<H+���CL�m�ü��Խ״�P�U���(��,]�Bp�F�U�:);�7b��$ܿ�e��2SC��ڵ;��:G-`;V�~;��<���<�ۉ= �=���=��>tN >Ww�>02=���=yU�;�מ�?s� �v�$Ѷ������X̽��ý�����0��O�b��E[�}/������������������������������������������������������������������������������������������������������������������������=��=��=p�d�L�0���T��
%��T���Nx������ʾ�q�� 
�s���?���U������6���$��2y�!�V�t�1����+��=��=쩙>=��>
�>
�X>o*=��(=D�L=%2C=h}>=�ћ=��5=��y=�C�=��
=Ÿ�=��=���=�&A=�D>�==�F?>
_>�>Z��>d�7>jF�>7
�=~_�<��<"?�<w4Q<���;܊�daH��BҼq�
�ѻ�;��y<�! <d5μ
������6�2�Փz�
�L�5Dž���ڽ}�7��ф��`罄@������b�
+�?�[�ϖ� �����zTD�9+���Er��5F:��[=��M>�Pk>�x?�]>��>M��=�
<��=
+�=�9>G�>jF>=�"=�4
<������ɽN�>�ȖI;�
+�<��;�
ݼ��+ʃ�9ڼ�?��� ��0�������і�!�W�G඼I+J�5`h������c
�@7
�NL��|J�����c�_��nO�
D̼�͵���$�,>��Y8߼�ګ:�ڻC�;�jU<c�&= �+<b��=:�=���>0�>\�>��W>Y��> �=�(m<�ɼ��N�����eP���-��ɨ��9������ ���C
�
QX��g����������������������������������������������������������������������������������������������������������������������������>O+T>(*<�7�;�{�;���;ro�EU=�N�½��߽�/����ʽ��X
K�?��x9f�� ������x�����:#�
�ټ�Z�����ˑ=_�E>��>"ƒ>
k>B
+>er=�J�=���=T��=bH�=��=̌�>�>q�=��=��=̧�=�O
+=���=��y=�Z=Ӈ�=�ǰ=��=��Z>/��>14�>��=�ݽ=$c/<�[J:���;[3y<n <M'�:�a\�ʅ�{շJ�+:8zs;�A�;C9��cW5�%᝼����z��$n�Q���ޔ��pE��xܽ���[���j:�6�𺌬޼m����;9���2W	��Xȼ���9���
�=2R�>~��>�Vl>�j>�e�>b��=�[�=:c�<ӷm=S��>�>R�\>4��=�4-<
�'����� ��q��8S
�j^@�u8�b�j������tv�7�
+�ls�v�򽐈��R0��� ��̯��L����3�7��$�Խ�!�K|ܽmM:�#=˼�ڴ�����
��a��<6� �Z���/�D�ߦ.����'�9��;�.r;�P�
�;��i=�ti=��><H5>i!g>NCV>�>��=�j)�M8
������|�͘þ3��
J��:�"�
�
���W2��RS����������������������������������������������������������������������������������������������������������������������������>f5Y>*<��Q<
;�<N�f</�=�����F��!ڹ�X�L�����h����g�O 8�^|7���_�P<<��x=;ly=w�<�ɪ:�������=P�k=��>
*>
$�>H=��G=’�=��g=�̳=�o5>o>Yr>��R>Y�B=�I>=ɽ~=�]�=�
�=ܠ�=�
+?=K�=�K=t�9=uz[=�Hq=��i=��c=1�=X̭<�v�9��Q�ַ׻���;��><�j�<�"<Ϫ;2"��r�}��K�U�X��b������Z�����]���3A���C��.
+��̽kZ�[���ļ2D;�|
���<%A�<��u<�̬��E����x��Q��
<@�>
�+>��>�[�>��O>&��=���<��<X�b=q!=�7(=���=�
L=
�[;�X.�/ɉ�xQ��5�E>i�X�׽\�*�Z_T���罜�m�� �xc�qꣽv�f����z�?�bt��C�N�ŋ���9k���v�i�N��;�d �V3��/4����.����#;$6:��Y��f ��U:d�����?9�;7�Ƽl�r��쁼��<���=�u�>�S>Җ>x&=��=� =
nd��Ќ���
��p����
d��(Ea�h��gi�~�ノ�)��GϿ.z ����������������������������������������������������������������������������������������������������������������������������>y
�<y��<�*<�
<�ɼ���0�+�:��K
3�D�
�QY����KK���m�ɣ :R
<�1=H�]=�Ȃ=e�<~
컆���)g��}X=K�C=�� =�F�=��=�q�=,W�="
h=�O�=�47>yL�>�|>��}>�q8>_��=�=�"#=Ľ=��=0g$=,=��=(T=��=<�=�=(�=
G�=
�<�Xú
+���#��/V/;��<��5<�f�<�b}��
+��Pýyhʽ7m��^����
޼� ��O�:����*���Ƚϙ����jս�������Q,<.
+�<���<�Y<��=�=A=�n;�켼�ռ�#���V <�=�gq=�)8=��=�P�<�D'�dQ�;��<��=�<&=�\1<��;�@��CX���a��Q�M�Q�սPGt�
�3��Bd��l��9ý�����6������%p��@�A��8�ǽ�Y���

��)w���S��ꕽm�׽�:G�Z���ML���� � �
;(����+�����'��
:���<̼�l�����kļ��X���ͽ}
�����g�3={=N�H=��=H�z<�_<�R6���`���ýmM���g��p��.���m�=�Y�T���Ծ�׽��7�����������������������������������������������������������������������������������������������������������������������������������������ۋE��d��;P��<
�I�z�DJ���h뽖m=���s��Yý����2�v��^;�1�<��z<�;�=/��=C=�<~G8;��K��;g�hx�<�)'=�1=
+n�<~O8<�@<�0�=���>
!h>��H?7n?'��>� >�D@=���=�ܨ=�#b=��3=@fN<��<��
<���<0�d<_�<��;)�<n�<�V�K���Pe�
���`��;
�.<��b<剢:�a��ɬ���+�‚���2�eٸ�oml�
6��3���l ���(���
�˞���I�����~�̽y�7��=�=�D�=���<�n�<є�=}�=q��=�'<
+�>�%Xp�Q_-;���=�zL=���=,�;�ȼ.�E��_�6���<�f�=/�H=o�=��<0�l��^�����:TD�Q�B�K��
4)�(ƽT����gF�Ցǽ୐�Ѭɽ�����f�P���,����؍T��о
�~��˚���g�m�z�[�*�G圼��L���=)�]=#2�<�O��*i�Qb(�Kye�P�����x��$*�:eq�^�
��K��-�
˽#�Y�
+~<'��=�l<��z<�Qo�M�޼X�۽	
+��猤�����_ݽ#Z�c���\ƾ�S�g�;�}�������������������������������������������������������������������������������������������������������������������������������������������U�|�����Y���L�9 Ž����
Y�榴�ǘJ��y��j�r���û|б<w�)<yJ<�/�<��<���;�9/��A����ü�<���"N���[<�'0<a
�<��0<�%D=+
X=�M�>U�)>���?M
�?X:�?'�>�4f>0��=��W=j�5=I�<�n�;�5;�߷<
+�<
纲�]��X'��o'��8�;x�/��s̼Χ޼��˼�&�k��w��*c����H�U彗�s��/���'�})d��G(�ֶ��({�{��ͽ������Z��
c���ɽ4X��{�<�ME=��)=��=V�<XP�;�:�
�<+��<#MD;�{����2�
��$���ܤv<
0�:�(>�6=��T$��;-:���<�� <�*�=�<��O;��꼁�ϼ�E����>�<�M��I�5d��x]Խ����H�Ƚe��Ur��w#���
���ܽ��8��$߽�rE��~̽Ĩ�� -E�ʥ_�����oJ��{�w�v��(a�=	N�=��C=�H'=�P=�݉=$#�<yn�<���1�G�
v�)�D��ȼ��=�X�%�1�ռ����|K<
<L
���QO<�m]�p��rr�6'��)�*�'��s��/(���6�1���d9������W������������������������������������������������������������������������������������������������������������������������������������������~엽�~�����
���'�ý�z��}���;��}q!�}�� �5�_=1�=!I
=
�<�3�<uGA<5������ާ��7�9�н*$��
�ļM(U<P��<��=a=�1�>���>�-�?8�?O
�?)l>�ٳ>&�o=n�x=' �=3U��	iԼ8^���]�5���QԼ%�#�t���pk��{���ܼYb,���Sټ¯-�n����
r��a���]���o_��T�Z�>��2�ϼ�:��$i�En[���&��ʽq�Q�����J���,v���5?=�=��=�V�=wڴ;�]���4�5 Ǽ{�@�>�\<\��<
+����R:��j;1�k��B8���Q��M���;-��<I9a<r��<��><�=�~�S�㼷v;������@��[2���JU�I:��``K��$�������A��=���Z�“���~n��v���Iq�߭꽝}���q��/:������۽t��S~�؎���;V=w��>
��>ٳ>&��=ݜ0=��)=bz�=a��<��Ӽ�X
�&!�H]��D�g�UZ��%Ż�q+��_
;P��<rq ��’�Y(��רV�Dͽ_6�{Nȼ�����?V�jB
���L�^��.�/���������������������������������������������������������������������������������������������������������������������������������������������Yڽq3��0f׽M�2�Z��½��Ͻ�aнDe6�%4ٽ
�ؼ����?�<=w��=�c=��g=V}c=3n<�n޻�#3��xI�0�?�o;�t��Z�ѽ4y���E=SU�=�}�=�nJ>D}�>Ȣ�>�@�?̕>�	)>�b>E=��<椢;�M��-P���������LxȽ
++��Ӻ��)��N
+ǽhF����(ڼ���
+o��H�6�h�
�-C'�����׼������B��9���]֬�X���1弾*
�)�^����H/��/�ٽ�����l=�	nɼ�(�=��=?��=�&�=~3;pW�m�ͼ�q��h^����;�"n<�&<�4<��<��<^�x��
���
+;�
/;�X<�7�<E��;�
�<�<*P��H���ۼ&g�J���1���L��ˮ�W�Ƚ�ꈽ�����սm��6ǽ̓O�ߘ
� �ݽԞ=��q��綠�,��=
�Xj��
]��!�w�<k�;���=m�>5�>@.>nhG>G�w=�G�=���=��H=*C^<ջһF�٥:�����%iͽ;R�}�弞�ܼ�^��-D�8�a�������O� �p�9�ؽ�E�ЃJ�
�s��t��޼�v��ʗ�9���Oܽi̼<$����%�����������������������������������������������������������������������������������������������������������������������������TY��i� v�-zc�����s�VTR��@���A��i�����$�;;� =:=�PL=��-=��I=�
9=���<�I}�m��B�\d��?䳽]
U�a�ּ�bS<��=���=��N>(L>cB�>�A\>ʥ�>�)�>i�T>i�=`�N<�.;p�鼚����x�7Ͻ���b�qi�T6��/o�
��
+����%�`*����ƽ#��q����N����ͽ�+���3� ��σ.�e
C�L�v�v`
+����$L;*��;�Ur=�)�JT�� ~�`~轆�ͽZ
��
[�<T9<�){<�J�<��f:�&=�"'��a�¼y��޺���<T�<�8�<��H<Ɓ�<�VP;�]�;ɻm<]�=1O�=<=<k伎�ڼ]�I;���.
ؼ�����T���׼���Rd��<�F����ѽ�}\���J��K����J�>��	x
���C��5�t��a ��U�������<��<s`=�=�gP=���>��>Ha�>_�B>&v�=��=�aF=�=I��<:�
���(����0}�6G\�.�ɽQ�����Mʩ�K�ͼ+���oy��H8��f���Q�Њ�<$�'��ƽ '������bu�����"�z�
Q.=M,
<�s<��6B�����r���������������������������������������������������������������������������������������������������������=�aR=��=��
��sڽX�A�
�����
�ɽw~��`�6�Zσ�����딼�C�� [...]
=���<
+����E+�����V�
�V�%�|�p�b<��=��o=�w~=��%>
�>M�>�x�>�u>Z�M=�N�=E
+�<�����Ƚ3
'�CJ���%���5��1���E��A�	�z��<��Y<���;����J�����@����8��c
f�%	��[�e���ؼ���{ఽs�G�������
'&<��=�~=�*=:��:�'�$Hu�:�Ǫ��7j�C��:{��������ټ{У�e�VmX�,��?��< I�<�#�=x<��=/��=p}�=�,[=�(Q=�B9=9��]Ӽ�
z��;��<���&��=�H?]���Ѽﲂ���Ͻ-@��&��6Ub�����]%��,~��u�Џ��½�]H��8��<Z
<+A�=
�V=B�=��=�-f=��G=�J�=�#A>]�>
�\>1��>*��>f1=�`S=��<=/-W<�����@�`��m+%��j�L���)w���u�ix̽'
��zA��=��y�G��$G��
����o���P����?S"�+۝��xh�ha��,���Ҽ��=c��<�m�@t
������ˡ����������������������������������������������������������������������������������������������������=��1=ov�=s��=]y=F�/��"Լ�fU�ϑǽP�/�O�M�_��R��#;��:m�;r�;�9�<�ʢ<��2<��O=/��=���=���=ބ�=�=C�V<�eE���޽
�^�|��
���<qܣ=uW�=���=�|�=���>��> [...]
���ZI��ʚ��\(��P��뛔��u�
����i���ʼ��l=]g=ٺv><�=�>C�=��>j�>5��>J�=�1Z=�ˀ=�&M=x�U=���=�
+�<��7;�L8�
�Ƽ�L���
|����ay��.^�<6N�<���#��
����(�&V�:T�����_����B�9�.�r�Q�a�4M�z��.P�e�鼒f�������?�;n�s�������������������������������������������������������������������������������������������������������A�=���=��=e�F=7g�=6M�=M�t��`ͽA�����<R��=
�,<���<���<W�5�3��<;)*<�hc<T�#��C�<�Z�<�)�=-��=��2>�[=�a2=A������I�s���B��ޥ�ؗ�g
<�8�=J�==/�=`��=�Ie>^�>��x>z�>
��<����<��0N�VV��H�7�L���G
���r�mb�?l��
G;c�<�7�<�i�<�<�<�P<g�%�ǻU�e�+�(��+2�K̼Π�����iٽ��
�����<���=6�=��=~Mf<*��w�����<����<� �=��<(�V���	o2�>~e�,�+<�(�<��=%��=K�
=�8=���=���=��%>��>'
>W�=��=*ָ<�ż������I�`S�X�W���$��
Q�al�;�߽��ɽw���'XY��#����'���U��s!��Yk���ؽ��F���a:'bW=S�>"� >V��>CY/>
�=���>
+�>n�>.�=�R�=2�;��
;+��<E.��.���V
��>�6����Լ��
ǽ�A�g�a<�x�=Ye=7��<�9:�Eܺ�q�:�w��7�O��N��P� ���(�v�꼷2��
�������
���	�Y�F���+�� �ý8m�]U������������������������������������������������������������������������������������������������������������E�#=��=IH�;��=]�=���=�=;���<�W<��=��<�m�<��Y;Zd���*<�=o=�:VXӻe�D;K�<���<�fL=�i=�y�=�
�=!��<���/���μ�K�'�}�Q���r�<	;:]E<KQ�=c�>3��>f/�>s�
>>`;<�
�[!5�"
��ļ�Ͻ
�4�*"��E�l�K���d���<E'<��-<�<��=	j�<�vM;�R
:Cޖ�g�z�����Ą��1����+��I\�|������Ƃ;�<�<�`�=5
P=?
0;T�%���Ӽ���I1��
N:���<�"e<�A<$�L��&��Pj�j3�<^P�<���=8�N==N�=S�B=���=ـ�=�>
��>��=�2
=��}<�x�<�@�8\�����
��V�w2��A����c�]Xݽ�J��}[U�c	�Y��/���K_��|J��a�
�|Z��F홽��\�����>�=I<>>8�>J��>Y��>U�>_>	p�=�v�=��[=O�9�ڼ�p2��D�!v�&#�	f��
+y���;�u��]/��
�<
++c=l�Y=�9F=�>=��/=g�=&�O=e�!=���=_ޱ=���=�߯=ȼ|�5�l�
)޽�Y��n���m�@�U�!ޙ�
� �.
��"���������������������������������������������������������������������������������������������������������=੊=�m�=�я���S<�s<�^=�?	=�O�=�mX=�T=���==�=cg<�*3:���+�y��@:M��;�\�<��Q<ӳ
</�w<��e=Gr�=�-+='�q=z�<
_�< �s�����0��@���+o��䓻�ټ�/ٻ�<<�,==�Z}>0?>E{>1l=�'�<��
�7S��r�q�3�_�x��gӋ�~.���+�;�r�=��=x��=<o.=7�z<���<'��;���>�A�oꔼ�&������
����?���}��m
�:��;��<��<z�S�U
���,�y����=M��E��^�<[}�<�c8<�oh�h\@�=���)<c�<ԧ�= �=7�==4/�=��=xJ�=��x=ҧ�=��j=�* =$ �<V:;�e滊���cZ�Y������%f��0��J�,���4�nR�wt�k½l��J5߽,rG��]�B���ͽ8I�nb;����,n~=�v=�Z�>3b>G�>��=�8�=��-=��=3��<X���)��D��B�6�]�f�R��"l��-K6�
�ݽ$����|�Һﻲ�
<�B=yٹ=ׂy>8�>
��=��=�)�=�3�=���=�J
>*=ߠ�;����>��q��TQ0��򆽭����7�� �%�;�
��
S��<)��������������������������������������������������������������������������������������������������������=�4=�M�=�\=��=���=�3�=��u>
f=�x�=�H=�/=��G=)��<�Y<\������Hs9#��:SQ<�
K=6��<�/	=6Y�=�[�=���=kn=��.ú;��;�4�<�<(}|<eF�<�ma<
���@��&'<�#�=a5�=³X>
+�=���=NyS�kZm�MU*��3Ž��"��N�������o��bν`i�
f�r��;̢ =Pm]=W��=J5=?�I<�V亲k���6�oS�����
�I{���
� ^�&�|�����6��& ; ���]�!���H�����
j���S����s,�:��w=߫=$��<
fe�k�\��/
< ��<���<���<�c= N=$C<���<��=6i=�6=
;�	%�;�&���;�s�;(����T��;��*y�-}
�����|��������ۼ��J���ah��_ܽ;�
�Fr��i�vi���{ڽЯ���S�9n4;���=f~-=�BU=�W�=��=��L=���=p�y<�3g�h�����i�89�
�d�.�
�*
��W�
�4��,�2&�'VϽ+R����m<��\= �I=��>R�>!"W=ה�=z4=�ă=ۍ{=�WG>*��=F	9<����me�c�U��2��_���.�6�7�!��52z�'6G����U�
�������������������������������������������������������������������������������������������������!=��=�@=�<�=�g�=��(=���=��=�2=�%M=���=�3�=ݲ
=Լy=�uN= \�<d�:�� ���x;�)=Q=
�Z=@J�=��=���=���=��P=3�<��|:.��)��<`+='��=�yo=�L=�4=-��<�:��k<u`%=A�=���=�^�={�
���ɽ�o���f���~�������W#��I��i����e��5H�O�<ơ�=@UC=6ב=H+,<��;	3ػ��s������l� �b�
���52W�/���$����e��u�c��a��������a����b3|�d�ŕ׽w
+�]n�
�Ż�)p�K
��(�f�Q�/<%�;�8< 
T���D<��<^�<ž�<��<a�h<"�<v�;,�z���
+k�]�ºl�D� ]���4n�檽E�>�Y����������sa�:WE��å�v,L��˽
+Ѽ�ؿ�A95Q���r~��4Ѽ�v�������:`�
<{��<��L<�v�=aF�=2];
���>l/�:�����m�߈ͽ�g��㼲�ʼ�꣼�'#�)��9
C�m%ý"�;Ά <蚙=Uc�>$=�8K=�B�=e�1<�J�=��=��=��=A��<����wM�=
����l������y�&�$�*��5N
��'�$R��7���������������������������������������������������������������������������������������������������J���K=�2�=��5=�h=��=ė^>4�=��B=���=�J�=�U>j
>��=���=A��<yZ�<W�[<
�<�z�=
l�=
=��=U�=��q=�� =�f,=P]�=F6�<c��;~��<��=h�B>`>H�s>?h>-�=����CN�w�(;>[�<���=./�<��P��x������������w���þ�$���Q���)��½��.�nK���u:�A<��,=�=�;<;T:��;��J<R弰'�����Β����[T���f�l+'��d�������E���������#��󥮽	���,�L�Q�;�j��݇?�����s<[;��ʻ�L(����r��:�ռ<��9<9�0;�!6;w�;k�輺h����s���������ܼ-��>������~�k��ӽV܆�9C��jv�
�۽J�Լτ �ӭмʖ�;8�;-;�t��
��w���Ǽ��Լ�L���45���R��0�<�Y�<��T:	ɼV1ػ�����4��ۧh��S�:���<S�
+��e���?�N��T
+p��s<&+�<�=�=G�=�|
=��M=���=
�';@���I<��<�/�<��j�����3��%�]��х�\!ǽ���=DE�d��og��<ľ
��P9s�������������������������������������������������������������������������������������������������)䖽�O7����� 
�=R�5=�V�=�	7=�i�=�R�=�5�=ۣ�>
�6>'r>S�>5=��o=0��<�L�;��<�
=�<�z�<��<�'�=T�E=q��<�rh=��=0��<��W<q7X<��
+=�
�>G�%>��
>�!�>�pk>6�<�^�)��0ӻ�0;}rC�%�y�֮W���ս�����
��4$�!8��lཽ���^��� �χ�(~�ڡg;�.=
b�=���=Vc8=+��=;h_=�;Ű���������XBs�Eߏ;|�e;�ag�_蘼y�t��ݻ�ԝ��[���P�Į�� ���/:�K!��
+�ӽ@J�� k�w�;���:�p��A�T0L�(��=:�x=
4<�*u;i
<��bC��9��{��g��H�
�ü ����x��V���X��REL�w�(�^�:��D��ͼ�
Լ�"��H
�D�����ѱ��z���Q˼
���H
�HH$�i
+ϽG�(�"3���
�z�:��VP���;�
�<9r�$Y
;E~�����;LJ�c���9���d�<vR=&wA<�ҋ��IS��B�W���*?�;�,<y<m<��y=a�
=���=���=	[N��	��4	��3���y�;x~Ѽ����������
+^;
i%��
�=<����
�޴h�M�#��vZ����������������������������������������������������������������������������������������������������������UF�����n˪<ڣ�=��I>f!=�oG=��=듦>��=�=
>��>Ol=�D=��v=d� <�4�S=�;���<�K�<E�n;�x�<َ�<�5�=�<�#R<{��<�P�<ǫ�;�%o<�Q=� c>E�C>�>��>�9�>t�=�������92�E�b�I�Ͻ9�Խt
���u��������þ���ľ!&����x���gĽիC���X��6� D�:ݭ=�)->
+��>5�m>
 h=��=q�=J��=3�<���=��=W��=V�<e���m��5u��+쏼�:���)ƽ �{�5T���X�.W��L
+9�����o��n �+:5\�����G��>��<f*�=S+`=:q=:A�<��"��a��;�������C3���ջ��f�����K�eI3����(�;�r�<�

=�o;`�����Ҽ�b޼އ[���ڼ���A���7��� +��So���V�P
����ӽ3Gw�壈�obR�X�M��Hj����=*߼y�ͼF��<
�|�����M�1��#�<��=u�p=f�:<��x��]���ុ�p�$mL��¡<C,q=#��=�r�=-�d;A:Z�`zܼ#޺;�ۼ�T��Zr����;��g����<l��=yQ{=�E#>�^>/RF>'Ll�X�i��z�����������������������������������������������������������������������������������������������������������ɽR�<WŃ<K?�=IY�=r�=��=���=�Q[=�6f=�[�>
��=�=�+�=�%F=s�
</��
j�;��"=K-o<О�;��<�4�<��v<��"<M�1<�0�<��<Ԓ�;:r	<�zH=�$>7}9>�1:>���>d��=�
�=��;���LJ߽���� 3��+@�������%��
ѽ�\�㟧����e����ƽ�}b��L�����T+���d���=�@>S>u�>�->�G	>g�+=�x�=|5%=C�=��*=�SM=��9=��6=O�<(2�:��nu��CX�ý#�%�J�Z�m
۽
i�|v�)e��d_�����:.�:�C�<
٪<-W<��H=I�D=jIY=%S�<n66;��v��GY�jkٽi�6�
���J���.�G6������}`�hKݻ��<=YG=�]=�!�=y;󐌼@�[��B���
���(�����]^޽��$X��/v�<M�c�v�Fӓ�9��ؽ>c9��];u� <=t���C�Q���\sӼ��F�Y��'r�<��B=�C�=�w=�
==��S<��;p�HR߻9�b�@!�3BB< O=v��=$
+���}>�n)<5�<1bh���X���+��<8j<�lw=X��=��=���=�k�=��>T�#>(n�>l
�������������������������������������������������������������������������������������������������������������<�2�<F�}<�y�=w�=d��=���=f�q=Z�&=��=���=]�I=h��=�|E=�yd=���<;(��c�;;�
P=��<��<��I<}�<s��<|�m<��R<�>�<6�ܣ\�7���"��<��>�E><�[>5
+�>=�d�= �h;�ݿ���(��J��~���2����w�ֽzih��g��̽�����M��~#�ϙ
��(��@���ǽ#��<%λ=�mI>k"�>�=�>�'�>�ڍ>�F�>*�M=�Bn=�=�W�=ϣ$=��=�FF=�h,=˫<;��dz^�����
�5���ݻC�0�����[4��6eF�5�C��p7�"��9������<	��<�V�<��= �H=
<��<����%���Zqy�F��#�ռ{��+��v+��	����:�E����=�H=>	�>D]>Oq�>(T�=	�q�(�7������Z�I��*�^��Eb�L<[��n���^ѽG��L����t׽���5���H�������;�K�<�Ct<�]�< Hc<��<��n=`$�=�Yw>��>
�~=�(=���<���;[��;2n���\0�i
��햻U�T�����a��=��R!=
+���i��"��9�^=�s�=YL#<�>=�-�=��*=�
�=�#W>N�>W�4>K�%>��"��������������������������������������������������������������������������������������������������������=N�<_6&=D�=,�=ky"=Cq=��=���=��4=?t=
*�=:�\=�l
=��S=7)^<���:��l<ᅽ=%h<�y<,w9<��<
��0���B��@�$�z�+������9���k�#"
=
�6=�X�=��=��=! =
��<E�~��1��?
;���a��v���r�&1��ͽo_H�gH"��-׽NE�~F�����U\���>�ө9�N&)<��.=€�>��M>���?�?�>��&>uZ�>=�l7=���=ͳ�=��=�
�=o�=;���q���pw���'��LϽ"�
�2u��J�"��~;��M�HMƽK�̼�m?�"����?_�1�<��%w;�;�
&;��=e�<�ȷ<>L��g����#�8~ֽJu��
+���5m�
�e�l�*�L
��r �U0q�zq�=�+�>6x)>�Z�>��<>��>�<^I��v)��Tļݰ�����)3_�Lؼk�'6�*�;ܦ��������𩨼��o���&v�<��<v��<��l<�|<f�7<�s-={�=�:7=��>��=�H�=<U�<:�i<!
�;�"x��p�:;���#��<
�
�\�Ǽ��8�a�z<��:�5���Z����@V� ��=�w<U��
M=�U�=���=��>}f>�
j>gǔ��������������������������������������������������������������������������������������������������������������������=.0=�=|��=��=�L�=�Ne=��
=!�=s�='qg=�bX=���=%�<�I<�l�<�,�<<�j<]�B�EgͼL��c_z����&�I�<�н`i@�8�r���)�S���ͼ��0:![q<�8k<U}q<�
�<Pw�<!��
+���&�?��o���i'Ӽ�ܽ!�o�
���k3�T��񽢽I?����c��x��t˽`+�<D˭=���>g�>�X�>㖱>ط�>��0>^aF=���=�m�=9�}=x*�=�?c=�~=f�<���ȸ���ry��^g�K�
���H�b�$�����2�Լ7��(�<�$�@��_���@�m拽)o��j��0*q��V��<�h�<dM�;��~��}!��=����&��4;��$��;W�Nc;�N2����7�h|���t=ލr>bQ>��l?�'>�
U>C�=Fe�
Vμ�Q��͍?��v���,��u�%͝���;�R7��	��?Q��ӗ�"h��ܻt�N=�<��<SL<�Yb;�
<s��<I��<���=�,�=��=�&�=e�j<�LG;��R;���<
�q����2�����D#�(ȟ;�	i<A��;��<g𼪊0��d��~e½�8���.�
�&�+5��~k��r���
���������������������������������������������������������� [...]
+�¹ɼ��ž����(���ҽ�4⽊f���k�����6罀�K���<��9=�0|>`4�>�a�>�L{>�f�>4n�=�[�<�@4�ԋ���Js�<�!<=@�״��|m��x
+�.(g�pY$�V��MC��ٚ�Jo� ��L������ͽ�ս%\�<
� n
�
���������;��2;
�ƻ�Ѣ�A���J	��@gT���k�ݸ�xHR�[Ͻ3�\�d�ӽhX���\�=�@
+>��>��?
+@�>�w�>�;{=M#K�Q���(B�Go
���~� G��!�ѽ}���l+�
e=�	#y��8S;4�
;+�.<
��=
<-�(ݺ�u�:�x�:�.�9�K��'��<z��=�=F�=qa;=/j�<�+;���;�
�;��м
��lmL��@���l�;Q��)ͬ��@�)"�=��8*$��L���B����K����*����Ƽ�g��޳����������������������������������������������������������������������������������������������������������������������������>��F>9��=���=O�<��)<;��<\ �=� �=W��=t&	<�
6<��
=7�=Z3�=R�=,c<���<�q[= �q<������ʼDw�/h�(����a���;�ۍ5��;���|ɽ�
Z��r���;ʽ{�W�2�ݼ�W��ci��^!�ʈC�
+����5��U������#�a�v��+�Ž�2� �@�Nս�*x�t
���w���K���9����
����*=|~�=�M�>4�>A��=���=��<��:��������,����G����7���n����}� �?�:�мs�e�p�"�NKL��廘�a���9�2�Ľj��T�A�9/M�.}�Cޒ�JX��$%�9ɐ�B{��2��e��x�S���b����:�c>���M��<��
�G)
�3.b��8=���߽�D��6Vo=^�t>I3r>��>��o>��W>qJ)=g�Q��K޼�
B��"d�������2��w���f��o��
+��OɃ��<���I�;+�<��<��;�w����� �ݼ��M:#x�I{�bS��)<�<�=#�u=!:d;İ
+<��<-1�<�C ;[�^�@m��^�^vT�&w����E����g7�\�f���|hN�w^-�kw}��J���IؾU��
+�ؾ"�����M��������������������������������������������������������������������������������������������������������>^�>#�>>Y��������>�W�>gj>4g=�c�<]�T;�~�<�~<�
_=Tޯ=w��<�=�<�
�=%�u=[�=4$�=Y�<�,�=d[<�<y�����ʼˑ�;�d��pE��ʲ��殽�K
+���ǽ����S
��kD��k���~��;9��)���5c��W��jӦ�w���
�G����ֽ7�R�;\ܼ�KF�
�O��y����	�nm���V ��y���t�����;�Α=�!�=�(7=���=�e�=0�3<��1�����<n ������;���&��#,��������;�X���ּ��f�N
�P8e��l ���㼠-&��W�Ew�b����I<�rC۽�
޽uW��U\��oqM�|
+�
++���z�������67N�(�w�a���v���Ͻ��r��
g�c�A���h��#��j�#=$*>%
�>j�!>��p>��>44�=5R鼜�,�-�����E���ޥR����� E�DR��G����=�:�ռ�a;/Gm=Ť<��|�
�ƽ%�� �T�J;��u�z˼���: 9�9{M8<���=r�=;��=
d�=%�= 
`;��ƼP���d�j���}�ؽ
��ļ�p
������*v�;�ٞ�b*������}��L}��¾�c�+-�����������������������������������������������������������������������������������������������������������������=��=���> &>$K>HL>�Y >�7>+&L> �κ��<�1<i �<~�<� �<�4|;�n��>��7*�;�<��#<�
�;���<��;�ki<<�<°���ټM:^��� Wٽ��S�����
����Խ��9��Pb��*�� =�
�ڽ��R�e|�QP�s�����W�m؃�
�ؽ%��4��l�� ���)�Q
\�� �}vͽf]���L.��;Y�f����[����p(.��&�;��(<ɔu<��7<���<�
+
+;%G���޼�ZѼ��@��l�*s��GJ��Ɲ�,f�E�����:�Y;H�	�f�^�� 4�6z� �н
ӵ�Zz��˽�u|�|
+���潛t�ra2��fU��;p���ֽi)���d��i,潘�q���	��
>��������զ���콗f�������L�'�W�F�~=�yE>�>J��>(�=��<�_��6�'ν�[(��I���矾�M��ݾO��˷����D\�P6��=�C=�ɽ
(6�@	9�rfٽ�ͽ�c�G��e�<
6�=8��=��=��e=���=u�k=D�<�h5;^͐���E�.����iz;��弫UF�1�v�[:y���輊7��Jy�@Ѡ����������нe\����'�v�����������������������������������������������������������������������������������������������������������������;�!�<|M=3�/=�tS>��>�'=�϶=/��	�
��<�sX;Ɲz<�����{��e�5�n��#ݼڴR�:����t�?�#�
+ud��0u�=V@;	i�:߉W��c��֨��$s�����m�2��ܢ��~:��>
��+὎
���y��g���l���Խ71����:K3�D�"�w�߽J��������A��-��^�<�?�<T?�9.μ����vh�HsݽF-1�
d<��m���dk�I�
���^��䕻������<9��< �y;�;��D�g��Q�<���
1�����E�v�
d1�:W�O�]�,T�< �X<�����	�Ytx��j��a�)
սr���igX�xZƽe4��f
+d�0�d��T.��۽�?���̽�e����߽�f���
+���bF��
轴d���k��彽�O��f���fdt�K�t�Ad<�=ry�=�W�>Lr>
pp=��<�T"�tZ5�)���e�н~����x��vj�aI�w�������Z��:��9=L��=�\=Ȃ<�!���庽���~㤽� ��>>=Q�Y=�� >%?9>:=C=���=�R=<�<�J�4����*���<;�|�;ִi�FY�)��? $��|ɽ��ܼ�+��\���l�Ľ����������˽|9`�pgG�������������������������������������������������������������������������������������������������������������������������=���>�7>5W=d�r<$�����ռ��<O����l��)�3���h���sh\��hۼ��1�:'�
��%Yý��瑸��l߼�k<�vA��D��C��TA�W�ͽ9�rs��,���	y���r��yU��u3
��U��0n�����)�B�
�-\
�P�D�I�F�0�@�7�����ͻ�5h;��f=��=wg�=�<0)��|!�5�Խh0�:]>�w�*���S��:��fw��m���"��
�7�p�	�L�:���:�S�ϯɽ
�%�'�`����G^H�Wq�"u��i�ۼ�:<hѶ<�B�<z�;x��X�!��c̽	�~������޽_G^�2K�G��!���9ތ���}���⽱�V�������W�w8�cR{��6����������� ��y|���콂?��Bq�����oö<T��=w`�>�`>��=�'�=��<הB;�� ��u�{���:�����'*���K��᛽��常�Y=�Hd>
/�>l��>h�>��<ڇԽ
R��̨
�A_<�?u�<D�u=�У>1�)>fj�>p��>d��>�=���<o
���F��F��; �Vyؼ�N�m'��C:ν��f��fн���B
�R�(�(��=[�����
��;8A�=;�9=��]�������������������������������������������������������������������������������������������������������������!������|�LFC>��>K<�=�Jr=}�N<�Y7<: "��/���L
��5�'N^�pyǻń�s����\H�Q@�5��Bk��A�R�4&�
W�t�G�VZ��
�������]�d���ټ�)ֽ;l���&�-���c��4r��q\0�
+Y��2so� �l�����q�
��PLZ�i�:�M�$����o��nN=
%6=�Dr=�F�=��D=?�n<[�"W8�&�E�8t�����>f���P[��jp���R��B�/�3�㴼�D�:�2";>��D6���
/�\i&�v2�{iS�=ռ�A��
�'*a<��=*r8=(
�<��;綺�ށ���̽F�S�c
]�3x����˼
s
�u�ڽ畽��P�T��%Խa�ݽ���~��7_�(�f�+�BVѽ��ӽ�����G�uK���q�14����<(=q��>��>B��>&\�=��<��;��ƻ���
� �&�C��M_��T<�D>��EO���p�c`U=��q>J��>ž�>��>��>[�
=�9��׫
�[�ҽ���%3=
@�=�;c>q��>��>��s>m~`>��=��%=?>J<��+<��<�j�+�����۽�Y��5��$����<��Խ�-S�z��h�_��^麶H	=[�o=c٨=��=���������������������������������������������������������������������������������������������������������������=�uW> W�>9|�>
�~>��>08o>!؁=�l=Ʒ�=(+�<�˃���<��<�r<5<���:�D��3$�Q�]�~�;���Ὁ%
�g.	�]k��hU��q[���y�Iwǽ[��)���"y�M\���A���1���;�l0;4�V�iE�T�o:�h�<U���m���νXq��Fr8�0���g����u�J\N=b�=���>Z�=���=��=��� [...]
�;�E׻@���Dnq�˕����z��=$��
�����ػ�l�>o>��?D�?p�4?`LF?��>D�;�sZ�%� }m� `=^��>��>h:>�M�>�s�>@�>�p=�q=+��<���<��=���=�խ<m� ��o�D<w�����s8>���x��i����'��q��@D(�D�@=,��=��
=��0=���������������������������������������������������������������������������������������������������������������>\�>e��=��>
m;>*�>'�> �/>X�=�U�=�6�=#
x<�p}<�m�=
=I��=*��<^�׽
r���]U����������D��_C��Ɔ���6�ԥ.��;߽�o��|�ƽ^製t����Z��|�9s&�:���;2�;
�P������B/<[7�<�I<�-� ��0�g���������/
+���;�<U��=F�y=�k>
��> �>		�=ﯩ=�g�=2<��<�:�o��ͽ
B-�>�h�4Q����Ľs3|�4��`_N��nv�:����99�
m�v�o�d���(pi;�x<Jq�=\Z�>��>H6�>6hI=�ٕ<��?�Z��m�
�0MU�V�b��r^����;���9��%�3���曽r�b}�UKC�������[�.q�;U
+�Ҟ��p�4�����՛�K]~����	�\<O3m=e�]=�B>%O>u�>�@�>m�W=�w}=�ܳ==b
+=!F�oӅ����"E���z:����8��
;���>/�>�G�?f�?�J?�1�?0��>��{=maӽ5ZQ�
+/���}<�o=ڪv>>\�>[>+]=��;=�a
+=�
<Ԗu:'�\=YU=�%B=�%B=g
`;�%e��z���<�u�
��"�����J:��zڽ5X׻{o=L��=��U=8T�������������������������������������������������������������������������������������������������������������>���>�W�>���=��=T9=���=+
D=��=��I=���=�C <�63�-��<V�`=0�0=s@=��<�,d��潖  ��� ��?F��p�������9���a���0j�� ���齽�n��_����:��j�;~�;;J�1�BL��qӻP5�:�e<ڶ
=Y1<���;�y������Z�2�m�����ڼ��K�>�<�O1=�B>��>/^8>;�>:�
>��=�v�=N5:�;��"��'������h��`�3~ӽis
���B���-�nt`�����k
+���ӻ�m���;�
�=~�q>6�>��>�HM>}�>7��=%�q<t�?;wT��p�I���ۈ-�"��;�����t<�H{�=~��
��B��w	���)��ܽ!��$6 ��*\�J"����׽}�߽D17�Y�<��r=
��=��>�N>6h�>p��>��>_\f=�:�=���=�~==+�<�4B<#k;1
";�@�<��&<�u;�|J<TF�>M�>� �?UU�?���?�ȍ?O>�"<�w1�������M���H=O��>
�Z>e�=�Q=Ϭ�=�{�<�
�<	j�]��<���=9c�=�M�=ڽ�=3��;�	e��}����Բ���G?��cZ��?��D��<xͱ���Y=eg�������������������������������������������������������������������������������������������������������������><+�>"�@>Kd�=�S�=��e=(��N��<D]�=
+Y�<
+*a;���Z�x�迼@@;��X=1;�=El�<�Rѽ!B����7�̏��̊
������=��	�g�N����̽��佇�n�*�
��9t�;���<��8=�D<\�<���<�J&=p�<ޜ=C)=A��=h�<���so��"�/+��p����⼙�8�P�<@�+=
+�=� �>4WZ>R<�>VU�>1��>��=_�c;��켃���v�ɼ䤍�KH�rO���8�)�½~
Խq@�f�8��K���O�t|o�
+��;A��=r�k>
}�>���?
��?O_�?�>��-=��<���<K���4��̂�s�"���<��<��=��;�ڴ�m:��rm2��1R�����֓�
��r�ŽK
+ǽA�?���B��V��������U<�@N=;�=�m�>
�z>3�>f�q>l\�>
�4=�4l=�d�=N�C=Tg<�R�<A�#<6K;Ɉ29r��;�#�<��<��9=���>��+?	�Y?0d1?8�
>��=�c�:���OƧ��5��p
��K0�;A�<d7�<�	�<��=;0<aZ�:�;���;�<һC=c��>��>;��>�
<��
�	�׾�K��*ھ���NJz���n�V��_���%U*��8��'�>�X�>��=>�n������������������������������������������������������������������������������������������������>3��>��=�'q> J�=y�4=��d=|�<�';�<;���/������$x
+��[E�����q<)�k�� 8�8"���u���3Խ�Ud������B����
۾�~��t�!��T����<�
=��2>9�>
��=�
+�=���=�2=��=a�=�'G=/�=1��<�<#�׼@�>������ׯ��� ��즼�I�?��<}�x=�uQ>
�g>F�u>W�>)��=鯆=:�T�����
kʼ?
�Wf<
`�<�e;�a\���~�󚂼��ջ� <N��<v���.�7	�<��T=|�L>a��?�h?�]s?�oI?��(?K�>NAL=Z�H<��A;�i绮�0�~쨻�ko<Hc<L�v=�<o�i�W뾼���iM��� ��ŇF�R%c�c���I
����j��Y?����:��;t��=�=���> �]=�l�>-}�>&��>
X�=��=�}=
G$<�(E<KnO<��p<�v[<���;���ڛ>� $�;3o"=C^~=�*>|�H>�[�>�?5>o�=
?����z����i�v=3�v)������h�x����P]^�q󯼉ɴ�D?���;��=`=�O>/�V>j�>z�=�Nj�����d�W\��
��댗����Hg�t�)�a�-X��Gjy>QK�>x�>t��>����������������������������������������������������������������������������������������������>df3>3�"> �X>��>@�=���=4�u=j<|�|;���H��cᴽT1����rH�7T8�ܙ۽
���Q��
'佌$��gb^�����"��oF��si�ح;���3��w�����^�=�
+�>.d
>ig>P%p>/F>��=�<C>p=ɣh=��=e��=&�E<�Q�;4O?�1�5�)�u@��:�ؼ����������9�;o��=$�
=�|T=���=��
=� �<�q4������}��D��<c�z<�5�<O�;��;�		��jp�(C�<|?�<6�5�֋�<
�<�Xj=��\>�?%1�?�m�?�W?��q?8
=>�X=��d<���<B�һ����$9����;�:?<CWg<�NӺC����1ǼH���~ۼ��ؼ�@�
��
LH�ɓ�;�\j<���<�
�;��຤� ;(��<[n�=`;�=�~�=�'�=���=�p!=�z�=�8�=�N$="��<�eh<�18<�Ă=54>=?4T<��ͽ,�p��
G0<�O=���=�o�=�֏=��=����½�o�m3���ʽ
;
+�_��k
L�B�2��&�;�\�
Ճ��J��U���q�;��
=Y=y��>�`>T�M>b�>Y�
<����d+,�&��]b�f�a�)5"��#�*w#� �ڽl�ؼV�s>��>��w>�e>�����������������������������������������������������������������������������������������������������=�i=�7@=�]�=�*�="ɐ<ö�<u9;A���m⠼<!3�u����8��=��%ٽ�̼�”�����6:ۣg<zY���
��y'Խ�ZĽ�>C��2��㛽� {��޹=3�h>~,>x�>�
n>|�x>U
r>.��>;��>K��>H��=�B=l =�<n�&;E��� r��J����C��N�������X��v��"˼��R<
`<�U�=g=jqo=^HA<~2\:�	8������T�<�!o=�w<�-<��;��ڻ}�9��<
�
+;ա�<�<��
<w;G=�>Q7T?�`?��t?���?��4?8w>��=2^<9�< ;�Q鼬�_��M;ނ�;x$���8�����Eʼ��.�)�%�,�8��g��S��t����<H��='H�=݆<�_�;��;P)
;��<
��<y�c=f��=���=v-:=��D=���=���=5t\=D��=�S=Ta�={��=p��=/b��}��P���
���d���"g"<�A�=��<��<�Ĭ��Q����ƽ�M��RPν���-
��a
�
�ٽ=���
m���ʽ
a
��r��f;)Í<��O=[i=�M>
�H>4@=�Lo;�⺼9��メ�N`/�sT�Q���<þ[!9�v"���f�g ���������>�6��������������������������������������������������������������������������������������������������������=�f:=�
;=�]<�1�=[��__�����+Ż��ܼ�K(�= [...]
+>f�~>
�R=X��=
{;�6�;�
d;ɦ:f1��͹�����7�ںѼ����i�Rę���7:��1<�{�=.V3=
=�<��\;�ݳ�G����WA�}s�<�*<�=!S=�/=
�<���;;c�;�P�<^d�:a�{;���<�
+�<�"�=��W>���?��?{�?<��? k�>~t�<�l"<�;㸖<6 ��X	��Qּ
i̼lrD���^��>�
�����y�
6���8���6���
ry���*;�+�=D�f=�^�=r�(;�H��[�
+�� X��9���43;�p<F�<���=
à=A#=q�Y=O�=x�-=��=�>�=��L=�	�=1p�<	����
�
+ѽZm���h����
Լٷ�w4���[��LlȽm�:�=NL��c���dE��d_��Lݼ���=���6�1��ۼ�0���o�Q�<�/5=9�)=��=��>��=/B<��»�<ͽ&Q�
�P�
�8���J�"�o?E�q��i���g�>�P�v�E4W�F/������������������������������������������������������������������������������������������������������������<��<�
�<��e< �e��������e3��
:�a�ƽ0�e��=�eN�	����;F�<�6�=��O>�
>
P�>��=$]X�
���'��{ ��_&����
j�=L5�>4=�>�X�>���>�~>���>d��>M�>H�>1κ=�nr=x��=k���G���W[�<@)����'{��B���
H�<�2� "��G�t��%���Z����l]���sJ=	.�<�i�<�	�;fb�:s��;8�=�=,v=F�^=���=JR<��*<���<��E�3���9�����M=J�<�˫=Y��>b$?>�X�>л�>�^�>Y
&=�[C��E�����p9��뻵�Ļ�Ԡ�YRv�U<�����0�W�m
D�lB�S
��䆽�0N�+�?���/���L<de=�Q=���=��>;��n���|��}߼�竼ۦ���ی:��h<M��<V�T<�	�<�DB=�S=�_=�ר=��V=w�u=%@
+=\<VIn�	f��vv�eK�H䫽!�ܽ.½_����&���нs���{���S�3��Ѽ��!�6!��v���#r�k��-�`�*�
��gWd�N��9<��<P�D<��=�en=��<��/<ȳ����^�M�����C��� n�P�7���*��}��GO��I�.z��%ܖ������������������������������������������������������������������������������������������������������������=�1<��<
+x�;>�$�
������:Y�����GH��;b��a ��?}|�&����{��<���=�_�>[��>@�i>�7=}�r��ی��ֽ��)������E�>q�=f
+J>7�Z>�0�>�Y�>�i�>�h�>��s>N7O>=7�>
+ �=��
=j��<���B�a�	ᠼ~�ּ��ν&o9��^���`j�O߽n�V��$���	m���U����-�.����<
"=�U=' �=��='�n=
�<�ʦ=-��=��N=�*?=n�J=*f�<`����ּ�Eؼ
��;1<���<��=�l=�b�>%W�>N�>0R�=��c<�8`�
M�W��O�E:�
�<f�:�A�$9���x� H��D�����O���A���X���3ʸ�k��,q�:Q��<�=o��=��-=���wi���D��Ï���
�����3��` ػ�!G��`��pu;�d�<��1=,ax=�f9=��|=��:=A��=
+�w<pa�<)�������� ��r�ɽ��m��!ҽS�转|�����*���
cz�
�G���4iǼ�W�j_ڼ���?1��"wV��7̽�[�Ƚ[ż��ѻz
+�:S3�<*�;�P<-�;�̔;Ɇ��B8U�Λ��{����#���������ଽe���)�
���-㛾6i
����������������������������������������������������������������������������������������������������=�t=��^={,�<��k<��<��A�Ž�
S��������i���⼋
b�6��
(��4�y�Ѵ�=��=�nA>:Ȩ>@��>
+�W=�U��Zp��.�������n������|=c�>ҷ>~/>��>�c�>��i>���>I�=>�=uL<�-�<�)<�%�X��_�g������:��R:���&�}����t#�R����d��*8��V۽z4��I� ��⹻W�=,}=Z�m=u=�=o�,=qW�=C�=�=��=c��<�Dh�Q�鼊
�
�ýE}Ӽ��f�[f`��
�;M8<@��<���<4t�;�
0<��\=;4</����8�O�������o[��d;<8i��l���>��^�� �]_��?M��j���="_� �~���&�F	?:/,%�ͅ�<9��=(A�<s���С��������P� +���[���c�e��C����ڼaV	�]F�<�i�=w
�=��K=|%�=�X=d�<c~!<
�;�%���˒�����?��,
F�or���m佤%��s����G�ɽw
+�N�̼պK�����ɏ����u���2���-��D�ڈ^���ɼ���*ש;?�Z<�>�<��<�A�<��<��?���Z��ꆽǟ<���
���B��兽���e�Ž�ֽܓE��ju��<�����������������������������������������������������������������������������������������>����������={��=4H�=MK
�%js;��=O���4�Q�g�T��?
��9�*~����5�
;��Mד�.K����="^�=�"N>Ir>$��=��"=&�ͼ�qO��ǽh �_�����}=u S=��
>J��>�%>���>�iX>��K>D�&=Ͼ<�5p��)��<�< 4
<C��<E�J:֥p�
���n׽ZY��oIؽ@�ֽq�Q���
+��>ڽj_��u4���9�$�=6!=��=�`X=���=��z==��<��=	��<�j;�nc�-E��y)�
�������m|���7�����% ;���<�
<���e�����:�T<�S��Tl����Լ�GN����;��:���^>
��^�B�	�Ѫ�>kK�/��
*/� ��P�Y�ܬc: �+�����J��6���З��%ѽ$,^�Y�N�8Z2�<c��#�R��]��9w��,p��֡��?ռ�Iټz��F�<��=2��=d94=��=q<���<"�!<�%�<q���z�n�	G�)j��Hf����(��#8�o�޽
��:�Q�{�Hg<�ܼ�|޼겑�B_
�HX�-�>���A��U�	 ����
�n�:�g=<��=t�=Q�><�*+<]����}��iֽa/��W�<��؍�nJ�
+���.G�������˽������U���h��������������������������������������������������������������������������������>��=�a�>
R�>*(-=�$�<��A<�����yνJ�i�V���*�h�*�ڽI3&��Y
���Z��~�-���X��S?Y�'߼��;���=�w�=���>��=��i=
Ӽ��׼����'���7{���3��=1��=���=��>18N>YJ�>^�|>Y�F>0™=���<� ��kg�/�ۺR
�<���=��=&<1笽<I�Fcd�N�V�b
�u-��`�׽o}Žf��67��%���|��8(�<��!=��=���=���=jW�=

�<#�<+*:�y���u���4�KR���6�S�;۸�����������h:���;�M�<Ք���1; m]<��B<���;��F�o�m�#m���u�� l��W��83�u���v��6��2�R����
S���7:J��<b��;�xk;�b�`�r�����\��;��pe����M��};��H˽���ͬ���ż�m��Z����P�
�d�ٮ{��Ż��;�\4<���=0_=
Y�<��^=D�A=-%q<�ɒ�eX޼��&�
���-�6h�����^�@�
+[������U
��.꼦�漊���H�����F��!�>�����ݚb����Z��9�N�r=
�=qVg=��e=D��;�n콟����
ƽ���eJ���ս��7�!H��%p#�
+՘��|��}/��O��E��������������������������������������������������������������������������������=�R=�3T=�k�=�+ۻ�&�Yo�X�E��,8�ӆ��2�����ܼrg�?_��(-��4Ё�&97�Y"w�+CF�d������ͷ�<k��=q;�=�B�=��
=��<��
��6����7�����9j���/��~d;�$�<�
e=521=�c>=���>
��>
%a=�;=��<4�o��4�t���B<��=>JA=*%�<�,A�����B�M�+۽8~4�y��q2�8��SB���)�IƂ�y�U�+�#<�((=�Mb=��=j�"=+Q
<��g<-W�SIμ�

�o��9��1u.�r�R���;2+-�y�f��}��=�
n�;��]:hZ <a��<�9<���<F�9~
�2
Ӽ�zT�
�%�����ͼ�p��{�ü��x�0���"�׼�I7�r���d�;���=7�]<�N�<�͹�4����ʽX˽��!_ս>�3��Ӈ���齋���
���2�	ݽ<n�4���Q�.�
��tA�
6���B�˰���<ܷ=9��=��=��=�

<�,t:��6��
���y�������ټW ��݊j�H��

ټQ��d���,툼L;ջ�D���������Tq���5{���T�|�p���������
:<q�g=���=~F�D�~�2�۽�ý>�
+����p��x�,��
k��Ƚ�i���ٸ�ϻi�t���������������������������������������������������������������������������������=��=���=Ŵ=��<���<^|*�pX
��Y���V���ag���<��c�
�Ѽ��ǽ
��mr����ɽ��k�"�
���;i�D<��=O�/=�07=�:=4��<A
��u���|J�M*�����c�
�N�x���-�Y�]�f<�F<�� =h<��*=P<�3�<7
���eA3<�f�=-!�=g �=z��=5w�|�U�����?�j�DҽO��0,��5���IAɽ]y��#Ώ�I��<��<ʳm=uߊ=Aծ=
y<��K<
^�:4S�)D���b�`H��s��vFP;p
ۻ�E��a���X-�jg
�@�û�dԻ&��p�T<��=<�3
<�e�-������1���E�/����V��A��Ȧ����	����١�������:�;n_�=*;=.;
=(LZ<�q�D��l����S=��?սQ����B���Ie�ල$����ٽ-�$�ޤ��TXG��2�0+>��+O��p���ּv��=
+H�=�/x>GK>l0�>d�h>y�=N3�=,J�M+�������
ȼ~������&"̼�7����׼@��-����0��Y����u<
~c����R�-�M+��p
�J5��*�Z���<�<sH�<��G��{�<H�NEAS��
��~��6a�>�޽�&�	qX�݇k�יܽ�l������������������������������������������������������������������������������>
+2�=�&�=SC�=]��=@�I=MŖ<E)[=M�e<�眽*ĽSڞ��u�� �n�K>p��q�R�[���#���K��/`�#]���<��M<c�=4�h=�\�=X��=�<Iػ���!ӻ�fm�4züI��%��yY�,E�r�:ǀ{<L.9<Uӹ�qE8�\�F;"�u���r��BC<���=_P�=��U=���=�-�=�I�<5e¼6Z-���o����ؼ�X�78̽;ɽM�A�
)�����;�^<��<��<��<փ�=�<���<��2=5<�=:�&˼����ۃ ���E��	���q(�����������^���2�l�`��D��@�[��y�<��<�K;��c��aͼKŰ��rB�W�,[���
���?,�����J���f�
�;;ř;� <��=X/"=#7k=
��<�H�����������-p���2���]����e|��j���0����D��W[�� r��h������	��gL�������|��N(��j=�g>
i>�u\?k�>���>��0>�d=#�T;?`T���6��"��Nv��X?
;�����񙻼�T�s�w��>޼ ໜ(�(j��y[���W�1W=�b/���]���>��_~�

�-�n;�F<�묻�K.��5
���k��XV�ԝ���ܦ��Y7��)�"���4����U��B	�
����������������������������������������������������������������������������������>
+�^=��w=�p=_D=	��=B*=��=j�D=�޼�P���(弒mӼ�^�MhX�X"����d�ҵ ��轧ŷ�f�7�0��;
5'=97h=<�9<wi�=/R�<Ț<���;�q/;q ⺸�~������B�,нK�X�I������� �"���>��U}���ν�����=���	��=iv=���=�>)�=�
�=�>�<�R��D.���鼊�e���4��J����Ys�kU½
'���~�Z�6;K`g;��W<uJ�<�<���="o�=`_�=j��=S�=�ԻÜ!���o� f��
+���z�ў��?�
G��*[�2���4I�!T<r��=.�=Ht<=ӽ�(G�7�����+�Ž-<>�(㾼�k޼�N���3=�@�;�
�<���=C˥=Wq�=z��=���=���=
+ <<e�x��	��޿�{���ev�&	ҽ6���������5켾^���$��
��������+��q���Լ�:һ�;� �=�>���?�?5�9?=�K>އ}>W$z=��D<�>��D�뼮��v�_�T�Y��`#�F{�X�Ҽd�����b���F���d;F6��eR���Z�V���<4½����y��m��
kb��G;(B�yf���H��[���+�彦X ��&�����:ڳ��
�'�S��D���ٽ�o���������������������������������������������������������������������������������= 4�=��w=�X
=��;�O�����=	��=��<0I���h��m�<�#�<��k��
�
K˽�ﯽ�����b|��U:���,����<3*
<>������-0�<�q:�Zv�����d�⺰-�:$fl��1ڽ��M�;ut���S�e]��7�z�����uw�Q?����f�9s%<�V=Ye�=�)>��>��>1�=���<my9t9����m����Dl��\��]Z�E��AL��f%�_�Z	ʻ�M<�m;Ҷh<"}�<��=KtK=n��=Pj�=x��= y<��w���!�
(�LU��pdּ������R
���?��?۽��;���=P+#=�
+H=���=r4'<bD˼'���O,��֍�&Ѽ󉀼� K�[z�����,�G<m�a=i�=��=��)=ߤ�=�H�=��=EQ<��[:_���0Oļ�aP�m���
�(.{�kB� D��О���`�$u��4�A�Ծs������_ѻ�>9<&�<���=� �>��?g�?J��?I�M?	�>|��=�]�<�im���*�'�s�0��������bL� zl�VV�yv
��E�7�ߺ�h׽(P'�
U�J�'�
�#���Ǽ�w-�ut�	�i�%Y���?�����*:����AҼ�=
+��=10�=}0x=i�O��9��󝤽��ǽ�'������������������������������������������������������������������������������������<Tu�<��{=h�[�&�p�L���/u�<����̽����gH<�c%<�7v�$k���W"���Z���x���۽Pi�kȿ��G���n�P�ռ �û�'�{M�_�|:�뻴��
΍������Q�]=4�Lv���yo
�y֫��_����<$�O<���<о�=�=[�u=��>6�>�=�i0=Wi�<��
�)�7��m��]c��̍��Bʼ�/��2��|
+���Լ?96�N�#;����*BK�3{�<
q{<wf�=7��=%G5=�<�>�<��+<
}��S:ъ��w��2[����
�ܽX����0Ƽ���<-��=��>F�>�>A=
�m�E���������3�֒��h`<�K;�Ӿ:
N;���=j�T=�d�=���=��I=�4(=�[<��<
S�<*u�;�{�����J1
�i/�����ս8�A�4"ٽ	�ڽ.'�3�Q�F*h��Tw�á������ )<	�"=��=��>���>�~f?&[�?.B?
+lU>s]�=�-'<է��0^]�x���C��O{7�!P�)����������<NX<r<<��;�"׽%���yz��Pm�)�ż�P�;;�l�`$ҽ*#���^Z�/�νT��Ph��AT���Ɵ���
;�<��=LW�=9�=J��������������������������������������������������������������������������������������������������=:��=!�<Š���9Խ_창fp�������߽B"��!��Fֈ��OŻ]�[�GZ��Ь�?c��}_�����Z�~���m��>�����X�����
@ϻ��\�Tѽ
+�*��4������ѷ���
+����
�,{P�[�!�L�}�T�r�[�����W%<���<i��<�
+�=8\c=?��=j�4=�V�=��5=�#�=��z<�P8�15��7w�b◼ʢ��.D�H8���>��遼b����D����u�:�w����$��Թ�ъ<w�1=
�5=.6<�5i<1�h;���;�_;�^�</�	<:��������)s住u����o�fߡ=QF_>�>,�>D�N>]Q=?+���db�������.��ʂ��"+<D
�=��<��:�[�<�S=p�=���=�
8=�#�='u�<�l{;��0��;F�1�� �H�D�<YO<#!�<Auy:���M�ld�� ��0���5��.T����t�7r�8��
�;��<�z%=#uq>8
+>��5>��0>��>��>)�=>9��\bE���
��NC���P��~����`�绤涻��P<RO�����:{M
+���>�߽5���u~��|�a�^��_輖2Ҽ��U�`
+�;�<��<�A$=C�=$�<��=�=H�4=C[�=K�}=)Ɨ������������������������������������������������������������������������������������������������=1?�=E��<�ys<�Nٽ��n�_�)���|9���
����%�]�켁���������Ѽ������ν�cu�7�W�d�b��
G���,��ܽ?�(�8����;�v�i�ڼ���dݽU��X
.��'&�zj��:��
7��:h�3��'pp���ټE����;�y<$i�<t�(=~=()�=r��=��=w�
=��;�o�)�J�J��m���<8��
~���޽�t��2K�5��?�����'�k�ּ�;F���p��a�z�!;���<s�e<��5<���<ي�<�%��;�-;\�;����n';<�;�q� �(y��5d��Y�Z��ZM=�o>�a>+�_>7�c>
�=��\��Ƽ̮��6�Ȼ�? [...]
+�@�<�/aϽr	R��51��0`��������Ɖ<�=x�<��S=Lt=��C>@U�=�ݺ=�"�=�Kq=���=���=N_������������������������������������������������������������������������������������������������=_��= <��<�5�=���"�
;I�uZ���K��
�t0U�` �9�lI=
ju<��ǻ��ؼ�y½'�c�N���J����KeŽ
zL��Ի�4W���2��� ���|�7��O$���?�|#��`ܽqw`��U��,M��`ʼ�cܼ�ZӼ�E��]�{��R

;b<�<�
�<�KN<ͩa=<��=3��<�o
�
�)�3i�N�P��Ɍ�Q
=�5�N��������=���j��gF��l���s��6��Q���c��! ��v:�c�<��b<��<�<;Mf�;��m<���<�y�;,~ƺ),�����:��Ի����K�D�U:$�0
�;�
 =!Ҟ=�jD=�W�=�Ι=��< Gļ���Ӭ?�
uG���i<<Rd<�ï<7 at t��(�;��<�%�<�{)=3�}='��=ܷ;��y�'����x��A���8Ժ�ct��S
;�7n����NzB�_���Y�Ӫ�;����7��M�0��[Lz��<9�;�|E<n��=BU=�
D=��.>
+ e=��=r�d<��y
L�aW��罼ɳ��
)�	����=G�z���K59�����N�K�ͽF
�
v��#a�%ɛ�������:����Ͻ
��:.��<�y�=J)�=��>^�>Gn
+>N��=��=���=�sl�a7��0k���������������������������������������������������������������������������������������������������������= �='�:X)�	�&���@�b0�L�4�ON�0@��
�=.-�=�3�=wr�=2%~<u������$ m�
���ֽ	�����st�Ǡ3�^�'�Z{
���:�������<]�4���e�8�UWP<f<��<<�i�;��l��>�Θ������/���[~�ԭ���X]���̼>�<���<��D<�B��,ü�x�r�f��e���6W�.�ټ���\���=_
��o�;�Ҽ�ν*<��Z@��\�ἱ(��
+z�,n��g<�J;����
��R����a<Pm�<���: 朼6�a��
W<z�;��6:�A#�
+E��a����A�,X�<��|<�&=��;�ӈ�@RO���˼�yμ�����D�;�
<���<�8:��o<��<2>�<Q�<�^
=�D<̚^��&_������`;����;ݜ
;�����H��ϼ��1���&���Ƽ�A���꼫����LDz�M���j[0��#ֽ����/9�></��<��=;�=��x=���=w�&=:mQ<�0P;�OS�C����Y��C
��/^��$x���������X켄
Ӽ���
ܼ�:(�N�F漂��p�{�pk��W�������
+��-�o";g
�>�:>�>���>�
/> 7=��>
0�>7
V������������������������������������������������������������������������������������������������������������=bi1��|���N��yȼ�/��T����̼��i����}\<��=�ȏ=~�C=��K=#O�;�
J�2L���*H�
�<q�p� P ��V0������lu�uS��D�<+�{;�@ ��� 4��g_<=D�=\g=�"x=��==1<���M����8�������YE�i^��go���Ҽ
+��<&��9��I;
p�;g��ݺ�1����� μ�;���
�:���ۓ���~��񼼄ݽ`�
�S��@���F�ջߨ��$�d��-ʼ����M%_;}<2h�<�� 9�Oٻp
;ԅ#9̐غ���:�׶�
+	�bZ� ��ۉ�������/�
�Q�3����*������@���`������<�fj<��*;@/�<tN�<�z�<k��<�$/=!8
<��������!�����M�<��;��j��ü켐L�;�چ���u������!=��x�f���LA��>S��)���`���y��I�<;|�=a|<�<<s�= �=�-�<�*<�yn<'�;����+�|�
Nӻ
�ϼ�F������Ͻ��7�4��J[�R��ׂ���
+�a􉺋�_�G�㽔����u�M�X�*L���}�l�˽/���,�=���>�>=�V�=�8�=���=��P>��������������������������������������������������������������������������������������������������������������=����Z
ý:�e�9�u�By�<F����
+��O���NP�xHM<��5<�-S=g�=�v�=8�);��_���rr;���<2��DF������։�q�]p�:�n<<�
L<~l.;ݨt<:�<�%=�P�>e�>&/�>ܜ>S=���;�`�<�P(;ݦ���c�Zr��v�ս@ނ�����b�;y/�;���;b�^;Pk<0e�;
��x����ڽ4���+Ҽ��ȼP�<���w��M�:�ؼO-G��
���6
���^�F���i�ּ�D�
���	���仄I�<
*�;2NȼK��3l���V;��
�rWf�bC�dۦ��~�T
�AԽw�H�
�ǽbtĽ)�/���Q�<�9�Z��;���<{�=<���;`s�<�w</"�<�p�<���<��z<��=
+�=F
<S*���g�U���m�*{ֻ�p��k�a���Y���w���������:
� 㼢�
��'�6����DU��;����h���4�Z�a�!n�;ɹ�<���=0�<���<*��<Nv=+#�<�<��}<
�<;d���[�%żzO���ļ�����y�H��D��Yw�F
+�2�A�����<�#�-~0��ڂ��)`�pA�������?@M�v�e����=R��=�Q=�Rb=ZMm=%s)=�r=X�����������������������������������������������������������������������������������������������������������������=���q�+�x�D��+��<�P={�<E�H��L�=0�=YG1=c��=@=��=
�1��Bü.nd����:�(9��[Q���b��LY:�s$;�j8;���=
�f=
��<�ų=-D=�|�>
>{��>�
�>��d>oH�>)�=�Y=bh_=�ּI�E����*�K�F���!-x�����}Nm;\�:�Y�;�I_;�R�;QFĻ��Ľ
xj���!V���~<�u
¼ 	���:���;:�ߴj��������}u�ۯ��
+Ǩ�%��S�u��Eo�b�
�@8�������糼��y;
��<7֋;����b=@��>���	ɼ�5_�
S
�wOU�O�����������ۼDq� 
O<Uʵ<�
<˝t<��=�<�H�<�z�<�n*<�>e<�m<�׾<�
w�t �����{H�Σӻ����n*�D���
+�,�8�_�����y���a����
�R%<�ߴ��篽@6��'�&
A�r���<����<$�<���<��׻�&+:e�A<��<�Ea<��P<�H�<� 	<�3�<�<��<�
<�~�;�\��'�)�3-+�>H ��G��V���u�K�
j���+Չ�O�;�J
�~A�n}���Dm��ܤ�
��=
�j=p��=4k�=?�3=*I�=�K=a}>T?���������������������������������������������������������������������������������������������������������==�<�����T��!�9�F����<�]=#t:�ҼeZ/<'�c<�D�<�2<�uB<y��<Č-<�-��tt��#���
Ӽ
/s�	=׼hȕ;�J<;���<p�=3�o=3��<���=�
a=��q>)c�>�:�>�Y:>�>�w>Pl5>I�=�m=��%;�����P���X�M�s��V�y��j���ȼ�7o�fm���:c�|�懽 <��H7��n������������c�;5�;���;�d������#��o�&.ܽ&n�- �P-�j���E+�����
���U�$`�;oЧ<F��;��[��$�]����#��yO�_��7U0�~'�/���d_�aĒ�g��;�\�;ҍ/<�ɶ<�||<�Q�<��<�%<+YQ<��<�P<�1�<�y_</�;
vT��o����9�;�仵�ἭqK��CP�����`��j����u��ad��_��s���Q�Rq���5&�`�w�M?�O�[<
8�<J3�;�G����
+;f���;��<���<У>=^��=�p�=ě=@��=F�
+=P��=V�����J�m�����x+�7}�Qۼ��H�n��وA��H��X<�H(�Niܼ�ۿ��L�<�=�=�<�,o<9�p;m��<���=+��=2!���������������������������������������������������������������������������������������������>��������������=Xs=l

=M��刅�X�L�%�j��<Fm��'Ӽa>}���6������"�A�����8<��_<
�>��<�W����
��h��值�ke� ����1�.��=Q�=D�W=pj�=��m=�$�>Tf>���>�0p>��K>���>lQ�> �Q=�.=��<�w3������5ʽ�')���޽ipɽS��
�S�&���;�z���C���U��w�Ad��L)�`T��mɽ 8���_��N��;���;:�����tz���{�(O�v�I�O����g�r�N�h<���>̽jZ�2�M��ۼ(�M [...]
+8��yQ��ý@kG�K�_�-���9�Ͻ ̯����ANo���G�ds��A����SҼ8���U`��1���;
�2
+^= JD=��=���=�;=��=�H�=�V�="I<���<���B���HX�BT`�v��
$�H����(ỸV+���t� �ҽ	�@�
ѽk����'���V�"�$=�=�R<���<�ŝ<���<�[�Y������������������������������������������������������������������������������������������>���>xE!>�_p>�;,>r��<�sg=M~�="ʆ�����ʽ)r���	��k���E����;ܩ��!s�خ)���s��1Ҽ�����ƽ,$��cw�8-��T����
��2
���G�����y�<��=f��=�y�=�&=���=�|
>v��>�|>��N>�1>��=���=��=��><�����
l���
Ƌ�:퟽�-ڽz'3�\�B�tL���\��H�#�/~���!�Q
A�x�3�P� �F�$����
�ռ<;ؼ�$�����N��Ʋ/�#V�)3�O`0��z��
�=�E��U�3�O؆�7
z�
H���=*��)o��v�]���k���e����$l���FsĽ@8��A~��;��
v���-��V8��;�w�<��e=
T=!�=ұ<�}p<��<S	;a"4<��6<��=
�5<m6�:�
+����
9s�a����9u�~ِ�'ȣ�9
*�� ���ý
`�.�ܽ�JU�
5��E4ʽ$���ݽV--���������,K���@
�c���
+q�>gܽon�
�<'O9=��>>
�y>,�>��=�:=iΝ;��0</�t;����SN��e�.�=�'�QƊ��M�7�,����;������I8�.�O�`���z�8��X5�)
�<`G<��= t�=H�> 
b>q�<>:������������������������������������������������������������������������������������������>u�C>q$�>�`�>t�>D�>�=��:=H<�;�8Ѽ�_���@�v��������6���~�m�p�	��v��F��넴�
Q
�0����K����e�m��h�F�Ro���g�l���ꤞ�r;�<��w=C�=4+�=3=h�=�xI=�Sn>W�U>2�1>�=���=>��<�j�<��,<C��
N�����5,ս({ڽ��C�N�^�B��������𹽨�Y�WlK�\��sg�k�n���p�GH@�#�̼��Լ��0�|p��
��7U��_׽�ҽ(#�4
&���
�2*>�Y�}�Q�[�Lo�N޽^N�Y~޽ ���
�/�
�J���	���;:�����}���
)�@��(j��c~�6S��7W��쉼��W���f�"{�;hI�<���=!
y=4 =��=
Sq<�U'<����	<jI<�i�<ŧ,<���:��3��/��*"۽Uz��xH��f��N�P�k=��
h�B�ɼ�썽H!�qiV�F8��ҽTJ���b�q[�SF�
�ҽ
�ż�8Z����G���6�V��@��.[�/Z=��D>2�>g�>D��>
+
q=��
�.�e��$|��q�;�A�x���u������� ��aV��3o���L�~֡������w
�H
I�/�,�Z_�7��<��Z<��<=��=q�l>�>��>5�n>��\>�q�>֧R>�n=����������������������������������������������������������������������������>6zZ>j�e>|� >j�>J��=�p�<��L="k�<�6=&�	�\0����E�
+ F�+�1�D
��W
�9
�ӗ���)E����"���e*���4������c
��Eҽi
��Ӕ����
��X����<V�=
�=$6=l
<۳�<�q�=
�'=l�>=���=��C=�;;�P�/�,��>��&���Y�G�Xѱ��ٽ	'�r�c��J|�������B���ý��齒���l�ֽ�D�l�ʽRv��������z�����%9�e��B��uW
��*�X� �
]���xȽ)c7��I��+�y$н
+�ѽI/b�n�ɽMk�!5Ƚ�
��I��»�演簽�w�
��}8Q��'ͼ�Ǽ�
f����u��v
u;��<�L=q�<#e�<��+=ҥ=

�=37�<���<�z�;��~:yY�;�5":����)�*1J��hN�}� �f�[�X0��/���"�z��Q���_PŽm�򽖰;�`���X �=J������,��r���ԼS�u��
>�Z�	��x�O� ���KG=�^x>:��>Y��>9SP> �=���Bu[�|*@�{'���zX��q&�ZL��I���°��I������鿼����R{ռ^�y�5�G�s��;7��;�%\<�|�<��<�+�=���>�
>'*f>]�w>��I>���>���>�������������������������������������������������������������������������=�\S=�l�=�<5>��>d��>A9?><Wl=K
!<����>A���6�q������	�x�
�9нb�� [...]
+��<�%��������ֽ?9�fr�]۽a-���
� �}�U�~�e�ܽo~.��W����o��Ҍ��"��2���߽��ٽ��O���M��I����S.����Խ$��
���H3�99�����va�!�F�����Ŷ�qw��ӄ��ᚼ���r��w���^��+���ʹ�
�9�" b��0�RXؼ�j��rȼ�漃*��B��������u*���`�u	
<�=>y=
Q,;G��<Re�<���<��/<���=Hݤ<���;d8���Ho�hk�:\�.���%�g��X�wؽ�\
+���=���
��/M��r
�P:P�0R�r^U��嗽�5�g�۽B�
���Ż*|����G:�Z;���Vm<��a��S=�����
+�`�ޏ<�N�=��\>�i>/��=�k=�
�:���4C��x�����<�E<�o�=7E<[hֻR�a��=�&z0(ɼqe#;��=)4=*a�;G����3;�q�<��
+=�t=���>��>G8�>|l�>���>®�>�1x>�c�������������������������������������������������������������������������=�mH=�v�=���=��>B��>AL>�A=�'<����0���x� �
�^�!߽����+���ɽ�����W����
� ��!x�q�����}���j����`l��Zw��"��I^��:�(��k���D߼�Ț��?:
�r<0�;�ru;��";�mк3�,p���M����<�C���ලoPp�J�9��#H�Np���@�
+G����@��W���� 'o��!
���
�윲���E��	˽k�ڼ®�s9	�vͼ�K��R'��I��"%`<
��9M�R;��<��"=�T�=��<���<O�b<;Ǥ�<j��<�úC��������#�5������
�����
}�)�u�����<�;��L=
+c�;��F�[���>��<,7.=+u�<ʭl��^�9���;��<�ƌ<۝�<�\�;�.;������$�V;�.H��;
�����AZ���ܽl�ݽ}
+�a���:ƽc�-�*|z�U�p�gd����ݽ��㽓�.�SA��vN��
;��J;��C:��q�T$�`꼕ȴ�;ؠ��.<9'�<�<:=[�v=�(s=¹H=��=��a=gK]<�=�<�:�= �W=75�=���=�9�=��;�KҼdh.���֬P���Ӽ��=Ɏ=�n;�Ta;��;�Z<�h�<�
<0�>3�/>8}�>��>�rH>��4>��>�m�������������������������������������������������������������������������=�;�=���=��@=�Wc=�?�>-1u>
*�={"<=:�����C�(�����@��
��W��Z���]3�����]��G�̾
�N�#��.H��D漙T޽F����6�����`����Q�D�ϽaL�;?}��7����9-Y:��(;�	1;��ƻ]��;:K鼢=��3?G�)3ѽ]���b
+���
Ƚ.
鼬m�;m�;�L���9�$?l��*m�����6���
��r
��
��J���sٽ����

������ƣ���b�
�ҽ����T9��5<?i=RH�>
�>��%>�d�>Y��=��4<�0�<�d�<��<�vb��.ʼ7eM��YA��܈�
���Ы&�� R��:^����Yކ����<���=tFH=n_�= ��<,�K<0�<�C�<��&;/+�2�
�k� 9<:M<˳�<�Q�<��;n�;Q4H;��!<	�:G�(�,���' �u���g�jI��)$���ھ��<	�;��9ܾ�2��on佄j��m)��>|�R
j����:��{�t���B��RR�n�Y�U%E��34��;��I���z�<�O=��=��=�Gm=��=�m�=�Qu=��M=�(,=�cW=hjJ<�]�</� �X����x��l��Lڼ�s�M1a= ���C8�F
���}=Eǖ<�Y/<,3�=�@>7B�>��3>J�|>h,>u���������������������������������������������������������������������������Itr=t�1>~=ەx=���>��>
+�F=��f=���=1��<���<��=<�sE<�W
�!d?���ר:���콽�&�r������'{[��U]�h�O�
�ϼ���/c켯i�E�齍{��,
��}��#Z�o*��zd�SV��l�<��<���<5�;�ɫ�Ƕ;��
u�"0�⑽:k����?��Ԥ��h���k;%��:��N�hzs�1+½k�mX7��W���t����L��}���򺽾0M���"�\8ý����b���� �۽eW��x���D�<
Nf=eɃ>l�>ޭ>�U�>�%�>j8�=�+=(�Z=\t<��D�Y�=�|�
�nWQ�Pϼ�㼘KM��ѽ������Ϲ4��<�=ʚ@=��=�X-==�h<�c^<cg|;���<��Ǻ��M�~��U�ؼX��<q!<�=�=M�<X	�<!�P;��;J�L:~؃;���;�
\�3<	��z����7��U�e�=V=Td=JJ/=
5q</�l���
�fl
����%Z�$��0�$��Jk���B��.��95����Q�P����� [...]
��=��=��(=W��=>�=D�=&X�<<�n;��[�3M����5��μ�Sv������!:?���q�{;��=E
+e<��<蒞=@
>2
�>�8�>O��>Z�>RE�>�I����������������������������������������������������������������������4Y��T�=W�/=��0>M�	>+\.>L2=�au=�X
+=��=6��=`
�=q��=�HC=7`���&��L۽�q���5*��T��ck۽|H<
�s<TO<5�
;D<,�^:�
+!�����Y������������;�;漂-���<5�T<�w=Qd=
ކ;��y� f�Q�X�1�<�5�Ͻ�
����&�����ͽ��:���h��A��	b��[Oѽw�ֽcv�T �4��|v����Y��q��������x�������߽���K��B��D���!ݼx<�5�=�
�>��c?5g?.u'>��O>��	>��=v,�<���ú��/�x�N���P��*FŽH��$-���l�҈n��'ѻك<���=�k
=�b=�+�=,T�<��y<߻<� �<��m'ڼq@Լ9�;��<���=���=g
^<���<S�Z<Ju�<SxP;��<ݨ
=��=>��<��A��FO��};
�	=[A_=��b=���=�
<��:!�39叵��;�\U�3�n�(~=�1�N��^}l�
�
�"��;{G��Mq���ƻ':
;�Hӻ^�9;�� <Ϝ�=��8>7^>_�J>LB�=���=��
=;=�i=
�"=<â<L�Z�hHb����c �{�1�� ɼ�ƺ��o�9'�nF�<��H<�h3<�xs<�p$<�Q�=�(m>F> >=��>Z#>pjQ�������������������������������������������������������������������������&���0�����=�?>fO�>�ɋ>[�r>�N=ЍG=��t=哦=�J�=���=���<�a�:���x�T%Ž��6���z��M[�V�<a�<��=z`f=��G=���<�ໃz6���F��
���aK�
+���*�x��=��=h'�=�0�=�:�=&J�<N�(;N�G;r*:�	�S�

���C�������(O�(l޽ 9��9�
�gB߽g�ZKe�m���f�ؽP
��	�ѽ#]E�\3��� R���w��Ƈ��$C������伽h�D�c��>��5�eMk<�%5=��>���?
��?6�?��>�"�>�*=I�
<����NVn��z��{���м΂��>@���ѽY�BL���8g9

r=K�=���>"6=��=F�<�=
TF<�<�›��봼a|��*�<1�r<،|=���=n�={�<8
<�?<��<�o�<���=
T�<������׼��/��,�<Y��=�Ӿ>Լ>,�>
+�
+=o��
�s<<���<L�<
7���D¼��Z�4��/	��մ9���B�
S��TS���<4�<
�<�m/<EG3<���> �B>Yj�>�>�=�><��=�<�<��f<�3'<���<��6<5$
�[�����ɼ'G��~�1�Z%������Z��{��9
��<�c@<��l=
�\=.�=+1\=V�Z> �a>:�_>3��>e?�����������������������������������������������������������������������������'H��i��=��>Kw�>�ʛ>���>��Y> ��>
j�>��>)��>%�=у�=U�
;��Լ&�H�+���c�`��ˍ�D�����<�F
=�B�>
�H>�=�sz=��R<A���@�㼉s��������v�;��
=��S=�vz>	�>=�J�<�}�;�8�<-�M<"���e��U&�p�佃df��{Y�ǰ޽��8��ܽ�G���
��yAg�fǨ�x�
�@�x�%$��)�Q��5]����������ཚ�u��Ͻ��ҽb�x�wĘ�E��
bc��
<EB�=�i�>k+�>�;�>���>�5>��a=�=D��=���d�{�t�O��������H�Xf㽄j�@�ؚe:��K=%�x=�7�=��
=�z:=*س= ��<�4�<�h�<�����o���;[��<]��=*g�=e.�=p/�=W�l;�V<���=��=
"!<��0<�*	<#_)�>�]���������D=-ѐ>��>
��>�=���<٦�;S�o;�J�<�4~<��:h:��F��3��.Aݽ}�;�}<-#9�w�;8]
��6z<�G<�$t<��=�D>7/>k
�>��v>��;>k��>
+Y�<��d;�P[�>e�MZ;�$�9�D
�������
��_j�h,��]xŽ
+�ڼS��n�<���<���= �==
�<��W<��=�W<=�p{>�������������������������������������������������������������������������������������> �4=��g>\w;>��>�C�>�p�>*|�>$��=���>-7>�!=�X�=Ip�LF��`D�+�-�l�T�=����\<6�d=��>/F�>tzt>�
>g��=�8=T�<Hߺ;Ȟ��_G��wS�J/�<�� =h:�=Դ�=�6=�_1=����<a��<т�<Hur��s�K$�G�ƽ�/콲nԽ�򃽟�H������Nm�}ݗ���Ƚ��4�7�$����r���%޽��D��@뽆����\彅����/|�jʻ���<@��<g��=:�=ڼ�>s��>���>t}�>�v=��=%�4=�
+<�M��5���f�z
���Y	�۽@�ѽ^m��

���<
�n=�Z=Co�=�Ly=Y�-='�t<U�l<�K< k�<)(G�A>b;R��<^��=D=v�=dC)=Mg�;�R��y:��m<�Q�<b�;�q�<���u����&��
m�����թ
<��=�ʕ>
��>	O�=�˖<�<�<Ba&<���<
�c;�4<�l�*�Ş
�\�)�

�
ۼCDm��`����
�q�8����:�ʻUV<a�S=+�>$�>tg�>��c>��q>�>ry<�W��q&���G̽:���L���!��(�����&�
�,��2_�8�?1�i���	=N�F=�3�<ӕL<� �=
u=���=�S�=�=� ��������������������������������������������������������������������������������> �=�I�=�=~>E�n>`�;>[�.>
��=�o=�F`=P��=z[=���<��h�i#`����\�	~����v�Y�0=
+�=�M!>�U>��M>п�>���>&q\=��\<]H�<��;�UX<1�<C.�=Q�<=��q=��
=��='�;�cr���2���.<s��<l�=;�n���7W� �߽~(ν���?ý�EὩ#ὣᎽ��L��8����y��lg�l�7��ŽfGӽ�F|���,�9�$�$��\�u�(}�6�
����|�

!<3�?<k��:���=,w�=�ޗ>E�>�I=�?-=M�4=��<��=R�;�D��F~D�� ��
+�ꂾ��Tt�'��Ց�;��n<ѝY=="��=1_=S��=r�<���<>�<i>9;��:��`;j\�<~��=>f�=KΊ=0�<)�Q��EV�bɻ��������;���;���;6QV�HKl��@x�M��)O>�� <�F�=��=�
&=�Oy<�W<!��<'�x;h�(����������A䘽�J�#U?���ȼ��b�
q���T'�֚����o��ś��.<}�j>F>O4}>��^>�1>�<@>(k�=/�q���#�+j^�%����/�ҕp��
�#�-��@��_v�VI�
��ν-��r��"�=@U�=�Z!>4�=�:�=�ť=�,<=�� =��������������������������������������������������������������������������������������=�ɽ=��)=�r�=��r>5�=�|�=���=��;[�[��B<��<0��e�2����="2��#��LY;�W�=#uP=��� [...]
=C�=�*�=���=]	=
+�<���=U��=;}=\ ;и`9���5#�
\�����;�<Je�<1�<���<��-<�H<�u`="Dj=;B<�Z�;�٠;���;��:<2�D;�P;ߣ;���<���<�g�:�J9�AsH�x�+���ļ^V �D3N��y6�6U�;��	;�3T������6�v�<Q*<=`�=���=q�<�Bx<b[";V&;�_!�A�< r{<"n�
(�x�5�H
�&-�
+ʩ��;��[��'����z�Yþ����u��=դ�>)�>n��>��?>j��>��=�n�<
����
��0n������b��ZҼ���&�+�Lf�[j��\WG�
U
�JnF��N �Pj=
{�=}��=��=��\=���=Ё�>������������������������������������������������������������������������������������������9_[d<5�W=7��=N�=4K�=T`=V15�Q;�1c�%��P���
�8�aAA��#;�H�4�-\�-!�= 
<�dQ=�
�>m��>�f�>�	�>�^1>@�=��<+tJ<Cz6<G�=�<�p!=	:�<Nv�;�
�
����d��ݝ}�>�u�\S�RFJ�x�˻�
�ų	��b� ��Al���=���w
�?+
�|뼸�W�aֽ��:��l�w���R�;ɂ�<���=%p<nW�<P�x<(�<1ۖ<|�=8�<�@;1�� �8Ÿ��t
�J<�Rf=��=-_<�u�<�9;�3�=,�=&\|=
��;�h��x�@���-�RQh��1<
{B<�Lg==)F�<;8�<� �Թ�;�<�7<�r><���L1<{�L;�IN;��:fe,<-�p��e�����:M��{Nt�k,���.��#�"��k�<3��=r�<��;�$3��d׻����.(.;+�8<��<�a�=��
=*�<�U	<�R�"��'��<��W<��1�G7�c�d�>*|��0�c�/6��%�
+�����༣F	�
�a��m!=8��=ٯ�>2 >h�Q>GMK> /�=}m<��T���d�\"/="{c<R�ؼ���Q�:�
mK�T�9!�;n��;�Ӝ;���;ҠC<R.'=.�=�x=���=��,=�q�=�@�=���������������������������������������������������������������������������������������=��b�2
+�k7F�Y&�<��P<���k�p����9��veo���^�\ג��r�T냽x*�D�-2};���=�.=0�=�آ>�?>~��>�xZ>���>�9=Pw<�B8<�ͺ�@�3�-:� �<(�h�����b$��	ܼ��Ͻb�h�PƉ�Q�S�Ytb�� ������
_�/[ݼ�9�/�_�]�˽ً��<�l;��Ҽ3�.�D�H��U��u �-�<�#+=�V&=�s�=lr=F)<�=>�=�m�=�p�=KE�;�N
<�;�X���#D�V��ܰ<�1<��c<d(�;�-�:m��<�\]<�
�<O�;��^�wQq�m��(�K9��%<8|=.ؐ=��x=t<9<�eP;�μK���:�O���K��^E��Ic��Q�8�U<T��<� <n�������R���:�$����ػw������<^�\<���="��=@d�= ��<��S;�#�:�)8�g;�ô;�t4<x�|=#D2<[�a<4I�:Y}�����.=
�=
N</ ��-ܦ [...]
2;%b9���t=�$<@� <���<���<")j;���<-
u<S�;�	�;���<c}�;�� =h��>";=�Z;=��=��C=���=��9=���������������������������������������������������������������>6.Q>2�p��������=ɑ=�
ü5hܽ"�ި���H������&�����[���������u���i�_}�1�7�6Ի�u�w�~=ܪ=r>N=`fG=�[=ד*>7>	�~=D��;�+�="��<C�����ټ˪��}2�!�f��*���m�4���� ����C�-1N�I̔�3���C���]�����R��M�X�(�M9���a�=*f%={��=%�i;#������j�#�(�ớī<�*=�I�=�K0=�ן=1�|=
��=E3=��
+=��g=$<��i<�<2<jB:<5��<x��;��;z�8;
�����g��<U;���:�<[�ks��1m�`�w�i
�;��K� =
\o=��=�	=���=Q����gm�0����'��F�\�ܸ��6d��mA��I��C�4�<';�<��/�i j�<2�;�3�;03:��z�bxs;���<��-<��=4��=a�#=WW�='�<�;� �:`e�<��;o⫻�F�<&4�<�V�&x��($��Q����<�hj<���<: z���Ƽ�����S�=�ý��K�?�U��XS �c�P�dg��>Jؼ]��=V�]=��=�Z�=���=j�0=H�=.;1��;���<C��;���<Y�����#�<�N�<�щ;w�D;����;&��;��F���˽��$��m����=���=Ǭ�=ǜ���������������������������������������������������������������=�\�=��	>)ʄ>c\�=�آ=��� [...]
���
:=�#���E��]ؼ��f��
[����;
+���-���<G��n�gH�6�O�飽7��i�
�{,��u�Ͻs�½<�ڼ��v;�Q{=�|�=�;"=F�)=nGS=r9<�+�<,��;		}<�"S<�^��� �qr���
����7�z����58�@�
+
�) P���f���J��wi���������������������������������������������������������������������������<��-=b/=�
=�b=��7=�7�=�
=��C<oY]<0ټ7�R�tv��E�.s��
]x��%���ֳ��ˁ����K׽�(L�������,�96<7�,<�=~7=:�<�J�����x�
:�G�;&>;�#�<
 ��S������F��
3�F�߽�fX�
+�S��톼�2���

+�'_��"ԋ�п�!�K��W4��
J��!���p(�2R��Q��=/��=@��<�=��n��Hx�%NT�
40�+�O��=�= ko=R��=l��<�:�<{{�="��=��
=e��=_o%<���<�ݻ<N�!;Ě�<3/";U̍������X������K;��:����������;�<.�</��<��r=� 9> �(>y,> ��=fy�;�����`�.� �F$Խ�nl�6�I�ɶu��H�<,Gp�!F;�r<:��/:�-<���=ñ<�)z<���<t�X<qqz<��<���<�_=?e�=e�u=b�<8!��P=�����ʯ=�}��^=�k�[�@Ҽr룼�J༡|������d���㼞��N�����R�t�콇,Q�S�r�	ӽ/g���۽n�[��
��1 ��L<�z�=~a�<
��=L �=��=̴=J��<�<�v~<{���bJۼ!zx�x��֍������攽�(νQz���
+߽
Sl� Jm���;��\��>���`�������������������������������������������������������������������������<��=S�#=�,�=�b�=�B(=�х=���=ʮ\=��C=�e�<M }��i��hƾ���s�&(ٽ��i��#ž
+|���d�¹�Ӧ�����
ּ��N@�kj<ö'<0�d�K�V�G����T{�?;�r<DP|<� �I�ϼ쓯�A�ѽ/�ٽ-~y�.Or��8j��� �n�4�w�M�T���
t�6G��WU��ͼK�u: �&;�#i���C������;!
��Tt���ν9�W`�8㼜,���Ӽp�s<���=
Lp;��<�H=eM�=�^z=��Q=h�I=�T<���<œ
;�f�<
��;%�@��P��
�@��,
�3m����5;�]�<l�<ũ�=B|c<�&<�r
<f�Z=5�=���>$��>3R'>�=�0a<m�M��ļ�U�#k-�k���XM�m�y<��,<�p<<M���s<)�=6(#=��0=�� =C6<�
�<{׺;�
�;j�<*k�;���<�6k=1�<ش��U�>�!�.�Y��I���+j��v���ļ�f���(���}��� �
mԽ�ɔ�Z6��甼�Ku�9�1�c�h�P�I���а컊���T���Z&���u(�
�C<��<��s<�i<�=ZX�=�l=�===dg<��_<� n<��<+�<� �����������r��s���w���
� Ӣ�
[D�
��1�l�ȓ���q�����������������������������������������������������������������������������>91�<�x�=}
+=a�a=�g=���=�q�=�N�=ߙ�=�̎=�s-=嵻^�:�趼Ր:gl<�z�:ȨսyDZ��3���v��̱\��
0�*�9�􏸽:�̽9h�#�
�1(u�FK���p<16
<�;�=r�<����_�����
�|��|��
Jʼ����"�;�
<N2�<0a:�
+��
�I䱽WF��3"�Ҍ�����"R��1u��Ā��������O�K)�
���H����^
�'�E�<��
<�z�=S�`=u�h=��=�I =`��<���=
�=W��=�#n=��="�^<�
���8�0���I��:�<���<�Z�=:��=*O<x�=(.�=��=��b>��>;�K>:�!=���=�C�;
+Oj���K<D�;8�&Y��OB5�i��< ��<˴I<�
<o����-=3k�=�'�=��C=��;=[�6<�Er;�w���V)9��
;�j�����<z�^<�7�f�Z�
��a���Ha\�C�n��Լ�Go�����8����a��(�W�Ƚh���s����4�G�ܼY��<��
�|�P4��i��~�Z<a�@�b�G���B�=*6)=M%�<BR�<�
�=X9=[��=U��<�J�<��><׊;<������k;,/�<��)�N.�d���~�|���4��!�d��pȽ�Z�'
�����������������������������������������������������������������������������>�6i>�*�>���>/#�=�
+=_ �=�=�@�>bq>35�>A��> >}=Rd�=7��<��
=A��=(/�=�Ƙ=}8�<��o�>�˽�$���ځ��yv�"�սE�Ž����������3�Y�>峽��A�ECͻ��<Ì�<�P�<��;���<�}�����4�(K;�׉U�G�<S��=U#�=:_�;�汼����Rcڽ.		�����6��t=���=޼.̼�	��ɕa�����^��-��i�<`�;�xͼ�É��J��It�<�v<�&c=,5=^��=�
S=+pZ=�=j	=�I=�K�>��>��=�{=�;�+�~�;�#�Q�(��{<_L�=�=�<;S!1;�d= ��=�^0>Gc>:p�>"zn=�_�<�󍻺�S���P�;V����&�G��������/�;���<Uؒ�3r��^;�Ⱦ<��k=
�=PC�=d;�
�:�л��j;Mvٻ߻@;vW7;%�ټ
���I$��eK��3'��s�$�:�]ս3��S�
(�
�
��qM��H3�)���U [...]
c�=�-!=#�<z�<�D�=�.:=�B>C�=���=�}�G��VI �����Bwh�KuX���{�覱��R��ʽ��y�upM��Q~�K j��{
;�\;��<V�c<�<�鼰�L�ծ���Y�H���v)<II�="�n=�X=Y�һ}|n�>v"�_���x_��8F��no�3�M�@�@Q����Y��߽&����h;�pT=��;LS���Iļ��D�?��<�u�<���=
�=
�<�UY<�
�<�ց=2A=��~>Iq�>x�E>)�<=��=@k&<�P<��\=!R�<v�X�Z�̻�å��0;r���n�0�
==ex=�}>��>�.=��\=;O�<		��nA�_c��6���X� ~�巰�!9μ1���������� p��~���$��u<p�Q<~�A<ę1:رc��D��3�w���n�`���Ⱥ�� ����W�`;.�滟�����v��&�����yN�q��
+�	�(�N�/P�������:�<�W<�]�<��7<r�O�-:�Ks_� �;���<��`==�#=g�n=���=�ž={A�=Y�<nx�;�r<1�<?P�;����@/<n�;:v���_
�E4�_����q�+�]��mu�Ғ�:f�L;H,��� U�����
�`����������������������������������������������������������������������������>ǣ�>�u�>ޛ�>���>G�,>��%>V
=��{=��=�k=߭�=+�<���;��L�
+H���
=���>��=��P;�k��
+���v'�����c�q��޽������
��a ��
N��j���y�6�μ��<��<j�b<.�#;�p�:�풼�~���mH�V���$(|��YO<�D_=Rcc=��=M�5�0�v�,�⽝Č�?�н.i�0Cѽ;bU�
����e������
���мu>g;��;��8:< C:����GA;��<�ԁ<C
|<�"n��Դ���k9ne=<Y<�?�>	��>`�<>x/�>?(�=��<� >=,��=P@=<�;�b���I4��$m�^
����� �ܼ
�%=
+�=d�=��g=��A=�'+<�K�;�*Z��_���
�����*�?�E��*���?������ټ�2����y�'�=�ݙ���<m!�<>�<
+����ļ�:�5
�`
+�0<��� ���g9�<a�j��;v�k�3�ռ	��� �\�|s��Ջ��
+,��0�j��\���^�0�������I;���=N�=k��=G��:��;
֗;`��<�!�=��=���>#��>HL,>2P=�Z�=]�Q<�V;%v1<#g=

�<����c����L�s��Xv�
��7\ڽ|�5��lT��Б�3<����ӻm���Q�
U
�5w�������������������������������������������������������������������������������>�ԥ>�6u>��A>ס>H;�>_�b>Z�=��=�Ƈ=�OK=�$
=�U.<1�o;b����7����<�Ș=�  ={f��@V��⽸�Y��ݣ��!3���t��V��~#��Ss�����hҽ�AE�Ql����.=r��>��=�=�=@��<�a�H�E�@;`�����ԣ	����<�m�=�r=��=���(��a����ؽ\P���O�����k���@�}��5���`���$ϼ��Z��r�
+d���[9�o����绰Ƿ<4&m<�=[�:��V�����tͼ�Z�xR�<~
=�r�>w�>W��>Ś=�-�= *㼱5���)��5	J������a���E���1���6���s���;<���=̱<��U<�LN=7��<���������������-� ����q��(�`�!!˽�N�+�=<�P
��"�_��i��h,��S�;ϫD;�H';���u��C$�٠ڼ�4�����д��`X��}PJ��ҼP�{���d�!V��	�o���h�,Ǽ��_�4���g^�����<Iy)=~�L={5�=p9�;�d;h@�=}n=�@�=�x->�>g�M>��>�O�>F�=��N<��L<WW=(�l=|��<��<M鐼�{C�ƽR'������.f���v��>m��pX�d�-��^ɼ�rP�6��i�h��
t����������������������������������������������������������������������������>�~%>��~>��q>�i?>�^X>�}�>'8=Т�=�|1=���=��q=P<���YS���b�?׈�>�>9��V����r�,��y~���x���T��l��UȽϩ,��Gq��a9�w�� 	��e4�C+=Fs>�&�>�'�>���>���>��="M�<S��;�mz<
��<'<�<��=�)=�� [...]
���=�E=�G=��8=�7<�z\���N�oR����� %Ľrݽ""z�2=ϼ\e
����3�F�'<�:$�
:�Y.;��;�"+<�q�<�Vn;��ɻe�N�����н!נ��ݽ����ӽ$q�e�o����l\�����:�g�;>�;;Hd���N�� ���Q��w@�0���%]�#���y�1’�K(���
�i�żȩ�K��6Χ������ڦ��}˽-J����
? �����1⽅׮��*|=9P<=[%=�
+J<���<
��<
��=��=�j
>-Ҏ>�4>�+p>��>S��=�c=5��<�8='�E=�8�=d��<�0��)�4
t�l]��`�K���z��'ͽ�����s�Z�㼰*;��+��#C����A`�<�؉��������������������������������������������������������������������������������>�|O>�wy>�
+Q>m�B>3��>D��=sh�=[BX=ǀ=��<�n�;�;X�d˽[(���w��Ѽ@��򱵽G[[�WZ\�X���Fp��/ǽ�ե���9��q����<dۼ摞�]�����F=�fd?m?Z*L?bҊ?
�A>�H<=jz�<�!�<�Y<t0o<�S<�>�=!
+�=j�=<6<��9;֡���:����ս�
K���ҽja!�l�"�y5,�0b˼��ɼ�,i�ݼ�
��
ۆ�,#Ͻ�u9��
�8X�<K�2<�
B< �8�(��2ؼ��
�m<��t���<t�
=*�<щ�����|�j���kA��l���i�����2��Z�ɼ��-�e(��	���h��q�O�B�f���ἦ5����{�Vܔ�3Q�z����
{�
�;�ݘA������t���� �,�������cT;S;Q<��o<��:VUȻ��
�����ǁ��Ū��1������
����I�{�H�ڽA�����'�7ժ���\���o����5
�Ox!�
�	�����Q<�do��Ml�(�ȼ��1<�wa=p�=�s<���<$i;+܎<��(=�F_>:^	>�~F>�P�>�T�>LHI=Ӕ2=�"=	9�<�=J�==|M
<,Ox�-88�>��������P����g�C�I�6���Q��#��
�ƒҽ�E�X��<�,�����������������������������������������������������������������������������������������>�,>^��>&A�=蚕=�4=��=i�=
U<����*!���i����;���2�$��/��d&�s���6��y���%�Gu"���s���м�Z��h��B��ኽ	�=<u�o>�4?:/�?�-D?�)�?�a�>��0>��=�z�=F&�=JLa=t[0=s�F=u��=K�b=-�=-��=xY���n�/�뽐�ke����������W�a�Ul�����p�?�.��B,�C���뢘�?�
���:�<;;�<�����ƼJ���O�=��R�����������
^��,�#�8�ĽB�k�����S�����B�M	�}
�����[���r�$�;�Z�޿-�m�����9�b�X�A
)�2���`G���
�!�J�Mx<��l�p�e��"%�H���T���<
n����;y�<k�D<�œ:��:Ģ�g�̻�si�����惪�_����8�_��Gؽ�
a�
K4�����o���.��c׽~���g�~��{����*�:���O���'
ͽ
,z�W��=4=�r�=��Q=�b<u��;�u�<�s=��
>b�>`T�>du>Fh>�t=��I<�

<
E����<�O<�[������!_���h/��p]�	(V��K
�I����1�/+�y@��������-̻���(=�8c������������������������������������������������������������������������������������������������>���>H�=��g=,I�=
a=Q�<�:���M;�O�<'!����/D<�ԴK��v/���_��>L:�Z*9�,���
ڽ7f2�}�������j�;���<Q�u<%��=�(>�~?l�?��
?���?���?p�>3
�=���=�8�=���=�Dm=�
+?=���=�ۓ=E�=F�Q=hv;�B��˽+B��@6��r½��<�c���<H����Q���3�Z�[m���@�x�ս?����
��:�;Q5J<�b<P��<p�D���;��
�t�����
�G�=�����\���������?ͽ|祽�������m�ĽQY��v��
V�$B��X���_�"����\H���v���)��e�b�̽<͔���v���Z�f電��.�3�꼸d�����~�����7�l�?���;[�(;�`�<�Ѻ�94�<�����7����@i��ۮ�*6��R�-�\μ��fq�����Xd��n�e��aj��^H��^6���M�IV���{����͚���C�����=X{�>)A>=M2>5 =�?�<J�X�
�W<�M�=���>�>(ӳ>
+��=�R�<�b�6gp�;�}�i��1�'��H�;���&&���������A
ؽ%�����
+P󽑳���.+���m<@8o<�CF:0
6�����~޽��`��������������������������������������������������������������������������������������������>1=�"�=�f�=��=ª<uѫ<=){<x�<���<Q�;��ټ��
���q�<���=.�<��~��EO�
]r�<K��F���md�p/9<���=
+f�=���>=��?
�y?���?��_?]8?�P>"��=��
+=��
>}�>	,N=�p�=���=�"8=���=��T=�-[=���1�
$���a�'T ��
+�:�ϽP��2�½0��8b��nX^�������X�I����\;Y
;d	
;�H�<�<A,	;��};�˒;����
�v�����ӽ�/�A�V�5�8����G�D3T�*Fa�/p��Sdk�IR9�h)7�bF�0�н)�������8�ý��T��b��� �����yS��28��ݻt����nr��d���1������OR��̖�&yƻ�C���DF�� Y�H<�X�<Sh�;��Ϻ�3�:R�t�|��>��2~��m�LS�]R�`���a
����۽aW��n�s�C�?��@}�to�zg��uJ��vF�
+��Oe����;Yӡ=�.�>>~�>{*U>N��=�Aq<�J͉:�8�=s��=�Gt=�<�=�A�=@3e:���8�;�P
���n�����ł�nj��m;t���߽�rz��aξ�2�T�&h0�H^��ܯ%<����=S�F���?��%��W��P轙u�w������������������������������������ [...]
�
���g;����,�;_ϙ=4l>��>���?�|?(�?&{�>�/=��2=���=���>!1>=��V=�16=�g=���=��%=�-%=f�gpD��>S��x���dȽ4c̽3i��G�6���ܽ
$��w_�x-)��:���'�>�ڻ�;�W�;
r�;��<Z��<�Ė<�!�=
�D<f�º��������H���
�&.�;Pn<C��=[7<���9.���w���,� �zOǽ�/E�l�
�6���ν
!̽窽��������{�q½A�G���m�Λ�<)� <
꺣�a��¡�"&�k
�ּ�DP�
H���ZǼ2ǻ����<��y;R����7ɼ?C��U���(�&��8�!��E���a��sH����~н1�ؽ���eٻ�+�_�(綼
܋�
+u�;�H���i������:e@=�>Y�>@�;>�4�>}8�>{]<a�B�&�G��=Bs�=�x&=��=�<G=VV<=7r��r�A�ͽi\ν����ֶ<�Q�ѽOɋ�A2a���;��,�J?��P���{h��㑽�6a=#Q�=>&�=�q�� gԽ��ؽ��L�����t߽Yn�����������������������������������������������������������������������������������������>&0>@��><+�>Pk�>2�+=�we=5�:�����NU��3
<�Q9<�>�
狼��+�� �[u�<��ܼ�sf�	�|��弬3���k��v�El<�d=�Ye>�>q�>�+�>uA�>��=���=��J=���>��>��=}J%=8��=JH&=���=�ܺ=�r<�ݏ;��3����;r��:,�
��bj�u��^
+T�V"�RAF��G���ͽ�(`�U�u��Tﻂ��;�2;�ٓ;��<��Y='5&=n�j=sѝ<��v����J���<�Dt��8v�;:�=1�e=|M�=kfH= rڼL�E��r��&��t� �-1ͼ�_���h���x� �=�H���)��!%����?�	z��7<���=RI=2z�=��;��L��X�4]μݳ�s�;�VX:�����ȼЗ��@ V�A�����S�=���݊����k�3�5�����v�
ٽ$�a�+�]�
 ��f����7�3h����<
�<86�<��T<%r]9'"
���x�y�*�q�
<?W�=�Ӷ>4��>e�X>OŲ=���<
�c��,h�iϖ=�?=��`=Äp=� =
<�<�v��/�
+�J<���rĽGH��b���PB۽D�ٽ#Z�_����}��:;�*�=V�'9�׼��>=��S=������󽜹(��E��������y�����������������������������������������������������������������������������������������>т�>���>�s�>���>�>>
f�=g��<6{�;�,���5<�c<��)<N�����н>s
��ٻ������������ֻ��� �?㰼~����ۼ�#h<��=>�e=T�=|��>	�k=�_=u�B=D��=}?�=�c
>^R=�#=2x<	�;��~<䭾=���={�t<a|(;��;Ѐ;Ƕ
<��1�O�g���FHL�NU��[)�W�T�w�M�}1��R�k�;�<q�<�B�=��<ӊ�=
?=�S�=���=
G=;�!���9��M	<��Ⱥc)L<��z=��=�|�=�G�=IQ�<����ڼ�k����2�M�-���qB̼}}.��'ܼų�BL��$�켈���t�ݼ9��;���=W� =xF�=Y��=K��=#�E�Hɢ�Y���z�<G�W<��h;�n�9Y뼼�d-�
+i��e�ؽa�@���мe�:���ٙǽ��&
��	0��A���T�
�Ԋ�6eݽ%�}��<v�=7R=���=k��=?�-�����{�������غX�r;���=���>͓>`== P�v�ĽBd��KN�y��=_�=|�=��=�(<��:�H���Ke�E'̽o�o�0V)��=�2�U�)�ɼ�b-�
����=�=��=z޹=6�=p�=�V%=�&�=�4�y�>����������W����������������������������������������������������������������������������������������?�>>�'d>�g)>��b>�{�>�ݍ>:r=~�K=q+.<.i�;
<M�<j	�<r�û��༣q��T�޽#
�����5��˼��p�/�ʻ��
+��맼WG��E�8<�>�<��<�C�<
A<�+�=+ғ<��+<d�G=e�=Fr�=�j�<̰��R���/�Z��Q�Z�<+i�<_��;=��;�
 ;�;��
<g�)<Di���y��G�OǛ�)���d�ҽp�y�C���p]�e��F��<WS�<�yk<�{�=-�&=-X"=��G=[�<���;̎��������
n��ǀ;&��=e
=dd0=�n�=L�;��q�
+�B��U߼UYd� ��c�N�&��� ���B���?�
+�f�/uS�Q��31�K�=ԋ=��B=�Z�=���=2�F<�1|<ʓN<n�r;�g<�V�<��/<��C;Œ�9_�4QͽS�P�GQ���y,�u�,��k{�]<�۰��x���q���4����6,��o��X= l�=��=��=�.=�� =C=��,��?�L
��߽#M��2a�=��=5���q��z��
+v��U�r����ޙ='�<�}b<E����Q��R�'���I�Z�@��$׻ͥ�����<�5߼_����u�B\�JLE=I]=G�?<̺<<[��=G:�=�q�=�F
=� �=�
�<�dC��������������������������������������������������������������������������������������������>��>�~K>�b>��>�M�>�R�>�:�=�w0=|��=Rh<D�Y<[]O=?GG=
~f<#>
��'�S�G�:"X�0"ݼ�����Ƽ������,��e3�8HZ;a�<�><�wU<���WYU=>%6<p��<k�~<��}<��<�R<��������
+��N\H�=Y������h<*޼
'�;���;SÖ;29�;��O;#}7��G0�����9�o�N�a�rr�=|���9�����Y�̛
����<��
<ԓG=
c
=X��=E��=.V�;�9t�:�����Tս
U���@�؛�<(��=DNW=8�=5�:����[`2�pvO��!�a��ew��6��8��r�����P������,<+���;���=.i�=҃X=Ƈ�=���=
+�<f
M<(w�;�-�<5�L<Eo�=,��<��_<A����g�/6?�3��B-��lp�e 6�������p���Ѽ�{��)"m�,ɽ�:H�N���'���������<�e�=�x>
.�>X�=��q=��f:���,��5�佖hP��Ae�0����P4��ǼH�ҽ"���q��R��_�,2;�o�:�?�l��� ��j7����"��*���i=�|�F�;�;���<���<p�¼��<&۽4��<�ao=
+�j<��<��T=�!=D3�=�2}=��=���=��)=�>����������������������������������������������������������������������������������������?��>��2>̈/>�Y >���>���>Mp�=�Av=x�=<��m���<C=
+^v=Is�<��~;�/~�L��qk��4��.������~��w��=
��J;��<�J<���=Z�=Y�}=���<��W<9a-;�.
;<�<[�
�L���
���l��C���5�C�A���2��=��B�����@��p��?"�v�KF��d��
�$���f��~�6W�
+璼�	T��qX��=]��H���N�%u<b��=��=C��=q<��(��/��%@�/^��"|�*���6v������=�<��}<ϖ2;�:r���E�pƽ
(�X�C�PSV��{�%�g>��j�{ ��꠼)f��/ f:
5
=$ e=�4
=k�=,\q<�Z�<1�;��4<(W�<Fб<s��<�#�<��<Y�{�	)|��Q��D༱�d�5����G�,Ӽ PN��ʜ��m�&ܼ긚�S=��=�j����X{�;�\�=^,�>3I>$�D>G��=���=|�3<3�� A"��役,d��⽈֙��ͼ�P���B��S�J�ޣǼ���+R�;_�;�-O��D:��v��D�ݽo�6��D���X̽��z�jK"� ��� ;=֢=.��;‘��
�o;�
ܼho<��2<��S=.��<�!�:��=W��={/=���=�MD> 8����������������������������������������������������������������������������������������>"}>�޵>,i�>��;>و>�p>`N=��=h�;�
�
��[��="]4=`�<��S��j��/l�j��}�I�A
�����a}�@�{�I�_�b�;®�<��$<��d=b��=��=�}x=0��<�{$<2�	�/H$���ϼ{�׼�M/��?�9�g��w��.�(;>T^;�3��7��PU��a�	�ɼC�1��I޻��F�����_�������?���v\��-��Ӽ�՚�H��IO��s<�
"='�<���<
+�¼�)��p��f���R�",�Mxe��Ż������ �t
+<:
<��wJ��𢤽ɪ�
���c�L��wh�^-ռ+���J������\���Y`;�5M<D�=�=>�I=5�<��;&��:�@<FG�<<)�<���=�'<��$<��<�Ps;f���
�Q�
�#�SQR�A!»ߚ��C(�<u <��-:T2�������
���g"�*w�
���"��<��=S/
=��>7E�>mw�>h��=�<�=`�;�jڼƚ[��"U��i���o����{B���ѽ
0��i�𣲻�9
��;�<詺�0m�����J�.��t^��B"�����UB����
ͫ��o�9e/=#J>�@=+p<�"�=b�<+vn<�@=�P<���;�ޯ<�ο<�&�=R((=P���������������������������������������������������������������������������������������������>%�=؎�=���>q>��z>�m>Hl�=ڠ�=��<o̾:hx9���<O��<�T���ܶ�F��R(�o�ܽ�H��m����-�
���O��,c�=�G��w�l��<%;T=�E�=���=^ac= ��<�d���u�����
���0޵�8z�VO_�qZ̽�Ѝ�H&����������k���� �(�vH�l�;��*<:ٸ<
+�Q<�/�:/~B�"�)����$��
+�ͼ���
��)Ȼ"
�;�]<�U<���;ֳ�>pb�w��$2�y;
���q��[��c��`q�1�ż����IL�۩v�(�ֽ
*��R�O����׮�p���
���
,���>��}�1�o<���<�$@=?�2=aӿ=,W ;�e��9�;��;�B�<��%<��R=p�= :=��<�d�;�'?�)ʼ5����}��
kĺ��J<�f[<��=�=ۋ�e����^���-���Ǩ4<�=cJ�=�C>�܁>��>�W�>{{�>��=-�-��l
�����B�����=��[
������u�b���L<y�(<��<�
+q<�׹<�x.�AE|�{�n��m��gP��p�����)�q7��]Q�~��1�<Ȓ =�=76<�@[=Kʻ=��=]�S=��<ώh=�~=u��=/"�=��<ê�<�������������������������������������������������������������������������������������������������(<�h���-;=�&=�]�>��'>r�>kjJ=��>*\�=��0:��$��L����4Hϼ�S����xe_��q�����TB���ѽ��D�}fk���v]����;ƅ�=B�=h�<��3< y�;�����H��Ȃ�2�ʽ�U�!Y��n��<��FS�b'�y\��8JX�ƺ�վ#��e�󱭼�mϼDd<�I�=<x=N8=(�d=yth=`���\���ݼ�5��
�7��(M"�hu�;cÂ<Ė;��q;�����2�{���޿�xuS�C�{�������ػ�
+$�jes���Ǽ�����Ž��(�Z�!���3H����ͽX���
��L6��黩N�<��<�!=I�6=��=�y�=a�0;�ټ:��-�
��;��H<L^>=Ҕ=F�X=N��=N��<�N��?ߍ�(B;�Rj<W<ļuu���=�
+=8�
=4��<�o#�{����\�
+P���(��Y�-<��=l��>�>��>���>Ƨ�>��Z>7z
=)����'NG��=ս��|��Pt� ���G?��@��#>���=��=�+
+=��=��_=8"V<-�k<�;]]���ae(�f�0?�Y��tt��R<��=+0q=�,
=;<�
Q=1K4=�:=b�z=Mά<T\�=<->�f=
�<���<�@�����������������������������������������������������������������������������������������������R�Πc���x��B�=��#>
�0>`�$>8��>0�>@��>
�=Rý�
��a?�
�!�N|��A���y�j���E��������s���3P��\���c�ݒc�
�=��y�Q�߻҂I�fSּ"
��f���Ә�vq�twý@�F�I��CD��
���
�X�i:�n=��cjB�8X
�Lnr�����ƴ���:6�j=n��=��>Jd�>?$?>��=�P:<�G(��JJ��ˍ�ϕҼ�{c�B*���A;F߉;��<a*9;��ѻ����1��6������k��桼�?'�c�����X߸��������w9��-	�ۇ�?BŽ���}��� O����@���Tw=ar=PQP=�
\=���=�e=q
9;��L:�ּ�q;�Q<��,=
�=2��=G�=-e<��*��[���	
��i�;��?�S:��<�I=FФ=ln<΂
��C(�6@��4-�_]y��~
;ҍ�=��
>L��>��t>�-�>ȡ>�7>?=*�ܻ&�f�����.ܽ�|�n����ߚ���J�����EH=Jw�>%��>\IB>I�>,�2=���<��<s�q�c�������׆����@�2p7��C����c�>ć��ȼ0,<
�=�[=K��=��=r�?=y�=
R �8��<!s�=�_�=��$>n������������������������������������������������������������������������������������������������������������⽸����=
�P>um>c� >>sr>l��>A���p/����Ͻ���`
+�Z�;�=o��b������Xܲ��'e��"����R���ʽ ν~��9ӽy��ۼZ$��ǵ��5�ۼ�H�S
�b'��Z�k!�1j��ϼ�{r��I�8�`�H��9���A���zA������C�AD�=��O>Y��>��M>��_>g$$=�N(=-�%���t���۽,�]��)��x���L:��5<��<s�1<|բ;�\���T漲X������q��xм�6I����;�
�
�⻙ ����
+����O��y{B��|�j/��4�o��M+��U�<��<�7�=�+u=��Z>=�=���=!��;��V��t�
|;�

<�u<Ӂj<�i
= w�= �;�� ��\,���w��l#��餼�:i���	;Ȟ-<�99<�ݞ<d(��k��;�%�m��x��>�ݼ�ҧ=6x=ߓ(>��H>��i>��&>���=�U�=Z�D<2����Z�FPս_��5M��,5�����A
��Yz=�֍>S?�>��9>��@>eGN>�*=���=.�X:� ʼy�9� _���y>������;��� ��<4隺�Q��N2=
+8�=��K=�^=�2�=�/=�����
L;�|�=�`!=�1
=�zi>��������������������������������������������������������������������������������������������������������?��e�����K3=諿>2�>x��>Cb�=m��<�?q<5�l��D��粽�;����l����U���r�z��������t��R?��n������H/{�h��"�	9B<3W:uY�9����4�G0j����E,
�R�U�+-!��q���ӽ2`� 
6�犩��_���m��3�
+h�",?<�y�=Ԥ�>�
+>�
[>�S�>�Hs>L�=S,���2T�*O3���F�fn �J��%��9�N<���<�g<��<b��ˈ$�AcA�j;��!��ۓ����:�}�<n
�<��l<�� <j��<[c�<�ـ�i�,�z�5�C�
99�VnT:*E�<�G=��>
 �>4�1>8F>l]=�&�=
��;�D(�z"�.uл*�<:�|<�e�<t<�,H<H����
��o�}�#�YD���X��/�����	�I�O��;� �����w��:�S�2�&E���bR����<!�=eS|>7~%>r5n>�t>A�$=�t�=�k<y&���=���ٺ��ݗ�i�.н��Ľf���t��=���>�&�>��)>���>��j>7�=��[=/��<,Pi����-�;T�<���<��2<�P<-��<��N<�Lû�t<
>�=�I{>)-O>(s�=�!u=g�{�s�:;�:�=��;=�%`=� =��k�����������������������������������������������������������������������������������������������������������������V��<�)3=��>
]�>]�=`;<*޽�����uܾM]�
�΃齯�����
+���Ͻ�T��~`����Q��⮽�W�_듽	�L��>%��̽�fV<�V,;���;�r���w�
�ͽVm4�#�5�����k���񼐬���)��<���}̻�i2��u���O�c6���O��=��G>o�I>�\P>��+>�Z >Ej=2��<C�������<3��d������J����;��<��D<�e�:�
���"J�P�⽞6R�H(y�*i߼0Gһ��t<3��<ɡ�=
 �<�a�<�j�<���<<�;��G��[�;��<)��<���=v�5>��>c�>��>�@=>5o=��,=�
������ý6m
�
6���;�2˻���;9	ϼw�*�ŪǼ;���������-��{���W�|�
m����D��^㼞�>��u�Oy���|��y�{�+�5�
<1�N=��W=�q�>�o=��=na�<ˣ�9����DI��o����+��Q˽,<�Y;-�4nT��Qa=�f	>Y�
>���>�v�>���>
��>�=���<-+�����4�ѻv/=	O
=+.�=
+�$=I�=	�|<�E�<�mG���9�V"=�u�=��=�
e=���:�\��������>1>��>b���������������������������������������������������������������������������������������������������������������������=�>
���S'=��
��m!�]e9�x�F��=Ľ����#���R*���[�Ӗ0��՘��
����������g���L���i�������yp <pmW<_�Żژ񻯼�:g�/CE�P�-�(���ͼy��44>9�(���tֻ.�7��?����g��€�͉�G����p:<�=��x>2�^>�0�>���>^�p>�B=�F��!i�q5���;��*:���������.��<<zuv:����Q�c�#���N��9�an'�1�e��z�N<J"<Ş~=l
+=c�<��=e�p=':d<�C=
P.=Yd�=>�U=M�=��n>!xm>��a>ּ>���>�I=�T<�J�/a��\~���]� M;/.&�0�:��<;��	�_�Ѽ�:�����*�O0:�g�f�;�Q�° �*��l�
+��'ɼȲԽO���1����9���C��<�'��ih�J�<��=�*<���|����L�o��Eѽ2����C$��뗼��0����<K|�� ���F�<lj�>�
>a_�>t	1>Jo!>�(=��=�1J<����E�鼼[��ϼ<��;�DŻ�L�<���='3!<�O< L�:�-���彍U$�ſH<�E�<���;���H����������������������������������������������������������������������������������������������������������������������������������������������o��#
����џ���佽a5ܼE�V�_���Q��0)��W���A���V���M�����݇����D������O�����Y<uP<��
�o0뼆rH�Xr��R�0�Hgӽ	z��G�S�
+;Βu<
:&j�����{��Y����νV���
1^���<�3=�+�=���>#p
+>1V!=�<�=���=4��g�F�DB0�Sx���̽�.⽪2����D�]�Y�x ��a��)p��	���H��S'
+��e�@�/�#���*��Bo�<"ɷ=;�=
�u<��'<�
`=@^=V�r=^�=}<�=�5�=��=��7>0Qa>��u>�M>�/M>��>1\�=
q���<�J#�
i�m�M�
��3A��(��LZ<S��<F�ػe���������꺥����In<1��� �@���7��t�d��� !v�m�彜޿��恽<����N�pb
�{'x�
FF�"_̽.����'Ƀ���̽��`�8���\ټ�U��
���t���:���nT���=*�
=��>-&�> ��=��4=��=�Ծ<����D�����oC�ku.�u�� ,/�5���|�d͆�>�^�OVX�Xu�e����h�;{&�<��S<�����!�������������������������������������������������������������������������������������������������������������������������������������������������A����um��h��
���ɼ�9���U�m
 [...]
���L����+�0_���sH�<�,���=6�=Y�
=��
=��e=�Y�=��=F�;╓���c�Ί�p����ҽ�0��dĽ�޺��e��� �E��idA�H���P}�˳�pO��;��6t/�B��g�]6�<$$�=#�<�v�<m�=�2=Z��=�
=bOh=��1=�"�=��>;[>��>���>�f@>�A�>0��=Y�o<7$<�3X<[��<�:n��5�������!t�=\�D=^H�=+�<?g�<��޹!�b��E�e <�\�<�{n;���:�3<���;���<H8���9�����r潝V���d1��%�p�6�y
+��u/�Y�C�uY����Ľa�����;wp�;n����r콒p�����Ū㽐"v�2P����
<6�=E`�=�
�=�D�=y��<�H`��^���$���н�[]�A8.��_��	��ג2�όI�~��.�@��
��֌O��f.;�5$<�6v<�VU<������������������������������������������������������������������������������������������������������������������������������������������������������������)���+@��⧽
���^��\X�ʱۼ�UF���.��2�d�f��L)���Q �K�ҽE�%�+����<�a弧�N������KU��p��N
�K:;S^S��E�;��<�8ӻ����z{��^��
\��$���_����	�\<_{o=[�=�ҕ=�nA=�ef=��=Ue-<��Ϻʜļ �8�	���K���޽������� [...]
�<���;jMR��	<��=�p�=���=���=�.=L
�<�uĻ��j<qb�=xt<���=/1�=�7=�7 =�x�=���<
l
��t뽎Yɽ��g���ǽ��]�i�&��k��;
��}Խ�߼���<o�W=~T�=���=�Z�=3%��ѽ�$��Q���<P��+
�C	���<�B<�-B=~yK=XQq<�rA���Լ�N5�g�#��攽�fO�Ir��<�F�I����z���G���(�e��l
�&%;n�<�)�<�I>=�X�����������������������������������������������������������������������������������������������������������������������������������������������������������������'1d��-�<��t���<�3i=�HܽNAJ������2��E~h<�Bf��O*��
��ʡ��
mm�8D�=$�n=�h�
Qؽ�����W�3��
+-�<Tح=:~<�N�<�%;��A�
+��<�
{�
#��vV�7@����:�S�<�j�=d��=��[=�&�=�!�=�՛=���<���<@V�;����g0����!��������8�������g罨�
��9སt��}f��_����W1�?�ƽ��q��0a������ϻ�ޯ���V<�	�=w��=�
�=�N�=�F�=�ǽ=Đ�=�H=^�G=��>
�t=�$z=�`�<��)����ej<.$G=ҙ<�lP<�
Ѽ��%���;�k�=�6X=��C=޵.=��=�Ƶ=��S��Te<�$�=4a�=g��=���=��b>Y�>�^�>@J`=�
+v���<�WTu�{�!�R�t��S~�:ܽ�d����
���˽9��<׊�=��a>A�>f�>pC�=�I�=��g�]����rd�I�����;���=6��=�J =(b;��3;ޠ򼚭뼫L�=�9��Ș�z���F��`���������4���A@:��O���'� g���“��u�=$
���������������������������������������������������������������������������������������������������������������������������������������������������������������������������
Z=
��a=�%�=b����;'%��ѽl���� ��q
��1�����裼r
<ό�<�cs���$�W��(�»�|����<�h=l�	=��=3�;<�g2=)<�=!;�<�I�=���1m��$�s���g;��3<�A
=�d�=�ئ=�m�=�H�=�q�=��=\��=9y;=tQ9�
+�z#ӽ����~����
+���+ ��g���~������?��`���|x���缈�,�?�6��m�����7hj���Ѻ�������=!�U=��=�e�> ��>'=�]h=��=��=�،<�A�;���<���<LH��[d��ݼ/����]�;û�<l'<ܤ�;�_ع�G�</�J=�H�=�†=���=�
.=���=��a<��=
��=^��=�݈=���>�`>t�>���>� >0|H=o����
��L���y�l��؟�8�+�-~=���
��_�;�](=�ϖ>e�j>�]?^y>�>���=��<H���	�f�j��a;0��=��>:�
=�ټ=��<��p�Baݼv��c����n��9��
uM�$��I�l������|��_�cͷ�M9
������R��)��:����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������>
�=���=��z�Al����9��$н�Ƚ�S���P
���{�l�(�
<�����)�	�w���4�i3,����<J��=Z@�=�I=��~=q#�=)��=3Q|="l�<����.F�t2<A�u;�'	<���<��=@`/=d�5=�q=�c=��v=�AL=y��<�!<@�f;�%4���˻��ҽ�l影�̽�s���Ƚ��S���/�����ѿ����Km���8*���ټ{����3s��7����H<<pD:c�<=��>1q�>W�>19N>.7=� �=��Q=uM0<-�8�Ƅ`�OEٻ"�
���˼�FS�"�'��o��C�����X;���<
z:;9L�;�G�=+�s=�Č=���=�f=�t�=fC�<���<���=
��=���=�Q�=�JD>j/�>� �>���>t�v=�E����T�yM����[��J6'�N ��<ڽCK
+=}�>1E>�
�?f+?�?@X�>�%>#��=m�)�
گ���j���=���>t��>� �>qxa>] <��R�
tͼO�O�S 2����ށ ��ӻ�Sg�}uI�F�;�����$��`��(MH�
)����?���ʾ�/��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������=��Ǽt���yC#�So��L����<�@H�T}�O3m<"٠;�0h:~w���|S�0�zo�=��<�]�<��A=Q��=���=�4=��==�P=|�=S�9E߽1H+;8�M;O�I����7���=׼=
2Z=�A=\�=C�R=��~=j&�=+m�<S�;��;܇�:�+��bF��\w#���转�����5���-�������ju���Q�_�ż�)�=�<�mɺ©��H�n��Ժj��<� <�M�=���>0�Q>['�>1�.>
�>��=�=|
^;�RG�\m��̈޼���������El�C�9��Zl�|
��װ���ػ�x1<
�g<��='Q'=;�M=�t"=��=�~o=
�<�ަ:�B,;#��;�d�<�X�=qh�>,�>��%>�[�>^/=PvM���%�l5D���ʽ��O���t������=�<�=Nun>�g�?U�t?�[�?�S]?��?
��>3��=�%�<}�ż���<̩�=�\A>�/�>���>�V>RFc=o�;W
.��Qd���=��#�]���/�:�HX�
�S����K�xߌ���X�����ɾ��
r�T߽�Z�������������������������������������������������������������������� [...]
+�;}|'�������S��ϊ<�X=���=�'�>"�>'�=��%=Ѧh=��B<� �;�݂���/HǽYv�Me?��
0�'$-��
��$sؽU�Y�S6��Q�m;9��<н�=+":=3��=�
=y.
=*�I<�X3:�L��ܵƼP����<;��<���=ˎ�>0�>+�S=�'<����0U�O�
���������8>��/���8�����=�SE?I�?ws?ڲ ?��?�s,?A>hL�=��^;�N:�	�;��}=��">DM!>��>��N>r��=��W<�[˺�#����������U��8
�V
��C�;������f���%6�Eu��,�����C���$���}���i����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������3&=���=0@=��<�1 <��V=t�����(�ھ$9��8�$=���>�H=��8=�Q�=���=���>'U�>W�
+>�j<�i+���ܼ¥�� �Һi&V<��һ=
�<��8<�M�=D�==
+�~=
gV<��= w�=8=
�<]T<ʺ#<�
<�N��Av༥���K��!DR����D�
�7�`�#��+J<E-<��p=T�=��=��B=��R=4y���ۼ���A����=:�}=�1> ..=��:=�J�=�(�=��d:q�
�����1)��Z���s�޽BI�����S�ƼBd��(�M�f��#����/�g�V;6��=*Q�=�. =�� =��>=&�*<�(�<~�:�(ɼx at S�r)�;���<��=q
=:>�=F�;�'2��xֽ#GT�C�ٽ�JF��^���<�������5Y�=�?
+EU?�c?�b ?��?�'�?�~>�x9=���;��
�:��[<�6{>bo>+@�>�E�>)=�3=d��<����
�^����8�Լ�0㻷�d���L��:+��N�����|�����;K�
<�}ǽ����X����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������=HҾ=@b�;M��=:�4=5�Ǽ�r��@��������<�x&>0B�=�D=�W�=�>�
>k��>�YH>Eӂ=^�<��#�t k���v:V�+<T��<��<�|�= A�=^3�=x�==
nt<�&�<�S<�
�<ƃf<�[2<��,<�
M<�J;�'�'\P��9�҄
+�	�B�
���2�a���	��<ɷ=�0=�@x>C>+�D=���=gͼ�x[�����N��"ۻ���=/,�=�ƅ=�͒=�8�=���=:$
;u�J��?�O����P���ӽLͫ��t�����J��.��+�����()��(;\2!<�o�=_7=��D=���<g��;�����9��7�\�O&���
<�^E<�jw<2���*�����
G��'�8�G樽Ub��h���0��h���$����J��=)g>�O�?niY?�B�?�9�?��[?;�>�j[=BEI��̚��
�5ܺ�I�<�33=��7>Wt>��=q�Y=`��<c�;y��;�'�<O5'<L�s��y���x��|��P?�������|��F��R��82��(�/{+���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [...]
�=
3�==f�<rw�����鼌����'��@Q<N�<��
������[��2p��X�Y�<�6�B��^}F�]�a���j��&p��P���ǽ[�c�$e
>~�>��"?Z�?���?YI�>�k�=�
+;����Q3�3M�#�$[;��h=�=J��=E�<��<.�.<*h ��a.<�!�=��=��N<�6i���@�}��?��\�>�+����;��$��u^��g��:0��)�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������q�<��":���=�g�����6żo	
=���=�`2=yt�=�]�>%�H>;X>=�g�=7n�<�R2<�;J���;S�7<�ܡ<��<��8<�h!<���<�BY=:��<�u[��h]<�N;�L<k�T<���=��<�1M;�E�FI'�j�ɼ?!x�
1_�����> [...]
+��n ��9
;}��<��=��K>J�=�n�=�
�=��r=��=p��=3T'=�Y�=$�_<�}<�LO<�nt<���<G���Wt<��<��-;��E� VT;XCR<�y�=jW�=R�=#р<ЈX:�2�8�:�k��P
�����G�8W�=��=�-=�<.=l�!=_DY=T��<��Y��k� �Ƚc�4��%�<��=��s>(�->/�>��=�
�=�+�<�D
�'�=��{��I]޽fe�4�ýqr������۽
�ԽK[V�Fd �ȖR��+�,�˼�l�J
(:j at l��]E���n�Y�:��mӽ�P:�~Jh�RF_��o������.���×�Z���H<E�'�����*�;�O"�MJֽH%	���9����ܤ꽶�S��=oz>A��>t�g=�ɶ=F�C;�u]����싡��
Y��������}Ȝ�|�)�7<����|�\�}���?�軳�(=f�>E�t>gI>8\�=�a�;��>�W at v�����o&=fG�=OuI=?d.�G1��]�½�c�ɭ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [...]
+=U�=���=/�8<zS.<ih�<
,���ㆼ��B����,v<'�>=��>�>��>0=��=�P
=���,��D�� �G�
y�v"(�:��e$X�
��,��}�5���7���i>���WU�U4Q�܎��|��昘�'-��Y���0��`u����a̰�8�Ѽ��=�(
�睓�)�������	��r1;����K�X������-ѽ�����"d��`ֽ�f��jcC<��<ލ�<�>R�0K�_���彣"��F�������W�F���.���N5i��V��ɠ
�+ 
�O��Ǒ�<�<�>;">T">��>�=�B�;�*�K��gk�q�<��X<�u:<��j<�O;�D�a��c�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ap��,�A��I;<���=0��=c	�<��
��c��|��@A�=&U=l��=�=|=`�<��'<!S��B�ؼ [...]
+.��M��@Kh���Ͻh��Cd&�2�p��;���0�=C�Xs���Y��%���
��S���V������A���`@��Kb��O�.
��Y��ֳ���	��Vݽ�1��3��od��-�n�ɽP�r��m���ܽ�Ê�y;�{
�>
>
_�>o�=��{=�
<��)��e����w�����tW�2�ǾD��<���<u�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������)g�J�`�(^<u�=��O=�h�=U"�=Ѽ(=w�b���X=:�O=�S
=�ݎ= ��ZO~���ɼ��D�,�
+�\�i�N/<	�<�8j�T?;��<;�u;�aQ<33)<Mw����g~�;t�f�@i)�=��;�\p=H�<�n<���<��<0���u�z;~k���BӼ]�~:���<�
<J�<f
0<Ԛ�<��b<��;�d;��,���ڻ��ɼ���85��Ȝ=�͋]������ҽ����������0$����M�4���՝�.�D�2u!�1�v���*S��1
+�F�<��
/���'���z�6#��/P��q&�^�ü�]�@��������0�-���a��޽9ὍRB�����^4��_�
��
����R+�v�&����f���`�1`ɽ�zg�ܮ���1��	p��J>��&
�c�Q	�1,��Aw������ڽ�^꼺9]�s��= t)=U�
=1b<���s�ü{ޟ�@׽�Ww�蔞�#-u�H���M
G�a�V�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
+i�A�<�֝=b�h=Q�R=��=���=��]<��<�I=&[�=y8=%);��ڽ�bv�@�������4ܽ>P���u:���m����먻�;B:C�<�h<�e���;�
�<�3
<
�X<W��<��=5>y<���<�޳;Ϳ�R0 ���,��}�o�ż��a�v�;շi<�ev<H=�<u��;�#5�Dc�{S��jXͽ8�w�9
�g(�A�����
]�nԼ�?�y�]��:�����+��0���/@���dd�
��(G5�A}�EK�
�<�B�<���<�F�<�\X<���<���<O
+�<��;��
��
y�
�ڼJ(�ⓤ<��<&}F�
�,�	x[��kj�.�Q�K�ȽJ�
��9��l�G6����ż��E�i;�8w<�Q����N��4��4a��wr��`ҽ�Ǜ�4�
�G���C&
�N�����`�������νI<��ӧ�μ��	;���#��1J�'#�t�����Z�<��:pѾJB��;oѾ>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������=
�=��q={��=��:=���=�n1=9�=�=|�c</�U=
��:����nM�r]����q����*+ҽ;Ve;	
m;�+t=��<�
�:pY�;���<�$c;''��y�;�v=Zl#</��<~-_=*�2=*f<w�</C�81��9�=��!�)]�g���7p\�X�(���;!��<4��9߮�D5^������B���=��2��;�e� \�����<�*�_
+����{�5�����6���(��UL�M(߽*r����t��z�ޘ�)�<,�b=4<���=��=�*�=�7�=���=��
=���=2~~<����2�;�::=l<:=|`=o��<�/�۾��Kk���Q�H�s$�uG\��O��?!��C���1�0)<�p<�,<eq�:��'�eQ��`lT�\�I�l���7���(��
+#�,&w�;.��b_�Ym½/�<�P�c�9k��}q���֍�Mٍ�:nýBW����s���_��
x��+i�P��]B�Q!������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������=���=��R=��i=�m}=�c=�=*d
=��-�n�r��]� �U��塽	x:�z[~�~X�e7;��q�
+h��Q�<���<��%;��2;4�<���?�2���Ԟ
+=Uo<`�<�x�=
&�=-�a<Ɔ�;2
+>����UN��6�۽T�\�}x<���|�4^
��>U�$�;q�V����_z��a������'D�?p��C�j�4KN���Ӽ�~����
+
+�L�t���K��N���'��l��?K�����	���%�߻�3
<���=�8[> ��=ܔ2=���>IlC>Ig�>M�O>/`�=��#<�t+;P��<ã<���=�9�=���=��*=��r�ǥ�C�l�tYV�TCR�Z�a��ٽ�Z>��߻���
��IJ<sO�<��4<���=(<'鯼����MԽ�'�����P�Ʃ�����
=�+1��T�=�_#;�C���G�;xg��:i���,�_��������	���>��T�������/�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [...]
+��<FE<���=)���]d �����
<b�<H�];�څ<���=:�;��;�;wrr�T
��n�"N�!���P������!���k:;���;�`��JؽyՓ��eM��@�.�j�)Q��)x�� w¼�}i�Æ-��^���KX��X���cig��敽���

��?��Cf����:�LA=�/>,��>A	�>9]>�e�>���>�a>��	>��
>�=��7<.�o�#4L<���=�IL=�.�=�":=N�ĻL�l�W��j����Q�g���.b�0�Ľ$�R��z̼����̈�?e
<[<�=%t=E�	=
_��=��[�M������eܽ.Yy�Ӹy��T��8C��.:0���s�[^'�-ꎼ��V� Q�����<!��;q����Ft�O>$�y��������Î���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [...]
+�>���k\���<��U�����p�����<��M>�&>�ӹ?'g�?K��?u/�?H-?"�>�g>�^�>e�=��q;� ��"å9�S�=�=|<=�k�<_һ�9���$$�E�Y�r|,�}���'�N�j���'��6Լ�.���z���:�
&F<Q�= �=(��;�J(���.���Y����`��[� ~e���^�TyԽ�.6���\�<9�<�9T=1��=_��=
�;�����:�����0+L�1�Ͻ&(q����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [...]
�Z,k��r��ʉe��|Q���D��).��ʋ=���>��
>�D?��N at 60�@5m�@6,�?�z�?7�>�:�>n��=��4<pN��]���N
+�<o� <�����
n�w{���[�SA�y_a�x�����߼�1��f������2�.$L�f�˽	C>���(;.`}�
�S������?
��˼d ʼ��x��i��ͽ�C��=��qi�<�S�=i��=�Z�=�ge=fϱ���ɽ��H�!	z�	]��[��E=��ޭ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������>HG�=���=Py&��O
�g���۾�����
� ɶ�0,���Ҽ�W!�ȌR��9ٽ��n�d<~�E�ּ��μ�خ��2��)�i���(��{���r6�3[?<Hq�<{0�<�{7;�p<
��;
�D���Ľ$���K�P�{��X����\��K���������ҍ����)<�t8<�,<:O�<��X=��=
��<O�<&�T��
+F��ټ�,?�f8��� ��A��I����z�l{=���>��+?�W@5�U@��p@�=R@�
a@]
H?�=;>��>y�=�\i<"^���
ǽYf
�6n���������s����!�c	��_��c��W��������2���i��/׼�����x�-W��������&���[l��
n�ʂb�P½P�v�G�;
�<��Y<h�!���⽁��g8��F
�<��&=!R�=V�q>�=�,=�
+�<���@���m�z�����F���0����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������=){�C뽅�)y���|��4��i>Ѽ�\?�Ij��$!�8���B
��o��~Sq�C�z�)ѭ�Q�
�tm��q�4��!������O��}c6�kf<_�;;�p�;r�P�b8뽆�
���U��^�D����g���¼�n��
<W�F����
�V;�ĵ=qI=LW�=_��=F�a<�:<�%f<z.�����ٻȼ�K������p���'�nq����m=K�E>�?�?�O�@��A
+��A0�SA-�@���?պT?�">t�=��:�kڽ7�Ƚ��{��愽�� ��ͽ�
���aܽ��w����,퇽����1X�� 3���#���V���;�h����3����f" �
����EY������a��	�����s^<�S);8�f<���<���<�1g�"A*���v;S]�=v	�=�EM>:��>�j>g�������*�,��w�U�¼����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ϾG
���t=a���7�C��à [...]
+;��2���'�Ll��l/�oam�b.��U ���;K4�<ARL<�w�<�S0<A�y��+:���^x��rN�f>��>p4�>U��>�����������������!�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
��὎8��8Ai���^�b��=y�F���qB+�C
k���8<�=��Y��@���>ֽf׽
s [...]
+���c���H�J�T:%�^=D/Z=�
+�?���@��8A�pAHE�AI
�@��@'$d?NJ�>M�=�`�:Bl>����L
ʽ�~��U佻����"������\�d&�~ͩ�'��5�F�����C�;���=,�= I�=3�1<��H<q�}�,Q�ʘ!���v�q�!��Ÿ���$���k;R�<�B <���;�8�<��!��0L�=vc=��=�v�>��>fQ>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [...]
+��Q������`���J��Ɩ��T���n���o�
$�>"�l���cL��Q<
�+=b�=R�:=x|�=)�<
� <�*;��G�'�q��V��%'���⽗�s�'��;��=.^�=؄9?k^@g�$@�l�A��A�o@���@�?�c>3ɕ=�YD<f�V��S��b�	��t�Eݽ������
+�����IK��<ƽ[���9p:�ې<��<�p�<���;�!q<��=7=[��=
�<��9<,B缷FJ�.�w���7;�w�<�4y<;�L;��,�;�=3;��3:�s��/�[�&7I;[C=�gE>j1=��,=��=���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������n뽜�!=/ [...]
+���*�H���S�R�XZ���<��Z���Ľ����L�F����ý��ѽ��t�����`�׽>E
�O�J���2Ϝ:��;�V�<�u�=
�v<������2;�A�<T|�;�׼�
���jX�ʺ$��ij�
+�0�
5�=~
L=p��>jߺ?���@j�;@�޶@�u at 6( ?�VE>�d>5=��<�s�����R�b��{��$Y�����ѝ���\��*������Z���֐:;�
=qq<��\;�u�<��<�m�<��M=�
=,��<�,��|>���K�N";<�<a�%<�E�=O$=d��=��x=�
<_�+<]�λ�T�<Ȭ=�'>">��a>���=��{=�>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� [...]
+���D�Fo�ko<�/W�I��c[;-n+;_
<M��<�i�=<�&<�q��D� ���뼭�Q�a�<RRd<��=��= 
<=��y=�_�=�S�=íU>)Nc<�N!=�6k>��t>�Zf>��>��	=�JC������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������܆�
 [...]
+<�iS�7I��b�k��
+]�<��<�s�<�q0�O㽕�\��
�<X��<���ȅ��j'�<4N=s5=
�t�!)���Ľ\ܽ?@ؽ	Ἴ�мẦ�S
��﫻�p��4 ��ˈ�;D�<:��ݼS��C<���#�������9�*��V ��S���Ϊ���{<��}=82M=�](>W�|>qt>�؅>z�>���>���>)��>Rg=��<��%��ȕ��LὊɢ��Un��~���uJ��*���������Խ�N�䭼�E���]�E��0���K��2ۢ;�y�<���;*�[�Č0�!�ϼϔ-����;�
W<J5�<�<?к=���=�c�=�
+c>
o><�=��m=���>�Ow>�s�>��#=�+�����������������������������������������������������������������������������������������������������������������                                                                                                                                                                                                                                                                                                                                                            [...]
\ No newline at end of file
diff --git a/astropy/wcs/tests/__init__.py b/astropy/modeling/tests/data/__init__.py
similarity index 51%
copy from astropy/wcs/tests/__init__.py
copy to astropy/modeling/tests/data/__init__.py
index 975bdd1..aa20e55 100644
--- a/astropy/wcs/tests/__init__.py
+++ b/astropy/modeling/tests/data/__init__.py
@@ -1,2 +1,4 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+import os
 
+dpath = os.path.split(os.path.abspath(__file__))[0]
diff --git a/astropy/modeling/tests/data/idcompspec.fits b/astropy/modeling/tests/data/idcompspec.fits
new file mode 100644
index 0000000..d79ba3f
--- /dev/null
+++ b/astropy/modeling/tests/data/idcompspec.fits
@@ -0,0 +1,36 @@
+# Thu 16:08:18 31-Mar-2011
+begin	identify compspec.fits[1] - Ap 1
+	id	compspec.fits[1]
+	task	identify
+	image	compspec.fits[1] - Ap 1
+	aperture	1
+	aplow	INDEF
+	aphigh	INDEF
+	units	Angstroms
+	features	7
+	        404.10 3888.54757   3888.646   4.0 1 1 HeI
+	        544.09 4045.50261   4044.418   4.0 1 1 AI(4)
+	        571.51 4076.76389    4077.81   4.0 1 1 
+	        813.59 4358.40117    4358.34   4.0 1 1 
+	       1720.36 5460.75353    5460.75   4.0 1 1 
+	       1966.66 5769.52138    5769.59   4.0 1 1 
+	       1983.41 5790.75384    5790.69   4.0 1 1 
+	function chebyshev
+	order 5
+	sample *
+	naverage 1
+	niterate 0
+	low_reject 3.
+	high_reject 3.
+	grow 0.
+	coefficients	9
+		1.
+		5.
+		404.0984802246094
+		1983.410888671875
+		4826.104189057136
+		952.8936304314716
+		12.6431161257298
+		-1.790494280706627
+		0.9034001474192017
+
diff --git a/astropy/modeling/tests/example_models.py b/astropy/modeling/tests/example_models.py
new file mode 100644
index 0000000..1f7eb4b
--- /dev/null
+++ b/astropy/modeling/tests/example_models.py
@@ -0,0 +1,289 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+Here are all the test parameters and values for the ParametricModels
+defined. There is a dictionary for 1D and a dictionary for 2D models.
+
+Explanation of keywords of the dictionaries:
+
+"parameters" : list or dict
+    Model parameters, the model is tested with. Make sure you keep the right
+    order.  For polynomials you can also use a dict to specify the
+    coefficients. See examples below.
+
+"x_values" : list
+    x values where the model is evaluated.
+
+"y_values" : list
+    Reference y values for the in x_values given positions.
+
+"z_values" : list
+    Reference z values for the in x_values and y_values given positions.
+    (2D model option)
+
+"x_lim" : list
+    x test range for the model fitter. Depending on the model this can differ
+    e.g. the PowerLaw model should be tested over a few magnitudes.
+
+"y_lim" : list
+    y test range for the model fitter. Depending on the model this can differ
+    e.g. the PowerLaw model should be tested over a few magnitudes.  (2D model
+    option)
+
+"log_fit" : bool
+    PowerLaw models should be tested over a few magnitudes. So log_fit should
+    be true.
+
+"requires_scipy" : bool
+    If a model requires scipy (Bessel functions etc.) set this flag.
+
+"integral" : float
+    Approximate value of the integral in the range x_lim (and y_lim).
+
+"deriv_parameters" : list
+    If given the test of the derivative will use these parameters to create a
+    model (optional)
+
+"deriv_initial" : list
+    If given the test of the derivative will use these parameters as initial
+    values for the fit (optional)
+"""
+
+from ..functional_models import (
+    Gaussian1D, Sine1D, Box1D, Linear1D, Lorentz1D,
+    MexicanHat1D, Trapezoid1D, Const1D, Beta1D,
+    Gaussian2D, Const2D, Box2D, MexicanHat2D,
+    TrapezoidDisk2D, AiryDisk2D, Beta2D, Disk2D,
+    Ring2D)
+from ..polynomial import Polynomial1D, Polynomial2D
+from ..powerlaws import (
+    PowerLaw1D, BrokenPowerLaw1D, ExponentialCutoffPowerLaw1D,
+    LogParabola1D)
+import numpy as np
+
+#1D Models
+models_1D = {
+    Gaussian1D: {
+        'parameters': [1, 0, 1],
+        'x_values': [0, np.sqrt(2), -np.sqrt(2)],
+        'y_values': [1.0, 0.367879, 0.367879],
+        'x_lim': [-10, 10],
+        'integral': np.sqrt(2 * np.pi)
+    },
+
+    Sine1D: {
+        'parameters': [1, 0.1],
+        'x_values': [0, 2.5],
+        'y_values': [0, 1],
+        'x_lim': [-10, 10],
+        'integral': 0
+    },
+
+    Box1D: {
+        'parameters': [1, 0, 10],
+        'x_values': [-5, 5, 0, -10, 10],
+        'y_values': [1, 1, 1, 0, 0],
+        'x_lim': [-10, 10],
+        'integral': 10
+    },
+
+    Linear1D: {
+        'parameters': [1, 0],
+        'x_values': [0, np.pi, 42, -1],
+        'y_values': [0, np.pi, 42, -1],
+        'x_lim': [-10, 10],
+        'integral': 0
+    },
+
+    Lorentz1D: {
+        'parameters': [1, 0, 1],
+        'x_values': [0, -1, 1, 0.5, -0.5],
+        'y_values': [1., 0.2, 0.2, 0.5, 0.5],
+        'x_lim': [-10, 10],
+        'integral': 1
+    },
+
+    MexicanHat1D: {
+        'parameters': [1, 0, 1],
+        'x_values': [0, 1, -1, 3, -3],
+        'y_values': [1.0, 0.0, 0.0, -0.088872, -0.088872],
+        'x_lim': [-20, 20],
+        'integral': 0
+    },
+
+    Trapezoid1D: {
+        'parameters': [1, 0, 2, 1],
+        'x_values': [0, 1, -1, 1.5, -1.5, 2, 2],
+        'y_values': [1, 1, 1, 0.5, 0.5, 0, 0],
+        'x_lim': [-10, 10],
+        'integral': 3
+    },
+
+    Const1D: {
+        'parameters': [1],
+        'x_values': [-1, 1, np.pi, -42., 0],
+        'y_values': [1, 1, 1, 1, 1],
+        'x_lim': [-10, 10],
+        'integral': 20
+    },
+
+    Beta1D: {
+        'parameters': [1, 0, 1, 2],
+        'x_values': [0, 1, -1, 3, -3],
+        'y_values': [1.0, 0.25, 0.25, 0.01, 0.01],
+        'x_lim': [-10, 10],
+        'integral': 1,
+        'deriv_parameters': [23.4, 1.2, 2.1, 2.3],
+        'deriv_initial': [10, 1, 1, 1]
+    },
+
+    PowerLaw1D: {
+        'parameters': [1, 1, 2],
+        'constraints': {'fixed': {'x_0': True}},
+        'x_values': [1, 10, 100],
+        'y_values': [1.0, 0.01, 0.0001],
+        'x_lim': [1, 10],
+        'log_fit': True,
+        'integral': 0.99
+    },
+
+    BrokenPowerLaw1D: {
+        'parameters': [1, 1, 2, 3],
+        'constraints': {'fixed': {'x_break': True}},
+        'x_values': [0.1, 1, 10, 100],
+        'y_values': [1e2, 1.0, 1e-3, 1e-6],
+        'x_lim': [0.1, 100],
+        'log_fit': True
+    },
+
+    ExponentialCutoffPowerLaw1D: {
+        'parameters': [1, 1, 2, 3],
+        'constraints': {'fixed': {'x_0': True}},
+        'x_values': [0.1, 1, 10, 100],
+        'y_values': [9.67216100e+01, 7.16531311e-01, 3.56739933e-04,
+                     3.33823780e-19],
+        'x_lim': [0.01, 100],
+        'log_fit': True
+    },
+
+    LogParabola1D: {
+        'parameters': [1, 2, 3, 0.1],
+        'constraints': {'fixed': {'x_0': True}},
+        'x_values': [0.1, 1, 10, 100],
+        'y_values': [3.26089063e+03, 7.62472488e+00, 6.17440488e-03,
+                     1.73160572e-06],
+        'x_lim': [0.1, 100],
+        'log_fit': True
+    },
+
+    Polynomial1D: {
+        'parameters': {'degree': 2, 'c0': 1., 'c1': 1., 'c2': 1.},
+        'x_values': [1, 10, 100],
+        'y_values': [3, 111, 10101],
+        'x_lim': [-3, 3]
+    }
+}
+
+
+#2D Models
+models_2D = {
+    Gaussian2D: {
+        'parameters': [1, 0, 0, 1, 1],
+        'constraints': {'fixed': {'theta': True}},
+        'x_values': [0, np.sqrt(2), -np.sqrt(2)],
+        'y_values': [0, np.sqrt(2), -np.sqrt(2)],
+        'z_values': [1, 1. / np.exp(1) ** 2, 1. / np.exp(1) ** 2],
+        'x_lim': [-10, 10],
+        'y_lim': [-10, 10],
+        'integral': 2 * np.pi,
+        'deriv_parameters': [137., 5.1, 5.4, 1.5, 2., np.pi/4],
+        'deriv_initial': [10, 5, 5, 4, 4, .5]
+    },
+
+    Const2D: {
+        'parameters': [1],
+        'x_values': [-1, 1, np.pi, -42., 0],
+        'y_values': [0, 1, 42, np.pi, -1],
+        'z_values': [1, 1, 1, 1, 1],
+        'x_lim': [-10, 10],
+        'y_lim': [-10, 10],
+        'integral': 400
+    },
+
+    Box2D: {
+        'parameters': [1, 0, 0, 10, 10],
+        'x_values': [-5, 5, -5, 5, 0, -10, 10],
+        'y_values': [-5, 5, 0, 0, 0, -10, 10],
+        'z_values': [1, 1, 1, 1, 1, 0, 0],
+        'x_lim': [-10, 10],
+        'y_lim': [-10, 10],
+        'integral': 100
+    },
+
+    MexicanHat2D: {
+        'parameters': [1, 0, 0, 1],
+        'x_values': [0, 0, 0, 0, 0, 1, -1, 3, -3],
+        'y_values': [0, 1, -1, 3, -3, 0, 0, 0, 0],
+        'z_values': [1.0, 0.303265, 0.303265, -0.038881, -0.038881,
+                     0.303265, 0.303265, -0.038881, -0.038881],
+        'x_lim': [-10, 11],
+        'y_lim': [-10, 11],
+        'integral': 0
+    },
+
+    TrapezoidDisk2D: {
+        'parameters': [1, 0, 0, 1, 1],
+        'x_values': [0, 0.5, 0, 1.5],
+        'y_values': [0, 0.5, 1.5, 0],
+        'z_values': [1, 1, 0.5, 0.5],
+        'x_lim': [-3, 3],
+        'y_lim': [-3, 3]
+    },
+
+    AiryDisk2D: {
+        'parameters': [1, 0, 0, 1],
+        'x_values': [0, 1, -1, -0.5, -0.5],
+        'y_values': [0, -1, 0.5, 0.5, -0.5],
+        'z_values': [1, 0.0033517, 6.2087723e-7, 0.0093876119, 0.0093876119],
+        'x_lim': [-10, 10],
+        'y_lim': [-10, 10],
+        'requires_scipy': True
+    },
+
+    Beta2D: {
+        'parameters': [1, 0, 0, 1, 2],
+        'x_values': [0, 1, -1, 3, -3],
+        'y_values': [0, -1, 3, 1, -3],
+        'z_values': [1.0, 0.111111, 0.008264, 0.008264, 0.00277],
+        'x_lim': [-3, 3],
+        'y_lim': [-3, 3]
+    },
+
+    Polynomial2D: {
+        'parameters': {'degree': 1, 'c0_0': 1., 'c1_0': 1., 'c0_1': 1.},
+        'x_values': [1, 2, 3],
+        'y_values': [1, 3, 2],
+        'z_values': [3, 6, 6],
+        'x_lim': [1, 100],
+        'y_lim': [1, 100]
+    },
+
+    Disk2D: {
+        'parameters': [1, 0, 0, 5],
+        'x_values': [-5, 5, -5, 5, 0, -10, 10],
+        'y_values': [-5, 5, 0, 0, 0, -10, 10],
+        'z_values': [0, 0, 1, 1, 1, 0, 0],
+        'x_lim': [-10, 10],
+        'y_lim': [-10, 10],
+        'integral': np.pi * 5 ** 2
+    },
+
+    Ring2D: {
+        'parameters': [1, 0, 0, 5, 5],
+        'x_values': [-5, 5, -5, 5, 0, -10, 10],
+        'y_values': [-5, 5, 0, 0, 0, -10, 10],
+        'z_values': [1, 1, 1, 1, 0, 0, 0],
+        'x_lim': [-10, 10],
+        'y_lim': [-10, 10],
+        'integral': np.pi * (10 ** 2 - 5 ** 2)
+    }
+}
diff --git a/astropy/modeling/tests/irafutil.py b/astropy/modeling/tests/irafutil.py
new file mode 100644
index 0000000..a374ace
--- /dev/null
+++ b/astropy/modeling/tests/irafutil.py
@@ -0,0 +1,262 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+This module provides functions to help with testing against iraf tasks
+"""
+from __future__ import division
+from ...logger import log
+import numpy as np
+
+
+iraf_models_map = {1.: 'Chebyshev',
+                   2.: 'Legendre',
+                   3.: 'Spline3',
+                   4.: 'Spline1'}
+
+
+def get_records(fname):
+    """
+    Read the records of an IRAF database file into a python list
+
+    Parameters
+    ----------
+    fname : str
+           name of an IRAF database file
+
+    Returns
+    -------
+        A list of records
+    """
+    f = open(fname)
+    dtb = f.read()
+    f.close()
+    recs = dtb.split('begin')[1:]
+    records = [Record(r) for r in recs]
+    return records
+
+
+def get_database_string(fname):
+    """
+    Read an IRAF database file
+
+    Parameters
+    ----------
+    fname : str
+          name of an IRAF database file
+
+    Returns
+    -------
+        the database file as a string
+    """
+    f = open(fname)
+    dtb = f.read()
+    f.close()
+    return dtb
+
+
+class Record(object):
+
+    """
+    A base class for all records - represents an IRAF database record
+
+    Attributes
+    ----------
+    recstr: string
+            the record as a string
+    fields: dict
+            the fields in the record
+    taskname: string
+            the name of the task which created the database file
+    """
+    def __init__(self, recstr):
+        self.recstr = recstr
+        self.fields = self.get_fields()
+        self.taskname = self.get_task_name()
+
+    def aslist(self):
+        reclist = self.recstr.split('\n')
+        reclist = [l.strip() for l in reclist]
+        [reclist.remove(l) for l in reclist if len(l) == 0]
+        return reclist
+
+    def get_fields(self):
+        # read record fields as an array
+        fields = {}
+        flist = self.aslist()
+        numfields = len(flist)
+        for i in range(numfields):
+            line = flist[i]
+            if line and line[0].isalpha():
+                field = line.split()
+                if i + 1 < numfields:
+                    if not flist[i + 1][0].isalpha():
+                        fields[field[0]] = self.read_array_field(
+                            flist[i:i + int(field[1]) + 1])
+                    else:
+                        fields[field[0]] = " ".join(s for s in field[1:])
+                else:
+                    fields[field[0]] = " ".join(s for s in field[1:])
+            else:
+                continue
+        return fields
+
+    def get_task_name(self):
+        try:
+            return self.fields['task']
+        except KeyError:
+            return None
+
+    def read_array_field(self, fieldlist):
+        # Turn an iraf record array field into a numpy array
+        fieldline = [l.split() for l in fieldlist[1:]]
+        # take only the first 3 columns
+        # identify writes also strings at the end of some field lines
+        xyz = [l[:3] for l in fieldline]
+        try:
+            farr = np.array(xyz)
+        except:
+            log.debug("Could not read array field %s" % fieldlist[0].split()[0])
+        return farr.astype(np.float64)
+
+
+class IdentifyRecord(Record):
+
+    """
+    Represents a database record for the onedspec.identify task
+
+    Attributes
+    ----------
+    x: array
+       the X values of the identified features
+       this represents values on axis1 (image rows)
+    y: int
+       the Y values of the identified features
+       (image columns)
+    z: array
+       the values which X maps into
+    modelname: string
+        the function used to fit the data
+    nterms: int
+        degree of the polynomial which was fit to the data
+        in IRAF this is the number of coefficients, not the order
+    mrange: list
+        the range of the data
+    coeff: array
+        function (modelname) coefficients
+    """
+    def __init__(self, recstr):
+        super(IdentifyRecord, self).__init__(recstr)
+        self._flatcoeff = self.fields['coefficients'].flatten()
+        self.x = self.fields['features'][:, 0]
+        self.y = self.get_ydata()
+        self.z = self.fields['features'][:, 1]
+        self.modelname = self.get_model_name()
+        self.nterms = self.get_nterms()
+        self.mrange = self.get_range()
+        self.coeff = self.get_coeff()
+
+    def get_model_name(self):
+        return iraf_models_map[self._flatcoeff[0]]
+
+    def get_nterms(self):
+        return self._flatcoeff[1]
+
+    def get_range(self):
+        low = self._flatcoeff[2]
+        high = self._flatcoeff[3]
+        return [low, high]
+
+    def get_coeff(self):
+        return self._flatcoeff[4:]
+
+    def get_ydata(self):
+        image = self.fields['image']
+        left = image.find('[') + 1
+        right = image.find(']')
+        section = image[left:right]
+        if ',' in section:
+            yind = image.find(',') + 1
+            return int(image[yind:-1])
+        else:
+            return int(section)
+
+
+class FitcoordsRecord(Record):
+
+    """
+    Represents a database record for the longslit.fitccords task
+
+    Attributes
+    ----------
+    modelname: string
+        the function used to fit the data
+    xorder: int
+        number of terms in x
+    yorder: int
+        number of terms in y
+    xbounds: list
+        data range in x
+    ybounds: list
+        data range in y
+    coeff: array
+        function coefficients
+
+    """
+    def __init__(self, recstr):
+        super(FitcoordsRecord, self).__init__(recstr)
+        self._surface = self.fields['surface'].flatten()
+        self.modelname = iraf_models_map[self._surface[0]]
+        self.xorder = self._surface[1]
+        self.yorder = self._surface[2]
+        self.xbounds = [self._surface[4], self._surface[5]]
+        self.ybounds = [self._surface[6], self._surface[7]]
+        self.coeff = self.get_coeff()
+
+    def get_coeff(self):
+        return self._surface[8:]
+
+
+class IDB(object):
+
+    """
+    Base class for an IRAF identify database
+
+    Attributes
+    ----------
+    records: list
+             a list of all `IdentifyRecord` in the database
+    numrecords: int
+             number of records
+    """
+    def __init__(self, dtbstr):
+        self.records = [IdentifyRecord(rstr) for rstr in self.aslist(dtbstr)]
+        self.numrecords = len(self.records)
+
+    def aslist(self, dtb):
+        # return a list of records
+        # if the first one is a comment remove it from the list
+        rl = dtb.split('begin')
+        try:
+            rl0 = rl[0].split('\n')
+        except:
+            return rl
+        if len(rl0) == 2 and rl0[0].startswith('#') and not rl0[1].strip():
+            return rl[1:]
+        else:
+            return rl
+
+
+class ReidentifyRecord(IDB):
+
+    """
+    Represents a database record for the onedspec.reidentify task
+    """
+    def __init__(self, databasestr):
+        super(ReidentifyRecord, self).__init__(databasestr)
+        self.x = np.array([r.x for r in self.records])
+        self.y = self.get_ydata()
+        self.z = np.array([r.z for r in self.records])
+
+    def get_ydata(self):
+        y = np.ones(self.x.shape)
+        y = y * np.array([r.y for r in self.records])[:, np.newaxis]
+        return y
diff --git a/astropy/modeling/tests/test_constraints.py b/astropy/modeling/tests/test_constraints.py
new file mode 100644
index 0000000..99e58f1
--- /dev/null
+++ b/astropy/modeling/tests/test_constraints.py
@@ -0,0 +1,287 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import division
+import types
+from .. import models
+from .. import fitting
+import numpy as np
+from numpy.testing import utils
+from numpy.random import RandomState
+from ...tests.helper import pytest
+
+try:
+    from scipy import optimize
+    HAS_SCIPY = True
+except ImportError:
+    HAS_SCIPY = False
+
+
+class TestNonLinearConstraints(object):
+
+    def setup_class(self):
+        self.g1 = models.Gaussian1D(10, 14.9, stddev=.3)
+        self.g2 = models.Gaussian1D(10, 13, stddev=.4)
+        self.x = np.arange(10, 20, .1)
+        self.y1 = self.g1(self.x)
+        self.y2 = self.g2(self.x)
+        rsn = RandomState(1234567890)
+        self.n = rsn.randn(100)
+        self.ny1 = self.y1 + 2 * self.n
+        self.ny2 = self.y2 + 2 * self.n
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    def test_fixed_par(self):
+        g1 = models.Gaussian1D(10, mean=14.9, stddev=.3, fixed={'amplitude': True})
+        fitter = fitting.NonLinearLSQFitter()
+        model = fitter(g1, self.x, self.ny1)
+        assert model.amplitude.value == 10
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    def test_tied_par(self):
+
+        def tied(model):
+            mean = 50 * model.stddev
+            return mean
+        g1 = models.Gaussian1D(10, mean=14.9, stddev=.3, tied={'mean': tied})
+        fitter = fitting.NonLinearLSQFitter()
+        model = fitter(g1,self.x, self.ny1)
+        utils.assert_allclose(model.mean.value, 50 * model.stddev, rtol=10 ** (-5))
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    def test_joint_fitter(self):
+        g1 = models.Gaussian1D(10, 14.9, stddev=.3)
+        g2 = models.Gaussian1D(10, 13, stddev=.4)
+        jf = fitting.JointFitter([g1, g2], {g1: ['amplitude'],
+                                            g2: ['amplitude']}, [9.8])
+        x = np.arange(10, 20, .1)
+        y1 = g1(x)
+        y2 = g2(x)
+        n = np.random.randn(100)
+        ny1 = y1 + 2 * n
+        ny2 = y2 + 2 * n
+        jf(x, ny1, x, ny2)
+        p1 = [14.9, .3]
+        p2 = [13, .4]
+        A = 9.8
+        p = np.r_[A, p1, p2]
+        compmodel = lambda A, p, x: A * np.exp(-0.5 / p[1] ** 2 * (x - p[0]) ** 2)
+        errf = lambda p, x1, y1, x2, y2: np.ravel(
+            np.r_[compmodel(p[0], p[1:3], x1) - y1,
+                  compmodel(p[0], p[3:], x2) - y2])
+        fitparams, _ = optimize.leastsq(errf, p, args=(x, ny1, x, ny2))
+        utils.assert_allclose(jf.fitparams, fitparams, rtol=10 ** (-5))
+        utils.assert_allclose(g1.amplitude.value, g2.amplitude.value)
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    def test_no_constraints(self):
+        g1 = models.Gaussian1D(9.9, 14.5, stddev=.3)
+        func = lambda p, x: p[0] * np.exp(-0.5 / p[2] ** 2 * (x - p[1]) ** 2)
+        errf = lambda p, x, y: func(p, x) - y
+        p0 = [9.9, 14.5, 0.3]
+        y = g1(self.x)
+        n = np.random.randn(100)
+        ny = y + n
+        fitpar, s = optimize.leastsq(errf, p0, args=(self.x, ny))
+        fitter = fitting.NonLinearLSQFitter()
+        model = fitter(g1, self.x, ny)
+        utils.assert_allclose(model.parameters, fitpar, rtol=5 * 10 ** (-3))
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+class TestBounds(object):
+
+    def setup_class(self):
+        A = -2.0
+        B = 0.5
+        self.x = np.linspace(-1.0, 1.0, 100)
+        self.y = A * self.x + B + np.random.normal(scale=0.1, size=100)
+        data = np.array([505.0, 556.0, 630.0, 595.0, 561.0, 553.0, 543.0, 496.0, 460.0, 469.0,
+                         426.0, 518.0, 684.0, 798.0, 830.0, 794.0, 649.0, 706.0, 671.0, 545.0,
+                         479.0, 454.0, 505.0, 700.0, 1058.0, 1231.0, 1325.0, 997.0, 1036.0, 884.0,
+                         610.0, 487.0, 453.0, 527.0, 780.0, 1094.0, 1983.0, 1993.0, 1809.0, 1525.0,
+                         1056.0, 895.0, 604.0, 466.0, 510.0, 678.0, 1130.0, 1986.0, 2670.0, 2535.0,
+                         1878.0, 1450.0, 1200.0, 663.0, 511.0, 474.0, 569.0, 848.0, 1670.0, 2611.0,
+                         3129.0, 2507.0, 1782.0, 1211.0, 723.0, 541.0, 511.0, 518.0, 597.0, 1137.0,
+                         1993.0, 2925.0, 2438.0, 1910.0, 1230.0, 738.0, 506.0, 461.0, 486.0, 597.0,
+                         733.0, 1262.0, 1896.0, 2342.0, 1792.0, 1180.0, 667.0, 482.0, 454.0, 482.0,
+                         504.0, 566.0, 789.0, 1194.0, 1545.0, 1361.0, 933.0, 562.0, 418.0, 463.0,
+                         435.0, 466.0, 528.0, 487.0, 664.0, 799.0, 746.0, 550.0, 478.0, 535.0, 443.0,
+                         416.0, 439.0, 472.0, 472.0, 492.0, 523.0, 569.0, 487.0, 441.0, 428.0])
+        self.data = data.reshape(11, 11)
+
+    def test_bounds_lsq(self):
+        guess_slope = 1.1
+        guess_intercept = 0.0
+        bounds = {'slope': (-1.5, 5.0), 'intercept': (-1.0, 1.0)}
+        line_model = models.Linear1D(guess_slope, guess_intercept, bounds=bounds)
+        fitter = fitting.NonLinearLSQFitter()
+        model = fitter(line_model, self.x, self.y)
+        slope = model.slope.value
+        intercept = model.intercept.value
+        assert slope + 10 ** -5 >= bounds['slope'][0]
+        assert slope - 10 ** -5 <= bounds['slope'][1]
+        assert intercept + 10 ** -5 >= bounds['intercept'][0]
+        assert intercept - 10 ** -5 <= bounds['intercept'][1]
+
+    def test_bounds_slsqp(self):
+        guess_slope = 1.1
+        guess_intercept = 0.0
+        bounds = {'slope': (-1.5, 5.0), 'intercept': (-1.0, 1.0)}
+        line_model = models.Linear1D(guess_slope, guess_intercept, bounds=bounds)
+        fitter = fitting.SLSQPFitter()
+        model = fitter(line_model, self.x, self.y)
+        slope = model.slope.value
+        intercept = model.intercept.value
+        assert slope + 10 ** -5 >= bounds['slope'][0]
+        assert slope - 10 ** -5 <= bounds['slope'][1]
+        assert intercept + 10 ** -5 >= bounds['intercept'][0]
+        assert intercept - 10 ** -5 <= bounds['intercept'][1]
+
+    def test_bounds_gauss2d_lsq(self):
+        X, Y = np.meshgrid(np.arange(11), np.arange(11))
+        bounds = {"x_mean": [0., 11.],
+                  "y_mean": [0., 11.],
+                  "x_stddev": [1., 4],
+                  "y_stddev": [1., 4]}
+        gauss = models.Gaussian2D(amplitude=10., x_mean=5., y_mean=5.,
+                                  x_stddev=4., y_stddev=4., theta=0.5,
+                                  bounds=bounds)
+        gauss_fit = fitting.NonLinearLSQFitter()
+        model = gauss_fit(gauss, X, Y, self.data)
+        x_mean = model.x_mean.value
+        y_mean = model.y_mean.value
+        x_stddev = model.x_stddev.value
+        y_stddev = model.y_stddev.value
+        assert x_mean + 10 ** -5 >= bounds['x_mean'][0]
+        assert x_mean - 10 ** -5 <= bounds['x_mean'][1]
+        assert y_mean + 10 ** -5 >= bounds['y_mean'][0]
+        assert y_mean - 10 ** -5 <= bounds['y_mean'][1]
+        assert x_stddev + 10 ** -5 >= bounds['x_stddev'][0]
+        assert x_stddev - 10 ** -5 <= bounds['x_stddev'][1]
+        assert y_stddev + 10 ** -5 >= bounds['y_stddev'][0]
+        assert y_stddev - 10 ** -5 <= bounds['y_stddev'][1]
+
+    def test_bounds_gauss2d_slsqp(self):
+        X, Y = np.meshgrid(np.arange(11), np.arange(11))
+        bounds = {"x_mean": [0., 11.],
+                  "y_mean": [0., 11.],
+                  "x_stddev": [1., 4],
+                  "y_stddev": [1., 4]}
+        gauss = models.Gaussian2D(amplitude=10., x_mean=5., y_mean=5.,
+                                  x_stddev=4., y_stddev=4., theta=0.5,
+                                  bounds=bounds)
+        gauss_fit = fitting.SLSQPFitter()
+        model = gauss_fit(gauss, X, Y, self.data)
+        x_mean = model.x_mean.value
+        y_mean = model.y_mean.value
+        x_stddev = model.x_stddev.value
+        y_stddev = model.y_stddev.value
+        assert x_mean + 10 ** -5 >= bounds['x_mean'][0]
+        assert x_mean - 10 ** -5 <= bounds['x_mean'][1]
+        assert y_mean + 10 ** -5 >= bounds['y_mean'][0]
+        assert y_mean - 10 ** -5 <= bounds['y_mean'][1]
+        assert x_stddev + 10 ** -5 >= bounds['x_stddev'][0]
+        assert x_stddev - 10 ** -5 <= bounds['x_stddev'][1]
+        assert y_stddev + 10 ** -5 >= bounds['y_stddev'][0]
+        assert y_stddev - 10 ** -5 <= bounds['y_stddev'][1]
+
+
+class TestLinearConstraints(object):
+
+    def setup_class(self):
+        self.p1 = models.Polynomial1D(4)
+        self.p1.c0 = 0
+        self.p1.c1 = 0
+        self.p1.window = [0., 9.]
+        self.x = np.arange(10)
+        self.y = self.p1(self.x)
+        rsn = RandomState(1234567890)
+        self.n = rsn.randn(10)
+        self.ny = self.y + self.n
+
+    def test(self):
+        self.p1.c0.fixed = True
+        self.p1.c1.fixed = True
+        pfit = fitting.LinearLSQFitter()
+        model = pfit(self.p1, self.x, self.y)
+        utils.assert_allclose(self.y, model(self.x))
+
+# Test constraints as parameter properties
+
+
+def test_set_fixed_1():
+    gauss = models.Gaussian1D(amplitude=20, mean=2, stddev=1)
+    gauss.mean.fixed = True
+    assert gauss.fixed == {'amplitude': False, 'mean': True, 'stddev': False}
+    fitparams, _ = gauss._model_to_fit_params()
+    assert np.all(fitparams == [20, 1])
+
+
+def test_set_fixed_2():
+    gauss = models.Gaussian1D(amplitude=20, mean=2, stddev=1, fixed={'mean': True})
+    assert gauss.mean.fixed is True
+    fitparams, _ = gauss._model_to_fit_params()
+    assert np.all(fitparams == [20, 1])
+
+
+def test_set_tied_1():
+    def tie_amplitude(model):
+        return 50 * model.stddev
+
+    gauss = models.Gaussian1D(amplitude=20, mean=2, stddev=1)
+    gauss.amplitude.tied = tie_amplitude
+    assert gauss.amplitude.tied is not False
+    assert type(gauss.tied['amplitude']) == types.FunctionType
+
+
+def test_set_tied_2():
+    def tie_amplitude(model):
+        return 50 * model.stddev
+
+    gauss = models.Gaussian1D(amplitude=20, mean=2, stddev=1,
+                                   tied={'amplitude': tie_amplitude})
+    assert gauss.amplitude.tied != False
+
+
+def test_unset_fixed():
+    gauss = models.Gaussian1D(amplitude=20, mean=2, stddev=1, fixed={'mean': True})
+    gauss.mean.fixed = False
+    assert gauss.fixed == {'amplitude': False, 'mean': False, 'stddev': False}
+    fitparams, _  = gauss._model_to_fit_params()
+    assert np.all(fitparams == [20, 2, 1])
+
+
+def test_unset_tied():
+    def tie_amplitude(model):
+        return 50 * model.stddev
+
+    gauss = models.Gaussian1D(amplitude=20, mean=2, stddev=1,
+                              tied={'amplitude': tie_amplitude})
+    gauss.amplitude.tied = False
+    assert gauss.tied == {'amplitude': False, 'mean': False, 'stddev': False}
+    fitparams, _  = gauss._model_to_fit_params()
+    assert np.all(fitparams == [20, 2, 1])
+
+
+def test_set_bounds_1():
+    gauss = models.Gaussian1D(amplitude=20, mean=2, stddev=1,
+                              bounds={'stddev': (0, None)})
+    assert gauss.bounds == {'amplitude': (None, None),
+                            'mean': (None, None),
+                            'stddev': (0.0, None)}
+
+def test_set_bounds_2():
+    gauss = models.Gaussian1D(amplitude=20, mean=2, stddev=1)
+    gauss.stddev.min = 0.
+    assert gauss.bounds == {'amplitude': (None, None),
+                            'mean': (None, None),
+                            'stddev': (0.0, None)}
+
+
+def test_unset_bounds():
+    gauss = models.Gaussian1D(amplitude=20, mean=2, stddev=1,
+                              bounds={'stddev': (0, 2)})
+    gauss.stddev.min = None
+    gauss.stddev.max = None
+    assert gauss.bounds == {'amplitude': (None, None),
+                            'mean': (None, None),
+                            'stddev': (None, None)}
diff --git a/astropy/modeling/tests/test_fitters.py b/astropy/modeling/tests/test_fitters.py
new file mode 100644
index 0000000..7c8ff44
--- /dev/null
+++ b/astropy/modeling/tests/test_fitters.py
@@ -0,0 +1,227 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+Module to test fitting routines
+"""
+from __future__ import division
+import os.path
+from .. import models
+from .. import fitting
+from . import irafutil
+import numpy as np
+from numpy import linalg
+from numpy.testing import utils
+from numpy.random import RandomState
+from ...utils.data import get_pkg_data_filename
+from ...tests.helper import pytest
+
+try:
+    from scipy import optimize
+    HAS_SCIPY = True
+except ImportError:
+    HAS_SCIPY = False
+
+
+class TestPolynomial2D(object):
+
+    """
+    Tests for 2D polynomail fitting
+    """
+    def setup_class(self):
+        self.model = models.Polynomial2D(2)
+        self.x, self.y = np.mgrid[:5, :5]
+
+        def poly2(x, y):
+            return 1 + 2 * x + 3 * x ** 2 + 4 * y + 5 * y ** 2 + 6 * x * y
+        self.z = poly2(self.x, self.y)
+        self.fitter = fitting.LinearLSQFitter()
+
+    def test_poly2D_fitting(self):
+        v = self.model.deriv(x=self.x, y=self.y)
+        p = linalg.lstsq(v, self.z.flatten())[0]
+        new_model = self.fitter(self.model, self.x, self.y, self.z)
+        utils.assert_allclose(new_model.parameters, p)
+
+    def test_eval(self):
+        new_model = self.fitter(self.model, self.x, self.y, self.z)
+        utils.assert_allclose(new_model(self.x, self.y), self.z)
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    def test_polynomial2D_nonlinear_fitting(self):
+        self.model.parameters = [.6, 1.8, 2.9, 3.7, 4.9, 6.7]
+        nlfitter = fitting.NonLinearLSQFitter()
+        new_model = nlfitter(self.model, self.x, self.y, self.z)
+        utils.assert_allclose(new_model.parameters, [1, 2, 3, 4, 5, 6])
+
+
+class TestICheb2D(object):
+
+    """
+    Tests 2D Chebyshev polynomial fitting
+
+    Create a 2D polynomial (z) using Polynomial2DModel and default coefficients
+    Fit z using a ICheb2D model
+    Evaluate the ICheb2D polynomial and compare with the initial z
+    """
+    def setup_class(self):
+        self.pmodel = models.Polynomial2D(2)
+        self.x, self.y = np.mgrid[:5, :5]
+        self.z = self.pmodel(self.x, self.y)
+        self.cheb2 = models.Chebyshev2D(2, 2)
+        self.fitter = fitting.LinearLSQFitter()
+
+    def test_default_params(self):
+        self.cheb2.parameters = np.arange(9)
+        p = np.array([1344., 1772., 400., 1860., 2448., 552., 432., 568.,
+                      128.])
+        z = self.cheb2(self.x, self.y)
+        model = self.fitter(self.cheb2, self.x, self.y, z)
+        utils.assert_almost_equal(model.parameters, p)
+
+    def test_poly2D_cheb2D(self):
+        model = self.fitter(self.cheb2, self.x, self.y, self.z)
+        z1 = model(self.x, self.y)
+        utils.assert_almost_equal(self.z, z1)
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    def test_chebyshev2D_nonlinear_fitting(self):
+        cheb2d = models.Chebyshev2D(2, 2)
+        cheb2d.parameters = np.arange(9)
+        z = cheb2d(self.x, self.y)
+        cheb2d.parameters = [0.1, .6, 1.8, 2.9, 3.7, 4.9, 6.7, 7.5, 8.9]
+        nlfitter = fitting.NonLinearLSQFitter()
+        model = nlfitter(cheb2d, self.x, self.y, z)
+        utils.assert_allclose(model.parameters, [0, 1, 2, 3, 4, 5, 6, 7, 8], atol=10**-9)
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+class TestJointFitter(object):
+
+    """
+    Tests the joint fitting routine using 2 gaussian models
+    """
+    def setup_class(self):
+        """
+        Create 2 gaussian models and some data with noise.
+        Create a fitter for the two models keeping the amplitude parameter
+        common for the two models.
+        """
+        self.g1 = models.Gaussian1D(10, mean=14.9, stddev=.3)
+        self.g2 = models.Gaussian1D(10, mean=13, stddev=.4)
+        self.jf = fitting.JointFitter([self.g1, self.g2],
+                                      {self.g1: ['amplitude'],
+                                       self.g2: ['amplitude']}, [9.8])
+        self.x = np.arange(10, 20, .1)
+        y1 = self.g1(self.x)
+        y2 = self.g2(self.x)
+        n = np.random.randn(100)
+        self.ny1 = y1 + 2 * n
+        self.ny2 = y2 + 2 * n
+        self.jf(self.x, self.ny1, self.x, self.ny2)
+
+    def test_joint_parameter(self):
+        """
+        Tests that the amplitude of the two models is the same
+        """
+        utils.assert_allclose(self.jf.fitparams[0], self.g1.parameters[0])
+        utils.assert_allclose(self.jf.fitparams[0], self.g2.parameters[0])
+
+    def test_joint_fitter(self):
+        """
+        Tests the fitting routine with similar procedure.
+        Compares the fitted parameters.
+        """
+        p1 = [14.9, .3]
+        p2 = [13, .4]
+        A = 9.8
+        p = np.r_[A, p1, p2]
+        compmodel = lambda A, p, x: A * np.exp(-0.5 / p[1] ** 2 * (x - p[0]) ** 2)
+        errf = lambda p, x1, y1, x2, y2: np.ravel(np.r_[compmodel(p[0], p[1:3],
+                                                                  x1) - y1, compmodel(p[0], p[3:], x2) - y2])
+        coeff, _ = optimize.leastsq(errf, p, args=(self.x, self.ny1, self.x,
+                                                   self.ny2))
+        utils.assert_allclose(coeff, self.jf.fitparams, rtol=10 ** (-2))
+
+
+class TestLinearLSQFitter(object):
+
+    def setup_class(self):
+        test_file = get_pkg_data_filename(os.path.join('data', 'idcompspec.fits'))
+        f = open(test_file)
+        lines = f.read()
+        reclist = lines.split("begin")
+        f.close()
+        record = irafutil.IdentifyRecord(reclist[1])
+        self.icoeff = record.coeff
+        order = int(record.fields['order'])
+        self.model = models.Chebyshev1D(order - 1)
+        self.model.domain = record.get_range()
+        self.lf = fitting.LinearLSQFitter()
+        self.x = record.x
+        self.y = record.z
+        self.yy = np.array([record.z, record.z])
+
+    def test_chebyshev1D(self):
+        new_model = self.lf(self.model, self.x, self.y)
+        utils.assert_allclose(new_model.parameters, np.array(self.icoeff),
+                              rtol=10E-2)
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+class TestNonLinearFitters(object):
+
+    """
+    Tests non-linear least squares fitting and the SLSQP algorithm
+    """
+    def setup_class(self):
+        self.initial_values = [100, 5, 1]
+        func = lambda p, x: p[0] * np.exp(-0.5 / p[2] ** 2 * (x - p[1]) ** 2)
+        errf = lambda p, x, y: (func(p, x) - y)
+        self.xdata = np.arange(0, 10, 0.1)
+        sigma = 8. * np.ones_like(self.xdata)
+        rsn = RandomState(1234567890)
+        yerror = rsn.normal(0, sigma)
+        self.ydata = func(self.initial_values, self.xdata) + yerror
+
+    def test_estimated_vs_analytic_deriv(self):
+        g1 = models.Gaussian1D(100, 5, stddev=1)
+        fitter = fitting.NonLinearLSQFitter()
+        model = fitter(g1, self.xdata, self.ydata)
+        g1e = models.Gaussian1D(100, 5.0, stddev=1)
+        efitter = fitting.NonLinearLSQFitter()
+        emodel = efitter(g1e, self.xdata, self.ydata, estimate_jacobian=True)
+        utils.assert_allclose(model.parameters, emodel.parameters, rtol=10 ** (-3))
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    def test_with_optimize(self):
+        g1 = models.Gaussian1D(100, 5, stddev=1)
+        fitter = fitting.NonLinearLSQFitter()
+        model = fitter(g1, self.xdata, self.ydata, estimate_jacobian=True)
+        func = lambda p, x: p[0] * np.exp(-0.5 / p[2] ** 2 * (x - p[1]) ** 2)
+        errf = lambda p, x, y: (func(p, x) - y)
+        result = optimize.leastsq(errf, self.initial_values, args=(self.xdata, self.ydata))
+        utils.assert_allclose(model.parameters, result[0], rtol=10 ** (-3))
+
+    def test_LSQ_SLSQP(self):
+        g1 = models.Gaussian1D(100, 5, stddev=1)
+        fitter = fitting.NonLinearLSQFitter()
+        fslsqp = fitting.SLSQPFitter()
+        slsqp_model = fslsqp(g1, self.xdata, self.ydata)
+        model = fitter(g1, self.xdata, self.ydata)
+        # There's a bug in the SLSQP algorithm and sometimes it gives the
+        # negative value of the result. unitl this is understood, for this
+        # test, take np.abs()
+        utils.assert_allclose(model.parameters, np.abs(slsqp_model.parameters),
+                              rtol=10 ** (-4))
+
+    def test_LSQ_SLSQP_cons(self):
+        g1 = models.Gaussian1D(100, 5, stddev=1)
+        g1.mean.fixed = True
+        fitter = fitting.NonLinearLSQFitter()
+        fslsqp = fitting.SLSQPFitter()
+        slsqp_model = fslsqp(g1, self.xdata, self.ydata)
+        model = fitter(g1, self.xdata, self.ydata)
+        # There's a bug in the SLSQP algorithm and sometimes it gives the
+        # negative value of the result. unitl this is understood, for this
+        # test, take np.abs()
+        utils.assert_allclose(model.parameters, np.abs(slsqp_model.parameters),
+                              rtol=10 ** (-4))
diff --git a/astropy/modeling/tests/test_functional_models.py b/astropy/modeling/tests/test_functional_models.py
new file mode 100644
index 0000000..ab9a917
--- /dev/null
+++ b/astropy/modeling/tests/test_functional_models.py
@@ -0,0 +1,21 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import division
+import numpy as np
+from numpy.testing import assert_allclose
+from .. import models
+
+try:
+    from scipy import optimize
+    HAS_SCIPY = True
+except ImportError:
+    HAS_SCIPY = False
+
+def test_Trapezoid1D():
+    """Regression test for
+    https://github.com/astropy/astropy/issues/1721
+    """
+    model = models.Trapezoid1D(amplitude=4.2, x_0=2.0, width=1.0, slope=3)
+    xx = np.linspace(0, 4, 8)
+    yy = model(xx)
+    yy_ref = [0., 1.41428571, 3.12857143, 4.2, 4.2, 3.12857143, 1.41428571, 0.]
+    assert_allclose(yy, yy_ref, rtol=0, atol=1e-6)
diff --git a/astropy/modeling/tests/test_input.py b/astropy/modeling/tests/test_input.py
new file mode 100644
index 0000000..b4faccd
--- /dev/null
+++ b/astropy/modeling/tests/test_input.py
@@ -0,0 +1,305 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+This module tests fitting and model evaluation with various inputs
+"""
+from __future__ import division
+import numpy as np
+from .. import models
+from .. import fitting
+from numpy.testing import utils
+from ...tests.helper import pytest
+
+try:
+    from scipy import optimize  # pylint: disable=W0611
+    HAS_SCIPY = True
+except ImportError:
+    HAS_SCIPY = False
+
+
+model1d_params = [
+    (models.Polynomial1D, [2]),
+    (models.Legendre1D, [2]),
+    (models.Chebyshev1D, [2]),
+    (models.Shift, [2]),
+    (models.Scale, [2])
+]
+
+model2d_params = [
+    (models.Polynomial2D, [2]),
+    (models.Legendre2D, [1, 2]),
+    (models.Chebyshev2D, [1, 2])
+]
+
+
+class TestInputType(object):
+
+    """
+    This class tests that models accept numbers, lists and arrays.
+
+    Add new models to one of the lists above to test for this.
+    """
+    def setup_class(self):
+        self.x = 5.3
+        self.y = 6.7
+        self.x1 = np.arange(1, 10, .1)
+        self.y1 = np.arange(1, 10, .1)
+        self.x2, self.y2 = np.mgrid[:10, :8]
+
+    @pytest.mark.parametrize(('model', 'params'), model1d_params)
+    def test_input1D(self, model, params):
+        m = model(*params)
+        m(self.x)
+        m(self.x1)
+        m(self.x2)
+
+    @pytest.mark.parametrize(('model', 'params'), model2d_params)
+    def test_input2D(self, model, params):
+        m = model(*params)
+        m(self.x, self.y)
+        m(self.x1, self.y1)
+        m(self.x2, self.y2)
+
+
+class TestFitting(object):
+
+    """
+    test various input options to fitting routines
+    """
+    def setup_class(self):
+        self.x1 = np.arange(10)
+        self.x, self.y = np.mgrid[:10, :10]
+
+    def test_linear_fitter_1set(self):
+        """
+        1 set 1D x, 1pset
+        """
+        expected = np.array([0, 1, 1, 1])
+        p1 = models.Polynomial1D(3)
+        p1.parameters = [0, 1, 1, 1]
+        y1 = p1(self.x1)
+        pfit = fitting.LinearLSQFitter()
+        model = pfit(p1, self.x1, y1)
+        utils.assert_allclose(model.parameters, expected, atol=10 ** (-7))
+
+    def test_linear_fitter_Nset(self):
+        """
+        1 set 1D x, 2 sets 1D y, 2 param_sets
+        """
+        expected = np.array([[0, 0], [1, 1], [2, 2], [3, 3]])
+        p1 = models.Polynomial1D(3, param_dim=2)
+        p1.parameters = [0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0]
+        params = {}
+        for i in range(4):
+            params[p1.param_names[i]] = [i, i]
+        p1 = models.Polynomial1D(3, param_dim=2, **params)
+        y1 = p1(self.x1)
+        pfit = fitting.LinearLSQFitter()
+        model = pfit(p1, self.x1, y1)
+        utils.assert_allclose(model.param_sets, expected, atol=10 ** (-7))
+
+    def test_linear_fitter_1dcheb(self):
+        """
+        1 pset, 1 set 1D x, 1 set 1D y, Chebyshev 1D polynomial
+        """
+        expected = np.array(
+            [[2817.2499999999995,
+              4226.6249999999991,
+              1680.7500000000009,
+              273.37499999999926]]).T
+        ch1 = models.Chebyshev1D(3)
+        ch1.parameters = [0, 1, 2, 3]
+        y1 = ch1(self.x1)
+        pfit = fitting.LinearLSQFitter()
+        model = pfit(ch1, self.x1, y1)
+        utils.assert_allclose(model.param_sets, expected, atol=10 ** (-2))
+
+    def test_linear_fitter_1dlegend(self):
+        """
+        1 pset, 1 set 1D x, 1 set 1D y, Legendre 1D polynomial
+        """
+        expected = np.array(
+            [[1925.5000000000011,
+              3444.7500000000005,
+              1883.2500000000014,
+              364.4999999999996]]).T
+        leg1 = models.Legendre1D(3)
+        leg1.parameters = [1, 2, 3, 4]
+        y1 = leg1(self.x1)
+        pfit = fitting.LinearLSQFitter()
+        model = pfit(leg1, self.x1, y1)
+        utils.assert_allclose(model.param_sets, expected, atol=10 ** (-12))
+
+    def test_linear_fitter_1set2d(self):
+        p2 = models.Polynomial2D(2)
+        p2.parameters = [0, 1, 2, 3, 4, 5]
+        expected = [0, 1, 2, 3, 4, 5]
+        z = p2(self.x, self.y)
+        pfit = fitting.LinearLSQFitter()
+        model = pfit(p2, self.x, self.y, z)
+        utils.assert_allclose(model.parameters, expected, atol=10 ** (-12))
+        utils.assert_allclose(model(self.x, self.y), z, atol=10 ** (-12))
+
+    def test_wrong_numpset(self):
+        """
+        A ValueError is raised if a 1 data set (1d x, 1d y) is fit
+        with a model with multiple parameter sets.
+        """
+        with pytest.raises(ValueError):
+            p1 = models.Polynomial1D(5)
+            y1 = p1(self.x1)
+            p1 = models.Polynomial1D(5, param_dim=2)
+            pfit = fitting.LinearLSQFitter()
+            model = pfit(p1, self.x1, y1)
+
+    def test_wrong_pset(self):
+        """
+        A case of 1 set of x and multiple sets of y and parameters
+        """
+        expected = np.array([[1., 0],
+                             [1, 1],
+                             [1, 2],
+                             [1, 3],
+                             [1, 4],
+                             [1, 5]])
+        p1 = models.Polynomial1D(5, param_dim=2)
+        params = {}
+        for i in range(6):
+            params[p1.param_names[i]] = [1, i]
+        p1 = models.Polynomial1D(5, param_dim=2, **params)
+        y1 = p1(self.x1)
+        pfit = fitting.LinearLSQFitter()
+        model = pfit(p1, self.x1, y1)
+        utils.assert_allclose(model.param_sets, expected, atol=10 ** (-7))
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    def test_nonlinear_lsqt_1set_1d(self):
+        """
+        1 set 1D x, 1 set 1D y, 1 pset NonLinearFitter
+        """
+        g1 = models.Gaussian1D(10, mean=3, stddev=.2)
+        y1 = g1(self.x1)
+        gfit = fitting.NonLinearLSQFitter()
+        model = gfit(g1, self.x1, y1)
+        utils.assert_allclose(model.parameters, [10, 3, .2])
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    def test_nonlinear_lsqt_Nset_1d(self):
+        """
+        1 set 1D x, 1 set 1D y, 2 param_sets, NonLinearFitter
+        """
+        with pytest.raises(ValueError):
+            g1 = models.Gaussian1D([10.2, 10], mean=[3, 3.2], stddev=[.23, .2])
+            y1 = g1(self.x1)
+            gfit = fitting.NonLinearLSQFitter()
+            model = gfit(g1, self.x1, y1)
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    def test_nonlinear_lsqt_1set_2d(self):
+        """
+        1 set 2d x, 1set 2D y, 1 pset, NonLinearFitter
+        """
+        g2 = models.Gaussian2D(10, x_mean=3, y_mean=4, x_stddev=.3, y_stddev=.2, theta=0)
+        z = g2(self.x, self.y)
+        gfit = fitting.NonLinearLSQFitter()
+        model = gfit(g2, self.x, self.y, z)
+        utils.assert_allclose(model.parameters, [10, 3, 4, .3, .2, 0])
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    def test_nonlinear_lsqt_Nset_2d(self):
+        """
+         1 set 2d x, 1set 2D y, 2 param_sets, NonLinearFitter
+        """
+        with pytest.raises(ValueError):
+            g2 = models.Gaussian2D([10, 10], [3, 3], [4, 4], x_stddev=[.3, .3],
+                                   y_stddev=[.2, .2], theta=[0, 0])
+            z = g2(self.x.flatten(), self.y.flatten())
+            gfit = fitting.NonLinearLSQFitter()
+            model = gfit(g2, self.x, self.y, z)
+
+
+class TestEvaluation(object):
+
+    """
+    test various input options to model evaluation
+
+    TestFitting actually covers evaluation of polynomials
+    """
+    def setup_class(self):
+        self.x1 = np.arange(20)
+        self.x, self.y = np.mgrid[:10, :10]
+
+    def test_non_linear_NYset(self):
+        """
+        This case covers:
+            N param sets , 1 set 1D x --> N 1D y data
+        """
+        g1 = models.Gaussian1D([10, 10], [3, 3], [.2, .2])
+        y1 = g1(self.x1)
+        utils.assert_equal((y1[:, 0] - y1[:, 1]).nonzero(), (np.array([]),))
+
+    def test_non_linear_NXYset(self):
+        """
+        This case covers: N param sets , N sets 1D x --> N N sets 1D y data
+        """
+        g1 = models.Gaussian1D([10, 10], [3, 3], [.2, .2])
+        xx = np.array([self.x1, self.x1])
+        y1 = g1(xx.T)
+        utils.assert_allclose(y1[:, 0], y1[:, 1], atol=10 ** (-12))
+
+    def test_p1_1set_1pset(self):
+        """
+        1 data set, 1 pset, Polynomial1D
+        """
+        p1 = models.Polynomial1D(4)
+        y1 = p1(self.x1)
+        assert y1.shape == (20,)
+
+    def test_p1_nset_npset(self):
+        """
+        N data sets, N param_sets, Polynomial1D
+        """
+        p1 = models.Polynomial1D(4, param_dim=2)
+        y1 = p1(np.array([self.x1, self.x1]).T)
+        assert y1.shape == (20, 2)
+        utils.assert_allclose(y1[:, 0], y1[:, 1], atol=10 ** (-12))
+
+    def test_p2_1set_1pset(self):
+        """
+        1 pset, 1 2D data set, Polynomial2D
+        """
+        p2 = models.Polynomial2D(5)
+        z = p2(self.x, self.y)
+        assert z.shape == (10, 10)
+
+    def test_p2_nset_npset(self):
+        """
+        N param_sets, N 2D data sets, Poly2d
+        """
+        p2 = models.Polynomial2D(5, param_dim=2)
+        xx = np.array([self.x, self.x])
+        yy = np.array([self.y, self.y])
+        z = p2(xx, yy)
+        assert z.shape == (2, 10, 10)
+
+    def test_nset_domain(self):
+        """
+        Polynomial evaluation of multiple data sets with different domain
+        """
+        xx = np.array([self.x1, self.x1]).T
+        xx[0, 0] = 100
+        xx[1, 0] = 100
+        xx[2, 0] = 99
+        p1 = models.Polynomial1D(5, param_dim=2)
+        yy = p1(xx)
+        x1 = xx[:, 0]
+        x2 = xx[:, 1]
+        p1 = models.Polynomial1D(5)
+        utils.assert_allclose(p1(x1), yy[:, 0], atol=10 ** (-12))
+        p1 = models.Polynomial1D(5)
+        utils.assert_allclose(p1(x2), yy[:, 1], atol=10 ** (-12))
+
+    def test_evaluate_gauss2d(self):
+        cov = np.array([[1., 0.8], [0.8, 3]])
+        g = models.Gaussian2D(1., 5., 4., cov_matrix=cov)
+        x, y = np.mgrid[:10, :10]
+        g(x, y)
diff --git a/astropy/modeling/tests/test_models.py b/astropy/modeling/tests/test_models.py
new file mode 100644
index 0000000..8b08acf
--- /dev/null
+++ b/astropy/modeling/tests/test_models.py
@@ -0,0 +1,478 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+Tests for model evaluation.
+Compare the results of some models with other programs.
+"""
+
+from __future__ import division
+
+import copy_reg
+import types
+
+try:
+    import cPickle as pickle
+except ImportError:
+    import pickle
+
+import numpy as np
+
+from numpy.testing import utils
+
+from .example_models import models_1D, models_2D
+from .. import fitting, models
+from .. import fitting
+from ..core import (LabeledInput, SerialCompositeModel, SummedCompositeModel,
+                    Parametric1DModel, Parametric2DModel)
+from ..polynomial import PolynomialModel
+from ...tests.helper import pytest
+
+try:
+    from scipy import optimize  # pylint: disable=W0611
+    HAS_SCIPY = True
+except ImportError:
+    HAS_SCIPY = False
+
+
+class TestSerialComposite(object):
+    """
+    Test composite models evaluation in series
+    """
+    def setup_class(self):
+        self.x, self.y = np.mgrid[:5, :5]
+        self.p1 = models.Polynomial1D(3)
+        self.p11 = models.Polynomial1D(3)
+        self.p2 = models.Polynomial2D(3)
+
+    def test_single_array_input(self):
+        model = SerialCompositeModel([self.p1, self.p11])
+        result = model(self.x)
+        xx = self.p11(self.p1(self.x))
+        utils.assert_almost_equal(xx, result)
+
+    def test_labeledinput_1(self):
+        labeled_input = LabeledInput([self.x, self.y], ['x', 'y'])
+        model = SerialCompositeModel([self.p2, self.p1],
+                                     [['x', 'y'], ['z']],
+                                     [['z'], ['z']])
+        result = model(labeled_input)
+        z = self.p2(self.x, self.y)
+        z1 = self.p1(z)
+        utils.assert_almost_equal(z1, result.z)
+
+    def test_labeledinput_2(self):
+        labeled_input = LabeledInput([self.x, self.y], ['x', 'y'])
+        rot = models.MatrixRotation2D(angle=23.4)
+        offx = models.Shift(-2)
+        offy = models.Shift(1.2)
+        model = SerialCompositeModel([rot, offx, offy],
+                                     [['x', 'y'], ['x'], ['y']],
+                                     [['x', 'y'], ['x'], ['y']])
+        result = model(labeled_input)
+        x, y = rot(self.x, self.y)
+        x = offx(x)
+        y = offy(y)
+        utils.assert_almost_equal(x, result.x)
+        utils.assert_almost_equal(y, result.y)
+
+    def test_labeledinput_3(self):
+        labeled_input = LabeledInput([2, 4.5], ['x', 'y'])
+        rot = models.MatrixRotation2D(angle=23.4)
+        offx = models.Shift(-2)
+        offy = models.Shift(1.2)
+        model = SerialCompositeModel([rot, offx, offy],
+                                     [['x', 'y'], ['x'], ['y']],
+                                     [['x', 'y'], ['x'], ['y']])
+        result = model(labeled_input)
+        x, y = rot(2, 4.5)
+        x = offx(x)
+        y = offy(y)
+        utils.assert_almost_equal(x, result.x)
+        utils.assert_almost_equal(y, result.y)
+
+    def test_multiple_input(self):
+        rot = models.MatrixRotation2D(angle=-60)
+        model = SerialCompositeModel([rot, rot])
+        xx, yy = model(self.x, self.y)
+        inverse_model = model.inverse()
+        x1, y1 = inverse_model(xx, yy)
+        utils.assert_almost_equal(x1, self.x)
+        utils.assert_almost_equal(y1, self.y)
+
+
+class TestSummedComposite(object):
+
+    """
+    Test composite models evaluation in parallel
+    """
+    def setup_class(self):
+        self.x = np.linspace(1, 10, 100)
+        self.y = np.linspace(1, 10, 100)
+        self.p1 = models.Polynomial1D(3)
+        self.p11 = models.Polynomial1D(3)
+        self.p2 = models.Polynomial2D(3)
+        self.p1.parameters = [1.4, 2.2, 3.1, 4]
+        self.p2.c0_0 = 100
+
+    def test_single_array_input(self):
+        model = SummedCompositeModel([self.p1, self.p11])
+        result = model(self.x)
+        delta11 = self.p11(self.x)
+        delta1 = self.p1(self.x)
+        xx = delta1 + delta11
+        utils.assert_almost_equal(xx, result)
+
+    def test_labeledinput(self):
+        labeled_input = LabeledInput([self.x, self.y], ['x', 'y'])
+        model = SummedCompositeModel([self.p1, self.p11], inmap=['x'], outmap=['x'])
+        result = model(labeled_input)
+        delta11 = self.p11(self.x)
+        delta1 = self.p1(self.x)
+        xx = delta1 + delta11
+        utils.assert_almost_equal(xx, result.x)
+
+    def test_inputs_outputs_mismatch(self):
+        p2 = models.Polynomial2D(1)
+        ch2 = models.Chebyshev2D(1, 1)
+        with pytest.raises(AssertionError):
+            SummedCompositeModel([p2, ch2])
+
+
+def test_pickle():
+    def reduce_method(m):
+        return (getattr, (m.__self__, m.__func__.__name__))
+
+    copy_reg.pickle(types.MethodType, reduce_method)
+
+    p1 = models.Polynomial1D(3)
+    p11 = models.Polynomial1D(4)
+    g1 = models.Gaussian1D(10.3, 5.4, 1.2)
+    serial_composite_model = SerialCompositeModel([p1, g1])
+    parallel_composite_model = SummedCompositeModel([serial_composite_model,
+                                                     p11])
+    s = pickle.dumps(parallel_composite_model)
+    s1 = pickle.loads(s)
+    assert s1(3) == parallel_composite_model(3)
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_custom_model(amplitude=4, frequency=1):
+
+    def sine_model(x, amplitude=4, frequency=1):
+        """
+        Model function
+        """
+        return amplitude * np.sin(2 * np.pi * frequency * x)
+
+    def sine_deriv(x, amplitude=4, frequency=1):
+        """
+        Jacobian of model function, e.g. derivative of the function with
+        respect to the *parameters*
+        """
+        da = np.sin(2 * np.pi * frequency * x)
+        df = 2 * np.pi * x * amplitude * np.cos(2 * np.pi * frequency * x)
+        return np.vstack((da, df))
+
+    SineModel = models.custom_model_1d(sine_model, func_deriv=sine_deriv)
+
+    x = np.linspace(0, 4, 50)
+    sin_model = SineModel()
+
+    y = sin_model.eval(x, 5., 2.)
+    y_prime = sin_model.deriv(x, 5., 2.)
+
+    np.random.seed(0)
+    data = sin_model(x) + np.random.rand(len(x)) - 0.5
+    fitter = fitting.NonLinearLSQFitter()
+    model = fitter(sin_model, x, data)
+    fitparams, _ = model._model_to_fit_params()
+    assert np.all((fitparams - np.array([amplitude, frequency])) < 0.001)
+
+
+def test_custom_model_init():
+    @models.custom_model_1d
+    def SineModel(x, amplitude=4, frequency=1):
+        """
+        Model function
+        """
+        return amplitude * np.sin(2 * np.pi * frequency * x)
+
+    sin_model = SineModel(amplitude=2., frequency=0.5)
+    assert sin_model.amplitude == 2.
+    assert sin_model.frequency == 0.5
+
+
+def test_custom_model_defaults():
+    @models.custom_model_1d
+    def SineModel(x, amplitude=4, frequency=1):
+        """
+        Model function
+        """
+        return amplitude * np.sin(2 * np.pi * frequency * x)
+
+    sin_model = SineModel()
+    assert SineModel.amplitude.default == 4
+    assert SineModel.frequency.default == 1
+
+    assert sin_model.amplitude == 4
+    assert sin_model.frequency == 1
+
+
+class TestParametricModels(object):
+    """
+    Test class for all parametric models.
+
+    Test values have to be defined in example_models.py. It currently test the model
+    with different input types, evaluates the model at different positions and
+    assures that it gives the correct values. And tests if the  model works with
+    the NonLinearFitter.
+    """
+
+    def setup_class(self):
+        self.N = 100
+        self.M = 100
+        self.eval_error = 0.0001
+        self.fit_error = 0.1
+        self.x = 5.3
+        self.y = 6.7
+        self.x1 = np.arange(1, 10, .1)
+        self.y1 = np.arange(1, 10, .1)
+        self.x2, self.y2 = np.mgrid[:10, :8]
+
+    @pytest.mark.parametrize(('model_class'), models_1D.keys())
+    def test_input1D(self, model_class):
+        """
+        Test model with different input types.
+        """
+        parameters = models_1D[model_class]['parameters']
+        model = create_model(model_class, parameters)
+        model(self.x)
+        model(self.x1)
+        model(self.x2)
+
+    @pytest.mark.parametrize(('model_class'), models_1D.keys())
+    def test_eval1D(self, model_class):
+        """
+        Test model values at certain given points
+        """
+        parameters = models_1D[model_class]['parameters']
+        model = create_model(model_class, parameters)
+        x = models_1D[model_class]['x_values']
+        y = models_1D[model_class]['y_values']
+        utils.assert_allclose(model(x), y, atol=self.eval_error)
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    @pytest.mark.parametrize(('model_class'), models_1D.keys())
+    def test_fitter1D(self, model_class):
+        """
+        Test if the parametric model works with the fitter.
+        """
+        x_lim = models_1D[model_class]['x_lim']
+        parameters = models_1D[model_class]['parameters']
+        model = create_model(model_class, parameters)
+        if isinstance(parameters, dict):
+            parameters.pop('degree')
+            parameters = parameters.values()
+        if "log_fit" in models_1D[model_class]:
+            if models_1D[model_class]['log_fit']:
+                x = np.logspace(x_lim[0], x_lim[1], self.N)
+        else:
+            x = np.linspace(x_lim[0], x_lim[1], self.N)
+        np.random.seed(0)
+        # add 10% noise to the amplitude
+        relative_noise_amplitude = 0.01
+        data = (1 + relative_noise_amplitude * np.random.randn(len(x))) * model(x)
+        fitter = fitting.NonLinearLSQFitter()
+        new_model = fitter(model, x, data)
+
+        # Only check parameters that were free in the fit
+        params = [getattr(new_model, name) for name in new_model.param_names]
+        fixed = [par.fixed for par in params]
+        fitted_parameters = [val
+                             for (val, fixed) in zip(parameters, fixed)
+                             if not fixed]
+        fitparams, _ = new_model._model_to_fit_params()
+        utils.assert_allclose(fitparams, fitted_parameters,
+                              atol=self.fit_error)
+
+    @pytest.mark.parametrize(('model_class'), models_2D.keys())
+    def test_input2D(self, model_class):
+        """
+        Test model with different input types.
+        """
+        parameters = models_2D[model_class]['parameters']
+        model = create_model(model_class, parameters)
+        model(self.x, self.y)
+        model(self.x1, self.y1)
+        model(self.x2, self.y2)
+
+    @pytest.mark.parametrize(('model_class'), models_2D.keys())
+    def test_eval2D(self, model_class):
+        """
+        Test model values add certain given points
+        """
+        parameters = models_2D[model_class]['parameters']
+        model = create_model(model_class, parameters)
+        x = models_2D[model_class]['x_values']
+        y = models_2D[model_class]['y_values']
+        z = models_2D[model_class]['z_values']
+        assert np.all((np.abs(model(x, y) - z) < self.eval_error))
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    @pytest.mark.parametrize(('model_class'), models_2D.keys())
+    def test_fitter2D(self, model_class):
+        """
+        Test if the parametric model works with the fitter.
+        """
+        x_lim = models_2D[model_class]['x_lim']
+        y_lim = models_2D[model_class]['y_lim']
+
+        parameters = models_2D[model_class]['parameters']
+        model = create_model(model_class, parameters)
+        if isinstance(parameters, dict):
+            parameters.pop('degree')
+            parameters = parameters.values()
+
+        if "log_fit" in models_2D[model_class]:
+            if models_2D[model_class]['log_fit']:
+                x = np.logspace(x_lim[0], x_lim[1], self.N)
+                y = np.logspace(y_lim[0], y_lim[1], self.N)
+        else:
+            x = np.linspace(x_lim[0], x_lim[1], self.N)
+            y = np.linspace(y_lim[0], y_lim[1], self.N)
+        xv, yv = np.meshgrid(x, y)
+
+        np.random.seed(0)
+        # add 10% noise to the amplitude
+        data = model(xv, yv) + 0.1 * parameters[0] * (np.random.rand(self.N, self.N) - 0.5)
+        fitter = fitting.NonLinearLSQFitter()
+        new_model = fitter(model, xv, yv, data)
+        fitparams, _ = new_model._model_to_fit_params()
+        utils.assert_allclose(fitparams, parameters, atol=self.fit_error)
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    @pytest.mark.parametrize(('model_class'), list(models_2D.keys()))
+    def test_deriv_2D(self, model_class):
+        """
+        Test the derivative of a model by fitting with an estimated and
+        analytical derivative
+        """
+        x_lim = models_2D[model_class]['x_lim']
+        y_lim = models_2D[model_class]['y_lim']
+
+        if model_class.deriv is None:
+            pytest.skip("Derivative function is not defined for model.")
+        if issubclass(model_class, (models.PolynomialModel, models.OrthoPolynomialBase)):
+            pytest.skip("Skip testing derivative of polynomials.")
+
+        if "log_fit" in models_2D[model_class]:
+            if models_2D[model_class]['log_fit']:
+                x = np.logspace(x_lim[0], x_lim[1], self.N)
+                y = np.logspace(y_lim[0], y_lim[1], self.M)
+        else:
+            x = np.linspace(x_lim[0], x_lim[1], self.N)
+            y = np.linspace(y_lim[0], y_lim[1], self.M)
+        xv, yv = np.meshgrid(x, y)
+
+        try:
+            parameters = models_2D[model_class]['deriv_parameters']
+            init_vals = models_2D[model_class]['deriv_initial']
+        except KeyError:
+            parameters = models_2D[model_class]['parameters']
+            init_vals = parameters[:]
+        model_with_deriv = create_model(model_class, init_vals, use_constraints=False)
+        model_no_deriv = create_model(model_class, init_vals, use_constraints=False)
+
+        # add 10% noise to the amplitude
+        rsn = np.random.RandomState(1234567890)
+        n = 0.1 * parameters[0] * (rsn.rand(self.M, self.N)-0.5)
+
+        model = create_model(model_class, parameters, use_constraints=False)
+        data = model(xv, yv) + n
+        fitter_with_deriv = fitting.NonLinearLSQFitter()
+        new_model_with_deriv = fitter_with_deriv(model_with_deriv, xv, yv, data)
+        fitter_no_deriv = fitting.NonLinearLSQFitter()
+        new_model_no_deriv = fitter_no_deriv(model_no_deriv, xv, yv, data, estimate_jacobian=True)
+        utils.assert_allclose(new_model_with_deriv.parameters, new_model_no_deriv.parameters, rtol=0.1)
+
+    @pytest.mark.skipif('not HAS_SCIPY')
+    @pytest.mark.parametrize(('model_class'), list(models_1D.keys()))
+    def test_deriv_1D(self, model_class):
+        """
+        Test the derivative of a model by comparing results with an estimated derivative
+        """
+        x_lim = models_1D[model_class]['x_lim']
+
+        if model_class.deriv is None:
+            pytest.skip("Derivative function is not defined for model.")
+        if issubclass(model_class, (models.PolynomialModel, models.OrthoPolynomialBase)):
+            pytest.skip("Skip testing derivative of polynomials.")
+
+        if "log_fit" in models_1D[model_class]:
+            if models_1D[model_class]['log_fit']:
+                x = np.logspace(x_lim[0], x_lim[1], self.N)
+        else:
+            x = np.linspace(x_lim[0], x_lim[1], self.N)
+
+        parameters = models_1D[model_class]['parameters']
+        model_with_deriv = create_model(model_class, parameters, use_constraints=False)
+        model_no_deriv = create_model(model_class, parameters, use_constraints=False)
+
+        # add 10% noise to the amplitude
+        rsn = np.random.RandomState(1234567890)
+        n = 0.1 * parameters[0] * (rsn.rand(self.N) - 0.5)
+
+        data = model_with_deriv(x) + n
+        fitter_with_deriv = fitting.NonLinearLSQFitter()
+        new_model_with_deriv = fitter_with_deriv(model_with_deriv, x, data)
+        fitter_no_deriv = fitting.NonLinearLSQFitter()
+        new_model_no_deriv = fitter_no_deriv(model_no_deriv, x, data, estimate_jacobian=True)
+        utils.assert_allclose(new_model_with_deriv.parameters, new_model_no_deriv.parameters, atol=0.1)
+
+def create_model(model_class, parameters, use_constraints=True):
+    """
+    Create instance of model class.
+    """
+    constraints = {}
+    if issubclass(model_class, Parametric1DModel):
+        if "requires_scipy" in models_1D[model_class] and not HAS_SCIPY:
+            pytest.skip("SciPy not found")
+        if use_constraints:
+            if 'constraints' in models_1D[model_class]:
+                constraints = models_1D[model_class]['constraints']
+        return model_class(*parameters, **constraints)
+
+    elif issubclass(model_class, Parametric2DModel):
+        if "requires_scipy" in models_2D[model_class] and not HAS_SCIPY:
+            pytest.skip("SciPy not found")
+        if use_constraints:
+            if 'constraints' in models_2D[model_class]:
+                constraints = models_2D[model_class]['constraints']
+        return model_class(*parameters, **constraints)
+
+    elif issubclass(model_class, PolynomialModel):
+        return model_class(**parameters)
+
+
+def test_ShiftModel():
+    # Shift by a scalar
+    m = models.Shift(42)
+    assert m(0) == 42
+    utils.assert_equal(m([1, 2]), [43, 44])
+
+    # Shift by a list
+    m = models.Shift([42, 43])
+    utils.assert_equal(m(0), [42, 43])
+    utils.assert_equal(m([1, 2]), [[ 43,  44], [ 44,  45]])
+
+
+def test_ScaleModel():
+    # Scale by a scalar
+    m = models.Scale(42)
+    assert m(0) == 0
+    utils.assert_equal(m([1, 2]), [42, 84])
+
+    # Scale by a list
+    m = models.Scale([42, 43])
+    utils.assert_equal(m(0), [0, 0])
+    utils.assert_equal(m([1, 2]), [[ 42,  43], [ 84,  86]])
diff --git a/astropy/modeling/tests/test_parameters.py b/astropy/modeling/tests/test_parameters.py
new file mode 100644
index 0000000..5050dfa
--- /dev/null
+++ b/astropy/modeling/tests/test_parameters.py
@@ -0,0 +1,264 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+Tests models.parameters
+"""
+
+import numpy as np
+from numpy.testing import utils
+
+from . import irafutil
+from .. import models, fitting
+from ..core import ParametricModel
+from ..parameters import Parameter, InputParameterError
+from ...utils.data import get_pkg_data_filename
+from ...tests.helper import pytest
+
+
+class TestParModel(ParametricModel):
+    """
+    A toy model to test parameters machinery
+    """
+
+    coeff = Parameter('coeff')
+    e = Parameter('e')
+
+    def __init__(self, coeff, e, param_dim=1):
+        super(TestParModel, self).__init__(
+                coeff=coeff, e=e, param_dim=param_dim)
+
+    def __call__(self):
+        pass
+
+
+class TestParameters(object):
+
+    def setup_class(self):
+        """
+        Unit tests for parameters
+
+        Read an iraf database file created by onedspec.identify.
+        Use the information to create a 1D Chebyshev model and
+        perform the same fit.
+        Create also a gausian model.
+        """
+        test_file = get_pkg_data_filename('data/idcompspec.fits')
+        f = open(test_file)
+        lines = f.read()
+        reclist = lines.split("begin")
+        f.close()
+        record = irafutil.IdentifyRecord(reclist[1])
+        self.icoeff = record.coeff
+        order = int(record.fields['order'])
+        self.model = models.Chebyshev1D(order - 1)
+        self.gmodel = models.Gaussian1D(2, mean=3, stddev=4)
+        self.linear_fitter = fitting.LinearLSQFitter()
+        self.x = record.x
+        self.y = record.z
+        self.yy = np.array([record.z, record.z])
+
+    def test_set_slice(self):
+        """
+        Tests updating the parameters attribute with a slice.
+        This is what fitters internally do.
+        """
+        self.model.parameters[:] = np.array([3, 4, 5, 6, 7])
+        assert (self.model.parameters == [3., 4., 5., 6., 7.]).all()
+
+    def test_set_parameters_as_list(self):
+        """
+        Tests updating parameters using a list.
+        """
+        self.model.parameters = [30, 40, 50, 60, 70]
+        assert (self.model.parameters == [30., 40., 50., 60, 70]).all()
+
+    def test_set_parameters_as_array(self):
+        """
+        Tests updating parameters using an array.
+        """
+        self.model.parameters = np.array([3, 4, 5, 6, 7])
+        assert (self.model.parameters == [3., 4., 5., 6., 7.]).all()
+
+    def test_set_as_tuple(self):
+        """
+        Tests updating parameters using a tuple.
+        """
+
+        self.model.parameters = (1, 2, 3, 4, 5)
+        assert (self.model.parameters == [1, 2, 3, 4, 5]).all()
+
+    def test_set_model_attr_seq(self):
+        """
+        Tests updating the parameters attribute when a model's
+        parameter (in this case coeff) is updated.
+        """
+        self.model.parameters = [0, 0., 0., 0, 0]
+        self.model.c0 = 7
+        assert (self.model.parameters == [7, 0., 0., 0, 0]).all()
+
+    def test_set_model_attr_num(self):
+        """
+        Update the parameter list when a model's parameter is updated.
+        """
+        self.gmodel.amplitude = 7
+        assert (self.gmodel.parameters == [7, 3, 4]).all()
+
+    def test_set_item(self):
+        """
+        Update the parameters using indexing.
+        """
+        self.model.parameters = [1, 2, 3, 4, 5]
+        self.model.parameters[0] = 10.
+        assert (self.model.parameters == [10, 2, 3, 4, 5]).all()
+        assert self.model.c0 == 10
+
+    def test_wrong_size1(self):
+        """
+        Tests raising an error when attempting to reset the parameters
+        using a list of a different size.
+        """
+        with pytest.raises(InputParameterError):
+            self.model.parameters = [1, 2, 3]
+
+    def test_wrong_size2(self):
+        """
+        Tests raising an exception when attemppting to update a model's
+        parameter (in this case coeff) with a sequence of the wrong size.
+        """
+        with pytest.raises(InputParameterError):
+            self.model.c0 = [1, 2, 3]
+
+    def test_wrong_shape(self):
+        """
+        Tests raising an exception when attemppting to update a model's
+        parameter and the new value has the wrong shape.
+        """
+        with pytest.raises(InputParameterError):
+            self.gmodel.amplitude = [1, 2]
+
+    def test_par_against_iraf(self):
+        """
+        Test the fitter modifies model.parameters.
+
+        Uses an iraf example.
+        """
+        new_model = self.linear_fitter(self.model, self.x, self.y)
+        print self.y, self.x
+        utils.assert_allclose(new_model.parameters,
+                              np.array(
+                                  [4826.1066602783685, 952.8943813407858,
+                                   12.641236013982386,
+                                   -1.7910672553339604,
+                                   0.90252884366711317]),
+                              rtol=10 ** (-2))
+
+    def testPolynomial1D(self):
+        d = {'c0': 11, 'c1': 12, 'c2': 13, 'c3': 14}
+        p1 = models.Polynomial1D(3, **d)
+        utils.assert_equal(p1.parameters, [11, 12, 13, 14])
+
+    def test_poly1d_multiple_sets(self):
+        p1 = models.Polynomial1D(3, param_dim=3)
+        utils.assert_equal(p1.parameters, [0.0, 0.0, 0.0, 0, 0, 0,
+                                           0, 0, 0, 0, 0, 0])
+        utils.assert_equal(p1.c0, [0., 0, 0])
+        p1.c0 = [10, 10, 10]
+        utils.assert_equal(p1.parameters, [10.0, 10.0, 10.0, 0, 0,
+                                           0, 0, 0, 0, 0, 0, 0])
+
+    def test_par_slicing(self):
+        """
+        Test assigning to a parameter slice
+        """
+        p1 = models.Polynomial1D(3, param_dim=3)
+        p1.c0[:2] = [10, 10]
+        utils.assert_equal(p1.parameters, [10.0, 10.0, 0.0, 0, 0,
+                                           0, 0, 0, 0, 0, 0, 0])
+
+    def test_poly2d(self):
+        p2 = models.Polynomial2D(degree=3)
+        p2.c0_0 = 5
+        utils.assert_equal(p2.parameters, [5, 0, 0, 0, 0, 0, 0, 0, 0, 0])
+
+    def test_poly2d_multiple_sets(self):
+        kw = {'c0_0': [2, 3], 'c1_0': [1, 2], 'c2_0': [4, 5],
+              'c0_1': [1, 1], 'c0_2': [2, 2], 'c1_1': [5, 5]}
+        p2 = models.Polynomial2D(2, **kw)
+        utils.assert_equal(p2.parameters, [2, 3, 1, 2, 4, 5,
+                                           1, 1, 2, 2, 5, 5])
+
+    def test_non_fittable_model_parameters1d(self):
+        sh1 = models.Shift(2)
+        sh1.offsets = 3
+        assert(sh1.offsets == 3)
+
+    def test_non_fittable_model_parametersnd(self):
+        sc1 = models.Scale([2, 2])
+        sc1.factors = [3, 3]
+        assert(sc1.factors == [3, 3])
+
+    def test_non_fittable_model_parameters_wrong_shape(self):
+        sh1 = models.Shift(2)
+        with pytest.raises(InputParameterError):
+            sh1.offsets = [3, 3]
+
+
+class TestMultipleParameterSets(object):
+
+    def setup_class(self):
+        self.x1 = np.arange(1, 10, .1)
+        self.x, self.y = np.mgrid[:10, :7]
+        self.x11 = np.array([self.x1, self.x1]).T
+        self.gmodel = models.Gaussian1D([12, 10], [3.5, 5.2], stddev=[.4, .7])
+
+    def test_change_par(self):
+        """
+        Test that a change to one parameter as a set propagates
+        to param_sets.
+        """
+        self.gmodel.amplitude = [1, 10]
+        utils.assert_almost_equal(
+            self.gmodel.param_sets,
+            np.array([[1.,
+                       10],
+                      [3.5,
+                       5.2],
+                      [0.4,
+                       0.7]]))
+        utils.assert_almost_equal(self.gmodel.parameters, [1.0, 10.0, 3.5, 5.2, 0.4, 0.7])
+
+    def test_change_par2(self):
+        """
+        Test that a change to one single parameter in a set propagates
+        to param_sets.
+        """
+        self.gmodel.amplitude[0] = 11
+        utils.assert_almost_equal(
+            self.gmodel.param_sets,
+            np.array([[11.,
+                       10],
+                      [3.5,
+                       5.2],
+                      [0.4,
+                       0.7]]))
+        utils.assert_almost_equal(self.gmodel.parameters, [11.0, 10.0, 3.5, 5.2, 0.4, 0.7])
+
+    def test_change_parameters(self):
+        self.gmodel.parameters = [13, 10, 9, 5.2, 0.4, 0.7]
+        utils.assert_almost_equal(self.gmodel.amplitude.value, [13., 10.])
+        utils.assert_almost_equal(self.gmodel.mean.value, [9., 5.2])
+
+    def test_object_params(self):
+        l2 = TestParModel(coeff=[[1, 2], [3, 4]], e=(2, 3), param_dim=2)
+        utils.assert_almost_equal(l2.parameters, [1.0, 2.0, 3.0, 4.0, 2.0, 3.0])
+        #utils.assert_almost_equal(l2.param_sets, np.array([[[1, 2.],[3., 4.]],
+        #                                                   [2., 3.]], dtype=np.object))
+
+    def test_wrong_number_of_params(self):
+        with pytest.raises(InputParameterError):
+            TestParModel(coeff=[[1, 2], [3, 4]], e=(2, 3, 4), param_dim=2)
+
+    def test_wrong_number_of_params2(self):
+        # This *should* work--if param_dim > 1 and one of the parameter values
+        # is given as a scalar, repeat that value across all param sets
+        m = TestParModel(coeff=[[1, 2], [3, 4]], e=4, param_dim=2)
+        utils.assert_almost_equal(m.parameters, [1, 2, 3, 4, 4, 4])
diff --git a/astropy/modeling/tests/test_projections.py b/astropy/modeling/tests/test_projections.py
new file mode 100644
index 0000000..c1595e4
--- /dev/null
+++ b/astropy/modeling/tests/test_projections.py
@@ -0,0 +1,146 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+Test sky projections defined in WCS Paper II
+"""
+from __future__ import division
+import os.path
+import numpy as np
+from numpy.testing import utils
+from .. import projections
+from ...io import fits
+from ... import wcs
+from ...utils.data import get_pkg_data_filename
+from ...tests.helper import pytest
+
+
+def test_Projection_properties():
+    projection = projections.Sky2Pix_CAR()
+    assert projection.n_inputs == 2
+    assert projection.n_outputs == 2
+
+PIX_COORDINATES = [-10, 30]
+
+pars = [
+    ('TAN', projections.Sky2Pix_TAN, {}),
+    ('STG', projections.Sky2Pix_STG, {}),
+    ('SIN', projections.Sky2Pix_SIN, {}),
+    ('CEA', projections.Sky2Pix_CEA, {}),
+    ('CAR', projections.Sky2Pix_CAR, {}),
+    ('MER', projections.Sky2Pix_MER, {})
+]
+
+
+ at pytest.mark.parametrize(('ID', 'model', 'args'), pars)
+def test_Sky2Pix(ID, model, args):
+    """Check astropy model eval against wcslib eval"""
+    wcs_map = os.path.join("../../wcs/tests/maps", "1904-66_{0}.hdr".format(ID))
+    test_file = get_pkg_data_filename(wcs_map)
+    header = fits.Header.fromfile(test_file, endcard=False, padding=False)
+    w = wcs.WCS(header)
+    w.wcs.crval = [0., 0.]
+    w.wcs.crpix = [0, 0]
+    w.wcs.cdelt = [1, 1]
+    wcslibout = w.wcs.p2s([PIX_COORDINATES], 1)
+    wcs_pix = w.wcs.s2p(wcslibout['world'], 1)['pixcrd']
+    tinv = model(**args)
+    x, y = tinv(wcslibout['phi'], wcslibout['theta'])
+    utils.assert_almost_equal(np.asarray(x), wcs_pix[:, 0])
+    utils.assert_almost_equal(np.asarray(y), wcs_pix[:, 1])
+
+pars = [
+    ('TAN', projections.Pix2Sky_TAN, {}),
+    ('STG', projections.Pix2Sky_STG, {}),
+    ('SIN', projections.Pix2Sky_SIN, {}),
+    ('CEA', projections.Pix2Sky_CEA, {}),
+    ('CAR', projections.Pix2Sky_CAR, {}),
+    ('MER', projections.Pix2Sky_MER, {}),
+]
+
+
+ at pytest.mark.parametrize(('ID', 'model', 'args'), pars)
+def test_Pix2Sky(ID, model, args):
+    """Check astropy model eval against wcslib eval"""
+    wcs_map = os.path.join("../../wcs/tests/maps", "1904-66_{0}.hdr".format(ID))
+    test_file = get_pkg_data_filename(wcs_map)
+    header = fits.Header.fromfile(test_file, endcard=False, padding=False)
+    w = wcs.WCS(header)
+    w.wcs.crval = [0., 0.]
+    w.wcs.crpix = [0, 0]
+    w.wcs.cdelt = [1, 1]
+    wcslibout = w.wcs.p2s([PIX_COORDINATES], 1)
+    wcs_phi = wcslibout['phi']
+    wcs_theta = wcslibout['theta']
+    tanprj = model(**args)
+    phi, theta = tanprj(*PIX_COORDINATES)
+    utils.assert_almost_equal(np.asarray(phi), wcs_phi)
+    utils.assert_almost_equal(np.asarray(theta), wcs_theta)
+
+
+class TestAZP(object):
+
+    """
+    Test AZP projection
+    """
+    def setup_class(self):
+        ID = 'AZP'
+        wcs_map = os.path.join("../../wcs/tests/maps", "1904-66_{0}.hdr".format(ID))
+        test_file = get_pkg_data_filename(wcs_map)
+        header = fits.Header.fromfile(test_file, endcard=False, padding=False)
+        self.wazp = wcs.WCS(header)
+        self.wazp.wcs.crpix = np.array([0., 0.])
+        self.wazp.wcs.crval = np.array([0., 0.])
+        self.wazp.wcs.cdelt = np.array([1., 1.])
+        self.pv_kw = [kw[2] for kw in self.wazp.wcs.get_pv()]
+        proj = projections.__getattribute__("Pix2Sky_{0}".format(ID))
+        self.azp = proj(*self.pv_kw)
+        self.azpinv = self.azp.inverse()
+
+    def test_AZP_p2s(self):
+        wcslibout = self.wazp.wcs.p2s([[-10, 30]], 1)
+        wcs_phi = wcslibout['phi']
+        wcs_theta = wcslibout['theta']
+        phi, theta = self.azp(-10, 30)
+        utils.assert_almost_equal(np.asarray(phi), wcs_phi)
+        utils.assert_almost_equal(np.asarray(theta), wcs_theta)
+
+    def test_AZP_s2p(self):
+        wcslibout = self.wazp.wcs.p2s([[-10, 30]], 1)
+        wcs_pix = self.wazp.wcs.s2p(wcslibout['world'], 1)['pixcrd']
+        x, y = self.azpinv(wcslibout['phi'], wcslibout['theta'])
+        utils.assert_almost_equal(np.asarray(x), wcs_pix[:, 0])
+        utils.assert_almost_equal(np.asarray(y), wcs_pix[:, 1])
+
+
+class TestCYP(object):
+
+    """
+    Test CYP projection
+    """
+    def setup_class(self):
+        ID = "CYP"
+        wcs_map = os.path.join("../../wcs/tests/maps", "1904-66_{0}.hdr".format(ID))
+        test_file = get_pkg_data_filename(wcs_map)
+        header = fits.Header.fromfile(test_file, endcard=False, padding=False)
+        self.wazp = wcs.WCS(header)
+        self.wazp.wcs.crpix = np.array([0., 0.])
+        self.wazp.wcs.crval = np.array([0., 0.])
+        self.wazp.wcs.cdelt = np.array([1., 1.])
+        self.pv_kw = [kw[2] for kw in self.wazp.wcs.get_pv()]
+        proj = projections.__getattribute__("Pix2Sky_{0}".format(ID))
+        self.azp = proj(*self.pv_kw)
+        self.azpinv = self.azp.inverse()
+
+    def test_CYP_p2s(self):
+        wcslibout = self.wazp.wcs.p2s([[-10, 30]], 1)
+        wcs_phi = wcslibout['phi']
+        wcs_theta = wcslibout['theta']
+        phi, theta = self.azp(-10, 30)
+        utils.assert_almost_equal(np.asarray(phi), wcs_phi)
+        utils.assert_almost_equal(np.asarray(theta), wcs_theta)
+
+    def test_CYP_s2p(self):
+        wcslibout = self.wazp.wcs.p2s([[-10, 30]], 1)
+        wcs_pix = self.wazp.wcs.s2p(wcslibout['world'], 1)['pixcrd']
+        x, y = self.azpinv(wcslibout['phi'], wcslibout['theta'])
+        utils.assert_almost_equal(np.asarray(x), wcs_pix[:, 0])
+        utils.assert_almost_equal(np.asarray(y), wcs_pix[:, 1])
diff --git a/astropy/modeling/tests/test_rotations.py b/astropy/modeling/tests/test_rotations.py
new file mode 100644
index 0000000..30738f6
--- /dev/null
+++ b/astropy/modeling/tests/test_rotations.py
@@ -0,0 +1,44 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+from .. import models
+from numpy.testing import utils
+from ...tests.helper import pytest
+
+
+def test_RotateNative2Celestial():
+    phi, theta, psi = 42, 43, 44
+    model = models.RotateNative2Celestial(phi, theta, psi)
+    model.phi = model.phi + 1
+    model.psi = model.psi + 1
+    model.theta = model.theta + 1
+    assert model.phi == phi + 1
+    assert model.theta == theta + 1
+    assert model.psi == psi + 1
+
+
+def test_native_celestial_native():
+    phi, theta, psi = 42, 43, 44
+    n2c = models.RotateNative2Celestial(phi, theta, psi)
+    c2n = models.RotateCelestial2Native(phi, theta, psi)
+
+    nnphi, ntheta = 33, 44
+    calpha, cdelta = n2c(nnphi, ntheta)
+    nnphi2, ntheta2 = c2n(calpha, cdelta)
+    utils.assert_allclose(nnphi2, nnphi)
+    utils.assert_allclose(ntheta2, ntheta)
+
+    assert n2c.inverse()(nnphi, ntheta) == c2n(nnphi, ntheta)
+    assert c2n.inverse()(nnphi, ntheta) == n2c(nnphi, ntheta)
+
+
+def test_native_celestial_theta90():
+    n2c = models.RotateNative2Celestial(1, 90, 0)
+    alpha, delta = n2c(1, 1)
+    utils.assert_allclose( delta, 1)
+    utils.assert_allclose(alpha, 182)
+
+
+def test_MatrixRotation2D():
+    model = models.MatrixRotation2D(angle=90)
+    x, y = model(1, 0)
+    utils.assert_allclose([x, y], [0, -1], atol=1e-10)
diff --git a/astropy/modeling/utils.py b/astropy/modeling/utils.py
new file mode 100644
index 0000000..b1657c6
--- /dev/null
+++ b/astropy/modeling/utils.py
@@ -0,0 +1,52 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+This module provides utility functions for the models package
+"""
+
+from __future__ import division
+
+import numpy as np
+
+
+__all__ = ['poly_map_domain', 'comb']
+
+
+def poly_map_domain(oldx, domain, window):
+    """
+    Map domain into window by shifting and scaling.
+
+    Parameters
+    ----------
+    oldx : array
+          original coordinates
+    domain : list or tuple of length 2
+          function domain
+    window : list or tuple of length 2
+          range into which to map the domain
+    """
+    domain = np.array(domain, dtype=np.float64)
+    window = np.array(window, dtype=np.float64)
+    scl = (window[1] - window[0]) / (domain[1] - domain[0])
+    off = (window[0] * domain[1] - window[1] * domain[0]) / (domain[1] - domain[0])
+    return off + scl * oldx
+
+
+def comb(N, k):
+    """
+    The number of combinations of N things taken k at a time.
+
+    Parameters
+    ----------
+    N : int, array
+        Number of things.
+    k : int, array
+        Number of elements taken.
+
+    """
+    if (k > N) or (N < 0) or (k < 0):
+        return 0
+    val = 1
+    for j in xrange(min(k, N - k)):
+        val = (val * (N - j)) / (j + 1)
+    return val
diff --git a/astropy/nddata/__init__.py b/astropy/nddata/__init__.py
index 2913604..31ca260 100644
--- a/astropy/nddata/__init__.py
+++ b/astropy/nddata/__init__.py
@@ -11,11 +11,3 @@ be easily provided by a single array.
 from .nddata import *
 from .nduncertainty import *
 from .flag_collection import *
-
-try:
-    # Not guaranteed available at setup time
-    from .convolution.convolve import convolve,convolve_fft
-    from .convolution.make_kernel import make_kernel
-except ImportError:
-    if not _ASTROPY_SETUP_:
-        raise
diff --git a/astropy/nddata/convolution/make_kernel.py b/astropy/nddata/convolution/make_kernel.py
deleted file mode 100644
index 5227417..0000000
--- a/astropy/nddata/convolution/make_kernel.py
+++ /dev/null
@@ -1,124 +0,0 @@
-# Licensed under a 3-clause BSD style license - see PYFITS.rst
-
-import numpy as np
-
-def make_kernel(kernelshape, kernelwidth=3, kerneltype='gaussian',
-        trapslope=None, normalize_kernel=np.sum, force_odd=False):
-    """
-    Create a smoothing kernel for use with `convolve` or `convolve_fft`.
-
-    Parameters
-    ----------
-    kernelshape : n-tuple
-        A tuple (or list or array) defining the shape of the kernel.  The
-        length of kernelshape determines the dimensionality of the resulting
-        kernel
-    kernelwidth : float
-        Width of kernel in pixels  (see definitions under `kerneltype`)
-    kerneltype : {'gaussian', 'boxcar', 'tophat', 'airy', 'trapezoid'}
-        Defines the type of kernel to be generated. The following types are
-        available:
-
-        * 'gaussian'
-            Uses a gaussian kernel with sigma = `kernelwidth` (in pixels),
-            i.e. kernel = exp(-r**2 / (2*sigma**2)) where r is the radius.
-        * 'boxcar'
-            A `kernelwidth` x `kernelwidth` square kernel, i.e.,
-            kernel = (x < `kernelwidth`) * (y < `kernelwidth`)
-        * 'tophat'
-            A flat circle  with radius = `kernelwidth`,
-            i.e., kernel = (r < `kernelwidth`)
-        * 'airy'
-            A kernel using the airy function from optics. It requires
-            `scipy.special` for the Bessel function. See e.g.,
-            http://en.wikipedia.org/wiki/Airy_disk.
-        * 'trapezoid'
-            A kernel like 'tophat' but with sloped edges. It is
-            effectively a cone chopped off at the `kernelwidth` radius.
-
-    trapslope : float
-        Slope of the trapezoid kernel.  Only used if `kerneltype` == 'trapezoid'
-    normalize_kernel : function
-        Function to use for kernel normalization
-    force_odd : boolean
-        If set, forces the kernel to have odd dimensions (needed for convolve
-        w/o ffts)
-
-    Returns
-    -------
-    kernel : ndarray
-        An N-dimensional float array
-
-    Examples
-    --------
-
-    >>> make_kernel([3, 3], 1, 'boxcar')
-    array([[ 0.  0.  0.]
-           [ 0.  1.  0.]
-           [ 0.  0.  0.]])
-
-    >>> make_kernel([9], 1)  # Gaussian by default
-    array([  1.33830625e-04   4.43186162e-03   5.39911274e-02   2.41971446e-01
-             3.98943469e-01   2.41971446e-01   5.39911274e-02   4.43186162e-03
-             1.33830625e-04])
-
-    >>> make_kernel([3, 3], 3, 'boxcar')
-    array([[ 0.11111111,  0.11111111,  0.11111111],
-           [ 0.11111111,  0.11111111,  0.11111111],
-           [ 0.11111111,  0.11111111,  0.11111111]])
-
-    >>> make_kernel([3, 3], 1.4, 'tophat')
-    array([[ 0. ,  0.2,  0. ],
-           [ 0.2,  0.2,  0.2],
-           [ 0. ,  0.2,  0. ]])
-
-
-    """
-
-    if force_odd:
-        kernelshape = [n-1 if (n%2==0) else n for n in kernelshape]
-
-    if normalize_kernel is True:
-        normalize_kernel = np.sum
-
-    if kerneltype == 'gaussian':
-        rr = np.sum([(x-(x.max()+1)//2)**2 for x in np.indices(kernelshape)],axis=0)**0.5
-        kernel = np.exp(-(rr**2)/(2.*kernelwidth**2))
-        kernel /= normalize_kernel(kernel) #/ (kernelwidth**2 * (2*np.pi))
-    elif kerneltype == 'boxcar':
-        kernel = np.zeros(kernelshape,dtype='float64')
-        kernelslices = []
-        for dimsize in kernelshape:
-            center = dimsize - (dimsize+1)//2
-            kernelslices += [slice(center - (kernelwidth)//2, center + (kernelwidth+1)//2)]
-        kernel[kernelslices] = 1.0
-        kernel /= normalize_kernel(kernel)
-    elif kerneltype == 'tophat':
-        rr = np.sum([(x-(x.max())/2.)**2 for x in np.indices(kernelshape)],axis=0)**0.5
-        kernel = np.zeros(kernelshape,dtype='float64')
-        kernel[rr<kernelwidth] = 1.0
-        # normalize
-        kernel /= normalize_kernel(kernel)
-    elif kerneltype == 'airy':
-        try:
-            import scipy.special
-        except ImportError:
-            raise ImportError("Could not import scipy.special; cannot create an "+
-                    "airy kernel without this (need the bessel function)")
-        rr = np.sum([(x-(x.max())/2.)**2 for x in np.indices(kernelshape)],axis=0)**0.5
-        # airy function is first bessel(x) / x  [like the sinc]
-        kernel = scipy.special.j1(rr/kernelwidth) / (rr/kernelwidth)
-        # fix NAN @ center
-        kernel[rr==0] = 0.5
-        kernel /= normalize_kernel(kernel)
-    elif kerneltype == 'trapezoid':
-        rr = np.sum([(x-(x.max())/2.)**2 for x in np.indices(kernelshape)],axis=0)**0.5
-        if trapslope:
-            zz = rr.max()-(rr*trapslope)
-            zz[zz<0] = 0
-            zz[rr<kernelwidth] = 1.0
-            kernel = zz/zz.sum()
-        else:
-            raise ValueError("Must specify a slope for kerneltype='trapezoid'")
-
-    return kernel
diff --git a/astropy/nddata/convolution/tests/test_make_kernel.py b/astropy/nddata/convolution/tests/test_make_kernel.py
deleted file mode 100644
index 981ef8f..0000000
--- a/astropy/nddata/convolution/tests/test_make_kernel.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# Licensed under a 3-clause BSD style license - see LICENSE.rst
-import numpy as np
-
-from ....tests.compat import assert_allclose
-from ....tests.helper import pytest
-
-from ..make_kernel import make_kernel
-
-try:
-    import scipy
-    HAS_SCIPY = True
-except ImportError:
-    HAS_SCIPY = False
-
- at pytest.mark.skipif('not HAS_SCIPY')
-def test_airy():
-    """
-    Test kerneltype airy, a.k.a. brickwall
-    Checks https://github.com/astropy/astropy/pull/939
-    """
-    k1 = make_kernel([3, 3], kernelwidth=0.5, kerneltype='airy')
-    ref = np.array([[ 0.06375119,  0.12992753,  0.06375119],
-                    [ 0.12992753,  0.22528514,  0.12992753],
-                    [ 0.06375119,  0.12992753,  0.06375119]])
-    assert_allclose(k1, ref, rtol=0, atol=1e-7)
diff --git a/astropy/nddata/flag_collection.py b/astropy/nddata/flag_collection.py
index 461bd7c..f76c435 100644
--- a/astropy/nddata/flag_collection.py
+++ b/astropy/nddata/flag_collection.py
@@ -1,4 +1,7 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+from __future__ import absolute_import, division, print_function, unicode_literals
+
 import numpy as np
 
 from ..utils.compat.odict import OrderedDict
diff --git a/astropy/nddata/nddata.py b/astropy/nddata/nddata.py
index d0ceda9..ef71d53 100644
--- a/astropy/nddata/nddata.py
+++ b/astropy/nddata/nddata.py
@@ -1,7 +1,10 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-#This module implements the base NDData class.
+# This module implements the base NDData class.
 
-__all__ = ['NDData']
+from __future__ import absolute_import, division, print_function, unicode_literals
+
+import collections
+from copy import deepcopy
 
 import numpy as np
 
@@ -11,15 +14,22 @@ from .. import log
 from .flag_collection import FlagCollection
 from .nduncertainty import IncompatibleUncertaintiesException, NDUncertainty
 from ..utils.compat.odict import OrderedDict
-from  ..io import registry as io_registry
+from ..io import registry as io_registry
 from ..config import ConfigurationItem
+from ..utils.metadata import MetaData
+
+__all__ = ['NDData']
+
+
+__doctest_skip__ = ['NDData']
+
 
 WARN_UNSUPPORTED_CORRELATED = ConfigurationItem(
     'warn_unsupported_correlated', True,
     'Whether to issue a warning if NDData arithmetic is performed with '
     'uncertainties and the uncertainties do not support the propagation '
     'of correlated uncertainties.'
-    )
+)
 
 
 class NDData(object):
@@ -103,6 +113,8 @@ class NDData(object):
 
     """
 
+    meta = MetaData()
+
     def __init__(self, data, uncertainty=None, mask=None, flags=None, wcs=None,
                  meta=None, unit=None):
 
@@ -111,23 +123,24 @@ class NDData(object):
 
             if uncertainty is not None:
                 self.uncertainty = uncertainty
-                log.info("Overwriting NDData's current uncertainty being overwritten with specified uncertainty")
+                log.info("Overwriting NDData's current uncertainty being"
+                         " overwritten with specified uncertainty")
 
             if mask is not None:
                 self.mask = mask
-                log.info("Overwriting NDData's current mask being overwritten with specified mask")
+                log.info("Overwriting NDData's current mask with specified mask")
 
             if flags is not None:
                 self.flags = flags
-                log.info("Overwriting NDData's current flags being overwritten with specified flag")
+                log.info("Overwriting NDData's current flags with specified flag")
 
             if wcs is not None:
                 self.wcs = wcs
-                log.info("Overwriting NDData's current wcs being overwritten with specified wcs")
+                log.info("Overwriting NDData's current wcs with specified wcs")
 
             if meta is not None:
                 self.meta = meta
-                log.info("Overwriting NDData's current meta being overwritten with specified meta")
+                log.info("Overwriting NDData's current meta with specified meta")
 
             if unit is not None:
                 raise ValueError('To convert to different unit please use .to')
@@ -138,9 +151,9 @@ class NDData(object):
                 if mask is not None:
                     self.mask = mask
                     log.info("NDData was created with a masked array, and a "
-                        "mask was explictly provided to NDData. The explicitly "
-                        "passed-in mask will be used and the masked array's "
-                        "mask will be ignored.")
+                             "mask was explictly provided to NDData. The explicitly "
+                             "passed-in mask will be used and the masked array's "
+                             "mask will be ignored.")
                 else:
                     self.mask = data.mask
             else:
@@ -153,6 +166,14 @@ class NDData(object):
             self.meta = meta
             self.unit = unit
 
+    def __str__(self):
+        return str(self.data)
+
+    def __repr__(self):
+        prefix = self.__class__.__name__ + '('
+        body = np.array2string(self.data, separator=', ', prefix=prefix)
+        return ''.join([prefix, body, ')'])
+
     @property
     def mask(self):
         return self._mask
@@ -211,20 +232,6 @@ class NDData(object):
             self._uncertainty = value
 
     @property
-    def meta(self):
-        return self._meta
-
-    @meta.setter
-    def meta(self, value):
-        if value is None:
-            self._meta = OrderedDict()
-        else:
-            try:
-                self._meta = OrderedDict(value)
-            except ValueError:
-                raise TypeError('NDData meta attribute must be dict-like')
-
-    @property
     def unit(self):
         return self._unit
 
@@ -300,8 +307,9 @@ class NDData(object):
         else:
             new_wcs = None
 
-        return self.__class__(new_data, uncertainty=new_uncertainty, mask=new_mask, flags=new_flags, wcs=new_wcs,
-            meta=self.meta, unit=self.unit)
+        return self.__class__(new_data, uncertainty=new_uncertainty,
+                              mask=new_mask, flags=new_flags, wcs=new_wcs,
+                              meta=self.meta, unit=self.unit)
 
     def _arithmetic(self, operand, propagate_uncertainties, name, operation):
         """
@@ -338,7 +346,7 @@ class NDData(object):
 
         if not (self.unit is None and operand.unit is None):
             if (self.unit is None or operand.unit is None
-                or not self.unit.is_equivalent(operand.unit)):
+                    or not self.unit.is_equivalent(operand.unit)):
                 raise ValueError("operand units do not match")
 
         if self.shape != operand.shape:
@@ -360,9 +368,9 @@ class NDData(object):
         elif operand.uncertainty is None:
             result.uncertainty = self.uncertainty
         else:  # both self and operand have uncertainties
-            if WARN_UNSUPPORTED_CORRELATED() and \
-               (not self.uncertainty.support_correlated or \
-               not operand.uncertainty.support_correlated):
+            if (WARN_UNSUPPORTED_CORRELATED() and
+                (not self.uncertainty.support_correlated or
+                 not operand.uncertainty.support_correlated)):
                 log.info("The uncertainty classes used do not support the "
                          "propagation of correlated errors, so uncertainties"
                          " will be propagated assuming they are uncorrelated")
@@ -450,7 +458,7 @@ class NDData(object):
 
         Raises
         ------
-        UnitsException
+        UnitsError
             If units are inconsistent.
         """
         if self.unit is None:
diff --git a/astropy/nddata/nduncertainty.py b/astropy/nddata/nduncertainty.py
index 1b8d023..ec13aa2 100644
--- a/astropy/nddata/nduncertainty.py
+++ b/astropy/nddata/nduncertainty.py
@@ -1,22 +1,28 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+from __future__ import absolute_import, division, print_function, unicode_literals
+
 import abc
 
 import numpy as np
 
-__all__ = ['MissingDataAssociationException', 'IncompatibleUncertaintiesException', 'NDUncertainty',
+__all__ = ['MissingDataAssociationException',
+           'IncompatibleUncertaintiesException', 'NDUncertainty',
            'StdDevUncertainty']
 
 
 class IncompatibleUncertaintiesException(Exception):
     """
-    This exception should be used to indicate cases in which uncertainties with two different classes can not be propagated.
+    This exception should be used to indicate cases in which uncertainties
+    with two different classes can not be propagated.
     """
     pass
 
 
 class MissingDataAssociationException(Exception):
     """
-    This exception should be used to indicate that an uncertainty instance has not been associated with a parent `~astropy.nddata.nddata.NDData` object.
+    This exception should be used to indicate that an uncertainty instance has
+    not been associated with a parent `~astropy.nddata.nddata.NDData` object.
     """
     pass
 
@@ -155,7 +161,6 @@ class StdDevUncertainty(NDUncertainty):
         else:
             self.array = np.array(array, copy=copy, subok=True)
 
-
     @property
     def parent_nddata(self):
         try:
@@ -166,7 +171,6 @@ class StdDevUncertainty(NDUncertainty):
         except AttributeError:
             raise MissingDataAssociationException("Uncertainty is not associated with an NDData object")
 
-
     @parent_nddata.setter
     def parent_nddata(self, value):
         if self.array is None or value is None:
@@ -174,6 +178,7 @@ class StdDevUncertainty(NDUncertainty):
         else:
             if value.shape != self.array.shape:
                 raise ValueError("parent shape does not match array data shape")
+        self._parent_nddata = value
 
     @property
     def array(self):
@@ -301,9 +306,9 @@ class StdDevUncertainty(NDUncertainty):
             raise ValueError("standard deviation values are not set in other_nddata")
 
         result_uncertainty = StdDevUncertainty()
-        result_uncertainty.array = np.sqrt((self.array / self.data) ** 2
-                               + (other_nddata.uncertainty.array / other_nddata.data) ** 2) \
-                               * result_data
+        result_uncertainty.array = (np.sqrt((self.array / self.parent_nddata.data) ** 2
+                                            + (other_nddata.uncertainty.array / other_nddata.data) ** 2)
+                                    * result_data)
 
         return result_uncertainty
 
@@ -339,8 +344,8 @@ class StdDevUncertainty(NDUncertainty):
             raise ValueError("standard deviation values are not set in other_nddata")
 
         result_uncertainty = StdDevUncertainty()
-        result_uncertainty.array = np.sqrt((self.array / self.data) ** 2
-                               + (other_nddata.uncertainty.array / other_nddata.data) ** 2) \
-                               * result_data
+        result_uncertainty.array = (np.sqrt((self.array / self.parent_nddata.data) ** 2
+                                            + (other_nddata.uncertainty.array / other_nddata.data) ** 2)
+                                    * result_data)
 
         return result_uncertainty
diff --git a/astropy/nddata/setup_package.py b/astropy/nddata/setup_package.py
new file mode 100644
index 0000000..4220337
--- /dev/null
+++ b/astropy/nddata/setup_package.py
@@ -0,0 +1,2 @@
+def requires_2to3():
+    return False
diff --git a/astropy/nddata/tests/test_flag_collection.py b/astropy/nddata/tests/test_flag_collection.py
index 2308d7e..7ed4af6 100644
--- a/astropy/nddata/tests/test_flag_collection.py
+++ b/astropy/nddata/tests/test_flag_collection.py
@@ -1,7 +1,10 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from ...tests.helper import pytest
+
+from __future__ import absolute_import, division, print_function, unicode_literals
+
 import numpy as np
 
+from ...tests.helper import pytest
 from .. import FlagCollection
 
 
diff --git a/astropy/nddata/tests/test_nddata.py b/astropy/nddata/tests/test_nddata.py
index 73cd46b..eb0145f 100644
--- a/astropy/nddata/tests/test_nddata.py
+++ b/astropy/nddata/tests/test_nddata.py
@@ -1,12 +1,15 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
+from __future__ import absolute_import, division, print_function, unicode_literals
+
+import textwrap
+
 import numpy as np
 from numpy.testing import assert_array_equal
 
 from ..nddata import NDData
 from ..nduncertainty import StdDevUncertainty, IncompatibleUncertaintiesException, NDUncertainty
 from ...tests.helper import pytest, raises
-from ...io import fits
 from ...utils import NumpyRNGContext
 
 
@@ -29,6 +32,7 @@ def test_nddata_empty():
     with pytest.raises(TypeError):
         NDData()  # empty initializer should fail
 
+
 def test_nddata_simple():
     with NumpyRNGContext(123):
         nd = NDData(np.random.random((10, 10)))
@@ -37,6 +41,42 @@ def test_nddata_simple():
     assert nd.dtype == np.dtype(float)
 
 
+def test_nddata_str():
+    arr1d = NDData([1, 2, 3])
+    assert str(arr1d) == '[1 2 3]'
+
+    arr2d = NDData([[1, 2], [3, 4]])
+    assert str(arr2d) == textwrap.dedent("""
+        [[1 2]
+         [3 4]]"""[1:])
+
+    arr3d = NDData([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
+    assert str(arr3d) == textwrap.dedent("""
+        [[[1 2]
+          [3 4]]
+
+         [[5 6]
+          [7 8]]]"""[1:])
+
+
+def test_nddata_repr():
+    arr1d = NDData([1, 2, 3])
+    assert repr(arr1d) == 'NDData([1, 2, 3])'
+
+    arr2d = NDData([[1, 2], [3, 4]])
+    assert repr(arr2d) == textwrap.dedent("""
+        NDData([[1, 2],
+                [3, 4]])"""[1:])
+
+    arr3d = NDData([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
+    assert repr(arr3d) == textwrap.dedent("""
+        NDData([[[1, 2],
+                 [3, 4]],
+
+                [[5, 6],
+                 [7, 8]]])"""[1:])
+
+
 def test_nddata_mask_valid():
     with NumpyRNGContext(456):
         NDData(np.random.random((10, 10)), mask=np.random.random((10, 10)) > 0.5)
@@ -51,19 +91,19 @@ def test_nddata_mask_invalid_shape(shape):
 
 
 def test_nddata_uncertainty_init():
-    u =  StdDevUncertainty(array=np.ones((5, 5)))
+    u = StdDevUncertainty(array=np.ones((5, 5)))
     d = NDData(np.ones((5, 5)), uncertainty=u)
 
 
 def test_nddata_uncertainty_init_invalid_shape_1():
-    u =  StdDevUncertainty(array=np.ones((6, 6)))
+    u = StdDevUncertainty(array=np.ones((6, 6)))
     with pytest.raises(ValueError) as exc:
         NDData(np.ones((5, 5)), uncertainty=u)
     assert exc.value.args[0] == 'parent shape does not match array data shape'
 
 
 def test_nddata_uncertainty_init_invalid_shape_2():
-    u =  StdDevUncertainty()
+    u = StdDevUncertainty()
     NDData(np.ones((5, 5)), uncertainty=u)
     with pytest.raises(ValueError) as exc:
         u.array = np.ones((6, 6))
@@ -137,7 +177,6 @@ def test_nddata_add_uncertainties():
 def test_nddata_add_uncertainties_mismatch():
     u1 = StdDevUncertainty(array=np.ones((5, 5)) * 3)
     u2 = FakeUncertainty()
-    print u2.__class__
     d1 = NDData(np.ones((5, 5)), uncertainty=u1)
     d2 = NDData(np.ones((5, 5)), uncertainty=u2)
     with pytest.raises(IncompatibleUncertaintiesException) as exc:
@@ -186,10 +225,29 @@ def test_nddata_subtract_uncertainties():
     assert_array_equal(d3.uncertainty.array, np.sqrt(10.))
 
 
+def test_nddata_multiply_uncertainties():
+    u1 = StdDevUncertainty(array=np.ones((5, 5)) * 3)
+    u2 = StdDevUncertainty(array=np.ones((5, 5)))
+    d1 = NDData(np.ones((5, 5)), uncertainty=u1)
+    d2 = NDData(np.ones((5, 5)) * 2., uncertainty=u2)
+    d3 = d1.multiply(d2)
+    assert np.all(d3.data == 2.)
+    assert_array_equal(d3.uncertainty.array, 2 * np.sqrt(9.25))
+
+
+def test_nddata_divide_uncertainties():
+    u1 = StdDevUncertainty(array=np.ones((5, 5)) * 3)
+    u2 = StdDevUncertainty(array=np.ones((5, 5)))
+    d1 = NDData(np.ones((5, 5)), uncertainty=u1)
+    d2 = NDData(np.ones((5, 5)) * 2., uncertainty=u2)
+    d3 = d1.divide(d2)
+    assert np.all(d3.data == 0.5)
+    assert_array_equal(d3.uncertainty.array, 0.5 * np.sqrt(9.25))
+
+
 def test_nddata_subtract_uncertainties_mismatch():
     u1 = StdDevUncertainty(array=np.ones((5, 5)) * 3)
     u2 = FakeUncertainty()
-    print u2.__class__
     d1 = NDData(np.ones((5, 5)), uncertainty=u1)
     d2 = NDData(np.ones((5, 5)) * 2., uncertainty=u2)
     with pytest.raises(IncompatibleUncertaintiesException) as exc:
@@ -208,18 +266,20 @@ def test_convert_unit_to():
 def test_invalid_unit():
     d = NDData(np.ones((5, 5)), unit="NotAValidUnit")
 
+
 def test_simple_slicing():
     u1 = StdDevUncertainty(array=np.ones((5, 5)) * 3)
     d1 = NDData(np.ones((5, 5)), uncertainty=u1)
-    assert d1.shape == (5,5)
+    assert d1.shape == (5, 5)
     d2 = d1[2:3, 2:3]
-    assert d2.shape == (1,1)
+    assert d2.shape == (1, 1)
+
 
 def test_slicing_reference():
     u1 = StdDevUncertainty(array=np.ones((5, 5)) * 3)
     d1 = NDData(np.ones((5, 5)), uncertainty=u1)
     d2 = d1[2:3, 2:3]
-    #asserting that the new nddata contains references to the original nddata
+    # asserting that the new nddata contains references to the original nddata
     assert d2.data.base is d1.data
     assert d2.uncertainty.array.base is d1.uncertainty.array
 
@@ -237,19 +297,6 @@ def test_initializing_from_nduncertainty():
 
     assert u1.array is u2.array
 
-def test_meta2ordered_dict():
-    hdr = fits.header.Header()
-    hdr.set('observer', 'Edwin Hubble')
-    hdr.set('exptime', '3600')
-
-    d1 = NDData(np.ones((5, 5)), meta=hdr)
-    assert d1.meta['OBSERVER'] == 'Edwin Hubble'
-
- at raises(TypeError)
-def test_meta2ordered_dict_fail():
-    hdr = 'this is not a valid header'
-    d1 = NDData(np.ones((5, 5)), meta=hdr)
-
 def test_masked_array_input():
 
     with NumpyRNGContext(12345):
@@ -258,13 +305,24 @@ def test_masked_array_input():
 
     nd = NDData(marr)
 
-    #check that masks and data match
+    # check that masks and data match
     assert_array_equal(nd.mask, marr.mask)
     assert_array_equal(nd.data, marr.data)
 
-    #check that they are both by reference
+    # check that they are both by reference
     marr.mask[10] = ~marr.mask[10]
     marr.data[11] = 123456789
 
     assert_array_equal(nd.mask, marr.mask)
     assert_array_equal(nd.data, marr.data)
+
+# Check that the meta descriptor is working as expected. The MetaBaseTest class
+# takes care of defining all the tests, and we simply have to define the class
+# and any minimal set of args to pass.
+
+from ...utils.tests.test_metadata import MetaBaseTest
+
+
+class TestMetaNDData(MetaBaseTest):
+    test_class = NDData
+    args = np.array([[1.]])
diff --git a/astropy/setup_helpers.py b/astropy/setup_helpers.py
index bbb515b..9f2f784 100644
--- a/astropy/setup_helpers.py
+++ b/astropy/setup_helpers.py
@@ -9,6 +9,7 @@ from __future__ import absolute_import, print_function
 import collections
 import errno
 import imp
+import inspect
 import os
 import re
 import shlex
@@ -16,8 +17,10 @@ import shutil
 import subprocess
 import sys
 import textwrap
+import warnings
 
-from distutils import log
+from distutils import log, ccompiler, sysconfig
+from distutils.cmd import DistutilsOptionError
 from distutils.dist import Distribution
 from distutils.errors import DistutilsError, DistutilsFileError
 from distutils.core import Extension
@@ -27,11 +30,13 @@ from setuptools.command.build_ext import build_ext as SetuptoolsBuildExt
 from setuptools.command.build_py import build_py as SetuptoolsBuildPy
 
 from setuptools.command.register import register as SetuptoolsRegister
+from setuptools import find_packages
 
 from .tests.helper import astropy_test
 from .utils import silence
 from .utils.compat.misc import invalidate_caches
 from .utils.misc import walk_skip_hidden
+from .utils.exceptions import AstropyDeprecationWarning
 
 
 try:
@@ -54,6 +59,10 @@ except SyntaxError:  # occurs if markupsafe is recent version, which doesn't sup
 PY3 = sys.version_info[0] >= 3
 
 
+# This adds a new keyword to the setup() function
+Distribution.skip_2to3 = []
+
+
 _adjusted_compiler = False
 def adjust_compiler(package):
     """
@@ -74,9 +83,6 @@ def adjust_compiler(package):
     to.
     """
 
-    from distutils import ccompiler, sysconfig
-    import re
-
     compiler_mapping = [
         (b'i686-apple-darwin[0-9]*-llvm-gcc-4.2', 'clang')
         ]
@@ -152,7 +158,7 @@ def adjust_compiler(package):
                     """
                     The C compiler used to compile Python {compiler:s}, and
                     which is normally used to compile C extensions, is not
-                    available. You can explicitly specifiy which compiler to
+                    available. You can explicitly specify which compiler to
                     use by setting the CC environment variable, for example:
 
                         CC=gcc python setup.py <command>
@@ -174,10 +180,13 @@ def adjust_compiler(package):
 def get_compiler_version(compiler):
 
     process = subprocess.Popen(
-    shlex.split(compiler) + ['--version'], stdout=subprocess.PIPE)
+        shlex.split(compiler) + ['--version'], stdout=subprocess.PIPE)
 
     output = process.communicate()[0].strip()
-    version = output.split()[0]
+    try:
+        version = output.split()[0]
+    except IndexError:
+        return 'unknown'
 
     return version
 
@@ -307,8 +316,7 @@ def get_compiler_option():
 
     compiler = get_distutils_build_option('compiler')
     if compiler is None:
-        import distutils.ccompiler
-        return distutils.ccompiler.get_default_compiler()
+        return ccompiler.get_default_compiler()
 
     return compiler
 
@@ -381,7 +389,7 @@ def register_commands(package, version, release):
     if HAVE_SPHINX:
         _registered_commands['build_sphinx'] = AstropyBuildSphinx
     else:
-         _registered_commands['build_sphinx'] = FakeBuildSphinx
+        _registered_commands['build_sphinx'] = FakeBuildSphinx
 
     # Need to override the __name__ here so that the commandline options are
     # presented as being related to the "build" command, for example; normally
@@ -394,8 +402,6 @@ def register_commands(package, version, release):
     # Add a few custom options; more of these can be added by specific packages
     # later
     for option in [
-            ('enable-legacy',
-             "Install legacy shims", True),
             ('use-system-libraries',
              "Use system libraries whenever possible", True)]:
         add_command_option('build', *option)
@@ -562,6 +568,19 @@ class AstropyBuildPy(SetuptoolsBuildPy):
         self.build_lib = build_purelib
         SetuptoolsBuildPy.finalize_options(self)
 
+    def run_2to3(self, files, doctests=False):
+        # Filter the files to exclude things that shouldn't be 2to3'd
+        skip_2to3 = self.distribution.skip_2to3
+        filtered_files = []
+        for file in files:
+            for package in skip_2to3:
+                if file[len(self.build_lib) + 1:].startswith(package):
+                    break
+            else:
+                filtered_files.append(file)
+
+        SetuptoolsBuildPy.run_2to3(self, filtered_files, doctests)
+
     def run(self):
         # first run the normal build_py
         SetuptoolsBuildPy.run(self)
@@ -593,13 +612,21 @@ def generate_default_config(build_lib, package):
     else:
         builtins = '__builtin__'
 
+    # astropy may have been built with a numpy that setuptools
+    # downloaded and installed into the current directory for us.
+    # Therefore, we need to extend the sys.path of the subprocess
+    # that's generating the config file, with the sys.path of this
+    # process.
+
     subproccode = (
+        'import sys; sys.path.extend({paths!r});'
         'import {builtins};{builtins}._ASTROPY_SETUP_ = True;'
         'from astropy.config.configuration import generate_all_config_items;'
         'generate_all_config_items({pkgnm!r}, True, filename={filenm!r})')
     subproccode = subproccode.format(builtins=builtins,
                                      pkgnm=package,
-                                     filenm=os.path.abspath(filename))
+                                     filenm=os.path.abspath(filename),
+                                     paths=sys.path)
 
     # Note that cwd=build_lib--we're importing astropy from the build/ dir
     # but using the astropy/ source dir as the config directory
@@ -739,6 +766,12 @@ if HAVE_SPHINX:
 
         description = 'Build Sphinx documentation for Astropy environment'
         user_options = SphinxBuildDoc.user_options[:]
+        user_options.append(('warnings-returncode', 'w',
+                             'Parses the sphinx output and sets the return '
+                             'code to 1 if there are any warnings. Note that '
+                             'this will cause the sphinx log to only update '
+                             'when it completes, rather than continuously as '
+                             'is normally the case.'))
         user_options.append(('clean-docs', 'l',
                              'Completely clean previous builds, including '
                              'automodapi-generated files before building new '
@@ -752,6 +785,7 @@ if HAVE_SPHINX:
                              'successfully.'))
 
         boolean_options = SphinxBuildDoc.boolean_options[:]
+        boolean_options.append('warnings-returncode')
         boolean_options.append('clean-docs')
         boolean_options.append('no-intersphinx')
         boolean_options.append('open-docs-in-browser')
@@ -763,11 +797,12 @@ if HAVE_SPHINX:
             self.clean_docs = False
             self.no_intersphinx = False
             self.open_docs_in_browser = False
+            self.warnings_returncode = False
 
         def finalize_options(self):
             #Clear out previous sphinx builds, if requested
             if self.clean_docs:
-                dirstorm = ['docs/_generated']
+                dirstorm = ['docs/api']
                 if self.build_dir is None:
                     dirstorm.append('docs/_build')
                 else:
@@ -786,23 +821,23 @@ if HAVE_SPHINX:
         def run(self):
             import webbrowser
 
-            from os.path import split, join, abspath
-            from distutils.cmd import DistutilsOptionError
-            from subprocess import Popen, PIPE
-            from inspect import getsourcelines
             if PY3:
                 from urllib.request import pathname2url
             else:
                 from urllib import pathname2url
 
+            # This is used at the very end of `run` to decide if sys.exit should
+            # be called. If it's None, it won't be.
+            retcode = None
+
             # If possible, create the _static dir
             if self.build_dir is not None:
                 # the _static dir should be in the same place as the _build dir
                 # for Astropy
-                basedir, subdir = split(self.build_dir)
+                basedir, subdir = os.path.split(self.build_dir)
                 if subdir == '':  # the path has a trailing /...
-                    basedir, subdir = split(basedir)
-                staticdir = join(basedir, '_static')
+                    basedir, subdir = os.path.split(basedir)
+                staticdir = os.path.join(basedir, '_static')
                 if os.path.isfile(staticdir):
                     raise DistutilsOptionError(
                         'Attempted to build_sphinx in a location where' +
@@ -820,7 +855,7 @@ if HAVE_SPHINX:
             #command.  This is needed to get the correct imports for the built
             #version
 
-            runlines, runlineno = getsourcelines(SphinxBuildDoc.run)
+            runlines, runlineno = inspect.getsourcelines(SphinxBuildDoc.run)
             subproccode = textwrap.dedent("""
             from sphinx.setup_command import *
 
@@ -856,13 +891,48 @@ if HAVE_SPHINX:
             log.debug('Starting subprocess of {0} with python code:\n{1}\n'
                       '[CODE END])'.format(sys.executable, subproccode))
 
-            proc = Popen([sys.executable], stdin=PIPE)
-            proc.communicate(subproccode.encode('utf-8'))
+            # To return the number of warnings, we need to capture stdout. This
+            # prevents a continuous updating at the terminal, but there's no
+            # apparent way around this.
+            if self.warnings_returncode:
+                proc = subprocess.Popen([sys.executable],
+                                        stdin=subprocess.PIPE,
+                                        stdout=subprocess.PIPE,
+                                        stderr=subprocess.STDOUT)
+                stdo, stde = proc.communicate(subproccode)
+
+                print(stdo)
+
+                stdolines = stdo.split('\n')
+
+                if stdolines[-2] == 'build succeeded.':
+                    retcode = 0
+                else:
+                    retcode = 1
+
+                if retcode != 0:
+                    if os.environ.get('TRAVIS', None) == 'true':
+                        #this means we are in the travis build, so customize
+                        #the message appropriately.
+                        msg = ('The build_sphinx travis build FAILED '
+                               'because sphinx issued documentation '
+                               'warnings (scroll up to see the warnings).')
+                    else:  # standard failure message
+                        msg = ('build_sphinx returning a non-zero exit '
+                               'code because sphinx issued documentation '
+                               'warnings.')
+                    log.warn(msg)
+
+            else:
+                proc = subprocess.Popen([sys.executable], stdin=subprocess.PIPE)
+                proc.communicate(subproccode.encode('utf-8'))
+
             if proc.returncode == 0:
                 if self.open_docs_in_browser:
                     if self.builder == 'html':
-                        absdir = abspath(self.builder_target_dir)
-                        fileurl = 'file://' + pathname2url(join(absdir, 'index.html'))
+                        absdir = os.path.abspath(self.builder_target_dir)
+                        index_path = os.path.join(absdir, 'index.html')
+                        fileurl = 'file://' + pathname2url(index_path)
                         webbrowser.open(fileurl)
                     else:
                         log.warn('open-docs-in-browser option was given, but '
@@ -871,6 +941,13 @@ if HAVE_SPHINX:
                 log.warn('Sphinx Documentation subprocess failed with return '
                          'code ' + str(proc.returncode))
 
+            if retcode is not None:
+                # this is potentially dangerous in that there might be something
+                # after the call to `setup` in `setup.py`, and exiting here will
+                # prevent that from running.  But there's no other apparent way
+                # to signal what the return code should be.
+                sys.exit(retcode)
+
 
 def get_distutils_display_options():
     """ Returns a set of all the distutils display options in their long and
@@ -892,7 +969,15 @@ def get_distutils_display_options():
     short_display_opts.add('-h')
     long_display_opts.add('--help')
 
-    return short_display_opts.union(long_display_opts)
+    # This isn't the greatest approach to hardcode these commands.
+    # However, there doesn't seem to be a good way to determine
+    # whether build *will be* run as part of the command at this
+    # phase.
+    display_commands = set([
+        'clean', 'register', 'setopt', 'saveopts', 'egg_info',
+        'alias'])
+
+    return short_display_opts.union(long_display_opts.union(display_commands))
 
 
 def is_distutils_display_option():
@@ -906,31 +991,71 @@ def is_distutils_display_option():
 
 def update_package_files(srcdir, extensions, package_data, packagenames,
                          package_dirs):
-    """ Extends existing extensions, package_data, packagenames and
-    package_dirs collections by iterating through all packages in
-    ``srcdir`` and locating a ``setup_package.py`` module.  This
-    module can contain the following functions: ``get_extensions()``,
-    ``get_package_data()``, ``get_legacy_alias()``,
-    ``get_build_options()``, and ``get_external_libraries()``.
-
-    Each of those functions take no arguments.  ``get_extensions``
-    returns a list of `distutils.extension.Extension` objects.
-    ``get_package_data()`` returns a dict formatted as required by the
-    ``package_data`` argument to ``setup()``.  ``get_legacy_alias()``
-    should call `add_legacy_alias` and return its result.
-    ``get_build_options()`` returns a list of tuples describing the
-    extra build options to add.  ``get_external_libraries()`` returns
-    a list of libraries that can optionally be built using external
-    dependencies.
+    """
+    This function is deprecated and maintained for backward compatibility
+    with affiliated packages.  Affiliated packages should update their
+    setup.py to use `get_package_info` instead.
+    """
+    warnings.warn(
+        "astropy.setup_helpers.update_package_files is deprecated.  Update "
+        "your setup.py to use astropy.setup_helpers.get_package_info instead.",
+        AstropyDeprecationWarning)
+
+    info = get_package_info(srcdir)
+    extensions.extend(info['ext_modules'])
+    package_data.update(info['package_data'])
+    packagenames = list(set(packagenames + info['packages']))
+    package_dirs.update(info['package_dir'])
+
+
+def get_package_info(srcdir):
+    """
+    Collates all of the information for building all subpackages
+    subpackages and returns a dictionary of keyword arguments that can
+    be passed directly to `distutils.setup`.
 
     The purpose of this function is to allow subpackages to update the
     arguments to the package's ``setup()`` function in its setup.py
     script, rather than having to specify all extensions/package data
-    directly in the setup.py.  It updates existing lists in the
-    setup.py rather than returning new ones.  See Astropy's own
+    directly in the ``setup.py``.  See Astropy's own
     ``setup.py`` for example usage and the Astropy development docs
     for more details.
+
+    This function obtains that information by iterating through all
+    packages in ``srcdir`` and locating a ``setup_package.py`` module.
+    This module can contain the following functions:
+    ``get_extensions()``, ``get_package_data()``,
+    ``get_build_options()``, ``get_external_libraries()``,
+    and ``requires_2to3()``.
+
+    Each of those functions take no arguments.
+
+    - ``get_extensions`` returns a list of
+      `distutils.extension.Extension` objects.
+
+    - ``get_package_data()`` returns a dict formatted as required by
+      the ``package_data`` argument to ``setup()``.
+
+    - ``get_build_options()`` returns a list of tuples describing the
+      extra build options to add.
+
+    - ``get_external_libraries()`` returns
+      a list of libraries that can optionally be built using external
+      dependencies.
+
+    - ``requires_2to3()`` should return `True` when the source code
+      requires `2to3` processing to run on Python 3.x.  If
+      ``requires_2to3()`` is missing, it is assumed to return `True`.
+
     """
+    ext_modules = []
+    packages = []
+    package_data = {}
+    package_dir = {}
+    skip_2to3 = []
+
+    # Use the find_packages tool to locate all packages and modules
+    packages = filter_packages(find_packages())
 
     # For each of the setup_package.py modules, extract any
     # information that is needed to install them.  The build options
@@ -945,60 +1070,48 @@ def update_package_files(srcdir, extensions, package_data, packagenames,
             libraries = setuppkg.get_external_libraries()
             for library in libraries:
                 add_external_library(library)
-
-    # Check if all the legacy packages are needed
-    if get_distutils_build_or_install_option('enable_legacy'):
-        installed = []
-        for setuppkg in iter_setup_packages(srcdir):
-            if hasattr(setuppkg, 'get_legacy_alias'):
-                pkg, dir = setuppkg.get_legacy_alias()
-                if dir is None:
-                    installed.append(pkg)
-                else:
-                    packagenames.append(pkg)
-                    package_dirs[pkg] = dir
-        if len(installed) > 0:
-            lines = [
-                '-' * 60,
-                'The compatibility packages cannot be installed because the',
-                'following legacy packages are already installed:']
-            for pkg in installed:
-                lines.append("    * {0:s}".format(pkg))
-            lines.extend([
-                '',
-                'The compatibility packages can only be installed if none of',
-                'the corresponding legacy packages are present.',
-                '-' * 60
-                ])
-            log.warn('\n'.join(lines))
-            sys.exit(1)
+        if hasattr(setuppkg, 'requires_2to3'):
+            requires_2to3 = setuppkg.requires_2to3()
+        else:
+            requires_2to3 = True
+        if not requires_2to3:
+            skip_2to3.append(
+                os.path.dirname(setuppkg.__file__))
 
     for setuppkg in iter_setup_packages(srcdir):
         # get_extensions must include any Cython extensions by their .pyx
         # filename.
         if hasattr(setuppkg, 'get_extensions'):
-            extensions.extend(setuppkg.get_extensions())
+            ext_modules.extend(setuppkg.get_extensions())
         if hasattr(setuppkg, 'get_package_data'):
             package_data.update(setuppkg.get_package_data())
 
     # Locate any .pyx files not already specified, and add their extensions in.
     # The default include dirs include numpy to facilitate numerical work.
-    extensions.extend(get_cython_extensions(srcdir, extensions, ['numpy']))
+    ext_modules.extend(get_cython_extensions(srcdir, ext_modules, ['numpy']))
 
     # Now remove extensions that have the special name 'skip_cython', as they
     # exist Only to indicate that the cython extensions shouldn't be built
-    for i, ext in reversed(list(enumerate(extensions))):
+    for i, ext in reversed(list(enumerate(ext_modules))):
         if ext.name == 'skip_cython':
-            del extensions[i]
+            del ext_modules[i]
 
     # On Microsoft compilers, we need to pass the '/MANIFEST'
     # commandline argument.  This was the default on MSVC 9.0, but is
     # now required on MSVC 10.0, but it doesn't seeem to hurt to add
     # it unconditionally.
     if get_compiler_option() == 'msvc':
-        for ext in extensions:
+        for ext in ext_modules:
             ext.extra_link_args.append('/MANIFEST')
 
+    return {
+        'ext_modules': ext_modules,
+        'packages': packages,
+        'package_dir': package_dir,
+        'package_data': package_data,
+        'skip_2to3': skip_2to3
+        }
+
 
 def iter_setup_packages(srcdir):
     """ A generator that finds and imports all of the ``setup_package.py``
@@ -1083,7 +1196,7 @@ def get_cython_extensions(srcdir, prevextensions=tuple(), extincludedirs=None):
     ----------
     srcdir : str
         Path to the root of the source directory to search.
-    prevextensions: list of `~distutils.core.Extension` objects
+    prevextensions : list of `~distutils.core.Extension` objects
         The extensions that are already defined.  Any .pyx files already here
         will be ignored.
     extincludedirs : list of str or None
@@ -1141,35 +1254,28 @@ def write_if_different(filename, data):
             fd.write(data)
 
 
-def check_numpy():
-    """
-    Check that Numpy is installed and it is of the minimum version we
-    require.
-    """
-
-    requirement_met = False
-
-    try:
-        import numpy
-    except ImportError:
-        pass
-    else:
-        major, minor, rest = numpy.__version__.split(".", 2)
-        requirement_met = (int(major), int(minor)) >= (1, 4)
-
-    if not requirement_met:
-        msg = "numpy version 1.4 or later must be installed to build astropy"
-        raise ImportError(msg)
-
-    return numpy
-
-
 def get_numpy_include_path():
     """
     Gets the path to the numpy headers.
     """
-
-    numpy = check_numpy()
+    # We need to go through this nonsense in case setuptools
+    # downloaded and installed Numpy for us as part of the build or
+    # install, since Numpy may still think it's in "setup mode", when
+    # in fact we're ready to use it to build astropy now.
+
+    if sys.version_info[0] >= 3:
+        import builtins
+        if hasattr(builtins, '__NUMPY_SETUP__'):
+            del builtins.__NUMPY_SETUP__
+        import imp
+        import numpy
+        imp.reload(numpy)
+    else:
+        import __builtin__
+        if hasattr(__builtin__, '__NUMPY_SETUP__'):
+            del __builtin__.__NUMPY_SETUP__
+        import numpy
+        reload(numpy)
 
     try:
         numpy_include = numpy.get_include()
@@ -1196,138 +1302,6 @@ def import_file(filename):
         return imp.load_module(name, fd, filename, ('.py', 'U', 1))
 
 
-def get_legacy_alias_dir():
-    return os.path.join('build', 'legacy-aliases')
-
-
-legacy_shim_template = """
-# This is generated code.  DO NOT EDIT!
-
-from __future__ import absolute_import
-
-# This implements a PEP 302 finder/loader pair that translates
-# {old_package}.foo import {new_package}.foo.  This approach allows
-# relative imports in astropy that go above the level of the
-# {new_package} subpackage to work.
-class Finder(object):
-    def find_module(self, fullname, path=None):
-        if fullname.startswith("{old_package}."):
-            return self.Loader()
-
-    class Loader(object):
-        def load_module(self, fullname):
-            import importlib
-            fullname = fullname[len("{old_package}"):]
-            return importlib.import_module(fullname, package="{new_package}")
-
-import sys
-sys.meta_path.append(Finder())
-# Carefully clean up the namespace, since we can't use __all__ here
-del sys
-del Finder
-
-import warnings
-warnings.warn(
-    "{old_package} is deprecated.  Use {new_package} instead.",
-    DeprecationWarning)
-del warnings
-
-from {new_package} import *
-from astropy import __version__
-__version__ = {equiv_version!r} + '-' + __version__
-{extras}
-
-_is_astropy_legacy_alias = True
-"""
-
-
-def add_legacy_alias(old_package, new_package, equiv_version, extras={}):
-    """
-    Adds a legacy alias that makes *pkgfrom* also importable as
-    *pkgto*.
-
-    For example::
-
-       add_legacy_alias('astropy.io.votable', 'vo')
-
-    If the legacy package is importable and it is not merely the
-    compatibility shim, a warning is printed to the user, and the
-    shim is not installed.
-
-    Parameters
-    ----------
-    old_package : str
-        The old namespace.  Must be a single name (i.e. not have `.`).
-
-    new_package : str
-        The new namespace, specified using `.` as a delimiter
-
-    equiv_version : str
-        The equivalent version of the old package.  Code using the
-        legacy shim may do a version check, and this version should be
-        based on the version of the legacy package, not the version of
-        astropy.
-
-    extras : dict
-        A dictionary of extra values to include in the legacy shim template;
-        the keys should be the variable names, while the values will be written
-        to the template in their repr() form, so they should generally be
-        simple objects such as strings.
-
-    Returns
-    -------
-    old_package, shim_dir : (str, str)
-        The name of the alias package and its source directory in the
-        file system (useful for adding to distutils' `package_dir` kwarg.
-    """
-    import imp
-
-    # If legacy shims have not been enabled at the commandline, simply do
-    # nothing.
-    if not get_distutils_build_or_install_option('enable_legacy'):
-        return (old_package, None)
-
-    found_legacy_module = True
-    try:
-        location = imp.find_module(old_package)
-    except ImportError:
-        found_legacy_module = False
-    else:
-        # We want ImportError to raise here, because that means it was
-        # found, but something else went wrong.
-
-        # We could import the module here to determine if its "real"
-        # or just a legacy alias.  However, importing the legacy alias
-        # may cause importing of code within the astropy source tree,
-        # which may require 2to3 to have been run.  It's safer to just
-        # open the file and search for a string.
-        filename = os.path.join(location[1], '__init__.py')
-        if os.path.exists(filename):
-            with open(filename, 'U') as fd:
-                if '_is_astropy_legacy_alias' in fd.read():
-                    found_legacy_module = False
-
-    shim_dir = os.path.join(get_legacy_alias_dir(), old_package)
-
-    if found_legacy_module and not is_distutils_display_option():
-        if os.path.isdir(shim_dir):
-            shutil.rmtree(shim_dir)
-        return (old_package, None)
-
-    if extras:
-        extras = '\n'.join('{0} = {1!r}'.format(*v) for v in extras.items())
-    else:
-        extras = ''
-
-    if not os.path.isdir(shim_dir):
-        os.makedirs(shim_dir)
-    content = legacy_shim_template.format(**locals()).encode('utf-8')
-    write_if_different(
-        os.path.join(shim_dir, '__init__.py'), content)
-
-    return (old_package, shim_dir)
-
-
 class DistutilsExtensionArgs(collections.defaultdict):
     """
     A special dictionary whose default values are the empty list.
@@ -1439,7 +1413,7 @@ def add_external_library(library):
     """
 
     for command in ['build', 'build_ext', 'install']:
-        add_command_option(command, 'use-system-' + library,
+        add_command_option(command, str('use-system-' + library),
                            'Use the system {0} library'.format(library),
                            is_bool=True)
 
@@ -1644,5 +1618,3 @@ class FakeBuildSphinx(Command):
         except:
             log.error('error : Sphinx must be installed for build_sphinx')
             sys.exit(1)
-
-
diff --git a/astropy/sphinx/conf.py b/astropy/sphinx/conf.py
index 4658380..62d8427 100644
--- a/astropy/sphinx/conf.py
+++ b/astropy/sphinx/conf.py
@@ -11,13 +11,42 @@
 
 import warnings
 from os import path
+from distutils.version import LooseVersion
+import re
+
+from ..utils.compat import subprocess
 
 
 # -- General configuration ----------------------------------------------------
 
-# If your documentation needs a minimal Sphinx version, state it here.
-# Some of the docs require the autodoc special-members option, in 1.1
-needs_sphinx = '1.1'
+# Some of the docs require the autodoc special-members option, in 1.1.
+# If using graphviz 2.30 or later, Sphinx < 1.2b2 will not work with
+# it.  Unfortunately, there are other problems with Sphinx 1.2b2, so
+# we need to use "dev" until a release is made post 1.2b2.  If
+# affiliated packages don't want this automatic determination, they
+# may simply override needs_sphinx in their local conf.py.
+
+def get_graphviz_version():
+    try:
+        output = subprocess.check_output(
+            ['dot', '-V'], stdin=subprocess.PIPE,
+            stderr=subprocess.STDOUT,
+            shell=True)
+    except subprocess.CalledProcessError:
+        return '0'
+    tokens = output.split()
+    for token in tokens:
+        if re.match(b'[0-9.]*', token):
+            return token.decode('ascii')
+    return '0'
+
+graphviz_found = LooseVersion(get_graphviz_version())
+graphviz_broken = LooseVersion('0.30')
+
+if graphviz_found >= graphviz_broken:
+    needs_sphinx = '1.2b2'
+else:
+    needs_sphinx = '1.1'
 
 # Configuration for intersphinx: refer to the Python standard library.
 intersphinx_mapping = {
@@ -123,7 +152,7 @@ numpydoc_show_class_members = False
 
 autosummary_generate = True
 
-automodapi_toctreedirnm = '_generated'
+automodapi_toctreedirnm = 'api'
 
 
 # -- Options for HTML output -------------------------------------------------
diff --git a/astropy/sphinx/ext/automodapi.py b/astropy/sphinx/ext/automodapi.py
index 009fd95..25b2501 100644
--- a/astropy/sphinx/ext/automodapi.py
+++ b/astropy/sphinx/ext/automodapi.py
@@ -40,7 +40,7 @@ This extension also adds a sphinx configuration option
 `automodapi_toctreedirnm`. It must be a string that specifies the name of
 the directory the automodsumm generated documentation ends up in. This
 directory path should be relative to the documentation root (e.g., same
-place as ``index.rst``). It defaults to '_generated'
+place as ``index.rst``). It defaults to 'api'
 
 """
 
@@ -52,7 +52,10 @@ place as ``index.rst``). It defaults to '_generated'
 # use the "builder-inited" event, which comes before the directives are
 # actually built.
 
+import inspect
+import os
 import re
+import sys
 
 automod_templ_modheader = """
 {modname} {pkgormod}
@@ -118,7 +121,7 @@ def automodapi_replace(sourcestr, app, dotoctree=True, docname=None,
         If True, a ":toctree:" option will be added in the "..
         automodsumm::" sections of the template, pointing to the
         appropriate "generated" directory based on the Astropy convention
-        (e.g. in ``docs/_generated``)
+        (e.g. in ``docs/api``)
     docname : str
         The name of the file for this `sourcestr` (if known - if not, it
         can be None). If not provided and `dotoctree` is True, the
@@ -133,7 +136,6 @@ def automodapi_replace(sourcestr, app, dotoctree=True, docname=None,
         The string with automodapi entries replaced with the correct
         sphinx markup.
     """
-    from os import sep
 
     spl = _automodapirex.split(sourcestr)
     if len(spl) > 1:  # automodsumm is in this document
@@ -141,8 +143,8 @@ def automodapi_replace(sourcestr, app, dotoctree=True, docname=None,
         if dotoctree:
             toctreestr = ':toctree: '
             dirnm = app.config.automodapi_toctreedirnm
-            if not dirnm.endswith(sep):
-                dirnm += sep
+            if not dirnm.endswith(os.sep):
+                dirnm += os.sep
             if docname is not None:
                 toctreestr += '../' * docname.count('/') + dirnm
             else:
@@ -236,24 +238,21 @@ def _mod_info(modname, toskip=[]):
     Determines if a module is a module or a package and whether or not
     it has classes or functions.
     """
-    import sys
 
-    from os.path import split
-    from inspect import isclass, isfunction
     from ...utils.misc import find_mod_objs
 
     hascls = hasfunc = False
 
     for localnm, fqnm, obj in zip(*find_mod_objs(modname, onlylocals=True)):
         if localnm not in toskip:
-            hascls = hascls or isclass(obj)
-            hasfunc = hasfunc or isfunction(obj)
+            hascls = hascls or inspect.isclass(obj)
+            hasfunc = hasfunc or inspect.isfunction(obj)
             if hascls and hasfunc:
                 break
 
     #find_mod_objs has already imported modname
     pkg = sys.modules[modname]
-    ispkg = '__init__.' in split(pkg.__name__)[1]
+    ispkg = '__init__.' in os.path.split(pkg.__name__)[1]
 
     return ispkg, hascls, hasfunc
 
@@ -268,4 +267,4 @@ def setup(app):
 
     app.connect('source-read', process_automodapi)
 
-    app.add_config_value('automodapi_toctreedirnm', '_generated', True)
+    app.add_config_value('automodapi_toctreedirnm', 'api', True)
diff --git a/astropy/sphinx/ext/automodsumm.py b/astropy/sphinx/ext/automodsumm.py
index a69e10f..a123757 100644
--- a/astropy/sphinx/ext/automodsumm.py
+++ b/astropy/sphinx/ext/automodsumm.py
@@ -51,10 +51,13 @@ This directive requires a single argument that must be a module or
 package. It accepts no options.
 
 .. note::
-    Like 'inheritance-diagram', 'automod-diagram' requires graphviz to
-    generate the inheritance diagram.
+    Like 'inheritance-diagram', 'automod-diagram' requires
+    `graphviz <http://www.graphviz.org/>`_ to generate the inheritance diagram.
 
 """
+
+import inspect
+import os
 import re
 
 from sphinx.ext.autosummary import Autosummary
@@ -87,8 +90,6 @@ class Automodsumm(AstropyAutosummary):
     option_spec['skip'] = _str_list_converter
 
     def run(self):
-        from inspect import isclass, isfunction
-
         self.warnings = []
         nodelist = []
 
@@ -120,12 +121,12 @@ class Automodsumm(AstropyAutosummary):
             if funconly and not clsonly:
                 cont = []
                 for nm, obj in zip(fqns, objs):
-                    if nm not in skipmap and isfunction(obj):
+                    if nm not in skipmap and inspect.isfunction(obj):
                         cont.append('~' + nm)
             elif clsonly:
                 cont = []
                 for nm, obj in zip(fqns, objs):
-                    if nm not in skipmap and isclass(obj):
+                    if nm not in skipmap and inspect.isclass(obj):
                         cont.append('~' + nm)
             else:
                 if clsonly and funconly:
@@ -146,8 +147,6 @@ class Automodsumm(AstropyAutosummary):
 #<-------------------automod-diagram stuff------------------------------------>
 class Automoddiagram(InheritanceDiagram):
     def run(self):
-        from inspect import isclass
-
         try:
             nms, objs = find_mod_objs(self.arguments[0], onlylocals=True)[1:]
         except ImportError:
@@ -158,7 +157,7 @@ class Automoddiagram(InheritanceDiagram):
         clsnms = []
         for n, o in zip(nms, objs):
 
-            if isclass(o):
+            if inspect.isclass(o):
                 clsnms.append(n)
 
         oldargs = self.arguments
@@ -172,8 +171,6 @@ class Automoddiagram(InheritanceDiagram):
 
 #<---------------------automodsumm generation stuff--------------------------->
 def process_automodsumm_generation(app):
-    import os
-
     env = app.builder.env
     ext = app.config.source_suffix
 
@@ -227,9 +224,6 @@ def automodsumm_to_autosummary_lines(fn, app):
 
 
     """
-    import os
-    from inspect import isfunction, isclass
-
     fullfn = os.path.join(app.builder.env.srcdir, fn)
 
     with open(fullfn) as fr:
@@ -285,9 +279,9 @@ def automodsumm_to_autosummary_lines(fn, app):
         for nm, fqn, obj in zip(*find_mod_objs(modnm, onlylocals=True)):
             if nm in toskip:
                 continue
-            if funcsonly and not isfunction(obj):
+            if funcsonly and not inspect.isfunction(obj):
                 continue
-            if clssonly and not isclass(obj):
+            if clssonly and not inspect.isclass(obj):
                 continue
             newlines.append(allindent + '~' + fqn)
 
@@ -304,7 +298,6 @@ def generate_automodsumm_docs(lines, srcfn, suffix='.rst', warn=None,
     autosummarized. Unlike generate_autosummary_docs, this function is
     called one file at a time.
     """
-    import os
 
     from sphinx.jinja2glue import BuiltinTemplateLoader
     from sphinx.ext.autosummary import import_by_name, get_documenter
@@ -476,9 +469,8 @@ def generate_automodsumm_docs(lines, srcfn, suffix='.rst', warn=None,
             ns['objtype'] = doc.objtype
             ns['underline'] = len(name) * '='
 
-            # We now check whether a reference file exists for the module
-            # being documented. This assumes that we are in _generated, and
-            # that ../ gives us the root of the docs. We first check if the
+            # We now check whether a file for reference footnotes exists for 
+            # the module being documented. We first check if the
             # current module is a file or a directory, as this will give a
             # different path for the reference file. For example, if
             # documenting astropy.wcs then the reference file is at
@@ -490,15 +482,21 @@ def generate_automodsumm_docs(lines, srcfn, suffix='.rst', warn=None,
                 mod_name_dir = mod_name.replace('.', '/').split('/', 1)[1]
             else:
                 mod_name_dir = mod_name
-            if not os.path.isdir(os.path.join(path, '..', mod_name_dir)) \
-               and os.path.isdir(os.path.join(path, '..', mod_name_dir.rsplit('/', 1)[0])):
+            if not os.path.isdir(os.path.join(base_path, mod_name_dir)) \
+               and os.path.isdir(os.path.join(base_path, mod_name_dir.rsplit('/', 1)[0])):
                 mod_name_dir = mod_name_dir.rsplit('/', 1)[0]
 
             # We then have to check whether it exists, and if so, we pass it
-            # to the template
-            reference_file = os.path.join('..', mod_name_dir, 'references.txt')
-            if os.path.exists(os.path.join(path, reference_file)):
-                ns['referencefile'] = reference_file
+            # to the template.  
+            if os.path.exists(os.path.join(base_path, mod_name_dir, 'references.txt')):
+                # An important subtlety here is that the path we pass in has 
+                # to be relative to the file being generated, so we have to
+                # figure out the right number of '..'s 
+                ndirsback = path.replace(base_path, '').count('/')
+                ref_file_rel_segments = ['..'] * ndirsback
+                ref_file_rel_segments.append(mod_name_dir)
+                ref_file_rel_segments.append('references.txt')
+                ns['referencefile'] = os.path.join(*ref_file_rel_segments)
 
             rendered = template.render(**ns)
             f.write(rendered)
diff --git a/astropy/sphinx/ext/edit_on_github.py b/astropy/sphinx/ext/edit_on_github.py
index 4ea95e7..dc02cdf 100644
--- a/astropy/sphinx/ext/edit_on_github.py
+++ b/astropy/sphinx/ext/edit_on_github.py
@@ -6,44 +6,45 @@ It adds links associated with each docstring that go to the
 corresponding view source page on Github.  From there, the user can
 push the "Edit" button, edit the docstring, and submit a pull request.
 
-It has the following configuration parameters:
+It has the following configuration options (to be set in the project's
+``conf.py``):
 
-edit_on_github_project:
+* `edit_on_github_project`
     The name of the github project, in the form
     "username/projectname".
 
-edit_on_github_branch:
+* `edit_on_github_branch`
     The name of the branch to edit.  If this is a released version,
     this should be a git tag referring to that version.  For a
     dev version, it often makes sense for it to be "master".  It
     may also be a git hash.
 
-edit_on_github_source_root:
+* `edit_on_github_source_root`
     The location within the source tree of the root of the
     Python package.  Defaults to "lib".
 
-edit_on_github_doc_root:
+* `edit_on_github_doc_root`
     The location within the source tree of the root of the
     documentation source.  Defaults to "doc", but it may make sense to
     set it to "doc/source" if the project uses a separate source
     directory.
 
-edit_on_github_docstring_message:
+* `edit_on_github_docstring_message`
     The phrase displayed in the links to edit a docstring.  Defaults
     to "[edit on github]".
 
-edit_on_github_page_message:
+* `edit_on_github_page_message`
     The phrase displayed in the links to edit a RST page.  Defaults
     to "[edit this page on github]".
 
-edit_on_github_help_message:
+* `edit_on_github_help_message`
     The phrase displayed as a tooltip on the edit links.  Defaults to
     "Push the Edit button on the next page"
 
-edit_on_github_skip_regex:
+* `edit_on_github_skip_regex`
     When the path to the .rst file matches this regular expression,
-    no "edit this page on github" link will be added.  Default to
-    "_.*".
+    no "edit this page on github" link will be added.  Defaults to
+    ``"_.*"``.
 """
 import inspect
 import os
diff --git a/astropy/sphinx/ext/tests/test_automodapi.py b/astropy/sphinx/ext/tests/test_automodapi.py
index 546d6e4..b551ec6 100644
--- a/astropy/sphinx/ext/tests/test_automodapi.py
+++ b/astropy/sphinx/ext/tests/test_automodapi.py
@@ -1,4 +1,7 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+import os
+
 from ....tests.helper import pytest
 pytest.importorskip('sphinx')  # skips these tests if sphinx not present
 
@@ -50,7 +53,7 @@ Functions
 
 .. automodsumm:: astropy.sphinx.ext.tests.test_automodapi
     :functions-only:
-    :toctree: _generated/
+    :toctree: api/
     {empty}
 
 Classes
@@ -58,7 +61,7 @@ Classes
 
 .. automodsumm:: astropy.sphinx.ext.tests.test_automodapi
     :classes-only:
-    :toctree: _generated/
+    :toctree: api/
     {empty}
 
 Class Inheritance Diagram
@@ -68,7 +71,8 @@ Class Inheritance Diagram
     :private-bases:
 
 This comes after
-""".format(empty='')  # necessary for editors that remove empty-line whitespace
+""".format(empty='').replace('/', os.sep)
+# the .format is necessary for editors that remove empty-line whitespace
 
 
 def test_am_replacer_basic():
@@ -78,7 +82,7 @@ def test_am_replacer_basic():
     """
     from ..automodapi import automodapi_replace
 
-    fakeapp = FakeApp(automodapi_toctreedirnm='_generated/')
+    fakeapp = FakeApp(automodapi_toctreedirnm='api')
     result = automodapi_replace(am_replacer_str.format(options=''), fakeapp)
 
     assert result == am_replacer_basic_expected
@@ -96,7 +100,7 @@ Functions
 
 .. automodsumm:: astropy.sphinx.ext.tests.test_automodapi
     :functions-only:
-    :toctree: _generated/
+    :toctree: api/
     {empty}
 
 Classes
@@ -104,12 +108,12 @@ Classes
 
 .. automodsumm:: astropy.sphinx.ext.tests.test_automodapi
     :classes-only:
-    :toctree: _generated/
+    :toctree: api/
     {empty}
 
 
 This comes after
-""".format(empty='')  # necessary for editors that remove empty-line whitespace
+""".format(empty='').replace('/', os.sep)
 
 
 def test_am_replacer_noinh():
@@ -119,7 +123,7 @@ def test_am_replacer_noinh():
     """
     from ..automodapi import automodapi_replace
 
-    fakeapp = FakeApp(automodapi_toctreedirnm='_generated/')
+    fakeapp = FakeApp(automodapi_toctreedirnm='api')
     ops = ['', ':no-inheritance-diagram:']
     ostr = '\n    '.join(ops)
     result = automodapi_replace(am_replacer_str.format(options=ostr), fakeapp)
@@ -139,7 +143,7 @@ Functions
 
 .. automodsumm:: astropy.sphinx.ext.tests.test_automodapi
     :functions-only:
-    :toctree: _generated/
+    :toctree: api/
     {empty}
 
 Classes
@@ -147,7 +151,7 @@ Classes
 
 .. automodsumm:: astropy.sphinx.ext.tests.test_automodapi
     :classes-only:
-    :toctree: _generated/
+    :toctree: api/
     {empty}
 
 Class Inheritance Diagram
@@ -158,7 +162,7 @@ Class Inheritance Diagram
 
 
 This comes after
-""".format(empty='')  # necessary for editors that remove empty-line whitespace
+""".format(empty='').replace('/', os.sep)
 
 
 def test_am_replacer_titleandhdrs():
@@ -168,7 +172,7 @@ def test_am_replacer_titleandhdrs():
     """
     from ..automodapi import automodapi_replace
 
-    fakeapp = FakeApp(automodapi_toctreedirnm='_generated/')
+    fakeapp = FakeApp(automodapi_toctreedirnm='api')
     ops = ['', ':title: A new title', ':headings: &*']
     ostr = '\n    '.join(ops)
     result = automodapi_replace(am_replacer_str.format(options=ostr), fakeapp)
@@ -198,12 +202,12 @@ Functions
 
 .. automodsumm:: astropy.sphinx.ext.automodapi
     :functions-only:
-    :toctree: _generated/
+    :toctree: api/
     {empty}
 
 
 This comes after
-""".format(empty='')  # necessary for editors that remove empty-line whitespace
+""".format(empty='').replace('/', os.sep)
 
 
 def test_am_replacer_nomain():
@@ -212,7 +216,7 @@ def test_am_replacer_nomain():
     """
     from ..automodapi import automodapi_replace
 
-    fakeapp = FakeApp(automodapi_toctreedirnm='_generated/')
+    fakeapp = FakeApp(automodapi_toctreedirnm='api')
     result = automodapi_replace(am_replacer_nomain_str, fakeapp)
 
     assert result == am_replacer_nomain_expected
@@ -241,12 +245,12 @@ Functions
 
 .. automodsumm:: astropy.sphinx.ext.automodapi
     :functions-only:
-    :toctree: _generated/
+    :toctree: api/
     :skip: something1,something2
 
 
 This comes after
-""".format(empty='')  # necessary for editors that remove empty-line whitespace
+""".format(empty='').replace('/', os.sep)
 
 
 def test_am_replacer_skip():
@@ -255,7 +259,7 @@ def test_am_replacer_skip():
     """
     from ..automodapi import automodapi_replace
 
-    fakeapp = FakeApp(automodapi_toctreedirnm='_generated/')
+    fakeapp = FakeApp(automodapi_toctreedirnm='api')
     result = automodapi_replace(am_replacer_skip_str, fakeapp)
 
     assert result == am_replacer_skip_expected
@@ -277,7 +281,7 @@ def test_am_replacer_invalidop():
     """
     from ..automodapi import automodapi_replace
 
-    fakeapp = FakeApp(automodapi_toctreedirnm='_generated/')
+    fakeapp = FakeApp(automodapi_toctreedirnm='api')
     automodapi_replace(am_replacer_invalidop_str, fakeapp)
 
     expected_warnings = [('Found additional options invalid-option in '
diff --git a/astropy/sphinx/themes/bootstrap-astropy/layout.html b/astropy/sphinx/themes/bootstrap-astropy/layout.html
index 66931ad..99d6196 100644
--- a/astropy/sphinx/themes/bootstrap-astropy/layout.html
+++ b/astropy/sphinx/themes/bootstrap-astropy/layout.html
@@ -3,13 +3,19 @@
 {# Collapsible sidebar script from default/layout.html in Sphinx #}
 {% set script_files = script_files + ['_static/sidebar.js'] %}
 
+{# Add the google webfonts needed for the logo #}
+{% block extrahead %}
+<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,600' rel='stylesheet' type='text/css'>
+{% endblock %}
+
+
 {% block header %}
 <div class="topbar">
-  <a class="brand" title="{{ _('Documentation Home') }}" href="{{ pathto(master_doc) }}"></a>
+  <a class="brand" title="{{ _('Documentation Home') }}" href="{{ pathto(master_doc) }}"><span id="logotext1">{{ theme_logotext1 }}</span><span id="logotext2">{{ theme_logotext2 }}</span><span id="logotext3">{{ theme_logotext3 }}</span></a>
   <ul>
-    <li><a class="homelink" title="AstroPy Homepage" href="http://www.astropy.org"></a></li>
+    <li><a class="homelink" title="Astropy Homepage" href="http://www.astropy.org"></a></li>
     <li><a title="{{ _('General Index') }}" href="{{ pathto('genindex') }}">Index</a></li>
-    <li><a title="{{ _('Python Module Index') }}" href="{{ pathto('py-modindex') }}">Modules</a></li>
+    <li><a title="{{ _('Module Index') }}" href="{{ pathto('py-modindex') }}">Modules</a></li>
     <li>
       {% block sidebarsearch %}
       {% include "searchbox.html" %}
diff --git a/astropy/sphinx/themes/bootstrap-astropy/static/astropy_docs_32.png b/astropy/sphinx/themes/bootstrap-astropy/static/astropy_docs_32.png
deleted file mode 100644
index a7f5057..0000000
Binary files a/astropy/sphinx/themes/bootstrap-astropy/static/astropy_docs_32.png and /dev/null differ
diff --git a/astropy/sphinx/themes/bootstrap-astropy/static/astropy_logo_32.png b/astropy/sphinx/themes/bootstrap-astropy/static/astropy_logo_32.png
new file mode 100644
index 0000000..fc3d930
Binary files /dev/null and b/astropy/sphinx/themes/bootstrap-astropy/static/astropy_logo_32.png differ
diff --git a/astropy/sphinx/themes/bootstrap-astropy/static/bootstrap-astropy.css b/astropy/sphinx/themes/bootstrap-astropy/static/bootstrap-astropy.css
index cfaddd9..bd237a0 100644
--- a/astropy/sphinx/themes/bootstrap-astropy/static/bootstrap-astropy.css
+++ b/astropy/sphinx/themes/bootstrap-astropy/static/bootstrap-astropy.css
@@ -134,20 +134,21 @@ code, pre {
   -moz-border-radius: 3px;
   border-radius: 3px;
 }
+tt {
+  font-family: Monaco, Andale Mono, Courier New, monospace;
+}
 code {
-  background-color: #fee9cc;
   color: rgba(0, 0, 0, 0.75);
   padding: 1px 3px;
 }
 pre {
-  background-color: #eee;
   display: block;
   padding: 8.5px;
   margin: 0 0 18px;
   line-height: 18px;
   font-size: 12px;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
+  border: 1px solid #ddd;
+  border: 1px solid rgba(0, 0, 0, 0.12);
   -webkit-border-radius: 3px;
   -moz-border-radius: 3px;
   border-radius: 3px;
@@ -160,10 +161,35 @@ img {
   margin: 9px 0;
 }
 
+/* format inline code with a rounded box */
 tt {
-    padding: 0 1px 0 1px;
+    margin: 0 2px;
+    padding: 0 5px;
+    border: 1px solid #ddd;
+    border: 1px solid rgba(0, 0, 0, 0.12);
+    border-radius: 3px;
     font-size: 0.95em;
 }
+
+/* all code has same box background color, even in headers */
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt, pre, code, tt {
+  background-color: #f8f8f8;
+}
+
+/* override box for links & other sphinx-specifc stuff */
+tt.xref, a tt, tt.descname, tt.descclassname {
+  padding: 0 1px 0 1px;
+  border: none;
+}
+
+/* override box for related bar at the top of the page */
+.related tt {
+  border: none;
+  padding: 0 1px 0 1px;
+  background-color: transparent;
+  font-weight: bold;
+}
+
 th {
     background-color: #dddddd;
 }
@@ -206,15 +232,31 @@ div.topbar {
   filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
 }
 
-div.topbar .brand {
+div.topbar a.brand {
+  font-family: 'Source Sans Pro', sans-serif;
+  font-size: 26px;
+  color: #ffffff;
+  font-weight: 600;
+  text-decoration: none;
   float: left;
   display: block;
-  width: 130px;
   height: 32px;
-  padding: 8px 0px 0px 62px;
+  padding: 8px 12px 0px 45px;
   margin-left: -10px;
-  background: transparent url("astropy_docs_32.png") no-repeat 10px 4px;
+  background: transparent url("astropy_logo_32.png") no-repeat 10px 4px;
+}
+
+#logotext1 {
+}
+
+#logotext2 {
+    font-weight:200;
+    color: #ff5000;
 }
+#logotext3 {
+    font-weight:200;
+}
+
 div.topbar .brand:hover, div.topbar ul li a.homelink:hover {
   background-color: #333;
   background-color: rgba(255, 255, 255, 0.05);
diff --git a/astropy/sphinx/themes/bootstrap-astropy/theme.conf b/astropy/sphinx/themes/bootstrap-astropy/theme.conf
index 9e2a44b..ff1e5c7 100644
--- a/astropy/sphinx/themes/bootstrap-astropy/theme.conf
+++ b/astropy/sphinx/themes/bootstrap-astropy/theme.conf
@@ -3,3 +3,8 @@
 inherit = basic
 stylesheet = bootstrap-astropy.css
 pygments_style = sphinx
+
+[options]
+logotext1 = astro
+logotext2 = py
+logotext3 = :docs
diff --git a/astropy/stats/funcs.py b/astropy/stats/funcs.py
index 715f57e..0bd66ce 100644
--- a/astropy/stats/funcs.py
+++ b/astropy/stats/funcs.py
@@ -3,18 +3,30 @@
 This module contains simple statistical algorithms that are straightforwardly
 implemented as a single python function (or family of functions).
 
-This package should generally not be used directly.  Everything in `__all__` is
+This module should generally not be used directly.  Everything in `__all__` is
 imported into `astropy.stats`, and hence that package should be used for
 access.
 """
 
-import numpy as np  # needed for some defaults
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
-__all__ = ['sigma_clip']
+import numpy as np
+
+from ..extern.six.moves import xrange
+
+
+__all__ = ['sigma_clip', 'binom_conf_interval', 'binned_binom_proportion',
+           'median_absolute_deviation', 'biweight_location',
+           'biweight_midvariance', 'signal_to_noise_oir_ccd','bootstrap']
+
+
+__doctest_skip__ = ['binned_binom_proportion']
+__doctest_requires__ = {'binom_conf_interval': ['scipy.special']}
 
 
 def sigma_clip(data, sig=3, iters=1, cenfunc=np.median, varfunc=np.var,
-               maout=False):
+               axis=None, copy=True):
     """ Perform sigma-clipping on the provided data.
 
     This performs the sigma clipping algorithm - i.e. the data will be iterated
@@ -38,74 +50,782 @@ def sigma_clip(data, sig=3, iters=1, cenfunc=np.median, varfunc=np.var,
         nothing).
     cenfunc : callable
         The technique to compute the center for the clipping. Must be a
-        callable that takes in a 1D data array and outputs the central value.
-        Defaults to the median.
+        callable that takes in a masked array and outputs the central value.
+        Defaults to the median (numpy.median).
     varfunc : callable
-        The technique to compute the variance about the center. Must be a
-        callable that takes in a 1D data array and outputs the width estimator
-        that will be interpreted as a variance. Defaults to the variance.
-    maout : bool or 'copy'
-        If True, a masked array will be returned. If the special string
-        'inplace', the masked array will contain the same array as `data`,
-        otherwise the array data will be copied.
+        The technique to compute the standard deviation about the center. Must
+        be a callable that takes in a masked array and outputs a width
+        estimator.  Defaults to the standard deviation (numpy.var).
+    axis : int or None
+        If not None, clip along the given axis.  For this case, axis=int will
+        be passed on to cenfunc and varfunc, which are expected to return an
+        array with the axis dimension removed (like the numpy functions).
+        If None, clip over all values.  Defaults to None.
+    copy : bool
+        If True, the data array will be copied.  If False, the masked array
+        data will contain the same array as `data`.  Defaults to True.
 
     Returns
     -------
-    filtereddata : `numpy.ndarray` or `numpy.masked.MaskedArray`
-        If `maout` is True, this is a masked array with a shape matching the
-        input that is masked where the algorithm has rejected those values.
-        Otherwise, a 1D array of values including only those that are not
-        clipped.
-    mask : boolean array
-        Only present if `maout` is False. A boolean array with a shape matching
-        the input `data` that is False for rejected values and True for all
-        others.
+    filtered_data : `numpy.masked.MaskedArray`
+        A masked array with the same shape as `data` input, where the points
+        rejected by the algorithm have been masked.
+
+    Notes
+    -----
+     1. The routine works by calculating
+
+            deviation = data - cenfunc(data [,axis=int])
+
+        and then setting a mask for points outside the range
+
+            data.mask = deviation**2 > sig**2 * varfunc(deviation)
+
+        It will iterate a given number of times, or until no further points are
+        rejected.
+
+     2. Most numpy functions deal well with masked arrays, but if one would
+        like to have an array with just the good (or bad) values, one can use::
+
+            good_only = filtered_data.data[~filtered_data.mask]
+            bad_only = filtered_data.data[filtered_data.mask]
+
+        However, for multidimensional data, this flattens the array, which may
+        not be what one wants (especially is filtering was done along an axis).
 
     Examples
     --------
 
     This will generate random variates from a Gaussian distribution and return
-    only the points that are within 2 *sample* standard deviation from the
-    median::
+    a masked array in which all points that are more than 2 *sample* standard
+    deviation from the median are masked::
 
         >>> from astropy.stats import sigma_clip
         >>> from numpy.random import randn
         >>> randvar = randn(10000)
-        >>> data,mask = sigma_clip(randvar, 2, 1)
+        >>> filtered_data = sigma_clip(randvar, 2, 1)
 
     This will clipping on a similar distribution, but for 3 sigma relative to
-    the sample *mean*, will clip until converged, and produces a
-    `numpy.masked.MaskedArray`::
+    the sample *mean*, will clip until converged, and does not copy the data::
 
         >>> from astropy.stats import sigma_clip
         >>> from numpy.random import randn
         >>> from numpy import mean
         >>> randvar = randn(10000)
-        >>> maskedarr = sigma_clip(randvar, 3, None, mean, maout=True)
+        >>> filtered_data = sigma_clip(randvar, 3, None, mean, copy=False)
+
+    This will clip along one axis on a similar distribution with bad points
+    inserted::
+
+        >>> from astropy.stats import sigma_clip
+        >>> from numpy.random import normal
+        >>> from numpy import arange, diag, ones
+        >>> data = arange(5)+normal(0.,0.05,(5,5))+diag(ones(5))
+        >>> filtered_data = sigma_clip(data, axis=0, sig=2.3)
+
+    Note that along the other axis, no points would be masked, as the variance
+    is higher.
 
     """
 
-    data = np.array(data, copy=False)
-    oldshape = data.shape
-    data = data.ravel()
+    if axis is not None:
+        cenfunc_in = cenfunc
+        varfunc_in = varfunc
+        cenfunc = lambda d: np.expand_dims(cenfunc_in(d, axis=axis), axis=axis)
+        varfunc = lambda d: np.expand_dims(varfunc_in(d, axis=axis), axis=axis)
+
+    filtered_data = np.ma.array(data, copy=copy)
 
-    mask = np.ones(data.size, bool)
     if iters is None:
         i = -1
-        lastrej = sum(mask) + 1
-        while(sum(mask) != lastrej):
+        lastrej = filtered_data.count() + 1
+        while(filtered_data.count() != lastrej):
             i += 1
-            lastrej = sum(mask)
-            do = data - cenfunc(data[mask])
-            mask = do * do <= varfunc(data[mask]) * sig ** 2
+            lastrej = filtered_data.count()
+            do = filtered_data - cenfunc(filtered_data)
+            filtered_data.mask |= do * do > varfunc(filtered_data) * sig ** 2
         iters = i + 1
         #TODO: ?print iters to the log if iters was None?
     else:
         for i in range(iters):
-            do = data - cenfunc(data[mask])
-            mask = do * do <= varfunc(data[mask]) * sig ** 2
+            do = filtered_data - cenfunc(filtered_data)
+            filtered_data.mask |= do * do > varfunc(filtered_data) * sig ** 2
+
+    return filtered_data
+
+
+#TODO Note scipy dependency
+def binom_conf_interval(k, n, conf=0.68269, interval='wilson'):
+    r"""Binomial proportion confidence interval given k successes,
+    n trials.
+
+    Parameters
+    ----------
+    k : int or numpy.ndarray
+        Number of successes (0 <= `k` <= `n`).
+    n : int or numpy.ndarray
+        Number of trials (`n` > 0).
+    conf : float in [0, 1], optional
+        Desired probability content of interval. Default is 0.68269.
+    interval : {'wilson', 'jeffreys', 'wald'}, optional
+        Formula used for confidence interval. See notes for details.
+        The 'wilson' and 'jeffreys' intervals generally give similar results.
+        'wilson' should be somewhat faster, while 'jeffreys' is marginally
+        superior. The 'wald' interval is generally not recommended.
+        It is provided for comparison purposes. Default is 'wilson'.
+
+    Returns
+    -------
+    conf_interval : numpy.ndarray
+        `conf_interval[0]` and `conf_interval[1]` correspond to the lower
+        and upper limits, respectively, for each element in `k`, `n`.
+
+    Notes
+    -----
+    In situations where a probability of success is not known, it can
+    be estimated from a number of trials (N) and number of
+    observed successes (k). For example, this is done in Monte
+    Carlo experiments designed to estimate a detection efficiency. It
+    is simple to take the sample proportion of successes (k/N)
+    as a reasonable best estimate of the true probability
+    :math:`\epsilon`. However, deriving an accurate confidence
+    interval on :math:`\epsilon` is non-trivial. There are several
+    formulas for this interval (see [1]_). Three intervals are implemented
+    here:
+
+    **1. The Wilson Interval.** This interval, attributed to Wilson [2]_,
+    is given by
+
+    .. math::
+
+        CI_{\rm Wilson} = \frac{k + \kappa^2/2}{N + \kappa^2}
+        \pm \frac{\kappa n^{1/2}}{n + \kappa^2}
+        ((\hat{\epsilon}(1 - \hat{\epsilon}) + \kappa^2/(4n))^{1/2}
+
+    where :math:`\hat{\epsilon} = k / N` and :math:`\kappa` is the
+    number of standard deviations corresponding to the desired
+    confidence interval for a *normal* distribution (for example,
+    1.0 for a confidence interval of 68.269%). For a
+    confidence interval of 100(1 - :math:`\alpha`)%,
+
+    .. math::
+
+        \kappa = \Phi^{-1}(1-\alpha/2) = \sqrt{2}{\rm erf}^{-1}(1-\alpha).
+
+    **2. The Jeffreys Interval.** This interval is derived by applying
+    Bayes' theorem to the binomial distribution with the
+    noninformative Jeffreys prior [3]_, [4]_. The noninformative Jeffreys
+    prior is the Beta distribution, Beta(1/2, 1/2), which has the density
+    function
+
+    .. math::
+
+        f(\epsilon) = \pi^{-1} \epsilon^{-1/2}(1-\epsilon)^{-1/2}.
+
+    The posterior density function is also a Beta distribution: Beta(k
+    + 1/2, N - k + 1/2). The interval is then chosen so that it is
+    *equal-tailed*: Each tail (outside the interval) contains
+    :math:`\alpha`/2 of the posterior probability, and the interval
+    itself contains 1 - :math:`\alpha`. This interval must be
+    calculated numerically. Additionally, when k = 0 the lower limit
+    is set to 0 and when k = N the upper limit is set to 1, so that in
+    these cases, there is only one tail containing :math:`\alpha`/2
+    and the interval itself contains 1 - :math:`\alpha`/2 rather than
+    the nominal 1 - :math:`\alpha`.
+
+    **3. The Wald Interval.** This interval is given by
+
+    .. math::
+
+       CI_{\rm Wald} = \hat{\epsilon} \pm
+       \kappa \sqrt{\frac{\hat{\epsilon}(1-\hat{\epsilon})}{N}}
+
+    The Wald interval gives acceptable results in some limiting
+    cases. Particularly, when N is very large, and the true proportion
+    :math:`\epsilon` is not "too close" to 0 or 1. However, as the
+    later is not verifiable when trying to estimate :math:`\epsilon`,
+    this is not very helpful. Its use is not recommended, but it is
+    provided here for comparison purposes due to its prevalence in
+    everyday practical statistics.
+
+    References
+    ----------
+    .. [1] Brown, Lawrence D.; Cai, T. Tony; DasGupta, Anirban (2001).
+       "Interval Estimation for a Binomial Proportion". Statistical
+       Science 16 (2): 101-133. doi:10.1214/ss/1009213286
+
+    .. [2] Wilson, E. B. (1927). "Probable inference, the law of
+       succession, and statistical inference". Journal of the American
+       Statistical Association 22: 209-212.
+
+    .. [3] Jeffreys, Harold (1946). "An Invariant Form for the Prior
+       Probability in Estimation Problems". Proc. R. Soc. Lond.. A 24 186
+       (1007): 453-461. doi:10.1098/rspa.1946.0056
+
+    .. [4] Jeffreys, Harold (1998). Theory of Probability. Oxford
+       University Press, 3rd edition. ISBN 978-0198503682
+
+    Examples
+    --------
+    Integer inputs return an array with shape (2,):
+
+    >>> binom_conf_interval(4, 5, interval='wilson')
+    array([ 0.57921724,  0.92078259])
+
+    Arrays of arbitrary dimension are supported. The Wilson and Jeffreys
+    intervals give similar results, even for small k, N:
+
+    >>> binom_conf_interval([0, 1, 2, 5], 5, interval='wilson')
+    array([[ 0.        ,  0.07921741,  0.21597328,  0.83333304],
+           [ 0.16666696,  0.42078276,  0.61736012,  1.        ]])
+
+    >>> binom_conf_interval([0, 1, 2, 5], 5, interval='jeffreys')
+    array([[ 0.        ,  0.0842525 ,  0.21789949,  0.82788246],
+           [ 0.17211754,  0.42218001,  0.61753691,  1.        ]])
+
+    In contrast, the Wald interval gives poor results for small k, N.
+    For k = 0 or k = N, the interval always has zero length.
+
+    >>> binom_conf_interval([0, 1, 2, 5], 5, interval='wald')
+    array([[ 0.        ,  0.02111437,  0.18091075,  1.        ],
+           [ 0.        ,  0.37888563,  0.61908925,  1.        ]])
+
+    For confidence intervals approaching 1, the Wald interval for
+    0 < k < N can give intervals that extend outside [0, 1]:
+
+    >>> binom_conf_interval([0, 1, 2, 5], 5, interval='wald', conf=0.99)
+    array([[ 0.        , -0.26077835, -0.16433593,  1.        ],
+           [ 0.        ,  0.66077835,  0.96433593,  1.        ]])
+
+    """
+
+    if conf < 0. or conf > 1.:
+        raise ValueError('conf must be between 0. and 1.')
+    alpha = 1. - conf
+
+    k = np.asarray(k).astype(np.int)
+    n = np.asarray(n).astype(np.int)
+    if (n <= 0).any():
+        raise ValueError('n must be positive')
+    if (k < 0).any() or (k > n).any():
+        raise ValueError('k must be in {0, 1, .., n}')
+
+    if interval == 'wilson' or interval == 'wald':
+        from scipy.special import erfinv
+        kappa = np.sqrt(2.) * min(erfinv(conf), 1.e10)  # Avoid overflows.
+        k = k.astype(np.float)
+        n = n.astype(np.float)
+        p = k / n
+
+        if interval == 'wilson':
+            midpoint = (k + kappa ** 2 / 2.) / (n + kappa ** 2)
+            halflength = (kappa * np.sqrt(n)) / (n + kappa ** 2) * \
+                np.sqrt(p * (1 - p) + kappa ** 2 / (4 * n))
+            conf_interval = np.array([midpoint - halflength,
+                                      midpoint + halflength])
+
+            # Correct intervals out of range due to floating point errors.
+            conf_interval[conf_interval < 0.] = 0.
+            conf_interval[conf_interval > 1.] = 1.
+            return conf_interval
+
+        else:
+            midpoint = p
+            halflength = kappa * np.sqrt(p * (1. - p) / n)
+            return np.array([midpoint - halflength, midpoint + halflength])
+
+    elif interval == 'jeffreys':
+        from scipy.special import betaincinv
+
+        lowerbound = betaincinv(k + 0.5, n - k + 0.5, alpha / 2.)
+        upperbound = betaincinv(k + 0.5, n - k + 0.5, 1. - alpha / 2.)
+
+        # Set lower or upper bound to k/n when k/n = 0 or 1.
+        lowerbound[k == 0] = 0.
+        upperbound[k == n] = 1.
+
+        return np.array([lowerbound, upperbound])
+
+    else:
+        raise ValueError('Unrecognized interval: {0:s}'.format(interval))
+
+
+#TODO Note scipy dependency (needed in binom_conf_interval)
+def binned_binom_proportion(x, success, bins=10, range=None, conf=0.68269,
+                            interval='wilson'):
+    """Binomial proportion and confidence interval in bins of a continuous
+    variable `x`.
+
+    Given a set of datapoint pairs where the `x` values are
+    continuously distributed and the `success` values are binomial
+    ("success / failure" or "true / false"), place the pairs into
+    bins according to `x` value and calculate the binomial proportion
+    (fraction of successes) and confidence interval in each bin.
+
+    Parameters
+    ----------
+    x : list_like
+        Values.
+    success : list_like (bool)
+        Success (True) or failure (False) corresponding to each value
+        in `x`.  Must be same length as `x`.
+    bins : int or sequence of scalars, optional
+        If bins is an int, it defines the number of equal-width bins
+        in the given range (10, by default). If bins is a sequence, it
+        defines the bin edges, including the rightmost edge, allowing
+        for non-uniform bin widths (in this case, 'range' is ignored).
+    range : (float, float), optional
+        The lower and upper range of the bins. If `None` (default),
+        the range is set to (x.min(), x.max()). Values outside the
+        range are ignored.
+    conf : float in [0, 1], optional
+        Desired probability content in the confidence
+        interval (p - perr[0], p + perr[1]) in each bin. Default is
+        0.68269.
+    interval : {'wilson', 'jeffreys', 'wald'}, optional
+        Formula used to calculate confidence interval on the
+        binomial proportion in each bin. See `binom_conf_interval` for
+        definition of the intervals.  The 'wilson' and 'jeffreys'
+        intervals generally give similar results.  'wilson' should be
+        somewhat faster, while 'jeffreys' is marginally superior.
+        The 'wald' interval is generally not recommended.
+        It is provided for comparison purposes. Default is 'wilson'.
+
+    Returns
+    -------
+    bin_ctr : numpy.ndarray
+        Central value of bins. Bins without any entries are not returned.
+    bin_halfwidth : numpy.ndarray
+        Half-width of each bin such that `bin_ctr - bin_halfwidth` and
+        `bin_ctr + bins_halfwidth` give the left and right side of each bin,
+        respectively.
+    p : numpy.ndarray
+        Efficiency in each bin.
+    perr : numpy.ndarray
+        2-d array of shape (2, len(p)) representing the upper and lower
+        uncertainty on p in each bin.
+
+    See Also
+    --------
+    binom_conf_interval : Function used to estimate confidence interval in
+                          each bin.
+
+
+    Examples
+    --------
+    Suppose we wish to estimate the efficiency of a survey in
+    detecting astronomical sources as a function of magnitude (i.e.,
+    the probability of detecting a source given its magnitude). In a
+    realistic case, we might prepare a large number of sources with
+    randomly selected magnitudes, inject them into simulated images,
+    and then record which were detected at the end of the reduction
+    pipeline. As a toy example, we generate 100 data points with
+    randomly selected magnitudes between 20 and 30 and "observe" them
+    with a known detection function (here, the error function, with
+    50% detection probability at magnitude 25):
+
+    >>> from scipy.special import erf
+    >>> from scipy.stats.distributions import binom
+    >>> def true_efficiency(x):
+    ...     return 0.5 - 0.5 * erf((x - 25.) / 2.)
+    >>> mag = 20. + 10. * np.random.rand(100)
+    >>> detected = binom.rvs(1, true_efficiency(mag))
+    >>> bins, binshw, p, perr = binned_binom_proportion(mag, detected, bins=20)
+    >>> plt.errorbar(bins, p, xerr=binshw, yerr=perr, ls='none', marker='o',
+    ...              label='estimate')
+
+    .. plot::
+
+       import numpy as np
+       from scipy.special import erf
+       from scipy.stats.distributions import binom
+       import matplotlib.pyplot as plt
+       from astropy.stats import binned_binom_proportion
+       def true_efficiency(x):
+           return 0.5 - 0.5 * erf((x - 25.) / 2.)
+       np.random.seed(400)
+       mag = 20. + 10. * np.random.rand(100)
+       np.random.seed(600)
+       detected = binom.rvs(1, true_efficiency(mag))
+       bins, binshw, p, perr = binned_binom_proportion(mag, detected, bins=20)
+       plt.errorbar(bins, p, xerr=binshw, yerr=perr, ls='none', marker='o',
+                    label='estimate')
+       X = np.linspace(20., 30., 1000)
+       plt.plot(X, true_efficiency(X), ls='-', color='r',
+                label='true efficiency')
+       plt.ylim(0., 1.)
+       plt.title('Detection efficiency vs magnitude')
+       plt.xlabel('Magnitude')
+       plt.ylabel('Detection efficiency')
+       plt.legend()
+       plt.show()
+
+    The above example uses the Wilson confidence interval to calculate
+    the uncertainty `perr` in each bin (see the definition of various
+    confidence intervals in `binom_conf_interval`). A commonly used
+    alternative is the Wald interval. However, the Wald interval can
+    give nonsensical uncertainties when the efficiency is near 0 or 1,
+    and is therefore **not** recommended. As an illustration, the
+    following example shows the same data as above but uses the Wald
+    interval rather than the Wilson interval to calculate `perr`:
+
+    >>> bins, binshw, p, perr = binned_binom_proportion(mag, detected, bins=20,
+    ...                                                 interval='wald')
+    >>> plt.errorbar(bins, p, xerr=binshw, yerr=perr, ls='none', marker='o',
+    ...              label='estimate')
+
+    .. plot::
+
+       import numpy as np
+       from scipy.special import erf
+       from scipy.stats.distributions import binom
+       import matplotlib.pyplot as plt
+       from astropy.stats import binned_binom_proportion
+       def true_efficiency(x):
+           return 0.5 - 0.5 * erf((x - 25.) / 2.)
+       np.random.seed(400)
+       mag = 20. + 10. * np.random.rand(100)
+       np.random.seed(600)
+       detected = binom.rvs(1, true_efficiency(mag))
+       bins, binshw, p, perr = binned_binom_proportion(mag, detected, bins=20,
+                                                       interval='wald')
+       plt.errorbar(bins, p, xerr=binshw, yerr=perr, ls='none', marker='o',
+                    label='estimate')
+       X = np.linspace(20., 30., 1000)
+       plt.plot(X, true_efficiency(X), ls='-', color='r',
+                label='true efficiency')
+       plt.ylim(0., 1.)
+       plt.title('The Wald interval can give nonsensical uncertainties')
+       plt.xlabel('Magnitude')
+       plt.ylabel('Detection efficiency')
+       plt.legend()
+       plt.show()
+
+    """
+
+    x = np.ravel(x)
+    success = np.ravel(success).astype(np.bool)
+    if x.shape != success.shape:
+        raise ValueError('sizes of x and success must match')
+
+    # Put values into a histogram (`n`). Put "successful" values
+    # into a second histogram (`k`) with identical binning.
+    n, bin_edges = np.histogram(x, bins=bins, range=range)
+    k, bin_edges = np.histogram(x[success], bins=bin_edges)
+    bin_ctr = (bin_edges[:-1] + bin_edges[1:]) / 2.
+    bin_halfwidth = bin_ctr - bin_edges[:-1]
+
+    # Remove bins with zero entries.
+    valid = n > 0
+    bin_ctr = bin_ctr[valid]
+    bin_halfwidth = bin_halfwidth[valid]
+    n = n[valid]
+    k = k[valid]
+
+    p = k / n
+    bounds = binom_conf_interval(k, n, conf=conf, interval=interval)
+    perr = np.abs(bounds - p)
+
+    return bin_ctr, bin_halfwidth, p, perr
+
+
+def median_absolute_deviation(a, axis=None):
+    """Compute the median absolute deviation
+
+    Returns the median absolute deviation  of the array elements.  The MAD is
+    defined as :math `median( \|a - median (a)\| )`.
+
+    Parameters
+    ----------
+    a : array_like
+        Input array or object that can be converted to an array.
+    axis : int, optional
+        Axis along which the medians are computed. The default (axis=None)
+        is to compute the median along a flattened version of the array.
+
+    Returns
+    -------
+    median_absolute_deviation : ndarray
+        A new array holding the result. If the input contains
+        integers, or floats of smaller precision than 64, then the output
+        data-type is float64.  Otherwise, the output data-type is the same
+        as that of the input.
+
+    Examples
+    --------
+
+    This will generate random variates from a Gaussian distribution and return
+    the median absolute deviation for that distribution::
+
+        >>> from astropy.stats import median_absolute_deviation
+        >>> from numpy.random import randn
+        >>> randvar = randn(10000)
+        >>> mad = median_absolute_deviation(randvar)
+
+    See Also
+    --------
+    median
+
+    """
+
+    a = np.array(a, copy=False)
+    a_median = np.median(a, axis=axis)
+
+    #re-broadcast the output median array to subtract it
+    if axis is not None:
+        shape = list(a_median.shape)
+        shape.append(1)
+        a_median = a_median.reshape(shape)
+
+    #calculated the median average deviation
+    return np.median(np.abs(a - a_median), axis=axis)
+
+
+def biweight_location(a, c=6.0, M=None):
+    """
+    Compute the biweight location for an array
+
+    Returns the biweight location for the array elements.  The biweight
+    is a robust statistic for determining the central location of a
+    distribution.
+
+    The biweight location is given by the follow equation
+
+    .. math::
+
+        C_{bl}= M+\\frac{\Sigma_{\|u_i\|<1} (x_i-M)(1-u_i^2)^2}
+        {\Sigma_{\|u_i\|<1} (1-u_i^2)^2}
+
+    where M is the sample mean or if run iterative the initial guess,
+    and u_i is given by
+
+    .. math::
+
+      u_{i} = \\frac{(x_i-M)}{cMAD}
+
+    where MAD is the median absolute deviation.
+
+    For more details, see Beers, Flynn, and Gebhardt, 1990, AJ, 100, 32B
+
+    Parameters
+    ----------
+    a : array_like
+        Input array or object that can be converted to an array.
+    c : float
+        Tuning constant for the biweight estimator.  Default value is 6.0.
+    M : float, optional
+        Initial gues for the biweight location.
+
+    Returns
+    -------
+    biweight_location: float
+        Returns the biweight location for the array elements.
+
+    Examples
+    --------
+
+    This will generate random variates from a Gaussian distribution and return
+    the median absolute deviation for that distribution::
+
+    >>> from astropy.stats.funcs import biweight_location
+    >>> from numpy.random import randn
+    >>> randvar = randn(10000)
+    >>> cbl = biweight_location(randvar)
+
+    See Also
+    --------
+    median absolute deviation, biweight_midvariance
+
+    """
+
+    a = np.array(a, copy=False)
+
+    if M is None:
+        M = np.median(a)
+
+    #set up the difference
+    d = a - M
+
+    #set up the weighting
+    u = d / c / median_absolute_deviation(a)
+
+    #now remove the outlier points
+    mask = np.abs(u) < 1
+
+    u = (1 - u**2)**2
+    return M+(d[mask]*u[mask]).sum()/u[mask].sum()
+
+
+def biweight_midvariance(a, c=9.0, M=None):
+    """
+    Compute the biweight midvariance for an array
+
+    Returns the biweight midvariance for the array elements.  The biweight
+    midvariance is a robust statistic for determining the midvariance (ie. the
+    standard deviation) of a distribution.
+
+    The biweight location is given by the follow equation
 
-    if maout:
-        return np.ma.MaskedArray(data, ~mask, copy=maout != 'inplace')
+    .. math::
+
+      C_{bl}= n^{1/2} \\frac{[\Sigma_{|u_i|<1} (x_i-M)**2(1-u_i^2)^4]^{0.5}}
+      {|\Sigma_{|u_i|<1} (1-u_i^2)(1-5u_i^2)|}
+
+    where  u_i is given by::
+
+    .. math::
+
+      u_{i} = \\frac{(x_i-M)}{cMAD}
+
+    where MAD is the median absolute deviation.  For the midvariance
+    parameter, c is typically uses a value of 9.0.
+
+    For more details, see Beers, Flynn, and Gebhardt, 1990, AJ, 100, 32B
+
+    Parameters
+    ----------
+    a : array_like
+        Input array or object that can be converted to an array.
+    c : float
+        Tuning constant for the biweight estimator.  Default value is 9.0.
+    M : float, optional
+        Initial gues for the biweight location.
+
+    Returns
+    -------
+    biweight_midvariance: float
+        Returns the biweight midvariance for the array elements.
+
+    Examples
+    --------
+
+    This will generate random variates from a Gaussian distribution and return
+    the median absolute deviation for that distribution::
+
+    >>> from astropy.stats.funcs import biweight_midvariance
+    >>> from numpy.random import randn
+    >>> randvar = randn(10000)
+    >>> scl = biweight_midvariance(randvar)
+
+    See Also
+    --------
+    median absolute deviation, biweight_location
+
+    """
+
+    a = np.array(a, copy=False)
+
+    if M is None:
+        M = np.median(a)
+
+    #set up the difference
+    d = a - M
+
+    #set up the weighting
+    u = d / c / median_absolute_deviation(a)
+
+    #now remove the outlier points
+    mask = np.abs(u) < 1
+
+    u = u**2
+    n = mask.sum()
+    return n**0.5 * (d[mask] * d[mask] * (1 - u[mask])**4).sum()**0.5\
+        / np.abs(((1 - u[mask]) * (1 - 5 * u[mask])).sum())
+
+
+def signal_to_noise_oir_ccd(t, source_eps, sky_eps, dark_eps, rd, npix, gain=1.0):
+    """
+    Computes the signal to noise ratio for source being observed in the
+    optical/IR using a CCD.
+
+    Parameters
+    ----------
+    t : float or numpy.ndarray
+        CCD integration time in seconds
+    source_eps : float
+        Number of electrons (photons) or DN per second in the aperture from the
+        source. Note that this should already have been scaled by the filter
+        transmission and the quantum efficiency of the CCD. If the input is in
+        DN, then be sure to set the gain to the proper value for the CCD.
+        If the input is in electrons per second, then keep the gain as its
+        default of 1.0.
+    sky_eps : float
+        Number of electrons (photons) or DN per second per pixel from the sky
+        background. Should already be scaled by filter transmission and QE.
+        This must be in the same units as source_eps for the calculation to
+        make sense.
+    dark_eps : float
+        Number of thermal electrons per second per pixel. If this is given in
+        DN or ADU, then multipy by the gain to get the value in electrons.
+    rd : float
+        Read noise of the CCD in electrons. If this is given in
+        DN or ADU, then multipy by the gain to get the value in electrons.
+    npix : float
+        Size of the aperture in pixels
+    gain : float
+        Gain of the CCD. In units of electrons per DN.
+
+    Returns
+    ----------
+    SNR : float or numpy.ndarray
+        Signal to noise ratio calculated from the inputs
+    """
+    signal = t*source_eps*gain
+    noise = np.sqrt(t*(source_eps*gain + npix*(sky_eps*gain + dark_eps)) + npix*rd**2 )
+    return signal / noise
+
+def bootstrap(data, bootnum=100, samples=None, bootfunc=None):
+    """Performs bootstrap resampling on numpy arrays.
+
+    Bootstrap resampling is used to understand confidence intervals of sample
+    estimates. This function returns versions of the dataset resampled with
+    replacement ("case bootstrapping"). These can all be run through a function
+    or statistic to produce a distribution of values which can then be used to
+    find the confidence intervals.
+
+    Parameters
+    ----------
+    data : numpy.ndarray
+        N-D array. The boostrap resampling will be performed on the first
+        index, so the first index should access the relevant information
+        to be bootstrapped.
+    bootnum : int
+        Number of bootstrap resamples
+    samples : int
+        Number of samples in each resample. The default None sets samples to
+        the number of datapoints
+    bootfunc : function
+        Function to reduce the resampled data. Each bootstrap resample will
+        be put through this function and the results returned. If None, the
+        bootstrapped data will be returned
+
+    Returns
+    -------
+    boot : numpy.ndarray
+        Bootstrapped data. Each row is a bootstrap resample of the data.
+
+    """
+    if samples is None:
+        samples = data.shape[0]
+
+    #make sure the input is sane
+    assert samples > 0, "samples cannot be less than one"
+    assert bootnum > 0, "bootnum cannot be less than one"
+
+    if bootfunc is None:
+        resultdims = (bootnum,) + (samples,) + data.shape[1:]
+        boot = np.empty(resultdims)
     else:
-        return data[mask], mask.reshape(oldshape)
+        resultdims = (bootnum,)
+        boot = np.empty(resultdims)
+
+    for i in xrange(bootnum):
+        bootarr = np.random.randint(low=0,high=data.shape[0],size=samples)
+        if bootfunc is None:
+            boot[i] = data[bootarr]
+        else:
+            boot[i] = bootfunc(data[bootarr])
+
+    return boot
+
+
diff --git a/astropy/stats/setup_package.py b/astropy/stats/setup_package.py
new file mode 100644
index 0000000..4220337
--- /dev/null
+++ b/astropy/stats/setup_package.py
@@ -0,0 +1,2 @@
+def requires_2to3():
+    return False
diff --git a/astropy/stats/tests/test_funcs.py b/astropy/stats/tests/test_funcs.py
index b93f0c4..1bed880 100644
--- a/astropy/stats/tests/test_funcs.py
+++ b/astropy/stats/tests/test_funcs.py
@@ -1,14 +1,21 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from __future__ import division
+
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 import numpy as np
+
+from numpy.random import randn
+from numpy.testing import assert_equal
+from numpy.testing.utils import assert_allclose
+
 from ...tests.helper import pytest
 
 from .. import funcs
 from ...utils.misc import NumpyRNGContext
 
 try:
-    from scipy import stats
+    from scipy import stats  # used in testing
 except ImportError:
     HAS_SCIPY = False
 else:
@@ -16,51 +23,208 @@ else:
 
 
 def test_sigma_clip():
-    from numpy.random import randn
-
     #need to seed the numpy RNG to make sure we don't get some amazingly flukey
     #random number that breaks one of the tests
 
-    with NumpyRNGContext(12345):  # Amazing, I've got the same combination on my luggage!
-
+    with NumpyRNGContext(12345):
+        # Amazing, I've got the same combination on my luggage!
         randvar = randn(10000)
 
-        data, mask = funcs.sigma_clip(randvar, 1, 2)
-        maskedarr = funcs.sigma_clip(randvar, 1, 2, maout=True)
+        filtered_data = funcs.sigma_clip(randvar, 1, 2)
 
-        assert sum(mask) > 0
-        assert data.size < randvar.size
-        assert np.all(mask == ~maskedarr.mask)
+        assert sum(filtered_data.mask) > 0
+        assert sum(~filtered_data.mask) < randvar.size
 
         #this is actually a silly thing to do, because it uses the standard
         #deviation as the variance, but it tests to make sure these arguments
         #are actually doing something
-        data2, mask2 = funcs.sigma_clip(randvar, 1, 2, varfunc=np.std)
-        assert not np.all(data == data2)
-        assert not np.all(mask == mask2)
+        filtered_data2 = funcs.sigma_clip(randvar, 1, 2, varfunc=np.std)
+        assert not np.all(filtered_data.mask == filtered_data2.mask)
+
+        filtered_data3 = funcs.sigma_clip(randvar, 1, 2, cenfunc=np.mean)
+        assert not np.all(filtered_data.mask == filtered_data3.mask)
+
+        # make sure the iters=None method works at all.
+        filtered_data = funcs.sigma_clip(randvar, 3, None)
+
+        # test copying
+        assert filtered_data.data[0] == randvar[0]
+        filtered_data.data[0] += 1.
+        assert filtered_data.data[0] != randvar[0]
+
+        filtered_data = funcs.sigma_clip(randvar, 3, None, copy=False)
+        assert filtered_data.data[0] == randvar[0]
+        filtered_data.data[0] += 1.
+        assert filtered_data.data[0] == randvar[0]
+
+        # test axis
+        data = np.arange(5)+np.random.normal(0., 0.05, (5, 5))+np.diag(np.ones(5))
+        filtered_data = funcs.sigma_clip(data, axis=0, sig=2.3)
+        assert filtered_data.count() == 20
+        filtered_data = funcs.sigma_clip(data, axis=1, sig=2.3)
+        assert filtered_data.count() == 25
+
 
-        data3, mask3 = funcs.sigma_clip(randvar, 1, 2, cenfunc=np.mean)
-        assert not np.all(data == data3)
-        assert not np.all(mask == mask3)
+def test_median_absolute_deviation():
+    #need to seed the numpy RNG to make sure we don't get some amazingly flukey
+    #random number that breaks one of the tests
+
+    with NumpyRNGContext(12345):
+
+        #test that it runs
+        randvar = randn(10000)
+        mad = funcs.median_absolute_deviation(randvar)
+
+        #test whether an array is returned if an axis is used
+        randvar = randvar.reshape((10, 1000))
+        mad = funcs.median_absolute_deviation(randvar, axis=1)
+        assert len(mad) == 10
+        assert mad.size < randvar.size
 
-        #now just make sure the iters=None method works at all.
-        maskedarr = funcs.sigma_clip(randvar, 3, None, maout=True)
+
+def test_biweight_location():
+    #need to seed the numpy RNG to make sure we don't get some amazingly flukey
+    #random number that breaks one of the tests
+
+    with NumpyRNGContext(12345):
+
+        #test that it runs
+        randvar = randn(10000)
+        cbl = funcs.biweight_location(randvar)
+
+        assert abs(cbl-0) < 1e-2
+
+
+def test_biweight_location_small():
+
+    cbl = funcs.biweight_location([1, 3, 5, 500, 2])
+    assert abs(cbl-2.745) < 1e-3
+
+
+def test_biweight_midvariance():
+    #need to seed the numpy RNG to make sure we don't get some amazingly flukey
+    #random number that breaks one of the tests
+
+    with NumpyRNGContext(12345):
+
+        #test that it runs
+        randvar = randn(10000)
+        scl = funcs.biweight_midvariance(randvar)
+
+        assert abs(scl-1) < 1e-2
+
+
+def test_biweight_midvariance_small():
+    scl = funcs.biweight_midvariance([1, 3, 5, 500, 2])
+    assert abs(scl-1.529) < 1e-3
 
 
 @pytest.mark.skipif('not HAS_SCIPY')
 def test_compare_to_scipy_sigmaclip():
-    from numpy.random import randn
-    from numpy.testing import assert_equal
-
     #need to seed the numpy RNG to make sure we don't get some amazingly flukey
     #random number that breaks one of the tests
 
-    with NumpyRNGContext(12345):  # Amazing, I've got the same combination on my luggage!
+    with NumpyRNGContext(12345):
 
         randvar = randn(10000)
 
-        astropyres = funcs.sigma_clip(randvar, 3, None, np.mean)[0]
+        astropyres = funcs.sigma_clip(randvar, 3, None, np.mean)
         scipyres = stats.sigmaclip(randvar, 3, 3)[0]
 
-        assert_equal(astropyres, scipyres)
+        assert astropyres.count() == len(scipyres)
+        assert_equal(astropyres[~astropyres.mask].data, scipyres)
 
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_binom_conf_interval():
+
+    # Test Wilson and Jeffreys interval for corner cases:
+    # Corner cases: k = 0, k = n, conf = 0., conf = 1.
+    n = 5
+    k = [0, 4, 5]
+    for conf in [0., 0.5, 1.]:
+        res = funcs.binom_conf_interval(k, n, conf=conf, interval='wilson')
+        assert ((res >= 0.) & (res <= 1.)).all()
+        res = funcs.binom_conf_interval(k, n, conf=conf, interval='jeffreys')
+        assert ((res >= 0.) & (res <= 1.)).all()
+
+    # Test Jeffreys interval accuracy against table in Brown et al. (2001).
+    # (See `binom_conf_interval` docstring for reference.)
+    k = [0, 1, 2, 3, 4]
+    n = 7
+    conf = 0.95
+    result = funcs.binom_conf_interval(k, n, conf=conf, interval='jeffreys')
+    table = np.array([[0.000, 0.016, 0.065, 0.139, 0.234],
+                      [0.292, 0.501, 0.648, 0.766, 0.861]])
+    assert_allclose(result, table, atol=1.e-3, rtol=0.)
+
+    # Test Wald interval
+    result = funcs.binom_conf_interval(0, 5, interval='wald')
+    assert_allclose(result, 0.)  # conf interval is [0, 0] when k = 0
+    result = funcs.binom_conf_interval(5, 5, interval='wald')
+    assert_allclose(result, 1.)  # conf interval is [1, 1] when k = n
+    result = funcs.binom_conf_interval(500, 1000, conf=0.68269,
+                                       interval='wald')
+    assert_allclose(result[0], 0.5 - 0.5 / np.sqrt(1000.))
+    assert_allclose(result[1], 0.5 + 0.5 / np.sqrt(1000.))
+
+
+ at pytest.mark.skipif('not HAS_SCIPY')
+def test_binned_binom_proportion():
+
+    # Check that it works.
+    nbins = 20
+    x = np.linspace(0., 10., 100)  # Guarantee an `x` in every bin.
+    success = np.ones(len(x), dtype=np.bool)
+    bin_ctr, bin_hw, p, perr = funcs.binned_binom_proportion(x, success,
+                                                             bins=nbins)
+
+    # Check shape of outputs
+    assert bin_ctr.shape == (nbins,)
+    assert bin_hw.shape == (nbins,)
+    assert p.shape == (nbins,)
+    assert perr.shape == (2, nbins)
+
+    # Check that p is 1 in all bins, since success = True for all `x`.
+    assert (p == 1.).all()
+
+    # Check that p is 0 in all bins if success = False for all `x`.
+    success[:] = False
+    bin_ctr, bin_hw, p, perr = funcs.binned_binom_proportion(x, success,
+                                                             bins=nbins)
+    assert (p == 0.).all()
+
+
+def test_signal_to_noise_oir_ccd():
+
+    result = funcs.signal_to_noise_oir_ccd(1, 25, 0, 0, 0, 1)
+    assert 5.0 == result
+    #check to make sure gain works
+    result = funcs.signal_to_noise_oir_ccd(1, 5, 0, 0, 0, 1, 5)
+    assert 5.0 == result
+
+    #now add in sky, dark current, and read noise
+    #make sure the snr goes down
+    result = funcs.signal_to_noise_oir_ccd(1, 25, 1, 0, 0, 1)
+    assert result < 5.0
+    result = funcs.signal_to_noise_oir_ccd(1, 25, 0, 1, 0, 1)
+    assert result < 5.0
+    result = funcs.signal_to_noise_oir_ccd(1, 25, 0, 0, 1, 1)
+    assert result < 5.0
+
+    #make sure snr increases with time
+    result = funcs.signal_to_noise_oir_ccd(2, 25, 0, 0, 0, 1)
+    assert result > 5.0
+
+
+def test_bootstrap():
+    bootarr = np.array([1,2,3,4,5,6,7,8,9,0])
+    #test general bootstrapping
+    answer = np.array([[7,4,8,5,7,0,3,7,8,5],[4,8,8,3,6,5,2,8,6,2]])
+    with NumpyRNGContext(42):
+        assert_equal(answer,funcs.bootstrap(bootarr,2))
+
+    #test with a bootfunction
+    with NumpyRNGContext(42):
+        bootresult = np.mean(funcs.bootstrap(bootarr,10000,bootfunc=np.mean))
+        assert_allclose(np.mean(bootarr),bootresult,atol=0.01)
diff --git a/astropy/table/__init__.py b/astropy/table/__init__.py
index 6353a4f..2263ba7 100644
--- a/astropy/table/__init__.py
+++ b/astropy/table/__init__.py
@@ -1,7 +1,10 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from .table import Column, Table, TableColumns, Row, MaskedColumn, WARN_COLUMN_ARGS
+from .table import Column, Table, TableColumns, Row, MaskedColumn
+from .np_utils import TableMergeError
+from .operations import join, hstack, vstack
 
 # Import routines that connect readers/writers to astropy.table
 from ..io.ascii import connect
+from ..io.fits import connect
 from ..io.misc import connect
 from ..io.votable import connect
diff --git a/astropy/nddata/convolution/boundary_none.c b/astropy/table/_np_utils.c
similarity index 59%
rename from astropy/nddata/convolution/boundary_none.c
rename to astropy/table/_np_utils.c
index 89f09ce..74609f1 100644
--- a/astropy/nddata/convolution/boundary_none.c
+++ b/astropy/table/_np_utils.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.18 on Fri Oct 25 12:27:41 2013 */
+/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -233,8 +233,8 @@
   #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
   #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
 #else
-  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
-  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
 #endif
 
 #ifndef __PYX_EXTERN_C
@@ -249,14 +249,13 @@
 #define _USE_MATH_DEFINES
 #endif
 #include <math.h>
-#define __PYX_HAVE__astropy__nddata__convolution__boundary_none
-#define __PYX_HAVE_API__astropy__nddata__convolution__boundary_none
+#define __PYX_HAVE__astropy__table___np_utils
+#define __PYX_HAVE_API__astropy__table___np_utils
 #include "string.h"
 #include "stdio.h"
 #include "stdlib.h"
 #include "numpy/arrayobject.h"
 #include "numpy/ufuncobject.h"
-#include "numpy/npy_math.h"
 #ifdef _OPENMP
 #include <omp.h>
 #endif /* _OPENMP */
@@ -354,7 +353,7 @@ static const char *__pyx_filename;
 
 
 static const char *__pyx_f[] = {
-  "boundary_none.pyx",
+  "_np_utils.pyx",
   "numpy.pxd",
   "type.pxd",
 };
@@ -583,14 +582,14 @@ typedef npy_double __pyx_t_5numpy_double_t;
  */
 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 
-/* "astropy/nddata/convolution/boundary_none.pyx":6
- * 
- * DTYPE = np.float
- * ctypedef np.float_t DTYPE_t             # <<<<<<<<<<<<<<
+/* "astropy/table/_np_utils.pyx":15
+ * cimport numpy as np
+ * DTYPE = np.int
+ * ctypedef np.int_t DTYPE_t             # <<<<<<<<<<<<<<
  * 
- * cdef extern from "numpy/npy_math.h":
+ * @cython.wraparound(False)
  */
-typedef __pyx_t_5numpy_float_t __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t;
+typedef __pyx_t_5numpy_int_t __pyx_t_7astropy_5table_9_np_utils_DTYPE_t;
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     typedef ::std::complex< float > __pyx_t_float_complex;
@@ -721,20 +720,144 @@ static CYTHON_INLINE int  __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* o
     __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack);
 static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info);
 
-static CYTHON_INLINE long __Pyx_mod_long(long, long); /* proto */
+#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0)
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
+
+#define __Pyx_SetItemInt(o, i, v, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
+                                                    __Pyx_SetItemInt_Fast(o, i, v) : \
+                                                    __Pyx_SetItemInt_Generic(o, to_py_func(i), v))
+static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
+    int r;
+    if (!j) return -1;
+    r = PyObject_SetItem(o, j, v);
+    Py_DECREF(j);
+    return r;
+}
+static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (PyList_CheckExact(o)) {
+        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
+        if (likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
+            PyObject* old = PyList_GET_ITEM(o, n);
+            Py_INCREF(v);
+            PyList_SET_ITEM(o, n, v);
+            Py_DECREF(old);
+            return 1;
+        }
+    } else {  /* inlined PySequence_SetItem() */
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_ass_item)) {
+            if (unlikely(i < 0) && likely(m->sq_length)) {
+                Py_ssize_t l = m->sq_length(o);
+                if (unlikely(l < 0)) return -1;
+                i += l;
+            }
+            return m->sq_ass_item(o, i, v);
+        }
+    }
+#else
+#if CYTHON_COMPILING_IN_PYPY
+    if (PySequence_Check(o) && !PyDict_Check(o)) {
+#else
+    if (PySequence_Check(o)) {
+#endif
+        return PySequence_SetItem(o, i, v);
+    }
+#endif
+    return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
+}
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
+    PyObject *r;
+    if (!j) return NULL;
+    r = PyObject_GetItem(o, j);
+    Py_DECREF(j);
+    return r;
+}
+#define __Pyx_GetItemInt_List(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
+                                                    __Pyx_GetItemInt_List_Fast(o, i) : \
+                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+        PyObject *r = PyList_GET_ITEM(o, i);
+        Py_INCREF(r);
+        return r;
+    }
+    else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) {
+        PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i);
+        Py_INCREF(r);
+        return r;
+    }
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+#define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
+                                                    __Pyx_GetItemInt_Tuple_Fast(o, i) : \
+                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
+        PyObject *r = PyTuple_GET_ITEM(o, i);
+        Py_INCREF(r);
+        return r;
+    }
+    else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) {
+        PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i);
+        Py_INCREF(r);
+        return r;
+    }
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+    return PySequence_GetItem(o, i);
+#endif
+}
+#define __Pyx_GetItemInt(o, i, size, to_py_func) (((size) <= sizeof(Py_ssize_t)) ? \
+                                                    __Pyx_GetItemInt_Fast(o, i) : \
+                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    if (PyList_CheckExact(o)) {
+        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
+        if (likely((n >= 0) & (n < PyList_GET_SIZE(o)))) {
+            PyObject *r = PyList_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
+    }
+    else if (PyTuple_CheckExact(o)) {
+        Py_ssize_t n = (likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
+        if (likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) {
+            PyObject *r = PyTuple_GET_ITEM(o, n);
+            Py_INCREF(r);
+            return r;
+        }
+    } else {  /* inlined PySequence_GetItem() */
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_item)) {
+            if (unlikely(i < 0) && likely(m->sq_length)) {
+                Py_ssize_t l = m->sq_length(o);
+                if (unlikely(l < 0)) return NULL;
+                i += l;
+            }
+            return m->sq_item(o, i);
+        }
+    }
+#else
+    if (PySequence_Check(o)) {
+        return PySequence_GetItem(o, i);
+    }
+#endif
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+}
 
 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
 
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/
 
-static CYTHON_INLINE long __Pyx_div_long(long, long); /* proto */
-
-static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
-
-#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0)
-#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1)
-#define __Pyx_BufPtrStrided3d(type, buf, i0, s0, i1, s1, i2, s2) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2)
 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
 
 static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
@@ -767,11 +890,17 @@ typedef struct {
 #endif
 
 
-static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0};
+  static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0};
 static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1};
 
 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
 
+static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name);
+
+static CYTHON_INLINE npy_long __Pyx_PyInt_from_py_npy_long(PyObject *);
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_npy_long(npy_long);
+
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     #define __Pyx_CREAL(z) ((z).real())
@@ -936,6 +1065,8 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line,
 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
 
 
+/* Module declarations from 'cython' */
+
 /* Module declarations from 'cpython.buffer' */
 
 /* Module declarations from 'cpython.ref' */
@@ -963,34 +1094,30 @@ static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
 static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0;
 static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/
 
-/* Module declarations from 'cython' */
-
-/* Module declarations from 'astropy.nddata.convolution.boundary_none' */
-static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t), { 0 }, 0, 'R', 0, 0 };
-#define __Pyx_MODULE_NAME "astropy.nddata.convolution.boundary_none"
-int __pyx_module_is_main_astropy__nddata__convolution__boundary_none = 0;
+/* Module declarations from 'astropy.table._np_utils' */
+static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7astropy_5table_9_np_utils_DTYPE_t = { "DTYPE_t", NULL, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), { 0 }, 0, IS_UNSIGNED(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t) ? 'U' : 'I', IS_UNSIGNED(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), 0 };
+#define __Pyx_MODULE_NAME "astropy.table._np_utils"
+int __pyx_module_is_main_astropy__table___np_utils = 0;
 
-/* Implementation of 'astropy.nddata.convolution.boundary_none' */
-static PyObject *__pyx_builtin_ValueError;
+/* Implementation of 'astropy.table._np_utils' */
 static PyObject *__pyx_builtin_range;
+static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_RuntimeError;
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolve1d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convolve2d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convolve3d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g); /* proto */
+static PyObject *__pyx_pf_7astropy_5table_9_np_utils_join_inner(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_idxs, PyArrayObject *__pyx_v_idx_sort, int __pyx_v_len_left, int __pyx_v_jointype); /* proto */
 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
 static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
-static char __pyx_k_1[] = "Convolution kernel must have odd dimensions";
-static char __pyx_k_5[] = "ndarray is not C contiguous";
-static char __pyx_k_7[] = "ndarray is not Fortran contiguous";
-static char __pyx_k_9[] = "Non-native byte order not supported";
-static char __pyx_k_11[] = "unknown dtype code in numpy.pxd (%d)";
-static char __pyx_k_12[] = "Format string allocated too short, see comment in numpy.pxd";
-static char __pyx_k_15[] = "Format string allocated too short.";
-static char __pyx_k_19[] = "convolve1d_boundary_none";
-static char __pyx_k_20[] = "/internal/1/root/src/astropy/astropy-release/astropy/nddata/convolution/boundary_none.pyx";
-static char __pyx_k_21[] = "astropy.nddata.convolution.boundary_none";
-static char __pyx_k_24[] = "convolve2d_boundary_none";
-static char __pyx_k_27[] = "convolve3d_boundary_none";
+static char __pyx_k_1[] = "ndarray is not C contiguous";
+static char __pyx_k_3[] = "ndarray is not Fortran contiguous";
+static char __pyx_k_5[] = "Non-native byte order not supported";
+static char __pyx_k_7[] = "unknown dtype code in numpy.pxd (%d)";
+static char __pyx_k_8[] = "Format string allocated too short, see comment in numpy.pxd";
+static char __pyx_k_11[] = "Format string allocated too short.";
+static char __pyx_k_13[] = "\nCython utilities for numpy structured arrays.\n\njoin_inner():  Do the inner-loop cartesian product for np_utils.join() processing.\n               (The \"inner\" is about the inner loop, not inner join).\n";
+static char __pyx_k_14[] = "numpy.ma";
+static char __pyx_k_15[] = "*";
+static char __pyx_k_16[] = "numpy.lib.recfunctions";
+static char __pyx_k_19[] = "/internal/1/root/src/astropy/astropy-release/astropy/table/_np_utils.pyx";
+static char __pyx_k_20[] = "astropy.table._np_utils";
 static char __pyx_k__B[] = "B";
 static char __pyx_k__H[] = "H";
 static char __pyx_k__I[] = "I";
@@ -1003,133 +1130,134 @@ static char __pyx_k__f[] = "f";
 static char __pyx_k__g[] = "g";
 static char __pyx_k__h[] = "h";
 static char __pyx_k__i[] = "i";
-static char __pyx_k__j[] = "j";
-static char __pyx_k__k[] = "k";
 static char __pyx_k__l[] = "l";
 static char __pyx_k__q[] = "q";
 static char __pyx_k__Zd[] = "Zd";
 static char __pyx_k__Zf[] = "Zf";
 static char __pyx_k__Zg[] = "Zg";
 static char __pyx_k__ii[] = "ii";
-static char __pyx_k__jj[] = "jj";
-static char __pyx_k__kk[] = "kk";
+static char __pyx_k__ma[] = "ma";
 static char __pyx_k__np[] = "np";
-static char __pyx_k__nx[] = "nx";
-static char __pyx_k__ny[] = "ny";
-static char __pyx_k__nz[] = "nz";
-static char __pyx_k__bot[] = "bot";
-static char __pyx_k__ker[] = "ker";
-static char __pyx_k__nkx[] = "nkx";
-static char __pyx_k__nky[] = "nky";
-static char __pyx_k__nkz[] = "nkz";
-static char __pyx_k__top[] = "top";
-static char __pyx_k__val[] = "val";
-static char __pyx_k__wkx[] = "wkx";
-static char __pyx_k__wky[] = "wky";
-static char __pyx_k__wkz[] = "wkz";
-static char __pyx_k__conv[] = "conv";
+static char __pyx_k__idx[] = "idx";
+static char __pyx_k__int[] = "int";
+static char __pyx_k__bool[] = "bool";
+static char __pyx_k__idx0[] = "idx0";
+static char __pyx_k__idx1[] = "idx1";
+static char __pyx_k__idxs[] = "idxs";
 static char __pyx_k__DTYPE[] = "DTYPE";
 static char __pyx_k__dtype[] = "dtype";
-static char __pyx_k__fixed[] = "fixed";
-static char __pyx_k__float[] = "float";
-static char __pyx_k__iimax[] = "iimax";
-static char __pyx_k__iimin[] = "iimin";
-static char __pyx_k__jjmax[] = "jjmax";
-static char __pyx_k__jjmin[] = "jjmin";
-static char __pyx_k__kkmax[] = "kkmax";
-static char __pyx_k__kkmin[] = "kkmin";
+static char __pyx_k__empty[] = "empty";
+static char __pyx_k__i_out[] = "i_out";
+static char __pyx_k__n_out[] = "n_out";
 static char __pyx_k__numpy[] = "numpy";
 static char __pyx_k__range[] = "range";
 static char __pyx_k__zeros[] = "zeros";
+static char __pyx_k__i_left[] = "i_left";
+static char __pyx_k__masked[] = "masked";
+static char __pyx_k__n_left[] = "n_left";
+static char __pyx_k__i_right[] = "i_right";
+static char __pyx_k__n_right[] = "n_right";
 static char __pyx_k____main__[] = "__main__";
 static char __pyx_k____test__[] = "__test__";
+static char __pyx_k__idx_sort[] = "idx_sort";
+static char __pyx_k__jointype[] = "jointype";
+static char __pyx_k__key_idxs[] = "key_idxs";
+static char __pyx_k__left_out[] = "left_out";
+static char __pyx_k__len_left[] = "len_left";
+static char __pyx_k__left_idxs[] = "left_idxs";
+static char __pyx_k__left_mask[] = "left_mask";
+static char __pyx_k__right_out[] = "right_out";
 static char __pyx_k__ValueError[] = "ValueError";
+static char __pyx_k__join_inner[] = "join_inner";
+static char __pyx_k__right_idxs[] = "right_idxs";
+static char __pyx_k__right_mask[] = "right_mask";
+static char __pyx_k__drop_fields[] = "drop_fields";
 static char __pyx_k__RuntimeError[] = "RuntimeError";
-static PyObject *__pyx_kp_s_1;
+static char __pyx_k__max_key_idxs[] = "max_key_idxs";
+static PyObject *__pyx_kp_u_1;
 static PyObject *__pyx_kp_u_11;
-static PyObject *__pyx_kp_u_12;
-static PyObject *__pyx_kp_u_15;
-static PyObject *__pyx_n_s_19;
-static PyObject *__pyx_kp_s_20;
-static PyObject *__pyx_n_s_21;
-static PyObject *__pyx_n_s_24;
-static PyObject *__pyx_n_s_27;
+static PyObject *__pyx_n_s_14;
+static PyObject *__pyx_n_s_15;
+static PyObject *__pyx_n_s_16;
+static PyObject *__pyx_kp_s_19;
+static PyObject *__pyx_n_s_20;
+static PyObject *__pyx_kp_u_3;
 static PyObject *__pyx_kp_u_5;
 static PyObject *__pyx_kp_u_7;
-static PyObject *__pyx_kp_u_9;
+static PyObject *__pyx_kp_u_8;
 static PyObject *__pyx_n_s__DTYPE;
 static PyObject *__pyx_n_s__RuntimeError;
 static PyObject *__pyx_n_s__ValueError;
 static PyObject *__pyx_n_s____main__;
 static PyObject *__pyx_n_s____test__;
-static PyObject *__pyx_n_s__bot;
-static PyObject *__pyx_n_s__conv;
+static PyObject *__pyx_n_s__bool;
+static PyObject *__pyx_n_s__drop_fields;
 static PyObject *__pyx_n_s__dtype;
-static PyObject *__pyx_n_s__f;
-static PyObject *__pyx_n_s__fixed;
-static PyObject *__pyx_n_s__float;
-static PyObject *__pyx_n_s__g;
+static PyObject *__pyx_n_s__empty;
 static PyObject *__pyx_n_s__i;
+static PyObject *__pyx_n_s__i_left;
+static PyObject *__pyx_n_s__i_out;
+static PyObject *__pyx_n_s__i_right;
+static PyObject *__pyx_n_s__idx;
+static PyObject *__pyx_n_s__idx0;
+static PyObject *__pyx_n_s__idx1;
+static PyObject *__pyx_n_s__idx_sort;
+static PyObject *__pyx_n_s__idxs;
 static PyObject *__pyx_n_s__ii;
-static PyObject *__pyx_n_s__iimax;
-static PyObject *__pyx_n_s__iimin;
-static PyObject *__pyx_n_s__j;
-static PyObject *__pyx_n_s__jj;
-static PyObject *__pyx_n_s__jjmax;
-static PyObject *__pyx_n_s__jjmin;
-static PyObject *__pyx_n_s__k;
-static PyObject *__pyx_n_s__ker;
-static PyObject *__pyx_n_s__kk;
-static PyObject *__pyx_n_s__kkmax;
-static PyObject *__pyx_n_s__kkmin;
-static PyObject *__pyx_n_s__nkx;
-static PyObject *__pyx_n_s__nky;
-static PyObject *__pyx_n_s__nkz;
+static PyObject *__pyx_n_s__int;
+static PyObject *__pyx_n_s__join_inner;
+static PyObject *__pyx_n_s__jointype;
+static PyObject *__pyx_n_s__key_idxs;
+static PyObject *__pyx_n_s__left_idxs;
+static PyObject *__pyx_n_s__left_mask;
+static PyObject *__pyx_n_s__left_out;
+static PyObject *__pyx_n_s__len_left;
+static PyObject *__pyx_n_s__ma;
+static PyObject *__pyx_n_s__masked;
+static PyObject *__pyx_n_s__max_key_idxs;
+static PyObject *__pyx_n_s__n_left;
+static PyObject *__pyx_n_s__n_out;
+static PyObject *__pyx_n_s__n_right;
 static PyObject *__pyx_n_s__np;
 static PyObject *__pyx_n_s__numpy;
-static PyObject *__pyx_n_s__nx;
-static PyObject *__pyx_n_s__ny;
-static PyObject *__pyx_n_s__nz;
 static PyObject *__pyx_n_s__range;
-static PyObject *__pyx_n_s__top;
-static PyObject *__pyx_n_s__val;
-static PyObject *__pyx_n_s__wkx;
-static PyObject *__pyx_n_s__wky;
-static PyObject *__pyx_n_s__wkz;
+static PyObject *__pyx_n_s__right_idxs;
+static PyObject *__pyx_n_s__right_mask;
+static PyObject *__pyx_n_s__right_out;
 static PyObject *__pyx_n_s__zeros;
+static PyObject *__pyx_int_1;
+static PyObject *__pyx_int_neg_1;
 static PyObject *__pyx_int_15;
 static PyObject *__pyx_k_tuple_2;
-static PyObject *__pyx_k_tuple_3;
 static PyObject *__pyx_k_tuple_4;
 static PyObject *__pyx_k_tuple_6;
-static PyObject *__pyx_k_tuple_8;
+static PyObject *__pyx_k_tuple_9;
 static PyObject *__pyx_k_tuple_10;
-static PyObject *__pyx_k_tuple_13;
-static PyObject *__pyx_k_tuple_14;
-static PyObject *__pyx_k_tuple_16;
+static PyObject *__pyx_k_tuple_12;
 static PyObject *__pyx_k_tuple_17;
-static PyObject *__pyx_k_tuple_22;
-static PyObject *__pyx_k_tuple_25;
 static PyObject *__pyx_k_codeobj_18;
-static PyObject *__pyx_k_codeobj_23;
-static PyObject *__pyx_k_codeobj_26;
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convolve1d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_1convolve1d_boundary_none = {__Pyx_NAMESTR("convolve1d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convolve1d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convolve1d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyArrayObject *__pyx_v_f = 0;
-  PyArrayObject *__pyx_v_g = 0;
+static PyObject *__pyx_pw_7astropy_5table_9_np_utils_1join_inner(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_5table_9_np_utils_join_inner[] = "\n    Do the inner-loop cartesian product for np_utils.join() processing.\n    (The \"inner\" is about the inner loop, not inner join).\n    ";
+static PyMethodDef __pyx_mdef_7astropy_5table_9_np_utils_1join_inner = {__Pyx_NAMESTR("join_inner"), (PyCFunction)__pyx_pw_7astropy_5table_9_np_utils_1join_inner, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_5table_9_np_utils_join_inner)};
+static PyObject *__pyx_pw_7astropy_5table_9_np_utils_1join_inner(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyArrayObject *__pyx_v_idxs = 0;
+  PyArrayObject *__pyx_v_idx_sort = 0;
+  int __pyx_v_len_left;
+  int __pyx_v_jointype;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("convolve1d_boundary_none (wrapper)", 0);
+  __Pyx_RefNannySetupContext("join_inner (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
-    PyObject* values[2] = {0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__idxs,&__pyx_n_s__idx_sort,&__pyx_n_s__len_left,&__pyx_n_s__jointype,0};
+    PyObject* values[4] = {0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
@@ -1138,37 +1266,51 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convol
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__idxs)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__idx_sort)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("join_inner", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__len_left)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("join_inner", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        }
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__jointype)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("join_inner", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve1d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "join_inner") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
     }
-    __pyx_v_f = ((PyArrayObject *)values[0]);
-    __pyx_v_g = ((PyArrayObject *)values[1]);
+    __pyx_v_idxs = ((PyArrayObject *)values[0]);
+    __pyx_v_idx_sort = ((PyArrayObject *)values[1]);
+    __pyx_v_len_left = __Pyx_PyInt_AsInt(values[2]); if (unlikely((__pyx_v_len_left == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_jointype = __Pyx_PyInt_AsInt(values[3]); if (unlikely((__pyx_v_jointype == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve1d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("join_inner", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve1d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.table._np_utils.join_inner", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolve1d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_idxs), __pyx_ptype_5numpy_ndarray, 1, "idxs", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_idx_sort), __pyx_ptype_5numpy_ndarray, 1, "idx_sort", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_5table_9_np_utils_join_inner(__pyx_self, __pyx_v_idxs, __pyx_v_idx_sort, __pyx_v_len_left, __pyx_v_jointype);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -1177,2438 +1319,1156 @@ static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_1convol
   return __pyx_r;
 }
 
-/* "astropy/nddata/convolution/boundary_none.pyx":15
- * 
- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
- * def convolve1d_boundary_none(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
- *                              np.ndarray[DTYPE_t, ndim=1] g):
- * 
- */
-
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_convolve1d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
-  int __pyx_v_nx;
-  int __pyx_v_nkx;
-  int __pyx_v_wkx;
-  PyArrayObject *__pyx_v_fixed = 0;
-  PyArrayObject *__pyx_v_conv = 0;
-  unsigned int __pyx_v_i;
-  unsigned int __pyx_v_ii;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
-  __Pyx_Buffer __pyx_pybuffer_conv;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
-  __Pyx_Buffer __pyx_pybuffer_f;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
-  __Pyx_Buffer __pyx_pybuffer_fixed;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
-  __Pyx_Buffer __pyx_pybuffer_g;
+/* "astropy/table/_np_utils.pyx":19
+ * @cython.wraparound(False)
+ * @cython.boundscheck(False)
+ * def join_inner(np.ndarray[DTYPE_t, ndim=1] idxs,             # <<<<<<<<<<<<<<
+ *                np.ndarray[DTYPE_t, ndim=1] idx_sort,
+ *                int len_left,
+ */
+
+static PyObject *__pyx_pf_7astropy_5table_9_np_utils_join_inner(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_idxs, PyArrayObject *__pyx_v_idx_sort, int __pyx_v_len_left, int __pyx_v_jointype) {
+  int __pyx_v_n_out;
+  int __pyx_v_max_key_idxs;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_ii;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_key_idxs;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_n_left;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_n_right;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_idx0;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_idx1;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_idx;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_i;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_i_left;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_i_right;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_v_i_out;
+  int __pyx_v_masked;
+  PyArrayObject *__pyx_v_left_out = 0;
+  PyArrayObject *__pyx_v_right_out = 0;
+  PyArrayObject *__pyx_v_left_mask = 0;
+  PyArrayObject *__pyx_v_right_mask = 0;
+  PyArrayObject *__pyx_v_left_idxs = 0;
+  PyArrayObject *__pyx_v_right_idxs = 0;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_idx_sort;
+  __Pyx_Buffer __pyx_pybuffer_idx_sort;
+  __Pyx_LocalBuf_ND __pyx_pybuffernd_idxs;
+  __Pyx_Buffer __pyx_pybuffer_idxs;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
+  long __pyx_t_1;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_2;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_3;
+  long __pyx_t_4;
   int __pyx_t_5;
-  int __pyx_t_6;
-  PyObject *__pyx_t_7 = NULL;
-  PyArrayObject *__pyx_t_8 = NULL;
-  PyArrayObject *__pyx_t_9 = NULL;
-  int __pyx_t_10;
-  unsigned int __pyx_t_11;
-  unsigned int __pyx_t_12;
-  long __pyx_t_13;
-  unsigned int __pyx_t_14;
-  unsigned int __pyx_t_15;
-  unsigned int __pyx_t_16;
-  unsigned int __pyx_t_17;
-  unsigned int __pyx_t_18;
-  unsigned int __pyx_t_19;
-  unsigned int __pyx_t_20;
-  unsigned int __pyx_t_21;
-  unsigned int __pyx_t_22;
-  unsigned int __pyx_t_23;
-  unsigned int __pyx_t_24;
-  unsigned int __pyx_t_25;
-  unsigned int __pyx_t_26;
-  unsigned int __pyx_t_27;
-  unsigned int __pyx_t_28;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_6;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_7;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_8;
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_11 = NULL;
+  PyObject *__pyx_t_12 = NULL;
+  PyObject *__pyx_t_13 = NULL;
+  long __pyx_t_14;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_15;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_16;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_17;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_18;
+  __pyx_t_7astropy_5table_9_np_utils_DTYPE_t __pyx_t_19;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("convolve1d_boundary_none", 0);
-  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
-  __pyx_pybuffer_fixed.refcount = 0;
-  __pyx_pybuffernd_fixed.data = NULL;
-  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
-  __pyx_pybuffer_conv.pybuffer.buf = NULL;
-  __pyx_pybuffer_conv.refcount = 0;
-  __pyx_pybuffernd_conv.data = NULL;
-  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
-  __pyx_pybuffer_f.pybuffer.buf = NULL;
-  __pyx_pybuffer_f.refcount = 0;
-  __pyx_pybuffernd_f.data = NULL;
-  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
-  __pyx_pybuffer_g.pybuffer.buf = NULL;
-  __pyx_pybuffer_g.refcount = 0;
-  __pyx_pybuffernd_g.data = NULL;
-  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
+  __Pyx_RefNannySetupContext("join_inner", 0);
+  __pyx_pybuffer_idxs.pybuffer.buf = NULL;
+  __pyx_pybuffer_idxs.refcount = 0;
+  __pyx_pybuffernd_idxs.data = NULL;
+  __pyx_pybuffernd_idxs.rcbuffer = &__pyx_pybuffer_idxs;
+  __pyx_pybuffer_idx_sort.pybuffer.buf = NULL;
+  __pyx_pybuffer_idx_sort.refcount = 0;
+  __pyx_pybuffernd_idx_sort.data = NULL;
+  __pyx_pybuffernd_idx_sort.rcbuffer = &__pyx_pybuffer_idx_sort;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_idxs.rcbuffer->pybuffer, (PyObject*)__pyx_v_idxs, &__Pyx_TypeInfo_nn___pyx_t_7astropy_5table_9_np_utils_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0];
+  __pyx_pybuffernd_idxs.diminfo[0].strides = __pyx_pybuffernd_idxs.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_idxs.diminfo[0].shape = __pyx_pybuffernd_idxs.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_idx_sort.rcbuffer->pybuffer, (PyObject*)__pyx_v_idx_sort, &__Pyx_TypeInfo_nn___pyx_t_7astropy_5table_9_np_utils_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0];
+  __pyx_pybuffernd_idx_sort.diminfo[0].strides = __pyx_pybuffernd_idx_sort.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_idx_sort.diminfo[0].shape = __pyx_pybuffernd_idx_sort.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":18
- *                              np.ndarray[DTYPE_t, ndim=1] g):
- * 
- *     if g.shape[0] % 2 != 1:             # <<<<<<<<<<<<<<
- *         raise ValueError("Convolution kernel must have odd dimensions")
- * 
+  /* "astropy/table/_np_utils.pyx":27
+ *     (The "inner" is about the inner loop, not inner join).
+ *     """
+ *     cdef int n_out = 0             # <<<<<<<<<<<<<<
+ *     cdef int max_key_idxs = 0
+ *     cdef DTYPE_t ii, key_idxs, n_left, n_right, idx0, idx1, idx, i
  */
-  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
-  if (__pyx_t_1) {
+  __pyx_v_n_out = 0;
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":19
- * 
- *     if g.shape[0] % 2 != 1:
- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
- * 
- *     assert f.dtype == DTYPE and g.dtype == DTYPE
+  /* "astropy/table/_np_utils.pyx":28
+ *     """
+ *     cdef int n_out = 0
+ *     cdef int max_key_idxs = 0             # <<<<<<<<<<<<<<
+ *     cdef DTYPE_t ii, key_idxs, n_left, n_right, idx0, idx1, idx, i
+ *     cdef DTYPE_t i_left, i_right, i_out
  */
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+  __pyx_v_max_key_idxs = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":21
- *         raise ValueError("Convolution kernel must have odd dimensions")
- * 
- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
- * 
- *     cdef int nx = f.shape[0]
+  /* "astropy/table/_np_utils.pyx":35
+ *     # First count the final number of rows and max number of indexes
+ *     # for a single key
+ *     masked = 0             # <<<<<<<<<<<<<<
+ *     for ii in range(idxs.shape[0] - 1):
+ *         idx0 = idxs[ii]
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (__pyx_t_1) {
-    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_6 = __pyx_t_5;
-  } else {
-    __pyx_t_6 = __pyx_t_1;
-  }
-  if (unlikely(!__pyx_t_6)) {
-    PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  #endif
+  __pyx_v_masked = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":23
- *     assert f.dtype == DTYPE and g.dtype == DTYPE
- * 
- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
- *     cdef int nkx = g.shape[0]
- *     cdef int wkx = nkx // 2
+  /* "astropy/table/_np_utils.pyx":36
+ *     # for a single key
+ *     masked = 0
+ *     for ii in range(idxs.shape[0] - 1):             # <<<<<<<<<<<<<<
+ *         idx0 = idxs[ii]
+ *         idx1 = idxs[ii + 1]
  */
-  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
+  __pyx_t_1 = ((__pyx_v_idxs->dimensions[0]) - 1);
+  for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
+    __pyx_v_ii = __pyx_t_2;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":24
- * 
- *     cdef int nx = f.shape[0]
- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
- *     cdef int wkx = nkx // 2
+    /* "astropy/table/_np_utils.pyx":37
+ *     masked = 0
+ *     for ii in range(idxs.shape[0] - 1):
+ *         idx0 = idxs[ii]             # <<<<<<<<<<<<<<
+ *         idx1 = idxs[ii + 1]
  * 
  */
-  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
+    __pyx_t_3 = __pyx_v_ii;
+    __pyx_v_idx0 = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idxs.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_idxs.diminfo[0].strides));
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":25
- *     cdef int nx = f.shape[0]
- *     cdef int nkx = g.shape[0]
- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
+    /* "astropy/table/_np_utils.pyx":38
+ *     for ii in range(idxs.shape[0] - 1):
+ *         idx0 = idxs[ii]
+ *         idx1 = idxs[ii + 1]             # <<<<<<<<<<<<<<
  * 
- *     # The following need to be set to zeros rather than empty because the
+ *         # Number of indexes for this key
  */
-  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
+    __pyx_t_4 = (__pyx_v_ii + 1);
+    __pyx_v_idx1 = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idxs.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_idxs.diminfo[0].strides));
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":29
- *     # The following need to be set to zeros rather than empty because the
- *     # boundary does not get reset.
- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.zeros([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.zeros([nx], dtype=DTYPE)
+    /* "astropy/table/_np_utils.pyx":41
  * 
+ *         # Number of indexes for this key
+ *         key_idxs = idx1 - idx0             # <<<<<<<<<<<<<<
+ *         if key_idxs > max_key_idxs:
+ *             max_key_idxs = key_idxs
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_2);
-  __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_4));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
-  __pyx_t_4 = 0;
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_8 = ((PyArrayObject *)__pyx_t_7);
-  {
-    __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
-      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0];
-    }
-  }
-  __pyx_t_8 = 0;
-  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
-  __pyx_t_7 = 0;
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":30
- *     # boundary does not get reset.
- *     cdef np.ndarray[DTYPE_t, ndim=1] fixed = np.zeros([nx], dtype=DTYPE)
- *     cdef np.ndarray[DTYPE_t, ndim=1] conv = np.zeros([nx], dtype=DTYPE)             # <<<<<<<<<<<<<<
- * 
- *     cdef unsigned int i, ii
- */
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
-  __pyx_t_7 = 0;
-  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_t_2));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_2));
-  __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_7), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_9 = ((PyArrayObject *)__pyx_t_3);
-  {
-    __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
-      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0];
-    }
-  }
-  __pyx_t_9 = 0;
-  __pyx_v_conv = ((PyArrayObject *)__pyx_t_3);
-  __pyx_t_3 = 0;
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":40
- *     # Need a first pass to replace NaN values with value convolved from
- *     # neighboring values
- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
- *         if npy_isnan(f[i]):
- *             top = 0.
- */
-  __pyx_t_10 = (__pyx_v_nx - __pyx_v_wkx);
-  for (__pyx_t_11 = __pyx_v_wkx; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
-    __pyx_v_i = __pyx_t_11;
-
-    /* "astropy/nddata/convolution/boundary_none.pyx":41
- *     # neighboring values
- *     for i in range(wkx, nx - wkx):
- *         if npy_isnan(f[i]):             # <<<<<<<<<<<<<<
- *             top = 0.
- *             bot = 0.
- */
-    __pyx_t_12 = __pyx_v_i;
-    __pyx_t_6 = npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_f.diminfo[0].strides)));
-    if (__pyx_t_6) {
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":42
- *     for i in range(wkx, nx - wkx):
- *         if npy_isnan(f[i]):
- *             top = 0.             # <<<<<<<<<<<<<<
- *             bot = 0.
- *             for ii in range(i - wkx, i + wkx + 1):
- */
-      __pyx_v_top = 0.;
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":43
- *         if npy_isnan(f[i]):
- *             top = 0.
- *             bot = 0.             # <<<<<<<<<<<<<<
- *             for ii in range(i - wkx, i + wkx + 1):
- *                 val = f[ii]
- */
-      __pyx_v_bot = 0.;
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":44
- *             top = 0.
- *             bot = 0.
- *             for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
- *                 val = f[ii]
- *                 if not npy_isnan(val):
- */
-      __pyx_t_13 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-      for (__pyx_t_14 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
-        __pyx_v_ii = __pyx_t_14;
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":45
- *             bot = 0.
- *             for ii in range(i - wkx, i + wkx + 1):
- *                 val = f[ii]             # <<<<<<<<<<<<<<
- *                 if not npy_isnan(val):
- *                     ker = g[<unsigned int>(wkx + ii - i)]
- */
-        __pyx_t_15 = __pyx_v_ii;
-        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_f.diminfo[0].strides));
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":46
- *             for ii in range(i - wkx, i + wkx + 1):
- *                 val = f[ii]
- *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
- *                     ker = g[<unsigned int>(wkx + ii - i)]
- *                     top += val * ker
- */
-        __pyx_t_6 = (!npy_isnan(__pyx_v_val));
-        if (__pyx_t_6) {
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":47
- *                 val = f[ii]
- *                 if not npy_isnan(val):
- *                     ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
- *                     top += val * ker
- *                     bot += ker
- */
-          __pyx_t_16 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-          __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_g.diminfo[0].strides));
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":48
- *                 if not npy_isnan(val):
- *                     ker = g[<unsigned int>(wkx + ii - i)]
- *                     top += val * ker             # <<<<<<<<<<<<<<
- *                     bot += ker
- *             if bot != 0.:
- */
-          __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":49
- *                     ker = g[<unsigned int>(wkx + ii - i)]
- *                     top += val * ker
- *                     bot += ker             # <<<<<<<<<<<<<<
- *             if bot != 0.:
- *                 fixed[i] = top / bot
- */
-          __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
-          goto __pyx_L9;
-        }
-        __pyx_L9:;
-      }
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":50
- *                     top += val * ker
- *                     bot += ker
- *             if bot != 0.:             # <<<<<<<<<<<<<<
- *                 fixed[i] = top / bot
- *             else:
- */
-      __pyx_t_6 = (__pyx_v_bot != 0.);
-      if (__pyx_t_6) {
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":51
- *                     bot += ker
- *             if bot != 0.:
- *                 fixed[i] = top / bot             # <<<<<<<<<<<<<<
- *             else:
- *                 fixed[i] = f[i]
- */
-        if (unlikely(__pyx_v_bot == 0)) {
-          PyErr_Format(PyExc_ZeroDivisionError, "float division");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        }
-        __pyx_t_14 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_fixed.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
-        goto __pyx_L10;
-      }
-      /*else*/ {
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":53
- *                 fixed[i] = top / bot
- *             else:
- *                 fixed[i] = f[i]             # <<<<<<<<<<<<<<
- *         else:
- *             fixed[i] = f[i]
- */
-        __pyx_t_17 = __pyx_v_i;
-        __pyx_t_18 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_f.diminfo[0].strides));
-      }
-      __pyx_L10:;
-      goto __pyx_L6;
-    }
-    /*else*/ {
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":55
- *                 fixed[i] = f[i]
- *         else:
- *             fixed[i] = f[i]             # <<<<<<<<<<<<<<
- * 
- *     # Now run the proper convolution
- */
-      __pyx_t_19 = __pyx_v_i;
-      __pyx_t_20 = __pyx_v_i;
-      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_fixed.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_f.diminfo[0].strides));
-    }
-    __pyx_L6:;
-  }
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":58
- * 
- *     # Now run the proper convolution
- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
- *         if not npy_isnan(fixed[i]):
- *             top = 0.
- */
-  __pyx_t_10 = (__pyx_v_nx - __pyx_v_wkx);
-  for (__pyx_t_11 = __pyx_v_wkx; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
-    __pyx_v_i = __pyx_t_11;
-
-    /* "astropy/nddata/convolution/boundary_none.pyx":59
- *     # Now run the proper convolution
- *     for i in range(wkx, nx - wkx):
- *         if not npy_isnan(fixed[i]):             # <<<<<<<<<<<<<<
- *             top = 0.
- *             bot = 0.
- */
-    __pyx_t_21 = __pyx_v_i;
-    __pyx_t_6 = (!npy_isnan((*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_fixed.diminfo[0].strides))));
-    if (__pyx_t_6) {
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":60
- *     for i in range(wkx, nx - wkx):
- *         if not npy_isnan(fixed[i]):
- *             top = 0.             # <<<<<<<<<<<<<<
- *             bot = 0.
- *             for ii in range(i - wkx, i + wkx + 1):
- */
-      __pyx_v_top = 0.;
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":61
- *         if not npy_isnan(fixed[i]):
- *             top = 0.
- *             bot = 0.             # <<<<<<<<<<<<<<
- *             for ii in range(i - wkx, i + wkx + 1):
- *                 val = fixed[ii]
- */
-      __pyx_v_bot = 0.;
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":62
- *             top = 0.
- *             bot = 0.
- *             for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
- *                 val = fixed[ii]
- *                 ker = g[<unsigned int>(wkx + ii - i)]
- */
-      __pyx_t_13 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-      for (__pyx_t_22 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_22 < __pyx_t_13; __pyx_t_22+=1) {
-        __pyx_v_ii = __pyx_t_22;
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":63
- *             bot = 0.
- *             for ii in range(i - wkx, i + wkx + 1):
- *                 val = fixed[ii]             # <<<<<<<<<<<<<<
- *                 ker = g[<unsigned int>(wkx + ii - i)]
- *                 if not npy_isnan(val):
- */
-        __pyx_t_23 = __pyx_v_ii;
-        __pyx_v_val = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_fixed.diminfo[0].strides));
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":64
- *             for ii in range(i - wkx, i + wkx + 1):
- *                 val = fixed[ii]
- *                 ker = g[<unsigned int>(wkx + ii - i)]             # <<<<<<<<<<<<<<
- *                 if not npy_isnan(val):
- *                     top += val * ker
- */
-        __pyx_t_24 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-        __pyx_v_ker = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_g.diminfo[0].strides));
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":65
- *                 val = fixed[ii]
- *                 ker = g[<unsigned int>(wkx + ii - i)]
- *                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
- *                     top += val * ker
- *                     bot += ker
- */
-        __pyx_t_6 = (!npy_isnan(__pyx_v_val));
-        if (__pyx_t_6) {
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":66
- *                 ker = g[<unsigned int>(wkx + ii - i)]
- *                 if not npy_isnan(val):
- *                     top += val * ker             # <<<<<<<<<<<<<<
- *                     bot += ker
- *             if bot != 0:
- */
-          __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":67
- *                 if not npy_isnan(val):
- *                     top += val * ker
- *                     bot += ker             # <<<<<<<<<<<<<<
- *             if bot != 0:
- *                 conv[i] = top / bot
- */
-          __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
-          goto __pyx_L16;
-        }
-        __pyx_L16:;
-      }
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":68
- *                     top += val * ker
- *                     bot += ker
- *             if bot != 0:             # <<<<<<<<<<<<<<
- *                 conv[i] = top / bot
- *             else:
- */
-      __pyx_t_6 = (__pyx_v_bot != 0.0);
-      if (__pyx_t_6) {
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":69
- *                     bot += ker
- *             if bot != 0:
- *                 conv[i] = top / bot             # <<<<<<<<<<<<<<
- *             else:
- *                 conv[i] = fixed[i]
- */
-        if (unlikely(__pyx_v_bot == 0)) {
-          PyErr_Format(PyExc_ZeroDivisionError, "float division");
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        }
-        __pyx_t_22 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_conv.diminfo[0].strides) = (__pyx_v_top / __pyx_v_bot);
-        goto __pyx_L17;
-      }
-      /*else*/ {
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":71
- *                 conv[i] = top / bot
- *             else:
- *                 conv[i] = fixed[i]             # <<<<<<<<<<<<<<
- *         else:
- *             conv[i] = fixed[i]
- */
-        __pyx_t_25 = __pyx_v_i;
-        __pyx_t_26 = __pyx_v_i;
-        *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_fixed.diminfo[0].strides));
-      }
-      __pyx_L17:;
-      goto __pyx_L13;
-    }
-    /*else*/ {
+    __pyx_v_key_idxs = (__pyx_v_idx1 - __pyx_v_idx0);
 
-      /* "astropy/nddata/convolution/boundary_none.pyx":73
- *                 conv[i] = fixed[i]
- *         else:
- *             conv[i] = fixed[i]             # <<<<<<<<<<<<<<
+    /* "astropy/table/_np_utils.pyx":42
+ *         # Number of indexes for this key
+ *         key_idxs = idx1 - idx0
+ *         if key_idxs > max_key_idxs:             # <<<<<<<<<<<<<<
+ *             max_key_idxs = key_idxs
  * 
- *     return conv
  */
-      __pyx_t_27 = __pyx_v_i;
-      __pyx_t_28 = __pyx_v_i;
-      *__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_conv.diminfo[0].strides) = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_fixed.diminfo[0].strides));
-    }
-    __pyx_L13:;
-  }
+    __pyx_t_5 = (__pyx_v_key_idxs > __pyx_v_max_key_idxs);
+    if (__pyx_t_5) {
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":75
- *             conv[i] = fixed[i]
- * 
- *     return conv             # <<<<<<<<<<<<<<
- * 
+      /* "astropy/table/_np_utils.pyx":43
+ *         key_idxs = idx1 - idx0
+ *         if key_idxs > max_key_idxs:
+ *             max_key_idxs = key_idxs             # <<<<<<<<<<<<<<
  * 
+ *         # Number of rows for this key
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
-  __pyx_r = ((PyObject *)__pyx_v_conv);
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_7);
-  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
-    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
-  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve1d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  goto __pyx_L2;
-  __pyx_L0:;
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
-  __pyx_L2:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
-  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_3convolve2d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_3convolve2d_boundary_none = {__Pyx_NAMESTR("convolve2d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_3convolve2d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_3convolve2d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyArrayObject *__pyx_v_f = 0;
-  PyArrayObject *__pyx_v_g = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("convolve2d_boundary_none (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
-    PyObject* values[2] = {0,0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve2d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      __pyx_v_max_key_idxs = __pyx_v_key_idxs;
+      goto __pyx_L5;
     }
-    __pyx_v_f = ((PyArrayObject *)values[0]);
-    __pyx_v_g = ((PyArrayObject *)values[1]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve2d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve2d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convolve2d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "astropy/nddata/convolution/boundary_none.pyx":79
- * 
- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
- * def convolve2d_boundary_none(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
- *                              np.ndarray[DTYPE_t, ndim=2] g):
- * 
- */
-
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_2convolve2d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
-  int __pyx_v_nx;
-  int __pyx_v_ny;
-  int __pyx_v_nkx;
-  int __pyx_v_nky;
-  int __pyx_v_wkx;
-  int __pyx_v_wky;
-  PyArrayObject *__pyx_v_fixed = 0;
-  PyArrayObject *__pyx_v_conv = 0;
-  unsigned int __pyx_v_i;
-  unsigned int __pyx_v_j;
-  unsigned int __pyx_v_ii;
-  unsigned int __pyx_v_jj;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
-  __Pyx_Buffer __pyx_pybuffer_conv;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
-  __Pyx_Buffer __pyx_pybuffer_f;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
-  __Pyx_Buffer __pyx_pybuffer_fixed;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
-  __Pyx_Buffer __pyx_pybuffer_g;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  PyObject *__pyx_t_4 = NULL;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  PyArrayObject *__pyx_t_8 = NULL;
-  PyArrayObject *__pyx_t_9 = NULL;
-  int __pyx_t_10;
-  unsigned int __pyx_t_11;
-  int __pyx_t_12;
-  unsigned int __pyx_t_13;
-  unsigned int __pyx_t_14;
-  unsigned int __pyx_t_15;
-  long __pyx_t_16;
-  unsigned int __pyx_t_17;
-  long __pyx_t_18;
-  unsigned int __pyx_t_19;
-  unsigned int __pyx_t_20;
-  unsigned int __pyx_t_21;
-  unsigned int __pyx_t_22;
-  unsigned int __pyx_t_23;
-  unsigned int __pyx_t_24;
-  unsigned int __pyx_t_25;
-  unsigned int __pyx_t_26;
-  unsigned int __pyx_t_27;
-  unsigned int __pyx_t_28;
-  unsigned int __pyx_t_29;
-  unsigned int __pyx_t_30;
-  unsigned int __pyx_t_31;
-  unsigned int __pyx_t_32;
-  unsigned int __pyx_t_33;
-  unsigned int __pyx_t_34;
-  unsigned int __pyx_t_35;
-  unsigned int __pyx_t_36;
-  unsigned int __pyx_t_37;
-  unsigned int __pyx_t_38;
-  unsigned int __pyx_t_39;
-  unsigned int __pyx_t_40;
-  unsigned int __pyx_t_41;
-  unsigned int __pyx_t_42;
-  unsigned int __pyx_t_43;
-  unsigned int __pyx_t_44;
-  unsigned int __pyx_t_45;
-  unsigned int __pyx_t_46;
-  unsigned int __pyx_t_47;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("convolve2d_boundary_none", 0);
-  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
-  __pyx_pybuffer_fixed.refcount = 0;
-  __pyx_pybuffernd_fixed.data = NULL;
-  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
-  __pyx_pybuffer_conv.pybuffer.buf = NULL;
-  __pyx_pybuffer_conv.refcount = 0;
-  __pyx_pybuffernd_conv.data = NULL;
-  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
-  __pyx_pybuffer_f.pybuffer.buf = NULL;
-  __pyx_pybuffer_f.refcount = 0;
-  __pyx_pybuffernd_f.data = NULL;
-  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
-  __pyx_pybuffer_g.pybuffer.buf = NULL;
-  __pyx_pybuffer_g.refcount = 0;
-  __pyx_pybuffernd_g.data = NULL;
-  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
-  {
-    __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1];
-  {
-    __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1];
+    __pyx_L5:;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":82
- *                              np.ndarray[DTYPE_t, ndim=2] g):
- * 
- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:             # <<<<<<<<<<<<<<
- *         raise ValueError("Convolution kernel must have odd dimensions")
+    /* "astropy/table/_np_utils.pyx":46
  * 
+ *         # Number of rows for this key
+ *         n_left = 0             # <<<<<<<<<<<<<<
+ *         n_right = 0
+ *         for idx in range(idx0, idx1):
  */
-  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
-  if (!__pyx_t_1) {
-    __pyx_t_2 = (__Pyx_mod_long((__pyx_v_g->dimensions[1]), 2) != 1);
-    __pyx_t_3 = __pyx_t_2;
-  } else {
-    __pyx_t_3 = __pyx_t_1;
-  }
-  if (__pyx_t_3) {
+    __pyx_v_n_left = 0;
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":83
- * 
- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
- * 
- *     assert f.dtype == DTYPE and g.dtype == DTYPE
+    /* "astropy/table/_np_utils.pyx":47
+ *         # Number of rows for this key
+ *         n_left = 0
+ *         n_right = 0             # <<<<<<<<<<<<<<
+ *         for idx in range(idx0, idx1):
+ *             i = idx_sort[idx]
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
-  }
-  __pyx_L3:;
+    __pyx_v_n_right = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":85
- *         raise ValueError("Convolution kernel must have odd dimensions")
- * 
- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
- * 
- *     cdef int nx = f.shape[0]
+    /* "astropy/table/_np_utils.pyx":48
+ *         n_left = 0
+ *         n_right = 0
+ *         for idx in range(idx0, idx1):             # <<<<<<<<<<<<<<
+ *             i = idx_sort[idx]
+ *             if i < len_left:
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (__pyx_t_3) {
-    __pyx_t_6 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_2 = __pyx_t_1;
-  } else {
-    __pyx_t_2 = __pyx_t_3;
-  }
-  if (unlikely(!__pyx_t_2)) {
-    PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  #endif
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":87
- *     assert f.dtype == DTYPE and g.dtype == DTYPE
- * 
- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
- *     cdef int ny = f.shape[1]
- *     cdef int nkx = g.shape[0]
- */
-  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":88
- * 
- *     cdef int nx = f.shape[0]
- *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
- *     cdef int nkx = g.shape[0]
- *     cdef int nky = g.shape[1]
- */
-  __pyx_v_ny = (__pyx_v_f->dimensions[1]);
+    __pyx_t_6 = __pyx_v_idx1;
+    for (__pyx_t_7 = __pyx_v_idx0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
+      __pyx_v_idx = __pyx_t_7;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":89
- *     cdef int nx = f.shape[0]
- *     cdef int ny = f.shape[1]
- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
- *     cdef int nky = g.shape[1]
- *     cdef int wkx = nkx // 2
+      /* "astropy/table/_np_utils.pyx":49
+ *         n_right = 0
+ *         for idx in range(idx0, idx1):
+ *             i = idx_sort[idx]             # <<<<<<<<<<<<<<
+ *             if i < len_left:
+ *                 n_left += 1
  */
-  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
+      __pyx_t_8 = __pyx_v_idx;
+      __pyx_v_i = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idx_sort.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_idx_sort.diminfo[0].strides));
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":90
- *     cdef int ny = f.shape[1]
- *     cdef int nkx = g.shape[0]
- *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
- *     cdef int wkx = nkx // 2
- *     cdef int wky = nky // 2
- */
-  __pyx_v_nky = (__pyx_v_g->dimensions[1]);
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":91
- *     cdef int nkx = g.shape[0]
- *     cdef int nky = g.shape[1]
- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
- *     cdef int wky = nky // 2
- * 
- */
-  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":92
- *     cdef int nky = g.shape[1]
- *     cdef int wkx = nkx // 2
- *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
- * 
- *     # The following need to be set to zeros rather than empty because the
- */
-  __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":96
- *     # The following need to be set to zeros rather than empty because the
- *     # boundary does not get reset.
- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.zeros([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.zeros([nx, ny], dtype=DTYPE)
- * 
- */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyList_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
-  __Pyx_GIVEREF(__pyx_t_6);
-  __pyx_t_4 = 0;
-  __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_7));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_7));
-  __pyx_t_7 = 0;
-  __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_7));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_7, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_8 = ((PyArrayObject *)__pyx_t_4);
-  {
-    __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
-      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1];
-    }
-  }
-  __pyx_t_8 = 0;
-  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_4);
-  __pyx_t_4 = 0;
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":97
- *     # boundary does not get reset.
- *     cdef np.ndarray[DTYPE_t, ndim=2] fixed = np.zeros([nx, ny], dtype=DTYPE)
- *     cdef np.ndarray[DTYPE_t, ndim=2] conv = np.zeros([nx, ny], dtype=DTYPE)             # <<<<<<<<<<<<<<
- * 
- *     cdef unsigned int i, j, ii, jj
- */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_7 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__zeros); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
-  __Pyx_GIVEREF(__pyx_t_6);
-  __pyx_t_4 = 0;
-  __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
-  __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_7, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_9 = ((PyArrayObject *)__pyx_t_4);
-  {
-    __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
-      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1];
-    }
-  }
-  __pyx_t_9 = 0;
-  __pyx_v_conv = ((PyArrayObject *)__pyx_t_4);
-  __pyx_t_4 = 0;
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":107
- *     # Need a first pass to replace NaN values with value convolved from
- *     # neighboring values
- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
- *         for j in range(wky, ny - wky):
- *             if npy_isnan(f[i, j]):
- */
-  __pyx_t_10 = (__pyx_v_nx - __pyx_v_wkx);
-  for (__pyx_t_11 = __pyx_v_wkx; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
-    __pyx_v_i = __pyx_t_11;
-
-    /* "astropy/nddata/convolution/boundary_none.pyx":108
- *     # neighboring values
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):             # <<<<<<<<<<<<<<
- *             if npy_isnan(f[i, j]):
- *                 top = 0.
- */
-    __pyx_t_12 = (__pyx_v_ny - __pyx_v_wky);
-    for (__pyx_t_13 = __pyx_v_wky; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
-      __pyx_v_j = __pyx_t_13;
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":109
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):
- *             if npy_isnan(f[i, j]):             # <<<<<<<<<<<<<<
- *                 top = 0.
- *                 bot = 0.
- */
-      __pyx_t_14 = __pyx_v_i;
-      __pyx_t_15 = __pyx_v_j;
-      __pyx_t_2 = npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_f.diminfo[1].strides)));
-      if (__pyx_t_2) {
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":110
- *         for j in range(wky, ny - wky):
- *             if npy_isnan(f[i, j]):
- *                 top = 0.             # <<<<<<<<<<<<<<
- *                 bot = 0.
- *                 for ii in range(i - wkx, i + wkx + 1):
- */
-        __pyx_v_top = 0.;
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":111
- *             if npy_isnan(f[i, j]):
- *                 top = 0.
- *                 bot = 0.             # <<<<<<<<<<<<<<
- *                 for ii in range(i - wkx, i + wkx + 1):
- *                     for jj in range(j - wky, j + wky + 1):
- */
-        __pyx_v_bot = 0.;
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":112
- *                 top = 0.
- *                 bot = 0.
- *                 for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
- *                     for jj in range(j - wky, j + wky + 1):
- *                         val = f[ii, jj]
- */
-        __pyx_t_16 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-        for (__pyx_t_17 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
-          __pyx_v_ii = __pyx_t_17;
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":113
- *                 bot = 0.
- *                 for ii in range(i - wkx, i + wkx + 1):
- *                     for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
- *                         val = f[ii, jj]
- *                         if not npy_isnan(val):
- */
-          __pyx_t_18 = ((__pyx_v_j + __pyx_v_wky) + 1);
-          for (__pyx_t_19 = (__pyx_v_j - __pyx_v_wky); __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
-            __pyx_v_jj = __pyx_t_19;
-
-            /* "astropy/nddata/convolution/boundary_none.pyx":114
- *                 for ii in range(i - wkx, i + wkx + 1):
- *                     for jj in range(j - wky, j + wky + 1):
- *                         val = f[ii, jj]             # <<<<<<<<<<<<<<
- *                         if not npy_isnan(val):
- *                             ker = g[<unsigned int>(wkx + ii - i),
- */
-            __pyx_t_20 = __pyx_v_ii;
-            __pyx_t_21 = __pyx_v_jj;
-            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_f.diminfo[1].strides));
-
-            /* "astropy/nddata/convolution/boundary_none.pyx":115
- *                     for jj in range(j - wky, j + wky + 1):
- *                         val = f[ii, jj]
- *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
- *                             ker = g[<unsigned int>(wkx + ii - i),
- *                                     <unsigned int>(wky + jj - j)]
- */
-            __pyx_t_2 = (!npy_isnan(__pyx_v_val));
-            if (__pyx_t_2) {
-
-              /* "astropy/nddata/convolution/boundary_none.pyx":117
- *                         if not npy_isnan(val):
- *                             ker = g[<unsigned int>(wkx + ii - i),
- *                                     <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
- *                             top += val * ker
- *                             bot += ker
- */
-              __pyx_t_22 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-              __pyx_t_23 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-              __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_g.diminfo[1].strides));
-
-              /* "astropy/nddata/convolution/boundary_none.pyx":118
- *                             ker = g[<unsigned int>(wkx + ii - i),
- *                                     <unsigned int>(wky + jj - j)]
- *                             top += val * ker             # <<<<<<<<<<<<<<
- *                             bot += ker
- *                 if bot != 0.:
- */
-              __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
-
-              /* "astropy/nddata/convolution/boundary_none.pyx":119
- *                                     <unsigned int>(wky + jj - j)]
- *                             top += val * ker
- *                             bot += ker             # <<<<<<<<<<<<<<
- *                 if bot != 0.:
- *                     fixed[i, j] = top / bot
- */
-              __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
-              goto __pyx_L13;
-            }
-            __pyx_L13:;
-          }
-        }
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":120
- *                             top += val * ker
- *                             bot += ker
- *                 if bot != 0.:             # <<<<<<<<<<<<<<
- *                     fixed[i, j] = top / bot
- *                 else:
- */
-        __pyx_t_2 = (__pyx_v_bot != 0.);
-        if (__pyx_t_2) {
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":121
- *                             bot += ker
- *                 if bot != 0.:
- *                     fixed[i, j] = top / bot             # <<<<<<<<<<<<<<
- *                 else:
- *                     fixed[i, j] = f[i, j]
+      /* "astropy/table/_np_utils.pyx":50
+ *         for idx in range(idx0, idx1):
+ *             i = idx_sort[idx]
+ *             if i < len_left:             # <<<<<<<<<<<<<<
+ *                 n_left += 1
+ *             else:
  */
-          if (unlikely(__pyx_v_bot == 0)) {
-            PyErr_Format(PyExc_ZeroDivisionError, "float division");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          }
-          __pyx_t_17 = __pyx_v_i;
-          __pyx_t_19 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_fixed.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
-          goto __pyx_L14;
-        }
-        /*else*/ {
+      __pyx_t_5 = (__pyx_v_i < __pyx_v_len_left);
+      if (__pyx_t_5) {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":123
- *                     fixed[i, j] = top / bot
- *                 else:
- *                     fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
+        /* "astropy/table/_np_utils.pyx":51
+ *             i = idx_sort[idx]
+ *             if i < len_left:
+ *                 n_left += 1             # <<<<<<<<<<<<<<
  *             else:
- *                 fixed[i, j] = f[i, j]
+ *                 n_right += 1
  */
-          __pyx_t_24 = __pyx_v_i;
-          __pyx_t_25 = __pyx_v_j;
-          __pyx_t_26 = __pyx_v_i;
-          __pyx_t_27 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_f.diminfo[1].strides));
-        }
-        __pyx_L14:;
+        __pyx_v_n_left = (__pyx_v_n_left + 1);
         goto __pyx_L8;
       }
       /*else*/ {
 
-        /* "astropy/nddata/convolution/boundary_none.pyx":125
- *                     fixed[i, j] = f[i, j]
+        /* "astropy/table/_np_utils.pyx":53
+ *                 n_left += 1
  *             else:
- *                 fixed[i, j] = f[i, j]             # <<<<<<<<<<<<<<
+ *                 n_right += 1             # <<<<<<<<<<<<<<
  * 
- *     # Now run the proper convolution
+ *         # Fix n_left and n_right for different join types
  */
-        __pyx_t_28 = __pyx_v_i;
-        __pyx_t_29 = __pyx_v_j;
-        __pyx_t_30 = __pyx_v_i;
-        __pyx_t_31 = __pyx_v_j;
-        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_fixed.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[1].strides));
+        __pyx_v_n_right = (__pyx_v_n_right + 1);
       }
       __pyx_L8:;
     }
-  }
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":128
- * 
- *     # Now run the proper convolution
- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
- *         for j in range(wky, ny - wky):
- *             if not npy_isnan(fixed[i, j]):
- */
-  __pyx_t_10 = (__pyx_v_nx - __pyx_v_wkx);
-  for (__pyx_t_11 = __pyx_v_wkx; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
-    __pyx_v_i = __pyx_t_11;
-
-    /* "astropy/nddata/convolution/boundary_none.pyx":129
- *     # Now run the proper convolution
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):             # <<<<<<<<<<<<<<
- *             if not npy_isnan(fixed[i, j]):
- *                 top = 0.
- */
-    __pyx_t_12 = (__pyx_v_ny - __pyx_v_wky);
-    for (__pyx_t_13 = __pyx_v_wky; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
-      __pyx_v_j = __pyx_t_13;
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":130
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):
- *             if not npy_isnan(fixed[i, j]):             # <<<<<<<<<<<<<<
- *                 top = 0.
- *                 bot = 0.
- */
-      __pyx_t_32 = __pyx_v_i;
-      __pyx_t_33 = __pyx_v_j;
-      __pyx_t_2 = (!npy_isnan((*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_fixed.diminfo[1].strides))));
-      if (__pyx_t_2) {
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":131
- *         for j in range(wky, ny - wky):
- *             if not npy_isnan(fixed[i, j]):
- *                 top = 0.             # <<<<<<<<<<<<<<
- *                 bot = 0.
- *                 for ii in range(i - wkx, i + wkx + 1):
- */
-        __pyx_v_top = 0.;
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":132
- *             if not npy_isnan(fixed[i, j]):
- *                 top = 0.
- *                 bot = 0.             # <<<<<<<<<<<<<<
- *                 for ii in range(i - wkx, i + wkx + 1):
- *                     for jj in range(j - wky, j + wky + 1):
- */
-        __pyx_v_bot = 0.;
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":133
- *                 top = 0.
- *                 bot = 0.
- *                 for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
- *                     for jj in range(j - wky, j + wky + 1):
- *                         val = fixed[ii, jj]
- */
-        __pyx_t_16 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-        for (__pyx_t_34 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_34 < __pyx_t_16; __pyx_t_34+=1) {
-          __pyx_v_ii = __pyx_t_34;
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":134
- *                 bot = 0.
- *                 for ii in range(i - wkx, i + wkx + 1):
- *                     for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
- *                         val = fixed[ii, jj]
- *                         ker = g[<unsigned int>(wkx + ii - i),
- */
-          __pyx_t_18 = ((__pyx_v_j + __pyx_v_wky) + 1);
-          for (__pyx_t_35 = (__pyx_v_j - __pyx_v_wky); __pyx_t_35 < __pyx_t_18; __pyx_t_35+=1) {
-            __pyx_v_jj = __pyx_t_35;
-
-            /* "astropy/nddata/convolution/boundary_none.pyx":135
- *                 for ii in range(i - wkx, i + wkx + 1):
- *                     for jj in range(j - wky, j + wky + 1):
- *                         val = fixed[ii, jj]             # <<<<<<<<<<<<<<
- *                         ker = g[<unsigned int>(wkx + ii - i),
- *                                 <unsigned int>(wky + jj - j)]
- */
-            __pyx_t_36 = __pyx_v_ii;
-            __pyx_t_37 = __pyx_v_jj;
-            __pyx_v_val = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides));
-
-            /* "astropy/nddata/convolution/boundary_none.pyx":137
- *                         val = fixed[ii, jj]
- *                         ker = g[<unsigned int>(wkx + ii - i),
- *                                 <unsigned int>(wky + jj - j)]             # <<<<<<<<<<<<<<
- *                         if not npy_isnan(val):
- *                             top += val * ker
- */
-            __pyx_t_38 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-            __pyx_t_39 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-            __pyx_v_ker = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_g.diminfo[1].strides));
-
-            /* "astropy/nddata/convolution/boundary_none.pyx":138
- *                         ker = g[<unsigned int>(wkx + ii - i),
- *                                 <unsigned int>(wky + jj - j)]
- *                         if not npy_isnan(val):             # <<<<<<<<<<<<<<
- *                             top += val * ker
- *                             bot += ker
- */
-            __pyx_t_2 = (!npy_isnan(__pyx_v_val));
-            if (__pyx_t_2) {
-
-              /* "astropy/nddata/convolution/boundary_none.pyx":139
- *                                 <unsigned int>(wky + jj - j)]
- *                         if not npy_isnan(val):
- *                             top += val * ker             # <<<<<<<<<<<<<<
- *                             bot += ker
- *                 if bot != 0:
- */
-              __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
-
-              /* "astropy/nddata/convolution/boundary_none.pyx":140
- *                         if not npy_isnan(val):
- *                             top += val * ker
- *                             bot += ker             # <<<<<<<<<<<<<<
- *                 if bot != 0:
- *                     conv[i, j] = top / bot
- */
-              __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
-              goto __pyx_L24;
-            }
-            __pyx_L24:;
-          }
-        }
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":141
- *                             top += val * ker
- *                             bot += ker
- *                 if bot != 0:             # <<<<<<<<<<<<<<
- *                     conv[i, j] = top / bot
- *                 else:
+    /* "astropy/table/_np_utils.pyx":69
+ *                 masked = 1
+ *                 n_right = 1
+ *         elif jointype == 3:             # <<<<<<<<<<<<<<
+ *             if n_left == 0:
+ *                 masked = 1
  */
-        __pyx_t_2 = (__pyx_v_bot != 0.0);
-        if (__pyx_t_2) {
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":142
- *                             bot += ker
- *                 if bot != 0:
- *                     conv[i, j] = top / bot             # <<<<<<<<<<<<<<
- *                 else:
- *                     conv[i, j] = fixed[i, j]
- */
-          if (unlikely(__pyx_v_bot == 0)) {
-            PyErr_Format(PyExc_ZeroDivisionError, "float division");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          }
-          __pyx_t_34 = __pyx_v_i;
-          __pyx_t_35 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_conv.diminfo[1].strides) = (__pyx_v_top / __pyx_v_bot);
-          goto __pyx_L25;
-        }
-        /*else*/ {
+    switch (__pyx_v_jointype) {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":144
- *                     conv[i, j] = top / bot
- *                 else:
- *                     conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
- *             else:
- *                 conv[i, j] = fixed[i, j]
- */
-          __pyx_t_40 = __pyx_v_i;
-          __pyx_t_41 = __pyx_v_j;
-          __pyx_t_42 = __pyx_v_i;
-          __pyx_t_43 = __pyx_v_j;
-          *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_41, __pyx_pybuffernd_fixed.diminfo[1] [...]
-        }
-        __pyx_L25:;
-        goto __pyx_L19;
-      }
-      /*else*/ {
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":146
- *                     conv[i, j] = fixed[i, j]
- *             else:
- *                 conv[i, j] = fixed[i, j]             # <<<<<<<<<<<<<<
+      /* "astropy/table/_np_utils.pyx":56
  * 
- *     return conv
- */
-        __pyx_t_44 = __pyx_v_i;
-        __pyx_t_45 = __pyx_v_j;
-        __pyx_t_46 = __pyx_v_i;
-        __pyx_t_47 = __pyx_v_j;
-        *__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_conv.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[1].s [...]
-      }
-      __pyx_L19:;
-    }
-  }
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":148
- *                 conv[i, j] = fixed[i, j]
- * 
- *     return conv             # <<<<<<<<<<<<<<
- * 
- * 
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
-  __pyx_r = ((PyObject *)__pyx_v_conv);
-  goto __pyx_L0;
-
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
-  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
-    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
-  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve2d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  goto __pyx_L2;
-  __pyx_L0:;
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
-  __pyx_L2:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
-  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* Python wrapper */
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_5convolve3d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_5convolve3d_boundary_none = {__Pyx_NAMESTR("convolve3d_boundary_none"), (PyCFunction)__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_5convolve3d_boundary_none, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)};
-static PyObject *__pyx_pw_7astropy_6nddata_11convolution_13boundary_none_5convolve3d_boundary_none(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyArrayObject *__pyx_v_f = 0;
-  PyArrayObject *__pyx_v_g = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("convolve3d_boundary_none (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__f,&__pyx_n_s__g,0};
-    PyObject* values[2] = {0,0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__f)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__g)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_none", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convolve3d_boundary_none") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-    }
-    __pyx_v_f = ((PyArrayObject *)values[0]);
-    __pyx_v_g = ((PyArrayObject *)values[1]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("convolve3d_boundary_none", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve3d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_5numpy_ndarray, 1, "f", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_g), __pyx_ptype_5numpy_ndarray, 1, "g", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convolve3d_boundary_none(__pyx_self, __pyx_v_f, __pyx_v_g);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "astropy/nddata/convolution/boundary_none.pyx":152
- * 
- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
- * def convolve3d_boundary_none(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
- *                              np.ndarray[DTYPE_t, ndim=3] g):
- * 
- */
-
-static PyObject *__pyx_pf_7astropy_6nddata_11convolution_13boundary_none_4convolve3d_boundary_none(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_f, PyArrayObject *__pyx_v_g) {
-  int __pyx_v_nx;
-  int __pyx_v_ny;
-  int __pyx_v_nz;
-  int __pyx_v_nkx;
-  int __pyx_v_nky;
-  int __pyx_v_nkz;
-  int __pyx_v_wkx;
-  int __pyx_v_wky;
-  int __pyx_v_wkz;
-  PyArrayObject *__pyx_v_fixed = 0;
-  PyArrayObject *__pyx_v_conv = 0;
-  unsigned int __pyx_v_i;
-  unsigned int __pyx_v_j;
-  unsigned int __pyx_v_k;
-  unsigned int __pyx_v_ii;
-  unsigned int __pyx_v_jj;
-  unsigned int __pyx_v_kk;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_top;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_bot;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_ker;
-  __pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t __pyx_v_val;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_conv;
-  __Pyx_Buffer __pyx_pybuffer_conv;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_f;
-  __Pyx_Buffer __pyx_pybuffer_f;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_fixed;
-  __Pyx_Buffer __pyx_pybuffer_fixed;
-  __Pyx_LocalBuf_ND __pyx_pybuffernd_g;
-  __Pyx_Buffer __pyx_pybuffer_g;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  PyObject *__pyx_t_8 = NULL;
-  PyObject *__pyx_t_9 = NULL;
-  PyArrayObject *__pyx_t_10 = NULL;
-  PyArrayObject *__pyx_t_11 = NULL;
-  int __pyx_t_12;
-  unsigned int __pyx_t_13;
-  int __pyx_t_14;
-  unsigned int __pyx_t_15;
-  int __pyx_t_16;
-  unsigned int __pyx_t_17;
-  unsigned int __pyx_t_18;
-  unsigned int __pyx_t_19;
-  unsigned int __pyx_t_20;
-  long __pyx_t_21;
-  unsigned int __pyx_t_22;
-  long __pyx_t_23;
-  unsigned int __pyx_t_24;
-  long __pyx_t_25;
-  unsigned int __pyx_t_26;
-  unsigned int __pyx_t_27;
-  unsigned int __pyx_t_28;
-  unsigned int __pyx_t_29;
-  unsigned int __pyx_t_30;
-  unsigned int __pyx_t_31;
-  unsigned int __pyx_t_32;
-  unsigned int __pyx_t_33;
-  unsigned int __pyx_t_34;
-  unsigned int __pyx_t_35;
-  unsigned int __pyx_t_36;
-  unsigned int __pyx_t_37;
-  unsigned int __pyx_t_38;
-  unsigned int __pyx_t_39;
-  unsigned int __pyx_t_40;
-  unsigned int __pyx_t_41;
-  unsigned int __pyx_t_42;
-  unsigned int __pyx_t_43;
-  unsigned int __pyx_t_44;
-  unsigned int __pyx_t_45;
-  unsigned int __pyx_t_46;
-  unsigned int __pyx_t_47;
-  unsigned int __pyx_t_48;
-  unsigned int __pyx_t_49;
-  unsigned int __pyx_t_50;
-  unsigned int __pyx_t_51;
-  unsigned int __pyx_t_52;
-  unsigned int __pyx_t_53;
-  unsigned int __pyx_t_54;
-  unsigned int __pyx_t_55;
-  unsigned int __pyx_t_56;
-  unsigned int __pyx_t_57;
-  unsigned int __pyx_t_58;
-  unsigned int __pyx_t_59;
-  unsigned int __pyx_t_60;
-  unsigned int __pyx_t_61;
-  unsigned int __pyx_t_62;
-  unsigned int __pyx_t_63;
-  unsigned int __pyx_t_64;
-  unsigned int __pyx_t_65;
-  unsigned int __pyx_t_66;
-  unsigned int __pyx_t_67;
-  unsigned int __pyx_t_68;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("convolve3d_boundary_none", 0);
-  __pyx_pybuffer_fixed.pybuffer.buf = NULL;
-  __pyx_pybuffer_fixed.refcount = 0;
-  __pyx_pybuffernd_fixed.data = NULL;
-  __pyx_pybuffernd_fixed.rcbuffer = &__pyx_pybuffer_fixed;
-  __pyx_pybuffer_conv.pybuffer.buf = NULL;
-  __pyx_pybuffer_conv.refcount = 0;
-  __pyx_pybuffernd_conv.data = NULL;
-  __pyx_pybuffernd_conv.rcbuffer = &__pyx_pybuffer_conv;
-  __pyx_pybuffer_f.pybuffer.buf = NULL;
-  __pyx_pybuffer_f.refcount = 0;
-  __pyx_pybuffernd_f.data = NULL;
-  __pyx_pybuffernd_f.rcbuffer = &__pyx_pybuffer_f;
-  __pyx_pybuffer_g.pybuffer.buf = NULL;
-  __pyx_pybuffer_g.refcount = 0;
-  __pyx_pybuffernd_g.data = NULL;
-  __pyx_pybuffernd_g.rcbuffer = &__pyx_pybuffer_g;
-  {
-    __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_f.rcbuffer->pybuffer, (PyObject*)__pyx_v_f, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_pybuffernd_f.diminfo[0].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_f.diminfo[0].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_f.diminfo[1].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_f.diminfo[1].shape = __pyx_pybuffernd_f.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_f.diminfo[2].strides = __pyx_pybuffernd_f.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_f.diminfo[2].shape = __pyx_pybu [...]
-  {
-    __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_g.rcbuffer->pybuffer, (PyObject*)__pyx_v_g, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  __pyx_pybuffernd_g.diminfo[0].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_g.diminfo[0].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_g.diminfo[1].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_g.diminfo[1].shape = __pyx_pybuffernd_g.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_g.diminfo[2].strides = __pyx_pybuffernd_g.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_g.diminfo[2].shape = __pyx_pybu [...]
+ *         # Fix n_left and n_right for different join types
+ *         if jointype == 0:             # <<<<<<<<<<<<<<
+ *             pass
+ *         elif jointype == 1:
+ */
+      case 0:
+      break;
+
+      /* "astropy/table/_np_utils.pyx":58
+ *         if jointype == 0:
+ *             pass
+ *         elif jointype == 1:             # <<<<<<<<<<<<<<
+ *             if n_left == 0:
+ *                 masked = 1
+ */
+      case 1:
+
+      /* "astropy/table/_np_utils.pyx":59
+ *             pass
+ *         elif jointype == 1:
+ *             if n_left == 0:             # <<<<<<<<<<<<<<
+ *                 masked = 1
+ *                 n_left = 1
+ */
+      __pyx_t_5 = (__pyx_v_n_left == 0);
+      if (__pyx_t_5) {
+
+        /* "astropy/table/_np_utils.pyx":60
+ *         elif jointype == 1:
+ *             if n_left == 0:
+ *                 masked = 1             # <<<<<<<<<<<<<<
+ *                 n_left = 1
+ *             if n_right == 0:
+ */
+        __pyx_v_masked = 1;
+
+        /* "astropy/table/_np_utils.pyx":61
+ *             if n_left == 0:
+ *                 masked = 1
+ *                 n_left = 1             # <<<<<<<<<<<<<<
+ *             if n_right == 0:
+ *                 masked = 1
+ */
+        __pyx_v_n_left = 1;
+        goto __pyx_L9;
+      }
+      __pyx_L9:;
+
+      /* "astropy/table/_np_utils.pyx":62
+ *                 masked = 1
+ *                 n_left = 1
+ *             if n_right == 0:             # <<<<<<<<<<<<<<
+ *                 masked = 1
+ *                 n_right = 1
+ */
+      __pyx_t_5 = (__pyx_v_n_right == 0);
+      if (__pyx_t_5) {
+
+        /* "astropy/table/_np_utils.pyx":63
+ *                 n_left = 1
+ *             if n_right == 0:
+ *                 masked = 1             # <<<<<<<<<<<<<<
+ *                 n_right = 1
+ *         elif jointype == 2:
+ */
+        __pyx_v_masked = 1;
+
+        /* "astropy/table/_np_utils.pyx":64
+ *             if n_right == 0:
+ *                 masked = 1
+ *                 n_right = 1             # <<<<<<<<<<<<<<
+ *         elif jointype == 2:
+ *             if n_right == 0:
+ */
+        __pyx_v_n_right = 1;
+        goto __pyx_L10;
+      }
+      __pyx_L10:;
+      break;
+
+      /* "astropy/table/_np_utils.pyx":65
+ *                 masked = 1
+ *                 n_right = 1
+ *         elif jointype == 2:             # <<<<<<<<<<<<<<
+ *             if n_right == 0:
+ *                 masked = 1
+ */
+      case 2:
+
+      /* "astropy/table/_np_utils.pyx":66
+ *                 n_right = 1
+ *         elif jointype == 2:
+ *             if n_right == 0:             # <<<<<<<<<<<<<<
+ *                 masked = 1
+ *                 n_right = 1
+ */
+      __pyx_t_5 = (__pyx_v_n_right == 0);
+      if (__pyx_t_5) {
+
+        /* "astropy/table/_np_utils.pyx":67
+ *         elif jointype == 2:
+ *             if n_right == 0:
+ *                 masked = 1             # <<<<<<<<<<<<<<
+ *                 n_right = 1
+ *         elif jointype == 3:
+ */
+        __pyx_v_masked = 1;
+
+        /* "astropy/table/_np_utils.pyx":68
+ *             if n_right == 0:
+ *                 masked = 1
+ *                 n_right = 1             # <<<<<<<<<<<<<<
+ *         elif jointype == 3:
+ *             if n_left == 0:
+ */
+        __pyx_v_n_right = 1;
+        goto __pyx_L11;
+      }
+      __pyx_L11:;
+      break;
+
+      /* "astropy/table/_np_utils.pyx":69
+ *                 masked = 1
+ *                 n_right = 1
+ *         elif jointype == 3:             # <<<<<<<<<<<<<<
+ *             if n_left == 0:
+ *                 masked = 1
+ */
+      case 3:
+
+      /* "astropy/table/_np_utils.pyx":70
+ *                 n_right = 1
+ *         elif jointype == 3:
+ *             if n_left == 0:             # <<<<<<<<<<<<<<
+ *                 masked = 1
+ *                 n_left = 1
+ */
+      __pyx_t_5 = (__pyx_v_n_left == 0);
+      if (__pyx_t_5) {
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":155
- *                              np.ndarray[DTYPE_t, ndim=3] g):
+        /* "astropy/table/_np_utils.pyx":71
+ *         elif jointype == 3:
+ *             if n_left == 0:
+ *                 masked = 1             # <<<<<<<<<<<<<<
+ *                 n_left = 1
  * 
- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:             # <<<<<<<<<<<<<<
- *         raise ValueError("Convolution kernel must have odd dimensions")
+ */
+        __pyx_v_masked = 1;
+
+        /* "astropy/table/_np_utils.pyx":72
+ *             if n_left == 0:
+ *                 masked = 1
+ *                 n_left = 1             # <<<<<<<<<<<<<<
  * 
+ *         n_out += n_left * n_right
  */
-  __pyx_t_1 = (__Pyx_mod_long((__pyx_v_g->dimensions[0]), 2) != 1);
-  if (!__pyx_t_1) {
-    __pyx_t_2 = (__Pyx_mod_long((__pyx_v_g->dimensions[1]), 2) != 1);
-    if (!__pyx_t_2) {
-      __pyx_t_3 = (__Pyx_mod_long((__pyx_v_g->dimensions[2]), 2) != 1);
-      __pyx_t_4 = __pyx_t_3;
-    } else {
-      __pyx_t_4 = __pyx_t_2;
+        __pyx_v_n_left = 1;
+        goto __pyx_L12;
+      }
+      __pyx_L12:;
+      break;
     }
-    __pyx_t_2 = __pyx_t_4;
-  } else {
-    __pyx_t_2 = __pyx_t_1;
-  }
-  if (__pyx_t_2) {
 
-    /* "astropy/nddata/convolution/boundary_none.pyx":156
+    /* "astropy/table/_np_utils.pyx":74
+ *                 n_left = 1
  * 
- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
+ *         n_out += n_left * n_right             # <<<<<<<<<<<<<<
  * 
- *     assert f.dtype == DTYPE and g.dtype == DTYPE
+ *     cdef np.ndarray left_out = np.empty(n_out, dtype=DTYPE)
  */
-    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L3;
+    __pyx_v_n_out = (__pyx_v_n_out + (__pyx_v_n_left * __pyx_v_n_right));
   }
-  __pyx_L3:;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":158
- *         raise ValueError("Convolution kernel must have odd dimensions")
+  /* "astropy/table/_np_utils.pyx":76
+ *         n_out += n_left * n_right
  * 
- *     assert f.dtype == DTYPE and g.dtype == DTYPE             # <<<<<<<<<<<<<<
- * 
- *     cdef int nx = f.shape[0]
+ *     cdef np.ndarray left_out = np.empty(n_out, dtype=DTYPE)             # <<<<<<<<<<<<<<
+ *     cdef np.ndarray right_out = np.empty(n_out, dtype=DTYPE)
+ *     cdef np.ndarray left_mask = np.zeros(n_out, dtype=np.bool)
  */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_v_f), __pyx_n_s__dtype); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  if (__pyx_t_2) {
-    __pyx_t_7 = PyObject_GetAttr(((PyObject *)__pyx_v_g), __pyx_n_s__dtype); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_4 = __pyx_t_1;
-  } else {
-    __pyx_t_4 = __pyx_t_2;
-  }
-  if (unlikely(!__pyx_t_4)) {
-    PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  }
-  #endif
+  __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_9);
+  __pyx_t_10 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__empty); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_10);
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  __pyx_t_9 = PyInt_FromLong(__pyx_v_n_out); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_9);
+  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_11);
+  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9);
+  __Pyx_GIVEREF(__pyx_t_9);
+  __pyx_t_9 = 0;
+  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
+  __pyx_t_12 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_12);
+  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+  __pyx_t_12 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_12);
+  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
+  if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_left_out = ((PyArrayObject *)__pyx_t_12);
+  __pyx_t_12 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":160
- *     assert f.dtype == DTYPE and g.dtype == DTYPE
+  /* "astropy/table/_np_utils.pyx":77
  * 
- *     cdef int nx = f.shape[0]             # <<<<<<<<<<<<<<
- *     cdef int ny = f.shape[1]
- *     cdef int nz = f.shape[2]
+ *     cdef np.ndarray left_out = np.empty(n_out, dtype=DTYPE)
+ *     cdef np.ndarray right_out = np.empty(n_out, dtype=DTYPE)             # <<<<<<<<<<<<<<
+ *     cdef np.ndarray left_mask = np.zeros(n_out, dtype=np.bool)
+ *     cdef np.ndarray right_mask = np.zeros(n_out, dtype=np.bool)
  */
-  __pyx_v_nx = (__pyx_v_f->dimensions[0]);
+  __pyx_t_12 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_12);
+  __pyx_t_9 = PyObject_GetAttr(__pyx_t_12, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_9);
+  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+  __pyx_t_12 = PyInt_FromLong(__pyx_v_n_out); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_12);
+  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_11);
+  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12);
+  __Pyx_GIVEREF(__pyx_t_12);
+  __pyx_t_12 = 0;
+  __pyx_t_12 = PyDict_New(); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_12));
+  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_10);
+  if (PyDict_SetItem(__pyx_t_12, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  __pyx_t_10 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_12)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_10);
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_12)); __pyx_t_12 = 0;
+  if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_right_out = ((PyArrayObject *)__pyx_t_10);
+  __pyx_t_10 = 0;
+
+  /* "astropy/table/_np_utils.pyx":78
+ *     cdef np.ndarray left_out = np.empty(n_out, dtype=DTYPE)
+ *     cdef np.ndarray right_out = np.empty(n_out, dtype=DTYPE)
+ *     cdef np.ndarray left_mask = np.zeros(n_out, dtype=np.bool)             # <<<<<<<<<<<<<<
+ *     cdef np.ndarray right_mask = np.zeros(n_out, dtype=np.bool)
+ *     cdef np.ndarray left_idxs = np.empty(max_key_idxs, dtype=DTYPE)
+ */
+  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_10);
+  __pyx_t_12 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__zeros); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_12);
+  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  __pyx_t_10 = PyInt_FromLong(__pyx_v_n_out); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_10);
+  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_11);
+  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10);
+  __Pyx_GIVEREF(__pyx_t_10);
+  __pyx_t_10 = 0;
+  __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_10));
+  __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_9);
+  __pyx_t_13 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__bool); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_13);
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__dtype), __pyx_t_13) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+  __pyx_t_13 = PyObject_Call(__pyx_t_12, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_13);
+  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
+  if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_left_mask = ((PyArrayObject *)__pyx_t_13);
+  __pyx_t_13 = 0;
+
+  /* "astropy/table/_np_utils.pyx":79
+ *     cdef np.ndarray right_out = np.empty(n_out, dtype=DTYPE)
+ *     cdef np.ndarray left_mask = np.zeros(n_out, dtype=np.bool)
+ *     cdef np.ndarray right_mask = np.zeros(n_out, dtype=np.bool)             # <<<<<<<<<<<<<<
+ *     cdef np.ndarray left_idxs = np.empty(max_key_idxs, dtype=DTYPE)
+ *     cdef np.ndarray right_idxs = np.empty(max_key_idxs, dtype=DTYPE)
+ */
+  __pyx_t_13 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_13);
+  __pyx_t_10 = PyObject_GetAttr(__pyx_t_13, __pyx_n_s__zeros); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_10);
+  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+  __pyx_t_13 = PyInt_FromLong(__pyx_v_n_out); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_13);
+  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_11);
+  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_13);
+  __Pyx_GIVEREF(__pyx_t_13);
+  __pyx_t_13 = 0;
+  __pyx_t_13 = PyDict_New(); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_13));
+  __pyx_t_12 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_12);
+  __pyx_t_9 = PyObject_GetAttr(__pyx_t_12, __pyx_n_s__bool); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_9);
+  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+  if (PyDict_SetItem(__pyx_t_13, ((PyObject *)__pyx_n_s__dtype), __pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  __pyx_t_9 = PyObject_Call(__pyx_t_10, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_13)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_9);
+  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_13)); __pyx_t_13 = 0;
+  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_right_mask = ((PyArrayObject *)__pyx_t_9);
+  __pyx_t_9 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":161
+  /* "astropy/table/_np_utils.pyx":80
+ *     cdef np.ndarray left_mask = np.zeros(n_out, dtype=np.bool)
+ *     cdef np.ndarray right_mask = np.zeros(n_out, dtype=np.bool)
+ *     cdef np.ndarray left_idxs = np.empty(max_key_idxs, dtype=DTYPE)             # <<<<<<<<<<<<<<
+ *     cdef np.ndarray right_idxs = np.empty(max_key_idxs, dtype=DTYPE)
  * 
- *     cdef int nx = f.shape[0]
- *     cdef int ny = f.shape[1]             # <<<<<<<<<<<<<<
- *     cdef int nz = f.shape[2]
- *     cdef int nkx = g.shape[0]
  */
-  __pyx_v_ny = (__pyx_v_f->dimensions[1]);
+  __pyx_t_9 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_9);
+  __pyx_t_13 = PyObject_GetAttr(__pyx_t_9, __pyx_n_s__empty); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_13);
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  __pyx_t_9 = PyInt_FromLong(__pyx_v_max_key_idxs); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_9);
+  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_11);
+  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9);
+  __Pyx_GIVEREF(__pyx_t_9);
+  __pyx_t_9 = 0;
+  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
+  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_10);
+  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  __pyx_t_10 = PyObject_Call(__pyx_t_13, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_10);
+  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
+  if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_left_idxs = ((PyArrayObject *)__pyx_t_10);
+  __pyx_t_10 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":162
- *     cdef int nx = f.shape[0]
- *     cdef int ny = f.shape[1]
- *     cdef int nz = f.shape[2]             # <<<<<<<<<<<<<<
- *     cdef int nkx = g.shape[0]
- *     cdef int nky = g.shape[1]
+  /* "astropy/table/_np_utils.pyx":81
+ *     cdef np.ndarray right_mask = np.zeros(n_out, dtype=np.bool)
+ *     cdef np.ndarray left_idxs = np.empty(max_key_idxs, dtype=DTYPE)
+ *     cdef np.ndarray right_idxs = np.empty(max_key_idxs, dtype=DTYPE)             # <<<<<<<<<<<<<<
+ * 
+ *     i_out = 0
+ */
+  __pyx_t_10 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_10);
+  __pyx_t_9 = PyObject_GetAttr(__pyx_t_10, __pyx_n_s__empty); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_9);
+  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  __pyx_t_10 = PyInt_FromLong(__pyx_v_max_key_idxs); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_10);
+  __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_11);
+  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10);
+  __Pyx_GIVEREF(__pyx_t_10);
+  __pyx_t_10 = 0;
+  __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_10));
+  __pyx_t_13 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_13);
+  if (PyDict_SetItem(__pyx_t_10, ((PyObject *)__pyx_n_s__dtype), __pyx_t_13) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+  __pyx_t_13 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_11), ((PyObject *)__pyx_t_10)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_13);
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_11)); __pyx_t_11 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
+  if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_right_idxs = ((PyArrayObject *)__pyx_t_13);
+  __pyx_t_13 = 0;
+
+  /* "astropy/table/_np_utils.pyx":83
+ *     cdef np.ndarray right_idxs = np.empty(max_key_idxs, dtype=DTYPE)
+ * 
+ *     i_out = 0             # <<<<<<<<<<<<<<
+ *     for ii in range(idxs.shape[0] - 1):
+ *         idx0 = idxs[ii]
+ */
+  __pyx_v_i_out = 0;
+
+  /* "astropy/table/_np_utils.pyx":84
+ * 
+ *     i_out = 0
+ *     for ii in range(idxs.shape[0] - 1):             # <<<<<<<<<<<<<<
+ *         idx0 = idxs[ii]
+ *         idx1 = idxs[ii + 1]
+ */
+  __pyx_t_1 = ((__pyx_v_idxs->dimensions[0]) - 1);
+  for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
+    __pyx_v_ii = __pyx_t_2;
+
+    /* "astropy/table/_np_utils.pyx":85
+ *     i_out = 0
+ *     for ii in range(idxs.shape[0] - 1):
+ *         idx0 = idxs[ii]             # <<<<<<<<<<<<<<
+ *         idx1 = idxs[ii + 1]
+ * 
+ */
+    __pyx_t_6 = __pyx_v_ii;
+    __pyx_v_idx0 = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idxs.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_idxs.diminfo[0].strides));
+
+    /* "astropy/table/_np_utils.pyx":86
+ *     for ii in range(idxs.shape[0] - 1):
+ *         idx0 = idxs[ii]
+ *         idx1 = idxs[ii + 1]             # <<<<<<<<<<<<<<
+ * 
+ *         # Number of rows for this key
+ */
+    __pyx_t_14 = (__pyx_v_ii + 1);
+    __pyx_v_idx1 = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idxs.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_idxs.diminfo[0].strides));
+
+    /* "astropy/table/_np_utils.pyx":89
+ * 
+ *         # Number of rows for this key
+ *         n_left = 0             # <<<<<<<<<<<<<<
+ *         n_right = 0
+ *         for idx in range(idx0, idx1):
+ */
+    __pyx_v_n_left = 0;
+
+    /* "astropy/table/_np_utils.pyx":90
+ *         # Number of rows for this key
+ *         n_left = 0
+ *         n_right = 0             # <<<<<<<<<<<<<<
+ *         for idx in range(idx0, idx1):
+ *             i = idx_sort[idx]
+ */
+    __pyx_v_n_right = 0;
+
+    /* "astropy/table/_np_utils.pyx":91
+ *         n_left = 0
+ *         n_right = 0
+ *         for idx in range(idx0, idx1):             # <<<<<<<<<<<<<<
+ *             i = idx_sort[idx]
+ *             if i < len_left:
+ */
+    __pyx_t_7 = __pyx_v_idx1;
+    for (__pyx_t_15 = __pyx_v_idx0; __pyx_t_15 < __pyx_t_7; __pyx_t_15+=1) {
+      __pyx_v_idx = __pyx_t_15;
+
+      /* "astropy/table/_np_utils.pyx":92
+ *         n_right = 0
+ *         for idx in range(idx0, idx1):
+ *             i = idx_sort[idx]             # <<<<<<<<<<<<<<
+ *             if i < len_left:
+ *                 left_idxs[n_left] = i
+ */
+      __pyx_t_16 = __pyx_v_idx;
+      __pyx_v_i = (*__Pyx_BufPtrStrided1d(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t *, __pyx_pybuffernd_idx_sort.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_idx_sort.diminfo[0].strides));
+
+      /* "astropy/table/_np_utils.pyx":93
+ *         for idx in range(idx0, idx1):
+ *             i = idx_sort[idx]
+ *             if i < len_left:             # <<<<<<<<<<<<<<
+ *                 left_idxs[n_left] = i
+ *                 n_left += 1
+ */
+      __pyx_t_5 = (__pyx_v_i < __pyx_v_len_left);
+      if (__pyx_t_5) {
+
+        /* "astropy/table/_np_utils.pyx":94
+ *             i = idx_sort[idx]
+ *             if i < len_left:
+ *                 left_idxs[n_left] = i             # <<<<<<<<<<<<<<
+ *                 n_left += 1
+ *             else:
  */
-  __pyx_v_nz = (__pyx_v_f->dimensions[2]);
+        __pyx_t_13 = __Pyx_PyInt_to_py_npy_long(__pyx_v_i); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_13);
+        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_left_idxs), __pyx_v_n_left, __pyx_t_13, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":163
- *     cdef int ny = f.shape[1]
- *     cdef int nz = f.shape[2]
- *     cdef int nkx = g.shape[0]             # <<<<<<<<<<<<<<
- *     cdef int nky = g.shape[1]
- *     cdef int nkz = g.shape[2]
+        /* "astropy/table/_np_utils.pyx":95
+ *             if i < len_left:
+ *                 left_idxs[n_left] = i
+ *                 n_left += 1             # <<<<<<<<<<<<<<
+ *             else:
+ *                 right_idxs[n_right] = i - len_left
  */
-  __pyx_v_nkx = (__pyx_v_g->dimensions[0]);
+        __pyx_v_n_left = (__pyx_v_n_left + 1);
+        goto __pyx_L17;
+      }
+      /*else*/ {
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":164
- *     cdef int nz = f.shape[2]
- *     cdef int nkx = g.shape[0]
- *     cdef int nky = g.shape[1]             # <<<<<<<<<<<<<<
- *     cdef int nkz = g.shape[2]
- *     cdef int wkx = nkx // 2
+        /* "astropy/table/_np_utils.pyx":97
+ *                 n_left += 1
+ *             else:
+ *                 right_idxs[n_right] = i - len_left             # <<<<<<<<<<<<<<
+ *                 n_right += 1
+ * 
  */
-  __pyx_v_nky = (__pyx_v_g->dimensions[1]);
+        __pyx_t_13 = __Pyx_PyInt_to_py_npy_long((__pyx_v_i - __pyx_v_len_left)); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_13);
+        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_right_idxs), __pyx_v_n_right, __pyx_t_13, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":165
- *     cdef int nkx = g.shape[0]
- *     cdef int nky = g.shape[1]
- *     cdef int nkz = g.shape[2]             # <<<<<<<<<<<<<<
- *     cdef int wkx = nkx // 2
- *     cdef int wky = nky // 2
+        /* "astropy/table/_np_utils.pyx":98
+ *             else:
+ *                 right_idxs[n_right] = i - len_left
+ *                 n_right += 1             # <<<<<<<<<<<<<<
+ * 
+ *         if jointype == 0:
  */
-  __pyx_v_nkz = (__pyx_v_g->dimensions[2]);
+        __pyx_v_n_right = (__pyx_v_n_right + 1);
+      }
+      __pyx_L17:;
+    }
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":166
- *     cdef int nky = g.shape[1]
- *     cdef int nkz = g.shape[2]
- *     cdef int wkx = nkx // 2             # <<<<<<<<<<<<<<
- *     cdef int wky = nky // 2
- *     cdef int wkz = nkz // 2
+    /* "astropy/table/_np_utils.pyx":113
+ *                 right_idxs[0] = -1
+ *                 n_right = 1
+ *         elif jointype == 3:             # <<<<<<<<<<<<<<
+ *             if n_left == 0:
+ *                 left_idxs[0] = -1
  */
-  __pyx_v_wkx = __Pyx_div_long(__pyx_v_nkx, 2);
+    switch (__pyx_v_jointype) {
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":167
- *     cdef int nkz = g.shape[2]
- *     cdef int wkx = nkx // 2
- *     cdef int wky = nky // 2             # <<<<<<<<<<<<<<
- *     cdef int wkz = nkz // 2
+      /* "astropy/table/_np_utils.pyx":100
+ *                 n_right += 1
  * 
+ *         if jointype == 0:             # <<<<<<<<<<<<<<
+ *             pass
+ *         elif jointype == 1:
+ */
+      case 0:
+      break;
+
+      /* "astropy/table/_np_utils.pyx":102
+ *         if jointype == 0:
+ *             pass
+ *         elif jointype == 1:             # <<<<<<<<<<<<<<
+ *             if n_left == 0:
+ *                 left_idxs[0] = -1
+ */
+      case 1:
+
+      /* "astropy/table/_np_utils.pyx":103
+ *             pass
+ *         elif jointype == 1:
+ *             if n_left == 0:             # <<<<<<<<<<<<<<
+ *                 left_idxs[0] = -1
+ *                 n_left = 1
+ */
+      __pyx_t_5 = (__pyx_v_n_left == 0);
+      if (__pyx_t_5) {
+
+        /* "astropy/table/_np_utils.pyx":104
+ *         elif jointype == 1:
+ *             if n_left == 0:
+ *                 left_idxs[0] = -1             # <<<<<<<<<<<<<<
+ *                 n_left = 1
+ *             if n_right == 0:
+ */
+        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_left_idxs), 0, __pyx_int_neg_1, sizeof(long), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+        /* "astropy/table/_np_utils.pyx":105
+ *             if n_left == 0:
+ *                 left_idxs[0] = -1
+ *                 n_left = 1             # <<<<<<<<<<<<<<
+ *             if n_right == 0:
+ *                 right_idxs[0] = -1
+ */
+        __pyx_v_n_left = 1;
+        goto __pyx_L18;
+      }
+      __pyx_L18:;
+
+      /* "astropy/table/_np_utils.pyx":106
+ *                 left_idxs[0] = -1
+ *                 n_left = 1
+ *             if n_right == 0:             # <<<<<<<<<<<<<<
+ *                 right_idxs[0] = -1
+ *                 n_right = 1
+ */
+      __pyx_t_5 = (__pyx_v_n_right == 0);
+      if (__pyx_t_5) {
+
+        /* "astropy/table/_np_utils.pyx":107
+ *                 n_left = 1
+ *             if n_right == 0:
+ *                 right_idxs[0] = -1             # <<<<<<<<<<<<<<
+ *                 n_right = 1
+ *         elif jointype == 2:
+ */
+        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_right_idxs), 0, __pyx_int_neg_1, sizeof(long), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+        /* "astropy/table/_np_utils.pyx":108
+ *             if n_right == 0:
+ *                 right_idxs[0] = -1
+ *                 n_right = 1             # <<<<<<<<<<<<<<
+ *         elif jointype == 2:
+ *             if n_right == 0:
+ */
+        __pyx_v_n_right = 1;
+        goto __pyx_L19;
+      }
+      __pyx_L19:;
+      break;
+
+      /* "astropy/table/_np_utils.pyx":109
+ *                 right_idxs[0] = -1
+ *                 n_right = 1
+ *         elif jointype == 2:             # <<<<<<<<<<<<<<
+ *             if n_right == 0:
+ *                 right_idxs[0] = -1
+ */
+      case 2:
+
+      /* "astropy/table/_np_utils.pyx":110
+ *                 n_right = 1
+ *         elif jointype == 2:
+ *             if n_right == 0:             # <<<<<<<<<<<<<<
+ *                 right_idxs[0] = -1
+ *                 n_right = 1
+ */
+      __pyx_t_5 = (__pyx_v_n_right == 0);
+      if (__pyx_t_5) {
+
+        /* "astropy/table/_np_utils.pyx":111
+ *         elif jointype == 2:
+ *             if n_right == 0:
+ *                 right_idxs[0] = -1             # <<<<<<<<<<<<<<
+ *                 n_right = 1
+ *         elif jointype == 3:
+ */
+        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_right_idxs), 0, __pyx_int_neg_1, sizeof(long), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+        /* "astropy/table/_np_utils.pyx":112
+ *             if n_right == 0:
+ *                 right_idxs[0] = -1
+ *                 n_right = 1             # <<<<<<<<<<<<<<
+ *         elif jointype == 3:
+ *             if n_left == 0:
+ */
+        __pyx_v_n_right = 1;
+        goto __pyx_L20;
+      }
+      __pyx_L20:;
+      break;
+
+      /* "astropy/table/_np_utils.pyx":113
+ *                 right_idxs[0] = -1
+ *                 n_right = 1
+ *         elif jointype == 3:             # <<<<<<<<<<<<<<
+ *             if n_left == 0:
+ *                 left_idxs[0] = -1
+ */
+      case 3:
+
+      /* "astropy/table/_np_utils.pyx":114
+ *                 n_right = 1
+ *         elif jointype == 3:
+ *             if n_left == 0:             # <<<<<<<<<<<<<<
+ *                 left_idxs[0] = -1
+ *                 n_left = 1
  */
-  __pyx_v_wky = __Pyx_div_long(__pyx_v_nky, 2);
+      __pyx_t_5 = (__pyx_v_n_left == 0);
+      if (__pyx_t_5) {
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":168
- *     cdef int wkx = nkx // 2
- *     cdef int wky = nky // 2
- *     cdef int wkz = nkz // 2             # <<<<<<<<<<<<<<
+        /* "astropy/table/_np_utils.pyx":115
+ *         elif jointype == 3:
+ *             if n_left == 0:
+ *                 left_idxs[0] = -1             # <<<<<<<<<<<<<<
+ *                 n_left = 1
  * 
- *     # The following need to be set to zeros rather than empty because the
  */
-  __pyx_v_wkz = __Pyx_div_long(__pyx_v_nkz, 2);
+        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_left_idxs), 0, __pyx_int_neg_1, sizeof(long), PyInt_FromLong) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":172
- *     # The following need to be set to zeros rather than empty because the
- *     # boundary does not get reset.
- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.zeros([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.zeros([nx, ny, nz], dtype=DTYPE)
+        /* "astropy/table/_np_utils.pyx":116
+ *             if n_left == 0:
+ *                 left_idxs[0] = -1
+ *                 n_left = 1             # <<<<<<<<<<<<<<
  * 
+ *         for i_left in range(n_left):
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__zeros); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_9);
-  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
-  PyList_SET_ITEM(__pyx_t_9, 2, __pyx_t_8);
-  __Pyx_GIVEREF(__pyx_t_8);
-  __pyx_t_5 = 0;
-  __pyx_t_7 = 0;
-  __pyx_t_8 = 0;
-  __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_9));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_9));
-  __pyx_t_9 = 0;
-  __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_9));
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  if (PyDict_SetItem(__pyx_t_9, ((PyObject *)__pyx_n_s__dtype), __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_8), ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
-  if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_10 = ((PyArrayObject *)__pyx_t_7);
-  {
-    __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
-      __pyx_v_fixed = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    } else {__pyx_pybuffernd_fixed.diminfo[0].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fixed.diminfo[0].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fixed.diminfo[1].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fixed.diminfo[1].shape = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_fixed.diminfo[2].strides = __pyx_pybuffernd_fixed.rcbuffer->pybuffer.strides[2] [...]
+        __pyx_v_n_left = 1;
+        goto __pyx_L21;
+      }
+      __pyx_L21:;
+      break;
     }
-  }
-  __pyx_t_10 = 0;
-  __pyx_v_fixed = ((PyArrayObject *)__pyx_t_7);
-  __pyx_t_7 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":173
- *     # boundary does not get reset.
- *     cdef np.ndarray[DTYPE_t, ndim=3] fixed = np.zeros([nx, ny, nz], dtype=DTYPE)
- *     cdef np.ndarray[DTYPE_t, ndim=3] conv = np.zeros([nx, ny, nz], dtype=DTYPE)             # <<<<<<<<<<<<<<
+    /* "astropy/table/_np_utils.pyx":118
+ *                 n_left = 1
  * 
- *     cdef unsigned int i, j, k, ii, jj, kk
+ *         for i_left in range(n_left):             # <<<<<<<<<<<<<<
+ *             for i_right in range(n_right):
+ *                 idx = left_idxs[i_left]
  */
-  __pyx_t_7 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = PyObject_GetAttr(__pyx_t_7, __pyx_n_s__zeros); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_9);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  __pyx_t_7 = PyInt_FromLong(__pyx_v_nx); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = PyInt_FromLong(__pyx_v_ny); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_nz); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_7);
-  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_8);
-  __Pyx_GIVEREF(__pyx_t_8);
-  PyList_SET_ITEM(__pyx_t_5, 2, __pyx_t_6);
-  __Pyx_GIVEREF(__pyx_t_6);
-  __pyx_t_7 = 0;
-  __pyx_t_8 = 0;
-  __pyx_t_6 = 0;
-  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_t_5));
-  __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
-  __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_8 = __Pyx_GetName(__pyx_m, __pyx_n_s__DTYPE); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-  __pyx_t_8 = PyObject_Call(__pyx_t_9, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_11 = ((PyArrayObject *)__pyx_t_8);
-  {
-    __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_conv.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
-      __pyx_v_conv = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    } else {__pyx_pybuffernd_conv.diminfo[0].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_conv.diminfo[0].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_conv.diminfo[1].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_conv.diminfo[1].shape = __pyx_pybuffernd_conv.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_conv.diminfo[2].strides = __pyx_pybuffernd_conv.rcbuffer->pybuffer.strides[2]; __pyx_py [...]
-    }
-  }
-  __pyx_t_11 = 0;
-  __pyx_v_conv = ((PyArrayObject *)__pyx_t_8);
-  __pyx_t_8 = 0;
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":183
- *     # Need a first pass to replace NaN values with value convolved from
- *     # neighboring values
- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
- *         for j in range(wky, ny - wky):
- *             for k in range(wkz, nz - wkz):
- */
-  __pyx_t_12 = (__pyx_v_nx - __pyx_v_wkx);
-  for (__pyx_t_13 = __pyx_v_wkx; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
-    __pyx_v_i = __pyx_t_13;
-
-    /* "astropy/nddata/convolution/boundary_none.pyx":184
- *     # neighboring values
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):             # <<<<<<<<<<<<<<
- *             for k in range(wkz, nz - wkz):
- *                 if npy_isnan(f[i, j, k]):
- */
-    __pyx_t_14 = (__pyx_v_ny - __pyx_v_wky);
-    for (__pyx_t_15 = __pyx_v_wky; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
-      __pyx_v_j = __pyx_t_15;
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":185
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):
- *             for k in range(wkz, nz - wkz):             # <<<<<<<<<<<<<<
- *                 if npy_isnan(f[i, j, k]):
- *                     top = 0.
- */
-      __pyx_t_16 = (__pyx_v_nz - __pyx_v_wkz);
-      for (__pyx_t_17 = __pyx_v_wkz; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
-        __pyx_v_k = __pyx_t_17;
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":186
- *         for j in range(wky, ny - wky):
- *             for k in range(wkz, nz - wkz):
- *                 if npy_isnan(f[i, j, k]):             # <<<<<<<<<<<<<<
- *                     top = 0.
- *                     bot = 0.
- */
-        __pyx_t_18 = __pyx_v_i;
-        __pyx_t_19 = __pyx_v_j;
-        __pyx_t_20 = __pyx_v_k;
-        __pyx_t_4 = npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_f.diminfo[2].strides)));
-        if (__pyx_t_4) {
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":187
- *             for k in range(wkz, nz - wkz):
- *                 if npy_isnan(f[i, j, k]):
- *                     top = 0.             # <<<<<<<<<<<<<<
- *                     bot = 0.
- *                     for ii in range(i - wkx, i + wkx + 1):
- */
-          __pyx_v_top = 0.;
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":188
- *                 if npy_isnan(f[i, j, k]):
- *                     top = 0.
- *                     bot = 0.             # <<<<<<<<<<<<<<
- *                     for ii in range(i - wkx, i + wkx + 1):
- *                         for jj in range(j - wky, j + wky + 1):
- */
-          __pyx_v_bot = 0.;
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":189
- *                     top = 0.
- *                     bot = 0.
- *                     for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
- *                         for jj in range(j - wky, j + wky + 1):
- *                             for kk in range(k - wkz, k + wkz + 1):
- */
-          __pyx_t_21 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-          for (__pyx_t_22 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
-            __pyx_v_ii = __pyx_t_22;
-
-            /* "astropy/nddata/convolution/boundary_none.pyx":190
- *                     bot = 0.
- *                     for ii in range(i - wkx, i + wkx + 1):
- *                         for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
- *                             for kk in range(k - wkz, k + wkz + 1):
- *                                 val = f[ii, jj, kk]
- */
-            __pyx_t_23 = ((__pyx_v_j + __pyx_v_wky) + 1);
-            for (__pyx_t_24 = (__pyx_v_j - __pyx_v_wky); __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
-              __pyx_v_jj = __pyx_t_24;
-
-              /* "astropy/nddata/convolution/boundary_none.pyx":191
- *                     for ii in range(i - wkx, i + wkx + 1):
- *                         for jj in range(j - wky, j + wky + 1):
- *                             for kk in range(k - wkz, k + wkz + 1):             # <<<<<<<<<<<<<<
- *                                 val = f[ii, jj, kk]
- *                                 if not npy_isnan(val):
- */
-              __pyx_t_25 = ((__pyx_v_k + __pyx_v_wkz) + 1);
-              for (__pyx_t_26 = (__pyx_v_k - __pyx_v_wkz); __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
-                __pyx_v_kk = __pyx_t_26;
-
-                /* "astropy/nddata/convolution/boundary_none.pyx":192
- *                         for jj in range(j - wky, j + wky + 1):
- *                             for kk in range(k - wkz, k + wkz + 1):
- *                                 val = f[ii, jj, kk]             # <<<<<<<<<<<<<<
- *                                 if not npy_isnan(val):
- *                                     ker = g[<unsigned int>(wkx + ii - i),
- */
-                __pyx_t_27 = __pyx_v_ii;
-                __pyx_t_28 = __pyx_v_jj;
-                __pyx_t_29 = __pyx_v_kk;
-                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_f.diminfo[0].strides, __pyx_t_28, __pyx_pybuffernd_f.diminfo[1].strides, __pyx_t_29, __pyx_pybuffernd_f.diminfo[2].strides));
-
-                /* "astropy/nddata/convolution/boundary_none.pyx":193
- *                             for kk in range(k - wkz, k + wkz + 1):
- *                                 val = f[ii, jj, kk]
- *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
- *                                     ker = g[<unsigned int>(wkx + ii - i),
- *                                             <unsigned int>(wky + jj - j),
- */
-                __pyx_t_4 = (!npy_isnan(__pyx_v_val));
-                if (__pyx_t_4) {
-
-                  /* "astropy/nddata/convolution/boundary_none.pyx":196
- *                                     ker = g[<unsigned int>(wkx + ii - i),
- *                                             <unsigned int>(wky + jj - j),
- *                                             <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
- *                                     top += val * ker
- *                                     bot += ker
- */
-                  __pyx_t_30 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-                  __pyx_t_31 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-                  __pyx_t_32 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
-                  __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_32, __pyx_pybuffernd_g.diminfo[2].strides));
-
-                  /* "astropy/nddata/convolution/boundary_none.pyx":197
- *                                             <unsigned int>(wky + jj - j),
- *                                             <unsigned int>(wkz + kk - k)]
- *                                     top += val * ker             # <<<<<<<<<<<<<<
- *                                     bot += ker
- *                     if bot != 0.:
- */
-                  __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
-
-                  /* "astropy/nddata/convolution/boundary_none.pyx":198
- *                                             <unsigned int>(wkz + kk - k)]
- *                                     top += val * ker
- *                                     bot += ker             # <<<<<<<<<<<<<<
- *                     if bot != 0.:
- *                         fixed[i, j, k] = top / bot
- */
-                  __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
-                  goto __pyx_L17;
-                }
-                __pyx_L17:;
-              }
-            }
-          }
+    __pyx_t_7 = __pyx_v_n_left;
+    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_7; __pyx_t_15+=1) {
+      __pyx_v_i_left = __pyx_t_15;
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":199
- *                                     top += val * ker
- *                                     bot += ker
- *                     if bot != 0.:             # <<<<<<<<<<<<<<
- *                         fixed[i, j, k] = top / bot
- *                     else:
- */
-          __pyx_t_4 = (__pyx_v_bot != 0.);
-          if (__pyx_t_4) {
-
-            /* "astropy/nddata/convolution/boundary_none.pyx":200
- *                                     bot += ker
- *                     if bot != 0.:
- *                         fixed[i, j, k] = top / bot             # <<<<<<<<<<<<<<
- *                     else:
- *                         fixed[i, j, k] = f[i, j, k]
- */
-            if (unlikely(__pyx_v_bot == 0)) {
-              PyErr_Format(PyExc_ZeroDivisionError, "float division");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            }
-            __pyx_t_22 = __pyx_v_i;
-            __pyx_t_24 = __pyx_v_j;
-            __pyx_t_26 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_26, __pyx_pybuffernd_fixed.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
-            goto __pyx_L18;
-          }
-          /*else*/ {
+      /* "astropy/table/_np_utils.pyx":119
+ * 
+ *         for i_left in range(n_left):
+ *             for i_right in range(n_right):             # <<<<<<<<<<<<<<
+ *                 idx = left_idxs[i_left]
+ *                 if idx < 0:
+ */
+      __pyx_t_17 = __pyx_v_n_right;
+      for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
+        __pyx_v_i_right = __pyx_t_18;
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":202
- *                         fixed[i, j, k] = top / bot
- *                     else:
- *                         fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
- *                 else:
- *                     fixed[i, j, k] = f[i, j, k]
- */
-            __pyx_t_33 = __pyx_v_i;
-            __pyx_t_34 = __pyx_v_j;
-            __pyx_t_35 = __pyx_v_k;
-            __pyx_t_36 = __pyx_v_i;
-            __pyx_t_37 = __pyx_v_j;
-            __pyx_t_38 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_38, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_f.diminfo[0].st [...]
-          }
-          __pyx_L18:;
-          goto __pyx_L10;
-        }
-        /*else*/ {
+        /* "astropy/table/_np_utils.pyx":120
+ *         for i_left in range(n_left):
+ *             for i_right in range(n_right):
+ *                 idx = left_idxs[i_left]             # <<<<<<<<<<<<<<
+ *                 if idx < 0:
+ *                     idx = 0
+ */
+        __pyx_t_13 = __Pyx_GetItemInt(((PyObject *)__pyx_v_left_idxs), __pyx_v_i_left, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long); if (!__pyx_t_13) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_13);
+        __pyx_t_19 = __Pyx_PyInt_from_py_npy_long(__pyx_t_13); if (unlikely((__pyx_t_19 == (npy_long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        __pyx_v_idx = __pyx_t_19;
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":204
- *                         fixed[i, j, k] = f[i, j, k]
- *                 else:
- *                     fixed[i, j, k] = f[i, j, k]             # <<<<<<<<<<<<<<
+        /* "astropy/table/_np_utils.pyx":121
+ *             for i_right in range(n_right):
+ *                 idx = left_idxs[i_left]
+ *                 if idx < 0:             # <<<<<<<<<<<<<<
+ *                     idx = 0
+ *                     left_mask[i_out] = 1
+ */
+        __pyx_t_5 = (__pyx_v_idx < 0);
+        if (__pyx_t_5) {
+
+          /* "astropy/table/_np_utils.pyx":122
+ *                 idx = left_idxs[i_left]
+ *                 if idx < 0:
+ *                     idx = 0             # <<<<<<<<<<<<<<
+ *                     left_mask[i_out] = 1
+ *                 left_out[i_out] = idx
+ */
+          __pyx_v_idx = 0;
+
+          /* "astropy/table/_np_utils.pyx":123
+ *                 if idx < 0:
+ *                     idx = 0
+ *                     left_mask[i_out] = 1             # <<<<<<<<<<<<<<
+ *                 left_out[i_out] = idx
  * 
- *     # Now run the proper convolution
  */
-          __pyx_t_39 = __pyx_v_i;
-          __pyx_t_40 = __pyx_v_j;
-          __pyx_t_41 = __pyx_v_k;
-          __pyx_t_42 = __pyx_v_i;
-          __pyx_t_43 = __pyx_v_j;
-          __pyx_t_44 = __pyx_v_k;
-          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_44, __pyx_pybuffernd_fixed.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_f.rcbuffer->pybuffer.buf, __pyx_t_39, __pyx_pybuffernd_f.diminfo[0].stri [...]
+          if (__Pyx_SetItemInt(((PyObject *)__pyx_v_left_mask), __pyx_v_i_out, __pyx_int_1, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          goto __pyx_L26;
         }
-        __pyx_L10:;
-      }
-    }
-  }
+        __pyx_L26:;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":207
- * 
- *     # Now run the proper convolution
- *     for i in range(wkx, nx - wkx):             # <<<<<<<<<<<<<<
- *         for j in range(wky, ny - wky):
- *             for k in range(wkz, nz - wkz):
- */
-  __pyx_t_12 = (__pyx_v_nx - __pyx_v_wkx);
-  for (__pyx_t_13 = __pyx_v_wkx; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
-    __pyx_v_i = __pyx_t_13;
-
-    /* "astropy/nddata/convolution/boundary_none.pyx":208
- *     # Now run the proper convolution
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):             # <<<<<<<<<<<<<<
- *             for k in range(wkz, nz - wkz):
- *                 if not npy_isnan(fixed[i, j, k]):
- */
-    __pyx_t_14 = (__pyx_v_ny - __pyx_v_wky);
-    for (__pyx_t_15 = __pyx_v_wky; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
-      __pyx_v_j = __pyx_t_15;
-
-      /* "astropy/nddata/convolution/boundary_none.pyx":209
- *     for i in range(wkx, nx - wkx):
- *         for j in range(wky, ny - wky):
- *             for k in range(wkz, nz - wkz):             # <<<<<<<<<<<<<<
- *                 if not npy_isnan(fixed[i, j, k]):
- *                     top = 0.
- */
-      __pyx_t_16 = (__pyx_v_nz - __pyx_v_wkz);
-      for (__pyx_t_17 = __pyx_v_wkz; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
-        __pyx_v_k = __pyx_t_17;
-
-        /* "astropy/nddata/convolution/boundary_none.pyx":210
- *         for j in range(wky, ny - wky):
- *             for k in range(wkz, nz - wkz):
- *                 if not npy_isnan(fixed[i, j, k]):             # <<<<<<<<<<<<<<
- *                     top = 0.
- *                     bot = 0.
- */
-        __pyx_t_45 = __pyx_v_i;
-        __pyx_t_46 = __pyx_v_j;
-        __pyx_t_47 = __pyx_v_k;
-        __pyx_t_4 = (!npy_isnan((*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_47, __pyx_pybuffernd_fixed.diminfo[2].strides))));
-        if (__pyx_t_4) {
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":211
- *             for k in range(wkz, nz - wkz):
- *                 if not npy_isnan(fixed[i, j, k]):
- *                     top = 0.             # <<<<<<<<<<<<<<
- *                     bot = 0.
- *                     for ii in range(i - wkx, i + wkx + 1):
- */
-          __pyx_v_top = 0.;
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":212
- *                 if not npy_isnan(fixed[i, j, k]):
- *                     top = 0.
- *                     bot = 0.             # <<<<<<<<<<<<<<
- *                     for ii in range(i - wkx, i + wkx + 1):
- *                         for jj in range(j - wky, j + wky + 1):
- */
-          __pyx_v_bot = 0.;
-
-          /* "astropy/nddata/convolution/boundary_none.pyx":213
- *                     top = 0.
- *                     bot = 0.
- *                     for ii in range(i - wkx, i + wkx + 1):             # <<<<<<<<<<<<<<
- *                         for jj in range(j - wky, j + wky + 1):
- *                             for kk in range(k - wkz, k + wkz + 1):
- */
-          __pyx_t_21 = ((__pyx_v_i + __pyx_v_wkx) + 1);
-          for (__pyx_t_48 = (__pyx_v_i - __pyx_v_wkx); __pyx_t_48 < __pyx_t_21; __pyx_t_48+=1) {
-            __pyx_v_ii = __pyx_t_48;
-
-            /* "astropy/nddata/convolution/boundary_none.pyx":214
- *                     bot = 0.
- *                     for ii in range(i - wkx, i + wkx + 1):
- *                         for jj in range(j - wky, j + wky + 1):             # <<<<<<<<<<<<<<
- *                             for kk in range(k - wkz, k + wkz + 1):
- *                                 val = fixed[ii, jj, kk]
- */
-            __pyx_t_23 = ((__pyx_v_j + __pyx_v_wky) + 1);
-            for (__pyx_t_49 = (__pyx_v_j - __pyx_v_wky); __pyx_t_49 < __pyx_t_23; __pyx_t_49+=1) {
-              __pyx_v_jj = __pyx_t_49;
-
-              /* "astropy/nddata/convolution/boundary_none.pyx":215
- *                     for ii in range(i - wkx, i + wkx + 1):
- *                         for jj in range(j - wky, j + wky + 1):
- *                             for kk in range(k - wkz, k + wkz + 1):             # <<<<<<<<<<<<<<
- *                                 val = fixed[ii, jj, kk]
- *                                 ker = g[<unsigned int>(wkx + ii - i),
- */
-              __pyx_t_25 = ((__pyx_v_k + __pyx_v_wkz) + 1);
-              for (__pyx_t_50 = (__pyx_v_k - __pyx_v_wkz); __pyx_t_50 < __pyx_t_25; __pyx_t_50+=1) {
-                __pyx_v_kk = __pyx_t_50;
-
-                /* "astropy/nddata/convolution/boundary_none.pyx":216
- *                         for jj in range(j - wky, j + wky + 1):
- *                             for kk in range(k - wkz, k + wkz + 1):
- *                                 val = fixed[ii, jj, kk]             # <<<<<<<<<<<<<<
- *                                 ker = g[<unsigned int>(wkx + ii - i),
- *                                         <unsigned int>(wky + jj - j),
- */
-                __pyx_t_51 = __pyx_v_ii;
-                __pyx_t_52 = __pyx_v_jj;
-                __pyx_t_53 = __pyx_v_kk;
-                __pyx_v_val = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_51, __pyx_pybuffernd_fixed.diminfo[0].strides, __pyx_t_52, __pyx_pybuffernd_fixed.diminfo[1].strides, __pyx_t_53, __pyx_pybuffernd_fixed.diminfo[2].strides));
-
-                /* "astropy/nddata/convolution/boundary_none.pyx":219
- *                                 ker = g[<unsigned int>(wkx + ii - i),
- *                                         <unsigned int>(wky + jj - j),
- *                                         <unsigned int>(wkz + kk - k)]             # <<<<<<<<<<<<<<
- *                                 if not npy_isnan(val):
- *                                     top += val * ker
- */
-                __pyx_t_54 = ((unsigned int)((__pyx_v_wkx + __pyx_v_ii) - __pyx_v_i));
-                __pyx_t_55 = ((unsigned int)((__pyx_v_wky + __pyx_v_jj) - __pyx_v_j));
-                __pyx_t_56 = ((unsigned int)((__pyx_v_wkz + __pyx_v_kk) - __pyx_v_k));
-                __pyx_v_ker = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_g.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_g.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_g.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_g.diminfo[2].strides));
-
-                /* "astropy/nddata/convolution/boundary_none.pyx":220
- *                                         <unsigned int>(wky + jj - j),
- *                                         <unsigned int>(wkz + kk - k)]
- *                                 if not npy_isnan(val):             # <<<<<<<<<<<<<<
- *                                     top += val * ker
- *                                     bot += ker
- */
-                __pyx_t_4 = (!npy_isnan(__pyx_v_val));
-                if (__pyx_t_4) {
-
-                  /* "astropy/nddata/convolution/boundary_none.pyx":221
- *                                         <unsigned int>(wkz + kk - k)]
- *                                 if not npy_isnan(val):
- *                                     top += val * ker             # <<<<<<<<<<<<<<
- *                                     bot += ker
- *                     if bot != 0:
- */
-                  __pyx_v_top = (__pyx_v_top + (__pyx_v_val * __pyx_v_ker));
-
-                  /* "astropy/nddata/convolution/boundary_none.pyx":222
- *                                 if not npy_isnan(val):
- *                                     top += val * ker
- *                                     bot += ker             # <<<<<<<<<<<<<<
- *                     if bot != 0:
- *                         conv[i, j, k] = top / bot
- */
-                  __pyx_v_bot = (__pyx_v_bot + __pyx_v_ker);
-                  goto __pyx_L32;
-                }
-                __pyx_L32:;
-              }
-            }
-          }
+        /* "astropy/table/_np_utils.pyx":124
+ *                     idx = 0
+ *                     left_mask[i_out] = 1
+ *                 left_out[i_out] = idx             # <<<<<<<<<<<<<<
+ * 
+ *                 idx = right_idxs[i_right]
+ */
+        __pyx_t_13 = __Pyx_PyInt_to_py_npy_long(__pyx_v_idx); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_13);
+        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_left_out), __pyx_v_i_out, __pyx_t_13, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":223
- *                                     top += val * ker
- *                                     bot += ker
- *                     if bot != 0:             # <<<<<<<<<<<<<<
- *                         conv[i, j, k] = top / bot
- *                     else:
- */
-          __pyx_t_4 = (__pyx_v_bot != 0.0);
-          if (__pyx_t_4) {
-
-            /* "astropy/nddata/convolution/boundary_none.pyx":224
- *                                     bot += ker
- *                     if bot != 0:
- *                         conv[i, j, k] = top / bot             # <<<<<<<<<<<<<<
- *                     else:
- *                         conv[i, j, k] = fixed[i, j, k]
- */
-            if (unlikely(__pyx_v_bot == 0)) {
-              PyErr_Format(PyExc_ZeroDivisionError, "float division");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-            }
-            __pyx_t_48 = __pyx_v_i;
-            __pyx_t_49 = __pyx_v_j;
-            __pyx_t_50 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_50, __pyx_pybuffernd_conv.diminfo[2].strides) = (__pyx_v_top / __pyx_v_bot);
-            goto __pyx_L33;
-          }
-          /*else*/ {
+        /* "astropy/table/_np_utils.pyx":126
+ *                 left_out[i_out] = idx
+ * 
+ *                 idx = right_idxs[i_right]             # <<<<<<<<<<<<<<
+ *                 if idx < 0:
+ *                     idx = 0
+ */
+        __pyx_t_13 = __Pyx_GetItemInt(((PyObject *)__pyx_v_right_idxs), __pyx_v_i_right, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long); if (!__pyx_t_13) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_13);
+        __pyx_t_19 = __Pyx_PyInt_from_py_npy_long(__pyx_t_13); if (unlikely((__pyx_t_19 == (npy_long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        __pyx_v_idx = __pyx_t_19;
 
-            /* "astropy/nddata/convolution/boundary_none.pyx":226
- *                         conv[i, j, k] = top / bot
- *                     else:
- *                         conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
- *                 else:
- *                     conv[i, j, k] = fixed[i, j, k]
- */
-            __pyx_t_57 = __pyx_v_i;
-            __pyx_t_58 = __pyx_v_j;
-            __pyx_t_59 = __pyx_v_k;
-            __pyx_t_60 = __pyx_v_i;
-            __pyx_t_61 = __pyx_v_j;
-            __pyx_t_62 = __pyx_v_k;
-            *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_61, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_62, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_fixed.diminfo[0 [...]
-          }
-          __pyx_L33:;
-          goto __pyx_L25;
-        }
-        /*else*/ {
+        /* "astropy/table/_np_utils.pyx":127
+ * 
+ *                 idx = right_idxs[i_right]
+ *                 if idx < 0:             # <<<<<<<<<<<<<<
+ *                     idx = 0
+ *                     right_mask[i_out] = 1
+ */
+        __pyx_t_5 = (__pyx_v_idx < 0);
+        if (__pyx_t_5) {
 
-          /* "astropy/nddata/convolution/boundary_none.pyx":228
- *                         conv[i, j, k] = fixed[i, j, k]
- *                 else:
- *                     conv[i, j, k] = fixed[i, j, k]             # <<<<<<<<<<<<<<
+          /* "astropy/table/_np_utils.pyx":128
+ *                 idx = right_idxs[i_right]
+ *                 if idx < 0:
+ *                     idx = 0             # <<<<<<<<<<<<<<
+ *                     right_mask[i_out] = 1
+ *                 right_out[i_out] = idx
+ */
+          __pyx_v_idx = 0;
+
+          /* "astropy/table/_np_utils.pyx":129
+ *                 if idx < 0:
+ *                     idx = 0
+ *                     right_mask[i_out] = 1             # <<<<<<<<<<<<<<
+ *                 right_out[i_out] = idx
  * 
- *     return conv
  */
-          __pyx_t_63 = __pyx_v_i;
-          __pyx_t_64 = __pyx_v_j;
-          __pyx_t_65 = __pyx_v_k;
-          __pyx_t_66 = __pyx_v_i;
-          __pyx_t_67 = __pyx_v_j;
-          __pyx_t_68 = __pyx_v_k;
-          *__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_conv.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_conv.diminfo[0].strides, __pyx_t_67, __pyx_pybuffernd_conv.diminfo[1].strides, __pyx_t_68, __pyx_pybuffernd_conv.diminfo[2].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_7astropy_6nddata_11convolution_13boundary_none_DTYPE_t *, __pyx_pybuffernd_fixed.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_fixed.diminfo[0]. [...]
+          if (__Pyx_SetItemInt(((PyObject *)__pyx_v_right_mask), __pyx_v_i_out, __pyx_int_1, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          goto __pyx_L27;
         }
-        __pyx_L25:;
+        __pyx_L27:;
+
+        /* "astropy/table/_np_utils.pyx":130
+ *                     idx = 0
+ *                     right_mask[i_out] = 1
+ *                 right_out[i_out] = idx             # <<<<<<<<<<<<<<
+ * 
+ *                 i_out += 1
+ */
+        __pyx_t_13 = __Pyx_PyInt_to_py_npy_long(__pyx_v_idx); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_13);
+        if (__Pyx_SetItemInt(((PyObject *)__pyx_v_right_out), __pyx_v_i_out, __pyx_t_13, sizeof(__pyx_t_7astropy_5table_9_np_utils_DTYPE_t), __Pyx_PyInt_to_py_npy_long) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+
+        /* "astropy/table/_np_utils.pyx":132
+ *                 right_out[i_out] = idx
+ * 
+ *                 i_out += 1             # <<<<<<<<<<<<<<
+ * 
+ *     return masked, n_out, left_out, left_mask, right_out, right_mask
+ */
+        __pyx_v_i_out = (__pyx_v_i_out + 1);
       }
     }
   }
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":230
- *                     conv[i, j, k] = fixed[i, j, k]
+  /* "astropy/table/_np_utils.pyx":134
+ *                 i_out += 1
  * 
- *     return conv             # <<<<<<<<<<<<<<
+ *     return masked, n_out, left_out, left_mask, right_out, right_mask             # <<<<<<<<<<<<<<
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_conv));
-  __pyx_r = ((PyObject *)__pyx_v_conv);
+  __pyx_t_13 = PyInt_FromLong(__pyx_v_masked); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_13);
+  __pyx_t_10 = PyInt_FromLong(__pyx_v_n_out); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_10);
+  __pyx_t_11 = PyTuple_New(6); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_11);
+  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_13);
+  __Pyx_GIVEREF(__pyx_t_13);
+  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_10);
+  __Pyx_GIVEREF(__pyx_t_10);
+  __Pyx_INCREF(((PyObject *)__pyx_v_left_out));
+  PyTuple_SET_ITEM(__pyx_t_11, 2, ((PyObject *)__pyx_v_left_out));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_left_out));
+  __Pyx_INCREF(((PyObject *)__pyx_v_left_mask));
+  PyTuple_SET_ITEM(__pyx_t_11, 3, ((PyObject *)__pyx_v_left_mask));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_left_mask));
+  __Pyx_INCREF(((PyObject *)__pyx_v_right_out));
+  PyTuple_SET_ITEM(__pyx_t_11, 4, ((PyObject *)__pyx_v_right_out));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_right_out));
+  __Pyx_INCREF(((PyObject *)__pyx_v_right_mask));
+  PyTuple_SET_ITEM(__pyx_t_11, 5, ((PyObject *)__pyx_v_right_mask));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_right_mask));
+  __pyx_t_13 = 0;
+  __pyx_t_10 = 0;
+  __pyx_r = ((PyObject *)__pyx_t_11);
+  __pyx_t_11 = 0;
   goto __pyx_L0;
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_8);
   __Pyx_XDECREF(__pyx_t_9);
+  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_13);
   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
-    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_idx_sort.rcbuffer->pybuffer);
+    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_idxs.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.nddata.convolution.boundary_none.convolve3d_boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.table._np_utils.join_inner", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_conv.rcbuffer->pybuffer);
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_f.rcbuffer->pybuffer);
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fixed.rcbuffer->pybuffer);
-  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_g.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_idx_sort.rcbuffer->pybuffer);
+  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_idxs.rcbuffer->pybuffer);
   __pyx_L2:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_fixed);
-  __Pyx_XDECREF((PyObject *)__pyx_v_conv);
+  __Pyx_XDECREF((PyObject *)__pyx_v_left_out);
+  __Pyx_XDECREF((PyObject *)__pyx_v_right_out);
+  __Pyx_XDECREF((PyObject *)__pyx_v_left_mask);
+  __Pyx_XDECREF((PyObject *)__pyx_v_right_mask);
+  __Pyx_XDECREF((PyObject *)__pyx_v_left_idxs);
+  __Pyx_XDECREF((PyObject *)__pyx_v_right_idxs);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -3770,7 +2630,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  * 
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_2), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -3810,7 +2670,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  * 
  *             info.buf = PyArray_DATA(self)
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_8), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_4), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -4083,7 +2943,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"
  */
-      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_10), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_Raise(__pyx_t_4, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -4323,7 +3183,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  */
       __pyx_t_4 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_11), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_7), __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(((PyObject *)__pyx_t_8));
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -4899,7 +3759,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  * 
  *         if ((child.byteorder == c'>' and little_endian) or
  */
-      __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_13), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_9), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -4950,7 +3810,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  *             # One could encode it in the format string and have Cython
  *             # complain instead, BUT: < and > in format strings also imply
  */
-      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_14), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_10), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -5054,7 +3914,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  * 
  *             # Until ticket #99 is fixed, use integers to avoid warnings
  */
-        __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_16), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_12), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_Raise(__pyx_t_3, 0, 0, 0);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -5383,7 +4243,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  *             f += 1
  *         else:
  */
-        __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_11), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_7), __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(((PyObject *)__pyx_t_5));
         __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
@@ -5600,8 +4460,8 @@ static struct PyModuleDef __pyx_moduledef = {
   #else
     PyModuleDef_HEAD_INIT,
   #endif
-    __Pyx_NAMESTR("boundary_none"),
-    0, /* m_doc */
+    __Pyx_NAMESTR("_np_utils"),
+    __Pyx_DOCSTR(__pyx_k_13), /* m_doc */
     -1, /* m_size */
     __pyx_methods /* m_methods */,
     NULL, /* m_reload */
@@ -5612,63 +4472,62 @@ static struct PyModuleDef __pyx_moduledef = {
 #endif
 
 static __Pyx_StringTabEntry __pyx_string_tab[] = {
-  {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0},
+  {&__pyx_kp_u_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 1, 0, 0},
   {&__pyx_kp_u_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 1, 0, 0},
-  {&__pyx_kp_u_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 1, 0, 0},
-  {&__pyx_kp_u_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 1, 0, 0},
-  {&__pyx_n_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 1},
-  {&__pyx_kp_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 0},
-  {&__pyx_n_s_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 1, 1},
-  {&__pyx_n_s_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 0, 1, 1},
-  {&__pyx_n_s_27, __pyx_k_27, sizeof(__pyx_k_27), 0, 0, 1, 1},
+  {&__pyx_n_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 1},
+  {&__pyx_n_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 1},
+  {&__pyx_n_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 1},
+  {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0},
+  {&__pyx_n_s_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 1, 1},
+  {&__pyx_kp_u_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 1, 0, 0},
   {&__pyx_kp_u_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 1, 0, 0},
   {&__pyx_kp_u_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 1, 0, 0},
-  {&__pyx_kp_u_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 1, 0, 0},
+  {&__pyx_kp_u_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 1, 0, 0},
   {&__pyx_n_s__DTYPE, __pyx_k__DTYPE, sizeof(__pyx_k__DTYPE), 0, 0, 1, 1},
   {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
   {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
   {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
   {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
-  {&__pyx_n_s__bot, __pyx_k__bot, sizeof(__pyx_k__bot), 0, 0, 1, 1},
-  {&__pyx_n_s__conv, __pyx_k__conv, sizeof(__pyx_k__conv), 0, 0, 1, 1},
+  {&__pyx_n_s__bool, __pyx_k__bool, sizeof(__pyx_k__bool), 0, 0, 1, 1},
+  {&__pyx_n_s__drop_fields, __pyx_k__drop_fields, sizeof(__pyx_k__drop_fields), 0, 0, 1, 1},
   {&__pyx_n_s__dtype, __pyx_k__dtype, sizeof(__pyx_k__dtype), 0, 0, 1, 1},
-  {&__pyx_n_s__f, __pyx_k__f, sizeof(__pyx_k__f), 0, 0, 1, 1},
-  {&__pyx_n_s__fixed, __pyx_k__fixed, sizeof(__pyx_k__fixed), 0, 0, 1, 1},
-  {&__pyx_n_s__float, __pyx_k__float, sizeof(__pyx_k__float), 0, 0, 1, 1},
-  {&__pyx_n_s__g, __pyx_k__g, sizeof(__pyx_k__g), 0, 0, 1, 1},
+  {&__pyx_n_s__empty, __pyx_k__empty, sizeof(__pyx_k__empty), 0, 0, 1, 1},
   {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1},
+  {&__pyx_n_s__i_left, __pyx_k__i_left, sizeof(__pyx_k__i_left), 0, 0, 1, 1},
+  {&__pyx_n_s__i_out, __pyx_k__i_out, sizeof(__pyx_k__i_out), 0, 0, 1, 1},
+  {&__pyx_n_s__i_right, __pyx_k__i_right, sizeof(__pyx_k__i_right), 0, 0, 1, 1},
+  {&__pyx_n_s__idx, __pyx_k__idx, sizeof(__pyx_k__idx), 0, 0, 1, 1},
+  {&__pyx_n_s__idx0, __pyx_k__idx0, sizeof(__pyx_k__idx0), 0, 0, 1, 1},
+  {&__pyx_n_s__idx1, __pyx_k__idx1, sizeof(__pyx_k__idx1), 0, 0, 1, 1},
+  {&__pyx_n_s__idx_sort, __pyx_k__idx_sort, sizeof(__pyx_k__idx_sort), 0, 0, 1, 1},
+  {&__pyx_n_s__idxs, __pyx_k__idxs, sizeof(__pyx_k__idxs), 0, 0, 1, 1},
   {&__pyx_n_s__ii, __pyx_k__ii, sizeof(__pyx_k__ii), 0, 0, 1, 1},
-  {&__pyx_n_s__iimax, __pyx_k__iimax, sizeof(__pyx_k__iimax), 0, 0, 1, 1},
-  {&__pyx_n_s__iimin, __pyx_k__iimin, sizeof(__pyx_k__iimin), 0, 0, 1, 1},
-  {&__pyx_n_s__j, __pyx_k__j, sizeof(__pyx_k__j), 0, 0, 1, 1},
-  {&__pyx_n_s__jj, __pyx_k__jj, sizeof(__pyx_k__jj), 0, 0, 1, 1},
-  {&__pyx_n_s__jjmax, __pyx_k__jjmax, sizeof(__pyx_k__jjmax), 0, 0, 1, 1},
-  {&__pyx_n_s__jjmin, __pyx_k__jjmin, sizeof(__pyx_k__jjmin), 0, 0, 1, 1},
-  {&__pyx_n_s__k, __pyx_k__k, sizeof(__pyx_k__k), 0, 0, 1, 1},
-  {&__pyx_n_s__ker, __pyx_k__ker, sizeof(__pyx_k__ker), 0, 0, 1, 1},
-  {&__pyx_n_s__kk, __pyx_k__kk, sizeof(__pyx_k__kk), 0, 0, 1, 1},
-  {&__pyx_n_s__kkmax, __pyx_k__kkmax, sizeof(__pyx_k__kkmax), 0, 0, 1, 1},
-  {&__pyx_n_s__kkmin, __pyx_k__kkmin, sizeof(__pyx_k__kkmin), 0, 0, 1, 1},
-  {&__pyx_n_s__nkx, __pyx_k__nkx, sizeof(__pyx_k__nkx), 0, 0, 1, 1},
-  {&__pyx_n_s__nky, __pyx_k__nky, sizeof(__pyx_k__nky), 0, 0, 1, 1},
-  {&__pyx_n_s__nkz, __pyx_k__nkz, sizeof(__pyx_k__nkz), 0, 0, 1, 1},
+  {&__pyx_n_s__int, __pyx_k__int, sizeof(__pyx_k__int), 0, 0, 1, 1},
+  {&__pyx_n_s__join_inner, __pyx_k__join_inner, sizeof(__pyx_k__join_inner), 0, 0, 1, 1},
+  {&__pyx_n_s__jointype, __pyx_k__jointype, sizeof(__pyx_k__jointype), 0, 0, 1, 1},
+  {&__pyx_n_s__key_idxs, __pyx_k__key_idxs, sizeof(__pyx_k__key_idxs), 0, 0, 1, 1},
+  {&__pyx_n_s__left_idxs, __pyx_k__left_idxs, sizeof(__pyx_k__left_idxs), 0, 0, 1, 1},
+  {&__pyx_n_s__left_mask, __pyx_k__left_mask, sizeof(__pyx_k__left_mask), 0, 0, 1, 1},
+  {&__pyx_n_s__left_out, __pyx_k__left_out, sizeof(__pyx_k__left_out), 0, 0, 1, 1},
+  {&__pyx_n_s__len_left, __pyx_k__len_left, sizeof(__pyx_k__len_left), 0, 0, 1, 1},
+  {&__pyx_n_s__ma, __pyx_k__ma, sizeof(__pyx_k__ma), 0, 0, 1, 1},
+  {&__pyx_n_s__masked, __pyx_k__masked, sizeof(__pyx_k__masked), 0, 0, 1, 1},
+  {&__pyx_n_s__max_key_idxs, __pyx_k__max_key_idxs, sizeof(__pyx_k__max_key_idxs), 0, 0, 1, 1},
+  {&__pyx_n_s__n_left, __pyx_k__n_left, sizeof(__pyx_k__n_left), 0, 0, 1, 1},
+  {&__pyx_n_s__n_out, __pyx_k__n_out, sizeof(__pyx_k__n_out), 0, 0, 1, 1},
+  {&__pyx_n_s__n_right, __pyx_k__n_right, sizeof(__pyx_k__n_right), 0, 0, 1, 1},
   {&__pyx_n_s__np, __pyx_k__np, sizeof(__pyx_k__np), 0, 0, 1, 1},
   {&__pyx_n_s__numpy, __pyx_k__numpy, sizeof(__pyx_k__numpy), 0, 0, 1, 1},
-  {&__pyx_n_s__nx, __pyx_k__nx, sizeof(__pyx_k__nx), 0, 0, 1, 1},
-  {&__pyx_n_s__ny, __pyx_k__ny, sizeof(__pyx_k__ny), 0, 0, 1, 1},
-  {&__pyx_n_s__nz, __pyx_k__nz, sizeof(__pyx_k__nz), 0, 0, 1, 1},
   {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
-  {&__pyx_n_s__top, __pyx_k__top, sizeof(__pyx_k__top), 0, 0, 1, 1},
-  {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1},
-  {&__pyx_n_s__wkx, __pyx_k__wkx, sizeof(__pyx_k__wkx), 0, 0, 1, 1},
-  {&__pyx_n_s__wky, __pyx_k__wky, sizeof(__pyx_k__wky), 0, 0, 1, 1},
-  {&__pyx_n_s__wkz, __pyx_k__wkz, sizeof(__pyx_k__wkz), 0, 0, 1, 1},
+  {&__pyx_n_s__right_idxs, __pyx_k__right_idxs, sizeof(__pyx_k__right_idxs), 0, 0, 1, 1},
+  {&__pyx_n_s__right_mask, __pyx_k__right_mask, sizeof(__pyx_k__right_mask), 0, 0, 1, 1},
+  {&__pyx_n_s__right_out, __pyx_k__right_out, sizeof(__pyx_k__right_out), 0, 0, 1, 1},
   {&__pyx_n_s__zeros, __pyx_k__zeros, sizeof(__pyx_k__zeros), 0, 0, 1, 1},
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
@@ -5679,39 +4538,6 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":19
- * 
- *     if g.shape[0] % 2 != 1:
- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
- * 
- *     assert f.dtype == DTYPE and g.dtype == DTYPE
- */
-  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_2);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":83
- * 
- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1:
- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
- * 
- *     assert f.dtype == DTYPE and g.dtype == DTYPE
- */
-  __pyx_k_tuple_3 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_3);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_3));
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":156
- * 
- *     if g.shape[0] % 2 != 1 or g.shape[1] % 2 != 1 or g.shape[2] % 2 != 1:
- *         raise ValueError("Convolution kernel must have odd dimensions")             # <<<<<<<<<<<<<<
- * 
- *     assert f.dtype == DTYPE and g.dtype == DTYPE
- */
-  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_1)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_4);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
-
   /* "numpy.pxd":215
  *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
  *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
@@ -5719,9 +4545,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
  */
-  __pyx_k_tuple_6 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_5)); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_6);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6));
+  __pyx_k_tuple_2 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_1)); if (unlikely(!__pyx_k_tuple_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_2);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_2));
 
   /* "numpy.pxd":219
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
@@ -5730,9 +4556,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *             info.buf = PyArray_DATA(self)
  */
-  __pyx_k_tuple_8 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_7)); if (unlikely(!__pyx_k_tuple_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_8);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_8));
+  __pyx_k_tuple_4 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_3)); if (unlikely(!__pyx_k_tuple_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_4);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_4));
 
   /* "numpy.pxd":257
  *                 if ((descr.byteorder == c'>' and little_endian) or
@@ -5741,9 +4567,9 @@ static int __Pyx_InitCachedConstants(void) {
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"
  */
-  __pyx_k_tuple_10 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_9)); if (unlikely(!__pyx_k_tuple_10)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_10);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_10));
+  __pyx_k_tuple_6 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_5)); if (unlikely(!__pyx_k_tuple_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_6);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_6));
 
   /* "numpy.pxd":799
  * 
@@ -5752,9 +4578,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *         if ((child.byteorder == c'>' and little_endian) or
  */
-  __pyx_k_tuple_13 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_12)); if (unlikely(!__pyx_k_tuple_13)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_13);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_13));
+  __pyx_k_tuple_9 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_8)); if (unlikely(!__pyx_k_tuple_9)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_9);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_9));
 
   /* "numpy.pxd":803
  *         if ((child.byteorder == c'>' and little_endian) or
@@ -5763,9 +4589,9 @@ static int __Pyx_InitCachedConstants(void) {
  *             # One could encode it in the format string and have Cython
  *             # complain instead, BUT: < and > in format strings also imply
  */
-  __pyx_k_tuple_14 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_9)); if (unlikely(!__pyx_k_tuple_14)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_14);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_14));
+  __pyx_k_tuple_10 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_5)); if (unlikely(!__pyx_k_tuple_10)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_10);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_10));
 
   /* "numpy.pxd":823
  *             t = child.type_num
@@ -5774,45 +4600,21 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *             # Until ticket #99 is fixed, use integers to avoid warnings
  */
-  __pyx_k_tuple_16 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_15)); if (unlikely(!__pyx_k_tuple_16)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_16);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_16));
+  __pyx_k_tuple_12 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_u_11)); if (unlikely(!__pyx_k_tuple_12)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_12);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_12));
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":15
- * 
- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
- * def convolve1d_boundary_none(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
- *                              np.ndarray[DTYPE_t, ndim=1] g):
- * 
+  /* "astropy/table/_np_utils.pyx":19
+ * @cython.wraparound(False)
+ * @cython.boundscheck(False)
+ * def join_inner(np.ndarray[DTYPE_t, ndim=1] idxs,             # <<<<<<<<<<<<<<
+ *                np.ndarray[DTYPE_t, ndim=1] idx_sort,
+ *                int len_left,
  */
-  __pyx_k_tuple_17 = PyTuple_Pack(15, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__iimin), ((PyObject *)__pyx_n_s__iimax), ((PyObject *)__pyx_n_s__top), ((PyObject *)__pyx_n_s__bot), ((PyObject *)__pyx_n_s__ker), ((PyObject *)__pyx_n_s__val)); if ( [...]
+  __pyx_k_tuple_17 = PyTuple_Pack(24, ((PyObject *)__pyx_n_s__idxs), ((PyObject *)__pyx_n_s__idx_sort), ((PyObject *)__pyx_n_s__len_left), ((PyObject *)__pyx_n_s__jointype), ((PyObject *)__pyx_n_s__n_out), ((PyObject *)__pyx_n_s__max_key_idxs), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__key_idxs), ((PyObject *)__pyx_n_s__n_left), ((PyObject *)__pyx_n_s__n_right), ((PyObject *)__pyx_n_s__idx0), ((PyObject *)__pyx_n_s__idx1), ((PyObject *)__pyx_n_s__idx), ((PyObject *)__pyx_n_s__ [...]
   __Pyx_GOTREF(__pyx_k_tuple_17);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_17));
-  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(2, 0, 15, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_19, 15, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":79
- * 
- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
- * def convolve2d_boundary_none(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
- *                              np.ndarray[DTYPE_t, ndim=2] g):
- * 
- */
-  __pyx_k_tuple_22 = PyTuple_Pack(22, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject *)__pyx_n_s__ii), ((PyObject *)__pyx_n_s__jj), ((PyObject *)__pyx_n_s__iimin), ((PyObject  [...]
-  __Pyx_GOTREF(__pyx_k_tuple_22);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_22));
-  __pyx_k_codeobj_23 = (PyObject*)__Pyx_PyCode_New(2, 0, 22, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_24, 79, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "astropy/nddata/convolution/boundary_none.pyx":152
- * 
- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
- * def convolve3d_boundary_none(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
- *                              np.ndarray[DTYPE_t, ndim=3] g):
- * 
- */
-  __pyx_k_tuple_25 = PyTuple_Pack(29, ((PyObject *)__pyx_n_s__f), ((PyObject *)__pyx_n_s__g), ((PyObject *)__pyx_n_s__nx), ((PyObject *)__pyx_n_s__ny), ((PyObject *)__pyx_n_s__nz), ((PyObject *)__pyx_n_s__nkx), ((PyObject *)__pyx_n_s__nky), ((PyObject *)__pyx_n_s__nkz), ((PyObject *)__pyx_n_s__wkx), ((PyObject *)__pyx_n_s__wky), ((PyObject *)__pyx_n_s__wkz), ((PyObject *)__pyx_n_s__fixed), ((PyObject *)__pyx_n_s__conv), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__j), ((PyObject * [...]
-  __Pyx_GOTREF(__pyx_k_tuple_25);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_25));
-  __pyx_k_codeobj_26 = (PyObject*)__Pyx_PyCode_New(2, 0, 29, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_20, __pyx_n_s_27, 152, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_codeobj_18 = (PyObject*)__Pyx_PyCode_New(4, 0, 24, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_19, __pyx_n_s__join_inner, 19, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -5822,6 +4624,8 @@ static int __Pyx_InitCachedConstants(void) {
 
 static int __Pyx_InitGlobals(void) {
   if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   return 0;
   __pyx_L1_error:;
@@ -5829,11 +4633,11 @@ static int __Pyx_InitGlobals(void) {
 }
 
 #if PY_MAJOR_VERSION < 3
-PyMODINIT_FUNC initboundary_none(void); /*proto*/
-PyMODINIT_FUNC initboundary_none(void)
+PyMODINIT_FUNC init_np_utils(void); /*proto*/
+PyMODINIT_FUNC init_np_utils(void)
 #else
-PyMODINIT_FUNC PyInit_boundary_none(void); /*proto*/
-PyMODINIT_FUNC PyInit_boundary_none(void)
+PyMODINIT_FUNC PyInit__np_utils(void); /*proto*/
+PyMODINIT_FUNC PyInit__np_utils(void)
 #endif
 {
   PyObject *__pyx_t_1 = NULL;
@@ -5848,7 +4652,7 @@ PyMODINIT_FUNC PyInit_boundary_none(void)
           Py_FatalError("failed to import 'refnanny' module");
   }
   #endif
-  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_boundary_none(void)", 0);
+  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit__np_utils(void)", 0);
   if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -5870,7 +4674,7 @@ PyMODINIT_FUNC PyInit_boundary_none(void)
   #endif
   /*--- Module creation code ---*/
   #if PY_MAJOR_VERSION < 3
-  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("boundary_none"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
+  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("_np_utils"), __pyx_methods, __Pyx_DOCSTR(__pyx_k_13), 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
   #else
   __pyx_m = PyModule_Create(&__pyx_moduledef);
   #endif
@@ -5878,8 +4682,8 @@ PyMODINIT_FUNC PyInit_boundary_none(void)
   #if PY_MAJOR_VERSION >= 3
   {
     PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (!PyDict_GetItemString(modules, "astropy.nddata.convolution.boundary_none")) {
-      if (unlikely(PyDict_SetItemString(modules, "astropy.nddata.convolution.boundary_none", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!PyDict_GetItemString(modules, "astropy.table._np_utils")) {
+      if (unlikely(PyDict_SetItemString(modules, "astropy.table._np_utils", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
@@ -5890,7 +4694,7 @@ PyMODINIT_FUNC PyInit_boundary_none(void)
   if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   /*--- Initialize various global constants etc. ---*/
   if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_module_is_main_astropy__nddata__convolution__boundary_none) {
+  if (__pyx_module_is_main_astropy__table___np_utils) {
     if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   }
   /*--- Builtin init code ---*/
@@ -5918,72 +4722,92 @@ PyMODINIT_FUNC PyInit_boundary_none(void)
   /*--- Function import code ---*/
   /*--- Execution code ---*/
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":2
- * from __future__ import division
- * import numpy as np             # <<<<<<<<<<<<<<
- * cimport numpy as np
+  /* "astropy/table/_np_utils.pyx":8
+ * """
  * 
+ * import numpy as np             # <<<<<<<<<<<<<<
+ * import numpy.ma as ma
+ * from numpy.lib.recfunctions import drop_fields
  */
-  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":5
- * cimport numpy as np
+  /* "astropy/table/_np_utils.pyx":9
  * 
- * DTYPE = np.float             # <<<<<<<<<<<<<<
- * ctypedef np.float_t DTYPE_t
+ * import numpy as np
+ * import numpy.ma as ma             # <<<<<<<<<<<<<<
+ * from numpy.lib.recfunctions import drop_fields
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__float); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_INCREF(((PyObject *)__pyx_n_s_15));
+  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s_15));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s_15));
+  __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s_14), ((PyObject *)__pyx_t_1), -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ma, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":15
- * 
- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
- * def convolve1d_boundary_none(np.ndarray[DTYPE_t, ndim=1] f,             # <<<<<<<<<<<<<<
- *                              np.ndarray[DTYPE_t, ndim=1] g):
+  /* "astropy/table/_np_utils.pyx":10
+ * import numpy as np
+ * import numpy.ma as ma
+ * from numpy.lib.recfunctions import drop_fields             # <<<<<<<<<<<<<<
  * 
+ * cimport cython
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_1convolve1d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__drop_fields));
+  PyList_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__drop_fields));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__drop_fields));
+  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s_16), ((PyObject *)__pyx_t_2), -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__drop_fields);
+  if (__pyx_t_2 == NULL) {
+    if (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseImportError(__pyx_n_s__drop_fields);
+    if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__drop_fields, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":79
- * 
- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
- * def convolve2d_boundary_none(np.ndarray[DTYPE_t, ndim=2] f,             # <<<<<<<<<<<<<<
- *                              np.ndarray[DTYPE_t, ndim=2] g):
+  /* "astropy/table/_np_utils.pyx":14
+ * cimport cython
+ * cimport numpy as np
+ * DTYPE = np.int             # <<<<<<<<<<<<<<
+ * ctypedef np.int_t DTYPE_t
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_3convolve2d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__int); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_24, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":152
- * 
- * @cython.boundscheck(False)  # turn off bounds-checking for entire function
- * def convolve3d_boundary_none(np.ndarray[DTYPE_t, ndim=3] f,             # <<<<<<<<<<<<<<
- *                              np.ndarray[DTYPE_t, ndim=3] g):
- * 
+  /* "astropy/table/_np_utils.pyx":19
+ * @cython.wraparound(False)
+ * @cython.boundscheck(False)
+ * def join_inner(np.ndarray[DTYPE_t, ndim=1] idxs,             # <<<<<<<<<<<<<<
+ *                np.ndarray[DTYPE_t, ndim=1] idx_sort,
+ *                int len_left,
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_6nddata_11convolution_13boundary_none_5convolve3d_boundary_none, NULL, __pyx_n_s_21); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_5table_9_np_utils_1join_inner, NULL, __pyx_n_s_20); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_27, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__join_inner, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/nddata/convolution/boundary_none.pyx":1
- * from __future__ import division             # <<<<<<<<<<<<<<
- * import numpy as np
- * cimport numpy as np
+  /* "astropy/table/_np_utils.pyx":1
+ * """             # <<<<<<<<<<<<<<
+ * Cython utilities for numpy structured arrays.
+ * 
  */
   __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
@@ -6002,10 +4826,10 @@ PyMODINIT_FUNC PyInit_boundary_none(void)
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   if (__pyx_m) {
-    __Pyx_AddTraceback("init astropy.nddata.convolution.boundary_none", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    __Pyx_AddTraceback("init astropy.table._np_utils", __pyx_clineno, __pyx_lineno, __pyx_filename);
     Py_DECREF(__pyx_m); __pyx_m = 0;
   } else if (!PyErr_Occurred()) {
-    PyErr_SetString(PyExc_ImportError, "init astropy.nddata.convolution.boundary_none");
+    PyErr_SetString(PyExc_ImportError, "init astropy.table._np_utils");
   }
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -6750,10 +5574,16 @@ static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {
   __Pyx_ReleaseBuffer(info);
 }
 
-static CYTHON_INLINE long __Pyx_mod_long(long a, long b) {
-    long r = a % b;
-    r += ((r != 0) & ((r ^ b) < 0)) * b;
-    return r;
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
+    if (unlikely(!type)) {
+        PyErr_Format(PyExc_SystemError, "Missing type object");
+        return 0;
+    }
+    if (likely(PyObject_TypeCheck(obj, type)))
+        return 1;
+    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
+                 Py_TYPE(obj)->tp_name, type->tp_name);
+    return 0;
 }
 
 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
@@ -6937,25 +5767,6 @@ bad:
 }
 #endif
 
-static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
-    long q = a / b;
-    long r = a - q*b;
-    q -= ((r != 0) & ((r ^ b) < 0));
-    return q;
-}
-
-static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
-    if (unlikely(!type)) {
-        PyErr_Format(PyExc_SystemError, "Missing type object");
-        return 0;
-    }
-    if (likely(PyObject_TypeCheck(obj, type)))
-        return 1;
-    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
-                 Py_TYPE(obj)->tp_name, type->tp_name);
-    return 0;
-}
-
 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
     PyErr_Format(PyExc_ValueError,
                  "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
@@ -7171,6 +5982,97 @@ bad:
     return module;
 }
 
+static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name) {
+#if PY_MAJOR_VERSION < 3
+    PyErr_Format(PyExc_ImportError, "cannot import name %.230s",
+                 PyString_AsString(name));
+#else
+    PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
+#endif
+}
+
+static CYTHON_INLINE npy_long __Pyx_PyInt_from_py_npy_long(PyObject* x) {
+    const npy_long neg_one = (npy_long)-1, const_zero = (npy_long)0;
+    const int is_unsigned = const_zero < neg_one;
+    if (sizeof(npy_long) == sizeof(char)) {
+        if (is_unsigned)
+            return (npy_long)__Pyx_PyInt_AsUnsignedChar(x);
+        else
+            return (npy_long)__Pyx_PyInt_AsSignedChar(x);
+    } else if (sizeof(npy_long) == sizeof(short)) {
+        if (is_unsigned)
+            return (npy_long)__Pyx_PyInt_AsUnsignedShort(x);
+        else
+            return (npy_long)__Pyx_PyInt_AsSignedShort(x);
+    } else if (sizeof(npy_long) == sizeof(int)) {
+        if (is_unsigned)
+            return (npy_long)__Pyx_PyInt_AsUnsignedInt(x);
+        else
+            return (npy_long)__Pyx_PyInt_AsSignedInt(x);
+    } else if (sizeof(npy_long) == sizeof(long)) {
+        if (is_unsigned)
+            return (npy_long)__Pyx_PyInt_AsUnsignedLong(x);
+        else
+            return (npy_long)__Pyx_PyInt_AsSignedLong(x);
+    } else if (sizeof(npy_long) == sizeof(PY_LONG_LONG)) {
+        if (is_unsigned)
+            return (npy_long)__Pyx_PyInt_AsUnsignedLongLong(x);
+        else
+            return (npy_long)__Pyx_PyInt_AsSignedLongLong(x);
+    }  else {
+        #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+        PyErr_SetString(PyExc_RuntimeError,
+                        "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+        #else
+        npy_long val;
+        PyObject *v = __Pyx_PyNumber_Int(x);
+        #if PY_VERSION_HEX < 0x03000000
+        if (likely(v) && !PyLong_Check(v)) {
+            PyObject *tmp = v;
+            v = PyNumber_Long(tmp);
+            Py_DECREF(tmp);
+        }
+        #endif
+        if (likely(v)) {
+            int one = 1; int is_little = (int)*(unsigned char *)&one;
+            unsigned char *bytes = (unsigned char *)&val;
+            int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                          bytes, sizeof(val),
+                                          is_little, !is_unsigned);
+            Py_DECREF(v);
+            if (likely(!ret))
+                return val;
+        }
+        #endif
+        return (npy_long)-1;
+    }
+}
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_npy_long(npy_long val) {
+    const npy_long neg_one = (npy_long)-1, const_zero = (npy_long)0;
+    const int is_unsigned = const_zero < neg_one;
+    if ((sizeof(npy_long) == sizeof(char))  ||
+        (sizeof(npy_long) == sizeof(short))) {
+        return PyInt_FromLong((long)val);
+    } else if ((sizeof(npy_long) == sizeof(int)) ||
+               (sizeof(npy_long) == sizeof(long))) {
+        if (is_unsigned)
+            return PyLong_FromUnsignedLong((unsigned long)val);
+        else
+            return PyInt_FromLong((long)val);
+    } else if (sizeof(npy_long) == sizeof(PY_LONG_LONG)) {
+        if (is_unsigned)
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
+        else
+            return PyLong_FromLongLong((PY_LONG_LONG)val);
+    } else {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&val;
+        return _PyLong_FromByteArray(bytes, sizeof(npy_long),
+                                     little, !is_unsigned);
+    }
+}
+
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
diff --git a/astropy/table/_np_utils.pyx b/astropy/table/_np_utils.pyx
new file mode 100644
index 0000000..0fe596f
--- /dev/null
+++ b/astropy/table/_np_utils.pyx
@@ -0,0 +1,134 @@
+"""
+Cython utilities for numpy structured arrays.
+
+join_inner():  Do the inner-loop cartesian product for np_utils.join() processing.
+               (The "inner" is about the inner loop, not inner join).
+"""
+
+import numpy as np
+import numpy.ma as ma
+from numpy.lib.recfunctions import drop_fields
+
+cimport cython
+cimport numpy as np
+DTYPE = np.int
+ctypedef np.int_t DTYPE_t
+
+ at cython.wraparound(False)
+ at cython.boundscheck(False)
+def join_inner(np.ndarray[DTYPE_t, ndim=1] idxs,
+               np.ndarray[DTYPE_t, ndim=1] idx_sort,
+               int len_left,
+               int jointype):
+    """
+    Do the inner-loop cartesian product for np_utils.join() processing.
+    (The "inner" is about the inner loop, not inner join).
+    """
+    cdef int n_out = 0
+    cdef int max_key_idxs = 0
+    cdef DTYPE_t ii, key_idxs, n_left, n_right, idx0, idx1, idx, i
+    cdef DTYPE_t i_left, i_right, i_out
+    cdef int masked
+
+    # First count the final number of rows and max number of indexes
+    # for a single key
+    masked = 0
+    for ii in range(idxs.shape[0] - 1):
+        idx0 = idxs[ii]
+        idx1 = idxs[ii + 1]
+
+        # Number of indexes for this key
+        key_idxs = idx1 - idx0
+        if key_idxs > max_key_idxs:
+            max_key_idxs = key_idxs
+
+        # Number of rows for this key
+        n_left = 0
+        n_right = 0
+        for idx in range(idx0, idx1):
+            i = idx_sort[idx]
+            if i < len_left:
+                n_left += 1
+            else:
+                n_right += 1
+
+        # Fix n_left and n_right for different join types
+        if jointype == 0:
+            pass
+        elif jointype == 1:
+            if n_left == 0:
+                masked = 1
+                n_left = 1
+            if n_right == 0:
+                masked = 1
+                n_right = 1
+        elif jointype == 2:
+            if n_right == 0:
+                masked = 1
+                n_right = 1
+        elif jointype == 3:
+            if n_left == 0:
+                masked = 1
+                n_left = 1
+
+        n_out += n_left * n_right
+
+    cdef np.ndarray left_out = np.empty(n_out, dtype=DTYPE)
+    cdef np.ndarray right_out = np.empty(n_out, dtype=DTYPE)
+    cdef np.ndarray left_mask = np.zeros(n_out, dtype=np.bool)
+    cdef np.ndarray right_mask = np.zeros(n_out, dtype=np.bool)
+    cdef np.ndarray left_idxs = np.empty(max_key_idxs, dtype=DTYPE)
+    cdef np.ndarray right_idxs = np.empty(max_key_idxs, dtype=DTYPE)
+
+    i_out = 0
+    for ii in range(idxs.shape[0] - 1):
+        idx0 = idxs[ii]
+        idx1 = idxs[ii + 1]
+
+        # Number of rows for this key
+        n_left = 0
+        n_right = 0
+        for idx in range(idx0, idx1):
+            i = idx_sort[idx]
+            if i < len_left:
+                left_idxs[n_left] = i
+                n_left += 1
+            else:
+                right_idxs[n_right] = i - len_left
+                n_right += 1
+
+        if jointype == 0:
+            pass
+        elif jointype == 1:
+            if n_left == 0:
+                left_idxs[0] = -1
+                n_left = 1
+            if n_right == 0:
+                right_idxs[0] = -1
+                n_right = 1
+        elif jointype == 2:
+            if n_right == 0:
+                right_idxs[0] = -1
+                n_right = 1
+        elif jointype == 3:
+            if n_left == 0:
+                left_idxs[0] = -1
+                n_left = 1
+
+        for i_left in range(n_left):
+            for i_right in range(n_right):
+                idx = left_idxs[i_left]
+                if idx < 0:
+                    idx = 0
+                    left_mask[i_out] = 1
+                left_out[i_out] = idx
+
+                idx = right_idxs[i_right]
+                if idx < 0:
+                    idx = 0
+                    right_mask[i_out] = 1
+                right_out[i_out] = idx
+
+                i_out += 1
+
+    return masked, n_out, left_out, left_mask, right_out, right_mask
diff --git a/astropy/table/data/demo_page.css b/astropy/table/data/demo_page.css
new file mode 100644
index 0000000..d7ecc7b
--- /dev/null
+++ b/astropy/table/data/demo_page.css
@@ -0,0 +1,96 @@
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * General page setup
+ */
+#dt_example {
+	font: 80%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
+	margin: 0;
+	padding: 0;
+	color: #333;
+	background-color: #fff;
+}
+
+
+#dt_example #container {
+	width: 800px;
+	margin: 30px auto;
+	padding: 0;
+}
+
+
+#dt_example #footer {
+	margin: 50px auto 0 auto;
+	padding: 0;
+}
+
+#dt_example #demo {
+	margin: 30px auto 0 auto;
+}
+
+#dt_example .demo_jui {
+	margin: 30px auto 0 auto;
+}
+
+#dt_example .big {
+	font-size: 1.3em;
+	font-weight: bold;
+	line-height: 1.6em;
+	color: #4E6CA3;
+}
+
+#dt_example .spacer {
+	height: 20px;
+	clear: both;
+}
+
+#dt_example .clear {
+	clear: both;
+}
+
+#dt_example pre {
+	padding: 15px;
+	background-color: #F5F5F5;
+	border: 1px solid #CCCCCC;
+}
+
+#dt_example h1 {
+	margin-top: 2em;
+	font-size: 1.3em;
+	font-weight: normal;
+	line-height: 1.6em;
+	color: #4E6CA3;
+	border-bottom: 1px solid #B0BED9;
+	clear: both;
+}
+
+#dt_example h2 {
+	font-size: 1.2em;
+	font-weight: normal;
+	line-height: 1.6em;
+	color: #4E6CA3;
+	clear: both;
+}
+
+#dt_example a {
+	color: #0063DC;
+	text-decoration: none;
+}
+
+#dt_example a:hover {
+	text-decoration: underline;
+}
+
+#dt_example ul {
+	color: #4E6CA3;
+}
+
+.css_right {
+	float: right;
+}
+
+.css_left {
+	float: left;
+}
+td.last-updated-cell { border:solid; background-color: yellow  !important }
+tr.last-added-row { border:solid; }
+tr.last-added-row td { background-color: green !important }
\ No newline at end of file
diff --git a/astropy/table/data/demo_table.css b/astropy/table/data/demo_table.css
new file mode 100644
index 0000000..e475928
--- /dev/null
+++ b/astropy/table/data/demo_table.css
@@ -0,0 +1,378 @@
+.dataTables_wrapper {
+    clear: both;
+    position: relative;
+}
+.dataTables_processing {
+    background-color: white;
+    border: 1px solid #DDDDDD;
+    color: #999999;
+    font-size: 14px;
+    height: 30px;
+    left: 50%;
+    margin-left: -125px;
+    margin-top: -15px;
+    padding: 14px 0 2px;
+    position: absolute;
+    text-align: center;
+    top: 50%;
+    width: 250px;
+}
+.dataTables_length {
+    float: left;
+    width: 40%;
+}
+.dataTables_filter {
+    float: right;
+    text-align: right;
+    width: 50%;
+}
+.dataTables_info {
+    float: left;
+    width: 60%;
+}
+.dataTables_paginate {
+    float: right;
+    text-align: right;
+}
+.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next {
+    color: #111111 !important;
+    cursor: pointer;
+    float: left;
+    height: 19px;
+}
+.paginate_disabled_previous:hover, .paginate_enabled_previous:hover, .paginate_disabled_next:hover, .paginate_enabled_next:hover {
+    text-decoration: none !important;
+}
+.paginate_disabled_previous:active, .paginate_enabled_previous:active, .paginate_disabled_next:active, .paginate_enabled_next:active {
+    outline: medium none;
+}
+.paginate_disabled_previous, .paginate_disabled_next {
+    color: #666666 !important;
+}
+.paginate_disabled_previous, .paginate_enabled_previous {
+    padding-left: 23px;
+}
+.paginate_disabled_next, .paginate_enabled_next {
+    margin-left: 10px;
+    padding-right: 23px;
+}
+.paginate_disabled_previous {
+    background: url("../images/back_disabled.png") no-repeat scroll left top transparent;
+}
+.paginate_enabled_previous {
+    background: url("../images/back_enabled.png") no-repeat scroll left top transparent;
+}
+.paginate_enabled_previous:hover {
+    background: url("../images/back_enabled_hover.png") no-repeat scroll left top transparent;
+}
+.paginate_disabled_next {
+    background: url("../images/forward_disabled.png") no-repeat scroll right top transparent;
+}
+.paginate_enabled_next {
+    background: url("../images/forward_enabled.png") no-repeat scroll right top transparent;
+}
+.paginate_enabled_next:hover {
+    background: url("../images/forward_enabled_hover.png") no-repeat scroll right top transparent;
+}
+table.display {
+    clear: both;
+    margin: 0 auto;
+    width: 100%;
+}
+table.display thead th {
+    border-bottom: 1px solid black;
+    cursor: pointer;
+    font-weight: bold;
+    padding: 3px 18px 3px 10px;
+}
+table.display tfoot th {
+    border-top: 1px solid black;
+    font-weight: bold;
+    padding: 3px 18px 3px 10px;
+}
+table.display tr.heading2 td {
+    border-bottom: 1px solid #AAAAAA;
+}
+table.display td {
+    padding: 3px 10px;
+}
+table.display td.center {
+    text-align: center;
+}
+.sorting_asc {
+    background: url("../images/sort_asc.png") no-repeat scroll right center transparent;
+}
+.sorting_desc {
+    background: url("../images/sort_desc.png") no-repeat scroll right center transparent;
+}
+.sorting {
+    background: url("../images/sort_both.png") no-repeat scroll right center transparent;
+}
+.sorting_asc_disabled {
+    background: url("../images/sort_asc_disabled.png") no-repeat scroll right center transparent;
+}
+.sorting_desc_disabled {
+    background: url("../images/sort_desc_disabled.png") no-repeat scroll right center transparent;
+}
+th:active {
+    outline: medium none;
+}
+table.display tr.odd.gradeA {
+    background-color: #DDFFDD;
+}
+table.display tr.even.gradeA {
+    background-color: #EEFFEE;
+}
+table.display tr.odd.gradeC {
+    background-color: #DDDDFF;
+}
+table.display tr.even.gradeC {
+    background-color: #EEEEFF;
+}
+table.display tr.odd.gradeX {
+    background-color: #FFDDDD;
+}
+table.display tr.even.gradeX {
+    background-color: #FFEEEE;
+}
+table.display tr.odd.gradeU {
+    background-color: #DDDDDD;
+}
+table.display tr.even.gradeU {
+    background-color: #EEEEEE;
+}
+tr.odd {
+    background-color: #E2E4FF;
+}
+tr.even {
+    background-color: white;
+}
+.dataTables_scroll {
+    clear: both;
+}
+.dataTables_scrollBody {
+}
+.top, .bottom {
+    background-color: #F5F5F5;
+    border: 1px solid #CCCCCC;
+    padding: 15px;
+}
+.top .dataTables_info {
+    float: none;
+}
+.clear {
+    clear: both;
+}
+.dataTables_empty {
+    text-align: center;
+}
+tfoot input {
+    color: #444444;
+    margin: 0.5em 0;
+    width: 100%;
+}
+tfoot input.search_init {
+    color: #999999;
+}
+td.group {
+    background-color: #D1CFD0;
+    border-bottom: 2px solid #A19B9E;
+    border-top: 2px solid #A19B9E;
+}
+td.details {
+    background-color: #D1CFD0;
+    border: 2px solid #A19B9E;
+}
+.example_alt_pagination div.dataTables_info {
+    width: 40%;
+}
+.paging_full_numbers {
+    height: 22px;
+    line-height: 22px;
+    width: 400px;
+}
+.paging_full_numbers a:active {
+    outline: medium none;
+}
+.paging_full_numbers a:hover {
+    text-decoration: none;
+}
+.paging_full_numbers a.paginate_button, .paging_full_numbers a.paginate_active {
+    border: 1px solid #AAAAAA;
+    border-radius: 5px 5px 5px 5px;
+    color: #333333 !important;
+    cursor: pointer;
+    margin: 0 3px;
+    padding: 2px 5px;
+}
+.paging_full_numbers a.paginate_button {
+    background-color: #DDDDDD;
+}
+.paging_full_numbers a.paginate_button:hover {
+    background-color: #CCCCCC;
+    text-decoration: none !important;
+}
+.paging_full_numbers a.paginate_active {
+    background-color: #99B3FF;
+}
+table.display tr.even.row_selected td {
+    background-color: #B0BED9;
+}
+table.display tr.odd.row_selected td {
+    background-color: #9FAFD1;
+}
+tr.odd td.sorting_1 {
+    background-color: #D3D6FF;
+}
+tr.odd td.sorting_2 {
+    background-color: #DADCFF;
+}
+tr.odd td.sorting_3 {
+    background-color: #E0E2FF;
+}
+tr.even td.sorting_1 {
+    background-color: #EAEBFF;
+}
+tr.even td.sorting_2 {
+    background-color: #F2F3FF;
+}
+tr.even td.sorting_3 {
+    background-color: #F9F9FF;
+}
+tr.odd.gradeA td.sorting_1 {
+    background-color: #C4FFC4;
+}
+tr.odd.gradeA td.sorting_2 {
+    background-color: #D1FFD1;
+}
+tr.odd.gradeA td.sorting_3 {
+    background-color: #D1FFD1;
+}
+tr.even.gradeA td.sorting_1 {
+    background-color: #D5FFD5;
+}
+tr.even.gradeA td.sorting_2 {
+    background-color: #E2FFE2;
+}
+tr.even.gradeA td.sorting_3 {
+    background-color: #E2FFE2;
+}
+tr.odd.gradeC td.sorting_1 {
+    background-color: #C4C4FF;
+}
+tr.odd.gradeC td.sorting_2 {
+    background-color: #D1D1FF;
+}
+tr.odd.gradeC td.sorting_3 {
+    background-color: #D1D1FF;
+}
+tr.even.gradeC td.sorting_1 {
+    background-color: #D5D5FF;
+}
+tr.even.gradeC td.sorting_2 {
+    background-color: #E2E2FF;
+}
+tr.even.gradeC td.sorting_3 {
+    background-color: #E2E2FF;
+}
+tr.odd.gradeX td.sorting_1 {
+    background-color: #FFC4C4;
+}
+tr.odd.gradeX td.sorting_2 {
+    background-color: #FFD1D1;
+}
+tr.odd.gradeX td.sorting_3 {
+    background-color: #FFD1D1;
+}
+tr.even.gradeX td.sorting_1 {
+    background-color: #FFD5D5;
+}
+tr.even.gradeX td.sorting_2 {
+    background-color: #FFE2E2;
+}
+tr.even.gradeX td.sorting_3 {
+    background-color: #FFE2E2;
+}
+tr.odd.gradeU td.sorting_1 {
+    background-color: #C4C4C4;
+}
+tr.odd.gradeU td.sorting_2 {
+    background-color: #D1D1D1;
+}
+tr.odd.gradeU td.sorting_3 {
+    background-color: #D1D1D1;
+}
+tr.even.gradeU td.sorting_1 {
+    background-color: #D5D5D5;
+}
+tr.even.gradeU td.sorting_2 {
+    background-color: #E2E2E2;
+}
+tr.even.gradeU td.sorting_3 {
+    background-color: #E2E2E2;
+}
+.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted {
+    background-color: #ECFFB3;
+}
+.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted {
+    background-color: #E6FF99;
+}
+.ex_highlight_row #example tr.even:hover {
+    background-color: #ECFFB3;
+}
+.ex_highlight_row #example tr.even:hover td.sorting_1 {
+    background-color: #DDFF75;
+}
+.ex_highlight_row #example tr.even:hover td.sorting_2 {
+    background-color: #E7FF9E;
+}
+.ex_highlight_row #example tr.even:hover td.sorting_3 {
+    background-color: #E2FF89;
+}
+.ex_highlight_row #example tr.odd:hover {
+    background-color: #E6FF99;
+}
+.ex_highlight_row #example tr.odd:hover td.sorting_1 {
+    background-color: #D6FF5C;
+}
+.ex_highlight_row #example tr.odd:hover td.sorting_2 {
+    background-color: #E0FF84;
+}
+.ex_highlight_row #example tr.odd:hover td.sorting_3 {
+    background-color: #DBFF70;
+}
+table.KeyTable td {
+    border: 3px solid transparent;
+}
+table.KeyTable td.focus {
+    border: 3px solid #3366FF;
+}
+table.display tr.gradeA {
+    background-color: #EEFFEE;
+}
+table.display tr.gradeC {
+    background-color: #DDDDFF;
+}
+table.display tr.gradeX {
+    background-color: #FFDDDD;
+}
+table.display tr.gradeU {
+    background-color: #DDDDDD;
+}
+div.box {
+    background-color: #E5E5FF;
+    border: 1px solid #8080FF;
+    height: 100px;
+    overflow: auto;
+    padding: 10px;
+}
+
+.number_range_filter {
+    width: 20px;
+}
+.date_range_filter {
+    width: 5.5em;
+}
+.search_init {
+    color: #999999;
+}
diff --git a/astropy/table/data/jquery-1.10.2.min.js b/astropy/table/data/jquery-1.10.2.min.js
new file mode 100644
index 0000000..da41706
--- /dev/null
+++ b/astropy/table/data/jquery-1.10.2.min.js
@@ -0,0 +1,6 @@
+/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
+//@ sourceMappingURL=jquery-1.10.2.min.map
+*/
+(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/ [...]
+}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null [...]
+u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.first [...]
diff --git a/astropy/table/data/jquery-ui.css b/astropy/table/data/jquery-ui.css
new file mode 100644
index 0000000..2c5981a
--- /dev/null
+++ b/astropy/table/data/jquery-ui.css
@@ -0,0 +1,1177 @@
+/*! jQuery UI - v1.10.3 - 2013-05-03
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDe [...]
+* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-clearfix {
+	min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0);
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-accordion .ui-accordion-header {
+	display: block;
+	cursor: pointer;
+	position: relative;
+	margin-top: 2px;
+	padding: .5em .5em .5em .7em;
+	min-height: 0; /* support: IE7 */
+}
+.ui-accordion .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-noicons {
+	padding-left: .7em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+	position: absolute;
+	left: .5em;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+	padding: 1em 2.2em;
+	border-top: 0;
+	overflow: auto;
+}
+.ui-autocomplete {
+	position: absolute;
+	top: 0;
+	left: 0;
+	cursor: default;
+}
+.ui-button {
+	display: inline-block;
+	position: relative;
+	padding: 0;
+	line-height: normal;
+	margin-right: .1em;
+	cursor: pointer;
+	vertical-align: middle;
+	text-align: center;
+	overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+	text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+	width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+	width: 2.4em;
+}
+.ui-button-icons-only {
+	width: 3.4em;
+}
+button.ui-button-icons-only {
+	width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+	display: block;
+	line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+	padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+	padding: .4em;
+	text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+	padding-left: 2.1em;
+	padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+	padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+	position: absolute;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+	left: 50%;
+	margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+	left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+	right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+	margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+	margin-left: 1px;
+	margin-right: 1px;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+	border: 0;
+	padding: 0;
+}
+.ui-datepicker {
+	width: 17em;
+	padding: .2em .2em 0;
+	display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+	position: relative;
+	padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+	position: absolute;
+	top: 2px;
+	width: 1.8em;
+	height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+	top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+	left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+	right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+	left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+	right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+	display: block;
+	position: absolute;
+	left: 50%;
+	margin-left: -8px;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+	margin: 0 2.3em;
+	line-height: 1.8em;
+	text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+	font-size: 1em;
+	margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month-year {
+	width: 100%;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+	width: 49%;
+}
+.ui-datepicker table {
+	width: 100%;
+	font-size: .9em;
+	border-collapse: collapse;
+	margin: 0 0 .4em;
+}
+.ui-datepicker th {
+	padding: .7em .3em;
+	text-align: center;
+	font-weight: bold;
+	border: 0;
+}
+.ui-datepicker td {
+	border: 0;
+	padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+	display: block;
+	padding: .2em;
+	text-align: right;
+	text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+	background-image: none;
+	margin: .7em 0 0 0;
+	padding: 0 .2em;
+	border-left: 0;
+	border-right: 0;
+	border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+	float: right;
+	margin: .5em .2em .4em;
+	cursor: pointer;
+	padding: .2em .6em .3em .6em;
+	width: auto;
+	overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+	float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+	width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+	float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+	width: 95%;
+	margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+	width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+	width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+	width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+	border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+	clear: left;
+}
+.ui-datepicker-row-break {
+	clear: both;
+	width: 100%;
+	font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+	direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+	right: 2px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+	left: 2px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+	right: 1px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+	left: 1px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+	clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+	float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+	float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+	border-right-width: 0;
+	border-left-width: 1px;
+}
+.ui-dialog {
+	position: absolute;
+	top: 0;
+	left: 0;
+	padding: .2em;
+	outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+	padding: .4em 1em;
+	position: relative;
+}
+.ui-dialog .ui-dialog-title {
+	float: left;
+	margin: .1em 0;
+	white-space: nowrap;
+	width: 90%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+	position: absolute;
+	right: .3em;
+	top: 50%;
+	width: 21px;
+	margin: -10px 0 0 0;
+	padding: 1px;
+	height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+	position: relative;
+	border: 0;
+	padding: .5em 1em;
+	background: none;
+	overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+	text-align: left;
+	border-width: 1px 0 0 0;
+	background-image: none;
+	margin-top: .5em;
+	padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+	float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+	margin: .5em .4em .5em 0;
+	cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+	width: 12px;
+	height: 12px;
+	right: -5px;
+	bottom: -5px;
+	background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+	cursor: move;
+}
+.ui-menu {
+	list-style: none;
+	padding: 2px;
+	margin: 0;
+	display: block;
+	outline: none;
+}
+.ui-menu .ui-menu {
+	margin-top: -3px;
+	position: absolute;
+}
+.ui-menu .ui-menu-item {
+	margin: 0;
+	padding: 0;
+	width: 100%;
+	/* support: IE10, see #8844 */
+	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+}
+.ui-menu .ui-menu-divider {
+	margin: 5px -2px 5px -2px;
+	height: 0;
+	font-size: 0;
+	line-height: 0;
+	border-width: 1px 0 0 0;
+}
+.ui-menu .ui-menu-item a {
+	text-decoration: none;
+	display: block;
+	padding: 2px .4em;
+	line-height: 1.5;
+	min-height: 0; /* support: IE7 */
+	font-weight: normal;
+}
+.ui-menu .ui-menu-item a.ui-state-focus,
+.ui-menu .ui-menu-item a.ui-state-active {
+	font-weight: normal;
+	margin: -1px;
+}
+
+.ui-menu .ui-state-disabled {
+	font-weight: normal;
+	margin: .4em 0 .2em;
+	line-height: 1.5;
+}
+.ui-menu .ui-state-disabled a {
+	cursor: default;
+}
+
+/* icon support */
+.ui-menu-icons {
+	position: relative;
+}
+.ui-menu-icons .ui-menu-item a {
+	position: relative;
+	padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+	position: absolute;
+	top: .2em;
+	left: .2em;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+	position: static;
+	float: right;
+}
+.ui-progressbar {
+	height: 2em;
+	text-align: left;
+	overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+	margin: -1px;
+	height: 100%;
+}
+.ui-progressbar .ui-progressbar-overlay {
+	background: url("images/animated-overlay.gif");
+	height: 100%;
+	filter: alpha(opacity=25);
+	opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+	background-image: none;
+}
+.ui-resizable {
+	position: relative;
+}
+.ui-resizable-handle {
+	position: absolute;
+	font-size: 0.1px;
+	display: block;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+	display: none;
+}
+.ui-resizable-n {
+	cursor: n-resize;
+	height: 7px;
+	width: 100%;
+	top: -5px;
+	left: 0;
+}
+.ui-resizable-s {
+	cursor: s-resize;
+	height: 7px;
+	width: 100%;
+	bottom: -5px;
+	left: 0;
+}
+.ui-resizable-e {
+	cursor: e-resize;
+	width: 7px;
+	right: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-w {
+	cursor: w-resize;
+	width: 7px;
+	left: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-se {
+	cursor: se-resize;
+	width: 12px;
+	height: 12px;
+	right: 1px;
+	bottom: 1px;
+}
+.ui-resizable-sw {
+	cursor: sw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	bottom: -5px;
+}
+.ui-resizable-nw {
+	cursor: nw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	top: -5px;
+}
+.ui-resizable-ne {
+	cursor: ne-resize;
+	width: 9px;
+	height: 9px;
+	right: -5px;
+	top: -5px;
+}
+.ui-selectable-helper {
+	position: absolute;
+	z-index: 100;
+	border: 1px dotted black;
+}
+.ui-slider {
+	position: relative;
+	text-align: left;
+}
+.ui-slider .ui-slider-handle {
+	position: absolute;
+	z-index: 2;
+	width: 1.2em;
+	height: 1.2em;
+	cursor: default;
+}
+.ui-slider .ui-slider-range {
+	position: absolute;
+	z-index: 1;
+	font-size: .7em;
+	display: block;
+	border: 0;
+	background-position: 0 0;
+}
+
+/* For IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+	filter: inherit;
+}
+
+.ui-slider-horizontal {
+	height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+	top: -.3em;
+	margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+	top: 0;
+	height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+	left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+	right: 0;
+}
+
+.ui-slider-vertical {
+	width: .8em;
+	height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+	left: -.3em;
+	margin-left: 0;
+	margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+	left: 0;
+	width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+	bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+	top: 0;
+}
+.ui-spinner {
+	position: relative;
+	display: inline-block;
+	overflow: hidden;
+	padding: 0;
+	vertical-align: middle;
+}
+.ui-spinner-input {
+	border: none;
+	background: none;
+	color: inherit;
+	padding: 0;
+	margin: .2em 0;
+	vertical-align: middle;
+	margin-left: .4em;
+	margin-right: 22px;
+}
+.ui-spinner-button {
+	width: 16px;
+	height: 50%;
+	font-size: .5em;
+	padding: 0;
+	margin: 0;
+	text-align: center;
+	position: absolute;
+	cursor: default;
+	display: block;
+	overflow: hidden;
+	right: 0;
+}
+/* more specificity required here to overide default borders */
+.ui-spinner a.ui-spinner-button {
+	border-top: none;
+	border-bottom: none;
+	border-right: none;
+}
+/* vertical centre icon */
+.ui-spinner .ui-icon {
+	position: absolute;
+	margin-top: -8px;
+	top: 50%;
+	left: 0;
+}
+.ui-spinner-up {
+	top: 0;
+}
+.ui-spinner-down {
+	bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+	/* need to fix icons sprite */
+	background-position: -65px -16px;
+}
+.ui-tabs {
+	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+	padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+	margin: 0;
+	padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+	list-style: none;
+	float: left;
+	position: relative;
+	top: 0;
+	margin: 1px .2em 0 0;
+	border-bottom-width: 0;
+	padding: 0;
+	white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav li a {
+	float: left;
+	padding: .5em 1em;
+	text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+	margin-bottom: -1px;
+	padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
+	cursor: text;
+}
+.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
+	cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+	display: block;
+	border-width: 0;
+	padding: 1em 1.4em;
+	background: none;
+}
+.ui-tooltip {
+	padding: 8px;
+	position: absolute;
+	z-index: 9999;
+	max-width: 300px;
+	-webkit-box-shadow: 0 0 5px #aaa;
+	box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+	border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Verdana,Arial,sans-serif;
+	font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Verdana,Arial,sans-serif;
+	font-size: 1em;
+}
+.ui-widget-content {
+	border: 1px solid #aaaaaa;
+	background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;
+	color: #222222;
+}
+.ui-widget-content a {
+	color: #222222;
+}
+.ui-widget-header {
+	border: 1px solid #aaaaaa;
+	background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;
+	color: #222222;
+	font-weight: bold;
+}
+.ui-widget-header a {
+	color: #222222;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+	border: 1px solid #d3d3d3;
+	background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;
+	font-weight: normal;
+	color: #555555;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+	color: #555555;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+	border: 1px solid #999999;
+	background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;
+	font-weight: normal;
+	color: #212121;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited {
+	color: #212121;
+	text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+	border: 1px solid #aaaaaa;
+	background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
+	font-weight: normal;
+	color: #212121;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #212121;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #fcefa1;
+	background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;
+	color: #363636;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #363636;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #cd0a0a;
+	background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;
+	color: #cd0a0a;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #cd0a0a;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #cd0a0a;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70);
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35);
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url(images/ui-icons_222222_256x240.png);
+}
+.ui-widget-header .ui-icon {
+	background-image: url(images/ui-icons_222222_256x240.png);
+}
+.ui-state-default .ui-icon {
+	background-image: url(images/ui-icons_888888_256x240.png);
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+	background-image: url(images/ui-icons_454545_256x240.png);
+}
+.ui-state-active .ui-icon {
+	background-image: url(images/ui-icons_454545_256x240.png);
+}
+.ui-state-highlight .ui-icon {
+	background-image: url(images/ui-icons_2e83ff_256x240.png);
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url(images/ui-icons_cd0a0a_256x240.png);
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 4px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
+	opacity: .3;
+	filter: Alpha(Opacity=30);
+}
+.ui-widget-shadow {
+	margin: -8px 0 0 -8px;
+	padding: 8px;
+	background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
+	opacity: .3;
+	filter: Alpha(Opacity=30);
+	border-radius: 8px;
+}
diff --git a/astropy/table/data/jquery.dataTables.min.js b/astropy/table/data/jquery.dataTables.min.js
new file mode 100644
index 0000000..a2405bf
--- /dev/null
+++ b/astropy/table/data/jquery.dataTables.min.js
@@ -0,0 +1,157 @@
+/*
+ * File:        jquery.dataTables.min.js
+ * Version:     1.9.4
+ * Author:      Allan Jardine (www.sprymedia.co.uk)
+ * Info:        www.datatables.net
+ * 
+ * Copyright 2008-2012 Allan Jardine, all rights reserved.
+ *
+ * This source file is free software, under either the GPL v2 license or a
+ * BSD style license, available at:
+ *   http://datatables.net/license_gpl2
+ *   http://datatables.net/license_bsd
+ * 
+ * This source file is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
+ */
+(function(la,s,p){(function(i){if(typeof define==="function"&&define.amd)define(["jquery"],i);else jQuery&&!jQuery.fn.dataTable&&i(jQuery)})(function(i){var l=function(h){function n(a,b){var c=l.defaults.columns,d=a.aoColumns.length;b=i.extend({},l.models.oColumn,c,{sSortingClass:a.oClasses.sSortable,sSortingClassJUI:a.oClasses.sSortJUI,nTh:b?b:s.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.oDefaults:d});a.aoColumns.p [...]
+p||a.aoPreSearchCols[d]===null)a.aoPreSearchCols[d]=i.extend({},l.models.oSearch);else{b=a.aoPreSearchCols[d];if(b.bRegex===p)b.bRegex=true;if(b.bSmart===p)b.bSmart=true;if(b.bCaseInsensitive===p)b.bCaseInsensitive=true}q(a,d,null)}function q(a,b,c){var d=a.aoColumns[b];if(c!==p&&c!==null){if(c.mDataProp&&!c.mData)c.mData=c.mDataProp;if(c.sType!==p){d.sType=c.sType;d._bAutoType=false}i.extend(d,c);r(d,c,"sWidth","sWidthOrig");if(c.iDataSort!==p)d.aDataSort=[c.iDataSort];r(d,c,"aDataSort" [...]
+ca(d.mRender):null,f=ca(d.mData);d.fnGetData=function(g,j){var k=f(g,j);if(d.mRender&&j&&j!=="")return e(k,j,g);return k};d.fnSetData=Ja(d.mData);if(!a.oFeatures.bSort)d.bSortable=false;if(!d.bSortable||i.inArray("asc",d.asSorting)==-1&&i.inArray("desc",d.asSorting)==-1){d.sSortingClass=a.oClasses.sSortableNone;d.sSortingClassJUI=""}else if(i.inArray("asc",d.asSorting)==-1&&i.inArray("desc",d.asSorting)==-1){d.sSortingClass=a.oClasses.sSortable;d.sSortingClassJUI=a.oClasses.sSortJUI}else [...]
+d.asSorting)!=-1&&i.inArray("desc",d.asSorting)==-1){d.sSortingClass=a.oClasses.sSortableAsc;d.sSortingClassJUI=a.oClasses.sSortJUIAscAllowed}else if(i.inArray("asc",d.asSorting)==-1&&i.inArray("desc",d.asSorting)!=-1){d.sSortingClass=a.oClasses.sSortableDesc;d.sSortingClassJUI=a.oClasses.sSortJUIDescAllowed}}function o(a){if(a.oFeatures.bAutoWidth===false)return false;ta(a);for(var b=0,c=a.aoColumns.length;b<c;b++)a.aoColumns[b].nTh.style.width=a.aoColumns[b].sWidth}function v(a,b){a=A( [...]
+return typeof a[b]==="number"?a[b]:null}function w(a,b){a=A(a,"bVisible");b=i.inArray(b,a);return b!==-1?b:null}function D(a){return A(a,"bVisible").length}function A(a,b){var c=[];i.map(a.aoColumns,function(d,e){d[b]&&c.push(e)});return c}function G(a){for(var b=l.ext.aTypes,c=b.length,d=0;d<c;d++){var e=b[d](a);if(e!==null)return e}return"string"}function E(a,b){b=b.split(",");for(var c=[],d=0,e=a.aoColumns.length;d<e;d++)for(var f=0;f<e;f++)if(a.aoColumns[d].sName==b[f]){c.push(f);bre [...]
+function Y(a){for(var b="",c=0,d=a.aoColumns.length;c<d;c++)b+=a.aoColumns[c].sName+",";if(b.length==d)return"";return b.slice(0,-1)}function ma(a,b,c,d){var e,f,g,j,k;if(b)for(e=b.length-1;e>=0;e--){var m=b[e].aTargets;i.isArray(m)||O(a,1,"aTargets must be an array of targets, not a "+typeof m);f=0;for(g=m.length;f<g;f++)if(typeof m[f]==="number"&&m[f]>=0){for(;a.aoColumns.length<=m[f];)n(a);d(m[f],b[e])}else if(typeof m[f]==="number"&&m[f]<0)d(a.aoColumns.length+m[f],b[e]);else if(type [...]
+"string"){j=0;for(k=a.aoColumns.length;j<k;j++)if(m[f]=="_all"||i(a.aoColumns[j].nTh).hasClass(m[f]))d(j,b[e])}}if(c){e=0;for(a=c.length;e<a;e++)d(e,c[e])}}function R(a,b){var c;c=i.isArray(b)?b.slice():i.extend(true,{},b);b=a.aoData.length;var d=i.extend(true,{},l.models.oRow);d._aData=c;a.aoData.push(d);var e;d=0;for(var f=a.aoColumns.length;d<f;d++){c=a.aoColumns[d];typeof c.fnRender==="function"&&c.bUseRendered&&c.mData!==null?S(a,b,d,da(a,b,d)):S(a,b,d,F(a,b,d));if(c._bAutoType&&c.s [...]
+F(a,b,d,"type");if(e!==null&&e!==""){e=G(e);if(c.sType===null)c.sType=e;else if(c.sType!=e&&c.sType!="html")c.sType="string"}}}a.aiDisplayMaster.push(b);a.oFeatures.bDeferRender||ua(a,b);return b}function ea(a){var b,c,d,e,f,g,j;if(a.bDeferLoading||a.sAjaxSource===null)for(b=a.nTBody.firstChild;b;){if(b.nodeName.toUpperCase()=="TR"){c=a.aoData.length;b._DT_RowIndex=c;a.aoData.push(i.extend(true,{},l.models.oRow,{nTr:b}));a.aiDisplayMaster.push(c);f=b.firstChild;for(d=0;f;){g=f.nodeName.t [...]
+if(g=="TD"||g=="TH"){S(a,c,d,i.trim(f.innerHTML));d++}f=f.nextSibling}}b=b.nextSibling}e=fa(a);d=[];b=0;for(c=e.length;b<c;b++)for(f=e[b].firstChild;f;){g=f.nodeName.toUpperCase();if(g=="TD"||g=="TH")d.push(f);f=f.nextSibling}c=0;for(e=a.aoColumns.length;c<e;c++){j=a.aoColumns[c];if(j.sTitle===null)j.sTitle=j.nTh.innerHTML;var k=j._bAutoType,m=typeof j.fnRender==="function",u=j.sClass!==null,x=j.bVisible,y,B;if(k||m||u||!x){g=0;for(b=a.aoData.length;g<b;g++){f=a.aoData[g];y=d[g*e+c];if(k [...]
+"string"){B=F(a,g,c,"type");if(B!==""){B=G(B);if(j.sType===null)j.sType=B;else if(j.sType!=B&&j.sType!="html")j.sType="string"}}if(j.mRender)y.innerHTML=F(a,g,c,"display");else if(j.mData!==c)y.innerHTML=F(a,g,c,"display");if(m){B=da(a,g,c);y.innerHTML=B;j.bUseRendered&&S(a,g,c,B)}if(u)y.className+=" "+j.sClass;if(x)f._anHidden[c]=null;else{f._anHidden[c]=y;y.parentNode.removeChild(y)}j.fnCreatedCell&&j.fnCreatedCell.call(a.oInstance,y,F(a,g,c,"display"),f._aData,g,c)}}}if(a.aoRowCreated [...]
+0){b=0;for(c=a.aoData.length;b<c;b++){f=a.aoData[b];K(a,"aoRowCreatedCallback",null,[f.nTr,f._aData,b])}}}function V(a,b){return b._DT_RowIndex!==p?b._DT_RowIndex:null}function va(a,b,c){b=W(a,b);var d=0;for(a=a.aoColumns.length;d<a;d++)if(b[d]===c)return d;return-1}function na(a,b,c,d){for(var e=[],f=0,g=d.length;f<g;f++)e.push(F(a,b,d[f],c));return e}function F(a,b,c,d){var e=a.aoColumns[c];if((c=e.fnGetData(a.aoData[b]._aData,d))===p){if(a.iDrawError!=a.iDraw&&e.sDefaultContent===null [...]
+(typeof e.mData=="function"?"{mData function}":"'"+e.mData+"'")+" from the data source for row "+b);a.iDrawError=a.iDraw}return e.sDefaultContent}if(c===null&&e.sDefaultContent!==null)c=e.sDefaultContent;else if(typeof c==="function")return c();if(d=="display"&&c===null)return"";return c}function S(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d)}function ca(a){if(a===null)return function(){return null};else if(typeof a==="function")return function(c,d,e){return a(c,d,e)};else if( [...]
+"string"&&(a.indexOf(".")!==-1||a.indexOf("[")!==-1)){var b=function(c,d,e){var f=e.split("."),g;if(e!==""){var j=0;for(g=f.length;j<g;j++){if(e=f[j].match(ga)){f[j]=f[j].replace(ga,"");if(f[j]!=="")c=c[f[j]];g=[];f.splice(0,j+1);f=f.join(".");j=0;for(var k=c.length;j<k;j++)g.push(b(c[j],d,f));c=e[0].substring(1,e[0].length-1);c=c===""?g:g.join(c);break}if(c===null||c[f[j]]===p)return p;c=c[f[j]]}}return c};return function(c,d){return b(c,d,a)}}else return function(c){return c[a]}}functi [...]
+null)return function(){};else if(typeof a==="function")return function(c,d){a(c,"set",d)};else if(typeof a==="string"&&(a.indexOf(".")!==-1||a.indexOf("[")!==-1)){var b=function(c,d,e){e=e.split(".");var f,g,j=0;for(g=e.length-1;j<g;j++){if(f=e[j].match(ga)){e[j]=e[j].replace(ga,"");c[e[j]]=[];f=e.slice();f.splice(0,j+1);g=f.join(".");for(var k=0,m=d.length;k<m;k++){f={};b(f,d[k],g);c[e[j]].push(f)}return}if(c[e[j]]===null||c[e[j]]===p)c[e[j]]={};c=c[e[j]]}c[e[e.length-1].replace(ga,"")] [...]
+d){return b(c,d,a)}}else return function(c,d){c[a]=d}}function oa(a){for(var b=[],c=a.aoData.length,d=0;d<c;d++)b.push(a.aoData[d]._aData);return b}function wa(a){a.aoData.splice(0,a.aoData.length);a.aiDisplayMaster.splice(0,a.aiDisplayMaster.length);a.aiDisplay.splice(0,a.aiDisplay.length);I(a)}function xa(a,b){for(var c=-1,d=0,e=a.length;d<e;d++)if(a[d]==b)c=d;else a[d]>b&&a[d]--;c!=-1&&a.splice(c,1)}function da(a,b,c){var d=a.aoColumns[c];return d.fnRender({iDataRow:b,iDataColumn:c,oS [...]
+aData:a.aoData[b]._aData,mDataProp:d.mData},F(a,b,c,"display"))}function ua(a,b){var c=a.aoData[b],d;if(c.nTr===null){c.nTr=s.createElement("tr");c.nTr._DT_RowIndex=b;if(c._aData.DT_RowId)c.nTr.id=c._aData.DT_RowId;if(c._aData.DT_RowClass)c.nTr.className=c._aData.DT_RowClass;for(var e=0,f=a.aoColumns.length;e<f;e++){var g=a.aoColumns[e];d=s.createElement(g.sCellType);d.innerHTML=typeof g.fnRender==="function"&&(!g.bUseRendered||g.mData===null)?da(a,b,e):F(a,b,e,"display");if(g.sClass!==n [...]
+g.sClass;if(g.bVisible){c.nTr.appendChild(d);c._anHidden[e]=null}else c._anHidden[e]=d;g.fnCreatedCell&&g.fnCreatedCell.call(a.oInstance,d,F(a,b,e,"display"),c._aData,b,e)}K(a,"aoRowCreatedCallback",null,[c.nTr,c._aData,b])}}function Ka(a){var b,c,d;if(i("th, td",a.nTHead).length!==0){b=0;for(d=a.aoColumns.length;b<d;b++){c=a.aoColumns[b].nTh;c.setAttribute("role","columnheader");if(a.aoColumns[b].bSortable){c.setAttribute("tabindex",a.iTabIndex);c.setAttribute("aria-controls",a.sTableId [...]
+null&&i(c).addClass(a.aoColumns[b].sClass);if(a.aoColumns[b].sTitle!=c.innerHTML)c.innerHTML=a.aoColumns[b].sTitle}}else{var e=s.createElement("tr");b=0;for(d=a.aoColumns.length;b<d;b++){c=a.aoColumns[b].nTh;c.innerHTML=a.aoColumns[b].sTitle;c.setAttribute("tabindex","0");a.aoColumns[b].sClass!==null&&i(c).addClass(a.aoColumns[b].sClass);e.appendChild(c)}i(a.nTHead).html("")[0].appendChild(e);ha(a.aoHeader,a.nTHead)}i(a.nTHead).children("tr").attr("role","row");if(a.bJUI){b=0;for(d=a.aoC [...]
+d;b++){c=a.aoColumns[b].nTh;e=s.createElement("div");e.className=a.oClasses.sSortJUIWrapper;i(c).contents().appendTo(e);var f=s.createElement("span");f.className=a.oClasses.sSortIcon;e.appendChild(f);c.appendChild(e)}}if(a.oFeatures.bSort)for(b=0;b<a.aoColumns.length;b++)a.aoColumns[b].bSortable!==false?ya(a,a.aoColumns[b].nTh,b):i(a.aoColumns[b].nTh).addClass(a.oClasses.sSortableNone);a.oClasses.sFooterTH!==""&&i(a.nTFoot).children("tr").children("th").addClass(a.oClasses.sFooterTH);if( [...]
+null){c=Z(a,null,a.aoFooter);b=0;for(d=a.aoColumns.length;b<d;b++)if(c[b]){a.aoColumns[b].nTf=c[b];a.aoColumns[b].sClass&&i(c[b]).addClass(a.aoColumns[b].sClass)}}}function ia(a,b,c){var d,e,f,g=[],j=[],k=a.aoColumns.length,m;if(c===p)c=false;d=0;for(e=b.length;d<e;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(f=k-1;f>=0;f--)!a.aoColumns[f].bVisible&&!c&&g[d].splice(f,1);j.push([])}d=0;for(e=g.length;d<e;d++){if(a=g[d].nTr)for(;f=a.firstChild;)a.removeChild(f);f=0;for(b=g[d].length;f<b;f+ [...]
+if(j[d][f]===p){a.appendChild(g[d][f].cell);for(j[d][f]=1;g[d+k]!==p&&g[d][f].cell==g[d+k][f].cell;){j[d+k][f]=1;k++}for(;g[d][f+m]!==p&&g[d][f].cell==g[d][f+m].cell;){for(c=0;c<k;c++)j[d+c][f+m]=1;m++}g[d][f].cell.rowSpan=k;g[d][f].cell.colSpan=m}}}}function H(a){var b=K(a,"aoPreDrawCallback","preDraw",[a]);if(i.inArray(false,b)!==-1)P(a,false);else{var c,d;b=[];var e=0,f=a.asStripeClasses.length;c=a.aoOpenRows.length;a.bDrawing=true;if(a.iInitDisplayStart!==p&&a.iInitDisplayStart!=-1){ [...]
+a.oFeatures.bServerSide?a.iInitDisplayStart:a.iInitDisplayStart>=a.fnRecordsDisplay()?0:a.iInitDisplayStart;a.iInitDisplayStart=-1;I(a)}if(a.bDeferLoading){a.bDeferLoading=false;a.iDraw++}else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!La(a))return}else a.iDraw++;if(a.aiDisplay.length!==0){var g=a._iDisplayStart;d=a._iDisplayEnd;if(a.oFeatures.bServerSide){g=0;d=a.aoData.length}for(g=g;g<d;g++){var j=a.aoData[a.aiDisplay[g]];j.nTr===null&&ua(a,a.aiDisplay[g]);var k=j.nTr;if(f!==0){v [...]
+f];if(j._sRowStripe!=m){i(k).removeClass(j._sRowStripe).addClass(m);j._sRowStripe=m}}K(a,"aoRowCallback",null,[k,a.aoData[a.aiDisplay[g]]._aData,e,g]);b.push(k);e++;if(c!==0)for(j=0;j<c;j++)if(k==a.aoOpenRows[j].nParent){b.push(a.aoOpenRows[j].nTr);break}}}else{b[0]=s.createElement("tr");if(a.asStripeClasses[0])b[0].className=a.asStripeClasses[0];c=a.oLanguage;f=c.sZeroRecords;if(a.iDraw==1&&a.sAjaxSource!==null&&!a.oFeatures.bServerSide)f=c.sLoadingRecords;else if(c.sEmptyTable&&a.fnRec [...]
+0)f=c.sEmptyTable;c=s.createElement("td");c.setAttribute("valign","top");c.colSpan=D(a);c.className=a.oClasses.sRowEmpty;c.innerHTML=za(a,f);b[e].appendChild(c)}K(a,"aoHeaderCallback","header",[i(a.nTHead).children("tr")[0],oa(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay]);K(a,"aoFooterCallback","footer",[i(a.nTFoot).children("tr")[0],oa(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay]);e=s.createDocumentFragment();c=s.createDocumentFragment();if(a.nTBody){f=a.nTBody.parentNode;c.ap [...]
+if(!a.oScroll.bInfinite||!a._bInitComplete||a.bSorted||a.bFiltered)for(;c=a.nTBody.firstChild;)a.nTBody.removeChild(c);c=0;for(d=b.length;c<d;c++)e.appendChild(b[c]);a.nTBody.appendChild(e);f!==null&&f.appendChild(a.nTBody)}K(a,"aoDrawCallback","draw",[a]);a.bSorted=false;a.bFiltered=false;a.bDrawing=false;if(a.oFeatures.bServerSide){P(a,false);a._bInitComplete||pa(a)}}}function qa(a){if(a.oFeatures.bSort)$(a,a.oPreviousSearch);else if(a.oFeatures.bFilter)X(a,a.oPreviousSearch);else{I(a) [...]
+i("<div></div>")[0];a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=i('<div id="'+a.sTableId+'_wrapper" class="'+a.oClasses.sWrapper+'" role="grid"></div>')[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),e,f,g,j,k,m,u,x=0;x<d.length;x++){f=0;g=d[x];if(g=="<"){j=i("<div></div>")[0];k=d[x+1];if(k=="'"||k=='"'){m="";for(u=2;d[x+u]!=k;){m+=d[x+u];u++}if(m=="H")m=a.oClasses.sJUIHeader;else if(m=="F")m=a.oClasses.sJUIFooter;if(m.indexOf [...]
+m.split(".");j.id=k[0].substr(1,k[0].length-1);j.className=k[1]}else if(m.charAt(0)=="#")j.id=m.substr(1,m.length-1);else j.className=m;x+=u}c.appendChild(j);c=j}else if(g==">")c=c.parentNode;else if(g=="l"&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange){e=Na(a);f=1}else if(g=="f"&&a.oFeatures.bFilter){e=Oa(a);f=1}else if(g=="r"&&a.oFeatures.bProcessing){e=Pa(a);f=1}else if(g=="t"){e=Qa(a);f=1}else if(g=="i"&&a.oFeatures.bInfo){e=Ra(a);f=1}else if(g=="p"&&a.oFeatures.bPaginate){e=Sa(a [...]
+0){j=l.ext.aoFeatures;u=0;for(k=j.length;u<k;u++)if(g==j[u].cFeature){if(e=j[u].fnInit(a))f=1;break}}if(f==1&&e!==null){if(typeof a.aanFeatures[g]!=="object")a.aanFeatures[g]=[];a.aanFeatures[g].push(e);c.appendChild(e)}}b.parentNode.replaceChild(a.nTableWrapper,b)}function ha(a,b){b=i(b).children("tr");var c,d,e,f,g,j,k,m,u,x,y=function(B,T,M){for(B=B[T];B[M];)M++;return M};a.splice(0,a.length);e=0;for(j=b.length;e<j;e++)a.push([]);e=0;for(j=b.length;e<j;e++){c=b[e];for(d=c.firstChild;d [...]
+"TD"||d.nodeName.toUpperCase()=="TH"){m=d.getAttribute("colspan")*1;u=d.getAttribute("rowspan")*1;m=!m||m===0||m===1?1:m;u=!u||u===0||u===1?1:u;k=y(a,e,0);x=m===1?true:false;for(g=0;g<m;g++)for(f=0;f<u;f++){a[e+f][k+g]={cell:d,unique:x};a[e+f].nTr=c}}d=d.nextSibling}}}function Z(a,b,c){var d=[];if(!c){c=a.aoHeader;if(b){c=[];ha(c,b)}}b=0;for(var e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)if(c[b][f].unique&&(!d[f]||!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function La(a){if(a [...]
+P(a,true);var b=Ta(a);Aa(a,b);a.fnServerData.call(a.oInstance,a.sAjaxSource,b,function(c){Ua(a,c)},a);return false}else return true}function Ta(a){var b=a.aoColumns.length,c=[],d,e,f,g;c.push({name:"sEcho",value:a.iDraw});c.push({name:"iColumns",value:b});c.push({name:"sColumns",value:Y(a)});c.push({name:"iDisplayStart",value:a._iDisplayStart});c.push({name:"iDisplayLength",value:a.oFeatures.bPaginate!==false?a._iDisplayLength:-1});for(f=0;f<b;f++){d=a.aoColumns[f].mData;c.push({name:"mD [...]
+f,value:typeof d==="function"?"function":d})}if(a.oFeatures.bFilter!==false){c.push({name:"sSearch",value:a.oPreviousSearch.sSearch});c.push({name:"bRegex",value:a.oPreviousSearch.bRegex});for(f=0;f<b;f++){c.push({name:"sSearch_"+f,value:a.aoPreSearchCols[f].sSearch});c.push({name:"bRegex_"+f,value:a.aoPreSearchCols[f].bRegex});c.push({name:"bSearchable_"+f,value:a.aoColumns[f].bSearchable})}}if(a.oFeatures.bSort!==false){var j=0;d=a.aaSortingFixed!==null?a.aaSortingFixed.concat(a.aaSort [...]
+for(f=0;f<d.length;f++){e=a.aoColumns[d[f][0]].aDataSort;for(g=0;g<e.length;g++){c.push({name:"iSortCol_"+j,value:e[g]});c.push({name:"sSortDir_"+j,value:d[f][1]});j++}}c.push({name:"iSortingCols",value:j});for(f=0;f<b;f++)c.push({name:"bSortable_"+f,value:a.aoColumns[f].bSortable})}return c}function Aa(a,b){K(a,"aoServerParams","serverParams",[b])}function Ua(a,b){if(b.sEcho!==p)if(b.sEcho*1<a.iDraw)return;else a.iDraw=b.sEcho*1;if(!a.oScroll.bInfinite||a.oScroll.bInfinite&&(a.bSorted|| [...]
+a._iRecordsTotal=parseInt(b.iTotalRecords,10);a._iRecordsDisplay=parseInt(b.iTotalDisplayRecords,10);var c=Y(a);c=b.sColumns!==p&&c!==""&&b.sColumns!=c;var d;if(c)d=E(a,b.sColumns);b=ca(a.sAjaxDataProp)(b);for(var e=0,f=b.length;e<f;e++)if(c){for(var g=[],j=0,k=a.aoColumns.length;j<k;j++)g.push(b[e][d[j]]);R(a,g)}else R(a,b[e]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=false;H(a);a.bAjaxDataGet=true;P(a,false)}function Oa(a){var b=a.oPreviousSearch,c=a.oLanguage.sSearch;c=c.in [...]
+-1?c.replace("_INPUT_",'<input type="text" />'):c===""?'<input type="text" />':c+' <input type="text" />';var d=s.createElement("div");d.className=a.oClasses.sFilter;d.innerHTML="<label>"+c+"</label>";if(!a.aanFeatures.f)d.id=a.sTableId+"_filter";c=i('input[type="text"]',d);d._DT_Input=c[0];c.val(b.sSearch.replace('"',"""));c.bind("keyup.DT",function(){for(var e=a.aanFeatures.f,f=this.value===""?"":this.value,g=0,j=e.length;g<j;g++)e[g]!=i(this).parents("div.dataTables_filter")[0]&& [...]
+f!=b.sSearch&&X(a,{sSearch:f,bRegex:b.bRegex,bSmart:b.bSmart,bCaseInsensitive:b.bCaseInsensitive})});c.attr("aria-controls",a.sTableId).bind("keypress.DT",function(e){if(e.keyCode==13)return false});return d}function X(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=function(g){d.sSearch=g.sSearch;d.bRegex=g.bRegex;d.bSmart=g.bSmart;d.bCaseInsensitive=g.bCaseInsensitive};if(a.oFeatures.bServerSide)f(b);else{Va(a,b.sSearch,c,b.bRegex,b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<a.aoPr [...]
+e[b].sSearch,b,e[b].bRegex,e[b].bSmart,e[b].bCaseInsensitive);Xa(a)}a.bFiltered=true;i(a.oInstance).trigger("filter",a);a._iDisplayStart=0;I(a);H(a);Ba(a,0)}function Xa(a){for(var b=l.ext.afnFiltering,c=A(a,"bSearchable"),d=0,e=b.length;d<e;d++)for(var f=0,g=0,j=a.aiDisplay.length;g<j;g++){var k=a.aiDisplay[g-f];if(!b[d](a,na(a,k,"filter",c),k)){a.aiDisplay.splice(g-f,1);f++}}}function Wa(a,b,c,d,e,f){if(b!==""){var g=0;b=Ca(b,d,e,f);for(d=a.aiDisplay.length-1;d>=0;d--){e=Ya(F(a,a.aiDisp [...]
+"filter"),a.aoColumns[c].sType);if(!b.test(e)){a.aiDisplay.splice(d,1);g++}}}}function Va(a,b,c,d,e,f){d=Ca(b,d,e,f);e=a.oPreviousSearch;c||(c=0);if(l.ext.afnFiltering.length!==0)c=1;if(b.length<=0){a.aiDisplay.splice(0,a.aiDisplay.length);a.aiDisplay=a.aiDisplayMaster.slice()}else if(a.aiDisplay.length==a.aiDisplayMaster.length||e.sSearch.length>b.length||c==1||b.indexOf(e.sSearch)!==0){a.aiDisplay.splice(0,a.aiDisplay.length);Ba(a,1);for(b=0;b<a.aiDisplayMaster.length;b++)d.test(a.asDa [...]
+a.aiDisplay.push(a.aiDisplayMaster[b])}else for(b=c=0;b<a.asDataSearch.length;b++)if(!d.test(a.asDataSearch[b])){a.aiDisplay.splice(b-c,1);c++}}function Ba(a,b){if(!a.oFeatures.bServerSide){a.asDataSearch=[];var c=A(a,"bSearchable");b=b===1?a.aiDisplayMaster:a.aiDisplay;for(var d=0,e=b.length;d<e;d++)a.asDataSearch[d]=Da(a,na(a,b[d],"filter",c))}}function Da(a,b){a=b.join("  ");if(a.indexOf("&")!==-1)a=i("<div>").html(a).text();return a.replace(/[\n\r]/g," ")}function Ca(a,b,c,d){if(c){a [...]
+Ea(a).split(" ");a="^(?=.*?"+a.join(")(?=.*?")+").*$";return new RegExp(a,d?"i":"")}else{a=b?a:Ea(a);return new RegExp(a,d?"i":"")}}function Ya(a,b){if(typeof l.ext.ofnSearch[b]==="function")return l.ext.ofnSearch[b](a);else if(a===null)return"";else if(b=="html")return a.replace(/[\r\n]/g," ").replace(/<.*?>/g,"");else if(typeof a==="string")return a.replace(/[\r\n]/g," ");return a}function Ea(a){return a.replace(new RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^| [...]
+"\\$1")}function Ra(a){var b=s.createElement("div");b.className=a.oClasses.sInfo;if(!a.aanFeatures.i){a.aoDrawCallback.push({fn:Za,sName:"information"});b.id=a.sTableId+"_info"}a.nTable.setAttribute("aria-describedby",a.sTableId+"_info");return b}function Za(a){if(!(!a.oFeatures.bInfo||a.aanFeatures.i.length===0)){var b=a.oLanguage,c=a._iDisplayStart+1,d=a.fnDisplayEnd(),e=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),g;g=f===0?b.sInfoEmpty:b.sInfo;if(f!=e)g+=" "+b.sInfoFiltered;g+=b.sInfoPo [...]
+g);if(b.fnInfoCallback!==null)g=b.fnInfoCallback.call(a.oInstance,a,c,d,e,f,g);a=a.aanFeatures.i;b=0;for(c=a.length;b<c;b++)i(a[b]).html(g)}}function za(a,b){var c=a.fnFormatNumber(a._iDisplayStart+1),d=a.fnDisplayEnd();d=a.fnFormatNumber(d);var e=a.fnRecordsDisplay();e=a.fnFormatNumber(e);var f=a.fnRecordsTotal();f=a.fnFormatNumber(f);if(a.oScroll.bInfinite)c=a.fnFormatNumber(1);return b.replace(/_START_/g,c).replace(/_END_/g,d).replace(/_TOTAL_/g,e).replace(/_MAX_/g,f)}function ra(a){v [...]
+a.iInitDisplayStart;if(a.bInitialised===false)setTimeout(function(){ra(a)},200);else{Ma(a);Ka(a);ia(a,a.aoHeader);a.nTFoot&&ia(a,a.aoFooter);P(a,true);a.oFeatures.bAutoWidth&&ta(a);b=0;for(c=a.aoColumns.length;b<c;b++)if(a.aoColumns[b].sWidth!==null)a.aoColumns[b].nTh.style.width=t(a.aoColumns[b].sWidth);if(a.oFeatures.bSort)$(a);else if(a.oFeatures.bFilter)X(a,a.oPreviousSearch);else{a.aiDisplay=a.aiDisplayMaster.slice();I(a);H(a)}if(a.sAjaxSource!==null&&!a.oFeatures.bServerSide){c=[]; [...]
+a.sAjaxSource,c,function(e){var f=a.sAjaxDataProp!==""?ca(a.sAjaxDataProp)(e):e;for(b=0;b<f.length;b++)R(a,f[b]);a.iInitDisplayStart=d;if(a.oFeatures.bSort)$(a);else{a.aiDisplay=a.aiDisplayMaster.slice();I(a);H(a)}P(a,false);pa(a,e)},a)}else if(!a.oFeatures.bServerSide){P(a,false);pa(a)}}}function pa(a,b){a._bInitComplete=true;K(a,"aoInitComplete","init",[a,b])}function Fa(a){var b=l.defaults.oLanguage;!a.sEmptyTable&&a.sZeroRecords&&b.sEmptyTable==="No data available in table"&&r(a,a,"s [...]
+"sEmptyTable");!a.sLoadingRecords&&a.sZeroRecords&&b.sLoadingRecords==="Loading..."&&r(a,a,"sZeroRecords","sLoadingRecords")}function Na(a){if(a.oScroll.bInfinite)return null;var b='<select size="1" '+('name="'+a.sTableId+'_length"')+">",c,d,e=a.aLengthMenu;if(e.length==2&&typeof e[0]==="object"&&typeof e[1]==="object"){c=0;for(d=e[0].length;c<d;c++)b+='<option value="'+e[0][c]+'">'+e[1][c]+"</option>"}else{c=0;for(d=e.length;c<d;c++)b+='<option value="'+e[c]+'">'+e[c]+"</option>"}b+="</ [...]
+e=s.createElement("div");if(!a.aanFeatures.l)e.id=a.sTableId+"_length";e.className=a.oClasses.sLength;e.innerHTML="<label>"+a.oLanguage.sLengthMenu.replace("_MENU_",b)+"</label>";i('select option[value="'+a._iDisplayLength+'"]',e).attr("selected",true);i("select",e).bind("change.DT",function(){var f=i(this).val(),g=a.aanFeatures.l;c=0;for(d=g.length;c<d;c++)g[c]!=this.parentNode&&i("select",g[c]).val(f);a._iDisplayLength=parseInt(f,10);I(a);if(a.fnDisplayEnd()==a.fnRecordsDisplay()){a._i [...]
+a.fnDisplayEnd()-a._iDisplayLength;if(a._iDisplayStart<0)a._iDisplayStart=0}if(a._iDisplayLength==-1)a._iDisplayStart=0;H(a)});i("select",e).attr("aria-controls",a.sTableId);return e}function I(a){a._iDisplayEnd=a.oFeatures.bPaginate===false?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength>a.aiDisplay.length||a._iDisplayLength==-1?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Sa(a){if(a.oScroll.bInfinite)return null;var b=s.createElement("div");b.className=a.oClasse [...]
+a.sPaginationType;l.ext.oPagination[a.sPaginationType].fnInit(a,b,function(c){I(c);H(c)});a.aanFeatures.p||a.aoDrawCallback.push({fn:function(c){l.ext.oPagination[c.sPaginationType].fnUpdate(c,function(d){I(d);H(d)})},sName:"pagination"});return b}function Ga(a,b){var c=a._iDisplayStart;if(typeof b==="number"){a._iDisplayStart=b*a._iDisplayLength;if(a._iDisplayStart>a.fnRecordsDisplay())a._iDisplayStart=0}else if(b=="first")a._iDisplayStart=0;else if(b=="previous"){a._iDisplayStart=a._iD [...]
+0?a._iDisplayStart-a._iDisplayLength:0;if(a._iDisplayStart<0)a._iDisplayStart=0}else if(b=="next")if(a._iDisplayLength>=0){if(a._iDisplayStart+a._iDisplayLength<a.fnRecordsDisplay())a._iDisplayStart+=a._iDisplayLength}else a._iDisplayStart=0;else if(b=="last")if(a._iDisplayLength>=0){b=parseInt((a.fnRecordsDisplay()-1)/a._iDisplayLength,10)+1;a._iDisplayStart=(b-1)*a._iDisplayLength}else a._iDisplayStart=0;else O(a,0,"Unknown paging action: "+b);i(a.oInstance).trigger("page",a);return c! [...]
+function Pa(a){var b=s.createElement("div");if(!a.aanFeatures.r)b.id=a.sTableId+"_processing";b.innerHTML=a.oLanguage.sProcessing;b.className=a.oClasses.sProcessing;a.nTable.parentNode.insertBefore(b,a.nTable);return b}function P(a,b){if(a.oFeatures.bProcessing)for(var c=a.aanFeatures.r,d=0,e=c.length;d<e;d++)c[d].style.visibility=b?"visible":"hidden";i(a.oInstance).trigger("processing",[a,b])}function Qa(a){if(a.oScroll.sX===""&&a.oScroll.sY==="")return a.nTable;var b=s.createElement("d [...]
+d=s.createElement("div"),e=s.createElement("div"),f=s.createElement("div"),g=s.createElement("div"),j=a.nTable.cloneNode(false),k=a.nTable.cloneNode(false),m=a.nTable.getElementsByTagName("thead")[0],u=a.nTable.getElementsByTagName("tfoot").length===0?null:a.nTable.getElementsByTagName("tfoot")[0],x=a.oClasses;c.appendChild(d);f.appendChild(g);e.appendChild(a.nTable);b.appendChild(c);b.appendChild(e);d.appendChild(j);j.appendChild(m);if(u!==null){b.appendChild(f);g.appendChild(k);k.appen [...]
+x.sScrollWrapper;c.className=x.sScrollHead;d.className=x.sScrollHeadInner;e.className=x.sScrollBody;f.className=x.sScrollFoot;g.className=x.sScrollFootInner;if(a.oScroll.bAutoCss){c.style.overflow="hidden";c.style.position="relative";f.style.overflow="hidden";e.style.overflow="auto"}c.style.border="0";c.style.width="100%";f.style.border="0";d.style.width=a.oScroll.sXInner!==""?a.oScroll.sXInner:"100%";j.removeAttribute("id");j.style.marginLeft="0";a.nTable.style.marginLeft="0";if(u!==nul [...]
+k.style.marginLeft="0"}d=i(a.nTable).children("caption");if(d.length>0){d=d[0];if(d._captionSide==="top")j.appendChild(d);else d._captionSide==="bottom"&&u&&k.appendChild(d)}if(a.oScroll.sX!==""){c.style.width=t(a.oScroll.sX);e.style.width=t(a.oScroll.sX);if(u!==null)f.style.width=t(a.oScroll.sX);i(e).scroll(function(){c.scrollLeft=this.scrollLeft;if(u!==null)f.scrollLeft=this.scrollLeft})}if(a.oScroll.sY!=="")e.style.height=t(a.oScroll.sY);a.aoDrawCallback.push({fn:$a,sName:"scrolling"} [...]
+i(e).scroll(function(){if(!a.bDrawing&&i(this).scrollTop()!==0)if(i(this).scrollTop()+i(this).height()>i(a.nTable).height()-a.oScroll.iLoadGap)if(a.fnDisplayEnd()<a.fnRecordsDisplay()){Ga(a,"next");I(a);H(a)}});a.nScrollHead=c;a.nScrollFoot=f;return b}function $a(a){var b=a.nScrollHead.getElementsByTagName("div")[0],c=b.getElementsByTagName("table")[0],d=a.nTable.parentNode,e,f,g,j,k,m,u,x,y=[],B=[],T=a.nTFoot!==null?a.nScrollFoot.getElementsByTagName("div")[0]:null,M=a.nTFoot!==null?T.g [...]
+null,L=a.oBrowser.bScrollOversize,ja=function(z){u=z.style;u.paddingTop="0";u.paddingBottom="0";u.borderTopWidth="0";u.borderBottomWidth="0";u.height=0};i(a.nTable).children("thead, tfoot").remove();e=i(a.nTHead).clone()[0];a.nTable.insertBefore(e,a.nTable.childNodes[0]);g=a.nTHead.getElementsByTagName("tr");j=e.getElementsByTagName("tr");if(a.nTFoot!==null){k=i(a.nTFoot).clone()[0];a.nTable.insertBefore(k,a.nTable.childNodes[1]);m=a.nTFoot.getElementsByTagName("tr");k=k.getElementsByTag [...]
+""){d.style.width="100%";b.parentNode.style.width="100%"}var U=Z(a,e);e=0;for(f=U.length;e<f;e++){x=v(a,e);U[e].style.width=a.aoColumns[x].sWidth}a.nTFoot!==null&&N(function(z){z.style.width=""},k);if(a.oScroll.bCollapse&&a.oScroll.sY!=="")d.style.height=d.offsetHeight+a.nTHead.offsetHeight+"px";e=i(a.nTable).outerWidth();if(a.oScroll.sX===""){a.nTable.style.width="100%";if(L&&(i("tbody",d).height()>d.offsetHeight||i(d).css("overflow-y")=="scroll"))a.nTable.style.width=t(i(a.nTable).oute [...]
+a.oScroll.iBarWidth)}else if(a.oScroll.sXInner!=="")a.nTable.style.width=t(a.oScroll.sXInner);else if(e==i(d).width()&&i(d).height()<i(a.nTable).height()){a.nTable.style.width=t(e-a.oScroll.iBarWidth);if(i(a.nTable).outerWidth()>e-a.oScroll.iBarWidth)a.nTable.style.width=t(e)}else a.nTable.style.width=t(e);e=i(a.nTable).outerWidth();N(ja,j);N(function(z){y.push(t(i(z).width()))},j);N(function(z,Q){z.style.width=y[Q]},g);i(j).height(0);if(a.nTFoot!==null){N(ja,k);N(function(z){B.push(t(i( [...]
+k);N(function(z,Q){z.style.width=B[Q]},m);i(k).height(0)}N(function(z,Q){z.innerHTML="";z.style.width=y[Q]},j);a.nTFoot!==null&&N(function(z,Q){z.innerHTML="";z.style.width=B[Q]},k);if(i(a.nTable).outerWidth()<e){g=d.scrollHeight>d.offsetHeight||i(d).css("overflow-y")=="scroll"?e+a.oScroll.iBarWidth:e;if(L&&(d.scrollHeight>d.offsetHeight||i(d).css("overflow-y")=="scroll"))a.nTable.style.width=t(g-a.oScroll.iBarWidth);d.style.width=t(g);a.nScrollHead.style.width=t(g);if(a.nTFoot!==null)a. [...]
+t(g);if(a.oScroll.sX==="")O(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width.");else a.oScroll.sXInner!==""&&O(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else{d.style.width=t("100%");a.nScrollHead.style.width=t("100%");if(a.nTFoot!==null)a.nScrollFoot.style.width=t("100%" [...]
+"")if(L)d.style.height=t(a.nTable.offsetHeight+a.oScroll.iBarWidth);if(a.oScroll.sY!==""&&a.oScroll.bCollapse){d.style.height=t(a.oScroll.sY);L=a.oScroll.sX!==""&&a.nTable.offsetWidth>d.offsetWidth?a.oScroll.iBarWidth:0;if(a.nTable.offsetHeight<d.offsetHeight)d.style.height=t(a.nTable.offsetHeight+L)}L=i(a.nTable).outerWidth();c.style.width=t(L);b.style.width=t(L);c=i(a.nTable).height()>d.clientHeight||i(d).css("overflow-y")=="scroll";b.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px" [...]
+null){M.style.width=t(L);T.style.width=t(L);T.style.paddingRight=c?a.oScroll.iBarWidth+"px":"0px"}i(d).scroll();if(a.bSorted||a.bFiltered)d.scrollTop=0}function N(a,b,c){for(var d=0,e=0,f=b.length,g,j;e<f;){g=b[e].firstChild;for(j=c?c[e].firstChild:null;g;){if(g.nodeType===1){c?a(g,j,d):a(g,d);d++}g=g.nextSibling;j=c?j.nextSibling:null}e++}}function ab(a,b){if(!a||a===null||a==="")return 0;if(!b)b=s.body;var c=s.createElement("div");c.style.width=t(a);b.appendChild(c);a=c.offsetWidth;b.r [...]
+return a}function ta(a){var b=0,c,d=0,e=a.aoColumns.length,f,g,j=i("th",a.nTHead),k=a.nTable.getAttribute("width");g=a.nTable.parentNode;for(f=0;f<e;f++)if(a.aoColumns[f].bVisible){d++;if(a.aoColumns[f].sWidth!==null){c=ab(a.aoColumns[f].sWidthOrig,g);if(c!==null)a.aoColumns[f].sWidth=t(c);b++}}if(e==j.length&&b===0&&d==e&&a.oScroll.sX===""&&a.oScroll.sY==="")for(f=0;f<a.aoColumns.length;f++){c=i(j[f]).width();if(c!==null)a.aoColumns[f].sWidth=t(c)}else{b=a.nTable.cloneNode(false);f=a.nT [...]
+d=s.createElement("tbody");c=s.createElement("tr");b.removeAttribute("id");b.appendChild(f);if(a.nTFoot!==null){b.appendChild(a.nTFoot.cloneNode(true));N(function(u){u.style.width=""},b.getElementsByTagName("tr"))}b.appendChild(d);d.appendChild(c);d=i("thead th",b);if(d.length===0)d=i("tbody tr:eq(0)>td",b);j=Z(a,f);for(f=d=0;f<e;f++){var m=a.aoColumns[f];if(m.bVisible&&m.sWidthOrig!==null&&m.sWidthOrig!=="")j[f-d].style.width=t(m.sWidthOrig);else if(m.bVisible)j[f-d].style.width="";else [...]
+0;f<e;f++)if(a.aoColumns[f].bVisible){d=bb(a,f);if(d!==null){d=d.cloneNode(true);if(a.aoColumns[f].sContentPadding!=="")d.innerHTML+=a.aoColumns[f].sContentPadding;c.appendChild(d)}}g.appendChild(b);if(a.oScroll.sX!==""&&a.oScroll.sXInner!=="")b.style.width=t(a.oScroll.sXInner);else if(a.oScroll.sX!==""){b.style.width="";if(i(b).width()<g.offsetWidth)b.style.width=t(g.offsetWidth)}else if(a.oScroll.sY!=="")b.style.width=t(g.offsetWidth);else if(k)b.style.width=t(k);b.style.visibility="hi [...]
+b);e=i("tbody tr:eq(0)",b).children();if(e.length===0)e=Z(a,i("thead",b)[0]);if(a.oScroll.sX!==""){for(f=d=g=0;f<a.aoColumns.length;f++)if(a.aoColumns[f].bVisible){g+=a.aoColumns[f].sWidthOrig===null?i(e[d]).outerWidth():parseInt(a.aoColumns[f].sWidth.replace("px",""),10)+(i(e[d]).outerWidth()-i(e[d]).width());d++}b.style.width=t(g);a.nTable.style.width=t(g)}for(f=d=0;f<a.aoColumns.length;f++)if(a.aoColumns[f].bVisible){g=i(e[d]).width();if(g!==null&&g>0)a.aoColumns[f].sWidth=t(g);d++}e= [...]
+a.nTable.style.width=e.indexOf("%")!==-1?e:t(i(b).outerWidth());b.parentNode.removeChild(b)}if(k)a.nTable.style.width=t(k)}function cb(a,b){if(a.oScroll.sX===""&&a.oScroll.sY!==""){i(b).width();b.style.width=t(i(b).outerWidth()-a.oScroll.iBarWidth)}else if(a.oScroll.sX!=="")b.style.width=t(i(b).outerWidth())}function bb(a,b){var c=db(a,b);if(c<0)return null;if(a.aoData[c].nTr===null){var d=s.createElement("td");d.innerHTML=F(a,c,b,"");return d}return W(a,c)[b]}function db(a,b){for(var c= [...]
+0;e<a.aoData.length;e++){var f=F(a,e,b,"display")+"";f=f.replace(/<.*?>/g,"");if(f.length>c){c=f.length;d=e}}return d}function t(a){if(a===null)return"0px";if(typeof a=="number"){if(a<0)return"0px";return a+"px"}var b=a.charCodeAt(a.length-1);if(b<48||b>57)return a;return a+"px"}function eb(){var a=s.createElement("p"),b=a.style;b.width="100%";b.height="200px";b.padding="0px";var c=s.createElement("div");b=c.style;b.position="absolute";b.top="0px";b.left="0px";b.visibility="hidden";b.wid [...]
+b.height="150px";b.padding="0px";b.overflow="hidden";c.appendChild(a);s.body.appendChild(c);b=a.offsetWidth;c.style.overflow="scroll";a=a.offsetWidth;if(b==a)a=c.clientWidth;s.body.removeChild(c);return b-a}function $(a,b){var c,d,e,f,g,j,k=[],m=[],u=l.ext.oSort,x=a.aoData,y=a.aoColumns,B=a.oLanguage.oAria;if(!a.oFeatures.bServerSide&&(a.aaSorting.length!==0||a.aaSortingFixed!==null)){k=a.aaSortingFixed!==null?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(c=0;c<k.length;c+ [...]
+e=w(a,d);f=a.aoColumns[d].sSortDataType;if(l.ext.afnSortData[f]){g=l.ext.afnSortData[f].call(a.oInstance,a,d,e);if(g.length===x.length){e=0;for(f=x.length;e<f;e++)S(a,e,d,g[e])}else O(a,0,"Returned data sort array (col "+d+") is the wrong length")}}c=0;for(d=a.aiDisplayMaster.length;c<d;c++)m[a.aiDisplayMaster[c]]=c;var T=k.length,M;c=0;for(d=x.length;c<d;c++)for(e=0;e<T;e++){M=y[k[e][0]].aDataSort;g=0;for(j=M.length;g<j;g++){f=y[M[g]].sType;f=u[(f?f:"string")+"-pre"];x[c]._aSortData[M[g [...]
+c,M[g],"sort")):F(a,c,M[g],"sort")}}a.aiDisplayMaster.sort(function(L,ja){var U,z,Q,aa,ka;for(U=0;U<T;U++){ka=y[k[U][0]].aDataSort;z=0;for(Q=ka.length;z<Q;z++){aa=y[ka[z]].sType;aa=u[(aa?aa:"string")+"-"+k[U][1]](x[L]._aSortData[ka[z]],x[ja]._aSortData[ka[z]]);if(aa!==0)return aa}}return u["numeric-asc"](m[L],m[ja])})}if((b===p||b)&&!a.oFeatures.bDeferRender)ba(a);c=0;for(d=a.aoColumns.length;c<d;c++){e=y[c].sTitle.replace(/<.*?>/g,"");b=y[c].nTh;b.removeAttribute("aria-sort");b.removeAt [...]
+if(y[c].bSortable)if(k.length>0&&k[0][0]==c){b.setAttribute("aria-sort",k[0][1]=="asc"?"ascending":"descending");b.setAttribute("aria-label",e+((y[c].asSorting[k[0][2]+1]?y[c].asSorting[k[0][2]+1]:y[c].asSorting[0])=="asc"?B.sSortAscending:B.sSortDescending))}else b.setAttribute("aria-label",e+(y[c].asSorting[0]=="asc"?B.sSortAscending:B.sSortDescending));else b.setAttribute("aria-label",e)}a.bSorted=true;i(a.oInstance).trigger("sort",a);if(a.oFeatures.bFilter)X(a,a.oPreviousSearch,1);el [...]
+a.aiDisplayMaster.slice();a._iDisplayStart=0;I(a);H(a)}}function ya(a,b,c,d){fb(b,{},function(e){if(a.aoColumns[c].bSortable!==false){var f=function(){var g,j;if(e.shiftKey){for(var k=false,m=0;m<a.aaSorting.length;m++)if(a.aaSorting[m][0]==c){k=true;g=a.aaSorting[m][0];j=a.aaSorting[m][2]+1;if(a.aoColumns[g].asSorting[j]){a.aaSorting[m][1]=a.aoColumns[g].asSorting[j];a.aaSorting[m][2]=j}else a.aaSorting.splice(m,1);break}k===false&&a.aaSorting.push([c,a.aoColumns[c].asSorting[0],0])}els [...]
+1&&a.aaSorting[0][0]==c){g=a.aaSorting[0][0];j=a.aaSorting[0][2]+1;a.aoColumns[g].asSorting[j]||(j=0);a.aaSorting[0][1]=a.aoColumns[g].asSorting[j];a.aaSorting[0][2]=j}else{a.aaSorting.splice(0,a.aaSorting.length);a.aaSorting.push([c,a.aoColumns[c].asSorting[0],0])}$(a)};if(a.oFeatures.bProcessing){P(a,true);setTimeout(function(){f();a.oFeatures.bServerSide||P(a,false)},0)}else f();typeof d=="function"&&d(a)}})}function ba(a){var b,c,d,e,f,g=a.aoColumns.length,j=a.oClasses;for(b=0;b<g;b+ [...]
+i(a.aoColumns[b].nTh).removeClass(j.sSortAsc+" "+j.sSortDesc+" "+a.aoColumns[b].sSortingClass);c=a.aaSortingFixed!==null?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(b=0;b<a.aoColumns.length;b++)if(a.aoColumns[b].bSortable){f=a.aoColumns[b].sSortingClass;e=-1;for(d=0;d<c.length;d++)if(c[d][0]==b){f=c[d][1]=="asc"?j.sSortAsc:j.sSortDesc;e=d;break}i(a.aoColumns[b].nTh).addClass(f);if(a.bJUI){f=i("span."+j.sSortIcon,a.aoColumns[b].nTh);f.removeClass(j.sSortJUIAsc+" "+j.sSort [...]
+j.sSortJUI+" "+j.sSortJUIAscAllowed+" "+j.sSortJUIDescAllowed);f.addClass(e==-1?a.aoColumns[b].sSortingClassJUI:c[e][1]=="asc"?j.sSortJUIAsc:j.sSortJUIDesc)}}else i(a.aoColumns[b].nTh).addClass(a.aoColumns[b].sSortingClass);f=j.sSortColumn;if(a.oFeatures.bSort&&a.oFeatures.bSortClasses){a=W(a);e=[];for(b=0;b<g;b++)e.push("");b=0;for(d=1;b<c.length;b++){j=parseInt(c[b][0],10);e[j]=f+d;d<3&&d++}f=new RegExp(f+"[123]");var k;b=0;for(c=a.length;b<c;b++){j=b%g;d=a[b].className;k=e[j];j=d.repl [...]
+if(j!=d)a[b].className=i.trim(j);else if(k.length>0&&d.indexOf(k)==-1)a[b].className=d+" "+k}}}function Ha(a){if(!(!a.oFeatures.bStateSave||a.bDestroying)){var b,c;b=a.oScroll.bInfinite;var d={iCreate:(new Date).getTime(),iStart:b?0:a._iDisplayStart,iEnd:b?a._iDisplayLength:a._iDisplayEnd,iLength:a._iDisplayLength,aaSorting:i.extend(true,[],a.aaSorting),oSearch:i.extend(true,{},a.oPreviousSearch),aoSearchCols:i.extend(true,[],a.aoPreSearchCols),abVisCols:[]};b=0;for(c=a.aoColumns.length; [...]
+K(a,"aoStateSaveParams","stateSaveParams",[a,d]);a.fnStateSave.call(a.oInstance,a,d)}}function gb(a,b){if(a.oFeatures.bStateSave){var c=a.fnStateLoad.call(a.oInstance,a);if(c){var d=K(a,"aoStateLoadParams","stateLoadParams",[a,c]);if(i.inArray(false,d)===-1){a.oLoadedState=i.extend(true,{},c);a._iDisplayStart=c.iStart;a.iInitDisplayStart=c.iStart;a._iDisplayEnd=c.iEnd;a._iDisplayLength=c.iLength;a.aaSorting=c.aaSorting.slice();a.saved_aaSorting=c.aaSorting.slice();i.extend(a.oPreviousSea [...]
+i.extend(true,a.aoPreSearchCols,c.aoSearchCols);b.saved_aoColumns=[];for(d=0;d<c.abVisCols.length;d++){b.saved_aoColumns[d]={};b.saved_aoColumns[d].bVisible=c.abVisCols[d]}K(a,"aoStateLoaded","stateLoaded",[a,c])}}}}function lb(a,b,c,d,e){var f=new Date;f.setTime(f.getTime()+c*1E3);c=la.location.pathname.split("/");a=a+"_"+c.pop().replace(/[\/:]/g,"").toLowerCase();var g;if(e!==null){g=typeof i.parseJSON==="function"?i.parseJSON(b):eval("("+b+")");b=e(a,g,f.toGMTString(),c.join("/")+"/") [...]
+"="+encodeURIComponent(b)+"; expires="+f.toGMTString()+"; path="+c.join("/")+"/";a=s.cookie.split(";");e=b.split(";")[0].length;f=[];if(e+s.cookie.length+10>4096){for(var j=0,k=a.length;j<k;j++)if(a[j].indexOf(d)!=-1){var m=a[j].split("=");try{(g=eval("("+decodeURIComponent(m[1])+")"))&&g.iCreate&&f.push({name:m[0],time:g.iCreate})}catch(u){}}for(f.sort(function(x,y){return y.time-x.time});e+s.cookie.length+10>4096;){if(f.length===0)return;d=f.pop();s.cookie=d.name+"=; expires=Thu, 01-Ja [...]
+c.join("/")+"/"}}s.cookie=b}function mb(a){var b=la.location.pathname.split("/");a=a+"_"+b[b.length-1].replace(/[\/:]/g,"").toLowerCase()+"=";b=s.cookie.split(";");for(var c=0;c<b.length;c++){for(var d=b[c];d.charAt(0)==" ";)d=d.substring(1,d.length);if(d.indexOf(a)===0)return decodeURIComponent(d.substring(a.length,d.length))}return null}function C(a){for(var b=0;b<l.settings.length;b++)if(l.settings[b].nTable===a)return l.settings[b];return null}function fa(a){var b=[];a=a.aoData;for(v [...]
+a.length;c<d;c++)a[c].nTr!==null&&b.push(a[c].nTr);return b}function W(a,b){var c=[],d,e,f,g,j;e=0;var k=a.aoData.length;if(b!==p){e=b;k=b+1}for(e=e;e<k;e++){j=a.aoData[e];if(j.nTr!==null){b=[];for(d=j.nTr.firstChild;d;){f=d.nodeName.toLowerCase();if(f=="td"||f=="th")b.push(d);d=d.nextSibling}f=d=0;for(g=a.aoColumns.length;f<g;f++)if(a.aoColumns[f].bVisible)c.push(b[f-d]);else{c.push(j._anHidden[f]);d++}}}return c}function O(a,b,c){a=a===null?"DataTables warning: "+c:"DataTables warning  [...]
+a.sTableId+"'): "+c;if(b===0)if(l.ext.sErrMode=="alert")alert(a);else throw new Error(a);else la.console&&console.log&&console.log(a)}function r(a,b,c,d){if(d===p)d=c;if(b[c]!==p)a[d]=b[c]}function hb(a,b){var c;for(var d in b)if(b.hasOwnProperty(d)){c=b[d];if(typeof h[d]==="object"&&c!==null&&i.isArray(c)===false)i.extend(true,a[d],c);else a[d]=c}return a}function fb(a,b,c){i(a).bind("click.DT",b,function(d){a.blur();c(d)}).bind("keypress.DT",b,function(d){d.which===13&&c(d)}).bind("sel [...]
+function(){return false})}function J(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function K(a,b,c,d){b=a[b];for(var e=[],f=b.length-1;f>=0;f--)e.push(b[f].fn.apply(a.oInstance,d));c!==null&&i(a.oInstance).trigger(c,d);return e}function ib(a){var b=i('<div style="position:absolute; top:0; left:0; height:1px; width:1px; overflow:hidden"><div style="position:absolute; top:1px; left:1px; width:100px; overflow:scroll;"><div id="DT_BrowserTest" style="width:100%; height:10px;"></div></div></div>')[0 [...]
+a.oBrowser.bScrollOversize=i("#DT_BrowserTest",b)[0].offsetWidth===100?true:false;s.body.removeChild(b)}function jb(a){return function(){var b=[C(this[l.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return l.ext.oApi[a].apply(this,b)}}var ga=/\[.*?\]$/,kb=la.JSON?JSON.stringify:function(a){var b=typeof a;if(b!=="object"||a===null){if(b==="string")a='"'+a+'"';return a+""}var c,d,e=[],f=i.isArray(a);for(c in a){d=a[c];b=typeof d;if(b==="string")d='"'+d+'"';else if(b==="obj [...]
+null)d=kb(d);e.push((f?"":'"'+c+'":')+d)}return(f?"[":"{")+e+(f?"]":"}")};this.$=function(a,b){var c,d=[],e;c=C(this[l.ext.iApiIndex]);var f=c.aoData,g=c.aiDisplay,j=c.aiDisplayMaster;b||(b={});b=i.extend({},{filter:"none",order:"current",page:"all"},b);if(b.page=="current"){b=c._iDisplayStart;for(c=c.fnDisplayEnd();b<c;b++)(e=f[g[b]].nTr)&&d.push(e)}else if(b.order=="current"&&b.filter=="none"){b=0;for(c=j.length;b<c;b++)(e=f[j[b]].nTr)&&d.push(e)}else if(b.order=="current"&&b.filter==" [...]
+0;for(c=g.length;b<c;b++)(e=f[g[b]].nTr)&&d.push(e)}else if(b.order=="original"&&b.filter=="none"){b=0;for(c=f.length;b<c;b++)(e=f[b].nTr)&&d.push(e)}else if(b.order=="original"&&b.filter=="applied"){b=0;for(c=f.length;b<c;b++){e=f[b].nTr;i.inArray(b,g)!==-1&&e&&d.push(e)}}else O(c,1,"Unknown selection options");f=i(d);d=f.filter(a);a=f.find(a);return i([].concat(i.makeArray(d),i.makeArray(a)))};this._=function(a,b){var c=[],d=this.$(a,b);a=0;for(b=d.length;a<b;a++)c.push(this.fnGetData( [...]
+this.fnAddData=function(a,b){if(a.length===0)return[];var c=[],d,e=C(this[l.ext.iApiIndex]);if(typeof a[0]==="object"&&a[0]!==null)for(var f=0;f<a.length;f++){d=R(e,a[f]);if(d==-1)return c;c.push(d)}else{d=R(e,a);if(d==-1)return c;c.push(d)}e.aiDisplay=e.aiDisplayMaster.slice();if(b===p||b)qa(e);return c};this.fnAdjustColumnSizing=function(a){var b=C(this[l.ext.iApiIndex]);o(b);if(a===p||a)this.fnDraw(false);else if(b.oScroll.sX!==""||b.oScroll.sY!=="")this.oApi._fnScrollDraw(b)};this.fn [...]
+function(a){var b=C(this[l.ext.iApiIndex]);wa(b);if(a===p||a)H(b)};this.fnClose=function(a){for(var b=C(this[l.ext.iApiIndex]),c=0;c<b.aoOpenRows.length;c++)if(b.aoOpenRows[c].nParent==a){(a=b.aoOpenRows[c].nTr.parentNode)&&a.removeChild(b.aoOpenRows[c].nTr);b.aoOpenRows.splice(c,1);return 0}return 1};this.fnDeleteRow=function(a,b,c){var d=C(this[l.ext.iApiIndex]),e,f;a=typeof a==="object"?V(d,a):a;var g=d.aoData.splice(a,1);e=0;for(f=d.aoData.length;e<f;e++)if(d.aoData[e].nTr!==null)d.a [...]
+e;e=i.inArray(a,d.aiDisplay);d.asDataSearch.splice(e,1);xa(d.aiDisplayMaster,a);xa(d.aiDisplay,a);typeof b==="function"&&b.call(this,d,g);if(d._iDisplayStart>=d.fnRecordsDisplay()){d._iDisplayStart-=d._iDisplayLength;if(d._iDisplayStart<0)d._iDisplayStart=0}if(c===p||c){I(d);H(d)}return g};this.fnDestroy=function(a){var b=C(this[l.ext.iApiIndex]),c=b.nTableWrapper.parentNode,d=b.nTBody,e,f;a=a===p?false:a;b.bDestroying=true;K(b,"aoDestroyCallback","destroy",[b]);if(!a){e=0;for(f=b.aoColu [...]
+f;e++)b.aoColumns[e].bVisible===false&&this.fnSetColumnVis(e,true)}i(b.nTableWrapper).find("*").andSelf().unbind(".DT");i("tbody>tr>td."+b.oClasses.sRowEmpty,b.nTable).parent().remove();if(b.nTable!=b.nTHead.parentNode){i(b.nTable).children("thead").remove();b.nTable.appendChild(b.nTHead)}if(b.nTFoot&&b.nTable!=b.nTFoot.parentNode){i(b.nTable).children("tfoot").remove();b.nTable.appendChild(b.nTFoot)}b.nTable.parentNode.removeChild(b.nTable);i(b.nTableWrapper).remove();b.aaSorting=[];b.a [...]
+[];ba(b);i(fa(b)).removeClass(b.asStripeClasses.join(" "));i("th, td",b.nTHead).removeClass([b.oClasses.sSortable,b.oClasses.sSortableAsc,b.oClasses.sSortableDesc,b.oClasses.sSortableNone].join(" "));if(b.bJUI){i("th span."+b.oClasses.sSortIcon+", td span."+b.oClasses.sSortIcon,b.nTHead).remove();i("th, td",b.nTHead).each(function(){var g=i("div."+b.oClasses.sSortJUIWrapper,this),j=g.contents();i(this).append(j);g.remove()})}if(!a&&b.nTableReinsertBefore)c.insertBefore(b.nTable,b.nTableR [...]
+else a||c.appendChild(b.nTable);e=0;for(f=b.aoData.length;e<f;e++)b.aoData[e].nTr!==null&&d.appendChild(b.aoData[e].nTr);if(b.oFeatures.bAutoWidth===true)b.nTable.style.width=t(b.sDestroyWidth);if(f=b.asDestroyStripes.length){a=i(d).children("tr");for(e=0;e<f;e++)a.filter(":nth-child("+f+"n + "+e+")").addClass(b.asDestroyStripes[e])}e=0;for(f=l.settings.length;e<f;e++)l.settings[e]==b&&l.settings.splice(e,1);h=b=null};this.fnDraw=function(a){var b=C(this[l.ext.iApiIndex]);if(a===false){I [...]
+this.fnFilter=function(a,b,c,d,e,f){var g=C(this[l.ext.iApiIndex]);if(g.oFeatures.bFilter){if(c===p||c===null)c=false;if(d===p||d===null)d=true;if(e===p||e===null)e=true;if(f===p||f===null)f=true;if(b===p||b===null){X(g,{sSearch:a+"",bRegex:c,bSmart:d,bCaseInsensitive:f},1);if(e&&g.aanFeatures.f){b=g.aanFeatures.f;c=0;for(d=b.length;c<d;c++)try{b[c]._DT_Input!=s.activeElement&&i(b[c]._DT_Input).val(a)}catch(j){i(b[c]._DT_Input).val(a)}}}else{i.extend(g.aoPreSearchCols[b],{sSearch:a+"",bR [...]
+bCaseInsensitive:f});X(g,g.oPreviousSearch,1)}}};this.fnGetData=function(a,b){var c=C(this[l.ext.iApiIndex]);if(a!==p){var d=a;if(typeof a==="object"){var e=a.nodeName.toLowerCase();if(e==="tr")d=V(c,a);else if(e==="td"){d=V(c,a.parentNode);b=va(c,d,a)}}if(b!==p)return F(c,d,b,"");return c.aoData[d]!==p?c.aoData[d]._aData:null}return oa(c)};this.fnGetNodes=function(a){var b=C(this[l.ext.iApiIndex]);if(a!==p)return b.aoData[a]!==p?b.aoData[a].nTr:null;return fa(b)};this.fnGetPosition=func [...]
+C(this[l.ext.iApiIndex]),c=a.nodeName.toUpperCase();if(c=="TR")return V(b,a);else if(c=="TD"||c=="TH"){c=V(b,a.parentNode);a=va(b,c,a);return[c,w(b,a),a]}return null};this.fnIsOpen=function(a){for(var b=C(this[l.ext.iApiIndex]),c=0;c<b.aoOpenRows.length;c++)if(b.aoOpenRows[c].nParent==a)return true;return false};this.fnOpen=function(a,b,c){var d=C(this[l.ext.iApiIndex]),e=fa(d);if(i.inArray(a,e)!==-1){this.fnClose(a);e=s.createElement("tr");var f=s.createElement("td");e.appendChild(f);f. [...]
+c;f.colSpan=D(d);if(typeof b==="string")f.innerHTML=b;else i(f).html(b);b=i("tr",d.nTBody);i.inArray(a,b)!=-1&&i(e).insertAfter(a);d.aoOpenRows.push({nTr:e,nParent:a});return e}};this.fnPageChange=function(a,b){var c=C(this[l.ext.iApiIndex]);Ga(c,a);I(c);if(b===p||b)H(c)};this.fnSetColumnVis=function(a,b,c){var d=C(this[l.ext.iApiIndex]),e,f,g=d.aoColumns,j=d.aoData,k,m;if(g[a].bVisible!=b){if(b){for(e=f=0;e<a;e++)g[e].bVisible&&f++;m=f>=D(d);if(!m)for(e=a;e<g.length;e++)if(g[e].bVisible [...]
+0;for(f=j.length;e<f;e++)if(j[e].nTr!==null)m?j[e].nTr.appendChild(j[e]._anHidden[a]):j[e].nTr.insertBefore(j[e]._anHidden[a],W(d,e)[k])}else{e=0;for(f=j.length;e<f;e++)if(j[e].nTr!==null){k=W(d,e)[a];j[e]._anHidden[a]=k;k.parentNode.removeChild(k)}}g[a].bVisible=b;ia(d,d.aoHeader);d.nTFoot&&ia(d,d.aoFooter);e=0;for(f=d.aoOpenRows.length;e<f;e++)d.aoOpenRows[e].nTr.colSpan=D(d);if(c===p||c){o(d);H(d)}Ha(d)}};this.fnSettings=function(){return C(this[l.ext.iApiIndex])};this.fnSort=function [...]
+C(this[l.ext.iApiIndex]);b.aaSorting=a;$(b)};this.fnSortListener=function(a,b,c){ya(C(this[l.ext.iApiIndex]),a,b,c)};this.fnUpdate=function(a,b,c,d,e){var f=C(this[l.ext.iApiIndex]);b=typeof b==="object"?V(f,b):b;if(i.isArray(a)&&c===p){f.aoData[b]._aData=a.slice();for(c=0;c<f.aoColumns.length;c++)this.fnUpdate(F(f,b,c),b,c,false,false)}else if(i.isPlainObject(a)&&c===p){f.aoData[b]._aData=i.extend(true,{},a);for(c=0;c<f.aoColumns.length;c++)this.fnUpdate(F(f,b,c),b,c,false,false)}else{S [...]
+a=F(f,b,c,"display");var g=f.aoColumns[c];if(g.fnRender!==null){a=da(f,b,c);g.bUseRendered&&S(f,b,c,a)}if(f.aoData[b].nTr!==null)W(f,b)[c].innerHTML=a}c=i.inArray(b,f.aiDisplay);f.asDataSearch[c]=Da(f,na(f,b,"filter",A(f,"bSearchable")));if(e===p||e)o(f);if(d===p||d)qa(f);return 0};this.fnVersionCheck=l.ext.fnVersionCheck;this.oApi={_fnExternApiFunc:jb,_fnInitialise:ra,_fnInitComplete:pa,_fnLanguageCompat:Fa,_fnAddColumn:n,_fnColumnOptions:q,_fnAddData:R,_fnCreateTr:ua,_fnGatherData:ea,_ [...]
+_fnDrawHead:ia,_fnDraw:H,_fnReDraw:qa,_fnAjaxUpdate:La,_fnAjaxParameters:Ta,_fnAjaxUpdateDraw:Ua,_fnServerParams:Aa,_fnAddOptionsHtml:Ma,_fnFeatureHtmlTable:Qa,_fnScrollDraw:$a,_fnAdjustColumnSizing:o,_fnFeatureHtmlFilter:Oa,_fnFilterComplete:X,_fnFilterCustom:Xa,_fnFilterColumn:Wa,_fnFilter:Va,_fnBuildSearchArray:Ba,_fnBuildSearchRow:Da,_fnFilterCreateSearch:Ca,_fnDataToSearch:Ya,_fnSort:$,_fnSortAttachListener:ya,_fnSortingClasses:ba,_fnFeatureHtmlPaginate:Sa,_fnPageChange:Ga,_fnFeatur [...]
+_fnUpdateInfo:Za,_fnFeatureHtmlLength:Na,_fnFeatureHtmlProcessing:Pa,_fnProcessingDisplay:P,_fnVisibleToColumnIndex:v,_fnColumnIndexToVisible:w,_fnNodeToDataIndex:V,_fnVisbleColumns:D,_fnCalculateEnd:I,_fnConvertToWidth:ab,_fnCalculateColumnWidths:ta,_fnScrollingWidthAdjust:cb,_fnGetWidestNode:bb,_fnGetMaxLenString:db,_fnStringToCss:t,_fnDetectType:G,_fnSettingsFromNode:C,_fnGetDataMaster:oa,_fnGetTrNodes:fa,_fnGetTdNodes:W,_fnEscapeRegex:Ea,_fnDeleteIndex:xa,_fnReOrderIndex:E,_fnColumnO [...]
+_fnLog:O,_fnClearTable:wa,_fnSaveState:Ha,_fnLoadState:gb,_fnCreateCookie:lb,_fnReadCookie:mb,_fnDetectHeader:ha,_fnGetUniqueThs:Z,_fnScrollBarWidth:eb,_fnApplyToChildren:N,_fnMap:r,_fnGetRowData:na,_fnGetCellData:F,_fnSetCellData:S,_fnGetObjectDataFn:ca,_fnSetObjectDataFn:Ja,_fnApplyColumnDefs:ma,_fnBindAction:fb,_fnExtend:hb,_fnCallbackReg:J,_fnCallbackFire:K,_fnJsonString:kb,_fnRender:da,_fnNodeToColumnIndex:va,_fnInfoMacros:za,_fnBrowserDetect:ib,_fnGetColumns:A};i.extend(l.ext.oApi, [...]
+for(var Ia in l.ext.oApi)if(Ia)this[Ia]=jb(Ia);var sa=this;this.each(function(){var a=0,b,c,d;c=this.getAttribute("id");var e=false,f=false;if(this.nodeName.toLowerCase()!="table")O(null,0,"Attempted to initialise DataTables on a node which is not a table: "+this.nodeName);else{a=0;for(b=l.settings.length;a<b;a++){if(l.settings[a].nTable==this)if(h===p||h.bRetrieve)return l.settings[a].oInstance;else if(h.bDestroy){l.settings[a].oInstance.fnDestroy();break}else{O(l.settings[a],0,"Cannot  [...]
+return}if(l.settings[a].sTableId==this.id){l.settings.splice(a,1);break}}if(c===null||c==="")this.id=c="DataTables_Table_"+l.ext._oExternConfig.iNextUnique++;var g=i.extend(true,{},l.models.oSettings,{nTable:this,oApi:sa.oApi,oInit:h,sDestroyWidth:i(this).width(),sInstance:c,sTableId:c});l.settings.push(g);g.oInstance=sa.length===1?sa:i(this).dataTable();h||(h={});h.oLanguage&&Fa(h.oLanguage);h=hb(i.extend(true,{},l.defaults),h);r(g.oFeatures,h,"bPaginate");r(g.oFeatures,h,"bLengthChange [...]
+h,"bFilter");r(g.oFeatures,h,"bSort");r(g.oFeatures,h,"bInfo");r(g.oFeatures,h,"bProcessing");r(g.oFeatures,h,"bAutoWidth");r(g.oFeatures,h,"bSortClasses");r(g.oFeatures,h,"bServerSide");r(g.oFeatures,h,"bDeferRender");r(g.oScroll,h,"sScrollX","sX");r(g.oScroll,h,"sScrollXInner","sXInner");r(g.oScroll,h,"sScrollY","sY");r(g.oScroll,h,"bScrollCollapse","bCollapse");r(g.oScroll,h,"bScrollInfinite","bInfinite");r(g.oScroll,h,"iScrollLoadGap","iLoadGap");r(g.oScroll,h,"bScrollAutoCss","bAuto [...]
+h,"asStripeClasses");r(g,h,"asStripClasses","asStripeClasses");r(g,h,"fnServerData");r(g,h,"fnFormatNumber");r(g,h,"sServerMethod");r(g,h,"aaSorting");r(g,h,"aaSortingFixed");r(g,h,"aLengthMenu");r(g,h,"sPaginationType");r(g,h,"sAjaxSource");r(g,h,"sAjaxDataProp");r(g,h,"iCookieDuration");r(g,h,"sCookiePrefix");r(g,h,"sDom");r(g,h,"bSortCellsTop");r(g,h,"iTabIndex");r(g,h,"oSearch","oPreviousSearch");r(g,h,"aoSearchCols","aoPreSearchCols");r(g,h,"iDisplayLength","_iDisplayLength");r(g,h, [...]
+"bJUI");r(g,h,"fnCookieCallback");r(g,h,"fnStateLoad");r(g,h,"fnStateSave");r(g.oLanguage,h,"fnInfoCallback");J(g,"aoDrawCallback",h.fnDrawCallback,"user");J(g,"aoServerParams",h.fnServerParams,"user");J(g,"aoStateSaveParams",h.fnStateSaveParams,"user");J(g,"aoStateLoadParams",h.fnStateLoadParams,"user");J(g,"aoStateLoaded",h.fnStateLoaded,"user");J(g,"aoRowCallback",h.fnRowCallback,"user");J(g,"aoRowCreatedCallback",h.fnCreatedRow,"user");J(g,"aoHeaderCallback",h.fnHeaderCallback,"user" [...]
+h.fnFooterCallback,"user");J(g,"aoInitComplete",h.fnInitComplete,"user");J(g,"aoPreDrawCallback",h.fnPreDrawCallback,"user");if(g.oFeatures.bServerSide&&g.oFeatures.bSort&&g.oFeatures.bSortClasses)J(g,"aoDrawCallback",ba,"server_side_sort_classes");else g.oFeatures.bDeferRender&&J(g,"aoDrawCallback",ba,"defer_sort_classes");if(h.bJQueryUI){i.extend(g.oClasses,l.ext.oJUIClasses);if(h.sDom===l.defaults.sDom&&l.defaults.sDom==="lfrtip")g.sDom='<"H"lfr>t<"F"ip>'}else i.extend(g.oClasses,l.ex [...]
+i(this).addClass(g.oClasses.sTable);if(g.oScroll.sX!==""||g.oScroll.sY!=="")g.oScroll.iBarWidth=eb();if(g.iInitDisplayStart===p){g.iInitDisplayStart=h.iDisplayStart;g._iDisplayStart=h.iDisplayStart}if(h.bStateSave){g.oFeatures.bStateSave=true;gb(g,h);J(g,"aoDrawCallback",Ha,"state_save")}if(h.iDeferLoading!==null){g.bDeferLoading=true;a=i.isArray(h.iDeferLoading);g._iRecordsDisplay=a?h.iDeferLoading[0]:h.iDeferLoading;g._iRecordsTotal=a?h.iDeferLoading[1]:h.iDeferLoading}if(h.aaData!==nu [...]
+if(h.oLanguage.sUrl!==""){g.oLanguage.sUrl=h.oLanguage.sUrl;i.getJSON(g.oLanguage.sUrl,null,function(k){Fa(k);i.extend(true,g.oLanguage,h.oLanguage,k);ra(g)});e=true}else i.extend(true,g.oLanguage,h.oLanguage);if(h.asStripeClasses===null)g.asStripeClasses=[g.oClasses.sStripeOdd,g.oClasses.sStripeEven];b=g.asStripeClasses.length;g.asDestroyStripes=[];if(b){c=false;d=i(this).children("tbody").children("tr:lt("+b+")");for(a=0;a<b;a++)if(d.hasClass(g.asStripeClasses[a])){c=true;g.asDestroySt [...]
+d.removeClass(g.asStripeClasses.join(" "))}c=[];a=this.getElementsByTagName("thead");if(a.length!==0){ha(g.aoHeader,a[0]);c=Z(g)}if(h.aoColumns===null){d=[];a=0;for(b=c.length;a<b;a++)d.push(null)}else d=h.aoColumns;a=0;for(b=d.length;a<b;a++){if(h.saved_aoColumns!==p&&h.saved_aoColumns.length==b){if(d[a]===null)d[a]={};d[a].bVisible=h.saved_aoColumns[a].bVisible}n(g,c?c[a]:null)}ma(g,h.aoColumnDefs,d,function(k,m){q(g,k,m)});a=0;for(b=g.aaSorting.length;a<b;a++){if(g.aaSorting[a][0]>=g. [...]
+0;var j=g.aoColumns[g.aaSorting[a][0]];if(g.aaSorting[a][2]===p)g.aaSorting[a][2]=0;if(h.aaSorting===p&&g.saved_aaSorting===p)g.aaSorting[a][1]=j.asSorting[0];c=0;for(d=j.asSorting.length;c<d;c++)if(g.aaSorting[a][1]==j.asSorting[c]){g.aaSorting[a][2]=c;break}}ba(g);ib(g);a=i(this).children("caption").each(function(){this._captionSide=i(this).css("caption-side")});b=i(this).children("thead");if(b.length===0){b=[s.createElement("thead")];this.appendChild(b[0])}g.nTHead=b[0];b=i(this).chil [...]
+if(b.length===0){b=[s.createElement("tbody")];this.appendChild(b[0])}g.nTBody=b[0];g.nTBody.setAttribute("role","alert");g.nTBody.setAttribute("aria-live","polite");g.nTBody.setAttribute("aria-relevant","all");b=i(this).children("tfoot");if(b.length===0&&a.length>0&&(g.oScroll.sX!==""||g.oScroll.sY!=="")){b=[s.createElement("tfoot")];this.appendChild(b[0])}if(b.length>0){g.nTFoot=b[0];ha(g.aoFooter,g.nTFoot)}if(f)for(a=0;a<h.aaData.length;a++)R(g,h.aaData[a]);else ea(g);g.aiDisplay=g.aiD [...]
+g.bInitialised=true;e===false&&ra(g)}});sa=null;return this};l.fnVersionCheck=function(h){var n=function(A,G){for(;A.length<G;)A+="0";return A},q=l.ext.sVersion.split(".");h=h.split(".");for(var o="",v="",w=0,D=h.length;w<D;w++){o+=n(q[w],3);v+=n(h[w],3)}return parseInt(o,10)>=parseInt(v,10)};l.fnIsDataTable=function(h){for(var n=l.settings,q=0;q<n.length;q++)if(n[q].nTable===h||n[q].nScrollHead===h||n[q].nScrollFoot===h)return true;return false};l.fnTables=function(h){var n=[];jQuery.ea [...]
+function(q,o){if(!h||h===true&&i(o.nTable).is(":visible"))n.push(o.nTable)});return n};l.version="1.9.4";l.settings=[];l.models={};l.models.ext={afnFiltering:[],afnSortData:[],aoFeatures:[],aTypes:[],fnVersionCheck:l.fnVersionCheck,iApiIndex:0,ofnSearch:{},oApi:{},oStdClasses:{},oJUIClasses:{},oPagination:{},oSort:{},sVersion:l.version,sErrMode:"alert",_oExternConfig:{iNextUnique:0}};l.models.oSearch={bCaseInsensitive:true,sSearch:"",bRegex:false,bSmart:true};l.models.oRow={nTr:null,_aDa [...]
+_anHidden:[],_sRowStripe:""};l.models.oColumn={aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bUseRendered:null,bVisible:null,_bAutoType:true,fnCreatedCell:null,fnGetData:null,fnRender:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};l.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSort [...]
+aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:true,bDeferRender:false,bDestroy:false,bFilter:true,bInfo:true,bJQueryUI:false,bLengthChange:true,bPaginate:true,bProcessing:false,bRetrieve:false,bScrollAutoCss:true,bScrollCollapse:false,bScrollInfinite:false,bServerSide:false,bSort:true,bSortCellsTop:false,bSortClasses:true,bStateSave:false,fnCookieCallback:null,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnForma [...]
+1E3)return h;var n=h+"";h=n.split("");var q="";n=n.length;for(var o=0;o<n;o++){if(o%3===0&&o!==0)q=this.oLanguage.sInfoThousands+q;q=h[n-o-1]+q}return q},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:function(h,n,q,o){o.jqXHR=i.ajax({url:h,data:n,success:function(v){v.sError&&o.oApi._fnLog(o,0,v.sError);i(o.oInstance).trigger("xhr",[o,v]);q(v)},dataType:"json",cache:false,type:o.sServerMethod,error:function(v,w){w=="p [...]
+o.oApi._fnLog(o,0,"DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")}})},fnServerParams:null,fnStateLoad:function(h){h=this.oApi._fnReadCookie(h.sCookiePrefix+h.sInstance);var n;try{n=typeof i.parseJSON==="function"?i.parseJSON(h):eval("("+h+")")}catch(q){n=null}return n},fnStateLoadParams:null,fnStateLoaded:null,fnStateSave:function(h,n){this.oApi._fnCreateCookie(h.sCookiePrefix+h.sInstance,this.oApi._fnJsonString(n),h.iCookieDur [...]
+h.fnCookieCallback)},fnStateSaveParams:null,iCookieDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iScrollLoadGap:100,iTabIndex:0,oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFil [...]
+sInfoPostFix:"",sInfoThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sUrl:"",sZeroRecords:"No matching records found"},oSearch:i.extend({},l.models.oSearch),sAjaxDataProp:"aaData",sAjaxSource:null,sCookiePrefix:"SpryMedia_DataTables_",sDom:"lfrtip",sPaginationType:"two_button",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET"};l.defaults.columns={aDataSort:null,asSorting:["asc","desc"],bSearchable:true, [...]
+bUseRendered:true,bVisible:true,fnCreatedCell:null,fnRender:null,iDataSort:-1,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};l.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortClasses:null,bStateSave:null},oScroll:{bAutoCss:null,bCollapse:null,bInfinite:null,iBar [...]
+sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:false},aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aoColumns:[],aoHeader:[],aoFooter:[],asDataSearch:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:null,asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[ [...]
+aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:false,bInitialised:false,aoOpenRows:[],sDom:null,sPaginationType:"two_button",iCookieDuration:0,sCookiePrefix:"",fnCookieCallback:null,aoStateSave:[],aoStateLoad:[],oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:true,jqXHR:null,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:false,iDrawError:-1,_iDis [...]
+_iDisplayStart:0,_iDisplayEnd:10,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:false,bSorted:false,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsTotal,10):this.aiDisplayMaster.length},fnRecordsDisplay:function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsDisplay,10):this.aiDisplay.length},fnDisplayEnd:function(){return this.oFeatures.bServerSide?this.oFeatures.bPagi [...]
+this._iDisplayLength==-1?this._iDisplayStart+this.aiDisplay.length:Math.min(this._iDisplayStart+this._iDisplayLength,this._iRecordsDisplay):this._iDisplayEnd},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null};l.ext=i.extend(true,{},l.models.ext);i.extend(l.ext.oStdClasses,{sTable:"dataTable",sPagePrevEnabled:"paginate_enabled_previous",sPagePrevDisabled:"paginate_disabled_previous",sPageNextEnabled:"paginate_enabled_next",sPageNextDisabled:"paginate_disabled_ne [...]
+sPageJUIPrev:"",sPageButton:"paginate_button",sPageButtonActive:"paginate_active",sPageButtonStaticDisabled:"paginate_button paginate_button_disabled",sPageFirst:"first",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sort [...]
+sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollF [...]
+sFooterTH:"",sJUIHeader:"",sJUIFooter:""});i.extend(l.ext.oJUIClasses,l.ext.oStdClasses,{sPagePrevEnabled:"fg-button ui-button ui-state-default ui-corner-left",sPagePrevDisabled:"fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",sPageNextEnabled:"fg-button ui-button ui-state-default ui-corner-right",sPageNextDisabled:"fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",sPageJUINext:"ui-icon ui-icon-circle-arrow-e",sPageJUIPrev:"ui-icon ui-icon-cir [...]
+sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"fg-button ui-button ui-state-default ui-state-disabled",sPageButtonStaticDisabled:"fg-button ui-button ui-state-default ui-state-disabled",sPageFirst:"first ui-corner-tl ui-corner-bl",sPageLast:"last ui-corner-tr ui-corner-br",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:"ui-state-default",sSortDesc:"ui-state-default",sSortable:"ui-state-default",sSortab [...]
+sSortableDesc:"ui-state-default",sSortableNone:"ui-state-default",sSortJUIAsc:"css_right ui-icon ui-icon-triangle-1-n",sSortJUIDesc:"css_right ui-icon ui-icon-triangle-1-s",sSortJUI:"css_right ui-icon ui-icon-carat-2-n-s",sSortJUIAscAllowed:"css_right ui-icon ui-icon-carat-1-n",sSortJUIDescAllowed:"css_right ui-icon ui-icon-carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead ui-state-default",sScrollFoot:"dataTables_scr [...]
+sFooterTH:"ui-state-default",sJUIHeader:"fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix",sJUIFooter:"fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"});i.extend(l.ext.oPagination,{two_button:{fnInit:function(h,n,q){var o=h.oLanguage.oPaginate,v=function(D){h.oApi._fnPageChange(h,D.data.action)&&q(h)};o=!h.bJUI?'<a class="'+h.oClasses.sPagePrevDisabled+'" tabindex="'+h.iTabIndex+'" role="button">'+o.sPrevious+'</a><a [...]
+h.oClasses.sPageNextDisabled+'" tabindex="'+h.iTabIndex+'" role="button">'+o.sNext+"</a>":'<a class="'+h.oClasses.sPagePrevDisabled+'" tabindex="'+h.iTabIndex+'" role="button"><span class="'+h.oClasses.sPageJUIPrev+'"></span></a><a class="'+h.oClasses.sPageNextDisabled+'" tabindex="'+h.iTabIndex+'" role="button"><span class="'+h.oClasses.sPageJUINext+'"></span></a>';i(n).append(o);var w=i("a",n);o=w[0];w=w[1];h.oApi._fnBindAction(o,{action:"previous"},v);h.oApi._fnBindAction(w,{action:"n [...]
+if(!h.aanFeatures.p){n.id=h.sTableId+"_paginate";o.id=h.sTableId+"_previous";w.id=h.sTableId+"_next";o.setAttribute("aria-controls",h.sTableId);w.setAttribute("aria-controls",h.sTableId)}},fnUpdate:function(h){if(h.aanFeatures.p)for(var n=h.oClasses,q=h.aanFeatures.p,o,v=0,w=q.length;v<w;v++)if(o=q[v].firstChild){o.className=h._iDisplayStart===0?n.sPagePrevDisabled:n.sPagePrevEnabled;o=o.nextSibling;o.className=h.fnDisplayEnd()==h.fnRecordsDisplay()?n.sPageNextDisabled:n.sPageNextEnabled [...]
+full_numbers:{fnInit:function(h,n,q){var o=h.oLanguage.oPaginate,v=h.oClasses,w=function(G){h.oApi._fnPageChange(h,G.data.action)&&q(h)};i(n).append('<a  tabindex="'+h.iTabIndex+'" class="'+v.sPageButton+" "+v.sPageFirst+'">'+o.sFirst+'</a><a  tabindex="'+h.iTabIndex+'" class="'+v.sPageButton+" "+v.sPagePrevious+'">'+o.sPrevious+'</a><span></span><a tabindex="'+h.iTabIndex+'" class="'+v.sPageButton+" "+v.sPageNext+'">'+o.sNext+'</a><a tabindex="'+h.iTabIndex+'" class="'+v.sPageButton+" " [...]
+'">'+o.sLast+"</a>");var D=i("a",n);o=D[0];v=D[1];var A=D[2];D=D[3];h.oApi._fnBindAction(o,{action:"first"},w);h.oApi._fnBindAction(v,{action:"previous"},w);h.oApi._fnBindAction(A,{action:"next"},w);h.oApi._fnBindAction(D,{action:"last"},w);if(!h.aanFeatures.p){n.id=h.sTableId+"_paginate";o.id=h.sTableId+"_first";v.id=h.sTableId+"_previous";A.id=h.sTableId+"_next";D.id=h.sTableId+"_last"}},fnUpdate:function(h,n){if(h.aanFeatures.p){var q=l.ext.oPagination.iFullNumbersShowPages,o=Math.flo [...]
+Math.ceil(h.fnRecordsDisplay()/h._iDisplayLength),w=Math.ceil(h._iDisplayStart/h._iDisplayLength)+1,D="",A,G=h.oClasses,E,Y=h.aanFeatures.p,ma=function(R){h.oApi._fnBindAction(this,{page:R+A-1},function(ea){h.oApi._fnPageChange(h,ea.data.page);n(h);ea.preventDefault()})};if(h._iDisplayLength===-1)w=o=A=1;else if(v<q){A=1;o=v}else if(w<=o){A=1;o=q}else if(w>=v-o){A=v-q+1;o=v}else{A=w-Math.ceil(q/2)+1;o=A+q-1}for(q=A;q<=o;q++)D+=w!==q?'<a tabindex="'+h.iTabIndex+'" class="'+G.sPageButton+' [...]
+"</a>":'<a tabindex="'+h.iTabIndex+'" class="'+G.sPageButtonActive+'">'+h.fnFormatNumber(q)+"</a>";q=0;for(o=Y.length;q<o;q++){E=Y[q];if(E.hasChildNodes()){i("span:eq(0)",E).html(D).children("a").each(ma);E=E.getElementsByTagName("a");E=[E[0],E[1],E[E.length-2],E[E.length-1]];i(E).removeClass(G.sPageButton+" "+G.sPageButtonActive+" "+G.sPageButtonStaticDisabled);i([E[0],E[1]]).addClass(w==1?G.sPageButtonStaticDisabled:G.sPageButton);i([E[2],E[3]]).addClass(v===0||w===v||h._iDisplayLength [...]
+G.sPageButton)}}}}}});i.extend(l.ext.oSort,{"string-pre":function(h){if(typeof h!="string")h=h!==null&&h.toString?h.toString():"";return h.toLowerCase()},"string-asc":function(h,n){return h<n?-1:h>n?1:0},"string-desc":function(h,n){return h<n?1:h>n?-1:0},"html-pre":function(h){return h.replace(/<.*?>/g,"").toLowerCase()},"html-asc":function(h,n){return h<n?-1:h>n?1:0},"html-desc":function(h,n){return h<n?1:h>n?-1:0},"date-pre":function(h){h=Date.parse(h);if(isNaN(h)||h==="")h=Date.parse( [...]
+return h},"date-asc":function(h,n){return h-n},"date-desc":function(h,n){return n-h},"numeric-pre":function(h){return h=="-"||h===""?0:h*1},"numeric-asc":function(h,n){return h-n},"numeric-desc":function(h,n){return n-h}});i.extend(l.ext.aTypes,[function(h){if(typeof h==="number")return"numeric";else if(typeof h!=="string")return null;var n,q=false;n=h.charAt(0);if("0123456789-".indexOf(n)==-1)return null;for(var o=1;o<h.length;o++){n=h.charAt(o);if("0123456789.".indexOf(n)==-1)return nu [...]
+"."){if(q)return null;q=true}}return"numeric"},function(h){var n=Date.parse(h);if(n!==null&&!isNaN(n)||typeof h==="string"&&h.length===0)return"date";return null},function(h){if(typeof h==="string"&&h.indexOf("<")!=-1&&h.indexOf(">")!=-1)return"html";return null}]);i.fn.DataTable=l;i.fn.dataTable=l;i.fn.dataTableSettings=l.settings;i.fn.dataTableExt=l.ext})})(window,document);
diff --git a/astropy/table/groups.py b/astropy/table/groups.py
new file mode 100644
index 0000000..f1b8847
--- /dev/null
+++ b/astropy/table/groups.py
@@ -0,0 +1,367 @@
+import platform
+import warnings
+from itertools import izip, count
+
+import numpy as np
+
+from ..utils.exceptions import AstropyUserWarning
+
+
+__all__ = ['TableGroups', 'ColumnGroups']
+
+
+def table_group_by(table, keys):
+    """
+    Get groups for ``table`` on specified ``keys``.
+
+    Parameters
+    ----------
+    table : `Table`
+        Table to group
+    keys : str, list of str, `Table`, or Numpy array
+        Grouping key specifier
+
+    Returns
+    -------
+    grouped_table : Table object with groups attr set accordingly
+    """
+    from .table import Table
+
+    # Pre-convert string to tuple of strings, or Table to the underlying structured array
+    if isinstance(keys, basestring):
+        keys = (keys,)
+
+    if isinstance(keys, (list, tuple)):
+        for name in keys:
+            if name not in table.colnames:
+                raise ValueError('Table does not have key column {0!r}'.format(name))
+            if table.masked and np.any(table[name].mask):
+                raise ValueError('Missing values in key column {0!r} are not allowed'.format(name))
+
+        keys = tuple(keys)
+        table_keys = table[keys]
+        grouped_by_table_cols = True  # Grouping keys are columns from the table being grouped
+
+    elif isinstance(keys, (np.ndarray, Table)):
+        table_keys = keys
+        if len(table_keys) != len(table):
+            raise ValueError('Input keys array length {0} does not match table length {1}'
+                             .format(len(table_keys), len(table)))
+        grouped_by_table_cols = False  # Grouping key(s) are external
+
+    else:
+        raise TypeError('Keys input must be string, list, tuple or numpy array, but got {0}'
+                        .format(type(keys)))
+
+    try:
+        idx_sort = table_keys.argsort(kind='mergesort')
+        stable_sort = True
+    except TypeError:
+        # Some versions (likely 1.6 and earlier) of numpy don't support
+        # 'mergesort' for all data types.  MacOSX (Darwin) doesn't have a stable
+        # sort by default, nor does Windows, while Linux does (or appears to).
+        idx_sort = table_keys.argsort()
+        stable_sort = platform.system() not in ('Darwin', 'Windows')
+    table_keys = table_keys[idx_sort]
+
+    # Get all keys
+    diffs = np.concatenate(([True], table_keys[1:] != table_keys[:-1], [True]))
+    indices = np.flatnonzero(diffs)
+
+    # If the sort is not stable (preserves original table order) then sort idx_sort in
+    # place within each group.
+    if not stable_sort:
+        for i0, i1 in izip(indices[:-1], indices[1:]):
+            idx_sort[i0:i1].sort()
+
+    # Make a new table and set the _groups to the appropriate TableGroups object.
+    # Take the subset of the original keys at the indices values (group boundaries).
+    out = table.__class__(table[idx_sort])
+    out_keys = table_keys[indices[:-1]]
+    if isinstance(out_keys, Table):
+        out_keys.meta['grouped_by_table_cols'] = grouped_by_table_cols
+    out._groups = TableGroups(out, indices=indices, keys=out_keys)
+
+    return out
+
+
+def column_group_by(column, keys):
+    """
+    Get groups for ``column`` on specified ``keys``
+
+    Parameters
+    ----------
+    column : Column object
+        Column to group
+    keys : Table or Numpy array of same length as col
+        Grouping key specifier
+
+    Returns
+    -------
+    grouped_column : Column object with groups attr set accordingly
+    """
+    from .table import Table
+
+    if isinstance(keys, Table):
+        keys = keys._data
+
+    if not isinstance(keys, np.ndarray):
+        raise TypeError('Keys input must be numpy array, but got {0}'
+                        .format(type(keys)))
+
+    if len(keys) != len(column):
+        raise ValueError('Input keys array length {0} does not match column length {1}'
+                         .format(len(keys), len(column)))
+
+    idx_sort = keys.argsort()
+    keys = keys[idx_sort]
+
+    # Get all keys
+    diffs = np.concatenate(([True], keys[1:] != keys[:-1], [True]))
+    indices = np.flatnonzero(diffs)
+
+    # Make a new column and set the _groups to the appropriate ColumnGroups object.
+    # Take the subset of the original keys at the indices values (group boundaries).
+    out = column.__class__(column[idx_sort])
+    out._groups = ColumnGroups(out, indices=indices, keys=keys[indices[:-1]])
+
+    return out
+
+
+class BaseGroups(object):
+    """
+    A class to represent groups within a table of heterogeneous data.
+
+      - ``keys``: key values corresponding to each group
+      - ``indices``: index values in parent table or column corresponding to group boundaries
+      - ``aggregate()``: method to create new table by aggregating within groups
+    """
+    @property
+    def parent(self):
+        return self.parent_column if isinstance(self, ColumnGroups) else self.parent_table
+
+    def __iter__(self):
+        self._iter_index = 0
+        return self
+
+    def next(self):
+        ii = self._iter_index
+        if ii < len(self.indices) - 1:
+            i0, i1 = self.indices[ii], self.indices[ii + 1]
+            self._iter_index += 1
+            return self.parent[i0:i1]
+        else:
+            raise StopIteration
+
+    def __getitem__(self, item):
+        parent = self.parent
+
+        if isinstance(item, int):
+            i0, i1 = self.indices[item], self.indices[item + 1]
+            out = parent[i0:i1]
+            out.groups._keys = parent.groups.keys[item]
+        else:
+            indices0, indices1 = self.indices[:-1], self.indices[1:]
+            try:
+                i0s, i1s = indices0[item], indices1[item]
+            except:
+                raise TypeError('Index item for groups attribute must be a slice, '
+                                'numpy mask or int array')
+            mask = np.zeros(len(parent), dtype=np.bool)
+            # Is there a way to vectorize this in numpy?
+            for i0, i1 in izip(i0s, i1s):
+                mask[i0:i1] = True
+            out = parent[mask]
+            out.groups._keys = parent.groups.keys[item]
+            out.groups._indices = np.concatenate([[0], np.cumsum(i1s - i0s)])
+
+        return out
+
+    def __repr__(self):
+        return '<{0} indices={1}>'.format(self.__class__.__name__, self.indices)
+
+    def __len__(self):
+        return len(self.indices) - 1
+
+
+class ColumnGroups(BaseGroups):
+    def __init__(self, parent_column, indices=None, keys=None):
+        self.parent_column = parent_column  # parent Column
+        self.parent_table = parent_column.parent_table
+        self._indices = indices
+        self._keys = keys
+
+    @property
+    def indices(self):
+        # If the parent column is in a table then use group indices from table
+        if self.parent_table:
+            return self.parent_table.groups.indices
+        else:
+            if self._indices is None:
+                return np.array([0, len(self.parent_column)])
+            else:
+                return self._indices
+
+    @property
+    def keys(self):
+        # If the parent column is in a table then use group indices from table
+        if self.parent_table:
+            return self.parent_table.groups.keys
+        else:
+            return self._keys
+
+    def aggregate(self, func):
+        i0s, i1s = self.indices[:-1], self.indices[1:]
+        par_col = self.parent_column
+        try:
+            vals = np.array([func(par_col[i0: i1]) for i0, i1 in izip(i0s, i1s)])
+        except Exception:
+            raise TypeError("Cannot aggregate column '{0}'"
+                            .format(par_col.name))
+
+        out = par_col.__class__(data=vals, name=par_col.name, description=par_col.description,
+                                unit=par_col.unit, format=par_col.format, meta=par_col.meta)
+        return out
+
+    def filter(self, func):
+        """
+        Filter groups in the Column based on evaluating function ``func`` on each
+        group sub-table.
+
+        The function which is passed to this method must accept one argument:
+
+        - ``column`` : `Column` object
+
+        It must then return either `True` or `False`.  As an example, the following
+        will select all column groups with only positive values::
+
+          def all_positive(column):
+              if np.any(column < 0):
+                  return False
+              return True
+
+        Parameters
+        ----------
+        func : function
+            Filter function
+
+        Returns
+        -------
+        out : Column
+            New column with the aggregated rows.
+        """
+        mask = np.empty(len(self), dtype=np.bool)
+        for i, group_column in enumerate(self):
+            mask[i] = func(group_column)
+
+        return self[mask]
+
+
+class TableGroups(BaseGroups):
+    def __init__(self, parent_table, indices=None, keys=None):
+        self.parent_table = parent_table  # parent Table
+        self._indices = indices
+        self._keys = keys
+
+    @property
+    def key_colnames(self):
+        """
+        Return the names of columns in the parent table that were used for grouping.
+        """
+        # If the table was grouped by key columns *in* the table then treat those columns
+        # differently in aggregation.  In this case keys will be a Table with
+        # keys.meta['grouped_by_table_cols'] == True.  Keys might not be a Table so we
+        # need to handle this.
+        grouped_by_table_cols = getattr(self.keys, 'meta', {}).get('grouped_by_table_cols', False)
+        return self.keys.colnames if grouped_by_table_cols else ()
+
+    @property
+    def indices(self):
+        if self._indices is None:
+            return np.array([0, len(self.parent_table)])
+        else:
+            return self._indices
+
+    def aggregate(self, func):
+        """
+        Aggregate each group in the Table into a single row by applying the reduction
+        function ``func`` to group values in each column.
+
+        Parameters
+        ----------
+        func : function
+            Function that reduces an array of values to a single value
+
+        Returns
+        -------
+        out : Table
+            New table with the aggregated rows.
+        """
+        i0s, i1s = self.indices[:-1], self.indices[1:]
+        out_cols = []
+        parent_table = self.parent_table
+
+        grouped_by_table_cols = getattr(self.keys, 'meta', {}).get('grouped_by_table_cols', False)
+
+        for col in parent_table.columns.values():
+            # For key columns just pick off first in each group since they are identical
+            if col.name in self.key_colnames:
+                # Should just be new_col = col.take(i0s), but there is a bug in
+                # MaskedColumn finalize:
+                # >>> c = MaskedColumn(data=[1,2], name='a', description='a')
+                # >>> print c[1:2].description
+                # None
+                new_col = col.__class__(data=col.take(i0s), name=col.name,
+                                        description=col.description,
+                                        unit=col.unit, format=col.format, meta=col.meta)
+            else:
+                try:
+                    new_col = col.groups.aggregate(func)
+                except TypeError as err:
+                    warnings.warn(str(err), AstropyUserWarning)
+                    continue
+
+            out_cols.append(new_col)
+
+        return parent_table.__class__(out_cols, meta=parent_table.meta)
+
+    def filter(self, func):
+        """
+        Filter groups in the Table based on evaluating function ``func`` on each
+        group sub-table.
+
+        The function which is passed to this method must accept two arguments:
+
+        - ``table`` : `Table` object
+        - ``key_colnames`` : tuple of column names in ``table`` used as keys for grouping
+
+        It must then return either `True` or `False`.  As an example, the following
+        will select all table groups with only positive values in the non-key columns::
+
+          def all_positive(table, key_colnames):
+              colnames = [name for name in table.colnames if name not in key_colnames]
+              for colname in colnames:
+                  if np.any(table[colname] < 0):
+                      return False
+              return True
+
+        Parameters
+        ----------
+        func : function
+            Filter function
+
+        Returns
+        -------
+        out : Table
+            New table with the aggregated rows.
+        """
+        mask = np.empty(len(self), dtype=np.bool)
+        key_colnames = self.key_colnames
+        for i, group_table in enumerate(self):
+            mask[i] = func(group_table, key_colnames)
+
+        return self[mask]
+
+    @property
+    def keys(self):
+        return self._keys
diff --git a/astropy/table/jsviewer.py b/astropy/table/jsviewer.py
new file mode 100644
index 0000000..367917f
--- /dev/null
+++ b/astropy/table/jsviewer.py
@@ -0,0 +1,99 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+# TODO: need to download some images used by the jquery-ui css file:
+# images/ui-icons_888888_256x240.png
+import os
+
+data_path = os.path.join(os.path.abspath(os.path.dirname(__file__)),'data')
+
+ipynb_js_script = """
+<script class="jsbin" src="{data_path}/jquery.dataTables.min.js"></script>
+<script>
+    function html_repr_full() {{
+        var kernel = IPython.notebook.kernel;
+        var button = $("#MakeTableBrowseable{tid}");
+        var tablename = button.parents()[4].getElementsByClassName("input_area")[0].innerText;
+        tablename = tablename.replace(/\s+/g, '');
+        var command = "print ''.join(" + tablename + ".pformat(html=True, max_lines=1000, max_width=1000, tableid={tid}))";
+        console.log(command);
+        var result = kernel.execute(command, {{'output': callback}}, {{silent:false}});
+        console.log(result);
+    }}
+    function callback(output_type, out) {{
+        console.log(output_type);
+        console.log(out);
+        var button = $("#MakeTableBrowseable{tid}");
+        button[0].parentNode.innerHTML = out.data;
+        return out.data;
+    }}
+    function make_table_browseable() {{
+        console.log("$('#{tid}').dataTable()");
+        $('#{tid}').dataTable({{
+             "iDisplayLength": {display_length},
+             "aLengthMenu": {display_length_menu},
+             "bJQueryUI": true,
+             "sPaginationType": "full_numbers"
+        }});
+    }}
+    function replace_table() {{
+        html_repr_full();
+        make_table_browseable();
+    }}
+</script>
+<button id='MakeTableBrowseable{tid}' onclick="make_table_browseable()">Make Table Browseable</button>
+"""
+
+commandline_js_script = """
+<script>
+    $(document).ready(function() {{
+        $('#{tid}').dataTable({{
+         "iDisplayLength": {display_length},
+         "aLengthMenu": {display_length_menu},
+         "bJQueryUI": true,
+         "sPaginationType": "full_numbers"
+        }});
+    }} );
+</script>
+"""
+
+class JSViewer(object):
+
+    def __init__(self,
+                 css_files=['jquery-ui.css','demo_page.css','demo_table.css'],
+                 display_length=50):
+        self.css_urls = ["file://"+os.path.join(data_path,c) for c in css_files]
+        self.display_length_menu = [[10, 25, 50, 100, 500, 1000, -1],
+                                    [10, 25, 50, 100, 500, 1000, "All"]]
+        self.display_length = display_length
+        for L in self.display_length_menu:
+            if display_length not in L:
+                L.insert(0,display_length)
+
+    def _jquery_file(self):
+        # downloaded from http://ajax.googleapis.com/ajax/libs/jquery/1/
+        return '<script src="file://{data_path}/jquery-1.10.2.min.js"></script>'.format(data_path=data_path)
+
+    def _jstable_file(self):
+        # downloaded from http://datatables.net/download/build/
+        return '<script class="jsbin" src="file://{data_path}/jquery.dataTables.min.js"></script>'.format(data_path=data_path)
+
+    def _css_files(self):
+        return ['<link rel="stylesheet" href="{css}" type="text/css">'.format(css=css) for css in self.css_urls]
+
+    def ipynb(self, tableid):
+        js = self._css_files()
+        js.append(self._jstable_file())
+        js.append(ipynb_js_script.format(display_length=self.display_length,
+                                         display_length_menu=self.display_length_menu,
+                                         tid=tableid,
+                                         data_path="file://"+data_path))
+        return js
+
+    def command_line(self, tableid='table0'):
+        js = self._css_files()
+        js.append(self._jquery_file())
+        js.append(self._jstable_file())
+
+        js.append(commandline_js_script.format(display_length=self.display_length,
+                                               display_length_menu=self.display_length_menu,
+                                               tid=tableid))
+        return js
diff --git a/astropy/table/np_utils.py b/astropy/table/np_utils.py
new file mode 100644
index 0000000..8144a98
--- /dev/null
+++ b/astropy/table/np_utils.py
@@ -0,0 +1,543 @@
+"""
+High-level operations for numpy structured arrays.
+
+join():  Perform a database join of two numpy ndarrays.
+hstack(): Horizontally stack a list of numpy ndarrays.
+vstack(): Vertically stack a list of numpy ndarrays.
+
+Some code and inspriration taken from numpy.lib.recfunctions.join_by().
+Redistribution license restrictions apply.
+"""
+
+from itertools import izip, chain
+import collections
+
+import numpy as np
+import numpy.ma as ma
+
+from . import _np_utils
+from ..utils import OrderedDict
+
+__all__ = ['join', 'hstack', 'vstack', 'TableMergeError']
+
+
+class TableMergeError(ValueError):
+    pass
+
+
+def _counter(iterable):
+    """
+    Count instances of each unique value in ``iterable``.  Returns a dict
+    with the counts.  Would use collections.Counter but this isn't available in 2.6.
+    """
+    counts = collections.defaultdict(int)
+    for val in iterable:
+        counts[val] += 1
+    return counts
+
+
+def get_col_name_map(arrays, common_names, uniq_col_name='{col_name}_{table_name}',
+                     table_names=None):
+    """
+    Find the column names mapping when merging the list of structured ndarrays
+    ``arrays``.  It is assumed that col names in ``common_names`` are to be
+    merged into a single column while the rest will be uniquely represented
+    in the output.  The args ``uniq_col_name`` and ``table_names`` specify
+    how to rename columns in case of conflicts.
+
+    Returns a dict mapping each output column name to the input(s).  This takes the form
+    {outname : (col_name_0, col_name_1, ...), ... }.  For key columns all of input names
+    will be present, while for the other non-key columns the value will be (col_name_0,
+    None, ..) or (None, col_name_1, ..) etc.
+    """
+
+    col_name_map = collections.defaultdict(lambda: [None] * len(arrays))
+    col_name_list = []
+
+    if table_names is None:
+        table_names = [str(ii + 1) for ii in range(len(arrays))]
+
+    for idx, array in enumerate(arrays):
+        table_name = table_names[idx]
+        for name in array.dtype.names:
+            out_name = name
+
+            if name in common_names:
+                # If name is in the list of common_names then insert into
+                # the column name list, but just once.
+                if name not in col_name_list:
+                    col_name_list.append(name)
+            else:
+                # If name is not one of the common column outputs, and it collides
+                # with the names in one of the other arrays, then rename
+                others = (x for x in arrays if x is not array)
+                if any(name in other.dtype.names for other in others):
+                    out_name = uniq_col_name.format(table_name=table_name, col_name=name)
+                col_name_list.append(out_name)
+
+            col_name_map[out_name][idx] = name
+
+    # Check for duplicate output column names
+    col_name_count = _counter(col_name_list)
+    repeated_names = [name for name, count in col_name_count.items() if count > 1]
+    if repeated_names:
+        raise TableMergeError('Merging column names resulted in duplicates: {0:s}.  '
+                              'Change uniq_col_name or table_names args to fix this.'
+                              .format(repeated_names))
+
+    # Convert col_name_map to a regular dict with tuple (immutable) values
+    col_name_map = OrderedDict((name, col_name_map[name]) for name in col_name_list)
+
+    return col_name_map
+
+
+def get_descrs(arrays, col_name_map):
+    """
+    Find the dtypes descrs resulting from merging the list of arrays' dtypes,
+    using the column name mapping ``col_name_map``.
+
+    Return a list of descrs for the output.
+    """
+
+    out_descrs = []
+
+    for out_name, in_names in col_name_map.items():
+        # List of input arrays that contribute to this output column
+        in_cols = [arr[name] for arr, name in izip(arrays, in_names) if name is not None]
+
+        # Output dtype is the superset of all dtypes in in_arrays
+        dtype = common_dtype(in_cols)
+
+        # Make sure all input shapes are the same
+        uniq_shapes = set(col.shape[1:] for col in in_cols)
+        if len(uniq_shapes) != 1:
+            raise TableMergeError('Key columns {0!r} have different shape'.format(name))
+        shape = uniq_shapes.pop()
+
+        out_descrs.append((out_name, dtype, shape))
+
+    return out_descrs
+
+
+def common_dtype(cols):
+    """
+    Use numpy to find the common dtype for a list of structured ndarray columns.
+
+    Only allow columns within the following fundamental numpy data types:
+    np.bool_, np.object_, np.number, np.character, np.void
+    """
+    np_types = (np.bool_, np.object_, np.number, np.character, np.void)
+    uniq_types = set(tuple(issubclass(col.dtype.type, np_type) for np_type in np_types)
+                     for col in cols)
+    if len(uniq_types) > 1:
+        raise TableMergeError('Columns have incompatible types {0}'
+                              .format([col.dtype.name for col in cols]))
+
+    arrs = [np.empty(1, dtype=col.dtype) for col in cols]
+
+    # For string-type arrays need to explicitly fill in non-zero
+    # values or the final arr_common = .. step is unpredictable.
+    for arr in arrs:
+        if arr.dtype.kind in ('S', 'U'):
+            arr[0] = '0' * arr.itemsize
+
+    arr_common = np.array([arr[0] for arr in arrs])
+    return arr_common.dtype.str
+
+
+def join(left, right, keys=None, join_type='inner',
+         uniq_col_name='{col_name}_{table_name}',
+         table_names=['1', '2'],
+         col_name_map=None):
+    """
+    Perform a join of the left and right numpy structured array on specified keys.
+
+    Parameters
+    ----------
+    left : structured array
+        Left side table in the join
+    right : structured array
+        Right side table in the join
+    keys : str or list of str
+        Name(s) of column(s) used to match rows of left and right tables.
+        Default is to use all columns which are common to both tables.
+    join_type : str
+        Join type ('inner' | 'outer' | 'left' | 'right'), default is 'inner'
+    uniq_col_name : str or None
+        String generate a unique output column name in case of a conflict.
+        The default is '{col_name}_{table_name}'.
+    table_names : list of str or None
+        Two-element list of table names used when generating unique output
+        column names.  The default is ['1', '2'].
+    col_name_map : empty dict or None
+        If passed as a dict then it will be updated in-place with the
+        mapping of output to input column names.
+    """
+    # Store user-provided col_name_map until the end
+    _col_name_map = col_name_map
+
+    if join_type not in ('inner', 'outer', 'left', 'right'):
+        raise ValueError("The 'join_type' argument should be in 'inner', "
+                         "'outer', 'left' or 'right' (got '{0}' instead)".
+                         format(join_type))
+
+    # If we have a single key, put it in a tuple
+    if keys is None:
+        keys = tuple(name for name in left.dtype.names if name in right.dtype.names)
+        if len(keys) == 0:
+            raise TableMergeError('No keys in common between left and right tables')
+    elif isinstance(keys, basestring):
+        keys = (keys,)
+
+    # Check the key columns
+    for arr, arr_label in ((left, 'Left'), (right, 'Right')):
+        for name in keys:
+            if name not in arr.dtype.names:
+                raise TableMergeError('{0} table does not have key column {1!r}'
+                                      .format(arr_label, name))
+            if hasattr(arr[name], 'mask') and np.any(arr[name].mask):
+                raise TableMergeError('{0} key column {1!r} has missing values'
+                                      .format(arr_label, name))
+
+    # Make sure we work with ravelled arrays
+    left = left.ravel()
+    right = right.ravel()
+    len_left, len_right = len(left), len(right)
+    left_names, right_names = left.dtype.names, right.dtype.names
+
+    # Joined array dtype as a list of descr (name, type_str, shape) tuples
+    col_name_map = get_col_name_map([left, right], keys, uniq_col_name, table_names)
+    out_descrs = get_descrs([left, right], col_name_map)
+
+    # Make an array with just the key columns
+    out_keys_dtype = [descr for descr in out_descrs if descr[0] in keys]
+    out_keys = np.empty(len_left + len_right, dtype=out_keys_dtype)
+    for key in keys:
+        out_keys[key][:len_left] = left[key]
+        out_keys[key][len_left:] = right[key]
+    idx_sort = out_keys.argsort(order=keys)
+    out_keys = out_keys[idx_sort]
+
+    # Get all keys
+    diffs = np.concatenate(([True], out_keys[1:] != out_keys[:-1], [True]))
+    idxs = np.flatnonzero(diffs)
+
+    # Main inner loop in Cython to compute the cartesion product
+    # indices for the given join type
+    int_join_type = {'inner': 0, 'outer': 1, 'left': 2, 'right': 3}[join_type]
+    masked, n_out, left_out, left_mask, right_out, right_mask = \
+        _np_utils.join_inner(idxs, idx_sort, len_left, int_join_type)
+
+    # If either of the inputs are masked then the output is masked
+    if any(isinstance(array, ma.MaskedArray) for array in (left, right)):
+        masked = True
+
+    if masked:
+        out = ma.empty(n_out, dtype=out_descrs)
+    else:
+        out = np.empty(n_out, dtype=out_descrs)
+
+    # If either input array was zero length then stub a new version
+    # with one row.  In this case the corresponding left_out or right_out
+    # will contain all zeros with mask set to true.  This allows the
+    # take(*_out) method calls to work as expected.
+    if len(left) == 0:
+        left = left.__class__(1, dtype=left.dtype)
+    if len(right) == 0:
+        right = right.__class__(1, dtype=right.dtype)
+
+    for out_name, left_right_names in col_name_map.items():
+        left_name, right_name = left_right_names
+
+        if left_name and right_name:  # this is a key which comes from left and right
+            out[out_name] = np.where(right_mask,
+                                     left[left_name].take(left_out),
+                                     right[right_name].take(right_out))
+            continue
+        elif left_name:  # out_name came from the left table
+            name, array, array_out, array_mask = left_name, left, left_out, left_mask
+        elif right_name:
+            name, array, array_out, array_mask = right_name, right, right_out, right_mask
+        else:
+            raise TableMergeError('Unexpected column names (maybe one is ""?)')
+        out[out_name] = array[name].take(array_out)
+        if masked:
+            if isinstance(array, ma.MaskedArray):
+                array_mask = array_mask | array[name].mask.take(array_out)
+            out[out_name].mask = array_mask
+
+    # If col_name_map supplied as a dict input, then update.
+    if isinstance(_col_name_map, collections.Mapping):
+        _col_name_map.update(col_name_map)
+
+    return out
+
+
+def _check_for_sequence_of_structured_arrays(arrays):
+    err = '`arrays` arg must be a sequence (e.g. list) of structured arrays'
+    if not isinstance(arrays, collections.Sequence):
+        raise TypeError(err)
+    for array in arrays:
+        # Must be structured array
+        if not isinstance(array, np.ndarray) or array.dtype.names is None:
+            raise TypeError(err)
+    if len(arrays) == 0:
+        raise ValueError('`arrays` arg must include at least one array')
+
+
+def vstack(arrays, join_type='inner', col_name_map=None):
+    """
+    Stack structured arrays vertically (by rows)
+
+    A ``join_type`` of 'exact' (default) means that the arrays must all
+    have exactly the same column names (though the order can vary).  If
+    ``join_type`` is 'inner' then the intersection of common columns will
+    be output.  A value of 'outer' means the output will have the union of
+    all columns, with array values being masked where no common values are
+    available.
+
+    Parameters
+    ----------
+
+    arrays : list of structured arrays
+        Structured array(s) to stack by rows (vertically)
+    join_type : str
+        Join type ('inner' | 'exact' | 'outer'), default is 'exact'
+    col_name_map : empty dict or None
+        If passed as a dict then it will be updated in-place with the
+        mapping of output to input column names.
+
+    Examples
+    --------
+
+    To stack two structured arrays by rows do::
+
+      >>> from astropy.table import np_utils
+      >>> t1 = np.array([(1, 2),
+      ...                (3, 4)], dtype=[('a', 'i4'), ('b', 'i4')])
+      >>> t2 = np.array([(5, 6),
+      ...                (7, 8)], dtype=[('a', 'i4'), ('b', 'i4')])
+      >>> np_utils.vstack([t1, t2])
+      array([(1, 2),
+             (3, 4),
+             (5, 6),
+             (7, 8)],
+            dtype=[('a', '<i4'), ('b', '<i4')])
+    """
+    # Store user-provided col_name_map until the end
+    _col_name_map = col_name_map
+
+    # Input validation
+    if join_type not in ('inner', 'exact', 'outer'):
+        raise ValueError("`join_type` arg must be one of 'inner', 'exact' or 'outer'")
+
+    _check_for_sequence_of_structured_arrays(arrays)
+
+    # Trivial case of one input array
+    if len(arrays) == 1:
+        return arrays[0]
+
+    # Start by assuming an outer match where all names go to output
+    names = set(chain(*[arr.dtype.names for arr in arrays]))
+    col_name_map = get_col_name_map(arrays, names)
+
+    # If require_match is True then the output must have exactly the same
+    # number of columns as each input array
+    if join_type == 'exact':
+        for names in col_name_map.values():
+            if any(x is None for x in names):
+                raise TableMergeError('Inconsistent columns in input arrays '
+                                      "(use 'inner' or 'outer' join_type to "
+                                      "allow non-matching columns)")
+        join_type = 'outer'
+
+    # For an inner join, keep only columns where all input arrays have that column
+    if join_type == 'inner':
+        col_name_map = OrderedDict((name, in_names) for name, in_names in col_name_map.items()
+                                   if all(x is not None for x in in_names))
+        if len(col_name_map) == 0:
+            raise TableMergeError('Input arrays have no columns in common')
+
+    # If there are any output columns where one or more input arrays are missing
+    # then the output must be masked.  If any input arrays are masked then
+    # output is masked.
+    masked = any(isinstance(arr, ma.MaskedArray) for arr in arrays)
+    for names in col_name_map.values():
+        if any(x is None for x in names):
+            masked = True
+            break
+
+    lens = [len(arr) for arr in arrays]
+    n_rows = sum(lens)
+    out_descrs = get_descrs(arrays, col_name_map)
+    if masked:
+        # Make a masked array with all values initially masked.  Note
+        # that setting an array value automatically unmasks it.
+        # See comment in hstack for heritage of this code.
+        out = ma.masked_array(np.zeros(n_rows, out_descrs),
+                              mask=np.ones(n_rows, ma.make_mask_descr(out_descrs)))
+    else:
+        out = np.empty(n_rows, dtype=out_descrs)
+
+    for out_name, in_names in col_name_map.items():
+        idx0 = 0
+        for name, array in izip(in_names, arrays):
+            idx1 = idx0 + len(array)
+            if name in array.dtype.names:
+                out[out_name][idx0:idx1] = array[name]
+            idx0 = idx1
+
+    # If col_name_map supplied as a dict input, then update.
+    if isinstance(_col_name_map, collections.Mapping):
+        _col_name_map.update(col_name_map)
+
+    return out
+
+
+def hstack(arrays, join_type='exact', uniq_col_name='{col_name}_{table_name}',
+           table_names=None, col_name_map=None):
+    """
+    Stack structured arrays by horizontally (by columns)
+
+    A ``join_type`` of 'exact' (default) means that the arrays must all
+    have exactly the same number of rows.  If ``join_type`` is 'inner' then
+    the intersection of rows will be output.  A value of 'outer' means
+    the output will have the union of all rows, with array values being
+    masked where no common values are available.
+
+    Parameters
+    ----------
+
+    arrays : List of structured array objects
+        Structured arrays to stack by columns (horizontally)
+    join_type : str
+        Join type ('inner' | 'exact' | 'outer'), default is 'exact'
+    uniq_col_name : str or None
+        String generate a unique output column name in case of a conflict.
+        The default is '{col_name}_{table_name}'.
+    table_names : list of str or None
+        Two-element list of table names used when generating unique output
+        column names.  The default is ['1', '2', ..].
+
+    Examples
+    --------
+
+    To stack two arrays horizontally (by columns) do::
+
+      >>> from astropy.table import np_utils
+      >>> t1 = np.array([(1, 2),
+      ...                (3, 4)], dtype=[('a', 'i4'), ('b', 'i4')])
+      >>> t2 = np.array([(5, 6),
+      ...                (7, 8)], dtype=[('c', 'i4'), ('d', 'i4')])
+      >>> np_utils.hstack([t1, t2])
+      array([(1, 2, 5, 6),
+             (3, 4, 7, 8)],
+            dtype=[('a', '<i4'), ('b', '<i4'), ('c', '<i4'), ('d', '<i4')])
+    """
+    # Store user-provided col_name_map until the end
+    _col_name_map = col_name_map
+
+    # Input validation
+    if join_type not in ('inner', 'exact', 'outer'):
+        raise ValueError("join_type arg must be either 'inner', 'exact' or 'outer'")
+    _check_for_sequence_of_structured_arrays(arrays)
+
+    if table_names is None:
+        table_names = ['{0}'.format(ii + 1) for ii in range(len(arrays))]
+    if len(arrays) != len(table_names):
+        raise ValueError('Number of arrays must match number of table_names')
+
+    # Trivial case of one input arrays
+    if len(arrays) == 1:
+        return arrays[0]
+
+    col_name_map = get_col_name_map(arrays, [], uniq_col_name, table_names)
+
+    # If require_match is True then all input arrays must have the same length
+    arr_lens = [len(arr) for arr in arrays]
+    if join_type == 'exact':
+        if len(set(arr_lens)) > 1:
+            raise TableMergeError("Inconsistent number of rows in input arrays "
+                                  "(use 'inner' or 'outer' join_type to allow "
+                                  "non-matching rows)")
+        join_type = 'outer'
+
+    # For an inner join, keep only columns where all input arrays have that column
+    if join_type == 'inner':
+        min_arr_len = min(arr_lens)
+        arrays = [arr[:min_arr_len] for arr in arrays]
+        arr_lens = [min_arr_len for arr in arrays]
+
+    # If there are any output rows where one or more input arrays are missing
+    # then the output must be masked.  If any input arrays are masked then
+    # output is masked.
+    masked = (any(isinstance(arr, ma.MaskedArray) for arr in arrays) or
+              len(set(arr_lens)) > 1)
+
+    n_rows = max(arr_lens)
+    out_descrs = get_descrs(arrays, col_name_map)
+    if masked:
+        # Adapted from ma.all_masked() code.  Here the array is filled with
+        # zeros instead of empty.  This avoids the bug reported here:
+        # https://github.com/numpy/numpy/issues/3276
+        out = ma.masked_array(np.zeros(n_rows, out_descrs),
+                              mask=np.ones(n_rows, ma.make_mask_descr(out_descrs)))
+    else:
+        out = np.empty(n_rows, dtype=out_descrs)
+
+    for out_name, in_names in col_name_map.items():
+        for name, array, arr_len in izip(in_names, arrays, arr_lens):
+            if name is not None:
+                out[out_name][:arr_len] = array[name]
+
+    # If col_name_map supplied as a dict input, then update.
+    if isinstance(_col_name_map, collections.Mapping):
+        _col_name_map.update(col_name_map)
+
+    return out
+
+
+def get_groups(table, keys):
+    """
+    Get groups for numpy structured array on specified keys.
+
+    Parameters
+    ----------
+    table : structured array
+        Table to group
+    keys : str or list of str
+        Name(s) of column(s) used to match rows of table.
+    """
+    if isinstance(keys, basestring):
+        keys = (keys,)
+
+    # Check the key columns
+    for name in keys:
+        if name not in table.dtype.names:
+            raise TableMergeError('Table does not have key column {1!r}'
+                                  .format(name))
+        if hasattr(table[name], 'mask') and np.any(table[name].mask):
+            raise TableMergeError('{0} key column {1!r} has missing values'
+                                  .format(name))
+
+    # Make sure we work with ravelled arrays
+    table = table.ravel()
+    len_table = len(table)
+
+    # oined array dtype as a list of descr (name, type_str, shape) tuples
+    col_name_map = get_col_name_map([table], keys)
+    out_descrs = get_descrs([table], col_name_map)
+
+    # Make an array with just the key columns
+    out_keys_dtype = [descr for descr in out_descrs if descr[0] in keys]
+    out_keys = np.empty(len_table, dtype=out_keys_dtype)
+    for key in keys:
+        out_keys[key] = table[key]
+    idx_sort = out_keys.argsort(order=keys)
+    out_keys = out_keys[idx_sort]
+
+    # Get all keys
+    diffs = np.concatenate(([True], out_keys[1:] != out_keys[:-1], [True]))
+    idxs = np.flatnonzero(diffs)
+
+    return idxs, out_keys
diff --git a/astropy/table/operations.py b/astropy/table/operations.py
new file mode 100644
index 0000000..24db5b6
--- /dev/null
+++ b/astropy/table/operations.py
@@ -0,0 +1,295 @@
+"""
+High-level table operations:
+
+- join()
+- hstack()
+- vstack()
+"""
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+from copy import deepcopy
+import warnings
+import collections
+
+import numpy as np
+
+from ..utils import OrderedDict, metadata
+
+from . import np_utils
+
+__all__ = ['join', 'hstack', 'vstack']
+
+
+def _merge_col_meta(out, tables, col_name_map, idx_left=0, idx_right=1,
+                    metadata_conflicts='warn'):
+    """
+    Merge column meta data for the ``out`` table.
+
+    This merges column meta, which includes attributes unit, format,
+    and description, as well as the actual `meta` atttribute.  It is
+    assumed that the ``out`` table was created by merging ``tables``.
+    The ``col_name_map`` provides the mapping from col name in ``out``
+    back to the original name (which may be different).
+    """
+    # Set column meta
+    attrs = ('unit', 'format', 'description')
+    for out_col in out.columns.values():
+        for idx_table, table in enumerate(tables):
+            left_col = out_col
+            right_name = col_name_map[out_col.name][idx_table]
+
+            if right_name:
+                right_col = table[right_name]
+                out_col.meta = metadata.merge(left_col.meta, right_col.meta, metadata_conflicts=metadata_conflicts)
+                for attr in attrs:
+
+                    # Pick the metadata item that is not None, or they are both
+                    # not None, then if they are equal, there is no conflict,
+                    # and if they are different, there is a conflict and we
+                    # pick the one on the right (or raise an error).
+
+                    left_attr = getattr(left_col, attr)
+                    right_attr = getattr(right_col, attr)
+
+                    if left_attr is None:
+                        # This may not seem necessary since merge_attr gets set
+                        # to right_attr, but not all objects support != which is
+                        # needed for one of the if clauses.
+                        merge_attr = right_attr
+                    elif right_attr is None:
+                        merge_attr = left_attr
+                    elif left_attr != right_attr:
+                        if metadata_conflicts == 'warn':
+                            warnings.warn('In merged column {0!r} the {1!r} attribute does not match '
+                                          '({2} != {3}).  Using {3} for merged output'
+                                          .format(out_col.name, attr, left_attr, right_attr),
+                                          metadata.MergeConflictWarning)
+                        elif metadata_conflicts == 'error':
+                            raise metadata.MergeConflictError('In merged column {0!r} the {1!r} attribute does not match '
+                                          '({2} != {3})'.format(out_col.name, attr, left_attr, right_attr))
+                        elif metadata_conflicts != 'silent':
+                            raise ValueError('metadata_conflict argument must be one of "silent", "warn", or "error"')
+                        merge_attr = right_attr
+                    else:  # left_attr == right_attr
+                        merge_attr = right_attr
+
+                    setattr(out_col, attr, merge_attr)
+
+
+def _merge_table_meta(out, tables, metadata_conflicts='warn'):
+    out_meta = deepcopy(tables[0].meta)
+    for table in tables[1:]:
+        out_meta = metadata.merge(out_meta, table.meta, metadata_conflicts=metadata_conflicts)
+    out.meta.update(out_meta)
+
+
+def _get_list_of_tables(tables):
+    """
+    Check that tables is a Table or sequence of Tables.  Returns the
+    corresponding list of Tables.
+    """
+    from .table import Table, Row
+
+    # Make sure we have a list of things
+    if not isinstance(tables, collections.Sequence):
+        tables = [tables]
+
+    # Make sure each thing is a Table or Row
+    if any(not isinstance(x, (Table, Row)) for x in tables):
+        raise TypeError('`tables` arg must be a Table or sequence of Tables or Rows')
+
+    # Convert any Rows to Tables
+    tables = [(x if isinstance(x, Table) else Table(x)) for x in tables]
+
+    return tables
+
+
+def join(left, right, keys=None, join_type='inner',
+         uniq_col_name='{col_name}_{table_name}',
+         table_names=['1', '2'], metadata_conflicts='warn'):
+    """
+    Perform a join of the left table with the right table on specified keys.
+
+    Parameters
+    ----------
+    left : Table object or a value that will initialize a Table object
+        Left side table in the join
+    right : Table object or a value that will initialize a Table object
+        Right side table in the join
+    keys : str or list of str
+        Name(s) of column(s) used to match rows of left and right tables.
+        Default is to use all columns which are common to both tables.
+    join_type : str
+        Join type ('inner' | 'outer' | 'left' | 'right'), default is 'inner'
+    uniq_col_name : str or None
+        String generate a unique output column name in case of a conflict.
+        The default is '{col_name}_{table_name}'.
+    table_names : list of str or None
+        Two-element list of table names used when generating unique output
+        column names.  The default is ['1', '2'].
+    metadata_conflicts : str
+        How to proceed with metadata conflicts. This should be one of:
+            * ``'silent'``: silently pick the last conflicting meta-data value
+            * ``'warn'``: pick the last conflicting meta-data value, but emit a warning (default)
+            * ``'error'``: raise an exception.
+    """
+    from .table import Table
+
+    # Try converting inputs to Table as needed
+    if not isinstance(left, Table):
+        left = Table(left)
+    if not isinstance(right, Table):
+        right = Table(right)
+
+    col_name_map = OrderedDict()
+    out_data = np_utils.join(left._data, right._data, keys, join_type,
+                             uniq_col_name, table_names, col_name_map)
+    # Create the output (Table or subclass of Table)
+    out = Table(out_data)
+
+    # Merge the column and table meta data. Table subclasses might override
+    # these methods for custom merge behavior.
+    _merge_col_meta(out, [left, right], col_name_map, metadata_conflicts=metadata_conflicts)
+    _merge_table_meta(out, [left, right], metadata_conflicts=metadata_conflicts)
+
+    return out
+
+
+def vstack(tables, join_type='outer', metadata_conflicts='warn'):
+    """
+    Stack tables vertically (along rows)
+
+    A ``join_type`` of 'exact' means that the tables must all
+    have exactly the same column names (though the order can vary).  If
+    ``join_type`` is 'inner' then the intersection of common columns will
+    be output.  A value of 'outer' (default) means the output will have the union of
+    all columns, with table values being masked where no common values are
+    available.
+
+    Parameters
+    ----------
+
+    tables : Table or list of Table objects
+        Table(s) to stack along rows (vertically) with the current table
+    join_type : str
+        Join type ('inner' | 'exact' | 'outer'), default is 'exact'
+    metadata_conflicts : str
+        How to proceed with metadata conflicts. This should be one of:
+            * ``'silent'``: silently pick the last conflicting meta-data value
+            * ``'warn'``: pick the last conflicting meta-data value, but emit a warning (default)
+            * ``'error'``: raise an exception.
+
+    Examples
+    --------
+
+    To stack two tables along rows do::
+
+      >>> from astropy.table import vstack, Table
+      >>> t1 = Table({'a': [1, 2], 'b': [3, 4]}, names=('a', 'b'))
+      >>> t2 = Table({'a': [5, 6], 'b': [7, 8]}, names=('a', 'b'))
+      >>> print t1
+       a   b
+      --- ---
+        1   3
+        2   4
+      >>> print t2
+       a   b
+      --- ---
+        5   7
+        6   8
+      >>> print vstack([t1, t2])
+       a   b
+      --- ---
+        1   3
+        2   4
+        5   7
+        6   8
+    """
+    from .table import Table
+
+    tables = _get_list_of_tables(tables)  # validates input
+    arrays = [table._data for table in tables]
+    col_name_map = OrderedDict()
+
+    out_data = np_utils.vstack(arrays, join_type, col_name_map)
+    out = Table(out_data)
+
+    # Merge column and table metadata
+    _merge_col_meta(out, tables, col_name_map, metadata_conflicts=metadata_conflicts)
+    _merge_table_meta(out, tables, metadata_conflicts=metadata_conflicts)
+
+    return out
+
+
+def hstack(tables, join_type='outer',
+           uniq_col_name='{col_name}_{table_name}', table_names=None,
+           metadata_conflicts='warn'):
+    """
+    Stack tables along columns (horizontally)
+
+    A ``join_type`` of 'exact' means that the tables must all
+    have exactly the same number of rows.  If ``join_type`` is 'inner' then
+    the intersection of rows will be output.  A value of 'outer' (default) means
+    the output will have the union of all rows, with table values being
+    masked where no common values are available.
+
+    Parameters
+    ----------
+
+    tables : List of Table objects
+        Tables to stack along columns (horizontally) with the current table
+    join_type : str
+        Join type ('inner' | 'exact' | 'outer'), default is 'outer'
+    uniq_col_name : str or None
+        String generate a unique output column name in case of a conflict.
+        The default is '{col_name}_{table_name}'.
+    table_names : list of str or None
+        Two-element list of table names used when generating unique output
+        column names.  The default is ['1', '2', ..].
+    col_name_map : empty dict or None
+        If passed as a dict then it will be updated in-place with the
+        mapping of output to input column names.
+    metadata_conflicts : str
+        How to proceed with metadata conflicts. This should be one of:
+            * ``'silent'``: silently pick the last conflicting meta-data value
+            * ``'warn'``: pick the last conflicting meta-data value, but emit a warning (default)
+            * ``'error'``: raise an exception.
+
+    Examples
+    --------
+
+    To stack two tables horizontally (along columns) do::
+
+      >>> from astropy.table import Table, hstack
+      >>> t1 = Table({'a': [1, 2], 'b': [3, 4]}, names=('a', 'b'))
+      >>> t2 = Table({'c': [5, 6], 'd': [7, 8]}, names=('c', 'd'))
+      >>> print t1
+       a   b
+      --- ---
+        1   3
+        2   4
+      >>> print t2
+       c   d
+      --- ---
+        5   7
+        6   8
+      >>> print hstack([t1, t2])
+       a   b   c   d
+      --- --- --- ---
+        1   3   5   7
+        2   4   6   8
+    """
+    from .table import Table
+
+    tables = _get_list_of_tables(tables)  # validates input
+    arrays = [table._data for table in tables]
+    col_name_map = OrderedDict()
+
+    out_data = np_utils.hstack(arrays, join_type, uniq_col_name, table_names,
+                               col_name_map)
+    out = Table(out_data)
+
+    _merge_col_meta(out, tables, col_name_map, metadata_conflicts=metadata_conflicts)
+    _merge_table_meta(out, tables, metadata_conflicts=metadata_conflicts)
+
+    return out
diff --git a/astropy/table/pprint.py b/astropy/table/pprint.py
index 79bbdd0..d9dad1d 100644
--- a/astropy/table/pprint.py
+++ b/astropy/table/pprint.py
@@ -1,6 +1,7 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 import os
 import sys
+import inspect
 from itertools import izip
 
 from .. import log
@@ -10,11 +11,12 @@ from ..config import ConfigurationItem
 _format_funcs = {None: lambda format_, val: str(val)}
 
 MAX_LINES = ConfigurationItem('max_lines', 25, 'Maximum number of lines for '
-    'the pretty-printer to use if it cannot determine the terminal size. '
-    'Negative numbers mean no limit.')
+                              'the pretty-printer to use if it cannot determine the terminal size. '
+                              'Negative numbers mean no limit.')
 MAX_WIDTH = ConfigurationItem('max_width', 80, 'Maximum number of characters '
-    'for the pretty-printer to use per line if it cannot determine the '
-    'terminal size.  Negative numbers mean no limit.')
+                              'for the pretty-printer to use per line if it cannot determine the '
+                              'terminal size.  Negative numbers mean no limit.')
+
 
 def _get_pprint_size(max_lines=None, max_width=None):
     """Get the output size (number of lines and character width) for Column and
@@ -77,34 +79,46 @@ def _get_pprint_size(max_lines=None, max_width=None):
 
 def _auto_format_func(format_, val):
     """Format ``val`` according to ``format_`` for both old- and new-
-    style format specifications.  More importantly, determine and cache
-    (in _format_funcs) a function that will do this subsequently.  In
-    this way this complicated logic is only done for the first value.
+    style format specifications or using a user supplied function.
+    More importantly, determine and cache (in _format_funcs) a function
+    that will do this subsequently.  In this way this complicated logic is
+    only done for the first value.
 
     Returns the formatted value.
     """
-    try:
-        # Convert val to Python object with tolist().  See
-        # https://github.com/astropy/astropy/issues/148#issuecomment-3930809
-        out = format_.format(val.tolist())
-        # Require that the format statement actually did something
-        if out == format_:
-            raise ValueError
-        format_func = lambda format_, val: format_.format(val.tolist())
-    except:  # Not sure what exceptions might be raised
+    if inspect.isfunction(format_):
+        format_func = lambda format_, val: format_(val.tolist())
+        try:
+            out = format_func(format_, val)
+            if not isinstance(out, basestring):
+                raise ValueError('Format function for value {0} returned {1} instead of string type'
+                                 .format(val, type(val)))
+        except Exception as err:
+            raise ValueError('Format function for value {0} failed: {1}'
+                             .format(val, err))
+    else:
         try:
-            out = format_ % val
+            # Convert val to Python object with tolist().  See
+            # https://github.com/astropy/astropy/issues/148#issuecomment-3930809
+            out = format_.format(val.tolist())
+            # Require that the format statement actually did something
             if out == format_:
                 raise ValueError
-            format_func = lambda format_, val: format_ % val
-        except:
-            raise ValueError('Unable to parse format string {0}'
-                             .format(format_))
+            format_func = lambda format_, val: format_.format(val.tolist())
+        except:  # Not sure what exceptions might be raised
+            try:
+                out = format_ % val
+                if out == format_:
+                    raise ValueError
+                format_func = lambda format_, val: format_ % val
+            except:
+                raise ValueError('Unable to parse format string {0}'
+                                 .format(format_))
     _format_funcs[format_] = format_func
     return out
 
 
-def _pformat_col(col, max_lines=None, show_name=True, show_units=False):
+def _pformat_col(col, max_lines=None, show_name=True, show_unit=False):
     """Return a list of formatted string representation of column values.
 
     Parameters
@@ -115,8 +129,8 @@ def _pformat_col(col, max_lines=None, show_name=True, show_units=False):
     show_name : bool
         Include column name (default=True)
 
-    show_units : bool
-        Include a header row for units (default=False)
+    show_unit : bool
+        Include a header row for unit (default=False)
 
     Returns
     -------
@@ -128,7 +142,7 @@ def _pformat_col(col, max_lines=None, show_name=True, show_units=False):
 
     """
     outs = {}  # Some values from _pformat_col_iter iterator that are needed here
-    col_strs = list(_pformat_col_iter(col, max_lines, show_name, show_units, outs))
+    col_strs = list(_pformat_col_iter(col, max_lines, show_name, show_unit, outs))
     col_width = max(len(x) for x in col_strs)
 
     # Center line content and generate dashed headerline
@@ -144,7 +158,7 @@ def _pformat_col(col, max_lines=None, show_name=True, show_units=False):
     return col_strs, outs['n_header']
 
 
-def _pformat_col_iter(col, max_lines, show_name, show_units, outs):
+def _pformat_col_iter(col, max_lines, show_name, show_unit, outs):
     """Iterator which yields formatted string representation of column values.
 
     Parameters
@@ -155,8 +169,8 @@ def _pformat_col_iter(col, max_lines, show_name, show_units, outs):
     show_name : bool
         Include column name (default=True)
 
-    show_units : bool
-        Include a header row for units (default=False)
+    show_unit : bool
+        Include a header row for unit (default=False)
 
     out : dict
         Must be a dict which is used to pass back additional values
@@ -182,11 +196,11 @@ def _pformat_col_iter(col, max_lines, show_name, show_units, outs):
             col_name = col.name
         n_header += 1
         yield col_name
-    if show_units:
+    if show_unit:
         i_centers.append(n_header)
         n_header += 1
-        yield str(col.units or '')
-    if show_units or show_name:
+        yield str(col.unit or '')
+    if show_unit or show_name:
         i_dashes = n_header
         n_header += 1
         yield '---'
@@ -220,8 +234,9 @@ def _pformat_col_iter(col, max_lines, show_name, show_units, outs):
     outs['i_centers'] = i_centers
     outs['i_dashes'] = i_dashes
 
+
 def _pformat_table(table, max_lines=None, max_width=None, show_name=True,
-                   show_units=False, html=False):
+                   show_unit=False, html=False, tableid=None):
     """Return a list of lines for the formatted string representation of
     the table.
 
@@ -236,12 +251,17 @@ def _pformat_table(table, max_lines=None, max_width=None, show_name=True,
     show_name : bool
         Include a header row for column names (default=True)
 
-    show_units : bool
-        Include a header row for units (default=False)
+    show_unit : bool
+        Include a header row for unit (default=False)
 
     html : bool
         Format the output as an HTML table (default=False)
 
+    tableid : str or None
+        An ID tag for the table; only used if html is set.  Default is
+        "table{id}", where id is the unique integer id of the table object,
+        id(table)
+
     Returns
     -------
     out : str
@@ -256,7 +276,7 @@ def _pformat_table(table, max_lines=None, max_width=None, show_name=True,
     cols = []
     for col in table.columns.values():
         lines, n_header = _pformat_col(col, max_lines, show_name,
-                                       show_units)
+                                       show_unit)
         cols.append(lines)
 
     if not cols:
@@ -283,7 +303,9 @@ def _pformat_table(table, max_lines=None, max_width=None, show_name=True,
     if html:
         from ..utils.xml.writer import xml_escape
 
-        rows.append('<table>')
+        if tableid is None:
+            tableid = 'table{id}'.format(id=id(table))
+        rows.append('<table id="{tid}">'.format(tid=tableid))
         for i in range(n_rows):
             # _pformat_col output has a header line '----' which is not needed here
             if i == n_header - 1:
@@ -292,6 +314,8 @@ def _pformat_table(table, max_lines=None, max_width=None, show_name=True,
             vals = ('<{0}>{1}</{2}>'.format(td, xml_escape(col[i].strip()), td)
                     for col in cols)
             row = ('<tr>' + ''.join(vals) + '</tr>')
+            if i < n_header:
+                row = ('<thead>' + row + '</thead>')
             rows.append(row)
         rows.append('</table>')
     else:
@@ -303,7 +327,7 @@ def _pformat_table(table, max_lines=None, max_width=None, show_name=True,
 
 
 def _more_tabcol(tabcol, max_lines=None, max_width=None, show_name=True,
-                show_units=False):
+                 show_unit=False):
     """Interactive "more" of a table or column.
 
     Parameters
@@ -317,8 +341,8 @@ def _more_tabcol(tabcol, max_lines=None, max_width=None, show_name=True,
     show_name : bool
         Include a header row for column names (default=True)
 
-    show_units : bool
-        Include a header row for units (default=False)
+    show_unit : bool
+        Include a header row for unit (default=False)
     """
     allowed_keys = 'f br<>qhpn'
 
@@ -326,13 +350,13 @@ def _more_tabcol(tabcol, max_lines=None, max_width=None, show_name=True,
     n_header = 0
     if show_name:
         n_header += 1
-    if show_units:
+    if show_unit:
         n_header += 1
-    if show_name or show_units:
+    if show_name or show_unit:
         n_header += 1
 
     # Set up kwargs for pformat call.  Only Table gets max_width.
-    kwargs = dict(max_lines=-1, show_name=show_name, show_units=show_units)
+    kwargs = dict(max_lines=-1, show_name=show_name, show_unit=show_unit)
     if hasattr(tabcol, 'columns'):  # tabcol is a table
         kwargs['max_width'] = max_width
 
@@ -340,7 +364,7 @@ def _more_tabcol(tabcol, max_lines=None, max_width=None, show_name=True,
     # This is because get_pprint_size leaves 6 extra lines so that in
     # ipython you normally see the last input line.
     max_lines1, max_width = _get_pprint_size(max_lines, max_width)
-    if max_lines == None:
+    if max_lines is None:
         max_lines1 += 2
     delta_lines = max_lines1 - n_header
 
diff --git a/astropy/table/setup_package.py b/astropy/table/setup_package.py
new file mode 100644
index 0000000..f9b0da1
--- /dev/null
+++ b/astropy/table/setup_package.py
@@ -0,0 +1,26 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+import os
+from distutils.extension import Extension
+
+ROOT = os.path.relpath(os.path.dirname(__file__))
+
+
+def get_extensions():
+    sources = [os.path.join(ROOT, "_np_utils.pyx")]
+    include_dirs = ['numpy']
+    libraries = []
+
+    table_ext = Extension(
+        name="astropy.table._np_utils",
+        sources=sources,
+        include_dirs=include_dirs,
+        libraries=libraries,)
+
+    return [table_ext]
+
+def get_package_data():
+    paths = [os.path.join('data', '*.js'),
+             os.path.join('data', '*.css'),
+             ]
+    return {'astropy.table': paths}
+    
diff --git a/astropy/table/table.py b/astropy/table/table.py
index d6640b2..d0dff51 100644
--- a/astropy/table/table.py
+++ b/astropy/table/table.py
@@ -1,23 +1,42 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
 import abc
 import collections
-import sys
-from copy import deepcopy
 import functools
+import sys
+import operator
+import platform
 import warnings
 
+from copy import deepcopy
+from distutils import version
+
 import numpy as np
 from numpy import ma
 
-from ..units import Unit
 from .. import log
-from ..utils import OrderedDict, isiterable
-from .pprint import _pformat_table, _pformat_col, _pformat_col_iter, _more_tabcol
-from ..utils.console import color_print
 from ..config import ConfigurationItem
-from  ..io import registry as io_registry
+from ..extern import six
+from ..io import registry as io_registry
+from ..units import Unit, Quantity
+from ..utils import OrderedDict, isiterable, deprecated
+from ..utils.console import color_print
+from ..utils.exceptions import AstropyDeprecationWarning
+from ..utils.metadata import MetaData
+from . import operations, groups
+from .pprint import (_pformat_table, _pformat_col, _pformat_col_iter,
+                     _more_tabcol)
+
+# In Python 3, prior to Numpy 1.6.2, there was a bug (in Numpy) that caused
+# sorting of structured arrays to silently fail under certain circumstances (for
+# example if the Table contains string columns) on MacOS X and Windows
+NUMPY_VERSION = version.LooseVersion(np.__version__)
+SKIP_STRING_SORT = (platform.system() in ('Darwin', 'Windows') and six.PY3 and
+                    NUMPY_VERSION < version.LooseVersion('1.6.2'))
+
+if SKIP_STRING_SORT:
+    __doctest_skip__ = ['Table.sort']
 
-PY3 = sys.version_info[0] >= 3
 
 # Python 2 and 3 source compatibility
 try:
@@ -25,39 +44,29 @@ try:
 except NameError:
     unicode = basestring = str
 
-NUMPY_LT_1P5 = [int(x) for x in np.__version__.split('.')[:2]] < [1, 5]
-
-AUTO_COLNAME = ConfigurationItem('auto_colname', 'col{0}',
+AUTO_COLNAME = ConfigurationItem(
+    'auto_colname', 'col{0}',
     'The template that determines the name of a column if it cannot be '
     'determined. Uses new-style (format method) string formatting')
 
-WARN_COLUMN_ARGS = ConfigurationItem("warn_column_args",
-                                     True,
-                                     "Show a warning when a Column is created "
-                                     "in a way that will break in Astropy 0.3")
-WARN_COLUMN_ARGS_MESSAGE = \
-"""In the next major release of astropy (0.3), the order of function
-arguments for creating a {class_name} will change.  Currently the order is
-{class_name}(name, data, ...), but in 0.3 and later it will be
-{class_name}(data, name, ...).  This is consistent with Table and NumPy.
-
-In order to use the same code for Astropy 0.2 and 0.3, column objects
-should be created using named keyword arguments for data and name, e.g.:
-{class_name}(name='a', data=[1, 2])."""
+ERROR_COLUMN_ARGS_MESSAGE = """
+The first argument to {class_name} is the string {first_arg}, which was probably intended
+as the column name.  Starting in Astropy 0.3 the argument order for initializing
+a {class_name} object is {class_name}(data=None, name=None, ...)."""
 
 
 def _check_column_new_args(func):
     """
-    Decorator for Column and MaskedColumn __new__(cls, ...) to check that there
-    is only one ``args`` value (which is the class).  Everything else
-    should be a keyword argument.  Otherwise the calling code will break
-    when the name and data args are swapped in 0.3.
+    Decorator for transition from 0.2 arg order (name, data, ..) to 0.3 order (data,
+    name, ...).  Check if user provided a string as the first arg (note that a string
+    cannot be valid as ``data``).  Raise an error with a useful message.
     """
     @functools.wraps(func)
     def wrapper(*args, **kwargs):
-        if len(args) > 1 and WARN_COLUMN_ARGS():
+        if len(args) > 1 and isinstance(args[1], basestring):
             cls = args[0]  # Column or MaskedColumn class from __new__(cls, ..)
-            warnings.warn(WARN_COLUMN_ARGS_MESSAGE.format(class_name=cls.__name__))
+            raise ValueError(ERROR_COLUMN_ARGS_MESSAGE.format(class_name=cls.__name__,
+                                                              first_arg=repr(args[1])))
         return func(*args, **kwargs)
     return wrapper
 
@@ -132,10 +141,34 @@ class TableColumns(OrderedDict):
         return list(OrderedDict.values(self))
 
 
+def _column_compare(op):
+    """
+    Convenience function to return a function that properly does a
+    comparison between a column object and something else.
+    """
+    def compare(self, other):
+        # We have to define this to ensure that we always return boolean arrays
+        # (otherwise in some cases, Column objects are returned).
+        if isinstance(other, BaseColumn):
+            other = other.data
+        return op(self.data, other)
+    return compare
+
+
 class BaseColumn(object):
 
     __metaclass__ = abc.ABCMeta
 
+    meta = MetaData()
+
+    # Define comparison operators
+    __eq__ = _column_compare(operator.eq)
+    __ne__ = _column_compare(operator.ne)
+    __lt__ = _column_compare(operator.lt)
+    __le__ = _column_compare(operator.le)
+    __gt__ = _column_compare(operator.gt)
+    __ge__ = _column_compare(operator.ge)
+
     def __array_finalize__(self, obj):
         # Obj will be none for direct call to Column() creator
         if obj is None:
@@ -145,7 +178,7 @@ class BaseColumn(object):
         # or viewcast e.g. obj.view(Column).  In either case we want to
         # init Column attributes for self from obj if possible.
         self.parent_table = None
-        for attr in ('name', 'units', 'format', 'description'):
+        for attr in ('name', 'unit', 'format', 'description'):
             val = getattr(obj, attr, None)
             setattr(self, attr, val)
         self.meta = deepcopy(getattr(obj, 'meta', {}))
@@ -194,11 +227,11 @@ class BaseColumn(object):
         return (self.name, self.dtype.str, self.shape[1:])
 
     def __repr__(self):
-        units = None if self.units is None else str(self.units)
-        out = "<{0} name={1} units={2} format={3} " \
+        unit = None if self.unit is None else str(self.unit)
+        out = "<{0} name={1} unit={2} format={3} " \
             "description={4}>\n{5}".format(
             self.__class__.__name__,
-            repr(self.name), repr(units),
+            repr(self.name), repr(unit),
             repr(self.format), repr(self.description), repr(self.data))
 
         return out
@@ -213,21 +246,21 @@ class BaseColumn(object):
         str_vals : iterator
             Column values formatted as strings
         """
-        # pprint._pformat_col_iter(col, max_lines, show_name, show_units, outs)
+        # pprint._pformat_col_iter(col, max_lines, show_name, show_unit, outs)
         # Iterate over formatted values with no max number of lines, no column
-        # name, no units, and ignoring the returned header info in outs.
+        # name, no unit, and ignoring the returned header info in outs.
         for str_val in _pformat_col_iter(self, -1, False, False, {}):
             yield str_val
 
     def attrs_equal(self, col):
         """Compare the column attributes of ``col`` to this object.
 
-        The comparison attributes are: name, units, dtype, format, description,
+        The comparison attributes are: name, unit, dtype, format, description,
         and meta.
 
         Parameters
         ----------
-        col: Column
+        col : Column
             Comparison column
 
         Returns
@@ -238,12 +271,12 @@ class BaseColumn(object):
         if not isinstance(col, BaseColumn):
             raise ValueError('Comparison `col` must be a Column or MaskedColumn object')
 
-        attrs = ('name', 'units', 'dtype', 'format', 'description', 'meta')
+        attrs = ('name', 'unit', 'dtype', 'format', 'description', 'meta')
         equal = all(getattr(self, x) == getattr(col, x) for x in attrs)
 
         return equal
 
-    def pformat(self, max_lines=None, show_name=True, show_units=False):
+    def pformat(self, max_lines=None, show_name=True, show_unit=False):
         """Return a list of formatted string representation of column values.
 
         If no value of `max_lines` is supplied then the height of the screen
@@ -260,8 +293,8 @@ class BaseColumn(object):
         show_name : bool
             Include column name (default=True)
 
-        show_units : bool
-            Include a header row for units (default=False)
+        show_unit : bool
+            Include a header row for unit (default=False)
 
         Returns
         -------
@@ -269,10 +302,10 @@ class BaseColumn(object):
             List of lines with header and formatted column values
 
         """
-        lines, n_header = _pformat_col(self, max_lines, show_name, show_units)
+        lines, n_header = _pformat_col(self, max_lines, show_name, show_unit)
         return lines
 
-    def pprint(self, max_lines=None, show_name=True, show_units=False):
+    def pprint(self, max_lines=None, show_name=True, show_unit=False):
         """Print a formatted string representation of column values.
 
         If no value of `max_lines` is supplied then the height of the screen
@@ -289,17 +322,17 @@ class BaseColumn(object):
         show_name : bool
             Include column name (default=True)
 
-        show_units : bool
-            Include a header row for units (default=False)
+        show_unit : bool
+            Include a header row for unit (default=False)
         """
-        lines, n_header = _pformat_col(self, max_lines, show_name, show_units)
+        lines, n_header = _pformat_col(self, max_lines, show_name, show_unit)
         for i, line in enumerate(lines):
             if i < n_header:
                 color_print(line, 'red')
             else:
                 print line
 
-    def more(self, max_lines=None, show_name=True, show_units=False):
+    def more(self, max_lines=None, show_name=True, show_unit=False):
         """Interactively browse column with a paging interface.
 
         Supported keys::
@@ -322,78 +355,132 @@ class BaseColumn(object):
         show_name : bool
             Include a header row for column names (default=True)
 
-        show_units : bool
-            Include a header row for units (default=False)
+        show_unit : bool
+            Include a header row for unit (default=False)
 
         """
         _more_tabcol(self, max_lines=max_lines, show_name=show_name,
-                     show_units=show_units)
+                     show_unit=show_unit)
 
     @property
-    def units(self):
+    def unit(self):
         """
-        The units associated with this column.  May be a string or a
+        The unit associated with this column.  May be a string or a
         `astropy.units.UnitBase` instance.
 
-        Setting the `units` property does not change the values of the
-        data.  To perform a unit conversion, use `convert_units_to`.
+        Setting the `unit` property does not change the values of the
+        data.  To perform a unit conversion, use `convert_unit_to`.
         """
-        return self._units
+        return self._unit
 
-    @units.setter
-    def units(self, units):
-        if units is None:
-            self._units = None
+    @unit.setter
+    def unit(self, unit):
+        if unit is None:
+            self._unit = None
         else:
-            self._units = Unit(units, parse_strict='silent')
+            self._unit = Unit(unit, parse_strict='silent')
+
+    @unit.deleter
+    def unit(self):
+        self._unit = None
+
+    @property
+    @deprecated('0.3', alternative=':attr:`Column.unit`')
+    def units(self):
+        return self.unit
+
+    @units.setter
+    @deprecated('0.3', alternative=':attr:`Column.unit`')
+    def units(self, unit):
+        self.unit = unit
 
     @units.deleter
+    @deprecated('0.3', alternative=':attr:`Column.unit`')
     def units(self):
-        self._units = None
+        del self.unit
 
-    def convert_units_to(self, new_units, equivalencies=[]):
+    def convert_unit_to(self, new_unit, equivalencies=[]):
         """
         Converts the values of the column in-place from the current
         unit to the given unit.
 
-        To change the units associated with this column without
-        actually changing the data values, simply set the `units`
+        To change the unit associated with this column without
+        actually changing the data values, simply set the `unit`
         property.
 
         Parameters
         ----------
-        new_units : str or `astropy.units.UnitBase` instance
+        new_unit : str or `astropy.units.UnitBase` instance
             The unit to convert to.
 
         equivalencies : list of equivalence pairs, optional
-           A list of equivalence pairs to try if the units are not
+           A list of equivalence pairs to try if the unit are not
            directly convertible.  See :ref:`unit_equivalencies`.
 
         Raises
         ------
-        astropy.units.UnitException
+        astropy.units.UnitsError
             If units are inconsistent
         """
-        if self.units is None:
-            raise ValueError("No units set on column")
-        self.data[:] = self.units.to(
-            new_units, self.data, equivalencies=equivalencies)
-        self.units = new_units
+        if self.unit is None:
+            raise ValueError("No unit set on column")
+        self.data[:] = self.unit.to(
+            new_unit, self.data, equivalencies=equivalencies)
+        self.unit = new_unit
 
     def __str__(self):
         lines, n_header = _pformat_col(self)
         return '\n'.join(lines)
 
+    @property
+    def groups(self):
+        if not hasattr(self, '_groups'):
+            self._groups = groups.ColumnGroups(self)
+        return self._groups
+
+    def group_by(self, keys):
+        """
+        Group this column by the specified ``keys``
+
+        This effectively splits the column into groups which correspond to unique values of
+        the ``keys`` grouping object.  The output is a new `Column` or `MaskedColumn` which
+        contains a copy of this column but sorted by row according to ``keys``.
+
+        The ``keys`` input to `group_by` must be a numpy array with the same length as
+        this column.
+
+        Parameters
+        ----------
+        keys : numpy array
+            Key grouping object
+
+        Returns
+        -------
+        out : Column
+            New column with groups attribute set accordingly
+        """
+        return groups.column_group_by(self, keys)
+
+    def _copy_groups(self, out):
+        """
+        Copy current groups into a copy of self ``out``
+        """
+        if self.parent_table:
+            if hasattr(self.parent_table, '_groups'):
+                out._groups = groups.ColumnGroups(out, indices=self.parent_table._groups._indices)
+        elif hasattr(self, '_groups'):
+            out._groups = groups.ColumnGroups(out, indices=self._groups._indices)
+
 
 class Column(BaseColumn, np.ndarray):
     """Define a data column for use in a Table object.
 
     Parameters
     ----------
-    name : str
-        Column name and key for reference within Table
     data : list, ndarray or None
         Column data values
+    name : str
+        Column name and key for reference within Table
     dtype : numpy.dtype compatible value
         Data type for column
     shape : tuple or ()
@@ -402,12 +489,13 @@ class Column(BaseColumn, np.ndarray):
         Number of row elements in column data
     description : str or None
         Full description of column
-    units : str or None
-        Physical units
-    format : str or None
+    unit : str or None
+        Physical unit
+    format : str or None or function
         Format string for outputting column values.  This can be an
         "old-style" (``format % value``) or "new-style" (`str.format`)
-        format specification string.
+        format specification string or a function that accepts a single
+        value and returns a string.
     meta : dict-like or None
         Meta-data associated with the column
 
@@ -464,9 +552,20 @@ class Column(BaseColumn, np.ndarray):
     """
 
     @_check_column_new_args
-    def __new__(cls, name=None, data=None,
-                 dtype=None, shape=(), length=0,
-                 description=None, units=None, format=None, meta=None):
+    def __new__(cls, data=None, name=None,
+                dtype=None, shape=(), length=0,
+                description=None, unit=None, format=None, meta=None,
+                dtypes=None, units=None):
+
+        if dtypes is not None:
+            dtype = dtypes
+            warnings.warn("'dtypes' has been renamed to the singular 'dtype'.",
+                          AstropyDeprecationWarning)
+
+        if units is not None:
+            unit = units
+            warnings.warn("'units' has been renamed to the singular 'unit'.",
+                          AstropyDeprecationWarning)
 
         if data is None:
             dtype = (np.dtype(dtype).str, shape)
@@ -475,27 +574,32 @@ class Column(BaseColumn, np.ndarray):
             self_data = np.asarray(data.data, dtype=dtype)
             if description is None:
                 description = data.description
-            if units is None:
-                units = units or data.units
+            if unit is None:
+                unit = unit or data.unit
             if format is None:
                 format = data.format
             if meta is None:
                 meta = deepcopy(data.meta)
+            if name is None:
+                name = data.name
         elif isinstance(data, MaskedColumn):
             raise TypeError("Cannot convert a MaskedColumn to a Column")
+        elif isinstance(data, Quantity):
+            if unit is None:
+                self_data = np.asarray(data, dtype=dtype)
+                unit = data.unit
+            else:
+                self_data = np.asarray(data.to(unit), dtype=dtype)
         else:
             self_data = np.asarray(data, dtype=dtype)
 
         self = self_data.view(cls)
         self._name = name
-        self.units = units
+        self.unit = unit
         self.format = format
         self.description = description
         self.parent_table = None
-
-        self.meta = OrderedDict()
-        if meta is not None:
-            self.meta.update(meta)
+        self.meta = meta
 
         return self
 
@@ -503,17 +607,20 @@ class Column(BaseColumn, np.ndarray):
     def data(self):
         return self.view(np.ndarray)
 
-    def copy(self, data=None, copy_data=True):
+    def copy(self, order='C', data=None, copy_data=True):
         """Return a copy of the current Column instance.  If ``data`` is supplied
         then a view (reference) of ``data`` is used, and ``copy_data`` is ignored.
         """
         if data is None:
             data = self.view(np.ndarray)
             if copy_data:
-                data = data.copy()
+                data = data.copy(order)
+
+        out = Column(name=self.name, data=data, unit=self.unit, format=self.format,
+                     description=self.description, meta=deepcopy(self.meta))
+        self._copy_groups(out)
 
-        return Column(name=self.name, data=data, units=self.units, format=self.format,
-                      description=self.description, meta=deepcopy(self.meta))
+        return out
 
 
 class MaskedColumn(BaseColumn, ma.MaskedArray):
@@ -521,10 +628,10 @@ class MaskedColumn(BaseColumn, ma.MaskedArray):
 
     Parameters
     ----------
-    name : str
-        Column name and key for reference within Table
     data : list, ndarray or None
         Column data values
+    name : str
+        Column name and key for reference within Table
     mask : list, ndarray or None
         Boolean mask for which True indicates missing or invalid data
     fill_value : float, int, str or None
@@ -537,12 +644,13 @@ class MaskedColumn(BaseColumn, ma.MaskedArray):
         Number of row elements in column data
     description : str or None
         Full description of column
-    units : str or None
-        Physical units
-    format : str or None
+    unit : str or None
+        Physical unit
+    format : str or None or function
         Format string for outputting column values.  This can be an
         "old-style" (``format % value``) or "new-style" (`str.format`)
-        format specification string.
+        format specification string or a function that accepts a single
+        value and returns a string.
     meta : dict-like or None
         Meta-data associated with the column
 
@@ -602,12 +710,20 @@ class MaskedColumn(BaseColumn, ma.MaskedArray):
     """
 
     @_check_column_new_args
-    def __new__(cls, name=None, data=None, mask=None, fill_value=None,
-                 dtype=None, shape=(), length=0,
-                 description=None, units=None, format=None, meta=None):
+    def __new__(cls, data=None, name=None, mask=None, fill_value=None,
+                dtype=None, shape=(), length=0,
+                description=None, unit=None, format=None, meta=None,
+                units=None, dtypes=None):
+
+        if dtypes is not None:
+            dtype = dtypes
+            warnings.warn("'dtypes' has been renamed to the singular 'dtype'.",
+                          AstropyDeprecationWarning)
 
-        if NUMPY_LT_1P5:
-            raise ValueError('MaskedColumn requires NumPy version 1.5 or later')
+        if units is not None:
+            unit = units
+            warnings.warn("'units' has been renamed to the singular 'unit'.",
+                          AstropyDeprecationWarning)
 
         if data is None:
             dtype = (np.dtype(dtype).str, shape)
@@ -616,12 +732,20 @@ class MaskedColumn(BaseColumn, ma.MaskedArray):
             self_data = ma.asarray(data.data, dtype=dtype)
             if description is None:
                 description = data.description
-            if units is None:
-                units = units or data.units
+            if unit is None:
+                unit = unit or data.unit
             if format is None:
                 format = data.format
             if meta is None:
                 meta = deepcopy(data.meta)
+            if name is None:
+                name = data.name
+        elif isinstance(data, Quantity):
+            if unit is None:
+                self_data = ma.asarray(data, dtype=dtype)
+                unit = data.unit
+            else:
+                self_data = ma.asarray(data.to(unit), dtype=dtype)
         else:
             self_data = ma.asarray(data, dtype=dtype)
 
@@ -633,14 +757,11 @@ class MaskedColumn(BaseColumn, ma.MaskedArray):
         self.mask = mask
         self.fill_value = fill_value
         self._name = name
-        self.units = units
+        self.unit = unit
         self.format = format
         self.description = description
         self.parent_table = None
-
-        self.meta = OrderedDict()
-        if meta is not None:
-            self.meta.update(meta)
+        self.meta = meta
 
         return self
 
@@ -720,11 +841,11 @@ class MaskedColumn(BaseColumn, ma.MaskedArray):
         fill_value = self._fix_fill_value(fill_value)
 
         data = super(MaskedColumn, self).filled(fill_value)
-        out = Column(name=self.name, data=data, units=self.units, format=self.format,
+        out = Column(name=self.name, data=data, unit=self.unit, format=self.format,
                      description=self.description, meta=deepcopy(self.meta))
         return out
 
-    def copy(self, data=None, copy_data=True):
+    def copy(self, order='C', data=None, copy_data=True):
         """
         Return a copy of the current MaskedColumn instance.  If ``data`` is supplied
         then a view (reference) of ``data`` is used, and ``copy_data`` is ignored.
@@ -734,7 +855,7 @@ class MaskedColumn(BaseColumn, ma.MaskedArray):
         data : array; optional
             Data to use when creating MaskedColumn copy.  If not supplied the
             column data array is used.
-        copy_data : boolean; optional
+        copy_data : bool; optional
             Make a copy of input data instead of using a reference (default=True)
 
         Returns
@@ -745,12 +866,14 @@ class MaskedColumn(BaseColumn, ma.MaskedArray):
         if data is None:
             data = self.view(ma.MaskedArray)
             if copy_data:
-                data = data.copy()
+                data = data.copy(order)
 
-        return MaskedColumn(name=self.name, data=data, units=self.units, format=self.format,
-                            # Do not include mask=self.mask since `data` has the mask
-                            fill_value=self.fill_value,
-                            description=self.description, meta=deepcopy(self.meta))
+        out = MaskedColumn(name=self.name, data=data, unit=self.unit, format=self.format,
+                           # Do not include mask=self.mask since `data` has the mask
+                           fill_value=self.fill_value,
+                           description=self.description, meta=deepcopy(self.meta))
+        self._copy_groups(out)
+        return out
 
 
 class Row(object):
@@ -759,12 +882,13 @@ class Row(object):
     A Row object is returned when a Table object is indexed with an integer
     or when iterating over a table::
 
-      >>> table = Table([(1, 2), (3, 4)], names=('a', 'b'))
+      >>> table = Table([(1, 2), (3, 4)], names=('a', 'b'),
+      ...               dtype=('int32', 'int32'))
       >>> row = table[1]
       >>> row
       <Row 1 of table
        values=(2, 4)
-       dtype=[('a', '<i8'), ('b', '<i8')]>
+       dtype=[('a', '<i4'), ('b', '<i4')]>
       >>> row['a']
       2
       >>> row[1]
@@ -796,7 +920,6 @@ class Row(object):
             # ValueError: Setting void-array with object members using buffer. [numpy.ma.core]
             #
             # All we do here is re-raise with a more informative message
-            from distutils import version
             if (str(err).startswith('Setting void-array with object members')
                     and version.LooseVersion(np.__version__) < version.LooseVersion('1.8')):
                 raise ValueError('Cannot access table row with Object type columns, due to '
@@ -870,6 +993,11 @@ class Row(object):
     def dtype(self):
         return self.data.dtype
 
+    @property
+    @deprecated('0.3', alternative=':attr:`Row.dtype`', pending=False)
+    def dtypes(self):
+        return self.dtype
+
     def __repr__(self):
         return "<Row {0} of table\n values={1!r}\n dtype={2}>".format(
             self.index, self.data, self.dtype)
@@ -890,46 +1018,59 @@ class Table(object):
     `Table` differs from `NDData` by the assumption that the input data
     consists of columns of homogeneous data, where each column has a unique
     identifier and may contain additional metadata such as the data
-    units, format, and description.
+    unit, format, and description.
 
     Parameters
     ----------
     data : numpy ndarray, dict, list, or Table, optional
         Data to initialize table.
-    masked : boolean, optional
+    masked : bool, optional
         Specify whether the table is masked.
     names : list, optional
-        Specify column names.
-    dtypes : list, optional
-        Specify column data types.
+        Specify column names
+    dtype : list, optional
+        Specify column data types
     meta : dict, optional
         Metadata associated with the table.
-    copy : boolean, optional
+    copy : bool, optional
         Copy the input data (default=True).
 
     """
 
-    def __init__(self, data=None, masked=None, names=None, dtypes=None,
-                 meta=None, copy=True):
+    meta = MetaData()
+
+    def __init__(self, data=None, masked=None, names=None, dtype=None,
+                 meta=None, copy=True, dtypes=None):
+
+        if dtypes is not None:
+            dtype = dtypes
+            warnings.warn("'dtypes' has been renamed to the singular 'dtype'.",
+                          AstropyDeprecationWarning)
 
         # Set up a placeholder empty table
         self._data = None
         self._set_masked(masked)
         self.columns = TableColumns()
-        self._meta = OrderedDict() if meta is None else deepcopy(meta)
+        self.meta = meta
 
-        # Must copy if dtypes are changing
-        if not copy and dtypes is not None:
-            raise ValueError('Cannot specify dtypes when copy=False')
+        # Must copy if dtype are changing
+        if not copy and dtype is not None:
+            raise ValueError('Cannot specify dtype when copy=False')
 
         # Infer the type of the input data and set up the initialization
         # function, number of columns, and potentially the default col names
 
         default_names = None
 
+        if isinstance(data, Row):
+            data = data._table[data._index:data._index + 1]
+
         if isinstance(data, (list, tuple)):
             init_func = self._init_from_list
-            n_cols = len(data)
+            if data and all(isinstance(row, dict) for row in data):
+                n_cols = len(data[0])
+            else:
+                n_cols = len(data)
 
         elif isinstance(data, np.ndarray):
             if data.dtype.names:
@@ -961,31 +1102,32 @@ class Table(object):
             raise ValueError('Data type {0} not allowed to init Table'
                              .format(type(data)))
 
-        # Set up defaults if names and/or dtypes are not specified.
+        # Set up defaults if names and/or dtype are not specified.
         # A value of None means the actual value will be inferred
         # within the appropriate initialization routine, either from
         # existing specification or auto-generated.
 
         if names is None:
             names = default_names or [None] * n_cols
-        if dtypes is None:
-            dtypes = [None] * n_cols
-        self._check_names_dtypes(names, dtypes, n_cols)
+        if dtype is None:
+            dtype = [None] * n_cols
+        self._check_names_dtype(names, dtype, n_cols)
 
         # Finally do the real initialization
-        init_func(data, names, dtypes, n_cols, copy)
+        init_func(data, names, dtype, n_cols, copy)
 
         # Whatever happens above, the masked property should be set to a boolean
         if type(self.masked) != bool:
             raise TypeError("masked property has not been set to True or False")
 
-        if NUMPY_LT_1P5 and self.masked:
-            raise ValueError('Masked table requires NumPy version 1.5 or later')
-
     @property
     def mask(self):
         return self._data.mask if self.masked else None
 
+    @mask.setter
+    def mask(self, val):
+        self._data.mask = val
+
     @property
     def _mask(self):
         """This is needed due to intricacies in numpy.ma, don't remove it."""
@@ -1051,17 +1193,17 @@ class Table(object):
 
         self.columns = TableColumns(cols)
 
-    def _check_names_dtypes(self, names, dtypes, n_cols):
-        """Make sure that names and dtypes are boths iterable and have
+    def _check_names_dtype(self, names, dtype, n_cols):
+        """Make sure that names and dtype are boths iterable and have
         the same length as data.
         """
-        for inp_list, inp_str in ((dtypes, 'dtypes'), (names, 'names')):
+        for inp_list, inp_str in ((dtype, 'dtype'), (names, 'names')):
             if not isiterable(inp_list):
                 raise ValueError('{0} must be a list or None'.format(inp_str))
 
-        if len(names) != n_cols or len(dtypes) != n_cols:
+        if len(names) != n_cols or len(dtype) != n_cols:
             raise ValueError(
-                'Arguments "names" and "dtypes" must match number of columns'
+                'Arguments "names" and "dtype" must match number of columns'
                 .format(inp_str))
 
     def _set_masked_from_cols(self, cols):
@@ -1074,7 +1216,7 @@ class Table(object):
             if any(isinstance(col, (MaskedColumn, ma.MaskedArray)) for col in cols):
                 self._set_masked(True)
 
-    def _init_from_list(self, data, names, dtypes, n_cols, copy):
+    def _init_from_list(self, data, names, dtype, n_cols, copy):
         """Initialize table from a list of columns.  A column can be a
         Column object, np.ndarray, or any other iterable object.
         """
@@ -1086,7 +1228,26 @@ class Table(object):
 
         cols = []
         def_names = _auto_names(n_cols)
-        for col, name, def_name, dtype in zip(data, names, def_names, dtypes):
+
+        if data and all(isinstance(row, dict) for row in data):
+            names_from_data = set()
+            for row in data:
+                names_from_data.update(row)
+
+            cols = {}
+            for name in names_from_data:
+                cols[name] = []
+                for i, row in enumerate(data):
+                    try:
+                        cols[name].append(row[name])
+                    except KeyError:
+                        raise ValueError('Row {0} has no value for column {1}'.format(i, name))
+            if all(name is None for name in names):
+                names = sorted(names_from_data)
+            self._init_from_dict(cols, names, dtype, n_cols, copy)
+            return
+
+        for col, name, def_name, dtype in zip(data, names, def_names, dtype):
             if isinstance(col, (Column, MaskedColumn)):
                 col = self.ColumnClass(name=(name or col.name), data=col, dtype=dtype)
             elif isinstance(col, np.ndarray) or isiterable(col):
@@ -1098,7 +1259,7 @@ class Table(object):
 
         self._init_from_cols(cols)
 
-    def _init_from_ndarray(self, data, names, dtypes, n_cols, copy):
+    def _init_from_ndarray(self, data, names, dtype, n_cols, copy):
         """Initialize table from an ndarray structured array"""
 
         data_names = data.dtype.names or _auto_names(n_cols)
@@ -1112,10 +1273,10 @@ class Table(object):
         self._set_masked_from_cols(cols)
 
         if copy:
-            self._init_from_list(cols, names, dtypes, n_cols, copy)
+            self._init_from_list(cols, names, dtype, n_cols, copy)
         else:
-            dtypes = [(name, col.dtype) for name, col in zip(names, cols)]
-            self._data = data.view(dtypes).ravel()
+            dtype = [(name, col.dtype) for name, col in zip(names, cols)]
+            self._data = data.view(dtype).ravel()
             columns = TableColumns()
 
             for name in names:
@@ -1123,16 +1284,16 @@ class Table(object):
                 columns[name].parent_table = self
             self.columns = columns
 
-    def _init_from_dict(self, data, names, dtypes, n_cols, copy):
+    def _init_from_dict(self, data, names, dtype, n_cols, copy):
         """Initialize table from a dictionary of columns"""
 
         if not copy:
             raise ValueError('Cannot use copy=False with a dict data input')
 
         data_list = [data[name] for name in names]
-        self._init_from_list(data_list, names, dtypes, n_cols, copy)
+        self._init_from_list(data_list, names, dtype, n_cols, copy)
 
-    def _init_from_table(self, data, names, dtypes, n_cols, copy):
+    def _init_from_table(self, data, names, dtype, n_cols, copy):
         """Initialize table from an existing Table object """
 
         table = data  # data is really a Table, rename for clarity
@@ -1145,11 +1306,11 @@ class Table(object):
         self._set_masked_from_cols(cols)
 
         if copy:
-            self._init_from_list(cols, names, dtypes, n_cols, copy)
+            self._init_from_list(cols, names, dtype, n_cols, copy)
         else:
             names = [vals[0] or vals[1] for vals in zip(names, data_names)]
-            dtypes = [(name, col.dtype) for name, col in zip(names, cols)]
-            data = table._data.view(dtypes)
+            dtype = [(name, col.dtype) for name, col in zip(names, cols)]
+            data = table._data.view(dtype)
 
             self._update_table_from_cols(self, data, cols, names)
 
@@ -1165,9 +1326,9 @@ class Table(object):
         cols = [self.ColumnClass(name=col.name, data=col) for col in cols]
 
         names = [col.name for col in cols]
-        dtypes = [col.descr for col in cols]
+        dtype = [col.descr for col in cols]
         empty_init = ma.empty if self.masked else np.empty
-        data = empty_init(lengths.pop(), dtype=dtypes)
+        data = empty_init(lengths.pop(), dtype=dtype)
         for col in cols:
             data[col.name] = col.data
 
@@ -1204,8 +1365,8 @@ class Table(object):
 
     def __repr__(self):
         names = ("'{0}'".format(x) for x in self.colnames)
-        s = "<Table rows={0} names=({1})>\n{2}".format(
-            self.__len__(),  ','.join(names), repr(self._data))
+        s = "<{3} rows={0} names=({1})>\n{2}".format(
+            self.__len__(), ','.join(names), repr(self._data), self.__class__.__name__)
         return s
 
     def __str__(self):
@@ -1213,7 +1374,7 @@ class Table(object):
         return '\n'.join(lines)
 
     def pprint(self, max_lines=None, max_width=None, show_name=True,
-               show_units=False):
+               show_unit=False):
         """Print a formatted string representation of the table.
 
         If no value of `max_lines` is supplied then the height of the screen
@@ -1236,20 +1397,95 @@ class Table(object):
         show_name : bool
             Include a header row for column names (default=True)
 
-        show_units : bool
-            Include a header row for units (default=False)
+        show_unit : bool
+            Include a header row for unit (default=False)
         """
 
         lines, n_header = _pformat_table(self, max_lines, max_width, show_name,
-                                         show_units)
+                                         show_unit)
         for i, line in enumerate(lines):
             if i < n_header:
                 color_print(line, 'red')
             else:
                 print line
 
+    def show_in_browser(self,
+                        css="table,th,td,tr,tbody {border: 1px solid black; border-collapse: collapse;}",
+                        max_lines=5000,
+                        jsviewer=False,
+                        jskwargs={},
+                        tableid=None,
+                        browser='default'):
+        """
+        Render the table in HTML and show it in a web browser.  In order to
+        make a persistent html file, i.e. one that survives refresh, the
+        returned file object must be kept in memory.
+
+        Parameters
+        ----------
+        css : string
+            A valid CSS string declaring the formatting for the table
+        max_lines : int
+            Maximum number of rows to export to the table (set low by default
+            to avoid memory issues, since the browser view requires duplicating
+            the table in memory).  A negative value of `max_lines` indicates
+            no row limit
+        jsviewer : bool
+            If True, prepends some javascript headers so that the table is
+            rendered as a https://datatables.net data table.  This allows
+            in-browser searching & sorting.  See `JSViewer`
+        jskwargs : dict
+            Passed to the `JSViewer` init
+        tableid : str or None
+            An html ID tag for the table.  Default is "table{id}", where id is
+            the unique integer id of the table object, id(self)
+        browser : str
+            Any legal browser name, e.g. 'firefox','chrome','safari'
+            (for mac, you may need to use
+            'open -a "/Applications/Google Chrome.app" %s'
+            for Chrome).
+            If 'default', will use the system default browser.
+
+        Returns
+        -------
+        A :py:`tempfile.NamedTemporaryFile` object pointing to the html file on
+        disk.
+        """
+        import webbrowser
+        import tempfile
+        from .jsviewer import JSViewer
+
+        tmp = tempfile.NamedTemporaryFile(suffix='.html')
+
+        if tableid is None:
+            tableid = 'table{id}'.format(id=id(self))
+        linelist = self.pformat(html=True, max_width=np.inf, max_lines=max_lines,
+                                tableid=tableid)
+
+        if jsviewer:
+            jsv = JSViewer(**jskwargs)
+            js = jsv.command_line(tableid=tableid)
+        else:
+            js = []
+
+        css = ["<style>{0}</style>".format(css)]
+        html = "\n".join(['<!DOCTYPE html>','<html>'] + css + js + linelist + ['</html>'])
+
+        try:
+            tmp.write(html)
+        except TypeError:
+            tmp.write(html.encode('utf8'))
+        tmp.flush()
+
+        if browser == 'default':
+            webbrowser.open("file://"+tmp.name)
+        else:
+            webbrowser.get(browser).open("file://"+tmp.name)
+
+        return tmp
+
     def pformat(self, max_lines=None, max_width=None, show_name=True,
-                show_units=False, html=False):
+                show_unit=False, html=False, tableid=None):
         """Return a list of lines for the formatted string representation of
         the table.
 
@@ -1273,23 +1509,29 @@ class Table(object):
         show_name : bool
             Include a header row for column names (default=True)
 
-        show_units : bool
-            Include a header row for units (default=False)
+        show_unit : bool
+            Include a header row for unit (default=False)
 
         html : bool
             Format the output as an HTML table (default=False)
 
+        tableid : str or None
+            An ID tag for the table; only used if html is set.  Default is
+            "table{id}", where id is the unique integer id of the table object,
+            id(self)
+
         Returns
         -------
         lines : list
             Formatted table as a list of strings
         """
         lines, n_header = _pformat_table(self, max_lines, max_width,
-                                         show_name, show_units, html)
+                                         show_name, show_unit, html,
+                                         tableid=tableid)
         return lines
 
     def more(self, max_lines=None, max_width=None, show_name=True,
-               show_units=False):
+             show_unit=False):
         """Interactively browse table with a paging interface.
 
         Supported keys::
@@ -1315,14 +1557,16 @@ class Table(object):
         show_name : bool
             Include a header row for column names (default=True)
 
-        show_units : bool
-            Include a header row for units (default=False)
+        show_unit : bool
+            Include a header row for unit (default=False)
         """
         _more_tabcol(self, max_lines, max_width, show_name,
-                     show_units)
+                     show_unit)
 
     def _repr_html_(self):
-        lines = self.pformat(html=True)
+        # Since the user cannot provide input, need a sensible default
+        tableid = 'table{id}'.format(id=id(self))
+        lines = self.pformat(html=True, tableid=tableid)
         return ''.join(lines)
 
     def __getitem__(self, item):
@@ -1330,36 +1574,62 @@ class Table(object):
             return self.columns[item]
         elif isinstance(item, int):
             return Row(self, item)
-        elif isinstance(item, tuple):
-            if all(isinstance(x, np.ndarray) for x in item):
-                # Item is a tuple of ndarrays as in the output of np.where, e.g.
-                # t[np.where(t['a'] > 2)]
-                return self._new_from_slice(item)
-            elif (all(x in self.colnames for x in item)):
-                # Item is a tuple of strings that are valid column names
-                return self.__class__([self[x] for x in item], meta=deepcopy(self.meta))
-            else:
-                raise ValueError('Illegal item for table item access')
-
-        elif (isinstance(item, slice) or isinstance(item, np.ndarray)
-              or isinstance(item, list)):
+        elif isinstance(item, (tuple, list)) and all(x in self.colnames
+                                                     for x in item):
+            out = self.__class__([self[x] for x in item], meta=deepcopy(self.meta))
+            out._groups = groups.TableGroups(out, indices=self.groups._indices,
+                                             keys=self.groups._keys)
+            return out
+        elif (isinstance(item, slice) or
+              isinstance(item, np.ndarray) or
+              isinstance(item, list) or
+              isinstance(item, tuple) and all(isinstance(x, np.ndarray)
+                                              for x in item)):
+            # here for the many ways to give a slice; a tuple of ndarray
+            # is produced by np.where, as in t[np.where(t['a'] > 2)]
+            # For all, a new table is constructed with slice of all columns
             return self._new_from_slice(item)
         else:
             raise ValueError('Illegal type {0} for table item access'
                              .format(type(item)))
 
     def __setitem__(self, item, value):
-        try:
-            if isinstance(value, Row):
-                # Value is another row
-                self._data[item] = value.data
+        # If the item is a string then it must be the name of a column.
+        # If that column doesn't already exist then create it now.
+        if isinstance(item, basestring) and item not in self.colnames:
+            NewColumn = MaskedColumn if self.masked else Column
+
+            # Make sure value is an ndarray so we can get the dtype
+            if not isinstance(value, np.ndarray):
+                value = np.asarray(value)
+
+            # Make new column and assign the value.  If the table currently has no rows
+            # (len=0) of the value is already a Column then define new column directly
+            # from value.  In the latter case this allows for propagation of Column
+            # metadata.  Otherwise define a new column with the right length and shape and
+            # then set it from value.  This allows for broadcasting, e.g. t['a'] = 1.
+            if isinstance(value, BaseColumn):
+                new_column = value.copy(copy_data=False)
+                new_column.name = item
+            elif len(self) == 0:
+                new_column = NewColumn(name=item, data=value)
             else:
-                # Otherwise just delegate to the numpy item setter.
-                self._data[item] = value
-        except KeyError:
-            raise KeyError("Column {0} does not exist".format(item))
-        except:
-            raise
+                new_column = NewColumn(name=item, length=len(self), dtype=value.dtype,
+                                       shape=value.shape[1:])
+                new_column[:] = value
+
+                if isinstance(value, Quantity):
+                    new_column.unit = value.unit
+
+            # Now add new column to the table
+            self.add_column(new_column)
+
+        elif isinstance(value, Row):
+            # Value is another row
+            self._data[item] = value.data
+        else:
+            # Otherwise just delegate to the numpy item setter.
+            self._data[item] = value
 
     def __delitem__(self, item):
         if isinstance(item, basestring):
@@ -1380,7 +1650,7 @@ class Table(object):
         else:
             raise StopIteration
 
-    if not PY3:  # pragma: py2
+    if sys.version_info[0] < 3:  # pragma: py2
         next = __next__
 
     def field(self, item):
@@ -1457,7 +1727,6 @@ class Table(object):
         else:
             self._data = ma.array(self._data)
 
-
     def index_column(self, name):
         """
         Return the positional index of column ``name``.
@@ -1471,6 +1740,24 @@ class Table(object):
         -------
         index : int
             Positional index of column ``name``.
+
+        Examples
+        --------
+        Create a table with three columns 'a', 'b' and 'c'::
+
+            >>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']],
+            ...           names=('a', 'b', 'c'))
+            >>> print t
+             a   b   c
+            --- --- ---
+              1 0.1   x
+              2 0.2   y
+              3 0.3   z
+
+        Get index of column 'b' of the table::
+
+            >>> t.index_column('b')
+            1
         """
         try:
             return self.colnames.index(name)
@@ -1490,6 +1777,43 @@ class Table(object):
             Column object to add.
         index : int or None
             Insert column before this position or at end (default)
+
+        Examples
+        --------
+        Create a table with two columns 'a' and 'b'::
+
+            >>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3]], names=('a', 'b'))
+            >>> print t
+             a   b
+            --- ---
+              1 0.1
+              2 0.2
+              3 0.3
+
+        Create a third column 'c' and append it to the end of the table::
+
+            >>> col_c = Column(name='c', data=['x', 'y', 'z'])
+            >>> t.add_column(col_c)
+            >>> print t
+             a   b   c
+            --- --- ---
+              1 0.1   x
+              2 0.2   y
+              3 0.3   z
+
+        Add column 'd' at position 1. Note that the column is inserted
+        before the given index::
+
+            >>> col_d = Column(name='d', data=['a', 'b', 'c'])
+            >>> t.add_column(col_d, 1)
+            >>> print t
+             a   d   b   c
+            --- --- --- ---
+              1   a 0.1   x
+              2   b 0.2   y
+              3   c 0.3   z
+
+        To add several columns use add_columns.
         """
         if index is None:
             index = len(self.columns)
@@ -1508,6 +1832,44 @@ class Table(object):
             Column objects to add.
         indexes : list of ints or None
             Insert column before this position or at end (default)
+
+        Examples
+        --------
+        Create a table with two columns 'a' and 'b'::
+
+            >>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3]], names=('a', 'b'))
+            >>> print t
+             a   b
+            --- ---
+              1 0.1
+              2 0.2
+              3 0.3
+
+        Create column 'c' and 'd' and append them to the end of the table::
+
+            >>> col_c = Column(name='c', data=['x', 'y', 'z'])
+            >>> col_d = Column(name='d', data=['u', 'v', 'w'])
+            >>> t.add_columns([col_c, col_d])
+            >>> print t
+             a   b   c   d
+            --- --- --- ---
+              1 0.1   x   u
+              2 0.2   y   v
+              3 0.3   z   w
+
+        Add column 'c' at position 0 and column 'd' at position 1. Note that
+        the columns are inserted before the given position::
+
+            >>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3]], names=('a', 'b'))
+            >>> col_c = Column(name='c', data=['x', 'y', 'z'])
+            >>> col_d = Column(name='d', data=['u', 'v', 'w'])
+            >>> t.add_columns([col_c, col_d], [0, 1])
+            >>> print t
+             c   a   d   b
+            --- --- --- ---
+              x   1   u 0.1
+              y   2   v 0.2
+              z   3   w 0.3
         """
         if indexes is None:
             indexes = [len(self.columns)] * len(cols)
@@ -1527,6 +1889,104 @@ class Table(object):
 
         self._init_from_cols(newcols)
 
+    def remove_row(self, index):
+        """
+        Remove a row from the table.
+
+        Parameters
+        ----------
+        index : int
+            Index of row to remove
+
+        Examples
+        --------
+        Create a table with three columns 'a', 'b' and 'c'::
+
+            >>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']],
+            ...           names=('a', 'b', 'c'))
+            >>> print t
+             a   b   c
+            --- --- ---
+              1 0.1   x
+              2 0.2   y
+              3 0.3   z
+
+        Remove row 1 from the table::
+
+            >>> t.remove_row(1)
+            >>> print t
+             a   b   c
+            --- --- ---
+              1 0.1   x
+              3 0.3   z
+
+        To remove several rows at the same time use remove_rows.
+        """
+        # check the index against the types that work with np.delete
+        if not isinstance(index, (int, long, np.integer)):
+            raise TypeError("Row index must be an integer")
+        self.remove_rows(index)
+
+    def remove_rows(self, row_specifier):
+        """
+        Remove rows from the table.
+
+        Parameters
+        ----------
+        row_specifier : slice, int, or array of ints
+            Specification for rows to remove
+
+        Examples
+        --------
+        Create a table with three columns 'a', 'b' and 'c'::
+
+            >>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']],
+            ...           names=('a', 'b', 'c'))
+            >>> print t
+             a   b   c
+            --- --- ---
+              1 0.1   x
+              2 0.2   y
+              3 0.3   z
+
+        Remove rows 0 and 2 from the table::
+
+            >>> t.remove_rows([0, 2])
+            >>> print t
+             a   b   c
+            --- --- ---
+              2 0.2   y
+
+
+        Note that there are no warnings if the slice operator extends
+        outside the data::
+
+            >>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']],
+            ...           names=('a', 'b', 'c'))
+            >>> t.remove_rows(slice(10, 20, 1))
+            >>> print t
+             a   b   c
+            --- --- ---
+              1 0.1   x
+              2 0.2   y
+              3 0.3   z
+        """
+        try:
+            table = np.delete(self._data, row_specifier, axis=0)
+        except (ValueError, IndexError):
+            # Numpy <= 1.7 raises ValueError while Numpy >= 1.8 raises IndexError
+            raise IndexError('Removing row(s) {0} from table with {1} rows failed'
+                             .format(row_specifier, len(self._data)))
+        self._data = table
+
+        # after updating the row data, the column views will be out of date
+        # and should be updated:
+        self._rebuild_table_column_views()
+
+        # Revert groups to default (ungrouped) state
+        if hasattr(self, '_groups'):
+            del self._groups
+
     def remove_column(self, name):
         """
         Remove a column from the table.
@@ -1539,6 +1999,31 @@ class Table(object):
         ----------
         name : str
             Name of column to remove
+
+        Examples
+        --------
+        Create a table with three columns 'a', 'b' and 'c'::
+
+            >>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']],
+            ...           names=('a', 'b', 'c'))
+            >>> print t
+             a   b   c
+            --- --- ---
+              1 0.1   x
+              2 0.2   y
+              3 0.3   z
+
+        Remove column 'b' from the table::
+
+            >>> t.remove_column('b')
+            >>> print t
+             a   c
+            --- ---
+              1   x
+              2   y
+              3   z
+
+        To remove several columns at the same time use remove_columns.
         """
 
         self.remove_columns([name])
@@ -1551,6 +2036,43 @@ class Table(object):
         ----------
         names : list
             A list containing the names of the columns to remove
+
+        Examples
+        --------
+        Create a table with three columns 'a', 'b' and 'c'::
+
+            >>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']],
+            ...     names=('a', 'b', 'c'))
+            >>> print t
+             a   b   c
+            --- --- ---
+              1 0.1   x
+              2 0.2   y
+              3 0.3   z
+
+        Remove columns 'b' and 'c' from the table::
+
+            >>> t.remove_columns(['b', 'c'])
+            >>> print t
+             a
+            ---
+              1
+              2
+              3
+
+        Specifying only a single column also works. Remove column 'b' from the table::
+
+            >>> t = Table([[1, 2, 3], [0.1, 0.2, 0.3], ['x', 'y', 'z']],
+            ...     names=('a', 'b', 'c'))
+            >>> t.remove_columns('b')
+            >>> print t
+             a   c
+            --- ---
+              1   x
+              2   y
+              3   z
+
+        This gives the same as using remove_column.
         '''
 
         for name in names:
@@ -1561,7 +2083,7 @@ class Table(object):
             self.columns.pop(name)
 
         newdtype = [(name, self._data.dtype[name]) for name in self._data.dtype.names
-                if name not in names]
+                    if name not in names]
         newdtype = np.dtype(newdtype)
 
         if newdtype:
@@ -1580,7 +2102,6 @@ class Table(object):
         self._data = table
 
 
-
     def keep_columns(self, names):
         '''
         Keep only the columns specified (remove the others).
@@ -1590,6 +2111,43 @@ class Table(object):
         names : list
             A list containing the names of the columns to keep. All other
             columns will be removed.
+
+        Examples
+        --------
+        Create a table with three columns 'a', 'b' and 'c'::
+
+            >>> t = Table([[1, 2, 3],[0.1, 0.2, 0.3],['x', 'y', 'z']],
+            ...           names=('a', 'b', 'c'))
+            >>> print t
+             a   b   c
+            --- --- ---
+              1 0.1   x
+              2 0.2   y
+              3 0.3   z
+
+        Specifying only a single column name keeps only this column.
+        Keep only column 'a' of the table::
+
+            >>> t.keep_columns('a')
+            >>> print t
+             a
+            ---
+              1
+              2
+              3
+
+        Specifying a list of column names is keeps is also possible.
+        Keep columns 'a' and 'c' of the table::
+
+            >>> t = Table([[1, 2, 3],[0.1, 0.2, 0.3],['x', 'y', 'z']],
+            ...           names=('a', 'b', 'c'))
+            >>> t.keep_columns(['a', 'c'])
+            >>> print t
+             a   c
+            --- ---
+              1   x
+              2   y
+              3   z
         '''
 
         if isinstance(names, basestring):
@@ -1618,6 +2176,26 @@ class Table(object):
             The current name of the column.
         new_name : str
             The new name for the column
+
+        Examples
+        --------
+        Create a table with three columns 'a', 'b' and 'c'::
+
+            >>> t = Table([[1,2],[3,4],[5,6]], names=('a','b','c'))
+            >>> t.pprint()
+             a   b   c
+            --- --- ---
+              1   3   5
+              2   4   6
+
+        Renaming column 'a' to 'aa'::
+
+            >>> t.rename_column('a' , 'aa')
+            >>> t.pprint()
+             aa  b   c
+            --- --- ---
+              1   3   5
+              2   4   6
         '''
 
         if name not in self.keys():
@@ -1652,6 +2230,27 @@ class Table(object):
         ----------
         vals : tuple, list, dict or None
             Use the specified values in the new row
+
+        Examples
+        --------
+        Create a table with three columns 'a', 'b' and 'c'::
+
+           >>> t = Table([[1,2],[4,5],[7,8]], names=('a','b','c'))
+           >>> t.pprint()
+            a   b   c
+           --- --- ---
+             1   4   7
+             2   5   8
+
+        Adding a new row with entries '3' in 'a', '6' in 'b' and '9' in 'c'::
+
+           >>> t.add_row([3,6,9])
+           >>> t.pprint()
+             a   b   c
+             --- --- ---
+             1   4   7
+             2   5   8
+             3   6   9
         """
 
         def _is_mapping(obj):
@@ -1667,13 +2266,8 @@ class Table(object):
         if mask is not None and not self.masked:
             self._set_masked(True)
 
-        if self.masked:
-            if newlen == 1:
-                self._data = ma.empty(1, dtype=self._data.dtype)
-            else:
-                self._data = ma.resize(self._data, (newlen,))
-        else:
-            self._data.resize((newlen,), refcheck=False)
+        # Create a table with one row to test the operation on
+        test_data = (ma.zeros if self.masked else np.zeros)(1, dtype=self._data.dtype)
 
         if _is_mapping(vals):
 
@@ -1689,16 +2283,16 @@ class Table(object):
                 # We set the mask to True regardless of whether a mask value
                 # is specified or not - that is, any cell where a new row
                 # value is not specified should be treated as missing.
-                self._data.mask[-1] = (True,) * len(self._data.dtype)
+                test_data.mask[-1] = (True,) * len(test_data.dtype)
 
             # First we copy the values
             for name, val in vals.items():
                 try:
-                    self._data[name][-1] = val
+                    test_data[name][-1] = val
                 except IndexError:
                     raise ValueError("No column {0} in table".format(name))
                 if mask:
-                    self._data[name].mask[-1] = mask[name]
+                    test_data[name].mask[-1] = mask[name]
 
         elif isiterable(vals):
 
@@ -1711,7 +2305,7 @@ class Table(object):
             if not isinstance(vals, tuple):
                 vals = tuple(vals)
 
-            self._data[-1] = vals
+            test_data[-1] = vals
 
             if mask is not None:
 
@@ -1721,13 +2315,57 @@ class Table(object):
                 if not isinstance(mask, tuple):
                     mask = tuple(mask)
 
-                self._data.mask[-1] = mask
+                test_data.mask[-1] = mask
 
         else:
             raise TypeError('Vals must be an iterable or mapping or None')
 
+        # If no errors have been raised, then the table can be resized
+        if self.masked:
+            if newlen == 1:
+                self._data = ma.empty(1, dtype=self._data.dtype)
+            else:
+                self._data = ma.resize(self._data, (newlen,))
+        else:
+            self._data.resize((newlen,), refcheck=False)
+
+        # Assign the new row
+        self._data[-1:] = test_data
+
         self._rebuild_table_column_views()
 
+        # Revert groups to default (ungrouped) state
+        if hasattr(self, '_groups'):
+            del self._groups
+
+    def argsort(self, keys=None, kind=None):
+        """
+        Return the indices which would sort the table according to one or more key columns.
+        This simply calls the `numpy.argsort` function on the table with the ``order``
+        parameter set to `keys`.
+
+        Parameters
+        ----------
+        keys : str or list of str
+            The column name(s) to order the table by
+        kind : {'quicksort', 'mergesort', 'heapsort'}, optional
+            Sorting algorithm.
+
+        Returns
+        -------
+        index_array : ndarray, int
+            Array of indices that sorts the table by the specified key column(s).
+        """
+        if isinstance(keys, basestring):
+            keys = [keys]
+        kwargs = {}
+        if keys:
+            kwargs['order'] = keys
+        if kind:
+            kwargs['kind'] = kind
+
+        return self._data.argsort(**kwargs)
+
     def sort(self, keys):
         '''
         Sort the table according to one or more keys. This operates
@@ -1737,6 +2375,29 @@ class Table(object):
         ----------
         keys : str or list of str
             The key(s) to order the table by
+
+        Examples
+        --------
+        Create a table with 3 columns::
+
+            >>> t = Table([['Max', 'Jo', 'John'], ['Miller','Miller','Jackson'],
+            ...         [12,15,18]], names=('firstname','name','tel'))
+            >>> t.pprint()
+            firstname   name  tel
+            --------- ------- ---
+                  Max  Miller  12
+                   Jo  Miller  15
+                 John Jackson  18
+
+        Sorting according to standard sorting rules, first 'name' then 'firstname'::
+
+            >>> t.sort(['name','firstname'])
+            >>> t.pprint()
+            firstname   name  tel
+            --------- ------- ---
+                 John Jackson  18
+                   Jo  Miller  15
+                  Max  Miller  12
         '''
         if type(keys) is not list:
             keys = [keys]
@@ -1747,44 +2408,116 @@ class Table(object):
         '''
         Reverse the row order of table rows.  The table is reversed
         in place and there are no function arguments.
+
+        Examples
+        --------
+        Create a table with three columns::
+
+            >>> t = Table([['Max', 'Jo', 'John'], ['Miller','Miller','Jackson'],
+            ...         [12,15,18]], names=('firstname','name','tel'))
+            >>> t.pprint()
+            firstname   name  tel
+            --------- ------- ---
+                  Max  Miller  12
+                   Jo  Miller  15
+                 John Jackson  18
+
+        Reversing order::
+
+            >>> t.reverse()
+            >>> t.pprint()
+            firstname   name  tel
+            --------- ------- ---
+                 John Jackson  18
+                   Jo  Miller  15
+                  Max  Miller  12
         '''
         self._data[:] = self._data[::-1].copy()
         self._rebuild_table_column_views()
 
-    read = classmethod(io_registry.read)
-    write = io_registry.write
+    @classmethod
+    def read(cls, *args, **kwargs):
+        """
+        Read and parse a data table and return as a Table.
 
-    @property
-    def meta(self):
-        return self._meta
+        This function provides the Table interface to the astropy unified I/O
+        layer.  This allows easily reading a file in many supported data formats
+        using syntax such as::
+
+          >>> from astropy.table import Table
+          >>> dat = Table.read('table.dat', format='ascii')  # doctest: +SKIP
+          >>> events = Table.read('events.fits', format='fits')  # doctest: +SKIP
+
+        The arguments and keywords (other than ``format``) provided to this function are
+        passed through to the underlying data reader (e.g. `~astropy.io.ascii.ui.read`).
+        """
+        return io_registry.read(cls, *args, **kwargs)
+
+    def write(self, *args, **kwargs):
+        """
+        Write this Table object out in the specified format.
+
+        This function provides the Table interface to the astropy unified I/O
+        layer.  This allows easily writing a file in many supported data formats
+        using syntax such as::
+
+          >>> from astropy.table import Table
+          >>> dat = Table([[1, 2], [3, 4]], names=('a', 'b'))
+          >>> dat.write('table.dat', format='ascii')
+
+        The arguments and keywords (other than ``format``) provided to this function are
+        passed through to the underlying data reader (e.g. `~astropy.io.ascii.ui.write`).
+        """
+        io_registry.write(self, *args, **kwargs)
+
+    def copy(self, copy_data=True):
+        '''
+        Return a copy of the table
+
+
+        Parameters
+        ----------
+        copy_data : bool
+            If True (the default), copy the underlying data array.
+            Otherwise, use the same data array
+        '''
+        out = self.__class__(self, copy=copy_data)
+
+        # If the current table is grouped then do the same in the copy
+        if hasattr(self, '_groups'):
+            out._groups = groups.TableGroups(out, indices=self._groups._indices,
+                                             keys=self._groups._keys)
+        return out
+
+    def __deepcopy__(self, memo=None):
+        return self.copy(True)
+
+    def __copy__(self):
+        return self.copy(False)
 
     def __lt__(self, other):
-        if PY3:
+        if six.PY3:
             return super(Table, self).__lt__(other)
         else:
-            raise TypeError(
-                "unorderable types: Table() < {0}".format(str(type(other))))
+            raise TypeError("unorderable types: Table() < {0}".format(str(type(other))))
 
     def __gt__(self, other):
-        if PY3:
+        if six.PY3:
             return super(Table, self).__gt__(other)
         else:
-            raise TypeError(
-                "unorderable types: Table() > {0}".format(str(type(other))))
+            raise TypeError("unorderable types: Table() > {0}".format(str(type(other))))
 
     def __le__(self, other):
-        if PY3:
+        if six.PY3:
             return super(Table, self).__le__(other)
         else:
-            raise TypeError(
-                "unorderable types: Table() <= {0}".format(str(type(other))))
+            raise TypeError("unorderable types: Table() <= {0}".format(str(type(other))))
 
     def __ge__(self, other):
-        if PY3:
+        if six.PY3:
             return super(Table, self).__ge__(other)
         else:
-            raise TypeError(
-                "unorderable types: Table() >= {0}".format(str(type(other))))
+            raise TypeError("unorderable types: Table() >= {0}".format(str(type(other))))
 
     def __eq__(self, other):
 
@@ -1797,17 +2530,14 @@ class Table(object):
             else:
                 # If mask is True, then by definition the row doesn't match
                 # because the other array is not masked.
-                false_mask = np.zeros(1, dtype=[(n, bool)
-                                                for n in self.dtype.names])
+                false_mask = np.zeros(1, dtype=[(n, bool) for n in self.dtype.names])
                 result = (self._data.data == other) & (self.mask == false_mask)
         else:
             if isinstance(other, np.ma.MaskedArray):
                 # If mask is True, then by definition the row doesn't match
                 # because the other array is not masked.
-                false_mask = np.zeros(1, dtype=[(n, bool)
-                                                for n in other.dtype.names])
-                result = ((self._data == other.data) &
-                          (other.mask == false_mask))
+                false_mask = np.zeros(1, dtype=[(n, bool) for n in other.dtype.names])
+                result = (self._data == other.data) & (other.mask == false_mask)
             else:
                 result = self._data == other
 
@@ -1815,3 +2545,35 @@ class Table(object):
 
     def __ne__(self, other):
         return ~self.__eq__(other)
+
+    @property
+    def groups(self):
+        if not hasattr(self, '_groups'):
+            self._groups = groups.TableGroups(self)
+        return self._groups
+
+    def group_by(self, keys):
+        """
+        Group this table by the specified ``keys``
+
+        This effectively splits the table into groups which correspond to unique values of
+        the ``keys`` grouping object.  The output is a new `GroupedTable` which contains a
+        copy of this table but sorted by row according to ``keys``.
+
+        The ``keys`` input to `group_by` can be specified in different ways:
+
+          - String or list of strings corresponding to table column name(s)
+          - Numpy array (homogeneous or structured) with same length as this table
+          - `Table` with same length as this table
+
+        Parameters
+        ----------
+        keys : str, list of str, numpy array, or Table
+            Key grouping object
+
+        Returns
+        -------
+        out : Table
+            New table with groups set
+        """
+        return groups.table_group_by(self, keys)
diff --git a/astropy/table/tests/test_column.py b/astropy/table/tests/test_column.py
index a4fd4ec..16b1b75 100644
--- a/astropy/table/tests/test_column.py
+++ b/astropy/table/tests/test_column.py
@@ -1,16 +1,20 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+import operator
+
 from distutils import version
+
 import numpy as np
 
-from ...tests.helper import pytest
+from ...tests.helper import pytest, catch_warnings
+from ...utils.exceptions import AstropyDeprecationWarning
 from ... import table
+from ... import units as u
 
-numpy_lt_1p5 = version.LooseVersion(np.__version__) < version.LooseVersion('1.5')
-
-# Fixture to run all the Column tests for both an unmasked (ndarray)
-# and masked (MaskedArray) column.
- at pytest.fixture(params=[table.Column] if numpy_lt_1p5 else [table.Column, table.MaskedColumn])
+ at pytest.fixture(params=[table.Column, table.MaskedColumn])
 def Column(request):
+    # Fixture to run all the Column tests for both an unmasked (ndarray)
+    # and masked (MaskedArray) column.
     return request.param
 
 
@@ -30,14 +34,23 @@ class TestColumn():
         """Show that basic numpy operations with Column behave sensibly"""
 
         arr = np.array([1, 2, 3])
-        c = Column(name='a', data=arr)
-        eq = c == arr
-        assert np.all(eq)
-        assert len(eq) == 3
-        assert type(eq) == Column
-        assert eq.dtype.str == '|b1'
-        eq = arr == c
-        assert np.all(eq)
+        c = Column(arr, name='a')
+
+        for op, test_equal in ((operator.eq, True),
+                               (operator.ne, False),
+                               (operator.ge, True),
+                               (operator.gt, False),
+                               (operator.le, True),
+                               (operator.lt, False)):
+            for eq in (op(c, arr), op(arr, c)):
+
+                assert np.all(eq) if test_equal else not np.any(eq)
+                assert len(eq) == 3
+                if Column is table.Column:
+                    assert type(eq) == np.ndarray
+                else:
+                    assert type(eq) == np.ma.core.MaskedArray
+                assert eq.dtype.str == '|b1'
 
         lt = c - 1 < arr
         assert np.all(lt)
@@ -45,26 +58,26 @@ class TestColumn():
     def test_view(self, Column):
         c = np.array([1, 2, 3]).view(Column)
         if Column == table.MaskedColumn:
-            assert repr(c) == ('<MaskedColumn name=None units=None format=None description=None>\n'
+            assert repr(c) == ('<MaskedColumn name=None unit=None format=None description=None>\n'
                                'masked_array(data = [1 2 3],\n'
                                '             mask = False,\n'
                                '       fill_value = 999999)\n')
         else:
-            assert repr(c) == ('<Column name=None units=None format=None description=None>\n'
+            assert repr(c) == ('<Column name=None unit=None format=None description=None>\n'
                                'array([1, 2, 3])')
 
     def test_format(self, Column):
         """Show that the formatted output from str() works"""
         MAX_LINES_val = table.pprint.MAX_LINES()
         table.pprint.MAX_LINES.set(7)
-        c1 = Column(name='a', data=np.arange(2000), dtype=float,
+        c1 = Column(np.arange(2000), name='a', dtype=float,
                     format='%6.2f')
         assert str(c1) == ('   a   \n-------\n   0.00\n'
                            '   1.00\n    ...\n1998.00\n1999.00')
         table.pprint.MAX_LINES.set(MAX_LINES_val)
 
     def test_convert_numpy_array(self, Column):
-        d = Column(name='a', data=[1, 2, 3], dtype='i8')
+        d = Column([1, 2, 3], name='a', dtype='i8')
 
         np_data = np.array(d)
         assert np.all(np_data == d)
@@ -73,11 +86,26 @@ class TestColumn():
         np_data = np.array(d, dtype='i4')
         assert np.all(np_data == d)
 
-    def test_convert_units(self, Column):
-        d = Column(name='a', data=[1, 2, 3], dtype="f8", units="m")
-        d.convert_units_to("km")
+    def test_convert_unit(self, Column):
+        d = Column([1, 2, 3], name='a', dtype="f8", unit="m")
+        d.convert_unit_to("km")
         assert np.all(d.data == [0.001, 0.002, 0.003])
 
+    def test_deprecated_attributes(self, Column, recwarn):
+        d = Column([1, 2, 3], name='a', dtype="f8", unit="m")
+
+        with catch_warnings(AstropyDeprecationWarning) as warning_lines:
+            d.units
+            assert warning_lines[0].category == AstropyDeprecationWarning
+
+        with catch_warnings(AstropyDeprecationWarning) as warning_lines:
+            c = Column([1,2,3], name='a', dtypes="f8", unit="m")
+            assert warning_lines[0].category == AstropyDeprecationWarning
+
+        with catch_warnings(AstropyDeprecationWarning) as warning_lines:
+            c = Column([1,2,3], name='a', dtype="f8", units="m")
+            assert warning_lines[0].category == AstropyDeprecationWarning
+
     def test_array_wrap(self):
         """Test that the __array_wrap__ method converts a reduction ufunc
         output that has a different shape into an ndarray view.  Without this a
@@ -106,90 +134,114 @@ class TestColumn():
         assert c.sum(axis=0).shape == (3,)
         assert isinstance(c.sum(axis=0), np.ndarray)
 
-        if not numpy_lt_1p5:
-            # Sum and mean for a 1-d masked column
-            c = table.MaskedColumn(name='a', data=[1., 2., 3.], mask=[0, 0, 1])
-            assert np.allclose(c.mean(), 1.5)
-            assert isinstance(c.mean(), (np.floating, float))
-            assert np.allclose(c.sum(), 3.)
-            assert isinstance(c.sum(), (np.floating, float))
+        # Sum and mean for a 1-d masked column
+        c = table.MaskedColumn(name='a', data=[1., 2., 3.], mask=[0, 0, 1])
+        assert np.allclose(c.mean(), 1.5)
+        assert isinstance(c.mean(), (np.floating, float))
+        assert np.allclose(c.sum(), 3.)
+        assert isinstance(c.sum(), (np.floating, float))
 
     def test_name_none(self, Column):
         """Can create a column without supplying name, which defaults to None"""
-        c = Column(data=[1, 2])
+        c = Column([1, 2])
         assert c.name is None
         assert np.all(c == np.array([1, 2]))
 
+    def test_quantity_init(self, Column):
+
+        c = Column(data=np.array([1,2,3]) * u.m)
+        assert np.all(c.data == np.array([1,2,3]))
+        assert np.all(c.unit == u.m)
+
+        c = Column(data=np.array([1,2,3]) * u.m, unit=u.cm)
+        assert np.all(c.data == np.array([100,200,300]))
+        assert np.all(c.unit == u.cm)
+
 
 class TestAttrEqual():
     """Bunch of tests originally from ATpy that test the attrs_equal method."""
 
     def test_5(self, Column):
-        c1 = Column(name='a', dtype=int, units='mJy')
-        c2 = Column(name='a', dtype=int, units='mJy')
+        c1 = Column(name='a', dtype=int, unit='mJy')
+        c2 = Column(name='a', dtype=int, unit='mJy')
         assert c1.attrs_equal(c2)
 
     def test_6(self, Column):
-        c1 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c1 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
-        c2 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c2 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
         assert c1.attrs_equal(c2)
 
     def test_7(self, Column):
-        c1 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c1 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
-        c2 = Column(name='b', dtype=int, units='mJy', format='%i',
+        c2 = Column(name='b', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
         assert not c1.attrs_equal(c2)
 
     def test_8(self, Column):
-        c1 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c1 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
-        c2 = Column(name='a', dtype=float, units='mJy', format='%i',
+        c2 = Column(name='a', dtype=float, unit='mJy', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
         assert not c1.attrs_equal(c2)
 
     def test_9(self, Column):
-        c1 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c1 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
-        c2 = Column(name='a', dtype=int, units='erg.cm-2.s-1.Hz-1', format='%i',
+        c2 = Column(name='a', dtype=int, unit='erg.cm-2.s-1.Hz-1', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
         assert not c1.attrs_equal(c2)
 
     def test_10(self, Column):
-        c1 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c1 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
-        c2 = Column(name='a', dtype=int, units='mJy', format='%g',
+        c2 = Column(name='a', dtype=int, unit='mJy', format='%g',
                     description='test column', meta={'c': 8, 'd': 12})
         assert not c1.attrs_equal(c2)
 
     def test_11(self, Column):
-        c1 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c1 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
-        c2 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c2 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='another test column', meta={'c': 8, 'd': 12})
         assert not c1.attrs_equal(c2)
 
     def test_12(self, Column):
-        c1 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c1 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
-        c2 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c2 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'e': 8, 'd': 12})
         assert not c1.attrs_equal(c2)
 
     def test_13(self, Column):
-        c1 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c1 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'c': 8, 'd': 12})
-        c2 = Column(name='a', dtype=int, units='mJy', format='%i',
+        c2 = Column(name='a', dtype=int, unit='mJy', format='%i',
                     description='test column', meta={'c': 9, 'd': 12})
         assert not c1.attrs_equal(c2)
 
-    @pytest.mark.xfail('numpy_lt_1p5')
     def test_col_and_masked_col(self):
-        c1 = table.Column(name='a', dtype=int, units='mJy', format='%i',
+        c1 = table.Column(name='a', dtype=int, unit='mJy', format='%i',
                           description='test column', meta={'c': 8, 'd': 12})
-        c2 = table.MaskedColumn(name='a', dtype=int, units='mJy', format='%i',
+        c2 = table.MaskedColumn(name='a', dtype=int, unit='mJy', format='%i',
                                 description='test column', meta={'c': 8, 'd': 12})
         assert c1.attrs_equal(c2)
         assert c2.attrs_equal(c1)
+
+# Check that the meta descriptor is working as expected. The MetaBaseTest class
+# takes care of defining all the tests, and we simply have to define the class
+# and any minimal set of args to pass.
+
+from ...utils.tests.test_metadata import MetaBaseTest
+
+
+class TestMetaColumn(MetaBaseTest):
+    test_class = table.Column
+    args = ()
+
+
+class TestMetaMaskedColumn(MetaBaseTest):
+    test_class = table.MaskedColumn
+    args = ()
diff --git a/astropy/table/tests/test_groups.py b/astropy/table/tests/test_groups.py
new file mode 100644
index 0000000..e2b52e9
--- /dev/null
+++ b/astropy/table/tests/test_groups.py
@@ -0,0 +1,540 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+import numpy as np
+
+from ...tests.helper import pytest, catch_warnings
+from ...table import Table, Column
+from ...utils.exceptions import AstropyUserWarning
+
+
+def sort_eq(list1, list2):
+    return sorted(list1) == sorted(list2)
+
+
+T1 = Table.read([' a b c d',
+                 ' 2 c 7.0 0',
+                 ' 2 b 5.0 1',
+                 ' 2 b 6.0 2',
+                 ' 2 a 4.0 3',
+                 ' 0 a 0.0 4',
+                 ' 1 b 3.0 5',
+                 ' 1 a 2.0 6',
+                 ' 1 a 1.0 7',
+                 ], format='ascii')
+T1.meta.update({'ta': 1})
+T1['c'].meta.update({'a': 1})
+T1['c'].description = 'column c'
+
+
+def test_column_group_by():
+    for masked in (False, True):
+        t1 = Table(T1, masked=masked)
+        t1a = t1['a'].copy()
+
+        # Group by a Column (i.e. numpy array)
+        t1ag = t1a.group_by(t1['a'])
+        assert np.all(t1ag.groups.indices == np.array([0, 1, 4, 8]))
+
+        # Group by a Table
+        t1ag = t1a.group_by(t1['a', 'b'])
+        assert np.all(t1ag.groups.indices == np.array([0, 1, 3, 4, 5, 7, 8]))
+
+        # Group by a numpy structured array
+        t1ag = t1a.group_by(t1['a', 'b']._data)
+        assert np.all(t1ag.groups.indices == np.array([0, 1, 3, 4, 5, 7, 8]))
+
+
+def test_table_group_by():
+    """
+    Test basic table group_by functionality for possible key types and for
+    masked/unmasked tables.
+    """
+
+    for masked in (False, True):
+        t1 = Table(T1, masked=masked)
+
+        # Group by a single column key specified by name
+        tg = t1.group_by('a')
+        assert np.all(tg.groups.indices == np.array([0, 1, 4, 8]))
+        assert str(tg.groups) == "<TableGroups indices=[0 1 4 8]>"
+        assert str(tg['a'].groups) == "<ColumnGroups indices=[0 1 4 8]>"
+
+        # Sorted by 'a' and in original order for rest
+        assert tg.pformat() == [' a   b   c   d ',
+                                '--- --- --- ---',
+                                '  0   a 0.0   4',
+                                '  1   b 3.0   5',
+                                '  1   a 2.0   6',
+                                '  1   a 1.0   7',
+                                '  2   c 7.0   0',
+                                '  2   b 5.0   1',
+                                '  2   b 6.0   2',
+                                '  2   a 4.0   3']
+        assert tg.meta['ta'] == 1
+        assert tg['c'].meta['a'] == 1
+        assert tg['c'].description == 'column c'
+
+        # Group by a table column
+        tg2 = t1.group_by(t1['a'])
+        assert tg.pformat() == tg2.pformat()
+
+        # Group by two columns spec'd by name
+        for keys in (['a', 'b'], ('a', 'b')):
+            tg = t1.group_by(keys)
+            assert np.all(tg.groups.indices == np.array([0, 1, 3, 4, 5, 7, 8]))
+            # Sorted by 'a', 'b' and in original order for rest
+            assert tg.pformat() == [' a   b   c   d ',
+                                    '--- --- --- ---',
+                                    '  0   a 0.0   4',
+                                    '  1   a 2.0   6',
+                                    '  1   a 1.0   7',
+                                    '  1   b 3.0   5',
+                                    '  2   a 4.0   3',
+                                    '  2   b 5.0   1',
+                                    '  2   b 6.0   2',
+                                    '  2   c 7.0   0']
+
+        # Group by a Table
+        tg2 = t1.group_by(t1['a', 'b'])
+        assert tg.pformat() == tg2.pformat()
+
+        # Group by a structured array
+        tg2 = t1.group_by(t1['a', 'b']._data)
+        assert tg.pformat() == tg2.pformat()
+
+        # Group by a simple ndarray
+        tg = t1.group_by(np.array([0, 1, 0, 1, 2, 1, 0, 0]))
+        assert np.all(tg.groups.indices == np.array([0, 4, 7, 8]))
+        assert tg.pformat() == [' a   b   c   d ',
+                                '--- --- --- ---',
+                                '  2   c 7.0   0',
+                                '  2   b 6.0   2',
+                                '  1   a 2.0   6',
+                                '  1   a 1.0   7',
+                                '  2   b 5.0   1',
+                                '  2   a 4.0   3',
+                                '  1   b 3.0   5',
+                                '  0   a 0.0   4']
+
+
+def test_groups_keys():
+    tg = T1.group_by('a')
+    keys = tg.groups.keys
+    assert keys.dtype.names == ('a',)
+    assert np.all(keys['a'] == np.array([0, 1, 2]))
+
+    tg = T1.group_by(['a', 'b'])
+    keys = tg.groups.keys
+    assert keys.dtype.names == ('a', 'b')
+    assert np.all(keys['a'] == np.array([0, 1, 1, 2, 2, 2]))
+    assert np.all(keys['b'] == np.array(['a', 'a', 'b', 'a', 'b', 'c']))
+
+    # Grouping by Column ignores column name
+    tg = T1.group_by(T1['b'])
+    keys = tg.groups.keys
+    assert keys.dtype.names is None
+
+
+def test_groups_iterator():
+    tg = T1.group_by('a')
+    for ii, group in enumerate(tg.groups):
+        assert group.pformat() == tg.groups[ii].pformat()
+        assert group['a'][0] == tg['a'][tg.groups.indices[ii]]
+
+
+def test_grouped_copy():
+    """
+    Test that copying a table or column copies the groups properly
+    """
+    for masked in (False, True):
+        t1 = Table(T1, masked=masked)
+        tg = t1.group_by('a')
+        tgc = tg.copy()
+        assert np.all(tgc.groups.indices == tg.groups.indices)
+        assert np.all(tgc.groups.keys == tg.groups.keys)
+
+        tac = tg['a'].copy()
+        assert np.all(tac.groups.indices == tg['a'].groups.indices)
+
+        c1 = t1['a'].copy()
+        gc1 = c1.group_by(t1['a'])
+        gc1c = gc1.copy()
+        assert np.all(gc1c.groups.indices == np.array([0, 1, 4, 8]))
+
+
+def test_grouped_slicing():
+    """
+    Test that slicing a table removes previous grouping
+    """
+
+    for masked in (False, True):
+        t1 = Table(T1, masked=masked)
+
+        # Regular slice of a table
+        tg = t1.group_by('a')
+        tg2 = tg[3:5]
+        assert np.all(tg2.groups.indices == np.array([0, len(tg2)]))
+        assert tg2.groups.keys is None
+
+
+def test_group_column_from_table():
+    """
+    Group a column that is part of a table
+    """
+    cg = T1['c'].group_by(np.array(T1['a']))
+    assert np.all(cg.groups.keys == np.array([0, 1, 2]))
+    assert np.all(cg.groups.indices == np.array([0, 1, 4, 8]))
+
+
+def test_table_groups_mask_index():
+    """
+    Use boolean mask as item in __getitem__ for groups
+    """
+    for masked in (False, True):
+        t1 = Table(T1, masked=masked).group_by('a')
+
+        t2 = t1.groups[np.array([True, False, True])]
+        assert len(t2.groups) == 2
+        assert t2.groups[0].pformat() == t1.groups[0].pformat()
+        assert t2.groups[1].pformat() == t1.groups[2].pformat()
+        assert np.all(t2.groups.keys['a'] == np.array([0, 2]))
+
+
+def test_table_groups_array_index():
+    """
+    Use numpy array as item in __getitem__ for groups
+    """
+    for masked in (False, True):
+        t1 = Table(T1, masked=masked).group_by('a')
+
+        t2 = t1.groups[np.array([0, 2])]
+        assert len(t2.groups) == 2
+        assert t2.groups[0].pformat() == t1.groups[0].pformat()
+        assert t2.groups[1].pformat() == t1.groups[2].pformat()
+        assert np.all(t2.groups.keys['a'] == np.array([0, 2]))
+
+
+def test_table_groups_slicing():
+    """
+    Test that slicing table groups works
+    """
+
+    for masked in (False, True):
+        t1 = Table(T1, masked=masked).group_by('a')
+
+        # slice(0, 2)
+        t2 = t1.groups[0:2]
+        assert len(t2.groups) == 2
+        assert t2.groups[0].pformat() == t1.groups[0].pformat()
+        assert t2.groups[1].pformat() == t1.groups[1].pformat()
+        assert np.all(t2.groups.keys['a'] == np.array([0, 1]))
+
+        # slice(1, 2)
+        t2 = t1.groups[1:2]
+        assert len(t2.groups) == 1
+        assert t2.groups[0].pformat() == t1.groups[1].pformat()
+        assert np.all(t2.groups.keys['a'] == np.array([1]))
+
+        # slice(0, 3, 2)
+        t2 = t1.groups[0:3:2]
+        assert len(t2.groups) == 2
+        assert t2.groups[0].pformat() == t1.groups[0].pformat()
+        assert t2.groups[1].pformat() == t1.groups[2].pformat()
+        assert np.all(t2.groups.keys['a'] == np.array([0, 2]))
+
+
+def test_grouped_item_access():
+    """
+    Test that column slicing preserves grouping
+    """
+    for masked in (False, True):
+        t1 = Table(T1, masked=masked)
+
+        # Regular slice of a table
+        tg = t1.group_by('a')
+        tgs = tg['a', 'c', 'd']
+        assert np.all(tgs.groups.keys == tg.groups.keys)
+        assert np.all(tgs.groups.indices == tg.groups.indices)
+        tgsa = tgs.groups.aggregate(np.sum)
+        assert tgsa.pformat() == [' a   c    d ',
+                                  '--- ---- ---',
+                                  '  0  0.0   4',
+                                  '  1  6.0  18',
+                                  '  2 22.0   6']
+
+        tgs = tg['c', 'd']
+        assert np.all(tgs.groups.keys == tg.groups.keys)
+        assert np.all(tgs.groups.indices == tg.groups.indices)
+        tgsa = tgs.groups.aggregate(np.sum)
+        assert tgsa.pformat() == [' c    d ',
+                                  '---- ---',
+                                  ' 0.0   4',
+                                  ' 6.0  18',
+                                  '22.0   6']
+
+
+def test_mutable_operations():
+    """
+    Operations like adding or deleting a row should removing grouping,
+    but adding or removing or renaming a column should retain grouping.
+    """
+    for masked in (False, True):
+        t1 = Table(T1, masked=masked)
+
+        # add row
+        tg = t1.group_by('a')
+        tg.add_row((0, 'a', 3.0, 4))
+        assert np.all(tg.groups.indices == np.array([0, len(tg)]))
+        assert tg.groups.keys is None
+
+        # remove row
+        tg = t1.group_by('a')
+        tg.remove_row(4)
+        assert np.all(tg.groups.indices == np.array([0, len(tg)]))
+        assert tg.groups.keys is None
+
+        # add column
+        tg = t1.group_by('a')
+        indices = tg.groups.indices.copy()
+        tg.add_column(Column(name='e', data=np.arange(len(tg))))
+        assert np.all(tg.groups.indices == indices)
+        assert np.all(tg['e'].groups.indices == indices)
+        assert np.all(tg['e'].groups.keys == tg.groups.keys)
+
+        # remove column (not key column)
+        tg = t1.group_by('a')
+        tg.remove_column('b')
+        assert np.all(tg.groups.indices == indices)
+        # Still has original key col names
+        assert tg.groups.keys.dtype.names == ('a',)
+        assert np.all(tg['a'].groups.indices == indices)
+
+        # remove key column
+        tg = t1.group_by('a')
+        tg.remove_column('a')
+        assert np.all(tg.groups.indices == indices)
+        assert tg.groups.keys.dtype.names == ('a',)
+        assert np.all(tg['b'].groups.indices == indices)
+
+        # rename key column
+        tg = t1.group_by('a')
+        tg.rename_column('a', 'aa')
+        assert np.all(tg.groups.indices == indices)
+        assert tg.groups.keys.dtype.names == ('a',)
+        assert np.all(tg['aa'].groups.indices == indices)
+
+
+def test_group_by_masked():
+    t1m = Table(T1, masked=True)
+    t1m['c'].mask[4] = True
+    t1m['d'].mask[5] = True
+    assert t1m.group_by('a').pformat() == [' a   b   c   d ',
+                                           '--- --- --- ---',
+                                           '  0   a  --   4',
+                                           '  1   b 3.0  --',
+                                           '  1   a 2.0   6',
+                                           '  1   a 1.0   7',
+                                           '  2   c 7.0   0',
+                                           '  2   b 5.0   1',
+                                           '  2   b 6.0   2',
+                                           '  2   a 4.0   3']
+
+
+def test_group_by_errors():
+    """
+    Appropriate errors get raised.
+    """
+    # Bad column name as string
+    with pytest.raises(ValueError):
+        T1.group_by('f')
+
+    # Bad column names in list
+    with pytest.raises(ValueError):
+        T1.group_by(['f', 'g'])
+
+    # Wrong length array
+    with pytest.raises(ValueError):
+        T1.group_by(np.array([1, 2]))
+
+    # Wrong type
+    with pytest.raises(TypeError):
+        T1.group_by(None)
+
+    # Masked key column
+    t1 = Table(T1, masked=True)
+    t1['a'].mask[4] = True
+    with pytest.raises(ValueError):
+        t1.group_by('a')
+
+
+def test_groups_keys_meta():
+    """
+    Make sure the keys meta['grouped_by_table_cols'] is working.
+    """
+    # Group by column in this table
+    tg = T1.group_by('a')
+    assert tg.groups.keys.meta['grouped_by_table_cols'] is True
+    assert tg['c'].groups.keys.meta['grouped_by_table_cols'] is True
+    assert tg.groups[1].groups.keys.meta['grouped_by_table_cols'] is True
+    assert (tg['d'].groups[np.array([False, True, True])]
+            .groups.keys.meta['grouped_by_table_cols'] is True)
+
+    # Group by external Table
+    tg = T1.group_by(T1['a', 'b'])
+    assert tg.groups.keys.meta['grouped_by_table_cols'] is False
+    assert tg['c'].groups.keys.meta['grouped_by_table_cols'] is False
+    assert tg.groups[1].groups.keys.meta['grouped_by_table_cols'] is False
+
+    # Group by external numpy array
+    tg = T1.group_by(T1['a', 'b']._data)
+    assert not hasattr(tg.groups.keys, 'meta')
+    assert not hasattr(tg['c'].groups.keys, 'meta')
+
+    # Group by Column
+    tg = T1.group_by(T1['a'])
+    assert 'grouped_by_table_cols' not in tg.groups.keys.meta
+    assert 'grouped_by_table_cols' not in tg['c'].groups.keys.meta
+
+
+def test_table_aggregate():
+    """
+    Aggregate a table
+    """
+    # Table with only summable cols
+    t1 = T1['a', 'c', 'd']
+    tg = t1.group_by('a')
+    tga = tg.groups.aggregate(np.sum)
+    assert tga.pformat() == [' a   c    d ',
+                             '--- ---- ---',
+                             '  0  0.0   4',
+                             '  1  6.0  18',
+                             '  2 22.0   6']
+    # Reverts to default groups
+    assert np.all(tga.groups.indices == np.array([0, 3]))
+    assert tga.groups.keys is None
+
+    # metadata survives
+    assert tga.meta['ta'] == 1
+    assert tga['c'].meta['a'] == 1
+    assert tga['c'].description == 'column c'
+
+    # Aggregate with np.sum with masked elements.  This results
+    # in one group with no elements, hence a nan result and conversion
+    # to float for the 'd' column.
+    t1m = Table(t1, masked=True)
+    t1m['c'].mask[4:6] = True
+    t1m['d'].mask[4:6] = True
+    tg = t1m.group_by('a')
+    with catch_warnings(Warning) as warning_lines:
+        tga = tg.groups.aggregate(np.sum)
+        assert warning_lines[0].category == UserWarning
+        assert "converting a masked element to nan" in str(warning_lines[0].message)
+
+    assert tga.pformat() == [' a   c    d  ',
+                             '--- ---- ----',
+                             '  0  nan  nan',
+                             '  1  3.0 13.0',
+                             '  2 22.0  6.0']
+
+    # Aggregrate with np.sum with masked elements, but where every
+    # group has at least one remaining (unmasked) element.  Then
+    # the int column stays as an int.
+    t1m = Table(t1, masked=True)
+    t1m['c'].mask[5] = True
+    t1m['d'].mask[5] = True
+    tg = t1m.group_by('a')
+    tga = tg.groups.aggregate(np.sum)
+    assert tga.pformat() == [' a   c    d ',
+                             '--- ---- ---',
+                             '  0  0.0   4',
+                             '  1  3.0  13',
+                             '  2 22.0   6']
+
+    # Aggregate with a column type that cannot by supplied to the aggregating
+    # function.  This raises a warning but still works.
+    tg = T1.group_by('a')
+    with catch_warnings(Warning) as warning_lines:
+        tga = tg.groups.aggregate(np.sum)
+        assert warning_lines[0].category == AstropyUserWarning
+        assert "Cannot aggregate column" in str(warning_lines[0].message)
+    assert tga.pformat() == [' a   c    d ',
+                             '--- ---- ---',
+                             '  0  0.0   4',
+                             '  1  6.0  18',
+                             '  2 22.0   6']
+
+
+def test_column_aggregate():
+    """
+    Aggregate a single table column
+    """
+    for masked in (False, True):
+        tg = Table(T1, masked=masked).group_by('a')
+        tga = tg['c'].groups.aggregate(np.sum)
+        assert tga.pformat() == [' c  ',
+                                 '----',
+                                 ' 0.0',
+                                 ' 6.0',
+                                 '22.0']
+
+
+def test_table_filter():
+    """
+    Table groups filtering
+    """
+    def all_positive(table, key_colnames):
+        colnames = [name for name in table.colnames if name not in key_colnames]
+        for colname in colnames:
+            if np.any(table[colname] < 0):
+                return False
+        return True
+
+    # Negative value in 'a' column should not filter because it is a key col
+    t = Table.read([' a c d',
+                    ' -2 7.0 0',
+                    ' -2 5.0 1',
+                    ' 0 0.0 4',
+                    ' 1 3.0 5',
+                    ' 1 2.0 -6',
+                    ' 1 1.0 7',
+                    ' 3 3.0 5',
+                    ' 3 -2.0 6',
+                    ' 3 1.0 7',
+                    ], format='ascii')
+    tg = t.group_by('a')
+    t2 = tg.groups.filter(all_positive)
+    assert t2.groups[0].pformat() == [' a   c   d ',
+                                      '--- --- ---',
+                                      ' -2 7.0   0',
+                                      ' -2 5.0   1']
+    assert t2.groups[1].pformat() == [' a   c   d ',
+                                      '--- --- ---',
+                                      '  0 0.0   4']
+
+
+def test_column_filter():
+    """
+    Table groups filtering
+    """
+    def all_positive(column):
+        if np.any(column < 0):
+            return False
+        return True
+
+    # Negative value in 'a' column should not filter because it is a key col
+    t = Table.read([' a c d',
+                    ' -2 7.0 0',
+                    ' -2 5.0 1',
+                    ' 0 0.0 4',
+                    ' 1 3.0 5',
+                    ' 1 2.0 -6',
+                    ' 1 1.0 7',
+                    ' 3 3.0 5',
+                    ' 3 -2.0 6',
+                    ' 3 1.0 7',
+                    ], format='ascii')
+    tg = t.group_by('a')
+    c2 = tg['c'].groups.filter(all_positive)
+    assert len(c2.groups) == 3
+    assert c2.groups[0].pformat() == [' c ', '---', '7.0', '5.0']
+    assert c2.groups[1].pformat() == [' c ', '---', '0.0']
+    assert c2.groups[2].pformat() == [' c ', '---', '3.0', '2.0', '1.0']
diff --git a/astropy/table/tests/test_init_table.py b/astropy/table/tests/test_init_table.py
index 3c415d0..a83a194 100644
--- a/astropy/table/tests/test_init_table.py
+++ b/astropy/table/tests/test_init_table.py
@@ -10,11 +10,6 @@ from ... import table
 from ...table import Column
 from ...utils import OrderedDict
 
-numpy_lt_1p5 = version.LooseVersion(np.__version__) < version.LooseVersion('1.5')
-
-# Dummy init of Table for pyflakes and to be sure test fixture is working
-Table = None
-
 
 class MaskedTable(table.Table):
     def __init__(self, *args, **kwargs):
@@ -24,25 +19,28 @@ class MaskedTable(table.Table):
 
 # Fixture to run all the Column tests for both an unmasked (ndarray)
 # and masked (MaskedArray) column.
- at pytest.fixture(params=[False] if numpy_lt_1p5 else [False, True])
-def set_global_Table(request):
-    global Table
-    Table = MaskedTable if request.param else table.Table
+ at pytest.fixture(params=[False, True])
+def table_type(request):
+    return MaskedTable if request.param else table.Table
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class BaseInitFrom():
+    def _setup(self, table_type):
+        pass
 
-    def test_basic_init(self):
-        t = Table(self.data, names=('a', 'b', 'c'))
+    def test_basic_init(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, names=('a', 'b', 'c'))
         assert t.colnames == ['a', 'b', 'c']
         assert np.all(t['a'] == np.array([1, 3]))
         assert np.all(t['b'] == np.array([2, 4]))
         assert np.all(t['c'] == np.array([3, 5]))
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_set_dtypes(self):
-        t = Table(self.data, names=('a', 'b', 'c'), dtypes=('i4', 'f4', 'f8'))
+    def test_set_dtypes(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, names=('a', 'b', 'c'), dtype=('i4', 'f4', 'f8'))
         assert t.colnames == ['a', 'b', 'c']
         assert np.all(t['a'] == np.array([1, 3], dtype='i4'))
         assert np.all(t['b'] == np.array([2, 4], dtype='f4'))
@@ -52,33 +50,36 @@ class BaseInitFrom():
         assert t['c'].dtype.type == np.float64
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_names_dtypes_mismatch(self):
+    def test_names_dtypes_mismatch(self, table_type):
+        self._setup(table_type)
         with pytest.raises(ValueError):
-            Table(self.data, names=('a',), dtypes=('i4', 'f4', 'i4'))
+            table_type(self.data, names=('a',), dtype=('i4', 'f4', 'i4'))
 
-    def test_names_cols_mismatch(self):
+    def test_names_cols_mismatch(self, table_type):
+        self._setup(table_type)
         with pytest.raises(ValueError):
-            Table(self.data, names=('a',), dtypes=('i4'))
+            table_type(self.data, names=('a',), dtype=('i4'))
 
-
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class BaseInitFromListLike(BaseInitFrom):
 
-    def test_names_cols_mismatch(self):
+    def test_names_cols_mismatch(self, table_type):
+        self._setup(table_type)
         with pytest.raises(ValueError):
-            Table(self.data, names=['a'], dtypes=[int])
+            table_type(self.data, names=['a'], dtype=[int])
 
-    def test_names_copy_false(self):
+    def test_names_copy_false(self, table_type):
+        self._setup(table_type)
         with pytest.raises(ValueError):
-            Table(self.data, names=['a'], dtypes=[int], copy=False)
+            table_type(self.data, names=['a'], dtype=[int], copy=False)
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class BaseInitFromDictLike(BaseInitFrom):
     pass
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class TestInitFromNdarrayHomo(BaseInitFromListLike):
 
     def setup_method(self, method):
@@ -86,14 +87,16 @@ class TestInitFromNdarrayHomo(BaseInitFromListLike):
                               (3, 4, 5)],
                              dtype='i4')
 
-    def test_default_names(self):
-        t = Table(self.data)
+    def test_default_names(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data)
         assert t.colnames == ['col0', 'col1', 'col2']
 
-    def test_ndarray_ref(self):
+    def test_ndarray_ref(self, table_type):
         """Init with ndarray and copy=False and show that ValueError is raised
         to input ndarray"""
-        t = Table(self.data, copy=False)
+        self._setup(table_type)
+        t = table_type(self.data, copy=False)
         t['col1'][1] = 0
         assert t._data['col1'][1] == 0
         assert t['col1'][1] == 0
@@ -101,16 +104,18 @@ class TestInitFromNdarrayHomo(BaseInitFromListLike):
         # NOTE: assert np.all(t._data == self.data) fails because when
         # homogenous array is viewcast to structured then the == is False
 
-    def test_partial_names_dtypes(self):
-        t = Table(self.data, names=['a', None, 'c'], dtypes=[None, None, 'f8'])
+    def test_partial_names_dtypes(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, names=['a', None, 'c'], dtype=[None, None, 'f8'])
         assert t.colnames == ['a', 'col1', 'c']
         assert t['a'].dtype.type == np.int32
         assert t['col1'].dtype.type == np.int32
         assert t['c'].dtype.type == np.float64
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_partial_names_ref(self):
-        t = Table(self.data, names=['a', None, 'c'])
+    def test_partial_names_ref(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, names=['a', None, 'c'])
         assert t.colnames == ['a', 'col1', 'c']
         assert t['a'].dtype.type == np.int32
         assert t['col1'].dtype.type == np.int32
@@ -118,72 +123,104 @@ class TestInitFromNdarrayHomo(BaseInitFromListLike):
         assert all(t[name].name == name for name in t.colnames)
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class TestInitFromListOfLists(BaseInitFromListLike):
 
     def setup_method(self, method):
+        self._setup(table_type)
         self.data = [(np.int32(1), np.int32(3)),
                      Column(name='col1', data=[2, 4], dtype=np.int32),
                      np.array([3, 5], dtype=np.int32)]
 
-    def test_default_names(self):
-        t = Table(self.data)
+    def test_default_names(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data)
         assert t.colnames == ['col0', 'col1', 'col2']
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_partial_names_dtypes(self):
-        t = Table(self.data, names=['b', None, 'c'],
-                  dtypes=['f4', None, 'f8'])
+    def test_partial_names_dtypes(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, names=['b', None, 'c'],
+                  dtype=['f4', None, 'f8'])
         assert t.colnames == ['b', 'col1', 'c']
         assert t['b'].dtype.type == np.float32
         assert t['col1'].dtype.type == np.int32
         assert t['c'].dtype.type == np.float64
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_bad_data(self):
+    def test_bad_data(self, table_type):
+        self._setup(table_type)
         with pytest.raises(ValueError):
-            Table([[1, 2],
+            table_type([[1, 2],
                    [3, 4, 5]])
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
+class TestInitFromListOfDicts(BaseInitFromListLike):
+
+    def _setup(self, table_type):
+        self.data = [{'a': 1, 'b': 2, 'c': 3},
+                     {'a': 3, 'b': 4, 'c': 5}]
+
+    def test_names(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data)
+        assert all(colname in set(['a', 'b', 'c']) for colname in t.colnames)
+
+    def test_names_ordered(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, names=('c', 'b', 'a'))
+        assert t.colnames == ['c', 'b', 'a']
+
+    def test_bad_data(self, table_type):
+        self._setup(table_type)
+        with pytest.raises(ValueError):
+            table_type([{'a': 1, 'b': 2, 'c': 3},
+                   {'a': 2, 'b': 4}])
+
+
+ at pytest.mark.usefixtures('table_type')
 class TestInitFromColsList(BaseInitFromListLike):
 
-    def setup_method(self, method):
-        self.data = [Column(name='x', data=[1, 3], dtype=np.int32),
+    def _setup(self, table_type):
+        self.data = [Column([1, 3], name='x', dtype=np.int32),
                      np.array([2, 4], dtype=np.int32),
                      np.array([3, 5], dtype='i8')]
 
-    def test_default_names(self):
-        t = Table(self.data)
+    def test_default_names(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data)
         assert t.colnames == ['x', 'col1', 'col2']
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_partial_names_dtypes(self):
-        t = Table(self.data, names=['b', None, 'c'], dtypes=['f4', None, 'f8'])
+    def test_partial_names_dtypes(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, names=['b', None, 'c'], dtype=['f4', None, 'f8'])
         assert t.colnames == ['b', 'col1', 'c']
         assert t['b'].dtype.type == np.float32
         assert t['col1'].dtype.type == np.int32
         assert t['c'].dtype.type == np.float64
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_ref(self):
+    def test_ref(self, table_type):
+        self._setup(table_type)
         with pytest.raises(ValueError):
-            Table(self.data, copy=False)
+            table_type(self.data, copy=False)
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class TestInitFromNdarrayStruct(BaseInitFromDictLike):
 
-    def setup_method(self, method):
+    def _setup(self, table_type):
         self.data = np.array([(1, 2, 3),
                               (3, 4, 5)],
                              dtype=[('x', 'i8'), ('y', 'i4'), ('z', 'i8')])
 
-    def test_ndarray_ref(self):
+    def test_ndarray_ref(self, table_type):
         """Init with ndarray and copy=False and show that table uses reference
         to input ndarray"""
-        t = Table(self.data, copy=False)
+        self._setup(table_type)
+        t = table_type(self.data, copy=False)
         assert np.all(t._data == self.data)
         t['x'][1] = 0
         assert t._data['x'][1] == 0
@@ -191,16 +228,18 @@ class TestInitFromNdarrayStruct(BaseInitFromDictLike):
         assert np.all(t._data == self.data)
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_partial_names_dtypes(self):
-        t = Table(self.data, names=['e', None, 'd'], dtypes=['f4', None, 'f8'])
+    def test_partial_names_dtypes(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, names=['e', None, 'd'], dtype=['f4', None, 'f8'])
         assert t.colnames == ['e', 'y', 'd']
         assert t['e'].dtype.type == np.float32
         assert t['y'].dtype.type == np.int32
         assert t['d'].dtype.type == np.float64
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_partial_names_ref(self):
-        t = Table(self.data, names=['e', None, 'd'], copy=False)
+    def test_partial_names_ref(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, names=['e', None, 'd'], copy=False)
         assert t.colnames == ['e', 'y', 'd']
         assert t['e'].dtype.type == np.int64
         assert t['y'].dtype.type == np.int32
@@ -208,39 +247,67 @@ class TestInitFromNdarrayStruct(BaseInitFromDictLike):
         assert all(t[name].name == name for name in t.colnames)
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class TestInitFromDict(BaseInitFromDictLike):
 
-    def setup_method(self, method):
-        self.data = dict([('a', Column(name='x', data=[1, 3])),
+    def _setup(self, table_type):
+        self.data = dict([('a', Column([1, 3], name='x')),
                           ('b', [2, 4]),
                           ('c', np.array([3, 5], dtype='i8'))])
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class TestInitFromOrderedDict(BaseInitFromDictLike):
 
-    def setup_method(self, method):
+    def _setup(self, table_type):
         self.data = OrderedDict([('a', Column(name='x', data=[1, 3])),
                                  ('b', [2, 4]),
                                  ('c', np.array([3, 5], dtype='i8'))])
 
-    def test_col_order(self):
-        t = Table(self.data)
+    def test_col_order(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data)
         assert t.colnames == ['a', 'b', 'c']
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
+class TestInitFromRow(BaseInitFromDictLike):
+
+    def _setup(self, table_type):
+        arr = np.array([(1, 2, 3),
+                        (3, 4, 5)],
+                       dtype=[('x', 'i8'), ('y', 'i8'), ('z', 'f8')])
+        self.data = table_type(arr, meta={'comments': ['comment1', 'comment2']})
+
+    def test_init_from_row(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data[0])
+
+        # Values and meta match original
+        assert t.meta['comments'][0] == 'comment1'
+        for name in t.colnames:
+            assert np.all(t[name] == self.data[name][0:1])
+        assert all(t[name].name == name for name in t.colnames)
+
+        # Change value in new instance and check that original is the same
+        t['x'][0] = 8
+        t.meta['comments'][1] = 'new comment2'
+        assert np.all(t['x'] == np.array([8]))
+        assert np.all(self.data['x'] == np.array([1, 3]))
+        assert self.data.meta['comments'][1] == 'comment2'
+
+ at pytest.mark.usefixtures('table_type')
 class TestInitFromTable(BaseInitFromDictLike):
 
-    def setup_method(self, method):
+    def _setup(self, table_type):
         arr = np.array([(1, 2, 3),
                         (3, 4, 5)],
                        dtype=[('x', 'i8'), ('y', 'i8'), ('z', 'f8')])
-        self.data = Table(arr, meta={'comments': ['comment1', 'comment2']})
+        self.data = table_type(arr, meta={'comments': ['comment1', 'comment2']})
 
-    def test_data_meta_copy(self):
-        t = Table(self.data)
+    def test_data_meta_copy(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data)
         assert t.meta['comments'][0] == 'comment1'
         t['x'][1] = 8
         t.meta['comments'][1] = 'new comment2'
@@ -250,8 +317,9 @@ class TestInitFromTable(BaseInitFromDictLike):
         assert t['z'].name == 'z'
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_table_ref(self):
-        t = Table(self.data, copy=False)
+    def test_table_ref(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, copy=False)
         assert np.all(t._data == self.data._data)
         t['x'][1] = 0
         assert t._data['x'][1] == 0
@@ -259,52 +327,57 @@ class TestInitFromTable(BaseInitFromDictLike):
         assert np.all(t._data == self.data._data)
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_partial_names_dtypes(self):
-        t = Table(self.data, names=['e', None, 'd'], dtypes=['f4', None, 'i8'])
+    def test_partial_names_dtypes(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, names=['e', None, 'd'], dtype=['f4', None, 'i8'])
         assert t.colnames == ['e', 'y', 'd']
         assert t['e'].dtype.type == np.float32
         assert t['y'].dtype.type == np.int64
         assert t['d'].dtype.type == np.int64
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_partial_names_ref(self):
-        t = Table(self.data, names=['e', None, 'd'], copy=False)
+    def test_partial_names_ref(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data, names=['e', None, 'd'], copy=False)
         assert t.colnames == ['e', 'y', 'd']
         assert t['e'].dtype.type == np.int64
         assert t['y'].dtype.type == np.int64
         assert t['d'].dtype.type == np.float64
         assert all(t[name].name == name for name in t.colnames)
 
-    def test_init_from_columns(self):
-        t = Table(self.data)
-        t2 = Table(t.columns['z', 'x', 'y'])
+    def test_init_from_columns(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data)
+        t2 = table_type(t.columns['z', 'x', 'y'])
         assert t2.colnames == ['z', 'x', 'y']
         assert t2._data.dtype.names == ('z', 'x', 'y')
 
-    def test_init_from_columns_slice(self):
-        t = Table(self.data)
-        t2 = Table(t.columns[0:2])
+    def test_init_from_columns_slice(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data)
+        t2 = table_type(t.columns[0:2])
         assert t2.colnames == ['x', 'y']
         assert t2._data.dtype.names == ('x', 'y')
 
-    def test_init_from_columns_mix(self):
-        t = Table(self.data)
-        t2 = Table([t.columns[0], t.columns['z']])
+    def test_init_from_columns_mix(self, table_type):
+        self._setup(table_type)
+        t = table_type(self.data)
+        t2 = table_type([t.columns[0], t.columns['z']])
         assert t2.colnames == ['x', 'z']
         assert t2._data.dtype.names == ('x', 'z')
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class TestInitFromNone():
     # Note table_table.TestEmptyData tests initializing a completely empty
     # table and adding data.
 
-    def test_data_none_with_cols(self):
-        t = Table(names=('a', 'b'))
+    def test_data_none_with_cols(self, table_type):
+        t = table_type(names=('a', 'b'))
         assert len(t['a']) == 0
         assert len(t['b']) == 0
         assert t.colnames == ['a', 'b']
-        t = Table(names=('a', 'b'), dtypes=('f4', 'i4'))
+        t = table_type(names=('a', 'b'), dtype=('f4', 'i4'))
         assert t['a'].dtype.type == np.float32
         assert t['b'].dtype.type == np.int32
         assert t.colnames == ['a', 'b']
diff --git a/astropy/table/tests/test_item_access.py b/astropy/table/tests/test_item_access.py
index e089bb5..281c476 100644
--- a/astropy/table/tests/test_item_access.py
+++ b/astropy/table/tests/test_item_access.py
@@ -8,14 +8,6 @@ import numpy as np
 from ...tests.helper import pytest
 from ... import table
 
-numpy_lt_1p5 = version.LooseVersion(np.__version__) < version.LooseVersion('1.5')
-
-# Dummy init of Table, DATA for pyflakes and to be sure test fixture is working
-Table = None
-Column = None
-DATA = None
-COLS = None
-
 
 class MaskedTable(table.Table):
     def __init__(self, *args, **kwargs):
@@ -25,35 +17,35 @@ class MaskedTable(table.Table):
 
 # Fixture to run all the Column tests for both an unmasked (ndarray)
 # and masked (MaskedArray) column.
- at pytest.fixture(params=[False] if numpy_lt_1p5 else [False, True])
-def set_global_Table_DATA(request):
-    global Table, Column, DATA, COLS
-
-    Table = MaskedTable if request.param else table.Table
-    Column = table.MaskedColumn if request.param else table.Column
-    COLS = [Column(name='a', data=[1, 2, 3], description='da',
-                   format='fa', meta={'ma': 1}, units='ua'),
-            Column(name='b', data=[4, 5, 6], description='db',
-                   format='fb', meta={'mb': 1}, units='ub'),
-            Column(name='c', data=[7, 8, 9], description='dc',
-                   format='fc', meta={'mc': 1}, units='ub')]
-    DATA = Table(COLS)
-
-
- at pytest.mark.usefixtures('set_global_Table_DATA')
+ at pytest.fixture(params=[False, True])
+def table_data(request):
+    class TableData:
+        def __init__(self, request):
+            self.Table = MaskedTable if request.param else table.Table
+            self.Column = table.MaskedColumn if request.param else table.Column
+            self.COLS = [
+                self.Column(name='a', data=[1, 2, 3], description='da',
+                            format='fa', meta={'ma': 1}, unit='ua'),
+                self.Column(name='b', data=[4, 5, 6], description='db',
+                            format='fb', meta={'mb': 1}, unit='ub'),
+                self.Column(name='c', data=[7, 8, 9], description='dc',
+                            format='fc', meta={'mc': 1}, unit='ub')]
+            self.DATA = self.Table(self.COLS)
+    return TableData(request)
+
+
+ at pytest.mark.usefixtures('table_data')
 class BaseTestItems():
-
-    def setup_method(self, method):
-        pass
+    pass
 
 
- at pytest.mark.usefixtures('set_global_Table_DATA')
+ at pytest.mark.usefixtures('table_data')
 class TestTableColumnsItems(BaseTestItems):
 
-    def test_by_name(self):
+    def test_by_name(self, table_data):
         """Access TableColumns by name and show that item access returns
         a Column that refers to underlying table data"""
-        self.t = Table(COLS)
+        self.t = table_data.Table(table_data.COLS)
         self.tc = self.t.columns
 
         assert self.tc['a'].name == 'a'
@@ -61,37 +53,37 @@ class TestTableColumnsItems(BaseTestItems):
         assert self.tc['a'].description == 'da'
         assert self.tc['a'].format == 'fa'
         assert self.tc['a'].meta == {'ma': 1}
-        assert self.tc['a'].units == 'ua'
-        assert self.tc['a'].attrs_equal(COLS[0])
-        assert isinstance(self.tc['a'], Column)
+        assert self.tc['a'].unit == 'ua'
+        assert self.tc['a'].attrs_equal(table_data.COLS[0])
+        assert isinstance(self.tc['a'], table_data.Column)
 
         self.tc['b'][1] = 0
         assert self.t['b'][1] == 0
 
-    def test_by_position(self):
+    def test_by_position(self, table_data):
         """Access TableColumns by position and show that item access returns
         a Column that refers to underlying table data"""
-        self.t = Table(COLS)
+        self.t = table_data.Table(table_data.COLS)
         self.tc = self.t.columns
 
         assert self.tc[1].name == 'b'
-        assert np.all(self.tc[1].data == COLS[1].data)
+        assert np.all(self.tc[1].data == table_data.COLS[1].data)
         assert self.tc[1].description == 'db'
         assert self.tc[1].format == 'fb'
         assert self.tc[1].meta == {'mb': 1}
-        assert self.tc[1].units == 'ub'
-        assert self.tc[1].attrs_equal(COLS[1])
-        assert isinstance(self.tc[1], Column)
+        assert self.tc[1].unit == 'ub'
+        assert self.tc[1].attrs_equal(table_data.COLS[1])
+        assert isinstance(self.tc[1], table_data.Column)
 
-        assert self.tc[2].units == 'ub'
+        assert self.tc[2].unit == 'ub'
 
         self.tc[1][1] = 0
         assert self.t['b'][1] == 0
 
-    def test_mult_columns(self):
+    def test_mult_columns(self, table_data):
         """Access TableColumns with "fancy indexing" and showed that returned
         TableColumns object still references original data"""
-        self.t = Table(COLS)
+        self.t = table_data.Table(table_data.COLS)
         self.tc = self.t.columns
 
         tc2 = self.tc['b', 'c']
@@ -104,10 +96,10 @@ class TestTableColumnsItems(BaseTestItems):
         assert self.tc['c'][1] == 0
         assert self.t['c'][1] == 0
 
-    def test_column_slice(self):
+    def test_column_slice(self, table_data):
         """Access TableColumns with slice and showed that returned
         TableColumns object still references original data"""
-        self.t = Table(COLS)
+        self.t = table_data.Table(table_data.COLS)
         self.tc = self.t.columns
 
         tc2 = self.tc[1:3]
@@ -121,12 +113,12 @@ class TestTableColumnsItems(BaseTestItems):
         assert self.t['c'][1] == 0
 
 
- at pytest.mark.usefixtures('set_global_Table_DATA')
+ at pytest.mark.usefixtures('table_data')
 class TestTableItems(BaseTestItems):
 
-    def test_column(self):
+    def test_column(self, table_data):
         """Column access returns REFERENCE to data"""
-        self.t = Table(COLS)
+        self.t = table_data.Table(table_data.COLS)
         self.tc = self.t.columns
 
         a = self.t['a']
@@ -134,111 +126,115 @@ class TestTableItems(BaseTestItems):
         a[1] = 0
         assert self.t['a'][1] == 0
 
-    def test_row(self):
+    def test_row(self, table_data):
         """Row  access returns REFERENCE to data"""
-        self.t = Table(COLS)
+        self.t = table_data.Table(table_data.COLS)
         self.tc = self.t.columns
 
         row = self.t[1]
         assert row['a'] == 2
         assert row[1] == 5
-        assert row.columns['a'].attrs_equal(COLS[0])
-        assert row.columns['b'].attrs_equal(COLS[1])
-        assert row.columns['c'].attrs_equal(COLS[2])
+        assert row.columns['a'].attrs_equal(table_data.COLS[0])
+        assert row.columns['b'].attrs_equal(table_data.COLS[1])
+        assert row.columns['c'].attrs_equal(table_data.COLS[2])
         row[1] = 0
         assert row[1] == 0
-        if Table is not MaskedTable:
+        if table_data.Table is not MaskedTable:
             # numpy.core.ma.mvoid makes a copy so this test is skipped for masked table
             assert self.t['b'][1] == 0
 
-    def test_table_slice(self):
+    def test_table_slice(self, table_data):
         """Table slice returns REFERENCE to data"""
-        self.t = Table(COLS)
+        self.t = table_data.Table(table_data.COLS)
         self.tc = self.t.columns
 
         t2 = self.t[1:3]
-        assert np.all(t2['a'] == DATA['a'][1:3])
-        assert t2['a'].attrs_equal(COLS[0])
-        assert t2['b'].attrs_equal(COLS[1])
-        assert t2['c'].attrs_equal(COLS[2])
+        assert np.all(t2['a'] == table_data.DATA['a'][1:3])
+        assert t2['a'].attrs_equal(table_data.COLS[0])
+        assert t2['b'].attrs_equal(table_data.COLS[1])
+        assert t2['c'].attrs_equal(table_data.COLS[2])
         t2['a'][0] = 0
         assert np.all(self.t['a'] == np.array([1, 0, 3]))
         assert t2.masked == self.t.masked
         assert t2._column_class == self.t._column_class
-        assert isinstance(t2, Table)
+        assert isinstance(t2, table_data.Table)
 
-    def test_fancy_index_slice(self):
+    def test_fancy_index_slice(self, table_data):
         """Table fancy slice returns COPY of data"""
-        self.t = Table(COLS)
+        self.t = table_data.Table(table_data.COLS)
         self.tc = self.t.columns
 
         slice = np.array([0, 2])
         t2 = self.t[slice]
-        assert np.all(t2['a'] == DATA['a'][slice])
-        assert t2['a'].attrs_equal(COLS[0])
-        assert t2['b'].attrs_equal(COLS[1])
-        assert t2['c'].attrs_equal(COLS[2])
+        assert np.all(t2['a'] == table_data.DATA['a'][slice])
+        assert t2['a'].attrs_equal(table_data.COLS[0])
+        assert t2['b'].attrs_equal(table_data.COLS[1])
+        assert t2['c'].attrs_equal(table_data.COLS[2])
         t2['a'][0] = 0
-        assert np.all(self.t._data == DATA)
-        assert np.any(t2['a'] != DATA['a'][slice])
+
+        assert np.all(self.t._data == table_data.DATA)
+        assert np.any(t2['a'] != table_data.DATA['a'][slice])
         assert t2.masked == self.t.masked
         assert t2._column_class == self.t._column_class
-        assert isinstance(t2, Table)
+        assert isinstance(t2, table_data.Table)
 
-    def test_list_index_slice(self):
+    def test_list_index_slice(self, table_data):
         """Table list index slice returns COPY of data"""
-        self.t = Table(COLS)
+        self.t = table_data.Table(table_data.COLS)
         self.tc = self.t.columns
 
         slice = [0, 2]
         t2 = self.t[slice]
-        assert np.all(t2['a'] == DATA['a'][slice])
-        assert t2['a'].attrs_equal(COLS[0])
-        assert t2['b'].attrs_equal(COLS[1])
-        assert t2['c'].attrs_equal(COLS[2])
+        assert np.all(t2['a'] == table_data.DATA['a'][slice])
+        assert t2['a'].attrs_equal(table_data.COLS[0])
+        assert t2['b'].attrs_equal(table_data.COLS[1])
+        assert t2['c'].attrs_equal(table_data.COLS[2])
         t2['a'][0] = 0
-        assert np.all(self.t._data == DATA)
-        assert np.any(t2['a'] != DATA['a'][slice])
+
+        assert np.all(self.t._data == table_data.DATA)
+        assert np.any(t2['a'] != table_data.DATA['a'][slice])
         assert t2.masked == self.t.masked
         assert t2._column_class == self.t._column_class
-        assert isinstance(t2, Table)
+        assert isinstance(t2, table_data.Table)
 
-    def test_select_columns(self):
+    def test_select_columns(self, table_data):
         """Select columns returns COPY of data and all column
         attributes"""
-        self.t = Table(COLS)
+        self.t = table_data.Table(table_data.COLS)
         self.tc = self.t.columns
 
-        t2 = self.t['a', 'c']
-        assert np.all(t2['a'] == DATA['a'])
-        assert np.all(t2['c'] == DATA['c'])
-        assert t2['a'].attrs_equal(COLS[0])
-        assert t2['c'].attrs_equal(COLS[2])
-        t2['a'][0] = 0
-        assert np.all(self.t._data == DATA)
-        assert np.any(t2['a'] != DATA['a'])
-        assert t2.masked == self.t.masked
-        assert t2._column_class == self.t._column_class
-
-    def test_np_where(self):
+        # try both lists and tuples
+        for columns in (('a', 'c'), ['a', 'c']):
+            t2 = self.t[columns]
+            assert np.all(t2['a'] == table_data.DATA['a'])
+            assert np.all(t2['c'] == table_data.DATA['c'])
+            assert t2['a'].attrs_equal(table_data.COLS[0])
+            assert t2['c'].attrs_equal(table_data.COLS[2])
+            t2['a'][0] = 0
+            assert np.all(self.t._data == table_data.DATA)
+            assert np.any(t2['a'] != table_data.DATA['a'])
+            assert t2.masked == self.t.masked
+            assert t2._column_class == self.t._column_class
+
+    def test_np_where(self, table_data):
         """Select rows using output of np.where"""
-        t = Table(COLS)
+        t = table_data.Table(table_data.COLS)
         # Select last two rows
         rows = np.where(t['a'] > 1.5)
         t2 = t[rows]
         assert np.all(t2['a'] == [2, 3])
         assert np.all(t2['b'] == [5, 6])
-        assert isinstance(t2, Table)
+        assert isinstance(t2, table_data.Table)
 
         # Select no rows
         rows = np.where(t['a'] > 100)
         t2 = t[rows]
         assert len(t2) == 0
-        assert isinstance(t2, Table)
+        assert isinstance(t2, table_data.Table)
 
-    def test_select_bad_column(self):
+    def test_select_bad_column(self, table_data):
         """Select column name that does not exist"""
-        self.t = Table(COLS)
+        self.t = table_data.Table(table_data.COLS)
         self.tc = self.t.columns
 
         with pytest.raises(ValueError):
diff --git a/astropy/table/tests/test_masked.py b/astropy/table/tests/test_masked.py
index 545280e..ea0f038 100644
--- a/astropy/table/tests/test_masked.py
+++ b/astropy/table/tests/test_masked.py
@@ -8,8 +8,6 @@ import numpy.ma as ma
 from ...tests.helper import pytest
 from ...table import Column, MaskedColumn, Table
 
-numpy_lt_1p5 = version.LooseVersion(np.__version__) < version.LooseVersion('1.5')
-
 class SubclassTable(Table):
     pass
 
@@ -28,13 +26,11 @@ class SetupData(object):
         self.ca = Column(name='ca', data=[1, 2, 3])
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 class TestPprint(SetupData):
     def test_pformat(self):
         assert self.t.pformat() == [' a   b ', '--- ---', '  1  --', '  2  --', '  3  --']
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 class TestFilled(object):
     """Test the filled method in MaskedColumn and Table"""
     def setup_method(self, method):
@@ -102,7 +98,6 @@ class TestFilled(object):
         assert t['a'][1] == 2
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 class TestFillValue(SetupData):
     """Test setting and getting fill value in MaskedColumn and Table"""
 
@@ -146,15 +141,14 @@ class TestFillValue(SetupData):
         assert np.all(self.t['b'].data.mask == [True, False, True])
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 class TestMaskedColumnInit(SetupData):
     """Initialization of a masked column"""
 
     def test_set_mask_and_not_ref(self):
         """Check that mask gets set properly and that it is a copy, not ref"""
-        assert np.all(self.a.mask == False)
-        assert np.all(self.b.mask == True)
-        assert np.all(self.c.mask == False)
+        assert np.all(~self.a.mask)
+        assert np.all(self.b.mask)
+        assert np.all(~self.c.mask)
         assert np.all(self.d.mask == self.d_mask)
         self.d.mask[0] = True
         assert not np.all(self.d.mask == self.d_mask)
@@ -178,7 +172,6 @@ class TestMaskedColumnInit(SetupData):
         assert np.all(b.mask == mask_list + mask_list)
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 class TestTableInit(SetupData):
     """Initializing a table"""
 
@@ -202,49 +195,52 @@ class TestTableInit(SetupData):
         # Non-masked table returns None for mask attribute
         t2 = Table([self.ca], masked=False)
         assert t2.mask is None
+        # Set mask property globally and verify local correctness
+        for mask in (True, False):
+            t.mask = mask
+            for name in ('a', 'b'):
+                assert np.all(t[name].mask == mask)
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 class TestAddColumn(object):
 
     def test_add_masked_column_to_masked_table(self):
         t = Table(masked=True)
         assert t.masked
-        t.add_column(MaskedColumn(name='a', data=[1,2,3], mask=[0,1,0]))
+        t.add_column(MaskedColumn(name='a', data=[1, 2, 3], mask=[0, 1, 0]))
         assert t.masked
-        t.add_column(MaskedColumn(name='b', data=[4,5,6], mask=[1,0,1]))
+        t.add_column(MaskedColumn(name='b', data=[4, 5, 6], mask=[1, 0, 1]))
         assert t.masked
-        assert np.all(t['a'] == np.array([1,2,3]))
-        assert np.all(t['a'].mask == np.array([0,1,0], bool))
-        assert np.all(t['b'] == np.array([4,5,6]))
-        assert np.all(t['b'].mask == np.array([1,0,1], bool))
+        assert np.all(t['a'] == np.array([1, 2, 3]))
+        assert np.all(t['a'].mask == np.array([0, 1, 0], bool))
+        assert np.all(t['b'] == np.array([4, 5, 6]))
+        assert np.all(t['b'].mask == np.array([1, 0, 1], bool))
 
     def test_add_masked_column_to_non_masked_table(self):
         t = Table(masked=False)
         assert not t.masked
-        t.add_column(Column(name='a', data=[1,2,3]))
+        t.add_column(Column(name='a', data=[1, 2, 3]))
         assert not t.masked
-        t.add_column(MaskedColumn(name='b', data=[4,5,6], mask=[1,0,1]))
+        t.add_column(MaskedColumn(name='b', data=[4, 5, 6], mask=[1, 0, 1]))
         assert t.masked
-        assert np.all(t['a'] == np.array([1,2,3]))
-        assert np.all(t['a'].mask == np.array([0,0,0], bool))
-        assert np.all(t['b'] == np.array([4,5,6]))
-        assert np.all(t['b'].mask == np.array([1,0,1], bool))
+        assert np.all(t['a'] == np.array([1, 2, 3]))
+        assert np.all(t['a'].mask == np.array([0, 0, 0], bool))
+        assert np.all(t['b'] == np.array([4, 5, 6]))
+        assert np.all(t['b'].mask == np.array([1, 0, 1], bool))
 
     def test_add_non_masked_column_to_masked_table(self):
         t = Table(masked=True)
         assert t.masked
-        t.add_column(Column(name='a', data=[1,2,3]))
+        t.add_column(Column(name='a', data=[1, 2, 3]))
         assert t.masked
-        t.add_column(MaskedColumn(name='b', data=[4,5,6], mask=[1,0,1]))
+        t.add_column(MaskedColumn(name='b', data=[4, 5, 6], mask=[1, 0, 1]))
         assert t.masked
-        assert np.all(t['a'] == np.array([1,2,3]))
-        assert np.all(t['a'].mask == np.array([0,0,0], bool))
-        assert np.all(t['b'] == np.array([4,5,6]))
-        assert np.all(t['b'].mask == np.array([1,0,1], bool))
+        assert np.all(t['a'] == np.array([1, 2, 3]))
+        assert np.all(t['a'].mask == np.array([0, 0, 0], bool))
+        assert np.all(t['b'] == np.array([4, 5, 6]))
+        assert np.all(t['b'].mask == np.array([1, 0, 1], bool))
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 class TestRenameColumn(object):
 
     def test_rename_masked_column(self):
@@ -258,7 +254,6 @@ class TestRenameColumn(object):
         assert t['b'].fill_value == 42
         assert t.colnames == ['b']
 
- at pytest.mark.xfail('numpy_lt_1p5')
 class TestRemoveColumn(object):
 
     def test_remove_masked_column(self):
@@ -274,32 +269,31 @@ class TestRemoveColumn(object):
         assert t.colnames == ['a']
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 class TestAddRow(object):
 
     def test_add_masked_row_to_masked_table_iterable(self):
         t = Table(masked=True)
         t.add_column(MaskedColumn(name='a', data=[1], mask=[0]))
         t.add_column(MaskedColumn(name='b', data=[4], mask=[1]))
-        t.add_row([2,5], mask=[1,0])
-        t.add_row([3,6], mask=[0,1])
+        t.add_row([2, 5], mask=[1, 0])
+        t.add_row([3, 6], mask=[0, 1])
         assert t.masked
-        assert np.all(np.array(t['a']) == np.array([1,2,3]))
-        assert np.all(t['a'].mask == np.array([0,1,0], bool))
-        assert np.all(np.array(t['b']) == np.array([4,5,6]))
-        assert np.all(t['b'].mask == np.array([1,0,1], bool))
+        assert np.all(np.array(t['a']) == np.array([1, 2, 3]))
+        assert np.all(t['a'].mask == np.array([0, 1, 0], bool))
+        assert np.all(np.array(t['b']) == np.array([4, 5, 6]))
+        assert np.all(t['b'].mask == np.array([1, 0, 1], bool))
 
     def test_add_masked_row_to_masked_table_mapping1(self):
         t = Table(masked=True)
         t.add_column(MaskedColumn(name='a', data=[1], mask=[0]))
         t.add_column(MaskedColumn(name='b', data=[4], mask=[1]))
-        t.add_row({'b':5, 'a':2}, mask={'a':1, 'b':0})
-        t.add_row({'a':3, 'b':6}, mask={'b':1, 'a':0})
+        t.add_row({'b': 5, 'a': 2}, mask={'a': 1, 'b': 0})
+        t.add_row({'a': 3, 'b': 6}, mask={'b': 1, 'a': 0})
         assert t.masked
-        assert np.all(np.array(t['a']) == np.array([1,2,3]))
-        assert np.all(t['a'].mask == np.array([0,1,0], bool))
-        assert np.all(np.array(t['b']) == np.array([4,5,6]))
-        assert np.all(t['b'].mask == np.array([1,0,1], bool))
+        assert np.all(np.array(t['a']) == np.array([1, 2, 3]))
+        assert np.all(t['a'].mask == np.array([0, 1, 0], bool))
+        assert np.all(np.array(t['b']) == np.array([4, 5, 6]))
+        assert np.all(t['b'].mask == np.array([1, 0, 1], bool))
 
     def test_add_masked_row_to_masked_table_mapping2(self):
         # When adding values to a masked table, if the mask is specified as a
@@ -307,13 +301,13 @@ class TestAddRow(object):
         t = Table(masked=True)
         t.add_column(MaskedColumn(name='a', data=[1], mask=[0]))
         t.add_column(MaskedColumn(name='b', data=[4], mask=[1]))
-        t.add_row({'b':5}, mask={'b':0})
-        t.add_row({'a':3}, mask={'a':0})
+        t.add_row({'b': 5}, mask={'b': 0})
+        t.add_row({'a': 3}, mask={'a': 0})
         assert t.masked
         assert t['a'][0] == 1 and t['a'][2] == 3
-        assert np.all(t['a'].mask == np.array([0,1,0], bool))
+        assert np.all(t['a'].mask == np.array([0, 1, 0], bool))
         assert t['b'][1] == 5
-        assert np.all(t['b'].mask == np.array([1,0,1], bool))
+        assert np.all(t['b'].mask == np.array([1, 0, 1], bool))
 
     def test_add_masked_row_to_masked_table_mapping3(self):
         # When adding values to a masked table, if mask is not passed to
@@ -322,13 +316,13 @@ class TestAddRow(object):
         t = Table(masked=True)
         t.add_column(MaskedColumn(name='a', data=[1], mask=[0]))
         t.add_column(MaskedColumn(name='b', data=[4], mask=[1]))
-        t.add_row({'b':5})
-        t.add_row({'a':3})
+        t.add_row({'b': 5})
+        t.add_row({'a': 3})
         assert t.masked
         assert t['a'][0] == 1 and t['a'][2] == 3
-        assert np.all(t['a'].mask == np.array([0,1,0], bool))
+        assert np.all(t['a'].mask == np.array([0, 1, 0], bool))
         assert t['b'][1] == 5
-        assert np.all(t['b'].mask == np.array([1,0,1], bool))
+        assert np.all(t['b'].mask == np.array([1, 0, 1], bool))
 
     def test_add_masked_row_to_masked_table_mapping4(self):
         # When adding values to a masked table, if the mask is specified as a
@@ -337,7 +331,7 @@ class TestAddRow(object):
         t.add_column(MaskedColumn(name='a', data=[1], mask=[0]))
         t.add_column(MaskedColumn(name='b', data=[4], mask=[1]))
         with pytest.raises(ValueError) as exc:
-            t.add_row({'b':5}, mask={'a':True})
+            t.add_row({'b': 5}, mask={'a': True})
         assert exc.value.args[0] == 'keys in mask should match keys in vals'
 
     def test_add_masked_row_to_masked_table_mismatch(self):
@@ -345,10 +339,10 @@ class TestAddRow(object):
         t.add_column(MaskedColumn(name='a', data=[1], mask=[0]))
         t.add_column(MaskedColumn(name='b', data=[4], mask=[1]))
         with pytest.raises(TypeError) as exc:
-            t.add_row([2,5], mask={'a':1, 'b':0})
+            t.add_row([2, 5], mask={'a': 1, 'b': 0})
         assert exc.value.args[0] == "Mismatch between type of vals and mask"
         with pytest.raises(TypeError) as exc:
-            t.add_row({'b':5, 'a':2}, mask=[1,0])
+            t.add_row({'b': 5, 'a': 2}, mask=[1, 0])
         assert exc.value.args[0] == "Mismatch between type of vals and mask"
 
     def test_add_masked_row_to_non_masked_table_iterable(self):
@@ -356,11 +350,11 @@ class TestAddRow(object):
         t.add_column(Column(name='a', data=[1]))
         t.add_column(Column(name='b', data=[4]))
         assert not t.masked
-        t.add_row([2,5])
+        t.add_row([2, 5])
         assert not t.masked
-        t.add_row([3,6], mask=[0,1])
+        t.add_row([3, 6], mask=[0, 1])
         assert t.masked
-        assert np.all(np.array(t['a']) == np.array([1,2,3]))
-        assert np.all(t['a'].mask == np.array([0,0,0], bool))
-        assert np.all(np.array(t['b']) == np.array([4,5,6]))
-        assert np.all(t['b'].mask == np.array([0,0,1], bool))
+        assert np.all(np.array(t['a']) == np.array([1, 2, 3]))
+        assert np.all(t['a'].mask == np.array([0, 0, 0], bool))
+        assert np.all(np.array(t['b']) == np.array([4, 5, 6]))
+        assert np.all(t['b'].mask == np.array([0, 0, 1], bool))
diff --git a/astropy/table/tests/test_np_utils.py b/astropy/table/tests/test_np_utils.py
new file mode 100644
index 0000000..858d367
--- /dev/null
+++ b/astropy/table/tests/test_np_utils.py
@@ -0,0 +1,46 @@
+import numpy as np
+
+from .. import np_utils
+
+
+def test_common_dtype():
+    """
+    Test that allowed combinations are those expected.
+    """
+    dtype = [('int', np.int),
+             ('uint8', np.uint8),
+             ('float32', np.float32),
+             ('float64', np.float64),
+             ('str', 'S2'),
+             ('uni', 'U2'),
+             ('bool', np.bool),
+             ('object', np.object_)]
+    arr = np.empty(1, dtype=dtype)
+    fail = set()
+    succeed = set()
+    for name1, type1 in dtype:
+        for name2, type2 in dtype:
+            try:
+                np_utils.common_dtype([arr[name1], arr[name2]])
+                succeed.add('{0} {1}'.format(name1, name2))
+            except np_utils.TableMergeError:
+                fail.add('{0} {1}'.format(name1, name2))
+
+    # known bad combinations
+    bad = set(['str int', 'str bool', 'uint8 bool', 'uint8 str', 'object float32',
+               'bool object', 'uni uint8', 'int str', 'bool str', 'bool float64',
+               'bool uni', 'str float32', 'uni float64', 'uni object', 'bool uint8',
+               'object float64', 'float32 bool', 'str uint8', 'uni bool', 'float64 bool',
+               'float64 object', 'int bool', 'uni int', 'uint8 object', 'int uni', 'uint8 uni',
+               'float32 uni', 'object uni', 'bool float32', 'uni float32', 'object str',
+               'int object', 'str float64', 'object int', 'float64 uni', 'bool int',
+               'object bool', 'object uint8', 'float32 object', 'str object', 'float64 str',
+               'float32 str'])
+    assert fail == bad
+
+    good = set(['float64 int', 'int int', 'uint8 float64', 'uint8 int', 'str uni',
+                'float32 float32', 'float64 float64', 'float64 uint8', 'float64 float32',
+                'int uint8', 'int float32', 'uni str', 'int float64', 'uint8 float32',
+                'float32 int', 'float32 uint8', 'bool bool', 'uint8 uint8', 'str str',
+                'float32 float64', 'object object', 'uni uni'])
+    assert succeed == good
diff --git a/astropy/table/tests/test_operations.py b/astropy/table/tests/test_operations.py
new file mode 100644
index 0000000..722c368
--- /dev/null
+++ b/astropy/table/tests/test_operations.py
@@ -0,0 +1,729 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+from distutils import version
+import warnings
+
+import numpy as np
+
+from ...tests.helper import pytest, catch_warnings
+from ...table import Table
+from ...utils import OrderedDict, metadata
+from ...utils.metadata import MergeConflictError
+from .. import np_utils
+from ... import table
+from ... import log
+
+def sort_eq(list1, list2):
+    return sorted(list1) == sorted(list2)
+
+
+class TestJoin():
+
+    def setup_method(self, method):
+        lines1 = [' a   b   c ',
+                  '  0 foo  L1',
+                  '  1 foo  L2',
+                  '  1 bar  L3',
+                  '  2 bar  L4']
+        lines2 = [' a   b   d ',
+                  '  1 foo  R1',
+                  '  1 foo  R2',
+                  '  2 bar  R3',
+                  '  4 bar  R4']
+        self.t1 = Table.read(lines1, format='ascii')
+        self.t2 = Table.read(lines2, format='ascii')
+        self.t3 = Table(self.t2, copy=True)
+
+        self.t1.meta.update(OrderedDict([('b', [1, 2]), ('c', {'a': 1}), ('d', 1)]))
+        self.t2.meta.update(OrderedDict([('b', [3, 4]), ('c', {'b': 1}), ('a', 1)]))
+        self.t3.meta.update(OrderedDict([('b', 3), ('c', [1, 2]), ('d', 2), ('a', 1)]))
+
+        self.meta_merge = OrderedDict([('b', [1, 2, 3, 4]),
+                                       ('c', {'a': 1, 'b': 1}),
+                                       ('d', 1),
+                                       ('a', 1)])
+
+    def test_table_meta_merge(self):
+        out = table.join(self.t1, self.t2, join_type='inner')
+        assert out.meta == self.meta_merge
+
+    def test_table_meta_merge_conflict(self):
+
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter("always")
+            out = table.join(self.t1, self.t3, join_type='inner')
+        assert len(w) == 3
+
+        assert out.meta == self.t3.meta
+
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter("always")
+            out = table.join(self.t1, self.t3, join_type='inner', metadata_conflicts='warn')
+        assert len(w) == 3
+
+        assert out.meta == self.t3.meta
+
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter("always")
+            out = table.join(self.t1, self.t3, join_type='inner', metadata_conflicts='silent')
+        assert len(w) == 0
+
+        assert out.meta == self.t3.meta
+
+        with pytest.raises(MergeConflictError):
+            out = table.join(self.t1, self.t3, join_type='inner', metadata_conflicts='error')
+
+        with pytest.raises(ValueError):
+            out = table.join(self.t1, self.t3, join_type='inner', metadata_conflicts='nonsense')
+
+    def test_both_unmasked_inner(self):
+        t1 = self.t1
+        t2 = self.t2
+
+        # Basic join with default parameters (inner join on common keys)
+        t12 = table.join(t1, t2)
+        assert t12.masked is False
+        assert sort_eq(t12.pformat(), [' a   b   c   d ',
+                                       '--- --- --- ---',
+                                       '  1 foo  L2  R1',
+                                       '  1 foo  L2  R2',
+                                       '  2 bar  L4  R3'])
+
+        # Table meta merged properly
+        assert t12.meta == self.meta_merge
+
+    def test_both_unmasked_left_right_outer(self):
+        t1 = self.t1
+        t2 = self.t2
+
+        # Left join
+        t12 = table.join(t1, t2, join_type='left')
+        assert t12.masked is True
+        assert sort_eq(t12.pformat(), [' a   b   c   d ',
+                                       '--- --- --- ---',
+                                       '  0 foo  L1  --',
+                                       '  1 bar  L3  --',
+                                       '  1 foo  L2  R1',
+                                       '  1 foo  L2  R2',
+                                       '  2 bar  L4  R3'])
+
+        # Right join
+        t12 = table.join(t1, t2, join_type='right')
+        assert t12.masked is True
+        assert sort_eq(t12.pformat(), [' a   b   c   d ',
+                                       '--- --- --- ---',
+                                       '  1 foo  L2  R1',
+                                       '  1 foo  L2  R2',
+                                       '  2 bar  L4  R3',
+                                       '  4 bar  --  R4'])
+
+        # Outer join
+        t12 = table.join(t1, t2, join_type='outer')
+        assert t12.masked is True
+        assert sort_eq(t12.pformat(), [' a   b   c   d ',
+                                       '--- --- --- ---',
+                                       '  0 foo  L1  --',
+                                       '  1 bar  L3  --',
+                                       '  1 foo  L2  R1',
+                                       '  1 foo  L2  R2',
+                                       '  2 bar  L4  R3',
+                                       '  4 bar  --  R4'])
+
+        # Check that the common keys are 'a', 'b'
+        t12a = table.join(t1, t2, join_type='outer')
+        t12b = table.join(t1, t2, join_type='outer', keys=['a', 'b'])
+        assert np.all(t12a._data == t12b._data)
+
+    def test_both_unmasked_single_key_inner(self):
+        t1 = self.t1
+        t2 = self.t2
+
+        # Inner join on 'a' column
+        t12 = table.join(t1, t2, keys='a')
+        assert t12.masked is False
+        assert sort_eq(t12.pformat(), [' a  b_1  c  b_2  d ',
+                                       '--- --- --- --- ---',
+                                       '  1 foo  L2 foo  R1',
+                                       '  1 foo  L2 foo  R2',
+                                       '  1 bar  L3 foo  R1',
+                                       '  1 bar  L3 foo  R2',
+                                       '  2 bar  L4 bar  R3'])
+
+    def test_both_unmasked_single_key_left_right_outer(self):
+        t1 = self.t1
+        t2 = self.t2
+
+        # Left join
+        t12 = table.join(t1, t2, join_type='left', keys='a')
+        assert t12.masked is True
+        assert sort_eq(t12.pformat(), [' a  b_1  c  b_2  d ',
+                                       '--- --- --- --- ---',
+                                       '  0 foo  L1  --  --',
+                                       '  1 foo  L2 foo  R1',
+                                       '  1 foo  L2 foo  R2',
+                                       '  1 bar  L3 foo  R1',
+                                       '  1 bar  L3 foo  R2',
+                                       '  2 bar  L4 bar  R3'])
+
+        # Right join
+        t12 = table.join(t1, t2, join_type='right', keys='a')
+        assert t12.masked is True
+        assert sort_eq(t12.pformat(), [' a  b_1  c  b_2  d ',
+                                       '--- --- --- --- ---',
+                                       '  1 foo  L2 foo  R1',
+                                       '  1 foo  L2 foo  R2',
+                                       '  1 bar  L3 foo  R1',
+                                       '  1 bar  L3 foo  R2',
+                                       '  2 bar  L4 bar  R3',
+                                       '  4  --  -- bar  R4'])
+
+        # Outer join
+        t12 = table.join(t1, t2, join_type='outer', keys='a')
+        assert t12.masked is True
+        assert sort_eq(t12.pformat(), [' a  b_1  c  b_2  d ',
+                                       '--- --- --- --- ---',
+                                       '  0 foo  L1  --  --',
+                                       '  1 foo  L2 foo  R1',
+                                       '  1 foo  L2 foo  R2',
+                                       '  1 bar  L3 foo  R1',
+                                       '  1 bar  L3 foo  R2',
+                                       '  2 bar  L4 bar  R3',
+                                       '  4  --  -- bar  R4'])
+
+    def test_masked_unmasked(self):
+        t1 = self.t1
+        t1m = Table(self.t1, masked=True)
+        t2 = self.t2
+
+        # Result should be masked even though not req'd by inner join
+        t1m2 = table.join(t1m, t2, join_type='inner')
+        assert t1m2.masked is True
+
+        # Result should match non-masked result
+        t12 = table.join(t1, t2)
+        assert np.all(t12._data == np.array(t1m2._data))
+
+        # Mask out some values in left table and make sure they propagate
+        t1m['b'].mask[1] = True
+        t1m['c'].mask[2] = True
+        t1m2 = table.join(t1m, t2, join_type='inner', keys='a')
+        assert sort_eq(t1m2.pformat(), [' a  b_1  c  b_2  d ',
+                                        '--- --- --- --- ---',
+                                        '  1  --  L2 foo  R1',
+                                        '  1  --  L2 foo  R2',
+                                        '  1 bar  -- foo  R1',
+                                        '  1 bar  -- foo  R2',
+                                        '  2 bar  L4 bar  R3'])
+
+        t21m = table.join(t2, t1m, join_type='inner', keys='a')
+        assert sort_eq(t21m.pformat(), [' a  b_1  d  b_2  c ',
+                                        '--- --- --- --- ---',
+                                        '  1 foo  R2  --  L2',
+                                        '  1 foo  R2 bar  --',
+                                        '  1 foo  R1  --  L2',
+                                        '  1 foo  R1 bar  --',
+                                        '  2 bar  R3 bar  L4'])
+
+    def test_masked_masked(self):
+        """Two masked tables"""
+        t1 = self.t1
+        t1m = Table(self.t1, masked=True)
+        t2 = self.t2
+        t2m = Table(self.t2, masked=True)
+
+        # Result should be masked even though not req'd by inner join
+        t1m2m = table.join(t1m, t2m, join_type='inner')
+        assert t1m2m.masked is True
+
+        # Result should match non-masked result
+        t12 = table.join(t1, t2)
+        assert np.all(t12._data == np.array(t1m2m._data))
+
+        # Mask out some values in both tables and make sure they propagate
+        t1m['b'].mask[1] = True
+        t1m['c'].mask[2] = True
+        t2m['d'].mask[2] = True
+        t1m2m = table.join(t1m, t2m, join_type='inner', keys='a')
+        assert sort_eq(t1m2m.pformat(), [' a  b_1  c  b_2  d ',
+                                         '--- --- --- --- ---',
+                                         '  1  --  L2 foo  R1',
+                                         '  1  --  L2 foo  R2',
+                                         '  1 bar  -- foo  R1',
+                                         '  1 bar  -- foo  R2',
+                                         '  2 bar  L4 bar  --'])
+
+    def test_col_rename(self):
+        """
+        Test auto col renaming when there is a conflict.  Use
+        non-default values of uniq_col_name and table_names.
+        """
+        t1 = self.t1
+        t2 = self.t2
+        t12 = table.join(t1, t2, uniq_col_name='x_{table_name}_{col_name}_y',
+                         table_names=['L', 'R'], keys='a')
+        assert t12.colnames == ['a', 'x_L_b_y', 'c', 'x_R_b_y', 'd']
+
+    def test_rename_conflict(self):
+        """
+        Test that auto-column rename fails because of a conflict
+        with an existing column
+        """
+        t1 = self.t1
+        t2 = self.t2
+        t1['b_1'] = 1  # Add a new column b_1 that will conflict with auto-rename
+        with pytest.raises(np_utils.TableMergeError):
+            table.join(t1, t2, keys='a')
+
+    def test_missing_keys(self):
+        """Merge on a key column that doesn't exist"""
+        t1 = self.t1
+        t2 = self.t2
+        with pytest.raises(np_utils.TableMergeError):
+            table.join(t1, t2, keys=['a', 'not there'])
+
+    def test_bad_join_type(self):
+        """Bad join_type input"""
+        t1 = self.t1
+        t2 = self.t2
+        with pytest.raises(ValueError):
+            table.join(t1, t2, join_type='illegal value')
+
+    def test_no_common_keys(self):
+        """Merge tables with no common keys"""
+        t1 = self.t1
+        t2 = self.t2
+        del t1['a']
+        del t1['b']
+        del t2['a']
+        del t2['b']
+        with pytest.raises(np_utils.TableMergeError):
+            table.join(t1, t2)
+
+    def test_masked_key_column(self):
+        """Merge on a key column that has a masked element"""
+        t1 = self.t1
+        t2 = Table(self.t2, masked=True)
+        table.join(t1, t2)  # OK
+        t2['a'].mask[0] = True
+        with pytest.raises(np_utils.TableMergeError):
+            table.join(t1, t2)
+
+    def test_col_meta_merge(self):
+        t1 = self.t1
+        t2 = self.t2
+        t2.rename_column('d', 'c')  # force col conflict and renaming
+        meta1 = OrderedDict([('b', [1, 2]), ('c', {'a': 1}), ('d', 1)])
+        meta2 = OrderedDict([('b', [3, 4]), ('c', {'b': 1}), ('a', 1)])
+
+        # Key col 'a', should first value ('cm')
+        t1['a'].unit = 'cm'
+        t2['a'].unit = 'm'
+        # Key col 'b', take first value 't1_b'
+        t1['b'].description = 't1_b'
+        # Key col 'b', take first non-empty value 't1_b'
+        t2['b'].format = '%6s'
+        # Key col 'a', should be merged meta
+        t1['a'].meta = meta1
+        t2['a'].meta = meta2
+        # Key col 'b', should be meta2
+        t2['b'].meta = meta2
+
+        # All these should pass through
+        t1['c'].unit = 'cm'
+        t1['c'].format = '%3s'
+        t1['c'].description = 't1_c'
+
+        t2['c'].unit = 'm'
+        t2['c'].format = '%6s'
+        t2['c'].description = 't2_c'
+
+        with catch_warnings(metadata.MergeConflictWarning) as warning_lines:
+            t12 = table.join(t1, t2, keys=['a', 'b'])
+
+            assert t12['a'].unit == 'm'
+            assert t12['b'].description == 't1_b'
+            assert t12['b'].format == '%6s'
+            assert t12['a'].meta == self.meta_merge
+            assert t12['b'].meta == meta2
+            assert t12['c_1'].unit == 'cm'
+            assert t12['c_1'].format == '%3s'
+            assert t12['c_1'].description == 't1_c'
+            assert t12['c_2'].unit == 'm'
+            assert t12['c_2'].format == '%6s'
+            assert t12['c_2'].description == 't2_c'
+
+            assert warning_lines[0].category == metadata.MergeConflictWarning
+            assert ("In merged column 'a' the 'unit' attribute does not match (cm != m)"
+                    in str(warning_lines[0].message))
+
+
+class TestVStack():
+
+    def setup_method(self, method):
+
+        self.t1 = Table.read([' a   b',
+                              ' 0 foo',
+                              ' 1 bar'], format='ascii')
+
+        self.t2 = Table.read([' a   b   c',
+                              ' 2  pez  4',
+                              ' 3  sez  5'], format='ascii')
+
+        self.t3 = Table.read([' a   b',
+                              ' 4   7',
+                              ' 5   8',
+                              ' 6   9'], format='ascii')
+        self.t4 = Table(self.t1, copy=True, masked=True)
+
+        # The following table has meta-data that conflicts with t1
+        self.t5 = Table(self.t1, copy=True)
+
+        self.t1.meta.update(OrderedDict([('b', [1, 2]), ('c', {'a': 1}), ('d', 1)]))
+        self.t2.meta.update(OrderedDict([('b', [3, 4]), ('c', {'b': 1}), ('a', 1)]))
+        self.t4.meta.update(OrderedDict([('b', [5, 6]), ('c', {'c': 1}), ('e', 1)]))
+        self.t5.meta.update(OrderedDict([('b', 3), ('c', 'k'), ('d', 1)]))
+        self.meta_merge = OrderedDict([('b', [1, 2, 3, 4, 5, 6]),
+                                       ('c', {'a': 1, 'b': 1, 'c': 1}),
+                                       ('d', 1),
+                                       ('a', 1),
+                                       ('e', 1)])
+
+    def test_stack_rows(self):
+        t2 = self.t1.copy()
+        t2.meta.clear()
+        out = table.vstack([self.t1, t2[1]])
+        assert out.pformat() == [' a   b ',
+                                 '--- ---',
+                                 '  0 foo',
+                                 '  1 bar',
+                                 '  1 bar']
+
+    def test_table_meta_merge(self):
+        out = table.vstack([self.t1, self.t2, self.t4], join_type='inner')
+        assert out.meta == self.meta_merge
+
+    def test_table_meta_merge_conflict(self):
+
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter("always")
+            out = table.vstack([self.t1, self.t5], join_type='inner')
+        assert len(w) == 2
+
+        assert out.meta == self.t5.meta
+
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter("always")
+            out = table.vstack([self.t1, self.t5], join_type='inner', metadata_conflicts='warn')
+        assert len(w) == 2
+
+        assert out.meta == self.t5.meta
+
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter("always")
+            out = table.vstack([self.t1, self.t5], join_type='inner', metadata_conflicts='silent')
+        assert len(w) == 0
+
+        assert out.meta == self.t5.meta
+
+        with pytest.raises(MergeConflictError):
+            out = table.vstack([self.t1, self.t5], join_type='inner', metadata_conflicts='error')
+
+        with pytest.raises(ValueError):
+            out = table.vstack([self.t1, self.t5], join_type='inner', metadata_conflicts='nonsense')
+
+
+    def test_bad_input_type(self):
+        with pytest.raises(TypeError):
+            table.vstack(1)
+        with pytest.raises(TypeError):
+            table.vstack([self.t2, 1])
+        with pytest.raises(ValueError):
+            table.vstack([self.t1, self.t2], join_type='invalid join type')
+
+    def test_stack_basic(self):
+        t1 = self.t1
+        t2 = self.t2
+        t4 = self.t4
+
+        t12 = table.vstack([t1, t2], join_type='inner')
+        assert t12.masked is False
+        assert t12.pformat() == [' a   b ',
+                                 '--- ---',
+                                 '  0 foo',
+                                 '  1 bar',
+                                 '  2 pez',
+                                 '  3 sez']
+
+
+        t12 = table.vstack([t1, t2], join_type='outer')
+        assert t12.pformat() == [' a   b   c ',
+                                 '--- --- ---',
+                                 '  0 foo  --',
+                                 '  1 bar  --',
+                                 '  2 pez   4',
+                                 '  3 sez   5']
+
+        t124 = table.vstack([t1, t2, t4], join_type='outer')
+        assert t124.pformat() == [' a   b   c ',
+                                  '--- --- ---',
+                                  '  0 foo  --',
+                                  '  1 bar  --',
+                                  '  2 pez   4',
+                                  '  3 sez   5',
+                                  '  0 foo  --',
+                                  '  1 bar  --']
+
+        t124 = table.vstack([t1, t2, t4], join_type='inner')
+        assert t124.pformat() == [' a   b ',
+                                  '--- ---',
+                                  '  0 foo',
+                                  '  1 bar',
+                                  '  2 pez',
+                                  '  3 sez',
+                                  '  0 foo',
+                                  '  1 bar']
+
+    def test_stack_incompatible(self):
+        with pytest.raises(np_utils.TableMergeError):
+            table.vstack([self.t1, self.t3], join_type='inner')
+
+        with pytest.raises(np_utils.TableMergeError):
+            table.vstack([self.t1, self.t2], join_type='exact')
+
+    def test_vstack_one_masked(self):
+        t1 = self.t1
+        t4 = self.t4
+        t4['b'].mask[1] = True
+        assert table.vstack([t1, t4]).pformat() == [' a   b ',
+                                                    '--- ---',
+                                                    '  0 foo',
+                                                    '  1 bar',
+                                                    '  0 foo',
+                                                    '  1  --']
+
+    def test_col_meta_merge(self):
+        t1 = self.t1
+        t2 = self.t2
+        t4 = self.t4
+
+        # Key col 'a', should last value ('km')
+        t1['a'].unit = 'cm'
+        t2['a'].unit = 'm'
+        t4['a'].unit = 'km'
+
+        # Key col 'a' format should take last when all match
+        t1['a'].format = '%0d'
+        t2['a'].format = '%0d'
+        t4['a'].format = '%0d'
+
+        # Key col 'b', take first value 't1_b'
+        t1['b'].description = 't1_b'
+
+        # Key col 'b', take first non-empty value '%6s'
+        t4['b'].format = '%6s'
+
+        # Key col 'a', should be merged meta
+        t1['a'].meta.update(OrderedDict([('b', [1, 2]), ('c', {'a': 1}), ('d', 1)]))
+        t2['a'].meta.update(OrderedDict([('b', [3, 4]), ('c', {'b': 1}), ('a', 1)]))
+        t4['a'].meta.update(OrderedDict([('b', [5, 6]), ('c', {'c': 1}), ('e', 1)]))
+
+        # Key col 'b', should be meta2
+        t2['b'].meta.update(OrderedDict([('b', [3, 4]), ('c', {'b': 1}), ('a', 1)]))
+
+        # All these should pass through
+        t2['c'].unit = 'm'
+        t2['c'].format = '%6s'
+        t2['c'].description = 't2_c'
+
+        with catch_warnings(metadata.MergeConflictWarning) as warning_lines:
+            out = table.vstack([t1, t2, t4], join_type='outer')
+
+            assert out['a'].unit == 'km'
+            assert out['a'].format == '%0d'
+            assert out['b'].description == 't1_b'
+            assert out['b'].format == '%6s'
+            assert out['a'].meta == self.meta_merge
+            assert out['b'].meta == OrderedDict([('b', [3, 4]), ('c', {'b': 1}), ('a', 1)])
+            assert out['c'].unit == 'm'
+            assert out['c'].format == '%6s'
+            assert out['c'].description == 't2_c'
+
+            assert warning_lines[0].category == metadata.MergeConflictWarning
+            assert ("In merged column 'a' the 'unit' attribute does not match (cm != m)"
+                    in str(warning_lines[0].message))
+            assert warning_lines[1].category == metadata.MergeConflictWarning
+            assert ("In merged column 'a' the 'unit' attribute does not match (m != km)"
+                    in str(warning_lines[1].message))
+
+
+class TestHStack():
+
+    def setup_method(self, method):
+        self.t1 = Table.read([' a   b',
+                              ' 0 foo',
+                              ' 1 bar'], format='ascii')
+
+        self.t2 = Table.read([' a   b   c',
+                              ' 2  pez  4',
+                              ' 3  sez  5'], format='ascii')
+
+        self.t3 = Table.read([' d   e',
+                              ' 4   7',
+                              ' 5   8',
+                              ' 6   9'], format='ascii')
+        self.t4 = Table(self.t1, copy=True, masked=True)
+        self.t4['a'].name = 'f'
+        self.t4['b'].name = 'g'
+
+        # The following table has meta-data that conflicts with t1
+        self.t5 = Table(self.t1, copy=True)
+
+        self.t1.meta.update(OrderedDict([('b', [1, 2]), ('c', {'a': 1}), ('d', 1)]))
+        self.t2.meta.update(OrderedDict([('b', [3, 4]), ('c', {'b': 1}), ('a', 1)]))
+        self.t4.meta.update(OrderedDict([('b', [5, 6]), ('c', {'c': 1}), ('e', 1)]))
+        self.t5.meta.update(OrderedDict([('b', 3), ('c', 'k'), ('d', 1)]))
+        self.meta_merge = OrderedDict([('b', [1, 2, 3, 4, 5, 6]),
+                                       ('c', {'a': 1, 'b': 1, 'c': 1}),
+                                       ('d', 1),
+                                       ('a', 1),
+                                       ('e', 1)])
+
+    def test_stack_rows(self):
+        out = table.hstack([self.t1[0], self.t2[1]])
+        assert out.pformat() == ['a_1 b_1 a_2 b_2  c ',
+                                 '--- --- --- --- ---',
+                                 '  0 foo   3 sez   5']
+
+    def test_table_meta_merge(self):
+        out = table.hstack([self.t1, self.t2, self.t4], join_type='inner')
+        assert out.meta == self.meta_merge
+
+    def test_table_meta_merge_conflict(self):
+
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter("always")
+            out = table.hstack([self.t1, self.t5], join_type='inner')
+        assert len(w) == 2
+
+        assert out.meta == self.t5.meta
+
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter("always")
+            out = table.hstack([self.t1, self.t5], join_type='inner', metadata_conflicts='warn')
+        assert len(w) == 2
+
+        assert out.meta == self.t5.meta
+
+        with warnings.catch_warnings(record=True) as w:
+            warnings.simplefilter("always")
+            out = table.hstack([self.t1, self.t5], join_type='inner', metadata_conflicts='silent')
+        assert len(w) == 0
+
+        assert out.meta == self.t5.meta
+
+        with pytest.raises(MergeConflictError):
+            out = table.hstack([self.t1, self.t5], join_type='inner', metadata_conflicts='error')
+
+        with pytest.raises(ValueError):
+            out = table.hstack([self.t1, self.t5], join_type='inner', metadata_conflicts='nonsense')
+
+    def test_bad_input_type(self):
+        with pytest.raises(TypeError):
+            table.hstack(1)
+        with pytest.raises(TypeError):
+            table.hstack([self.t2, 1])
+        with pytest.raises(ValueError):
+            table.hstack([self.t1, self.t2], join_type='invalid join type')
+
+    def test_stack_basic(self):
+        t1 = self.t1
+        t2 = self.t2
+        t3 = self.t3
+        t4 = self.t4
+
+        out = table.hstack([t1, t2], join_type='inner')
+        assert out.masked is False
+        assert out.pformat() == ['a_1 b_1 a_2 b_2  c ',
+                                 '--- --- --- --- ---',
+                                 '  0 foo   2 pez   4',
+                                 '  1 bar   3 sez   5']
+
+        # stacking as a list gives same result
+        out_list = table.hstack([t1, t2], join_type='inner')
+        assert out.pformat() == out_list.pformat()
+
+        out = table.hstack([t1, t2], join_type='outer')
+        assert out.pformat() == out_list.pformat()
+
+        out = table.hstack([t1, t2, t3, t4], join_type='outer')
+        assert out.pformat() == ['a_1 b_1 a_2 b_2  c   d   e   f   g ',
+                                 '--- --- --- --- --- --- --- --- ---',
+                                 '  0 foo   2 pez   4   4   7   0 foo',
+                                 '  1 bar   3 sez   5   5   8   1 bar',
+                                 ' --  --  --  --  --   6   9  --  --']
+
+        out = table.hstack([t1, t2, t3, t4], join_type='inner')
+        assert out.pformat() == ['a_1 b_1 a_2 b_2  c   d   e   f   g ',
+                                 '--- --- --- --- --- --- --- --- ---',
+                                 '  0 foo   2 pez   4   4   7   0 foo',
+                                 '  1 bar   3 sez   5   5   8   1 bar']
+
+    def test_stack_incompatible(self):
+        # For join_type exact, which will fail here because n_rows
+        # does not match
+        with pytest.raises(np_utils.TableMergeError):
+            table.hstack([self.t1, self.t3], join_type='exact')
+
+    def test_hstack_one_masked(self):
+        t1 = self.t1
+        t2 = Table(t1, copy=True, masked=True)
+        t2.meta.clear()
+        t2['b'].mask[1] = True
+        assert table.hstack([t1, t2]).pformat() == ['a_1 b_1 a_2 b_2',
+                                                    '--- --- --- ---',
+                                                    '  0 foo   0 foo',
+                                                    '  1 bar   1  --']
+
+    def test_table_col_rename(self):
+        out = table.hstack([self.t1, self.t2], join_type='inner',
+                           uniq_col_name='{table_name}_{col_name}',
+                           table_names=('left', 'right'))
+        assert out.masked is False
+        assert out.pformat() == ['left_a left_b right_a right_b  c ',
+                                 '------ ------ ------- ------- ---',
+                                 '     0    foo       2     pez   4',
+                                 '     1    bar       3     sez   5']
+
+    def test_col_meta_merge(self):
+        t1 = self.t1
+        t3 = self.t3
+        t4 = self.t4
+
+        # Just set a bunch of meta and make sure it is the same in output
+        meta1 = OrderedDict([('b', [1, 2]), ('c', {'a': 1}), ('d', 1)])
+        t1['a'].unit = 'cm'
+        t1['b'].description = 't1_b'
+        t4['f'].format = '%6s'
+        t1['b'].meta.update(meta1)
+        t3['d'].meta.update(OrderedDict([('b', [3, 4]), ('c', {'b': 1}), ('a', 1)]))
+        t4['g'].meta.update(OrderedDict([('b', [5, 6]), ('c', {'c': 1}), ('e', 1)]))
+        t3['e'].meta.update(OrderedDict([('b', [3, 4]), ('c', {'b': 1}), ('a', 1)]))
+        t3['d'].unit = 'm'
+        t3['d'].format = '%6s'
+        t3['d'].description = 't3_c'
+
+        with catch_warnings(metadata.MergeConflictWarning) as warning_lines:
+            out = table.vstack([t1, t3, t4], join_type='outer')
+
+            for t in [t1, t3, t4]:
+                for name in t.colnames:
+                    for attr in ('meta', 'unit', 'format', 'description'):
+                        assert getattr(out[name], attr) == getattr(t[name], attr)
+
+            assert len(warning_lines) == 0
+
+            # Make sure we got a copy of meta, not ref
+            t1['b'].meta['b'] = None
+            assert out['b'].meta['b'] == [1, 2]
+
+
diff --git a/astropy/table/tests/test_pprint.py b/astropy/table/tests/test_pprint.py
index bc2cb8b..d912176 100644
--- a/astropy/table/tests/test_pprint.py
+++ b/astropy/table/tests/test_pprint.py
@@ -9,11 +9,6 @@ from ...table import pprint
 BIG_WIDE_ARR = np.arange(2000, dtype=np.float).reshape(100, 20)
 SMALL_ARR = np.arange(12, dtype=np.int).reshape(4, 3)
 
-numpy_lt_1p5 = version.LooseVersion(np.__version__) < version.LooseVersion('1.5')
-
-# Dummy init of Table for pyflakes and to be sure test fixture is working
-Table = None
-
 
 class MaskedTable(table.Table):
     def __init__(self, *args, **kwargs):
@@ -21,17 +16,22 @@ class MaskedTable(table.Table):
         table.Table.__init__(self, *args, **kwargs)
 
 
-# Fixture to run all tests for both an unmasked (ndarray) and masked (MaskedArray) column.
- at pytest.fixture(params=[False] if numpy_lt_1p5 else [False, True])
-def set_global_Table(request):
-    global Table
-    Table = MaskedTable if request.param else table.Table
+# Fixture to run all tests for both an unmasked (ndarray) and masked
+# (MaskedArray) column.
+ at pytest.fixture(params=[False, True])
+def table_type(request):
+    # return MaskedTable if request.param else table.Table
+    try:
+        request.param
+        return MaskedTable
+    except AttributeError:
+        return table.Table
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class TestMultiD():
 
-    def test_multidim(self):
+    def test_multidim(self, table_type):
         """Test printing with multidimensional column"""
         arr = [np.array([[1, 2],
                          [10, 20]]),
@@ -39,7 +39,7 @@ class TestMultiD():
                          [30, 40]]),
                np.array([[5, 6],
                          [50, 60]])]
-        t = Table(arr)
+        t = table_type(arr)
         lines = t.pformat()
         print lines
         assert lines == ['col0 [2] col1 [2] col2 [2]',
@@ -48,17 +48,17 @@ class TestMultiD():
                          '10 .. 20 30 .. 40 50 .. 60']
 
         lines = t.pformat(html=True)
-        assert lines == ['<table>',
-                         '<tr><th>col0 [2]</th><th>col1 [2]</th><th>col2 [2]</th></tr>',
+        assert lines == ['<table id="table{id}">'.format(id=id(t)),
+                         '<thead><tr><th>col0 [2]</th><th>col1 [2]</th><th>col2 [2]</th></tr></thead>',
                          '<tr><td>1 .. 2</td><td>3 .. 4</td><td>5 .. 6</td></tr>',
                          '<tr><td>10 .. 20</td><td>30 .. 40</td><td>50 .. 60</td></tr>',
                          '</table>']
-        assert t._repr_html_() == ('<table><tr><th>col0 [2]</th><th>col1 [2]</th><th>col2 [2]'
-                                   '</th></tr><tr><td>1 .. 2</td><td>3 .. 4</td><td>5 .. 6</td>'
+        assert t._repr_html_() == ('<table id="table{tid}"><thead><tr><th>col0 [2]</th><th>col1 [2]</th><th>col2 [2]'.format(tid=id(t)) +
+                                   '</th></tr></thead><tr><td>1 .. 2</td><td>3 .. 4</td><td>5 .. 6</td>'
                                    '</tr><tr><td>10 .. 20</td><td>30 .. 40</td><td>50 .. 60</td>'
                                    '</tr></table>')
 
-        t = Table([arr])
+        t = table_type([arr])
         lines = t.pformat()
         print lines
         assert lines == ['col0 [2,2]',
@@ -71,35 +71,38 @@ class TestMultiD():
 def test_html_escaping():
     t = table.Table([('<script>alert("gotcha");</script>', 2, 3)])
     assert t._repr_html_() == (
-        '<table><tr><th>col0</th></tr><tr>'
-        '<td><script>alert("gotcha");</script></td>'
+        '<table id="table{id}"><thead><tr><th>col0</th></tr></thead>'.format(id=id(t)) +
+        '<tr><td><script>alert("gotcha");</script></td>'
         '</tr><tr><td>2</td></tr><tr><td>3</td></tr></table>')
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class TestPprint():
 
-    def setup_method(self, method):
-        self.tb = Table(BIG_WIDE_ARR)
+    def _setup(self, table_type):
+        self.tb = table_type(BIG_WIDE_ARR)
         self.tb['col0'].format = '%e'
         self.tb['col1'].format = '%.6f'
-        self.tb['col0'].units = 'km**2'
-        self.tb['col19'].units = 'kg s m**-2'
-        self.ts = Table(SMALL_ARR)
 
-    def test_format0(self):
+        self.tb['col0'].unit = 'km**2'
+        self.tb['col19'].unit = 'kg s m**-2'
+        self.ts = table_type(SMALL_ARR)
+
+    def test_format0(self, table_type):
         """Try getting screen size but fail to defaults because testing doesn't
         have access to screen (fcntl.ioctl fails).
         """
+        self._setup(table_type)
         arr = np.arange(4000, dtype=np.float).reshape(100, 40)
-        lines = Table(arr).pformat()
+        lines = table_type(arr).pformat()
         assert len(lines) == pprint.MAX_LINES()
         for line in lines:
             assert (len(line) > pprint.MAX_WIDTH() - 10 and
                     len(line) <= pprint.MAX_WIDTH())
 
-    def test_format1(self):
+    def test_format1(self, table_type):
         """Basic test of formatting"""
+        self._setup(table_type)
         lines = self.tb.pformat(max_lines=8, max_width=40)
         assert lines == ['    col0         col1    ... col19 ',
                          '------------ ----------- ... ------',
@@ -110,21 +113,24 @@ class TestPprint():
                          '1.960000e+03 1961.000000 ... 1979.0',
                          '1.980000e+03 1981.000000 ... 1999.0']
 
-    def test_format2(self):
-        """Include the units header row"""
-        lines = self.tb.pformat(max_lines=8, max_width=40, show_units=True)
+    def test_format2(self, table_type):
+        """Include the unit header row"""
+        self._setup(table_type)
+        lines = self.tb.pformat(max_lines=8, max_width=40, show_unit=True)
+
         print(lines)
-        assert lines == ['    col0         col1    ...    col19   ',
-                         '    km2                  ... kg s / (m2)',
-                         '------------ ----------- ... -----------',
-                         '0.000000e+00    1.000000 ...        19.0',
-                         '2.000000e+01   21.000000 ...        39.0',
-                         '         ...         ... ...         ...',
-                         '1.960000e+03 1961.000000 ...      1979.0',
-                         '1.980000e+03 1981.000000 ...      1999.0']
-
-    def test_format3(self):
+        assert lines == ['    col0         col1    ...   col19  ',
+                         '    km2                  ... kg s / m2',
+                         '------------ ----------- ... ---------',
+                         '0.000000e+00    1.000000 ...      19.0',
+                         '2.000000e+01   21.000000 ...      39.0',
+                         '         ...         ... ...       ...',
+                         '1.960000e+03 1961.000000 ...    1979.0',
+                         '1.980000e+03 1981.000000 ...    1999.0']
+
+    def test_format3(self, table_type):
         """Do not include the name header row"""
+        self._setup(table_type)
         lines = self.tb.pformat(max_lines=8, max_width=40, show_name=False)
         assert lines == ['0.000000e+00    1.000000 ...   19.0',
                          '2.000000e+01   21.000000 ...   39.0',
@@ -135,8 +141,9 @@ class TestPprint():
                          '1.960000e+03 1961.000000 ... 1979.0',
                          '1.980000e+03 1981.000000 ... 1999.0']
 
-    def test_noclip(self):
+    def test_noclip(self, table_type):
         """Basic table print"""
+        self._setup(table_type)
         lines = self.ts.pformat(max_lines=-1, max_width=-1)
         assert lines == ['col0 col1 col2',
                          '---- ---- ----',
@@ -145,9 +152,10 @@ class TestPprint():
                          '   6    7    8',
                          '   9   10   11']
 
-    def test_clip1(self):
+    def test_clip1(self, table_type):
         """max lines below hard limit of 6
         """
+        self._setup(table_type)
         lines = self.ts.pformat(max_lines=3, max_width=-1)
         assert lines == ['col0 col1 col2',
                          '---- ---- ----',
@@ -156,10 +164,11 @@ class TestPprint():
                          '   6    7    8',
                          '   9   10   11']
 
-    def test_clip2(self):
+    def test_clip2(self, table_type):
         """max lines below hard limit of 6 and output longer than 6
         """
-        lines = self.ts.pformat(max_lines=3, max_width=-1, show_units=True)
+        self._setup(table_type)
+        lines = self.ts.pformat(max_lines=3, max_width=-1, show_unit=True)
         assert lines == ['col0 col1 col2',
                          '              ',
                          '---- ---- ----',
@@ -167,11 +176,12 @@ class TestPprint():
                          ' ...  ...  ...',
                          '   9   10   11']
 
-    def test_clip3(self):
+    def test_clip3(self, table_type):
         """Max lines below hard limit of 6 and max width below hard limit
         of 10
         """
-        lines = self.ts.pformat(max_lines=3, max_width=1, show_units=True)
+        self._setup(table_type)
+        lines = self.ts.pformat(max_lines=3, max_width=1, show_unit=True)
         assert lines == ['col0 ...',
                          '     ...',
                          '---- ...',
@@ -179,18 +189,19 @@ class TestPprint():
                          ' ... ...',
                          '   9 ...']
 
-    def test_clip4(self):
+    def test_clip4(self, table_type):
         """Test a range of max_lines"""
+        self._setup(table_type)
         for max_lines in range(130):
             lines = self.tb.pformat(max_lines=max_lines)
             assert len(lines) == max(6, min(102, max_lines))
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_type')
 class TestFormat():
 
-    def test_column_format(self):
-        t = Table([[1, 2], [3, 4]], names=('a', 'b'))
+    def test_column_format(self, table_type):
+        t = table_type([[1, 2], [3, 4]], names=('a', 'b'))
         # default (format=None)
         assert str(t['a']) == ' a \n---\n  1\n  2'
 
@@ -215,13 +226,55 @@ class TestFormat():
         with pytest.raises(ValueError):
             str(t['a'])
 
-    def test_column_format_with_threshold(self):
+    def test_column_format_with_threshold(self, table_type):
         MAX_LINES_val = pprint.MAX_LINES()
         pprint.MAX_LINES.set(6)
-        t = Table([np.arange(20)], names=['a'])
+        t = table_type([np.arange(20)], names=['a'])
         t['a'].format = '%{0:}'
         assert str(t['a']) == ' a \n---\n %0\n %1\n...\n%19'
         t['a'].format = '{ %4.2f }'
         assert str(t['a']) == '    a    \n---------\n { 0.00 }\n' \
                               ' { 1.00 }\n      ...\n{ 19.00 }'
         pprint.MAX_LINES.set(MAX_LINES_val)
+
+    def test_column_format_func(self, table_type):
+        # run most of functions twice
+        # 1) astropy.table.pprint._format_funcs gets populated
+        # 2) astropy.table.pprint._format_funcs gets used
+
+        t = table_type([[1., 2.], [3, 4]], names=('a', 'b'))
+
+        # mathematical function
+        t['a'].format = lambda x: str(x * 3.)
+        assert str(t['a']) == ' a \n---\n3.0\n6.0'
+        assert str(t['a']) == ' a \n---\n3.0\n6.0'
+
+    def test_column_format_func_wrong_number_args(self, table_type):
+        t = table_type([[1., 2.], [3, 4]], names=('a', 'b'))
+
+        # function that expects wrong number of arguments
+        def func(a, b):
+            pass
+
+        t['a'].format = func
+        with pytest.raises(ValueError):
+            str(t['a'])
+
+    def test_column_format_func_multiD(self, table_type):
+        arr = [np.array([[1, 2],
+                         [10, 20]])]
+        t = table_type(arr, names=['a'])
+
+        # mathematical function
+        t['a'].format = lambda x: str(x * 3.)
+        outstr = '   a [2]    \n------------\n  3.0 .. 6.0\n30.0 .. 60.0'
+        assert str(t['a']) == outstr
+        assert str(t['a']) == outstr
+
+    def test_column_format_func_not_str(self, table_type):
+        t = table_type([[1., 2.], [3, 4]], names=('a', 'b'))
+
+        # mathematical function
+        t['a'].format = lambda x: x * 3
+        with pytest.raises(ValueError):
+            str(t['a'])
diff --git a/astropy/table/tests/test_row.py b/astropy/table/tests/test_row.py
index 6a04925..a13af5c 100644
--- a/astropy/table/tests/test_row.py
+++ b/astropy/table/tests/test_row.py
@@ -4,15 +4,12 @@ import sys
 from distutils import version
 import numpy as np
 
-from ...tests.helper import pytest
+from ...tests.helper import pytest, catch_warnings
 from ... import table
 from ...table import Row
+from ...utils.exceptions import AstropyDeprecationWarning
 
-numpy_lt_1p5 = version.LooseVersion(np.__version__) < version.LooseVersion('1.5')
-
-# Dummy init of Table, DATA for pyflakes and to be sure test fixture is working
-Table = None
-Column = None
+numpy_lt_1p8 = version.LooseVersion(np.__version__) < version.LooseVersion('1.8')
 
 
 class MaskedTable(table.Table):
@@ -21,13 +18,11 @@ class MaskedTable(table.Table):
         table.Table.__init__(self, *args, **kwargs)
 
 
- at pytest.mark.skipif("numpy_lt_1p5")
 def test_masked_row_with_object_col():
     """
     Numpy < 1.8 has a bug in masked array that prevents access a row if there is
     a column with object type.
     """
-    numpy_lt_1p8 = version.LooseVersion(np.__version__) < version.LooseVersion('1.8')
     t = table.Table([[1]], dtypes=['O'], masked=True)
     if numpy_lt_1p8:
         with pytest.raises(ValueError):
@@ -44,37 +39,43 @@ def test_masked_row_with_object_col():
 
 
 # Fixture to run all tests for both an unmasked (ndarray) and masked (MaskedArray) column.
- at pytest.fixture(params=[False] if numpy_lt_1p5 else [False, True])
-def set_global_Table(request):
-    global Table
-    global Column
-    Table = MaskedTable if request.param else table.Table
-    Column = table.MaskedColumn if request.param else table.Column
+ at pytest.fixture(params=[False, True])
+def table_types(request):
+    class TableTypes:
+        def __init__(self, request):
+            self.Table = MaskedTable if request.param else table.Table
+            self.Column = table.MaskedColumn if request.param else table.Column
+    return TableTypes(request)
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestRow():
+    def _setup(self, table_types):
+        self._table_type = table_types.Table
+        self._column_type = table_types.Column
 
     @property
     def t(self):
-        # py.test wants to run this method once before set_global_Table is run
+        # py.test wants to run this method once before table_types is run
         # to set Table and Column.  In this case just return None, which would
         # cause any downstream test to fail if this happened in any other context.
-        if Column is None:
+        if self._column_type is None:
             return None
         if not hasattr(self, '_t'):
-            a = Column(name='a', data=[1, 2, 3], dtype='i8')
-            b = Column(name='b', data=[4, 5, 6], dtype='i8')
-            self._t = Table([a, b])
+            a = self._column_type(name='a', data=[1, 2, 3], dtype='i8')
+            b = self._column_type(name='b', data=[4, 5, 6], dtype='i8')
+            self._t = self._table_type([a, b])
         return self._t
 
-    def test_subclass(self):
+    def test_subclass(self, table_types):
         """Row is subclass of ndarray and Row"""
+        self._setup(table_types)
         c = Row(self.t, 2)
         assert isinstance(c, Row)
 
-    def test_values(self):
+    def test_values(self, table_types):
         """Row accurately reflects table values and attributes"""
+        self._setup(table_types)
         table = self.t
         row = table[1]
         assert row['a'] == 2
@@ -91,56 +92,61 @@ class TestRow():
         else:
             assert str(row.dtype) == "[('a', '>i8'), ('b', '>i8')]"
 
-    def test_ref(self):
+    def test_ref(self, table_types):
         """Row is a reference into original table data"""
+        self._setup(table_types)
         table = self.t
         row = table[1]
         row['a'] = 10
-        if Table is not MaskedTable:
+        if table_types.Table is not MaskedTable:
             assert table['a'][1] == 10
 
-    def test_left_equal(self):
+    def test_left_equal(self, table_types):
         """Compare a table row to the corresponding structured array row"""
+        self._setup(table_types)
         np_t = self.t._data.copy()
-        if Table is MaskedTable:
+        if table_types.Table is MaskedTable:
             with pytest.raises(ValueError):
                 self.t[0] == np_t[0]
         else:
             for row, np_row in zip(self.t, np_t):
                 assert np.all(row == np_row)
 
-    def test_left_not_equal(self):
+    def test_left_not_equal(self, table_types):
         """Compare a table row to the corresponding structured array row"""
+        self._setup(table_types)
         np_t = self.t._data.copy()
         np_t['a'] = [0, 0, 0]
-        if Table is MaskedTable:
+        if table_types.Table is MaskedTable:
             with pytest.raises(ValueError):
                 self.t[0] == np_t[0]
         else:
             for row, np_row in zip(self.t, np_t):
                 assert np.all(row != np_row)
 
-    def test_right_equal(self):
+    def test_right_equal(self, table_types):
         """Test right equal"""
+        self._setup(table_types)
         np_t = self.t._data.copy()
-        if Table is MaskedTable:
+        if table_types.Table is MaskedTable:
             with pytest.raises(ValueError):
                 self.t[0] == np_t[0]
         else:
             for row, np_row in zip(self.t, np_t):
                 assert np.all(np_row == row)
 
-    def test_convert_numpy_array(self):
+    def test_convert_numpy_array(self, table_types):
+        self._setup(table_types)
         d = self.t[1]
 
         np_data = np.array(d)
-        if Table is not MaskedTable:
+        if table_types.Table is not MaskedTable:
             assert np.all(np_data == d._data)
         assert not np_data is d._data
         assert d.colnames == list(np_data.dtype.names)
 
         np_data = np.array(d, copy=False)
-        if Table is not MaskedTable:
+        if table_types.Table is not MaskedTable:
             assert np.all(np_data == d._data)
         assert not np_data is d._data
         assert d.colnames == list(np_data.dtype.names)
@@ -148,8 +154,17 @@ class TestRow():
         with pytest.raises(ValueError):
             np_data = np.array(d, dtype=[('c', 'i8'), ('d', 'i8')])
 
-    def test_format_row(self):
+    def test_format_row(self, table_types):
         """Test formatting row"""
+        self._setup(table_types)
         table = self.t
         row = table[0]
         assert format(row, "").startswith("<Row 0 of table")
+
+    def test_deprecated_attributes(self, table_types):
+        self._setup(table_types)
+        r = Row(self.t, 2)
+
+        with catch_warnings(AstropyDeprecationWarning) as warning_lines:
+            r.dtypes
+            assert warning_lines[0].category == AstropyDeprecationWarning
diff --git a/astropy/table/tests/test_table.py b/astropy/table/tests/test_table.py
index 044d5c6..6ae4882 100644
--- a/astropy/table/tests/test_table.py
+++ b/astropy/table/tests/test_table.py
@@ -1,15 +1,25 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+import copy
+import platform
+import sys
+
 from distutils import version
+
 import numpy as np
 
+from ...extern import six
 from ...tests.helper import pytest
 from ... import table
+from ... import units as u
 
-numpy_lt_1p5 = version.LooseVersion(np.__version__) < version.LooseVersion('1.5')
 
-# Dummy init of Table, DATA for pyflakes and to be sure test fixture is working
-Table = None
-Column = None
+# In Python 3, prior to Numpy 1.6.2, there was a bug (in Numpy) that caused
+# sorting of structured arrays to silently fail under certain circumstances (for
+# example if the Table contains string columns) on MacOS X and Windows
+NUMPY_VERSION = version.LooseVersion(np.__version__)
+SKIP_STRING_SORT = (platform.system() in ('Darwin', 'Windows') and six.PY3 and
+                    NUMPY_VERSION < version.LooseVersion('1.6.2'))
 
 
 class MaskedTable(table.Table):
@@ -20,63 +30,73 @@ class MaskedTable(table.Table):
 
 # Fixture to run all the Column tests for both an unmasked (ndarray)
 # and masked (MaskedArray) column.
- at pytest.fixture(params=[False] if numpy_lt_1p5 else [False, True])
-def set_global_Table(request):
-    global Table, Column
-
-    Table = MaskedTable if request.param else table.Table
-    Column = table.MaskedColumn if request.param else table.Column
+ at pytest.fixture(params=[False, True])
+def table_types(request):
+    class TableTypes:
+        def __init__(self, request):
+            self.Table = MaskedTable if request.param else table.Table
+            self.Column = table.MaskedColumn if request.param else table.Column
+    return TableTypes(request)
 
 
 class SetupData(object):
+    def _setup(self, table_types):
+        self._table_type = table_types.Table
+        self._column_type = table_types.Column
+
     @property
     def a(self):
-        if Column is not None:
+        if self._column_type is not None:
             if not hasattr(self, '_a'):
-                self._a = Column(name='a', data=[1, 2, 3], meta={'aa': np.arange(5)})
+                self._a = self._column_type(
+                    name='a', data=[1, 2, 3], format='%d',
+                    meta={'aa': [0, 1, 2, 3, 4]})
             return self._a
 
     @property
     def b(self):
-        if Column is not None:
+        if self._column_type is not None:
             if not hasattr(self, '_b'):
-                self._b = Column(name='b', data=[4, 5, 6])
+                self._b = self._column_type(
+                    name='b', data=[4, 5, 6], format='%d', meta={'aa': 1})
             return self._b
 
     @property
     def c(self):
-        if Column is not None:
+        if self._column_type is not None:
             if not hasattr(self, '_c'):
-                self._c = Column(name='c', data=[7, 8, 9])
+                self._c = self._column_type(name='c', data=[7, 8, 9])
             return self._c
 
     @property
     def d(self):
-        if Column is not None:
+        if self._column_type is not None:
             if not hasattr(self, '_d'):
-                self._d = Column(name='d', data=[7, 8, 7])
+                self._d = self._column_type(name='d', data=[7, 8, 7])
             return self._d
 
     @property
     def obj(self):
-        if Column is not None and not hasattr(self, '_obj'):
-            self._obj = Column(name='obj', data=[1, 'string', 3], dtype='O')
+        if self._column_type is not None:
+            if not hasattr(self, '_obj'):
+                self._obj = self._column_type(name='obj', data=[1, 'string', 3], dtype='O')
             return self._obj
 
     @property
     def t(self):
-        if Table is not None:
+        if self._table_type is not None:
             if not hasattr(self, '_t'):
-                self._t = Table([self.a, self.b])
+                self._t = self._table_type([self.a, self.b])
             return self._t
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestSetTableColumn(SetupData):
 
-    def test_set_row(self):
+    def test_set_row(self, table_types):
         """Set a row from a tuple of values"""
-        t = Table([self.a, self.b])
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         t[1] = (20, 21)
         assert t['a'][0] == 1
         assert t['a'][1] == 20
@@ -85,108 +105,202 @@ class TestSetTableColumn(SetupData):
         assert t['b'][1] == 21
         assert t['b'][2] == 6
 
-    def test_set_row_existing(self):
+    def test_set_row_existing(self, table_types):
         """Set a row from another existing row"""
-        t = Table([self.a, self.b])
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         t[0] = t[1]
         assert t[0][0] == 2
         assert t[0][1] == 5
 
-    def test_set_row_fail_1(self):
+    def test_set_row_fail_1(self, table_types):
         """Set a row from an incorrectly-sized set of values"""
-        t = Table([self.a, self.b])
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         with pytest.raises(ValueError):
             t[1] = (20, 21, 22)
         with pytest.raises(TypeError):
             t[1] = 0
 
-    def test_set_row_fail_2(self):
+    def test_set_row_fail_2(self, table_types):
         """Set a row from an incorrectly-typed tuple of values"""
-        t = Table([self.a, self.b])
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         with pytest.raises(ValueError):
             t[1] = ('abc', 'def')
 
+    def test_set_new_col_new_table(self, table_types):
+        """Create a new column in empty table using the item access syntax"""
+        self._setup(table_types)
+        t = table_types.Table()
+        t['aa'] = self.a
+        # Test that the new column name is 'aa' and that the values match
+        assert np.all(t['aa'] == self.a)
+        assert t.colnames == ['aa']
+
+    def test_set_new_col_new_table_quantity(self, table_types):
+        """Create a new column (from a quantity) in empty table using the item access syntax"""
+        self._setup(table_types)
+        t = table_types.Table()
+
+        t['aa'] = np.array([1,2,3]) * u.m
+        assert np.all(t['aa'] == np.array([1,2,3]))
+        assert t['aa'].unit == u.m
+
+        t['bb'] = 3 * u.m
+        assert np.all(t['bb'] == 3)
+        assert t['bb'].unit == u.m
+
+    def test_set_new_col_existing_table(self, table_types):
+        """Create a new column in an existing table using the item access syntax"""
+        self._setup(table_types)
+        t = table_types.Table([self.a])
+
+        # Add a column
+        t['bb'] = self.b
+        assert np.all(t['bb'] == self.b)
+        assert t.colnames == ['a', 'bb']
+        assert t['bb'].meta == self.b.meta
+        assert t['bb'].format == self.b.format
+
+        # Add another column
+        t['c'] = t['a']
+        assert np.all(t['c'] == t['a'])
+        assert t.colnames == ['a', 'bb', 'c']
+        assert t['c'].meta == t['a'].meta
+        assert t['c'].format == t['a'].format
+
+        # Add a multi-dimensional column
+        t['d'] = table_types.Column(np.arange(12).reshape(3, 2, 2))
+        assert t['d'].shape == (3, 2, 2)
+        assert t['d'][0, 0, 1] == 1
+
+        # Add column from a list
+        t['e'] = ['hello', 'the', 'world']
+        assert np.all(t['e'] == np.array(['hello', 'the', 'world']))
+
+        # Make sure setting existing column still works
+        t['e'] = ['world', 'hello', 'the']
+        assert np.all(t['e'] == np.array(['world', 'hello', 'the']))
+
+        # Add a column via broadcasting
+        t['f'] = 10
+        assert np.all(t['f'] == 10)
+
+        # Add a column from a Quantity
+        t['g'] = np.array([1,2,3]) * u.m
+        assert np.all(t['g'].data == np.array([1,2,3]))
+        assert t['g'].unit == u.m
+
+        # Add a column from a (scalar) Quantity
+        t['g'] = 3 * u.m
+        assert np.all(t['g'].data == 3)
+        assert t['g'].unit == u.m
+
+    def test_set_new_unmasked_col_existing_table(self, table_types):
+        """Create a new column in an existing table using the item access syntax"""
+        self._setup(table_types)
+        t = table_types.Table([self.a])  # masked or unmasked
+        b = table.Column(name='b', data=[1, 2, 3])  # unmasked
+        t['b'] = b
+        assert np.all(t['b'] == b)
+
+    def test_set_new_masked_col_existing_table(self, table_types):
+        """Create a new column in an existing table using the item access syntax"""
+        self._setup(table_types)
+        t = table_types.Table([self.a])  # masked or unmasked
+        b = table.MaskedColumn(name='b', data=[1, 2, 3])  # masked
+        t['b'] = b
+        assert np.all(t['b'] == b)
+
+    def test_set_new_col_existing_table_fail(self, table_types):
+        """Generate failure when creating a new column using the item access syntax"""
+        self._setup(table_types)
+        t = table_types.Table([self.a])
+        # Wrong size
+        with pytest.raises(ValueError):
+            t['b'] = [1, 2]
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestEmptyData():
 
-    def test_1(self):
-        t = Table()
-        t.add_column(Column(name='a', dtype=int, length=100))
+    def test_1(self, table_types):
+        t = table_types.Table()
+        t.add_column(table_types.Column(name='a', dtype=int, length=100))
         assert len(t['a']) == 100
 
-    def test_2(self):
-        t = Table()
-        t.add_column(Column(name='a', dtype=int, shape=(3, ), length=100))
+    def test_2(self, table_types):
+        t = table_types.Table()
+        t.add_column(table_types.Column(name='a', dtype=int, shape=(3, ), length=100))
         assert len(t['a']) == 100
 
-    def test_3(self):
-        t = Table()  # length is not given
-        t.add_column(Column(name='a', dtype=int))
+    def test_3(self, table_types):
+        t = table_types.Table()  # length is not given
+        t.add_column(table_types.Column(name='a', dtype=int))
         assert len(t['a']) == 0
 
-    def test_4(self):
-        t = Table()  # length is not given
-        t.add_column(Column(name='a', dtype=int, shape=(3, 4)))
+    def test_4(self, table_types):
+        t = table_types.Table()  # length is not given
+        t.add_column(table_types.Column(name='a', dtype=int, shape=(3, 4)))
         assert len(t['a']) == 0
 
-    def test_5(self):
-        t = Table()
-        t.add_column(Column(name='a'))  # dtype is not specified
+    def test_5(self, table_types):
+        t = table_types.Table()
+        t.add_column(table_types.Column(name='a'))  # dtype is not specified
         assert len(t['a']) == 0
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestNewFromColumns():
 
-    def test_simple(self):
-        cols = [Column(name='a', data=[1, 2, 3]),
-                Column(name='b', data=[4, 5, 6], dtype=np.float32)]
-        t = Table(cols)
+    def test_simple(self, table_types):
+        cols = [table_types.Column(name='a', data=[1, 2, 3]),
+                table_types.Column(name='b', data=[4, 5, 6], dtype=np.float32)]
+        t = table_types.Table(cols)
         assert np.all(t['a'].data == np.array([1, 2, 3]))
         assert np.all(t['b'].data == np.array([4, 5, 6], dtype=np.float32))
         assert type(t['b'][1]) == np.float32
 
-    def test_from_np_array(self):
-        cols = [Column(name='a', data=np.array([1, 2, 3], dtype=np.int64),
+    def test_from_np_array(self, table_types):
+        cols = [table_types.Column(name='a', data=np.array([1, 2, 3], dtype=np.int64),
                        dtype=np.float64),
-                Column(name='b', data=np.array([4, 5, 6], dtype=np.float32))]
-        t = Table(cols)
+                table_types.Column(name='b', data=np.array([4, 5, 6], dtype=np.float32))]
+        t = table_types.Table(cols)
         assert np.all(t['a'] == np.array([1, 2, 3], dtype=np.float64))
         assert np.all(t['b'] == np.array([4, 5, 6], dtype=np.float32))
         assert type(t['a'][1]) == np.float64
         assert type(t['b'][1]) == np.float32
 
-    def test_size_mismatch(self):
-        cols = [Column(name='a', data=[1, 2, 3]),
-                Column(name='b', data=[4, 5, 6, 7])]
+    def test_size_mismatch(self, table_types):
+        cols = [table_types.Column(name='a', data=[1, 2, 3]),
+                table_types.Column(name='b', data=[4, 5, 6, 7])]
         with pytest.raises(ValueError):
-            Table(cols)
+            table_types.Table(cols)
 
-    def test_name_none(self):
+    def test_name_none(self, table_types):
         """Column with name=None can init a table IFF names are supplied"""
-        c = Column(data=[1, 2])
-        Table([c], names=('c',))
+        c = table_types.Column(data=[1, 2])
+        table_types.Table([c], names=('c',))
         with pytest.raises(TypeError):
-            Table([c])
+            table_types.Table([c])
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestReverse():
 
-    def test_reverse(self):
-        t = Table([[1, 2, 3],
+    def test_reverse(self, table_types):
+        t = table_types.Table([[1, 2, 3],
                    ['a', 'b', 'cc']])
         t.reverse()
         assert np.all(t['col0'] == np.array([3, 2, 1]))
         assert np.all(t['col1'] == np.array(['cc', 'b', 'a']))
 
-        t2 = Table(t, copy=False)
+        t2 = table_types.Table(t, copy=False)
         assert np.all(t2['col0'] == np.array([3, 2, 1]))
         assert np.all(t2['col1'] == np.array(['cc', 'b', 'a']))
 
-        t2 = Table(t, copy=True)
+        t2 = table_types.Table(t, copy=True)
         assert np.all(t2['col0'] == np.array([3, 2, 1]))
         assert np.all(t2['col1'] == np.array(['cc', 'b', 'a']))
 
@@ -194,94 +308,106 @@ class TestReverse():
         assert np.all(t2['col0'] == np.array([1, 2, 3]))
         assert np.all(t2['col1'] == np.array(['a', 'b', 'cc']))
 
-    def test_reverse_big(self):
+    def test_reverse_big(self, table_types):
         x = np.arange(10000)
         y = x + 1
-        t = Table([x, y], names=('x', 'y'))
+        t = table_types.Table([x, y], names=('x', 'y'))
         t.reverse()
         assert np.all(t['x'] == x[::-1])
         assert np.all(t['y'] == y[::-1])
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestColumnAccess():
 
-    def test_1(self):
-        t = Table()
+    def test_1(self, table_types):
+        t = table_types.Table()
         with pytest.raises(KeyError):
             t['a']
 
-    def test_2(self):
-        t = Table()
-        t.add_column(Column(name='a', data=[1, 2, 3]))
+    def test_2(self, table_types):
+        t = table_types.Table()
+        t.add_column(table_types.Column(name='a', data=[1, 2, 3]))
         assert np.all(t['a'] == np.array([1, 2, 3]))
         with pytest.raises(KeyError):
             t['b']  # column does not exist
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestAddLength(SetupData):
 
-    def test_right_length(self):
-        t = Table([self.a])
+    def test_right_length(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a])
         t.add_column(self.b)
 
-    def test_too_long(self):
-        t = Table([self.a])
+    def test_too_long(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a])
         with pytest.raises(ValueError):
-            t.add_column(Column(name='b', data=[4, 5, 6, 7]))  # data too long
+            t.add_column(table_types.Column(name='b', data=[4, 5, 6, 7]))  # data too long
 
-    def test_too_short(self):
-        t = Table([self.a])
+    def test_too_short(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a])
         with pytest.raises(ValueError):
-            t.add_column(Column(name='b', data=[4, 5]))  # data too short
+            t.add_column(table_types.Column(name='b', data=[4, 5]))  # data too short
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestAddPosition(SetupData):
 
-    def test_1(self):
-        t = Table()
+    def test_1(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table()
         t.add_column(self.a, 0)
 
-    def test_2(self):
-        t = Table()
+    def test_2(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table()
         t.add_column(self.a, 1)
 
-    def test_3(self):
-        t = Table()
+    def test_3(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table()
         t.add_column(self.a, -1)
 
-    def test_5(self):
-        t = Table()
+    def test_5(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table()
         with pytest.raises(ValueError):
             t.index_column('b')
 
-    def test_6(self):
-        t = Table()
+    def test_6(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table()
         t.add_column(self.a)
         t.add_column(self.b)
         assert t.columns.keys() == ['a', 'b']
 
-    def test_7(self):
-        t = Table([self.a])
+    def test_7(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a])
         t.add_column(self.b, t.index_column('a'))
         assert t.columns.keys() == ['b', 'a']
 
-    def test_8(self):
-        t = Table([self.a])
+    def test_8(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a])
         t.add_column(self.b, t.index_column('a') + 1)
         assert t.columns.keys() == ['a', 'b']
 
-    def test_9(self):
-        t = Table()
+    def test_9(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table()
         t.add_column(self.a)
         t.add_column(self.b, t.index_column('a') + 1)
         t.add_column(self.c, t.index_column('b'))
         assert t.columns.keys() == ['a', 'c', 'b']
 
-    def test_10(self):
-        t = Table()
+    def test_10(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table()
         t.add_column(self.a)
         ia = t.index_column('a')
         t.add_column(self.b, ia + 1)
@@ -289,20 +415,21 @@ class TestAddPosition(SetupData):
         assert t.columns.keys() == ['c', 'a', 'b']
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestInitFromTable(SetupData):
 
-    def test_from_table_cols(self):
+    def test_from_table_cols(self, table_types):
         """Ensure that using cols from an existing table gives
         a clean copy.
         """
+        self._setup(table_types)
         t = self.t
         cols = t.columns
         # Construct Table with cols via Table._new_from_cols
-        t2a = Table([cols['a'], cols['b'], self.c])
+        t2a = table_types.Table([cols['a'], cols['b'], self.c])
 
         # Construct with add_column
-        t2b = Table()
+        t2b = table_types.Table()
         t2b.add_column(cols['a'])
         t2b.add_column(cols['b'])
         t2b.add_column(self.c)
@@ -324,78 +451,86 @@ class TestInitFromTable(SetupData):
             assert t.columns['a'].meta['aa'][3] == 3
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestAddColumns(SetupData):
 
-    def test_add_columns1(self):
-        t = Table()
+    def test_add_columns1(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table()
         t.add_columns([self.a, self.b, self.c])
         assert t.colnames == ['a', 'b', 'c']
 
-    def test_add_columns2(self):
-        t = Table([self.a, self.b])
+    def test_add_columns2(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         t.add_columns([self.c, self.d])
         assert t.colnames == ['a', 'b', 'c', 'd']
         assert np.all(t['c'] == np.array([7, 8, 9]))
 
-    def test_add_columns3(self):
-        t = Table([self.a, self.b])
+    def test_add_columns3(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         t.add_columns([self.c, self.d], indexes=[1, 0])
         assert t.colnames == ['d', 'a', 'c', 'b']
 
-    def test_add_columns4(self):
-        t = Table([self.a, self.b])
+    def test_add_columns4(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         t.add_columns([self.c, self.d], indexes=[0, 0])
         assert t.colnames == ['c', 'd', 'a', 'b']
 
-    def test_add_columns5(self):
-        t = Table([self.a, self.b])
+    def test_add_columns5(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         t.add_columns([self.c, self.d], indexes=[2, 2])
         assert t.colnames == ['a', 'b', 'c', 'd']
 
-    def test_add_duplicate_column(self):
-        t = Table()
+    def test_add_duplicate_column(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table()
         t.add_column(self.a)
         with pytest.raises(ValueError):
-            t.add_column(Column(name='a', data=[0, 1, 2]))
+            t.add_column(table_types.Column(name='a', data=[0, 1, 2]))
         t.add_column(self.b)
         t.add_column(self.c)
         assert t.colnames == ['a', 'b', 'c']
 
-    def test_add_duplicate_columns(self):
-        t = Table([self.a, self.b, self.c])
+    def test_add_duplicate_columns(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b, self.c])
         with pytest.raises(ValueError):
-            t.add_columns([Column(name='a', data=[0, 1, 2]), Column(name='b', data=[0, 1, 2])])
+            t.add_columns([table_types.Column(name='a', data=[0, 1, 2]), table_types.Column(name='b', data=[0, 1, 2])])
         t.add_column(self.d)
         assert t.colnames == ['a', 'b', 'c', 'd']
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestAddRow(SetupData):
 
     @property
     def b(self):
-        if Column is not None:
+        if self._column_type is not None:
             if not hasattr(self, '_b'):
-                self._b = Column(name='b', data=[4.0, 5.1, 6.2])
+                self._b = self._column_type(name='b', data=[4.0, 5.1, 6.2])
             return self._b
 
     @property
     def c(self):
-        if Column is not None:
+        if self._column_type is not None:
             if not hasattr(self, '_c'):
-                self._c = Column(name='c', data=['7', '8', '9'])
+                self._c = self._column_type(name='c', data=['7', '8', '9'])
             return self._c
 
     @property
     def t(self):
-        if Table is not None:
+        if self._table_type is not None:
             if not hasattr(self, '_t'):
-                self._t = Table([self.a, self.b, self.c])
+                self._t = self._table_type([self.a, self.b, self.c])
             return self._t
 
-    def test_add_none_to_empty_table(self):
-        t = Table(names=('a', 'b', 'c'), dtypes=('i', 'S4', 'O'))
+    def test_add_none_to_empty_table(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table(names=('a', 'b', 'c'), dtype=('i', 'S4', 'O'))
         t.add_row()
         assert t['a'][0] == 0
         assert t['b'][0] == b''
@@ -405,8 +540,9 @@ class TestAddRow(SetupData):
         assert t['b'][1] == b''
         assert t['c'][1] == 0
 
-    def test_add_stuff_to_empty_table(self):
-        t = Table(names=('a', 'b', 'obj'), dtypes=('i', 'S8', 'O'))
+    def test_add_stuff_to_empty_table(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table(names=('a', 'b', 'obj'), dtype=('i', 'S8', 'O'))
         t.add_row([1, 'hello', 'world'])
         assert t['a'][0] == 1
         assert t['b'][0] == b'hello'
@@ -418,24 +554,27 @@ class TestAddRow(SetupData):
         assert t['b'][1] == b''
         assert t['obj'][1] == 0
 
-    def test_add_table_row(self):
+    def test_add_table_row(self, table_types):
+        self._setup(table_types)
         t = self.t
-        t2 = Table([self.a, self.b, self.c])
+        t2 = table_types.Table([self.a, self.b, self.c])
         t.add_row(t2[0])
         assert len(t) == 4
         assert np.all(t['a'] == np.array([1, 2, 3, 1]))
         assert np.allclose(t['b'], np.array([4.0, 5.1, 6.2, 4.0]))
         assert np.all(t['c'] == np.array(['7', '8', '9', '7']))
 
-    def test_add_table_row_obj(self):
-        t = Table([self.a, self.b, self.obj])
+    def test_add_table_row_obj(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b, self.obj])
         t.add_row([1, 4.0, [10]])
         assert len(t) == 4
         assert np.all(t['a'] == np.array([1, 2, 3, 1]))
         assert np.allclose(t['b'], np.array([4.0, 5.1, 6.2, 4.0]))
         assert np.all(t['obj'] == np.array([1, 'string', 3, [10]], dtype='O'))
 
-    def test_add_with_tuple(self):
+    def test_add_with_tuple(self, table_types):
+        self._setup(table_types)
         t = self.t
         t.add_row((4, 7.2, '1'))
         assert len(t) == 4
@@ -443,7 +582,8 @@ class TestAddRow(SetupData):
         assert np.allclose(t['b'], np.array([4.0, 5.1, 6.2, 7.2]))
         assert np.all(t['c'] == np.array(['7', '8', '9', '1']))
 
-    def test_add_with_list(self):
+    def test_add_with_list(self, table_types):
+        self._setup(table_types)
         t = self.t
         t.add_row([4, 7.2, '10'])
         assert len(t) == 4
@@ -451,7 +591,8 @@ class TestAddRow(SetupData):
         assert np.allclose(t['b'], np.array([4.0, 5.1, 6.2, 7.2]))
         assert np.all(t['c'] == np.array(['7', '8', '9', '1']))
 
-    def test_add_with_dict(self):
+    def test_add_with_dict(self, table_types):
+        self._setup(table_types)
         t = self.t
         t.add_row({'a': 4, 'b': 7.2})
         assert len(t) == 4
@@ -462,7 +603,8 @@ class TestAddRow(SetupData):
         else:
             assert np.all(t['c'] == np.array(['7', '8', '9', '']))
 
-    def test_add_with_none(self):
+    def test_add_with_none(self, table_types):
+        self._setup(table_types)
         t = self.t
         t.add_row()
         assert len(t) == 4
@@ -470,143 +612,232 @@ class TestAddRow(SetupData):
         assert np.allclose(t['b'], np.array([4.0, 5.1, 6.2, 0.0]))
         assert np.all(t['c'].data == np.array(['7', '8', '9', '']))
 
-    def test_add_missing_column(self):
+    def test_add_missing_column(self, table_types):
+        self._setup(table_types)
         t = self.t
         with pytest.raises(ValueError):
             t.add_row({'bad_column': 1})
 
-    def test_wrong_size_tuple(self):
+    def test_wrong_size_tuple(self, table_types):
+        self._setup(table_types)
         t = self.t
         with pytest.raises(ValueError):
             t.add_row((1, 2))
 
-    def test_wrong_vals_type(self):
+    def test_wrong_vals_type(self, table_types):
+        self._setup(table_types)
         t = self.t
         with pytest.raises(TypeError):
             t.add_row(1)
 
-    def test_add_without_own_fails(self):
+    def test_add_without_own_fails(self, table_types):
         """Add row to a table that doesn't own the data"""
+        self._setup(table_types)
         data = np.array([(1, 2, 3),
                          (3, 4, 5)],
                         dtype='i4')
-        t = Table(data, copy=False)
+        t = table_types.Table(data, copy=False)
         if not t.masked:
             with pytest.raises(ValueError):
                 t.add_row([6, 7, 8])
 
-
- at pytest.mark.usefixtures('set_global_Table')
+    def test_add_row_failures(self, table_types):
+        self._setup(table_types)
+        t = self.t
+        t_copy = table_types.Table(t, copy=True)
+        # Wrong number of columns
+        try:
+            t.add_row([1,2,3,4])
+        except ValueError:
+            pass
+        assert len(t) == 3
+        assert np.all(t._data == t_copy._data)
+        # Wrong data type
+        try:
+            t.add_row(['one',2,3])
+        except ValueError:
+            pass
+        assert len(t) == 3
+        assert np.all(t._data == t_copy._data)
+
+ at pytest.mark.usefixtures('table_types')
 class TestTableColumn(SetupData):
 
-    def test_column_view(self):
+    def test_column_view(self, table_types):
+        self._setup(table_types)
         t = self.t
         a = t.columns['a']
         a[2] = 10
         assert t._data['a'][2] == 10
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestArrayColumns(SetupData):
 
-    def test_1d(self):
-        b = Column(name='b', dtype=int, shape=(2, ), length=3)
-        t = Table([self.a])
+    def test_1d(self, table_types):
+        self._setup(table_types)
+        b = table_types.Column(name='b', dtype=int, shape=(2, ), length=3)
+        t = table_types.Table([self.a])
         t.add_column(b)
         assert t['b'].shape == (3, 2)
         assert t['b'][0].shape == (2, )
 
-    def test_2d(self):
-        b = Column(name='b', dtype=int, shape=(2, 4), length=3)
-        t = Table([self.a])
+    def test_2d(self, table_types):
+        self._setup(table_types)
+        b = table_types.Column(name='b', dtype=int, shape=(2, 4), length=3)
+        t = table_types.Table([self.a])
         t.add_column(b)
         assert t['b'].shape == (3, 2, 4)
         assert t['b'][0].shape == (2, 4)
 
-    def test_3d(self):
-        t = Table([self.a])
-        b = Column(name='b', dtype=int, shape=(2, 4, 6), length=3)
+    def test_3d(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a])
+        b = table_types.Column(name='b', dtype=int, shape=(2, 4, 6), length=3)
         t.add_column(b)
         assert t['b'].shape == (3, 2, 4, 6)
         assert t['b'][0].shape == (2, 4, 6)
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestRemove(SetupData):
 
     @property
     def t(self):
-        if Table is not None:
+        if self._table_type is not None:
             if not hasattr(self, '_t'):
-                self._t = Table([self.a])
+                self._t = self._table_type([self.a])
             return self._t
 
     @property
     def t2(self):
-        if Table is not None:
+        if self._table_type is not None:
             if not hasattr(self, '_t2'):
-                self._t2 = Table([self.a, self.b, self.c])
+                self._t2 = self._table_type([self.a, self.b, self.c])
             return self._t2
 
-    def test_1(self):
+    def test_1(self, table_types):
+        self._setup(table_types)
         self.t.remove_columns('a')
         assert self.t.columns.keys() == []
         assert self.t._data is None
 
-    def test_2(self):
+    def test_2(self, table_types):
+        self._setup(table_types)
         self.t.add_column(self.b)
         self.t.remove_columns('a')
         assert self.t.columns.keys() == ['b']
         assert self.t._data.dtype.names == ('b',)
         assert np.all(self.t['b'] == np.array([4, 5, 6]))
 
-    def test_delitem1(self):
+    def test_remove_nonexistent_row(self, table_types):
+        self._setup(table_types)
+        with pytest.raises(IndexError):
+            self.t.remove_row(4)
+
+    def test_remove_row_0(self, table_types):
+        self._setup(table_types)
+        self.t.add_column(self.b)
+        self.t.add_column(self.c)
+        self.t.remove_row(0)
+        assert self.t.colnames == ['a', 'b', 'c']
+        assert np.all(self.t['b'] == np.array([5, 6]))
+
+    def test_remove_row_1(self, table_types):
+        self._setup(table_types)
+        self.t.add_column(self.b)
+        self.t.add_column(self.c)
+        self.t.remove_row(1)
+        assert self.t.colnames == ['a', 'b', 'c']
+        assert np.all(self.t['a'] == np.array([1, 3]))
+
+    def test_remove_row_2(self, table_types):
+        self._setup(table_types)
+        self.t.add_column(self.b)
+        self.t.add_column(self.c)
+        self.t.remove_row(2)
+        assert self.t.colnames == ['a', 'b', 'c']
+        assert np.all(self.t['c'] == np.array([7, 8]))
+
+    def test_remove_row_slice(self, table_types):
+        self._setup(table_types)
+        self.t.add_column(self.b)
+        self.t.add_column(self.c)
+        self.t.remove_rows(slice(0, 2, 1))
+        assert self.t.colnames == ['a', 'b', 'c']
+        assert np.all(self.t['c'] == np.array([9]))
+
+    def test_remove_row_list(self, table_types):
+        self._setup(table_types)
+        self.t.add_column(self.b)
+        self.t.add_column(self.c)
+        self.t.remove_rows([0, 2])
+        assert self.t.colnames == ['a', 'b', 'c']
+        assert np.all(self.t['c'] == np.array([8]))
+
+    def test_remove_row_preserves_meta(self, table_types):
+        self._setup(table_types)
+        self.t.add_column(self.b)
+        self.t.remove_rows([0, 2])
+        assert self.t['a'].meta == {'aa': [0, 1, 2, 3, 4]}
+        assert self.t.dtype == np.dtype([('a', 'int'),
+                                         ('b', 'int')])
+
+    def test_delitem1(self, table_types):
+        self._setup(table_types)
         del self.t['a']
         assert self.t.columns.keys() == []
         assert self.t._data is None
 
-    def test_delitem2(self):
+    def test_delitem2(self, table_types):
+        self._setup(table_types)
         del self.t2['b']
         assert self.t2.colnames == ['a', 'c']
 
-    def test_delitems(self):
+    def test_delitems(self, table_types):
+        self._setup(table_types)
         del self.t2['a', 'b']
         assert self.t2.colnames == ['c']
 
-    def test_delitem_fail(self):
+    def test_delitem_fail(self, table_types):
+        self._setup(table_types)
         with pytest.raises(KeyError):
             del self.t['d']
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestKeep(SetupData):
 
-    def test_1(self):
-        t = Table([self.a, self.b])
+    def test_1(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         t.keep_columns([])
         assert t.columns.keys() == []
         assert t._data is None
 
-    def test_2(self):
-        t = Table([self.a, self.b])
+    def test_2(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         t.keep_columns('b')
         assert t.columns.keys() == ['b']
         assert t._data.dtype.names == ('b',)
         assert np.all(t['b'] == np.array([4, 5, 6]))
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestRename(SetupData):
 
-    def test_1(self):
-        t = Table([self.a])
+    def test_1(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a])
         t.rename_column('a', 'b')
         assert t.columns.keys() == ['b']
         assert t._data.dtype.names == ('b',)
         assert np.all(t['b'] == np.array([1, 2, 3]))
 
-    def test_2(self):
-        t = Table([self.a, self.b])
+    def test_2(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         t.rename_column('a', 'c')
         t.rename_column('b', 'a')
         assert t.columns.keys() == ['c', 'a']
@@ -616,8 +847,9 @@ class TestRename(SetupData):
         assert np.all(t['c'] == np.array([1, 2, 3]))
         assert np.all(t['a'] == np.array([4, 5, 6]))
 
-    def test_rename_by_attr(self):
-        t = Table([self.a, self.b])
+    def test_rename_by_attr(self, table_types):
+        self._setup(table_types)
+        t = table_types.Table([self.a, self.b])
         t['a'].name = 'c'
         t['b'].name = 'a'
         assert t.columns.keys() == ['c', 'a']
@@ -626,13 +858,13 @@ class TestRename(SetupData):
         assert np.all(t['a'] == np.array([4, 5, 6]))
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestSort():
 
-    def test_single(self):
-        t = Table()
-        t.add_column(Column(name='a', data=[2, 1, 3]))
-        t.add_column(Column(name='b', data=[6, 5, 4]))
+    def test_single(self, table_types):
+        t = table_types.Table()
+        t.add_column(table_types.Column(name='a', data=[2, 1, 3]))
+        t.add_column(table_types.Column(name='b', data=[6, 5, 4]))
         assert np.all(t['a'] == np.array([2, 1, 3]))
         assert np.all(t['b'] == np.array([6, 5, 4]))
         t.sort('a')
@@ -642,20 +874,20 @@ class TestSort():
         assert np.all(t['a'] == np.array([3, 1, 2]))
         assert np.all(t['b'] == np.array([4, 5, 6]))
 
-    def test_single_big(self):
+    def test_single_big(self, table_types):
         """Sort a big-ish table with a non-trivial sort order"""
         x = np.arange(10000)
         y = np.sin(x)
-        t = Table([x, y], names=('x', 'y'))
+        t = table_types.Table([x, y], names=('x', 'y'))
         t.sort('y')
         idx = np.argsort(y)
         assert np.all(t['x'] == x[idx])
         assert np.all(t['y'] == y[idx])
 
-    def test_multiple(self):
-        t = Table()
-        t.add_column(Column(name='a', data=[2, 1, 3, 2, 3, 1]))
-        t.add_column(Column(name='b', data=[6, 5, 4, 3, 5, 4]))
+    def test_multiple(self, table_types):
+        t = table_types.Table()
+        t.add_column(table_types.Column(name='a', data=[2, 1, 3, 2, 3, 1]))
+        t.add_column(table_types.Column(name='b', data=[6, 5, 4, 3, 5, 4]))
         assert np.all(t['a'] == np.array([2, 1, 3, 2, 3, 1]))
         assert np.all(t['b'] == np.array([6, 5, 4, 3, 5, 4]))
         t.sort(['a', 'b'])
@@ -665,15 +897,37 @@ class TestSort():
         assert np.all(t['a'] == np.array([2, 1, 3, 1, 3, 2]))
         assert np.all(t['b'] == np.array([3, 4, 4, 5, 5, 6]))
 
-
- at pytest.mark.usefixtures('set_global_Table')
+    @pytest.mark.skipif('SKIP_STRING_SORT')
+    def test_multiple_with_strings(self, table_types):
+        # Before Numpy 1.6.2, and on Python 3.x, Numpy had a bug that meant
+        # that sorting with multiple column names failed when a string column
+        # was present:
+        t = table_types.Table()
+        t.add_column(table_types.Column(name='firstname', data=["Max", "Jo", "John"]))
+        t.add_column(table_types.Column(name='name', data=["Miller", "Miller", "Jackson"]))
+        t.add_column(table_types.Column(name='tel', data=[12, 15, 19]))
+        t.sort(['name','firstname'])
+        assert np.all([t['firstname'] == np.array(["John", "Jo", "Max"])])
+        assert np.all([t['name'] == np.array(["Jackson", "Miller", "Miller"])])
+        assert np.all([t['tel'] == np.array([19, 15, 12])])
+
+    def test_argsort(self, table_types):
+        t = table_types.Table()
+        t.add_column(table_types.Column(name='a', data=[2, 1, 3, 2, 3, 1]))
+        t.add_column(table_types.Column(name='b', data=[6, 5, 4, 3, 5, 4]))
+        assert np.all(t.argsort() == t._data.argsort())
+        assert np.all(t.argsort('a') == t._data.argsort(order=['a']))
+        assert np.all(t.argsort(['a', 'b']) == t._data.argsort(order=['a', 'b']))
+
+
+ at pytest.mark.usefixtures('table_types')
 class TestIterator():
 
-    def test_iterator(self):
+    def test_iterator(self, table_types):
         d = np.array([(2, 1),
                       (3, 6),
                       (4, 5)], dtype=[('a', 'i4'), ('b', 'i4')])
-        t = Table(d)
+        t = table_types.Table(d)
         if t.masked:
             with pytest.raises(ValueError):
                 t[0] == d[0]
@@ -682,11 +936,11 @@ class TestIterator():
                 assert np.all(row == np_row)
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestSetMeta():
 
-    def test_set_meta(self):
-        d = Table(names=('a', 'b'))
+    def test_set_meta(self, table_types):
+        d = table_types.Table(names=('a', 'b'))
         d.meta['a'] = 1
         d.meta['b'] = 1
         d.meta['c'] = 1
@@ -694,20 +948,20 @@ class TestSetMeta():
         assert list(d.meta.keys()) == ['a', 'b', 'c', 'd']
 
 
- at pytest.mark.usefixtures('set_global_Table')
+ at pytest.mark.usefixtures('table_types')
 class TestConvertNumpyArray():
 
-    def test_convert_numpy_array(self):
-        d = Table([[1, 2], [3, 4]], names=('a', 'b'))
+    def test_convert_numpy_array(self, table_types):
+        d = table_types.Table([[1, 2], [3, 4]], names=('a', 'b'))
 
         np_data = np.array(d)
-        if Table is not MaskedTable:
+        if table_types.Table is not MaskedTable:
             assert np.all(np_data == d._data)
         assert not np_data is d._data
         assert d.colnames == list(np_data.dtype.names)
 
         np_data = np.array(d, copy=False)
-        if Table is not MaskedTable:
+        if table_types.Table is not MaskedTable:
             assert np.all(np_data == d._data)
             assert np_data is d._data
         assert d.colnames == list(np_data.dtype.names)
@@ -716,6 +970,40 @@ class TestConvertNumpyArray():
             np_data = np.array(d, dtype=[('c', 'i8'), ('d', 'i8')])
 
 
+def _assert_copies(t, t2, deep=True):
+    assert t.colnames == t2.colnames
+    np.testing.assert_array_equal(t._data, t2._data)
+    assert t.meta == t2.meta
+
+    if deep:
+        assert not np.may_share_memory(t._data, t2._data)
+    else:
+        assert np.may_share_memory(t._data, t2._data)
+
+
+def test_copy():
+    t = table.Table([[1, 2, 3], [2, 3, 4]], names=['x', 'y'])
+    t2 = t.copy()
+    _assert_copies(t, t2)
+
+
+def test_copy_masked():
+    t = table.Table([[1, 2, 3], [2, 3, 4]], names=['x', 'y'], masked=True,
+                    meta={'name': 'test'})
+    t['x'].mask == [True, False, True]
+    t2 = t.copy()
+    _assert_copies(t, t2)
+
+
+def test_copy_protocol():
+    t = table.Table([[1, 2, 3], [2, 3, 4]], names=['x', 'y'])
+
+    t2 = copy.copy(t)
+    t3 = copy.deepcopy(t)
+
+    _assert_copies(t, t2, deep=False)
+    _assert_copies(t, t3)
+
 def test_disallow_inequality_comparisons():
     """
     Regression test for #828 - disallow comparison operators on whole Table
@@ -735,7 +1023,6 @@ def test_disallow_inequality_comparisons():
     with pytest.raises(TypeError):
         t <= -1.1
 
-
 def test_equality():
 
     t = table.Table.read([' a b  c  d',
@@ -782,7 +1069,6 @@ def test_equality():
     assert np.all((t._data == t2) == np.array([1,1,0,1,0,1,0,1], dtype=bool))
 
 
- at pytest.mark.xfail('numpy_lt_1p5')
 def test_equality_masked():
 
     t = table.Table.read([' a b  c  d',
@@ -870,3 +1156,15 @@ def test_equality_masked_bug():
                           ], format='ascii')
 
     assert np.all((t._data == t2) == np.array([0,1,0,1,0,1,0,1], dtype=bool))
+
+
+# Check that the meta descriptor is working as expected. The MetaBaseTest class
+# takes care of defining all the tests, and we simply have to define the class
+# and any minimal set of args to pass.
+
+from ...utils.tests.test_metadata import MetaBaseTest
+
+
+class TestMetaTable(MetaBaseTest):
+    test_class = table.Table
+    args = ()
diff --git a/astropy/tests/__init__.py b/astropy/tests/__init__.py
index 2728b28..d1f39cf 100644
--- a/astropy/tests/__init__.py
+++ b/astropy/tests/__init__.py
@@ -4,5 +4,7 @@ This package contains utilities to run the astropy test suite, tools
 for writing tests, and general tests that are not associated with a
 particular package.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 from . import helper
diff --git a/astropy/tests/compat.py b/astropy/tests/compat.py
deleted file mode 100644
index 2256292..0000000
--- a/astropy/tests/compat.py
+++ /dev/null
@@ -1,15 +0,0 @@
-import numpy as np
-
-# assert_allclose doesn't exist in Numpy 1.4, so recreate it here
-if tuple([int(x) for x in np.__version__.split(".", 2)[:2]]) < (1, 5):
-    def assert_allclose(actual, desired, rtol=1e-7, atol=0,
-                        err_msg='', verbose=True):
-        from numpy.testing.utils import assert_array_compare
-        def compare(x, y):
-            return np.allclose(x, y, rtol=rtol, atol=atol)
-        actual, desired = np.asanyarray(actual), np.asanyarray(desired)
-        header = 'Not equal to tolerance rtol=%g, atol=%g' % (rtol, atol)
-        assert_array_compare(compare, actual, desired, err_msg=str(err_msg),
-                             verbose=verbose, header=header)
-else:
-    from numpy.testing.utils import assert_allclose
diff --git a/astropy/tests/helper.py b/astropy/tests/helper.py
index b185d9e..a79e903 100644
--- a/astropy/tests/helper.py
+++ b/astropy/tests/helper.py
@@ -3,6 +3,11 @@
 This module prvoides the tools used to internally run the astropy test suite
 from the installed astropy.  It makes use of the `pytest` testing framework.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from ..extern import six
+from ..extern.six.moves import cPickle as pickle
 
 import errno
 import shlex
@@ -10,10 +15,12 @@ import sys
 import base64
 import zlib
 import functools
+import multiprocessing
 import os
 import subprocess
 import shutil
 import tempfile
+import warnings
 
 try:
     # Import pkg_resources to prevent it from issuing warnings upon being
@@ -37,7 +44,6 @@ else:
         exec("def do_exec_def(co, loc): exec(co, loc)\n")
         extern_pytest.do_exec = do_exec_def
 
-        import pickle
         unpacked_sources = extern_pytest.sources.encode("ascii")
         unpacked_sources = pickle.loads(
             zlib.decompress(base64.decodebytes(unpacked_sources)))
@@ -45,21 +51,28 @@ else:
         exec("def do_exec_def(co, loc): exec co in loc\n")
         extern_pytest.do_exec = do_exec_def
 
-        import cPickle as pickle
         unpacked_sources = pickle.loads(
             zlib.decompress(base64.decodestring(extern_pytest.sources)))
 
     importer = extern_pytest.DictImporter(unpacked_sources)
-    sys.meta_path.append(importer)
+    sys.meta_path.insert(0, importer)
 
-    pytest = importer.load_module('pytest')
+    # On Python 3.1, we need to forcibly import the py.test-"bundled"
+    # argparse before importing py.test, since it isn't in the
+    # standard library, and py.test's workaround doesn't appear to
+    # work with the "absolute imports" of Python 3.x.
+    if sys.version_info[0] == 3 and sys.version_info[1] <= 1:
+        argparse = importer.load_module(str('argparse'))
+    pytest = importer.load_module(str('pytest'))
 
 
 # Monkey-patch py.test to work around issue #811
 # https://github.com/astropy/astropy/issues/811
 from _pytest.assertion import rewrite as _rewrite
 _orig_write_pyc = _rewrite._write_pyc
-def _write_pyc_wrapper(co, source_path, pyc):
+
+
+def _write_pyc_wrapper(*args):
     """Wraps the internal _write_pyc method in py.test to recognize
     PermissionErrors and just stop trying to cache its generated pyc files if
     it can't write them to the __pycache__ directory.
@@ -76,7 +89,7 @@ def _write_pyc_wrapper(co, source_path, pyc):
     """
 
     try:
-        return _orig_write_pyc(co, source_path, pyc)
+        return _orig_write_pyc(*args)
     except IOError as e:
         if e.errno == errno.EACCES:
             return False
@@ -93,7 +106,7 @@ class TestRunner(object):
 
     def run_tests(self, package=None, test_path=None, args=None, plugins=None,
                   verbose=False, pastebin=None, remote_data=False, pep8=False,
-                  pdb=False, coverage=False, open_files=False):
+                  pdb=False, coverage=False, open_files=False, parallel=0):
         """
         The docstring for this method lives in astropy/__init__.py:test
         """
@@ -170,7 +183,7 @@ class TestRunner(object):
                 coveragerc_content = coveragerc_content.replace(
                     "{ignore_python_version}", ignore_python_version)
                 with tempfile.NamedTemporaryFile(delete=False) as tmp:
-                    tmp.write(coveragerc_content)
+                    tmp.write(coveragerc_content.encode('utf-8'))
 
                 all_args += (
                     ' --cov-report html --cov astropy'
@@ -192,6 +205,27 @@ class TestRunner(object):
 
             print("Checking for unclosed files")
 
+        if parallel != 0:
+            try:
+                import xdist
+            except ImportError:
+                raise ImportError(
+                    'Parallel testing requires the pytest-xdist plugin '
+                    'https://pypi.python.org/pypi/pytest-xdist')
+
+            try:
+                parallel = int(parallel)
+            except ValueError:
+                raise ValueError(
+                    "parallel must be an int, got {0}".format(parallel))
+
+            if parallel < 0:
+                parallel = multiprocessing.cpu_count()
+            all_args += ' -n {0}'.format(parallel)
+
+        if sys.version_info < (2, 7, 3):
+            all_args = all_args.encode('utf-8')
+
         try:
             all_args = shlex.split(
                 all_args, posix=not sys.platform.startswith('win'))
@@ -210,30 +244,41 @@ class TestRunner(object):
 
 class astropy_test(Command, object):
     user_options = [
-        ('package=', 'P',
-         "The name of a specific package to test, e.g. 'io.fits' or 'utils'.  "
-         "If nothing is specified all default Astropy tests are run."),
-        ('test-path=', 't', 'Specify a test location by path. Must be '
-         'specified absolutely or relative to the current directory. '
-         'May be a single file or directory.'),
-        ('verbose-results', 'V',
-         'Turn on verbose output from pytest. Same as specifying `-v` in '
-         '`args`.'),
-        ('plugins=', 'p',
-         'Plugins to enable when running pytest.  Same as specifying `-p` in '
-         '`args`.'),
-        ('pastebin=', 'b',
-         "Enable pytest pastebin output. Either 'all' or 'failed'."),
-        ('args=', 'a', 'Additional arguments to be passed to pytest'),
-        ('remote-data', 'R', 'Run tests that download remote data'),
-        ('pep8', '8', 'Enable PEP8 checking and disable regular tests. '
-         'Same as specifying `--pep8 -k pep8` in `args`. Requires the '
-         'pytest-pep8 plugin.'),
-        ('pdb', 'd', 'Turn on PDB post-mortem analysis for failing tests. '
-         'Same as specifying `--pdb` in `args`.'),
-        ('coverage', 'c', 'Create a coverage report. Requires the pytest-cov '
-         'plugin is installed'),
-        ('open-files', 'o', 'Fail if any tests leave files open')
+        (str('package='), str('P'),
+         str("The name of a specific package to test, e.g. 'io.fits' or 'utils'.  "
+             "If nothing is specified all default Astropy tests are run.")),
+        (str('test-path='), str('t'),
+         str('Specify a test location by path. Must be '
+             'specified absolutely or relative to the current directory. '
+             'May be a single file or directory.')),
+        (str('verbose-results'), str('V'),
+         str('Turn on verbose output from pytest. Same as specifying `-v` in '
+             '`args`.')),
+        (str('plugins='), str('p'),
+         str('Plugins to enable when running pytest.  Same as specifying `-p` in '
+             '`args`.')),
+        (str('pastebin='), str('b'),
+         str("Enable pytest pastebin output. Either 'all' or 'failed'.")),
+        (str('args='), str('a'),
+         str('Additional arguments to be passed to pytest')),
+        (str('remote-data'), str('R'), 'Run tests that download remote data'),
+        (str('pep8'), str('8'),
+         str('Enable PEP8 checking and disable regular tests. '
+             'Same as specifying `--pep8 -k pep8` in `args`. Requires the '
+             'pytest-pep8 plugin.')),
+        (str('pdb'), str('d'),
+         str('Turn on PDB post-mortem analysis for failing tests. '
+             'Same as specifying `--pdb` in `args`.')),
+        (str('coverage'), str('c'),
+         str('Create a coverage report. Requires the pytest-cov '
+             'plugin is installed')),
+        (str('open-files'), str('o'), 'Fail if any tests leave files open'),
+        (str('parallel='), str('n'),
+         str('Run the tests in parallel on the specified '
+             'number of CPUs.  If parallel is negative, it will use the all '
+             'the cores on the machine.  Requires the `pytest-xdist` plugin '
+             'is installed.'))
+
     ]
 
     package_name = None
@@ -250,6 +295,7 @@ class astropy_test(Command, object):
         self.pdb = False
         self.coverage = False
         self.open_files = False
+        self.parallel = 0
 
     def finalize_options(self):
         # Normally we would validate the options here, but that's handled in
@@ -268,6 +314,7 @@ class astropy_test(Command, object):
         tmp_dir = tempfile.mkdtemp(prefix='astropy-test-')
         testing_path = os.path.join(tmp_dir, os.path.basename(new_path))
         shutil.copytree(new_path, testing_path)
+        shutil.copy('setup.cfg', testing_path)
 
         try:
 
@@ -295,11 +342,12 @@ class astropy_test(Command, object):
                    'pep8={1.pep8!r}, '
                    'pdb={1.pdb!r}, '
                    'coverage={1.coverage!r}, '
-                   'open_files={1.open_files!r}))')
+                   'open_files={1.open_files!r}, '
+                   'parallel={1.parallel!r}))')
             cmd = cmd.format(set_flag, self)
 
-            #override the config locations to not make a new directory nor use
-            #existing cache or config
+            # override the config locations to not make a new directory nor use
+            # existing cache or config
             os.environ['XDG_CONFIG_HOME'] = tempfile.mkdtemp('astropy_config')
             os.environ['XDG_CACHE_HOME'] = tempfile.mkdtemp('astropy_cache')
             os.mkdir(os.path.join(os.environ['XDG_CONFIG_HOME'], 'astropy'))
@@ -314,12 +362,34 @@ class astropy_test(Command, object):
                 shutil.rmtree(os.environ['XDG_CACHE_HOME'])
 
             if self.coverage and retcode == 0:
+
                 # Copy the htmlcov from build/lib.../htmlcov to a more
                 # obvious place
                 if os.path.exists('htmlcov'):
                     shutil.rmtree('htmlcov')
                 shutil.copytree(os.path.join(testing_path, 'htmlcov'), 'htmlcov')
 
+                # The coverage report includes the full path to the temporary
+                # directory, so we replace all the paths with the true source
+                # path. This means that the coverage line-by-line report will
+                # only be correct for Python 2 code (since the Python 3 code
+                # will be different in the build directory from the source
+                # directory as long as 2to3 is needed). Therefore we only do
+                # this fix for Python 2.x.
+
+                if six.PY2:
+                    import coverage
+                    d = coverage.CoverageData()
+                    d.read_file(os.path.join(testing_path, '.coverage'))
+                    for key in d.lines.keys():
+                        new_path = os.path.relpath(os.path.realpath(key),
+                                                   os.path.realpath(testing_path))
+                        new_path = os.path.abspath(new_path)
+                        d.lines[new_path] = d.lines.pop(key)
+                    d.write()
+                else:
+                    shutil.copy2(os.path.join(testing_path, '.coverage'), '.coverage')
+
         finally:
 
             # Remove temporary directory
@@ -346,3 +416,102 @@ class raises(object):
         def run_raises_test(*args, **kwargs):
             pytest.raises(self._exc, func, *args, **kwargs)
         return run_raises_test
+
+
+class catch_warnings(warnings.catch_warnings):
+    """
+    A high-powered version of warnings.catch_warnings to use for testing
+    and to make sure that there is no dependence on the order in which
+    the tests are run.
+
+    This completely blitzes any memory of any warnings that have
+    appeared before so that all warnings will be caught and displayed.
+
+    *args is a set of warning classes to collect.  If no arguments are
+    provided, all warnings are collected.
+
+    Use as follows::
+
+        with catch_warnings(MyCustomWarning) as w:
+            do.something.bad()
+        assert len(w) > 0
+    """
+    def __init__(self, *classes):
+        for module in list(six.itervalues(sys.modules)):
+            if hasattr(module, '__warningregistry__'):
+                del module.__warningregistry__
+        super(catch_warnings, self).__init__(record=True)
+        self.classes = classes
+
+    def __enter__(self):
+        warning_list = super(catch_warnings, self).__enter__()
+        warnings.resetwarnings()
+        if len(self.classes) == 0:
+            warnings.simplefilter('always')
+        else:
+            warnings.simplefilter('ignore')
+            for cls in self.classes:
+                warnings.simplefilter('always', cls)
+        return warning_list
+
+
+def assert_follows_unicode_guidelines(
+        x, roundtrip=None):
+    """
+    Test that an object follows our Unicode policy.  See
+    "Unicode Policy" in the coding guidelines.
+
+    Parameters
+    ----------
+    x : object
+        The instance to test
+
+    roundtrip : module, optional
+        When provided, this namespace will be used to evaluate
+        ``repr(x)`` and ensure that it roundtrips.  It will also
+        ensure that ``__bytes__(x)`` and ``__unicode__(x)`` roundtrip.
+        If not provided, no roundtrip testing will be performed.
+    """
+    from .. import UNICODE_OUTPUT
+    from ..extern import six
+
+    UNICODE_OUTPUT.set(False)
+
+    bytes_x = bytes(x)
+    unicode_x = six.text_type(x)
+    repr_x = repr(x)
+
+    assert isinstance(bytes_x, bytes)
+    bytes_x.decode('ascii')
+    assert isinstance(unicode_x, six.text_type)
+    unicode_x.encode('ascii')
+    assert isinstance(repr_x, six.string_types)
+    if isinstance(repr_x, bytes):
+        repr_x.decode('ascii')
+    else:
+        repr_x.encode('ascii')
+
+    if roundtrip is not None:
+        assert x.__class__(bytes_x) == x
+        assert x.__class__(unicode_x) == x
+        assert eval(repr_x, roundtrip) == x
+
+    UNICODE_OUTPUT.set(True)
+
+    bytes_x = bytes(x)
+    unicode_x = six.text_type(x)
+    repr_x = repr(x)
+
+    assert isinstance(bytes_x, bytes)
+    bytes_x.decode('ascii')
+    assert isinstance(unicode_x, six.text_type)
+    assert isinstance(repr_x, six.string_types)
+    if isinstance(repr_x, bytes):
+        repr_x.decode('ascii')
+    else:
+        repr_x.encode('ascii')
+
+    if roundtrip is not None:
+        assert x.__class__(bytes_x) == x
+        assert x.__class__(unicode_x) == x
+        assert eval(repr_x, roundtrip) == x
diff --git a/astropy/tests/pytest_plugins.py b/astropy/tests/pytest_plugins.py
index 8659f38..e06651a 100644
--- a/astropy/tests/pytest_plugins.py
+++ b/astropy/tests/pytest_plugins.py
@@ -3,22 +3,194 @@
 These plugins modify the behavior of py.test and are meant to be imported
 into conftest.py in the root directory.
 """
-
-import io
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+from ..extern import six
+from ..extern.six.moves import filter
+
+import doctest
+import fnmatch
+import imp
+import locale
+import math
 import os
+import shutil
+import subprocess
 import sys
+import tempfile
 
 from .helper import pytest
 
-PY3K = sys.version_info[0] >= 3
-
 # these pytest hooks allow us to mark tests and run the marked tests with
 # specific command line options.
+
+
 def pytest_addoption(parser):
     parser.addoption("--remote-data", action="store_true",
-        help="run tests with online data")
+                     help="run tests with online data")
     parser.addoption("--open-files", action="store_true",
-        help="fail if any test leaves files open")
+                     help="fail if any test leaves files open")
+
+    parser.addoption("--doctest-plus", action="store_true",
+                     help="enable running doctests with additional features not "
+                     "found in the normal doctest plugin")
+
+    parser.addini("doctest_plus", "enable running doctests with additional "
+                  "features not found in the normal doctest plugin")
+
+    parser.addini("doctest_norecursedirs",
+                  "like the norecursedirs option but applies only to doctest "
+                  "collection", type="args", default=())
+
+
+def pytest_configure(config):
+    doctest_plugin = config.pluginmanager.getplugin('doctest')
+    if (doctest_plugin is None or config.option.doctestmodules or not
+            (config.getini('doctest_plus') or config.option.doctest_plus)):
+        return
+
+    class DocTestModulePlus(doctest_plugin.DoctestModule):
+        # pytest 2.4.0 defines "collect".  Prior to that, it defined
+        # "runtest".  The "collect" approach is better, because we can
+        # skip modules altogether that have no doctests.  However, we
+        # need to continue to override "runtest" so that the built-in
+        # behavior (which doesn't do whitespace normalization or
+        # handling __doctest_skip__) doesn't happen.
+        def collect(self):
+            if self.fspath.basename == "conftest.py":
+                module = self.config._conftest.importconftest(self.fspath)
+            else:
+                module = self.fspath.pyimport()
+
+            # uses internal doctest module parsing mechanism
+            finder = DocTestFinderPlus()
+            opts = doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE
+            runner = doctest.DebugRunner(verbose=False, optionflags=opts)
+            for test in finder.find(module):
+                if test.examples:  # skip empty doctests
+                    yield doctest_plugin.DoctestItem(
+                        test.name, self, runner, test)
+
+        # This is for py.test prior to 2.4.0
+        def runtest(self):
+            return
+
+    config.pluginmanager.register(DoctestPlus(DocTestModulePlus),
+                                  'doctestplus')
+
+
+class DoctestPlus(object):
+
+    def __init__(self, doctest_module_item_cls):
+        """
+        doctest_module_item_cls should be a class inheriting
+        `pytest.doctest.DoctestItem` and `pytest.File`.  This class handles
+        running of a single doctest found in a Python module.  This is passed
+        in as an argument because the actual class to be used may not be
+        available at import time, depending on whether or not the doctest
+        plugin for py.test is available.
+        """
+
+        self._doctest_module_item_cls = doctest_module_item_cls
+
+    def pytest_ignore_collect(self, path, config):
+        """Skip paths that match any of the doctest_norecursedirs patterns."""
+
+        for pattern in config.getini("doctest_norecursedirs"):
+            if path.check(fnmatch=pattern):
+                return True
+
+    def pytest_collect_file(self, path, parent):
+        """Implements an enhanced version of the doctest module from py.test
+        (specifically, as enabled by the --doctest-modules option) which
+        supports skipping all doctests in a specific docstring by way of a
+        special ``__doctest_skip__`` module-level variable.  It can also skip
+        tests that have special requirements by way of
+        ``__doctest_requires__``.
+
+        ``__doctest_skip__`` should be a list of functions, classes, or class
+        methods whose docstrings should be ignored when collecting doctests.
+
+        This also supports wildcard patterns.  For example, to run doctests in
+        a class's docstring, but skip all doctests in its modules use, at the
+        module level::
+
+            __doctest_skip__ = ['ClassName.*']
+
+        You may also use the string ``'.'`` in ``__doctest_skip__`` to refer
+        to the module itself, in case its module-level docstring contains
+        doctests.
+
+        ``__doctest_requires__`` should be a dictionary mapping wildcard
+        patterns (in the same format as ``__doctest_skip__``) to a list of one
+        or more modules that should be *importable* in order for the tests to
+        run.  For example, if some tests require the scipy module to work they
+        will be skipped unless ``import scipy`` is possible.  It is also
+        possible to use a tuple of wildcard patterns as a key in this dict::
+
+            __doctest_requires__ = {('func1', 'func2'): ['scipy']}
+
+        """
+
+        config = parent.config
+        if path.ext == '.py':
+            # Don't override the built-in doctest plugin
+            return self._doctest_module_item_cls(path, parent)
+
+
+class DocTestFinderPlus(doctest.DocTestFinder):
+    """Extension to the default `doctest.DoctestFinder` that supports
+    ``__doctest_skip__`` magic.  See `pytest_collect_file` for more details.
+    """
+
+    # Caches the results of import attempts
+    _import_cache = {}
+
+    def find(self, obj, name=None, module=None, globs=None,
+             extraglobs=None):
+        tests = doctest.DocTestFinder.find(self, obj, name, module, globs,
+                                           extraglobs)
+        if (hasattr(obj, '__doctest_skip__') or
+                hasattr(obj, '__doctest_requires__')):
+            if name is None and hasattr(obj, '__name__'):
+                name = obj.__name__
+            else:
+                raise ValueError("DocTestFinder.find: name must be given "
+                                 "when obj.__name__ doesn't exist: %r" %
+                                 (type(obj),))
+
+            def test_filter(test):
+                for pat in getattr(obj, '__doctest_skip__', []):
+                    if pat == '*':
+                        return False
+                    elif pat == '.' and test.name == name:
+                        return False
+                    elif fnmatch.fnmatch(test.name, '.'.join((name, pat))):
+                        return False
+
+                reqs = getattr(obj, '__doctest_requires__', {})
+                for pats, mods in list(six.iteritems(reqs)):
+                    if not isinstance(pats, tuple):
+                        pats = (pats,)
+                    for pat in pats:
+                        if not fnmatch.fnmatch(test.name,
+                                               '.'.join((name, pat))):
+                            continue
+                        for mod in mods:
+                            if mod in self._import_cache:
+                                return self._import_cache[mod]
+                            try:
+                                imp.find_module(mod)
+                            except ImportError:
+                                self._import_cache[mod] = False
+                                return False
+                            else:
+                                self._import_cache[mod] = True
+                return True
+
+            tests = list(filter(test_filter, tests))
+
+        return tests
 
 
 # Open file detection.
@@ -36,8 +208,6 @@ SUPPORTS_OPEN_FILE_DETECTION = (
 
 
 def _get_open_file_list():
-    import imp
-    import subprocess
     fsencoding = sys.getfilesystemencoding()
 
     sproc = subprocess.Popen(
@@ -54,7 +224,7 @@ def _get_open_file_list():
 
         if (mapping.get(b'f') and
             mapping.get(b'a', b' ') != b' ' and
-            mapping.get(b't') == b'REG'):
+                mapping.get(b't') == b'REG'):
             # Ignore extension modules -- they may be imported by a
             # test but are never again closed by the runtime.  That's
             # ok.
@@ -74,7 +244,7 @@ def pytest_runtest_setup(item):
         item.open_files = _get_open_file_list()
 
     if ('remote_data' in item.keywords and
-        not item.config.getvalue("remote_data")):
+            not item.config.getvalue("remote_data")):
         pytest.skip("need --remote-data option to run")
 
 
@@ -84,7 +254,7 @@ if SUPPORTS_OPEN_FILE_DETECTION:
         # pytest_runtest_setup, so therefore won't have an
         # "open_files" member
         if (not item.config.getvalue('open_files') or
-            not hasattr(item, 'open_files')):
+                not hasattr(item, 'open_files')):
             return
 
         start_open_files = item.open_files
@@ -109,31 +279,42 @@ if SUPPORTS_OPEN_FILE_DETECTION:
                 not_closed.add(filename)
 
         if len(not_closed):
-            msg = [u'File(s) not closed:']
+            msg = ['File(s) not closed:']
             for name in not_closed:
-                msg.append(u'  {0}'.format(
+                msg.append('  {0}'.format(
                     name.decode(sys.getfilesystemencoding())))
-            raise AssertionError(u'\n'.join(msg))
+            raise AssertionError('\n'.join(msg))
 
 
 def pytest_report_header(config):
-
     from .. import __version__
 
+    stdoutencoding = sys.stdout.encoding or 'ascii'
+
     s = "\nRunning tests with Astropy version {0}.\n".format(__version__)
     s += "Running tests in {0}.\n\n".format(" ".join(config.args))
 
     from platform import platform
     plat = platform()
     if isinstance(plat, bytes):
-        if sys.stdout.encoding:
-            plat = plat.decode(sys.stdout.encoding)
-        else:
-            plat = plat.decode('ascii', 'replace')
+        plat = plat.decode(stdoutencoding, 'replace')
     s += "Platform: {0}\n\n".format(plat)
     s += "Executable: {0}\n\n".format(sys.executable)
     s += "Full Python Version: \n{0}\n\n".format(sys.version)
 
+    s += "encodings: sys: {0}, locale: {1}, filesystem: {2}".format(
+        sys.getdefaultencoding(),
+        locale.getpreferredencoding(),
+        sys.getfilesystemencoding())
+    if sys.version_info < (3, 3, 0):
+        s += ", unicode bits: {0}".format(
+            int(math.log(sys.maxunicode, 2)))
+    s += '\n'
+
+    s += "byteorder: {0}\n".format(sys.byteorder)
+    s += "float info: dig: {0.dig}, mant_dig: {0.dig}\n\n".format(
+        sys.float_info)
+
     import numpy
     s += "Numpy: {0}\n".format(numpy.__version__)
 
@@ -163,6 +344,9 @@ def pytest_report_header(config):
     if opts:
         s += "Using Astropy options: {0}.\n".format(" ".join(opts))
 
+    if not six.PY3:
+        s = s.encode(stdoutencoding, 'replace')
+
     return s
 
 
@@ -174,9 +358,6 @@ def modarg(request):
     Does nothing if we are inside the sphinx testing command, as it
     should have already done this for us.
     """
-    import os
-    import shutil
-    import tempfile
 
     # check if we're inside the distutils test command, which sets the
     # _ASTROPY_TEST_ builtin
@@ -195,7 +376,7 @@ def modarg(request):
         os.mkdir(os.path.join(os.environ['XDG_CACHE_HOME'], 'astropy'))
 
         def teardown():
-            #wipe the config/cache tmpdirs and restore the envars
+            # wipe the config/cache tmpdirs and restore the envars
             shutil.rmtree(os.environ['XDG_CONFIG_HOME'])
             shutil.rmtree(os.environ['XDG_CACHE_HOME'])
             if oldconfigdir is None:
diff --git a/astropy/tests/setup_package.py b/astropy/tests/setup_package.py
index 672a8a6..7081eb8 100644
--- a/astropy/tests/setup_package.py
+++ b/astropy/tests/setup_package.py
@@ -1,6 +1,11 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
+
 def get_package_data():
     return {
         'astropy.tests': ['coveragerc'],
         'astropy.tests.tests': ['data/open_file_detection.txt']}
+
+
+def requires_2to3():
+    return False
diff --git a/astropy/tests/test_logger.py b/astropy/tests/test_logger.py
index 687d054..e5f79cc 100644
--- a/astropy/tests/test_logger.py
+++ b/astropy/tests/test_logger.py
@@ -1,10 +1,15 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import imp
 import sys
 import warnings
 
-from .helper import pytest
+from .helper import pytest, catch_warnings
 from .. import log
 from ..logger import LoggingError, LOG_LEVEL
+from ..utils.exceptions import AstropyWarning, AstropyUserWarning
 
 
 # Save original values of hooks. These are not the system values, but the
@@ -22,9 +27,9 @@ except NameError:
 
 def setup_function(function):
 
-    # Reset hooks to original values
-    sys.excepthook = _excepthook
-    warnings.showwarning = _showwarning
+    # Reset modules to default
+    imp.reload(warnings)
+    imp.reload(sys)
 
     # Reset internal original hooks
     log._showwarning_orig = None
@@ -39,13 +44,7 @@ def setup_function(function):
     if log.exception_logging_enabled():
         log.disable_exception_logging()
 
-
-def teardown_module(function):
-
-    # Ensure that hooks are restored to original values
-    sys.excepthook = _excepthook
-    warnings.showwarning = _showwarning
-
+teardown_module = setup_function
 
 def test_warnings_logging_disable_no_enable():
     with pytest.raises(LoggingError) as e:
@@ -71,55 +70,69 @@ def test_warnings_logging_overridden():
 def test_warnings_logging():
 
     # Without warnings logging
-    with warnings.catch_warnings(record=True) as warn_list:
+    with catch_warnings() as warn_list:
         with log.log_to_list() as log_list:
-            warnings.warn("This is a warning")
+            warnings.warn("This is a warning", AstropyUserWarning)
     assert len(log_list) == 0
     assert len(warn_list) == 1
     assert warn_list[0].message.args[0] == "This is a warning"
 
     # With warnings logging
-    with warnings.catch_warnings(record=True) as warn_list:
+    with catch_warnings() as warn_list:
         log.enable_warnings_logging()
         with log.log_to_list() as log_list:
-            warnings.warn("This is a warning")
+            warnings.warn("This is a warning", AstropyUserWarning)
         log.disable_warnings_logging()
     assert len(log_list) == 1
     assert len(warn_list) == 0
     assert log_list[0].levelname == 'WARNING'
-    assert log_list[0].message == 'This is a warning'
+    assert log_list[0].message.startswith('This is a warning')
+    assert log_list[0].origin == 'astropy.tests.test_logger'
+
+    # With warnings logging (differentiate between Astropy and non-Astropy)
+    with catch_warnings() as warn_list:
+        log.enable_warnings_logging()
+        with log.log_to_list() as log_list:
+            warnings.warn("This is a warning", AstropyUserWarning)
+            warnings.warn("This is another warning, not from Astropy")
+        log.disable_warnings_logging()
+    assert len(log_list) == 1
+    assert len(warn_list) == 1
+    assert log_list[0].levelname == 'WARNING'
+    assert log_list[0].message.startswith('This is a warning')
     assert log_list[0].origin == 'astropy.tests.test_logger'
+    assert warn_list[0].message.args[0] == "This is another warning, not from Astropy"
 
     # Without warnings logging
-    with warnings.catch_warnings(record=True) as warn_list:
+    with catch_warnings() as warn_list:
         with log.log_to_list() as log_list:
-            warnings.warn("This is a warning")
+            warnings.warn("This is a warning", AstropyUserWarning)
     assert len(log_list) == 0
     assert len(warn_list) == 1
     assert warn_list[0].message.args[0] == "This is a warning"
 
 
 def test_warnings_logging_with_custom_class():
-    class CustomWarningClass(Warning):
+    class CustomAstropyWarningClass(AstropyWarning):
         pass
 
     # With warnings logging
-    with warnings.catch_warnings(record=True) as warn_list:
+    with catch_warnings() as warn_list:
         log.enable_warnings_logging()
         with log.log_to_list() as log_list:
-            warnings.warn("This is a warning", CustomWarningClass)
+            warnings.warn("This is a warning", CustomAstropyWarningClass)
         log.disable_warnings_logging()
     assert len(log_list) == 1
     assert len(warn_list) == 0
     assert log_list[0].levelname == 'WARNING'
-    assert log_list[0].message == 'CustomWarningClass: This is a warning'
+    assert log_list[0].message.startswith('CustomAstropyWarningClass: This is a warning')
     assert log_list[0].origin == 'astropy.tests.test_logger'
 
 
 def test_warning_logging_with_io_votable_warning():
     from ..io.votable.exceptions import W02, vo_warn
 
-    with warnings.catch_warnings(record=True) as warn_list:
+    with catch_warnings() as warn_list:
         log.enable_warnings_logging()
         with log.log_to_list() as log_list:
             vo_warn(W02, ('a', 'b'))
@@ -127,8 +140,8 @@ def test_warning_logging_with_io_votable_warning():
     assert len(log_list) == 1
     assert len(warn_list) == 0
     assert log_list[0].levelname == 'WARNING'
-    assert log_list[0].message == ("W02: ?:?:?: W02: a attribute 'b' is "
-                                   "invalid.  Must be a standard XML id")
+    assert log_list[0].message.startswith(("W02: ?:?:?: W02: a attribute 'b' is "
+                                           "invalid.  Must be a standard XML id"))
     assert log_list[0].origin == 'astropy.tests.test_logger'
 
 
@@ -147,7 +160,7 @@ def test_exception_logging_enable_twice():
 
 # You can't really override the exception handler in IPython this way, so
 # this test doesn't really make sense in the IPython context.
- at pytest.mark.skipif("ip is not None")
+ at pytest.mark.skipif(str("ip is not None"))
 def test_exception_logging_overridden():
     log.enable_exception_logging()
     sys.excepthook = lambda: None
@@ -156,7 +169,7 @@ def test_exception_logging_overridden():
     assert e.value.args[0] == 'Cannot disable exception logging: sys.excepthook was not set by this logger, or has been overridden'
 
 
- at pytest.mark.xfail("ip is not None")
+ at pytest.mark.xfail(str("ip is not None"))
 def test_exception_logging():
 
     # Without exception logging
@@ -182,7 +195,7 @@ def test_exception_logging():
         assert False  # exception should have been raised
     assert len(log_list) == 1
     assert log_list[0].levelname == 'ERROR'
-    assert log_list[0].message == 'Exception: This is an Exception'
+    assert log_list[0].message.startswith('Exception: This is an Exception')
     assert log_list[0].origin == 'astropy.tests.test_logger'
 
     # Without exception logging
@@ -198,7 +211,7 @@ def test_exception_logging():
     assert len(log_list) == 0
 
 
- at pytest.mark.xfail("ip is not None")
+ at pytest.mark.xfail(str("ip is not None"))
 def test_exception_logging_origin():
     # The point here is to get an exception raised from another location
     # and make sure the error's origin is reported correctly
@@ -257,22 +270,22 @@ def test_log_to_list(level):
     # Check list content
 
     assert log_list[0].levelname == 'ERROR'
-    assert log_list[0].message == 'Error message'
+    assert log_list[0].message.startswith('Error message')
     assert log_list[0].origin == 'astropy.tests.test_logger'
 
     if len(log_list) >= 2:
         assert log_list[1].levelname == 'WARNING'
-        assert log_list[1].message == 'Warning message'
+        assert log_list[1].message.startswith('Warning message')
         assert log_list[1].origin == 'astropy.tests.test_logger'
 
     if len(log_list) >= 3:
         assert log_list[2].levelname == 'INFO'
-        assert log_list[2].msg == 'Information message'
+        assert log_list[2].message.startswith('Information message')
         assert log_list[2].origin == 'astropy.tests.test_logger'
 
     if len(log_list) >= 4:
         assert log_list[3].levelname == 'DEBUG'
-        assert log_list[3].msg == 'Debug message'
+        assert log_list[3].message.startswith('Debug message')
         assert log_list[3].origin == 'astropy.tests.test_logger'
 
 
@@ -345,16 +358,20 @@ def test_log_to_file(tmpdir, level):
 
     # Check list content
 
-    assert log_entries[0].strip().endswith(b"'astropy.tests.test_logger', 'ERROR', 'Error message'")
+    assert eval(log_entries[0].strip())[-3:] == (
+        'astropy.tests.test_logger', 'ERROR', 'Error message')
 
     if len(log_entries) >= 2:
-        assert log_entries[1].strip().endswith(b"'astropy.tests.test_logger', 'WARNING', 'Warning message'")
+        assert eval(log_entries[1].strip())[-3:] == (
+            'astropy.tests.test_logger', 'WARNING', 'Warning message')
 
     if len(log_entries) >= 3:
-        assert log_entries[2].strip().endswith(b"'astropy.tests.test_logger', 'INFO', 'Information message'")
+        assert eval(log_entries[2].strip())[-3:] == (
+            'astropy.tests.test_logger', 'INFO', 'Information message')
 
     if len(log_entries) >= 4:
-        assert log_entries[3].strip().endswith(b"'astropy.tests.test_logger', 'DEBUG', 'Debug message'")
+        assert eval(log_entries[3].strip())[-3:] == (
+            'astropy.tests.test_logger', 'DEBUG', 'Debug message')
 
 
 def test_log_to_file_level(tmpdir):
@@ -373,7 +390,9 @@ def test_log_to_file_level(tmpdir):
     log_entries = log_file.readlines()
     log_file.close()
 
-    assert len(log_entries) == 1 and log_entries[0].strip().endswith(b"'ERROR', 'Error message'")
+    assert len(log_entries) == 1
+    assert eval(log_entries[0].strip())[-2:] == (
+        'ERROR', 'Error message')
 
 
 def test_log_to_file_origin1(tmpdir):
diff --git a/astropy/tests/tests/__init__.py b/astropy/tests/tests/__init__.py
index e69de29..800d82e 100644
--- a/astropy/tests/tests/__init__.py
+++ b/astropy/tests/tests/__init__.py
@@ -0,0 +1,2 @@
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
diff --git a/astropy/tests/tests/run_after_2to3.py b/astropy/tests/tests/run_after_2to3.py
index ecd8c60..9bb80ed 100644
--- a/astropy/tests/tests/run_after_2to3.py
+++ b/astropy/tests/tests/run_after_2to3.py
@@ -1,4 +1,6 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 
 # This module is not a test module, but is used as part of the
@@ -6,5 +8,5 @@
 def test_run_after_2to3():
     try:
         1 / 0
-    except ZeroDivisionError, e:
+    except ZeroDivisionError as e:
         pass
diff --git a/astropy/tests/tests/test_imports.py b/astropy/tests/tests/test_imports.py
index 067416b..4dafb21 100644
--- a/astropy/tests/tests/test_imports.py
+++ b/astropy/tests/tests/test_imports.py
@@ -1,4 +1,12 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+from ...extern import six
+
+import pkgutil
+import os
+import types
+
 
 def test_imports():
     """
@@ -6,17 +14,14 @@ def test_imports():
     dependencies that sneak through
     """
 
-    from os.path import split
-    from types import ModuleType
-    from pkgutil import get_loader, walk_packages
-
     from ...utils import find_current_module
 
     pkgornm = find_current_module(1).__name__.split('.')[0]
 
-    if isinstance(pkgornm, basestring):
-        package = get_loader(pkgornm).load_module(pkgornm)
-    elif isinstance(pkgornm, ModuleType) and '__init__' in pkgornm.__file__:
+    if isinstance(pkgornm, six.string_types):
+        package = pkgutil.get_loader(pkgornm).load_module(pkgornm)
+    elif (isinstance(pkgornm, types.ModuleType) and
+            '__init__' in pkgornm.__file__):
         package = pkgornm
     else:
         msg = 'test_imports is not determining a valid package/package name'
@@ -25,10 +30,20 @@ def test_imports():
     if hasattr(package, '__path__'):
         pkgpath = package.__path__
     elif hasattr(package, '__file__'):
-        pkgpath = split(package.__file__)[0]
+        pkgpath = os.path.split(package.__file__)[0]
     else:
         raise AttributeError('package to generate config items for does not '
                              'have __file__ or __path__')
 
-    for imper, nm, ispkg in walk_packages(pkgpath, package.__name__ + '.'):
+    prefix = package.__name__ + '.'
+    for imper, nm, ispkg in pkgutil.walk_packages(pkgpath, prefix):
         imper.find_module(nm)
+
+
+def test_toplevel_namespace():
+    import astropy
+    d = dir(astropy)
+    assert 'os' not in d
+    assert 'log' in d
+    assert 'test' in d
+    assert 'sys' not in d
diff --git a/astropy/tests/tests/test_open_file_detection.py b/astropy/tests/tests/test_open_file_detection.py
index 116a075..989e619 100644
--- a/astropy/tests/tests/test_open_file_detection.py
+++ b/astropy/tests/tests/test_open_file_detection.py
@@ -1,9 +1,13 @@
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 import sys
 
-from ...tests.helper import pytest
 from ...utils.data import get_pkg_data_filename
 
 fd = None
+
+
 def test_open_file_detection():
     global fd
     fd = open(get_pkg_data_filename('data/open_file_detection.txt'))
diff --git a/astropy/tests/tests/test_run_tests.py b/astropy/tests/tests/test_run_tests.py
index c58c0d2..6477408 100644
--- a/astropy/tests/tests/test_run_tests.py
+++ b/astropy/tests/tests/test_run_tests.py
@@ -1,4 +1,6 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 # test helper.run_tests function
 
diff --git a/astropy/tests/tests/test_skip_remote_data.py b/astropy/tests/tests/test_skip_remote_data.py
index 3a26dfd..d2b7f96 100644
--- a/astropy/tests/tests/test_skip_remote_data.py
+++ b/astropy/tests/tests/test_skip_remote_data.py
@@ -1,6 +1,8 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 # this test doesn't actually use any online data, it should just be skipped
 # by run_tests because it has the remote_data decorator.
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 from ..helper import remote_data
 from ..helper import pytest
diff --git a/astropy/time/core.py b/astropy/time/core.py
index 23944bb..46ec539 100644
--- a/astropy/time/core.py
+++ b/astropy/time/core.py
@@ -5,15 +5,26 @@ dates. Specific emphasis is placed on supporting time scales (e.g. UTC, TAI,
 UT1) and time representations (e.g. JD, MJD, ISO 8601) that are used in
 astronomy.
 """
-import sys
-import warnings
-import time
+
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import fnmatch
 import itertools
+import time
+
+from datetime import datetime
+
 import numpy as np
 
+from ..utils import deprecated, deprecated_attribute
+from ..utils.compat.misc import override__dir__
+from ..extern import six
+
 __all__ = ['Time', 'TimeDelta', 'TimeFormat', 'TimeJD', 'TimeMJD',
-           'TimeFromEpoch', 'TimeUnix', 'TimeCxcSec', 'TimeString',
-           'TimeISO', 'TimeISOT', 'TimeYearDayTime', 'TimeEpochDate',
+           'TimeFromEpoch', 'TimeUnix', 'TimeCxcSec', 'TimeGPS', 'TimePlotDate',
+           'TimeDatetime',
+           'TimeString', 'TimeISO', 'TimeISOT', 'TimeYearDayTime', 'TimeEpochDate',
            'TimeBesselianEpoch', 'TimeJulianEpoch', 'TimeDeltaFormat',
            'TimeDeltaSec', 'TimeDeltaJD', 'ScaleValueError',
            'OperandTypeError', 'TimeEpochDateString',
@@ -21,9 +32,11 @@ __all__ = ['Time', 'TimeDelta', 'TimeFormat', 'TimeJD', 'TimeMJD',
            'TIME_FORMATS', 'TIME_DELTA_FORMATS', 'TIME_SCALES',
            'TIME_DELTA_SCALES']
 
+__doctest_skip__ = ['TimePlotDate']
+
 try:
     # Not guaranteed available at setup time
-    from . import sofa_time
+    from . import erfa_time
 except ImportError:
     if not _ASTROPY_SETUP_:
         raise
@@ -60,7 +73,7 @@ class Time(object):
     """
     Represent and manipulate times and dates for astronomy.
 
-    A Time object is initialized with one or more times in the ``val``
+    A `Time` object is initialized with one or more times in the ``val``
     argument.  The input times in ``val`` must conform to the specified
     ``format`` and must correspond to the specified time ``scale``.  The
     optional ``val2`` time input should be supplied only for numeric input
@@ -72,13 +85,17 @@ class Time(object):
     val : sequence, str, number, or `~astropy.time.Time` object
         Value(s) to initialize the time or times.
     val2 : sequence, str, or number; optional
-        Value(s) to initialize the time or times
+        Value(s) to initialize the time or times.
     format : str, optional
         Format of input value(s)
     scale : str, optional
         Time scale of input value(s)
-    opt : dict, optional
-        options
+    precision : int, optional
+        Digits of precision in string representation of time
+    in_subfmt : str, optional
+        Subformat for inputting string times
+    out_subfmt : str, optional
+        Subformat for outputting string times
     lat : float, optional
         Earth latitude of observer (decimal degrees)
     lon : float, optional
@@ -87,6 +104,9 @@ class Time(object):
         Make a copy of the input values
     """
 
+    is_scalar = deprecated_attribute(name='is_scalar', since='0.3',
+                                     alternative='isscalar')
+
     _precision = 3  # Precision when for seconds as floating point
     _in_subfmt = '*'  # Select subformat for inputting string times
     _out_subfmt = '*'  # Select subformat for outputting string times
@@ -97,6 +117,10 @@ class Time(object):
     FORMATS = TIME_FORMATS
     """Dict of time formats"""
 
+    # Make sure that reverse arithmetic (e.g., TimeDelta.__rmul__)
+    # gets called over the __mul__ of Numpy arrays.
+    __array_priority__ = 1000
+
     def __new__(cls, val, val2=None, format=None, scale=None,
                 precision=None, in_subfmt=None, out_subfmt=None,
                 lat=0.0, lon=0.0, copy=False):
@@ -133,30 +157,48 @@ class Time(object):
         some basic input validation.
         """
 
-        # Coerce val into a 1-d array
-        val, val_ndim = _make_1d_array(val, copy)
-
-        # If val2 is None then replace with zeros of the same length
-        if val2 is None:
-            val2 = np.zeros(len(val), dtype=np.double)
-            val2_ndim = val_ndim
+        # check whether input is some form of list of Time objects,
+        # since these should be treated separately
+        try:
+            val0 = val[0]
+        except:
+            isiterable_of_times = False
+        else:
+            isiterable_of_times = isinstance(val0, self.__class__)
+
+        if isiterable_of_times:
+            if val2 is not None:
+                raise ValueError(
+                    'non-None second value for list of {0!r} objects'
+                    .format(self.__class__.__name__))
+            self.isscalar = False
         else:
-            val2, val2_ndim = _make_1d_array(val2, copy)
+            # Coerce val into a 1-d array
+            val, val_ndim = _make_1d_array(val, copy)
 
-        # Consistency checks
-        if len(val) != len(val2):
-            raise ValueError('Input val and val2 must match in length')
+            self.isscalar = (val_ndim == 0)
 
-        self.is_scalar = (val_ndim == 0)
-        if val_ndim != val2_ndim:
-            raise ValueError('Input val and val2 must have same dimensions')
+            # If val2 is not None, ensure consistency
+            if val2 is not None:
+                val2, val2_ndim = _make_1d_array(val2, copy)
 
-        if scale is not None and scale not in self.SCALES:
-            raise ScaleValueError("Scale {0} is not in the allowed scales {1}"
-                                  .format(repr(scale), sorted(self.SCALES)))
+                if val_ndim != val2_ndim:
+                    raise ValueError('Input val and val2 must have same '
+                                     'dimensions')
+
+                if len(val) != len(val2):
+                    raise ValueError('Input val and val2 must match in length')
+
+        if scale is not None:
+            if not (isinstance(scale, six.string_types) and
+                    scale.lower() in self.SCALES):
+                raise ScaleValueError("Scale {0} is not in the allowed scales "
+                                      "{1}".format(repr(scale),
+                                                   sorted(self.SCALES)))
 
         # Parse / convert input values into internal jd1, jd2 based on format
-        self._format, self._time = self._get_time_fmt(val, val2, format, scale)
+        self._time = self._get_time_fmt(val, val2, format, scale)
+        self._format = self._time.name
 
     def _get_time_fmt(self, val, val2, format, scale):
         """
@@ -164,42 +206,67 @@ class Time(object):
         the corresponding TimeFormat class to convert the input values into
         the internal jd1 and jd2.
 
-        If format is None and the input is a string-type array then guess
-        available string formats and stop when one matches.
+        If format is None and the input is a string-type or object array then guess
+        available formats and stop when one matches.
         """
 
-        if format is None and val.dtype.kind in ('S', 'U'):
+        if format is None and (isinstance(val[0], self.__class__) or
+                               val.dtype.kind in ('S', 'U', 'O')):
             formats = [(name, cls) for name, cls in self.FORMATS.items()
-                       if issubclass(cls, TimeString)]
-            err_msg = 'any formats that can interpret strings {0}'.format(
-                      [name for name, cls in formats])
-        elif format not in self.FORMATS:
+                       if issubclass(cls, TimeUnique)]
+            err_msg = 'any of the formats where the format keyword is optional {0}'.format(
+                [name for name, cls in formats])
+        elif not (isinstance(format, six.string_types) and
+                  format.lower() in self.FORMATS):
             if format is None:
                 raise ValueError("No time format was given, and the input is "
-                                 "not string-like")
+                                 "not unique")
             else:
                 raise ValueError("Format {0} is not one of the allowed "
-                    "formats {1}".format(repr(format), sorted(self.FORMATS)))
+                                 "formats {1}".format(repr(format),
+                                                      sorted(self.FORMATS)))
         else:
             formats = [(format, self.FORMATS[format])]
             err_msg = 'the format class {0}'.format(format)
 
         for format, FormatClass in formats:
             try:
-                return format, FormatClass(val, val2, scale, self.precision,
-                                           self.in_subfmt, self.out_subfmt)
+                return FormatClass(val, val2, scale, self.precision,
+                                   self.in_subfmt, self.out_subfmt)
             except (ValueError, TypeError):
                 pass
         else:
             raise ValueError('Input values did not match {0}'.format(err_msg))
 
+    @classmethod
+    def now(cls):
+        """
+        Creates a new object corresponding to the instant in time this
+        method is called.
+
+        .. note::
+            "Now" is determined using the `datetime.utcnow` function, so
+            its accuracy and precision is determined by that function.
+            Generally that means it is set by the accuracy of your
+            system clock.
+
+        Returns
+        -------
+        nowtime
+            A new `Time` object (or a subclass of `Time` if this is called from
+            such a subclass) at the current time.
+        """
+        # call `utcnow` immediately to be sure it's ASAP
+        dtnow = datetime.utcnow()
+        return cls(val=dtnow, format='datetime', scale='utc')
+
     @property
     def format(self):
         """Time format"""
         return self._format
 
     def __repr__(self):
-        return ("<{0} object: scale='{1}' format='{2}' vals={3}>"
+        return ("<{0} object: scale='{1}' format='{2}' value={3}>"
                 .format(self.__class__.__name__, self.scale, self.format,
                         getattr(self, self.format)))
 
@@ -237,7 +304,7 @@ class Time(object):
 
         # Transform the jd1,2 pairs through the chain of scale xforms.
         jd1, jd2 = self._time.jd1, self._time.jd2
-        for sys1, sys2 in itertools.izip(xforms[:-1], xforms[1:]):
+        for sys1, sys2 in six.moves.zip(xforms[:-1], xforms[1:]):
             # Some xforms require an additional delta_ argument that is
             # provided through Time methods.  These values may be supplied by
             # the user or computed based on available approximations.  The
@@ -254,7 +321,7 @@ class Time(object):
                     args.append(get_dt(jd1, jd2))
                     break
 
-            conv_func = getattr(sofa_time, sys1 + '_' + sys2)
+            conv_func = getattr(erfa_time, sys1 + '_' + sys2)
             jd1, jd2 = conv_func(*args)
         self._time = self.FORMATS[self.format](jd1, jd2, scale, self.precision,
                                                self.in_subfmt, self.out_subfmt,
@@ -285,7 +352,7 @@ class Time(object):
 
     @in_subfmt.setter
     def in_subfmt(self, val):
-        if not isinstance(val, basestring):
+        if not isinstance(val, six.string_types):
             raise ValueError('in_subfmt attribute must be a string')
         self._in_subfmt = val
 
@@ -298,12 +365,19 @@ class Time(object):
 
     @out_subfmt.setter
     def out_subfmt(self, val):
-        if not isinstance(val, basestring):
+        if not isinstance(val, six.string_types):
             raise ValueError('out_subfmt attribute must be a string')
         self._out_subfmt = val
 
-    def _shaped_like_input(self, vals):
-        return (vals[0].tolist() if self.is_scalar else vals)
+    def _shaped_like_input(self, values):
+        if self.isscalar:
+            value0 = values[0]
+            try:
+                return value0.tolist()
+            except AttributeError:
+                return value0
+        else:
+            return values
 
     @property
     def jd1(self):
@@ -320,14 +394,20 @@ class Time(object):
         return self._shaped_like_input(self._time.jd2)
 
     @property
-    def val(self):
+    def value(self):
         """Time value(s) in current format"""
-        return self._shaped_like_input(self._time.vals)
+        return self._shaped_like_input(self._time.value)
 
     @property
+    @deprecated("0.3", name="val", alternative="value")
+    def val(self):
+        return self.value
+
+    @property
+    @deprecated("0.3", name="vals", alternative="value")
     def vals(self):
         """Time values in current format as a numpy array"""
-        return self._time.vals
+        return self.value
 
     def copy(self, format=None):
         """
@@ -383,11 +463,18 @@ class Time(object):
         tm: Time object
             Replica of this object
         """
-        tm = self.__class__(self._time.jd1, self._time.jd2,
-                            format='jd', scale=self.scale, copy=copy)
-
+        # To avoid recalculating integer day + fraction, no longer just
+        # instantiate a new class instance, but rather do the steps by hand.
+        # This also avoids quite a bit of unnecessary work in __init__
+        ###  tm = self.__class__(self._time.jd1, self._time.jd2,
+        ###                      format='jd', scale=self.scale, copy=copy)
+        tm = super(Time, self.__class__).__new__(self.__class__)
+        tm._time = TimeJD(self._time.jd1.copy() if copy else self._time.jd1,
+                          self._time.jd2.copy() if copy else self._time.jd2,
+                          self.scale, self.precision,
+                          self.in_subfmt, self.out_subfmt, from_jd=True)
         # Optional or non-arg attributes
-        attrs = ('is_scalar', '_delta_ut1_utc', '_delta_tdb_tt',
+        attrs = ('isscalar', '_delta_ut1_utc', '_delta_tdb_tt',
                  'lat', 'lon', 'precision', 'in_subfmt', 'out_subfmt')
         for attr in attrs:
             try:
@@ -409,14 +496,14 @@ class Time(object):
             scale = NewFormat.required_scale
             new = getattr(tm, scale)  # self JDs converted to scale
             tm._time = NewFormat(new._time.jd1, new._time.jd2, scale,
-                                   tm.precision,
-                                   tm.in_subfmt, tm.out_subfmt,
-                                   from_jd=True)
+                                 tm.precision,
+                                 tm.in_subfmt, tm.out_subfmt,
+                                 from_jd=True)
         else:
             tm._time = NewFormat(tm._time.jd1, tm._time.jd2,
-                                   tm.scale, tm.precision,
-                                   tm.in_subfmt, tm.out_subfmt,
-                                   from_jd=True)
+                                 tm.scale, tm.precision,
+                                 tm.in_subfmt, tm.out_subfmt,
+                                 from_jd=True)
         tm._format = format
 
         return tm
@@ -437,20 +524,29 @@ class Time(object):
         """
         return self.copy()
 
-    def _getAttributeNames(self):
-        """
-        Add dynamic attribute names for IPython completer.
-        """
-        return list(self.SCALES) + self.FORMATS.keys()
+    def __getitem__(self, item):
+        if self.isscalar:
+            raise TypeError('scalar {0!r} object is not subscriptable.'.format(
+                self.__class__.__name__))
+        tm = self.replicate()
+        jd1 = self._time.jd1[item]
+        tm.isscalar = jd1.ndim == 0
+
+        def keepasarray(x, isscalar=tm.isscalar):
+            return np.array([x]) if isscalar else x
+        tm._time.jd1 = keepasarray(jd1)
+        tm._time.jd2 = keepasarray(self._time.jd2[item])
+        attrs = ('_delta_ut1_utc', '_delta_tdb_tt')
+        for attr in attrs:
+            if hasattr(self, attr):
+                val = getattr(self, attr)
+                setattr(tm, attr, keepasarray(val[item]))
+        return tm
 
     def __getattr__(self, attr):
         """
         Get dynamic attributes to output format or do timescale conversion.
         """
-        # The following is needed for the IPython completer
-        if attr == 'trait_names':
-            return []
-
         if attr in self.SCALES:
             tm = self.replicate()
             tm._set_scale(attr)
@@ -458,12 +554,23 @@ class Time(object):
 
         elif attr in self.FORMATS:
             tm = self.replicate(format=attr)
-            return (tm.vals[0].tolist() if self.is_scalar else tm.vals)
+            if self.isscalar:
+                out = tm._time.value[0]
+                # convert to native python for non-object dtypes
+                if tm._time.value.dtype.kind != 'O':
+                    out = out.tolist()
+            else:
+                out = tm.value
+            return out
 
         else:
             # Should raise AttributeError
             return self.__getattribute__(attr)
 
+    @override__dir__
+    def __dir__(self):
+        return set(list(self.SCALES) + list(six.iterkeys(self.FORMATS)))
+
     def _match_len(self, val):
         """
         Ensure that `val` is matched to length of self.  If val has length 1
@@ -472,28 +579,87 @@ class Time(object):
         val, ndim = _make_1d_array(val, copy=True)  # be conservative and copy
         if len(val) == 1:
             oval = val
-            val = np.empty(len(self), dtype=np.double)
+            val = np.empty(len(self._time), dtype=np.double)
             val[:] = oval
-        elif len(val) != len(self):
+        elif len(val) != len(self._time):
             raise ValueError('Attribute length must match Time object length')
         return val
 
-    # Property for SOFA DUT arg = UT1 - UTC
+    def get_delta_ut1_utc(self, iers_table=None, return_status=False):
+        """Find UT1 - UTC differences by interpolating in IERS Table.
+
+        Parameters
+        ----------
+        iers_table : `~astropy.utils.iers.IERS` table, optional
+            Table containing UT1-UTC differences from IERS Bulletins A and/or B
+            If None, use default version (see `~astropy.utils.iers`)
+        return_status : bool
+            Whether to return status values.  If `False` (default),
+            iers raises `IndexError` if any time is out of the range covered
+            by the IERS table.
+
+        Returns
+        -------
+        ut1_utc: float or float array
+            UT1-UTC, interpolated in IERS Table
+        status: int or int array
+            Status values (if `return_status`=`True`)::
+            `~astropy.utils.iers.FROM_IERS_B`
+            `~astropy.utils.iers.FROM_IERS_A`
+            `~astropy.utils.iers.FROM_IERS_A_PREDICTION`
+            `~astropy.utils.iers.TIME_BEFORE_IERS_RANGE`
+            `~astropy.utils.iers.TIME_BEYOND_IERS_RANGE`
+
+        Notes
+        -----
+        In normal usage, UT1-UTC differences are calculated automatically
+        on the first instance ut1 is needed.
+
+        Examples
+        --------
+        To check in code whether any times are before the IERS table range::
+
+            >>> from astropy.utils.iers import TIME_BEFORE_IERS_RANGE
+            >>> t = Time(['1961-01-01', '2000-01-01'], scale='utc')
+            >>> delta, status = t.get_delta_ut1_utc(return_status=True)
+            >>> status == TIME_BEFORE_IERS_RANGE
+            array([ True, False], dtype=bool)
+
+        To use an updated IERS A bulletin to calculate UT1-UTC
+        (see also `~astropy.utils.iers`)::
+
+            >>> from astropy.utils.iers import IERS_A, IERS_A_URL
+            >>> from astropy.utils.data import download_file
+            >>> iers_a_file = download_file(IERS_A_URL,
+            ...                             cache=True)        # doctest: +SKIP
+            >>> iers_a = IERS_A.open(iers_a_file)              # doctest: +SKIP
+            >>> t.delta_ut1_utc = t.get_delta_ut1_utc(iers_a)  # doctest: +SKIP
+
+        The delta_ut1_utc property will be used to calculate t.ut1;
+        raises IndexError if any of the times is out of range.
+
+        """
+        if iers_table is None:
+            from ..utils.iers import IERS
+            iers_table = IERS.open()
+
+        return iers_table.ut1_utc(self.utc, return_status=return_status)
+
+    # Property for ERFA DUT arg = UT1 - UTC
     def _get_delta_ut1_utc(self, jd1=None, jd2=None):
         """
-        Get SOFA DUT arg = UT1 - UTC.  This getter takes optional jd1 and
+        Get ERFA DUT arg = UT1 - UTC.  This getter takes optional jd1 and
         jd2 args because it gets called that way when converting time scales.
-        The current code ignores these, but when the IERS table is interpolated
-        by this module they will be used.
+        If delta_ut1_utc is not yet set, this will interpolate them from the
+        the IERS table.
         """
 
         # Sec. 4.3.1: the arg DUT is the quantity delta_UT1 = UT1 - UTC in
-        # seconds. It can be obtained from tables published by the IERS.
-        # TODO - get that table when needed and interpolate or whatever.
+        # seconds. It is obtained from tables published by the IERS.
         if not hasattr(self, '_delta_ut1_utc'):
-            # Exception until the IERS table is available to the package
-            raise ValueError('Must set the delta_ut1_utc attribute in '
-                             'order to do the scale transform.')
+            from ..utils.iers import IERS
+            iers_table = IERS.open()
+            self._set_delta_ut1_utc(iers_table.ut1_utc(jd1, jd2))
 
         return self._delta_ut1_utc
 
@@ -505,7 +671,7 @@ class Time(object):
     delta_ut1_utc = property(_get_delta_ut1_utc, _set_delta_ut1_utc)
     """UT1 - UTC time scale offset"""
 
-    # Property for SOFA DTR arg = TDB - TT
+    # Property for ERFA DTR arg = TDB - TT
     def _get_delta_tdb_tt(self, jd1=None, jd2=None):
         if not hasattr(self, '_delta_tdb_tt'):
             # If jd1 and jd2 are not provided (which is the case for property
@@ -523,19 +689,19 @@ class Time(object):
             # First go from the current input time (which is either
             # TDB or TT) to an approximate UTC.  Since TT and TDB are
             # pretty close (few msec?), assume TT.
-            njd1, njd2 = sofa_time.tt_tai(jd1, jd2)
-            njd1, njd2 = sofa_time.tai_utc(njd1, njd2)
+            njd1, njd2 = erfa_time.tt_tai(jd1, jd2)
+            njd1, njd2 = erfa_time.tai_utc(njd1, njd2)
             # TODO: actually need to go to UT1 which needs DUT.
             ut = njd1 + njd2
 
             # Compute geodetic params needed for d_tdb_tt()
             phi = np.radians(self.lat)
             elon = np.radians(self.lon)
-            xyz = sofa_time.iau_gd2gc(1, elon, phi, 0.0)
+            xyz = erfa_time.era_gd2gc(1, elon, phi, 0.0)
             u = np.sqrt(xyz[0] ** 2 + xyz[1] ** 2)
             v = xyz[2]
 
-            self._delta_tdb_tt = sofa_time.d_tdb_tt(jd1, jd2, ut, elon, u, v)
+            self._delta_tdb_tt = erfa_time.d_tdb_tt(jd1, jd2, ut, elon, u, v)
 
         return self._delta_tdb_tt
 
@@ -548,14 +714,19 @@ class Time(object):
     """TDB - TT time scale offset"""
 
     def __len__(self):
-        return len(self._time)
+        return len(self.jd1)
 
     def __sub__(self, other):
         self_tai = self.tai
         if not isinstance(other, Time):
-            raise OperandTypeError(self, other)
+            try:
+                other = TimeDelta(other)
+            except:
+                raise OperandTypeError(self, other)
 
         other_tai = other.tai
+        # Note: jd1 is exact, and jd2 carry-over is done in
+        # Time/TimeDelta initialisation
         jd1 = self_tai.jd1 - other_tai.jd1
         jd2 = self_tai.jd2 - other_tai.jd2
 
@@ -568,20 +739,27 @@ class Time(object):
         self_time = not self_delta  # only 2 possibilities
         other_time = not other_delta
         if (self_delta and other_delta) or (self_time and other_time):
-            return TimeDelta(jd1, jd2, format='jd')
+            out = TimeDelta(jd1, jd2, format='jd')
+            if self_delta:
+                out = out.replicate(format=self.format)
+            return out
         elif (self_time and other_delta):
-            self_tai._time.jd1 = jd1
-            self_tai._time.jd2 = jd2
-            return getattr(self_tai, self.scale)
+            tai = Time(jd1, jd2, format='jd', scale='tai', copy=False)
+            return getattr(tai.replicate(format=self.format), self.scale)
         else:
             raise OperandTypeError(self, other)
 
     def __add__(self, other):
         self_tai = self.tai
         if not isinstance(other, Time):
-            raise OperandTypeError(self, other)
+            try:
+                other = TimeDelta(other)
+            except:
+                raise OperandTypeError(self, other)
 
         other_tai = other.tai
+        # Note: jd1 is exact, and jd2 carry-over is done in
+        # Time/TimeDelta initialisation
         jd1 = self_tai.jd1 + other_tai.jd1
         jd2 = self_tai.jd2 + other_tai.jd2
 
@@ -594,16 +772,54 @@ class Time(object):
         self_time = not self_delta  # only 2 possibilities
         other_time = not other_delta
         if (self_delta and other_delta):
-            return TimeDelta(jd1, jd2, format='jd')
+            out = TimeDelta(jd1, jd2, format='jd')
+            return out.replicate(format=self.format)
         elif (self_time and other_delta) or (self_delta and other_time):
-            tai = self_tai if self_time else other_tai
+            format = self.format if self_time else other.format
             scale = self.scale if self_time else other.scale
-            tai._time.jd1 = jd1
-            tai._time.jd2 = jd2
-            return getattr(tai, scale)
+            tai = Time(jd1, jd2, format='jd', scale='tai', copy=False)
+            return getattr(tai.replicate(format=format), scale)
         else:
             raise OperandTypeError(self, other)
 
+    def __radd__(self, other):
+        return self.__add__(other)
+
+    def __rsub__(self, other):
+        out = self.__sub__(other)
+        return -out
+
+    def _tai_difference(self, other):
+        """If other is of same class as self, return difference in TAI.
+        Otherwise, raise OperandTypeError.
+        """
+        if other.__class__ is not self.__class__:
+            try:
+                other = self.__class__(other)
+            except:
+                raise OperandTypeError(self, other)
+        self_tai = self.tai
+        other_tai = other.tai
+        return (self_tai.jd1 - other_tai.jd1) + (self_tai.jd2 - other_tai.jd2)
+
+    def __lt__(self, other):
+        return self._tai_difference(other) < 0.
+
+    def __le__(self, other):
+        return self._tai_difference(other) <= 0.
+
+    def __eq__(self, other):
+        return self._tai_difference(other) == 0.
+
+    def __ne__(self, other):
+        return self._tai_difference(other) != 0.
+
+    def __gt__(self, other):
+        return self._tai_difference(other) > 0.
+
+    def __ge__(self, other):
+        return self._tai_difference(other) >= 0.
+
 
 class TimeDelta(Time):
     """
@@ -623,6 +839,8 @@ class TimeDelta(Time):
         Data to initialize table.
     format : str, optional
         Format of input value(s)
+    scale : str, optional
+        Time scale of input value(s)
     copy : bool, optional
         Make a copy of the input values
     """
@@ -636,8 +854,103 @@ class TimeDelta(Time):
         # Note: scale is not used but is needed because of the inheritance
         # from Time.
         if not isinstance(val, self.__class__):
+            if format is None:
+                try:
+                    val = val.to('day')
+                    if val2 is not None:
+                        val2 = val2.to('day')
+                except:
+                    raise ValueError('Only Quantities with Time units can '
+                                     'be used to initiate {0} instances .'
+                                     .format(self.__class__.__name__))
+                format = 'jd'
+
             self._init_from_vals(val, val2, format, 'tai', copy)
 
+    def __neg__(self):
+        """Negation of a `TimeDelta` object."""
+        new = self.copy()
+        new._time.jd1 = -self._time.jd1
+        new._time.jd2 = -self._time.jd2
+        return new
+
+    def __abs__(self):
+        """Absolute value of a `TimeDelta` object."""
+        jd1, jd2 = self._time.jd1, self._time.jd2
+        negative = jd1 + jd2 < 0
+        new = self.copy()
+        new._time.jd1 = np.where(negative, -jd1, jd1)
+        new._time.jd2 = np.where(negative, -jd2, jd2)
+        return new
+
+    def __mul__(self, other):
+        """Multiplication of `TimeDelta` objects by numbers/arrays."""
+        # check needed since otherwise the self.jd1 * other multiplication
+        # would enter here again (via __rmul__)
+        if isinstance(other, Time):
+            raise OperandTypeError(self, other)
+
+        try:   # convert to straight float if dimensionless quantity
+            other = other.to(1)
+        except:
+            pass
+
+        try:
+            jd1, jd2 = day_frac(self.jd1, self.jd2, factor=other)
+        except Exception as err:  # try downgrading self to a quantity
+            try:
+                return self.to('day') * other
+            except:
+                raise err
+
+        out = TimeDelta(jd1, jd2, format='jd')
+        if self.format != 'jd':
+            out = out.replicate(format=self.format)
+        return out
+
+    def __rmul__(self, other):
+        """Multiplication of numbers/arrays with `TimeDelta` objects."""
+        return self.__mul__(other)
+
+    def __div__(self, other):
+        """Division of `TimeDelta` objects by numbers/arrays."""
+        return self.__truediv__(other)
+
+    def __rdiv__(self, other):
+        """Division by `TimeDelta` objects of numbers/arrays."""
+        return self.__rtruediv__(other)
+
+    def __truediv__(self, other):
+        """Division of `TimeDelta` objects by numbers/arrays."""
+        # cannot do __mul__(1./other) as that looses precision
+        try:
+            other = other.to(1)
+        except:
+            pass
+
+        try:   # convert to straight float if dimensionless quantity
+            jd1, jd2 = day_frac(self.jd1, self.jd2, divisor=other)
+        except Exception as err:  # try downgrading self to a quantity
+            try:
+                return self.to('day') / other
+            except:
+                raise err
+
+        out = TimeDelta(jd1, jd2, format='jd')
+
+        if self.format != 'jd':
+            out = out.replicate(format=self.format)
+        return out
+
+    def __rtruediv__(self, other):
+        """Division by `TimeDelta` objects of numbers/arrays."""
+        return other / self.to('day')
+
+    def to(self, *args, **kwargs):
+        from astropy.units import day
+        return (self._shaped_like_input(self._time.jd1 + self._time.jd2) * day
+                ).to(*args, **kwargs)
+
 
 class TimeFormat(object):
     """
@@ -666,14 +979,12 @@ class TimeFormat(object):
         self.precision = precision
         self.in_subfmt = in_subfmt
         self.out_subfmt = out_subfmt
-        if len(val1) != len(val2):
-            raise ValueError('Input val1 and val2 must match in length')
 
         if from_jd:
             self.jd1 = val1
             self.jd2 = val2
         else:
-            self._check_val_type(val1, val2)
+            val1, val2 = self._check_val_type(val1, val2)
             self.set_jds(val1, val2)
 
     def __len__(self):
@@ -691,9 +1002,27 @@ class TimeFormat(object):
 
     def _check_val_type(self, val1, val2):
         """Input value validation, typically overridden by derived classes"""
-        if val1.dtype.type != np.double or val2.dtype.type != np.double:
+        try:
+            assert (val1.dtype == np.double and
+                    (val2 is None or val2.dtype == np.double))
+        except:
             raise TypeError('Input values for {0} class must be doubles'
-                             .format(self.name))
+                            .format(self.name))
+
+        if hasattr(val1, 'to'):
+            # set possibly scaled unit any quantities should be converted to
+            _unit = '{0!r}day'.format(getattr(self, 'unit', 1.))
+            val1 = val1.to(_unit).value
+            if val2 is not None:
+                val2 = val2.to(_unit).value
+        else:
+            if hasattr(val2, 'to'):
+                raise TypeError('Cannot mix float and Quantity inputs')
+
+        if val2 is None:
+            val2 = np.zeros_like(val1)
+
+        return val1, val2
 
     def _check_scale(self, scale):
         """
@@ -714,11 +1043,11 @@ class TimeFormat(object):
         if scale not in TIME_SCALES:
             if scale is None:
                 raise ScaleValueError("No scale value supplied but it is "
-                                    "required for class {0}"
-                                    .format(self.__class__.__name__))
+                                      "required for class {0}"
+                                      .format(self.__class__.__name__))
             raise ScaleValueError("Scale value '{0}' not in "
                                   "allowed values {1}"
-                                .format(scale, TIME_SCALES))
+                                  .format(scale, TIME_SCALES))
 
         return scale
 
@@ -730,10 +1059,10 @@ class TimeFormat(object):
         raise NotImplementedError
 
     @property
-    def vals(self):
+    def value(self):
         """
         Return time representation from internal jd1 and jd2.  Must be
-        provided by by derived classes.
+        provided by derived classes.
         """
         raise NotImplementedError
 
@@ -744,11 +1073,10 @@ class TimeJD(TimeFormat):
 
     def set_jds(self, val1, val2):
         self._check_scale(self._scale)  # Validate scale.
-        self.jd1 = val1
-        self.jd2 = val2
+        self.jd1, self.jd2 = day_frac(val1, val2)
 
     @property
-    def vals(self):
+    def value(self):
         return self.jd1 + self.jd2
 
 
@@ -757,16 +1085,16 @@ class TimeMJD(TimeFormat):
     name = 'mjd'
 
     def set_jds(self, val1, val2):
-        # TODO - this routine and vals should be Cythonized to follow the SOFA
+        # TODO - this routine and vals should be Cythonized to follow the ERFA
         # convention of preserving precision by adding to the larger of the two
         # values in a vectorized operation.  But in most practical cases the
         # first one is probably biggest.
         self._check_scale(self._scale)  # Validate scale.
-        self.jd1 = val1 + MJD_ZERO
-        self.jd2 = val2
+        self.jd1, self.jd2 = day_frac(val1, val2)
+        self.jd1 += MJD_ZERO
 
     @property
-    def vals(self):
+    def value(self):
         return (self.jd1 - MJD_ZERO) + self.jd2
 
 
@@ -800,8 +1128,15 @@ class TimeFromEpoch(TimeFormat):
         # is that every day is exactly 86400 seconds, so in principle this
         # is doing the math incorrectly, *except* that it matches the definition
         # of Unix time which does not include leap seconds.
-        jd1 = self.epoch.jd1 + val2 * self.unit
-        jd2 = self.epoch.jd2 + val1 * self.unit
+
+        # note: use divisor=1./self.unit, since this is either 1 or 1/86400,
+        # and 1/86400 is not exactly representable as a float64, so multiplying
+        # by that will cause rounding errors. (But inverting it as a float64
+        # recovers the exact number)
+        day, frac = day_frac(val1, val2, divisor=1. / self.unit)
+
+        jd1 = self.epoch.jd1 + day
+        jd2 = self.epoch.jd2 + frac
 
         # Create a temporary Time object corresponding to the current new (jd1, jd2) in
         # the epoch scale (e.g. UTC for TimeUnix) then convert that to the desired time
@@ -815,7 +1150,7 @@ class TimeFromEpoch(TimeFormat):
         self.jd2 = tm.jd2
 
     @property
-    def vals(self):
+    def value(self):
         # Create a temporary Time object corresponding to the parent Time, then transform
         # that to the epoch scale.  From there do the simple math to compute delta time
         # from the epoch in Julian days, and then in the desired output units
@@ -857,7 +1192,149 @@ class TimeCxcSec(TimeFromEpoch):
     epoch_format = 'iso'
 
 
-class TimeString(TimeFormat):
+class TimeGPS(TimeFromEpoch):
+    """GPS time: seconds from 1980-01-06 00:00:00 UTC
+
+    GPS time includes leap seconds.  For details, see
+    http://tycho.usno.navy.mil/gpstt.html
+    """
+    name = 'gps'
+    unit = 1.0 / SECS_PER_DAY  # in days (1 day == 86400 seconds)
+    epoch_val = '1980-01-06 00:00:19'
+    # above epoch is the same as Time('1980-01-06 00:00:00', scale='utc').tai
+    epoch_val2 = None
+    epoch_scale = 'tai'
+    epoch_format = 'iso'
+
+
+class TimePlotDate(TimeFromEpoch):
+    """
+    Matplotlib `~matplotlib.pyplot.plot_date` input: 1 + number of days from 0001-01-01 00:00:00 UTC
+
+    This can be used directly in the matplotlib `~matplotlib.pyplot.plot_date` function::
+
+      >>> import matplotlib.pyplot as plt
+      >>> jyear = np.linspace(2000, 2001, 20)
+      >>> t = Time(jyear, format='jyear', scale='utc')
+      >>> plt.plot_date(t.plot_date, jyear)
+      >>> plt.gcf().autofmt_xdate()  # orient date labels at a slant
+      >>> plt.draw()
+    """
+    # This corresponds to the zero reference time for matplotlib plot_date().
+    # Note that TAI and UTC are equivalent at the reference time, but
+    # specifying epoch_scale = 'utc' here generates WARNINGS when the
+    # class is first used.  Just use 'tai' instead.
+    name = 'plot_date'
+    unit = 1.0
+    epoch_val = 1721424.5  # Time('0001-01-01 00:00:00', scale='tai').jd - 1
+    epoch_val2 = None
+    epoch_scale = 'tai'
+    epoch_format = 'jd'
+
+
+class TimeUnique(TimeFormat):
+    """
+    Base class for time formats that can uniquely create a time object
+    without requiring an explicit format specifier.  This class does
+    nothing but provide inheritance to identify a class as unique.
+    """
+    pass
+
+
+class TimeAstropyTime(TimeUnique):
+    """
+    Instantiate date from an Astropy Time object (or list thereof).
+
+    This is purely for instantiating from a Time object.  The output
+    format is the same as the first time instance.
+    """
+    name = 'astropy_time'
+
+    def __new__(cls, val1, val2, scale, precision,
+                in_subfmt, out_subfmt, from_jd=False):
+        """
+        Use __new__ instead of __init__ to output a class instance that
+        is the same as the class of the first Time object in the list.
+        """
+
+        if not all(isinstance(val, Time) for val in val1):
+            raise TypeError('Input values for {0} class must be datetime objects'
+                            .format(cls.name))
+
+        if scale is None:
+            scale = val1[0].scale
+        jd1 = np.concatenate([getattr(val, scale)._time.jd1 for val in val1])
+        jd2 = np.concatenate([getattr(val, scale)._time.jd2 for val in val1])
+        OutTimeFormat = val1[0]._time.__class__
+        self = OutTimeFormat(jd1, jd2, scale, precision, in_subfmt, out_subfmt, from_jd=True)
+
+        return self
+
+
+class TimeDatetime(TimeUnique):
+    """
+    Represent date as Python standard library `~datetime.datetime` object
+
+    Example::
+
+      >>> from datetime import datetime
+      >>> t = Time(datetime(2000, 1, 2, 12, 0, 0), scale='utc')
+      >>> t.iso
+      '2000-01-02 12:00:00.000'
+      >>> t.tt.datetime
+      datetime.datetime(2000, 1, 2, 12, 1, 4, 184000)
+    """
+    name = 'datetime'
+
+    def _check_val_type(self, val1, val2):
+        # Note: don't care about val2 for this class
+        try:
+            assert all(isinstance(val, datetime) for val in val1)
+        except:
+            raise TypeError('Input values for {0} class must be '
+                            'datetime objects'.format(self.name))
+        return val1, None
+
+    def set_jds(self, val1, val2):
+        """Convert datetime object contained in val1 to jd1, jd2"""
+        n_times = len(val1)
+        iy = np.empty(n_times, dtype=np.intc)
+        im = np.empty(n_times, dtype=np.intc)
+        id = np.empty(n_times, dtype=np.intc)
+        ihr = np.empty(n_times, dtype=np.intc)
+        imin = np.empty(n_times, dtype=np.intc)
+        dsec = np.empty(n_times, dtype=np.double)
+
+        # Iterate through the datetime objects
+        for i, val in enumerate(val1):
+            iy[i] = val.year
+            im[i] = val.month
+            id[i] = val.day
+            ihr[i] = val.hour
+            imin[i] = val.minute
+            dsec[i] = val.second + val.microsecond / 1e6
+
+        self.jd1, self.jd2 = erfa_time.dtf_jd(self.scale.upper().encode('utf8'),
+                                              iy, im, id, ihr, imin, dsec)
+
+    @property
+    def value(self):
+        iys, ims, ids, ihmsfs = erfa_time.jd_dtf(self.scale.upper()
+                                                 .encode('utf8'),
+                                                 6,  # precision = 6 for microseconds
+                                                 self.jd1, self.jd2)
+
+        out = np.empty(len(self), dtype=np.object)
+        idxs = itertools.count()
+        for idx, iy, im, id, ihmsf in six.moves.zip(idxs, iys, ims, ids, ihmsfs):
+            ihr, imin, isec, ifracsec = ihmsf
+            out[idx] = datetime(int(iy), int(im), int(id),
+                                int(ihr), int(imin), int(isec), int(ifracsec))
+
+        return out
+
+
+class TimeString(TimeUnique):
     """
     Base class for string-like time represetations.
 
@@ -867,10 +1344,13 @@ class TimeString(TimeFormat):
     This is a reference implementation can be made much faster with effort.
     """
     def _check_val_type(self, val1, val2):
-        if val1.dtype.kind not in ('S', 'U'):
+        # Note: don't care about val2 for these classes
+        try:
+            assert val1.dtype.kind in ('S', 'U')
+        except:
             raise TypeError('Input values for {0} class must be strings'
-                             .format(self.name))
-            # Note: don't care about val2 for these classes
+                            .format(self.name))
+        return val1, None
 
     def set_jds(self, val1, val2):
         """Parse the time strings contained in val1 and set jd1, jd2"""
@@ -913,7 +1393,7 @@ class TimeString(TimeFormat):
                 raise ValueError('Time {0} does not match {1} format'
                                  .format(timestr, self.name))
 
-        self.jd1, self.jd2 = sofa_time.dtf_jd(self.scale.upper().encode('utf8'),
+        self.jd1, self.jd2 = erfa_time.dtf_jd(self.scale.upper().encode('utf8'),
                                               iy, im, id, ihr, imin, dsec)
 
     def str_kwargs(self):
@@ -921,7 +1401,7 @@ class TimeString(TimeFormat):
         Generator that yields a dict of values corresponding to the
         calendar date and time for the internal JD values.
         """
-        iys, ims, ids, ihmsfs = sofa_time.jd_dtf(self.scale.upper()
+        iys, ims, ids, ihmsfs = erfa_time.jd_dtf(self.scale.upper()
                                                  .encode('utf8'),
                                                  self.precision,
                                                  self.jd1, self.jd2)
@@ -930,13 +1410,12 @@ class TimeString(TimeFormat):
         _, _, str_fmt = self._select_subfmts(self.out_subfmt)[0]
 
         if '{yday:' in str_fmt:
-            from datetime import datetime
             has_yday = True
         else:
             has_yday = False
             yday = None
 
-        for iy, im, id, ihmsf in itertools.izip(iys, ims, ids, ihmsfs):
+        for iy, im, id, ihmsf in six.moves.zip(iys, ims, ids, ihmsfs):
             ihr, imin, isec, ifracsec = ihmsf
             if has_yday:
                 yday = datetime(iy, im, id).timetuple().tm_yday
@@ -946,7 +1425,7 @@ class TimeString(TimeFormat):
                    'fracsec': int(ifracsec), 'yday': yday}
 
     @property
-    def vals(self):
+    def value(self):
         # Select the first available subformat based on current
         # self.out_subfmt
         subfmts = self._select_subfmts(self.out_subfmt)
@@ -960,7 +1439,7 @@ class TimeString(TimeFormat):
         # output could change, e.g. year rolls from 999 to 1000.
         outs = []
         for kwargs in self.str_kwargs():
-            outs.append(str_fmt.format(**kwargs))
+            outs.append(str(str_fmt.format(**kwargs)))
 
         return np.array(outs)
 
@@ -969,7 +1448,8 @@ class TimeString(TimeFormat):
         Return a list of subformats where name matches ``pattern`` using
         fnmatch.
         """
-        from fnmatch import fnmatchcase
+
+        fnmatchcase = fnmatch.fnmatchcase
         subfmts = [x for x in self.subfmts if fnmatchcase(x[0], pattern)]
         if len(subfmts) == 0:
             raise ValueError('No subformats match {0}'.format(pattern))
@@ -1055,12 +1535,13 @@ class TimeEpochDate(TimeFormat):
     """
     def set_jds(self, val1, val2):
         self._check_scale(self._scale)  # validate scale.
-        epoch_to_jd = getattr(sofa_time, self.epoch_to_jd)
-        self.jd1, self.jd2 = epoch_to_jd(val1 + val2)
+        epoch_to_jd = getattr(erfa_time, self.epoch_to_jd)
+        jd1, jd2 = epoch_to_jd(val1 + val2)
+        self.jd1, self.jd2 = day_frac(jd1, jd2)
 
     @property
-    def vals(self):
-        jd_to_epoch = getattr(sofa_time, self.jd_to_epoch)
+    def value(self):
+        jd_to_epoch = getattr(erfa_time, self.jd_to_epoch)
         return jd_to_epoch(self.jd1, self.jd2)
 
 
@@ -1070,10 +1551,20 @@ class TimeBesselianEpoch(TimeEpochDate):
     epoch_to_jd = 'besselian_epoch_jd'
     jd_to_epoch = 'jd_besselian_epoch'
 
+    def _check_val_type(self, val1, val2):
+        """Input value validation, typically overridden by derived classes"""
+        if hasattr(val1, 'to') and hasattr(val1, 'unit'):
+            raise ValueError("Cannot use Quantities for 'byear' format, "
+                             "as the interpretation would be ambiguous. "
+                             "Use float with Besselian year instead. ")
+
+        return super(TimeBesselianEpoch, self)._check_val_type(val1, val2)
+
 
 class TimeJulianEpoch(TimeEpochDate):
     """Julian Epoch year as floating point value(s) like 2000.0"""
     name = 'jyear'
+    unit = 365.25  # Length of the Julian year, for conversion to quantities
     epoch_to_jd = 'julian_epoch_jd'
     jd_to_epoch = 'jd_julian_epoch'
 
@@ -1100,12 +1591,12 @@ class TimeEpochDateString(TimeString):
                 years[i] = year
 
         self._check_scale(self._scale)  # validate scale.
-        epoch_to_jd = getattr(sofa_time, self.epoch_to_jd)
+        epoch_to_jd = getattr(erfa_time, self.epoch_to_jd)
         self.jd1, self.jd2 = epoch_to_jd(years)
 
     @property
-    def vals(self):
-        jd_to_epoch = getattr(sofa_time, self.jd_to_epoch)
+    def value(self):
+        jd_to_epoch = getattr(erfa_time, self.jd_to_epoch)
         years = jd_to_epoch(self.jd1, self.jd2)
         # Use old-style format since it is a factor of 2 faster
         str_fmt = self.epoch_prefix + '%.' + str(self.precision) + 'f'
@@ -1131,35 +1622,26 @@ class TimeJulianEpochString(TimeEpochDateString):
 
 class TimeDeltaFormat(TimeFormat):
     """Base class for time delta representations"""
-    pass
-
-
-class TimeDeltaSec(TimeDeltaFormat):
-    """Time delta in SI seconds"""
-    name = 'sec'
 
     def set_jds(self, val1, val2):
         self._check_scale(self._scale)  # Validate scale.
-        self.jd1 = val1 / SECS_PER_DAY
-        self.jd2 = val2 / SECS_PER_DAY
+        self.jd1, self.jd2 = day_frac(val1, val2, divisor=1./self.unit)
 
     @property
-    def vals(self):
-        return (self.jd1 + self.jd2) * SECS_PER_DAY
+    def value(self):
+        return (self.jd1 + self.jd2) / self.unit
+
+
+class TimeDeltaSec(TimeDeltaFormat):
+    """Time delta in SI seconds"""
+    name = 'sec'
+    unit = 1. / SECS_PER_DAY  # for quantity input
 
 
 class TimeDeltaJD(TimeDeltaFormat):
     """Time delta in Julian days (86400 SI seconds)"""
     name = 'jd'
-
-    def set_jds(self, val1, val2):
-        self._check_scale(self._scale)  # Validate scale.
-        self.jd1 = val1
-        self.jd2 = val2
-
-    @property
-    def vals(self):
-        return self.jd1 + self.jd2
+    unit = 1.
 
 
 class ScaleValueError(Exception):
@@ -1167,7 +1649,7 @@ class ScaleValueError(Exception):
 
 
 # Set module constant with names of all available time formats
-for name, val in locals().items():
+for name, val in list(six.iteritems(locals())):
     try:
         is_timeformat = issubclass(val, TimeFormat)
         is_timedeltaformat = issubclass(val, TimeDeltaFormat)
@@ -1191,21 +1673,131 @@ def _make_1d_array(val, copy=False):
     val, val_ndim: ndarray, int
         Array version of ``val`` and the number of dims in original.
     """
-    val = np.array(val, copy=copy)
+    val = np.array(val, copy=copy, subok=True)
     val_ndim = val.ndim  # remember original ndim
     if val.ndim == 0:
-        val = np.asarray([val])
+        val = np.atleast_1d(val)
     elif val_ndim > 1:
         # Maybe lift this restriction later to allow multi-dim in/out?
         raise TypeError('Input val must be zero or one dimensional')
 
     # Allow only string or float arrays as input (XXX datetime later...)
     if val.dtype.kind == 'i':
-        val = np.asarray(val, dtype=np.float64)
+        val = np.asanyarray(val, dtype=np.float64)
 
     return val, val_ndim
 
 
+def day_frac(val1, val2, factor=1., divisor=1.):
+    """
+    Return the sum of ``val1`` and ``val2`` as two float64s, an integer part and the
+    fractional remainder.  If ``factor`` is not 1.0 then multiply the sum by ``factor``.
+    If ``divisor`` is not 1.0 then divide the sum by ``divisor``.
+
+    The arithmetic is all done with exact floating point operations so no precision is
+    lost to rounding error.  This routine assumes the sum is less than about 1e16,
+    otherwise the ``frac`` part will be greater than 1.0.
+
+    Returns
+    -------
+    day, frac: float64
+        Integer and fractional part of val1 + val2.
+    """
+
+    # Add val1 and val2 exactly, returning the result as two float64s.  The first is the
+    # approximate sum (with some floating point error) and the second is the error of the
+    # float64 sum.
+    sum12, err12 = two_sum(val1, val2)
+
+    if np.any(factor != 1.):
+        sum12, carry = two_product(sum12, factor)
+        carry += err12 * factor
+        sum12, err12 = two_sum(sum12, carry)
+
+    if np.any(divisor != 1.):
+        q1 = sum12 / divisor
+        p1, p2 = two_product(q1, divisor)
+        d1, d2 = two_sum(sum12, -p1)
+        d2 += err12
+        d2 -= p2
+        q2 = (d1 + d2) / divisor  # 3-part float fine here; nothing can be lost
+        sum12, err12 = two_sum(q1, q2)
+
+    # get integer fraction
+    day = np.round(sum12)
+    extra, frac = two_sum(sum12, -day)
+    frac += extra + err12
+    return day, frac
+
+
+def two_sum(a, b):
+    """
+    Add ``a`` and ``b`` exactly, returning the result as two float64s.  The first is the
+    approximate sum (with some floating point error) and the second is the error of the
+    float64 sum.
+
+    Using the procedure of Shewchuk, 1997,
+    Discrete & Computational Geometry 18(3):305-363
+    http://www.cs.berkeley.edu/~jrs/papers/robustr.pdf
+
+    Returns
+    -------
+    sum, err: float64
+        Approximate sum of a + b and the exact floating point error
+    """
+    x = a + b
+    eb = x - a
+    eb = b - eb
+    ea = x - b
+    ea = a - ea
+    return x, ea + eb
+
+
+def two_product(a, b):
+    """
+    Multiple ``a`` and ``b`` exactly, returning the result as two float64s.  The first is
+    the approximate prodcut (with some floating point error) and the second is the error
+    of the float64 product.
+
+    Uses the procedure of Shewchuk, 1997,
+    Discrete & Computational Geometry 18(3):305-363
+    http://www.cs.berkeley.edu/~jrs/papers/robustr.pdf
+
+    Returns
+    -------
+    prod, err: float64
+        Approximate product a * b and the exact floating point error
+    """
+    x = a * b
+    ah, al = split(a)
+    bh, bl = split(b)
+    y1 = ah * bh
+    y = x - y1
+    y2 = al * bh
+    y -= y2
+    y3 = ah * bl
+    y -= y3
+    y4 = al * bl
+    y = y4 - y
+    return x, y
+
+
+def split(a):
+    """
+    Split float64 in two aligned parts.
+
+    Uses the procedure of Shewchuk, 1997,
+    Discrete & Computational Geometry 18(3):305-363
+    http://www.cs.berkeley.edu/~jrs/papers/robustr.pdf
+
+    """
+    c = 134217729. * a  # 2**27+1.
+    abig = c - a
+    ah = c - abig
+    al = a - ah
+    return ah, al
+
+
 class OperandTypeError(TypeError):
     def __init__(self, left, right):
         self.value = ("unsupported operand type(s) for -: "
diff --git a/astropy/time/sofa_time.c b/astropy/time/erfa_time.c
similarity index 82%
rename from astropy/time/sofa_time.c
rename to astropy/time/erfa_time.c
index f490c73..88d2d96 100644
--- a/astropy/time/sofa_time.c
+++ b/astropy/time/erfa_time.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.18 on Fri Oct 25 12:27:41 2013 */
+/* Generated by Cython 0.18 on Wed Nov 20 19:59:43 2013 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -249,14 +249,14 @@
 #define _USE_MATH_DEFINES
 #endif
 #include <math.h>
-#define __PYX_HAVE__astropy__time__sofa_time
-#define __PYX_HAVE_API__astropy__time__sofa_time
+#define __PYX_HAVE__astropy__time__erfa_time
+#define __PYX_HAVE_API__astropy__time__erfa_time
 #include "string.h"
 #include "stdio.h"
 #include "stdlib.h"
 #include "numpy/arrayobject.h"
 #include "numpy/ufuncobject.h"
-#include "sofa.h"
+#include "erfa.h"
 #ifdef _OPENMP
 #include <omp.h>
 #endif /* _OPENMP */
@@ -354,7 +354,7 @@ static const char *__pyx_filename;
 
 
 static const char *__pyx_f[] = {
-  "sofa_time.pyx",
+  "erfa_time.pyx",
   "numpy.pxd",
   "type.pxd",
 };
@@ -583,14 +583,14 @@ typedef npy_double __pyx_t_5numpy_double_t;
  */
 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 
-/* "astropy/time/sofa_time.pyx":7
+/* "astropy/time/erfa_time.pyx":9
  * import cython
  * 
  * ctypedef np.double_t DOUBLE_T             # <<<<<<<<<<<<<<
  * 
- * cdef extern from "sofa.h":
+ * cdef extern from "erfa.h":
  */
-typedef __pyx_t_5numpy_double_t __pyx_t_7astropy_4time_9sofa_time_DOUBLE_T;
+typedef __pyx_t_5numpy_double_t __pyx_t_7astropy_4time_9erfa_time_DOUBLE_T;
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     typedef ::std::complex< float > __pyx_t_float_complex;
@@ -774,6 +774,8 @@ static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1};
 
 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/
 
+static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name);
+
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     #define __Pyx_CREAL(z) ((z).real())
@@ -967,45 +969,45 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, cha
 
 /* Module declarations from 'cython' */
 
-/* Module declarations from 'astropy.time.sofa_time' */
+/* Module declarations from 'astropy.time.erfa_time' */
 static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 };
 static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 };
-#define __Pyx_MODULE_NAME "astropy.time.sofa_time"
-int __pyx_module_is_main_astropy__time__sofa_time = 0;
+#define __Pyx_MODULE_NAME "astropy.time.erfa_time"
+int __pyx_module_is_main_astropy__time__erfa_time = 0;
 
-/* Implementation of 'astropy.time.sofa_time' */
+/* Implementation of 'astropy.time.erfa_time' */
 static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_range;
 static PyObject *__pyx_builtin_ord;
 static PyObject *__pyx_builtin_RuntimeError;
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_check_return(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ret, PyObject *__pyx_v_func_name, PyObject *__pyx_v_warns, PyObject *__pyx_v_errors); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_2cal2jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_djm0, PyArrayObject *__pyx_v_djm); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_4d_tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_fd); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_ndp, PyArrayObject *__pyx_v_d1, PyArrayObject *__pyx_v_d2); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_ihr, PyArrayObject *__pyx_v_imn, PyArrayObject *__pyx_v_sec); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_10tai_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_12tcb_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_14tcg_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_16tdb_tcb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_18tt_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_20tt_tcg(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_22utc_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_24tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_26tai_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_28ut1_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_30tt_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_32ut1_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_34tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_36tt_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_42d_tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_ut, PyObject *__pyx_v_elong, PyObject *__pyx_v_u, PyObject *__pyx_v_v); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_44iau_af2a(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sign, PyObject *__pyx_v_ideg, PyObject *__pyx_v_iamin, PyObject *__pyx_v_asec); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_46iau_gd2gc(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_n, PyObject *__pyx_v_elong, PyObject *__pyx_v_phi, PyObject *__pyx_v_height); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_48jd_julian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_50julian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_52jd_besselian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2); /* proto */
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_54besselian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_check_return(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ret, PyObject *__pyx_v_func_name, PyObject *__pyx_v_warns, PyObject *__pyx_v_errors); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_2cal2jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_djm0, PyArrayObject *__pyx_v_djm); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_4d_tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_fd); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_6jd_dtf(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_ndp, PyArrayObject *__pyx_v_d1, PyArrayObject *__pyx_v_d2); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_8dtf_jd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_ihr, PyArrayObject *__pyx_v_imn, PyArrayObject *__pyx_v_sec); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_10tai_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_12tcb_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_14tcg_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_16tdb_tcb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_18tt_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_20tt_tcg(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_22utc_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_24tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_26tai_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_28ut1_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_30tt_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_32ut1_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_34tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_36tt_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_38ut1_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_40utc_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_42d_tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_ut, PyObject *__pyx_v_elong, PyObject *__pyx_v_u, PyObject *__pyx_v_v); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_44era_af2a(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sign, PyObject *__pyx_v_ideg, PyObject *__pyx_v_iamin, PyObject *__pyx_v_asec); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_46era_gd2gc(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_n, PyObject *__pyx_v_elong, PyObject *__pyx_v_phi, PyObject *__pyx_v_height); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_48jd_julian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_50julian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_52jd_besselian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2); /* proto */
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_54besselian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd); /* proto */
 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
 static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
 static char __pyx_k_3[] = "{0}: {1}";
@@ -1036,9 +1038,10 @@ static char __pyx_k_30[] = "Non-native byte order not supported";
 static char __pyx_k_32[] = "unknown dtype code in numpy.pxd (%d)";
 static char __pyx_k_33[] = "Format string allocated too short, see comment in numpy.pxd";
 static char __pyx_k_36[] = "Format string allocated too short.";
-static char __pyx_k_38[] = "dubious year for UTC (before 1960.0 or 5 years beyond last known leap second)";
-static char __pyx_k_41[] = "/internal/1/root/src/astropy/astropy-release/astropy/time/sofa_time.pyx";
-static char __pyx_k_42[] = "astropy.time.sofa_time";
+static char __pyx_k_38[] = "utils.exceptions";
+static char __pyx_k_39[] = "dubious year for UTC (before 1960.0 or 5 years beyond last known leap second)";
+static char __pyx_k_42[] = "/internal/1/root/src/astropy/astropy-release/astropy/time/erfa_time.pyx";
+static char __pyx_k_43[] = "astropy.time.erfa_time";
 static char __pyx_k__B[] = "B";
 static char __pyx_k__H[] = "H";
 static char __pyx_k__I[] = "I";
@@ -1108,10 +1111,10 @@ static char __pyx_k__warns[] = "warns";
 static char __pyx_k__cal2jd[] = "cal2jd";
 static char __pyx_k__double[] = "double";
 static char __pyx_k__dtf_jd[] = "dtf_jd";
+static char __pyx_k__eraDat[] = "eraDat";
 static char __pyx_k__errors[] = "errors";
 static char __pyx_k__format[] = "format";
 static char __pyx_k__height[] = "height";
-static char __pyx_k__iauDat[] = "iauDat";
 static char __pyx_k__jd_dtf[] = "jd_dtf";
 static char __pyx_k__tai_tt[] = "tai_tt";
 static char __pyx_k__tcg_tt[] = "tcg_tt";
@@ -1123,7 +1126,7 @@ static char __pyx_k__tt_ut1[] = "tt_ut1";
 static char __pyx_k__ut1_tt[] = "ut1_tt";
 static char __pyx_k__DUBIOUS[] = "DUBIOUS";
 static char __pyx_k__c_elong[] = "c_elong";
-static char __pyx_k__iauAf2a[] = "iauAf2a";
+static char __pyx_k__eraAf2a[] = "eraAf2a";
 static char __pyx_k__tai_ut1[] = "tai_ut1";
 static char __pyx_k__tai_utc[] = "tai_utc";
 static char __pyx_k__tcb_tdb[] = "tcb_tdb";
@@ -1135,36 +1138,37 @@ static char __pyx_k__utc_ut1[] = "utc_ut1";
 static char __pyx_k____main__[] = "__main__";
 static char __pyx_k____test__[] = "__test__";
 static char __pyx_k__d_tdb_tt[] = "d_tdb_tt";
-static char __pyx_k__iauD2dtf[] = "iauD2dtf";
-static char __pyx_k__iauDtf2d[] = "iauDtf2d";
-static char __pyx_k__iauGd2gc[] = "iauGd2gc";
-static char __pyx_k__iauTaitt[] = "iauTaitt";
-static char __pyx_k__iauTcgtt[] = "iauTcgtt";
-static char __pyx_k__iauTdbtt[] = "iauTdbtt";
-static char __pyx_k__iauTttai[] = "iauTttai";
-static char __pyx_k__iauTttcg[] = "iauTttcg";
-static char __pyx_k__iauTttdb[] = "iauTttdb";
-static char __pyx_k__iauTtut1[] = "iauTtut1";
-static char __pyx_k__iauUt1tt[] = "iauUt1tt";
-static char __pyx_k__iau_af2a[] = "iau_af2a";
+static char __pyx_k__eraD2dtf[] = "eraD2dtf";
+static char __pyx_k__eraDtf2d[] = "eraDtf2d";
+static char __pyx_k__eraGd2gc[] = "eraGd2gc";
+static char __pyx_k__eraTaitt[] = "eraTaitt";
+static char __pyx_k__eraTcgtt[] = "eraTcgtt";
+static char __pyx_k__eraTdbtt[] = "eraTdbtt";
+static char __pyx_k__eraTttai[] = "eraTttai";
+static char __pyx_k__eraTttcg[] = "eraTttcg";
+static char __pyx_k__eraTttdb[] = "eraTttdb";
+static char __pyx_k__eraTtut1[] = "eraTtut1";
+static char __pyx_k__eraUt1tt[] = "eraUt1tt";
+static char __pyx_k__era_af2a[] = "era_af2a";
 static char __pyx_k__warnings[] = "warnings";
 static char __pyx_k__d_tai_utc[] = "d_tai_utc";
+static char __pyx_k__eraCal2jd[] = "eraCal2jd";
+static char __pyx_k__eraTaiut1[] = "eraTaiut1";
+static char __pyx_k__eraTaiutc[] = "eraTaiutc";
+static char __pyx_k__eraTcbtdb[] = "eraTcbtdb";
+static char __pyx_k__eraTdbtcb[] = "eraTdbtcb";
+static char __pyx_k__eraUt1tai[] = "eraUt1tai";
+static char __pyx_k__eraUt1utc[] = "eraUt1utc";
+static char __pyx_k__eraUtctai[] = "eraUtctai";
+static char __pyx_k__eraUtcut1[] = "eraUtcut1";
+static char __pyx_k__era_gd2gc[] = "era_gd2gc";
 static char __pyx_k__func_name[] = "func_name";
-static char __pyx_k__iauCal2jd[] = "iauCal2jd";
-static char __pyx_k__iauTaiut1[] = "iauTaiut1";
-static char __pyx_k__iauTaiutc[] = "iauTaiutc";
-static char __pyx_k__iauTcbtdb[] = "iauTcbtdb";
-static char __pyx_k__iauTdbtcb[] = "iauTdbtcb";
-static char __pyx_k__iauUt1tai[] = "iauUt1tai";
-static char __pyx_k__iauUt1utc[] = "iauUt1utc";
-static char __pyx_k__iauUtctai[] = "iauUtctai";
-static char __pyx_k__iauUtcut1[] = "iauUtcut1";
-static char __pyx_k__iau_gd2gc[] = "iau_gd2gc";
 static char __pyx_k__ValueError[] = "ValueError";
 static char __pyx_k__RuntimeError[] = "RuntimeError";
 static char __pyx_k__check_return[] = "check_return";
 static char __pyx_k__jd_julian_epoch[] = "jd_julian_epoch";
 static char __pyx_k__julian_epoch_jd[] = "julian_epoch_jd";
+static char __pyx_k__AstropyUserWarning[] = "AstropyUserWarning";
 static char __pyx_k__besselian_epoch_jd[] = "besselian_epoch_jd";
 static char __pyx_k__jd_besselian_epoch[] = "jd_besselian_epoch";
 static PyObject *__pyx_kp_s_10;
@@ -1189,15 +1193,17 @@ static PyObject *__pyx_kp_u_30;
 static PyObject *__pyx_kp_u_32;
 static PyObject *__pyx_kp_u_33;
 static PyObject *__pyx_kp_u_36;
-static PyObject *__pyx_kp_s_38;
+static PyObject *__pyx_n_s_38;
+static PyObject *__pyx_kp_s_39;
 static PyObject *__pyx_kp_s_4;
-static PyObject *__pyx_kp_s_41;
-static PyObject *__pyx_n_s_42;
+static PyObject *__pyx_kp_s_42;
+static PyObject *__pyx_n_s_43;
 static PyObject *__pyx_kp_s_5;
 static PyObject *__pyx_kp_s_6;
 static PyObject *__pyx_kp_s_7;
 static PyObject *__pyx_kp_s_8;
 static PyObject *__pyx_kp_s_9;
+static PyObject *__pyx_n_s__AstropyUserWarning;
 static PyObject *__pyx_n_s__DUBIOUS;
 static PyObject *__pyx_n_s__RuntimeError;
 static PyObject *__pyx_n_s__ValueError;
@@ -1223,6 +1229,30 @@ static PyObject *__pyx_n_s__dtype;
 static PyObject *__pyx_n_s__elong;
 static PyObject *__pyx_n_s__empty;
 static PyObject *__pyx_n_s__epd;
+static PyObject *__pyx_n_s__eraAf2a;
+static PyObject *__pyx_n_s__eraCal2jd;
+static PyObject *__pyx_n_s__eraD2dtf;
+static PyObject *__pyx_n_s__eraDat;
+static PyObject *__pyx_n_s__eraDtf2d;
+static PyObject *__pyx_n_s__eraGd2gc;
+static PyObject *__pyx_n_s__eraTaitt;
+static PyObject *__pyx_n_s__eraTaiut1;
+static PyObject *__pyx_n_s__eraTaiutc;
+static PyObject *__pyx_n_s__eraTcbtdb;
+static PyObject *__pyx_n_s__eraTcgtt;
+static PyObject *__pyx_n_s__eraTdbtcb;
+static PyObject *__pyx_n_s__eraTdbtt;
+static PyObject *__pyx_n_s__eraTttai;
+static PyObject *__pyx_n_s__eraTttcg;
+static PyObject *__pyx_n_s__eraTttdb;
+static PyObject *__pyx_n_s__eraTtut1;
+static PyObject *__pyx_n_s__eraUt1tai;
+static PyObject *__pyx_n_s__eraUt1tt;
+static PyObject *__pyx_n_s__eraUt1utc;
+static PyObject *__pyx_n_s__eraUtctai;
+static PyObject *__pyx_n_s__eraUtcut1;
+static PyObject *__pyx_n_s__era_af2a;
+static PyObject *__pyx_n_s__era_gd2gc;
 static PyObject *__pyx_n_s__errors;
 static PyObject *__pyx_n_s__errs;
 static PyObject *__pyx_n_s__fd;
@@ -1231,30 +1261,6 @@ static PyObject *__pyx_n_s__func_name;
 static PyObject *__pyx_n_s__height;
 static PyObject *__pyx_n_s__i;
 static PyObject *__pyx_n_s__iamin;
-static PyObject *__pyx_n_s__iauAf2a;
-static PyObject *__pyx_n_s__iauCal2jd;
-static PyObject *__pyx_n_s__iauD2dtf;
-static PyObject *__pyx_n_s__iauDat;
-static PyObject *__pyx_n_s__iauDtf2d;
-static PyObject *__pyx_n_s__iauGd2gc;
-static PyObject *__pyx_n_s__iauTaitt;
-static PyObject *__pyx_n_s__iauTaiut1;
-static PyObject *__pyx_n_s__iauTaiutc;
-static PyObject *__pyx_n_s__iauTcbtdb;
-static PyObject *__pyx_n_s__iauTcgtt;
-static PyObject *__pyx_n_s__iauTdbtcb;
-static PyObject *__pyx_n_s__iauTdbtt;
-static PyObject *__pyx_n_s__iauTttai;
-static PyObject *__pyx_n_s__iauTttcg;
-static PyObject *__pyx_n_s__iauTttdb;
-static PyObject *__pyx_n_s__iauTtut1;
-static PyObject *__pyx_n_s__iauUt1tai;
-static PyObject *__pyx_n_s__iauUt1tt;
-static PyObject *__pyx_n_s__iauUt1utc;
-static PyObject *__pyx_n_s__iauUtctai;
-static PyObject *__pyx_n_s__iauUtcut1;
-static PyObject *__pyx_n_s__iau_af2a;
-static PyObject *__pyx_n_s__iau_gd2gc;
 static PyObject *__pyx_n_s__id;
 static PyObject *__pyx_n_s__ideg;
 static PyObject *__pyx_n_s__ihmsf;
@@ -1331,68 +1337,68 @@ static PyObject *__pyx_k_tuple_31;
 static PyObject *__pyx_k_tuple_34;
 static PyObject *__pyx_k_tuple_35;
 static PyObject *__pyx_k_tuple_37;
-static PyObject *__pyx_k_tuple_39;
-static PyObject *__pyx_k_tuple_43;
-static PyObject *__pyx_k_tuple_45;
-static PyObject *__pyx_k_tuple_47;
-static PyObject *__pyx_k_tuple_49;
-static PyObject *__pyx_k_tuple_51;
-static PyObject *__pyx_k_tuple_53;
-static PyObject *__pyx_k_tuple_55;
-static PyObject *__pyx_k_tuple_57;
-static PyObject *__pyx_k_tuple_59;
-static PyObject *__pyx_k_tuple_61;
-static PyObject *__pyx_k_tuple_63;
-static PyObject *__pyx_k_tuple_65;
-static PyObject *__pyx_k_tuple_67;
-static PyObject *__pyx_k_tuple_69;
-static PyObject *__pyx_k_tuple_71;
-static PyObject *__pyx_k_tuple_73;
-static PyObject *__pyx_k_tuple_75;
-static PyObject *__pyx_k_tuple_77;
-static PyObject *__pyx_k_tuple_79;
-static PyObject *__pyx_k_tuple_81;
-static PyObject *__pyx_k_tuple_83;
-static PyObject *__pyx_k_tuple_85;
-static PyObject *__pyx_k_tuple_87;
-static PyObject *__pyx_k_tuple_89;
-static PyObject *__pyx_k_tuple_91;
-static PyObject *__pyx_k_tuple_93;
-static PyObject *__pyx_k_tuple_95;
-static PyObject *__pyx_k_codeobj_40;
-static PyObject *__pyx_k_codeobj_44;
-static PyObject *__pyx_k_codeobj_46;
-static PyObject *__pyx_k_codeobj_48;
-static PyObject *__pyx_k_codeobj_50;
-static PyObject *__pyx_k_codeobj_52;
-static PyObject *__pyx_k_codeobj_54;
-static PyObject *__pyx_k_codeobj_56;
-static PyObject *__pyx_k_codeobj_58;
-static PyObject *__pyx_k_codeobj_60;
-static PyObject *__pyx_k_codeobj_62;
-static PyObject *__pyx_k_codeobj_64;
-static PyObject *__pyx_k_codeobj_66;
-static PyObject *__pyx_k_codeobj_68;
-static PyObject *__pyx_k_codeobj_70;
-static PyObject *__pyx_k_codeobj_72;
-static PyObject *__pyx_k_codeobj_74;
-static PyObject *__pyx_k_codeobj_76;
-static PyObject *__pyx_k_codeobj_78;
-static PyObject *__pyx_k_codeobj_80;
-static PyObject *__pyx_k_codeobj_82;
-static PyObject *__pyx_k_codeobj_84;
-static PyObject *__pyx_k_codeobj_86;
-static PyObject *__pyx_k_codeobj_88;
-static PyObject *__pyx_k_codeobj_90;
-static PyObject *__pyx_k_codeobj_92;
-static PyObject *__pyx_k_codeobj_94;
-static PyObject *__pyx_k_codeobj_96;
+static PyObject *__pyx_k_tuple_40;
+static PyObject *__pyx_k_tuple_44;
+static PyObject *__pyx_k_tuple_46;
+static PyObject *__pyx_k_tuple_48;
+static PyObject *__pyx_k_tuple_50;
+static PyObject *__pyx_k_tuple_52;
+static PyObject *__pyx_k_tuple_54;
+static PyObject *__pyx_k_tuple_56;
+static PyObject *__pyx_k_tuple_58;
+static PyObject *__pyx_k_tuple_60;
+static PyObject *__pyx_k_tuple_62;
+static PyObject *__pyx_k_tuple_64;
+static PyObject *__pyx_k_tuple_66;
+static PyObject *__pyx_k_tuple_68;
+static PyObject *__pyx_k_tuple_70;
+static PyObject *__pyx_k_tuple_72;
+static PyObject *__pyx_k_tuple_74;
+static PyObject *__pyx_k_tuple_76;
+static PyObject *__pyx_k_tuple_78;
+static PyObject *__pyx_k_tuple_80;
+static PyObject *__pyx_k_tuple_82;
+static PyObject *__pyx_k_tuple_84;
+static PyObject *__pyx_k_tuple_86;
+static PyObject *__pyx_k_tuple_88;
+static PyObject *__pyx_k_tuple_90;
+static PyObject *__pyx_k_tuple_92;
+static PyObject *__pyx_k_tuple_94;
+static PyObject *__pyx_k_tuple_96;
+static PyObject *__pyx_k_codeobj_41;
+static PyObject *__pyx_k_codeobj_45;
+static PyObject *__pyx_k_codeobj_47;
+static PyObject *__pyx_k_codeobj_49;
+static PyObject *__pyx_k_codeobj_51;
+static PyObject *__pyx_k_codeobj_53;
+static PyObject *__pyx_k_codeobj_55;
+static PyObject *__pyx_k_codeobj_57;
+static PyObject *__pyx_k_codeobj_59;
+static PyObject *__pyx_k_codeobj_61;
+static PyObject *__pyx_k_codeobj_63;
+static PyObject *__pyx_k_codeobj_65;
+static PyObject *__pyx_k_codeobj_67;
+static PyObject *__pyx_k_codeobj_69;
+static PyObject *__pyx_k_codeobj_71;
+static PyObject *__pyx_k_codeobj_73;
+static PyObject *__pyx_k_codeobj_75;
+static PyObject *__pyx_k_codeobj_77;
+static PyObject *__pyx_k_codeobj_79;
+static PyObject *__pyx_k_codeobj_81;
+static PyObject *__pyx_k_codeobj_83;
+static PyObject *__pyx_k_codeobj_85;
+static PyObject *__pyx_k_codeobj_87;
+static PyObject *__pyx_k_codeobj_89;
+static PyObject *__pyx_k_codeobj_91;
+static PyObject *__pyx_k_codeobj_93;
+static PyObject *__pyx_k_codeobj_95;
+static PyObject *__pyx_k_codeobj_97;
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_1check_return(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_check_return[] = "Check the return value from an iau routine";
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_1check_return = {__Pyx_NAMESTR("check_return"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_1check_return, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_check_return)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_1check_return(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_1check_return(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_check_return[] = "Check the return value from an era routine";
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_1check_return = {__Pyx_NAMESTR("check_return"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_1check_return, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_check_return)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_1check_return(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ret = 0;
   PyObject *__pyx_v_func_name = 0;
   PyObject *__pyx_v_warns = 0;
@@ -1424,7 +1430,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_1check_return(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__func_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("check_return", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("check_return", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (kw_args > 0) {
@@ -1438,7 +1444,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_1check_return(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "check_return") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "check_return") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -1457,26 +1463,26 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_1check_return(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("check_return", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("check_return", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.check_return", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.check_return", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_check_return(__pyx_self, __pyx_v_ret, __pyx_v_func_name, __pyx_v_warns, __pyx_v_errors);
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_check_return(__pyx_self, __pyx_v_ret, __pyx_v_func_name, __pyx_v_warns, __pyx_v_errors);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":52
+/* "astropy/time/erfa_time.pyx":54
  *           'beyond last known leap second)'
  * 
  * def check_return(ret, func_name, warns={}, errors={}):             # <<<<<<<<<<<<<<
- *     """Check the return value from an iau routine"""
+ *     """Check the return value from an era routine"""
  *     if ret in warns:
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_check_return(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ret, PyObject *__pyx_v_func_name, PyObject *__pyx_v_warns, PyObject *__pyx_v_errors) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_check_return(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ret, PyObject *__pyx_v_func_name, PyObject *__pyx_v_warns, PyObject *__pyx_v_errors) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -1489,33 +1495,33 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_check_return(CYTHON_UNUSED P
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("check_return", 0);
 
-  /* "astropy/time/sofa_time.pyx":54
+  /* "astropy/time/erfa_time.pyx":56
  * def check_return(ret, func_name, warns={}, errors={}):
- *     """Check the return value from an iau routine"""
+ *     """Check the return value from an era routine"""
  *     if ret in warns:             # <<<<<<<<<<<<<<
- *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]))
+ *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]), AstropyUserWarning)
  *     elif ret in errors:
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_ret, __pyx_v_warns, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_ret, __pyx_v_warns, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "astropy/time/sofa_time.pyx":55
- *     """Check the return value from an iau routine"""
+    /* "astropy/time/erfa_time.pyx":57
+ *     """Check the return value from an era routine"""
  *     if ret in warns:
- *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]))             # <<<<<<<<<<<<<<
+ *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]), AstropyUserWarning)             # <<<<<<<<<<<<<<
  *     elif ret in errors:
  *         raise ValueError('{0}: {1}'.format(func_name, errors[ret]))
  */
-    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__warnings); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__warnings); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__warn); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__warn); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_3), __pyx_n_s__format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_3), __pyx_n_s__format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyObject_GetItem(__pyx_v_warns, __pyx_v_ret); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetItem(__pyx_v_warns, __pyx_v_ret); if (!__pyx_t_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_func_name);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_func_name);
@@ -1523,116 +1529,121 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_check_return(CYTHON_UNUSED P
     PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__AstropyUserWarning); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_5);
     __pyx_t_4 = 0;
-    __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = 0;
+    __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L3;
   }
 
-  /* "astropy/time/sofa_time.pyx":56
+  /* "astropy/time/erfa_time.pyx":58
  *     if ret in warns:
- *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]))
+ *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]), AstropyUserWarning)
  *     elif ret in errors:             # <<<<<<<<<<<<<<
  *         raise ValueError('{0}: {1}'.format(func_name, errors[ret]))
  *     elif ret != 0:
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_ret, __pyx_v_errors, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_ret, __pyx_v_errors, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "astropy/time/sofa_time.pyx":57
- *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]))
+    /* "astropy/time/erfa_time.pyx":59
+ *         warnings.warn('{0}: {1}'.format(func_name, warns[ret]), AstropyUserWarning)
  *     elif ret in errors:
  *         raise ValueError('{0}: {1}'.format(func_name, errors[ret]))             # <<<<<<<<<<<<<<
  *     elif ret != 0:
  *         raise ValueError('Unexpected return code {0} from {1}'
  */
-    __pyx_t_4 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_3), __pyx_n_s__format); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyObject_GetItem(__pyx_v_errors, __pyx_v_ret); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_3), __pyx_n_s__format); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_GetItem(__pyx_v_errors, __pyx_v_ret); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_func_name);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_func_name);
     __Pyx_GIVEREF(__pyx_v_func_name);
-    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_5);
-    __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
+    __Pyx_GIVEREF(__pyx_t_2);
+    __pyx_t_2 = 0;
+    __pyx_t_2 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_5);
-    __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
+    __Pyx_GIVEREF(__pyx_t_2);
+    __pyx_t_2 = 0;
+    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
 
-  /* "astropy/time/sofa_time.pyx":58
+  /* "astropy/time/erfa_time.pyx":60
  *     elif ret in errors:
  *         raise ValueError('{0}: {1}'.format(func_name, errors[ret]))
  *     elif ret != 0:             # <<<<<<<<<<<<<<
  *         raise ValueError('Unexpected return code {0} from {1}'
  *                          .format(repr(ret), func_name))
  */
-  __pyx_t_5 = PyObject_RichCompare(__pyx_v_ret, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_ret, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_1) {
 
-    /* "astropy/time/sofa_time.pyx":60
+    /* "astropy/time/erfa_time.pyx":62
  *     elif ret != 0:
  *         raise ValueError('Unexpected return code {0} from {1}'
  *                          .format(repr(ret), func_name))             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    __pyx_t_5 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_4), __pyx_n_s__format); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyObject_Repr(__pyx_v_ret); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_GetAttr(((PyObject *)__pyx_kp_s_4), __pyx_n_s__format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PyObject_Repr(__pyx_v_ret); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_func_name);
-    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_func_name);
+    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_func_name);
     __Pyx_GIVEREF(__pyx_v_func_name);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+    __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
@@ -1644,7 +1655,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_check_return(CYTHON_UNUSED P
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_AddTraceback("astropy.time.sofa_time.check_return", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.check_return", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -1653,10 +1664,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_check_return(CYTHON_UNUSED P
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_3cal2jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_2cal2jd[] = "\n    int iauCal2jd(int iy, int im, int id, double *djm0, double *djm)\n    Calendar date to high-precision JD.\n\n    **  Given:\n    **     iy,im,id  int     year, month, day in Gregorian calendar (Note 1)\n    **\n    **  Returned:\n    **     djm0      double  MJD zero-point: always 2400000.5\n    **     djm       double  Modified Julian Date for 0 hrs\n    **\n    **  Returned (function value):\n    **               int    [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_3cal2jd = {__Pyx_NAMESTR("cal2jd"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_3cal2jd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_2cal2jd)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_3cal2jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_3cal2jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_2cal2jd[] = "\n    int eraCal2jd(int iy, int im, int id, double *djm0, double *djm)\n    Calendar date to high-precision JD.\n\n    **  Given:\n    **     iy,im,id  int     year, month, day in Gregorian calendar (Note 1)\n    **\n    **  Returned:\n    **     djm0      double  MJD zero-point: always 2400000.5\n    **     djm       double  Modified Julian Date for 0 hrs\n    **\n    **  Returned (function value):\n    **               int    [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_3cal2jd = {__Pyx_NAMESTR("cal2jd"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_3cal2jd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_2cal2jd)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_3cal2jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_iy = 0;
   PyArrayObject *__pyx_v_im = 0;
   PyArrayObject *__pyx_v_id = 0;
@@ -1688,26 +1699,26 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_3cal2jd(PyObject *__pyx_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__im)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__djm0)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__djm)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cal2jd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cal2jd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
       goto __pyx_L5_argtuple_error;
@@ -1726,18 +1737,18 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_3cal2jd(PyObject *__pyx_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("cal2jd", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.cal2jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.cal2jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iy), __pyx_ptype_5numpy_ndarray, 1, "iy", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_im), __pyx_ptype_5numpy_ndarray, 1, "im", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_id), __pyx_ptype_5numpy_ndarray, 1, "id", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_djm0), __pyx_ptype_5numpy_ndarray, 1, "djm0", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_djm), __pyx_ptype_5numpy_ndarray, 1, "djm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_2cal2jd(__pyx_self, __pyx_v_iy, __pyx_v_im, __pyx_v_id, __pyx_v_djm0, __pyx_v_djm);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iy), __pyx_ptype_5numpy_ndarray, 1, "iy", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_im), __pyx_ptype_5numpy_ndarray, 1, "im", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_id), __pyx_ptype_5numpy_ndarray, 1, "id", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_djm0), __pyx_ptype_5numpy_ndarray, 1, "djm0", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_djm), __pyx_ptype_5numpy_ndarray, 1, "djm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_2cal2jd(__pyx_self, __pyx_v_iy, __pyx_v_im, __pyx_v_id, __pyx_v_djm0, __pyx_v_djm);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -1746,7 +1757,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_3cal2jd(PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":65
+/* "astropy/time/erfa_time.pyx":67
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def cal2jd(             # <<<<<<<<<<<<<<
@@ -1754,7 +1765,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_3cal2jd(PyObject *__pyx_self
  *     np.ndarray[int, ndim=1] im,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_2cal2jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_djm0, PyArrayObject *__pyx_v_djm) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_2cal2jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_djm0, PyArrayObject *__pyx_v_djm) {
   unsigned int __pyx_v_i;
   unsigned int __pyx_v_n;
   PyObject *__pyx_v_warns = NULL;
@@ -1808,31 +1819,31 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_2cal2jd(CYTHON_UNUSED PyObje
   __pyx_pybuffernd_djm.rcbuffer = &__pyx_pybuffer_djm;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iy.rcbuffer->pybuffer, (PyObject*)__pyx_v_iy, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iy.rcbuffer->pybuffer, (PyObject*)__pyx_v_iy, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_iy.diminfo[0].strides = __pyx_pybuffernd_iy.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iy.diminfo[0].shape = __pyx_pybuffernd_iy.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_im.rcbuffer->pybuffer, (PyObject*)__pyx_v_im, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_im.rcbuffer->pybuffer, (PyObject*)__pyx_v_im, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_im.diminfo[0].strides = __pyx_pybuffernd_im.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_im.diminfo[0].shape = __pyx_pybuffernd_im.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_id.rcbuffer->pybuffer, (PyObject*)__pyx_v_id, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_id.rcbuffer->pybuffer, (PyObject*)__pyx_v_id, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_id.diminfo[0].strides = __pyx_pybuffernd_id.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_id.diminfo[0].shape = __pyx_pybuffernd_id.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_djm0.rcbuffer->pybuffer, (PyObject*)__pyx_v_djm0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_djm0.rcbuffer->pybuffer, (PyObject*)__pyx_v_djm0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_djm0.diminfo[0].strides = __pyx_pybuffernd_djm0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_djm0.diminfo[0].shape = __pyx_pybuffernd_djm0.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_djm.rcbuffer->pybuffer, (PyObject*)__pyx_v_djm, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_djm.rcbuffer->pybuffer, (PyObject*)__pyx_v_djm, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_djm.diminfo[0].strides = __pyx_pybuffernd_djm.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_djm.diminfo[0].shape = __pyx_pybuffernd_djm.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":105
+  /* "astropy/time/erfa_time.pyx":107
  *     """
  *     cdef unsigned int i
  *     cdef unsigned n = iy.shape[0]             # <<<<<<<<<<<<<<
@@ -1841,49 +1852,49 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_2cal2jd(CYTHON_UNUSED PyObje
  */
   __pyx_v_n = (__pyx_v_iy->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":106
+  /* "astropy/time/erfa_time.pyx":108
  *     cdef unsigned int i
  *     cdef unsigned n = iy.shape[0]
  *     warns = {-3: 'Bad input day (JD still computed)'}             # <<<<<<<<<<<<<<
  *     errs = {-1: 'Bad input year',
  *              -2: 'Bad input month'}
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_3, ((PyObject *)__pyx_kp_s_5)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_3, ((PyObject *)__pyx_kp_s_5)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_warns = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "astropy/time/sofa_time.pyx":107
+  /* "astropy/time/erfa_time.pyx":109
  *     cdef unsigned n = iy.shape[0]
  *     warns = {-3: 'Bad input day (JD still computed)'}
  *     errs = {-1: 'Bad input year',             # <<<<<<<<<<<<<<
  *              -2: 'Bad input month'}
  *     for i in range(n):
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_6)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_7)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_6)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_7)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_errs = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "astropy/time/sofa_time.pyx":109
+  /* "astropy/time/erfa_time.pyx":111
  *     errs = {-1: 'Bad input year',
  *              -2: 'Bad input month'}
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])
- *         check_return(ret, 'iauCal2jd', warns, errs)
+ *         ret = eraCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])
+ *         check_return(ret, 'eraCal2jd', warns, errs)
  */
   __pyx_t_2 = __pyx_v_n;
   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
     __pyx_v_i = __pyx_t_3;
 
-    /* "astropy/time/sofa_time.pyx":110
+    /* "astropy/time/erfa_time.pyx":112
  *              -2: 'Bad input month'}
  *     for i in range(n):
- *         ret = iauCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauCal2jd', warns, errs)
+ *         ret = eraCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraCal2jd', warns, errs)
  *     return
  */
     __pyx_t_4 = __pyx_v_i;
@@ -1891,26 +1902,26 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_2cal2jd(CYTHON_UNUSED PyObje
     __pyx_t_6 = __pyx_v_i;
     __pyx_t_7 = __pyx_v_i;
     __pyx_t_8 = __pyx_v_i;
-    __pyx_v_ret = iauCal2jd((*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_iy.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_im.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_im.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_id.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_id.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_djm0.rcbuffer->pybuffer.buf [...]
+    __pyx_v_ret = eraCal2jd((*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_iy.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_im.rcbuffer->pybuffer.buf, __pyx_t_5, __pyx_pybuffernd_im.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_id.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_id.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_djm0.rcbuffer->pybuffer.buf [...]
 
-    /* "astropy/time/sofa_time.pyx":111
+    /* "astropy/time/erfa_time.pyx":113
  *     for i in range(n):
- *         ret = iauCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])
- *         check_return(ret, 'iauCal2jd', warns, errs)             # <<<<<<<<<<<<<<
+ *         ret = eraCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])
+ *         check_return(ret, 'eraCal2jd', warns, errs)             # <<<<<<<<<<<<<<
  *     return
  * 
  */
-    __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_9 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_10);
     PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_9);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauCal2jd));
-    PyTuple_SET_ITEM(__pyx_t_10, 1, ((PyObject *)__pyx_n_s__iauCal2jd));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauCal2jd));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraCal2jd));
+    PyTuple_SET_ITEM(__pyx_t_10, 1, ((PyObject *)__pyx_n_s__eraCal2jd));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraCal2jd));
     __Pyx_INCREF(((PyObject *)__pyx_v_warns));
     PyTuple_SET_ITEM(__pyx_t_10, 2, ((PyObject *)__pyx_v_warns));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
@@ -1918,16 +1929,16 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_2cal2jd(CYTHON_UNUSED PyObje
     PyTuple_SET_ITEM(__pyx_t_10, 3, ((PyObject *)__pyx_v_errs));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
     __pyx_t_9 = 0;
-    __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_10), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_10)); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":112
- *         ret = iauCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])
- *         check_return(ret, 'iauCal2jd', warns, errs)
+  /* "astropy/time/erfa_time.pyx":114
+ *         ret = eraCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])
+ *         check_return(ret, 'eraCal2jd', warns, errs)
  *     return             # <<<<<<<<<<<<<<
  * 
  * @cython.wraparound(False)
@@ -1950,7 +1961,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_2cal2jd(CYTHON_UNUSED PyObje
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_im.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iy.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.cal2jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.cal2jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -1968,10 +1979,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_2cal2jd(CYTHON_UNUSED PyObje
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_5d_tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_4d_tai_utc[] = "\n    int iauDat(int iy, int im, int id, double fd, double *deltat)\n    For a given UTC date, calculate delta(AT) = TAI-UTC.\n\n    **  Given:\n    **     iy     int      UTC:  year (Notes 1 and 2)\n    **     im     int            month (Note 2)\n    **     id     int            day (Notes 2 and 3)\n    **     fd     double         fraction of day (Note 4)\n    **\n    **  Returned:\n    **     deltat double   TAI minus UT [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_5d_tai_utc = {__Pyx_NAMESTR("d_tai_utc"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_5d_tai_utc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_4d_tai_utc)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_5d_tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_5d_tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_4d_tai_utc[] = "\n    int eraDat(int iy, int im, int id, double fd, double *deltat)\n    For a given UTC date, calculate delta(AT) = TAI-UTC.\n\n    **  Given:\n    **     iy     int      UTC:  year (Notes 1 and 2)\n    **     im     int            month (Note 2)\n    **     id     int            day (Notes 2 and 3)\n    **     fd     double         fraction of day (Note 4)\n    **\n    **  Returned:\n    **     deltat double   TAI minus UT [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_5d_tai_utc = {__Pyx_NAMESTR("d_tai_utc"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_5d_tai_utc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_4d_tai_utc)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_5d_tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_iy = 0;
   PyArrayObject *__pyx_v_im = 0;
   PyArrayObject *__pyx_v_id = 0;
@@ -2001,21 +2012,21 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_5d_tai_utc(PyObject *__pyx_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__im)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fd)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "d_tai_utc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "d_tai_utc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -2032,17 +2043,17 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_5d_tai_utc(PyObject *__pyx_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("d_tai_utc", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.d_tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.d_tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iy), __pyx_ptype_5numpy_ndarray, 1, "iy", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_im), __pyx_ptype_5numpy_ndarray, 1, "im", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_id), __pyx_ptype_5numpy_ndarray, 1, "id", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fd), __pyx_ptype_5numpy_ndarray, 1, "fd", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_4d_tai_utc(__pyx_self, __pyx_v_iy, __pyx_v_im, __pyx_v_id, __pyx_v_fd);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iy), __pyx_ptype_5numpy_ndarray, 1, "iy", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_im), __pyx_ptype_5numpy_ndarray, 1, "im", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_id), __pyx_ptype_5numpy_ndarray, 1, "id", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fd), __pyx_ptype_5numpy_ndarray, 1, "fd", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_4d_tai_utc(__pyx_self, __pyx_v_iy, __pyx_v_im, __pyx_v_id, __pyx_v_fd);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -2051,7 +2062,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_5d_tai_utc(PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":116
+/* "astropy/time/erfa_time.pyx":118
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def d_tai_utc(np.ndarray[int, ndim=1] iy,             # <<<<<<<<<<<<<<
@@ -2059,7 +2070,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_5d_tai_utc(PyObject *__pyx_s
  *               np.ndarray[int, ndim=1] id,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_4d_tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_fd) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_4d_tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_fd) {
   int __pyx_v_i;
   int __pyx_v_n;
   PyArrayObject *__pyx_v_out = 0;
@@ -2118,26 +2129,26 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_4d_tai_utc(CYTHON_UNUSED PyO
   __pyx_pybuffernd_fd.rcbuffer = &__pyx_pybuffer_fd;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iy.rcbuffer->pybuffer, (PyObject*)__pyx_v_iy, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iy.rcbuffer->pybuffer, (PyObject*)__pyx_v_iy, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_iy.diminfo[0].strides = __pyx_pybuffernd_iy.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iy.diminfo[0].shape = __pyx_pybuffernd_iy.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_im.rcbuffer->pybuffer, (PyObject*)__pyx_v_im, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_im.rcbuffer->pybuffer, (PyObject*)__pyx_v_im, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_im.diminfo[0].strides = __pyx_pybuffernd_im.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_im.diminfo[0].shape = __pyx_pybuffernd_im.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_id.rcbuffer->pybuffer, (PyObject*)__pyx_v_id, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_id.rcbuffer->pybuffer, (PyObject*)__pyx_v_id, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_id.diminfo[0].strides = __pyx_pybuffernd_id.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_id.diminfo[0].shape = __pyx_pybuffernd_id.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fd.rcbuffer->pybuffer, (PyObject*)__pyx_v_fd, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fd.rcbuffer->pybuffer, (PyObject*)__pyx_v_fd, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_fd.diminfo[0].strides = __pyx_pybuffernd_fd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fd.diminfo[0].shape = __pyx_pybuffernd_fd.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":194
+  /* "astropy/time/erfa_time.pyx":196
  *     """
  *     cdef int i
  *     cdef int n = iy.shape[0]             # <<<<<<<<<<<<<<
@@ -2146,7 +2157,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_4d_tai_utc(CYTHON_UNUSED PyO
  */
   __pyx_v_n = (__pyx_v_iy->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":195
+  /* "astropy/time/erfa_time.pyx":197
  *     cdef int i
  *     cdef int n = iy.shape[0]
  *     assert (iy.shape[0] == im.shape[0] == id.shape[0] == fd.shape[0])             # <<<<<<<<<<<<<<
@@ -2163,50 +2174,50 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_4d_tai_utc(CYTHON_UNUSED PyO
   }
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":197
+  /* "astropy/time/erfa_time.pyx":199
  *     assert (iy.shape[0] == im.shape[0] == id.shape[0] == fd.shape[0])
  * 
  *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     warns = {1: DUBIOUS}
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out.diminfo[0].strides = __pyx_pybuffernd_out.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out.diminfo[0].shape = __pyx_pybuffernd_out.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -2214,89 +2225,89 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_4d_tai_utc(CYTHON_UNUSED PyO
   __pyx_v_out = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":199
+  /* "astropy/time/erfa_time.pyx":201
  *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)
  * 
  *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
  *     errs = {-1: 'bad year',
  *              -2: 'bad month (must be 1 to 12)',
  */
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_6));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_6, __pyx_int_1, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, __pyx_int_1, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_warns = ((PyObject*)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":200
+  /* "astropy/time/erfa_time.pyx":202
  * 
  *     warns = {1: DUBIOUS}
  *     errs = {-1: 'bad year',             # <<<<<<<<<<<<<<
  *              -2: 'bad month (must be 1 to 12)',
  *              -3: 'bad day (must be within normal calendar date for a month)',
  */
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_6));
-  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_8)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_9)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_3, ((PyObject *)__pyx_kp_s_10)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_4, ((PyObject *)__pyx_kp_s_11)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_8)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_9)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_3, ((PyObject *)__pyx_kp_s_10)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, __pyx_int_neg_4, ((PyObject *)__pyx_kp_s_11)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_errs = ((PyObject*)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":204
+  /* "astropy/time/erfa_time.pyx":206
  *              -3: 'bad day (must be within normal calendar date for a month)',
  *              -4: 'bad fraction of day'}
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauDat(iy[i], im[i], id[i], fd[i],
+ *         ret = eraDat(iy[i], im[i], id[i], fd[i],
  *                      &out[i])
  */
   __pyx_t_8 = __pyx_v_n;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "astropy/time/sofa_time.pyx":205
+    /* "astropy/time/erfa_time.pyx":207
  *              -4: 'bad fraction of day'}
  *     for i in range(n):
- *         ret = iauDat(iy[i], im[i], id[i], fd[i],             # <<<<<<<<<<<<<<
+ *         ret = eraDat(iy[i], im[i], id[i], fd[i],             # <<<<<<<<<<<<<<
  *                      &out[i])
- *         check_return(ret, 'iauDat', warns, errs)
+ *         check_return(ret, 'eraDat', warns, errs)
  */
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
     __pyx_t_12 = __pyx_v_i;
     __pyx_t_13 = __pyx_v_i;
 
-    /* "astropy/time/sofa_time.pyx":206
+    /* "astropy/time/erfa_time.pyx":208
  *     for i in range(n):
- *         ret = iauDat(iy[i], im[i], id[i], fd[i],
+ *         ret = eraDat(iy[i], im[i], id[i], fd[i],
  *                      &out[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauDat', warns, errs)
+ *         check_return(ret, 'eraDat', warns, errs)
  * 
  */
     __pyx_t_14 = __pyx_v_i;
-    __pyx_v_ret = iauDat((*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_iy.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_im.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_im.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_id.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_id.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_fd.rcbuffer->pybuffer.buf, __ [...]
+    __pyx_v_ret = eraDat((*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_iy.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_im.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_im.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_id.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_id.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_fd.rcbuffer->pybuffer.buf, __ [...]
 
-    /* "astropy/time/sofa_time.pyx":207
- *         ret = iauDat(iy[i], im[i], id[i], fd[i],
+    /* "astropy/time/erfa_time.pyx":209
+ *         ret = eraDat(iy[i], im[i], id[i], fd[i],
  *                      &out[i])
- *         check_return(ret, 'iauDat', warns, errs)             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraDat', warns, errs)             # <<<<<<<<<<<<<<
  * 
  *     return out
  */
-    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_2 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_2);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauDat));
-    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__iauDat));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauDat));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraDat));
+    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraDat));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraDat));
     __Pyx_INCREF(((PyObject *)__pyx_v_warns));
     PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_warns));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
@@ -2304,15 +2315,15 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_4d_tai_utc(CYTHON_UNUSED PyO
     PyTuple_SET_ITEM(__pyx_t_4, 3, ((PyObject *)__pyx_v_errs));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
     __pyx_t_2 = 0;
-    __pyx_t_2 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":209
- *         check_return(ret, 'iauDat', warns, errs)
+  /* "astropy/time/erfa_time.pyx":211
+ *         check_return(ret, 'eraDat', warns, errs)
  * 
  *     return out             # <<<<<<<<<<<<<<
  * 
@@ -2339,7 +2350,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_4d_tai_utc(CYTHON_UNUSED PyO
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iy.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.d_tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.d_tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -2358,10 +2369,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_4d_tai_utc(CYTHON_UNUSED PyO
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_7jd_dtf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_6jd_dtf[] = "\n    int iauD2dtf(const char *scale, int ndp, double d1, double d2,\n             int *iy, int *im, int *id, int ihmsf[4])\n\n    **  Given:\n    **     scale     char[]  time scale ID (Note 1)\n    **     ndp       int     resolution (Note 2)\n    **     d1,d2     double  time as a 2-part Julian Date (Notes 3,4)\n    **\n    **  Returned:\n    **     iy,im,id  int     year, month, day in Gregorian calendar (Note 5)\n    **    [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_7jd_dtf = {__Pyx_NAMESTR("jd_dtf"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_7jd_dtf, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_6jd_dtf)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_7jd_dtf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_7jd_dtf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_6jd_dtf[] = "\n    int eraD2dtf(const char *scale, int ndp, double d1, double d2,\n             int *iy, int *im, int *id, int ihmsf[4])\n\n    **  Given:\n    **     scale     char[]  time scale ID (Note 1)\n    **     ndp       int     resolution (Note 2)\n    **     d1,d2     double  time as a 2-part Julian Date (Notes 3,4)\n    **\n    **  Returned:\n    **     iy,im,id  int     year, month, day in Gregorian calendar (Note 5)\n    **    [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_7jd_dtf = {__Pyx_NAMESTR("jd_dtf"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_7jd_dtf, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_6jd_dtf)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_7jd_dtf(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_scale = 0;
   PyObject *__pyx_v_ndp = 0;
   PyArrayObject *__pyx_v_d1 = 0;
@@ -2391,21 +2402,21 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_7jd_dtf(PyObject *__pyx_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ndp)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__d1)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__d2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "jd_dtf") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "jd_dtf") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -2422,15 +2433,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_7jd_dtf(PyObject *__pyx_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("jd_dtf", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.jd_dtf", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.jd_dtf", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_d1), __pyx_ptype_5numpy_ndarray, 1, "d1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_d2), __pyx_ptype_5numpy_ndarray, 1, "d2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(__pyx_self, __pyx_v_scale, __pyx_v_ndp, __pyx_v_d1, __pyx_v_d2);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_d1), __pyx_ptype_5numpy_ndarray, 1, "d1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_d2), __pyx_ptype_5numpy_ndarray, 1, "d2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_6jd_dtf(__pyx_self, __pyx_v_scale, __pyx_v_ndp, __pyx_v_d1, __pyx_v_d2);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -2439,7 +2450,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_7jd_dtf(PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":214
+/* "astropy/time/erfa_time.pyx":216
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def jd_dtf(scale, ndp,             # <<<<<<<<<<<<<<
@@ -2447,7 +2458,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_7jd_dtf(PyObject *__pyx_self
  *               np.ndarray[double, ndim=1] d2):
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_ndp, PyArrayObject *__pyx_v_d1, PyArrayObject *__pyx_v_d2) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_6jd_dtf(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyObject *__pyx_v_ndp, PyArrayObject *__pyx_v_d1, PyArrayObject *__pyx_v_d2) {
   int __pyx_v_i;
   int __pyx_v_n;
   PyArrayObject *__pyx_v_iy = 0;
@@ -2521,16 +2532,16 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObje
   __pyx_pybuffernd_d2.rcbuffer = &__pyx_pybuffer_d2;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_d1.rcbuffer->pybuffer, (PyObject*)__pyx_v_d1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_d1.rcbuffer->pybuffer, (PyObject*)__pyx_v_d1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_d1.diminfo[0].strides = __pyx_pybuffernd_d1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_d1.diminfo[0].shape = __pyx_pybuffernd_d1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_d2.rcbuffer->pybuffer, (PyObject*)__pyx_v_d2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_d2.rcbuffer->pybuffer, (PyObject*)__pyx_v_d2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_d2.diminfo[0].strides = __pyx_pybuffernd_d2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_d2.diminfo[0].shape = __pyx_pybuffernd_d2.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":274
+  /* "astropy/time/erfa_time.pyx":276
  *     """
  *     cdef int i
  *     cdef int n = d1.shape[0]             # <<<<<<<<<<<<<<
@@ -2539,46 +2550,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObje
  */
   __pyx_v_n = (__pyx_v_d1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":276
+  /* "astropy/time/erfa_time.pyx":278
  *     cdef int n = d1.shape[0]
  * 
  *     cdef np.ndarray[int, ndim=1] iy = np.empty(n, dtype=np.intc)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[int, ndim=1] im = np.empty(n, dtype=np.intc)
  *     cdef np.ndarray[int, ndim=1] id = np.empty(n, dtype=np.intc)
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__intc); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__intc); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iy.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_iy = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_iy.diminfo[0].strides = __pyx_pybuffernd_iy.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iy.diminfo[0].shape = __pyx_pybuffernd_iy.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -2586,46 +2597,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObje
   __pyx_v_iy = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":277
+  /* "astropy/time/erfa_time.pyx":279
  * 
  *     cdef np.ndarray[int, ndim=1] iy = np.empty(n, dtype=np.intc)
  *     cdef np.ndarray[int, ndim=1] im = np.empty(n, dtype=np.intc)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[int, ndim=1] id = np.empty(n, dtype=np.intc)
  *     cdef np.ndarray[int, ndim=2] ihmsf = np.empty((n, 4), dtype=np.intc)
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__intc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__intc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_im.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_im = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_im.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_im.diminfo[0].strides = __pyx_pybuffernd_im.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_im.diminfo[0].shape = __pyx_pybuffernd_im.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -2633,46 +2644,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObje
   __pyx_v_im = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":278
+  /* "astropy/time/erfa_time.pyx":280
  *     cdef np.ndarray[int, ndim=1] iy = np.empty(n, dtype=np.intc)
  *     cdef np.ndarray[int, ndim=1] im = np.empty(n, dtype=np.intc)
  *     cdef np.ndarray[int, ndim=1] id = np.empty(n, dtype=np.intc)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[int, ndim=2] ihmsf = np.empty((n, 4), dtype=np.intc)
  * 
  */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__empty); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__intc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__intc); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, ((PyObject *)__pyx_n_s__dtype), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_2);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_id.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_id = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_id.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_id.diminfo[0].strides = __pyx_pybuffernd_id.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_id.diminfo[0].shape = __pyx_pybuffernd_id.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -2680,21 +2691,21 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObje
   __pyx_v_id = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":279
+  /* "astropy/time/erfa_time.pyx":281
  *     cdef np.ndarray[int, ndim=1] im = np.empty(n, dtype=np.intc)
  *     cdef np.ndarray[int, ndim=1] id = np.empty(n, dtype=np.intc)
  *     cdef np.ndarray[int, ndim=2] ihmsf = np.empty((n, 4), dtype=np.intc)             # <<<<<<<<<<<<<<
  * 
  *     warns = {1: DUBIOUS}
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
@@ -2702,32 +2713,32 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObje
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_4);
   __Pyx_GIVEREF(__pyx_int_4);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_3));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__intc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__intc); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, ((PyObject *)__pyx_n_s__dtype), __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_9 = ((PyArrayObject *)__pyx_t_1);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ihmsf.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
       __pyx_v_ihmsf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_ihmsf.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_ihmsf.diminfo[0].strides = __pyx_pybuffernd_ihmsf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ihmsf.diminfo[0].shape = __pyx_pybuffernd_ihmsf.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ihmsf.diminfo[1].strides = __pyx_pybuffernd_ihmsf.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ihmsf.diminfo[1].shape = __pyx_pybuffernd_ihmsf.rcbuffer->pybuffer.shape[1];
     }
   }
@@ -2735,63 +2746,63 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObje
   __pyx_v_ihmsf = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "astropy/time/sofa_time.pyx":281
+  /* "astropy/time/erfa_time.pyx":283
  *     cdef np.ndarray[int, ndim=2] ihmsf = np.empty((n, 4), dtype=np.intc)
  * 
  *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
  *     errs = {-1: 'unacceptable date'}
  * 
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_1, __pyx_int_1, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_int_1, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_warns = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "astropy/time/sofa_time.pyx":282
+  /* "astropy/time/erfa_time.pyx":284
  * 
  *     warns = {1: DUBIOUS}
  *     errs = {-1: 'unacceptable date'}             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_errs = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "astropy/time/sofa_time.pyx":284
+  /* "astropy/time/erfa_time.pyx":286
  *     errs = {-1: 'unacceptable date'}
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauD2dtf(scale, ndp, d1[i], d2[i],
+ *         ret = eraD2dtf(scale, ndp, d1[i], d2[i],
  *                      &iy[i], &im[i], &id[i], &ihmsf[i, 0])
  */
   __pyx_t_10 = __pyx_v_n;
   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
     __pyx_v_i = __pyx_t_11;
 
-    /* "astropy/time/sofa_time.pyx":285
+    /* "astropy/time/erfa_time.pyx":287
  * 
  *     for i in range(n):
- *         ret = iauD2dtf(scale, ndp, d1[i], d2[i],             # <<<<<<<<<<<<<<
+ *         ret = eraD2dtf(scale, ndp, d1[i], d2[i],             # <<<<<<<<<<<<<<
  *                      &iy[i], &im[i], &id[i], &ihmsf[i, 0])
- *         check_return(ret, 'iauD2dtf', warns, errs)
+ *         check_return(ret, 'eraD2dtf', warns, errs)
  */
-    __pyx_t_12 = PyBytes_AsString(__pyx_v_scale); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_13 = __Pyx_PyInt_AsInt(__pyx_v_ndp); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_12 = PyBytes_AsString(__pyx_v_scale); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = __Pyx_PyInt_AsInt(__pyx_v_ndp); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_14 = __pyx_v_i;
     __pyx_t_15 = __pyx_v_i;
 
-    /* "astropy/time/sofa_time.pyx":286
+    /* "astropy/time/erfa_time.pyx":288
  *     for i in range(n):
- *         ret = iauD2dtf(scale, ndp, d1[i], d2[i],
+ *         ret = eraD2dtf(scale, ndp, d1[i], d2[i],
  *                      &iy[i], &im[i], &id[i], &ihmsf[i, 0])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauD2dtf', warns, errs)
+ *         check_return(ret, 'eraD2dtf', warns, errs)
  * 
  */
     __pyx_t_16 = __pyx_v_i;
@@ -2799,26 +2810,26 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObje
     __pyx_t_18 = __pyx_v_i;
     __pyx_t_19 = __pyx_v_i;
     __pyx_t_20 = 0;
-    __pyx_v_ret = iauD2dtf(__pyx_t_12, __pyx_t_13, (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_d1.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_d1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_d2.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_d2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_iy.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(int *, __pyx_pybuff [...]
+    __pyx_v_ret = eraD2dtf(__pyx_t_12, __pyx_t_13, (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_d1.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_d1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_d2.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_d2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_iy.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(int *, __pyx_pybuff [...]
 
-    /* "astropy/time/sofa_time.pyx":287
- *         ret = iauD2dtf(scale, ndp, d1[i], d2[i],
+    /* "astropy/time/erfa_time.pyx":289
+ *         ret = eraD2dtf(scale, ndp, d1[i], d2[i],
  *                      &iy[i], &im[i], &id[i], &ihmsf[i, 0])
- *         check_return(ret, 'iauD2dtf', warns, errs)             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraD2dtf', warns, errs)             # <<<<<<<<<<<<<<
  * 
  *     return iy, im, id, ihmsf
  */
-    __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauD2dtf));
-    PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_n_s__iauD2dtf));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauD2dtf));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraD2dtf));
+    PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_n_s__eraD2dtf));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraD2dtf));
     __Pyx_INCREF(((PyObject *)__pyx_v_warns));
     PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_v_warns));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
@@ -2826,22 +2837,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObje
     PyTuple_SET_ITEM(__pyx_t_2, 3, ((PyObject *)__pyx_v_errs));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":289
- *         check_return(ret, 'iauD2dtf', warns, errs)
+  /* "astropy/time/erfa_time.pyx":291
+ *         check_return(ret, 'eraD2dtf', warns, errs)
  * 
  *     return iy, im, id, ihmsf             # <<<<<<<<<<<<<<
  * 
  * @cython.wraparound(False)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(((PyObject *)__pyx_v_iy));
   PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_iy));
@@ -2876,7 +2887,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObje
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_im.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iy.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.jd_dtf", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.jd_dtf", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -2899,10 +2910,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_6jd_dtf(CYTHON_UNUSED PyObje
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_9dtf_jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_8dtf_jd[] = "\n    int iauDtf2d(char *scale, int iy, int im, int id, int ihr, int imn, double sec, double *d1, double *d2)\n\n    **  Given:\n    **     scale     char[]  time scale ID (Note 1)\n    **     iy,im,id  int     year, month, day in Gregorian calendar (Note 2)\n    **     ihr,imn   int     hour, minute\n    **     sec       double  seconds\n    **\n    **  Returned:\n    **     d1,d2     double  2-part Julian Date (Notes 3,4)\n   [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_9dtf_jd = {__Pyx_NAMESTR("dtf_jd"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_9dtf_jd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_8dtf_jd)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_9dtf_jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_9dtf_jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_8dtf_jd[] = "\n    int eraDtf2d(char *scale, int iy, int im, int id, int ihr, int imn, double sec, double *d1, double *d2)\n\n    **  Given:\n    **     scale     char[]  time scale ID (Note 1)\n    **     iy,im,id  int     year, month, day in Gregorian calendar (Note 2)\n    **     ihr,imn   int     hour, minute\n    **     sec       double  seconds\n    **\n    **  Returned:\n    **     d1,d2     double  2-part Julian Date (Notes 3,4)\n   [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_9dtf_jd = {__Pyx_NAMESTR("dtf_jd"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_9dtf_jd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_8dtf_jd)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_9dtf_jd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_scale = 0;
   PyArrayObject *__pyx_v_iy = 0;
   PyArrayObject *__pyx_v_im = 0;
@@ -2938,36 +2949,36 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_9dtf_jd(PyObject *__pyx_self
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iy)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__im)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__id)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ihr)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  5:
         if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__imn)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  6:
         if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__sec)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dtf_jd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dtf_jd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 7) {
       goto __pyx_L5_argtuple_error;
@@ -2990,19 +3001,19 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_9dtf_jd(PyObject *__pyx_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("dtf_jd", 1, 7, 7, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.dtf_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.dtf_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iy), __pyx_ptype_5numpy_ndarray, 1, "iy", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_im), __pyx_ptype_5numpy_ndarray, 1, "im", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_id), __pyx_ptype_5numpy_ndarray, 1, "id", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ihr), __pyx_ptype_5numpy_ndarray, 1, "ihr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_imn), __pyx_ptype_5numpy_ndarray, 1, "imn", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_5numpy_ndarray, 1, "sec", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(__pyx_self, __pyx_v_scale, __pyx_v_iy, __pyx_v_im, __pyx_v_id, __pyx_v_ihr, __pyx_v_imn, __pyx_v_sec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iy), __pyx_ptype_5numpy_ndarray, 1, "iy", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_im), __pyx_ptype_5numpy_ndarray, 1, "im", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_id), __pyx_ptype_5numpy_ndarray, 1, "id", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ihr), __pyx_ptype_5numpy_ndarray, 1, "ihr", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_imn), __pyx_ptype_5numpy_ndarray, 1, "imn", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_5numpy_ndarray, 1, "sec", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_8dtf_jd(__pyx_self, __pyx_v_scale, __pyx_v_iy, __pyx_v_im, __pyx_v_id, __pyx_v_ihr, __pyx_v_imn, __pyx_v_sec);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -3011,7 +3022,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_9dtf_jd(PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":293
+/* "astropy/time/erfa_time.pyx":295
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def dtf_jd(scale,             # <<<<<<<<<<<<<<
@@ -3019,7 +3030,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_9dtf_jd(PyObject *__pyx_self
  *               np.ndarray[int, ndim=1] im,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_ihr, PyArrayObject *__pyx_v_imn, PyArrayObject *__pyx_v_sec) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_8dtf_jd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_scale, PyArrayObject *__pyx_v_iy, PyArrayObject *__pyx_v_im, PyArrayObject *__pyx_v_id, PyArrayObject *__pyx_v_ihr, PyArrayObject *__pyx_v_imn, PyArrayObject *__pyx_v_sec) {
   int __pyx_v_i;
   int __pyx_v_n;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -3102,36 +3113,36 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObje
   __pyx_pybuffernd_sec.rcbuffer = &__pyx_pybuffer_sec;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iy.rcbuffer->pybuffer, (PyObject*)__pyx_v_iy, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iy.rcbuffer->pybuffer, (PyObject*)__pyx_v_iy, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_iy.diminfo[0].strides = __pyx_pybuffernd_iy.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iy.diminfo[0].shape = __pyx_pybuffernd_iy.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_im.rcbuffer->pybuffer, (PyObject*)__pyx_v_im, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_im.rcbuffer->pybuffer, (PyObject*)__pyx_v_im, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_im.diminfo[0].strides = __pyx_pybuffernd_im.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_im.diminfo[0].shape = __pyx_pybuffernd_im.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_id.rcbuffer->pybuffer, (PyObject*)__pyx_v_id, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_id.rcbuffer->pybuffer, (PyObject*)__pyx_v_id, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_id.diminfo[0].strides = __pyx_pybuffernd_id.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_id.diminfo[0].shape = __pyx_pybuffernd_id.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ihr.rcbuffer->pybuffer, (PyObject*)__pyx_v_ihr, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ihr.rcbuffer->pybuffer, (PyObject*)__pyx_v_ihr, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_ihr.diminfo[0].strides = __pyx_pybuffernd_ihr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ihr.diminfo[0].shape = __pyx_pybuffernd_ihr.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_imn.rcbuffer->pybuffer, (PyObject*)__pyx_v_imn, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_imn.rcbuffer->pybuffer, (PyObject*)__pyx_v_imn, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_imn.diminfo[0].strides = __pyx_pybuffernd_imn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_imn.diminfo[0].shape = __pyx_pybuffernd_imn.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sec.rcbuffer->pybuffer, (PyObject*)__pyx_v_sec, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sec.rcbuffer->pybuffer, (PyObject*)__pyx_v_sec, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_sec.diminfo[0].strides = __pyx_pybuffernd_sec.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sec.diminfo[0].shape = __pyx_pybuffernd_sec.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":360
+  /* "astropy/time/erfa_time.pyx":362
  *     """
  *     cdef int i
  *     cdef int n = iy.shape[0]             # <<<<<<<<<<<<<<
@@ -3140,7 +3151,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObje
  */
   __pyx_v_n = (__pyx_v_iy->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":361
+  /* "astropy/time/erfa_time.pyx":363
  *     cdef int i
  *     cdef int n = iy.shape[0]
  *     assert (iy.shape[0] == im.shape[0] == id.shape[0] ==             # <<<<<<<<<<<<<<
@@ -3153,7 +3164,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObje
     __pyx_t_1 = ((__pyx_v_im->dimensions[0]) == (__pyx_v_id->dimensions[0]));
     if (__pyx_t_1) {
 
-      /* "astropy/time/sofa_time.pyx":362
+      /* "astropy/time/erfa_time.pyx":364
  *     cdef int n = iy.shape[0]
  *     assert (iy.shape[0] == im.shape[0] == id.shape[0] ==
  *             ihr.shape[0] == imn.shape[0] == sec.shape[0])             # <<<<<<<<<<<<<<
@@ -3171,50 +3182,50 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObje
   }
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":364
+  /* "astropy/time/erfa_time.pyx":366
  *             ihr.shape[0] == imn.shape[0] == sec.shape[0])
  * 
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -3222,46 +3233,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObje
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":365
+  /* "astropy/time/erfa_time.pyx":367
  * 
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     warns = {3: 'time is after end of day and ' + DUBIOUS,
  */
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_6));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -3269,75 +3280,75 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObje
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":367
+  /* "astropy/time/erfa_time.pyx":369
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     warns = {3: 'time is after end of day and ' + DUBIOUS,             # <<<<<<<<<<<<<<
  *              2: 'time is after end of day',
  *              1: DUBIOUS}
  */
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_kp_s_13), __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyNumber_Add(((PyObject *)__pyx_kp_s_13), __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_3, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_3, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_2, ((PyObject *)__pyx_kp_s_14)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_2, ((PyObject *)__pyx_kp_s_14)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":369
+  /* "astropy/time/erfa_time.pyx":371
  *     warns = {3: 'time is after end of day and ' + DUBIOUS,
  *              2: 'time is after end of day',
  *              1: DUBIOUS}             # <<<<<<<<<<<<<<
  *     errs = {-1: 'bad year',
  *             -2: 'bad month',
  */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_1, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_1, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_warns = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":370
+  /* "astropy/time/erfa_time.pyx":372
  *              2: 'time is after end of day',
  *              1: DUBIOUS}
  *     errs = {-1: 'bad year',             # <<<<<<<<<<<<<<
  *             -2: 'bad month',
  *             -3: 'bad day',
  */
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_8)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_15)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_3, ((PyObject *)__pyx_kp_s_16)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_4, ((PyObject *)__pyx_kp_s_17)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_5, ((PyObject *)__pyx_kp_s_18)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_6, ((PyObject *)__pyx_kp_s_19)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_8)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_15)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_3, ((PyObject *)__pyx_kp_s_16)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_4, ((PyObject *)__pyx_kp_s_17)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_5, ((PyObject *)__pyx_kp_s_18)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_6, ((PyObject *)__pyx_kp_s_19)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_errs = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":377
+  /* "astropy/time/erfa_time.pyx":379
  *             -6: 'bad second (< 0)'}
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],
+ *         ret = eraDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],
  *                        &out1[i], &out2[i])
  */
   __pyx_t_9 = __pyx_v_n;
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "astropy/time/sofa_time.pyx":378
+    /* "astropy/time/erfa_time.pyx":380
  * 
  *     for i in range(n):
- *         ret = iauDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],             # <<<<<<<<<<<<<<
+ *         ret = eraDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],             # <<<<<<<<<<<<<<
  *                        &out1[i], &out2[i])
- *         check_return(ret, 'iauDtf2d', warns, errs)
+ *         check_return(ret, 'eraDtf2d', warns, errs)
  */
-    __pyx_t_11 = PyBytes_AsString(__pyx_v_scale); if (unlikely((!__pyx_t_11) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = PyBytes_AsString(__pyx_v_scale); if (unlikely((!__pyx_t_11) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_12 = __pyx_v_i;
     __pyx_t_13 = __pyx_v_i;
     __pyx_t_14 = __pyx_v_i;
@@ -3345,35 +3356,35 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObje
     __pyx_t_16 = __pyx_v_i;
     __pyx_t_17 = __pyx_v_i;
 
-    /* "astropy/time/sofa_time.pyx":379
+    /* "astropy/time/erfa_time.pyx":381
  *     for i in range(n):
- *         ret = iauDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],
+ *         ret = eraDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],
  *                        &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauDtf2d', warns, errs)
+ *         check_return(ret, 'eraDtf2d', warns, errs)
  * 
  */
     __pyx_t_18 = __pyx_v_i;
     __pyx_t_19 = __pyx_v_i;
-    __pyx_v_ret = iauDtf2d(__pyx_t_11, (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_iy.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_im.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_im.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_id.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_id.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_ihr.rcbuffer->pybu [...]
+    __pyx_v_ret = eraDtf2d(__pyx_t_11, (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_iy.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_iy.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_im.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_im.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_id.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_id.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_ihr.rcbuffer->pybu [...]
 
-    /* "astropy/time/sofa_time.pyx":380
- *         ret = iauDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],
+    /* "astropy/time/erfa_time.pyx":382
+ *         ret = eraDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],
  *                        &out1[i], &out2[i])
- *         check_return(ret, 'iauDtf2d', warns, errs)             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraDtf2d', warns, errs)             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauDtf2d));
-    PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_n_s__iauDtf2d));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauDtf2d));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraDtf2d));
+    PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_n_s__eraDtf2d));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraDtf2d));
     __Pyx_INCREF(((PyObject *)__pyx_v_warns));
     PyTuple_SET_ITEM(__pyx_t_6, 2, ((PyObject *)__pyx_v_warns));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
@@ -3381,22 +3392,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObje
     PyTuple_SET_ITEM(__pyx_t_6, 3, ((PyObject *)__pyx_v_errs));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
     __pyx_t_4 = 0;
-    __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":382
- *         check_return(ret, 'iauDtf2d', warns, errs)
+  /* "astropy/time/erfa_time.pyx":384
+ *         check_return(ret, 'eraDtf2d', warns, errs)
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_out1));
@@ -3427,7 +3438,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObje
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sec.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.dtf_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.dtf_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -3450,10 +3461,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_8dtf_jd(CYTHON_UNUSED PyObje
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_11tai_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_10tai_tt[] = "\n    int iauTaitt(double tai1, double tai2, double *tt1, double *tt2)\n\n    **  Given:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Note:\n    **\n    **     tai1+tai2 is Julian Date, apportioned in any convenient w [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_11tai_tt = {__Pyx_NAMESTR("tai_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_11tai_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_10tai_tt)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_11tai_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_11tai_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_10tai_tt[] = "\n    int eraTaitt(double tai1, double tai2, double *tt1, double *tt2)\n\n    **  Given:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Note:\n    **\n    **     tai1+tai2 is Julian Date, apportioned in any convenient w [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_11tai_tt = {__Pyx_NAMESTR("tai_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_11tai_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_10tai_tt)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_11tai_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyObject *__pyx_r = 0;
@@ -3479,11 +3490,11 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_11tai_tt(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tai_tt", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tai_tt", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tai_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tai_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -3496,15 +3507,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_11tai_tt(PyObject *__pyx_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tai_tt", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tai_tt", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.tai_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tai_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_10tai_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_10tai_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -3513,7 +3524,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_11tai_tt(PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":387
+/* "astropy/time/erfa_time.pyx":389
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tai_tt(             # <<<<<<<<<<<<<<
@@ -3521,7 +3532,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_11tai_tt(PyObject *__pyx_sel
  *     np.ndarray[double, ndim=1] in2):
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_10tai_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_10tai_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -3572,16 +3583,16 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_10tai_tt(CYTHON_UNUSED PyObj
   __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":409
+  /* "astropy/time/erfa_time.pyx":411
  *     **     tt1,tt2 follow suit.
  *     """
  *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
@@ -3591,11 +3602,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_10tai_tt(CYTHON_UNUSED PyObj
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":410
+  /* "astropy/time/erfa_time.pyx":412
  *     """
  *     assert in1.shape[0] == in2.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -3604,46 +3615,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_10tai_tt(CYTHON_UNUSED PyObj
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":412
+  /* "astropy/time/erfa_time.pyx":414
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -3651,46 +3662,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_10tai_tt(CYTHON_UNUSED PyObj
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":413
+  /* "astropy/time/erfa_time.pyx":415
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -3698,65 +3709,65 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_10tai_tt(CYTHON_UNUSED PyObj
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":415
+  /* "astropy/time/erfa_time.pyx":417
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauTaitt(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTaitt')
+ *         ret = eraTaitt(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTaitt')
  */
   __pyx_t_8 = __pyx_v_n;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "astropy/time/sofa_time.pyx":416
+    /* "astropy/time/erfa_time.pyx":418
  * 
  *     for i in range(n):
- *         ret = iauTaitt(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauTaitt')
+ *         ret = eraTaitt(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraTaitt')
  * 
  */
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
     __pyx_t_12 = __pyx_v_i;
     __pyx_t_13 = __pyx_v_i;
-    __pyx_v_ret = iauTaitt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2. [...]
+    __pyx_v_ret = eraTaitt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2. [...]
 
-    /* "astropy/time/sofa_time.pyx":417
+    /* "astropy/time/erfa_time.pyx":419
  *     for i in range(n):
- *         ret = iauTaitt(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTaitt')             # <<<<<<<<<<<<<<
+ *         ret = eraTaitt(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTaitt')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauTaitt));
-    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__iauTaitt));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauTaitt));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTaitt));
+    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTaitt));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTaitt));
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":419
- *         check_return(ret, 'iauTaitt')
+  /* "astropy/time/erfa_time.pyx":421
+ *         check_return(ret, 'eraTaitt')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
@@ -3783,7 +3794,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_10tai_tt(CYTHON_UNUSED PyObj
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.tai_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tai_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -3800,10 +3811,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_10tai_tt(CYTHON_UNUSED PyObj
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_13tcb_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_12tcb_tdb[] = "\n    int iauTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2)\n\n    **  Given:\n    **     tcb1,tcb2  double    TCB as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n    **  1) tcb1+tcb2 is Julian Date, apportioned in any conven [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_13tcb_tdb = {__Pyx_NAMESTR("tcb_tdb"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_13tcb_tdb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_12tcb_tdb)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_13tcb_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_13tcb_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_12tcb_tdb[] = "\n    int eraTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2)\n\n    **  Given:\n    **     tcb1,tcb2  double    TCB as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n    **  1) tcb1+tcb2 is Julian Date, apportioned in any conven [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_13tcb_tdb = {__Pyx_NAMESTR("tcb_tdb"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_13tcb_tdb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_12tcb_tdb)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_13tcb_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyObject *__pyx_r = 0;
@@ -3829,11 +3840,11 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_13tcb_tdb(PyObject *__pyx_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tcb_tdb", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tcb_tdb", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tcb_tdb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tcb_tdb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -3846,15 +3857,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_13tcb_tdb(PyObject *__pyx_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tcb_tdb", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tcb_tdb", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.tcb_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tcb_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_12tcb_tdb(__pyx_self, __pyx_v_in1, __pyx_v_in2);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_12tcb_tdb(__pyx_self, __pyx_v_in1, __pyx_v_in2);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -3863,7 +3874,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_13tcb_tdb(PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":424
+/* "astropy/time/erfa_time.pyx":426
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tcb_tdb(             # <<<<<<<<<<<<<<
@@ -3871,7 +3882,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_13tcb_tdb(PyObject *__pyx_se
  *     np.ndarray[double, ndim=1] in2):
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_12tcb_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_12tcb_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -3922,16 +3933,16 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_12tcb_tdb(CYTHON_UNUSED PyOb
   __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":465
+  /* "astropy/time/erfa_time.pyx":467
  *     """
  * 
  *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
@@ -3941,11 +3952,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_12tcb_tdb(CYTHON_UNUSED PyOb
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":466
+  /* "astropy/time/erfa_time.pyx":468
  * 
  *     assert in1.shape[0] == in2.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -3954,46 +3965,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_12tcb_tdb(CYTHON_UNUSED PyOb
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":468
+  /* "astropy/time/erfa_time.pyx":470
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -4001,46 +4012,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_12tcb_tdb(CYTHON_UNUSED PyOb
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":469
+  /* "astropy/time/erfa_time.pyx":471
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -4048,65 +4059,65 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_12tcb_tdb(CYTHON_UNUSED PyOb
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":471
+  /* "astropy/time/erfa_time.pyx":473
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauTcbtdb(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTcbtdb')
+ *         ret = eraTcbtdb(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTcbtdb')
  */
   __pyx_t_8 = __pyx_v_n;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "astropy/time/sofa_time.pyx":472
+    /* "astropy/time/erfa_time.pyx":474
  * 
  *     for i in range(n):
- *         ret = iauTcbtdb(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauTcbtdb')
+ *         ret = eraTcbtdb(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraTcbtdb')
  * 
  */
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
     __pyx_t_12 = __pyx_v_i;
     __pyx_t_13 = __pyx_v_i;
-    __pyx_v_ret = iauTcbtdb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
+    __pyx_v_ret = eraTcbtdb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
 
-    /* "astropy/time/sofa_time.pyx":473
+    /* "astropy/time/erfa_time.pyx":475
  *     for i in range(n):
- *         ret = iauTcbtdb(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTcbtdb')             # <<<<<<<<<<<<<<
+ *         ret = eraTcbtdb(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTcbtdb')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauTcbtdb));
-    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__iauTcbtdb));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauTcbtdb));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTcbtdb));
+    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTcbtdb));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTcbtdb));
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":475
- *         check_return(ret, 'iauTcbtdb')
+  /* "astropy/time/erfa_time.pyx":477
+ *         check_return(ret, 'eraTcbtdb')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
@@ -4133,7 +4144,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_12tcb_tdb(CYTHON_UNUSED PyOb
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.tcb_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tcb_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -4150,10 +4161,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_12tcb_tdb(CYTHON_UNUSED PyOb
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_15tcg_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_14tcg_tt[] = "\n   int iauTcgtt(double tcg1, double tcg2, double *tt1, double *tt2)\n\n   **  Given:\n   **     tcg1,tcg2  double    TCG as a 2-part Julian Date\n   **\n   **  Returned:\n   **     tt1,tt2    double    TT as a 2-part Julian Date\n   **\n   **  Returned (function value):\n   **                int       status:  0 = OK\n    ";
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_15tcg_tt = {__Pyx_NAMESTR("tcg_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_15tcg_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_14tcg_tt)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_15tcg_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_15tcg_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_14tcg_tt[] = "\n   int eraTcgtt(double tcg1, double tcg2, double *tt1, double *tt2)\n\n   **  Given:\n   **     tcg1,tcg2  double    TCG as a 2-part Julian Date\n   **\n   **  Returned:\n   **     tt1,tt2    double    TT as a 2-part Julian Date\n   **\n   **  Returned (function value):\n   **                int       status:  0 = OK\n    ";
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_15tcg_tt = {__Pyx_NAMESTR("tcg_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_15tcg_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_14tcg_tt)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_15tcg_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyObject *__pyx_r = 0;
@@ -4179,11 +4190,11 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_15tcg_tt(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tcg_tt", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tcg_tt", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tcg_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tcg_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -4196,15 +4207,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_15tcg_tt(PyObject *__pyx_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tcg_tt", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tcg_tt", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.tcg_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tcg_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_14tcg_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_14tcg_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -4213,7 +4224,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_15tcg_tt(PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":480
+/* "astropy/time/erfa_time.pyx":482
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tcg_tt(             # <<<<<<<<<<<<<<
@@ -4221,7 +4232,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_15tcg_tt(PyObject *__pyx_sel
  *     np.ndarray[double, ndim=1] in2):
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_14tcg_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_14tcg_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -4272,16 +4283,16 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_14tcg_tt(CYTHON_UNUSED PyObj
   __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":496
+  /* "astropy/time/erfa_time.pyx":498
  *     """
  * 
  *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
@@ -4291,11 +4302,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_14tcg_tt(CYTHON_UNUSED PyObj
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":497
+  /* "astropy/time/erfa_time.pyx":499
  * 
  *     assert in1.shape[0] == in2.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -4304,46 +4315,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_14tcg_tt(CYTHON_UNUSED PyObj
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":499
+  /* "astropy/time/erfa_time.pyx":501
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -4351,46 +4362,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_14tcg_tt(CYTHON_UNUSED PyObj
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":500
+  /* "astropy/time/erfa_time.pyx":502
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -4398,65 +4409,65 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_14tcg_tt(CYTHON_UNUSED PyObj
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":502
+  /* "astropy/time/erfa_time.pyx":504
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauTcgtt(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTcgtt')
+ *         ret = eraTcgtt(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTcgtt')
  */
   __pyx_t_8 = __pyx_v_n;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "astropy/time/sofa_time.pyx":503
+    /* "astropy/time/erfa_time.pyx":505
  * 
  *     for i in range(n):
- *         ret = iauTcgtt(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauTcgtt')
+ *         ret = eraTcgtt(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraTcgtt')
  * 
  */
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
     __pyx_t_12 = __pyx_v_i;
     __pyx_t_13 = __pyx_v_i;
-    __pyx_v_ret = iauTcgtt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2. [...]
+    __pyx_v_ret = eraTcgtt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2. [...]
 
-    /* "astropy/time/sofa_time.pyx":504
+    /* "astropy/time/erfa_time.pyx":506
  *     for i in range(n):
- *         ret = iauTcgtt(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTcgtt')             # <<<<<<<<<<<<<<
+ *         ret = eraTcgtt(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTcgtt')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauTcgtt));
-    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__iauTcgtt));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauTcgtt));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTcgtt));
+    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTcgtt));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTcgtt));
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":506
- *         check_return(ret, 'iauTcgtt')
+  /* "astropy/time/erfa_time.pyx":508
+ *         check_return(ret, 'eraTcgtt')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
@@ -4483,7 +4494,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_14tcg_tt(CYTHON_UNUSED PyObj
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.tcg_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tcg_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -4500,10 +4511,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_14tcg_tt(CYTHON_UNUSED PyObj
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_17tdb_tcb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_16tdb_tcb[] = "\n    int iauTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2)\n\n    **  Given:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tcb1,tcb2  double    TCB as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    ";
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_17tdb_tcb = {__Pyx_NAMESTR("tdb_tcb"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_17tdb_tcb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_16tdb_tcb)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_17tdb_tcb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_17tdb_tcb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_16tdb_tcb[] = "\n    int eraTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2)\n\n    **  Given:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tcb1,tcb2  double    TCB as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    ";
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_17tdb_tcb = {__Pyx_NAMESTR("tdb_tcb"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_17tdb_tcb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_16tdb_tcb)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_17tdb_tcb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyObject *__pyx_r = 0;
@@ -4529,11 +4540,11 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_17tdb_tcb(PyObject *__pyx_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tdb_tcb", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tdb_tcb", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tdb_tcb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tdb_tcb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -4546,15 +4557,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_17tdb_tcb(PyObject *__pyx_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tdb_tcb", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tdb_tcb", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.tdb_tcb", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tdb_tcb", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_16tdb_tcb(__pyx_self, __pyx_v_in1, __pyx_v_in2);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_16tdb_tcb(__pyx_self, __pyx_v_in1, __pyx_v_in2);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -4563,7 +4574,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_17tdb_tcb(PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":511
+/* "astropy/time/erfa_time.pyx":513
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tdb_tcb(             # <<<<<<<<<<<<<<
@@ -4571,7 +4582,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_17tdb_tcb(PyObject *__pyx_se
  *     np.ndarray[double, ndim=1] in2):
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_16tdb_tcb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_16tdb_tcb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -4622,16 +4633,16 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_16tdb_tcb(CYTHON_UNUSED PyOb
   __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":526
+  /* "astropy/time/erfa_time.pyx":528
  *     **                int       status:  0 = OK
  *     """
  *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
@@ -4641,11 +4652,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_16tdb_tcb(CYTHON_UNUSED PyOb
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":527
+  /* "astropy/time/erfa_time.pyx":529
  *     """
  *     assert in1.shape[0] == in2.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -4654,46 +4665,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_16tdb_tcb(CYTHON_UNUSED PyOb
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":529
+  /* "astropy/time/erfa_time.pyx":531
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -4701,46 +4712,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_16tdb_tcb(CYTHON_UNUSED PyOb
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":530
+  /* "astropy/time/erfa_time.pyx":532
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -4748,65 +4759,65 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_16tdb_tcb(CYTHON_UNUSED PyOb
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":532
+  /* "astropy/time/erfa_time.pyx":534
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauTdbtcb(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTdbtcb')
+ *         ret = eraTdbtcb(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTdbtcb')
  */
   __pyx_t_8 = __pyx_v_n;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "astropy/time/sofa_time.pyx":533
+    /* "astropy/time/erfa_time.pyx":535
  * 
  *     for i in range(n):
- *         ret = iauTdbtcb(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauTdbtcb')
+ *         ret = eraTdbtcb(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraTdbtcb')
  * 
  */
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
     __pyx_t_12 = __pyx_v_i;
     __pyx_t_13 = __pyx_v_i;
-    __pyx_v_ret = iauTdbtcb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
+    __pyx_v_ret = eraTdbtcb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
 
-    /* "astropy/time/sofa_time.pyx":534
+    /* "astropy/time/erfa_time.pyx":536
  *     for i in range(n):
- *         ret = iauTdbtcb(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTdbtcb')             # <<<<<<<<<<<<<<
+ *         ret = eraTdbtcb(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTdbtcb')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauTdbtcb));
-    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__iauTdbtcb));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauTdbtcb));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTdbtcb));
+    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTdbtcb));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTdbtcb));
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":536
- *         check_return(ret, 'iauTdbtcb')
+  /* "astropy/time/erfa_time.pyx":538
+ *         check_return(ret, 'eraTdbtcb')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
@@ -4833,7 +4844,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_16tdb_tcb(CYTHON_UNUSED PyOb
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.tdb_tcb", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tdb_tcb", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -4850,10 +4861,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_16tdb_tcb(CYTHON_UNUSED PyOb
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_19tt_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_18tt_tai[] = "\n    int iauTttai(double tt1, double tt2, double *tai1, double *tai2)\n\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    ";
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_19tt_tai = {__Pyx_NAMESTR("tt_tai"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_19tt_tai, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_18tt_tai)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_19tt_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_19tt_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_18tt_tai[] = "\n    int eraTttai(double tt1, double tt2, double *tai1, double *tai2)\n\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    ";
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_19tt_tai = {__Pyx_NAMESTR("tt_tai"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_19tt_tai, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_18tt_tai)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_19tt_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyObject *__pyx_r = 0;
@@ -4879,11 +4890,11 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_19tt_tai(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tt_tai", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tt_tai", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_tai") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_tai") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -4896,15 +4907,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_19tt_tai(PyObject *__pyx_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tt_tai", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tt_tai", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.tt_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_18tt_tai(__pyx_self, __pyx_v_in1, __pyx_v_in2);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_18tt_tai(__pyx_self, __pyx_v_in1, __pyx_v_in2);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -4913,7 +4924,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_19tt_tai(PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":541
+/* "astropy/time/erfa_time.pyx":543
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_tai(             # <<<<<<<<<<<<<<
@@ -4921,7 +4932,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_19tt_tai(PyObject *__pyx_sel
  *     np.ndarray[double, ndim=1] in2):
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_18tt_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_18tt_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -4972,16 +4983,16 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_18tt_tai(CYTHON_UNUSED PyObj
   __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":556
+  /* "astropy/time/erfa_time.pyx":558
  *     **                int       status:  0 = OK
  *     """
  *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
@@ -4991,11 +5002,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_18tt_tai(CYTHON_UNUSED PyObj
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":557
+  /* "astropy/time/erfa_time.pyx":559
  *     """
  *     assert in1.shape[0] == in2.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -5004,46 +5015,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_18tt_tai(CYTHON_UNUSED PyObj
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":559
+  /* "astropy/time/erfa_time.pyx":561
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -5051,46 +5062,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_18tt_tai(CYTHON_UNUSED PyObj
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":560
+  /* "astropy/time/erfa_time.pyx":562
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -5098,65 +5109,65 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_18tt_tai(CYTHON_UNUSED PyObj
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":562
+  /* "astropy/time/erfa_time.pyx":564
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauTttai(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTttai')
+ *         ret = eraTttai(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTttai')
  */
   __pyx_t_8 = __pyx_v_n;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "astropy/time/sofa_time.pyx":563
+    /* "astropy/time/erfa_time.pyx":565
  * 
  *     for i in range(n):
- *         ret = iauTttai(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauTttai')
+ *         ret = eraTttai(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraTttai')
  * 
  */
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
     __pyx_t_12 = __pyx_v_i;
     __pyx_t_13 = __pyx_v_i;
-    __pyx_v_ret = iauTttai((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2. [...]
+    __pyx_v_ret = eraTttai((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2. [...]
 
-    /* "astropy/time/sofa_time.pyx":564
+    /* "astropy/time/erfa_time.pyx":566
  *     for i in range(n):
- *         ret = iauTttai(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTttai')             # <<<<<<<<<<<<<<
+ *         ret = eraTttai(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTttai')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauTttai));
-    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__iauTttai));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauTttai));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTttai));
+    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTttai));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTttai));
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":566
- *         check_return(ret, 'iauTttai')
+  /* "astropy/time/erfa_time.pyx":568
+ *         check_return(ret, 'eraTttai')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
@@ -5183,7 +5194,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_18tt_tai(CYTHON_UNUSED PyObj
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.tt_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -5200,10 +5211,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_18tt_tai(CYTHON_UNUSED PyObj
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_21tt_tcg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_20tt_tcg[] = "\n    int iauTttcg(double tt1, double tt2, double *tcg1, double *tcg2)\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tcg1,tcg2  double    TCG as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    ";
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_21tt_tcg = {__Pyx_NAMESTR("tt_tcg"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_21tt_tcg, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_20tt_tcg)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_21tt_tcg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_21tt_tcg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_20tt_tcg[] = "\n    int eraTttcg(double tt1, double tt2, double *tcg1, double *tcg2)\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned:\n    **     tcg1,tcg2  double    TCG as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    ";
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_21tt_tcg = {__Pyx_NAMESTR("tt_tcg"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_21tt_tcg, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_20tt_tcg)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_21tt_tcg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyObject *__pyx_r = 0;
@@ -5229,11 +5240,11 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_21tt_tcg(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tt_tcg", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tt_tcg", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_tcg") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_tcg") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -5246,15 +5257,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_21tt_tcg(PyObject *__pyx_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tt_tcg", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tt_tcg", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.tt_tcg", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tcg", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_20tt_tcg(__pyx_self, __pyx_v_in1, __pyx_v_in2);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_20tt_tcg(__pyx_self, __pyx_v_in1, __pyx_v_in2);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -5263,7 +5274,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_21tt_tcg(PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":571
+/* "astropy/time/erfa_time.pyx":573
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_tcg(             # <<<<<<<<<<<<<<
@@ -5271,7 +5282,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_21tt_tcg(PyObject *__pyx_sel
  *     np.ndarray[double, ndim=1] in2):
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_20tt_tcg(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_20tt_tcg(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -5322,16 +5333,16 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_20tt_tcg(CYTHON_UNUSED PyObj
   __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":585
+  /* "astropy/time/erfa_time.pyx":587
  *     **                int       status:  0 = OK
  *     """
  *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
@@ -5341,11 +5352,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_20tt_tcg(CYTHON_UNUSED PyObj
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":586
+  /* "astropy/time/erfa_time.pyx":588
  *     """
  *     assert in1.shape[0] == in2.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -5354,46 +5365,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_20tt_tcg(CYTHON_UNUSED PyObj
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":588
+  /* "astropy/time/erfa_time.pyx":590
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -5401,46 +5412,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_20tt_tcg(CYTHON_UNUSED PyObj
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":589
+  /* "astropy/time/erfa_time.pyx":591
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -5448,65 +5459,65 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_20tt_tcg(CYTHON_UNUSED PyObj
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":591
+  /* "astropy/time/erfa_time.pyx":593
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauTttcg(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTttcg')
+ *         ret = eraTttcg(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTttcg')
  */
   __pyx_t_8 = __pyx_v_n;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "astropy/time/sofa_time.pyx":592
+    /* "astropy/time/erfa_time.pyx":594
  * 
  *     for i in range(n):
- *         ret = iauTttcg(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauTttcg')
+ *         ret = eraTttcg(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraTttcg')
  * 
  */
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
     __pyx_t_12 = __pyx_v_i;
     __pyx_t_13 = __pyx_v_i;
-    __pyx_v_ret = iauTttcg((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2. [...]
+    __pyx_v_ret = eraTttcg((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2. [...]
 
-    /* "astropy/time/sofa_time.pyx":593
+    /* "astropy/time/erfa_time.pyx":595
  *     for i in range(n):
- *         ret = iauTttcg(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTttcg')             # <<<<<<<<<<<<<<
+ *         ret = eraTttcg(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTttcg')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauTttcg));
-    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__iauTttcg));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauTttcg));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTttcg));
+    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTttcg));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTttcg));
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":595
- *         check_return(ret, 'iauTttcg')
+  /* "astropy/time/erfa_time.pyx":597
+ *         check_return(ret, 'eraTttcg')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
@@ -5533,7 +5544,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_20tt_tcg(CYTHON_UNUSED PyObj
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.tt_tcg", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tcg", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -5550,10 +5561,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_20tt_tcg(CYTHON_UNUSED PyObj
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_23utc_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_22utc_tai[] = "\n    int iauUtctai(double utc1, double utc2, double *tai1, double *tai2)\n\n    **  Given:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)\n    **\n    **  Returned:\n    **     tai1,tai2  double   TAI as a 2-part Julian Date (Note 5)\n    **\n    **  Returned (function value):\n    **                int      status: +1 = dubious year (Note 3)\n    **                                  0 = OK\n    [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_23utc_tai = {__Pyx_NAMESTR("utc_tai"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_23utc_tai, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_22utc_tai)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_23utc_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_23utc_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_22utc_tai[] = "\n    int eraUtctai(double utc1, double utc2, double *tai1, double *tai2)\n\n    **  Given:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)\n    **\n    **  Returned:\n    **     tai1,tai2  double   TAI as a 2-part Julian Date (Note 5)\n    **\n    **  Returned (function value):\n    **                int      status: +1 = dubious year (Note 3)\n    **                                  0 = OK\n    [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_23utc_tai = {__Pyx_NAMESTR("utc_tai"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_23utc_tai, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_22utc_tai)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_23utc_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyObject *__pyx_r = 0;
@@ -5579,11 +5590,11 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_23utc_tai(PyObject *__pyx_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("utc_tai", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("utc_tai", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "utc_tai") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "utc_tai") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -5596,15 +5607,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_23utc_tai(PyObject *__pyx_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("utc_tai", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("utc_tai", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.utc_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.utc_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_22utc_tai(__pyx_self, __pyx_v_in1, __pyx_v_in2);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_22utc_tai(__pyx_self, __pyx_v_in1, __pyx_v_in2);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -5613,7 +5624,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_23utc_tai(PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":600
+/* "astropy/time/erfa_time.pyx":602
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def utc_tai(             # <<<<<<<<<<<<<<
@@ -5621,7 +5632,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_23utc_tai(PyObject *__pyx_se
  *     np.ndarray[double, ndim=1] in2):
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_22utc_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_22utc_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -5674,16 +5685,16 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_22utc_tai(CYTHON_UNUSED PyOb
   __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":640
+  /* "astropy/time/erfa_time.pyx":642
  *     **
  *     """
  *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
@@ -5693,11 +5704,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_22utc_tai(CYTHON_UNUSED PyOb
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":641
+  /* "astropy/time/erfa_time.pyx":643
  *     """
  *     assert in1.shape[0] == in2.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -5706,46 +5717,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_22utc_tai(CYTHON_UNUSED PyOb
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":643
+  /* "astropy/time/erfa_time.pyx":645
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -5753,46 +5764,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_22utc_tai(CYTHON_UNUSED PyOb
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":644
+  /* "astropy/time/erfa_time.pyx":646
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     warns = {1: DUBIOUS}
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -5800,77 +5811,77 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_22utc_tai(CYTHON_UNUSED PyOb
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":646
+  /* "astropy/time/erfa_time.pyx":648
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
  *     errs = {-1: 'unacceptable date'}
  * 
  */
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 648; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_warns = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":647
+  /* "astropy/time/erfa_time.pyx":649
  * 
  *     warns = {1: DUBIOUS}
  *     errs = {-1: 'unacceptable date'}             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_errs = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":649
+  /* "astropy/time/erfa_time.pyx":651
  *     errs = {-1: 'unacceptable date'}
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauUtctai(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauUtctai', warns, errs)
+ *         ret = eraUtctai(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraUtctai', warns, errs)
  */
   __pyx_t_8 = __pyx_v_n;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "astropy/time/sofa_time.pyx":650
+    /* "astropy/time/erfa_time.pyx":652
  * 
  *     for i in range(n):
- *         ret = iauUtctai(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauUtctai', warns, errs)
+ *         ret = eraUtctai(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraUtctai', warns, errs)
  * 
  */
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
     __pyx_t_12 = __pyx_v_i;
     __pyx_t_13 = __pyx_v_i;
-    __pyx_v_ret = iauUtctai((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
+    __pyx_v_ret = eraUtctai((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
 
-    /* "astropy/time/sofa_time.pyx":651
+    /* "astropy/time/erfa_time.pyx":653
  *     for i in range(n):
- *         ret = iauUtctai(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauUtctai', warns, errs)             # <<<<<<<<<<<<<<
+ *         ret = eraUtctai(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraUtctai', warns, errs)             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauUtctai));
-    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__iauUtctai));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauUtctai));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraUtctai));
+    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraUtctai));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraUtctai));
     __Pyx_INCREF(((PyObject *)__pyx_v_warns));
     PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_v_warns));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
@@ -5878,22 +5889,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_22utc_tai(CYTHON_UNUSED PyOb
     PyTuple_SET_ITEM(__pyx_t_3, 3, ((PyObject *)__pyx_v_errs));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":653
- *         check_return(ret, 'iauUtctai', warns, errs)
+  /* "astropy/time/erfa_time.pyx":655
+ *         check_return(ret, 'eraUtctai', warns, errs)
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
@@ -5920,7 +5931,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_22utc_tai(CYTHON_UNUSED PyOb
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.utc_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.utc_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -5939,10 +5950,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_22utc_tai(CYTHON_UNUSED PyOb
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_25tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_24tai_utc[] = "\n    int iauTaiutc(double tai1, double tai2, double *utc1, double *utc2)\n\n    **  Given:\n    **     tai1,tai2  double   TAI as a 2-part Julian Date (Note 1)\n    **\n    **  Returned:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-3)\n    **\n    **  Returned (function value):\n    **                int      status: +1 = dubious year (Note 4)\n    **                                  0 = OK\n    [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_25tai_utc = {__Pyx_NAMESTR("tai_utc"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_25tai_utc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_24tai_utc)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_25tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_25tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_24tai_utc[] = "\n    int eraTaiutc(double tai1, double tai2, double *utc1, double *utc2)\n\n    **  Given:\n    **     tai1,tai2  double   TAI as a 2-part Julian Date (Note 1)\n    **\n    **  Returned:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-3)\n    **\n    **  Returned (function value):\n    **                int      status: +1 = dubious year (Note 4)\n    **                                  0 = OK\n    [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_25tai_utc = {__Pyx_NAMESTR("tai_utc"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_25tai_utc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_24tai_utc)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_25tai_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyObject *__pyx_r = 0;
@@ -5968,11 +5979,11 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_25tai_utc(PyObject *__pyx_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tai_utc", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tai_utc", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tai_utc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tai_utc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -5985,15 +5996,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_25tai_utc(PyObject *__pyx_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tai_utc", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tai_utc", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_24tai_utc(__pyx_self, __pyx_v_in1, __pyx_v_in2);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_24tai_utc(__pyx_self, __pyx_v_in1, __pyx_v_in2);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -6002,7 +6013,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_25tai_utc(PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":658
+/* "astropy/time/erfa_time.pyx":660
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tai_utc(             # <<<<<<<<<<<<<<
@@ -6010,7 +6021,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_25tai_utc(PyObject *__pyx_se
  *     np.ndarray[double, ndim=1] in2):
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_24tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_24tai_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -6063,17 +6074,17 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_24tai_utc(CYTHON_UNUSED PyOb
   __pyx_pybuffernd_in2.rcbuffer = &__pyx_pybuffer_in2;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":697
- *     **     to be trusted.  See iauDat for further details.
+  /* "astropy/time/erfa_time.pyx":699
+ *     **     to be trusted.  See eraDat for further details.
  *         """
  *     assert in1.shape[0] == in2.shape[0]             # <<<<<<<<<<<<<<
  *     cdef unsigned n = in1.shape[0]
@@ -6082,11 +6093,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_24tai_utc(CYTHON_UNUSED PyOb
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_in1->dimensions[0]) == (__pyx_v_in2->dimensions[0])))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":698
+  /* "astropy/time/erfa_time.pyx":700
  *         """
  *     assert in1.shape[0] == in2.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -6095,46 +6106,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_24tai_utc(CYTHON_UNUSED PyOb
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":700
+  /* "astropy/time/erfa_time.pyx":702
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 702; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -6142,46 +6153,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_24tai_utc(CYTHON_UNUSED PyOb
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":701
+  /* "astropy/time/erfa_time.pyx":703
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     warns = {1: DUBIOUS}
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -6189,77 +6200,77 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_24tai_utc(CYTHON_UNUSED PyOb
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":703
+  /* "astropy/time/erfa_time.pyx":705
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
  *     errs = {-1: 'unacceptable date'}
  * 
  */
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_warns = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":704
+  /* "astropy/time/erfa_time.pyx":706
  * 
  *     warns = {1: DUBIOUS}
  *     errs = {-1: 'unacceptable date'}             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_errs = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":706
+  /* "astropy/time/erfa_time.pyx":708
  *     errs = {-1: 'unacceptable date'}
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauTaiutc(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTaiutc', warns, errs)
+ *         ret = eraTaiutc(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTaiutc', warns, errs)
  */
   __pyx_t_8 = __pyx_v_n;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "astropy/time/sofa_time.pyx":707
+    /* "astropy/time/erfa_time.pyx":709
  * 
  *     for i in range(n):
- *         ret = iauTaiutc(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauTaiutc', warns, errs)
+ *         ret = eraTaiutc(in1[i], in2[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraTaiutc', warns, errs)
  * 
  */
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
     __pyx_t_12 = __pyx_v_i;
     __pyx_t_13 = __pyx_v_i;
-    __pyx_v_ret = iauTaiutc((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
+    __pyx_v_ret = eraTaiutc((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in2.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_out1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out2 [...]
 
-    /* "astropy/time/sofa_time.pyx":708
+    /* "astropy/time/erfa_time.pyx":710
  *     for i in range(n):
- *         ret = iauTaiutc(in1[i], in2[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTaiutc', warns, errs)             # <<<<<<<<<<<<<<
+ *         ret = eraTaiutc(in1[i], in2[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTaiutc', warns, errs)             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauTaiutc));
-    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__iauTaiutc));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauTaiutc));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTaiutc));
+    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__eraTaiutc));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTaiutc));
     __Pyx_INCREF(((PyObject *)__pyx_v_warns));
     PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_v_warns));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
@@ -6267,22 +6278,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_24tai_utc(CYTHON_UNUSED PyOb
     PyTuple_SET_ITEM(__pyx_t_3, 3, ((PyObject *)__pyx_v_errs));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":710
- *         check_return(ret, 'iauTaiutc', warns, errs)
+  /* "astropy/time/erfa_time.pyx":712
+ *         check_return(ret, 'eraTaiutc', warns, errs)
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 712; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_out1));
@@ -6309,7 +6320,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_24tai_utc(CYTHON_UNUSED PyOb
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tai_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -6328,10 +6339,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_24tai_utc(CYTHON_UNUSED PyOb
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_27tai_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_26tai_ut1[] = "\n    int iauTaiut1(double tai1, double tai2, double dta, double *ut11, double *ut12)\n\n    **  Given:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **     dta        double    UT1-TAI in seconds\n    **\n    **  Returned:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    ** [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_27tai_ut1 = {__Pyx_NAMESTR("tai_ut1"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_27tai_ut1, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_26tai_ut1)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_27tai_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_27tai_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_26tai_ut1[] = "\n    int eraTaiut1(double tai1, double tai2, double dta, double *ut11, double *ut12)\n\n    **  Given:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **     dta        double    UT1-TAI in seconds\n    **\n    **  Returned:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    ** [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_27tai_ut1 = {__Pyx_NAMESTR("tai_ut1"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_27tai_ut1, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_26tai_ut1)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_27tai_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyArrayObject *__pyx_v_dt = 0;
@@ -6359,16 +6370,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_27tai_ut1(PyObject *__pyx_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tai_ut1", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tai_ut1", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tai_ut1", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tai_ut1", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tai_ut1") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tai_ut1") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -6383,16 +6394,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_27tai_ut1(PyObject *__pyx_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tai_ut1", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tai_ut1", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.tai_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tai_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_26tai_ut1(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_26tai_ut1(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -6401,7 +6412,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_27tai_ut1(PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":715
+/* "astropy/time/erfa_time.pyx":717
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tai_ut1(             # <<<<<<<<<<<<<<
@@ -6409,7 +6420,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_27tai_ut1(PyObject *__pyx_se
  *     np.ndarray[double, ndim=1] in2,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_26tai_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_26tai_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -6468,21 +6479,21 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_26tai_ut1(CYTHON_UNUSED PyOb
   __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_dt.diminfo[0].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dt.diminfo[0].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":742
+  /* "astropy/time/erfa_time.pyx":744
  *     **     available from IERS tabulations.
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
@@ -6496,11 +6507,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_26tai_ut1(CYTHON_UNUSED PyOb
   }
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 742; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":743
+  /* "astropy/time/erfa_time.pyx":745
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -6509,46 +6520,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_26tai_ut1(CYTHON_UNUSED PyOb
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":745
+  /* "astropy/time/erfa_time.pyx":747
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -6556,46 +6567,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_26tai_ut1(CYTHON_UNUSED PyOb
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":746
+  /* "astropy/time/erfa_time.pyx":748
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_6));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -6603,22 +6614,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_26tai_ut1(CYTHON_UNUSED PyOb
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":748
+  /* "astropy/time/erfa_time.pyx":750
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauTaiut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTaiut1')
+ *         ret = eraTaiut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTaiut1')
  */
   __pyx_t_9 = __pyx_v_n;
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "astropy/time/sofa_time.pyx":749
+    /* "astropy/time/erfa_time.pyx":751
  * 
  *     for i in range(n):
- *         ret = iauTaiut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauTaiut1')
+ *         ret = eraTaiut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraTaiut1')
  * 
  */
     __pyx_t_11 = __pyx_v_i;
@@ -6626,43 +6637,43 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_26tai_ut1(CYTHON_UNUSED PyOb
     __pyx_t_13 = __pyx_v_i;
     __pyx_t_14 = __pyx_v_i;
     __pyx_t_15 = __pyx_v_i;
-    __pyx_v_ret = iauTaiut1((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
+    __pyx_v_ret = eraTaiut1((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
 
-    /* "astropy/time/sofa_time.pyx":750
+    /* "astropy/time/erfa_time.pyx":752
  *     for i in range(n):
- *         ret = iauTaiut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTaiut1')             # <<<<<<<<<<<<<<
+ *         ret = eraTaiut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTaiut1')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_6);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauTaiut1));
-    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__iauTaiut1));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauTaiut1));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTaiut1));
+    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraTaiut1));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTaiut1));
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":752
- *         check_return(ret, 'iauTaiut1')
+  /* "astropy/time/erfa_time.pyx":754
+ *         check_return(ret, 'eraTaiut1')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
@@ -6690,7 +6701,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_26tai_ut1(CYTHON_UNUSED PyOb
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.tai_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tai_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -6708,10 +6719,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_26tai_ut1(CYTHON_UNUSED PyOb
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_29ut1_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_28ut1_tai[] = "\n    int iauUt1tai(double ut11, double ut12, double dta, double *tai1, double *tai2)\n\n    **  Given:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **     dta        double    UT1-TAI in seconds\n    **\n    **  Returned:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    ** [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_29ut1_tai = {__Pyx_NAMESTR("ut1_tai"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_29ut1_tai, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_28ut1_tai)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_29ut1_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_29ut1_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_28ut1_tai[] = "\n    int eraUt1tai(double ut11, double ut12, double dta, double *tai1, double *tai2)\n\n    **  Given:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **     dta        double    UT1-TAI in seconds\n    **\n    **  Returned:\n    **     tai1,tai2  double    TAI as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    ** [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_29ut1_tai = {__Pyx_NAMESTR("ut1_tai"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_29ut1_tai, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_28ut1_tai)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_29ut1_tai(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyArrayObject *__pyx_v_dt = 0;
@@ -6739,16 +6750,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_29ut1_tai(PyObject *__pyx_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("ut1_tai", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("ut1_tai", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("ut1_tai", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("ut1_tai", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ut1_tai") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ut1_tai") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -6763,16 +6774,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_29ut1_tai(PyObject *__pyx_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("ut1_tai", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("ut1_tai", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.ut1_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 758; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_28ut1_tai(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_28ut1_tai(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -6781,7 +6792,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_29ut1_tai(PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":757
+/* "astropy/time/erfa_time.pyx":759
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def ut1_tai(             # <<<<<<<<<<<<<<
@@ -6789,7 +6800,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_29ut1_tai(PyObject *__pyx_se
  *     np.ndarray[double, ndim=1] in2,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_28ut1_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_28ut1_tai(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -6848,21 +6859,21 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_28ut1_tai(CYTHON_UNUSED PyOb
   __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_dt.diminfo[0].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dt.diminfo[0].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":784
+  /* "astropy/time/erfa_time.pyx":786
  *     **     available from IERS tabulations.
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
@@ -6876,11 +6887,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_28ut1_tai(CYTHON_UNUSED PyOb
   }
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":785
+  /* "astropy/time/erfa_time.pyx":787
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -6889,46 +6900,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_28ut1_tai(CYTHON_UNUSED PyOb
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":787
+  /* "astropy/time/erfa_time.pyx":789
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -6936,46 +6947,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_28ut1_tai(CYTHON_UNUSED PyOb
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":788
+  /* "astropy/time/erfa_time.pyx":790
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_6));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -6983,22 +6994,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_28ut1_tai(CYTHON_UNUSED PyOb
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":790
+  /* "astropy/time/erfa_time.pyx":792
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauUt1tai(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauUt1tai')
+ *         ret = eraUt1tai(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraUt1tai')
  */
   __pyx_t_9 = __pyx_v_n;
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "astropy/time/sofa_time.pyx":791
+    /* "astropy/time/erfa_time.pyx":793
  * 
  *     for i in range(n):
- *         ret = iauUt1tai(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauUt1tai')
+ *         ret = eraUt1tai(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraUt1tai')
  * 
  */
     __pyx_t_11 = __pyx_v_i;
@@ -7006,43 +7017,43 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_28ut1_tai(CYTHON_UNUSED PyOb
     __pyx_t_13 = __pyx_v_i;
     __pyx_t_14 = __pyx_v_i;
     __pyx_t_15 = __pyx_v_i;
-    __pyx_v_ret = iauUt1tai((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
+    __pyx_v_ret = eraUt1tai((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
 
-    /* "astropy/time/sofa_time.pyx":792
+    /* "astropy/time/erfa_time.pyx":794
  *     for i in range(n):
- *         ret = iauUt1tai(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauUt1tai')             # <<<<<<<<<<<<<<
+ *         ret = eraUt1tai(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraUt1tai')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_6);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauUt1tai));
-    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__iauUt1tai));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauUt1tai));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraUt1tai));
+    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraUt1tai));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraUt1tai));
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":794
- *         check_return(ret, 'iauUt1tai')
+  /* "astropy/time/erfa_time.pyx":796
+ *         check_return(ret, 'eraUt1tai')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
@@ -7070,7 +7081,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_28ut1_tai(CYTHON_UNUSED PyOb
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.ut1_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_tai", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -7088,10 +7099,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_28ut1_tai(CYTHON_UNUSED PyOb
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_31tt_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_30tt_ut1[] = "\n    int iauTtut1(double tt1, double tt2, double dt, double *ut11, double *ut12)\n\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **     dt         double    TT-UT1 in seconds\n    **\n    **  Returned:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n    * [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_31tt_ut1 = {__Pyx_NAMESTR("tt_ut1"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_31tt_ut1, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_30tt_ut1)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_31tt_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_31tt_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_30tt_ut1[] = "\n    int eraTtut1(double tt1, double tt2, double dt, double *ut11, double *ut12)\n\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **     dt         double    TT-UT1 in seconds\n    **\n    **  Returned:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n    * [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_31tt_ut1 = {__Pyx_NAMESTR("tt_ut1"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_31tt_ut1, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_30tt_ut1)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_31tt_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyArrayObject *__pyx_v_dt = 0;
@@ -7119,16 +7130,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_31tt_ut1(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tt_ut1", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tt_ut1", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tt_ut1", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tt_ut1", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_ut1") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_ut1") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7143,16 +7154,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_31tt_ut1(PyObject *__pyx_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tt_ut1", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tt_ut1", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.tt_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tt_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_30tt_ut1(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_30tt_ut1(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -7161,7 +7172,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_31tt_ut1(PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":799
+/* "astropy/time/erfa_time.pyx":801
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_ut1(             # <<<<<<<<<<<<<<
@@ -7169,7 +7180,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_31tt_ut1(PyObject *__pyx_sel
  *     np.ndarray[double, ndim=1] in2,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_30tt_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_30tt_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -7228,21 +7239,21 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_30tt_ut1(CYTHON_UNUSED PyObj
   __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_dt.diminfo[0].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dt.diminfo[0].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":825
+  /* "astropy/time/erfa_time.pyx":827
  *     **  2) The argument dt is classical Delta T.
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
@@ -7256,11 +7267,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_30tt_ut1(CYTHON_UNUSED PyObj
   }
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":826
+  /* "astropy/time/erfa_time.pyx":828
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -7269,46 +7280,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_30tt_ut1(CYTHON_UNUSED PyObj
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":828
+  /* "astropy/time/erfa_time.pyx":830
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -7316,46 +7327,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_30tt_ut1(CYTHON_UNUSED PyObj
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":829
+  /* "astropy/time/erfa_time.pyx":831
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_6));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -7363,22 +7374,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_30tt_ut1(CYTHON_UNUSED PyObj
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":831
+  /* "astropy/time/erfa_time.pyx":833
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauTtut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTtut1')
+ *         ret = eraTtut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTtut1')
  */
   __pyx_t_9 = __pyx_v_n;
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "astropy/time/sofa_time.pyx":832
+    /* "astropy/time/erfa_time.pyx":834
  * 
  *     for i in range(n):
- *         ret = iauTtut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauTtut1')
+ *         ret = eraTtut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraTtut1')
  * 
  */
     __pyx_t_11 = __pyx_v_i;
@@ -7386,43 +7397,43 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_30tt_ut1(CYTHON_UNUSED PyObj
     __pyx_t_13 = __pyx_v_i;
     __pyx_t_14 = __pyx_v_i;
     __pyx_t_15 = __pyx_v_i;
-    __pyx_v_ret = iauTtut1((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffe [...]
+    __pyx_v_ret = eraTtut1((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffe [...]
 
-    /* "astropy/time/sofa_time.pyx":833
+    /* "astropy/time/erfa_time.pyx":835
  *     for i in range(n):
- *         ret = iauTtut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTtut1')             # <<<<<<<<<<<<<<
+ *         ret = eraTtut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTtut1')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_6);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauTtut1));
-    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__iauTtut1));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauTtut1));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTtut1));
+    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraTtut1));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTtut1));
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":835
- *         check_return(ret, 'iauTtut1')
+  /* "astropy/time/erfa_time.pyx":837
+ *         check_return(ret, 'eraTtut1')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
@@ -7450,7 +7461,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_30tt_ut1(CYTHON_UNUSED PyObj
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.tt_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tt_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -7468,10 +7479,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_30tt_ut1(CYTHON_UNUSED PyObj
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_33ut1_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_32ut1_tt[] = "\n    int iauUt1tt(double ut11, double ut12, double dt, double *tt1, double *tt2)\n\n    **  Given:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **     dt         double    TT-UT1 in seconds\n    **\n    **  Returned:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n    * [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_33ut1_tt = {__Pyx_NAMESTR("ut1_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_33ut1_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_32ut1_tt)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_33ut1_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_33ut1_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_32ut1_tt[] = "\n    int eraUt1tt(double ut11, double ut12, double dt, double *tt1, double *tt2)\n\n    **  Given:\n    **     ut11,ut12  double    UT1 as a 2-part Julian Date\n    **     dt         double    TT-UT1 in seconds\n    **\n    **  Returned:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n    * [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_33ut1_tt = {__Pyx_NAMESTR("ut1_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_33ut1_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_32ut1_tt)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_33ut1_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyArrayObject *__pyx_v_dt = 0;
@@ -7499,16 +7510,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_33ut1_tt(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("ut1_tt", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("ut1_tt", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("ut1_tt", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("ut1_tt", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ut1_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ut1_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7523,16 +7534,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_33ut1_tt(PyObject *__pyx_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("ut1_tt", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("ut1_tt", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.ut1_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_32ut1_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_32ut1_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -7541,7 +7552,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_33ut1_tt(PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":840
+/* "astropy/time/erfa_time.pyx":842
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def ut1_tt(             # <<<<<<<<<<<<<<
@@ -7549,7 +7560,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_33ut1_tt(PyObject *__pyx_sel
  *     np.ndarray[double, ndim=1] in2,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_32ut1_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_32ut1_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -7608,21 +7619,21 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_32ut1_tt(CYTHON_UNUSED PyObj
   __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_dt.diminfo[0].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dt.diminfo[0].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":866
+  /* "astropy/time/erfa_time.pyx":868
  *     **  2) The argument dt is classical Delta T.
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
@@ -7636,11 +7647,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_32ut1_tt(CYTHON_UNUSED PyObj
   }
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 866; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 868; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":867
+  /* "astropy/time/erfa_time.pyx":869
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -7649,46 +7660,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_32ut1_tt(CYTHON_UNUSED PyObj
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":869
+  /* "astropy/time/erfa_time.pyx":871
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -7696,46 +7707,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_32ut1_tt(CYTHON_UNUSED PyObj
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":870
+  /* "astropy/time/erfa_time.pyx":872
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_6));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -7743,22 +7754,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_32ut1_tt(CYTHON_UNUSED PyObj
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":872
+  /* "astropy/time/erfa_time.pyx":874
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauUt1tt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauUt1tt')
+ *         ret = eraUt1tt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraUt1tt')
  */
   __pyx_t_9 = __pyx_v_n;
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "astropy/time/sofa_time.pyx":873
+    /* "astropy/time/erfa_time.pyx":875
  * 
  *     for i in range(n):
- *         ret = iauUt1tt(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauUt1tt')
+ *         ret = eraUt1tt(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraUt1tt')
  * 
  */
     __pyx_t_11 = __pyx_v_i;
@@ -7766,43 +7777,43 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_32ut1_tt(CYTHON_UNUSED PyObj
     __pyx_t_13 = __pyx_v_i;
     __pyx_t_14 = __pyx_v_i;
     __pyx_t_15 = __pyx_v_i;
-    __pyx_v_ret = iauUt1tt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffe [...]
+    __pyx_v_ret = eraUt1tt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffe [...]
 
-    /* "astropy/time/sofa_time.pyx":874
+    /* "astropy/time/erfa_time.pyx":876
  *     for i in range(n):
- *         ret = iauUt1tt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauUt1tt')             # <<<<<<<<<<<<<<
+ *         ret = eraUt1tt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraUt1tt')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_6);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauUt1tt));
-    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__iauUt1tt));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauUt1tt));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraUt1tt));
+    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraUt1tt));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraUt1tt));
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":876
- *         check_return(ret, 'iauUt1tt')
+  /* "astropy/time/erfa_time.pyx":878
+ *         check_return(ret, 'eraUt1tt')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
@@ -7830,7 +7841,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_32ut1_tt(CYTHON_UNUSED PyObj
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.ut1_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -7848,10 +7859,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_32ut1_tt(CYTHON_UNUSED PyObj
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_35tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_34tdb_tt[] = "\n    int iauTdbtt(double tdb1, double tdb2, double dtr, double *tt1, double *tt2)\n\n    **  Given:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **     dtr        double    TDB-TT in seconds\n    **\n    **  Returned:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n     [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_35tdb_tt = {__Pyx_NAMESTR("tdb_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_35tdb_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_34tdb_tt)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_35tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_35tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_34tdb_tt[] = "\n    int eraTdbtt(double tdb1, double tdb2, double dtr, double *tt1, double *tt2)\n\n    **  Given:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **     dtr        double    TDB-TT in seconds\n    **\n    **  Returned:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n     [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_35tdb_tt = {__Pyx_NAMESTR("tdb_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_35tdb_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_34tdb_tt)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_35tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyArrayObject *__pyx_v_dt = 0;
@@ -7879,16 +7890,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_35tdb_tt(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tdb_tt", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tdb_tt", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tdb_tt", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tdb_tt", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tdb_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tdb_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -7903,16 +7914,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_35tdb_tt(PyObject *__pyx_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tdb_tt", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tdb_tt", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_34tdb_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_34tdb_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -7921,7 +7932,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_35tdb_tt(PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":881
+/* "astropy/time/erfa_time.pyx":883
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tdb_tt(             # <<<<<<<<<<<<<<
@@ -7929,7 +7940,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_35tdb_tt(PyObject *__pyx_sel
  *     np.ndarray[double, ndim=1] in2,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_34tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_34tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -7988,21 +7999,21 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_34tdb_tt(CYTHON_UNUSED PyObj
   __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_dt.diminfo[0].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dt.diminfo[0].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":916
+  /* "astropy/time/erfa_time.pyx":918
  *     **     JPL solar system ephemerides.
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
@@ -8016,11 +8027,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_34tdb_tt(CYTHON_UNUSED PyObj
   }
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 918; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":917
+  /* "astropy/time/erfa_time.pyx":919
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -8029,46 +8040,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_34tdb_tt(CYTHON_UNUSED PyObj
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":919
+  /* "astropy/time/erfa_time.pyx":921
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -8076,46 +8087,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_34tdb_tt(CYTHON_UNUSED PyObj
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":920
+  /* "astropy/time/erfa_time.pyx":922
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_6));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -8123,22 +8134,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_34tdb_tt(CYTHON_UNUSED PyObj
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":922
+  /* "astropy/time/erfa_time.pyx":924
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauTdbtt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTdbtt')
+ *         ret = eraTdbtt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTdbtt')
  */
   __pyx_t_9 = __pyx_v_n;
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "astropy/time/sofa_time.pyx":923
+    /* "astropy/time/erfa_time.pyx":925
  * 
  *     for i in range(n):
- *         ret = iauTdbtt(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauTdbtt')
+ *         ret = eraTdbtt(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraTdbtt')
  * 
  */
     __pyx_t_11 = __pyx_v_i;
@@ -8146,43 +8157,43 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_34tdb_tt(CYTHON_UNUSED PyObj
     __pyx_t_13 = __pyx_v_i;
     __pyx_t_14 = __pyx_v_i;
     __pyx_t_15 = __pyx_v_i;
-    __pyx_v_ret = iauTdbtt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffe [...]
+    __pyx_v_ret = eraTdbtt((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffe [...]
 
-    /* "astropy/time/sofa_time.pyx":924
+    /* "astropy/time/erfa_time.pyx":926
  *     for i in range(n):
- *         ret = iauTdbtt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTdbtt')             # <<<<<<<<<<<<<<
+ *         ret = eraTdbtt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTdbtt')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_6);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauTdbtt));
-    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__iauTdbtt));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauTdbtt));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTdbtt));
+    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraTdbtt));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTdbtt));
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":926
- *         check_return(ret, 'iauTdbtt')
+  /* "astropy/time/erfa_time.pyx":928
+ *         check_return(ret, 'eraTdbtt')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
@@ -8210,7 +8221,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_34tdb_tt(CYTHON_UNUSED PyObj
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -8228,10 +8239,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_34tdb_tt(CYTHON_UNUSED PyObj
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_37tt_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_36tt_tdb[] = "\n    int iauTttdb(double tt1, double tt2, double dtr, double *tdb1, double *tdb2)\n\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **     dtr        double    TDB-TT in seconds\n    **\n    **  Returned:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n     [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_37tt_tdb = {__Pyx_NAMESTR("tt_tdb"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_37tt_tdb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_36tt_tdb)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_37tt_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_37tt_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_36tt_tdb[] = "\n    int eraTttdb(double tt1, double tt2, double dtr, double *tdb1, double *tdb2)\n\n    **  Given:\n    **     tt1,tt2    double    TT as a 2-part Julian Date\n    **     dtr        double    TDB-TT in seconds\n    **\n    **  Returned:\n    **     tdb1,tdb2  double    TDB as a 2-part Julian Date\n    **\n    **  Returned (function value):\n    **                int       status:  0 = OK\n    **\n    **  Notes:\n    **\n     [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_37tt_tdb = {__Pyx_NAMESTR("tt_tdb"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_37tt_tdb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_36tt_tdb)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_37tt_tdb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyArrayObject *__pyx_v_dt = 0;
@@ -8259,16 +8270,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_37tt_tdb(PyObject *__pyx_sel
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tt_tdb", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tt_tdb", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("tt_tdb", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("tt_tdb", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_tdb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tt_tdb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -8283,16 +8294,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_37tt_tdb(PyObject *__pyx_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("tt_tdb", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("tt_tdb", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.tt_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 934; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_36tt_tdb(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 934; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 935; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 936; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_36tt_tdb(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -8301,7 +8312,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_37tt_tdb(PyObject *__pyx_sel
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":931
+/* "astropy/time/erfa_time.pyx":933
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_tdb(             # <<<<<<<<<<<<<<
@@ -8309,7 +8320,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_37tt_tdb(PyObject *__pyx_sel
  *     np.ndarray[double, ndim=1] in2,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_36tt_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_36tt_tdb(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -8368,21 +8379,21 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_36tt_tdb(CYTHON_UNUSED PyObj
   __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_dt.diminfo[0].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dt.diminfo[0].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":966
+  /* "astropy/time/erfa_time.pyx":968
  *     **     solar system ephemerides.
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
@@ -8396,11 +8407,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_36tt_tdb(CYTHON_UNUSED PyObj
   }
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 968; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":967
+  /* "astropy/time/erfa_time.pyx":969
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -8409,46 +8420,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_36tt_tdb(CYTHON_UNUSED PyObj
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":969
+  /* "astropy/time/erfa_time.pyx":971
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -8456,46 +8467,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_36tt_tdb(CYTHON_UNUSED PyObj
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":970
+  /* "astropy/time/erfa_time.pyx":972
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_6));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 970; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -8503,22 +8514,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_36tt_tdb(CYTHON_UNUSED PyObj
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":972
+  /* "astropy/time/erfa_time.pyx":974
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauTttdb(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTttdb')
+ *         ret = eraTttdb(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTttdb')
  */
   __pyx_t_9 = __pyx_v_n;
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "astropy/time/sofa_time.pyx":973
+    /* "astropy/time/erfa_time.pyx":975
  * 
  *     for i in range(n):
- *         ret = iauTttdb(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauTttdb')
+ *         ret = eraTttdb(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraTttdb')
  * 
  */
     __pyx_t_11 = __pyx_v_i;
@@ -8526,43 +8537,43 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_36tt_tdb(CYTHON_UNUSED PyObj
     __pyx_t_13 = __pyx_v_i;
     __pyx_t_14 = __pyx_v_i;
     __pyx_t_15 = __pyx_v_i;
-    __pyx_v_ret = iauTttdb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffe [...]
+    __pyx_v_ret = eraTttdb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuffe [...]
 
-    /* "astropy/time/sofa_time.pyx":974
+    /* "astropy/time/erfa_time.pyx":976
  *     for i in range(n):
- *         ret = iauTttdb(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauTttdb')             # <<<<<<<<<<<<<<
+ *         ret = eraTttdb(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraTttdb')             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_6);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauTttdb));
-    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__iauTttdb));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauTttdb));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraTttdb));
+    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraTttdb));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraTttdb));
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 974; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":976
- *         check_return(ret, 'iauTttdb')
+  /* "astropy/time/erfa_time.pyx":978
+ *         check_return(ret, 'eraTttdb')
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 976; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 978; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
@@ -8590,7 +8601,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_36tt_tdb(CYTHON_UNUSED PyObj
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.tt_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.tt_tdb", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -8608,10 +8619,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_36tt_tdb(CYTHON_UNUSED PyObj
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_39ut1_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_38ut1_utc[] = "\n    int iauUt1utc(double ut11, double ut12, double dut1, double *utc1, double *utc2)\n\n    **  Given:\n    **     ut11,ut12  double   UT1 as a 2-part Julian Date (Note 1)\n    **     dut1       double   Delta UT1: UT1-UTC in seconds (Note 2)\n    **\n    **  Returned:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 3,4)\n    **\n    **  Returned (function value):\n    **                int      sta [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_39ut1_utc = {__Pyx_NAMESTR("ut1_utc"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_39ut1_utc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_38ut1_utc)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_39ut1_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_39ut1_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_38ut1_utc[] = "\n    int eraUt1utc(double ut11, double ut12, double dut1, double *utc1, double *utc2)\n\n    **  Given:\n    **     ut11,ut12  double   UT1 as a 2-part Julian Date (Note 1)\n    **     dut1       double   Delta UT1: UT1-UTC in seconds (Note 2)\n    **\n    **  Returned:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 3,4)\n    **\n    **  Returned (function value):\n    **                int      sta [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_39ut1_utc = {__Pyx_NAMESTR("ut1_utc"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_39ut1_utc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_38ut1_utc)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_39ut1_utc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyArrayObject *__pyx_v_dt = 0;
@@ -8639,16 +8650,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_39ut1_utc(PyObject *__pyx_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("ut1_utc", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("ut1_utc", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("ut1_utc", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("ut1_utc", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ut1_utc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ut1_utc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -8663,16 +8674,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_39ut1_utc(PyObject *__pyx_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("ut1_utc", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("ut1_utc", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.ut1_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 982; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 984; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 985; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 986; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_38ut1_utc(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -8681,7 +8692,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_39ut1_utc(PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":981
+/* "astropy/time/erfa_time.pyx":983
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def ut1_utc(             # <<<<<<<<<<<<<<
@@ -8689,7 +8700,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_39ut1_utc(PyObject *__pyx_se
  *     np.ndarray[double, ndim=1] in2,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_38ut1_utc(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -8750,22 +8761,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(CYTHON_UNUSED PyOb
   __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_dt.diminfo[0].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dt.diminfo[0].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":1027
- *     **     to be trusted.  See iauDat for further details.
+  /* "astropy/time/erfa_time.pyx":1029
+ *     **     to be trusted.  See eraDat for further details.
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
  *     cdef unsigned n = in1.shape[0]
@@ -8778,11 +8789,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(CYTHON_UNUSED PyOb
   }
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1029; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":1028
+  /* "astropy/time/erfa_time.pyx":1030
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -8791,46 +8802,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(CYTHON_UNUSED PyOb
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":1030
+  /* "astropy/time/erfa_time.pyx":1032
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1030; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -8838,46 +8849,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(CYTHON_UNUSED PyOb
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1031
+  /* "astropy/time/erfa_time.pyx":1033
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     warns = {1: DUBIOUS}
  */
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_6));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -8885,51 +8896,51 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(CYTHON_UNUSED PyOb
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1033
+  /* "astropy/time/erfa_time.pyx":1035
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
  *     errs = {-1: 'unacceptable date'}
  * 
  */
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_1, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_1, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_v_warns = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1034
+  /* "astropy/time/erfa_time.pyx":1036
  * 
  *     warns = {1: DUBIOUS}
  *     errs = {-1: 'unacceptable date'}             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1034; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1034; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_errs = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1036
+  /* "astropy/time/erfa_time.pyx":1038
  *     errs = {-1: 'unacceptable date'}
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauUt1utc(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauUt1utc', warns, errs)
+ *         ret = eraUt1utc(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraUt1utc', warns, errs)
  */
   __pyx_t_9 = __pyx_v_n;
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "astropy/time/sofa_time.pyx":1037
+    /* "astropy/time/erfa_time.pyx":1039
  * 
  *     for i in range(n):
- *         ret = iauUt1utc(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauUt1utc', warns, errs)
+ *         ret = eraUt1utc(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraUt1utc', warns, errs)
  * 
  */
     __pyx_t_11 = __pyx_v_i;
@@ -8937,26 +8948,26 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(CYTHON_UNUSED PyOb
     __pyx_t_13 = __pyx_v_i;
     __pyx_t_14 = __pyx_v_i;
     __pyx_t_15 = __pyx_v_i;
-    __pyx_v_ret = iauUt1utc((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
+    __pyx_v_ret = eraUt1utc((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
 
-    /* "astropy/time/sofa_time.pyx":1038
+    /* "astropy/time/erfa_time.pyx":1040
  *     for i in range(n):
- *         ret = iauUt1utc(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauUt1utc', warns, errs)             # <<<<<<<<<<<<<<
+ *         ret = eraUt1utc(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraUt1utc', warns, errs)             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_6);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauUt1utc));
-    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__iauUt1utc));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauUt1utc));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraUt1utc));
+    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraUt1utc));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraUt1utc));
     __Pyx_INCREF(((PyObject *)__pyx_v_warns));
     PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_warns));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
@@ -8964,22 +8975,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(CYTHON_UNUSED PyOb
     PyTuple_SET_ITEM(__pyx_t_4, 3, ((PyObject *)__pyx_v_errs));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1038; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":1040
- *         check_return(ret, 'iauUt1utc', warns, errs)
+  /* "astropy/time/erfa_time.pyx":1042
+ *         check_return(ret, 'eraUt1utc', warns, errs)
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
@@ -9007,7 +9018,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(CYTHON_UNUSED PyOb
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.ut1_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.ut1_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -9027,10 +9038,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_38ut1_utc(CYTHON_UNUSED PyOb
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_41utc_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_40utc_ut1[] = "\n    int iauUtcut1(double utc1, double utc2, double dut1, double *ut11, double *ut12)\n\n    **  Given:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)\n    **     dut1       double   Delta UT1 = UT1-UTC in seconds (Note 5)\n    **\n    **  Returned:\n    **     ut11,ut12  double   UT1 as a 2-part Julian Date (Note 6)\n    **\n    **  Returned (function value):\n    **                int      st [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_41utc_ut1 = {__Pyx_NAMESTR("utc_ut1"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_41utc_ut1, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_40utc_ut1)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_41utc_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_41utc_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_40utc_ut1[] = "\n    int eraUtcut1(double utc1, double utc2, double dut1, double *ut11, double *ut12)\n\n    **  Given:\n    **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)\n    **     dut1       double   Delta UT1 = UT1-UTC in seconds (Note 5)\n    **\n    **  Returned:\n    **     ut11,ut12  double   UT1 as a 2-part Julian Date (Note 6)\n    **\n    **  Returned (function value):\n    **                int      st [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_41utc_ut1 = {__Pyx_NAMESTR("utc_ut1"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_41utc_ut1, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_40utc_ut1)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_41utc_ut1(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyArrayObject *__pyx_v_dt = 0;
@@ -9058,16 +9069,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_41utc_ut1(PyObject *__pyx_se
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("utc_ut1", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("utc_ut1", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__dt)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("utc_ut1", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("utc_ut1", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "utc_ut1") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "utc_ut1") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -9082,16 +9093,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_41utc_ut1(PyObject *__pyx_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("utc_ut1", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("utc_ut1", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.utc_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.utc_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1046; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1049; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dt), __pyx_ptype_5numpy_ndarray, 1, "dt", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1050; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_40utc_ut1(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_dt);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -9100,7 +9111,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_41utc_ut1(PyObject *__pyx_se
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":1045
+/* "astropy/time/erfa_time.pyx":1047
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def utc_ut1(             # <<<<<<<<<<<<<<
@@ -9108,7 +9119,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_41utc_ut1(PyObject *__pyx_se
  *     np.ndarray[double, ndim=1] in2,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_40utc_ut1(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_dt) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out1 = 0;
@@ -9169,22 +9180,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(CYTHON_UNUSED PyOb
   __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_dt.diminfo[0].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dt.diminfo[0].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":1095
- *     **     to be trusted.  See iauDat for further details.
+  /* "astropy/time/erfa_time.pyx":1097
+ *     **     to be trusted.  See eraDat for further details.
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]             # <<<<<<<<<<<<<<
  *     cdef unsigned n = in1.shape[0]
@@ -9197,11 +9208,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(CYTHON_UNUSED PyOb
   }
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1095; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":1096
+  /* "astropy/time/erfa_time.pyx":1098
  *     """
  *     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -9210,46 +9221,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(CYTHON_UNUSED PyOb
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":1098
+  /* "astropy/time/erfa_time.pyx":1100
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out1.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out1.diminfo[0].strides = __pyx_pybuffernd_out1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out1.diminfo[0].shape = __pyx_pybuffernd_out1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -9257,46 +9268,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(CYTHON_UNUSED PyOb
   __pyx_v_out1 = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1099
+  /* "astropy/time/erfa_time.pyx":1101
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     warns = {1: DUBIOUS}
  */
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_6, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_6));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_6, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out2.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out2.diminfo[0].strides = __pyx_pybuffernd_out2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out2.diminfo[0].shape = __pyx_pybuffernd_out2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -9304,51 +9315,51 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(CYTHON_UNUSED PyOb
   __pyx_v_out2 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1101
+  /* "astropy/time/erfa_time.pyx":1103
  *     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
  * 
  *     warns = {1: DUBIOUS}             # <<<<<<<<<<<<<<
  *     errs = {-1: 'unacceptable date'}
  * 
  */
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_GetName(__pyx_m, __pyx_n_s__DUBIOUS); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_1, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_1, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_v_warns = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1102
+  /* "astropy/time/erfa_time.pyx":1104
  * 
  *     warns = {1: DUBIOUS}
  *     errs = {-1: 'unacceptable date'}             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_errs = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1104
+  /* "astropy/time/erfa_time.pyx":1106
  *     errs = {-1: 'unacceptable date'}
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         ret = iauUtcut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauUtcut1', warns, errs)
+ *         ret = eraUtcut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraUtcut1', warns, errs)
  */
   __pyx_t_9 = __pyx_v_n;
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "astropy/time/sofa_time.pyx":1105
+    /* "astropy/time/erfa_time.pyx":1107
  * 
  *     for i in range(n):
- *         ret = iauUtcut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
- *         check_return(ret, 'iauUtcut1', warns, errs)
+ *         ret = eraUtcut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])             # <<<<<<<<<<<<<<
+ *         check_return(ret, 'eraUtcut1', warns, errs)
  * 
  */
     __pyx_t_11 = __pyx_v_i;
@@ -9356,26 +9367,26 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(CYTHON_UNUSED PyOb
     __pyx_t_13 = __pyx_v_i;
     __pyx_t_14 = __pyx_v_i;
     __pyx_t_15 = __pyx_v_i;
-    __pyx_v_ret = iauUtcut1((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
+    __pyx_v_ret = eraUtcut1((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_dt.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out1.rcbuff [...]
 
-    /* "astropy/time/sofa_time.pyx":1106
+    /* "astropy/time/erfa_time.pyx":1108
  *     for i in range(n):
- *         ret = iauUtcut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
- *         check_return(ret, 'iauUtcut1', warns, errs)             # <<<<<<<<<<<<<<
+ *         ret = eraUtcut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+ *         check_return(ret, 'eraUtcut1', warns, errs)             # <<<<<<<<<<<<<<
  * 
  *     return out1, out2
  */
-    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_6);
-    __Pyx_INCREF(((PyObject *)__pyx_n_s__iauUtcut1));
-    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__iauUtcut1));
-    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauUtcut1));
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__eraUtcut1));
+    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_n_s__eraUtcut1));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraUtcut1));
     __Pyx_INCREF(((PyObject *)__pyx_v_warns));
     PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_warns));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
@@ -9383,22 +9394,22 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(CYTHON_UNUSED PyOb
     PyTuple_SET_ITEM(__pyx_t_4, 3, ((PyObject *)__pyx_v_errs));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_errs));
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
 
-  /* "astropy/time/sofa_time.pyx":1108
- *         check_return(ret, 'iauUtcut1', warns, errs)
+  /* "astropy/time/erfa_time.pyx":1110
+ *         check_return(ret, 'eraUtcut1', warns, errs)
  * 
  *     return out1, out2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_out1));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_out1));
@@ -9426,7 +9437,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(CYTHON_UNUSED PyOb
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.utc_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.utc_ut1", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -9446,10 +9457,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_40utc_ut1(CYTHON_UNUSED PyOb
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_43d_tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_42d_tdb_tt[] = "\n    compute DTR = TDB-TT\n    double iauDtdb(double date1, double date2, double ut,\n                   double elong, double u, double v)\n\n    **  Given:\n    **     date1,date2   double  date, TDB (Notes 1-3)\n    **     ut            double  universal time (UT1, fraction of one day)\n    **     elong         double  longitude (east positive, radians)\n    **     u             double  distance from Earth spin axis (km)\ [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_43d_tdb_tt = {__Pyx_NAMESTR("d_tdb_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_43d_tdb_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_42d_tdb_tt)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_43d_tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_43d_tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_42d_tdb_tt[] = "\n    compute DTR = TDB-TT\n    double eraDtdb(double date1, double date2, double ut,\n                   double elong, double u, double v)\n\n    **  Given:\n    **     date1,date2   double  date, TDB (Notes 1-3)\n    **     ut            double  universal time (UT1, fraction of one day)\n    **     elong         double  longitude (east positive, radians)\n    **     u             double  distance from Earth spin axis (km)\ [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_43d_tdb_tt = {__Pyx_NAMESTR("d_tdb_tt"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_43d_tdb_tt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_42d_tdb_tt)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_43d_tdb_tt(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_in1 = 0;
   PyArrayObject *__pyx_v_in2 = 0;
   PyArrayObject *__pyx_v_ut = 0;
@@ -9483,31 +9494,31 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_43d_tdb_tt(PyObject *__pyx_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__in2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ut)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__elong)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__u)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  5:
         if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__v)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "d_tdb_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "d_tdb_tt") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
       goto __pyx_L5_argtuple_error;
@@ -9528,16 +9539,16 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_43d_tdb_tt(PyObject *__pyx_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("d_tdb_tt", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.d_tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.d_tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ut), __pyx_ptype_5numpy_ndarray, 1, "ut", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_42d_tdb_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_ut, __pyx_v_elong, __pyx_v_u, __pyx_v_v);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in1), __pyx_ptype_5numpy_ndarray, 1, "in1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_in2), __pyx_ptype_5numpy_ndarray, 1, "in2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ut), __pyx_ptype_5numpy_ndarray, 1, "ut", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_42d_tdb_tt(__pyx_self, __pyx_v_in1, __pyx_v_in2, __pyx_v_ut, __pyx_v_elong, __pyx_v_u, __pyx_v_v);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -9546,7 +9557,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_43d_tdb_tt(PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":1113
+/* "astropy/time/erfa_time.pyx":1115
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def d_tdb_tt(np.ndarray[double, ndim=1] in1,             # <<<<<<<<<<<<<<
@@ -9554,7 +9565,7 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_43d_tdb_tt(PyObject *__pyx_s
  *              np.ndarray[double, ndim=1] ut,
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_42d_tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_ut, PyObject *__pyx_v_elong, PyObject *__pyx_v_u, PyObject *__pyx_v_v) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_42d_tdb_tt(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_in1, PyArrayObject *__pyx_v_in2, PyArrayObject *__pyx_v_ut, PyObject *__pyx_v_elong, PyObject *__pyx_v_u, PyObject *__pyx_v_v) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_out = 0;
@@ -9607,21 +9618,21 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_42d_tdb_tt(CYTHON_UNUSED PyO
   __pyx_pybuffernd_ut.rcbuffer = &__pyx_pybuffer_ut;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in1.rcbuffer->pybuffer, (PyObject*)__pyx_v_in1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in1.diminfo[0].strides = __pyx_pybuffernd_in1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in1.diminfo[0].shape = __pyx_pybuffernd_in1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_in2.rcbuffer->pybuffer, (PyObject*)__pyx_v_in2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_in2.diminfo[0].strides = __pyx_pybuffernd_in2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_in2.diminfo[0].shape = __pyx_pybuffernd_in2.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ut.rcbuffer->pybuffer, (PyObject*)__pyx_v_ut, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ut.rcbuffer->pybuffer, (PyObject*)__pyx_v_ut, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_ut.diminfo[0].strides = __pyx_pybuffernd_ut.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ut.diminfo[0].shape = __pyx_pybuffernd_ut.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":1219
+  /* "astropy/time/erfa_time.pyx":1221
  *     **     TCB and hence between TT and TDB.
  *     """
  *     assert in1.shape[0] == in2.shape[0] == ut.shape[0]             # <<<<<<<<<<<<<<
@@ -9635,11 +9646,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_42d_tdb_tt(CYTHON_UNUSED PyO
   }
   if (unlikely(!__pyx_t_1)) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":1220
+  /* "astropy/time/erfa_time.pyx":1222
  *     """
  *     assert in1.shape[0] == in2.shape[0] == ut.shape[0]
  *     cdef unsigned n = in1.shape[0]             # <<<<<<<<<<<<<<
@@ -9648,46 +9659,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_42d_tdb_tt(CYTHON_UNUSED PyO
  */
   __pyx_v_n = (__pyx_v_in1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":1222
+  /* "astropy/time/erfa_time.pyx":1224
  *     cdef unsigned n = in1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef double c_elong = elong
  *     cdef double c_u = u
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__empty); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__double); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, ((PyObject *)__pyx_n_s__dtype), __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_4), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_out = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_out.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_out.diminfo[0].strides = __pyx_pybuffernd_out.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out.diminfo[0].shape = __pyx_pybuffernd_out.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -9695,51 +9706,51 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_42d_tdb_tt(CYTHON_UNUSED PyO
   __pyx_v_out = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1223
+  /* "astropy/time/erfa_time.pyx":1225
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)
  *     cdef double c_elong = elong             # <<<<<<<<<<<<<<
  *     cdef double c_u = u
  *     cdef double c_v = v
  */
-  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_elong); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_elong); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_elong = __pyx_t_8;
 
-  /* "astropy/time/sofa_time.pyx":1224
+  /* "astropy/time/erfa_time.pyx":1226
  *     cdef np.ndarray[double, ndim=1] out = np.empty(n, dtype=np.double)
  *     cdef double c_elong = elong
  *     cdef double c_u = u             # <<<<<<<<<<<<<<
  *     cdef double c_v = v
  * 
  */
-  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_u); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_u); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_u = __pyx_t_8;
 
-  /* "astropy/time/sofa_time.pyx":1225
+  /* "astropy/time/erfa_time.pyx":1227
  *     cdef double c_elong = elong
  *     cdef double c_u = u
  *     cdef double c_v = v             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_v); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_v); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_v = __pyx_t_8;
 
-  /* "astropy/time/sofa_time.pyx":1227
+  /* "astropy/time/erfa_time.pyx":1229
  *     cdef double c_v = v
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         out[i] = iauDtdb(in1[i], in2[i], ut[i], c_elong, c_u, c_v)
+ *         out[i] = eraDtdb(in1[i], in2[i], ut[i], c_elong, c_u, c_v)
  *     return out
  */
   __pyx_t_9 = __pyx_v_n;
   for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
     __pyx_v_i = __pyx_t_10;
 
-    /* "astropy/time/sofa_time.pyx":1228
+    /* "astropy/time/erfa_time.pyx":1230
  * 
  *     for i in range(n):
- *         out[i] = iauDtdb(in1[i], in2[i], ut[i], c_elong, c_u, c_v)             # <<<<<<<<<<<<<<
+ *         out[i] = eraDtdb(in1[i], in2[i], ut[i], c_elong, c_u, c_v)             # <<<<<<<<<<<<<<
  *     return out
  * 
  */
@@ -9747,12 +9758,12 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_42d_tdb_tt(CYTHON_UNUSED PyO
     __pyx_t_12 = __pyx_v_i;
     __pyx_t_13 = __pyx_v_i;
     __pyx_t_14 = __pyx_v_i;
-    *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_out.diminfo[0].strides) = iauDtdb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ut.rcbuffer->pybuffer.buf, _ [...]
+    *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_out.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_out.diminfo[0].strides) = eraDtdb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_in1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_in2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_in2.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ut.rcbuffer->pybuffer.buf, _ [...]
   }
 
-  /* "astropy/time/sofa_time.pyx":1229
+  /* "astropy/time/erfa_time.pyx":1231
  *     for i in range(n):
- *         out[i] = iauDtdb(in1[i], in2[i], ut[i], c_elong, c_u, c_v)
+ *         out[i] = eraDtdb(in1[i], in2[i], ut[i], c_elong, c_u, c_v)
  *     return out             # <<<<<<<<<<<<<<
  * 
  * 
@@ -9777,7 +9788,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_42d_tdb_tt(CYTHON_UNUSED PyO
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ut.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.d_tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.d_tdb_tt", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -9793,17 +9804,17 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_42d_tdb_tt(CYTHON_UNUSED PyO
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_45iau_af2a(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_44iau_af2a[] = "\n    int iauAf2a(char s, int ideg, int iamin, double asec, double *rad)\n\n    **  Given:\n    **     s         char    sign:  '-' = negative, otherwise positive\n    **     ideg      int     degrees\n    **     iamin     int     arcminutes\n    **     asec      double  arcseconds\n    **\n    **  Returned:\n    **     rad       double  angle in radians\n    **\n    **  Returned (function value):\n    **               int   [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_45iau_af2a = {__Pyx_NAMESTR("iau_af2a"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_45iau_af2a, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_44iau_af2a)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_45iau_af2a(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_45era_af2a(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_44era_af2a[] = "\n    int eraAf2a(char s, int ideg, int iamin, double asec, double *rad)\n\n    **  Given:\n    **     s         char    sign:  '-' = negative, otherwise positive\n    **     ideg      int     degrees\n    **     iamin     int     arcminutes\n    **     asec      double  arcseconds\n    **\n    **  Returned:\n    **     rad       double  angle in radians\n    **\n    **  Returned (function value):\n    **               int   [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_45era_af2a = {__Pyx_NAMESTR("era_af2a"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_45era_af2a, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_44era_af2a)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_45era_af2a(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_sign = 0;
   PyObject *__pyx_v_ideg = 0;
   PyObject *__pyx_v_iamin = 0;
   PyObject *__pyx_v_asec = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("iau_af2a (wrapper)", 0);
+  __Pyx_RefNannySetupContext("era_af2a (wrapper)", 0);
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__sign,&__pyx_n_s__ideg,&__pyx_n_s__iamin,&__pyx_n_s__asec,0};
     PyObject* values[4] = {0,0,0,0};
@@ -9826,21 +9837,21 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_45iau_af2a(PyObject *__pyx_s
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__ideg)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("iau_af2a", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("era_af2a", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__iamin)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("iau_af2a", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("era_af2a", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__asec)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("iau_af2a", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("era_af2a", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "iau_af2a") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "era_af2a") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -9857,26 +9868,26 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_45iau_af2a(PyObject *__pyx_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("iau_af2a", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("era_af2a", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.iau_af2a", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.era_af2a", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_44iau_af2a(__pyx_self, __pyx_v_sign, __pyx_v_ideg, __pyx_v_iamin, __pyx_v_asec);
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_44era_af2a(__pyx_self, __pyx_v_sign, __pyx_v_ideg, __pyx_v_iamin, __pyx_v_asec);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":1232
+/* "astropy/time/erfa_time.pyx":1234
  * 
  * 
- * def iau_af2a(sign, ideg, iamin, asec):             # <<<<<<<<<<<<<<
+ * def era_af2a(sign, ideg, iamin, asec):             # <<<<<<<<<<<<<<
  *     """
- *     int iauAf2a(char s, int ideg, int iamin, double asec, double *rad)
+ *     int eraAf2a(char s, int ideg, int iamin, double asec, double *rad)
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_44iau_af2a(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sign, PyObject *__pyx_v_ideg, PyObject *__pyx_v_iamin, PyObject *__pyx_v_asec) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_44era_af2a(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sign, PyObject *__pyx_v_ideg, PyObject *__pyx_v_iamin, PyObject *__pyx_v_asec) {
   double __pyx_v_rad;
   PyObject *__pyx_v_s = NULL;
   PyObject *__pyx_v_warns = NULL;
@@ -9893,91 +9904,91 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_44iau_af2a(CYTHON_UNUSED PyO
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("iau_af2a", 0);
+  __Pyx_RefNannySetupContext("era_af2a", 0);
 
-  /* "astropy/time/sofa_time.pyx":1262
+  /* "astropy/time/erfa_time.pyx":1264
  *     """
  *     cdef double rad
  *     s = ord(sign)             # <<<<<<<<<<<<<<
  * 
  *     warns = {1: 'ideg outside range 0-359',
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_sign);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_sign);
   __Pyx_GIVEREF(__pyx_v_sign);
-  __pyx_t_2 = PyObject_Call(__pyx_builtin_ord, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_Call(__pyx_builtin_ord, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __pyx_v_s = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1264
+  /* "astropy/time/erfa_time.pyx":1266
  *     s = ord(sign)
  * 
  *     warns = {1: 'ideg outside range 0-359',             # <<<<<<<<<<<<<<
  *              2: 'iamin outside range 0-59',
  *              3: 'asec outside range 0-59.999...'}
  */
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-  if (PyDict_SetItem(__pyx_t_2, __pyx_int_1, ((PyObject *)__pyx_kp_s_20)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_2, __pyx_int_2, ((PyObject *)__pyx_kp_s_21)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_2, __pyx_int_3, ((PyObject *)__pyx_kp_s_22)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_int_1, ((PyObject *)__pyx_kp_s_20)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_int_2, ((PyObject *)__pyx_kp_s_21)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_2, __pyx_int_3, ((PyObject *)__pyx_kp_s_22)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_warns = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1268
+  /* "astropy/time/erfa_time.pyx":1270
  *              3: 'asec outside range 0-59.999...'}
  * 
- *     ret = iauAf2a(s, ideg, iamin, asec, &rad)             # <<<<<<<<<<<<<<
- *     check_return(ret, 'iauAf2a', warns)
+ *     ret = eraAf2a(s, ideg, iamin, asec, &rad)             # <<<<<<<<<<<<<<
+ *     check_return(ret, 'eraAf2a', warns)
  * 
  */
-  __pyx_t_3 = __Pyx_PyInt_AsChar(__pyx_v_s); if (unlikely((__pyx_t_3 == (char)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_v_ideg); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = __Pyx_PyInt_AsInt(__pyx_v_iamin); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_asec); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_ret = iauAf2a(__pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, (&__pyx_v_rad));
+  __pyx_t_3 = __Pyx_PyInt_AsChar(__pyx_v_s); if (unlikely((__pyx_t_3 == (char)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_AsInt(__pyx_v_ideg); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_AsInt(__pyx_v_iamin); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_asec); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_ret = eraAf2a(__pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, (&__pyx_v_rad));
 
-  /* "astropy/time/sofa_time.pyx":1269
+  /* "astropy/time/erfa_time.pyx":1271
  * 
- *     ret = iauAf2a(s, ideg, iamin, asec, &rad)
- *     check_return(ret, 'iauAf2a', warns)             # <<<<<<<<<<<<<<
+ *     ret = eraAf2a(s, ideg, iamin, asec, &rad)
+ *     check_return(ret, 'eraAf2a', warns)             # <<<<<<<<<<<<<<
  * 
  *     return rad
  */
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__iauAf2a));
-  PyTuple_SET_ITEM(__pyx_t_7, 1, ((PyObject *)__pyx_n_s__iauAf2a));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauAf2a));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__eraAf2a));
+  PyTuple_SET_ITEM(__pyx_t_7, 1, ((PyObject *)__pyx_n_s__eraAf2a));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraAf2a));
   __Pyx_INCREF(((PyObject *)__pyx_v_warns));
   PyTuple_SET_ITEM(__pyx_t_7, 2, ((PyObject *)__pyx_v_warns));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_warns));
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1271
- *     check_return(ret, 'iauAf2a', warns)
+  /* "astropy/time/erfa_time.pyx":1273
+ *     check_return(ret, 'eraAf2a', warns)
  * 
  *     return rad             # <<<<<<<<<<<<<<
  * 
- * def iau_gd2gc(n, elong, phi, height):
+ * def era_gd2gc(n, elong, phi, height):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_rad); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_rad); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -9989,7 +10000,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_44iau_af2a(CYTHON_UNUSED PyO
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_AddTraceback("astropy.time.sofa_time.iau_af2a", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.era_af2a", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_s);
@@ -10000,17 +10011,17 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_44iau_af2a(CYTHON_UNUSED PyO
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_47iau_gd2gc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_46iau_gd2gc[] = "\n    Wrap\n    int iauGd2gc(int n, double elong, double phi, double height, double xyz[3])\n\n    **  Given:\n    **     n       int        ellipsoid identifier (Note 1)\n    **     elong   double     longitude (radians, east +ve)\n    **     phi     double     latitude (geodetic, radians, Note 3)\n    **     height  double     height above ellipsoid (geodetic, Notes 2,3)\n    **\n    **  Returned:\n    **     xyz     doub [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_47iau_gd2gc = {__Pyx_NAMESTR("iau_gd2gc"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_47iau_gd2gc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_46iau_gd2gc)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_47iau_gd2gc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_47era_gd2gc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_46era_gd2gc[] = "\n    Wrap\n    int eraGd2gc(int n, double elong, double phi, double height, double xyz[3])\n\n    **  Given:\n    **     n       int        ellipsoid identifier (Note 1)\n    **     elong   double     longitude (radians, east +ve)\n    **     phi     double     latitude (geodetic, radians, Note 3)\n    **     height  double     height above ellipsoid (geodetic, Notes 2,3)\n    **\n    **  Returned:\n    **     xyz     doub [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_47era_gd2gc = {__Pyx_NAMESTR("era_gd2gc"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_47era_gd2gc, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_46era_gd2gc)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_47era_gd2gc(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_n = 0;
   PyObject *__pyx_v_elong = 0;
   PyObject *__pyx_v_phi = 0;
   PyObject *__pyx_v_height = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("iau_gd2gc (wrapper)", 0);
+  __Pyx_RefNannySetupContext("era_gd2gc (wrapper)", 0);
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__n,&__pyx_n_s__elong,&__pyx_n_s__phi,&__pyx_n_s__height,0};
     PyObject* values[4] = {0,0,0,0};
@@ -10033,21 +10044,21 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_47iau_gd2gc(PyObject *__pyx_
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__elong)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("iau_gd2gc", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("era_gd2gc", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__phi)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("iau_gd2gc", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("era_gd2gc", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__height)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("iau_gd2gc", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("era_gd2gc", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "iau_gd2gc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "era_gd2gc") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -10064,26 +10075,26 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_47iau_gd2gc(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("iau_gd2gc", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("era_gd2gc", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.iau_gd2gc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.era_gd2gc", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_46iau_gd2gc(__pyx_self, __pyx_v_n, __pyx_v_elong, __pyx_v_phi, __pyx_v_height);
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_46era_gd2gc(__pyx_self, __pyx_v_n, __pyx_v_elong, __pyx_v_phi, __pyx_v_height);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":1273
+/* "astropy/time/erfa_time.pyx":1275
  *     return rad
  * 
- * def iau_gd2gc(n, elong, phi, height):             # <<<<<<<<<<<<<<
+ * def era_gd2gc(n, elong, phi, height):             # <<<<<<<<<<<<<<
  *     """
  *     Wrap
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_46iau_gd2gc(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_n, PyObject *__pyx_v_elong, PyObject *__pyx_v_phi, PyObject *__pyx_v_height) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_46era_gd2gc(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_n, PyObject *__pyx_v_elong, PyObject *__pyx_v_phi, PyObject *__pyx_v_height) {
   PyArrayObject *__pyx_v_xyz = 0;
   PyObject *__pyx_v_errs = NULL;
   int __pyx_v_ret;
@@ -10105,44 +10116,44 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_46iau_gd2gc(CYTHON_UNUSED Py
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  __Pyx_RefNannySetupContext("iau_gd2gc", 0);
+  __Pyx_RefNannySetupContext("era_gd2gc", 0);
   __pyx_pybuffer_xyz.pybuffer.buf = NULL;
   __pyx_pybuffer_xyz.refcount = 0;
   __pyx_pybuffernd_xyz.data = NULL;
   __pyx_pybuffernd_xyz.rcbuffer = &__pyx_pybuffer_xyz;
 
-  /* "astropy/time/sofa_time.pyx":1317
- *     **  4) The inverse transformation is performed in the function iauGc2gd.
+  /* "astropy/time/erfa_time.pyx":1319
+ *     **  4) The inverse transformation is performed in the function eraGc2gd.
  *     """
  *     cdef np.ndarray[double, ndim=1] xyz = np.empty(3, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     errs = {-1: 'illegal identifier',
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_3, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_23), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_23), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_5 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_xyz.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_xyz = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_xyz.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_xyz.diminfo[0].strides = __pyx_pybuffernd_xyz.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_xyz.diminfo[0].shape = __pyx_pybuffernd_xyz.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -10150,31 +10161,31 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_46iau_gd2gc(CYTHON_UNUSED Py
   __pyx_v_xyz = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1319
+  /* "astropy/time/erfa_time.pyx":1321
  *     cdef np.ndarray[double, ndim=1] xyz = np.empty(3, dtype=np.double)
  * 
  *     errs = {-1: 'illegal identifier',             # <<<<<<<<<<<<<<
  *              -2: 'illegal case'}
  * 
  */
-  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_24)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_25)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_1, ((PyObject *)__pyx_kp_s_24)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_4, __pyx_int_neg_2, ((PyObject *)__pyx_kp_s_25)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_errs = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1322
+  /* "astropy/time/erfa_time.pyx":1324
  *              -2: 'illegal case'}
  * 
- *     ret = iauGd2gc(n, elong, phi, height, &xyz[0])             # <<<<<<<<<<<<<<
- *     check_return(ret, 'iauGd2gc', errors=errs)
+ *     ret = eraGd2gc(n, elong, phi, height, &xyz[0])             # <<<<<<<<<<<<<<
+ *     check_return(ret, 'eraGd2gc', errors=errs)
  * 
  */
-  __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_n); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_elong); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_phi); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_height); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_AsInt(__pyx_v_n); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_elong); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_phi); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_height); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_10 = 0;
   __pyx_t_11 = -1;
   if (__pyx_t_10 < 0) {
@@ -10183,41 +10194,41 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_46iau_gd2gc(CYTHON_UNUSED Py
   } else if (unlikely(__pyx_t_10 >= __pyx_pybuffernd_xyz.diminfo[0].shape)) __pyx_t_11 = 0;
   if (unlikely(__pyx_t_11 != -1)) {
     __Pyx_RaiseBufferIndexError(__pyx_t_11);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_v_ret = iauGd2gc(__pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_xyz.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_xyz.diminfo[0].strides))));
+  __pyx_v_ret = eraGd2gc(__pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_xyz.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_xyz.diminfo[0].strides))));
 
-  /* "astropy/time/sofa_time.pyx":1323
+  /* "astropy/time/erfa_time.pyx":1325
  * 
- *     ret = iauGd2gc(n, elong, phi, height, &xyz[0])
- *     check_return(ret, 'iauGd2gc', errors=errs)             # <<<<<<<<<<<<<<
+ *     ret = eraGd2gc(n, elong, phi, height, &xyz[0])
+ *     check_return(ret, 'eraGd2gc', errors=errs)             # <<<<<<<<<<<<<<
  * 
  *     return xyz
  */
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__check_return); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_1 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(__pyx_v_ret); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
-  __Pyx_INCREF(((PyObject *)__pyx_n_s__iauGd2gc));
-  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_n_s__iauGd2gc));
-  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__iauGd2gc));
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__eraGd2gc));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_n_s__eraGd2gc));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__eraGd2gc));
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__errors), ((PyObject *)__pyx_v_errs)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__errors), ((PyObject *)__pyx_v_errs)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_2), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1325
- *     check_return(ret, 'iauGd2gc', errors=errs)
+  /* "astropy/time/erfa_time.pyx":1327
+ *     check_return(ret, 'eraGd2gc', errors=errs)
  * 
  *     return xyz             # <<<<<<<<<<<<<<
  * 
@@ -10239,7 +10250,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_46iau_gd2gc(CYTHON_UNUSED Py
     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_xyz.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.iau_gd2gc", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.era_gd2gc", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -10253,10 +10264,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_46iau_gd2gc(CYTHON_UNUSED Py
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_49jd_julian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_48jd_julian_epoch[] = " Wrap double iauEpj(double dj1, double dj2)\n    **  Julian Date to Julian Epoch.\n\n    **  Given:\n    **     dj1,dj2    double     Julian Date (see note)\n    **\n    **  Returned (function value):\n    **                double     Julian Epoch\n    **\n    **  Note:\n    **\n    **     The Julian Date is supplied in two pieces, in the usual SOFA\n    **     manner, which is designed to preserve time resolution.  T [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_49jd_julian_epoch = {__Pyx_NAMESTR("jd_julian_epoch"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_49jd_julian_epoch, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_48jd_julian_epoch)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_49jd_julian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_49jd_julian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_48jd_julian_epoch[] = " Wrap double eraEpj(double dj1, double dj2)\n    **  Julian Date to Julian Epoch.\n\n    **  Given:\n    **     dj1,dj2    double     Julian Date (see note)\n    **\n    **  Returned (function value):\n    **                double     Julian Epoch\n    **\n    **  Note:\n    **\n    **     The Julian Date is supplied in two pieces, in the usual ERFA\n    **     manner, which is designed to preserve time resolution.  T [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_49jd_julian_epoch = {__Pyx_NAMESTR("jd_julian_epoch"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_49jd_julian_epoch, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_48jd_julian_epoch)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_49jd_julian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_jd1 = 0;
   PyArrayObject *__pyx_v_jd2 = 0;
   PyObject *__pyx_r = 0;
@@ -10282,11 +10293,11 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_49jd_julian_epoch(PyObject *
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__jd2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("jd_julian_epoch", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("jd_julian_epoch", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "jd_julian_epoch") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "jd_julian_epoch") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -10299,15 +10310,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_49jd_julian_epoch(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("jd_julian_epoch", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("jd_julian_epoch", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.jd_julian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.jd_julian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd1), __pyx_ptype_5numpy_ndarray, 1, "jd1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd2), __pyx_ptype_5numpy_ndarray, 1, "jd2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_48jd_julian_epoch(__pyx_self, __pyx_v_jd1, __pyx_v_jd2);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd1), __pyx_ptype_5numpy_ndarray, 1, "jd1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd2), __pyx_ptype_5numpy_ndarray, 1, "jd2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_48jd_julian_epoch(__pyx_self, __pyx_v_jd1, __pyx_v_jd2);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -10316,15 +10327,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_49jd_julian_epoch(PyObject *
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":1330
+/* "astropy/time/erfa_time.pyx":1332
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def jd_julian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
  *                     np.ndarray[double, ndim=1] jd2):
- *     """ Wrap double iauEpj(double dj1, double dj2)
+ *     """ Wrap double eraEpj(double dj1, double dj2)
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_48jd_julian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_48jd_julian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_epd = 0;
@@ -10365,16 +10376,16 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_48jd_julian_epoch(CYTHON_UNU
   __pyx_pybuffernd_jd2.rcbuffer = &__pyx_pybuffer_jd2;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_jd1.diminfo[0].strides = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd1.diminfo[0].shape = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_jd2.diminfo[0].strides = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd2.diminfo[0].shape = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":1349
+  /* "astropy/time/erfa_time.pyx":1351
  *     **     (J2000.0).
  *     """
  *     assert jd1.shape[0] == jd2.shape[0]             # <<<<<<<<<<<<<<
@@ -10384,11 +10395,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_48jd_julian_epoch(CYTHON_UNU
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_jd1->dimensions[0]) == (__pyx_v_jd2->dimensions[0])))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":1350
+  /* "astropy/time/erfa_time.pyx":1352
  *     """
  *     assert jd1.shape[0] == jd2.shape[0]
  *     cdef unsigned n = jd1.shape[0]             # <<<<<<<<<<<<<<
@@ -10397,46 +10408,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_48jd_julian_epoch(CYTHON_UNU
  */
   __pyx_v_n = (__pyx_v_jd1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":1352
+  /* "astropy/time/erfa_time.pyx":1354
  *     cdef unsigned n = jd1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_epd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_epd.diminfo[0].strides = __pyx_pybuffernd_epd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_epd.diminfo[0].shape = __pyx_pybuffernd_epd.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -10444,33 +10455,33 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_48jd_julian_epoch(CYTHON_UNU
   __pyx_v_epd = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1354
+  /* "astropy/time/erfa_time.pyx":1356
  *     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         epd[i] = iauEpj(jd1[i], jd2[i])
+ *         epd[i] = eraEpj(jd1[i], jd2[i])
  *     return epd
  */
   __pyx_t_7 = __pyx_v_n;
   for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
     __pyx_v_i = __pyx_t_8;
 
-    /* "astropy/time/sofa_time.pyx":1355
+    /* "astropy/time/erfa_time.pyx":1357
  * 
  *     for i in range(n):
- *         epd[i] = iauEpj(jd1[i], jd2[i])             # <<<<<<<<<<<<<<
+ *         epd[i] = eraEpj(jd1[i], jd2[i])             # <<<<<<<<<<<<<<
  *     return epd
  * 
  */
     __pyx_t_9 = __pyx_v_i;
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
-    *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_epd.diminfo[0].strides) = iauEpj((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_jd1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_jd2.diminfo[0].strides)));
+    *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_epd.diminfo[0].strides) = eraEpj((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_jd1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_jd2.diminfo[0].strides)));
   }
 
-  /* "astropy/time/sofa_time.pyx":1356
+  /* "astropy/time/erfa_time.pyx":1358
  *     for i in range(n):
- *         epd[i] = iauEpj(jd1[i], jd2[i])
+ *         epd[i] = eraEpj(jd1[i], jd2[i])
  *     return epd             # <<<<<<<<<<<<<<
  * 
  * 
@@ -10494,7 +10505,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_48jd_julian_epoch(CYTHON_UNU
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.jd_julian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.jd_julian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -10509,15 +10520,15 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_48jd_julian_epoch(CYTHON_UNU
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_51julian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_50julian_epoch_jd[] = " Wrap void iauEpj2jd(double epj, double *djm0, double *djm)\n    **  Julian Epoch to Julian Date.\n    **  Given:\n    **     epj      double    Julian Epoch (e.g. 1996.8D0)\n    **\n    **  Returned:\n    **     djm0     double    MJD zero-point: always 2400000.5\n    **     djm      double    Modified Julian Date\n    ";
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_51julian_epoch_jd = {__Pyx_NAMESTR("julian_epoch_jd"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_51julian_epoch_jd, METH_O, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_50julian_epoch_jd)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_51julian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_51julian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_50julian_epoch_jd[] = " Wrap void eraEpj2jd(double epj, double *djm0, double *djm)\n    **  Julian Epoch to Julian Date.\n    **  Given:\n    **     epj      double    Julian Epoch (e.g. 1996.8D0)\n    **\n    **  Returned:\n    **     djm0     double    MJD zero-point: always 2400000.5\n    **     djm      double    Modified Julian Date\n    ";
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_51julian_epoch_jd = {__Pyx_NAMESTR("julian_epoch_jd"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_51julian_epoch_jd, METH_O, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_50julian_epoch_jd)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_51julian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("julian_epoch_jd (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_epd), __pyx_ptype_5numpy_ndarray, 1, "epd", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_50julian_epoch_jd(__pyx_self, ((PyArrayObject *)__pyx_v_epd));
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_epd), __pyx_ptype_5numpy_ndarray, 1, "epd", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_50julian_epoch_jd(__pyx_self, ((PyArrayObject *)__pyx_v_epd));
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -10526,15 +10537,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_51julian_epoch_jd(PyObject *
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":1361
+/* "astropy/time/erfa_time.pyx":1363
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def julian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
- *     """ Wrap void iauEpj2jd(double epj, double *djm0, double *djm)
+ *     """ Wrap void eraEpj2jd(double epj, double *djm0, double *djm)
  *     **  Julian Epoch to Julian Date.
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_50julian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_50julian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_jd1 = 0;
@@ -10577,11 +10588,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_50julian_epoch_jd(CYTHON_UNU
   __pyx_pybuffernd_epd.rcbuffer = &__pyx_pybuffer_epd;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epd.rcbuffer->pybuffer, (PyObject*)__pyx_v_epd, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epd.rcbuffer->pybuffer, (PyObject*)__pyx_v_epd, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_epd.diminfo[0].strides = __pyx_pybuffernd_epd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_epd.diminfo[0].shape = __pyx_pybuffernd_epd.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":1371
+  /* "astropy/time/erfa_time.pyx":1373
  *     **     djm      double    Modified Julian Date
  *     """
  *     cdef unsigned n = epd.shape[0]             # <<<<<<<<<<<<<<
@@ -10590,46 +10601,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_50julian_epoch_jd(CYTHON_UNU
  */
   __pyx_v_n = (__pyx_v_epd->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":1373
+  /* "astropy/time/erfa_time.pyx":1375
  *     cdef unsigned n = epd.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] jd1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_jd1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_jd1.diminfo[0].strides = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd1.diminfo[0].shape = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -10637,46 +10648,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_50julian_epoch_jd(CYTHON_UNU
   __pyx_v_jd1 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1374
+  /* "astropy/time/erfa_time.pyx":1376
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] jd1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_jd2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_jd2.diminfo[0].strides = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd2.diminfo[0].shape = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -10684,39 +10695,39 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_50julian_epoch_jd(CYTHON_UNU
   __pyx_v_jd2 = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1376
+  /* "astropy/time/erfa_time.pyx":1378
  *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         iauEpj2jd(epd[i], &jd1[i], &jd2[i])
+ *         eraEpj2jd(epd[i], &jd1[i], &jd2[i])
  *     return jd1, jd2
  */
   __pyx_t_8 = __pyx_v_n;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "astropy/time/sofa_time.pyx":1377
+    /* "astropy/time/erfa_time.pyx":1379
  * 
  *     for i in range(n):
- *         iauEpj2jd(epd[i], &jd1[i], &jd2[i])             # <<<<<<<<<<<<<<
+ *         eraEpj2jd(epd[i], &jd1[i], &jd2[i])             # <<<<<<<<<<<<<<
  *     return jd1, jd2
  * 
  */
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
     __pyx_t_12 = __pyx_v_i;
-    iauEpj2jd((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_epd.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_jd1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_jd2.diminfo[0].strides))));
+    eraEpj2jd((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_epd.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_jd1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_jd2.diminfo[0].strides))));
   }
 
-  /* "astropy/time/sofa_time.pyx":1378
+  /* "astropy/time/erfa_time.pyx":1380
  *     for i in range(n):
- *         iauEpj2jd(epd[i], &jd1[i], &jd2[i])
+ *         eraEpj2jd(epd[i], &jd1[i], &jd2[i])
  *     return jd1, jd2             # <<<<<<<<<<<<<<
  * 
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_jd1));
   PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_jd1));
@@ -10742,7 +10753,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_50julian_epoch_jd(CYTHON_UNU
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.julian_epoch_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.julian_epoch_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -10758,10 +10769,10 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_50julian_epoch_jd(CYTHON_UNU
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_53jd_besselian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_52jd_besselian_epoch[] = " Wrap double iauEpb(double dj1, double dj2)\n    **  Julian Date to Besselian Epoch.\n\n    **  Given:\n    **     dj1,dj2    double     Julian Date (see note)\n    **\n    **  Returned (function value):\n    **                double     Besselian Epoch.\n    **\n    **  Note:\n    **\n    **     The Julian Date is supplied in two pieces, in the usual SOFA\n    **     manner, which is designed to preserve time reso [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_53jd_besselian_epoch = {__Pyx_NAMESTR("jd_besselian_epoch"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_53jd_besselian_epoch, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_52jd_besselian_epoch)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_53jd_besselian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_53jd_besselian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_52jd_besselian_epoch[] = " Wrap double eraEpb(double dj1, double dj2)\n    **  Julian Date to Besselian Epoch.\n\n    **  Given:\n    **     dj1,dj2    double     Julian Date (see note)\n    **\n    **  Returned (function value):\n    **                double     Besselian Epoch.\n    **\n    **  Note:\n    **\n    **     The Julian Date is supplied in two pieces, in the usual ERFA\n    **     manner, which is designed to preserve time reso [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_53jd_besselian_epoch = {__Pyx_NAMESTR("jd_besselian_epoch"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_53jd_besselian_epoch, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_52jd_besselian_epoch)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_53jd_besselian_epoch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyArrayObject *__pyx_v_jd1 = 0;
   PyArrayObject *__pyx_v_jd2 = 0;
   PyObject *__pyx_r = 0;
@@ -10787,11 +10798,11 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_53jd_besselian_epoch(PyObjec
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__jd2)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("jd_besselian_epoch", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("jd_besselian_epoch", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "jd_besselian_epoch") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "jd_besselian_epoch") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -10804,15 +10815,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_53jd_besselian_epoch(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("jd_besselian_epoch", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("jd_besselian_epoch", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
-  __Pyx_AddTraceback("astropy.time.sofa_time.jd_besselian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.jd_besselian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd1), __pyx_ptype_5numpy_ndarray, 1, "jd1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd2), __pyx_ptype_5numpy_ndarray, 1, "jd2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_52jd_besselian_epoch(__pyx_self, __pyx_v_jd1, __pyx_v_jd2);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd1), __pyx_ptype_5numpy_ndarray, 1, "jd1", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_jd2), __pyx_ptype_5numpy_ndarray, 1, "jd2", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_52jd_besselian_epoch(__pyx_self, __pyx_v_jd1, __pyx_v_jd2);
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -10821,15 +10832,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_53jd_besselian_epoch(PyObjec
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":1383
+/* "astropy/time/erfa_time.pyx":1385
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def jd_besselian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
  *                        np.ndarray[double, ndim=1] jd2):
- *     """ Wrap double iauEpb(double dj1, double dj2)
+ *     """ Wrap double eraEpb(double dj1, double dj2)
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_52jd_besselian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_52jd_besselian_epoch(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_jd1, PyArrayObject *__pyx_v_jd2) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_epd = 0;
@@ -10870,16 +10881,16 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_52jd_besselian_epoch(CYTHON_
   __pyx_pybuffernd_jd2.rcbuffer = &__pyx_pybuffer_jd2;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd1, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_jd1.diminfo[0].strides = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd1.diminfo[0].shape = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.shape[0];
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer, (PyObject*)__pyx_v_jd2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_jd2.diminfo[0].strides = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd2.diminfo[0].shape = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":1402
+  /* "astropy/time/erfa_time.pyx":1404
  *     **     (J2000.0).
  *     """
  *     assert jd1.shape[0] == jd2.shape[0]             # <<<<<<<<<<<<<<
@@ -10889,11 +10900,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_52jd_besselian_epoch(CYTHON_
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_jd1->dimensions[0]) == (__pyx_v_jd2->dimensions[0])))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1402; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "astropy/time/sofa_time.pyx":1403
+  /* "astropy/time/erfa_time.pyx":1405
  *     """
  *     assert jd1.shape[0] == jd2.shape[0]
  *     cdef unsigned n = jd1.shape[0]             # <<<<<<<<<<<<<<
@@ -10902,46 +10913,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_52jd_besselian_epoch(CYTHON_
  */
   __pyx_v_n = (__pyx_v_jd1->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":1405
+  /* "astropy/time/erfa_time.pyx":1407
  *     cdef unsigned n = jd1.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epd.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_epd = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_epd.diminfo[0].strides = __pyx_pybuffernd_epd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_epd.diminfo[0].shape = __pyx_pybuffernd_epd.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -10949,33 +10960,33 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_52jd_besselian_epoch(CYTHON_
   __pyx_v_epd = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1407
+  /* "astropy/time/erfa_time.pyx":1409
  *     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         epd[i] = iauEpb(jd1[i], jd2[i])
+ *         epd[i] = eraEpb(jd1[i], jd2[i])
  *     return epd
  */
   __pyx_t_7 = __pyx_v_n;
   for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
     __pyx_v_i = __pyx_t_8;
 
-    /* "astropy/time/sofa_time.pyx":1408
+    /* "astropy/time/erfa_time.pyx":1410
  * 
  *     for i in range(n):
- *         epd[i] = iauEpb(jd1[i], jd2[i])             # <<<<<<<<<<<<<<
+ *         epd[i] = eraEpb(jd1[i], jd2[i])             # <<<<<<<<<<<<<<
  *     return epd
  * 
  */
     __pyx_t_9 = __pyx_v_i;
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
-    *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_epd.diminfo[0].strides) = iauEpb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_jd1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_jd2.diminfo[0].strides)));
+    *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_epd.diminfo[0].strides) = eraEpb((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_jd1.diminfo[0].strides)), (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_jd2.diminfo[0].strides)));
   }
 
-  /* "astropy/time/sofa_time.pyx":1409
+  /* "astropy/time/erfa_time.pyx":1411
  *     for i in range(n):
- *         epd[i] = iauEpb(jd1[i], jd2[i])
+ *         epd[i] = eraEpb(jd1[i], jd2[i])
  *     return epd             # <<<<<<<<<<<<<<
  * 
  * 
@@ -10999,7 +11010,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_52jd_besselian_epoch(CYTHON_
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.jd_besselian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.jd_besselian_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -11014,15 +11025,15 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_52jd_besselian_epoch(CYTHON_
 }
 
 /* Python wrapper */
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_55besselian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd); /*proto*/
-static char __pyx_doc_7astropy_4time_9sofa_time_54besselian_epoch_jd[] = " Wrap void iauEpb2jd(double epj, double *djm0, double *djm)\n    **  Besselian Epoch to Julian Date.\n\n    **  Given:\n    **     epb      double    Besselian Epoch (e.g. 1957.3D0)\n    **\n    **  Returned:\n    **     djm0     double    MJD zero-point: always 2400000.5\n    **     djm      double    Modified Julian Date\n    **\n    **  Note:\n    **\n    **     The Julian Date is returned in two pieces, in the  [...]
-static PyMethodDef __pyx_mdef_7astropy_4time_9sofa_time_55besselian_epoch_jd = {__Pyx_NAMESTR("besselian_epoch_jd"), (PyCFunction)__pyx_pw_7astropy_4time_9sofa_time_55besselian_epoch_jd, METH_O, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9sofa_time_54besselian_epoch_jd)};
-static PyObject *__pyx_pw_7astropy_4time_9sofa_time_55besselian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd) {
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_55besselian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd); /*proto*/
+static char __pyx_doc_7astropy_4time_9erfa_time_54besselian_epoch_jd[] = " Wrap void eraEpb2jd(double epj, double *djm0, double *djm)\n    **  Besselian Epoch to Julian Date.\n\n    **  Given:\n    **     epb      double    Besselian Epoch (e.g. 1957.3D0)\n    **\n    **  Returned:\n    **     djm0     double    MJD zero-point: always 2400000.5\n    **     djm      double    Modified Julian Date\n    **\n    **  Note:\n    **\n    **     The Julian Date is returned in two pieces, in the  [...]
+static PyMethodDef __pyx_mdef_7astropy_4time_9erfa_time_55besselian_epoch_jd = {__Pyx_NAMESTR("besselian_epoch_jd"), (PyCFunction)__pyx_pw_7astropy_4time_9erfa_time_55besselian_epoch_jd, METH_O, __Pyx_DOCSTR(__pyx_doc_7astropy_4time_9erfa_time_54besselian_epoch_jd)};
+static PyObject *__pyx_pw_7astropy_4time_9erfa_time_55besselian_epoch_jd(PyObject *__pyx_self, PyObject *__pyx_v_epd) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("besselian_epoch_jd (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_epd), __pyx_ptype_5numpy_ndarray, 1, "epd", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_7astropy_4time_9sofa_time_54besselian_epoch_jd(__pyx_self, ((PyArrayObject *)__pyx_v_epd));
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_epd), __pyx_ptype_5numpy_ndarray, 1, "epd", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_7astropy_4time_9erfa_time_54besselian_epoch_jd(__pyx_self, ((PyArrayObject *)__pyx_v_epd));
   goto __pyx_L0;
   __pyx_L1_error:;
   __pyx_r = NULL;
@@ -11031,15 +11042,15 @@ static PyObject *__pyx_pw_7astropy_4time_9sofa_time_55besselian_epoch_jd(PyObjec
   return __pyx_r;
 }
 
-/* "astropy/time/sofa_time.pyx":1414
+/* "astropy/time/erfa_time.pyx":1416
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def besselian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
- *     """ Wrap void iauEpb2jd(double epj, double *djm0, double *djm)
+ *     """ Wrap void eraEpb2jd(double epj, double *djm0, double *djm)
  *     **  Besselian Epoch to Julian Date.
  */
 
-static PyObject *__pyx_pf_7astropy_4time_9sofa_time_54besselian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd) {
+static PyObject *__pyx_pf_7astropy_4time_9erfa_time_54besselian_epoch_jd(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_epd) {
   unsigned int __pyx_v_n;
   unsigned int __pyx_v_i;
   PyArrayObject *__pyx_v_jd1 = 0;
@@ -11082,11 +11093,11 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_54besselian_epoch_jd(CYTHON_
   __pyx_pybuffernd_epd.rcbuffer = &__pyx_pybuffer_epd;
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
-    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epd.rcbuffer->pybuffer, (PyObject*)__pyx_v_epd, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_epd.rcbuffer->pybuffer, (PyObject*)__pyx_v_epd, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_pybuffernd_epd.diminfo[0].strides = __pyx_pybuffernd_epd.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_epd.diminfo[0].shape = __pyx_pybuffernd_epd.rcbuffer->pybuffer.shape[0];
 
-  /* "astropy/time/sofa_time.pyx":1432
+  /* "astropy/time/erfa_time.pyx":1434
  *     **     djm.
  *     """
  *     cdef unsigned n = epd.shape[0]             # <<<<<<<<<<<<<<
@@ -11095,46 +11106,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_54besselian_epoch_jd(CYTHON_
  */
   __pyx_v_n = (__pyx_v_epd->dimensions[0]);
 
-  /* "astropy/time/sofa_time.pyx":1434
+  /* "astropy/time/erfa_time.pyx":1436
  *     cdef unsigned n = epd.shape[0]
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] jd1 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)
  * 
  */
-  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_GetAttr(__pyx_t_1, __pyx_n_s__empty); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__double); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_n_s__dtype), __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_1)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_jd1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_jd1.diminfo[0].strides = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd1.diminfo[0].shape = __pyx_pybuffernd_jd1.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -11142,46 +11153,46 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_54besselian_epoch_jd(CYTHON_
   __pyx_v_jd1 = ((PyArrayObject *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1435
+  /* "astropy/time/erfa_time.pyx":1437
  *     cdef unsigned int i
  *     cdef np.ndarray[double, ndim=1] jd1 = np.empty(n, dtype=np.double)
  *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     for i in range(n):
  */
-  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_5, __pyx_n_s__empty); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyLong_FromUnsignedLong(__pyx_v_n); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__double); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_5, ((PyObject *)__pyx_n_s__dtype), __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_t_3), ((PyObject *)__pyx_t_5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_t_4);
   {
     __Pyx_BufFmt_StackElem __pyx_stack[1];
     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
       __pyx_v_jd2 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf = NULL;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     } else {__pyx_pybuffernd_jd2.diminfo[0].strides = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_jd2.diminfo[0].shape = __pyx_pybuffernd_jd2.rcbuffer->pybuffer.shape[0];
     }
   }
@@ -11189,36 +11200,36 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_54besselian_epoch_jd(CYTHON_
   __pyx_v_jd2 = ((PyArrayObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1437
+  /* "astropy/time/erfa_time.pyx":1439
  *     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)
  * 
  *     for i in range(n):             # <<<<<<<<<<<<<<
- *         iauEpb2jd(epd[i], &jd1[i], &jd2[i])
+ *         eraEpb2jd(epd[i], &jd1[i], &jd2[i])
  *     return jd1, jd2
  */
   __pyx_t_8 = __pyx_v_n;
   for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
     __pyx_v_i = __pyx_t_9;
 
-    /* "astropy/time/sofa_time.pyx":1438
+    /* "astropy/time/erfa_time.pyx":1440
  * 
  *     for i in range(n):
- *         iauEpb2jd(epd[i], &jd1[i], &jd2[i])             # <<<<<<<<<<<<<<
+ *         eraEpb2jd(epd[i], &jd1[i], &jd2[i])             # <<<<<<<<<<<<<<
  *     return jd1, jd2
  */
     __pyx_t_10 = __pyx_v_i;
     __pyx_t_11 = __pyx_v_i;
     __pyx_t_12 = __pyx_v_i;
-    iauEpb2jd((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_epd.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_jd1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_jd2.diminfo[0].strides))));
+    eraEpb2jd((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_epd.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_epd.diminfo[0].strides)), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd1.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_jd1.diminfo[0].strides))), (&(*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_jd2.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_jd2.diminfo[0].strides))));
   }
 
-  /* "astropy/time/sofa_time.pyx":1439
+  /* "astropy/time/erfa_time.pyx":1441
  *     for i in range(n):
- *         iauEpb2jd(epd[i], &jd1[i], &jd2[i])
+ *         eraEpb2jd(epd[i], &jd1[i], &jd2[i])
  *     return jd1, jd2             # <<<<<<<<<<<<<<
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_jd1));
   PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_jd1));
@@ -11244,7 +11255,7 @@ static PyObject *__pyx_pf_7astropy_4time_9sofa_time_54besselian_epoch_jd(CYTHON_
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd1.rcbuffer->pybuffer);
     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_jd2.rcbuffer->pybuffer);
   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
-  __Pyx_AddTraceback("astropy.time.sofa_time.besselian_epoch_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("astropy.time.erfa_time.besselian_epoch_jd", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
@@ -13245,7 +13256,7 @@ static struct PyModuleDef __pyx_moduledef = {
   #else
     PyModuleDef_HEAD_INIT,
   #endif
-    __Pyx_NAMESTR("sofa_time"),
+    __Pyx_NAMESTR("erfa_time"),
     0, /* m_doc */
     -1, /* m_size */
     __pyx_methods /* m_methods */,
@@ -13279,15 +13290,17 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_u_32, __pyx_k_32, sizeof(__pyx_k_32), 0, 1, 0, 0},
   {&__pyx_kp_u_33, __pyx_k_33, sizeof(__pyx_k_33), 0, 1, 0, 0},
   {&__pyx_kp_u_36, __pyx_k_36, sizeof(__pyx_k_36), 0, 1, 0, 0},
-  {&__pyx_kp_s_38, __pyx_k_38, sizeof(__pyx_k_38), 0, 0, 1, 0},
+  {&__pyx_n_s_38, __pyx_k_38, sizeof(__pyx_k_38), 0, 0, 1, 1},
+  {&__pyx_kp_s_39, __pyx_k_39, sizeof(__pyx_k_39), 0, 0, 1, 0},
   {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0},
-  {&__pyx_kp_s_41, __pyx_k_41, sizeof(__pyx_k_41), 0, 0, 1, 0},
-  {&__pyx_n_s_42, __pyx_k_42, sizeof(__pyx_k_42), 0, 0, 1, 1},
+  {&__pyx_kp_s_42, __pyx_k_42, sizeof(__pyx_k_42), 0, 0, 1, 0},
+  {&__pyx_n_s_43, __pyx_k_43, sizeof(__pyx_k_43), 0, 0, 1, 1},
   {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0},
   {&__pyx_kp_s_6, __pyx_k_6, sizeof(__pyx_k_6), 0, 0, 1, 0},
   {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0},
   {&__pyx_kp_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 0},
   {&__pyx_kp_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 0},
+  {&__pyx_n_s__AstropyUserWarning, __pyx_k__AstropyUserWarning, sizeof(__pyx_k__AstropyUserWarning), 0, 0, 1, 1},
   {&__pyx_n_s__DUBIOUS, __pyx_k__DUBIOUS, sizeof(__pyx_k__DUBIOUS), 0, 0, 1, 1},
   {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
   {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
@@ -13313,6 +13326,30 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s__elong, __pyx_k__elong, sizeof(__pyx_k__elong), 0, 0, 1, 1},
   {&__pyx_n_s__empty, __pyx_k__empty, sizeof(__pyx_k__empty), 0, 0, 1, 1},
   {&__pyx_n_s__epd, __pyx_k__epd, sizeof(__pyx_k__epd), 0, 0, 1, 1},
+  {&__pyx_n_s__eraAf2a, __pyx_k__eraAf2a, sizeof(__pyx_k__eraAf2a), 0, 0, 1, 1},
+  {&__pyx_n_s__eraCal2jd, __pyx_k__eraCal2jd, sizeof(__pyx_k__eraCal2jd), 0, 0, 1, 1},
+  {&__pyx_n_s__eraD2dtf, __pyx_k__eraD2dtf, sizeof(__pyx_k__eraD2dtf), 0, 0, 1, 1},
+  {&__pyx_n_s__eraDat, __pyx_k__eraDat, sizeof(__pyx_k__eraDat), 0, 0, 1, 1},
+  {&__pyx_n_s__eraDtf2d, __pyx_k__eraDtf2d, sizeof(__pyx_k__eraDtf2d), 0, 0, 1, 1},
+  {&__pyx_n_s__eraGd2gc, __pyx_k__eraGd2gc, sizeof(__pyx_k__eraGd2gc), 0, 0, 1, 1},
+  {&__pyx_n_s__eraTaitt, __pyx_k__eraTaitt, sizeof(__pyx_k__eraTaitt), 0, 0, 1, 1},
+  {&__pyx_n_s__eraTaiut1, __pyx_k__eraTaiut1, sizeof(__pyx_k__eraTaiut1), 0, 0, 1, 1},
+  {&__pyx_n_s__eraTaiutc, __pyx_k__eraTaiutc, sizeof(__pyx_k__eraTaiutc), 0, 0, 1, 1},
+  {&__pyx_n_s__eraTcbtdb, __pyx_k__eraTcbtdb, sizeof(__pyx_k__eraTcbtdb), 0, 0, 1, 1},
+  {&__pyx_n_s__eraTcgtt, __pyx_k__eraTcgtt, sizeof(__pyx_k__eraTcgtt), 0, 0, 1, 1},
+  {&__pyx_n_s__eraTdbtcb, __pyx_k__eraTdbtcb, sizeof(__pyx_k__eraTdbtcb), 0, 0, 1, 1},
+  {&__pyx_n_s__eraTdbtt, __pyx_k__eraTdbtt, sizeof(__pyx_k__eraTdbtt), 0, 0, 1, 1},
+  {&__pyx_n_s__eraTttai, __pyx_k__eraTttai, sizeof(__pyx_k__eraTttai), 0, 0, 1, 1},
+  {&__pyx_n_s__eraTttcg, __pyx_k__eraTttcg, sizeof(__pyx_k__eraTttcg), 0, 0, 1, 1},
+  {&__pyx_n_s__eraTttdb, __pyx_k__eraTttdb, sizeof(__pyx_k__eraTttdb), 0, 0, 1, 1},
+  {&__pyx_n_s__eraTtut1, __pyx_k__eraTtut1, sizeof(__pyx_k__eraTtut1), 0, 0, 1, 1},
+  {&__pyx_n_s__eraUt1tai, __pyx_k__eraUt1tai, sizeof(__pyx_k__eraUt1tai), 0, 0, 1, 1},
+  {&__pyx_n_s__eraUt1tt, __pyx_k__eraUt1tt, sizeof(__pyx_k__eraUt1tt), 0, 0, 1, 1},
+  {&__pyx_n_s__eraUt1utc, __pyx_k__eraUt1utc, sizeof(__pyx_k__eraUt1utc), 0, 0, 1, 1},
+  {&__pyx_n_s__eraUtctai, __pyx_k__eraUtctai, sizeof(__pyx_k__eraUtctai), 0, 0, 1, 1},
+  {&__pyx_n_s__eraUtcut1, __pyx_k__eraUtcut1, sizeof(__pyx_k__eraUtcut1), 0, 0, 1, 1},
+  {&__pyx_n_s__era_af2a, __pyx_k__era_af2a, sizeof(__pyx_k__era_af2a), 0, 0, 1, 1},
+  {&__pyx_n_s__era_gd2gc, __pyx_k__era_gd2gc, sizeof(__pyx_k__era_gd2gc), 0, 0, 1, 1},
   {&__pyx_n_s__errors, __pyx_k__errors, sizeof(__pyx_k__errors), 0, 0, 1, 1},
   {&__pyx_n_s__errs, __pyx_k__errs, sizeof(__pyx_k__errs), 0, 0, 1, 1},
   {&__pyx_n_s__fd, __pyx_k__fd, sizeof(__pyx_k__fd), 0, 0, 1, 1},
@@ -13321,30 +13358,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s__height, __pyx_k__height, sizeof(__pyx_k__height), 0, 0, 1, 1},
   {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1},
   {&__pyx_n_s__iamin, __pyx_k__iamin, sizeof(__pyx_k__iamin), 0, 0, 1, 1},
-  {&__pyx_n_s__iauAf2a, __pyx_k__iauAf2a, sizeof(__pyx_k__iauAf2a), 0, 0, 1, 1},
-  {&__pyx_n_s__iauCal2jd, __pyx_k__iauCal2jd, sizeof(__pyx_k__iauCal2jd), 0, 0, 1, 1},
-  {&__pyx_n_s__iauD2dtf, __pyx_k__iauD2dtf, sizeof(__pyx_k__iauD2dtf), 0, 0, 1, 1},
-  {&__pyx_n_s__iauDat, __pyx_k__iauDat, sizeof(__pyx_k__iauDat), 0, 0, 1, 1},
-  {&__pyx_n_s__iauDtf2d, __pyx_k__iauDtf2d, sizeof(__pyx_k__iauDtf2d), 0, 0, 1, 1},
-  {&__pyx_n_s__iauGd2gc, __pyx_k__iauGd2gc, sizeof(__pyx_k__iauGd2gc), 0, 0, 1, 1},
-  {&__pyx_n_s__iauTaitt, __pyx_k__iauTaitt, sizeof(__pyx_k__iauTaitt), 0, 0, 1, 1},
-  {&__pyx_n_s__iauTaiut1, __pyx_k__iauTaiut1, sizeof(__pyx_k__iauTaiut1), 0, 0, 1, 1},
-  {&__pyx_n_s__iauTaiutc, __pyx_k__iauTaiutc, sizeof(__pyx_k__iauTaiutc), 0, 0, 1, 1},
-  {&__pyx_n_s__iauTcbtdb, __pyx_k__iauTcbtdb, sizeof(__pyx_k__iauTcbtdb), 0, 0, 1, 1},
-  {&__pyx_n_s__iauTcgtt, __pyx_k__iauTcgtt, sizeof(__pyx_k__iauTcgtt), 0, 0, 1, 1},
-  {&__pyx_n_s__iauTdbtcb, __pyx_k__iauTdbtcb, sizeof(__pyx_k__iauTdbtcb), 0, 0, 1, 1},
-  {&__pyx_n_s__iauTdbtt, __pyx_k__iauTdbtt, sizeof(__pyx_k__iauTdbtt), 0, 0, 1, 1},
-  {&__pyx_n_s__iauTttai, __pyx_k__iauTttai, sizeof(__pyx_k__iauTttai), 0, 0, 1, 1},
-  {&__pyx_n_s__iauTttcg, __pyx_k__iauTttcg, sizeof(__pyx_k__iauTttcg), 0, 0, 1, 1},
-  {&__pyx_n_s__iauTttdb, __pyx_k__iauTttdb, sizeof(__pyx_k__iauTttdb), 0, 0, 1, 1},
-  {&__pyx_n_s__iauTtut1, __pyx_k__iauTtut1, sizeof(__pyx_k__iauTtut1), 0, 0, 1, 1},
-  {&__pyx_n_s__iauUt1tai, __pyx_k__iauUt1tai, sizeof(__pyx_k__iauUt1tai), 0, 0, 1, 1},
-  {&__pyx_n_s__iauUt1tt, __pyx_k__iauUt1tt, sizeof(__pyx_k__iauUt1tt), 0, 0, 1, 1},
-  {&__pyx_n_s__iauUt1utc, __pyx_k__iauUt1utc, sizeof(__pyx_k__iauUt1utc), 0, 0, 1, 1},
-  {&__pyx_n_s__iauUtctai, __pyx_k__iauUtctai, sizeof(__pyx_k__iauUtctai), 0, 0, 1, 1},
-  {&__pyx_n_s__iauUtcut1, __pyx_k__iauUtcut1, sizeof(__pyx_k__iauUtcut1), 0, 0, 1, 1},
-  {&__pyx_n_s__iau_af2a, __pyx_k__iau_af2a, sizeof(__pyx_k__iau_af2a), 0, 0, 1, 1},
-  {&__pyx_n_s__iau_gd2gc, __pyx_k__iau_gd2gc, sizeof(__pyx_k__iau_gd2gc), 0, 0, 1, 1},
   {&__pyx_n_s__id, __pyx_k__id, sizeof(__pyx_k__id), 0, 0, 1, 1},
   {&__pyx_n_s__ideg, __pyx_k__ideg, sizeof(__pyx_k__ideg), 0, 0, 1, 1},
   {&__pyx_n_s__ihmsf, __pyx_k__ihmsf, sizeof(__pyx_k__ihmsf), 0, 0, 1, 1},
@@ -13403,9 +13416,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_ord = __Pyx_GetName(__pyx_b, __pyx_n_s__ord); if (!__pyx_builtin_ord) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ord = __Pyx_GetName(__pyx_b, __pyx_n_s__ord); if (!__pyx_builtin_ord) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
@@ -13416,14 +13429,14 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "astropy/time/sofa_time.pyx":1317
- *     **  4) The inverse transformation is performed in the function iauGc2gd.
+  /* "astropy/time/erfa_time.pyx":1319
+ *     **  4) The inverse transformation is performed in the function eraGc2gd.
  *     """
  *     cdef np.ndarray[double, ndim=1] xyz = np.empty(3, dtype=np.double)             # <<<<<<<<<<<<<<
  * 
  *     errs = {-1: 'illegal identifier',
  */
-  __pyx_k_tuple_23 = PyTuple_Pack(1, __pyx_int_3); if (unlikely(!__pyx_k_tuple_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_23 = PyTuple_Pack(1, __pyx_int_3); if (unlikely(!__pyx_k_tuple_23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1319; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_23);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_23));
 
@@ -13493,341 +13506,341 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_k_tuple_37);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_37));
 
-  /* "astropy/time/sofa_time.pyx":52
+  /* "astropy/time/erfa_time.pyx":54
  *           'beyond last known leap second)'
  * 
  * def check_return(ret, func_name, warns={}, errors={}):             # <<<<<<<<<<<<<<
- *     """Check the return value from an iau routine"""
+ *     """Check the return value from an era routine"""
  *     if ret in warns:
  */
-  __pyx_k_tuple_39 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__ret), ((PyObject *)__pyx_n_s__func_name), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errors)); if (unlikely(!__pyx_k_tuple_39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_39);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_39));
-  __pyx_k_codeobj_40 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__check_return, 52, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_40 = PyTuple_Pack(4, ((PyObject *)__pyx_n_s__ret), ((PyObject *)__pyx_n_s__func_name), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errors)); if (unlikely(!__pyx_k_tuple_40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_40);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_40));
+  __pyx_k_codeobj_41 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__check_return, 54, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":65
+  /* "astropy/time/erfa_time.pyx":67
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def cal2jd(             # <<<<<<<<<<<<<<
  *     np.ndarray[int, ndim=1] iy,
  *     np.ndarray[int, ndim=1] im,
  */
-  __pyx_k_tuple_43 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__djm0), ((PyObject *)__pyx_n_s__djm), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_43);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_43));
-  __pyx_k_codeobj_44 = (PyObject*)__Pyx_PyCode_New(5, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__cal2jd, 65, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_44 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__djm0), ((PyObject *)__pyx_n_s__djm), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_44);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_44));
+  __pyx_k_codeobj_45 = (PyObject*)__Pyx_PyCode_New(5, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__cal2jd, 67, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":116
+  /* "astropy/time/erfa_time.pyx":118
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def d_tai_utc(np.ndarray[int, ndim=1] iy,             # <<<<<<<<<<<<<<
  *               np.ndarray[int, ndim=1] im,
  *               np.ndarray[int, ndim=1] id,
  */
-  __pyx_k_tuple_45 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__fd), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_45);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_45));
-  __pyx_k_codeobj_46 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__d_tai_utc, 116, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_46 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__fd), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_46);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_46));
+  __pyx_k_codeobj_47 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__d_tai_utc, 118, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":214
+  /* "astropy/time/erfa_time.pyx":216
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def jd_dtf(scale, ndp,             # <<<<<<<<<<<<<<
  *               np.ndarray[double, ndim=1] d1,
  *               np.ndarray[double, ndim=1] d2):
  */
-  __pyx_k_tuple_47 = PyTuple_Pack(13, ((PyObject *)__pyx_n_s__scale), ((PyObject *)__pyx_n_s__ndp), ((PyObject *)__pyx_n_s__d1), ((PyObject *)__pyx_n_s__d2), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__ihmsf), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_47)) {__pyx_filename = __pyx_f[0]; __ [...]
-  __Pyx_GOTREF(__pyx_k_tuple_47);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_47));
-  __pyx_k_codeobj_48 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__jd_dtf, 214, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_48 = PyTuple_Pack(13, ((PyObject *)__pyx_n_s__scale), ((PyObject *)__pyx_n_s__ndp), ((PyObject *)__pyx_n_s__d1), ((PyObject *)__pyx_n_s__d2), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__ihmsf), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_48)) {__pyx_filename = __pyx_f[0]; __ [...]
+  __Pyx_GOTREF(__pyx_k_tuple_48);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_48));
+  __pyx_k_codeobj_49 = (PyObject*)__Pyx_PyCode_New(4, 0, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__jd_dtf, 216, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":293
+  /* "astropy/time/erfa_time.pyx":295
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def dtf_jd(scale,             # <<<<<<<<<<<<<<
  *               np.ndarray[int, ndim=1] iy,
  *               np.ndarray[int, ndim=1] im,
  */
-  __pyx_k_tuple_49 = PyTuple_Pack(14, ((PyObject *)__pyx_n_s__scale), ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__ihr), ((PyObject *)__pyx_n_s__imn), ((PyObject *)__pyx_n_s__sec), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_49))  [...]
-  __Pyx_GOTREF(__pyx_k_tuple_49);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_49));
-  __pyx_k_codeobj_50 = (PyObject*)__Pyx_PyCode_New(7, 0, 14, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__dtf_jd, 293, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_50 = PyTuple_Pack(14, ((PyObject *)__pyx_n_s__scale), ((PyObject *)__pyx_n_s__iy), ((PyObject *)__pyx_n_s__im), ((PyObject *)__pyx_n_s__id), ((PyObject *)__pyx_n_s__ihr), ((PyObject *)__pyx_n_s__imn), ((PyObject *)__pyx_n_s__sec), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_50))  [...]
+  __Pyx_GOTREF(__pyx_k_tuple_50);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_50));
+  __pyx_k_codeobj_51 = (PyObject*)__Pyx_PyCode_New(7, 0, 14, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__dtf_jd, 295, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":387
+  /* "astropy/time/erfa_time.pyx":389
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tai_tt(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_k_tuple_51 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_51);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_51));
-  __pyx_k_codeobj_52 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__tai_tt, 387, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_52 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_52);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_52));
+  __pyx_k_codeobj_53 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tai_tt, 389, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":424
+  /* "astropy/time/erfa_time.pyx":426
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tcb_tdb(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_k_tuple_53 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_53);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_53));
-  __pyx_k_codeobj_54 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__tcb_tdb, 424, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_54 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_54);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_54));
+  __pyx_k_codeobj_55 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tcb_tdb, 426, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":480
+  /* "astropy/time/erfa_time.pyx":482
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tcg_tt(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_k_tuple_55 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_55);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_55));
-  __pyx_k_codeobj_56 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__tcg_tt, 480, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_56 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_56);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_56));
+  __pyx_k_codeobj_57 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tcg_tt, 482, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":511
+  /* "astropy/time/erfa_time.pyx":513
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tdb_tcb(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_k_tuple_57 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_57);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_57));
-  __pyx_k_codeobj_58 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__tdb_tcb, 511, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_58 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_58);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_58));
+  __pyx_k_codeobj_59 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tdb_tcb, 513, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":541
+  /* "astropy/time/erfa_time.pyx":543
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_tai(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_k_tuple_59 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_59);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_59));
-  __pyx_k_codeobj_60 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__tt_tai, 541, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_60 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_60);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_60));
+  __pyx_k_codeobj_61 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_60, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tt_tai, 543, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":571
+  /* "astropy/time/erfa_time.pyx":573
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_tcg(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_k_tuple_61 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_61);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_61));
-  __pyx_k_codeobj_62 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__tt_tcg, 571, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_62 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_62);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_62));
+  __pyx_k_codeobj_63 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_62, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tt_tcg, 573, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":600
+  /* "astropy/time/erfa_time.pyx":602
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def utc_tai(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_k_tuple_63 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_63);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_63));
-  __pyx_k_codeobj_64 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__utc_tai, 600, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_64 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_64);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_64));
+  __pyx_k_codeobj_65 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__utc_tai, 602, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":658
+  /* "astropy/time/erfa_time.pyx":660
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tai_utc(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_k_tuple_65 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_65);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_65));
-  __pyx_k_codeobj_66 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__tai_utc, 658, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_66 = PyTuple_Pack(9, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_66);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_66));
+  __pyx_k_codeobj_67 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tai_utc, 660, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_67)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":715
+  /* "astropy/time/erfa_time.pyx":717
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tai_ut1(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_k_tuple_67 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_67)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_67);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_67));
-  __pyx_k_codeobj_68 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_67, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__tai_ut1, 715, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_68)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_68 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_68)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_68);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_68));
+  __pyx_k_codeobj_69 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tai_ut1, 717, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":757
+  /* "astropy/time/erfa_time.pyx":759
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def ut1_tai(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_k_tuple_69 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_69);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_69));
-  __pyx_k_codeobj_70 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__ut1_tai, 757, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_70 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_70);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_70));
+  __pyx_k_codeobj_71 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_70, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__ut1_tai, 759, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":799
+  /* "astropy/time/erfa_time.pyx":801
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_ut1(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_k_tuple_71 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_71);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_71));
-  __pyx_k_codeobj_72 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__tt_ut1, 799, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_72 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_72);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_72));
+  __pyx_k_codeobj_73 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tt_ut1, 801, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_73)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":840
+  /* "astropy/time/erfa_time.pyx":842
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def ut1_tt(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_k_tuple_73 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_73)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_73);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_73));
-  __pyx_k_codeobj_74 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__ut1_tt, 840, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_74)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_74 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_74)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_74);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_74));
+  __pyx_k_codeobj_75 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_74, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__ut1_tt, 842, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_75)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":881
+  /* "astropy/time/erfa_time.pyx":883
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tdb_tt(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_k_tuple_75 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_75)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_75);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_75));
-  __pyx_k_codeobj_76 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__tdb_tt, 881, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_76 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_76);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_76));
+  __pyx_k_codeobj_77 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_76, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tdb_tt, 883, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_77)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":931
+  /* "astropy/time/erfa_time.pyx":933
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_tdb(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_k_tuple_77 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_77)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_77);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_77));
-  __pyx_k_codeobj_78 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__tt_tdb, 931, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_78)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_78 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_78)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_78);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_78));
+  __pyx_k_codeobj_79 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_78, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__tt_tdb, 933, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_79)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":981
+  /* "astropy/time/erfa_time.pyx":983
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def ut1_utc(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_k_tuple_79 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_79)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_79);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_79));
-  __pyx_k_codeobj_80 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_79, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__ut1_utc, 981, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_80 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_80);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_80));
+  __pyx_k_codeobj_81 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_80, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__ut1_utc, 983, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_81)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":1045
+  /* "astropy/time/erfa_time.pyx":1047
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def utc_ut1(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_k_tuple_81 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_81)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_81);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_81));
-  __pyx_k_codeobj_82 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_81, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__utc_ut1, 1045, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_82)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_82 = PyTuple_Pack(10, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__dt), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out1), ((PyObject *)__pyx_n_s__out2), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_82)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_82);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_82));
+  __pyx_k_codeobj_83 = (PyObject*)__Pyx_PyCode_New(3, 0, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__utc_ut1, 1047, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_83)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":1113
+  /* "astropy/time/erfa_time.pyx":1115
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def d_tdb_tt(np.ndarray[double, ndim=1] in1,             # <<<<<<<<<<<<<<
  *              np.ndarray[double, ndim=1] in2,
  *              np.ndarray[double, ndim=1] ut,
  */
-  __pyx_k_tuple_83 = PyTuple_Pack(12, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__ut), ((PyObject *)__pyx_n_s__elong), ((PyObject *)__pyx_n_s__u), ((PyObject *)__pyx_n_s__v), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__c_elong), ((PyObject *)__pyx_n_s__c_u), ((PyObject *)__pyx_n_s__c_v)); if (unlikely(!__pyx_k_tuple_83)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clinen [...]
-  __Pyx_GOTREF(__pyx_k_tuple_83);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_83));
-  __pyx_k_codeobj_84 = (PyObject*)__Pyx_PyCode_New(6, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_83, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__d_tdb_tt, 1113, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_84 = PyTuple_Pack(12, ((PyObject *)__pyx_n_s__in1), ((PyObject *)__pyx_n_s__in2), ((PyObject *)__pyx_n_s__ut), ((PyObject *)__pyx_n_s__elong), ((PyObject *)__pyx_n_s__u), ((PyObject *)__pyx_n_s__v), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__out), ((PyObject *)__pyx_n_s__c_elong), ((PyObject *)__pyx_n_s__c_u), ((PyObject *)__pyx_n_s__c_v)); if (unlikely(!__pyx_k_tuple_84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clinen [...]
+  __Pyx_GOTREF(__pyx_k_tuple_84);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_84));
+  __pyx_k_codeobj_85 = (PyObject*)__Pyx_PyCode_New(6, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__d_tdb_tt, 1115, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_85)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":1232
+  /* "astropy/time/erfa_time.pyx":1234
  * 
  * 
- * def iau_af2a(sign, ideg, iamin, asec):             # <<<<<<<<<<<<<<
+ * def era_af2a(sign, ideg, iamin, asec):             # <<<<<<<<<<<<<<
  *     """
- *     int iauAf2a(char s, int ideg, int iamin, double asec, double *rad)
+ *     int eraAf2a(char s, int ideg, int iamin, double asec, double *rad)
  */
-  __pyx_k_tuple_85 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__sign), ((PyObject *)__pyx_n_s__ideg), ((PyObject *)__pyx_n_s__iamin), ((PyObject *)__pyx_n_s__asec), ((PyObject *)__pyx_n_s__rad), ((PyObject *)__pyx_n_s__s), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_85)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_85);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_85));
-  __pyx_k_codeobj_86 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_85, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__iau_af2a, 1232, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_86)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_86 = PyTuple_Pack(8, ((PyObject *)__pyx_n_s__sign), ((PyObject *)__pyx_n_s__ideg), ((PyObject *)__pyx_n_s__iamin), ((PyObject *)__pyx_n_s__asec), ((PyObject *)__pyx_n_s__rad), ((PyObject *)__pyx_n_s__s), ((PyObject *)__pyx_n_s__warns), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_86)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_86);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_86));
+  __pyx_k_codeobj_87 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__era_af2a, 1234, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_87)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":1273
+  /* "astropy/time/erfa_time.pyx":1275
  *     return rad
  * 
- * def iau_gd2gc(n, elong, phi, height):             # <<<<<<<<<<<<<<
+ * def era_gd2gc(n, elong, phi, height):             # <<<<<<<<<<<<<<
  *     """
  *     Wrap
  */
-  __pyx_k_tuple_87 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__elong), ((PyObject *)__pyx_n_s__phi), ((PyObject *)__pyx_n_s__height), ((PyObject *)__pyx_n_s__xyz), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_87)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_87);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_87));
-  __pyx_k_codeobj_88 = (PyObject*)__Pyx_PyCode_New(4, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_87, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__iau_gd2gc, 1273, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_88)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_88 = PyTuple_Pack(7, ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__elong), ((PyObject *)__pyx_n_s__phi), ((PyObject *)__pyx_n_s__height), ((PyObject *)__pyx_n_s__xyz), ((PyObject *)__pyx_n_s__errs), ((PyObject *)__pyx_n_s__ret)); if (unlikely(!__pyx_k_tuple_88)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_88);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_88));
+  __pyx_k_codeobj_89 = (PyObject*)__Pyx_PyCode_New(4, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_88, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__era_gd2gc, 1275, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_89)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":1330
+  /* "astropy/time/erfa_time.pyx":1332
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def jd_julian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
  *                     np.ndarray[double, ndim=1] jd2):
- *     """ Wrap double iauEpj(double dj1, double dj2)
+ *     """ Wrap double eraEpj(double dj1, double dj2)
  */
-  __pyx_k_tuple_89 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__epd)); if (unlikely(!__pyx_k_tuple_89)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_89);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_89));
-  __pyx_k_codeobj_90 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_89, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__jd_julian_epoch, 1330, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_90)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_90 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__epd)); if (unlikely(!__pyx_k_tuple_90)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_90);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_90));
+  __pyx_k_codeobj_91 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_90, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__jd_julian_epoch, 1332, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_91)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":1361
+  /* "astropy/time/erfa_time.pyx":1363
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def julian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
- *     """ Wrap void iauEpj2jd(double epj, double *djm0, double *djm)
+ *     """ Wrap void eraEpj2jd(double epj, double *djm0, double *djm)
  *     **  Julian Epoch to Julian Date.
  */
-  __pyx_k_tuple_91 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__epd), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2)); if (unlikely(!__pyx_k_tuple_91)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_91);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_91));
-  __pyx_k_codeobj_92 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_91, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__julian_epoch_jd, 1361, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_92)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_92 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__epd), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2)); if (unlikely(!__pyx_k_tuple_92)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_92);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_92));
+  __pyx_k_codeobj_93 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__julian_epoch_jd, 1363, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_93)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":1383
+  /* "astropy/time/erfa_time.pyx":1385
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def jd_besselian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
  *                        np.ndarray[double, ndim=1] jd2):
- *     """ Wrap double iauEpb(double dj1, double dj2)
+ *     """ Wrap double eraEpb(double dj1, double dj2)
  */
-  __pyx_k_tuple_93 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__epd)); if (unlikely(!__pyx_k_tuple_93)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_93);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_93));
-  __pyx_k_codeobj_94 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_93, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__jd_besselian_epoch, 1383, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_94)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_94 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__epd)); if (unlikely(!__pyx_k_tuple_94)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_94);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_94));
+  __pyx_k_codeobj_95 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_94, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__jd_besselian_epoch, 1385, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_95)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":1414
+  /* "astropy/time/erfa_time.pyx":1416
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def besselian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
- *     """ Wrap void iauEpb2jd(double epj, double *djm0, double *djm)
+ *     """ Wrap void eraEpb2jd(double epj, double *djm0, double *djm)
  *     **  Besselian Epoch to Julian Date.
  */
-  __pyx_k_tuple_95 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__epd), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2)); if (unlikely(!__pyx_k_tuple_95)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_k_tuple_95);
-  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_95));
-  __pyx_k_codeobj_96 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_95, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_41, __pyx_n_s__besselian_epoch_jd, 1414, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_96)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_96 = PyTuple_Pack(5, ((PyObject *)__pyx_n_s__epd), ((PyObject *)__pyx_n_s__n), ((PyObject *)__pyx_n_s__i), ((PyObject *)__pyx_n_s__jd1), ((PyObject *)__pyx_n_s__jd2)); if (unlikely(!__pyx_k_tuple_96)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_k_tuple_96);
+  __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_96));
+  __pyx_k_codeobj_97 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_k_tuple_96, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_42, __pyx_n_s__besselian_epoch_jd, 1416, __pyx_empty_bytes); if (unlikely(!__pyx_k_codeobj_97)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -13855,14 +13868,15 @@ static int __Pyx_InitGlobals(void) {
 }
 
 #if PY_MAJOR_VERSION < 3
-PyMODINIT_FUNC initsofa_time(void); /*proto*/
-PyMODINIT_FUNC initsofa_time(void)
+PyMODINIT_FUNC initerfa_time(void); /*proto*/
+PyMODINIT_FUNC initerfa_time(void)
 #else
-PyMODINIT_FUNC PyInit_sofa_time(void); /*proto*/
-PyMODINIT_FUNC PyInit_sofa_time(void)
+PyMODINIT_FUNC PyInit_erfa_time(void); /*proto*/
+PyMODINIT_FUNC PyInit_erfa_time(void)
 #endif
 {
   PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannyDeclarations
   #if CYTHON_REFNANNY
   __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
@@ -13873,7 +13887,7 @@ PyMODINIT_FUNC PyInit_sofa_time(void)
           Py_FatalError("failed to import 'refnanny' module");
   }
   #endif
-  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_sofa_time(void)", 0);
+  __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_erfa_time(void)", 0);
   if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -13895,7 +13909,7 @@ PyMODINIT_FUNC PyInit_sofa_time(void)
   #endif
   /*--- Module creation code ---*/
   #if PY_MAJOR_VERSION < 3
-  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("sofa_time"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
+  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("erfa_time"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
   #else
   __pyx_m = PyModule_Create(&__pyx_moduledef);
   #endif
@@ -13903,8 +13917,8 @@ PyMODINIT_FUNC PyInit_sofa_time(void)
   #if PY_MAJOR_VERSION >= 3
   {
     PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (!PyDict_GetItemString(modules, "astropy.time.sofa_time")) {
-      if (unlikely(PyDict_SetItemString(modules, "astropy.time.sofa_time", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!PyDict_GetItemString(modules, "astropy.time.erfa_time")) {
+      if (unlikely(PyDict_SetItemString(modules, "astropy.time.erfa_time", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
@@ -13915,7 +13929,7 @@ PyMODINIT_FUNC PyInit_sofa_time(void)
   if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   /*--- Initialize various global constants etc. ---*/
   if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_module_is_main_astropy__time__sofa_time) {
+  if (__pyx_module_is_main_astropy__time__erfa_time) {
     if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   }
   /*--- Builtin init code ---*/
@@ -13943,392 +13957,417 @@ PyMODINIT_FUNC PyInit_sofa_time(void)
   /*--- Function import code ---*/
   /*--- Execution code ---*/
 
-  /* "astropy/time/sofa_time.pyx":1
+  /* "astropy/time/erfa_time.pyx":1
  * import warnings             # <<<<<<<<<<<<<<
  * 
- * import numpy as np
+ * from ..utils.exceptions import AstropyUserWarning
  */
   __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__warnings), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   if (PyObject_SetAttr(__pyx_m, __pyx_n_s__warnings, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "astropy/time/sofa_time.pyx":3
+  /* "astropy/time/erfa_time.pyx":3
  * import warnings
  * 
+ * from ..utils.exceptions import AstropyUserWarning             # <<<<<<<<<<<<<<
+ * 
+ * import numpy as np
+ */
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_n_s__AstropyUserWarning));
+  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_n_s__AstropyUserWarning));
+  __Pyx_GIVEREF(((PyObject *)__pyx_n_s__AstropyUserWarning));
+  __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s_38), ((PyObject *)__pyx_t_1), 2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__AstropyUserWarning);
+  if (__pyx_t_1 == NULL) {
+    if (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseImportError(__pyx_n_s__AstropyUserWarning);
+    if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__AstropyUserWarning, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "astropy/time/erfa_time.pyx":5
+ * from ..utils.exceptions import AstropyUserWarning
+ * 
  * import numpy as np             # <<<<<<<<<<<<<<
  * cimport numpy as np
  * import cython
  */
-  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = __Pyx_Import(((PyObject *)__pyx_n_s__numpy), 0, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__np, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":49
- *     int iauGd2gc(int n, double elong, double phi, double height, double xyz[3])
+  /* "astropy/time/erfa_time.pyx":51
+ *     int eraGd2gc(int n, double elong, double phi, double height, double xyz[3])
  * 
  * DUBIOUS = 'dubious year for UTC (before 1960.0 or 5 years ' \             # <<<<<<<<<<<<<<
  *           'beyond last known leap second)'
  * 
  */
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DUBIOUS, ((PyObject *)__pyx_kp_s_38)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DUBIOUS, ((PyObject *)__pyx_kp_s_39)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "astropy/time/sofa_time.pyx":52
+  /* "astropy/time/erfa_time.pyx":54
  *           'beyond last known leap second)'
  * 
  * def check_return(ret, func_name, warns={}, errors={}):             # <<<<<<<<<<<<<<
- *     """Check the return value from an iau routine"""
+ *     """Check the return value from an era routine"""
  *     if ret in warns:
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_k_1 = ((PyObject *)__pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  __pyx_k_2 = ((PyObject *)__pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_1check_return, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__check_return, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __pyx_k_1 = ((PyObject *)__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __pyx_k_2 = ((PyObject *)__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_1check_return, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__check_return, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":65
+  /* "astropy/time/erfa_time.pyx":67
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def cal2jd(             # <<<<<<<<<<<<<<
  *     np.ndarray[int, ndim=1] iy,
  *     np.ndarray[int, ndim=1] im,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_3cal2jd, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__cal2jd, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_3cal2jd, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__cal2jd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":116
+  /* "astropy/time/erfa_time.pyx":118
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def d_tai_utc(np.ndarray[int, ndim=1] iy,             # <<<<<<<<<<<<<<
  *               np.ndarray[int, ndim=1] im,
  *               np.ndarray[int, ndim=1] id,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_5d_tai_utc, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__d_tai_utc, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_5d_tai_utc, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__d_tai_utc, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":214
+  /* "astropy/time/erfa_time.pyx":216
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def jd_dtf(scale, ndp,             # <<<<<<<<<<<<<<
  *               np.ndarray[double, ndim=1] d1,
  *               np.ndarray[double, ndim=1] d2):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_7jd_dtf, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__jd_dtf, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_7jd_dtf, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__jd_dtf, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":293
+  /* "astropy/time/erfa_time.pyx":295
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def dtf_jd(scale,             # <<<<<<<<<<<<<<
  *               np.ndarray[int, ndim=1] iy,
  *               np.ndarray[int, ndim=1] im,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_9dtf_jd, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__dtf_jd, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_9dtf_jd, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__dtf_jd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":387
+  /* "astropy/time/erfa_time.pyx":389
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tai_tt(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_11tai_tt, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tai_tt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_11tai_tt, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tai_tt, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":424
+  /* "astropy/time/erfa_time.pyx":426
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tcb_tdb(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_13tcb_tdb, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tcb_tdb, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_13tcb_tdb, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tcb_tdb, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":480
+  /* "astropy/time/erfa_time.pyx":482
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tcg_tt(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_15tcg_tt, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tcg_tt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_15tcg_tt, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tcg_tt, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":511
+  /* "astropy/time/erfa_time.pyx":513
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tdb_tcb(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_17tdb_tcb, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tdb_tcb, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_17tdb_tcb, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tdb_tcb, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":541
+  /* "astropy/time/erfa_time.pyx":543
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_tai(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_19tt_tai, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_tai, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_19tt_tai, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_tai, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":571
+  /* "astropy/time/erfa_time.pyx":573
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_tcg(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_21tt_tcg, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_tcg, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_21tt_tcg, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_tcg, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":600
+  /* "astropy/time/erfa_time.pyx":602
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def utc_tai(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_23utc_tai, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__utc_tai, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_23utc_tai, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__utc_tai, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":658
+  /* "astropy/time/erfa_time.pyx":660
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tai_utc(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2):
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_25tai_utc, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tai_utc, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_25tai_utc, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tai_utc, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":715
+  /* "astropy/time/erfa_time.pyx":717
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tai_ut1(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_27tai_ut1, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tai_ut1, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_27tai_ut1, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tai_ut1, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":757
+  /* "astropy/time/erfa_time.pyx":759
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def ut1_tai(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_29ut1_tai, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ut1_tai, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_29ut1_tai, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ut1_tai, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":799
+  /* "astropy/time/erfa_time.pyx":801
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_ut1(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_31tt_ut1, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_ut1, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_31tt_ut1, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_ut1, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":840
+  /* "astropy/time/erfa_time.pyx":842
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def ut1_tt(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_33ut1_tt, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ut1_tt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_33ut1_tt, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ut1_tt, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":881
+  /* "astropy/time/erfa_time.pyx":883
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tdb_tt(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_35tdb_tt, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tdb_tt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 881; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_35tdb_tt, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tdb_tt, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":931
+  /* "astropy/time/erfa_time.pyx":933
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def tt_tdb(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_37tt_tdb, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_tdb, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_37tt_tdb, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__tt_tdb, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":981
+  /* "astropy/time/erfa_time.pyx":983
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def ut1_utc(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_39ut1_utc, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ut1_utc, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 981; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_39ut1_utc, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ut1_utc, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1045
+  /* "astropy/time/erfa_time.pyx":1047
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def utc_ut1(             # <<<<<<<<<<<<<<
  *     np.ndarray[double, ndim=1] in1,
  *     np.ndarray[double, ndim=1] in2,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_41utc_ut1, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__utc_ut1, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_41utc_ut1, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__utc_ut1, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1113
+  /* "astropy/time/erfa_time.pyx":1115
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def d_tdb_tt(np.ndarray[double, ndim=1] in1,             # <<<<<<<<<<<<<<
  *              np.ndarray[double, ndim=1] in2,
  *              np.ndarray[double, ndim=1] ut,
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_43d_tdb_tt, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__d_tdb_tt, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_43d_tdb_tt, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__d_tdb_tt, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1232
+  /* "astropy/time/erfa_time.pyx":1234
  * 
  * 
- * def iau_af2a(sign, ideg, iamin, asec):             # <<<<<<<<<<<<<<
+ * def era_af2a(sign, ideg, iamin, asec):             # <<<<<<<<<<<<<<
  *     """
- *     int iauAf2a(char s, int ideg, int iamin, double asec, double *rad)
+ *     int eraAf2a(char s, int ideg, int iamin, double asec, double *rad)
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_45iau_af2a, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__iau_af2a, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_45era_af2a, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__era_af2a, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1273
+  /* "astropy/time/erfa_time.pyx":1275
  *     return rad
  * 
- * def iau_gd2gc(n, elong, phi, height):             # <<<<<<<<<<<<<<
+ * def era_gd2gc(n, elong, phi, height):             # <<<<<<<<<<<<<<
  *     """
  *     Wrap
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_47iau_gd2gc, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__iau_gd2gc, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_47era_gd2gc, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__era_gd2gc, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1330
+  /* "astropy/time/erfa_time.pyx":1332
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def jd_julian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
  *                     np.ndarray[double, ndim=1] jd2):
- *     """ Wrap double iauEpj(double dj1, double dj2)
+ *     """ Wrap double eraEpj(double dj1, double dj2)
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_49jd_julian_epoch, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__jd_julian_epoch, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_49jd_julian_epoch, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__jd_julian_epoch, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1361
+  /* "astropy/time/erfa_time.pyx":1363
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def julian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
- *     """ Wrap void iauEpj2jd(double epj, double *djm0, double *djm)
+ *     """ Wrap void eraEpj2jd(double epj, double *djm0, double *djm)
  *     **  Julian Epoch to Julian Date.
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_51julian_epoch_jd, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__julian_epoch_jd, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_51julian_epoch_jd, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__julian_epoch_jd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1363; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1383
+  /* "astropy/time/erfa_time.pyx":1385
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def jd_besselian_epoch(np.ndarray[double, ndim=1] jd1,             # <<<<<<<<<<<<<<
  *                        np.ndarray[double, ndim=1] jd2):
- *     """ Wrap double iauEpb(double dj1, double dj2)
+ *     """ Wrap double eraEpb(double dj1, double dj2)
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_53jd_besselian_epoch, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__jd_besselian_epoch, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_53jd_besselian_epoch, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__jd_besselian_epoch, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1414
+  /* "astropy/time/erfa_time.pyx":1416
  * @cython.wraparound(False)
  * @cython.boundscheck(False)
  * def besselian_epoch_jd(np.ndarray[double, ndim=1] epd):             # <<<<<<<<<<<<<<
- *     """ Wrap void iauEpb2jd(double epj, double *djm0, double *djm)
+ *     """ Wrap void eraEpb2jd(double epj, double *djm0, double *djm)
  *     **  Besselian Epoch to Julian Date.
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9sofa_time_55besselian_epoch_jd, NULL, __pyx_n_s_42); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__besselian_epoch_jd, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7astropy_4time_9erfa_time_55besselian_epoch_jd, NULL, __pyx_n_s_43); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__besselian_epoch_jd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "astropy/time/sofa_time.pyx":1
+  /* "astropy/time/erfa_time.pyx":1
  * import warnings             # <<<<<<<<<<<<<<
  * 
- * import numpy as np
+ * from ..utils.exceptions import AstropyUserWarning
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
-  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_2)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
 
   /* "numpy.pxd":975
  *      arr.base = baseptr
@@ -14340,11 +14379,12 @@ PyMODINIT_FUNC PyInit_sofa_time(void)
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
   if (__pyx_m) {
-    __Pyx_AddTraceback("init astropy.time.sofa_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    __Pyx_AddTraceback("init astropy.time.erfa_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
     Py_DECREF(__pyx_m); __pyx_m = 0;
   } else if (!PyErr_Occurred()) {
-    PyErr_SetString(PyExc_ImportError, "init astropy.time.sofa_time");
+    PyErr_SetString(PyExc_ImportError, "init astropy.time.erfa_time");
   }
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
@@ -15502,6 +15542,15 @@ bad:
     return module;
 }
 
+static CYTHON_INLINE void __Pyx_RaiseImportError(PyObject *name) {
+#if PY_MAJOR_VERSION < 3
+    PyErr_Format(PyExc_ImportError, "cannot import name %.230s",
+                 PyString_AsString(name));
+#else
+    PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
+#endif
+}
+
 #if CYTHON_CCOMPLEX
   #ifdef __cplusplus
     static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
diff --git a/astropy/time/sofa_time.pyx b/astropy/time/erfa_time.pyx
similarity index 86%
rename from astropy/time/sofa_time.pyx
rename to astropy/time/erfa_time.pyx
index d56fddf..b586dd3 100644
--- a/astropy/time/sofa_time.pyx
+++ b/astropy/time/erfa_time.pyx
@@ -1,58 +1,60 @@
 import warnings
 
+from ..utils.exceptions import AstropyUserWarning
+
 import numpy as np
 cimport numpy as np
 import cython
 
 ctypedef np.double_t DOUBLE_T
 
-cdef extern from "sofa.h":
-    double iauEpb(double dj1, double dj2)
-    double iauEpj(double dj1, double dj2)
-    void iauEpj2jd(double epj, double *djm0, double *djm)
-    void iauEpb2jd(double epb, double *djm0, double *djm)
-    int iauCal2jd(int iy, int im, int id, double *djm0, double *djm)
-    int iauJd2cal(double dj1, double dj2,int *iy, int *im, int *id, double *fd)
-    int iauJdcalf(int ndp, double dj1, double dj2, int iymdf[4])
+cdef extern from "erfa.h":
+    double eraEpb(double dj1, double dj2)
+    double eraEpj(double dj1, double dj2)
+    void eraEpj2jd(double epj, double *djm0, double *djm)
+    void eraEpb2jd(double epb, double *djm0, double *djm)
+    int eraCal2jd(int iy, int im, int id, double *djm0, double *djm)
+    int eraJd2cal(double dj1, double dj2,int *iy, int *im, int *id, double *fd)
+    int eraJdcalf(int ndp, double dj1, double dj2, int iymdf[4])
 
     # Internal JD to/from datetime format converters
-    int iauD2dtf(char *scale, int ndp, double d1, double d2, int *iy, int *im, int *id, int ihmsf[4])
-    int iauDtf2d(char *scale, int iy, int im, int id, int ihr, int imn, double sec, double *d1, double *d2)
+    int eraD2dtf(char *scale, int ndp, double d1, double d2, int *iy, int *im, int *id, int ihmsf[4])
+    int eraDtf2d(char *scale, int iy, int im, int id, int ihr, int imn, double sec, double *d1, double *d2)
 
     # Time scale helper routines
-    double iauDtdb(double date1, double date2, double ut, double elong, double u, double v)
-    int iauDat(int iy, int im, int id, double fd, double *deltat)
+    double eraDtdb(double date1, double date2, double ut, double elong, double u, double v)
+    int eraDat(int iy, int im, int id, double fd, double *deltat)
 
     # Time scale conversion routines
-    int iauTaitt(double tai1, double tai2, double *tt1, double *tt2)
-    int iauTttai(double tt1, double tt2, double *tai1, double *tai2)
-    int iauTaiutc(double tai1, double tai2, double *utc1, double *utc2)
-    int iauUtctai(double utc1, double utc2, double *tai1, double *tai2)
-    int iauTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2)
-    int iauTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2)
-    int iauTcgtt(double tcg1, double tcg2, double *tt1, double *tt2)
-    int iauTttcg(double tt1, double tt2, double *tcg1, double *tcg2)
-
-    int iauTaiut1(double tai1, double tai2, double dta, double *ut11, double *ut12)
-    int iauUt1tai(double ut11, double ut12, double dta, double *tai1, double *tai2)
-    int iauTtut1(double tt1, double tt2, double dt, double *ut11, double *ut12)
-    int iauUt1tt(double ut11, double ut12, double dt, double *tt1, double *tt2)
-    int iauTdbtt(double tdb1, double tdb2, double dtr, double *tt1, double *tt2)
-    int iauTttdb(double tt1, double tt2, double dtr, double *tdb1, double *tdb2)
-    int iauUt1utc(double ut11, double ut12, double dut1, double *utc1, double *utc2)
-    int iauUtcut1(double utc1, double utc2, double dut1, double *ut11, double *ut12)
+    int eraTaitt(double tai1, double tai2, double *tt1, double *tt2)
+    int eraTttai(double tt1, double tt2, double *tai1, double *tai2)
+    int eraTaiutc(double tai1, double tai2, double *utc1, double *utc2)
+    int eraUtctai(double utc1, double utc2, double *tai1, double *tai2)
+    int eraTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2)
+    int eraTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2)
+    int eraTcgtt(double tcg1, double tcg2, double *tt1, double *tt2)
+    int eraTttcg(double tt1, double tt2, double *tcg1, double *tcg2)
+
+    int eraTaiut1(double tai1, double tai2, double dta, double *ut11, double *ut12)
+    int eraUt1tai(double ut11, double ut12, double dta, double *tai1, double *tai2)
+    int eraTtut1(double tt1, double tt2, double dt, double *ut11, double *ut12)
+    int eraUt1tt(double ut11, double ut12, double dt, double *tt1, double *tt2)
+    int eraTdbtt(double tdb1, double tdb2, double dtr, double *tt1, double *tt2)
+    int eraTttdb(double tt1, double tt2, double dtr, double *tdb1, double *tdb2)
+    int eraUt1utc(double ut11, double ut12, double dut1, double *utc1, double *utc2)
+    int eraUtcut1(double utc1, double utc2, double dut1, double *ut11, double *ut12)
 
     # Geodetic
-    int iauAf2a(char s, int ideg, int iamin, double asec, double *rad)
-    int iauGd2gc(int n, double elong, double phi, double height, double xyz[3])
+    int eraAf2a(char s, int ideg, int iamin, double asec, double *rad)
+    int eraGd2gc(int n, double elong, double phi, double height, double xyz[3])
 
 DUBIOUS = 'dubious year for UTC (before 1960.0 or 5 years ' \
           'beyond last known leap second)'
 
 def check_return(ret, func_name, warns={}, errors={}):
-    """Check the return value from an iau routine"""
+    """Check the return value from an era routine"""
     if ret in warns:
-        warnings.warn('{0}: {1}'.format(func_name, warns[ret]))
+        warnings.warn('{0}: {1}'.format(func_name, warns[ret]), AstropyUserWarning)
     elif ret in errors:
         raise ValueError('{0}: {1}'.format(func_name, errors[ret]))
     elif ret != 0:
@@ -69,7 +71,7 @@ def cal2jd(
     np.ndarray[double, ndim=1] djm0,
     np.ndarray[double, ndim=1] djm):
     """
-    int iauCal2jd(int iy, int im, int id, double *djm0, double *djm)
+    int eraCal2jd(int iy, int im, int id, double *djm0, double *djm)
     Calendar date to high-precision JD.
 
     **  Given:
@@ -91,7 +93,7 @@ def cal2jd(
     **  1) The algorithm used is valid from -4800 March 1, but this
     **     implementation rejects dates before -4799 January 1.
     **
-    **  2) The Julian Date is returned in two pieces, in the usual SOFA
+    **  2) The Julian Date is returned in two pieces, in the usual ERFA
     **     manner, which is designed to preserve time resolution.  The
     **     Julian Date is available as a single number by adding djm0 and
     **     djm.
@@ -107,8 +109,8 @@ def cal2jd(
     errs = {-1: 'Bad input year',
              -2: 'Bad input month'}
     for i in range(n):
-        ret = iauCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])
-        check_return(ret, 'iauCal2jd', warns, errs)
+        ret = eraCal2jd( iy[i], im[i], id[i], &djm0[i], &djm[i])
+        check_return(ret, 'eraCal2jd', warns, errs)
     return
 
 @cython.wraparound(False)
@@ -118,7 +120,7 @@ def d_tai_utc(np.ndarray[int, ndim=1] iy,
               np.ndarray[int, ndim=1] id,
               np.ndarray[double, ndim=1] fd):
     """
-    int iauDat(int iy, int im, int id, double fd, double *deltat)
+    int eraDat(int iy, int im, int id, double fd, double *deltat)
     For a given UTC date, calculate delta(AT) = TAI-UTC.
 
     **  Given:
@@ -202,9 +204,9 @@ def d_tai_utc(np.ndarray[int, ndim=1] iy,
              -3: 'bad day (must be within normal calendar date for a month)',
              -4: 'bad fraction of day'}
     for i in range(n):
-        ret = iauDat(iy[i], im[i], id[i], fd[i],
+        ret = eraDat(iy[i], im[i], id[i], fd[i],
                      &out[i])
-        check_return(ret, 'iauDat', warns, errs)
+        check_return(ret, 'eraDat', warns, errs)
 
     return out
 
@@ -215,7 +217,7 @@ def jd_dtf(scale, ndp,
               np.ndarray[double, ndim=1] d1,
               np.ndarray[double, ndim=1] d2):
     """
-    int iauD2dtf(const char *scale, int ndp, double d1, double d2,
+    int eraD2dtf(const char *scale, int ndp, double d1, double d2,
              int *iy, int *im, int *id, int ihmsf[4])
 
     **  Given:
@@ -260,15 +262,15 @@ def jd_dtf(scale, ndp,
     **     next note.
     **
     **  4) JD cannot unambiguously represent UTC during a leap second unless
-    **     special measures are taken.  The SOFA internal convention is that
+    **     special measures are taken.  The ERFA internal convention is that
     **     the quasi-JD day represents UTC days whether the length is 86399,
     **     86400 or 86401 SI seconds.
     **
     **  5) The warning status "dubious year" flags UTCs that predate the
     **     introduction of the time scale and that are too far in the future
-    **     to be trusted.  See iauDat for further details.
+    **     to be trusted.  See eraDat for further details.
     **
-    **  6) For calendar conventions and limitations, see iauCal2jd.
+    **  6) For calendar conventions and limitations, see eraCal2jd.
     """
     cdef int i
     cdef int n = d1.shape[0]
@@ -282,9 +284,9 @@ def jd_dtf(scale, ndp,
     errs = {-1: 'unacceptable date'}
 
     for i in range(n):
-        ret = iauD2dtf(scale, ndp, d1[i], d2[i],
+        ret = eraD2dtf(scale, ndp, d1[i], d2[i],
                      &iy[i], &im[i], &id[i], &ihmsf[i, 0])
-        check_return(ret, 'iauD2dtf', warns, errs)
+        check_return(ret, 'eraD2dtf', warns, errs)
 
     return iy, im, id, ihmsf
 
@@ -298,7 +300,7 @@ def dtf_jd(scale,
               np.ndarray[int, ndim=1] imn,
               np.ndarray[double, ndim=1] sec):
     """
-    int iauDtf2d(char *scale, int iy, int im, int id, int ihr, int imn, double sec, double *d1, double *d2)
+    int eraDtf2d(char *scale, int iy, int im, int id, int ihr, int imn, double sec, double *d1, double *d2)
 
     **  Given:
     **     scale     char[]  time scale ID (Note 1)
@@ -327,7 +329,7 @@ def dtf_jd(scale,
     **     case) is significant, and enables handling of leap seconds (see
     **     Note 4).
     **
-    **  2) For calendar conventions and limitations, see iauCal2jd.
+    **  2) For calendar conventions and limitations, see eraCal2jd.
     **
     **  3) The sum of the results, d1+d2, is Julian Date, where normally d1
     **     is the Julian Day Number and d2 is the fraction of a day.  In the
@@ -335,7 +337,7 @@ def dtf_jd(scale,
     **     conventions apply:  see the next note.
     **
     **  4) JD cannot unambiguously represent UTC during a leap second unless
-    **     special measures are taken.  The SOFA internal convention is that
+    **     special measures are taken.  The ERFA internal convention is that
     **     the quasi-JD day represents UTC days whether the length is 86399,
     **     86400 or 86401 SI seconds.
     **
@@ -346,7 +348,7 @@ def dtf_jd(scale,
     **
     **  6) The warning status "dubious year" flags UTCs that predate the
     **     introduction of the time scale and that are too far in the future
-    **     to be trusted.  See iauDat for further details.
+    **     to be trusted.  See eraDat for further details.
     **
     **  7) Only in the case of continuous and regular time scales (TAI, TT,
     **     TCG, TCB and TDB) is the result d1+d2 a Julian Date, strictly
@@ -375,9 +377,9 @@ def dtf_jd(scale,
             -6: 'bad second (< 0)'}
 
     for i in range(n):
-        ret = iauDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],
+        ret = eraDtf2d(scale, iy[i], im[i], id[i], ihr[i], imn[i], sec[i],
                        &out1[i], &out2[i])
-        check_return(ret, 'iauDtf2d', warns, errs)
+        check_return(ret, 'eraDtf2d', warns, errs)
 
     return out1, out2
 
@@ -388,7 +390,7 @@ def tai_tt(
     np.ndarray[double, ndim=1] in1,
     np.ndarray[double, ndim=1] in2):
     """
-    int iauTaitt(double tai1, double tai2, double *tt1, double *tt2)
+    int eraTaitt(double tai1, double tai2, double *tt1, double *tt2)
 
     **  Given:
     **     tai1,tai2  double    TAI as a 2-part Julian Date
@@ -413,8 +415,8 @@ def tai_tt(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauTaitt(in1[i], in2[i], &out1[i], &out2[i])
-        check_return(ret, 'iauTaitt')
+        ret = eraTaitt(in1[i], in2[i], &out1[i], &out2[i])
+        check_return(ret, 'eraTaitt')
 
     return out1, out2
 
@@ -425,7 +427,7 @@ def tcb_tdb(
     np.ndarray[double, ndim=1] in1,
     np.ndarray[double, ndim=1] in2):
     """
-    int iauTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2)
+    int eraTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2)
 
     **  Given:
     **     tcb1,tcb2  double    TCB as a 2-part Julian Date
@@ -469,8 +471,8 @@ def tcb_tdb(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauTcbtdb(in1[i], in2[i], &out1[i], &out2[i])
-        check_return(ret, 'iauTcbtdb')
+        ret = eraTcbtdb(in1[i], in2[i], &out1[i], &out2[i])
+        check_return(ret, 'eraTcbtdb')
 
     return out1, out2
 
@@ -481,7 +483,7 @@ def tcg_tt(
     np.ndarray[double, ndim=1] in1,
     np.ndarray[double, ndim=1] in2):
     """
-   int iauTcgtt(double tcg1, double tcg2, double *tt1, double *tt2)
+   int eraTcgtt(double tcg1, double tcg2, double *tt1, double *tt2)
 
    **  Given:
    **     tcg1,tcg2  double    TCG as a 2-part Julian Date
@@ -500,8 +502,8 @@ def tcg_tt(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauTcgtt(in1[i], in2[i], &out1[i], &out2[i])
-        check_return(ret, 'iauTcgtt')
+        ret = eraTcgtt(in1[i], in2[i], &out1[i], &out2[i])
+        check_return(ret, 'eraTcgtt')
 
     return out1, out2
 
@@ -512,7 +514,7 @@ def tdb_tcb(
     np.ndarray[double, ndim=1] in1,
     np.ndarray[double, ndim=1] in2):
     """
-    int iauTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2)
+    int eraTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2)
 
     **  Given:
     **     tdb1,tdb2  double    TDB as a 2-part Julian Date
@@ -530,8 +532,8 @@ def tdb_tcb(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauTdbtcb(in1[i], in2[i], &out1[i], &out2[i])
-        check_return(ret, 'iauTdbtcb')
+        ret = eraTdbtcb(in1[i], in2[i], &out1[i], &out2[i])
+        check_return(ret, 'eraTdbtcb')
 
     return out1, out2
 
@@ -542,7 +544,7 @@ def tt_tai(
     np.ndarray[double, ndim=1] in1,
     np.ndarray[double, ndim=1] in2):
     """
-    int iauTttai(double tt1, double tt2, double *tai1, double *tai2)
+    int eraTttai(double tt1, double tt2, double *tai1, double *tai2)
 
     **  Given:
     **     tt1,tt2    double    TT as a 2-part Julian Date
@@ -560,8 +562,8 @@ def tt_tai(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauTttai(in1[i], in2[i], &out1[i], &out2[i])
-        check_return(ret, 'iauTttai')
+        ret = eraTttai(in1[i], in2[i], &out1[i], &out2[i])
+        check_return(ret, 'eraTttai')
 
     return out1, out2
 
@@ -572,7 +574,7 @@ def tt_tcg(
     np.ndarray[double, ndim=1] in1,
     np.ndarray[double, ndim=1] in2):
     """
-    int iauTttcg(double tt1, double tt2, double *tcg1, double *tcg2)
+    int eraTttcg(double tt1, double tt2, double *tcg1, double *tcg2)
     **  Given:
     **     tt1,tt2    double    TT as a 2-part Julian Date
     **
@@ -589,8 +591,8 @@ def tt_tcg(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauTttcg(in1[i], in2[i], &out1[i], &out2[i])
-        check_return(ret, 'iauTttcg')
+        ret = eraTttcg(in1[i], in2[i], &out1[i], &out2[i])
+        check_return(ret, 'eraTttcg')
 
     return out1, out2
 
@@ -601,7 +603,7 @@ def utc_tai(
     np.ndarray[double, ndim=1] in1,
     np.ndarray[double, ndim=1] in2):
     """
-    int iauUtctai(double utc1, double utc2, double *tai1, double *tai2)
+    int eraUtctai(double utc1, double utc2, double *tai1, double *tai2)
 
     **  Given:
     **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)
@@ -627,9 +629,9 @@ def utc_tai(
     **
     **  3) The warning status "dubious year" flags UTCs that predate the
     **     introduction of the time scale and that are too far in the future
-    **     to be trusted.  See iauDat  for further details.
+    **     to be trusted.  See eraDat  for further details.
     **
-    **  4) The function iauDtf2d converts from calendar date and time of day
+    **  4) The function eraDtf2d converts from calendar date and time of day
     **     into 2-part Julian Date, and in the case of UTC implements the
     **     leap-second-ambiguity convention described above.
     **
@@ -647,8 +649,8 @@ def utc_tai(
     errs = {-1: 'unacceptable date'}
 
     for i in range(n):
-        ret = iauUtctai(in1[i], in2[i], &out1[i], &out2[i])
-        check_return(ret, 'iauUtctai', warns, errs)
+        ret = eraUtctai(in1[i], in2[i], &out1[i], &out2[i])
+        check_return(ret, 'eraUtctai', warns, errs)
 
     return out1, out2
 
@@ -659,7 +661,7 @@ def tai_utc(
     np.ndarray[double, ndim=1] in1,
     np.ndarray[double, ndim=1] in2):
     """
-    int iauTaiutc(double tai1, double tai2, double *utc1, double *utc2)
+    int eraTaiutc(double tai1, double tai2, double *utc1, double *utc2)
 
     **  Given:
     **     tai1,tai2  double   TAI as a 2-part Julian Date (Note 1)
@@ -686,13 +688,13 @@ def tai_utc(
     **     function is that the JD day represents UTC days whether the
     **     length is 86399, 86400 or 86401 SI seconds.
     **
-    **  3) The function iauD2dtf can be used to transform the UTC quasi-JD
+    **  3) The function eraD2dtf can be used to transform the UTC quasi-JD
     **     into calendar date and clock time, including UTC leap second
     **     handling.
     **
     **  4) The warning status "dubious year" flags UTCs that predate the
     **     introduction of the time scale and that are too far in the future
-    **     to be trusted.  See iauDat for further details.
+    **     to be trusted.  See eraDat for further details.
         """
     assert in1.shape[0] == in2.shape[0]
     cdef unsigned n = in1.shape[0]
@@ -704,8 +706,8 @@ def tai_utc(
     errs = {-1: 'unacceptable date'}
 
     for i in range(n):
-        ret = iauTaiutc(in1[i], in2[i], &out1[i], &out2[i])
-        check_return(ret, 'iauTaiutc', warns, errs)
+        ret = eraTaiutc(in1[i], in2[i], &out1[i], &out2[i])
+        check_return(ret, 'eraTaiutc', warns, errs)
 
     return out1, out2
 
@@ -717,7 +719,7 @@ def tai_ut1(
     np.ndarray[double, ndim=1] in2,
     np.ndarray[double, ndim=1] dt):
     """
-    int iauTaiut1(double tai1, double tai2, double dta, double *ut11, double *ut12)
+    int eraTaiut1(double tai1, double tai2, double dta, double *ut11, double *ut12)
 
     **  Given:
     **     tai1,tai2  double    TAI as a 2-part Julian Date
@@ -746,8 +748,8 @@ def tai_ut1(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauTaiut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-        check_return(ret, 'iauTaiut1')
+        ret = eraTaiut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+        check_return(ret, 'eraTaiut1')
 
     return out1, out2
 
@@ -759,7 +761,7 @@ def ut1_tai(
     np.ndarray[double, ndim=1] in2,
     np.ndarray[double, ndim=1] dt):
     """
-    int iauUt1tai(double ut11, double ut12, double dta, double *tai1, double *tai2)
+    int eraUt1tai(double ut11, double ut12, double dta, double *tai1, double *tai2)
 
     **  Given:
     **     ut11,ut12  double    UT1 as a 2-part Julian Date
@@ -788,8 +790,8 @@ def ut1_tai(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauUt1tai(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-        check_return(ret, 'iauUt1tai')
+        ret = eraUt1tai(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+        check_return(ret, 'eraUt1tai')
 
     return out1, out2
 
@@ -801,7 +803,7 @@ def tt_ut1(
     np.ndarray[double, ndim=1] in2,
     np.ndarray[double, ndim=1] dt):
     """
-    int iauTtut1(double tt1, double tt2, double dt, double *ut11, double *ut12)
+    int eraTtut1(double tt1, double tt2, double dt, double *ut11, double *ut12)
 
     **  Given:
     **     tt1,tt2    double    TT as a 2-part Julian Date
@@ -829,8 +831,8 @@ def tt_ut1(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauTtut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-        check_return(ret, 'iauTtut1')
+        ret = eraTtut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+        check_return(ret, 'eraTtut1')
 
     return out1, out2
 
@@ -842,7 +844,7 @@ def ut1_tt(
     np.ndarray[double, ndim=1] in2,
     np.ndarray[double, ndim=1] dt):
     """
-    int iauUt1tt(double ut11, double ut12, double dt, double *tt1, double *tt2)
+    int eraUt1tt(double ut11, double ut12, double dt, double *tt1, double *tt2)
 
     **  Given:
     **     ut11,ut12  double    UT1 as a 2-part Julian Date
@@ -870,8 +872,8 @@ def ut1_tt(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauUt1tt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-        check_return(ret, 'iauUt1tt')
+        ret = eraUt1tt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+        check_return(ret, 'eraUt1tt')
 
     return out1, out2
 
@@ -883,7 +885,7 @@ def tdb_tt(
     np.ndarray[double, ndim=1] in2,
     np.ndarray[double, ndim=1] dt):
     """
-    int iauTdbtt(double tdb1, double tdb2, double dtr, double *tt1, double *tt2)
+    int eraTdbtt(double tdb1, double tdb2, double dtr, double *tt1, double *tt2)
 
     **  Given:
     **     tdb1,tdb2  double    TDB as a 2-part Julian Date
@@ -906,8 +908,8 @@ def tdb_tt(
     **     GR transformation between TT and TCB.  It is dependent upon the
     **     adopted solar-system ephemeris, and can be obtained by numerical
     **     integration, by interrogating a precomputed time ephemeris or by
-    **     evaluating a model such as that implemented in the SOFA function
-    **     iauDtdb.   The quantity is dominated by an annual term of 1.7 ms
+    **     evaluating a model such as that implemented in the ERFA function
+    **     eraDtdb.   The quantity is dominated by an annual term of 1.7 ms
     **     amplitude.
     **
     **  3) TDB is essentially the same as Teph, the time argument for the
@@ -920,8 +922,8 @@ def tdb_tt(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauTdbtt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-        check_return(ret, 'iauTdbtt')
+        ret = eraTdbtt(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+        check_return(ret, 'eraTdbtt')
 
     return out1, out2
 
@@ -933,7 +935,7 @@ def tt_tdb(
     np.ndarray[double, ndim=1] in2,
     np.ndarray[double, ndim=1] dt):
     """
-    int iauTttdb(double tt1, double tt2, double dtr, double *tdb1, double *tdb2)
+    int eraTttdb(double tt1, double tt2, double dtr, double *tdb1, double *tdb2)
 
     **  Given:
     **     tt1,tt2    double    TT as a 2-part Julian Date
@@ -956,8 +958,8 @@ def tt_tdb(
     **     GR transformation between TT and TCB.  It is dependent upon the
     **     adopted solar-system ephemeris, and can be obtained by numerical
     **     integration, by interrogating a precomputed time ephemeris or by
-    **     evaluating a model such as that implemented in the SOFA function
-    **     iauDtdb.   The quantity is dominated by an annual term of 1.7 ms
+    **     evaluating a model such as that implemented in the ERFA function
+    **     eraDtdb.   The quantity is dominated by an annual term of 1.7 ms
     **     amplitude.
     **
     **  3) TDB is essentially the same as Teph, the time argument for the JPL
@@ -970,8 +972,8 @@ def tt_tdb(
     cdef np.ndarray[double, ndim=1] out2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        ret = iauTttdb(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-        check_return(ret, 'iauTttdb')
+        ret = eraTttdb(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+        check_return(ret, 'eraTttdb')
 
     return out1, out2
 
@@ -983,7 +985,7 @@ def ut1_utc(
     np.ndarray[double, ndim=1] in2,
     np.ndarray[double, ndim=1] dt):
     """
-    int iauUt1utc(double ut11, double ut12, double dut1, double *utc1, double *utc2)
+    int eraUt1utc(double ut11, double ut12, double dut1, double *utc1, double *utc2)
 
     **  Given:
     **     ut11,ut12  double   UT1 as a 2-part Julian Date (Note 1)
@@ -1016,13 +1018,13 @@ def ut1_utc(
     **     function is that the returned quasi JD day UTC1+UTC2 represents
     **     UTC days whether the length is 86399, 86400 or 86401 SI seconds.
     **
-    **  4) The function iauD2dtf can be used to transform the UTC quasi-JD
+    **  4) The function eraD2dtf can be used to transform the UTC quasi-JD
     **     into calendar date and clock time, including UTC leap second
     **     handling.
     **
     **  5) The warning status "dubious year" flags UTCs that predate the
     **     introduction of the time scale and that are too far in the future
-    **     to be trusted.  See iauDat for further details.
+    **     to be trusted.  See eraDat for further details.
     """
     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
     cdef unsigned n = in1.shape[0]
@@ -1034,8 +1036,8 @@ def ut1_utc(
     errs = {-1: 'unacceptable date'}
 
     for i in range(n):
-        ret = iauUt1utc(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-        check_return(ret, 'iauUt1utc', warns, errs)
+        ret = eraUt1utc(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+        check_return(ret, 'eraUt1utc', warns, errs)
 
     return out1, out2
 
@@ -1047,7 +1049,7 @@ def utc_ut1(
     np.ndarray[double, ndim=1] in2,
     np.ndarray[double, ndim=1] dt):
     """
-    int iauUtcut1(double utc1, double utc2, double dut1, double *ut11, double *ut12)
+    int eraUtcut1(double utc1, double utc2, double dut1, double *ut11, double *ut12)
 
     **  Given:
     **     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)
@@ -1074,9 +1076,9 @@ def utc_ut1(
     **
     **  3) The warning status "dubious year" flags UTCs that predate the
     **     introduction of the time scale and that are too far in the future
-    **     to be trusted.  See iauDat  for further details.
+    **     to be trusted.  See eraDat  for further details.
     **
-    **  4) The function iauDtf2d  converts from calendar date and time of
+    **  4) The function eraDtf2d  converts from calendar date and time of
     **     day into 2-part Julian Date, and in the case of UTC implements
     **     the leap-second-ambiguity convention described above.
     **
@@ -1090,7 +1092,7 @@ def utc_ut1(
     **
     **  7) The warning status "dubious year" flags UTCs that predate the
     **     introduction of the time scale and that are too far in the future
-    **     to be trusted.  See iauDat for further details.
+    **     to be trusted.  See eraDat for further details.
     """
     assert in1.shape[0] == in2.shape[0] == dt.shape[0]
     cdef unsigned n = in1.shape[0]
@@ -1102,8 +1104,8 @@ def utc_ut1(
     errs = {-1: 'unacceptable date'}
 
     for i in range(n):
-        ret = iauUtcut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
-        check_return(ret, 'iauUtcut1', warns, errs)
+        ret = eraUtcut1(in1[i], in2[i], dt[i], &out1[i], &out2[i])
+        check_return(ret, 'eraUtcut1', warns, errs)
 
     return out1, out2
 
@@ -1116,7 +1118,7 @@ def d_tdb_tt(np.ndarray[double, ndim=1] in1,
              elong, u, v):
     """
     compute DTR = TDB-TT
-    double iauDtdb(double date1, double date2, double ut,
+    double eraDtdb(double date1, double date2, double ut,
                    double elong, double u, double v)
 
     **  Given:
@@ -1225,13 +1227,13 @@ def d_tdb_tt(np.ndarray[double, ndim=1] in1,
     cdef double c_v = v
 
     for i in range(n):
-        out[i] = iauDtdb(in1[i], in2[i], ut[i], c_elong, c_u, c_v)
+        out[i] = eraDtdb(in1[i], in2[i], ut[i], c_elong, c_u, c_v)
     return out
 
 
-def iau_af2a(sign, ideg, iamin, asec):
+def era_af2a(sign, ideg, iamin, asec):
     """
-    int iauAf2a(char s, int ideg, int iamin, double asec, double *rad)
+    int eraAf2a(char s, int ideg, int iamin, double asec, double *rad)
 
     **  Given:
     **     s         char    sign:  '-' = negative, otherwise positive
@@ -1265,15 +1267,15 @@ def iau_af2a(sign, ideg, iamin, asec):
              2: 'iamin outside range 0-59',
              3: 'asec outside range 0-59.999...'}
 
-    ret = iauAf2a(s, ideg, iamin, asec, &rad)
-    check_return(ret, 'iauAf2a', warns)
+    ret = eraAf2a(s, ideg, iamin, asec, &rad)
+    check_return(ret, 'eraAf2a', warns)
 
     return rad
 
-def iau_gd2gc(n, elong, phi, height):
+def era_gd2gc(n, elong, phi, height):
     """
     Wrap
-    int iauGd2gc(int n, double elong, double phi, double height, double xyz[3])
+    int eraGd2gc(int n, double elong, double phi, double height, double xyz[3])
 
     **  Given:
     **     n       int        ellipsoid identifier (Note 1)
@@ -1300,8 +1302,8 @@ def iau_gd2gc(n, elong, phi, height):
     **        2     GRS80
     **        3     WGS72
     **
-    **     The n value has no significance outside the SOFA software.  For
-    **     convenience, symbols WGS84 etc. are defined in sofam.h.
+    **     The n value has no significance outside the ERFA software.  For
+    **     convenience, symbols WGS84 etc. are defined in erfam.h.
     **
     **  2) The height (height, given) and the geocentric vector (xyz,
     **     returned) are in meters.
@@ -1312,15 +1314,15 @@ def iau_gd2gc(n, elong, phi, height):
     **     lead to arithmetic exceptions.  In all error cases, xyz is set
     **     to zeros.
     **
-    **  4) The inverse transformation is performed in the function iauGc2gd.
+    **  4) The inverse transformation is performed in the function eraGc2gd.
     """
     cdef np.ndarray[double, ndim=1] xyz = np.empty(3, dtype=np.double)
 
     errs = {-1: 'illegal identifier',
              -2: 'illegal case'}
 
-    ret = iauGd2gc(n, elong, phi, height, &xyz[0])
-    check_return(ret, 'iauGd2gc', errors=errs)
+    ret = eraGd2gc(n, elong, phi, height, &xyz[0])
+    check_return(ret, 'eraGd2gc', errors=errs)
 
     return xyz
 
@@ -1329,7 +1331,7 @@ def iau_gd2gc(n, elong, phi, height):
 @cython.boundscheck(False)
 def jd_julian_epoch(np.ndarray[double, ndim=1] jd1,
                     np.ndarray[double, ndim=1] jd2):
-    """ Wrap double iauEpj(double dj1, double dj2)
+    """ Wrap double eraEpj(double dj1, double dj2)
     **  Julian Date to Julian Epoch.
 
     **  Given:
@@ -1340,7 +1342,7 @@ def jd_julian_epoch(np.ndarray[double, ndim=1] jd1,
     **
     **  Note:
     **
-    **     The Julian Date is supplied in two pieces, in the usual SOFA
+    **     The Julian Date is supplied in two pieces, in the usual ERFA
     **     manner, which is designed to preserve time resolution.  The
     **     Julian Date is available as a single number by adding dj1 and
     **     dj2.  The maximum resolution is achieved if dj1 is 2451545D0
@@ -1352,14 +1354,14 @@ def jd_julian_epoch(np.ndarray[double, ndim=1] jd1,
     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        epd[i] = iauEpj(jd1[i], jd2[i])
+        epd[i] = eraEpj(jd1[i], jd2[i])
     return epd
 
 
 @cython.wraparound(False)
 @cython.boundscheck(False)
 def julian_epoch_jd(np.ndarray[double, ndim=1] epd):
-    """ Wrap void iauEpj2jd(double epj, double *djm0, double *djm)
+    """ Wrap void eraEpj2jd(double epj, double *djm0, double *djm)
     **  Julian Epoch to Julian Date.
     **  Given:
     **     epj      double    Julian Epoch (e.g. 1996.8D0)
@@ -1374,7 +1376,7 @@ def julian_epoch_jd(np.ndarray[double, ndim=1] epd):
     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        iauEpj2jd(epd[i], &jd1[i], &jd2[i])
+        eraEpj2jd(epd[i], &jd1[i], &jd2[i])
     return jd1, jd2
 
 
@@ -1382,7 +1384,7 @@ def julian_epoch_jd(np.ndarray[double, ndim=1] epd):
 @cython.boundscheck(False)
 def jd_besselian_epoch(np.ndarray[double, ndim=1] jd1,
                        np.ndarray[double, ndim=1] jd2):
-    """ Wrap double iauEpb(double dj1, double dj2)
+    """ Wrap double eraEpb(double dj1, double dj2)
     **  Julian Date to Besselian Epoch.
 
     **  Given:
@@ -1393,7 +1395,7 @@ def jd_besselian_epoch(np.ndarray[double, ndim=1] jd1,
     **
     **  Note:
     **
-    **     The Julian Date is supplied in two pieces, in the usual SOFA
+    **     The Julian Date is supplied in two pieces, in the usual ERFA
     **     manner, which is designed to preserve time resolution.  The
     **     Julian Date is available as a single number by adding dj1 and
     **     dj2.  The maximum resolution is achieved if dj1 is 2451545D0
@@ -1405,14 +1407,14 @@ def jd_besselian_epoch(np.ndarray[double, ndim=1] jd1,
     cdef np.ndarray[double, ndim=1] epd = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        epd[i] = iauEpb(jd1[i], jd2[i])
+        epd[i] = eraEpb(jd1[i], jd2[i])
     return epd
 
 
 @cython.wraparound(False)
 @cython.boundscheck(False)
 def besselian_epoch_jd(np.ndarray[double, ndim=1] epd):
-    """ Wrap void iauEpb2jd(double epj, double *djm0, double *djm)
+    """ Wrap void eraEpb2jd(double epj, double *djm0, double *djm)
     **  Besselian Epoch to Julian Date.
 
     **  Given:
@@ -1424,7 +1426,7 @@ def besselian_epoch_jd(np.ndarray[double, ndim=1] epd):
     **
     **  Note:
     **
-    **     The Julian Date is returned in two pieces, in the usual SOFA
+    **     The Julian Date is returned in two pieces, in the usual ERFA
     **     manner, which is designed to preserve time resolution.  The
     **     Julian Date is available as a single number by adding djm0 and
     **     djm.
@@ -1435,5 +1437,5 @@ def besselian_epoch_jd(np.ndarray[double, ndim=1] epd):
     cdef np.ndarray[double, ndim=1] jd2 = np.empty(n, dtype=np.double)
 
     for i in range(n):
-        iauEpb2jd(epd[i], &jd1[i], &jd2[i])
+        eraEpb2jd(epd[i], &jd1[i], &jd2[i])
     return jd1, jd2
diff --git a/astropy/time/setup_package.py b/astropy/time/setup_package.py
index 662b9fd..2f7a6fe 100644
--- a/astropy/time/setup_package.py
+++ b/astropy/time/setup_package.py
@@ -1,4 +1,5 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
 import os
 from distutils.extension import Extension
 
@@ -8,18 +9,18 @@ TIMEROOT = os.path.relpath(os.path.dirname(__file__))
 
 
 def get_extensions():
-    sources = [os.path.join(TIMEROOT, "sofa_time.pyx")]
+    sources = [os.path.join(TIMEROOT, "erfa_time.pyx")]
     include_dirs = ['numpy']
     libraries = []
 
-    if setup_helpers.use_system_library('sofa'):
-        libraries.append('sofa_c')
+    if setup_helpers.use_system_library('erfa'):
+        libraries.append('erfa')
     else:
-        sources.append("cextern/sofa/sofa.c")
-        include_dirs.append('cextern/sofa')
+        sources.append("cextern/erfa/erfa.c")
+        include_dirs.append('cextern/erfa')
 
     time_ext = Extension(
-        name="astropy.time.sofa_time",
+        name="astropy.time.erfa_time",
         sources=sources,
         include_dirs=include_dirs,
         libraries=libraries,
@@ -27,5 +28,9 @@ def get_extensions():
 
     return [time_ext]
 
+
 def get_external_libraries():
-    return ['sofa']
+    return ['erfa']
+
+def requires_2to3():
+    return False
diff --git a/astropy/time/tests/test_basic.py b/astropy/time/tests/test_basic.py
index ef9b46e..9a7e993 100644
--- a/astropy/time/tests/test_basic.py
+++ b/astropy/time/tests/test_basic.py
@@ -1,15 +1,24 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+import copy
 import functools
+import sys
+
+from datetime import datetime
 
 import numpy as np
 
 from ...tests.helper import pytest
-from .. import Time, ScaleValueError, sofa_time
+from .. import Time, ScaleValueError, erfa_time
 
-allclose_jd = functools.partial(np.allclose, rtol=1e-15, atol=0)
-allclose_jd2 = functools.partial(np.allclose, rtol=1e-15, atol=1e-11)  # 1 microsec atol
-allclose_sec = functools.partial(np.allclose, rtol=1e-15, atol=1e-9)  # 1 nanosec atol
-allclose_year = functools.partial(np.allclose, rtol=1e-15, atol=0)  # 60 microsec at current epoch
+
+allclose_jd = functools.partial(np.allclose, rtol=2. ** -52, atol=0)
+allclose_jd2 = functools.partial(np.allclose, rtol=2. ** -52,
+                                 atol=2. ** -52)  # 20 ps atol
+allclose_sec = functools.partial(np.allclose, rtol=2. ** -52,
+                                 atol=2. ** -52 * 24 * 3600)  # 20 ps atol
+allclose_year = functools.partial(np.allclose, rtol=2. ** -52,
+                                  atol=0.)  # 14 microsec at current epoch
 
 
 class TestBasic():
@@ -19,14 +28,15 @@ class TestBasic():
         times = ['1999-01-01 00:00:00.123456789', '2010-01-01 00:00:00']
         t = Time(times, format='iso', scale='utc')
         assert (repr(t) == "<Time object: scale='utc' format='iso' "
-                "vals=['1999-01-01 00:00:00.123' '2010-01-01 00:00:00.000']>")
+                "value=['1999-01-01 00:00:00.123' '2010-01-01 00:00:00.000']>")
         assert allclose_jd(t.jd1, np.array([2451179.5, 2455197.5]))
-        assert allclose_jd2(t.jd2, np.array([1.42889802e-06, 0.00000000e+00]))
+        assert allclose_jd2(t.jd2, np.array([1.4288980208333335e-06,
+                                             0.00000000e+00]))
 
         # Set scale to TAI
         t = t.tai
         assert (repr(t) == "<Time object: scale='tai' format='iso' "
-                "vals=['1999-01-01 00:00:32.123' '2010-01-01 00:00:34.000']>")
+                "value=['1999-01-01 00:00:32.123' '2010-01-01 00:00:34.000']>")
         assert allclose_jd(t.jd1, np.array([2451179.5, 2455197.5]))
         assert allclose_jd2(t.jd2, np.array([0.00037179926839122024, 0.00039351851851851852]))
 
@@ -34,13 +44,12 @@ class TestBasic():
         # (internal JD1 and JD1 are now with respect to TT scale)"""
 
         assert (repr(t.tt) == "<Time object: scale='tt' format='iso' "
-                "vals=['1999-01-01 00:01:04.307' '2010-01-01 00:01:06.184']>")
+                "value=['1999-01-01 00:01:04.307' '2010-01-01 00:01:06.184']>")
 
         # Get the representation of the ``Time`` object in a particular format
         # (in this case seconds since 1998.0).  This returns either a scalar or
         # array, depending on whether the input was a scalar or array"""
 
-        print t.cxcsec
         assert allclose_sec(t.cxcsec, np.array([31536064.307456788, 378691266.18400002]))
 
     def test_copy_time(self):
@@ -63,9 +72,40 @@ class TestBasic():
 
         # Include initializers
         t2 = Time(t, format='iso', scale='tai', precision=1)
-        assert t2.val == '2010-01-01 00:00:34.0'
+        assert t2.value == '2010-01-01 00:00:34.0'
         t2 = Time(t, format='iso', scale='tai', out_subfmt='date')
-        assert t2.val == '2010-01-01'
+        assert t2.value == '2010-01-01'
+
+    def test_getitem(self):
+        """Test that Time objects holding arrays are properly subscriptable,
+        set isscalar as appropriate, and also subscript delta_ut1_utc, etc."""
+
+        mjd = np.arange(50000, 50010)
+        t = Time(mjd, format='mjd', scale='utc')
+        t1 = t[3]
+        assert t1.isscalar is True
+        assert np.all(t1._time.jd1 == np.array([t._time.jd1[3]]))
+        t1a = Time(mjd[3], format='mjd', scale='utc')
+        assert t1a.isscalar is True
+        assert np.all(t1._time.jd1 == t1a._time.jd1)
+        t1b = Time(t[3])
+        assert t1b.isscalar is True
+        assert np.all(t1._time.jd1 == t1b._time.jd1)
+        t2 = t[4:6]
+        assert t2.isscalar is False
+        assert np.all(t2._time.jd1 == t._time.jd1[4:6])
+        t2a = Time(t[4:6])
+        assert t2a.isscalar is False
+        assert np.all(t2a._time.jd1 == t._time.jd1[4:6])
+        t2b = Time([t[4], t[5]])
+        assert t2b.isscalar is False
+        assert np.all(t2b._time.jd1 == t._time.jd1[4:6])
+        t2c = Time((t[4], t[5]))
+        assert t2c.isscalar is False
+        assert np.all(t2c._time.jd1 == t._time.jd1[4:6])
+        t.delta_tdb_tt = np.arange(len(t))  # Explicitly set (not testing .tdb)
+        t3 = t[4:6]
+        assert np.all(t3._delta_tdb_tt == t._delta_tdb_tt[4:6])
 
     def test_properties(self):
         """Use properties to convert scales and formats.  Note that the UT1 to
@@ -84,6 +124,8 @@ class TestBasic():
         assert t.tcg.isot == '2010-01-01T00:01:06.910'
         assert allclose_sec(t.unix, 1262304000.0)
         assert allclose_sec(t.cxcsec, 378691266.184)
+        assert allclose_sec(t.gps, 946339215.0)
+        assert t.datetime == datetime(2010, 1, 1)
 
     def test_precision(self):
         """Set the output precision which is used for some formats.  This is
@@ -133,6 +175,7 @@ class TestBasic():
         """Create a time object using each defined format"""
         Time(100.0, format='cxcsec')
         Time(100.0, format='unix')
+        Time(100.0, format='gps')
         Time(1950.0, format='byear', scale='tai')
         Time(2000.0, format='jyear', scale='tai')
         Time('B1950.0', format='byear_str', scale='tai')
@@ -142,6 +185,29 @@ class TestBasic():
         Time(2400000.5, 51544.0333981, format='jd', scale='tai')
         Time(0.0, 51544.0333981, format='mjd', scale='tai')
         Time('2000:001:12:23:34.0', format='yday', scale='tai')
+        dt = datetime(2000, 1, 2, 3, 4, 5, 123456)
+        Time(dt, format='datetime', scale='tai')
+        Time([dt, dt], format='datetime', scale='tai')
+
+    def test_datetime(self):
+        """
+        Test datetime format, including guessing the format from the input type
+        by not providing the format keyword to Time.
+        """
+        dt = datetime(2000, 1, 2, 3, 4, 5, 123456)
+        dt2 = datetime(2001, 1, 1)
+        t = Time(dt, scale='utc', precision=9)
+        assert t.iso == '2000-01-02 03:04:05.123456000'
+        assert t.datetime == dt
+        assert t.value == dt
+        t2 = Time(t.iso, scale='utc')
+        assert t2.datetime == dt
+
+        t = Time([dt, dt2], scale='utc')
+        assert np.all(t.value == [dt, dt2])
+
+        t = Time('2000-01-01 01:01:01.123456789', scale='tai')
+        assert t.datetime == datetime(2000, 1, 1, 1, 1, 1, 123457)
 
     def test_epoch_transform(self):
         """Besselian and julian epoch transforms"""
@@ -198,6 +264,37 @@ class TestBasic():
         t1 = Time('2012-07-01 00:00:00', scale='utc')
         assert allclose_sec((t1 - t0).sec, 2.0)
 
+    def test_init_from_time_objects(self):
+        """Initialize from one or more Time objects"""
+        t1 = Time('2007:001', scale='tai')
+        t2 = Time(['2007-01-02', '2007-01-03'], scale='utc')
+        # Init from a list of Time objects without an explicit scale
+        t3 = Time([t1, t2])
+        # Test that init appropriately combines a scalar (t1) and list (t2)
+        # and that scale and format are same as first element.
+        assert len(t3) == 3
+        assert t3.scale == t1.scale
+        assert t3.format == t1.format  # t1 format is yday
+        assert np.all(t3.value == np.concatenate([[t1.yday], t2.tai.yday]))
+
+        # Init from a single Time object without a scale
+        t3 = Time(t1)
+        assert t3.isscalar
+        assert t3.scale == t1.scale
+        assert t3.format == t1.format
+        assert np.all(t3.value == t1.value)
+
+        # Init from a single Time object with scale specified
+        t3 = Time(t1, scale='utc')
+        assert t3.scale == 'utc'
+        assert np.all(t3.value == t1.utc.value)
+
+        # Init from a list of Time object with scale specified
+        t3 = Time([t1, t2], scale='tt')
+        assert t3.scale == 'tt'
+        assert t3.format == t1.format  # yday
+        assert np.all(t3.value == np.concatenate([[t1.tt.yday], t2.tt.yday]))
+
 
 class TestVal2():
     """Tests related to val2"""
@@ -238,7 +335,7 @@ class TestSubFormat():
         times = ['2000-01-01 01:01',
                  '2000-01-01 01:01:01', '2000-01-01 01:01:01.123']
         t = Time(times, format='iso', scale='tai',
-                     in_subfmt='date_*')
+                 in_subfmt='date_*')
         assert np.all(t.iso == np.array(['2000-01-01 01:01:00.000',
                                          '2000-01-01 01:01:01.000',
                                          '2000-01-01 01:01:01.123']))
@@ -247,13 +344,13 @@ class TestSubFormat():
         """Failed format matching"""
         with pytest.raises(ValueError):
             Time('2000-01-01 01:01', format='iso', scale='tai',
-                     in_subfmt='date')
+                 in_subfmt='date')
 
     def test_bad_input_subformat(self):
         """Non-existent input subformat"""
         with pytest.raises(ValueError):
             Time('2000-01-01 01:01', format='iso', scale='tai',
-                     in_subfmt='doesnt exist')
+                 in_subfmt='doesnt exist')
 
     def test_output_subformat(self):
         """Input subformat selection"""
@@ -261,7 +358,7 @@ class TestSubFormat():
         times = ['2000-01-01', '2000-01-01 01:01',
                  '2000-01-01 01:01:01', '2000-01-01 01:01:01.123']
         t = Time(times, format='iso', scale='tai',
-                     out_subfmt='date_hm')
+                 out_subfmt='date_hm')
         assert np.all(t.iso == np.array(['2000-01-01 00:00',
                                          '2000-01-01 01:01',
                                          '2000-01-01 01:01',
@@ -287,6 +384,8 @@ class TestSubFormat():
         assert t.scale == 'utc'
         t = Time(100.0, format='unix', scale='tai')
         assert t.scale == 'tai'
+        t = Time(100.0, format='gps', scale='utc')
+        assert t.scale == 'utc'
 
         # Check that bad scale is caught when format is specified
         with pytest.raises(ScaleValueError):
@@ -307,7 +406,7 @@ class TestSubFormat():
 
         # Create new time object from this one and change scale, format
         t2 = Time(t, scale='tt', format='iso')
-        assert t2.val == '1998-01-01 00:00:00.000'
+        assert t2.value == '1998-01-01 00:00:00.000'
 
         # Value take from Chandra.Time.DateTime('2010:001:00:00:00').secs
         t = Time(378691266.184, format='cxcsec', scale='utc')
@@ -316,6 +415,12 @@ class TestSubFormat():
         assert allclose_sec(t.cxcsec, 378691266.184)
         assert allclose_sec(t.tt.cxcsec, 378691266.184)
 
+        # Value from:
+        #   d = datetime.datetime(2000, 1, 1)
+        #   matplotlib.dates.date2num(d)
+        t = Time('2000-01-01 00:00:00', scale='tai')
+        assert np.allclose(t.plot_date, 730120.0, atol=1e-5, rtol=0)
+
         # Round trip through epoch time
         for scale in ('utc', 'tt'):
             t = Time('2000:001', scale=scale)
@@ -333,20 +438,20 @@ class TestSubFormat():
 
 
 class TestSofaErrors():
-    """Test that sofa_time.pyx handles sofa status return values correctly"""
+    """Test that erfa_time.pyx handles erfa status return values correctly"""
 
     def test_bad_time(self):
         iy = np.array([2000], dtype=np.intc)
-        im = np.array([2000], dtype=np.intc) # bad month
-        id = np.array([2000], dtype=np.intc) # bad day
+        im = np.array([2000], dtype=np.intc)  # bad month
+        id = np.array([2000], dtype=np.intc)  # bad day
         djm0 = np.array([0], dtype=np.double)
         djm = np.array([0], dtype=np.double)
         with pytest.raises(ValueError):  # bad month, fatal error
-            sofa_time.cal2jd(iy, im, id, djm0, djm)
+            erfa_time.cal2jd(iy, im, id, djm0, djm)
 
         # Set month to a good value so now the bad day just gives a warning
         im[0] = 2
-        sofa_time.cal2jd(iy, im, id, djm0, djm)
+        erfa_time.cal2jd(iy, im, id, djm0, djm)
         assert allclose_jd(djm0, [2400000.5])
         assert allclose_jd(djm, [53574.])
 
@@ -357,21 +462,14 @@ class TestSofaErrors():
 class TestCopyReplicate():
     """Test issues related to copying and replicating data"""
 
-    def test_mutable_input(self):
-        """By default if JDs are provided with copy=False then internals are
-        mutable."""
+    def test_immutable_input(self):
+        """Internals are never mutable."""
         jds = np.array([2450000.5], dtype=np.double)
         t = Time(jds, format='jd', scale='tai')
         assert allclose_jd(t.jd, jds)
-        jds[0] = 2459009.5
-        assert allclose_jd(t.jd, jds)
-
-        t = Time(jds, format='jd', scale='tai', copy=True)
-        assert allclose_jd(t.jd, jds)
         jds[0] = 2458654
         assert not allclose_jd(t.jd, jds)
 
-        # MJD does not suffer from this mutability
         mjds = np.array([50000.0], dtype=np.double)
         t = Time(mjds, format='mjd', scale='tai')
         assert allclose_jd(t.jd, [2450000.5])
@@ -404,12 +502,46 @@ class TestCopyReplicate():
         assert t.yday != t2.yday
         assert t.yday == t_yday  # prove that it did not change
 
-def test_python_builtin_copy():
-    import copy
 
+def test_python_builtin_copy():
     t = Time('2000:001', format='yday', scale='tai')
     t2 = copy.copy(t)
     t3 = copy.deepcopy(t)
 
     assert t.jd == t2.jd
     assert t.jd == t3.jd
+
+
+def test_now():
+    """
+    Tests creating a Time object with the `now` class method.
+    """
+
+    now = datetime.utcnow()
+    t = Time.now()
+
+    assert t.format == 'datetime'
+    assert t.scale == 'utc'
+
+    dt = t.datetime - now  # a datetime.timedelta object
+
+    # this gives a .1 second margin between the `utcnow` call and the `Time`
+    # initializer, which is really way more generous than necessary - typical
+    # times are more like microseconds.  But it seems safer in case some
+    # platforms have slow clock calls or something.
+
+    version_info = sys.version_info
+    # py < 2.7 and py3 < 3.2 doesn't have `total_seconds`
+    if ((version_info[0] == 2 and version_info[1] < 7) or
+        (version_info[0] == 3 and version_info[1] < 2) or
+            version_info[0] < 2):
+        total_secs = lambda td: (td.microseconds + (
+            td.seconds + td.days * 24 * 3600) * 10 ** 6) / 10 ** 6.
+    else:
+        total_secs = lambda td: td.total_seconds()
+    assert total_secs(dt) < 0.1
+
+
+def test_dir():
+    t = Time('2000:001', format='yday', scale='tai')
+    assert 'utc' in dir(t)
diff --git a/astropy/time/tests/test_comparisons.py b/astropy/time/tests/test_comparisons.py
new file mode 100644
index 0000000..39e0d3b
--- /dev/null
+++ b/astropy/time/tests/test_comparisons.py
@@ -0,0 +1,50 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+import numpy as np
+
+from ...tests.helper import pytest
+from .. import Time, TimeDelta, OperandTypeError
+
+
+class TestTimeComparisons():
+    """Test Comparisons of Time and TimeDelta classes"""
+
+    def setup(self):
+        self.t1 = Time(np.arange(49995, 50005), format='mjd', scale='utc')
+        self.t2 = Time(np.arange(49000, 51000, 200), format='mjd', scale='utc')
+
+    def test_time(self):
+        t1_lt_t2 = self.t1 < self.t2
+        assert np.all(t1_lt_t2 == np.array([False, False, False, False, False,
+                                            False, True, True, True, True]))
+        t1_ge_t2 = self.t1 >= self.t2
+        assert np.all(t1_ge_t2 != t1_lt_t2)
+
+        t1_le_t2 = self.t1 <= self.t2
+        assert np.all(t1_le_t2 == np.array([False, False, False, False, False,
+                                            True, True, True, True, True]))
+        t1_gt_t2 = self.t1 > self.t2
+        assert np.all(t1_gt_t2 != t1_le_t2)
+
+        t1_eq_t2 = self.t1 == self.t2
+        assert np.all(t1_eq_t2 == np.array([False, False, False, False, False,
+                                            True, False, False, False, False]))
+        t1_ne_t2 = self.t1 != self.t2
+        assert np.all(t1_ne_t2 != t1_eq_t2)
+
+        t1_0_gt_t2_0 = self.t1[0] > self.t2[0]
+        assert t1_0_gt_t2_0 is True
+        t1_0_gt_t2 = self.t1[0] > self.t2
+        assert np.all(t1_0_gt_t2 == np.array([True, True, True, True, True,
+                                              False, False, False, False,
+                                              False]))
+        t1_gt_t2_0 = self.t1 > self.t2[0]
+        assert np.all(t1_gt_t2_0 == np.array([True, True, True, True, True,
+                                              True, True, True, True, True]))
+
+    def test_timedelta(self):
+        dt = self.t2 - self.t1
+        with pytest.raises(OperandTypeError):
+            self.t1 > dt
+        dt_gt_td0 = dt > TimeDelta(0., format='sec')
+        assert np.all(dt_gt_td0 == np.array([False, False, False, False, False,
+                                             False, True, True, True, True]))
diff --git a/astropy/time/tests/test_delta.py b/astropy/time/tests/test_delta.py
index d5adcaf..82cea9b 100644
--- a/astropy/time/tests/test_delta.py
+++ b/astropy/time/tests/test_delta.py
@@ -6,8 +6,11 @@ import numpy as np
 from ...tests.helper import pytest
 from .. import Time, TimeDelta, OperandTypeError
 
-allclose_jd = functools.partial(np.allclose, rtol=1e-15, atol=0)
-allclose_sec = functools.partial(np.allclose, rtol=1e-15, atol=1e-9)  # 1 nanosec atol
+allclose_jd = functools.partial(np.allclose, rtol=2. ** -52, atol=0)
+allclose_jd2 = functools.partial(np.allclose, rtol=2. ** -52,
+                                 atol=2. ** -52)  # 20 ps atol
+allclose_sec = functools.partial(np.allclose, rtol=2. ** -52,
+                                 atol=2. ** -52 * 24 * 3600)  # 20 ps atol
 
 
 class TestTimeDelta():
@@ -17,12 +20,13 @@ class TestTimeDelta():
         self.t = Time('2010-01-01', scale='utc')
         self.t2 = Time('2010-01-02 00:00:01', scale='utc')
         self.dt = TimeDelta(100.0, format='sec')
+        self.dt_array = TimeDelta(np.arange(100, 1000, 100), format='sec')
 
     def test_sub(self):
         # time - time
         dt = self.t2 - self.t
         assert (repr(dt).startswith("<TimeDelta object: scale='tai' "
-                                    "format='jd' vals=1.00001157407"))
+                                    "format='jd' value=1.00001157407"))
         assert allclose_jd(dt.jd, 86401.0 / 86400.0)
         assert allclose_sec(dt.sec, 86401.0)
 
@@ -57,6 +61,46 @@ class TestTimeDelta():
         t2 = dt + self.t
         assert t2.iso == self.t2.iso
 
+    def test_add_vector(self):
+        t = Time(0.0, format='mjd', scale='utc')
+        t2 = Time([0.0, 1.0], format='mjd', scale='utc')
+        dt = TimeDelta(100.0, format='jd')
+        dt2 = TimeDelta([100.0, 200.0], format='jd')
+
+        out = t + dt2
+        assert allclose_jd(out.mjd, [100.0, 200.0])
+
+        out = t2 + dt
+        assert allclose_jd(out.mjd, [100.0, 101.0])
+
+        out = dt + dt2
+        assert allclose_jd(out.jd, [200.0, 300.0])
+
+        # Reverse the argument order
+        out = dt2 + t
+        assert allclose_jd(out.mjd, [100.0, 200.0])
+
+        out = dt + t2
+        assert allclose_jd(out.mjd, [100.0, 101.0])
+
+        out = dt2 + dt
+        assert allclose_jd(out.jd, [200.0, 300.0])
+
+    def test_sub_vector(self):
+        t = Time(0.0, format='mjd', scale='utc')
+        t2 = Time([0.0, 1.0], format='mjd', scale='utc')
+        dt = TimeDelta(100.0, format='jd')
+        dt2 = TimeDelta([100.0, 200.0], format='jd')
+
+        out = t - dt2
+        assert allclose_jd(out.mjd, [-100.0, -200.0])
+
+        out = t2 - dt
+        assert allclose_jd(out.mjd, [-100.0, -99.0])
+
+        out = dt - dt2
+        assert allclose_jd(out.jd, [0.0, -100.0])
+
     def test_copy_timedelta(self):
         """Test copying the values of a TimeDelta object by passing it into the
         Time initializer.
@@ -78,3 +122,27 @@ class TestTimeDelta():
         # Include initializers
         dt2 = TimeDelta(dt, format='sec')
         assert allclose_sec(dt2.val, 86400.0)
+
+    def test_neg_abs(self):
+        for dt in (self.dt, self.dt_array):
+            dt2 = -dt
+            assert np.all(dt2.jd == -dt.jd)
+            dt3 = abs(dt)
+            assert np.all(dt3.jd == dt.jd)
+            dt4 = abs(dt2)
+            assert np.all(dt4.jd == dt.jd)
+
+    def test_mul_div(self):
+        for dt in (self.dt, self.dt_array):
+            dt2 = dt + dt + dt
+            dt3 = 3. * dt
+            assert allclose_jd(dt2.jd, dt3.jd)
+            dt4 = dt3 / 3.
+            assert allclose_jd(dt4.jd, dt.jd)
+        dt5 = self.dt * np.arange(3)
+        assert dt5[0].jd == 0.
+        assert dt5[-1].jd == (self.dt + self.dt).jd
+        with pytest.raises(OperandTypeError):
+            self.dt * self.dt
+        with pytest.raises(OperandTypeError):
+            self.dt * self.t
diff --git a/astropy/time/tests/test_guess.py b/astropy/time/tests/test_guess.py
index bbcdd01..7a5d2d9 100644
--- a/astropy/time/tests/test_guess.py
+++ b/astropy/time/tests/test_guess.py
@@ -10,7 +10,7 @@ class TestGuess():
         times = ['1999-01-01 00:00:00.123456789', '2010-01-01 00:00:00']
         t = Time(times, scale='utc')
         assert (repr(t) == "<Time object: scale='utc' format='iso' "
-                "vals=['1999-01-01 00:00:00.123' '2010-01-01 00:00:00.000']>")
+                "value=['1999-01-01 00:00:00.123' '2010-01-01 00:00:00.000']>")
 
     def test_guess2(self):
         times = ['1999-01-01 00:00:00.123456789', '2010-01 00:00:00']
@@ -21,7 +21,7 @@ class TestGuess():
         times = ['1999:001:00:00:00.123456789', '2010:001']
         t = Time(times, scale='utc')
         assert (repr(t) == "<Time object: scale='utc' format='yday' "
-                "vals=['1999:001:00:00:00.123' '2010:001:00:00:00.000']>")
+                "value=['1999:001:00:00:00.123' '2010:001:00:00:00.000']>")
 
     def test_guess4(self):
         times = [10, 20]
diff --git a/astropy/time/tests/test_precision.py b/astropy/time/tests/test_precision.py
new file mode 100644
index 0000000..dfca9b9
--- /dev/null
+++ b/astropy/time/tests/test_precision.py
@@ -0,0 +1,112 @@
+import functools
+
+import numpy as np
+
+from ...tests.helper import pytest
+from .. import Time, TimeDelta
+
+allclose_jd = functools.partial(np.allclose, rtol=2. ** -52, atol=0)
+allclose_jd2 = functools.partial(np.allclose, rtol=2. ** -52,
+                                 atol=2. ** -52)  # 20 ps atol
+allclose_sec = functools.partial(np.allclose, rtol=2. ** -52,
+                                 atol=2. ** -52 * 24 * 3600)  # 20 ps atol
+
+
+dt_tiny = TimeDelta(2. ** -52, format='jd')
+
+
+def test_addition():
+    """Check that an addition at the limit of precision (2^-52) is seen"""
+    t = Time(2455555., 0.5, format='jd', scale='utc')
+
+    t_dt = t + dt_tiny
+    assert t_dt.jd1 == t.jd1 and t_dt.jd2 != t.jd2
+
+    # Check that the addition is exactly reversed by the corresponding subtraction
+    t2 = t_dt - dt_tiny
+    assert t2.jd1 == t.jd1 and t2.jd2 == t.jd2
+
+
+def test_mult_div():
+    """Test precision with multiply and divide"""
+    dt_small = 6 * dt_tiny
+    # pick a number that will leave remainder if divided by 6.
+    dt_big = TimeDelta(20000., format='jd')
+    dt_big_small_by_6 = (dt_big + dt_small) / 6.
+    dt_frac = dt_big_small_by_6 - TimeDelta(3333., format='jd')
+    assert allclose_jd2(dt_frac.jd2, 0.33333333333333354)
+
+
+def test_init_variations():
+    """Check that 3 ways of specifying a time + small offset are equivalent"""
+    dt_tiny_sec = dt_tiny.jd2 * 86400.
+    t1 = Time(1e11, format='cxcsec') + dt_tiny
+    t2 = Time(1e11, dt_tiny_sec, format='cxcsec')
+    t3 = Time(dt_tiny_sec, 1e11, format='cxcsec')
+    assert t1.jd1 == t2.jd1
+    assert t1.jd2 == t3.jd2
+    assert t1.jd1 == t2.jd1
+    assert t1.jd2 == t3.jd2
+
+
+def test_precision_exceeds_64bit():
+    """
+    Check that Time object really holds more precision than float64 by looking at the
+    (naively) summed 64-bit result and asserting equality at the bit level.
+    """
+    t1 = Time(1.23456789e11, format='cxcsec')
+    t2 = t1 + dt_tiny
+    assert t1.jd == t2.jd
+
+
+def test_through_scale_change():
+    """Check that precision holds through scale change (cxcsec is TT)"""
+    t0 = Time(1.0, format='cxcsec')
+    t1 = Time(1.23456789e11, format='cxcsec')
+    dt_tt = t1 - t0
+    dt_tai = t1.tai - t0.tai
+    assert allclose_jd(dt_tt.jd1, dt_tai.jd1)
+    assert allclose_jd2(dt_tt.jd2, dt_tai.jd2)
+
+
+def test_iso_init():
+    """Check when initializing from ISO date"""
+    t1 = Time('2000:001:00:00:00.00000001', scale='tai')
+    t2 = Time('3000:001:13:00:00.00000002', scale='tai')
+    dt = t2 - t1
+    assert allclose_jd2(dt.jd2, 13. / 24. + 1e-8 / 86400. - 1.0)
+
+
+def test_jd1_is_mult_of_half_or_one():
+    """
+    Check that jd1 is a multiple of 0.5 (note the difference from when Time is created
+    with a format like 'jd' or 'cxcsec', where jd1 is a multiple of 1.0).
+    """
+    t1 = Time('2000:001:00:00:00.00000001', scale='tai')
+    assert np.round(t1.jd1 * 2) == t1.jd1 * 2
+    t1 = Time(1.23456789, 12345678.90123456, format='jd', scale='tai')
+    assert np.round(t1.jd1) == t1.jd1
+
+
+ at pytest.mark.xfail
+def test_precision_neg():
+    """
+    Check precision when jd1 is negative.  Currently fails because ERFA routines use a
+    test like jd1 > jd2 to decide which component to update.  Should be
+    abs(jd1) > abs(jd2).
+    """
+    t1 = Time(-100000.123456, format='jd', scale='tt')
+    assert np.round(t1.jd1) == t1.jd1
+    t1_tai = t1.tai
+    assert np.round(t1_tai.jd1) == t1_tai.jd1
+
+
+def test_precision_epoch():
+    """
+    Check that input via epoch also has full precision, i.e., against
+    regression on https://github.com/astropy/astropy/pull/366
+    """
+    t_utc = Time(range(1980, 2001), format='jyear', scale='utc')
+    t_tai = Time(range(1980, 2001), format='jyear', scale='tai')
+    dt = t_utc - t_tai
+    assert allclose_sec(dt.sec, np.round(dt.sec))
diff --git a/astropy/time/tests/test_quantity_interaction.py b/astropy/time/tests/test_quantity_interaction.py
new file mode 100644
index 0000000..b0079d7
--- /dev/null
+++ b/astropy/time/tests/test_quantity_interaction.py
@@ -0,0 +1,155 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+import functools
+
+import numpy as np
+
+from ...tests.helper import pytest
+from .. import Time, TimeDelta, OperandTypeError
+from ... import units as u
+
+allclose_sec = functools.partial(np.allclose, rtol=2. ** -52,
+                                 atol=2. ** -52 * 24 * 3600)  # 20 ps atol
+
+
+class TestTimeQuantity():
+    """Test Interaction of Time with Quantities"""
+
+    def test_valid_quantity_input(self):
+        """Test Time formats that are allowed to take quantity input."""
+        q = 2450000.125*u.day
+        t1 = Time(q, format='jd', scale='utc')
+        assert t1.value == q.value
+        q2 = q.to(u.second)
+        t2 = Time(q2, format='jd', scale='utc')
+        assert t2.value == q.value == q2.to(u.day).value
+        q3 = q-2400000.5*u.day
+        t3 = Time(q3, format='mjd', scale='utc')
+        assert t3.value == q3.value
+        # test we can deal with two quantity arguments, with different units
+        qs = 24.*36.*u.second
+        t4 = Time(q3, qs, format='mjd', scale='utc')
+        assert t4.value == (q3+qs).to(u.day).value
+
+        qy = 1990.*u.yr
+        ty1 = Time(qy, format='jyear', scale='utc')
+        assert ty1.value == qy.value
+        ty2 = Time(qy.to(u.day), format='jyear', scale='utc')
+        assert ty2.value == qy.value
+        qy2 = 10.*u.yr
+        tcxc = Time(qy2, format='cxcsec')
+        assert tcxc.value == qy2.to(u.second).value
+        tgps = Time(qy2, format='gps')
+        assert tgps.value == qy2.to(u.second).value
+        tunix = Time(qy2, format='unix')
+        assert tunix.value == qy2.to(u.second).value
+        qd = 2000.*365.*u.day
+        tplt = Time(qd, format='plot_date', scale='utc')
+        assert tplt.value == qd.value
+
+    def test_invalid_quantity_input(self):
+        with pytest.raises(u.UnitsError):
+            Time(2450000.*u.m, format='jd', scale='utc')
+
+        with pytest.raises(u.UnitsError):
+            Time(2450000.*u.dimensionless_unscaled, format='jd', scale='utc')
+
+    def test_no_quantity_input_allowed(self):
+        """Time formats that are not allowed to take Quantity input."""
+        qy = 1990.*u.yr
+        for fmt in ('iso', 'yday', 'datetime', 'byear',
+                    'byear_str', 'jyear_str'):
+            with pytest.raises(ValueError):
+                Time(qy, format=fmt, scale='utc')
+
+    def test_valid_quantity_operations(self):
+        """Check that adding a time-valued quantity to a Time gives a Time"""
+        t0 = Time(100000., format='cxcsec')
+        q1 = 10.*u.second
+        t1 = t0 + q1
+        assert isinstance(t1, Time)
+        assert t1.value == t0.value+q1.to(u.second).value
+        q2 = 1.*u.day
+        t2 = t0 - q2
+        assert allclose_sec(t2.value, t0.value-q2.to(u.second).value)
+
+    def test_invalid_quantity_operations(self):
+        """Check that comparisons of Time with quantities does not work
+        (even for time-like, since we cannot compare Time to TimeDelta)"""
+        with pytest.raises(OperandTypeError):
+            Time(100000., format='cxcsec') > 10.*u.m
+        with pytest.raises(OperandTypeError):
+            Time(100000., format='cxcsec') > 10.*u.second
+
+
+class TestTimeDeltaQuantity():
+    """Test interaction of TimeDelta with Quantities"""
+    def test_valid_quantity_input(self):
+        """Test that TimeDelta can take quantity input."""
+        q = 500.25*u.day
+        dt1 = TimeDelta(q, format='jd')
+        assert dt1.value == q.value
+        dt2 = TimeDelta(q, format='sec')
+        assert dt2.value == q.to(u.second).value
+        dt3 = TimeDelta(q)
+        assert dt3.value == q.value
+
+    def test_invalid_quantity_input(self):
+        with pytest.raises(u.UnitsError):
+            TimeDelta(2450000.*u.m, format='jd', scale='utc')
+
+        with pytest.raises(u.UnitsError):
+            Time(2450000.*u.dimensionless_unscaled, format='jd', scale='utc')
+
+        with pytest.raises(OperandTypeError):
+            TimeDelta(100, format='sec') > 10.*u.m
+
+    def test_quantity_output(self):
+        q = 500.25*u.day
+        dt = TimeDelta(q)
+        assert dt.to(u.day) == q
+        assert dt.to(u.second).value == q.to(u.second).value
+        with pytest.raises(u.UnitsError):
+            dt.to(u.m)
+
+    def test_valid_quantity_operations1(self):
+        """Check adding/substracting/comparing a time-valued quantity works
+        with a TimeDelta.  Addition/subtraction should give TimeDelta"""
+        t0 = TimeDelta(106400., format='sec')
+        q1 = 10.*u.second
+        t1 = t0 + q1
+        assert isinstance(t1, TimeDelta)
+        assert t1.value == t0.value+q1.to(u.second).value
+        q2 = 1.*u.day
+        t2 = t0 - q2
+        assert allclose_sec(t2.value, t0.value-q2.to(u.second).value)
+        # now comparisons
+        assert t0 > q1
+        assert t0 < 1.*u.yr
+
+    def test_valid_quantity_operations2(self):
+        """Check that TimeDelta is treated as a quantity where possible."""
+        t0 = TimeDelta(100000., format='sec')
+        f = 1./t0
+        assert isinstance(f, u.Quantity)
+        assert f.unit == 1./u.day
+        g = 10.*u.m/u.second**2
+        v = t0 * g
+        assert isinstance(v, u.Quantity)
+        assert v.decompose().unit == u.m / u.second
+        q = np.log10(t0/u.second)
+        assert isinstance(q, u.Quantity)
+        assert q.value == np.log10(t0.sec)
+
+    @pytest.mark.xfail
+    def test_valid_quantity_operations3(self):
+        """These should work too, but do not yet -- see #1455"""
+        t0 = TimeDelta(100000., format='sec')
+        s = 1.*u.m
+        v = s/t0
+        assert isinstance(v, u.Quantity)
+        assert v.decompose().unit == u.m / u.second
+
+    def test_invalid_quantity_operations(self):
+        """Check comparisons of TimeDelta with non-time quantities fails."""
+        with pytest.raises(OperandTypeError):
+            TimeDelta(100000., format='sec') > 10.*u.m
diff --git a/astropy/time/tests/test_ut1.py b/astropy/time/tests/test_ut1.py
new file mode 100644
index 0000000..2947c15
--- /dev/null
+++ b/astropy/time/tests/test_ut1.py
@@ -0,0 +1,49 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+import functools
+
+import numpy as np
+
+from ...tests.helper import pytest
+from .. import Time
+from ...utils.iers import iers  # used in testing
+
+allclose_jd = functools.partial(np.allclose, rtol=1e-15, atol=0)
+allclose_sec = functools.partial(np.allclose, rtol=1e-15, atol=1e-9)
+# 1 nanosec atol
+
+try:
+    iers.IERS_A.open()  # check if IERS_A is available
+except IOError:
+    HAS_IERS_A = False
+else:
+    HAS_IERS_A = True
+
+
+class TestTimeUT1():
+    """Test Time.ut1 using IERS tables"""
+
+    def test_ut1(self):
+        t = Time(['2012-06-30 12:00:00', '2012-06-30 23:59:59',
+                  '2012-06-30 23:59:60', '2012-07-01 00:00:00',
+                  '2012-07-01 12:00:00'], scale='utc')
+        t_ut1_jd = t.ut1.jd
+        t_comp = np.array([2456108.9999932079,
+                           2456109.4999816339,
+                           2456109.4999932083,
+                           2456109.5000047823,
+                           2456110.0000047833])
+        assert allclose_jd(t_ut1_jd, t_comp)
+        tnow = Time.now()
+        with pytest.raises(IndexError):
+            tnow.ut1
+
+
+ at pytest.mark.skipif('not HAS_IERS_A')
+class TestTimeUT1_IERSA():
+    def test_ut1_iers_A(self):
+        tnow = Time.now()
+        iers_a = iers.IERS_A.open()
+        tnow.delta_ut1_utc, status = iers_a.ut1_utc(tnow, return_status=True)
+        assert status == iers.FROM_IERS_A_PREDICTION
+        tnow_ut1_jd = tnow.ut1.jd
+        assert tnow_ut1_jd != tnow.jd
diff --git a/astropy/units/__init__.py b/astropy/units/__init__.py
index 1dfe124..5a17987 100644
--- a/astropy/units/__init__.py
+++ b/astropy/units/__init__.py
@@ -9,25 +9,25 @@ This code is adapted from the `pynbody
 Pontzen, who has granted the Astropy project permission to use the
 code under a BSD license.
 """
+from __future__ import absolute_import, division, print_function, unicode_literals
 
 from .core import *
 from .quantity import *
 
 from . import si
 from . import cgs
+from . import astrophys
+
 from .si import *
 from .astrophys import *
 from .cgs import *
-from .imperial import *
 from .physical import *
 
 from .equivalencies import *
 
-# Create a special singleton for the dimensionless unit
-dimensionless_unscaled = Unit(1)
+del bases
 
-# After importing the unit definitions above, set the unit namespace
-# to this top-level module so that new units are added here.
-UnitBase._set_namespace(locals())
+# Enable the set of default units.  This notably does *not* include
+# Imperial units.
 
-del bases
+set_enabled_units([si, cgs, astrophys])
diff --git a/astropy/units/astrophys.py b/astropy/units/astrophys.py
index 71f792d..e8b9767 100644
--- a/astropy/units/astrophys.py
+++ b/astropy/units/astrophys.py
@@ -21,53 +21,60 @@ from .core import UnitBase, def_unit
 
 import numpy as _numpy
 
-UnitBase._set_namespace(globals())
+_ns = globals()
 
 ###########################################################################
 # LENGTH
 
-def_unit(['AU', 'au'], _si.au.value * si.m, register=True, prefixes=True,
+def_unit((['AU', 'au'], []), _si.au.value * si.m, namespace=_ns, prefixes=True,
          doc="astronomical unit: approximately the mean Earth--Sun "
          "distance.")
 
-def_unit(['pc', 'parsec'], _si.pc.value * si.m, register=True, prefixes=True,
+def_unit(['pc', 'parsec'], _si.pc.value * si.m, namespace=_ns, prefixes=True,
          doc="parsec: approximately 3.26 light-years.")
 
-def_unit(['solRad', 'R_sun'], _si.R_sun.value * si.m, register=True,
+def_unit(['solRad', 'R_sun', 'Rsun'], _si.R_sun.value * si.m, namespace=_ns,
          doc="Solar radius",
          format={'latex': r'R_{\odot}', 'unicode': 'R⊙'})
-def_unit(['lyr', 'lightyear'], _si.c.value * si.yr.to(si.s) * si.m, register=True,
+def_unit(['lyr', 'lightyear'], _si.c.value * si.yr.to(si.s) * si.m, namespace=_ns,
          doc="Light year")
 
 
 ###########################################################################
 # AREAS
 
-def_unit(['barn'], 10 ** -28 * si.m ** 2, register=True, prefixes=True,
+def_unit(['barn'], 10 ** -28 * si.m ** 2, namespace=_ns, prefixes=True,
          doc="barn: unit of area used in HEP")
 
 
 ###########################################################################
+# ANGULAR MEASUREMENTS
+
+def_unit(['cycle', 'cy'], 2.0 * _numpy.pi * si.rad,
+         namespace=_ns, prefixes=False,
+         doc="cycle: angular measurement, a full turn or rotation")
+
+###########################################################################
 # MASS
 
-def_unit(['solMass', 'M_sun'], _si.M_sun.value * si.kg, register=True,
+def_unit(['solMass', 'M_sun', 'Msun'], _si.M_sun.value * si.kg, namespace=_ns,
          prefixes=True, doc="Solar mass",
          format={'latex': r'M_{\odot}', 'unicode': 'M⊙'})
-def_unit(['M_p'], _si.m_p.value * si.kg, register=True,
+def_unit(['M_p'], _si.m_p.value * si.kg, namespace=_ns,
          doc="Proton mass",
          format={'latex': r'M_{p}', 'unicode': 'Mₚ'})
-def_unit(['M_e'], _si.m_e.value * si.kg, register=True,
+def_unit(['M_e'], _si.m_e.value * si.kg, namespace=_ns,
          doc="Electron mass",
          format={'latex': r'M_{e}', 'unicode': 'Mₑ'})
 # Unified atomic mass unit
-def_unit(['u', 'Da', 'Dalton'], 1.6605387e-27 * si.kg, register=True,
+def_unit(['u', 'Da', 'Dalton'], 1.6605387e-27 * si.kg, namespace=_ns,
          doc="Unified atomic mass unit")
 
 
 ##########################################################################
 # ENERGY
 
-def_unit(['Ry', 'rydberg'], 13.605692 * si.eV, register=True,
+def_unit(['Ry', 'rydberg'], 13.605692 * si.eV, namespace=_ns,
          doc="Rydberg: Energy of a photon whose wavenumber is the Rydberg "
          "constant",
          format={'latex': r'R_{\infty}', 'unicode': 'R∞'})
@@ -76,7 +83,7 @@ def_unit(['Ry', 'rydberg'], 13.605692 * si.eV, register=True,
 ###########################################################################
 # ILLUMINATION
 
-def_unit(['solLum', 'L_sun'], _si.L_sun.value * si.W, register=True,
+def_unit(['solLum', 'L_sun', 'Lsun'], _si.L_sun.value * si.W, namespace=_ns,
          prefixes=True, doc="Solar luminance",
          format={'latex': r'L_{\odot}', 'unicode': 'L⊙'})
 
@@ -84,18 +91,18 @@ def_unit(['solLum', 'L_sun'], _si.L_sun.value * si.W, register=True,
 ###########################################################################
 # SPECTRAL DENSITY
 
-def_unit(['ph', 'photon'], register=True)
+def_unit(['ph', 'photon'], namespace=_ns)
 def_unit(['Jy', 'Jansky', 'jansky'], 1e-26 * si.W / si.m ** 2 / si.Hz,
-         register=True, prefixes=True,
+         namespace=_ns, prefixes=True,
          doc="Jansky: spectral flux density")
 def_unit(['R', 'Rayleigh', 'rayleigh'],
          (1e10 / (4 * _numpy.pi)) *
          ph * si.m ** -2 * si.s ** -1 * si.sr ** -1,
-         register=True, prefixes=True,
+         namespace=_ns, prefixes=True,
          doc="Rayleigh: photon flux")
 
-def_unit(['mag'], register=True, prefixes=True,
-         doc="Stellar magnitude.")
+def_unit(['mag'], namespace=_ns, prefixes=True,
+         doc="Astronomical magnitude.")
 
 
 ###########################################################################
@@ -105,26 +112,26 @@ def_unit(['mag'], register=True, prefixes=True,
 # Maybe they should be moved into the FITS format class?
 # TODO: This is defined by the FITS standard as "relative to the sun".
 # Is that mass, volume, what?
-def_unit(['Sun'], register=True)
+def_unit(['Sun'], namespace=_ns)
 
 
 ###########################################################################
 # EVENTS
 
-def_unit(['ct', 'count'], register=True)
-def_unit(['pix', 'pixel'], register=True)
+def_unit(['ct', 'count'], namespace=_ns)
+def_unit(['pix', 'pixel'], namespace=_ns)
 
 
 ###########################################################################
 # MISCELLANEOUS
 
-def_unit(['chan'], register=True)
-def_unit(['bin'], register=True)
-def_unit(['vox', 'voxel'], register=True)
-def_unit(['bit'], register=True, prefixes=True)
-def_unit(['byte'], register=True, prefixes=True)
-def_unit(['adu'], register=True)
-def_unit(['beam'], register=True)
+def_unit(['chan'], namespace=_ns)
+def_unit(['bin'], namespace=_ns)
+def_unit(['vox', 'voxel'], namespace=_ns)
+def_unit((['bit', 'b'], ['bit']), namespace=_ns, prefixes=True)
+def_unit((['byte', 'B'], ['byte']), namespace=_ns, prefixes=True)
+def_unit(['adu'], namespace=_ns)
+def_unit(['beam'], namespace=_ns)
 
 
 ###########################################################################
diff --git a/astropy/units/cds.py b/astropy/units/cds.py
new file mode 100644
index 0000000..c8541e2
--- /dev/null
+++ b/astropy/units/cds.py
@@ -0,0 +1,190 @@
+# -*- coding: utf-8 -*-
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+This package defines units used in the CDS format.
+
+Contains the units defined in `Centre de Données astronomiques de
+Strasbourg <http://cds.u-strasbg.fr/>`_ `Standards for Astronomical
+Catalogues 2.0 <http://cds.u-strasbg.fr/doc/catstd-3.2.htx>`_ format,
+and the `complete set of supported units
+<http://vizier.u-strasbg.fr/cgi-bin/Unit>`_.  This format is used by
+VOTable up to version 1.2.
+
+To include them in `~astropy.units.UnitBase.compose` and the results
+of `~astropy.units.UnitBase.find_equivalent_units`, do::
+
+    >>> from astropy.units import cds
+    >>> cds.enable()  # doctest: +SKIP
+
+"""
+
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+_ns = globals()
+
+
+def _initialize_module():
+    # Local imports to avoid polluting top-level namespace
+    import numpy as np
+
+    from . import core
+    from .. import units as u
+    from ..constants import si as _si
+
+    # The CDS format also supports power-of-2 prefixes as defined here:
+    # http://physics.nist.gov/cuu/Units/binary.html
+    prefixes = core.si_prefixes + [
+        (['Ki'], ['kibi'], 2. ** 10),
+        (['Mi'], ['mebi'], 2. ** 20),
+        (['Gi'], ['gibi'], 2. ** 30),
+        (['Ti'], ['tebi'], 2. ** 40),
+        (['Pi'], ['pebi'], 2. ** 50),
+        (['Ei'], ['exbi'], 2. ** 60)
+        ]
+
+    # CDS only uses the short prefixes
+    prefixes = [(short, short, factor) for (short, long, factor) in prefixes]
+
+    # The following units are defined in alphabetical order, directly from
+    # here: http://vizier.u-strasbg.fr/cgi-bin/Unit
+
+    mapping = [
+        (['A'], u.A, "Ampere"),
+        (['a'], u.a, "year", ['P']),
+        (['a0'], _si.a0, "Bohr radius"),
+        (['al'], u.lyr, "Light year", ['c', 'd']),
+        (['lyr'], u.lyr, "Light year"),
+        (['alpha'], _si.alpha, "Fine structure constant"),
+        ((['AA', 'Å'], ['Angstrom', 'Angstroem']), u.AA, "Angstrom"),
+        (['arcm', 'arcmin'], u.arcminute, "minute of arc"),
+        (['arcs', 'arcsec'], u.arcsecond, "second of arc"),
+        (['atm'], _si.atm, "atmosphere"),
+        (['AU', 'au'], u.au, "astronomical unit"),
+        (['bar'], u.bar, "bar"),
+        (['barn'], u.barn, "barn"),
+        (['bit'], u.bit, "bit"),
+        (['byte'], u.byte, "byte"),
+        (['C'], u.C, "Coulomb"),
+        (['c'], _si.c, "speed of light", ['p']),
+        (['cal'], 4.1854 * u.J, "calorie"),
+        (['cd'], u.cd, "candela"),
+        (['ct'], u.ct, "count"),
+        (['D'], u.D, "Debye (dipole)"),
+        (['d'], u.d, "Julian day", ['c']),
+        ((['deg', '°'], ['degree']), u.degree, "degree"),
+        (['dyn'], u.dyn, "dyne"),
+        (['e'], _si.e, "electron charge", ['m']),
+        (['eps0'], _si.eps0, "electric constant"),
+        (['erg'], u.erg, "erg"),
+        (['eV'], u.eV, "electron volt"),
+        (['F'], u.F, "Farad"),
+        (['G'], _si.G, "Gravitation constant"),
+        (['g'], u.g, "gram"),
+        (['gauss'], u.G, "Gauss"),
+        (['geoMass', 'Mgeo'], _si.M_earth, "Earth mass"),
+        (['H'], u.H, "Henry"),
+        (['h'], u.h, "hour", ['p']),
+        (['hr'], u.h, "hour"),
+        (['\\h'], _si.h, "Planck constant"),
+        (['Hz'], u.Hz, "Hertz"),
+        (['inch'], 0.0254 * u.m, "inch"),
+        (['J'], u.J, "Joule"),
+        (['JD'], u.d, "Julian day", ['M']),
+        (['jovMass', 'Mjup'], _si.M_jup, "Jupiter mass"),
+        (['Jy'], u.Jy, "Jansky"),
+        (['K'], u.K, "Kelvin"),
+        (['k'], _si.k_B, "Boltzmann"),
+        (['l'], u.l, "litre", ['a']),
+        (['lm'], u.lm, "lumen"),
+        (['Lsun', 'solLum'], u.solLum, "solar luminosity"),
+        (['lx'], u.lx, "lux"),
+        (['m'], u.m, "meter"),
+        (['mag'], u.mag, "magnitude"),
+        (['me'], _si.m_e, "electron mass"),
+        (['min'], u.minute, "minute"),
+        (['MJD'], u.d, "Julian day"),
+        (['mmHg'], 133.322387415 * u.Pa, "millimeter of mercury"),
+        (['mol'], u.mol, "mole"),
+        (['mp'], _si.m_p, "proton mass"),
+        (['Msun', 'solMass'], u.solMass, "solar mass"),
+        ((['mu0', 'µ0'], []), _si.mu0, "magnetic constant"),
+        (['muB'], _si.muB, "Bohr magneton"),
+        (['N'], u.N, "Newton"),
+        (['Ohm'], u.Ohm, "Ohm"),
+        (['Pa'], u.Pa, "Pascal"),
+        (['pc'], u.pc, "parsec"),
+        (['ph'], u.ph, "photon"),
+        (['pi'], u.Unit(np.pi), "π"),
+        (['pix'], u.pix, "pixel"),
+        (['ppm'], u.Unit(1e-6), "parts per million"),
+        (['R'], _si.R, "gas constant"),
+        (['rad'], u.radian, "radian"),
+        (['Rgeo'], _si.R_earth, "Earth equatorial radius"),
+        (['Rjup'], _si.R_jup, "Jupiter equatorial radius"),
+        (['Rsun', 'solRad'], u.solRad, "solar radius"),
+        (['Ry'], u.Ry, "Rydberg"),
+        (['S'], u.S, "Siemens"),
+        (['s', 'sec'], u.s, "second"),
+        (['sr'], u.sr, "steradian"),
+        (['Sun'], u.Sun, "solar unit"),
+        (['T'], u.T, "Tesla"),
+        (['t'], 1e3 * u.kg, "metric tonne", ['c']),
+        (['u'], _si.u, "atomic mass", ['da', 'a']),
+        (['V'], u.V, "Volt"),
+        (['W'], u.W, "Watt"),
+        (['Wb'], u.Wb, "Weber"),
+        (['yr'], u.a, "year"),
+    ]
+
+    for entry in mapping:
+        if len(entry) == 3:
+            names, unit, doc = entry
+            excludes = []
+        else:
+            names, unit, doc, excludes = entry
+        core.def_unit(names, unit, prefixes=prefixes, namespace=_ns, doc=doc,
+                      exclude_prefixes=excludes)
+
+    core.def_unit(['µas'], u.microarcsecond,
+                  doc="microsecond of arc", namespace=_ns)
+    core.def_unit(['mas'], u.milliarcsecond,
+                  doc="millisecond of arc", namespace=_ns)
+    core.def_unit(['---'], u.dimensionless_unscaled,
+                  doc="dimensionless and unscaled", namespace=_ns)
+    core.def_unit(['%'], u.percent,
+                  doc="percent", namespace=_ns)
+    # The Vizier "standard" defines this in units of "kg s-3", but
+    # that may not make a whole lot of sense, so here we just define
+    # it as its own new disconnected unit.
+    core.def_unit(['Crab'], prefixes=prefixes, namespace=_ns,
+                  doc="Crab (X-ray) flux")
+
+
+
+_initialize_module()
+
+
+###########################################################################
+# DOCSTRING
+
+# This generates a docstring for this module that describes all of the
+# standard units defined here.
+from .utils import generate_unit_summary as _generate_unit_summary
+__doc__ += _generate_unit_summary(globals())
+
+
+def enable():
+    """
+    Enable CDS units so they appear in results of
+    `Unit.find_equivalent_units` and `Unit.compose`.
+
+    This may be used with the ``with`` statement to enable CDS
+    units only temporarily.
+    """
+    # Local import to avoid cyclical import
+    from .core import add_enabled_units
+    # Local import to avoid polluting namespace
+    import inspect
+    return add_enabled_units(inspect.getmodule(enable))
diff --git a/astropy/units/cgs.py b/astropy/units/cgs.py
index 68b785b..ec63136 100644
--- a/astropy/units/cgs.py
+++ b/astropy/units/cgs.py
@@ -13,9 +13,9 @@ from . import si
 from .core import UnitBase, def_unit
 
 
-UnitBase._set_namespace(globals())
+_ns = globals()
 
-def_unit(['cm', 'centimeter'], si.cm, register=True, prefixes=False)
+def_unit(['cm', 'centimeter'], si.cm, namespace=_ns, prefixes=False)
 g = si.g
 s = si.s
 C = si.C
@@ -29,7 +29,7 @@ mol = si.mol
 ##########################################################################
 # ACCELERATION
 
-def_unit(['Gal', 'gal'], cm / s ** 2, register=True, prefixes=True,
+def_unit(['Gal', 'gal'], cm / s ** 2, namespace=_ns, prefixes=True,
          doc="Gal: CGS unit of acceleration")
 
 
@@ -37,14 +37,14 @@ def_unit(['Gal', 'gal'], cm / s ** 2, register=True, prefixes=True,
 # ENERGY
 
 # Use CGS definition of erg
-def_unit(['erg'], g * cm ** 2 / s ** 2, register=True, prefixes=True,
+def_unit(['erg'], g * cm ** 2 / s ** 2, namespace=_ns, prefixes=True,
          doc="erg: CGS unit of energy")
 
 
 ##########################################################################
 # FORCE
 
-def_unit(['dyn', 'dyne'], g * cm / s ** 2, register=True,
+def_unit(['dyn', 'dyne'], g * cm / s ** 2, namespace=_ns,
          prefixes=True,
          doc="dyne: CGS unit of force")
 
@@ -52,7 +52,7 @@ def_unit(['dyn', 'dyne'], g * cm / s ** 2, register=True,
 ##########################################################################
 # PRESSURE
 
-def_unit(['Ba', 'Barye', 'barye'], g / (cm * s ** 2), register=True,
+def_unit(['Ba', 'Barye', 'barye'], g / (cm * s ** 2), namespace=_ns,
          prefixes=True,
          doc="Barye: CGS unit of pressure")
 
@@ -60,7 +60,7 @@ def_unit(['Ba', 'Barye', 'barye'], g / (cm * s ** 2), register=True,
 ##########################################################################
 # DYNAMIC VISCOSITY
 
-def_unit(['P', 'poise'], g / (cm * s), register=True,
+def_unit(['P', 'poise'], g / (cm * s), namespace=_ns,
          prefixes=True,
          doc="poise: CGS unit of dynamic viscosity")
 
@@ -68,7 +68,7 @@ def_unit(['P', 'poise'], g / (cm * s), register=True,
 ##########################################################################
 # KINEMATIC VISCOSITY
 
-def_unit(['St', 'stokes'], cm ** 2 / s, register=True,
+def_unit(['St', 'stokes'], cm ** 2 / s, namespace=_ns,
          prefixes=True,
          doc="stokes: CGS unit of kinematic viscosity")
 
@@ -76,7 +76,7 @@ def_unit(['St', 'stokes'], cm ** 2 / s, register=True,
 ##########################################################################
 # WAVENUMBER
 
-def_unit(['k', 'Kayser', 'kayser'], cm ** -1, register=True,
+def_unit(['k', 'Kayser', 'kayser'], cm ** -1, namespace=_ns,
          prefixes=True,
          doc="kayser: CGS unit of wavenumber")
 
@@ -85,28 +85,28 @@ def_unit(['k', 'Kayser', 'kayser'], cm ** -1, register=True,
 # ELECTRICAL
 
 def_unit(['D', 'Debye', 'debye'], Fraction(1, 3) * 1e-29 * C * si.m,
-         register=True,
+         namespace=_ns,
          doc="Debye: CGS unit of electric dipole moment")
 
 def_unit(['Fr', 'Franklin', 'statcoulomb', 'statC', 'esu'],
          g ** Fraction(1, 2) * cm ** Fraction(3, 2) * s ** -1,
-         register=True,
+         namespace=_ns,
          doc='Franklin: CGS (ESU) unit of charge')
 
-def_unit(['statA', 'statampere'], Fr * s ** -1, register=True,
+def_unit(['statA', 'statampere'], Fr * s ** -1, namespace=_ns,
          doc='statampere: CGS (ESU) unit of current')
 
 def_unit(['Bi', 'Biot', 'abA', 'abampere', 'emu'],
-         g ** Fraction(1, 2) * cm ** Fraction(1, 2) * s ** -1, register=True,
+         g ** Fraction(1, 2) * cm ** Fraction(1, 2) * s ** -1, namespace=_ns,
          doc='Biot: CGS (EMU) unit of current')
 
-def_unit(['abC', 'abcoulomb'], Bi * s, register=True,
+def_unit(['abC', 'abcoulomb'], Bi * s, namespace=_ns,
          doc='abcoulomb: CGS (EMU) of charge')
 
 ###########################################################################
 # MAGNETIC
 
-def_unit(['G', 'Gauss', 'gauss'], 1e-4 * si.T, register=True, prefixes=True,
+def_unit(['G', 'Gauss', 'gauss'], 1e-4 * si.T, namespace=_ns, prefixes=True,
          doc="Gauss: CGS unit for magnetic field")
 
 
diff --git a/astropy/units/core.py b/astropy/units/core.py
index 8e4d9e2..10adec3 100644
--- a/astropy/units/core.py
+++ b/astropy/units/core.py
@@ -7,9 +7,11 @@ Core units classes and functions
 
 from __future__ import (absolute_import, division, print_function,
                         unicode_literals)
+from ..extern import six
 
+import copy
 import inspect
-import re
+import numbers
 import sys
 import textwrap
 import warnings
@@ -18,25 +20,430 @@ import numpy as np
 from numpy import ma
 
 from ..utils.compat.fractions import Fraction
+from ..utils.exceptions import AstropyWarning
+from ..utils.misc import isiterable
 from .utils import is_effectively_unity
 from . import format as unit_format
 
 # TODO: Support functional units, e.g. log(x), ln(x)
 
 __all__ = [
-    'UnitsException', 'UnitsWarning', 'UnitBase', 'NamedUnit',
-    'IrreducibleUnit', 'Unit', 'def_unit', 'CompositeUnit',
-    'PrefixUnit', 'UnrecognizedUnit']
+    'UnitsError', 'UnitsException', 'UnitsWarning', 'UnitBase',
+    'NamedUnit', 'IrreducibleUnit', 'Unit', 'def_unit',
+    'CompositeUnit', 'PrefixUnit', 'UnrecognizedUnit',
+    'get_current_unit_registry', 'set_enabled_units',
+    'add_enabled_units', 'set_enabled_equivalencies',
+    'add_enabled_equivalencies', 'dimensionless_unscaled']
 
 
-class UnitsException(Exception):
+def _flatten_units_collection(items):
+    """
+    Given a list of sequences, modules or dictionaries of units, or
+    single units, return a flat set of all the units found.
+    """
+    if not isinstance(items, list):
+        items = [items]
+
+    result = set()
+    for item in items:
+        if isinstance(item, UnitBase):
+            result.add(item)
+        else:
+            if isinstance(item, dict):
+                units = item.values()
+            elif inspect.ismodule(item):
+                units = vars(item).values()
+            elif isiterable(item):
+                units = item
+            else:
+                continue
+
+            for unit in units:
+                if isinstance(unit, UnitBase):
+                    result.add(unit)
+
+    return result
+
+
+def _normalize_equivalencies(equivalencies):
+    """
+    Normalizes equivalencies, ensuring each is a 4-tuple of the form::
+
+    (from_unit, to_unit, forward_func, backward_func)
+
+    Parameters
+    ----------
+    equivalencies : list of equivalency pairs
+
+    Raises
+    ------
+    ValueError if an equivalency cannot be interpreted
+    """
+    if equivalencies is None:
+        return []
+
+    normalized = []
+
+    for i, equiv in enumerate(equivalencies):
+        if len(equiv) == 2:
+            funit, tunit = equiv
+            a = b = lambda x: x
+        elif len(equiv) == 3:
+            funit, tunit, a = equiv
+            b = a
+        elif len(equiv) == 4:
+            funit, tunit, a, b = equiv
+        else:
+            raise ValueError(
+                "Invalid equivalence entry {0}: {1!r}".format(i, equiv))
+        if not (isinstance(funit, UnitBase) and
+                (isinstance(tunit, UnitBase) or tunit is None) and
+                six.callable(a) and
+                six.callable(b)):
+            raise ValueError(
+                "Invalid equivalence entry {0}: {1!r}".format(i, equiv))
+        normalized.append((funit, tunit, a, b))
+
+    return normalized
+
+
+class _UnitRegistry(object):
+    """
+    Manages a registry of the enabled units.
+    """
+    def __init__(self, init=[], equivalencies=[]):
+        if isinstance(init, _UnitRegistry):
+            equivalencies = init.equivalencies
+            init = init.all_units
+
+        self._reset_units()
+        self._reset_equivalencies()
+        self.add_enabled_units(init)
+        self.add_enabled_equivalencies(equivalencies)
+
+    def _reset_units(self):
+        self._all_units = set()
+        self._non_prefix_units = set()
+        self._registry = {}
+        self._by_physical_type = {}
+
+    def _reset_equivalencies(self):
+        self._equivalencies = set()
+
+    @property
+    def registry(self):
+        return self._registry
+
+    @property
+    def all_units(self):
+        return self._all_units
+
+    @property
+    def non_prefix_units(self):
+        return self._non_prefix_units
+
+    def set_enabled_units(self, units):
+        """
+        Sets the units enabled in the unit registry.
+
+        These units are searched when using
+        `UnitBase.find_equivalent_units`, for example.
+
+        Parameters
+        ----------
+        units : list of sequences, dicts, or modules containing units, or units
+            This is a list of things in which units may be found
+            (sequences, dicts or modules), or units themselves.  The
+            entire set will be "enabled" for searching through by
+            methods like `UnitBase.find_equivalent_units` and
+            `UnitBase.compose`.
+        """
+        self._reset_units()
+        return self.add_enabled_units(units)
+
+    def add_enabled_units(self, units):
+        """
+        Adds to the set of units enabled in the unit registry.
+
+        These units are searched when using
+        `UnitBase.find_equivalent_units`, for example.
+
+        Parameters
+        ----------
+        units : list of sequences, dicts, or modules containing units, or units
+            This is a list of things in which units may be found
+            (sequences, dicts or modules), or units themselves.  The
+            entire set will be added to the "enabled" set for
+            searching through by methods like
+            `UnitBase.find_equivalent_units` and `UnitBase.compose`.
+        """
+        units = _flatten_units_collection(units)
+
+        for unit in units:
+            # Loop through all of the names first, to ensure all of them
+            # are new, then add them all as a single "transaction" below.
+            for st in unit._names:
+                if (st in self._registry and unit != self._registry[st]):
+                    raise ValueError(
+                        "Object with name {0!r} already exists in namespace. "
+                        "Filter the set of units to avoid name classes before "
+                        "enabling them.".format(st))
+
+            for st in unit._names:
+                self._registry[st] = unit
+
+            self._all_units.add(unit)
+            if not isinstance(unit, PrefixUnit):
+                self._non_prefix_units.add(unit)
+
+            hash = unit._get_physical_type_id()
+            self._by_physical_type.setdefault(hash, set()).add(unit)
+
+    def get_units_with_physical_type(self, unit):
+        """
+        Get all units in the registry with the same physical type as
+        the given unit.
+
+        Parameters
+        ----------
+        unit : UnitBase instance
+        """
+        return self._by_physical_type.get(
+            unit._get_physical_type_id(),
+            set())
+
+    @property
+    def equivalencies(self):
+        return list(self._equivalencies)
+
+    def set_enabled_equivalencies(self, equivalencies):
+        """
+        Sets the equivalencies enabled in the unit registry.
+
+        These equivalencies are used if no explicit equivalencies are given,
+        both in unit conversion and in finding equivalent units.
+
+        This is meant in particular for allowing angles to be dimensionless.
+        Use with care.
+
+        Parameters
+        ----------
+        equivalencies : list of equivalent pairs
+            E.g., as returned by `astropy.units.angles_dimensionless`.
+        """
+        self._reset_equivalencies()
+        return self.add_enabled_equivalencies(equivalencies)
+
+    def add_enabled_equivalencies(self, equivalencies):
+        """
+        Adds to the set of equivalencies enabled in the unit registry.
+
+        These equivalencies are used if no explicit equivalencies are given,
+        both in unit conversion and in finding equivalent units.
+
+        This is meant in particular for allowing angles to be dimensionless.
+        Use with care.
+
+        Parameters
+        ----------
+        equivalencies : list of equivalent pairs
+            E.g., as returned by `astropy.units.angles_dimensionless`.
+        """
+        # pre-normalize list to help catch mistakes
+        equivalencies = _normalize_equivalencies(equivalencies)
+        self._equivalencies |= set(equivalencies)
+
+
+class _UnitContext(object):
+    def __init__(self, init=[], equivalencies=[]):
+        _unit_registries.append(
+            _UnitRegistry(
+                init=init,
+                equivalencies=equivalencies))
+
+    def __enter__(self):
+        pass
+
+    def __exit__(self, type, value, tb):
+        _unit_registries.pop()
+
+
+_unit_registries = [_UnitRegistry()]
+
+
+def get_current_unit_registry():
+    return _unit_registries[-1]
+
+
+def set_enabled_units(units):
+    """
+    Sets the units enabled in the unit registry.
+
+    These units are searched when using
+    `UnitBase.find_equivalent_units`, for example.
+
+    This may be used either permanently, or as a context manager using
+    the ``with`` statement (see example below).
+
+    Parameters
+    ----------
+    units : list of sequences, dicts, or modules containing units, or units
+        This is a list of things in which units may be found
+        (sequences, dicts or modules), or units themselves.  The
+        entire set will be "enabled" for searching through by methods
+        like `UnitBase.find_equivalent_units` and `UnitBase.compose`.
+
+    Examples
+    --------
+
+    >>> from astropy import units as u
+    >>> with u.set_enabled_units([u.pc]):
+    ...     u.m.find_equivalent_units()
+    ...
+      Primary name | Unit definition | Aliases
+    [
+      pc           | 3.08568e+16 m   | parsec  ,
+    ]
+    >>> u.m.find_equivalent_units()
+      Primary name | Unit definition | Aliases
+    [
+      AU           | 1.49598e+11 m   | au           ,
+      Angstrom     | 1e-10 m         | AA, angstrom ,
+      cm           | 0.01 m          | centimeter   ,
+      lyr          | 9.46073e+15 m   | lightyear    ,
+      m            | irreducible     | meter        ,
+      micron       | 1e-06 m         |              ,
+      pc           | 3.08568e+16 m   | parsec       ,
+      solRad       | 6.95508e+08 m   | R_sun, Rsun  ,
+    ]
+    """
+    # get a context with a new registry, using equivalencies of the current one
+    context = _UnitContext(
+        equivalencies=get_current_unit_registry().equivalencies)
+    # in this new current registry, enable the units requested
+    get_current_unit_registry().set_enabled_units(units)
+    return context
+
+
+def add_enabled_units(units):
+    """
+    Adds to the set of units enabled in the unit registry.
+
+    These units are searched when using
+    `UnitBase.find_equivalent_units`, for example.
+
+    This may be used either permanently, or as a context manager using
+    the ``with`` statement (see example below).
+
+    Parameters
+    ----------
+    units : list of sequences, dicts, or modules containing units, or units
+        This is a list of things in which units may be found
+        (sequences, dicts or modules), or units themselves.  The
+        entire set will be added to the "enabled" set for searching
+        through by methods like `UnitBase.find_equivalent_units` and
+        `UnitBase.compose`.
+
+    Examples
+    --------
+
+    >>> from astropy import units as u
+    >>> from astropy.units import imperial
+    >>> with u.add_enabled_units(imperial):
+    ...     u.m.find_equivalent_units()
+    ...
+      Primary name | Unit definition | Aliases
+    [
+      AU           | 1.49598e+11 m   | au               ,
+      Angstrom     | 1e-10 m         | AA, angstrom     ,
+      cm           | 0.01 m          | centimeter       ,
+      ft           | 0.3048 m        | foot             ,
+      inch         | 0.0254 m        |                  ,
+      lyr          | 9.46073e+15 m   | lightyear        ,
+      m            | irreducible     | meter            ,
+      mi           | 1609.34 m       | mile             ,
+      micron       | 1e-06 m         |                  ,
+      nmi          | 1852 m          | nauticalmile, NM ,
+      pc           | 3.08568e+16 m   | parsec           ,
+      solRad       | 6.95508e+08 m   | R_sun, Rsun      ,
+      yd           | 0.9144 m        | yard             ,
+    ]
+    """
+    # get a context with a new registry, which is a copy of the current one
+    context = _UnitContext(get_current_unit_registry())
+    # in this new current registry, enable the further units requested
+    get_current_unit_registry().add_enabled_units(units)
+    return context
+
+
+def set_enabled_equivalencies(equivalencies):
+    """
+    Sets the equivalencies enabled in the unit registry.
+
+    These equivalencies are used if no explicit equivalencies are given,
+    both in unit conversion and in finding equivalent units.
+
+    This is meant in particular for allowing angles to be dimensionless.
+    Use with care.
+
+    Parameters
+    ----------
+    equivalencies : list of equivalent pairs
+        E.g., as returned by `astropy.units.angles_dimensionless`.
+
+    Examples
+    --------
+    Exponentiation normally requires dimensionless quantities.  To avoid
+    problems with complex phases::
+
+        >>> from astropy import units as u
+        >>> with u.set_enabled_equivalencies(u.dimensionless_angles()):
+        ...     phase = 0.5 * u.cycle
+        ...     np.exp(1j*phase)                          # doctest: +ELLIPSIS
+        <Quantity (-1+...j) >
+    """
+    # get a context with a new registry, using all units of the current one
+    context = _UnitContext(get_current_unit_registry().all_units)
+    # in this new current registry, enable the equivalencies requested
+    get_current_unit_registry().set_enabled_equivalencies(equivalencies)
+    return context
+
+
+def add_enabled_equivalencies(equivalencies):
+    """
+    Adds to the equivalencies enabled in the unit registry.
+
+    These equivalencies are used if no explicit equivalencies are given,
+    both in unit conversion and in finding equivalent units.
+
+    This is meant in particular for allowing angles to be dimensionless.
+    Since no equivalencies are enabled by default, generally it is recommended
+    to use `set_enabled_equivalencies`.
+
+    Parameters
+    ----------
+    equivalencies : list of equivalent pairs
+        E.g., as returned by `astropy.units.angles_dimensionless`.
+    """
+    # get a context with a new registry, which is a copy of the current one
+    context = _UnitContext(get_current_unit_registry())
+    # in this new current registry, enable the further equivalencies requested
+    get_current_unit_registry().add_enabled_equivalencies(equivalencies)
+    return context
+
+
+class UnitsError(Exception):
     """
     The base class for unit-specific exceptions.
     """
     pass
 
 
-class UnitsWarning(Warning):
+# deprecated alias.  Remove in astropy 0.4
+UnitsException = UnitsError
+
+
+class UnitsWarning(AstropyWarning):
     """
     The base class for unit-specific exceptions.
     """
@@ -52,9 +459,6 @@ class UnitBase(object):
 
     Should not be instantiated by users directly.
     """
-    _registry = {}
-    _namespace = {}
-
     # Make sure that __rmul__ of units gets called over the __mul__ of Numpy
     # arrays to avoid element-wise multiplication.
     __array_priority__ = 1000
@@ -76,12 +480,89 @@ class UnitBase(object):
         """
         return unit_format.Latex().to_string(self)
 
-    def __str__(self):
+    def __bytes__(self):
+        """Return string representation for unit"""
+        return unit_format.Generic().to_string(self).encode('ascii')
+    if sys.version_info[0] < 3:
+        __str__ = __bytes__
+
+    def __unicode__(self):
         """Return string representation for unit"""
         return unit_format.Generic().to_string(self)
+    if sys.version_info[0] >= 3:
+        __str__ = __unicode__
 
     def __repr__(self):
-        return 'Unit("' + str(self) + '")'
+        return 'Unit("' + unit_format.Generic().to_string(self) + '")'
+
+    def _get_physical_type_id(self):
+        """
+        Returns an identifier that uniquely identifies the physical
+        type of this unit.  It is comprised of the bases and powers of
+        this unit, without the scale.  Since it is hashable, it is
+        useful as a dictionary key.
+        """
+        unit = self.decompose()
+        r = zip([x.name for x in unit.bases], unit.powers)
+        # bases and powers are already sorted in a unique way
+        # r.sort()
+        r = tuple(r)
+        return r
+
+    @property
+    def names(self):
+        """
+        Returns all of the names associated with this unit.
+        """
+        raise AttributeError(
+            "Can not get names from unnamed units. "
+            "Perhaps you meant to_string()?")
+        return self._names
+
+    @property
+    def name(self):
+        """
+        Returns the canonical (short) name associated with this unit.
+        """
+        raise AttributeError(
+            "Can not get names from unnamed units. "
+            "Perhaps you meant to_string()?")
+
+    @property
+    def aliases(self):
+        """
+        Returns the alias (long) names for this unit.
+        """
+        raise AttributeError(
+            "Can not get aliases from unnamed units. "
+            "Perhaps you meant to_string()?")
+
+    @property
+    def scale(self):
+        """
+        Return the scale of the unit.
+        """
+        return 1.0
+
+    @property
+    def bases(self):
+        """
+        Return the bases of the unit.
+        """
+        return [self]
+
+    @property
+    def powers(self):
+        """
+        Return the powers of the unit.
+        """
+        return [1.0]
+
+    def _dimensionless_constant(self):
+        if self.is_unity():
+            return 1.0
+        raise UnitsError(
+            "'{0}' is not dimensionless".format(self.to_string()))
 
     def to_string(self, format='generic'):
         """
@@ -96,51 +577,82 @@ class UnitBase(object):
         f = unit_format.get_format(format)
         return f.to_string(self)
 
-    @staticmethod
-    def _get_namespace():
-        """
-        Get the namespace that units will be registered to.
-        """
-        return UnitBase._namespace
+    def __format__(self, format_spec):
+        """Try to format units using a formatter."""
+        try:
+            return self.to_string(format=format_spec)
+        except ValueError:
+            return format(six.text_type(self), format_spec)
 
     @staticmethod
-    def _set_namespace(d):
+    def _normalize_equivalencies(equivalencies):
         """
-        Set the namespace that units will be registered to.
+        Normalizes equivalencies, ensuring each is a 4-tuple of the form::
+
+        (from_unit, to_unit, forward_func, backward_func)
+
+        Parameters
+        ----------
+        equivalencies : list of equivalency pairs, or `None`
+
+        Returns
+        -------
+        A normalized list, including possible global defaults set by, e.g.,
+        `set_enabled_equivalencies`, except when `equivalencies`=`None`,
+        in which case the returned list is always empty.
+
+        Raises
+        ------
+        ValueError if an equivalency cannot be interpreted
         """
-        UnitBase._namespace = d
+        normalized = _normalize_equivalencies(equivalencies)
+        if equivalencies is not None:
+            normalized += get_current_unit_registry().equivalencies
 
-    def __pow__(self, p):
+        return normalized
+
+    def _validate_power(self, p):
         if isinstance(p, tuple) and len(p) == 2:
             p = Fraction(p[0], p[1])
+
+        if isinstance(p, numbers.Rational):
+            # If the fractional power can be represented *exactly* as
+            # a floating point number, we convert it to a float, to
+            # make the math much faster, otherwise, we use a
+            # `fractions.Fraction` object to avoid losing precision.
+            denom = p.denominator
+            # This is bit-twiddling hack to see if the integer is a
+            # power of two
+            if (denom & (denom - 1)) == 0:
+                p = float(p)
         else:
-            # allow two possible floating point fractions, all others illegal
-            if not int(2 * p) == 2 * p:
-                raise ValueError(
-                    "floating values for unit powers must be integers or "
-                    "integers + 0.5")
-        return CompositeUnit(1, [self], [p])._simplify()
+            p = float(p)
+
+        return p
+
+    def __pow__(self, p):
+        return CompositeUnit(1, [self], [p])
 
     def __div__(self, m):
-        # Strictly speaking, we should be using old-style division here.
-        # However, I think it's less surprising for this to behave the
-        # same way whether __future__ division is being used or not
-        from .quantity import Quantity
+        if isinstance(m, (bytes, six.text_type)):
+            m = Unit(m)
+
         if isinstance(m, UnitBase):
-            return CompositeUnit(1, [self, m], [1, -1])._simplify()
-        elif isinstance(m, Quantity):
-            return Quantity(1, self) / m
-        elif isinstance(m, basestring):
-            return self / Unit(m)
-        else:
-            return Quantity(1. / m, self)
+            if m.is_unity():
+                return self
+            return CompositeUnit(1, [self, m], [1, -1])
+
+        # Cannot handle this as Unit, re-try as Quantity
+        from .quantity import Quantity
+        return Quantity(1, self) / m
 
     def __rdiv__(self, m):
+        if isinstance(m, (bytes, six.text_type)):
+            return Unit(m) / self
+
+        # Cannot handle this as Unit, re-try as Quantity
         from .quantity import Quantity
-        if isinstance(m, basestring):
-            return Unit(m) / Quantity(1, self)
-        else:
-            return Quantity(m, CompositeUnit(1.0, [self], [-1])._simplify())
+        return m / Quantity(1, self)
 
     def __truediv__(self, m):
         return self.__div__(m)
@@ -149,22 +661,27 @@ class UnitBase(object):
         return self.__rdiv__(m)
 
     def __mul__(self, m):
-        from .quantity import Quantity
+        if isinstance(m, (bytes, six.text_type)):
+            m = Unit(m)
+
         if isinstance(m, UnitBase):
-            return CompositeUnit(1, [self, m], [1, 1])._simplify()
-        elif isinstance(m, Quantity):
-            return Quantity(1, self) * m
-        elif isinstance(m, basestring):
-            return self * Unit(m)
-        else:
-            return Quantity(m, self)
+            if m.is_unity():
+                return self
+            elif self.is_unity():
+                return m
+            return CompositeUnit(1, [self, m], [1, 1])
+
+        # Cannot handle this as Unit, re-try as Quantity
+        from .quantity import Quantity
+        return Quantity(1, self) * m
 
     def __rmul__(self, m):
+        if isinstance(m, (bytes, six.text_type)):
+            return Unit(m) * self
+
+        # Cannot handle this as Unit, re-try as Quantity
         from .quantity import Quantity
-        if isinstance(m, basestring):
-            return Unit(m) * Quantity(1, self)
-        else:
-            return Quantity(m, self)
+        return m * Quantity(1, self)
 
     if sys.version_info[0] >= 3:  # pragma: no cover
         def __hash__(self):
@@ -173,13 +690,16 @@ class UnitBase(object):
             return id(self)
 
     def __eq__(self, other):
+        if self is other:
+            return True
+
         try:
             other = Unit(other, parse_strict='silent')
-        except (ValueError, UnitsException):
+        except (ValueError, UnitsError):
             return False
         try:
             return np.allclose(self.to(other, 1), 1.0)
-        except UnitsException:
+        except UnitsError:
             return False
 
     def __ne__(self, other):
@@ -204,50 +724,69 @@ class UnitBase(object):
     def __neg__(self):
         return self * -1.
 
-    def _simplify(self):
-        """
-        Compresses a possibly composite unit down to a single
-        instance.
-        """
-        return self
-
     def is_equivalent(self, other, equivalencies=[]):
         """
         Returns `True` if this unit is equivalent to `other`.
 
         Parameters
         ----------
-        other : unit object or string
-           The unit to convert to.
+        other : unit object or string or tuple
+            The unit to convert to. If a tuple of units is specified, this
+            method returns true if the unit matches any of those in the tuple;
+            for this case, equivalencies are ignored.
 
         equivalencies : list of equivalence pairs, optional
-           A list of equivalence pairs to try if the units are not
-           directly convertible.  See :ref:`unit_equivalencies`.
+            A list of equivalence pairs to try if the units are not
+            directly convertible.  See :ref:`unit_equivalencies`.
+            This list is in addition to possible global defaults set by, e.g.,
+            `set_enabled_equivalencies`.
+            Use `None` to turn off all equivalencies.
 
         Returns
         -------
         bool
         """
-        other = Unit(other, parse_strict='silent')
 
+        if isinstance(other, tuple):
+            return any(self.is_equivalent(u, equivalencies=None)
+                       for u in other)
+        else:
+            other = Unit(other, parse_strict='silent')
+
+        equivalencies = self._normalize_equivalencies(equivalencies)
+
+        return self._is_equivalent(other, equivalencies)
+
+    def _is_equivalent(self, other, equivalencies=[]):
+        """Returns True if this unit is equivalent to `other`.
+        See `is_equivalent`, except that a proper Unit object should be
+        given (i.e., no string) and that the equivalency list should be
+        normalized using `_normalize_equivalencies`.
+        """
         if isinstance(other, UnrecognizedUnit):
             return False
 
-        try:
-            (self / other)._dimensionless_constant()
-        except UnitsException:
+        if (self._get_physical_type_id() ==
+                other._get_physical_type_id()):
+            return True
+        elif len(equivalencies):
             unit = self.decompose()
             other = other.decompose()
-            for equiv in equivalencies:
-                a = equiv[0]
-                b = equiv[1]
-                if (unit.is_equivalent(a) and other.is_equivalent(b)):
-                    return True
-                elif (unit.is_equivalent(b) and other.is_equivalent(a)):
-                    return True
-            return False
-        else:
-            return True
+            for a, b, forward, backward in equivalencies:
+                if b is None:
+                    # after canceling, is what's left convertable
+                    # to dimensionless (according to the equivalency)?
+                    try:
+                        (unit/other).decompose([a])
+                        return True
+                    except:
+                        pass
+                else:
+                    if(unit._is_equivalent(a) and other._is_equivalent(b) or
+                       unit._is_equivalent(b) and other._is_equivalent(a)):
+                        return True
+
+        return False
 
     def _apply_equivalences(self, unit, other, equivalencies):
         """
@@ -265,25 +804,23 @@ class UnitBase(object):
         unit = self.decompose()
         other = other.decompose()
 
-        for equiv in equivalencies:
-            if len(equiv) == 2:
-                funit, tunit = equiv
-                a, b = lambda x: x
-            if len(equiv) == 3:
-                funit, tunit, a = equiv
-                b = a
-            elif len(equiv) == 4:
-                funit, tunit, a, b = equiv
+        for funit, tunit, a, b in equivalencies:
+            if tunit is None:
+                try:
+                    ratio_in_funit = (unit/other).decompose([funit])
+                    return make_converter(ratio_in_funit.scale, a, 1.)
+                except:
+                    pass
             else:
-                raise ValueError("Invalid equivalence entry")
-            if (unit.is_equivalent(funit) and other.is_equivalent(tunit)):
-                scale1 = (unit / funit)._dimensionless_constant()
-                scale2 = (tunit / other)._dimensionless_constant()
-                return make_converter(scale1, a, scale2)
-            elif (other.is_equivalent(funit) and unit.is_equivalent(tunit)):
-                scale1 = (unit / tunit)._dimensionless_constant()
-                scale2 = (funit / other)._dimensionless_constant()
-                return make_converter(scale1, b, scale2)
+                if unit._is_equivalent(funit) and other._is_equivalent(tunit):
+                    scale1 = (unit / funit)._dimensionless_constant()
+                    scale2 = (tunit / other)._dimensionless_constant()
+                    return make_converter(scale1, a, scale2)
+                elif (other._is_equivalent(funit) and
+                      unit._is_equivalent(tunit)):
+                    scale1 = (unit / tunit)._dimensionless_constant()
+                    scale2 = (funit / other)._dimensionless_constant()
+                    return make_converter(scale1, b, scale2)
 
         def get_err_str(unit):
             unit_str = unit.to_string('unscaled')
@@ -298,7 +835,7 @@ class UnitBase(object):
         unit_str = get_err_str(orig_unit)
         other_str = get_err_str(orig_other)
 
-        raise UnitsException(
+        raise UnitsError(
             "{0} and {1} are not convertible".format(
                 unit_str, other_str))
 
@@ -310,11 +847,14 @@ class UnitBase(object):
         Parameters
         ----------
         other : unit object or string
-           The unit to convert to.
+            The unit to convert to.
 
         equivalencies : list of equivalence pairs, optional
-           A list of equivalence pairs to try if the units are not
-           directly convertible.  See :ref:`unit_equivalencies`.
+            A list of equivalence pairs to try if the units are not
+            directly convertible.  See :ref:`unit_equivalencies`.
+            This list is in addition to possible global defaults set by, e.g.,
+            `set_enabled_equivalencies`.
+            Use `None` to turn off all equivalencies.
 
         Returns
         -------
@@ -325,14 +865,19 @@ class UnitBase(object):
 
         Raises
         ------
-        UnitsException
+        UnitsError
             If units are inconsistent
         """
+        if self is other:
+            return lambda val: copy.copy(val)
+
         other = Unit(other)
 
+        equivalencies = self._normalize_equivalencies(equivalencies)
+
         try:
             scale = (self / other)._dimensionless_constant()
-        except UnitsException:
+        except UnitsError:
             return self._apply_equivalences(
                 self, other, equivalencies)
         return lambda val: scale * _condition_arg(val)
@@ -346,13 +891,16 @@ class UnitBase(object):
         other : unit object or string
             The unit to convert to.
 
-        value : scalar int or float, or sequence that can be converted to array, optional
+        value : scalar int or float, or sequence convertable to array, optional
             Value(s) in the current unit to be converted to the
             specified unit.  If not provided, defaults to 1.0
 
         equivalencies : list of equivalence pairs, optional
-           A list of equivalence pairs to try if the units are not
-           directly convertible.  See :ref:`unit_equivalencies`.
+            A list of equivalence pairs to try if the units are not
+            directly convertible.  See :ref:`unit_equivalencies`.
+            This list is in addition to possible global defaults set by, e.g.,
+            `set_enabled_equivalencies`.
+            Use `None` to turn off all equivalencies.
 
         Returns
         -------
@@ -362,9 +910,13 @@ class UnitBase(object):
 
         Raises
         ------
-        UnitException
+        UnitsError
             If units are inconsistent
         """
+        if self is other:
+            # Return a copy of value -- this works with scalars and
+            # arrays
+            return copy.copy(value)
 
         other = Unit(other)
         return self.get_converter(other, equivalencies=equivalencies)(value)
@@ -386,7 +938,7 @@ class UnitBase(object):
             The bases to decompose into.  When not provided,
             decomposes down to any irreducible units.  When provided,
             the decomposed result will only contain the given units.
-            This will raises a `UnitsException` if it's not possible
+            This will raises a `UnitsError` if it's not possible
             to do so.
 
         Returns
@@ -396,63 +948,54 @@ class UnitBase(object):
         """
         raise NotImplementedError()
 
-    def _compose(self, equivalencies=[], namespace=[], max_depth=2, depth=0):
+    def _compose(self, equivalencies=[], namespace=[], max_depth=2, depth=0,
+                 cached_results=None):
+        def make_key(unit):
+            parts = ([str(unit._scale)] +
+                     [x.name for x in unit._bases] +
+                     [str(x) for x in unit._powers])
+            return tuple(parts)
+
         def is_final_result(unit):
             # Returns True if this result contains only the expected
             # units
-            for base in unit._bases:
+            for base in unit.bases:
                 if base not in namespace:
                     return False
             return True
 
-        def sort_results(results):
-            if not len(results):
-                return []
-
-            # Sort the results so the simplest ones appear first.
-            # Simplest is defined as "the minimum sum of absolute
-            # powers" (i.e. the fewest bases), and preference should
-            # be given to results where the sum of powers is positive
-            # and the scale is exactly equal to 1.0
-            results = list(results)
-            results.sort(key=lambda x: str(x))
-            results.sort(key=lambda x: np.sum(np.abs(x.powers)))
-            results.sort(key=lambda x: np.sum(x.powers) < 0.0)
-            results.sort(key=lambda x: not np.allclose(x.scale, 1.0))
-
-            last_result = results[0]
-            filtered = [last_result]
-            for result in results[1:]:
-                if str(result) != str(last_result):
-                    filtered.append(result)
-                last_result = result
-
-            return filtered
-
         unit = self.decompose()
+        key = make_key(unit)
+
+        cached = cached_results.get(key)
+        if cached is not None:
+            if isinstance(cached, Exception):
+                raise cached
+            return cached
 
         # Prevent too many levels of recursion
+        # And special case for dimensionless unit
         if depth >= max_depth:
-            return [unit]
-
-        # Special case for dimensionless unit
-        if len(unit._bases) == 0:
+            cached_results[key] = [unit]
             return [unit]
 
         # Make a list including all of the equivalent units
         units = [unit]
-        for equiv in equivalencies:
-            funit, tunit = equiv[:2]
-            if self.is_equivalent(funit):
-                units.append(tunit.decompose())
-            elif self.is_equivalent(tunit):
-                units.append(funit.decompose())
+        for funit, tunit, a, b in equivalencies:
+            if tunit is not None:
+                if self._is_equivalent(funit):
+                    units.append(tunit.decompose())
+                elif self._is_equivalent(tunit):
+                    units.append(funit.decompose())
 
         # Store partial results
         partial_results = []
         # Store final results that reduce to a single unit or pair of
         # units
-        final_results = [set(), set()]
+        if len(unit._bases) == 0:
+            final_results = [set([unit]), set()]
+        else:
+            final_results = [set(), set()]
 
         for tunit in namespace:
             tunit_decomposed = tunit.decompose()
@@ -464,7 +1007,7 @@ class UnitBase(object):
                 # without needing to do an exhaustive search.
                 if len(tunit_decomposed.bases) == 1:
                     for base, power in zip(u._bases, u._powers):
-                        if tunit_decomposed.is_equivalent(base):
+                        if tunit_decomposed._is_equivalent(base):
                             tunit = tunit ** power
                             tunit_decomposed = tunit_decomposed ** power
                             break
@@ -481,7 +1024,8 @@ class UnitBase(object):
         # Do we have any minimal results?
         for final_result in final_results:
             if len(final_result):
-                return sort_results(final_result)
+                cached_results[key] = final_result
+                return final_result
 
         partial_results.sort(key=lambda x: x[0])
 
@@ -490,13 +1034,15 @@ class UnitBase(object):
         for len_bases, composed, tunit in partial_results:
             try:
                 composed_list = composed._compose(
-                    equivalencies=equivalencies, namespace=namespace,
-                    max_depth=max_depth, depth=depth + 1)
-            except UnitsException:
+                    equivalencies=equivalencies,
+                    namespace=namespace,
+                    max_depth=max_depth, depth=depth + 1,
+                    cached_results=cached_results)
+            except UnitsError:
                 composed_list = []
             for subcomposed in composed_list:
                 results.append(
-                    (len(subcomposed._bases), subcomposed, tunit))
+                    (len(subcomposed.bases), subcomposed, tunit))
 
         if len(results):
             results.sort(key=lambda x: x[0])
@@ -509,17 +1055,21 @@ class UnitBase(object):
                 else:
                     factored = composed * tunit
                     if is_final_result(factored):
-                        subresults.add(composed * tunit)
+                        subresults.add(factored)
 
             if len(subresults):
-                return sort_results(subresults)
+                cached_results[key] = subresults
+                return subresults
 
         for base in self.bases:
             if base not in namespace:
-                raise UnitsException(
+                result = UnitsError(
                     "Cannot represent unit {0} in terms of the given "
                     "units".format(self))
+                cached_results[key] = result
+                raise result
 
+        cached_results[key] = [self]
         return [self]
 
     def compose(self, equivalencies=[], units=None, max_depth=2,
@@ -534,6 +1084,9 @@ class UnitBase(object):
         equivalencies : list of equivalence pairs, optional
             A list of equivalence pairs to also list.  See
             :ref:`unit_equivalencies`.
+            This list is in addition to possible global defaults set by, e.g.,
+            `set_enabled_equivalencies`.
+            Use `None` to turn off all equivalencies.
 
         units : set of units to compose to, optional
             If not provided, any known units may be used to compose
@@ -556,6 +1109,9 @@ class UnitBase(object):
             automatically determine which of the candidates are
             better.
         """
+        # Pre-normalize the equivalencies list
+        equivalencies = self._normalize_equivalencies(equivalencies)
+
         def filter_units(units):
             filtered_namespace = set()
             for tunit in units:
@@ -566,17 +1122,47 @@ class UnitBase(object):
             return filtered_namespace
 
         if units is None:
-            units = filter_units(UnitBase._registry.values())
+            units = filter_units(self._get_units_with_same_physical_type(
+                equivalencies=equivalencies))
+            if len(units) == 0:
+                units = get_current_unit_registry().non_prefix_units
         elif isinstance(units, dict):
-            units = set(filter_units(units.itervalues()))
+            units = set(filter_units(six.itervalues(units)))
         elif inspect.ismodule(units):
-            units = filter_units(vars(units).itervalues())
+            units = filter_units(six.itervalues(vars(units)))
         else:
-            units = set(units)
+            units = filter_units(_flatten_units_collection(units))
+
+        if not len(units):
+            raise UnitsError("No units to compose into.")
+
+        def sort_results(results):
+            if not len(results):
+                return []
+
+            # Sort the results so the simplest ones appear first.
+            # Simplest is defined as "the minimum sum of absolute
+            # powers" (i.e. the fewest bases), and preference should
+            # be given to results where the sum of powers is positive
+            # and the scale is exactly equal to 1.0
+            results = list(results)
+            results.sort(key=lambda x: np.abs(x.scale))
+            results.sort(key=lambda x: np.sum(np.abs(x.powers)))
+            results.sort(key=lambda x: np.sum(x.powers) < 0.0)
+            results.sort(key=lambda x: not np.allclose(x.scale, 1.0))
+
+            last_result = results[0]
+            filtered = [last_result]
+            for result in results[1:]:
+                if str(result) != str(last_result):
+                    filtered.append(result)
+                last_result = result
+
+            return filtered
 
-        return self._compose(
+        return sort_results(self._compose(
             equivalencies=equivalencies, namespace=units,
-            max_depth=max_depth, depth=0)
+            max_depth=max_depth, depth=0, cached_results={}))
 
     def to_system(self, system):
         """
@@ -607,15 +1193,16 @@ class UnitBase(object):
             # 'np.inf' as 'score value'.  It does not really matter which
             # number we would return. This case occurs for instance for
             # dimensionless quantities:
-            if len(compose._bases) == 0:
+            compose_bases = compose.bases
+            if len(compose_bases) == 0:
                 return np.inf
             else:
                 sum = 0
-                for base in compose._bases:
+                for base in compose_bases:
                     if base in bases:
                         sum += 1
 
-                return sum / float(len(compose._bases))
+                return sum / float(len(compose_bases))
 
         x = self.decompose(bases=bases)
         composed = x.compose(units=system)
@@ -623,18 +1210,68 @@ class UnitBase(object):
         return composed
 
     @property
+    def si(self):
+        """
+        Returns a copy of the current `Unit` instance in SI units.
+        """
+
+        from . import si
+        return self.to_system(si)[0]
+
+    @property
+    def cgs(self):
+        """
+        Returns a copy of the current `Unit` instance with CGS units.
+        """
+        from . import cgs
+        return self.to_system(cgs)[0]
+
+    @property
     def physical_type(self):
         """
         Return the physical type on the unit.
 
         Examples
         --------
-        >>> u.m.physical_type
-        'length'
+        >>> from astropy import units as u
+        >>> print(u.m.physical_type)
+        length
+
         """
         from . import physical
         return physical.get_physical_type(self)
 
+    def _get_units_with_same_physical_type(self, equivalencies=[]):
+        """
+        Return a list of registered units with the same physical type
+        as this unit.
+
+        This function is used by Quantity to add its built-in
+        conversions to equivalent units.
+
+        This is a private method, since end users should be encouraged
+        to use the more powerful `compose` and `find_equivalent_units`
+        methods (which use this under the hood).
+
+        Parameters
+        ----------
+        equivalencies : list of equivalence pairs, optional
+            A list of equivalence pairs to also pull options from.
+            See :ref:`unit_equivalencies`.  It must already be
+            normalized using `_normalize_equivalencies`.
+        """
+        unit_registry = get_current_unit_registry()
+        units = set(unit_registry.get_units_with_physical_type(self))
+        for funit, tunit, a, b in equivalencies:
+            if tunit is not None:
+                if funit not in units:
+                    units.update(
+                        unit_registry.get_units_with_physical_type(funit))
+                if tunit not in units:
+                    units.update(
+                        unit_registry.get_units_with_physical_type(tunit))
+        return units
+
     class EquivalentUnitsList(list):
         """
         A class to handle pretty-printing the result of
@@ -680,6 +1317,8 @@ class UnitBase(object):
         equivalencies : list of equivalence pairs, optional
             A list of equivalence pairs to also list.  See
             :ref:`unit_equivalencies`.
+            Any list given, including an empty one, supercedes global defaults
+            that may be in effect (as set by `set_enabled_equivalencies`)
 
         units : set of units to search in, optional
             If not provided, all defined units will be searched for
@@ -701,9 +1340,15 @@ class UnitBase(object):
             equivalencies=equivalencies, units=units, max_depth=1,
             include_prefix_units=include_prefix_units)
         results = [
-            x._bases[0] for x in results if len(x._bases) == 1]
+            x.bases[0] for x in results if len(x.bases) == 1]
         return self.EquivalentUnitsList(results)
 
+    def is_unity(self):
+        """
+        Returns `True` if the unit is unscaled and dimensionless.
+        """
+        return False
+
 
 class NamedUnit(UnitBase):
     """
@@ -711,14 +1356,19 @@ class NamedUnit(UnitBase):
 
     Parameters
     ----------
-    st : str or list of str
-        The name of the unit.  If a list, the first element is the
-        canonical (short) name, and the rest of the elements are
-        aliases.
-
-    register : boolean, optional
-        When `True`, also register the unit in the standard unit
-        namespace.  Default is `False`.
+    st : str, list of str, 2-tuple
+        The name of the unit.  If a list of strings, the first element
+        is the canonical (short) name, and the rest of the elements
+        are aliases.  If a tuple of lists, the first element is a list
+        of short names, and the second element is a list of long
+        names; all but the first short name are considered "aliases".
+        Each name *should* be a valid Python identifier to make it
+        easy to access, but this is not required.
+
+    namespace : dict, optional
+        When provided, inject the unit, and all of its aliases, in the
+        given namespace dictionary.  If a unit by the same name is
+        already in the namespace, a ValueError is raised.
 
     doc : str, optional
         A docstring describing the unit.
@@ -739,16 +1389,37 @@ class NamedUnit(UnitBase):
     ValueError
         If any of the given unit names are not valid Python tokens.
     """
-    def __init__(self, st, register=False, doc=None, format=None):
+    def __init__(self, st, register=None, doc=None, format=None,
+                 namespace=None):
+        if register is not None:
+            warnings.warn(
+                "The registry kwarg was removed in astropy 0.3. "
+                "Use the namespace kwarg to inject the unit into "
+                "a namespace and add_enabled_units() to enable it "
+                "in the global unit registry.",
+                DeprecationWarning)
+
         UnitBase.__init__(self)
 
-        if isinstance(st, (bytes, unicode)):
+        if isinstance(st, (bytes, six.text_type)):
             self._names = [st]
+            self._short_names = [st]
+            self._long_names = []
+        elif isinstance(st, tuple):
+            if not len(st) == 2:
+                raise ValueError("st must be string, list or 2-tuple")
+            self._names = st[0] + st[1]
+            if not len(self._names):
+                raise ValueError("must provide at least one name")
+            self._short_names = st[0][:]
+            self._long_names = st[1][:]
         else:
             if len(st) == 0:
                 raise ValueError(
                     "st list must have at least one entry")
             self._names = st[:]
+            self._short_names = [st[0]]
+            self._long_names = st[1:]
 
         if format is None:
             format = {}
@@ -762,7 +1433,7 @@ class NamedUnit(UnitBase):
 
         self.__doc__ = doc
 
-        self._register_unit(register)
+        self._inject(namespace)
 
     def _generate_doc(self):
         """
@@ -817,44 +1488,49 @@ class NamedUnit(UnitBase):
         """
         return self._names[1:]
 
-    def _register_unit(self, register):
+    @property
+    def short_names(self):
+        """
+        Returns all of the short names associated with this unit.
+        """
+        return self._short_names
+
+    @property
+    def long_names(self):
+        """
+        Returns all of the long names associated with this unit.
         """
-        Registers the unit in the registry, and optionally in another
-        namespace.  It is registered under all of the names and
-        aliases given to the constructor.
+        return self._long_names
 
-        The namespace used is set with `UnitBase._set_namespace`.
+    def register(self, add_to_namespace=False):
+        raise NotImplementedError(
+            "The register method has been removed in astropy 0.3. "
+            "Use add_enabled_units/set_enabled_units instead.")
 
-        Parameters
-        ----------
-        register : bool
-            When `True`, register the unit in the external namespace
-            as well as the central registry.
+    def deregister(self, remove_from_namespace=False):
+        raise NotImplementedError(
+            "The deregister method has been removed in astropy 0.3. "
+            "Use add_enabled_units/set_enabled_units instead.")
+
+    def _inject(self, namespace=None):
+        """
+        Injects the unit, and all of its aliases, in the given
+        namespace dictionary.
         """
-        if not self._names:
-            raise UnitsException("unit has no string representation")
+        if namespace is None:
+            return
 
-        # Loop through all of the names first, to ensure of all them
+        # Loop through all of the names first, to ensure all of them
         # are new, then add them all as a single "transaction" below.
-        cls = self.__class__
-        for st in self._names:
-            if not re.match("^[A-Za-z_]+$", st):
-                # will cause problems for simple string parser in
-                # unit() factory
+        for name in self._names:
+            if name in namespace and self != namespace[name]:
                 raise ValueError(
-                    "Invalid unit name {0!r}".format(st))
-
-            if (register and st in self._namespace or (st in cls._registry and
-                    cls._registry[st] != self)):
-                raise ValueError(
-                    "Object with name {0!r} already exists "
-                    "in namespace.".format(st))
-
-        for st in self._names:
-            if register:
-                self._namespace[st] = self
+                    "Object with name {0!r} already exists in "
+                    "given namespace ({1!r}).".format(
+                        name, namespace[name]))
 
-            self._registry[st] = self
+        for name in self._names:
+            namespace[name] = self
 
 
 def _recreate_irreducible_unit(names, registered):
@@ -862,11 +1538,13 @@ def _recreate_irreducible_unit(names, registered):
     This is used to reconstruct units when passed around by
     multiprocessing.
     """
-    namespace = UnitBase._get_namespace()
-    if names[0] in namespace:
-        return namespace[names[0]]
+    registry = get_current_unit_registry().registry
+    if names[0] in registry:
+        return registry[names[0]]
     else:
-        return IrreducibleUnit(names, register=registered)
+        unit = IrreducibleUnit(names)
+        if registered:
+            get_current_unit_registry().add_enabled_units([unit])
 
 
 class IrreducibleUnit(NamedUnit):
@@ -884,39 +1562,19 @@ class IrreducibleUnit(NamedUnit):
         # objects, or they will be considered "unconvertible".
         # Therefore, we have a custom pickler/unpickler that
         # understands how to recreate the Unit on the other side.
-        namespace = UnitBase._get_namespace()
+        registry = get_current_unit_registry().registry
         return (_recreate_irreducible_unit,
-                (self.names, self.names[0] in namespace),
+                (list(self.names), self.name in registry),
                 self.__dict__)
 
-    @property
-    def scale(self):
-        """
-        Return the scale of the unit.
-        """
-        return 1.0
-
-    @property
-    def bases(self):
-        """
-        Return the bases of the unit.
-        """
-        return [self]
-
-    @property
-    def powers(self):
-        """
-        Return the powers of the unit.
-        """
-        return [1.0]
-
     def decompose(self, bases=set()):
         if len(bases) and not self in bases:
             for base in bases:
-                if self.is_equivalent(base):
+                # to avoid roundrip, ensure no default equivalencies get used
+                if self.is_equivalent(base, equivalencies=[]):
                     return CompositeUnit(self.to(base), [base], [1])
 
-            raise UnitsException(
+            raise UnitsError(
                 "Unit {0} can not be decomposed into the requested "
                 "bases".format(self))
 
@@ -941,23 +1599,27 @@ class UnrecognizedUnit(IrreducibleUnit):
     def __repr__(self):
         return "UnrecognizedUnit({0})".format(str(self))
 
-    def __str__(self):
+    def __bytes__(self):
+        return self.name.encode('ascii', 'replace')
+    if sys.version_info[0] < 3:
+        __str__ = __bytes__
+
+    def __unicode__(self):
         return self.name
+    if sys.version_info[0] >= 3:
+        __str__ = __unicode__
 
     def to_string(self, format='generic'):
         return self.name
 
-    def _register_unit(self, register):
-        pass
-
     def _unrecognized_operator(self, *args, **kwargs):
         raise ValueError(
             "The unit {0!r} is unrecognized, so all arithmetic operations "
             "with it are invalid.".format(self.name))
 
     __pow__ = __div__ = __rdiv__ = __truediv__ = __rtruediv__ = __mul__ = \
-               __rmul__ = __lt__ = __gt__ = __le__ = __ge__ = __neg__ = \
-               _unrecognized_operator
+        __rmul__ = __lt__ = __gt__ = __le__ = __ge__ = __neg__ = \
+        _unrecognized_operator
 
     def __eq__(self, other):
         other = Unit(other, parse_strict='silent')
@@ -966,10 +1628,12 @@ class UnrecognizedUnit(IrreducibleUnit):
     def __ne__(self, other):
         return not (self == other)
 
-    def is_equivalent(self, other, equivalencies=[]):
+    def is_equivalent(self, other, equivalencies=None):
+        self._normalize_equivalencies(equivalencies)
         return self == other
 
-    def get_converter(self, other, equivalencies=[]):
+    def get_converter(self, other, equivalencies=None):
+        self._normalize_equivalencies(equivalencies)
         raise ValueError(
             "The unit {0!r} is unrecognized.  It can not be converted "
             "to other units.".format(self.name))
@@ -977,6 +1641,9 @@ class UnrecognizedUnit(IrreducibleUnit):
     def get_format_name(self, format):
         return self.name
 
+    def is_unity(self):
+        return False
+
 
 class _UnitMetaClass(type):
     """
@@ -986,7 +1653,7 @@ class _UnitMetaClass(type):
     can return an existing one.
     """
 
-    def __call__(self, s, represents=None, format=None, register=False,
+    def __call__(self, s, represents=None, format=None, namespace=None,
                  doc=None, parse_strict='raise'):
 
         from .quantity import Quantity
@@ -1015,12 +1682,12 @@ class _UnitMetaClass(type):
             # This has the effect of calling the real __new__ and
             # __init__ on the Unit class.
             return super(_UnitMetaClass, self).__call__(
-                s, represents, format=format, register=register, doc=doc)
+                s, represents, format=format, namespace=namespace, doc=doc)
 
         elif isinstance(s, UnitBase):
             return s
 
-        elif isinstance(s, (bytes, unicode)):
+        elif isinstance(s, (bytes, six.text_type)):
             if len(s.strip()) == 0:
                 # Return the NULL unit
                 return CompositeUnit(1.0, [], [])
@@ -1029,21 +1696,24 @@ class _UnitMetaClass(type):
                 format = 'generic'
 
             f = unit_format.get_format(format)
+            if sys.version_info[0] >= 3 and isinstance(s, bytes):
+                s = s.decode('ascii')
+
             try:
                 return f.parse(s)
             except Exception as e:
                 if parse_strict == 'silent':
                     pass
                 else:
-                    msg = "'{0}' did not parse as unit format '{1}': {2}".format(
-                        s, format, str(e))
+                    msg = ("'{0}' did not parse as unit format '{1}': {2}"
+                           .format(s, format, str(e)))
                     if parse_strict == 'raise':
                         raise ValueError(msg)
                     elif parse_strict == 'warn':
                         warnings.warn(msg, UnitsWarning)
                     else:
-                        raise ValueError(
-                            "'parse_strict' must be 'warn', 'raise' or 'silent'")
+                        raise ValueError("'parse_strict' must be 'warn', "
+                                         "'raise' or 'silent'")
                 return UnrecognizedUnit(s)
 
         elif isinstance(s, (int, float, np.floating, np.integer)):
@@ -1056,6 +1726,7 @@ class _UnitMetaClass(type):
             raise TypeError("{0} can not be converted to a Unit".format(s))
 
 
+ at six.add_metaclass(_UnitMetaClass)
 class Unit(NamedUnit):
     """
     The main unit class.
@@ -1116,10 +1787,6 @@ class Unit(NamedUnit):
     represents : UnitBase instance
         The unit that this named unit represents.
 
-    register : boolean, optional
-        When `True`, also register the unit in the standard unit
-        namespace.  Default is `False`.
-
     doc : str, optional
         A docstring describing the unit.
 
@@ -1131,6 +1798,10 @@ class Unit(NamedUnit):
 
             {'latex': r'\\Omega'}
 
+    namespace : dictionary, optional
+        When provided, inject the unit (and all of its aliases) into
+        the given namespace.
+
     Raises
     ------
     ValueError
@@ -1139,21 +1810,32 @@ class Unit(NamedUnit):
     ValueError
         If any of the given unit names are not valid Python tokens.
     """
-    __metaclass__ = _UnitMetaClass
 
-    def __init__(self, st, represents=None, register=False, doc=None,
-                 format=None):
+    def __init__(self, st, represents=None, register=None, doc=None,
+                 format=None, namespace=None):
+
+        if register is not None:
+            warnings.warn(
+                "The registry kwarg was removed in astropy 0.3. "
+                "Use the namespace kwarg to inject the unit into "
+                "a namespace and add_enabled_units() to enable it "
+                "in the global unit registry.",
+                DeprecationWarning)
 
         represents = Unit(represents)
         self._represents = represents
 
-        NamedUnit.__init__(self, st, register=register, doc=doc,
+        NamedUnit.__init__(self, st, namespace=namespace, doc=doc,
                            format=format)
 
     def decompose(self, bases=set()):
         return self._represents.decompose(bases=bases)
     decompose.__doc__ = UnitBase.decompose.__doc__
 
+    def is_unity(self):
+        return self._represents.is_unity()
+    is_unity.__doc__ = UnitBase.is_unity.__doc__
+
 
 class PrefixUnit(Unit):
     """
@@ -1187,7 +1869,8 @@ class CompositeUnit(UnitBase):
         A sequence of powers (in parallel with `bases`) for each
         of the base units.
     """
-    def __init__(self, scale, bases, powers):
+    def __init__(self, scale, bases, powers, decompose=False,
+                 decompose_bases=set()):
         if scale == 1. or is_effectively_unity(scale):
             scale = 1
         self._scale = scale
@@ -1195,8 +1878,10 @@ class CompositeUnit(UnitBase):
             if not isinstance(base, UnitBase):
                 raise TypeError("bases must be sequence of UnitBase instances")
         self._bases = bases
+        powers = [self._validate_power(p) for p in powers]
         self._powers = powers
         self._decomposed_cache = None
+        self._expand_and_gather(decompose=decompose, bases=decompose_bases)
 
     def __repr__(self):
         if len(self._bases):
@@ -1209,9 +1894,10 @@ class CompositeUnit(UnitBase):
                 return 'Unit(dimensionless)'
 
     def __hash__(self):
-        parts = zip((hash(x) for x in self._bases), self._powers)
-        parts.sort()
-        return hash(tuple([self._scale] + parts))
+        parts = ([str(self._scale)] +
+                 [x.name for x in self._bases] +
+                 [str(x) for x in self._powers])
+        return hash(tuple(parts))
 
     @property
     def scale(self):
@@ -1236,9 +1922,9 @@ class CompositeUnit(UnitBase):
 
     def _expand_and_gather(self, decompose=False, bases=set()):
         def add_unit(unit, power, scale):
-            if len(bases) and unit not in bases:
+            if unit not in bases:
                 for base in bases:
-                    if unit.is_equivalent(base):
+                    if unit._is_equivalent(base):
                         scale *= unit.to(base) ** power
                         unit = base
                         break
@@ -1253,7 +1939,7 @@ class CompositeUnit(UnitBase):
         scale = self.scale
 
         for b, p in zip(self.bases, self.powers):
-            if decompose and (not len(bases) or b not in bases):
+            if decompose and b not in bases:
                 b = b.decompose(bases=bases)
 
             if isinstance(b, CompositeUnit):
@@ -1263,8 +1949,8 @@ class CompositeUnit(UnitBase):
             else:
                 scale = add_unit(b, p, scale)
 
-        new_parts = [x for x in new_parts.items() if x[1] != 0]
-        new_parts.sort(key=lambda x: x[1], reverse=True)
+        new_parts = [x for x in six.iteritems(new_parts) if x[1] != 0]
+        new_parts.sort(key=lambda x: (-x[1], getattr(x[0], 'name', '')))
 
         self._bases = [x[0] for x in new_parts]
         self._powers = [x[1] for x in new_parts]
@@ -1280,11 +1966,6 @@ class CompositeUnit(UnitBase):
         """
         return CompositeUnit(self._scale, self._bases[:], self._powers[:])
 
-    def _simplify(self):
-        self._expand_and_gather()
-        return self
-    _simplify.__doc__ = UnitBase._simplify.__doc__
-
     def decompose(self, bases=set()):
         if len(bases) == 0 and self._decomposed_cache is not None:
             return self._decomposed_cache
@@ -1298,8 +1979,8 @@ class CompositeUnit(UnitBase):
                 self._decomposed_cache = self
             return self
 
-        x = CompositeUnit(self.scale, self.bases, self.powers)
-        x._expand_and_gather(True, bases=bases)
+        x = CompositeUnit(self.scale, self.bases, self.powers, decompose=True,
+                          decompose_bases=bases)
         if len(bases) == 0:
             self._decomposed_cache = x
         return x
@@ -1316,10 +1997,14 @@ class CompositeUnit(UnitBase):
         x = self.decompose()
         c = x.scale
         if len(x.bases):
-            raise UnitsException(
+            raise UnitsError(
                 "'{0}' is not dimensionless".format(self.to_string()))
         return c
 
+    def is_unity(self):
+        unit = self.decompose()
+        return len(unit.bases) == 0 and unit.scale == 1
+
 
 si_prefixes = [
     (['Y'], ['yotta'], 1e24),
@@ -1345,7 +2030,7 @@ si_prefixes = [
 ]
 
 
-def _add_prefixes(u, excludes=[], register=False):
+def _add_prefixes(u, excludes=[], namespace=None, prefixes=False):
     """
     Set up all of the standard metric prefixes for a unit.  This
     function should not be used directly, but instead use the
@@ -1357,18 +2042,28 @@ def _add_prefixes(u, excludes=[], register=False):
         Any prefixes to exclude from creation to avoid namespace
         collisions.
 
-    register : bool, optional
-        When `True`, also register the unit in the standard unit
-        namespace.  Default is `False`.
+    namespace : dict, optional
+        When provided, inject the unit (and all of its aliases) into
+        the given namespace dictionary.
+
+    prefixes : list, optional
+        When provided, it is a list of prefix definitions of the form:
+
+            (short_names, long_tables, factor)
     """
-    for short, long, factor in si_prefixes:
+    if prefixes is True:
+        prefixes = si_prefixes
+    elif prefixes is False:
+        prefixes = []
+
+    for short, full, factor in prefixes:
         names = []
         format = {}
         for prefix in short:
             if prefix in excludes:
                 continue
 
-            for alias in [u.name] + [x for x in u.aliases if len(x) <= 2]:
+            for alias in u.short_names:
                 names.append(prefix + alias)
 
                 # This is a hack to use Greek mu as a prefix
@@ -1377,24 +2072,24 @@ def _add_prefixes(u, excludes=[], register=False):
                     format['latex'] = r'\mu ' + u.get_format_name('latex')
                     format['unicode'] = 'μ' + u.get_format_name('unicode')
 
-                for key, val in u._format.items():
+                for key, val in six.iteritems(u._format):
                     format.setdefault(key, prefix + val)
 
-        for prefix in long:
+        for prefix in full:
             if prefix in excludes:
                 continue
 
-            for alias in u.aliases:
-                if len(alias) > 2:
-                    names.append(prefix + alias)
+            for alias in u.long_names:
+                names.append(prefix + alias)
 
         if len(names):
             PrefixUnit(names, CompositeUnit(factor, [u], [1]),
-                       register=register, format=format)
+                       namespace=namespace, format=format)
 
 
 def def_unit(s, represents=None, register=None, doc=None,
-             format=None, prefixes=False, exclude_prefixes=[]):
+             format=None, prefixes=False, exclude_prefixes=[],
+             namespace=None):
     """
     Factory function for defining new units.
 
@@ -1409,10 +2104,6 @@ def def_unit(s, represents=None, register=None, doc=None,
         The unit that this named unit represents.  If not provided,
         a new `IrreducibleUnit` is created.
 
-    register : boolean, optional
-        When `True`, also register the unit in the standard unit
-        namespace.  Default is `False`.
-
     doc : str, optional
         A docstring describing the unit.
 
@@ -1425,12 +2116,17 @@ def def_unit(s, represents=None, register=None, doc=None,
 
             {'latex': r'\\Omega'}
 
-    prefixes : bool, optional
+    prefixes : bool or list, optional
         When `True`, generate all of the SI prefixed versions of the
-        unit as well.  For example, for a given unit `m`, will generate
-        `mm`, `cm`, `km`, etc.  Default is `False`.  This function
-        always returns the base unit object, even if multiple scaled
-        versions of the unit were created.
+        unit as well.  For example, for a given unit `m`, will
+        generate `mm`, `cm`, `km`, etc.  When a list, it is a list of
+        prefix definitions of the form:
+
+            (short_names, long_tables, factor)
+
+        Default is `False`.  This function always returns the base
+        unit object, even if multiple scaled versions of the unit were
+        created.
 
     exclude_prefixes : list of str, optional
         If any of the SI prefixes need to be excluded, they may be
@@ -1439,23 +2135,34 @@ def def_unit(s, represents=None, register=None, doc=None,
         prefixes for `a`, `exclude_prefixes` should be set to
         ``["P"]``.
 
+    namespace : dict, optional
+        When provided, inject the unit (and all of its aliases and
+        prefixes), into the given namespace dictionary.
+
     Returns
     -------
     unit : `UnitBase` object
         The newly-defined unit, or a matching unit that was already
         defined.
     """
+    if register is not None:
+        warnings.warn(
+            "The registry kwarg was removed in astropy 0.3. "
+            "Use the namespace kwarg to inject the unit into "
+            "a namespace and add_enabled_units() to enable it "
+            "in the global unit registry.",
+            DeprecationWarning)
 
-    if register is None:
-        register = False
     if represents is not None:
-        result = Unit(s, represents, register=register, doc=doc,
+        result = Unit(s, represents, namespace=namespace, doc=doc,
                       format=format)
     else:
-        result = IrreducibleUnit(s, register=register, doc=doc, format=format)
+        result = IrreducibleUnit(
+            s, namespace=namespace, doc=doc, format=format)
 
     if prefixes:
-        _add_prefixes(result, excludes=exclude_prefixes, register=register)
+        _add_prefixes(result, excludes=exclude_prefixes, namespace=namespace,
+                      prefixes=prefixes)
     return result
 
 
@@ -1468,7 +2175,7 @@ def _condition_arg(value):
 
     Parameters
     ----------
-    value: int or float value, or sequence of such values
+    value : int or float value, or sequence of such values
 
     Returns
     -------
@@ -1479,17 +2186,21 @@ def _condition_arg(value):
     ValueError
         If value is not as expected
     """
-    if isinstance(value, (float, int, long)):
+    if isinstance(value, (float, six.integer_types, complex)):
         return value
     else:
         try:
             avalue = np.array(value)
-            if not avalue.dtype.kind in ['i', 'f']:
-                raise ValueError("Must be convertable to int or float array")
+            if not avalue.dtype.kind in ['i', 'f', 'c']:
+                raise ValueError(
+                    "Must be convertable to int, float or complex array")
             if ma.isMaskedArray(value):
                 return value
             return avalue
         except ValueError:
             raise ValueError(
-                "Value not scalar compatible or convertable into a float or "
-                "integer array")
+                "Value not scalar compatible or convertable into a int, "
+                "float, or complex array")
+
+
+dimensionless_unscaled = CompositeUnit(1, [], [])
diff --git a/astropy/units/equivalencies.py b/astropy/units/equivalencies.py
index fd11cfc..b80a37f 100644
--- a/astropy/units/equivalencies.py
+++ b/astropy/units/equivalencies.py
@@ -10,55 +10,136 @@ from __future__ import (absolute_import, division, print_function,
 from ..constants import si as _si
 from . import si
 from . import cgs
+from . import astrophys
 
-__all__ = ['spectral', 'spectral_density']
+__all__ = ['parallax', 'spectral', 'spectral_density', 'doppler_radio',
+           'doppler_optical', 'doppler_relativistic', 'mass_energy',
+           'brightness_temperature', 'dimensionless_angles']
+
+
+def dimensionless_angles():
+    """Allow angles to be equivalent to dimensionless (with 1 rad = 1 m/m = 1).
+
+    It is special compared to other equivalency pairs in that it
+    allows this independent of the power to which the angle is raised,
+    and indepedent of whether it is part of a more complicated unit.
+    """
+    return [(si.radian, None)]
+
+
+def parallax():
+    """
+    Returns a list of equivalence pairs that handle the conversion
+    between parallax angle and distance.
+    """
+    return [
+        (si.arcsecond, astrophys.parsec, lambda x: 1. / x)
+    ]
 
 
 def spectral():
     """
     Returns a list of equivalence pairs that handle spectral
-    wavelength, frequency, and energy equivalences.
+    wavelength, wave number, frequency, and energy equivalences.
 
-    Allows conversions between wavelength units, frequency units and
-    energy units as they relate to light.
-    """
+    Allows conversions between wavelength units, wave number units,
+    frequency units, and energy units as they relate to light.
 
+    """
+    hc = _si.h.value * _si.c.value
+    inv_m = si.m ** -1
     return [
         (si.m, si.Hz, lambda x: _si.c.value / x),
-        (si.m, si.J, lambda x: (_si.c.value * _si.h.value) / x),
-        (si.Hz, si.J, lambda x: _si.h.value * x)
+        (si.m, si.J, lambda x: hc / x),
+        (si.m, inv_m, lambda x: 1.0 / x),
+        (si.Hz, si.J, lambda x: _si.h.value * x, lambda x: x / _si.h.value),
+        (si.Hz, inv_m, lambda x: x / _si.c.value, lambda x: _si.c.value * x),
+        (si.J, inv_m, lambda x: x / hc, lambda x: hc * x)
     ]
 
 
-def spectral_density(sunit, sfactor):
+def spectral_density(wav, factor=None):
     """
     Returns a list of equivalence pairs that handle spectral density
     with regard to wavelength and frequency.
+
+    Parameters
+    ----------
+    wav : Quantity
+        Quantity associated with values being converted
+        (e.g., wavelength or frequency).
+
+    Notes
+    -----
+    The ``factor`` argument is left for backward-compatibility with the syntax
+    ``spectral_density(unit, factor)`` but users are encouraged to use
+    ``spectral_density(factor * unit)`` instead.
+
     """
-    c_Aps = _si.c.value * 10 ** 10
+    from .core import UnitBase
+
+    if isinstance(wav, UnitBase):
+        if factor is None:
+            raise ValueError(
+                'If ``wav`` is specified as a unit, ``factor`` should be set')
+        wav = factor * wav   # Convert to Quantity
+
+    c_Aps = _si.c.to(si.AA / si.s).value  # Angstrom/s
+    h_cgs = _si.h.cgs.value  # erg * s
+    hc = c_Aps * h_cgs
 
     fla = cgs.erg / si.angstrom / si.cm ** 2 / si.s
     fnu = cgs.erg / si.Hz / si.cm ** 2 / si.s
     nufnu = cgs.erg / si.cm ** 2 / si.s
     lafla = nufnu
+    photlam = astrophys.photon / (si.cm ** 2 * si.s * si.AA)
+    photnu = astrophys.photon / (si.cm ** 2 * si.s * si.Hz)
 
     def converter(x):
-        return x * (sunit.to(si.AA, sfactor, spectral()) ** 2 / c_Aps)
+        return x * (wav.to(si.AA, spectral()).value ** 2 / c_Aps)
 
     def iconverter(x):
-        return x / (sunit.to(si.AA, sfactor, spectral()) ** 2 / c_Aps)
+        return x / (wav.to(si.AA, spectral()).value ** 2 / c_Aps)
 
     def converter_fnu_nufnu(x):
-        return x * sunit.to(si.Hz, sfactor, spectral())
+        return x * wav.to(si.Hz, spectral()).value
 
     def iconverter_fnu_nufnu(x):
-        return x / sunit.to(si.Hz, sfactor, spectral())
+        return x / wav.to(si.Hz, spectral()).value
 
     def converter_fla_lafla(x):
-        return x * sunit.to(si.AA, sfactor, spectral())
+        return x * wav.to(si.AA, spectral()).value
 
     def iconverter_fla_lafla(x):
-        return x / sunit.to(si.AA, sfactor, spectral())
+        return x / wav.to(si.AA, spectral()).value
+
+    def converter_photlam_fla(x):
+        return hc * x / wav.to(si.AA, spectral()).value
+
+    def iconverter_photlam_fla(x):
+        return x * wav.to(si.AA, spectral()).value / hc
+
+    def converter_photlam_fnu(x):
+        return h_cgs * x * wav.to(si.AA, spectral()).value
+
+    def iconverter_photlam_fnu(x):
+        return x / (wav.to(si.AA, spectral()).value * h_cgs)
+
+    def converter_photlam_photnu(x):
+        return x * wav.to(si.AA, spectral()).value ** 2 / c_Aps
+
+    def iconverter_photlam_photnu(x):
+        return c_Aps * x / wav.to(si.AA, spectral()).value ** 2
+
+    converter_photnu_fnu = converter_photlam_fla
+
+    iconverter_photnu_fnu = iconverter_photlam_fla
+
+    def converter_photnu_fla(x):
+        return x * hc * c_Aps / wav.to(si.AA, spectral()).value ** 3
+
+    def iconverter_photnu_fla(x):
+        return x * wav.to(si.AA, spectral()).value ** 3 / (hc * c_Aps)
 
     return [
         (si.AA, fnu, converter, iconverter),
@@ -67,4 +148,288 @@ def spectral_density(sunit, sfactor):
         (fla, si.Hz, converter, iconverter),
         (fnu, nufnu, converter_fnu_nufnu, iconverter_fnu_nufnu),
         (fla, lafla, converter_fla_lafla, iconverter_fla_lafla),
+        (photlam, fla, converter_photlam_fla, iconverter_photlam_fla),
+        (photlam, fnu, converter_photlam_fnu, iconverter_photlam_fnu),
+        (photlam, photnu, converter_photlam_photnu, iconverter_photlam_photnu),
+        (photnu, fnu, converter_photnu_fnu, iconverter_photnu_fnu),
+        (photnu, fla, converter_photnu_fla, iconverter_photnu_fla)
+    ]
+
+
+def doppler_radio(rest):
+    r"""
+    Return the equivalency pairs for the radio convention for velocity.
+
+    The radio convention for the relation between velocity and frequency is:
+
+    :math:`V = c \frac{f_0 - f}{f_0}  ;  f(V) = f_0 ( 1 - V/c )`
+
+    Parameters
+    ----------
+    rest : Quantity
+        Any quantity supported by the standard spectral equivalencies
+        (wavelength, energy, frequency, wave number).
+
+    References
+    ----------
+    `NRAO site defining the conventions <http://www.gb.nrao.edu/~fghigo/gbtdoc/doppler.html>`_
+
+    Examples
+    --------
+    >>> import astropy.units as u
+    >>> CO_restfreq = 115.27120*u.GHz  # rest frequency of 12 CO 1-0 in GHz
+    >>> radio_CO_equiv = u.doppler_radio(CO_restfreq)
+    >>> measured_freq = 115.2832*u.GHz
+    >>> radio_velocity = measured_freq.to(u.km/u.s, equivalencies=radio_CO_equiv)
+    >>> radio_velocity
+    <Quantity -31.2090920889... km / s>
+    """
+
+    ckms = _si.c.to('km/s').value
+
+    def to_vel_freq(x):
+        restfreq = rest.to(si.Hz, equivalencies=spectral()).value
+        return (restfreq-x) / (restfreq) * ckms
+
+    def from_vel_freq(x):
+        restfreq = rest.to(si.Hz, equivalencies=spectral()).value
+        voverc = x/ckms
+        return restfreq * (1-voverc)
+
+
+    def to_vel_wav(x):
+        restwav = rest.to(si.AA, spectral()).value
+        return (x-restwav) / (x) * ckms
+
+    def from_vel_wav(x):
+        restwav = rest.to(si.AA, spectral()).value
+        return restwav * ckms / (ckms-x)
+
+
+    def to_vel_en(x):
+        resten = rest.to(si.eV, equivalencies=spectral()).value
+        return (resten-x) / (resten) * ckms
+
+    def from_vel_en(x):
+        resten = rest.to(si.eV, equivalencies=spectral()).value
+        voverc = x/ckms
+        return resten * (1-voverc)
+
+    return [(si.Hz, si.km/si.s, to_vel_freq, from_vel_freq),
+            (si.AA, si.km/si.s, to_vel_wav, from_vel_wav),
+            (si.eV, si.km/si.s, to_vel_en, from_vel_en),
+            ]
+
+
+def doppler_optical(rest):
+    r"""
+    Return the equivalency pairs for the optical convention for velocity.
+
+    The optical convention for the relation between velocity and frequency is:
+
+    :math:`V = c \frac{f_0 - f}{f  }  ;  f(V) = f_0 ( 1 + V/c )^{-1}`
+
+    Parameters
+    ----------
+    rest : Quantity
+        Any quantity supported by the standard spectral equivalencies
+        (wavelength, energy, frequency, wave number).
+
+    References
+    ----------
+    `NRAO site defining the conventions <http://www.gb.nrao.edu/~fghigo/gbtdoc/doppler.html>`_
+
+    Examples
+    --------
+    >>> import astropy.units as u
+    >>> CO_restfreq = 115.27120*u.GHz  # rest frequency of 12 CO 1-0 in GHz
+    >>> optical_CO_equiv = u.doppler_optical(CO_restfreq)
+    >>> measured_freq = 115.2832*u.GHz
+    >>> optical_velocity = measured_freq.to(u.km/u.s, equivalencies=optical_CO_equiv)
+    >>> optical_velocity
+    <Quantity -31.205843488... km / s>
+    """
+
+    ckms = _si.c.to('km/s').value
+
+    def to_vel_freq(x):
+        restfreq = rest.to(si.Hz, equivalencies=spectral()).value
+        return ckms * (restfreq-x) / x
+
+    def from_vel_freq(x):
+        restfreq = rest.to(si.Hz, equivalencies=spectral()).value
+        voverc = x/ckms
+        return restfreq / (1+voverc)
+
+
+    def to_vel_wav(x):
+        restwav = rest.to(si.AA, spectral()).value
+        return ckms * (x/restwav-1)
+
+    def from_vel_wav(x):
+        restwav = rest.to(si.AA, spectral()).value
+        voverc = x/ckms
+        return restwav * (1+voverc)
+
+
+    def to_vel_en(x):
+        resten = rest.to(si.eV, equivalencies=spectral()).value
+        return ckms * (resten-x) / x
+
+    def from_vel_en(x):
+        resten = rest.to(si.eV, equivalencies=spectral()).value
+        voverc = x/ckms
+        return resten / (1+voverc)
+
+    return [(si.Hz, si.km/si.s, to_vel_freq, from_vel_freq),
+            (si.AA, si.km/si.s, to_vel_wav, from_vel_wav),
+            (si.eV, si.km/si.s, to_vel_en, from_vel_en),
+            ]
+
+
+def doppler_relativistic(rest):
+    r"""
+    Return the equivalency pairs for the relativistic convention for velocity.
+
+    The full relativistic convention for the relation between velocity and frequency is:
+
+    :math:`V = c \frac{f_0^2 - f^2}{f_0^2 + f^2} ;  f(V) = f_0 \frac{\left(1 - (V/c)^2\right)^{1/2}}{(1+V/c)}`
+
+    Parameters
+    ----------
+    rest : Quantity
+        Any quantity supported by the standard spectral equivalencies
+        (wavelength, energy, frequency, wave number).
+
+    References
+    ----------
+    `NRAO site defining the conventions <http://www.gb.nrao.edu/~fghigo/gbtdoc/doppler.html>`_
+
+    Examples
+    --------
+    >>> import astropy.units as u
+    >>> CO_restfreq = 115.27120*u.GHz  # rest frequency of 12 CO 1-0 in GHz
+    >>> relativistic_CO_equiv = u.doppler_relativistic(CO_restfreq)
+    >>> measured_freq = 115.2832*u.GHz
+    >>> relativistic_velocity = measured_freq.to(u.km/u.s, equivalencies=relativistic_CO_equiv)
+    >>> relativistic_velocity
+    <Quantity -31.207467619...
+    >>> measured_velocity = 1250 * u.km/u.s
+    >>> relativistic_frequency = measured_velocity.to(u.GHz, equivalencies=relativistic_CO_equiv)
+    >>> relativistic_frequency
+    <Quantity 114.7915686...
+    >>> relativistic_wavelength = measured_velocity.to(u.mm, equivalencies=relativistic_CO_equiv)
+    >>> relativistic_wavelength
+    <Quantity 2.6116243681...
+    """
+
+    ckms = _si.c.to('km/s').value
+
+    def to_vel_freq(x):
+        restfreq = rest.to(si.Hz, equivalencies=spectral()).value
+        return (restfreq**2-x**2) / (restfreq**2+x**2) * ckms
+
+    def from_vel_freq(x):
+        restfreq = rest.to(si.Hz, equivalencies=spectral()).value
+        voverc = x/ckms
+        return restfreq * ((1-voverc) / (1+(voverc)))**0.5
+
+
+    def to_vel_wav(x):
+        restwav = rest.to(si.AA, spectral()).value
+        return (x**2-restwav**2) / (restwav**2+x**2) * ckms
+
+    def from_vel_wav(x):
+        restwav = rest.to(si.AA, spectral()).value
+        voverc = x/ckms
+        return restwav * ((1+voverc) / (1-voverc))**0.5
+
+
+    def to_vel_en(x):
+        resten = rest.to(si.eV, spectral()).value
+        return (resten**2-x**2) / (resten**2+x**2) * ckms
+
+    def from_vel_en(x):
+        resten = rest.to(si.eV, spectral()).value
+        voverc = x/ckms
+        return resten * ((1-voverc) / (1+(voverc)))**0.5
+
+    return [(si.Hz, si.km/si.s, to_vel_freq, from_vel_freq),
+            (si.AA, si.km/si.s, to_vel_wav, from_vel_wav),
+            (si.eV, si.km/si.s, to_vel_en, from_vel_en),
+            ]
+
+
+def mass_energy():
+    """
+    Returns a list of equivalence pairs that handle the conversion
+    between mass and energy.
+    """
+
+    return [(si.kg, si.J, lambda x: x * _si.c.value ** 2,
+             lambda x: x / _si.c.value ** 2),
+            (si.kg / si.m ** 2, si.J / si.m ** 2 ,
+             lambda x: x * _si.c.value ** 2,
+             lambda x: x / _si.c.value ** 2),
+            (si.kg / si.m ** 3, si.J / si.m ** 3 ,
+             lambda x: x * _si.c.value ** 2,
+             lambda x: x / _si.c.value ** 2),
+            (si.kg / si.s, si.J / si.s , lambda x: x * _si.c.value ** 2,
+             lambda x: x / _si.c.value ** 2),
     ]
+
+def brightness_temperature(beam_area, disp):
+    """
+    "Antenna Gain" or "sensitivity" equivalency: Defines the conversion between
+    Jy/beam and "brightness temperature", :math:`T_B`, in Kelvins.  This is a
+    unit very commonly used in radio astronomy.  Typically, the gain refers to
+    the conversion between corrected antenna temperature :math:`T_A^*` and flux
+    density.  See, e.g., "Tools of Radio Astronomy" (Wilson 2009) eqn 8.16 and
+    eqn 8.19 (these pages are available on `google books
+    <http://books.google.com/books?id=9KHw6R8rQEMC&pg=PA179&source=gbs_toc_r&cad=4#v=onepage&q&f=false>`__).
+
+    :math:`T_B \equiv S_\\nu / \left(2 k \\nu^2 / c^2 \\right)`
+
+    However, the beam area is essential for this computation: the brighntess
+    temperature is inversely proportional to the beam area
+
+    Parameters
+    ----------
+    beam_area : Beam Area equivalent
+        Beam area in angular units, i.e. steradian equivalent
+    disp : `Quantity` with spectral units
+        The observed `spectral` equivalent `Unit` (e.g., frequency or
+        wavelength)
+
+    Examples
+    --------
+    Arecibo C-band beam gain ~ 7 K/Jy::
+
+        >>> import numpy as np
+        >>> from astropy import units as u
+        >>> beam_area = np.pi*(50*u.arcsec)**2
+        >>> freq = 5*u.GHz
+        >>> u.Jy.to(u.K, equivalencies=u.brightness_temperature(beam_area,freq))
+        7.052588858...
+        >>> (1*u.Jy).to(u.K, equivalencies=u.brightness_temperature(beam_area,freq))
+        <Quantity 7.05258...
+
+    VLA synthetic beam::
+
+        >>> beam_area = np.pi*(15*u.arcsec)**2
+        >>> freq = 5*u.GHz
+        >>> u.Jy.to(u.K, equivalencies=u.brightness_temperature(beam_area,freq))
+        78.36209843...
+    """
+    beam = beam_area.to(si.sr).value
+    nu = disp.to(si.GHz, spectral())
+
+    def convert_Jy_to_K(x_jybm):
+        factor = (2 * _si.k_B * si.K * nu**2 / _si.c**2).to(astrophys.Jy).value
+        return (x_jybm / beam / factor)
+
+    def convert_K_to_Jy(x_K):
+        factor = (astrophys.Jy / (2 * _si.k_B * nu**2 / _si.c**2)).to(si.K).value
+        return (x_K * beam / factor)
+
+    return [(astrophys.Jy, si.K, convert_Jy_to_K, convert_K_to_Jy)]
diff --git a/astropy/units/format/__init__.py b/astropy/units/format/__init__.py
index df44b26..bc02791 100644
--- a/astropy/units/format/__init__.py
+++ b/astropy/units/format/__init__.py
@@ -7,6 +7,8 @@ A collection of different unit formats.
 from __future__ import (absolute_import, division, print_function,
                         unicode_literals)
 
+from inspect import isclass
+
 from .base import Base
 from .generic import Generic, Unscaled
 from .cds import CDS
@@ -19,6 +21,9 @@ from .vounit import VOUnit
 __all__ = [
     'Generic', 'CDS', 'Console', 'Fits', 'Latex', 'Unicode', 'Unscaled',
     'VOUnit', 'get_format']
+    
+FORMATS = ['Generic', 'CDS', 'Console', 'Fits', 'Latex', 'Unicode', 'Unscaled',
+    'VOUnit']
 
 
 def get_format(format=None):
@@ -44,8 +49,9 @@ def get_format(format=None):
     if format is None:
         format = 'generic'
     format = format.lower()
-    for key in __all__:
+    for key in FORMATS:
         val = globals()[key]
-        if (issubclass(val, Base) and key.lower() == format.lower()):
+        if isclass(val) and (issubclass(val, Base) and key.lower() == format.lower()):
             return val()
     raise ValueError("Unknown format {0!r}".format(format))
+
diff --git a/astropy/units/format/cds.py b/astropy/units/format/cds.py
index 3bdfef4..d91dafe 100644
--- a/astropy/units/format/cds.py
+++ b/astropy/units/format/cds.py
@@ -8,11 +8,15 @@ Handles a "generic" string format for units
 from __future__ import (absolute_import, division, print_function,
                         unicode_literals)
 
+import keyword
 import os
 import re
 
+from ...extern.six.moves import zip
+
 from .base import Base
 from . import utils
+from ..utils import is_effectively_unity
 
 
 # TODO: Support logarithmic units using bracketed syntax
@@ -22,7 +26,9 @@ class CDS(Base):
     Support the `Centre de Données astronomiques de Strasbourg
     <http://cds.u-strasbg.fr/>`_ `Standards for Astronomical
     Catalogues 2.0 <http://cds.u-strasbg.fr/doc/catstd-3.2.htx>`_
-    format.  This format is used by VOTable up to version 1.2.
+    format, and the `complete set of supported units
+    <http://vizier.u-strasbg.fr/cgi-bin/Unit>`_.  This format is used
+    by VOTable up to version 1.2.
     """
     def __init__(self):
         # Build this on the class, so it only gets generated once.
@@ -34,54 +40,14 @@ class CDS(Base):
 
     @staticmethod
     def _generate_unit_names():
-        import keyword
+        from .. import cds
         from ... import units as u
-        from .. import core
-
-        bases = [
-            'A', 'a', 'arcmin', 'arcsec', 'AU', 'barn', 'bit', 'byte',
-            'C', 'cd', 'eV', 'F', 'g', 'H', 'Hz', 'J', 'Jy', 'K',
-            'lm', 'lx', 'm', 'mag', 'mol', 'N', 'Ohm', 'Pa', 'pc',
-            'rad', 's', 'S', 'solLum', 'solMass', 'sr', 'T', 'V', 'W',
-            'Wb', 'yr']
-
-        # These are bases which don't have prefix units in astropy.units
-        # itself, but that we need to fake for the sake of CDS.
-        faux_bases = [
-            'ct', 'D', 'd', 'deg', 'h', 'min', 'pix', 'Ry', 'solRad',
-            'Sun']
-
-        # "mas" doesn't have prefixes, according to the cds standard
-        unprefixed = [
-            'mas']
-
-        # We need to define all of the base units first, and then
-        # only add prefixed units if they don't already exist in names
-        # to prevent ambiguities like cd (candela vs. centi-day)
 
         names = {}
 
-        names['%'] = u.Unit(0.01)
-
-        for base in bases + faux_bases + unprefixed:
-            names[base] = getattr(u, base)
-
-        for base in bases:
-            for p_name, p_long_name, p_value in core.si_prefixes:
-                for name in p_name:
-                    key = name + base
-                    if key not in names:
-                        if keyword.iskeyword(key):
-                            continue
-                        names[key] = getattr(u, key)
-
-        for base in faux_bases:
-            names[base] = getattr(u, base)
-            for p_name, p_long_name, p_value in core.si_prefixes:
-                for name in p_name:
-                    key = name + base
-                    if key not in names:
-                        names[key] = u.Unit(p_value * getattr(u, base))
+        for key, val in cds.__dict__.items():
+            if isinstance(val, u.UnitBase):
+                names[key] = val
 
         return names
 
@@ -135,12 +101,12 @@ class CDS(Base):
             t.value = float(t.value + '1')
             return t
 
-        def t_X(t):
-            r'x'
+        def t_X(t):  # multiplication for factor in front of unit
+            r'[x×]'
             return t
 
         def t_UNIT(t):
-            r'\%|([a-zA-Z][a-zA-Z_]*)'
+            r'\%|[a-zA-Z][a-zA-Z_]*'
             t.value = cls._get_unit(t)
             return t
 
@@ -162,12 +128,13 @@ class CDS(Base):
             '''
             main : factor combined_units
                  | combined_units
+                 | factor
             '''
+            from ..core import Unit
             if len(p) == 3:
-                from ..core import Unit
                 p[0] = Unit(p[1] * p[2])
             else:
-                p[0] = p[1]
+                p[0] = Unit(p[1])
 
         def p_combined_units(p):
             '''
@@ -336,12 +303,16 @@ class CDS(Base):
         unit = utils.decompose_to_known_units(unit, self._get_unit_name)
 
         if isinstance(unit, core.CompositeUnit):
+            if(unit.physical_type == 'dimensionless' and
+               is_effectively_unity(unit.scale*100.)):
+                return '%'
+
             if unit.scale == 1:
                 s = ''
             else:
                 m, e = utils.split_mantissa_exponent(unit.scale)
                 parts = []
-                if m:
+                if m not in ('', '1'):
                     parts.append(m)
                 if e:
                     if not e.startswith('-'):
@@ -349,10 +320,12 @@ class CDS(Base):
                     parts.append('10{0}'.format(e))
                 s = 'x'.join(parts)
 
-            pairs = zip(unit.bases, unit.powers)
-            pairs.sort(key=lambda x: x[1], reverse=True)
+            pairs = list(zip(unit.bases, unit.powers))
+            if len(pairs) > 0:
+                pairs.sort(key=lambda x: x[1], reverse=True)
+
+                s += self._format_unit_list(pairs)
 
-            s += self._format_unit_list(pairs)
         elif isinstance(unit, core.NamedUnit):
             s = self._get_unit_name(unit)
 
diff --git a/astropy/units/format/cds_lextab.py b/astropy/units/format/cds_lextab.py
index fa7c9ca..6318dbf 100644
--- a/astropy/units/format/cds_lextab.py
+++ b/astropy/units/format/cds_lextab.py
@@ -1,9 +1,11 @@
 # cds_lextab.py. This file automatically created by PLY (version 3.4). Don't edit!
+from __future__ import absolute_import, division, print_function, unicode_literals
+
 _tabversion   = '3.4'
-_lextokens    = {u'DIVISION': 1, u'PRODUCT': 1, u'SIGN': 1, u'OPEN_PAREN': 1, u'UINT': 1, u'UNIT': 1, u'X': 1, u'CLOSE_PAREN': 1, u'UFLOAT': 1}
+_lextokens    = {'DIVISION': 1, 'PRODUCT': 1, 'SIGN': 1, 'OPEN_PAREN': 1, 'UINT': 1, 'UNIT': 1, 'X': 1, 'CLOSE_PAREN': 1, 'UFLOAT': 1}
 _lexreflags   = 0
 _lexliterals  = ''
 _lexstateinfo = {'INITIAL': 'inclusive'}
-_lexstatere   = {'INITIAL': [(u'(?P<t_UFLOAT>((\\d+\\.?\\d+)|(\\.\\d+))([eE][+-]?\\d+)?)|(?P<t_UINT>\\d+)|(?P<t_SIGN>[+-](?=\\d))|(?P<t_X>x)|(?P<t_UNIT>\\%|([a-zA-Z][a-zA-Z_]*))|(?P<t_CLOSE_PAREN>\\))|(?P<t_OPEN_PAREN>\\()|(?P<t_PRODUCT>\\.)|(?P<t_DIVISION>/)', [None, (u't_UFLOAT', 'UFLOAT'), None, None, None, None, (u't_UINT', 'UINT'), (u't_SIGN', 'SIGN'), (u't_X', 'X'), (u't_UNIT', 'UNIT'), None, (None, 'CLOSE_PAREN'), (None, 'OPEN_PAREN'), (None, 'PRODUCT'), (None, 'DIVISION')])]}
-_lexstateignore = {'INITIAL': u''}
+_lexstatere   = {'INITIAL': [('(?P<t_UFLOAT>((\\d+\\.?\\d+)|(\\.\\d+))([eE][+-]?\\d+)?)|(?P<t_UINT>\\d+)|(?P<t_SIGN>[+-](?=\\d))|(?P<t_X>[x\xd7])|(?P<t_UNIT>\\%|[a-zA-Z][a-zA-Z_]*)|(?P<t_CLOSE_PAREN>\\))|(?P<t_OPEN_PAREN>\\()|(?P<t_PRODUCT>\\.)|(?P<t_DIVISION>/)', [None, ('t_UFLOAT', 'UFLOAT'), None, None, None, None, ('t_UINT', 'UINT'), ('t_SIGN', 'SIGN'), ('t_X', 'X'), ('t_UNIT', 'UNIT'), (None, 'CLOSE_PAREN'), (None, 'OPEN_PAREN'), (None, 'PRODUCT'), (None, 'DIVISION')])]}
+_lexstateignore = {'INITIAL': ''}
 _lexstateerrorf = {'INITIAL': 't_error'}
diff --git a/astropy/units/format/cds_parsetab.py b/astropy/units/format/cds_parsetab.py
index ccdb35e..85d2de3 100644
--- a/astropy/units/format/cds_parsetab.py
+++ b/astropy/units/format/cds_parsetab.py
@@ -1,3 +1,4 @@
+from __future__ import absolute_import, division, print_function, unicode_literals
 
 # astropy/units/format/cds_parsetab.py
 # This file is automatically generated. Do not edit.
@@ -5,48 +6,49 @@ _tabversion = '3.2'
 
 _lr_method = 'LALR'
 
-_lr_signature = '\xce\xb7\xd3.\x0b\x17\xaf\xf6\x1f\x9dSy\x1f\xee\xbd\x1a'
-    
-_lr_action_items = {u'DIVISION':([0,4,6,9,10,11,12,13,17,18,20,23,26,27,29,31,32,35,36,],[1,-9,-15,1,-14,-17,1,26,-23,-22,-13,-16,1,1,-10,-21,-18,-11,-12,]),u'PRODUCT':([4,11,13,23,29,32,],[-9,-17,27,-16,-10,-18,]),u'SIGN':([0,10,11,28,30,],[5,22,5,22,22,]),u'OPEN_PAREN':([0,1,6,9,10,12,17,18,20,26,27,31,35,36,],[9,9,-15,9,-14,9,-23,-22,-13,9,9,-21,-11,-12,]),u'UINT':([0,5,7,11,16,21,22,24,],[10,-19,18,-20,28,30,31,32,]),u'CLOSE_PAREN':([2,4,8,11,13,15,19,23,29,32,33,34,],[-4,-9,-3,-17,- [...]
+_lr_signature = b'o\xc2\x11\xf7/(Q\xfc?\xf7\xd2\xbf\xf9Q\xfez'
+
+_lr_action_items = {'DIVISION':([0,4,6,9,10,11,12,13,17,18,20,23,26,27,29,31,32,35,36,],[1,-10,-16,1,-15,-18,1,26,-24,-23,-14,-17,1,1,-11,-22,-19,-12,-13,]),'PRODUCT':([4,11,13,23,29,32,],[-10,-18,27,-17,-11,-19,]),'SIGN':([0,10,11,28,30,],[5,22,5,22,22,]),'OPEN_PAREN':([0,1,6,9,10,12,17,18,20,26,27,31,35,36,],[9,9,-16,9,-15,9,-24,-23,-14,9,9,-22,-12,-13,]),'UINT':([0,5,7,11,16,21,22,24,],[10,-20,18,-21,28,30,31,32,]),'CLOSE_PAREN':([2,4,8,11,13,15,19,23,29,32,33,34,],[-5,-10,-4,-18,-7,- [...]
 
 _lr_action = { }
 for _k, _v in _lr_action_items.items():
-   for _x,_y in zip(_v[0],_v[1]):
-      if not _x in _lr_action:  _lr_action[_x] = { }
-      _lr_action[_x][_k] = _y
+    for _x,_y in zip(_v[0],_v[1]):
+        if not _x in _lr_action:  _lr_action[_x] = { }
+        _lr_action[_x][_k] = _y
 del _lr_action_items
 
-_lr_goto_items = {u'division_of_units':([0,9,12,26,27,],[2,2,2,2,2,]),u'main':([0,],[3,]),u'unit_with_power':([0,1,9,12,26,27,],[4,4,4,4,4,4,]),u'signed_float':([0,],[6,]),u'sign':([0,11,],[7,24,]),u'product_of_units':([0,9,12,26,27,],[8,8,8,8,8,]),u'signed_int':([10,28,30,],[20,35,36,]),u'factor':([0,],[12,]),u'unit_expression':([0,1,9,12,26,27,],[13,15,13,13,13,13,]),u'numeric_power':([11,],[23,]),u'combined_units':([0,9,12,26,27,],[14,19,25,33,34,]),}
+_lr_goto_items = {'division_of_units':([0,9,12,26,27,],[2,2,2,2,2,]),'main':([0,],[3,]),'unit_with_power':([0,1,9,12,26,27,],[4,4,4,4,4,4,]),'signed_float':([0,],[6,]),'sign':([0,11,],[7,24,]),'product_of_units':([0,9,12,26,27,],[8,8,8,8,8,]),'signed_int':([10,28,30,],[20,35,36,]),'factor':([0,],[12,]),'unit_expression':([0,1,9,12,26,27,],[13,15,13,13,13,13,]),'numeric_power':([11,],[23,]),'combined_units':([0,9,12,26,27,],[14,19,25,33,34,]),}
 
 _lr_goto = { }
 for _k, _v in _lr_goto_items.items():
-   for _x,_y in zip(_v[0],_v[1]):
-       if not _x in _lr_goto: _lr_goto[_x] = { }
-       _lr_goto[_x][_k] = _y
+    for _x,_y in zip(_v[0],_v[1]):
+        if not _x in _lr_goto: _lr_goto[_x] = { }
+        _lr_goto[_x][_k] = _y
 del _lr_goto_items
 _lr_productions = [
   ("S' -> main","S'",1,None,None,None),
-  (u'main -> factor combined_units',u'main',2,'p_main','astropy/units/format/cds.py',145),
-  (u'main -> combined_units',u'main',1,'p_main','astropy/units/format/cds.py',146),
-  (u'combined_units -> product_of_units',u'combined_units',1,'p_combined_units','astropy/units/format/cds.py',156),
-  (u'combined_units -> division_of_units',u'combined_units',1,'p_combined_units','astropy/units/format/cds.py',157),
-  (u'product_of_units -> unit_expression PRODUCT combined_units',u'product_of_units',3,'p_product_of_units','astropy/units/format/cds.py',163),
-  (u'product_of_units -> unit_expression',u'product_of_units',1,'p_product_of_units','astropy/units/format/cds.py',164),
-  (u'division_of_units -> DIVISION unit_expression',u'division_of_units',2,'p_division_of_units','astropy/units/format/cds.py',173),
-  (u'division_of_units -> unit_expression DIVISION combined_units',u'division_of_units',3,'p_division_of_units','astropy/units/format/cds.py',174),
-  (u'unit_expression -> unit_with_power',u'unit_expression',1,'p_unit_expression','astropy/units/format/cds.py',183),
-  (u'unit_expression -> OPEN_PAREN combined_units CLOSE_PAREN',u'unit_expression',3,'p_unit_expression','astropy/units/format/cds.py',184),
-  (u'factor -> signed_float X UINT signed_int',u'factor',4,'p_factor','astropy/units/format/cds.py',193),
-  (u'factor -> UINT X UINT signed_int',u'factor',4,'p_factor','astropy/units/format/cds.py',194),
-  (u'factor -> UINT signed_int',u'factor',2,'p_factor','astropy/units/format/cds.py',195),
-  (u'factor -> UINT',u'factor',1,'p_factor','astropy/units/format/cds.py',196),
-  (u'factor -> signed_float',u'factor',1,'p_factor','astropy/units/format/cds.py',197),
-  (u'unit_with_power -> UNIT numeric_power',u'unit_with_power',2,'p_unit_with_power','astropy/units/format/cds.py',214),
-  (u'unit_with_power -> UNIT',u'unit_with_power',1,'p_unit_with_power','astropy/units/format/cds.py',215),
-  (u'numeric_power -> sign UINT',u'numeric_power',2,'p_numeric_power','astropy/units/format/cds.py',224),
-  (u'sign -> SIGN',u'sign',1,'p_sign','astropy/units/format/cds.py',230),
-  (u'sign -> <empty>',u'sign',0,'p_sign','astropy/units/format/cds.py',231),
-  (u'signed_int -> SIGN UINT',u'signed_int',2,'p_signed_int','astropy/units/format/cds.py',240),
-  (u'signed_float -> sign UINT',u'signed_float',2,'p_signed_float','astropy/units/format/cds.py',246),
-  (u'signed_float -> sign UFLOAT',u'signed_float',2,'p_signed_float','astropy/units/format/cds.py',247),
+  ('main -> factor combined_units','main',2,'p_main','astropy/units/format/cds.py',168),
+  ('main -> combined_units','main',1,'p_main','astropy/units/format/cds.py',169),
+  ('main -> factor','main',1,'p_main','astropy/units/format/cds.py',170),
+  ('combined_units -> product_of_units','combined_units',1,'p_combined_units','astropy/units/format/cds.py',180),
+  ('combined_units -> division_of_units','combined_units',1,'p_combined_units','astropy/units/format/cds.py',181),
+  ('product_of_units -> unit_expression PRODUCT combined_units','product_of_units',3,'p_product_of_units','astropy/units/format/cds.py',187),
+  ('product_of_units -> unit_expression','product_of_units',1,'p_product_of_units','astropy/units/format/cds.py',188),
+  ('division_of_units -> DIVISION unit_expression','division_of_units',2,'p_division_of_units','astropy/units/format/cds.py',197),
+  ('division_of_units -> unit_expression DIVISION combined_units','division_of_units',3,'p_division_of_units','astropy/units/format/cds.py',198),
+  ('unit_expression -> unit_with_power','unit_expression',1,'p_unit_expression','astropy/units/format/cds.py',207),
+  ('unit_expression -> OPEN_PAREN combined_units CLOSE_PAREN','unit_expression',3,'p_unit_expression','astropy/units/format/cds.py',208),
+  ('factor -> signed_float X UINT signed_int','factor',4,'p_factor','astropy/units/format/cds.py',217),
+  ('factor -> UINT X UINT signed_int','factor',4,'p_factor','astropy/units/format/cds.py',218),
+  ('factor -> UINT signed_int','factor',2,'p_factor','astropy/units/format/cds.py',219),
+  ('factor -> UINT','factor',1,'p_factor','astropy/units/format/cds.py',220),
+  ('factor -> signed_float','factor',1,'p_factor','astropy/units/format/cds.py',221),
+  ('unit_with_power -> UNIT numeric_power','unit_with_power',2,'p_unit_with_power','astropy/units/format/cds.py',238),
+  ('unit_with_power -> UNIT','unit_with_power',1,'p_unit_with_power','astropy/units/format/cds.py',239),
+  ('numeric_power -> sign UINT','numeric_power',2,'p_numeric_power','astropy/units/format/cds.py',248),
+  ('sign -> SIGN','sign',1,'p_sign','astropy/units/format/cds.py',254),
+  ('sign -> <empty>','sign',0,'p_sign','astropy/units/format/cds.py',255),
+  ('signed_int -> SIGN UINT','signed_int',2,'p_signed_int','astropy/units/format/cds.py',264),
+  ('signed_float -> sign UINT','signed_float',2,'p_signed_float','astropy/units/format/cds.py',270),
+  ('signed_float -> sign UFLOAT','signed_float',2,'p_signed_float','astropy/units/format/cds.py',271),
 ]
diff --git a/astropy/units/format/console.py b/astropy/units/format/console.py
index c62a7ee..4bf46d8 100644
--- a/astropy/units/format/console.py
+++ b/astropy/units/format/console.py
@@ -19,10 +19,11 @@ class Console(base.Base):
 
     For example::
 
-      >>> print fluxunit.to_string('console')
-       erg
-      ------
-      s cm^2
+      >>> import astropy.units as u
+      >>> print(u.Ry.decompose().to_string('console'))
+                    m^2 kg
+      2.1...*10^-18 ------
+                     s^2
     """
     def __init__(self):
         pass
@@ -44,7 +45,8 @@ class Console(base.Base):
             else:
                 out.append('{0}{1}'.format(
                     self._get_unit_name(base),
-                    self._format_superscript(str(power))))
+                    self._format_superscript(
+                            utils.format_power(power))))
         return ' '.join(out)
 
     def _format_exponential_notation(self, val):
diff --git a/astropy/units/format/fits.py b/astropy/units/format/fits.py
index 7def56e..271ca66 100644
--- a/astropy/units/format/fits.py
+++ b/astropy/units/format/fits.py
@@ -6,9 +6,13 @@ Handles the "FITS" unit format.
 
 from __future__ import (absolute_import, division, print_function,
                         unicode_literals)
+from ...extern.six.moves import zip
 
+import keyword
 import warnings
 
+from ...utils.exceptions import AstropyDeprecationWarning
+
 from . import generic
 from . import utils
 
@@ -23,14 +27,15 @@ class Fits(generic.Generic):
     name = 'fits'
 
     def __init__(self):
-        super(Fits, self).__init__()
+        # Build this on the class, so it only gets generated once.
+        if '_parser' not in Fits.__dict__:
+            Fits._parser, Fits._lexer = self._make_parser()
 
         if not '_units' in Fits.__dict__:
             Fits._units, Fits._deprecated_units = self._generate_unit_names()
 
     @staticmethod
     def _generate_unit_names():
-        import keyword
         from ... import units as u
         names = {}
         deprecated_names = set()
@@ -81,7 +86,7 @@ class Fits(generic.Generic):
             warnings.warn(
                 "The unit {0!r} has been deprecated in the FITS "
                 "standard.".format(unit),
-                DeprecationWarning)
+                AstropyDeprecationWarning)
 
         return cls._units[unit]
 
@@ -96,7 +101,7 @@ class Fits(generic.Generic):
             warnings.warn(
                 "The unit {0!r} has been deprecated in the FITS "
                 "standard.".format(name),
-                DeprecationWarning)
+                AstropyDeprecationWarning)
 
         return name
 
@@ -112,7 +117,7 @@ class Fits(generic.Generic):
                     "The FITS unit format is not able to represent scale. "
                     "Multiply your data by {0:e}.".format(unit.scale))
 
-            pairs = zip(unit.bases, unit.powers)
+            pairs = list(zip(unit.bases, unit.powers))
             pairs.sort(key=lambda x: x[1], reverse=True)
 
             s = self._format_unit_list(pairs)
diff --git a/astropy/units/format/generic.py b/astropy/units/format/generic.py
index 065d04c..ad0c35d 100644
--- a/astropy/units/format/generic.py
+++ b/astropy/units/format/generic.py
@@ -9,11 +9,9 @@ from __future__ import (absolute_import, division, print_function,
 
 import os
 import re
-import sys
 
 from . import utils
 from .base import Base
-from ...utils.compat.fractions import Fraction
 
 
 class Generic(Base):
@@ -102,7 +100,7 @@ class Generic(Base):
             return t
 
         def t_UNIT(t):
-            r'[a-zA-Z][a-zA-Z_]*'
+            r'%|[a-zA-Z][a-zA-Z_]*'
             t.value = cls._get_unit(t)
             return t
 
@@ -128,11 +126,12 @@ class Generic(Base):
                  | factor division_product_of_units
                  | inverse_unit
                  | factor inverse_unit
+                 | factor
             '''
+            from ..core import Unit
             if len(p) == 2:
-                p[0] = p[1]
+                p[0] = Unit(p[1])
             else:
-                from ..core import Unit
                 p[0] = Unit(p[1] * p[2])
 
         def p_division_product_of_units(p):
@@ -308,7 +307,7 @@ class Generic(Base):
             if p[1] == 'sqrt':
                 p[0] = p[3] ** 0.5
             else:
-               raise ValueError(
+                raise ValueError(
                    '{0!r} is not a recognized function'.format(p[1]))
 
         def p_error(p):
@@ -335,9 +334,11 @@ class Generic(Base):
 
     @classmethod
     def _parse_unit(cls, s):
-        from ..core import UnitBase
-        registry = UnitBase._registry
-        if s in registry:
+        from ..core import get_current_unit_registry
+        registry = get_current_unit_registry().registry
+        if s == '%':
+            return registry['percent']
+        elif s in registry:
             return registry[s]
         raise ValueError(
             '{0} is not a valid unit'.format(s))
@@ -352,11 +353,11 @@ class Generic(Base):
                 return self._parser.parse(s, lexer=self._lexer, debug=debug)
             except ValueError as e:
                 if str(e):
-                    raise ValueError("{0} in unit {1!r}".format(
+                    raise ValueError("{0} in string {1!r}".format(
                         str(e), s))
                 else:
                     raise ValueError(
-                        "Syntax error parsing unit {0!r}".format(s))
+                        "Syntax error parsing unit string {0!r}".format(s))
 
     def _get_unit_name(self, unit):
         return unit.get_format_name('generic')
@@ -369,15 +370,8 @@ class Generic(Base):
             if power == 1:
                 out.append(self._get_unit_name(base))
             else:
-                if not isinstance(power, Fraction):
-                    if power % 1.0 != 0.0:
-                        frac = Fraction.from_float(power)
-                        power = frac.limit_denominator(10)
-                        if power.denominator == 1:
-                            power = int(power.numerator)
-                    else:
-                        power = int(power)
-                if isinstance(power, Fraction):
+                power = utils.format_power(power)
+                if '/' in power:
                     out.append('{0}({1})'.format(
                         self._get_unit_name(base), power))
                 else:
@@ -389,25 +383,30 @@ class Generic(Base):
         from .. import core
 
         if isinstance(unit, core.CompositeUnit):
-            if unit.scale != 1 and self._show_scale:
-                s = '{0:e} '.format(unit.scale)
-            else:
-                s = ''
+            parts = []
+
+            if self._show_scale and unit.scale != 1:
+                parts.append('{0:g}'.format(unit.scale))
 
             if len(unit.bases):
                 positives, negatives = utils.get_grouped_by_powers(
                     unit.bases, unit.powers)
                 if len(positives):
-                    s += self._format_unit_list(positives)
-                elif s == '':
-                    s = '1'
+                    parts.append(self._format_unit_list(positives))
+                elif len(parts) == 0:
+                    parts.append('1')
 
                 if len(negatives):
-                    s += ' / ({0})'.format(self._format_unit_list(negatives))
-        elif isinstance(unit, core.NamedUnit):
-            s = self._get_unit_name(unit)
+                    parts.append('/')
+                    unit_list = self._format_unit_list(negatives)
+                    if len(negatives) == 1:
+                        parts.append('{0}'.format(unit_list))
+                    else:
+                        parts.append('({0})'.format(unit_list))
 
-        return s
+            return ' '.join(parts)
+        elif isinstance(unit, core.NamedUnit):
+            return self._get_unit_name(unit)
 
 
 class Unscaled(Generic):
diff --git a/astropy/units/format/generic_lextab.py b/astropy/units/format/generic_lextab.py
index 3dfac0b..acbecc1 100644
--- a/astropy/units/format/generic_lextab.py
+++ b/astropy/units/format/generic_lextab.py
@@ -1,9 +1,11 @@
+from __future__ import absolute_import, division, print_function, unicode_literals
+
 # generic_lextab.py. This file automatically created by PLY (version 3.4). Don't edit!
 _tabversion   = '3.4'
-_lextokens    = {u'CARET': 1, u'SOLIDUS': 1, u'STAR': 1, u'DOUBLE_STAR': 1, u'PERIOD': 1, u'SQRT': 1, u'SIGN': 1, u'OPEN_PAREN': 1, u'UINT': 1, u'UNIT': 1, u'CLOSE_PAREN': 1, u'UFLOAT': 1}
+_lextokens    = {'CARET': 1, 'SOLIDUS': 1, 'STAR': 1, 'DOUBLE_STAR': 1, 'PERIOD': 1, 'SQRT': 1, 'SIGN': 1, 'OPEN_PAREN': 1, 'UINT': 1, 'UNIT': 1, 'CLOSE_PAREN': 1, 'UFLOAT': 1}
 _lexreflags   = 0
 _lexliterals  = ''
 _lexstateinfo = {'INITIAL': 'inclusive'}
-_lexstatere   = {'INITIAL': [(u'(?P<t_UFLOAT>((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?)|(?P<t_UINT>\\d+)|(?P<t_SIGN>[+-](?=\\d))|(?P<t_SQRT>sqrt)|(?P<t_UNIT>[a-zA-Z][a-zA-Z_]*)|(?P<t_DOUBLE_STAR>\\*\\*)|(?P<t_CARET>\\^)|(?P<t_CLOSE_PAREN>\\))|(?P<t_PERIOD>\\.)|(?P<t_OPEN_PAREN>\\()|(?P<t_STAR>\\*)|(?P<t_SOLIDUS>/)', [None, (u't_UFLOAT', 'UFLOAT'), None, None, None, None, (u't_UINT', 'UINT'), (u't_SIGN', 'SIGN'), (u't_SQRT', 'SQRT'), (u't_UNIT', 'UNIT'), (None, 'DOUBLE_STAR'), (None, 'CA [...]
-_lexstateignore = {'INITIAL': u' '}
+_lexstatere   = {'INITIAL': [('(?P<t_UFLOAT>((\\d+\\.?\\d*)|(\\.\\d+))([eE][+-]?\\d+)?)|(?P<t_UINT>\\d+)|(?P<t_SIGN>[+-](?=\\d))|(?P<t_SQRT>sqrt)|(?P<t_UNIT>%|[a-zA-Z][a-zA-Z_]*)|(?P<t_DOUBLE_STAR>\\*\\*)|(?P<t_CLOSE_PAREN>\\))|(?P<t_CARET>\\^)|(?P<t_PERIOD>\\.)|(?P<t_STAR>\\*)|(?P<t_OPEN_PAREN>\\()|(?P<t_SOLIDUS>/)', [None, ('t_UFLOAT', 'UFLOAT'), None, None, None, None, ('t_UINT', 'UINT'), ('t_SIGN', 'SIGN'), ('t_SQRT', 'SQRT'), ('t_UNIT', 'UNIT'), (None, 'DOUBLE_STAR'), (None, 'CLOSE_ [...]
+_lexstateignore = {'INITIAL': ' '}
 _lexstateerrorf = {'INITIAL': 't_error'}
diff --git a/astropy/units/format/generic_parsetab.py b/astropy/units/format/generic_parsetab.py
index becca26..9c4fb85 100644
--- a/astropy/units/format/generic_parsetab.py
+++ b/astropy/units/format/generic_parsetab.py
@@ -1,3 +1,4 @@
+from __future__ import absolute_import, division, print_function, unicode_literals
 
 # astropy/units/format/generic_parsetab.py
 # This file is automatically generated. Do not edit.
@@ -5,70 +6,70 @@ _tabversion = '3.2'
 
 _lr_method = 'LALR'
 
-_lr_signature = '\xac\x0e4\xcc\xf8@\xe9u\x05I\xac\x9dB\xb3\xb6\x0c'
-    
-_lr_action_items = {u'CARET':([17,18,34,40,],[35,35,35,35,]),u'SOLIDUS':([0,3,4,7,8,12,14,15,17,18,19,21,22,25,31,39,44,46,47,50,51,52,54,55,56,61,62,63,64,65,],[1,-23,1,1,-21,-22,-11,-9,-14,-27,-10,-43,-42,1,-20,-15,-26,-24,-19,-12,-16,-41,-17,-25,-28,-45,-13,-18,1,-29,]),u'STAR':([3,8,12,18,44,46,55,56,61,65,],[-23,29,-22,-27,-26,-24,-25,-28,-45,-29,]),u'DOUBLE_STAR':([17,18,34,40,],[37,37,37,37,]),u'PERIOD':([3,8,12,18,44,46,55,56,61,65,],[-23,30,-22,-27,-26,-24,-25,-28,-45,-29,]),u'S [...]
+_lr_signature = b'\xac\x0e4\xcc\xf8@\xe9u\x05I\xac\x9dB\xb3\xb6\x0c'
+
+_lr_action_items = {'CARET':([17,18,34,40,],[35,35,35,35,]),'SOLIDUS':([0,3,4,7,8,12,14,15,17,18,19,21,22,25,31,39,44,46,47,50,51,52,54,55,56,61,62,63,64,65,],[1,-23,1,1,-21,-22,-11,-9,-14,-27,-10,-43,-42,1,-20,-15,-26,-24,-19,-12,-16,-41,-17,-25,-28,-45,-13,-18,1,-29,]),'STAR':([3,8,12,18,44,46,55,56,61,65,],[-23,29,-22,-27,-26,-24,-25,-28,-45,-29,]),'DOUBLE_STAR':([17,18,34,40,],[37,37,37,37,]),'PERIOD':([3,8,12,18,44,46,55,56,61,65,],[-23,30,-22,-27,-26,-24,-25,-28,-45,-29,]),'SQRT':( [...]
 
 _lr_action = { }
 for _k, _v in _lr_action_items.items():
-   for _x,_y in zip(_v[0],_v[1]):
-      if not _x in _lr_action:  _lr_action[_x] = { }
-      _lr_action[_x][_k] = _y
+    for _x,_y in zip(_v[0],_v[1]):
+        if not _x in _lr_action:  _lr_action[_x] = { }
+        _lr_action[_x][_k] = _y
 del _lr_action_items
 
-_lr_goto_items = {u'function':([0,6,7,8,13,23,28,32,],[12,12,12,12,12,12,12,12,]),u'division':([0,4,7,25,64,],[13,23,13,23,66,]),u'product':([8,],[28,]),u'frac':([43,],[57,]),u'factor_int':([0,],[19,]),u'power':([17,18,34,40,],[36,41,49,53,]),u'unit_with_power':([0,6,7,8,13,23,28,32,],[3,3,3,3,3,3,3,3,]),u'signed_float':([0,43,],[14,58,]),u'product_of_units':([0,6,7,8,28,],[4,24,25,31,47,]),u'factor_float':([0,],[15,]),u'sign':([0,18,36,41,43,49,53,66,],[2,42,42,42,59,42,42,67,]),u'signe [...]
+_lr_goto_items = {'function':([0,6,7,8,13,23,28,32,],[12,12,12,12,12,12,12,12,]),'division':([0,4,7,25,64,],[13,23,13,23,66,]),'product':([8,],[28,]),'frac':([43,],[57,]),'factor_int':([0,],[19,]),'power':([17,18,34,40,],[36,41,49,53,]),'unit_with_power':([0,6,7,8,13,23,28,32,],[3,3,3,3,3,3,3,3,]),'signed_float':([0,43,],[14,58,]),'product_of_units':([0,6,7,8,28,],[4,24,25,31,47,]),'factor_float':([0,],[15,]),'sign':([0,18,36,41,43,49,53,66,],[2,42,42,42,59,42,42,67,]),'signed_int':([17, [...]
 
 _lr_goto = { }
 for _k, _v in _lr_goto_items.items():
-   for _x,_y in zip(_v[0],_v[1]):
-       if not _x in _lr_goto: _lr_goto[_x] = { }
-       _lr_goto[_x][_k] = _y
+    for _x,_y in zip(_v[0],_v[1]):
+        if not _x in _lr_goto: _lr_goto[_x] = { }
+        _lr_goto[_x][_k] = _y
 del _lr_goto_items
 _lr_productions = [
   ("S' -> main","S'",1,None,None,None),
-  (u'main -> product_of_units',u'main',1,'p_main','astropy/units/format/generic.py',125),
-  (u'main -> factor product_of_units',u'main',2,'p_main','astropy/units/format/generic.py',126),
-  (u'main -> division_product_of_units',u'main',1,'p_main','astropy/units/format/generic.py',127),
-  (u'main -> factor division_product_of_units',u'main',2,'p_main','astropy/units/format/generic.py',128),
-  (u'main -> inverse_unit',u'main',1,'p_main','astropy/units/format/generic.py',129),
-  (u'main -> factor inverse_unit',u'main',2,'p_main','astropy/units/format/generic.py',130),
-  (u'division_product_of_units -> product_of_units division unit_expression',u'division_product_of_units',3,'p_division_product_of_units','astropy/units/format/generic.py',140),
-  (u'inverse_unit -> division unit_expression',u'inverse_unit',2,'p_inverse_unit','astropy/units/format/generic.py',147),
-  (u'factor -> factor_float',u'factor',1,'p_factor','astropy/units/format/generic.py',153),
-  (u'factor -> factor_int',u'factor',1,'p_factor','astropy/units/format/generic.py',154),
-  (u'factor_float -> signed_float',u'factor_float',1,'p_factor_float','astropy/units/format/generic.py',160),
-  (u'factor_float -> signed_float UINT signed_int',u'factor_float',3,'p_factor_float','astropy/units/format/generic.py',161),
-  (u'factor_float -> signed_float UINT power numeric_power',u'factor_float',4,'p_factor_float','astropy/units/format/generic.py',162),
-  (u'factor_int -> UINT',u'factor_int',1,'p_factor_int','astropy/units/format/generic.py',173),
-  (u'factor_int -> UINT signed_int',u'factor_int',2,'p_factor_int','astropy/units/format/generic.py',174),
-  (u'factor_int -> UINT power numeric_power',u'factor_int',3,'p_factor_int','astropy/units/format/generic.py',175),
-  (u'factor_int -> UINT UINT signed_int',u'factor_int',3,'p_factor_int','astropy/units/format/generic.py',176),
-  (u'factor_int -> UINT UINT power numeric_power',u'factor_int',4,'p_factor_int','astropy/units/format/generic.py',177),
-  (u'product_of_units -> unit_expression product product_of_units',u'product_of_units',3,'p_product_of_units','astropy/units/format/generic.py',193),
-  (u'product_of_units -> unit_expression product_of_units',u'product_of_units',2,'p_product_of_units','astropy/units/format/generic.py',194),
-  (u'product_of_units -> unit_expression',u'product_of_units',1,'p_product_of_units','astropy/units/format/generic.py',195),
-  (u'unit_expression -> function',u'unit_expression',1,'p_unit_expression','astropy/units/format/generic.py',206),
-  (u'unit_expression -> unit_with_power',u'unit_expression',1,'p_unit_expression','astropy/units/format/generic.py',207),
-  (u'unit_expression -> OPEN_PAREN product_of_units CLOSE_PAREN',u'unit_expression',3,'p_unit_expression','astropy/units/format/generic.py',208),
-  (u'unit_with_power -> UNIT power numeric_power',u'unit_with_power',3,'p_unit_with_power','astropy/units/format/generic.py',217),
-  (u'unit_with_power -> UNIT numeric_power',u'unit_with_power',2,'p_unit_with_power','astropy/units/format/generic.py',218),
-  (u'unit_with_power -> UNIT',u'unit_with_power',1,'p_unit_with_power','astropy/units/format/generic.py',219),
-  (u'numeric_power -> sign UINT',u'numeric_power',2,'p_numeric_power','astropy/units/format/generic.py',230),
-  (u'numeric_power -> OPEN_PAREN paren_expr CLOSE_PAREN',u'numeric_power',3,'p_numeric_power','astropy/units/format/generic.py',231),
-  (u'paren_expr -> sign UINT',u'paren_expr',2,'p_paren_expr','astropy/units/format/generic.py',240),
-  (u'paren_expr -> signed_float',u'paren_expr',1,'p_paren_expr','astropy/units/format/generic.py',241),
-  (u'paren_expr -> frac',u'paren_expr',1,'p_paren_expr','astropy/units/format/generic.py',242),
-  (u'frac -> sign UINT division sign UINT',u'frac',5,'p_frac','astropy/units/format/generic.py',251),
-  (u'sign -> SIGN',u'sign',1,'p_sign','astropy/units/format/generic.py',257),
-  (u'sign -> <empty>',u'sign',0,'p_sign','astropy/units/format/generic.py',258),
-  (u'product -> STAR',u'product',1,'p_product','astropy/units/format/generic.py',267),
-  (u'product -> PERIOD',u'product',1,'p_product','astropy/units/format/generic.py',268),
-  (u'division -> SOLIDUS',u'division',1,'p_division','astropy/units/format/generic.py',274),
-  (u'power -> DOUBLE_STAR',u'power',1,'p_power','astropy/units/format/generic.py',280),
-  (u'power -> CARET',u'power',1,'p_power','astropy/units/format/generic.py',281),
-  (u'signed_int -> SIGN UINT',u'signed_int',2,'p_signed_int','astropy/units/format/generic.py',287),
-  (u'signed_float -> sign UINT',u'signed_float',2,'p_signed_float','astropy/units/format/generic.py',293),
-  (u'signed_float -> sign UFLOAT',u'signed_float',2,'p_signed_float','astropy/units/format/generic.py',294),
-  (u'function_name -> SQRT',u'function_name',1,'p_function_name','astropy/units/format/generic.py',300),
-  (u'function -> function_name OPEN_PAREN unit_expression CLOSE_PAREN',u'function',4,'p_function','astropy/units/format/generic.py',306),
+  ('main -> product_of_units','main',1,'p_main','astropy/units/format/generic.py',125),
+  ('main -> factor product_of_units','main',2,'p_main','astropy/units/format/generic.py',126),
+  ('main -> division_product_of_units','main',1,'p_main','astropy/units/format/generic.py',127),
+  ('main -> factor division_product_of_units','main',2,'p_main','astropy/units/format/generic.py',128),
+  ('main -> inverse_unit','main',1,'p_main','astropy/units/format/generic.py',129),
+  ('main -> factor inverse_unit','main',2,'p_main','astropy/units/format/generic.py',130),
+  ('division_product_of_units -> product_of_units division unit_expression','division_product_of_units',3,'p_division_product_of_units','astropy/units/format/generic.py',140),
+  ('inverse_unit -> division unit_expression','inverse_unit',2,'p_inverse_unit','astropy/units/format/generic.py',147),
+  ('factor -> factor_float','factor',1,'p_factor','astropy/units/format/generic.py',153),
+  ('factor -> factor_int','factor',1,'p_factor','astropy/units/format/generic.py',154),
+  ('factor_float -> signed_float','factor_float',1,'p_factor_float','astropy/units/format/generic.py',160),
+  ('factor_float -> signed_float UINT signed_int','factor_float',3,'p_factor_float','astropy/units/format/generic.py',161),
+  ('factor_float -> signed_float UINT power numeric_power','factor_float',4,'p_factor_float','astropy/units/format/generic.py',162),
+  ('factor_int -> UINT','factor_int',1,'p_factor_int','astropy/units/format/generic.py',173),
+  ('factor_int -> UINT signed_int','factor_int',2,'p_factor_int','astropy/units/format/generic.py',174),
+  ('factor_int -> UINT power numeric_power','factor_int',3,'p_factor_int','astropy/units/format/generic.py',175),
+  ('factor_int -> UINT UINT signed_int','factor_int',3,'p_factor_int','astropy/units/format/generic.py',176),
+  ('factor_int -> UINT UINT power numeric_power','factor_int',4,'p_factor_int','astropy/units/format/generic.py',177),
+  ('product_of_units -> unit_expression product product_of_units','product_of_units',3,'p_product_of_units','astropy/units/format/generic.py',193),
+  ('product_of_units -> unit_expression product_of_units','product_of_units',2,'p_product_of_units','astropy/units/format/generic.py',194),
+  ('product_of_units -> unit_expression','product_of_units',1,'p_product_of_units','astropy/units/format/generic.py',195),
+  ('unit_expression -> function','unit_expression',1,'p_unit_expression','astropy/units/format/generic.py',206),
+  ('unit_expression -> unit_with_power','unit_expression',1,'p_unit_expression','astropy/units/format/generic.py',207),
+  ('unit_expression -> OPEN_PAREN product_of_units CLOSE_PAREN','unit_expression',3,'p_unit_expression','astropy/units/format/generic.py',208),
+  ('unit_with_power -> UNIT power numeric_power','unit_with_power',3,'p_unit_with_power','astropy/units/format/generic.py',217),
+  ('unit_with_power -> UNIT numeric_power','unit_with_power',2,'p_unit_with_power','astropy/units/format/generic.py',218),
+  ('unit_with_power -> UNIT','unit_with_power',1,'p_unit_with_power','astropy/units/format/generic.py',219),
+  ('numeric_power -> sign UINT','numeric_power',2,'p_numeric_power','astropy/units/format/generic.py',230),
+  ('numeric_power -> OPEN_PAREN paren_expr CLOSE_PAREN','numeric_power',3,'p_numeric_power','astropy/units/format/generic.py',231),
+  ('paren_expr -> sign UINT','paren_expr',2,'p_paren_expr','astropy/units/format/generic.py',240),
+  ('paren_expr -> signed_float','paren_expr',1,'p_paren_expr','astropy/units/format/generic.py',241),
+  ('paren_expr -> frac','paren_expr',1,'p_paren_expr','astropy/units/format/generic.py',242),
+  ('frac -> sign UINT division sign UINT','frac',5,'p_frac','astropy/units/format/generic.py',251),
+  ('sign -> SIGN','sign',1,'p_sign','astropy/units/format/generic.py',257),
+  ('sign -> <empty>','sign',0,'p_sign','astropy/units/format/generic.py',258),
+  ('product -> STAR','product',1,'p_product','astropy/units/format/generic.py',267),
+  ('product -> PERIOD','product',1,'p_product','astropy/units/format/generic.py',268),
+  ('division -> SOLIDUS','division',1,'p_division','astropy/units/format/generic.py',274),
+  ('power -> DOUBLE_STAR','power',1,'p_power','astropy/units/format/generic.py',280),
+  ('power -> CARET','power',1,'p_power','astropy/units/format/generic.py',281),
+  ('signed_int -> SIGN UINT','signed_int',2,'p_signed_int','astropy/units/format/generic.py',287),
+  ('signed_float -> sign UINT','signed_float',2,'p_signed_float','astropy/units/format/generic.py',293),
+  ('signed_float -> sign UFLOAT','signed_float',2,'p_signed_float','astropy/units/format/generic.py',294),
+  ('function_name -> SQRT','function_name',1,'p_function_name','astropy/units/format/generic.py',300),
+  ('function -> function_name OPEN_PAREN unit_expression CLOSE_PAREN','function',4,'p_function','astropy/units/format/generic.py',306),
 ]
diff --git a/astropy/units/format/latex.py b/astropy/units/format/latex.py
index 68341ef..163ae9f 100644
--- a/astropy/units/format/latex.py
+++ b/astropy/units/format/latex.py
@@ -40,8 +40,9 @@ class Latex(base.Base):
                 out.append(self._get_unit_name(base))
             else:
                 out.append('{0}^{{{1}}}'.format(
-                    self._get_unit_name(base), power))
-        return r'\ '.join(out)
+                    self._get_unit_name(base),
+                    utils.format_power(power)))
+        return r'\,'.join(out)
 
     def _format_exponential_notation(self, val):
         m, ex = utils.split_mantissa_exponent(val)
@@ -64,10 +65,10 @@ class Latex(base.Base):
         if latex_name is not None:
             s = latex_name
         elif isinstance(unit, core.CompositeUnit):
-            if unit.scale != 1:
-                s = self._format_exponential_notation(unit.scale) + r'\ '
-            else:
+            if unit.scale == 1:
                 s = ''
+            else:
+                s = self._format_exponential_notation(unit.scale) + r'\,'
 
             if len(unit.bases):
                 positives, negatives = utils.get_grouped_by_powers(
diff --git a/astropy/units/format/unicode_format.py b/astropy/units/format/unicode_format.py
index 0256ede..ee289b4 100644
--- a/astropy/units/format/unicode_format.py
+++ b/astropy/units/format/unicode_format.py
@@ -14,15 +14,16 @@ from . import utils
 
 class Unicode(console.Console):
     """
-    Output-only format for to display pretty formatting at the console
+    Output-only format to display pretty formatting at the console
     using Unicode characters.
 
     For example::
 
-      >>> print u.Ry.decompose().to_string('unicode')
-                 m² kg
-      2.18×10-¹⁸ ─────
-                  s²
+      >>> import astropy.units as u
+      >>> print(u.Ry.decompose().to_string('unicode'))
+                   m² kg
+      2.1...×10⁻¹⁸ ─────
+                    s²
     """
 
     def __init__(self):
@@ -61,7 +62,11 @@ class Unicode(console.Console):
             '8': '⁸',
             '9': '⁹',
             '-': '⁻',
-            '−': '⁻'}
+            '−': '⁻',
+            # This is actually a "raised omission bracket", but it's
+            # the closest thing I could find to a superscript solidus.
+            '/': '⸍',
+            }
         output = []
         for c in number:
             output.append(mapping[c])
diff --git a/astropy/units/format/utils.py b/astropy/units/format/utils.py
index 9ca5810..f660009 100644
--- a/astropy/units/format/utils.py
+++ b/astropy/units/format/utils.py
@@ -1,12 +1,15 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
 """
 Utilities shared by the different formats.
 """
+
 from __future__ import (absolute_import, division, print_function,
                         unicode_literals)
 
-import functools
-import re
+
+from ...extern import six
+from ...utils.compat.fractions import Fraction
 
 
 def get_grouped_by_powers(bases, powers):
@@ -43,21 +46,32 @@ def get_grouped_by_powers(bases, powers):
 def split_mantissa_exponent(v):
     """
     Given a number, split it into its mantissa and base 10 exponent
-    parts, each as strings.
+    parts, each as strings.  If the exponent is too small, it may be
+    returned as the empty string.
+
+    The precise rules are based on Python's "general purpose" (`g`)
+    formatting.
+
+    Parameters
+    ----------
+    v : float
+
+    Returns
+    -------
+    mantissa, exponent : tuple of strings
     """
-    x = "{0:.4e}".format(v).split('e')
+    x = "{0:.8g}".format(v).split('e')
     if x[0] != '1.' + '0' * (len(x[0]) - 2):
         m = x[0]
-        if '.' in m:
-            m = m.rstrip('0')
     else:
         m = ''
 
-    m = m.rstrip('.')
-
-    ex = x[1].lstrip("0+")
-    if len(ex) > 0 and ex[0] == '-':
-        ex = '-' + ex[1:].lstrip('0')
+    if len(x) == 2:
+        ex = x[1].lstrip("0+")
+        if len(ex) > 0 and ex[0] == '-':
+            ex = '-' + ex[1:].lstrip('0')
+    else:
+        ex = ''
 
     return m, ex
 
@@ -94,3 +108,20 @@ def decompose_to_known_units(unit, func):
                 return decompose_to_known_units(unit._represents, func)
             raise
         return unit
+
+
+def format_power(power):
+    """
+    Converts a value for a power (which may be floating point or a
+    `fractions.Fraction` object), into a string either looking like
+    an integer or a fraction.
+    """
+    if not isinstance(power, Fraction):
+        if power % 1.0 != 0.0:
+            frac = Fraction.from_float(power)
+            power = frac.limit_denominator(10)
+            if power.denominator == 1:
+                power = int(power.numerator)
+        else:
+            power = int(power)
+    return six.text_type(power)
diff --git a/astropy/units/format/vounit.py b/astropy/units/format/vounit.py
index 4fdf25a..375dbfe 100644
--- a/astropy/units/format/vounit.py
+++ b/astropy/units/format/vounit.py
@@ -4,8 +4,11 @@ Handles the "VOUnit" unit format.
 """
 from __future__ import (absolute_import, division, print_function,
                         unicode_literals)
+from ...extern.six.moves import zip
 
+import keyword
 import warnings
+from ...utils.exceptions import AstropyDeprecationWarning
 
 from . import generic
 from . import utils
@@ -19,7 +22,8 @@ class VOUnit(generic.Generic):
     <http://www.ivoa.net/Documents/VOUnits/>`_.
     """
     def __init__(self):
-        super(VOUnit, self).__init__()
+        if '_parser' not in VOUnit.__dict__:
+            VOUnit._parser, VOUnit._lexer = self._make_parser()
 
         if not '_units' in VOUnit.__dict__:
             unit_names = VOUnit._generate_unit_names()
@@ -27,8 +31,8 @@ class VOUnit(generic.Generic):
 
     @staticmethod
     def _generate_unit_names():
-        import keyword
         from ... import units as u
+
         names = {}
         deprecated_names = set()
 
@@ -74,7 +78,7 @@ class VOUnit(generic.Generic):
             warnings.warn(
                 "The use of unit {0!r} is discouraged by the "
                 "VOUnit standard.".format(unit),
-                DeprecationWarning)
+                AstropyDeprecationWarning)
 
         return cls._units[unit]
 
@@ -89,7 +93,7 @@ class VOUnit(generic.Generic):
             warnings.warn(
                 "The use of unit {0!r} is discouraged by the "
                 "VOUnit standard.".format(name),
-                DeprecationWarning)
+                AstropyDeprecationWarning)
 
         return name
 
@@ -100,6 +104,11 @@ class VOUnit(generic.Generic):
         unit = utils.decompose_to_known_units(unit, self._get_unit_name)
 
         if isinstance(unit, core.CompositeUnit):
+            if unit.physical_type == 'dimensionless' and unit.scale != 1:
+                raise ValueError("The VOUnit format is not able to "
+                                 "represent scale for dimensionless units. "
+                                 "Multiply your data by {0:e}."
+                                 .format(unit.scale))
             s = ''
             if unit.scale != 1:
                 m, ex = utils.split_mantissa_exponent(unit.scale)
@@ -111,7 +120,7 @@ class VOUnit(generic.Generic):
                         s += '+'
                     s += ex
 
-            pairs = zip(unit.bases, unit.powers)
+            pairs = list(zip(unit.bases, unit.powers))
             pairs.sort(key=lambda x: x[1], reverse=True)
 
             s += self._format_unit_list(pairs)
diff --git a/astropy/units/imperial.py b/astropy/units/imperial.py
index 4715813..d4418dc 100644
--- a/astropy/units/imperial.py
+++ b/astropy/units/imperial.py
@@ -2,9 +2,11 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
 """
-This package defines colloquially used Imperial units.  They are also
-available in the `astropy.units` namespace.
+This package defines colloquially used Imperial units.  By default, they
+are not enabled.  To enable them, do::
 
+    >>> from astropy.units import imperial
+    >>> imperial.enable()  # doctest: +SKIP
 """
 
 from __future__ import (absolute_import, division, print_function,
@@ -13,46 +15,46 @@ from __future__ import (absolute_import, division, print_function,
 from .core import UnitBase, def_unit
 from . import si
 
-UnitBase._set_namespace(globals())
+_ns = globals()
 
 ###########################################################################
 # LENGTH
 
-def_unit(['inch'], 2.54 * si.cm, register=True,
+def_unit(['inch'], 2.54 * si.cm, namespace=_ns,
          doc="International inch")
-def_unit(['ft', 'foot'], 12 * inch, register=True,
+def_unit(['ft', 'foot'], 12 * inch, namespace=_ns,
          doc="International foot")
-def_unit(['yd', 'yard'], 3 * ft, register=True,
+def_unit(['yd', 'yard'], 3 * ft, namespace=_ns,
          doc="International yard")
-def_unit(['mi', 'mile'], 5280 * ft, register=True,
+def_unit(['mi', 'mile'], 5280 * ft, namespace=_ns,
          doc="International mile")
-def_unit(['nmi', 'nauticalmile', 'NM'], 1852 * si.m, register=True,
+def_unit(['nmi', 'nauticalmile', 'NM'], 1852 * si.m, namespace=_ns,
          doc="Nautical mile")
 
 
 ###########################################################################
 # AREAS
 
-def_unit(['ac', 'acre'], 43560 * ft ** 2, register=True,
+def_unit(['ac', 'acre'], 43560 * ft ** 2, namespace=_ns,
          doc="International acre")
 
 
 ###########################################################################
 # VOLUMES
 
-def_unit(['gallon'], si.liter / 0.264172052, register=True,
+def_unit(['gallon'], si.liter / 0.264172052, namespace=_ns,
          doc="U.S. liquid gallon")
-def_unit(['quart'], gallon / 4, register=True,
+def_unit(['quart'], gallon / 4, namespace=_ns,
          doc="U.S. liquid quart")
-def_unit(['pint'], quart / 2, register=True,
+def_unit(['pint'], quart / 2, namespace=_ns,
          doc="U.S. liquid pint")
-def_unit(['cup'], pint / 2, register=True,
+def_unit(['cup'], pint / 2, namespace=_ns,
          doc="U.S. customary cup")
-def_unit(['foz', 'fluid_oz', 'fluid_ounce'], cup / 8, register=True,
+def_unit(['foz', 'fluid_oz', 'fluid_ounce'], cup / 8, namespace=_ns,
          doc="U.S. fluid ounce")
-def_unit(['tbsp', 'tablespoon'], foz / 2, register=True,
+def_unit(['tbsp', 'tablespoon'], foz / 2, namespace=_ns,
          doc="U.S. customary tablespoon")
-def_unit(['tsp', 'teaspoon'], tbsp / 3, register=True,
+def_unit(['tsp', 'teaspoon'], tbsp / 3, namespace=_ns,
          doc="U.S. customary teaspoon")
 
 
@@ -61,30 +63,30 @@ def_unit(['tsp', 'teaspoon'], tbsp / 3, register=True,
 
 # Imperial measurements
 # well, force actually, but who uses it that way?
-def_unit(['oz', 'ounce'], 28.349523125 * si.g, register=True,
+def_unit(['oz', 'ounce'], 28.349523125 * si.g, namespace=_ns,
          doc="International avoirdupois ounce")
-def_unit(['lb', 'pound'], 16 * oz, register=True,
+def_unit(['lb', 'pound'], 16 * oz, namespace=_ns,
          doc="International avoirdupois pound")
-def_unit(['ton'], 2000 * lb, register=True,
+def_unit(['ton'], 2000 * lb, namespace=_ns,
          doc="International avoirdupois ton")
 
 
 ###########################################################################
 # SPEED
 
-def_unit(['kn', 'kt', 'knot', 'NMPH'], nmi / si.h, register=True,
+def_unit(['kn', 'kt', 'knot', 'NMPH'], nmi / si.h, namespace=_ns,
          doc="nautical unit of speed: 1 nmi per hour")
 
 
 ##########################################################################
 # ENERGY
 
-def_unit(['BTU', 'btu'], 1.05505585 * si.kJ, register=True,
+def_unit(['BTU', 'btu'], 1.05505585 * si.kJ, namespace=_ns,
          doc="British thermal unit")
-def_unit(['cal', 'calorie'], 4.184 * si.J, register=True,
+def_unit(['cal', 'calorie'], 4.184 * si.J, namespace=_ns,
          doc="Thermochemical calorie: pre-SI metric unit of energy")
 def_unit(['kcal', 'Cal', 'Calorie', 'kilocal', 'kilocalorie'],
-         1000 * cal, register=True,
+         1000 * cal, namespace=_ns,
          doc="Calorie: colloquial definition of Calorie")
 
 
@@ -92,7 +94,7 @@ def_unit(['kcal', 'Cal', 'Calorie', 'kilocal', 'kilocalorie'],
 # POWER
 
 # Imperial units
-def_unit(['hp', 'horsepower'], si.W / 0.00134102209, register=True,
+def_unit(['hp', 'horsepower'], si.W / 0.00134102209, namespace=_ns,
          doc="Electrical horsepower")
 
 
@@ -110,3 +112,18 @@ del def_unit
 # standard units defined here.
 from .utils import generate_unit_summary as _generate_unit_summary
 __doc__ += _generate_unit_summary(globals())
+
+
+def enable():
+    """
+    Enable Imperial units so they appear in results of
+    `Unit.find_equivalent_units` and `Unit.compose`.
+
+    This may be used with the ``with`` statement to enable Imperial
+    units only temporarily.
+    """
+    # Local import to avoid cyclical import
+    from .core import add_enabled_units
+    # Local import to avoid polluting namespace
+    import inspect
+    return add_enabled_units(inspect.getmodule(enable))
diff --git a/astropy/units/physical.py b/astropy/units/physical.py
index 754995f..9c89563 100644
--- a/astropy/units/physical.py
+++ b/astropy/units/physical.py
@@ -24,29 +24,6 @@ __all__ = ['def_physical_type', 'get_physical_type']
 _physical_unit_mapping = {}
 
 
-def _tuple_repr(unit):
-    """
-    Creates a canonical representation of a (possibly compound)
-    unit that can be used as a dictionary key.  This makes looking
-    up other units with the same signature easy.
-
-    Parameters
-    ----------
-    unit : `~astropy.units.UnitBase` instance
-        The unit to create a tuple for.
-
-    Returns
-    -------
-    canonical : tuple
-        A canonical, hashable representation of the unit.
-    """
-    unit = unit.decompose()
-    r = zip([unicode(x) for x in unit.bases], unit.powers)
-    r.sort()
-    r = tuple(r)
-    return r
-
-
 def def_physical_type(unit, name):
     """
     Adds a new physical unit mapping.
@@ -59,7 +36,7 @@ def def_physical_type(unit, name):
     name : str
         The physical name of the unit.
     """
-    r = _tuple_repr(unit)
+    r = unit._get_physical_type_id()
     if r in _physical_unit_mapping:
         raise ValueError(
             "{0!r} ({1!r}) already defined as {2!r}".format(
@@ -84,7 +61,7 @@ def get_physical_type(unit):
         The name of the physical quantity, or unknown if not
         known.
     """
-    r = _tuple_repr(unit)
+    r = unit._get_physical_type_id()
     return _physical_unit_mapping.get(r, 'unknown')
 
 
@@ -140,6 +117,8 @@ for unit, name in [
     (si.cd / si.m ** 2, 'luminance'),
     (astrophys.Jy, 'spectral flux density'),
     (cgs.erg / si.angstrom / si.cm ** 2 / si.s, 'spectral flux density wav'),
+    (astrophys.photon / si.Hz / si.cm ** 2 / si.s, 'photon flux density'),
+    (astrophys.photon / si.AA / si.cm ** 2 / si.s, 'photon flux density wav'),
     (astrophys.R, 'photon flux'),
     (astrophys.bit, 'data quantity'),
     (astrophys.bit / si.s, 'bandwidth')
diff --git a/astropy/units/quantity.py b/astropy/units/quantity.py
index aaefbe5..36f637b 100644
--- a/astropy/units/quantity.py
+++ b/astropy/units/quantity.py
@@ -1,4 +1,4 @@
-# coding: utf-8
+# -*- coding: utf-8 -*-
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 """
 This module defines the `Quantity` object, which represents a number with some
@@ -10,32 +10,32 @@ from __future__ import (absolute_import, unicode_literals, division,
                         print_function)
 
 # Standard library
-import copy
 import numbers
-import warnings
 
 import numpy as np
 
 # AstroPy
-from .core import Unit, UnitBase, CompositeUnit
-from ..config import ConfigurationItem
+from ..extern import six
+from .core import Unit, dimensionless_unscaled, UnitBase, UnitsError
+from ..utils import lazyproperty
+from ..utils.compat.misc import override__dir__
 
-WARN_IMPLICIT_NUMERIC_CONVERSION = ConfigurationItem(
-                                          "warn_implicit_numeric_conversion",
-                                          True,
-                                          "Whether to show a warning message "
-                                          "in the log when converting a "
-                                          "Quantity to a float/int")
 
 __all__ = ["Quantity"]
 
 
-def _is_unity(value):
-    x = value.decompose()
-    return (len(x.bases) == 0 and x.scale == 1.0)
+def _can_cast(arg, dtype):
+    """
+    This is needed for compatibility with Numpy < 1.6, in which ``can_cast``
+    can only take a dtype or type as its first argument.
+    """
+    return np.can_cast(getattr(arg, 'dtype', type(arg)), dtype)
+
 
+_UNIT_NOT_INITIALISED = "(Unit not initialised)"
 
-def _validate_value(value):
+
+def _validate_value(value, dtype, copy):
     """ Make sure that the input is a Python or Numpy numeric type.
 
     Parameters
@@ -43,6 +43,15 @@ def _validate_value(value):
     value : number
         An object that will be checked whether it is a numeric type or not.
 
+    dtype : Numpy dtype or None
+        The dtype of the resulting value.  If None, the dtype of the
+        input value is used or automatically computed.
+
+    copy : bool, optional
+        If True (default), then the value is copied.  Otherwise, a copy
+        will only be made if `__array__` returns a copy, if obj is a
+        nested sequence, or if a copy is needed to satisfy `dtype`.
+
     Returns
     -------
     newval
@@ -51,34 +60,64 @@ def _validate_value(value):
 
     from ..utils.misc import isiterable
 
-    if isinstance(value, (numbers.Number, np.number)):
-        value_obj = value
-    elif isiterable(value):
-        value_obj = np.array(value, copy=True)
-    elif isinstance(value, np.ndarray):
-        # A length-0 numpy array (i.e. numpy scalar) which we accept as-is
-        value_obj = np.array(value, copy=True)
-    else:
-        raise TypeError("The value must be a valid Python or Numpy numeric "
-                        "type.")
+    if (isinstance(value, (numbers.Number, np.number, np.ndarray)) or
+            isiterable(value)):
+        value_obj = np.array(value, dtype=dtype, copy=copy)
+
+        # It would seem reasonable to exclude object arrays here also,
+        # but then long integers do not work.
+        if value_obj.dtype.kind not in 'SU':
+            return value_obj
+
+    raise TypeError("The value must be a valid Python or Numpy numeric "
+                    "type.")
+
 
-    return value_obj
+def _can_have_arbitrary_unit(value):
+    """Test whether the items in value can have arbitrary units
+
+    Numbers whose value does not change upon a unit change, i.e.,
+    zero, infinity, or not-a-number
+
+    Parameters
+    ----------
+    value : number or array
+
+    Returns
+    -------
+    `True` if each member is either zero or not finite, `False` otherwise
+    """
+    return np.all(np.logical_or(np.equal(value, 0.), ~np.isfinite(value)))
 
 
-class Quantity(object):
+class Quantity(np.ndarray):
     """ A `Quantity` represents a number with some associated unit.
 
     Parameters
     ----------
     value : number, `Quantity` object, or sequence of `Quantity` objects.
-        The numerical value of this quantity in the units given by unit.
-        If a `Quantity` or sequence of them, creates a new `Quantity`
-        object, converting to `unit` units as needed.
+        The numerical value of this quantity in the units given by
+        unit.  If a `Quantity` or sequence of them, creates a new
+        `Quantity` object, converting to `unit` units as needed.
+
     unit : `~astropy.units.UnitBase` instance, str
         An object that represents the unit associated with the input value.
         Must be an `~astropy.units.UnitBase` object or a string parseable by
         the `units` package.
 
+    dtype : ~numpy.dtype, optional
+        The dtype of the resulting Numpy array or scalar that will
+        hold the value.  If not provided, is is determined
+        automatically from the input value.
+
+    copy : bool, optional
+        If `True` (default), then the value is copied.  Otherwise, a copy
+        will only be made if `__array__` returns a copy, if obj is a
+        nested sequence, or if a copy is needed to satisfy `dtype`.
+        (The `False` option is intended mostly for internal use, to speed
+        up initialization where it is known a copy has been made already.
+        Use with care.)
+
     Raises
     ------
     TypeError
@@ -87,18 +126,300 @@ class Quantity(object):
         If the unit provided is not either a `Unit` object or a parseable
         string unit.
     """
+    # Need to set a class-level default for _equivalencies, or
+    # Constants can not initialize properly
+    _equivalencies = []
 
-    def __init__(self, value, unit):
-        from ..utils.misc import isiterable
+    __array_priority__ = 10000
 
-        self._unit = Unit(unit)
+    def __new__(cls, value, unit=None, dtype=None, copy=True):
+
+        from ..utils.misc import isiterable
 
         if isinstance(value, Quantity):
-            self._value = _validate_value(value.to(self._unit).value)
+            if unit is None or unit is value.unit:
+                _value = _validate_value(value.value, dtype, copy)
+            else:
+                _value = _validate_value(value.to(unit).value, dtype, copy)
         elif isiterable(value) and all(isinstance(v, Quantity) for v in value):
-            self._value = _validate_value([q.to(self._unit).value for q in value])
+            if unit is None:
+                unit = value[0].unit
+            _value = _validate_value([q.to(unit).value for q in value], dtype,
+                                     copy)
         else:
-            self._value = _validate_value(value)
+            _value = _validate_value(value, dtype, copy)
+
+        dtype = _value.dtype
+
+        self = super(Quantity, cls).__new__(cls, _value.shape, dtype=dtype,
+                                            buffer=_value.data)
+        if unit is None:
+            if isinstance(value, Quantity):
+                self._unit = value.unit
+            else:
+                self._unit = dimensionless_unscaled
+        else:
+            self._unit = Unit(unit)
+
+        return self
+
+    def __array_finalize__(self, obj):
+        if isinstance(obj, Quantity):
+            self._unit = obj._unit
+
+    def __array_prepare__(self, obj, context=None):
+        # This method gets called by Numpy whenever a ufunc is called on the
+        # array. The object passed in ``obj`` is an empty version of the
+        # output array which we can e.g. change to an array sub-class, add
+        # attributes to, etc. After this is called, then the ufunc is called
+        # and the values in this empty array are set.
+
+        # If no context is set, just return the input
+        if context is None:
+            return obj
+
+        # Find out which ufunc is being used
+        function = context[0]
+
+        from .quantity_helper import UNSUPPORTED_UFUNCS, UFUNC_HELPERS
+
+        # Check whether we even support this ufunc
+        if function in UNSUPPORTED_UFUNCS:
+            raise TypeError("Cannot use function '{0}' with quantities"
+                            .format(function.__name__))
+
+        # Now find out what arguments were passed to the ufunc, usually, this
+        # will include at least the present object, and another, which could
+        # be a Quantity, or a Numpy array, etc. when using two-argument ufuncs.
+        args = context[1][:function.nin]
+        units = [getattr(arg, 'unit', None) for arg in args]
+
+        # If the ufunc is supported, then we call a helper function (defined
+        # in quantity_helper.py) which returns the scale by which the inputs
+        # should be multiplied before being passed to the ufunc, as well as
+        # the unit the output from the ufunc will have.
+        if function in UFUNC_HELPERS:
+            scales, result_unit = UFUNC_HELPERS[function](function, *units)
+        else:
+            raise TypeError("Unknown ufunc {0}.  Please raise issue on "
+                            "https://github.com/astropy/astropy"
+                            .format(function.__name__))
+
+        if any(scale == 0. for scale in scales):
+            # for two-argument ufuncs with a quantity and a non-quantity,
+            # the quantity normally needs to be dimensionless, *except*
+            # if the non-quantity can have arbitrary unit, i.e., when it
+            # is all zero, infinity or NaN.  In that case, the non-quantity
+            # can just have the unit of the quantity
+            # (this allows, e.g., `q > 0.` independent of unit)
+            maybe_arbitrary_arg = args[scales.index(0.)]
+            if _can_have_arbitrary_unit(maybe_arbitrary_arg):
+                scales = [1., 1.]
+            else:
+                raise UnitsError("Can only apply '{0}' function to "
+                                 "dimensionless quantities when other "
+                                 "argument is not a quantity (unless the "
+                                 "latter is all zero/infinity/nan)"
+                                 .format(function.__name__))
+
+        # In the case of np.power, the unit itself needs to be modified by an
+        # amount that depends on one of the input values, so we need to treat
+        # this as a special case.
+        # TODO: find a better way to deal with this case
+        if function is np.power and result_unit is not None:
+            if not np.isscalar(args[1]):
+                raise ValueError(
+                    "Quantities may only be raised to a scalar power")
+
+            if units[1] is None:
+                result_unit = result_unit ** args[1]
+            else:
+                result_unit = result_unit ** args[1].to(dimensionless_unscaled)
+
+        # We now prepare the output object
+
+        if self is obj:  # happens if the output object is self, which happens
+                         # for in-place operations such as q1 += q2
+
+            # In some cases, the result of a ufunc should be a plain Numpy
+            # array, which we can't do if we are doing an in-place operation.
+            if result_unit is None:
+                raise TypeError("Cannot store non-quantity output from {0} "
+                                "function in Quantity object"
+                                .format(function.__name__))
+
+            # If the Quantity has an integer dtype, in-place operations are
+            # dangerous because in some cases the quantity will be e.g.
+            # decomposed, which involves being scaled by a float, but since
+            # the array is an integer the output then gets converted to an int
+            # and truncated.
+            if(any(not _can_cast(arg, obj.dtype) for arg in args) or
+               np.any(np.array(scales, dtype=obj.dtype) != np.array(scales))):
+                raise TypeError("Arguments cannot be cast safely to inplace "
+                                "output with dtype={0}".format(self.dtype))
+
+            result = self  # no need for a view since we are returning the object itself
+
+            # in principle, if self is also an argument, it could be rescaled
+            # here, since it won't be needed anymore.  But maybe not change
+            # inputs before the calculation even if they will get destroyed
+
+        else:  # normal case: set up output as a Quantity
+
+            result = self.__quantity_view__(obj, result_unit)
+
+        # We now need to treat the case where the inputs have to be scaled -
+        # the issue is that we can't actually scale the inputs since that
+        # would be changing the objects passed to the ufunc, which would not
+        # be expected by the user.
+        if any(scale != 1. for scale in scales):
+
+            # If self is both output and input (which happens for in-place
+            # operations), input will get overwritten with junk. To avoid
+            # that, hide it in a new object
+            if self is obj and any(self is arg for arg in args):
+                # but with two outputs it would become unhidden too soon
+                # [ie., np.modf(q1, q1, other)].  Bail.
+                if context[2] < function.nout - 1:
+                    raise TypeError("Cannot apply multi-output {0} function "
+                                    "to quantities with in-place replacement "
+                                    "of an input by any but the last output."
+                                    .format(function.__name__))
+                result = self.copy()
+                result._result = self
+
+            # ensure we remember the scales we need
+            result._scales = scales
+
+        # unit output will get (setting _unit could prematurely change input)
+        result._result_unit = result_unit
+        return result
+
+    def __array_wrap__(self, obj, context=None):
+        if context is not None:
+
+            if hasattr(obj, '_result_unit'):
+                result_unit = obj._result_unit
+                del obj._result_unit
+            else:
+                result_unit = None
+
+            # We now need to re-calculate quantities for which the input
+            # needed to be scaled.
+            if hasattr(obj, '_scales'):
+
+                scales = obj._scales
+                del obj._scales
+
+                # For in-place operations, input will get overwritten with
+                # junk. To avoid that, we hid it in a new object in
+                # __array_prepare__ and retrieve it here.
+                if hasattr(obj, '_result'):
+                    obj = obj._result
+
+                # take array view to which output can be written without
+                # getting back here
+                obj_array = obj.view(np.ndarray)
+
+                # Find out which ufunc was called and with which inputs
+                function = context[0]
+                args = context[1][:function.nin]
+
+                # Set the inputs, rescaling as necessary
+                inputs = []
+                for arg, scale in zip(args, scales):
+                    if scale != 1.:
+                        inputs.append(arg.value * scale)
+                    else:  # for scale==1, input is not necessarily a Quantity
+                        inputs.append(getattr(arg, 'value', arg))
+
+                # For output arrays that require scaling, we can reuse the
+                # output array to perform the scaling in place, as long as the
+                # array is not integral. Here, we set the obj_array to `None`
+                # when it can not be used to store the scaled result.
+                if(result_unit is not None and
+                   any(not _can_cast(scaled_arg, obj_array.dtype)
+                       for scaled_arg in inputs)):
+                    obj_array = None
+
+                # Re-compute the output using the ufunc
+                if function.nin == 1:
+                    if function.nout == 1:
+                        out = function(inputs[0], obj_array)
+                    else:  # 2-output function (np.modf, np.frexp); 1 input
+                        if context[2] == 0:
+                            out, _ = function(inputs[0], obj_array, None)
+                        else:
+                            _, out = function(inputs[0], None, obj_array)
+                else:
+                    out = function(inputs[0], inputs[1], obj_array)
+
+                if obj_array is None:
+                    if not isinstance(out, np.ndarray):  # array scalar; cannot view
+                        return self.__quantity_instance__(out, result_unit)
+                    else:
+                        obj = self.__quantity_view__(out, result_unit)
+
+            if result_unit is None:  # return a plain array
+                obj = obj.view(np.ndarray)
+            else:
+                obj._unit = result_unit
+
+        return obj
+
+    def __deepcopy__(self, memo):
+        # If we don't define this, ``copy.deepcopy(quantity)`` will
+        # return a bare Numpy array.
+        return self.copy()
+
+    def __quantity_view__(self, obj, unit):
+        """
+        Overridden by subclasses to change what kind of view is
+        created based on the output unit of an operation.
+
+        Parameters
+        ----------
+        obj : ndarray
+            The array to create a view of
+
+        unit : UnitBase
+            The unit of the resulting object.  It doesn't not need to
+            be assigned to the view, but it can be used to select a
+            Quantity subclass.
+
+        Returns
+        -------
+        view : Quantity subclass
+        """
+        return obj.view(Quantity)
+
+    def __quantity_instance__(self, val, unit, **kwargs):
+        """
+        Overridden by subclasses to impact what kind of instance is
+        created based on the output unit of an operation.
+
+        The parameters are the same as those to `Quantity.__new__`.
+        """
+        return Quantity(val, unit, **kwargs)
+
+    def __reduce__(self):
+        # patch to pickle Quantity objects (ndarray subclasses),
+        # see http://www.mail-archive.com/numpy-discussion@scipy.org/msg02446.html
+
+        object_state = list(np.ndarray.__reduce__(self))
+        subclass_state = (self._unit,)
+        object_state[2] = (object_state[2], subclass_state)
+        return tuple(object_state)
+
+    def __setstate__(self, state):
+        # patch to unpickle Quantity objects (ndarray subclasses),
+        # see http://www.mail-archive.com/numpy-discussion@scipy.org/msg02446.html
+
+        nd_state, own_state = state
+        np.ndarray.__setstate__(self, nd_state)
+
+        unit, = own_state
+        self._unit = unit
 
     def to(self, unit, equivalencies=[]):
         """ Returns a new `Quantity` object with the specified units.
@@ -113,17 +434,24 @@ class Quantity(object):
         equivalencies : list of equivalence pairs, optional
             A list of equivalence pairs to try if the units are not
             directly convertible.  See :ref:`unit_equivalencies`.
+            If not provided or `[]`, class default equivalencies will be used
+            (none for `~astropy.units.Quantity`, but may be set for subclasses)
+            If `None`, no equivalencies will be applied at all, not even any
+            set globally or within a context.
         """
-
+        if equivalencies == []:
+            equivalencies = self._equivalencies
         new_val = self.unit.to(unit, self.value, equivalencies=equivalencies)
-        new_unit = Unit(unit)
-        return Quantity(new_val, new_unit)
+        return self.__quantity_instance__(new_val, unit, copy=False)
 
     @property
     def value(self):
         """ The numerical value of this quantity. """
-
-        return self._value
+        value = self.view(np.ndarray)
+        if self.shape:
+            return value
+        else:
+            return value.item()
 
     @property
     def unit(self):
@@ -134,16 +462,28 @@ class Quantity(object):
 
         return self._unit
 
+    # this ensures that if we do a view, __repr__ and __str__ do not balk
+    _unit = None
+
+    @property
+    def equivalencies(self):
+        """
+        A list of equivalencies that will be applied by default during
+        unit conversions.
+        """
+
+        return self._equivalencies
+
     @property
     def si(self):
         """
         Returns a copy of the current `Quantity` instance with SI units. The
         value of the resulting object will be scaled.
         """
-
-        from . import si
-        si_unit = self.unit.to_system(si)[0]
-        return Quantity(self.value * si_unit.scale, si_unit / si_unit.scale)
+        si_unit = self.unit.si
+        return self.__quantity_instance__(
+            self.value * si_unit.scale, si_unit / si_unit.scale,
+            copy=False)
 
     @property
     def cgs(self):
@@ -151,12 +491,12 @@ class Quantity(object):
         Returns a copy of the current `Quantity` instance with CGS units. The
         value of the resulting object will be scaled.
         """
+        cgs_unit = self.unit.cgs
+        return self.__quantity_instance__(
+            self.value * cgs_unit.scale, cgs_unit / cgs_unit.scale,
+            copy=False)
 
-        from . import cgs
-        cgs_unit = self.unit.to_system(cgs)[0]
-        return Quantity(self.value * cgs_unit.scale, cgs_unit / cgs_unit.scale)
-
-    @property
+    @lazyproperty
     def isscalar(self):
         """
         True if the `value` of this quantity is a scalar, or False if it
@@ -174,57 +514,79 @@ class Quantity(object):
 
     def copy(self):
         """ Return a copy of this `Quantity` instance """
+        return self.__class__(self)
 
-        return self.__class__(self.value, unit=self.unit)
+    # This flag controls whether convenience conversion members, such
+    # as `q.m` equivalent to `q.to(u.m).value` are available.  This is
+    # not turned on on Quantity itself, but is on some subclasses of
+    # Quantity, such as `astropy.coordinates.Angle`.
+    _include_easy_conversion_members = False
 
-    # Arithmetic operations
-    def __add__(self, other):
-        """ Addition between `Quantity` objects and other objects.  If
-        they are both `Quantity` objects, results in the units of the
-        **left** object if they are compatible, otherwise this fails.
+    @override__dir__
+    def __dir__(self):
         """
-
-        if isinstance(other, Quantity):
-            return Quantity(self.value + other.to(self.unit).value,
-                            unit=self.unit)
-        else:
-            raise TypeError(
-                "Object of type '{0}' cannot be added with a Quantity "
-                "object. Addition is only supported between Quantity "
-                "objects with compatible units.".format(other.__class__))
-
-    def __sub__(self, other):
-        """ Subtraction between `Quantity` objects and other objects.
-        If they are both `Quantity` objects, results in the units of the
-        **left** object if they are compatible, otherwise this fails.
+        Quantities are able to directly convert to other units that
+        have the same physical type.  This function is implemented in
+        order to make autocompletion still work correctly in IPython.
+        """
+        if not self._include_easy_conversion_members:
+            return []
+        extra_members = set()
+        equivalencies = Unit._normalize_equivalencies(self.equivalencies)
+        for equivalent in self.unit._get_units_with_same_physical_type(
+                equivalencies):
+            extra_members.update(equivalent.names)
+        return extra_members
+
+    def __getattr__(self, attr):
+        """
+        Quantities are able to directly convert to other units that
+        have the same physical type.
         """
+        if not self._include_easy_conversion_members:
+            raise AttributeError(
+                "'{0}' object has no '{1}' member".format(
+                    self.__class__.__name__,
+                    attr))
+
+        def get_virtual_unit_attribute():
+            try:
+                to_unit = Unit(attr)
+            except ValueError:
+                return None
+
+            try:
+                return self.unit.to(
+                    to_unit, self.value, equivalencies=self.equivalencies)
+            except UnitsError:
+                return None
 
-        if isinstance(other, Quantity):
-            return Quantity(self.value - other.to(self.unit).value,
-                            unit=self.unit)
+        value = get_virtual_unit_attribute()
+
+        if value is None:
+            raise AttributeError(
+                "{0} instance has no attribute '{1}'".format(
+                    self.__class__.__name__, attr))
         else:
-            raise TypeError(
-                "Object of type '{0}' cannot be subtracted from a Quantity "
-                "object. Subtraction is only supported between Quantity "
-                "objects with compatible units.".format(other.__class__))
+            return value
 
+    # Arithmetic operations
     def __mul__(self, other):
         """ Multiplication between `Quantity` objects and other objects."""
 
-        if isinstance(other, Quantity):
-            return Quantity(self.value * other.value,
-                            unit=self.unit * other.unit)
-        elif isinstance(other, basestring):
-            return Quantity(self.value, unit=Unit(other) * self.unit)
-        elif isinstance(other, UnitBase):
-            return Quantity(self.value, unit=other * self.unit)
-        else:
-            try:
-                return Quantity(other * self.value, unit=self.unit)
-            except TypeError:
-                raise TypeError(
-                    "Object of type '{0}' cannot be multiplied with a "
-                    "Quantity object.".format(other.__class__))
+        if isinstance(other, (UnitBase, six.string_types)):
+            return self.__quantity_instance__(self.value, other * self.unit)
+
+        return np.multiply(self, other)
+
+    def __imul__(self, other):
+        """In-place multiplication between `Quantity` objects and others."""
+
+        if isinstance(other, (UnitBase, six.string_types)):
+            self._unit = other * self.unit
+            return self
+
+        return np.multiply(self, other, self)
 
     def __rmul__(self, other):
         """ Right Multiplication between `Quantity` objects and other
@@ -236,120 +598,81 @@ class Quantity(object):
     def __div__(self, other):
         """ Division between `Quantity` objects and other objects."""
 
-        if isinstance(other, Quantity):
-            return Quantity(self.value / other.value,
-                            unit=self.unit / other.unit)
-        elif isinstance(other, basestring):
-            return Quantity(self.value, unit=self.unit / Unit(other))
-        elif isinstance(other, UnitBase):
-            return Quantity(self.value, unit=self.unit / other)
-        else:
-            try:
-                return Quantity(self.value / other, unit=self.unit)
-            except TypeError:
-                raise TypeError(
-                    "Object of type '{0}' cannot be diveded with a Quantity "
-                    "object.".format(other.__class__))
+        if isinstance(other, (UnitBase, six.string_types)):
+            return self.__quantity_instance__(self.value, self.unit / other)
+
+        return np.true_divide(self, other)
+
+    def __idiv__(self, other):
+        """Inplace division between `Quantity` objects and other objects."""
+
+        if isinstance(other, (UnitBase, six.string_types)):
+            self._unit = self.unit / other
+            return self
+
+        return np.true_divide(self, other, self)
 
     def __rdiv__(self, other):
         """ Right Division between `Quantity` objects and other objects."""
 
-        if isinstance(other, Quantity):
-            return Quantity(other.value / self.value,
-                            unit=other.unit / self.unit)
-        elif isinstance(other, basestring):
-            return Quantity(self.value, unit=Unit(other) / self.unit)
-        elif isinstance(other, UnitBase):
-            return Quantity(1. / self.value, unit=other / self.unit)
-        else:
-            try:
-                return Quantity(other / self.value, unit=1. / self.unit)
-            except TypeError:
-                raise TypeError(
-                    "Object of type '{0}' cannot be diveded with a Quantity "
-                    "object.".format(other.__class__))
+        if isinstance(other, (UnitBase, six.string_types)):
+            return self.__quantity_instance__(1. / self.value,
+                                              other / self.unit, copy=False)
+
+        return np.divide(other, self)
 
     def __truediv__(self, other):
         """ Division between `Quantity` objects. """
         return self.__div__(other)
 
+    def __itruediv__(self, other):
+        """ Division between `Quantity` objects. """
+        return self.__idiv__(other)
+
     def __rtruediv__(self, other):
         """ Division between `Quantity` objects. """
         return self.__rdiv__(other)
 
-    def __pow__(self, p):
-        """ Raise `Quantity` object to a power. """
+    def __divmod__(self, other):
+        if isinstance(other, (six.string_types, UnitBase)):
+            return (self / other, self.__quantity_instance__(
+                    0, dimensionless_unscaled))
 
-        if hasattr(p, 'unit'):
-            raise TypeError(
-                'Cannot raise a Quantity object to a power of something '
-                'with a unit')
-        return Quantity(self.value ** p, unit=self.unit ** p)
+        other_value = self._to_own_unit(other)
+        result_tuple = super(Quantity, self.__class__).__divmod__(
+            self.view(np.ndarray), other_value)
 
-    def __neg__(self):
-        """
-        Minus the quantity. This is useful for doing -q where q is a quantity.
-        """
-
-        return Quantity(-self.value, unit=self.unit)
+        return (self.__quantity_instance__(
+                result_tuple[0], dimensionless_unscaled, copy=False),
+                self.__quantity_instance__(
+                result_tuple[1], self.unit, copy=False))
 
     def __pos__(self):
         """
         Plus the quantity. This is implemented in case users use +q where q is
-        a quantity.
+        a quantity.  (Required for scalar case.)
         """
 
-        return Quantity(self.value, unit=self.unit)
-
-    def __abs__(self):
-        """
-        Absolute value of the quantity.
-        """
-
-        return Quantity(abs(self.value), unit=self.unit)
+        return self.__quantity_instance__(self.value, unit=self.unit)
 
     # Comparison operations
     def __eq__(self, other):
-        if hasattr(other, 'value') and hasattr(other, 'to'):
-            return self.value == other.to(self.unit).value
-        else:
+        try:
+            return np.equal(self, other)
+        except Exception as exc:
+            if isinstance(other, Quantity):
+                raise exc
             return False
 
     def __ne__(self, other):
-        if hasattr(other, 'value') and hasattr(other, 'to'):
-            return self.value != other.to(self.unit).value
-        else:
+        try:
+            return np.not_equal(self, other)
+        except Exception as exc:
+            if isinstance(other, Quantity):
+                raise exc
             return True
 
-    def __lt__(self, other):
-        if isinstance(other, Quantity):
-            return self.value < other.to(self.unit).value
-        else:
-            raise TypeError("Quantity object cannot be compared to an object "
-                            "of type {0}".format(other.__class__))
-
-    def __le__(self, other):
-        if isinstance(other, Quantity):
-            return self.value <= other.to(self.unit).value
-        else:
-            raise TypeError("Quantity object cannot be compared to an object "
-                            "of type {0}".format(other.__class__))
-
-    def __gt__(self, other):
-        if isinstance(other, Quantity):
-            return self.value > other.to(self.unit).value
-        else:
-            raise TypeError("Quantity object cannot be compared to an object "
-                            "of type {0}".format(other.__class__))
-
-    def __ge__(self, other):
-        if isinstance(other, Quantity):
-            return self.value >= other.to(self.unit).value
-        else:
-            raise TypeError("Quantity object cannot be compared to an object "
-                            "of type {0}".format(other.__class__))
-
-    #other overrides of special functions
+    # other overrides of special functions
     def __hash__(self):
         return hash(self.value) ^ hash(self.unit)
 
@@ -362,7 +685,7 @@ class Quantity(object):
         # Otherwise return a generator
         def quantity_iter():
             for val in self.value:
-                yield Quantity(val, unit=self.unit)
+                yield self.__quantity_instance__(val, unit=self.unit)
 
         return quantity_iter()
 
@@ -372,14 +695,29 @@ class Quantity(object):
                 "'{cls}' object with a scalar value does not support "
                 "indexing".format(cls=self.__class__.__name__))
         else:
-            return Quantity(self.value[key], unit=self.unit)
+            out = self.value[key]
+            if not isinstance(out, np.ndarray):  # array scalar; cannot view
+                return self.__quantity_instance__(out, self.unit)
+
+            out = self.__quantity_view__(out, self.unit)
+            out._unit = self.unit
+            return out
+
+    def __setitem__(self, i, value):
+        self.view(np.ndarray).__setitem__(i, self._to_own_unit(value))
+
+    def __setslice__(self, i, j, value):
+        self.view(np.ndarray).__setslice__(i, j, self._to_own_unit(value))
+
+    # __contains__ is OK
 
     def __nonzero__(self):
         """Quantities should always be treated as non-False; there is too much
         potential for ambiguity otherwise.
         """
-
         return True
+    if six.PY3:
+        __bool__ = __nonzero__
 
     def __len__(self):
         if self.isscalar:
@@ -390,54 +728,55 @@ class Quantity(object):
 
     # Numerical types
     def __float__(self):
-        if not self.isscalar:
-            raise TypeError('Only scalar quantities can be converted to '
-                            'Python scalars')
-        # We show a warning unless the unit is equivalent to unity (i.e. not
-        # just dimensionless, but also with a scale of 1)
-        if not _is_unity(self.unit) and WARN_IMPLICIT_NUMERIC_CONVERSION():
-            warnings.warn("Converting Quantity object in units '{0}' to a "
-                          "Python scalar".format(self.unit))
-        return float(self.value)
+        if not self.isscalar or not self.unit.is_unity():
+            raise TypeError('Only dimensionless scalar quantities can be '
+                            'converted to Python scalars')
+        else:
+            return float(self.value)
 
     def __int__(self):
-        if not self.isscalar:
-            raise TypeError('Only scalar quantities can be converted to '
-                            'Python scalars')
-        # We show a warning unless the unit is equivalent to unity (i.e. not
-        # just dimensionless, but also with a scale of 1)
-        if not _is_unity(self.unit) and WARN_IMPLICIT_NUMERIC_CONVERSION():
-            warnings.warn("Converting Quantity object in units '{0}' to a "
-                          "Python scalar".format(self.unit))
-        return int(self.value)
-
-    def __long__(self):
-        if not self.isscalar:
-            raise TypeError('Only scalar quantities can be converted to '
-                            'Python scalars')
-        # We show a warning unless the unit is equivalent to unity (i.e. not
-        # just dimensionless, but also with a scale of 1)
-        if not _is_unity(self.unit) and WARN_IMPLICIT_NUMERIC_CONVERSION():
-            warnings.warn("Converting Quantity object in units '{0}' to a "
-                          "Python scalar".format(self.unit))
-        return long(self.value)
-
-    # Array types
-    def __array__(self):
-        # We show a warning unless the unit is equivalent to unity (i.e. not
-        # just dimensionless, but also with a scale of 1)
-        if not _is_unity(self.unit) and WARN_IMPLICIT_NUMERIC_CONVERSION():
-            warnings.warn("Converting Quantity object in units '{0}' to a "
-                          "Numpy array".format(self.unit))
-        return np.array(self.value)
+        if not self.isscalar or not self.unit.is_unity():
+            raise TypeError('Only dimensionless scalar quantities can be '
+                            'converted to Python scalars')
+        else:
+            return int(self.value)
+
+    def __index__(self):
+        if self.isscalar and self.unit.is_unity():
+            try:
+                return self.value.__index__()
+            except:
+                pass
+
+        raise TypeError('Only integer dimensionless scalar quantities '
+                        'can be converted to a Python index')
+
+    if six.PY2:
+        def __long__(self):
+            if not self.isscalar or not self.unit.is_unity():
+                raise TypeError('Only dimensionless scalar quantities can be '
+                                'converted to Python scalars')
+            else:
+                return long(self.value)
 
     # Display
     # TODO: we may want to add a hook for dimensionless quantities?
     def __str__(self):
-        return "{0} {1:s}".format(self.value, self.unit.to_string())
+        return "{0} {1:s}".format(self.value,
+                                  self.unit.to_string() if
+                                  self.unit is not None
+                                  else _UNIT_NOT_INITIALISED)
 
     def __repr__(self):
-        return "<Quantity {0} {1:s}>".format(self.value, self.unit.to_string())
+        prefixstr = '<' + self.__class__.__name__ + ' '
+        arrstr = np.array2string(self.view(np.ndarray), separator=',',
+            prefix=prefixstr)
+        if self.unit is None:
+            unitstr = _UNIT_NOT_INITIALISED
+        else:
+            unitstr = self.unit.to_string()
+
+        return prefixstr + arrstr + ' ' + unitstr + '>'
 
     def _repr_latex_(self):
         """
@@ -457,9 +796,33 @@ class Quantity(object):
 
         # Format unit
         # [1:-1] strips the '$' on either side needed for math mode
-        latex_unit = self.unit._repr_latex_()[1:-1]  # note this is unicode
+        latex_unit = (self.unit._repr_latex_()[1:-1]  # note this is unicode
+                      if self.unit is not None
+                      else _UNIT_NOT_INITIALISED)
+
+        return '${0} \; {1}$'.format(latex_value, latex_unit)
+
+    def __format__(self, format_spec):
+        """
+        Format quantities using the new-style python formatting codes
+        as specifiers for the number.
+
+        If the format specifier correctly applies itself to the value,
+        then it is used to format only the value. If it cannot be
+        applied to the value, then it is applied to the whole string.
+
+        """
+        try:
+            value = format(self.value, format_spec)
+            full_format_spec = "s"
+        except ValueError:
+            value = self.value
+            full_format_spec = format_spec
+        return format("{0} {1:s}".format(value,
+                                  self.unit.to_string() if
+                                  self.unit is not None
+                                  else _UNIT_NOT_INITIALISED), full_format_spec)
 
-        return u'${0} \; {1}$'.format(latex_value, latex_unit)
 
     def decompose(self, bases=[]):
         """
@@ -473,7 +836,7 @@ class Quantity(object):
             The bases to decompose into.  When not provided,
             decomposes down to any irreducible units.  When provided,
             the decomposed result will only contain the given units.
-            This will raises a `UnitsException` if it's not possible
+            This will raises a `UnitsError` if it's not possible
             to do so.
 
         Returns
@@ -500,7 +863,7 @@ class Quantity(object):
             The bases to decompose into.  When not provided,
             decomposes down to any irreducible units.  When provided,
             the decomposed result will only contain the given units.
-            This will raises a `UnitsException` if it's not possible
+            This will raises a `UnitsError` if it's not possible
             to do so.
 
         Returns
@@ -518,7 +881,222 @@ class Quantity(object):
             # not being modified.
             new_value = self.value * new_unit.scale
             new_unit = new_unit / Unit(new_unit.scale)
+            return self.__quantity_instance__(new_value, new_unit, copy=False)
+        else:
+            return self.__quantity_instance__(self.value, new_unit, copy=True)
+
+    # These functions need to be overridden to take into account the units
+    # Array conversion
+    # http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html#array-conversion
+
+    def item(self, *args):
+        return self.__quantity_instance__(
+            self.view(np.ndarray).item(*args), self.unit)
+
+    def list(self):
+        raise NotImplementedError("cannot make a list of Quantities.  Get "
+                                  "list of values with q.value.list()")
+
+    def _to_own_unit(self, value, check_precision=True):
+        try:
+            value = value.to(self.unit).value
+        except AttributeError:
+            try:
+                value = dimensionless_unscaled.to(self.unit, value)
+            except UnitsError as exc:
+                if not _can_have_arbitrary_unit(value):
+                    raise exc
+
+        if(check_precision and
+           np.any(np.array(value, self.dtype) != np.array(value))):
+            raise TypeError("cannot convert value type to array type without "
+                            "precision loss")
+        return value
+
+    def itemset(self, *args):
+        if len(args) == 0:
+            raise ValueError("itemset must have at least one argument")
+
+        self.view(np.ndarray).itemset(*(args[:-1] +
+                                        (self._to_own_unit(args[1]),)))
+
+    def tostring(self, order='C'):
+        raise NotImplementedError("cannot write Quantities to string.  Write "
+                                  "array with q.value.tostring(...).")
+
+    def tofile(self, fid, sep="", format="%s"):
+        raise NotImplementedError("cannot write Quantities to file.  Write "
+                                  "array with q.value.tofile(...)")
+
+    def dump(self, file):
+        raise NotImplementedError("cannot dump Quantities to file.  Write "
+                                  "array with q.value.dump()")
+
+    def dumps(self):
+        raise NotImplementedError("cannot dump Quantities to string.  Write "
+                                  "array with q.value.dumps()")
+
+    # astype, byteswap OK as is
+    # copy done above
+    # view, getfield, setflags OK as is
+
+    def fill(self, value):
+        self.view(np.ndarray).fill(self._to_own_unit(value))
+
+    # Shape manipulation: resize cannot be done (does not own data), but
+    # shape, transpose, swapaxes, flatten, ravel, squeeze all OK.
+
+    # Item selection and manipulation
+    # take, repeat, sort, compress, diagonal OK
+    def put(self, indices, values, mode='raise'):
+        self.view(np.ndarray).put(indices, self._to_own_unit(values), mode)
+
+    def choose(self, choices, out=None, mode='raise'):
+        raise NotImplementedError("cannot choose based on quantity.  Choose "
+                                  "using array with q.value.choose(...)")
+
+    # ensure we do not return indices as quantities
+    def argsort(self, axis=-1, kind='quicksort', order=None):
+        return self.view(np.ndarray).argsort(axis=axis, kind=kind, order=order)
+
+    def searchsorted(self, v, *args, **kwargs):
+        return np.searchsorted(np.array(self),
+                               self._to_own_unit(v, check_precision=False),
+                               *args, **kwargs)  # avoid numpy 1.6 problem
+
+    # Calculation
+
+    # ensure we do not return indices as quantities
+    # conj OK
+
+    def argmax(self, axis=None, out=None):
+        return self.view(np.ndarray).argmax(axis=axis, out=out)
+
+    def argmin(self, axis=None, out=None):
+        return self.view(np.ndarray).argmin(axis=axis, out=out)
+
+    def _prepare_out(self, out=None, unit=None):
+        if out is None:
+            return
+        if not isinstance(out, Quantity):
+            raise TypeError("out= should be a Quantity instance")
+        if unit is None:
+            out._unit = self.unit
         else:
-            new_value = self.value
+            out._unit = unit
+
+    def clip(self, a_min, a_max, out=None):
+        self._prepare_out(out=out)
+        value = np.clip(self.value, self._to_own_unit(a_min),
+                        self._to_own_unit(a_max), out=out)
+        return self.__quantity_instance__(value, self.unit, copy=False)
+
+    def trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None):
+        self._prepare_out(out=out)
+        value = np.trace(self.value, offset=offset, axis1=axis1,
+                         axis2=axis2, dtype=None, out=out)
+        return self.__quantity_instance__(value, self.unit, copy=False)
+
+    def var(self, axis=None, dtype=None, out=None, ddof=0):
+        result_unit = self.unit ** 2
+        self._prepare_out(out=out, unit=result_unit)
+        value = np.var(self.value, axis=axis, dtype=dtype, out=out, ddof=ddof),
+        return self.__quantity_instance__(value, result_unit, copy=False)
+
+    def std(self, axis=None, dtype=None, out=None, ddof=0):
+        self._prepare_out(out=out)
+        value = np.std(self.value, axis=axis, dtype=dtype, out=out, ddof=ddof)
+        return self.__quantity_instance__(value, self.unit, copy=False)
+
+    def mean(self, axis=None, dtype=None, out=None):
+        self._prepare_out(out=out)
+        value = np.mean(self.value, axis=axis, dtype=dtype, out=out)
+        return self.__quantity_instance__(value, self.unit, copy=False)
+
+    def ptp(self, axis=None, out=None):
+        self._prepare_out(out=out)
+        value = np.ptp(self.value, axis=axis, out=out)
+        return self.__quantity_instance__(value, self.unit, copy=False)
+
+    def max(self, axis=None, out=None, keepdims=False):
+        self._prepare_out(out=out)
+        try:
+            value = np.max(self.value, axis=axis, out=out, keepdims=keepdims)
+        except:  # numpy < 1.7
+            value = np.max(self.value, axis=axis, out=out)
+        return self.__quantity_instance__(value, self.unit, copy=False)
+
+    def min(self, axis=None, out=None, keepdims=False):
+        self._prepare_out(out=out)
+        try:
+            value = np.min(self.value, axis=axis, out=out, keepdims=keepdims)
+        except:  # numpy < 1.7
+            value = np.min(self.value, axis=axis, out=out)
+        return self.__quantity_instance__(value, self.unit, copy=False)
+
+    def dot(self, b, out=None):
+        result_unit = self.unit * getattr(b, 'unit', 1.)
+        self._prepare_out(out=out, unit=result_unit)
+        try:
+            value = np.dot(self, b, out=out)
+        except TypeError:  # numpy < 1.7
+            value = np.dot(self, b)
+        return self.__quantity_instance__(value, result_unit, copy=False)
+
+    def diff(self, n=1, axis=-1):
+        value = np.diff(self.value, n=n, axis=axis)
+        return self.__quantity_instance__(value, self.unit, copy=False)
+
+    def ediff1d(self, to_end=None, to_begin=None):
+        value = np.ediff1d(self.value, to_end=to_end, to_begin=to_begin)
+        return self.__quantity_instance__(value, self.unit, copy=False)
+
+    def nansum(self, axis=None):
+        value = np.nansum(self.value, axis=axis)
+        return self.__quantity_instance__(value, self.unit)
+
+    def sum(self, axis=None, dtype=None, out=None, keepdims=False):
+        self._prepare_out(out=out)
+        try:
+            value = np.sum(self.value, axis=axis, dtype=dtype,
+                           out=out, keepdims=keepdims)
+        except:  # numpy < 1.7
+            value = np.sum(self.value, axis=axis, dtype=dtype,
+                           out=out)
+        return self.__quantity_instance__(value, self.unit, copy=False)
+
+    def cumsum(self, axis=None, dtype=None, out=None):
+        self._prepare_out(out=out)
+        value = np.cumsum(self.value, axis=axis, dtype=dtype, out=out)
+        return self.__quantity_instance__(value, self.unit, copy=False)
+
+    def prod(self, axis=None, dtype=None, out=None, keepdims=False):
+        if self.unit.is_unity():
+            self._prepare_out(out=out)
+            try:
+                value = np.prod(self.value, axis=axis, dtype=dtype,
+                                out=out, keepdims=keepdims)
+            except:  # numpy < 1.7
+                value = np.prod(self.value, axis=axis, dtype=dtype,
+                                out=out)
+            return self.__quantity_instance__(value, self.unit, copy=False)
+        else:
+            raise ValueError("cannot use prod on scaled or "
+                             "non-dimensionless Quantity arrays")
+
+    def cumprod(self, axis=None, dtype=None, out=None):
+        if self.unit.is_unity():
+            self._prepare_out(out=out)
+            value = np.cumprod(self.value, axis=axis, dtype=dtype, out=out)
+            return self.__quantity_instance__(value, self.unit, copy=False)
+        else:
+            raise ValueError("cannot use cumprod on scaled or "
+                             "non-dimensionless Quantity arrays")
+
+    def all(self, axis=None, out=None):
+        raise NotImplementedError("cannot evaluate truth value of quantities. "
+                                  "Evaluate array with q.value.all(...)")
 
-        return Quantity(new_value, new_unit)
+    def any(self, axis=None, out=None):
+        raise NotImplementedError("cannot evaluate truth value of quantities. "
+                                  "Evaluate array with q.value.any(...)")
diff --git a/astropy/units/quantity_helper.py b/astropy/units/quantity_helper.py
new file mode 100644
index 0000000..f95b9c1
--- /dev/null
+++ b/astropy/units/quantity_helper.py
@@ -0,0 +1,298 @@
+# The idea for this module (but no code) was borrowed from the
+# quantities (http://pythonhosted.org/quantities/) package.
+
+import numpy as np
+from .core import UnitsError, dimensionless_unscaled
+
+
+def _d(unit):
+    if unit is None:
+        return dimensionless_unscaled
+    else:
+        return unit
+
+UFUNC_HELPERS = {}
+
+# In this file, we implement the logic that determines for a given ufunc and
+# input how the input should be scaled and what unit the output will have.
+
+# list of ufuncs:
+# http://docs.scipy.org/doc/numpy/reference/ufuncs.html#available-ufuncs
+
+UNSUPPORTED_UFUNCS = set([np.bitwise_and, np.bitwise_or,
+                          np.bitwise_xor, np.invert, np.left_shift,
+                          np.right_shift, np.logical_and, np.logical_or,
+                          np.logical_xor, np.logical_not])
+
+# SINGLE ARGUMENT UFUNCS
+
+# The functions below take a single argument, which is the quantity upon which
+# the ufunc is being used. The output of the function should be two values: the
+# scale by which the input needs to be multiplied before being passed to the
+# ufunc, and the unit the output will be in.
+
+# ufuncs that return a boolean and do not care about the unit
+helper_onearg_test = lambda f, unit: ([1.], None)
+
+UFUNC_HELPERS[np.isfinite] = helper_onearg_test
+UFUNC_HELPERS[np.isinf] = helper_onearg_test
+UFUNC_HELPERS[np.isnan] = helper_onearg_test
+UFUNC_HELPERS[np.sign] = helper_onearg_test
+UFUNC_HELPERS[np.signbit] = helper_onearg_test
+
+# ufuncs that return a value with the same unit as the input
+
+helper_invariant = lambda f, unit: ([1.], unit)
+
+UFUNC_HELPERS[np.absolute] = helper_invariant
+UFUNC_HELPERS[np.fabs] = helper_invariant
+UFUNC_HELPERS[np.conj] = helper_invariant
+UFUNC_HELPERS[np.conjugate] = helper_invariant
+UFUNC_HELPERS[np.negative] = helper_invariant
+UFUNC_HELPERS[np.spacing] = helper_invariant
+UFUNC_HELPERS[np.rint] = helper_invariant
+UFUNC_HELPERS[np.floor] = helper_invariant
+UFUNC_HELPERS[np.ceil] = helper_invariant
+UFUNC_HELPERS[np.trunc] = helper_invariant
+
+# ufuncs handled as special cases
+
+UFUNC_HELPERS[np.sqrt] = lambda f, unit: ([1.], unit ** 0.5)
+UFUNC_HELPERS[np.square] = lambda f, unit: ([1.], unit ** 2)
+UFUNC_HELPERS[np.reciprocal] = lambda f, unit: ([1.], unit ** -1)
+# ones_like was not private in numpy <= 1.6
+if isinstance(getattr(np.core.umath, 'ones_like', None), np.ufunc):
+    UFUNC_HELPERS[np.core.umath.ones_like] = (lambda f, unit:
+                                              ([1.], dimensionless_unscaled))
+if isinstance(getattr(np.core.umath, '_ones_like', None), np.ufunc):
+    UFUNC_HELPERS[np.core.umath._ones_like] = (lambda f, unit:
+                                              ([1.], dimensionless_unscaled))
+
+
+# ufuncs that require dimensionless input and and give dimensionless output
+def helper_dimensionless_to_dimensionless(f, unit):
+    try:
+        scale = unit.to(dimensionless_unscaled)
+    except UnitsError:
+        raise TypeError("Can only apply '{0}' function to "
+                        "dimensionless quantities"
+                        .format(f.__name__))
+    return [scale], dimensionless_unscaled
+
+UFUNC_HELPERS[np.exp] = helper_dimensionless_to_dimensionless
+UFUNC_HELPERS[np.expm1] = helper_dimensionless_to_dimensionless
+UFUNC_HELPERS[np.exp2] = helper_dimensionless_to_dimensionless
+UFUNC_HELPERS[np.log] = helper_dimensionless_to_dimensionless
+UFUNC_HELPERS[np.log10] = helper_dimensionless_to_dimensionless
+UFUNC_HELPERS[np.log2] = helper_dimensionless_to_dimensionless
+UFUNC_HELPERS[np.log1p] = helper_dimensionless_to_dimensionless
+UFUNC_HELPERS[np.modf] = helper_dimensionless_to_dimensionless
+
+
+# ufuncs that require dimensionless input and give output in radians
+def helper_dimensionless_to_radian(f, unit):
+    from .si import radian
+    try:
+        scale = unit.to(dimensionless_unscaled)
+    except UnitsError:
+        raise TypeError("Can only apply '{0}' function to "
+                        "dimensionless quantities"
+                        .format(f.__name__))
+    return [scale], radian
+
+UFUNC_HELPERS[np.arccos] = helper_dimensionless_to_radian
+UFUNC_HELPERS[np.arcsin] = helper_dimensionless_to_radian
+UFUNC_HELPERS[np.arctan] = helper_dimensionless_to_radian
+UFUNC_HELPERS[np.arccosh] = helper_dimensionless_to_radian
+UFUNC_HELPERS[np.arcsinh] = helper_dimensionless_to_radian
+UFUNC_HELPERS[np.arctanh] = helper_dimensionless_to_radian
+
+
+# ufuncs that require input in degrees and give output in radians
+def helper_degree_to_radian(f, unit):
+    from .si import degree, radian
+    try:
+        scale = unit.to(degree)
+    except UnitsError:
+        raise TypeError("Can only apply '{0}' function to "
+                        "quantities with angle units"
+                        .format(f.__name__))
+    return [scale], radian
+
+UFUNC_HELPERS[np.radians] = helper_degree_to_radian
+UFUNC_HELPERS[np.deg2rad] = helper_degree_to_radian
+
+
+# ufuncs that require input in radians and give output in degrees
+def helper_radian_to_degree(f, unit):
+    from .si import degree, radian
+    try:
+        scale = unit.to(radian)
+    except UnitsError:
+        raise TypeError("Can only apply '{0}' function to "
+                        "quantities with angle units"
+                        .format(f.__name__))
+    return [scale], degree
+
+UFUNC_HELPERS[np.degrees] = helper_radian_to_degree
+UFUNC_HELPERS[np.rad2deg] = helper_radian_to_degree
+
+
+# ufuncs that require input in radians and give dimensionless output
+def helper_radian_to_dimensionless(f, unit):
+    from .si import radian
+    try:
+        scale = unit.to(radian)
+    except UnitsError:
+        raise TypeError("Can only apply '{0}' function to "
+                        "quantities with angle units"
+                        .format(f.__name__))
+    return [scale], dimensionless_unscaled
+
+UFUNC_HELPERS[np.cos] = helper_radian_to_dimensionless
+UFUNC_HELPERS[np.sin] = helper_radian_to_dimensionless
+UFUNC_HELPERS[np.tan] = helper_radian_to_dimensionless
+UFUNC_HELPERS[np.cosh] = helper_radian_to_dimensionless
+UFUNC_HELPERS[np.sinh] = helper_radian_to_dimensionless
+UFUNC_HELPERS[np.tanh] = helper_radian_to_dimensionless
+
+
+# ufuncs that require dimensionless_unscaled input and return non-quantities
+def helper_dimensionless_to_none(f, unit):
+    if not unit.is_unity():
+        raise TypeError("Can only apply '{0}' function to "
+                        "unscaled dimensionless quantities"
+                        .format(f.__name__))
+    return [1.], None
+
+UFUNC_HELPERS[np.frexp] = helper_dimensionless_to_none
+
+# TWO ARGUMENT UFUNCS
+
+UFUNC_HELPERS[np.multiply] = lambda f, unit1, unit2: (
+    [1., 1.], _d(unit1) * _d(unit2))
+
+helper_division = lambda f, unit1, unit2: ([1., 1.], _d(unit1) / _d(unit2))
+
+UFUNC_HELPERS[np.divide] = helper_division
+UFUNC_HELPERS[np.true_divide] = helper_division
+UFUNC_HELPERS[np.floor_divide] = helper_division
+
+
+def helper_power(f, unit1, unit2):
+    if unit2 is not None:
+        try:
+            scale2 = unit2.to(dimensionless_unscaled)
+        except UnitsError:
+            raise TypeError("Can only raise something to a "
+                            "dimensionless quantity")
+    else:
+        scale2 = 1.
+
+    # TODO: find a better way to do this, currently
+    # need to raise power of unit1 in main code
+    return [1., scale2], unit1
+
+UFUNC_HELPERS[np.power] = helper_power
+
+
+def helper_ldexp(f, unit1, unit2):
+    if unit2 is not None:
+        raise TypeError("Cannot use ldexp with a quantity "
+                        "as second argument.")
+    else:
+        return [1., 1.], unit1
+
+UFUNC_HELPERS[np.ldexp] = helper_ldexp
+
+
+def helper_copysign(f, unit1, unit2):
+    # if first arg is not a quantity, just return plain array
+    if unit1 is None:
+        return [1., 1.], None
+    else:
+        return [1., 1.], unit1
+
+UFUNC_HELPERS[np.copysign] = helper_copysign
+
+
+def helper_two_arg_dimensionless(f, unit1, unit2):
+    try:
+        scale1 = unit1.to(dimensionless_unscaled) if unit1 is not None else 1.
+        scale2 = unit2.to(dimensionless_unscaled) if unit2 is not None else 1.
+    except UnitsError:
+        raise TypeError("Can only apply '{0}' function to "
+                        "dimensionless quantities"
+                        .format(f.__name__))
+    return [scale1, scale2], dimensionless_unscaled
+
+UFUNC_HELPERS[np.logaddexp] = helper_two_arg_dimensionless
+UFUNC_HELPERS[np.logaddexp2] = helper_two_arg_dimensionless
+
+
+def find_scales(f, *units):
+
+    scales = [1., 1.]
+    # no units for any input -- e.g., np.arctan2(a1, a2, out=q)
+    if all(unit is None for unit in units):
+        return scales, None
+
+    fixed, changeable = (1, 0) if units[1] is None else (0, 1)
+    if units[fixed] is None:
+        try:
+            scales[changeable] = units[changeable].to(dimensionless_unscaled)
+        except UnitsError:
+            # special case: would be OK if unitless number is zero, inf, nan
+            scales[fixed] = 0.
+
+        return scales, dimensionless_unscaled
+
+    else:
+        try:
+            scales[changeable] = units[changeable].to(units[fixed])
+        except UnitsError:
+            raise UnitsError(
+                "Can only apply '{0}' function to quantities "
+                "with compatible dimensions"
+                .format(f.__name__))
+
+        return scales, units[fixed]
+
+
+def helper_twoarg_invariant(f, unit1, unit2):
+    return find_scales(f, unit1, unit2)
+
+UFUNC_HELPERS[np.add] = helper_twoarg_invariant
+UFUNC_HELPERS[np.subtract] = helper_twoarg_invariant
+UFUNC_HELPERS[np.hypot] = helper_twoarg_invariant
+UFUNC_HELPERS[np.maximum] = helper_twoarg_invariant
+UFUNC_HELPERS[np.minimum] = helper_twoarg_invariant
+UFUNC_HELPERS[np.fmin] = helper_twoarg_invariant
+UFUNC_HELPERS[np.fmax] = helper_twoarg_invariant
+UFUNC_HELPERS[np.nextafter] = helper_twoarg_invariant
+UFUNC_HELPERS[np.remainder] = helper_twoarg_invariant
+UFUNC_HELPERS[np.mod] = helper_twoarg_invariant
+UFUNC_HELPERS[np.fmod] = helper_twoarg_invariant
+
+
+def helper_twoarg_comparison(f, unit1, unit2):
+    scales, _ = find_scales(f, unit1, unit2)
+    return scales, None
+
+UFUNC_HELPERS[np.greater] = helper_twoarg_comparison
+UFUNC_HELPERS[np.greater_equal] = helper_twoarg_comparison
+UFUNC_HELPERS[np.less] = helper_twoarg_comparison
+UFUNC_HELPERS[np.less_equal] = helper_twoarg_comparison
+UFUNC_HELPERS[np.not_equal] = helper_twoarg_comparison
+UFUNC_HELPERS[np.equal] = helper_twoarg_comparison
+
+
+def helper_twoarg_invtrig(f, unit1, unit2):
+    from .si import radian
+    scales, _ = find_scales(f, unit1, unit2)
+    return scales, radian
+
+UFUNC_HELPERS[np.arctan2] = helper_twoarg_invtrig
+# another private function in numpy; use getattr in case it disappears
+if isinstance(getattr(np.core.umath, '_arg', None), np.ufunc):
+    UFUNC_HELPERS[np.core.umath._arg] = helper_twoarg_invtrig
diff --git a/astropy/units/setup_package.py b/astropy/units/setup_package.py
new file mode 100644
index 0000000..4220337
--- /dev/null
+++ b/astropy/units/setup_package.py
@@ -0,0 +1,2 @@
+def requires_2to3():
+    return False
diff --git a/astropy/units/si.py b/astropy/units/si.py
index 05eee4c..31ae5c5 100644
--- a/astropy/units/si.py
+++ b/astropy/units/si.py
@@ -9,23 +9,32 @@ from __future__ import (absolute_import, division, print_function,
                         unicode_literals)
 
 from ..constants import si as _si
-from .core import UnitBase, def_unit
+from .core import UnitBase, Unit, def_unit
 
 import numpy as _numpy
 
-UnitBase._set_namespace(globals())
+_ns = globals()
+
+
+###########################################################################
+# DIMENSIONLESS
+
+def_unit(['percent', 'pct'], Unit(0.01), namespace=_ns, prefixes=False,
+         doc="percent: one hundredth of unity, factor 0.01",
+         format={'generic': '%', 'console': '%', 'cds': '%',
+                 'latex': r'\%', 'unicode': '%'})
 
 ###########################################################################
 # LENGTH
 
-def_unit(['m', 'meter'], register=True, prefixes=True,
+def_unit(['m', 'meter'], namespace=_ns, prefixes=True,
          doc="meter: base unit of length in SI")
 
-def_unit(['micron'], um, register=True,
+def_unit(['micron'], um, namespace=_ns,
          doc="micron: alias for micrometer (um)",
-         format={'latex': r'\mu', 'unicode': 'μ'})
+         format={'latex': r'\mu m', 'unicode': 'μm'})
 
-def_unit(['Angstrom', 'AA', 'angstrom'], 0.1 * nm, register=True,
+def_unit(['Angstrom', 'AA', 'angstrom'], 0.1 * nm, namespace=_ns,
          doc="ångström: 10 ** -10 m",
          format={'latex': r'\AA', 'unicode': 'Å', 'vounit': 'angstrom'})
 
@@ -33,84 +42,85 @@ def_unit(['Angstrom', 'AA', 'angstrom'], 0.1 * nm, register=True,
 ###########################################################################
 # VOLUMES
 
-def_unit(['l', 'L', 'liter'], 1000 * cm ** 3.0, register=True, prefixes=True,
+def_unit((['l', 'L'], ['liter']), 1000 * cm ** 3.0, namespace=_ns, prefixes=True,
+         format={'latex': r'\mathcal{l}', 'unicode': 'ℓ'},
          doc="liter: metric unit of volume")
 
 
 ###########################################################################
 # ANGULAR MEASUREMENTS
 
-def_unit(['rad', 'radian'], register=True, prefixes=True,
+def_unit(['rad', 'radian'], namespace=_ns, prefixes=True,
          doc="radian: angular measurement of the ratio between the length "
          "on an arc and its radius")
-def_unit(['deg', 'degree'], _numpy.pi / 180.0 * rad, register=True,
+def_unit(['deg', 'degree'], _numpy.pi / 180.0 * rad, namespace=_ns,
          doc="degree: angular measurement 1/360 of full rotation",
          format={'latex': r'{}^{\circ}', 'unicode': '°'})
-def_unit(['hourangle'], 15.0 * deg, register=True, prefixes=False,
+def_unit(['hourangle'], 15.0 * deg, namespace=_ns, prefixes=False,
          doc="hour angle: angular measurement with 24 in a full circle",
          format={'latex': r'{}^{h}', 'unicode': 'ʰ'})
-def_unit(['arcmin', 'arcminute'], 1.0 / 60.0 * deg, register=True,
+def_unit(['arcmin', 'arcminute'], 1.0 / 60.0 * deg, namespace=_ns,
          prefixes=True,
          doc="arc minute: angular measurement",
          format={'latex': r'{}^{\prime}', 'unicode': '′'})
-def_unit(['arcsec', 'arcsecond'], 1.0 / 3600.0 * deg, register=True,
+def_unit(['arcsec', 'arcsecond'], 1.0 / 3600.0 * deg, namespace=_ns,
          prefixes=True,
          doc="arc second: angular measurement")
 # These special formats should only be used for the non-prefix versions
 arcsec._format = {'latex': r'{}^{\prime\prime}', 'unicode': '″'}
-def_unit(['mas'], 0.001 * arcsec, register=True,
+def_unit(['mas'], 0.001 * arcsec, namespace=_ns,
          doc="arc second: angular measurement")
-def_unit(['uas'], 0.000001 * arcsec, register=True,
+def_unit(['uas'], 0.000001 * arcsec, namespace=_ns,
          doc="arc second: angular measurement",
          format={'latex': r'\mu as', 'unicode': 'μas'})
 
-def_unit(['sr', 'steradian'], rad ** 2, register=True, prefixes=True,
+def_unit(['sr', 'steradian'], rad ** 2, namespace=_ns, prefixes=True,
          doc="steradian: unit of solid angle in SI")
 
 
 ###########################################################################
 # TIME
 
-def_unit(['s', 'second'], register=True, prefixes=True,
+def_unit(['s', 'second'], namespace=_ns, prefixes=True,
          exclude_prefixes=['a'],
          doc="second: base unit of time in SI.")
 
-def_unit(['min', 'minute'], 60 * s, register=True)
-def_unit(['h', 'hour', 'hr'], 3600 * s, register=True)
-def_unit(['d', 'day'], 24 * h, register=True)
-def_unit(['sday'], 86164.09053 * s, register=True,
+def_unit(['min', 'minute'], 60 * s, namespace=_ns)
+def_unit(['h', 'hour', 'hr'], 3600 * s, namespace=_ns)
+def_unit(['d', 'day'], 24 * h, namespace=_ns)
+def_unit(['sday'], 86164.09053 * s, namespace=_ns,
          doc="Sidereal day (sday) is the time of one rotation of the Earth.")
-def_unit(['wk', 'week'], 7 * day, register=True)
-def_unit(['fortnight'], 2 * wk, register=True)
+def_unit(['wk', 'week'], 7 * day, namespace=_ns)
+def_unit(['fortnight'], 2 * wk, namespace=_ns)
 
-def_unit(['a', 'annum'], 365.25 * d, register=True, prefixes=True,
+def_unit(['a', 'annum'], 365.25 * d, namespace=_ns, prefixes=True,
          exclude_prefixes=['P'])
-def_unit(['yr', 'year'], 365.25 * d, register=True, prefixes=True)
+def_unit(['yr', 'year'], 365.25 * d, namespace=_ns, prefixes=True)
 
 
 ###########################################################################
 # FREQUENCY
 
-def_unit(['Hz', 'Hertz', 'hertz'], 1 / s, register=True, prefixes=True,
+def_unit(['Hz', 'Hertz', 'hertz'], 1 / s, namespace=_ns, prefixes=True,
          doc="Frequency")
 
 
 ###########################################################################
 # MASS
 
-def_unit(['kg', 'kilogram'], register=True,
+def_unit(['kg', 'kilogram'], namespace=_ns,
          doc="kilogram: base unit of mass in SI.")
-def_unit(['g', 'gram'], 1.0e-3 * kg, register=True, prefixes=True,
+def_unit(['g', 'gram'], 1.0e-3 * kg, namespace=_ns, prefixes=True,
          exclude_prefixes=['k', 'kilo'])
 
-def_unit(['t', 'tonne'], 1000 * kg, register=True,
+def_unit(['t', 'tonne'], 1000 * kg, namespace=_ns,
          doc="Metric tonne")
 
 
 ###########################################################################
 # AMOUNT OF SUBSTANCE
 
-def_unit(['mol', 'mole'], register=True, prefixes=True,
+def_unit(['mol', 'mole'], namespace=_ns, prefixes=True,
          doc="mole: amount of a chemical substance in SI.")
 
 
@@ -118,80 +128,82 @@ def_unit(['mol', 'mole'], register=True, prefixes=True,
 # TEMPERATURE
 
 def_unit(
-    ['K', 'Kelvin'], register=True, prefixes=True,
+    ['K', 'Kelvin'], namespace=_ns, prefixes=True,
     doc="Kelvin: temperature with a null point at absolute zero.")
 
 
 ###########################################################################
 # FORCE
 
-def_unit(['N', 'Newton', 'newton'], kg * m * s ** -2, register=True,
+def_unit(['N', 'Newton', 'newton'], kg * m * s ** -2, namespace=_ns,
          prefixes=True, doc="Newton: force")
 
 
 ##########################################################################
 # ENERGY
 
-def_unit(['J', 'Joule', 'joule'], N * m, register=True, prefixes=True,
+def_unit(['J', 'Joule', 'joule'], N * m, namespace=_ns, prefixes=True,
          doc="Joule: energy")
-def_unit(['eV', 'electronvolt'], _si.e.value * J, register=True, prefixes=True,
+def_unit(['eV', 'electronvolt'], _si.e.value * J, namespace=_ns, prefixes=True,
          doc="Electron Volt")
-def_unit(['Pa', 'Pascal', 'pascal'], J * m ** -3, register=True, prefixes=True,
+def_unit(['Pa', 'Pascal', 'pascal'], J * m ** -3, namespace=_ns, prefixes=True,
          doc="Pascal: pressure")
+def_unit(['bar'], 100 * Pa, namespace=_ns,
+         doc="bar: pressure")
 
 
 ###########################################################################
 # POWER
 
-def_unit(['W', 'Watt', 'watt'], J / s, register=True, prefixes=True,
+def_unit(['W', 'Watt', 'watt'], J / s, namespace=_ns, prefixes=True,
          doc="Watt: power")
 
 
 ###########################################################################
 # ELECTRICAL
 
-def_unit(['A', 'ampere', 'amp'], register=True, prefixes=True,
+def_unit(['A', 'ampere', 'amp'], namespace=_ns, prefixes=True,
          doc="ampere: base unit of electric current in SI")
-def_unit(['C', 'coulomb'], A * s, register=True, prefixes=True,
+def_unit(['C', 'coulomb'], A * s, namespace=_ns, prefixes=True,
          doc="coulomb: electric charge")
-def_unit(['V', 'Volt', 'volt'], J * C ** -1, register=True, prefixes=True,
+def_unit(['V', 'Volt', 'volt'], J * C ** -1, namespace=_ns, prefixes=True,
          doc="Volt: electric potential or electromotive force")
-def_unit(['Ohm', 'ohm'], V * A ** -1, register=True, prefixes=True,
+def_unit(['Ohm', 'ohm'], V * A ** -1, namespace=_ns, prefixes=True,
          doc="Ohm: electrical resistance",
          format={'latex': r'\Omega', 'unicode': 'Ω'})
-def_unit(['S', 'Siemens', 'siemens'], A * V ** -1, register=True,
+def_unit(['S', 'Siemens', 'siemens'], A * V ** -1, namespace=_ns,
          prefixes=True, doc="Siemens: electrical conductance")
-def_unit(['F', 'Farad', 'farad'], C * V ** -1, register=True, prefixes=True,
+def_unit(['F', 'Farad', 'farad'], C * V ** -1, namespace=_ns, prefixes=True,
          doc="Farad: electrical capacitance")
 
 
 ###########################################################################
 # MAGNETIC
 
-def_unit(['Wb', 'Weber', 'weber'], V * s, register=True, prefixes=True,
+def_unit(['Wb', 'Weber', 'weber'], V * s, namespace=_ns, prefixes=True,
          doc="Weber: magnetic flux")
-def_unit(['T', 'Tesla', 'tesla'], Wb * m ** -2, register=True, prefixes=True,
+def_unit(['T', 'Tesla', 'tesla'], Wb * m ** -2, namespace=_ns, prefixes=True,
          doc="Tesla: magnetic flux density")
-def_unit(['H', 'Henry', 'henry'], Wb * A ** -1, register=True, prefixes=True,
+def_unit(['H', 'Henry', 'henry'], Wb * A ** -1, namespace=_ns, prefixes=True,
          doc="Henry: inductance")
 
 
 ###########################################################################
 # ILLUMINATION
 
-def_unit(['cd', 'candela'], register=True, prefixes=True,
+def_unit(['cd', 'candela'], namespace=_ns, prefixes=True,
          doc="candela: base unit of luminous intensity in SI")
-def_unit(['lm', 'lumen'], cd * sr, register=True, prefixes=True,
+def_unit(['lm', 'lumen'], cd * sr, namespace=_ns, prefixes=True,
          doc="lumen: luminous flux")
-def_unit(['lx', 'lux'], lm * m ** -2, register=True, prefixes=True,
+def_unit(['lx', 'lux'], lm * m ** -2, namespace=_ns, prefixes=True,
          doc="lux: luminous emittence")
 
 ###########################################################################
 # RADIOACTIVITY
 
-def_unit(['Bq', 'becquerel'], Hz, register=True, prefixes=False,
+def_unit(['Bq', 'becquerel'], Hz, namespace=_ns, prefixes=False,
          doc="becquerel: unit of radioactivity")
-def_unit(['Ci', 'curie'], Bq / 3.7e10, register=True, prefixes=False,
+def_unit(['Ci', 'curie'], Bq / 3.7e10, namespace=_ns, prefixes=False,
          doc="curie: unit of radioactivity")
 
 
@@ -205,6 +217,7 @@ bases = set([m, s, kg, A, cd, rad, K, mol])
 # CLEANUP
 
 del UnitBase
+del Unit
 del def_unit
 
 
diff --git a/astropy/units/tests/test_equivalencies.py b/astropy/units/tests/test_equivalencies.py
new file mode 100644
index 0000000..cdf1eb4
--- /dev/null
+++ b/astropy/units/tests/test_equivalencies.py
@@ -0,0 +1,473 @@
+# coding: utf-8
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+Separate tests specifically for equivalencies
+"""
+
+from __future__ import (absolute_import, unicode_literals, division,
+                        print_function)
+
+import numpy as np
+from numpy.testing.utils import assert_allclose
+
+from ...tests.helper import pytest
+
+from ...extern.six.moves import zip
+from ... import units as u
+
+
+def test_dimensionless_angles():
+    # test that the angles_dimensionless option allows one to change
+    # by any order in radian in the unit (#1161)
+    rad1 = u.dimensionless_angles()
+    assert u.radian.to(1, equivalencies=rad1) == 1.
+    assert u.deg.to(1, equivalencies=rad1) == u.deg.to(u.rad)
+    assert u.steradian.to(1, equivalencies=rad1) == 1.
+    assert u.dimensionless_unscaled.to(u.steradian, equivalencies=rad1) == 1.
+    # now quantities
+    assert (1.*u.radian).to(1, equivalencies=rad1).value == 1.
+    assert (1.*u.deg).to(1, equivalencies=rad1).value == u.deg.to(u.rad)
+    assert (1.*u.steradian).to(1, equivalencies=rad1).value == 1.
+    # more complicated example
+    I = 1.e45 * u.g * u.cm**2
+    Omega = u.cycle / (1.*u.s)
+    Erot = 0.5 * I * Omega**2
+    assert Erot.to(u.erg, equivalencies=rad1) == (Erot/u.radian**2)
+
+    # test build-in equivalency in subclass
+    class MyRad1(u.Quantity):
+        _equivalencies = rad1
+
+    phase = MyRad1(1., u.cycle)
+    assert phase.to(1).value == u.cycle.to(u.radian)
+
+
+functions = [u.doppler_optical, u.doppler_radio, u.doppler_relativistic]
+
+
+ at pytest.mark.parametrize(('function'), functions)
+def test_doppler_frequency_0(function):
+    rest = 105.01 * u.GHz
+    velo0 = rest.to(u.km/u.s, equivalencies=function(rest))
+    assert velo0.value == 0
+
+
+ at pytest.mark.parametrize(('function'), functions)
+def test_doppler_wavelength_0(function):
+    rest = 105.01 * u.GHz
+    q1 = 0.00285489437196 * u.m
+    velo0 = q1.to(u.km/u.s, equivalencies=function(rest))
+    np.testing.assert_almost_equal(velo0.value, 0, decimal=6)
+
+
+ at pytest.mark.parametrize(('function'), functions)
+def test_doppler_energy_0(function):
+    rest = 105.01 * u.GHz
+    q1 = 0.000434286445543 * u.eV
+    velo0 = q1.to(u.km/u.s, equivalencies=function(rest))
+    np.testing.assert_almost_equal(velo0.value, 0, decimal=6)
+
+
+ at pytest.mark.parametrize(('function'), functions)
+def test_doppler_frequency_circle(function):
+    rest = 105.01 * u.GHz
+    shifted = 105.03 * u.GHz
+    velo = shifted.to(u.km/u.s, equivalencies=function(rest))
+    freq = velo.to(u.GHz, equivalencies=function(rest))
+    np.testing.assert_almost_equal(freq.value, shifted.value, decimal=7)
+
+
+ at pytest.mark.parametrize(('function'), functions)
+def test_doppler_wavelength_circle(function):
+    rest = 105.01 * u.nm
+    shifted = 105.03 * u.nm
+    velo = shifted.to(u.km / u.s, equivalencies=function(rest))
+    wav = velo.to(u.nm, equivalencies=function(rest))
+    np.testing.assert_almost_equal(wav.value, shifted.value, decimal=7)
+
+
+ at pytest.mark.parametrize(('function'), functions)
+def test_doppler_energy_circle(function):
+    rest = 1.0501 * u.eV
+    shifted = 1.0503 * u.eV
+    velo = shifted.to(u.km / u.s, equivalencies=function(rest))
+    en = velo.to(u.eV, equivalencies=function(rest))
+    np.testing.assert_almost_equal(en.value, shifted.value, decimal=7)
+
+
+values_ghz = (999.899940784289,999.8999307714406,999.8999357778647)
+ at pytest.mark.parametrize(('function', 'value'),
+                         list(zip(functions, values_ghz)))
+def test_30kms(function, value):
+    rest = 1000 * u.GHz
+    velo = 30 * u.km/u.s
+    shifted = velo.to(u.GHz, equivalencies=function(rest))
+    np.testing.assert_almost_equal(shifted.value, value, decimal=7)
+
+def test_massenergy():
+    # The relative tolerance of these tests is set by the uncertainties
+    # in the charge of the electron, which is known to about
+    # 3e-9 (relative tolerance).  Therefore, we limit the
+    # precision of the tests to 1e-7 to be safe.  The masses are
+    # (loosely) known to ~ 5e-8 rel tolerance, so we couldn't test to
+    # 1e-7 if we used the values from astropy.constants; that is,
+    # they might change by more than 1e-7 in some future update, so instead
+    # they are hardwired here.
+
+    # Electron, proton, neutron, muon, 1g
+    mass_eV = u.Quantity([510.998928e3, 938.272046e6, 939.565378e6,
+                          105.6583715e6, 5.60958884539e32], u.eV)
+    mass_g = u.Quantity([9.10938291e-28, 1.672621777e-24, 1.674927351e-24,
+                         1.88353147e-25, 1], u.g)
+    # Test both ways
+    assert np.allclose(mass_eV.to(u.g, equivalencies=u.mass_energy()).value,
+                       mass_g.value, rtol=1e-7)
+    assert np.allclose(mass_g.to(u.eV, equivalencies=u.mass_energy()).value,
+                       mass_eV.value, rtol=1e-7)
+
+    # Basic tests of 'derived' equivalencies
+    # Surface density
+    sdens_eV = u.Quantity(5.60958884539e32, u.eV / u.m**2)
+    sdens_g = u.Quantity(1e-4, u.g / u.cm**2)
+    assert np.allclose(sdens_eV.to(u.g / u.cm**2,
+                                   equivalencies=u.mass_energy()).value,
+                       sdens_g.value, rtol=1e-7)
+    assert np.allclose(sdens_g.to(u.eV / u.m**2,
+                                  equivalencies=u.mass_energy()).value,
+                       sdens_eV.value, rtol=1e-7)
+
+    # Density
+    dens_eV = u.Quantity(5.60958884539e32, u.eV / u.m**3)
+    dens_g = u.Quantity(1e-6, u.g / u.cm**3)
+    assert np.allclose(dens_eV.to(u.g / u.cm**3,
+                                   equivalencies=u.mass_energy()).value,
+                       dens_g.value, rtol=1e-7)
+    assert np.allclose(dens_g.to(u.eV / u.m**3,
+                                  equivalencies=u.mass_energy()).value,
+                       dens_eV.value, rtol=1e-7)
+
+    # Power
+    pow_eV = u.Quantity(5.60958884539e32, u.eV / u.s)
+    pow_g = u.Quantity(1, u.g / u.s)
+    assert np.allclose(pow_eV.to(u.g / u.s,
+                                   equivalencies=u.mass_energy()).value,
+                       pow_g.value, rtol=1e-7)
+    assert np.allclose(pow_g.to(u.eV / u.s,
+                                  equivalencies=u.mass_energy()).value,
+                       pow_eV.value, rtol=1e-7)
+
+def test_is_equivalent():
+    assert u.m.is_equivalent(u.pc)
+    assert u.cycle.is_equivalent(u.mas)
+    assert not u.cycle.is_equivalent(u.dimensionless_unscaled)
+    assert u.cycle.is_equivalent(u.dimensionless_unscaled,
+                                 u.dimensionless_angles())
+    assert not (u.Hz.is_equivalent(u.J))
+    assert u.Hz.is_equivalent(u.J, u.spectral())
+    assert u.J.is_equivalent(u.Hz, u.spectral())
+    assert u.pc.is_equivalent(u.arcsecond, u.parallax())
+    assert u.arcminute.is_equivalent(u.au, u.parallax())
+
+    # Pass a tuple for multiple possibilities
+    assert u.cm.is_equivalent((u.m, u.s, u.kg))
+    assert u.ms.is_equivalent((u.m, u.s, u.kg))
+    assert u.g.is_equivalent((u.m, u.s, u.kg))
+    assert not u.L.is_equivalent((u.m, u.s, u.kg))
+    assert not (u.km / u.s).is_equivalent((u.m, u.s, u.kg))
+
+def test_parallax():
+    a = u.arcsecond.to(u.pc, 10, u.parallax())
+    assert_allclose(a, 0.10)
+    b = u.pc.to(u.arcsecond, a, u.parallax())
+    assert_allclose(b, 10)
+
+    a = u.arcminute.to(u.au, 1, u.parallax())
+    assert_allclose(a, 3437.7467916)
+    b = u.au.to(u.arcminute, a, u.parallax())
+    assert_allclose(b, 1)
+
+
+def test_parallax2():
+    a = u.arcsecond.to(u.pc, [0.1, 2.5], u.parallax())
+    assert_allclose(a, [10, 0.4])
+
+
+def test_spectral():
+    a = u.AA.to(u.Hz, 1, u.spectral())
+    assert_allclose(a, 2.9979245799999995e+18)
+    b = u.Hz.to(u.AA, a, u.spectral())
+    assert_allclose(b, 1)
+
+    a = u.AA.to(u.MHz, 1, u.spectral())
+    assert_allclose(a, 2.9979245799999995e+12)
+    b = u.MHz.to(u.AA, a, u.spectral())
+    assert_allclose(b, 1)
+
+    a = u.m.to(u.Hz, 1, u.spectral())
+    assert_allclose(a, 2.9979245799999995e+8)
+    b = u.Hz.to(u.m, a, u.spectral())
+    assert_allclose(b, 1)
+
+
+def test_spectral2():
+    a = u.nm.to(u.J, 500, u.spectral())
+    assert_allclose(a, 3.972891366538605e-19)
+    b = u.J.to(u.nm, a, u.spectral())
+    assert_allclose(b, 500)
+
+    a = u.AA.to(u.Hz, 1, u.spectral())
+    b = u.Hz.to(u.J, a, u.spectral())
+    c = u.AA.to(u.J, 1, u.spectral())
+    assert_allclose(b, c)
+
+    c = u.J.to(u.Hz, b, u.spectral())
+    assert_allclose(a, c)
+
+
+def test_spectral3():
+    a = u.nm.to(u.Hz, [1000, 2000], u.spectral())
+    assert_allclose(a, [2.99792458e+14, 1.49896229e+14])
+
+
+ at pytest.mark.parametrize(
+    ('in_val', 'in_unit'),
+    [([0.1, 5000.0, 10000.0], u.AA),
+     ([2.99792458e+19, 5.99584916e+14, 2.99792458e+14], u.Hz),
+     ([1.98644568e-14, 3.97289137e-19, 1.98644568e-19], u.J)])
+def test_spectral4(in_val, in_unit):
+    """Wave number conversion w.r.t. wavelength, freq, and energy."""
+    # Forward
+    a = in_unit.to(u.micron ** -1, in_val, u.spectral())
+    assert_allclose(a, [1e+5, 2.0, 1.0])
+
+    # Backward
+    b = (u.micron ** -1).to(in_unit, [1e+5, 2.0, 1.0], u.spectral())
+    assert_allclose(b, in_val)
+
+
+def test_spectraldensity():
+    a = u.AA.to(u.Jy, 1, u.spectral_density(u.eV, 2.2))
+    assert_allclose(a, 1059416252057.8357, rtol=1e-4)
+
+    b = u.Jy.to(u.AA, a, u.spectral_density(u.eV, 2.2))
+    assert_allclose(b, 1)
+
+    c = u.AA.to(u.Jy, 1, u.spectral_density(2.2 * u.eV))
+    assert_allclose(c, 1059416252057.8357, rtol=1e-4)
+
+    d = u.Jy.to(u.AA, c, u.spectral_density(2.2 * u.eV))
+    assert_allclose(d, 1)
+
+
+def test_spectraldensity2():
+    flambda = u.erg / u.angstrom / u.cm ** 2 / u.s
+    fnu = u.erg / u.Hz / u.cm ** 2 / u.s
+
+    a = flambda.to(fnu, 1, u.spectral_density(u.Quantity(3500, u.AA)))
+    assert_allclose(a, 4.086160166177361e-12)
+
+
+def test_spectraldensity3():
+    # Define F_nu in Jy
+    f_nu = u.Jy
+
+    # Define F_lambda in ergs / cm^2 / s / micron
+    f_lambda = u.erg / u.cm ** 2 / u.s / u.micron
+
+    # 1 GHz
+    one_ghz = u.Quantity(1, u.GHz)
+
+    # Convert to ergs / cm^2 / s / Hz
+    assert_allclose(f_nu.to(u.erg / u.cm ** 2 / u.s / u.Hz, 1.), 1.e-23, 10)
+
+    # Convert to ergs / cm^2 / s at 10 Ghz
+    assert_allclose(f_nu.to(u.erg / u.cm ** 2 / u.s, 1.,
+                    equivalencies=u.spectral_density(one_ghz * 10)),
+                    1.e-13, 10)
+
+    # Convert to F_lambda at 1 Ghz
+    assert_allclose(f_nu.to(f_lambda, 1.,
+                    equivalencies=u.spectral_density(one_ghz)),
+                    3.335640951981521e-20, 10)
+
+    # Convert to Jy at 1 Ghz
+    assert_allclose(f_lambda.to(u.Jy, 1.,
+                    equivalencies=u.spectral_density(one_ghz)),
+                    1. / 3.335640951981521e-20, 10)
+
+    # Convert to ergs / cm^2 / s at 10 microns
+    assert_allclose(f_lambda.to(u.erg / u.cm ** 2 / u.s, 1.,
+                    equivalencies=u.spectral_density(u.Quantity(10, u.micron))),
+                    10., 10)
+
+
+def test_spectraldensity4():
+    """PHOTLAM and PHOTNU conversions."""
+    flam = u.erg / (u.cm ** 2 * u.s * u.AA)
+    fnu = u.erg / (u.cm ** 2 * u.s * u.Hz)
+    photlam = u.photon / (u.cm ** 2 * u.s * u.AA)
+    photnu = u.photon / (u.cm ** 2 * u.s * u.Hz)
+
+    wave = u.Quantity([4956.8, 4959.55, 4962.3], u.AA)
+    flux_photlam = [9.7654e-3, 1.003896e-2, 9.78473e-3]
+    flux_photnu = [8.00335589e-14, 8.23668949e-14, 8.03700310e-14]
+    flux_flam = [3.9135e-14, 4.0209e-14, 3.9169e-14]
+    flux_fnu = [3.20735792e-25, 3.29903646e-25, 3.21727226e-25]
+    flux_jy = [3.20735792e-2, 3.29903646e-2, 3.21727226e-2]
+
+    # PHOTLAM <--> FLAM
+    assert_allclose(photlam.to(
+        flam, flux_photlam, u.spectral_density(wave)), flux_flam, rtol=1e-6)
+    assert_allclose(flam.to(
+        photlam, flux_flam, u.spectral_density(wave)), flux_photlam, rtol=1e-6)
+
+    # PHOTLAM <--> FNU
+    assert_allclose(photlam.to(
+        fnu, flux_photlam, u.spectral_density(wave)), flux_fnu, rtol=1e-6)
+    assert_allclose(fnu.to(
+        photlam, flux_fnu, u.spectral_density(wave)), flux_photlam, rtol=1e-6)
+
+    # PHOTLAM <--> Jy
+    assert_allclose(photlam.to(
+        u.Jy, flux_photlam, u.spectral_density(wave)), flux_jy, rtol=1e-6)
+    assert_allclose(u.Jy.to(
+        photlam, flux_jy, u.spectral_density(wave)), flux_photlam, rtol=1e-6)
+
+    # PHOTLAM <--> PHOTNU
+    assert_allclose(photlam.to(
+        photnu, flux_photlam, u.spectral_density(wave)), flux_photnu, rtol=1e-6)
+    assert_allclose(photnu.to(
+        photlam, flux_photnu, u.spectral_density(wave)), flux_photlam, rtol=1e-6)
+
+    # PHOTNU <--> FNU
+    assert_allclose(photnu.to(
+        fnu, flux_photnu, u.spectral_density(wave)), flux_fnu, rtol=1e-6)
+    assert_allclose(fnu.to(
+        photnu, flux_fnu, u.spectral_density(wave)), flux_photnu, rtol=1e-6)
+
+    # PHOTNU <--> FLAM
+    assert_allclose(photnu.to(
+        flam, flux_photnu, u.spectral_density(wave)), flux_flam, rtol=1e-6)
+    assert_allclose(flam.to(
+        photnu, flux_flam, u.spectral_density(wave)), flux_photnu, rtol=1e-6)
+
+
+def test_equivalent_units():
+    units = u.g.find_equivalent_units()
+    units_set = set(units)
+    match = set(
+        [u.M_e, u.M_p, u.g, u.kg, u.solMass, u.t, u.u])
+    assert units_set == match
+
+    r = repr(units)
+    assert r.count('\n') == len(units) + 2
+
+
+def test_equivalent_units2():
+    units = set(u.Hz.find_equivalent_units(u.spectral()))
+    match = set(
+        [u.AU, u.Angstrom, u.Hz, u.J, u.Ry, u.cm, u.eV, u.erg, u.lyr,
+         u.m, u.micron, u.pc, u.solRad, u.Bq, u.Ci, u.k])
+    assert units == match
+
+    from .. import imperial
+    with u.add_enabled_units(imperial):
+        units = set(u.Hz.find_equivalent_units(u.spectral()))
+        match = set(
+            [u.AU, u.Angstrom, imperial.BTU, u.Hz, u.J, u.Ry,
+             imperial.cal, u.cm, u.eV, u.erg, imperial.ft,
+             imperial.inch, imperial.kcal, u.lyr, u.m, imperial.mi,
+             u.micron, u.pc, u.solRad, imperial.yd, u.Bq, u.Ci,
+             imperial.nmi, u.k])
+        assert units == match
+
+    units = set(u.Hz.find_equivalent_units(u.spectral()))
+    match = set(
+        [u.AU, u.Angstrom, u.Hz, u.J, u.Ry, u.cm, u.eV, u.erg, u.lyr,
+         u.m, u.micron, u.pc, u.solRad, u.Bq, u.Ci, u.k])
+    assert units == match
+
+
+def test_trivial_equivalency():
+    assert u.m.to(u.kg, equivalencies=[(u.m, u.kg)]) == 1.0
+
+
+def test_invalid_equivalency():
+    with pytest.raises(ValueError):
+        u.m.to(u.kg, equivalencies=[(u.m,)])
+
+    with pytest.raises(ValueError):
+        u.m.to(u.kg, equivalencies=[(u.m, 5.0)])
+
+
+def test_irrelevant_equivalency():
+    with pytest.raises(u.UnitsException):
+        u.m.to(u.kg, equivalencies=[(u.m, u.l)])
+
+
+def test_brightness_temperature():
+    omega_B = np.pi * (50 * u.arcsec) ** 2
+    nu = u.GHz * 5
+    tb = 7.05258885885 * u.K
+    np.testing.assert_almost_equal(
+        tb.value, (1 * u.Jy).to(
+            u.K, equivalencies=u.brightness_temperature(omega_B, nu)).value)
+    np.testing.assert_almost_equal(
+        1.0, tb.to(
+            u.Jy, equivalencies=u.brightness_temperature(omega_B, nu)).value)
+
+
+def test_equivalency_context():
+    with u.set_enabled_equivalencies(u.dimensionless_angles()):
+        phase = u.Quantity(1., u.cycle)
+        assert_allclose(np.exp(1j*phase), 1.)
+        Omega = u.cycle / (1.*u.minute)
+        assert_allclose(np.exp(1j*Omega*60.*u.second), 1.)
+        # ensure we can turn off equivalencies even within the scope
+        with pytest.raises(u.UnitsError):
+            phase.to(1, equivalencies=None)
+
+    with u.set_enabled_equivalencies(u.spectral()):
+        u.GHz.to(u.cm)
+        eq_on = u.GHz.find_equivalent_units()
+        with pytest.raises(u.UnitsError):
+            u.GHz.to(u.cm, equivalencies=None)
+
+    # without equivalencies, we should find a smaller (sub)set
+    eq_off = u.GHz.find_equivalent_units()
+    assert all(eq in set(eq_on) for eq in eq_off)
+    assert set(eq_off) < set(eq_on)
+
+
+def test_equivalency_context_manager():
+    base_registry = u.get_current_unit_registry()
+
+    def just_to_from_units(equivalencies):
+        return [(equiv[0], equiv[1]) for equiv in equivalencies]
+
+    tf_dimensionless_angles = just_to_from_units(u.dimensionless_angles())
+    tf_spectral = just_to_from_units(u.spectral())
+    assert base_registry.equivalencies == []
+    with u.set_enabled_equivalencies(u.dimensionless_angles()):
+        new_registry = u.get_current_unit_registry()
+        assert (set(just_to_from_units(new_registry.equivalencies)) ==
+                set(tf_dimensionless_angles))
+        assert set(new_registry.all_units) == set(base_registry.all_units)
+        with u.set_enabled_equivalencies(u.spectral()):
+            newer_registry = u.get_current_unit_registry()
+            assert (set(just_to_from_units(newer_registry.equivalencies)) ==
+                    set(tf_spectral))
+            assert (set(newer_registry.all_units) ==
+                    set(base_registry.all_units))
+
+        assert (set(just_to_from_units(new_registry.equivalencies)) ==
+                set(tf_dimensionless_angles))
+        assert set(new_registry.all_units) == set(base_registry.all_units)
+        with u.add_enabled_equivalencies(u.spectral()):
+            newer_registry = u.get_current_unit_registry()
+            assert (set(just_to_from_units(newer_registry.equivalencies)) ==
+                    set(tf_dimensionless_angles) | set(tf_spectral))
+            assert (set(newer_registry.all_units) ==
+                    set(base_registry.all_units))
+
+    assert base_registry is u.get_current_unit_registry()
diff --git a/astropy/units/tests/test_format.py b/astropy/units/tests/test_format.py
index 8e75ef7..2f4b7e4 100644
--- a/astropy/units/tests/test_format.py
+++ b/astropy/units/tests/test_format.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 """
 Regression tests for the units.format package
@@ -6,12 +8,12 @@ Regression tests for the units.format package
 from __future__ import (absolute_import, unicode_literals, division,
                         print_function)
 
-from ...tests.helper import raises
-from ...tests.compat import assert_allclose
+from numpy.testing.utils import assert_allclose
+from ...tests.helper import raises, pytest
 
 from ... import units as u
 from .. import core
-from .. import format
+from .. import format as u_format
 from ..utils import is_effectively_unity
 from ... import wcs
 
@@ -19,7 +21,7 @@ from ... import wcs
 def test_unit_grammar():
     def _test_unit_grammar(s, unit):
         print(s)
-        unit2 = format.Generic().parse(s)
+        unit2 = u_format.Generic().parse(s)
         assert unit2 == unit
 
     data = [
@@ -43,7 +45,7 @@ def test_unit_grammar():
 def test_cds_grammar():
     def _test_cds_grammar(s, unit):
         print(s)
-        unit2 = format.CDS().parse(s)
+        unit2 = u_format.CDS().parse(s)
         assert unit2 == unit
 
     data = [
@@ -53,21 +55,27 @@ def test_cds_grammar():
         (["km/s", "km.s-1"], u.km / u.s),
         (["10pix/nm"], u.Unit(10 * u.pix / u.nm)),
         (["1.5x10+11m"], u.Unit(1.5e11 * u.m)),
+        (["1.5×10+11m"], u.Unit(1.5e11 * u.m)),
         (["m2"], u.m ** 2),
         (["10+21m"], u.Unit(u.m * 1e21)),
         (["2.54cm"], u.Unit(u.cm * 2.54)),
-        (["20%"], 0.20),
+        (["20%"], 0.20 * u.dimensionless_unscaled),
+        (["10+9"], 1.e9 * u.dimensionless_unscaled),
+        (["2x10-9"], 2.e-9 * u.dimensionless_unscaled),
+        (["---"], u.dimensionless_unscaled),
         (["ma"], u.ma),
         (["mAU"], u.mAU),
         (["uarcmin"], u.uarcmin),
         (["uarcsec"], u.uarcsec),
         (["kbarn"], u.kbarn),
         (["Gbit"], u.Gbit),
+        (["Gibit"], 2 ** 30 * u.bit),
         (["kbyte"], u.kbyte),
         (["mRy"], 0.001 * u.Ry),
         (["mmag"], u.mmag),
         (["Mpc"], u.Mpc),
-        (["Gyr"], u.Gyr)]
+        (["Gyr"], u.Gyr),
+        (["°"], u.degree)]
 
     for strings, unit in data:
         for s in strings:
@@ -78,11 +86,11 @@ def test_cds_grammar_fail():
     @raises(ValueError)
     def _test_cds_grammar_fail(s):
         print(s)
-        format.CDS().parse(s)
+        u_format.CDS().parse(s)
 
     data = ['0.1 nm', 'solMass(3/2)', 'km / s', 'km s-1',
             'pix0.1nm', 'pix/(0.1nm)', 'km*s', 'km**2',
-            '5x8+3m']
+            '5x8+3m', '0.1---', '---m', 'm---']
 
     for s in data:
         yield _test_cds_grammar_fail, s
@@ -107,7 +115,7 @@ def test_roundtrip_vo_unit():
         assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
         assert_allclose(b.decompose().scale, unit.decompose().scale, rtol=1e-2)
 
-    x = format.VOUnit()
+    x = u_format.VOUnit()
     for key, val in x._units.items():
         if isinstance(val, core.Unit) and not isinstance(val, core.PrefixUnit):
             yield _test_roundtrip_vo_unit, val
@@ -119,7 +127,7 @@ def test_roundtrip_fits():
         a = core.Unit(s, format='fits')
         assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
 
-    for key, val in format.Fits()._units.items():
+    for key, val in u_format.Fits()._units.items():
         if isinstance(val, core.Unit) and not isinstance(val, core.PrefixUnit):
             yield _test_roundtrip_fits, val
 
@@ -131,28 +139,47 @@ def test_roundtrip_cds():
         assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
         assert_allclose(b.decompose().scale, unit.decompose().scale, rtol=1e-2)
 
-    x = format.CDS()
+    x = u_format.CDS()
     for key, val in x._units.items():
         if isinstance(val, core.Unit) and not isinstance(val, core.PrefixUnit):
             yield _test_roundtrip_cds, val
 
 
 def test_fits_units_available():
-    format.Fits()
+    u_format.Fits()
 
 
 def test_vo_units_available():
-    format.VOUnit()
+    u_format.VOUnit()
 
 
 def test_cds_units_available():
-    format.CDS()
+    u_format.CDS()
 
 
 def test_latex():
     fluxunit = u.erg / (u.cm ** 2 * u.s)
-    assert fluxunit.to_string('latex') == r'$\mathrm{\frac{erg}{s\ cm^{2}}}$'
+    assert fluxunit.to_string('latex') == r'$\mathrm{\frac{erg}{s\,cm^{2}}}$'
+
+def test_new_style_latex():
+    fluxunit = u.erg / (u.cm ** 2 * u.s)
+    assert "{0:latex}".format(fluxunit) == r'$\mathrm{\frac{erg}{s\,cm^{2}}}$'
+
+def test_format_styles():
+    fluxunit = u.erg / (u.cm ** 2 * u.s)
+    def _test_format_styles(format_spec, s):
+        assert format(fluxunit, format_spec) == s
+
+    format_s_pairs = [
+        ('generic','erg / (cm2 s)'),
+        ('s', 'erg / (cm2 s)'),
+        ('console', '  erg  \n ------\n s cm^2'),
+        ('latex', '$\\mathrm{\\frac{erg}{s\\,cm^{2}}}$'),
+        ('>20s','       erg / (cm2 s)'),
+    ]
 
+    for format_, s in format_s_pairs:
+        yield _test_format_styles, format_, s
 
 def test_wcs_parse():
     """
@@ -173,7 +200,7 @@ def test_wcs_parse():
 
 
 def test_flatten_to_known():
-    myunit = u.def_unit("FOOBARa", u.erg / u.Hz)
+    myunit = u.def_unit("FOOBAR_One", u.erg / u.Hz)
     assert myunit.to_string('fits') == 'erg Hz-1'
     myunit2 = myunit * u.bit ** 3
     assert myunit2.to_string('fits') == 'bit3 erg Hz-1'
@@ -181,8 +208,9 @@ def test_flatten_to_known():
 
 @raises(ValueError)
 def test_flatten_impossible():
-    myunit = u.def_unit("FOOBARb")
-    myunit.to_string('fits')
+    myunit = u.def_unit("FOOBAR_Two")
+    with u.add_enabled_units(myunit):
+        myunit.to_string('fits')
 
 
 def test_console_out():
@@ -192,6 +220,20 @@ def test_console_out():
     u.Jy.decompose().to_string('console')
 
 
+def test_flexible_float():
+    assert u.min._represents.to_string('latex') == r'$\mathrm{60\,s}$'
+
+
+def test_fraction_repr():
+    area = u.cm ** 2.0
+    assert '.' not in area.to_string('latex')
+
+    fractional = u.cm ** 2.5
+    assert '5/2' in fractional.to_string('latex')
+
+    assert fractional.to_string('unicode') == 'cm⁵⸍²'
+
+
 def test_scale_effectively_unity():
     """Scale just off unity at machine precision level is OK.
     Ensures #748 does not recur
@@ -199,3 +241,34 @@ def test_scale_effectively_unity():
     a = (3. * u.N).cgs
     assert is_effectively_unity(a.unit.scale)
     assert len(a.__repr__().split()) == 3
+
+
+def test_percent():
+    """Test that the % unit is properly recognized.  Since % is a special
+    symbol, this goes slightly beyond the roundtripping tested above."""
+    assert u.Unit('%') == u.percent == u.Unit(0.01)
+
+    assert u.Unit('%', format='cds') == u.Unit(0.01)
+    assert u.Unit(0.01).to_string('cds') == '%'
+
+    with pytest.raises(ValueError):
+        u.Unit('%', format='fits')
+
+    with pytest.raises(ValueError):
+        u.Unit('%', format='vounit')
+
+
+def test_scaled_dimensionless():
+    """Test that scaled dimensionless units are properly recognized in generic
+    and CDS, but not in fits and vounit."""
+    assert u.Unit('0.1') == u.Unit(0.1) == 0.1 * u.dimensionless_unscaled
+    assert u.Unit('1.e-4') == u.Unit(1.e-4)
+
+    assert u.Unit('10-4', format='cds') == u.Unit(1.e-4)
+    assert u.Unit('10+8').to_string('cds') == '10+8'
+
+    with pytest.raises(ValueError):
+        u.Unit(0.1).to_string('fits')
+
+    with pytest.raises(ValueError):
+        u.Unit(0.1).to_string('vounit')
diff --git a/astropy/units/tests/test_physical.py b/astropy/units/tests/test_physical.py
index 0adcaa3..4d2820f 100644
--- a/astropy/units/tests/test_physical.py
+++ b/astropy/units/tests/test_physical.py
@@ -15,15 +15,15 @@ from ...tests.helper import raises
 
 
 def test_simple():
-    assert u.mile.physical_type == 'length'
+    assert u.m.physical_type == 'length'
 
 
 def test_power():
-    assert (u.foot ** 3).physical_type == 'volume'
+    assert (u.cm ** 3).physical_type == 'volume'
 
 
 def test_speed():
-    assert (u.mile / u.h).physical_type == 'speed'
+    assert (u.km / u.h).physical_type == 'speed'
 
 
 def test_unknown():
@@ -39,8 +39,18 @@ def test_angular_momentum():
 
 
 def test_flam():
-    assert ((u.erg / (u.cm**2 * u.s * u.AA)).physical_type ==
-            'spectral flux density wav')
+    flam = u.erg / (u.cm**2 * u.s * u.AA)
+    assert flam.physical_type == 'spectral flux density wav'
+
+
+def test_photlam():
+    photlam = u.photon / (u.cm ** 2 * u.s * u.AA)
+    assert photlam.physical_type == 'photon flux density wav'
+
+
+def test_photnu():
+    photnu = u.photon / (u.cm ** 2 * u.s * u.Hz)
+    assert photnu.physical_type == 'photon flux density'
 
 
 @raises(ValueError)
diff --git a/astropy/units/tests/test_quantity.py b/astropy/units/tests/test_quantity.py
index 416c8d1..df94362 100644
--- a/astropy/units/tests/test_quantity.py
+++ b/astropy/units/tests/test_quantity.py
@@ -7,13 +7,18 @@
 from __future__ import (absolute_import, unicode_literals, division,
                         print_function)
 
-import pytest
+import copy
+
 import numpy as np
+from numpy.testing import (assert_allclose, assert_array_equal,
+                           assert_array_almost_equal)
 
-from ...tests.compat import assert_allclose
 from ...tests.helper import raises, pytest
 from ...utils import isiterable
 from ... import units as u
+from ...extern.six.moves import xrange
+from ...extern.six.moves import cPickle as pickle
+from ...extern import six
 
 """ The Quantity class will represent a number + unit + uncertainty """
 
@@ -46,15 +51,21 @@ class TestQuantityCreation(object):
             quantity = 182.234 % u.meter
 
     def test_2(self):
+
         # create objects using the Quantity constructor:
         q1 = u.Quantity(11.412, unit=u.meter)
         q2 = u.Quantity(21.52, "cm")
+        q3 = u.Quantity(11.412)
+
+        # By default quantities that don't specify a unit are unscaled
+        # dimensionless
+        assert q3.unit == u.Unit(1)
 
         with pytest.raises(TypeError):
-            q3 = u.Quantity(11.412)
+            q4 = u.Quantity(object(), unit=u.m)
 
     def test_3(self):
-        # with pytest.raises(u.UnitsException):
+        # with pytest.raises(u.UnitsError):
         with pytest.raises(ValueError):  # Until @mdboom fixes the errors in units
             q1 = u.Quantity(11.412, unit="testingggg")
 
@@ -63,7 +74,19 @@ class TestQuantityCreation(object):
         q1 = u.Quantity(11.4, unit=u.meter)
 
         with pytest.raises(AttributeError):
-            q1.unit = u.centimeter
+            q1.unit = u.cm
+
+    def test_preserve_dtype(self):
+
+        # If unit is not sepcified, preserve dtype (at least to the extent
+        # that Numpy does when copying, i.e. int32 -> int64, not float64)
+
+        q1 = u.Quantity(12, unit=u.m / u.s, dtype=int)
+        q2 = u.Quantity(q1)
+
+        assert q1.value == q2.value
+        assert q1.unit == q2.unit
+        assert q1.dtype == q2.dtype
 
 
 class TestQuantityOperations(object):
@@ -120,21 +143,19 @@ class TestQuantityOperations(object):
     def test_division(self):
         # Take units from left object, q1
         new_quantity = self.q1 / self.q2
-        np.testing.assert_array_almost_equal(
-            new_quantity.value, 1.4275, decimal=5)
+        assert_array_almost_equal(new_quantity.value, 1.4275, decimal=5)
         assert new_quantity.unit == (u.meter / u.centimeter)
 
         # Take units from left object, q2
         new_quantity = self.q2 / self.q1
-        np.testing.assert_array_almost_equal(
-            new_quantity.value, 0.70052539404553416, decimal=16)
+        assert_array_almost_equal(new_quantity.value, 0.70052539404553416,
+                                  decimal=16)
         assert new_quantity.unit == (u.centimeter / u.meter)
 
         q1 = u.Quantity(11.4, unit=u.meter)
         q2 = u.Quantity(10.0, unit=u.second)
         new_quantity = q1 / q2
-        np.testing.assert_array_almost_equal(
-            new_quantity.value, 1.14, decimal=10)
+        assert_array_almost_equal(new_quantity.value, 1.14, decimal=10)
         assert new_quantity.unit == (u.meter / u.second)
 
         # divide with a number
@@ -159,13 +180,11 @@ class TestQuantityOperations(object):
     def test_power(self):
         # raise quantity to a power
         new_quantity = self.q1 ** 2
-        np.testing.assert_array_almost_equal(
-            new_quantity.value, 130.4164, decimal=5)
+        assert_array_almost_equal(new_quantity.value, 130.4164, decimal=5)
         assert new_quantity.unit == u.Unit("m^2")
 
         new_quantity = self.q1 ** 3
-        np.testing.assert_array_almost_equal(
-            new_quantity.value, 1489.355288, decimal=7)
+        assert_array_almost_equal(new_quantity.value, 1489.355288, decimal=7)
         assert new_quantity.unit == u.Unit("m^3")
 
     def test_unary(self):
@@ -204,28 +223,52 @@ class TestQuantityOperations(object):
         q1 = u.Quantity(11.412, unit=u.meter)
         q2 = u.Quantity(21.52, unit=u.second)
 
-        with pytest.raises(u.UnitsException):
+        with pytest.raises(u.UnitsError):
             new_q = q1 + q2
 
     def test_dimensionless_operations(self):
+        # test conversion to dimensionless
+        dq = 3. * u.m / u.km
+        dq1 = dq + 1. * u.mm / u.km
+        assert dq1.value == 3.001
+        assert dq1.unit == dq.unit
+
+        dq2 = dq + 1.
+        assert dq2.value == 1.003
+        assert dq2.unit == u.dimensionless_unscaled
+
         # this test will check that operations with dimensionless Quantities
         # don't work
-
-        with pytest.raises(u.UnitsException):
+        with pytest.raises(u.UnitsError):
             self.q1 + u.Quantity(0.1, unit=u.Unit(""))
 
-        with pytest.raises(u.UnitsException):
+        with pytest.raises(u.UnitsError):
             self.q1 - u.Quantity(0.1, unit=u.Unit(""))
 
+        # and test that scaling of integers works
+        q = np.array([1, 2, 3]) * u.m / u.km
+        q2 = q + np.array([4, 5, 6])
+        assert q2.unit == u.dimensionless_unscaled
+        assert_allclose(q2.value, np.array([4.001, 5.002, 6.003]))
+        # but not if doing it inplace
+        with pytest.raises(TypeError):
+            q += np.array([1, 2, 3])
+        # except if it is actually possible
+        q = np.array([1, 2, 3]) * u.km / u.m
+        q += np.array([4, 5, 6])
+        assert q.unit == u.dimensionless_unscaled
+        assert np.all(q.value == np.array([1004, 2005, 3006]))
+
     def test_complicated_operation(self):
         """ Perform a more complicated test """
+        from .. import imperial
 
         # Multiple units
         distance = u.Quantity(15., u.meter)
         time = u.Quantity(11., u.second)
 
-        velocity = (distance / time).to(u.mile / u.hour)
-        np.testing.assert_array_almost_equal(
+        velocity = (distance / time).to(imperial.mile / u.hour)
+        assert_array_almost_equal(
             velocity.value, 3.05037, decimal=5)
 
         G = u.Quantity(6.673E-11, u.m ** 3 / u.kg / u.s ** 2)
@@ -235,7 +278,7 @@ class TestQuantityOperations(object):
         side1 = u.Quantity(11., u.centimeter)
         side2 = u.Quantity(7., u.centimeter)
         area = side1 * side2
-        np.testing.assert_array_almost_equal(area.value, 77., decimal=15)
+        assert_array_almost_equal(area.value, 77., decimal=15)
         assert area.unit == u.cm * u.cm
 
     def test_comparison(self):
@@ -252,11 +295,94 @@ class TestQuantityOperations(object):
         assert 1. * u.cm != 1.
 
     def test_numeric_converters(self):
-        q = u.Quantity(1.23, u.m)
-
-        assert float(q) == 1.23
-        assert int(q) == 1
-        assert long(q) == 1L
+        # float, int, long, and __index__ should only work for single
+        # quantities, of appropriate type, and only if they are dimensionless.
+        # (Check on __index__ is also a regression test for #1557)
+
+        # quantities with units should never convert, or be usable as an index
+        q1 = u.Quantity(1, u.m)
+
+        converter_err_msg = ("Only dimensionless scalar quantities "
+                             "can be converted to Python scalars")
+        index_err_msg = ("Only integer dimensionless scalar quantities "
+                         "can be converted to a Python index")
+        with pytest.raises(TypeError) as exc:
+            float(q1)
+        assert exc.value.args[0] == converter_err_msg
+
+        with pytest.raises(TypeError) as exc:
+            int(q1)
+        assert exc.value.args[0] == converter_err_msg
+
+        if six.PY2:
+            with pytest.raises(TypeError) as exc:
+                long(q1)
+            assert exc.value.args[0] == converter_err_msg
+
+        with pytest.raises(TypeError) as exc:
+            q1 * ['a', 'b', 'c']
+        assert exc.value.args[0] == index_err_msg
+
+        # dimensionless but scaled is also not OK
+        q2 = u.Quantity(1.23, u.m / u.km)
+
+        with pytest.raises(TypeError) as exc:
+            float(q2)
+        assert exc.value.args[0] == converter_err_msg
+
+        with pytest.raises(TypeError) as exc:
+            int(q2)
+        assert exc.value.args[0] == converter_err_msg
+
+        if six.PY2:
+            with pytest.raises(TypeError) as exc:
+                long(q2)
+            assert exc.value.args[0] == converter_err_msg
+
+        with pytest.raises(TypeError) as exc:
+            q2 * ['a', 'b', 'c']
+        assert exc.value.args[0] == index_err_msg
+
+        # dimensionless unscaled is OK, though for index needs to be int
+        q3 = u.Quantity(1.23, u.dimensionless_unscaled)
+
+        assert float(q3) == 1.23
+        assert int(q3) == 1
+        if six.PY2:
+            assert long(q3) == 1
+
+        with pytest.raises(TypeError) as exc:
+            q1 * ['a', 'b', 'c']
+        assert exc.value.args[0] == index_err_msg
+
+        # integer dimensionless unscaled is good for all
+        q4 = u.Quantity(2, u.dimensionless_unscaled)
+
+        assert float(q4) == 2.
+        assert int(q4) == 2
+        if six.PY2:
+            assert long(q4) == 2
+
+        assert q4 * ['a', 'b', 'c'] == ['a', 'b', 'c', 'a', 'b', 'c']
+
+        # but arrays are not OK
+        q5 = u.Quantity([1, 2], u.m)
+        with pytest.raises(TypeError) as exc:
+            float(q5)
+        assert exc.value.args[0] == converter_err_msg
+
+        with pytest.raises(TypeError) as exc:
+            int(q5)
+        assert exc.value.args[0] == converter_err_msg
+
+        if six.PY2:
+            with pytest.raises(TypeError) as exc:
+                long(q5)
+            assert exc.value.args[0] == converter_err_msg
+
+        with pytest.raises(TypeError) as exc:
+            q5 * ['a', 'b', 'c']
+        assert exc.value.args[0] == index_err_msg
 
     def test_array_converters(self):
 
@@ -275,7 +401,7 @@ def test_quantity_conversion():
     new_quantity = q1.to(u.kilometer)
     assert new_quantity.value == 0.0001
 
-    with pytest.raises(u.UnitsException):
+    with pytest.raises(u.UnitsError):
         q1.to(u.zettastokes)
 
 
@@ -284,6 +410,34 @@ def test_quantity_conversion_with_equiv():
     q2 = q1.to(u.Hz, equivalencies=u.spectral())
     assert_allclose(q2.value, 2997924580.0)
 
+    q1 = u.Quantity(0.4, unit=u.arcsecond)
+    q2 = q1.to(u.au, equivalencies=u.parallax())
+    q3 = q2.to(u.arcminute, equivalencies=u.parallax())
+
+    assert_allclose(q2.value, 515662.015)
+    assert q2.unit == u.au
+    assert_allclose(q3.value, 0.0066666667)
+    assert q3.unit == u.arcminute
+
+
+def test_quantity_conversion_equivalency_passed_on():
+    class MySpectral(u.Quantity):
+        _equivalencies = u.spectral()
+
+        def __quantity_instance__(self, *args, **kwargs):
+            return MySpectral(*args, **kwargs)
+
+    q1 = MySpectral([1000,2000], unit=u.Hz)
+    q2 = q1.to(u.nm)
+    assert q2.unit == u.nm
+    q3 = q2.to(u.Hz)
+    assert q3.unit == u.Hz
+    assert_allclose(q3.value, q1.value)
+    q4 = MySpectral([1000, 2000], unit=u.nm)
+    q5 = q4.to(u.Hz).to(u.nm)
+    assert q5.unit == u.nm
+    assert_allclose(q4.value, q5.value)
+
 
 def test_si():
     q1 = 10. * u.m * u.s ** 2 / (200. * u.ms) ** 2  # 250 meters
@@ -318,20 +472,21 @@ def test_cgs():
 
 
 class TestQuantityComparison(object):
+
     def test_quantity_equality(self):
         assert u.Quantity(1000, unit='m') == u.Quantity(1, unit='km')
         assert not (u.Quantity(1, unit='m') == u.Quantity(1, unit='km'))
-        with pytest.raises(u.UnitsException):
+        with pytest.raises(u.UnitsError):
             u.Quantity(1, unit='m') == u.Quantity(1, unit='s')
 
     def test_quantity_comparison(self):
         assert u.Quantity(1100, unit=u.meter) > u.Quantity(1, unit=u.kilometer)
         assert u.Quantity(900, unit=u.meter) < u.Quantity(1, unit=u.kilometer)
 
-        with pytest.raises(u.UnitsException):
+        with pytest.raises(u.UnitsError):
             assert u.Quantity(1100, unit=u.meter) > u.Quantity(1, unit=u.second)
 
-        with pytest.raises(u.UnitsException):
+        with pytest.raises(u.UnitsError):
             assert u.Quantity(1100, unit=u.meter) < u.Quantity(1, unit=u.second)
 
         assert u.Quantity(1100, unit=u.meter) >= u.Quantity(1, unit=u.kilometer)
@@ -340,28 +495,42 @@ class TestQuantityComparison(object):
         assert u.Quantity(900, unit=u.meter) <= u.Quantity(1, unit=u.kilometer)
         assert u.Quantity(1000, unit=u.meter) <= u.Quantity(1, unit=u.kilometer)
 
-        with pytest.raises(u.UnitsException):
+        with pytest.raises(u.UnitsError):
             assert u.Quantity(
                 1100, unit=u.meter) >= u.Quantity(1, unit=u.second)
 
-        with pytest.raises(u.UnitsException):
+        with pytest.raises(u.UnitsError):
             assert u.Quantity(1100, unit=u.meter) <= u.Quantity(1, unit=u.second)
 
         assert u.Quantity(1200, unit=u.meter) != u.Quantity(1, unit=u.kilometer)
 
-        with pytest.raises(u.UnitsException):
+        with pytest.raises(u.UnitsError):
             assert u.Quantity(1100, unit=u.meter) != u.Quantity(1, unit=u.second)
 
 
 class TestQuantityDisplay(object):
+    scalarintq = u.Quantity(1, unit='m')
+    scalarfloatq = u.Quantity(1.3, unit='m')
+    arrq = u.Quantity([1, 2.3, 8.9], unit='m')
+
+    def test_scalar_quantity_str(self):
+        assert str(self.scalarintq) == "1 m"
+        assert str(self.scalarfloatq) == "1.3 m"
+
+    def test_scalar_quantity_repr(self):
+        assert repr(self.scalarintq) == "<Quantity 1 m>"
+        assert repr(self.scalarfloatq) == "<Quantity 1.3 m>"
+
+    def test_array_quantity_str(self):
+        assert str(self.arrq) == "[ 1.   2.3  8.9] m"
 
-    def test_quantity_str(self):
-        q1 = u.Quantity(1, unit='m')
-        assert str(q1) == "1 m"
+    def test_array_quantity_repr(self):
+        assert repr(self.arrq) == "<Quantity [ 1. , 2.3, 8.9] m>"
 
-    def test_quantity_repr(self):
-        q1 = u.Quantity(1, unit='m')
-        assert repr(q1) == "<Quantity 1 m>"
+    def test_scalar_quantity_format(self):
+        assert format(self.scalarintq, '02d') == "01 m"
+        assert format(self.scalarfloatq, '.1f') == "1.3 m"
+        assert format(self.scalarfloatq, '.0f') == "1 m"
 
 
 def test_decompose():
@@ -388,7 +557,6 @@ def test_arrays():
     """
     Test using quantites with array values
     """
-    from numpy.testing import assert_array_equal
 
     qsec = u.Quantity(np.arange(10), u.second)
     assert isinstance(qsec.value, np.ndarray)
@@ -410,17 +578,16 @@ def test_arrays():
         qsecnotarray[0]
 
     qseclen0array = u.Quantity(np.array(10), u.second)
-    # 0d numpy array should act basically like a scalar, but still keep its
-    # identity as a numpy array
+    # 0d numpy array should act basically like a scalar
     assert qseclen0array.isscalar
     with pytest.raises(TypeError):
         len(qseclen0array)
     with pytest.raises(TypeError):
         qseclen0array[0]
-    assert isinstance(qseclen0array.value, np.ndarray)
+    assert isinstance(qseclen0array.value, int)
 
     # can also create from lists, will auto-convert to arrays
-    qsec = u.Quantity(range(10), u.second)
+    qsec = u.Quantity(list(xrange(10)), u.second)
     assert isinstance(qsec.value, np.ndarray)
 
     # quantity math should work with arrays
@@ -428,9 +595,9 @@ def test_arrays():
     assert_array_equal((qsec / 2).value, (np.arange(10) / 2))
     # quantity addition/subtraction should *not* work with arrays b/c unit
     # ambiguous
-    with pytest.raises(TypeError):
+    with pytest.raises(u.UnitsError):
         assert_array_equal((qsec + 2).value, (np.arange(10) + 2))
-    with pytest.raises(TypeError):
+    with pytest.raises(u.UnitsError):
         assert_array_equal((qsec - 2).value, (np.arange(10) + 2))
 
     # should create by unit multiplication, too
@@ -445,8 +612,9 @@ def test_arrays():
         float(qsec)
     with pytest.raises(TypeError):
         int(qsec)
-    with pytest.raises(TypeError):
-        long(qsec)
+    if six.PY2:
+        with pytest.raises(TypeError):
+            long(qsec)
 
 
 def test_array_indexing_slicing():
@@ -455,6 +623,12 @@ def test_array_indexing_slicing():
     assert np.all(q[0:2] == u.Quantity([1., 2.], u.m))
 
 
+def test_array_setslice():
+    q = np.array([1., 2., 3. ]) * u.m
+    q[1:2] = np.array([400.]) * u.cm
+    assert np.all(q == np.array([1., 4., 3.]) * u.m)
+
+
 def test_inverse_quantity():
     """
     Regression test from issue #679
@@ -473,6 +647,7 @@ def test_inverse_quantity():
     assert toq.value == 0.5
     assert toq.unit == (u.second / u.meter)
 
+
 def test_quantity_mutability():
     q = u.Quantity(9.8, u.meter / u.second / u.second)
 
@@ -482,6 +657,7 @@ def test_quantity_mutability():
     with pytest.raises(AttributeError):
         q.unit = u.kg
 
+
 def test_quantity_initialized_with_quantity():
     q1 = u.Quantity(60, u.second)
 
@@ -492,9 +668,14 @@ def test_quantity_initialized_with_quantity():
     assert q3[0].value == 60
     assert q3[1].value == 60
 
+    q4 = u.Quantity([q2, q1])
+    assert q4.unit == q2.unit
+    assert q4[0].value == 1
+    assert q4[1].value == 1
+
 
 def test_quantity_string_unit():
-    q1 = "m" / u.s
+    q1 = 1. * u.m / 's'
     assert q1.value == 1
     assert q1.unit == (u.m / u.s)
 
@@ -507,9 +688,33 @@ def test_quantity_invalid_unit_string():
     "foo" * u.m
 
 
- at raises(ValueError)
-def test_quantity_invalid_unit_string2():
-    "15" * u.m
+def test_implicit_conversion():
+    q = u.Quantity(1.0, u.meter)
+    # Manually turn this on to simulate what might happen in a subclass
+    q._include_easy_conversion_members = True
+    assert_allclose(q.centimeter, 100)
+    assert_allclose(q.cm, 100)
+    assert_allclose(q.parsec, 3.240779289469756e-17)
+
+
+def test_implicit_conversion_autocomplete():
+    q = u.Quantity(1.0, u.meter)
+    # Manually turn this on to simulate what might happen in a subclass
+    q._include_easy_conversion_members = True
+    q.foo = 42
+
+    attrs = dir(q)
+    assert 'centimeter' in attrs
+    assert 'cm' in attrs
+    assert 'parsec' in attrs
+    assert 'foo' in attrs
+    assert 'to' in attrs
+    assert 'value' in attrs
+    # Something from the base class, object
+    assert '__setattr__' in attrs
+
+    with pytest.raises(AttributeError):
+        q.l
 
 
 def test_quantity_iterability():
@@ -522,7 +727,82 @@ def test_quantity_iterability():
     q1 = [15.0, 17.0] * u.m
     assert isiterable(q1)
 
-    q2 = iter(q1).next()
+    q2 = six.next(iter(q1))
     assert q2 == 15.0 * u.m
     assert not isiterable(q2)
     pytest.raises(TypeError, iter, q2)
+
+
+def test_copy():
+
+    q1 = u.Quantity(np.array([1., 2., 3.]), unit=u.m)
+    q2 = q1.copy()
+
+    assert np.all(q1.value == q2.value)
+    assert q1.unit == q2.unit
+    assert q1.dtype == q2.dtype
+
+    assert q1.value is not q2.value
+
+
+def test_deepcopy():
+    q1 = u.Quantity(np.array([1., 2., 3.]), unit=u.m)
+    q2 = copy.deepcopy(q1)
+
+    assert isinstance(q2, u.Quantity)
+    assert np.all(q1.value == q2.value)
+    assert q1.unit == q2.unit
+    assert q1.dtype == q2.dtype
+
+    assert q1.value is not q2.value
+
+
+def test_equality_numpy_scalar():
+    """
+    A regression test to ensure that numpy scalars are correctly compared
+    (which originally failed due to the lack of ``__array_priority__``).
+    """
+    assert 10 != 10. * u.m
+    assert np.int64(10) != 10 * u.m
+    assert 10 * u.m != np.int64(10)
+
+
+def test_quantity_pickelability():
+    """
+    Testing pickleability of quantity
+    """
+
+    q1 = np.arange(10) * u.m
+
+    q2 = pickle.loads(pickle.dumps(q1))
+
+    assert np.all(q1.value == q2.value)
+    assert q1.unit.is_equivalent(q2.unit)
+    assert q1.unit == q2.unit
+
+
+def test_quantity_from_string():
+    with pytest.raises(TypeError):
+        q = u.Quantity(u.m * "5")
+        # the reverse should also fail once #1408 is in
+
+    with pytest.raises(TypeError):
+        q = u.Quantity('5', u.m)
+
+    with pytest.raises(TypeError):
+        q = u.Quantity(['5'], u.m)
+
+    with pytest.raises(TypeError):
+        q = u.Quantity(np.array(['5']), u.m)
+
+
+def test_unsupported():
+    q1 = np.arange(10) * u.m
+
+    with pytest.raises(TypeError):
+        q2 = np.bitwise_and(q1, q1)
+
+
+def test_unit_identity():
+    q = 1.0 * u.hour
+    assert q.unit is u.hour
diff --git a/astropy/units/tests/test_quantity_array_methods.py b/astropy/units/tests/test_quantity_array_methods.py
new file mode 100644
index 0000000..7ff7c48
--- /dev/null
+++ b/astropy/units/tests/test_quantity_array_methods.py
@@ -0,0 +1,421 @@
+# The purpose of these tests are to ensure that calling quantities using
+# array methods returns quantities with the right units, or raises exceptions.
+
+import numpy as np
+from numpy.testing.utils import assert_allclose
+
+from ... import units as u
+from ...tests.helper import pytest
+
+NUMPY_LT_1P7 = [int(x) for x in np.__version__.split('.')[:2]] < [1, 7]
+
+
+class TestQuantityArrayCopy(object):
+    """
+    Test whether arrays are properly copied/used in place
+    """
+
+    def test_copy_on_creation(self):
+        v = np.arange(1000.)
+        q_nocopy = u.Quantity(v, "km/s", copy=False)
+        q_copy = u.Quantity(v, "km/s", copy=True)
+        v[0] = -1.
+        assert q_nocopy[0].value == v[0]
+        assert q_copy[0].value != v[0]
+
+    def test_to_copies(self):
+        q = u.Quantity(np.arange(1.,100.), "km/s")
+        q2 = q.to(u.m/u.s)
+        assert np.all(q.value != q2.value)
+        q3 = q.to(u.km/u.s)
+        assert np.all(q.value == q3.value)
+        q[0] = -1.*u.km/u.s
+        assert q[0].value != q3[0].value
+
+    def test_si_copies(self):
+        q = u.Quantity(np.arange(100.), "m/s")
+        q2 = q.si
+        assert np.all(q.value == q2.value)
+        q[0] = -1.*u.m/u.s
+        assert q[0].value != q2[0].value
+
+    def test_getitem_is_view(self):
+        """Check that [keys] work, and that, like ndarray, it returns
+        a view, so that changing one changes the other.
+
+        Also test that one can add axes (closes #1422)
+        """
+        q = u.Quantity(np.arange(100.), "m/s")
+        q_sel = q[10:20]
+        q_sel[0] = -1.*u.m/u.s
+        assert q_sel[0] == q[10]
+        # also check that getitem can do new axes
+        q2 = q[:, np.newaxis]
+        q2[10,0] = -9*u.m/u.s
+        assert np.all(q2.flatten() == q)
+
+
+class TestQuantityStatsFuncs(object):
+    """
+    Test statistical functions
+    """
+
+    def test_mean(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.m
+        assert np.mean(q1) == 3.6 * u.m
+
+    def test_mean_inplace(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.m
+        qi = 1.5 * u.s
+        np.mean(q1, out=qi)
+        assert qi == 3.6 * u.m
+
+    def test_std(self):
+        q1 = np.array([1., 2.]) * u.m
+        assert np.std(q1) == 0.5 * u.m
+
+    def test_std_inplace(self):
+
+        # can't use decorator since test causes a segfault in Numpy < 1.7, and
+        # py.test will run the test anyway to see if it works
+        pytest.xfail()
+
+        q1 = np.array([1., 2.]) * u.m
+        qi = 1.5 * u.s
+        np.std(q1, out=qi)
+        assert qi == 0.5 * u.m
+
+    def test_var(self):
+        q1 = np.array([1., 2.]) * u.m
+        assert np.var(q1) == 0.25 * u.m ** 2
+
+    def test_var_inplace(self):
+
+        # can't use decorator since test causes a segfault in Numpy < 1.7, and
+        # py.test will run the test anyway to see if it works
+        if NUMPY_LT_1P7:
+            pytest.xfail()
+
+        q1 = np.array([1., 2.]) * u.m
+        qi = 1.5 * u.s
+        np.var(q1, out=qi)
+        assert qi == 0.25 * u.m ** 2
+
+    def test_median(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.m
+        assert np.median(q1) == 4. * u.m
+
+    def test_median_inplace(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.m
+        qi = 1.5 * u.s
+        np.median(q1, out=qi)
+        assert qi == 4 * u.m
+
+    def test_min(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.m
+        assert np.min(q1) == 1. * u.m
+
+    def test_min_inplace(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.m
+        qi = 1.5 * u.s
+        np.min(q1, out=qi)
+        assert qi == 1. * u.m
+
+    def test_argmin(self):
+        q1 = np.array([6., 2., 4., 5., 6.]) * u.m
+        assert np.argmin(q1) == 1
+
+    def test_max(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.m
+        assert np.max(q1) == 6. * u.m
+
+    def test_max_inplace(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.m
+        qi = 1.5 * u.s
+        np.max(q1, out=qi)
+        assert qi == 6. * u.m
+
+    def test_argmax(self):
+        q1 = np.array([5., 2., 4., 5., 6.]) * u.m
+        assert np.argmax(q1) == 4
+
+    def test_clip(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.km / u.m
+        c1 = q1.clip(1500, 5.5 * u.Mm / u.km)
+        assert np.all(c1 == np.array([1.5, 2., 4., 5., 5.5]) * u.km / u.m)
+
+    def test_clip_inplace(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.km / u.m
+        c1 = q1.clip(1500, 5.5 * u.Mm / u.km, out=q1)
+        assert np.all(q1 == np.array([1.5, 2., 4., 5., 5.5]) * u.km / u.m)
+        c1[0] = 10 * u.Mm/u.mm
+        assert np.all(c1.value == q1.value)
+
+    def test_conj(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.km / u.m
+        assert np.all(q1.conj() == q1)
+
+    def test_ptp(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.m
+        assert np.ptp(q1) == 5. * u.m
+
+    @pytest.mark.xfail
+    def test_ptp_inplace(self):
+        q1 = np.array([1., 2., 4., 5., 6.]) * u.m
+        qi = 1.5 * u.s
+        np.ptp(q1, out=qi)
+        assert qi == 5. * u.m
+
+    def test_round(self):
+        q1 = np.array([1.2, 2.2, 3.2]) * u.kg
+        assert np.all(np.round(q1) == np.array([1, 2, 3]) * u.kg)
+
+    def test_sum(self):
+
+        q1 = np.array([1., 2., 6.]) * u.m
+        assert np.all(q1.sum() == 9. * u.m)
+        assert np.all(np.sum(q1) == 9. * u.m)
+
+        q2 = np.array([[4., 5., 9.], [1., 1., 1.]]) * u.s
+        assert np.all(q2.sum(0) == np.array([5., 6., 10.]) * u.s)
+        assert np.all(np.sum(q2, 0) == np.array([5., 6., 10.]) * u.s)
+
+    def test_sum_inplace(self):
+        q1 = np.array([1., 2., 6.]) * u.m
+        qi = 1.5 * u.s
+        np.sum(q1, out=qi)
+        assert qi == 9. * u.m
+
+    def test_cumsum(self):
+
+        q1 = np.array([1, 2, 6]) * u.m
+        assert np.all(q1.cumsum() == np.array([1, 3, 9]) * u.m)
+        assert np.all(np.cumsum(q1) == np.array([1, 3, 9]) * u.m)
+
+        q2 = np.array([4, 5, 9]) * u.s
+        assert np.all(q2.cumsum() == np.array([4, 9, 18]) * u.s)
+        assert np.all(np.cumsum(q2) == np.array([4, 9, 18]) * u.s)
+
+    def test_cumsum_inplace(self):
+        q1 = np.array([1, 2, 6]) * u.m
+        qi = np.ones(3) * u.s
+        np.cumsum(q1, out=qi)
+        assert np.all(qi == np.array([1, 3, 9]) * u.m)
+        q2 = q1
+        q1.cumsum(out=q1)
+        assert np.all(q2 == qi)
+
+    def test_nansum(self):
+
+        q1 = np.array([1., 2., np.nan]) * u.m
+        assert np.all(q1.nansum() == 3. * u.m)
+        assert np.all(np.nansum(q1) == 3. * u.m)
+
+        q2 = np.array([[np.nan, 5., 9.], [1., np.nan, 1.]]) * u.s
+        assert np.all(q2.nansum(0) == np.array([1., 5., 10.]) * u.s)
+        assert np.all(np.nansum(q2, 0) == np.array([1., 5., 10.]) * u.s)
+
+    def test_prod(self):
+
+        q1 = np.array([1, 2, 6]) * u.m
+        with pytest.raises(ValueError) as exc:
+            q1.prod()
+        assert 'cannot use prod' in exc.value.args[0]
+
+        with pytest.raises(ValueError) as exc:
+            np.prod(q1)
+        assert 'cannot use prod' in exc.value.args[0]
+
+        q2 = np.array([3., 4., 5.]) * u.Unit(1)
+        assert q2.prod() == 60. * u.Unit(1)
+        assert np.prod(q2) == 60. * u.Unit(1)
+
+    def test_cumprod(self):
+
+        q1 = np.array([1, 2, 6]) * u.m
+        with pytest.raises(ValueError) as exc:
+            q1.cumprod()
+        assert 'cannot use cumprod' in exc.value.args[0]
+
+        with pytest.raises(ValueError) as exc:
+            np.cumprod(q1)
+        assert 'cannot use cumprod' in exc.value.args[0]
+
+        q2 = np.array([3, 4, 5]) * u.Unit(1)
+        assert np.all(q2.cumprod() == np.array([3, 12, 60]) * u.Unit(1))
+        assert np.all(np.cumprod(q2) == np.array([3, 12, 60]) * u.Unit(1))
+
+    def test_diff(self):
+
+        q1 = np.array([1., 2., 4., 10.]) * u.m
+        assert np.all(q1.diff() == np.array([1., 2., 6.]) * u.m)
+        assert np.all(np.diff(q1) == np.array([1., 2., 6.]) * u.m)
+
+    def test_ediff1d(self):
+
+        q1 = np.array([1., 2., 4., 10.]) * u.m
+        assert np.all(q1.ediff1d() == np.array([1., 2., 6.]) * u.m)
+        assert np.all(np.ediff1d(q1) == np.array([1., 2., 6.]) * u.m)
+
+    @pytest.mark.xfail
+    def test_dot_func(self):
+
+        q1 = np.array([1., 2., 4., 10.]) * u.m
+        q2 = np.array([3., 4., 5., 6.]) * u.s
+        q3 = np.dot(q1, q2)
+        assert q3.value == np.dot(q1.value, q2.value)
+        assert q3.unit == u.m * u.s
+
+    def test_dot_meth(self):
+
+        q1 = np.array([1., 2., 4., 10.]) * u.m
+        q2 = np.array([3., 4., 5., 6.]) * u.s
+        q3 = q1.dot(q2)
+        assert q3.value == np.dot(q1.value, q2.value)
+        assert q3.unit == u.m * u.s
+
+    @pytest.mark.xfail
+    def test_trace_func(self):
+
+        q = np.array([[1.,2.],[3.,4.]]) * u.m
+        assert np.trace(q) == 5. * u.m
+
+    def test_trace_meth(self):
+
+        q1 = np.array([[1.,2.],[3.,4.]]) * u.m
+        assert q1.trace() == 5. * u.m
+
+        cont = u.Quantity(4., u.s)
+
+        q2 = np.array([[3.,4.],[5.,6.]]) * u.m
+        q2.trace(out=cont)
+        assert cont == 9. * u.m
+
+    def test_clip_func(self):
+
+        q = np.arange(10) * u.m
+        assert np.all(np.clip(q, 3 * u.m, 6 * u.m) == np.array([3., 3.,3.,3.,4.,5.,6.,6.,6.,6.]) * u.m)
+
+    def test_clip_meth(self):
+
+        expected = np.array([3.,3.,3.,3.,4.,5.,6.,6.,6.,6.]) * u.m
+
+        q1 = np.arange(10) * u.m
+        q3 = q1.clip(3 * u.m, 6 * u.m)
+        assert np.all(q1.clip(3 * u.m, 6 * u.m) == expected)
+
+        cont = np.zeros(10) * u.s
+
+        q1.clip(3 * u.m, 6 * u.m, out=cont)
+
+        assert np.all(cont == expected)
+
+
+class TestArrayConversion(object):
+    """
+    Test array conversion methods
+    """
+
+    def test_item(self):
+        q1 = np.array([1, 2, 3]) * u.m / u.km
+        assert q1.item(1) == 2 * q1.unit
+        q1.itemset(1, 1)
+        assert q1.item(1) == 1000 * u.m / u.km
+        q1.itemset(1, 100 * u.cm / u.km)
+        assert q1.item(1) == 1 * u.m / u.km
+        with pytest.raises(TypeError):
+            q1.itemset(1, 1.5 * u.m / u.km)
+        with pytest.raises(ValueError):
+            q1.itemset()
+
+        q1[1] = 1
+        assert q1[1] == 1000 * u.m / u.km
+        q1[1] = 100 * u.cm / u.km
+        assert q1[1] == 1 * u.m / u.km
+        with pytest.raises(TypeError):
+            q1[1] = 1.5 * u.m / u.km
+
+        q1 = np.array([1, 2, 3]) * u.m / u.km
+        assert all(q1.take((0, 2)) == np.array([1, 3]) * u.m / u.km)
+        q1.put((1, 2), (3, 4))
+        assert np.all(q1.take((1, 2)) == np.array([3000, 4000]) * q1.unit)
+        q1.put(0, 500 * u.cm / u.km)
+        assert q1.item(0) == 5 * u.m / u.km
+
+    def test_slice(self):
+        q2 = np.array([[1, 2, 3], [4, 5, 6]]) * u.km / u.m
+        q1 = q2.copy()
+        q2[0, 0] = 10000
+        assert q2.unit == q1.unit
+        assert q2[0, 0].value == 10
+        q2[0] = 9 * u.Mm / u.km
+        assert all(q2.flatten()[:3].value == np.array([9, 9, 9]))
+        q2[0, :-1] = 8000
+        assert all(q2.flatten()[:3].value == np.array([8, 8, 9]))
+        with pytest.raises(u.UnitsError):
+            q2[1, 1] = 10 * u.s
+        with pytest.raises(TypeError):
+            q2[0, 1] = 1.5 * u.km / u.m
+
+    def test_fill(self):
+        q1 = np.array([1, 2, 3]) * u.m / u.km
+        q1.fill(2)
+        assert np.all(q1 == 2000 * u.m / u.km)
+
+    def test_repeat_compress_diagonal(self):
+        q1 = np.array([1, 2, 3]) * u.m / u.km
+        q2 = q1.repeat(2)
+        assert q2.unit == q1.unit
+        assert all(q2.value == q1.value.repeat(2))
+        q2.sort()
+        assert q2.unit == q1.unit
+        q2 = q1.compress(np.array([True, True, False, False]))
+        assert q2.unit == q1.unit
+        assert all(q2.value == q1.value.compress(np.array([True, True,
+                                                           False, False])))
+        q1 = np.array([[1, 2], [3, 4]]) * u.m / u.km
+        q2 = q1.diagonal()
+        assert q2.unit == q1.unit
+        assert all(q2.value == q1.value.diagonal())
+
+    def test_byte_type_view_field_changes(self):
+        q1 = np.array([1, 2, 3], dtype=np.int64) * u.m / u.km
+        q2 = q1.byteswap()
+        assert q2.unit == q1.unit
+        assert all(q2.value == q1.value.byteswap())
+        q2 = q1.astype(np.float64)
+        assert all(q2 == q1)
+        assert q2.dtype == np.float64
+        q2 = q1.view(np.ndarray)
+        assert not hasattr(q2, 'unit')
+        q2a = q1.getfield(np.int32, offset=0)
+        q2b = q1.byteswap().getfield(np.int32, offset=4)
+        assert q2a.unit == q1.unit
+        assert all(q2b.byteswap() == q2a)
+
+    def test_sort(self):
+        q1 = np.array([1., 5., 2., 4.]) * u.km / u.m
+        i = q1.argsort()
+        assert not hasattr(i, 'unit')
+        q1.sort()
+        i = q1.searchsorted([1500, 2500])
+        assert not hasattr(i, 'unit')
+        assert all(i == q1.to(
+            u.dimensionless_unscaled).value.searchsorted([1500, 2500]))
+
+    def test_not_implemented(self):
+        q1 = np.array([1, 2, 3]) * u.m / u.km
+
+        with pytest.raises(NotImplementedError):
+            q1.choose([0, 0, 1])
+
+        with pytest.raises(NotImplementedError):
+            q1.list()
+        with pytest.raises(NotImplementedError):
+            q1.tostring()
+        with pytest.raises(NotImplementedError):
+            q1.tofile(0)
+        with pytest.raises(NotImplementedError):
+            q1.dump('a.a')
+        with pytest.raises(NotImplementedError):
+            q1.dumps()
diff --git a/astropy/units/tests/test_quantity_non_ufuncs.py b/astropy/units/tests/test_quantity_non_ufuncs.py
new file mode 100644
index 0000000..d1bdd97
--- /dev/null
+++ b/astropy/units/tests/test_quantity_non_ufuncs.py
@@ -0,0 +1,25 @@
+import numpy as np
+from numpy.testing.utils import assert_allclose
+
+from ... import units as u
+from ...tests.helper import pytest
+
+
+class TestQuantityLinAlgFuncs(object):
+    """
+    Test linear algebra functions
+    """
+
+    @pytest.mark.xfail
+    def test_outer(self):
+        q1 = np.array([1, 2, 3]) * u.m
+        q2 = np.array([1, 2]) / u.s
+        o = np.outer(q1, q2)
+        assert np.all(o == np.array([[1, 2], [2, 4], [3, 6]]) * u.m / u.s)
+
+    @pytest.mark.xfail
+    def test_inner(self):
+        q1 = np.array([1, 2, 3]) * u.m
+        q2 = np.array([4, 5, 6]) / u.s
+        o = np.inner(q1, q2)
+        assert o == 32 * u.m / u.s
diff --git a/astropy/units/tests/test_quantity_ufuncs.py b/astropy/units/tests/test_quantity_ufuncs.py
new file mode 100644
index 0000000..d1da573
--- /dev/null
+++ b/astropy/units/tests/test_quantity_ufuncs.py
@@ -0,0 +1,587 @@
+# The purpose of these tests are to ensure that calling ufuncs with quantities
+# returns quantities with the right units, or raises exceptions.
+
+import numpy as np
+from numpy.testing.utils import assert_allclose
+
+from ... import units as u
+from ...tests.helper import pytest, raises
+
+NUMPY_LT_1P6 = [int(x) for x in np.__version__.split('.')[:2]] < [1, 6]
+
+
+class TestUfuncCoverage(object):
+    """Test that we cover all ufunc's"""
+    def test_coverage(self):
+        all_np_ufuncs = set([ufunc for ufunc in np.core.umath.__dict__.values()
+                             if type(ufunc) == np.ufunc])
+
+        from .. import quantity_helper as qh
+
+        all_q_ufuncs = (qh.UNSUPPORTED_UFUNCS |
+                        set(qh.UFUNC_HELPERS.keys()))
+
+        assert all_np_ufuncs - all_q_ufuncs == set([])
+        assert all_q_ufuncs - all_np_ufuncs == set([])
+
+
+class TestQuantityTrigonometricFuncs(object):
+    """
+    Test trigonometric functions
+    """
+
+    def test_sin_scalar(self):
+        q = np.sin(30. * u.degree)
+        assert q.unit == u.dimensionless_unscaled
+        assert_allclose(q.value, 0.5)
+
+    def test_sin_array(self):
+        q = np.sin(np.array([0., np.pi / 4., np.pi / 2.]) * u.radian)
+        assert q.unit == u.dimensionless_unscaled
+        assert_allclose(q.value,
+                        np.array([0., 1. / np.sqrt(2.), 1.]), atol=1.e-15)
+
+    def test_arcsin_scalar(self):
+        q1 = 30. * u.degree
+        q2 = np.arcsin(np.sin(q1)).to(q1.unit)
+        assert_allclose(q1.value, q2.value)
+
+    def test_arcsin_array(self):
+        q1 = np.array([0., np.pi / 4., np.pi / 2.]) * u.radian
+        q2 = np.arcsin(np.sin(q1)).to(q1.unit)
+        assert_allclose(q1.value, q2.value)
+
+    def test_sin_invalid_units(self):
+        with pytest.raises(TypeError) as exc:
+            np.sin(3. * u.m)
+        assert exc.value.args[0] == ("Can only apply 'sin' function "
+                                     "to quantities with angle units")
+
+    def test_arcsin_invalid_units(self):
+        with pytest.raises(TypeError) as exc:
+            np.arcsin(3. * u.m)
+        assert exc.value.args[0] == ("Can only apply 'arcsin' function to "
+                                     "dimensionless quantities")
+
+    def test_cos_scalar(self):
+        q = np.cos(np.pi / 3. * u.radian)
+        assert q.unit == u.dimensionless_unscaled
+        assert_allclose(q.value, 0.5)
+
+    def test_cos_array(self):
+        q = np.cos(np.array([0., np.pi / 4., np.pi / 2.]) * u.radian)
+        assert q.unit == u.dimensionless_unscaled
+        assert_allclose(q.value,
+                        np.array([1., 1. / np.sqrt(2.), 0.]), atol=1.e-15)
+
+    def test_arccos_scalar(self):
+        q1 = np.pi / 3. * u.radian
+        q2 = np.arccos(np.cos(q1)).to(q1.unit)
+        assert_allclose(q1.value, q2.value)
+
+    def test_arccos_array(self):
+        q1 = np.array([0., np.pi / 4., np.pi / 2.]) * u.radian
+        q2 = np.arccos(np.cos(q1)).to(q1.unit)
+        assert_allclose(q1.value, q2.value)
+
+    def test_cos_invalid_units(self):
+        with pytest.raises(TypeError) as exc:
+            np.cos(3. * u.s)
+        assert exc.value.args[0] == ("Can only apply 'cos' function "
+                                     "to quantities with angle units")
+
+    def test_arccos_invalid_units(self):
+        with pytest.raises(TypeError) as exc:
+            np.arccos(3. * u.s)
+        assert exc.value.args[0] == ("Can only apply 'arccos' function to "
+                                     "dimensionless quantities")
+
+    def test_tan_scalar(self):
+        q = np.tan(np.pi / 3. * u.radian)
+        assert q.unit == u.dimensionless_unscaled
+        assert_allclose(q.value, np.sqrt(3.))
+
+    def test_tan_array(self):
+        q = np.tan(np.array([0., 45., 135., 180.]) * u.degree)
+        assert q.unit == u.dimensionless_unscaled
+        assert_allclose(q.value,
+                        np.array([0., 1., -1., 0.]), atol=1.e-15)
+
+    def test_arctan_scalar(self):
+        q = np.pi / 3. * u.radian
+        assert np.arctan(np.tan(q))
+
+    def test_arctan_array(self):
+        q = np.array([10., 30., 70., 80.]) * u.degree
+        assert_allclose(np.arctan(np.tan(q)).to(q.unit).value, q.value)
+
+    def test_tan_invalid_units(self):
+        with pytest.raises(TypeError) as exc:
+            np.tan(np.array([1, 2, 3]) * u.N)
+        assert exc.value.args[0] == ("Can only apply 'tan' function "
+                                     "to quantities with angle units")
+
+    def test_arctan_invalid_units(self):
+        with pytest.raises(TypeError) as exc:
+            np.arctan(np.array([1, 2, 3]) * u.N)
+        assert exc.value.args[0] == ("Can only apply 'arctan' function to "
+                                     "dimensionless quantities")
+
+    def test_arctan2_valid(self):
+        q1 = np.array([10., 30., 70., 80.]) * u.m
+        q2 = 2.0 * u.km
+        assert np.arctan2(q1, q2).unit == u.radian
+        assert_allclose(np.arctan2(q1, q2).value,
+                        np.arctan2(q1.value, q2.to(q1.unit).value))
+        q3 = q1 / q2
+        q4 = 1.
+        at2 = np.arctan2(q3, q4)
+        assert_allclose(at2, np.arctan2(q3.to(1).value, q4))
+
+    def test_arctan2_invalid(self):
+        with pytest.raises(u.UnitsError) as exc:
+            np.arctan2(np.array([1, 2, 3]) * u.N, 1. * u.s)
+        assert "compatible dimensions" in exc.value.args[0]
+        with pytest.raises(u.UnitsError) as exc:
+            np.arctan2(np.array([1, 2, 3]) * u.N, 1.)
+        assert "dimensionless quantities when other arg" in exc.value.args[0]
+
+    def test_radians(self):
+
+        q1 = np.deg2rad(180. * u.degree)
+        assert_allclose(q1.value, np.pi)
+        assert q1.unit == u.radian
+
+        q2 = np.radians(180. * u.degree)
+        assert_allclose(q2.value, np.pi)
+        assert q2.unit == u.radian
+
+        # the following doesn't make much sense in terms of the name of the
+        # routine, but we check it gives the correct result.
+        q3 = np.deg2rad(3. * u.radian)
+        assert_allclose(q3.value, 3.)
+        assert q3.unit == u.radian
+
+        q4 = np.radians(3. * u.radian)
+        assert_allclose(q4.value, 3.)
+        assert q4.unit == u.radian
+
+        with pytest.raises(TypeError):
+            np.deg2rad(3. * u.m)
+
+        with pytest.raises(TypeError):
+            np.radians(3. * u.m)
+
+    def test_degrees(self):
+
+        # the following doesn't make much sense in terms of the name of the
+        # routine, but we check it gives the correct result.
+        q1 = np.rad2deg(60. * u.degree)
+        assert_allclose(q1.value, 60.)
+        assert q1.unit == u.degree
+
+        q2 = np.degrees(60. * u.degree)
+        assert_allclose(q2.value, 60.)
+        assert q2.unit == u.degree
+
+        q3 = np.rad2deg(np.pi * u.radian)
+        assert_allclose(q3.value, 180.)
+        assert q3.unit == u.degree
+
+        q4 = np.degrees(np.pi * u.radian)
+        assert_allclose(q4.value, 180.)
+        assert q4.unit == u.degree
+
+        with pytest.raises(TypeError):
+            np.rad2deg(3. * u.m)
+
+        with pytest.raises(TypeError):
+            np.degrees(3. * u.m)
+
+
+class TestQuantityMathFuncs(object):
+    """
+    Test other mathematical functions
+    """
+
+    def test_multiply_scalar(self):
+        assert np.multiply(4. * u.m, 2. / u.s) == 8. * u.m / u.s
+        assert np.multiply(4. * u.m, 2.) == 8. * u.m
+        assert np.multiply(4., 2. / u.s) == 8. / u.s
+
+    def test_multiply_array(self):
+        assert np.all(np.multiply(np.arange(3.) * u.m, 2. / u.s) ==
+                      np.arange(0, 6., 2.) * u.m / u.s)
+
+    @pytest.mark.parametrize('function', (np.divide, np.true_divide,
+                                          np.floor_divide))
+    def test_divide_scalar(self, function):
+        assert function(4. * u.m, 2. * u.s) == function(4., 2.) * u.m / u.s
+        assert function(4. * u.m, 2.) == function(4., 2.) * u.m
+        assert function(4., 2. * u.s) == function(4., 2.) / u.s
+
+    @pytest.mark.parametrize('function', (np.divide, np.true_divide,
+                                          np.floor_divide))
+    def test_divide_array(self, function):
+        assert np.all(function(np.arange(3.) * u.m, 2. * u.s) ==
+                      function(np.arange(3.), 2.) * u.m / u.s)
+
+    def test_divmod(self):
+        inch = u.Unit(0.0254 * u.m)
+        quotient, remainder = divmod(
+            np.array([1., 2., 3.]) * u.m,
+            np.array([3., 4., 5.]) * inch)
+        assert_allclose(quotient.value, [13., 19., 23.])
+        assert quotient.unit == u.dimensionless_unscaled
+        assert_allclose(remainder.value, [0.0094, 0.0696, 0.079])
+        assert remainder.unit == u.m
+
+        quotient, remainder = divmod(
+            np.array([1., 2., 3.]) * u.m, u.km)
+        assert_allclose(quotient.value, [1., 2., 3.])
+        assert quotient.unit == u.m / u.km
+        assert remainder.value == 0.
+        assert remainder.unit == u.dimensionless_unscaled
+
+    def test_sqrt_scalar(self):
+        assert np.sqrt(4. * u.m) == 2. * u.m ** 0.5
+
+    def test_sqrt_array(self):
+        assert np.all(np.sqrt(np.array([1., 4., 9.]) * u.m)
+                      == np.array([1., 2., 3.]) * u.m ** 0.5)
+
+    def test_square_scalar(self):
+        assert np.square(4. * u.m) == 16. * u.m ** 2
+
+    def test_square_array(self):
+        assert np.all(np.square(np.array([1., 2., 3.]) * u.m)
+                      == np.array([1., 4., 9.]) * u.m ** 2)
+
+    def test_reciprocal_scalar(self):
+        assert np.reciprocal(4. * u.m) == 0.25 / u.m
+
+    def test_reciprocal_array(self):
+        assert np.all(np.reciprocal(np.array([1., 2., 4.]) * u.m)
+                      == np.array([1., 0.5, 0.25]) / u.m)
+
+    def test_power_scalar(self):
+        assert np.power(4. * u.m, 2.) == 16. * u.m ** 2
+        assert np.power(4., 200. * u.cm / u.m) == \
+            u.Quantity(16., u.dimensionless_unscaled)
+        # regression check on #1696
+        assert np.power(4. * u.m, 0.) == 1. * u.dimensionless_unscaled
+
+    def test_power_array(self):
+        assert np.all(np.power(np.array([1., 2., 3.]) * u.m, 3.)
+                      == np.array([1., 8., 27.]) * u.m ** 3)
+        # regression check on #1696
+        assert np.all(np.power(np.arange(4.) * u.m, 0.) ==
+                      1. * u.dimensionless_unscaled)
+
+    @raises(ValueError)
+    def test_power_array_array(self):
+        np.power(4. * u.m, [2., 4.])
+
+    @raises(ValueError)
+    def test_power_array_array2(self):
+        np.power([2., 4.] * u.m, [2., 4.])
+
+    def test_power_invalid(self):
+        with pytest.raises(TypeError) as exc:
+            np.power(3., 4. * u.m)
+        assert "raise something to a dimensionless" in exc.value.args[0]
+
+    def test_copysign_scalar(self):
+        assert np.copysign(3 * u.m, 1.) == 3. * u.m
+        assert np.copysign(3 * u.m, 1. * u.s) == 3. * u.m
+        assert np.copysign(3 * u.m, -1.) == -3. * u.m
+        assert np.copysign(3 * u.m, -1. * u.s) == -3. * u.m
+
+    def test_copysign_array(self):
+        assert np.all(np.copysign(np.array([1., 2., 3.]) * u.s, -1.) == -np.array([1., 2., 3.]) * u.s)
+        assert np.all(np.copysign(np.array([1., 2., 3.]) * u.s, -1. * u.m) == -np.array([1., 2., 3.]) * u.s)
+        assert np.all(np.copysign(np.array([1., 2., 3.]) * u.s, np.array([-2.,2.,-4.]) * u.m) == np.array([-1., 2., -3.]) * u.s)
+
+        q = np.copysign(np.array([1., 2., 3.]), -3 * u.m)
+        assert np.all(q == np.array([-1., -2., -3.]))
+        assert not isinstance(q, u.Quantity)
+
+
+    def test_ldexp_scalar(self):
+        assert np.ldexp(4. * u.m, 2) == 16. * u.m
+
+    def test_ldexp_array(self):
+        assert np.all(np.ldexp(np.array([1., 2., 3.]) * u.m, [3, 2, 1])
+                      == np.array([8., 8., 6.]) * u.m)
+
+    def test_ldexp_invalid(self):
+        with pytest.raises(TypeError) as exc:
+            np.ldexp(3. * u.m, 4.)
+        # built-in TypeError, so can't check content of exception
+        with pytest.raises(TypeError) as exc:
+            np.ldexp(3., 4 * u.m)
+        assert "Cannot use ldexp" in exc.value.args[0]
+
+    @pytest.mark.parametrize('function', (np.exp, np.expm1, np.exp2,
+                                          np.log, np.log2, np.log10, np.log1p))
+    def test_exp_scalar(self, function):
+        q = function(3. * u.m / (6. * u.m))
+        assert q.unit == u.dimensionless_unscaled
+        assert q.value == function(0.5)
+
+    @pytest.mark.parametrize('function', (np.exp, np.expm1, np.exp2,
+                                          np.log, np.log2, np.log10, np.log1p))
+    def test_exp_array(self, function):
+        q = function(np.array([2., 3., 6.]) * u.m / (6. * u.m))
+        assert q.unit == u.dimensionless_unscaled
+        assert np.all(q.value
+                      == function(np.array([1. / 3., 1. / 2., 1.])))
+        # should also work on quantities that can be made dimensionless
+        q2 = function(np.array([2., 3., 6.]) * u.m / (6. * u.cm))
+        assert q2.unit == u.dimensionless_unscaled
+        assert_allclose(q2.value,
+                        function(np.array([100. / 3., 100. / 2., 100.])))
+
+    @pytest.mark.parametrize('function', (np.exp, np.expm1, np.exp2,
+                                          np.log, np.log2, np.log10, np.log1p))
+    def test_exp_invalid_units(self, function):
+        # Can't use exp() with non-dimensionless quantities
+        with pytest.raises(TypeError) as exc:
+            function(3. * u.m / u.s)
+        assert exc.value.args[0] == ("Can only apply '{0}' function to "
+                                     "dimensionless quantities"
+                                     .format(function.__name__))
+
+    def test_modf_scalar(self):
+        q = np.modf(9. * u.m / (600. * u.cm))
+        assert q == (0.5 * u.dimensionless_unscaled,
+                     1. * u.dimensionless_unscaled)
+
+    def test_modf_array(self):
+        v = np.arange(10.) * u.m / (500. * u.cm)
+        q = np.modf(v)
+        n = np.modf(v.to(1).value)
+        assert q[0].unit == u.dimensionless_unscaled
+        assert q[1].unit == u.dimensionless_unscaled
+        assert all(q[0].value == n[0])
+        assert all(q[1].value == n[1])
+
+    def test_frexp_scalar(self):
+        q = np.frexp(3. * u.m / (6. * u.m))
+        assert q == (np.array(0.5), np.array(0.0))
+
+    def test_frexp_array(self):
+        q = np.frexp(np.array([2., 3., 6.]) * u.m / (6. * u.m))
+        assert all((_q0, _q1) == np.frexp(_d) for _q0, _q1, _d
+                   in zip(q[0], q[1], [1. / 3., 1. / 2., 1.]))
+
+    def test_frexp_invalid_units(self):
+        # Can't use prod() with non-dimensionless quantities
+        with pytest.raises(TypeError) as exc:
+            np.frexp(3. * u.m / u.s)
+        assert exc.value.args[0] == ("Can only apply 'frexp' function to "
+                                     "unscaled dimensionless quantities")
+
+        # also does not work on quantities that can be made dimensionless
+        with pytest.raises(TypeError) as exc:
+            np.frexp(np.array([2., 3., 6.]) * u.m / (6. * u.cm))
+        assert exc.value.args[0] == ("Can only apply 'frexp' function to "
+                                     "unscaled dimensionless quantities")
+
+    @pytest.mark.parametrize('function', (np.logaddexp, np.logaddexp2))
+    def test_dimensionless_twoarg_array(self, function):
+        q = function(np.array([2., 3., 6.]) * u.m / (6. * u.cm), 1.)
+        assert q.unit == u.dimensionless_unscaled
+        assert_allclose(q.value,
+                        function(np.array([100. / 3., 100. / 2., 100.]), 1.))
+
+    @pytest.mark.parametrize('function', (np.logaddexp, np.logaddexp2))
+    def test_dimensionless_twoarg_invalid_units(self, function):
+
+        with pytest.raises(TypeError) as exc:
+            function(1. * u.km / u.s, 3. * u.m / u.s)
+        assert exc.value.args[0] == ("Can only apply '{0}' function to "
+                                     "dimensionless quantities"
+                                     .format(function.__name__))
+
+
+class TestInvariantUfuncs(object):
+
+    @pytest.mark.parametrize(('ufunc'), [np.absolute, np.fabs,
+                                         np.conj, np.conjugate,
+                                         np.negative, np.spacing, np.rint,
+                                         np.floor, np.ceil])
+    def test_invariant_scalar(self, ufunc):
+
+        q_i = 4.7 * u.m
+        q_o = ufunc(q_i)
+        assert isinstance(q_o, u.Quantity)
+        assert q_o.unit == q_i.unit
+        assert q_o.value == ufunc(q_i.value)
+
+    @pytest.mark.parametrize(('ufunc'), [np.absolute, np.conjugate,
+                                         np.negative, np.rint,
+                                         np.floor, np.ceil])
+    def test_invariant_array(self, ufunc):
+
+        q_i = np.array([-3.3, 2.1, 10.2]) * u.kg / u.s
+        q_o = ufunc(q_i)
+        assert isinstance(q_o, u.Quantity)
+        assert q_o.unit == q_i.unit
+        assert np.all(q_o.value == ufunc(q_i.value))
+
+    @pytest.mark.parametrize(('ufunc'), [np.add, np.subtract, np.hypot,
+                                         np.maximum, np.minimum, np.nextafter,
+                                         np.remainder, np.mod, np.fmod])
+    def test_invariant_twoarg_scalar(self, ufunc):
+
+        q_i1 = 4.7 * u.m
+        q_i2 = 9.4 * u.km
+        q_o = ufunc(q_i1, q_i2)
+        assert isinstance(q_o, u.Quantity)
+        assert q_o.unit == q_i1.unit
+        assert_allclose(q_o.value, ufunc(q_i1.value, q_i2.to(q_i1.unit).value))
+
+    @pytest.mark.parametrize(('ufunc'), [np.add, np.subtract, np.hypot,
+                                         np.maximum, np.minimum, np.nextafter,
+                                         np.remainder, np.mod, np.fmod])
+    def test_invariant_twoarg_array(self, ufunc):
+
+        q_i1 = np.array([-3.3, 2.1, 10.2]) * u.kg / u.s
+        q_i2 = np.array([10., -5., 1.e6]) * u.g / u.us
+        q_o = ufunc(q_i1, q_i2)
+        assert isinstance(q_o, u.Quantity)
+        assert q_o.unit == q_i1.unit
+        assert_allclose(q_o.value, ufunc(q_i1.value, q_i2.to(q_i1.unit).value))
+
+    @pytest.mark.parametrize(('ufunc'), [np.add, np.subtract, np.hypot,
+                                         np.maximum, np.minimum, np.nextafter,
+                                         np.remainder, np.mod, np.fmod])
+    def test_invariant_twoarg_invalid_units(self, ufunc):
+
+        q_i1 = 4.7 * u.m
+        q_i2 = 9.4 * u.s
+        with pytest.raises(u.UnitsError) as exc:
+            ufunc(q_i1, q_i2)
+        assert "compatible dimensions" in exc.value.args[0]
+
+
+class TestComparisonUfuncs(object):
+
+    @pytest.mark.parametrize(('ufunc'), [np.greater, np.greater_equal,
+                                         np.less, np.less_equal,
+                                         np.not_equal, np.equal])
+    def test_comparison_valid_units(self, ufunc):
+        q_i1 = np.array([-3.3, 2.1, 10.2]) * u.kg / u.s
+        q_i2 = np.array([10., -5., 1.e6]) * u.g / u.Ms
+        q_o = ufunc(q_i1, q_i2)
+        assert not isinstance(q_o, u.Quantity)
+        assert q_o.dtype == np.bool
+        assert np.all(q_o == ufunc(q_i1.value, q_i2.to(q_i1.unit).value))
+        q_o2 = ufunc(q_i1 / q_i2, 2.)
+        assert not isinstance(q_o2, u.Quantity)
+        assert q_o2.dtype == np.bool
+        assert np.all(q_o2 == ufunc((q_i1 / q_i2).to(1).value, 2.))
+        # comparison with 0., inf, nan is OK even for dimensional quantities
+        for arbitrary_unit_value in (0., np.inf, np.nan):
+            ufunc(q_i1, arbitrary_unit_value)
+            ufunc(q_i1, arbitrary_unit_value*np.ones(len(q_i1)))
+        # and just for completeness
+        ufunc(q_i1, np.array([0., np.inf, np.nan]))
+
+    @pytest.mark.parametrize(('ufunc'), [np.greater, np.greater_equal,
+                                         np.less, np.less_equal,
+                                         np.not_equal, np.equal])
+    def test_comparison_invalid_units(self, ufunc):
+        q_i1 = 4.7 * u.m
+        q_i2 = 9.4 * u.s
+        with pytest.raises(u.UnitsError) as exc:
+            ufunc(q_i1, q_i2)
+        assert "compatible dimensions" in exc.value.args[0]
+
+
+class TestInplaceUfuncs(object):
+
+    @pytest.mark.skipif("NUMPY_LT_1P6")
+    @pytest.mark.parametrize(('value'), [1., np.arange(10.)])
+    def test_one_argument_ufunc_inplace(self, value):
+        # without scaling
+        s = value * u.rad
+        check = s
+        np.sin(s, out=s)
+        assert check is s
+        assert check.unit == u.dimensionless_unscaled
+        # with scaling
+        s2 = (value * u.rad).to(u.deg)
+        check2 = s2
+        np.sin(s2, out=s2)
+        assert check2 is s2
+        assert check2.unit == u.dimensionless_unscaled
+        assert_allclose(s.value, s2.value)
+
+    @pytest.mark.parametrize(('value'), [1., np.arange(10.)])
+    def test_one_argument_two_output_ufunc_inplace(self, value):
+        v = 100. * value * u.cm / u.m
+        v_copy = v.copy()
+        tmp = v.copy()
+        check = v
+        np.modf(v, tmp, v)  # cannot use out1,out2 keywords with numpy 1.7
+        assert check is v
+        assert check.unit == u.dimensionless_unscaled
+        v2 = v_copy.to(1)
+        check2 = v2
+        np.modf(v2, tmp, v2)
+        assert check2 is v2
+        assert check2.unit == u.dimensionless_unscaled
+        # can also replace in last position if no scaling is needed
+        v3 = v_copy.to(1)
+        check3 = v3
+        np.modf(v3, v3, tmp)
+        assert check3 is v3
+        assert check3.unit == u.dimensionless_unscaled
+        # but cannot replace input with first output if scaling is needed
+        with pytest.raises(TypeError):
+            np.modf(v_copy, v_copy, tmp)
+
+    @pytest.mark.parametrize(('value'), [1., np.arange(10.)])
+    def test_two_argument_ufunc_inplace_1(self, value):
+        s = value * u.cycle
+        check = s
+        s /= 2.
+        assert check is s
+        assert np.all(check.value == value / 2.)
+        s /= u.s
+        assert check is s
+        assert check.unit == u.cycle / u.s
+        s *= 2. * u.s
+        assert check is s
+        assert np.all(check == value * u.cycle)
+
+    @pytest.mark.skipif("NUMPY_LT_1P6")
+    @pytest.mark.parametrize(('value'), [1., np.arange(10.)])
+    def test_two_argument_ufunc_inplace_2(self, value):
+        s = value * u.cycle
+        check = s
+        np.arctan2(s, s, out=s)
+        assert check is s
+        assert check.unit == u.radian
+        with pytest.raises(u.UnitsError):
+            s += 1. * u.m
+        assert check is s
+        assert check.unit == u.radian
+        np.arctan2(1. * u.deg, s, out=s)
+        assert check is s
+        assert check.unit == u.radian
+        np.add(1. * u.deg, s, out=s)
+        assert check is s
+        assert check.unit == u.deg
+        np.multiply(2. / u.s, s, out=s)
+        assert check is s
+        assert check.unit == u.deg / u.s
+
+    @pytest.mark.skipif("NUMPY_LT_1P6")
+    def test_two_argument_ufunc_inplace_3(self):
+        s = np.array([1., 2., 3.]) * u.dimensionless_unscaled
+        np.arctan2(np.array([1., 2., 3.]), np.array([1., 2., 3.]) * 2., out=s)
+        assert_allclose(s.value, np.arctan2(1., 2.))
+        assert s.unit == u.radian
diff --git a/astropy/units/tests/test_units.py b/astropy/units/tests/test_units.py
index 807ddf1..96d8d82 100644
--- a/astropy/units/tests/test_units.py
+++ b/astropy/units/tests/test_units.py
@@ -1,4 +1,5 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
 """
 Regression tests for the units package
 """
@@ -6,12 +7,12 @@ Regression tests for the units package
 from __future__ import (absolute_import, unicode_literals, division,
                         print_function)
 
-import warnings
 
 import numpy as np
+from numpy.testing.utils import assert_allclose
 
-from ...tests.helper import pytest, raises
-from ...tests.compat import assert_allclose
+from ...extern.six.moves import cPickle as pickle
+from ...tests.helper import pytest, raises, catch_warnings
 from ...utils.compat.fractions import Fraction
 
 from ... import units as u
@@ -21,17 +22,22 @@ def test_getting_started():
     """
     Corresponds to "Getting Started" section in the docs.
     """
-    speed_unit = u.cm / u.s
-    x = speed_unit.to(u.mile / u.hour, 1)
-    assert_allclose(x, 0.02236936292054402)
-    speed_converter = speed_unit.get_converter("mile hour^-1")
-    x = speed_converter([1., 1000., 5000.])
-    assert_allclose(x, [2.23693629e-02, 2.23693629e+01, 1.11846815e+02])
+    from .. import imperial
+    with imperial.enable():
+        speed_unit = u.cm / u.s
+        x = speed_unit.to(imperial.mile / u.hour, 1)
+        assert_allclose(x, 0.02236936292054402)
+        speed_converter = speed_unit.get_converter("mile hour^-1")
+        x = speed_converter([1., 1000., 5000.])
+        assert_allclose(x, [2.23693629e-02, 2.23693629e+01, 1.11846815e+02])
 
 
- at raises(ValueError)
 def test_invalid_power():
-    u.m ** 0.3
+    x = u.m ** (1, 3)
+    assert isinstance(x.powers[0], Fraction)
+
+    x = u.m ** (1, 2)
+    assert isinstance(x.powers[0], float)
 
 
 def test_invalid_compare():
@@ -43,19 +49,12 @@ def test_convert():
 
 
 def test_convert_fail():
-    with pytest.raises(u.UnitsException):
+    with pytest.raises(u.UnitsError):
         u.cm.to(u.s, 1)
-    with pytest.raises(u.UnitsException):
+    with pytest.raises(u.UnitsError):
         (u.cm / u.s).to(u.m, 1)
 
 
-def test_is_equivalent():
-    assert u.m.is_equivalent(u.inch)
-    assert not (u.Hz.is_equivalent(u.J))
-    assert u.Hz.is_equivalent(u.J, u.spectral())
-    assert u.J.is_equivalent(u.Hz, u.spectral())
-
-
 def test_composite():
     assert (u.cm / u.s * u.h).get_converter(u.m)(1) == 36
     assert u.cm * u.cm == u.cm ** 2
@@ -73,92 +72,12 @@ def test_repr():
     assert repr(u.cm) == 'Unit("cm")'
 
 
-def test_spectral():
-    a = u.AA.to(u.Hz, 1, u.spectral())
-    assert_allclose(a, 2.9979245799999995e+18)
-    b = u.Hz.to(u.AA, a, u.spectral())
-    assert_allclose(b, 1)
-
-    a = u.AA.to(u.MHz, 1, u.spectral())
-    assert_allclose(a, 2.9979245799999995e+12)
-    b = u.MHz.to(u.AA, a, u.spectral())
-    assert_allclose(b, 1)
-
-    a = u.m.to(u.Hz, 1, u.spectral())
-    assert_allclose(a, 2.9979245799999995e+8)
-    b = u.Hz.to(u.m, a, u.spectral())
-    assert_allclose(b, 1)
-
-
-def test_spectral2():
-    a = u.nm.to(u.J, 500, u.spectral())
-    assert_allclose(a, 3.972891366538605e-19)
-    b = u.J.to(u.nm, a, u.spectral())
-    assert_allclose(b, 500)
-
-    a = u.AA.to(u.Hz, 1, u.spectral())
-    b = u.Hz.to(u.J, a, u.spectral())
-    c = u.AA.to(u.J, 1, u.spectral())
-    assert_allclose(b, c)
-
-
-def test_spectral3():
-    a = u.nm.to(u.Hz, [1000, 2000], u.spectral())
-    assert_allclose(a, [2.99792458e+14, 1.49896229e+14])
-
-
-def test_spectraldensity():
-
-    a = u.AA.to(u.Jy, 1, u.spectral_density(u.eV, 2.2))
-    assert_allclose(a, 1059416252057.8357, rtol=1e-4)
-
-    b = u.Jy.to(u.AA, a, u.spectral_density(u.eV, 2.2))
-    assert_allclose(b, 1)
-
-
-def test_spectraldensity2():
-    flambda = u.erg / u.angstrom / u.cm ** 2 / u.s
-    fnu = u.erg / u.Hz / u.cm ** 2 / u.s
-
-    a = flambda.to(fnu, 1, u.spectral_density(u.AA, 3500))
-    assert_allclose(a, 4.086160166177361e-12)
-
-
-def test_spectraldensity3():
-
-    # Define F_nu in Jy
-    f_nu = u.Jy
-
-    # Convert to ergs / cm^2 / s / Hz
-    assert_allclose(f_nu.to(u.erg / u.cm ** 2 / u.s / u.Hz, 1.), 1.e-23, 10)
-
-    # Convert to ergs / cm^2 / s at 10 Ghz
-    assert_allclose(f_nu.to(u.erg / u.cm ** 2 / u.s, 1.,
-                    equivalencies=u.spectral_density(u.GHz, 10)), 1.e-13, 10)
-
-    # Convert to ergs / cm^2 / s / micron at 1 Ghz
-    assert_allclose(f_nu.to(u.erg / u.cm ** 2 / u.s / u.micron, 1.,
-                    equivalencies=u.spectral_density(u.Hz, 1.e9)),
-                    3.335640951981521e-20, 10)
-
-    # Define F_lambda in ergs / cm^2 / s / micron
-    f_lambda = u.erg / u.cm ** 2 / u.s / u.micron
-
-    # Convert to Jy at 1 Ghz
-    assert_allclose(f_lambda.to(u.Jy, 1.,
-                    equivalencies=u.spectral_density(u.Hz, 1.e9)),
-                    1. / 3.335640951981521e-20, 10)
-
-    # Convert to ergs / cm^2 / s at 10 microns
-    assert_allclose(f_lambda.to(u.erg / u.cm ** 2 / u.s, 1.,
-                    equivalencies=u.spectral_density(u.micron, 10.)), 10., 10)
-
-
 def test_units_conversion():
     assert_allclose(u.kpc.to(u.Mpc), 0.001)
     assert_allclose(u.Mpc.to(u.kpc), 1000)
     assert_allclose(u.yr.to(u.Myr), 1.e-6)
     assert_allclose(u.AU.to(u.pc), 4.84813681e-6)
+    assert_allclose(u.cycle.to(u.rad), 6.283185307179586)
 
 
 def test_units_manipulation():
@@ -171,11 +90,6 @@ def test_decompose():
     assert u.Ry == u.Ry.decompose()
 
 
-def test_equivalent_units():
-    assert u.pound in u.g.find_equivalent_units()
-    assert u.J in u.Hz.find_equivalent_units(u.spectral())
-
-
 def test_dimensionless_to_si():
     """
     Issue #1150: Test for conversion of dimensionless quantities
@@ -187,6 +101,7 @@ def test_dimensionless_to_si():
     assert testunit.unit.physical_type == 'dimensionless'
     assert_allclose(testunit.si, 0.001)
 
+
 def test_dimensionless_to_cgs():
     """
     Issue #1150: Test for conversion of dimensionless quantities
@@ -198,23 +113,18 @@ def test_dimensionless_to_cgs():
     assert testunit.unit.physical_type == 'dimensionless'
     assert_allclose(testunit.cgs, 0.001)
 
+
 def test_unknown_unit():
-    with warnings.catch_warnings(record=True) as warning_lines:
-        warnings.resetwarnings()
-        warnings.simplefilter("always", u.UnitsWarning, append=True)
+    with catch_warnings(u.UnitsWarning) as warning_lines:
         u.Unit("FOO", parse_strict='warn')
 
-    assert warning_lines[0].category == u.UnitsWarning
     assert 'FOO' in str(warning_lines[0].message)
 
 
 def test_unknown_unit2():
-    with warnings.catch_warnings(record=True) as warning_lines:
-        warnings.resetwarnings()
-        warnings.simplefilter("always", u.UnitsWarning, append=True)
+    with catch_warnings(u.UnitsWarning) as warning_lines:
         assert u.Unit("m/s/kg", parse_strict='warn').to_string() == 'm/s/kg'
 
-    assert warning_lines[0].category == u.UnitsWarning
     assert 'm/s/kg' in str(warning_lines[0].message)
 
 
@@ -244,24 +154,27 @@ def test_unknown_unit3():
         unit5 = u.Unit(None)
 
 
+ at raises(TypeError)
+def test_invalid_scale():
+    x = ['a', 'b', 'c'] * u.m
+
+
 def test_cds_power():
     unit = u.Unit("10+22/cm2", format="cds", parse_strict='silent')
     assert unit.scale == 1e22
 
 
 def test_register():
-    try:
-        u.def_unit("foo", u.m ** 3, register=True)
-        assert hasattr(u, 'foo')
-    finally:
-        if hasattr(u, 'foo'):
-            del u.UnitBase._registry['foo']
-            del u.foo
+    foo = u.def_unit("foo", u.m ** 3, namespace=locals())
+    assert 'foo' in locals()
+    with u.add_enabled_units(foo):
+        assert 'foo' in u.get_current_unit_registry().registry
+    assert 'foo' not in u.get_current_unit_registry().registry
 
 
 def test_in_units():
     speed_unit = u.cm / u.s
-    x = speed_unit.in_units(u.mile / u.hour, 1)
+    x = speed_unit.in_units(u.pc / u.hour, 1)
 
 
 def test_null_unit():
@@ -270,7 +183,7 @@ def test_null_unit():
 
 def test_unrecognized_equivalency():
     assert u.m.is_equivalent('foo') is False
-    assert u.m.is_equivalent('foot') is True
+    assert u.m.is_equivalent('pc') is True
 
 
 @raises(TypeError)
@@ -281,14 +194,14 @@ def test_unit_noarg():
 def test_convertible_exception():
     try:
         u.AA.to(u.h * u.s ** 2)
-    except u.UnitsException as e:
+    except u.UnitsError as e:
         assert "length" in str(e)
 
 
 def test_convertible_exception2():
     try:
         u.m.to(u.s)
-    except u.UnitsException as e:
+    except u.UnitsError as e:
         assert "length" in str(e)
 
 
@@ -349,11 +262,11 @@ def test_compose_roundtrip():
         composed_list = unit.decompose().compose()
         found = False
         for composed in composed_list:
-            if len(composed._bases):
-                if composed._bases[0] is unit:
+            if len(composed.bases):
+                if composed.bases[0] is unit:
                     found = True
                     break
-            elif len(unit._bases) == 0:
+            elif len(unit.bases) == 0:
                 found = True
                 break
         assert found
@@ -368,7 +281,9 @@ def test_compose_roundtrip():
 
 def test_compose_cgs_to_si():
     def _test_compose_cgs_to_si(unit):
-        unit.to_system(u.si)
+        si = unit.to_system(u.si)
+        assert [x.is_equivalent(unit) for x in si]
+        assert si[0] == unit.si
 
     for val in u.cgs.__dict__.values():
         if (isinstance(val, u.UnitBase) and
@@ -380,12 +295,15 @@ def test_compose_si_to_cgs():
     def _test_compose_si_to_cgs(unit):
         # Can't convert things with Ampere to CGS without more context
         try:
-            unit.to_system(u.cgs)
-        except u.UnitsException:
+            cgs = unit.to_system(u.cgs)
+        except u.UnitsError:
             if u.A in unit.decompose().bases:
                 pass
             else:
                 raise
+        else:
+            assert [x.is_equivalent(unit) for x in cgs]
+            assert cgs[0] == unit.cgs
 
     for val in u.si.__dict__.values():
         if (isinstance(val, u.UnitBase) and
@@ -419,7 +337,7 @@ def test_self_compose():
     assert len(unit.compose(units=[u.g, u.s])) == 1
 
 
- at raises(u.UnitsException)
+ at raises(u.UnitsError)
 def test_compose_failed():
     unit = u.kg
 
@@ -482,10 +400,7 @@ def test_endian_independence():
     for endian in ['<', '>']:
         for ntype in ['i', 'f']:
             for byte in ['4', '8']:
-                # Note, we have to use encode() because we've imported
-                # unicode_literals from __future__, and Numpy 1.4.1 crashes if
-                # a unicode dtype is passed.
-                x = np.array([1,2,3], dtype=(endian + ntype + byte).encode('ascii'))
+                x = np.array([1,2,3], dtype=(endian + ntype + byte))
                 u.m.to(u.cm, x)
 
 
@@ -504,27 +419,28 @@ def test_no_as():
 
 
 def test_pickling():
-    import cPickle
-
-    p = cPickle.dumps(u.m)
-    other = cPickle.loads(p)
+    p = pickle.dumps(u.m)
+    other = pickle.loads(p)
 
     assert other is u.m
 
-    try:
-        new_unit = u.IrreducibleUnit(['foo'], format={'baz': 'bar'})
-        p = cPickle.dumps(new_unit)
-    finally:
-        del u.UnitBase._registry['foo']
-
-    new_unit_copy = cPickle.loads(p)
+    new_unit = u.IrreducibleUnit(['foo'], format={'baz': 'bar'})
+    u.add_enabled_units([new_unit])
+    p = pickle.dumps(new_unit)
+    new_unit_copy = pickle.loads(p)
     assert new_unit_copy.names == ['foo']
     assert new_unit_copy.get_format_name('baz') == 'bar'
 
 
 @raises(ValueError)
 def test_duplicate_define():
-    u.def_unit('m')
+    u.def_unit('m', namespace=u.__dict__)
+
+
+def test_all_units():
+    from ...units.core import get_current_unit_registry
+    registry = get_current_unit_registry()
+    assert len(registry.all_units) > len(registry.non_prefix_units)
 
 
 def test_repr_latex():
@@ -545,3 +461,53 @@ def test_comparison():
 
     with pytest.raises(u.UnitsException):
         u.m > u.kg
+
+
+def test_compose_into_arbitrary_units():
+    # Issue #1438
+    from ...constants import G
+    G.decompose([u.kg, u.km, u.Unit("15 s")])
+
+
+def test_unit_multiplication_with_string():
+    """Check that multiplication with strings produces the correct unit."""
+    u1 = u.cm
+    us = 'kg'
+    assert us * u1 == u.Unit(us) * u1
+    assert u1 * us == u1 * u.Unit(us)
+
+
+def test_unit_division_by_string():
+    """Check that multiplication with strings produces the correct unit."""
+    u1 = u.cm
+    us = 'kg'
+    assert us / u1 == u.Unit(us) / u1
+    assert u1 / us == u1 / u.Unit(us)
+
+
+def test_sorted_bases():
+    """See #1616."""
+    assert (u.m * u.Jy).bases == (u.Jy * u.m).bases
+
+
+def test_megabit():
+    """See #1543"""
+    assert u.Mbit is u.Mb
+    assert u.megabit is u.Mb
+
+    assert u.Mbyte is u.MB
+    assert u.megabyte is u.MB
+
+
+def test_composite_unit_get_format_name():
+    """See #1576"""
+    unit1 = u.Unit('nrad/s')
+    unit2 = u.Unit('Hz(1/2)')
+    assert (str(u.CompositeUnit(1, [unit1, unit2], [1, -1])) ==
+            'nrad / (Hz(1/2) s)')
+
+def test_unicode_policy():
+    from ...tests.helper import assert_follows_unicode_guidelines
+
+    assert_follows_unicode_guidelines(
+        u.degree, roundtrip=u.__dict__)
diff --git a/astropy/units/utils.py b/astropy/units/utils.py
index cd8a698..f2b8ced 100644
--- a/astropy/units/utils.py
+++ b/astropy/units/utils.py
@@ -10,8 +10,13 @@ package.
 from __future__ import (absolute_import, division, print_function,
                         unicode_literals)
 
+import io
+import re
+
 from numpy import finfo
 
+from ..extern import six
+
 _float_finfo = finfo(float)
 _JUST_BELOW_UNITY = 1.-_float_finfo.epsneg
 _JUST_ABOVE_UNITY = 1.+_float_finfo.eps
@@ -22,7 +27,7 @@ def _get_first_sentence(s):
     Get the first sentence from a string and remove any carriage
     returns.
     """
-    import re
+
     x = re.match(".*?\S\.\s", s)
     if x is not None:
         s = x.group(0)
@@ -45,14 +50,14 @@ def generate_unit_summary(namespace):
     docstring : str
         A docstring containing a summary table of the units.
     """
+
     from . import core
-    import io
 
     # Get all of the units, and keep track of which ones have SI
     # prefixes
     units = []
     has_prefixes = set()
-    for key, val in namespace.items():
+    for key, val in list(six.iteritems(namespace)):
         # Skip non-unit items
         if not isinstance(val, core.UnitBase):
             continue
@@ -62,7 +67,12 @@ def generate_unit_summary(namespace):
             continue
 
         if isinstance(val, core.PrefixUnit):
-            has_prefixes.add(val.decompose().bases[0].name)
+            decomposed = val.decompose()
+            if len(decomposed.bases):
+                has_prefixes.add(val.decompose().bases[0].name)
+            else:
+                has_prefixes.add('dimensionless')
+
         else:
             units.append(val)
 
diff --git a/astropy/utils/__init__.py b/astropy/utils/__init__.py
index 0ff7d50..8247d31 100644
--- a/astropy/utils/__init__.py
+++ b/astropy/utils/__init__.py
@@ -8,6 +8,9 @@ developers or to implement python hacks. This subpackage also includes the
 `astropy.utils.compat` package, which houses utilities that provide
 compatibility and bugfixes across all versions of Python that Astropy supports.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 
 from .compat.odict import OrderedDict
 from .misc import *
diff --git a/astropy/utils/compat/_argparse_py2/__init__.py b/astropy/utils/compat/_argparse_py2/__init__.py
new file mode 100644
index 0000000..1558ff1
--- /dev/null
+++ b/astropy/utils/compat/_argparse_py2/__init__.py
@@ -0,0 +1,2363 @@
+# below here is argparse v1.2.1 from PyPI
+# Author: Steven J. Bethard <steven.bethard at gmail.com>.
+
+"""Command-line parsing library
+
+This module is an optparse-inspired command-line parsing library that:
+
+    - handles both optional and positional arguments
+    - produces highly informative usage messages
+    - supports parsers that dispatch to sub-parsers
+
+The following is a simple usage example that sums integers from the
+command-line and writes the result to a file::
+
+    parser = argparse.ArgumentParser(
+        description='sum the integers at the command line')
+    parser.add_argument(
+        'integers', metavar='int', nargs='+', type=int,
+        help='an integer to be summed')
+    parser.add_argument(
+        '--log', default=sys.stdout, type=argparse.FileType('w'),
+        help='the file where the sum should be written')
+    args = parser.parse_args()
+    args.log.write('%s' % sum(args.integers))
+    args.log.close()
+
+The module contains the following public classes:
+
+    - ArgumentParser -- The main entry point for command-line parsing. As the
+        example above shows, the add_argument() method is used to populate
+        the parser with actions for optional and positional arguments. Then
+        the parse_args() method is invoked to convert the args at the
+        command-line into an object with attributes.
+
+    - ArgumentError -- The exception raised by ArgumentParser objects when
+        there are errors with the parser's actions. Errors raised while
+        parsing the command-line are caught by ArgumentParser and emitted
+        as command-line messages.
+
+    - FileType -- A factory for defining types of files to be created. As the
+        example above shows, instances of FileType are typically passed as
+        the type= argument of add_argument() calls.
+
+    - Action -- The base class for parser actions. Typically actions are
+        selected by passing strings like 'store_true' or 'append_const' to
+        the action= argument of add_argument(). However, for greater
+        customization of ArgumentParser actions, subclasses of Action may
+        be defined and passed as the action= argument.
+
+    - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,
+        ArgumentDefaultsHelpFormatter -- Formatter classes which
+        may be passed as the formatter_class= argument to the
+        ArgumentParser constructor. HelpFormatter is the default,
+        RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser
+        not to change the formatting for help text, and
+        ArgumentDefaultsHelpFormatter adds information about argument defaults
+        to the help.
+
+All other classes in this module are considered implementation details.
+(Also note that HelpFormatter and RawDescriptionHelpFormatter are only
+considered public as object names -- the API of the formatter objects is
+still considered an implementation detail.)
+"""
+
+__version__ = '1.2.1'
+__all__ = [
+    'ArgumentParser',
+    'ArgumentError',
+    'ArgumentTypeError',
+    'FileType',
+    'HelpFormatter',
+    'ArgumentDefaultsHelpFormatter',
+    'RawDescriptionHelpFormatter',
+    'RawTextHelpFormatter',
+    'Namespace',
+    'Action',
+    'ONE_OR_MORE',
+    'OPTIONAL',
+    'PARSER',
+    'REMAINDER',
+    'SUPPRESS',
+    'ZERO_OR_MORE',
+]
+
+
+import copy as _copy
+import os as _os
+import re as _re
+import sys as _sys
+import textwrap as _textwrap
+
+from gettext import gettext as _
+
+try:
+    set
+except NameError:
+    # for python < 2.4 compatibility (sets module is there since 2.3):
+    from sets import Set as set
+
+try:
+    basestring
+except NameError:
+    basestring = str
+
+try:
+    sorted
+except NameError:
+    # for python < 2.4 compatibility:
+    def sorted(iterable, reverse=False):
+        result = list(iterable)
+        result.sort()
+        if reverse:
+            result.reverse()
+        return result
+
+
+def _callable(obj):
+    return hasattr(obj, '__call__') or hasattr(obj, '__bases__')
+
+
+SUPPRESS = '==SUPPRESS=='
+
+OPTIONAL = '?'
+ZERO_OR_MORE = '*'
+ONE_OR_MORE = '+'
+PARSER = 'A...'
+REMAINDER = '...'
+_UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args'
+
+# =============================
+# Utility functions and classes
+# =============================
+
+class _AttributeHolder(object):
+    """Abstract base class that provides __repr__.
+
+    The __repr__ method returns a string in the format::
+        ClassName(attr=name, attr=name, ...)
+    The attributes are determined either by a class-level attribute,
+    '_kwarg_names', or by inspecting the instance __dict__.
+    """
+
+    def __repr__(self):
+        type_name = type(self).__name__
+        arg_strings = []
+        for arg in self._get_args():
+            arg_strings.append(repr(arg))
+        for name, value in self._get_kwargs():
+            arg_strings.append('%s=%r' % (name, value))
+        return '%s(%s)' % (type_name, ', '.join(arg_strings))
+
+    def _get_kwargs(self):
+        return sorted(self.__dict__.items())
+
+    def _get_args(self):
+        return []
+
+
+def _ensure_value(namespace, name, value):
+    if getattr(namespace, name, None) is None:
+        setattr(namespace, name, value)
+    return getattr(namespace, name)
+
+
+# ===============
+# Formatting Help
+# ===============
+
+class HelpFormatter(object):
+    """Formatter for generating usage messages and argument help strings.
+
+    Only the name of this class is considered a public API. All the methods
+    provided by the class are considered an implementation detail.
+    """
+
+    def __init__(self,
+                 prog,
+                 indent_increment=2,
+                 max_help_position=24,
+                 width=None):
+
+        # default setting for width
+        if width is None:
+            try:
+                width = int(_os.environ['COLUMNS'])
+            except (KeyError, ValueError):
+                width = 80
+            width -= 2
+
+        self._prog = prog
+        self._indent_increment = indent_increment
+        self._max_help_position = max_help_position
+        self._width = width
+
+        self._current_indent = 0
+        self._level = 0
+        self._action_max_length = 0
+
+        self._root_section = self._Section(self, None)
+        self._current_section = self._root_section
+
+        self._whitespace_matcher = _re.compile(r'\s+')
+        self._long_break_matcher = _re.compile(r'\n\n\n+')
+
+    # ===============================
+    # Section and indentation methods
+    # ===============================
+    def _indent(self):
+        self._current_indent += self._indent_increment
+        self._level += 1
+
+    def _dedent(self):
+        self._current_indent -= self._indent_increment
+        assert self._current_indent >= 0, 'Indent decreased below 0.'
+        self._level -= 1
+
+    class _Section(object):
+
+        def __init__(self, formatter, parent, heading=None):
+            self.formatter = formatter
+            self.parent = parent
+            self.heading = heading
+            self.items = []
+
+        def format_help(self):
+            # format the indented section
+            if self.parent is not None:
+                self.formatter._indent()
+            join = self.formatter._join_parts
+            for func, args in self.items:
+                func(*args)
+            item_help = join([func(*args) for func, args in self.items])
+            if self.parent is not None:
+                self.formatter._dedent()
+
+            # return nothing if the section was empty
+            if not item_help:
+                return ''
+
+            # add the heading if the section was non-empty
+            if self.heading is not SUPPRESS and self.heading is not None:
+                current_indent = self.formatter._current_indent
+                heading = '%*s%s:\n' % (current_indent, '', self.heading)
+            else:
+                heading = ''
+
+            # join the section-initial newline, the heading and the help
+            return join(['\n', heading, item_help, '\n'])
+
+    def _add_item(self, func, args):
+        self._current_section.items.append((func, args))
+
+    # ========================
+    # Message building methods
+    # ========================
+    def start_section(self, heading):
+        self._indent()
+        section = self._Section(self, self._current_section, heading)
+        self._add_item(section.format_help, [])
+        self._current_section = section
+
+    def end_section(self):
+        self._current_section = self._current_section.parent
+        self._dedent()
+
+    def add_text(self, text):
+        if text is not SUPPRESS and text is not None:
+            self._add_item(self._format_text, [text])
+
+    def add_usage(self, usage, actions, groups, prefix=None):
+        if usage is not SUPPRESS:
+            args = usage, actions, groups, prefix
+            self._add_item(self._format_usage, args)
+
+    def add_argument(self, action):
+        if action.help is not SUPPRESS:
+
+            # find all invocations
+            get_invocation = self._format_action_invocation
+            invocations = [get_invocation(action)]
+            for subaction in self._iter_indented_subactions(action):
+                invocations.append(get_invocation(subaction))
+
+            # update the maximum item length
+            invocation_length = max([len(s) for s in invocations])
+            action_length = invocation_length + self._current_indent
+            self._action_max_length = max(self._action_max_length,
+                                          action_length)
+
+            # add the item to the list
+            self._add_item(self._format_action, [action])
+
+    def add_arguments(self, actions):
+        for action in actions:
+            self.add_argument(action)
+
+    # =======================
+    # Help-formatting methods
+    # =======================
+    def format_help(self):
+        help = self._root_section.format_help()
+        if help:
+            help = self._long_break_matcher.sub('\n\n', help)
+            help = help.strip('\n') + '\n'
+        return help
+
+    def _join_parts(self, part_strings):
+        return ''.join([part
+                        for part in part_strings
+                        if part and part is not SUPPRESS])
+
+    def _format_usage(self, usage, actions, groups, prefix):
+        if prefix is None:
+            prefix = _('usage: ')
+
+        # if usage is specified, use that
+        if usage is not None:
+            usage = usage % dict(prog=self._prog)
+
+        # if no optionals or positionals are available, usage is just prog
+        elif usage is None and not actions:
+            usage = '%(prog)s' % dict(prog=self._prog)
+
+        # if optionals and positionals are available, calculate usage
+        elif usage is None:
+            prog = '%(prog)s' % dict(prog=self._prog)
+
+            # split optionals from positionals
+            optionals = []
+            positionals = []
+            for action in actions:
+                if action.option_strings:
+                    optionals.append(action)
+                else:
+                    positionals.append(action)
+
+            # build full usage string
+            format = self._format_actions_usage
+            action_usage = format(optionals + positionals, groups)
+            usage = ' '.join([s for s in [prog, action_usage] if s])
+
+            # wrap the usage parts if it's too long
+            text_width = self._width - self._current_indent
+            if len(prefix) + len(usage) > text_width:
+
+                # break usage into wrappable parts
+                part_regexp = r'\(.*?\)+|\[.*?\]+|\S+'
+                opt_usage = format(optionals, groups)
+                pos_usage = format(positionals, groups)
+                opt_parts = _re.findall(part_regexp, opt_usage)
+                pos_parts = _re.findall(part_regexp, pos_usage)
+                assert ' '.join(opt_parts) == opt_usage
+                assert ' '.join(pos_parts) == pos_usage
+
+                # helper for wrapping lines
+                def get_lines(parts, indent, prefix=None):
+                    lines = []
+                    line = []
+                    if prefix is not None:
+                        line_len = len(prefix) - 1
+                    else:
+                        line_len = len(indent) - 1
+                    for part in parts:
+                        if line_len + 1 + len(part) > text_width:
+                            lines.append(indent + ' '.join(line))
+                            line = []
+                            line_len = len(indent) - 1
+                        line.append(part)
+                        line_len += len(part) + 1
+                    if line:
+                        lines.append(indent + ' '.join(line))
+                    if prefix is not None:
+                        lines[0] = lines[0][len(indent):]
+                    return lines
+
+                # if prog is short, follow it with optionals or positionals
+                if len(prefix) + len(prog) <= 0.75 * text_width:
+                    indent = ' ' * (len(prefix) + len(prog) + 1)
+                    if opt_parts:
+                        lines = get_lines([prog] + opt_parts, indent, prefix)
+                        lines.extend(get_lines(pos_parts, indent))
+                    elif pos_parts:
+                        lines = get_lines([prog] + pos_parts, indent, prefix)
+                    else:
+                        lines = [prog]
+
+                # if prog is long, put it on its own line
+                else:
+                    indent = ' ' * len(prefix)
+                    parts = opt_parts + pos_parts
+                    lines = get_lines(parts, indent)
+                    if len(lines) > 1:
+                        lines = []
+                        lines.extend(get_lines(opt_parts, indent))
+                        lines.extend(get_lines(pos_parts, indent))
+                    lines = [prog] + lines
+
+                # join lines into usage
+                usage = '\n'.join(lines)
+
+        # prefix with 'usage:'
+        return '%s%s\n\n' % (prefix, usage)
+
+    def _format_actions_usage(self, actions, groups):
+        # find group indices and identify actions in groups
+        group_actions = set()
+        inserts = {}
+        for group in groups:
+            try:
+                start = actions.index(group._group_actions[0])
+            except ValueError:
+                continue
+            else:
+                end = start + len(group._group_actions)
+                if actions[start:end] == group._group_actions:
+                    for action in group._group_actions:
+                        group_actions.add(action)
+                    if not group.required:
+                        if start in inserts:
+                            inserts[start] += ' ['
+                        else:
+                            inserts[start] = '['
+                        inserts[end] = ']'
+                    else:
+                        if start in inserts:
+                            inserts[start] += ' ('
+                        else:
+                            inserts[start] = '('
+                        inserts[end] = ')'
+                    for i in range(start + 1, end):
+                        inserts[i] = '|'
+
+        # collect all actions format strings
+        parts = []
+        for i, action in enumerate(actions):
+
+            # suppressed arguments are marked with None
+            # remove | separators for suppressed arguments
+            if action.help is SUPPRESS:
+                parts.append(None)
+                if inserts.get(i) == '|':
+                    inserts.pop(i)
+                elif inserts.get(i + 1) == '|':
+                    inserts.pop(i + 1)
+
+            # produce all arg strings
+            elif not action.option_strings:
+                part = self._format_args(action, action.dest)
+
+                # if it's in a group, strip the outer []
+                if action in group_actions:
+                    if part[0] == '[' and part[-1] == ']':
+                        part = part[1:-1]
+
+                # add the action string to the list
+                parts.append(part)
+
+            # produce the first way to invoke the option in brackets
+            else:
+                option_string = action.option_strings[0]
+
+                # if the Optional doesn't take a value, format is:
+                #    -s or --long
+                if action.nargs == 0:
+                    part = '%s' % option_string
+
+                # if the Optional takes a value, format is:
+                #    -s ARGS or --long ARGS
+                else:
+                    default = action.dest.upper()
+                    args_string = self._format_args(action, default)
+                    part = '%s %s' % (option_string, args_string)
+
+                # make it look optional if it's not required or in a group
+                if not action.required and action not in group_actions:
+                    part = '[%s]' % part
+
+                # add the action string to the list
+                parts.append(part)
+
+        # insert things at the necessary indices
+        for i in sorted(inserts, reverse=True):
+            parts[i:i] = [inserts[i]]
+
+        # join all the action items with spaces
+        text = ' '.join([item for item in parts if item is not None])
+
+        # clean up separators for mutually exclusive groups
+        open = r'[\[(]'
+        close = r'[\])]'
+        text = _re.sub(r'(%s) ' % open, r'\1', text)
+        text = _re.sub(r' (%s)' % close, r'\1', text)
+        text = _re.sub(r'%s *%s' % (open, close), r'', text)
+        text = _re.sub(r'\(([^|]*)\)', r'\1', text)
+        text = text.strip()
+
+        # return the text
+        return text
+
+    def _format_text(self, text):
+        if '%(prog)' in text:
+            text = text % dict(prog=self._prog)
+        text_width = self._width - self._current_indent
+        indent = ' ' * self._current_indent
+        return self._fill_text(text, text_width, indent) + '\n\n'
+
+    def _format_action(self, action):
+        # determine the required width and the entry label
+        help_position = min(self._action_max_length + 2,
+                            self._max_help_position)
+        help_width = self._width - help_position
+        action_width = help_position - self._current_indent - 2
+        action_header = self._format_action_invocation(action)
+
+        # ho nelp; start on same line and add a final newline
+        if not action.help:
+            tup = self._current_indent, '', action_header
+            action_header = '%*s%s\n' % tup
+
+        # short action name; start on the same line and pad two spaces
+        elif len(action_header) <= action_width:
+            tup = self._current_indent, '', action_width, action_header
+            action_header = '%*s%-*s  ' % tup
+            indent_first = 0
+
+        # long action name; start on the next line
+        else:
+            tup = self._current_indent, '', action_header
+            action_header = '%*s%s\n' % tup
+            indent_first = help_position
+
+        # collect the pieces of the action help
+        parts = [action_header]
+
+        # if there was help for the action, add lines of help text
+        if action.help:
+            help_text = self._expand_help(action)
+            help_lines = self._split_lines(help_text, help_width)
+            parts.append('%*s%s\n' % (indent_first, '', help_lines[0]))
+            for line in help_lines[1:]:
+                parts.append('%*s%s\n' % (help_position, '', line))
+
+        # or add a newline if the description doesn't end with one
+        elif not action_header.endswith('\n'):
+            parts.append('\n')
+
+        # if there are any sub-actions, add their help as well
+        for subaction in self._iter_indented_subactions(action):
+            parts.append(self._format_action(subaction))
+
+        # return a single string
+        return self._join_parts(parts)
+
+    def _format_action_invocation(self, action):
+        if not action.option_strings:
+            metavar, = self._metavar_formatter(action, action.dest)(1)
+            return metavar
+
+        else:
+            parts = []
+
+            # if the Optional doesn't take a value, format is:
+            #    -s, --long
+            if action.nargs == 0:
+                parts.extend(action.option_strings)
+
+            # if the Optional takes a value, format is:
+            #    -s ARGS, --long ARGS
+            else:
+                default = action.dest.upper()
+                args_string = self._format_args(action, default)
+                for option_string in action.option_strings:
+                    parts.append('%s %s' % (option_string, args_string))
+
+            return ', '.join(parts)
+
+    def _metavar_formatter(self, action, default_metavar):
+        if action.metavar is not None:
+            result = action.metavar
+        elif action.choices is not None:
+            choice_strs = [str(choice) for choice in action.choices]
+            result = '{%s}' % ','.join(choice_strs)
+        else:
+            result = default_metavar
+
+        def format(tuple_size):
+            if isinstance(result, tuple):
+                return result
+            else:
+                return (result, ) * tuple_size
+        return format
+
+    def _format_args(self, action, default_metavar):
+        get_metavar = self._metavar_formatter(action, default_metavar)
+        if action.nargs is None:
+            result = '%s' % get_metavar(1)
+        elif action.nargs == OPTIONAL:
+            result = '[%s]' % get_metavar(1)
+        elif action.nargs == ZERO_OR_MORE:
+            result = '[%s [%s ...]]' % get_metavar(2)
+        elif action.nargs == ONE_OR_MORE:
+            result = '%s [%s ...]' % get_metavar(2)
+        elif action.nargs == REMAINDER:
+            result = '...'
+        elif action.nargs == PARSER:
+            result = '%s ...' % get_metavar(1)
+        else:
+            formats = ['%s' for _ in range(action.nargs)]
+            result = ' '.join(formats) % get_metavar(action.nargs)
+        return result
+
+    def _expand_help(self, action):
+        params = dict(vars(action), prog=self._prog)
+        for name in list(params):
+            if params[name] is SUPPRESS:
+                del params[name]
+        for name in list(params):
+            if hasattr(params[name], '__name__'):
+                params[name] = params[name].__name__
+        if params.get('choices') is not None:
+            choices_str = ', '.join([str(c) for c in params['choices']])
+            params['choices'] = choices_str
+        return self._get_help_string(action) % params
+
+    def _iter_indented_subactions(self, action):
+        try:
+            get_subactions = action._get_subactions
+        except AttributeError:
+            pass
+        else:
+            self._indent()
+            for subaction in get_subactions():
+                yield subaction
+            self._dedent()
+
+    def _split_lines(self, text, width):
+        text = self._whitespace_matcher.sub(' ', text).strip()
+        return _textwrap.wrap(text, width)
+
+    def _fill_text(self, text, width, indent):
+        text = self._whitespace_matcher.sub(' ', text).strip()
+        return _textwrap.fill(text, width, initial_indent=indent,
+                                           subsequent_indent=indent)
+
+    def _get_help_string(self, action):
+        return action.help
+
+
+class RawDescriptionHelpFormatter(HelpFormatter):
+    """Help message formatter which retains any formatting in descriptions.
+
+    Only the name of this class is considered a public API. All the methods
+    provided by the class are considered an implementation detail.
+    """
+
+    def _fill_text(self, text, width, indent):
+        return ''.join([indent + line for line in text.splitlines(True)])
+
+
+class RawTextHelpFormatter(RawDescriptionHelpFormatter):
+    """Help message formatter which retains formatting of all help text.
+
+    Only the name of this class is considered a public API. All the methods
+    provided by the class are considered an implementation detail.
+    """
+
+    def _split_lines(self, text, width):
+        return text.splitlines()
+
+
+class ArgumentDefaultsHelpFormatter(HelpFormatter):
+    """Help message formatter which adds default values to argument help.
+
+    Only the name of this class is considered a public API. All the methods
+    provided by the class are considered an implementation detail.
+    """
+
+    def _get_help_string(self, action):
+        help = action.help
+        if '%(default)' not in action.help:
+            if action.default is not SUPPRESS:
+                defaulting_nargs = [OPTIONAL, ZERO_OR_MORE]
+                if action.option_strings or action.nargs in defaulting_nargs:
+                    help += ' (default: %(default)s)'
+        return help
+
+
+# =====================
+# Options and Arguments
+# =====================
+
+def _get_action_name(argument):
+    if argument is None:
+        return None
+    elif argument.option_strings:
+        return  '/'.join(argument.option_strings)
+    elif argument.metavar not in (None, SUPPRESS):
+        return argument.metavar
+    elif argument.dest not in (None, SUPPRESS):
+        return argument.dest
+    else:
+        return None
+
+
+class ArgumentError(Exception):
+    """An error from creating or using an argument (optional or positional).
+
+    The string value of this exception is the message, augmented with
+    information about the argument that caused it.
+    """
+
+    def __init__(self, argument, message):
+        self.argument_name = _get_action_name(argument)
+        self.message = message
+
+    def __str__(self):
+        if self.argument_name is None:
+            format = '%(message)s'
+        else:
+            format = 'argument %(argument_name)s: %(message)s'
+        return format % dict(message=self.message,
+                             argument_name=self.argument_name)
+
+
+class ArgumentTypeError(Exception):
+    """An error from trying to convert a command line string to a type."""
+    pass
+
+
+# ==============
+# Action classes
+# ==============
+
+class Action(_AttributeHolder):
+    """Information about how to convert command line strings to Python objects.
+
+    Action objects are used by an ArgumentParser to represent the information
+    needed to parse a single argument from one or more strings from the
+    command line. The keyword arguments to the Action constructor are also
+    all attributes of Action instances.
+
+    Keyword Arguments:
+
+        - option_strings -- A list of command-line option strings which
+            should be associated with this action.
+
+        - dest -- The name of the attribute to hold the created object(s)
+
+        - nargs -- The number of command-line arguments that should be
+            consumed. By default, one argument will be consumed and a single
+            value will be produced.  Other values include:
+                - N (an integer) consumes N arguments (and produces a list)
+                - '?' consumes zero or one arguments
+                - '*' consumes zero or more arguments (and produces a list)
+                - '+' consumes one or more arguments (and produces a list)
+            Note that the difference between the default and nargs=1 is that
+            with the default, a single value will be produced, while with
+            nargs=1, a list containing a single value will be produced.
+
+        - const -- The value to be produced if the option is specified and the
+            option uses an action that takes no values.
+
+        - default -- The value to be produced if the option is not specified.
+
+        - type -- The type which the command-line arguments should be converted
+            to, should be one of 'string', 'int', 'float', 'complex' or a
+            callable object that accepts a single string argument. If None,
+            'string' is assumed.
+
+        - choices -- A container of values that should be allowed. If not None,
+            after a command-line argument has been converted to the appropriate
+            type, an exception will be raised if it is not a member of this
+            collection.
+
+        - required -- True if the action must always be specified at the
+            command line. This is only meaningful for optional command-line
+            arguments.
+
+        - help -- The help string describing the argument.
+
+        - metavar -- The name to be used for the option's argument with the
+            help string. If None, the 'dest' value will be used as the name.
+    """
+
+    def __init__(self,
+                 option_strings,
+                 dest,
+                 nargs=None,
+                 const=None,
+                 default=None,
+                 type=None,
+                 choices=None,
+                 required=False,
+                 help=None,
+                 metavar=None):
+        self.option_strings = option_strings
+        self.dest = dest
+        self.nargs = nargs
+        self.const = const
+        self.default = default
+        self.type = type
+        self.choices = choices
+        self.required = required
+        self.help = help
+        self.metavar = metavar
+
+    def _get_kwargs(self):
+        names = [
+            'option_strings',
+            'dest',
+            'nargs',
+            'const',
+            'default',
+            'type',
+            'choices',
+            'help',
+            'metavar',
+        ]
+        return [(name, getattr(self, name)) for name in names]
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        raise NotImplementedError(_('.__call__() not defined'))
+
+
+class _StoreAction(Action):
+
+    def __init__(self,
+                 option_strings,
+                 dest,
+                 nargs=None,
+                 const=None,
+                 default=None,
+                 type=None,
+                 choices=None,
+                 required=False,
+                 help=None,
+                 metavar=None):
+        if nargs == 0:
+            raise ValueError('nargs for store actions must be > 0; if you '
+                             'have nothing to store, actions such as store '
+                             'true or store const may be more appropriate')
+        if const is not None and nargs != OPTIONAL:
+            raise ValueError('nargs must be %r to supply const' % OPTIONAL)
+        super(_StoreAction, self).__init__(
+            option_strings=option_strings,
+            dest=dest,
+            nargs=nargs,
+            const=const,
+            default=default,
+            type=type,
+            choices=choices,
+            required=required,
+            help=help,
+            metavar=metavar)
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        setattr(namespace, self.dest, values)
+
+
+class _StoreConstAction(Action):
+
+    def __init__(self,
+                 option_strings,
+                 dest,
+                 const,
+                 default=None,
+                 required=False,
+                 help=None,
+                 metavar=None):
+        super(_StoreConstAction, self).__init__(
+            option_strings=option_strings,
+            dest=dest,
+            nargs=0,
+            const=const,
+            default=default,
+            required=required,
+            help=help)
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        setattr(namespace, self.dest, self.const)
+
+
+class _StoreTrueAction(_StoreConstAction):
+
+    def __init__(self,
+                 option_strings,
+                 dest,
+                 default=False,
+                 required=False,
+                 help=None):
+        super(_StoreTrueAction, self).__init__(
+            option_strings=option_strings,
+            dest=dest,
+            const=True,
+            default=default,
+            required=required,
+            help=help)
+
+
+class _StoreFalseAction(_StoreConstAction):
+
+    def __init__(self,
+                 option_strings,
+                 dest,
+                 default=True,
+                 required=False,
+                 help=None):
+        super(_StoreFalseAction, self).__init__(
+            option_strings=option_strings,
+            dest=dest,
+            const=False,
+            default=default,
+            required=required,
+            help=help)
+
+
+class _AppendAction(Action):
+
+    def __init__(self,
+                 option_strings,
+                 dest,
+                 nargs=None,
+                 const=None,
+                 default=None,
+                 type=None,
+                 choices=None,
+                 required=False,
+                 help=None,
+                 metavar=None):
+        if nargs == 0:
+            raise ValueError('nargs for append actions must be > 0; if arg '
+                             'strings are not supplying the value to append, '
+                             'the append const action may be more appropriate')
+        if const is not None and nargs != OPTIONAL:
+            raise ValueError('nargs must be %r to supply const' % OPTIONAL)
+        super(_AppendAction, self).__init__(
+            option_strings=option_strings,
+            dest=dest,
+            nargs=nargs,
+            const=const,
+            default=default,
+            type=type,
+            choices=choices,
+            required=required,
+            help=help,
+            metavar=metavar)
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        items = _copy.copy(_ensure_value(namespace, self.dest, []))
+        items.append(values)
+        setattr(namespace, self.dest, items)
+
+
+class _AppendConstAction(Action):
+
+    def __init__(self,
+                 option_strings,
+                 dest,
+                 const,
+                 default=None,
+                 required=False,
+                 help=None,
+                 metavar=None):
+        super(_AppendConstAction, self).__init__(
+            option_strings=option_strings,
+            dest=dest,
+            nargs=0,
+            const=const,
+            default=default,
+            required=required,
+            help=help,
+            metavar=metavar)
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        items = _copy.copy(_ensure_value(namespace, self.dest, []))
+        items.append(self.const)
+        setattr(namespace, self.dest, items)
+
+
+class _CountAction(Action):
+
+    def __init__(self,
+                 option_strings,
+                 dest,
+                 default=None,
+                 required=False,
+                 help=None):
+        super(_CountAction, self).__init__(
+            option_strings=option_strings,
+            dest=dest,
+            nargs=0,
+            default=default,
+            required=required,
+            help=help)
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        new_count = _ensure_value(namespace, self.dest, 0) + 1
+        setattr(namespace, self.dest, new_count)
+
+
+class _HelpAction(Action):
+
+    def __init__(self,
+                 option_strings,
+                 dest=SUPPRESS,
+                 default=SUPPRESS,
+                 help=None):
+        super(_HelpAction, self).__init__(
+            option_strings=option_strings,
+            dest=dest,
+            default=default,
+            nargs=0,
+            help=help)
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        parser.print_help()
+        parser.exit()
+
+
+class _VersionAction(Action):
+
+    def __init__(self,
+                 option_strings,
+                 version=None,
+                 dest=SUPPRESS,
+                 default=SUPPRESS,
+                 help="show program's version number and exit"):
+        super(_VersionAction, self).__init__(
+            option_strings=option_strings,
+            dest=dest,
+            default=default,
+            nargs=0,
+            help=help)
+        self.version = version
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        version = self.version
+        if version is None:
+            version = parser.version
+        formatter = parser._get_formatter()
+        formatter.add_text(version)
+        parser.exit(message=formatter.format_help())
+
+
+class _SubParsersAction(Action):
+
+    class _ChoicesPseudoAction(Action):
+
+        def __init__(self, name, help):
+            sup = super(_SubParsersAction._ChoicesPseudoAction, self)
+            sup.__init__(option_strings=[], dest=name, help=help)
+
+    def __init__(self,
+                 option_strings,
+                 prog,
+                 parser_class,
+                 dest=SUPPRESS,
+                 help=None,
+                 metavar=None):
+
+        self._prog_prefix = prog
+        self._parser_class = parser_class
+        self._name_parser_map = {}
+        self._choices_actions = []
+
+        super(_SubParsersAction, self).__init__(
+            option_strings=option_strings,
+            dest=dest,
+            nargs=PARSER,
+            choices=self._name_parser_map,
+            help=help,
+            metavar=metavar)
+
+    def add_parser(self, name, **kwargs):
+        # set prog from the existing prefix
+        if kwargs.get('prog') is None:
+            kwargs['prog'] = '%s %s' % (self._prog_prefix, name)
+
+        # create a pseudo-action to hold the choice help
+        if 'help' in kwargs:
+            help = kwargs.pop('help')
+            choice_action = self._ChoicesPseudoAction(name, help)
+            self._choices_actions.append(choice_action)
+
+        # create the parser and add it to the map
+        parser = self._parser_class(**kwargs)
+        self._name_parser_map[name] = parser
+        return parser
+
+    def _get_subactions(self):
+        return self._choices_actions
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        parser_name = values[0]
+        arg_strings = values[1:]
+
+        # set the parser name if requested
+        if self.dest is not SUPPRESS:
+            setattr(namespace, self.dest, parser_name)
+
+        # select the parser
+        try:
+            parser = self._name_parser_map[parser_name]
+        except KeyError:
+            tup = parser_name, ', '.join(self._name_parser_map)
+            msg = _('unknown parser %r (choices: %s)' % tup)
+            raise ArgumentError(self, msg)
+
+        # parse all the remaining options into the namespace
+        # store any unrecognized options on the object, so that the top
+        # level parser can decide what to do with them
+        namespace, arg_strings = parser.parse_known_args(arg_strings, namespace)
+        if arg_strings:
+            vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR, [])
+            getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)
+
+
+# ==============
+# Type classes
+# ==============
+
+class FileType(object):
+    """Factory for creating file object types
+
+    Instances of FileType are typically passed as type= arguments to the
+    ArgumentParser add_argument() method.
+
+    Keyword Arguments:
+        - mode -- A string indicating how the file is to be opened. Accepts the
+            same values as the builtin open() function.
+        - bufsize -- The file's desired buffer size. Accepts the same values as
+            the builtin open() function.
+    """
+
+    def __init__(self, mode='r', bufsize=None):
+        self._mode = mode
+        self._bufsize = bufsize
+
+    def __call__(self, string):
+        # the special argument "-" means sys.std{in,out}
+        if string == '-':
+            if 'r' in self._mode:
+                return _sys.stdin
+            elif 'w' in self._mode:
+                return _sys.stdout
+            else:
+                msg = _('argument "-" with mode %r' % self._mode)
+                raise ValueError(msg)
+
+        # all other arguments are used as file names
+        if self._bufsize:
+            return open(string, self._mode, self._bufsize)
+        else:
+            return open(string, self._mode)
+
+    def __repr__(self):
+        args = [self._mode, self._bufsize]
+        args_str = ', '.join([repr(arg) for arg in args if arg is not None])
+        return '%s(%s)' % (type(self).__name__, args_str)
+
+# ===========================
+# Optional and Positional Parsing
+# ===========================
+
+class Namespace(_AttributeHolder):
+    """Simple object for storing attributes.
+
+    Implements equality by attribute names and values, and provides a simple
+    string representation.
+    """
+
+    def __init__(self, **kwargs):
+        for name in kwargs:
+            setattr(self, name, kwargs[name])
+
+    __hash__ = None
+
+    def __eq__(self, other):
+        return vars(self) == vars(other)
+
+    def __ne__(self, other):
+        return not (self == other)
+
+    def __contains__(self, key):
+        return key in self.__dict__
+
+
+class _ActionsContainer(object):
+
+    def __init__(self,
+                 description,
+                 prefix_chars,
+                 argument_default,
+                 conflict_handler):
+        super(_ActionsContainer, self).__init__()
+
+        self.description = description
+        self.argument_default = argument_default
+        self.prefix_chars = prefix_chars
+        self.conflict_handler = conflict_handler
+
+        # set up registries
+        self._registries = {}
+
+        # register actions
+        self.register('action', None, _StoreAction)
+        self.register('action', 'store', _StoreAction)
+        self.register('action', 'store_const', _StoreConstAction)
+        self.register('action', 'store_true', _StoreTrueAction)
+        self.register('action', 'store_false', _StoreFalseAction)
+        self.register('action', 'append', _AppendAction)
+        self.register('action', 'append_const', _AppendConstAction)
+        self.register('action', 'count', _CountAction)
+        self.register('action', 'help', _HelpAction)
+        self.register('action', 'version', _VersionAction)
+        self.register('action', 'parsers', _SubParsersAction)
+
+        # raise an exception if the conflict handler is invalid
+        self._get_handler()
+
+        # action storage
+        self._actions = []
+        self._option_string_actions = {}
+
+        # groups
+        self._action_groups = []
+        self._mutually_exclusive_groups = []
+
+        # defaults storage
+        self._defaults = {}
+
+        # determines whether an "option" looks like a negative number
+        self._negative_number_matcher = _re.compile(r'^-\d+$|^-\d*\.\d+$')
+
+        # whether or not there are any optionals that look like negative
+        # numbers -- uses a list so it can be shared and edited
+        self._has_negative_number_optionals = []
+
+    # ====================
+    # Registration methods
+    # ====================
+    def register(self, registry_name, value, object):
+        registry = self._registries.setdefault(registry_name, {})
+        registry[value] = object
+
+    def _registry_get(self, registry_name, value, default=None):
+        return self._registries[registry_name].get(value, default)
+
+    # ==================================
+    # Namespace default accessor methods
+    # ==================================
+    def set_defaults(self, **kwargs):
+        self._defaults.update(kwargs)
+
+        # if these defaults match any existing arguments, replace
+        # the previous default on the object with the new one
+        for action in self._actions:
+            if action.dest in kwargs:
+                action.default = kwargs[action.dest]
+
+    def get_default(self, dest):
+        for action in self._actions:
+            if action.dest == dest and action.default is not None:
+                return action.default
+        return self._defaults.get(dest, None)
+
+
+    # =======================
+    # Adding argument actions
+    # =======================
+    def add_argument(self, *args, **kwargs):
+        """
+        add_argument(dest, ..., name=value, ...)
+        add_argument(option_string, option_string, ..., name=value, ...)
+        """
+
+        # if no positional args are supplied or only one is supplied and
+        # it doesn't look like an option string, parse a positional
+        # argument
+        chars = self.prefix_chars
+        if not args or len(args) == 1 and args[0][0] not in chars:
+            if args and 'dest' in kwargs:
+                raise ValueError('dest supplied twice for positional argument')
+            kwargs = self._get_positional_kwargs(*args, **kwargs)
+
+        # otherwise, we're adding an optional argument
+        else:
+            kwargs = self._get_optional_kwargs(*args, **kwargs)
+
+        # if no default was supplied, use the parser-level default
+        if 'default' not in kwargs:
+            dest = kwargs['dest']
+            if dest in self._defaults:
+                kwargs['default'] = self._defaults[dest]
+            elif self.argument_default is not None:
+                kwargs['default'] = self.argument_default
+
+        # create the action object, and add it to the parser
+        action_class = self._pop_action_class(kwargs)
+        if not _callable(action_class):
+            raise ValueError('unknown action "%s"' % action_class)
+        action = action_class(**kwargs)
+
+        # raise an error if the action type is not callable
+        type_func = self._registry_get('type', action.type, action.type)
+        if not _callable(type_func):
+            raise ValueError('%r is not callable' % type_func)
+
+        return self._add_action(action)
+
+    def add_argument_group(self, *args, **kwargs):
+        group = _ArgumentGroup(self, *args, **kwargs)
+        self._action_groups.append(group)
+        return group
+
+    def add_mutually_exclusive_group(self, **kwargs):
+        group = _MutuallyExclusiveGroup(self, **kwargs)
+        self._mutually_exclusive_groups.append(group)
+        return group
+
+    def _add_action(self, action):
+        # resolve any conflicts
+        self._check_conflict(action)
+
+        # add to actions list
+        self._actions.append(action)
+        action.container = self
+
+        # index the action by any option strings it has
+        for option_string in action.option_strings:
+            self._option_string_actions[option_string] = action
+
+        # set the flag if any option strings look like negative numbers
+        for option_string in action.option_strings:
+            if self._negative_number_matcher.match(option_string):
+                if not self._has_negative_number_optionals:
+                    self._has_negative_number_optionals.append(True)
+
+        # return the created action
+        return action
+
+    def _remove_action(self, action):
+        self._actions.remove(action)
+
+    def _add_container_actions(self, container):
+        # collect groups by titles
+        title_group_map = {}
+        for group in self._action_groups:
+            if group.title in title_group_map:
+                msg = _('cannot merge actions - two groups are named %r')
+                raise ValueError(msg % (group.title))
+            title_group_map[group.title] = group
+
+        # map each action to its group
+        group_map = {}
+        for group in container._action_groups:
+
+            # if a group with the title exists, use that, otherwise
+            # create a new group matching the container's group
+            if group.title not in title_group_map:
+                title_group_map[group.title] = self.add_argument_group(
+                    title=group.title,
+                    description=group.description,
+                    conflict_handler=group.conflict_handler)
+
+            # map the actions to their new group
+            for action in group._group_actions:
+                group_map[action] = title_group_map[group.title]
+
+        # add container's mutually exclusive groups
+        # NOTE: if add_mutually_exclusive_group ever gains title= and
+        # description= then this code will need to be expanded as above
+        for group in container._mutually_exclusive_groups:
+            mutex_group = self.add_mutually_exclusive_group(
+                required=group.required)
+
+            # map the actions to their new mutex group
+            for action in group._group_actions:
+                group_map[action] = mutex_group
+
+        # add all actions to this container or their group
+        for action in container._actions:
+            group_map.get(action, self)._add_action(action)
+
+    def _get_positional_kwargs(self, dest, **kwargs):
+        # make sure required is not specified
+        if 'required' in kwargs:
+            msg = _("'required' is an invalid argument for positionals")
+            raise TypeError(msg)
+
+        # mark positional arguments as required if at least one is
+        # always required
+        if kwargs.get('nargs') not in [OPTIONAL, ZERO_OR_MORE]:
+            kwargs['required'] = True
+        if kwargs.get('nargs') == ZERO_OR_MORE and 'default' not in kwargs:
+            kwargs['required'] = True
+
+        # return the keyword arguments with no option strings
+        return dict(kwargs, dest=dest, option_strings=[])
+
+    def _get_optional_kwargs(self, *args, **kwargs):
+        # determine short and long option strings
+        option_strings = []
+        long_option_strings = []
+        for option_string in args:
+            # error on strings that don't start with an appropriate prefix
+            if not option_string[0] in self.prefix_chars:
+                msg = _('invalid option string %r: '
+                        'must start with a character %r')
+                tup = option_string, self.prefix_chars
+                raise ValueError(msg % tup)
+
+            # strings starting with two prefix characters are long options
+            option_strings.append(option_string)
+            if option_string[0] in self.prefix_chars:
+                if len(option_string) > 1:
+                    if option_string[1] in self.prefix_chars:
+                        long_option_strings.append(option_string)
+
+        # infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x'
+        dest = kwargs.pop('dest', None)
+        if dest is None:
+            if long_option_strings:
+                dest_option_string = long_option_strings[0]
+            else:
+                dest_option_string = option_strings[0]
+            dest = dest_option_string.lstrip(self.prefix_chars)
+            if not dest:
+                msg = _('dest= is required for options like %r')
+                raise ValueError(msg % option_string)
+            dest = dest.replace('-', '_')
+
+        # return the updated keyword arguments
+        return dict(kwargs, dest=dest, option_strings=option_strings)
+
+    def _pop_action_class(self, kwargs, default=None):
+        action = kwargs.pop('action', default)
+        return self._registry_get('action', action, action)
+
+    def _get_handler(self):
+        # determine function from conflict handler string
+        handler_func_name = '_handle_conflict_%s' % self.conflict_handler
+        try:
+            return getattr(self, handler_func_name)
+        except AttributeError:
+            msg = _('invalid conflict_resolution value: %r')
+            raise ValueError(msg % self.conflict_handler)
+
+    def _check_conflict(self, action):
+
+        # find all options that conflict with this option
+        confl_optionals = []
+        for option_string in action.option_strings:
+            if option_string in self._option_string_actions:
+                confl_optional = self._option_string_actions[option_string]
+                confl_optionals.append((option_string, confl_optional))
+
+        # resolve any conflicts
+        if confl_optionals:
+            conflict_handler = self._get_handler()
+            conflict_handler(action, confl_optionals)
+
+    def _handle_conflict_error(self, action, conflicting_actions):
+        message = _('conflicting option string(s): %s')
+        conflict_string = ', '.join([option_string
+                                     for option_string, action
+                                     in conflicting_actions])
+        raise ArgumentError(action, message % conflict_string)
+
+    def _handle_conflict_resolve(self, action, conflicting_actions):
+
+        # remove all conflicting options
+        for option_string, action in conflicting_actions:
+
+            # remove the conflicting option
+            action.option_strings.remove(option_string)
+            self._option_string_actions.pop(option_string, None)
+
+            # if the option now has no option string, remove it from the
+            # container holding it
+            if not action.option_strings:
+                action.container._remove_action(action)
+
+
+class _ArgumentGroup(_ActionsContainer):
+
+    def __init__(self, container, title=None, description=None, **kwargs):
+        # add any missing keyword arguments by checking the container
+        update = kwargs.setdefault
+        update('conflict_handler', container.conflict_handler)
+        update('prefix_chars', container.prefix_chars)
+        update('argument_default', container.argument_default)
+        super_init = super(_ArgumentGroup, self).__init__
+        super_init(description=description, **kwargs)
+
+        # group attributes
+        self.title = title
+        self._group_actions = []
+
+        # share most attributes with the container
+        self._registries = container._registries
+        self._actions = container._actions
+        self._option_string_actions = container._option_string_actions
+        self._defaults = container._defaults
+        self._has_negative_number_optionals = \
+            container._has_negative_number_optionals
+
+    def _add_action(self, action):
+        action = super(_ArgumentGroup, self)._add_action(action)
+        self._group_actions.append(action)
+        return action
+
+    def _remove_action(self, action):
+        super(_ArgumentGroup, self)._remove_action(action)
+        self._group_actions.remove(action)
+
+
+class _MutuallyExclusiveGroup(_ArgumentGroup):
+
+    def __init__(self, container, required=False):
+        super(_MutuallyExclusiveGroup, self).__init__(container)
+        self.required = required
+        self._container = container
+
+    def _add_action(self, action):
+        if action.required:
+            msg = _('mutually exclusive arguments must be optional')
+            raise ValueError(msg)
+        action = self._container._add_action(action)
+        self._group_actions.append(action)
+        return action
+
+    def _remove_action(self, action):
+        self._container._remove_action(action)
+        self._group_actions.remove(action)
+
+
+class ArgumentParser(_AttributeHolder, _ActionsContainer):
+    """Object for parsing command line strings into Python objects.
+
+    Keyword Arguments:
+        - prog -- The name of the program (default: sys.argv[0])
+        - usage -- A usage message (default: auto-generated from arguments)
+        - description -- A description of what the program does
+        - epilog -- Text following the argument descriptions
+        - parents -- Parsers whose arguments should be copied into this one
+        - formatter_class -- HelpFormatter class for printing help messages
+        - prefix_chars -- Characters that prefix optional arguments
+        - fromfile_prefix_chars -- Characters that prefix files containing
+            additional arguments
+        - argument_default -- The default value for all arguments
+        - conflict_handler -- String indicating how to handle conflicts
+        - add_help -- Add a -h/-help option
+    """
+
+    def __init__(self,
+                 prog=None,
+                 usage=None,
+                 description=None,
+                 epilog=None,
+                 version=None,
+                 parents=[],
+                 formatter_class=HelpFormatter,
+                 prefix_chars='-',
+                 fromfile_prefix_chars=None,
+                 argument_default=None,
+                 conflict_handler='error',
+                 add_help=True):
+
+        if version is not None:
+            import warnings
+            warnings.warn(
+                """The "version" argument to ArgumentParser is deprecated. """
+                """Please use """
+                """"add_argument(..., action='version', version="N", ...)" """
+                """instead""", DeprecationWarning)
+
+        superinit = super(ArgumentParser, self).__init__
+        superinit(description=description,
+                  prefix_chars=prefix_chars,
+                  argument_default=argument_default,
+                  conflict_handler=conflict_handler)
+
+        # default setting for prog
+        if prog is None:
+            prog = _os.path.basename(_sys.argv[0])
+
+        self.prog = prog
+        self.usage = usage
+        self.epilog = epilog
+        self.version = version
+        self.formatter_class = formatter_class
+        self.fromfile_prefix_chars = fromfile_prefix_chars
+        self.add_help = add_help
+
+        add_group = self.add_argument_group
+        self._positionals = add_group(_('positional arguments'))
+        self._optionals = add_group(_('optional arguments'))
+        self._subparsers = None
+
+        # register types
+        def identity(string):
+            return string
+        self.register('type', None, identity)
+
+        # add help and version arguments if necessary
+        # (using explicit default to override global argument_default)
+        if '-' in prefix_chars:
+            default_prefix = '-'
+        else:
+            default_prefix = prefix_chars[0]
+        if self.add_help:
+            self.add_argument(
+                default_prefix+'h', default_prefix*2+'help',
+                action='help', default=SUPPRESS,
+                help=_('show this help message and exit'))
+        if self.version:
+            self.add_argument(
+                default_prefix+'v', default_prefix*2+'version',
+                action='version', default=SUPPRESS,
+                version=self.version,
+                help=_("show program's version number and exit"))
+
+        # add parent arguments and defaults
+        for parent in parents:
+            self._add_container_actions(parent)
+            try:
+                defaults = parent._defaults
+            except AttributeError:
+                pass
+            else:
+                self._defaults.update(defaults)
+
+    # =======================
+    # Pretty __repr__ methods
+    # =======================
+    def _get_kwargs(self):
+        names = [
+            'prog',
+            'usage',
+            'description',
+            'version',
+            'formatter_class',
+            'conflict_handler',
+            'add_help',
+        ]
+        return [(name, getattr(self, name)) for name in names]
+
+    # ==================================
+    # Optional/Positional adding methods
+    # ==================================
+    def add_subparsers(self, **kwargs):
+        if self._subparsers is not None:
+            self.error(_('cannot have multiple subparser arguments'))
+
+        # add the parser class to the arguments if it's not present
+        kwargs.setdefault('parser_class', type(self))
+
+        if 'title' in kwargs or 'description' in kwargs:
+            title = _(kwargs.pop('title', 'subcommands'))
+            description = _(kwargs.pop('description', None))
+            self._subparsers = self.add_argument_group(title, description)
+        else:
+            self._subparsers = self._positionals
+
+        # prog defaults to the usage message of this parser, skipping
+        # optional arguments and with no "usage:" prefix
+        if kwargs.get('prog') is None:
+            formatter = self._get_formatter()
+            positionals = self._get_positional_actions()
+            groups = self._mutually_exclusive_groups
+            formatter.add_usage(self.usage, positionals, groups, '')
+            kwargs['prog'] = formatter.format_help().strip()
+
+        # create the parsers action and add it to the positionals list
+        parsers_class = self._pop_action_class(kwargs, 'parsers')
+        action = parsers_class(option_strings=[], **kwargs)
+        self._subparsers._add_action(action)
+
+        # return the created parsers action
+        return action
+
+    def _add_action(self, action):
+        if action.option_strings:
+            self._optionals._add_action(action)
+        else:
+            self._positionals._add_action(action)
+        return action
+
+    def _get_optional_actions(self):
+        return [action
+                for action in self._actions
+                if action.option_strings]
+
+    def _get_positional_actions(self):
+        return [action
+                for action in self._actions
+                if not action.option_strings]
+
+    # =====================================
+    # Command line argument parsing methods
+    # =====================================
+    def parse_args(self, args=None, namespace=None):
+        args, argv = self.parse_known_args(args, namespace)
+        if argv:
+            msg = _('unrecognized arguments: %s')
+            self.error(msg % ' '.join(argv))
+        return args
+
+    def parse_known_args(self, args=None, namespace=None):
+        # args default to the system args
+        if args is None:
+            args = _sys.argv[1:]
+
+        # default Namespace built from parser defaults
+        if namespace is None:
+            namespace = Namespace()
+
+        # add any action defaults that aren't present
+        for action in self._actions:
+            if action.dest is not SUPPRESS:
+                if not hasattr(namespace, action.dest):
+                    if action.default is not SUPPRESS:
+                        default = action.default
+                        if isinstance(action.default, basestring):
+                            default = self._get_value(action, default)
+                        setattr(namespace, action.dest, default)
+
+        # add any parser defaults that aren't present
+        for dest in self._defaults:
+            if not hasattr(namespace, dest):
+                setattr(namespace, dest, self._defaults[dest])
+
+        # parse the arguments and exit if there are any errors
+        try:
+            namespace, args = self._parse_known_args(args, namespace)
+            if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR):
+                args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))
+                delattr(namespace, _UNRECOGNIZED_ARGS_ATTR)
+            return namespace, args
+        except ArgumentError:
+            err = _sys.exc_info()[1]
+            self.error(str(err))
+
+    def _parse_known_args(self, arg_strings, namespace):
+        # replace arg strings that are file references
+        if self.fromfile_prefix_chars is not None:
+            arg_strings = self._read_args_from_files(arg_strings)
+
+        # map all mutually exclusive arguments to the other arguments
+        # they can't occur with
+        action_conflicts = {}
+        for mutex_group in self._mutually_exclusive_groups:
+            group_actions = mutex_group._group_actions
+            for i, mutex_action in enumerate(mutex_group._group_actions):
+                conflicts = action_conflicts.setdefault(mutex_action, [])
+                conflicts.extend(group_actions[:i])
+                conflicts.extend(group_actions[i + 1:])
+
+        # find all option indices, and determine the arg_string_pattern
+        # which has an 'O' if there is an option at an index,
+        # an 'A' if there is an argument, or a '-' if there is a '--'
+        option_string_indices = {}
+        arg_string_pattern_parts = []
+        arg_strings_iter = iter(arg_strings)
+        for i, arg_string in enumerate(arg_strings_iter):
+
+            # all args after -- are non-options
+            if arg_string == '--':
+                arg_string_pattern_parts.append('-')
+                for arg_string in arg_strings_iter:
+                    arg_string_pattern_parts.append('A')
+
+            # otherwise, add the arg to the arg strings
+            # and note the index if it was an option
+            else:
+                option_tuple = self._parse_optional(arg_string)
+                if option_tuple is None:
+                    pattern = 'A'
+                else:
+                    option_string_indices[i] = option_tuple
+                    pattern = 'O'
+                arg_string_pattern_parts.append(pattern)
+
+        # join the pieces together to form the pattern
+        arg_strings_pattern = ''.join(arg_string_pattern_parts)
+
+        # converts arg strings to the appropriate and then takes the action
+        seen_actions = set()
+        seen_non_default_actions = set()
+
+        def take_action(action, argument_strings, option_string=None):
+            seen_actions.add(action)
+            argument_values = self._get_values(action, argument_strings)
+
+            # error if this argument is not allowed with other previously
+            # seen arguments, assuming that actions that use the default
+            # value don't really count as "present"
+            if argument_values is not action.default:
+                seen_non_default_actions.add(action)
+                for conflict_action in action_conflicts.get(action, []):
+                    if conflict_action in seen_non_default_actions:
+                        msg = _('not allowed with argument %s')
+                        action_name = _get_action_name(conflict_action)
+                        raise ArgumentError(action, msg % action_name)
+
+            # take the action if we didn't receive a SUPPRESS value
+            # (e.g. from a default)
+            if argument_values is not SUPPRESS:
+                action(self, namespace, argument_values, option_string)
+
+        # function to convert arg_strings into an optional action
+        def consume_optional(start_index):
+
+            # get the optional identified at this index
+            option_tuple = option_string_indices[start_index]
+            action, option_string, explicit_arg = option_tuple
+
+            # identify additional optionals in the same arg string
+            # (e.g. -xyz is the same as -x -y -z if no args are required)
+            match_argument = self._match_argument
+            action_tuples = []
+            while True:
+
+                # if we found no optional action, skip it
+                if action is None:
+                    extras.append(arg_strings[start_index])
+                    return start_index + 1
+
+                # if there is an explicit argument, try to match the
+                # optional's string arguments to only this
+                if explicit_arg is not None:
+                    arg_count = match_argument(action, 'A')
+
+                    # if the action is a single-dash option and takes no
+                    # arguments, try to parse more single-dash options out
+                    # of the tail of the option string
+                    chars = self.prefix_chars
+                    if arg_count == 0 and option_string[1] not in chars:
+                        action_tuples.append((action, [], option_string))
+                        char = option_string[0]
+                        option_string = char + explicit_arg[0]
+                        new_explicit_arg = explicit_arg[1:] or None
+                        optionals_map = self._option_string_actions
+                        if option_string in optionals_map:
+                            action = optionals_map[option_string]
+                            explicit_arg = new_explicit_arg
+                        else:
+                            msg = _('ignored explicit argument %r')
+                            raise ArgumentError(action, msg % explicit_arg)
+
+                    # if the action expect exactly one argument, we've
+                    # successfully matched the option; exit the loop
+                    elif arg_count == 1:
+                        stop = start_index + 1
+                        args = [explicit_arg]
+                        action_tuples.append((action, args, option_string))
+                        break
+
+                    # error if a double-dash option did not use the
+                    # explicit argument
+                    else:
+                        msg = _('ignored explicit argument %r')
+                        raise ArgumentError(action, msg % explicit_arg)
+
+                # if there is no explicit argument, try to match the
+                # optional's string arguments with the following strings
+                # if successful, exit the loop
+                else:
+                    start = start_index + 1
+                    selected_patterns = arg_strings_pattern[start:]
+                    arg_count = match_argument(action, selected_patterns)
+                    stop = start + arg_count
+                    args = arg_strings[start:stop]
+                    action_tuples.append((action, args, option_string))
+                    break
+
+            # add the Optional to the list and return the index at which
+            # the Optional's string args stopped
+            assert action_tuples
+            for action, args, option_string in action_tuples:
+                take_action(action, args, option_string)
+            return stop
+
+        # the list of Positionals left to be parsed; this is modified
+        # by consume_positionals()
+        positionals = self._get_positional_actions()
+
+        # function to convert arg_strings into positional actions
+        def consume_positionals(start_index):
+            # match as many Positionals as possible
+            match_partial = self._match_arguments_partial
+            selected_pattern = arg_strings_pattern[start_index:]
+            arg_counts = match_partial(positionals, selected_pattern)
+
+            # slice off the appropriate arg strings for each Positional
+            # and add the Positional and its args to the list
+            for action, arg_count in zip(positionals, arg_counts):
+                args = arg_strings[start_index: start_index + arg_count]
+                start_index += arg_count
+                take_action(action, args)
+
+            # slice off the Positionals that we just parsed and return the
+            # index at which the Positionals' string args stopped
+            positionals[:] = positionals[len(arg_counts):]
+            return start_index
+
+        # consume Positionals and Optionals alternately, until we have
+        # passed the last option string
+        extras = []
+        start_index = 0
+        if option_string_indices:
+            max_option_string_index = max(option_string_indices)
+        else:
+            max_option_string_index = -1
+        while start_index <= max_option_string_index:
+
+            # consume any Positionals preceding the next option
+            next_option_string_index = min([
+                index
+                for index in option_string_indices
+                if index >= start_index])
+            if start_index != next_option_string_index:
+                positionals_end_index = consume_positionals(start_index)
+
+                # only try to parse the next optional if we didn't consume
+                # the option string during the positionals parsing
+                if positionals_end_index > start_index:
+                    start_index = positionals_end_index
+                    continue
+                else:
+                    start_index = positionals_end_index
+
+            # if we consumed all the positionals we could and we're not
+            # at the index of an option string, there were extra arguments
+            if start_index not in option_string_indices:
+                strings = arg_strings[start_index:next_option_string_index]
+                extras.extend(strings)
+                start_index = next_option_string_index
+
+            # consume the next optional and any arguments for it
+            start_index = consume_optional(start_index)
+
+        # consume any positionals following the last Optional
+        stop_index = consume_positionals(start_index)
+
+        # if we didn't consume all the argument strings, there were extras
+        extras.extend(arg_strings[stop_index:])
+
+        # if we didn't use all the Positional objects, there were too few
+        # arg strings supplied.
+        if positionals:
+            self.error(_('too few arguments'))
+
+        # make sure all required actions were present
+        for action in self._actions:
+            if action.required:
+                if action not in seen_actions:
+                    name = _get_action_name(action)
+                    self.error(_('argument %s is required') % name)
+
+        # make sure all required groups had one option present
+        for group in self._mutually_exclusive_groups:
+            if group.required:
+                for action in group._group_actions:
+                    if action in seen_non_default_actions:
+                        break
+
+                # if no actions were used, report the error
+                else:
+                    names = [_get_action_name(action)
+                             for action in group._group_actions
+                             if action.help is not SUPPRESS]
+                    msg = _('one of the arguments %s is required')
+                    self.error(msg % ' '.join(names))
+
+        # return the updated namespace and the extra arguments
+        return namespace, extras
+
+    def _read_args_from_files(self, arg_strings):
+        # expand arguments referencing files
+        new_arg_strings = []
+        for arg_string in arg_strings:
+
+            # for regular arguments, just add them back into the list
+            if arg_string[0] not in self.fromfile_prefix_chars:
+                new_arg_strings.append(arg_string)
+
+            # replace arguments referencing files with the file content
+            else:
+                try:
+                    args_file = open(arg_string[1:])
+                    try:
+                        arg_strings = []
+                        for arg_line in args_file.read().splitlines():
+                            for arg in self.convert_arg_line_to_args(arg_line):
+                                arg_strings.append(arg)
+                        arg_strings = self._read_args_from_files(arg_strings)
+                        new_arg_strings.extend(arg_strings)
+                    finally:
+                        args_file.close()
+                except IOError:
+                    err = _sys.exc_info()[1]
+                    self.error(str(err))
+
+        # return the modified argument list
+        return new_arg_strings
+
+    def convert_arg_line_to_args(self, arg_line):
+        return [arg_line]
+
+    def _match_argument(self, action, arg_strings_pattern):
+        # match the pattern for this action to the arg strings
+        nargs_pattern = self._get_nargs_pattern(action)
+        match = _re.match(nargs_pattern, arg_strings_pattern)
+
+        # raise an exception if we weren't able to find a match
+        if match is None:
+            nargs_errors = {
+                None: _('expected one argument'),
+                OPTIONAL: _('expected at most one argument'),
+                ONE_OR_MORE: _('expected at least one argument'),
+            }
+            default = _('expected %s argument(s)') % action.nargs
+            msg = nargs_errors.get(action.nargs, default)
+            raise ArgumentError(action, msg)
+
+        # return the number of arguments matched
+        return len(match.group(1))
+
+    def _match_arguments_partial(self, actions, arg_strings_pattern):
+        # progressively shorten the actions list by slicing off the
+        # final actions until we find a match
+        result = []
+        for i in range(len(actions), 0, -1):
+            actions_slice = actions[:i]
+            pattern = ''.join([self._get_nargs_pattern(action)
+                               for action in actions_slice])
+            match = _re.match(pattern, arg_strings_pattern)
+            if match is not None:
+                result.extend([len(string) for string in match.groups()])
+                break
+
+        # return the list of arg string counts
+        return result
+
+    def _parse_optional(self, arg_string):
+        # if it's an empty string, it was meant to be a positional
+        if not arg_string:
+            return None
+
+        # if it doesn't start with a prefix, it was meant to be positional
+        if not arg_string[0] in self.prefix_chars:
+            return None
+
+        # if the option string is present in the parser, return the action
+        if arg_string in self._option_string_actions:
+            action = self._option_string_actions[arg_string]
+            return action, arg_string, None
+
+        # if it's just a single character, it was meant to be positional
+        if len(arg_string) == 1:
+            return None
+
+        # if the option string before the "=" is present, return the action
+        if '=' in arg_string:
+            option_string, explicit_arg = arg_string.split('=', 1)
+            if option_string in self._option_string_actions:
+                action = self._option_string_actions[option_string]
+                return action, option_string, explicit_arg
+
+        # search through all possible prefixes of the option string
+        # and all actions in the parser for possible interpretations
+        option_tuples = self._get_option_tuples(arg_string)
+
+        # if multiple actions match, the option string was ambiguous
+        if len(option_tuples) > 1:
+            options = ', '.join([option_string
+                for action, option_string, explicit_arg in option_tuples])
+            tup = arg_string, options
+            self.error(_('ambiguous option: %s could match %s') % tup)
+
+        # if exactly one action matched, this segmentation is good,
+        # so return the parsed action
+        elif len(option_tuples) == 1:
+            option_tuple, = option_tuples
+            return option_tuple
+
+        # if it was not found as an option, but it looks like a negative
+        # number, it was meant to be positional
+        # unless there are negative-number-like options
+        if self._negative_number_matcher.match(arg_string):
+            if not self._has_negative_number_optionals:
+                return None
+
+        # if it contains a space, it was meant to be a positional
+        if ' ' in arg_string:
+            return None
+
+        # it was meant to be an optional but there is no such option
+        # in this parser (though it might be a valid option in a subparser)
+        return None, arg_string, None
+
+    def _get_option_tuples(self, option_string):
+        result = []
+
+        # option strings starting with two prefix characters are only
+        # split at the '='
+        chars = self.prefix_chars
+        if option_string[0] in chars and option_string[1] in chars:
+            if '=' in option_string:
+                option_prefix, explicit_arg = option_string.split('=', 1)
+            else:
+                option_prefix = option_string
+                explicit_arg = None
+            for option_string in self._option_string_actions:
+                if option_string.startswith(option_prefix):
+                    action = self._option_string_actions[option_string]
+                    tup = action, option_string, explicit_arg
+                    result.append(tup)
+
+        # single character options can be concatenated with their arguments
+        # but multiple character options always have to have their argument
+        # separate
+        elif option_string[0] in chars and option_string[1] not in chars:
+            option_prefix = option_string
+            explicit_arg = None
+            short_option_prefix = option_string[:2]
+            short_explicit_arg = option_string[2:]
+
+            for option_string in self._option_string_actions:
+                if option_string == short_option_prefix:
+                    action = self._option_string_actions[option_string]
+                    tup = action, option_string, short_explicit_arg
+                    result.append(tup)
+                elif option_string.startswith(option_prefix):
+                    action = self._option_string_actions[option_string]
+                    tup = action, option_string, explicit_arg
+                    result.append(tup)
+
+        # shouldn't ever get here
+        else:
+            self.error(_('unexpected option string: %s') % option_string)
+
+        # return the collected option tuples
+        return result
+
+    def _get_nargs_pattern(self, action):
+        # in all examples below, we have to allow for '--' args
+        # which are represented as '-' in the pattern
+        nargs = action.nargs
+
+        # the default (None) is assumed to be a single argument
+        if nargs is None:
+            nargs_pattern = '(-*A-*)'
+
+        # allow zero or one arguments
+        elif nargs == OPTIONAL:
+            nargs_pattern = '(-*A?-*)'
+
+        # allow zero or more arguments
+        elif nargs == ZERO_OR_MORE:
+            nargs_pattern = '(-*[A-]*)'
+
+        # allow one or more arguments
+        elif nargs == ONE_OR_MORE:
+            nargs_pattern = '(-*A[A-]*)'
+
+        # allow any number of options or arguments
+        elif nargs == REMAINDER:
+            nargs_pattern = '([-AO]*)'
+
+        # allow one argument followed by any number of options or arguments
+        elif nargs == PARSER:
+            nargs_pattern = '(-*A[-AO]*)'
+
+        # all others should be integers
+        else:
+            nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs)
+
+        # if this is an optional action, -- is not allowed
+        if action.option_strings:
+            nargs_pattern = nargs_pattern.replace('-*', '')
+            nargs_pattern = nargs_pattern.replace('-', '')
+
+        # return the pattern
+        return nargs_pattern
+
+    # ========================
+    # Value conversion methods
+    # ========================
+    def _get_values(self, action, arg_strings):
+        # for everything but PARSER args, strip out '--'
+        if action.nargs not in [PARSER, REMAINDER]:
+            arg_strings = [s for s in arg_strings if s != '--']
+
+        # optional argument produces a default when not present
+        if not arg_strings and action.nargs == OPTIONAL:
+            if action.option_strings:
+                value = action.const
+            else:
+                value = action.default
+            if isinstance(value, basestring):
+                value = self._get_value(action, value)
+                self._check_value(action, value)
+
+        # when nargs='*' on a positional, if there were no command-line
+        # args, use the default if it is anything other than None
+        elif (not arg_strings and action.nargs == ZERO_OR_MORE and
+              not action.option_strings):
+            if action.default is not None:
+                value = action.default
+            else:
+                value = arg_strings
+            self._check_value(action, value)
+
+        # single argument or optional argument produces a single value
+        elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]:
+            arg_string, = arg_strings
+            value = self._get_value(action, arg_string)
+            self._check_value(action, value)
+
+        # REMAINDER arguments convert all values, checking none
+        elif action.nargs == REMAINDER:
+            value = [self._get_value(action, v) for v in arg_strings]
+
+        # PARSER arguments convert all values, but check only the first
+        elif action.nargs == PARSER:
+            value = [self._get_value(action, v) for v in arg_strings]
+            self._check_value(action, value[0])
+
+        # all other types of nargs produce a list
+        else:
+            value = [self._get_value(action, v) for v in arg_strings]
+            for v in value:
+                self._check_value(action, v)
+
+        # return the converted value
+        return value
+
+    def _get_value(self, action, arg_string):
+        type_func = self._registry_get('type', action.type, action.type)
+        if not _callable(type_func):
+            msg = _('%r is not callable')
+            raise ArgumentError(action, msg % type_func)
+
+        # convert the value to the appropriate type
+        try:
+            result = type_func(arg_string)
+
+        # ArgumentTypeErrors indicate errors
+        except ArgumentTypeError:
+            name = getattr(action.type, '__name__', repr(action.type))
+            msg = str(_sys.exc_info()[1])
+            raise ArgumentError(action, msg)
+
+        # TypeErrors or ValueErrors also indicate errors
+        except (TypeError, ValueError):
+            name = getattr(action.type, '__name__', repr(action.type))
+            msg = _('invalid %s value: %r')
+            raise ArgumentError(action, msg % (name, arg_string))
+
+        # return the converted value
+        return result
+
+    def _check_value(self, action, value):
+        # converted value must be one of the choices (if specified)
+        if action.choices is not None and value not in action.choices:
+            tup = value, ', '.join(map(repr, action.choices))
+            msg = _('invalid choice: %r (choose from %s)') % tup
+            raise ArgumentError(action, msg)
+
+    # =======================
+    # Help-formatting methods
+    # =======================
+    def format_usage(self):
+        formatter = self._get_formatter()
+        formatter.add_usage(self.usage, self._actions,
+                            self._mutually_exclusive_groups)
+        return formatter.format_help()
+
+    def format_help(self):
+        formatter = self._get_formatter()
+
+        # usage
+        formatter.add_usage(self.usage, self._actions,
+                            self._mutually_exclusive_groups)
+
+        # description
+        formatter.add_text(self.description)
+
+        # positionals, optionals and user-defined groups
+        for action_group in self._action_groups:
+            formatter.start_section(action_group.title)
+            formatter.add_text(action_group.description)
+            formatter.add_arguments(action_group._group_actions)
+            formatter.end_section()
+
+        # epilog
+        formatter.add_text(self.epilog)
+
+        # determine help from format above
+        return formatter.format_help()
+
+    def format_version(self):
+        import warnings
+        warnings.warn(
+            'The format_version method is deprecated -- the "version" '
+            'argument to ArgumentParser is no longer supported.',
+            DeprecationWarning)
+        formatter = self._get_formatter()
+        formatter.add_text(self.version)
+        return formatter.format_help()
+
+    def _get_formatter(self):
+        return self.formatter_class(prog=self.prog)
+
+    # =====================
+    # Help-printing methods
+    # =====================
+    def print_usage(self, file=None):
+        if file is None:
+            file = _sys.stdout
+        self._print_message(self.format_usage(), file)
+
+    def print_help(self, file=None):
+        if file is None:
+            file = _sys.stdout
+        self._print_message(self.format_help(), file)
+
+    def print_version(self, file=None):
+        import warnings
+        warnings.warn(
+            'The print_version method is deprecated -- the "version" '
+            'argument to ArgumentParser is no longer supported.',
+            DeprecationWarning)
+        self._print_message(self.format_version(), file)
+
+    def _print_message(self, message, file=None):
+        if message:
+            if file is None:
+                file = _sys.stderr
+            file.write(message)
+
+    # ===============
+    # Exiting methods
+    # ===============
+    def exit(self, status=0, message=None):
+        if message:
+            self._print_message(message, _sys.stderr)
+        _sys.exit(status)
+
+    def error(self, message):
+        """error(message: string)
+
+        Prints a usage message incorporating the message to stderr and
+        exits.
+
+        If you override this in a subclass, it should not return -- it
+        should either exit or raise an exception.
+        """
+        self.print_usage(_sys.stderr)
+        self.exit(2, _('%s: error: %s\n') % (self.prog, message))
diff --git a/astropy/utils/compat/_fractions_27.py b/astropy/utils/compat/_fractions_py2/__init__.py
similarity index 100%
rename from astropy/utils/compat/_fractions_27.py
rename to astropy/utils/compat/_fractions_py2/__init__.py
diff --git a/astropy/utils/compat/_gzip_32.py b/astropy/utils/compat/_gzip_32.py
deleted file mode 100644
index ba2149e..0000000
--- a/astropy/utils/compat/_gzip_32.py
+++ /dev/null
@@ -1,625 +0,0 @@
-"""Functions that read and write gzipped files.
-
-The user of the file doesn't have to worry about the compression,
-but random access is not allowed."""
-
-# based on Andrew Kuchling's minigzip.py distributed with the zlib module
-
-import struct, sys, time, os
-import zlib
-import builtins
-import io
-
-__all__ = ["GzipFile", "open", "compress", "decompress"]
-
-FTEXT, FHCRC, FEXTRA, FNAME, FCOMMENT = 1, 2, 4, 8, 16
-
-READ, WRITE = 1, 2
-
-def U32(i):
-    """Return i as an unsigned integer, assuming it fits in 32 bits.
-    If it's >= 2GB when viewed as a 32-bit unsigned int, return a long.
-    """
-    if i < 0:
-        i += 1 << 32
-    return i
-
-def LOWU32(i):
-    """Return the low-order 32 bits, as a non-negative int"""
-    return i & 0xFFFFFFFF
-
-def write32u(output, value):
-    # The L format writes the bit pattern correctly whether signed
-    # or unsigned.
-    output.write(struct.pack("<L", value))
-
-def read32(input):
-    return struct.unpack("<I", input.read(4))[0]
-
-def open(filename, mode="rb", compresslevel=9):
-    """Shorthand for GzipFile(filename, mode, compresslevel).
-
-    The filename argument is required; mode defaults to 'rb'
-    and compresslevel defaults to 9.
-
-    """
-    return GzipFile(filename, mode, compresslevel)
-
-class _PaddedFile:
-    """Minimal read-only file object that prepends a string to the contents
-    of an actual file. Shouldn't be used outside of gzip.py, as it lacks
-    essential functionality."""
-
-    def __init__(self, f, prepend=b''):
-        self._buffer = prepend
-        self._length = len(prepend)
-        self.file = f
-        self._read = 0
-
-    def read(self, size):
-        if self._read is None:
-            return self.file.read(size)
-        if self._read + size <= self._length:
-            read = self._read
-            self._read += size
-            return self._buffer[read:self._read]
-        else:
-            read = self._read
-            self._read = None
-            return self._buffer[read:] + \
-                   self.file.read(size-self._length+read)
-
-    def prepend(self, prepend=b'', readprevious=False):
-        if self._read is None:
-            self._buffer = prepend
-        elif readprevious and len(prepend) <= self._read:
-            self._read -= len(prepend)
-            return
-        else:
-            self._buffer = self._buffer[read:] + prepend
-        self._length = len(self._buffer)
-        self._read = 0
-
-    def unused(self):
-        if self._read is None:
-            return b''
-        return self._buffer[self._read:]
-
-    def seek(self, offset, whence=0):
-        # This is only ever called with offset=whence=0
-        if whence == 1 and self._read is not None:
-            if 0 <= offset + self._read <= self._length:
-                self._read += offset
-                return
-            else:
-                offset += self._length - self._read
-        self._read = None
-        self._buffer = None
-        return self.file.seek(offset, whence)
-
-    def __getattr__(self, name):
-        return getattr(self.file, name)
-
-
-class GzipFile(io.BufferedIOBase):
-    """The GzipFile class simulates most of the methods of a file object with
-    the exception of the readinto() and truncate() methods.
-
-    """
-
-    myfileobj = None
-    max_read_chunk = 10 * 1024 * 1024   # 10Mb
-
-    def __init__(self, filename=None, mode=None,
-                 compresslevel=9, fileobj=None, mtime=None):
-        """Constructor for the GzipFile class.
-
-        At least one of fileobj and filename must be given a
-        non-trivial value.
-
-        The new class instance is based on fileobj, which can be a regular
-        file, a StringIO object, or any other object which simulates a file.
-        It defaults to None, in which case filename is opened to provide
-        a file object.
-
-        When fileobj is not None, the filename argument is only used to be
-        included in the gzip file header, which may includes the original
-        filename of the uncompressed file.  It defaults to the filename of
-        fileobj, if discernible; otherwise, it defaults to the empty string,
-        and in this case the original filename is not included in the header.
-
-        The mode argument can be any of 'r', 'rb', 'a', 'ab', 'w', or 'wb',
-        depending on whether the file will be read or written.  The default
-        is the mode of fileobj if discernible; otherwise, the default is 'rb'.
-        Be aware that only the 'rb', 'ab', and 'wb' values should be used
-        for cross-platform portability.
-
-        The compresslevel argument is an integer from 1 to 9 controlling the
-        level of compression; 1 is fastest and produces the least compression,
-        and 9 is slowest and produces the most compression.  The default is 9.
-
-        The mtime argument is an optional numeric timestamp to be written
-        to the stream when compressing.  All gzip compressed streams
-        are required to contain a timestamp.  If omitted or None, the
-        current time is used.  This module ignores the timestamp when
-        decompressing; however, some programs, such as gunzip, make use
-        of it.  The format of the timestamp is the same as that of the
-        return value of time.time() and of the st_mtime member of the
-        object returned by os.stat().
-
-        """
-
-        # guarantee the file is opened in binary mode on platforms
-        # that care about that sort of thing
-        if mode and 'b' not in mode:
-            mode += 'b'
-        if fileobj is None:
-            fileobj = self.myfileobj = builtins.open(filename, mode or 'rb')
-        if filename is None:
-            if hasattr(fileobj, 'name'): filename = fileobj.name
-            else: filename = ''
-        if mode is None:
-            if hasattr(fileobj, 'mode'): mode = fileobj.mode
-            else: mode = 'rb'
-
-        if mode[0:1] == 'r':
-            self.mode = READ
-            # Set flag indicating start of a new member
-            self._new_member = True
-            # Buffer data read from gzip file. extrastart is offset in
-            # stream where buffer starts. extrasize is number of
-            # bytes remaining in buffer from current stream position.
-            self.extrabuf = b""
-            self.extrasize = 0
-            self.extrastart = 0
-            self.name = filename
-            # Starts small, scales exponentially
-            self.min_readsize = 100
-            fileobj = _PaddedFile(fileobj)
-
-        elif mode[0:1] == 'w' or mode[0:1] == 'a':
-            self.mode = WRITE
-            self._init_write(filename)
-            self.compress = zlib.compressobj(compresslevel,
-                                             zlib.DEFLATED,
-                                             -zlib.MAX_WBITS,
-                                             zlib.DEF_MEM_LEVEL,
-                                             0)
-        else:
-            raise IOError("Mode " + mode + " not supported")
-
-        self.fileobj = fileobj
-        self.offset = 0
-        self.mtime = mtime
-
-        if self.mode == WRITE:
-            self._write_gzip_header()
-
-    @property
-    def filename(self):
-        import warnings
-        warnings.warn("use the name attribute", DeprecationWarning, 2)
-        if self.mode == WRITE and self.name[-3:] != ".gz":
-            return self.name + ".gz"
-        return self.name
-
-    def __repr__(self):
-        fileobj = self.fileobj
-        if isinstance(fileobj, _PaddedFile):
-            fileobj = fileobj.file
-        s = repr(fileobj)
-        return '<gzip ' + s[1:-1] + ' ' + hex(id(self)) + '>'
-
-    def _check_closed(self):
-        """Raises a ValueError if the underlying file object has been closed.
-
-        """
-        if self.closed:
-            raise ValueError('I/O operation on closed file.')
-
-    def _init_write(self, filename):
-        self.name = filename
-        self.crc = zlib.crc32(b"") & 0xffffffff
-        self.size = 0
-        self.writebuf = []
-        self.bufsize = 0
-
-    def _write_gzip_header(self):
-        self.fileobj.write(b'\037\213')             # magic header
-        self.fileobj.write(b'\010')                 # compression method
-        try:
-            # RFC 1952 requires the FNAME field to be Latin-1. Do not
-            # include filenames that cannot be represented that way.
-            fname = os.path.basename(self.name)
-            fname = fname.encode('latin-1')
-            if fname.endswith(b'.gz'):
-                fname = fname[:-3]
-        except UnicodeEncodeError:
-            fname = b''
-        flags = 0
-        if fname:
-            flags = FNAME
-        self.fileobj.write(chr(flags).encode('latin-1'))
-        mtime = self.mtime
-        if mtime is None:
-            mtime = time.time()
-        write32u(self.fileobj, int(mtime))
-        self.fileobj.write(b'\002')
-        self.fileobj.write(b'\377')
-        if fname:
-            self.fileobj.write(fname + b'\000')
-
-    def _init_read(self):
-        self.crc = zlib.crc32(b"") & 0xffffffff
-        self.size = 0
-
-    def _read_gzip_header(self):
-        magic = self.fileobj.read(2)
-        if magic == b'':
-            raise EOFError("Reached EOF")
-
-        if magic != b'\037\213':
-            raise IOError('Not a gzipped file')
-        method = ord( self.fileobj.read(1) )
-        if method != 8:
-            raise IOError('Unknown compression method')
-        flag = ord( self.fileobj.read(1) )
-        self.mtime = read32(self.fileobj)
-        # extraflag = self.fileobj.read(1)
-        # os = self.fileobj.read(1)
-        self.fileobj.read(2)
-
-        if flag & FEXTRA:
-            # Read & discard the extra field, if present
-            xlen = ord(self.fileobj.read(1))
-            xlen = xlen + 256*ord(self.fileobj.read(1))
-            self.fileobj.read(xlen)
-        if flag & FNAME:
-            # Read and discard a null-terminated string containing the filename
-            while True:
-                s = self.fileobj.read(1)
-                if not s or s==b'\000':
-                    break
-        if flag & FCOMMENT:
-            # Read and discard a null-terminated string containing a comment
-            while True:
-                s = self.fileobj.read(1)
-                if not s or s==b'\000':
-                    break
-        if flag & FHCRC:
-            self.fileobj.read(2)     # Read & discard the 16-bit header CRC
-
-        unused = self.fileobj.unused()
-        if unused:
-            uncompress = self.decompress.decompress(unused)
-            self._add_read_data(uncompress)
-
-    def write(self,data):
-        self._check_closed()
-        if self.mode != WRITE:
-            import errno
-            raise IOError(errno.EBADF, "write() on read-only GzipFile object")
-
-        if self.fileobj is None:
-            raise ValueError("write() on closed GzipFile object")
-
-        # Convert data type if called by io.BufferedWriter.
-        if isinstance(data, memoryview):
-            data = data.tobytes()
-
-        if len(data) > 0:
-            self.size = self.size + len(data)
-            self.crc = zlib.crc32(data, self.crc) & 0xffffffff
-            self.fileobj.write( self.compress.compress(data) )
-            self.offset += len(data)
-
-        return len(data)
-
-    def read(self, size=-1):
-        self._check_closed()
-        if self.mode != READ:
-            import errno
-            raise IOError(errno.EBADF, "read() on write-only GzipFile object")
-
-        if self.extrasize <= 0 and self.fileobj is None:
-            return b''
-
-        readsize = 1024
-        if size < 0:        # get the whole thing
-            try:
-                while True:
-                    self._read(readsize)
-                    readsize = min(self.max_read_chunk, readsize * 2)
-            except EOFError:
-                size = self.extrasize
-        else:               # just get some more of it
-            try:
-                while size > self.extrasize:
-                    self._read(readsize)
-                    readsize = min(self.max_read_chunk, readsize * 2)
-            except EOFError:
-                if size > self.extrasize:
-                    size = self.extrasize
-
-        offset = self.offset - self.extrastart
-        chunk = self.extrabuf[offset: offset + size]
-        self.extrasize = self.extrasize - size
-
-        self.offset += size
-        return chunk
-
-    def peek(self, n):
-        if self.mode != READ:
-            import errno
-            raise IOError(errno.EBADF, "peek() on write-only GzipFile object")
-
-        # Do not return ridiculously small buffers, for one common idiom
-        # is to call peek(1) and expect more bytes in return.
-        if n < 100:
-            n = 100
-        if self.extrasize == 0:
-            if self.fileobj is None:
-                return b''
-            try:
-                # 1024 is the same buffering heuristic used in read()
-                self._read(max(n, 1024))
-            except EOFError:
-                pass
-        offset = self.offset - self.extrastart
-        remaining = self.extrasize
-        assert remaining == len(self.extrabuf) - offset
-        return self.extrabuf[offset:offset + n]
-
-    def _unread(self, buf):
-        self.extrasize = len(buf) + self.extrasize
-        self.offset -= len(buf)
-
-    def _read(self, size=1024):
-        if self.fileobj is None:
-            raise EOFError("Reached EOF")
-
-        if self._new_member:
-            # If the _new_member flag is set, we have to
-            # jump to the next member, if there is one.
-            self._init_read()
-            self._read_gzip_header()
-            self.decompress = zlib.decompressobj(-zlib.MAX_WBITS)
-            self._new_member = False
-
-        # Read a chunk of data from the file
-        buf = self.fileobj.read(size)
-
-        # If the EOF has been reached, flush the decompression object
-        # and mark this object as finished.
-
-        if buf == b"":
-            uncompress = self.decompress.flush()
-            # Prepend the already read bytes to the fileobj to they can be
-            # seen by _read_eof()
-            self.fileobj.prepend(self.decompress.unused_data, True)
-            self._read_eof()
-            self._add_read_data( uncompress )
-            raise EOFError('Reached EOF')
-
-        uncompress = self.decompress.decompress(buf)
-        self._add_read_data( uncompress )
-
-        if self.decompress.unused_data != b"":
-            # Ending case: we've come to the end of a member in the file,
-            # so seek back to the start of the unused data, finish up
-            # this member, and read a new gzip header.
-            # Prepend the already read bytes to the fileobj to they can be
-            # seen by _read_eof() and _read_gzip_header()
-            self.fileobj.prepend(self.decompress.unused_data, True)
-            # Check the CRC and file size, and set the flag so we read
-            # a new member on the next call
-            self._read_eof()
-            self._new_member = True
-
-    def _add_read_data(self, data):
-        self.crc = zlib.crc32(data, self.crc) & 0xffffffff
-        offset = self.offset - self.extrastart
-        self.extrabuf = self.extrabuf[offset:] + data
-        self.extrasize = self.extrasize + len(data)
-        self.extrastart = self.offset
-        self.size = self.size + len(data)
-
-    def _read_eof(self):
-        # We've read to the end of the file
-        # We check the that the computed CRC and size of the
-        # uncompressed data matches the stored values.  Note that the size
-        # stored is the true file size mod 2**32.
-        crc32 = read32(self.fileobj)
-        isize = read32(self.fileobj)  # may exceed 2GB
-        if crc32 != self.crc:
-            raise IOError("CRC check failed %s != %s" % (hex(crc32),
-                                                         hex(self.crc)))
-        elif isize != (self.size & 0xffffffff):
-            raise IOError("Incorrect length of data produced")
-
-        # Gzip files can be padded with zeroes and still have archives.
-        # Consume all zero bytes and set the file position to the first
-        # non-zero byte. See http://www.gzip.org/#faq8
-        c = b"\x00"
-        while c == b"\x00":
-            c = self.fileobj.read(1)
-        if c:
-            self.fileobj.prepend(c, True)
-
-    @property
-    def closed(self):
-        return self.fileobj is None
-
-    def close(self):
-        if self.fileobj is None:
-            return
-        if self.mode == WRITE:
-            self.fileobj.write(self.compress.flush())
-            write32u(self.fileobj, self.crc)
-            # self.size may exceed 2GB, or even 4GB
-            write32u(self.fileobj, self.size & 0xffffffff)
-            self.fileobj = None
-        elif self.mode == READ:
-            self.fileobj = None
-        if self.myfileobj:
-            self.myfileobj.close()
-            self.myfileobj = None
-
-    def flush(self,zlib_mode=zlib.Z_SYNC_FLUSH):
-        self._check_closed()
-        if self.mode == WRITE:
-            # Ensure the compressor's buffer is flushed
-            self.fileobj.write(self.compress.flush(zlib_mode))
-            self.fileobj.flush()
-
-    def fileno(self):
-        """Invoke the underlying file object's fileno() method.
-
-        This will raise AttributeError if the underlying file object
-        doesn't support fileno().
-        """
-        return self.fileobj.fileno()
-
-    def rewind(self):
-        '''Return the uncompressed stream file position indicator to the
-        beginning of the file'''
-        if self.mode != READ:
-            raise IOError("Can't rewind in write mode")
-        self.fileobj.seek(0)
-        self._new_member = True
-        self.extrabuf = b""
-        self.extrasize = 0
-        self.extrastart = 0
-        self.offset = 0
-
-    def readable(self):
-        return self.mode == READ
-
-    def writable(self):
-        return self.mode == WRITE
-
-    def seekable(self):
-        return True
-
-    def seek(self, offset, whence=0):
-        if whence:
-            if whence == 1:
-                offset = self.offset + offset
-            else:
-                raise ValueError('Seek from end not supported')
-        if self.mode == WRITE:
-            if offset < self.offset:
-                raise IOError('Negative seek in write mode')
-            count = offset - self.offset
-            chunk = bytes(1024)
-            for i in range(count // 1024):
-                self.write(chunk)
-            self.write(bytes(count % 1024))
-        elif self.mode == READ:
-            if offset < self.offset:
-                # for negative seek, rewind and do positive seek
-                self.rewind()
-            count = offset - self.offset
-            for i in range(count // 1024):
-                self.read(1024)
-            self.read(count % 1024)
-
-        return self.offset
-
-    def readline(self, size=-1):
-        if size < 0:
-            # Shortcut common case - newline found in buffer.
-            offset = self.offset - self.extrastart
-            i = self.extrabuf.find(b'\n', offset) + 1
-            if i > 0:
-                self.extrasize -= i - offset
-                self.offset += i - offset
-                return self.extrabuf[offset: i]
-
-            size = sys.maxsize
-            readsize = self.min_readsize
-        else:
-            readsize = size
-        bufs = []
-        while size != 0:
-            c = self.read(readsize)
-            i = c.find(b'\n')
-
-            # We set i=size to break out of the loop under two
-            # conditions: 1) there's no newline, and the chunk is
-            # larger than size, or 2) there is a newline, but the
-            # resulting line would be longer than 'size'.
-            if (size <= i) or (i == -1 and len(c) > size):
-                i = size - 1
-
-            if i >= 0 or c == b'':
-                bufs.append(c[:i + 1])    # Add portion of last chunk
-                self._unread(c[i + 1:])   # Push back rest of chunk
-                break
-
-            # Append chunk to list, decrease 'size',
-            bufs.append(c)
-            size = size - len(c)
-            readsize = min(size, readsize * 2)
-        if readsize > self.min_readsize:
-            self.min_readsize = min(readsize, self.min_readsize * 2, 512)
-        return b''.join(bufs) # Return resulting line
-
-
-def compress(data, compresslevel=9):
-    """Compress data in one shot and return the compressed string.
-    Optional argument is the compression level, in range of 1-9.
-    """
-    buf = io.BytesIO()
-    with GzipFile(fileobj=buf, mode='wb', compresslevel=compresslevel) as f:
-        f.write(data)
-    return buf.getvalue()
-
-def decompress(data):
-    """Decompress a gzip compressed string in one shot.
-    Return the decompressed string.
-    """
-    with GzipFile(fileobj=io.BytesIO(data)) as f:
-        return f.read()
-
-
-def _test():
-    # Act like gzip; with -d, act like gunzip.
-    # The input file is not deleted, however, nor are any other gzip
-    # options or features supported.
-    args = sys.argv[1:]
-    decompress = args and args[0] == "-d"
-    if decompress:
-        args = args[1:]
-    if not args:
-        args = ["-"]
-    for arg in args:
-        if decompress:
-            if arg == "-":
-                f = GzipFile(filename="", mode="rb", fileobj=sys.stdin.buffer)
-                g = sys.stdout.buffer
-            else:
-                if arg[-3:] != ".gz":
-                    print("filename doesn't end in .gz:", repr(arg))
-                    continue
-                f = open(arg, "rb")
-                g = builtins.open(arg[:-3], "wb")
-        else:
-            if arg == "-":
-                f = sys.stdin.buffer
-                g = GzipFile(filename="", mode="wb", fileobj=sys.stdout.buffer)
-            else:
-                f = builtins.open(arg, "rb")
-                g = open(arg + ".gz", "wb")
-        while True:
-            chunk = f.read(1024)
-            if not chunk:
-                break
-            g.write(chunk)
-        if g is not sys.stdout:
-            g.close()
-        if f is not sys.stdin:
-            f.close()
-
-if __name__ == '__main__':
-    _test()
diff --git a/astropy/utils/compat/_gzip_27.py b/astropy/utils/compat/_gzip_py2/__init__.py
similarity index 100%
rename from astropy/utils/compat/_gzip_27.py
rename to astropy/utils/compat/_gzip_py2/__init__.py
diff --git a/astropy/utils/compat/_odict_py2/__init__.py b/astropy/utils/compat/_odict_py2/__init__.py
new file mode 100644
index 0000000..46eb83a
--- /dev/null
+++ b/astropy/utils/compat/_odict_py2/__init__.py
@@ -0,0 +1,190 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+Backport of the Python 2.7 collections.OrderedDict class to Python 2.6.
+
+Ordered dictionaries are just like regular dictionaries but they remember the
+order that items were inserted.  When iterating over an ordered dictionary,
+the items are returned in the order their keys were first added.
+
+See: http://docs.python.org/library/collections.html#collections.OrderedDict
+"""
+
+from __future__ import absolute_import
+
+__all__ = ['OrderedDict']
+
+from collections import MutableMapping
+from operator import eq as _eq
+from itertools import imap as _imap
+
+try:
+    from thread import get_ident
+except ImportError:
+    from dummy_thread import get_ident
+
+
+def _recursive_repr(user_function):
+    'Decorator to make a repr function return "..." for a recursive call'
+    repr_running = set()
+
+    def wrapper(self):
+        key = id(self), get_ident()
+        if key in repr_running:
+            return '...'
+        repr_running.add(key)
+        try:
+            result = user_function(self)
+        finally:
+            repr_running.discard(key)
+        return result
+
+    # Can't use functools.wraps() here because of bootstrap issues
+    wrapper.__module__ = getattr(user_function, '__module__')
+    wrapper.__doc__ = getattr(user_function, '__doc__')
+    wrapper.__name__ = getattr(user_function, '__name__')
+    return wrapper
+
+class OrderedDict(dict, MutableMapping):
+    'Dictionary that remembers insertion order'
+    # An inherited dict maps keys to values.
+    # The inherited dict provides __getitem__, __len__, __contains__, and get.
+    # The remaining methods are order-aware.
+    # Big-O running times for all methods are the same as for regular dictionaries.
+
+    # The internal self.__map dictionary maps keys to links in a doubly linked list.
+    # The circular doubly linked list starts and ends with a sentinel element.
+    # The sentinel element never gets deleted (this simplifies the algorithm).
+    # Each link is stored as a list of length three:  [PREV, NEXT, KEY].
+
+    def __init__(self, *args, **kwds):
+        '''Initialize an ordered dictionary.  Signature is the same as for
+        regular dictionaries, but keyword arguments are not recommended
+        because their insertion order is arbitrary.
+
+        '''
+        if len(args) > 1:
+            raise TypeError('expected at most 1 arguments, got %d' % len(args))
+        try:
+            self.__root
+        except AttributeError:
+            self.__root = root = [None, None, None]     # sentinel node
+            PREV = 0
+            NEXT = 1
+            root[PREV] = root[NEXT] = root
+            self.__map = {}
+        self.update(*args, **kwds)
+
+    def __setitem__(self, key, value, PREV=0, NEXT=1, dict_setitem=dict.__setitem__):
+        'od.__setitem__(i, y) <==> od[i]=y'
+        # Setting a new item creates a new link which goes at the end of the linked
+        # list, and the inherited dictionary is updated with the new key/value pair.
+        if key not in self:
+            root = self.__root
+            last = root[PREV]
+            last[NEXT] = root[PREV] = self.__map[key] = [last, root, key]
+        dict_setitem(self, key, value)
+
+    def __delitem__(self, key, PREV=0, NEXT=1, dict_delitem=dict.__delitem__):
+        'od.__delitem__(y) <==> del od[y]'
+        # Deleting an existing item uses self.__map to find the link which is
+        # then removed by updating the links in the predecessor and successor nodes.
+        dict_delitem(self, key)
+        link = self.__map.pop(key)
+        link_prev = link[PREV]
+        link_next = link[NEXT]
+        link_prev[NEXT] = link_next
+        link_next[PREV] = link_prev
+
+    def __iter__(self, NEXT=1, KEY=2):
+        'od.__iter__() <==> iter(od)'
+        # Traverse the linked list in order.
+        root = self.__root
+        curr = root[NEXT]
+        while curr is not root:
+            yield curr[KEY]
+            curr = curr[NEXT]
+
+    def __reversed__(self, PREV=0, KEY=2):
+        'od.__reversed__() <==> reversed(od)'
+        # Traverse the linked list in reverse order.
+        root = self.__root
+        curr = root[PREV]
+        while curr is not root:
+            yield curr[KEY]
+            curr = curr[PREV]
+
+    def __reduce__(self):
+        'Return state information for pickling'
+        items = [[k, self[k]] for k in self]
+        tmp = self.__map, self.__root
+        del self.__map, self.__root
+        inst_dict = vars(self).copy()
+        self.__map, self.__root = tmp
+        if inst_dict:
+            return (self.__class__, (items,), inst_dict)
+        return self.__class__, (items,)
+
+    def clear(self):
+        'od.clear() -> None.  Remove all items from od.'
+        try:
+            for node in self.__map.itervalues():
+                del node[:]
+            self.__root[:] = [self.__root, self.__root, None]
+            self.__map.clear()
+        except AttributeError:
+            pass
+        dict.clear(self)
+
+    setdefault = MutableMapping.setdefault
+    update = MutableMapping.update
+    pop = MutableMapping.pop
+    keys = MutableMapping.keys
+    values = MutableMapping.values
+    items = MutableMapping.items
+    iterkeys = MutableMapping.iterkeys
+    itervalues = MutableMapping.itervalues
+    iteritems = MutableMapping.iteritems
+    __ne__ = MutableMapping.__ne__
+
+    def popitem(self, last=True):
+        '''od.popitem() -> (k, v), return and remove a (key, value) pair.
+        Pairs are returned in LIFO order if last is true or FIFO order if false.
+
+        '''
+        if not self:
+            raise KeyError('dictionary is empty')
+        key = next(reversed(self) if last else iter(self))
+        value = self.pop(key)
+        return key, value
+
+    @_recursive_repr
+    def __repr__(self):
+        'od.__repr__() <==> repr(od)'
+        if not self:
+            return '%s()' % (self.__class__.__name__,)
+        return '%s(%r)' % (self.__class__.__name__, self.items())
+
+    def copy(self):
+        'od.copy() -> a shallow copy of od'
+        return self.__class__(self)
+
+    @classmethod
+    def fromkeys(cls, iterable, value=None):
+        '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
+        and values equal to v (which defaults to None).
+
+        '''
+        d = cls()
+        for key in iterable:
+            d[key] = value
+        return d
+
+    def __eq__(self, other):
+        '''od.__eq__(y) <==> od==y.  Comparison to another OD is order-sensitive
+        while comparison to a regular mapping is order-insensitive.
+
+        '''
+        if isinstance(other, OrderedDict):
+            return len(self)==len(other) and \
+                   all(_imap(_eq, self.iteritems(), other.iteritems()))
+        return dict.__eq__(self, other)
diff --git a/astropy/utils/compat/_subprocess_py2/__init__.py b/astropy/utils/compat/_subprocess_py2/__init__.py
new file mode 100644
index 0000000..a14df41
--- /dev/null
+++ b/astropy/utils/compat/_subprocess_py2/__init__.py
@@ -0,0 +1,38 @@
+from __future__ import absolute_import
+
+from subprocess import *
+
+
+def check_output(*popenargs, **kwargs):
+    r"""Run command with arguments and return its output as a byte
+    string.
+
+    If the exit code was non-zero it raises a CalledProcessError.  The
+    CalledProcessError object will have the return code in the
+    returncode
+    attribute and output in the output attribute.
+
+    The arguments are the same as for the Popen constructor.  Example::
+
+    >>> check_output(["ls", "-l", "/dev/null"])
+    'crw-rw-rw- 1 root root 1, 3 Oct 18  2007 /dev/null\n'
+
+    The stdout argument is not allowed as it is used internally.
+    To capture standard error in the result, use stderr=STDOUT.::
+
+    >>> check_output(["/bin/sh", "-c",
+    ...               "ls -l non_existent_file ; exit 0"],
+    ...              stderr=STDOUT)
+    'ls: non_existent_file: No such file or directory\n'
+    """
+    if 'stdout' in kwargs:
+        raise ValueError('stdout argument not allowed, it will be overridden.')
+    process = Popen(stdout=PIPE, *popenargs, **kwargs)
+    output, unused_err = process.communicate()
+    retcode = process.poll()
+    if retcode:
+        cmd = kwargs.get("args")
+        if cmd is None:
+            cmd = popenargs[0]
+        raise CalledProcessError(retcode, cmd)
+    return output
diff --git a/astropy/utils/compat/argparse.py b/astropy/utils/compat/argparse.py
index 1973bb0..42abeda 100644
--- a/astropy/utils/compat/argparse.py
+++ b/astropy/utils/compat/argparse.py
@@ -2,2367 +2,5 @@ from __future__ import absolute_import
 
 try:
     from argparse import *
-except ImportError: 
-    # below here is argparse v1.2.1 from PyPI
-    # Author: Steven J. Bethard <steven.bethard at gmail.com>.
-
-    """Command-line parsing library
-
-    This module is an optparse-inspired command-line parsing library that:
-
-        - handles both optional and positional arguments
-        - produces highly informative usage messages
-        - supports parsers that dispatch to sub-parsers
-
-    The following is a simple usage example that sums integers from the
-    command-line and writes the result to a file::
-
-        parser = argparse.ArgumentParser(
-            description='sum the integers at the command line')
-        parser.add_argument(
-            'integers', metavar='int', nargs='+', type=int,
-            help='an integer to be summed')
-        parser.add_argument(
-            '--log', default=sys.stdout, type=argparse.FileType('w'),
-            help='the file where the sum should be written')
-        args = parser.parse_args()
-        args.log.write('%s' % sum(args.integers))
-        args.log.close()
-
-    The module contains the following public classes:
-
-        - ArgumentParser -- The main entry point for command-line parsing. As the
-            example above shows, the add_argument() method is used to populate
-            the parser with actions for optional and positional arguments. Then
-            the parse_args() method is invoked to convert the args at the
-            command-line into an object with attributes.
-
-        - ArgumentError -- The exception raised by ArgumentParser objects when
-            there are errors with the parser's actions. Errors raised while
-            parsing the command-line are caught by ArgumentParser and emitted
-            as command-line messages.
-
-        - FileType -- A factory for defining types of files to be created. As the
-            example above shows, instances of FileType are typically passed as
-            the type= argument of add_argument() calls.
-
-        - Action -- The base class for parser actions. Typically actions are
-            selected by passing strings like 'store_true' or 'append_const' to
-            the action= argument of add_argument(). However, for greater
-            customization of ArgumentParser actions, subclasses of Action may
-            be defined and passed as the action= argument.
-
-        - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,
-            ArgumentDefaultsHelpFormatter -- Formatter classes which
-            may be passed as the formatter_class= argument to the
-            ArgumentParser constructor. HelpFormatter is the default,
-            RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser
-            not to change the formatting for help text, and
-            ArgumentDefaultsHelpFormatter adds information about argument defaults
-            to the help.
-
-    All other classes in this module are considered implementation details.
-    (Also note that HelpFormatter and RawDescriptionHelpFormatter are only
-    considered public as object names -- the API of the formatter objects is
-    still considered an implementation detail.)
-    """
-
-    __version__ = '1.2.1'
-    __all__ = [
-        'ArgumentParser',
-        'ArgumentError',
-        'ArgumentTypeError',
-        'FileType',
-        'HelpFormatter',
-        'ArgumentDefaultsHelpFormatter',
-        'RawDescriptionHelpFormatter',
-        'RawTextHelpFormatter',
-        'Namespace',
-        'Action',
-        'ONE_OR_MORE',
-        'OPTIONAL',
-        'PARSER',
-        'REMAINDER',
-        'SUPPRESS',
-        'ZERO_OR_MORE',
-    ]
-
-
-    import copy as _copy
-    import os as _os
-    import re as _re
-    import sys as _sys
-    import textwrap as _textwrap
-
-    from gettext import gettext as _
-
-    try:
-        set
-    except NameError:
-        # for python < 2.4 compatibility (sets module is there since 2.3):
-        from sets import Set as set
-
-    try:
-        basestring
-    except NameError:
-        basestring = str
-
-    try:
-        sorted
-    except NameError:
-        # for python < 2.4 compatibility:
-        def sorted(iterable, reverse=False):
-            result = list(iterable)
-            result.sort()
-            if reverse:
-                result.reverse()
-            return result
-
-
-    def _callable(obj):
-        return hasattr(obj, '__call__') or hasattr(obj, '__bases__')
-
-
-    SUPPRESS = '==SUPPRESS=='
-
-    OPTIONAL = '?'
-    ZERO_OR_MORE = '*'
-    ONE_OR_MORE = '+'
-    PARSER = 'A...'
-    REMAINDER = '...'
-    _UNRECOGNIZED_ARGS_ATTR = '_unrecognized_args'
-
-    # =============================
-    # Utility functions and classes
-    # =============================
-
-    class _AttributeHolder(object):
-        """Abstract base class that provides __repr__.
-
-        The __repr__ method returns a string in the format::
-            ClassName(attr=name, attr=name, ...)
-        The attributes are determined either by a class-level attribute,
-        '_kwarg_names', or by inspecting the instance __dict__.
-        """
-
-        def __repr__(self):
-            type_name = type(self).__name__
-            arg_strings = []
-            for arg in self._get_args():
-                arg_strings.append(repr(arg))
-            for name, value in self._get_kwargs():
-                arg_strings.append('%s=%r' % (name, value))
-            return '%s(%s)' % (type_name, ', '.join(arg_strings))
-
-        def _get_kwargs(self):
-            return sorted(self.__dict__.items())
-
-        def _get_args(self):
-            return []
-
-
-    def _ensure_value(namespace, name, value):
-        if getattr(namespace, name, None) is None:
-            setattr(namespace, name, value)
-        return getattr(namespace, name)
-
-
-    # ===============
-    # Formatting Help
-    # ===============
-
-    class HelpFormatter(object):
-        """Formatter for generating usage messages and argument help strings.
-
-        Only the name of this class is considered a public API. All the methods
-        provided by the class are considered an implementation detail.
-        """
-
-        def __init__(self,
-                     prog,
-                     indent_increment=2,
-                     max_help_position=24,
-                     width=None):
-
-            # default setting for width
-            if width is None:
-                try:
-                    width = int(_os.environ['COLUMNS'])
-                except (KeyError, ValueError):
-                    width = 80
-                width -= 2
-
-            self._prog = prog
-            self._indent_increment = indent_increment
-            self._max_help_position = max_help_position
-            self._width = width
-
-            self._current_indent = 0
-            self._level = 0
-            self._action_max_length = 0
-
-            self._root_section = self._Section(self, None)
-            self._current_section = self._root_section
-
-            self._whitespace_matcher = _re.compile(r'\s+')
-            self._long_break_matcher = _re.compile(r'\n\n\n+')
-
-        # ===============================
-        # Section and indentation methods
-        # ===============================
-        def _indent(self):
-            self._current_indent += self._indent_increment
-            self._level += 1
-
-        def _dedent(self):
-            self._current_indent -= self._indent_increment
-            assert self._current_indent >= 0, 'Indent decreased below 0.'
-            self._level -= 1
-
-        class _Section(object):
-
-            def __init__(self, formatter, parent, heading=None):
-                self.formatter = formatter
-                self.parent = parent
-                self.heading = heading
-                self.items = []
-
-            def format_help(self):
-                # format the indented section
-                if self.parent is not None:
-                    self.formatter._indent()
-                join = self.formatter._join_parts
-                for func, args in self.items:
-                    func(*args)
-                item_help = join([func(*args) for func, args in self.items])
-                if self.parent is not None:
-                    self.formatter._dedent()
-
-                # return nothing if the section was empty
-                if not item_help:
-                    return ''
-
-                # add the heading if the section was non-empty
-                if self.heading is not SUPPRESS and self.heading is not None:
-                    current_indent = self.formatter._current_indent
-                    heading = '%*s%s:\n' % (current_indent, '', self.heading)
-                else:
-                    heading = ''
-
-                # join the section-initial newline, the heading and the help
-                return join(['\n', heading, item_help, '\n'])
-
-        def _add_item(self, func, args):
-            self._current_section.items.append((func, args))
-
-        # ========================
-        # Message building methods
-        # ========================
-        def start_section(self, heading):
-            self._indent()
-            section = self._Section(self, self._current_section, heading)
-            self._add_item(section.format_help, [])
-            self._current_section = section
-
-        def end_section(self):
-            self._current_section = self._current_section.parent
-            self._dedent()
-
-        def add_text(self, text):
-            if text is not SUPPRESS and text is not None:
-                self._add_item(self._format_text, [text])
-
-        def add_usage(self, usage, actions, groups, prefix=None):
-            if usage is not SUPPRESS:
-                args = usage, actions, groups, prefix
-                self._add_item(self._format_usage, args)
-
-        def add_argument(self, action):
-            if action.help is not SUPPRESS:
-
-                # find all invocations
-                get_invocation = self._format_action_invocation
-                invocations = [get_invocation(action)]
-                for subaction in self._iter_indented_subactions(action):
-                    invocations.append(get_invocation(subaction))
-
-                # update the maximum item length
-                invocation_length = max([len(s) for s in invocations])
-                action_length = invocation_length + self._current_indent
-                self._action_max_length = max(self._action_max_length,
-                                              action_length)
-
-                # add the item to the list
-                self._add_item(self._format_action, [action])
-
-        def add_arguments(self, actions):
-            for action in actions:
-                self.add_argument(action)
-
-        # =======================
-        # Help-formatting methods
-        # =======================
-        def format_help(self):
-            help = self._root_section.format_help()
-            if help:
-                help = self._long_break_matcher.sub('\n\n', help)
-                help = help.strip('\n') + '\n'
-            return help
-
-        def _join_parts(self, part_strings):
-            return ''.join([part
-                            for part in part_strings
-                            if part and part is not SUPPRESS])
-
-        def _format_usage(self, usage, actions, groups, prefix):
-            if prefix is None:
-                prefix = _('usage: ')
-
-            # if usage is specified, use that
-            if usage is not None:
-                usage = usage % dict(prog=self._prog)
-
-            # if no optionals or positionals are available, usage is just prog
-            elif usage is None and not actions:
-                usage = '%(prog)s' % dict(prog=self._prog)
-
-            # if optionals and positionals are available, calculate usage
-            elif usage is None:
-                prog = '%(prog)s' % dict(prog=self._prog)
-
-                # split optionals from positionals
-                optionals = []
-                positionals = []
-                for action in actions:
-                    if action.option_strings:
-                        optionals.append(action)
-                    else:
-                        positionals.append(action)
-
-                # build full usage string
-                format = self._format_actions_usage
-                action_usage = format(optionals + positionals, groups)
-                usage = ' '.join([s for s in [prog, action_usage] if s])
-
-                # wrap the usage parts if it's too long
-                text_width = self._width - self._current_indent
-                if len(prefix) + len(usage) > text_width:
-
-                    # break usage into wrappable parts
-                    part_regexp = r'\(.*?\)+|\[.*?\]+|\S+'
-                    opt_usage = format(optionals, groups)
-                    pos_usage = format(positionals, groups)
-                    opt_parts = _re.findall(part_regexp, opt_usage)
-                    pos_parts = _re.findall(part_regexp, pos_usage)
-                    assert ' '.join(opt_parts) == opt_usage
-                    assert ' '.join(pos_parts) == pos_usage
-
-                    # helper for wrapping lines
-                    def get_lines(parts, indent, prefix=None):
-                        lines = []
-                        line = []
-                        if prefix is not None:
-                            line_len = len(prefix) - 1
-                        else:
-                            line_len = len(indent) - 1
-                        for part in parts:
-                            if line_len + 1 + len(part) > text_width:
-                                lines.append(indent + ' '.join(line))
-                                line = []
-                                line_len = len(indent) - 1
-                            line.append(part)
-                            line_len += len(part) + 1
-                        if line:
-                            lines.append(indent + ' '.join(line))
-                        if prefix is not None:
-                            lines[0] = lines[0][len(indent):]
-                        return lines
-
-                    # if prog is short, follow it with optionals or positionals
-                    if len(prefix) + len(prog) <= 0.75 * text_width:
-                        indent = ' ' * (len(prefix) + len(prog) + 1)
-                        if opt_parts:
-                            lines = get_lines([prog] + opt_parts, indent, prefix)
-                            lines.extend(get_lines(pos_parts, indent))
-                        elif pos_parts:
-                            lines = get_lines([prog] + pos_parts, indent, prefix)
-                        else:
-                            lines = [prog]
-
-                    # if prog is long, put it on its own line
-                    else:
-                        indent = ' ' * len(prefix)
-                        parts = opt_parts + pos_parts
-                        lines = get_lines(parts, indent)
-                        if len(lines) > 1:
-                            lines = []
-                            lines.extend(get_lines(opt_parts, indent))
-                            lines.extend(get_lines(pos_parts, indent))
-                        lines = [prog] + lines
-
-                    # join lines into usage
-                    usage = '\n'.join(lines)
-
-            # prefix with 'usage:'
-            return '%s%s\n\n' % (prefix, usage)
-
-        def _format_actions_usage(self, actions, groups):
-            # find group indices and identify actions in groups
-            group_actions = set()
-            inserts = {}
-            for group in groups:
-                try:
-                    start = actions.index(group._group_actions[0])
-                except ValueError:
-                    continue
-                else:
-                    end = start + len(group._group_actions)
-                    if actions[start:end] == group._group_actions:
-                        for action in group._group_actions:
-                            group_actions.add(action)
-                        if not group.required:
-                            if start in inserts:
-                                inserts[start] += ' ['
-                            else:
-                                inserts[start] = '['
-                            inserts[end] = ']'
-                        else:
-                            if start in inserts:
-                                inserts[start] += ' ('
-                            else:
-                                inserts[start] = '('
-                            inserts[end] = ')'
-                        for i in range(start + 1, end):
-                            inserts[i] = '|'
-
-            # collect all actions format strings
-            parts = []
-            for i, action in enumerate(actions):
-
-                # suppressed arguments are marked with None
-                # remove | separators for suppressed arguments
-                if action.help is SUPPRESS:
-                    parts.append(None)
-                    if inserts.get(i) == '|':
-                        inserts.pop(i)
-                    elif inserts.get(i + 1) == '|':
-                        inserts.pop(i + 1)
-
-                # produce all arg strings
-                elif not action.option_strings:
-                    part = self._format_args(action, action.dest)
-
-                    # if it's in a group, strip the outer []
-                    if action in group_actions:
-                        if part[0] == '[' and part[-1] == ']':
-                            part = part[1:-1]
-
-                    # add the action string to the list
-                    parts.append(part)
-
-                # produce the first way to invoke the option in brackets
-                else:
-                    option_string = action.option_strings[0]
-
-                    # if the Optional doesn't take a value, format is:
-                    #    -s or --long
-                    if action.nargs == 0:
-                        part = '%s' % option_string
-
-                    # if the Optional takes a value, format is:
-                    #    -s ARGS or --long ARGS
-                    else:
-                        default = action.dest.upper()
-                        args_string = self._format_args(action, default)
-                        part = '%s %s' % (option_string, args_string)
-
-                    # make it look optional if it's not required or in a group
-                    if not action.required and action not in group_actions:
-                        part = '[%s]' % part
-
-                    # add the action string to the list
-                    parts.append(part)
-
-            # insert things at the necessary indices
-            for i in sorted(inserts, reverse=True):
-                parts[i:i] = [inserts[i]]
-
-            # join all the action items with spaces
-            text = ' '.join([item for item in parts if item is not None])
-
-            # clean up separators for mutually exclusive groups
-            open = r'[\[(]'
-            close = r'[\])]'
-            text = _re.sub(r'(%s) ' % open, r'\1', text)
-            text = _re.sub(r' (%s)' % close, r'\1', text)
-            text = _re.sub(r'%s *%s' % (open, close), r'', text)
-            text = _re.sub(r'\(([^|]*)\)', r'\1', text)
-            text = text.strip()
-
-            # return the text
-            return text
-
-        def _format_text(self, text):
-            if '%(prog)' in text:
-                text = text % dict(prog=self._prog)
-            text_width = self._width - self._current_indent
-            indent = ' ' * self._current_indent
-            return self._fill_text(text, text_width, indent) + '\n\n'
-
-        def _format_action(self, action):
-            # determine the required width and the entry label
-            help_position = min(self._action_max_length + 2,
-                                self._max_help_position)
-            help_width = self._width - help_position
-            action_width = help_position - self._current_indent - 2
-            action_header = self._format_action_invocation(action)
-
-            # ho nelp; start on same line and add a final newline
-            if not action.help:
-                tup = self._current_indent, '', action_header
-                action_header = '%*s%s\n' % tup
-
-            # short action name; start on the same line and pad two spaces
-            elif len(action_header) <= action_width:
-                tup = self._current_indent, '', action_width, action_header
-                action_header = '%*s%-*s  ' % tup
-                indent_first = 0
-
-            # long action name; start on the next line
-            else:
-                tup = self._current_indent, '', action_header
-                action_header = '%*s%s\n' % tup
-                indent_first = help_position
-
-            # collect the pieces of the action help
-            parts = [action_header]
-
-            # if there was help for the action, add lines of help text
-            if action.help:
-                help_text = self._expand_help(action)
-                help_lines = self._split_lines(help_text, help_width)
-                parts.append('%*s%s\n' % (indent_first, '', help_lines[0]))
-                for line in help_lines[1:]:
-                    parts.append('%*s%s\n' % (help_position, '', line))
-
-            # or add a newline if the description doesn't end with one
-            elif not action_header.endswith('\n'):
-                parts.append('\n')
-
-            # if there are any sub-actions, add their help as well
-            for subaction in self._iter_indented_subactions(action):
-                parts.append(self._format_action(subaction))
-
-            # return a single string
-            return self._join_parts(parts)
-
-        def _format_action_invocation(self, action):
-            if not action.option_strings:
-                metavar, = self._metavar_formatter(action, action.dest)(1)
-                return metavar
-
-            else:
-                parts = []
-
-                # if the Optional doesn't take a value, format is:
-                #    -s, --long
-                if action.nargs == 0:
-                    parts.extend(action.option_strings)
-
-                # if the Optional takes a value, format is:
-                #    -s ARGS, --long ARGS
-                else:
-                    default = action.dest.upper()
-                    args_string = self._format_args(action, default)
-                    for option_string in action.option_strings:
-                        parts.append('%s %s' % (option_string, args_string))
-
-                return ', '.join(parts)
-
-        def _metavar_formatter(self, action, default_metavar):
-            if action.metavar is not None:
-                result = action.metavar
-            elif action.choices is not None:
-                choice_strs = [str(choice) for choice in action.choices]
-                result = '{%s}' % ','.join(choice_strs)
-            else:
-                result = default_metavar
-
-            def format(tuple_size):
-                if isinstance(result, tuple):
-                    return result
-                else:
-                    return (result, ) * tuple_size
-            return format
-
-        def _format_args(self, action, default_metavar):
-            get_metavar = self._metavar_formatter(action, default_metavar)
-            if action.nargs is None:
-                result = '%s' % get_metavar(1)
-            elif action.nargs == OPTIONAL:
-                result = '[%s]' % get_metavar(1)
-            elif action.nargs == ZERO_OR_MORE:
-                result = '[%s [%s ...]]' % get_metavar(2)
-            elif action.nargs == ONE_OR_MORE:
-                result = '%s [%s ...]' % get_metavar(2)
-            elif action.nargs == REMAINDER:
-                result = '...'
-            elif action.nargs == PARSER:
-                result = '%s ...' % get_metavar(1)
-            else:
-                formats = ['%s' for _ in range(action.nargs)]
-                result = ' '.join(formats) % get_metavar(action.nargs)
-            return result
-
-        def _expand_help(self, action):
-            params = dict(vars(action), prog=self._prog)
-            for name in list(params):
-                if params[name] is SUPPRESS:
-                    del params[name]
-            for name in list(params):
-                if hasattr(params[name], '__name__'):
-                    params[name] = params[name].__name__
-            if params.get('choices') is not None:
-                choices_str = ', '.join([str(c) for c in params['choices']])
-                params['choices'] = choices_str
-            return self._get_help_string(action) % params
-
-        def _iter_indented_subactions(self, action):
-            try:
-                get_subactions = action._get_subactions
-            except AttributeError:
-                pass
-            else:
-                self._indent()
-                for subaction in get_subactions():
-                    yield subaction
-                self._dedent()
-
-        def _split_lines(self, text, width):
-            text = self._whitespace_matcher.sub(' ', text).strip()
-            return _textwrap.wrap(text, width)
-
-        def _fill_text(self, text, width, indent):
-            text = self._whitespace_matcher.sub(' ', text).strip()
-            return _textwrap.fill(text, width, initial_indent=indent,
-                                               subsequent_indent=indent)
-
-        def _get_help_string(self, action):
-            return action.help
-
-
-    class RawDescriptionHelpFormatter(HelpFormatter):
-        """Help message formatter which retains any formatting in descriptions.
-
-        Only the name of this class is considered a public API. All the methods
-        provided by the class are considered an implementation detail.
-        """
-
-        def _fill_text(self, text, width, indent):
-            return ''.join([indent + line for line in text.splitlines(True)])
-
-
-    class RawTextHelpFormatter(RawDescriptionHelpFormatter):
-        """Help message formatter which retains formatting of all help text.
-
-        Only the name of this class is considered a public API. All the methods
-        provided by the class are considered an implementation detail.
-        """
-
-        def _split_lines(self, text, width):
-            return text.splitlines()
-
-
-    class ArgumentDefaultsHelpFormatter(HelpFormatter):
-        """Help message formatter which adds default values to argument help.
-
-        Only the name of this class is considered a public API. All the methods
-        provided by the class are considered an implementation detail.
-        """
-
-        def _get_help_string(self, action):
-            help = action.help
-            if '%(default)' not in action.help:
-                if action.default is not SUPPRESS:
-                    defaulting_nargs = [OPTIONAL, ZERO_OR_MORE]
-                    if action.option_strings or action.nargs in defaulting_nargs:
-                        help += ' (default: %(default)s)'
-            return help
-
-
-    # =====================
-    # Options and Arguments
-    # =====================
-
-    def _get_action_name(argument):
-        if argument is None:
-            return None
-        elif argument.option_strings:
-            return  '/'.join(argument.option_strings)
-        elif argument.metavar not in (None, SUPPRESS):
-            return argument.metavar
-        elif argument.dest not in (None, SUPPRESS):
-            return argument.dest
-        else:
-            return None
-
-
-    class ArgumentError(Exception):
-        """An error from creating or using an argument (optional or positional).
-
-        The string value of this exception is the message, augmented with
-        information about the argument that caused it.
-        """
-
-        def __init__(self, argument, message):
-            self.argument_name = _get_action_name(argument)
-            self.message = message
-
-        def __str__(self):
-            if self.argument_name is None:
-                format = '%(message)s'
-            else:
-                format = 'argument %(argument_name)s: %(message)s'
-            return format % dict(message=self.message,
-                                 argument_name=self.argument_name)
-
-
-    class ArgumentTypeError(Exception):
-        """An error from trying to convert a command line string to a type."""
-        pass
-
-
-    # ==============
-    # Action classes
-    # ==============
-
-    class Action(_AttributeHolder):
-        """Information about how to convert command line strings to Python objects.
-
-        Action objects are used by an ArgumentParser to represent the information
-        needed to parse a single argument from one or more strings from the
-        command line. The keyword arguments to the Action constructor are also
-        all attributes of Action instances.
-
-        Keyword Arguments:
-
-            - option_strings -- A list of command-line option strings which
-                should be associated with this action.
-
-            - dest -- The name of the attribute to hold the created object(s)
-
-            - nargs -- The number of command-line arguments that should be
-                consumed. By default, one argument will be consumed and a single
-                value will be produced.  Other values include:
-                    - N (an integer) consumes N arguments (and produces a list)
-                    - '?' consumes zero or one arguments
-                    - '*' consumes zero or more arguments (and produces a list)
-                    - '+' consumes one or more arguments (and produces a list)
-                Note that the difference between the default and nargs=1 is that
-                with the default, a single value will be produced, while with
-                nargs=1, a list containing a single value will be produced.
-
-            - const -- The value to be produced if the option is specified and the
-                option uses an action that takes no values.
-
-            - default -- The value to be produced if the option is not specified.
-
-            - type -- The type which the command-line arguments should be converted
-                to, should be one of 'string', 'int', 'float', 'complex' or a
-                callable object that accepts a single string argument. If None,
-                'string' is assumed.
-
-            - choices -- A container of values that should be allowed. If not None,
-                after a command-line argument has been converted to the appropriate
-                type, an exception will be raised if it is not a member of this
-                collection.
-
-            - required -- True if the action must always be specified at the
-                command line. This is only meaningful for optional command-line
-                arguments.
-
-            - help -- The help string describing the argument.
-
-            - metavar -- The name to be used for the option's argument with the
-                help string. If None, the 'dest' value will be used as the name.
-        """
-
-        def __init__(self,
-                     option_strings,
-                     dest,
-                     nargs=None,
-                     const=None,
-                     default=None,
-                     type=None,
-                     choices=None,
-                     required=False,
-                     help=None,
-                     metavar=None):
-            self.option_strings = option_strings
-            self.dest = dest
-            self.nargs = nargs
-            self.const = const
-            self.default = default
-            self.type = type
-            self.choices = choices
-            self.required = required
-            self.help = help
-            self.metavar = metavar
-
-        def _get_kwargs(self):
-            names = [
-                'option_strings',
-                'dest',
-                'nargs',
-                'const',
-                'default',
-                'type',
-                'choices',
-                'help',
-                'metavar',
-            ]
-            return [(name, getattr(self, name)) for name in names]
-
-        def __call__(self, parser, namespace, values, option_string=None):
-            raise NotImplementedError(_('.__call__() not defined'))
-
-
-    class _StoreAction(Action):
-
-        def __init__(self,
-                     option_strings,
-                     dest,
-                     nargs=None,
-                     const=None,
-                     default=None,
-                     type=None,
-                     choices=None,
-                     required=False,
-                     help=None,
-                     metavar=None):
-            if nargs == 0:
-                raise ValueError('nargs for store actions must be > 0; if you '
-                                 'have nothing to store, actions such as store '
-                                 'true or store const may be more appropriate')
-            if const is not None and nargs != OPTIONAL:
-                raise ValueError('nargs must be %r to supply const' % OPTIONAL)
-            super(_StoreAction, self).__init__(
-                option_strings=option_strings,
-                dest=dest,
-                nargs=nargs,
-                const=const,
-                default=default,
-                type=type,
-                choices=choices,
-                required=required,
-                help=help,
-                metavar=metavar)
-
-        def __call__(self, parser, namespace, values, option_string=None):
-            setattr(namespace, self.dest, values)
-
-
-    class _StoreConstAction(Action):
-
-        def __init__(self,
-                     option_strings,
-                     dest,
-                     const,
-                     default=None,
-                     required=False,
-                     help=None,
-                     metavar=None):
-            super(_StoreConstAction, self).__init__(
-                option_strings=option_strings,
-                dest=dest,
-                nargs=0,
-                const=const,
-                default=default,
-                required=required,
-                help=help)
-
-        def __call__(self, parser, namespace, values, option_string=None):
-            setattr(namespace, self.dest, self.const)
-
-
-    class _StoreTrueAction(_StoreConstAction):
-
-        def __init__(self,
-                     option_strings,
-                     dest,
-                     default=False,
-                     required=False,
-                     help=None):
-            super(_StoreTrueAction, self).__init__(
-                option_strings=option_strings,
-                dest=dest,
-                const=True,
-                default=default,
-                required=required,
-                help=help)
-
-
-    class _StoreFalseAction(_StoreConstAction):
-
-        def __init__(self,
-                     option_strings,
-                     dest,
-                     default=True,
-                     required=False,
-                     help=None):
-            super(_StoreFalseAction, self).__init__(
-                option_strings=option_strings,
-                dest=dest,
-                const=False,
-                default=default,
-                required=required,
-                help=help)
-
-
-    class _AppendAction(Action):
-
-        def __init__(self,
-                     option_strings,
-                     dest,
-                     nargs=None,
-                     const=None,
-                     default=None,
-                     type=None,
-                     choices=None,
-                     required=False,
-                     help=None,
-                     metavar=None):
-            if nargs == 0:
-                raise ValueError('nargs for append actions must be > 0; if arg '
-                                 'strings are not supplying the value to append, '
-                                 'the append const action may be more appropriate')
-            if const is not None and nargs != OPTIONAL:
-                raise ValueError('nargs must be %r to supply const' % OPTIONAL)
-            super(_AppendAction, self).__init__(
-                option_strings=option_strings,
-                dest=dest,
-                nargs=nargs,
-                const=const,
-                default=default,
-                type=type,
-                choices=choices,
-                required=required,
-                help=help,
-                metavar=metavar)
-
-        def __call__(self, parser, namespace, values, option_string=None):
-            items = _copy.copy(_ensure_value(namespace, self.dest, []))
-            items.append(values)
-            setattr(namespace, self.dest, items)
-
-
-    class _AppendConstAction(Action):
-
-        def __init__(self,
-                     option_strings,
-                     dest,
-                     const,
-                     default=None,
-                     required=False,
-                     help=None,
-                     metavar=None):
-            super(_AppendConstAction, self).__init__(
-                option_strings=option_strings,
-                dest=dest,
-                nargs=0,
-                const=const,
-                default=default,
-                required=required,
-                help=help,
-                metavar=metavar)
-
-        def __call__(self, parser, namespace, values, option_string=None):
-            items = _copy.copy(_ensure_value(namespace, self.dest, []))
-            items.append(self.const)
-            setattr(namespace, self.dest, items)
-
-
-    class _CountAction(Action):
-
-        def __init__(self,
-                     option_strings,
-                     dest,
-                     default=None,
-                     required=False,
-                     help=None):
-            super(_CountAction, self).__init__(
-                option_strings=option_strings,
-                dest=dest,
-                nargs=0,
-                default=default,
-                required=required,
-                help=help)
-
-        def __call__(self, parser, namespace, values, option_string=None):
-            new_count = _ensure_value(namespace, self.dest, 0) + 1
-            setattr(namespace, self.dest, new_count)
-
-
-    class _HelpAction(Action):
-
-        def __init__(self,
-                     option_strings,
-                     dest=SUPPRESS,
-                     default=SUPPRESS,
-                     help=None):
-            super(_HelpAction, self).__init__(
-                option_strings=option_strings,
-                dest=dest,
-                default=default,
-                nargs=0,
-                help=help)
-
-        def __call__(self, parser, namespace, values, option_string=None):
-            parser.print_help()
-            parser.exit()
-
-
-    class _VersionAction(Action):
-
-        def __init__(self,
-                     option_strings,
-                     version=None,
-                     dest=SUPPRESS,
-                     default=SUPPRESS,
-                     help="show program's version number and exit"):
-            super(_VersionAction, self).__init__(
-                option_strings=option_strings,
-                dest=dest,
-                default=default,
-                nargs=0,
-                help=help)
-            self.version = version
-
-        def __call__(self, parser, namespace, values, option_string=None):
-            version = self.version
-            if version is None:
-                version = parser.version
-            formatter = parser._get_formatter()
-            formatter.add_text(version)
-            parser.exit(message=formatter.format_help())
-
-
-    class _SubParsersAction(Action):
-
-        class _ChoicesPseudoAction(Action):
-
-            def __init__(self, name, help):
-                sup = super(_SubParsersAction._ChoicesPseudoAction, self)
-                sup.__init__(option_strings=[], dest=name, help=help)
-
-        def __init__(self,
-                     option_strings,
-                     prog,
-                     parser_class,
-                     dest=SUPPRESS,
-                     help=None,
-                     metavar=None):
-
-            self._prog_prefix = prog
-            self._parser_class = parser_class
-            self._name_parser_map = {}
-            self._choices_actions = []
-
-            super(_SubParsersAction, self).__init__(
-                option_strings=option_strings,
-                dest=dest,
-                nargs=PARSER,
-                choices=self._name_parser_map,
-                help=help,
-                metavar=metavar)
-
-        def add_parser(self, name, **kwargs):
-            # set prog from the existing prefix
-            if kwargs.get('prog') is None:
-                kwargs['prog'] = '%s %s' % (self._prog_prefix, name)
-
-            # create a pseudo-action to hold the choice help
-            if 'help' in kwargs:
-                help = kwargs.pop('help')
-                choice_action = self._ChoicesPseudoAction(name, help)
-                self._choices_actions.append(choice_action)
-
-            # create the parser and add it to the map
-            parser = self._parser_class(**kwargs)
-            self._name_parser_map[name] = parser
-            return parser
-
-        def _get_subactions(self):
-            return self._choices_actions
-
-        def __call__(self, parser, namespace, values, option_string=None):
-            parser_name = values[0]
-            arg_strings = values[1:]
-
-            # set the parser name if requested
-            if self.dest is not SUPPRESS:
-                setattr(namespace, self.dest, parser_name)
-
-            # select the parser
-            try:
-                parser = self._name_parser_map[parser_name]
-            except KeyError:
-                tup = parser_name, ', '.join(self._name_parser_map)
-                msg = _('unknown parser %r (choices: %s)' % tup)
-                raise ArgumentError(self, msg)
-
-            # parse all the remaining options into the namespace
-            # store any unrecognized options on the object, so that the top
-            # level parser can decide what to do with them
-            namespace, arg_strings = parser.parse_known_args(arg_strings, namespace)
-            if arg_strings:
-                vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR, [])
-                getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)
-
-
-    # ==============
-    # Type classes
-    # ==============
-
-    class FileType(object):
-        """Factory for creating file object types
-
-        Instances of FileType are typically passed as type= arguments to the
-        ArgumentParser add_argument() method.
-
-        Keyword Arguments:
-            - mode -- A string indicating how the file is to be opened. Accepts the
-                same values as the builtin open() function.
-            - bufsize -- The file's desired buffer size. Accepts the same values as
-                the builtin open() function.
-        """
-
-        def __init__(self, mode='r', bufsize=None):
-            self._mode = mode
-            self._bufsize = bufsize
-
-        def __call__(self, string):
-            # the special argument "-" means sys.std{in,out}
-            if string == '-':
-                if 'r' in self._mode:
-                    return _sys.stdin
-                elif 'w' in self._mode:
-                    return _sys.stdout
-                else:
-                    msg = _('argument "-" with mode %r' % self._mode)
-                    raise ValueError(msg)
-
-            # all other arguments are used as file names
-            if self._bufsize:
-                return open(string, self._mode, self._bufsize)
-            else:
-                return open(string, self._mode)
-
-        def __repr__(self):
-            args = [self._mode, self._bufsize]
-            args_str = ', '.join([repr(arg) for arg in args if arg is not None])
-            return '%s(%s)' % (type(self).__name__, args_str)
-
-    # ===========================
-    # Optional and Positional Parsing
-    # ===========================
-
-    class Namespace(_AttributeHolder):
-        """Simple object for storing attributes.
-
-        Implements equality by attribute names and values, and provides a simple
-        string representation.
-        """
-
-        def __init__(self, **kwargs):
-            for name in kwargs:
-                setattr(self, name, kwargs[name])
-
-        __hash__ = None
-
-        def __eq__(self, other):
-            return vars(self) == vars(other)
-
-        def __ne__(self, other):
-            return not (self == other)
-
-        def __contains__(self, key):
-            return key in self.__dict__
-
-
-    class _ActionsContainer(object):
-
-        def __init__(self,
-                     description,
-                     prefix_chars,
-                     argument_default,
-                     conflict_handler):
-            super(_ActionsContainer, self).__init__()
-
-            self.description = description
-            self.argument_default = argument_default
-            self.prefix_chars = prefix_chars
-            self.conflict_handler = conflict_handler
-
-            # set up registries
-            self._registries = {}
-
-            # register actions
-            self.register('action', None, _StoreAction)
-            self.register('action', 'store', _StoreAction)
-            self.register('action', 'store_const', _StoreConstAction)
-            self.register('action', 'store_true', _StoreTrueAction)
-            self.register('action', 'store_false', _StoreFalseAction)
-            self.register('action', 'append', _AppendAction)
-            self.register('action', 'append_const', _AppendConstAction)
-            self.register('action', 'count', _CountAction)
-            self.register('action', 'help', _HelpAction)
-            self.register('action', 'version', _VersionAction)
-            self.register('action', 'parsers', _SubParsersAction)
-
-            # raise an exception if the conflict handler is invalid
-            self._get_handler()
-
-            # action storage
-            self._actions = []
-            self._option_string_actions = {}
-
-            # groups
-            self._action_groups = []
-            self._mutually_exclusive_groups = []
-
-            # defaults storage
-            self._defaults = {}
-
-            # determines whether an "option" looks like a negative number
-            self._negative_number_matcher = _re.compile(r'^-\d+$|^-\d*\.\d+$')
-
-            # whether or not there are any optionals that look like negative
-            # numbers -- uses a list so it can be shared and edited
-            self._has_negative_number_optionals = []
-
-        # ====================
-        # Registration methods
-        # ====================
-        def register(self, registry_name, value, object):
-            registry = self._registries.setdefault(registry_name, {})
-            registry[value] = object
-
-        def _registry_get(self, registry_name, value, default=None):
-            return self._registries[registry_name].get(value, default)
-
-        # ==================================
-        # Namespace default accessor methods
-        # ==================================
-        def set_defaults(self, **kwargs):
-            self._defaults.update(kwargs)
-
-            # if these defaults match any existing arguments, replace
-            # the previous default on the object with the new one
-            for action in self._actions:
-                if action.dest in kwargs:
-                    action.default = kwargs[action.dest]
-
-        def get_default(self, dest):
-            for action in self._actions:
-                if action.dest == dest and action.default is not None:
-                    return action.default
-            return self._defaults.get(dest, None)
-
-
-        # =======================
-        # Adding argument actions
-        # =======================
-        def add_argument(self, *args, **kwargs):
-            """
-            add_argument(dest, ..., name=value, ...)
-            add_argument(option_string, option_string, ..., name=value, ...)
-            """
-
-            # if no positional args are supplied or only one is supplied and
-            # it doesn't look like an option string, parse a positional
-            # argument
-            chars = self.prefix_chars
-            if not args or len(args) == 1 and args[0][0] not in chars:
-                if args and 'dest' in kwargs:
-                    raise ValueError('dest supplied twice for positional argument')
-                kwargs = self._get_positional_kwargs(*args, **kwargs)
-
-            # otherwise, we're adding an optional argument
-            else:
-                kwargs = self._get_optional_kwargs(*args, **kwargs)
-
-            # if no default was supplied, use the parser-level default
-            if 'default' not in kwargs:
-                dest = kwargs['dest']
-                if dest in self._defaults:
-                    kwargs['default'] = self._defaults[dest]
-                elif self.argument_default is not None:
-                    kwargs['default'] = self.argument_default
-
-            # create the action object, and add it to the parser
-            action_class = self._pop_action_class(kwargs)
-            if not _callable(action_class):
-                raise ValueError('unknown action "%s"' % action_class)
-            action = action_class(**kwargs)
-
-            # raise an error if the action type is not callable
-            type_func = self._registry_get('type', action.type, action.type)
-            if not _callable(type_func):
-                raise ValueError('%r is not callable' % type_func)
-
-            return self._add_action(action)
-
-        def add_argument_group(self, *args, **kwargs):
-            group = _ArgumentGroup(self, *args, **kwargs)
-            self._action_groups.append(group)
-            return group
-
-        def add_mutually_exclusive_group(self, **kwargs):
-            group = _MutuallyExclusiveGroup(self, **kwargs)
-            self._mutually_exclusive_groups.append(group)
-            return group
-
-        def _add_action(self, action):
-            # resolve any conflicts
-            self._check_conflict(action)
-
-            # add to actions list
-            self._actions.append(action)
-            action.container = self
-
-            # index the action by any option strings it has
-            for option_string in action.option_strings:
-                self._option_string_actions[option_string] = action
-
-            # set the flag if any option strings look like negative numbers
-            for option_string in action.option_strings:
-                if self._negative_number_matcher.match(option_string):
-                    if not self._has_negative_number_optionals:
-                        self._has_negative_number_optionals.append(True)
-
-            # return the created action
-            return action
-
-        def _remove_action(self, action):
-            self._actions.remove(action)
-
-        def _add_container_actions(self, container):
-            # collect groups by titles
-            title_group_map = {}
-            for group in self._action_groups:
-                if group.title in title_group_map:
-                    msg = _('cannot merge actions - two groups are named %r')
-                    raise ValueError(msg % (group.title))
-                title_group_map[group.title] = group
-
-            # map each action to its group
-            group_map = {}
-            for group in container._action_groups:
-
-                # if a group with the title exists, use that, otherwise
-                # create a new group matching the container's group
-                if group.title not in title_group_map:
-                    title_group_map[group.title] = self.add_argument_group(
-                        title=group.title,
-                        description=group.description,
-                        conflict_handler=group.conflict_handler)
-
-                # map the actions to their new group
-                for action in group._group_actions:
-                    group_map[action] = title_group_map[group.title]
-
-            # add container's mutually exclusive groups
-            # NOTE: if add_mutually_exclusive_group ever gains title= and
-            # description= then this code will need to be expanded as above
-            for group in container._mutually_exclusive_groups:
-                mutex_group = self.add_mutually_exclusive_group(
-                    required=group.required)
-
-                # map the actions to their new mutex group
-                for action in group._group_actions:
-                    group_map[action] = mutex_group
-
-            # add all actions to this container or their group
-            for action in container._actions:
-                group_map.get(action, self)._add_action(action)
-
-        def _get_positional_kwargs(self, dest, **kwargs):
-            # make sure required is not specified
-            if 'required' in kwargs:
-                msg = _("'required' is an invalid argument for positionals")
-                raise TypeError(msg)
-
-            # mark positional arguments as required if at least one is
-            # always required
-            if kwargs.get('nargs') not in [OPTIONAL, ZERO_OR_MORE]:
-                kwargs['required'] = True
-            if kwargs.get('nargs') == ZERO_OR_MORE and 'default' not in kwargs:
-                kwargs['required'] = True
-
-            # return the keyword arguments with no option strings
-            return dict(kwargs, dest=dest, option_strings=[])
-
-        def _get_optional_kwargs(self, *args, **kwargs):
-            # determine short and long option strings
-            option_strings = []
-            long_option_strings = []
-            for option_string in args:
-                # error on strings that don't start with an appropriate prefix
-                if not option_string[0] in self.prefix_chars:
-                    msg = _('invalid option string %r: '
-                            'must start with a character %r')
-                    tup = option_string, self.prefix_chars
-                    raise ValueError(msg % tup)
-
-                # strings starting with two prefix characters are long options
-                option_strings.append(option_string)
-                if option_string[0] in self.prefix_chars:
-                    if len(option_string) > 1:
-                        if option_string[1] in self.prefix_chars:
-                            long_option_strings.append(option_string)
-
-            # infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x'
-            dest = kwargs.pop('dest', None)
-            if dest is None:
-                if long_option_strings:
-                    dest_option_string = long_option_strings[0]
-                else:
-                    dest_option_string = option_strings[0]
-                dest = dest_option_string.lstrip(self.prefix_chars)
-                if not dest:
-                    msg = _('dest= is required for options like %r')
-                    raise ValueError(msg % option_string)
-                dest = dest.replace('-', '_')
-
-            # return the updated keyword arguments
-            return dict(kwargs, dest=dest, option_strings=option_strings)
-
-        def _pop_action_class(self, kwargs, default=None):
-            action = kwargs.pop('action', default)
-            return self._registry_get('action', action, action)
-
-        def _get_handler(self):
-            # determine function from conflict handler string
-            handler_func_name = '_handle_conflict_%s' % self.conflict_handler
-            try:
-                return getattr(self, handler_func_name)
-            except AttributeError:
-                msg = _('invalid conflict_resolution value: %r')
-                raise ValueError(msg % self.conflict_handler)
-
-        def _check_conflict(self, action):
-
-            # find all options that conflict with this option
-            confl_optionals = []
-            for option_string in action.option_strings:
-                if option_string in self._option_string_actions:
-                    confl_optional = self._option_string_actions[option_string]
-                    confl_optionals.append((option_string, confl_optional))
-
-            # resolve any conflicts
-            if confl_optionals:
-                conflict_handler = self._get_handler()
-                conflict_handler(action, confl_optionals)
-
-        def _handle_conflict_error(self, action, conflicting_actions):
-            message = _('conflicting option string(s): %s')
-            conflict_string = ', '.join([option_string
-                                         for option_string, action
-                                         in conflicting_actions])
-            raise ArgumentError(action, message % conflict_string)
-
-        def _handle_conflict_resolve(self, action, conflicting_actions):
-
-            # remove all conflicting options
-            for option_string, action in conflicting_actions:
-
-                # remove the conflicting option
-                action.option_strings.remove(option_string)
-                self._option_string_actions.pop(option_string, None)
-
-                # if the option now has no option string, remove it from the
-                # container holding it
-                if not action.option_strings:
-                    action.container._remove_action(action)
-
-
-    class _ArgumentGroup(_ActionsContainer):
-
-        def __init__(self, container, title=None, description=None, **kwargs):
-            # add any missing keyword arguments by checking the container
-            update = kwargs.setdefault
-            update('conflict_handler', container.conflict_handler)
-            update('prefix_chars', container.prefix_chars)
-            update('argument_default', container.argument_default)
-            super_init = super(_ArgumentGroup, self).__init__
-            super_init(description=description, **kwargs)
-
-            # group attributes
-            self.title = title
-            self._group_actions = []
-
-            # share most attributes with the container
-            self._registries = container._registries
-            self._actions = container._actions
-            self._option_string_actions = container._option_string_actions
-            self._defaults = container._defaults
-            self._has_negative_number_optionals = \
-                container._has_negative_number_optionals
-
-        def _add_action(self, action):
-            action = super(_ArgumentGroup, self)._add_action(action)
-            self._group_actions.append(action)
-            return action
-
-        def _remove_action(self, action):
-            super(_ArgumentGroup, self)._remove_action(action)
-            self._group_actions.remove(action)
-
-
-    class _MutuallyExclusiveGroup(_ArgumentGroup):
-
-        def __init__(self, container, required=False):
-            super(_MutuallyExclusiveGroup, self).__init__(container)
-            self.required = required
-            self._container = container
-
-        def _add_action(self, action):
-            if action.required:
-                msg = _('mutually exclusive arguments must be optional')
-                raise ValueError(msg)
-            action = self._container._add_action(action)
-            self._group_actions.append(action)
-            return action
-
-        def _remove_action(self, action):
-            self._container._remove_action(action)
-            self._group_actions.remove(action)
-
-
-    class ArgumentParser(_AttributeHolder, _ActionsContainer):
-        """Object for parsing command line strings into Python objects.
-
-        Keyword Arguments:
-            - prog -- The name of the program (default: sys.argv[0])
-            - usage -- A usage message (default: auto-generated from arguments)
-            - description -- A description of what the program does
-            - epilog -- Text following the argument descriptions
-            - parents -- Parsers whose arguments should be copied into this one
-            - formatter_class -- HelpFormatter class for printing help messages
-            - prefix_chars -- Characters that prefix optional arguments
-            - fromfile_prefix_chars -- Characters that prefix files containing
-                additional arguments
-            - argument_default -- The default value for all arguments
-            - conflict_handler -- String indicating how to handle conflicts
-            - add_help -- Add a -h/-help option
-        """
-
-        def __init__(self,
-                     prog=None,
-                     usage=None,
-                     description=None,
-                     epilog=None,
-                     version=None,
-                     parents=[],
-                     formatter_class=HelpFormatter,
-                     prefix_chars='-',
-                     fromfile_prefix_chars=None,
-                     argument_default=None,
-                     conflict_handler='error',
-                     add_help=True):
-
-            if version is not None:
-                import warnings
-                warnings.warn(
-                    """The "version" argument to ArgumentParser is deprecated. """
-                    """Please use """
-                    """"add_argument(..., action='version', version="N", ...)" """
-                    """instead""", DeprecationWarning)
-
-            superinit = super(ArgumentParser, self).__init__
-            superinit(description=description,
-                      prefix_chars=prefix_chars,
-                      argument_default=argument_default,
-                      conflict_handler=conflict_handler)
-
-            # default setting for prog
-            if prog is None:
-                prog = _os.path.basename(_sys.argv[0])
-
-            self.prog = prog
-            self.usage = usage
-            self.epilog = epilog
-            self.version = version
-            self.formatter_class = formatter_class
-            self.fromfile_prefix_chars = fromfile_prefix_chars
-            self.add_help = add_help
-
-            add_group = self.add_argument_group
-            self._positionals = add_group(_('positional arguments'))
-            self._optionals = add_group(_('optional arguments'))
-            self._subparsers = None
-
-            # register types
-            def identity(string):
-                return string
-            self.register('type', None, identity)
-
-            # add help and version arguments if necessary
-            # (using explicit default to override global argument_default)
-            if '-' in prefix_chars:
-                default_prefix = '-'
-            else:
-                default_prefix = prefix_chars[0]
-            if self.add_help:
-                self.add_argument(
-                    default_prefix+'h', default_prefix*2+'help',
-                    action='help', default=SUPPRESS,
-                    help=_('show this help message and exit'))
-            if self.version:
-                self.add_argument(
-                    default_prefix+'v', default_prefix*2+'version',
-                    action='version', default=SUPPRESS,
-                    version=self.version,
-                    help=_("show program's version number and exit"))
-
-            # add parent arguments and defaults
-            for parent in parents:
-                self._add_container_actions(parent)
-                try:
-                    defaults = parent._defaults
-                except AttributeError:
-                    pass
-                else:
-                    self._defaults.update(defaults)
-
-        # =======================
-        # Pretty __repr__ methods
-        # =======================
-        def _get_kwargs(self):
-            names = [
-                'prog',
-                'usage',
-                'description',
-                'version',
-                'formatter_class',
-                'conflict_handler',
-                'add_help',
-            ]
-            return [(name, getattr(self, name)) for name in names]
-
-        # ==================================
-        # Optional/Positional adding methods
-        # ==================================
-        def add_subparsers(self, **kwargs):
-            if self._subparsers is not None:
-                self.error(_('cannot have multiple subparser arguments'))
-
-            # add the parser class to the arguments if it's not present
-            kwargs.setdefault('parser_class', type(self))
-
-            if 'title' in kwargs or 'description' in kwargs:
-                title = _(kwargs.pop('title', 'subcommands'))
-                description = _(kwargs.pop('description', None))
-                self._subparsers = self.add_argument_group(title, description)
-            else:
-                self._subparsers = self._positionals
-
-            # prog defaults to the usage message of this parser, skipping
-            # optional arguments and with no "usage:" prefix
-            if kwargs.get('prog') is None:
-                formatter = self._get_formatter()
-                positionals = self._get_positional_actions()
-                groups = self._mutually_exclusive_groups
-                formatter.add_usage(self.usage, positionals, groups, '')
-                kwargs['prog'] = formatter.format_help().strip()
-
-            # create the parsers action and add it to the positionals list
-            parsers_class = self._pop_action_class(kwargs, 'parsers')
-            action = parsers_class(option_strings=[], **kwargs)
-            self._subparsers._add_action(action)
-
-            # return the created parsers action
-            return action
-
-        def _add_action(self, action):
-            if action.option_strings:
-                self._optionals._add_action(action)
-            else:
-                self._positionals._add_action(action)
-            return action
-
-        def _get_optional_actions(self):
-            return [action
-                    for action in self._actions
-                    if action.option_strings]
-
-        def _get_positional_actions(self):
-            return [action
-                    for action in self._actions
-                    if not action.option_strings]
-
-        # =====================================
-        # Command line argument parsing methods
-        # =====================================
-        def parse_args(self, args=None, namespace=None):
-            args, argv = self.parse_known_args(args, namespace)
-            if argv:
-                msg = _('unrecognized arguments: %s')
-                self.error(msg % ' '.join(argv))
-            return args
-
-        def parse_known_args(self, args=None, namespace=None):
-            # args default to the system args
-            if args is None:
-                args = _sys.argv[1:]
-
-            # default Namespace built from parser defaults
-            if namespace is None:
-                namespace = Namespace()
-
-            # add any action defaults that aren't present
-            for action in self._actions:
-                if action.dest is not SUPPRESS:
-                    if not hasattr(namespace, action.dest):
-                        if action.default is not SUPPRESS:
-                            default = action.default
-                            if isinstance(action.default, basestring):
-                                default = self._get_value(action, default)
-                            setattr(namespace, action.dest, default)
-
-            # add any parser defaults that aren't present
-            for dest in self._defaults:
-                if not hasattr(namespace, dest):
-                    setattr(namespace, dest, self._defaults[dest])
-
-            # parse the arguments and exit if there are any errors
-            try:
-                namespace, args = self._parse_known_args(args, namespace)
-                if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR):
-                    args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR))
-                    delattr(namespace, _UNRECOGNIZED_ARGS_ATTR)
-                return namespace, args
-            except ArgumentError:
-                err = _sys.exc_info()[1]
-                self.error(str(err))
-
-        def _parse_known_args(self, arg_strings, namespace):
-            # replace arg strings that are file references
-            if self.fromfile_prefix_chars is not None:
-                arg_strings = self._read_args_from_files(arg_strings)
-
-            # map all mutually exclusive arguments to the other arguments
-            # they can't occur with
-            action_conflicts = {}
-            for mutex_group in self._mutually_exclusive_groups:
-                group_actions = mutex_group._group_actions
-                for i, mutex_action in enumerate(mutex_group._group_actions):
-                    conflicts = action_conflicts.setdefault(mutex_action, [])
-                    conflicts.extend(group_actions[:i])
-                    conflicts.extend(group_actions[i + 1:])
-
-            # find all option indices, and determine the arg_string_pattern
-            # which has an 'O' if there is an option at an index,
-            # an 'A' if there is an argument, or a '-' if there is a '--'
-            option_string_indices = {}
-            arg_string_pattern_parts = []
-            arg_strings_iter = iter(arg_strings)
-            for i, arg_string in enumerate(arg_strings_iter):
-
-                # all args after -- are non-options
-                if arg_string == '--':
-                    arg_string_pattern_parts.append('-')
-                    for arg_string in arg_strings_iter:
-                        arg_string_pattern_parts.append('A')
-
-                # otherwise, add the arg to the arg strings
-                # and note the index if it was an option
-                else:
-                    option_tuple = self._parse_optional(arg_string)
-                    if option_tuple is None:
-                        pattern = 'A'
-                    else:
-                        option_string_indices[i] = option_tuple
-                        pattern = 'O'
-                    arg_string_pattern_parts.append(pattern)
-
-            # join the pieces together to form the pattern
-            arg_strings_pattern = ''.join(arg_string_pattern_parts)
-
-            # converts arg strings to the appropriate and then takes the action
-            seen_actions = set()
-            seen_non_default_actions = set()
-
-            def take_action(action, argument_strings, option_string=None):
-                seen_actions.add(action)
-                argument_values = self._get_values(action, argument_strings)
-
-                # error if this argument is not allowed with other previously
-                # seen arguments, assuming that actions that use the default
-                # value don't really count as "present"
-                if argument_values is not action.default:
-                    seen_non_default_actions.add(action)
-                    for conflict_action in action_conflicts.get(action, []):
-                        if conflict_action in seen_non_default_actions:
-                            msg = _('not allowed with argument %s')
-                            action_name = _get_action_name(conflict_action)
-                            raise ArgumentError(action, msg % action_name)
-
-                # take the action if we didn't receive a SUPPRESS value
-                # (e.g. from a default)
-                if argument_values is not SUPPRESS:
-                    action(self, namespace, argument_values, option_string)
-
-            # function to convert arg_strings into an optional action
-            def consume_optional(start_index):
-
-                # get the optional identified at this index
-                option_tuple = option_string_indices[start_index]
-                action, option_string, explicit_arg = option_tuple
-
-                # identify additional optionals in the same arg string
-                # (e.g. -xyz is the same as -x -y -z if no args are required)
-                match_argument = self._match_argument
-                action_tuples = []
-                while True:
-
-                    # if we found no optional action, skip it
-                    if action is None:
-                        extras.append(arg_strings[start_index])
-                        return start_index + 1
-
-                    # if there is an explicit argument, try to match the
-                    # optional's string arguments to only this
-                    if explicit_arg is not None:
-                        arg_count = match_argument(action, 'A')
-
-                        # if the action is a single-dash option and takes no
-                        # arguments, try to parse more single-dash options out
-                        # of the tail of the option string
-                        chars = self.prefix_chars
-                        if arg_count == 0 and option_string[1] not in chars:
-                            action_tuples.append((action, [], option_string))
-                            char = option_string[0]
-                            option_string = char + explicit_arg[0]
-                            new_explicit_arg = explicit_arg[1:] or None
-                            optionals_map = self._option_string_actions
-                            if option_string in optionals_map:
-                                action = optionals_map[option_string]
-                                explicit_arg = new_explicit_arg
-                            else:
-                                msg = _('ignored explicit argument %r')
-                                raise ArgumentError(action, msg % explicit_arg)
-
-                        # if the action expect exactly one argument, we've
-                        # successfully matched the option; exit the loop
-                        elif arg_count == 1:
-                            stop = start_index + 1
-                            args = [explicit_arg]
-                            action_tuples.append((action, args, option_string))
-                            break
-
-                        # error if a double-dash option did not use the
-                        # explicit argument
-                        else:
-                            msg = _('ignored explicit argument %r')
-                            raise ArgumentError(action, msg % explicit_arg)
-
-                    # if there is no explicit argument, try to match the
-                    # optional's string arguments with the following strings
-                    # if successful, exit the loop
-                    else:
-                        start = start_index + 1
-                        selected_patterns = arg_strings_pattern[start:]
-                        arg_count = match_argument(action, selected_patterns)
-                        stop = start + arg_count
-                        args = arg_strings[start:stop]
-                        action_tuples.append((action, args, option_string))
-                        break
-
-                # add the Optional to the list and return the index at which
-                # the Optional's string args stopped
-                assert action_tuples
-                for action, args, option_string in action_tuples:
-                    take_action(action, args, option_string)
-                return stop
-
-            # the list of Positionals left to be parsed; this is modified
-            # by consume_positionals()
-            positionals = self._get_positional_actions()
-
-            # function to convert arg_strings into positional actions
-            def consume_positionals(start_index):
-                # match as many Positionals as possible
-                match_partial = self._match_arguments_partial
-                selected_pattern = arg_strings_pattern[start_index:]
-                arg_counts = match_partial(positionals, selected_pattern)
-
-                # slice off the appropriate arg strings for each Positional
-                # and add the Positional and its args to the list
-                for action, arg_count in zip(positionals, arg_counts):
-                    args = arg_strings[start_index: start_index + arg_count]
-                    start_index += arg_count
-                    take_action(action, args)
-
-                # slice off the Positionals that we just parsed and return the
-                # index at which the Positionals' string args stopped
-                positionals[:] = positionals[len(arg_counts):]
-                return start_index
-
-            # consume Positionals and Optionals alternately, until we have
-            # passed the last option string
-            extras = []
-            start_index = 0
-            if option_string_indices:
-                max_option_string_index = max(option_string_indices)
-            else:
-                max_option_string_index = -1
-            while start_index <= max_option_string_index:
-
-                # consume any Positionals preceding the next option
-                next_option_string_index = min([
-                    index
-                    for index in option_string_indices
-                    if index >= start_index])
-                if start_index != next_option_string_index:
-                    positionals_end_index = consume_positionals(start_index)
-
-                    # only try to parse the next optional if we didn't consume
-                    # the option string during the positionals parsing
-                    if positionals_end_index > start_index:
-                        start_index = positionals_end_index
-                        continue
-                    else:
-                        start_index = positionals_end_index
-
-                # if we consumed all the positionals we could and we're not
-                # at the index of an option string, there were extra arguments
-                if start_index not in option_string_indices:
-                    strings = arg_strings[start_index:next_option_string_index]
-                    extras.extend(strings)
-                    start_index = next_option_string_index
-
-                # consume the next optional and any arguments for it
-                start_index = consume_optional(start_index)
-
-            # consume any positionals following the last Optional
-            stop_index = consume_positionals(start_index)
-
-            # if we didn't consume all the argument strings, there were extras
-            extras.extend(arg_strings[stop_index:])
-
-            # if we didn't use all the Positional objects, there were too few
-            # arg strings supplied.
-            if positionals:
-                self.error(_('too few arguments'))
-
-            # make sure all required actions were present
-            for action in self._actions:
-                if action.required:
-                    if action not in seen_actions:
-                        name = _get_action_name(action)
-                        self.error(_('argument %s is required') % name)
-
-            # make sure all required groups had one option present
-            for group in self._mutually_exclusive_groups:
-                if group.required:
-                    for action in group._group_actions:
-                        if action in seen_non_default_actions:
-                            break
-
-                    # if no actions were used, report the error
-                    else:
-                        names = [_get_action_name(action)
-                                 for action in group._group_actions
-                                 if action.help is not SUPPRESS]
-                        msg = _('one of the arguments %s is required')
-                        self.error(msg % ' '.join(names))
-
-            # return the updated namespace and the extra arguments
-            return namespace, extras
-
-        def _read_args_from_files(self, arg_strings):
-            # expand arguments referencing files
-            new_arg_strings = []
-            for arg_string in arg_strings:
-
-                # for regular arguments, just add them back into the list
-                if arg_string[0] not in self.fromfile_prefix_chars:
-                    new_arg_strings.append(arg_string)
-
-                # replace arguments referencing files with the file content
-                else:
-                    try:
-                        args_file = open(arg_string[1:])
-                        try:
-                            arg_strings = []
-                            for arg_line in args_file.read().splitlines():
-                                for arg in self.convert_arg_line_to_args(arg_line):
-                                    arg_strings.append(arg)
-                            arg_strings = self._read_args_from_files(arg_strings)
-                            new_arg_strings.extend(arg_strings)
-                        finally:
-                            args_file.close()
-                    except IOError:
-                        err = _sys.exc_info()[1]
-                        self.error(str(err))
-
-            # return the modified argument list
-            return new_arg_strings
-
-        def convert_arg_line_to_args(self, arg_line):
-            return [arg_line]
-
-        def _match_argument(self, action, arg_strings_pattern):
-            # match the pattern for this action to the arg strings
-            nargs_pattern = self._get_nargs_pattern(action)
-            match = _re.match(nargs_pattern, arg_strings_pattern)
-
-            # raise an exception if we weren't able to find a match
-            if match is None:
-                nargs_errors = {
-                    None: _('expected one argument'),
-                    OPTIONAL: _('expected at most one argument'),
-                    ONE_OR_MORE: _('expected at least one argument'),
-                }
-                default = _('expected %s argument(s)') % action.nargs
-                msg = nargs_errors.get(action.nargs, default)
-                raise ArgumentError(action, msg)
-
-            # return the number of arguments matched
-            return len(match.group(1))
-
-        def _match_arguments_partial(self, actions, arg_strings_pattern):
-            # progressively shorten the actions list by slicing off the
-            # final actions until we find a match
-            result = []
-            for i in range(len(actions), 0, -1):
-                actions_slice = actions[:i]
-                pattern = ''.join([self._get_nargs_pattern(action)
-                                   for action in actions_slice])
-                match = _re.match(pattern, arg_strings_pattern)
-                if match is not None:
-                    result.extend([len(string) for string in match.groups()])
-                    break
-
-            # return the list of arg string counts
-            return result
-
-        def _parse_optional(self, arg_string):
-            # if it's an empty string, it was meant to be a positional
-            if not arg_string:
-                return None
-
-            # if it doesn't start with a prefix, it was meant to be positional
-            if not arg_string[0] in self.prefix_chars:
-                return None
-
-            # if the option string is present in the parser, return the action
-            if arg_string in self._option_string_actions:
-                action = self._option_string_actions[arg_string]
-                return action, arg_string, None
-
-            # if it's just a single character, it was meant to be positional
-            if len(arg_string) == 1:
-                return None
-
-            # if the option string before the "=" is present, return the action
-            if '=' in arg_string:
-                option_string, explicit_arg = arg_string.split('=', 1)
-                if option_string in self._option_string_actions:
-                    action = self._option_string_actions[option_string]
-                    return action, option_string, explicit_arg
-
-            # search through all possible prefixes of the option string
-            # and all actions in the parser for possible interpretations
-            option_tuples = self._get_option_tuples(arg_string)
-
-            # if multiple actions match, the option string was ambiguous
-            if len(option_tuples) > 1:
-                options = ', '.join([option_string
-                    for action, option_string, explicit_arg in option_tuples])
-                tup = arg_string, options
-                self.error(_('ambiguous option: %s could match %s') % tup)
-
-            # if exactly one action matched, this segmentation is good,
-            # so return the parsed action
-            elif len(option_tuples) == 1:
-                option_tuple, = option_tuples
-                return option_tuple
-
-            # if it was not found as an option, but it looks like a negative
-            # number, it was meant to be positional
-            # unless there are negative-number-like options
-            if self._negative_number_matcher.match(arg_string):
-                if not self._has_negative_number_optionals:
-                    return None
-
-            # if it contains a space, it was meant to be a positional
-            if ' ' in arg_string:
-                return None
-
-            # it was meant to be an optional but there is no such option
-            # in this parser (though it might be a valid option in a subparser)
-            return None, arg_string, None
-
-        def _get_option_tuples(self, option_string):
-            result = []
-
-            # option strings starting with two prefix characters are only
-            # split at the '='
-            chars = self.prefix_chars
-            if option_string[0] in chars and option_string[1] in chars:
-                if '=' in option_string:
-                    option_prefix, explicit_arg = option_string.split('=', 1)
-                else:
-                    option_prefix = option_string
-                    explicit_arg = None
-                for option_string in self._option_string_actions:
-                    if option_string.startswith(option_prefix):
-                        action = self._option_string_actions[option_string]
-                        tup = action, option_string, explicit_arg
-                        result.append(tup)
-
-            # single character options can be concatenated with their arguments
-            # but multiple character options always have to have their argument
-            # separate
-            elif option_string[0] in chars and option_string[1] not in chars:
-                option_prefix = option_string
-                explicit_arg = None
-                short_option_prefix = option_string[:2]
-                short_explicit_arg = option_string[2:]
-
-                for option_string in self._option_string_actions:
-                    if option_string == short_option_prefix:
-                        action = self._option_string_actions[option_string]
-                        tup = action, option_string, short_explicit_arg
-                        result.append(tup)
-                    elif option_string.startswith(option_prefix):
-                        action = self._option_string_actions[option_string]
-                        tup = action, option_string, explicit_arg
-                        result.append(tup)
-
-            # shouldn't ever get here
-            else:
-                self.error(_('unexpected option string: %s') % option_string)
-
-            # return the collected option tuples
-            return result
-
-        def _get_nargs_pattern(self, action):
-            # in all examples below, we have to allow for '--' args
-            # which are represented as '-' in the pattern
-            nargs = action.nargs
-
-            # the default (None) is assumed to be a single argument
-            if nargs is None:
-                nargs_pattern = '(-*A-*)'
-
-            # allow zero or one arguments
-            elif nargs == OPTIONAL:
-                nargs_pattern = '(-*A?-*)'
-
-            # allow zero or more arguments
-            elif nargs == ZERO_OR_MORE:
-                nargs_pattern = '(-*[A-]*)'
-
-            # allow one or more arguments
-            elif nargs == ONE_OR_MORE:
-                nargs_pattern = '(-*A[A-]*)'
-
-            # allow any number of options or arguments
-            elif nargs == REMAINDER:
-                nargs_pattern = '([-AO]*)'
-
-            # allow one argument followed by any number of options or arguments
-            elif nargs == PARSER:
-                nargs_pattern = '(-*A[-AO]*)'
-
-            # all others should be integers
-            else:
-                nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs)
-
-            # if this is an optional action, -- is not allowed
-            if action.option_strings:
-                nargs_pattern = nargs_pattern.replace('-*', '')
-                nargs_pattern = nargs_pattern.replace('-', '')
-
-            # return the pattern
-            return nargs_pattern
-
-        # ========================
-        # Value conversion methods
-        # ========================
-        def _get_values(self, action, arg_strings):
-            # for everything but PARSER args, strip out '--'
-            if action.nargs not in [PARSER, REMAINDER]:
-                arg_strings = [s for s in arg_strings if s != '--']
-
-            # optional argument produces a default when not present
-            if not arg_strings and action.nargs == OPTIONAL:
-                if action.option_strings:
-                    value = action.const
-                else:
-                    value = action.default
-                if isinstance(value, basestring):
-                    value = self._get_value(action, value)
-                    self._check_value(action, value)
-
-            # when nargs='*' on a positional, if there were no command-line
-            # args, use the default if it is anything other than None
-            elif (not arg_strings and action.nargs == ZERO_OR_MORE and
-                  not action.option_strings):
-                if action.default is not None:
-                    value = action.default
-                else:
-                    value = arg_strings
-                self._check_value(action, value)
-
-            # single argument or optional argument produces a single value
-            elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]:
-                arg_string, = arg_strings
-                value = self._get_value(action, arg_string)
-                self._check_value(action, value)
-
-            # REMAINDER arguments convert all values, checking none
-            elif action.nargs == REMAINDER:
-                value = [self._get_value(action, v) for v in arg_strings]
-
-            # PARSER arguments convert all values, but check only the first
-            elif action.nargs == PARSER:
-                value = [self._get_value(action, v) for v in arg_strings]
-                self._check_value(action, value[0])
-
-            # all other types of nargs produce a list
-            else:
-                value = [self._get_value(action, v) for v in arg_strings]
-                for v in value:
-                    self._check_value(action, v)
-
-            # return the converted value
-            return value
-
-        def _get_value(self, action, arg_string):
-            type_func = self._registry_get('type', action.type, action.type)
-            if not _callable(type_func):
-                msg = _('%r is not callable')
-                raise ArgumentError(action, msg % type_func)
-
-            # convert the value to the appropriate type
-            try:
-                result = type_func(arg_string)
-
-            # ArgumentTypeErrors indicate errors
-            except ArgumentTypeError:
-                name = getattr(action.type, '__name__', repr(action.type))
-                msg = str(_sys.exc_info()[1])
-                raise ArgumentError(action, msg)
-
-            # TypeErrors or ValueErrors also indicate errors
-            except (TypeError, ValueError):
-                name = getattr(action.type, '__name__', repr(action.type))
-                msg = _('invalid %s value: %r')
-                raise ArgumentError(action, msg % (name, arg_string))
-
-            # return the converted value
-            return result
-
-        def _check_value(self, action, value):
-            # converted value must be one of the choices (if specified)
-            if action.choices is not None and value not in action.choices:
-                tup = value, ', '.join(map(repr, action.choices))
-                msg = _('invalid choice: %r (choose from %s)') % tup
-                raise ArgumentError(action, msg)
-
-        # =======================
-        # Help-formatting methods
-        # =======================
-        def format_usage(self):
-            formatter = self._get_formatter()
-            formatter.add_usage(self.usage, self._actions,
-                                self._mutually_exclusive_groups)
-            return formatter.format_help()
-
-        def format_help(self):
-            formatter = self._get_formatter()
-
-            # usage
-            formatter.add_usage(self.usage, self._actions,
-                                self._mutually_exclusive_groups)
-
-            # description
-            formatter.add_text(self.description)
-
-            # positionals, optionals and user-defined groups
-            for action_group in self._action_groups:
-                formatter.start_section(action_group.title)
-                formatter.add_text(action_group.description)
-                formatter.add_arguments(action_group._group_actions)
-                formatter.end_section()
-
-            # epilog
-            formatter.add_text(self.epilog)
-
-            # determine help from format above
-            return formatter.format_help()
-
-        def format_version(self):
-            import warnings
-            warnings.warn(
-                'The format_version method is deprecated -- the "version" '
-                'argument to ArgumentParser is no longer supported.',
-                DeprecationWarning)
-            formatter = self._get_formatter()
-            formatter.add_text(self.version)
-            return formatter.format_help()
-
-        def _get_formatter(self):
-            return self.formatter_class(prog=self.prog)
-
-        # =====================
-        # Help-printing methods
-        # =====================
-        def print_usage(self, file=None):
-            if file is None:
-                file = _sys.stdout
-            self._print_message(self.format_usage(), file)
-
-        def print_help(self, file=None):
-            if file is None:
-                file = _sys.stdout
-            self._print_message(self.format_help(), file)
-
-        def print_version(self, file=None):
-            import warnings
-            warnings.warn(
-                'The print_version method is deprecated -- the "version" '
-                'argument to ArgumentParser is no longer supported.',
-                DeprecationWarning)
-            self._print_message(self.format_version(), file)
-
-        def _print_message(self, message, file=None):
-            if message:
-                if file is None:
-                    file = _sys.stderr
-                file.write(message)
-
-        # ===============
-        # Exiting methods
-        # ===============
-        def exit(self, status=0, message=None):
-            if message:
-                self._print_message(message, _sys.stderr)
-            _sys.exit(status)
-
-        def error(self, message):
-            """error(message: string)
-
-            Prints a usage message incorporating the message to stderr and
-            exits.
-
-            If you override this in a subclass, it should not return -- it
-            should either exit or raise an exception.
-            """
-            self.print_usage(_sys.stderr)
-            self.exit(2, _('%s: error: %s\n') % (self.prog, message))
+except ImportError:
+    from .argparse_py2 import *
diff --git a/astropy/utils/compat/fractions.py b/astropy/utils/compat/fractions.py
index b10def4..eb8d139 100644
--- a/astropy/utils/compat/fractions.py
+++ b/astropy/utils/compat/fractions.py
@@ -13,6 +13,6 @@ from __future__ import absolute_import
 
 import sys
 if sys.version_info[:2] == (2, 6):
-    from ._fractions_27 import *
+    from ._fractions_py2 import *
 else:
     from fractions import *
diff --git a/astropy/utils/compat/futures/__init__.py b/astropy/utils/compat/futures/__init__.py
new file mode 100644
index 0000000..4c6dedf
--- /dev/null
+++ b/astropy/utils/compat/futures/__init__.py
@@ -0,0 +1,21 @@
+# Copyright 2009 Brian Quinlan. All Rights Reserved.
+# Licensed to PSF under a Contributor Agreement.
+
+"""Execute computations asynchronously using threads or processes."""
+
+__author__ = 'Brian Quinlan (brian at sweetapp.com)'
+
+try:
+    from concurrent.futures import *
+except ImportError:
+    from ._base import (FIRST_COMPLETED,
+                        FIRST_EXCEPTION,
+                        ALL_COMPLETED,
+                        CancelledError,
+                        TimeoutError,
+                        Future,
+                        Executor,
+                        wait,
+                        as_completed)
+    from .process import ProcessPoolExecutor
+    from .thread import ThreadPoolExecutor
diff --git a/astropy/utils/compat/futures/_base.py b/astropy/utils/compat/futures/_base.py
new file mode 100644
index 0000000..abebebf
--- /dev/null
+++ b/astropy/utils/compat/futures/_base.py
@@ -0,0 +1,636 @@
+# Copyright 2009 Brian Quinlan. All Rights Reserved.
+# Licensed to PSF under a Contributor Agreement.
+
+import logging
+import threading
+import time
+
+from collections import namedtuple
+
+
+__author__ = 'Brian Quinlan (brian at sweetapp.com)'
+
+FIRST_COMPLETED = 'FIRST_COMPLETED'
+FIRST_EXCEPTION = 'FIRST_EXCEPTION'
+ALL_COMPLETED = 'ALL_COMPLETED'
+_AS_COMPLETED = '_AS_COMPLETED'
+
+# Possible future states (for internal use by the futures package).
+PENDING = 'PENDING'
+RUNNING = 'RUNNING'
+# The future was cancelled by the user...
+CANCELLED = 'CANCELLED'
+# ...and _Waiter.add_cancelled() was called by a worker.
+CANCELLED_AND_NOTIFIED = 'CANCELLED_AND_NOTIFIED'
+FINISHED = 'FINISHED'
+
+_FUTURE_STATES = [
+    PENDING,
+    RUNNING,
+    CANCELLED,
+    CANCELLED_AND_NOTIFIED,
+    FINISHED
+]
+
+_STATE_TO_DESCRIPTION_MAP = {
+    PENDING: "pending",
+    RUNNING: "running",
+    CANCELLED: "cancelled",
+    CANCELLED_AND_NOTIFIED: "cancelled",
+    FINISHED: "finished"
+}
+
+# Logger for internal use by the futures package.
+LOGGER = logging.getLogger("concurrent.futures")
+STDERR_HANDLER = logging.StreamHandler()
+LOGGER.addHandler(STDERR_HANDLER)
+
+
+class Error(Exception):
+    """Base class for all future-related exceptions."""
+    pass
+
+
+class CancelledError(Error):
+    """The Future was cancelled."""
+    pass
+
+
+class TimeoutError(Error):
+    """The operation exceeded the given deadline."""
+    pass
+
+
+class _Waiter(object):
+    """Provides the event that `wait` and `as_completed` block on."""
+    def __init__(self):
+        self.event = threading.Event()
+        self.finished_futures = []
+
+    def add_result(self, future):
+        self.finished_futures.append(future)
+
+    def add_exception(self, future):
+        self.finished_futures.append(future)
+
+    def add_cancelled(self, future):
+        self.finished_futures.append(future)
+
+
+class _AsCompletedWaiter(_Waiter):
+    """Used by `as_completed`."""
+
+    def __init__(self):
+        super(_AsCompletedWaiter, self).__init__()
+        self.lock = threading.Lock()
+
+    def add_result(self, future):
+        with self.lock:
+            super(_AsCompletedWaiter, self).add_result(future)
+            self.event.set()
+
+    def add_exception(self, future):
+        with self.lock:
+            super(_AsCompletedWaiter, self).add_exception(future)
+            self.event.set()
+
+    def add_cancelled(self, future):
+        with self.lock:
+            super(_AsCompletedWaiter, self).add_cancelled(future)
+            self.event.set()
+
+
+class _FirstCompletedWaiter(_Waiter):
+    """Used by `wait(return_when=FIRST_COMPLETED)`."""
+
+    def add_result(self, future):
+        super(_FirstCompletedWaiter, self).add_result(future)
+        self.event.set()
+
+    def add_exception(self, future):
+        super(_FirstCompletedWaiter, self).add_exception(future)
+        self.event.set()
+
+    def add_cancelled(self, future):
+        super(_FirstCompletedWaiter, self).add_cancelled(future)
+        self.event.set()
+
+
+class _AllCompletedWaiter(_Waiter):
+    """Used by `wait(return_when=FIRST_EXCEPTION and ALL_COMPLETED)`."""
+
+    def __init__(self, num_pending_calls, stop_on_exception):
+        self.num_pending_calls = num_pending_calls
+        self.stop_on_exception = stop_on_exception
+        super(_AllCompletedWaiter, self).__init__()
+
+    def _decrement_pending_calls(self):
+        if self.num_pending_calls == len(self.finished_futures):
+            self.event.set()
+
+    def add_result(self, future):
+        super(_AllCompletedWaiter, self).add_result(future)
+        self._decrement_pending_calls()
+
+    def add_exception(self, future):
+        super(_AllCompletedWaiter, self).add_exception(future)
+        if self.stop_on_exception:
+            self.event.set()
+        else:
+            self._decrement_pending_calls()
+
+    def add_cancelled(self, future):
+        super(_AllCompletedWaiter, self).add_cancelled(future)
+        self._decrement_pending_calls()
+
+
+class _AcquireFutures(object):
+    """A context manager that does an ordered acquire of `Future`
+    conditions.
+    """
+
+    def __init__(self, futures):
+        self.futures = sorted(futures, key=id)
+
+    def __enter__(self):
+        for future in self.futures:
+            future._condition.acquire()
+
+    def __exit__(self, *args):
+        for future in self.futures:
+            future._condition.release()
+
+
+def _create_and_install_waiters(fs, return_when):
+    if return_when == _AS_COMPLETED:
+        waiter = _AsCompletedWaiter()
+    elif return_when == FIRST_COMPLETED:
+        waiter = _FirstCompletedWaiter()
+    else:
+        pending_count = sum(
+            f._state not in [CANCELLED_AND_NOTIFIED, FINISHED] for f in fs)
+
+        if return_when == FIRST_EXCEPTION:
+            waiter = _AllCompletedWaiter(pending_count,
+                                         stop_on_exception=True)
+        elif return_when == ALL_COMPLETED:
+            waiter = _AllCompletedWaiter(pending_count,
+                                         stop_on_exception=False)
+        else:
+            raise ValueError("Invalid return condition: %r" % return_when)
+
+    for f in fs:
+        f._waiters.append(waiter)
+
+    return waiter
+
+
+def as_completed(fs, timeout=None):
+    """An iterator over the given futures that yields each as it completes.
+
+    Parameters
+    ----------
+    fs
+        The sequence of Futures (possibly created by different Executors) to
+        iterate over.
+
+    timeout
+        The maximum number of seconds to wait. If None, then there
+        is no limit on the wait time.
+
+    Returns
+    -------
+    An iterator that yields the given Futures as they complete (finished or
+    cancelled).
+
+    Raises
+    ------
+    TimeoutError
+        If the entire result iterator could not be generated
+        before the given timeout.
+    """
+    if timeout is not None:
+        end_time = timeout + time.time()
+
+    with _AcquireFutures(fs):
+        finished = set(
+            f for f in fs
+            if f._state in [CANCELLED_AND_NOTIFIED, FINISHED])
+        pending = set(fs) - finished
+        waiter = _create_and_install_waiters(fs, _AS_COMPLETED)
+
+    try:
+        for future in finished:
+            yield future
+
+        while pending:
+            if timeout is None:
+                wait_timeout = None
+            else:
+                wait_timeout = end_time - time.time()
+                if wait_timeout < 0:
+                    raise TimeoutError(
+                        '%d (of %d) futures unfinished' % (
+                        len(pending), len(fs)))
+
+            waiter.event.wait(wait_timeout)
+
+            with waiter.lock:
+                finished = waiter.finished_futures
+                waiter.finished_futures = []
+                waiter.event.clear()
+
+            for future in finished:
+                yield future
+                pending.remove(future)
+
+    finally:
+        for f in fs:
+            f._waiters.remove(waiter)
+
+
+DoneAndNotDoneFutures = namedtuple(
+    'DoneAndNotDoneFutures', 'done not_done')
+
+
+def wait(fs, timeout=None, return_when=ALL_COMPLETED):
+    """Wait for the futures in the given sequence to complete.
+
+    Parameters
+    ----------
+    fs
+        The sequence of Futures (possibly created by different Executors) to
+        wait upon.
+
+    timeout
+        The maximum number of seconds to wait. If None, then there
+        is no limit on the wait time.
+
+    return_when
+        Indicates when this function should return. The options
+        are:
+
+            FIRST_COMPLETED - Return when any future finishes or is
+                              cancelled.
+            FIRST_EXCEPTION - Return when any future finishes by raising an
+                              exception. If no future raises an exception
+                              then it is equivalent to ALL_COMPLETED.
+            ALL_COMPLETED -   Return when all futures finish or are cancelled.
+
+    Returns
+    -------
+    A named 2-tuple of sets. The first set, named 'done', contains the
+    futures that completed (is finished or cancelled) before the wait
+    completed. The second set, named 'not_done', contains uncompleted
+    futures.
+    """
+    with _AcquireFutures(fs):
+        done = set(f for f in fs
+                   if f._state in [CANCELLED_AND_NOTIFIED, FINISHED])
+        not_done = set(fs) - done
+
+        if (return_when == FIRST_COMPLETED) and done:
+            return DoneAndNotDoneFutures(done, not_done)
+        elif (return_when == FIRST_EXCEPTION) and done:
+            if any(f for f in done
+                   if not f.cancelled() and f.exception() is not None):
+                return DoneAndNotDoneFutures(done, not_done)
+
+        if len(done) == len(fs):
+            return DoneAndNotDoneFutures(done, not_done)
+
+        waiter = _create_and_install_waiters(fs, return_when)
+
+    waiter.event.wait(timeout)
+    for f in fs:
+        f._waiters.remove(waiter)
+
+    done.update(waiter.finished_futures)
+    return DoneAndNotDoneFutures(done, set(fs) - done)
+
+
+class Future(object):
+    """Represents the result of an asynchronous computation."""
+
+    def __init__(self):
+        """Initializes the future. Should not be called by clients."""
+        self._condition = threading.Condition()
+        self._state = PENDING
+        self._result = None
+        self._exception = None
+        self._waiters = []
+        self._done_callbacks = []
+
+    def _invoke_callbacks(self):
+        for callback in self._done_callbacks:
+            try:
+                callback(self)
+            except Exception:
+                LOGGER.exception('exception calling callback for %r', self)
+
+    def __repr__(self):
+        with self._condition:
+            if self._state == FINISHED:
+                if self._exception:
+                    return '<Future at %s state=%s raised %s>' % (
+                        hex(id(self)),
+                        _STATE_TO_DESCRIPTION_MAP[self._state],
+                        self._exception.__class__.__name__)
+                else:
+                    return '<Future at %s state=%s returned %s>' % (
+                        hex(id(self)),
+                        _STATE_TO_DESCRIPTION_MAP[self._state],
+                        self._result.__class__.__name__)
+            return '<Future at %s state=%s>' % (
+                hex(id(self)), _STATE_TO_DESCRIPTION_MAP[self._state])
+
+    def cancel(self):
+        """Cancel the future if possible.
+
+        Returns True if the future was cancelled, False otherwise. A future
+        cannot be cancelled if it is running or has already completed.
+        """
+        with self._condition:
+            if self._state in [RUNNING, FINISHED]:
+                return False
+
+            if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]:
+                return True
+
+            self._state = CANCELLED
+            self._condition.notify_all()
+
+        self._invoke_callbacks()
+        return True
+
+    def cancelled(self):
+        """Return True if the future has cancelled."""
+        with self._condition:
+            return self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]
+
+    def running(self):
+        """Return True if the future is currently executing."""
+        with self._condition:
+            return self._state == RUNNING
+
+    def done(self):
+        """Return True of the future was cancelled or finished executing."""
+        with self._condition:
+            return self._state in [CANCELLED, CANCELLED_AND_NOTIFIED, FINISHED]
+
+    def __get_result(self):
+        if self._exception:
+            raise self._exception
+        else:
+            return self._result
+
+    def add_done_callback(self, fn):
+        """Attaches a callable that will be called when the future finishes.
+
+        Parameters
+        ----------
+        fn
+            A callable that will be called with this future as its only
+            argument when the future completes or is cancelled. The callable
+            will always be called by a thread in the same process in which
+            it was added. If the future has already completed or been
+            cancelled then the callable will be called immediately. These
+            callables are called in the order that they were added.
+        """
+        with self._condition:
+            if (self._state not in [CANCELLED, CANCELLED_AND_NOTIFIED,
+                                    FINISHED]):
+                self._done_callbacks.append(fn)
+                return
+        fn(self)
+
+    def result(self, timeout=None):
+        """Return the result of the call that the future represents.
+
+        Parameters
+        ----------
+        timeout
+            The number of seconds to wait for the result if the future
+            isn't done. If None, then there is no limit on the wait time.
+
+        Returns
+        -------
+        The result of the call that the future represents.
+
+        Raises
+        ------
+        CancelledError
+            If the future was cancelled.
+
+        TimeoutError
+            If the future didn't finish executing before the given
+            timeout.
+
+        Exception
+            If the call raised then that exception will be raised.
+        """
+        with self._condition:
+            if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]:
+                raise CancelledError()
+            elif self._state == FINISHED:
+                return self.__get_result()
+
+            self._condition.wait(timeout)
+
+            if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]:
+                raise CancelledError()
+            elif self._state == FINISHED:
+                return self.__get_result()
+            else:
+                raise TimeoutError()
+
+    def exception(self, timeout=None):
+        """Return the exception raised by the call that the future represents.
+
+        Parameters
+        ----------
+        timeout
+            The number of seconds to wait for the exception if the
+            future isn't done. If None, then there is no limit on the wait
+            time.
+
+        Returns
+        -------
+        The exception raised by the call that the future represents or None
+        if the call completed without raising.
+
+        Raises
+        ------
+        CancelledError
+            If the future was cancelled.
+
+        TimeoutError
+            If the future didn't finish executing before the given
+            timeout.
+        """
+
+        with self._condition:
+            if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]:
+                raise CancelledError()
+            elif self._state == FINISHED:
+                return self._exception
+
+            self._condition.wait(timeout)
+
+            if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]:
+                raise CancelledError()
+            elif self._state == FINISHED:
+                return self._exception
+            else:
+                raise TimeoutError()
+
+    # The following methods should only be used by Executors and in tests.
+    def set_running_or_notify_cancel(self):
+        """Mark the future as running or process any cancel notifications.
+
+        Should only be used by `Executor` implementations and unit tests.
+
+        If the future has been cancelled (`cancel` was called and returned
+        True) then any threads waiting on the future completing (though calls
+        to `as_completed` or `wait`) are notified and False is returned.
+
+        If the future was not cancelled then it is put in the running state
+        (future calls to `running` will return True) and True is returned.
+
+        This method should be called by `Executor` implementations before
+        executing the work associated with this future. If this method returns
+        False then the work should not be executed.
+
+        Returns
+        -------
+        False if the Future was cancelled, True otherwise.
+
+        Raises
+        ------
+        RuntimeError
+            if this method was already called or if `set_result`
+            or `set_exception` was called.
+        """
+        with self._condition:
+            if self._state == CANCELLED:
+                self._state = CANCELLED_AND_NOTIFIED
+                for waiter in self._waiters:
+                    waiter.add_cancelled(self)
+                # self._condition.notify_all() is not necessary because
+                # self.cancel() triggers a notification.
+                return False
+            elif self._state == PENDING:
+                self._state = RUNNING
+                return True
+            else:
+                LOGGER.critical('Future %s in unexpected state: %s',
+                                id(self.future),
+                                self.future._state)
+                raise RuntimeError('Future in unexpected state')
+
+    def set_result(self, result):
+        """Sets the return value of work associated with the future.
+
+        Should only be used by `Executor` implementations and unit tests.
+        """
+        with self._condition:
+            self._result = result
+            self._state = FINISHED
+            for waiter in self._waiters:
+                waiter.add_result(self)
+            self._condition.notify_all()
+        self._invoke_callbacks()
+
+    def set_exception(self, exception):
+        """Sets the result of the future as being the given exception.
+
+        Should only be used by `Executor` implementations and unit tests.
+        """
+        with self._condition:
+            self._exception = exception
+            self._state = FINISHED
+            for waiter in self._waiters:
+                waiter.add_exception(self)
+            self._condition.notify_all()
+        self._invoke_callbacks()
+
+
+class Executor(object):
+    """This is an abstract base class for concrete asynchronous executors."""
+
+    def submit(self, fn, *args, **kwargs):
+        """Submits a callable to be executed with the given arguments.
+
+        Schedules the callable to be executed as `fn(*args, **kwargs)` and
+        returns a `Future` instance representing the execution of the callable.
+
+        Returns
+        -------
+        A Future representing the given call.
+        """
+        raise NotImplementedError()
+
+    def map(self, fn, *iterables, **kwargs):
+        """Returns a iterator equivalent to `map(fn, iter)`.
+
+        Parameters
+        ----------
+        fn
+            A callable that will take take as many arguments as there are
+            passed iterables.
+
+        timeout
+            The maximum number of seconds to wait. If None, then there
+            is no limit on the wait time.
+
+        Returns
+        -------
+        An iterator equivalent to: `map(func, *iterables)` but the calls may
+        be evaluated out-of-order.
+
+        Raises
+        ------
+        TimeoutError
+            If the entire result iterator could not be generated
+            before the given timeout.
+
+        Exception
+            If `fn(*args)` raises for any values.
+        """
+        timeout = kwargs.get('timeout')
+        if timeout is not None:
+            end_time = timeout + time.time()
+
+        fs = [self.submit(fn, *args) for args in zip(*iterables)]
+
+        try:
+            for future in fs:
+                if timeout is None:
+                    yield future.result()
+                else:
+                    yield future.result(end_time - time.time())
+        finally:
+            for future in fs:
+                future.cancel()
+
+    def shutdown(self, wait=True):
+        """Clean-up the resources associated with the `Executor`.
+
+        It is safe to call this method several times. Otherwise, no other
+        methods can be called after this one.
+
+        Parameters
+        ----------
+        wait
+            If True then shutdown will not return until all running
+            futures have finished executing and the resources used by the
+            executor have been reclaimed.
+        """
+        pass
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, exc_type, exc_val, exc_tb):
+        self.shutdown(wait=True)
+        return False
diff --git a/astropy/utils/compat/futures/process.py b/astropy/utils/compat/futures/process.py
new file mode 100644
index 0000000..ef694dd
--- /dev/null
+++ b/astropy/utils/compat/futures/process.py
@@ -0,0 +1,388 @@
+# Copyright 2009 Brian Quinlan. All Rights Reserved.
+# Licensed to PSF under a Contributor Agreement.
+
+"""Implements ProcessPoolExecutor.
+
+The follow diagram and text describe the data-flow through the system::
+
+    |==================== In-process ====================|== Out-of-process ==|
+
+    +----------+     +-------+       +--------+     +----------+    +---------+
+    |          |  => | Work  |    => |        |  => | Call Q   | => |         |
+    |          |     | Ids   |       |        |     |          |    |         |
+    |          |     +-------+       |        |     +----------+    |         |
+    |          |     | ...   |       |        |     |...       |    |         |
+    |          |     | 6     |       |        |     |5, call() |    |         |
+    |          |     | 7     |       |        |     |...       |    |         |
+    | Process  |     | ...   |       | Local  |     +----------+    | Process |
+    |  Pool    |     +-------+       | Worker |                     |  #1..n  |
+    | Executor |                     | Thread |                     |         |
+    |          |     +---------+     |        |     +----------+    |         |
+    |          | <=> |  Work   | <=> |        | <=  | Result Q | <= |         |
+    |          |     |  Items  |     |        |     |          |    |         |
+    |          |     +---------+     |        |     +----------+    |         |
+    |          |     |6: call()|     |        |     |...       |    |         |
+    |          |     |   future|     |        |     |4, result |    |         |
+    |          |     |...      |     |        |     |3, except |    |         |
+    +----------+     +---------+     +--------+     +----------+    +---------+
+
+Executor.submit() called:
+    - creates a uniquely numbered _WorkItem and adds it to the 'Work Items'
+      dict
+    - adds the id of the _WorkItem to the 'Work Ids' queue
+
+Local worker thread:
+    - reads work ids from the 'Work Ids' queue and looks up the corresponding
+      WorkItem from the 'Work Items' dict: if the work item has been cancelled
+      then it is simply removed from the dict, otherwise it is repackaged as a
+      _CallItem and put in the 'Call Q'. New _CallItems are put in the 'Call Q'
+      until 'Call Q' is full. NOTE: the size of the 'Call Q' is kept small
+      because calls placed in the 'Call Q' can no longer be cancelled with
+      Future.cancel().
+    - reads _ResultItems from 'Result Q', updates the future stored in the
+      'Work Items' dict and deletes the dict entry
+
+Process #1..n:
+    - reads _CallItems from 'Call Q', executes the calls, and puts the
+      resulting _ResultItems in 'Request Q'
+"""
+
+import atexit
+import multiprocessing
+import threading
+import weakref
+import sys
+
+from . import _base
+
+try:
+    import queue
+except ImportError:
+    import Queue as queue
+
+
+__author__ = 'Brian Quinlan (brian at sweetapp.com)'
+
+# Workers are created as daemon threads and processes. This is done to allow
+# the interpreter to exit when there are still idle processes in a
+# ProcessPoolExecutor's process pool (i.e. shutdown() was not called). However,
+# allowing workers to die with the interpreter has two undesirable properties:
+#   - The workers would still be running during interpretor shutdown,
+#     meaning that they would fail in unpredictable ways.
+#   - The workers could be killed while evaluating a work item, which could
+#     be bad if the callable being evaluated has external side-effects e.g.
+#     writing to a file.
+#
+# To work around this problem, an exit handler is installed which tells the
+# workers to exit when their work queues are empty and then waits until the
+# threads/processes finish.
+
+_thread_references = set()
+_shutdown = False
+
+
+def _python_exit():
+    global _shutdown
+    _shutdown = True
+    for thread_reference in _thread_references:
+        thread = thread_reference()
+        if thread is not None:
+            thread.join()
+
+
+def _remove_dead_thread_references():
+    """Remove inactive threads from _thread_references.
+
+    Should be called periodically to prevent memory leaks in scenarios such as:
+        >>> while True:
+        ...    t = ThreadPoolExecutor(max_workers=5)
+        ...    t.map(int, ['1', '2', '3', '4', '5'])
+    """
+    for thread_reference in set(_thread_references):
+        if thread_reference() is None:
+            _thread_references.discard(thread_reference)
+
+
+# Controls how many more calls than processes will be queued in the call queue.
+# A smaller number will mean that processes spend more time idle waiting for
+# work while a larger number will make Future.cancel() succeed less frequently
+# (Futures in the call queue cannot be cancelled).
+EXTRA_QUEUED_CALLS = 1
+
+
+class _WorkItem(object):
+    def __init__(self, future, fn, args, kwargs):
+        self.future = future
+        self.fn = fn
+        self.args = args
+        self.kwargs = kwargs
+
+
+class _ResultItem(object):
+    def __init__(self, work_id, exception=None, result=None):
+        self.work_id = work_id
+        self.exception = exception
+        self.result = result
+
+
+class _CallItem(object):
+    def __init__(self, work_id, fn, args, kwargs):
+        self.work_id = work_id
+        self.fn = fn
+        self.args = args
+        self.kwargs = kwargs
+
+
+def _process_worker(call_queue, result_queue, shutdown):
+    """Evaluates calls from call_queue and places the results in result_queue.
+
+    This worker is run in a separate process.
+
+    Parameters
+    ----------
+    call_queue
+        A `multiprocessing.Queue` of _CallItems that will be read and
+        evaluated by the worker.
+
+    result_queue
+        A `multiprocessing.Queue` of _ResultItems that will written
+        to by the worker.
+
+    shutdown
+        A `multiprocessing.Event` that will be set as a signal to the
+        worker that it should exit when call_queue is empty.
+    """
+    while True:
+        try:
+            call_item = call_queue.get(block=True, timeout=0.1)
+        except queue.Empty:
+            if shutdown.is_set():
+                return
+        else:
+            try:
+                r = call_item.fn(*call_item.args, **call_item.kwargs)
+            except BaseException:
+                e = sys.exc_info()[1]
+                result_queue.put(_ResultItem(call_item.work_id,
+                                             exception=e))
+            else:
+                result_queue.put(_ResultItem(call_item.work_id,
+                                             result=r))
+
+
+def _add_call_item_to_queue(pending_work_items,
+                            work_ids,
+                            call_queue):
+    """Fills call_queue with _WorkItems from pending_work_items.
+
+    This function never blocks.
+
+    Parameters
+    ----------
+    pending_work_items
+        A dict mapping work ids to _WorkItems e.g.
+        {5: <_WorkItem...>, 6: <_WorkItem...>, ...}
+
+    work_ids
+        A queue.Queue of work ids e.g. Queue([5, 6, ...]). Work ids
+        are consumed and the corresponding _WorkItems from
+        pending_work_items are transformed into _CallItems and put in
+        call_queue.
+
+    call_queue
+        A multiprocessing.Queue that will be filled with _CallItems
+        derived from _WorkItems.
+    """
+    while True:
+        if call_queue.full():
+            return
+        try:
+            work_id = work_ids.get(block=False)
+        except queue.Empty:
+            return
+        else:
+            work_item = pending_work_items[work_id]
+
+            if work_item.future.set_running_or_notify_cancel():
+                call_queue.put(_CallItem(work_id,
+                                         work_item.fn,
+                                         work_item.args,
+                                         work_item.kwargs),
+                               block=True)
+            else:
+                del pending_work_items[work_id]
+                continue
+
+
+def _queue_manangement_worker(executor_reference,
+                              processes,
+                              pending_work_items,
+                              work_ids_queue,
+                              call_queue,
+                              result_queue,
+                              shutdown_process_event):
+    """Manages the communication between this process and the worker processes.
+
+    This function is run in a local thread.
+
+    Parameters
+    ----------
+    executor_reference
+        A weakref.ref to the ProcessPoolExecutor that owns
+        this thread. Used to determine if the ProcessPoolExecutor has been
+        garbage collected and that this function can exit.
+
+    process
+        A list of the multiprocessing.Process instances used as
+        workers.
+
+    pending_work_items
+        A dict mapping work ids to _WorkItems e.g.
+        {5: <_WorkItem...>, 6: <_WorkItem...>, ...}
+
+    work_ids_queue
+        A queue.Queue of work ids e.g. Queue([5, 6, ...]).
+
+    call_queue
+        A multiprocessing.Queue that will be filled with _CallItems
+        derived from _WorkItems for processing by the process workers.
+
+    result_queue
+        A multiprocessing.Queue of _ResultItems generated by the
+        process workers.
+
+    shutdown_process_event
+        A multiprocessing.Event used to signal the
+        process workers that they should exit when their work queue is
+        empty.
+    """
+    while True:
+        _add_call_item_to_queue(pending_work_items,
+                                work_ids_queue,
+                                call_queue)
+
+        try:
+            result_item = result_queue.get(block=True, timeout=0.1)
+        except queue.Empty:
+            executor = executor_reference()
+            # No more work items can be added if:
+            #   - The interpreter is shutting down OR
+            #   - The executor that owns this worker has been collected OR
+            #   - The executor that owns this worker has been shutdown.
+            if _shutdown or executor is None or executor._shutdown_thread:
+                # Since no new work items can be added, it is safe to shutdown
+                # this thread if there are no pending work items.
+                if not pending_work_items:
+                    shutdown_process_event.set()
+
+                    # If .join() is not called on the created processes then
+                    # some multiprocessing.Queue methods may deadlock on Mac OS
+                    # X.
+                    for p in processes:
+                        p.join()
+                    return
+            del executor
+        else:
+            work_item = pending_work_items[result_item.work_id]
+            del pending_work_items[result_item.work_id]
+
+            if result_item.exception:
+                work_item.future.set_exception(result_item.exception)
+            else:
+                work_item.future.set_result(result_item.result)
+
+
+class ProcessPoolExecutor(_base.Executor):
+    def __init__(self, max_workers=None):
+        """Initializes a new ProcessPoolExecutor instance.
+
+        Parameters
+        ----------
+        max_workers
+            The maximum number of processes that can be used to
+            execute the given calls. If None or not given then as many
+            worker processes will be created as the machine has processors.
+        """
+        _remove_dead_thread_references()
+
+        if max_workers is None:
+            self._max_workers = multiprocessing.cpu_count()
+        else:
+            self._max_workers = max_workers
+
+        # Make the call queue slightly larger than the number of processes to
+        # prevent the worker processes from idling. But don't make it too big
+        # because futures in the call queue cannot be cancelled.
+        self._call_queue = multiprocessing.Queue(self._max_workers +
+                                                 EXTRA_QUEUED_CALLS)
+        self._result_queue = multiprocessing.Queue()
+        self._work_ids = queue.Queue()
+        self._queue_management_thread = None
+        self._processes = set()
+
+        # Shutdown is a two-step process.
+        self._shutdown_thread = False
+        self._shutdown_process_event = multiprocessing.Event()
+        self._shutdown_lock = threading.Lock()
+        self._queue_count = 0
+        self._pending_work_items = {}
+
+    def _start_queue_management_thread(self):
+        if self._queue_management_thread is None:
+            self._queue_management_thread = threading.Thread(
+                target=_queue_manangement_worker,
+                args=(weakref.ref(self),
+                      self._processes,
+                      self._pending_work_items,
+                      self._work_ids,
+                      self._call_queue,
+                      self._result_queue,
+                      self._shutdown_process_event))
+            self._queue_management_thread.daemon = True
+            self._queue_management_thread.start()
+            _thread_references.add(weakref.ref(self._queue_management_thread))
+
+    def _adjust_process_count(self):
+        for _ in range(len(self._processes), self._max_workers):
+            p = multiprocessing.Process(target=_process_worker,
+                                        args=(self._call_queue,
+                                              self._result_queue,
+                                              self._shutdown_process_event))
+            p.start()
+            self._processes.add(p)
+
+    def submit(self, fn, *args, **kwargs):
+        with self._shutdown_lock:
+            if self._shutdown_thread:
+                raise RuntimeError(
+                    'cannot schedule new futures after shutdown')
+
+            f = _base.Future()
+            w = _WorkItem(f, fn, args, kwargs)
+
+            self._pending_work_items[self._queue_count] = w
+            self._work_ids.put(self._queue_count)
+            self._queue_count += 1
+
+            self._start_queue_management_thread()
+            self._adjust_process_count()
+            return f
+    submit.__doc__ = _base.Executor.submit.__doc__
+
+    def shutdown(self, wait=True):
+        with self._shutdown_lock:
+            self._shutdown_thread = True
+        if wait:
+            if self._queue_management_thread:
+                self._queue_management_thread.join()
+        # To reduce the risk of openning too many files, remove references to
+        # objects that use file descriptors.
+        self._queue_management_thread = None
+        self._call_queue = None
+        self._result_queue = None
+        self._shutdown_process_event = None
+        self._processes = None
+    shutdown.__doc__ = _base.Executor.shutdown.__doc__
+
+
+atexit.register(_python_exit)
diff --git a/astropy/utils/compat/futures/thread.py b/astropy/utils/compat/futures/thread.py
new file mode 100644
index 0000000..1d8c24a
--- /dev/null
+++ b/astropy/utils/compat/futures/thread.py
@@ -0,0 +1,153 @@
+# Copyright 2009 Brian Quinlan. All Rights Reserved.
+# Licensed to PSF under a Contributor Agreement.
+
+"""Implements ThreadPoolExecutor."""
+
+import atexit
+import threading
+import weakref
+import sys
+
+from . import _base
+
+try:
+    import queue
+except ImportError:
+    import Queue as queue
+
+
+__author__ = 'Brian Quinlan (brian at sweetapp.com)'
+
+# Workers are created as daemon threads. This is done to allow the interpreter
+# to exit when there are still idle threads in a ThreadPoolExecutor's thread
+# pool (i.e. shutdown() was not called). However, allowing workers to die with
+# the interpreter has two undesirable properties:
+#   - The workers would still be running during interpretor shutdown,
+#     meaning that they would fail in unpredictable ways.
+#   - The workers could be killed while evaluating a work item, which could
+#     be bad if the callable being evaluated has external side-effects e.g.
+#     writing to a file.
+#
+# To work around this problem, an exit handler is installed which tells the
+# workers to exit when their work queues are empty and then waits until the
+# threads finish.
+
+_thread_references = set()
+_shutdown = False
+
+
+def _python_exit():
+    global _shutdown
+    _shutdown = True
+    for thread_reference in _thread_references:
+        thread = thread_reference()
+        if thread is not None:
+            thread.join()
+
+
+def _remove_dead_thread_references():
+    """Remove inactive threads from _thread_references.
+
+    Should be called periodically to prevent memory leaks in scenarios such as:
+        >>> while True:
+        ...    t = ThreadPoolExecutor(max_workers=5)
+        ...    t.map(int, ['1', '2', '3', '4', '5'])
+    """
+    for thread_reference in set(_thread_references):
+        if thread_reference() is None:
+            _thread_references.discard(thread_reference)
+
+
+atexit.register(_python_exit)
+
+
+class _WorkItem(object):
+    def __init__(self, future, fn, args, kwargs):
+        self.future = future
+        self.fn = fn
+        self.args = args
+        self.kwargs = kwargs
+
+    def run(self):
+        if not self.future.set_running_or_notify_cancel():
+            return
+
+        try:
+            result = self.fn(*self.args, **self.kwargs)
+        except BaseException:
+            e = sys.exc_info()[1]
+            self.future.set_exception(e)
+        else:
+            self.future.set_result(result)
+
+
+def _worker(executor_reference, work_queue):
+    try:
+        while True:
+            try:
+                work_item = work_queue.get(block=True, timeout=0.1)
+            except queue.Empty:
+                executor = executor_reference()
+                # Exit if:
+                #   - The interpreter is shutting down OR
+                #   - The executor that owns the worker has been collected OR
+                #   - The executor that owns the worker has been shutdown.
+                if _shutdown or executor is None or executor._shutdown:
+                    return
+                del executor
+            else:
+                work_item.run()
+    except BaseException:
+        _base.LOGGER.critical('Exception in worker', exc_info=True)
+
+
+class ThreadPoolExecutor(_base.Executor):
+    def __init__(self, max_workers):
+        """Initializes a new ThreadPoolExecutor instance.
+
+        Parameters
+        ----------
+        max_workers
+            The maximum number of threads that can be used to
+            execute the given calls.
+        """
+        _remove_dead_thread_references()
+
+        self._max_workers = max_workers
+        self._work_queue = queue.Queue()
+        self._threads = set()
+        self._shutdown = False
+        self._shutdown_lock = threading.Lock()
+
+    def submit(self, fn, *args, **kwargs):
+        with self._shutdown_lock:
+            if self._shutdown:
+                raise RuntimeError(
+                    'cannot schedule new futures after shutdown')
+
+            f = _base.Future()
+            w = _WorkItem(f, fn, args, kwargs)
+
+            self._work_queue.put(w)
+            self._adjust_thread_count()
+            return f
+    submit.__doc__ = _base.Executor.submit.__doc__
+
+    def _adjust_thread_count(self):
+        # TODO(bquinlan): Should avoid creating new threads if there are more
+        # idle threads than items in the work queue.
+        if len(self._threads) < self._max_workers:
+            t = threading.Thread(target=_worker,
+                                 args=(weakref.ref(self), self._work_queue))
+            t.daemon = True
+            t.start()
+            self._threads.add(t)
+            _thread_references.add(weakref.ref(t))
+
+    def shutdown(self, wait=True):
+        with self._shutdown_lock:
+            self._shutdown = True
+        if wait:
+            for t in self._threads:
+                t.join()
+    shutdown.__doc__ = _base.Executor.shutdown.__doc__
diff --git a/astropy/utils/compat/gzip.py b/astropy/utils/compat/gzip.py
index 4387cb5..9671195 100644
--- a/astropy/utils/compat/gzip.py
+++ b/astropy/utils/compat/gzip.py
@@ -14,8 +14,8 @@ from __future__ import absolute_import
 
 import sys
 if sys.version_info[:2] == (3, 1):
-    from ._gzip_32 import *
+    from ._gzip_py3 import *
 elif sys.version_info[:2] == (2, 6):
-    from ._gzip_27 import *
+    from ._gzip_py2 import *
 else:
     from gzip import *
diff --git a/astropy/utils/compat/misc.py b/astropy/utils/compat/misc.py
index 917f4cd..c1b180d 100644
--- a/astropy/utils/compat/misc.py
+++ b/astropy/utils/compat/misc.py
@@ -14,11 +14,18 @@ Includes the following fixes:
 
 """
 
-from __future__ import absolute_import
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+from ...extern import six
 
-from sys import version_info
+import os
+import sys
 
-__all__ = ['inspect_getmodule', 'invalidate_caches']
+from functools import wraps
+
+
+__all__ = [
+    'inspect_getmodule', 'invalidate_caches', 'override__dir__']
 
 
 def _patched_getmodule(object, _filename=None):
@@ -28,8 +35,6 @@ def _patched_getmodule(object, _filename=None):
     function but includes a fix for a bug present in Python 3.1 and 3.2.
     """
     #these imports mock up what would otherwise have been in inspect
-    import sys
-    import os
     from inspect import modulesbyfile, _filesbymodname, getabsfile, ismodule
 
     if ismodule(object):
@@ -85,7 +90,7 @@ functionality with a bugfix for Python 3.1 and 3.2.
 
 #This assigns the stdlib inspect.getmodule to the variable name
 #`inspect_getmodule` if it's not buggy, and uses the matched version if it is.
-if version_info[0] < 3 or version_info[1] > 2:
+if sys.version_info[0] < 3 or sys.version_info[1] > 2:
     #in 2.x everythig is fine, as well as >=3.3
     from inspect import getmodule as inspect_getmodule
 else:
@@ -96,7 +101,45 @@ else:
 # general case. But sometimes it's necessary to manually invalidate those
 # caches so that the import system can pick up new generated files.  See
 # https://github.com/astropy/astropy/issues/820
-if version_info[:2] >= (3, 3):
+if sys.version_info[:2] >= (3, 3):
     from importlib import invalidate_caches
 else:
     invalidate_caches = lambda: None
+
+
+def override__dir__(f):
+    """
+    When overriding a __dir__ method on an object, you often want to
+    include the "standard" members on the object as well.  This
+    decorator takes care of that automatically, and all the wrapped
+    function needs to do is return a list of the "special" members
+    that wouldn't be found by the normal Python means.
+
+    Example
+    -------
+
+    @override__dir__
+    def __dir__(self):
+        return ['special_method1', 'special_method2']
+    """
+    if sys.version_info[:2] < (3, 3):
+        # There was no straightforward way to do this until Python 3.3, so
+        # we have this complex monstrosity
+        @wraps(f)
+        def override__dir__wrapper(self):
+            members = set()
+            for cls in self.__class__.mro():
+                members.update(dir(cls))
+            members.update(six.iterkeys(self.__dict__))
+            members.update(f(self))
+            return sorted(members)
+    else:
+        # http://bugs.python.org/issue12166
+
+        @wraps(f)
+        def override__dir__wrapper(self):
+            members = set(object.__dir__(self))
+            members.update(f(self))
+            return sorted(members)
+
+    return override__dir__wrapper
diff --git a/astropy/utils/compat/odict.py b/astropy/utils/compat/odict.py
index 8d7961e..8508237 100644
--- a/astropy/utils/compat/odict.py
+++ b/astropy/utils/compat/odict.py
@@ -1,194 +1,7 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-"""
-Backport of the Python 2.7 collections.OrderedDict class to Python 2.6.
-
-Ordered dictionaries are just like regular dictionaries but they remember the
-order that items were inserted.  When iterating over an ordered dictionary,
-the items are returned in the order their keys were first added.
-
-See: http://docs.python.org/library/collections.html#collections.OrderedDict
-"""
-
 from __future__ import absolute_import
 
-__all__ = ['OrderedDict']
-
 try:
     from collections import OrderedDict
 except ImportError:
-
-    from collections import MutableMapping
-    from operator import eq as _eq
-    from itertools import imap as _imap
-
-    try:
-        from thread import get_ident
-    except ImportError:
-        from dummy_thread import get_ident
-
-
-    def _recursive_repr(user_function):
-        'Decorator to make a repr function return "..." for a recursive call'
-        repr_running = set()
-
-        def wrapper(self):
-            key = id(self), get_ident()
-            if key in repr_running:
-                return '...'
-            repr_running.add(key)
-            try:
-                result = user_function(self)
-            finally:
-                repr_running.discard(key)
-            return result
-
-        # Can't use functools.wraps() here because of bootstrap issues
-        wrapper.__module__ = getattr(user_function, '__module__')
-        wrapper.__doc__ = getattr(user_function, '__doc__')
-        wrapper.__name__ = getattr(user_function, '__name__')
-        return wrapper
-
-    class OrderedDict(dict, MutableMapping):
-        'Dictionary that remembers insertion order'
-        # An inherited dict maps keys to values.
-        # The inherited dict provides __getitem__, __len__, __contains__, and get.
-        # The remaining methods are order-aware.
-        # Big-O running times for all methods are the same as for regular dictionaries.
-
-        # The internal self.__map dictionary maps keys to links in a doubly linked list.
-        # The circular doubly linked list starts and ends with a sentinel element.
-        # The sentinel element never gets deleted (this simplifies the algorithm).
-        # Each link is stored as a list of length three:  [PREV, NEXT, KEY].
-
-        def __init__(self, *args, **kwds):
-            '''Initialize an ordered dictionary.  Signature is the same as for
-            regular dictionaries, but keyword arguments are not recommended
-            because their insertion order is arbitrary.
-
-            '''
-            if len(args) > 1:
-                raise TypeError('expected at most 1 arguments, got %d' % len(args))
-            try:
-                self.__root
-            except AttributeError:
-                self.__root = root = [None, None, None]     # sentinel node
-                PREV = 0
-                NEXT = 1
-                root[PREV] = root[NEXT] = root
-                self.__map = {}
-            self.update(*args, **kwds)
-
-        def __setitem__(self, key, value, PREV=0, NEXT=1, dict_setitem=dict.__setitem__):
-            'od.__setitem__(i, y) <==> od[i]=y'
-            # Setting a new item creates a new link which goes at the end of the linked
-            # list, and the inherited dictionary is updated with the new key/value pair.
-            if key not in self:
-                root = self.__root
-                last = root[PREV]
-                last[NEXT] = root[PREV] = self.__map[key] = [last, root, key]
-            dict_setitem(self, key, value)
-
-        def __delitem__(self, key, PREV=0, NEXT=1, dict_delitem=dict.__delitem__):
-            'od.__delitem__(y) <==> del od[y]'
-            # Deleting an existing item uses self.__map to find the link which is
-            # then removed by updating the links in the predecessor and successor nodes.
-            dict_delitem(self, key)
-            link = self.__map.pop(key)
-            link_prev = link[PREV]
-            link_next = link[NEXT]
-            link_prev[NEXT] = link_next
-            link_next[PREV] = link_prev
-
-        def __iter__(self, NEXT=1, KEY=2):
-            'od.__iter__() <==> iter(od)'
-            # Traverse the linked list in order.
-            root = self.__root
-            curr = root[NEXT]
-            while curr is not root:
-                yield curr[KEY]
-                curr = curr[NEXT]
-
-        def __reversed__(self, PREV=0, KEY=2):
-            'od.__reversed__() <==> reversed(od)'
-            # Traverse the linked list in reverse order.
-            root = self.__root
-            curr = root[PREV]
-            while curr is not root:
-                yield curr[KEY]
-                curr = curr[PREV]
-
-        def __reduce__(self):
-            'Return state information for pickling'
-            items = [[k, self[k]] for k in self]
-            tmp = self.__map, self.__root
-            del self.__map, self.__root
-            inst_dict = vars(self).copy()
-            self.__map, self.__root = tmp
-            if inst_dict:
-                return (self.__class__, (items,), inst_dict)
-            return self.__class__, (items,)
-
-        def clear(self):
-            'od.clear() -> None.  Remove all items from od.'
-            try:
-                for node in self.__map.itervalues():
-                    del node[:]
-                self.__root[:] = [self.__root, self.__root, None]
-                self.__map.clear()
-            except AttributeError:
-                pass
-            dict.clear(self)
-
-        setdefault = MutableMapping.setdefault
-        update = MutableMapping.update
-        pop = MutableMapping.pop
-        keys = MutableMapping.keys
-        values = MutableMapping.values
-        items = MutableMapping.items
-        iterkeys = MutableMapping.iterkeys
-        itervalues = MutableMapping.itervalues
-        iteritems = MutableMapping.iteritems
-        __ne__ = MutableMapping.__ne__
-
-        def popitem(self, last=True):
-            '''od.popitem() -> (k, v), return and remove a (key, value) pair.
-            Pairs are returned in LIFO order if last is true or FIFO order if false.
-
-            '''
-            if not self:
-                raise KeyError('dictionary is empty')
-            key = next(reversed(self) if last else iter(self))
-            value = self.pop(key)
-            return key, value
-
-        @_recursive_repr
-        def __repr__(self):
-            'od.__repr__() <==> repr(od)'
-            if not self:
-                return '%s()' % (self.__class__.__name__,)
-            return '%s(%r)' % (self.__class__.__name__, self.items())
-
-        def copy(self):
-            'od.copy() -> a shallow copy of od'
-            return self.__class__(self)
-
-        @classmethod
-        def fromkeys(cls, iterable, value=None):
-            '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
-            and values equal to v (which defaults to None).
-
-            '''
-            d = cls()
-            for key in iterable:
-                d[key] = value
-            return d
-
-        def __eq__(self, other):
-            '''od.__eq__(y) <==> od==y.  Comparison to another OD is order-sensitive
-            while comparison to a regular mapping is order-insensitive.
-
-            '''
-            if isinstance(other, OrderedDict):
-                return len(self)==len(other) and \
-                       all(_imap(_eq, self.iteritems(), other.iteritems()))
-            return dict.__eq__(self, other)
+    from ._odict_py2 import *
diff --git a/astropy/utils/compat/subprocess.py b/astropy/utils/compat/subprocess.py
new file mode 100644
index 0000000..93a388b
--- /dev/null
+++ b/astropy/utils/compat/subprocess.py
@@ -0,0 +1,19 @@
+"""
+A replacement wrapper around the subprocess module that adds
+check_output (which was only added to Python in 2.7.
+
+Instead of importing subprocess, other modules should use this as follows::
+
+    from astropy.utils.compat import subprocess
+
+This module is safe to import from anywhere within astropy.
+"""
+from __future__ import absolute_import, print_function
+
+import subprocess
+
+# python2.7 and later provide a check_output method
+if not hasattr(subprocess, 'check_output'):
+    from ._subprocess_py2 import check_output
+
+from subprocess import *
diff --git a/astropy/utils/console.py b/astropy/utils/console.py
index cfad129..8920841 100644
--- a/astropy/utils/console.py
+++ b/astropy/utils/console.py
@@ -3,7 +3,8 @@
 """
 Utilities for console input and output.
 """
-from __future__ import division, print_function
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 import codecs
 import locale
@@ -23,30 +24,37 @@ try:
 except ImportError:
     _CAN_RESIZE_TERMINAL = False
 
-import numpy as np
-
 try:
     get_ipython()
 except NameError:
     OutStream = None
+    IPythonIOStream = None
     stdio = sys
 else:
     try:
         from IPython.zmq.iostream import OutStream
         from IPython.utils import io
+        # On Windows in particular this is necessary, as the io.stdout stream
+        # in IPython gets hooked up to some pyreadline magic to handle colors
         stdio = io
+        IPythonIOStream = io.IOStream
     except ImportError:
         OutStream = None
+        IPythonIOStream = None
         stdio = sys
 
 try:
-    import IPython
+    import IPython  # pylint: disable=W0611
     # This is just to set a flag that IPython is installed at all
     _HAVE_IPYTHON = True
 except ImportError:
     _HAVE_IPYTHON = False
 
 from ..config import ConfigurationItem
+from ..extern import six
+from ..extern.six.moves import range
+
+from .misc import deprecated, isiterable
 
 
 __all__ = [
@@ -58,9 +66,7 @@ __all__ = [
 USE_COLOR = ConfigurationItem(
     'use_color', sys.platform != 'win32' or _HAVE_IPYTHON,
     'When True, use ANSI color escape sequences when writing to the console.')
-USE_UNICODE = ConfigurationItem(
-    'use_unicode', True,
-    'Use Unicode characters when drawing progress bars etc. at the console.')
+from ..import UNICODE_OUTPUT
 
 
 IS_PY3 = sys.version_info[0] == 3
@@ -134,7 +140,7 @@ def _color_text(text, color):
         return text
 
     color_code = color_mapping.get(color, '0;39')
-    return u'\033[{0}m{1}\033[0m'.format(color_code, text)
+    return '\033[{0}m{1}\033[0m'.format(color_code, text)
 
 
 def _decode_preferred_encoding(s):
@@ -162,6 +168,14 @@ def _write_with_fallback(s, write, fileobj):
     'latin-1'.
     """
 
+    if IPythonIOStream is not None and isinstance(fileobj, IPythonIOStream):
+        # If the output stream is an IPython.utils.io.IOStream object that's
+        # not going to be very helpful to us since it doesn't raise any
+        # exceptions when an error occurs writing to its underlying stream.
+        # There's no advantage to us using IOStream.write directly though;
+        # instead just write directly to its underlying stream:
+        write = fileobj.stream.write
+
     try:
         write(s)
         return write
@@ -202,7 +216,7 @@ def color_print(*args, **kwargs):
 
     Parameters
     ----------
-    positional args : strings
+    positional args : str
         The positional arguments come in pairs (*msg*, *color*), where
         *msg* is the string to display and *color* is the color to
         display it in.
@@ -224,11 +238,11 @@ def color_print(*args, **kwargs):
 
     file = kwargs.get('file', stdio.stdout)
 
-    end = kwargs.get('end', u'\n')
+    end = kwargs.get('end', '\n')
 
     write = file.write
     if isatty(file) and USE_COLOR():
-        for i in xrange(0, len(args), 2):
+        for i in range(0, len(args), 2):
             msg = args[i]
             if i + 1 == len(args):
                 color = ''
@@ -248,7 +262,7 @@ def color_print(*args, **kwargs):
 
         write(end)
     else:
-        for i in xrange(0, len(args), 2):
+        for i in range(0, len(args), 2):
             msg = args[i]
             if not IS_PY3 and isinstance(msg, bytes):
                 # Support decoding bytes to unicode on Python 2; use the
@@ -293,26 +307,26 @@ def human_time(seconds):
         that is always exactly 6 characters.
     """
     units = [
-        (u'y', 60 * 60 * 24 * 7 * 52),
-        (u'w', 60 * 60 * 24 * 7),
-        (u'd', 60 * 60 * 24),
-        (u'h', 60 * 60),
-        (u'm', 60),
-        (u's', 1),
+        ('y', 60 * 60 * 24 * 7 * 52),
+        ('w', 60 * 60 * 24 * 7),
+        ('d', 60 * 60 * 24),
+        ('h', 60 * 60),
+        ('m', 60),
+        ('s', 1),
     ]
 
     seconds = int(seconds)
 
     if seconds < 60:
-        return u'   {0:02d}s'.format(seconds)
+        return '   {0:02d}s'.format(seconds)
     for i in xrange(len(units) - 1):
         unit1, limit1 = units[i]
         unit2, limit2 = units[i + 1]
         if seconds >= limit1:
-            return u'{0:02d}{1}{2:02d}{3}'.format(
+            return '{0:02d}{1}{2:02d}{3}'.format(
                 seconds // limit1, unit1,
                 (seconds % limit1) // limit2, unit2)
-    return u'  ~inf'
+    return '  ~inf'
 
 
 def human_file_size(size):
@@ -337,7 +351,7 @@ def human_file_size(size):
     size : str
         A human-friendly representation of the size of the file
     """
-    suffixes = u' kMGTPEH'
+    suffixes = ' kMGTPEH'
     if size == 0:
         num_scale = 0
     else:
@@ -356,22 +370,28 @@ def human_file_size(size):
     return "{0:>3s}{1}".format(str_value, suffix)
 
 
-class ProgressBar(object):
+class ProgressBar(six.Iterator):
     """
     A class to display a progress bar in the terminal.
 
-    It is designed to be used with the `with` statement::
+    It is designed to be used either with the `with` statement::
 
         with ProgressBar(len(items)) as bar:
             for item in enumerate(items):
                 bar.update()
+
+    or as a generator::
+
+        for item in ProgressBar(items):
+            item.process()
     """
-    def __init__(self, total, file=None):
+    def __init__(self, total_or_items, file=None):
         """
         Parameters
         ----------
-        total : int
-            The number of increments in the process being tracked.
+        total_or_items : int or sequence
+            If an int, the number of increments in the process being
+            tracked.  If a sequence, the items to iterate over.
 
         file : writable file-like object, optional
             The file to write the progress bar to.  Defaults to
@@ -388,7 +408,17 @@ class ProgressBar(object):
         else:
             self._silent = False
 
-        self._total = total
+        if isiterable(total_or_items):
+            self._items = iter(total_or_items)
+            self._total = len(total_or_items)
+        else:
+            try:
+                self._total = int(total_or_items)
+            except TypeError:
+                raise TypeError("First argument must be int or sequence")
+            else:
+                self._items = iter(range(self._total))
+
         self._file = file
         self._start_time = time.time()
 
@@ -406,6 +436,9 @@ class ProgressBar(object):
 
     def _handle_resize(self, signum=None, frame=None):
         if self._should_handle_resize:
+            # Don't import numpy at module level since it may not be
+            # available in all contexts that this module is imported
+            import numpy as np
             data = fcntl.ioctl(self._file, termios.TIOCGWINSZ, '\0' * 8)
             arr = np.fromstring(data, dtype=np.int16)
             terminal_width = arr[1]
@@ -428,6 +461,20 @@ class ProgressBar(object):
             if self._signal_set:
                 signal.signal(signal.SIGWINCH, signal.SIG_DFL)
 
+    def __iter__(self):
+        return self
+
+    def __next__(self):
+        try:
+            rv = next(self._items)
+        except StopIteration:
+            self.__exit__(None, None, None)
+            raise
+        else:
+            self.update()
+            return rv
+
+
     def update(self, value=None):
         """
         Update the progress bar to the given value (out of the total
@@ -446,26 +493,26 @@ class ProgressBar(object):
         write = file.write
 
         bar_fill = int(float(self._bar_length) * frac)
-        write(u'\r|')
-        color_print(u'=' * bar_fill, 'blue', file=file, end=u'')
+        write('\r|')
+        color_print('=' * bar_fill, 'blue', file=file, end='')
         if bar_fill < self._bar_length:
-            color_print(u'>', 'green', file=file, end=u'')
-            write(u'-' * (self._bar_length - bar_fill - 1))
-        write(u'|')
+            color_print('>', 'green', file=file, end='')
+            write('-' * (self._bar_length - bar_fill - 1))
+        write('|')
 
         if value >= self._total:
             t = time.time() - self._start_time
-            prefix = u'     '
+            prefix = '     '
         elif value <= 0:
             t = None
-            prefix = u''
+            prefix = ''
         else:
             t = ((time.time() - self._start_time) * (1.0 - frac)) / frac
-            prefix = u' ETA '
-        write(u' {0:>4s}/{1:>4s}'.format(
+            prefix = ' ETA '
+        write(' {0:>4s}/{1:>4s}'.format(
             human_file_size(value),
             self._human_total))
-        write(u' ({0:>6s}%)'.format(u'{0:.2f}'.format(frac * 100.0)))
+        write(' ({0:>6s}%)'.format('{0:.2f}'.format(frac * 100.0)))
         write(prefix)
         if t is not None:
             write(human_time(t))
@@ -520,7 +567,6 @@ class ProgressBar(object):
                     if (i % steps) == 0:
                         bar.update(i)
             else:
-                import multiprocessing
                 p = multiprocessing.Pool()
                 for i, result in enumerate(
                     p.imap_unordered(function, items, steps)):
@@ -531,6 +577,7 @@ class ProgressBar(object):
 
         return results
 
+    @deprecated('0.3', alternative='ProgressBar')
     @classmethod
     def iterate(cls, items, file=None):
         """
@@ -558,17 +605,12 @@ class ProgressBar(object):
         generator :
             A generator over `items`
         """
-
         if file is None:
             file = stdio.stdout
-
-        with cls(len(items), file=file) as bar:
-            for item in items:
-                yield item
-                bar.update()
+        return cls(items, file=file)
 
 
-class Spinner():
+class Spinner(object):
     """
     A class to display a spinner in the terminal.
 
@@ -578,8 +620,8 @@ class Spinner():
             for item in enumerate(items):
                 s.next()
     """
-    _default_unicode_chars = u"◓◑◒◐"
-    _default_ascii_chars = u"-/|\\"
+    _default_unicode_chars = "◓◑◒◐"
+    _default_ascii_chars = "-/|\\"
 
     def __init__(self, msg, color='default', file=None, step=1,
                  chars=None):
@@ -615,7 +657,7 @@ class Spinner():
         self._file = file
         self._step = step
         if chars is None:
-            if USE_UNICODE:
+            if UNICODE_OUTPUT():
                 chars = self._default_unicode_chars
             else:
                 chars = self._default_ascii_chars
@@ -629,21 +671,30 @@ class Spinner():
         file = self._file
         write = file.write
         flush = file.flush
+        try_fallback = True
 
         while True:
-            write(u'\r')
-            color_print(self._msg, self._color, file=file, end=u'')
-            write(u' ')
-            write(chars[index])
+            write('\r')
+            color_print(self._msg, self._color, file=file, end='')
+            write(' ')
+            try:
+                if try_fallback:
+                    write = _write_with_fallback(chars[index], write, file)
+                else:
+                    write(chars[index])
+            except UnicodeError:
+                # If even _write_with_fallback failed for any reason just give
+                # up on trying to use the unicode characters
+                chars = self._default_ascii_chars
+                write(chars[index])
+                try_fallback = False  # No good will come of using this again
             flush()
             yield
 
-            for i in xrange(self._step):
+            for i in range(self._step):
                 yield
 
-            index += 1
-            if index == len(chars):
-                index = 0
+            index = (index + 1) % len(chars)
 
     def __enter__(self):
         if self._silent:
@@ -657,23 +708,23 @@ class Spinner():
         flush = file.flush
 
         if not self._silent:
-            write(u'\r')
-            color_print(self._msg, self._color, file=file, end=u'')
+            write('\r')
+            color_print(self._msg, self._color, file=file, end='')
         if exc_type is None:
-            color_print(u' [Done]', 'green', file=file)
+            color_print(' [Done]', 'green', file=file)
         else:
-            color_print(u' [Failed]', 'red', file=file)
+            color_print(' [Failed]', 'red', file=file)
         flush()
 
     def _silent_iterator(self):
-        color_print(self._msg, self._color, file=self._file, end=u'')
+        color_print(self._msg, self._color, file=self._file, end='')
         self._file.flush()
 
         while True:
             yield
 
 
-class ProgressBarOrSpinner:
+class ProgressBarOrSpinner(object):
     """
     A class that displays either a `ProgressBar` or `Spinner`
     depending on whether the total size of the operation is
@@ -743,13 +794,13 @@ class ProgressBarOrSpinner:
         given to the constructor.
         """
         if self._is_spinner:
-            self._iter.next()
+            next(self._iter)
         else:
             self._obj.update(value)
 
 
 def print_code_line(line, col=None, file=None, tabwidth=8, width=70):
-    u"""
+    """
     Prints a line of source code, highlighting a particular character
     position in the line.  Useful for displaying the context of error
     messages.
@@ -793,11 +844,11 @@ def print_code_line(line, col=None, file=None, tabwidth=8, width=70):
 
     if col is not None:
         assert col < len(line)
-        ntabs = line[:col].count(u'\t')
+        ntabs = line[:col].count('\t')
         col += ntabs * (tabwidth - 1)
 
-    line = line.rstrip(u'\n')
-    line = line.replace(u'\t', u' ' * tabwidth)
+    line = line.rstrip('\n')
+    line = line.replace('\t', ' ' * tabwidth)
 
     if col is not None and col > width:
         new_col = min(width // 2, len(line) - col)
@@ -806,18 +857,18 @@ def print_code_line(line, col=None, file=None, tabwidth=8, width=70):
         new_col = col
         col -= offset
         width = width - 3
-        color_print(u'…', 'darkgrey', file=file, end=u'')
+        color_print('…', 'darkgrey', file=file, end='')
 
     if len(line) > width:
         write(line[:width - 1])
-        color_print(u'…', 'darkgrey', file=file)
+        color_print('…', 'darkgrey', file=file)
     else:
         write(line)
-        write(u'\n')
+        write('\n')
 
     if col is not None:
-        write(u' ' * col)
-        color_print(u'^', 'red', file=file)
+        write(' ' * col)
+        color_print('^', 'red', file=file)
 
 
 # The following four Getch* classes implement unbuffered character reading from
@@ -876,7 +927,7 @@ class _GetchWindows(object):
         return msvcrt.getch()
 
 
-class _GetchMacCarbon:
+class _GetchMacCarbon(object):
     """
     A function which returns the current ASCII key that is down;
     if no ASCII key is down, the null string is returned.  The
diff --git a/astropy/utils/data.py b/astropy/utils/data.py
index 8fe0c7f..bda8b7c 100644
--- a/astropy/utils/data.py
+++ b/astropy/utils/data.py
@@ -1,18 +1,32 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
 """ This module contains helper functions for accessing, downloading, and
 caching data files.
 """
 
-from __future__ import division
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from ..extern import six
+from ..extern.six.moves import urllib
 
+import atexit
+import contextlib
+import fnmatch
+import hashlib
 import os
 import io
+import shutil
+import socket
 import sys
-import atexit
-import contextlib
-import urllib2
+import time
+
+from tempfile import NamedTemporaryFile, gettempdir
+from warnings import warn
 
 from ..config.configuration import ConfigurationItem
+from ..utils.exceptions import AstropyWarning
+
 
 __all__ = ['get_readable_fileobj', 'get_file_contents', 'get_pkg_data_fileobj',
            'get_pkg_data_filename', 'get_pkg_data_contents',
@@ -21,6 +35,7 @@ __all__ = ['get_readable_fileobj', 'get_file_contents', 'get_pkg_data_fileobj',
            'get_free_space_in_dir', 'check_free_space_in_dir', 'download_file',
            'download_files_in_parallel']
 
+
 DATAURL = ConfigurationItem(
     'dataurl', 'http://data.astropy.org/', 'URL for astropy remote data site.')
 REMOTE_TIMEOUT = ConfigurationItem(
@@ -43,7 +58,7 @@ DELETE_TEMPORARY_DOWNLOADS_AT_EXIT = ConfigurationItem(
 PY3K = sys.version_info[0] >= 3
 
 
-class CacheMissingWarning(Warning):
+class CacheMissingWarning(AstropyWarning):
     """
     This warning indicates the standard cache directory is not accessible, with
     the first argument providing the warning message. If args[1] is present, it
@@ -61,8 +76,7 @@ def _is_url(string):
     string : str
         The string to test
     """
-    from urlparse import urlparse
-    url = urlparse(string)
+    url = urllib.parse.urlparse(string)
     # url[0]==url.scheme, but url[0] is py 2.6-compat
     # we can't just check that url[0] is not an empty string, because
     # file paths in windows would return a non-empty scheme (e.g. e:\\
@@ -80,7 +94,8 @@ def _is_inside(path, parent_path):
 
 
 @contextlib.contextmanager
-def get_readable_fileobj(name_or_obj, encoding=None, cache=False):
+def get_readable_fileobj(name_or_obj, encoding=None, cache=False,
+                         show_progress=True, remote_timeout=None):
     """
     Given a filename or a readable file-like object, return a context
     manager that yields a readable file-like object.
@@ -122,9 +137,19 @@ def get_readable_fileobj(name_or_obj, encoding=None, cache=False):
 
     cache : bool, optional
         Whether to cache the contents of remote URLs.
-    """
 
-    import tempfile
+    show_progress : bool, optional
+        Whether to display a progress bar if the file is downloaded
+        from a remote server.  Default is `True`.
+
+    remote_timeout : float
+        Timeout for remote requests in seconds (default is the configurable
+        REMOTE_TIMEOUT, which is 3s by default)
+
+    Returns
+    -------
+    file : readable file-like object
+    """
 
     # close_fds is a list of file handles created by this function
     # that need to be closed.  We don't want to always just close the
@@ -135,10 +160,16 @@ def get_readable_fileobj(name_or_obj, encoding=None, cache=False):
     close_fds = []
     delete_fds = []
 
+    if remote_timeout is None:
+        # use configfile default
+        remote_timeout = REMOTE_TIMEOUT()
+
     # Get a file object to the content
-    if isinstance(name_or_obj, basestring):
+    if isinstance(name_or_obj, six.string_types):
         if _is_url(name_or_obj):
-            name_or_obj = download_file(name_or_obj, cache=cache)
+            name_or_obj = download_file(
+                name_or_obj, cache=cache, show_progress=show_progress,
+                timeout=remote_timeout)
         if PY3K:
             fileobj = io.FileIO(name_or_obj, 'r')
         else:
@@ -178,7 +209,7 @@ def get_readable_fileobj(name_or_obj, encoding=None, cache=False):
         try:
             # bz2.BZ2File does not support file objects, only filenames, so we
             # need to write the data to a temporary file
-            tmp = tempfile.NamedTemporaryFile("wb", delete=False)
+            tmp = NamedTemporaryFile("wb", delete=False)
             tmp.write(fileobj.read())
             tmp.close()
             delete_fds.append(tmp)
@@ -210,7 +241,7 @@ def get_readable_fileobj(name_or_obj, encoding=None, cache=False):
         # return a handle to that.
         import bz2
         if isinstance(fileobj, bz2.BZ2File):
-            tmp = tempfile.NamedTemporaryFile("wb", delete=False)
+            tmp = NamedTemporaryFile("wb", delete=False)
             data = fileobj.read()
             tmp.write(data)
             tmp.close()
@@ -313,9 +344,11 @@ def get_pkg_data_fileobj(data_name, encoding=None, cache=True):
 
     cache : bool
         If True, the file will be downloaded and saved locally or the
-        already-cached local copy will be accessed. If False, the file-like
-        object will directly access the resource (e.g. if a remote URL is
-        accessed, an object like that from `urllib2.urlopen` is returned).
+        already-cached local copy will be accessed. If False, the
+        file-like object will directly access the resource (e.g. if a
+        remote URL is accessed, an object like that from
+        `urllib2.urlopen` on Python 2 or `urllib.request.urlopen` on
+        Python 3 is returned).
 
     Returns
     -------
@@ -326,7 +359,7 @@ def get_pkg_data_fileobj(data_name, encoding=None, cache=True):
 
     Raises
     ------
-    urllib2.URLError
+    urllib2.URLError, urllib.error.URLError
         If a remote file cannot be found.
     IOError
         If problems occur writing or reading a local file.
@@ -373,7 +406,7 @@ def get_pkg_data_fileobj(data_name, encoding=None, cache=True):
                                     cache=cache)
 
 
-def get_pkg_data_filename(data_name):
+def get_pkg_data_filename(data_name, show_progress=True, remote_timeout=None):
     """
     Retrieves a data file from the standard locations for the package and
     provides a local filename for the data.
@@ -403,9 +436,17 @@ def get_pkg_data_filename(data_name):
               will first be searched for locally, and if not found,
               the Astropy data server will be queried.
 
+    show_progress : bool, optional
+        Whether to display a progress bar if the file is downloaded
+        from a remote server.  Default is `True`.
+
+    timeout : float
+        Timeout for the requests in seconds (default is the configurable
+        REMOTE_TIMEOUT, which is 3s by default)
+
     Raises
     ------
-    urllib2.URLError
+    urllib2.URLError, urllib.error.URLError
         If a remote file cannot be found.
     IOError
         If problems occur writing or reading a local file.
@@ -446,11 +487,18 @@ def get_pkg_data_filename(data_name):
 
     data_name = os.path.normpath(data_name)
 
+    if remote_timeout is None:
+        # use configfile default
+        remote_timeout = REMOTE_TIMEOUT()
+
     if data_name.startswith('hash/'):
         # first try looking for a local version if a hash is specified
         hashfn = _find_hash_fn(data_name[5:])
         if hashfn is None:
-            return download_file(DATAURL() + data_name, cache=True)
+            return download_file(
+                DATAURL() + data_name, cache=True,
+                show_progress=show_progress,
+                timeout=remote_timeout)
         else:
             return hashfn
     else:
@@ -461,7 +509,10 @@ def get_pkg_data_filename(data_name):
         elif os.path.isfile(datafn):  # local file
             return datafn
         else:  # remote file
-            return download_file(DATAURL() + data_name, cache=True)
+            return download_file(
+                DATAURL() + data_name, cache=True,
+                show_progress=show_progress,
+                timeout=remote_timeout)
 
 
 def get_pkg_data_contents(data_name, encoding=None, cache=True):
@@ -507,9 +558,11 @@ def get_pkg_data_contents(data_name, encoding=None, cache=True):
 
     cache : bool
         If True, the file will be downloaded and saved locally or the
-        already-cached local copy will be accessed. If False, the file-like
-        object will directly access the resource (e.g. if a remote URL is
-        accessed, an object like that from `urllib2.urlopen` is returned).
+        already-cached local copy will be accessed. If False, the
+        file-like object will directly access the resource (e.g. if a
+        remote URL is accessed, an object like that from
+        `urllib2.urlopen` on Python 2 or `urllib.request.urlopen` on
+        Python 3 is returned).
 
     Returns
     -------
@@ -518,7 +571,7 @@ def get_pkg_data_contents(data_name, encoding=None, cache=True):
 
     Raises
     ------
-    urllib2.URLError
+    urllib2.URLError, urllib.error.URLError
         If a remote file cannot be found.
     IOError
         If problems occur writing or reading a local file.
@@ -571,19 +624,16 @@ def get_pkg_data_filenames(datadir, pattern='*'):
             with open(fn) as f:
                 fcontents = f.read()
     """
-    import fnmatch
-    from os.path import isdir, isfile, join
-    from os import listdir
 
     path = _find_pkg_data_path(datadir)
-    if isfile(path):
+    if os.path.isfile(path):
         raise IOError(
             "Tried to access a data directory that's actually "
             "a package data file")
-    elif isdir(path):
-        for filename in listdir(path):
+    elif os.path.isdir(path):
+        for filename in os.listdir(path):
             if fnmatch.fnmatch(filename, pattern):
-                yield join(path, filename)
+                yield os.path.join(path, filename)
     else:
         raise IOError("Path not found")
 
@@ -670,7 +720,6 @@ def compute_hash(localfn):
         The hex digest of the MD5 hash for the contents of the `localfn` file.
 
     """
-    import hashlib
 
     with open(localfn, 'rb') as f:
         h = hashlib.md5()
@@ -687,7 +736,7 @@ def _find_pkg_data_path(data_name):
     Look for data in the source-included data directories and return the
     path.
     """
-    from os.path import dirname, join
+
     from ..utils.misc import find_current_module
 
     module = find_current_module(1, True)
@@ -709,10 +758,10 @@ def _find_pkg_data_path(data_name):
 
     rootpkg = __import__(rootpkgname)
 
-    module_path = dirname(module.__file__)
-    path = join(module_path, data_name)
+    module_path = os.path.dirname(module.__file__)
+    path = os.path.join(module_path, data_name)
 
-    root_dir = dirname(rootpkg.__file__)
+    root_dir = os.path.dirname(rootpkg.__file__)
     assert _is_inside(path, root_dir), \
            ("attempted to get a local data file outside "
             "of the " + rootpkgname + " tree")
@@ -725,8 +774,6 @@ def _find_hash_fn(hash):
     Looks for a local file by hash - returns file name if found and a valid
     file, otherwise returns None.
     """
-    from os.path import isfile, join
-    from warnings import warn
 
     try:
         dldir, urlmapfn = _get_download_cache_locs()
@@ -734,8 +781,8 @@ def _find_hash_fn(hash):
         msg = 'Could not access cache directory to search for data file: '
         warn(CacheMissingWarning(msg + str(e)))
         return None
-    hashfn = join(dldir, hash)
-    if isfile(hashfn):
+    hashfn = os.path.join(dldir, hash)
+    if os.path.isfile(hashfn):
         return hashfn
     else:
         return None
@@ -757,8 +804,19 @@ def get_free_space_in_dir(path):
         The amount of free space on the partition that the directory
         is on.
     """
-    stat = os.statvfs(path)
-    return stat.f_bavail * stat.f_frsize
+
+    if sys.platform.startswith('win'):
+        import ctypes
+        free_bytes = ctypes.c_ulonglong(0)
+        retval = ctypes.windll.kernel32.GetDiskFreeSpaceExW(
+                ctypes.c_wchar_p(path), None, None, ctypes.pointer(free_bytes))
+        if retval == 0:
+            raise IOError('Checking free space on %r failed unexpectedly.' %
+                          path)
+        return free_bytes.value
+    else:
+        stat = os.statvfs(path)
+        return stat.f_bavail * stat.f_frsize
 
 
 def check_free_space_in_dir(path, size):
@@ -788,7 +846,7 @@ def check_free_space_in_dir(path, size):
                 path, human_file_size(size)))
 
 
-def download_file(remote_url, cache=False):
+def download_file(remote_url, cache=False, show_progress=True, timeout=REMOTE_TIMEOUT()):
     """
     Accepts a URL, downloads and optionally caches the result
     returning the filename, with a name determined by the file's MD5
@@ -799,9 +857,14 @@ def download_file(remote_url, cache=False):
     ----------
     remote_url : str
         The URL of the file to download
+
     cache : bool, optional
         Whether to use the cache
 
+    show_progress : bool, optional
+        Whether to display a progress bar during the download (default
+        is `True`)
+
     Returns
     -------
     local_path : str
@@ -809,17 +872,10 @@ def download_file(remote_url, cache=False):
 
     Raises
     ------
-    `urllib2.URLError`
+    urllib2.URLError, urllib.error.URLError
         Whenever there's a problem getting the remote file.
     """
 
-    import hashlib
-    import socket
-    from contextlib import closing
-    from tempfile import NamedTemporaryFile, gettempdir
-    from shutil import move
-    from warnings import warn
-
     from ..utils.console import ProgressBarOrSpinner
 
     missing_cache = False
@@ -840,7 +896,8 @@ def download_file(remote_url, cache=False):
                 if str(remote_url) in url2hash:
                     return url2hash[str(remote_url)]
 
-        with closing(urllib2.urlopen(remote_url, timeout=REMOTE_TIMEOUT())) as remote:
+        with contextlib.closing(urllib.request.urlopen(
+                remote_url, timeout=timeout)) as remote:
             #keep a hash to rename the local file to the hashed name
             hash = hashlib.md5()
 
@@ -858,10 +915,15 @@ def download_file(remote_url, cache=False):
                 if cache:
                     check_free_space_in_dir(dldir, size)
 
+            if show_progress:
+                progress_stream = sys.stdout
+            else:
+                progress_stream = io.StringIO()
+
             dlmsg = "Downloading {0}".format(remote_url)
-            with ProgressBarOrSpinner(size, dlmsg) as p:
-                try:
-                    with NamedTemporaryFile(delete=False) as f:
+            with ProgressBarOrSpinner(size, dlmsg, file=progress_stream) as p:
+                with NamedTemporaryFile(delete=False) as f:
+                    try:
                         bytes_read = 0
                         block = remote.read(DOWNLOAD_CACHE_BLOCK_SIZE())
                         while block:
@@ -870,10 +932,10 @@ def download_file(remote_url, cache=False):
                             bytes_read += len(block)
                             p.update(bytes_read)
                             block = remote.read(DOWNLOAD_CACHE_BLOCK_SIZE())
-                except:
-                    if os.path.exists(f.name):
-                        os.remove(f.name)
-                    raise
+                    except:
+                        if os.path.exists(f.name):
+                            os.remove(f.name)
+                        raise
 
         if cache:
             _acquire_download_cache_lock()
@@ -885,7 +947,7 @@ def download_file(remote_url, cache=False):
                     if str(remote_url) in url2hash:
                         return url2hash[str(remote_url)]
                     local_path = os.path.join(dldir, hash.hexdigest())
-                    move(f.name, local_path)
+                    shutil.move(f.name, local_path)
                     url2hash[str(remote_url)] = local_path
             finally:
                 _release_download_cache_lock()
@@ -898,7 +960,7 @@ def download_file(remote_url, cache=False):
             if DELETE_TEMPORARY_DOWNLOADS_AT_EXIT():
                 global _tempfilestodel
                 _tempfilestodel.append(local_path)
-    except urllib2.URLError as e:
+    except urllib.error.URLError as e:
         if hasattr(e, 'reason') and hasattr(e.reason, 'errno') and e.reason.errno == 8:
             e.reason.strerror = e.reason.strerror + '. requested URL: ' + remote_url
             e.reason.args = (e.reason.errno, e.reason.strerror)
@@ -908,21 +970,17 @@ def download_file(remote_url, cache=False):
         # through.  It's supposed to be caught in `urrlib2` and raised in this
         # way, but for some reason in mysterious circumstances it doesn't. So
         # we'll just re-raise it here instead
-        raise urllib2.URLError(e)
+        raise urllib.error.URLError(e)
 
     return local_path
 
 
 def _do_download_files_in_parallel(args):
-    orig_stdout = sys.stdout
-    sys.stdout = io.BytesIO()
-    try:
-        return download_file(*args)
-    finally:
-        sys.stdout = orig_stdout
+    return download_file(*args, show_progress=False)
 
 
-def download_files_in_parallel(urls, cache=False):
+def download_files_in_parallel(urls, cache=False, show_progress=True,
+                               timeout=REMOTE_TIMEOUT()):
     """
     Downloads multiple files in parallel from the given URLs.  Blocks until
     all files have downloaded.  The result is a list of local file paths
@@ -936,6 +994,14 @@ def download_files_in_parallel(urls, cache=False):
     cache : bool, optional
         Whether to use the cache
 
+    show_progress : bool, optional
+        Whether to display a progress bar during the download (default
+        is `True`)
+
+    timeout : float
+        Timeout for the requests in seconds (default is the configurable
+        REMOTE_TIMEOUT, which is 3s by default)
+
     Returns
     -------
     paths : list of str
@@ -943,11 +1009,17 @@ def download_files_in_parallel(urls, cache=False):
     """
     from .console import ProgressBar
 
+    if show_progress:
+        progress = sys.stdout
+    else:
+        progress = io.BytesIO()
+
     # Combine duplicate URLs
     combined_urls = list(set(urls))
     combined_paths = ProgressBar.map(
         _do_download_files_in_parallel,
         [(x, cache) for x in combined_urls],
+        file=progress,
         multiprocess=True)
     paths = []
     for url in urls:
@@ -987,10 +1059,6 @@ def clear_download_cache(hashorurl=None):
         If the requested filename is not present in the data directory.
 
     """
-    from os import unlink
-    from os.path import join, exists
-    from shutil import rmtree
-    from warnings import warn
 
     try:
         dldir, urlmapfn = _get_download_cache_locs()
@@ -1003,34 +1071,34 @@ def clear_download_cache(hashorurl=None):
     _acquire_download_cache_lock()
     try:
         if hashorurl is None:
-            if exists(dldir):
-                rmtree(dldir)
-            if exists(urlmapfn):
-                unlink(urlmapfn)
+            if os.path.exists(dldir):
+                shutil.rmtree(dldir)
+            if os.path.exists(urlmapfn):
+                os.unlink(urlmapfn)
         else:
             with _open_shelve(urlmapfn, True) as url2hash:
-                filepath = join(dldir, hashorurl)
+                filepath = os.path.join(dldir, hashorurl)
                 assert _is_inside(filepath, dldir), \
                        ("attempted to use clear_download_cache on a location" +
                         " that's not inside the data cache directory")
 
-                if exists(filepath):
-                    for k, v in url2hash.items():
+                if os.path.exists(filepath):
+                    for k, v in list(six.iteritems(url2hash)):
                         if v == filepath:
                             del url2hash[k]
-                    unlink(filepath)
+                    os.unlink(filepath)
 
                 elif hashorurl in url2hash:
                     filepath = url2hash[hashorurl]
                     del url2hash[hashorurl]
-                    unlink(filepath)
+                    os.unlink(filepath)
 
                 else:
                     msg = 'Could not find file or url {0}'
                     raise OSError(msg.format(hashorurl))
     finally:
         # the lock will be gone if rmtree was used above, but release otherwise
-        if exists(join(_get_download_cache_locs()[0], 'lock')):
+        if os.path.exists(os.path.join(_get_download_cache_locs()[0], 'lock')):
             _release_download_cache_lock()
 
 
@@ -1046,23 +1114,21 @@ def _get_download_cache_locs():
         The path to the shelve object that stores the cache info.
     """
     from ..config.paths import get_cache_dir
-    from os.path import exists, isdir, join
-    from os import mkdir
 
-    datadir = join(get_cache_dir(), 'download')
-    shelveloc = join(get_cache_dir(), 'download_urlmap')
+    datadir = os.path.join(get_cache_dir(), 'download')
+    shelveloc = os.path.join(get_cache_dir(), 'download_urlmap')
 
-    if not exists(datadir):
+    if not os.path.exists(datadir):
         try:
-            mkdir(datadir)
+            os.mkdir(datadir)
         except OSError as e:
-            if not exists(datadir):
+            if not os.path.exists(datadir):
                 raise
-    elif not isdir(datadir):
+    elif not os.path.isdir(datadir):
         msg = 'Data cache directory {0} is not a directory'
         raise IOError(msg.format(datadir))
 
-    if isdir(shelveloc):
+    if os.path.isdir(shelveloc):
         msg = 'Data cache shelve object location {0} is a directory'
         raise IOError(msg.format(shelveloc))
 
@@ -1078,7 +1144,6 @@ def _open_shelve(shelffn, withclosing=False):
             ...
     """
     import shelve
-    from contextlib import closing
 
     if not PY3K:  # pragma: py3
         shelf = shelve.open(shelffn, protocol=2)
@@ -1086,7 +1151,7 @@ def _open_shelve(shelffn, withclosing=False):
         shelf = shelve.open(shelffn + '.db', protocol=2)
 
     if withclosing:
-        return closing(shelf)
+        return contextlib.closing(shelf)
     else:
         return shelf
 
@@ -1098,20 +1163,17 @@ def _acquire_download_cache_lock():
     Uses the lock directory method.  This is good because `mkdir` is
     atomic at the system call level, so it's thread-safe.
     """
-    from os.path import join
-    from os import mkdir
-    from time import sleep
 
     lockdir = os.path.join(_get_download_cache_locs()[0], 'lock')
     for i in range(DOWNLOAD_CACHE_LOCK_ATTEMPTS()):
         try:
-            mkdir(lockdir)
+            os.mkdir(lockdir)
             #write the pid of this process for informational purposes
-            with open(join(lockdir, 'pid'), 'w') as f:
+            with open(os.path.join(lockdir, 'pid'), 'w') as f:
                 f.write(str(os.getpid()))
 
         except OSError:
-            sleep(1)
+            time.sleep(1)
         else:
             return
     msg = 'Unable to acquire lock for cache directory ({0} exists)'
@@ -1119,17 +1181,14 @@ def _acquire_download_cache_lock():
 
 
 def _release_download_cache_lock():
-    from os.path import join, exists, isdir
-    from os import rmdir
-
-    lockdir = join(_get_download_cache_locs()[0], 'lock')
+    lockdir = os.path.join(_get_download_cache_locs()[0], 'lock')
 
-    if isdir(lockdir):
+    if os.path.isdir(lockdir):
         #if the pid file is present, be sure to remove it
-        pidfn = join(lockdir, 'pid')
-        if exists(pidfn):
+        pidfn = os.path.join(lockdir, 'pid')
+        if os.path.exists(pidfn):
             os.remove(pidfn)
-        rmdir(lockdir)
+        os.rmdir(lockdir)
     else:
         msg = 'Error releasing lock. "{0}" either does not exist or is not ' +\
               'a directory.'
diff --git a/astropy/utils/exceptions.py b/astropy/utils/exceptions.py
new file mode 100644
index 0000000..0aebb66
--- /dev/null
+++ b/astropy/utils/exceptions.py
@@ -0,0 +1,46 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+This module contains errors/exceptions and warnings of general use for
+astropy. Exceptions that are specific to a given subpackage should *not*
+be here, but rather in the particular subpackage.
+"""
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+
+class AstropyWarning(Warning):
+    """
+    The base warning class from which all Astropy warnings should inherit.
+
+    Any warning inheriting from this class is handled by the Astropy logger.
+    """
+
+
+class AstropyUserWarning(UserWarning, AstropyWarning):
+    """
+    The primary warning class for Astropy.
+
+    Use this if you do not need a specific sub-class.
+    """
+
+
+class AstropyDeprecationWarning(DeprecationWarning, AstropyWarning):
+    """
+    A warning class to indicate a deprecated feature.
+    """
+
+
+class AstropyPendingDeprecationWarning(PendingDeprecationWarning, AstropyWarning):
+    """
+    A warning class to indicate a soon-to-be deprecated feature.
+    """
+
+
+class AstropyBackwardsIncompatibleChangeWarning(AstropyWarning):
+    """
+    A warning class indicating a change in astropy that is incompatible
+    with previous versions.
+
+    The suggested procedure is to issue this warning for the version in
+    which the change occurs, and remove it for all following versions.
+    """
diff --git a/astropy/utils/iers/__init__.py b/astropy/utils/iers/__init__.py
new file mode 100644
index 0000000..8833225
--- /dev/null
+++ b/astropy/utils/iers/__init__.py
@@ -0,0 +1,4 @@
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from .iers import *
diff --git a/astropy/utils/iers/data/ReadMe.eopc04_IAU2000 b/astropy/utils/iers/data/ReadMe.eopc04_IAU2000
new file mode 100644
index 0000000..d2a3d9f
--- /dev/null
+++ b/astropy/utils/iers/data/ReadMe.eopc04_IAU2000
@@ -0,0 +1,41 @@
+Table: eopc04_iau2000
+================================================================================
+
+from http://hpiers.obspm.fr/iers/eop/eopc04/eopc04_IAU2000.62-now
+
+                   INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE
+                        EARTH ORIENTATION PARAMETERS
+                          EOP (IERS) 08 C04
+
+================================================================================
+
+File Summary:
+--------------------------------------------------------------------------------
+ FileName           Lrecl    Records    Explanations
+--------------------------------------------------------------------------------
+ReadMe                  80     .   This file, made using header
+eopc04_IAU2000.62-now  155 18279   all EOP values since 01 January 1962
+--------------------------------------------------------------------------------
+
+================================================================================
+Byte-by-byte Description of file: *
+--------------------------------------------------------------------------------
+   Bytes Format Units  Label  Explanations
+--------------------------------------------------------------------------------
+  1-  4   I4    ---     year         Calendar year
+  5-  8   I4    ---     month        Month
+  9- 12   I4    ---     day          day of month (0 hr UTC)
+ 13- 19   I7    d       MJD          Modified Julian Date (MJD, 0 hr UTC)
+ 20- 30   F11.6 arcsec  PM_x         polar motion x
+ 31- 41   F11.6 arcsec  PM_y         polar motion y
+ 42- 53   F12.7 s       UT1_UTC      Difference UT1-UTC
+ 54- 65   F12.7 s       LOD          length of day
+ 66- 76   F11.6 arcsec  dX_2000A     dX wrt IAU2000A Nutation 
+ 77- 87   F11.6 arcsec  dY_2000A     dY wrt IAU2000A Nutation
+ 88- 98   F11.6 arcsec  e_PM_x       error in PM_x
+ 99-109   F11.6 arcsec  e_PM_y       error in PM_y
+110-120   F11.7 s       e_UT1_UTC    error in UT1_UTC
+121-131   F11.7 s       e_LOD        error in length of day
+132-143   F12.6 arcsec  e_dX_2000A   error in dX_2000A
+144-155   F12.6 arcsec  e_dY_2000A   error in dY_2000A
+--------------------------------------------------------------------------------
diff --git a/astropy/utils/iers/data/ReadMe.finals2000A b/astropy/utils/iers/data/ReadMe.finals2000A
new file mode 100644
index 0000000..769c4a6
--- /dev/null
+++ b/astropy/utils/iers/data/ReadMe.finals2000A
@@ -0,0 +1,57 @@
+Table: finals2000A
+================================================================================
+
+from http://maia.usno.navy.mil/
+finals2000A.all -- all EOP values since 02 January 1973 with dX & dY using 
+IAU2000A Nutation/Precession Theory (with 1 year of predic tions)
+
+================================================================================
+
+File Summary:
+--------------------------------------------------------------------------------
+ FileName      Lrecl    Records    Explanations
+--------------------------------------------------------------------------------
+ReadMe            80          .    This file, adapted from readme.finals2000A
+finals2000A.all  187      15182    all EOP values since 02 January 1973
+--------------------------------------------------------------------------------
+
+================================================================================
+Byte-by-byte Description of file: *
+--------------------------------------------------------------------------------
+   Bytes Format Units  Label  Explanations
+--------------------------------------------------------------------------------
+  1-   2   I2    ---     year         To get true calendar year, add 1900 for 
+                                      MJD<=51543 or add 2000 for MJD>=51544)
+  3-   4   I2    ---     month
+  5-   6   I2    ---     day          of month
+  8-  15   F8.2    d     MJD          fractional Modified Julian Date (MJD UTC)
+      17   A1    ---     PolPMFlag_A  IERS (I) or Prediction (P) flag for 
+                                      Bull. A polar motion values
+ 19-  27   F9.6  arcsec  PM_x_A       Bull. A PM-x
+ 28-  36   F9.6  arcsec  e_PM_x_A     error in PM-x (sec. of arc)
+ 38-  46   F9.6  arcsec  PM_y_A       Bull. A PM-y (sec. of arc)
+ 47-  55   F9.6  arcsec  e_PM_y_A     error in PM-y (sec. of arc)
+      58   A1    ---     UT1Flag_A    IERS (I) or Prediction (P) flag for 
+                                      Bull. A UT1-UTC values
+ 59-  68   F10.7 s       UT1_UTC_A    Bull. A UT1-UTC (sec. of time)
+ 69-  78   F10.7 s       e_UT1_UTC_A  error in UT1-UTC (sec. of time)
+ 80-  86   F7.4  ms      LOD_A        Bull. A LOD (msec. of time)
+                                      -- NOT ALWAYS FILLED
+ 87-  93   F7.4  ms      e_LOD_A      error in LOD (msec. of time) 
+                                      -- NOT ALWAYS FILLED
+      96   A1    ---     NutFlag_A    IERS (I) or Prediction (P) flag for 
+                                      Bull. A nutation values
+ 98- 106   F9.3  marcsec dX_2000A_A   Bull. A dX wrt IAU2000A Nutation 
+                                      Free Core Nutation NOT Removed
+107- 115   F9.3  marcsec e_dX_2000A_A error in dX (msec. of arc)
+117- 125   F9.3  marcsec dY_2000A_A   Bull. A dY wrt IAU2000A Nutation
+                                      Free Core Nutation NOT Removed
+126- 134   F9.3  marcsec e_dY_2000A_A error in dY (msec. of arc)
+135- 144   F10.6 arcsec  PM_X_B       Bull. B PM-x (sec. of arc)
+145- 154   F10.6 arcsec  PM_Y_B       Bull. B PM-y (sec. of arc)
+155- 165   F11.7 s       UT1_UTC_B    Bull. B UT1-UTC (sec. of time)
+166- 175   F10.3 marcsec dX_2000A_B   Bull. B dX wrt IAU2000A Nutation
+176- 185   F10.3 marcsec dY_2000A_B   Bull. B dY wrt IAU2000A Nutation
+--------------------------------------------------------------------------------
+
+Notes: The same format is used for finals2000A.data, finals2000A.daily, and finals2000A.all
diff --git a/astropy/utils/iers/data/eopc04_IAU2000.62-now b/astropy/utils/iers/data/eopc04_IAU2000.62-now
new file mode 100644
index 0000000..21cfa04
--- /dev/null
+++ b/astropy/utils/iers/data/eopc04_IAU2000.62-now
@@ -0,0 +1,18913 @@
+
+
+                   INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE
+                        EARTH ORIENTATION PARAMETERS
+                          EOP (IERS) 08 C04
+
+  
+             FORMAT(3(I4),I7,2(F11.6),2(F12.7),2(F11.6),2(F11.6),2(F11.7),2F12.6)
+**********************************************************************************
+  
+      Date      MJD      x          y        UT1-UTC       LOD         dX        dY        x Err     y Err   UT1-UTC Err  LOD Err     dX Err       dY Err  
+                         "          "           s           s          "         "           "          "          s         s            "           "
+     (0h UTC)
+
+1962   1   1  37665  -0.012700   0.213000   0.0326338   0.0017230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1   2  37666  -0.015900   0.214100   0.0320547   0.0016690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1   3  37667  -0.019000   0.215200   0.0315526   0.0015820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1   4  37668  -0.021999   0.216301   0.0311435   0.0014960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1   5  37669  -0.024799   0.217301   0.0308154   0.0014160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1   6  37670  -0.027599   0.218301   0.0305353   0.0013820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1   7  37671  -0.030199   0.219301   0.0302682   0.0014130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1   8  37672  -0.032798   0.220202   0.0299280   0.0015050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1   9  37673  -0.035198   0.221102   0.0294869   0.0016280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  10  37674  -0.037498   0.222002   0.0289268   0.0017380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  11  37675  -0.039697   0.222803   0.0282797   0.0017940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  12  37676  -0.041797   0.223703   0.0276136   0.0017740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  13  37677  -0.043797   0.224503   0.0270075   0.0016670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  14  37678  -0.045697   0.225203   0.0265403   0.0015100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  15  37679  -0.047496   0.226004   0.0262572   0.0013120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  16  37680  -0.049196   0.226704   0.0261751   0.0011120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  17  37681  -0.050796   0.227404   0.0262740   0.0009360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  18  37682  -0.052295   0.228005   0.0265299   0.0008110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  19  37683  -0.053595   0.228705   0.0268868   0.0007330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  20  37684  -0.054895   0.229305   0.0273077   0.0006810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  21  37685  -0.055995   0.229905   0.0277506   0.0006780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  22  37686  -0.057094   0.230506   0.0281834   0.0007210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  23  37687  -0.057994   0.231006   0.0285533   0.0007900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  24  37688  -0.058794   0.231606   0.0288522   0.0008620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  25  37689  -0.059594   0.232106   0.0290721   0.0009440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  26  37690  -0.060193   0.232607   0.0292210   0.0010040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  27  37691  -0.060693   0.233207   0.0293239   0.0010370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  28  37692  -0.061093   0.233707   0.0294068   0.0010520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  29  37693  -0.061392   0.234208   0.0294776   0.0010520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  30  37694  -0.061692   0.234708   0.0295585   0.0010440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   1  31  37695  -0.061792   0.235208   0.0296424   0.0010370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2   1  37696  -0.061792   0.235708   0.0297323   0.0010170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2   2  37697  -0.061691   0.236209   0.0298362   0.0010410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2   3  37698  -0.061491   0.236709   0.0298791   0.0011250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2   4  37699  -0.061191   0.237309   0.0298030   0.0012890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2   5  37700  -0.060791   0.237809   0.0295339   0.0015060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2   6  37701  -0.060390   0.238410   0.0290467   0.0017140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2   7  37702  -0.059790   0.239010   0.0283596   0.0018790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2   8  37703  -0.059190   0.239610   0.0275575   0.0019590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2   9  37704  -0.058389   0.240211   0.0267354   0.0019300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  10  37705  -0.057589   0.240811   0.0259753   0.0018180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  11  37706  -0.056689   0.241511   0.0253542   0.0016500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  12  37707  -0.055689   0.242211   0.0249181   0.0014740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  13  37708  -0.054588   0.242912   0.0246570   0.0013030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  14  37709  -0.053488   0.243612   0.0245359   0.0011660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  15  37710  -0.052288   0.244312   0.0245467   0.0010810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  16  37711  -0.050988   0.245112   0.0246076   0.0010560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  17  37712  -0.049587   0.245813   0.0246695   0.0010640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  18  37713  -0.048187   0.246613   0.0247074   0.0011130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  19  37714  -0.046687   0.247413   0.0246873   0.0011600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  20  37715  -0.045186   0.248214   0.0246352   0.0012130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  21  37716  -0.043486   0.249014   0.0245041   0.0012870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  22  37717  -0.041786   0.249814   0.0243170   0.0013330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  23  37718  -0.040086   0.250614   0.0240879   0.0013590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  24  37719  -0.038285   0.251415   0.0238487   0.0013740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  25  37720  -0.036385   0.252115   0.0236096   0.0013510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  26  37721  -0.034485   0.252915   0.0234035   0.0013080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  27  37722  -0.032585   0.253715   0.0232364   0.0012560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   2  28  37723  -0.030584   0.254416   0.0231283   0.0012210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3   1  37724  -0.028484   0.255116   0.0230452   0.0012020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3   2  37725  -0.026384   0.255816   0.0229381   0.0012430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3   3  37726  -0.024283   0.256517   0.0227770   0.0013520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3   4  37727  -0.022083   0.257117   0.0224709   0.0015200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3   5  37728  -0.019983   0.257717   0.0219628   0.0017300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3   6  37729  -0.017683   0.258317   0.0212546   0.0019290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3   7  37730  -0.015482   0.258818   0.0203775   0.0020600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3   8  37731  -0.013282   0.259218   0.0194214   0.0020840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3   9  37732  -0.010982   0.259618   0.0184953   0.0019990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  10  37733  -0.008682   0.260018   0.0176992   0.0018350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  11  37734  -0.006381   0.260319   0.0170871   0.0016380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  12  37735  -0.004081   0.260519   0.0166690   0.0014540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  13  37736  -0.001781   0.260719   0.0164149   0.0013130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  14  37737   0.000420   0.260820   0.0162728   0.0012200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  15  37738   0.002720   0.260920   0.0161857   0.0011940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  16  37739   0.005020   0.260920   0.0161086   0.0012170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  17  37740   0.007320   0.260820   0.0159894   0.0012770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  18  37741   0.009621   0.260621   0.0157963   0.0013510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  19  37742   0.011921   0.260421   0.0155242   0.0014440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  20  37743   0.014121   0.260121   0.0151601   0.0015220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  21  37744   0.016421   0.259721   0.0147350   0.0015840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  22  37745   0.018622   0.259322   0.0142509   0.0016100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  23  37746   0.020822   0.258822   0.0137668   0.0016110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  24  37747   0.023122   0.258222   0.0132897   0.0015690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  25  37748   0.025323   0.257623   0.0128686   0.0015090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  26  37749   0.027423   0.256923   0.0125245   0.0014170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  27  37750   0.029623   0.256123   0.0122734   0.0013380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  28  37751   0.031823   0.255323   0.0120923   0.0012910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  29  37752   0.033924   0.254424   0.0119371   0.0012770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  30  37753   0.036024   0.253524   0.0117570   0.0013340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   3  31  37754   0.038124   0.252524   0.0114859   0.0014700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4   1  37755   0.040224   0.251524   0.0110478   0.0016640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4   2  37756   0.042225   0.250525   0.0103997   0.0018730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4   3  37757   0.044225   0.249425   0.0095526   0.0020600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4   4  37758   0.046225   0.248325   0.0085585   0.0021620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4   5  37759   0.048226   0.247126   0.0075064   0.0021510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4   6  37760   0.050126   0.246026   0.0065313   0.0020430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4   7  37761   0.052026   0.244826   0.0057022   0.0018580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4   8  37762   0.053926   0.243626   0.0050701   0.0016570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4   9  37763   0.055727   0.242427   0.0046280   0.0014860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  10  37764   0.057627   0.241227   0.0043199   0.0013800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  11  37765   0.059327   0.240027   0.0040768   0.0013360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  12  37766   0.061128   0.238828   0.0038687   0.0013390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  13  37767   0.062828   0.237628   0.0036235   0.0013860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  14  37768   0.064428   0.236428   0.0033174   0.0014620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  15  37769   0.066028   0.235228   0.0029343   0.0015530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  16  37770   0.067629   0.234029   0.0024602   0.0016440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  17  37771   0.069129   0.232929   0.0019101   0.0017130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  18  37772   0.070629   0.231729   0.0012930   0.0017470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  19  37773   0.072129   0.230629   0.0006559   0.0017600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  20  37774   0.073530   0.229530   0.0000338   0.0017280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  21  37775   0.074830   0.228430  -0.0005283   0.0016520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  22  37776   0.076230   0.227330  -0.0010234   0.0015640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  23  37777   0.077431   0.226231  -0.0014155   0.0014820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  24  37778   0.078631   0.225231  -0.0017436   0.0014070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  25  37779   0.079831   0.224131  -0.0020127   0.0013810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  26  37780   0.080931   0.223131  -0.0022728   0.0014090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  27  37781   0.082032   0.222132  -0.0026029   0.0015010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  28  37782   0.083132   0.221132  -0.0030440   0.0016510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  29  37783   0.084032   0.220132  -0.0036681   0.0018400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   4  30  37784   0.085032   0.219132  -0.0044842   0.0020370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5   1  37785   0.085933   0.218133  -0.0054853   0.0021840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5   2  37786   0.086733   0.217133  -0.0065815   0.0022400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5   3  37787   0.087533   0.216033  -0.0076706   0.0021800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5   4  37788   0.088334   0.215034  -0.0086607   0.0020190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5   5  37789   0.089034   0.214034  -0.0094528   0.0018120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5   6  37790   0.089734   0.212934  -0.0100369   0.0016090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5   7  37791   0.090334   0.211834  -0.0104360   0.0014490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5   8  37792   0.090935   0.210735  -0.0107141   0.0013580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5   9  37793   0.091535   0.209635  -0.0109342   0.0013290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  10  37794   0.092035   0.208435  -0.0111503   0.0013500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  11  37795   0.092535   0.207235  -0.0114064   0.0014070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  12  37796   0.092936   0.205936  -0.0117305   0.0014940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  13  37797   0.093336   0.204636  -0.0121366   0.0015760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  14  37798   0.093736   0.203336  -0.0126307   0.0016490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  15  37799   0.094137   0.201937  -0.0131878   0.0017110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  16  37800   0.094437   0.200437  -0.0138029   0.0017440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  17  37801   0.094737   0.198937  -0.0144260   0.0017350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  18  37802   0.095037   0.197437  -0.0150221   0.0016930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  19  37803   0.095338   0.195738  -0.0155522   0.0016120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  20  37804   0.095538   0.194138  -0.0159923   0.0015270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  21  37805   0.095738   0.192338  -0.0163584   0.0014400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  22  37806   0.095938   0.190638  -0.0166415   0.0013740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  23  37807   0.096139   0.188739  -0.0168846   0.0013520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  24  37808   0.096339   0.186839  -0.0171257   0.0013910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  25  37809   0.096439   0.184939  -0.0174358   0.0014660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  26  37810   0.096640   0.182940  -0.0178309   0.0015780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  27  37811   0.096740   0.180940  -0.0183450   0.0016970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  28  37812   0.096840   0.178840  -0.0189741   0.0017850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  29  37813   0.096940   0.176740  -0.0196522   0.0017960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  30  37814   0.097041   0.174641  -0.0202983   0.0017100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   5  31  37815   0.097241   0.172441  -0.0207934   0.0015370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6   1  37816   0.097341   0.170241  -0.0210925   0.0013130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6   2  37817   0.097441   0.168041  -0.0211636   0.0010800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6   3  37818   0.097542   0.165842  -0.0210097   0.0008690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6   4  37819   0.097642   0.163642  -0.0206698   0.0007010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6   5  37820   0.097742   0.161442  -0.0201919   0.0006030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6   6  37821   0.097843   0.159243  -0.0196530   0.0005790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6   7  37822   0.097943   0.157043  -0.0191031   0.0005950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6   8  37823   0.098043   0.154843  -0.0185932   0.0006380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6   9  37824   0.098143   0.152643  -0.0181413   0.0007090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  10  37825   0.098244   0.150544  -0.0177694   0.0007860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  11  37826   0.098244   0.148444  -0.0174565   0.0008240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  12  37827   0.098344   0.146344  -0.0171686   0.0008450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  13  37828   0.098444   0.144344  -0.0168878   0.0008260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  14  37829   0.098545   0.142345  -0.0165709   0.0007870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  15  37830   0.098645   0.140345  -0.0162110   0.0007200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  16  37831   0.098645   0.138445  -0.0157641   0.0006340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  17  37832   0.098746   0.136546  -0.0152182   0.0005350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  18  37833   0.098746   0.134746  -0.0145923   0.0004580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  19  37834   0.098846   0.132946  -0.0139104   0.0004270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  20  37835   0.098846   0.131246  -0.0132284   0.0004600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  21  37836   0.098947   0.129547  -0.0126115   0.0005550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  22  37837   0.098947   0.127947  -0.0121126   0.0007010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  23  37838   0.098947   0.126347  -0.0117647   0.0008510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  24  37839   0.098947   0.124847  -0.0115558   0.0009710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  25  37840   0.098948   0.123348  -0.0114269   0.0010290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  26  37841   0.098948   0.121948  -0.0113290   0.0010110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  27  37842   0.098848   0.120548  -0.0111831   0.0009250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  28  37843   0.098849   0.119249  -0.0109102   0.0007720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  29  37844   0.098749   0.117949  -0.0104783   0.0006120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   6  30  37845   0.098649   0.116749  -0.0098784   0.0004530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7   1  37846   0.098549   0.115549  -0.0091475   0.0003450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7   2  37847   0.098450   0.114450  -0.0083366   0.0002820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7   3  37848   0.098350   0.113350  -0.0074917   0.0002860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7   4  37849   0.098150   0.112350  -0.0066738   0.0003340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7   5  37850   0.097951   0.111351  -0.0059299   0.0004210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7   6  37851   0.097651   0.110351  -0.0052700   0.0005110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7   7  37852   0.097351   0.109351  -0.0046921   0.0006000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7   8  37853   0.097051   0.108451  -0.0042052   0.0006730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7   9  37854   0.096752   0.107552  -0.0037803   0.0007220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  10  37855   0.096352   0.106652  -0.0033884   0.0007390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  11  37856   0.095952   0.105852  -0.0029995   0.0007280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  12  37857   0.095552   0.104952  -0.0025956   0.0006910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  13  37858   0.095053   0.104153  -0.0021357   0.0006370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  14  37859   0.094553   0.103253  -0.0016268   0.0005850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  15  37860   0.094053   0.102353  -0.0010599   0.0005340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  16  37861   0.093454   0.101554  -0.0004580   0.0005200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  17  37862   0.092854   0.100654   0.0001199   0.0005750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  18  37863   0.092254   0.099754   0.0006178   0.0006900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  19  37864   0.091654   0.098854   0.0009717   0.0008700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  20  37865   0.090955   0.097855   0.0011216   0.0010680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  21  37866   0.090255   0.096855   0.0010945   0.0012270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  22  37867   0.089455   0.095855   0.0009414   0.0013160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  23  37868   0.088755   0.094855   0.0007423   0.0013170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  24  37869   0.087956   0.093756   0.0005942   0.0012260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  25  37870   0.087156   0.092656   0.0005491   0.0010870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  26  37871   0.086356   0.091556   0.0006690   0.0009120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  27  37872   0.085457   0.090357   0.0009619   0.0007560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  28  37873   0.084657   0.089157   0.0013938   0.0006280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  29  37874   0.083757   0.087957   0.0019367   0.0005540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  30  37875   0.082857   0.086657   0.0025156   0.0005370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   7  31  37876   0.081858   0.085358   0.0030976   0.0005670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8   1  37877   0.080958   0.084058   0.0036315   0.0006200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8   2  37878   0.079958   0.082658   0.0040924   0.0006880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8   3  37879   0.079058   0.081358   0.0044943   0.0007580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8   4  37880   0.078059   0.079959   0.0048302   0.0008160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8   5  37881   0.076959   0.078559   0.0051201   0.0008500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8   6  37882   0.075959   0.077159   0.0053910   0.0008440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8   7  37883   0.074860   0.075760   0.0056829   0.0008160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8   8  37884   0.073860   0.074360   0.0060068   0.0007530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8   9  37885   0.072660   0.072960   0.0064237   0.0006720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  10  37886   0.071560   0.071460   0.0069146   0.0005950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  11  37887   0.070361   0.070061   0.0074805   0.0005250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  12  37888   0.069261   0.068661   0.0081054   0.0004810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  13  37889   0.067961   0.067261   0.0087413   0.0004970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  14  37890   0.066761   0.065861   0.0093282   0.0005820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  15  37891   0.065462   0.064462   0.0098031   0.0007370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  16  37892   0.064162   0.063162   0.0100980   0.0009260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  17  37893   0.062762   0.061762   0.0101939   0.0011160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  18  37894   0.061463   0.060463   0.0101269   0.0012330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  19  37895   0.060063   0.059163   0.0099918   0.0012600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  20  37896   0.058563   0.057863   0.0098937   0.0011800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  21  37897   0.057063   0.056663   0.0099086   0.0010290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  22  37898   0.055564   0.055464   0.0100875   0.0008410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  23  37899   0.054064   0.054264   0.0104634   0.0006700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  24  37900   0.052464   0.053164   0.0109733   0.0005490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  25  37901   0.050864   0.052164   0.0115962   0.0004750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  26  37902   0.049265   0.051065   0.0122621   0.0004630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  27  37903   0.047565   0.050165   0.0128930   0.0005130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  28  37904   0.045965   0.049265   0.0134739   0.0006000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  29  37905   0.044166   0.048366   0.0139448   0.0007080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  30  37906   0.042466   0.047566   0.0143057   0.0008200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   8  31  37907   0.040666   0.046866   0.0145486   0.0009310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9   1  37908   0.038866   0.046166   0.0147006   0.0010110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9   2  37909   0.037067   0.045567   0.0147765   0.0010810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9   3  37910   0.035267   0.044967   0.0147984   0.0011180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9   4  37911   0.033467   0.044467   0.0148003   0.0011150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9   5  37912   0.031567   0.044067   0.0148262   0.0010910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9   6  37913   0.029668   0.043668   0.0148711   0.0010590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9   7  37914   0.027768   0.043368   0.0149550   0.0010340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9   8  37915   0.025868   0.043168   0.0150359   0.0010310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9   9  37916   0.023869   0.042969   0.0151198   0.0010580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  10  37917   0.021969   0.042869   0.0151477   0.0011370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  11  37918   0.019969   0.042769   0.0150616   0.0012880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  12  37919   0.017969   0.042769   0.0147995   0.0014940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  13  37920   0.015970   0.042770   0.0143155   0.0017150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  14  37921   0.013970   0.042870   0.0136304   0.0019040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  15  37922   0.011970   0.043070   0.0127863   0.0020030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  16  37923   0.009870   0.043170   0.0119142   0.0019710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  17  37924   0.007871   0.043471   0.0111231   0.0018150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  18  37925   0.005771   0.043671   0.0105470   0.0015880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  19  37926   0.003671   0.043971   0.0101909   0.0013560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  20  37927   0.001572   0.044272   0.0100638   0.0011570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  21  37928  -0.000628   0.044672   0.0101057   0.0010200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  22  37929  -0.002728   0.045072   0.0102506   0.0009410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  23  37930  -0.004928   0.045472   0.0104526   0.0009240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  24  37931  -0.007127   0.045873   0.0106375   0.0009620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  25  37932  -0.009427   0.046373   0.0107694   0.0010260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  26  37933  -0.011627   0.046873   0.0108313   0.0010990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  27  37934  -0.013926   0.047374   0.0108222   0.0011660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  28  37935  -0.016226   0.047974   0.0107561   0.0012220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  29  37936  -0.018526   0.048474   0.0106380   0.0012500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962   9  30  37937  -0.020926   0.049074   0.0105179   0.0012440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10   1  37938  -0.023225   0.049675   0.0104208   0.0012050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10   2  37939  -0.025625   0.050375   0.0103578   0.0011480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10   3  37940  -0.028025   0.050975   0.0103797   0.0010770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10   4  37941  -0.030425   0.051675   0.0104526   0.0010080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10   5  37942  -0.032824   0.052376   0.0105955   0.0009700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10   6  37943  -0.035224   0.053176   0.0107504   0.0009690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10   7  37944  -0.037724   0.053976   0.0108803   0.0010300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10   8  37945  -0.040123   0.054777   0.0109162   0.0011590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10   9  37946  -0.042523   0.055577   0.0107901   0.0013550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  10  37947  -0.044923   0.056477   0.0104390   0.0016020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  11  37948  -0.047323   0.057377   0.0098240   0.0018640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  12  37949  -0.049722   0.058278   0.0089789   0.0020720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  13  37950  -0.052122   0.059278   0.0079758   0.0021750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  14  37951  -0.054422   0.060278   0.0069227   0.0021500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  15  37952  -0.056822   0.061378   0.0059606   0.0020100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  16  37953  -0.059121   0.062479   0.0051615   0.0018250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  17  37954  -0.061321   0.063579   0.0045484   0.0016460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  18  37955  -0.063521   0.064779   0.0040923   0.0015290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  19  37956  -0.065720   0.066080   0.0037263   0.0014640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  20  37957  -0.067920   0.067280   0.0033892   0.0014710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  21  37958  -0.070020   0.068680   0.0030171   0.0015220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  22  37959  -0.072020   0.069980   0.0025740   0.0016180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  23  37960  -0.074019   0.071381   0.0020369   0.0017190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  24  37961  -0.076019   0.072881   0.0013878   0.0018080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  25  37962  -0.077919   0.074381   0.0006657   0.0018810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  26  37963  -0.079819   0.075881  -0.0001163   0.0019180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  27  37964  -0.081618   0.077482  -0.0009184   0.0019110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  28  37965  -0.083318   0.079082  -0.0016875   0.0018710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  29  37966  -0.085018   0.080682  -0.0024096   0.0017990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  30  37967  -0.086717   0.082383  -0.0030377   0.0017050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  10  31  37968  -0.088317   0.084083  -0.0035678   0.0015950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11   1  37969  -0.089817   0.085783  -0.0039819   0.0014790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11   2  37970  -0.091317   0.087583  -0.0042959   0.0014060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11   3  37971  -0.092816   0.089284  -0.0045610   0.0013930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11   4  37972  -0.094216   0.091084  -0.0048531   0.0014410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11   5  37973  -0.095616   0.092884  -0.0052152   0.0015520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11   6  37974  -0.096916   0.094684  -0.0057163   0.0017170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11   7  37975  -0.098215   0.096585  -0.0064094   0.0019090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11   8  37976  -0.099515   0.098385  -0.0072885   0.0020920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11   9  37977  -0.100715   0.100285  -0.0083195   0.0022050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  10  37978  -0.101914   0.102186  -0.0094216   0.0022200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  11  37979  -0.103114   0.104086  -0.0104707   0.0021200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  12  37980  -0.104314   0.105986  -0.0113928   0.0019440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  13  37981  -0.105514   0.107886  -0.0120979   0.0017270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  14  37982  -0.106813   0.109787  -0.0126060   0.0015360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  15  37983  -0.108013   0.111787  -0.0129420   0.0014090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  16  37984  -0.109213   0.113687  -0.0131991   0.0013560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  17  37985  -0.110413   0.115687  -0.0134262   0.0013570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  18  37986  -0.111712   0.117688  -0.0136873   0.0014110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  19  37987  -0.113012   0.119788  -0.0140154   0.0014870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  20  37988  -0.114312   0.121788  -0.0144125   0.0015660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  21  37989  -0.115711   0.123889  -0.0148935   0.0016230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  22  37990  -0.117111   0.125889  -0.0154206   0.0016670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  23  37991  -0.118511   0.127989  -0.0159767   0.0016800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  24  37992  -0.120011   0.130089  -0.0165288   0.0016690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  25  37993  -0.121510   0.132290  -0.0170549   0.0016270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  26  37994  -0.123110   0.134390  -0.0175250   0.0015700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  27  37995  -0.124710   0.136590  -0.0179400   0.0015000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  28  37996  -0.126410   0.138690  -0.0182851   0.0014230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  29  37997  -0.128209   0.140891  -0.0185552   0.0013830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  11  30  37998  -0.130009   0.143091  -0.0188063   0.0013780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12   1  37999  -0.131809   0.145391  -0.0190924   0.0014330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12   2  38000  -0.133708   0.147592  -0.0194534   0.0015600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12   3  38001  -0.135608   0.149892  -0.0199685   0.0017270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12   4  38002  -0.137608   0.152092  -0.0206666   0.0019210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12   5  38003  -0.139608   0.154392  -0.0215587   0.0021090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12   6  38004  -0.141707   0.156693  -0.0226198   0.0022530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12   7  38005  -0.143807   0.158993  -0.0237879   0.0023170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12   8  38006  -0.146007   0.161293  -0.0249709   0.0022720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12   9  38007  -0.148107   0.163693  -0.0260530   0.0021390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  10  38008  -0.150306   0.165994  -0.0269811   0.0019430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  11  38009  -0.152506   0.168394  -0.0277082   0.0017550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  12  38010  -0.154806   0.170694  -0.0282553   0.0016010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  13  38011  -0.157005   0.173095  -0.0286823   0.0015150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  14  38012  -0.159305   0.175495  -0.0290594   0.0014880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  15  38013  -0.161505   0.177895  -0.0294355   0.0015110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  16  38014  -0.163805   0.180295  -0.0298416   0.0015430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  17  38015  -0.166004   0.182696  -0.0302847   0.0015930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  18  38016  -0.168204   0.185096  -0.0307747   0.0016340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  19  38017  -0.170404   0.187496  -0.0312948   0.0016530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  20  38018  -0.172603   0.189897  -0.0318209   0.0016430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  21  38019  -0.174803   0.192297  -0.0323200   0.0016000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  22  38020  -0.176903   0.194697  -0.0327601   0.0015160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  23  38021  -0.179003   0.196997  -0.0331041   0.0014170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  24  38022  -0.181102   0.199398  -0.0333402   0.0013040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  25  38023  -0.183102   0.201798  -0.0334703   0.0011880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  26  38024  -0.185002   0.204198  -0.0334714   0.0010790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  27  38025  -0.186902   0.206598  -0.0334015   0.0010190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  28  38026  -0.188801   0.208999  -0.0332875   0.0010160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  29  38027  -0.190501   0.211299  -0.0332046   0.0010780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  30  38028  -0.192201   0.213699  -0.0332137   0.0011960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1962  12  31  38029  -0.193800   0.216000  -0.0333558   0.0013410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1   1  38030  -0.195400   0.218400  -0.0336428   0.0014780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1   2  38031  -0.196800   0.220700  -0.0340579   0.0015820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1   3  38032  -0.198100   0.223100  -0.0345420   0.0016140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1   4  38033  -0.199399   0.225401  -0.0350281   0.0015720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1   5  38034  -0.200499   0.227701  -0.0354112   0.0014530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1   6  38035  -0.201599   0.230001  -0.0356652   0.0012800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1   7  38036  -0.202499   0.232401  -0.0357273   0.0010940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1   8  38037  -0.203298   0.234702  -0.0356134   0.0009360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1   9  38038  -0.203998   0.236902  -0.0353695   0.0008370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  10  38039  -0.204498   0.239202  -0.0350606   0.0008050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  11  38040  -0.204997   0.241503  -0.0347596   0.0008410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  12  38041  -0.205297   0.243803  -0.0345147   0.0009020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  13  38042  -0.205497   0.246003  -0.0343188   0.0009660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  14  38043  -0.205597   0.248303  -0.0342049   0.0010340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  15  38044  -0.205496   0.250504  -0.0341289   0.0010710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  16  38045  -0.205396   0.252704  -0.0340870   0.0010780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  17  38046  -0.205096   0.254904  -0.0340241   0.0010520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  18  38047  -0.204796   0.257104  -0.0339292   0.0009920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  19  38048  -0.204295   0.259305  -0.0337602   0.0009070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  20  38049  -0.203695   0.261405  -0.0334983   0.0008070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  21  38050  -0.202995   0.263505  -0.0331344   0.0007050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  22  38051  -0.202194   0.265606  -0.0326715   0.0006230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  23  38052  -0.201294   0.267606  -0.0321315   0.0005720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  24  38053  -0.200394   0.269606  -0.0315836   0.0005730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  25  38054  -0.199294   0.271606  -0.0310607   0.0006520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  26  38055  -0.198093   0.273607  -0.0306498   0.0007960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  27  38056  -0.196893   0.275507  -0.0304168   0.0009830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  28  38057  -0.195593   0.277307  -0.0303759   0.0011800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  29  38058  -0.194193   0.279207  -0.0305120   0.0013300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  30  38059  -0.192792   0.281008  -0.0307591   0.0014090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   1  31  38060  -0.191292   0.282808  -0.0310581   0.0014030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2   1  38061  -0.189692   0.284508  -0.0312982   0.0013060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2   2  38062  -0.187991   0.286209  -0.0314123   0.0011660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2   3  38063  -0.186391   0.287909  -0.0313674   0.0010040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2   4  38064  -0.184591   0.289609  -0.0311884   0.0008860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2   5  38065  -0.182891   0.291209  -0.0309185   0.0008230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2   6  38066  -0.180990   0.292810  -0.0305966   0.0008060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2   7  38067  -0.179190   0.294410  -0.0303107   0.0008610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2   8  38068  -0.177290   0.296010  -0.0300937   0.0009500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2   9  38069  -0.175390   0.297610  -0.0299778   0.0010690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  10  38070  -0.173489   0.299111  -0.0299719   0.0011760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  11  38071  -0.171489   0.300611  -0.0300740   0.0012640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  12  38072  -0.169589   0.302111  -0.0302400   0.0013130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  13  38073  -0.167588   0.303612  -0.0304481   0.0013260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  14  38074  -0.165588   0.305112  -0.0306402   0.0013030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  15  38075  -0.163588   0.306612  -0.0307833   0.0012390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  16  38076  -0.161588   0.308012  -0.0308623   0.0011670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  17  38077  -0.159487   0.309513  -0.0308654   0.0010810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  18  38078  -0.157487   0.311013  -0.0307865   0.0010040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  19  38079  -0.155387   0.312413  -0.0306435   0.0009540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  20  38080  -0.153387   0.313913  -0.0304596   0.0009370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  21  38081  -0.151286   0.315314  -0.0302987   0.0010030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  22  38082  -0.149186   0.316714  -0.0302308   0.0011430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  23  38083  -0.147086   0.318214  -0.0303458   0.0013460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  24  38084  -0.144985   0.319615  -0.0306809   0.0015840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  25  38085  -0.142885   0.321015  -0.0312550   0.0017940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  26  38086  -0.140685   0.322415  -0.0319921   0.0019120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  27  38087  -0.138485   0.323715  -0.0328001   0.0019360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   2  28  38088  -0.136284   0.325116  -0.0335682   0.0018430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3   1  38089  -0.134084   0.326516  -0.0342123   0.0016870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3   2  38090  -0.131784   0.327816  -0.0346843   0.0014970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3   3  38091  -0.129484   0.329116  -0.0349754   0.0013410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3   4  38092  -0.127183   0.330417  -0.0351255   0.0012310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3   5  38093  -0.124783   0.331817  -0.0352105   0.0011910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3   6  38094  -0.122383   0.333017  -0.0352806   0.0012080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3   7  38095  -0.119982   0.334318  -0.0354047   0.0012870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3   8  38096  -0.117482   0.335618  -0.0356148   0.0013850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3   9  38097  -0.114982   0.336818  -0.0359358   0.0014980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  10  38098  -0.112482   0.338118  -0.0363549   0.0015870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  11  38099  -0.109881   0.339319  -0.0368600   0.0016480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  12  38100  -0.107281   0.340519  -0.0373990   0.0016730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  13  38101  -0.104581   0.341719  -0.0379541   0.0016600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  14  38102  -0.101880   0.342820  -0.0384682   0.0016120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  15  38103  -0.099180   0.344020  -0.0389203   0.0015380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  16  38104  -0.096480   0.345120  -0.0392923   0.0014450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  17  38105  -0.093680   0.346220  -0.0395624   0.0013580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  18  38106  -0.090779   0.347321  -0.0397755   0.0013040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  19  38107  -0.087979   0.348321  -0.0399425   0.0012880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  20  38108  -0.085079   0.349321  -0.0401306   0.0013280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  21  38109  -0.082079   0.350221  -0.0403817   0.0014370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  22  38110  -0.079078   0.351222  -0.0407887   0.0016290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  23  38111  -0.076078   0.352022  -0.0414078   0.0018650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  24  38112  -0.073078   0.352922  -0.0422809   0.0021190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  25  38113  -0.069977   0.353723  -0.0433859   0.0023170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  26  38114  -0.066877   0.354423  -0.0446290   0.0024170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  27  38115  -0.063777   0.355123  -0.0459171   0.0023770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  28  38116  -0.060577   0.355723  -0.0471071   0.0022280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  29  38117  -0.057476   0.356324  -0.0481232   0.0020210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  30  38118  -0.054176   0.356924  -0.0489213   0.0018190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   3  31  38119  -0.050976   0.357324  -0.0495393   0.0016790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4   1  38120  -0.047676   0.357724  -0.0500454   0.0016060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4   2  38121  -0.044375   0.358125  -0.0505165   0.0015980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4   3  38122  -0.041075   0.358325  -0.0510216   0.0016500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4   4  38123  -0.037675   0.358625  -0.0515886   0.0017380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4   5  38124  -0.034274   0.358726  -0.0522417   0.0018290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4   6  38125  -0.030874   0.358826  -0.0529938   0.0019130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4   7  38126  -0.027474   0.358826  -0.0538098   0.0019630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4   8  38127  -0.023974   0.358726  -0.0546689   0.0019900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4   9  38128  -0.020573   0.358627  -0.0555260   0.0019680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  10  38129  -0.016973   0.358427  -0.0563430   0.0018890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  11  38130  -0.013473   0.358127  -0.0570551   0.0017900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  12  38131  -0.009873   0.357827  -0.0576562   0.0016720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  13  38132  -0.006372   0.357428  -0.0581482   0.0015640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  14  38133  -0.002772   0.356928  -0.0585503   0.0014740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  15  38134   0.000928   0.356428  -0.0588693   0.0014200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  16  38135   0.004529   0.355829  -0.0591674   0.0014250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  17  38136   0.008229   0.355229  -0.0594895   0.0014810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  18  38137   0.011929   0.354429  -0.0599115   0.0016160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  19  38138   0.015629   0.353729  -0.0605026   0.0018150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  20  38139   0.019330   0.352930  -0.0613057   0.0020620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  21  38140   0.023030   0.352030  -0.0623617   0.0022840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  22  38141   0.026730   0.351130  -0.0636078   0.0024310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  23  38142   0.030530   0.350130  -0.0649439   0.0024680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  24  38143   0.034231   0.349131  -0.0662489   0.0023630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  25  38144   0.038031   0.348131  -0.0673870   0.0021610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  26  38145   0.041831   0.347031  -0.0683111   0.0019260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  27  38146   0.045532   0.345932  -0.0690091   0.0017310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  28  38147   0.049332   0.344832  -0.0695462   0.0015980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  29  38148   0.053132   0.343632  -0.0699933   0.0015590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   4  30  38149   0.056832   0.342432  -0.0704373   0.0015900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5   1  38150   0.060633   0.341233  -0.0709484   0.0016770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5   2  38151   0.064333   0.339933  -0.0715484   0.0017630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5   3  38152   0.068033   0.338733  -0.0722345   0.0018470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5   4  38153   0.071733   0.337433  -0.0729956   0.0019110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5   5  38154   0.075434   0.336134  -0.0738056   0.0019440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5   6  38155   0.079134   0.334834  -0.0746317   0.0019420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5   7  38156   0.082734   0.333434  -0.0754268   0.0018920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5   8  38157   0.086335   0.332135  -0.0761538   0.0018090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5   9  38158   0.089835   0.330735  -0.0767869   0.0016930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  10  38159   0.093435   0.329335  -0.0772980   0.0015700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  11  38160   0.096935   0.327935  -0.0776900   0.0014580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  12  38161   0.100336   0.326536  -0.0779841   0.0013760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  13  38162   0.103736   0.325136  -0.0782181   0.0013410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  14  38163   0.107136   0.323736  -0.0784452   0.0013620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  15  38164   0.110436   0.322236  -0.0787043   0.0014260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  16  38165   0.113737   0.320737  -0.0790763   0.0015590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  17  38166   0.116937   0.319337  -0.0795964   0.0017450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  18  38167   0.120137   0.317837  -0.0803114   0.0019340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  19  38168   0.123238   0.316338  -0.0812005   0.0020850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  20  38169   0.126338   0.314738  -0.0822016   0.0021380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  21  38170   0.129438   0.313238  -0.0831966   0.0020820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  22  38171   0.132438   0.311738  -0.0840877   0.0019220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  23  38172   0.135339   0.310139  -0.0847678   0.0016920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  24  38173   0.138239   0.308539  -0.0852088   0.0014550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  25  38174   0.141139   0.306939  -0.0854459   0.0012710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  26  38175   0.143939   0.305339  -0.0855379   0.0011790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  27  38176   0.146740   0.303640  -0.0855910   0.0011780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  28  38177   0.149440   0.301940  -0.0856641   0.0012250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  29  38178   0.152140   0.300240  -0.0858111   0.0013100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  30  38179   0.154841   0.298541  -0.0860342   0.0014050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   5  31  38180   0.157441   0.296841  -0.0863542   0.0014720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6   1  38181   0.160041   0.295041  -0.0867393   0.0015210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6   2  38182   0.162541   0.293241  -0.0871344   0.0015240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6   3  38183   0.165042   0.291442  -0.0875334   0.0015000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6   4  38184   0.167542   0.289642  -0.0878825   0.0014430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6   5  38185   0.169942   0.287742  -0.0881715   0.0013720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6   6  38186   0.172343   0.285943  -0.0883626   0.0012690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6   7  38187   0.174743   0.284043  -0.0884607   0.0011700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6   8  38188   0.177043   0.282043  -0.0884607   0.0010860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6   9  38189   0.179343   0.280143  -0.0884068   0.0010440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  10  38190   0.181644   0.278144  -0.0883278   0.0010570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  11  38191   0.183844   0.276144  -0.0882929   0.0011320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  12  38192   0.186044   0.274044  -0.0883609   0.0012530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  13  38193   0.188244   0.272044  -0.0885710   0.0014230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  14  38194   0.190345   0.269945  -0.0889511   0.0015960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  15  38195   0.192345   0.267845  -0.0895061   0.0017490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  16  38196   0.194445   0.265745  -0.0901782   0.0018410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  17  38197   0.196446   0.263546  -0.0909072   0.0018310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  18  38198   0.198346   0.261346  -0.0915643   0.0017170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  19  38199   0.200246   0.259146  -0.0920744   0.0015220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  20  38200   0.202046   0.256946  -0.0923464   0.0012810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  21  38201   0.203847   0.254647  -0.0923955   0.0010750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  22  38202   0.205647   0.252347  -0.0922795   0.0009470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  23  38203   0.207247   0.250047  -0.0920676   0.0008930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  24  38204   0.208947   0.247747  -0.0918386   0.0009190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  25  38205   0.210448   0.245348  -0.0916687   0.0009840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  26  38206   0.211948   0.242948  -0.0915697   0.0010570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  27  38207   0.213348   0.240548  -0.0915368   0.0011240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  28  38208   0.214749   0.238149  -0.0915469   0.0011500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  29  38209   0.215949   0.235649  -0.0915749   0.0011600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   6  30  38210   0.217149   0.233249  -0.0916040   0.0011210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7   1  38211   0.218349   0.230749  -0.0915660   0.0010490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7   2  38212   0.219350   0.228250  -0.0914421   0.0009400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7   3  38213   0.220350   0.225750  -0.0912021   0.0008290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7   4  38214   0.221250   0.223250  -0.0908502   0.0007090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7   5  38215   0.222050   0.220750  -0.0903763   0.0006070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7   6  38216   0.222751   0.218251  -0.0898163   0.0005310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7   7  38217   0.223451   0.215751  -0.0892174   0.0005190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7   8  38218   0.224051   0.213251  -0.0886354   0.0005590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7   9  38219   0.224552   0.210752  -0.0881165   0.0006610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  10  38220   0.224952   0.208152  -0.0877115   0.0007950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  11  38221   0.225252   0.205652  -0.0874696   0.0009600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  12  38222   0.225452   0.203152  -0.0873836   0.0011020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  13  38223   0.225653   0.200653  -0.0874147   0.0011970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  14  38224   0.225753   0.198053  -0.0875007   0.0012110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  15  38225   0.225753   0.195553  -0.0875668   0.0011480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  16  38226   0.225653   0.193053  -0.0875209   0.0009990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  17  38227   0.225454   0.190454  -0.0873119   0.0008200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  18  38228   0.225254   0.187954  -0.0869320   0.0006560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  19  38229   0.224954   0.185354  -0.0863910   0.0005440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  20  38230   0.224455   0.182755  -0.0857951   0.0005080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  21  38231   0.223955   0.180155  -0.0851931   0.0005490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  22  38232   0.223355   0.177555  -0.0846712   0.0006430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  23  38233   0.222755   0.174955  -0.0842552   0.0007660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  24  38234   0.221956   0.172356  -0.0839493   0.0008670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  25  38235   0.221156   0.169656  -0.0837293   0.0009380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  26  38236   0.220156   0.167056  -0.0835714   0.0009790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  27  38237   0.219156   0.164356  -0.0834244   0.0009690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  28  38238   0.218057   0.161657  -0.0832575   0.0009310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  29  38239   0.216857   0.158857  -0.0830275   0.0008550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  30  38240   0.215657   0.156157  -0.0827216   0.0007730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   7  31  38241   0.214258   0.153358  -0.0823326   0.0006900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8   1  38242   0.212858   0.150658  -0.0818677   0.0006340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8   2  38243   0.211258   0.147858  -0.0813597   0.0005980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8   3  38244   0.209658   0.145058  -0.0808388   0.0006300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8   4  38245   0.207959   0.142259  -0.0803899   0.0007230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8   5  38246   0.206259   0.139359  -0.0800579   0.0008740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8   6  38247   0.204359   0.136559  -0.0799060   0.0010700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8   7  38248   0.202459   0.133759  -0.0799650   0.0012990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8   8  38249   0.200460   0.130860  -0.0802481   0.0015090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8   9  38250   0.198360   0.128060  -0.0807121   0.0016460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  10  38251   0.196260   0.125160  -0.0812692   0.0016920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  11  38252   0.194061   0.122261  -0.0818152   0.0016350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  12  38253   0.191761   0.119461  -0.0822733   0.0015020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  13  38254   0.189361   0.116561  -0.0825653   0.0013200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  14  38255   0.186961   0.113661  -0.0826734   0.0011410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  15  38256   0.184562   0.110862  -0.0826124   0.0010070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  16  38257   0.182062   0.107962  -0.0824515   0.0009430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  17  38258   0.179462   0.105062  -0.0822755   0.0009570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  18  38259   0.176862   0.102162  -0.0821456   0.0010320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  19  38260   0.174263   0.099363  -0.0821096   0.0011390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  20  38261   0.171563   0.096463  -0.0821727   0.0012450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  21  38262   0.168763   0.093563  -0.0823407   0.0013250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  22  38263   0.166064   0.090764  -0.0825678   0.0013630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  23  38264   0.163264   0.087864  -0.0828018   0.0013470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  24  38265   0.160464   0.084964  -0.0829969   0.0012880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  25  38266   0.157664   0.082164  -0.0831259   0.0012040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  26  38267   0.154765   0.079265  -0.0831589   0.0011100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  27  38268   0.151965   0.076465  -0.0830940   0.0010120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  28  38269   0.149065   0.073665  -0.0829470   0.0009270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  29  38270   0.146166   0.070766  -0.0827281   0.0008820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  30  38271   0.143266   0.067966  -0.0824741   0.0008790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   8  31  38272   0.140366   0.065266  -0.0822542   0.0009320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9   1  38273   0.137466   0.062466  -0.0821102   0.0010520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9   2  38274   0.134567   0.059667  -0.0821313   0.0012390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9   3  38275   0.131667   0.056967  -0.0823643   0.0014810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9   4  38276   0.128767   0.054267  -0.0828454   0.0017260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9   5  38277   0.125867   0.051567  -0.0835494   0.0019200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9   6  38278   0.122968   0.048868  -0.0844025   0.0020160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9   7  38279   0.120068   0.046268  -0.0852925   0.0020060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9   8  38280   0.117168   0.043668  -0.0861316   0.0018980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9   9  38281   0.114269   0.041069  -0.0868106   0.0017150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  10  38282   0.111369   0.038469  -0.0873207   0.0015400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  11  38283   0.108469   0.035969  -0.0876547   0.0013990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  12  38284   0.105569   0.033469  -0.0878928   0.0013210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  13  38285   0.102670   0.031070  -0.0880828   0.0013230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  14  38286   0.099770   0.028570  -0.0883208   0.0014020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  15  38287   0.096870   0.026270  -0.0886519   0.0015140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  16  38288   0.093970   0.023870  -0.0891029   0.0016370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  17  38289   0.091071   0.021571  -0.0896800   0.0017420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  18  38290   0.088071   0.019271  -0.0903240   0.0017990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  19  38291   0.085171   0.017071  -0.0910221   0.0018200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  20  38292   0.082172   0.014872  -0.0917191   0.0017950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  21  38293   0.079172   0.012772  -0.0923592   0.0017300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  22  38294   0.076172   0.010672  -0.0929292   0.0016460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  23  38295   0.073172   0.008572  -0.0933983   0.0015420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  24  38296   0.070073   0.006573  -0.0937753   0.0014450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  25  38297   0.066973   0.004673  -0.0940573   0.0013750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  26  38298   0.063873   0.002773  -0.0942894   0.0013360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  27  38299   0.060673   0.000973  -0.0945064   0.0013480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  28  38300   0.057474  -0.000826  -0.0947555   0.0014120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  29  38301   0.054174  -0.002526  -0.0951135   0.0015640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963   9  30  38302   0.050874  -0.004226  -0.0956536   0.0017660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10   1  38303   0.047575  -0.005825  -0.0964166   0.0020100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10   2  38304   0.044175  -0.007425  -0.0974286   0.0022360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10   3  38305   0.040775  -0.008825  -0.0986217   0.0023930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10   4  38306   0.037275  -0.010225  -0.0999137   0.0024180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10   5  38307   0.033776  -0.011624  -0.1011758   0.0023270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10   6  38308   0.030176  -0.012924  -0.1022868   0.0021430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10   7  38309   0.026576  -0.014124  -0.1032029   0.0019290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10   8  38310   0.022876  -0.015224  -0.1039259   0.0017570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10   9  38311   0.019177  -0.016223  -0.1045029   0.0016500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  10  38312   0.015377  -0.017223  -0.1050160   0.0016410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  11  38313   0.011577  -0.018123  -0.1055510   0.0017000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  12  38314   0.007678  -0.019022  -0.1061821   0.0017990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  13  38315   0.003778  -0.019722  -0.1069151   0.0019270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  14  38316  -0.000122  -0.020422  -0.1077842   0.0020470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  15  38317  -0.004122  -0.021022  -0.1087692   0.0021470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  16  38318  -0.008121  -0.021521  -0.1098242   0.0022040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  17  38319  -0.012121  -0.022021  -0.1109023   0.0022150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  18  38320  -0.016221  -0.022321  -0.1119783   0.0021820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  19  38321  -0.020221  -0.022621  -0.1130034   0.0021150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  20  38322  -0.024320  -0.022820  -0.1139514   0.0020290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  21  38323  -0.028420  -0.022920  -0.1148114   0.0019420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  22  38324  -0.032620  -0.022920  -0.1156025   0.0018860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  23  38325  -0.036719  -0.022919  -0.1163555   0.0018660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  24  38326  -0.040819  -0.022719  -0.1171026   0.0018870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  25  38327  -0.044919  -0.022519  -0.1178976   0.0019640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  26  38328  -0.049019  -0.022219  -0.1188016   0.0020950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  27  38329  -0.053118  -0.021818  -0.1198677   0.0022970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  28  38330  -0.057118  -0.021318  -0.1211727   0.0025470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  29  38331  -0.061218  -0.020718  -0.1227178   0.0027920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  30  38332  -0.065118  -0.020118  -0.1244928   0.0029960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  10  31  38333  -0.069117  -0.019317  -0.1264278   0.0030950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11   1  38334  -0.073017  -0.018517  -0.0283989   0.0030640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11   2  38335  -0.076817  -0.017717  -0.0302639   0.0029000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11   3  38336  -0.080616  -0.016816  -0.0319240   0.0026520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11   4  38337  -0.084316  -0.015816  -0.0333380   0.0024010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11   5  38338  -0.088016  -0.014716  -0.0345060   0.0022000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11   6  38339  -0.091616  -0.013616  -0.0355291   0.0020810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11   7  38340  -0.095115  -0.012515  -0.0364491   0.0020420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11   8  38341  -0.098515  -0.011315  -0.0373852   0.0020760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11   9  38342  -0.101915  -0.010015  -0.0383712   0.0021380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  10  38343  -0.105115  -0.008715  -0.0394102   0.0021960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  11  38344  -0.108414  -0.007414  -0.0405053   0.0022190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  12  38345  -0.111514  -0.006014  -0.0415853   0.0022040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  13  38346  -0.114514  -0.004614  -0.0426483   0.0021540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  14  38347  -0.117513  -0.003213  -0.0436504   0.0020820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  15  38348  -0.120413  -0.001813  -0.0445514   0.0019650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  16  38349  -0.123213  -0.000313  -0.0453315   0.0018430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  17  38350  -0.125913   0.001187  -0.0459845   0.0017130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  18  38351  -0.128612   0.002688  -0.0465225   0.0015950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  19  38352  -0.131212   0.004188  -0.0469556   0.0015180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  20  38353  -0.133712   0.005688  -0.0473236   0.0014770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  21  38354  -0.136112   0.007288  -0.0476876   0.0015110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  22  38355  -0.138511   0.008789  -0.0481257   0.0016050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  23  38356  -0.140811   0.010389  -0.0486767   0.0017460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  24  38357  -0.143111   0.011889  -0.0493837   0.0019340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  25  38358  -0.145310   0.013490  -0.0503038   0.0021490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  26  38359  -0.147410   0.015090  -0.0514288   0.0023550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  27  38360  -0.149510   0.016590  -0.0527349   0.0024930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  28  38361  -0.151510   0.018190  -0.0541399   0.0025390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  29  38362  -0.153509   0.019691  -0.0555209   0.0024530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  11  30  38363  -0.155409   0.021291  -0.0567710   0.0022650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12   1  38364  -0.157309   0.022891  -0.0577960   0.0020430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12   2  38365  -0.159208   0.024492  -0.0586060   0.0018370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12   3  38366  -0.161008   0.025992  -0.0592481   0.0017110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12   4  38367  -0.162908   0.027592  -0.0598211   0.0016810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12   5  38368  -0.164708   0.029192  -0.0603961   0.0017400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12   6  38369  -0.166507   0.030793  -0.0610552   0.0018200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12   7  38370  -0.168307   0.032393  -0.0618072   0.0019120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12   8  38371  -0.170207   0.033993  -0.0626312   0.0019890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12   9  38372  -0.172007   0.035693  -0.0635223   0.0020170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  10  38373  -0.173806   0.037294  -0.0644093   0.0020110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  11  38374  -0.175706   0.038994  -0.0652793   0.0019630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  12  38375  -0.177606   0.040694  -0.0660734   0.0018800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  13  38376  -0.179505   0.042395  -0.0667804   0.0017720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  14  38377  -0.181505   0.044095  -0.0673634   0.0016530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  15  38378  -0.183505   0.045895  -0.0678385   0.0015400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  16  38379  -0.185505   0.047695  -0.0682105   0.0014510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  17  38380  -0.187604   0.049496  -0.0685125   0.0014130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  18  38381  -0.189804   0.051396  -0.0688036   0.0014190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  19  38382  -0.192004   0.053296  -0.0691306   0.0014940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  20  38383  -0.194204   0.055196  -0.0695606   0.0016250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  21  38384  -0.196503   0.057097  -0.0701457   0.0018000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  22  38385  -0.198903   0.059097  -0.0709187   0.0019980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  23  38386  -0.201303   0.061197  -0.0718907   0.0021940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  24  38387  -0.203802   0.063198  -0.0730338   0.0023430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  25  38388  -0.206302   0.065398  -0.0743018   0.0024280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  26  38389  -0.208902   0.067598  -0.0756078   0.0024060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  27  38390  -0.211602   0.069798  -0.0768409   0.0022860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  28  38391  -0.214301   0.072099  -0.0779169   0.0021100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  29  38392  -0.217001   0.074399  -0.0788089   0.0019280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  30  38393  -0.219801   0.076799  -0.0795510   0.0018090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1963  12  31  38394  -0.222601   0.079299  -0.0802090   0.0017810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1   1  38395  -0.225500   0.081800  -0.0808950   0.0018440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1   2  38396  -0.228400   0.084400  -0.0814970   0.0019660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1   3  38397  -0.231300   0.087000  -0.0822311   0.0021030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1   4  38398  -0.234299   0.089701  -0.0831141   0.0022270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1   5  38399  -0.237299   0.092501  -0.0840911   0.0023170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1   6  38400  -0.240199   0.095401  -0.0851432   0.0023580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1   7  38401  -0.243199   0.098301  -0.0862012   0.0023420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1   8  38402  -0.246198   0.101302  -0.0872232   0.0022880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1   9  38403  -0.249198   0.104302  -0.0881673   0.0021970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  10  38404  -0.252198   0.107502  -0.0890143   0.0020950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  11  38405  -0.255198   0.110702  -0.0897703   0.0019980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  12  38406  -0.258097   0.113903  -0.0904373   0.0019210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  13  38407  -0.260997   0.117203  -0.0910244   0.0018610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  14  38408  -0.263897   0.120603  -0.0915864   0.0018620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  15  38409  -0.266696   0.124004  -0.0921794   0.0019030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  16  38410  -0.269496   0.127504  -0.0928335   0.0020140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  17  38411  -0.272196   0.131004  -0.0936235   0.0021630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  18  38412  -0.274896   0.134604  -0.0945765   0.0023350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  19  38413  -0.277495   0.138205  -0.0956915   0.0024910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  20  38414  -0.279995   0.141805  -0.0969546   0.0025980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  21  38415  -0.282395   0.145505  -0.0982746   0.0026380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  22  38416  -0.284795   0.149305  -0.0996026   0.0026040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  23  38417  -0.286994   0.153006  -0.1008537   0.0024960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  24  38418  -0.289094   0.156806  -0.1019747   0.0023270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  25  38419  -0.291194   0.160606  -0.1029107   0.0021470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  26  38420  -0.293093   0.164507  -0.1036897   0.0020000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  27  38421  -0.294893   0.168407  -0.1043468   0.0019190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  28  38422  -0.296593   0.172307  -0.1049688   0.0019400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  29  38423  -0.298193   0.176207  -0.1056518   0.0020270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  30  38424  -0.299592   0.180108  -0.1064438   0.0021390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   1  31  38425  -0.300892   0.184108  -0.1073469   0.0022510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2   1  38426  -0.301992   0.188008  -0.1083319   0.0023210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2   2  38427  -0.303092   0.191908  -0.1093689   0.0023330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2   3  38428  -0.303891   0.195909  -0.1103889   0.0022780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2   4  38429  -0.304691   0.199809  -0.1113300   0.0021870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2   5  38430  -0.305291   0.203809  -0.1121430   0.0020540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2   6  38431  -0.305690   0.207710  -0.1128330   0.0019140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2   7  38432  -0.305990   0.211610  -0.1133821   0.0017770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2   8  38433  -0.306190   0.215510  -0.1138031   0.0016590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2   9  38434  -0.306190   0.219410  -0.1141221   0.0015870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  10  38435  -0.306089   0.223311  -0.1144031   0.0015630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  11  38436  -0.305789   0.227111  -0.1146882   0.0015980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  12  38437  -0.305389   0.230911  -0.1150302   0.0016970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  13  38438  -0.304889   0.234711  -0.1155012   0.0018430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  14  38439  -0.304188   0.238412  -0.1161382   0.0020360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  15  38440  -0.303388   0.242112  -0.1169723   0.0022190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  16  38441  -0.302488   0.245812  -0.1179833   0.0023720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  17  38442  -0.301387   0.249513  -0.1191013   0.0024490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  18  38443  -0.300187   0.253113  -0.1202503   0.0024230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  19  38444  -0.298887   0.256713  -0.1213283   0.0023100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  20  38445  -0.297487   0.260213  -0.1222494   0.0021350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  21  38446  -0.295986   0.263714  -0.1229914   0.0019500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  22  38447  -0.294286   0.267214  -0.1235574   0.0017900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  23  38448  -0.292586   0.270614  -0.1240044   0.0016970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  24  38449  -0.290785   0.274015  -0.1244015   0.0017020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  25  38450  -0.288785   0.277315  -0.1248365   0.0017800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  26  38451  -0.286785   0.280615  -0.1253895   0.0019320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  27  38452  -0.284685   0.283915  -0.1261035   0.0020940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  28  38453  -0.282484   0.287216  -0.1269686   0.0022270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   2  29  38454  -0.280284   0.290416  -0.1279386   0.0023130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3   1  38455  -0.277984   0.293616  -0.1289826   0.0023350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3   2  38456  -0.275584   0.296716  -0.1300096   0.0023000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3   3  38457  -0.273083   0.299817  -0.1309776   0.0022220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3   4  38458  -0.270583   0.302917  -0.1318447   0.0021080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3   5  38459  -0.268083   0.306017  -0.1326027   0.0020000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3   6  38460  -0.265382   0.309118  -0.1332687   0.0019070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3   7  38461  -0.262782   0.312118  -0.1338477   0.0018470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3   8  38462  -0.260082   0.315118  -0.1343797   0.0018250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3   9  38463  -0.257282   0.318118  -0.1349278   0.0018600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  10  38464  -0.254481   0.321119  -0.1355318   0.0019590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  11  38465  -0.251581   0.324119  -0.1362758   0.0021210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  12  38466  -0.248681   0.327119  -0.1372108   0.0023350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  13  38467  -0.245781   0.330019  -0.1383539   0.0025620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  14  38468  -0.242780   0.333020  -0.1397269   0.0027570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  15  38469  -0.239780   0.335920  -0.1412529   0.0028790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  16  38470  -0.236680   0.338820  -0.1428499   0.0028850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  17  38471  -0.233579   0.341721  -0.1444069   0.0027910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  18  38472  -0.230379   0.344621  -0.1458150   0.0026050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  19  38473  -0.227279   0.347521  -0.1470260   0.0023960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  20  38474  -0.223979   0.350421  -0.1480150   0.0021890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  21  38475  -0.220678   0.353222  -0.1488250   0.0020460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  22  38476  -0.217378   0.356122  -0.1495470   0.0020010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  23  38477  -0.214078   0.358922  -0.1502670   0.0020430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  24  38478  -0.210678   0.361722  -0.1510631   0.0021470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  25  38479  -0.207177   0.364523  -0.1519811   0.0022890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  26  38480  -0.203777   0.367223  -0.1530271   0.0024080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  27  38481  -0.200277   0.370023  -0.1541911   0.0024920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  28  38482  -0.196676   0.372724  -0.1553901   0.0025050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  29  38483  -0.193176   0.375424  -0.1565912   0.0024660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  30  38484  -0.189576   0.378024  -0.1577242   0.0023840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   3  31  38485  -0.185876   0.380724  -0.1587572   0.0022660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4   1  38486  -0.182275   0.383325  -0.0596522   0.0021140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4   2  38487  -0.178575   0.385925  -0.0603972   0.0019680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4   3  38488  -0.174875   0.388425  -0.0610082   0.0018500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4   4  38489  -0.171175   0.390925  -0.0615333   0.0017770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4   5  38490  -0.167474   0.393426  -0.0620013   0.0017590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4   6  38491  -0.163774   0.395926  -0.0624723   0.0017920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4   7  38492  -0.160074   0.398326  -0.0630073   0.0018780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4   8  38493  -0.156273   0.400727  -0.0636583   0.0020340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4   9  38494  -0.152573   0.403027  -0.0644883   0.0022110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  10  38495  -0.148873   0.405427  -0.0654834   0.0023860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  11  38496  -0.145073   0.407627  -0.0666554   0.0025460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  12  38497  -0.141372   0.409928  -0.0679434   0.0026110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  13  38498  -0.137572   0.412128  -0.0692344   0.0025510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  14  38499  -0.133872   0.414328  -0.0704174   0.0023680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  15  38500  -0.130172   0.416428  -0.0713684   0.0021390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  16  38501  -0.126471   0.418529  -0.0720945   0.0019190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  17  38502  -0.122771   0.420629  -0.0726255   0.0017670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  18  38503  -0.119071   0.422629  -0.0730595   0.0017170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  19  38504  -0.115470   0.424630  -0.0734915   0.0017800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  20  38505  -0.111870   0.426530  -0.0740445   0.0019150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  21  38506  -0.108270   0.428430  -0.0747425   0.0020840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  22  38507  -0.104670   0.430330  -0.0756115   0.0022410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  23  38508  -0.101069   0.432131  -0.0766236   0.0023750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  24  38509  -0.097569   0.433931  -0.0777546   0.0024660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  25  38510  -0.094069   0.435631  -0.0789466   0.0024980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  26  38511  -0.090569   0.437331  -0.0801326   0.0024550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  27  38512  -0.087168   0.438932  -0.0812536   0.0023710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  28  38513  -0.083768   0.440532  -0.0822866   0.0022630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  29  38514  -0.080368   0.442032  -0.0831886   0.0021520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   4  30  38515  -0.076967   0.443533  -0.0840067   0.0020600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5   1  38516  -0.073667   0.444933  -0.0847217   0.0019880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5   2  38517  -0.070367   0.446333  -0.0853997   0.0019580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5   3  38518  -0.067067   0.447633  -0.0860677   0.0019870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5   4  38519  -0.063766   0.448934  -0.0867937   0.0020560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5   5  38520  -0.060466   0.450134  -0.0875987   0.0021720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5   6  38521  -0.057266   0.451234  -0.0885637   0.0023560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5   7  38522  -0.054066   0.452234  -0.0897187   0.0025460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5   8  38523  -0.050865   0.453235  -0.0910728   0.0027350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5   9  38524  -0.047665   0.454135  -0.0925788   0.0028420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  10  38525  -0.044565   0.455035  -0.0941398   0.0028510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  11  38526  -0.041364   0.455836  -0.0956468   0.0027330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  12  38527  -0.038264   0.456536  -0.0969818   0.0025240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  13  38528  -0.035164   0.457136  -0.0980908   0.0022840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  14  38529  -0.031964   0.457736  -0.0989608   0.0020670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  15  38530  -0.028863   0.458237  -0.0996638   0.0019460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  16  38531  -0.025763   0.458737  -0.1002888   0.0019290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  17  38532  -0.022663   0.459037  -0.1009519   0.0019980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  18  38533  -0.019562   0.459338  -0.1017189   0.0021210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  19  38534  -0.016462   0.459638  -0.1026129   0.0022560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  20  38535  -0.013362   0.459738  -0.1036289   0.0023600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  21  38536  -0.010262   0.459838  -0.1047259   0.0024150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  22  38537  -0.007161   0.459939  -0.1058409   0.0024050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  23  38538  -0.004061   0.459939  -0.1069279   0.0023520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  24  38539  -0.000961   0.459839  -0.1079409   0.0022680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  25  38540   0.002139   0.459739  -0.1088649   0.0021460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  26  38541   0.005340   0.459540  -0.1096510   0.0020160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  27  38542   0.008440   0.459240  -0.1103000   0.0018770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  28  38543   0.011640   0.458940  -0.1108360   0.0017800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  29  38544   0.014741   0.458541  -0.1112870   0.0017320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  30  38545   0.017941   0.458141  -0.1117180   0.0017310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   5  31  38546   0.021141   0.457641  -0.1121780   0.0017790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6   1  38547   0.024341   0.457141  -0.1127050   0.0018720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6   2  38548   0.027542   0.456542  -0.1133360   0.0019980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6   3  38549   0.030742   0.455842  -0.1141200   0.0021430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6   4  38550   0.033942   0.455142  -0.1150250   0.0022840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6   5  38551   0.037142   0.454342  -0.1160770   0.0023920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6   6  38552   0.040343   0.453543  -0.1172030   0.0024340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6   7  38553   0.043643   0.452643  -0.1183091   0.0023580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6   8  38554   0.046843   0.451743  -0.1192921   0.0021710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6   9  38555   0.050144   0.450744  -0.1200361   0.0019090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  10  38556   0.053344   0.449644  -0.1204971   0.0016300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  11  38557   0.056644   0.448544  -0.1207261   0.0014230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  12  38558   0.059944   0.447444  -0.1207891   0.0013100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  13  38559   0.063145   0.446245  -0.1207911   0.0012890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  14  38560   0.066445   0.444945  -0.1207891   0.0013330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  15  38561   0.069745   0.443645  -0.1208711   0.0014100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  16  38562   0.072945   0.442245  -0.1210091   0.0014570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  17  38563   0.076246   0.440846  -0.1211761   0.0014480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  18  38564   0.079546   0.439346  -0.1213051   0.0013800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  19  38565   0.082746   0.437846  -0.1213181   0.0012580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  20  38566   0.086047   0.436347  -0.1212171   0.0011240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  21  38567   0.089247   0.434747  -0.1209671   0.0009630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  22  38568   0.092547   0.433147  -0.1205602   0.0008120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  23  38569   0.095747   0.431447  -0.1200042   0.0006800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  24  38570   0.098948   0.429748  -0.1193482   0.0005930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  25  38571   0.102148   0.428048  -0.1186052   0.0005400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  26  38572   0.105348   0.426248  -0.1178472   0.0005430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  27  38573   0.108548   0.424448  -0.1171212   0.0006150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  28  38574   0.111749   0.422649  -0.1164962   0.0007530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  29  38575   0.114949   0.420749  -0.1160522   0.0009440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   6  30  38576   0.118049   0.418849  -0.1157932   0.0011410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7   1  38577   0.121250   0.416950  -0.1157452   0.0013510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7   2  38578   0.124350   0.415050  -0.1158882   0.0015280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7   3  38579   0.127450   0.413050  -0.1161932   0.0016610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7   4  38580   0.130650   0.411050  -0.1165932   0.0017120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7   5  38581   0.133751   0.409051  -0.1169862   0.0016470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7   6  38582   0.136851   0.407051  -0.1172792   0.0014990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7   7  38583   0.139851   0.404951  -0.1173822   0.0013060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7   8  38584   0.142951   0.402851  -0.1173112   0.0011320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7   9  38585   0.145952   0.400752  -0.1170962   0.0010450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  10  38586   0.149052   0.398552  -0.1168372   0.0010650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  11  38587   0.152052   0.396452  -0.1166572   0.0011640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  12  38588   0.155053   0.394153  -0.1165982   0.0013090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  13  38589   0.158053   0.391953  -0.1166692   0.0014060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  14  38590   0.160953   0.389653  -0.1168002   0.0014540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  15  38591   0.163953   0.387353  -0.1169632   0.0014500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  16  38592   0.166854   0.385054  -0.1170782   0.0013810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  17  38593   0.169754   0.382654  -0.1171082   0.0012630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  18  38594   0.172554   0.380254  -0.1170152   0.0011360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  19  38595   0.175454   0.377854  -0.1167872   0.0009980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  20  38596   0.178255   0.375355  -0.1164132   0.0008580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  21  38597   0.181055   0.372755  -0.1159212   0.0007530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  22  38598   0.183755   0.370255  -0.1153422   0.0006880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  23  38599   0.186456   0.367556  -0.1147142   0.0006760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  24  38600   0.189156   0.364956  -0.1141142   0.0007240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  25  38601   0.191756   0.362156  -0.1135922   0.0008310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  26  38602   0.194356   0.359356  -0.1132022   0.0009960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  27  38603   0.196957   0.356557  -0.1129932   0.0011800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  28  38604   0.199457   0.353657  -0.1129722   0.0013850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  29  38605   0.201957   0.350657  -0.1131552   0.0015540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  30  38606   0.204357   0.347657  -0.1134722   0.0016690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   7  31  38607   0.206658   0.344658  -0.1138792   0.0017110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8   1  38608   0.209058   0.341458  -0.1142872   0.0016720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8   2  38609   0.211258   0.338258  -0.1146182   0.0015690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8   3  38610   0.213459   0.335059  -0.1148222   0.0014260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8   4  38611   0.215559   0.331759  -0.1148822   0.0012710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8   5  38612   0.217659   0.328359  -0.1148062   0.0011800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8   6  38613   0.219659   0.324959  -0.1146862   0.0011880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8   7  38614   0.221560   0.321460  -0.1146262   0.0012860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8   8  38615   0.223460   0.317860  -0.1147012   0.0014480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8   9  38616   0.225160   0.314260  -0.1149352   0.0016060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  10  38617   0.226861   0.310561  -0.1153082   0.0017180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  11  38618   0.228461   0.306861  -0.1157442   0.0017410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  12  38619   0.229961   0.303061  -0.1161632   0.0016640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  13  38620   0.231461   0.299161  -0.1164592   0.0015210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  14  38621   0.232762   0.295262  -0.1165912   0.0013480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  15  38622   0.234062   0.291262  -0.1165502   0.0011590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  16  38623   0.235262   0.287262  -0.1163112   0.0009750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  17  38624   0.236362   0.283162  -0.1159092   0.0008060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  18  38625   0.237263   0.279063  -0.1153362   0.0006770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  19  38626   0.238263   0.274863  -0.1146912   0.0006210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  20  38627   0.239063   0.270663  -0.1140082   0.0006240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  21  38628   0.239764   0.266364  -0.1133592   0.0006970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  22  38629   0.240364   0.262064  -0.1128212   0.0008250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  23  38630   0.240964   0.257764  -0.1124232   0.0009920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  24  38631   0.241364   0.253364  -0.1122192   0.0011800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  25  38632   0.241765   0.248965  -0.1121952   0.0013540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  26  38633   0.241965   0.244465  -0.1123182   0.0014800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  27  38634   0.242165   0.239965  -0.1125272   0.0015240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  28  38635   0.242265   0.235565  -0.1127562   0.0015000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  29  38636   0.242266   0.230966  -0.1129032   0.0013940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  30  38637   0.242166   0.226466  -0.1129302   0.0012480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   8  31  38638   0.242066   0.221966  -0.1128102   0.0011170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9   1  38639   0.241767   0.217367  -0.0125822   0.0010390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9   2  38640   0.241467   0.212767  -0.0123272   0.0010580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9   3  38641   0.241067   0.208267  -0.0121311   0.0011660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9   4  38642   0.240567   0.203667  -0.0120961   0.0013640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9   5  38643   0.239968   0.199168  -0.0122791   0.0015940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9   6  38644   0.239368   0.194568  -0.0126771   0.0018020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9   7  38645   0.238568   0.190068  -0.0132621   0.0019440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9   8  38646   0.237768   0.185568  -0.0139451   0.0019980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9   9  38647   0.236969   0.181069  -0.0146311   0.0019620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  10  38648   0.235969   0.176569  -0.0152591   0.0018770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  11  38649   0.234969   0.172169  -0.0157851   0.0017720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  12  38650   0.233970   0.167770  -0.0162021   0.0016540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  13  38651   0.232770   0.163370  -0.0165091   0.0015460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  14  38652   0.231670   0.159070  -0.0167171   0.0014770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  15  38653   0.230370   0.154770  -0.0168921   0.0014620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  16  38654   0.229071   0.150571  -0.0170611   0.0014970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  17  38655   0.227771   0.146371  -0.0173061   0.0015930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  18  38656   0.226371   0.142271  -0.0176670   0.0017370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  19  38657   0.224871   0.138171  -0.0182070   0.0019290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  20  38658   0.223372   0.134072  -0.0189540   0.0021470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  21  38659   0.221872   0.130072  -0.0199200   0.0023590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  22  38660   0.220272   0.126172  -0.0210570   0.0025030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  23  38661   0.218673   0.122273  -0.0223070   0.0025810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  24  38662   0.216973   0.118473  -0.0235930   0.0025550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  25  38663   0.215273   0.114673  -0.0247860   0.0024260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  26  38664   0.213573   0.110973  -0.0258380   0.0022430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  27  38665   0.211774   0.107374  -0.0266910   0.0020670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  28  38666   0.209974   0.103774  -0.0273890   0.0019310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  29  38667   0.208074   0.100274  -0.0279910   0.0018900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964   9  30  38668   0.206174   0.096874  -0.0286129   0.0019480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10   1  38669   0.204175   0.093475  -0.0293259   0.0020900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10   2  38670   0.202175   0.090175  -0.0302179   0.0022800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10   3  38671   0.200175   0.086975  -0.0313049   0.0024700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10   4  38672   0.198076   0.083776  -0.0325519   0.0026140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10   5  38673   0.195976   0.080676  -0.0339059   0.0026710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10   6  38674   0.193776   0.077676  -0.0352759   0.0026540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10   7  38675   0.191576   0.074676  -0.0365909   0.0025550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10   8  38676   0.189377   0.071877  -0.0377809   0.0024100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10   9  38677   0.187077   0.069077  -0.0388148   0.0022470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  10  38678   0.184777   0.066277  -0.0396878   0.0020940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  11  38679   0.182377   0.063677  -0.0404238   0.0019740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  12  38680   0.179978   0.061078  -0.0410628   0.0019040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  13  38681   0.177478   0.058578  -0.0416518   0.0018850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  14  38682   0.174978   0.056078  -0.0422638   0.0019400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  15  38683   0.172479   0.053679  -0.0429518   0.0020440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  16  38684   0.169879   0.051379  -0.0437698   0.0021990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  17  38685   0.167279   0.049079  -0.0447638   0.0023820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  18  38686   0.164679   0.046879  -0.0459487   0.0025880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  19  38687   0.161980   0.044780  -0.0473327   0.0027610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  20  38688   0.159280   0.042680  -0.0488587   0.0028660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  21  38689   0.156480   0.040680  -0.0504287   0.0028560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  22  38690   0.153680   0.038680  -0.0519327   0.0027330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  23  38691   0.150881   0.036681  -0.0532767   0.0025230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  24  38692   0.147981   0.034881  -0.0543897   0.0022940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  25  38693   0.145081   0.032981  -0.0552857   0.0020990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  26  38694   0.142182   0.031182  -0.0560166   0.0019900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  27  38695   0.139182   0.029382  -0.0566896   0.0019740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  28  38696   0.136182   0.027582  -0.0574056   0.0020610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  29  38697   0.133182   0.025882  -0.0582396   0.0022030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  30  38698   0.130083   0.024183  -0.0592246   0.0023550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  10  31  38699   0.126983   0.022583  -0.0603496   0.0024760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11   1  38700   0.123783   0.020883  -0.0615556   0.0025250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11   2  38701   0.120584   0.019284  -0.0627935   0.0025170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11   3  38702   0.117384   0.017684  -0.0639755   0.0024370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11   4  38703   0.114184   0.016084  -0.0650495   0.0022930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11   5  38704   0.110884   0.014584  -0.0659715   0.0021390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11   6  38705   0.107585   0.012985  -0.0667365   0.0019820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11   7  38706   0.104285   0.011485  -0.0673435   0.0018370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11   8  38707   0.100885   0.009985  -0.0678354   0.0017460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11   9  38708   0.097585   0.008485  -0.0682644   0.0017110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  10  38709   0.094186   0.006986  -0.0686794   0.0017410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  11  38710   0.090786   0.005486  -0.0691664   0.0018320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  12  38711   0.087386   0.003986  -0.0697714   0.0019650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  13  38712   0.083987   0.002587  -0.0705304   0.0021480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  14  38713   0.080487   0.001187  -0.0714754   0.0023450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  15  38714   0.077087  -0.000213  -0.0726303   0.0025510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  16  38715   0.073687  -0.001613  -0.0739643   0.0027070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  17  38716   0.070188  -0.002912  -0.0754183   0.0027840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  18  38717   0.066788  -0.004312  -0.0768933   0.0027490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  19  38718   0.063288  -0.005612  -0.0782793   0.0025960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  20  38719   0.059888  -0.006812  -0.0794823   0.0023850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  21  38720   0.056489  -0.008011  -0.0804592   0.0021750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  22  38721   0.052989  -0.009211  -0.0812552   0.0020230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  23  38722   0.049589  -0.010411  -0.0819512   0.0019800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  24  38723   0.046190  -0.011510  -0.0826602   0.0020520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  25  38724   0.042790  -0.012610  -0.0834792   0.0021740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  26  38725   0.039390  -0.013610  -0.0844241   0.0023240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  27  38726   0.035990  -0.014610  -0.0855171   0.0024440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  28  38727   0.032691  -0.015509  -0.0867131   0.0025250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  29  38728   0.029291  -0.016309  -0.0879431   0.0025240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  11  30  38729   0.025891  -0.017109  -0.0891491   0.0024770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12   1  38730   0.022591  -0.017909  -0.0902890   0.0023760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12   2  38731   0.019292  -0.018508  -0.0913000   0.0022330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12   3  38732   0.015992  -0.019108  -0.0921620   0.0020910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12   4  38733   0.012592  -0.019708  -0.0928860   0.0019610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12   5  38734   0.009393  -0.020107  -0.0934960   0.0018660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12   6  38735   0.006093  -0.020507  -0.0940450   0.0018320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12   7  38736   0.002793  -0.020907  -0.0945909   0.0018390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12   8  38737  -0.000507  -0.021107  -0.0951639   0.0019180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12   9  38738  -0.003706  -0.021306  -0.0958449   0.0020300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  10  38739  -0.006906  -0.021406  -0.0966589   0.0021930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  11  38740  -0.010206  -0.021406  -0.0976489   0.0023800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  12  38741  -0.013406  -0.021306  -0.0988298   0.0025620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  13  38742  -0.016605  -0.021205  -0.1001768   0.0027150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  14  38743  -0.019805  -0.021005  -0.1016528   0.0028150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  15  38744  -0.023005  -0.020805  -0.1031778   0.0028200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  16  38745  -0.026104  -0.020404  -0.1046567   0.0027110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  17  38746  -0.029304  -0.020004  -0.1059807   0.0025250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  18  38747  -0.032504  -0.019504  -0.1071047   0.0023020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  19  38748  -0.035604  -0.019004  -0.1080067   0.0021040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  20  38749  -0.038803  -0.018403  -0.1087547   0.0020010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  21  38750  -0.042003  -0.017703  -0.1094586   0.0020150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  22  38751  -0.045103  -0.017003  -0.1102166   0.0021230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  23  38752  -0.048303  -0.016203  -0.1111156   0.0022660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  24  38753  -0.051502  -0.015302  -0.1121516   0.0023860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  25  38754  -0.054602  -0.014402  -0.1132755   0.0024300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  26  38755  -0.057802  -0.013402  -0.1144035   0.0024020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  27  38756  -0.061001  -0.012301  -0.1154655   0.0023010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  28  38757  -0.064201  -0.011201  -0.1163875   0.0021460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  29  38758  -0.067401  -0.010001  -0.1171475   0.0019600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  30  38759  -0.070601  -0.008801  -0.1177154   0.0017660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1964  12  31  38760  -0.073900  -0.007500  -0.1180924   0.0015830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1   1  38761  -0.077100  -0.006200  -0.0182914   0.0014300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1   2  38762  -0.080300  -0.004800  -0.0183784   0.0013330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1   3  38763  -0.083600  -0.003300  -0.0183863   0.0012940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1   4  38764  -0.086799  -0.001799  -0.0183853   0.0013150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1   5  38765  -0.090099  -0.000199  -0.0184453   0.0013930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1   6  38766  -0.093299   0.001401  -0.0185953   0.0015230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1   7  38767  -0.096598   0.003002  -0.0188992   0.0016770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1   8  38768  -0.099898   0.004802  -0.0193612   0.0018340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1   9  38769  -0.103098   0.006502  -0.0199712   0.0019730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  10  38770  -0.106398   0.008302  -0.0207022   0.0020810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  11  38771  -0.109697   0.010203  -0.0215121   0.0021250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  12  38772  -0.112997   0.012103  -0.0223351   0.0020970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  13  38773  -0.116297   0.014103  -0.0230871   0.0019960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  14  38774  -0.119497   0.016103  -0.0237181   0.0018510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  15  38775  -0.122796   0.018104  -0.0241900   0.0017100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  16  38776  -0.126096   0.020204  -0.0245600   0.0016360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  17  38777  -0.129296   0.022304  -0.0249000   0.0016750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  18  38778  -0.132595   0.024405  -0.0253480   0.0018260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  19  38779  -0.135795   0.026605  -0.0259959   0.0020670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  20  38780  -0.138995   0.028805  -0.0268909   0.0023070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  21  38781  -0.142195   0.031105  -0.0279879   0.0024650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  22  38782  -0.145294   0.033406  -0.0291979   0.0025370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  23  38783  -0.148394   0.035706  -0.0304308   0.0025060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  24  38784  -0.151494   0.038006  -0.0315958   0.0024040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  25  38785  -0.154493   0.040307  -0.0326358   0.0022630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  26  38786  -0.157493   0.042707  -0.0335277   0.0021120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  27  38787  -0.160493   0.045007  -0.0342747   0.0019650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  28  38788  -0.163393   0.047407  -0.0348777   0.0018390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  29  38789  -0.166192   0.049808  -0.0353777   0.0017590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  30  38790  -0.168992   0.052108  -0.0358156   0.0017260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   1  31  38791  -0.171792   0.054508  -0.0362596   0.0017630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2   1  38792  -0.174492   0.056908  -0.0367716   0.0018500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2   2  38793  -0.177091   0.059309  -0.0373945   0.0019940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2   3  38794  -0.179691   0.061709  -0.0381685   0.0021570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2   4  38795  -0.182191   0.064109  -0.0391095   0.0023240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2   5  38796  -0.184690   0.066510  -0.0402085   0.0024600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2   6  38797  -0.187090   0.068810  -0.0414244   0.0025610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2   7  38798  -0.189490   0.071210  -0.0427104   0.0025900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2   8  38799  -0.191790   0.073610  -0.0439894   0.0025350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2   9  38800  -0.194089   0.076011  -0.0451773   0.0024200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  10  38801  -0.196289   0.078411  -0.0462123   0.0022540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  11  38802  -0.198389   0.080811  -0.0470813   0.0020770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  12  38803  -0.200489   0.083211  -0.0477803   0.0019440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  13  38804  -0.202488   0.085612  -0.0484012   0.0019050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  14  38805  -0.204488   0.088112  -0.0490312   0.0019730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  15  38806  -0.206488   0.090512  -0.0498002   0.0021570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  16  38807  -0.208387   0.093013  -0.0507671   0.0023780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  17  38808  -0.210187   0.095513  -0.0519431   0.0025640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  18  38809  -0.211987   0.098013  -0.0532731   0.0026590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  19  38810  -0.213787   0.100613  -0.0546330   0.0026430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  20  38811  -0.215486   0.103214  -0.0559360   0.0025390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  21  38812  -0.217086   0.105814  -0.0571010   0.0023730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  22  38813  -0.218686   0.108414  -0.0580849   0.0021940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  23  38814  -0.220286   0.111114  -0.0588909   0.0020230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  24  38815  -0.221785   0.113815  -0.0595509   0.0018940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  25  38816  -0.223285   0.116515  -0.0601048   0.0018030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  26  38817  -0.224685   0.119315  -0.0605868   0.0017810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  27  38818  -0.226084   0.122116  -0.0610888   0.0018120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   2  28  38819  -0.227484   0.124916  -0.0616527   0.0019250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3   1  38820  -0.228784   0.127816   0.0376433   0.0020820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3   2  38821  -0.229984   0.130716   0.0367723   0.0022750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3   3  38822  -0.231183   0.133717   0.0356874   0.0024830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3   4  38823  -0.232383   0.136717   0.0344104   0.0026760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3   5  38824  -0.233483   0.139717   0.0329514   0.0028230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3   6  38825  -0.234583   0.142817   0.0313795   0.0028990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3   7  38826  -0.235582   0.145918   0.0297815   0.0028940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3   8  38827  -0.236582   0.149018   0.0282175   0.0028030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3   9  38828  -0.237482   0.152218   0.0267726   0.0026710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  10  38829  -0.238281   0.155419   0.0254696   0.0025270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  11  38830  -0.239081   0.158619   0.0242976   0.0024060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  12  38831  -0.239881   0.161819   0.0232207   0.0023650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  13  38832  -0.240481   0.165119   0.0221317   0.0024220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  14  38833  -0.241080   0.168320   0.0209217   0.0025820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  15  38834  -0.241680   0.171620   0.0195248   0.0028090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  16  38835  -0.242080   0.174920   0.0179038   0.0030280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  17  38836  -0.242480   0.178220   0.0160898   0.0031840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  18  38837  -0.242779   0.181621   0.0141699   0.0032350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  19  38838  -0.243079   0.184921   0.0122479   0.0031730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  20  38839  -0.243179   0.188221   0.0104349   0.0030210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  21  38840  -0.243278   0.191622   0.0088120   0.0028200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  22  38841  -0.243278   0.194922   0.0073970   0.0026120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  23  38842  -0.243178   0.198322   0.0061800   0.0024280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  24  38843  -0.243078   0.201622   0.0051161   0.0022900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  25  38844  -0.242777   0.204923   0.0041591   0.0022230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  26  38845  -0.242477   0.208223   0.0032472   0.0022120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  27  38846  -0.242077   0.211623   0.0023042   0.0022760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  28  38847  -0.241577   0.214923   0.0012762   0.0023880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  29  38848  -0.241076   0.218224   0.0001023   0.0025450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  30  38849  -0.240376   0.221424  -0.0012417   0.0027370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   3  31  38850  -0.239676   0.224724  -0.0027807   0.0029280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4   1  38851  -0.238875   0.228025  -0.0044866   0.0030760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4   2  38852  -0.238075   0.231225  -0.0063096   0.0031570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4   3  38853  -0.237175   0.234425  -0.0081805   0.0031480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4   4  38854  -0.236175   0.237625  -0.0099845   0.0030470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4   5  38855  -0.235174   0.240826  -0.0116505   0.0028770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4   6  38856  -0.234074   0.244026  -0.0131304   0.0026730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4   7  38857  -0.232974   0.247226  -0.0144264   0.0025070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4   8  38858  -0.231874   0.250326  -0.0155804   0.0024060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4   9  38859  -0.230573   0.253427  -0.0166823   0.0024160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  10  38860  -0.229373   0.256527  -0.0178463   0.0025180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  11  38861  -0.228073   0.259627  -0.0191642   0.0026960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  12  38862  -0.226772   0.262728  -0.0206682   0.0029010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  13  38863  -0.225372   0.265728  -0.0223642   0.0030720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  14  38864  -0.223972   0.268728  -0.0241851   0.0031530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  15  38865  -0.222572   0.271828  -0.0260441   0.0031270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  16  38866  -0.221171   0.274729  -0.0278150   0.0030000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  17  38867  -0.219671   0.277729  -0.0294210   0.0027930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  18  38868  -0.218171   0.280729  -0.0308010   0.0025570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  19  38869  -0.216670   0.283630  -0.0319469   0.0023180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  20  38870  -0.215070   0.286530  -0.0328599   0.0021170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  21  38871  -0.213570   0.289430  -0.0335988   0.0019730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  22  38872  -0.211970   0.292230  -0.0342368   0.0019050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  23  38873  -0.210369   0.295131  -0.0348428   0.0019060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  24  38874  -0.208869   0.297931  -0.0354807   0.0019590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  25  38875  -0.207269   0.300631  -0.0361967   0.0020700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  26  38876  -0.205569   0.303431  -0.0370416   0.0022140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  27  38877  -0.203968   0.306132  -0.0380386   0.0023790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  28  38878  -0.202368   0.308832  -0.0392056   0.0025290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  29  38879  -0.200768   0.311532  -0.0404905   0.0026310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   4  30  38880  -0.199067   0.314233  -0.0418505   0.0026620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5   1  38881  -0.197467   0.316833  -0.0431914   0.0025930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5   2  38882  -0.195867   0.319433  -0.0444254   0.0024420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5   3  38883  -0.194167   0.322033  -0.0454583   0.0022310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5   4  38884  -0.192566   0.324534  -0.0462993   0.0020470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5   5  38885  -0.190866   0.327134  -0.0469863   0.0019310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5   6  38886  -0.189266   0.329634  -0.0476062   0.0019080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5   7  38887  -0.187666   0.332034  -0.0482492   0.0019930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5   8  38888  -0.185965   0.334535  -0.0490281   0.0021660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5   9  38889  -0.184365   0.336935  -0.0500031   0.0023730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  10  38890  -0.182765   0.339335  -0.0511680   0.0025510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  11  38891  -0.181064   0.341636  -0.0524930   0.0026650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  12  38892  -0.179464   0.343936  -0.0538880   0.0026990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  13  38893  -0.177764   0.346236  -0.0552599   0.0026290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  14  38894  -0.176064   0.348536  -0.0565209   0.0024730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  15  38895  -0.174463   0.350737  -0.0576008   0.0022830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  16  38896  -0.172763   0.352937  -0.0584948   0.0020850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  17  38897  -0.170963   0.355137  -0.0591897   0.0019120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  18  38898  -0.169263   0.357237  -0.0597347   0.0017770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  19  38899  -0.167462   0.359338  -0.0601756   0.0017050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  20  38900  -0.165762   0.361438  -0.0605786   0.0017120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  21  38901  -0.163962   0.363438  -0.0610216   0.0017740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  22  38902  -0.162061   0.365439  -0.0615535   0.0018980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  23  38903  -0.160161   0.367439  -0.0622285   0.0020470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  24  38904  -0.158261   0.369439  -0.0630724   0.0022230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  25  38905  -0.156361   0.371339  -0.0640824   0.0023940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  26  38906  -0.154360   0.373240  -0.0652523   0.0025270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  27  38907  -0.152360   0.375140  -0.0665273   0.0026110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  28  38908  -0.150260   0.377040  -0.0678442   0.0025970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  29  38909  -0.148060   0.378840  -0.0691092   0.0024960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  30  38910  -0.145859   0.380741  -0.0702101   0.0023070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   5  31  38911  -0.143659   0.382541  -0.0711241   0.0021030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6   1  38912  -0.141359   0.384341  -0.0718310   0.0019340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6   2  38913  -0.138958   0.386142  -0.0724250   0.0018630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6   3  38914  -0.136558   0.387942  -0.0730170   0.0019210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6   4  38915  -0.134058   0.389742  -0.0736989   0.0020650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6   5  38916  -0.131458   0.391542  -0.0745709   0.0022510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6   6  38917  -0.128757   0.393343  -0.0756158   0.0024310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6   7  38918  -0.126057   0.395143  -0.0768118   0.0025370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6   8  38919  -0.123257   0.396843  -0.0780707   0.0025650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6   9  38920  -0.120357   0.398643  -0.0793327   0.0025050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  10  38921  -0.117356   0.400344  -0.0804766   0.0023630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  11  38922  -0.114256   0.402044  -0.0814536   0.0021750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  12  38923  -0.111156   0.403744  -0.0822325   0.0019740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  13  38924  -0.107955   0.405445  -0.0828165   0.0017880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  14  38925  -0.104655   0.407145  -0.0832224   0.0016320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  15  38926  -0.101255   0.408745  -0.0834994   0.0015220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  16  38927  -0.097855   0.410345  -0.0837083   0.0014880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  17  38928  -0.094354   0.411946  -0.0838973   0.0015000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  18  38929  -0.090754   0.413546  -0.0841372   0.0015670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  19  38930  -0.087054   0.415046  -0.0844552   0.0016630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  20  38931  -0.083354   0.416446  -0.0848801   0.0017880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  21  38932  -0.079553   0.417947  -0.0854301   0.0019000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  22  38933  -0.075753   0.419247  -0.0860940   0.0020020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  23  38934  -0.071853   0.420647  -0.0868200   0.0020320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  24  38935  -0.067952   0.421848  -0.0875449   0.0020050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  25  38936  -0.063952   0.423148  -0.0882219   0.0019140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  26  38937  -0.059952   0.424248  -0.0887638   0.0017390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  27  38938  -0.055852   0.425348  -0.0891028   0.0015230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  28  38939  -0.051751   0.426449  -0.0892237   0.0013170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  29  38940  -0.047651   0.427449  -0.0891617   0.0011870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   6  30  38941  -0.043551   0.428349  -0.0890396   0.0011980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7   1  38942  -0.039451   0.429149   0.0110014   0.0013280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7   2  38943  -0.035250   0.429950   0.0108725   0.0015370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7   3  38944  -0.031150   0.430650   0.0105275   0.0017560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7   4  38945  -0.027050   0.431350   0.0099826   0.0019180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7   5  38946  -0.022849   0.431951   0.0093256   0.0019700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7   6  38947  -0.018749   0.432451   0.0086577   0.0019300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7   7  38948  -0.014649   0.432851   0.0080827   0.0018110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7   8  38949  -0.010649   0.433251   0.0076518   0.0016460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7   9  38950  -0.006648   0.433552   0.0073838   0.0014800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  10  38951  -0.002648   0.433852   0.0072769   0.0013190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  11  38952   0.001352   0.433952   0.0073239   0.0011950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  12  38953   0.005152   0.434052   0.0074600   0.0011340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  13  38954   0.009053   0.434153   0.0076361   0.0011250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  14  38955   0.012753   0.434153   0.0077691   0.0011900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  15  38956   0.016453   0.434053   0.0078272   0.0013030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  16  38957   0.020154   0.433854   0.0077492   0.0014490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  17  38958   0.023654   0.433654   0.0075123   0.0016170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  18  38959   0.027154   0.433354   0.0071063   0.0017740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  19  38960   0.030554   0.433054   0.0065524   0.0019190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  20  38961   0.033855   0.432655   0.0058814   0.0020150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  21  38962   0.037055   0.432155   0.0051495   0.0020470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  22  38963   0.040155   0.431655   0.0044005   0.0020200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  23  38964   0.043156   0.431056   0.0037236   0.0019020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  24  38965   0.046056   0.430356   0.0032056   0.0017260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  25  38966   0.048956   0.429656   0.0028677   0.0015540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  26  38967   0.051656   0.428856   0.0026828   0.0014180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  27  38968   0.054357   0.427957   0.0025858   0.0013960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  28  38969   0.056857   0.427057   0.0024479   0.0015010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  29  38970   0.059357   0.426057   0.0021489   0.0017100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  30  38971   0.061757   0.424957   0.0016160   0.0019440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   7  31  38972   0.064058   0.423858   0.0008660   0.0021430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8   1  38973   0.066258   0.422658  -0.0000339   0.0022260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8   2  38974   0.068358   0.421358  -0.0009629   0.0021920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8   3  38975   0.070359   0.419959  -0.0017938   0.0020440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8   4  38976   0.072359   0.418559  -0.0024497   0.0018430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8   5  38977   0.074259   0.417059  -0.0028827   0.0016240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8   6  38978   0.076059   0.415459  -0.0031036   0.0014130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8   7  38979   0.077860   0.413860  -0.0031326   0.0012430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8   8  38980   0.079560   0.412160  -0.0030175   0.0011380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8   9  38981   0.081260   0.410360  -0.0028295   0.0010960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  10  38982   0.082860   0.408460  -0.0026424   0.0011180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  11  38983   0.084461   0.406461  -0.0024963   0.0012000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  12  38984   0.085961   0.404461  -0.0024673   0.0013380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  13  38985   0.087561   0.402361  -0.0025922   0.0015040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  14  38986   0.089062   0.400162  -0.0028872   0.0016740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  15  38987   0.090462   0.397962  -0.0033421   0.0018320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  16  38988   0.091962   0.395562  -0.0039361   0.0019480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  17  38989   0.093362   0.393162  -0.0046290   0.0020070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  18  38990   0.094863   0.390663  -0.0053379   0.0020110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  19  38991   0.096263   0.388163  -0.0060289   0.0019420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  20  38992   0.097663   0.385563  -0.0066238   0.0018310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  21  38993   0.099063   0.382863  -0.0070838   0.0016890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  22  38994   0.100564   0.380064  -0.0074197   0.0015820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  23  38995   0.101964   0.377264  -0.0076836   0.0015530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  24  38996   0.103464   0.374364  -0.0079766   0.0016430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  25  38997   0.104965   0.371365  -0.0084205   0.0018420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  26  38998   0.106465   0.368365  -0.0091065   0.0021270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  27  38999   0.107965   0.365265  -0.0100834   0.0024080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  28  39000   0.109465   0.362165  -0.0112953   0.0025960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  29  39001   0.111066   0.358966  -0.0126313   0.0026520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  30  39002   0.112666   0.355666  -0.0139632   0.0025730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   8  31  39003   0.114266   0.352366  -0.0151632   0.0023960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9   1  39004   0.115866   0.349066   0.0838499   0.0021760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9   2  39005   0.117467   0.345667   0.0830830   0.0019530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9   3  39006   0.119167   0.342267   0.0825200   0.0017730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9   4  39007   0.120867   0.338867   0.0821081   0.0016630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9   5  39008   0.122668   0.335368   0.0817711   0.0016120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9   6  39009   0.124368   0.331868   0.0814612   0.0016190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9   7  39010   0.126168   0.328368   0.0811033   0.0016990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9   8  39011   0.127968   0.324768   0.0806473   0.0018190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9   9  39012   0.129869   0.321169   0.0800424   0.0019840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  10  39013   0.131669   0.317669   0.0792655   0.0021590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  11  39014   0.133569   0.314069   0.0783185   0.0023100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  12  39015   0.135469   0.310369   0.0772386   0.0024310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  13  39016   0.137370   0.306770   0.0760776   0.0024910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  14  39017   0.139270   0.303170   0.0748817   0.0024780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  15  39018   0.141170   0.299570   0.0737348   0.0024050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  16  39019   0.143071   0.295871   0.0726898   0.0022790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  17  39020   0.144971   0.292271   0.0717839   0.0021320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  18  39021   0.146871   0.288671   0.0710200   0.0020030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  19  39022   0.148771   0.284971   0.0703560   0.0019390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  20  39023   0.150672   0.281372   0.0696981   0.0019770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  21  39024   0.152572   0.277772   0.0689441   0.0021410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  22  39025   0.154472   0.274172   0.0679642   0.0024000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  23  39026   0.156272   0.270672   0.0667113   0.0026960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  24  39027   0.158073   0.267073   0.0651853   0.0029520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  25  39028   0.159973   0.263473   0.0634444   0.0030880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  26  39029   0.161673   0.259973   0.0616365   0.0030940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  27  39030   0.163474   0.256474   0.0598895   0.0029820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  28  39031   0.165174   0.252974   0.0583086   0.0027710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  29  39032   0.166874   0.249474   0.0569547   0.0025280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965   9  30  39033   0.168574   0.246074   0.0558227   0.0023240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10   1  39034   0.170175   0.242575   0.0548868   0.0021690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10   2  39035   0.171775   0.239175   0.0540599   0.0020780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10   3  39036   0.173375   0.235775   0.0532969   0.0020610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10   4  39037   0.174875   0.232475   0.0525050   0.0021130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10   5  39038   0.176376   0.229076   0.0516410   0.0022130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10   6  39039   0.177776   0.225776   0.0506461   0.0023420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10   7  39040   0.179176   0.222476   0.0495402   0.0024910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10   8  39041   0.180577   0.219277   0.0482652   0.0026440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10   9  39042   0.181877   0.215977   0.0468613   0.0027580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  10  39043   0.183077   0.212777   0.0453584   0.0028250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  11  39044   0.184277   0.209577   0.0438254   0.0028170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  12  39045   0.185478   0.206478   0.0423415   0.0027280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  13  39046   0.186578   0.203378   0.0409926   0.0025700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  14  39047   0.187578   0.200278   0.0398136   0.0023770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  15  39048   0.188479   0.197179   0.0388347   0.0021960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  16  39049   0.189379   0.194179   0.0380008   0.0020650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  17  39050   0.190279   0.191179   0.0372538   0.0020380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  18  39051   0.190979   0.188279   0.0364769   0.0021320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  19  39052   0.191680   0.185280   0.0355570   0.0023220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  20  39053   0.192280   0.182480   0.0344151   0.0025670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  21  39054   0.192780   0.179580   0.0330251   0.0028150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  22  39055   0.193180   0.176780   0.0314102   0.0029890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  23  39056   0.193481   0.174081   0.0296873   0.0030340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  24  39057   0.193781   0.171281   0.0279653   0.0029600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  25  39058   0.193881   0.168681   0.0263824   0.0027920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  26  39059   0.193982   0.165982   0.0249995   0.0025600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  27  39060   0.193982   0.163382   0.0238515   0.0023410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  28  39061   0.193882   0.160782   0.0228936   0.0021550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  29  39062   0.193682   0.158182   0.0220967   0.0020500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  30  39063   0.193383   0.155683   0.0213677   0.0020120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  10  31  39064   0.192983   0.153183   0.0206488   0.0020490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11   1  39065   0.192583   0.150683   0.0198489   0.0021500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11   2  39066   0.191983   0.148183   0.0189229   0.0022980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11   3  39067   0.191384   0.145784   0.0178330   0.0024720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11   4  39068   0.190684   0.143284   0.0165661   0.0026600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11   5  39069   0.189884   0.140884   0.0151192   0.0028290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11   6  39070   0.189085   0.138485   0.0135212   0.0029460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11   7  39071   0.188085   0.136085   0.0118283   0.0030070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11   8  39072   0.187085   0.133585   0.0101254   0.0029760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11   9  39073   0.185985   0.131185   0.0084944   0.0028720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  10  39074   0.184786   0.128786   0.0070095   0.0027010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  11  39075   0.183586   0.126386   0.0056856   0.0025300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  12  39076   0.182186   0.123886   0.0045137   0.0023960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  13  39077   0.180786   0.121486   0.0034517   0.0023450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  14  39078   0.179287   0.119087   0.0023748   0.0024170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  15  39079   0.177787   0.116587   0.0011839   0.0025690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  16  39080   0.176187   0.114087  -0.0002031   0.0027890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  17  39081   0.174488   0.111688  -0.0017960   0.0030030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  18  39082   0.172688   0.109188  -0.0035909   0.0031630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  19  39083   0.170888   0.106688  -0.0055008   0.0032180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  20  39084   0.168988   0.104188  -0.0074078   0.0031580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  21  39085   0.167089   0.101689  -0.0091917   0.0029950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  22  39086   0.165089   0.099189  -0.0107756   0.0027550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  23  39087   0.162989   0.096689  -0.0121046   0.0025040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  24  39088   0.160889   0.094189  -0.0132025   0.0022780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  25  39089   0.158690   0.091690  -0.0141004   0.0021090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  26  39090   0.156490   0.089290  -0.0148543   0.0020130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  27  39091   0.154190   0.086790  -0.0155513   0.0019930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  28  39092   0.151791   0.084291  -0.0162632   0.0020310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  29  39093   0.149391   0.081891  -0.0170511   0.0021330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  11  30  39094   0.146991   0.079391  -0.0179590   0.0022770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12   1  39095   0.144491   0.076991  -0.0190180   0.0024200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12   2  39096   0.141892   0.074592  -0.0202059   0.0025520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12   3  39097   0.139392   0.072192  -0.0215118   0.0026430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12   4  39098   0.136692   0.069792  -0.0228947   0.0026930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12   5  39099   0.134092   0.067392  -0.0242847   0.0026540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12   6  39100   0.131393   0.065093  -0.0255866   0.0025450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12   7  39101   0.128693   0.062793  -0.0267505   0.0023540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12   8  39102   0.125893   0.060493  -0.0277014   0.0021360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12   9  39103   0.123094   0.058294  -0.0284294   0.0019380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  10  39104   0.120294   0.056094  -0.0290053   0.0018000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  11  39105   0.117394   0.053894  -0.0294892   0.0017900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  12  39106   0.114494   0.051694  -0.0300331   0.0019040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  13  39107   0.111595   0.049595  -0.0307331   0.0021010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  14  39108   0.108695   0.047495  -0.0316470   0.0023160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  15  39109   0.105695   0.045495  -0.0327549   0.0024770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  16  39110   0.102695   0.043495  -0.0339698   0.0025440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  17  39111   0.099796   0.041496  -0.0352168   0.0025120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  18  39112   0.096796   0.039596  -0.0363817   0.0023940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  19  39113   0.093796   0.037696  -0.0373936   0.0022110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  20  39114   0.090797   0.035897  -0.0382055   0.0020220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  21  39115   0.087697   0.034097  -0.0388525   0.0018470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  22  39116   0.084697   0.032397  -0.0393354   0.0017180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  23  39117   0.081697   0.030697  -0.0397103   0.0016440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  24  39118   0.078698   0.029098  -0.0400582   0.0016530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  25  39119   0.075698   0.027598  -0.0404491   0.0017410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  26  39120   0.072698   0.026098  -0.0409691   0.0018860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  27  39121   0.069798   0.024698  -0.0416350   0.0020490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  28  39122   0.066799   0.023399  -0.0424829   0.0022260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  29  39123   0.063899   0.022099  -0.0434948   0.0023950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  30  39124   0.060999   0.020899  -0.0446628   0.0025260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1965  12  31  39125   0.058100   0.019800  -0.0459337   0.0026050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1   1  39126   0.055200   0.018800  -0.0472656   0.0026390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1   2  39127   0.052400   0.017900  -0.0472975   0.0025960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1   3  39128   0.049600   0.017000  -0.0472524   0.0024830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1   4  39129   0.046801   0.016201  -0.0470674   0.0023100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1   5  39130   0.044101   0.015501  -0.0466903   0.0021390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1   6  39131   0.041301   0.014901  -0.0461732   0.0020210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1   7  39132   0.038602   0.014302  -0.0455791   0.0020120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1   8  39133   0.036002   0.013902  -0.0450500   0.0021320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1   9  39134   0.033302   0.013502  -0.0446960   0.0023620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  10  39135   0.030702   0.013102  -0.0445859   0.0026160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  11  39136   0.028103   0.012903  -0.0447328   0.0028340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  12  39137   0.025503   0.012703  -0.0450377   0.0029360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  13  39138   0.023003   0.012603  -0.0453816   0.0029220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  14  39139   0.020403   0.012503  -0.0456636   0.0027970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  15  39140   0.017904   0.012504  -0.0457715   0.0025910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  16  39141   0.015404   0.012604  -0.0456584   0.0023710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  17  39142   0.012904   0.012704  -0.0453303   0.0021670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  18  39143   0.010505   0.012805  -0.0448272   0.0020080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  19  39144   0.008005   0.013005  -0.0441862   0.0019110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  20  39145   0.005605   0.013305  -0.0434841   0.0018860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  21  39146   0.003105   0.013605  -0.0427900   0.0019280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  22  39147   0.000706   0.013906  -0.0421799   0.0020300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  23  39148  -0.001694   0.014206  -0.0416848   0.0021750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  24  39149  -0.004094   0.014606  -0.0413557   0.0023390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  25  39150  -0.006494   0.015006  -0.0411807   0.0024980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  26  39151  -0.008993   0.015407  -0.0411616   0.0026400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  27  39152  -0.011393   0.015907  -0.0412555   0.0027290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  28  39153  -0.013793   0.016407  -0.0414214   0.0027750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  29  39154  -0.016292   0.016908  -0.0416053   0.0027730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  30  39155  -0.018692   0.017408  -0.0417583   0.0027030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   1  31  39156  -0.021192   0.017908  -0.0418152   0.0025830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2   1  39157  -0.023592   0.018508  -0.0417281   0.0024320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2   2  39158  -0.026091   0.019009  -0.0414980   0.0023070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2   3  39159  -0.028591   0.019609  -0.0411809   0.0022580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2   4  39160  -0.031091   0.020209  -0.0408748   0.0023350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2   5  39161  -0.033591   0.020909  -0.0407128   0.0025490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2   6  39162  -0.036090   0.021510  -0.0407977   0.0028280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2   7  39163  -0.038690   0.022210  -0.0411746   0.0030970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2   8  39164  -0.041190   0.022910  -0.0417695   0.0032600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2   9  39165  -0.043789   0.023611  -0.0424654   0.0032890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  10  39166  -0.046289   0.024411  -0.0431173   0.0031730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  11  39167  -0.048889   0.025111  -0.0435872   0.0029450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  12  39168  -0.051489   0.025911  -0.0438132   0.0026760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  13  39169  -0.053988   0.026712  -0.0437631   0.0024190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  14  39170  -0.056588   0.027512  -0.0434790   0.0022130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  15  39171  -0.059188   0.028312  -0.0430219   0.0020660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  16  39172  -0.061688   0.029212  -0.0424558   0.0019930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  17  39173  -0.064187   0.030113  -0.0418527   0.0019920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  18  39174  -0.066687   0.031013  -0.0412697   0.0020320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  19  39175  -0.069187   0.031913  -0.0407526   0.0021290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  20  39176  -0.071686   0.032814  -0.0403465   0.0022620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  21  39177  -0.074086   0.033714  -0.0400874   0.0023870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  22  39178  -0.076486   0.034714  -0.0399423   0.0025070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  23  39179  -0.078786   0.035714  -0.0398872   0.0025640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  24  39180  -0.081185   0.036715  -0.0398701   0.0025830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  25  39181  -0.083485   0.037715  -0.0398430   0.0025410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  26  39182  -0.085685   0.038715  -0.0397540   0.0024530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  27  39183  -0.087885   0.039815  -0.0395519   0.0023290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   2  28  39184  -0.090084   0.040816  -0.0392028   0.0021920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3   1  39185  -0.092184   0.041916  -0.0387397   0.0020680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3   2  39186  -0.094284   0.043016  -0.0381796   0.0020060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3   3  39187  -0.096383   0.044217  -0.0375985   0.0020530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3   4  39188  -0.098383   0.045317  -0.0371384   0.0022300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3   5  39189  -0.100283   0.046517  -0.0369144   0.0025260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3   6  39190  -0.102183   0.047717  -0.0370243   0.0028620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3   7  39191  -0.104082   0.049018  -0.0374522   0.0031470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3   8  39192  -0.105882   0.050218  -0.0380931   0.0033000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3   9  39193  -0.107682   0.051518  -0.0388050   0.0032870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  10  39194  -0.109382   0.052918  -0.0394289   0.0031310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  11  39195  -0.111081   0.054219  -0.0398578   0.0028910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  12  39196  -0.112781   0.055619  -0.0400267   0.0026390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  13  39197  -0.114381   0.057019  -0.0399596   0.0024100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  14  39198  -0.115980   0.058420  -0.0397016   0.0022660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  15  39199  -0.117480   0.059920  -0.0393305   0.0021860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  16  39200  -0.118980   0.061420  -0.0389094   0.0021840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  17  39201  -0.120480   0.063020  -0.0385313   0.0022610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  18  39202  -0.121879   0.064521  -0.0382572   0.0023790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  19  39203  -0.123279   0.066121  -0.0381291   0.0025390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  20  39204  -0.124679   0.067821  -0.0381580   0.0026980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  21  39205  -0.126079   0.069521  -0.0383499   0.0028510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  22  39206  -0.127478   0.071222  -0.0386658   0.0029640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  23  39207  -0.128778   0.072922  -0.0390578   0.0030090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  24  39208  -0.130078   0.074722  -0.0394807   0.0029970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  25  39209  -0.131377   0.076523  -0.0398586   0.0029290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  26  39210  -0.132677   0.078423  -0.0401325   0.0028010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  27  39211  -0.133977   0.080323  -0.0402724   0.0026470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  28  39212  -0.135277   0.082223  -0.0402493   0.0025020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  29  39213  -0.136576   0.084224  -0.0401132   0.0024070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  30  39214  -0.137876   0.086224  -0.0399131   0.0024010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   3  31  39215  -0.139176   0.088224  -0.0397550   0.0025040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4   1  39216  -0.140375   0.090225  -0.0397789   0.0027320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4   2  39217  -0.141675   0.092325  -0.0400538   0.0030250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4   3  39218  -0.142975   0.094425  -0.0406388   0.0033170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4   4  39219  -0.144175   0.096525  -0.0414887   0.0035220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4   5  39220  -0.145474   0.098626  -0.0424526   0.0035780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4   6  39221  -0.146674   0.100826  -0.0433985   0.0034700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4   7  39222  -0.147874   0.102926  -0.0441794   0.0032460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4   8  39223  -0.149074   0.105126  -0.0446923   0.0029670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4   9  39224  -0.150273   0.107327  -0.0449192   0.0027040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  10  39225  -0.151473   0.109427  -0.0449321   0.0025070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  11  39226  -0.152573   0.111627  -0.0447820   0.0023980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  12  39227  -0.153672   0.113828  -0.0445679   0.0023780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  13  39228  -0.154772   0.116028  -0.0443738   0.0024350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  14  39229  -0.155772   0.118128  -0.0442667   0.0025500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  15  39230  -0.156772   0.120328  -0.0443066   0.0027140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  16  39231  -0.157771   0.122429  -0.0445095   0.0028730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  17  39232  -0.158771   0.124529  -0.0448795   0.0030340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  18  39233  -0.159571   0.126729  -0.0453774   0.0031540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  19  39234  -0.160471   0.128829  -0.0459803   0.0032120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  20  39235  -0.161270   0.130830  -0.0465982   0.0032040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  21  39236  -0.161970   0.132930  -0.0471831   0.0031240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  22  39237  -0.162670   0.134930  -0.0476450   0.0029910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  23  39238  -0.163269   0.137031  -0.0479519   0.0028100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  24  39239  -0.163769   0.138931  -0.0480748   0.0026200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  25  39240  -0.164269   0.140931  -0.0480247   0.0024720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  26  39241  -0.164669   0.142931  -0.0478666   0.0024170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  27  39242  -0.165068   0.144832  -0.0477145   0.0024690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  28  39243  -0.165368   0.146732  -0.0476714   0.0026400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  29  39244  -0.165668   0.148632  -0.0478323   0.0028830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   4  30  39245  -0.165768   0.150432  -0.0482652   0.0031610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5   1  39246  -0.165867   0.152233  -0.0489601   0.0033950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5   2  39247  -0.165967   0.154033  -0.0498270   0.0035060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5   3  39248  -0.165967   0.155833  -0.0507429   0.0034800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5   4  39249  -0.165866   0.157634  -0.0515498   0.0033140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5   5  39250  -0.165766   0.159334  -0.0521497   0.0030570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5   6  39251  -0.165566   0.161034  -0.0524656   0.0027680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5   7  39252  -0.165366   0.162734  -0.0525196   0.0025210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5   8  39253  -0.165065   0.164435  -0.0523545   0.0023530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5   9  39254  -0.164665   0.166035  -0.0520774   0.0022790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  10  39255  -0.164265   0.167735  -0.0517613   0.0022910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  11  39256  -0.163765   0.169335  -0.0514922   0.0023600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  12  39257  -0.163264   0.171036  -0.0513161   0.0024750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  13  39258  -0.162664   0.172636  -0.0512580   0.0026110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  14  39259  -0.162064   0.174236  -0.0513469   0.0027350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  15  39260  -0.161463   0.175937  -0.0515298   0.0028250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  16  39261  -0.160663   0.177537  -0.0518027   0.0028920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  17  39262  -0.159963   0.179237  -0.0521036   0.0028890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  18  39263  -0.159163   0.180837  -0.0523685   0.0028190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  19  39264  -0.158362   0.182538  -0.0525374   0.0026790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  20  39265  -0.157462   0.184238  -0.0525193   0.0024770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  21  39266  -0.156562   0.186038  -0.0523062   0.0022780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  22  39267  -0.155662   0.187738  -0.0518941   0.0020980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  23  39268  -0.154661   0.189539  -0.0513370   0.0019950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  24  39269  -0.153661   0.191339  -0.0507399   0.0020090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  25  39270  -0.152661   0.193139  -0.0502118   0.0021330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  26  39271  -0.151660   0.195040  -0.0498537   0.0023390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  27  39272  -0.150560   0.196940  -0.0497096   0.0025640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  28  39273  -0.149460   0.198940  -0.0497915   0.0027690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  29  39274  -0.148360   0.200940  -0.0500394   0.0028870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  30  39275  -0.147259   0.202941  -0.0503433   0.0028810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   5  31  39276  -0.146159   0.204941  -0.0505772   0.0027470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6   1  39277  -0.145059   0.207041  -0.0506241   0.0025140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6   2  39278  -0.143859   0.209241  -0.0504090   0.0022350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6   3  39279  -0.142758   0.211442  -0.0499289   0.0019710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6   4  39280  -0.141658   0.213642  -0.0491928   0.0017690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6   5  39281  -0.140458   0.215942  -0.0483057   0.0016640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6   6  39282  -0.139357   0.218243  -0.0473596   0.0016380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6   7  39283  -0.138157   0.220543  -0.0464365   0.0017080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6   8  39284  -0.137057   0.222943  -0.0456024   0.0018210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6   9  39285  -0.135857   0.225343  -0.0449083   0.0019730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  10  39286  -0.134756   0.227744  -0.0443692   0.0021280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  11  39287  -0.133556   0.230244  -0.0439771   0.0022630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  12  39288  -0.132456   0.232744  -0.0436930   0.0023610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  13  39289  -0.131256   0.235244  -0.0434809   0.0024060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  14  39290  -0.130155   0.237745  -0.0433048   0.0024010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  15  39291  -0.129055   0.240345  -0.0430717   0.0023120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  16  39292  -0.127855   0.242845  -0.0427286   0.0021740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  17  39293  -0.126754   0.245446  -0.0422175   0.0019920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  18  39294  -0.125554   0.248046  -0.0415244   0.0018180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  19  39295  -0.124454   0.250546  -0.0406833   0.0016950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  20  39296  -0.123254   0.253146  -0.0397702   0.0016780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  21  39297  -0.122153   0.255647  -0.0389001   0.0017820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  22  39298  -0.120953   0.258247  -0.0381850   0.0019810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  23  39299  -0.119753   0.260747  -0.0376959   0.0022110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  24  39300  -0.118652   0.263148  -0.0374168   0.0024100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  25  39301  -0.117452   0.265648  -0.0373057   0.0025310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  26  39302  -0.116252   0.268048  -0.0372476   0.0025310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  27  39303  -0.115052   0.270448  -0.0371385   0.0024110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  28  39304  -0.113851   0.272749  -0.0368474   0.0021960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  29  39305  -0.112551   0.275049  -0.0363342   0.0019430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   6  30  39306  -0.111351   0.277349  -0.0355551   0.0016830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7   1  39307  -0.110151   0.279549  -0.0345360   0.0014810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7   2  39308  -0.108850   0.281650  -0.0333529   0.0013460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7   3  39309  -0.107550   0.283750  -0.0320668   0.0012870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7   4  39310  -0.106250   0.285850  -0.0307727   0.0013170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7   5  39311  -0.104949   0.287851  -0.0295406   0.0014070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7   6  39312  -0.103649   0.289751  -0.0284195   0.0015330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7   7  39313  -0.102249   0.291651  -0.0274204   0.0016590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7   8  39314  -0.100949   0.293451  -0.0265513   0.0017690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7   9  39315  -0.099548   0.295152  -0.0257662   0.0018430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  10  39316  -0.098148   0.296852  -0.0250311   0.0018780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  11  39317  -0.096748   0.298452  -0.0243130   0.0018570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  12  39318  -0.095348   0.300052  -0.0235459   0.0017890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  13  39319  -0.093847   0.301553  -0.0226818   0.0016670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  14  39320  -0.092447   0.303053  -0.0216747   0.0015040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  15  39321  -0.090947   0.304453  -0.0204966   0.0013310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  16  39322  -0.089546   0.305754  -0.0191785   0.0012040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  17  39323  -0.088046   0.307154  -0.0177544   0.0011680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  18  39324  -0.086546   0.308354  -0.0163753   0.0012670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  19  39325  -0.085046   0.309554  -0.0151391   0.0014770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  20  39326  -0.083445   0.310755  -0.0141720   0.0017660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  21  39327  -0.081945   0.311955  -0.0134869   0.0020450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  22  39328  -0.080345   0.313055  -0.0130508   0.0022340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  23  39329  -0.078845   0.314055  -0.0127287   0.0022860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  24  39330  -0.077244   0.315156  -0.0123956   0.0022080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  25  39331  -0.075744   0.316156  -0.0119185   0.0020140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  26  39332  -0.074144   0.317056  -0.0112254   0.0017780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  27  39333  -0.072543   0.318057  -0.0102953   0.0015460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  28  39334  -0.070943   0.318957  -0.0091642   0.0013830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  29  39335  -0.069343   0.319857  -0.0078951   0.0012830   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  30  39336  -0.067643   0.320757  -0.0065580   0.0012580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   7  31  39337  -0.066042   0.321658  -0.0052469   0.0013120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8   1  39338  -0.064442   0.322458  -0.0040228   0.0014290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8   2  39339  -0.062742   0.323258  -0.0029396   0.0015890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8   3  39340  -0.061142   0.324058  -0.0020155   0.0017540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8   4  39341  -0.059441   0.324859  -0.0012634   0.0019190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8   5  39342  -0.057741   0.325659  -0.0006523   0.0020510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8   6  39343  -0.056141   0.326359  -0.0001492   0.0021240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8   7  39344  -0.054440   0.327160   0.0002999   0.0021500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8   8  39345  -0.052740   0.327860   0.0007500   0.0021200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8   9  39346  -0.051040   0.328560   0.0012671   0.0020300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  10  39347  -0.049340   0.329160   0.0018832   0.0019130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  11  39348  -0.047639   0.329861   0.0026273   0.0017780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  12  39349  -0.045939   0.330461   0.0035114   0.0016610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  13  39350  -0.044239   0.331061   0.0044726   0.0016000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  14  39351  -0.042539   0.331561   0.0054427   0.0016610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  15  39352  -0.040838   0.332162   0.0062848   0.0018550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  16  39353  -0.039138   0.332662   0.0068869   0.0021550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  17  39354  -0.037438   0.333162   0.0071550   0.0024780   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  18  39355  -0.035737   0.333563   0.0071321   0.0027400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  19  39356  -0.034037   0.334063   0.0069012   0.0028730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  20  39357  -0.032337   0.334463   0.0066223   0.0028370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  21  39358  -0.030637   0.334763   0.0064454   0.0026680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  22  39359  -0.028936   0.335064   0.0065045   0.0024170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  23  39360  -0.027136   0.335364   0.0068037   0.0021590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  24  39361  -0.025436   0.335564   0.0073488   0.0019410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  25  39362  -0.023736   0.335764   0.0080629   0.0018060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  26  39363  -0.022035   0.335965   0.0088770   0.0017610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  27  39364  -0.020335   0.336065   0.0097021   0.0017910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  28  39365  -0.018635   0.336165   0.0104632   0.0018880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  29  39366  -0.016934   0.336166   0.0111023   0.0020310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  30  39367  -0.015234   0.336166   0.0115844   0.0021850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   8  31  39368  -0.013434   0.336066   0.0119025   0.0023460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9   1  39369  -0.011734   0.335966   0.0120817   0.0024690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9   2  39370  -0.010033   0.335867   0.0121718   0.0025430   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9   3  39371  -0.008233   0.335667   0.0122069   0.0025580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9   4  39372  -0.006533   0.335467   0.0122560   0.0025220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9   5  39373  -0.004733   0.335167   0.0123691   0.0024240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9   6  39374  -0.003032   0.334868   0.0125902   0.0022990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9   7  39375  -0.001232   0.334468   0.0129573   0.0021570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9   8  39376   0.000568   0.334068   0.0134634   0.0020250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9   9  39377   0.002369   0.333569   0.0140816   0.0019410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  10  39378   0.004169   0.333069   0.0147407   0.0019480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  11  39379   0.005969   0.332569   0.0153248   0.0020770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  12  39380   0.007869   0.331969   0.0157249   0.0023400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  13  39381   0.009670   0.331370   0.0158170   0.0026720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  14  39382   0.011570   0.330670   0.0155641   0.0029950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  15  39383   0.013470   0.329970   0.0150322   0.0032250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  16  39384   0.015271   0.329271   0.0143624   0.0032740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  17  39385   0.017171   0.328471   0.0137245   0.0031540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  18  39386   0.019171   0.327671   0.0132896   0.0028920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  19  39387   0.021071   0.326771   0.0131367   0.0025930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  20  39388   0.022972   0.325972   0.0132728   0.0023250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  21  39389   0.024972   0.324972   0.0136489   0.0021310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  22  39390   0.026972   0.324072   0.0141560   0.0020520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  23  39391   0.028872   0.323072   0.0146932   0.0020680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  24  39392   0.030873   0.322073   0.0151833   0.0021620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  25  39393   0.032873   0.320973   0.0155424   0.0023080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  26  39394   0.034873   0.319873   0.0157395   0.0024810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  27  39395   0.036874   0.318774   0.0157596   0.0026660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  28  39396   0.038874   0.317674   0.0156147   0.0028090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  29  39397   0.040874   0.316474   0.0153358   0.0029190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966   9  30  39398   0.042874   0.315274   0.0149770   0.0029700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10   1  39399   0.044875   0.314075   0.0146071   0.0029570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10   2  39400   0.046875   0.312775   0.0142732   0.0028730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10   3  39401   0.048875   0.311575   0.0140553   0.0027450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10   4  39402   0.050775   0.310175   0.0139804   0.0025850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10   5  39403   0.052776   0.308876   0.0140735   0.0024330   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10   6  39404   0.054676   0.307576   0.0143007   0.0023020   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10   7  39405   0.056676   0.306176   0.0146348   0.0022460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10   8  39406   0.058577   0.304777   0.0149629   0.0023060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10   9  39407   0.060477   0.303277   0.0151630   0.0024840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  10  39408   0.062377   0.301877   0.0151421   0.0027600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  11  39409   0.064177   0.300377   0.0148102   0.0030740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  12  39410   0.066078   0.298878   0.0141914   0.0033380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  13  39411   0.067878   0.297278   0.0133595   0.0034790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  14  39412   0.069578   0.295778   0.0124636   0.0034510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  15  39413   0.071378   0.294178   0.0117037   0.0032470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  16  39414   0.073079   0.292579   0.0111848   0.0029610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  17  39415   0.074779   0.290979   0.0109669   0.0026610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  18  39416   0.076379   0.289279   0.0110311   0.0024150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  19  39417   0.077980   0.287580   0.0112912   0.0022740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  20  39418   0.079580   0.285880   0.0116353   0.0022440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  21  39419   0.081080   0.284180   0.0119634   0.0023050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  22  39420   0.082580   0.282380   0.0121855   0.0024390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  23  39421   0.084081   0.280581   0.0122647   0.0025970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  24  39422   0.085481   0.278781   0.0121778   0.0027650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  25  39423   0.086881   0.276981   0.0119309   0.0029060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  26  39424   0.088181   0.275081   0.0115490   0.0030200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  27  39425   0.089582   0.273282   0.0110981   0.0030710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  28  39426   0.090782   0.271282   0.0106082   0.0030680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  29  39427   0.092082   0.269382   0.0101634   0.0029910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  30  39428   0.093383   0.267383   0.0098245   0.0028700   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  10  31  39429   0.094583   0.265383   0.0096156   0.0027160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11   1  39430   0.095783   0.263383   0.0095847   0.0025500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11   2  39431   0.096983   0.261383   0.0096948   0.0024290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11   3  39432   0.098084   0.259284   0.0098940   0.0023670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11   4  39433   0.099284   0.257184   0.0100971   0.0024130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11   5  39434   0.100384   0.255084   0.0102112   0.0025660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11   6  39435   0.101584   0.252884   0.0101233   0.0028140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11   7  39436   0.102685   0.250785   0.0097554   0.0031060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11   8  39437   0.103785   0.248585   0.0090946   0.0033870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11   9  39438   0.104885   0.246385   0.0081907   0.0035810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  10  39439   0.105986   0.244186   0.0071708   0.0036200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  11  39440   0.107086   0.241986   0.0061959   0.0034950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  12  39441   0.108186   0.239786   0.0054160   0.0032390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  13  39442   0.109286   0.237586   0.0049182   0.0029230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  14  39443   0.110287   0.235287   0.0047423   0.0026300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  15  39444   0.111387   0.233087   0.0048194   0.0024130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  16  39445   0.112487   0.230787   0.0050695   0.0023070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  17  39446   0.113487   0.228587   0.0053697   0.0023060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  18  39447   0.114488   0.226388   0.0056108   0.0023930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  19  39448   0.115488   0.224188   0.0057589   0.0025150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  20  39449   0.116488   0.221988   0.0057660   0.0026610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  21  39450   0.117489   0.219789   0.0056201   0.0027980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  22  39451   0.118389   0.217589   0.0053613   0.0028920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  23  39452   0.119289   0.215389   0.0050224   0.0029480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  24  39453   0.120189   0.213289   0.0046755   0.0029360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  25  39454   0.120990   0.211190   0.0043626   0.0028510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  26  39455   0.121790   0.209090   0.0041728   0.0027190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  27  39456   0.122590   0.206990   0.0041389   0.0025450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  28  39457   0.123290   0.204990   0.0042790   0.0023540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  29  39458   0.123991   0.202991   0.0046021   0.0021860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  11  30  39459   0.124591   0.201091   0.0050662   0.0020800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12   1  39460   0.125091   0.199191   0.0056014   0.0020680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12   2  39461   0.125592   0.197292   0.0060735   0.0021750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12   3  39462   0.125992   0.195492   0.0063906   0.0023740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12   4  39463   0.126292   0.193792   0.0064877   0.0026380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12   5  39464   0.126592   0.192092   0.0063069   0.0028980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12   6  39465   0.126693   0.190493   0.0058930   0.0030940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12   7  39466   0.126793   0.188893   0.0053481   0.0031740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12   8  39467   0.126793   0.187293   0.0047822   0.0031240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12   9  39468   0.126694   0.185894   0.0043324   0.0029470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  10  39469   0.126494   0.184494   0.0041055   0.0027010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  11  39470   0.126194   0.183094   0.0041146   0.0024550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  12  39471   0.125894   0.181794   0.0043667   0.0022350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  13  39472   0.125395   0.180595   0.0047919   0.0021140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  14  39473   0.124795   0.179395   0.0052840   0.0021000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  15  39474   0.124095   0.178295   0.0057531   0.0021650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  16  39475   0.123395   0.177295   0.0061162   0.0022880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  17  39476   0.122496   0.176296   0.0063514   0.0024240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  18  39477   0.121596   0.175296   0.0064495   0.0025550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  19  39478   0.120496   0.174396   0.0064306   0.0026580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  20  39479   0.119397   0.173497   0.0063297   0.0027040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  21  39480   0.118097   0.172697   0.0062199   0.0026960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  22  39481   0.116797   0.171897   0.0061480   0.0026290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  23  39482   0.115397   0.171097   0.0061711   0.0024970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  24  39483   0.113998   0.170398   0.0063502   0.0023300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  25  39484   0.112398   0.169698   0.0067094   0.0021190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  26  39485   0.110798   0.169098   0.0072815   0.0019230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  27  39486   0.109098   0.168498   0.0080286   0.0017740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  28  39487   0.107399   0.167899   0.0088837   0.0017240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  29  39488   0.105599   0.167299   0.0097229   0.0017870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  30  39489   0.103699   0.166699   0.0104540   0.0019560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1966  12  31  39490   0.101800   0.166200   0.0109891   0.0021800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1   1  39491   0.099900   0.165700   0.0112652   0.0024240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1   2  39492   0.097900   0.165200   0.0113344   0.0026120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1   3  39493   0.095900   0.164700   0.0112605   0.0026950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1   4  39494   0.093901   0.164301   0.0111796   0.0026440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1   5  39495   0.091901   0.163801   0.0112018   0.0024840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1   6  39496   0.089801   0.163401   0.0114269   0.0022380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1   7  39497   0.087801   0.163001   0.0119130   0.0019930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1   8  39498   0.085702   0.162502   0.0126181   0.0017770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1   9  39499   0.083602   0.162102   0.0135003   0.0016650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  10  39500   0.081602   0.161702   0.0144434   0.0016540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  11  39501   0.079503   0.161303   0.0153395   0.0017280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  12  39502   0.077403   0.160903   0.0161347   0.0018800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  13  39503   0.075403   0.160503   0.0167578   0.0020570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  14  39504   0.073403   0.160103   0.0172009   0.0022450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  15  39505   0.071404   0.159704   0.0174460   0.0024080   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  16  39506   0.069404   0.159304   0.0175692   0.0025270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  17  39507   0.067504   0.158904   0.0176013   0.0025790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  18  39508   0.065604   0.158504   0.0176204   0.0025730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  19  39509   0.063705   0.158105   0.0176636   0.0025120   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  20  39510   0.061905   0.157705   0.0177997   0.0023990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  21  39511   0.060105   0.157305   0.0180558   0.0022680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  22  39512   0.058406   0.157006   0.0184559   0.0021230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  23  39513   0.056706   0.156606   0.0189891   0.0020090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  24  39514   0.055006   0.156206   0.0196032   0.0019680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  25  39515   0.053406   0.155906   0.0202063   0.0020260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  26  39516   0.051807   0.155507   0.0206895   0.0022160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  27  39517   0.050307   0.155207   0.0209326   0.0024790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  28  39518   0.048807   0.154807   0.0208927   0.0027790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  29  39519   0.047407   0.154507   0.0205849   0.0030010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  30  39520   0.046008   0.154208   0.0201230   0.0030990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   1  31  39521   0.044708   0.153908   0.0196301   0.0030520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2   1  39522   0.043408   0.153608   0.0192562   0.0028670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2   2  39523   0.042209   0.153309   0.0191154   0.0026060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2   3  39524   0.041009   0.153009   0.0192405   0.0023140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2   4  39525   0.039909   0.152709   0.0196636   0.0020610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2   5  39526   0.038809   0.152409   0.0202818   0.0018990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2   6  39527   0.037710   0.152110   0.0210029   0.0018460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2   7  39528   0.036710   0.151910   0.0217270   0.0019000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2   8  39529   0.035810   0.151610   0.0223682   0.0020280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2   9  39530   0.034810   0.151310   0.0228463   0.0022110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  10  39531   0.033911   0.151111   0.0231324   0.0023950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  11  39532   0.033111   0.150811   0.0232316   0.0025720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  12  39533   0.032211   0.150611   0.0231837   0.0027060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  13  39534   0.031412   0.150312   0.0230288   0.0027930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  14  39535   0.030712   0.150112   0.0227979   0.0028180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  15  39536   0.029912   0.149812   0.0225831   0.0027750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  16  39537   0.029212   0.149612   0.0224442   0.0026860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  17  39538   0.028513   0.149313   0.0224013   0.0025680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  18  39539   0.027913   0.149013   0.0224905   0.0024440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  19  39540   0.027213   0.148813   0.0226776   0.0023390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  20  39541   0.026613   0.148513   0.0229637   0.0022800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  21  39542   0.026014   0.148214   0.0232769   0.0023040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  22  39543   0.025414   0.147914   0.0234940   0.0024520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  23  39544   0.024914   0.147614   0.0235131   0.0026980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  24  39545   0.024315   0.147315   0.0232553   0.0030230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  25  39546   0.023715   0.146915   0.0226624   0.0033230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  26  39547   0.023215   0.146615   0.0218165   0.0035230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  27  39548   0.022715   0.146215   0.0208627   0.0035440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   2  28  39549   0.022216   0.145916   0.0199778   0.0033800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3   1  39550   0.021616   0.145516   0.0193259   0.0031000   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3   2  39551   0.021116   0.145116   0.0189841   0.0027720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3   3  39552   0.020617   0.144717   0.0189602   0.0024770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3   4  39553   0.020117   0.144317   0.0191813   0.0022670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3   5  39554   0.019617   0.143917   0.0195705   0.0021640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3   6  39555   0.019217   0.143417   0.0199986   0.0021650   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3   7  39556   0.018718   0.143018   0.0203937   0.0022570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3   8  39557   0.018218   0.142618   0.0206579   0.0023910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3   9  39558   0.017718   0.142218   0.0207760   0.0025550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  10  39559   0.017318   0.141718   0.0207311   0.0027200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  11  39560   0.016819   0.141319   0.0205373   0.0028400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  12  39561   0.016319   0.140919   0.0202394   0.0029160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  13  39562   0.015819   0.140519   0.0199176   0.0029170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  14  39563   0.015420   0.140120   0.0196167   0.0028550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  15  39564   0.014920   0.139720   0.0194168   0.0027400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  16  39565   0.014420   0.139420   0.0193490   0.0025810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  17  39566   0.013920   0.139020   0.0194281   0.0024320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  18  39567   0.013421   0.138721   0.0196702   0.0022870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  19  39568   0.012921   0.138421   0.0200284   0.0021970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  20  39569   0.012421   0.138221   0.0204425   0.0021720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  21  39570   0.011921   0.137921   0.0208286   0.0022660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  22  39571   0.011422   0.137722   0.0210608   0.0024810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  23  39572   0.010922   0.137622   0.0210219   0.0027980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  24  39573   0.010422   0.137522   0.0206420   0.0031510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  25  39574   0.009923   0.137423   0.0199192   0.0034470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  26  39575   0.009323   0.137423   0.0189683   0.0036060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  27  39576   0.008823   0.137423   0.0179635   0.0035630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  28  39577   0.008223   0.137423   0.0170916   0.0033460   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  29  39578   0.007724   0.137524   0.0164847   0.0030300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  30  39579   0.007124   0.137724   0.0162039   0.0027200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   3  31  39580   0.006524   0.137924   0.0162100   0.0024840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4   1  39581   0.005924   0.138124   0.0163951   0.0023550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4   2  39582   0.005425   0.138425   0.0166503   0.0023440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4   3  39583   0.004825   0.138725   0.0168674   0.0024260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4   4  39584   0.004225   0.139125   0.0169686   0.0025590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4   5  39585   0.003626   0.139426   0.0169107   0.0027290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4   6  39586   0.003026   0.139826   0.0166918   0.0028860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4   7  39587   0.002526   0.140226   0.0163290   0.0030350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4   8  39588   0.002026   0.140626   0.0158391   0.0031260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4   9  39589   0.001527   0.141127   0.0152872   0.0031660   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  10  39590   0.001027   0.141627   0.0147294   0.0031300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  11  39591   0.000527   0.142127   0.0142475   0.0030250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  12  39592  -0.000073   0.142627   0.0138737   0.0028890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  13  39593  -0.000672   0.143128   0.0136568   0.0027340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  14  39594  -0.001272   0.143628   0.0135919   0.0025790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  15  39595  -0.001872   0.144128   0.0136671   0.0024520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  16  39596  -0.002471   0.144629   0.0138372   0.0023910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  17  39597  -0.003071   0.145129   0.0140253   0.0024310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  18  39598  -0.003671   0.145629   0.0141185   0.0025710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  19  39599  -0.004271   0.146129   0.0140186   0.0028250   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  20  39600  -0.004870   0.146630   0.0136268   0.0031470   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  21  39601  -0.005470   0.147130   0.0129169   0.0034540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  22  39602  -0.005970   0.147630   0.0119290   0.0036680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  23  39603  -0.006470   0.148130   0.0108062   0.0037160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  24  39604  -0.006969   0.148631   0.0097313   0.0035750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  25  39605  -0.007369   0.149031   0.0088865   0.0032870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  26  39606  -0.007669   0.149431   0.0083586   0.0029480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  27  39607  -0.007968   0.149832   0.0081687   0.0026350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  28  39608  -0.008268   0.150232   0.0082329   0.0024390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  29  39609  -0.008568   0.150632   0.0084380   0.0023620   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   4  30  39610  -0.008768   0.151032   0.0086512   0.0024090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5   1  39611  -0.008967   0.151433   0.0087763   0.0025300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5   2  39612  -0.009167   0.151833   0.0087594   0.0026870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5   3  39613  -0.009367   0.152133   0.0085926   0.0028450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5   4  39614  -0.009467   0.152433   0.0082677   0.0029790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5   5  39615  -0.009566   0.152734   0.0078299   0.0030690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5   6  39616  -0.009666   0.153034   0.0073290   0.0031030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5   7  39617  -0.009766   0.153334   0.0068251   0.0030640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5   8  39618  -0.009765   0.153635   0.0064013   0.0029640   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5   9  39619  -0.009765   0.153935   0.0061024   0.0028070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  10  39620  -0.009665   0.154235   0.0059776   0.0026320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  11  39621  -0.009665   0.154535   0.0060287   0.0024480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  12  39622  -0.009564   0.154836   0.0062508   0.0022970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  13  39623  -0.009364   0.155036   0.0066050   0.0022060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  14  39624  -0.009264   0.155336   0.0070091   0.0021910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  15  39625  -0.009064   0.155436   0.0073803   0.0022740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  16  39626  -0.008863   0.155637   0.0076204   0.0024520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  17  39627  -0.008663   0.155737   0.0076336   0.0027090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  18  39628  -0.008463   0.155937   0.0073847   0.0029770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  19  39629  -0.008162   0.156038   0.0068778   0.0032040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  20  39630  -0.007962   0.156138   0.0061990   0.0033100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  21  39631  -0.007662   0.156138   0.0055031   0.0032420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  22  39632  -0.007362   0.156238   0.0049483   0.0030240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  23  39633  -0.007061   0.156339   0.0046704   0.0026930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  24  39634  -0.006761   0.156339   0.0047366   0.0023600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  25  39635  -0.006461   0.156439   0.0051067   0.0020990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  26  39636  -0.006061   0.156539   0.0056878   0.0019510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  27  39637  -0.005760   0.156640   0.0063420   0.0019400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  28  39638  -0.005460   0.156740   0.0069661   0.0020160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  29  39639  -0.005160   0.156840   0.0074843   0.0021420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  30  39640  -0.004859   0.156941   0.0078694   0.0022760   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   5  31  39641  -0.004559   0.157141   0.0081396   0.0023790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6   1  39642  -0.004359   0.157341   0.0083067   0.0024480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6   2  39643  -0.004059   0.157541   0.0084418   0.0024630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6   3  39644  -0.003758   0.157742   0.0085920   0.0024070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6   4  39645  -0.003558   0.158042   0.0088381   0.0022910   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6   5  39646  -0.003358   0.158242   0.0092173   0.0021350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6   6  39647  -0.003157   0.158643   0.0097704   0.0019360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6   7  39648  -0.002957   0.158943   0.0105176   0.0017400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6   8  39649  -0.002757   0.159343   0.0114637   0.0015560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6   9  39650  -0.002657   0.159743   0.0125788   0.0014270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  10  39651  -0.002556   0.160144   0.0137630   0.0014010   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  11  39652  -0.002456   0.160644   0.0149241   0.0014740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  12  39653  -0.002356   0.161144   0.0159743   0.0016400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  13  39654  -0.002256   0.161644   0.0168124   0.0018820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  14  39655  -0.002255   0.162245   0.0173946   0.0021440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  15  39656  -0.002255   0.162745   0.0177177   0.0023690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  16  39657  -0.002255   0.163345   0.0178589   0.0025090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  17  39658  -0.002254   0.163946   0.0179350   0.0025040   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  18  39659  -0.002354   0.164646   0.0180801   0.0023750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  19  39660  -0.002454   0.165246   0.0184023   0.0021360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  20  39661  -0.002554   0.165946   0.0190024   0.0018440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  21  39662  -0.002653   0.166647   0.0198826   0.0015870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  22  39663  -0.002753   0.167347   0.0209847   0.0014190   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  23  39664  -0.002953   0.168047   0.0221829   0.0013870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  24  39665  -0.003053   0.168847   0.0233530   0.0014580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  25  39666  -0.003252   0.169548   0.0244242   0.0015990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  26  39667  -0.003452   0.170348   0.0253283   0.0017630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  27  39668  -0.003652   0.171048   0.0260845   0.0019100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  28  39669  -0.003851   0.171849   0.0267126   0.0020050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  29  39670  -0.004051   0.172649   0.0272747   0.0020520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   6  30  39671  -0.004251   0.173349   0.0278189   0.0020280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7   1  39672  -0.004451   0.174149   0.0284190   0.0019530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7   2  39673  -0.004650   0.174950   0.0291102   0.0018280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7   3  39674  -0.004950   0.175650   0.0299563   0.0016670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7   4  39675  -0.005150   0.176450   0.0309615   0.0014920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7   5  39676  -0.005350   0.177150   0.0321476   0.0013300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7   6  39677  -0.005649   0.177851   0.0334668   0.0012230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7   7  39678  -0.005849   0.178551   0.0348669   0.0011820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7   8  39679  -0.006049   0.179251   0.0362591   0.0012420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7   9  39680  -0.006348   0.179952   0.0375292   0.0014150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  10  39681  -0.006548   0.180652   0.0385834   0.0016560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  11  39682  -0.006748   0.181252   0.0393875   0.0019240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  12  39683  -0.006948   0.181952   0.0399287   0.0021630   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  13  39684  -0.007247   0.182553   0.0402848   0.0022860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  14  39685  -0.007447   0.183153   0.0405710   0.0022880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  15  39686  -0.007647   0.183653   0.0409341   0.0021550   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  16  39687  -0.007847   0.184153   0.0414762   0.0019280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  17  39688  -0.008046   0.184754   0.0422844   0.0016420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  18  39689  -0.008246   0.185154   0.0433655   0.0013750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  19  39690  -0.008446   0.185654   0.0446877   0.0011870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  20  39691  -0.008645   0.186055   0.0461338   0.0011220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  21  39692  -0.008845   0.186455   0.0475860   0.0011720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  22  39693  -0.008945   0.186855   0.0489411   0.0013090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  23  39694  -0.009145   0.187155   0.0501343   0.0014870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  24  39695  -0.009344   0.187456   0.0511484   0.0016710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  25  39696  -0.009544   0.187756   0.0520056   0.0018070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  26  39697  -0.009644   0.188056   0.0527447   0.0018940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  27  39698  -0.009844   0.188256   0.0534299   0.0019150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  28  39699  -0.009943   0.188557   0.0541260   0.0018720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  29  39700  -0.010143   0.188757   0.0548942   0.0017740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  30  39701  -0.010243   0.188857   0.0557813   0.0016390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   7  31  39702  -0.010342   0.189058   0.0568035   0.0014860   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8   1  39703  -0.010542   0.189158   0.0579866   0.0013510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8   2  39704  -0.010642   0.189358   0.0592808   0.0012490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8   3  39705  -0.010742   0.189458   0.0606479   0.0012110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8   4  39706  -0.010841   0.189559   0.0620181   0.0012570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8   5  39707  -0.010941   0.189559   0.0632762   0.0014240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8   6  39708  -0.011141   0.189659   0.0643164   0.0016900   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8   7  39709  -0.011241   0.189759   0.0650685   0.0019990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8   8  39710  -0.011340   0.189760   0.0655047   0.0022980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8   9  39711  -0.011440   0.189760   0.0656938   0.0024920   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  10  39712  -0.011640   0.189760   0.0657510   0.0025490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  11  39713  -0.011739   0.189761   0.0658381   0.0024420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  12  39714  -0.011839   0.189761   0.0660863   0.0022270   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  13  39715  -0.012039   0.189761   0.0665814   0.0019580   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  14  39716  -0.012139   0.189761   0.0673546   0.0016950   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  15  39717  -0.012338   0.189762   0.0683577   0.0015060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  16  39718  -0.012438   0.189662   0.0694859   0.0014260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  17  39719  -0.012638   0.189662   0.0706470   0.0014600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  18  39720  -0.012838   0.189662   0.0717242   0.0015880   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  19  39721  -0.013137   0.189563   0.0726433   0.0017600   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  20  39722  -0.013337   0.189563   0.0733815   0.0019540   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  21  39723  -0.013637   0.189463   0.0739366   0.0021090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  22  39724  -0.013836   0.189364   0.0743608   0.0022100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  23  39725  -0.014136   0.189364   0.0747189   0.0022530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  24  39726  -0.014536   0.189264   0.0750691   0.0022160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  25  39727  -0.014836   0.189164   0.0754882   0.0021170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  26  39728  -0.015235   0.189065   0.0760304   0.0019850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  27  39729  -0.015635   0.189065   0.0767155   0.0018220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  28  39730  -0.016035   0.188965   0.0775657   0.0016610   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  29  39731  -0.016434   0.188866   0.0785638   0.0015280   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  30  39732  -0.016934   0.188866   0.0796720   0.0014480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   8  31  39733  -0.017334   0.188766   0.0808221   0.0014490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9   1  39734  -0.017834   0.188666   0.0819303   0.0015440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9   2  39735  -0.018333   0.188567   0.0828874   0.0017490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9   3  39736  -0.018833   0.188567   0.0835826   0.0020500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9   4  39737  -0.019433   0.188467   0.0839707   0.0023720   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9   5  39738  -0.019933   0.188367   0.0840619   0.0026180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9   6  39739  -0.020532   0.188368   0.0839531   0.0027300   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9   7  39740  -0.021032   0.188268   0.0838422   0.0026530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9   8  39741  -0.021632   0.188268   0.0838804   0.0024390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9   9  39742  -0.022131   0.188169   0.0841855   0.0021350   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  10  39743  -0.022731   0.188169   0.0847917   0.0018400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  11  39744  -0.023231   0.188069   0.0856698   0.0016200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  12  39745  -0.023731   0.188069   0.0867040   0.0015150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  13  39746  -0.024330   0.187970   0.0877701   0.0015420   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  14  39747  -0.024830   0.187970   0.0887763   0.0016590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  15  39748  -0.025330   0.187870   0.0896104   0.0018500   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  16  39749  -0.025830   0.187870   0.0902486   0.0020730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  17  39750  -0.026329   0.187871   0.0906497   0.0022800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  18  39751  -0.026829   0.187871   0.0908849   0.0024310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  19  39752  -0.027229   0.187871   0.0910000   0.0025170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  20  39753  -0.027728   0.187872   0.0910662   0.0025210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  21  39754  -0.028128   0.187872   0.0911623   0.0024680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  22  39755  -0.028528   0.187872   0.0913385   0.0023530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  23  39756  -0.028928   0.187872   0.0916567   0.0021980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  24  39757  -0.029327   0.187973   0.0921248   0.0020490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  25  39758  -0.029627   0.187973   0.0927310   0.0019140   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  26  39759  -0.030027   0.188073   0.0934601   0.0018160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  27  39760  -0.030327   0.188173   0.0942563   0.0017970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  28  39761  -0.030626   0.188274   0.0950264   0.0018590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  29  39762  -0.030826   0.188374   0.0956836   0.0020260   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967   9  30  39763  -0.031126   0.188574   0.0961217   0.0023030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10   1  39764  -0.031325   0.188675   0.0962479   0.0026200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10   2  39765  -0.031625   0.188875   0.0960670   0.0029220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10   3  39766  -0.031825   0.189075   0.0956192   0.0031400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10   4  39767  -0.031925   0.189275   0.0950464   0.0031740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10   5  39768  -0.032124   0.189576   0.0945255   0.0030180   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10   6  39769  -0.032224   0.189776   0.0942277   0.0027310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10   7  39770  -0.032324   0.190076   0.0942608   0.0023940   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10   8  39771  -0.032424   0.190376   0.0946140   0.0021060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10   9  39772  -0.032523   0.190677   0.0952001   0.0019340   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  10  39773  -0.032623   0.191077   0.0958803   0.0019090   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  11  39774  -0.032623   0.191377   0.0965224   0.0020030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  12  39775  -0.032722   0.191778   0.0970296   0.0021810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  13  39776  -0.032722   0.192178   0.0973408   0.0023790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  14  39777  -0.032722   0.192578   0.0974549   0.0025680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  15  39778  -0.032722   0.192978   0.0973971   0.0027290   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  16  39779  -0.032721   0.193379   0.0972062   0.0028320   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  17  39780  -0.032621   0.193779   0.0969464   0.0028670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  18  39781  -0.032621   0.194279   0.0966865   0.0028230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  19  39782  -0.032621   0.194679   0.0965007   0.0027210   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  20  39783  -0.032520   0.195180   0.0964388   0.0025800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  21  39784  -0.032520   0.195580   0.0965260   0.0024360   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  22  39785  -0.032420   0.196080   0.0967612   0.0022990   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  23  39786  -0.032319   0.196581   0.0971153   0.0021930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  24  39787  -0.032219   0.196981   0.0975345   0.0021510   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  25  39788  -0.032119   0.197481   0.0979766   0.0021800   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  26  39789  -0.032119   0.197981   0.0983228   0.0023030   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  27  39790  -0.032018   0.198382   0.0985189   0.0025200   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  28  39791  -0.031918   0.198882   0.0984491   0.0028110   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  29  39792  -0.031718   0.199382   0.0980793   0.0031170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  30  39793  -0.031618   0.199782   0.0974114   0.0033820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  10  31  39794  -0.031517   0.200283   0.0965386   0.0035060   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11   1  39795  -0.031417   0.200683   0.0956507   0.0034390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11   2  39796  -0.031317   0.201183   0.0948999   0.0032170   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11   3  39797  -0.031116   0.201584   0.0944430   0.0028890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11   4  39798  -0.031016   0.202084   0.0943142   0.0025570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11   5  39799  -0.030816   0.202484   0.0944794   0.0023230   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11   6  39800  -0.030716   0.202884   0.0947995   0.0022310   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11   7  39801  -0.030615   0.203385   0.0951517   0.0022770   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11   8  39802  -0.030415   0.203785   0.0954048   0.0024100   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11   9  39803  -0.030315   0.204185   0.0954870   0.0025970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  10  39804  -0.030115   0.204585   0.0953931   0.0027790   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  11  39805  -0.030014   0.204986   0.0951223   0.0029240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  12  39806  -0.029814   0.205486   0.0947435   0.0030050   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  13  39807  -0.029714   0.205886   0.0943146   0.0030220   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  14  39808  -0.029513   0.206287   0.0939008   0.0029740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  15  39809  -0.029413   0.206787   0.0935659   0.0028570   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  16  39810  -0.029313   0.207187   0.0933821   0.0026960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  17  39811  -0.029113   0.207687   0.0933622   0.0025130   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  18  39812  -0.029012   0.208088   0.0935234   0.0023370   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  19  39813  -0.028912   0.208588   0.0938556   0.0021970   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  20  39814  -0.028812   0.209088   0.0943107   0.0020960   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  21  39815  -0.028711   0.209689   0.0948189   0.0020820   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  22  39816  -0.028611   0.210189   0.0952970   0.0021560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  23  39817  -0.028511   0.210689   0.0956492   0.0023240   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  24  39818  -0.028411   0.211289   0.0958164   0.0025520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  25  39819  -0.028410   0.211890   0.0957125   0.0028160   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  26  39820  -0.028310   0.212490   0.0953597   0.0030710   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  27  39821  -0.028310   0.213090   0.0947898   0.0032400   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  28  39822  -0.028310   0.213790   0.0941180   0.0032670   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  29  39823  -0.028209   0.214391   0.0934922   0.0031380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  11  30  39824  -0.028209   0.215091   0.0930673   0.0028750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12   1  39825  -0.028209   0.215791   0.0929415   0.0025560   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12   2  39826  -0.028308   0.216492   0.0931206   0.0022890   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12   3  39827  -0.028308   0.217292   0.0935128   0.0021410   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12   4  39828  -0.028308   0.217992   0.0939810   0.0021380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12   5  39829  -0.028408   0.218792   0.0943771   0.0022680   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12   6  39830  -0.028407   0.219493   0.0946043   0.0024750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12   7  39831  -0.028507   0.220293   0.0946154   0.0026690   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12   8  39832  -0.028607   0.221093   0.0944476   0.0028380   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12   9  39833  -0.028607   0.221893   0.0941488   0.0029490   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  10  39834  -0.028706   0.222694   0.0937729   0.0029930   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  11  39835  -0.028806   0.223494   0.0933641   0.0029730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  12  39836  -0.028806   0.224294   0.0930262   0.0028850   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  13  39837  -0.028905   0.225095   0.0927994   0.0027520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  14  39838  -0.029005   0.225895   0.0927206   0.0025840   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  15  39839  -0.029005   0.226695   0.0928127   0.0024150   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  16  39840  -0.029105   0.227495   0.0930519   0.0022730   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  17  39841  -0.029104   0.228296   0.0934290   0.0021750   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  18  39842  -0.029104   0.228996   0.0938572   0.0021530   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  19  39843  -0.029104   0.229796   0.0942744   0.0022070   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  20  39844  -0.029104   0.230496   0.0945935   0.0023480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  21  39845  -0.029103   0.231197   0.0947477   0.0025450   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  22  39846  -0.029003   0.231797   0.0946838   0.0027740   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  23  39847  -0.028903   0.232497   0.0943850   0.0029980   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  24  39848  -0.028802   0.233098   0.0939012   0.0031440   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  25  39849  -0.028702   0.233698   0.0933153   0.0031870   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  26  39850  -0.028602   0.234298   0.0927645   0.0030810   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  27  39851  -0.028402   0.234798   0.0923866   0.0028480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  28  39852  -0.028201   0.235399   0.0922758   0.0025480   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  29  39853  -0.028001   0.235899   0.0924700   0.0022520   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  30  39854  -0.027701   0.236299   0.0929241   0.0020390   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1967  12  31  39855  -0.027401   0.236799   0.0935273   0.0019590   0.000000   0.000000   0.030000   0.030000  0.0020000  0.0014000    0.004774    0.002000
+1968   1   1  39856  -0.027100   0.237200   0.0941515   0.0020150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1   2  39857  -0.026700   0.237500   0.0946476   0.0021840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1   3  39858  -0.026400   0.237900   0.0949628   0.0023760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1   4  39859  -0.025999   0.238201   0.0950949   0.0025520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1   5  39860  -0.025599   0.238501   0.0950691   0.0026680   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1   6  39861  -0.025099   0.238801   0.0949553   0.0027190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1   7  39862  -0.024699   0.239101   0.0948464   0.0026870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1   8  39863  -0.024198   0.239302   0.0947816   0.0026040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1   9  39864  -0.023698   0.239502   0.0948348   0.0024730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  10  39865  -0.023198   0.239702   0.0950239   0.0023250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  11  39866  -0.022698   0.239902   0.0953661   0.0021630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  12  39867  -0.022197   0.240103   0.0958722   0.0020220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  13  39868  -0.021697   0.240203   0.0964974   0.0019270   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  14  39869  -0.021197   0.240403   0.0971836   0.0018940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  15  39870  -0.020696   0.240504   0.0978607   0.0019590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  16  39871  -0.020196   0.240604   0.0984259   0.0021060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  17  39872  -0.019696   0.240704   0.0987931   0.0023400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  18  39873  -0.019196   0.240804   0.0989212   0.0026040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  19  39874  -0.018695   0.240905   0.0987694   0.0028540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  20  39875  -0.018195   0.241005   0.0984085   0.0030330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  21  39876  -0.017695   0.241105   0.0979227   0.0031070   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  22  39877  -0.017095   0.241205   0.0974289   0.0030500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  23  39878  -0.016594   0.241206   0.0970530   0.0028740   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  24  39879  -0.016094   0.241306   0.0968972   0.0026230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  25  39880  -0.015594   0.241406   0.0970014   0.0023630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  26  39881  -0.015093   0.241407   0.0973405   0.0021630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  27  39882  -0.014593   0.241507   0.0978167   0.0020880   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  28  39883  -0.014093   0.241507   0.0983108   0.0021350   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  29  39884  -0.013493   0.241607   0.0986910   0.0023030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  30  39885  -0.012992   0.241608   0.0988772   0.0025290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   1  31  39886  -0.012392   0.241608   0.0988233   0.0027440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2   1  39887  -0.011792   0.241708  -0.0014225   0.0029160   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2   2  39888  -0.011192   0.241708  -0.0018033   0.0030110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2   3  39889  -0.010591   0.241709  -0.0022262   0.0030220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2   4  39890  -0.009991   0.241709  -0.0026420   0.0029700   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2   5  39891  -0.009291   0.241709  -0.0029578   0.0028430   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2   6  39892  -0.008590   0.241710  -0.0031467   0.0026920   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2   7  39893  -0.007890   0.241710  -0.0031575   0.0025320   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2   8  39894  -0.007190   0.241610  -0.0030163   0.0023790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2   9  39895  -0.006390   0.241610  -0.0027592   0.0022770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  10  39896  -0.005689   0.241611  -0.0024110   0.0022300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  11  39897  -0.004889   0.241511  -0.0020569   0.0022560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  12  39898  -0.004089   0.241411  -0.0017757   0.0023790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  13  39899  -0.003288   0.241412  -0.0016645   0.0025930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  14  39900  -0.002388   0.241312  -0.0017924   0.0028600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  15  39901  -0.001588   0.241212  -0.0021962   0.0031330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  16  39902  -0.000688   0.241112  -0.0028470   0.0033340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  17  39903   0.000213   0.241013  -0.0036529   0.0034230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  18  39904   0.001113   0.240913  -0.0044537   0.0033420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  19  39905   0.002013   0.240713  -0.0050915   0.0031250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  20  39906   0.002913   0.240613  -0.0054834   0.0028210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  21  39907   0.003814   0.240414  -0.0055592   0.0025130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  22  39908   0.004814   0.240314  -0.0053390   0.0022600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  23  39909   0.005714   0.240114  -0.0049259   0.0021040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  24  39910   0.006615   0.240015  -0.0044087   0.0020850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  25  39911   0.007615   0.239815  -0.0039445   0.0021820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  26  39912   0.008515   0.239615  -0.0036184   0.0023640   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  27  39913   0.009515   0.239415  -0.0034892   0.0025580   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  28  39914   0.010416   0.239216  -0.0035430   0.0027310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   2  29  39915   0.011416   0.239016  -0.0037469   0.0028440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3   1  39916   0.012316   0.238816  -0.0040207   0.0028610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3   2  39917   0.013216   0.238616  -0.0042696   0.0028040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3   3  39918   0.014117   0.238417  -0.0044264   0.0026800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3   4  39919   0.015017   0.238217  -0.0044352   0.0025220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3   5  39920   0.015817   0.238017  -0.0042841   0.0023450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3   6  39921   0.016718   0.237818  -0.0039489   0.0021790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3   7  39922   0.017518   0.237618  -0.0034637   0.0020390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3   8  39923   0.018318   0.237418  -0.0028656   0.0019660   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3   9  39924   0.019018   0.237218  -0.0022314   0.0019710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  10  39925   0.019819   0.237019  -0.0016472   0.0020660   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  11  39926   0.020519   0.236919  -0.0012061   0.0022480   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  12  39927   0.021119   0.236719  -0.0009909   0.0025140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  13  39928   0.021819   0.236619  -0.0010667   0.0028200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  14  39929   0.022420   0.236420  -0.0014516   0.0031000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  15  39930   0.023020   0.236320  -0.0020604   0.0032750   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  16  39931   0.023520   0.236120  -0.0027572   0.0032900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  17  39932   0.024121   0.236021  -0.0033931   0.0031370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  18  39933   0.024621   0.235921  -0.0037979   0.0028590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  19  39934   0.025021   0.235821  -0.0039067   0.0025290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  20  39935   0.025521   0.235721  -0.0036916   0.0022430   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  21  39936   0.026022   0.235622  -0.0032494   0.0020740   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  22  39937   0.026422   0.235522  -0.0027042   0.0020490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  23  39938   0.026822   0.235422  -0.0021971   0.0021350   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  24  39939   0.027322   0.235422  -0.0018229   0.0023060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  25  39940   0.027723   0.235323  -0.0016397   0.0025200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  26  39941   0.028123   0.235223  -0.0016676   0.0027200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  27  39942   0.028523   0.235223  -0.0018824   0.0028770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  28  39943   0.029024   0.235124  -0.0022052   0.0029550   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  29  39944   0.029424   0.235024  -0.0025841   0.0029600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  30  39945   0.029924   0.235024  -0.0029299   0.0029000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   3  31  39946   0.030424   0.234924  -0.0031747   0.0027730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4   1  39947   0.030925   0.234825  -0.0032865   0.0026280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4   2  39948   0.031425   0.234825  -0.0032504   0.0024830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4   3  39949   0.032025   0.234725  -0.0030822   0.0023870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4   4  39950   0.032525   0.234625  -0.0028610   0.0023430   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4   5  39951   0.033226   0.234526  -0.0026099   0.0023590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4   6  39952   0.033826   0.234426  -0.0024157   0.0024470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4   7  39953   0.034426   0.234326  -0.0023445   0.0026260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4   8  39954   0.035127   0.234227  -0.0025064   0.0028930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4   9  39955   0.035827   0.234127  -0.0029812   0.0032340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  10  39956   0.036627   0.234027  -0.0037900   0.0035600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  11  39957   0.037327   0.233827  -0.0048909   0.0038260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  12  39958   0.038128   0.233728  -0.0062057   0.0039370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  13  39959   0.038928   0.233528  -0.0075355   0.0038710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  14  39960   0.039828   0.233328  -0.0087034   0.0036310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  15  39961   0.040628   0.233128  -0.0095752   0.0032960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  16  39962   0.041429   0.232829  -0.0101060   0.0029570   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  17  39963   0.042329   0.232629  -0.0103409   0.0027120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  18  39964   0.043129   0.232329  -0.0103977   0.0026080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  19  39965   0.044030   0.232030  -0.0104135   0.0026230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  20  39966   0.044830   0.231730  -0.0105074   0.0027560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  21  39967   0.045730   0.231330  -0.0107502   0.0029220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  22  39968   0.046530   0.231030  -0.0111580   0.0030800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  23  39969   0.047331   0.230631  -0.0117028   0.0031910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  24  39970   0.048131   0.230231  -0.0123257   0.0032230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  25  39971   0.048931   0.229831  -0.0129435   0.0031890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  26  39972   0.049731   0.229331  -0.0134983   0.0030900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  27  39973   0.050432   0.228832  -0.0139132   0.0029210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  28  39974   0.051132   0.228432  -0.0141370   0.0027140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  29  39975   0.051832   0.227832  -0.0141558   0.0024970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   4  30  39976   0.052433   0.227333  -0.0139667   0.0023100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5   1  39977   0.053033   0.226833  -0.0136115   0.0021690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5   2  39978   0.053633   0.226233  -0.0131363   0.0020940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5   3  39979   0.054133   0.225633  -0.0126342   0.0021060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5   4  39980   0.054634   0.225034  -0.0121850   0.0021900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5   5  39981   0.055034   0.224434  -0.0118608   0.0023640   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5   6  39982   0.055534   0.223734  -0.0117456   0.0026050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5   7  39983   0.055835   0.223135  -0.0118935   0.0028730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5   8  39984   0.056235   0.222435  -0.0123163   0.0031320   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5   9  39985   0.056535   0.221735  -0.0129491   0.0033130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  10  39986   0.056735   0.221035  -0.0136920   0.0033350   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  11  39987   0.057036   0.220336  -0.0143798   0.0031840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  12  39988   0.057236   0.219636  -0.0148336   0.0028970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  13  39989   0.057336   0.218836  -0.0149765   0.0025690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  14  39990   0.057536   0.218036  -0.0147993   0.0022850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  15  39991   0.057637   0.217337  -0.0144191   0.0021410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  16  39992   0.057737   0.216537  -0.0139539   0.0021530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  17  39993   0.057837   0.215737  -0.0135778   0.0022890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  18  39994   0.057938   0.214938  -0.0133726   0.0024970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  19  39995   0.057938   0.214138  -0.0133794   0.0026930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  20  39996   0.058038   0.213338  -0.0135613   0.0028410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  21  39997   0.058038   0.212438  -0.0138671   0.0029280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  22  39998   0.058039   0.211639  -0.0142019   0.0029300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  23  39999   0.058039   0.210839  -0.0145128   0.0028610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  24  40000   0.058039   0.209939  -0.0147136   0.0027330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  25  40001   0.058039   0.209139  -0.0147744   0.0025650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  26  40002   0.058140   0.208240  -0.0146472   0.0023700   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  27  40003   0.058140   0.207440  -0.0143371   0.0021960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  28  40004   0.058140   0.206540  -0.0138719   0.0020620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  29  40005   0.058141   0.205641  -0.0133027   0.0019900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  30  40006   0.058141   0.204741  -0.0126886   0.0019840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   5  31  40007   0.058141   0.203941  -0.0121074   0.0020580   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6   1  40008   0.058241   0.203041  -0.0116382   0.0021960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6   2  40009   0.058242   0.202142  -0.0113490   0.0024040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6   3  40010   0.058342   0.201242  -0.0112679   0.0026380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6   4  40011   0.058442   0.200342  -0.0114247   0.0028600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6   5  40012   0.058542   0.199442  -0.0117895   0.0030370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6   6  40013   0.058643   0.198543  -0.0122824   0.0031050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6   7  40014   0.058843   0.197643  -0.0127712   0.0030160   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6   8  40015   0.058943   0.196643  -0.0130850   0.0027830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6   9  40016   0.059144   0.195744  -0.0131259   0.0024600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  10  40017   0.059344   0.194844  -0.0128247   0.0021390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  11  40018   0.059544   0.193844  -0.0122455   0.0019140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  12  40019   0.059744   0.192944  -0.0115133   0.0018390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  13  40020   0.059945   0.191945  -0.0107832   0.0019030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  14  40021   0.060245   0.191045  -0.0101800   0.0020610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  15  40022   0.060545   0.190045  -0.0097428   0.0022400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  16  40023   0.060745   0.189045  -0.0094656   0.0023760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  17  40024   0.061046   0.188046  -0.0092765   0.0024120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  18  40025   0.061346   0.187046  -0.0090803   0.0023720   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  19  40026   0.061646   0.186146  -0.0087931   0.0022550   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  20  40027   0.061947   0.185147  -0.0083790   0.0020780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  21  40028   0.062347   0.184147  -0.0077568   0.0018720   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  22  40029   0.062647   0.183147  -0.0069256   0.0016360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  23  40030   0.062947   0.182147  -0.0058404   0.0014080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  24  40031   0.063248   0.181148  -0.0045613   0.0012220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  25  40032   0.063548   0.180148  -0.0031241   0.0011040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  26  40033   0.063848   0.179148  -0.0016039   0.0010600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  27  40034   0.064148   0.178148  -0.0000808   0.0010980   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  28  40035   0.064449   0.177149   0.0013544   0.0012230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  29  40036   0.064749   0.176149   0.0026326   0.0014190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   6  30  40037   0.065049   0.175249   0.0036958   0.0016480   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7   1  40038   0.065350   0.174250   0.0045179   0.0018820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7   2  40039   0.065550   0.173250   0.0051271   0.0020890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7   3  40040   0.065750   0.172350   0.0055513   0.0022060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7   4  40041   0.065950   0.171350   0.0059264   0.0022020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7   5  40042   0.066151   0.170451   0.0063796   0.0020720   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7   6  40043   0.066351   0.169551   0.0070058   0.0018450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7   7  40044   0.066451   0.168651   0.0078710   0.0016080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7   8  40045   0.066551   0.167751   0.0089611   0.0014170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7   9  40046   0.066552   0.166852   0.0101843   0.0013410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  10  40047   0.066652   0.166052   0.0114085   0.0014270   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  11  40048   0.066652   0.165152   0.0124797   0.0016270   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  12  40049   0.066553   0.164353   0.0133158   0.0018930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  13  40050   0.066453   0.163553   0.0138810   0.0021390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  14  40051   0.066353   0.162653   0.0142552   0.0022870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  15  40052   0.066153   0.161853   0.0145203   0.0023470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  16  40053   0.065954   0.161154   0.0147735   0.0023020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  17  40054   0.065754   0.160354   0.0151087   0.0021870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  18  40055   0.065454   0.159554   0.0155949   0.0020260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  19  40056   0.065154   0.158854   0.0162550   0.0018340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  20  40057   0.064755   0.158155   0.0171062   0.0016570   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  21  40058   0.064355   0.157455   0.0181214   0.0014990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  22  40059   0.063855   0.156755   0.0192716   0.0013830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  23  40060   0.063356   0.156056   0.0205017   0.0013490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  24  40061   0.062856   0.155356   0.0217359   0.0013970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  25  40062   0.062256   0.154656   0.0228701   0.0015290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  26  40063   0.061656   0.154056   0.0238362   0.0017400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  27  40064   0.060957   0.153457   0.0245664   0.0019830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  28  40065   0.060257   0.152757   0.0250416   0.0022340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  29  40066   0.059557   0.152157   0.0252848   0.0024470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  30  40067   0.058758   0.151658   0.0253689   0.0025670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   7  31  40068   0.057958   0.151058   0.0253821   0.0025690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8   1  40069   0.057158   0.150458   0.0254523   0.0024710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8   2  40070   0.056258   0.149958   0.0256595   0.0022730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8   3  40071   0.055359   0.149459   0.0260886   0.0020500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8   4  40072   0.054359   0.148959   0.0267398   0.0018500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8   5  40073   0.053459   0.148459   0.0275450   0.0017500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8   6  40074   0.052459   0.148059   0.0283722   0.0018100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8   7  40075   0.051360   0.147560   0.0290713   0.0019930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8   8  40076   0.050360   0.147160   0.0295375   0.0022520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8   9  40077   0.049260   0.146760   0.0297417   0.0025260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  10  40078   0.048161   0.146361   0.0296949   0.0027340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  11  40079   0.047061   0.145961   0.0294870   0.0028440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  12  40080   0.045961   0.145561   0.0292232   0.0028460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  13  40081   0.044761   0.145161   0.0290154   0.0027370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  14  40082   0.043662   0.144762   0.0289505   0.0025660   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  15  40083   0.042462   0.144362   0.0290727   0.0023670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  16  40084   0.041262   0.144062   0.0294079   0.0021460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  17  40085   0.040062   0.143662   0.0299611   0.0019520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  18  40086   0.038863   0.143263   0.0306762   0.0018080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  19  40087   0.037563   0.142963   0.0315034   0.0017300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  20  40088   0.036363   0.142563   0.0323686   0.0017340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  21  40089   0.035164   0.142164   0.0331888   0.0018120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  22  40090   0.033864   0.141764   0.0339089   0.0019690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  23  40091   0.032664   0.141464   0.0344211   0.0021940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  24  40092   0.031364   0.141064   0.0346953   0.0024370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  25  40093   0.030165   0.140665   0.0347405   0.0026530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  26  40094   0.028865   0.140265   0.0346006   0.0027870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  27  40095   0.027665   0.139865   0.0343998   0.0027820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  28  40096   0.026465   0.139465   0.0342630   0.0026510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  29  40097   0.025166   0.138966   0.0343132   0.0024170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  30  40098   0.023966   0.138566   0.0346233   0.0021510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   8  31  40099   0.022766   0.138066   0.0351925   0.0019130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9   1  40100   0.021567   0.137667   0.0359377   0.0017750   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9   2  40101   0.020367   0.137167   0.0367779   0.0017670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9   3  40102   0.019167   0.136667   0.0375590   0.0018810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9   4  40103   0.017967   0.136167   0.0381532   0.0021050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9   5  40104   0.016768   0.135568   0.0385064   0.0023790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9   6  40105   0.015568   0.135068   0.0385926   0.0026280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9   7  40106   0.014468   0.134468   0.0384677   0.0027870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9   8  40107   0.013268   0.133868   0.0382349   0.0028490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9   9  40108   0.012169   0.133269   0.0379941   0.0027970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  10  40109   0.010969   0.132669   0.0378483   0.0026750   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  11  40110   0.009869   0.132069   0.0378504   0.0025060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  12  40111   0.008770   0.131370   0.0380306   0.0023150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  13  40112   0.007670   0.130670   0.0383948   0.0021440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  14  40113   0.006570   0.130070   0.0389090   0.0020170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  15  40114   0.005470   0.129370   0.0395181   0.0019560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  16  40115   0.004371   0.128571   0.0401613   0.0019710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  17  40116   0.003271   0.127871   0.0407385   0.0020600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  18  40117   0.002271   0.127171   0.0411947   0.0022300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  19  40118   0.001171   0.126371   0.0414458   0.0024690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  20  40119   0.000072   0.125672   0.0414340   0.0027380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  21  40120  -0.000928   0.124872   0.0411522   0.0030100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  22  40121  -0.002028   0.124072   0.0406274   0.0032030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  23  40122  -0.003127   0.123373   0.0399685   0.0032710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  24  40123  -0.004227   0.122573   0.0393177   0.0031840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  25  40124  -0.005327   0.121773   0.0388259   0.0029620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  26  40125  -0.006427   0.121073   0.0386081   0.0026570   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  27  40126  -0.007526   0.120274   0.0386992   0.0023710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  28  40127  -0.008626   0.119474   0.0390384   0.0021610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  29  40128  -0.009826   0.118774   0.0395126   0.0020940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968   9  30  40129  -0.011026   0.118074   0.0399848   0.0021540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10   1  40130  -0.012225   0.117375   0.0403399   0.0023290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10   2  40131  -0.013425   0.116675   0.0404981   0.0025480   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10   3  40132  -0.014725   0.115975   0.0404273   0.0027700   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10   4  40133  -0.016024   0.115376   0.0401595   0.0029330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10   5  40134  -0.017324   0.114776   0.0397826   0.0029940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10   6  40135  -0.018724   0.114176   0.0393958   0.0029540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10   7  40136  -0.020124   0.113676   0.0390960   0.0028340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10   8  40137  -0.021623   0.113177   0.0389392   0.0026520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10   9  40138  -0.023123   0.112677   0.0389814   0.0024530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  10  40139  -0.024723   0.112277   0.0392125   0.0022600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  11  40140  -0.026323   0.111977   0.0396297   0.0021140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  12  40141  -0.027922   0.111678   0.0401649   0.0020180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  13  40142  -0.029622   0.111478   0.0407501   0.0020060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  14  40143  -0.031422   0.111278   0.0413162   0.0020650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  15  40144  -0.033221   0.111079   0.0417744   0.0022220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  16  40145  -0.035021   0.111079   0.0420386   0.0024400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  17  40146  -0.037021   0.111079   0.0420568   0.0027110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  18  40147  -0.038921   0.111179   0.0417899   0.0030010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  19  40148  -0.040920   0.111280   0.0412451   0.0032490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  20  40149  -0.043020   0.111480   0.0404953   0.0034110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  21  40150  -0.045120   0.111680   0.0396525   0.0034280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  22  40151  -0.047319   0.112081   0.0388836   0.0032770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  23  40152  -0.049519   0.112381   0.0383288   0.0030080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  24  40153  -0.051719   0.112881   0.0380690   0.0027050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  25  40154  -0.054019   0.113381   0.0380882   0.0024540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  26  40155  -0.056418   0.113982   0.0382883   0.0023420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  27  40156  -0.058818   0.114582   0.0385425   0.0023720   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  28  40157  -0.061218   0.115282   0.0386927   0.0025240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  29  40158  -0.063618   0.116082   0.0386629   0.0027310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  30  40159  -0.066117   0.116883   0.0384110   0.0029390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  10  31  40160  -0.068617   0.117783   0.0379732   0.0030950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11   1  40161  -0.071217   0.118683   0.0374284   0.0031800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11   2  40162  -0.073716   0.119684   0.0368446   0.0031630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11   3  40163  -0.076316   0.120684   0.0363128   0.0030700   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11   4  40164  -0.078816   0.121784   0.0359079   0.0029110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11   5  40165  -0.081416   0.122884   0.0356931   0.0027140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11   6  40166  -0.083915   0.124085   0.0356823   0.0025110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11   7  40167  -0.086515   0.125285   0.0358535   0.0023340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11   8  40168  -0.089015   0.126585   0.0361676   0.0022180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11   9  40169  -0.091515   0.127885   0.0365838   0.0021730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  10  40170  -0.094014   0.129186   0.0369760   0.0022160   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  11  40171  -0.096514   0.130586   0.0373162   0.0023150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  12  40172  -0.098914   0.131986   0.0375123   0.0024920   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  13  40173  -0.101313   0.133387   0.0375045   0.0027120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  14  40174  -0.103713   0.134887   0.0372597   0.0029610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  15  40175  -0.105913   0.136287   0.0367649   0.0032030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  16  40176  -0.108213   0.137887   0.0360521   0.0033890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  17  40177  -0.110312   0.139388   0.0352052   0.0034630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  18  40178  -0.112412   0.140888   0.0343574   0.0033890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  19  40179  -0.114412   0.142488   0.0336656   0.0031650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  20  40180  -0.116412   0.144088   0.0332448   0.0028590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  21  40181  -0.118211   0.145689   0.0331229   0.0025650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  22  40182  -0.120011   0.147289   0.0332601   0.0023760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  23  40183  -0.121711   0.148989   0.0334993   0.0023420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  24  40184  -0.123310   0.150590   0.0336955   0.0024570   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  25  40185  -0.124810   0.152290   0.0337256   0.0026620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  26  40186  -0.126210   0.153990   0.0335478   0.0028800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  27  40187  -0.127510   0.155690   0.0331730   0.0030470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  28  40188  -0.128709   0.157291   0.0326722   0.0031180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  29  40189  -0.129909   0.158991   0.0321494   0.0031040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  11  30  40190  -0.130909   0.160791   0.0316815   0.0029980   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12   1  40191  -0.131809   0.162491   0.0313547   0.0028290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12   2  40192  -0.132708   0.164192   0.0312179   0.0026310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12   3  40193  -0.133408   0.165892   0.0312861   0.0024230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12   4  40194  -0.134108   0.167592   0.0315562   0.0022210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12   5  40195  -0.134707   0.169293   0.0319994   0.0020730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12   6  40196  -0.135207   0.171093   0.0325686   0.0019900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12   7  40197  -0.135607   0.172793   0.0331848   0.0019830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12   8  40198  -0.136007   0.174493   0.0337679   0.0020620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12   9  40199  -0.136306   0.176194   0.0342271   0.0021990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  10  40200  -0.136506   0.177894   0.0345243   0.0023950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  11  40201  -0.136606   0.179594   0.0346085   0.0026180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  12  40202  -0.136706   0.181294   0.0344687   0.0028410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  13  40203  -0.136805   0.182995   0.0341198   0.0030260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  14  40204  -0.136705   0.184695   0.0336230   0.0031430   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  15  40205  -0.136705   0.186395   0.0330542   0.0031420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  16  40206  -0.136504   0.187996   0.0325624   0.0030010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  17  40207  -0.136404   0.189696   0.0322675   0.0027570   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  18  40208  -0.136204   0.191396   0.0322407   0.0024800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  19  40209  -0.135904   0.193096   0.0324689   0.0022620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  20  40210  -0.135603   0.194697   0.0328601   0.0021820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  21  40211  -0.135303   0.196397   0.0332503   0.0022520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  22  40212  -0.134903   0.197997   0.0334924   0.0024490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  23  40213  -0.134503   0.199697   0.0335086   0.0026910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  24  40214  -0.134102   0.201298   0.0333038   0.0028970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  25  40215  -0.133702   0.202998   0.0329360   0.0029990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  26  40216  -0.133202   0.204598   0.0325241   0.0029990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  27  40217  -0.132701   0.206199   0.0321613   0.0029010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  28  40218  -0.132201   0.207899   0.0319345   0.0027250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  29  40219  -0.131601   0.209499   0.0318957   0.0025210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  30  40220  -0.131101   0.211199   0.0320869   0.0022970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1968  12  31  40221  -0.130500   0.212800   0.0324860   0.0020990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1   1  40222  -0.129900   0.214400   0.0330652   0.0019400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1   2  40223  -0.129300   0.216100   0.0337654   0.0018510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1   3  40224  -0.128700   0.217700   0.0345286   0.0018370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1   4  40225  -0.127999   0.219401   0.0352557   0.0019010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1   5  40226  -0.127399   0.221001   0.0358829   0.0020360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1   6  40227  -0.126699   0.222701   0.0363471   0.0022230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1   7  40228  -0.125998   0.224302   0.0366083   0.0024370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1   8  40229  -0.125298   0.226002   0.0366545   0.0026480   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1   9  40230  -0.124598   0.227602   0.0365046   0.0028320   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  10  40231  -0.123898   0.229302   0.0362138   0.0029370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  11  40232  -0.123197   0.231003   0.0358550   0.0029440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  12  40233  -0.122497   0.232603   0.0355522   0.0028410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  13  40234  -0.121797   0.234303   0.0353953   0.0026400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  14  40235  -0.121097   0.236003   0.0354795   0.0023790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  15  40236  -0.120396   0.237704   0.0358107   0.0021510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  16  40237  -0.119696   0.239404   0.0363129   0.0020350   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  17  40238  -0.118996   0.241204   0.0368781   0.0020620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  18  40239  -0.118295   0.242905   0.0373302   0.0022360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  19  40240  -0.117595   0.244605   0.0375574   0.0025090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  20  40241  -0.116895   0.246405   0.0375016   0.0027730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  21  40242  -0.116195   0.248205   0.0372178   0.0029670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  22  40243  -0.115594   0.250006   0.0368009   0.0030270   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  23  40244  -0.114894   0.251806   0.0363871   0.0029730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  24  40245  -0.114194   0.253606   0.0360863   0.0028170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  25  40246  -0.113593   0.255407   0.0359505   0.0026190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  26  40247  -0.112893   0.257307   0.0360327   0.0024180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  27  40248  -0.112293   0.259107   0.0362998   0.0022330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  28  40249  -0.111693   0.261007   0.0367350   0.0020960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  29  40250  -0.111092   0.262908   0.0372782   0.0020080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  30  40251  -0.110492   0.264808   0.0378744   0.0020030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   1  31  40252  -0.109892   0.266708   0.0384355   0.0020680   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2   1  40253  -0.109292   0.268708   0.0388817   0.0022200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2   2  40254  -0.108691   0.270609   0.0391549   0.0024330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2   3  40255  -0.108191   0.272609   0.0391941   0.0026820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2   4  40256  -0.107591   0.274609   0.0389713   0.0029330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2   5  40257  -0.107090   0.276610   0.0385214   0.0031470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2   6  40258  -0.106590   0.278610   0.0379026   0.0032770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2   7  40259  -0.105990   0.280610   0.0371818   0.0033270   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2   8  40260  -0.105490   0.282610   0.0364750   0.0032600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2   9  40261  -0.104989   0.284611   0.0358831   0.0030910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  10  40262  -0.104489   0.286711   0.0355013   0.0028600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  11  40263  -0.103889   0.288711   0.0353405   0.0026480   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  12  40264  -0.103389   0.290711   0.0353697   0.0025030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  13  40265  -0.102888   0.292712   0.0354809   0.0024790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  14  40266  -0.102388   0.294712   0.0355420   0.0026030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  15  40267  -0.101888   0.296712   0.0354172   0.0028430   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  16  40268  -0.101287   0.298713   0.0350214   0.0031280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  17  40269  -0.100787   0.300713   0.0343646   0.0033510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  18  40270  -0.100187   0.302613   0.0335457   0.0034650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  19  40271  -0.099587   0.304513   0.0326709   0.0034520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  20  40272  -0.099086   0.306414   0.0318621   0.0033290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  21  40273  -0.098386   0.308314   0.0312303   0.0031250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  22  40274  -0.097786   0.310114   0.0308025   0.0028990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  23  40275  -0.097086   0.311814   0.0306086   0.0026810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  24  40276  -0.096385   0.313615   0.0306078   0.0025000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  25  40277  -0.095685   0.315315   0.0307700   0.0023770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  26  40278  -0.094885   0.316915   0.0310112   0.0023360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  27  40279  -0.094084   0.318516   0.0312624   0.0023750   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   2  28  40280  -0.093284   0.320116   0.0314235   0.0024950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3   1  40281  -0.092384   0.321616   0.0314387   0.0026740   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3   2  40282  -0.091384   0.323016   0.0312389   0.0029130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3   3  40283  -0.090383   0.324417   0.0307881   0.0031690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3   4  40284  -0.089383   0.325817   0.0300982   0.0034020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3   5  40285  -0.088283   0.327117   0.0291974   0.0035560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3   6  40286  -0.087183   0.328417   0.0281916   0.0036150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3   7  40287  -0.085982   0.329618   0.0271978   0.0035430   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3   8  40288  -0.084682   0.330718   0.0263220   0.0033740   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3   9  40289  -0.083382   0.331918   0.0256601   0.0031340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  10  40290  -0.082081   0.332919   0.0252343   0.0028940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  11  40291  -0.080681   0.334019   0.0250295   0.0027220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  12  40292  -0.079181   0.335019   0.0249317   0.0026770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  13  40293  -0.077681   0.335919   0.0248188   0.0027620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  14  40294  -0.076180   0.336820   0.0245570   0.0029690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  15  40295  -0.074480   0.337720   0.0240482   0.0032470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  16  40296  -0.072880   0.338520   0.0232564   0.0035210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  17  40297  -0.071180   0.339320   0.0222216   0.0037200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  18  40298  -0.069379   0.340121   0.0210377   0.0037960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  19  40299  -0.067579   0.340821   0.0198639   0.0037420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  20  40300  -0.065779   0.341521   0.0187901   0.0035730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  21  40301  -0.063878   0.342222   0.0179083   0.0033540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  22  40302  -0.061878   0.342822   0.0172654   0.0031130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  23  40303  -0.059878   0.343422   0.0168526   0.0029090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  24  40304  -0.057878   0.344022   0.0166198   0.0027490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  25  40305  -0.055877   0.344623   0.0165130   0.0026590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  26  40306  -0.053777   0.345223   0.0164552   0.0026500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  27  40307  -0.051677   0.345723   0.0163663   0.0027210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  28  40308  -0.049577   0.346323   0.0161695   0.0028650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  29  40309  -0.047376   0.346824   0.0157977   0.0030780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  30  40310  -0.045176   0.347324   0.0151939   0.0033130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   3  31  40311  -0.042976   0.347824   0.0143611   0.0035380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4   1  40312  -0.040775   0.348225   0.0133142   0.0037260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4   2  40313  -0.038475   0.348725   0.0121214   0.0038200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4   3  40314  -0.036275   0.349225   0.0109066   0.0037780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4   4  40315  -0.033975   0.349625   0.0097898   0.0036070   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4   5  40316  -0.031674   0.350126   0.0088929   0.0033560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4   6  40317  -0.029374   0.350526   0.0082751   0.0030720   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4   7  40318  -0.027074   0.350926   0.0079103   0.0028530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4   8  40319  -0.024774   0.351326   0.0077205   0.0027390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4   9  40320  -0.022473   0.351727   0.0075757   0.0027640   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  10  40321  -0.020073   0.352127   0.0073298   0.0029240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  11  40322  -0.017773   0.352527   0.0068910   0.0031520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  12  40323  -0.015372   0.352928   0.0062012   0.0034050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  13  40324  -0.012972   0.353228   0.0052784   0.0036080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  14  40325  -0.010672   0.353628   0.0042096   0.0037030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  15  40326  -0.008272   0.353928   0.0030927   0.0036900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  16  40327  -0.005871   0.354229   0.0020569   0.0035570   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  17  40328  -0.003471   0.354529   0.0011851   0.0033560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  18  40329  -0.001071   0.354729   0.0005353   0.0031220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  19  40330   0.001330   0.355030   0.0001184   0.0028970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  20  40331   0.003730   0.355230  -0.0000834   0.0027060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  21  40332   0.006130   0.355330  -0.0001252   0.0025810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  22  40333   0.008530   0.355530  -0.0000800   0.0025240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  23  40334   0.010931   0.355531  -0.0000198   0.0025480   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  24  40335   0.013431   0.355631  -0.0000197   0.0026450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  25  40336   0.015831   0.355631  -0.0001495   0.0028020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  26  40337   0.018231   0.355531  -0.0004573   0.0030000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  27  40338   0.020732   0.355432  -0.0009631   0.0032020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  28  40339   0.023132   0.355332  -0.0016630   0.0033720   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  29  40340   0.025632   0.355032  -0.0025048   0.0034760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   4  30  40341   0.028133   0.354833  -0.0033986   0.0034910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5   1  40342   0.030533   0.354433  -0.0042414   0.0033640   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5   2  40343   0.033033   0.354033  -0.0049052   0.0031170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5   3  40344   0.035433   0.353633  -0.0052861   0.0028200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5   4  40345   0.037934   0.353034  -0.0053629   0.0025360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5   5  40346   0.040334   0.352434  -0.0052117   0.0023650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5   6  40347   0.042834   0.351834  -0.0049615   0.0023500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5   7  40348   0.045234   0.351034  -0.0047684   0.0024640   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5   8  40349   0.047635   0.350235  -0.0047392   0.0026780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5   9  40350   0.050035   0.349435  -0.0049400   0.0029130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  10  40351   0.052435   0.348535  -0.0053588   0.0031030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  11  40352   0.054836   0.347536  -0.0059266   0.0032060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  12  40353   0.057236   0.346436  -0.0065535   0.0032010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  13  40354   0.059636   0.345436  -0.0071243   0.0031050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  14  40355   0.061936   0.344236  -0.0075461   0.0029300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  15  40356   0.064237   0.343037  -0.0077799   0.0027130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  16  40357   0.066537   0.341737  -0.0077897   0.0024900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  17  40358   0.068837   0.340537  -0.0075996   0.0023080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  18  40359   0.071037   0.339137  -0.0072444   0.0021840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  19  40360   0.073238   0.337738  -0.0068122   0.0021450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  20  40361   0.075438   0.336338  -0.0063710   0.0021760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  21  40362   0.077638   0.334838  -0.0059979   0.0022810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  22  40363   0.079739   0.333439  -0.0057627   0.0024460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  23  40364   0.081839   0.331839  -0.0057145   0.0026530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  24  40365   0.083939   0.330339  -0.0058833   0.0028770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  25  40366   0.086039   0.328739  -0.0062751   0.0030830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  26  40367   0.088040   0.327140  -0.0068650   0.0032560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  27  40368   0.089940   0.325540  -0.0075708   0.0033390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  28  40369   0.091940   0.323840  -0.0083146   0.0033080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  29  40370   0.093840   0.322240  -0.0089654   0.0031550   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  30  40371   0.095741   0.320541  -0.0094123   0.0028990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   5  31  40372   0.097541   0.318841  -0.0095871   0.0026240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6   1  40373   0.099341   0.317141  -0.0095029   0.0024180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6   2  40374   0.101142   0.315442  -0.0092787   0.0023410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6   3  40375   0.102842   0.313742  -0.0090475   0.0024210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6   4  40376   0.104542   0.312042  -0.0089704   0.0026110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6   5  40377   0.106142   0.310342  -0.0091022   0.0028420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6   6  40378   0.107843   0.308643  -0.0094500   0.0030230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6   7  40379   0.109343   0.306843  -0.0099348   0.0031080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6   8  40380   0.110943   0.305143  -0.0104367   0.0030670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6   9  40381   0.112443   0.303343  -0.0108535   0.0029320   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  10  40382   0.113844   0.301644  -0.0110953   0.0027110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  11  40383   0.115344   0.299944  -0.0110921   0.0024590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  12  40384   0.116744   0.298144  -0.0108199   0.0021890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  13  40385   0.118045   0.296445  -0.0102878   0.0019330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  14  40386   0.119345   0.294645  -0.0095226   0.0017470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  15  40387   0.120645   0.292945  -0.0086144   0.0016200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  16  40388   0.121845   0.291145  -0.0076172   0.0015810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  17  40389   0.123046   0.289446  -0.0066121   0.0016090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  18  40390   0.124146   0.287646  -0.0056759   0.0017100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  19  40391   0.125246   0.285846  -0.0048657   0.0018540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  20  40392   0.126346   0.284146  -0.0042095   0.0020250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  21  40393   0.127347   0.282347  -0.0037223   0.0021880   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  22  40394   0.128347   0.280647  -0.0033922   0.0023160   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  23  40395   0.129347   0.278847  -0.0031430   0.0023830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  24  40396   0.130248   0.277148  -0.0029388   0.0023700   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  25  40397   0.131048   0.275348  -0.0026776   0.0022610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  26  40398   0.131948   0.273648  -0.0022465   0.0020650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  27  40399   0.132748   0.271848  -0.0015993   0.0018180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  28  40400   0.133449   0.270049  -0.0007121   0.0016090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  29  40401   0.134249   0.268249   0.0003361   0.0014980   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   6  30  40402   0.134949   0.266549   0.0014083   0.0015560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7   1  40403   0.135549   0.264749   0.0023554   0.0017630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7   2  40404   0.136150   0.262950   0.0030456   0.0020530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7   3  40405   0.136750   0.261150   0.0034328   0.0023310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7   4  40406   0.137350   0.259250   0.0035950   0.0025160   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7   5  40407   0.137851   0.257451   0.0036281   0.0025750   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7   6  40408   0.138351   0.255551   0.0036773   0.0024960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7   7  40409   0.138751   0.253751   0.0038465   0.0023450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7   8  40410   0.139251   0.251851   0.0041927   0.0021380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7   9  40411   0.139552   0.249952   0.0047519   0.0019160   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  10  40412   0.139952   0.248052   0.0055220   0.0017300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  11  40413   0.140252   0.246152   0.0064662   0.0015820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  12  40414   0.140553   0.244153   0.0075264   0.0014890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  13  40415   0.140753   0.242253   0.0086426   0.0014830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  14  40416   0.140953   0.240253   0.0097257   0.0015540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  15  40417   0.141153   0.238253   0.0107009   0.0016840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  16  40418   0.141254   0.236254   0.0115221   0.0018610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  17  40419   0.141354   0.234154   0.0121533   0.0020590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  18  40420   0.141354   0.232154   0.0125964   0.0022500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  19  40421   0.141454   0.230054   0.0128546   0.0023950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  20  40422   0.141455   0.228055   0.0129968   0.0024900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  21  40423   0.141355   0.225955   0.0130920   0.0024960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  22  40424   0.141355   0.223855   0.0132162   0.0024100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  23  40425   0.141256   0.221656   0.0134713   0.0022380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  24  40426   0.141056   0.219556   0.0139305   0.0020090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  25  40427   0.140956   0.217456   0.0146347   0.0017790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  26  40428   0.140756   0.215256   0.0155289   0.0016220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  27  40429   0.140557   0.213057   0.0165250   0.0015910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  28  40430   0.140257   0.210957   0.0174722   0.0017290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  29  40431   0.139957   0.208757   0.0182154   0.0019790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  30  40432   0.139657   0.206557   0.0186826   0.0022760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   7  31  40433   0.139358   0.204358   0.0188738   0.0025020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8   1  40434   0.139058   0.202158   0.0189029   0.0025940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8   2  40435   0.138658   0.199958   0.0189291   0.0025310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8   3  40436   0.138259   0.197759   0.0190753   0.0023500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8   4  40437   0.137859   0.195559   0.0194425   0.0020980   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8   5  40438   0.137359   0.193359   0.0200646   0.0018300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8   6  40439   0.136859   0.191159   0.0209538   0.0015880   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8   7  40440   0.136360   0.188960   0.0220510   0.0014080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8   8  40441   0.135860   0.186760   0.0232952   0.0012970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8   9  40442   0.135360   0.184560   0.0246133   0.0012710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  10  40443   0.134760   0.182360   0.0259165   0.0013240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  11  40444   0.134161   0.180161   0.0271307   0.0014490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  12  40445   0.133461   0.177961   0.0281809   0.0016390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  13  40446   0.132861   0.175861   0.0290221   0.0018600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  14  40447   0.132162   0.173662   0.0296422   0.0020790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  15  40448   0.131462   0.171562   0.0300554   0.0022760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  16  40449   0.130762   0.169462   0.0303016   0.0024100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  17  40450   0.129962   0.167362   0.0304538   0.0024610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  18  40451   0.129163   0.165263   0.0305899   0.0024200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  19  40452   0.128363   0.163163   0.0308211   0.0022970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  20  40453   0.127463   0.161163   0.0312063   0.0021170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  21  40454   0.126563   0.159063   0.0317695   0.0019390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  22  40455   0.125664   0.157064   0.0324906   0.0018030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  23  40456   0.124764   0.155064   0.0333058   0.0017880   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  24  40457   0.123764   0.153064   0.0340660   0.0019080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  25  40458   0.122765   0.151165   0.0346352   0.0021650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  26  40459   0.121765   0.149265   0.0348893   0.0025020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  27  40460   0.120665   0.147365   0.0348255   0.0028170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  28  40461   0.119565   0.145465   0.0344697   0.0030520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  29  40462   0.118466   0.143566   0.0339649   0.0031220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  30  40463   0.117266   0.141766   0.0334691   0.0030370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   8  31  40464   0.116066   0.139966   0.0331092   0.0028500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9   1  40465   0.114866   0.138166   0.0329654   0.0026150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9   2  40466   0.113567   0.136467   0.0330646   0.0023820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9   3  40467   0.112267   0.134667   0.0333748   0.0021990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9   4  40468   0.110967   0.132967   0.0338229   0.0020880   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9   5  40469   0.109568   0.131268   0.0343521   0.0020580   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9   6  40470   0.108168   0.129668   0.0348713   0.0021080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9   7  40471   0.106768   0.127968   0.0352905   0.0022340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9   8  40472   0.105268   0.126368   0.0355736   0.0024110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9   9  40473   0.103669   0.124769   0.0356458   0.0026280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  10  40474   0.102169   0.123169   0.0354930   0.0028570   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  11  40475   0.100569   0.121669   0.0351302   0.0030530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  12  40476   0.098869   0.120169   0.0345853   0.0032040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  13  40477   0.097170   0.118570   0.0339295   0.0032610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  14  40478   0.095470   0.117070   0.0332677   0.0032170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  15  40479   0.093770   0.115670   0.0327089   0.0030780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  16  40480   0.091871   0.114171   0.0323140   0.0028740   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  17  40481   0.090071   0.112671   0.0321472   0.0026540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  18  40482   0.088171   0.111271   0.0321834   0.0024670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  19  40483   0.086271   0.109871   0.0323606   0.0023780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  20  40484   0.084272   0.108372   0.0325637   0.0024210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  21  40485   0.082372   0.106972   0.0326549   0.0025970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  22  40486   0.080272   0.105572   0.0325171   0.0028700   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  23  40487   0.078272   0.104172   0.0320963   0.0031690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  24  40488   0.076173   0.102873   0.0313985   0.0034020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  25  40489   0.074073   0.101473   0.0305146   0.0035100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  26  40490   0.071873   0.100073   0.0296098   0.0034650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  27  40491   0.069774   0.098674   0.0288220   0.0032830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  28  40492   0.067574   0.097374   0.0282432   0.0030260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  29  40493   0.065374   0.095974   0.0279473   0.0027490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969   9  30  40494   0.063074   0.094674   0.0279155   0.0025050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10   1  40495   0.060875   0.093375   0.0280947   0.0023290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10   2  40496   0.058675   0.091975   0.0284099   0.0022460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10   3  40497   0.056375   0.090675   0.0287640   0.0022490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10   4  40498   0.054076   0.089376   0.0290762   0.0023300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10   5  40499   0.051876   0.088076   0.0292714   0.0024780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10   6  40500   0.049576   0.086876   0.0292936   0.0026830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10   7  40501   0.047376   0.085576   0.0290877   0.0029000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10   8  40502   0.045177   0.084377   0.0286749   0.0031200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10   9  40503   0.042877   0.083177   0.0280601   0.0032900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  10  40504   0.040677   0.081977   0.0272993   0.0033970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  11  40505   0.038477   0.080777   0.0264804   0.0034050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  12  40506   0.036278   0.079678   0.0257166   0.0032960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  13  40507   0.034178   0.078578   0.0251078   0.0031090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  14  40508   0.031978   0.077478   0.0247100   0.0028750   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  15  40509   0.029879   0.076379   0.0245291   0.0026790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  16  40510   0.027679   0.075379   0.0245123   0.0025630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  17  40511   0.025679   0.074479   0.0245385   0.0025780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  18  40512   0.023579   0.073479   0.0244927   0.0027250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  19  40513   0.021480   0.072580   0.0242448   0.0029620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  20  40514   0.019480   0.071780   0.0237250   0.0032490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  21  40515   0.017380   0.070880   0.0229482   0.0034950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  22  40516   0.015380   0.070180   0.0219574   0.0036380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  23  40517   0.013381   0.069381   0.0208965   0.0036500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  24  40518   0.011381   0.068681   0.0198817   0.0035300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  25  40519   0.009381   0.068081   0.0190409   0.0033080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  26  40520   0.007382   0.067482   0.0184721   0.0030270   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  27  40521   0.005382   0.066882   0.0181852   0.0027530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  28  40522   0.003482   0.066382   0.0181394   0.0025310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  29  40523   0.001482   0.065882   0.0182876   0.0023770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  30  40524  -0.000517   0.065483   0.0185378   0.0023190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  10  31  40525  -0.002517   0.065083   0.0188129   0.0023340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11   1  40526  -0.004517   0.064683   0.0190361   0.0024190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11   2  40527  -0.006617   0.064383   0.0191373   0.0025660   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11   3  40528  -0.008616   0.064084   0.0190745   0.0027420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11   4  40529  -0.010716   0.063884   0.0188326   0.0029100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11   5  40530  -0.012716   0.063684   0.0184528   0.0030540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11   6  40531  -0.014815   0.063485   0.0179330   0.0031640   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11   7  40532  -0.017015   0.063385   0.0173331   0.0031900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11   8  40533  -0.019115   0.063285   0.0167673   0.0031240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11   9  40534  -0.021315   0.063285   0.0163105   0.0029660   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  10  40535  -0.023514   0.063186   0.0160487   0.0027410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  11  40536  -0.025814   0.063186   0.0160098   0.0025140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  12  40537  -0.028014   0.063286   0.0161770   0.0023680   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  13  40538  -0.030414   0.063286   0.0164312   0.0023500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  14  40539  -0.032713   0.063387   0.0166194   0.0024850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  15  40540  -0.035113   0.063487   0.0166025   0.0027330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  16  40541  -0.037513   0.063687   0.0163177   0.0030180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  17  40542  -0.039912   0.063788   0.0157549   0.0032890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  18  40543  -0.042412   0.063988   0.0149601   0.0034640   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  19  40544  -0.045012   0.064288   0.0140462   0.0035330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  20  40545  -0.047512   0.064488   0.0131244   0.0034710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  21  40546  -0.050111   0.064789   0.0123166   0.0033130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  22  40547  -0.052711   0.065089   0.0117088   0.0030870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  23  40548  -0.055411   0.065389   0.0113249   0.0028530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  24  40549  -0.058111   0.065789   0.0111621   0.0026520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  25  40550  -0.060810   0.066190   0.0111893   0.0025080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  26  40551  -0.063610   0.066590   0.0112995   0.0024450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  27  40552  -0.066410   0.066990   0.0114416   0.0024650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  28  40553  -0.069209   0.067491   0.0115248   0.0025590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  29  40554  -0.072109   0.067991   0.0114840   0.0027090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  11  30  40555  -0.075009   0.068591   0.0112761   0.0028910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12   1  40556  -0.077909   0.069191   0.0108913   0.0030700   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12   2  40557  -0.080808   0.069892   0.0103335   0.0032310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12   3  40558  -0.083708   0.070592   0.0096227   0.0033520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12   4  40559  -0.086708   0.071392   0.0088408   0.0033980   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12   5  40560  -0.089708   0.072192   0.0080450   0.0033590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12   6  40561  -0.092707   0.072993   0.0073362   0.0032230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12   7  40562  -0.095707   0.073993   0.0068064   0.0030060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12   8  40563  -0.098707   0.074993   0.0065155   0.0027540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12   9  40564  -0.101806   0.075994   0.0064657   0.0025390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  10  40565  -0.104806   0.077094   0.0065909   0.0024240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  11  40566  -0.107906   0.078294   0.0067471   0.0024690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  12  40567  -0.110906   0.079594   0.0067962   0.0026520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  13  40568  -0.114005   0.080895   0.0066094   0.0029080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  14  40569  -0.117005   0.082295   0.0061756   0.0031510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  15  40570  -0.120005   0.083795   0.0055277   0.0033060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  16  40571  -0.123105   0.085295   0.0047869   0.0033320   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  17  40572  -0.126104   0.086896   0.0040861   0.0032410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  18  40573  -0.129104   0.088596   0.0035193   0.0030520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  19  40574  -0.132104   0.090396   0.0031714   0.0028190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  20  40575  -0.135003   0.092297   0.0030736   0.0025670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  21  40576  -0.138003   0.094197   0.0032068   0.0023540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  22  40577  -0.140903   0.096197   0.0035260   0.0021990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  23  40578  -0.143803   0.098297   0.0039641   0.0021290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  24  40579  -0.146602   0.100498   0.0044313   0.0021300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  25  40580  -0.149402   0.102698   0.0048585   0.0022170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  26  40581  -0.152202   0.104998   0.0051586   0.0023630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  27  40582  -0.155001   0.107399   0.0053008   0.0025460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  28  40583  -0.157701   0.109799   0.0052430   0.0027490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  29  40584  -0.160301   0.112299   0.0049992   0.0029360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  30  40585  -0.162901   0.114799   0.0045843   0.0030750   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1969  12  31  40586  -0.165500   0.117400   0.0040385   0.0031680   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1   1  40587  -0.168000   0.120100   0.0034537   0.0031890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1   2  40588  -0.170400   0.122700   0.0028768   0.0031300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1   3  40589  -0.172800   0.125500   0.0024100   0.0029930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1   4  40590  -0.175099   0.128201   0.0020982   0.0027960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1   5  40591  -0.177399   0.131001   0.0019874   0.0026130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1   6  40592  -0.179499   0.133901   0.0020255   0.0025080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1   7  40593  -0.181598   0.136702   0.0020947   0.0025510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1   8  40594  -0.183698   0.139602   0.0020619   0.0027490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1   9  40595  -0.185598   0.142502   0.0017580   0.0030510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  10  40596  -0.187498   0.145402   0.0011312   0.0033790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  11  40597  -0.189297   0.148303   0.0002054   0.0036250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  12  40598  -0.190997   0.151303  -0.0009004   0.0037300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  13  40599  -0.192597   0.154203  -0.0020213   0.0036780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  14  40600  -0.194097   0.157203  -0.0030251   0.0034920   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  15  40601  -0.195496   0.160204  -0.0038119   0.0032380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  16  40602  -0.196896   0.163204  -0.0043268   0.0029730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  17  40603  -0.198096   0.166104  -0.0045796   0.0027310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  18  40604  -0.199195   0.169105  -0.0046194   0.0025400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  19  40605  -0.200295   0.172105  -0.0045052   0.0024240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  20  40606  -0.201195   0.175105  -0.0043141   0.0023870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  21  40607  -0.201995   0.178105  -0.0041249   0.0024380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  22  40608  -0.202794   0.181006  -0.0040207   0.0025530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  23  40609  -0.203394   0.184006  -0.0040546   0.0027000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  24  40610  -0.203894   0.187006  -0.0042464   0.0028640   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  25  40611  -0.204294   0.190006  -0.0045982   0.0030250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  26  40612  -0.204593   0.192907  -0.0051040   0.0031480   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  27  40613  -0.204793   0.195907  -0.0056949   0.0032140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  28  40614  -0.204893   0.198907  -0.0063277   0.0032090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  29  40615  -0.204892   0.201808  -0.0069185   0.0031410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  30  40616  -0.204792   0.204808  -0.0073964   0.0030040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   1  31  40617  -0.204592   0.207808  -0.0077092   0.0028070   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2   1  40618  -0.204292   0.210808  -0.0078360   0.0026180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2   2  40619  -0.203891   0.213709  -0.0077718   0.0024680   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2   3  40620  -0.203391   0.216709  -0.0076177   0.0024380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2   4  40621  -0.202891   0.219709  -0.0075085   0.0025600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2   5  40622  -0.202191   0.222709  -0.0075953   0.0028230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2   6  40623  -0.201490   0.225710  -0.0079912   0.0031640   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2   7  40624  -0.200690   0.228710  -0.0087440   0.0035000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2   8  40625  -0.199790   0.231710  -0.0097708   0.0037070   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2   9  40626  -0.198789   0.234711  -0.0109197   0.0037510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  10  40627  -0.197789   0.237811  -0.0120165   0.0036190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  11  40628  -0.196689   0.240811  -0.0129313   0.0033780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  12  40629  -0.195589   0.243811  -0.0135811   0.0031110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  13  40630  -0.194388   0.246912  -0.0139820   0.0028710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  14  40631  -0.193088   0.249912  -0.0141648   0.0026870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  15  40632  -0.191888   0.252912  -0.0141926   0.0025840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  16  40633  -0.190588   0.256012  -0.0141595   0.0025550   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  17  40634  -0.189287   0.259013  -0.0141503   0.0026060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  18  40635  -0.187887   0.262013  -0.0142251   0.0027260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  19  40636  -0.186587   0.265013  -0.0144380   0.0028960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  20  40637  -0.185186   0.268014  -0.0148348   0.0030810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  21  40638  -0.183786   0.271014  -0.0154076   0.0032520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  22  40639  -0.182486   0.274014  -0.0161464   0.0033890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  23  40640  -0.181086   0.277014  -0.0169763   0.0034590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  24  40641  -0.179685   0.279915  -0.0178601   0.0034660   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  25  40642  -0.178385   0.282815  -0.0187009   0.0033940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  26  40643  -0.177085   0.285715  -0.0194448   0.0032510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  27  40644  -0.175785   0.288615  -0.0200056   0.0030470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   2  28  40645  -0.174484   0.291516  -0.0203424   0.0028280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3   1  40646  -0.173184   0.294316  -0.0204913   0.0026510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3   2  40647  -0.171984   0.297116  -0.0205041   0.0025720   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3   3  40648  -0.170783   0.299817  -0.0204879   0.0026130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3   4  40649  -0.169583   0.302617  -0.0205968   0.0028080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3   5  40650  -0.168383   0.305317  -0.0209506   0.0031030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3   6  40651  -0.167283   0.307917  -0.0216334   0.0034390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3   7  40652  -0.166182   0.310618  -0.0226263   0.0037070   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3   8  40653  -0.165082   0.313218  -0.0238261   0.0038340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3   9  40654  -0.163982   0.315718  -0.0250429   0.0037810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  10  40655  -0.162882   0.318318  -0.0261357   0.0035640   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  11  40656  -0.161881   0.320819  -0.0269736   0.0032740   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  12  40657  -0.160781   0.323219  -0.0275134   0.0029900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  13  40658  -0.159781   0.325619  -0.0277832   0.0027520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  14  40659  -0.158680   0.328020  -0.0278671   0.0026100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  15  40660  -0.157680   0.330320  -0.0278449   0.0025610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  16  40661  -0.156680   0.332620  -0.0278167   0.0025870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  17  40662  -0.155580   0.334920  -0.0278636   0.0026970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  18  40663  -0.154479   0.337121  -0.0280484   0.0028620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  19  40664  -0.153479   0.339221  -0.0284192   0.0030620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  20  40665  -0.152279   0.341421  -0.0289941   0.0032680   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  21  40666  -0.151178   0.343522  -0.0297669   0.0034510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  22  40667  -0.149978   0.345522  -0.0306997   0.0035850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  23  40668  -0.148778   0.347522  -0.0317326   0.0036470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  24  40669  -0.147578   0.349522  -0.0327954   0.0036260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  25  40670  -0.146277   0.351423  -0.0337862   0.0035240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  26  40671  -0.144977   0.353323  -0.0346421   0.0033610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  27  40672  -0.143577   0.355123  -0.0353199   0.0031740   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  28  40673  -0.142177   0.356923  -0.0358067   0.0030000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  29  40674  -0.140676   0.358624  -0.0361546   0.0029120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  30  40675  -0.139176   0.360424  -0.0364784   0.0029280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   3  31  40676  -0.137576   0.362024  -0.0368742   0.0030760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4   1  40677  -0.135875   0.363625  -0.0374681   0.0033280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4   2  40678  -0.134175   0.365225  -0.0383619   0.0036420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4   3  40679  -0.132375   0.366725  -0.0395647   0.0039250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4   4  40680  -0.130575   0.368225  -0.0409965   0.0041050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4   5  40681  -0.128674   0.369726  -0.0425404   0.0041250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4   6  40682  -0.126674   0.371126  -0.0440112   0.0039910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4   7  40683  -0.124674   0.372426  -0.0452810   0.0037240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4   8  40684  -0.122674   0.373726  -0.0462539   0.0034100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4   9  40685  -0.120473   0.375027  -0.0469197   0.0031110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  10  40686  -0.118373   0.376227  -0.0473315   0.0028980   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  11  40687  -0.116073   0.377427  -0.0475574   0.0027710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  12  40688  -0.113772   0.378628  -0.0477252   0.0027480   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  13  40689  -0.111472   0.379728  -0.0479010   0.0027960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  14  40690  -0.109072   0.380828  -0.0481459   0.0029040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  15  40691  -0.106672   0.381828  -0.0485307   0.0030520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  16  40692  -0.104171   0.382829  -0.0490735   0.0032140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  17  40693  -0.101671   0.383829  -0.0497754   0.0033650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  18  40694  -0.099071   0.384729  -0.0506112   0.0034880   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  19  40695  -0.096471   0.385629  -0.0515410   0.0035390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  20  40696  -0.093870   0.386530  -0.0524819   0.0035210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  21  40697  -0.091170   0.387430  -0.0533627   0.0034070   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  22  40698  -0.088470   0.388230  -0.0540915   0.0032300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  23  40699  -0.085769   0.389031  -0.0546174   0.0030110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  24  40700  -0.083069   0.389731  -0.0549252   0.0028010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  25  40701  -0.080269   0.390531  -0.0550521   0.0026460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  26  40702  -0.077469   0.391231  -0.0550739   0.0026100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  27  40703  -0.074668   0.391932  -0.0551337   0.0027100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  28  40704  -0.071868   0.392632  -0.0553426   0.0029130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  29  40705  -0.068968   0.393232  -0.0558004   0.0031910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   4  30  40706  -0.066168   0.393932  -0.0565332   0.0034580   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5   1  40707  -0.063267   0.394533  -0.0575021   0.0036540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5   2  40708  -0.060367   0.395133  -0.0586069   0.0037240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5   3  40709  -0.057467   0.395733  -0.0597197   0.0036460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5   4  40710  -0.054566   0.396334  -0.0606756   0.0034400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5   5  40711  -0.051666   0.396834  -0.0613934   0.0031580   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5   6  40712  -0.048666   0.397434  -0.0618092   0.0028570   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5   7  40713  -0.045766   0.397934  -0.0619461   0.0026180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5   8  40714  -0.042765   0.398435  -0.0618749   0.0024460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5   9  40715  -0.039765   0.398935  -0.0616907   0.0023820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  10  40716  -0.036865   0.399435  -0.0614876   0.0024050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  11  40717  -0.033865   0.399935  -0.0613444   0.0024970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  12  40718  -0.030864   0.400336  -0.0613062   0.0026330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  13  40719  -0.027864   0.400736  -0.0614171   0.0027790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  14  40720  -0.024864   0.401136  -0.0616819   0.0029300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  15  40721  -0.021763   0.401537  -0.0620757   0.0030510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  16  40722  -0.018763   0.401937  -0.0625666   0.0031210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  17  40723  -0.015663   0.402237  -0.0631044   0.0031230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  18  40724  -0.012663   0.402637  -0.0635953   0.0030450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  19  40725  -0.009562   0.402838  -0.0639891   0.0029000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  20  40726  -0.006462   0.403138  -0.0641849   0.0026870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  21  40727  -0.003362   0.403338  -0.0641678   0.0024700   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  22  40728  -0.000162   0.403538  -0.0639506   0.0022890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  23  40729   0.002939   0.403739  -0.0635994   0.0022190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  24  40730   0.006039   0.403939  -0.0632423   0.0022710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  25  40731   0.009239   0.404039  -0.0630021   0.0024550   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  26  40732   0.012440   0.404040  -0.0629859   0.0027010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  27  40733   0.015640   0.404140  -0.0632248   0.0029610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  28  40734   0.018840   0.404040  -0.0636956   0.0031440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  29  40735   0.022040   0.404040  -0.0642934   0.0032220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  30  40736   0.025241   0.403941  -0.0649153   0.0031680   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   5  31  40737   0.028541   0.403841  -0.0654091   0.0029940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6   1  40738   0.031741   0.403641  -0.0656870   0.0027420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6   2  40739   0.035041   0.403441  -0.0656948   0.0024760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6   3  40740   0.038342   0.403142  -0.0654586   0.0022400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6   4  40741   0.041542   0.402842  -0.0650195   0.0020660   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6   5  40742   0.044842   0.402442  -0.0644423   0.0019840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6   6  40743   0.048143   0.402043  -0.0638391   0.0019940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6   7  40744   0.051443   0.401643  -0.0632740   0.0020780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6   8  40745   0.054743   0.401143  -0.0628328   0.0022150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6   9  40746   0.058043   0.400543  -0.0625327   0.0023760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  10  40747   0.061344   0.399944  -0.0623935   0.0025260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  11  40748   0.064644   0.399244  -0.0623843   0.0026400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  12  40749   0.067944   0.398544  -0.0624682   0.0027090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  13  40750   0.071245   0.397745  -0.0625910   0.0027080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  14  40751   0.074445   0.396945  -0.0626788   0.0026480   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  15  40752   0.077745   0.396045  -0.0626817   0.0025250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  16  40753   0.081045   0.395145  -0.0625185   0.0023300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  17  40754   0.084246   0.394146  -0.0621414   0.0021030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  18  40755   0.087446   0.393046  -0.0615502   0.0018950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  19  40756   0.090646   0.391946  -0.0607780   0.0017780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  20  40757   0.093846   0.390746  -0.0599599   0.0017900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  21  40758   0.096947   0.389547  -0.0592147   0.0019430   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  22  40759   0.100047   0.388247  -0.0586875   0.0021950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  23  40760   0.103147   0.386847  -0.0584224   0.0024690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  24  40761   0.106248   0.385448  -0.0584152   0.0026800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  25  40762   0.109248   0.383948  -0.0585601   0.0027760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  26  40763   0.112248   0.382448  -0.0587379   0.0027270   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  27  40764   0.115148   0.380848  -0.0587907   0.0025620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  28  40765   0.118149   0.379149  -0.0586466   0.0023200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  29  40766   0.120949   0.377449  -0.0582324   0.0020440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   6  30  40767   0.123849   0.375649  -0.0575622   0.0018040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7   1  40768   0.126649   0.373749  -0.0566821   0.0016280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7   2  40769   0.129350   0.371850  -0.0556659   0.0015360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7   3  40770   0.132050   0.369850  -0.0546038   0.0015440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7   4  40771   0.134750   0.367850  -0.0535906   0.0016210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7   5  40772   0.137351   0.365751  -0.0526744   0.0017560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7   6  40773   0.139951   0.363551  -0.0519243   0.0019240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7   7  40774   0.142451   0.361351  -0.0513341   0.0020950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7   8  40775   0.144951   0.359051  -0.0509070   0.0022440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7   9  40776   0.147352   0.356752  -0.0506178   0.0023390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  10  40777   0.149752   0.354352  -0.0503956   0.0023870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  11  40778   0.152152   0.351952  -0.0501795   0.0023610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  12  40779   0.154452   0.349552  -0.0499143   0.0022790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  13  40780   0.156653   0.347053  -0.0495272   0.0021290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  14  40781   0.158853   0.344453  -0.0489700   0.0019400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  15  40782   0.161053   0.341853  -0.0482178   0.0017400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  16  40783   0.163154   0.339254  -0.0472867   0.0016030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  17  40784   0.165254   0.336554  -0.0462805   0.0015770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  18  40785   0.167254   0.333854  -0.0452984   0.0016850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  19  40786   0.169154   0.331154  -0.0445142   0.0019340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  20  40787   0.171055   0.328355  -0.0439980   0.0022380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  21  40788   0.172955   0.325555  -0.0437999   0.0025200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  22  40789   0.174755   0.322755  -0.0438077   0.0026700   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  23  40790   0.176555   0.319855  -0.0439026   0.0026620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  24  40791   0.178256   0.317056  -0.0438974   0.0024850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  25  40792   0.179856   0.314156  -0.0436582   0.0022050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  26  40793   0.181456   0.311256  -0.0431171   0.0019020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  27  40794   0.183057   0.308257  -0.0422829   0.0016080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  28  40795   0.184557   0.305357  -0.0411848   0.0013910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  29  40796   0.185957   0.302357  -0.0399136   0.0012710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  30  40797   0.187357   0.299457  -0.0385574   0.0012310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   7  31  40798   0.188758   0.296458  -0.0372223   0.0012800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8   1  40799   0.190058   0.293458  -0.0359591   0.0013930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8   2  40800   0.191258   0.290458  -0.0348310   0.0015350   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8   3  40801   0.192458   0.287458  -0.0338628   0.0017090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8   4  40802   0.193559   0.284559  -0.0330526   0.0018650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8   5  40803   0.194659   0.281559  -0.0323895   0.0019900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8   6  40804   0.195759   0.278559  -0.0318233   0.0020570   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8   7  40805   0.196660   0.275560  -0.0312912   0.0020590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8   8  40806   0.197660   0.272560  -0.0307280   0.0019960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8   9  40807   0.198560   0.269560  -0.0300849   0.0018880   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  10  40808   0.199360   0.266560  -0.0293117   0.0017420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  11  40809   0.200161   0.263661  -0.0283955   0.0015970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  12  40810   0.200861   0.260661  -0.0273354   0.0014840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  13  40811   0.201561   0.257661  -0.0262112   0.0014550   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  14  40812   0.202261   0.254661  -0.0251001   0.0015460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  15  40813   0.202862   0.251662  -0.0241709   0.0017890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  16  40814   0.203362   0.248662  -0.0235327   0.0021380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  17  40815   0.203862   0.245662  -0.0232736   0.0025090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  18  40816   0.204363   0.242663  -0.0233434   0.0027870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  19  40817   0.204763   0.239663  -0.0236133   0.0029120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  20  40818   0.205163   0.236663  -0.0239121   0.0028370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  21  40819   0.205463   0.233663  -0.0240560   0.0026010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  22  40820   0.205764   0.230564  -0.0239108   0.0022920   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  23  40821   0.206064   0.227564  -0.0234636   0.0019930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  24  40822   0.206264   0.224464  -0.0227495   0.0017640   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  25  40823   0.206464   0.221364  -0.0218543   0.0016320   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  26  40824   0.206565   0.218265  -0.0208672   0.0015990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  27  40825   0.206665   0.215165  -0.0198900   0.0016510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  28  40826   0.206765   0.211965  -0.0190009   0.0017690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  29  40827   0.206766   0.208866  -0.0182537   0.0019330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  30  40828   0.206766   0.205666  -0.0176815   0.0021150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   8  31  40829   0.206666   0.202466  -0.0172894   0.0022890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9   1  40830   0.206566   0.199266  -0.0170662   0.0024270   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9   2  40831   0.206467   0.195967  -0.0169441   0.0025190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9   3  40832   0.206267   0.192767  -0.0168809   0.0025330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9   4  40833   0.206067   0.189467  -0.0168078   0.0024790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9   5  40834   0.205768   0.186168  -0.0166396   0.0023660   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9   6  40835   0.205468   0.182868  -0.0163464   0.0022120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9   7  40836   0.205168   0.179568  -0.0158903   0.0020560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9   8  40837   0.204768   0.176268  -0.0152761   0.0019140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9   9  40838   0.204269   0.172869  -0.0145590   0.0018470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  10  40839   0.203869   0.169569  -0.0138248   0.0018870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  11  40840   0.203269   0.166169  -0.0131977   0.0020600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  12  40841   0.202769   0.162869  -0.0127955   0.0023450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  13  40842   0.202070   0.159470  -0.0127284   0.0027060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  14  40843   0.201470   0.156070  -0.0130192   0.0030420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  15  40844   0.200670   0.152670  -0.0135910   0.0032670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  16  40845   0.199971   0.149271  -0.0142999   0.0032990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  17  40846   0.199071   0.145871  -0.0149467   0.0031460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  18  40847   0.198171   0.142571  -0.0153696   0.0028670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  19  40848   0.197271   0.139171  -0.0154874   0.0025600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  20  40849   0.196272   0.135772  -0.0153163   0.0022900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  21  40850   0.195172   0.132472  -0.0149301   0.0021280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  22  40851   0.194072   0.129172  -0.0144290   0.0020670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  23  40852   0.192872   0.125772  -0.0139068   0.0021040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  24  40853   0.191673   0.122473  -0.0134706   0.0022160   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  25  40854   0.190373   0.119173  -0.0131645   0.0023680   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  26  40855   0.188973   0.115973  -0.0130343   0.0025550   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  27  40856   0.187474   0.112674  -0.0130922   0.0027310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  28  40857   0.185974   0.109474  -0.0133070   0.0028810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  29  40858   0.184474   0.106274  -0.0136469   0.0029710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970   9  30  40859   0.182774   0.103174  -0.0140467   0.0029960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10   1  40860   0.181075   0.099975  -0.0144246   0.0029390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10   2  40861   0.179275   0.096875  -0.0147224   0.0028260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10   3  40862   0.177375   0.093875  -0.0148813   0.0026650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10   4  40863   0.175475   0.090875  -0.0148651   0.0024930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10   5  40864   0.173476   0.087876  -0.0146829   0.0023180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10   6  40865   0.171376   0.084976  -0.0143398   0.0022100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10   7  40866   0.169276   0.082076  -0.0139526   0.0022050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10   8  40867   0.167077   0.079277  -0.0136195   0.0023280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10   9  40868   0.164777   0.076477  -0.0134583   0.0025680   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  10  40869   0.162377   0.073777  -0.0135922   0.0028790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  11  40870   0.159977   0.071077  -0.0140520   0.0032260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  12  40871   0.157478   0.068478  -0.0148319   0.0034950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  13  40872   0.154878   0.065978  -0.0158127   0.0036300   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  14  40873   0.152278   0.063578  -0.0168526   0.0035880   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  15  40874   0.149578   0.061178  -0.0177574   0.0033900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  16  40875   0.146779   0.058779  -0.0184123   0.0031040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  17  40876   0.143879   0.056579  -0.0187761   0.0028200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  18  40877   0.140979   0.054379  -0.0188870   0.0025990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  19  40878   0.138080   0.052280  -0.0188408   0.0024990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  20  40879   0.135080   0.050280  -0.0187417   0.0025110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  21  40880   0.131980   0.048280  -0.0186915   0.0026000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  22  40881   0.128880   0.046380  -0.0187723   0.0027490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  23  40882   0.125681   0.044581  -0.0190202   0.0029190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  24  40883   0.122481   0.042781  -0.0194410   0.0031030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  25  40884   0.119181   0.041181  -0.0200199   0.0032490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  26  40885   0.115981   0.039481  -0.0207347   0.0033530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  27  40886   0.112582   0.037982  -0.0215266   0.0034090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  28  40887   0.109282   0.036482  -0.0223314   0.0033870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  29  40888   0.105882   0.035082  -0.0230973   0.0033060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  30  40889   0.102483   0.033683  -0.0237431   0.0031580   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  10  31  40890   0.098983   0.032383  -0.0242210   0.0029870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11   1  40891   0.095583   0.031083  -0.0245278   0.0028200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11   2  40892   0.092083   0.029883  -0.0246967   0.0027000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11   3  40893   0.088684   0.028684  -0.0247775   0.0026690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11   4  40894   0.085184   0.027484  -0.0248814   0.0027490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11   5  40895   0.081684   0.026384  -0.0251212   0.0029390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11   6  40896   0.078184   0.025284  -0.0255971   0.0032010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11   7  40897   0.074685   0.024285  -0.0263529   0.0034900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11   8  40898   0.071185   0.023185  -0.0273738   0.0037380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11   9  40899   0.067785   0.022185  -0.0286026   0.0038700   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  10  40900   0.064286   0.021186  -0.0298945   0.0038660   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  11  40901   0.060786   0.020186  -0.0310953   0.0036930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  12  40902   0.057386   0.019286  -0.0320642   0.0034220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  13  40903   0.053986   0.018286  -0.0327370   0.0031030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  14  40904   0.050487   0.017287  -0.0331039   0.0028220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  15  40905   0.047087   0.016387  -0.0332317   0.0026330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  16  40906   0.043687   0.015387  -0.0332256   0.0025550   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  17  40907   0.040287   0.014487  -0.0331844   0.0025770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  18  40908   0.036988   0.013588  -0.0332153   0.0026710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  19  40909   0.033588   0.012588  -0.0333491   0.0028040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  20  40910   0.030288   0.011688  -0.0336360   0.0029470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  21  40911   0.026989   0.010789  -0.0340578   0.0030840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  22  40912   0.023689   0.009889  -0.0346117   0.0031870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  23  40913   0.020389   0.009089  -0.0352345   0.0032380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  24  40914   0.017089   0.008189  -0.0358764   0.0032260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  25  40915   0.013890   0.007390  -0.0364742   0.0031490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  26  40916   0.010690   0.006590  -0.0369651   0.0030040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  27  40917   0.007490   0.005790  -0.0372989   0.0028270   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  28  40918   0.004390   0.005090  -0.0374348   0.0026380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  29  40919   0.001191   0.004291  -0.0374046   0.0024810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  11  30  40920  -0.001909   0.003691  -0.0372435   0.0024020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12   1  40921  -0.005009   0.002991  -0.0370663   0.0024340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12   2  40922  -0.008108   0.002392  -0.0369702   0.0025830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12   3  40923  -0.011208   0.001892  -0.0370710   0.0028100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12   4  40924  -0.014208   0.001392  -0.0374199   0.0030780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12   5  40925  -0.017208   0.000992  -0.0380237   0.0032970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12   6  40926  -0.020207   0.000593  -0.0388016   0.0034200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12   7  40927  -0.023207   0.000293  -0.0396394   0.0034120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12   8  40928  -0.026207  -0.000007  -0.0404023   0.0032710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12   9  40929  -0.029106  -0.000206  -0.0409671   0.0030280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  10  40930  -0.032106  -0.000306  -0.0412510   0.0027360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  11  40931  -0.035006  -0.000306  -0.0412448   0.0024490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  12  40932  -0.037806  -0.000306  -0.0409917   0.0022410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  13  40933  -0.040705  -0.000205  -0.0405805   0.0021230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  14  40934  -0.043605  -0.000005  -0.0401024   0.0021170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  15  40935  -0.046405   0.000295  -0.0396423   0.0021840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  16  40936  -0.049305   0.000595  -0.0392971   0.0023120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  17  40937  -0.052104   0.001096  -0.0390900   0.0024560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  18  40938  -0.054904   0.001596  -0.0390248   0.0025990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  19  40939  -0.057704   0.002196  -0.0390867   0.0027180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  20  40940  -0.060503   0.002797  -0.0392635   0.0027980   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  21  40941  -0.063303   0.003597  -0.0394834   0.0028200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  22  40942  -0.066103   0.004397  -0.0397032   0.0027910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  23  40943  -0.068903   0.005397  -0.0398551   0.0026950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  24  40944  -0.071602   0.006398  -0.0398989   0.0025760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  25  40945  -0.074402   0.007398  -0.0398198   0.0024360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  26  40946  -0.077202   0.008598  -0.0395856   0.0023000   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  27  40947  -0.079902   0.009898  -0.0392505   0.0022250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  28  40948  -0.082701   0.011199  -0.0388893   0.0022530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  29  40949  -0.085501   0.012599  -0.0386082   0.0024060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  30  40950  -0.088201   0.014099  -0.0385581   0.0026790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1970  12  31  40951  -0.091000   0.015600  -0.0387929   0.0029840   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1   1  40952  -0.093700   0.017300  -0.0393358   0.0032610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1   2  40953  -0.096500   0.019000  -0.0401116   0.0034370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1   3  40954  -0.099200   0.020800  -0.0409825   0.0034690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1   4  40955  -0.101999   0.022601  -0.0418123   0.0033490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1   5  40956  -0.104799   0.024501  -0.0424642   0.0031230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1   6  40957  -0.107499   0.026501  -0.0428610   0.0028490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1   7  40958  -0.110199   0.028601  -0.0429859   0.0025880   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1   8  40959  -0.112998   0.030702  -0.0428777   0.0023790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1   9  40960  -0.115698   0.032902  -0.0425946   0.0022600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  10  40961  -0.118498   0.035102  -0.0422525   0.0022510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  11  40962  -0.121197   0.037403  -0.0419353   0.0023190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  12  40963  -0.123997   0.039703  -0.0417292   0.0024470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  13  40964  -0.126697   0.042103  -0.0416590   0.0026130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  14  40965  -0.129397   0.044503  -0.0417639   0.0027650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  15  40966  -0.132196   0.047004  -0.0419977   0.0028860   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  16  40967  -0.134896   0.049504  -0.0423386   0.0029580   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  17  40968  -0.137596   0.052104  -0.0427144   0.0029710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  18  40969  -0.140296   0.054704  -0.0430813   0.0029330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  19  40970  -0.142995   0.057305  -0.0433712   0.0028290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  20  40971  -0.145795   0.060005  -0.0435340   0.0026820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  21  40972  -0.148495   0.062705  -0.0435359   0.0025100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  22  40973  -0.151194   0.065406  -0.0433647   0.0023420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  23  40974  -0.153894   0.068106  -0.0430436   0.0022060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  24  40975  -0.156594   0.070906  -0.0426344   0.0021650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  25  40976  -0.159294   0.073706  -0.0422343   0.0022460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  26  40977  -0.161993   0.076507  -0.0419791   0.0024450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  27  40978  -0.164593   0.079407  -0.0419730   0.0027430   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  28  40979  -0.167293   0.082207  -0.0422789   0.0030410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  29  40980  -0.169893   0.085107  -0.0428477   0.0032560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  30  40981  -0.172492   0.088008  -0.0435596   0.0033170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   1  31  40982  -0.175092   0.090908  -0.0442434   0.0032140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2   1  40983  -0.177692   0.093808  -0.0447403   0.0029620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2   2  40984  -0.180291   0.096809  -0.0449541   0.0026410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2   3  40985  -0.182791   0.099709  -0.0448450   0.0023380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2   4  40986  -0.185291   0.102709  -0.0444619   0.0020990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2   5  40987  -0.187791   0.105609  -0.0438847   0.0019550   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2   6  40988  -0.190190   0.108610  -0.0432156   0.0019130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2   7  40989  -0.192690   0.111610  -0.0425604   0.0019700   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2   8  40990  -0.194990   0.114610  -0.0419873   0.0020930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2   9  40991  -0.197390   0.117610  -0.0415702   0.0022440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  10  40992  -0.199689   0.120711  -0.0413080   0.0024120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  11  40993  -0.201989   0.123711  -0.0412049   0.0025560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  12  40994  -0.204189   0.126811  -0.0412247   0.0026650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  13  40995  -0.206388   0.129812  -0.0413136   0.0027040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  14  40996  -0.208488   0.132912  -0.0414204   0.0026780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  15  40997  -0.210588   0.135912  -0.0414793   0.0025930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  16  40998  -0.212588   0.139012  -0.0414202   0.0024720   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  17  40999  -0.214587   0.142113  -0.0412240   0.0023040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  18  41000  -0.216487   0.145213  -0.0408469   0.0021440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  19  41001  -0.218287   0.148413  -0.0403297   0.0020220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  20  41002  -0.220087   0.151513  -0.0397226   0.0019560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  21  41003  -0.221886   0.154614  -0.0390985   0.0020060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  22  41004  -0.223486   0.157814  -0.0385973   0.0021830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  23  41005  -0.225086   0.161014  -0.0383242   0.0024770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  24  41006  -0.226585   0.164115  -0.0383810   0.0028400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  25  41007  -0.228085   0.167415  -0.0387929   0.0031690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  26  41008  -0.229485   0.170615  -0.0394858   0.0033810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  27  41009  -0.230785   0.173815  -0.0403006   0.0034060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   2  28  41010  -0.231984   0.177116  -0.0410565   0.0032600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3   1  41011  -0.233084   0.180316  -0.0416003   0.0029950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3   2  41012  -0.234184   0.183616  -0.0418482   0.0027020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3   3  41013  -0.235083   0.186917  -0.0418231   0.0024630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3   4  41014  -0.235983   0.190317  -0.0416169   0.0023350   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3   5  41015  -0.236783   0.193617  -0.0413508   0.0023200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3   6  41016  -0.237483   0.197017  -0.0410996   0.0023940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3   7  41017  -0.238082   0.200418  -0.0409725   0.0025500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3   8  41018  -0.238682   0.203918  -0.0410244   0.0027390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3   9  41019  -0.239082   0.207318  -0.0412642   0.0029420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  10  41020  -0.239382   0.210818  -0.0417231   0.0031330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  11  41021  -0.239681   0.214319  -0.0423469   0.0032860   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  12  41022  -0.239881   0.217819  -0.0430968   0.0033830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  13  41023  -0.239881   0.221419  -0.0439007   0.0034050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  14  41024  -0.239880   0.224920  -0.0446955   0.0033540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  15  41025  -0.239780   0.228520  -0.0454114   0.0032500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  16  41026  -0.239680   0.232120  -0.0460053   0.0031040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  17  41027  -0.239380   0.235720  -0.0464471   0.0029610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  18  41028  -0.238979   0.239321  -0.0467430   0.0028280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  19  41029  -0.238579   0.243021  -0.0469308   0.0027390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  20  41030  -0.238079   0.246621  -0.0470687   0.0027350   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  21  41031  -0.237579   0.250221  -0.0472596   0.0028540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  22  41032  -0.236978   0.253822  -0.0476264   0.0030810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  23  41033  -0.236278   0.257522  -0.0482703   0.0034070   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  24  41034  -0.235478   0.261122  -0.0492471   0.0037430   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  25  41035  -0.234677   0.264723  -0.0505520   0.0040160   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  26  41036  -0.233877   0.268323  -0.0520369   0.0041230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  27  41037  -0.232977   0.271823  -0.0535437   0.0040390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  28  41038  -0.231977   0.275423  -0.0548786   0.0037890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  29  41039  -0.231076   0.278924  -0.0559035   0.0034450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  30  41040  -0.230076   0.282424  -0.0565833   0.0031130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   3  31  41041  -0.228976   0.285924  -0.0569792   0.0028800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4   1  41042  -0.227976   0.289424  -0.0571931   0.0027580   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4   2  41043  -0.226875   0.292825  -0.0573539   0.0027510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4   3  41044  -0.225775   0.296125  -0.0575438   0.0028290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4   4  41045  -0.224675   0.299525  -0.0578476   0.0029560   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4   5  41046  -0.223474   0.302826  -0.0582805   0.0031010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4   6  41047  -0.222374   0.306026  -0.0588664   0.0032400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4   7  41048  -0.221174   0.309226  -0.0595802   0.0033500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4   8  41049  -0.220074   0.312326  -0.0603691   0.0034110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4   9  41050  -0.218873   0.315427  -0.0612010   0.0034210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  10  41051  -0.217673   0.318527  -0.0619998   0.0033570   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  11  41052  -0.216473   0.321527  -0.0627157   0.0032360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  12  41053  -0.215373   0.324427  -0.0632786   0.0030760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  13  41054  -0.214172   0.327328  -0.0636824   0.0029010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  14  41055  -0.212972   0.330228  -0.0639153   0.0027500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  15  41056  -0.211772   0.333028  -0.0640082   0.0026350   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  16  41057  -0.210571   0.335729  -0.0640210   0.0025960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  17  41058  -0.209371   0.338429  -0.0640409   0.0026530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  18  41059  -0.208171   0.341129  -0.0641727   0.0028060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  19  41060  -0.206971   0.343729  -0.0645046   0.0030600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  20  41061  -0.205770   0.346230  -0.0651265   0.0033590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  21  41062  -0.204470   0.348830  -0.0660423   0.0036420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  22  41063  -0.203270   0.351230  -0.0671852   0.0038210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  23  41064  -0.201970   0.353730  -0.0684391   0.0038370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  24  41065  -0.200669   0.356131  -0.0696299   0.0036900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  25  41066  -0.199369   0.358531  -0.0705958   0.0034170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  26  41067  -0.198069   0.360931  -0.0712607   0.0031030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  27  41068  -0.196668   0.363332  -0.0716295   0.0028390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  28  41069  -0.195268   0.365632  -0.0717954   0.0026950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  29  41070  -0.193868   0.367932  -0.0718823   0.0026770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   4  30  41071  -0.192368   0.370232  -0.0719931   0.0027520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5   1  41072  -0.190867   0.372533  -0.0722260   0.0029010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5   2  41073  -0.189267   0.374833  -0.0726219   0.0030740   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5   3  41074  -0.187667   0.377133  -0.0731917   0.0032420   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5   4  41075  -0.186067   0.379433  -0.0739076   0.0033740   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5   5  41076  -0.184266   0.381634  -0.0747455   0.0034730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5   6  41077  -0.182566   0.383934  -0.0756443   0.0035060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5   7  41078  -0.180666   0.386234  -0.0765462   0.0034780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5   8  41079  -0.178765   0.388435  -0.0773911   0.0033820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5   9  41080  -0.176765   0.390735  -0.0781159   0.0032520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  10  41081  -0.174765   0.393035  -0.0786888   0.0030900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  11  41082  -0.172565   0.395235  -0.0791087   0.0029340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  12  41083  -0.170364   0.397536  -0.0793895   0.0028170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  13  41084  -0.168064   0.399736  -0.0795744   0.0027590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  14  41085  -0.165664   0.402036  -0.0797563   0.0028030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  15  41086  -0.163264   0.404236  -0.0800341   0.0029370   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  16  41087  -0.160663   0.406437  -0.0804880   0.0031540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  17  41088  -0.158063   0.408637  -0.0811769   0.0034170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  18  41089  -0.155363   0.410937  -0.0821278   0.0036600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  19  41090  -0.152562   0.413138  -0.0832916   0.0038310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  20  41091  -0.149662   0.415338  -0.0845675   0.0038660   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  21  41092  -0.146662   0.417438  -0.0858024   0.0037610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  22  41093  -0.143662   0.419638  -0.0868532   0.0035150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  23  41094  -0.140461   0.421739  -0.0876271   0.0031950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  24  41095  -0.137261   0.423839  -0.0880670   0.0028940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  25  41096  -0.133961   0.425939  -0.0882408   0.0026620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  26  41097  -0.130560   0.428040  -0.0882417   0.0025500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  27  41098  -0.127060   0.430040  -0.0881906   0.0025440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  28  41099  -0.123460   0.432040  -0.0881864   0.0026310   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  29  41100  -0.119860   0.433940  -0.0882743   0.0027470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  30  41101  -0.116159   0.435941  -0.0884912   0.0028730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   5  31  41102  -0.112359   0.437741  -0.0888221   0.0029730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6   1  41103  -0.108559   0.439641  -0.0892429   0.0030400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6   2  41104  -0.104559   0.441341  -0.0896938   0.0030440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6   3  41105  -0.100658   0.443142  -0.0901297   0.0029980   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6   4  41106  -0.096558   0.444742  -0.0904915   0.0028960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6   5  41107  -0.092458   0.446442  -0.0907164   0.0027470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6   6  41108  -0.088357   0.447943  -0.0907863   0.0025710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6   7  41109  -0.084157   0.449543  -0.0906762   0.0024020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6   8  41110  -0.079857   0.450943  -0.0904100   0.0022520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6   9  41111  -0.075557   0.452343  -0.0900219   0.0021750   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  10  41112  -0.071256   0.453644  -0.0895908   0.0021790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  11  41113  -0.066856   0.454944  -0.0892246   0.0022860   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  12  41114  -0.062556   0.456144  -0.0890115   0.0024810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  13  41115  -0.058056   0.457244  -0.0890234   0.0027260   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  14  41116  -0.053655   0.458245  -0.0892692   0.0029610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  15  41117  -0.049155   0.459245  -0.0897311   0.0031270   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  16  41118  -0.044655   0.460145  -0.0903050   0.0031790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  17  41119  -0.040154   0.460946  -0.0908639   0.0030970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  18  41120  -0.035654   0.461746  -0.0912777   0.0028950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  19  41121  -0.031154   0.462346  -0.0914476   0.0026180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  20  41122  -0.026654   0.462946  -0.0913305   0.0023290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  21  41123  -0.022153   0.463447  -0.0909444   0.0021030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  22  41124  -0.017553   0.463947  -0.0903792   0.0019670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  23  41125  -0.013053   0.464247  -0.0897271   0.0019460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  24  41126  -0.008553   0.464547  -0.0891240   0.0020330   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  25  41127  -0.004052   0.464748  -0.0886308   0.0021760   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  26  41128   0.000448   0.464848  -0.0882917   0.0023240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  27  41129   0.004848   0.464848  -0.0881016   0.0024600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  28  41130   0.009349   0.464849  -0.0880165   0.0025530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  29  41131   0.013749   0.464649  -0.0879973   0.0025890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   6  30  41132   0.018249   0.464449  -0.0879842   0.0025650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7   1  41133   0.022549   0.464149  -0.0879291   0.0024950   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7   2  41134   0.026950   0.463750  -0.0877780   0.0023770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7   3  41135   0.031250   0.463250  -0.0874908   0.0022270   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7   4  41136   0.035550   0.462650  -0.0870487   0.0020790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7   5  41137   0.039850   0.462050  -0.0864636   0.0019390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7   6  41138   0.044051   0.461351  -0.0857635   0.0018610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7   7  41139   0.048251   0.460551  -0.0850223   0.0018660   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7   8  41140   0.052451   0.459651  -0.0843502   0.0019770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7   9  41141   0.056552   0.458652  -0.0838411   0.0022020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  10  41142   0.060652   0.457652  -0.0835870   0.0024860   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  11  41143   0.064652   0.456552  -0.0836358   0.0027860   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  12  41144   0.068652   0.455352  -0.0839467   0.0030190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  13  41145   0.072553   0.454053  -0.0844526   0.0031290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  14  41146   0.076453   0.452753  -0.0849755   0.0030940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  15  41147   0.080353   0.451353  -0.0854073   0.0029220   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  16  41148   0.084153   0.449853  -0.0856142   0.0026740   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  17  41149   0.087954   0.448354  -0.0855611   0.0024120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  18  41150   0.091754   0.446854  -0.0852650   0.0021870   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  19  41151   0.095454   0.445154  -0.0847838   0.0020500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  20  41152   0.099055   0.443555  -0.0842197   0.0020210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  21  41153   0.102755   0.441755  -0.0836676   0.0020810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  22  41154   0.106355   0.440055  -0.0832145   0.0022020   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  23  41155   0.109955   0.438255  -0.0828923   0.0023530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  24  41156   0.113456   0.436356  -0.0827282   0.0025050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  25  41157   0.116956   0.434456  -0.0826981   0.0026070   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  26  41158   0.120456   0.432556  -0.0827430   0.0026630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  27  41159   0.123856   0.430556  -0.0828128   0.0026450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  28  41160   0.127357   0.428557  -0.0828227   0.0025670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  29  41161   0.130757   0.426557  -0.0827486   0.0024480   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  30  41162   0.134057   0.424557  -0.0825165   0.0022940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   7  31  41163   0.137358   0.422458  -0.0821333   0.0021180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8   1  41164   0.140658   0.420358  -0.0815852   0.0019620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8   2  41165   0.143958   0.418258  -0.0808891   0.0018450   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8   3  41166   0.147258   0.416158  -0.0801190   0.0018090   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8   4  41167   0.150459   0.413959  -0.0793499   0.0018620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8   5  41168   0.153559   0.411759  -0.0787007   0.0020360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8   6  41169   0.156759   0.409559  -0.0782736   0.0023140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8   7  41170   0.159859   0.407359  -0.0781525   0.0026240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8   8  41171   0.162960   0.405160  -0.0783294   0.0029050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8   9  41172   0.165960   0.402860  -0.0787432   0.0030680   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  10  41173   0.168960   0.400560  -0.0792291   0.0030670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  11  41174   0.171861   0.398261  -0.0796340   0.0029080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  12  41175   0.174761   0.395961  -0.0798199   0.0026440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  13  41176   0.177661   0.393661  -0.0797318   0.0023620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  14  41177   0.180461   0.391261  -0.0793796   0.0021250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  15  41178   0.183162   0.388862  -0.0788445   0.0019910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  16  41179   0.185862   0.386462  -0.0782184   0.0019670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  17  41180   0.188462   0.384062  -0.0776213   0.0020430   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  18  41181   0.191063   0.381563  -0.0771412   0.0021960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  19  41182   0.193563   0.379063  -0.0768360   0.0023890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  20  41183   0.196063   0.376563  -0.0767289   0.0025860   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  21  41184   0.198463   0.373963  -0.0768088   0.0027540   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  22  41185   0.200764   0.371364  -0.0770407   0.0028710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  23  41186   0.202964   0.368764  -0.0773476   0.0029230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  24  41187   0.205164   0.366064  -0.0776854   0.0029110   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  25  41188   0.207264   0.363364  -0.0779603   0.0028320   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  26  41189   0.209265   0.360565  -0.0781562   0.0027240   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  27  41190   0.211165   0.357765  -0.0782121   0.0025880   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  28  41191   0.213065   0.354965  -0.0781540   0.0024580   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  29  41192   0.214766   0.352066  -0.0779698   0.0023590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  30  41193   0.216466   0.349066  -0.0777117   0.0023170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   8  31  41194   0.218066   0.346066  -0.0774516   0.0023600   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9   1  41195   0.219566   0.343066  -0.0772865   0.0024970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9   2  41196   0.221067   0.339967  -0.0773004   0.0027400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9   3  41197   0.222367   0.336767  -0.0776002   0.0030470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9   4  41198   0.223667   0.333567  -0.0782181   0.0033630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9   5  41199   0.224867   0.330267  -0.0791190   0.0035990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9   6  41200   0.225968   0.326968  -0.0801739   0.0036800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9   7  41201   0.226968   0.323568  -0.0812178   0.0035690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9   8  41202   0.227868   0.320168  -0.0820797   0.0033160   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9   9  41203   0.228669   0.316669  -0.0826455   0.0029900   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  10  41204   0.229469   0.313169  -0.0828774   0.0026750   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  11  41205   0.230169   0.309569  -0.0828463   0.0024510   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  12  41206   0.230769   0.305969  -0.0826492   0.0023580   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  13  41207   0.231270   0.302270  -0.0824201   0.0023790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  14  41208   0.231770   0.298570  -0.0822549   0.0024830   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  15  41209   0.232070   0.294870  -0.0822218   0.0026340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  16  41210   0.232370   0.291070  -0.0823467   0.0027960   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  17  41211   0.232571   0.287271  -0.0826266   0.0029490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  18  41212   0.232771   0.283371  -0.0830395   0.0030590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  19  41213   0.232871   0.279471  -0.0835444   0.0031200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  20  41214   0.232872   0.275572  -0.0840782   0.0031170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  21  41215   0.232772   0.271672  -0.0845681   0.0030530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  22  41216   0.232672   0.267672  -0.0849790   0.0029530   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  23  41217   0.232472   0.263772  -0.0852749   0.0028280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  24  41218   0.232173   0.259773  -0.0854448   0.0027040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  25  41219   0.231873   0.255773  -0.0854997   0.0026150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  26  41220   0.231473   0.251773  -0.0854996   0.0025750   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  27  41221   0.231073   0.247873  -0.0854934   0.0026060   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  28  41222   0.230574   0.243874  -0.0855623   0.0027280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  29  41223   0.230074   0.239874  -0.0857932   0.0029400   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971   9  30  41224   0.229474   0.235974  -0.0862921   0.0032500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10   1  41225   0.228875   0.231975  -0.0871270   0.0036040   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10   2  41226   0.228175   0.228075  -0.0882999   0.0039190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10   3  41227   0.227475   0.224175  -0.0897287   0.0041150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10   4  41228   0.226675   0.220275  -0.0912916   0.0041500   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10   5  41229   0.225876   0.216376  -0.0927785   0.0039970   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10   6  41230   0.224976   0.212476  -0.0940634   0.0037190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10   7  41231   0.224076   0.208676  -0.0950353   0.0034080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10   8  41232   0.223176   0.204876  -0.0957112   0.0031590   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10   9  41233   0.222177   0.201077  -0.0961941   0.0030200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  10  41234   0.221177   0.197277  -0.0966039   0.0030010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  11  41235   0.220077   0.193577  -0.0970498   0.0030850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  12  41236   0.219078   0.189878  -0.0976117   0.0032250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  13  41237   0.217878   0.186178  -0.0983246   0.0033910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  14  41238   0.216778   0.182578  -0.0991985   0.0035320   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  15  41239   0.215578   0.178978  -0.1001964   0.0036350   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  16  41240   0.214379   0.175379  -0.1012623   0.0036780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  17  41241   0.213079   0.171879  -0.1023511   0.0036800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  18  41242   0.211879   0.168379  -0.1034120   0.0036120   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  19  41243   0.210579   0.164979  -0.1043779   0.0035030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  20  41244   0.209180   0.161480  -0.1052178   0.0033630   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  21  41245   0.207880   0.158180  -0.1059107   0.0032170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  22  41246   0.206480   0.154780  -0.1064766   0.0030890   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  23  41247   0.205081   0.151481  -0.1069245   0.0030050   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  24  41248   0.203681   0.148281  -0.1073184   0.0029860   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  25  41249   0.202181   0.145081  -0.1077312   0.0030470   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  26  41250   0.200781   0.141981  -0.1082611   0.0032070   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  27  41251   0.199282   0.138882  -0.1089830   0.0034380   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  28  41252   0.197782   0.135782  -0.1099669   0.0037250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  29  41253   0.196282   0.132782  -0.1112448   0.0040170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  30  41254   0.194682   0.129882  -0.1127987   0.0042460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  10  31  41255   0.193183   0.126983  -0.1145136   0.0043480   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11   1  41256   0.191583   0.124183  -0.1162485   0.0042850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11   2  41257   0.189983   0.121383  -0.1178534   0.0040730   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11   3  41258   0.188284   0.118684  -0.1191862   0.0037790   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11   4  41259   0.186684   0.115984  -0.1202131   0.0034850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11   5  41260   0.184984   0.113384  -0.1209970   0.0032930   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11   6  41261   0.183284   0.110784  -0.1216549   0.0032230   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11   7  41262   0.181585   0.108285  -0.1223158   0.0032860   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11   8  41263   0.179785   0.105785  -0.1230727   0.0034170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11   9  41264   0.177985   0.103385  -0.1239776   0.0035850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  10  41265   0.176186   0.100986  -0.1250365   0.0037290   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  11  41266   0.174286   0.098686  -0.1262324   0.0038250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  12  41267   0.172486   0.096386  -0.1274883   0.0038710   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  13  41268   0.170486   0.094186  -0.1287741   0.0038610   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  14  41269   0.168587   0.091987  -0.1300110   0.0037940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  15  41270   0.166587   0.089887  -0.1311669   0.0036780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  16  41271   0.164587   0.087787  -0.1321648   0.0035150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  17  41272   0.162487   0.085787  -0.1330007   0.0033390   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  18  41273   0.160388   0.083688  -0.1336556   0.0031650   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  19  41274   0.158288   0.081788  -0.1341535   0.0030190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  20  41275   0.156088   0.079788  -0.1345434   0.0029440   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  21  41276   0.153889   0.077889  -0.1348853   0.0029460   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  22  41277   0.151589   0.075989  -0.1352622   0.0030210   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  23  41278   0.149289   0.074189  -0.1357731   0.0031820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  24  41279   0.146989   0.072389  -0.1364629   0.0033940   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  25  41280   0.144590   0.070590  -0.1373748   0.0036080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  26  41281   0.142190   0.068790  -0.1384947   0.0038010   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  27  41282   0.139690   0.066990  -0.1397546   0.0038910   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  28  41283   0.137190   0.065290  -0.1410415   0.0038490   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  29  41284   0.134591   0.063591  -0.1422264   0.0036810   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  11  30  41285   0.131991   0.061791  -0.1431903   0.0034130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12   1  41286   0.129391   0.060091  -0.1438632   0.0031150   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12   2  41287   0.126692   0.058492  -0.1442481   0.0028690   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12   3  41288   0.123992   0.056792  -0.1444490   0.0027340   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12   4  41289   0.121192   0.055092  -0.1445799   0.0027280   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12   5  41290   0.118392   0.053492  -0.1447678   0.0028320   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12   6  41291   0.115493   0.051893  -0.1450797   0.0029850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12   7  41292   0.112593   0.050293  -0.1455376   0.0031250   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12   8  41293   0.109693   0.048693  -0.1461374   0.0032360   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12   9  41294   0.106693   0.047093  -0.1468013   0.0032820   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  10  41295   0.103694   0.045494  -0.1475012   0.0032780   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  11  41296   0.100694   0.043994  -0.1481581   0.0032180   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  12  41297   0.097594   0.042394  -0.1487310   0.0030990   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  13  41298   0.094495   0.040895  -0.1491629   0.0029520   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  14  41299   0.091295   0.039495  -0.1494378   0.0027770   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  15  41300   0.088095   0.037995  -0.1495377   0.0026170   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  16  41301   0.084895   0.036595  -0.1494826   0.0024800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  17  41302   0.081696   0.035196  -0.1493365   0.0024080   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  18  41303   0.078396   0.033796  -0.1491444   0.0024030   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  19  41304   0.075096   0.032496  -0.1489903   0.0024920   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  20  41305   0.071796   0.031196  -0.1489652   0.0026620   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  21  41306   0.068397   0.029897  -0.1491511   0.0028850   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  22  41307   0.065097   0.028697  -0.1495580   0.0031190   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  23  41308   0.061697   0.027497  -0.1501849   0.0033130   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  24  41309   0.058198   0.026298  -0.1509658   0.0034200   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  25  41310   0.054798   0.025198  -0.1517957   0.0034100   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  26  41311   0.051298   0.024198  -0.1525556   0.0032800   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  27  41312   0.047898   0.023098  -0.1531444   0.0030670   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  28  41313   0.044399   0.022099  -0.1534953   0.0028140   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  29  41314   0.040899   0.021199  -0.1535992   0.0025860   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  30  41315   0.037399   0.020299  -0.1535161   0.0024550   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1971  12  31  41316   0.033899   0.019499  -0.1533590   0.0024410   0.000000   0.000000   0.020000   0.020000  0.0015000  0.0010000    0.003580    0.002000
+1972   1   1  41317   0.030400   0.018700  -0.0454859   0.0025390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1   2  41318   0.026900   0.017900  -0.0481008   0.0027080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1   3  41319   0.023300   0.017200  -0.0509077   0.0028970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1   4  41320   0.019801   0.016501  -0.0538936   0.0030650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1   5  41321   0.016301   0.015901  -0.0570195   0.0031770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1   6  41322   0.012801   0.015301  -0.0602134   0.0032200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1   7  41323   0.009301   0.014801  -0.0634283   0.0032010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1   8  41324   0.005902   0.014302  -0.0665972   0.0031370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1   9  41325   0.002402   0.013902  -0.0696791   0.0030330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  10  41326  -0.001098   0.013502  -0.0726460   0.0028980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  11  41327  -0.004498   0.013202  -0.0754839   0.0027720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  12  41328  -0.007897   0.012903  -0.0782088   0.0026720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  13  41329  -0.011297   0.012703  -0.0808457   0.0026210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  14  41330  -0.014597   0.012503  -0.0834756   0.0026420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  15  41331  -0.017996   0.012304  -0.0861595   0.0027400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  16  41332  -0.021296   0.012204  -0.0889954   0.0029370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  17  41333  -0.024596   0.012104  -0.0920563   0.0031830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  18  41334  -0.027796   0.012104  -0.0953802   0.0034650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  19  41335  -0.030995   0.012105  -0.0989651   0.0037040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  20  41336  -0.034195   0.012105  -0.1027570   0.0038620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  21  41337  -0.037295   0.012205  -0.1066459   0.0038820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  22  41338  -0.040395   0.012305  -0.1104778   0.0037730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  23  41339  -0.043494   0.012406  -0.1141587   0.0035680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  24  41340  -0.046494   0.012606  -0.1176086   0.0033210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  25  41341  -0.049494   0.012806  -0.1208075   0.0030950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  26  41342  -0.052393   0.013007  -0.1238134   0.0029340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  27  41343  -0.055293   0.013307  -0.1267113   0.0028890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  28  41344  -0.058193   0.013607  -0.1296192   0.0029450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  29  41345  -0.060993   0.013907  -0.1326401   0.0030960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  30  41346  -0.063692   0.014208  -0.1358340   0.0032870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   1  31  41347  -0.066392   0.014608  -0.1392209   0.0034690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2   1  41348  -0.069092   0.015008  -0.1427668   0.0036140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2   2  41349  -0.071791   0.015509  -0.1464147   0.0036790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2   3  41350  -0.074491   0.016009  -0.1501106   0.0036820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2   4  41351  -0.077091   0.016609  -0.1537675   0.0036120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2   5  41352  -0.079591   0.017109  -0.1573194   0.0034950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2   6  41353  -0.082090   0.017810  -0.1607483   0.0033500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2   7  41354  -0.084590   0.018510  -0.1640172   0.0031890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2   8  41355  -0.087090   0.019210  -0.1671311   0.0030460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2   9  41356  -0.089490   0.020010  -0.1701220   0.0029350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  10  41357  -0.091889   0.020811  -0.1730219   0.0028780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  11  41358  -0.094189   0.021811  -0.1759038   0.0029130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  12  41359  -0.096489   0.022811  -0.1788787   0.0030400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  13  41360  -0.098688   0.023812  -0.1820136   0.0032430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  14  41361  -0.100888   0.024912  -0.1853935   0.0035100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  15  41362  -0.103088   0.026112  -0.1890314   0.0037720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  16  41363  -0.105288   0.027412  -0.1929123   0.0039600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  17  41364  -0.107487   0.028813  -0.1969072   0.0040150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  18  41365  -0.109687   0.030213  -0.2008901   0.0039160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  19  41366  -0.111887   0.031713  -0.2047060   0.0037000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  20  41367  -0.114087   0.033413  -0.2082679   0.0034110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  21  41368  -0.116286   0.035014  -0.2115408   0.0031420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  22  41369  -0.118386   0.036814  -0.2145778   0.0029480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  23  41370  -0.120486   0.038714  -0.2174737   0.0028720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  24  41371  -0.122585   0.040615  -0.2203586   0.0029070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  25  41372  -0.124685   0.042715  -0.2233065   0.0030310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  26  41373  -0.126785   0.044915  -0.2264074   0.0032070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  27  41374  -0.128885   0.047215  -0.2296923   0.0033910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  28  41375  -0.130984   0.049616  -0.2331582   0.0035450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   2  29  41376  -0.133084   0.052016  -0.2367521   0.0036500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3   1  41377  -0.135284   0.054516  -0.2403950   0.0036530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3   2  41378  -0.137584   0.057016  -0.2440249   0.0036070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3   3  41379  -0.139883   0.059517  -0.2475898   0.0035050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3   4  41380  -0.142083   0.062117  -0.2510217   0.0033660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3   5  41381  -0.144383   0.064817  -0.2543156   0.0032130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3   6  41382  -0.146582   0.067518  -0.2574615   0.0030720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3   7  41383  -0.148682   0.070418  -0.2604714   0.0029640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3   8  41384  -0.150882   0.073318  -0.2633983   0.0029010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3   9  41385  -0.152882   0.076218  -0.2662972   0.0029110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  10  41386  -0.154981   0.079219  -0.2692491   0.0030080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  11  41387  -0.156981   0.082319  -0.2723520   0.0032030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  12  41388  -0.158881   0.085419  -0.2756800   0.0034630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  13  41389  -0.160781   0.088619  -0.2792889   0.0037550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  14  41390  -0.162580   0.091820  -0.2831778   0.0040120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  15  41391  -0.164380   0.095020  -0.2872767   0.0041620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  16  41392  -0.166080   0.098320  -0.2914486   0.0041550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  17  41393  -0.167679   0.101621  -0.2955415   0.0039880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  18  41394  -0.169279   0.105021  -0.2993964   0.0037120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  19  41395  -0.170879   0.108321  -0.3029563   0.0034110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  20  41396  -0.172379   0.111721  -0.3062392   0.0031690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  21  41397  -0.173778   0.115122  -0.3093421   0.0030380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  22  41398  -0.175078   0.118622  -0.3123650   0.0030290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  23  41399  -0.176478   0.122022  -0.3154329   0.0031190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  24  41400  -0.177678   0.125522  -0.3186218   0.0032660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  25  41401  -0.178877   0.128923  -0.3219687   0.0034290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  26  41402  -0.180077   0.132423  -0.3254717   0.0035710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  27  41403  -0.181077   0.135923  -0.3290956   0.0036670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  28  41404  -0.182176   0.139424  -0.3327855   0.0037120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  29  41405  -0.183176   0.142824  -0.3364864   0.0036790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  30  41406  -0.184076   0.146324  -0.3401333   0.0035960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   3  31  41407  -0.184976   0.149824  -0.3436732   0.0034690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4   1  41408  -0.185775   0.153225  -0.3470731   0.0033310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4   2  41409  -0.186575   0.156725  -0.3503250   0.0031860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4   3  41410  -0.187275   0.160125  -0.3534539   0.0030780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4   4  41411  -0.187975   0.163525  -0.3564968   0.0030180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4   5  41412  -0.188574   0.167026  -0.3595117   0.0030230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4   6  41413  -0.189074   0.170326  -0.3625677   0.0031020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4   7  41414  -0.189574   0.173726  -0.3657436   0.0032630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4   8  41415  -0.190073   0.177127  -0.3691205   0.0034910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4   9  41416  -0.190473   0.180427  -0.3727434   0.0037710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  10  41417  -0.190773   0.183727  -0.3766533   0.0040550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  11  41418  -0.191073   0.187027  -0.3808232   0.0042680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  12  41419  -0.191372   0.190328  -0.3851471   0.0043550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  13  41420  -0.191572   0.193528  -0.3894780   0.0042790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  14  41421  -0.191672   0.196728  -0.3936569   0.0040500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  15  41422  -0.191772   0.199928  -0.3975619   0.0037450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  16  41423  -0.191771   0.203029  -0.4011628   0.0034570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  17  41424  -0.191771   0.206129  -0.4045077   0.0032530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  18  41425  -0.191671   0.209229  -0.4077136   0.0031800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  19  41426  -0.191570   0.212330  -0.4109075   0.0032250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  20  41427  -0.191370   0.215330  -0.4141874   0.0033420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  21  41428  -0.191170   0.218330  -0.4175983   0.0034800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  22  41429  -0.190870   0.221230  -0.4211392   0.0035980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  23  41430  -0.190569   0.224231  -0.4247781   0.0036720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  24  41431  -0.190169   0.227131  -0.4284641   0.0036900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  25  41432  -0.189769   0.229931  -0.4321390   0.0036480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  26  41433  -0.189268   0.232732  -0.4357519   0.0035590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  27  41434  -0.188668   0.235532  -0.4392418   0.0034240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  28  41435  -0.188168   0.238332  -0.4425917   0.0032620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  29  41436  -0.187468   0.241032  -0.4457746   0.0031070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   4  30  41437  -0.186867   0.243733  -0.4488115   0.0029730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5   1  41438  -0.186067   0.246433  -0.4517355   0.0028830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5   2  41439  -0.185267   0.249033  -0.4545874   0.0028520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5   3  41440  -0.184467   0.251633  -0.4574613   0.0029000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5   4  41441  -0.183566   0.254134  -0.4604112   0.0030200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5   5  41442  -0.182666   0.256734  -0.4635241   0.0032180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5   6  41443  -0.181666   0.259234  -0.4668640   0.0034590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5   7  41444  -0.180665   0.261635  -0.4704579   0.0037300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5   8  41445  -0.179565   0.264035  -0.4743259   0.0039740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5   9  41446  -0.178365   0.266435  -0.4783888   0.0041340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  10  41447  -0.177165   0.268835  -0.4825487   0.0041620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  11  41448  -0.175964   0.271136  -0.4866536   0.0040360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  12  41449  -0.174664   0.273436  -0.4905835   0.0038110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  13  41450  -0.173264   0.275736  -0.4942744   0.0035530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  14  41451  -0.171864   0.278036  -0.4977083   0.0033320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  15  41452  -0.170363   0.280237  -0.5009773   0.0032280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  16  41453  -0.168863   0.282437  -0.5042002   0.0032470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  17  41454  -0.167263   0.284637  -0.5074951   0.0033440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  18  41455  -0.165562   0.286838  -0.5109020   0.0034810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  19  41456  -0.163862   0.288938  -0.5144409   0.0036020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  20  41457  -0.162162   0.291038  -0.5180888   0.0036830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  21  41458  -0.160362   0.293138  -0.5217768   0.0036930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  22  41459  -0.158461   0.295239  -0.5254537   0.0036420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  23  41460  -0.156561   0.297339  -0.5290426   0.0035270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  24  41461  -0.154561   0.299439  -0.5325015   0.0033770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  25  41462  -0.152561   0.301539  -0.5357864   0.0031980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  26  41463  -0.150460   0.303540  -0.5388853   0.0030020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  27  41464  -0.148360   0.305640  -0.5418043   0.0028310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  28  41465  -0.146160   0.307640  -0.5445712   0.0027000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  29  41466  -0.143959   0.309641  -0.5472231   0.0026260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  30  41467  -0.141759   0.311741  -0.5498350   0.0026210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   5  31  41468  -0.139359   0.313741  -0.5524879   0.0026860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6   1  41469  -0.137059   0.315741  -0.5552298   0.0028150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6   2  41470  -0.134658   0.317742  -0.5581348   0.0030010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6   3  41471  -0.132258   0.319842  -0.5612377   0.0031960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6   4  41472  -0.129758   0.321842  -0.5645296   0.0033820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6   5  41473  -0.127358   0.323842  -0.5679805   0.0034970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6   6  41474  -0.124757   0.325843  -0.5714994   0.0035210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6   7  41475  -0.122257   0.327843  -0.5749814   0.0034240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6   8  41476  -0.119657   0.329843  -0.5783093   0.0032170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6   9  41477  -0.117056   0.331844  -0.5813852   0.0029510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  10  41478  -0.114356   0.333744  -0.5842071   0.0026910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  11  41479  -0.111756   0.335744  -0.5868070   0.0025280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  12  41480  -0.109056   0.337744  -0.5893159   0.0024920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  13  41481  -0.106355   0.339745  -0.5918409   0.0025750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  14  41482  -0.103555   0.341645  -0.5944888   0.0027270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  15  41483  -0.100755   0.343645  -0.5972967   0.0028840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  16  41484  -0.098055   0.345545  -0.6002416   0.0029850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  17  41485  -0.095254   0.347446  -0.6032425   0.0030250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  18  41486  -0.092354   0.349346  -0.6062565   0.0029820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  19  41487  -0.089554   0.351346  -0.6091954   0.0028880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  20  41488  -0.086653   0.353147  -0.6120173   0.0027480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  21  41489  -0.083753   0.355047  -0.6146922   0.0025790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  22  41490  -0.080853   0.356947  -0.6171812   0.0023980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  23  41491  -0.077953   0.358747  -0.6194931   0.0022390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  24  41492  -0.075052   0.360648  -0.6216600   0.0021140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  25  41493  -0.072052   0.362448  -0.6237279   0.0020440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  26  41494  -0.069152   0.364248  -0.6257598   0.0020420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  27  41495  -0.066152   0.366048  -0.6278378   0.0021250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  28  41496  -0.063151   0.367749  -0.6300337   0.0022760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  29  41497  -0.060151   0.369549  -0.6324066   0.0024770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   6  30  41498  -0.057151   0.371249  -0.6349935   0.0027070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7   1  41499  -0.054050   0.372950   0.3621956   0.0029080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7   2  41500  -0.051050   0.374550   0.3592006   0.0030580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7   3  41501  -0.047950   0.376250   0.3561097   0.0031050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7   4  41502  -0.044950   0.377850   0.3530268   0.0030450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7   5  41503  -0.041849   0.379451   0.3500439   0.0028870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7   6  41504  -0.038749   0.380951   0.3472639   0.0026670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7   7  41505  -0.035649   0.382451   0.3447110   0.0024350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7   8  41506  -0.032549   0.383951   0.3423751   0.0022620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7   9  41507  -0.029448   0.385352   0.3401592   0.0021880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  10  41508  -0.026348   0.386752   0.3379592   0.0022230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  11  41509  -0.023248   0.388152   0.3356723   0.0023310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  12  41510  -0.020147   0.389453   0.3332844   0.0024750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  13  41511  -0.016947   0.390653   0.3307405   0.0026140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  14  41512  -0.013847   0.391953   0.3280816   0.0027040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  15  41513  -0.010747   0.393053   0.3253726   0.0027000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  16  41514  -0.007646   0.394254   0.3226967   0.0026500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  17  41515  -0.004546   0.395354   0.3201008   0.0025340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  18  41516  -0.001446   0.396354   0.3176409   0.0023930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  19  41517   0.001654   0.397354   0.3153199   0.0022370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  20  41518   0.004655   0.398355   0.3131630   0.0020880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  21  41519   0.007755   0.399255   0.3111441   0.0019780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  22  41520   0.010755   0.400055   0.3092012   0.0019180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  23  41521   0.013756   0.400856   0.3072862   0.0019240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  24  41522   0.016756   0.401656   0.3053273   0.0020160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  25  41523   0.019756   0.402356   0.3032384   0.0021730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  26  41524   0.022656   0.402956   0.3009495   0.0024020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  27  41525   0.025557   0.403557   0.2984135   0.0026630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  28  41526   0.028457   0.404157   0.2956176   0.0029230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  29  41527   0.031257   0.404657   0.2925977   0.0031140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  30  41528   0.034058   0.405058   0.2894227   0.0032060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   7  31  41529   0.036758   0.405458   0.2862148   0.0031910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8   1  41530   0.039458   0.405858   0.2830859   0.0030540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8   2  41531   0.042158   0.406158   0.2801290   0.0028530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8   3  41532   0.044759   0.406459   0.2773810   0.0026460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8   4  41533   0.047359   0.406659   0.2748301   0.0024790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8   5  41534   0.049859   0.406759   0.2723912   0.0023960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8   6  41535   0.052359   0.406859   0.2700003   0.0024060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8   7  41536   0.054760   0.406960   0.2675373   0.0025240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8   8  41537   0.057160   0.406960   0.2649414   0.0026910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8   9  41538   0.059460   0.406860   0.2621645   0.0028500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  10  41539   0.061761   0.406761   0.2592475   0.0029600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  11  41540   0.063961   0.406561   0.2562806   0.0029800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  12  41541   0.066161   0.406361   0.2533167   0.0029230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  13  41542   0.068261   0.406061   0.2504588   0.0027950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  14  41543   0.070262   0.405762   0.2477338   0.0026290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  15  41544   0.072362   0.405362   0.2452079   0.0024300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  16  41545   0.074262   0.404862   0.2428730   0.0022330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  17  41546   0.076162   0.404362   0.2407260   0.0020790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  18  41547   0.078063   0.403763   0.2387111   0.0019590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  19  41548   0.079863   0.403163   0.2367862   0.0019110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  20  41549   0.081663   0.402363   0.2348643   0.0019460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  21  41550   0.083364   0.401664   0.2328693   0.0020570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  22  41551   0.085064   0.400764   0.2307274   0.0022490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  23  41552   0.086664   0.399864   0.2283655   0.0024910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  24  41553   0.088264   0.398864   0.2257515   0.0027450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  25  41554   0.089865   0.397765   0.2228886   0.0029690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  26  41555   0.091365   0.396665   0.2198547   0.0031000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  27  41556   0.092865   0.395465   0.2167317   0.0031120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  28  41557   0.094265   0.394265   0.2136628   0.0029980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  29  41558   0.095666   0.392966   0.2107649   0.0027980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  30  41559   0.097066   0.391566   0.2080740   0.0025770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   8  31  41560   0.098466   0.390166   0.2055960   0.0024000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9   1  41561   0.099767   0.388667   0.2032421   0.0023170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9   2  41562   0.101067   0.387067   0.2009152   0.0023450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9   3  41563   0.102267   0.385467   0.1985182   0.0024730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9   4  41564   0.103567   0.383767   0.1959473   0.0026680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9   5  41565   0.104768   0.382068   0.1931764   0.0028820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9   6  41566   0.105968   0.380368   0.1901914   0.0030690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9   7  41567   0.107168   0.378568   0.1870595   0.0031830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9   8  41568   0.108268   0.376668   0.1838536   0.0032240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9   9  41569   0.109469   0.374769   0.1806376   0.0031870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  10  41570   0.110569   0.372869   0.1775007   0.0030780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  11  41571   0.111669   0.370969   0.1744928   0.0029350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  12  41572   0.112770   0.368970   0.1716338   0.0027940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  13  41573   0.113870   0.366870   0.1688999   0.0026690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  14  41574   0.114970   0.364870   0.1662820   0.0025740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  15  41575   0.116070   0.362770   0.1637230   0.0025440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  16  41576   0.117171   0.360671   0.1611721   0.0025800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  17  41577   0.118271   0.358471   0.1585382   0.0026900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  18  41578   0.119371   0.356371   0.1557772   0.0028620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  19  41579   0.120471   0.354171   0.1527943   0.0031040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  20  41580   0.121572   0.351972   0.1495584   0.0033700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  21  41581   0.122672   0.349672   0.1460474   0.0036370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  22  41582   0.123772   0.347472   0.1423065   0.0038290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  23  41583   0.124873   0.345173   0.1384286   0.0039040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  24  41584   0.125973   0.342873   0.1345356   0.0038470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  25  41585   0.127173   0.340573   0.1307847   0.0036610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  26  41586   0.128273   0.338273   0.1272448   0.0034150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  27  41587   0.129474   0.335974   0.1239578   0.0031790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  28  41588   0.130574   0.333574   0.1208569   0.0030410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  29  41589   0.131774   0.331274   0.1178350   0.0030120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972   9  30  41590   0.132974   0.328874   0.1147850   0.0030930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10   1  41591   0.134075   0.326475   0.1116131   0.0032480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10   2  41592   0.135275   0.324075   0.1082811   0.0034280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10   3  41593   0.136475   0.321675   0.1047742   0.0035800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10   4  41594   0.137676   0.319276   0.1011273   0.0036830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10   5  41595   0.138876   0.316776   0.0974223   0.0037160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10   6  41596   0.140076   0.314376   0.0937204   0.0036660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10   7  41597   0.141276   0.311876   0.0901025   0.0035610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10   8  41598   0.142477   0.309377   0.0866235   0.0034020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10   9  41599   0.143577   0.306877   0.0833036   0.0032250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  10  41600   0.144777   0.304377   0.0801607   0.0030550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  11  41601   0.145977   0.301877   0.0771827   0.0029180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  12  41602   0.147078   0.299378   0.0743188   0.0028300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  13  41603   0.148178   0.296878   0.0715018   0.0028050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  14  41604   0.149278   0.294378   0.0686849   0.0028480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  15  41605   0.150279   0.291879   0.0657940   0.0029470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  16  41606   0.151379   0.289379   0.0627610   0.0031160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  17  41607   0.152379   0.286779   0.0595471   0.0033290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  18  41608   0.153279   0.284279   0.0560992   0.0035560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  19  41609   0.154280   0.281780   0.0524442   0.0037530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  20  41610   0.155080   0.279280   0.0486223   0.0038650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  21  41611   0.155980   0.276780   0.0447563   0.0038520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  22  41612   0.156781   0.274281   0.0409634   0.0037040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  23  41613   0.157481   0.271781   0.0373825   0.0034470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  24  41614   0.158181   0.269281   0.0340675   0.0031760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  25  41615   0.158781   0.266781   0.0310106   0.0029640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  26  41616   0.159382   0.264382   0.0281106   0.0028570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  27  41617   0.159882   0.261882   0.0252537   0.0028850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  28  41618   0.160382   0.259482   0.0223188   0.0029950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  29  41619   0.160782   0.257082   0.0192408   0.0031510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  30  41620   0.161183   0.254683   0.0160329   0.0032810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  10  31  41621   0.161483   0.252383   0.0126969   0.0033700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11   1  41622   0.161683   0.250083   0.0093150   0.0033940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11   2  41623   0.161884   0.247784   0.0059321   0.0033610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11   3  41624   0.162084   0.245484   0.0026121   0.0032610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11   4  41625   0.162184   0.243284  -0.0005848   0.0031260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11   5  41626   0.162184   0.241084  -0.0036308   0.0029660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11   6  41627   0.162185   0.238885  -0.0065167   0.0028160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11   7  41628   0.162085   0.236685  -0.0092726   0.0026910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11   8  41629   0.161985   0.234585  -0.0119246   0.0026210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11   9  41630   0.161885   0.232485  -0.0145245   0.0026100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  10  41631   0.161686   0.230486  -0.0171555   0.0026530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  11  41632   0.161486   0.228486  -0.0198624   0.0027690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  12  41633   0.161186   0.226486  -0.0227224   0.0029390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  13  41634   0.160887   0.224487  -0.0257643   0.0031520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  14  41635   0.160487   0.222587  -0.0290322   0.0033940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  15  41636   0.160187   0.220587  -0.0325392   0.0036170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  16  41637   0.159787   0.218687  -0.0362481   0.0037880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  17  41638   0.159388   0.216888  -0.0400841   0.0038650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  18  41639   0.158888   0.214988  -0.0439390   0.0038230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  19  41640   0.158388   0.213088  -0.0476940   0.0036700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  20  41641   0.157888   0.211288  -0.0512579   0.0034560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  21  41642   0.157389   0.209389  -0.0546098   0.0032560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  22  41643   0.156889   0.207589  -0.0578008   0.0031460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  23  41644   0.156389   0.205689  -0.0609437   0.0031630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  24  41645   0.155790   0.203890  -0.0641647   0.0032930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  25  41646   0.155190   0.201990  -0.0675406   0.0034750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  26  41647   0.154590   0.200190  -0.0711126   0.0036520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  27  41648   0.153990   0.198290  -0.0748375   0.0037750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  28  41649   0.153391   0.196391  -0.0786364   0.0038120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  29  41650   0.152791   0.194491  -0.0824264   0.0037670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  11  30  41651   0.152191   0.192591  -0.0861503   0.0036630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12   1  41652   0.151491   0.190691  -0.0897383   0.0035080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12   2  41653   0.150892   0.188792  -0.0931682   0.0033410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12   3  41654   0.150192   0.186792  -0.0964192   0.0031500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12   4  41655   0.149492   0.184892  -0.0994761   0.0029790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12   5  41656   0.148893   0.182893  -0.1023891   0.0028570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12   6  41657   0.148193   0.180893  -0.1052090   0.0027920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12   7  41658   0.147493   0.178793  -0.1079840   0.0027810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12   8  41659   0.146793   0.176793  -0.1107919   0.0028320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12   9  41660   0.146094   0.174694  -0.1136778   0.0029380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  10  41661   0.145294   0.172594  -0.1166898   0.0031020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  11  41662   0.144594   0.170494  -0.1198767   0.0032730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  12  41663   0.143894   0.168394  -0.1232337   0.0034460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  13  41664   0.143095   0.166295  -0.1267456   0.0035800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  14  41665   0.142295   0.164095  -0.1303706   0.0036440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  15  41666   0.141595   0.161995  -0.1340125   0.0036240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  16  41667   0.140796   0.159796  -0.1375735   0.0034950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  17  41668   0.139896   0.157596  -0.1409774   0.0033030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  18  41669   0.139096   0.155396  -0.1441854   0.0031060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  19  41670   0.138196   0.153196  -0.1472073   0.0029630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  20  41671   0.137397   0.150997  -0.1501363   0.0029180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  21  41672   0.136397   0.148797  -0.1530952   0.0030080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  22  41673   0.135497   0.146597  -0.1561932   0.0031870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  23  41674   0.134597   0.144297  -0.1594781   0.0033920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  24  41675   0.133598   0.142098  -0.1629631   0.0035560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  25  41676   0.132598   0.139898  -0.1665510   0.0036260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  26  41677   0.131598   0.137798  -0.1701840   0.0036150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  27  41678   0.130499   0.135599  -0.1737559   0.0035190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  28  41679   0.129399   0.133399  -0.1771979   0.0033760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  29  41680   0.128299   0.131299  -0.1804908   0.0032100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  30  41681   0.127199   0.129199  -0.1836158   0.0030410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1972  12  31  41682   0.126000   0.127100  -0.1865687   0.0028890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1   1  41683   0.124800   0.125000   0.8105944   0.0027730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1   2  41684   0.123500   0.123000   0.8078584   0.0027100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1   3  41685   0.122300   0.121000   0.8051525   0.0027220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1   4  41686   0.120901   0.119001   0.8024015   0.0027910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1   5  41687   0.119601   0.117101   0.7995416   0.0029280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1   6  41688   0.118201   0.115201   0.7965306   0.0031080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1   7  41689   0.116802   0.113402   0.7933287   0.0033170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1   8  41690   0.115302   0.111602   0.7899097   0.0035070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1   9  41691   0.113802   0.109802   0.7863177   0.0036550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  10  41692   0.112202   0.108102   0.7826208   0.0037260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  11  41693   0.110603   0.106503   0.7788958   0.0037110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  12  41694   0.109003   0.105003   0.7752289   0.0035990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  13  41695   0.107303   0.103403   0.7717109   0.0034200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  14  41696   0.105604   0.102004   0.7683970   0.0031970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  15  41697   0.103804   0.100604   0.7653050   0.0030060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  16  41698   0.102004   0.099304   0.7623651   0.0029000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  17  41699   0.100104   0.098004   0.7594751   0.0029000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  18  41700   0.098205   0.096805   0.7565292   0.0030070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  19  41701   0.096305   0.095705   0.7534322   0.0031820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  20  41702   0.094305   0.094605   0.7501683   0.0033480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  21  41703   0.092305   0.093605   0.7467603   0.0034550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  22  41704   0.090306   0.092606   0.7432924   0.0034720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  23  41705   0.088306   0.091806   0.7398474   0.0034030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  24  41706   0.086206   0.090906   0.7365095   0.0032640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  25  41707   0.084107   0.090107   0.7333215   0.0030990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  26  41708   0.082007   0.089407   0.7303046   0.0029270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  27  41709   0.079907   0.088807   0.7274526   0.0027890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  28  41710   0.077707   0.088207   0.7247257   0.0026740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  29  41711   0.075608   0.087608   0.7220887   0.0026200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  30  41712   0.073408   0.087108   0.7194757   0.0026190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   1  31  41713   0.071308   0.086608   0.7168188   0.0026970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2   1  41714   0.069108   0.086208   0.7140608   0.0028500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2   2  41715   0.067009   0.085809   0.7111109   0.0030460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2   3  41716   0.064909   0.085509   0.7079499   0.0032710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2   4  41717   0.062809   0.085209   0.7045700   0.0034960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2   5  41718   0.060610   0.085010   0.7009800   0.0036740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2   6  41719   0.058510   0.084810   0.6972361   0.0037910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2   7  41720   0.056410   0.084710   0.6934291   0.0038140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2   8  41721   0.054410   0.084510   0.6896492   0.0037340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2   9  41722   0.052311   0.084511   0.6859972   0.0035720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  10  41723   0.050211   0.084411   0.6825032   0.0033930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  11  41724   0.048211   0.084411   0.6792013   0.0032290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  12  41725   0.046111   0.084411   0.6760223   0.0031370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  13  41726   0.044112   0.084412   0.6728844   0.0031480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  14  41727   0.042112   0.084512   0.6696794   0.0032660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  15  41728   0.040112   0.084612   0.6663255   0.0034620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  16  41729   0.038013   0.084713   0.6627585   0.0036710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  17  41730   0.036013   0.084813   0.6590055   0.0038320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  18  41731   0.034013   0.085013   0.6551316   0.0038990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  19  41732   0.032013   0.085213   0.6512426   0.0038730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  20  41733   0.030014   0.085414   0.6474257   0.0037470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  21  41734   0.028014   0.085614   0.6437687   0.0035520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  22  41735   0.025914   0.085814   0.6403188   0.0033440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  23  41736   0.023914   0.086014   0.6370878   0.0031320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  24  41737   0.021915   0.086315   0.6340458   0.0029490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  25  41738   0.019815   0.086515   0.6311749   0.0028120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  26  41739   0.017815   0.086815   0.6284009   0.0027350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  27  41740   0.015716   0.087116   0.6256820   0.0027350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   2  28  41741   0.013616   0.087416   0.6229080   0.0028140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3   1  41742   0.011616   0.087716   0.6200251   0.0029520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3   2  41743   0.009516   0.088016   0.6169801   0.0031440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3   3  41744   0.007417   0.088417   0.6137421   0.0033420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3   4  41745   0.005317   0.088717   0.6103022   0.0035310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3   5  41746   0.003117   0.089017   0.6067022   0.0036690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3   6  41747   0.001017   0.089417   0.6030073   0.0037120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3   7  41748  -0.001082   0.089818   0.5993143   0.0036560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3   8  41749  -0.003182   0.090118   0.5957253   0.0035190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3   9  41750  -0.005382   0.090518   0.5922824   0.0033460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  10  41751  -0.007481   0.091019   0.5890194   0.0031860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  11  41752  -0.009581   0.091419   0.5858875   0.0030930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  12  41753  -0.011681   0.091819   0.5828015   0.0030990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  13  41754  -0.013881   0.092319   0.5796535   0.0032110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  14  41755  -0.015980   0.092820   0.5763516   0.0034130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  15  41756  -0.018080   0.093320   0.5728156   0.0036640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  16  41757  -0.020180   0.093920   0.5690297   0.0038920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  17  41758  -0.022280   0.094520   0.5650497   0.0040620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  18  41759  -0.024279   0.095121   0.5609337   0.0041340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  19  41760  -0.026379   0.095721   0.5568028   0.0041040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  20  41761  -0.028479   0.096421   0.5527518   0.0039800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  21  41762  -0.030478   0.097222   0.5488569   0.0038140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  22  41763  -0.032578   0.098022   0.5451369   0.0036290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  23  41764  -0.034578   0.098822   0.5415929   0.0034440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  24  41765  -0.036578   0.099722   0.5382250   0.0033000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  25  41766  -0.038577   0.100623   0.5349760   0.0032100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  26  41767  -0.040577   0.101623   0.5317740   0.0031940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  27  41768  -0.042577   0.102723   0.5285651   0.0032340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  28  41769  -0.044577   0.103823   0.5252851   0.0033350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  29  41770  -0.046576   0.104924   0.5218782   0.0034860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  30  41771  -0.048576   0.106124   0.5182932   0.0036780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   3  31  41772  -0.050476   0.107424   0.5145222   0.0038610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4   1  41773  -0.052475   0.108725   0.5105833   0.0040180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4   2  41774  -0.054475   0.110125   0.5065233   0.0040970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4   3  41775  -0.056375   0.111525   0.5024243   0.0040690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4   4  41776  -0.058375   0.113025   0.4984214   0.0039310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4   5  41777  -0.060274   0.114626   0.4945984   0.0037070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4   6  41778  -0.062174   0.116226   0.4910034   0.0034770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4   7  41779  -0.064174   0.117826   0.4876275   0.0032880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4   8  41780  -0.066073   0.119527   0.4844035   0.0031990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4   9  41781  -0.067973   0.121227   0.4812026   0.0032200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  10  41782  -0.069873   0.123027   0.4779246   0.0033370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  11  41783  -0.071673   0.124827   0.4745136   0.0034980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  12  41784  -0.073572   0.126728   0.4709417   0.0036420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  13  41785  -0.075372   0.128628   0.4672347   0.0037520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  14  41786  -0.077172   0.130528   0.4634527   0.0037900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  15  41787  -0.078972   0.132428   0.4596818   0.0037480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  16  41788  -0.080671   0.134429   0.4559808   0.0036340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  17  41789  -0.082471   0.136329   0.4524208   0.0034790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  18  41790  -0.084171   0.138329   0.4490389   0.0032930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  19  41791  -0.085770   0.140330   0.4458319   0.0031150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  20  41792  -0.087470   0.142330   0.4427969   0.0029700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  21  41793  -0.089070   0.144330   0.4398850   0.0028750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  22  41794  -0.090570   0.146330   0.4370380   0.0028410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  23  41795  -0.092069   0.148231   0.4341930   0.0028680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  24  41796  -0.093569   0.150231   0.4312921   0.0029540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  25  41797  -0.095069   0.152131   0.4282781   0.0030890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  26  41798  -0.096469   0.154131   0.4251011   0.0032590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  27  41799  -0.097768   0.156032   0.4217562   0.0034520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  28  41800  -0.099168   0.157932   0.4182122   0.0036300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  29  41801  -0.100468   0.159832   0.4145122   0.0037680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   4  30  41802  -0.101667   0.161733   0.4107153   0.0038200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5   1  41803  -0.102867   0.163633   0.4069183   0.0037650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5   2  41804  -0.104067   0.165433   0.4032163   0.0036340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5   3  41805  -0.105267   0.167333   0.3996674   0.0034530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5   4  41806  -0.106366   0.169134   0.3962954   0.0032810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5   5  41807  -0.107466   0.170934   0.3930764   0.0031830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5   6  41808  -0.108466   0.172634   0.3898895   0.0032010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5   7  41809  -0.109466   0.174434   0.3866395   0.0033130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5   8  41810  -0.110465   0.176135   0.3832445   0.0034710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5   9  41811  -0.111365   0.177835   0.3796995   0.0036260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  10  41812  -0.112265   0.179535   0.3760196   0.0037130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  11  41813  -0.113164   0.181236   0.3722876   0.0037370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  12  41814  -0.113964   0.182936   0.3685706   0.0036660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  13  41815  -0.114764   0.184536   0.3649667   0.0035310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  14  41816  -0.115564   0.186236   0.3615247   0.0033480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  15  41817  -0.116263   0.187837   0.3582797   0.0031400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  16  41818  -0.117063   0.189437   0.3552538   0.0029240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  17  41819  -0.117663   0.191037   0.3524238   0.0027320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  18  41820  -0.118363   0.192537   0.3497638   0.0025960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  19  41821  -0.119062   0.194138   0.3472129   0.0025170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  20  41822  -0.119662   0.195638   0.3447089   0.0025000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  21  41823  -0.120162   0.197238   0.3421939   0.0025500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  22  41824  -0.120761   0.198739   0.3395929   0.0026570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  23  41825  -0.121261   0.200239   0.3368690   0.0027960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  24  41826  -0.121761   0.201739   0.3339860   0.0029600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  25  41827  -0.122161   0.203239   0.3309410   0.0031270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  26  41828  -0.122560   0.204840   0.3277531   0.0032520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  27  41829  -0.122960   0.206340   0.3244481   0.0033360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  28  41830  -0.123260   0.207840   0.3211101   0.0033330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  29  41831  -0.123560   0.209340   0.3178141   0.0032370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  30  41832  -0.123759   0.210841   0.3146612   0.0030610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   5  31  41833  -0.123959   0.212441   0.3116972   0.0028800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6   1  41834  -0.124059   0.213941   0.3088922   0.0027530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6   2  41835  -0.124058   0.215442   0.3061542   0.0027330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6   3  41836  -0.124058   0.217042   0.3033863   0.0028210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6   4  41837  -0.124058   0.218642   0.3004843   0.0029920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6   5  41838  -0.123958   0.220142   0.2973873   0.0031800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6   6  41839  -0.123757   0.221743   0.2941294   0.0033230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6   7  41840  -0.123557   0.223343   0.2907594   0.0033820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6   8  41841  -0.123257   0.224943   0.2873864   0.0033410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6   9  41842  -0.122957   0.226543   0.2841024   0.0032270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  10  41843  -0.122556   0.228144   0.2809475   0.0030670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  11  41844  -0.122056   0.229844   0.2779655   0.0028760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  12  41845  -0.121556   0.231444   0.2751855   0.0026860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  13  41846  -0.121055   0.233145   0.2725865   0.0025080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  14  41847  -0.120455   0.234745   0.2701476   0.0023690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  15  41848  -0.119755   0.236445   0.2678286   0.0022870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  16  41849  -0.119055   0.238145   0.2655536   0.0022650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  17  41850  -0.118254   0.239846   0.2632776   0.0022940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  18  41851  -0.117454   0.241646   0.2609497   0.0023710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  19  41852  -0.116554   0.243346   0.2585257   0.0024710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  20  41853  -0.115654   0.245146   0.2559937   0.0025940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  21  41854  -0.114753   0.246947   0.2533407   0.0027090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  22  41855  -0.113753   0.248747   0.2505848   0.0027860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  23  41856  -0.112653   0.250547   0.2477848   0.0028220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  24  41857  -0.111552   0.252348   0.2449728   0.0027900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  25  41858  -0.110452   0.254248   0.2422308   0.0026800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  26  41859  -0.109352   0.256148   0.2396369   0.0025010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  27  41860  -0.108152   0.258048   0.2372319   0.0023100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  28  41861  -0.106851   0.259949   0.2349999   0.0021520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  29  41862  -0.105651   0.261849   0.2328999   0.0020760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   6  30  41863  -0.104351   0.263849   0.2308099   0.0021160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7   1  41864  -0.103050   0.265850   0.2286230   0.0022720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7   2  41865  -0.101650   0.267750   0.2262580   0.0024710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7   3  41866  -0.100250   0.269750   0.2236880   0.0026600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7   4  41867  -0.098850   0.271750   0.2209650   0.0027690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7   5  41868  -0.097449   0.273751   0.2181871   0.0027690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7   6  41869  -0.095949   0.275751   0.2154591   0.0026820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7   7  41870  -0.094449   0.277751   0.2128531   0.0025320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7   8  41871  -0.092949   0.279751   0.2104131   0.0023460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7   9  41872  -0.091448   0.281752   0.2081511   0.0021710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  10  41873  -0.089948   0.283652   0.2060532   0.0020190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  11  41874  -0.088448   0.285652   0.2040902   0.0019170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  12  41875  -0.086947   0.287553   0.2022032   0.0018770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  13  41876  -0.085347   0.289353   0.2003262   0.0018880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  14  41877  -0.083847   0.291253   0.1984063   0.0019720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  15  41878  -0.082347   0.293053   0.1963743   0.0021000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  16  41879  -0.080746   0.294754   0.1941833   0.0022760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  17  41880  -0.079246   0.296454   0.1918163   0.0024690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  18  41881  -0.077746   0.298154   0.1892473   0.0026560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  19  41882  -0.076246   0.299754   0.1865164   0.0028020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  20  41883  -0.074745   0.301355   0.1836504   0.0029080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  21  41884  -0.073245   0.302855   0.1807224   0.0029570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  22  41885  -0.071745   0.304255   0.1777604   0.0029360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  23  41886  -0.070244   0.305656   0.1748724   0.0028230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  24  41887  -0.068744   0.306956   0.1721265   0.0026650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  25  41888  -0.067244   0.308156   0.1695385   0.0025060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  26  41889  -0.065844   0.309356   0.1670945   0.0023860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  27  41890  -0.064343   0.310457   0.1647325   0.0023660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  28  41891  -0.062843   0.311557   0.1623235   0.0024570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  29  41892  -0.061343   0.312457   0.1597815   0.0026390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  30  41893  -0.059943   0.313457   0.1570406   0.0028300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   7  31  41894  -0.058442   0.314258   0.1541386   0.0029490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8   1  41895  -0.056942   0.315058   0.1511876   0.0029640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8   2  41896  -0.055542   0.315758   0.1482516   0.0028820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8   3  41897  -0.054041   0.316459   0.1454456   0.0027170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8   4  41898  -0.052541   0.317059   0.1428337   0.0025110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8   5  41899  -0.051041   0.317659   0.1404357   0.0022870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8   6  41900  -0.049541   0.318159   0.1382427   0.0021050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8   7  41901  -0.048040   0.318660   0.1362127   0.0019620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8   8  41902  -0.046540   0.319060   0.1343097   0.0018720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8   9  41903  -0.044940   0.319460   0.1324477   0.0018520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  10  41904  -0.043440   0.319760   0.1305748   0.0019060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  11  41905  -0.041939   0.320061   0.1286168   0.0020290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  12  41906  -0.040339   0.320361   0.1265108   0.0021880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  13  41907  -0.038839   0.320661   0.1242328   0.0023830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  14  41908  -0.037238   0.320862   0.1217448   0.0025790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  15  41909  -0.035738   0.321062   0.1190738   0.0027600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  16  41910  -0.034138   0.321362   0.1162539   0.0028800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  17  41911  -0.032538   0.321562   0.1133479   0.0029290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  18  41912  -0.030937   0.321763   0.1104209   0.0029030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  19  41913  -0.029337   0.321963   0.1075549   0.0028090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  20  41914  -0.027737   0.322163   0.1048049   0.0026790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  21  41915  -0.026137   0.322363   0.1021959   0.0025520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  22  41916  -0.024536   0.322564   0.0996949   0.0024630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  23  41917  -0.022936   0.322764   0.0972420   0.0024600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  24  41918  -0.021336   0.322964   0.0947310   0.0025590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  25  41919  -0.019735   0.323265   0.0920820   0.0027490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  26  41920  -0.018035   0.323465   0.0892270   0.0029670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  27  41921  -0.016435   0.323765   0.0861540   0.0031790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  28  41922  -0.014735   0.324065   0.0828940   0.0033160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  29  41923  -0.013034   0.324366   0.0795610   0.0033310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  30  41924  -0.011434   0.324566   0.0762701   0.0032350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   8  31  41925  -0.009734   0.324866   0.0731071   0.0030700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9   1  41926  -0.008034   0.325266   0.0701501   0.0028510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9   2  41927  -0.006233   0.325567   0.0673921   0.0026490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9   3  41928  -0.004533   0.325867   0.0648301   0.0024740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9   4  41929  -0.002833   0.326167   0.0624181   0.0023510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9   5  41930  -0.001032   0.326568   0.0600981   0.0022880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9   6  41931   0.000668   0.326868   0.0578212   0.0022880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9   7  41932   0.002468   0.327168   0.0555122   0.0023500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9   8  41933   0.004268   0.327468   0.0531152   0.0024530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9   9  41934   0.005969   0.327869   0.0505842   0.0026120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  10  41935   0.007769   0.328169   0.0478872   0.0027830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  11  41936   0.009569   0.328469   0.0450222   0.0029420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  12  41937   0.011369   0.328769   0.0420062   0.0030690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  13  41938   0.013170   0.328970   0.0389052   0.0031290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  14  41939   0.014970   0.329270   0.0357853   0.0031070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  15  41940   0.016770   0.329470   0.0327283   0.0030050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  16  41941   0.018571   0.329771   0.0297933   0.0028590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  17  41942   0.020371   0.329871   0.0270033   0.0027050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  18  41943   0.022171   0.330071   0.0243603   0.0026010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  19  41944   0.023971   0.330171   0.0217843   0.0025680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  20  41945   0.025772   0.330272   0.0191813   0.0026430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  21  41946   0.027572   0.330272   0.0164683   0.0027970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  22  41947   0.029272   0.330272   0.0135693   0.0030170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  23  41948   0.030973   0.330273   0.0104413   0.0032350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  24  41949   0.032773   0.330173   0.0071054   0.0034170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  25  41950   0.034473   0.330073   0.0036264   0.0035120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  26  41951   0.036173   0.329873   0.0001144   0.0034940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  27  41952   0.037774   0.329674  -0.0033406   0.0033930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  28  41953   0.039474   0.329374  -0.0066416   0.0032150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  29  41954   0.041074   0.328974  -0.0097736   0.0030310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973   9  30  41955   0.042674   0.328574  -0.0127216   0.0028690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10   1  41956   0.044275   0.328175  -0.0155186   0.0027450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10   2  41957   0.045775   0.327675  -0.0182206   0.0026690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10   3  41958   0.047375   0.327075  -0.0208776   0.0026560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10   4  41959   0.048876   0.326476  -0.0235626   0.0027050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10   5  41960   0.050276   0.325776  -0.0262955   0.0027970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10   6  41961   0.051776   0.325076  -0.0291615   0.0029310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10   7  41962   0.053176   0.324376  -0.0321735   0.0030860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10   8  41963   0.054577   0.323577  -0.0353425   0.0032510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10   9  41964   0.055877   0.322677  -0.0386575   0.0033810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  10  41965   0.057277   0.321777  -0.0420775   0.0034580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  11  41966   0.058577   0.320877  -0.0455475   0.0034590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  12  41967   0.059778   0.319978  -0.0489655   0.0033840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  13  41968   0.061078   0.318978  -0.0522815   0.0032270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  14  41969   0.062278   0.317978  -0.0554185   0.0030460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  15  41970   0.063479   0.316879  -0.0583805   0.0028870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  16  41971   0.064579   0.315879  -0.0612165   0.0028110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  17  41972   0.065779   0.314779  -0.0640255   0.0028240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  18  41973   0.066879   0.313679  -0.0669075   0.0029420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  19  41974   0.067880   0.312580  -0.0699394   0.0031190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  20  41975   0.068980   0.311380  -0.0731494   0.0033090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  21  41976   0.069980   0.310280  -0.0765554   0.0034750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  22  41977   0.070980   0.309180  -0.0800764   0.0035720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  23  41978   0.071981   0.307981  -0.0836604   0.0035720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  24  41979   0.072881   0.306881  -0.0872024   0.0034980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  25  41980   0.073781   0.305681  -0.0906454   0.0033610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  26  41981   0.074682   0.304582  -0.0939234   0.0031930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  27  41982   0.075482   0.303382  -0.0970334   0.0030300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  28  41983   0.076282   0.302282  -0.0999864   0.0028930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  29  41984   0.077082   0.301182  -0.1028374   0.0028090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  30  41985   0.077883   0.300083  -0.1056244   0.0027870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  10  31  41986   0.078583   0.298983  -0.1084214   0.0028250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11   1  41987   0.079283   0.297883  -0.1112934   0.0029180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11   2  41988   0.079983   0.296783  -0.1142804   0.0030620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11   3  41989   0.080684   0.295784  -0.1174254   0.0032220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11   4  41990   0.081284   0.294684  -0.1207274   0.0034000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11   5  41991   0.081984   0.293684  -0.1242104   0.0035640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11   6  41992   0.082585   0.292685  -0.1278434   0.0036930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11   7  41993   0.083185   0.291685  -0.1315774   0.0037640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11   8  41994   0.083785   0.290685  -0.1353444   0.0037580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11   9  41995   0.084385   0.289785  -0.1390764   0.0036840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  10  41996   0.084986   0.288786  -0.1426943   0.0035440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  11  41997   0.085486   0.287886  -0.1461533   0.0033880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  12  41998   0.086086   0.286986  -0.1494883   0.0032940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  13  41999   0.086686   0.286086  -0.1527733   0.0032850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  14  42000   0.087287   0.285187  -0.1560923   0.0033600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  15  42001   0.087787   0.284387  -0.1595283   0.0035090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  16  42002   0.088387   0.283487  -0.1631173   0.0036790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  17  42003   0.088988   0.282688  -0.1668623   0.0038030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  18  42004   0.089588   0.281888  -0.1706893   0.0038360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  19  42005   0.090188   0.281088  -0.1745073   0.0037850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  20  42006   0.090788   0.280288  -0.1782333   0.0036560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  21  42007   0.091489   0.279489  -0.1818003   0.0034710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  22  42008   0.092089   0.278689  -0.1851653   0.0032570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  23  42009   0.092689   0.277889  -0.1883233   0.0030400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  24  42010   0.093389   0.277089  -0.1912653   0.0028490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  25  42011   0.094090   0.276290  -0.1940353   0.0027030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  26  42012   0.094790   0.275490  -0.1966903   0.0026250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  27  42013   0.095490   0.274690  -0.1993063   0.0026080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  28  42014   0.096191   0.273891  -0.2019243   0.0026350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  29  42015   0.096891   0.273091  -0.2046013   0.0027250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  11  30  42016   0.097591   0.272291  -0.2073823   0.0028410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12   1  42017   0.098291   0.271491  -0.2102863   0.0029760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12   2  42018   0.099092   0.270592  -0.2133323   0.0031020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12   3  42019   0.099792   0.269692  -0.2164933   0.0032130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12   4  42020   0.100592   0.268792  -0.2197423   0.0032790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12   5  42021   0.101292   0.267892  -0.2230213   0.0032860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12   6  42022   0.102093   0.266893  -0.2262823   0.0032250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12   7  42023   0.102793   0.265893  -0.2294513   0.0031140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12   8  42024   0.103593   0.264893  -0.2324903   0.0029640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12   9  42025   0.104294   0.263794  -0.2353963   0.0028480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  10  42026   0.104994   0.262694  -0.2382213   0.0028080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  11  42027   0.105694   0.261494  -0.2410503   0.0028760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  12  42028   0.106394   0.260394  -0.2439953   0.0030290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  13  42029   0.107095   0.259095  -0.2471313   0.0032360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  14  42030   0.107795   0.257895  -0.2504603   0.0034100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  15  42031   0.108395   0.256595  -0.2539163   0.0034970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  16  42032   0.109096   0.255196  -0.2574283   0.0034920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  17  42033   0.109596   0.253796  -0.2608694   0.0033850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  18  42034   0.110196   0.252396  -0.2641794   0.0032180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  19  42035   0.110696   0.250996  -0.2672954   0.0030030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  20  42036   0.111197   0.249497  -0.2701864   0.0027910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  21  42037   0.111697   0.247997  -0.2728754   0.0025930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  22  42038   0.112097   0.246397  -0.2753864   0.0024370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  23  42039   0.112497   0.244897  -0.2777674   0.0023250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  24  42040   0.112798   0.243298  -0.2800674   0.0022730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  25  42041   0.113098   0.241598  -0.2823434   0.0022980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  26  42042   0.113298   0.239998  -0.2846674   0.0023680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  27  42043   0.113499   0.238399  -0.2870884   0.0024660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  28  42044   0.113599   0.236699  -0.2896134   0.0025850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  29  42045   0.113699   0.235099  -0.2922654   0.0027050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  30  42046   0.113699   0.233399  -0.2950164   0.0027900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1973  12  31  42047   0.113600   0.231800  -0.2978324   0.0028560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1   1  42048   0.113500   0.230100   0.6992996   0.0028610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1   2  42049   0.113400   0.228500   0.6964546   0.0028300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1   3  42050   0.113200   0.226800   0.6936686   0.0027350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1   4  42051   0.112901   0.225201   0.6909966   0.0026060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1   5  42052   0.112601   0.223601   0.6884556   0.0024820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1   6  42053   0.112201   0.222001   0.6860146   0.0024010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1   7  42054   0.111802   0.220402   0.6836126   0.0024140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1   8  42055   0.111302   0.218802   0.6811506   0.0025250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1   9  42056   0.110702   0.217302   0.6785365   0.0027120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  10  42057   0.110202   0.215702   0.6757235   0.0029090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  11  42058   0.109503   0.214203   0.6727395   0.0030340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  12  42059   0.108803   0.212703   0.6696825   0.0030590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  13  42060   0.108103   0.211203   0.6666705   0.0029560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  14  42061   0.107403   0.209703   0.6638005   0.0027640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  15  42062   0.106604   0.208304   0.6611475   0.0025380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  16  42063   0.105804   0.206904   0.6587335   0.0023110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  17  42064   0.104904   0.205404   0.6565245   0.0021130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  18  42065   0.104005   0.204005   0.6544935   0.0019790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  19  42066   0.103105   0.202705   0.6525595   0.0018990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  20  42067   0.102205   0.201305   0.6506765   0.0018780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  21  42068   0.101305   0.200005   0.6487825   0.0019270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  22  42069   0.100306   0.198606   0.6468045   0.0020360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  23  42070   0.099406   0.197306   0.6446894   0.0021900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  24  42071   0.098406   0.196006   0.6424204   0.0023590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  25  42072   0.097506   0.194806   0.6399744   0.0025320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  26  42073   0.096507   0.193507   0.6373754   0.0026800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  27  42074   0.095607   0.192307   0.6346374   0.0028070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  28  42075   0.094707   0.191107   0.6317774   0.0028840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  29  42076   0.093808   0.190008   0.6288794   0.0028950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  30  42077   0.092908   0.188808   0.6260054   0.0028360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   1  31  42078   0.092008   0.187708   0.6232074   0.0027550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2   1  42079   0.091108   0.186608   0.6205064   0.0026600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2   2  42080   0.090309   0.185609   0.6178754   0.0025820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2   3  42081   0.089509   0.184509   0.6153063   0.0025720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2   4  42082   0.088709   0.183509   0.6126973   0.0026630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2   5  42083   0.087909   0.182609   0.6099583   0.0028390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2   6  42084   0.087110   0.181610   0.6070043   0.0030730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2   7  42085   0.086410   0.180710   0.6038293   0.0032760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2   8  42086   0.085710   0.179810   0.6004823   0.0033990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2   9  42087   0.085011   0.179011   0.5970833   0.0033860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  10  42088   0.084311   0.178111   0.5937513   0.0032620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  11  42089   0.083611   0.177311   0.5905853   0.0030600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  12  42090   0.082911   0.176611   0.5876392   0.0028320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  13  42091   0.082312   0.175812   0.5849132   0.0026240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  14  42092   0.081612   0.175112   0.5823852   0.0024630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  15  42093   0.080912   0.174312   0.5799802   0.0023580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  16  42094   0.080212   0.173712   0.5776482   0.0023140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  17  42095   0.079513   0.173013   0.5753322   0.0023400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  18  42096   0.078813   0.172313   0.5729602   0.0024110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  19  42097   0.078113   0.171713   0.5704952   0.0025240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  20  42098   0.077414   0.171114   0.5678932   0.0026720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  21  42099   0.076614   0.170514   0.5651601   0.0028120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  22  42100   0.075914   0.169914   0.5622751   0.0029320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  23  42101   0.075114   0.169314   0.5592991   0.0030240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  24  42102   0.074215   0.168815   0.5562451   0.0030630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  25  42103   0.073415   0.168315   0.5531931   0.0030420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  26  42104   0.072515   0.167815   0.5501911   0.0029650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  27  42105   0.071615   0.167315   0.5472851   0.0028500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   2  28  42106   0.070616   0.166916   0.5444930   0.0027260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3   1  42107   0.069616   0.166516   0.5418140   0.0026410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3   2  42108   0.068616   0.166116   0.5391900   0.0026190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3   3  42109   0.067617   0.165717   0.5365450   0.0026880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3   4  42110   0.066517   0.165417   0.5337820   0.0028610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3   5  42111   0.065417   0.165117   0.5308100   0.0030930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3   6  42112   0.064217   0.164917   0.5275810   0.0033510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3   7  42113   0.063118   0.164718   0.5241239   0.0035600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3   8  42114   0.061918   0.164618   0.5204959   0.0036660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3   9  42115   0.060718   0.164518   0.5168239   0.0036460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  10  42116   0.059519   0.164419   0.5132389   0.0035200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  11  42117   0.058219   0.164419   0.5098049   0.0033320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  12  42118   0.057019   0.164519   0.5065759   0.0031280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  13  42119   0.055719   0.164719   0.5035369   0.0029590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  14  42120   0.054520   0.164820   0.5006488   0.0028370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  15  42121   0.053220   0.165120   0.4978518   0.0027680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  16  42122   0.052020   0.165420   0.4950828   0.0027600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  17  42123   0.050820   0.165820   0.4923028   0.0028090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  18  42124   0.049621   0.166221   0.4894498   0.0028940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  19  42125   0.048421   0.166621   0.4865028   0.0030020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  20  42126   0.047321   0.167221   0.4834317   0.0031320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  21  42127   0.046122   0.167722   0.4802427   0.0032420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  22  42128   0.045022   0.168322   0.4769567   0.0033330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  23  42129   0.044022   0.169022   0.4736037   0.0033650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  24  42130   0.042922   0.169722   0.4702557   0.0033280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  25  42131   0.041923   0.170423   0.4669587   0.0032370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  26  42132   0.041023   0.171223   0.4637886   0.0030970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  27  42133   0.040023   0.172023   0.4607716   0.0029360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  28  42134   0.039223   0.172823   0.4579106   0.0027920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  29  42135   0.038324   0.173624   0.4551686   0.0027040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  30  42136   0.037524   0.174424   0.4524856   0.0026890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   3  31  42137   0.036724   0.175224   0.4497516   0.0027720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4   1  42138   0.036025   0.176025   0.4469075   0.0029260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4   2  42139   0.035225   0.176825   0.4438905   0.0031010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4   3  42140   0.034625   0.177625   0.4407115   0.0032670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4   4  42141   0.033925   0.178425   0.4373895   0.0033630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4   5  42142   0.033326   0.179126   0.4340105   0.0033760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4   6  42143   0.032726   0.179826   0.4306734   0.0032900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4   7  42144   0.032126   0.180526   0.4274674   0.0031240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4   8  42145   0.031626   0.181226   0.4244394   0.0029310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4   9  42146   0.031127   0.181827   0.4216014   0.0027600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  10  42147   0.030627   0.182327   0.4189124   0.0026360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  11  42148   0.030127   0.182927   0.4162993   0.0025930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  12  42149   0.029628   0.183328   0.4137043   0.0026350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  13  42150   0.029128   0.183828   0.4110093   0.0027340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  14  42151   0.028628   0.184228   0.4082213   0.0028710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  15  42152   0.028228   0.184528   0.4052663   0.0030340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  16  42153   0.027729   0.184829   0.4021472   0.0032150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  17  42154   0.027229   0.185029   0.3988352   0.0034070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  18  42155   0.026729   0.185229   0.3953302   0.0035780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  19  42156   0.026229   0.185429   0.3916922   0.0036920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  20  42157   0.025730   0.185530   0.3879752   0.0037430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  21  42158   0.025130   0.185530   0.3842271   0.0037320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  22  42159   0.024630   0.185630   0.3805301   0.0036550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  23  42160   0.024031   0.185631   0.3769211   0.0035400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  24  42161   0.023431   0.185531   0.3734491   0.0034160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  25  42162   0.022831   0.185431   0.3700831   0.0033170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  26  42163   0.022231   0.185331   0.3667790   0.0033060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  27  42164   0.021532   0.185232   0.3634510   0.0033540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  28  42165   0.020832   0.185032   0.3600470   0.0034730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  29  42166   0.020132   0.184932   0.3564940   0.0036360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   4  30  42167   0.019432   0.184732   0.3527799   0.0037760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5   1  42168   0.018633   0.184533   0.3489619   0.0038600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5   2  42169   0.017833   0.184333   0.3450979   0.0038520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5   3  42170   0.017033   0.184033   0.3412889   0.0037520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5   4  42171   0.016234   0.183834   0.3376118   0.0035830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5   5  42172   0.015334   0.183634   0.3341398   0.0033560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5   6  42173   0.014434   0.183434   0.3309008   0.0031320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5   7  42174   0.013534   0.183134   0.3278758   0.0029280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5   8  42175   0.012635   0.182935   0.3250278   0.0027870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5   9  42176   0.011735   0.182735   0.3222797   0.0027110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  10  42177   0.010735   0.182535   0.3195767   0.0026940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  11  42178   0.009835   0.182335   0.3168647   0.0027380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  12  42179   0.008836   0.182136   0.3140887   0.0028180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  13  42180   0.007936   0.181936   0.3112306   0.0029200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  14  42181   0.006936   0.181836   0.3082576   0.0030250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  15  42182   0.006037   0.181637   0.3051746   0.0031180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  16  42183   0.005037   0.181537   0.3020226   0.0031910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  17  42184   0.004137   0.181337   0.2988155   0.0032220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  18  42185   0.003237   0.181237   0.2955945   0.0032000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  19  42186   0.002238   0.181138   0.2924235   0.0031230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  20  42187   0.001338   0.181138   0.2893645   0.0030010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  21  42188   0.000538   0.181038   0.2864374   0.0028620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  22  42189  -0.000362   0.181038   0.2836404   0.0027490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  23  42190  -0.001161   0.180939   0.2809174   0.0027040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  24  42191  -0.001961   0.181039   0.2782024   0.0027510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  25  42192  -0.002761   0.181039   0.2753953   0.0028720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  26  42193  -0.003560   0.181040   0.2724443   0.0030360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  27  42194  -0.004260   0.181140   0.2693293   0.0031880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  28  42195  -0.004960   0.181240   0.2660873   0.0032820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  29  42196  -0.005560   0.181340   0.2628032   0.0032800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  30  42197  -0.006159   0.181541   0.2595572   0.0031900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   5  31  42198  -0.006759   0.181741   0.2564382   0.0030290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6   1  42199  -0.007259   0.181941   0.2535041   0.0028240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6   2  42200  -0.007659   0.182141   0.2507921   0.0025980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6   3  42201  -0.008058   0.182442   0.2482901   0.0024020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6   4  42202  -0.008358   0.182742   0.2459831   0.0022300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6   5  42203  -0.008658   0.183042   0.2438000   0.0021280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6   6  42204  -0.008857   0.183343   0.2416970   0.0020870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6   7  42205  -0.008957   0.183743   0.2396180   0.0020890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6   8  42206  -0.009057   0.184043   0.2375059   0.0021410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6   9  42207  -0.009057   0.184543   0.2353279   0.0022160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  10  42208  -0.008956   0.184944   0.2330809   0.0022870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  11  42209  -0.008756   0.185344   0.2307459   0.0023680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  12  42210  -0.008456   0.185844   0.2283538   0.0024130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  13  42211  -0.008155   0.186345   0.2259228   0.0024420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  14  42212  -0.007755   0.186845   0.2234948   0.0024160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  15  42213  -0.007255   0.187345   0.2211077   0.0023520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  16  42214  -0.006755   0.187945   0.2188057   0.0022540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  17  42215  -0.006054   0.188446   0.2166087   0.0021300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  18  42216  -0.005454   0.189046   0.2145437   0.0020130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  19  42217  -0.004654   0.189646   0.2125746   0.0019480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  20  42218  -0.003854   0.190246   0.2106296   0.0019690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  21  42219  -0.002953   0.190847   0.2086146   0.0020850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  22  42220  -0.002353   0.191447   0.2064465   0.0022590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  23  42221  -0.001753   0.192147   0.2040845   0.0024610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  24  42222  -0.001052   0.192848   0.2015525   0.0025980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  25  42223  -0.000352   0.193448   0.1989214   0.0026370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  26  42224   0.000248   0.194148   0.1963144   0.0025690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  27  42225   0.000948   0.194848   0.1938204   0.0024170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  28  42226   0.001549   0.195549   0.1914954   0.0022190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  29  42227   0.002149   0.196349   0.1893763   0.0020230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   6  30  42228   0.002749   0.197049   0.1874433   0.0018380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7   1  42229   0.003349   0.197749   0.1856753   0.0017060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7   2  42230   0.003850   0.198450   0.1840222   0.0016290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7   3  42231   0.004250   0.199250   0.1824082   0.0016110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7   4  42232   0.004650   0.199950   0.1807812   0.0016500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7   5  42233   0.005051   0.200751   0.1790921   0.0017340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7   6  42234   0.005351   0.201451   0.1772941   0.0018550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7   7  42235   0.005751   0.202151   0.1753791   0.0019750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7   8  42236   0.006151   0.202951   0.1733370   0.0020860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7   9  42237   0.006552   0.203652   0.1712050   0.0021720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  10  42238   0.006952   0.204352   0.1689940   0.0022230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  11  42239   0.007352   0.204952   0.1667629   0.0022330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  12  42240   0.007652   0.205552   0.1645529   0.0021790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  13  42241   0.007953   0.206153   0.1624069   0.0020960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  14  42242   0.008153   0.206653   0.1603698   0.0019750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  15  42243   0.008253   0.207053   0.1584568   0.0018520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  16  42244   0.008354   0.207354   0.1566548   0.0017610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  17  42245   0.008454   0.207654   0.1549207   0.0017320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  18  42246   0.008554   0.207854   0.1531587   0.0018090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  19  42247   0.008554   0.207954   0.1512627   0.0019740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  20  42248   0.008555   0.207955   0.1491866   0.0021820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  21  42249   0.008555   0.207955   0.1469086   0.0023630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  22  42250   0.008555   0.207955   0.1445006   0.0024440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  23  42251   0.008555   0.207955   0.1420525   0.0024290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  24  42252   0.008556   0.207956   0.1396895   0.0023000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  25  42253   0.008556   0.207956   0.1374875   0.0020980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  26  42254   0.008556   0.207956   0.1354914   0.0018950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  27  42255   0.008557   0.207957   0.1336894   0.0017140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  28  42256   0.008557   0.207957   0.1320374   0.0015910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  29  42257   0.008557   0.207957   0.1304983   0.0015160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  30  42258   0.008557   0.207957   0.1289843   0.0015110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   7  31  42259   0.008558   0.207958   0.1274463   0.0015740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8   1  42260   0.008558   0.207958   0.1258212   0.0016840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8   2  42261   0.008558   0.207958   0.1240662   0.0018190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8   3  42262   0.008558   0.207958   0.1221691   0.0019780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8   4  42263   0.008559   0.207959   0.1201121   0.0021320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8   5  42264   0.008559   0.207959   0.1179211   0.0022640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8   6  42265   0.008559   0.207959   0.1156060   0.0023500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8   7  42266   0.008560   0.207960   0.1132360   0.0023940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8   8  42267   0.008560   0.207960   0.1108320   0.0024040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8   9  42268   0.008560   0.207960   0.1084499   0.0023550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  10  42269   0.008560   0.207960   0.1061209   0.0022790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  11  42270   0.008561   0.207961   0.1038849   0.0021850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  12  42271   0.008561   0.207961   0.1017428   0.0021140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  13  42272   0.008561   0.207961   0.0996378   0.0020980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  14  42273   0.008561   0.207961   0.0975187   0.0021570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  15  42274   0.008562   0.207962   0.0952837   0.0023190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  16  42275   0.008562   0.207962   0.0928577   0.0025410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  17  42276   0.008562   0.207962   0.0901956   0.0027780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  18  42277   0.008563   0.207963   0.0873206   0.0029580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  19  42278   0.008563   0.207963   0.0843186   0.0030240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  20  42279   0.008563   0.207963   0.0813185   0.0029550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  21  42280   0.008563   0.207963   0.0784555   0.0027660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  22  42281   0.008564   0.207964   0.0757954   0.0025310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  23  42282   0.008564   0.207964   0.0733834   0.0022990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  24  42283   0.008564   0.207964   0.0711914   0.0021020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  25  42284   0.008564   0.207964   0.0691553   0.0019800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  26  42285   0.008565   0.207965   0.0672103   0.0019220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  27  42286   0.008565   0.207965   0.0653002   0.0019150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  28  42287   0.008565   0.207965   0.0633632   0.0019590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  29  42288   0.008566   0.207966   0.0613692   0.0020420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  30  42289   0.008566   0.207966   0.0592811   0.0021470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   8  31  42290   0.008566   0.207966   0.0570851   0.0022540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9   1  42291   0.008566   0.207966   0.0547800   0.0023530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9   2  42292   0.008567   0.207967   0.0523900   0.0024200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9   3  42293   0.008567   0.207967   0.0499540   0.0024440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9   4  42294   0.008567   0.207967   0.0475079   0.0024320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9   5  42295   0.008568   0.207968   0.0451049   0.0023770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9   6  42296   0.008568   0.207968   0.0427638   0.0023000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9   7  42297   0.008568   0.207968   0.0404998   0.0022210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9   8  42298   0.008568   0.207968   0.0383178   0.0021470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9   9  42299   0.008569   0.207969   0.0361907   0.0021290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  10  42300   0.008569   0.208069   0.0340367   0.0021830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  11  42301   0.008569   0.208169   0.0317856   0.0023330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  12  42302   0.008569   0.208269   0.0293446   0.0025510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  13  42303   0.008370   0.208370   0.0266595   0.0028210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  14  42304   0.008170   0.208470   0.0237165   0.0030660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  15  42305   0.008070   0.208670   0.0205535   0.0032430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  16  42306   0.007871   0.208771   0.0172814   0.0032780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  17  42307   0.007671   0.208971   0.0140394   0.0031860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  18  42308   0.007471   0.209271   0.0109303   0.0030020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  19  42309   0.007271   0.209671   0.0080373   0.0027730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  20  42310   0.006972   0.210272   0.0053663   0.0025670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  21  42311   0.006672   0.210872   0.0028842   0.0024190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  22  42312   0.006272   0.211472   0.0005042   0.0023430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  23  42313   0.005872   0.212172  -0.0018249   0.0023230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  24  42314   0.005473   0.212973  -0.0041619   0.0023590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  25  42315   0.004973   0.213673  -0.0065560   0.0024360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  26  42316   0.004373   0.214473  -0.0090430   0.0025410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  27  42317   0.003874   0.215374  -0.0116520   0.0026660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  28  42318   0.003274   0.216174  -0.0143611   0.0027710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  29  42319   0.002574   0.217074  -0.0171851   0.0028600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974   9  30  42320   0.001974   0.217874  -0.0200792   0.0029200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10   1  42321   0.001275   0.218775  -0.0230102   0.0029230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10   2  42322   0.000575   0.219675  -0.0259203   0.0028910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10   3  42323  -0.000225   0.220575  -0.0287783   0.0028200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10   4  42324  -0.000925   0.221475  -0.0315524   0.0027380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10   5  42325  -0.001724   0.222276  -0.0342454   0.0026520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10   6  42326  -0.002524   0.223176  -0.0368794   0.0026130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10   7  42327  -0.003324   0.224076  -0.0395055   0.0026400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10   8  42328  -0.004123   0.224877  -0.0421955   0.0027450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10   9  42329  -0.004923   0.225777  -0.0450186   0.0029240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  10  42330  -0.005723   0.226577  -0.0480596   0.0031530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  11  42331  -0.006523   0.227377  -0.0513377   0.0033890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  12  42332  -0.007322   0.228178  -0.0548127   0.0035700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  13  42333  -0.008122   0.228978  -0.0584388   0.0036620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  14  42334  -0.008922   0.229778  -0.0620988   0.0036310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  15  42335  -0.009622   0.230478  -0.0656749   0.0035060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  16  42336  -0.010421   0.231179  -0.0690799   0.0032970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  17  42337  -0.011121   0.231979  -0.0722760   0.0030780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  18  42338  -0.011921   0.232679  -0.0752600   0.0028970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  19  42339  -0.012620   0.233380  -0.0780840   0.0027620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  20  42340  -0.013320   0.233980  -0.0808081   0.0026980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  21  42341  -0.014020   0.234680  -0.0835001   0.0026950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  22  42342  -0.014720   0.235280  -0.0862032   0.0027370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  23  42343  -0.015419   0.235981  -0.0889742   0.0028000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  24  42344  -0.016019   0.236581  -0.0918073   0.0028780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  25  42345  -0.016719   0.237181  -0.0947193   0.0029530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  26  42346  -0.017319   0.237781  -0.0977084   0.0030200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  27  42347  -0.017918   0.238382  -0.1007384   0.0030540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  28  42348  -0.018618   0.238982  -0.1038015   0.0030560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  29  42349  -0.019218   0.239482  -0.1068355   0.0030130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  30  42350  -0.019817   0.240083  -0.1098146   0.0029390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  10  31  42351  -0.020417   0.240583  -0.1127036   0.0028360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11   1  42352  -0.021017   0.241183  -0.1154847   0.0027370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11   2  42353  -0.021617   0.241683  -0.1181767   0.0026640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11   3  42354  -0.022116   0.242184  -0.1208208   0.0026480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11   4  42355  -0.022716   0.242684  -0.1235068   0.0027280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11   5  42356  -0.023316   0.243184  -0.1263019   0.0028720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11   6  42357  -0.023916   0.243684  -0.1292669   0.0030660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11   7  42358  -0.024415   0.244085  -0.1324360   0.0032700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11   8  42359  -0.025015   0.244585  -0.1357960   0.0034410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11   9  42360  -0.025615   0.244985  -0.1392951   0.0035420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  10  42361  -0.026114   0.245486  -0.1428491   0.0035530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  11  42362  -0.026714   0.245886  -0.1463692   0.0034620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  12  42363  -0.027214   0.246286  -0.1497512   0.0033030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  13  42364  -0.027814   0.246686  -0.1529563   0.0031160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  14  42365  -0.028313   0.247087  -0.1559773   0.0029330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  15  42366  -0.028913   0.247487  -0.1588394   0.0028000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  16  42367  -0.029413   0.247787  -0.1616104   0.0027450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  17  42368  -0.029913   0.248187  -0.1643505   0.0027440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  18  42369  -0.030512   0.248488  -0.1671155   0.0027940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  19  42370  -0.031012   0.248888  -0.1699486   0.0028780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  20  42371  -0.031512   0.249188  -0.1728766   0.0029780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  21  42372  -0.032111   0.249489  -0.1758967   0.0030810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  22  42373  -0.032611   0.249889  -0.1790237   0.0031590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  23  42374  -0.033111   0.250189  -0.1822158   0.0032210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  24  42375  -0.033611   0.250489  -0.1854418   0.0032360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  25  42376  -0.034210   0.250790  -0.1886739   0.0032110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  26  42377  -0.034710   0.251190  -0.1918609   0.0031470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  27  42378  -0.035210   0.251490  -0.1949570   0.0030510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  28  42379  -0.035709   0.251791  -0.1979490   0.0029310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  29  42380  -0.036209   0.252191  -0.2008341   0.0028330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  11  30  42381  -0.036709   0.252491  -0.2036301   0.0027710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12   1  42382  -0.037109   0.252891  -0.2063892   0.0027810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12   2  42383  -0.037608   0.253192  -0.2092102   0.0028610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12   3  42384  -0.038108   0.253592  -0.2121423   0.0030100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12   4  42385  -0.038508   0.253992  -0.2152243   0.0031740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12   5  42386  -0.038908   0.254392  -0.2184684   0.0032940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12   6  42387  -0.039407   0.254693  -0.2217974   0.0033510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12   7  42388  -0.039807   0.255193  -0.2251495   0.0033280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12   8  42389  -0.040207   0.255593  -0.2284266   0.0032230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12   9  42390  -0.040606   0.255994  -0.2315746   0.0030570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  10  42391  -0.041006   0.256394  -0.2345297   0.0028620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  11  42392  -0.041406   0.256894  -0.2373027   0.0026750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  12  42393  -0.041806   0.257294  -0.2399048   0.0025270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  13  42394  -0.042205   0.257795  -0.2423758   0.0024360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  14  42395  -0.042505   0.258195  -0.2447979   0.0024090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  15  42396  -0.042905   0.258695  -0.2472219   0.0024380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  16  42397  -0.043305   0.259195  -0.2496960   0.0025060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  17  42398  -0.043604   0.259696  -0.2522410   0.0025940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  18  42399  -0.044004   0.260196  -0.2548761   0.0026750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  19  42400  -0.044404   0.260796  -0.2575871   0.0027540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  20  42401  -0.044703   0.261297  -0.2603752   0.0027980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  21  42402  -0.045103   0.261897  -0.2631833   0.0028200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  22  42403  -0.045403   0.262497  -0.2660033   0.0028050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  23  42404  -0.045803   0.262997  -0.2687794   0.0027440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  24  42405  -0.046102   0.263598  -0.2714904   0.0026630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  25  42406  -0.046502   0.264298  -0.2740985   0.0025640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  26  42407  -0.046802   0.264898  -0.2766195   0.0024690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  27  42408  -0.047202   0.265498  -0.2790476   0.0024060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  28  42409  -0.047501   0.266199  -0.2814426   0.0023970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  29  42410  -0.047801   0.266799  -0.2838697   0.0024800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  30  42411  -0.048101   0.267499  -0.2864298   0.0026390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1974  12  31  42412  -0.048400   0.268200  -0.2891688   0.0028430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1   1  42413  -0.048700   0.268900   0.7078931   0.0030250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1   2  42414  -0.049000   0.269600   0.7048071   0.0031300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1   3  42415  -0.049200   0.270400   0.7016570   0.0031400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1   4  42416  -0.049499   0.271101   0.6985700   0.0030400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1   5  42417  -0.049699   0.271901   0.6956009   0.0028790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1   6  42418  -0.049899   0.272601   0.6928118   0.0026900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1   7  42419  -0.049999   0.273401   0.6902078   0.0025210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1   8  42420  -0.050098   0.274202   0.6877557   0.0023910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1   9  42421  -0.050198   0.275002   0.6854077   0.0023160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  10  42422  -0.050298   0.275802   0.6831036   0.0023020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  11  42423  -0.050297   0.276703   0.6807936   0.0023360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  12  42424  -0.050297   0.277503   0.6784155   0.0024260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  13  42425  -0.050197   0.278403   0.6759234   0.0025520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  14  42426  -0.050097   0.279203   0.6733104   0.0026650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  15  42427  -0.049996   0.280104   0.6705873   0.0027770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  16  42428  -0.049796   0.281004   0.6677733   0.0028560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  17  42429  -0.049596   0.281904   0.6648852   0.0029030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  18  42430  -0.049296   0.282704   0.6619791   0.0029130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  19  42431  -0.048995   0.283605   0.6590711   0.0028880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  20  42432  -0.048595   0.284505   0.6562140   0.0028330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  21  42433  -0.048195   0.285405   0.6534220   0.0027590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  22  42434  -0.047794   0.286306   0.6507059   0.0026750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  23  42435  -0.047294   0.287306   0.6480649   0.0026020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  24  42436  -0.046694   0.288206   0.6454728   0.0025910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  25  42437  -0.046094   0.289106   0.6428557   0.0026580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  26  42438  -0.045493   0.290107   0.6401287   0.0027990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  27  42439  -0.044893   0.291007   0.6372266   0.0030040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  28  42440  -0.044193   0.292007   0.6341176   0.0032190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  29  42441  -0.043393   0.293007   0.6308075   0.0033880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  30  42442  -0.042692   0.293908   0.6273794   0.0034570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   1  31  42443  -0.041892   0.294908   0.6239354   0.0034010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2   1  42444  -0.040992   0.296008   0.6206013   0.0032620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2   2  42445  -0.040191   0.297009   0.6174183   0.0030710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2   3  42446  -0.039291   0.298009   0.6144482   0.0028720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2   4  42447  -0.038391   0.299109   0.6116611   0.0027220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2   5  42448  -0.037491   0.300209   0.6089931   0.0026230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2   6  42449  -0.036590   0.301310   0.6063930   0.0025980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2   7  42450  -0.035590   0.302410   0.6037769   0.0026320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2   8  42451  -0.034590   0.303610   0.6011129   0.0027050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2   9  42452  -0.033590   0.304710   0.5983668   0.0028010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  10  42453  -0.032589   0.305911   0.5955048   0.0029130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  11  42454  -0.031589   0.307111   0.5925307   0.0030210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  12  42455  -0.030589   0.308311   0.5894696   0.0031080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  13  42456  -0.029488   0.309612   0.5863366   0.0031530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  14  42457  -0.028488   0.310812   0.5831875   0.0031500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  15  42458  -0.027388   0.312112   0.5800485   0.0031100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  16  42459  -0.026288   0.313312   0.5769774   0.0030280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  17  42460  -0.025187   0.314613   0.5739993   0.0029250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  18  42461  -0.024087   0.315813   0.5711293   0.0028160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  19  42462  -0.022987   0.317113   0.5683632   0.0027120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  20  42463  -0.021786   0.318314   0.5656821   0.0026480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  21  42464  -0.020586   0.319514   0.5630341   0.0026500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  22  42465  -0.019386   0.320714   0.5603550   0.0027250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  23  42466  -0.018186   0.321914   0.5575489   0.0028880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  24  42467  -0.016985   0.323115   0.5545629   0.0030960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  25  42468  -0.015685   0.324215   0.5513728   0.0032890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  26  42469  -0.014485   0.325315   0.5480238   0.0034010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  27  42470  -0.013185   0.326415   0.5446127   0.0033960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   2  28  42471  -0.011884   0.327516   0.5412646   0.0032710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3   1  42472  -0.010484   0.328516   0.5381126   0.0030430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3   2  42473  -0.009184   0.329516   0.5351785   0.0028030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3   3  42474  -0.007783   0.330517   0.5324964   0.0025880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3   4  42475  -0.006383   0.331417   0.5299814   0.0024440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3   5  42476  -0.004983   0.332217   0.5275853   0.0023700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3   6  42477  -0.003483   0.333117   0.5252212   0.0023700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3   7  42478  -0.002082   0.333918   0.5228372   0.0024120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3   8  42479  -0.000582   0.334618   0.5203731   0.0025120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3   9  42480   0.000918   0.335318   0.5178050   0.0026340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  10  42481   0.002418   0.336018   0.5151120   0.0027610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  11  42482   0.004019   0.336619   0.5122879   0.0028730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  12  42483   0.005519   0.337119   0.5093759   0.0029580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  13  42484   0.007119   0.337719   0.5063748   0.0030260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  14  42485   0.008720   0.338120   0.5033357   0.0030460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  15  42486   0.010320   0.338520   0.5003037   0.0030210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  16  42487   0.011920   0.338920   0.4973026   0.0029700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  17  42488   0.013520   0.339220   0.4943575   0.0029070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  18  42489   0.015221   0.339521   0.4914845   0.0028520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  19  42490   0.016921   0.339721   0.4886424   0.0028190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  20  42491   0.018621   0.339921   0.4858193   0.0028400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  21  42492   0.020321   0.340021   0.4829383   0.0029240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  22  42493   0.022022   0.340122   0.4799352   0.0030840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  23  42494   0.023722   0.340122   0.4767401   0.0032950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  24  42495   0.025422   0.340022   0.4733281   0.0035260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  25  42496   0.027223   0.340023   0.4697100   0.0037080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  26  42497   0.028923   0.339823   0.4659439   0.0037950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  27  42498   0.030723   0.339623   0.4621619   0.0037460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  28  42499   0.032523   0.339423   0.4584918   0.0035780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  29  42500   0.034224   0.339124   0.4550297   0.0033290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  30  42501   0.036024   0.338724   0.4518277   0.0030790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   3  31  42502   0.037824   0.338324   0.4488576   0.0028620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4   1  42503   0.039524   0.337924   0.4460695   0.0027260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4   2  42504   0.041225   0.337325   0.4433814   0.0026610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4   3  42505   0.043025   0.336825   0.4407284   0.0026540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4   4  42506   0.044725   0.336125   0.4380493   0.0026980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4   5  42507   0.046426   0.335426   0.4353232   0.0027670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4   6  42508   0.048126   0.334726   0.4325122   0.0028450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4   7  42509   0.049726   0.333926   0.4296341   0.0029080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4   8  42510   0.051326   0.333026   0.4267030   0.0029590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4   9  42511   0.052927   0.332127   0.4237270   0.0029870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  10  42512   0.054527   0.331227   0.4207509   0.0029780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  11  42513   0.056127   0.330227   0.4177818   0.0029440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  12  42514   0.057627   0.329127   0.4148638   0.0029000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  13  42515   0.059028   0.328128   0.4119867   0.0028400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  14  42516   0.060528   0.326928   0.4091936   0.0027600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  15  42517   0.061928   0.325728   0.4064586   0.0027140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  16  42518   0.063329   0.324529   0.4037495   0.0027140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  17  42519   0.064629   0.323329   0.4010094   0.0027780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  18  42520   0.065929   0.322029   0.3981803   0.0029010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  19  42521   0.067229   0.320729   0.3951873   0.0030930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  20  42522   0.068430   0.319430   0.3919832   0.0033060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  21  42523   0.069630   0.318030   0.3885781   0.0035080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  22  42524   0.070830   0.316730   0.3849781   0.0036600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  23  42525   0.072030   0.315330   0.3812920   0.0036940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  24  42526   0.073131   0.313931   0.3776269   0.0036270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  25  42527   0.074231   0.312531   0.3740778   0.0034600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  26  42528   0.075231   0.311131   0.3707218   0.0032490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  27  42529   0.076332   0.309732   0.3675657   0.0030510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  28  42530   0.077332   0.308432   0.3645926   0.0029080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  29  42531   0.078332   0.307032   0.3617346   0.0028280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   4  30  42532   0.079332   0.305632   0.3589235   0.0028050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5   1  42533   0.080333   0.304233   0.3561094   0.0028280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5   2  42534   0.081233   0.302833   0.3532573   0.0028790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5   3  42535   0.082233   0.301533   0.3503573   0.0029320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5   4  42536   0.083133   0.300133   0.3473952   0.0029810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5   5  42537   0.084034   0.298834   0.3444001   0.0030040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5   6  42538   0.084934   0.297534   0.3413951   0.0030100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5   7  42539   0.085834   0.296234   0.3383920   0.0029810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5   8  42540   0.086635   0.294935   0.3354359   0.0029260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5   9  42541   0.087535   0.293635   0.3325488   0.0028420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  10  42542   0.088435   0.292335   0.3297578   0.0027380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  11  42543   0.089235   0.291135   0.3270837   0.0026300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  12  42544   0.090136   0.289836   0.3245006   0.0025380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  13  42545   0.090936   0.288636   0.3219935   0.0024850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  14  42546   0.091836   0.287436   0.3195105   0.0025010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  15  42547   0.092637   0.286237   0.3169784   0.0025740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  16  42548   0.093437   0.285037   0.3143443   0.0027130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  17  42549   0.094337   0.283837   0.3115423   0.0028830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  18  42550   0.095237   0.282637   0.3085812   0.0030450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  19  42551   0.096038   0.281438   0.3054681   0.0031710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  20  42552   0.096938   0.280338   0.3022640   0.0032110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  21  42553   0.097838   0.279138   0.2990760   0.0031610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  22  42554   0.098738   0.278038   0.2959809   0.0030270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  23  42555   0.099739   0.276839   0.2930398   0.0028390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  24  42556   0.100639   0.275739   0.2902967   0.0026410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  25  42557   0.101639   0.274539   0.2877467   0.0024770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  26  42558   0.102640   0.273440   0.2853216   0.0023760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  27  42559   0.103640   0.272340   0.2829715   0.0023340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  28  42560   0.104740   0.271140   0.2806234   0.0023590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  29  42561   0.105840   0.270040   0.2782514   0.0023990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  30  42562   0.106941   0.268941   0.2758113   0.0024620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   5  31  42563   0.108141   0.267841   0.2733182   0.0025220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6   1  42564   0.109241   0.266641   0.2707721   0.0025680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6   2  42565   0.110441   0.265541   0.2682001   0.0025890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6   3  42566   0.111642   0.264442   0.2656130   0.0025680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6   4  42567   0.112942   0.263342   0.2630649   0.0025230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6   5  42568   0.114242   0.262242   0.2605778   0.0024570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6   6  42569   0.115443   0.261043   0.2581698   0.0023600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6   7  42570   0.116843   0.259943   0.2558617   0.0022650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6   8  42571   0.118143   0.258843   0.2536456   0.0021700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6   9  42572   0.119443   0.257743   0.2515005   0.0021180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  10  42573   0.120744   0.256544   0.2493825   0.0021300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  11  42574   0.122044   0.255444   0.2472284   0.0022000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  12  42575   0.123344   0.254344   0.2449613   0.0023430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  13  42576   0.124644   0.253144   0.2425302   0.0025220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  14  42577   0.125945   0.252045   0.2399191   0.0026950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  15  42578   0.127245   0.250845   0.2371561   0.0028200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  16  42579   0.128445   0.249745   0.2343150   0.0028670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  17  42580   0.129746   0.248546   0.2314619   0.0028270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  18  42581   0.130846   0.247346   0.2286868   0.0027010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  19  42582   0.132046   0.246246   0.2260758   0.0025270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  20  42583   0.133046   0.245046   0.2236377   0.0023390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  21  42584   0.134147   0.243747   0.2213806   0.0021730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  22  42585   0.135047   0.242547   0.2192645   0.0020580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  23  42586   0.136047   0.241347   0.2172524   0.0019880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  24  42587   0.136847   0.240047   0.2152684   0.0019800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  25  42588   0.137648   0.238748   0.2132683   0.0020150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  26  42589   0.138448   0.237448   0.2112302   0.0020720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  27  42590   0.139048   0.236148   0.2091351   0.0021190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  28  42591   0.139649   0.234849   0.2069981   0.0021510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  29  42592   0.140249   0.233449   0.2048410   0.0021590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   6  30  42593   0.140749   0.232149   0.2026909   0.0021350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7   1  42594   0.141149   0.230749   0.2005818   0.0020780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7   2  42595   0.141450   0.229250   0.1985457   0.0019990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7   3  42596   0.141750   0.227850   0.1965907   0.0018980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7   4  42597   0.141950   0.226450   0.1947436   0.0017860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7   5  42598   0.142150   0.224950   0.1930075   0.0016890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7   6  42599   0.142251   0.223451   0.1913674   0.0016180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7   7  42600   0.142251   0.222051   0.1897663   0.0015940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7   8  42601   0.142251   0.220551   0.1881473   0.0016360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7   9  42602   0.142252   0.218952   0.1864592   0.0017600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  10  42603   0.142152   0.217452   0.1846181   0.0019270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  11  42604   0.141952   0.215952   0.1825900   0.0021160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  12  42605   0.141752   0.214452   0.1804119   0.0022510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  13  42606   0.141553   0.212853   0.1781169   0.0023110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  14  42607   0.141253   0.211353   0.1758128   0.0022780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  15  42608   0.140953   0.209753   0.1736007   0.0021450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  16  42609   0.140653   0.208253   0.1715406   0.0019680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  17  42610   0.140254   0.206654   0.1696785   0.0017770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  18  42611   0.139854   0.205054   0.1679885   0.0016110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  19  42612   0.139454   0.203454   0.1664314   0.0015020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  20  42613   0.139055   0.201955   0.1649633   0.0014450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  21  42614   0.138555   0.200355   0.1635202   0.0014590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  22  42615   0.138155   0.198755   0.1620271   0.0015330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  23  42616   0.137655   0.197155   0.1604541   0.0016270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  24  42617   0.137156   0.195556   0.1587700   0.0017290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  25  42618   0.136756   0.193956   0.1569889   0.0018300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  26  42619   0.136256   0.192456   0.1551188   0.0019070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  27  42620   0.135756   0.190856   0.1531867   0.0019510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  28  42621   0.135257   0.189257   0.1512366   0.0019620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  29  42622   0.134757   0.187657   0.1492846   0.0019400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  30  42623   0.134257   0.186057   0.1473745   0.0018940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   7  31  42624   0.133858   0.184558   0.1455114   0.0018230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8   1  42625   0.133358   0.182958   0.1437173   0.0017640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8   2  42626   0.132858   0.181458   0.1419662   0.0017240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8   3  42627   0.132358   0.179858   0.1402571   0.0017220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8   4  42628   0.131859   0.178359   0.1385121   0.0017710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8   5  42629   0.131459   0.176759   0.1366810   0.0018920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8   6  42630   0.130959   0.175259   0.1347139   0.0020720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8   7  42631   0.130460   0.173760   0.1325248   0.0023100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8   8  42632   0.129960   0.172260   0.1300997   0.0025320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8   9  42633   0.129460   0.170760   0.1274856   0.0026810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  10  42634   0.128960   0.169260   0.1247766   0.0027260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  11  42635   0.128561   0.167861   0.1220715   0.0026560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  12  42636   0.128061   0.166361   0.1194934   0.0024910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  13  42637   0.127561   0.164861   0.1170993   0.0022960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  14  42638   0.126961   0.163461   0.1148952   0.0021190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  15  42639   0.126462   0.162062   0.1128431   0.0020050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  16  42640   0.125962   0.160662   0.1108741   0.0019460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  17  42641   0.125362   0.159262   0.1089310   0.0019400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  18  42642   0.124763   0.157863   0.1069669   0.0019960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  19  42643   0.124263   0.156463   0.1049258   0.0020790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  20  42644   0.123563   0.155063   0.1028127   0.0021680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  21  42645   0.122963   0.153663   0.1006016   0.0022530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  22  42646   0.122264   0.152364   0.0983136   0.0023190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  23  42647   0.121564   0.150964   0.0959745   0.0023530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  24  42648   0.120764   0.149664   0.0936194   0.0023510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  25  42649   0.120064   0.148364   0.0912833   0.0023170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  26  42650   0.119265   0.147065   0.0890042   0.0022450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  27  42651   0.118365   0.145665   0.0867981   0.0021560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  28  42652   0.117465   0.144365   0.0846940   0.0020640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  29  42653   0.116566   0.143066   0.0826660   0.0019850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  30  42654   0.115566   0.141766   0.0807039   0.0019370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   8  31  42655   0.114566   0.140566   0.0787648   0.0019490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9   1  42656   0.113466   0.139266   0.0767817   0.0020290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9   2  42657   0.112367   0.137967   0.0746836   0.0021800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9   3  42658   0.111267   0.136667   0.0723925   0.0023990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9   4  42659   0.110067   0.135467   0.0698794   0.0026370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9   5  42660   0.108767   0.134167   0.0671334   0.0028360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9   6  42661   0.107468   0.132968   0.0642403   0.0029400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9   7  42662   0.106168   0.131768   0.0612952   0.0029280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9   8  42663   0.104768   0.130468   0.0584231   0.0028000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9   9  42664   0.103369   0.129269   0.0557280   0.0026030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  10  42665   0.101869   0.128069   0.0532199   0.0024080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  11  42666   0.100369   0.126869   0.0509078   0.0022460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  12  42667   0.098869   0.125669   0.0487137   0.0021540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  13  42668   0.097270   0.124570   0.0465757   0.0021330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  14  42669   0.095670   0.123370   0.0444286   0.0021700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  15  42670   0.093970   0.122170   0.0422135   0.0022560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  16  42671   0.092270   0.121070   0.0399194   0.0023540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  17  42672   0.090571   0.119971   0.0375143   0.0024560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  18  42673   0.088771   0.118871   0.0350022   0.0025550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  19  42674   0.086971   0.117771   0.0324131   0.0026170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  20  42675   0.085172   0.116672   0.0297780   0.0026560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  21  42676   0.083372   0.115572   0.0271240   0.0026590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  22  42677   0.081472   0.114572   0.0244809   0.0026330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  23  42678   0.079472   0.113472   0.0218748   0.0025760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  24  42679   0.077573   0.112473   0.0193207   0.0025220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  25  42680   0.075573   0.111473   0.0168176   0.0024760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  26  42681   0.073573   0.110473   0.0143605   0.0024530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  27  42682   0.071573   0.109473   0.0118964   0.0024740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  28  42683   0.069474   0.108474   0.0093943   0.0025410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  29  42684   0.067374   0.107574   0.0067912   0.0026850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975   9  30  42685   0.065274   0.106574   0.0040132   0.0028810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10   1  42686   0.063175   0.105675   0.0010151   0.0031170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10   2  42687   0.060975   0.104775  -0.0022200   0.0033490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10   3  42688   0.058775   0.103975  -0.0056741   0.0035240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10   4  42689   0.056575   0.103075  -0.0092432   0.0036050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10   5  42690   0.054276   0.102276  -0.0128333   0.0035540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10   6  42691   0.051976   0.101476  -0.0163184   0.0034020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10   7  42692   0.049676   0.100776  -0.0196205   0.0032020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10   8  42693   0.047276   0.100076  -0.0227256   0.0030050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10   9  42694   0.044877   0.099377  -0.0256597   0.0028770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  10  42695   0.042477   0.098677  -0.0284947   0.0028150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  11  42696   0.040077   0.098077  -0.0313018   0.0028200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  12  42697   0.037578   0.097478  -0.0341399   0.0028610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  13  42698   0.035078   0.096978  -0.0370430   0.0029370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  14  42699   0.032478   0.096478  -0.0400161   0.0030090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  15  42700   0.029978   0.096078  -0.0430692   0.0030850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  16  42701   0.027379   0.095679  -0.0461693   0.0031320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  17  42702   0.024679   0.095279  -0.0493124   0.0031480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  18  42703   0.022079   0.094979  -0.0524555   0.0031300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  19  42704   0.019379   0.094779  -0.0555536   0.0030710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  20  42705   0.016680   0.094580  -0.0585897   0.0029990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  21  42706   0.013880   0.094480  -0.0615377   0.0029060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  22  42707   0.011080   0.094380  -0.0644038   0.0028260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  23  42708   0.008381   0.094281  -0.0671859   0.0027540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  24  42709   0.005581   0.094381  -0.0699240   0.0027280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  25  42710   0.002681   0.094381  -0.0726581   0.0027410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  26  42711  -0.000119   0.094581  -0.0754362   0.0028240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  27  42712  -0.002918   0.094682  -0.0783273   0.0029650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  28  42713  -0.005818   0.094982  -0.0813904   0.0031580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  29  42714  -0.008718   0.095282  -0.0846465   0.0033540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  30  42715  -0.011517   0.095583  -0.0880886   0.0035320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  10  31  42716  -0.014417   0.095983  -0.0916877   0.0036410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11   1  42717  -0.017217   0.096483  -0.0953478   0.0036500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11   2  42718  -0.020017   0.096983  -0.0989519   0.0035560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11   3  42719  -0.022816   0.097484  -0.1024339   0.0033880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11   4  42720  -0.025616   0.098184  -0.1057220   0.0031990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11   5  42721  -0.028416   0.098784  -0.1088331   0.0030420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11   6  42722  -0.031116   0.099584  -0.1118182   0.0029420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11   7  42723  -0.033915   0.100285  -0.1147503   0.0029140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11   8  42724  -0.036515   0.101185  -0.1176754   0.0029530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11   9  42725  -0.039215   0.101985  -0.1206575   0.0030130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  10  42726  -0.041814   0.102986  -0.1237036   0.0030810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  11  42727  -0.044314   0.103886  -0.1268167   0.0031430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  12  42728  -0.046914   0.104986  -0.1299738   0.0031780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  13  42729  -0.049414   0.105986  -0.1331649   0.0031990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  14  42730  -0.051813   0.107187  -0.1363610   0.0031780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  15  42731  -0.054213   0.108287  -0.1395121   0.0031270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  16  42732  -0.056613   0.109487  -0.1426072   0.0030610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  17  42733  -0.058913   0.110787  -0.1456283   0.0029710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  18  42734  -0.061212   0.111988  -0.1485484   0.0028700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  19  42735  -0.063512   0.113388  -0.1513734   0.0027940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  20  42736  -0.065812   0.114688  -0.1541465   0.0027470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  21  42737  -0.068011   0.116089  -0.1568826   0.0027360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  22  42738  -0.070211   0.117489  -0.1596367   0.0027900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  23  42739  -0.072511   0.118989  -0.1624708   0.0028880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  24  42740  -0.074611   0.120489  -0.1654259   0.0030360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  25  42741  -0.076810   0.121990  -0.1685390   0.0031890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  26  42742  -0.079010   0.123490  -0.1718071   0.0033320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  27  42743  -0.081210   0.125090  -0.1751752   0.0034120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  28  42744  -0.083410   0.126690  -0.1786063   0.0034260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  29  42745  -0.085509   0.128391  -0.1819994   0.0033550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  11  30  42746  -0.087709   0.129991  -0.1852935   0.0032020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12   1  42747  -0.089909   0.131691  -0.1884006   0.0030220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12   2  42748  -0.092008   0.133492  -0.1913287   0.0028390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12   3  42749  -0.094208   0.135192  -0.1940948   0.0027040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12   4  42750  -0.096308   0.136992  -0.1967589   0.0026370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12   5  42751  -0.098508   0.138792  -0.1994000   0.0026340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12   6  42752  -0.100607   0.140593  -0.2020501   0.0026720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12   7  42753  -0.102707   0.142393  -0.2047592   0.0027350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12   8  42754  -0.104807   0.144293  -0.2075083   0.0027820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12   9  42755  -0.106907   0.146193  -0.2103064   0.0028100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  10  42756  -0.108906   0.148094  -0.2131205   0.0028230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  11  42757  -0.110906   0.149994  -0.2159436   0.0028180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  12  42758  -0.112906   0.151994  -0.2187556   0.0027930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  13  42759  -0.114805   0.153895  -0.2215097   0.0027310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  14  42760  -0.116705   0.155895  -0.2242138   0.0026740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  15  42761  -0.118605   0.157895  -0.2268559   0.0026030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  16  42762  -0.120405   0.159895  -0.2294230   0.0025430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  17  42763  -0.122204   0.161996  -0.2319521   0.0025210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  18  42764  -0.123904   0.163996  -0.2344782   0.0025290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  19  42765  -0.125504   0.166096  -0.2370283   0.0025810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  20  42766  -0.127104   0.168096  -0.2396594   0.0026900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  21  42767  -0.128703   0.170197  -0.2424235   0.0028330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  22  42768  -0.130203   0.172297  -0.2453416   0.0030030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  23  42769  -0.131603   0.174397  -0.2484117   0.0031330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  24  42770  -0.133002   0.176598  -0.2515988   0.0032180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  25  42771  -0.134302   0.178698  -0.2548229   0.0032270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  26  42772  -0.135602   0.180898  -0.2580170   0.0031490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  27  42773  -0.136802   0.183098  -0.2611001   0.0030080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  28  42774  -0.138001   0.185299  -0.2640112   0.0028210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  29  42775  -0.139101   0.187499  -0.2667423   0.0026450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  30  42776  -0.140201   0.189699  -0.2693124   0.0025040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1975  12  31  42777  -0.141201   0.191999  -0.2717695   0.0024220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1   1  42778  -0.142200   0.194300   0.7258224   0.0024030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1   2  42779  -0.143200   0.196600   0.7233963   0.0024470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1   3  42780  -0.144100   0.199000   0.7209292   0.0025060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1   4  42781  -0.144899   0.201301   0.7183831   0.0025760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1   5  42782  -0.145799   0.203701   0.7157740   0.0026370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1   6  42783  -0.146599   0.206201   0.7131179   0.0026700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1   7  42784  -0.147299   0.208601   0.7104348   0.0026810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1   8  42785  -0.147998   0.211102   0.7077667   0.0026620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1   9  42786  -0.148698   0.213602   0.7051216   0.0026150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  10  42787  -0.149398   0.216102   0.7025425   0.0025490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  11  42788  -0.149998   0.218602   0.7000254   0.0024860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  12  42789  -0.150597   0.221203   0.6975683   0.0024210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  13  42790  -0.151097   0.223803   0.6951652   0.0023890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  14  42791  -0.151697   0.226403   0.6927751   0.0024060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  15  42792  -0.152096   0.229004   0.6903350   0.0024750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  16  42793  -0.152596   0.231604   0.6877959   0.0026030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  17  42794  -0.152996   0.234204   0.6850998   0.0027970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  18  42795  -0.153396   0.236804   0.6822017   0.0030110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  19  42796  -0.153795   0.239405   0.6790806   0.0032160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  20  42797  -0.154195   0.242005   0.6757775   0.0033770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  21  42798  -0.154495   0.244605   0.6723654   0.0034420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  22  42799  -0.154795   0.247305   0.6689343   0.0034140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  23  42800  -0.154994   0.249906   0.6655612   0.0033120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  24  42801  -0.155194   0.252506   0.6623221   0.0031620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  25  42802  -0.155394   0.255106   0.6592360   0.0030130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  26  42803  -0.155593   0.257607   0.6562849   0.0028970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  27  42804  -0.155693   0.260207   0.6534228   0.0028270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  28  42805  -0.155793   0.262707   0.6506107   0.0028090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  29  42806  -0.155893   0.265307   0.6477876   0.0028360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  30  42807  -0.155892   0.267808   0.6449255   0.0029010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   1  31  42808  -0.155892   0.270308   0.6419804   0.0029780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2   1  42809  -0.155792   0.272808   0.6389723   0.0030340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2   2  42810  -0.155691   0.275309   0.6359212   0.0030730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2   3  42811  -0.155591   0.277709   0.6328471   0.0030680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2   4  42812  -0.155391   0.280209   0.6297960   0.0030380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2   5  42813  -0.155191   0.282609   0.6267819   0.0029780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2   6  42814  -0.154990   0.285010   0.6238478   0.0028960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2   7  42815  -0.154690   0.287410   0.6210037   0.0028020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2   8  42816  -0.154290   0.289810   0.6182526   0.0027000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2   9  42817  -0.153990   0.292110   0.6155855   0.0026270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  10  42818  -0.153489   0.294411   0.6129773   0.0025870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  11  42819  -0.153089   0.296811   0.6103852   0.0025950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  12  42820  -0.152589   0.299111   0.6077681   0.0026620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  13  42821  -0.151988   0.301312   0.6050400   0.0027920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  14  42822  -0.151388   0.303612   0.6021659   0.0029620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  15  42823  -0.150788   0.305912   0.5991008   0.0031570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  16  42824  -0.150088   0.308112   0.5958627   0.0033090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  17  42825  -0.149387   0.310313   0.5925106   0.0033900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  18  42826  -0.148687   0.312513   0.5891295   0.0033530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  19  42827  -0.147887   0.314713   0.5858384   0.0032240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  20  42828  -0.147087   0.316913   0.5827123   0.0030220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  21  42829  -0.146286   0.319014   0.5797892   0.0028260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  22  42830  -0.145386   0.321214   0.5770501   0.0026700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  23  42831  -0.144486   0.323314   0.5744390   0.0025720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  24  42832  -0.143585   0.325415   0.5718939   0.0025380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  25  42833  -0.142585   0.327415   0.5693428   0.0025620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  26  42834  -0.141585   0.329515   0.5667447   0.0026390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  27  42835  -0.140585   0.331515   0.5640576   0.0027380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  28  42836  -0.139584   0.333516   0.5612685   0.0028370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   2  29  42837  -0.138584   0.335516   0.5583884   0.0029280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3   1  42838  -0.137484   0.337416   0.5554223   0.0029870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3   2  42839  -0.136484   0.339316   0.5524262   0.0030110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3   3  42840  -0.135383   0.341217   0.5494011   0.0030110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3   4  42841  -0.134183   0.343117   0.5464020   0.0029760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3   5  42842  -0.133083   0.344917   0.5434559   0.0029240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3   6  42843  -0.131982   0.346718   0.5405537   0.0028700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3   7  42844  -0.130782   0.348518   0.5377126   0.0028260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3   8  42845  -0.129582   0.350318   0.5349025   0.0027990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3   9  42846  -0.128382   0.352018   0.5320894   0.0028140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  10  42847  -0.127181   0.353719   0.5292463   0.0028820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  11  42848  -0.125981   0.355419   0.5263042   0.0030120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  12  42849  -0.124681   0.357119   0.5232021   0.0031910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  13  42850  -0.123381   0.358719   0.5199000   0.0034090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  14  42851  -0.122080   0.360420   0.5163739   0.0036370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  15  42852  -0.120780   0.362020   0.5126528   0.0037930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  16  42853  -0.119480   0.363720   0.5088207   0.0038610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  17  42854  -0.118079   0.365321   0.5049686   0.0038140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  18  42855  -0.116679   0.366921   0.5012245   0.0036700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  19  42856  -0.115279   0.368521   0.4976554   0.0034670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  20  42857  -0.113779   0.370221   0.4942783   0.0032830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  21  42858  -0.112278   0.371822   0.4910722   0.0031500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  22  42859  -0.110778   0.373422   0.4879550   0.0030870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  23  42860  -0.109178   0.375122   0.4848779   0.0030860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  24  42861  -0.107578   0.376722   0.4817668   0.0031420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  25  42862  -0.105977   0.378423   0.4785847   0.0032130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  26  42863  -0.104277   0.380123   0.4753376   0.0032920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  27  42864  -0.102477   0.381823   0.4719945   0.0033710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  28  42865  -0.100776   0.383524   0.4685924   0.0034270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  29  42866  -0.098876   0.385224   0.4651513   0.0034410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  30  42867  -0.097076   0.387024   0.4617122   0.0034310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   3  31  42868  -0.095076   0.388724   0.4583081   0.0033830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4   1  42869  -0.093175   0.390525   0.4549620   0.0033160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4   2  42870  -0.091075   0.392225   0.4516779   0.0032530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4   3  42871  -0.089075   0.394025   0.4484658   0.0031750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4   4  42872  -0.086975   0.395725   0.4453107   0.0031170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4   5  42873  -0.084774   0.397526   0.4422085   0.0030930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4   6  42874  -0.082574   0.399326   0.4390984   0.0031150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4   7  42875  -0.080374   0.401026   0.4359603   0.0031820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4   8  42876  -0.078073   0.402827   0.4327152   0.0033150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4   9  42877  -0.075773   0.404527   0.4293221   0.0034870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  10  42878  -0.073373   0.406227   0.4257340   0.0036710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  11  42879  -0.070973   0.407927   0.4219749   0.0038480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  12  42880  -0.068572   0.409628   0.4180688   0.0039500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  13  42881  -0.066172   0.411228   0.4140997   0.0039510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  14  42882  -0.063672   0.412828   0.4101926   0.0038440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  15  42883  -0.061172   0.414428   0.4064285   0.0036550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  16  42884  -0.058671   0.415929   0.4028803   0.0034400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  17  42885  -0.056071   0.417429   0.3995382   0.0032530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  18  42886  -0.053571   0.418929   0.3963531   0.0031300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  19  42887  -0.050970   0.420330   0.3932540   0.0030770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  20  42888  -0.048370   0.421730   0.3901699   0.0030780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  21  42889  -0.045770   0.423030   0.3870788   0.0031180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  22  42890  -0.043170   0.424230   0.3839317   0.0031660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  23  42891  -0.040569   0.425431   0.3807486   0.0032160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  24  42892  -0.037969   0.426531   0.3775145   0.0032490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  25  42893  -0.035369   0.427631   0.3742604   0.0032550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  26  42894  -0.032668   0.428632   0.3710243   0.0032310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  27  42895  -0.030068   0.429632   0.3678071   0.0031880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  28  42896  -0.027468   0.430432   0.3646550   0.0031150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  29  42897  -0.024768   0.431232   0.3615709   0.0030420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   4  30  42898  -0.022167   0.432033   0.3585688   0.0029730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5   1  42899  -0.019567   0.432633   0.3556297   0.0029200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5   2  42900  -0.016867   0.433233   0.3527196   0.0028960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5   3  42901  -0.014267   0.433733   0.3498155   0.0029110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5   4  42902  -0.011566   0.434234   0.3468824   0.0029740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5   5  42903  -0.008966   0.434534   0.3438503   0.0030880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5   6  42904  -0.006266   0.434834   0.3406901   0.0032370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5   7  42905  -0.003665   0.435135   0.3373660   0.0034240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5   8  42906  -0.000965   0.435235   0.3338529   0.0036010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5   9  42907   0.001635   0.435335   0.3301858   0.0037320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  10  42908   0.004335   0.435335   0.3264027   0.0038020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  11  42909   0.007036   0.435336   0.3226036   0.0037790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  12  42910   0.009736   0.435136   0.3188745   0.0036670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  13  42911   0.012436   0.434936   0.3152964   0.0034920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  14  42912   0.015136   0.434736   0.3118903   0.0033150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  15  42913   0.017837   0.434337   0.3086521   0.0031720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  16  42914   0.020537   0.433937   0.3055240   0.0031070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  17  42915   0.023237   0.433537   0.3024259   0.0030960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  18  42916   0.026038   0.432938   0.2993168   0.0031150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  19  42917   0.028838   0.432438   0.2961827   0.0031550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  20  42918   0.031638   0.431738   0.2930106   0.0031850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  21  42919   0.034438   0.431038   0.2898275   0.0031860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  22  42920   0.037239   0.430339   0.2866564   0.0031610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  23  42921   0.040039   0.429539   0.2835142   0.0031090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  24  42922   0.042939   0.428639   0.2804581   0.0030190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  25  42923   0.045839   0.427739   0.2774830   0.0029170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  26  42924   0.048740   0.426740   0.2746189   0.0028020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  27  42925   0.051640   0.425740   0.2718788   0.0026790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  28  42926   0.054540   0.424740   0.2692547   0.0025810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  29  42927   0.057541   0.423641   0.2667066   0.0025100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  30  42928   0.060541   0.422541   0.2642225   0.0024750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   5  31  42929   0.063541   0.421341   0.2617413   0.0024960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6   1  42930   0.066541   0.420141   0.2592152   0.0025540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6   2  42931   0.069542   0.418842   0.2566191   0.0026540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6   3  42932   0.072642   0.417542   0.2538980   0.0027800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6   4  42933   0.075642   0.416242   0.2510469   0.0029180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6   5  42934   0.078742   0.414942   0.2480808   0.0030180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6   6  42935   0.081743   0.413543   0.2450287   0.0030650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6   7  42936   0.084843   0.412143   0.2419756   0.0030380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6   8  42937   0.087943   0.410643   0.2389874   0.0029370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6   9  42938   0.091044   0.409144   0.2361213   0.0027780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  10  42939   0.094144   0.407744   0.2334382   0.0025970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  11  42940   0.097144   0.406144   0.2309181   0.0024390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  12  42941   0.100244   0.404644   0.2285410   0.0023270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  13  42942   0.103345   0.403045   0.2262319   0.0022920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  14  42943   0.106345   0.401545   0.2239398   0.0023090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  15  42944   0.109445   0.399945   0.2216076   0.0023490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  16  42945   0.112445   0.398345   0.2192445   0.0023840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  17  42946   0.115446   0.396646   0.2168584   0.0023950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  18  42947   0.118446   0.395046   0.2144753   0.0023750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  19  42948   0.121446   0.393346   0.2121162   0.0023260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  20  42949   0.124347   0.391647   0.2098221   0.0022590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  21  42950   0.127347   0.389947   0.2076060   0.0021780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  22  42951   0.130247   0.388247   0.2054808   0.0020720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  23  42952   0.133147   0.386547   0.2034517   0.0019840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  24  42953   0.135948   0.384748   0.2015176   0.0018980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  25  42954   0.138848   0.382948   0.1996475   0.0018370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  26  42955   0.141648   0.381248   0.1978204   0.0018230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  27  42956   0.144448   0.379348   0.1959863   0.0018540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  28  42957   0.147249   0.377549   0.1940961   0.0019430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  29  42958   0.149949   0.375749   0.1920850   0.0020770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   6  30  42959   0.152649   0.373849   0.1899319   0.0022500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7   1  42960   0.155350   0.371950   0.1875928   0.0024160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7   2  42961   0.158050   0.370050   0.1850987   0.0025630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7   3  42962   0.160750   0.368150   0.1824836   0.0026550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7   4  42963   0.163350   0.366150   0.1798115   0.0026770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7   5  42964   0.165951   0.364251   0.1771613   0.0026320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7   6  42965   0.168551   0.362251   0.1745752   0.0025350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7   7  42966   0.171151   0.360251   0.1720991   0.0024160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7   8  42967   0.173751   0.358251   0.1697390   0.0023080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7   9  42968   0.176252   0.356252   0.1674679   0.0022440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  10  42969   0.178752   0.354252   0.1652418   0.0022310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  11  42970   0.181252   0.352252   0.1629966   0.0022670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  12  42971   0.183653   0.350153   0.1606935   0.0023410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  13  42972   0.186153   0.348153   0.1583024   0.0024220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  14  42973   0.188553   0.346153   0.1558463   0.0024850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  15  42974   0.190853   0.344053   0.1533442   0.0025130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  16  42975   0.193154   0.342054   0.1508421   0.0024950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  17  42976   0.195454   0.340054   0.1483649   0.0024540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  18  42977   0.197754   0.337954   0.1459528   0.0023770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  19  42978   0.199955   0.335955   0.1436077   0.0022920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  20  42979   0.202155   0.333855   0.1413616   0.0022000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  21  42980   0.204255   0.331855   0.1392145   0.0021160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  22  42981   0.206255   0.329755   0.1371314   0.0020440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  23  42982   0.208356   0.327656   0.1351032   0.0020270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  24  42983   0.210256   0.325556   0.1330721   0.0020440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  25  42984   0.212156   0.323456   0.1309980   0.0021120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  26  42985   0.214056   0.321356   0.1288319   0.0022390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  27  42986   0.215857   0.319257   0.1265168   0.0023950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  28  42987   0.217557   0.317057   0.1240266   0.0025750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  29  42988   0.219257   0.314857   0.1213825   0.0027240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  30  42989   0.220958   0.312658   0.1185974   0.0028250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   7  31  42990   0.222458   0.310458   0.1157603   0.0028360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8   1  42991   0.223958   0.308158   0.1129422   0.0027780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8   2  42992   0.225458   0.305858   0.1102241   0.0026520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8   3  42993   0.226759   0.303559   0.1076469   0.0025010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8   4  42994   0.228159   0.301159   0.1052168   0.0023630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8   5  42995   0.229359   0.298759   0.1029087   0.0022540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8   6  42996   0.230559   0.296359   0.1006906   0.0022020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8   7  42997   0.231660   0.293860   0.0984935   0.0021890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8   8  42998   0.232660   0.291360   0.0962863   0.0022330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8   9  42999   0.233660   0.288860   0.0940212   0.0022980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  10  43000   0.234561   0.286261   0.0916921   0.0023470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  11  43001   0.235361   0.283661   0.0893270   0.0023780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  12  43002   0.236161   0.281061   0.0869499   0.0023690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  13  43003   0.236861   0.278361   0.0846018   0.0023210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  14  43004   0.237462   0.275662   0.0823086   0.0022510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  15  43005   0.238062   0.272962   0.0800955   0.0021600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  16  43006   0.238462   0.270262   0.0779814   0.0020690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  17  43007   0.238862   0.267462   0.0759583   0.0019800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  18  43008   0.239263   0.264663   0.0740162   0.0019170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  19  43009   0.239463   0.261863   0.0721220   0.0018850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  20  43010   0.239663   0.258963   0.0702319   0.0018950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  21  43011   0.239764   0.256164   0.0683058   0.0019640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  22  43012   0.239864   0.253264   0.0662857   0.0020960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  23  43013   0.239764   0.250364   0.0640986   0.0022750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  24  43014   0.239664   0.247464   0.0617254   0.0024850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  25  43015   0.239565   0.244565   0.0591283   0.0027030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  26  43016   0.239265   0.241665   0.0563432   0.0028670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  27  43017   0.238965   0.238765   0.0534111   0.0029620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  28  43018   0.238565   0.235865   0.0504420   0.0029600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  29  43019   0.238166   0.232866   0.0475178   0.0028780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  30  43020   0.237566   0.229966   0.0447017   0.0027510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   8  31  43021   0.237066   0.227066   0.0420046   0.0026270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9   1  43022   0.236367   0.224067   0.0394245   0.0025420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9   2  43023   0.235667   0.221167   0.0369004   0.0025150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9   3  43024   0.234867   0.218267   0.0343632   0.0025490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9   4  43025   0.234067   0.215367   0.0317761   0.0026330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9   5  43026   0.233168   0.212468   0.0290880   0.0027460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9   6  43027   0.232268   0.209568   0.0262909   0.0028650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9   7  43028   0.231268   0.206668   0.0233717   0.0029680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9   8  43029   0.230268   0.203768   0.0203646   0.0030380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9   9  43030   0.229169   0.200969   0.0173095   0.0030670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  10  43031   0.228069   0.198169   0.0142434   0.0030600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  11  43032   0.226869   0.195269   0.0112083   0.0030260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  12  43033   0.225670   0.192570   0.0082061   0.0029670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  13  43034   0.224470   0.189770   0.0052650   0.0029160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  14  43035   0.223170   0.187070   0.0023809   0.0028560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  15  43036   0.221970   0.184370  -0.0004562   0.0028210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  16  43037   0.220671   0.181671  -0.0032853   0.0028230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  17  43038   0.219271   0.179071  -0.0061265   0.0028700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  18  43039   0.217971   0.176371  -0.0090316   0.0029580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  19  43040   0.216571   0.173871  -0.0120597   0.0031060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  20  43041   0.215172   0.171272  -0.0152578   0.0032860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  21  43042   0.213772   0.168872  -0.0186400   0.0034860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  22  43043   0.212372   0.166372  -0.0222151   0.0036700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  23  43044   0.210873   0.163973  -0.0259592   0.0037930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  24  43045   0.209373   0.161573  -0.0297713   0.0038140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  25  43046   0.207973   0.159273  -0.0335634   0.0037450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  26  43047   0.206473   0.156973  -0.0372376   0.0036020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  27  43048   0.204974   0.154774  -0.0407487   0.0034220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  28  43049   0.203374   0.152574  -0.0440998   0.0032760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  29  43050   0.201874   0.150374  -0.0473209   0.0031780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976   9  30  43051   0.200274   0.148274  -0.0504771   0.0031460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10   1  43052   0.198775   0.146175  -0.0536302   0.0031680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10   2  43053   0.197175   0.144175  -0.0568343   0.0032230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10   3  43054   0.195575   0.142175  -0.0600904   0.0032890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10   4  43055   0.193976   0.140276  -0.0634105   0.0033480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10   5  43056   0.192376   0.138376  -0.0667777   0.0033820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10   6  43057   0.190676   0.136476  -0.0701538   0.0033740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10   7  43058   0.188976   0.134676  -0.0735139   0.0033400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10   8  43059   0.187377   0.132877  -0.0768240   0.0032750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10   9  43060   0.185677   0.131077  -0.0800482   0.0031810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  10  43061   0.183877   0.129377  -0.0831943   0.0030900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  11  43062   0.182178   0.127678  -0.0862404   0.0030070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  12  43063   0.180378   0.125978  -0.0892135   0.0029430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  13  43064   0.178578   0.124378  -0.0921367   0.0029190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  14  43065   0.176778   0.122678  -0.0950658   0.0029360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  15  43066   0.174879   0.121079  -0.0980239   0.0029880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  16  43067   0.172979   0.119579  -0.1010690   0.0030990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  17  43068   0.171079   0.117979  -0.1042362   0.0032540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  18  43069   0.169079   0.116479  -0.1075863   0.0034390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  19  43070   0.167080   0.114980  -0.1111074   0.0036210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  20  43071   0.165080   0.113480  -0.1148185   0.0037820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  21  43072   0.162980   0.111980  -0.1186497   0.0038660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  22  43073   0.160881   0.110481  -0.1225198   0.0038670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  23  43074   0.158781   0.109081  -0.1263529   0.0037770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  24  43075   0.156581   0.107681  -0.1300540   0.0036180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  25  43076   0.154381   0.106281  -0.1335871   0.0034520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  26  43077   0.152082   0.104982  -0.1369813   0.0033270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  27  43078   0.149782   0.103682  -0.1402724   0.0032670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  28  43079   0.147382   0.102382  -0.1435265   0.0032590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  29  43080   0.144982   0.101082  -0.1468146   0.0033020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  30  43081   0.142583   0.099883  -0.1501348   0.0033480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  10  31  43082   0.140083   0.098683  -0.1534989   0.0033760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11   1  43083   0.137583   0.097483  -0.1568820   0.0033850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11   2  43084   0.135084   0.096384  -0.1602691   0.0033660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11   3  43085   0.132484   0.095284  -0.1636143   0.0033170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11   4  43086   0.129884   0.094184  -0.1668944   0.0032400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11   5  43087   0.127184   0.093184  -0.1700765   0.0031300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11   6  43088   0.124585   0.092185  -0.1731516   0.0030100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11   7  43089   0.121785   0.091285  -0.1761078   0.0029040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11   8  43090   0.119085   0.090285  -0.1789559   0.0028050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11   9  43091   0.116285   0.089385  -0.1817260   0.0027310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  10  43092   0.113486   0.088586  -0.1844302   0.0026930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  11  43093   0.110586   0.087786  -0.1871273   0.0027060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  12  43094   0.107686   0.086886  -0.1898584   0.0027530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  13  43095   0.104787   0.086187  -0.1926465   0.0028400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  14  43096   0.101787   0.085387  -0.1955487   0.0029690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  15  43097   0.098787   0.084687  -0.1985998   0.0031220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  16  43098   0.095787   0.083987  -0.2017899   0.0032640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  17  43099   0.092688   0.083288  -0.2051050   0.0033660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  18  43100   0.089588   0.082588  -0.2084982   0.0034090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  19  43101   0.086488   0.081988  -0.2118953   0.0033690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  20  43102   0.083288   0.081388  -0.2152134   0.0032590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  21  43103   0.080189   0.080789  -0.2184005   0.0031140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  22  43104   0.076889   0.080189  -0.2214477   0.0029930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  23  43105   0.073689   0.079589  -0.2243948   0.0029240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  24  43106   0.070390   0.079090  -0.2273079   0.0029110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  25  43107   0.067090   0.078490  -0.2302440   0.0029580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  26  43108   0.063690   0.077990  -0.2332312   0.0030270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  27  43109   0.060390   0.077490  -0.2362843   0.0030880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  28  43110   0.056991   0.077091  -0.2393994   0.0031250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  29  43111   0.053491   0.076591  -0.2425256   0.0031320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  11  30  43112   0.049991   0.076191  -0.2456437   0.0031000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12   1  43113   0.046491   0.075791  -0.2487168   0.0030420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12   2  43114   0.042992   0.075392  -0.2517309   0.0029740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12   3  43115   0.039392   0.074992  -0.2546611   0.0028830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12   4  43116   0.035792   0.074692  -0.2574982   0.0027930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12   5  43117   0.032193   0.074293  -0.2602513   0.0027070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12   6  43118   0.028493   0.074093  -0.2629314   0.0026560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12   7  43119   0.024793   0.073793  -0.2655656   0.0026290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12   8  43120   0.021093   0.073593  -0.2681927   0.0026300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12   9  43121   0.017294   0.073394  -0.2708398   0.0026820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  10  43122   0.013494   0.073294  -0.2735600   0.0027620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  11  43123   0.009694   0.073094  -0.2763751   0.0028720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  12  43124   0.005894   0.073094  -0.2793082   0.0029850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  13  43125   0.001995   0.073095  -0.2823333   0.0030910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  14  43126  -0.001905   0.073095  -0.2854705   0.0031660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  15  43127  -0.005805   0.073195  -0.2886586   0.0032000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  16  43128  -0.009704   0.073296  -0.2918387   0.0031600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  17  43129  -0.013604   0.073496  -0.2949678   0.0030680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  18  43130  -0.017604   0.073696  -0.2979610   0.0029250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  19  43131  -0.021504   0.073996  -0.3008261   0.0027960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  20  43132  -0.025503   0.074297  -0.3035542   0.0026900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  21  43133  -0.029503   0.074697  -0.3062154   0.0026430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  22  43134  -0.033403   0.075197  -0.3088705   0.0026650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  23  43135  -0.037403   0.075697  -0.3115666   0.0027230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  24  43136  -0.041402   0.076298  -0.3143167   0.0027830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  25  43137  -0.045302   0.076898  -0.3171259   0.0028290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  26  43138  -0.049202   0.077598  -0.3199610   0.0028360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  27  43139  -0.053201   0.078399  -0.3227861   0.0028070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  28  43140  -0.057101   0.079199  -0.3255753   0.0027570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  29  43141  -0.060901   0.080099  -0.3282924   0.0026850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  30  43142  -0.064801   0.081099  -0.3309315   0.0026010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1976  12  31  43143  -0.068600   0.082100  -0.3334846   0.0025150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1   1  43144  -0.072400   0.083200   0.6640352   0.0024390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1   2  43145  -0.076200   0.084400   0.6616291   0.0023880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1   3  43146  -0.079899   0.085701   0.6592480   0.0023700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1   4  43147  -0.083599   0.087001   0.6568658   0.0024020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1   5  43148  -0.087299   0.088401   0.6544407   0.0024650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1   6  43149  -0.090899   0.089901   0.6519226   0.0025680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1   7  43150  -0.094498   0.091502   0.6492834   0.0027130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1   8  43151  -0.098098   0.093102   0.6465003   0.0028630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1   9  43152  -0.101598   0.094802   0.6435602   0.0030050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  10  43153  -0.105098   0.096602   0.6405021   0.0031140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  11  43154  -0.108497   0.098403   0.6373489   0.0031720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  12  43155  -0.111897   0.100303   0.6341788   0.0031700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  13  43156  -0.115297   0.102303   0.6310277   0.0031130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  14  43157  -0.118596   0.104404   0.6279635   0.0030100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  15  43158  -0.121896   0.106504   0.6250104   0.0029070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  16  43159  -0.125196   0.108704   0.6221523   0.0028170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  17  43160  -0.128396   0.111004   0.6193602   0.0027760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  18  43161  -0.131595   0.113305   0.6165790   0.0027850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  19  43162  -0.134795   0.115705   0.6137639   0.0028520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  20  43163  -0.137895   0.118105   0.6108678   0.0029300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  21  43164  -0.140995   0.120605   0.6078976   0.0030050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  22  43165  -0.144094   0.123106   0.6048795   0.0030330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  23  43166  -0.147094   0.125806   0.6018584   0.0030140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  24  43167  -0.150094   0.128406   0.5988762   0.0029530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  25  43168  -0.152993   0.131107   0.5959701   0.0028540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  26  43169  -0.155893   0.133907   0.5931640   0.0027470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  27  43170  -0.158793   0.136707   0.5904778   0.0026340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  28  43171  -0.161693   0.139607   0.5878927   0.0025280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  29  43172  -0.164492   0.142508   0.5854146   0.0024430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  30  43173  -0.167292   0.145408   0.5829965   0.0023890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   1  31  43174  -0.169992   0.148408   0.5806223   0.0023770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2   1  43175  -0.172692   0.151408   0.5782372   0.0024090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2   2  43176  -0.175391   0.154509   0.5757991   0.0024740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2   3  43177  -0.177991   0.157709   0.5732659   0.0025880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2   4  43178  -0.180591   0.160809   0.5706048   0.0027250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2   5  43179  -0.183190   0.164010   0.5678047   0.0028630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2   6  43180  -0.185690   0.167310   0.5648885   0.0029710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2   7  43181  -0.188190   0.170610   0.5618814   0.0030230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2   8  43182  -0.190590   0.173910   0.5588563   0.0030140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2   9  43183  -0.192989   0.177311   0.5558831   0.0029320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  10  43184  -0.195289   0.180711   0.5530070   0.0028070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  11  43185  -0.197589   0.184111   0.5502639   0.0026810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  12  43186  -0.199889   0.187611   0.5476487   0.0025650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  13  43187  -0.202088   0.191112   0.5451186   0.0025040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  14  43188  -0.204188   0.194712   0.5426215   0.0025000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  15  43189  -0.206288   0.198212   0.5400904   0.0025600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  16  43190  -0.208287   0.201813   0.5374792   0.0026550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  17  43191  -0.210287   0.205413   0.5347681   0.0027660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  18  43192  -0.212187   0.209113   0.5319660   0.0028420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  19  43193  -0.214087   0.212713   0.5290978   0.0028850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  20  43194  -0.215886   0.216414   0.5262117   0.0028800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  21  43195  -0.217586   0.220114   0.5233516   0.0028340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  22  43196  -0.219286   0.223814   0.5205614   0.0027630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  23  43197  -0.220886   0.227514   0.5178393   0.0026790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  24  43198  -0.222385   0.231215   0.5152112   0.0025870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  25  43199  -0.223785   0.235015   0.5126590   0.0025200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  26  43200  -0.225185   0.238715   0.5101619   0.0024790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  27  43201  -0.226484   0.242416   0.5076868   0.0024670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   2  28  43202  -0.227684   0.246116   0.5052026   0.0025100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3   1  43203  -0.228884   0.249816   0.5026605   0.0025900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3   2  43204  -0.229884   0.253516   0.5000074   0.0027130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3   3  43205  -0.230883   0.257217   0.4972222   0.0028710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3   4  43206  -0.231783   0.260817   0.4942701   0.0030340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3   5  43207  -0.232583   0.264517   0.4911490   0.0031940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3   6  43208  -0.233283   0.268217   0.4878888   0.0033060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3   7  43209  -0.233982   0.271818   0.4845607   0.0033450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3   8  43210  -0.234482   0.275518   0.4812376   0.0033020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3   9  43211  -0.234882   0.279118   0.4779884   0.0031960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  10  43212  -0.235281   0.282719   0.4748543   0.0030620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  11  43213  -0.235581   0.286419   0.4718602   0.0029510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  12  43214  -0.235781   0.290019   0.4689480   0.0028830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  13  43215  -0.235781   0.293619   0.4660659   0.0028910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  14  43216  -0.235780   0.297220   0.4631568   0.0029450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  15  43217  -0.235680   0.300820   0.4601616   0.0030480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  16  43218  -0.235480   0.304320   0.4570435   0.0031800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  17  43219  -0.235280   0.307920   0.4538154   0.0033030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  18  43220  -0.234879   0.311521   0.4504472   0.0033970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  19  43221  -0.234379   0.315021   0.4470271   0.0034370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  20  43222  -0.233879   0.318521   0.4435880   0.0034330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  21  43223  -0.233178   0.322022   0.4401718   0.0033850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  22  43224  -0.232478   0.325522   0.4368237   0.0033180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  23  43225  -0.231678   0.329022   0.4335376   0.0032360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  24  43226  -0.230778   0.332522   0.4303494   0.0031430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  25  43227  -0.229777   0.335923   0.4272443   0.0030710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  26  43228  -0.228677   0.339323   0.4242062   0.0030210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  27  43229  -0.227477   0.342623   0.4211980   0.0030030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  28  43230  -0.226276   0.345924   0.4181859   0.0030300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  29  43231  -0.224876   0.349224   0.4151228   0.0031020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  30  43232  -0.223476   0.352424   0.4119776   0.0032040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   3  31  43233  -0.221976   0.355624   0.4087055   0.0033340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4   1  43234  -0.220375   0.358825   0.4052984   0.0034700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4   2  43235  -0.218775   0.361925   0.4017732   0.0035820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4   3  43236  -0.217075   0.364925   0.3981631   0.0036250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4   4  43237  -0.215275   0.367925   0.3945510   0.0035950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4   5  43238  -0.213374   0.370926   0.3910098   0.0034840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4   6  43239  -0.211474   0.373826   0.3876107   0.0033080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4   7  43240  -0.209474   0.376726   0.3843966   0.0031420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4   8  43241  -0.207473   0.379627   0.3813254   0.0030170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4   9  43242  -0.205373   0.382427   0.3783423   0.0029590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  10  43243  -0.203173   0.385127   0.3753792   0.0029580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  11  43244  -0.200973   0.387827   0.3724020   0.0030210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  12  43245  -0.198772   0.390528   0.3693299   0.0031130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  13  43246  -0.196472   0.393228   0.3661757   0.0032040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  14  43247  -0.194172   0.395828   0.3629276   0.0032760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  15  43248  -0.191772   0.398328   0.3596345   0.0033140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  16  43249  -0.189471   0.400829   0.3563023   0.0033350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  17  43250  -0.187071   0.403329   0.3529772   0.0033200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  18  43251  -0.184571   0.405829   0.3496791   0.0032610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  19  43252  -0.182170   0.408230   0.3464569   0.0031830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  20  43253  -0.179670   0.410630   0.3433028   0.0031180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  21  43254  -0.177270   0.412930   0.3402147   0.0030610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  22  43255  -0.174770   0.415230   0.3371705   0.0030310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  23  43256  -0.172269   0.417531   0.3341514   0.0030260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  24  43257  -0.169769   0.419831   0.3311153   0.0030520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  25  43258  -0.167269   0.422031   0.3280321   0.0031210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  26  43259  -0.164669   0.424231   0.3248700   0.0032100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  27  43260  -0.162168   0.426432   0.3215919   0.0033300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  28  43261  -0.159668   0.428532   0.3181937   0.0034680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  29  43262  -0.157068   0.430632   0.3146576   0.0036010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   4  30  43263  -0.154567   0.432733   0.3109924   0.0037010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5   1  43264  -0.152067   0.434833   0.3072673   0.0037370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5   2  43265  -0.149467   0.436833   0.3035552   0.0036930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5   3  43266  -0.146867   0.438933   0.2999150   0.0035680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5   4  43267  -0.144266   0.440934   0.2964229   0.0034140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5   5  43268  -0.141666   0.442834   0.2930838   0.0032680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5   6  43269  -0.139066   0.444834   0.2898796   0.0031590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5   7  43270  -0.136366   0.446734   0.2867445   0.0031200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5   8  43271  -0.133665   0.448635   0.2836324   0.0031320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5   9  43272  -0.130965   0.450535   0.2804842   0.0031570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  10  43273  -0.128165   0.452335   0.2773091   0.0031900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  11  43274  -0.125364   0.454136   0.2740999   0.0032020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  12  43275  -0.122464   0.455936   0.2709038   0.0031850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  13  43276  -0.119564   0.457636   0.2677417   0.0031350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  14  43277  -0.116564   0.459336   0.2646545   0.0030540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  15  43278  -0.113563   0.460937   0.2616514   0.0029390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  16  43279  -0.110463   0.462537   0.2587703   0.0028210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  17  43280  -0.107263   0.464137   0.2560071   0.0027050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  18  43281  -0.104063   0.465637   0.2533560   0.0025920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  19  43282  -0.100762   0.467138   0.2508149   0.0025050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  20  43283  -0.097462   0.468538   0.2483347   0.0024600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  21  43284  -0.094062   0.469938   0.2458916   0.0024320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  22  43285  -0.090561   0.471239   0.2434464   0.0024540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  23  43286  -0.086961   0.472539   0.2409613   0.0025130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  24  43287  -0.083361   0.473739   0.2384002   0.0026020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  25  43288  -0.079661   0.474939   0.2357500   0.0027100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  26  43289  -0.075860   0.476040   0.2329889   0.0028210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  27  43290  -0.072060   0.477140   0.2301248   0.0029150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  28  43291  -0.068160   0.478140   0.2271736   0.0029670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  29  43292  -0.064160   0.479040   0.2242005   0.0029680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  30  43293  -0.060159   0.480041   0.2212593   0.0029010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   5  31  43294  -0.056159   0.480841   0.2184252   0.0027820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6   1  43295  -0.051959   0.481741   0.2157001   0.0026470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6   2  43296  -0.047758   0.482442   0.2131109   0.0025490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6   3  43297  -0.043558   0.483242   0.2105848   0.0025050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6   4  43298  -0.039258   0.483842   0.2080907   0.0025100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6   5  43299  -0.034958   0.484542   0.2055515   0.0025610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6   6  43300  -0.030557   0.485143   0.2029674   0.0026050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6   7  43301  -0.026157   0.485643   0.2003492   0.0026250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6   8  43302  -0.021757   0.486143   0.1977301   0.0026080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6   9  43303  -0.017257   0.486543   0.1951570   0.0025530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  10  43304  -0.012656   0.486944   0.1926448   0.0024570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  11  43305  -0.008156   0.487244   0.1902397   0.0023490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  12  43306  -0.003556   0.487544   0.1879506   0.0022180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  13  43307   0.001045   0.487845   0.1857934   0.0020960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  14  43308   0.005645   0.487945   0.1837543   0.0019750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  15  43309   0.010345   0.488045   0.1818351   0.0018780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  16  43310   0.014945   0.488145   0.1799870   0.0018240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  17  43311   0.019646   0.488146   0.1781749   0.0017960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  18  43312   0.024346   0.488046   0.1763817   0.0018070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  19  43313   0.028946   0.487946   0.1745486   0.0018530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  20  43314   0.033647   0.487647   0.1726545   0.0019390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  21  43315   0.038347   0.487447   0.1706743   0.0020340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  22  43316   0.042947   0.487047   0.1685962   0.0021310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  23  43317   0.047547   0.486647   0.1664170   0.0022130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  24  43318   0.052148   0.486148   0.1641699   0.0022740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  25  43319   0.056748   0.485648   0.1618958   0.0022770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  26  43320   0.061348   0.485048   0.1596236   0.0022360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  27  43321   0.065848   0.484348   0.1574295   0.0021470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  28  43322   0.070349   0.483549   0.1553383   0.0020320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  29  43323   0.074849   0.482749   0.1533612   0.0019360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   6  30  43324   0.079249   0.481849   0.1514621   0.0018710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7   1  43325   0.083650   0.480850   0.1495879   0.0018750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7   2  43326   0.087950   0.479850   0.1476938   0.0019300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7   3  43327   0.092250   0.478750   0.1457227   0.0020030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7   4  43328   0.096450   0.477550   0.1436925   0.0020610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7   5  43329   0.100651   0.476351   0.1416254   0.0020760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7   6  43330   0.104851   0.475051   0.1395562   0.0020520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7   7  43331   0.108851   0.473651   0.1375351   0.0019770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7   8  43332   0.112951   0.472251   0.1356020   0.0018840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7   9  43333   0.116952   0.470752   0.1337718   0.0017760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  10  43334   0.120852   0.469252   0.1320497   0.0016760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  11  43335   0.124752   0.467652   0.1304165   0.0015850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  12  43336   0.128553   0.466053   0.1288634   0.0015250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  13  43337   0.132253   0.464353   0.1273543   0.0014880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  14  43338   0.136053   0.462653   0.1258641   0.0014990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  15  43339   0.139653   0.460853   0.1243430   0.0015600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  16  43340   0.143354   0.459054   0.1227308   0.0016480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  17  43341   0.146854   0.457154   0.1210257   0.0017680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  18  43342   0.150354   0.455254   0.1191886   0.0019080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  19  43343   0.153854   0.453354   0.1172074   0.0020530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  20  43344   0.157255   0.451355   0.1150873   0.0021730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  21  43345   0.160655   0.449355   0.1128631   0.0022690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  22  43346   0.163955   0.447255   0.1105750   0.0022980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  23  43347   0.167256   0.445156   0.1082829   0.0022770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  24  43348   0.170456   0.443056   0.1060357   0.0022140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  25  43349   0.173656   0.440956   0.1038636   0.0021170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  26  43350   0.176756   0.438756   0.1017914   0.0020220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  27  43351   0.179857   0.436457   0.0997993   0.0019580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  28  43352   0.182957   0.434257   0.0978572   0.0019370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  29  43353   0.185957   0.431957   0.0959070   0.0019710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  30  43354   0.188857   0.429657   0.0938919   0.0020430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   7  31  43355   0.191858   0.427258   0.0918097   0.0021180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8   1  43356   0.194658   0.424858   0.0896656   0.0021600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8   2  43357   0.197558   0.422458   0.0874965   0.0021600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8   3  43358   0.200359   0.420059   0.0853653   0.0020940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8   4  43359   0.203059   0.417559   0.0833322   0.0019860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8   5  43360   0.205759   0.415059   0.0814000   0.0018650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8   6  43361   0.208459   0.412559   0.0796029   0.0017370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8   7  43362   0.211160   0.409960   0.0779328   0.0016160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8   8  43363   0.213760   0.407360   0.0763646   0.0015230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8   9  43364   0.216260   0.404760   0.0748755   0.0014710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  10  43365   0.218860   0.402060   0.0734103   0.0014560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  11  43366   0.221361   0.399361   0.0719482   0.0014940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  12  43367   0.223761   0.396661   0.0704171   0.0015630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  13  43368   0.226261   0.393861   0.0687999   0.0016870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  14  43369   0.228662   0.391162   0.0670448   0.0018270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  15  43370   0.230962   0.388362   0.0651316   0.0019880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  16  43371   0.233362   0.385462   0.0630715   0.0021400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  17  43372   0.235662   0.382662   0.0608624   0.0022580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  18  43373   0.237863   0.379763   0.0585622   0.0023350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  19  43374   0.240163   0.376863   0.0562231   0.0023430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  20  43375   0.242363   0.373963   0.0538919   0.0023120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  21  43376   0.244463   0.370963   0.0515968   0.0022550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  22  43377   0.246664   0.367964   0.0493717   0.0022080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  23  43378   0.248664   0.364964   0.0471815   0.0021790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  24  43379   0.250764   0.361964   0.0449964   0.0022090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  25  43380   0.252765   0.358965   0.0427552   0.0022930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  26  43381   0.254665   0.355865   0.0404051   0.0024230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  27  43382   0.256565   0.352865   0.0379020   0.0025740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  28  43383   0.258465   0.349765   0.0352608   0.0027040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  29  43384   0.260266   0.346566   0.0325087   0.0028110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  30  43385   0.261966   0.343466   0.0296675   0.0028410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   8  31  43386   0.263666   0.340266   0.0268344   0.0028270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9   1  43387   0.265366   0.337166   0.0240352   0.0027550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9   2  43388   0.266867   0.333867   0.0213191   0.0026760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9   3  43389   0.268367   0.330667   0.0186920   0.0025880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9   4  43390   0.269867   0.327467   0.0161378   0.0025140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9   5  43391   0.271168   0.324168   0.0136557   0.0024660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9   6  43392   0.272468   0.320868   0.0111935   0.0024550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9   7  43393   0.273668   0.317468   0.0087314   0.0024760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9   8  43394   0.274868   0.314168   0.0062273   0.0025500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9   9  43395   0.275869   0.310769   0.0036291   0.0026430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  10  43396   0.276869   0.307369   0.0009200   0.0027690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  11  43397   0.277769   0.303869  -0.0019162   0.0029130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  12  43398   0.278670   0.300370  -0.0048973   0.0030500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  13  43399   0.279370   0.296870  -0.0080084   0.0031740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  14  43400   0.279970   0.293270  -0.0112206   0.0032410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  15  43401   0.280570   0.289670  -0.0144687   0.0032430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  16  43402   0.280971   0.286071  -0.0176849   0.0031800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  17  43403   0.281371   0.282371  -0.0208150   0.0030740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  18  43404   0.281671   0.278571  -0.0238402   0.0029580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  19  43405   0.281871   0.274871  -0.0267373   0.0028650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  20  43406   0.281972   0.271072  -0.0295754   0.0028190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  21  43407   0.281972   0.267172  -0.0323946   0.0028180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  22  43408   0.281972   0.263272  -0.0352377   0.0028750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  23  43409   0.281773   0.259373  -0.0381439   0.0029620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  24  43410   0.281573   0.255473  -0.0411530   0.0030420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  25  43411   0.281273   0.251473  -0.0442321   0.0031080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  26  43412   0.280873   0.247473  -0.0473533   0.0031280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  27  43413   0.280374   0.243374  -0.0504684   0.0030950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  28  43414   0.279774   0.239374  -0.0535286   0.0030060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  29  43415   0.279174   0.235274  -0.0564817   0.0028970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977   9  30  43416   0.278474   0.231174  -0.0593189   0.0027880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10   1  43417   0.277675   0.226975  -0.0620520   0.0026790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10   2  43418   0.276775   0.222875  -0.0646931   0.0026000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10   3  43419   0.275775   0.218675  -0.0672623   0.0025530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10   4  43420   0.274776   0.214576  -0.0698134   0.0025560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10   5  43421   0.273676   0.210376  -0.0723796   0.0025910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10   6  43422   0.272476   0.206176  -0.0750197   0.0026770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10   7  43423   0.271176   0.202076  -0.0777549   0.0028000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10   8  43424   0.269877   0.197877  -0.0806270   0.0029680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10   9  43425   0.268477   0.193777  -0.0836851   0.0031380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  10  43426   0.266977   0.189677  -0.0869123   0.0033020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  11  43427   0.265477   0.185577  -0.0902884   0.0034350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  12  43428   0.263878   0.181478  -0.0937736   0.0035210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  13  43429   0.262178   0.177378  -0.0972997   0.0035280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  14  43430   0.260478   0.173378  -0.1008089   0.0034720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  15  43431   0.258579   0.169379  -0.1042320   0.0033820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  16  43432   0.256779   0.165479  -0.1075741   0.0032990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  17  43433   0.254779   0.161579  -0.1108333   0.0032460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  18  43434   0.252779   0.157779  -0.1140864   0.0032480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  19  43435   0.250680   0.153980  -0.1173586   0.0033030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  20  43436   0.248580   0.150180  -0.1207027   0.0033800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  21  43437   0.246380   0.146580  -0.1241309   0.0034650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  22  43438   0.244180   0.142880  -0.1276270   0.0035250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  23  43439   0.241781   0.139381  -0.1311691   0.0035420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  24  43440   0.239481   0.135881  -0.1347063   0.0035160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  25  43441   0.236981   0.132481  -0.1381964   0.0034470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  26  43442   0.234582   0.129082  -0.1415896   0.0033330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  27  43443   0.231982   0.125882  -0.1448677   0.0032130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  28  43444   0.229382   0.122682  -0.1480149   0.0030830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  29  43445   0.226782   0.119482  -0.1510290   0.0029690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  30  43446   0.224083   0.116483  -0.1539521   0.0028720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  10  31  43447   0.221383   0.113483  -0.1567963   0.0028190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11   1  43448   0.218583   0.110583  -0.1596034   0.0028060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11   2  43449   0.215783   0.107683  -0.1624306   0.0028430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11   3  43450   0.212984   0.104984  -0.1653027   0.0029160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11   4  43451   0.210084   0.102284  -0.1682729   0.0030180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11   5  43452   0.207184   0.099584  -0.1713450   0.0031390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11   6  43453   0.204185   0.097085  -0.1745521   0.0032640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11   7  43454   0.201185   0.094585  -0.1778783   0.0033840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11   8  43455   0.198185   0.092185  -0.1813194   0.0034680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11   9  43456   0.195185   0.089785  -0.1848046   0.0034940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  10  43457   0.192086   0.087586  -0.1882837   0.0034540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  11  43458   0.188986   0.085286  -0.1916959   0.0033630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  12  43459   0.185786   0.083086  -0.1950050   0.0032530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  13  43460   0.182586   0.080986  -0.1982091   0.0031640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  14  43461   0.179387   0.078887  -0.2013493   0.0031260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  15  43462   0.176187   0.076887  -0.2044794   0.0031440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  16  43463   0.172887   0.074987  -0.2076516   0.0031910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  17  43464   0.169588   0.072988  -0.2108767   0.0032580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  18  43465   0.166288   0.071088  -0.2141629   0.0032990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  19  43466   0.162888   0.069288  -0.2174640   0.0033080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  20  43467   0.159488   0.067488  -0.2207572   0.0032690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  21  43468   0.156089   0.065689  -0.2239883   0.0031920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  22  43469   0.152589   0.063989  -0.2271404   0.0030950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  23  43470   0.149089   0.062189  -0.2301746   0.0029710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  24  43471   0.145589   0.060489  -0.2330817   0.0028420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  25  43472   0.141990   0.058890  -0.2358629   0.0027250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  26  43473   0.138390   0.057190  -0.2385380   0.0026310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  27  43474   0.134790   0.055590  -0.2411352   0.0025790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  28  43475   0.131091   0.053991  -0.2437093   0.0025620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  29  43476   0.127391   0.052491  -0.2462824   0.0025930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  11  30  43477   0.123691   0.050891  -0.2488956   0.0026480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12   1  43478   0.119991   0.049391  -0.2515897   0.0027430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12   2  43479   0.116192   0.047892  -0.2543879   0.0028470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12   3  43480   0.112392   0.046392  -0.2572970   0.0029690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12   4  43481   0.108592   0.044992  -0.2603252   0.0030950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12   5  43482   0.104692   0.043592  -0.2634793   0.0031980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12   6  43483   0.100893   0.042193  -0.2667095   0.0032730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12   7  43484   0.096993   0.040893  -0.2699986   0.0033050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12   8  43485   0.093093   0.039493  -0.2732927   0.0032850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12   9  43486   0.089194   0.038294  -0.2765679   0.0032410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  10  43487   0.085294   0.036994  -0.2797760   0.0031980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  11  43488   0.081394   0.035894  -0.2829652   0.0031900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  12  43489   0.077494   0.034694  -0.2861733   0.0032470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  13  43490   0.073595   0.033595  -0.2894775   0.0033540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  14  43491   0.069695   0.032595  -0.2928796   0.0034620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  15  43492   0.065695   0.031595  -0.2964058   0.0035660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  16  43493   0.061796   0.030696  -0.2999979   0.0036200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  17  43494   0.057896   0.029796  -0.3036210   0.0036170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  18  43495   0.053996   0.028996  -0.3072182   0.0035630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  19  43496   0.050096   0.028196  -0.3107373   0.0034690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  20  43497   0.046197   0.027597  -0.3141505   0.0033480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  21  43498   0.042297   0.026897  -0.3174416   0.0032240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  22  43499   0.038397   0.026397  -0.3206028   0.0031000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  23  43500   0.034597   0.025897  -0.3236489   0.0029970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  24  43501   0.030698   0.025598  -0.3265971   0.0029150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  25  43502   0.026898   0.025198  -0.3295002   0.0028790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  26  43503   0.022998   0.024998  -0.3323783   0.0028790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  27  43504   0.019199   0.024899  -0.3352605   0.0029030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  28  43505   0.015399   0.024799  -0.3381936   0.0029650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  29  43506   0.011599   0.024799  -0.3411978   0.0030480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  30  43507   0.007899   0.024899  -0.3442809   0.0031280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1977  12  31  43508   0.004100   0.025000  -0.3474531   0.0032130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1   1  43509   0.000400   0.025300   0.6492998   0.0032780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1   2  43510  -0.003400   0.025600   0.6459906   0.0033130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1   3  43511  -0.007100   0.025900   0.6426775   0.0033170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1   4  43512  -0.010799   0.026401   0.6393814   0.0032710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1   5  43513  -0.014499   0.026901   0.6361472   0.0032010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1   6  43514  -0.018199   0.027501   0.6329911   0.0031210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1   7  43515  -0.021898   0.028202   0.6298989   0.0030620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1   8  43516  -0.025598   0.028902   0.6268418   0.0030600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1   9  43517  -0.029298   0.029702   0.6237586   0.0031250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  10  43518  -0.032898   0.030602   0.6205895   0.0032170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  11  43519  -0.036597   0.031503   0.6173233   0.0033110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  12  43520  -0.040297   0.032503   0.6139692   0.0033800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  13  43521  -0.043997   0.033603   0.6105830   0.0033820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  14  43522  -0.047697   0.034703   0.6072239   0.0033350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  15  43523  -0.051396   0.035804   0.6039358   0.0032460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  16  43524  -0.055196   0.037004   0.6007496   0.0031340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  17  43525  -0.058896   0.038304   0.5976695   0.0030170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  18  43526  -0.062595   0.039605   0.5947233   0.0028990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  19  43527  -0.066395   0.041005   0.5918642   0.0028010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  20  43528  -0.070095   0.042405   0.5891000   0.0027440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  21  43529  -0.073895   0.043805   0.5863729   0.0027150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  22  43530  -0.077594   0.045306   0.5836677   0.0027140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  23  43531  -0.081394   0.046906   0.5809336   0.0027600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  24  43532  -0.085094   0.048406   0.5781365   0.0028260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  25  43533  -0.088894   0.050006   0.5752633   0.0029240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  26  43534  -0.092593   0.051707   0.5722862   0.0030320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  27  43535  -0.096393   0.053307   0.5692010   0.0031350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  28  43536  -0.100093   0.055007   0.5660219   0.0032280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  29  43537  -0.103792   0.056708   0.5627657   0.0032880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  30  43538  -0.107492   0.058408   0.5594696   0.0033070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   1  31  43539  -0.111092   0.060208   0.5561644   0.0032870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2   1  43540  -0.114692   0.061908   0.5528953   0.0032490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2   2  43541  -0.118291   0.063709   0.5496701   0.0032000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2   3  43542  -0.121891   0.065509   0.5464890   0.0031660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2   4  43543  -0.125391   0.067409   0.5433149   0.0031810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2   5  43544  -0.128791   0.069209   0.5401087   0.0032510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2   6  43545  -0.132190   0.071110   0.5367946   0.0033920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2   7  43546  -0.135590   0.073010   0.5333264   0.0035480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2   8  43547  -0.138890   0.074910   0.5296943   0.0036880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2   9  43548  -0.142189   0.076811   0.5259551   0.0037890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  10  43549  -0.145289   0.078811   0.5221490   0.0038210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  11  43550  -0.148489   0.080711   0.5183328   0.0037920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  12  43551  -0.151489   0.082711   0.5145787   0.0037120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  13  43552  -0.154488   0.084812   0.5109255   0.0036150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  14  43553  -0.157388   0.086812   0.5073584   0.0035120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  15  43554  -0.160288   0.088912   0.5038952   0.0034370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  16  43555  -0.163088   0.091012   0.5004831   0.0033810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  17  43556  -0.165787   0.093213   0.4971110   0.0033620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  18  43557  -0.168487   0.095413   0.4937468   0.0033750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  19  43558  -0.171087   0.097613   0.4903477   0.0034280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  20  43559  -0.173586   0.099914   0.4868775   0.0035070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  21  43560  -0.176086   0.102214   0.4833234   0.0035830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  22  43561  -0.178486   0.104514   0.4797062   0.0036540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  23  43562  -0.180886   0.106914   0.4760161   0.0037260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  24  43563  -0.183185   0.109415   0.4722489   0.0037810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  25  43564  -0.185485   0.111915   0.4684548   0.0038020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  26  43565  -0.187685   0.114415   0.4646716   0.0037750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  27  43566  -0.189885   0.117015   0.4609295   0.0037020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   2  28  43567  -0.191984   0.119716   0.4572814   0.0036030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3   1  43568  -0.193984   0.122416   0.4537292   0.0034900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3   2  43569  -0.195984   0.125216   0.4502961   0.0033890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3   3  43570  -0.197983   0.128017   0.4469499   0.0033230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3   4  43571  -0.199883   0.130917   0.4436448   0.0033080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3   5  43572  -0.201683   0.133817   0.4403166   0.0033560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3   6  43573  -0.203483   0.136817   0.4369185   0.0034350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3   7  43574  -0.205282   0.139818   0.4334333   0.0035430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3   8  43575  -0.206982   0.142918   0.4298412   0.0036330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3   9  43576  -0.208582   0.146018   0.4261880   0.0036650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  10  43577  -0.210181   0.149219   0.4225339   0.0036290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  11  43578  -0.211681   0.152419   0.4189387   0.0035450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  12  43579  -0.213081   0.155719   0.4154566   0.0034150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  13  43580  -0.214481   0.159019   0.4121095   0.0032870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  14  43581  -0.215780   0.162420   0.4088783   0.0031700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  15  43582  -0.217080   0.165820   0.4057622   0.0030680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  16  43583  -0.218180   0.169220   0.4027210   0.0030100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  17  43584  -0.219280   0.172720   0.3997279   0.0029920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  18  43585  -0.220379   0.176221   0.3967217   0.0030270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  19  43586  -0.221279   0.179821   0.3936706   0.0030830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  20  43587  -0.222179   0.183421   0.3905354   0.0031800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  21  43588  -0.222978   0.187022   0.3872923   0.0033000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  22  43589  -0.223678   0.190722   0.3839231   0.0034290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  23  43590  -0.224378   0.194522   0.3804380   0.0035500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  24  43591  -0.224978   0.198222   0.3768408   0.0036350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  25  43592  -0.225477   0.202023   0.3731727   0.0036850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  26  43593  -0.225877   0.205923   0.3694896   0.0036700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  27  43594  -0.226277   0.209723   0.3658494   0.0036050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  28  43595  -0.226577   0.213623   0.3622893   0.0035110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  29  43596  -0.226776   0.217624   0.3588361   0.0034090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  30  43597  -0.226876   0.221624   0.3554600   0.0033480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   3  31  43598  -0.226976   0.225624   0.3521228   0.0033260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4   1  43599  -0.226975   0.229625   0.3487807   0.0033660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4   2  43600  -0.226975   0.233725   0.3453855   0.0034390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4   3  43601  -0.226875   0.237825   0.3418944   0.0035440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4   4  43602  -0.226675   0.242025   0.3383022   0.0036400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4   5  43603  -0.226474   0.246126   0.3346281   0.0036990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4   6  43604  -0.226274   0.250326   0.3309219   0.0037010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4   7  43605  -0.225974   0.254526   0.3272448   0.0036530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4   8  43606  -0.225574   0.258826   0.3236417   0.0035470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4   9  43607  -0.225173   0.263127   0.3201575   0.0034180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  10  43608  -0.224773   0.267327   0.3168054   0.0032890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  11  43609  -0.224273   0.271627   0.3135832   0.0031780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  12  43610  -0.223772   0.276028   0.3104491   0.0030860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  13  43611  -0.223172   0.280328   0.3073879   0.0030420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  14  43612  -0.222572   0.284628   0.3043518   0.0030380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  15  43613  -0.221972   0.288928   0.3013086   0.0030660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  16  43614  -0.221271   0.293229   0.2982085   0.0031390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  17  43615  -0.220571   0.297529   0.2950213   0.0032300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  18  43616  -0.219771   0.301829   0.2917442   0.0033360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  19  43617  -0.219071   0.306129   0.2883590   0.0034330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  20  43618  -0.218270   0.310330   0.2848809   0.0035170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  21  43619  -0.217370   0.314530   0.2813337   0.0035680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  22  43620  -0.216570   0.318630   0.2777516   0.0035690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  23  43621  -0.215669   0.322731   0.2742145   0.0035040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  24  43622  -0.214669   0.326831   0.2707583   0.0034030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  25  43623  -0.213769   0.330831   0.2674132   0.0032760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  26  43624  -0.212769   0.334731   0.2641900   0.0031760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  27  43625  -0.211768   0.338632   0.2610569   0.0031100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  28  43626  -0.210668   0.342432   0.2579517   0.0031080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  29  43627  -0.209668   0.346132   0.2548256   0.0031400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   4  30  43628  -0.208568   0.349732   0.2516524   0.0032050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5   1  43629  -0.207467   0.353333   0.2484253   0.0032680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5   2  43630  -0.206267   0.356733   0.2451361   0.0033140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5   3  43631  -0.205067   0.360133   0.2418130   0.0033260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5   4  43632  -0.203866   0.363434   0.2384998   0.0032980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5   5  43633  -0.202666   0.366534   0.2352397   0.0032140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5   6  43634  -0.201466   0.369634   0.2320805   0.0031090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5   7  43635  -0.200166   0.372634   0.2290244   0.0029950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5   8  43636  -0.198865   0.375535   0.2260883   0.0028910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5   9  43637  -0.197465   0.378335   0.2232431   0.0028120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  10  43638  -0.196065   0.381135   0.2204610   0.0027570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  11  43639  -0.194665   0.383735   0.2177058   0.0027490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  12  43640  -0.193264   0.386336   0.2149387   0.0027810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  13  43641  -0.191764   0.388836   0.2121325   0.0028380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  14  43642  -0.190164   0.391236   0.2092534   0.0029250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  15  43643  -0.188563   0.393637   0.2062742   0.0030310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  16  43644  -0.186963   0.395937   0.2031771   0.0031440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  17  43645  -0.185263   0.398137   0.1999789   0.0032510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  18  43646  -0.183563   0.400337   0.1966798   0.0033290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  19  43647  -0.181662   0.402438   0.1933326   0.0033710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  20  43648  -0.179862   0.404538   0.1899555   0.0033640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  21  43649  -0.177862   0.406538   0.1866223   0.0033070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  22  43650  -0.175862   0.408538   0.1833622   0.0032060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  23  43651  -0.173761   0.410439   0.1802001   0.0031140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  24  43652  -0.171661   0.412439   0.1771229   0.0030440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  25  43653  -0.169461   0.414239   0.1740938   0.0030270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  26  43654  -0.167160   0.416140   0.1710426   0.0030710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  27  43655  -0.164760   0.417940   0.1679425   0.0031320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  28  43656  -0.162260   0.419740   0.1647893   0.0031800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  29  43657  -0.159660   0.421540   0.1616022   0.0031900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  30  43658  -0.157059   0.423241   0.1584150   0.0031660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   5  31  43659  -0.154359   0.424941   0.1552859   0.0030860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6   1  43660  -0.151559   0.426641   0.1522577   0.0029650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6   2  43661  -0.148658   0.428342   0.1493756   0.0028050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6   3  43662  -0.145758   0.430042   0.1466504   0.0026440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6   4  43663  -0.142658   0.431642   0.1440873   0.0024770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6   5  43664  -0.139558   0.433242   0.1416781   0.0023420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6   6  43665  -0.136457   0.434843   0.1393900   0.0022390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6   7  43666  -0.133157   0.436443   0.1371988   0.0021710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6   8  43667  -0.129857   0.438043   0.1350457   0.0021310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6   9  43668  -0.126557   0.439643   0.1329166   0.0021350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  10  43669  -0.123156   0.441244   0.1307554   0.0021690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  11  43670  -0.119756   0.442744   0.1285593   0.0022240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  12  43671  -0.116256   0.444344   0.1263051   0.0022880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  13  43672  -0.112755   0.445845   0.1239760   0.0023590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  14  43673  -0.109255   0.447445   0.1215908   0.0024060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  15  43674  -0.105755   0.448945   0.1191717   0.0024380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  16  43675  -0.102155   0.450445   0.1167275   0.0024340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  17  43676  -0.098654   0.451946   0.1143154   0.0023990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  18  43677  -0.095054   0.453446   0.1119502   0.0023170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  19  43678  -0.091554   0.454946   0.1096791   0.0022280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  20  43679  -0.087954   0.456446   0.1074899   0.0021550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  21  43680  -0.084453   0.457947   0.1053518   0.0021370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  22  43681  -0.080853   0.459447   0.1032056   0.0021650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  23  43682  -0.077353   0.460847   0.1009985   0.0022440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  24  43683  -0.073852   0.462248   0.0987053   0.0023300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  25  43684  -0.070352   0.463748   0.0963492   0.0023960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  26  43685  -0.066852   0.465148   0.0939421   0.0024100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  27  43686  -0.063452   0.466448   0.0915379   0.0023670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  28  43687  -0.059951   0.467849   0.0892108   0.0022880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  29  43688  -0.056551   0.469149   0.0869796   0.0021700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   6  30  43689  -0.053151   0.470449   0.0848755   0.0020400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7   1  43690  -0.049651   0.471749   0.0828973   0.0019160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7   2  43691  -0.046250   0.472950   0.0810352   0.0018120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7   3  43692  -0.042750   0.474150   0.0792540   0.0017370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7   4  43693  -0.039350   0.475350   0.0775379   0.0016990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7   5  43694  -0.035849   0.476451   0.0758527   0.0016790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7   6  43695  -0.032349   0.477551   0.0741696   0.0016930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7   7  43696  -0.028849   0.478551   0.0724564   0.0017370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7   8  43697  -0.025349   0.479551   0.0706783   0.0018030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7   9  43698  -0.021748   0.480552   0.0688361   0.0018790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  10  43699  -0.018148   0.481452   0.0669190   0.0019550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  11  43700  -0.014448   0.482252   0.0649418   0.0020070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  12  43701  -0.010748   0.483152   0.0629137   0.0020460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  13  43702  -0.007047   0.483853   0.0608616   0.0020450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  14  43703  -0.003247   0.484553   0.0588254   0.0020210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  15  43704   0.000553   0.485253   0.0568393   0.0019560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  16  43705   0.004454   0.485754   0.0549291   0.0018730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  17  43706   0.008354   0.486354   0.0530820   0.0018040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  18  43707   0.012354   0.486754   0.0513008   0.0017670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  19  43708   0.016354   0.487154   0.0495287   0.0017950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  20  43709   0.020355   0.487455   0.0477015   0.0018750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  21  43710   0.024455   0.487755   0.0457694   0.0019830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  22  43711   0.028555   0.487855   0.0437332   0.0020860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  23  43712   0.032655   0.487955   0.0416131   0.0021380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  24  43713   0.036756   0.487956   0.0394699   0.0021300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  25  43714   0.040956   0.487856   0.0373758   0.0020560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  26  43715   0.045156   0.487756   0.0353826   0.0019290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  27  43716   0.049357   0.487457   0.0335155   0.0018040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  28  43717   0.053557   0.487157   0.0317713   0.0016840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  29  43718   0.057757   0.486757   0.0301502   0.0015830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  30  43719   0.061857   0.486257   0.0286041   0.0015130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   7  31  43720   0.066058   0.485658   0.0271009   0.0014910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8   1  43721   0.070158   0.485058   0.0256088   0.0015080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8   2  43722   0.074258   0.484258   0.0240816   0.0015630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8   3  43723   0.078258   0.483458   0.0224835   0.0016490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8   4  43724   0.082259   0.482559   0.0207753   0.0017590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8   5  43725   0.086259   0.481559   0.0189502   0.0018920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8   6  43726   0.090059   0.480459   0.0170000   0.0020160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8   7  43727   0.093960   0.479260   0.0149229   0.0021280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8   8  43728   0.097660   0.478060   0.0127447   0.0022250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8   9  43729   0.101360   0.476760   0.0104936   0.0022800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  10  43730   0.104960   0.475360   0.0081834   0.0023120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  11  43731   0.108561   0.473861   0.0058783   0.0023060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  12  43732   0.111961   0.472361   0.0035871   0.0022740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  13  43733   0.115361   0.470761   0.0013290   0.0022430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  14  43734   0.118661   0.469061  -0.0009172   0.0022480   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  15  43735   0.121962   0.467362  -0.0031723   0.0022790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  16  43736   0.125162   0.465562  -0.0055064   0.0023760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  17  43737   0.128262   0.463762  -0.0079396   0.0025080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  18  43738   0.131263   0.461863  -0.0105157   0.0026510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  19  43739   0.134263   0.459963  -0.0132319   0.0027630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  20  43740   0.137163   0.457963  -0.0160190   0.0028060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  21  43741   0.139963   0.455963  -0.0188192   0.0027710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  22  43742   0.142764   0.453864  -0.0215373   0.0026680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  23  43743   0.145464   0.451864  -0.0241325   0.0025290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  24  43744   0.148164   0.449664  -0.0266026   0.0023920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  25  43745   0.150765   0.447565  -0.0289228   0.0022710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  26  43746   0.153365   0.445365  -0.0311449   0.0021710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  27  43747   0.155965   0.443065  -0.0332871   0.0021190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  28  43748   0.158465   0.440865  -0.0353982   0.0021090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  29  43749   0.160866   0.438566  -0.0375204   0.0021410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  30  43750   0.163366   0.436266  -0.0396925   0.0021990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   8  31  43751   0.165766   0.433966  -0.0419286   0.0022840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9   1  43752   0.168066   0.431666  -0.0442568   0.0023860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9   2  43753   0.170467   0.429267  -0.0466919   0.0024820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9   3  43754   0.172767   0.426967  -0.0492171   0.0025690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9   4  43755   0.174967   0.424567  -0.0518222   0.0026250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9   5  43756   0.177268   0.422168  -0.0544564   0.0026460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9   6  43757   0.179468   0.419768  -0.0571035   0.0026280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9   7  43758   0.181668   0.417268  -0.0597107   0.0025740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9   8  43759   0.183868   0.414868  -0.0622538   0.0024900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9   9  43760   0.185969   0.412369  -0.0647010   0.0024060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  10  43761   0.188069   0.409969  -0.0670751   0.0023440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  11  43762   0.190169   0.407469  -0.0694053   0.0023340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  12  43763   0.192269   0.404969  -0.0717524   0.0023680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  13  43764   0.194270   0.402370  -0.0741676   0.0024620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  14  43765   0.196170   0.399870  -0.0766857   0.0025870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  15  43766   0.198170   0.397270  -0.0793409   0.0027370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  16  43767   0.200071   0.394671  -0.0821360   0.0028310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  17  43768   0.201871   0.392071  -0.0849891   0.0028620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  18  43769   0.203771   0.389471  -0.0878433   0.0028430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  19  43770   0.205471   0.386771  -0.0906464   0.0027650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  20  43771   0.207272   0.384072  -0.0933536   0.0026580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  21  43772   0.208972   0.381372  -0.0959517   0.0025540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  22  43773   0.210572   0.378572  -0.0984589   0.0024740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  23  43774   0.212172   0.375772  -0.1009140   0.0024420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  24  43775   0.213773   0.372973  -0.1033552   0.0024510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  25  43776   0.215273   0.370073  -0.1058203   0.0024950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  26  43777   0.216773   0.367073  -0.1083495   0.0025690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  27  43778   0.218174   0.364074  -0.1109706   0.0026860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  28  43779   0.219474   0.361074  -0.1137198   0.0028150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  29  43780   0.220874   0.357974  -0.1166129   0.0029640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978   9  30  43781   0.222074   0.354874  -0.1196471   0.0030890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10   1  43782   0.223275   0.351675  -0.1227972   0.0031980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10   2  43783   0.224475   0.348475  -0.1260323   0.0032780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10   3  43784   0.225575   0.345175  -0.1293295   0.0032960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10   4  43785   0.226575   0.341875  -0.1326106   0.0032600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10   5  43786   0.227576   0.338476  -0.1358468   0.0032010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10   6  43787   0.228476   0.334976  -0.1390089   0.0031200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10   7  43788   0.229376   0.331476  -0.1420931   0.0030460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10   8  43789   0.230177   0.327977  -0.1451242   0.0030100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10   9  43790   0.230877   0.324377  -0.1481434   0.0030270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  10  43791   0.231577   0.320777  -0.1511945   0.0030940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  11  43792   0.232177   0.317077  -0.1543447   0.0031990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  12  43793   0.232678   0.313378  -0.1575968   0.0033040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  13  43794   0.233178   0.309578  -0.1609440   0.0033970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  14  43795   0.233578   0.305778  -0.1643631   0.0034270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  15  43796   0.233878   0.301978  -0.1677763   0.0033960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  16  43797   0.234179   0.298079  -0.1711224   0.0032980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  17  43798   0.234379   0.294279  -0.1743475   0.0031440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  18  43799   0.234579   0.290379  -0.1774157   0.0029830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  19  43800   0.234680   0.286480  -0.1803268   0.0028440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  20  43801   0.234680   0.282680  -0.1831050   0.0027260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  21  43802   0.234680   0.278780  -0.1858041   0.0026580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  22  43803   0.234580   0.274980  -0.1884463   0.0026320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  23  43804   0.234481   0.271081  -0.1910824   0.0026490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  24  43805   0.234181   0.267281  -0.1937556   0.0027020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  25  43806   0.233981   0.263481  -0.1964947   0.0027830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  26  43807   0.233681   0.259781  -0.1993259   0.0028790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  27  43808   0.233282   0.255982  -0.2022550   0.0029780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  28  43809   0.232882   0.252382  -0.2052682   0.0030670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  29  43810   0.232382   0.248682  -0.2083723   0.0031350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  30  43811   0.231883   0.245083  -0.2115385   0.0031690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  10  31  43812   0.231383   0.241583  -0.2147056   0.0031700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11   1  43813   0.230783   0.238083  -0.2178537   0.0031190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11   2  43814   0.230183   0.234683  -0.2209349   0.0030500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11   3  43815   0.229584   0.231284  -0.2239440   0.0029710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11   4  43816   0.228884   0.227984  -0.2268882   0.0029330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11   5  43817   0.228184   0.224684  -0.2298163   0.0029340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11   6  43818   0.227384   0.221484  -0.2327755   0.0029890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11   7  43819   0.226685   0.218385  -0.2358166   0.0030910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11   8  43820   0.225885   0.215285  -0.2389628   0.0032080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11   9  43821   0.225085   0.212185  -0.2422199   0.0033020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  10  43822   0.224186   0.209186  -0.2455541   0.0033670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  11  43823   0.223386   0.206186  -0.2489352   0.0033770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  12  43824   0.222486   0.203286  -0.2522994   0.0033290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  13  43825   0.221586   0.200386  -0.2555765   0.0032310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  14  43826   0.220587   0.197487  -0.2587516   0.0031170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  15  43827   0.219687   0.194587  -0.2617988   0.0029920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  16  43828   0.218687   0.191787  -0.2647419   0.0028880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  17  43829   0.217588   0.188988  -0.2675971   0.0028280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  18  43830   0.216588   0.186188  -0.2704032   0.0027990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  19  43831   0.215488   0.183388  -0.2732074   0.0028090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  20  43832   0.214288   0.180588  -0.2760415   0.0028660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  21  43833   0.213089   0.177789  -0.2789407   0.0029430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  22  43834   0.211889   0.174989  -0.2819258   0.0030310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  23  43835   0.210589   0.172289  -0.2850030   0.0031260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  24  43836   0.209289   0.169489  -0.2881761   0.0032070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  25  43837   0.207990   0.166690  -0.2914233   0.0032740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  26  43838   0.206590   0.163990  -0.2947264   0.0033270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  27  43839   0.205090   0.161190  -0.2980565   0.0033260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  28  43840   0.203591   0.158491  -0.3013647   0.0032950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  29  43841   0.202091   0.155791  -0.3046348   0.0032300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  11  30  43842   0.200491   0.153091  -0.3078100   0.0031390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12   1  43843   0.198891   0.150391  -0.3109181   0.0030710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12   2  43844   0.197292   0.147792  -0.3139673   0.0030360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12   3  43845   0.195592   0.145192  -0.3170074   0.0030650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12   4  43846   0.193892   0.142592  -0.3201016   0.0031290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12   5  43847   0.192192   0.139992  -0.3232717   0.0032110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12   6  43848   0.190393   0.137493  -0.3265209   0.0032890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12   7  43849   0.188593   0.134993  -0.3298280   0.0033170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12   8  43850   0.186793   0.132493  -0.3331352   0.0032920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12   9  43851   0.184894   0.130094  -0.3364043   0.0032250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  10  43852   0.182994   0.127694  -0.3395724   0.0031150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  11  43853   0.181194   0.125394  -0.3426146   0.0029690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  12  43854   0.179294   0.123094  -0.3455077   0.0028280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  13  43855   0.177295   0.120895  -0.3482659   0.0026920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  14  43856   0.175395   0.118695  -0.3509030   0.0025960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  15  43857   0.173395   0.116495  -0.3534612   0.0025280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  16  43858   0.171495   0.114395  -0.3559803   0.0025070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  17  43859   0.169496   0.112296  -0.3584985   0.0025220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  18  43860   0.167496   0.110296  -0.3610356   0.0025670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  19  43861   0.165496   0.108296  -0.3636308   0.0026340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  20  43862   0.163597   0.106297  -0.3663079   0.0027120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  21  43863   0.161597   0.104397  -0.3690641   0.0027980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  22  43864   0.159497   0.102497  -0.3718902   0.0028740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  23  43865   0.157497   0.100597  -0.3748043   0.0029400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  24  43866   0.155498   0.098798  -0.3777635   0.0029710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  25  43867   0.153498   0.096998  -0.3807476   0.0029930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  26  43868   0.151398   0.095198  -0.3837288   0.0029730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  27  43869   0.149398   0.093398  -0.3866879   0.0029420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  28  43870   0.147299   0.091699  -0.3896031   0.0029110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  29  43871   0.145199   0.089999  -0.3925102   0.0029090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  30  43872   0.143099   0.088299  -0.3954394   0.0029590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1978  12  31  43873   0.140900   0.086600  -0.3984455   0.0030620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1   1  43874   0.138800   0.085000   0.5984263   0.0031970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1   2  43875   0.136500   0.083400   0.5951622   0.0033250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1   3  43876   0.134300   0.081800   0.5918001   0.0034000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1   4  43877   0.132001   0.080201   0.5883829   0.0034110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1   5  43878   0.129601   0.078701   0.5849888   0.0033570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1   6  43879   0.127201   0.077101   0.5816736   0.0032560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1   7  43880   0.124701   0.075601   0.5784855   0.0031180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1   8  43881   0.122102   0.074202   0.5754283   0.0029770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1   9  43882   0.119502   0.072702   0.5725162   0.0028510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  10  43883   0.116902   0.071302   0.5697150   0.0027440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  11  43884   0.114103   0.070003   0.5670139   0.0026650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  12  43885   0.111303   0.068603   0.5643717   0.0026360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  13  43886   0.108503   0.067303   0.5617396   0.0026330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  14  43887   0.105603   0.066103   0.5590965   0.0026590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  15  43888   0.102604   0.064904   0.5564233   0.0027080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  16  43889   0.099504   0.063704   0.5536742   0.0027800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  17  43890   0.096504   0.062604   0.5508620   0.0028430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  18  43891   0.093304   0.061604   0.5479819   0.0029160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  19  43892   0.090105   0.060605   0.5450467   0.0029590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  20  43893   0.086905   0.059605   0.5420616   0.0029990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  21  43894   0.083705   0.058705   0.5390594   0.0030120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  22  43895   0.080406   0.057906   0.5360443   0.0030110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  23  43896   0.077106   0.057106   0.5330532   0.0029820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  24  43897   0.073806   0.056406   0.5300820   0.0029490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  25  43898   0.070506   0.055806   0.5271489   0.0029340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  26  43899   0.067207   0.055207   0.5242107   0.0029730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  27  43900   0.063807   0.054707   0.5211946   0.0030590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  28  43901   0.060607   0.054307   0.5180644   0.0031940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  29  43902   0.057307   0.053907   0.5148003   0.0033450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  30  43903   0.054008   0.053608   0.5113961   0.0034560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   1  31  43904   0.050808   0.053408   0.5079010   0.0035090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2   1  43905   0.047608   0.053308   0.5044128   0.0034600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2   2  43906   0.044509   0.053209   0.5010037   0.0033410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2   3  43907   0.041409   0.053209   0.4977356   0.0031790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2   4  43908   0.038309   0.053309   0.4946474   0.0030060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2   5  43909   0.035309   0.053409   0.4917293   0.0028370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2   6  43910   0.032410   0.053710   0.4889641   0.0027000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2   7  43911   0.029510   0.054010   0.4863160   0.0026010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2   8  43912   0.026610   0.054310   0.4837458   0.0025460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2   9  43913   0.023811   0.054811   0.4812007   0.0025310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  10  43914   0.021111   0.055311   0.4786625   0.0025600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  11  43915   0.018411   0.055811   0.4760814   0.0026050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  12  43916   0.015711   0.056511   0.4734463   0.0026630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  13  43917   0.013112   0.057212   0.4707521   0.0027260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  14  43918   0.010512   0.058012   0.4679880   0.0027910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  15  43919   0.007912   0.058812   0.4651758   0.0028370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  16  43920   0.005312   0.059712   0.4623327   0.0028550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  17  43921   0.002813   0.060713   0.4594745   0.0028440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  18  43922   0.000313   0.061813   0.4566424   0.0028070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  19  43923  -0.002187   0.062913   0.4538572   0.0027620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  20  43924  -0.004686   0.064114   0.4511191   0.0027140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  21  43925  -0.007186   0.065314   0.4484250   0.0026800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  22  43926  -0.009586   0.066614   0.4457468   0.0026920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  23  43927  -0.012086   0.067914   0.4430207   0.0027580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  24  43928  -0.014585   0.069415   0.4402005   0.0028930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  25  43929  -0.017085   0.070815   0.4372324   0.0030570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  26  43930  -0.019585   0.072315   0.4340862   0.0032210   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  27  43931  -0.022085   0.073915   0.4307961   0.0033460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   2  28  43932  -0.024584   0.075516   0.4274319   0.0033780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3   1  43933  -0.027084   0.077116   0.4240708   0.0033190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3   2  43934  -0.029684   0.078716   0.4208067   0.0031900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3   3  43935  -0.032183   0.080417   0.4176905   0.0030380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3   4  43936  -0.034683   0.082117   0.4147414   0.0028770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3   5  43937  -0.037283   0.083817   0.4119392   0.0027420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3   6  43938  -0.039783   0.085517   0.4092521   0.0026490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3   7  43939  -0.042382   0.087218   0.4066359   0.0026000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3   8  43940  -0.044882   0.088918   0.4040348   0.0025970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3   9  43941  -0.047482   0.090718   0.4014276   0.0026330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  10  43942  -0.049982   0.092418   0.3987685   0.0027000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  11  43943  -0.052581   0.094119   0.3960324   0.0027860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  12  43944  -0.055181   0.095819   0.3932032   0.0028800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  13  43945  -0.057681   0.097419   0.3902821   0.0029700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  14  43946  -0.060280   0.099120   0.3872689   0.0030440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  15  43947  -0.062780   0.100820   0.3841948   0.0031020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  16  43948  -0.065280   0.102420   0.3810876   0.0031160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  17  43949  -0.067780   0.104120   0.3779725   0.0030960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  18  43950  -0.070279   0.105721   0.3748934   0.0030520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  19  43951  -0.072779   0.107321   0.3718622   0.0029990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  20  43952  -0.075179   0.109021   0.3688811   0.0029570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  21  43953  -0.077679   0.110621   0.3659369   0.0029470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  22  43954  -0.080078   0.112222   0.3629808   0.0029760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  23  43955  -0.082478   0.113822   0.3599646   0.0030620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  24  43956  -0.084778   0.115522   0.3568385   0.0031980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  25  43957  -0.087077   0.117123   0.3535613   0.0033590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  26  43958  -0.089377   0.118823   0.3501152   0.0035030   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  27  43959  -0.091677   0.120523   0.3465651   0.0035870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  28  43960  -0.093877   0.122223   0.3429729   0.0035830   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  29  43961  -0.096176   0.123924   0.3394278   0.0034920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  30  43962  -0.098276   0.125724   0.3359986   0.0033400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   3  31  43963  -0.100476   0.127524   0.3327445   0.0031750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4   1  43964  -0.102576   0.129324   0.3296543   0.0030130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4   2  43965  -0.104775   0.131225   0.3267072   0.0028960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4   3  43966  -0.106775   0.133125   0.3238571   0.0028140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4   4  43967  -0.108875   0.135125   0.3210639   0.0027790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4   5  43968  -0.110874   0.137126   0.3182738   0.0027970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4   6  43969  -0.112974   0.139226   0.3154566   0.0028420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4   7  43970  -0.114874   0.141326   0.3125715   0.0029220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4   8  43971  -0.116874   0.143426   0.3096073   0.0030150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4   9  43972  -0.118773   0.145627   0.3065412   0.0031080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  10  43973  -0.120673   0.147927   0.3033951   0.0031910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  11  43974  -0.122473   0.150127   0.3001669   0.0032610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  12  43975  -0.124273   0.152527   0.2968818   0.0032910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  13  43976  -0.125972   0.154828   0.2935866   0.0032940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  14  43977  -0.127672   0.157228   0.2903145   0.0032540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  15  43978  -0.129372   0.159728   0.2870843   0.0031930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  16  43979  -0.130971   0.162229   0.2839172   0.0031350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  17  43980  -0.132471   0.164729   0.2807971   0.0030920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  18  43981  -0.133971   0.167229   0.2777079   0.0030940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  19  43982  -0.135371   0.169829   0.2745898   0.0031410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  20  43983  -0.136670   0.172330   0.2713986   0.0032470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  21  43984  -0.137970   0.174930   0.2680945   0.0033660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  22  43985  -0.139170   0.177530   0.2646663   0.0034880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  23  43986  -0.140370   0.180130   0.2611182   0.0035870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  24  43987  -0.141469   0.182631   0.2575231   0.0036110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  25  43988  -0.142469   0.185231   0.2539339   0.0035530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  26  43989  -0.143469   0.187731   0.2504418   0.0034130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  27  43990  -0.144368   0.190232   0.2471146   0.0032380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  28  43991  -0.145168   0.192732   0.2439785   0.0030560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  29  43992  -0.145968   0.195132   0.2410043   0.0028860   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   4  30  43993  -0.146768   0.197632   0.2381802   0.0027670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5   1  43994  -0.147367   0.200033   0.2354451   0.0027040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5   2  43995  -0.148067   0.202333   0.2327589   0.0026850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5   3  43996  -0.148667   0.204733   0.2300708   0.0026950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5   4  43997  -0.149166   0.207034   0.2273566   0.0027450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5   5  43998  -0.149666   0.209334   0.2245825   0.0028140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5   6  43999  -0.150066   0.211534   0.2217363   0.0028780   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5   7  44000  -0.150466   0.213834   0.2188202   0.0029450   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5   8  44001  -0.150865   0.216035   0.2158541   0.0030050   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5   9  44002  -0.151165   0.218235   0.2128279   0.0030290   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  10  44003  -0.151465   0.220435   0.2097948   0.0030320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  11  44004  -0.151665   0.222635   0.2067846   0.0030000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  12  44005  -0.151964   0.224836   0.2038135   0.0029390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  13  44006  -0.152064   0.227036   0.2009103   0.0028570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  14  44007  -0.152264   0.229136   0.1980842   0.0028000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  15  44008  -0.152363   0.231337   0.1952971   0.0027720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  16  44009  -0.152563   0.233537   0.1925219   0.0027970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  17  44010  -0.152563   0.235737   0.1896938   0.0028630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  18  44011  -0.152663   0.237937   0.1867946   0.0029510   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  19  44012  -0.152662   0.240038   0.1837805   0.0030560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  20  44013  -0.152762   0.242338   0.1806884   0.0031280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  21  44014  -0.152762   0.244538   0.1775412   0.0031500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  22  44015  -0.152662   0.246738   0.1744101   0.0031080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  23  44016  -0.152661   0.248939   0.1713559   0.0029900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  24  44017  -0.152561   0.251239   0.1684358   0.0028320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  25  44018  -0.152561   0.253439   0.1656986   0.0026420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  26  44019  -0.152460   0.255740   0.1631375   0.0024720   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  27  44020  -0.152360   0.258040   0.1607544   0.0023230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  28  44021  -0.152160   0.260240   0.1584872   0.0022180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  29  44022  -0.152060   0.262540   0.1562941   0.0021560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  30  44023  -0.151859   0.264841   0.1541529   0.0021430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   5  31  44024  -0.151659   0.267241   0.1520078   0.0021530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6   1  44025  -0.151459   0.269541   0.1498397   0.0021940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6   2  44026  -0.151259   0.271841   0.1476235   0.0022360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6   3  44027  -0.151058   0.274142   0.1453594   0.0022840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6   4  44028  -0.150758   0.276542   0.1430512   0.0023280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6   5  44029  -0.150458   0.278842   0.1407201   0.0023410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6   6  44030  -0.150157   0.281243   0.1383860   0.0023390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6   7  44031  -0.149857   0.283543   0.1360518   0.0023170   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6   8  44032  -0.149457   0.285943   0.1337537   0.0022760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6   9  44033  -0.149157   0.288243   0.1315165   0.0022160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  10  44034  -0.148656   0.290644   0.1293314   0.0021570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  11  44035  -0.148256   0.292944   0.1271922   0.0021260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  12  44036  -0.147756   0.295244   0.1250511   0.0021570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  13  44037  -0.147256   0.297644   0.1228610   0.0022430   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  14  44038  -0.146655   0.299945   0.1205618   0.0023680   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  15  44039  -0.146055   0.302245   0.1181307   0.0025010   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  16  44040  -0.145355   0.304545   0.1155685   0.0026090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  17  44041  -0.144654   0.306846   0.1129294   0.0026670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  18  44042  -0.143854   0.309146   0.1102653   0.0026520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  19  44043  -0.143054   0.311446   0.1076441   0.0025890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  20  44044  -0.142254   0.313746   0.1051020   0.0024790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  21  44045  -0.141353   0.316047   0.1026928   0.0023370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  22  44046  -0.140353   0.318347   0.1004267   0.0022080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  23  44047  -0.139353   0.320547   0.0982776   0.0020930   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  24  44048  -0.138253   0.322847   0.0962264   0.0020190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  25  44049  -0.137152   0.325048   0.0942163   0.0019970   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  26  44050  -0.136052   0.327348   0.0922181   0.0020060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  27  44051  -0.134752   0.329548   0.0901940   0.0020360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  28  44052  -0.133451   0.331749   0.0881379   0.0020900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  29  44053  -0.132151   0.333949   0.0860197   0.0021460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   6  30  44054  -0.130751   0.336149   0.0838356   0.0022040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7   1  44055  -0.129251   0.338349   0.0816164   0.0022400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7   2  44056  -0.127750   0.340450   0.0793623   0.0022660   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7   3  44057  -0.126150   0.342650   0.0771012   0.0022590   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7   4  44058  -0.124550   0.344750   0.0748520   0.0022370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7   5  44059  -0.122850   0.346850   0.0726349   0.0021820   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7   6  44060  -0.121149   0.349051   0.0704827   0.0021180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7   7  44061  -0.119349   0.351051   0.0684006   0.0020380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7   8  44062  -0.117449   0.353151   0.0664025   0.0019740   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7   9  44063  -0.115548   0.355252   0.0644293   0.0019620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  10  44064  -0.113648   0.357252   0.0624592   0.0019980   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  11  44065  -0.111648   0.359252   0.0604150   0.0020960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  12  44066  -0.109648   0.361252   0.0582589   0.0022070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  13  44067  -0.107547   0.363253   0.0560078   0.0023090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  14  44068  -0.105447   0.365153   0.0536706   0.0023440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  15  44069  -0.103247   0.367153   0.0513345   0.0023140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  16  44070  -0.101047   0.369053   0.0490643   0.0022150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  17  44071  -0.098746   0.370854   0.0469312   0.0020650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  18  44072  -0.096446   0.372754   0.0449531   0.0018920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  19  44073  -0.094146   0.374554   0.0431459   0.0017220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  20  44074  -0.091745   0.376255   0.0415008   0.0015870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  21  44075  -0.089245   0.378055   0.0399696   0.0014800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  22  44076  -0.086745   0.379655   0.0385145   0.0014380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  23  44077  -0.084245   0.381355   0.0370804   0.0014280   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  24  44078  -0.081644   0.382956   0.0356382   0.0014610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  25  44079  -0.079044   0.384556   0.0341491   0.0015190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  26  44080  -0.076344   0.386056   0.0325949   0.0016000   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  27  44081  -0.073644   0.387556   0.0309578   0.0016750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  28  44082  -0.070943   0.388957   0.0292367   0.0017520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  29  44083  -0.068143   0.390257   0.0274485   0.0018100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  30  44084  -0.065343   0.391657   0.0256134   0.0018550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   7  31  44085  -0.062442   0.392858   0.0237382   0.0018840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8   1  44086  -0.059542   0.394058   0.0218541   0.0018920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8   2  44087  -0.056642   0.395258   0.0199700   0.0018840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8   3  44088  -0.053742   0.396358   0.0180868   0.0018710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8   4  44089  -0.050741   0.397459   0.0162237   0.0018670   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8   5  44090  -0.047741   0.398459   0.0143425   0.0018940   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8   6  44091  -0.044741   0.399359   0.0124074   0.0019850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8   7  44092  -0.041740   0.400260   0.0103613   0.0021260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8   8  44093  -0.038740   0.401060   0.0081381   0.0023110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8   9  44094  -0.035740   0.401860   0.0057360   0.0024900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  10  44095  -0.032740   0.402660   0.0031729   0.0026340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  11  44096  -0.029739   0.403361   0.0005067   0.0026850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  12  44097  -0.026739   0.403961  -0.0021664   0.0026460   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  13  44098  -0.023739   0.404561  -0.0047596   0.0025330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  14  44099  -0.020839   0.405161  -0.0072187   0.0023710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  15  44100  -0.017838   0.405662  -0.0095028   0.0021880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  16  44101  -0.014838   0.406062  -0.0116140   0.0020390   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  17  44102  -0.011938   0.406562  -0.0135841   0.0019220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  18  44103  -0.009037   0.406963  -0.0154743   0.0018530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  19  44104  -0.006137   0.407263  -0.0173164   0.0018300   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  20  44105  -0.003337   0.407663  -0.0191465   0.0018350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  21  44106  -0.000437   0.407963  -0.0209957   0.0018770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  22  44107   0.002364   0.408164  -0.0228968   0.0019260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  23  44108   0.005164   0.408464  -0.0248489   0.0019790   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  24  44109   0.007864   0.408664  -0.0268531   0.0020260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  25  44110   0.010664   0.408964  -0.0288972   0.0020470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  26  44111   0.013365   0.409165  -0.0309514   0.0020640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  27  44112   0.015965   0.409365  -0.0330065   0.0020440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  28  44113   0.018665   0.409465  -0.0350286   0.0020080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  29  44114   0.021266   0.409666  -0.0370168   0.0019550   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  30  44115   0.023866   0.409866  -0.0389479   0.0019060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   8  31  44116   0.026366   0.409966  -0.0408430   0.0018770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9   1  44117   0.028866   0.410066  -0.0427092   0.0018730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9   2  44118   0.031367   0.410267  -0.0446043   0.0019140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9   3  44119   0.033867   0.410367  -0.0465685   0.0020340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9   4  44120   0.036267   0.410467  -0.0486826   0.0022020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9   5  44121   0.038667   0.410467  -0.0509827   0.0024110   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9   6  44122   0.040968   0.410568  -0.0534889   0.0026040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9   7  44123   0.043268   0.410568  -0.0561580   0.0027220   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9   8  44124   0.045568   0.410568  -0.0589101   0.0027520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9   9  44125   0.047769   0.410569  -0.0616393   0.0026840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  10  44126   0.049969   0.410469  -0.0642544   0.0025470   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  11  44127   0.052069   0.410469  -0.0667156   0.0023750   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  12  44128   0.054169   0.410369  -0.0689987   0.0022070   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  13  44129   0.056270   0.410170  -0.0711428   0.0020900   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  14  44130   0.058270   0.409970  -0.0731970   0.0020150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  15  44131   0.060170   0.409770  -0.0751901   0.0019910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  16  44132   0.062070   0.409570  -0.0771932   0.0020120   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  17  44133   0.063971   0.409271  -0.0792264   0.0020560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  18  44134   0.065771   0.408971  -0.0813125   0.0021320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  19  44135   0.067371   0.408571  -0.0834837   0.0022060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  20  44136   0.069072   0.408172  -0.0857348   0.0022950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  21  44137   0.070772   0.407772  -0.0880699   0.0023710   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  22  44138   0.072372   0.407272  -0.0904591   0.0024240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  23  44139   0.073972   0.406772  -0.0928972   0.0024490   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  24  44140   0.075573   0.406173  -0.0953563   0.0024540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  25  44141   0.077173   0.405673  -0.0977975   0.0024350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  26  44142   0.078773   0.405073  -0.1002226   0.0024140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  27  44143   0.080273   0.404373  -0.1026177   0.0023890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  28  44144   0.081774   0.403774  -0.1049979   0.0023870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  29  44145   0.083274   0.403074  -0.1074050   0.0024260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979   9  30  44146   0.084674   0.402374  -0.1098792   0.0025190   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10   1  44147   0.085975   0.401675  -0.1124633   0.0026700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10   2  44148   0.087275   0.400975  -0.1152234   0.0028570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10   3  44149   0.088475   0.400175  -0.1181816   0.0030580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10   4  44150   0.089675   0.399375  -0.1213397   0.0032260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10   5  44151   0.090776   0.398576  -0.1246198   0.0033180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10   6  44152   0.091776   0.397776  -0.1279320   0.0033080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10   7  44153   0.092876   0.396976  -0.1311931   0.0031950   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10   8  44154   0.093676   0.396176  -0.1343112   0.0030350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10   9  44155   0.094477   0.395277  -0.1372514   0.0028530   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  10  44156   0.095277   0.394377  -0.1400185   0.0026990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  11  44157   0.095977   0.393477  -0.1426566   0.0025850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  12  44158   0.096678   0.392478  -0.1452078   0.0025350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  13  44159   0.097478   0.391478  -0.1477339   0.0025250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  14  44160   0.098278   0.390478  -0.1502721   0.0025560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  15  44161   0.099178   0.389478  -0.1528442   0.0026040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  16  44162   0.100079   0.388479  -0.1554943   0.0026770   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  17  44163   0.101079   0.387479  -0.1581995   0.0027400   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  18  44164   0.102179   0.386479  -0.1609706   0.0027920   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  19  44165   0.103379   0.385479  -0.1637867   0.0028230   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  20  44166   0.104680   0.384480  -0.1666199   0.0028080   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  21  44167   0.105980   0.383580  -0.1694130   0.0027730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  22  44168   0.107380   0.382680  -0.1721551   0.0027090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  23  44169   0.108881   0.381681  -0.1748223   0.0026240   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  24  44170   0.110481   0.380681  -0.1774014   0.0025340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  25  44171   0.112281   0.379681  -0.1798975   0.0024620   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  26  44172   0.113981   0.378581  -0.1823267   0.0024260   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  27  44173   0.115782   0.377382  -0.1847558   0.0024420   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  28  44174   0.117682   0.376182  -0.1872299   0.0025130   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  29  44175   0.119482   0.374882  -0.1897981   0.0026410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  30  44176   0.121283   0.373583  -0.1925102   0.0027960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  10  31  44177   0.123083   0.372183  -0.1953784   0.0029330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11   1  44178   0.124783   0.370683  -0.1983705   0.0030330   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11   2  44179   0.126383   0.369083  -0.2014256   0.0030630   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11   3  44180   0.127884   0.367484  -0.2044558   0.0029910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11   4  44181   0.129284   0.365884  -0.2073829   0.0028440   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11   5  44182   0.130484   0.364084  -0.2101320   0.0026580   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11   6  44183   0.131684   0.362284  -0.2127112   0.0024870   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11   7  44184   0.132585   0.360485  -0.2151193   0.0023520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11   8  44185   0.133385   0.358585  -0.2174344   0.0022800   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11   9  44186   0.134085   0.356685  -0.2196866   0.0022500   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  10  44187   0.134586   0.354686  -0.2219497   0.0022730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  11  44188   0.134986   0.352586  -0.2242328   0.0023200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  12  44189   0.135286   0.350486  -0.2265940   0.0023960   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  13  44190   0.135386   0.348386  -0.2290291   0.0024690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  14  44191   0.135387   0.346287  -0.2315232   0.0025360   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  15  44192   0.135287   0.344087  -0.2340844   0.0025850   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  16  44193   0.135187   0.341987  -0.2366845   0.0026100   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  17  44194   0.134987   0.339787  -0.2392866   0.0025990   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  18  44195   0.134788   0.337588  -0.2418818   0.0025690   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  19  44196   0.134488   0.335388  -0.2444159   0.0025140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  20  44197   0.134188   0.333188  -0.2468960   0.0024340   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  21  44198   0.133889   0.330989  -0.2492952   0.0023700   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  22  44199   0.133589   0.328689  -0.2516363   0.0023250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  23  44200   0.133389   0.326489  -0.2539624   0.0023380   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  24  44201   0.133189   0.324289  -0.2563306   0.0024060   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  25  44202   0.132990   0.322090  -0.2587997   0.0025310   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  26  44203   0.132890   0.319890  -0.2614018   0.0026730   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  27  44204   0.132790   0.317690  -0.2641470   0.0028140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  28  44205   0.132790   0.315590  -0.2670301   0.0029320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  29  44206   0.132791   0.313491  -0.2699922   0.0029910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  11  30  44207   0.132791   0.311391  -0.2729864   0.0029760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12   1  44208   0.132891   0.309291  -0.2759295   0.0028890   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12   2  44209   0.132992   0.307192  -0.2787596   0.0027640   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12   3  44210   0.133092   0.305192  -0.2814428   0.0026140   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12   4  44211   0.133192   0.303192  -0.2839849   0.0024760   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12   5  44212   0.133292   0.301192  -0.2864190   0.0023910   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12   6  44213   0.133493   0.299293  -0.2887822   0.0023560   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12   7  44214   0.133693   0.297393  -0.2911353   0.0023570   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12   8  44215   0.133893   0.295493  -0.2935174   0.0024020   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12   9  44216   0.134093   0.293593  -0.2959496   0.0024610   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  10  44217   0.134294   0.291794  -0.2984327   0.0025200   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  11  44218   0.134594   0.289994  -0.3009998   0.0025880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  12  44219   0.134894   0.288194  -0.3036140   0.0026320   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  13  44220   0.135295   0.286395  -0.3062551   0.0026540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  14  44221   0.135695   0.284695  -0.3089152   0.0026520   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  15  44222   0.136095   0.282995  -0.3115504   0.0026150   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  16  44223   0.136495   0.281295  -0.3141475   0.0025650   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  17  44224   0.136996   0.279696  -0.3166746   0.0024880   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  18  44225   0.137496   0.278096  -0.3191318   0.0024180   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  19  44226   0.138096   0.276496  -0.3215149   0.0023540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  20  44227   0.138596   0.274896  -0.3238650   0.0023410   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  21  44228   0.139197   0.273297  -0.3262171   0.0023840   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  22  44229   0.139697   0.271697  -0.3286413   0.0024810   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  23  44230   0.140197   0.270197  -0.3311794   0.0026090   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  24  44231   0.140698   0.268598  -0.3338485   0.0027350   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  25  44232   0.141098   0.266998  -0.3366387   0.0028270   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  26  44233   0.141398   0.265498  -0.3394808   0.0028600   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  27  44234   0.141698   0.263898  -0.3423349   0.0028250   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  28  44235   0.141899   0.262399  -0.3451201   0.0027370   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  29  44236   0.141999   0.260799  -0.3477952   0.0026040   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  30  44237   0.141999   0.259299  -0.3503143   0.0024540   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1979  12  31  44238   0.141899   0.257699  -0.3526975   0.0023160   0.000000   0.000000   0.015000   0.015000  0.0019000  0.0007000    0.001989    0.002000
+1980   1   1  44239   0.141700   0.256100   0.6450414   0.0022150   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1   2  44240   0.141300   0.254500   0.6428473   0.0021710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1   3  44241   0.140800   0.252800   0.6406841   0.0021740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1   4  44242   0.140201   0.251201   0.6384880   0.0022130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1   5  44243   0.139501   0.249501   0.6362489   0.0022770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1   6  44244   0.138701   0.247801   0.6339388   0.0023540   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1   7  44245   0.137701   0.246101   0.6315316   0.0024410   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1   8  44246   0.136702   0.244402   0.6290515   0.0025170   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1   9  44247   0.135602   0.242602   0.6265034   0.0025740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  10  44248   0.134502   0.240802   0.6239112   0.0026060   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  11  44249   0.133302   0.239002   0.6213091   0.0026040   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  12  44250   0.132003   0.237103   0.6187000   0.0025910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  13  44251   0.130703   0.235103   0.6161208   0.0025650   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  14  44252   0.129303   0.233103   0.6135817   0.0025230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  15  44253   0.127904   0.231104   0.6110716   0.0025010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  16  44254   0.126404   0.229104   0.6085694   0.0024990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  17  44255   0.124904   0.227104   0.6060563   0.0025390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  18  44256   0.123404   0.225004   0.6034802   0.0026200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  19  44257   0.121805   0.222905   0.6007981   0.0027570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  20  44258   0.120205   0.220905   0.5979729   0.0028950   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  21  44259   0.118605   0.218905   0.5950198   0.0030010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  22  44260   0.116906   0.217006   0.5919927   0.0030390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  23  44261   0.115206   0.215106   0.5889685   0.0030050   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  24  44262   0.113506   0.213306   0.5860064   0.0028880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  25  44263   0.111806   0.211606   0.5831983   0.0027220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  26  44264   0.110007   0.210007   0.5805671   0.0025290   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  27  44265   0.108307   0.208607   0.5781250   0.0023590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  28  44266   0.106507   0.207307   0.5758479   0.0022140   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  29  44267   0.104707   0.206107   0.5736818   0.0021170   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  30  44268   0.102908   0.205008   0.5715946   0.0020700   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   1  31  44269   0.101208   0.203908   0.5695265   0.0020640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2   1  44270   0.099408   0.202808   0.5674584   0.0020850   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2   2  44271   0.097709   0.201809   0.5653602   0.0021110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2   3  44272   0.096009   0.200909   0.5631961   0.0021700   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2   4  44273   0.094309   0.200109   0.5609840   0.0022390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2   5  44274   0.092609   0.199309   0.5587229   0.0022910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2   6  44275   0.090910   0.198510   0.5564517   0.0022870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2   7  44276   0.089210   0.197710   0.5541976   0.0022270   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2   8  44277   0.087610   0.196910   0.5519955   0.0021640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2   9  44278   0.086010   0.196010   0.5498833   0.0020860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  10  44279   0.084411   0.195211   0.5478242   0.0020350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  11  44280   0.082911   0.194311   0.5458231   0.0020010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  12  44281   0.081511   0.193411   0.5438250   0.0020110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  13  44282   0.080012   0.192512   0.5417948   0.0020860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  14  44283   0.078612   0.191612   0.5396317   0.0022410   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  15  44284   0.077312   0.190612   0.5372916   0.0024470   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  16  44285   0.075812   0.189712   0.5347254   0.0026990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  17  44286   0.074513   0.188813   0.5319073   0.0029320   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  18  44287   0.073113   0.188013   0.5288722   0.0031040   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  19  44288   0.071813   0.187113   0.5257211   0.0031810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  20  44289   0.070513   0.186313   0.5225509   0.0031510   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  21  44290   0.069214   0.185614   0.5194428   0.0030570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  22  44291   0.067914   0.184814   0.5164487   0.0029110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  23  44292   0.066714   0.184014   0.5136095   0.0027410   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  24  44293   0.065515   0.183315   0.5109424   0.0025890   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  25  44294   0.064315   0.182615   0.5084233   0.0024580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  26  44295   0.063215   0.182015   0.5060082   0.0023710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  27  44296   0.062015   0.181415   0.5036660   0.0023220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  28  44297   0.060916   0.180916   0.5013529   0.0023070   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   2  29  44298   0.059816   0.180416   0.4990458   0.0023120   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3   1  44299   0.058816   0.180016   0.4967296   0.0023220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3   2  44300   0.057716   0.179716   0.4943945   0.0023350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3   3  44301   0.056717   0.179417   0.4920534   0.0023420   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3   4  44302   0.055617   0.179217   0.4897273   0.0023250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3   5  44303   0.054517   0.179017   0.4874211   0.0022800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3   6  44304   0.053518   0.178918   0.4851660   0.0022370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3   7  44305   0.052418   0.178818   0.4829639   0.0021850   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3   8  44306   0.051218   0.178818   0.4807998   0.0021340   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3   9  44307   0.050018   0.178818   0.4786916   0.0020900   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  10  44308   0.048719   0.178819   0.4766125   0.0020770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  11  44309   0.047419   0.178919   0.4745264   0.0021010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  12  44310   0.046019   0.179019   0.4723893   0.0021810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  13  44311   0.044519   0.179119   0.4701431   0.0023340   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  14  44312   0.043020   0.179220   0.4677030   0.0025440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  15  44313   0.041320   0.179320   0.4650469   0.0027760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  16  44314   0.039620   0.179520   0.4621707   0.0029790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  17  44315   0.037821   0.179821   0.4591076   0.0031200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  18  44316   0.036021   0.180121   0.4559655   0.0031430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  19  44317   0.034221   0.180421   0.4528554   0.0030620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  20  44318   0.032321   0.180721   0.4498732   0.0029050   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  21  44319   0.030422   0.181122   0.4470511   0.0027420   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  22  44320   0.028522   0.181622   0.4443910   0.0025960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  23  44321   0.026722   0.182022   0.4418309   0.0025120   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  24  44322   0.024822   0.182522   0.4393467   0.0024780   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  25  44323   0.023023   0.183023   0.4368586   0.0024970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  26  44324   0.021323   0.183523   0.4343385   0.0025580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  27  44325   0.019523   0.184123   0.4317434   0.0026360   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  28  44326   0.017924   0.184624   0.4290712   0.0027150   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  29  44327   0.016224   0.185224   0.4263231   0.0027810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  30  44328   0.014624   0.185824   0.4235130   0.0028340   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   3  31  44329   0.013024   0.186524   0.4206639   0.0028540   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4   1  44330   0.011425   0.187125   0.4178067   0.0028460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4   2  44331   0.009825   0.187825   0.4149706   0.0028100   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4   3  44332   0.008225   0.188425   0.4121945   0.0027370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4   4  44333   0.006625   0.189125   0.4095004   0.0026400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4   5  44334   0.005026   0.189926   0.4069052   0.0025320   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4   6  44335   0.003426   0.190626   0.4044211   0.0024410   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4   7  44336   0.001726   0.191326   0.4020120   0.0023840   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4   8  44337   0.000027   0.192127   0.3996249   0.0023860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4   9  44338  -0.001673   0.192827   0.3972197   0.0024460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  10  44339  -0.003373   0.193627   0.3947126   0.0025660   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  11  44340  -0.005173   0.194427   0.3920625   0.0027390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  12  44341  -0.006972   0.195228   0.3892234   0.0029260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  13  44342  -0.008872   0.196128   0.3862142   0.0030770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  14  44343  -0.010672   0.196928   0.3831091   0.0031370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  15  44344  -0.012471   0.197729   0.3799870   0.0030970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  16  44345  -0.014371   0.198629   0.3769469   0.0029810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  17  44346  -0.016271   0.199529   0.3740427   0.0028050   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  18  44347  -0.018071   0.200329   0.3713256   0.0026300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  19  44348  -0.019970   0.201230   0.3687575   0.0024960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  20  44349  -0.021770   0.202130   0.3663044   0.0024220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  21  44350  -0.023570   0.203130   0.3638942   0.0024070   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  22  44351  -0.025270   0.204030   0.3614641   0.0024510   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  23  44352  -0.027069   0.205031   0.3589800   0.0025180   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  24  44353  -0.028669   0.206031   0.3564309   0.0025820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  25  44354  -0.030269   0.207031   0.3538157   0.0026490   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  26  44355  -0.031868   0.208032   0.3511376   0.0026950   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  27  44356  -0.033268   0.209132   0.3484235   0.0027210   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  28  44357  -0.034668   0.210232   0.3457044   0.0027010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  29  44358  -0.035968   0.211332   0.3430293   0.0026320   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   4  30  44359  -0.037167   0.212433   0.3404381   0.0025570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5   1  44360  -0.038367   0.213633   0.3379320   0.0024610   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5   2  44361  -0.039367   0.214833   0.3355279   0.0023570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5   3  44362  -0.040467   0.215933   0.3332068   0.0022810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5   4  44363  -0.041366   0.217134   0.3309556   0.0022350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5   5  44364  -0.042266   0.218234   0.3287305   0.0022230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5   6  44365  -0.043066   0.219334   0.3264904   0.0022760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5   7  44366  -0.043865   0.220535   0.3241703   0.0023740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5   8  44367  -0.044565   0.221635   0.3217271   0.0025160   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5   9  44368  -0.045265   0.222735   0.3191210   0.0026980   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  10  44369  -0.046065   0.223835   0.3163369   0.0028530   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  11  44370  -0.046764   0.225036   0.3134248   0.0029580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  12  44371  -0.047464   0.226036   0.3104507   0.0029720   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  13  44372  -0.048164   0.227136   0.3075135   0.0028870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  14  44373  -0.048764   0.228236   0.3047014   0.0027290   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  15  44374  -0.049363   0.229337   0.3020653   0.0025520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  16  44375  -0.049863   0.230437   0.2995992   0.0023940   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  17  44376  -0.050363   0.231437   0.2972680   0.0022770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  18  44377  -0.050862   0.232538   0.2950249   0.0022110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  19  44378  -0.051262   0.233538   0.2928178   0.0022100   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  20  44379  -0.051562   0.234638   0.2905937   0.0022360   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  21  44380  -0.051962   0.235638   0.2883276   0.0022950   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  22  44381  -0.052261   0.236639   0.2860004   0.0023600   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  23  44382  -0.052561   0.237639   0.2836203   0.0023990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  24  44383  -0.052861   0.238639   0.2812102   0.0024000   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  25  44384  -0.053061   0.239639   0.2788181   0.0023760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  26  44385  -0.053260   0.240640   0.2764659   0.0023150   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  27  44386  -0.053460   0.241640   0.2741968   0.0022280   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  28  44387  -0.053660   0.242640   0.2720267   0.0021190   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  29  44388  -0.053859   0.243741   0.2699636   0.0020080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  30  44389  -0.054059   0.244741   0.2680115   0.0018970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   5  31  44390  -0.054259   0.245741   0.2661613   0.0018080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6   1  44391  -0.054459   0.246741   0.2643932   0.0017580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6   2  44392  -0.054558   0.247742   0.2626371   0.0017620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6   3  44393  -0.054758   0.248842   0.2608490   0.0018210   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6   4  44394  -0.054858   0.249842   0.2589699   0.0019320   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6   5  44395  -0.054958   0.250842   0.2569677   0.0020720   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6   6  44396  -0.055157   0.251843   0.2548296   0.0022020   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6   7  44397  -0.055257   0.252743   0.2525695   0.0022990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6   8  44398  -0.055357   0.253743   0.2502544   0.0023370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6   9  44399  -0.055456   0.254744   0.2479223   0.0023230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  10  44400  -0.055556   0.255644   0.2456431   0.0022250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  11  44401  -0.055656   0.256644   0.2434860   0.0020730   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  12  44402  -0.055856   0.257644   0.2414869   0.0019300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  13  44403  -0.055955   0.258545   0.2396238   0.0018110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  14  44404  -0.055955   0.259545   0.2378437   0.0017490   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  15  44405  -0.056055   0.260545   0.2360965   0.0017540   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  16  44406  -0.056155   0.261645   0.2343224   0.0017930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  17  44407  -0.056254   0.262646   0.2325023   0.0018480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  18  44408  -0.056254   0.263746   0.2306232   0.0019130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  19  44409  -0.056354   0.264846   0.2286781   0.0019650   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  20  44410  -0.056353   0.266047   0.2266979   0.0020010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  21  44411  -0.056253   0.267147   0.2246928   0.0020040   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  22  44412  -0.056253   0.268347   0.2226997   0.0019790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  23  44413  -0.056153   0.269547   0.2207436   0.0019280   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  24  44414  -0.055952   0.270848   0.2188595   0.0018570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  25  44415  -0.055752   0.272048   0.2170443   0.0017620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  26  44416  -0.055552   0.273348   0.2153262   0.0016640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  27  44417  -0.055252   0.274648   0.2137101   0.0015800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  28  44418  -0.054951   0.275949   0.2121650   0.0015180   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  29  44419  -0.054551   0.277349   0.2106569   0.0015070   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   6  30  44420  -0.054051   0.278649   0.2091317   0.0015540   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7   1  44421  -0.053550   0.280050   0.2075326   0.0016500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7   2  44422  -0.053050   0.281350   0.2058245   0.0017780   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7   3  44423  -0.052450   0.282750   0.2039804   0.0018950   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7   4  44424  -0.051750   0.284050   0.2020393   0.0019760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7   5  44425  -0.051049   0.285351   0.2000492   0.0020010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7   6  44426  -0.050349   0.286551   0.1980640   0.0019510   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7   7  44427  -0.049549   0.287851   0.1961599   0.0018460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7   8  44428  -0.048748   0.289052   0.1943838   0.0017090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7   9  44429  -0.047948   0.290252   0.1927437   0.0015730   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  10  44430  -0.047048   0.291452   0.1912296   0.0014500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  11  44431  -0.046248   0.292552   0.1898264   0.0013770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  12  44432  -0.045447   0.293653   0.1884583   0.0013600   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  13  44433  -0.044647   0.294653   0.1870792   0.0013920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  14  44434  -0.043847   0.295753   0.1856631   0.0014550   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  15  44435  -0.043147   0.296853   0.1841650   0.0015320   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  16  44436  -0.042546   0.297854   0.1825999   0.0016070   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  17  44437  -0.041946   0.298954   0.1809647   0.0016690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  18  44438  -0.041546   0.299954   0.1792796   0.0017090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  19  44439  -0.041045   0.300955   0.1775665   0.0017110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  20  44440  -0.040645   0.302055   0.1758584   0.0016950   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  21  44441  -0.040245   0.302955   0.1741753   0.0016570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  22  44442  -0.039945   0.303955   0.1725482   0.0015960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  23  44443  -0.039644   0.304856   0.1709830   0.0015420   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  24  44444  -0.039444   0.305756   0.1694679   0.0014880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  25  44445  -0.039144   0.306656   0.1679888   0.0014680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  26  44446  -0.038944   0.307456   0.1665267   0.0014830   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  27  44447  -0.038643   0.308257   0.1650136   0.0015460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  28  44448  -0.038443   0.308957   0.1634065   0.0016690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  29  44449  -0.038243   0.309657   0.1616533   0.0018190   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  30  44450  -0.038042   0.310258   0.1597562   0.0019680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   7  31  44451  -0.037842   0.310958   0.1577421   0.0020620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8   1  44452  -0.037642   0.311558   0.1556700   0.0020680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8   2  44453  -0.037442   0.312058   0.1536259   0.0019970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8   3  44454  -0.037241   0.312659   0.1516898   0.0018630   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8   4  44455  -0.037041   0.313159   0.1499126   0.0016860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8   5  44456  -0.036841   0.313759   0.1483125   0.0015190   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8   6  44457  -0.036641   0.314259   0.1468674   0.0013760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8   7  44458  -0.036440   0.314860   0.1455553   0.0012890   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8   8  44459  -0.036240   0.315460   0.1442792   0.0012690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8   9  44460  -0.036040   0.316060   0.1430091   0.0012910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  10  44461  -0.035739   0.316661   0.1416760   0.0013610   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  11  44462  -0.035539   0.317361   0.1402698   0.0014500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  12  44463  -0.035239   0.318061   0.1387757   0.0015490   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  13  44464  -0.034939   0.318761   0.1371856   0.0016370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  14  44465  -0.034638   0.319462   0.1355185   0.0017030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  15  44466  -0.034238   0.320262   0.1337874   0.0017520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  16  44467  -0.033838   0.321162   0.1320323   0.0017620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  17  44468  -0.033438   0.321962   0.1302701   0.0017470   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  18  44469  -0.033137   0.322863   0.1285440   0.0017150   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  19  44470  -0.032737   0.323663   0.1268409   0.0016890   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  20  44471  -0.032437   0.324563   0.1251718   0.0016620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  21  44472  -0.032236   0.325364   0.1235007   0.0016660   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  22  44473  -0.032136   0.326164   0.1218276   0.0016970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  23  44474  -0.031936   0.326964   0.1200975   0.0017710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  24  44475  -0.031836   0.327764   0.1182533   0.0019090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  25  44476  -0.031835   0.328465   0.1162522   0.0021020   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  26  44477  -0.031735   0.329165   0.1140391   0.0023090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  27  44478  -0.031835   0.329765   0.1116410   0.0024800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  28  44479  -0.031935   0.330265   0.1091049   0.0025760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  29  44480  -0.032034   0.330866   0.1065238   0.0025690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  30  44481  -0.032134   0.331366   0.1040107   0.0024530   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   8  31  44482  -0.032334   0.331766   0.1016295   0.0022910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9   1  44483  -0.032433   0.332267   0.0994354   0.0021080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9   2  44484  -0.032533   0.332667   0.0974073   0.0019460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9   3  44485  -0.032533   0.333067   0.0955172   0.0018440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9   4  44486  -0.032633   0.333467   0.0937001   0.0018020   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9   5  44487  -0.032632   0.333868   0.0918830   0.0018290   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9   6  44488  -0.032632   0.334368   0.0900159   0.0019100   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9   7  44489  -0.032532   0.334768   0.0880538   0.0020170   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9   8  44490  -0.032332   0.335168   0.0859906   0.0021200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9   9  44491  -0.032131   0.335569   0.0838155   0.0022140   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  10  44492  -0.031931   0.336069   0.0815584   0.0022970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  11  44493  -0.031731   0.336469   0.0792403   0.0023440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  12  44494  -0.031430   0.336870   0.0768822   0.0023700   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  13  44495  -0.031130   0.337270   0.0745191   0.0023590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  14  44496  -0.030830   0.337770   0.0721720   0.0023150   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  15  44497  -0.030530   0.338170   0.0698829   0.0022630   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  16  44498  -0.030229   0.338571   0.0676547   0.0022050   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  17  44499  -0.029829   0.339071   0.0654636   0.0021680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  18  44500  -0.029529   0.339471   0.0633165   0.0021440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  19  44501  -0.029129   0.339871   0.0611604   0.0021680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  20  44502  -0.028728   0.340372   0.0589613   0.0022400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  21  44503  -0.028428   0.340772   0.0566482   0.0023750   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  22  44504  -0.028028   0.341172   0.0541871   0.0025560   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  23  44505  -0.027627   0.341573   0.0515240   0.0027540   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  24  44506  -0.027227   0.342073   0.0486928   0.0029050   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  25  44507  -0.026827   0.342473   0.0457547   0.0029710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  26  44508  -0.026327   0.342973   0.0428006   0.0029190   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  27  44509  -0.025926   0.343474   0.0399405   0.0027780   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  28  44510  -0.025426   0.343974   0.0372624   0.0025820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  29  44511  -0.024926   0.344474   0.0347853   0.0023880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980   9  30  44512  -0.024525   0.345075   0.0324722   0.0022380   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10   1  44513  -0.024025   0.345675   0.0302861   0.0021440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10   2  44514  -0.023625   0.346275   0.0281620   0.0021250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10   3  44515  -0.023225   0.346875   0.0260268   0.0021500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10   4  44516  -0.022724   0.347576   0.0238407   0.0022080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10   5  44517  -0.022324   0.348176   0.0215976   0.0022890   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10   6  44518  -0.021824   0.348876   0.0192635   0.0023670   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10   7  44519  -0.021324   0.349676   0.0168594   0.0024380   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10   8  44520  -0.020823   0.350377   0.0143953   0.0024820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10   9  44521  -0.020223   0.351177   0.0119042   0.0024960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  10  44522  -0.019623   0.351977   0.0094141   0.0024810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  11  44523  -0.019022   0.352678   0.0069510   0.0024400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  12  44524  -0.018422   0.353478   0.0045499   0.0023830   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  13  44525  -0.017722   0.354278   0.0021967   0.0023240   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  14  44526  -0.017122   0.355078  -0.0001054   0.0022810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  15  44527  -0.016421   0.355879  -0.0023645   0.0022480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  16  44528  -0.015721   0.356579  -0.0046236   0.0022680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  17  44529  -0.015021   0.357379  -0.0069107   0.0023330   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  18  44530  -0.014421   0.358079  -0.0093008   0.0024560   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  19  44531  -0.013720   0.358680  -0.0118519   0.0026440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  20  44532  -0.013020   0.359280  -0.0145990   0.0028640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  21  44533  -0.012420   0.359880  -0.0175661   0.0030720   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  22  44534  -0.011719   0.360481  -0.0207212   0.0032170   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  23  44535  -0.011019   0.360981  -0.0239754   0.0032570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  24  44536  -0.010319   0.361481  -0.0271985   0.0031810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  25  44537  -0.009619   0.361981  -0.0302976   0.0030070   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  26  44538  -0.008918   0.362382  -0.0331997   0.0027960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  27  44539  -0.008218   0.362782  -0.0358988   0.0026070   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  28  44540  -0.007518   0.363182  -0.0384339   0.0024660   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  29  44541  -0.006818   0.363582  -0.0408540   0.0023960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  30  44542  -0.006017   0.363983  -0.0432471   0.0023880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  10  31  44543  -0.005317   0.364383  -0.0456562   0.0024230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11   1  44544  -0.004617   0.364683  -0.0481093   0.0024770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11   2  44545  -0.003916   0.365084  -0.0506104   0.0025240   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11   3  44546  -0.003216   0.365384  -0.0531525   0.0025680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11   4  44547  -0.002416   0.365684  -0.0557397   0.0025790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11   5  44548  -0.001716   0.366084  -0.0583118   0.0025610   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11   6  44549  -0.000915   0.366385  -0.0608529   0.0025130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11   7  44550  -0.000115   0.366785  -0.0633290   0.0024380   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11   8  44551   0.000685   0.367185  -0.0657111   0.0023430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11   9  44552   0.001585   0.367585  -0.0680042   0.0022400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  10  44553   0.002486   0.367986  -0.0701933   0.0021540   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  11  44554   0.003486   0.368386  -0.0723084   0.0020820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  12  44555   0.004386   0.368786  -0.0743815   0.0020600   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  13  44556   0.005487   0.369187  -0.0764576   0.0020900   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  14  44557   0.006587   0.369587  -0.0785807   0.0021840   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  15  44558   0.007787   0.369987  -0.0808328   0.0023300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  16  44559   0.008987   0.370387  -0.0832609   0.0025230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  17  44560   0.010288   0.370688  -0.0858910   0.0027350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  18  44561   0.011588   0.371088  -0.0887222   0.0029260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  19  44562   0.012888   0.371488  -0.0917103   0.0030450   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  20  44563   0.014288   0.371788  -0.0947874   0.0030620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  21  44564   0.015789   0.372089  -0.0978095   0.0029790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  22  44565   0.017289   0.372389  -0.1007126   0.0028210   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  23  44566   0.018789   0.372589  -0.1034467   0.0026500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  24  44567   0.020290   0.372890  -0.1060158   0.0024870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  25  44568   0.021990   0.373090  -0.1084429   0.0023800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  26  44569   0.023590   0.373290  -0.1107880   0.0023410   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  27  44570   0.025290   0.373390  -0.1131301   0.0023420   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  28  44571   0.026891   0.373591  -0.1154812   0.0023700   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  29  44572   0.028491   0.373691  -0.1178743   0.0024050   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  11  30  44573   0.030191   0.373791  -0.1202874   0.0024200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12   1  44574   0.031691   0.373891  -0.1227065   0.0024250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12   2  44575   0.033292   0.373992  -0.1251286   0.0024020   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12   3  44576   0.034792   0.374092  -0.1275107   0.0023700   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12   4  44577   0.036292   0.374192  -0.1298498   0.0023110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12   5  44578   0.037693   0.374193  -0.1321379   0.0022520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12   6  44579   0.038993   0.374293  -0.1343501   0.0021800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12   7  44580   0.040293   0.374193  -0.1364992   0.0021200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12   8  44581   0.041493   0.374193  -0.1385873   0.0020770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12   9  44582   0.042794   0.374094  -0.1406564   0.0020690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  10  44583   0.043994   0.373994  -0.1427405   0.0021080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  11  44584   0.045194   0.373794  -0.1448916   0.0022030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  12  44585   0.046394   0.373494  -0.1471637   0.0023480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  13  44586   0.047595   0.373095  -0.1495988   0.0025170   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  14  44587   0.048895   0.372795  -0.1522099   0.0027060   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  15  44588   0.050095   0.372295  -0.1549940   0.0028560   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  16  44589   0.051396   0.371796  -0.1579061   0.0029440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  17  44590   0.052696   0.371196  -0.1608672   0.0029550   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  18  44591   0.054096   0.370596  -0.1637773   0.0028610   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  19  44592   0.055496   0.369896  -0.1665554   0.0026950   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  20  44593   0.056997   0.369197  -0.1691585   0.0024870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  21  44594   0.058397   0.368397  -0.1715446   0.0023030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  22  44595   0.059897   0.367497  -0.1737807   0.0021800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  23  44596   0.061398   0.366698  -0.1759178   0.0021250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  24  44597   0.062798   0.365798  -0.1780399   0.0021270   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  25  44598   0.064298   0.364798  -0.1801930   0.0021740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  26  44599   0.065698   0.363798  -0.1823911   0.0022430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  27  44600   0.067099   0.362899  -0.1846662   0.0023030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  28  44601   0.068399   0.361899  -0.1869903   0.0023430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  29  44602   0.069599   0.360999  -0.1893524   0.0023750   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  30  44603   0.070699   0.360099  -0.1917225   0.0023780   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1980  12  31  44604   0.071700   0.359200  -0.1941006   0.0023630   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1   1  44605   0.072600   0.358400  -0.1964497   0.0023250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1   2  44606   0.073400   0.357600  -0.1987358   0.0022560   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1   3  44607   0.074101   0.356901  -0.2009620   0.0021870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1   4  44608   0.074701   0.356301  -0.2031241   0.0021300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1   5  44609   0.075201   0.355701  -0.2052312   0.0020910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1   6  44610   0.075601   0.355101  -0.2073213   0.0020970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1   7  44611   0.076002   0.354602  -0.2094434   0.0021580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1   8  44612   0.076402   0.354102  -0.2116565   0.0022740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1   9  44613   0.076702   0.353602  -0.2140046   0.0024290   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  10  44614   0.076902   0.353102  -0.2165177   0.0025950   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  11  44615   0.077103   0.352603  -0.2191768   0.0027370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  12  44616   0.077303   0.352103  -0.2219649   0.0028270   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  13  44617   0.077503   0.351603  -0.2248060   0.0028450   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  14  44618   0.077604   0.350904  -0.2276201   0.0027880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  15  44619   0.077704   0.350304  -0.2303522   0.0026690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  16  44620   0.077804   0.349504  -0.2329463   0.0025250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  17  44621   0.077904   0.348804  -0.2353934   0.0023750   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  18  44622   0.078005   0.348005  -0.2377095   0.0022650   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  19  44623   0.078105   0.347105  -0.2399446   0.0022160   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  20  44624   0.078205   0.346205  -0.2421727   0.0022390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  21  44625   0.078305   0.345305  -0.2444388   0.0022970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  22  44626   0.078406   0.344306  -0.2467739   0.0023740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  23  44627   0.078506   0.343406  -0.2491940   0.0024360   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  24  44628   0.078806   0.342306  -0.2516401   0.0024580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  25  44629   0.079107   0.341307  -0.2540912   0.0024400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  26  44630   0.079607   0.340207  -0.2565103   0.0023900   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  27  44631   0.080207   0.339207  -0.2588614   0.0023090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  28  44632   0.080907   0.338107  -0.2611195   0.0021920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  29  44633   0.081808   0.337008  -0.2632416   0.0020510   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  30  44634   0.082808   0.336008  -0.2652217   0.0019090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   1  31  44635   0.083808   0.334908  -0.2670718   0.0018080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2   1  44636   0.084908   0.333908  -0.2688349   0.0017220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2   2  44637   0.086009   0.333009  -0.2705390   0.0016850   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2   3  44638   0.087009   0.332109  -0.2722341   0.0017120   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2   4  44639   0.088109   0.331309  -0.2739722   0.0018190   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2   5  44640   0.089110   0.330510  -0.2758783   0.0020180   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2   6  44641   0.090010   0.329710  -0.2780274   0.0022710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2   7  44642   0.090810   0.329010  -0.2804145   0.0024980   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2   8  44643   0.091610   0.328410  -0.2830126   0.0026760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2   9  44644   0.092211   0.327711  -0.2857387   0.0027700   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  10  44645   0.092711   0.327111  -0.2885138   0.0027780   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  11  44646   0.093011   0.326511  -0.2912729   0.0027080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  12  44647   0.093111   0.325911  -0.2939090   0.0025720   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  13  44648   0.093012   0.325212  -0.2964181   0.0024400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  14  44649   0.092712   0.324512  -0.2988092   0.0023340   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  15  44650   0.092312   0.323812  -0.3011143   0.0022670   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  16  44651   0.091813   0.323113  -0.3033554   0.0022350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  17  44652   0.091213   0.322313  -0.3056024   0.0022460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  18  44653   0.090613   0.321513  -0.3078685   0.0022770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  19  44654   0.089913   0.320613  -0.3101576   0.0022910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  20  44655   0.089214   0.319714  -0.3124537   0.0022980   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  21  44656   0.088514   0.318814  -0.3147348   0.0022860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  22  44657   0.087714   0.317914  -0.3170149   0.0022690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  23  44658   0.086914   0.317114  -0.3192710   0.0022470   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  24  44659   0.086215   0.316215  -0.3214981   0.0022150   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  25  44660   0.085615   0.315415  -0.3236942   0.0022010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  26  44661   0.085015   0.314715  -0.3258893   0.0021920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  27  44662   0.084616   0.313916  -0.3280904   0.0022110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   2  28  44663   0.084216   0.313316  -0.3303205   0.0022440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3   1  44664   0.084016   0.312616  -0.3325926   0.0023030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3   2  44665   0.083916   0.312016  -0.3349447   0.0023910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3   3  44666   0.083917   0.311417  -0.3374038   0.0025390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3   4  44667   0.084017   0.310917  -0.3400339   0.0027280   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3   5  44668   0.084317   0.310317  -0.3428670   0.0029440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3   6  44669   0.084717   0.309817  -0.3459241   0.0031570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3   7  44670   0.085218   0.309218  -0.3491752   0.0033380   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3   8  44671   0.085718   0.308618  -0.3525693   0.0034310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3   9  44672   0.086318   0.308018  -0.3560014   0.0034060   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  10  44673   0.086919   0.307319  -0.3593595   0.0032970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  11  44674   0.087619   0.306719  -0.3625676   0.0031220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  12  44675   0.088319   0.305919  -0.3656017   0.0029510   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  13  44676   0.089119   0.305219  -0.3684808   0.0027940   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  14  44677   0.089820   0.304420  -0.3712119   0.0026600   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  15  44678   0.090520   0.303620  -0.3738220   0.0025830   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  16  44679   0.091320   0.302720  -0.3763880   0.0025560   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  17  44680   0.092121   0.301921  -0.3789601   0.0025790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  18  44681   0.092921   0.301021  -0.3815412   0.0026060   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  19  44682   0.093621   0.300221  -0.3841673   0.0026330   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  20  44683   0.094421   0.299321  -0.3867994   0.0026360   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  21  44684   0.095222   0.298522  -0.3894175   0.0026030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  22  44685   0.096022   0.297722  -0.3919946   0.0025440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  23  44686   0.096722   0.296922  -0.3945047   0.0024610   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  24  44687   0.097522   0.296122  -0.3969178   0.0023610   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  25  44688   0.098223   0.295323  -0.3992119   0.0022480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  26  44689   0.098823   0.294523  -0.4014040   0.0021370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  27  44690   0.099523   0.293723  -0.4035031   0.0020640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  28  44691   0.100124   0.292924  -0.4055332   0.0020260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  29  44692   0.100624   0.292124  -0.4075603   0.0020420   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  30  44693   0.101124   0.291324  -0.4096464   0.0021230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   3  31  44694   0.101524   0.290424  -0.4118355   0.0022660   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4   1  44695   0.101925   0.289525  -0.4142086   0.0024670   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4   2  44696   0.102225   0.288625  -0.4167926   0.0027130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4   3  44697   0.102425   0.287625  -0.4196227   0.0029400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4   4  44698   0.102625   0.286525  -0.4226618   0.0031230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4   5  44699   0.102726   0.285526  -0.4258339   0.0032000   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4   6  44700   0.102826   0.284326  -0.4290220   0.0031580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4   7  44701   0.102826   0.283126  -0.4321191   0.0030160   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4   8  44702   0.102727   0.281927  -0.4350502   0.0028460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4   9  44703   0.102627   0.280727  -0.4378183   0.0026840   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  10  44704   0.102427   0.279427  -0.4404494   0.0025930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  11  44705   0.102127   0.278227  -0.4430285   0.0025660   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  12  44706   0.101828   0.277028  -0.4455936   0.0025860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  13  44707   0.101328   0.275828  -0.4482257   0.0026630   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  14  44708   0.100828   0.274628  -0.4509278   0.0027520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  15  44709   0.100328   0.273528  -0.4537188   0.0028390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  16  44710   0.099729   0.272429  -0.4565899   0.0028980   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  17  44711   0.099029   0.271429  -0.4595040   0.0029250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  18  44712   0.098429   0.270429  -0.4624281   0.0029170   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  19  44713   0.097830   0.269630  -0.4653262   0.0028740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  20  44714   0.097230   0.268730  -0.4681683   0.0027920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  21  44715   0.096630   0.268030  -0.4709154   0.0027000   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  22  44716   0.096030   0.267330  -0.4735555   0.0025930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  23  44717   0.095531   0.266631  -0.4760956   0.0024880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  24  44718   0.095031   0.266031  -0.4785517   0.0024220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  25  44719   0.094531   0.265431  -0.4809528   0.0023870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  26  44720   0.094231   0.264931  -0.4833429   0.0024030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  27  44721   0.093932   0.264332  -0.4857869   0.0024750   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  28  44722   0.093732   0.263732  -0.4883240   0.0026040   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  29  44723   0.093632   0.263032  -0.4910021   0.0027700   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   4  30  44724   0.093533   0.262433  -0.4938592   0.0029440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5   1  44725   0.093533   0.261833  -0.4968823   0.0030920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5   2  44726   0.093633   0.261133  -0.5000184   0.0031720   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5   3  44727   0.093733   0.260433  -0.5031785   0.0031280   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5   4  44728   0.093834   0.259734  -0.5062456   0.0029820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5   5  44729   0.093934   0.259034  -0.5091167   0.0027410   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5   6  44730   0.094034   0.258334  -0.5117328   0.0025040   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5   7  44731   0.094134   0.257634  -0.5141308   0.0023200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5   8  44732   0.094135   0.256935  -0.5163879   0.0022090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5   9  44733   0.094235   0.256135  -0.5185840   0.0021950   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  10  44734   0.094335   0.255435  -0.5207871   0.0022370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  11  44735   0.094336   0.254736  -0.5230682   0.0023180   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  12  44736   0.094436   0.254036  -0.5254243   0.0023930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  13  44737   0.094436   0.253236  -0.5278494   0.0024620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  14  44738   0.094436   0.252536  -0.5303385   0.0025030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  15  44739   0.094437   0.251737  -0.5328526   0.0025200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  16  44740   0.094337   0.250937  -0.5353686   0.0024940   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  17  44741   0.094337   0.250137  -0.5378307   0.0024470   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  18  44742   0.094237   0.249337  -0.5402468   0.0023590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  19  44743   0.094138   0.248438  -0.5425569   0.0022710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  20  44744   0.093938   0.247538  -0.5447800   0.0021790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  21  44745   0.093838   0.246738  -0.5469211   0.0020990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  22  44746   0.093539   0.245839  -0.5490002   0.0020660   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  23  44747   0.093339   0.244839  -0.5510603   0.0020530   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  24  44748   0.092939   0.243939  -0.5531333   0.0020920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  25  44749   0.092539   0.243039  -0.5552524   0.0021630   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  26  44750   0.091940   0.242040  -0.5574755   0.0022880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  27  44751   0.091340   0.241140  -0.5598366   0.0024290   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  28  44752   0.090640   0.240140  -0.5623417   0.0025860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  29  44753   0.089840   0.239240  -0.5649858   0.0026990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  30  44754   0.089041   0.238241  -0.5677009   0.0027370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   5  31  44755   0.088141   0.237341  -0.5704230   0.0026790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6   1  44756   0.087341   0.236441  -0.5730380   0.0025390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6   2  44757   0.086442   0.235542  -0.5754961   0.0023500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6   3  44758   0.085642   0.234642  -0.5777522   0.0021720   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6   4  44759   0.084742   0.233742  -0.5798593   0.0020640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6   5  44760   0.083942   0.232942  -0.5819074   0.0020350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6   6  44761   0.083143   0.232243  -0.5839635   0.0020740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6   7  44762   0.082343   0.231443  -0.5860686   0.0021430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6   8  44763   0.081543   0.230743  -0.5882526   0.0022210   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6   9  44764   0.080743   0.230043  -0.5905167   0.0022840   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  10  44765   0.080044   0.229444  -0.5928198   0.0023180   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  11  44766   0.079344   0.228744  -0.5951519   0.0023090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  12  44767   0.078644   0.227944  -0.5974380   0.0022560   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  13  44768   0.077945   0.227245  -0.5996431   0.0021610   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  14  44769   0.077345   0.226445  -0.6017532   0.0020350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  15  44770   0.076745   0.225645  -0.6037202   0.0018970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  16  44771   0.076245   0.224745  -0.6055373   0.0017510   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  17  44772   0.075746   0.223946  -0.6072274   0.0016230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  18  44773   0.075146   0.223046  -0.6087845   0.0014970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  19  44774   0.074646   0.222146  -0.6102476   0.0014270   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  20  44775   0.074147   0.221247  -0.6116477   0.0013910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  21  44776   0.073647   0.220247  -0.6130477   0.0014170   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  22  44777   0.073147   0.219347  -0.6144948   0.0014840   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  23  44778   0.072647   0.218447  -0.6160229   0.0015840   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  24  44779   0.072148   0.217548  -0.6176620   0.0016910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  25  44780   0.071548   0.216548  -0.6193951   0.0017770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  26  44781   0.070948   0.215648  -0.6211862   0.0018120   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  27  44782   0.070348   0.214748  -0.6229823   0.0017840   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  28  44783   0.069749   0.213749  -0.6247153   0.0016800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  29  44784   0.069149   0.212849  -0.6263314   0.0015360   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   6  30  44785   0.068549   0.211849  -0.6277815   0.0013770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7   1  44786   0.068050   0.210950   0.3709024   0.0012550   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7   2  44787   0.067450   0.209950   0.3696753   0.0012130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7   3  44788   0.066950   0.208950   0.3684492   0.0012480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7   4  44789   0.066350   0.207950   0.3671722   0.0013160   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7   5  44790   0.065951   0.206851   0.3658111   0.0014040   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7   6  44791   0.065451   0.205851   0.3643760   0.0014710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7   7  44792   0.065051   0.204851   0.3628899   0.0014970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7   8  44793   0.064651   0.203851   0.3613858   0.0014850   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7   9  44794   0.064252   0.202752   0.3599317   0.0014160   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  10  44795   0.063952   0.201752   0.3585557   0.0013230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  11  44796   0.063652   0.200852   0.3573046   0.0011860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  12  44797   0.063353   0.199853   0.3561855   0.0010360   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  13  44798   0.063053   0.198953   0.3552214   0.0008970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  14  44799   0.062653   0.198053   0.3543883   0.0007730   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  15  44800   0.062353   0.197153   0.3536653   0.0006980   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  16  44801   0.061854   0.196354   0.3529872   0.0006850   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  17  44802   0.061354   0.195654   0.3522871   0.0007350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  18  44803   0.060754   0.194954   0.3514990   0.0008500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  19  44804   0.060154   0.194354   0.3505609   0.0010320   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  20  44805   0.059355   0.193755   0.3494169   0.0012500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  21  44806   0.058555   0.193155   0.3480738   0.0014530   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  22  44807   0.057555   0.192655   0.3465307   0.0016220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  23  44808   0.056556   0.192156   0.3448506   0.0017300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  24  44809   0.055456   0.191656   0.3430865   0.0017730   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  25  44810   0.054256   0.191156   0.3413274   0.0017340   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  26  44811   0.053056   0.190756   0.3396374   0.0016480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  27  44812   0.051757   0.190257   0.3380493   0.0015310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  28  44813   0.050357   0.189757   0.3365682   0.0014360   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  29  44814   0.048857   0.189257   0.3351461   0.0013980   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  30  44815   0.047357   0.188757   0.3337350   0.0014350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   7  31  44816   0.045858   0.188258   0.3322650   0.0015160   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8   1  44817   0.044258   0.187858   0.3306819   0.0016420   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8   2  44818   0.042558   0.187358   0.3289818   0.0017480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8   3  44819   0.040959   0.186959   0.3271957   0.0018150   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8   4  44820   0.039259   0.186559   0.3253746   0.0018310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8   5  44821   0.037559   0.186159   0.3235486   0.0018020   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8   6  44822   0.035859   0.185759   0.3217815   0.0017350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8   7  44823   0.034160   0.185460   0.3200894   0.0016490   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8   8  44824   0.032460   0.185160   0.3184913   0.0015350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8   9  44825   0.030760   0.184860   0.3170073   0.0014300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  10  44826   0.029060   0.184660   0.3156152   0.0013390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  11  44827   0.027361   0.184461   0.3143121   0.0012750   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  12  44828   0.025661   0.184261   0.3130530   0.0012500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  13  44829   0.023961   0.184061   0.3118049   0.0012650   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  14  44830   0.022162   0.183962   0.3105049   0.0013570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  15  44831   0.020462   0.183862   0.3090828   0.0014930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  16  44832   0.018762   0.183762   0.3074947   0.0016580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  17  44833   0.017162   0.183662   0.3057546   0.0018190   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  18  44834   0.015463   0.183663   0.3038655   0.0019380   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  19  44835   0.013763   0.183663   0.3018905   0.0019880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  20  44836   0.012163   0.183763   0.2999194   0.0019430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  21  44837   0.010563   0.183763   0.2980443   0.0018050   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  22  44838   0.008964   0.183964   0.2963272   0.0016210   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  23  44839   0.007464   0.184064   0.2948192   0.0014160   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  24  44840   0.005964   0.184364   0.2934981   0.0012400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  25  44841   0.004465   0.184565   0.2923210   0.0011260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  26  44842   0.003065   0.184965   0.2912219   0.0010930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  27  44843   0.001665   0.185265   0.2901009   0.0011590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  28  44844   0.000265   0.185765   0.2888868   0.0012830   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  29  44845  -0.001134   0.186166   0.2875397   0.0014010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  30  44846  -0.002534   0.186666   0.2860806   0.0015100   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   8  31  44847  -0.003934   0.187266   0.2845315   0.0015800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9   1  44848  -0.005334   0.187766   0.2829375   0.0016010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9   2  44849  -0.006833   0.188267   0.2813454   0.0015770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9   3  44850  -0.008233   0.188767   0.2797853   0.0015260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9   4  44851  -0.009633   0.189267   0.2782902   0.0014620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9   5  44852  -0.011032   0.189768   0.2768742   0.0013800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9   6  44853  -0.012532   0.190168   0.2755251   0.0013080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9   7  44854  -0.013932   0.190668   0.2742400   0.0012710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9   8  44855  -0.015432   0.191168   0.2729709   0.0012630   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9   9  44856  -0.016931   0.191669   0.2716869   0.0013120   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  10  44857  -0.018531   0.192169   0.2703278   0.0014160   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  11  44858  -0.020131   0.192669   0.2688447   0.0015770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  12  44859  -0.021830   0.193170   0.2671566   0.0017890   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  13  44860  -0.023430   0.193770   0.2652476   0.0020380   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  14  44861  -0.025230   0.194270   0.2630935   0.0022750   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  15  44862  -0.026930   0.194970   0.2607284   0.0024410   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  16  44863  -0.028829   0.195571   0.2582333   0.0025220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  17  44864  -0.030629   0.196271   0.2557193   0.0025000   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  18  44865  -0.032529   0.196971   0.2532692   0.0023870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  19  44866  -0.034429   0.197671   0.2509461   0.0022480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  20  44867  -0.036428   0.198472   0.2487681   0.0021130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  21  44868  -0.038428   0.199272   0.2467020   0.0020310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  22  44869  -0.040528   0.200072   0.2446799   0.0020220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  23  44870  -0.042627   0.200973   0.2426318   0.0020770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  24  44871  -0.044827   0.201873   0.2404988   0.0021960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  25  44872  -0.047027   0.202773   0.2382307   0.0023220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  26  44873  -0.049227   0.203773   0.2358466   0.0024430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  27  44874  -0.051526   0.204774   0.2333645   0.0025130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  28  44875  -0.053726   0.205774   0.2308345   0.0025460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  29  44876  -0.056026   0.206774   0.2282874   0.0025210   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981   9  30  44877  -0.058226   0.207774   0.2257983   0.0024540   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10   1  44878  -0.060325   0.208775   0.2233912   0.0023450   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10   2  44879  -0.062525   0.209775   0.2211122   0.0022200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10   3  44880  -0.064525   0.210775   0.2189581   0.0020980   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10   4  44881  -0.066424   0.211876   0.2169090   0.0019960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10   5  44882  -0.068224   0.212876   0.2149570   0.0019290   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10   6  44883  -0.069924   0.214076   0.2130449   0.0018990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10   7  44884  -0.071524   0.215176   0.2111408   0.0019220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10   8  44885  -0.072923   0.216377   0.2091727   0.0020100   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10   9  44886  -0.074223   0.217677   0.2071107   0.0021430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  10  44887  -0.075523   0.219077   0.2048716   0.0023390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  11  44888  -0.076723   0.220477   0.2024175   0.0025590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  12  44889  -0.077922   0.222078   0.1997645   0.0027480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  13  44890  -0.078922   0.223678   0.1969584   0.0028560   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  14  44891  -0.080022   0.225378   0.1940903   0.0028530   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  15  44892  -0.081021   0.227179   0.1912802   0.0027510   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  16  44893  -0.082021   0.228979   0.1886202   0.0025680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  17  44894  -0.083021   0.230779   0.1861451   0.0023840   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  18  44895  -0.084021   0.232579   0.1838380   0.0022330   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  19  44896  -0.085120   0.234480   0.1816550   0.0021580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  20  44897  -0.086120   0.236380   0.1794949   0.0021640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  21  44898  -0.087220   0.238180   0.1773048   0.0022240   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  22  44899  -0.088320   0.240080   0.1750348   0.0023190   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  23  44900  -0.089419   0.241881   0.1726657   0.0024170   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  24  44901  -0.090619   0.243581   0.1702096   0.0024930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  25  44902  -0.091719   0.245381   0.1676935   0.0025300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  26  44903  -0.092818   0.246982   0.1651635   0.0025220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  27  44904  -0.094018   0.248682   0.1626644   0.0024690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  28  44905  -0.095118   0.250282   0.1602363   0.0023810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  29  44906  -0.096218   0.251782   0.1579193   0.0022610   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  30  44907  -0.097217   0.253283   0.1557162   0.0021440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  10  31  44908  -0.098317   0.254783   0.1536271   0.0020300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11   1  44909  -0.099317   0.256283   0.1516481   0.0019440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11   2  44910  -0.100317   0.257683   0.1497240   0.0019030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11   3  44911  -0.101316   0.259184   0.1478149   0.0019130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11   4  44912  -0.102216   0.260584   0.1458689   0.0019860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11   5  44913  -0.103116   0.262084   0.1438348   0.0021020   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11   6  44914  -0.104015   0.263485   0.1416597   0.0022640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11   7  44915  -0.104915   0.264985   0.1392857   0.0024760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11   8  44916  -0.105715   0.266485   0.1367176   0.0026760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11   9  44917  -0.106515   0.267885   0.1339585   0.0028310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  10  44918  -0.107314   0.269386   0.1310884   0.0029040   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  11  44919  -0.108014   0.270986   0.1281994   0.0028620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  12  44920  -0.108614   0.272486   0.1253863   0.0027310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  13  44921  -0.109214   0.274186   0.1227442   0.0025390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  14  44922  -0.109613   0.275787   0.1203042   0.0023400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  15  44923  -0.110013   0.277587   0.1180411   0.0021970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  16  44924  -0.110313   0.279387   0.1158810   0.0021410   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  17  44925  -0.110412   0.281288   0.1137360   0.0021510   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  18  44926  -0.110512   0.283188   0.1115749   0.0021850   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  19  44927  -0.110512   0.285188   0.1093618   0.0022380   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  20  44928  -0.110512   0.287188   0.1071038   0.0022630   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  21  44929  -0.110511   0.289189   0.1048367   0.0022630   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  22  44930  -0.110411   0.291289   0.1026026   0.0022200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  23  44931  -0.110411   0.293489   0.1004216   0.0021350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  24  44932  -0.110411   0.295689   0.0983335   0.0020260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  25  44933  -0.110410   0.297790   0.0963784   0.0019110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  26  44934  -0.110410   0.299990   0.0945144   0.0018160   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  27  44935  -0.110510   0.302190   0.0927343   0.0017360   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  28  44936  -0.110709   0.304391   0.0910253   0.0016780   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  29  44937  -0.110909   0.306491   0.0893652   0.0016580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  11  30  44938  -0.111209   0.308691   0.0876931   0.0016860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12   1  44939  -0.111509   0.310791   0.0859661   0.0017780   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12   2  44940  -0.111908   0.312892   0.0841310   0.0019100   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12   3  44941  -0.112308   0.314992   0.0821399   0.0020760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12   4  44942  -0.112708   0.317092   0.0799779   0.0022620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12   5  44943  -0.113007   0.319193   0.0776138   0.0024580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12   6  44944  -0.113307   0.321393   0.0750677   0.0026350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12   7  44945  -0.113507   0.323593   0.0723737   0.0027530   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12   8  44946  -0.113607   0.325793   0.0696036   0.0027690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12   9  44947  -0.113706   0.327994   0.0668695   0.0026930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  10  44948  -0.113806   0.330194   0.0642535   0.0025310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  11  44949  -0.113706   0.332394   0.0618164   0.0023460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  12  44950  -0.113606   0.334694   0.0595474   0.0021990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  13  44951  -0.113405   0.336895   0.0573893   0.0021330   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  14  44952  -0.113205   0.339195   0.0552522   0.0021530   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  15  44953  -0.112805   0.341395   0.0530722   0.0022340   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  16  44954  -0.112304   0.343596   0.0507881   0.0023240   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  17  44955  -0.111804   0.345796   0.0484200   0.0024070   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  18  44956  -0.111204   0.347996   0.0459990   0.0024300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  19  44957  -0.110404   0.350196   0.0435649   0.0024180   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  20  44958  -0.109603   0.352297   0.0411758   0.0023630   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  21  44959  -0.108603   0.354497   0.0388608   0.0022730   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  22  44960  -0.107603   0.356597   0.0366377   0.0021590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  23  44961  -0.106503   0.358697   0.0345467   0.0020330   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  24  44962  -0.105302   0.360798   0.0325716   0.0019190   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  25  44963  -0.104002   0.362798   0.0307005   0.0018140   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  26  44964  -0.102602   0.364898   0.0289205   0.0017520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  27  44965  -0.101101   0.366899   0.0271834   0.0017250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  28  44966  -0.099601   0.368999   0.0254454   0.0017600   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  29  44967  -0.098101   0.370999   0.0236553   0.0018460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  30  44968  -0.096501   0.372999   0.0217482   0.0019660   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1981  12  31  44969  -0.094800   0.375000   0.0197032   0.0021240   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1   1  44970  -0.093100   0.377000   0.0174851   0.0023000   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1   2  44971  -0.091300   0.378900   0.0151090   0.0024500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1   3  44972  -0.089500   0.380800   0.0125990   0.0025690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1   4  44973  -0.087599   0.382701   0.0100039   0.0026090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1   5  44974  -0.085699   0.384501   0.0074079   0.0025670   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1   6  44975  -0.083699   0.386301   0.0048848   0.0024590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1   7  44976  -0.081798   0.388102   0.0025047   0.0022990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1   8  44977  -0.079798   0.389802   0.0002927   0.0021310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1   9  44978  -0.077798   0.391402  -0.0017894   0.0020340   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  10  44979  -0.075798   0.393002  -0.0038054   0.0020230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  11  44980  -0.073797   0.394503  -0.0058605   0.0020890   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  12  44981  -0.071897   0.396003  -0.0079956   0.0021930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  13  44982  -0.069897   0.397403  -0.0102366   0.0022810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  14  44983  -0.067897   0.398803  -0.0125537   0.0023380   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  15  44984  -0.065996   0.400204  -0.0148927   0.0023400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  16  44985  -0.063996   0.401504  -0.0172048   0.0022790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  17  44986  -0.062096   0.402804  -0.0194349   0.0021760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  18  44987  -0.060295   0.404105  -0.0215359   0.0020350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  19  44988  -0.058395   0.405405  -0.0235000   0.0018910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  20  44989  -0.056595   0.406805  -0.0253210   0.0017490   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  21  44990  -0.054795   0.408205  -0.0269951   0.0016150   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  22  44991  -0.053094   0.409606  -0.0285601   0.0015130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  23  44992  -0.051494   0.411006  -0.0300452   0.0014730   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  24  44993  -0.049794   0.412406  -0.0315143   0.0014850   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  25  44994  -0.048294   0.413906  -0.0330223   0.0015500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  26  44995  -0.046693   0.415407  -0.0346314   0.0016740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  27  44996  -0.045193   0.416907  -0.0363704   0.0018310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  28  44997  -0.043793   0.418307  -0.0382935   0.0020050   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  29  44998  -0.042292   0.419808  -0.0403855   0.0021700   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  30  44999  -0.040892   0.421208  -0.0426286   0.0022890   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   1  31  45000  -0.039392   0.422608  -0.0449497   0.0023430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2   1  45001  -0.037892   0.423808  -0.0472897   0.0023240   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2   2  45002  -0.036291   0.425009  -0.0495878   0.0022510   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2   3  45003  -0.034691   0.426109  -0.0517778   0.0021260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2   4  45004  -0.032991   0.427209  -0.0538389   0.0019910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2   5  45005  -0.031191   0.428109  -0.0557749   0.0019000   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2   6  45006  -0.029290   0.428910  -0.0576650   0.0018860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2   7  45007  -0.027390   0.429710  -0.0595651   0.0019460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2   8  45008  -0.025290   0.430410  -0.0615771   0.0020650   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2   9  45009  -0.023189   0.431011  -0.0637102   0.0021990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  10  45010  -0.020989   0.431511  -0.0659652   0.0023130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  11  45011  -0.018789   0.432011  -0.0683183   0.0023700   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  12  45012  -0.016389   0.432511  -0.0706923   0.0023720   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  13  45013  -0.013988   0.433012  -0.0730324   0.0023190   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  14  45014  -0.011588   0.433512  -0.0753174   0.0022260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  15  45015  -0.009088   0.434112  -0.0774895   0.0021240   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  16  45016  -0.006488   0.434612  -0.0795536   0.0020090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  17  45017  -0.003887   0.435213  -0.0815226   0.0019110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  18  45018  -0.001287   0.435713  -0.0833967   0.0018530   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  19  45019   0.001413   0.436413  -0.0852437   0.0018390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  20  45020   0.004114   0.437014  -0.0871028   0.0018860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  21  45021   0.006814   0.437714  -0.0890338   0.0019880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  22  45022   0.009614   0.438314  -0.0910849   0.0021440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  23  45023   0.012414   0.439014  -0.0933359   0.0023520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  24  45024   0.015115   0.439715  -0.0957970   0.0025710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  25  45025   0.017915   0.440415  -0.0984740   0.0027960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  26  45026   0.020615   0.441115  -0.1013631   0.0029520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  27  45027   0.023416   0.441716  -0.1043622   0.0030440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   2  28  45028   0.026116   0.442316  -0.1074132   0.0030320   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3   1  45029   0.028816   0.442816  -0.1103923   0.0028980   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3   2  45030   0.031416   0.443316  -0.1132053   0.0026930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3   3  45031   0.034017   0.443617  -0.1157884   0.0024860   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3   4  45032   0.036617   0.443817  -0.1181794   0.0023070   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3   5  45033   0.039117   0.443817  -0.1204265   0.0021880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3   6  45034   0.041517   0.443817  -0.1225955   0.0021620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3   7  45035   0.043918   0.443618  -0.1247646   0.0022060   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3   8  45036   0.046318   0.443318  -0.1270196   0.0022960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3   9  45037   0.048818   0.442918  -0.1293647   0.0023890   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  10  45038   0.051319   0.442419  -0.1317697   0.0024250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  11  45039   0.053819   0.441819  -0.1341908   0.0024150   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  12  45040   0.056319   0.441119  -0.1365778   0.0023790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  13  45041   0.058919   0.440419  -0.1389319   0.0023100   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  14  45042   0.061520   0.439620  -0.1411869   0.0022090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  15  45043   0.064220   0.438820  -0.1433460   0.0020960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  16  45044   0.066820   0.438120  -0.1453930   0.0019920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  17  45045   0.069520   0.437320  -0.1473511   0.0019160   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  18  45046   0.072221   0.436521  -0.1492391   0.0018620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  19  45047   0.074921   0.435821  -0.1510922   0.0018600   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  20  45048   0.077621   0.435121  -0.1529882   0.0019330   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  21  45049   0.080222   0.434422  -0.1549763   0.0020520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  22  45050   0.082822   0.433922  -0.1571004   0.0022220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  23  45051   0.085322   0.433322  -0.1594224   0.0024260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  24  45052   0.087822   0.432922  -0.1619545   0.0026370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  25  45053   0.090223   0.432423  -0.1646855   0.0028250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  26  45054   0.092723   0.432023  -0.1675696   0.0029290   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  27  45055   0.095123   0.431723  -0.1705206   0.0029450   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  28  45056   0.097523   0.431323  -0.1734397   0.0028690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  29  45057   0.099824   0.431024  -0.1762457   0.0027400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  30  45058   0.102124   0.430624  -0.1789047   0.0025870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   3  31  45059   0.104424   0.430224  -0.1814228   0.0024590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4   1  45060   0.106725   0.429825  -0.1838558   0.0024100   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4   2  45061   0.108925   0.429325  -0.1862709   0.0024340   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4   3  45062   0.111025   0.428825  -0.1887589   0.0025330   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4   4  45063   0.113225   0.428225  -0.1913630   0.0026780   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4   5  45064   0.115326   0.427626  -0.1941180   0.0028240   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4   6  45065   0.117326   0.426926  -0.1970091   0.0029400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4   7  45066   0.119326   0.426126  -0.1999821   0.0030020   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4   8  45067   0.121326   0.425226  -0.2029822   0.0029680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4   9  45068   0.123227   0.424327  -0.2059062   0.0028640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  10  45069   0.125127   0.423327  -0.2086953   0.0027170   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  11  45070   0.126927   0.422227  -0.2113233   0.0025370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  12  45071   0.128728   0.421028  -0.2137784   0.0023650   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  13  45072   0.130528   0.419828  -0.2160694   0.0022130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  14  45073   0.132328   0.418628  -0.2182265   0.0021080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  15  45074   0.134028   0.417328  -0.2203035   0.0020640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  16  45075   0.135829   0.416029  -0.2223746   0.0020760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  17  45076   0.137629   0.414729  -0.2244726   0.0021430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  18  45077   0.139429   0.413329  -0.2266767   0.0022710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  19  45078   0.141229   0.412029  -0.2290307   0.0024430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  20  45079   0.143030   0.410630  -0.2315598   0.0026480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  21  45080   0.144830   0.409230  -0.2343148   0.0028470   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  22  45081   0.146630   0.407730  -0.2372478   0.0030050   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  23  45082   0.148431   0.406231  -0.2402959   0.0030930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  24  45083   0.150231   0.404731  -0.2433869   0.0030730   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  25  45084   0.152031   0.403231  -0.2464010   0.0029520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  26  45085   0.153831   0.401631  -0.2492860   0.0027960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  27  45086   0.155532   0.400032  -0.2520091   0.0026670   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  28  45087   0.157232   0.398332  -0.2546311   0.0025820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  29  45088   0.158932   0.396632  -0.2572022   0.0025660   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   4  30  45089   0.160632   0.394932  -0.2597902   0.0026100   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5   1  45090   0.162233   0.393133  -0.2624513   0.0026980   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5   2  45091   0.163933   0.391433  -0.2652033   0.0028030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5   3  45092   0.165533   0.389533  -0.2680524   0.0028800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5   4  45093   0.167234   0.387634  -0.2709484   0.0029020   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5   5  45094   0.168834   0.385734  -0.2738374   0.0028570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5   6  45095   0.170534   0.383734  -0.2766425   0.0027430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5   7  45096   0.172134   0.381734  -0.2793075   0.0025820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5   8  45097   0.173835   0.379735  -0.2817966   0.0023820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5   9  45098   0.175435   0.377535  -0.2840786   0.0021810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  10  45099   0.177035   0.375435  -0.2861527   0.0019820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  11  45100   0.178735   0.373235  -0.2880517   0.0018220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  12  45101   0.180336   0.371036  -0.2898107   0.0017070   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  13  45102   0.181936   0.368736  -0.2914918   0.0016660   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  14  45103   0.183636   0.366436  -0.2931518   0.0016820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  15  45104   0.185237   0.364137  -0.2948639   0.0017580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  16  45105   0.186837   0.361737  -0.2966729   0.0018870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  17  45106   0.188337   0.359337  -0.2986480   0.0020760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  18  45107   0.189937   0.356937  -0.3008280   0.0022940   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  19  45108   0.191438   0.354438  -0.3032390   0.0025110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  20  45109   0.192938   0.352038  -0.3058191   0.0026450   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  21  45110   0.194438   0.349538  -0.3084971   0.0026830   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  22  45111   0.195839   0.347039  -0.3111612   0.0026260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  23  45112   0.197239   0.344539  -0.3137232   0.0024920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  24  45113   0.198739   0.342039  -0.3161293   0.0023210   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  25  45114   0.200039   0.339439  -0.3183813   0.0021840   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  26  45115   0.201440   0.336940  -0.3205243   0.0021230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  27  45116   0.202840   0.334440  -0.3226574   0.0021460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  28  45117   0.204240   0.331840  -0.3248504   0.0022460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  29  45118   0.205540   0.329340  -0.3271475   0.0023490   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  30  45119   0.206941   0.326741  -0.3295425   0.0024260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   5  31  45120   0.208241   0.324141  -0.3319845   0.0024480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6   1  45121   0.209641   0.321541  -0.3344306   0.0024250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6   2  45122   0.211042   0.318842  -0.3368176   0.0023370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6   3  45123   0.212342   0.316142  -0.3390907   0.0022140   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6   4  45124   0.213742   0.313342  -0.3412347   0.0020700   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6   5  45125   0.215142   0.310642  -0.3432258   0.0019130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6   6  45126   0.216643   0.307743  -0.3450618   0.0017700   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6   7  45127   0.218043   0.304943  -0.3467738   0.0016510   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6   8  45128   0.219343   0.302043  -0.3483779   0.0015710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6   9  45129   0.220743   0.299143  -0.3499249   0.0015420   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  10  45130   0.222044   0.296244  -0.3514710   0.0015590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  11  45131   0.223244   0.293344  -0.3530600   0.0016270   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  12  45132   0.224344   0.290444  -0.3547390   0.0017370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  13  45133   0.225345   0.287545  -0.3565431   0.0018760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  14  45134   0.226145   0.284645  -0.3584941   0.0020260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  15  45135   0.226945   0.281745  -0.3605931   0.0021690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  16  45136   0.227545   0.278945  -0.3628302   0.0022730   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  17  45137   0.228046   0.276046  -0.3651272   0.0023080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  18  45138   0.228346   0.273246  -0.3674143   0.0022500   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  19  45139   0.228646   0.270546  -0.3696083   0.0021060   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  20  45140   0.228846   0.267746  -0.3716193   0.0019120   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  21  45141   0.228847   0.265047  -0.3734254   0.0017200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  22  45142   0.228847   0.262447  -0.3750824   0.0016080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  23  45143   0.228747   0.259747  -0.3766745   0.0015840   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  24  45144   0.228448   0.257148  -0.3782875   0.0016450   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  25  45145   0.228248   0.254548  -0.3799785   0.0017490   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  26  45146   0.227948   0.251948  -0.3817836   0.0018450   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  27  45147   0.227548   0.249348  -0.3836516   0.0018920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  28  45148   0.227249   0.246649  -0.3855456   0.0018740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  29  45149   0.226849   0.243949  -0.3873897   0.0017950   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   6  30  45150   0.226449   0.241249  -0.3891197   0.0016670   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7   1  45151   0.225949   0.238549   0.6092862   0.0015200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7   2  45152   0.225550   0.235850   0.6078552   0.0013590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7   3  45153   0.225050   0.233050   0.6065772   0.0012130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7   4  45154   0.224450   0.230250   0.6054231   0.0010870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7   5  45155   0.223951   0.227451   0.6043801   0.0010070   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7   6  45156   0.223351   0.224651   0.6033951   0.0009730   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7   7  45157   0.222851   0.221751   0.6024070   0.0010040   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7   8  45158   0.222151   0.218951   0.6013590   0.0010980   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7   9  45159   0.221552   0.216052   0.6002040   0.0012270   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  10  45160   0.220852   0.213152   0.5988939   0.0013950   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  11  45161   0.220152   0.210252   0.5974219   0.0015620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  12  45162   0.219452   0.207352   0.5957739   0.0017300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  13  45163   0.218653   0.204553   0.5939718   0.0018560   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  14  45164   0.217753   0.201753   0.5920888   0.0019200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  15  45165   0.216853   0.198953   0.5901657   0.0019020   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  16  45166   0.215854   0.196154   0.5882997   0.0018090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  17  45167   0.214854   0.193354   0.5865787   0.0016370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  18  45168   0.213754   0.190654   0.5850306   0.0014520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  19  45169   0.212554   0.187954   0.5836596   0.0012990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  20  45170   0.211355   0.185355   0.5824016   0.0012350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  21  45171   0.210155   0.182655   0.5811485   0.0012780   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  22  45172   0.208855   0.180055   0.5798135   0.0013990   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  23  45173   0.207455   0.177555   0.5783565   0.0015230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  24  45174   0.206056   0.174956   0.5767804   0.0016280   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  25  45175   0.204656   0.172456   0.5751354   0.0016490   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  26  45176   0.203256   0.169956   0.5735084   0.0016030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  27  45177   0.201957   0.167457   0.5719503   0.0014940   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  28  45178   0.200557   0.164957   0.5705233   0.0013570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  29  45179   0.199157   0.162557   0.5692423   0.0012140   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  30  45180   0.197857   0.160057   0.5681022   0.0010760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   7  31  45181   0.196558   0.157658   0.5670832   0.0009590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8   1  45182   0.195258   0.155258   0.5661832   0.0008680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8   2  45183   0.193958   0.152958   0.5653301   0.0008330   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8   3  45184   0.192658   0.150558   0.5644991   0.0008510   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8   4  45185   0.191459   0.148259   0.5636211   0.0009130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8   5  45186   0.190259   0.145859   0.5626571   0.0010330   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8   6  45187   0.188959   0.143559   0.5615440   0.0011880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8   7  45188   0.187560   0.141260   0.5602760   0.0013560   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8   8  45189   0.186160   0.138860   0.5588250   0.0015230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8   9  45190   0.184760   0.136560   0.5572429   0.0016540   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  10  45191   0.183160   0.134260   0.5555469   0.0017310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  11  45192   0.181561   0.131961   0.5538029   0.0017420   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  12  45193   0.179861   0.129661   0.5520848   0.0016870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  13  45194   0.178061   0.127461   0.5504358   0.0015920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  14  45195   0.176062   0.125162   0.5488978   0.0014760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  15  45196   0.174062   0.122962   0.5474747   0.0013960   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  16  45197   0.171862   0.120762   0.5460817   0.0013850   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  17  45198   0.169662   0.118562   0.5446717   0.0014690   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  18  45199   0.167363   0.116463   0.5431137   0.0016490   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  19  45200   0.164963   0.114363   0.5413606   0.0018610   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  20  45201   0.162563   0.112363   0.5394086   0.0020470   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  21  45202   0.160063   0.110363   0.5372786   0.0021790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  22  45203   0.157464   0.108464   0.5350695   0.0022230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  23  45204   0.154864   0.106564   0.5328695   0.0021740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  24  45205   0.152264   0.104764   0.5307505   0.0020570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  25  45206   0.149565   0.103065   0.5287544   0.0019130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  26  45207   0.146865   0.101365   0.5269144   0.0017780   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  27  45208   0.144065   0.099765   0.5251924   0.0016530   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  28  45209   0.141365   0.098165   0.5235974   0.0015640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  29  45210   0.138466   0.096666   0.5220473   0.0015340   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  30  45211   0.135666   0.095166   0.5205013   0.0015680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   8  31  45212   0.132766   0.093766   0.5188923   0.0016570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9   1  45213   0.129766   0.092366   0.5171682   0.0018080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9   2  45214   0.126867   0.090967   0.5152742   0.0020090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9   3  45215   0.123767   0.089667   0.5131522   0.0022340   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9   4  45216   0.120767   0.088367   0.5107952   0.0024550   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9   5  45217   0.117668   0.087068   0.5082631   0.0026230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9   6  45218   0.114568   0.085868   0.5055811   0.0027200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9   7  45219   0.111368   0.084568   0.5028391   0.0027420   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9   8  45220   0.108168   0.083368   0.5001321   0.0026810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9   9  45221   0.104969   0.082169   0.4975060   0.0025260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  10  45222   0.101769   0.081069   0.4950760   0.0023220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  11  45223   0.098469   0.079869   0.4928540   0.0021300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  12  45224   0.095169   0.078769   0.4908070   0.0019870   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  13  45225   0.091870   0.077670   0.4888509   0.0019400   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  14  45226   0.088570   0.076570   0.4868859   0.0020030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  15  45227   0.085170   0.075570   0.4848339   0.0021370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  16  45228   0.081771   0.074571   0.4826068   0.0023240   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  17  45229   0.078471   0.073571   0.4801988   0.0024810   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  18  45230   0.074971   0.072671   0.4776718   0.0025480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  19  45231   0.071571   0.071871   0.4751238   0.0025330   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  20  45232   0.068172   0.071172   0.4726217   0.0024410   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  21  45233   0.064672   0.070472   0.4702487   0.0023010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  22  45234   0.061172   0.069872   0.4680247   0.0021350   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  23  45235   0.057672   0.069372   0.4659637   0.0019900   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  24  45236   0.054173   0.068973   0.4640326   0.0018790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  25  45237   0.050573   0.068573   0.4621996   0.0018060   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  26  45238   0.047073   0.068373   0.4604006   0.0018010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  27  45239   0.043474   0.068274   0.4585796   0.0018430   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  28  45240   0.039874   0.068274   0.4566955   0.0019410   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  29  45241   0.036374   0.068274   0.4546815   0.0020930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982   9  30  45242   0.032774   0.068374   0.4524985   0.0022670   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10   1  45243   0.029175   0.068575   0.4501445   0.0024520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10   2  45244   0.025575   0.068775   0.4476105   0.0026180   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10   3  45245   0.021875   0.069075   0.4449244   0.0027310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10   4  45246   0.018275   0.069475   0.4421654   0.0027640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10   5  45247   0.014676   0.069876   0.4394264   0.0027070   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10   6  45248   0.011076   0.070376   0.4367864   0.0025670   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10   7  45249   0.007476   0.070876   0.4343163   0.0023820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10   8  45250   0.003877   0.071377   0.4320153   0.0022130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10   9  45251   0.000277   0.071977   0.4298693   0.0020910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  10  45252  -0.003223   0.072577   0.4278053   0.0020540   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  11  45253  -0.006823   0.073177   0.4257223   0.0021060   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  12  45254  -0.010322   0.073778   0.4235612   0.0022260   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  13  45255  -0.013722   0.074478   0.4212602   0.0023770   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  14  45256  -0.017222   0.075078   0.4188222   0.0025000   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  15  45257  -0.020622   0.075778   0.4162802   0.0025740   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  16  45258  -0.023921   0.076479   0.4137041   0.0025750   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  17  45259  -0.027221   0.077079   0.4111691   0.0024920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  18  45260  -0.030521   0.077779   0.4087511   0.0023460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  19  45261  -0.033720   0.078480   0.4064881   0.0021660   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  20  45262  -0.036920   0.079180   0.4044101   0.0019930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  21  45263  -0.040020   0.079880   0.4024940   0.0018630   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  22  45264  -0.043120   0.080680   0.4006790   0.0017760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  23  45265  -0.046219   0.081381   0.3989230   0.0017450   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  24  45266  -0.049319   0.082181   0.3971590   0.0017850   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  25  45267  -0.052319   0.082981   0.3953340   0.0018830   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  26  45268  -0.055319   0.083781   0.3933879   0.0020200   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  27  45269  -0.058318   0.084682   0.3912819   0.0021830   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  28  45270  -0.061218   0.085582   0.3890029   0.0023580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  29  45271  -0.064218   0.086482   0.3865669   0.0025110   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  30  45272  -0.067217   0.087583   0.3839829   0.0026420   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  10  31  45273  -0.070217   0.088683   0.3812958   0.0027160   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11   1  45274  -0.073317   0.089983   0.3785808   0.0026880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11   2  45275  -0.076317   0.091283   0.3759418   0.0025760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11   3  45276  -0.079416   0.092684   0.3734498   0.0024220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11   4  45277  -0.082516   0.094084   0.3711118   0.0022570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11   5  45278  -0.085716   0.095684   0.3689187   0.0021490   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11   6  45279  -0.088815   0.097385   0.3667837   0.0021280   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11   7  45280  -0.092015   0.099085   0.3646217   0.0022010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11   8  45281  -0.095115   0.100885   0.3623557   0.0023390   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11   9  45282  -0.098215   0.102785   0.3599317   0.0025130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  10  45283  -0.101314   0.104686   0.3573327   0.0026800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  11  45284  -0.104314   0.106686   0.3545966   0.0027920   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  12  45285  -0.107214   0.108786   0.3517816   0.0028240   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  13  45286  -0.110014   0.110886   0.3489726   0.0027910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  14  45287  -0.112813   0.113087   0.3462226   0.0026820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  15  45288  -0.115613   0.115387   0.3436156   0.0025300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  16  45289  -0.118313   0.117587   0.3411785   0.0023620   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  17  45290  -0.121012   0.119888   0.3388955   0.0022060   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  18  45291  -0.123712   0.122188   0.3367545   0.0020830   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  19  45292  -0.126312   0.124488   0.3347235   0.0020090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  20  45293  -0.129012   0.126888   0.3327175   0.0020040   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  21  45294  -0.131711   0.129189   0.3306955   0.0020480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  22  45295  -0.134411   0.131489   0.3286035   0.0021450   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  23  45296  -0.137111   0.133789   0.3263914   0.0022820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  24  45297  -0.139811   0.136089   0.3240304   0.0024440   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  25  45298  -0.142510   0.138390   0.3215004   0.0026130   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  26  45299  -0.145210   0.140690   0.3188184   0.0027580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  27  45300  -0.147910   0.143090   0.3159994   0.0028710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  28  45301  -0.150609   0.145391   0.3130994   0.0029100   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  29  45302  -0.153209   0.147791   0.3102203   0.0028460   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  11  30  45303  -0.155909   0.150191   0.3074373   0.0027080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12   1  45304  -0.158509   0.152691   0.3048183   0.0025270   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12   2  45305  -0.161008   0.155192   0.3023773   0.0023640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12   3  45306  -0.163508   0.157792   0.3000533   0.0022760   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12   4  45307  -0.166008   0.160592   0.2977793   0.0023000   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12   5  45308  -0.168308   0.163492   0.2954343   0.0024030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12   6  45309  -0.170607   0.166593   0.2929492   0.0025640   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12   7  45310  -0.172807   0.169793   0.2903172   0.0027120   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12   8  45311  -0.174907   0.173193   0.2875402   0.0028240   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12   9  45312  -0.177006   0.176694   0.2846932   0.0028570   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  10  45313  -0.179006   0.180194   0.2818502   0.0028270   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  11  45314  -0.180906   0.183894   0.2790682   0.0027270   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  12  45315  -0.182806   0.187694   0.2764102   0.0025940   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  13  45316  -0.184505   0.191595   0.2738961   0.0024340   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  14  45317  -0.186205   0.195595   0.2715421   0.0022880   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  15  45318  -0.187805   0.199595   0.2693201   0.0021590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  16  45319  -0.189305   0.203595   0.2672101   0.0020710   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  17  45320  -0.190804   0.207596   0.2651621   0.0020370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  18  45321  -0.192104   0.211696   0.2631171   0.0020600   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  19  45322  -0.193304   0.215696   0.2610111   0.0021380   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  20  45323  -0.194503   0.219697   0.2588171   0.0022590   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  21  45324  -0.195603   0.223597   0.2564851   0.0024050   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  22  45325  -0.196503   0.227397   0.2539940   0.0025610   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  23  45326  -0.197403   0.230997   0.2513570   0.0027080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  24  45327  -0.198202   0.234598   0.2485770   0.0028380   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  25  45328  -0.198902   0.237998   0.2457090   0.0029060   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  26  45329  -0.199502   0.241398   0.2428000   0.0029010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  27  45330  -0.200102   0.244498   0.2399350   0.0028140   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  28  45331  -0.200701   0.247599   0.2371910   0.0026660   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  29  45332  -0.201301   0.250599   0.2346080   0.0025030   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  30  45333  -0.201801   0.253399   0.2321700   0.0023890   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1982  12  31  45334  -0.202300   0.256100   0.2298089   0.0023600   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1   1  45335  -0.202900   0.258900   0.2274139   0.0024463   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1   2  45336  -0.203600   0.261700   0.2248920   0.0026048   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1   3  45337  -0.204300   0.264600   0.2221998   0.0027665   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1   4  45338  -0.204999   0.267501   0.2193742   0.0028935   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1   5  45339  -0.205799   0.270501   0.2164497   0.0029306   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1   6  45340  -0.206699   0.273501   0.2135318   0.0028918   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1   7  45341  -0.207499   0.276701   0.2106995   0.0027831   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1   8  45342  -0.208298   0.279902   0.2079900   0.0026310   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1   9  45343  -0.208998   0.283102   0.2054331   0.0024722   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  10  45344  -0.209598   0.286502   0.2030334   0.0023300   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  11  45345  -0.210097   0.289903   0.2007747   0.0022029   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  12  45346  -0.210597   0.293403   0.1986043   0.0021456   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  13  45347  -0.210897   0.296903   0.1964667   0.0021487   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  14  45348  -0.210997   0.300603   0.1942883   0.0022175   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  15  45349  -0.210996   0.304304   0.1920135   0.0023408   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  16  45350  -0.210896   0.308004   0.1895914   0.0025097   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  17  45351  -0.210696   0.311804   0.1869842   0.0027080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  18  45352  -0.210296   0.315604   0.1841722   0.0029159   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  19  45353  -0.209695   0.319405   0.1811458   0.0031036   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  20  45354  -0.209095   0.323305   0.1779643   0.0032536   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  21  45355  -0.208295   0.327205   0.1746630   0.0033404   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  22  45356  -0.207494   0.331106   0.1712927   0.0033797   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  23  45357  -0.206594   0.334906   0.1679259   0.0033529   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  24  45358  -0.205594   0.338706   0.1646172   0.0032463   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  25  45359  -0.204594   0.342506   0.1614335   0.0031099   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  26  45360  -0.203493   0.346207   0.1583904   0.0029847   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  27  45361  -0.202393   0.349907   0.1554486   0.0029252   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  28  45362  -0.201193   0.353607   0.1525037   0.0029729   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  29  45363  -0.199893   0.357307   0.1494700   0.0031174   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  30  45364  -0.198692   0.360908   0.1462532   0.0033080   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   1  31  45365  -0.197392   0.364508   0.1428617   0.0034757   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2   1  45366  -0.195992   0.368108   0.1393290   0.0035632   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2   2  45367  -0.194691   0.371609   0.1357705   0.0035361   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2   3  45368  -0.193491   0.375109   0.1322885   0.0034244   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2   4  45369  -0.192011   0.378489   0.1289596   0.0032312   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2   5  45370  -0.190281   0.381799   0.1258336   0.0030265   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2   6  45371  -0.188530   0.385050   0.1229055   0.0028417   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2   7  45372  -0.187210   0.388300   0.1201407   0.0027138   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2   8  45373  -0.186400   0.391610   0.1175005   0.0025797   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2   9  45374  -0.185839   0.394781   0.1149700   0.0024856   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  10  45375  -0.185199   0.397891   0.1125113   0.0024393   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  11  45376  -0.184289   0.401061   0.1100726   0.0024479   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  12  45377  -0.183029   0.404401   0.1075981   0.0025093   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  13  45378  -0.181618   0.407942   0.1050423   0.0026086   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  14  45379  -0.180218   0.411662   0.1023750   0.0027277   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  15  45380  -0.178908   0.415442   0.0995907   0.0028415   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  16  45381  -0.177608   0.419162   0.0967034   0.0029353   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  17  45382  -0.176317   0.422683   0.0937352   0.0030028   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  18  45383  -0.175067   0.426003   0.0907174   0.0030316   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  19  45384  -0.173927   0.429183   0.0876923   0.0030148   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  20  45385  -0.172916   0.432374   0.0847063   0.0029469   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  21  45386  -0.171886   0.435494   0.0818097   0.0028472   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  22  45387  -0.170716   0.438474   0.0790093   0.0027589   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  23  45388  -0.169096   0.441194   0.0762733   0.0027231   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  24  45389  -0.166965   0.443665   0.0735310   0.0027793   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  25  45390  -0.164705   0.446165   0.0706779   0.0029386   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  26  45391  -0.162465   0.449105   0.0676288   0.0031680   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  27  45392  -0.160365   0.452315   0.0643376   0.0034109   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   2  28  45393  -0.158474   0.455496   0.0608254   0.0035992   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3   1  45394  -0.156974   0.458516   0.0571754   0.0036714   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3   2  45395  -0.155894   0.461536   0.0535217   0.0036007   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3   3  45396  -0.155253   0.464737   0.0500042   0.0034090   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3   4  45397  -0.154953   0.468177   0.0467206   0.0031565   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3   5  45398  -0.154413   0.471767   0.0436929   0.0029006   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3   6  45399  -0.153143   0.475227   0.0409113   0.0026697   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3   7  45400  -0.150992   0.478398   0.0383385   0.0024904   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3   8  45401  -0.148142   0.481308   0.0359107   0.0023821   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3   9  45402  -0.144642   0.483888   0.0335549   0.0023546   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  10  45403  -0.141102   0.486308   0.0311825   0.0024068   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  11  45404  -0.137931   0.488659   0.0287226   0.0025209   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  12  45405  -0.135201   0.491139   0.0261271   0.0026786   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  13  45406  -0.132881   0.493769   0.0233586   0.0028554   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  14  45407  -0.130630   0.496500   0.0204153   0.0030244   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  15  45408  -0.128350   0.499230   0.0173195   0.0031627   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  16  45409  -0.125910   0.501930   0.0141076   0.0032470   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  17  45410  -0.123120   0.504490   0.0108470   0.0032622   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  18  45411  -0.120009   0.506961   0.0076067   0.0031972   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  19  45412  -0.116689   0.509381   0.0044712   0.0030711   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  20  45413  -0.113149   0.511721   0.0014743   0.0029183   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  21  45414  -0.109469   0.514031  -0.0013681   0.0027737   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  22  45415  -0.105658   0.516402  -0.0040875   0.0026802   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  23  45416  -0.101798   0.518912  -0.0067561   0.0026729   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  24  45417  -0.097968   0.521572  -0.0094672   0.0027641   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  25  45418  -0.094207   0.524353  -0.0123155   0.0029438   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  26  45419  -0.090457   0.527233  -0.0153706   0.0031681   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  27  45420  -0.086567   0.530053  -0.0186451   0.0033697   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  28  45421  -0.082337   0.532673  -0.0220837   0.0034975   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  29  45422  -0.077866   0.534994  -0.0256019   0.0035220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  30  45423  -0.073246   0.536874  -0.0290900   0.0034385   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   3  31  45424  -0.068696   0.538134  -0.0324519   0.0032737   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4   1  45425  -0.064226   0.539034  -0.0356268   0.0030732   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4   2  45426  -0.059975   0.540355  -0.0385999   0.0028764   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4   3  45427  -0.055945   0.542105  -0.0413914   0.0027088   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4   4  45428  -0.052045   0.544015  -0.0440363   0.0025902   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4   5  45429  -0.048214   0.546036  -0.0465923   0.0025317   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4   6  45430  -0.044434   0.548066  -0.0491202   0.0025306   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4   7  45431  -0.040674   0.549966  -0.0516738   0.0025784   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4   8  45432  -0.036764   0.551656  -0.0542924   0.0026533   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4   9  45433  -0.032673   0.552987  -0.0569893   0.0027479   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  10  45434  -0.028333   0.554047  -0.0597917   0.0028638   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  11  45435  -0.023623   0.554877  -0.0627125   0.0029743   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  12  45436  -0.018503   0.555547  -0.0657270   0.0030608   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  13  45437  -0.013272   0.556238  -0.0688113   0.0031033   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  14  45438  -0.008162   0.557018  -0.0719069   0.0030764   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  15  45439  -0.003242   0.557868  -0.0749399   0.0029779   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  16  45440   0.001369   0.558809  -0.0778466   0.0028367   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  17  45441   0.005649   0.559769  -0.0806106   0.0026962   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  18  45442   0.009589   0.560539  -0.0832528   0.0025837   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  19  45443   0.013229   0.561069  -0.0858050   0.0025208   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  20  45444   0.016670   0.561290  -0.0883266   0.0025315   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  21  45445   0.020150   0.561220  -0.0908989   0.0026280   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  22  45446   0.023750   0.560910  -0.0936029   0.0027829   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  23  45447   0.027640   0.560570  -0.0964682   0.0029463   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  24  45448   0.031801   0.560291  -0.0994786   0.0030672   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  25  45449   0.036011   0.559991  -0.1025721   0.0031065   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  26  45450   0.040231   0.559661  -0.1056543   0.0030512   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  27  45451   0.044362   0.559392  -0.1086421   0.0029082   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  28  45452   0.048262   0.559182  -0.1114512   0.0026951   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  29  45453   0.052082   0.558962  -0.1140275   0.0024445   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   4  30  45454   0.055932   0.558792  -0.1163480   0.0022149   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5   1  45455   0.059723   0.558613  -0.1184737   0.0020511   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5   2  45456   0.063483   0.558413  -0.1204711   0.0019628   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5   3  45457   0.067173   0.558073  -0.1224207   0.0019583   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5   4  45458   0.070714   0.557554  -0.1244086   0.0020103   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5   5  45459   0.074124   0.556904  -0.1264583   0.0020884   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5   6  45460   0.077494   0.556104  -0.1285981   0.0022016   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5   7  45461   0.080834   0.555144  -0.1308660   0.0023403   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5   8  45462   0.084365   0.554225  -0.1332768   0.0024890   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5   9  45463   0.088285   0.553445  -0.1358366   0.0026293   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  10  45464   0.092535   0.552685  -0.1385196   0.0027322   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  11  45465   0.097075   0.551955  -0.1412763   0.0027786   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  12  45466   0.101556   0.551046  -0.1440478   0.0027480   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  13  45467   0.105996   0.549976  -0.1467500   0.0026396   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  14  45468   0.110396   0.548896  -0.1493171   0.0024932   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  15  45469   0.114747   0.547907  -0.1517448   0.0023597   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  16  45470   0.119037   0.546907  -0.1540603   0.0022797   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  17  45471   0.123267   0.545927  -0.1563364   0.0022734   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  18  45472   0.127387   0.545037  -0.1586395   0.0023433   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  19  45473   0.131498   0.544218  -0.1610444   0.0024749   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  20  45474   0.135688   0.543378  -0.1635937   0.0026168   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  21  45475   0.140008   0.542298  -0.1662661   0.0027254   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  22  45476   0.144378   0.540928  -0.1690196   0.0027742   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  23  45477   0.148809   0.539329  -0.1717842   0.0027462   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  24  45478   0.153249   0.537449  -0.1744822   0.0026483   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  25  45479   0.157549   0.535199  -0.1770601   0.0024834   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  26  45480   0.161710   0.532770  -0.1794382   0.0022663   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  27  45481   0.165730   0.530200  -0.1815952   0.0020547   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  28  45482   0.169640   0.527600  -0.1835600   0.0018881   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  29  45483   0.173250   0.525260  -0.1853901   0.0017825   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  30  45484   0.176631   0.523041  -0.1871457   0.0017367   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   5  31  45485   0.179901   0.520811  -0.1888850   0.0017562   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6   1  45486   0.183151   0.518481  -0.1906756   0.0018391   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6   2  45487   0.186571   0.515911  -0.1925776   0.0019650   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6   3  45488   0.189962   0.513212  -0.1946124   0.0021005   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6   4  45489   0.193262   0.510282  -0.1967801   0.0022276   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6   5  45490   0.196442   0.507142  -0.1990622   0.0023382   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6   6  45491   0.199323   0.503963  -0.2014437   0.0024212   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6   7  45492   0.201803   0.500843  -0.2038866   0.0024535   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6   8  45493   0.203753   0.497873  -0.2063268   0.0024205   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6   9  45494   0.205573   0.494933  -0.2087029   0.0023220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  10  45495   0.207534   0.491944  -0.2109519   0.0021748   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  11  45496   0.209904   0.488734  -0.2130523   0.0020225   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  12  45497   0.212724   0.485454  -0.2150155   0.0019149   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  13  45498   0.215994   0.482224  -0.2169154   0.0019022   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  14  45499   0.219655   0.479175  -0.2188550   0.0019873   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  15  45500   0.223475   0.476435  -0.2209165   0.0021373   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  16  45501   0.227245   0.473995  -0.2231365   0.0023014   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  17  45502   0.230716   0.471776  -0.2255070   0.0024257   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  18  45503   0.233946   0.469556  -0.2279622   0.0024718   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  19  45504   0.236956   0.467116  -0.2304195   0.0024277   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  20  45505   0.239676   0.464156  -0.2327899   0.0023014   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  21  45506   0.242327   0.460927  -0.2350016   0.0021152   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  22  45507   0.245017   0.457487  -0.2370091   0.0018954   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  23  45508   0.247827   0.454067  -0.2387940   0.0016741   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  24  45509   0.250617   0.450737  -0.2403662   0.0014800   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  25  45510   0.253158   0.447708  -0.2417704   0.0013387   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  26  45511   0.255388   0.444878  -0.2430647   0.0012585   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  27  45512   0.257458   0.442008  -0.2443083   0.0012370   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  28  45513   0.259469   0.438959  -0.2455579   0.0012679   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  29  45514   0.261489   0.435499  -0.2468588   0.0013250   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   6  30  45515   0.263519   0.431689  -0.2482162   0.0013972   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7   1  45516   0.265649   0.427599   0.7503454   0.0015088   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7   2  45517   0.268170   0.423320   0.7487712   0.0016268   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7   3  45518   0.270870   0.418880   0.7471018   0.0017049   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7   4  45519   0.273660   0.414320   0.7453772   0.0017328   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7   5  45520   0.276420   0.409700   0.7436557   0.0016983   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7   6  45521   0.279041   0.405131   0.7420043   0.0016014   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7   7  45522   0.281201   0.400701   0.7404733   0.0014495   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7   8  45523   0.283151   0.396391   0.7391148   0.0012672   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7   9  45524   0.284942   0.392272   0.7379310   0.0011089   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  10  45525   0.286612   0.388322   0.7368699   0.0010230   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  11  45526   0.288122   0.384632   0.7358474   0.0010512   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  12  45527   0.289592   0.381072   0.7347332   0.0011916   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  13  45528   0.291043   0.377643   0.7334473   0.0013944   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  14  45529   0.292673   0.374213   0.7319515   0.0015948   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  15  45530   0.294493   0.370693   0.7302855   0.0017361   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  16  45531   0.296613   0.366993   0.7285160   0.0017935   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  17  45532   0.299034   0.363084   0.7267334   0.0017511   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  18  45533   0.301554   0.359084   0.7250372   0.0016297   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  19  45534   0.304054   0.355034   0.7234833   0.0014820   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  20  45535   0.306465   0.350995   0.7220719   0.0013290   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  21  45536   0.308595   0.347145   0.7208153   0.0011842   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  22  45537   0.310385   0.343535   0.7196876   0.0010643   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  23  45538   0.311875   0.340065   0.7186684   0.0009912   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  24  45539   0.313186   0.336686   0.7176849   0.0009849   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  25  45540   0.314306   0.333246   0.7166795   0.0010368   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  26  45541   0.315306   0.329636   0.7155956   0.0011406   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  27  45542   0.316267   0.325927   0.7143883   0.0012752   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  28  45543   0.317297   0.322167   0.7130414   0.0014162   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  29  45544   0.318567   0.318377   0.7115604   0.0015520   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  30  45545   0.319827   0.314447   0.7099479   0.0016728   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   7  31  45546   0.320758   0.310288   0.7082291   0.0017607   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8   1  45547   0.321328   0.305978   0.7064435   0.0018026   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8   2  45548   0.321758   0.301518   0.7046435   0.0017910   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8   3  45549   0.322178   0.296928   0.7028792   0.0017217   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8   4  45550   0.322719   0.292279   0.7012119   0.0015979   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8   5  45551   0.323309   0.287649   0.6996820   0.0014628   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8   6  45552   0.323839   0.282949   0.6982671   0.0013792   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8   7  45553   0.324180   0.278100   0.6968878   0.0013961   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8   8  45554   0.324340   0.273330   0.6954366   0.0015274   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8   9  45555   0.324420   0.268750   0.6938059   0.0017397   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  10  45556   0.324360   0.264660   0.6919539   0.0019675   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  11  45557   0.324221   0.260841   0.6898931   0.0021457   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  12  45558   0.324051   0.257041   0.6877026   0.0022254   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  13  45559   0.324211   0.252681   0.6854847   0.0021816   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  14  45560   0.324291   0.248211   0.6833738   0.0020255   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  15  45561   0.324102   0.243822   0.6814504   0.0018153   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  16  45562   0.323472   0.239732   0.6797436   0.0016125   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  17  45563   0.322362   0.235962   0.6782142   0.0014451   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  18  45564   0.321243   0.232153   0.6768354   0.0013074   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  19  45565   0.320303   0.228003   0.6755786   0.0012288   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  20  45566   0.319383   0.223513   0.6743567   0.0012274   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  21  45567   0.318263   0.218703   0.6731052   0.0012867   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  22  45568   0.316754   0.213604   0.6717679   0.0013970   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  23  45569   0.315344   0.208574   0.6703001   0.0015329   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  24  45570   0.314344   0.203934   0.6686976   0.0016685   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  25  45571   0.314014   0.199944   0.6669660   0.0017942   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  26  45572   0.313665   0.196155   0.6651203   0.0018895   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  27  45573   0.312835   0.192315   0.6632026   0.0019403   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  28  45574   0.311275   0.188305   0.6612571   0.0019472   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  29  45575   0.309266   0.184216   0.6593256   0.0019091   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  30  45576   0.306896   0.179966   0.6574539   0.0018455   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   8  31  45577   0.304236   0.175396   0.6556452   0.0017478   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9   1  45578   0.301656   0.170626   0.6539592   0.0016170   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9   2  45579   0.299247   0.165977   0.6523992   0.0015094   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9   3  45580   0.297057   0.161627   0.6509125   0.0014752   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9   4  45581   0.294907   0.157597   0.6494102   0.0015448   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9   5  45582   0.292677   0.153887   0.6477877   0.0017207   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9   6  45583   0.290348   0.150418   0.6459505   0.0019507   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9   7  45584   0.287828   0.147148   0.6438944   0.0021736   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9   8  45585   0.285118   0.143928   0.6416356   0.0023418   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9   9  45586   0.282299   0.140659   0.6392589   0.0023835   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  10  45587   0.279549   0.137259   0.6369144   0.0022976   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  11  45588   0.277119   0.133469   0.6346932   0.0021211   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  12  45589   0.274909   0.129409   0.6326824   0.0018916   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  13  45590   0.272850   0.125210   0.6309019   0.0016638   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  14  45591   0.270800   0.120950   0.6293371   0.0014879   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  15  45592   0.268600   0.116950   0.6279028   0.0013896   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  16  45593   0.266200   0.113300   0.6265332   0.0013531   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  17  45594   0.263621   0.109961   0.6251761   0.0013762   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  18  45595   0.260841   0.106811   0.6237629   0.0014580   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  19  45596   0.257811   0.103711   0.6222464   0.0015790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  20  45597   0.254472   0.100492   0.6205975   0.0017283   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  21  45598   0.250882   0.097092   0.6187916   0.0018813   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  22  45599   0.247072   0.093592   0.6168443   0.0020073   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  23  45600   0.243192   0.090132   0.6147933   0.0020889   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  24  45601   0.239413   0.086843   0.6126866   0.0021129   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  25  45602   0.235813   0.083833   0.6105879   0.0020753   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  26  45603   0.232363   0.081123   0.6085536   0.0019836   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  27  45604   0.229063   0.078653   0.6066332   0.0018587   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  28  45605   0.225924   0.076304   0.6048375   0.0017451   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  29  45606   0.222774   0.073714   0.6031320   0.0016796   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983   9  30  45607   0.219474   0.070734   0.6014558   0.0016896   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10   1  45608   0.216015   0.067415   0.5997207   0.0017986   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10   2  45609   0.212515   0.063975   0.5978235   0.0020072   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10   3  45610   0.209025   0.060675   0.5956803   0.0022819   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10   4  45611   0.205595   0.057725   0.5932548   0.0025628   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10   5  45612   0.202266   0.055266   0.5905749   0.0027775   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10   6  45613   0.199076   0.053246   0.5877388   0.0028687   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10   7  45614   0.195866   0.051366   0.5848843   0.0028062   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10   8  45615   0.192526   0.049426   0.5821668   0.0026117   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10   9  45616   0.189007   0.047287   0.5796833   0.0023516   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  10  45617   0.185277   0.045027   0.5774653   0.0020872   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  11  45618   0.181387   0.042777   0.5754933   0.0018609   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  12  45619   0.177468   0.040688   0.5737200   0.0017165   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  13  45620   0.173558   0.038748   0.5720344   0.0016886   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  14  45621   0.169678   0.036878   0.5703185   0.0017136   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  15  45622   0.165848   0.035058   0.5685858   0.0017449   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  16  45623   0.161989   0.033379   0.5668136   0.0018095   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  17  45624   0.158099   0.032029   0.5649593   0.0019038   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  18  45625   0.154149   0.031009   0.5630045   0.0020188   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  19  45626   0.150040   0.029990   0.5609264   0.0021420   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  20  45627   0.145670   0.028680   0.5587332   0.0022466   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  21  45628   0.141030   0.026870   0.5564531   0.0023050   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  22  45629   0.136300   0.024800   0.5541459   0.0023007   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  23  45630   0.131601   0.022821   0.5518743   0.0022394   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  24  45631   0.127031   0.021251   0.5496828   0.0021410   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  25  45632   0.122551   0.020201   0.5475987   0.0020301   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  26  45633   0.118041   0.019551   0.5456149   0.0019497   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  27  45634   0.113372   0.019112   0.5436772   0.0019395   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  28  45635   0.108482   0.018722   0.5417047   0.0020184   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  29  45636   0.103502   0.018362   0.5396060   0.0021916   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  30  45637   0.098613   0.018013   0.5372935   0.0024468   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  10  31  45638   0.093963   0.017693   0.5347012   0.0027362   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11   1  45639   0.089723   0.017373   0.5318293   0.0029935   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11   2  45640   0.085863   0.017023   0.5287424   0.0031573   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11   3  45641   0.082104   0.016654   0.5255558   0.0031930   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11   4  45642   0.078154   0.016274   0.5223974   0.0031077   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11   5  45643   0.073754   0.015864   0.5193714   0.0029162   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11   6  45644   0.068824   0.015544   0.5165776   0.0026599   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11   7  45645   0.063625   0.015285   0.5140458   0.0023977   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11   8  45646   0.058365   0.015185   0.5117632   0.0021733   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11   9  45647   0.053645   0.015165   0.5096739   0.0020376   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  10  45648   0.049536   0.015166   0.5076621   0.0020065   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  11  45649   0.045866   0.015086   0.5056380   0.0020469   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  12  45650   0.042286   0.015016   0.5035506   0.0021313   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  13  45651   0.038346   0.015226   0.5013634   0.0022538   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  14  45652   0.033857   0.015767   0.4990392   0.0023929   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  15  45653   0.028987   0.016517   0.4965799   0.0025225   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  16  45654   0.024247   0.017357   0.4940048   0.0026215   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  17  45655   0.019997   0.018167   0.4913533   0.0026715   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  18  45656   0.016098   0.019018   0.4886823   0.0026586   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  19  45657   0.012268   0.019938   0.4860595   0.0025765   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  20  45658   0.008158   0.020968   0.4835504   0.0024329   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  21  45659   0.003849   0.022029   0.4812060   0.0022543   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  22  45660  -0.000631   0.023039   0.4790402   0.0020739   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  23  45661  -0.005091   0.023889   0.4770381   0.0019465   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  24  45662  -0.009541   0.024619   0.4751150   0.0019220   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  25  45663  -0.014010   0.025370   0.4731607   0.0020010   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  26  45664  -0.018450   0.026200   0.4710852   0.0021596   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  27  45665  -0.022810   0.027120   0.4688292   0.0023567   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  28  45666  -0.027030   0.028110   0.4663778   0.0025372   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  29  45667  -0.031079   0.029171   0.4637758   0.0026504   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  11  30  45668  -0.034969   0.030301   0.4611109   0.0026651   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12   1  45669  -0.038759   0.031571   0.4584829   0.0025722   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12   2  45670  -0.042548   0.033012   0.4559977   0.0023975   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12   3  45671  -0.046388   0.034482   0.4537068   0.0021826   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12   4  45672  -0.050438   0.035882   0.4516330   0.0019652   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12   5  45673  -0.054668   0.037192   0.4497635   0.0017790   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12   6  45674  -0.058937   0.038363   0.4480520   0.0016473   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12   7  45675  -0.063127   0.039433   0.4464437   0.0015699   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12   8  45676  -0.067017   0.040433   0.4448884   0.0015609   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12   9  45677  -0.070467   0.041513   0.4433036   0.0016192   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  10  45678  -0.073536   0.042764   0.4416367   0.0017194   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  11  45679  -0.076396   0.044364   0.4398579   0.0018485   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  12  45680  -0.079136   0.046294   0.4379403   0.0019915   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  13  45681  -0.081795   0.048555   0.4358837   0.0021225   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  14  45682  -0.084545   0.050945   0.4337070   0.0022216   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  15  45683  -0.087455   0.053325   0.4314572   0.0022668   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  16  45684  -0.090455   0.055565   0.4291936   0.0022490   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  17  45685  -0.093504   0.057586   0.4269803   0.0021587   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  18  45686  -0.096654   0.059496   0.4248931   0.0020087   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  19  45687  -0.099874   0.061486   0.4229682   0.0018416   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  20  45688  -0.103074   0.063736   0.4211981   0.0017121   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  21  45689  -0.106133   0.066327   0.4195154   0.0016695   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  22  45690  -0.108923   0.068977   0.4178220   0.0017341   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  23  45691  -0.111463   0.071507   0.4160144   0.0018945   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  24  45692  -0.113872   0.073798   0.4140157   0.0021083   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  25  45693  -0.116352   0.075708   0.4118017   0.0023196   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  26  45694  -0.118912   0.077348   0.4094005   0.0024728   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  27  45695  -0.121492   0.078928   0.4068896   0.0025280   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  28  45696  -0.124101   0.080659   0.4043797   0.0024750   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  29  45697  -0.126631   0.082759   0.4019680   0.0023364   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  30  45698  -0.128971   0.085349   0.3997242   0.0021441   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1983  12  31  45699  -0.131161   0.088359   0.3976841   0.0019372   0.000000   0.000000   0.002000   0.002000  0.0004000  0.0001500    0.001193    0.002000
+1984   1   1  45700  -0.133568   0.092024   0.3957218   0.0018080  -0.000197  -0.001742   0.021976   0.019971  0.0000416  0.0000831    0.000324    0.000675
+1984   1   2  45701  -0.134733   0.095798   0.3939836   0.0016412  -0.000016  -0.001346   0.013073   0.026078  0.0000416  0.0000416    0.000324    0.000675
+1984   1   3  45702  -0.136973   0.098671   0.3924143   0.0015107   0.000132  -0.000956   0.007999   0.023448  0.0000416  0.0000416    0.000324    0.000675
+1984   1   4  45703  -0.141010   0.100523   0.3909377   0.0014608   0.000206  -0.000685   0.002006   0.009231  0.0000416  0.0000416    0.000324    0.000675
+1984   1   5  45704  -0.145629   0.102488   0.3894723   0.0014814   0.000191  -0.000506   0.001069   0.005059  0.0000416  0.0000416    0.000324    0.000675
+1984   1   6  45705  -0.148961   0.105628   0.3879607   0.0015499   0.000092  -0.000363   0.001490   0.006549  0.0000416  0.0000415    0.000324    0.000675
+1984   1   7  45706  -0.151258   0.109215   0.3863658   0.0016496  -0.000071  -0.000237   0.003102   0.009917  0.0000415  0.0000317    0.000324    0.000674
+1984   1   8  45707  -0.153530   0.112197   0.3846630   0.0017661  -0.000262  -0.000157   0.002825   0.002387  0.0000218  0.0000313    0.000502    0.000387
+1984   1   9  45708  -0.156238   0.114513   0.3828428   0.0018791  -0.000424  -0.000155   0.001074   0.000799  0.0000212  0.0000215    0.000533    0.000377
+1984   1  10  45709  -0.159254   0.116745   0.3809192   0.0019616  -0.000488  -0.000247   0.001078   0.000803  0.0000212  0.0000212    0.000533    0.000377
+1984   1  11  45710  -0.162160   0.119344   0.3789361   0.0019870  -0.000401  -0.000415   0.001308   0.000979  0.0000212  0.0000212    0.000533    0.000377
+1984   1  12  45711  -0.164694   0.122102   0.3769622   0.0019369  -0.000148  -0.000629   0.003810   0.003500  0.0000212  0.0000455    0.000533    0.000377
+1984   1  13  45712  -0.166579   0.124887   0.3750791   0.0018069   0.000224  -0.000846   0.005967   0.008514  0.0000699  0.0000916    0.000871    0.001299
+1984   1  14  45713  -0.167365   0.128461   0.3733638   0.0016103   0.000614  -0.001020   0.012957   0.006460  0.0001620  0.0001160    0.000938    0.003930
+1984   1  15  45714  -0.167441   0.133113   0.3718680   0.0013846   0.000898  -0.001113   0.010398   0.007261  0.0001620  0.0001620    0.000938    0.003931
+1984   1  16  45715  -0.168838   0.137034   0.3705912   0.0011922   0.000973  -0.001111   0.008748   0.008586  0.0001620  0.0001620    0.000938    0.003931
+1984   1  17  45716  -0.172462   0.139008   0.3694622   0.0011009   0.000797  -0.001025   0.013223   0.010016  0.0001620  0.0001620    0.000938    0.003931
+1984   1  18  45717  -0.176615   0.140385   0.3683525   0.0011495   0.000400  -0.000893   0.015288   0.010065  0.0001620  0.0001620    0.000938    0.003931
+1984   1  19  45718  -0.179514   0.142946   0.3671224   0.0013260  -0.000138  -0.000758   0.015617   0.010401  0.0001620  0.0001455    0.000938    0.003931
+1984   1  20  45719  -0.181407   0.147061   0.3656721   0.0015753  -0.000713  -0.000655   0.019133   0.015302  0.0001291  0.0000903    0.000926    0.002527
+1984   1  21  45720  -0.183782   0.151890   0.3639681   0.0018267  -0.001207  -0.000588   0.019335   0.015685  0.0000187  0.0000739    0.000451    0.000289
+1984   1  22  45721  -0.187321   0.156332   0.3620413   0.0020203  -0.001499  -0.000535   0.018851   0.014807  0.0000187  0.0000187    0.000451    0.000289
+1984   1  23  45722  -0.190956   0.159626   0.3599679   0.0021178  -0.001487  -0.000452   0.003606   0.002355  0.0000187  0.0000188    0.000451    0.000290
+1984   1  24  45723  -0.193173   0.161554   0.3578499   0.0021003  -0.001135  -0.000305   0.001959   0.001358  0.0000189  0.0000195    0.000455    0.000292
+1984   1  25  45724  -0.193783   0.162709   0.3558031   0.0019622  -0.000523  -0.000096   0.001334   0.000945  0.0000202  0.0000235    0.000483    0.000314
+1984   1  26  45725  -0.194664   0.164364   0.3539458   0.0017180   0.000141   0.000126   0.001595   0.001163  0.0000282  0.0000338    0.000633    0.000440
+1984   1  27  45726  -0.197894   0.168367   0.3523711   0.0014168   0.000551   0.000246   0.003403   0.002531  0.0000474  0.0000381    0.000885    0.000757
+1984   1  28  45727  -0.201399   0.172718   0.3511021   0.0011369   0.000563   0.000217   0.004743   0.003549  0.0000481  0.0000362    0.000896    0.000910
+1984   1  29  45728  -0.203692   0.175796   0.3500772   0.0009468   0.000279   0.000078   0.000922   0.001339  0.0000249  0.0000365    0.000587    0.000673
+1984   1  30  45729  -0.205229   0.177871   0.3491832   0.0008725  -0.000066  -0.000102   0.000886   0.001291  0.0000249  0.0000249    0.000586    0.000672
+1984   1  31  45730  -0.207154   0.179969   0.3483062   0.0008970  -0.000238  -0.000259   0.000898   0.001309  0.0000249  0.0000249    0.000586    0.000672
+1984   2   1  45731  -0.209737   0.182565   0.3473666   0.0009860  -0.000145  -0.000376   0.002462   0.003369  0.0000249  0.0000478    0.000586    0.000672
+1984   2   2  45732  -0.212356   0.185571   0.3463176   0.0011139   0.000145  -0.000463   0.005822   0.006082  0.0000707  0.0000642    0.000738    0.000608
+1984   2   3  45733  -0.214399   0.189008   0.3451297   0.0012665   0.000481  -0.000520   0.001878   0.002153  0.0001035  0.0000871    0.000755    0.000603
+1984   2   4  45734  -0.215989   0.193331   0.3437840   0.0014292   0.000707  -0.000534   0.001387   0.001597  0.0001035  0.0001035    0.000755    0.000603
+1984   2   5  45735  -0.217642   0.198253   0.3422790   0.0015804   0.000738  -0.000489   0.001791   0.002045  0.0001035  0.0001034    0.000755    0.000603
+1984   2   6  45736  -0.219516   0.201994   0.3406377   0.0016966   0.000579  -0.000381   0.002678   0.002998  0.0001034  0.0000772    0.000755    0.000603
+1984   2   7  45737  -0.220782   0.204166   0.3389039   0.0017627   0.000312  -0.000239   0.005373   0.008001  0.0000510  0.0000765    0.000722    0.000554
+1984   2   8  45738  -0.220802   0.206011   0.3371302   0.0017778   0.000047  -0.000105   0.004555   0.003400  0.0000495  0.0000503    0.000720    0.000550
+1984   2   9  45739  -0.220337   0.209386   0.3353637   0.0017498  -0.000113  -0.000014   0.003358   0.001837  0.0000495  0.0000495    0.000720    0.000550
+1984   2  10  45740  -0.221564   0.215357   0.3336427   0.0016857  -0.000109   0.000029   0.004027   0.002104  0.0000495  0.0000495    0.000720    0.000550
+1984   2  11  45741  -0.224164   0.221829   0.3320001   0.0015895   0.000060   0.000051   0.010335   0.005986  0.0000495  0.0001024    0.000720    0.000551
+1984   2  12  45742  -0.226256   0.226206   0.3304638   0.0014715   0.000340   0.000086   0.014113   0.010050  0.0001552  0.0003500    0.001280    0.001063
+1984   2  13  45743  -0.227316   0.228675   0.3290441   0.0013616   0.000645   0.000144   0.005242   0.006404  0.0006505  0.0004030    0.001459    0.001263
+1984   2  14  45744  -0.228024   0.231019   0.3277113   0.0013121   0.000892   0.000195   0.005165   0.006371  0.0006507  0.0006506    0.001459    0.001263
+1984   2  15  45745  -0.229220   0.234296   0.3263790   0.0013771   0.001020   0.000182   0.005184   0.006405  0.0006507  0.0006498    0.001459    0.001263
+1984   2  16  45746  -0.230914   0.237411   0.3249179   0.0015764   0.001005   0.000066   0.009193   0.010503  0.0006488  0.0004126    0.001459    0.001262
+1984   2  17  45747  -0.232469   0.238879   0.3232055   0.0018703   0.000841  -0.000132   0.011759   0.011155  0.0001745  0.0004069    0.000912    0.000517
+1984   2  18  45748  -0.233406   0.239208   0.3211860   0.0021716   0.000529  -0.000324   0.002888   0.008715  0.0001650  0.0001698    0.000879    0.000492
+1984   2  19  45749  -0.233970   0.241780   0.3188989   0.0023844   0.000083  -0.000394   0.001659   0.005584  0.0001650  0.0001650    0.000879    0.000492
+1984   2  20  45750  -0.234766   0.248687   0.3164683   0.0024421  -0.000433  -0.000276   0.002357   0.004641  0.0001650  0.0001643    0.000879    0.000492
+1984   2  21  45751  -0.235985   0.255905   0.3140625   0.0023273  -0.000871  -0.000022   0.004971   0.004214  0.0001636  0.0000969    0.000878    0.000492
+1984   2  22  45752  -0.237347   0.260121   0.3118448   0.0020714  -0.001023   0.000213   0.008419   0.003185  0.0000287  0.0000955    0.000564    0.000473
+1984   2  23  45753  -0.238603   0.261965   0.3099295   0.0017413  -0.000736   0.000259   0.003008   0.002000  0.0000274  0.0000277    0.000544    0.000463
+1984   2  24  45754  -0.240004   0.263628   0.3083536   0.0014197  -0.000042   0.000043   0.001596   0.001115  0.0000268  0.0000263    0.000513    0.000421
+1984   2  25  45755  -0.242180   0.265921   0.3070694   0.0011818   0.000769  -0.000352   0.001797   0.000907  0.0000251  0.0000254    0.000448    0.000344
+1984   2  26  45756  -0.244539   0.269329   0.3059635   0.0010669   0.001220  -0.000720   0.002505   0.000862  0.0000241  0.0000250    0.000415    0.000310
+1984   2  27  45757  -0.246102   0.273924   0.3049079   0.0010709   0.001054  -0.000893   0.002542   0.000883  0.0000249  0.0000316    0.000429    0.000317
+1984   2  28  45758  -0.246451   0.279199   0.3037965   0.0011664   0.000381  -0.000842   0.001636   0.001241  0.0000391  0.0000320    0.000879    0.000540
+1984   2  29  45759  -0.245795   0.284453   0.3025552   0.0013214  -0.000450  -0.000650   0.001635   0.001243  0.0000392  0.0000391    0.000883    0.000541
+1984   3   1  45760  -0.244890   0.289172   0.3011409   0.0015075  -0.001074  -0.000437   0.001695   0.001294  0.0000392  0.0000392    0.000883    0.000541
+1984   3   2  45761  -0.244815   0.293289   0.2995359   0.0016991  -0.001321  -0.000275   0.004093   0.004348  0.0000391  0.0000308    0.000882    0.000541
+1984   3   3  45762  -0.246195   0.297058   0.2977471   0.0018733  -0.001232  -0.000166   0.004786   0.007047  0.0000225  0.0000305    0.000424    0.000449
+1984   3   4  45763  -0.248288   0.300785   0.2958019   0.0020103  -0.000946  -0.000080   0.001181   0.001017  0.0000219  0.0000222    0.000411    0.000444
+1984   3   5  45764  -0.249394   0.304675   0.2937448   0.0020953  -0.000603   0.000014   0.000930   0.000791  0.0000219  0.0000219    0.000411    0.000444
+1984   3   6  45765  -0.249003   0.308857   0.2916319   0.0021185  -0.000288   0.000122   0.001370   0.001152  0.0000219  0.0000219    0.000411    0.000444
+1984   3   7  45766  -0.249120   0.313421   0.2895263   0.0020781  -0.000019   0.000227   0.003145   0.002430  0.0000219  0.0000343    0.000411    0.000444
+1984   3   8  45767  -0.250055   0.317996   0.2874890   0.0019826   0.000214   0.000304   0.005023   0.003979  0.0000467  0.0000387    0.000581    0.000480
+1984   3   9  45768  -0.249849   0.322058   0.2855679   0.0018507   0.000414   0.000334   0.002945   0.002282  0.0000555  0.0000511    0.000607    0.000483
+1984   3  10  45769  -0.247430   0.325655   0.2837871   0.0017109   0.000567   0.000319   0.001817   0.001365  0.0000555  0.0000555    0.000607    0.000483
+1984   3  11  45770  -0.245239   0.329783   0.2821364   0.0016005   0.000648   0.000272   0.001717   0.001291  0.0000555  0.0000555    0.000607    0.000483
+1984   3  12  45771  -0.244488   0.334675   0.2805643   0.0015630   0.000621   0.000219   0.004834   0.004665  0.0000555  0.0000448    0.000606    0.000483
+1984   3  13  45772  -0.243773   0.339444   0.2789765   0.0016356   0.000460   0.000175   0.005324   0.010350  0.0000341  0.0000445    0.000376    0.000317
+1984   3  14  45773  -0.242043   0.343240   0.2772531   0.0018296   0.000174   0.000140   0.000950   0.001626  0.0000336  0.0000351    0.000370    0.000312
+1984   3  15  45774  -0.239593   0.345957   0.2752848   0.0021140  -0.000177   0.000102   0.000928   0.001582  0.0000361  0.0000425    0.000396    0.000336
+1984   3  16  45775  -0.237582   0.348369   0.2730150   0.0024212  -0.000488   0.000044   0.001335   0.002230  0.0000514  0.0000664    0.000548    0.000489
+1984   3  17  45776  -0.236894   0.351912   0.2704628   0.0026643  -0.000634  -0.000049   0.003088   0.004806  0.0000968  0.0000607    0.000904    0.001031
+1984   3  18  45777  -0.236449   0.356657   0.2677323   0.0027708  -0.000573  -0.000180   0.006182   0.010707  0.0000700  0.0000610    0.000830    0.000900
+1984   3  19  45778  -0.234827   0.361697   0.2649766   0.0027189  -0.000381  -0.000345   0.001313   0.001610  0.0000252  0.0000476    0.000371    0.000322
+1984   3  20  45779  -0.232958   0.366932   0.2623403   0.0025398  -0.000199  -0.000528   0.000896   0.001081  0.0000252  0.0000252    0.000370    0.000321
+1984   3  21  45780  -0.232549   0.372267   0.2599208   0.0022927  -0.000157  -0.000714   0.001302   0.001479  0.0000252  0.0000252    0.000370    0.000321
+1984   3  22  45781  -0.233445   0.376646   0.2577545   0.0020387  -0.000300  -0.000884   0.002840   0.002450  0.0000252  0.0000269    0.000370    0.000321
+1984   3  23  45782  -0.233638   0.380027   0.2558253   0.0018217  -0.000588  -0.001011   0.004335   0.005836  0.0000286  0.0000271    0.000498    0.000382
+1984   3  24  45783  -0.231462   0.383470   0.2540840   0.0016651  -0.000923  -0.001076   0.002103   0.002183  0.0000290  0.0000288    0.000516    0.000389
+1984   3  25  45784  -0.227758   0.387569   0.2524659   0.0015774  -0.001204  -0.001070   0.001082   0.001054  0.0000290  0.0000290    0.000516    0.000389
+1984   3  26  45785  -0.225408   0.391789   0.2509024   0.0015588  -0.001366  -0.000998   0.001056   0.001026  0.0000290  0.0000290    0.000516    0.000389
+1984   3  27  45786  -0.224916   0.395653   0.2493260   0.0016059  -0.001387  -0.000876   0.003432   0.003837  0.0000290  0.0000290    0.000516    0.000389
+1984   3  28  45787  -0.224445   0.399146   0.2476747   0.0017096  -0.001282  -0.000729   0.006216   0.014508  0.0000290  0.0000290    0.000516    0.000389
+1984   3  29  45788  -0.222919   0.402320   0.2458989   0.0018510  -0.001082  -0.000576   0.011618   0.016026  0.0000290  0.0000290    0.000516    0.000389
+1984   3  30  45789  -0.221069   0.405143   0.2439734   0.0020005  -0.000825  -0.000433   0.016910   0.016081  0.0000290  0.0000322    0.000516    0.000389
+1984   3  31  45790  -0.219732   0.407880   0.2419070   0.0021222  -0.000545  -0.000305   0.016805   0.015889  0.0000354  0.0000322    0.000646    0.000533
+1984   4   1  45791  -0.218402   0.411275   0.2397451   0.0021850  -0.000273  -0.000194   0.006760   0.006375  0.0000354  0.0000354    0.000646    0.000533
+1984   4   2  45792  -0.216033   0.415805   0.2375580   0.0021729  -0.000034  -0.000114   0.005932   0.005118  0.0000354  0.0000354    0.000646    0.000533
+1984   4   3  45793  -0.212467   0.420850   0.2354210   0.0020900   0.000152  -0.000085   0.002918   0.001905  0.0000354  0.0000354    0.000646    0.000533
+1984   4   4  45794  -0.209380   0.424497   0.2333961   0.0019557   0.000273  -0.000130   0.001625   0.001009  0.0000354  0.0000354    0.000646    0.000533
+1984   4   5  45795  -0.208591   0.425749   0.2315201   0.0017971   0.000327  -0.000257   0.002243   0.001366  0.0000354  0.0000354    0.000646    0.000533
+1984   4   6  45796  -0.208476   0.428061   0.2298027   0.0016435   0.000331  -0.000432   0.004851   0.002664  0.0000354  0.0000441    0.000647    0.000533
+1984   4   7  45797  -0.206306   0.433005   0.2282238   0.0015256   0.000315  -0.000577   0.004325   0.003216  0.0000527  0.0000458    0.001305    0.000695
+1984   4   8  45798  -0.201470   0.438319   0.2267324   0.0014753   0.000321  -0.000596   0.002683   0.002361  0.0000562  0.0000545    0.001559    0.000720
+1984   4   9  45799  -0.196220   0.441796   0.2252454   0.0015205   0.000382  -0.000436   0.001625   0.001554  0.0000562  0.0000562    0.001559    0.000720
+1984   4  10  45800  -0.194391   0.444777   0.2236576   0.0016755   0.000489  -0.000145   0.001611   0.001568  0.0000562  0.0000585    0.001559    0.000720
+1984   4  11  45801  -0.193532   0.447857   0.2218618   0.0019283   0.000567   0.000098   0.004076   0.004216  0.0000608  0.0001359    0.001664    0.000762
+1984   4  12  45802  -0.189048   0.450593   0.2197808   0.0022337   0.000507   0.000089   0.005876   0.005463  0.0002157  0.0000718    0.002242    0.001270
+1984   4  13  45803  -0.183781   0.454478   0.2173975   0.0025196   0.000265  -0.000267   0.002929   0.001857  0.0000829  0.0001294    0.000935    0.000834
+1984   4  14  45804  -0.182343   0.460361   0.2147717   0.0027073  -0.000054  -0.000860   0.001509   0.000952  0.0000431  0.0000593    0.000492    0.000498
+1984   4  15  45805  -0.181830   0.465405   0.2120325   0.0027427  -0.000204  -0.001362   0.001264   0.000798  0.0000357  0.0000407    0.000409    0.000421
+1984   4  16  45806  -0.179188   0.468269   0.2093390   0.0026213  -0.000050  -0.001577   0.002609   0.001828  0.0000383  0.0000792    0.000438    0.000452
+1984   4  17  45807  -0.175112   0.470475   0.2068281   0.0023898   0.000295  -0.001502   0.004032   0.003379  0.0001227  0.0000414    0.001682    0.001664
+1984   4  18  45808  -0.171716   0.473554   0.2045733   0.0021221   0.000551  -0.001220   0.002266   0.001542  0.0000445  0.0000726    0.000647    0.000650
+1984   4  19  45809  -0.169537   0.476764   0.2025743   0.0018843   0.000440  -0.000804   0.001187   0.000803  0.0000224  0.0000314    0.000325    0.000320
+1984   4  20  45810  -0.166531   0.479016   0.2007800   0.0017142  -0.000194  -0.000210   0.001101   0.000816  0.0000182  0.0000200    0.000254    0.000226
+1984   4  21  45811  -0.162604   0.481216   0.1991160   0.0016257  -0.000777   0.000184   0.000932   0.000749  0.0000176  0.0000180    0.000239    0.000201
+1984   4  22  45812  -0.159653   0.484577   0.1975003   0.0016207  -0.000735   0.000079   0.001065   0.000869  0.0000179  0.0000263    0.000242    0.000203
+1984   4  23  45813  -0.157905   0.487893   0.1958510   0.0016900  -0.000147  -0.000321   0.002449   0.002262  0.0000349  0.0000269    0.000574    0.000533
+1984   4  24  45814  -0.156203   0.489851   0.1941029   0.0018058   0.000546  -0.000610   0.001747   0.001610  0.0000359  0.0000404    0.000596    0.000558
+1984   4  25  45815  -0.153300   0.491719   0.1922292   0.0019258   0.000919  -0.000505   0.001703   0.001567  0.0000459  0.0000813    0.000757    0.000711
+1984   4  26  45816  -0.149133   0.494800   0.1902493   0.0020154   0.000907  -0.000160   0.003166   0.004176  0.0001267  0.0000632    0.001387    0.001376
+1984   4  27  45817  -0.144863   0.498405   0.1882045   0.0020679   0.000687   0.000021   0.001787   0.003211  0.0000805  0.0000864    0.000748    0.000736
+1984   4  28  45818  -0.141958   0.501861   0.1861266   0.0020997   0.000347  -0.000211   0.001497   0.001760  0.0000462  0.0000546    0.000566    0.000583
+1984   4  29  45819  -0.140135   0.504828   0.1840236   0.0021218   0.000013  -0.000733   0.001459   0.001066  0.0000286  0.0000370    0.000438    0.000483
+1984   4  30  45820  -0.137826   0.507505   0.1819045   0.0021168  -0.000175  -0.001194   0.001464   0.001046  0.0000279  0.0000283    0.000431    0.000477
+1984   5   1  45821  -0.134096   0.510478   0.1798111   0.0020544  -0.000179  -0.001348   0.003137   0.002239  0.0000279  0.0000502    0.000431    0.000477
+1984   5   2  45822  -0.129291   0.514006   0.1778116   0.0019229  -0.000037  -0.001169   0.015961   0.011522  0.0000724  0.0000643    0.001256    0.000888
+1984   5   3  45823  -0.124556   0.517538   0.1759713   0.0017408   0.000170  -0.000792   0.016658   0.008562  0.0001006  0.0000865    0.002787    0.001036
+1984   5   4  45824  -0.120940   0.519969   0.1743234   0.0015502   0.000328  -0.000401   0.008948   0.006083  0.0001006  0.0001006    0.002788    0.001036
+1984   5   5  45825  -0.118380   0.521121   0.1728523   0.0014034   0.000347  -0.000126   0.005457   0.007366  0.0001006  0.0001005    0.002788    0.001036
+1984   5   6  45826  -0.115349   0.522592   0.1714895   0.0013467   0.000208   0.000010   0.004621   0.008888  0.0001004  0.0000634    0.002780    0.001035
+1984   5   7  45827  -0.110829   0.525269   0.1701282   0.0014064  -0.000026   0.000050   0.007800   0.004043  0.0000261  0.0000625    0.000549    0.000340
+1984   5   8  45828  -0.105254   0.528474   0.1686483   0.0015813  -0.000252   0.000052   0.003447   0.001938  0.0000245  0.0000253    0.000504    0.000314
+1984   5   9  45829  -0.100067   0.531227   0.1669463   0.0018387  -0.000368   0.000051   0.001685   0.000995  0.0000245  0.0000245    0.000504    0.000314
+1984   5  10  45830  -0.096491   0.533644   0.1649674   0.0021161  -0.000319   0.000056   0.001943   0.001155  0.0000245  0.0000245    0.000504    0.000314
+1984   5  11  45831  -0.093823   0.535675   0.1627314   0.0023331  -0.000111   0.000060   0.003987   0.002397  0.0000245  0.0000291    0.000504    0.000314
+1984   5  12  45832  -0.090851   0.537231   0.1603381   0.0024175   0.000184   0.000051   0.004664   0.004375  0.0000338  0.0000306    0.000398    0.000407
+1984   5  13  45833  -0.087477   0.538719   0.1579437   0.0023349   0.000469   0.000026   0.001508   0.001821  0.0000366  0.0000352    0.000386    0.000433
+1984   5  14  45834  -0.084289   0.540587   0.1557116   0.0021075   0.000654  -0.000010   0.001504   0.001817  0.0000366  0.0000366    0.000386    0.000433
+1984   5  15  45835  -0.081584   0.542866   0.1537544   0.0018071   0.000693  -0.000048   0.001517   0.001832  0.0000366  0.0000366    0.000386    0.000433
+1984   5  16  45836  -0.078639   0.544846   0.1520996   0.0015193   0.000596  -0.000081   0.003687   0.004157  0.0000366  0.0000325    0.000386    0.000433
+1984   5  17  45837  -0.074506   0.545762   0.1506978   0.0013049   0.000419  -0.000106   0.009702   0.005915  0.0000283  0.0000322    0.000333    0.000385
+1984   5  18  45838  -0.069386   0.545932   0.1494611   0.0011834   0.000231  -0.000131   0.002706   0.001244  0.0000278  0.0000281    0.000330    0.000382
+1984   5  19  45839  -0.065222   0.547099   0.1483010   0.0011451   0.000091  -0.000177   0.001748   0.000801  0.0000278  0.0000278    0.000330    0.000382
+1984   5  20  45840  -0.063227   0.550106   0.1471456   0.0011713   0.000023  -0.000258   0.002299   0.001091  0.0000278  0.0000278    0.000330    0.000382
+1984   5  21  45841  -0.061101   0.552742   0.1459398   0.0012458   0.000013  -0.000377   0.003385   0.001779  0.0000278  0.0000283    0.000330    0.000382
+1984   5  22  45842  -0.056948   0.553908   0.1446429   0.0013513   0.000022  -0.000513   0.006890   0.004196  0.0000288  0.0000284    0.000385    0.000467
+1984   5  23  45843  -0.050967   0.554391   0.1432338   0.0014648   0.000008  -0.000630   0.003460   0.002189  0.0000289  0.0000289    0.000390    0.000477
+1984   5  24  45844  -0.045095   0.555228   0.1417177   0.0015600  -0.000058  -0.000688   0.001856   0.001182  0.0000289  0.0000289    0.000390    0.000477
+1984   5  25  45845  -0.041435   0.556203   0.1401250   0.0016172  -0.000180  -0.000661   0.002057   0.001314  0.0000289  0.0000289    0.000390    0.000477
+1984   5  26  45846  -0.039082   0.556900   0.1384996   0.0016281  -0.000337  -0.000552   0.006454   0.004334  0.0000289  0.0000266    0.000390    0.000477
+1984   5  27  45847  -0.035662   0.557354   0.1368879   0.0015923  -0.000487  -0.000394   0.007569   0.004868  0.0000244  0.0000265    0.000331    0.000571
+1984   5  28  45848  -0.030605   0.557913   0.1353350   0.0015114  -0.000585  -0.000242   0.001300   0.000765  0.0000241  0.0000242    0.000327    0.000583
+1984   5  29  45849  -0.024974   0.558903   0.1338832   0.0013898  -0.000592  -0.000150   0.001264   0.000744  0.0000241  0.0000241    0.000327    0.000583
+1984   5  30  45850  -0.019984   0.560274   0.1325669   0.0012403  -0.000497  -0.000148   0.001281   0.000754  0.0000241  0.0000241    0.000327    0.000583
+1984   5  31  45851  -0.015682   0.561433   0.1314024   0.0010885  -0.000316  -0.000231   0.003326   0.001994  0.0000241  0.0000249    0.000327    0.000582
+1984   6   1  45852  -0.011317   0.561753   0.1303750   0.0009711  -0.000100  -0.000364   0.007552   0.005754  0.0000258  0.0000250    0.000393    0.000465
+1984   6   2  45853  -0.006564   0.561359   0.1294327   0.0009247   0.000085  -0.000491   0.001794   0.001673  0.0000260  0.0000259    0.000401    0.000458
+1984   6   3  45854  -0.002101   0.561325   0.1284923   0.0009720   0.000176  -0.000573   0.001258   0.001184  0.0000260  0.0000260    0.000401    0.000458
+1984   6   4  45855   0.001575   0.562292   0.1274589   0.0011106   0.000138  -0.000599   0.001744   0.001640  0.0000260  0.0000260    0.000401    0.000458
+1984   6   5  45856   0.005278   0.563209   0.1262528   0.0013110  -0.000018  -0.000592   0.003066   0.002871  0.0000260  0.0000329    0.000402    0.000458
+1984   6   6  45857   0.009748   0.563185   0.1248350   0.0015226  -0.000240  -0.000591   0.007617   0.004683  0.0000399  0.0000341    0.000555    0.000443
+1984   6   7  45858   0.014993   0.562276   0.1232230   0.0016872  -0.000451  -0.000631   0.003427   0.002061  0.0000422  0.0000411    0.000576    0.000441
+1984   6   8  45859   0.020430   0.561284   0.1214909   0.0017548  -0.000579  -0.000726   0.001861   0.001123  0.0000422  0.0000422    0.000576    0.000441
+1984   6   9  45860   0.025363   0.561082   0.1197528   0.0016998  -0.000582  -0.000865   0.001886   0.001139  0.0000422  0.0000422    0.000576    0.000441
+1984   6  10  45861   0.029711   0.561180   0.1181308   0.0015307  -0.000469  -0.001017   0.006375   0.003942  0.0000422  0.0000340    0.000576    0.000441
+1984   6  11  45862   0.033831   0.560507   0.1167201   0.0012887  -0.000290  -0.001147   0.006195   0.006024  0.0000258  0.0000337    0.000456    0.000440
+1984   6  12  45863   0.037857   0.559136   0.1155636   0.0010324  -0.000112  -0.001226   0.000863   0.001015  0.0000252  0.0000255    0.000449    0.000440
+1984   6  13  45864   0.041658   0.558023   0.1146455   0.0008175   0.000002  -0.001234   0.000812   0.000955  0.0000252  0.0000252    0.000449    0.000440
+1984   6  14  45865   0.045092   0.557847   0.1139042   0.0006793   0.000020  -0.001164   0.000858   0.001010  0.0000252  0.0000252    0.000449    0.000440
+1984   6  15  45866   0.048302   0.558087   0.1132567   0.0006283  -0.000053  -0.001025   0.003024   0.003446  0.0000252  0.0000234    0.000449    0.000440
+1984   6  16  45867   0.051696   0.557731   0.1126199   0.0006555  -0.000188  -0.000838   0.008083   0.006458  0.0000216  0.0000233    0.000387    0.000329
+1984   6  17  45868   0.055677   0.556730   0.1119247   0.0007424  -0.000344  -0.000634   0.001267   0.001014  0.0000214  0.0000215    0.000383    0.000322
+1984   6  18  45869   0.060344   0.556185   0.1111225   0.0008660  -0.000488  -0.000452   0.001110   0.000887  0.0000214  0.0000214    0.000383    0.000322
+1984   6  19  45870   0.065398   0.556836   0.1101883   0.0010020  -0.000601  -0.000330   0.001539   0.001225  0.0000214  0.0000214    0.000383    0.000322
+1984   6  20  45871   0.070326   0.557815   0.1091218   0.0011278  -0.000671  -0.000296   0.002669   0.002096  0.0000214  0.0000260    0.000383    0.000322
+1984   6  21  45872   0.074398   0.557822   0.1079431   0.0012253  -0.000691  -0.000359   0.004104   0.003948  0.0000307  0.0000268    0.000510    0.000457
+1984   6  22  45873   0.077392   0.556361   0.1066865   0.0012831  -0.000647  -0.000498   0.002370   0.002540  0.0000323  0.0000315    0.000529    0.000478
+1984   6  23  45874   0.080004   0.554283   0.1053945   0.0012943  -0.000528  -0.000667   0.001352   0.001503  0.0000323  0.0000323    0.000529    0.000478
+1984   6  24  45875   0.083482   0.553331   0.1041155   0.0012540  -0.000331  -0.000808   0.001338   0.001494  0.0000323  0.0000323    0.000529    0.000478
+1984   6  25  45876   0.087842   0.553450   0.1029028   0.0011601  -0.000073  -0.000877   0.004861   0.005290  0.0000323  0.0000305    0.000528    0.000478
+1984   6  26  45877   0.092147   0.553099   0.1018082   0.0010197   0.000215  -0.000864   0.007039   0.006493  0.0000287  0.0000303    0.000339    0.000691
+1984   6  27  45878   0.096084   0.551563   0.1008687   0.0008546   0.000491  -0.000798   0.000970   0.000907  0.0000284  0.0000285    0.000331    0.000725
+1984   6  28  45879   0.100188   0.549381   0.1000912   0.0007013   0.000719  -0.000735   0.000890   0.000834  0.0000284  0.0000284    0.000331    0.000725
+1984   6  29  45880   0.105032   0.547454   0.0994430   0.0006000   0.000879  -0.000730   0.000929   0.000872  0.0000284  0.0000284    0.000331    0.000725
+1984   6  30  45881   0.110518   0.546084   0.0988562   0.0005808   0.000969  -0.000802   0.002952   0.003129  0.0000284  0.0000252    0.000331    0.000724
+1984   7   1  45882   0.116006   0.544940   0.0982452   0.0006505   0.000991  -0.000921   0.005303   0.007965  0.0000219  0.0000250    0.000348    0.000300
+1984   7   2  45883   0.120859   0.543604   0.0975303   0.0007892   0.000956  -0.001019   0.001355   0.001079  0.0000215  0.0000217    0.000350    0.000290
+1984   7   3  45884   0.124841   0.542013   0.0966621   0.0009554   0.000864  -0.001027   0.001177   0.000933  0.0000215  0.0000215    0.000350    0.000290
+1984   7   4  45885   0.128334   0.540443   0.0956367   0.0010979   0.000720  -0.000908   0.001471   0.001183  0.0000215  0.0000215    0.000350    0.000290
+1984   7   5  45886   0.132227   0.539138   0.0944995   0.0011711   0.000534  -0.000686   0.002158   0.001798  0.0000215  0.0000224    0.000349    0.000290
+1984   7   6  45887   0.136724   0.537723   0.0933347   0.0011478   0.000332  -0.000433   0.006913   0.006321  0.0000232  0.0000225    0.000208    0.000167
+1984   7   7  45888   0.141405   0.535689   0.0922414   0.0010278   0.000148  -0.000244   0.001739   0.001613  0.0000234  0.0000233    0.000198    0.000158
+1984   7   8  45889   0.145638   0.533169   0.0913061   0.0008371   0.000017  -0.000187   0.000744   0.000681  0.0000234  0.0000234    0.000198    0.000158
+1984   7   9  45890   0.149132   0.530968   0.0905789   0.0006181  -0.000045  -0.000283   0.000771   0.000705  0.0000234  0.0000234    0.000198    0.000158
+1984   7  10  45891   0.152456   0.529303   0.0900645   0.0004145  -0.000053  -0.000488   0.002212   0.002277  0.0000234  0.0000252    0.000198    0.000158
+1984   7  11  45892   0.156428   0.527566   0.0897301   0.0002571  -0.000055  -0.000723   0.003705   0.006291  0.0000270  0.0000256    0.000316    0.000275
+1984   7  12  45893   0.160864   0.525012   0.0895222   0.0001606  -0.000111  -0.000914   0.001172   0.001036  0.0000278  0.0000274    0.000395    0.000379
+1984   7  13  45894   0.164818   0.521367   0.0893800   0.0001315  -0.000262  -0.001018   0.001063   0.000933  0.0000278  0.0000283    0.000395    0.000380
+1984   7  14  45895   0.167703   0.517174   0.0892356   0.0001761  -0.000500  -0.001037   0.001103   0.000969  0.0000289  0.0000609    0.000410    0.000394
+1984   7  15  45896   0.170267   0.513813   0.0890126   0.0002961  -0.000742  -0.001006   0.003724   0.003266  0.0000940  0.0001528    0.001333    0.001279
+1984   7  16  45897   0.173833   0.512328   0.0886371   0.0004766  -0.000872  -0.000949   0.010258   0.007903  0.0002768  0.0000645    0.004300    0.003258
+1984   7  17  45898   0.178583   0.511929   0.0880616   0.0006813  -0.000816  -0.000849   0.001850   0.001404  0.0000350  0.0001508    0.000573    0.000412
+1984   7  18  45899   0.183391   0.510593   0.0872842   0.0008606  -0.000599  -0.000655   0.000879   0.000666  0.0000249  0.0000299    0.000408    0.000293
+1984   7  19  45900   0.187737   0.508075   0.0863557   0.0009648  -0.000321  -0.000365   0.001165   0.000882  0.0000248  0.0000277    0.000407    0.000292
+1984   7  20  45901   0.191471   0.505911   0.0853724   0.0009635  -0.000116  -0.000052   0.001895   0.001598  0.0000305  0.0000351    0.000377    0.000303
+1984   7  21  45902   0.195035   0.504058   0.0844459   0.0008675  -0.000062   0.000143   0.000825   0.000928  0.0000454  0.0000342    0.000343    0.000307
+1984   7  22  45903   0.198914   0.501061   0.0836520   0.0007306  -0.000111   0.000100   0.000833   0.000881  0.0000379  0.0000381    0.000301    0.000256
+1984   7  23  45904   0.202782   0.496814   0.0829958   0.0006128  -0.000053  -0.000225   0.000940   0.000867  0.0000308  0.0000437    0.000257    0.000208
+1984   7  24  45905   0.205974   0.493124   0.0824328   0.0005410   0.000310  -0.000772   0.001499   0.001296  0.0000496  0.0001143    0.000415    0.000328
+1984   7  25  45906   0.209521   0.490448   0.0819119   0.0005072   0.000653  -0.001259   0.007094   0.002877  0.0001978  0.0002844    0.001566    0.000898
+1984   7  26  45907   0.214178   0.488216   0.0814032   0.0005023   0.000679  -0.001440   0.013550   0.003148  0.0005191  0.0001614    0.003271    0.001173
+1984   7  27  45908   0.218920   0.485893   0.0808772   0.0005445   0.000428  -0.001257   0.003176   0.001842  0.0001250  0.0002951    0.000921    0.001373
+1984   7  28  45909   0.222518   0.483230   0.0802750   0.0006672   0.000113  -0.000819   0.002309   0.001124  0.0000711  0.0000819    0.000535    0.000762
+1984   7  29  45910   0.225275   0.480290   0.0795075   0.0008863  -0.000055  -0.000332   0.001389   0.000802  0.0000387  0.0000477    0.000360    0.000380
+1984   7  30  45911   0.229402   0.477491   0.0784857   0.0011728  -0.000082  -0.000020   0.000939   0.000817  0.0000243  0.0000311    0.000299    0.000225
+1984   7  31  45912   0.233112   0.475192   0.0771722   0.0014506  -0.000116  -0.000008   0.001399   0.001353  0.0000236  0.0000347    0.000313    0.000217
+1984   8   1  45913   0.236390   0.472758   0.0756194   0.0016300  -0.000121  -0.000229   0.002256   0.002199  0.0000452  0.0000280    0.000810    0.000546
+1984   8   2  45914   0.239368   0.469388   0.0739598   0.0016515  -0.000007  -0.000516   0.001454   0.001502  0.0000325  0.0000356    0.000617    0.000435
+1984   8   3  45915   0.242109   0.465578   0.0723617   0.0015094   0.000214  -0.000691   0.001519   0.001469  0.0000261  0.0000269    0.000457    0.000346
+1984   8   4  45916   0.245257   0.462234   0.0709725   0.0012493   0.000262  -0.000670   0.001022   0.000768  0.0000213  0.0000237    0.000228    0.000224
+1984   8   5  45917   0.249209   0.459535   0.0698759   0.0009447  -0.000058  -0.000465   0.000730   0.000533  0.0000213  0.0000215    0.000231    0.000213
+1984   8   6  45918   0.253142   0.456695   0.0690780   0.0006698  -0.000279  -0.000124   0.000737   0.000535  0.0000218  0.0000220    0.000273    0.000210
+1984   8   7  45919   0.255704   0.452811   0.0685174   0.0004818   0.000544   0.000300   0.000739   0.000628  0.0000227  0.0000271    0.000344    0.000266
+1984   8   8  45920   0.257936   0.449411   0.0680875   0.0004076   0.001959   0.000620   0.000876   0.000823  0.0000324  0.0000612    0.000540    0.000443
+1984   8   9  45921   0.260643   0.446468   0.0676733   0.0004417   0.002945   0.000712   0.002501   0.002133  0.0000996  0.0000801    0.001632    0.001369
+1984   8  10  45922   0.263473   0.442730   0.0671789   0.0005585   0.002859   0.000574   0.003864   0.002808  0.0001278  0.0000615    0.002230    0.001807
+1984   8  11  45923   0.266122   0.438567   0.0665384   0.0007276   0.001846   0.000285   0.002502   0.001581  0.0000234  0.0000754    0.000440    0.000344
+1984   8  12  45924   0.268707   0.435096   0.0657147   0.0009224   0.000547  -0.000033   0.001350   0.000879  0.0000231  0.0000233    0.000436    0.000341
+1984   8  13  45925   0.271433   0.432140   0.0646937   0.0011208  -0.000361  -0.000272   0.001094   0.000716  0.0000231  0.0000231    0.000436    0.000341
+1984   8  14  45926   0.274432   0.429016   0.0634814   0.0013020  -0.000592  -0.000379   0.002489   0.001637  0.0000231  0.0000219    0.000436    0.000341
+1984   8  15  45927   0.277672   0.425553   0.0621047   0.0014434  -0.000290  -0.000355   0.007807   0.005758  0.0000206  0.0000218    0.000509    0.000308
+1984   8  16  45928   0.280863   0.421980   0.0606134   0.0015245   0.000177  -0.000246   0.001527   0.001178  0.0000204  0.0000205    0.000519    0.000305
+1984   8  17  45929   0.283488   0.418625   0.0590750   0.0015329   0.000438  -0.000101   0.000870   0.000673  0.0000204  0.0000204    0.000519    0.000305
+1984   8  18  45930   0.285212   0.415615   0.0575636   0.0014682   0.000289   0.000037   0.000857   0.000663  0.0000204  0.0000204    0.000519    0.000305
+1984   8  19  45931   0.286312   0.412686   0.0561492   0.0013404  -0.000215   0.000138   0.000870   0.000673  0.0000204  0.0000237    0.000519    0.000305
+1984   8  20  45932   0.287512   0.409359   0.0548878   0.0011687  -0.000812   0.000171   0.002811   0.002351  0.0000270  0.0000241    0.000562    0.000357
+1984   8  21  45933   0.289384   0.405295   0.0538107   0.0009844  -0.001182   0.000106   0.002015   0.001674  0.0000278  0.0000274    0.000566    0.000363
+1984   8  22  45934   0.291772   0.400612   0.0529091   0.0008333  -0.001112  -0.000071   0.001412   0.001167  0.0000278  0.0000278    0.000566    0.000363
+1984   8  23  45935   0.293397   0.396287   0.0521218   0.0007692  -0.000645  -0.000335   0.001334   0.001096  0.0000278  0.0000222    0.000561    0.000361
+1984   8  24  45936   0.293787   0.392343   0.0513359   0.0008366  -0.000138  -0.000603   0.001967   0.002422  0.0000165  0.0000207    0.000202    0.000162
+1984   8  25  45937   0.293738   0.388085   0.0504089   0.0010482  -0.000005  -0.000779   0.000785   0.002219  0.0000137  0.0000156    0.000160    0.000130
+1984   8  26  45938   0.293757   0.384313   0.0492093   0.0013703  -0.000383  -0.000816   0.000648   0.001293  0.0000147  0.0000183    0.000173    0.000141
+1984   8  27  45939   0.293968   0.381114   0.0476624   0.0017249  -0.000879  -0.000769   0.001010   0.000867  0.0000230  0.0000196    0.000285    0.000224
+1984   8  28  45940   0.294502   0.377077   0.0457845   0.0020099  -0.000862  -0.000748   0.001285   0.001145  0.0000246  0.0000183    0.000303    0.000215
+1984   8  29  45941   0.295712   0.372574   0.0436917   0.0021433  -0.000443  -0.000728   0.000749   0.001001  0.0000136  0.0000148    0.000208    0.000142
+1984   8  30  45942   0.297375   0.368657   0.0415544   0.0021047  -0.000212  -0.000620   0.000409   0.000328  0.0000051  0.0000087    0.000148    0.000152
+1984   8  31  45943   0.298399   0.365481   0.0395274   0.0019349  -0.000466  -0.000477   0.000259   0.000198  0.0000038  0.0000059    0.000125    0.000186
+1984   9   1  45944   0.298329   0.362249   0.0377072   0.0016978  -0.000862  -0.000441   0.000353   0.000289  0.0000067  0.0000046    0.000197    0.000263
+1984   9   2  45945   0.298658   0.358971   0.0361303   0.0014483  -0.000628  -0.000571   0.000248   0.000223  0.0000054  0.0000052    0.000167    0.000217
+1984   9   3  45946   0.299507   0.355682   0.0347910   0.0012254   0.000031  -0.000739   0.000179   0.000158  0.0000037  0.0000045    0.000123    0.000169
+1984   9   4  45947   0.300114   0.352164   0.0336507   0.0010595   0.000407  -0.000771   0.000223   0.000197  0.0000037  0.0000085    0.000122    0.000167
+1984   9   5  45948   0.300750   0.348151   0.0326416   0.0009707   0.000315  -0.000634   0.001352   0.001121  0.0000133  0.0000129    0.000291    0.000469
+1984   9   6  45949   0.302021   0.343690   0.0316822   0.0009625  -0.000054  -0.000415   0.001328   0.001048  0.0000221  0.0000177    0.000335    0.000585
+1984   9   7  45950   0.303697   0.339526   0.0306960   0.0010228  -0.000370  -0.000247   0.001561   0.001231  0.0000222  0.0000221    0.000335    0.000585
+1984   9   8  45951   0.305402   0.335751   0.0296246   0.0011298  -0.000454  -0.000206   0.003399   0.002568  0.0000222  0.0000215    0.000335    0.000585
+1984   9   9  45952   0.306803   0.332005   0.0284335   0.0012591  -0.000331  -0.000276   0.002432   0.001941  0.0000209  0.0000215    0.000356    0.000482
+1984   9  10  45953   0.307507   0.328141   0.0271123   0.0013871  -0.000134  -0.000376   0.000657   0.000548  0.0000208  0.0000208    0.000358    0.000476
+1984   9  11  45954   0.307370   0.324139   0.0256728   0.0014933  -0.000008  -0.000401   0.000654   0.000546  0.0000208  0.0000208    0.000358    0.000476
+1984   9  12  45955   0.306698   0.320128   0.0241448   0.0015629  -0.000031  -0.000277   0.000665   0.000555  0.0000208  0.0000208    0.000358    0.000476
+1984   9  13  45956   0.306408   0.316321   0.0225684   0.0015886  -0.000186   0.000004   0.001951   0.001627  0.0000208  0.0000249    0.000358    0.000475
+1984   9  14  45957   0.307329   0.312802   0.0209870   0.0015695  -0.000392   0.000381   0.009515   0.006865  0.0000291  0.0000256    0.000414    0.000421
+1984   9  15  45958   0.309149   0.309291   0.0194431   0.0015091  -0.000553   0.000753   0.001950   0.001559  0.0000303  0.0000297    0.000420    0.000417
+1984   9  16  45959   0.310276   0.305234   0.0179748   0.0014149  -0.000606   0.001007   0.001239   0.000993  0.0000303  0.0000303    0.000420    0.000417
+1984   9  17  45960   0.309881   0.300579   0.0166114   0.0013003  -0.000536   0.001064   0.001666   0.001325  0.0000303  0.0000303    0.000420    0.000417
+1984   9  18  45961   0.309599   0.296261   0.0153646   0.0011891  -0.000380   0.000905   0.004010   0.002930  0.0000303  0.0000316    0.000420    0.000417
+1984   9  19  45962   0.310648   0.292558   0.0142149   0.0011178  -0.000202   0.000574   0.004168   0.002550  0.0000328  0.0000317    0.000487    0.000374
+1984   9  20  45963   0.311591   0.288286   0.0131008   0.0011287  -0.000062   0.000164   0.002483   0.001775  0.0000330  0.0000329    0.000494    0.000371
+1984   9  21  45964   0.311278   0.283271   0.0119213   0.0012543   0.000001  -0.000213   0.001553   0.001274  0.0000330  0.0000330    0.000494    0.000371
+1984   9  22  45965   0.311225   0.279886   0.0105565   0.0014964  -0.000020  -0.000461   0.001852   0.001539  0.0000330  0.0000330    0.000494    0.000371
+1984   9  23  45966   0.311920   0.277563   0.0089071   0.0018134  -0.000116  -0.000535   0.003247   0.002568  0.0000330  0.0000289    0.000494    0.000371
+1984   9  24  45967   0.312647   0.274476   0.0069357   0.0021260  -0.000267  -0.000450   0.002522   0.002220  0.0000248  0.0000287    0.000317    0.000469
+1984   9  25  45968   0.312962   0.270404   0.0046918   0.0023450  -0.000452  -0.000275   0.000821   0.000824  0.0000244  0.0000246    0.000309    0.000481
+1984   9  26  45969   0.312865   0.266095   0.0023029   0.0024083  -0.000653  -0.000103   0.000818   0.000822  0.0000244  0.0000244    0.000309    0.000481
+1984   9  27  45970   0.312660   0.262271  -0.0000667   0.0023068  -0.000846  -0.000015   0.000847   0.000852  0.0000244  0.0000244    0.000309    0.000481
+1984   9  28  45971   0.312680   0.258719  -0.0022709   0.0020853  -0.001002  -0.000040   0.002847   0.002889  0.0000244  0.0000222    0.000309    0.000481
+1984   9  29  45972   0.312985   0.254773  -0.0042259   0.0018196  -0.001093  -0.000153   0.008202   0.007304  0.0000201  0.0000221    0.000403    0.000397
+1984   9  30  45973   0.313130   0.250380  -0.0059249   0.0015827  -0.001095  -0.000289   0.001181   0.001047  0.0000198  0.0000199    0.000418    0.000391
+1984  10   1  45974   0.312382   0.246339  -0.0074217   0.0014206  -0.001005  -0.000377   0.000841   0.000746  0.0000198  0.0000198    0.000418    0.000391
+1984  10   2  45975   0.310628   0.243140  -0.0088006   0.0013482  -0.000839  -0.000375   0.001190   0.001053  0.0000198  0.0000198    0.000418    0.000391
+1984  10   3  45976   0.308847   0.239983  -0.0101489   0.0013583  -0.000634  -0.000290   0.003272   0.002815  0.0000198  0.0000202    0.000418    0.000391
+1984  10   4  45977   0.307797   0.236194  -0.0115408   0.0014327  -0.000439  -0.000169   0.004291   0.004732  0.0000207  0.0000203    0.000330    0.000311
+1984  10   5  45978   0.307078   0.232220  -0.0130296   0.0015483  -0.000299  -0.000082   0.001830   0.001734  0.0000208  0.0000207    0.000324    0.000306
+1984  10   6  45979   0.305963   0.228523  -0.0146436   0.0016784  -0.000247  -0.000084   0.000974   0.000889  0.0000208  0.0000208    0.000324    0.000306
+1984  10   7  45980   0.304297   0.224699  -0.0163838   0.0017976  -0.000289  -0.000197   0.000945   0.000856  0.0000208  0.0000208    0.000324    0.000306
+1984  10   8  45981   0.302960   0.221232  -0.0182281   0.0018882  -0.000400  -0.000398   0.002981   0.002445  0.0000208  0.0000214    0.000324    0.000306
+1984  10   9  45982   0.302380   0.218559  -0.0201428   0.0019424  -0.000536  -0.000626   0.004269   0.003276  0.0000221  0.0000215    0.000358    0.000377
+1984  10  10  45983   0.301087   0.215034  -0.0220916   0.0019564  -0.000635  -0.000806   0.001437   0.001693  0.0000222  0.0000222    0.000362    0.000387
+1984  10  11  45984   0.297793   0.209167  -0.0240337   0.0019220  -0.000645  -0.000874   0.000997   0.001301  0.0000222  0.0000222    0.000362    0.000387
+1984  10  12  45985   0.294641   0.203630  -0.0259177   0.0018305  -0.000536  -0.000797   0.000836   0.001131  0.0000222  0.0000222    0.000362    0.000387
+1984  10  13  45986   0.293209   0.200710  -0.0276844   0.0016843  -0.000321  -0.000590   0.002043   0.002326  0.0000222  0.0000236    0.000362    0.000387
+1984  10  14  45987   0.291506   0.198217  -0.0292859   0.0015072  -0.000052  -0.000309   0.003544   0.002964  0.0000250  0.0000238    0.000327    0.000412
+1984  10  15  45988   0.288613   0.194316  -0.0307085   0.0013406   0.000195  -0.000036   0.001593   0.001077  0.0000254  0.0000252    0.000324    0.000414
+1984  10  16  45989   0.286705   0.190208  -0.0319857   0.0012303   0.000343   0.000151   0.001269   0.000839  0.0000254  0.0000254    0.000324    0.000414
+1984  10  17  45990   0.287289   0.187490  -0.0331950   0.0012136   0.000345   0.000202   0.001747   0.001133  0.0000254  0.0000254    0.000324    0.000414
+1984  10  18  45991   0.287762   0.185118  -0.0344446   0.0013145   0.000201   0.000112   0.002951   0.001806  0.0000254  0.0000222    0.000324    0.000414
+1984  10  19  45992   0.286147   0.182203  -0.0358572   0.0015369  -0.000037  -0.000072   0.004578   0.004357  0.0000190  0.0000220    0.000278    0.000393
+1984  10  20  45993   0.283275   0.179079  -0.0375449   0.0018536  -0.000296  -0.000272   0.001233   0.001450  0.0000186  0.0000188    0.000275    0.000392
+1984  10  21  45994   0.280903   0.176053  -0.0395730   0.0021995  -0.000506  -0.000406   0.000590   0.000698  0.0000186  0.0000186    0.000275    0.000392
+1984  10  22  45995   0.279697   0.172848  -0.0419258   0.0024844  -0.000625  -0.000427   0.000661   0.000782  0.0000186  0.0000186    0.000275    0.000392
+1984  10  23  45996   0.278895   0.169349  -0.0444976   0.0026262  -0.000656  -0.000340   0.002490   0.002856  0.0000186  0.0000180    0.000275    0.000392
+1984  10  24  45997   0.277395   0.165798  -0.0471202   0.0025865  -0.000631  -0.000199   0.005085   0.005417  0.0000174  0.0000180    0.000287    0.000313
+1984  10  25  45998   0.275105   0.162584  -0.0496183   0.0023868  -0.000588  -0.000077   0.000720   0.000881  0.0000173  0.0000174    0.000288    0.000308
+1984  10  26  45999   0.272831   0.159919  -0.0518648   0.0020958  -0.000558  -0.000033   0.000677   0.000830  0.0000173  0.0000173    0.000288    0.000308
+1984  10  27  46000   0.271184   0.157618  -0.0538110   0.0017967  -0.000547  -0.000088   0.000679   0.000832  0.0000173  0.0000173    0.000288    0.000308
+1984  10  28  46001   0.269650   0.154939  -0.0554838   0.0015570  -0.000542  -0.000211   0.001295   0.001515  0.0000173  0.0000187    0.000288    0.000308
+1984  10  29  46002   0.267212   0.151175  -0.0569621   0.0014132  -0.000525  -0.000352   0.003687   0.003116  0.0000201  0.0000188    0.000311    0.000394
+1984  10  30  46003   0.263726   0.146517  -0.0583466   0.0013723  -0.000487  -0.000457   0.001248   0.001411  0.0000203  0.0000202    0.000313    0.000404
+1984  10  31  46004   0.260615   0.142578  -0.0597350   0.0014192  -0.000431  -0.000500   0.000751   0.000887  0.0000203  0.0000203    0.000313    0.000404
+1984  11   1  46005   0.259054   0.140601  -0.0612035   0.0015258  -0.000370  -0.000482   0.000989   0.001189  0.0000203  0.0000204    0.000313    0.000404
+1984  11   2  46006   0.257533   0.138792  -0.0627957   0.0016591  -0.000324  -0.000426   0.001714   0.002185  0.0000204  0.0000238    0.000313    0.000404
+1984  11   3  46007   0.255105   0.135772  -0.0645221   0.0017901  -0.000307  -0.000366   0.007952   0.007251  0.0000272  0.0000242    0.000444    0.000478
+1984  11   4  46008   0.252271   0.131714  -0.0663680   0.0018977  -0.000323  -0.000326   0.002630   0.002202  0.0000280  0.0000276    0.000463    0.000485
+1984  11   5  46009   0.250107   0.127912  -0.0683025   0.0019676  -0.000362  -0.000315   0.001293   0.001082  0.0000280  0.0000280    0.000463    0.000485
+1984  11   6  46010   0.248962   0.125364  -0.0702834   0.0019876  -0.000409  -0.000328   0.001553   0.001299  0.0000280  0.0000280    0.000463    0.000485
+1984  11   7  46011   0.247898   0.123290  -0.0722560   0.0019449  -0.000443  -0.000348   0.005398   0.004368  0.0000280  0.0000254    0.000463    0.000485
+1984  11   8  46012   0.245701   0.120315  -0.0741531   0.0018312  -0.000448  -0.000358   0.006183   0.004984  0.0000228  0.0000252    0.000411    0.000513
+1984  11   9  46013   0.242272   0.116490  -0.0759039   0.0016538  -0.000424  -0.000347   0.000923   0.000781  0.0000224  0.0000226    0.000407    0.000515
+1984  11  10  46014   0.238488   0.112944  -0.0774551   0.0014429  -0.000378  -0.000310   0.000887   0.000751  0.0000224  0.0000224    0.000407    0.000515
+1984  11  11  46015   0.235255   0.110530  -0.0787957   0.0012472  -0.000325  -0.000250   0.000896   0.000759  0.0000224  0.0000224    0.000407    0.000515
+1984  11  12  46016   0.232691   0.108698  -0.0799673   0.0011162  -0.000280  -0.000172   0.002351   0.001967  0.0000224  0.0000239    0.000407    0.000515
+1984  11  13  46017   0.230336   0.106240  -0.0810548   0.0010821  -0.000254  -0.000087   0.008338   0.006019  0.0000253  0.0000240    0.000397    0.000528
+1984  11  14  46018   0.227862   0.102905  -0.0821627   0.0011553  -0.000245  -0.000012   0.001409   0.001204  0.0000256  0.0000254    0.000396    0.000529
+1984  11  15  46019   0.225465   0.100089  -0.0833958   0.0013297  -0.000245   0.000029   0.000957   0.000820  0.0000256  0.0000256    0.000396    0.000529
+1984  11  16  46020   0.223415   0.098853  -0.0848462   0.0015860  -0.000241   0.000017   0.001285   0.001100  0.0000256  0.0000256    0.000396    0.000529
+1984  11  17  46021   0.221445   0.098047  -0.0865792   0.0018866  -0.000222  -0.000058   0.002084   0.001773  0.0000255  0.0000216    0.000396    0.000529
+1984  11  18  46022   0.218977   0.096424  -0.0886118   0.0021718  -0.000183  -0.000179   0.002172   0.002128  0.0000176  0.0000214    0.000222    0.000584
+1984  11  19  46023   0.215830   0.093787  -0.0908933   0.0023713  -0.000128  -0.000314   0.001192   0.001307  0.0000172  0.0000174    0.000216    0.000590
+1984  11  20  46024   0.212576   0.090890  -0.0933075   0.0024299  -0.000066  -0.000425   0.000775   0.000879  0.0000172  0.0000172    0.000216    0.000590
+1984  11  21  46025   0.210417   0.088915  -0.0957014   0.0023319  -0.000006  -0.000484   0.000835   0.000945  0.0000172  0.0000172    0.000216    0.000590
+1984  11  22  46026   0.208667   0.087584  -0.0979318   0.0021106   0.000050  -0.000483   0.002141   0.002157  0.0000172  0.0000178    0.000216    0.000590
+1984  11  23  46027   0.205596   0.085787  -0.0999083   0.0018348   0.000105  -0.000438   0.002631   0.002408  0.0000184  0.0000179    0.000254    0.000512
+1984  11  24  46028   0.201138   0.083391  -0.1016147   0.0015798   0.000164  -0.000372   0.000650   0.000675  0.0000185  0.0000185    0.000259    0.000506
+1984  11  25  46029   0.196484   0.080915  -0.1031009   0.0013999   0.000228  -0.000311   0.000642   0.000667  0.0000185  0.0000185    0.000259    0.000506
+1984  11  26  46030   0.192757   0.078835  -0.1044535   0.0013140   0.000291  -0.000272   0.000650   0.000675  0.0000185  0.0000185    0.000259    0.000506
+1984  11  27  46031   0.189810   0.076937  -0.1057626   0.0013128   0.000342  -0.000255   0.001741   0.001792  0.0000185  0.0000184    0.000259    0.000506
+1984  11  28  46032   0.186620   0.074617  -0.1071016   0.0013745   0.000368  -0.000253   0.005406   0.004986  0.0000183  0.0000184    0.000307    0.000264
+1984  11  29  46033   0.182512   0.071661  -0.1085228   0.0014782   0.000358  -0.000254   0.000871   0.000864  0.0000183  0.0000183    0.000313    0.000256
+1984  11  30  46034   0.177894   0.068729  -0.1100595   0.0016038   0.000308  -0.000254   0.000507   0.000503  0.0000183  0.0000183    0.000313    0.000256
+1984  12   1  46035   0.173631   0.066550  -0.1117238   0.0017277   0.000219  -0.000256   0.000501   0.000497  0.0000183  0.0000182    0.000313    0.000256
+1984  12   2  46036   0.170085   0.064851  -0.1135015   0.0018241   0.000100  -0.000267   0.000548   0.000541  0.0000182  0.0000176    0.000313    0.000256
+1984  12   3  46037   0.166965   0.062601  -0.1153535   0.0018716  -0.000031  -0.000296   0.003250   0.002127  0.0000170  0.0000176    0.000216    0.000281
+1984  12   4  46038   0.163782   0.059163  -0.1172243   0.0018590  -0.000154  -0.000336   0.001285   0.001192  0.0000169  0.0000169    0.000211    0.000284
+1984  12   5  46039   0.160294   0.055244  -0.1190520   0.0017847  -0.000249  -0.000366   0.000678   0.000676  0.0000169  0.0000169    0.000211    0.000284
+1984  12   6  46040   0.156624   0.052862  -0.1207778   0.0016567  -0.000301  -0.000369   0.000720   0.000724  0.0000169  0.0000169    0.000211    0.000284
+1984  12   7  46041   0.152981   0.052000  -0.1223562   0.0014944  -0.000310  -0.000331   0.002541   0.002515  0.0000169  0.0000176    0.000212    0.000284
+1984  12   8  46042   0.149365   0.050990  -0.1237675   0.0013300  -0.000289  -0.000269   0.004152   0.004193  0.0000183  0.0000176    0.000262    0.000270
+1984  12   9  46043   0.145500   0.049049  -0.1250294   0.0012018  -0.000264  -0.000214   0.000642   0.000695  0.0000184  0.0000183    0.000268    0.000269
+1984  12  10  46044   0.141084   0.046491  -0.1261963   0.0011420  -0.000261  -0.000209   0.000619   0.000670  0.0000184  0.0000184    0.000268    0.000269
+1984  12  11  46045   0.136090   0.044122  -0.1273462   0.0011665  -0.000297  -0.000282   0.000622   0.000674  0.0000184  0.0000184    0.000268    0.000269
+1984  12  12  46046   0.130968   0.042511  -0.1285619   0.0012723  -0.000374  -0.000430   0.001460   0.001613  0.0000184  0.0000189    0.000268    0.000269
+1984  12  13  46047   0.126289   0.041690  -0.1299148   0.0014414  -0.000470  -0.000630   0.004324   0.006573  0.0000193  0.0000189    0.000265    0.000367
+1984  12  14  46048   0.122136   0.041118  -0.1314540   0.0016443  -0.000549  -0.000834   0.001085   0.001341  0.0000194  0.0000194    0.000265    0.000381
+1984  12  15  46049   0.117786   0.039983  -0.1331952   0.0018396  -0.000569  -0.001002   0.000703   0.000861  0.0000194  0.0000194    0.000265    0.000381
+1984  12  16  46050   0.112753   0.038028  -0.1351080   0.0019771  -0.000507  -0.001102   0.000927   0.001125  0.0000194  0.0000194    0.000265    0.000381
+1984  12  17  46051   0.107894   0.036025  -0.1371108   0.0020102  -0.000368  -0.001130   0.001528   0.001789  0.0000194  0.0000191    0.000265    0.000381
+1984  12  18  46052   0.103163   0.034440  -0.1390842   0.0019155  -0.000189  -0.001096   0.003358   0.002867  0.0000189  0.0000191    0.000303    0.000460
+1984  12  19  46053   0.097882   0.033123  -0.1409033   0.0017073  -0.000020  -0.001024   0.001451   0.001406  0.0000188  0.0000189    0.000307    0.000470
+1984  12  20  46054   0.091835   0.031753  -0.1424774   0.0014362   0.000092  -0.000937   0.000747   0.000743  0.0000188  0.0000188    0.000307    0.000470
+1984  12  21  46055   0.085637   0.030346  -0.1437780   0.0011714   0.000131  -0.000850   0.000994   0.000991  0.0000188  0.0000167    0.000307    0.000464
+1984  12  22  46056   0.079741   0.029358  -0.1448444   0.0009755   0.000115  -0.000768   0.001117   0.001175  0.0000145  0.0000161    0.000248    0.000200
+1984  12  23  46057   0.074839   0.028375  -0.1457656   0.0008848   0.000083  -0.000689   0.000450   0.000480  0.0000134  0.0000140    0.000231    0.000171
+1984  12  24  46058   0.071554   0.026368  -0.1466509   0.0009041   0.000072  -0.000614   0.000544   0.000579  0.0000134  0.0000134    0.000231    0.000171
+1984  12  25  46059   0.068980   0.023977  -0.1476013   0.0010135   0.000096  -0.000549   0.001287   0.001389  0.0000134  0.0000134    0.000231    0.000171
+1984  12  26  46060   0.065509   0.022752  -0.1486925   0.0011817   0.000142  -0.000508   0.003830   0.004682  0.0000134  0.0000168    0.000231    0.000171
+1984  12  27  46061   0.060747   0.022821  -0.1499673   0.0013759   0.000185  -0.000501   0.014847   0.010430  0.0000201  0.0000181    0.000369    0.000287
+1984  12  28  46062   0.055447   0.023274  -0.1514375   0.0015664   0.000202  -0.000527   0.010394   0.007431  0.0000228  0.0000215    0.000432    0.000347
+1984  12  29  46063   0.050669   0.023211  -0.1530864   0.0017275   0.000181  -0.000573   0.001815   0.001369  0.0000228  0.0000228    0.000432    0.000347
+1984  12  30  46064   0.046958   0.022601  -0.1548739   0.0018381   0.000124  -0.000611   0.001114   0.000841  0.0000228  0.0000228    0.000432    0.000347
+1984  12  31  46065   0.044182   0.021972  -0.1567421   0.0018845   0.000051  -0.000619   0.001104   0.000833  0.0000228  0.0000228    0.000432    0.000347
+1985   1   1  46066   0.041690   0.021759  -0.1586237   0.0018628  -0.000007  -0.000580   0.001448   0.001114  0.0000228  0.0000223    0.000432    0.000347
+1985   1   2  46067   0.038735   0.022066  -0.1604526   0.0017803  -0.000014  -0.000503   0.003755   0.005413  0.0000217  0.0000222    0.000296    0.000257
+1985   1   3  46068   0.035024   0.022699  -0.1621751   0.0016544   0.000051  -0.000411   0.001508   0.001636  0.0000217  0.0000217    0.000289    0.000252
+1985   1   4  46069   0.031055   0.023325  -0.1637596   0.0015100   0.000188  -0.000334   0.000749   0.000788  0.0000217  0.0000217    0.000289    0.000252
+1985   1   5  46070   0.027598   0.023773  -0.1652035   0.0013790   0.000369  -0.000305   0.000870   0.000915  0.0000217  0.0000216    0.000289    0.000252
+1985   1   6  46071   0.024111   0.024238  -0.1665383   0.0012971   0.000544  -0.000336   0.002828   0.003168  0.0000216  0.0000179    0.000289    0.000252
+1985   1   7  46072   0.019663   0.024926  -0.1678297   0.0012972   0.000659  -0.000418   0.002693   0.003079  0.0000142  0.0000177    0.000306    0.000356
+1985   1   8  46073   0.014642   0.025566  -0.1691691   0.0013962   0.000674  -0.000521   0.000430   0.000463  0.0000139  0.0000140    0.000308    0.000371
+1985   1   9  46074   0.010177   0.025813  -0.1706526   0.0015856   0.000577  -0.000601   0.000417   0.000449  0.0000139  0.0000139    0.000308    0.000371
+1985   1  10  46075   0.006760   0.025983  -0.1723540   0.0018277   0.000387  -0.000624   0.000468   0.000504  0.0000139  0.0000139    0.000308    0.000371
+1985   1  11  46076   0.003335   0.027268  -0.1742997   0.0020654   0.000149  -0.000580   0.001735   0.001971  0.0000139  0.0000211    0.000308    0.000371
+1985   1  12  46077  -0.001295   0.030210  -0.1764561   0.0022379  -0.000086  -0.000493   0.004466   0.008414  0.0000283  0.0000234    0.000485    0.000359
+1985   1  13  46078  -0.006406   0.033055  -0.1787342   0.0022990  -0.000272  -0.000402   0.002424   0.001718  0.0000329  0.0000306    0.000518    0.000358
+1985   1  14  46079  -0.010098   0.033197  -0.1810107   0.0022298  -0.000380  -0.000353   0.002480   0.001698  0.0000329  0.0000329    0.000518    0.000358
+1985   1  15  46080  -0.011891   0.030463  -0.1831580   0.0020433  -0.000401  -0.000373   0.003160   0.002127  0.0000329  0.0000329    0.000518    0.000358
+1985   1  16  46081  -0.013930   0.028339  -0.1850766   0.0017814  -0.000342  -0.000460   0.004416   0.002880  0.0000329  0.0000310    0.000518    0.000358
+1985   1  17  46082  -0.016962   0.029477  -0.1867197   0.0015051  -0.000218  -0.000593   0.007166   0.007921  0.0000291  0.0000308    0.000525    0.000449
+1985   1  18  46083  -0.020273   0.033575  -0.1881050   0.0012769  -0.000044  -0.000737   0.005758   0.004319  0.0000288  0.0000289    0.000525    0.000460
+1985   1  19  46084  -0.023285   0.037915  -0.1893059   0.0011420   0.000160  -0.000868   0.003862   0.002318  0.0000288  0.0000288    0.000525    0.000460
+1985   1  20  46085  -0.026808   0.039852  -0.1904260   0.0011130   0.000367  -0.000963   0.003487   0.002021  0.0000288  0.0000288    0.000525    0.000460
+1985   1  21  46086  -0.030369   0.039760  -0.1915637   0.0011702   0.000530  -0.001012   0.005792   0.002891  0.0000288  0.0000419    0.000525    0.000460
+1985   1  22  46087  -0.032917   0.040216  -0.1927861   0.0012745   0.000587  -0.001013   0.006092   0.003103  0.0000550  0.0000436    0.000872    0.000694
+1985   1  23  46088  -0.035246   0.042671  -0.1941190   0.0013869   0.000492  -0.000968   0.003669   0.003316  0.0000583  0.0000484    0.000927    0.000712
+1985   1  24  46089  -0.039779   0.045800  -0.1955546   0.0014836   0.000245  -0.000885   0.002947   0.002323  0.0000419  0.0000424    0.000806    0.000592
+1985   1  25  46090  -0.045516   0.046666  -0.1970725   0.0015596  -0.000084  -0.000776   0.002750   0.001594  0.0000265  0.0000320    0.000608    0.000424
+1985   1  26  46091  -0.049426   0.046685  -0.1986546   0.0016101  -0.000360  -0.000659   0.003198   0.001593  0.0000222  0.0000241    0.000531    0.000365
+1985   1  27  46092  -0.051911   0.048624  -0.2002710   0.0016193  -0.000492  -0.000554   0.006636   0.004932  0.0000217  0.0000234    0.000506    0.000329
+1985   1  28  46093  -0.055060   0.051730  -0.2018729   0.0015744  -0.000481  -0.000484   0.001415   0.001963  0.0000246  0.0000232    0.000428    0.000222
+1985   1  29  46094  -0.059440   0.053424  -0.2034039   0.0014736  -0.000390  -0.000453   0.000859   0.001193  0.0000246  0.0000246    0.000428    0.000221
+1985   1  30  46095  -0.063865   0.052619  -0.2048111   0.0013261  -0.000291  -0.000450   0.001224   0.001659  0.0000246  0.0000246    0.000428    0.000221
+1985   1  31  46096  -0.067213   0.052213  -0.2060545   0.0011498  -0.000223  -0.000452   0.002531   0.003017  0.0000246  0.0000269    0.000428    0.000222
+1985   2   1  46097  -0.069193   0.053940  -0.2071171   0.0009739  -0.000177  -0.000440   0.007695   0.004895  0.0000292  0.0000271    0.000411    0.000268
+1985   2   2  46098  -0.070417   0.056789  -0.2080184   0.0008391  -0.000126  -0.000414   0.002115   0.002056  0.0000296  0.0000294    0.000410    0.000273
+1985   2   3  46099  -0.071981   0.059250  -0.2088227   0.0007894  -0.000045  -0.000392   0.001020   0.001037  0.0000296  0.0000296    0.000410    0.000273
+1985   2   4  46100  -0.074582   0.061100  -0.2096339   0.0008555   0.000070  -0.000402   0.001077   0.001098  0.0000296  0.0000296    0.000410    0.000273
+1985   2   5  46101  -0.077734   0.062571  -0.2105713   0.0010381   0.000203  -0.000453   0.004231   0.004318  0.0000296  0.0000227    0.000409    0.000273
+1985   2   6  46102  -0.080399   0.063962  -0.2117357   0.0013024   0.000326  -0.000535   0.003990   0.006390  0.0000157  0.0000224    0.000307    0.000302
+1985   2   7  46103  -0.082199   0.065528  -0.2131777   0.0015850   0.000409  -0.000609   0.000456   0.000761  0.0000153  0.0000155    0.000302    0.000305
+1985   2   8  46104  -0.083636   0.067368  -0.2148799   0.0018142   0.000435  -0.000632   0.000407   0.000680  0.0000153  0.0000153    0.000302    0.000305
+1985   2   9  46105  -0.085430   0.069475  -0.2167598   0.0019334   0.000400  -0.000578   0.000409   0.000682  0.0000153  0.0000153    0.000302    0.000305
+1985   2  10  46106  -0.087839   0.071819  -0.2186944   0.0019194   0.000318  -0.000456   0.000859   0.001428  0.0000153  0.0000159    0.000302    0.000305
+1985   2  11  46107  -0.090618   0.074350  -0.2205555   0.0017868   0.000209  -0.000307   0.004867   0.005974  0.0000165  0.0000160    0.000286    0.000226
+1985   2  12  46108  -0.093385   0.076973  -0.2222442   0.0015798   0.000099  -0.000177   0.000906   0.001155  0.0000167  0.0000166    0.000285    0.000221
+1985   2  13  46109  -0.095979   0.079584  -0.2237135   0.0013573   0.000006  -0.000100   0.000465   0.000586  0.0000167  0.0000167    0.000285    0.000221
+1985   2  14  46110  -0.098497   0.082113  -0.2249764   0.0011778  -0.000058  -0.000079   0.000451   0.000568  0.0000167  0.0000167    0.000285    0.000221
+1985   2  15  46111  -0.101126   0.084523  -0.2260997   0.0010850  -0.000090  -0.000091   0.000573   0.000717  0.0000167  0.0000155    0.000285    0.000221
+1985   2  16  46112  -0.104054   0.086789  -0.2271824   0.0010971  -0.000088  -0.000108   0.003387   0.003273  0.0000143  0.0000154    0.000330    0.000138
+1985   2  17  46113  -0.107368   0.088852  -0.2283272   0.0012035  -0.000054  -0.000107   0.000995   0.000958  0.0000142  0.0000142    0.000335    0.000135
+1985   2  18  46114  -0.110968   0.090661  -0.2296138   0.0013726   0.000011  -0.000091   0.000476   0.000459  0.0000142  0.0000142    0.000335    0.000135
+1985   2  19  46115  -0.114666   0.092304  -0.2310843   0.0015646   0.000102  -0.000071   0.000539   0.000519  0.0000142  0.0000142    0.000335    0.000135
+1985   2  20  46116  -0.118389   0.094071  -0.2327421   0.0017425   0.000200  -0.000065   0.001915   0.001843  0.0000142  0.0000146    0.000335    0.000135
+1985   2  21  46117  -0.122192   0.096194  -0.2345581   0.0018777   0.000281  -0.000080   0.003116   0.003122  0.0000151  0.0000147    0.000336    0.000157
+1985   2  22  46118  -0.126110   0.098542  -0.2364792   0.0019512   0.000321  -0.000115   0.000459   0.000463  0.0000152  0.0000152    0.000336    0.000159
+1985   2  23  46119  -0.130081   0.100733  -0.2384383   0.0019538   0.000312  -0.000160   0.000442   0.000446  0.0000152  0.0000152    0.000336    0.000159
+1985   2  24  46120  -0.133992   0.102552  -0.2403643   0.0018873   0.000259  -0.000207   0.000455   0.000459  0.0000152  0.0000152    0.000336    0.000159
+1985   2  25  46121  -0.137724   0.104238  -0.2421943   0.0017651   0.000186  -0.000243   0.001490   0.001503  0.0000152  0.0000144    0.000336    0.000159
+1985   2  26  46122  -0.141173   0.106298  -0.2438832   0.0016091   0.000117  -0.000263   0.004949   0.004941  0.0000136  0.0000143    0.000214    0.000144
+1985   2  27  46123  -0.144266   0.109045  -0.2454098   0.0014447   0.000065  -0.000253   0.000636   0.000642  0.0000135  0.0000135    0.000209    0.000143
+1985   2  28  46124  -0.147030   0.112323  -0.2467781   0.0012953   0.000027  -0.000206   0.000500   0.000504  0.0000135  0.0000135    0.000209    0.000143
+1985   3   1  46125  -0.149660   0.115606  -0.2480139   0.0011825  -0.000001  -0.000123   0.000667   0.000674  0.0000135  0.0000135    0.000209    0.000143
+1985   3   2  46126  -0.152446   0.118386  -0.2491654   0.0011309  -0.000018  -0.000031   0.001049   0.001066  0.0000135  0.0000162    0.000209    0.000143
+1985   3   3  46127  -0.155387   0.120724  -0.2503076   0.0011700  -0.000002   0.000021   0.001275   0.001038  0.0000189  0.0000165    0.000310    0.000224
+1985   3   4  46128  -0.158218   0.123146  -0.2515436   0.0013243   0.000070  -0.000026   0.000917   0.000695  0.0000195  0.0000178    0.000325    0.000239
+1985   3   5  46129  -0.160713   0.126162  -0.2529912   0.0015944   0.000186  -0.000192   0.000722   0.000624  0.0000168  0.0000147    0.000302    0.000236
+1985   3   6  46130  -0.163039   0.129828  -0.2547504   0.0019417   0.000278  -0.000440   0.000372   0.000402  0.0000099  0.0000124    0.000215    0.000214
+1985   3   7  46131  -0.165814   0.133632  -0.2568641   0.0022883   0.000243  -0.000674   0.000293   0.000328  0.0000079  0.0000088    0.000181    0.000199
+1985   3   8  46132  -0.169505   0.137084  -0.2592868   0.0025407   0.000018  -0.000804   0.000288   0.000324  0.0000078  0.0000103    0.000177    0.000198
+1985   3   9  46133  -0.173914   0.140167  -0.2618874   0.0026316  -0.000341  -0.000813   0.001398   0.001567  0.0000126  0.0003150    0.000286    0.000317
+1985   3  10  46134  -0.178299   0.143120  -0.2644931   0.0025498  -0.000696  -0.000748   0.025155   0.017142  0.0006222  0.0003950    0.001679    0.001519
+1985   3  11  46135  -0.181793   0.146063  -0.2669493   0.0023407  -0.000893  -0.000677   0.026660   0.016713  0.0007775  0.0006854    0.001683    0.001522
+1985   3  12  46136  -0.183883   0.148719  -0.2691646   0.0020801  -0.000840  -0.000633   0.021064   0.005350  0.0007487  0.0004496    0.001691    0.001533
+1985   3  13  46137  -0.184987   0.151287  -0.2711249   0.0018426  -0.000566  -0.000600   0.009703   0.003251  0.0001217  0.0003947    0.001648    0.001688
+1985   3  14  46138  -0.185989   0.154452  -0.2728813   0.0016803  -0.000184  -0.000540   0.002312   0.001660  0.0000408  0.0000714    0.000738    0.000636
+1985   3  15  46139  -0.187174   0.158311  -0.2745226   0.0016157   0.000178  -0.000447   0.001048   0.000776  0.0000211  0.0000292    0.000393    0.000330
+1985   3  16  46140  -0.188062   0.162287  -0.2761470   0.0016468   0.000455  -0.000365   0.000868   0.000643  0.0000176  0.0000192    0.000330    0.000276
+1985   3  17  46141  -0.188810   0.166188  -0.2778424   0.0017537   0.000626  -0.000359   0.000926   0.000686  0.0000172  0.0000186    0.000321    0.000269
+1985   3  18  46142  -0.190302   0.170354  -0.2796700   0.0019036   0.000690  -0.000466   0.002936   0.002430  0.0000195  0.0000185    0.000271    0.000211
+1985   3  19  46143  -0.193070   0.175013  -0.2816536   0.0020575   0.000674  -0.000661   0.001351   0.001276  0.0000198  0.0000196    0.000267    0.000208
+1985   3  20  46144  -0.196369   0.179770  -0.2837783   0.0021797   0.000612  -0.000876   0.000737   0.000716  0.0000198  0.0000198    0.000267    0.000208
+1985   3  21  46145  -0.198367   0.183669  -0.2859979   0.0022458   0.000531  -0.001028   0.000868   0.000836  0.0000198  0.0000198    0.000267    0.000208
+1985   3  22  46146  -0.198899   0.186920  -0.2882491   0.0022463   0.000453  -0.001064   0.002398   0.002020  0.0000198  0.0000173    0.000267    0.000208
+1985   3  23  46147  -0.199019   0.190418  -0.2904676   0.0021860   0.000390  -0.000982   0.001769   0.001576  0.0000149  0.0000172    0.000239    0.000273
+1985   3  24  46148  -0.199161   0.194466  -0.2926000   0.0020794   0.000351  -0.000823   0.000397   0.000385  0.0000146  0.0000148    0.000236    0.000281
+1985   3  25  46149  -0.199145   0.198772  -0.2946109   0.0019453   0.000343  -0.000649   0.000452   0.000437  0.0000146  0.0000146    0.000236    0.000281
+1985   3  26  46150  -0.198777   0.202884  -0.2964838   0.0018021   0.000372  -0.000515   0.000593   0.000572  0.0000146  0.0000146    0.000236    0.000281
+1985   3  27  46151  -0.198410   0.206658  -0.2982179   0.0016653   0.000441  -0.000449   0.001346   0.001229  0.0000146  0.0000133    0.000236    0.000281
+1985   3  28  46152  -0.198601   0.210608  -0.2998260   0.0015485   0.000537  -0.000442   0.003441   0.002466  0.0000120  0.0000132    0.000215    0.000316
+1985   3  29  46153  -0.199399   0.214980  -0.3013340   0.0014673   0.000642  -0.000460   0.000600   0.000772  0.0000118  0.0000119    0.000214    0.000320
+1985   3  30  46154  -0.200138   0.219267  -0.3027867   0.0014434   0.000729  -0.000466   0.000405   0.000532  0.0000118  0.0000118    0.000214    0.000320
+1985   3  31  46155  -0.200289   0.223107  -0.3042534   0.0015027   0.000773  -0.000436   0.000593   0.000768  0.0000118  0.0000118    0.000214    0.000320
+1985   4   1  46156  -0.200237   0.227075  -0.3058271   0.0016628   0.000764  -0.000377   0.001502   0.001714  0.0000118  0.0000137    0.000214    0.000320
+1985   4   2  46157  -0.200731   0.231396  -0.3076069   0.0019141   0.000706  -0.000325   0.002907   0.001992  0.0000156  0.0000139    0.000247    0.000237
+1985   4   3  46158  -0.202035   0.235522  -0.3096630   0.0022062   0.000623  -0.000317   0.001169   0.001095  0.0000161  0.0000158    0.000250    0.000233
+1985   4   4  46159  -0.203614   0.239258  -0.3119972   0.0024543   0.000548  -0.000372   0.000666   0.000673  0.0000161  0.0000161    0.000250    0.000233
+1985   4   5  46160  -0.204383   0.243524  -0.3145216   0.0025695   0.000511  -0.000475   0.000831   0.000844  0.0000161  0.0000161    0.000250    0.000233
+1985   4   6  46161  -0.204286   0.247852  -0.3170733   0.0024996   0.000520  -0.000584   0.001652   0.001639  0.0000161  0.0000165    0.000250    0.000233
+1985   4   7  46162  -0.203722   0.251674  -0.3194663   0.0022573   0.000559  -0.000650   0.001032   0.001173  0.0000169  0.0000165    0.000271    0.000353
+1985   4   8  46163  -0.203062   0.255080  -0.3215599   0.0019200   0.000593  -0.000639   0.000426   0.000495  0.0000170  0.0000169    0.000273    0.000375
+1985   4   9  46164  -0.202563   0.258469  -0.3233102   0.0015964   0.000583  -0.000551   0.000426   0.000495  0.0000170  0.0000170    0.000273    0.000375
+1985   4  10  46165  -0.202250   0.262161  -0.3247815   0.0013806   0.000510  -0.000410   0.000433   0.000504  0.0000170  0.0000170    0.000273    0.000375
+1985   4  11  46166  -0.201920   0.266027  -0.3261110   0.0013154   0.000380  -0.000258   0.001280   0.001470  0.0000170  0.0000175    0.000273    0.000375
+1985   4  12  46167  -0.201326   0.269764  -0.3274500   0.0013870   0.000230  -0.000146   0.006251   0.005414  0.0000180  0.0000176    0.000282    0.000377
+1985   4  13  46168  -0.200459   0.273425  -0.3289132   0.0015454   0.000114  -0.000113   0.000969   0.001034  0.0000182  0.0000181    0.000283    0.000377
+1985   4  14  46169  -0.199640   0.277552  -0.3305577   0.0017355   0.000083  -0.000185   0.000694   0.000738  0.0000182  0.0000182    0.000283    0.000377
+1985   4  15  46170  -0.199083   0.282203  -0.3323903   0.0019155   0.000164  -0.000362   0.000978   0.001010  0.0000182  0.0000182    0.000283    0.000377
+1985   4  16  46171  -0.198510   0.286200  -0.3343855   0.0020611   0.000338  -0.000600   0.001828   0.001677  0.0000181  0.0000149    0.000283    0.000377
+1985   4  17  46172  -0.197935   0.289123  -0.3365012   0.0021593   0.000536  -0.000802   0.002863   0.003299  0.0000117  0.0000148    0.000332    0.000204
+1985   4  18  46173  -0.197595   0.291634  -0.3386866   0.0022033   0.000659  -0.000837   0.001044   0.001081  0.0000114  0.0000115    0.000338    0.000198
+1985   4  19  46174  -0.197481   0.294665  -0.3408867   0.0021904   0.000623  -0.000598   0.000511   0.000521  0.0000114  0.0000114    0.000338    0.000198
+1985   4  20  46175  -0.197168   0.298532  -0.3430461   0.0021211   0.000417  -0.000085   0.000560   0.000568  0.0000114  0.0000114    0.000338    0.000198
+1985   4  21  46176  -0.196576   0.302397  -0.3451109   0.0019982   0.000151   0.000518   0.001964   0.001805  0.0000114  0.0000125    0.000338    0.000198
+1985   4  22  46177  -0.196008   0.305532  -0.3470315   0.0018313   0.000015   0.000896   0.003366   0.002808  0.0000135  0.0000126    0.000214    0.000244
+1985   4  23  46178  -0.195712   0.308702  -0.3487721   0.0016430   0.000169   0.000759   0.000494   0.000579  0.0000139  0.0000141    0.000210    0.000252
+1985   4  24  46179  -0.195708   0.312959  -0.3503261   0.0014711   0.000624   0.000044   0.000514   0.000601  0.0000148  0.0000164    0.000222    0.000263
+1985   4  25  46180  -0.195813   0.318044  -0.3517317   0.0013623   0.001192  -0.000982   0.000774   0.000880  0.0000190  0.0000202    0.000277    0.000307
+1985   4  26  46181  -0.195763   0.321641  -0.3530743   0.0013420   0.001521  -0.001756   0.002463   0.002147  0.0000257  0.0000217    0.000354    0.000355
+1985   4  27  46182  -0.195773   0.324037  -0.3544436   0.0014041   0.001422  -0.001904   0.005067   0.002958  0.0000243  0.0000198    0.000371    0.000376
+1985   4  28  46183  -0.196000   0.326977  -0.3559125   0.0015358   0.000992  -0.001459   0.000591   0.000563  0.0000138  0.0000191    0.000311    0.000463
+1985   4  29  46184  -0.196057   0.330661  -0.3575426   0.0017308   0.000501  -0.000750   0.000498   0.000476  0.0000138  0.0000138    0.000311    0.000464
+1985   4  30  46185  -0.195549   0.334573  -0.3593902   0.0019834   0.000214  -0.000173   0.000736   0.000702  0.0000138  0.0000144    0.000311    0.000464
+1985   5   1  46186  -0.194529   0.338598  -0.3615045   0.0022660   0.000213   0.000033   0.001811   0.001709  0.0000150  0.0000628    0.000340    0.000493
+1985   5   2  46187  -0.193343   0.342553  -0.3638903   0.0025116   0.000397  -0.000123   0.005183   0.004936  0.0001118  0.0000308    0.001754    0.000846
+1985   5   3  46188  -0.192191   0.346110  -0.3664738   0.0026355   0.000591  -0.000448   0.001919   0.001864  0.0000466  0.0000684    0.000797    0.000711
+1985   5   4  46189  -0.190876   0.349453  -0.3691015   0.0025667   0.000680  -0.000689   0.000986   0.000936  0.0000249  0.0000338    0.000434    0.000520
+1985   5   5  46190  -0.188912   0.353261  -0.3715626   0.0023017   0.000671  -0.000585   0.000895   0.000871  0.0000209  0.0000381    0.000365    0.000461
+1985   5   6  46191  -0.186116   0.357009  -0.3736903   0.0019247   0.000651  -0.000282   0.003794   0.003428  0.0000513  0.0000515    0.000843    0.000844
+1985   5   7  46192  -0.183189   0.359868  -0.3754291   0.0015621   0.000673  -0.000147   0.006496   0.002631  0.0000822  0.0000443    0.000801    0.000505
+1985   5   8  46193  -0.181736   0.362661  -0.3768524   0.0013380   0.000676  -0.000356   0.002046   0.000998  0.0000373  0.0000518    0.000426    0.000299
+1985   5   9  46194  -0.182479   0.367075  -0.3781475   0.0013105   0.000470  -0.000607   0.000967   0.000604  0.0000214  0.0000264    0.000337    0.000349
+1985   5  10  46195  -0.180902   0.370972  -0.3795073   0.0014047   0.000205  -0.000548   0.000586   0.000452  0.0000156  0.0000177    0.000304    0.000260
+1985   5  11  46196  -0.177926   0.373844  -0.3809769   0.0015061   0.000121  -0.000463   0.000543   0.000446  0.0000140  0.0000195    0.000293    0.000205
+1985   5  12  46197  -0.176166   0.376777  -0.3825265   0.0015888   0.000288  -0.000668   0.001466   0.001191  0.0000234  0.0000228    0.000464    0.000343
+1985   5  13  46198  -0.174266   0.379982  -0.3841517   0.0016726   0.000577  -0.000993   0.001527   0.001257  0.0000316  0.0000207    0.000458    0.000663
+1985   5  14  46199  -0.171937   0.383463  -0.3858618   0.0017569   0.000758  -0.001093   0.000767   0.000635  0.0000180  0.0000255    0.000271    0.000384
+1985   5  15  46200  -0.169828   0.387102  -0.3876504   0.0018147   0.000683  -0.000740   0.000697   0.000598  0.0000195  0.0000158    0.000282    0.000320
+1985   5  16  46201  -0.167890   0.390456  -0.3894724   0.0018117   0.000376  -0.000111   0.000404   0.000368  0.0000136  0.0000152    0.000185    0.000170
+1985   5  17  46202  -0.166217   0.393176  -0.3912539   0.0017334   0.000051   0.000248   0.000494   0.000448  0.0000110  0.0000140    0.000149    0.000136
+1985   5  18  46203  -0.164907   0.395631  -0.3929214   0.0015927  -0.000123   0.000061   0.000813   0.000762  0.0000145  0.0000140    0.000202    0.000208
+1985   5  19  46204  -0.163273   0.398119  -0.3944266   0.0014175  -0.000139  -0.000476   0.000642   0.000658  0.0000171  0.0000158    0.000243    0.000287
+1985   5  20  46205  -0.160473   0.400641  -0.3957515   0.0012374  -0.000080  -0.000986   0.000709   0.000727  0.0000171  0.0000171    0.000244    0.000288
+1985   5  21  46206  -0.156662   0.403319  -0.3969063   0.0010788  -0.000016  -0.001216   0.002416   0.002616  0.0000171  0.0000166    0.000244    0.000288
+1985   5  22  46207  -0.152746   0.406316  -0.3979242   0.0009643   0.000025  -0.001137   0.003763   0.004306  0.0000162  0.0000166    0.000341    0.000231
+1985   5  23  46208  -0.149310   0.409452  -0.3988582   0.0009129   0.000050  -0.000876   0.000629   0.000604  0.0000161  0.0000161    0.000357    0.000227
+1985   5  24  46209  -0.146269   0.412289  -0.3997779   0.0009408   0.000067  -0.000598   0.000547   0.000524  0.0000161  0.0000161    0.000357    0.000227
+1985   5  25  46210  -0.143259   0.414647  -0.4007679   0.0010608   0.000077  -0.000419   0.000550   0.000527  0.0000161  0.0000161    0.000357    0.000227
+1985   5  26  46211  -0.140107   0.416987  -0.4019234   0.0012760   0.000072  -0.000368   0.001283   0.001227  0.0000161  0.0000150    0.000356    0.000227
+1985   5  27  46212  -0.136969   0.419899  -0.4033350   0.0015675   0.000053  -0.000410   0.004138   0.004031  0.0000140  0.0000150    0.000188    0.000314
+1985   5  28  46213  -0.134189   0.423242  -0.4050590   0.0018845   0.000037  -0.000484   0.000780   0.000809  0.0000139  0.0000139    0.000183    0.000326
+1985   5  29  46214  -0.132066   0.425932  -0.4070851   0.0021505   0.000052  -0.000536   0.000488   0.000506  0.0000139  0.0000139    0.000183    0.000326
+1985   5  30  46215  -0.130370   0.427568  -0.4093210   0.0022873   0.000117  -0.000526   0.000672   0.000688  0.0000139  0.0000139    0.000183    0.000326
+1985   5  31  46216  -0.128110   0.429829  -0.4116083   0.0022484   0.000231  -0.000444   0.001233   0.001206  0.0000139  0.0000139    0.000183    0.000326
+1985   6   1  46217  -0.125319   0.432795  -0.4137691   0.0020422   0.000372  -0.000308   0.003538   0.003491  0.0000140  0.0000139    0.000322    0.000232
+1985   6   2  46218  -0.122724   0.435257  -0.4156637   0.0017330   0.000499  -0.000156   0.001122   0.001481  0.0000140  0.0000140    0.000358    0.000227
+1985   6   3  46219  -0.120536   0.436972  -0.4172360   0.0014166   0.000573  -0.000032   0.000526   0.000716  0.0000140  0.0000140    0.000358    0.000227
+1985   6   4  46220  -0.118144   0.439258  -0.4185254   0.0011814   0.000573   0.000023   0.000522   0.000710  0.0000140  0.0000140    0.000358    0.000227
+1985   6   5  46221  -0.115314   0.442206  -0.4196416   0.0010754   0.000506  -0.000007   0.001925   0.002540  0.0000140  0.0000134    0.000358    0.000227
+1985   6   6  46222  -0.112417   0.444688  -0.4207170   0.0010954   0.000402  -0.000108   0.003903   0.004257  0.0000128  0.0000133    0.000272    0.000350
+1985   6   7  46223  -0.109887   0.446265  -0.4218597   0.0011996   0.000296  -0.000246   0.000456   0.000537  0.0000127  0.0000127    0.000267    0.000376
+1985   6   8  46224  -0.107853   0.447718  -0.4231271   0.0013337   0.000221  -0.000379   0.000377   0.000443  0.0000127  0.0000127    0.000267    0.000376
+1985   6   9  46225  -0.106139   0.449932  -0.4245248   0.0014531   0.000187  -0.000472   0.000377   0.000444  0.0000127  0.0000127    0.000267    0.000376
+1985   6  10  46226  -0.104363   0.452753  -0.4260225   0.0015306   0.000192  -0.000511   0.000687   0.000809  0.0000127  0.0000148    0.000267    0.000376
+1985   6  11  46227  -0.102207   0.455240  -0.4275706   0.0015531   0.000228  -0.000503   0.003934   0.004707  0.0000168  0.0000151    0.000309    0.000300
+1985   6  12  46228  -0.099742   0.456798  -0.4291105   0.0015148   0.000295  -0.000465   0.001125   0.001114  0.0000175  0.0000171    0.000314    0.000295
+1985   6  13  46229  -0.097579   0.458028  -0.4305811   0.0014180   0.000397  -0.000417   0.000619   0.000605  0.0000175  0.0000175    0.000314    0.000295
+1985   6  14  46230  -0.096127   0.459948  -0.4319292   0.0012772   0.000533  -0.000380   0.000847   0.000809  0.0000175  0.0000174    0.000314    0.000295
+1985   6  15  46231  -0.094474   0.462244  -0.4331226   0.0011177   0.000672  -0.000384   0.001553   0.001354  0.0000174  0.0000154    0.000314    0.000295
+1985   6  16  46232  -0.092076   0.464293  -0.4341583   0.0009674   0.000758  -0.000455   0.002136   0.002140  0.0000134  0.0000154    0.000192    0.000196
+1985   6  17  46233  -0.089231   0.465817  -0.4350597   0.0008463   0.000744  -0.000581   0.000963   0.001044  0.0000133  0.0000137    0.000189    0.000192
+1985   6  18  46234  -0.086430   0.466866  -0.4358631   0.0007609   0.000640  -0.000696   0.000588   0.000630  0.0000139  0.0000113    0.000204    0.000195
+1985   6  19  46235  -0.083661   0.467616  -0.4366032   0.0007100   0.000534  -0.000695   0.000481   0.000455  0.0000092  0.0000089    0.000242    0.000185
+1985   6  20  46236  -0.080432   0.468829  -0.4373119   0.0007009   0.000603  -0.000391   0.000227   0.000209  0.0000038  0.0000061    0.000140    0.000123
+1985   6  21  46237  -0.077278   0.470420  -0.4380356   0.0007601   0.000727  -0.000156   0.000176   0.000163  0.0000029  0.0000044    0.000110    0.000102
+1985   6  22  46238  -0.074822   0.471837  -0.4388576   0.0009164   0.000727  -0.000354   0.000283   0.000267  0.0000049  0.0000097    0.000169    0.000158
+1985   6  23  46239  -0.072762   0.473006  -0.4398826   0.0011644   0.000621  -0.000845   0.000604   0.000642  0.0000164  0.0000109    0.000302    0.000289
+1985   6  24  46240  -0.070437   0.474088  -0.4411855   0.0014507   0.000513  -0.001302   0.000614   0.000655  0.0000169  0.0000167    0.000304    0.000291
+1985   6  25  46241  -0.067463   0.475099  -0.4427666   0.0016962   0.000493  -0.001489   0.001454   0.001324  0.0000169  0.0000157    0.000304    0.000291
+1985   6  26  46242  -0.063902   0.475956  -0.4445457   0.0018304   0.000583  -0.001375   0.004924   0.002200  0.0000145  0.0000156    0.000235    0.000299
+1985   6  27  46243  -0.060109   0.476776  -0.4463854   0.0018113   0.000752  -0.001070   0.000884   0.001192  0.0000143  0.0000144    0.000232    0.000300
+1985   6  28  46244  -0.056494   0.478076  -0.4481254   0.0016327   0.000928  -0.000729   0.000566   0.000837  0.0000143  0.0000143    0.000232    0.000300
+1985   6  29  46245  -0.053238   0.480016  -0.4496190   0.0013282   0.001043  -0.000461   0.000740   0.001061  0.0000143  0.0000143    0.000232    0.000300
+1985   6  30  46246  -0.050126   0.481598  -0.4507721   0.0009682   0.001058  -0.000295   0.001132   0.001489  0.0000143  0.0000164    0.000232    0.000300
+1985   7   1  46247  -0.047125   0.482621   0.5484282   0.0006424   0.000977  -0.000205   0.002133   0.002027  0.0000185  0.0000167    0.000268    0.000247
+1985   7   2  46248  -0.044372   0.483467   0.5479067   0.0004286   0.000834  -0.000156   0.001206   0.001215  0.0000190  0.0000188    0.000272    0.000244
+1985   7   3  46249  -0.041953   0.484400   0.5475279   0.0003609   0.000677  -0.000128   0.000783   0.000806  0.0000190  0.0000190    0.000272    0.000244
+1985   7   4  46250  -0.039700   0.484922   0.5471498   0.0004144   0.000550  -0.000122   0.000737   0.000757  0.0000190  0.0000189    0.000272    0.000244
+1985   7   5  46251  -0.037095   0.485492   0.5466804   0.0005255   0.000480  -0.000155   0.001933   0.001629  0.0000188  0.0000185    0.000243    0.000221
+1985   7   6  46252  -0.033834   0.486919   0.5460971   0.0006320   0.000469  -0.000238   0.000897   0.000651  0.0000180  0.0000184    0.000180    0.000167
+1985   7   7  46253  -0.030401   0.487988   0.5454271   0.0007020   0.000492  -0.000364   0.000562   0.000432  0.0000179  0.0000178    0.000189    0.000180
+1985   7   8  46254  -0.027219   0.487461   0.5447105   0.0007379   0.000510  -0.000505   0.000529   0.000495  0.0000175  0.0000176    0.000229    0.000249
+1985   7   9  46255  -0.023762   0.486612   0.5439714   0.0007441   0.000477  -0.000612   0.000519   0.000556  0.0000174  0.0000174    0.000268    0.000361
+1985   7  10  46256  -0.019948   0.487042   0.5432425   0.0007106   0.000381  -0.000662   0.001215   0.001248  0.0000173  0.0000161    0.000276    0.000398
+1985   7  11  46257  -0.016249   0.488950   0.5425683   0.0006330   0.000254  -0.000663   0.002709   0.002247  0.0000148  0.0000160    0.000239    0.000217
+1985   7  12  46258  -0.012774   0.491119   0.5419899   0.0005215   0.000149  -0.000644   0.000815   0.001037  0.0000146  0.0000147    0.000237    0.000212
+1985   7  13  46259  -0.008738   0.491784   0.5415321   0.0003946   0.000122  -0.000640   0.000559   0.000740  0.0000146  0.0000146    0.000237    0.000212
+1985   7  14  46260  -0.003851   0.490774   0.5411996   0.0002722   0.000199  -0.000684   0.000704   0.000918  0.0000146  0.0000146    0.000237    0.000212
+1985   7  15  46261   0.000377   0.490534   0.5409782   0.0001718   0.000353  -0.000775   0.001003   0.001254  0.0000146  0.0000143    0.000237    0.000212
+1985   7  16  46262   0.003429   0.491526   0.5408374   0.0001125   0.000520  -0.000885   0.002741   0.001983  0.0000139  0.0000143    0.000399    0.000433
+1985   7  17  46263   0.005976   0.492634   0.5407259   0.0001199   0.000622  -0.000963   0.001148   0.001114  0.0000139  0.0000142    0.000427    0.000490
+1985   7  18  46264   0.009073   0.492940   0.5405649   0.0002200   0.000616  -0.000967   0.000627   0.000651  0.0000145  0.0000176    0.000447    0.000513
+1985   7  19  46265   0.013053   0.493275   0.5402550   0.0004186   0.000516  -0.000886   0.000674   0.000699  0.0000213  0.0000291    0.000651    0.000745
+1985   7  20  46266   0.016873   0.494215   0.5397078   0.0006867   0.000407  -0.000757   0.001363   0.001008  0.0000437  0.0000196    0.000489    0.000498
+1985   7  21  46267   0.019601   0.495302   0.5388802   0.0009651   0.000363  -0.000624   0.000586   0.000375  0.0000179  0.0000299    0.000152    0.000154
+1985   7  22  46268   0.021997   0.495792   0.5377967   0.0011852   0.000390  -0.000512   0.000486   0.000339  0.0000162  0.0000165    0.000153    0.000153
+1985   7  23  46269   0.025063   0.495591   0.5365451   0.0012951   0.000451  -0.000410   0.000465   0.000502  0.0000151  0.0000155    0.000245    0.000223
+1985   7  24  46270   0.028796   0.495351   0.5352494   0.0012718   0.000507  -0.000296   0.000469   0.000586  0.0000149  0.0000195    0.000297    0.000254
+1985   7  25  46271   0.032601   0.495290   0.5340421   0.0011221   0.000521  -0.000197   0.001421   0.001583  0.0000239  0.0001190    0.000442    0.000377
+1985   7  26  46272   0.035910   0.495186   0.5330346   0.0008803   0.000486  -0.000170   0.003591   0.002917  0.0002232  0.0000380    0.000841    0.000721
+1985   7  27  46273   0.038813   0.495113   0.5322926   0.0006026   0.000423  -0.000253   0.001473   0.001189  0.0000522  0.0001221    0.000479    0.000369
+1985   7  28  46274   0.041980   0.495524   0.5318192   0.0003568   0.000360  -0.000407   0.000535   0.000429  0.0000210  0.0000357    0.000196    0.000145
+1985   7  29  46275   0.045587   0.495892   0.5315500   0.0002063   0.000330  -0.000531   0.000663   0.000527  0.0000193  0.0000201    0.000179    0.000132
+1985   7  30  46276   0.049713   0.495702   0.5313671   0.0001862   0.000333  -0.000562   0.001298   0.000995  0.0000192  0.0000176    0.000179    0.000132
+1985   7  31  46277   0.053492   0.495364   0.5311395   0.0002865   0.000339  -0.000513   0.002335   0.001766  0.0000160  0.0000174    0.000257    0.000218
+1985   8   1  46278   0.055713   0.495607   0.5307681   0.0004606   0.000308  -0.000445   0.001024   0.001118  0.0000155  0.0000157    0.000330    0.000370
+1985   8   2  46279   0.056926   0.496130   0.5302096   0.0006516   0.000208  -0.000431   0.000586   0.000706  0.0000155  0.0000155    0.000330    0.000370
+1985   8   3  46280   0.060127   0.495109   0.5294720   0.0008170   0.000033  -0.000520   0.000706   0.000857  0.0000155  0.0000156    0.000330    0.000370
+1985   8   4  46281   0.064630   0.493592   0.5285932   0.0009357  -0.000169  -0.000719   0.001404   0.001642  0.0000156  0.0000365    0.000333    0.000373
+1985   8   5  46282   0.068500   0.493051   0.5276229   0.0009992  -0.000302  -0.000981   0.001608   0.001589  0.0000576  0.0000264    0.001264    0.000865
+1985   8   6  46283   0.071430   0.493361   0.5266176   0.0009998  -0.000258  -0.001222   0.000676   0.000662  0.0000373  0.0000416    0.000887    0.000551
+1985   8   7  46284   0.074209   0.493695   0.5256439   0.0009280   0.000016  -0.001343   0.000676   0.000661  0.0000257  0.0000291    0.000629    0.000383
+1985   8   8  46285   0.077658   0.493460   0.5247774   0.0007827   0.000506  -0.001227   0.000709   0.000694  0.0000209  0.0000214    0.000515    0.000312
+1985   8   9  46286   0.081699   0.492880   0.5240870   0.0005825   0.001009  -0.000880   0.001663   0.001467  0.0000171  0.0000166    0.000277    0.000217
+1985   8  10  46287   0.085651   0.492437   0.5236124   0.0003657   0.001184  -0.000471   0.000626   0.000477  0.0000123  0.0000150    0.000138    0.000126
+1985   8  11  46288   0.089083   0.492056   0.5233473   0.0001819   0.000833  -0.000195   0.000359   0.000273  0.0000130  0.0000143    0.000148    0.000136
+1985   8  12  46289   0.092211   0.491114   0.5232325   0.0000793   0.000077  -0.000158   0.000493   0.000389  0.0000163  0.0000164    0.000206    0.000194
+1985   8  13  46290   0.095561   0.489196   0.5231649   0.0000862  -0.000624  -0.000295   0.001033   0.000886  0.0000198  0.0000184    0.000299    0.000302
+1985   8  14  46291   0.099218   0.487362   0.5230292   0.0002056  -0.000901  -0.000493   0.002061   0.001698  0.0000206  0.0000173    0.000329    0.000342
+1985   8  15  46292   0.102529   0.486412   0.5227199   0.0004245  -0.000686  -0.000666   0.002436   0.003339  0.0000149  0.0000176    0.000316    0.000212
+1985   8  16  46293   0.104925   0.485906   0.5221521   0.0007157  -0.000153  -0.000748   0.001306   0.001279  0.0000146  0.0000147    0.000315    0.000207
+1985   8  17  46294   0.106944   0.485191   0.5212770   0.0010318   0.000416  -0.000710   0.000692   0.000623  0.0000146  0.0000146    0.000315    0.000207
+1985   8  18  46295   0.109934   0.484281   0.5201014   0.0013082   0.000796  -0.000557   0.000701   0.000628  0.0000146  0.0000146    0.000315    0.000207
+1985   8  19  46296   0.114029   0.483522   0.5186973   0.0014817   0.000908  -0.000338   0.002697   0.002429  0.0000146  0.0000143    0.000315    0.000207
+1985   8  20  46297   0.118179   0.483128   0.5171884   0.0015160   0.000792  -0.000145   0.004746   0.004952  0.0000140  0.0000143    0.000382    0.000295
+1985   8  21  46298   0.121580   0.482919   0.5157144   0.0014146   0.000542  -0.000081   0.000638   0.000661  0.0000140  0.0000140    0.000389    0.000307
+1985   8  22  46299   0.124347   0.482394   0.5143937   0.0012118   0.000251  -0.000199   0.000558   0.000575  0.0000140  0.0000140    0.000389    0.000307
+1985   8  23  46300   0.127096   0.481143   0.5133032   0.0009549  -0.000002  -0.000462   0.000604   0.000623  0.0000140  0.0000130    0.000382    0.000304
+1985   8  24  46301   0.130242   0.479184   0.5124741   0.0006946  -0.000168  -0.000730   0.000876   0.001036  0.0000119  0.0000128    0.000193    0.000196
+1985   8  25  46302   0.133446   0.477156   0.5118869   0.0004858  -0.000210  -0.000848   0.000561   0.000696  0.0000116  0.0000123    0.000179    0.000184
+1985   8  26  46303   0.135404   0.476453   0.5114656   0.0003822  -0.000116  -0.000740   0.000480   0.000586  0.0000126  0.0000149    0.000196    0.000193
+1985   8  27  46304   0.137182   0.476268   0.5110853   0.0004148   0.000117  -0.000484   0.000676   0.000729  0.0000183  0.0000159    0.000294    0.000225
+1985   8  28  46305   0.141111   0.474519   0.5106071   0.0005732   0.000452  -0.000252   0.000988   0.001007  0.0000191  0.0000187    0.000309    0.000229
+1985   8  29  46306   0.145837   0.472202   0.5099242   0.0008093   0.000792  -0.000176   0.001758   0.001566  0.0000191  0.0000287    0.000310    0.000229
+1985   8  30  46307   0.149030   0.470416   0.5089896   0.0010597   0.001004  -0.000294   0.002470   0.002267  0.0000382  0.0000314    0.000579    0.000356
+1985   8  31  46308   0.150370   0.468817   0.5078190   0.0012670   0.000970  -0.000559   0.001984   0.002031  0.0000437  0.0000422    0.000647    0.000379
+1985   9   1  46309   0.151701   0.467033   0.5064778   0.0013927   0.000642  -0.000878   0.001379   0.001563  0.0000462  0.0000560    0.000684    0.000402
+1985   9   2  46310   0.155051   0.465473   0.5050586   0.0014226   0.000097  -0.001137   0.001928   0.002213  0.0000684  0.0001066    0.001001    0.000591
+1985   9   3  46311   0.158414   0.463834   0.5036562   0.0013642  -0.000486  -0.001285   0.003612   0.003626  0.0001669  0.0000510    0.002180    0.001374
+1985   9   4  46312   0.160983   0.460731   0.5023493   0.0012389  -0.000827  -0.001238   0.002479   0.002411  0.0000337  0.0000947    0.000382    0.000270
+1985   9   5  46313   0.163499   0.457482   0.5011903   0.0010744  -0.000692  -0.000921   0.000892   0.000985  0.0000225  0.0000276    0.000270    0.000197
+1985   9   6  46314   0.165890   0.457101   0.5002030   0.0008972  -0.000084  -0.000373   0.000684   0.000821  0.0000215  0.0000216    0.000284    0.000221
+1985   9   7  46315   0.168528   0.457629   0.4993891   0.0007333   0.000676   0.000186   0.000589   0.000737  0.0000207  0.0000209    0.000301    0.000255
+1985   9   8  46316   0.171546   0.456155   0.4987216   0.0006133   0.001210   0.000493   0.000867   0.001059  0.0000202  0.0000187    0.000311    0.000282
+1985   9   9  46317   0.174339   0.453592   0.4981409   0.0005676   0.001335   0.000409   0.005796   0.002581  0.0000167  0.0000184    0.000337    0.000463
+1985   9  10  46318   0.176406   0.451931   0.4975592   0.0006179   0.001085  -0.000051   0.001578   0.001107  0.0000167  0.0000171    0.000337    0.000495
+1985   9  11  46319   0.178000   0.450961   0.4968731   0.0007713   0.000637  -0.000725   0.000838   0.000603  0.0000175  0.0000192    0.000328    0.000531
+1985   9  12  46320   0.179913   0.448642   0.4959847   0.0010141   0.000200  -0.001360   0.001069   0.000774  0.0000217  0.0000223    0.000302    0.000746
+1985   9  13  46321   0.182187   0.445928   0.4948225   0.0013175  -0.000093  -0.001673   0.001693   0.001227  0.0000271  0.0000240    0.000287    0.001278
+1985   9  14  46322   0.184239   0.443673   0.4933482   0.0016367  -0.000207  -0.001556   0.004807   0.001950  0.0000264  0.0000222    0.000284    0.001008
+1985   9  15  46323   0.185561   0.441240   0.4915755   0.0019033  -0.000187  -0.001117   0.001641   0.001222  0.0000174  0.0000219    0.000283    0.000405
+1985   9  16  46324   0.186433   0.438394   0.4895919   0.0020418  -0.000128  -0.000585   0.000800   0.000679  0.0000173  0.0000174    0.000283    0.000404
+1985   9  17  46325   0.187661   0.435826   0.4875513   0.0020061  -0.000111  -0.000187   0.000847   0.000722  0.0000173  0.0000173    0.000283    0.000404
+1985   9  18  46326   0.189284   0.433741   0.4856286   0.0018096  -0.000158  -0.000041   0.003106   0.002535  0.0000173  0.0000193    0.000283    0.000404
+1985   9  19  46327   0.190758   0.431745   0.4839561   0.0015222  -0.000234  -0.000139   0.004923   0.004280  0.0000213  0.0000195    0.000323    0.000300
+1985   9  20  46328   0.191998   0.429502   0.4825788   0.0012379  -0.000268  -0.000396   0.000728   0.000916  0.0000217  0.0000215    0.000327    0.000294
+1985   9  21  46329   0.193527   0.426981   0.4814519   0.0010347  -0.000199  -0.000696   0.000640   0.000815  0.0000217  0.0000217    0.000327    0.000294
+1985   9  22  46330   0.195773   0.424374   0.4804699   0.0009533  -0.000012  -0.000950   0.000643   0.000819  0.0000217  0.0000217    0.000327    0.000294
+1985   9  23  46331   0.198431   0.421973   0.4795063   0.0009958   0.000239  -0.001100   0.001467   0.001926  0.0000217  0.0000204    0.000327    0.000294
+1985   9  24  46332   0.200767   0.419971   0.4784478   0.0011383   0.000434  -0.001110   0.005795   0.005175  0.0000192  0.0000204    0.000321    0.000299
+1985   9  25  46333   0.202439   0.418259   0.4772119   0.0013444   0.000432  -0.000967   0.001285   0.001276  0.0000190  0.0000191    0.000320    0.000299
+1985   9  26  46334   0.203951   0.416444   0.4757554   0.0015704   0.000151  -0.000678   0.000790   0.000788  0.0000190  0.0000190    0.000320    0.000299
+1985   9  27  46335   0.205914   0.414194   0.4740804   0.0017676  -0.000355  -0.000306   0.001106   0.001100  0.0000190  0.0000183    0.000320    0.000299
+1985   9  28  46336   0.208021   0.411516   0.4722391   0.0018910  -0.000866   0.000017   0.001898   0.001904  0.0000175  0.0000137    0.000294    0.000296
+1985   9  29  46337   0.209604   0.408585   0.4703225   0.0019166  -0.001091   0.000144   0.000369   0.000440  0.0000083  0.0000132    0.000138    0.000241
+1985   9  30  46338   0.210335   0.405546   0.4684308   0.0018534  -0.000855  -0.000016   0.000359   0.000427  0.0000089  0.0000095    0.000148    0.000250
+1985  10   1  46339   0.210562   0.402495   0.4666375   0.0017381  -0.000226  -0.000427   0.000424   0.000503  0.0000107  0.0000113    0.000179    0.000275
+1985  10   2  46340   0.211030   0.399628   0.4649702   0.0016070   0.000448  -0.000893   0.000658   0.000769  0.0000137  0.0000133    0.000236    0.000304
+1985  10   3  46341   0.212312   0.396714   0.4634303   0.0014762   0.000827  -0.001228   0.002190   0.002152  0.0000160  0.0000164    0.000282    0.000320
+1985  10   4  46342   0.214044   0.393485   0.4620143   0.0013513   0.000800  -0.001365   0.002941   0.002406  0.0000191  0.0000176    0.000325    0.000553
+1985  10   5  46343   0.215031   0.390329   0.4607145   0.0012437   0.000475  -0.001342   0.001373   0.001299  0.0000193  0.0000192    0.000327    0.000596
+1985  10   6  46344   0.214914   0.387507   0.4595065   0.0011771   0.000069  -0.001246   0.000935   0.000944  0.0000193  0.0000193    0.000327    0.000596
+1985  10   7  46345   0.215389   0.384413   0.4583349   0.0011846  -0.000227  -0.001162   0.000785   0.000810  0.0000193  0.0000193    0.000327    0.000596
+1985  10   8  46346   0.217511   0.380927   0.4571085   0.0012953  -0.000342  -0.001115   0.002029   0.002428  0.0000193  0.0000173    0.000327    0.000595
+1985  10   9  46347   0.220195   0.377927   0.4557139   0.0015180  -0.000316  -0.001091   0.002981   0.005243  0.0000153  0.0000172    0.000263    0.000341
+1985  10  10  46348   0.222071   0.375862   0.4540456   0.0018289  -0.000230  -0.001057   0.000705   0.000867  0.0000151  0.0000152    0.000259    0.000332
+1985  10  11  46349   0.222908   0.373970   0.4520419   0.0021697  -0.000151  -0.000995   0.000496   0.000605  0.0000151  0.0000151    0.000259    0.000332
+1985  10  12  46350   0.223217   0.371201   0.4497152   0.0024575  -0.000112  -0.000905   0.000494   0.000603  0.0000151  0.0000151    0.000259    0.000332
+1985  10  13  46351   0.223437   0.367434   0.4471636   0.0026112  -0.000120  -0.000815   0.000530   0.000644  0.0000151  0.0000144    0.000259    0.000332
+1985  10  14  46352   0.223725   0.363501   0.4445504   0.0025851  -0.000176  -0.000756   0.002507   0.001871  0.0000138  0.0000144    0.000246    0.000304
+1985  10  15  46353   0.224111   0.360240   0.4420541   0.0023913  -0.000282  -0.000750   0.001066   0.001050  0.0000137  0.0000137    0.000245    0.000302
+1985  10  16  46354   0.224592   0.357654   0.4398100   0.0020964  -0.000421  -0.000795   0.000589   0.000617  0.0000137  0.0000137    0.000245    0.000302
+1985  10  17  46355   0.225203   0.354840   0.4378713   0.0017921  -0.000540  -0.000858   0.000640   0.000671  0.0000137  0.0000143    0.000245    0.000302
+1985  10  18  46356   0.225615   0.351766   0.4362037   0.0015599  -0.000538  -0.000881   0.001953   0.001781  0.0000150  0.0000458    0.000269    0.000329
+1985  10  19  46357   0.225721   0.349058   0.4347093   0.0014477  -0.000327  -0.000831   0.003708   0.002968  0.0000779  0.0000226    0.001181    0.000985
+1985  10  20  46358   0.226086   0.346727   0.4332627   0.0014632   0.000080  -0.000736   0.001424   0.001410  0.0000301  0.0000469    0.000459    0.000574
+1985  10  21  46359   0.226799   0.344393   0.4317467   0.0015823   0.000532  -0.000682   0.000746   0.000741  0.0000158  0.0000217    0.000242    0.000330
+1985  10  22  46360   0.226731   0.341876   0.4300773   0.0017619   0.000713  -0.000843   0.000628   0.000624  0.0000133  0.0000244    0.000203    0.000280
+1985  10  23  46361   0.225857   0.339108   0.4282172   0.0019549   0.000565  -0.001090   0.001674   0.001669  0.0000329  0.0000708    0.000492    0.000648
+1985  10  24  46362   0.225485   0.336032   0.4261738   0.0021227   0.000292  -0.001115   0.004800   0.004148  0.0001283  0.0000265    0.001803    0.001549
+1985  10  25  46363   0.226568   0.332689   0.4239869   0.0022404   0.000117  -0.000786   0.000773   0.000760  0.0000201  0.0000698    0.000470    0.000690
+1985  10  26  46364   0.228422   0.329308   0.4217137   0.0022946   0.000064  -0.000372   0.000539   0.000538  0.0000113  0.0000167    0.000269    0.000414
+1985  10  27  46365   0.229740   0.326146   0.4194210   0.0022774   0.000033  -0.000253   0.000788   0.000787  0.0000134  0.0000272    0.000317    0.000489
+1985  10  28  46366   0.230233   0.323302   0.4171811   0.0021857  -0.000017  -0.000488   0.001989   0.001744  0.0000430  0.0000169    0.000776    0.000848
+1985  10  29  46367   0.230095   0.320820   0.4150673   0.0020266  -0.000047  -0.000826   0.000907   0.000643  0.0000205  0.0000293    0.000280    0.000270
+1985  10  30  46368   0.229623   0.318611   0.4131383   0.0018236  -0.000013  -0.000978   0.000699   0.000508  0.0000157  0.0000190    0.000223    0.000216
+1985  10  31  46369   0.229192   0.316258   0.4114208   0.0016138   0.000092  -0.000835   0.000845   0.000730  0.0000176  0.0000171    0.000311    0.000322
+1985  11   1  46370   0.229091   0.313356   0.4099010   0.0014344   0.000217  -0.000534   0.001201   0.001131  0.0000185  0.0000326    0.000367    0.000401
+1985  11   2  46371   0.228687   0.310609   0.4085333   0.0013108   0.000276  -0.000292   0.002994   0.002450  0.0000476  0.0001392    0.000954    0.001045
+1985  11   3  46372   0.227795   0.308400   0.4072545   0.0012555   0.000202  -0.000266   0.006359   0.005083  0.0002600  0.0000448    0.004476    0.005151
+1985  11   4  46373   0.227529   0.305707   0.4059947   0.0012727  -0.000001  -0.000483   0.001659   0.001599  0.0000420  0.0001418    0.000734    0.000987
+1985  11   5  46374   0.227992   0.302418   0.4046814   0.0013651  -0.000244  -0.000823   0.000929   0.000896  0.0000236  0.0000326    0.000414    0.000558
+1985  11   6  46375   0.228393   0.299222   0.4032391   0.0015356  -0.000410  -0.001121   0.000930   0.000896  0.0000232  0.0000234    0.000407    0.000548
+1985  11   7  46376   0.228244   0.296411   0.4015922   0.0017767  -0.000437  -0.001274   0.002726   0.002483  0.0000232  0.0000201    0.000406    0.000548
+1985  11   8  46377   0.227708   0.293842   0.3996824   0.0020557  -0.000343  -0.001267   0.005362   0.004528  0.0000170  0.0000200    0.000247    0.000325
+1985  11   9  46378   0.227321   0.291476   0.3974999   0.0023073  -0.000202  -0.001131   0.000918   0.001078  0.0000167  0.0000168    0.000241    0.000317
+1985  11  10  46379   0.227521   0.289664   0.3951110   0.0024485  -0.000098  -0.000915   0.000620   0.000732  0.0000167  0.0000167    0.000241    0.000317
+1985  11  11  46380   0.228341   0.288362   0.3926608   0.0024150  -0.000090  -0.000664   0.000910   0.001043  0.0000167  0.0000167    0.000241    0.000317
+1985  11  12  46381   0.229329   0.286465   0.3903348   0.0022010  -0.000174  -0.000419   0.002134   0.002022  0.0000167  0.0000184    0.000241    0.000317
+1985  11  13  46382   0.229557   0.283595   0.3882884   0.0018737  -0.000288  -0.000231   0.002299   0.003558  0.0000201  0.0000186    0.000301    0.000423
+1985  11  14  46383   0.228399   0.280428   0.3865822   0.0015471  -0.000344  -0.000163   0.001527   0.001774  0.0000204  0.0000203    0.000308    0.000436
+1985  11  15  46384   0.226397   0.277433   0.3851585   0.0013314  -0.000272  -0.000263   0.000988   0.000974  0.0000204  0.0000204    0.000308    0.000436
+1985  11  16  46385   0.225185   0.274100   0.3838696   0.0012857  -0.000064  -0.000520   0.001167   0.001068  0.0000204  0.0000204    0.000308    0.000436
+1985  11  17  46386   0.224860   0.270496   0.3825419   0.0014005   0.000191  -0.000817   0.003541   0.001975  0.0000204  0.0000172    0.000308    0.000436
+1985  11  18  46387   0.224630   0.267353   0.3810402   0.0016137   0.000353  -0.000967   0.003660   0.001847  0.0000140  0.0000171    0.000231    0.000268
+1985  11  19  46388   0.224626   0.265077   0.3793054   0.0018456   0.000322  -0.000832   0.000647   0.000498  0.0000138  0.0000143    0.000228    0.000262
+1985  11  20  46389   0.225386   0.263363   0.3773549   0.0020307   0.000111  -0.000436   0.000668   0.000519  0.0000145  0.0000116    0.000245    0.000272
+1985  11  21  46390   0.226921   0.261345   0.3752591   0.0021332  -0.000132   0.000000   0.000406   0.000391  0.0000093  0.0000091    0.000274    0.000258
+1985  11  22  46391   0.228096   0.258116   0.3731081   0.0021479  -0.000087  -0.000029   0.000163   0.000167  0.0000038  0.0000061    0.000156    0.000144
+1985  11  23  46392   0.228374   0.254660   0.3709846   0.0020898   0.000057  -0.000265   0.000126   0.000130  0.0000029  0.0000044    0.000122    0.000115
+1985  11  24  46393   0.228084   0.252322   0.3689494   0.0019794  -0.000001  -0.000271   0.000226   0.000230  0.0000051  0.0000099    0.000178    0.000188
+1985  11  25  46394   0.227642   0.251037   0.3670435   0.0018329  -0.000221  -0.000068   0.000976   0.000966  0.0000169  0.0000112    0.000261    0.000381
+1985  11  26  46395   0.227264   0.249893   0.3652955   0.0016625  -0.000433   0.000146   0.001446   0.001369  0.0000174  0.0000172    0.000261    0.000384
+1985  11  27  46396   0.226817   0.248153   0.3637221   0.0014847  -0.000508   0.000214   0.002605   0.002134  0.0000174  0.0000209    0.000261    0.000384
+1985  11  28  46397   0.226250   0.245860   0.3623200   0.0013246  -0.000421   0.000093   0.002947   0.003068  0.0000243  0.0000213    0.000453    0.000630
+1985  11  29  46398   0.225652   0.243483   0.3610573   0.0012108  -0.000230  -0.000170   0.001933   0.002396  0.0000252  0.0000247    0.000488    0.000670
+1985  11  30  46399   0.225075   0.241235   0.3598752   0.0011651  -0.000035  -0.000488   0.001127   0.001542  0.0000252  0.0000252    0.000488    0.000670
+1985  12   1  46400   0.224359   0.238787   0.3586997   0.0011972   0.000074  -0.000781   0.001068   0.001478  0.0000252  0.0000251    0.000488    0.000670
+1985  12   2  46401   0.223297   0.236142   0.3574534   0.0013070   0.000068  -0.001004   0.003849   0.005027  0.0000251  0.0000215    0.000488    0.000669
+1985  12   3  46402   0.221776   0.233619   0.3560626   0.0014875  -0.000022  -0.001135   0.007920   0.005733  0.0000179  0.0000213    0.000280    0.000281
+1985  12   4  46403   0.219855   0.231251   0.3544628   0.0017232  -0.000124  -0.001160   0.001233   0.000764  0.0000175  0.0000177    0.000274    0.000273
+1985  12   5  46404   0.217804   0.228708   0.3526116   0.0019817  -0.000155  -0.001074   0.000966   0.000599  0.0000175  0.0000175    0.000274    0.000273
+1985  12   6  46405   0.216082   0.225935   0.3505103   0.0022106  -0.000078  -0.000891   0.000981   0.000608  0.0000175  0.0000175    0.000274    0.000273
+1985  12   7  46406   0.215216   0.223640   0.3482197   0.0023504   0.000049  -0.000645   0.002641   0.001707  0.0000175  0.0000169    0.000274    0.000273
+1985  12   8  46407   0.215238   0.222397   0.3458550   0.0023569   0.000089  -0.000385   0.004639   0.003904  0.0000163  0.0000169    0.000264    0.000441
+1985  12   9  46408   0.215198   0.221350   0.3435569   0.0022202  -0.000088  -0.000157   0.001174   0.001390  0.0000163  0.0000169    0.000267    0.000475
+1985  12  10  46409   0.213577   0.218381   0.3414542   0.0019691  -0.000505   0.000011   0.000824   0.000982  0.0000175  0.0000201    0.000286    0.000495
+1985  12  11  46410   0.210486   0.213395   0.3396311   0.0016667  -0.001026   0.000114   0.001188   0.001408  0.0000240  0.0000276    0.000395    0.000576
+1985  12  12  46411   0.208841   0.210427   0.3381004   0.0013954  -0.001359   0.000151   0.002520   0.002765  0.0000377  0.0000311    0.000641    0.000662
+1985  12  13  46412   0.208631   0.210111   0.3367955   0.0012298  -0.001328   0.000139   0.004454   0.002831  0.0000382  0.0000289    0.000672    0.000551
+1985  12  14  46413   0.207489   0.209272   0.3355898   0.0012059  -0.000978   0.000106   0.002857   0.001525  0.0000202  0.0000292    0.000361    0.000269
+1985  12  15  46414   0.205213   0.206434   0.3343445   0.0013058  -0.000501   0.000065   0.001603   0.000803  0.0000201  0.0000202    0.000361    0.000268
+1985  12  16  46415   0.204120   0.203399   0.3329608   0.0014711  -0.000106   0.000022   0.001701   0.000849  0.0000201  0.0000201    0.000361    0.000268
+1985  12  17  46416   0.204676   0.201445   0.3314058   0.0016356   0.000099  -0.000032   0.005661   0.002878  0.0000201  0.0000186    0.000361    0.000268
+1985  12  18  46417   0.205237   0.200227   0.3297067   0.0017515   0.000124  -0.000107   0.005233   0.004258  0.0000170  0.0000184    0.000301    0.000275
+1985  12  19  46418   0.204647   0.198957   0.3279254   0.0017974   0.000036  -0.000209   0.000658   0.000657  0.0000167  0.0000169    0.000296    0.000275
+1985  12  20  46419   0.203169   0.197141   0.3261348   0.0017711  -0.000093  -0.000331   0.000573   0.000572  0.0000167  0.0000167    0.000296    0.000275
+1985  12  21  46420   0.201658   0.194679   0.3244043   0.0016801  -0.000215  -0.000458   0.000578   0.000576  0.0000167  0.0000167    0.000296    0.000275
+1985  12  22  46421   0.200515   0.191742   0.3227922   0.0015377  -0.000312  -0.000568   0.001456   0.001435  0.0000167  0.0000167    0.000296    0.000275
+1985  12  23  46422   0.199591   0.188645   0.3213407   0.0013617  -0.000379  -0.000638   0.014332   0.010914  0.0000167  0.0000167    0.000296    0.000275
+1985  12  24  46423   0.198615   0.185716   0.3200731   0.0011725  -0.000409  -0.000654   0.017532   0.012215  0.0000167  0.0000167    0.000296    0.000275
+1985  12  25  46424   0.197546   0.183195   0.3189912   0.0009930  -0.000401  -0.000616   0.013241   0.011129  0.0000167  0.0000163    0.000296    0.000275
+1985  12  26  46425   0.196436   0.181168   0.3180738   0.0008465  -0.000364  -0.000537   0.012724   0.010951  0.0000158  0.0000163    0.000315    0.000299
+1985  12  27  46426   0.195200   0.179527   0.3172767   0.0007547  -0.000315  -0.000432   0.012303   0.010870  0.0000158  0.0000158    0.000315    0.000299
+1985  12  28  46427   0.193526   0.177986   0.3165372   0.0007330  -0.000271  -0.000313   0.006658   0.006702  0.0000158  0.0000158    0.000315    0.000299
+1985  12  29  46428   0.191197   0.176197   0.3157818   0.0007880  -0.000240  -0.000180   0.001688   0.001701  0.0000158  0.0000158    0.000315    0.000299
+1985  12  30  46429   0.188494   0.173931   0.3149363   0.0009154  -0.000221  -0.000024   0.000840   0.000846  0.0000158  0.0000158    0.000315    0.000299
+1985  12  31  46430   0.186002   0.171313   0.3139355   0.0010995  -0.000206   0.000145   0.000995   0.001002  0.0000158  0.0000158    0.000315    0.000299
+1986   1   1  46431   0.183948   0.169011   0.3127350   0.0013117  -0.000195   0.000293   0.003749   0.003675  0.0000158  0.0000166    0.000315    0.000299
+1986   1   2  46432   0.182193   0.167537   0.3113244   0.0015116  -0.000199   0.000345   0.004531   0.005351  0.0000175  0.0000167    0.000283    0.000272
+1986   1   3  46433   0.180595   0.166524   0.3097381   0.0016522  -0.000236   0.000219   0.000693   0.000894  0.0000176  0.0000175    0.000282    0.000270
+1986   1   4  46434   0.179055   0.165120   0.3080575   0.0016918  -0.000316  -0.000139   0.000663   0.000855  0.0000176  0.0000176    0.000282    0.000270
+1986   1   5  46435   0.177431   0.162842   0.3063970   0.0016128  -0.000419  -0.000683   0.000667   0.000859  0.0000176  0.0000176    0.000282    0.000270
+1986   1   6  46436   0.175457   0.160204   0.3048690   0.0014362  -0.000490  -0.001247   0.001603   0.002011  0.0000176  0.0000296    0.000282    0.000270
+1986   1   7  46437   0.172977   0.158162   0.3035442   0.0012201  -0.000462  -0.001587   0.008437   0.006728  0.0000416  0.0000353    0.000324    0.000299
+1986   1   8  46438   0.170253   0.157027   0.3024217   0.0010390  -0.000299  -0.001508   0.002357   0.002976  0.0000530  0.0000439    0.000328    0.000302
+1986   1   9  46439   0.167984   0.155868   0.3014327   0.0009472  -0.000038  -0.000992   0.000970   0.000772  0.0000462  0.0000431    0.000318    0.000305
+1986   1  10  46440   0.166440   0.153694   0.3004785   0.0009538   0.000207  -0.000251   0.000630   0.000378  0.0000331  0.0000372    0.000287    0.000319
+1986   1  11  46441   0.164669   0.151185   0.2994784   0.0010505   0.000293   0.000299   0.000529   0.000301  0.0000281  0.0000295    0.000268    0.000331
+1986   1  12  46442   0.162076   0.149231   0.2983483   0.0012377   0.000186   0.000412   0.001039   0.000617  0.0000259  0.0000228    0.000268    0.000324
+1986   1  13  46443   0.159378   0.147635   0.2969979   0.0014901   0.000004   0.000194   0.001210   0.001299  0.0000174  0.0000224    0.000331    0.000250
+1986   1  14  46444   0.157539   0.145763   0.2953831   0.0017381  -0.000095  -0.000073   0.000715   0.000862  0.0000189  0.0000208    0.000359    0.000271
+1986   1  15  46445   0.156523   0.143490   0.2935474   0.0018921  -0.000044  -0.000152   0.000732   0.000565  0.0000241  0.0000184    0.000386    0.000324
+1986   1  16  46446   0.155729   0.141162   0.2916269   0.0018955   0.000081  -0.000097   0.000474   0.000281  0.0000179  0.0000194    0.000234    0.000226
+1986   1  17  46447   0.154214   0.138902   0.2897812   0.0017640  -0.000014   0.000113   0.000407   0.000239  0.0000148  0.0000183    0.000192    0.000187
+1986   1  18  46448   0.151806   0.136934   0.2881185   0.0015613  -0.000293   0.000310   0.001068   0.000718  0.0000188  0.0000172    0.000294    0.000227
+1986   1  19  46449   0.149004   0.135520   0.2866716   0.0013554  -0.000433   0.000215   0.000680   0.000442  0.0000196  0.0000182    0.000333    0.000223
+1986   1  20  46450   0.145757   0.134713   0.2854126   0.0011899  -0.000237  -0.000211   0.000351   0.000211  0.0000177  0.0000181    0.000285    0.000185
+1986   1  21  46451   0.141919   0.133932   0.2842877   0.0010778   0.000010  -0.000546   0.000354   0.000209  0.0000167  0.0000169    0.000262    0.000168
+1986   1  22  46452   0.138292   0.132878   0.2832440   0.0010114   0.000070  -0.000504   0.001277   0.000712  0.0000161  0.0000153    0.000269    0.000173
+1986   1  23  46453   0.135628   0.131835   0.2822441   0.0009802  -0.000028  -0.000156   0.000922   0.000988  0.0000138  0.0000149    0.000415    0.000273
+1986   1  24  46454   0.133490   0.131058   0.2812567   0.0009885  -0.000103   0.000219   0.000677   0.000792  0.0000138  0.0000138    0.000416    0.000274
+1986   1  25  46455   0.131067   0.130544   0.2802368   0.0010573   0.000012   0.000350   0.000841   0.000941  0.0000138  0.0000138    0.000416    0.000274
+1986   1  26  46456   0.128414   0.130007   0.2791132   0.0012085   0.000298   0.000182   0.001133   0.001160  0.0000138  0.0000140    0.000416    0.000274
+1986   1  27  46457   0.125717   0.129335   0.2777989   0.0014439   0.000575  -0.000125   0.001805   0.002626  0.0000143  0.0000141    0.000587    0.000346
+1986   1  28  46458   0.123185   0.128406   0.2762194   0.0017302   0.000634  -0.000333   0.001076   0.001246  0.0000143  0.0000144    0.000498    0.000333
+1986   1  29  46459   0.120960   0.127071   0.2743510   0.0019997   0.000388  -0.000268   0.000552   0.000441  0.0000146  0.0000148    0.000288    0.000257
+1986   1  30  46460   0.118987   0.125162   0.2722497   0.0021726  -0.000058   0.000072   0.000369   0.000241  0.0000153  0.0000152    0.000170    0.000176
+1986   1  31  46461   0.116414   0.123439   0.2700463   0.0022095  -0.000415   0.000508   0.000444   0.000279  0.0000159  0.0000156    0.000142    0.000151
+1986   2   1  46462   0.112631   0.122816   0.2678728   0.0021305  -0.000526   0.000800   0.000688   0.000442  0.0000160  0.0000157    0.000145    0.000154
+1986   2   2  46463   0.108547   0.122836   0.2658198   0.0019735  -0.000462   0.000788   0.000389   0.000453  0.0000154  0.0000158    0.000288    0.000269
+1986   2   3  46464   0.105494   0.122440   0.2639444   0.0017638  -0.000395   0.000482   0.000348   0.000270  0.0000156  0.0000157    0.000222    0.000208
+1986   2   4  46465   0.103533   0.121249   0.2622892   0.0015197  -0.000463   0.000070   0.000286   0.000160  0.0000159  0.0000158    0.000149    0.000141
+1986   2   5  46466   0.100936   0.120264   0.2608797   0.0012929  -0.000633  -0.000141   0.000313   0.000161  0.0000161  0.0000161    0.000127    0.000121
+1986   2   6  46467   0.097453   0.120043   0.2596612   0.0011704  -0.000769  -0.000061   0.001116   0.000575  0.0000162  0.0000164    0.000130    0.000122
+1986   2   7  46468   0.094451   0.120039   0.2584919   0.0012081  -0.000723   0.000121   0.000825   0.001188  0.0000168  0.0000165    0.000314    0.000196
+1986   2   8  46469   0.092426   0.119427   0.2572077   0.0013870  -0.000416   0.000126   0.000468   0.000784  0.0000168  0.0000168    0.000317    0.000197
+1986   2   9  46470   0.090824   0.117846   0.2557011   0.0016237   0.000099  -0.000188   0.000461   0.000774  0.0000168  0.0000169    0.000317    0.000197
+1986   2  10  46471   0.089019   0.115904   0.2539664   0.0018217   0.000615  -0.000643   0.000478   0.000724  0.0000170  0.0000181    0.000317    0.000207
+1986   2  11  46472   0.086769   0.114763   0.2520808   0.0019246   0.000863  -0.000860   0.000730   0.000517  0.0000195  0.0000179    0.000319    0.000407
+1986   2  12  46473   0.084148   0.115050   0.2501480   0.0019319   0.000686  -0.000553   0.000677   0.000516  0.0000189  0.0000184    0.000327    0.000337
+1986   2  13  46474   0.081407   0.115988   0.2482470   0.0018790   0.000160   0.000228   0.000582   0.000529  0.0000172  0.0000176    0.000354    0.000241
+1986   2  14  46475   0.078788   0.115563   0.2464143   0.0017880  -0.000406   0.001022   0.000764   0.000745  0.0000163  0.0000167    0.000376    0.000209
+1986   2  15  46476   0.076541   0.114100   0.2446874   0.0016500  -0.000733   0.001415   0.002053   0.001703  0.0000162  0.0000171    0.000381    0.000204
+1986   2  16  46477   0.074656   0.113223   0.2431218   0.0014584  -0.000733   0.001306   0.002615   0.001890  0.0000179  0.0000171    0.000398    0.000289
+1986   2  17  46478   0.072727   0.113397   0.2417683   0.0012334  -0.000505   0.000862   0.000689   0.000623  0.0000181  0.0000180    0.000399    0.000302
+1986   2  18  46479   0.070268   0.114076   0.2406432   0.0010169  -0.000221   0.000375   0.000685   0.000620  0.0000181  0.0000181    0.000399    0.000302
+1986   2  19  46480   0.067126   0.114488   0.2397145   0.0008556  -0.000022   0.000075   0.000709   0.000641  0.0000181  0.0000181    0.000399    0.000302
+1986   2  20  46481   0.063753   0.114412   0.2389059   0.0007832   0.000040   0.000021   0.002359   0.002101  0.0000181  0.0000163    0.000399    0.000302
+1986   2  21  46482   0.060752   0.114125   0.2381180   0.0008129  -0.000015   0.000133   0.005100   0.004793  0.0000144  0.0000162    0.000257    0.000272
+1986   2  22  46483   0.058114   0.113965   0.2372491   0.0009401  -0.000136   0.000286   0.000796   0.000826  0.0000143  0.0000144    0.000251    0.000270
+1986   2  23  46484   0.055125   0.114061   0.2362108   0.0011470  -0.000273   0.000386   0.000574   0.000597  0.0000143  0.0000143    0.000251    0.000270
+1986   2  24  46485   0.051393   0.114372   0.2349398   0.0014012  -0.000386   0.000404   0.000810   0.000852  0.0000143  0.0000143    0.000251    0.000270
+1986   2  25  46486   0.047658   0.114764   0.2334126   0.0016547  -0.000457   0.000372   0.002055   0.002537  0.0000143  0.0000151    0.000251    0.000270
+1986   2  26  46487   0.044488   0.115232   0.2316572   0.0018509  -0.000483   0.000343   0.002317   0.004323  0.0000160  0.0000152    0.000316    0.000292
+1986   2  27  46488   0.041390   0.115787   0.2297552   0.0019412  -0.000483   0.000354   0.001212   0.001524  0.0000162  0.0000161    0.000322    0.000294
+1986   2  28  46489   0.037982   0.116001   0.2278251   0.0019033  -0.000488   0.000418   0.000686   0.000793  0.0000162  0.0000162    0.000322    0.000294
+1986   3   1  46490   0.034799   0.115265   0.2259905   0.0017508  -0.000533   0.000523   0.000888   0.000994  0.0000162  0.0000162    0.000322    0.000294
+1986   3   2  46491   0.032029   0.114308   0.2243459   0.0015280  -0.000622   0.000634   0.002492   0.002166  0.0000162  0.0000175    0.000322    0.000294
+1986   3   3  46492   0.029447   0.114179   0.2229330   0.0012938  -0.000724   0.000709   0.002214   0.001757  0.0000189  0.0000177    0.000300    0.000325
+1986   3   4  46493   0.026805   0.114946   0.2217347   0.0011056  -0.000775   0.000698   0.000539   0.000496  0.0000191  0.0000190    0.000299    0.000327
+1986   3   5  46494   0.023926   0.115946   0.2206833   0.0010063  -0.000705   0.000568   0.000536   0.000494  0.0000191  0.0000192    0.000299    0.000327
+1986   3   6  46495   0.020758   0.116563   0.2196782   0.0010169  -0.000486   0.000316   0.000599   0.000551  0.0000191  0.0000191    0.000299    0.000327
+1986   3   7  46496   0.017354   0.116826   0.2186111   0.0011311  -0.000196   0.000008   0.002325   0.002123  0.0000191  0.0000175    0.000299    0.000327
+1986   3   8  46497   0.013892   0.117170   0.2173923   0.0013166  -0.000005  -0.000224   0.004847   0.004292  0.0000159  0.0000174    0.000293    0.000345
+1986   3   9  46498   0.010676   0.117849   0.2159743   0.0015202  -0.000078  -0.000243   0.000678   0.000625  0.0000157  0.0000158    0.000293    0.000346
+1986   3  10  46499   0.007986   0.118701   0.2143670   0.0016837  -0.000453   0.000013   0.000630   0.000581  0.0000157  0.0000157    0.000293    0.000346
+1986   3  11  46500   0.005806   0.119347   0.2126345   0.0017639  -0.000938   0.000449   0.000926   0.000848  0.0000157  0.0000193    0.000292    0.000347
+1986   3  12  46501   0.003798   0.119452   0.2108709   0.0017374  -0.001112   0.000798   0.001712   0.001364  0.0000230  0.0000213    0.000280    0.000416
+1986   3  13  46502   0.000931   0.119687   0.2091885   0.0015937  -0.000688   0.000805   0.001212   0.000871  0.0000269  0.0000251    0.000256    0.000387
+1986   3  14  46503  -0.003139   0.120702   0.2077048   0.0013288   0.000135   0.000446   0.001041   0.000745  0.0000271  0.0000272    0.000218    0.000298
+1986   3  15  46504  -0.006316   0.121259   0.2065431   0.0010245   0.000191   0.000149   0.000885   0.000652  0.0000276  0.0000275    0.000246    0.000299
+1986   3  16  46505  -0.008584   0.120893   0.2056579   0.0008021  -0.000077  -0.000022   0.000985   0.000743  0.0000279  0.0000278    0.000317    0.000336
+1986   3  17  46506  -0.010946   0.120426   0.2049305   0.0006775   0.000076  -0.000151   0.002711   0.002262  0.0000280  0.0000220    0.000352    0.000350
+1986   3  18  46507  -0.013443   0.120648   0.2042855   0.0006141   0.000540  -0.000194   0.002954   0.002758  0.0000161  0.0000219    0.000284    0.000312
+1986   3  19  46508  -0.015596   0.121666   0.2036783   0.0005945   0.000846  -0.000091   0.000649   0.000605  0.0000159  0.0000166    0.000281    0.000311
+1986   3  20  46509  -0.017001   0.122954   0.2030685   0.0006265   0.000559   0.000198   0.000664   0.000613  0.0000170  0.0000195    0.000288    0.000318
+1986   3  21  46510  -0.017948   0.123905   0.2023957   0.0007370  -0.000282   0.000625   0.001008   0.000862  0.0000231  0.0000262    0.000313    0.000346
+1986   3  22  46511  -0.019635   0.124362   0.2015660   0.0009477  -0.000891   0.001016   0.003221   0.001870  0.0000354  0.0000246    0.000335    0.000369
+1986   3  23  46512  -0.021612   0.124667   0.2004780   0.0012516  -0.000824   0.001193   0.005159   0.003793  0.0000261  0.0000231    0.000324    0.000320
+1986   3  24  46513  -0.023252   0.125557   0.1990549   0.0016078  -0.000340   0.001075   0.000636   0.000602  0.0000108  0.0000184    0.000246    0.000178
+1986   3  25  46514  -0.025678   0.127683   0.1972766   0.0019452   0.000040   0.000693   0.000548   0.000519  0.0000108  0.0000118    0.000247    0.000179
+1986   3  26  46515  -0.029531   0.130764   0.1952028   0.0021822  -0.000006   0.000179   0.000833   0.000786  0.0000129  0.0000307    0.000295    0.000213
+1986   3  27  46516  -0.033245   0.133447   0.1929668   0.0022582  -0.000205  -0.000284   0.002631   0.002465  0.0000506  0.0000291    0.001123    0.000751
+1986   3  28  46517  -0.035407   0.133683   0.1907406   0.0021597  -0.000118  -0.000536   0.002343   0.003133  0.0000453  0.0000350    0.000821    0.000689
+1986   3  29  46518  -0.037099   0.133089   0.1886837   0.0019250   0.000140  -0.000510   0.000894   0.001215  0.0000195  0.0000332    0.000355    0.000320
+1986   3  30  46519  -0.040099   0.134584   0.1868984   0.0016265   0.000165  -0.000267   0.000735   0.001000  0.0000210  0.0000386    0.000381    0.000342
+1986   3  31  46520  -0.043542   0.137041   0.1854103   0.0013456  -0.000115   0.000005   0.002039   0.002559  0.0000578  0.0000487    0.000893    0.000725
+1986   4   1  46521  -0.044937   0.136930   0.1841684   0.0011534  -0.000361   0.000110   0.005552   0.002733  0.0000763  0.0000518    0.000710    0.000556
+1986   4   2  46522  -0.045029   0.136257   0.1830591   0.0010986  -0.000296   0.000078   0.003539   0.002048  0.0000458  0.0000541    0.000459    0.000368
+1986   4   3  46523  -0.046520   0.138323   0.1819331   0.0011941   0.000026   0.000084   0.001355   0.001294  0.0000319  0.0000308    0.000505    0.000398
+1986   4   4  46524  -0.049475   0.141740   0.1806465   0.0014064   0.000150   0.000191   0.000624   0.000617  0.0000158  0.0000221    0.000313    0.000254
+1986   4   5  46525  -0.051922   0.143062   0.1791126   0.0016599  -0.000281   0.000359   0.000516   0.000449  0.0000123  0.0000138    0.000260    0.000235
+1986   4   6  46526  -0.054292   0.143678   0.1773354   0.0018734  -0.000890   0.000510   0.000569   0.000453  0.0000117  0.0000159    0.000261    0.000262
+1986   4   7  46527  -0.057001   0.145588   0.1753871   0.0019989  -0.001134   0.000594   0.001464   0.001133  0.0000194  0.0000170    0.000439    0.000407
+1986   4   8  46528  -0.058764   0.147640   0.1733659   0.0020234  -0.000872   0.000611   0.000961   0.000726  0.0000224  0.0000157    0.000777    0.000297
+1986   4   9  46529  -0.060019   0.149500   0.1713690   0.0019576  -0.000275   0.000592   0.000468   0.000355  0.0000119  0.0000161    0.000439    0.000160
+1986   4  10  46530  -0.061734   0.152003   0.1694746   0.0018238   0.000327   0.000540   0.000559   0.000422  0.0000099  0.0000108    0.000367    0.000133
+1986   4  11  46531  -0.063301   0.155254   0.1677375   0.0016492   0.000703   0.000462   0.001143   0.000837  0.0000096  0.0000114    0.000356    0.000129
+1986   4  12  46532  -0.064296   0.158204   0.1661828   0.0014660   0.000797   0.000365   0.003788   0.002493  0.0000129  0.0000114    0.000294    0.000217
+1986   4  13  46533  -0.065031   0.159977   0.1648019   0.0013064   0.000690   0.000256   0.000786   0.000981  0.0000133  0.0000131    0.000291    0.000233
+1986   4  14  46534  -0.066128   0.161343   0.1635567   0.0011951   0.000507   0.000147   0.000404   0.000525  0.0000133  0.0000133    0.000291    0.000233
+1986   4  15  46535  -0.067841   0.163670   0.1623907   0.0011443   0.000341   0.000060   0.000537   0.000687  0.0000133  0.0000133    0.000291    0.000233
+1986   4  16  46536  -0.069582   0.166373   0.1612426   0.0011550   0.000227   0.000014   0.001578   0.001644  0.0000133  0.0000140    0.000291    0.000233
+1986   4  17  46537  -0.070779   0.168299   0.1600540   0.0012236   0.000156   0.000028   0.002438   0.002147  0.0000147  0.0000141    0.000212    0.000197
+1986   4  18  46538  -0.071706   0.169721   0.1587693   0.0013492   0.000122   0.000101   0.001089   0.001118  0.0000148  0.0000148    0.000209    0.000196
+1986   4  19  46539  -0.073006   0.171566   0.1573325   0.0015329   0.000129   0.000221   0.000713   0.000720  0.0000148  0.0000148    0.000209    0.000196
+1986   4  20  46540  -0.075017   0.174102   0.1556885   0.0017664   0.000187   0.000354   0.000582   0.000587  0.0000148  0.0000148    0.000209    0.000196
+1986   4  21  46541  -0.077155   0.176470   0.1538003   0.0020167   0.000294   0.000464   0.001249   0.001338  0.0000148  0.0000189    0.000209    0.000196
+1986   4  22  46542  -0.078550   0.177746   0.1516780   0.0022212   0.000430   0.000516   0.002672   0.006380  0.0000229  0.0000195    0.000398    0.000253
+1986   4  23  46543  -0.079160   0.178220   0.1494036   0.0023056   0.000546   0.000501   0.000914   0.004295  0.0000242  0.0000235    0.000443    0.000260
+1986   4  24  46544  -0.080189   0.179658   0.1471245   0.0022229   0.000589   0.000439   0.000612   0.002490  0.0000242  0.0000242    0.000443    0.000260
+1986   4  25  46545  -0.082427   0.182998   0.1450086   0.0019868   0.000521   0.000365   0.000810   0.002077  0.0000242  0.0000242    0.000443    0.000260
+1986   4  26  46546  -0.084511   0.186340   0.1431764   0.0016746   0.000355   0.000319   0.001248   0.001902  0.0000242  0.0000213    0.000442    0.000260
+1986   4  27  46547  -0.085341   0.188431   0.1416513   0.0013940   0.000165   0.000325   0.002764   0.003026  0.0000185  0.0000212    0.000225    0.000212
+1986   4  28  46548  -0.085031   0.189564   0.1403524   0.0012354   0.000059   0.000383   0.001475   0.001472  0.0000182  0.0000184    0.000219    0.000210
+1986   4  29  46549  -0.084672   0.190792   0.1391323   0.0012341   0.000127   0.000469   0.000870   0.000851  0.0000182  0.0000182    0.000219    0.000210
+1986   4  30  46550  -0.085538   0.192754   0.1378410   0.0013603   0.000368   0.000543   0.000961   0.000957  0.0000182  0.0000182    0.000219    0.000210
+1986   5   1  46551  -0.086446   0.195229   0.1363848   0.0015453   0.000657   0.000555   0.002108   0.002295  0.0000182  0.0000185    0.000217    0.000211
+1986   5   2  46552  -0.086115   0.197939   0.1347425   0.0017253   0.000805   0.000466   0.001241   0.000483  0.0000187  0.0000193    0.000205    0.000221
+1986   5   3  46553  -0.085783   0.201001   0.1329423   0.0018698   0.000677   0.000279   0.000987   0.000390  0.0000204  0.0000237    0.000221    0.000239
+1986   5   4  46554  -0.086875   0.204182   0.1310216   0.0019883   0.000291   0.000041   0.001100   0.000561  0.0000288  0.0000358    0.000301    0.000335
+1986   5   5  46555  -0.088539   0.206455   0.1289900   0.0020759  -0.000144  -0.000151   0.001228   0.001114  0.0000512  0.0000496    0.000467    0.000571
+1986   5   6  46556  -0.089804   0.207595   0.1268952   0.0020896  -0.000429  -0.000221   0.003521   0.004515  0.0000705  0.0000319    0.000563    0.000752
+1986   5   7  46557  -0.090749   0.208468   0.1248334   0.0020020  -0.000478  -0.000164   0.004848   0.004887  0.0000126  0.0000414    0.000288    0.000253
+1986   5   8  46558  -0.091762   0.209917   0.1229081   0.0018220  -0.000311  -0.000031   0.000745   0.000841  0.0000122  0.0000124    0.000280    0.000246
+1986   5   9  46559  -0.092807   0.211867   0.1211982   0.0015858  -0.000015   0.000094   0.000457   0.000514  0.0000122  0.0000122    0.000280    0.000246
+1986   5  10  46560  -0.093688   0.213798   0.1197361   0.0013461   0.000304   0.000145   0.000453   0.000509  0.0000122  0.0000122    0.000280    0.000246
+1986   5  11  46561  -0.094479   0.215586   0.1184963   0.0011550   0.000547   0.000119   0.000481   0.000539  0.0000122  0.0000132    0.000280    0.000246
+1986   5  12  46562  -0.095371   0.217475   0.1174082   0.0010438   0.000633   0.000071   0.002292   0.002089  0.0000143  0.0000133    0.000216    0.000443
+1986   5  13  46563  -0.096301   0.219549   0.1163853   0.0010121   0.000527   0.000082   0.001268   0.001261  0.0000144  0.0000140    0.000213    0.000477
+1986   5  14  46564  -0.096844   0.221479   0.1153587   0.0010292   0.000270   0.000196   0.000712   0.000696  0.0000138  0.0000128    0.000205    0.000405
+1986   5  15  46565  -0.096397   0.222493   0.1143029   0.0010543  -0.000017   0.000377   0.000567   0.000467  0.0000111  0.0000120    0.000173    0.000248
+1986   5  16  46566  -0.096412   0.224363   0.1132295   0.0010889  -0.000146   0.000550   0.000658   0.000522  0.0000102  0.0000131    0.000162    0.000208
+1986   5  17  46567  -0.097878   0.228014   0.1121100   0.0011880  -0.000140   0.000584   0.000523   0.000539  0.0000152  0.0000149    0.000236    0.000254
+1986   5  18  46568  -0.099626   0.231286   0.1108479   0.0013838  -0.000256   0.000386   0.000469   0.000506  0.0000197  0.0000347    0.000302    0.000307
+1986   5  19  46569  -0.100890   0.233354   0.1093523   0.0016328  -0.000561   0.000150   0.001280   0.001322  0.0000543  0.0001372    0.000728    0.000823
+1986   5  20  46570  -0.102052   0.235653   0.1076121   0.0018393  -0.000838   0.000181   0.006762   0.003737  0.0002547  0.0001549    0.001319    0.002635
+1986   5  21  46571  -0.103247   0.238568   0.1057214   0.0019079  -0.000870   0.000425   0.016414   0.007550  0.0002554  0.0002072    0.001544    0.003420
+1986   5  22  46572  -0.104045   0.241095   0.1038497   0.0017924  -0.000555   0.000583   0.005326   0.005304  0.0001597  0.0001438    0.001438    0.002657
+1986   5  23  46573  -0.104068   0.242375   0.1021770   0.0015199   0.000022   0.000419   0.000811   0.000857  0.0000322  0.0000886    0.000509    0.000626
+1986   5  24  46574  -0.103543   0.242924   0.1008207   0.0011828   0.000634  -0.000012   0.000456   0.000502  0.0000175  0.0000247    0.000286    0.000343
+1986   5  25  46575  -0.103038   0.243845   0.0997878   0.0008981   0.001039  -0.000454   0.000449   0.000496  0.0000172  0.0000174    0.000281    0.000336
+1986   5  26  46576  -0.102908   0.245639   0.0989771   0.0007525   0.001114  -0.000722   0.000498   0.000551  0.0000172  0.0000150    0.000281    0.000336
+1986   5  27  46577  -0.103145   0.248103   0.0982315   0.0007651   0.000910  -0.000781   0.002500   0.002824  0.0000128  0.0000149    0.000226    0.000356
+1986   5  28  46578  -0.103538   0.250747   0.0974101   0.0008907   0.000586  -0.000709   0.001051   0.001093  0.0000125  0.0000126    0.000223    0.000358
+1986   5  29  46579  -0.103856   0.253192   0.0964368   0.0010549   0.000310  -0.000610   0.000570   0.000586  0.0000125  0.0000125    0.000223    0.000358
+1986   5  30  46580  -0.103931   0.255468   0.0953083   0.0011924   0.000182  -0.000544   0.000697   0.000718  0.0000125  0.0000125    0.000223    0.000358
+1986   5  31  46581  -0.103758   0.257479   0.0940732   0.0012647   0.000204  -0.000513   0.001812   0.001956  0.0000125  0.0000124    0.000223    0.000357
+1986   6   1  46582  -0.103464   0.259181   0.0928046   0.0012591   0.000314  -0.000493   0.001684   0.001947  0.0000122  0.0000124    0.000215    0.000196
+1986   6   2  46583  -0.103234   0.260783   0.0915797   0.0011794   0.000431  -0.000464   0.000431   0.000483  0.0000122  0.0000122    0.000214    0.000191
+1986   6   3  46584  -0.103217   0.262562   0.0904668   0.0010384   0.000502  -0.000423   0.000429   0.000480  0.0000122  0.0000122    0.000214    0.000191
+1986   6   4  46585  -0.103404   0.264728   0.0895185   0.0008543   0.000509  -0.000377   0.000436   0.000488  0.0000122  0.0000122    0.000214    0.000191
+1986   6   5  46586  -0.103587   0.267320   0.0887670   0.0006489   0.000461  -0.000326   0.001277   0.001405  0.0000122  0.0000146    0.000214    0.000191
+1986   6   6  46587  -0.103534   0.270183   0.0882214   0.0004455   0.000375  -0.000264   0.004834   0.003971  0.0000169  0.0000149    0.000319    0.000262
+1986   6   7  46588  -0.103258   0.273023   0.0878681   0.0002657   0.000256  -0.000169   0.000787   0.000785  0.0000176  0.0000173    0.000335    0.000272
+1986   6   8  46589  -0.103061   0.275545   0.0876741   0.0001284   0.000097  -0.000024   0.000493   0.000494  0.0000176  0.0000176    0.000335    0.000272
+1986   6   9  46590  -0.103127   0.277593   0.0875893   0.0000504  -0.000094   0.000164   0.000668   0.000665  0.0000176  0.0000176    0.000335    0.000272
+1986   6  10  46591  -0.103212   0.279190   0.0875480   0.0000449  -0.000284   0.000354   0.002024   0.001835  0.0000176  0.0000194    0.000335    0.000272
+1986   6  11  46592  -0.102698   0.280735   0.0874748   0.0001175  -0.000405   0.000478   0.003041   0.002148  0.0000212  0.0000197    0.000309    0.000307
+1986   6  12  46593  -0.101178   0.282746   0.0872926   0.0002640  -0.000383   0.000469   0.001557   0.001248  0.0000218  0.0000222    0.000309    0.000311
+1986   6  13  46594  -0.099404   0.284899   0.0869331   0.0004690  -0.000189   0.000303   0.000961   0.000749  0.0000232  0.0000250    0.000321    0.000316
+1986   6  14  46595  -0.099075   0.286069   0.0863497   0.0007013   0.000127   0.000029   0.001424   0.000794  0.0000282  0.0000286    0.000355    0.000330
+1986   6  15  46596  -0.099251   0.287173   0.0855366   0.0009282   0.000463  -0.000252   0.003817   0.001129  0.0000340  0.0000266    0.000386    0.000341
+1986   6  16  46597  -0.098194   0.289407   0.0845131   0.0011202   0.000637  -0.000325   0.003827   0.001615  0.0000249  0.0000269    0.000397    0.000351
+1986   6  17  46598  -0.095867   0.292314   0.0833306   0.0012393   0.000540  -0.000068   0.001201   0.000969  0.0000199  0.0000166    0.000354    0.000326
+1986   6  18  46599  -0.093247   0.294777   0.0820792   0.0012500   0.000278   0.000321   0.000451   0.000386  0.0000082  0.0000116    0.000265    0.000248
+1986   6  19  46600  -0.091102   0.296504   0.0808732   0.0011243   0.000285   0.000184   0.000215   0.000177  0.0000034  0.0000055    0.000202    0.000164
+1986   6  20  46601  -0.089728   0.298828   0.0798548   0.0008796   0.000473  -0.000274   0.000234   0.000192  0.0000027  0.0000031    0.000182    0.000141
+1986   6  21  46602  -0.088875   0.301645   0.0791078   0.0006108   0.000562  -0.000534   0.000489   0.000395  0.0000027  0.0000094    0.000183    0.000141
+1986   6  22  46603  -0.087985   0.303912   0.0785965   0.0004317   0.000489  -0.000458   0.001015   0.000698  0.0000162  0.0000108    0.000263    0.000235
+1986   6  23  46604  -0.086678   0.305783   0.0781913   0.0004081   0.000323  -0.000152   0.000971   0.000657  0.0000190  0.0000176    0.000264    0.000237
+1986   6  24  46605  -0.085003   0.307703   0.0777318   0.0005349   0.000195   0.000148   0.001366   0.000931  0.0000190  0.0000190    0.000264    0.000237
+1986   6  25  46606  -0.083437   0.309484   0.0770949   0.0007497   0.000185   0.000280   0.003183   0.002302  0.0000190  0.0000201    0.000264    0.000237
+1986   6  26  46607  -0.082110   0.311289   0.0762331   0.0009704   0.000290   0.000215   0.003692   0.002623  0.0000212  0.0000202    0.000292    0.000274
+1986   6  27  46608  -0.080557   0.313909   0.0751758   0.0011288   0.000446   0.000027   0.001399   0.001178  0.0000214  0.0000213    0.000295    0.000277
+1986   6  28  46609  -0.078565   0.317126   0.0740063   0.0011899   0.000571  -0.000178   0.000689   0.000599  0.0000214  0.0000214    0.000295    0.000277
+1986   6  29  46610  -0.076557   0.319575   0.0728258   0.0011531   0.000606  -0.000308   0.000733   0.000636  0.0000214  0.0000214    0.000295    0.000277
+1986   6  30  46611  -0.074790   0.321073   0.0717234   0.0010404   0.000546  -0.000324   0.002754   0.001967  0.0000214  0.0000257    0.000295    0.000277
+1986   7   1  46612  -0.073227   0.322591   0.0707609   0.0008799   0.000435  -0.000238   0.005423   0.002732  0.0000300  0.0000264    0.000373    0.000277
+1986   7   2  46613  -0.071843   0.324767   0.0699720   0.0006974   0.000333  -0.000096   0.000786   0.000678  0.0000313  0.0000307    0.000382    0.000277
+1986   7   3  46614  -0.070651   0.327452   0.0693669   0.0005138   0.000297   0.000048   0.000720   0.000624  0.0000313  0.0000310    0.000382    0.000277
+1986   7   4  46615  -0.069619   0.330107   0.0689371   0.0003480   0.000341   0.000145   0.000674   0.000597  0.0000307  0.0000246    0.000367    0.000264
+1986   7   5  46616  -0.068639   0.332341   0.0686557   0.0002197   0.000426   0.000173   0.000259   0.000269  0.0000180  0.0000238    0.000169    0.000114
+1986   7   6  46617  -0.067574   0.334137   0.0684761   0.0001504   0.000496   0.000135   0.000242   0.000254  0.0000170  0.0000177    0.000159    0.000107
+1986   7   7  46618  -0.066310   0.335866   0.0683293   0.0001595   0.000530   0.000047   0.000288   0.000297  0.0000175  0.0000178    0.000182    0.000124
+1986   7   8  46619  -0.064729   0.338185   0.0681308   0.0002552   0.000571  -0.000071   0.000798   0.000671  0.0000185  0.0000180    0.000325    0.000260
+1986   7   9  46620  -0.062778   0.341481   0.0677960   0.0004267   0.000677  -0.000197   0.001312   0.001055  0.0000186  0.0000185    0.000344    0.000285
+1986   7  10  46621  -0.060586   0.345244   0.0672620   0.0006446   0.000843  -0.000299   0.002532   0.002159  0.0000186  0.0000209    0.000342    0.000284
+1986   7  11  46622  -0.058853   0.347967   0.0665022   0.0008692   0.000984  -0.000330   0.002336   0.001695  0.0000232  0.0000211    0.000094    0.000094
+1986   7  12  46623  -0.058217   0.348588   0.0655311   0.0010592   0.000983  -0.000243   0.000606   0.000470  0.0000236  0.0000234    0.000092    0.000092
+1986   7  13  46624  -0.058162   0.348145   0.0644031   0.0011767   0.000770  -0.000019   0.000318   0.000252  0.0000236  0.0000236    0.000092    0.000092
+1986   7  14  46625  -0.057308   0.348706   0.0632074   0.0011920   0.000401   0.000295   0.000351   0.000280  0.0000236  0.0000250    0.000092    0.000092
+1986   7  15  46626  -0.055541   0.349967   0.0620556   0.0010916   0.000079   0.000567   0.001526   0.001217  0.0000263  0.0000469    0.000103    0.000104
+1986   7  16  46627  -0.053593   0.350586   0.0610609   0.0008872   0.000031   0.000649   0.003227   0.002815  0.0000703  0.0000272    0.000554    0.000938
+1986   7  17  46628  -0.051915   0.350881   0.0603075   0.0006231   0.000330   0.000473   0.000964   0.001156  0.0000280  0.0000426    0.000458    0.000708
+1986   7  18  46629  -0.050359   0.352204   0.0598195   0.0003691   0.000790   0.000127   0.000607   0.000724  0.0000150  0.0000203    0.000323    0.000452
+1986   7  19  46630  -0.048567   0.354523   0.0595467   0.0002037   0.000990  -0.000108   0.000494   0.000587  0.0000125  0.0000136    0.000282    0.000387
+1986   7  20  46631  -0.046235   0.356912   0.0593670   0.0001858   0.000747  -0.000102   0.000702   0.000829  0.0000122  0.0000138    0.000276    0.000377
+1986   7  21  46632  -0.043462   0.358736   0.0591229   0.0003257   0.000248   0.000059   0.004742   0.005126  0.0000151  0.0000143    0.000336    0.000294
+1986   7  22  46633  -0.040862   0.359744   0.0586759   0.0005768  -0.000133   0.000202   0.001195   0.001280  0.0000163  0.0000170    0.000361    0.000305
+1986   7  23  46634  -0.039216   0.360042   0.0579556   0.0008532  -0.000104   0.000196   0.000667   0.000721  0.0000188  0.0000209    0.000414    0.000344
+1986   7  24  46635  -0.038679   0.360189   0.0569835   0.0010657   0.000327   0.000047   0.000887   0.000907  0.0000255  0.0000382    0.000558    0.000436
+1986   7  25  46636  -0.037875   0.361288   0.0558562   0.0011571   0.000780  -0.000051   0.001998   0.001820  0.0000577  0.0000214    0.000903    0.000543
+1986   7  26  46637  -0.035717   0.363563   0.0547061   0.0011181   0.000934  -0.000007   0.000568   0.000532  0.0000173  0.0000337    0.000218    0.000191
+1986   7  27  46638  -0.033123   0.365577   0.0536514   0.0009781   0.000721   0.000030   0.000328   0.000309  0.0000098  0.0000139    0.000127    0.000114
+1986   7  28  46639  -0.031618   0.366173   0.0527711   0.0007772   0.000340  -0.000113   0.000396   0.000383  0.0000105  0.0000106    0.000162    0.000139
+1986   7  29  46640  -0.030412   0.367031   0.0521079   0.0005530   0.000079  -0.000184   0.000614   0.000618  0.0000114  0.0000114    0.000212    0.000171
+1986   7  30  46641  -0.028965   0.368629   0.0516669   0.0003402   0.000103  -0.000018   0.001955   0.002267  0.0000123  0.0000509    0.000240    0.000192
+1986   7  31  46642  -0.027615   0.369717   0.0514209   0.0001676   0.000372   0.000300   0.002899   0.002636  0.0000905  0.0000255    0.000643    0.000961
+1986   8   1  46643  -0.026552   0.369692   0.0513171   0.0000552   0.000691   0.000545   0.001148   0.001026  0.0000387  0.0000540    0.000433    0.000419
+1986   8   2  46644  -0.025693   0.369596   0.0512893   0.0000070   0.000848   0.000503   0.000660   0.000521  0.0000175  0.0000246    0.000199    0.000179
+1986   8   3  46645  -0.024741   0.372024   0.0512775   0.0000148   0.000706   0.000122   0.000555   0.000331  0.0000104  0.0000132    0.000107    0.000101
+1986   8   4  46646  -0.023582   0.373850   0.0512325   0.0000814   0.000418  -0.000335   0.000645   0.000332  0.0000089  0.0000097    0.000089    0.000085
+1986   8   5  46647  -0.022239   0.373550   0.0510893   0.0002271   0.000188  -0.000607   0.002163   0.001027  0.0000090  0.0000106    0.000091    0.000087
+1986   8   6  46648  -0.020671   0.373737   0.0507591   0.0004610   0.000100  -0.000604   0.000879   0.000901  0.0000123  0.0000106    0.000325    0.000321
+1986   8   7  46649  -0.018811   0.375591   0.0501588   0.0007555   0.000146  -0.000380   0.000577   0.000637  0.0000123  0.0000123    0.000331    0.000328
+1986   8   8  46650  -0.016769   0.378057   0.0492542   0.0010476   0.000266  -0.000066   0.000745   0.000818  0.0000123  0.0000123    0.000331    0.000328
+1986   8   9  46651  -0.014895   0.379813   0.0480850   0.0012661   0.000404   0.000230   0.001130   0.001215  0.0000123  0.0000132    0.000331    0.000328
+1986   8  10  46652  -0.013506   0.380262   0.0467550   0.0013629   0.000522   0.000439   0.003669   0.002404  0.0000140  0.0000133    0.000351    0.000250
+1986   8  11  46653  -0.012637   0.379803   0.0453974   0.0013241   0.000587   0.000530   0.001589   0.001271  0.0000142  0.0000141    0.000352    0.000246
+1986   8  12  46654  -0.011997   0.379514   0.0441418   0.0011648   0.000563   0.000505   0.000863   0.000723  0.0000142  0.0000142    0.000352    0.000246
+1986   8  13  46655  -0.011142   0.380607   0.0430918   0.0009210   0.000433   0.000391   0.000868   0.000727  0.0000142  0.0000142    0.000352    0.000246
+1986   8  14  46656  -0.009844   0.382612   0.0423062   0.0006471   0.000243   0.000232   0.003204   0.002171  0.0000142  0.0000137    0.000352    0.000246
+1986   8  15  46657  -0.008207   0.384102   0.0417821   0.0004116   0.000096   0.000051   0.004929   0.002854  0.0000132  0.0000137    0.000313    0.000394
+1986   8  16  46658  -0.006526   0.384700   0.0414473   0.0002814   0.000107  -0.000158   0.000714   0.000703  0.0000132  0.0000132    0.000311    0.000418
+1986   8  17  46659  -0.005071   0.384904   0.0411721   0.0002994   0.000344  -0.000401   0.000672   0.000663  0.0000132  0.0000132    0.000311    0.000418
+1986   8  18  46660  -0.003908   0.385277   0.0408042   0.0004648   0.000759  -0.000633   0.000683   0.000673  0.0000132  0.0000144    0.000311    0.000418
+1986   8  19  46661  -0.002813   0.385691   0.0402163   0.0007281   0.001161  -0.000744   0.001856   0.001820  0.0000156  0.0000553    0.000359    0.000494
+1986   8  20  46662  -0.001408   0.385884   0.0393485   0.0010070   0.001294  -0.000624   0.003965   0.003768  0.0000974  0.0000240    0.000777    0.001771
+1986   8  21  46663   0.000564   0.386312   0.0382271   0.0012173   0.000978  -0.000273   0.001963   0.001751  0.0000324  0.0000568    0.000494    0.000656
+1986   8  22  46664   0.003018   0.388076   0.0369524   0.0013018   0.000236   0.000164   0.001024   0.000916  0.0000161  0.0000231    0.000285    0.000332
+1986   8  23  46665   0.005408   0.389833   0.0356626   0.0012462  -0.000688   0.000432   0.001227   0.001091  0.0000139  0.0000153    0.000249    0.000286
+1986   8  24  46666   0.007620   0.390364   0.0344901   0.0010765  -0.001356   0.000374   0.001907   0.001651  0.0000144  0.0000188    0.000259    0.000279
+1986   8  25  46667   0.009832   0.390468   0.0335271   0.0008440  -0.001371   0.000023   0.003429   0.001586  0.0000237  0.0000191    0.000438    0.000262
+1986   8  26  46668   0.012088   0.391507   0.0328077   0.0006077  -0.000623  -0.000432   0.002100   0.001401  0.0000237  0.0000239    0.000477    0.000279
+1986   8  27  46669   0.014014   0.393471   0.0323073   0.0004176   0.000583  -0.000746   0.001265   0.001128  0.0000241  0.0000283    0.000687    0.000358
+1986   8  28  46670   0.015123   0.394272   0.0319592   0.0003000   0.001517  -0.000700   0.001270   0.001178  0.0000329  0.0000683    0.001572    0.000604
+1986   8  29  46671   0.015965   0.393587   0.0316865   0.0002545   0.001799  -0.000408   0.002314   0.001796  0.0001126  0.0000529    0.003689    0.001317
+1986   8  30  46672   0.017513   0.393031   0.0314246   0.0002672   0.001509  -0.000130   0.002312   0.001684  0.0000729  0.0000625    0.001669    0.000913
+1986   8  31  46673   0.019639   0.393497   0.0311244   0.0003277   0.000909   0.000041   0.000721   0.000481  0.0000125  0.0000426    0.000307    0.000190
+1986   9   1  46674   0.021425   0.394663   0.0307426   0.0004358   0.000331   0.000113   0.000691   0.000461  0.0000123  0.0000124    0.000302    0.000187
+1986   9   2  46675   0.022379   0.395752   0.0302304   0.0005966   0.000015   0.000153   0.000712   0.000475  0.0000123  0.0000123    0.000302    0.000187
+1986   9   3  46676   0.023330   0.396399   0.0295353   0.0008071   0.000021   0.000191   0.002352   0.001568  0.0000123  0.0000133    0.000302    0.000187
+1986   9   4  46677   0.025369   0.396749   0.0286158   0.0010450   0.000250   0.000221   0.006652   0.005517  0.0000144  0.0000135    0.000189    0.000381
+1986   9   5  46678   0.028107   0.397152   0.0274627   0.0012688   0.000524   0.000211   0.001054   0.000820  0.0000147  0.0000145    0.000183    0.000470
+1986   9   6  46679   0.029712   0.397908   0.0261126   0.0014307   0.000677   0.000134   0.000832   0.000519  0.0000147  0.0000147    0.000183    0.000470
+1986   9   7  46680   0.029720   0.399005   0.0246456   0.0014929   0.000623  -0.000022   0.001061   0.000517  0.0000147  0.0000147    0.000183    0.000470
+1986   9   8  46681   0.030578   0.399873   0.0231693   0.0014412   0.000388  -0.000208   0.001553   0.000617  0.0000147  0.0000147    0.000183    0.000470
+1986   9   9  46682   0.032629   0.399727   0.0217922   0.0012902   0.000085  -0.000328   0.002738   0.003721  0.0000147  0.0000147    0.000242    0.000303
+1986   9  10  46683   0.034499   0.398350   0.0205966   0.0010814  -0.000133  -0.000269   0.001578   0.001346  0.0000147  0.0000147    0.000255    0.000293
+1986   9  11  46684   0.035566   0.396699   0.0196146   0.0008747  -0.000153   0.000051   0.000925   0.000716  0.0000147  0.0000147    0.000255    0.000293
+1986   9  12  46685   0.037104   0.396362   0.0188140   0.0007348   0.000043   0.000604   0.001215   0.000932  0.0000147  0.0000147    0.000255    0.000293
+1986   9  13  46686   0.038361   0.396754   0.0181015   0.0007129   0.000337   0.001178   0.002406   0.001841  0.0000147  0.0000156    0.000255    0.000293
+1986   9  14  46687   0.038983   0.397033   0.0173455   0.0008292   0.000535   0.001440   0.001558   0.001328  0.0000165  0.0000157    0.000405    0.000282
+1986   9  15  46688   0.040069   0.397296   0.0164126   0.0010633   0.000481   0.001128   0.000594   0.000512  0.0000167  0.0000167    0.000401    0.000284
+1986   9  16  46689   0.042545   0.397968   0.0152090   0.0013583   0.000168   0.000244   0.000639   0.000541  0.0000169  0.0000175    0.000290    0.000305
+1986   9  17  46690   0.045709   0.399030   0.0137097   0.0016379  -0.000223  -0.000842   0.000925   0.000701  0.0000184  0.0000216    0.000192    0.000449
+1986   9  18  46691   0.046931   0.399571   0.0119653   0.0018306  -0.000295  -0.001342   0.001467   0.001282  0.0000264  0.0000322    0.000229    0.001069
+1986   9  19  46692   0.046838   0.398762   0.0100883   0.0018937  -0.000160  -0.001252   0.001394   0.003006  0.0000460  0.0000217    0.000444    0.001584
+1986   9  20  46693   0.047398   0.397209   0.0082143   0.0018267  -0.000046  -0.000942   0.000703   0.000641  0.0000171  0.0000306    0.000378    0.000286
+1986   9  21  46694   0.048996   0.396570   0.0064604   0.0016622   0.000024  -0.000609   0.000729   0.000594  0.0000151  0.0000161    0.000343    0.000250
+1986   9  22  46695   0.050787   0.397473   0.0049021   0.0014478   0.000087  -0.000348   0.000993   0.000809  0.0000151  0.0000151    0.000343    0.000250
+1986   9  23  46696   0.051837   0.398268   0.0035646   0.0012324   0.000169  -0.000168   0.001611   0.001322  0.0000151  0.0000137    0.000342    0.000250
+1986   9  24  46697   0.052340   0.397942   0.0024264   0.0010581   0.000271  -0.000035   0.003624   0.003420  0.0000123  0.0000136    0.000272    0.000505
+1986   9  25  46698   0.053123   0.396726   0.0014290   0.0009544   0.000366   0.000089   0.001696   0.001668  0.0000122  0.0000122    0.000268    0.000573
+1986   9  26  46699   0.054546   0.395500   0.0004923   0.0009337   0.000421   0.000218   0.000937   0.000926  0.0000122  0.0000122    0.000268    0.000573
+1986   9  27  46700   0.055746   0.394805  -0.0004665   0.0009926   0.000407   0.000341   0.000881   0.000872  0.0000122  0.0000122    0.000268    0.000573
+1986   9  28  46701   0.056498   0.394419  -0.0015203   0.0011198   0.000334   0.000447   0.003327   0.003238  0.0000122  0.0000128    0.000268    0.000572
+1986   9  29  46702   0.057459   0.393845  -0.0027302   0.0013049   0.000230   0.000521   0.005013   0.003970  0.0000135  0.0000129    0.000266    0.000304
+1986   9  30  46703   0.058922   0.393104  -0.0041479   0.0015370   0.000134   0.000552   0.000661   0.000522  0.0000136  0.0000136    0.000265    0.000297
+1986  10   1  46704   0.060545   0.392715  -0.0058119   0.0017951   0.000074   0.000538   0.000591   0.000467  0.0000136  0.0000136    0.000265    0.000297
+1986  10   2  46705   0.061874   0.393062  -0.0077304   0.0020380   0.000062   0.000485   0.000627   0.000496  0.0000136  0.0000136    0.000265    0.000297
+1986  10   3  46706   0.062887   0.393866  -0.0098611   0.0022087   0.000091   0.000406   0.002353   0.001881  0.0000136  0.0000150    0.000265    0.000297
+1986  10   4  46707   0.063892   0.394472  -0.0121041   0.0022547   0.000139   0.000311   0.006010   0.005298  0.0000163  0.0000151    0.000298    0.000335
+1986  10   5  46708   0.065049   0.394538  -0.0143204   0.0021552   0.000181   0.000205   0.000986   0.000841  0.0000166  0.0000164    0.000301    0.000339
+1986  10   6  46709   0.066197   0.394313  -0.0163734   0.0019352   0.000196   0.000089   0.000839   0.000715  0.0000166  0.0000166    0.000301    0.000339
+1986  10   7  46710   0.067192   0.394226  -0.0181726   0.0016583   0.000176  -0.000037   0.001223   0.001041  0.0000166  0.0000165    0.000301    0.000339
+1986  10   8  46711   0.068254   0.394343  -0.0197004   0.0014020   0.000132  -0.000168   0.002600   0.002189  0.0000165  0.0000134    0.000301    0.000338
+1986  10   9  46712   0.069578   0.394163  -0.0210108   0.0012302   0.000089  -0.000287   0.003913   0.002677  0.0000103  0.0000134    0.000279    0.000204
+1986  10  10  46713   0.071099   0.393221  -0.0222066   0.0011757   0.000081  -0.000381   0.001274   0.000855  0.0000102  0.0000102    0.000278    0.000201
+1986  10  11  46714   0.072508   0.391851  -0.0234064   0.0012387   0.000130  -0.000439   0.000701   0.000470  0.0000102  0.0000102    0.000278    0.000201
+1986  10  12  46715   0.073501   0.391016  -0.0247157   0.0013939   0.000232  -0.000458   0.000725   0.000487  0.0000102  0.0000102    0.000278    0.000201
+1986  10  13  46716   0.074215   0.390932  -0.0262073   0.0016002   0.000351  -0.000438   0.003374   0.002335  0.0000102  0.0000105    0.000278    0.000201
+1986  10  14  46717   0.075100   0.391091  -0.0279093   0.0018090   0.000427  -0.000376   0.005578   0.004067  0.0000107  0.0000105    0.000307    0.000266
+1986  10  15  46718   0.076549   0.390959  -0.0298015   0.0019717   0.000402  -0.000282   0.000802   0.000545  0.0000107  0.0000105    0.000303    0.000266
+1986  10  16  46719   0.078612   0.390457  -0.0318186   0.0020488   0.000253  -0.000181   0.000607   0.000446  0.0000103  0.0000096    0.000255    0.000228
+1986  10  17  46720   0.080947   0.389945  -0.0338632   0.0020198   0.000004  -0.000133   0.000406   0.000384  0.0000084  0.0000089    0.000148    0.000137
+1986  10  18  46721   0.082973   0.389955  -0.0358287   0.0018919  -0.000275  -0.000211   0.000386   0.000400  0.0000075  0.0000102    0.000119    0.000111
+1986  10  19  46722   0.084631   0.390143  -0.0376290   0.0016988  -0.000481  -0.000433   0.000989   0.001030  0.0000121  0.0000231    0.000192    0.000179
+1986  10  20  46723   0.086344   0.389653  -0.0392211   0.0014890  -0.000512  -0.000705   0.001935   0.001871  0.0000387  0.0000168    0.000738    0.000807
+1986  10  21  46724   0.087902   0.389173  -0.0406135   0.0013101  -0.000342  -0.000882   0.001106   0.001032  0.0000215  0.0000282    0.000438    0.000510
+1986  10  22  46725   0.088925   0.389406  -0.0418576   0.0011974  -0.000061  -0.000840   0.001251   0.001103  0.0000177  0.0000166    0.000358    0.000412
+1986  10  23  46726   0.089548   0.389512  -0.0430317   0.0011633   0.000227  -0.000576   0.000512   0.000454  0.0000118  0.0000144    0.000183    0.000161
+1986  10  24  46727   0.090000   0.389141  -0.0442117   0.0011922   0.000433  -0.000224   0.000335   0.000300  0.0000112  0.0000119    0.000171    0.000149
+1986  10  25  46728   0.090624   0.388544  -0.0454437   0.0012506   0.000476   0.000015   0.000377   0.000341  0.0000121  0.0000141    0.000195    0.000169
+1986  10  26  46729   0.091840   0.388063  -0.0467373   0.0013195   0.000266  -0.000028   0.000715   0.000743  0.0000170  0.0000190    0.000412    0.000332
+1986  10  27  46730   0.093547   0.387842  -0.0481018   0.0014196  -0.000196  -0.000372   0.001229   0.001331  0.0000259  0.0000401    0.000679    0.000537
+1986  10  28  46731   0.094771   0.387753  -0.0495880   0.0015836  -0.000671  -0.000813   0.003340   0.004022  0.0000631  0.0000782    0.001602    0.001287
+1986  10  29  46732   0.095009   0.387402  -0.0512698   0.0018088  -0.000923  -0.001103   0.003656   0.005595  0.0001305  0.0000545    0.004266    0.001399
+1986  10  30  46733   0.095260   0.386673  -0.0531910   0.0020396  -0.000875  -0.001116   0.001113   0.001754  0.0000459  0.0000770    0.002152    0.000676
+1986  10  31  46734   0.096671   0.385917  -0.0553158   0.0021826  -0.000594  -0.000911   0.000582   0.000872  0.0000235  0.0000334    0.000772    0.000362
+1986  11   1  46735   0.098754   0.385587  -0.0575085   0.0021538  -0.000238  -0.000712   0.000584   0.000729  0.0000208  0.0000267    0.000413    0.000304
+1986  11   2  46736   0.100520   0.385053  -0.0595739   0.0019344  -0.000031  -0.000573   0.000938   0.001018  0.0000299  0.0000428    0.000494    0.000423
+1986  11   3  46737   0.101674   0.383911  -0.0613436   0.0015923  -0.000045  -0.000441   0.002475   0.002326  0.0000649  0.0000316    0.000461    0.000689
+1986  11   4  46738   0.102799   0.382575  -0.0627543   0.0012489  -0.000136  -0.000320   0.001250   0.001154  0.0000332  0.0000377    0.000248    0.000383
+1986  11   5  46739   0.104411   0.381335  -0.0638689   0.0010171  -0.000126  -0.000279   0.000431   0.000412  0.0000105  0.0000187    0.000185    0.000222
+1986  11   6  46740   0.106008   0.379492  -0.0648369   0.0009492  -0.000088  -0.000425   0.000199   0.000177  0.0000041  0.0000071    0.000111    0.000118
+1986  11   7  46741   0.107516   0.378539  -0.0658186   0.0010141   0.000305  -0.000668   0.000181   0.000158  0.0000036  0.0000062    0.000099    0.000105
+1986  11   8  46742   0.109281   0.378848  -0.0669029   0.0011404   0.000911  -0.000741   0.000493   0.000373  0.0000084  0.0000088    0.000146    0.000160
+1986  11   9  46743   0.111395   0.378392  -0.0681151   0.0012984   0.000966  -0.000448   0.001036   0.000681  0.0000140  0.0000110    0.000173    0.000207
+1986  11  10  46744   0.113526   0.377041  -0.0694937   0.0014916   0.000407   0.000088   0.000662   0.000522  0.0000136  0.0000138    0.000222    0.000472
+1986  11  11  46745   0.115355   0.375958  -0.0710765   0.0016907  -0.000280   0.000555   0.000695   0.000550  0.0000136  0.0000136    0.000226    0.000536
+1986  11  12  46746   0.117018   0.375440  -0.0728447   0.0018357  -0.000697   0.000719   0.002593   0.001780  0.0000136  0.0000138    0.000226    0.000538
+1986  11  13  46747   0.118760   0.374846  -0.0747157   0.0018783  -0.000730   0.000553   0.004323   0.002437  0.0000140  0.0000138    0.000220    0.000400
+1986  11  14  46748   0.120304   0.373693  -0.0765733   0.0018042  -0.000504   0.000186   0.000649   0.000521  0.0000141  0.0000140    0.000220    0.000394
+1986  11  15  46749   0.121050   0.371958  -0.0783045   0.0016313  -0.000241  -0.000195   0.000609   0.000489  0.0000141  0.0000141    0.000220    0.000394
+1986  11  16  46750   0.120751   0.369999  -0.0798273   0.0014005  -0.000117  -0.000451   0.000615   0.000494  0.0000141  0.0000141    0.000220    0.000394
+1986  11  17  46751   0.120048   0.368291  -0.0811082   0.0011625  -0.000165  -0.000544   0.001657   0.001333  0.0000141  0.0000141    0.000220    0.000394
+1986  11  18  46752   0.119927   0.367118  -0.0821651   0.0009642  -0.000319  -0.000520   0.005727   0.005133  0.0000141  0.0000141    0.000217    0.000320
+1986  11  19  46753   0.120669   0.366312  -0.0830571   0.0008381  -0.000479  -0.000455   0.001018   0.000980  0.0000141  0.0000141    0.000216    0.000316
+1986  11  20  46754   0.121367   0.365331  -0.0838667   0.0007983  -0.000566  -0.000421   0.000639   0.000618  0.0000141  0.0000141    0.000216    0.000316
+1986  11  21  46755   0.121194   0.363901  -0.0846804   0.0008426  -0.000544  -0.000458   0.000914   0.000900  0.0000141  0.0000141    0.000216    0.000316
+1986  11  22  46756   0.120832   0.362494  -0.0855761   0.0009592  -0.000431  -0.000566   0.001817   0.002001  0.0000141  0.0000154    0.000216    0.000316
+1986  11  23  46757   0.120873   0.361383  -0.0866174   0.0011325  -0.000270  -0.000713   0.002611   0.002259  0.0000166  0.0000155    0.000287    0.000350
+1986  11  24  46758   0.121101   0.360287  -0.0878525   0.0013447  -0.000119  -0.000848   0.001694   0.001191  0.0000168  0.0000167    0.000295    0.000353
+1986  11  25  46759   0.121159   0.358891  -0.0893101   0.0015726  -0.000020  -0.000923   0.001210   0.000829  0.0000168  0.0000168    0.000295    0.000353
+1986  11  26  46760   0.121345   0.357593  -0.0909904   0.0017813   0.000001  -0.000907   0.001247   0.000849  0.0000168  0.0000168    0.000295    0.000353
+1986  11  27  46761   0.121885   0.356553  -0.0928514   0.0019224  -0.000051  -0.000808   0.003625   0.002578  0.0000168  0.0000136    0.000295    0.000353
+1986  11  28  46762   0.122521   0.355371  -0.0947990   0.0019439  -0.000143  -0.000665   0.002938   0.002622  0.0000104  0.0000135    0.000313    0.000400
+1986  11  29  46763   0.123149   0.353943  -0.0966935   0.0018137  -0.000228  -0.000537   0.000485   0.000447  0.0000102  0.0000103    0.000314    0.000404
+1986  11  30  46764   0.123852   0.352387  -0.0983845   0.0015485  -0.000259  -0.000479   0.000470   0.000433  0.0000102  0.0000102    0.000314    0.000404
+1986  12   1  46765   0.124793   0.350865  -0.0997694   0.0012269  -0.000214  -0.000511   0.000474   0.000436  0.0000102  0.0000102    0.000314    0.000404
+1986  12   2  46766   0.126065   0.349410  -0.1008497   0.0009652  -0.000108  -0.000609   0.001201   0.001103  0.0000102  0.0000104    0.000314    0.000404
+1986  12   3  46767   0.127623   0.347998  -0.1017416   0.0008616   0.000005  -0.000717   0.004765   0.003854  0.0000107  0.0000105    0.000268    0.000364
+1986  12   4  46768   0.129274   0.346698  -0.1026292   0.0009445   0.000055  -0.000780   0.000946   0.000769  0.0000108  0.0000111    0.000264    0.000352
+1986  12   5  46769   0.130733   0.345721  -0.1036796   0.0011552  -0.000020  -0.000766   0.000577   0.000456  0.0000116  0.0000126    0.000259    0.000316
+1986  12   6  46770   0.131897   0.345056  -0.1049649   0.0013825  -0.000239  -0.000696   0.000728   0.000507  0.0000143  0.0000147    0.000249    0.000260
+1986  12   7  46771   0.133117   0.344167  -0.1064418   0.0015464  -0.000557  -0.000628   0.000969   0.000563  0.0000179  0.0000268    0.000243    0.000237
+1986  12   8  46772   0.134534   0.342661  -0.1080335   0.0016348  -0.000751  -0.000599   0.001791   0.001182  0.0000393  0.0000251    0.000310    0.000369
+1986  12   9  46773   0.135953   0.340631  -0.1096773   0.0016605  -0.000586  -0.000610   0.001438   0.001150  0.0000324  0.0000297    0.000310    0.000389
+1986  12  10  46774   0.137096   0.338519  -0.1113207   0.0016255  -0.000050  -0.000653   0.000961   0.000758  0.0000201  0.0000287    0.000287    0.000347
+1986  12  11  46775   0.137878   0.336892  -0.1129011   0.0015273   0.000495  -0.000745   0.001299   0.001034  0.0000251  0.0000389    0.000398    0.000473
+1986  12  12  46776   0.138246   0.335882  -0.1143570   0.0013728   0.000727  -0.000843   0.002686   0.002141  0.0000577  0.0000315    0.000920    0.001093
+1986  12  13  46777   0.138698   0.334771  -0.1156381   0.0011755   0.000561  -0.000891   0.002316   0.001889  0.0000379  0.0000349    0.000797    0.000710
+1986  12  14  46778   0.139367   0.333150  -0.1167092   0.0009568   0.000127  -0.000874   0.000511   0.000434  0.0000120  0.0000249    0.000261    0.000226
+1986  12  15  46779   0.139993   0.331084  -0.1175622   0.0007511  -0.000330  -0.000808   0.000499   0.000424  0.0000120  0.0000120    0.000260    0.000226
+1986  12  16  46780   0.140318   0.328973  -0.1182299   0.0006016  -0.000599  -0.000724   0.000503   0.000428  0.0000120  0.0000120    0.000260    0.000226
+1986  12  17  46781   0.140482   0.327298  -0.1187893   0.0005452  -0.000611  -0.000638   0.001233   0.001089  0.0000120  0.0000123    0.000260    0.000226
+1986  12  18  46782   0.140819   0.326328  -0.1193461   0.0005975  -0.000431  -0.000552   0.003217   0.004978  0.0000126  0.0000123    0.000291    0.000220
+1986  12  19  46783   0.141400   0.325872  -0.1200084   0.0007491  -0.000183  -0.000454   0.000895   0.000932  0.0000127  0.0000127    0.000294    0.000220
+1986  12  20  46784   0.141826   0.325373  -0.1208630   0.0009716   0.000016  -0.000330   0.000605   0.000620  0.0000127  0.0000127    0.000294    0.000220
+1986  12  21  46785   0.142001   0.324555  -0.1219624   0.0012267   0.000106  -0.000183   0.000798   0.000816  0.0000127  0.0000121    0.000294    0.000220
+1986  12  22  46786   0.142757   0.323828  -0.1233183   0.0014744   0.000089  -0.000037   0.000766   0.000820  0.0000115  0.0000119    0.000312    0.000190
+1986  12  23  46787   0.143977   0.323171  -0.1249041   0.0016800   0.000002   0.000073   0.000444   0.000488  0.0000111  0.0000113    0.000322    0.000180
+1986  12  24  46788   0.144833   0.322167  -0.1266617   0.0018169  -0.000107   0.000110   0.000441   0.000485  0.0000111  0.0000111    0.000322    0.000180
+1986  12  25  46789   0.144870   0.320634  -0.1285109   0.0018663  -0.000205   0.000059   0.000626   0.000688  0.0000111  0.0000111    0.000322    0.000180
+1986  12  26  46790   0.144412   0.318896  -0.1303583   0.0018175  -0.000280  -0.000066   0.008202   0.008813  0.0000111  0.0000126    0.000322    0.000180
+1986  12  27  46791   0.144082   0.317434  -0.1321075   0.0016735  -0.000329  -0.000231   0.020386   0.019587  0.0000141  0.0000130    0.000283    0.000251
+1986  12  28  46792   0.144207   0.316432  -0.1336768   0.0014602  -0.000361  -0.000390   0.001896   0.001823  0.0000148  0.0000144    0.000278    0.000272
+1986  12  29  46793   0.144657   0.315671  -0.1350236   0.0012318  -0.000386  -0.000506   0.000482   0.000464  0.0000148  0.0000148    0.000278    0.000272
+1986  12  30  46794   0.145125   0.314800  -0.1361672   0.0010605  -0.000415  -0.000562   0.000480   0.000462  0.0000148  0.0000148    0.000278    0.000272
+1986  12  31  46795   0.145411   0.313671  -0.1371960   0.0010108  -0.000449  -0.000558   0.000481   0.000462  0.0000148  0.0000148    0.000278    0.000272
+1987   1   1  46796   0.145582   0.312506  -0.1382459   0.0011075  -0.000484  -0.000517   0.000834   0.000800  0.0000148  0.0000128    0.000278    0.000271
+1987   1   2  46797   0.145822   0.311610  -0.1394517   0.0013186  -0.000512  -0.000472   0.004043   0.003570  0.0000108  0.0000127    0.000257    0.000166
+1987   1   3  46798   0.146197   0.310928  -0.1408933   0.0015678  -0.000526  -0.000447   0.000984   0.000952  0.0000107  0.0000108    0.000255    0.000163
+1987   1   4  46799   0.146506   0.309874  -0.1425668   0.0017698  -0.000528  -0.000461   0.000495   0.000482  0.0000107  0.0000107    0.000255    0.000163
+1987   1   5  46800   0.146521   0.308029  -0.1443938   0.0018666  -0.000522  -0.000511   0.000663   0.000640  0.0000107  0.0000107    0.000255    0.000163
+1987   1   6  46801   0.146431   0.306205  -0.1462580   0.0018418  -0.000513  -0.000575   0.001762   0.001570  0.0000107  0.0000110    0.000255    0.000163
+1987   1   7  46802   0.146352   0.305095  -0.1480436   0.0017102  -0.000490  -0.000617   0.003245   0.002666  0.0000113  0.0000110    0.000253    0.000160
+1987   1   8  46803   0.145982   0.304172  -0.1496575   0.0015007  -0.000426  -0.000600   0.001096   0.000996  0.0000114  0.0000114    0.000252    0.000160
+1987   1   9  46804   0.145104   0.302805  -0.1510364   0.0012469  -0.000295  -0.000502   0.000551   0.000504  0.0000114  0.0000114    0.000252    0.000160
+1987   1  10  46805   0.143895   0.301269  -0.1521533   0.0009894  -0.000096  -0.000330   0.000696   0.000636  0.0000114  0.0000114    0.000252    0.000160
+1987   1  11  46806   0.142226   0.300210  -0.1530261   0.0007739   0.000114  -0.000135   0.001926   0.001710  0.0000114  0.0000134    0.000252    0.000160
+1987   1  12  46807   0.140309   0.299553  -0.1537197   0.0006408   0.000242   0.000011   0.002677   0.002042  0.0000153  0.0000136    0.000365    0.000217
+1987   1  13  46808   0.139110   0.298297  -0.1543318   0.0006069   0.000199   0.000047   0.000733   0.000548  0.0000158  0.0000154    0.000372    0.000224
+1987   1  14  46809   0.139396   0.295776  -0.1549602   0.0006546  -0.000033  -0.000038   0.000677   0.000558  0.0000154  0.0000149    0.000316    0.000223
+1987   1  15  46810   0.140784   0.292811  -0.1556667   0.0007451  -0.000369  -0.000187   0.000561   0.000640  0.0000141  0.0000144    0.000220    0.000220
+1987   1  16  46811   0.141571   0.291565  -0.1564714   0.0008608  -0.000636  -0.000277   0.000688   0.000921  0.0000134  0.0000137    0.000189    0.000218
+1987   1  17  46812   0.141238   0.291674  -0.1574013   0.0010193  -0.000735  -0.000285   0.001726   0.001658  0.0000133  0.0000136    0.000191    0.000220
+1987   1  18  46813   0.140582   0.290874  -0.1585126   0.0012319  -0.000694  -0.000295   0.001332   0.000836  0.0000139  0.0000141    0.000400    0.000263
+1987   1  19  46814   0.140096   0.288399  -0.1598567   0.0014671  -0.000582  -0.000374   0.000902   0.000615  0.0000150  0.0000181    0.000311    0.000258
+1987   1  20  46815   0.139681   0.285355  -0.1614286   0.0016549  -0.000435  -0.000477   0.000667   0.000507  0.0000224  0.0000225    0.000205    0.000236
+1987   1  21  46816   0.138926   0.283785  -0.1631403   0.0017298  -0.000122  -0.000319   0.000672   0.000555  0.0000300  0.0000240    0.000195    0.000213
+1987   1  22  46817   0.137600   0.282396  -0.1648569   0.0016743   0.000112  -0.000123   0.000948   0.000821  0.0000256  0.0000232    0.000211    0.000204
+1987   1  23  46818   0.136607   0.281158  -0.1664568   0.0015139   0.000071  -0.000092   0.000864   0.001063  0.0000164  0.0000205    0.000289    0.000222
+1987   1  24  46819   0.136557   0.280861  -0.1678586   0.0012905  -0.000149  -0.000120   0.000441   0.000694  0.0000154  0.0000159    0.000319    0.000227
+1987   1  25  46820   0.136398   0.279661  -0.1690275   0.0010551  -0.000359  -0.000047   0.000413   0.000662  0.0000154  0.0000154    0.000319    0.000227
+1987   1  26  46821   0.135627   0.277417  -0.1699827   0.0008712  -0.000449   0.000137   0.001526   0.002105  0.0000154  0.0000157    0.000319    0.000228
+1987   1  27  46822   0.134840   0.275737  -0.1708095   0.0008060  -0.000423   0.000281   0.006023   0.003223  0.0000160  0.0000157    0.000305    0.000290
+1987   1  28  46823   0.134888   0.275508  -0.1716499   0.0008975  -0.000358   0.000216   0.000781   0.000650  0.0000160  0.0000162    0.000296    0.000295
+1987   1  29  46824   0.135865   0.275758  -0.1726558   0.0011245  -0.000337  -0.000105   0.000495   0.000359  0.0000165  0.0000171    0.000250    0.000295
+1987   1  30  46825   0.136711   0.275305  -0.1739269   0.0014134  -0.000393  -0.000514   0.000366   0.000227  0.0000182  0.0000181    0.000178    0.000293
+1987   1  31  46826   0.135665   0.274470  -0.1754773   0.0016778  -0.000447  -0.000623   0.000421   0.000254  0.0000198  0.0000191    0.000154    0.000293
+1987   2   1  46827   0.133427   0.273935  -0.1772480   0.0018580  -0.000459  -0.000372   0.001160   0.000740  0.0000199  0.0000192    0.000158    0.000282
+1987   2   2  46828   0.131699   0.273332  -0.1791451   0.0019322  -0.000450  -0.000086   0.001097   0.000937  0.0000186  0.0000191    0.000501    0.000222
+1987   2   3  46829   0.130248   0.271566  -0.1810674   0.0018997  -0.000442  -0.000096   0.000870   0.000685  0.0000183  0.0000181    0.000502    0.000223
+1987   2   4  46830   0.128752   0.268703  -0.1829138   0.0017741  -0.000428  -0.000425   0.000774   0.000435  0.0000176  0.0000177    0.000319    0.000228
+1987   2   5  46831   0.128829   0.266974  -0.1846017   0.0015582  -0.000291  -0.000532   0.000410   0.000224  0.0000172  0.0000188    0.000163    0.000226
+1987   2   6  46832   0.129085   0.266204  -0.1860306   0.0012964  -0.000169  -0.000250   0.000496   0.000274  0.0000200  0.0000309    0.000153    0.000257
+1987   2   7  46833   0.128741   0.265165  -0.1872056   0.0010994  -0.000235   0.000115   0.001304   0.000836  0.0000446  0.0000223    0.000460    0.000423
+1987   2   8  46834   0.128822   0.263539  -0.1882486   0.0010205  -0.000461   0.000202   0.000552   0.000383  0.0000245  0.0000313    0.000261    0.000226
+1987   2   9  46835   0.129310   0.261774  -0.1892715   0.0010093  -0.000677  -0.000129   0.000297   0.000185  0.0000179  0.0000237    0.000144    0.000196
+1987   2  10  46836   0.128298   0.260932  -0.1902956   0.0010009  -0.000686  -0.000578   0.000350   0.000214  0.0000230  0.0000303    0.000171    0.000272
+1987   2  11  46837   0.126768   0.260840  -0.1913017   0.0010033  -0.000462  -0.000701   0.000828   0.000520  0.0000428  0.0000198    0.000328    0.000517
+1987   2  12  46838   0.126391   0.260521  -0.1923266   0.0010753  -0.000241  -0.000412   0.000781   0.000835  0.0000166  0.0000297    0.000409    0.000217
+1987   2  13  46839   0.126391   0.259505  -0.1934694   0.0012506  -0.000275   0.000047   0.000686   0.000663  0.0000166  0.0000197    0.000399    0.000218
+1987   2  14  46840   0.125694   0.258081  -0.1948347   0.0015025  -0.000557   0.000360   0.000776   0.000531  0.0000227  0.0000265    0.000442    0.000319
+1987   2  15  46841   0.125067   0.257040  -0.1964687   0.0017657  -0.000627   0.000422   0.000910   0.000503  0.0000365  0.0000326    0.000482    0.000693
+1987   2  16  46842   0.125136   0.256587  -0.1983476   0.0019738  -0.000320   0.000298   0.002382   0.001467  0.0000426  0.0000341    0.000349    0.000415
+1987   2  17  46843   0.125387   0.256164  -0.2003872   0.0020756   0.000057   0.000115   0.001491   0.000961  0.0000318  0.0000360    0.000138    0.000136
+1987   2  18  46844   0.125206   0.255282  -0.2024643   0.0020502   0.000118  -0.000021   0.000567   0.000307  0.0000295  0.0000283    0.000134    0.000132
+1987   2  19  46845   0.124573   0.254025  -0.2044544   0.0019111  -0.000257  -0.000070   0.000356   0.000180  0.0000248  0.0000260    0.000125    0.000123
+1987   2  20  46846   0.123760   0.252630  -0.2062616   0.0017070  -0.000614  -0.000094   0.000313   0.000155  0.0000225  0.0000230    0.000120    0.000118
+1987   2  21  46847   0.123009   0.251660  -0.2078581   0.0015078  -0.000603  -0.000100   0.000968   0.000496  0.0000212  0.0000195    0.000125    0.000121
+1987   2  22  46848   0.122447   0.251353  -0.2092865   0.0013724  -0.000316  -0.000057   0.001232   0.000935  0.0000164  0.0000187    0.000282    0.000182
+1987   2  23  46849   0.122273   0.250683  -0.2106333   0.0013330  -0.000067   0.000027   0.000567   0.000341  0.0000162  0.0000162    0.000181    0.000154
+1987   2  24  46850   0.122456   0.248640  -0.2119994   0.0013915  -0.000128   0.000073   0.000419   0.000204  0.0000160  0.0000171    0.000112    0.000117
+1987   2  25  46851   0.121546   0.247896  -0.2134677   0.0015688  -0.000469  -0.000152   0.000475   0.000244  0.0000181  0.0000183    0.000130    0.000141
+1987   2  26  46852   0.120202   0.247778  -0.2151760   0.0018737  -0.000622  -0.000387   0.000660   0.000490  0.0000205  0.0000152    0.000225    0.000235
+1987   2  27  46853   0.119859   0.246538  -0.2172273   0.0022260  -0.000304  -0.000354   0.000767   0.000760  0.0000124  0.0000159    0.000392    0.000175
+1987   2  28  46854   0.120544   0.244575  -0.2196086   0.0025138   0.000288  -0.000107   0.000547   0.000541  0.0000112  0.0000118    0.000467    0.000159
+1987   3   1  46855   0.120823   0.242723  -0.2222119   0.0026621   0.000764   0.000160   0.000449   0.000444  0.0000112  0.0000112    0.000467    0.000159
+1987   3   2  46856   0.120155   0.241411  -0.2248821   0.0026477   0.000881   0.000300   0.000721   0.000697  0.0000112  0.0000159    0.000467    0.000159
+1987   3   3  46857   0.119522   0.240639  -0.2274646   0.0024908   0.000649   0.000275   0.006782   0.002535  0.0000206  0.0000170    0.000290    0.000215
+1987   3   4  46858   0.119351   0.239868  -0.2298385   0.0022374   0.000253   0.000127   0.001913   0.001639  0.0000227  0.0000217    0.000284    0.000221
+1987   3   5  46859   0.118002   0.238360  -0.2319328   0.0019398  -0.000095  -0.000068   0.001085   0.001108  0.0000227  0.0000227    0.000284    0.000221
+1987   3   6  46860   0.114212   0.236014  -0.2337259   0.0016427  -0.000270  -0.000248   0.001315   0.001433  0.0000227  0.0000227    0.000284    0.000221
+1987   3   7  46861   0.111482   0.233893  -0.2352360   0.0013824  -0.000275  -0.000361   0.001734   0.002186  0.0000227  0.0000170    0.000284    0.000221
+1987   3   8  46862   0.111021   0.232481  -0.2365153   0.0011908  -0.000201  -0.000378   0.001247   0.001179  0.0000113  0.0000169    0.000241    0.000171
+1987   3   9  46863   0.111251   0.231341  -0.2376464   0.0010944  -0.000153  -0.000282   0.000746   0.000692  0.0000112  0.0000117    0.000239    0.000170
+1987   3  10  46864   0.110302   0.229652  -0.2387336   0.0011070  -0.000186  -0.000094   0.000551   0.000510  0.0000120  0.0000138    0.000243    0.000183
+1987   3  11  46865   0.108766   0.227451  -0.2398873   0.0012259  -0.000288   0.000119   0.000662   0.000598  0.0000164  0.0000188    0.000253    0.000243
+1987   3  12  46866   0.108607   0.225955  -0.2412064   0.0014252  -0.000391   0.000266   0.001426   0.001121  0.0000255  0.0000192    0.000261    0.000352
+1987   3  13  46867   0.109115   0.224977  -0.2427497   0.0016607  -0.000429   0.000281   0.002001   0.001362  0.0000219  0.0000180    0.000247    0.000336
+1987   3  14  46868   0.109480   0.224211  -0.2445282   0.0018876  -0.000378   0.000164   0.000381   0.000341  0.0000105  0.0000162    0.000184    0.000193
+1987   3  15  46869   0.109533   0.223477  -0.2465115   0.0020681  -0.000252  -0.000038   0.000368   0.000329  0.0000105  0.0000105    0.000184    0.000192
+1987   3  16  46870   0.109469   0.222778  -0.2486370   0.0021750  -0.000094  -0.000254   0.000379   0.000339  0.0000105  0.0000105    0.000184    0.000192
+1987   3  17  46871   0.109338   0.222261  -0.2508237   0.0021924   0.000025  -0.000412   0.001228   0.001148  0.0000105  0.0000109    0.000184    0.000192
+1987   3  18  46872   0.109061   0.222036  -0.2529820   0.0021177   0.000026  -0.000452   0.003036   0.003870  0.0000112  0.0000110    0.000228    0.000174
+1987   3  19  46873   0.108706   0.222001  -0.2550274   0.0019659  -0.000140  -0.000343   0.000679   0.000631  0.0000114  0.0000118    0.000232    0.000174
+1987   3  20  46874   0.108506   0.221858  -0.2568992   0.0017700  -0.000446  -0.000098   0.000488   0.000411  0.0000124  0.0000148    0.000232    0.000188
+1987   3  21  46875   0.108363   0.221422  -0.2585743   0.0015727  -0.000760   0.000201   0.000567   0.000361  0.0000182  0.0000295    0.000232    0.000270
+1987   3  22  46876   0.107677   0.220920  -0.2600719   0.0014240  -0.000849   0.000419   0.000774   0.000400  0.0000467  0.0000770    0.000275    0.000592
+1987   3  23  46877   0.106060   0.220269  -0.2614637   0.0013723  -0.000680   0.000441   0.002936   0.001514  0.0001357  0.0000342    0.000848    0.001742
+1987   3  24  46878   0.103775   0.219173  -0.2628626   0.0014443  -0.000439   0.000259   0.001383   0.001692  0.0000218  0.0000744    0.000217    0.000314
+1987   3  25  46879   0.101497   0.217736  -0.2643915   0.0016321  -0.000328  -0.000012   0.000731   0.001137  0.0000130  0.0000190    0.000132    0.000190
+1987   3  26  46880   0.099194   0.217083  -0.2661475   0.0018914  -0.000412  -0.000191   0.000811   0.001084  0.0000162  0.0000140    0.000187    0.000255
+1987   3  27  46881   0.097500   0.216563  -0.2681691   0.0021393  -0.000447  -0.000051   0.000682   0.000745  0.0000151  0.0000145    0.000223    0.000233
+1987   3  28  46882   0.096911   0.215995  -0.2703959   0.0022871  -0.000468   0.000167   0.000541   0.000606  0.0000127  0.0000137    0.000187    0.000189
+1987   3  29  46883   0.096882   0.215569  -0.2726975   0.0022924  -0.000610   0.000162   0.000590   0.000542  0.0000124  0.0000125    0.000193    0.000203
+1987   3  30  46884   0.096497   0.214726  -0.2749337   0.0021673  -0.000811  -0.000031   0.000626   0.000527  0.0000123  0.0000123    0.000199    0.000214
+1987   3  31  46885   0.095316   0.213276  -0.2769968   0.0019577  -0.000956  -0.000241   0.000637   0.000538  0.0000123  0.0000123    0.000199    0.000214
+1987   4   1  46886   0.094016   0.212113  -0.2788320   0.0017190  -0.000966  -0.000333   0.001398   0.001567  0.0000123  0.0000128    0.000199    0.000214
+1987   4   2  46887   0.093594   0.212264  -0.2804353   0.0014952  -0.000833  -0.000268   0.001757   0.003027  0.0000132  0.0000128    0.000228    0.000198
+1987   4   3  46888   0.094009   0.213298  -0.2818363   0.0013133  -0.000602  -0.000069   0.000681   0.000608  0.0000133  0.0000132    0.000231    0.000197
+1987   4   4  46889   0.093833   0.213159  -0.2830841   0.0011887  -0.000340   0.000221   0.000541   0.000467  0.0000133  0.0000133    0.000231    0.000197
+1987   4   5  46890   0.092356   0.211018  -0.2842407   0.0011325  -0.000113   0.000550   0.000690   0.000594  0.0000133  0.0000133    0.000231    0.000197
+1987   4   6  46891   0.091110   0.209220  -0.2853779   0.0011522   0.000024   0.000826   0.000983   0.000845  0.0000133  0.0000125    0.000231    0.000197
+1987   4   7  46892   0.090400   0.209235  -0.2865723   0.0012469   0.000028   0.000923   0.001529   0.002302  0.0000117  0.0000124    0.000195    0.000179
+1987   4   8  46893   0.089525   0.210608  -0.2878940   0.0014032  -0.000115   0.000735   0.000895   0.001163  0.0000116  0.0000116    0.000193    0.000178
+1987   4   9  46894   0.087964   0.211670  -0.2893935   0.0015958  -0.000360   0.000279   0.000529   0.000630  0.0000114  0.0000109    0.000193    0.000171
+1987   4  10  46895   0.086454   0.211130  -0.2910910   0.0017933  -0.000592  -0.000252   0.000414   0.000413  0.0000102  0.0000104    0.000191    0.000141
+1987   4  11  46896   0.085050   0.210415  -0.2929741   0.0019655  -0.000661  -0.000512   0.000393   0.000357  0.0000095  0.0000098    0.000189    0.000126
+1987   4  12  46897   0.083366   0.210872  -0.2950024   0.0020859  -0.000546  -0.000327   0.000393   0.000354  0.0000094  0.0000101    0.000189    0.000126
+1987   4  13  46898   0.081661   0.211280  -0.2971123   0.0021277  -0.000403   0.000126   0.000452   0.000395  0.0000107  0.0000101    0.000206    0.000238
+1987   4  14  46899   0.080332   0.209878  -0.2992154   0.0020656  -0.000404   0.000503   0.000452   0.000413  0.0000108  0.0000109    0.000204    0.000242
+1987   4  15  46900   0.079303   0.206908  -0.3012032   0.0018925  -0.000574   0.000528   0.000452   0.000513  0.0000110  0.0000110    0.000197    0.000241
+1987   4  16  46901   0.077804   0.205558  -0.3029750   0.0016436  -0.000689   0.000226   0.000569   0.000796  0.0000113  0.0000113    0.000192    0.000240
+1987   4  17  46902   0.075984   0.206106  -0.3044892   0.0013952  -0.000563  -0.000167   0.001090   0.001117  0.0000116  0.0000115    0.000232    0.000225
+1987   4  18  46903   0.074609   0.206065  -0.3057894   0.0012256  -0.000211  -0.000379   0.000592   0.000522  0.0000118  0.0000117    0.000282    0.000216
+1987   4  19  46904   0.073533   0.205158  -0.3069817   0.0011741   0.000201  -0.000274   0.000547   0.000481  0.0000118  0.0000119    0.000282    0.000216
+1987   4  20  46905   0.072405   0.204405  -0.3081833   0.0012328   0.000466   0.000052   0.001412   0.001097  0.0000120  0.0000166    0.000276    0.000216
+1987   4  21  46906   0.071246   0.204460  -0.3094849   0.0013707   0.000444   0.000322   0.002331   0.001109  0.0000215  0.0000168    0.000208    0.000220
+1987   4  22  46907   0.070260   0.204560  -0.3109452   0.0015593   0.000135   0.000292   0.001196   0.000649  0.0000215  0.0000194    0.000207    0.000220
+1987   4  23  46908   0.069680   0.203863  -0.3126027   0.0017795  -0.000309  -0.000057   0.000884   0.000670  0.0000173  0.0000170    0.000207    0.000225
+1987   4  24  46909   0.069901   0.204844  -0.3144825   0.0020003  -0.000609  -0.000420   0.000492   0.000440  0.0000125  0.0000148    0.000208    0.000237
+1987   4  25  46910   0.069482   0.204671  -0.3165666   0.0021596  -0.000534  -0.000412   0.000557   0.000492  0.0000123  0.0000124    0.000208    0.000238
+1987   4  26  46911   0.068270   0.203411  -0.3187594   0.0021892  -0.000107   0.000036   0.001795   0.001215  0.0000123  0.0000164    0.000208    0.000238
+1987   4  27  46912   0.067274   0.203640  -0.3209078   0.0020608   0.000410   0.000647   0.003584   0.001602  0.0000204  0.0000171    0.000353    0.000356
+1987   4  28  46913   0.066564   0.204727  -0.3228575   0.0018065   0.000696   0.001005   0.000956   0.000914  0.0000220  0.0000216    0.000381    0.000376
+1987   4  29  46914   0.065516   0.204649  -0.3245141   0.0015073   0.000582   0.000841   0.000893   0.000936  0.0000228  0.0000239    0.000388    0.000397
+1987   4  30  46915   0.063691   0.202890  -0.3258804   0.0012565   0.000181   0.000253   0.000787   0.001067  0.0000259  0.0000239    0.000411    0.000480
+1987   5   1  46916   0.061591   0.202221  -0.3270461   0.0011040  -0.000064  -0.000245   0.000674   0.000946  0.0000249  0.0000223    0.000381    0.000298
+1987   5   2  46917   0.059684   0.202465  -0.3281133   0.0010333  -0.000020  -0.000249   0.000553   0.000686  0.0000188  0.0000202    0.000302    0.000175
+1987   5   3  46918   0.058013   0.201705  -0.3291399   0.0010012   0.000075   0.000133   0.000486   0.000631  0.0000155  0.0000155    0.000251    0.000162
+1987   5   4  46919   0.056704   0.202074  -0.3301421   0.0009916  -0.000051   0.000145   0.000444   0.000547  0.0000122  0.0000131    0.000185    0.000173
+1987   5   5  46920   0.055522   0.202705  -0.3311453   0.0010635  -0.000181  -0.000434   0.000427   0.000423  0.0000108  0.0000118    0.000183    0.000146
+1987   5   6  46921   0.054480   0.201750  -0.3322845   0.0012395  -0.000098  -0.000645   0.000462   0.000398  0.0000114  0.0000160    0.000206    0.000137
+1987   5   7  46922   0.054063   0.199983  -0.3336316   0.0014165   0.000085  -0.000124   0.000908   0.000579  0.0000212  0.0000166    0.000223    0.000212
+1987   5   8  46923   0.054318   0.199692  -0.3351160   0.0015442   0.000065   0.000236   0.001128   0.000772  0.0000219  0.0000185    0.000231    0.000259
+1987   5   9  46924   0.053685   0.200604  -0.3367082   0.0016689  -0.000196   0.000136   0.000771   0.000671  0.0000159  0.0000204    0.000247    0.000301
+1987   5  10  46925   0.052349   0.201006  -0.3384298   0.0017939  -0.000503  -0.000123   0.000813   0.000740  0.0000189  0.0000463    0.000300    0.000366
+1987   5  11  46926   0.050780   0.200556  -0.3402602   0.0018585  -0.000699  -0.000313   0.001701   0.002630  0.0000766  0.0000590    0.001152    0.001225
+1987   5  12  46927   0.049107   0.200112  -0.3421052   0.0018034  -0.000721  -0.000358   0.001711   0.003112  0.0000990  0.0000442    0.002207    0.001485
+1987   5  13  46928   0.047583   0.200049  -0.3438318   0.0016187  -0.000578  -0.000253   0.000449   0.000472  0.0000118  0.0000555    0.000364    0.000250
+1987   5  14  46929   0.046361   0.200061  -0.3453280   0.0013537  -0.000337  -0.000043   0.000470   0.000493  0.0000120  0.0000146    0.000372    0.000255
+1987   5  15  46930   0.045217   0.199734  -0.3465533   0.0010947  -0.000094   0.000218   0.000687   0.000721  0.0000173  0.0000236    0.000533    0.000367
+1987   5  16  46931   0.043505   0.199228  -0.3475566   0.0009314   0.000063   0.000491   0.001751   0.001963  0.0000351  0.0000278    0.001056    0.000740
+1987   5  17  46932   0.041293   0.198635  -0.3484664   0.0009206   0.000114   0.000695   0.002653   0.004275  0.0000382  0.0000256    0.000650    0.000684
+1987   5  18  46933   0.039285   0.197966  -0.3494414   0.0010606   0.000105   0.000698   0.000666   0.000686  0.0000161  0.0000272    0.000256    0.000281
+1987   5  19  46934   0.037986   0.197409  -0.3506112   0.0012990   0.000110   0.000383   0.000512   0.000520  0.0000161  0.0000161    0.000256    0.000280
+1987   5  20  46935   0.037299   0.196992  -0.3520383   0.0015595   0.000171  -0.000262   0.000707   0.000708  0.0000161  0.0000161    0.000256    0.000280
+1987   5  21  46936   0.036468   0.196346  -0.3537085   0.0017730   0.000263  -0.001040   0.001220   0.001163  0.0000161  0.0000150    0.000256    0.000280
+1987   5  22  46937   0.035765   0.196552  -0.3555499   0.0018960   0.000307  -0.001594   0.002483   0.002173  0.0000140  0.0000150    0.000285    0.000307
+1987   5  23  46938   0.035606   0.198502  -0.3574625   0.0019129   0.000235  -0.001591   0.001317   0.001217  0.0000138  0.0000138    0.000283    0.000307
+1987   5  24  46939   0.035103   0.200638  -0.3593420   0.0018299   0.000057  -0.000940   0.000657   0.000642  0.0000137  0.0000136    0.000253    0.000284
+1987   5  25  46940   0.032568   0.199955  -0.3610990   0.0016706  -0.000120   0.000076   0.000575   0.000642  0.0000134  0.0000135    0.000192    0.000229
+1987   5  26  46941   0.029517   0.198194  -0.3626734   0.0014610  -0.000125   0.000841   0.000745   0.000895  0.0000133  0.0000134    0.000168    0.000205
+1987   5  27  46942   0.027722   0.197433  -0.3640253   0.0012246   0.000048   0.001003   0.001231   0.001485  0.0000133  0.0000141    0.000169    0.000208
+1987   5  28  46943   0.027203   0.197585  -0.3651384   0.0009949   0.000198   0.000710   0.000590   0.000676  0.0000149  0.0000141    0.000282    0.000354
+1987   5  29  46944   0.027050   0.197663  -0.3660384   0.0008187   0.000113   0.000358   0.000553   0.000630  0.0000149  0.0000150    0.000285    0.000349
+1987   5  30  46945   0.026544   0.197174  -0.3668023   0.0007407  -0.000248   0.000253   0.000531   0.000597  0.0000151  0.0000151    0.000291    0.000330
+1987   5  31  46946   0.026037   0.197087  -0.3675459   0.0007671  -0.000646   0.000306   0.000560   0.000624  0.0000152  0.0000150    0.000295    0.000318
+1987   6   1  46947   0.025725   0.197594  -0.3683589   0.0008565  -0.000856   0.000341   0.001795   0.001982  0.0000150  0.0000143    0.000293    0.000304
+1987   6   2  46948   0.025283   0.197812  -0.3692748   0.0009623  -0.000828   0.000294   0.001078   0.001084  0.0000134  0.0000142    0.000273    0.000240
+1987   6   3  46949   0.024605   0.197563  -0.3702915   0.0010660  -0.000648   0.000191   0.000606   0.000607  0.0000134  0.0000134    0.000273    0.000240
+1987   6   4  46950   0.023918   0.197573  -0.3714065   0.0011763  -0.000451   0.000108   0.000849   0.000848  0.0000134  0.0000135    0.000273    0.000240
+1987   6   5  46951   0.023305   0.198079  -0.3726360   0.0013043  -0.000333   0.000079   0.001053   0.000967  0.0000136  0.0000136    0.000288    0.000273
+1987   6   6  46952   0.022848   0.198666  -0.3739984   0.0014351  -0.000326   0.000096   0.000525   0.000466  0.0000137  0.0000137    0.000296    0.000293
+1987   6   7  46953   0.022692   0.198765  -0.3754802   0.0015242  -0.000406   0.000128   0.000515   0.000457  0.0000137  0.0000138    0.000296    0.000293
+1987   6   8  46954   0.022876   0.198304  -0.3770125   0.0015177  -0.000508   0.000148   0.000529   0.000462  0.0000140  0.0000180    0.000297    0.000289
+1987   6   9  46955   0.023170   0.197893  -0.3784798   0.0013875  -0.000539   0.000143   0.001701   0.000571  0.0000222  0.0000182    0.000314    0.000240
+1987   6  10  46956   0.023067   0.198215  -0.3797627   0.0011571  -0.000425   0.000105   0.001788   0.000573  0.0000224  0.0000222    0.000315    0.000239
+1987   6  11  46957   0.021956   0.199208  -0.3807932   0.0009021  -0.000163   0.000045   0.001726   0.000595  0.0000222  0.0000189    0.000314    0.000240
+1987   6  12  46958   0.019459   0.199701  -0.3815955   0.0007193   0.000144  -0.000016   0.001052   0.000899  0.0000155  0.0000185    0.000298    0.000383
+1987   6  13  46959   0.016012   0.198787  -0.3822820   0.0006796   0.000334  -0.000045   0.000798   0.000757  0.0000147  0.0000151    0.000296    0.000468
+1987   6  14  46960   0.013159   0.197771  -0.3830078   0.0007945   0.000297  -0.000021   0.000678   0.000656  0.0000147  0.0000147    0.000296    0.000469
+1987   6  15  46961   0.011890   0.198003  -0.3839067   0.0010150   0.000064   0.000055   0.001330   0.001283  0.0000147  0.0000141    0.000296    0.000468
+1987   6  16  46962   0.011579   0.198907  -0.3850441   0.0012600  -0.000212   0.000158   0.004654   0.004001  0.0000135  0.0000141    0.000290    0.000239
+1987   6  17  46963   0.011123   0.199527  -0.3864047   0.0014511  -0.000359   0.000258   0.001191   0.001256  0.0000134  0.0000135    0.000290    0.000233
+1987   6  18  46964   0.010210   0.200079  -0.3879072   0.0015379  -0.000295   0.000332   0.000633   0.000655  0.0000134  0.0000135    0.000288    0.000231
+1987   6  19  46965   0.009251   0.201102  -0.3894381   0.0015080  -0.000086   0.000367   0.000600   0.000562  0.0000136  0.0000135    0.000284    0.000223
+1987   6  20  46966   0.008482   0.201561  -0.3908884   0.0013765   0.000063   0.000379   0.000589   0.000523  0.0000136  0.0000136    0.000280    0.000218
+1987   6  21  46967   0.007627   0.201362  -0.3921688   0.0011706   0.000054   0.000344   0.000895   0.000781  0.0000137  0.0000141    0.000277    0.000218
+1987   6  22  46968   0.006328   0.201849  -0.3932208   0.0009253  -0.000023   0.000221   0.001316   0.001146  0.0000146  0.0000145    0.000255    0.000227
+1987   6  23  46969   0.004690   0.203565  -0.3940231   0.0006769  -0.000012   0.000024   0.000894   0.000802  0.0000153  0.0000120    0.000273    0.000244
+1987   6  24  46970   0.003380   0.204651  -0.3945887   0.0004577   0.000163  -0.000151   0.000713   0.000649  0.0000094  0.0000094    0.000295    0.000284
+1987   6  25  46971   0.002801   0.203912  -0.3949604   0.0002944   0.000386  -0.000088   0.000346   0.000310  0.0000035  0.0000060    0.000140    0.000150
+1987   6  26  46972   0.002106   0.203318  -0.3952036   0.0002054   0.000487   0.000078   0.000238   0.000212  0.0000026  0.0000038    0.000107    0.000114
+1987   6  27  46973  -0.000101   0.204684  -0.3953980   0.0002008   0.000417   0.000177   0.000295   0.000277  0.0000041  0.0000086    0.000154    0.000161
+1987   6  28  46974  -0.002310   0.205604  -0.3956288   0.0002787   0.000259   0.000307   0.000498   0.000581  0.0000145  0.0000111    0.000271    0.000260
+1987   6  29  46975  -0.003242   0.204434  -0.3959729   0.0004234   0.000157   0.000508   0.000600   0.000695  0.0000181  0.0000211    0.000298    0.000292
+1987   6  30  46976  -0.004605   0.204339  -0.3964848   0.0006048   0.000216   0.000493   0.000976   0.001100  0.0000277  0.0000254    0.000458    0.000460
+1987   7   1  46977  -0.006032   0.205899  -0.3971825   0.0007862   0.000392   0.000154   0.001228   0.001402  0.0000328  0.0000271    0.001078    0.000923
+1987   7   2  46978  -0.005966   0.207165  -0.3980490   0.0009394   0.000517  -0.000303   0.001060   0.001108  0.0000265  0.0000270    0.000745    0.000503
+1987   7   3  46979  -0.006216   0.207651  -0.3990462   0.0010452   0.000610  -0.000598   0.001197   0.001009  0.0000212  0.0000237    0.000418    0.000282
+1987   7   4  46980  -0.008773   0.208131  -0.4001183   0.0010847   0.000843  -0.000543   0.001395   0.001154  0.0000209  0.0000211    0.000406    0.000273
+1987   7   5  46981  -0.010950   0.208730  -0.4011889   0.0010412   0.001188  -0.000162   0.001653   0.001345  0.0000209  0.0000166    0.000405    0.000273
+1987   7   6  46982  -0.011636   0.209153  -0.4021710   0.0009122   0.001408   0.000322   0.002232   0.001506  0.0000122  0.0000164    0.000253    0.000214
+1987   7   7  46983  -0.011699   0.209226  -0.4029873   0.0007169   0.001233   0.000639   0.000914   0.000972  0.0000120  0.0000123    0.000244    0.000211
+1987   7   8  46984  -0.012356   0.209329  -0.4035937   0.0004973   0.000590   0.000630   0.000501   0.000619  0.0000123  0.0000130    0.000226    0.000204
+1987   7   9  46985  -0.013551   0.210492  -0.4039959   0.0003145  -0.000256   0.000358   0.000512   0.000787  0.0000141  0.0000142    0.000181    0.000183
+1987   7  10  46986  -0.014850   0.211746  -0.4042631   0.0002317  -0.000684   0.000125   0.000773   0.001577  0.0000160  0.0000235    0.000163    0.000172
+1987   7  11  46987  -0.016200   0.211075  -0.4045146   0.0002881  -0.000468   0.000121   0.001301   0.002014  0.0000329  0.0000247    0.000334    0.000347
+1987   7  12  46988  -0.018000   0.210062  -0.4048888   0.0004790   0.000013   0.000288   0.001103   0.001186  0.0000333  0.0000253    0.000610    0.000447
+1987   7  13  46989  -0.020438   0.211290  -0.4054959   0.0007468   0.000239   0.000457   0.000702   0.000658  0.0000177  0.0000241    0.000337    0.000243
+1987   7  14  46990  -0.022713   0.213368  -0.4063709   0.0010038   0.000048   0.000524   0.000605   0.000554  0.0000148  0.0000232    0.000283    0.000203
+1987   7  15  46991  -0.024312   0.214710  -0.4074639   0.0011725  -0.000308   0.000493   0.001307   0.000979  0.0000286  0.0000762    0.000384    0.000291
+1987   7  16  46992  -0.025353   0.215312  -0.4086648   0.0012138  -0.000434   0.000421   0.005384   0.001856  0.0001376  0.0000287    0.000463    0.000372
+1987   7  17  46993  -0.026029   0.215886  -0.4098463   0.0011291  -0.000140   0.000355   0.001180   0.001017  0.0000288  0.0000758    0.000409    0.000326
+1987   7  18  46994  -0.026148   0.216652  -0.4108941   0.0009409   0.000250   0.000234   0.000570   0.000538  0.0000140  0.0000199    0.000254    0.000241
+1987   7  19  46995  -0.025532   0.217312  -0.4117172   0.0006773   0.000254   0.000033   0.000384   0.000373  0.0000111  0.0000120    0.000130    0.000148
+1987   7  20  46996  -0.024712   0.218151  -0.4122529   0.0003853   0.000031   0.000014   0.000323   0.000317  0.0000099  0.0000126    0.000105    0.000127
+1987   7  21  46997  -0.024706   0.218998  -0.4125025   0.0001342  -0.000033   0.000237   0.000410   0.000459  0.0000141  0.0000155    0.000155    0.000177
+1987   7  22  46998  -0.025948   0.219139  -0.4125429  -0.0000234   0.000164   0.000415   0.000538   0.000744  0.0000211  0.0000147    0.000292    0.000257
+1987   7  23  46999  -0.027366   0.219067  -0.4124817  -0.0000817   0.000457   0.000351   0.000507   0.000478  0.0000154  0.0000161    0.000180    0.000180
+1987   7  24  47000  -0.026616   0.221081  -0.4124069  -0.0000594   0.000499   0.000406   0.000420   0.000344  0.0000111  0.0000129    0.000109    0.000117
+1987   7  25  47001  -0.026615   0.223359  -0.4123883   0.0000308   0.000309   0.000503   0.000563   0.000462  0.0000104  0.0000287    0.000097    0.000106
+1987   7  26  47002  -0.027732   0.224280  -0.4124885   0.0001786   0.000123   0.000518   0.001708   0.001192  0.0000464  0.0000232    0.000413    0.000242
+1987   7  27  47003  -0.028277   0.224467  -0.4127572   0.0003660   0.000166   0.000457   0.003270   0.001160  0.0000360  0.0000324    0.000693    0.000267
+1987   7  28  47004  -0.027539   0.224787  -0.4132225   0.0005658   0.000497   0.000355   0.001593   0.000748  0.0000185  0.0000307    0.000441    0.000273
+1987   7  29  47005  -0.026739   0.225236  -0.4138810   0.0007431   0.000942   0.000246   0.002086   0.001040  0.0000254  0.0000374    0.000609    0.000400
+1987   7  30  47006  -0.026857   0.226155  -0.4146924   0.0008624   0.001199   0.000172   0.002372   0.001710  0.0000562  0.0000207    0.001305    0.000878
+1987   7  31  47007  -0.027346   0.227218  -0.4155836   0.0008995   0.001109   0.000127   0.001346   0.001082  0.0000160  0.0000315    0.000288    0.000146
+1987   8   1  47008  -0.027429   0.227874  -0.4164659   0.0008482   0.000740   0.000072   0.000384   0.000309  0.0000069  0.0000115    0.000128    0.000066
+1987   8   2  47009  -0.027750   0.228626  -0.4172544   0.0007207   0.000291  -0.000034   0.000265   0.000214  0.0000070  0.0000082    0.000130    0.000067
+1987   8   3  47010  -0.028976   0.230035  -0.4178850   0.0005435  -0.000008  -0.000200   0.000377   0.000305  0.0000095  0.0000236    0.000179    0.000093
+1987   8   4  47011  -0.030252   0.231504  -0.4183287   0.0003546  -0.000026  -0.000396   0.001543   0.001054  0.0000401  0.0000754    0.000772    0.000413
+1987   8   5  47012  -0.030912   0.232395  -0.4185991   0.0002031   0.000231  -0.000583   0.001760   0.001321  0.0001413  0.0000406    0.002610    0.002538
+1987   8   6  47013  -0.031763   0.233038  -0.4187624   0.0001455   0.000617  -0.000746   0.001301   0.001054  0.0000411  0.0000815    0.000837    0.001228
+1987   8   7  47014  -0.033053   0.233754  -0.4189375   0.0002255   0.000889  -0.000870   0.001160   0.000870  0.0000216  0.0000295    0.000445    0.000653
+1987   8   8  47015  -0.033198   0.234112  -0.4192670   0.0004426   0.000784  -0.000902   0.001488   0.001089  0.0000180  0.0000171    0.000368    0.000534
+1987   8   9  47016  -0.032625   0.234753  -0.4198619   0.0007404   0.000454  -0.000767   0.000998   0.000799  0.0000126  0.0000146    0.000149    0.000154
+1987   8  10  47017  -0.032677   0.235785  -0.4207556   0.0010323   0.000310  -0.000420   0.000356   0.000291  0.0000112  0.0000123    0.000124    0.000126
+1987   8  11  47018  -0.033558   0.236270  -0.4218988   0.0012433   0.000619   0.000073   0.000371   0.000302  0.0000121  0.0000148    0.000138    0.000138
+1987   8  12  47019  -0.034405   0.236224  -0.4231900   0.0013324   0.001103   0.000492   0.000713   0.000560  0.0000183  0.0000187    0.000343    0.000257
+1987   8  13  47020  -0.034491   0.236789  -0.4245066   0.0012866   0.001155   0.000590   0.001198   0.000897  0.0000254  0.0000622    0.001301    0.000394
+1987   8  14  47021  -0.034884   0.238298  -0.4257196   0.0011189   0.000865   0.000344   0.003418   0.002364  0.0001060  0.0000892    0.002020    0.000748
+1987   8  15  47022  -0.036805   0.240132  -0.4267232   0.0008748   0.000728  -0.000053   0.002914   0.002026  0.0001530  0.0000725    0.002198    0.001246
+1987   8  16  47023  -0.039086   0.241688  -0.4274690   0.0006195   0.000866  -0.000365   0.001602   0.001354  0.0000391  0.0000858    0.000857    0.000969
+1987   8  17  47024  -0.039505   0.242638  -0.4279766   0.0004144   0.001135  -0.000420   0.000883   0.000726  0.0000186  0.0000271    0.000405    0.000464
+1987   8  18  47025  -0.038363   0.243265  -0.4283205   0.0002955   0.001169  -0.000192   0.001075   0.000811  0.0000152  0.0000255    0.000331    0.000380
+1987   8  19  47026  -0.037174   0.243694  -0.4285945   0.0002707   0.000874   0.000203   0.002721   0.001399  0.0000324  0.0001041    0.000697    0.000802
+1987   8  20  47027  -0.037120   0.244428  -0.4288903   0.0003349   0.000490   0.000560   0.003263   0.004300  0.0001930  0.0000387    0.002855    0.003454
+1987   8  21  47028  -0.038284   0.246042  -0.4292914   0.0004764   0.000318   0.000676   0.001786   0.001752  0.0000450  0.0001061    0.000865    0.001029
+1987   8  22  47029  -0.039548   0.248026  -0.4298657   0.0006753   0.000430   0.000480   0.000977   0.000747  0.0000192  0.0000304    0.000358    0.000341
+1987   8  23  47030  -0.039396   0.249296  -0.4306571   0.0009062   0.000624   0.000057   0.000645   0.000612  0.0000159  0.0000188    0.000253    0.000176
+1987   8  24  47031  -0.038614   0.250696  -0.4316834   0.0011353   0.000584  -0.000382   0.000658   0.000732  0.0000184  0.0000393    0.000268    0.000171
+1987   8  25  47032  -0.038051   0.253538  -0.4329222   0.0013233   0.000314  -0.000597   0.001854   0.001810  0.0000627  0.0000325    0.000876    0.000592
+1987   8  26  47033  -0.037638   0.256754  -0.4343141   0.0014414   0.000101  -0.000481   0.001244   0.000904  0.0000466  0.0000421    0.001123    0.000792
+1987   8  27  47034  -0.037718   0.256941  -0.4357808   0.0014830   0.000160  -0.000161   0.000579   0.000506  0.0000216  0.0000314    0.000605    0.000508
+1987   8  28  47035  -0.037935   0.255265  -0.4372512   0.0014664   0.000302  -0.000025   0.000507   0.000509  0.0000162  0.0000183    0.000373    0.000463
+1987   8  29  47036  -0.038441   0.256462  -0.4386852   0.0014023   0.000360   0.000007   0.000669   0.000745  0.0000150  0.0000151    0.000320    0.000469
+1987   8  30  47037  -0.038664   0.259605  -0.4400332   0.0012745   0.000298   0.000110   0.001727   0.001862  0.0000141  0.0000128    0.000297    0.000396
+1987   8  31  47038  -0.038173   0.260863  -0.4412224   0.0010790   0.000161   0.000278   0.000627   0.000801  0.0000106  0.0000124    0.000224    0.000217
+1987   9   1  47039  -0.038187   0.260950  -0.4421944   0.0008538   0.000063   0.000414   0.000487   0.000623  0.0000106  0.0000106    0.000223    0.000217
+1987   9   2  47040  -0.039524   0.262059  -0.4429512   0.0006744   0.000104   0.000393   0.000682   0.000837  0.0000106  0.0000106    0.000223    0.000217
+1987   9   3  47041  -0.040828   0.263389  -0.4435816   0.0006208   0.000299   0.000186   0.001220   0.001308  0.0000106  0.0000124    0.000223    0.000217
+1987   9   4  47042  -0.041319   0.264315  -0.4442413   0.0007372   0.000572  -0.000097   0.003320   0.002971  0.0000142  0.0000126    0.000282    0.000241
+1987   9   5  47043  -0.041368   0.265105  -0.4451006   0.0010091   0.000793  -0.000258   0.000993   0.001009  0.0000146  0.0000144    0.000288    0.000243
+1987   9   6  47044  -0.041401   0.265833  -0.4462834   0.0013645   0.000843  -0.000101   0.000479   0.000491  0.0000146  0.0000146    0.000288    0.000243
+1987   9   7  47045  -0.041315   0.266130  -0.4478211   0.0016981   0.000676   0.000429   0.000473   0.000485  0.0000146  0.0000146    0.000288    0.000243
+1987   9   8  47046  -0.041236   0.266328  -0.4496397   0.0019137   0.000365   0.001144   0.001778   0.001810  0.0000146  0.0000148    0.000288    0.000243
+1987   9   9  47047  -0.041495   0.267043  -0.4515907   0.0019622   0.000063   0.001673   0.005449   0.004382  0.0000150  0.0000148    0.000367    0.000285
+1987   9  10  47048  -0.042155   0.268120  -0.4535084   0.0018522  -0.000081   0.001671   0.000914   0.000675  0.0000150  0.0000148    0.000370    0.000283
+1987   9  11  47049  -0.042897   0.268766  -0.4552579   0.0016298  -0.000009   0.001054   0.000687   0.000564  0.0000146  0.0000142    0.000335    0.000243
+1987   9  12  47050  -0.043403   0.268876  -0.4567557   0.0013533   0.000198   0.000106   0.000566   0.000655  0.0000133  0.0000136    0.000257    0.000172
+1987   9  13  47051  -0.043631   0.269733  -0.4579736   0.0010744   0.000314  -0.000545   0.000550   0.000808  0.0000126  0.0000129    0.000227    0.000148
+1987   9  14  47052  -0.044216   0.271712  -0.4589269   0.0008356   0.000277  -0.000582   0.001407   0.002241  0.0000125  0.0000128    0.000224    0.000150
+1987   9  15  47053  -0.045549   0.273856  -0.4596732   0.0006767   0.000246  -0.000207   0.001289   0.001116  0.0000129  0.0000132    0.000248    0.000259
+1987   9  16  47054  -0.046501   0.275879  -0.4603106   0.0006296   0.000386   0.000155   0.000806   0.000621  0.0000140  0.0000168    0.000266    0.000280
+1987   9  17  47055  -0.045956   0.278006  -0.4609616   0.0007076   0.000691   0.000216   0.001038   0.000876  0.0000206  0.0000302    0.000374    0.000415
+1987   9  18  47056  -0.045584   0.279053  -0.4617510   0.0008947   0.000882   0.000146   0.001616   0.001938  0.0000464  0.0000309    0.000648    0.000950
+1987   9  19  47057  -0.046588   0.278929  -0.4627696   0.0011491   0.000784   0.000145   0.004549   0.004318  0.0000412  0.0000306    0.000604    0.000905
+1987   9  20  47058  -0.048323   0.278916  -0.4640586   0.0014227   0.000495   0.000216   0.001853   0.001334  0.0000147  0.0000279    0.000274    0.000323
+1987   9  21  47059  -0.049589   0.279726  -0.4656138   0.0016734   0.000249   0.000262   0.000951   0.000677  0.0000147  0.0000147    0.000274    0.000323
+1987   9  22  47060  -0.049889   0.280947  -0.4673931   0.0018655   0.000222   0.000196   0.001091   0.000777  0.0000147  0.0000161    0.000274    0.000323
+1987   9  23  47061  -0.049750   0.282034  -0.4693223   0.0019734   0.000365   0.000091   0.002070   0.001398  0.0000175  0.0000166    0.000260    0.000345
+1987   9  24  47062  -0.050136   0.283197  -0.4713094   0.0019887   0.000469   0.000073   0.001151   0.000759  0.0000186  0.0000175    0.000257    0.000352
+1987   9  25  47063  -0.051453   0.285505  -0.4732664   0.0019214   0.000358   0.000164   0.000804   0.000605  0.0000175  0.0000174    0.000266    0.000348
+1987   9  26  47064  -0.052643   0.287716  -0.4751238   0.0017850   0.000046   0.000154   0.000616   0.000570  0.0000161  0.0000193    0.000309    0.000338
+1987   9  27  47065  -0.052591   0.288264  -0.4768204   0.0015837  -0.000292  -0.000173   0.000736   0.000676  0.0000210  0.0000228    0.000373    0.000335
+1987   9  28  47066  -0.052262   0.289771  -0.4782928   0.0013415  -0.000486  -0.000610   0.001019   0.000885  0.0000295  0.0000251    0.000443    0.000334
+1987   9  29  47067  -0.053144   0.293025  -0.4795238   0.0011255  -0.000474  -0.000894   0.003279   0.001677  0.0000291  0.0000237    0.000427    0.000336
+1987   9  30  47068  -0.055237   0.295655  -0.4805797   0.0010168  -0.000307  -0.000919   0.001571   0.001147  0.0000179  0.0000235    0.000292    0.000357
+1987  10   1  47069  -0.056699   0.296476  -0.4816016   0.0010696  -0.000092  -0.000709   0.000978   0.000811  0.0000179  0.0000179    0.000291    0.000357
+1987  10   2  47070  -0.056081   0.296497  -0.4827613   0.0012855   0.000067  -0.000372   0.001361   0.001133  0.0000179  0.0000179    0.000291    0.000357
+1987  10   3  47071  -0.054800   0.297278  -0.4842016   0.0016117   0.000122  -0.000014   0.002404   0.002008  0.0000179  0.0000208    0.000291    0.000357
+1987  10   4  47072  -0.054503   0.299027  -0.4859897   0.0019613   0.000082   0.000284   0.004049   0.003039  0.0000236  0.0000211    0.000501    0.000704
+1987  10   5  47073  -0.055555   0.300795  -0.4881007   0.0022419  -0.000016   0.000456   0.002756   0.001905  0.0000242  0.0000239    0.000538    0.000786
+1987  10   6  47074  -0.057152   0.301834  -0.4904269   0.0023822  -0.000133   0.000460   0.001898   0.001286  0.0000242  0.0000242    0.000538    0.000786
+1987  10   7  47075  -0.058165   0.302944  -0.4928095   0.0023521  -0.000233   0.000275   0.001754   0.001187  0.0000242  0.0000242    0.000538    0.000786
+1987  10   8  47076  -0.058461   0.304439  -0.4950837   0.0021698  -0.000294  -0.000055   0.003682   0.002691  0.0000242  0.0000183    0.000537    0.000786
+1987  10   9  47077  -0.058727   0.305548  -0.4971226   0.0018918  -0.000300  -0.000428   0.003854   0.002926  0.0000124  0.0000181    0.000264    0.000363
+1987  10  10  47078  -0.059283   0.306213  -0.4988652   0.0015894  -0.000247  -0.000696   0.001006   0.000760  0.0000120  0.0000122    0.000256    0.000352
+1987  10  11  47079  -0.059845   0.307154  -0.5003187   0.0013247  -0.000144  -0.000731   0.000915   0.000691  0.0000120  0.0000120    0.000256    0.000352
+1987  10  12  47080  -0.060090   0.308936  -0.5015428   0.0011386  -0.000017  -0.000497   0.000924   0.000698  0.0000120  0.0000120    0.000256    0.000352
+1987  10  13  47081  -0.060230   0.311125  -0.5026278   0.0010506   0.000097  -0.000108   0.002230   0.001702  0.0000120  0.0000102    0.000256    0.000352
+1987  10  14  47082  -0.060807   0.312742  -0.5036751   0.0010641   0.000169   0.000216   0.003371   0.002972  0.0000084  0.0000101    0.000157    0.000321
+1987  10  15  47083  -0.062010   0.313368  -0.5047835   0.0011694   0.000191   0.000270   0.000704   0.000700  0.0000083  0.0000084    0.000153    0.000317
+1987  10  16  47084  -0.063340   0.313741  -0.5060353   0.0013419   0.000189   0.000000   0.000473   0.000467  0.0000084  0.0000087    0.000151    0.000302
+1987  10  17  47085  -0.064114   0.314596  -0.5074802   0.0015437   0.000207  -0.000438   0.000535   0.000492  0.0000092  0.0000092    0.000138    0.000238
+1987  10  18  47086  -0.064074   0.315374  -0.5091256   0.0017349   0.000296  -0.000680   0.000477   0.000416  0.0000101  0.0000103    0.000130    0.000208
+1987  10  19  47087  -0.063961   0.316168  -0.5109425   0.0018874   0.000431  -0.000586   0.000393   0.000385  0.0000115  0.0000111    0.000172    0.000239
+1987  10  20  47088  -0.063808   0.317737  -0.5128829   0.0019890   0.000504  -0.000386   0.000377   0.000407  0.0000121  0.0000113    0.000236    0.000256
+1987  10  21  47089  -0.063439   0.319874  -0.5148937   0.0020346   0.000424  -0.000325   0.000388   0.000448  0.0000112  0.0000122    0.000238    0.000227
+1987  10  22  47090  -0.062964   0.320397  -0.5169189   0.0020132   0.000193  -0.000327   0.000393   0.000503  0.0000124  0.0000116    0.000239    0.000202
+1987  10  23  47091  -0.062580   0.321382  -0.5188864   0.0019156  -0.000011  -0.000101   0.000373   0.000666  0.0000120  0.0000116    0.000190    0.000149
+1987  10  24  47092  -0.062587   0.323108  -0.5207254   0.0017475  -0.000044   0.000123   0.000361   0.000949  0.0000109  0.0000127    0.000166    0.000129
+1987  10  25  47093  -0.062974   0.324320  -0.5223751   0.0015331   0.000039   0.000076   0.000411   0.000595  0.0000135  0.0000129    0.000215    0.000208
+1987  10  26  47094  -0.063343   0.325035  -0.5238082   0.0013265   0.000064  -0.000177   0.000432   0.000547  0.0000150  0.0000143    0.000247    0.000315
+1987  10  27  47095  -0.063399   0.325826  -0.5250641   0.0011998  -0.000105  -0.000439   0.000439   0.000555  0.0000151  0.0000252    0.000248    0.000318
+1987  10  28  47096  -0.063339   0.327039  -0.5262536   0.0012084  -0.000404  -0.000559   0.001154   0.001580  0.0000354  0.0000759    0.000570    0.000746
+1987  10  29  47097  -0.063509   0.328522  -0.5275240   0.0013611  -0.000614  -0.000512   0.002098   0.003801  0.0001367  0.0000290    0.001685    0.003233
+1987  10  30  47098  -0.063770   0.329894  -0.5290049   0.0016154  -0.000533  -0.000383   0.000669   0.000763  0.0000225  0.0000744    0.000371    0.000553
+1987  10  31  47099  -0.063380   0.330994  -0.5307627   0.0018961  -0.000133  -0.000278   0.000401   0.000452  0.0000121  0.0000172    0.000194    0.000276
+1987  11   1  47100  -0.062109   0.332278  -0.5327817   0.0021250   0.000378  -0.000279   0.000345   0.000395  0.0000120  0.0000121    0.000171    0.000225
+1987  11   2  47101  -0.061069   0.334695  -0.5349772   0.0022553   0.000622  -0.000437   0.000323   0.000372  0.0000121  0.0000154    0.000162    0.000205
+1987  11   3  47102  -0.061135   0.337607  -0.5372451   0.0022779   0.000475  -0.000583   0.000833   0.000895  0.0000187  0.0000146    0.000215    0.000247
+1987  11   4  47103  -0.061975   0.339192  -0.5394865   0.0021957   0.000160  -0.000495   0.000963   0.001183  0.0000171  0.0000140    0.000218    0.000249
+1987  11   5  47104  -0.062537   0.338881  -0.5416031   0.0020106   0.000006  -0.000225   0.000388   0.000486  0.0000092  0.0000110    0.000179    0.000219
+1987  11   6  47105  -0.062024   0.338626  -0.5434949   0.0017474   0.000236  -0.000404   0.000209   0.000244  0.0000049  0.0000066    0.000163    0.000216
+1987  11   7  47106  -0.060846   0.339373  -0.5451060   0.0014713   0.000446  -0.000784   0.000172   0.000198  0.0000040  0.0000045    0.000161    0.000224
+1987  11   8  47107  -0.059729   0.340950  -0.5464611   0.0012610   0.000304  -0.000869   0.000173   0.000199  0.0000040  0.0000076    0.000165    0.000228
+1987  11   9  47108  -0.058864   0.343106  -0.5476592   0.0011681  -0.000005  -0.000624   0.000455   0.000490  0.0000111  0.0000079    0.000286    0.000276
+1987  11  10  47109  -0.058115   0.345500  -0.5488293   0.0011962  -0.000120  -0.000247   0.000478   0.000494  0.0000117  0.0000121    0.000261    0.000269
+1987  11  11  47110  -0.057442   0.347828  -0.5500803   0.0013096   0.000158   0.000005   0.000535   0.000473  0.0000130  0.0000129    0.000201    0.000244
+1987  11  12  47111  -0.057150   0.349759  -0.5514714   0.0014667   0.000549   0.000085   0.000709   0.000561  0.0000142  0.0000137    0.000177    0.000230
+1987  11  13  47112  -0.057149   0.351457  -0.5530286   0.0016424   0.000723   0.000039   0.001493   0.001596  0.0000144  0.0000138    0.000175    0.000230
+1987  11  14  47113  -0.057049   0.353310  -0.5547615   0.0018175   0.000601  -0.000101   0.000556   0.000858  0.0000134  0.0000139    0.000209    0.000251
+1987  11  15  47114  -0.056895   0.355207  -0.5566594   0.0019692   0.000290  -0.000305   0.000384   0.000587  0.0000134  0.0000134    0.000209    0.000251
+1987  11  16  47115  -0.056793   0.356804  -0.5586867   0.0020737  -0.000021  -0.000543   0.000558   0.000848  0.0000134  0.0000134    0.000209    0.000251
+1987  11  17  47116  -0.056429   0.358039  -0.5607857   0.0021140  -0.000198  -0.000769   0.001232   0.001780  0.0000134  0.0000171    0.000209    0.000251
+1987  11  18  47117  -0.055681   0.359181  -0.5628867   0.0020836  -0.000184  -0.000919   0.003442   0.003523  0.0000207  0.0000177    0.000297    0.000608
+1987  11  19  47118  -0.054887   0.360515  -0.5649207   0.0019846   0.000035  -0.000938   0.001530   0.002959  0.0000221  0.0000214    0.000310    0.000791
+1987  11  20  47119  -0.054452   0.362066  -0.5668264   0.0018264   0.000428  -0.000802   0.000827   0.002164  0.0000221  0.0000221    0.000310    0.000791
+1987  11  21  47120  -0.054447   0.363630  -0.5685569   0.0016294   0.000895  -0.000557   0.000989   0.002633  0.0000221  0.0000215    0.000310    0.000791
+1987  11  22  47121  -0.054185   0.364950  -0.5700912   0.0014327   0.001246  -0.000319   0.002074   0.003430  0.0000210  0.0000191    0.000288    0.000583
+1987  11  23  47122  -0.053715   0.366207  -0.5714530   0.0012911   0.001268  -0.000222   0.000905   0.000533  0.0000161  0.0000185    0.000204    0.000283
+1987  11  24  47123  -0.054181   0.367925  -0.5727211   0.0012571   0.000864  -0.000319   0.000741   0.000449  0.0000159  0.0000158    0.000208    0.000297
+1987  11  25  47124  -0.056052   0.370283  -0.5740163   0.0013547   0.000150  -0.000534   0.000733   0.000507  0.0000156  0.0000156    0.000223    0.000358
+1987  11  26  47125  -0.057837   0.372693  -0.5754648   0.0015641  -0.000525  -0.000656   0.000749   0.000580  0.0000153  0.0000154    0.000236    0.000431
+1987  11  27  47126  -0.058603   0.374756  -0.5771542   0.0018293  -0.000884  -0.000559   0.002184   0.001949  0.0000153  0.0000134    0.000239    0.000453
+1987  11  28  47127  -0.058881   0.376486  -0.5791076   0.0020803  -0.000871  -0.000288   0.002915   0.003611  0.0000115  0.0000133    0.000149    0.000203
+1987  11  29  47128  -0.059530   0.377825  -0.5812801   0.0022528  -0.000616   0.000000   0.000506   0.000634  0.0000114  0.0000118    0.000147    0.000199
+1987  11  30  47129  -0.060659   0.378482  -0.5835698   0.0022989  -0.000335   0.000133   0.000375   0.000470  0.0000121  0.0000138    0.000157    0.000212
+1987  12   1  47130  -0.061666   0.378614  -0.5858360   0.0021975  -0.000198   0.000032   0.000495   0.000614  0.0000162  0.0000179    0.000209    0.000277
+1987  12   2  47131  -0.061821   0.379426  -0.5879328   0.0019730  -0.000239  -0.000241   0.000766   0.000926  0.0000237  0.0000195    0.000304    0.000384
+1987  12   3  47132  -0.061160   0.381088  -0.5897658   0.0016946  -0.000326  -0.000487   0.002693   0.002914  0.0000227  0.0000180    0.000315    0.000399
+1987  12   4  47133  -0.060321   0.382637  -0.5913240   0.0014404  -0.000260  -0.000496   0.001204   0.001535  0.0000122  0.0000175    0.000207    0.000283
+1987  12   5  47134  -0.059606   0.383633  -0.5926645   0.0012564   0.000066  -0.000182   0.000592   0.000777  0.0000122  0.0000122    0.000206    0.000283
+1987  12   6  47135  -0.058804   0.384579  -0.5938648   0.0011406   0.000544   0.000321   0.000608   0.000790  0.0000122  0.0000163    0.000207    0.000283
+1987  12   7  47136  -0.057896   0.386027  -0.5949772   0.0010695   0.000829   0.000650   0.001600   0.001313  0.0000204  0.0000206    0.000263    0.000350
+1987  12   8  47137  -0.057078   0.387849  -0.5960332   0.0010410   0.000648   0.000487   0.001662   0.000995  0.0000289  0.0000207    0.000274    0.000404
+1987  12   9  47138  -0.055965   0.388518  -0.5970826   0.0010872   0.000127  -0.000139   0.001508   0.000713  0.0000209  0.0000214    0.000235    0.000408
+1987  12  10  47139  -0.055728   0.389598  -0.5982229   0.0012254   0.000199  -0.000479   0.001051   0.000423  0.0000140  0.0000165    0.000211    0.000313
+1987  12  11  47140  -0.055561   0.391108  -0.5995394   0.0014234   0.000637  -0.000509   0.000900   0.000358  0.0000122  0.0000130    0.000207    0.000272
+1987  12  12  47141  -0.054240   0.392199  -0.6010662   0.0016272   0.000876  -0.000457   0.002402   0.000987  0.0000120  0.0000121    0.000206    0.000266
+1987  12  13  47142  -0.052019   0.393299  -0.6027818   0.0017872   0.000770  -0.000371   0.004858   0.004218  0.0000120  0.0000120    0.000231    0.000346
+1987  12  14  47143  -0.049757   0.394897  -0.6046225   0.0018751   0.000421  -0.000286   0.000816   0.000972  0.0000121  0.0000124    0.000232    0.000353
+1987  12  15  47144  -0.048043   0.396711  -0.6065091   0.0018857   0.000076  -0.000230   0.000516   0.000586  0.0000127  0.0000143    0.000228    0.000332
+1987  12  16  47145  -0.046870   0.398152  -0.6083672   0.0018287  -0.000068  -0.000261   0.000656   0.000577  0.0000165  0.0000178    0.000212    0.000277
+1987  12  17  47146  -0.045666   0.399085  -0.6101390   0.0017098  -0.000074  -0.000572   0.000888   0.000566  0.0000229  0.0000257    0.000204    0.000252
+1987  12  18  47147  -0.044534   0.400012  -0.6117655   0.0015339  -0.000042  -0.000983   0.000678   0.000351  0.0000350  0.0000334    0.000273    0.000297
+1987  12  19  47148  -0.044094   0.401388  -0.6132017   0.0013376   0.000004  -0.001035   0.000692   0.000355  0.0000439  0.0000410    0.000339    0.000345
+1987  12  20  47149  -0.044191   0.402896  -0.6144597   0.0011939   0.000048  -0.000588   0.000984   0.000560  0.0000470  0.0000373    0.000465    0.000470
+1987  12  21  47150  -0.043856   0.403421  -0.6156321   0.0011746   0.000027  -0.000260   0.000852   0.000618  0.0000307  0.0000383    0.000372    0.000359
+1987  12  22  47151  -0.040926   0.403076  -0.6168626   0.0013078  -0.000075  -0.000400   0.000637   0.000378  0.0000295  0.0000230    0.000311    0.000297
+1987  12  23  47152  -0.039099   0.404070  -0.6182933   0.0015645  -0.000219  -0.000553   0.000567   0.000392  0.0000153  0.0000209    0.000265    0.000253
+1987  12  24  47153  -0.038517   0.405242  -0.6200116   0.0018700  -0.000322  -0.000573   0.000696   0.000584  0.0000123  0.0000137    0.000245    0.000234
+1987  12  25  47154  -0.037445   0.405658  -0.6220211   0.0021357  -0.000314  -0.000509   0.001504   0.001290  0.0000121  0.0000122    0.000243    0.000232
+1987  12  26  47155  -0.035929   0.406260  -0.6242448   0.0022917  -0.000186  -0.000375   0.002597   0.002216  0.0000121  0.0000130    0.000243    0.000232
+1987  12  27  47156  -0.034259   0.407074  -0.6265550   0.0023069   0.000017  -0.000215   0.004338   0.008774  0.0000139  0.0000131    0.000280    0.000296
+1987  12  28  47157  -0.032735   0.407723  -0.6288126   0.0021868   0.000208  -0.000059   0.003687   0.005726  0.0000142  0.0000140    0.000288    0.000311
+1987  12  29  47158  -0.031252   0.408186  -0.6308961   0.0019620   0.000286   0.000090   0.001210   0.001190  0.0000142  0.0000142    0.000288    0.000311
+1987  12  30  47159  -0.029247   0.409482  -0.6327214   0.0016803   0.000176   0.000255   0.000733   0.000698  0.0000142  0.0000142    0.000288    0.000311
+1987  12  31  47160  -0.026648   0.412200  -0.6342585   0.0014041  -0.000119   0.000450   0.000920   0.000861  0.0000142  0.0000142    0.000288    0.000311
+1988   1   1  47161  -0.024903   0.414162   0.3644546   0.0011972  -0.000494   0.000631   0.001335   0.001196  0.0000142  0.0000120    0.000288    0.000311
+1988   1   2  47162  -0.023898   0.414888   0.3633214   0.0011011  -0.000766   0.000685   0.001379   0.001356  0.0000099  0.0000120    0.000228    0.000194
+1988   1   3  47163  -0.022373   0.415415   0.3622219   0.0011151  -0.000773   0.000486   0.000883   0.000882  0.0000098  0.0000102    0.000226    0.000192
+1988   1   4  47164  -0.019440   0.416767   0.3610611   0.0011934  -0.000467  -0.000025   0.000671   0.000672  0.0000104  0.0000121    0.000238    0.000206
+1988   1   5  47165  -0.015953   0.418339   0.3598097   0.0012685   0.000027  -0.000747   0.000813   0.000822  0.0000145  0.0000174    0.000304    0.000303
+1988   1   6  47166  -0.013576   0.418890   0.3585069   0.0013246   0.000436  -0.001296   0.001618   0.001318  0.0000244  0.0000187    0.000387    0.000569
+1988   1   7  47167  -0.012119   0.419145   0.3571532   0.0014160   0.000503  -0.001322   0.000403   0.000301  0.0000229  0.0000234    0.000158    0.000126
+1988   1   8  47168  -0.011067   0.419567   0.3556778   0.0015811   0.000175  -0.000780   0.000273   0.000208  0.0000224  0.0000237    0.000155    0.000121
+1988   1   9  47169  -0.009827   0.419915   0.3540030   0.0017929  -0.000317  -0.000036   0.000368   0.000301  0.0000245  0.0000257    0.000223    0.000162
+1988   1  10  47170  -0.007552   0.419815   0.3521107   0.0019463  -0.000498  -0.000029   0.000589   0.000525  0.0000290  0.0000306    0.000366    0.000252
+1988   1  11  47171  -0.005677   0.419641   0.3501327   0.0019427  -0.000255  -0.000575   0.000861   0.000593  0.0000367  0.0000365    0.000362    0.000325
+1988   1  12  47172  -0.005130   0.420027   0.3482487   0.0018110   0.000080  -0.000780   0.001075   0.000891  0.0000441  0.0000334    0.000360    0.000231
+1988   1  13  47173  -0.003285   0.420912   0.3465335   0.0016425   0.000047  -0.000368   0.000768   0.000707  0.0000301  0.0000302    0.000332    0.000179
+1988   1  14  47174  -0.001132   0.422512   0.3449830   0.0014885  -0.000453   0.000290   0.000595   0.000569  0.0000162  0.0000235    0.000273    0.000191
+1988   1  15  47175  -0.000165   0.423890   0.3435661   0.0013465  -0.000783   0.000309   0.000787   0.000674  0.0000168  0.0000205    0.000309    0.000247
+1988   1  16  47176   0.000175   0.424334   0.3422818   0.0012020  -0.000610  -0.000284   0.000821   0.000602  0.0000248  0.0000163    0.000356    0.000369
+1988   1  17  47177   0.001208   0.424448   0.3411308   0.0010861  -0.000156  -0.000711   0.000403   0.000367  0.0000159  0.0000220    0.000190    0.000204
+1988   1  18  47178   0.002792   0.424461   0.3400591   0.0010764   0.000184  -0.000477   0.000317   0.000288  0.0000191  0.0000161    0.000173    0.000173
+1988   1  19  47179   0.003953   0.425156   0.3389238   0.0012257   0.000096   0.000045   0.000377   0.000366  0.0000162  0.0000173    0.000212    0.000198
+1988   1  20  47180   0.005320   0.425032   0.3375708   0.0014894  -0.000257   0.000117   0.000498   0.000547  0.0000156  0.0000166    0.000236    0.000284
+1988   1  21  47181   0.006838   0.424706   0.3359416   0.0017426  -0.000371  -0.000365   0.000689   0.000780  0.0000169  0.0000175    0.000230    0.000385
+1988   1  22  47182   0.008571   0.425001   0.3341177   0.0018666  -0.000215  -0.000863   0.000379   0.000371  0.0000194  0.0000163    0.000226    0.000179
+1988   1  23  47183   0.010352   0.425863   0.3322636   0.0018270  -0.000159  -0.000790   0.000255   0.000251  0.0000157  0.0000150    0.000222    0.000159
+1988   1  24  47184   0.012069   0.426884   0.3305218   0.0016841  -0.000446  -0.000110   0.000287   0.000317  0.0000106  0.0000124    0.000214    0.000140
+1988   1  25  47185   0.014285   0.427739   0.3289387   0.0015020  -0.000716   0.000256   0.000332   0.000418  0.0000092  0.0000100    0.000209    0.000132
+1988   1  26  47186   0.016922   0.428446   0.3275380   0.0012936  -0.000710  -0.000037   0.001013   0.001099  0.0000094  0.0000109    0.000197    0.000137
+1988   1  27  47187   0.019288   0.429084   0.3263500   0.0010684  -0.000493  -0.000477   0.000972   0.000977  0.0000126  0.0000116    0.000160    0.000199
+1988   1  28  47188   0.021145   0.429250   0.3253839   0.0008588  -0.000287  -0.000356   0.000617   0.000667  0.0000138  0.0000169    0.000173    0.000208
+1988   1  29  47189   0.023120   0.428531   0.3246057   0.0007105  -0.000278   0.000568   0.000982   0.001072  0.0000211  0.0000310    0.000237    0.000243
+1988   1  30  47190   0.025996   0.428672   0.3239319   0.0006556  -0.000403   0.001562   0.001904   0.002536  0.0000482  0.0000576    0.000344    0.000274
+1988   1  31  47191   0.028951   0.429425   0.3232632   0.0006992  -0.000530   0.001954   0.002075   0.003915  0.0000940  0.0000305    0.000384    0.000281
+1988   2   1  47192   0.031619   0.430203   0.3225056   0.0008329  -0.000563   0.001598   0.001338   0.001392  0.0000127  0.0000531    0.000300    0.000193
+1988   2   2  47193   0.034253   0.430623   0.3215765   0.0010389  -0.000459   0.000771   0.000816   0.000979  0.0000122  0.0000122    0.000292    0.000190
+1988   2   3  47194   0.037223   0.430610   0.3204169   0.0012838  -0.000249  -0.000047   0.000494   0.000637  0.0000117  0.0000113    0.000272    0.000198
+1988   2   4  47195   0.040513   0.430515   0.3190090   0.0015221  -0.000006  -0.000473   0.000479   0.000618  0.0000105  0.0000108    0.000228    0.000232
+1988   2   5  47196   0.042848   0.431327   0.3173832   0.0017161   0.000165  -0.000462   0.000655   0.000793  0.0000098  0.0000102    0.000208    0.000270
+1988   2   6  47197   0.045007   0.432252   0.3155959   0.0018513   0.000230  -0.000220   0.000910   0.000980  0.0000099  0.0000108    0.000211    0.000285
+1988   2   7  47198   0.047322   0.432898   0.3137046   0.0019297   0.000237  -0.000038   0.000443   0.000538  0.0000117  0.0000108    0.000327    0.000334
+1988   2   8  47199   0.049103   0.433624   0.3117615   0.0019528   0.000253  -0.000154   0.000430   0.000524  0.0000117  0.0000117    0.000327    0.000334
+1988   2   9  47200   0.049840   0.434633   0.3098217   0.0019137   0.000308  -0.000581   0.000435   0.000529  0.0000117  0.0000118    0.000327    0.000334
+1988   2  10  47201   0.050219   0.435224   0.3079517   0.0018056   0.000344  -0.001040   0.000976   0.000836  0.0000119  0.0000124    0.000261    0.000309
+1988   2  11  47202   0.051366   0.434727   0.3062199   0.0016391   0.000261  -0.001138   0.000870   0.000684  0.0000132  0.0000125    0.000149    0.000227
+1988   2  12  47203   0.053350   0.433877   0.3046698   0.0014552   0.000014  -0.000670   0.000499   0.000447  0.0000131  0.0000134    0.000160    0.000217
+1988   2  13  47204   0.054755   0.434798   0.3032880   0.0013212  -0.000315   0.000164   0.000465   0.000469  0.0000136  0.0000172    0.000230    0.000206
+1988   2  14  47205   0.054165   0.435419   0.3019866   0.0013133  -0.000517   0.000686   0.000728   0.000787  0.0000213  0.0000422    0.000525    0.000307
+1988   2  15  47206   0.053460   0.434007   0.3006088   0.0014801  -0.000460   0.000687   0.002378   0.002127  0.0000709  0.0000508    0.001582    0.000949
+1988   2  16  47207   0.054842   0.432244   0.2989783   0.0018070  -0.000212   0.000406   0.002226   0.001696  0.0000804  0.0000467    0.001526    0.001141
+1988   2  17  47208   0.057173   0.431679   0.2969711   0.0022087   0.000055   0.000204   0.000888   0.000846  0.0000225  0.0000467    0.000473    0.000519
+1988   2  18  47209   0.058739   0.431729   0.2945741   0.0025619   0.000199   0.000175   0.000508   0.000518  0.0000129  0.0000203    0.000274    0.000320
+1988   2  19  47210   0.060166   0.430867   0.2918946   0.0027623   0.000175   0.000141   0.000710   0.000765  0.0000181  0.0000157    0.000355    0.000438
+1988   2  20  47211   0.062038   0.429955   0.2891140   0.0027661   0.000040   0.000023   0.000618   0.000911  0.0000186  0.0000164    0.000209    0.000336
+1988   2  21  47212   0.064133   0.429919   0.2864216   0.0025927  -0.000192  -0.000087   0.000420   0.000630  0.0000146  0.0000151    0.000159    0.000258
+1988   2  22  47213   0.065396   0.430856   0.2839648   0.0023030  -0.000424  -0.000130   0.000367   0.000519  0.0000116  0.0000128    0.000208    0.000246
+1988   2  23  47214   0.065990   0.430628   0.2818235   0.0019736  -0.000438  -0.000184   0.000383   0.000514  0.0000110  0.0000132    0.000340    0.000246
+1988   2  24  47215   0.066498   0.428691   0.2800026   0.0016779  -0.000144  -0.000303   0.000473   0.000607  0.0000147  0.0000164    0.000354    0.000263
+1988   2  25  47216   0.066813   0.428721   0.2784396   0.0014655   0.000224  -0.000378   0.000767   0.000867  0.0000217  0.0000178    0.000362    0.000277
+1988   2  26  47217   0.067182   0.430468   0.2770387   0.0013563   0.000433  -0.000320   0.002100   0.001348  0.0000209  0.0000165    0.000338    0.000241
+1988   2  27  47218   0.068142   0.430822   0.2756942   0.0013535   0.000433  -0.000157   0.000561   0.000540  0.0000112  0.0000160    0.000228    0.000136
+1988   2  28  47219   0.069676   0.430176   0.2743019   0.0014483   0.000295   0.000021   0.000421   0.000417  0.0000112  0.0000112    0.000228    0.000136
+1988   2  29  47220   0.071522   0.430256   0.2727734   0.0016190   0.000137   0.000120   0.000621   0.000595  0.0000112  0.0000112    0.000228    0.000136
+1988   3   1  47221   0.073589   0.430875   0.2710484   0.0018310   0.000018   0.000113   0.001530   0.001182  0.0000112  0.0000118    0.000228    0.000136
+1988   3   2  47222   0.075953   0.431392   0.2691066   0.0020407  -0.000083   0.000041   0.003480   0.002988  0.0000124  0.0000119    0.000248    0.000227
+1988   3   3  47223   0.078564   0.431895   0.2669735   0.0022065  -0.000223  -0.000024   0.001033   0.001048  0.0000125  0.0000125    0.000250    0.000244
+1988   3   4  47224   0.081037   0.432535   0.2647104   0.0023023  -0.000451  -0.000016   0.000505   0.000512  0.0000125  0.0000125    0.000250    0.000244
+1988   3   5  47225   0.082869   0.433144   0.2623930   0.0023238  -0.000758   0.000083   0.000620   0.000629  0.0000125  0.0000125    0.000250    0.000244
+1988   3   6  47226   0.084056   0.433509   0.2600904   0.0022804  -0.001046   0.000221   0.002048   0.002096  0.0000125  0.0000111    0.000250    0.000244
+1988   3   7  47227   0.085215   0.433525   0.2578588   0.0021808  -0.001168   0.000308   0.002278   0.001916  0.0000097  0.0000111    0.000238    0.000122
+1988   3   8  47228   0.087162   0.433191   0.2557495   0.0020249  -0.001002   0.000282   0.000396   0.000338  0.0000096  0.0000099    0.000235    0.000120
+1988   3   9  47229   0.090170   0.432515   0.2538199   0.0018099  -0.000531   0.000165   0.000414   0.000351  0.0000101  0.0000114    0.000226    0.000127
+1988   3  10  47230   0.093598   0.431536   0.2521279   0.0015494   0.000110   0.000069   0.000586   0.000487  0.0000132  0.0000144    0.000199    0.000167
+1988   3  11  47231   0.096112   0.430333   0.2507044   0.0012882   0.000663   0.000199   0.001172   0.000933  0.0000186  0.0000173    0.000186    0.000238
+1988   3  12  47232   0.098619   0.429569   0.2495193   0.0010979   0.000903   0.000474   0.001604   0.001517  0.0000213  0.0000269    0.000191    0.000263
+1988   3  13  47233   0.102035   0.429306   0.2484642   0.0010507   0.000765   0.000571   0.000885   0.001782  0.0000351  0.0000263    0.000450    0.000249
+1988   3  14  47234   0.105188   0.428536   0.2473706   0.0011852   0.000345   0.000264   0.000704   0.001372  0.0000314  0.0000297    0.000401    0.000248
+1988   3  15  47235   0.107222   0.426720   0.2460589   0.0014815  -0.000154  -0.000328   0.000586   0.000887  0.0000244  0.0000263    0.000307    0.000244
+1988   3  16  47236   0.109461   0.424951   0.2444005   0.0018422  -0.000518  -0.000585   0.000525   0.000728  0.0000212  0.0000181    0.000269    0.000240
+1988   3  17  47237   0.112382   0.424516   0.2424023   0.0021253  -0.000656  -0.000320   0.000332   0.000346  0.0000119  0.0000164    0.000201    0.000178
+1988   3  18  47238   0.114824   0.425291   0.2402062   0.0022315  -0.000615   0.000051   0.000327   0.000339  0.0000116  0.0000133    0.000198    0.000170
+1988   3  19  47239   0.116179   0.425561   0.2380049   0.0021552  -0.000489   0.000052   0.000402   0.000442  0.0000147  0.0000182    0.000226    0.000177
+1988   3  20  47240   0.117948   0.423169   0.2359488   0.0019527  -0.000310  -0.000376   0.000683   0.000771  0.0000248  0.0000339    0.000288    0.000256
+1988   3  21  47241   0.120114   0.420241   0.2341251   0.0016922  -0.000107  -0.000787   0.001915   0.001820  0.0000532  0.0000265    0.000343    0.000512
+1988   3  22  47242   0.121630   0.418583   0.2325608   0.0014350   0.000076  -0.000846   0.003085   0.003154  0.0000283  0.0000317    0.000321    0.000384
+1988   3  23  47243   0.122372   0.417864   0.2312303   0.0012290   0.000207  -0.000530   0.000400   0.000483  0.0000102  0.0000192    0.000204    0.000147
+1988   3  24  47244   0.123100   0.416983   0.2300686   0.0011044   0.000265  -0.000014   0.000357   0.000430  0.0000102  0.0000102    0.000204    0.000147
+1988   3  25  47245   0.124576   0.415203   0.2289867   0.0010756   0.000242   0.000457   0.000408   0.000490  0.0000102  0.0000102    0.000204    0.000147
+1988   3  26  47246   0.126670   0.413060   0.2278862   0.0011426   0.000156   0.000737   0.001629   0.001833  0.0000102  0.0000108    0.000204    0.000147
+1988   3  27  47247   0.128667   0.411554   0.2266761   0.0012897   0.000036   0.000798   0.003789   0.003277  0.0000115  0.0000109    0.000352    0.000171
+1988   3  28  47248   0.130110   0.410775   0.2252887   0.0014897  -0.000082   0.000677   0.000513   0.000519  0.0000116  0.0000115    0.000386    0.000174
+1988   3  29  47249   0.131032   0.409989   0.2236877   0.0017116  -0.000173   0.000430   0.000522   0.000528  0.0000116  0.0000116    0.000386    0.000174
+1988   3  30  47250   0.131682   0.408711   0.2218672   0.0019261  -0.000222   0.000124   0.000704   0.000709  0.0000116  0.0000116    0.000386    0.000174
+1988   3  31  47251   0.132214   0.407406   0.2198479   0.0021065  -0.000236  -0.000159   0.001438   0.001423  0.0000117  0.0000127    0.000372    0.000176
+1988   4   1  47252   0.132681   0.406453   0.2176753   0.0022279  -0.000233  -0.000315   0.001193   0.001256  0.0000139  0.0000128    0.000219    0.000297
+1988   4   2  47253   0.133004   0.405710   0.2154191   0.0022688  -0.000232  -0.000244   0.000477   0.000511  0.0000139  0.0000139    0.000218    0.000299
+1988   4   3  47254   0.133007   0.404730   0.2131666   0.0022201  -0.000250   0.000096   0.000386   0.000413  0.0000139  0.0000139    0.000218    0.000299
+1988   4   4  47255   0.132668   0.403211   0.2110046   0.0020931  -0.000289   0.000635   0.000639   0.000684  0.0000139  0.0000139    0.000218    0.000299
+1988   4   5  47256   0.132236   0.401257   0.2089971   0.0019197  -0.000346   0.001180   0.005474   0.004472  0.0000139  0.0000138    0.000219    0.000298
+1988   4   6  47257   0.132089   0.399243   0.2071678   0.0017441  -0.000408   0.001483   0.004962   0.003507  0.0000137  0.0000138    0.000256    0.000256
+1988   4   7  47258   0.132515   0.397511   0.2054952   0.0016095  -0.000458   0.001346   0.000789   0.000605  0.0000137  0.0000137    0.000256    0.000256
+1988   4   8  47259   0.133577   0.396157   0.2039202   0.0015471  -0.000474   0.000750   0.000716   0.000553  0.0000137  0.0000138    0.000255    0.000256
+1988   4   9  47260   0.135069   0.395011   0.2023622   0.0015742  -0.000432  -0.000089   0.000721   0.000541  0.0000138  0.0000139    0.000241    0.000246
+1988   4  10  47261   0.136585   0.393756   0.2007303   0.0017015  -0.000307  -0.000766   0.000823   0.000581  0.0000140  0.0000139    0.000214    0.000225
+1988   4  11  47262   0.137741   0.392189   0.1989252   0.0019320  -0.000130  -0.000959   0.001143   0.000815  0.0000140  0.0000127    0.000213    0.000225
+1988   4  12  47263   0.138501   0.390367   0.1968507   0.0022375  -0.000033  -0.000713   0.000674   0.000716  0.0000114  0.0000122    0.000261    0.000326
+1988   4  13  47264   0.139061   0.388482   0.1944618   0.0025388  -0.000117  -0.000348   0.000368   0.000391  0.0000103  0.0000101    0.000202    0.000277
+1988   4  14  47265   0.139791   0.386567   0.1918125   0.0027286  -0.000311  -0.000167   0.000290   0.000290  0.0000088  0.0000099    0.000127    0.000174
+1988   4  15  47266   0.141024   0.384376   0.1890622   0.0027313  -0.000282  -0.000197   0.000304   0.000297  0.0000095  0.0000201    0.000124    0.000170
+1988   4  16  47267   0.142640   0.382092   0.1864079   0.0025440   0.000024  -0.000265   0.001159   0.001137  0.0000313  0.0000174    0.000411    0.000522
+1988   4  17  47268   0.144387   0.380317   0.1840143   0.0022227   0.000289  -0.000210   0.001372   0.001459  0.0000254  0.0000235    0.000461    0.000460
+1988   4  18  47269   0.146560   0.379319   0.1819748   0.0018516   0.000182  -0.000064   0.000627   0.000659  0.0000156  0.0000231    0.000276    0.000275
+1988   4  19  47270   0.149167   0.378897   0.1802968   0.0015122  -0.000353   0.000028   0.000665   0.000658  0.0000208  0.0000197    0.000295    0.000271
+1988   4  20  47271   0.150842   0.378100   0.1789193   0.0012661  -0.000901  -0.000022   0.000775   0.000854  0.0000238  0.0000187    0.000332    0.000220
+1988   4  21  47272   0.152085   0.376327   0.1777284   0.0011401  -0.001041  -0.000127   0.000511   0.000696  0.0000166  0.0000196    0.000370    0.000168
+1988   4  22  47273   0.154159   0.374651   0.1766059   0.0011139  -0.000696  -0.000153   0.000518   0.000608  0.0000154  0.0000152    0.000302    0.000185
+1988   4  23  47274   0.154539   0.374654   0.1754739   0.0011700  -0.000190  -0.000160   0.000542   0.000484  0.0000138  0.0000143    0.000227    0.000220
+1988   4  24  47275   0.154726   0.375044   0.1742467   0.0012960   0.000051  -0.000214   0.000528   0.000443  0.0000132  0.0000139    0.000205    0.000243
+1988   4  25  47276   0.156443   0.373724   0.1728712   0.0014515  -0.000080  -0.000263   0.001633   0.001184  0.0000139  0.0000384    0.000214    0.000262
+1988   4  26  47277   0.158912   0.370397   0.1713425   0.0016019  -0.000351  -0.000197   0.003460   0.002141  0.0000636  0.0000270    0.001009    0.001344
+1988   4  27  47278   0.160568   0.367126   0.1696758   0.0017393  -0.000433   0.000030   0.001120   0.001639  0.0000401  0.0000439    0.000557    0.000702
+1988   4  28  47279   0.160855   0.366561   0.1678809   0.0018702  -0.000184   0.000311   0.000672   0.001116  0.0000242  0.0000321    0.000322    0.000399
+1988   4  29  47280   0.160482   0.367222   0.1659588   0.0019729   0.000119   0.000364   0.000884   0.001483  0.0000241  0.0000614    0.000318    0.000394
+1988   4  30  47281   0.160316   0.366687   0.1639623   0.0019897   0.000233   0.000137   0.002863   0.004622  0.0000987  0.0000539    0.001150    0.001355
+1988   5   1  47282   0.161385   0.364448   0.1620065   0.0018832   0.000116  -0.000144   0.002417   0.002698  0.0000837  0.0000628    0.001006    0.000633
+1988   5   2  47283   0.164153   0.362189   0.1602173   0.0016737  -0.000188  -0.000211   0.000738   0.000830  0.0000270  0.0000499    0.000397    0.000280
+1988   5   3  47284   0.167800   0.361069   0.1586682   0.0014314  -0.000591   0.000042   0.000427   0.000483  0.0000160  0.0000241    0.000276    0.000244
+1988   5   4  47285   0.169862   0.360356   0.1573463   0.0012381  -0.000994   0.000436   0.000585   0.000661  0.0000213  0.0000439    0.000382    0.000372
+1988   5   5  47286   0.169947   0.359481   0.1561659   0.0011518  -0.001218   0.000736   0.001691   0.001816  0.0000718  0.0000839    0.001165    0.001043
+1988   5   6  47287   0.169619   0.358027   0.1550043   0.0011936  -0.001138   0.000803   0.003437   0.003729  0.0001465  0.0000478    0.001672    0.001375
+1988   5   7  47288   0.169650   0.356091   0.1537379   0.0013498  -0.000757   0.000659   0.000869   0.000939  0.0000237  0.0000794    0.000381    0.000401
+1988   5   8  47289   0.170026   0.353941   0.1522725   0.0015838  -0.000284   0.000400   0.000464   0.000498  0.0000124  0.0000179    0.000201    0.000214
+1988   5   9  47290   0.170439   0.351809   0.1505553   0.0018511   0.000001   0.000117   0.000456   0.000490  0.0000121  0.0000122    0.000197    0.000209
+1988   5  10  47291   0.170892   0.349939   0.1485773   0.0021026  -0.000017  -0.000112   0.001106   0.001183  0.0000121  0.0000107    0.000197    0.000209
+1988   5  11  47292   0.171726   0.348479   0.1463793   0.0022829  -0.000252  -0.000249   0.003828   0.003807  0.0000093  0.0000106    0.000164    0.000181
+1988   5  12  47293   0.173095   0.347232   0.1440573   0.0023411  -0.000498  -0.000278   0.000643   0.000676  0.0000091  0.0000092    0.000162    0.000179
+1988   5  13  47294   0.174539   0.345566   0.1417484   0.0022538  -0.000556  -0.000197   0.000343   0.000361  0.0000091  0.0000091    0.000162    0.000179
+1988   5  14  47295   0.175418   0.343056   0.1395925   0.0020427  -0.000363  -0.000028   0.000336   0.000354  0.0000091  0.0000094    0.000162    0.000179
+1988   5  15  47296   0.175709   0.340304   0.1376856   0.0017681  -0.000049   0.000158   0.000351   0.000367  0.0000096  0.0000115    0.000169    0.000179
+1988   5  16  47297   0.175925   0.338529   0.1360537   0.0014997   0.000165   0.000284   0.000507   0.000495  0.0000139  0.0000117    0.000237    0.000177
+1988   5  17  47298   0.176419   0.338235   0.1346625   0.0012846   0.000135   0.000312   0.000519   0.000505  0.0000138  0.0000140    0.000239    0.000186
+1988   5  18  47299   0.176839   0.338221   0.1334496   0.0011382  -0.000083   0.000283   0.000585   0.000566  0.0000140  0.0000159    0.000257    0.000237
+1988   5  19  47300   0.176165   0.336044   0.1323504   0.0010556  -0.000174   0.000343   0.000812   0.000813  0.0000181  0.0000173    0.000346    0.000323
+1988   5  20  47301   0.175393   0.333685   0.1313089   0.0010423  -0.000229   0.000463   0.001088   0.001075  0.0000206  0.0000156    0.000399    0.000316
+1988   5  21  47302   0.174899   0.331744   0.1302451   0.0011135  -0.000272   0.000434   0.000642   0.000521  0.0000131  0.0000178    0.000230    0.000211
+1988   5  22  47303   0.176234   0.329591   0.1290704   0.0012524  -0.000179   0.000128   0.000711   0.000492  0.0000150  0.0000165    0.000217    0.000229
+1988   5  23  47304   0.176855   0.327684   0.1277378   0.0014167  -0.000051  -0.000139   0.001215   0.000654  0.0000199  0.0000270    0.000227    0.000276
+1988   5  24  47305   0.176221   0.325666   0.1262433   0.0015709  -0.000007  -0.000133   0.001318   0.000535  0.0000390  0.0000310    0.000364    0.000490
+1988   5  25  47306   0.176110   0.323813   0.1246100   0.0016898  -0.000022   0.000022   0.001249   0.000525  0.0000421  0.0000322    0.000387    0.000525
+1988   5  26  47307   0.176360   0.322333   0.1228835   0.0017545  -0.000047   0.000170   0.001621   0.001654  0.0000255  0.0000259    0.000343    0.000504
+1988   5  27  47308   0.175890   0.320633   0.1211241   0.0017536  -0.000040   0.000195   0.000786   0.000976  0.0000097  0.0000176    0.000197    0.000381
+1988   5  28  47309   0.174557   0.318627   0.1194007   0.0016818   0.000018   0.000042   0.000482   0.000564  0.0000097  0.0000097    0.000197    0.000380
+1988   5  29  47310   0.172947   0.316671   0.1177825   0.0015437   0.000118  -0.000267   0.000476   0.000556  0.0000097  0.0000097    0.000197    0.000380
+1988   5  30  47311   0.171508   0.314946   0.1163274   0.0013569   0.000227  -0.000641   0.000521   0.000608  0.0000097  0.0000104    0.000197    0.000380
+1988   5  31  47312   0.170318   0.313284   0.1150680   0.0011543   0.000302  -0.000943   0.002275   0.002009  0.0000111  0.0000105    0.000142    0.000187
+1988   6   1  47313   0.169299   0.311416   0.1139985   0.0009823   0.000300  -0.001033   0.000930   0.000804  0.0000113  0.0000112    0.000139    0.000181
+1988   6   2  47314   0.168451   0.309268   0.1130658   0.0008910   0.000204  -0.000846   0.000513   0.000442  0.0000113  0.0000113    0.000139    0.000181
+1988   6   3  47315   0.167969   0.307138   0.1121716   0.0009175   0.000039  -0.000451   0.000627   0.000538  0.0000113  0.0000150    0.000140    0.000182
+1988   6   4  47316   0.167389   0.305160   0.1111932   0.0010644  -0.000124  -0.000057   0.001153   0.000936  0.0000188  0.0000176    0.000223    0.000274
+1988   6   5  47317   0.166495   0.303407   0.1100250   0.0012891  -0.000209   0.000098   0.000844   0.000671  0.0000239  0.0000190    0.000274    0.000322
+1988   6   6  47318   0.165733   0.301895   0.1086222   0.0015172  -0.000178  -0.000092   0.000557   0.000495  0.0000192  0.0000189    0.000246    0.000295
+1988   6   7  47319   0.165401   0.300376   0.1070202   0.0016748  -0.000057  -0.000512   0.000361   0.000343  0.0000139  0.0000164    0.000200    0.000249
+1988   6   8  47320   0.165414   0.298607   0.1053161   0.0017166   0.000088  -0.000913   0.000361   0.000344  0.0000137  0.0000138    0.000199    0.000246
+1988   6   9  47321   0.165436   0.296631   0.1036333   0.0016311   0.000190  -0.001095   0.001095   0.001039  0.0000137  0.0000122    0.000198    0.000246
+1988   6  10  47322   0.165154   0.294664   0.1020928   0.0014319   0.000213  -0.000995   0.003832   0.003591  0.0000107  0.0000121    0.000136    0.000245
+1988   6  11  47323   0.164621   0.292812   0.1007929   0.0011538   0.000157  -0.000670   0.000580   0.000583  0.0000106  0.0000107    0.000134    0.000245
+1988   6  12  47324   0.164305   0.290975   0.0997884   0.0008518   0.000042  -0.000237   0.000374   0.000377  0.0000106  0.0000106    0.000134    0.000245
+1988   6  13  47325   0.164499   0.289008   0.0990728   0.0005918  -0.000094   0.000175   0.000515   0.000530  0.0000106  0.0000106    0.000134    0.000245
+1988   6  14  47326   0.164789   0.286887   0.0985743   0.0004290  -0.000172   0.000462   0.001197   0.001561  0.0000106  0.0000125    0.000134    0.000245
+1988   6  15  47327   0.164932   0.284797   0.0981790   0.0003849  -0.000110   0.000554   0.002350   0.001891  0.0000144  0.0000127    0.000228    0.000246
+1988   6  16  47328   0.165291   0.282989   0.0977720   0.0004389   0.000120   0.000447   0.001243   0.001119  0.0000148  0.0000143    0.000247    0.000243
+1988   6  17  47329   0.165799   0.281543   0.0972772   0.0005410   0.000446   0.000215   0.000653   0.000652  0.0000143  0.0000130    0.000247    0.000220
+1988   6  18  47330   0.165578   0.280230   0.0966763   0.0006378   0.000668  -0.000002   0.000563   0.000440  0.0000113  0.0000104    0.000232    0.000165
+1988   6  19  47331   0.163940   0.277585   0.0959978   0.0007172   0.000347   0.000049   0.000284   0.000215  0.0000064  0.0000084    0.000158    0.000126
+1988   6  20  47332   0.163015   0.274328   0.0952473   0.0007993  -0.000032   0.000075   0.000237   0.000182  0.0000056  0.0000103    0.000142    0.000123
+1988   6  21  47333   0.163856   0.271843   0.0944124   0.0008793   0.000003  -0.000154   0.000599   0.000469  0.0000141  0.0000111    0.000306    0.000302
+1988   6  22  47334   0.164406   0.269717   0.0935073   0.0009262   0.000016  -0.000307   0.000715   0.000628  0.0000166  0.0000158    0.000312    0.000313
+1988   6  23  47335   0.164418   0.267859   0.0925811   0.0009069  -0.000404  -0.000092   0.000606   0.000570  0.0000174  0.0000197    0.000278    0.000234
+1988   6  24  47336   0.165291   0.265526   0.0917147   0.0008087  -0.000860   0.000172   0.000836   0.000807  0.0000229  0.0000191    0.000282    0.000216
+1988   6  25  47337   0.166895   0.263470   0.0909831   0.0006466  -0.000892   0.000175   0.001793   0.001454  0.0000208  0.0000170    0.000265    0.000206
+1988   6  26  47338   0.168219   0.262305   0.0904361   0.0004440  -0.000439  -0.000055   0.000667   0.000476  0.0000111  0.0000159    0.000191    0.000179
+1988   6  27  47339   0.168824   0.260953   0.0900999   0.0002274   0.000293  -0.000305   0.000600   0.000434  0.0000111  0.0000111    0.000191    0.000179
+1988   6  28  47340   0.168894   0.258629   0.0899697   0.0000376   0.000980  -0.000350   0.000890   0.000657  0.0000111  0.0000111    0.000191    0.000179
+1988   6  29  47341   0.168892   0.256269   0.0899936  -0.0000702   0.001384  -0.000168   0.002232   0.001720  0.0000111  0.0000120    0.000191    0.000179
+1988   6  30  47342   0.169033   0.254649   0.0900646  -0.0000470   0.001415   0.000081   0.003383   0.002628  0.0000130  0.0000121    0.000192    0.000220
+1988   7   1  47343   0.169117   0.253247   0.0900414   0.0001191   0.001114   0.000178   0.001342   0.001018  0.0000132  0.0000131    0.000192    0.000222
+1988   7   2  47344   0.168817   0.251171   0.0897970   0.0003881   0.000619   0.000012   0.000669   0.000502  0.0000133  0.0000146    0.000193    0.000223
+1988   7   3  47345   0.168065   0.248378   0.0892648   0.0006853   0.000119  -0.000322   0.000499   0.000456  0.0000159  0.0000373    0.000223    0.000257
+1988   7   4  47346   0.167096   0.246704   0.0884560   0.0009289  -0.000180  -0.000515   0.000438   0.000547  0.0000614  0.0000522    0.000541    0.000491
+1988   7   5  47347   0.166205   0.246851   0.0874559   0.0010525  -0.000205  -0.000328   0.000696   0.000752  0.0000885  0.0000464    0.000822    0.000610
+1988   7   6  47348   0.165403   0.245268   0.0864033   0.0010227  -0.000188   0.000069   0.001217   0.000825  0.0000315  0.0000521    0.000549    0.000502
+1988   7   7  47349   0.166770   0.241717   0.0854522   0.0008499  -0.000271   0.000378   0.000679   0.000534  0.0000156  0.0000228    0.000341    0.000279
+1988   7   8  47350   0.168288   0.239077   0.0847267   0.0005699  -0.000298   0.000265   0.000511   0.000437  0.0000141  0.0000155    0.000269    0.000223
+1988   7   9  47351   0.168067   0.237225   0.0843154   0.0002636  -0.000296   0.000034   0.000605   0.000532  0.0000154  0.0000212    0.000255    0.000217
+1988   7  10  47352   0.166209   0.235192   0.0841850   0.0000483  -0.000314  -0.000004   0.001168   0.000993  0.0000282  0.0000251    0.000430    0.000330
+1988   7  11  47353   0.165265   0.233244   0.0841916  -0.0000427  -0.000263   0.000014   0.000993   0.000982  0.0000348  0.0000304    0.000422    0.000361
+1988   7  12  47354   0.166396   0.231332   0.0842369  -0.0000746  -0.000122  -0.000049   0.000752   0.001193  0.0000326  0.0000373    0.000311    0.000341
+1988   7  13  47355   0.164762   0.229239   0.0843076  -0.0000565   0.000043  -0.000140   0.001047   0.001035  0.0000398  0.0000344    0.000425    0.000460
+1988   7  14  47356   0.162176   0.226944   0.0843228   0.0000654   0.000208  -0.000242   0.001521   0.000835  0.0000363  0.0000358    0.000557    0.000649
+1988   7  15  47357   0.162556   0.224978   0.0841594   0.0002811   0.000320  -0.000201   0.002019   0.001050  0.0000318  0.0000235    0.000519    0.000654
+1988   7  16  47358   0.164328   0.223376   0.0837541   0.0005188   0.000313  -0.000002   0.001203   0.000650  0.0000108  0.0000206    0.000138    0.000133
+1988   7  17  47359   0.164304   0.221808   0.0831258   0.0007088   0.000149   0.000191   0.000392   0.000213  0.0000094  0.0000101    0.000120    0.000115
+1988   7  18  47360   0.162920   0.220150   0.0823490   0.0008165  -0.000156   0.000206   0.000379   0.000207  0.0000094  0.0000094    0.000120    0.000115
+1988   7  19  47361   0.162180   0.218385   0.0815114   0.0008429  -0.000510   0.000034   0.000942   0.000519  0.0000094  0.0000189    0.000121    0.000116
+1988   7  20  47362   0.162661   0.216407   0.0806848   0.0008079  -0.000766  -0.000151   0.002288   0.001545  0.0000285  0.0000173    0.000418    0.000297
+1988   7  21  47363   0.162573   0.213999   0.0799166   0.0007378  -0.000797  -0.000165   0.000882   0.000881  0.0000251  0.0000237    0.000407    0.000339
+1988   7  22  47364   0.160369   0.211346   0.0792271   0.0006608  -0.000565   0.000035   0.000635   0.000904  0.0000189  0.0000229    0.000315    0.000404
+1988   7  23  47365   0.158354   0.209629   0.0786083   0.0005780  -0.000138   0.000126   0.000681   0.000800  0.0000207  0.0000215    0.000317    0.000518
+1988   7  24  47366   0.157398   0.208105   0.0780773   0.0004613   0.000186   0.000063   0.000581   0.000442  0.0000241  0.0000195    0.000229    0.000208
+1988   7  25  47367   0.156346   0.206196   0.0776803   0.0003078   0.000105   0.000213   0.000476   0.000382  0.0000182  0.0000211    0.000160    0.000134
+1988   7  26  47368   0.154980   0.204438   0.0774400   0.0001665  -0.000277   0.000632   0.000536   0.000547  0.0000182  0.0000187    0.000204    0.000179
+1988   7  27  47369   0.153757   0.201469   0.0773083   0.0001380  -0.000318   0.000671   0.000569   0.000592  0.0000192  0.0000210    0.000274    0.000237
+1988   7  28  47370   0.151801   0.199398   0.0771154   0.0002991  -0.000035   0.000377   0.000897   0.000722  0.0000238  0.0000259    0.000287    0.000287
+1988   7  29  47371   0.149482   0.197575   0.0766682   0.0006139   0.000234  -0.000009   0.001493   0.000837  0.0000326  0.0000232    0.000285    0.000330
+1988   7  30  47372   0.148353   0.195702   0.0758706   0.0009570   0.000351  -0.000214   0.000955   0.000625  0.0000226  0.0000219    0.000277    0.000293
+1988   7  31  47373   0.148765   0.193792   0.0747720   0.0011963   0.000294  -0.000020   0.000482   0.000303  0.0000112  0.0000154    0.000197    0.000177
+1988   8   1  47374   0.148563   0.191759   0.0735265   0.0012756   0.000151   0.000364   0.000335   0.000200  0.0000082  0.0000094    0.000152    0.000157
+1988   8   2  47375   0.148122   0.189928   0.0722831   0.0012092   0.000088   0.000568   0.000359   0.000210  0.0000075  0.0000121    0.000139    0.000161
+1988   8   3  47376   0.147013   0.188328   0.0711632   0.0010299   0.000165   0.000500   0.001033   0.000667  0.0000159  0.0000246    0.000264    0.000353
+1988   8   4  47377   0.144147   0.186569   0.0702561   0.0007863   0.000302   0.000338   0.001749   0.001180  0.0000416  0.0000192    0.000496    0.001397
+1988   8   5  47378   0.141819   0.184389   0.0695969   0.0005351   0.000379   0.000272   0.001089   0.000814  0.0000225  0.0000265    0.000395    0.000438
+1988   8   6  47379   0.140751   0.182129   0.0691706   0.0003171   0.000349   0.000259   0.000521   0.000457  0.0000115  0.0000151    0.000229    0.000185
+1988   8   7  47380   0.140087   0.180152   0.0689344   0.0001495   0.000257   0.000155   0.000279   0.000251  0.0000077  0.0000091    0.000168    0.000110
+1988   8   8  47381   0.138955   0.178602   0.0688383   0.0000428   0.000198   0.000012   0.000249   0.000224  0.0000067  0.0000072    0.000152    0.000093
+1988   8   9  47382   0.136893   0.177087   0.0688158   0.0000172   0.000236  -0.000047   0.000575   0.000526  0.0000067  0.0000092    0.000151    0.000093
+1988   8  10  47383   0.134271   0.175039   0.0687755   0.0000875   0.000353  -0.000001   0.000691   0.000656  0.0000117  0.0000093    0.000180    0.000219
+1988   8  11  47384   0.132583   0.172867   0.0686202   0.0002432   0.000482   0.000097   0.000467   0.000437  0.0000119  0.0000118    0.000181    0.000226
+1988   8  12  47385   0.132640   0.171332   0.0682788   0.0004464   0.000549   0.000162   0.000617   0.000572  0.0000119  0.0000119    0.000181    0.000226
+1988   8  13  47386   0.132787   0.170202   0.0677281   0.0006501   0.000519   0.000154   0.000946   0.000857  0.0000119  0.0000116    0.000181    0.000226
+1988   8  14  47387   0.131784   0.169102   0.0669894   0.0008179   0.000402   0.000093   0.001532   0.001513  0.0000112  0.0000115    0.000279    0.000151
+1988   8  15  47388   0.129668   0.167859   0.0661108   0.0009291   0.000240   0.000030   0.000786   0.000796  0.0000111  0.0000112    0.000294    0.000148
+1988   8  16  47389   0.127174   0.166576   0.0651539   0.0009727   0.000086   0.000009   0.000477   0.000483  0.0000111  0.0000111    0.000294    0.000148
+1988   8  17  47390   0.124783   0.165557   0.0641885   0.0009431  -0.000017   0.000041   0.000450   0.000456  0.0000111  0.0000111    0.000294    0.000148
+1988   8  18  47391   0.122645   0.164706   0.0632874   0.0008425  -0.000049   0.000106   0.001556   0.001537  0.0000111  0.0000105    0.000294    0.000148
+1988   8  19  47392   0.120745   0.163607   0.0625173   0.0006851  -0.000015   0.000172   0.002641   0.002220  0.0000099  0.0000105    0.000203    0.000191
+1988   8  20  47393   0.118861   0.162141   0.0619233   0.0004983   0.000060   0.000210   0.000473   0.000374  0.0000099  0.0000099    0.000199    0.000196
+1988   8  21  47394   0.116757   0.160514   0.0615173   0.0003183   0.000136   0.000211   0.000435   0.000344  0.0000099  0.0000099    0.000199    0.000196
+1988   8  22  47395   0.114431   0.158992   0.0612709   0.0001870   0.000177   0.000179   0.000437   0.000346  0.0000099  0.0000099    0.000199    0.000196
+1988   8  23  47396   0.112249   0.157655   0.0611129   0.0001495   0.000165   0.000136   0.000992   0.000794  0.0000099  0.0000100    0.000199    0.000196
+1988   8  24  47397   0.110492   0.156410   0.0609289   0.0002449   0.000111   0.000110   0.002790   0.002671  0.0000102  0.0000100    0.000212    0.000175
+1988   8  25  47398   0.108779   0.155146   0.0605772   0.0004844   0.000047   0.000130   0.000727   0.000822  0.0000102  0.0000102    0.000214    0.000173
+1988   8  26  47399   0.106005   0.153908   0.0599279   0.0008265   0.000008   0.000214   0.000464   0.000536  0.0000102  0.0000102    0.000214    0.000173
+1988   8  27  47400   0.102061   0.152872   0.0589216   0.0011747   0.000012   0.000368   0.000586   0.000701  0.0000102  0.0000107    0.000214    0.000173
+1988   8  28  47401   0.099164   0.152104   0.0576124   0.0014117   0.000045   0.000565   0.000820   0.001078  0.0000111  0.0000246    0.000232    0.000190
+1988   8  29  47402   0.097750   0.151246   0.0561595   0.0014583   0.000076   0.000735   0.000911   0.001080  0.0000389  0.0000174    0.000578    0.001008
+1988   8  30  47403   0.096583   0.149969   0.0547634   0.0013139   0.000095   0.000779   0.000698   0.000792  0.0000237  0.0000263    0.000403    0.000434
+1988   8  31  47404   0.094511   0.148458   0.0535827   0.0010521   0.000124   0.000608   0.000486   0.000529  0.0000138  0.0000185    0.000248    0.000233
+1988   9   1  47405   0.092096   0.147649   0.0526802   0.0007634   0.000241   0.000156   0.000618   0.000601  0.0000132  0.0000142    0.000232    0.000238
+1988   9   2  47406   0.089035   0.146150   0.0520468   0.0005177   0.000317  -0.000251   0.001137   0.000912  0.0000145  0.0000140    0.000246    0.000287
+1988   9   3  47407   0.086188   0.144371   0.0516153   0.0003632   0.000243  -0.000341   0.001351   0.001137  0.0000149  0.0000146    0.000255    0.000294
+1988   9   4  47408   0.084115   0.143493   0.0512833   0.0003154   0.000088  -0.000170   0.000582   0.000613  0.0000148  0.0000148    0.000331    0.000240
+1988   9   5  47409   0.082253   0.143545   0.0509488   0.0003583   0.000001   0.000027   0.000554   0.000585  0.0000148  0.0000148    0.000332    0.000239
+1988   9   6  47410   0.080037   0.143674   0.0505367   0.0004559   0.000107   0.000024   0.000561   0.000593  0.0000148  0.0000153    0.000332    0.000239
+1988   9   7  47411   0.077841   0.142825   0.0500145   0.0005690   0.000394  -0.000193   0.001436   0.001493  0.0000159  0.0000240    0.000321    0.000246
+1988   9   8  47412   0.076257   0.140730   0.0493851   0.0006735   0.000708  -0.000420   0.001823   0.002647  0.0000332  0.0000204    0.000278    0.000293
+1988   9   9  47413   0.074793   0.138478   0.0486639   0.0007692   0.000847  -0.000399   0.000811   0.001025  0.0000250  0.0000253    0.000275    0.000274
+1988   9  10  47414   0.071841   0.138043   0.0478537   0.0008713   0.000683   0.000006   0.000496   0.000525  0.0000174  0.0000235    0.000280    0.000246
+1988   9  11  47415   0.067840   0.139054   0.0469374   0.0009888   0.000187   0.000756   0.000631   0.000648  0.0000220  0.0000304    0.000358    0.000331
+1988   9  12  47416   0.065396   0.139635   0.0458984   0.0010973  -0.000206   0.001218   0.001320   0.001341  0.0000434  0.0000276    0.000482    0.000644
+1988   9  13  47417   0.064725   0.138748   0.0447677   0.0011509  -0.000228   0.001042   0.001071   0.001835  0.0000331  0.0000280    0.000432    0.000604
+1988   9  14  47418   0.063672   0.136809   0.0436197   0.0011231   0.000009   0.000438   0.000649   0.000828  0.0000126  0.0000229    0.000230    0.000250
+1988   9  15  47419   0.060765   0.135039   0.0425389   0.0010180   0.000237  -0.000149   0.000414   0.000477  0.0000126  0.0000126    0.000230    0.000250
+1988   9  16  47420   0.057672   0.134367   0.0415921   0.0008657   0.000267  -0.000366   0.000457   0.000526  0.0000126  0.0000131    0.000229    0.000249
+1988   9  17  47421   0.054970   0.134463   0.0408051   0.0007100   0.000189  -0.000267   0.000934   0.000982  0.0000137  0.0000133    0.000183    0.000190
+1988   9  18  47422   0.052009   0.134323   0.0401582   0.0005955   0.000212  -0.000166   0.000681   0.000549  0.0000140  0.0000138    0.000175    0.000182
+1988   9  19  47423   0.049186   0.133443   0.0395883   0.0005626   0.000388  -0.000288   0.000615   0.000496  0.0000138  0.0000139    0.000188    0.000204
+1988   9  20  47424   0.046302   0.132195   0.0389964   0.0006445   0.000410  -0.000449   0.000577   0.000503  0.0000138  0.0000147    0.000242    0.000353
+1988   9  21  47425   0.042932   0.131357   0.0382571   0.0008582   0.000010  -0.000347   0.000560   0.000562  0.0000156  0.0000156    0.000258    0.000352
+1988   9  22  47426   0.039524   0.131267   0.0372425   0.0011850  -0.000423  -0.000122   0.000645   0.000720  0.0000175  0.0000164    0.000266    0.000338
+1988   9  23  47427   0.036182   0.131368   0.0358689   0.0015602  -0.000503   0.000021   0.001190   0.001297  0.0000172  0.0000154    0.000269    0.000307
+1988   9  24  47428   0.032584   0.130941   0.0341348   0.0018901  -0.000227   0.000050   0.000554   0.000605  0.0000132  0.0000152    0.000278    0.000193
+1988   9  25  47429   0.029023   0.130162   0.0321341   0.0020820   0.000162   0.000039   0.000360   0.000394  0.0000132  0.0000132    0.000278    0.000192
+1988   9  26  47430   0.025952   0.129529   0.0300366   0.0020803   0.000373   0.000087   0.000503   0.000550  0.0000132  0.0000132    0.000278    0.000192
+1988   9  27  47431   0.023205   0.128946   0.0280378   0.0018907   0.000296   0.000216   0.001498   0.001599  0.0000132  0.0000122    0.000278    0.000192
+1988   9  28  47432   0.020309   0.128483   0.0262961   0.0015794   0.000032   0.000353   0.002241   0.002234  0.0000111  0.0000121    0.000211    0.000278
+1988   9  29  47433   0.017014   0.128763   0.0248863   0.0012418  -0.000203   0.000384   0.000727   0.000763  0.0000110  0.0000110    0.000208    0.000290
+1988   9  30  47434   0.013242   0.129642   0.0237901   0.0009636  -0.000211   0.000211   0.000366   0.000385  0.0000110  0.0000110    0.000208    0.000290
+1988  10   1  47435   0.009007   0.129898   0.0229203   0.0007963   0.000080  -0.000170   0.000447   0.000471  0.0000110  0.0000110    0.000208    0.000290
+1988  10   2  47436   0.004358   0.129456   0.0221564   0.0007565   0.000537  -0.000610   0.001393   0.001453  0.0000110  0.0000109    0.000208    0.000290
+1988  10   3  47437  -0.000152   0.129031   0.0213727   0.0008376   0.000894  -0.000856   0.001765   0.002088  0.0000108  0.0000109    0.000198    0.000180
+1988  10   4  47438  -0.003424   0.128849   0.0204559   0.0010167   0.000917  -0.000702   0.000357   0.000452  0.0000108  0.0000109    0.000197    0.000176
+1988  10   5  47439  -0.004934   0.128784   0.0193232   0.0012525   0.000559  -0.000151   0.000358   0.000454  0.0000110  0.0000126    0.000200    0.000179
+1988  10   6  47440  -0.005556   0.128799   0.0179440   0.0014876   0.000038   0.000521   0.000474   0.000625  0.0000144  0.0000223    0.000255    0.000235
+1988  10   7  47441  -0.007731   0.129376   0.0163506   0.0016690  -0.000162   0.000768   0.001041   0.001564  0.0000337  0.0000302    0.000471    0.000563
+1988  10   8  47442  -0.010875   0.130195   0.0146180   0.0017733   0.000122   0.000372   0.001137   0.001451  0.0000460  0.0000326    0.000596    0.000702
+1988  10   9  47443  -0.012972   0.130887   0.0128238   0.0018123   0.000306  -0.000130   0.000862   0.001050  0.0000315  0.0000319    0.000471    0.000436
+1988  10  10  47444  -0.017417   0.132841   0.0110176   0.0018115  -0.000008  -0.000262   0.000612   0.000572  0.0000178  0.0000238    0.000285    0.000242
+1988  10  11  47445  -0.021402   0.134036   0.0092256   0.0017777  -0.000439  -0.000176   0.000834   0.000757  0.0000161  0.0000177    0.000259    0.000219
+1988  10  12  47446  -0.024752   0.134675   0.0074831   0.0016975  -0.000717  -0.000065   0.001856   0.001655  0.0000175  0.0001114    0.000282    0.000238
+1988  10  13  47447  -0.028490   0.135506   0.0058436   0.0015626  -0.000818  -0.000026   0.001663   0.001222  0.0002067  0.0001058    0.002967    0.003654
+1988  10  14  47448  -0.032493   0.136174   0.0043596   0.0013881  -0.000829  -0.000086   0.001534   0.001175  0.0001941  0.0001711    0.002671    0.003701
+1988  10  15  47449  -0.036419   0.136412   0.0030557   0.0012127  -0.000826  -0.000230   0.001616   0.001505  0.0001354  0.0001827    0.001866    0.002348
+1988  10  16  47450  -0.040520   0.136931   0.0019096   0.0010856  -0.000710  -0.000461   0.002492   0.002404  0.0001713  0.0001201    0.002357    0.002775
+1988  10  17  47451  -0.044308   0.137337   0.0008502   0.0010514  -0.000451  -0.000705   0.004633   0.001907  0.0001048  0.0000940    0.002539    0.001780
+1988  10  18  47452  -0.047539   0.136723  -0.0002319   0.0011387  -0.000064  -0.000776   0.000938   0.001032  0.0000166  0.0000573    0.000443    0.000282
+1988  10  19  47453  -0.049976   0.136897  -0.0014628   0.0013508   0.000430  -0.000457   0.000534   0.000709  0.0000098  0.0000153    0.000264    0.000169
+1988  10  20  47454  -0.051468   0.139730  -0.0029563   0.0016576   0.000954   0.000260   0.000749   0.001075  0.0000140  0.0000218    0.000406    0.000262
+1988  10  21  47455  -0.053085   0.141234  -0.0047786   0.0019914   0.001351   0.000938   0.001743   0.003138  0.0000338  0.0000780    0.001175    0.000883
+1988  10  22  47456  -0.055418   0.141331  -0.0069120   0.0022576   0.001500   0.001191   0.005970   0.003206  0.0001420  0.0000648    0.002663    0.004122
+1988  10  23  47457  -0.058057   0.142223  -0.0092423   0.0023680   0.001375   0.000940   0.004466   0.001725  0.0000957  0.0000763    0.001917    0.002786
+1988  10  24  47458  -0.060565   0.143474  -0.0115859   0.0022795   0.001034   0.000377   0.000707   0.000715  0.0000106  0.0000529    0.000232    0.000337
+1988  10  25  47459  -0.063714   0.145066  -0.0137488   0.0020176   0.000600  -0.000190   0.000451   0.000487  0.0000100  0.0000131    0.000220    0.000320
+1988  10  26  47460  -0.067939   0.147163  -0.0155951   0.0016679   0.000226  -0.000537   0.000620   0.000631  0.0000156  0.0000318    0.000337    0.000497
+1988  10  27  47461  -0.071589   0.148494  -0.0170913   0.0013393   0.000066  -0.000635   0.001525   0.001360  0.0000535  0.0000386    0.001018    0.001623
+1988  10  28  47462  -0.074945   0.149743  -0.0183060   0.0011176   0.000156  -0.000561   0.001665   0.001365  0.0000615  0.0000302    0.000927    0.001076
+1988  10  29  47463  -0.078425   0.150985  -0.0193698   0.0010372   0.000369  -0.000387   0.000534   0.000563  0.0000068  0.0000340    0.000106    0.000120
+1988  10  30  47464  -0.081613   0.151781  -0.0204210   0.0010822   0.000517  -0.000164   0.000280   0.000315  0.0000065  0.0000085    0.000101    0.000114
+1988  10  31  47465  -0.084068   0.152679  -0.0215644   0.0012104   0.000491   0.000028   0.000403   0.000455  0.0000101  0.0000202    0.000156    0.000177
+1988  11   1  47466  -0.085743   0.154442  -0.0228605   0.0013812   0.000364   0.000036   0.001154   0.001525  0.0000339  0.0000288    0.000490    0.000583
+1988  11   2  47467  -0.087382   0.156947  -0.0243354   0.0015691   0.000313  -0.000111   0.001779   0.002599  0.0000474  0.0000268    0.000459    0.000792
+1988  11   3  47468  -0.090243   0.159116  -0.0259984   0.0017593   0.000470  -0.000222   0.000651   0.000700  0.0000196  0.0000293    0.000258    0.000320
+1988  11   4  47469  -0.094159   0.160664  -0.0278450   0.0019310   0.000740  -0.000050   0.000348   0.000380  0.0000112  0.0000171    0.000166    0.000178
+1988  11   5  47470  -0.097609   0.162251  -0.0298437   0.0020487   0.000861   0.000417   0.000414   0.000458  0.0000145  0.0000151    0.000191    0.000197
+1988  11   6  47471  -0.099944   0.163854  -0.0319203   0.0020683   0.000681   0.000383   0.000499   0.000577  0.0000190  0.0000147    0.000201    0.000186
+1988  11   7  47472  -0.101861   0.165489  -0.0339565   0.0019732   0.000370  -0.000171   0.000469   0.000592  0.0000148  0.0000163    0.000160    0.000134
+1988  11   8  47473  -0.104376   0.167557  -0.0358447   0.0018134   0.000250  -0.000433   0.000479   0.000534  0.0000137  0.0000137    0.000168    0.000144
+1988  11   9  47474  -0.107556   0.170394  -0.0375668   0.0016613   0.000325  -0.000218   0.000546   0.000456  0.0000126  0.0000121    0.000215    0.000219
+1988  11  10  47475  -0.110740   0.173400  -0.0391605   0.0015313   0.000402   0.000045   0.000517   0.000424  0.0000105  0.0000086    0.000237    0.000217
+1988  11  11  47476  -0.113484   0.174463  -0.0406362   0.0013943   0.000538  -0.000072   0.000240   0.000212  0.0000046  0.0000070    0.000150    0.000112
+1988  11  12  47477  -0.115621   0.175139  -0.0419707   0.0012592   0.000676  -0.000357   0.000200   0.000179  0.0000035  0.0000050    0.000118    0.000087
+1988  11  13  47478  -0.117487   0.177467  -0.0431884   0.0011966   0.000687  -0.000409   0.000501   0.000459  0.0000054  0.0000095    0.000161    0.000124
+1988  11  14  47479  -0.119602   0.180157  -0.0444031   0.0012708   0.000601  -0.000197   0.000633   0.000648  0.0000156  0.0000107    0.000244    0.000222
+1988  11  15  47480  -0.121243   0.182361  -0.0457651   0.0014845   0.000499   0.000103   0.000624   0.000663  0.0000160  0.0000158    0.000245    0.000224
+1988  11  16  47481  -0.122336   0.184277  -0.0473941   0.0017859   0.000446   0.000314   0.001174   0.002108  0.0000160  0.0000138    0.000245    0.000224
+1988  11  17  47482  -0.123597   0.186457  -0.0493395   0.0020986   0.000453   0.000358   0.001354   0.002667  0.0000116  0.0000137    0.000245    0.000190
+1988  11  18  47483  -0.125053   0.189159  -0.0515718   0.0023460   0.000499   0.000247   0.000847   0.000846  0.0000114  0.0000115    0.000245    0.000188
+1988  11  19  47484  -0.126328   0.192194  -0.0539920   0.0024668   0.000550   0.000062   0.000532   0.000530  0.0000114  0.0000114    0.000245    0.000188
+1988  11  20  47485  -0.127368   0.195287  -0.0564540   0.0024299   0.000580  -0.000110   0.000432   0.000431  0.0000114  0.0000114    0.000245    0.000188
+1988  11  21  47486  -0.128713   0.198389  -0.0588014   0.0022447   0.000577  -0.000217   0.001012   0.000998  0.0000114  0.0000107    0.000245    0.000188
+1988  11  22  47487  -0.130926   0.201501  -0.0609091   0.0019604   0.000538  -0.000253   0.003143   0.002875  0.0000100  0.0000107    0.000227    0.000157
+1988  11  23  47488  -0.133930   0.204380  -0.0627143   0.0016503   0.000457  -0.000255   0.000593   0.000608  0.0000099  0.0000099    0.000226    0.000155
+1988  11  24  47489  -0.136839   0.206550  -0.0642293   0.0013896   0.000334  -0.000269   0.000376   0.000387  0.0000099  0.0000099    0.000226    0.000155
+1988  11  25  47490  -0.138983   0.208126  -0.0655317   0.0012319   0.000181  -0.000328   0.000519   0.000534  0.0000099  0.0000099    0.000226    0.000155
+1988  11  26  47491  -0.140916   0.210401  -0.0667362   0.0011964   0.000029  -0.000410   0.000891   0.000916  0.0000099  0.0000099    0.000226    0.000155
+1988  11  27  47492  -0.142999   0.213824  -0.0679604   0.0012674  -0.000073  -0.000454   0.000611   0.000591  0.0000098  0.0000099    0.000163    0.000195
+1988  11  28  47493  -0.145029   0.217606  -0.0692942   0.0014076  -0.000082  -0.000391   0.000307   0.000294  0.0000098  0.0000098    0.000161    0.000197
+1988  11  29  47494  -0.146797   0.220732  -0.0707858   0.0015750   0.000019  -0.000197   0.000318   0.000304  0.0000097  0.0000096    0.000163    0.000182
+1988  11  30  47495  -0.148648   0.223098  -0.0724439   0.0017372   0.000203   0.000073   0.000393   0.000380  0.0000095  0.0000095    0.000172    0.000148
+1988  12   1  47496  -0.151395   0.225799  -0.0742515   0.0018697   0.000403   0.000302   0.000580   0.000574  0.0000093  0.0000094    0.000179    0.000134
+1988  12   2  47497  -0.154861   0.228804  -0.0761678   0.0019489   0.000567   0.000387   0.000900   0.000970  0.0000094  0.0000106    0.000182    0.000136
+1988  12   3  47498  -0.156958   0.231428  -0.0781290   0.0019549   0.000686   0.000291   0.000634   0.001040  0.0000118  0.0000106    0.000191    0.000299
+1988  12   4  47499  -0.156398   0.233511  -0.0800551   0.0018781   0.000781   0.000057   0.000423   0.000756  0.0000118  0.0000118    0.000191    0.000302
+1988  12   5  47500  -0.155321   0.235907  -0.0818641   0.0017288   0.000869  -0.000233   0.000348   0.000637  0.0000118  0.0000118    0.000191    0.000302
+1988  12   6  47501  -0.155993   0.239029  -0.0834958   0.0015379   0.000931  -0.000483   0.000851   0.001429  0.0000118  0.0000134    0.000191    0.000302
+1988  12   7  47502  -0.158044   0.242276  -0.0849304   0.0013465   0.000915  -0.000617   0.003414   0.002690  0.0000150  0.0000136    0.000291    0.000310
+1988  12   8  47503  -0.160019   0.245166  -0.0861904   0.0011903   0.000775  -0.000597   0.000863   0.000861  0.0000154  0.0000151    0.000309    0.000311
+1988  12   9  47504  -0.161292   0.248134  -0.0873269   0.0010881   0.000522  -0.000446   0.000492   0.000487  0.0000153  0.0000136    0.000305    0.000302
+1988  12  10  47505  -0.162150   0.251634  -0.0883973   0.0010418   0.000247  -0.000250   0.000368   0.000241  0.0000117  0.0000118    0.000212    0.000178
+1988  12  11  47506  -0.162932   0.255067  -0.0894509   0.0010539   0.000109  -0.000144   0.000260   0.000145  0.0000084  0.0000100    0.000142    0.000111
+1988  12  12  47507  -0.163739   0.257775  -0.0905444   0.0011428   0.000206  -0.000204   0.000320   0.000180  0.0000082  0.0000092    0.000139    0.000109
+1988  12  13  47508  -0.164608   0.260508  -0.0917621   0.0013196   0.000433  -0.000329   0.000610   0.000510  0.0000100  0.0000091    0.000175    0.000205
+1988  12  14  47509  -0.165680   0.263911  -0.0931869   0.0015536   0.000575  -0.000361   0.000361   0.000393  0.0000100  0.0000095    0.000179    0.000205
+1988  12  15  47510  -0.167143   0.266826  -0.0948486   0.0017698   0.000500  -0.000267   0.000311   0.000316  0.0000089  0.0000109    0.000164    0.000129
+1988  12  16  47511  -0.168007   0.268674  -0.0966874   0.0018892   0.000303  -0.000279   0.000429   0.000406  0.0000117  0.0000196    0.000219    0.000153
+1988  12  17  47512  -0.167791   0.270840  -0.0985792   0.0018685   0.000148  -0.000465   0.001339   0.001029  0.0000303  0.0000167    0.000705    0.000476
+1988  12  18  47513  -0.167317   0.274291  -0.1003790   0.0017060   0.000144  -0.000616   0.000677   0.000715  0.0000216  0.0000214    0.000596    0.000420
+1988  12  19  47514  -0.166904   0.277879  -0.1019586   0.0014378   0.000301  -0.000518   0.000330   0.000353  0.0000126  0.0000187    0.000288    0.000209
+1988  12  20  47515  -0.166017   0.280416  -0.1032424   0.0011319   0.000518  -0.000147   0.000430   0.000457  0.0000158  0.0000137    0.000335    0.000286
+1988  12  21  47516  -0.166136   0.283539  -0.1042331   0.0008628   0.000578   0.000191   0.000663   0.000750  0.0000149  0.0000134    0.000490    0.000719
+1988  12  22  47517  -0.167048   0.287285  -0.1049983   0.0006858   0.000479   0.000273   0.000578   0.000699  0.0000111  0.0000127    0.000421    0.000804
+1988  12  23  47518  -0.167058   0.290098  -0.1056450   0.0006273   0.000373   0.000110   0.000408   0.000428  0.0000105  0.0000107    0.000169    0.000301
+1988  12  24  47519  -0.166086   0.292200  -0.1062917   0.0006799   0.000316  -0.000182   0.000452   0.000461  0.0000104  0.0000104    0.000145    0.000256
+1988  12  25  47520  -0.164856   0.294473  -0.1070334   0.0008100   0.000313  -0.000468   0.001132   0.001153  0.0000104  0.0000104    0.000144    0.000254
+1988  12  26  47521  -0.163926   0.297444  -0.1079260   0.0009771   0.000351  -0.000667   0.004096   0.004250  0.0000104  0.0000110    0.000144    0.000252
+1988  12  27  47522  -0.163524   0.301274  -0.1089888   0.0011478   0.000404  -0.000756   0.001610   0.001733  0.0000116  0.0000110    0.000179    0.000176
+1988  12  28  47523  -0.163439   0.305571  -0.1102126   0.0012975   0.000449  -0.000747   0.000768   0.000731  0.0000116  0.0000116    0.000179    0.000176
+1988  12  29  47524  -0.163125   0.309435  -0.1115674   0.0014086   0.000473  -0.000674   0.000446   0.000415  0.0000116  0.0000116    0.000179    0.000176
+1988  12  30  47525  -0.162036   0.311914  -0.1130088   0.0014701   0.000475  -0.000569   0.000555   0.000520  0.0000116  0.0000116    0.000179    0.000176
+1988  12  31  47526  -0.160923   0.313631  -0.1144850   0.0014775   0.000462  -0.000456   0.001181   0.001178  0.0000116  0.0000114    0.000179    0.000176
+1989   1   1  47527  -0.160458   0.315608  -0.1159429   0.0014313   0.000441  -0.000345   0.000888   0.000837  0.0000112  0.0000114    0.000173    0.000220
+1989   1   2  47528  -0.160331   0.318168  -0.1173313   0.0013347   0.000417  -0.000237   0.000307   0.000278  0.0000112  0.0000112    0.000173    0.000225
+1989   1   3  47529  -0.159781   0.321060  -0.1186028   0.0011949   0.000387  -0.000125   0.000307   0.000278  0.0000112  0.0000112    0.000173    0.000225
+1989   1   4  47530  -0.158415   0.323850  -0.1197203   0.0010283   0.000350  -0.000009   0.000346   0.000313  0.0000112  0.0000112    0.000173    0.000225
+1989   1   5  47531  -0.156727   0.326320  -0.1206703   0.0008666   0.000320   0.000098   0.001330   0.001214  0.0000112  0.0000123    0.000173    0.000225
+1989   1   6  47532  -0.155426   0.328529  -0.1214788   0.0007557   0.000326   0.000163   0.003070   0.004168  0.0000134  0.0000124    0.000187    0.000289
+1989   1   7  47533  -0.154421   0.330706  -0.1222201   0.0007421   0.000406   0.000140   0.000402   0.000608  0.0000136  0.0000135    0.000189    0.000297
+1989   1   8  47534  -0.153053   0.333106  -0.1230066   0.0008534   0.000584   0.000000   0.000363   0.000549  0.0000136  0.0000136    0.000189    0.000297
+1989   1   9  47535  -0.151118   0.335861  -0.1239619   0.0010807   0.000835  -0.000246   0.000510   0.000784  0.0000136  0.0000136    0.000189    0.000297
+1989   1  10  47536  -0.149504   0.338849  -0.1251806   0.0013739   0.001058  -0.000520   0.001177   0.002149  0.0000136  0.0000115    0.000189    0.000297
+1989   1  11  47537  -0.148776   0.341714  -0.1266927   0.0016542   0.001112  -0.000707   0.001200   0.002115  0.0000093  0.0000113    0.000173    0.000152
+1989   1  12  47538  -0.148353   0.344138  -0.1284466   0.0018405   0.000905  -0.000712   0.000637   0.000660  0.0000089  0.0000089    0.000175    0.000148
+1989   1  13  47539  -0.147789   0.346222  -0.1303194   0.0018773   0.000482  -0.000525   0.000369   0.000311  0.0000084  0.0000083    0.000181    0.000149
+1989   1  14  47540  -0.147590   0.348529  -0.1321511   0.0017566   0.000042  -0.000247   0.000417   0.000291  0.0000077  0.0000079    0.000195    0.000149
+1989   1  15  47541  -0.147090   0.351375  -0.1337988   0.0015175  -0.000089  -0.000042   0.000661   0.000410  0.0000073  0.0000077    0.000206    0.000149
+1989   1  16  47542  -0.145888   0.353922  -0.1351743   0.0012292   0.000116  -0.000020   0.000949   0.000646  0.0000076  0.0000082    0.000193    0.000146
+1989   1  17  47543  -0.144584   0.356040  -0.1362672   0.0009668   0.000428  -0.000178   0.000326   0.000312  0.0000091  0.0000084    0.000160    0.000138
+1989   1  18  47544  -0.143958   0.358056  -0.1371351   0.0007859   0.000564  -0.000429   0.000324   0.000311  0.0000091  0.0000100    0.000161    0.000139
+1989   1  19  47545  -0.143944   0.360321  -0.1378760   0.0007145   0.000399  -0.000656   0.000397   0.000382  0.0000110  0.0000277    0.000192    0.000167
+1989   1  20  47546  -0.143107   0.362781  -0.1386027   0.0007565   0.000142  -0.000775   0.001794   0.001732  0.0000462  0.0000655    0.000613    0.000682
+1989   1  21  47547  -0.140583   0.365251  -0.1394213   0.0008961   0.000076  -0.000750   0.004054   0.003591  0.0001200  0.0000330    0.000737    0.002115
+1989   1  22  47548  -0.138107   0.367779  -0.1404150   0.0011034   0.000150  -0.000603   0.000573   0.000531  0.0000197  0.0000658    0.000352    0.000499
+1989   1  23  47549  -0.136900   0.369892  -0.1416339   0.0013391   0.000205  -0.000414   0.000394   0.000381  0.0000117  0.0000177    0.000215    0.000275
+1989   1  24  47550  -0.136589   0.371464  -0.1430864   0.0015594   0.000170  -0.000291   0.000489   0.000494  0.0000157  0.0000179    0.000220    0.000265
+1989   1  25  47551  -0.135595   0.373489  -0.1447366   0.0017254   0.000179  -0.000324   0.000624   0.000687  0.0000242  0.0000234    0.000227    0.000261
+1989   1  26  47552  -0.133686   0.376054  -0.1465151   0.0018120   0.000314  -0.000474   0.001569   0.001689  0.0000311  0.0000225    0.000327    0.000345
+1989   1  27  47553  -0.132119   0.378253  -0.1483363   0.0018117   0.000502  -0.000599   0.001247   0.001193  0.0000208  0.0000228    0.000455    0.000334
+1989   1  28  47554  -0.131630   0.379733  -0.1501159   0.0017332   0.000603  -0.000546   0.000675   0.000655  0.0000146  0.0000173    0.000320    0.000236
+1989   1  29  47555  -0.131060   0.381527  -0.1517852   0.0015968   0.000518  -0.000277   0.000549   0.000534  0.0000138  0.0000317    0.000303    0.000224
+1989   1  30  47556  -0.130070   0.383627  -0.1532994   0.0014296   0.000260   0.000084   0.001247   0.001199  0.0000488  0.0000535    0.001069    0.000794
+1989   1  31  47557  -0.129271   0.385341  -0.1546430   0.0012617  -0.000060   0.000335   0.001443   0.001403  0.0000932  0.0000304    0.001878    0.002322
+1989   2   1  47558  -0.128474   0.387042  -0.1558312   0.0011225  -0.000274   0.000308   0.000686   0.000764  0.0000119  0.0000524    0.000243    0.000320
+1989   2   2  47559  -0.126861   0.389607  -0.1569079   0.0010375  -0.000251  -0.000003   0.000510   0.000535  0.0000116  0.0000133    0.000239    0.000299
+1989   2   3  47560  -0.124291   0.392393  -0.1579391   0.0010295   0.000027  -0.000404   0.000457   0.000364  0.0000146  0.0000181    0.000324    0.000323
+1989   2   4  47561  -0.121827   0.394841  -0.1590095   0.0011200   0.000428  -0.000530   0.000712   0.000494  0.0000245  0.0000291    0.000513    0.000466
+1989   2   5  47562  -0.119870   0.397620  -0.1602217   0.0013202   0.000780  -0.000289   0.001535   0.001216  0.0000436  0.0000174    0.000595    0.000740
+1989   2   6  47563  -0.117964   0.400858  -0.1616770   0.0016091   0.000908   0.000020   0.000480   0.000660  0.0000103  0.0000267    0.000204    0.000151
+1989   2   7  47564  -0.116066   0.403909  -0.1634377   0.0019244   0.000733   0.000038   0.000321   0.000364  0.0000098  0.0000105    0.000191    0.000143
+1989   2   8  47565  -0.114273   0.406240  -0.1654906   0.0021778   0.000342  -0.000329   0.000338   0.000250  0.0000107  0.0000107    0.000195    0.000156
+1989   2   9  47566  -0.112331   0.408205  -0.1677346   0.0022843   0.000015  -0.000661   0.000360   0.000222  0.0000115  0.0000170    0.000199    0.000169
+1989   2  10  47567  -0.110170   0.410171  -0.1699967   0.0021994  -0.000071  -0.000677   0.000815   0.000597  0.0000233  0.0000158    0.000449    0.000379
+1989   2  11  47568  -0.108035   0.411958  -0.1720870   0.0019442   0.000061  -0.000482   0.000762   0.000644  0.0000201  0.0000172    0.000423    0.000290
+1989   2  12  47569  -0.106038   0.413305  -0.1738661   0.0015962   0.000303  -0.000324   0.000443   0.000351  0.0000110  0.0000147    0.000220    0.000148
+1989   2  13  47570  -0.103905   0.414397  -0.1752881   0.0012500   0.000574  -0.000344   0.000544   0.000439  0.0000094  0.0000101    0.000185    0.000125
+1989   2  14  47571  -0.101220   0.415780  -0.1763945   0.0009795   0.000808  -0.000496   0.001689   0.001372  0.0000092  0.0000089    0.000182    0.000122
+1989   2  15  47572  -0.098012   0.417815  -0.1772850   0.0008251   0.000947  -0.000622   0.002011   0.001896  0.0000085  0.0000088    0.000192    0.000128
+1989   2  16  47573  -0.094957   0.420286  -0.1780833   0.0007933   0.000949  -0.000606   0.000403   0.000386  0.0000085  0.0000088    0.000193    0.000129
+1989   2  17  47574  -0.092642   0.422728  -0.1789048   0.0008628   0.000810  -0.000443   0.000398   0.000346  0.0000091  0.0000106    0.000192    0.000138
+1989   2  18  47575  -0.090935   0.424936  -0.1798326   0.0009968   0.000566  -0.000247   0.000398   0.000258  0.0000126  0.0000104    0.000179    0.000187
+1989   2  19  47576  -0.088693   0.427264  -0.1809099   0.0011599   0.000219  -0.000336   0.000393   0.000197  0.0000117  0.0000114    0.000136    0.000206
+1989   2  20  47577  -0.087072   0.429005  -0.1821511   0.0013364   0.000113  -0.000444   0.000517   0.000258  0.0000101  0.0000116    0.000132    0.000166
+1989   2  21  47578  -0.085830   0.430447  -0.1835701   0.0015121   0.000219  -0.000376   0.000545   0.000469  0.0000114  0.0000099    0.000220    0.000146
+1989   2  22  47579  -0.082944   0.432626  -0.1851546   0.0016363   0.000105  -0.000318   0.000428   0.000408  0.0000096  0.0000101    0.000215    0.000172
+1989   2  23  47580  -0.079448   0.434353  -0.1868179   0.0016658  -0.000151  -0.000231   0.000583   0.000534  0.0000088  0.0000091    0.000202    0.000200
+1989   2  24  47581  -0.076164   0.435852  -0.1884614   0.0016115  -0.000363  -0.000073   0.001457   0.001107  0.0000087  0.0000220    0.000201    0.000206
+1989   2  25  47582  -0.073073   0.437960  -0.1900203   0.0015077  -0.000431   0.000109   0.007401   0.004084  0.0000353  0.0000340    0.000855    0.000901
+1989   2  26  47583  -0.070220   0.440584  -0.1914636   0.0013822  -0.000307   0.000229   0.003175   0.004317  0.0000592  0.0000374    0.001037    0.001572
+1989   2  27  47584  -0.067463   0.443244  -0.1927809   0.0012504  -0.000013   0.000193   0.001038   0.001316  0.0000395  0.0000412    0.000402    0.000762
+1989   2  28  47585  -0.064423   0.445670  -0.1939703   0.0011202   0.000367  -0.000045   0.000610   0.000728  0.0000232  0.0000297    0.000203    0.000400
+1989   3   1  47586  -0.060991   0.448009  -0.1950373   0.0010094   0.000714  -0.000407   0.000695   0.000816  0.0000199  0.0000193    0.000171    0.000338
+1989   3   2  47587  -0.058591   0.449959  -0.1960156   0.0009554   0.000891  -0.000743   0.000999   0.001101  0.0000154  0.0000139    0.000171    0.000307
+1989   3   3  47588  -0.057222   0.451598  -0.1969846   0.0010054   0.000787  -0.000894   0.000617   0.000589  0.0000079  0.0000118    0.000212    0.000213
+1989   3   4  47589  -0.055662   0.453145  -0.1980683   0.0011942   0.000395  -0.000774   0.000395   0.000356  0.0000081  0.0000085    0.000204    0.000221
+1989   3   5  47590  -0.052894   0.454516  -0.1994093   0.0015167  -0.000151  -0.000457   0.000335   0.000254  0.0000092  0.0000091    0.000184    0.000256
+1989   3   6  47591  -0.050384   0.455727  -0.2011173   0.0019113  -0.000592  -0.000164   0.000395   0.000269  0.0000101  0.0000098    0.000173    0.000292
+1989   3   7  47592  -0.048813   0.457149  -0.2032153   0.0022747  -0.000743  -0.000069   0.001007   0.000763  0.0000104  0.0000105    0.000172    0.000251
+1989   3   8  47593  -0.046996   0.458795  -0.2056177   0.0025036  -0.000589  -0.000184   0.000634   0.000599  0.0000109  0.0000106    0.000183    0.000130
+1989   3   9  47594  -0.044232   0.459910  -0.2081553   0.0025377  -0.000245  -0.000400   0.000447   0.000430  0.0000109  0.0000109    0.000183    0.000129
+1989   3  10  47595  -0.040834   0.460032  -0.2106305   0.0023801   0.000119  -0.000574   0.000583   0.000576  0.0000109  0.0000109    0.000183    0.000129
+1989   3  11  47596  -0.037625   0.459986  -0.2128780   0.0020897   0.000387  -0.000628   0.000862   0.000922  0.0000109  0.0000108    0.000183    0.000129
+1989   3  12  47597  -0.034653   0.461043  -0.2148064   0.0017527   0.000523  -0.000564   0.001066   0.000708  0.0000107  0.0000108    0.000224    0.000201
+1989   3  13  47598  -0.031545   0.463546  -0.2164086   0.0014504   0.000552  -0.000435   0.000560   0.000354  0.0000107  0.0000107    0.000228    0.000214
+1989   3  14  47599  -0.028275   0.466404  -0.2177474   0.0012384   0.000526  -0.000304   0.000339   0.000213  0.0000107  0.0000107    0.000228    0.000214
+1989   3  15  47600  -0.025776   0.467637  -0.2189270   0.0011418   0.000492  -0.000222   0.000379   0.000238  0.0000107  0.0000107    0.000228    0.000214
+1989   3  16  47601  -0.023452   0.467774  -0.2200655   0.0011601   0.000470  -0.000203   0.000937   0.000615  0.0000107  0.0000103    0.000228    0.000214
+1989   3  17  47602  -0.020307   0.468761  -0.2212715   0.0012739   0.000454  -0.000225   0.001268   0.001126  0.0000098  0.0000102    0.000140    0.000114
+1989   3  18  47603  -0.016952   0.470969  -0.2226269   0.0014515   0.000427  -0.000242   0.000606   0.000751  0.0000097  0.0000098    0.000137    0.000111
+1989   3  19  47604  -0.014216   0.473402  -0.2241775   0.0016537   0.000367  -0.000199   0.000414   0.000532  0.0000097  0.0000097    0.000137    0.000111
+1989   3  20  47605  -0.011579   0.474951  -0.2259271   0.0018386   0.000271  -0.000068   0.000338   0.000439  0.0000097  0.0000097    0.000137    0.000111
+1989   3  21  47606  -0.008411   0.475584  -0.2278383   0.0019677   0.000161   0.000111   0.000628   0.000812  0.0000097  0.0000092    0.000137    0.000111
+1989   3  22  47607  -0.005115   0.476074  -0.2298399   0.0020149   0.000085   0.000234   0.002882   0.002463  0.0000087  0.0000092    0.000137    0.000206
+1989   3  23  47608  -0.002132   0.476974  -0.2318433   0.0019734   0.000084   0.000182   0.000641   0.000553  0.0000086  0.0000086    0.000137    0.000229
+1989   3  24  47609   0.000984   0.477836  -0.2337639   0.0018580   0.000166  -0.000091   0.000326   0.000282  0.0000086  0.0000088    0.000137    0.000229
+1989   3  25  47610   0.004888   0.478027  -0.2355424   0.0017004   0.000286  -0.000497   0.000333   0.000288  0.0000090  0.0000118    0.000144    0.000223
+1989   3  26  47611   0.008940   0.478195  -0.2371565   0.0015311   0.000356  -0.000801   0.000659   0.000541  0.0000150  0.0000125    0.000234    0.000193
+1989   3  27  47612   0.011984   0.479358  -0.2386066   0.0013586   0.000316  -0.000792   0.000687   0.000584  0.0000159  0.0000150    0.000244    0.000193
+1989   3  28  47613   0.014249   0.480846  -0.2398861   0.0011856   0.000208  -0.000489   0.000580   0.000549  0.0000149  0.0000151    0.000235    0.000201
+1989   3  29  47614   0.017035   0.480929  -0.2409998   0.0010578   0.000144  -0.000145   0.000585   0.000538  0.0000142  0.0000157    0.000251    0.000214
+1989   3  30  47615   0.020042   0.480354  -0.2420319   0.0010316   0.000185  -0.000045   0.000659   0.000484  0.0000164  0.0000159    0.000263    0.000269
+1989   3  31  47616   0.023326   0.479978  -0.2430988   0.0011220   0.000099  -0.000101   0.000799   0.000598  0.0000176  0.0000153    0.000272    0.000254
+1989   4   1  47617   0.027029   0.479998  -0.2443114   0.0013197  -0.000118  -0.000196   0.000510   0.000543  0.0000141  0.0000154    0.000293    0.000165
+1989   4   2  47618   0.030337   0.480731  -0.2457628   0.0015989  -0.000210  -0.000290   0.000399   0.000400  0.0000132  0.0000133    0.000275    0.000165
+1989   4   3  47619   0.033010   0.481565  -0.2475106   0.0019049  -0.000097  -0.000208   0.000362   0.000321  0.0000125  0.0000158    0.000255    0.000190
+1989   4   4  47620   0.035722   0.481704  -0.2495433   0.0021519   0.000117   0.000141   0.000529   0.000468  0.0000184  0.0000280    0.000370    0.000279
+1989   4   5  47621   0.039215   0.481602  -0.2517580   0.0022514   0.000318   0.000445   0.001275   0.001110  0.0000434  0.0000288    0.000831    0.000590
+1989   4   6  47622   0.043323   0.481789  -0.2539791   0.0021580   0.000446   0.000440   0.001494   0.001094  0.0000393  0.0000281    0.000987    0.000524
+1989   4   7  47623   0.047186   0.482159  -0.2560193   0.0018988   0.000490   0.000158   0.000805   0.000636  0.0000128  0.0000260    0.000366    0.000186
+1989   4   8  47624   0.050404   0.482522  -0.2577526   0.0015647   0.000473  -0.000204   0.000463   0.000375  0.0000128  0.0000128    0.000366    0.000185
+1989   4   9  47625   0.053262   0.482794  -0.2591600   0.0012671   0.000424  -0.000440   0.000449   0.000364  0.0000128  0.0000128    0.000366    0.000185
+1989   4  10  47626   0.056065   0.482883  -0.2603235   0.0010869   0.000357  -0.000477   0.000497   0.000403  0.0000128  0.0000105    0.000365    0.000185
+1989   4  11  47627   0.058880   0.482742  -0.2613792   0.0010484   0.000280  -0.000389   0.001544   0.001551  0.0000082  0.0000104    0.000161    0.000256
+1989   4  12  47628   0.061660   0.482416  -0.2624598   0.0011267   0.000208  -0.000297   0.000568   0.000602  0.0000080  0.0000081    0.000156    0.000265
+1989   4  13  47629   0.064436   0.482059  -0.2636593   0.0012766   0.000153  -0.000294   0.000297   0.000316  0.0000080  0.0000080    0.000156    0.000265
+1989   4  14  47630   0.067395   0.481947  -0.2650268   0.0014569   0.000127  -0.000397   0.000334   0.000356  0.0000080  0.0000080    0.000156    0.000265
+1989   4  15  47631   0.070559   0.482210  -0.2665767   0.0016391   0.000130  -0.000525   0.001117   0.001186  0.0000080  0.0000102    0.000156    0.000265
+1989   4  16  47632   0.073773   0.482600  -0.2683001   0.0018035   0.000153  -0.000565   0.002015   0.002238  0.0000123  0.0000105    0.000142    0.000191
+1989   4  17  47633   0.076892   0.482579  -0.2701713   0.0019349   0.000176  -0.000454   0.000361   0.000416  0.0000130  0.0000127    0.000142    0.000186
+1989   4  18  47634   0.079892   0.481934  -0.2721513   0.0020226   0.000175  -0.000242   0.000369   0.000419  0.0000132  0.0000133    0.000149    0.000181
+1989   4  19  47635   0.082873   0.481202  -0.2741942   0.0020623   0.000128  -0.000087   0.000429   0.000459  0.0000135  0.0000133    0.000179    0.000168
+1989   4  20  47636   0.085950   0.481600  -0.2762536   0.0020502   0.000004  -0.000266   0.000472   0.000475  0.0000135  0.0000134    0.000197    0.000180
+1989   4  21  47637   0.088430   0.482024  -0.2782762   0.0019867  -0.000091  -0.000597   0.000425   0.000427  0.0000133  0.0000136    0.000174    0.000283
+1989   4  22  47638   0.089978   0.481144  -0.2802156   0.0018903   0.000003  -0.000647   0.000389   0.000388  0.0000137  0.0000118    0.000187    0.000251
+1989   4  23  47639   0.092268   0.481418  -0.2820548   0.0017774   0.000323  -0.000390   0.000341   0.000341  0.0000104  0.0000119    0.000158    0.000177
+1989   4  24  47640   0.094286   0.481571  -0.2837791   0.0016583   0.000383  -0.000270   0.000351   0.000362  0.0000100  0.0000121    0.000148    0.000174
+1989   4  25  47641   0.095835   0.480565  -0.2853904   0.0015599   0.000088  -0.000335   0.000480   0.000596  0.0000139  0.0000168    0.000181    0.000256
+1989   4  26  47642   0.097788   0.479813  -0.2869261   0.0015211  -0.000122  -0.000331   0.000780   0.001076  0.0000236  0.0000191    0.000315    0.000403
+1989   4  27  47643   0.099360   0.479350  -0.2884641   0.0015743  -0.000036  -0.000289   0.000851   0.000947  0.0000243  0.0000175    0.000366    0.000466
+1989   4  28  47644   0.101344   0.479008  -0.2901056   0.0017294   0.000272  -0.000239   0.000428   0.000448  0.0000114  0.0000169    0.000175    0.000242
+1989   4  29  47645   0.103561   0.478614  -0.2919467   0.0019667   0.000415  -0.000093   0.000497   0.000509  0.0000095  0.0000171    0.000146    0.000202
+1989   4  30  47646   0.105406   0.477132  -0.2940475   0.0022355   0.000236   0.000076   0.001377   0.001393  0.0000228  0.0000388    0.000362    0.000385
+1989   5   1  47647   0.107383   0.474864  -0.2964035   0.0024624  -0.000085   0.000092   0.001337   0.002339  0.0000682  0.0000253    0.001633    0.000544
+1989   5   2  47648   0.110381   0.474060  -0.2989332   0.0025728  -0.000260  -0.000133   0.000863   0.000950  0.0000278  0.0000408    0.000467    0.000407
+1989   5   3  47649   0.112319   0.475257  -0.3014924   0.0025201  -0.000136  -0.000422   0.000491   0.000466  0.0000134  0.0000194    0.000217    0.000239
+1989   5   4  47650   0.114192   0.475478  -0.3039156   0.0023071   0.000211  -0.000687   0.000426   0.000397  0.0000111  0.0000210    0.000180    0.000203
+1989   5   5  47651   0.117060   0.473747  -0.3060671   0.0019887   0.000575  -0.000862   0.001217   0.000984  0.0000286  0.0000661    0.000464    0.000524
+1989   5   6  47652   0.120347   0.471872  -0.3078853   0.0016526   0.000755  -0.000862   0.002085   0.001463  0.0001211  0.0000285    0.001920    0.002252
+1989   5   7  47653   0.123461   0.470979  -0.3093966   0.0013828   0.000636  -0.000647   0.000927   0.001121  0.0000283  0.0000672    0.000421    0.000557
+1989   5   8  47654   0.126518   0.470106  -0.3106945   0.0012311   0.000256  -0.000229   0.000540   0.000668  0.0000132  0.0000217    0.000194    0.000255
+1989   5   9  47655   0.129050   0.470049  -0.3119042   0.0012095  -0.000234   0.000247   0.000708   0.000823  0.0000150  0.0000186    0.000202    0.000248
+1989   5  10  47656   0.131372   0.470297  -0.3131473   0.0012962  -0.000633   0.000558   0.001134   0.001186  0.0000239  0.0000290    0.000258    0.000287
+1989   5  11  47657   0.134152   0.469322  -0.3145139   0.0014489  -0.000765   0.000563   0.001369   0.001323  0.0000430  0.0000220    0.000436    0.000528
+1989   5  12  47658   0.137018   0.467763  -0.3160485   0.0016202  -0.000568   0.000271   0.000578   0.000535  0.0000201  0.0000271    0.000212    0.000302
+1989   5  13  47659   0.139624   0.466483  -0.3177487   0.0017684  -0.000142  -0.000194   0.000317   0.000293  0.0000112  0.0000170    0.000118    0.000168
+1989   5  14  47660   0.142411   0.465279  -0.3195737   0.0018637   0.000293  -0.000672   0.000428   0.000394  0.0000139  0.0000247    0.000145    0.000208
+1989   5  15  47661   0.145390   0.464273  -0.3214599   0.0018931   0.000525  -0.001016   0.001365   0.001234  0.0000383  0.0000792    0.000391    0.000576
+1989   5  16  47662   0.148095   0.463282  -0.3233404   0.0018610   0.000492  -0.001125   0.002759   0.002540  0.0001445  0.0000361    0.001622    0.002001
+1989   5  17  47663   0.150449   0.461581  -0.3251615   0.0017831   0.000294  -0.000978   0.000858   0.000982  0.0000340  0.0000799    0.000389    0.000466
+1989   5  18  47664   0.152672   0.458989  -0.3268888   0.0016764   0.000101  -0.000657   0.000379   0.000435  0.0000153  0.0000233    0.000174    0.000209
+1989   5  19  47665   0.154862   0.456551  -0.3285020   0.0015509   0.000031  -0.000338   0.000344   0.000393  0.0000126  0.0000130    0.000144    0.000171
+1989   5  20  47666   0.157318   0.454548  -0.3299864   0.0014146   0.000065  -0.000154   0.000672   0.000623  0.0000106  0.0000115    0.000170    0.000134
+1989   5  21  47667   0.160075   0.452590  -0.3313369   0.0012881   0.000095  -0.000131   0.000438   0.000400  0.0000104  0.0000105    0.000180    0.000130
+1989   5  22  47668   0.162124   0.451496  -0.3325788   0.0012096   0.000038  -0.000198   0.000364   0.000340  0.0000104  0.0000105    0.000167    0.000143
+1989   5  23  47669   0.163614   0.450533  -0.3337819   0.0012164  -0.000066  -0.000240   0.000404   0.000397  0.0000107  0.0000109    0.000151    0.000201
+1989   5  24  47670   0.165420   0.448316  -0.3350431   0.0013191  -0.000121  -0.000187   0.000436   0.000419  0.0000114  0.0000109    0.000175    0.000175
+1989   5  25  47671   0.166532   0.446631  -0.3364505   0.0014961  -0.000093  -0.000088   0.000405   0.000502  0.0000111  0.0000110    0.000192    0.000167
+1989   5  26  47672   0.167901   0.445681  -0.3380576   0.0017197  -0.000094  -0.000062   0.000479   0.000733  0.0000105  0.0000106    0.000189    0.000171
+1989   5  27  47673   0.169879   0.444105  -0.3398977   0.0019694  -0.000167  -0.000134   0.000821   0.000907  0.0000100  0.0000102    0.000214    0.000205
+1989   5  28  47674   0.171633   0.441763  -0.3419858   0.0022103  -0.000216  -0.000225   0.000540   0.000525  0.0000099  0.0000100    0.000227    0.000224
+1989   5  29  47675   0.173719   0.439763  -0.3442887   0.0023807  -0.000136  -0.000269   0.000632   0.000614  0.0000100  0.0000174    0.000228    0.000226
+1989   5  30  47676   0.176173   0.438300  -0.3467026   0.0024149   0.000060  -0.000336   0.001730   0.001749  0.0000249  0.0000428    0.000438    0.000493
+1989   5  31  47677   0.178433   0.436915  -0.3490685   0.0022793   0.000259  -0.000516   0.002086   0.002333  0.0000757  0.0000265    0.000625    0.000889
+1989   6   1  47678   0.180207   0.435722  -0.3512196   0.0019948   0.000327  -0.000764   0.000796   0.000850  0.0000281  0.0000442    0.000360    0.000571
+1989   6   2  47679   0.182061   0.434638  -0.3530386   0.0016321   0.000225  -0.000785   0.000360   0.000382  0.0000127  0.0000196    0.000170    0.000266
+1989   6   3  47680   0.184538   0.433452  -0.3544933   0.0012860   0.000021  -0.000451   0.000327   0.000316  0.0000111  0.0000126    0.000152    0.000164
+1989   6   4  47681   0.186432   0.431403  -0.3556450   0.0010369  -0.000179  -0.000058   0.000391   0.000330  0.0000124  0.0000143    0.000180    0.000139
+1989   6   5  47682   0.187083   0.428614  -0.3566128   0.0009187  -0.000267   0.000031   0.000476   0.000437  0.0000175  0.0000148    0.000222    0.000215
+1989   6   6  47683   0.188386   0.426910  -0.3575236   0.0009289  -0.000143  -0.000210   0.000495   0.000500  0.0000172  0.0000151    0.000211    0.000275
+1989   6   7  47684   0.190138   0.425857  -0.3584962   0.0010428   0.000034  -0.000534   0.000520   0.000527  0.0000127  0.0000176    0.000162    0.000219
+1989   6   8  47685   0.190730   0.423673  -0.3596170   0.0012121   0.000041  -0.000648   0.000794   0.000666  0.0000180  0.0000285    0.000210    0.000274
+1989   6   9  47686   0.191504   0.421157  -0.3609147   0.0013805   0.000059  -0.000525   0.001291   0.000692  0.0000443  0.0000145    0.000325    0.000382
+1989   6  10  47687   0.194345   0.419555  -0.3623646   0.0015050   0.000204  -0.000311   0.000296   0.000269  0.0000110  0.0000268    0.000178    0.000244
+1989   6  11  47688   0.197800   0.418213  -0.3639074   0.0015622   0.000254  -0.000142   0.000246   0.000232  0.0000093  0.0000106    0.000147    0.000217
+1989   6  12  47689   0.200271   0.416209  -0.3654698   0.0015478   0.000043  -0.000093   0.000261   0.000265  0.0000101  0.0000100    0.000134    0.000231
+1989   6  13  47690   0.202797   0.413978  -0.3669836   0.0014689  -0.000212  -0.000137   0.000360   0.000391  0.0000107  0.0000104    0.000127    0.000240
+1989   6  14  47691   0.205339   0.411943  -0.3683904   0.0013361  -0.000301  -0.000223   0.001104   0.001320  0.0000108  0.0000112    0.000126    0.000242
+1989   6  15  47692   0.206969   0.409916  -0.3696437   0.0011624  -0.000196  -0.000318   0.001883   0.002176  0.0000118  0.0000113    0.000189    0.000317
+1989   6  16  47693   0.208095   0.407537  -0.3707103   0.0009643  -0.000016  -0.000414   0.000912   0.000868  0.0000119  0.0000118    0.000199    0.000327
+1989   6  17  47694   0.209598   0.404694  -0.3715760   0.0007677   0.000056  -0.000523   0.000638   0.000637  0.0000119  0.0000119    0.000199    0.000327
+1989   6  18  47695   0.211597   0.401947  -0.3722592   0.0006122  -0.000096  -0.000649   0.000528   0.000536  0.0000119  0.0000119    0.000199    0.000327
+1989   6  19  47696   0.213482   0.399543  -0.3728242   0.0005427  -0.000410  -0.000747   0.001293   0.001321  0.0000119  0.0000125    0.000199    0.000327
+1989   6  20  47697   0.214907   0.397015  -0.3733763   0.0005902  -0.000683  -0.000740   0.003814   0.003799  0.0000132  0.0000126    0.000271    0.000379
+1989   6  21  47698   0.216221   0.394144  -0.3740382   0.0007568  -0.000709  -0.000580   0.000740   0.000710  0.0000134  0.0000137    0.000280    0.000376
+1989   6  22  47699   0.218339   0.391508  -0.3749162   0.0010108  -0.000428  -0.000306   0.000461   0.000448  0.0000142  0.0000154    0.000274    0.000332
+1989   6  23  47700   0.221565   0.389581  -0.3760698   0.0012911  -0.000004  -0.000063   0.000518   0.000521  0.0000174  0.0000179    0.000256    0.000257
+1989   6  24  47701   0.224610   0.387778  -0.3774875   0.0015194   0.000203  -0.000089   0.000579   0.000607  0.0000216  0.0000195    0.000246    0.000228
+1989   6  25  47702   0.226649   0.385181  -0.3790784   0.0016240   0.000043  -0.000332   0.001051   0.001066  0.0000216  0.0000187    0.000252    0.000234
+1989   6  26  47703   0.227909   0.381705  -0.3806929   0.0015712  -0.000306  -0.000475   0.001431   0.001079  0.0000159  0.0000191    0.000352    0.000506
+1989   6  27  47704   0.228866   0.378409  -0.3821755   0.0013848  -0.000536  -0.000246   0.001075   0.000754  0.0000166  0.0000180    0.000313    0.000511
+1989   6  28  47705   0.229300   0.377443  -0.3834250   0.0011367  -0.000454   0.000324   0.001146   0.000949  0.0000201  0.0000206    0.000241    0.000518
+1989   6  29  47706   0.232198   0.374832  -0.3844282   0.0008827  -0.000166   0.000721   0.001833   0.002244  0.0000246  0.0000205    0.000212    0.000524
+1989   6  30  47707   0.236371   0.370671  -0.3851924   0.0006335   0.000105   0.000659   0.002770   0.002967  0.0000208  0.0000175    0.000207    0.000469
+1989   7   1  47708   0.238752   0.367153  -0.3857196   0.0004065   0.000206   0.000319   0.001023   0.000863  0.0000103  0.0000159    0.000204    0.000281
+1989   7   2  47709   0.238770   0.364497  -0.3860452   0.0002550   0.000106   0.000044   0.000688   0.000566  0.0000110  0.0000126    0.000213    0.000280
+1989   7   3  47710   0.238356   0.362593  -0.3862723   0.0002488  -0.000107   0.000050   0.000763   0.000657  0.0000148  0.0000169    0.000261    0.000279
+1989   7   4  47711   0.239662   0.359789  -0.3865760   0.0003986  -0.000285   0.000110   0.001368   0.001326  0.0000228  0.0000215    0.000322    0.000279
+1989   7   5  47712   0.242388   0.356042  -0.3870857   0.0006277  -0.000344   0.000024   0.001324   0.001053  0.0000282  0.0000210    0.000324    0.000354
+1989   7   6  47713   0.244658   0.352908  -0.3878303   0.0008511  -0.000299  -0.000153   0.000690   0.000648  0.0000191  0.0000204    0.000319    0.000409
+1989   7   7  47714   0.245825   0.350029  -0.3887746   0.0010275  -0.000215  -0.000266   0.000494   0.000486  0.0000125  0.0000170    0.000333    0.000511
+1989   7   8  47715   0.246194   0.347317  -0.3898656   0.0011384  -0.000144  -0.000269   0.000540   0.000536  0.0000149  0.0000116    0.000353    0.000323
+1989   7   9  47716   0.248634   0.344565  -0.3910298   0.0011713  -0.000179  -0.000112   0.000401   0.000403  0.0000108  0.0000104    0.000207    0.000164
+1989   7  10  47717   0.249999   0.341361  -0.3921874   0.0011318  -0.000399   0.000249   0.000306   0.000269  0.0000060  0.0000083    0.000158    0.000147
+1989   7  11  47718   0.250761   0.338555  -0.3932753   0.0010399  -0.000372   0.000230   0.000413   0.000341  0.0000057  0.0000093    0.000165    0.000167
+1989   7  12  47719   0.252448   0.335651  -0.3942542   0.0009208  -0.000121  -0.000177   0.000675   0.000482  0.0000126  0.0000118    0.000297    0.000266
+1989   7  13  47720   0.253660   0.332606  -0.3951111   0.0008022  -0.000087  -0.000399   0.000677   0.000460  0.0000179  0.0000227    0.000327    0.000291
+1989   7  14  47721   0.253768   0.329604  -0.3958611   0.0007094  -0.000312  -0.000314   0.000798   0.000558  0.0000327  0.0000227    0.000345    0.000315
+1989   7  15  47722   0.253923   0.326408  -0.3965412   0.0006577  -0.000490  -0.000158   0.000731   0.000586  0.0000275  0.0000265    0.000409    0.000356
+1989   7  16  47723   0.255408   0.323414  -0.3971972   0.0006514  -0.000284  -0.000031   0.000655   0.000590  0.0000203  0.0000205    0.000345    0.000463
+1989   7  17  47724   0.257325   0.321223  -0.3978736   0.0006920   0.000224   0.000041   0.000418   0.000430  0.0000136  0.0000149    0.000233    0.000419
+1989   7  18  47725   0.258319   0.318938  -0.3986163   0.0007996   0.000259  -0.000064   0.000351   0.000396  0.0000096  0.0000102    0.000208    0.000310
+1989   7  19  47726   0.258571   0.316182  -0.3995053   0.0009996  -0.000088  -0.000263   0.000377   0.000510  0.0000069  0.0000082    0.000212    0.000227
+1989   7  20  47727   0.258894   0.313372  -0.4006340   0.0012732  -0.000146  -0.000351   0.000496   0.000686  0.0000068  0.0000084    0.000212    0.000223
+1989   7  21  47728   0.258910   0.310405  -0.4020470   0.0015504   0.000136  -0.000286   0.000438   0.000440  0.0000099  0.0000092    0.000209    0.000177
+1989   7  22  47729   0.259205   0.307086  -0.4037050   0.0017459   0.000310  -0.000177   0.000313   0.000295  0.0000116  0.0000122    0.000210    0.000171
+1989   7  23  47730   0.260039   0.303587  -0.4054914   0.0018018   0.000034  -0.000143   0.000391   0.000367  0.0000144  0.0000238    0.000245    0.000206
+1989   7  24  47731   0.260032   0.300528  -0.4072574   0.0017084  -0.000349  -0.000163   0.001167   0.001099  0.0000361  0.0000198    0.000357    0.000422
+1989   7  25  47732   0.258553   0.297939  -0.4088674   0.0014947  -0.000333  -0.000143   0.000949   0.000815  0.0000252  0.0000264    0.000290    0.000561
+1989   7  26  47733   0.257982   0.294570  -0.4102258   0.0012116  -0.000118  -0.000080   0.000718   0.000583  0.0000167  0.0000179    0.000218    0.000361
+1989   7  27  47734   0.258847   0.290574  -0.4112920   0.0009165  -0.000074  -0.000008   0.000433   0.000441  0.0000105  0.0000149    0.000182    0.000187
+1989   7  28  47735   0.258692   0.286593  -0.4120801   0.0006719  -0.000162   0.000111   0.000398   0.000480  0.0000130  0.0000118    0.000204    0.000196
+1989   7  29  47736   0.258740   0.283386  -0.4126707   0.0005232  -0.000087   0.000227   0.000338   0.000375  0.0000131  0.0000111    0.000154    0.000194
+1989   7  30  47737   0.259727   0.280520  -0.4131662   0.0004834   0.000108   0.000277   0.000283   0.000275  0.0000092  0.0000133    0.000111    0.000161
+1989   7  31  47738   0.260172   0.277155  -0.4136725   0.0005557   0.000140   0.000258   0.000418   0.000404  0.0000136  0.0000122    0.000173    0.000238
+1989   8   1  47739   0.259354   0.273956  -0.4143002   0.0007192  -0.000058   0.000196   0.000466   0.000441  0.0000152  0.0000141    0.000290    0.000264
+1989   8   2  47740   0.257850   0.271474  -0.4151172   0.0009156  -0.000295   0.000135   0.000508   0.000460  0.0000146  0.0000167    0.000249    0.000258
+1989   8   3  47741   0.257613   0.269006  -0.4161226   0.0010794  -0.000197   0.000128   0.000697   0.000572  0.0000181  0.0000169    0.000273    0.000242
+1989   8   4  47742   0.257752   0.265694  -0.4172569   0.0011746   0.000123   0.000107   0.000735   0.000540  0.0000191  0.0000154    0.000320    0.000235
+1989   8   5  47743   0.258881   0.262833  -0.4184482   0.0012045   0.000309   0.000060   0.000454   0.000347  0.0000126  0.0000138    0.000196    0.000218
+1989   8   6  47744   0.258951   0.258599  -0.4196424   0.0011907   0.000009  -0.000182   0.000302   0.000219  0.0000086  0.0000108    0.000159    0.000160
+1989   8   7  47745   0.259217   0.255314  -0.4208090   0.0011322  -0.000115  -0.000156   0.000417   0.000301  0.0000090  0.0000132    0.000168    0.000174
+1989   8   8  47746   0.259625   0.253225  -0.4218917   0.0010170   0.000161   0.000089   0.000839   0.000761  0.0000179  0.0000141    0.000211    0.000531
+1989   8   9  47747   0.258899   0.250529  -0.4228354   0.0008816   0.000403   0.000110   0.000681   0.000769  0.0000192  0.0000181    0.000202    0.000516
+1989   8  10  47748   0.257445   0.247683  -0.4236558   0.0007748   0.000322   0.000039   0.000557   0.000624  0.0000183  0.0000175    0.000192    0.000327
+1989   8  11  47749   0.259031   0.243647  -0.4243946   0.0006911   0.000074  -0.000013   0.000386   0.000448  0.0000158  0.0000165    0.000204    0.000381
+1989   8  12  47750   0.260365   0.240254  -0.4250559   0.0006303  -0.000097  -0.000206   0.000473   0.000562  0.0000148  0.0000152    0.000216    0.000507
+1989   8  13  47751   0.260099   0.237925  -0.4256811   0.0006324  -0.000046  -0.000562   0.001225   0.001322  0.0000147  0.0000124    0.000218    0.000544
+1989   8  14  47752   0.259799   0.235625  -0.4263533   0.0007236   0.000196  -0.000923   0.001362   0.001344  0.0000099  0.0000122    0.000193    0.000256
+1989   8  15  47753   0.259646   0.232924  -0.4271633   0.0009057   0.000452  -0.001067   0.000358   0.000394  0.0000097  0.0000098    0.000192    0.000250
+1989   8  16  47754   0.258943   0.229913  -0.4281925   0.0011698   0.000529  -0.000831   0.000355   0.000392  0.0000097  0.0000103    0.000192    0.000250
+1989   8  17  47755   0.257187   0.226893  -0.4295113   0.0014954   0.000360  -0.000251   0.000406   0.000442  0.0000110  0.0000148    0.000207    0.000247
+1989   8  18  47756   0.255115   0.223829  -0.4311637   0.0018242   0.000062   0.000387   0.000933   0.001560  0.0000198  0.0000162    0.000273    0.000240
+1989   8  19  47757   0.253845   0.220462  -0.4331138   0.0020487  -0.000162   0.000748   0.001091   0.002882  0.0000214  0.0000184    0.000281    0.000241
+1989   8  20  47758   0.253356   0.216826  -0.4352017   0.0020653  -0.000184   0.000736   0.000796   0.000814  0.0000169  0.0000189    0.000374    0.000336
+1989   8  21  47759   0.252792   0.213232  -0.4371910   0.0018549  -0.000048   0.000497   0.000825   0.000766  0.0000163  0.0000176    0.000413    0.000380
+1989   8  22  47760   0.251790   0.209915  -0.4388801   0.0015026   0.000074   0.000263   0.001111   0.000938  0.0000183  0.0000218    0.000459    0.000440
+1989   8  23  47761   0.251147   0.206489  -0.4401933   0.0011392  -0.000112   0.000161   0.001327   0.001085  0.0000274  0.0000244    0.000629    0.000832
+1989   8  24  47762   0.250945   0.203454  -0.4411804   0.0008638  -0.000641   0.000182   0.001202   0.001019  0.0000305  0.0000232    0.000358    0.000583
+1989   8  25  47763   0.250690   0.200167  -0.4419573   0.0007112  -0.000840   0.000277   0.000797   0.000789  0.0000189  0.0000205    0.000229    0.000285
+1989   8  26  47764   0.250265   0.196202  -0.4426427   0.0006624  -0.000207   0.000333   0.000488   0.000560  0.0000105  0.0000139    0.000204    0.000176
+1989   8  27  47765   0.250228   0.193397  -0.4433169   0.0006986   0.000526   0.000157   0.000483   0.000568  0.0000088  0.0000096    0.000193    0.000150
+1989   8  28  47766   0.249866   0.191696  -0.4440643   0.0008205   0.000770  -0.000214   0.001355   0.001234  0.0000088  0.0000094    0.000170    0.000156
+1989   8  29  47767   0.248231   0.189455  -0.4449691   0.0010084   0.000560  -0.000512   0.000730   0.000552  0.0000100  0.0000096    0.000119    0.000250
+1989   8  30  47768   0.246401   0.186490  -0.4460785   0.0012114   0.000254  -0.000464   0.000445   0.000340  0.0000104  0.0000111    0.000128    0.000250
+1989   8  31  47769   0.245446   0.183651  -0.4473775   0.0013634   0.000188  -0.000018   0.000504   0.000402  0.0000121  0.0000143    0.000185    0.000250
+1989   9   1  47770   0.243332   0.180924  -0.4487834   0.0014441   0.000275   0.000532   0.000774   0.000669  0.0000183  0.0000257    0.000300    0.000264
+1989   9   2  47771   0.240757   0.177498  -0.4502410   0.0014721   0.000306   0.000820   0.001702   0.002018  0.0000393  0.0000586    0.000418    0.000359
+1989   9   3  47772   0.238710   0.174007  -0.4517044   0.0014333   0.000161   0.000685   0.002704   0.003847  0.0000988  0.0000278    0.001201    0.001057
+1989   9   4  47773   0.236902   0.171095  -0.4530894   0.0012988  -0.000104   0.000276   0.000857   0.000583  0.0000163  0.0000550    0.000578    0.000516
+1989   9   5  47774   0.235274   0.167646  -0.4542913   0.0010813  -0.000286  -0.000048   0.000715   0.000472  0.0000112  0.0000137    0.000401    0.000357
+1989   9   6  47775   0.233545   0.163309  -0.4552502   0.0008525  -0.000234  -0.000043   0.001012   0.000621  0.0000112  0.0000137    0.000397    0.000354
+1989   9   7  47776   0.231117   0.160358  -0.4560038   0.0006974  -0.000048   0.000152   0.001941   0.001000  0.0000163  0.0000148    0.000311    0.000287
+1989   9   8  47777   0.228325   0.158692  -0.4566610   0.0006510   0.000065   0.000211   0.002173   0.001581  0.0000185  0.0000146    0.000299    0.000275
+1989   9   9  47778   0.225909   0.156454  -0.4573289   0.0006828   0.000024   0.000000   0.000907   0.000783  0.0000130  0.0000131    0.000286    0.000231
+1989   9  10  47779   0.223845   0.153532  -0.4580559   0.0007523   0.000085  -0.000138   0.000474   0.000407  0.0000077  0.0000095    0.000251    0.000177
+1989   9  11  47780   0.221616   0.151010  -0.4588666   0.0008733   0.000465   0.000171   0.000390   0.000322  0.0000059  0.0000074    0.000226    0.000185
+1989   9  12  47781   0.219252   0.148521  -0.4598341   0.0010887   0.000740   0.000588   0.000504   0.000407  0.0000070  0.0000160    0.000284    0.000256
+1989   9  13  47782   0.216648   0.146077  -0.4610639   0.0014049   0.000610   0.000715   0.001448   0.001031  0.0000260  0.0000264    0.001034    0.000953
+1989   9  14  47783   0.213799   0.143835  -0.4626409   0.0017691   0.000216   0.000510   0.001434   0.001376  0.0000457  0.0000230    0.000960    0.000797
+1989   9  15  47784   0.211226   0.141563  -0.4645700   0.0020745  -0.000122   0.000164   0.000658   0.000677  0.0000199  0.0000295    0.000414    0.000343
+1989   9  16  47785   0.209386   0.139392  -0.4667336   0.0022014  -0.000138  -0.000055   0.000477   0.000458  0.0000132  0.0000149    0.000257    0.000242
+1989   9  17  47786   0.207478   0.137532  -0.4689094   0.0020993   0.000078   0.000019   0.000372   0.000347  0.0000098  0.0000123    0.000182    0.000179
+1989   9  18  47787   0.204642   0.135732  -0.4708834   0.0018403   0.000242   0.000284   0.000412   0.000403  0.0000115  0.0000109    0.000200    0.000178
+1989   9  19  47788   0.201661   0.132998  -0.4725718   0.0015384   0.000233   0.000210   0.000447   0.000439  0.0000119  0.0000109    0.000199    0.000179
+1989   9  20  47789   0.199175   0.130092  -0.4739751   0.0012668   0.000144   0.000001   0.000466   0.000415  0.0000103  0.0000126    0.000174    0.000187
+1989   9  21  47790   0.196951   0.128304  -0.4751433   0.0010770   0.000116   0.000223   0.000553   0.000484  0.0000133  0.0000145    0.000204    0.000208
+1989   9  22  47791   0.194609   0.126349  -0.4761743   0.0010006   0.000082   0.000516   0.000676   0.000584  0.0000186  0.0000147    0.000240    0.000226
+1989   9  23  47792   0.191797   0.123676  -0.4771835   0.0010376   0.000011   0.000516   0.001487   0.001422  0.0000161  0.0000132    0.000231    0.000234
+1989   9  24  47793   0.188438   0.121163  -0.4782756   0.0011653  -0.000019   0.000283   0.000562   0.000619  0.0000078  0.0000120    0.000154    0.000268
+1989   9  25  47794   0.184957   0.119134  -0.4795267   0.0013490   0.000057   0.000045   0.000270   0.000297  0.0000078  0.0000081    0.000153    0.000268
+1989   9  26  47795   0.181829   0.116806  -0.4809742   0.0015481   0.000222   0.000005   0.000259   0.000217  0.0000084  0.0000094    0.000140    0.000268
+1989   9  27  47796   0.178383   0.114374  -0.4826133   0.0017223   0.000299   0.000079   0.000321   0.000174  0.0000111  0.0000125    0.000128    0.000288
+1989   9  28  47797   0.174176   0.112386  -0.4844014   0.0018393   0.000158   0.000085   0.000502   0.000266  0.0000166  0.0000133    0.000183    0.000381
+1989   9  29  47798   0.170822   0.110114  -0.4862695   0.0018761   0.000018   0.000133   0.000857   0.000618  0.0000155  0.0000127    0.000224    0.000288
+1989   9  30  47799   0.169091   0.106936  -0.4881302   0.0018243   0.000049   0.000356   0.000501   0.000436  0.0000088  0.0000120    0.000145    0.000168
+1989  10   1  47800   0.167373   0.103892  -0.4898980   0.0016992   0.000229   0.000741   0.000401   0.000352  0.0000085  0.0000086    0.000142    0.000164
+1989  10   2  47801   0.164231   0.102235  -0.4915149   0.0015349   0.000462   0.001128   0.000612   0.000514  0.0000085  0.0000078    0.000142    0.000164
+1989  10   3  47802   0.159919   0.101992  -0.4929626   0.0013704   0.000617   0.001277   0.002600   0.001212  0.0000071  0.0000078    0.000137    0.000171
+1989  10   4  47803   0.155656   0.102066  -0.4942601   0.0012382   0.000586   0.001026   0.000600   0.000565  0.0000071  0.0000073    0.000138    0.000172
+1989  10   5  47804   0.152381   0.100972  -0.4954525   0.0011578   0.000356   0.000432   0.000310   0.000312  0.0000076  0.0000091    0.000148    0.000179
+1989  10   6  47805   0.149837   0.098354  -0.4965971   0.0011363   0.000038  -0.000203   0.000432   0.000436  0.0000110  0.0000150    0.000216    0.000211
+1989  10   7  47806   0.146640   0.096106  -0.4977520   0.0011800  -0.000137  -0.000345   0.000932   0.000892  0.0000225  0.0000097    0.000434    0.000237
+1989  10   8  47807   0.142437   0.095130  -0.4989873   0.0013031  -0.000095   0.000009   0.000269   0.000228  0.0000083  0.0000149    0.000125    0.000092
+1989  10   9  47808   0.138328   0.094291  -0.5003884   0.0015159   0.000036   0.000325   0.000240   0.000211  0.0000073  0.0000078    0.000115    0.000087
+1989  10  10  47809   0.135207   0.092704  -0.5020433   0.0018077   0.000106   0.000205   0.000250   0.000245  0.0000072  0.0000081    0.000134    0.000111
+1989  10  11  47810   0.132515   0.091608  -0.5040133   0.0021400   0.000160   0.000003   0.000346   0.000351  0.0000088  0.0000100    0.000213    0.000189
+1989  10  12  47811   0.128736   0.091071  -0.5063091   0.0024390   0.000113  -0.000104   0.000536   0.000446  0.0000127  0.0000145    0.000292    0.000224
+1989  10  13  47812   0.124581   0.090324  -0.5088503   0.0026123  -0.000094  -0.000132   0.000693   0.000592  0.0000203  0.0000152    0.000311    0.000265
+1989  10  14  47813   0.120773   0.089159  -0.5114742   0.0026040  -0.000314  -0.000110   0.000691   0.000680  0.0000177  0.0000145    0.000278    0.000374
+1989  10  15  47814   0.116253   0.087879  -0.5139991   0.0024305  -0.000359  -0.000069   0.000379   0.000352  0.0000088  0.0000123    0.000158    0.000170
+1989  10  16  47815   0.110592   0.086765  -0.5162976   0.0021745  -0.000177  -0.000020   0.000254   0.000259  0.0000070  0.0000071    0.000120    0.000097
+1989  10  17  47816   0.106757   0.085450  -0.5183452   0.0019282   0.000002   0.000034   0.000190   0.000199  0.0000055  0.0000061    0.000095    0.000070
+1989  10  18  47817   0.103366   0.084778  -0.5201838   0.0017545   0.000144  -0.000030   0.000175   0.000185  0.0000053  0.0000057    0.000099    0.000066
+1989  10  19  47818   0.100332   0.083605  -0.5219020   0.0016896   0.000135   0.000007   0.000202   0.000230  0.0000059  0.0000067    0.000111    0.000077
+1989  10  20  47819   0.096889   0.082994  -0.5236102   0.0017347   0.000097   0.000096   0.000340   0.000400  0.0000081  0.0000091    0.000152    0.000121
+1989  10  21  47820   0.092663   0.081939  -0.5254046   0.0018646   0.000096   0.000163   0.000629   0.000714  0.0000122  0.0000078    0.000228    0.000242
+1989  10  22  47821   0.088112   0.080257  -0.5273548   0.0020439   0.000103   0.000173   0.000325   0.000359  0.0000075  0.0000094    0.000129    0.000173
+1989  10  23  47822   0.083895   0.079021  -0.5294932   0.0022295   0.000092   0.000120   0.000276   0.000285  0.0000067  0.0000086    0.000124    0.000160
+1989  10  24  47823   0.080737   0.078468  -0.5318050   0.0023685   0.000029   0.000081   0.000407   0.000360  0.0000097  0.0000079    0.000160    0.000179
+1989  10  25  47824   0.077720   0.077658  -0.5342155   0.0024193  -0.000043   0.000171   0.000354   0.000291  0.0000091  0.0000084    0.000121    0.000133
+1989  10  26  47825   0.074702   0.077548  -0.5366248   0.0023909  -0.000001   0.000315   0.000240   0.000246  0.0000072  0.0000078    0.000095    0.000096
+1989  10  27  47826   0.070825   0.076953  -0.5389764   0.0023307  -0.000005   0.000295   0.000203   0.000243  0.0000065  0.0000064    0.000093    0.000081
+1989  10  28  47827   0.067720   0.076601  -0.5412662   0.0022558  -0.000009   0.000175   0.000175   0.000219  0.0000056  0.0000060    0.000098    0.000075
+1989  10  29  47828   0.064450   0.076560  -0.5434724   0.0021423   0.000050   0.000172   0.000154   0.000191  0.0000054  0.0000061    0.000103    0.000082
+1989  10  30  47829   0.060263   0.076480  -0.5455426   0.0019915   0.000072   0.000243   0.000196   0.000208  0.0000066  0.0000055    0.000110    0.000109
+1989  10  31  47830   0.056390   0.075957  -0.5474563   0.0018375   0.000062   0.000208   0.000191   0.000183  0.0000056  0.0000063    0.000076    0.000090
+1989  11   1  47831   0.052784   0.075259  -0.5492279   0.0017025   0.000021   0.000052   0.000209   0.000185  0.0000061  0.0000081    0.000078    0.000087
+1989  11   2  47832   0.049700   0.075006  -0.5508803   0.0016008   0.000068   0.000000   0.000377   0.000292  0.0000105  0.0000100    0.000129    0.000138
+1989  11   3  47833   0.046922   0.074776  -0.5524549   0.0015588   0.000224   0.000157   0.000583   0.000576  0.0000139  0.0000089    0.000226    0.000292
+1989  11   4  47834   0.043175   0.074376  -0.5540266   0.0016048   0.000314   0.000368   0.000367   0.000390  0.0000072  0.0000103    0.000134    0.000182
+1989  11   5  47835   0.038825   0.074496  -0.5556926   0.0017436   0.000160   0.000355   0.000431   0.000428  0.0000067  0.0000094    0.000112    0.000158
+1989  11   6  47836   0.034718   0.074897  -0.5575368   0.0019596  -0.000059   0.000147   0.000624   0.000461  0.0000116  0.0000131    0.000131    0.000200
+1989  11   7  47837   0.031045   0.074963  -0.5596243   0.0022371  -0.000060   0.000006   0.000745   0.000621  0.0000196  0.0000131    0.000227    0.000298
+1989  11   8  47838   0.025446   0.074965  -0.5620068   0.0025377   0.000075   0.000068   0.000573   0.000525  0.0000145  0.0000136    0.000308    0.000249
+1989  11   9  47839   0.020978   0.074513  -0.5646743   0.0027795   0.000159   0.000185   0.000327   0.000317  0.0000076  0.0000116    0.000152    0.000169
+1989  11  10  47840   0.017786   0.074620  -0.5675204   0.0028550   0.000050   0.000043   0.000399   0.000415  0.0000086  0.0000108    0.000164    0.000189
+1989  11  11  47841   0.014680   0.074815  -0.5703292   0.0027207  -0.000002  -0.000051   0.000734   0.000849  0.0000141  0.0000143    0.000247    0.000259
+1989  11  12  47842   0.010957   0.075049  -0.5729147   0.0024488   0.000066   0.000040   0.000864   0.001048  0.0000201  0.0000156    0.000407    0.000358
+1989  11  13  47843   0.005736   0.075250  -0.5752052   0.0021471   0.000066   0.000114   0.000770   0.000732  0.0000170  0.0000150    0.000356    0.000403
+1989  11  14  47844   0.001654   0.075494  -0.5772212   0.0018944  -0.000011   0.000327   0.000509   0.000422  0.0000099  0.0000127    0.000198    0.000300
+1989  11  15  47845  -0.001021   0.076045  -0.5790343   0.0017432   0.000121   0.000492   0.000439   0.000363  0.0000084  0.0000146    0.000166    0.000256
+1989  11  16  47846  -0.003958   0.077087  -0.5807588   0.0017219   0.000460   0.000412   0.000611   0.000667  0.0000194  0.0000265    0.000349    0.000309
+1989  11  17  47847  -0.008126   0.078411  -0.5825211   0.0018197   0.000693   0.000193   0.000664   0.000784  0.0000447  0.0000179    0.000561    0.000371
+1989  11  18  47848  -0.012732   0.079337  -0.5844219   0.0019971   0.000574   0.000064   0.000553   0.000558  0.0000165  0.0000265    0.000271    0.000332
+1989  11  19  47849  -0.015582   0.079157  -0.5865186   0.0021998   0.000238   0.000196   0.000371   0.000339  0.0000083  0.0000126    0.000150    0.000181
+1989  11  20  47850  -0.020027   0.080766  -0.5888111   0.0023748  -0.000050   0.000459   0.000395   0.000351  0.0000087  0.0000100    0.000179    0.000172
+1989  11  21  47851  -0.024013   0.082152  -0.5912514   0.0024930  -0.000188   0.000568   0.000484   0.000438  0.0000117  0.0000119    0.000316    0.000208
+1989  11  22  47852  -0.026344   0.082534  -0.5937782   0.0025515  -0.000150   0.000437   0.000497   0.000526  0.0000151  0.0000110    0.000355    0.000307
+1989  11  23  47853  -0.029201   0.083794  -0.5963351   0.0025556   0.000022   0.000198   0.000346   0.000367  0.0000104  0.0000109    0.000189    0.000228
+1989  11  24  47854  -0.033151   0.085883  -0.5988709   0.0025047   0.000176   0.000035   0.000227   0.000231  0.0000067  0.0000083    0.000112    0.000152
+1989  11  25  47855  -0.037129   0.087552  -0.6013291   0.0023927   0.000193   0.000056   0.000213   0.000127  0.0000062  0.0000063    0.000096    0.000125
+1989  11  26  47856  -0.040870   0.089246  -0.6036468   0.0022266   0.000172   0.000207   0.000210   0.000089  0.0000060  0.0000071    0.000087    0.000107
+1989  11  27  47857  -0.044935   0.091763  -0.6057810   0.0020415   0.000253   0.000348   0.000292   0.000133  0.0000081  0.0000083    0.000131    0.000150
+1989  11  28  47858  -0.049310   0.093611  -0.6077375   0.0018861   0.000307   0.000407   0.000405   0.000300  0.0000106  0.0000084    0.000256    0.000242
+1989  11  29  47859  -0.053539   0.094232  -0.6095695   0.0017939   0.000309   0.000311   0.000336   0.000330  0.0000088  0.0000096    0.000200    0.000254
+1989  11  30  47860  -0.057223   0.094580  -0.6113489   0.0017704   0.000354   0.000029   0.000354   0.000347  0.0000087  0.0000087    0.000196    0.000253
+1989  12   1  47861  -0.060415   0.095225  -0.6131383   0.0018062   0.000466  -0.000328   0.001267   0.001233  0.0000087  0.0000086    0.000196    0.000253
+1989  12   2  47862  -0.063422   0.096037  -0.6149892   0.0018951   0.000575  -0.000554   0.002496   0.002435  0.0000084  0.0000086    0.000145    0.000177
+1989  12   3  47863  -0.066250   0.096884  -0.6169508   0.0020338   0.000572  -0.000458   0.000393   0.000428  0.0000084  0.0000086    0.000144    0.000175
+1989  12   4  47864  -0.068569   0.098003  -0.6190684   0.0022093   0.000391   0.000020   0.000336   0.000361  0.0000088  0.0000097    0.000152    0.000182
+1989  12   5  47865  -0.070295   0.099630  -0.6213660   0.0023905   0.000073   0.000748   0.000445   0.000429  0.0000109  0.0000111    0.000202    0.000225
+1989  12   6  47866  -0.071974   0.101594  -0.6238294   0.0025324  -0.000223   0.001416   0.000626   0.000508  0.0000133  0.0000124    0.000283    0.000277
+1989  12   7  47867  -0.073925   0.103721  -0.6263955   0.0025864  -0.000354   0.001772   0.001823   0.001434  0.0000138  0.0000136    0.000307    0.000289
+1989  12   8  47868  -0.075982   0.106001  -0.6289572   0.0025171  -0.000281   0.001746   0.005952   0.003880  0.0000139  0.0000119    0.000309    0.000290
+1989  12   9  47869  -0.077985   0.108436  -0.6313857   0.0023213  -0.000062   0.001423   0.005998   0.003951  0.0000099  0.0000084    0.000237    0.000232
+1989  12  10  47870  -0.080192   0.110910  -0.6335707   0.0020415   0.000189   0.000968   0.002121   0.004180  0.0000030  0.0000064    0.000077    0.000080
+1989  12  11  47871  -0.082993   0.113248  -0.6354660   0.0017577   0.000354   0.000538   0.000923   0.001465  0.0000030  0.0000030    0.000077    0.000080
+1989  12  12  47872  -0.086423   0.115341  -0.6371123   0.0015532   0.000375   0.000235   0.000254   0.000383  0.0000030  0.0000031    0.000077    0.000080
+1989  12  13  47873  -0.089866   0.117275  -0.6386182   0.0014743   0.000280   0.000088   0.000154   0.000230  0.0000032  0.0000038    0.000081    0.000083
+1989  12  14  47874  -0.092683   0.119341  -0.6401092   0.0015146   0.000190   0.000046   0.000179   0.000256  0.0000046  0.0000049    0.000100    0.000100
+1989  12  15  47875  -0.095163   0.121898  -0.6416817   0.0016360   0.000271   0.000005   0.000208   0.000289  0.0000067  0.0000062    0.000117    0.000113
+1989  12  16  47876  -0.097507   0.124958  -0.6433933   0.0017968   0.000488  -0.000057   0.000661   0.000854  0.0000078  0.0000094    0.000127    0.000126
+1989  12  17  47877  -0.099576   0.128114  -0.6452672   0.0019616   0.000644  -0.000089   0.000655   0.000607  0.0000122  0.0000078    0.000165    0.000226
+1989  12  18  47878  -0.101334   0.130804  -0.6472964   0.0021008   0.000577  -0.000044   0.000261   0.000209  0.0000078  0.0000085    0.000109    0.000153
+1989  12  19  47879  -0.103141   0.132810  -0.6494453   0.0021881   0.000325   0.000040   0.000158   0.000115  0.0000047  0.0000060    0.000068    0.000096
+1989  12  20  47880  -0.105501   0.134869  -0.6516504   0.0021996   0.000234  -0.000016   0.000160   0.000104  0.0000043  0.0000047    0.000066    0.000093
+1989  12  21  47881  -0.107871   0.137456  -0.6538252   0.0021319   0.000206  -0.000105   0.000190   0.000114  0.0000047  0.0000071    0.000078    0.000106
+1989  12  22  47882  -0.109779   0.140082  -0.6558987   0.0020065   0.000181  -0.000176   0.000306   0.000237  0.0000100  0.0000071    0.000197    0.000176
+1989  12  23  47883  -0.111537   0.142050  -0.6578283   0.0018450   0.000248  -0.000276   0.000315   0.000284  0.0000095  0.0000092    0.000176    0.000153
+1989  12  24  47884  -0.113807   0.143632  -0.6595865   0.0016638   0.000291  -0.000272   0.000307   0.000300  0.0000083  0.0000088    0.000145    0.000132
+1989  12  25  47885  -0.116819   0.145586  -0.6611623   0.0014861   0.000170  -0.000032   0.000383   0.000382  0.0000081  0.0000119    0.000140    0.000129
+1989  12  26  47886  -0.120110   0.148132  -0.6625735   0.0013418  -0.000045   0.000343   0.002717   0.004406  0.0000155  0.0000148    0.000250    0.000281
+1989  12  27  47887  -0.123079   0.150996  -0.6638681   0.0012588  -0.000182   0.000631   0.001423   0.001759  0.0000215  0.0000154    0.000337    0.000555
+1989  12  28  47888  -0.125653   0.153704  -0.6651187   0.0012557  -0.000089   0.000620   0.000587   0.000610  0.0000154  0.0000156    0.000310    0.000344
+1989  12  29  47889  -0.128197   0.155982  -0.6664088   0.0013384   0.000242   0.000231   0.000356   0.000345  0.0000096  0.0000118    0.000255    0.000200
+1989  12  30  47890  -0.130560   0.158018  -0.6678206   0.0014991   0.000629  -0.000407   0.000307   0.000294  0.0000082  0.0000088    0.000233    0.000169
+1989  12  31  47891  -0.132455   0.160134  -0.6694208   0.0017152   0.000874  -0.001013   0.000553   0.000531  0.0000081  0.0000076    0.000230    0.000165
+1990   1   1  47892  -0.133835   0.162671   0.3287520   0.0019497   0.000877  -0.001285   0.002122   0.002187  0.0000071  0.0000076    0.000128    0.000234
+1990   1   2  47893  -0.135000   0.165981   0.3267011   0.0021534   0.000651  -0.001044   0.000417   0.000423  0.0000071  0.0000075    0.000128    0.000249
+1990   1   3  47894  -0.136457   0.170235   0.3244808   0.0022740   0.000297  -0.000344   0.000228   0.000230  0.0000079  0.0000090    0.000142    0.000267
+1990   1   4  47895  -0.138318   0.174875   0.3221953   0.0022715  -0.000032   0.000485   0.000304   0.000304  0.0000108  0.0000125    0.000204    0.000321
+1990   1   5  47896  -0.139804   0.178253   0.3199774   0.0021389  -0.000158   0.000914   0.000504   0.000488  0.0000170  0.0000135    0.000389    0.000386
+1990   1   6  47897  -0.140950   0.180161   0.3179446   0.0019092  -0.000049   0.000773   0.001318   0.001165  0.0000162  0.0000131    0.000337    0.000318
+1990   1   7  47898  -0.142594   0.181797   0.3161662   0.0016392   0.000182   0.000301   0.000894   0.000696  0.0000091  0.0000127    0.000157    0.000190
+1990   1   8  47899  -0.145231   0.184134   0.3146497   0.0013928   0.000359  -0.000099   0.000517   0.000392  0.0000091  0.0000090    0.000156    0.000189
+1990   1   9  47900  -0.148108   0.186587   0.3133437   0.0012259   0.000355  -0.000166   0.000386   0.000308  0.0000089  0.0000089    0.000132    0.000166
+1990   1  10  47901  -0.150386   0.188640   0.3121515   0.0011767   0.000155  -0.000017   0.000313   0.000280  0.0000087  0.0000097    0.000100    0.000130
+1990   1  11  47902  -0.152053   0.190715   0.3109493   0.0012563  -0.000099   0.000048   0.000375   0.000353  0.0000104  0.0000096    0.000128    0.000151
+1990   1  12  47903  -0.153879   0.193577   0.3096155   0.0014406  -0.000028  -0.000011   0.000449   0.000451  0.0000104  0.0000088    0.000169    0.000166
+1990   1  13  47904  -0.156057   0.196856   0.3080671   0.0016701   0.000393  -0.000119   0.000327   0.000325  0.0000071  0.0000087    0.000131    0.000130
+1990   1  14  47905  -0.158014   0.199885   0.3062927   0.0018675   0.000754  -0.000239   0.000268   0.000267  0.0000069  0.0000070    0.000127    0.000127
+1990   1  15  47906  -0.159531   0.202746   0.3043589   0.0019724   0.000821  -0.000305   0.000404   0.000403  0.0000069  0.0000066    0.000127    0.000127
+1990   1  16  47907  -0.160834   0.205530   0.3023757   0.0019677   0.000645  -0.000262   0.002123   0.001922  0.0000063  0.0000066    0.000115    0.000112
+1990   1  17  47908  -0.162299   0.208424   0.3004472   0.0018777   0.000416  -0.000117   0.000511   0.000463  0.0000063  0.0000064    0.000114    0.000111
+1990   1  18  47909  -0.164074   0.211617   0.2986383   0.0017447   0.000298   0.000050   0.000257   0.000225  0.0000065  0.0000070    0.000115    0.000116
+1990   1  19  47910  -0.166211   0.215112   0.2969692   0.0016061   0.000307   0.000121   0.000291   0.000214  0.0000077  0.0000085    0.000116    0.000140
+1990   1  20  47911  -0.169173   0.218502   0.2954296   0.0014788   0.000254  -0.000007   0.000401   0.000248  0.0000105  0.0000218    0.000137    0.000196
+1990   1  21  47912  -0.172834   0.221731   0.2940062   0.0013651   0.000141  -0.000279   0.001280   0.000740  0.0000359  0.0000126    0.000415    0.000477
+1990   1  22  47913  -0.176423   0.224792   0.2926854   0.0012748   0.000149  -0.000498   0.000490   0.000537  0.0000147  0.0000214    0.000237    0.000273
+1990   1  23  47914  -0.179521   0.226829   0.2914350   0.0012350   0.000286  -0.000484   0.000260   0.000268  0.0000068  0.0000113    0.000114    0.000131
+1990   1  24  47915  -0.181847   0.229111   0.2901881   0.0012793   0.000408  -0.000229   0.000288   0.000310  0.0000079  0.0000118    0.000125    0.000152
+1990   1  25  47916  -0.183545   0.232708   0.2888460   0.0014235   0.000361   0.000081   0.000593   0.000594  0.0000168  0.0000247    0.000247    0.000335
+1990   1  26  47917  -0.185190   0.236344   0.2873122   0.0016535   0.000270   0.000227   0.001421   0.001225  0.0000416  0.0000145    0.000643    0.000794
+1990   1  27  47918  -0.187138   0.239717   0.2855187   0.0019374   0.000322   0.000154   0.000488   0.000449  0.0000123  0.0000236    0.000305    0.000263
+1990   1  28  47919  -0.189238   0.243841   0.2834338   0.0022372   0.000494  -0.000036   0.000227   0.000205  0.0000055  0.0000087    0.000153    0.000120
+1990   1  29  47920  -0.191675   0.247915   0.2810625   0.0025111   0.000359  -0.000198   0.000196   0.000159  0.0000052  0.0000074    0.000131    0.000115
+1990   1  30  47921  -0.193582   0.251103   0.2784492   0.0027123  -0.000006  -0.000262   0.000250   0.000159  0.0000092  0.0000111    0.000151    0.000212
+1990   1  31  47922  -0.194210   0.253868   0.2756855   0.0027941  -0.000175  -0.000224   0.000435   0.000275  0.0000169  0.0000134    0.000249    0.000370
+1990   2   1  47923  -0.194996   0.257181   0.2729053   0.0027335  -0.000132  -0.000077   0.000587   0.000710  0.0000176  0.0000124    0.000362    0.000370
+1990   2   2  47924  -0.197191   0.261346   0.2702475   0.0025507   0.000012   0.000133   0.000303   0.000445  0.0000079  0.0000121    0.000207    0.000208
+1990   2   3  47925  -0.199555   0.265763   0.2678112   0.0023074   0.000138   0.000197   0.000384   0.000556  0.0000067  0.0000123    0.000177    0.000181
+1990   2   4  47926  -0.200981   0.269773   0.2656179   0.0020850   0.000230   0.000090   0.000992   0.001223  0.0000168  0.0000364    0.000362    0.000429
+1990   2   5  47927  -0.201590   0.273138   0.2636088   0.0019529   0.000326  -0.000047   0.002500   0.001273  0.0000661  0.0000160    0.000543    0.000854
+1990   2   6  47928  -0.202239   0.276144   0.2616702   0.0019461   0.000382  -0.000108   0.000565   0.000530  0.0000152  0.0000366    0.000290    0.000288
+1990   2   7  47929  -0.203626   0.279310   0.2596755   0.0020573   0.000193  -0.000200   0.000273   0.000249  0.0000070  0.0000119    0.000148    0.000138
+1990   2   8  47930  -0.205271   0.283325   0.2575260   0.0022433  -0.000229  -0.000378   0.000329   0.000256  0.0000086  0.0000133    0.000168    0.000163
+1990   2   9  47931  -0.205673   0.287445   0.2551778   0.0024493  -0.000500  -0.000563   0.000698   0.000413  0.0000196  0.0000358    0.000311    0.000338
+1990   2  10  47932  -0.205499   0.291243   0.2526358   0.0026311  -0.000408  -0.000637   0.001739   0.000976  0.0000631  0.0000239    0.000586    0.000793
+1990   2  11  47933  -0.205292   0.295200   0.2499388   0.0027577  -0.000113  -0.000535   0.000610   0.000634  0.0000282  0.0000368    0.000357    0.000298
+1990   2  12  47934  -0.204871   0.299256   0.2471500   0.0028075   0.000099  -0.000311   0.000262   0.000235  0.0000105  0.0000175    0.000176    0.000131
+1990   2  13  47935  -0.203963   0.303320   0.2443524   0.0027660   0.000107  -0.000096   0.000228   0.000145  0.0000068  0.0000090    0.000154    0.000114
+1990   2  14  47936  -0.202729   0.307168   0.2416408   0.0026442   0.000081  -0.000066   0.000295   0.000187  0.0000075  0.0000078    0.000197    0.000161
+1990   2  15  47937  -0.202353   0.311706   0.2390791   0.0024769   0.000145  -0.000140   0.000313   0.000317  0.0000088  0.0000091    0.000169    0.000185
+1990   2  16  47938  -0.201686   0.316007   0.2366935   0.0022965   0.000217  -0.000123   0.000321   0.000266  0.0000108  0.0000090    0.000136    0.000170
+1990   2  17  47939  -0.201233   0.320184   0.2344834   0.0021243   0.000312  -0.000169   0.000253   0.000191  0.0000091  0.0000091    0.000149    0.000152
+1990   2  18  47940  -0.201328   0.323371   0.2324331   0.0019721   0.000275  -0.000163   0.000223   0.000196  0.0000074  0.0000083    0.000155    0.000170
+1990   2  19  47941  -0.201237   0.326715   0.2305194   0.0018340   0.000106  -0.000214   0.000251   0.000219  0.0000075  0.0000083    0.000138    0.000186
+1990   2  20  47942  -0.201118   0.330145   0.2287393   0.0017094  -0.000116  -0.000357   0.000298   0.000284  0.0000092  0.0000088    0.000158    0.000214
+1990   2  21  47943  -0.202286   0.332905   0.2270710   0.0016491  -0.000124  -0.000391   0.000335   0.000358  0.0000101  0.0000085    0.000140    0.000232
+1990   2  22  47944  -0.203591   0.336148   0.2254109   0.0017210   0.000181  -0.000254   0.000337   0.000305  0.0000079  0.0000086    0.000142    0.000225
+1990   2  23  47945  -0.203749   0.339745   0.2236031   0.0019341   0.000526  -0.000117   0.000450   0.000381  0.0000071  0.0000074    0.000156    0.000224
+1990   2  24  47946  -0.202885   0.343329   0.2215290   0.0022265   0.000683  -0.000109   0.001387   0.001169  0.0000070  0.0000086    0.000159    0.000224
+1990   2  25  47947  -0.201565   0.346882   0.2191572   0.0025097   0.000615  -0.000217   0.001434   0.001732  0.0000101  0.0000088    0.000214    0.000227
+1990   2  26  47948  -0.199768   0.350351   0.2165410   0.0027061   0.000427  -0.000339   0.000279   0.000371  0.0000105  0.0000103    0.000221    0.000227
+1990   2  27  47949  -0.197330   0.353890   0.2137950   0.0027626   0.000271  -0.000364   0.000276   0.000367  0.0000105  0.0000105    0.000220    0.000227
+1990   2  28  47950  -0.194711   0.357870   0.2110698   0.0026597   0.000234  -0.000260   0.000298   0.000386  0.0000105  0.0000105    0.000199    0.000215
+1990   3   1  47951  -0.193252   0.362767   0.2085163   0.0024236   0.000256  -0.000134   0.000396   0.000478  0.0000105  0.0000105    0.000173    0.000198
+1990   3   2  47952  -0.193474   0.368102   0.2062379   0.0021264   0.000232  -0.000112   0.000607   0.000702  0.0000104  0.0000093    0.000172    0.000197
+1990   3   3  47953  -0.193775   0.371990   0.2042512   0.0018594   0.000162  -0.000179   0.000463   0.000463  0.0000081  0.0000092    0.000169    0.000281
+1990   3   4  47954  -0.193555   0.374537   0.2024864   0.0016918   0.000117  -0.000222   0.000300   0.000299  0.0000079  0.0000080    0.000168    0.000301
+1990   3   5  47955  -0.193170   0.377187   0.2008258   0.0016470   0.000155  -0.000146   0.000416   0.000419  0.0000079  0.0000080    0.000168    0.000301
+1990   3   6  47956  -0.192611   0.380661   0.1991525   0.0017112   0.000239   0.000019   0.001014   0.001165  0.0000082  0.0000088    0.000156    0.000256
+1990   3   7  47957  -0.191788   0.384628   0.1973735   0.0018582   0.000271   0.000142   0.000365   0.000436  0.0000098  0.0000088    0.000127    0.000177
+1990   3   8  47958  -0.191036   0.388531   0.1954208   0.0020622   0.000188   0.000093   0.000290   0.000336  0.0000094  0.0000091    0.000130    0.000171
+1990   3   9  47959  -0.190528   0.392269   0.1932501   0.0022925   0.000034  -0.000160   0.000273   0.000294  0.0000084  0.0000087    0.000140    0.000156
+1990   3  10  47960  -0.189888   0.396298   0.1908515   0.0024978  -0.000004  -0.000501   0.000359   0.000377  0.0000079  0.0000081    0.000147    0.000149
+1990   3  11  47961  -0.188501   0.400433   0.1882799   0.0026153   0.000118  -0.000765   0.001067   0.001198  0.0000079  0.0000088    0.000148    0.000148
+1990   3  12  47962  -0.186475   0.404203   0.1856494   0.0026081   0.000270  -0.000833   0.001270   0.001526  0.0000097  0.0000089    0.000177    0.000173
+1990   3  13  47963  -0.184918   0.407712   0.1830895   0.0024871   0.000284  -0.000683   0.000268   0.000294  0.0000099  0.0000101    0.000180    0.000176
+1990   3  14  47964  -0.184748   0.411168   0.1806942   0.0023047   0.000090  -0.000400   0.000280   0.000301  0.0000104  0.0000114    0.000181    0.000181
+1990   3  15  47965  -0.185606   0.414288   0.1784904   0.0021267  -0.000203  -0.000143   0.000367   0.000350  0.0000129  0.0000142    0.000189    0.000204
+1990   3  16  47966  -0.185561   0.416260   0.1764420   0.0019980  -0.000211  -0.000134   0.000582   0.000422  0.0000179  0.0000168    0.000213    0.000231
+1990   3  17  47967  -0.184962   0.418109   0.1744863   0.0019258  -0.000060  -0.000234   0.000730   0.000453  0.0000206  0.0000145    0.000235    0.000239
+1990   3  18  47968  -0.184666   0.421014   0.1725740   0.0018981   0.000003  -0.000285   0.000500   0.000496  0.0000111  0.0000152    0.000257    0.000291
+1990   3  19  47969  -0.183846   0.424581   0.1706674   0.0019173   0.000009  -0.000342   0.000486   0.000554  0.0000098  0.0000105    0.000265    0.000323
+1990   3  20  47970  -0.181716   0.427934   0.1687130   0.0020030   0.000052  -0.000452   0.000639   0.000692  0.0000098  0.0000095    0.000255    0.000315
+1990   3  21  47971  -0.179121   0.431048   0.1666334   0.0021665   0.000134  -0.000496   0.000524   0.000528  0.0000092  0.0000086    0.000126    0.000181
+1990   3  22  47972  -0.176939   0.434625   0.1643535   0.0023932   0.000168  -0.000342   0.000341   0.000299  0.0000073  0.0000070    0.000100    0.000132
+1990   3  23  47973  -0.175048   0.438859   0.1618274   0.0026481   0.000084  -0.000082   0.000219   0.000174  0.0000047  0.0000062    0.000068    0.000081
+1990   3  24  47974  -0.172710   0.442891   0.1590522   0.0029128  -0.000072  -0.000224   0.000181   0.000149  0.0000051  0.0000057    0.000079    0.000083
+1990   3  25  47975  -0.170242   0.446720   0.1560190   0.0031561  -0.000227  -0.000545   0.000202   0.000179  0.0000066  0.0000057    0.000117    0.000101
+1990   3  26  47976  -0.168087   0.450448   0.1527808   0.0032908  -0.000314  -0.000660   0.000613   0.000454  0.0000064  0.0000053    0.000118    0.000106
+1990   3  27  47977  -0.166188   0.454077   0.1494931   0.0032387  -0.000290  -0.000560   0.000286   0.000160  0.0000041  0.0000053    0.000068    0.000092
+1990   3  28  47978  -0.164391   0.457519   0.1463566   0.0029980  -0.000172  -0.000398   0.000154   0.000088  0.0000043  0.0000047    0.000072    0.000092
+1990   3  29  47979  -0.162647   0.460622   0.1435290   0.0026524  -0.000027  -0.000334   0.000188   0.000124  0.0000052  0.0000056    0.000095    0.000094
+1990   3  30  47980  -0.160819   0.463103   0.1410519   0.0023046   0.000059  -0.000306   0.000276   0.000252  0.0000070  0.0000066    0.000117    0.000118
+1990   3  31  47981  -0.158729   0.465435   0.1388911   0.0020361   0.000085  -0.000327   0.000376   0.000337  0.0000079  0.0000074    0.000115    0.000153
+1990   4   1  47982  -0.156692   0.468235   0.1369357   0.0019110   0.000089  -0.000389   0.001051   0.000958  0.0000079  0.0000074    0.000115    0.000166
+1990   4   2  47983  -0.154806   0.471554   0.1350258   0.0019433   0.000085  -0.000391   0.000375   0.000367  0.0000068  0.0000076    0.000121    0.000203
+1990   4   3  47984  -0.152046   0.474927   0.1330180   0.0020901   0.000071  -0.000254   0.000234   0.000231  0.0000073  0.0000082    0.000130    0.000215
+1990   4   4  47985  -0.148153   0.477941   0.1308308   0.0022805   0.000062   0.000000   0.000327   0.000327  0.0000097  0.0000100    0.000177    0.000255
+1990   4   5  47986  -0.145480   0.480858   0.1284572   0.0024447   0.000107   0.000216   0.000416   0.000411  0.0000127  0.0000113    0.000175    0.000243
+1990   4   6  47987  -0.143183   0.483768   0.1259532   0.0025486   0.000156   0.000212   0.000560   0.000543  0.0000129  0.0000109    0.000152    0.000220
+1990   4   7  47988  -0.140073   0.486738   0.1233797   0.0025972   0.000143   0.000041   0.000599   0.000577  0.0000091  0.0000109    0.000278    0.000254
+1990   4   8  47989  -0.136229   0.489871   0.1207829   0.0025996   0.000036  -0.000098   0.000292   0.000287  0.0000089  0.0000090    0.000337    0.000260
+1990   4   9  47990  -0.132202   0.493134   0.1182047   0.0025546  -0.000141  -0.000053   0.000334   0.000328  0.0000089  0.0000089    0.000337    0.000260
+1990   4  10  47991  -0.128429   0.496199   0.1156939   0.0024584  -0.000311   0.000114   0.001034   0.000978  0.0000089  0.0000088    0.000264    0.000213
+1990   4  11  47992  -0.125202   0.499039   0.1133009   0.0023183  -0.000380   0.000196   0.000384   0.000360  0.0000088  0.0000088    0.000170    0.000145
+1990   4  12  47993  -0.122769   0.502350   0.1110616   0.0021556  -0.000297   0.000047   0.000264   0.000252  0.0000087  0.0000085    0.000161    0.000145
+1990   4  13  47994  -0.120738   0.506137   0.1089851   0.0019990  -0.000088  -0.000259   0.000288   0.000275  0.0000082  0.0000082    0.000141    0.000150
+1990   4  14  47995  -0.117987   0.508821   0.1070509   0.0018743   0.000148  -0.000388   0.000344   0.000235  0.0000077  0.0000078    0.000147    0.000170
+1990   4  15  47996  -0.114929   0.511159   0.1052174   0.0017933   0.000207  -0.000168   0.000407   0.000219  0.0000075  0.0000086    0.000160    0.000188
+1990   4  16  47997  -0.112172   0.514014   0.1034410   0.0017640   0.000071   0.000126   0.000527   0.000446  0.0000095  0.0000084    0.000160    0.000148
+1990   4  17  47998  -0.109608   0.516774   0.1016647   0.0018110  -0.000074   0.000072   0.000350   0.000376  0.0000094  0.0000086    0.000154    0.000143
+1990   4  18  47999  -0.107248   0.518939   0.0997953   0.0019696  -0.000073  -0.000379   0.000227   0.000310  0.0000077  0.0000085    0.000139    0.000157
+1990   4  19  48000  -0.105199   0.520753   0.0977059   0.0022288   0.000000  -0.000532   0.000215   0.000304  0.0000075  0.0000080    0.000130    0.000179
+1990   4  20  48001  -0.102012   0.523143   0.0953270   0.0025170   0.000153  -0.000306   0.000275   0.000267  0.0000083  0.0000082    0.000126    0.000158
+1990   4  21  48002  -0.098901   0.525946   0.0926766   0.0027656   0.000235   0.000054   0.000470   0.000337  0.0000088  0.0000085    0.000125    0.000142
+1990   4  22  48003  -0.097000   0.528693   0.0898212   0.0029276   0.000197   0.000256   0.000727   0.000641  0.0000087  0.0000086    0.000144    0.000180
+1990   4  23  48004  -0.095734   0.531195   0.0868665   0.0029603   0.000121   0.000103   0.000333   0.000252  0.0000084  0.0000081    0.000144    0.000175
+1990   4  24  48005  -0.094114   0.533423   0.0839549   0.0028329   0.000079  -0.000297   0.000262   0.000154  0.0000076  0.0000081    0.000134    0.000140
+1990   4  25  48006  -0.092039   0.535095   0.0812458   0.0025539   0.000005  -0.000427   0.000336   0.000196  0.0000078  0.0000084    0.000140    0.000134
+1990   4  26  48007  -0.089657   0.536407   0.0788656   0.0021930  -0.000135  -0.000261   0.000347   0.000319  0.0000092  0.0000080    0.000163    0.000128
+1990   4  27  48008  -0.087390   0.538190   0.0768448   0.0018642  -0.000264  -0.000209   0.000221   0.000221  0.0000081  0.0000085    0.000128    0.000091
+1990   4  28  48009  -0.084880   0.540206   0.0750963   0.0016377  -0.000244  -0.000326   0.000202   0.000230  0.0000078  0.0000080    0.000154    0.000101
+1990   4  29  48010  -0.082502   0.542285   0.0735206   0.0015316  -0.000205  -0.000326   0.000206   0.000263  0.0000078  0.0000080    0.000207    0.000125
+1990   4  30  48011  -0.080466   0.544080   0.0719945   0.0015573  -0.000239  -0.000139   0.000508   0.000596  0.0000083  0.0000108    0.000220    0.000134
+1990   5   1  48012  -0.078390   0.545340   0.0703873   0.0016911  -0.000286   0.000045   0.000918   0.000877  0.0000138  0.0000096    0.000193    0.000153
+1990   5   2  48013  -0.075847   0.546480   0.0686132   0.0018713  -0.000252   0.000015   0.000392   0.000509  0.0000110  0.0000108    0.000158    0.000143
+1990   5   3  48014  -0.072855   0.548600   0.0666587   0.0020289  -0.000105  -0.000247   0.000227   0.000314  0.0000079  0.0000104    0.000117    0.000127
+1990   5   4  48015  -0.069692   0.549680   0.0645754   0.0021312   0.000002  -0.000356   0.000284   0.000369  0.0000098  0.0000128    0.000149    0.000157
+1990   5   5  48016  -0.065954   0.550379   0.0624177   0.0021723   0.000098  -0.000347   0.000566   0.000506  0.0000178  0.0000099    0.000296    0.000229
+1990   5   6  48017  -0.061447   0.552075   0.0602512   0.0021378   0.000201  -0.000340   0.000375   0.000136  0.0000100  0.0000135    0.000158    0.000162
+1990   5   7  48018  -0.056516   0.554398   0.0581600   0.0020254   0.000228  -0.000300   0.000341   0.000132  0.0000091  0.0000091    0.000145    0.000151
+1990   5   8  48019  -0.051559   0.556398   0.0562133   0.0018659   0.000146  -0.000207   0.000307   0.000186  0.0000082  0.0000076    0.000142    0.000147
+1990   5   9  48020  -0.046542   0.557790   0.0544337   0.0017042   0.000082  -0.000141   0.000275   0.000282  0.0000061  0.0000072    0.000120    0.000136
+1990   5  10  48021  -0.042652   0.559639   0.0528020   0.0015690   0.000091  -0.000219   0.000363   0.000404  0.0000063  0.0000141    0.000128    0.000152
+1990   5  11  48022  -0.039200   0.562027   0.0512851   0.0014693   0.000165  -0.000376   0.000911   0.000972  0.0000222  0.0000105    0.000414    0.000436
+1990   5  12  48023  -0.035308   0.563330   0.0498463   0.0014124   0.000255  -0.000430   0.000420   0.000488  0.0000147  0.0000152    0.000219    0.000394
+1990   5  13  48024  -0.031171   0.563650   0.0484389   0.0014159   0.000244  -0.000300   0.000233   0.000276  0.0000082  0.0000113    0.000123    0.000238
+1990   5  14  48025  -0.027176   0.564293   0.0469915   0.0015081   0.000053  -0.000068   0.000225   0.000250  0.0000079  0.0000081    0.000115    0.000130
+1990   5  15  48026  -0.022763   0.565532   0.0454010   0.0016922  -0.000260   0.000022   0.000225   0.000228  0.0000081  0.0000087    0.000111    0.000087
+1990   5  16  48027  -0.017552   0.566680   0.0435895   0.0019105  -0.000510  -0.000148   0.000252   0.000270  0.0000094  0.0000089    0.000139    0.000110
+1990   5  17  48028  -0.012857   0.567448   0.0415694   0.0021208  -0.000444  -0.000216   0.000277   0.000276  0.0000096  0.0000086    0.000158    0.000145
+1990   5  18  48029  -0.009088   0.568061   0.0393479   0.0023329  -0.000092  -0.000070   0.000290   0.000216  0.0000079  0.0000087    0.000134    0.000168
+1990   5  19  48030  -0.005313   0.568875   0.0369185   0.0025281   0.000273   0.000080   0.000291   0.000213  0.0000078  0.0000076    0.000132    0.000169
+1990   5  20  48031  -0.000960   0.569912   0.0343233   0.0026487   0.000422   0.000097   0.000248   0.000188  0.0000074  0.0000069    0.000120    0.000151
+1990   5  21  48032   0.003657   0.570854   0.0316653   0.0026432   0.000294  -0.000014   0.000158   0.000128  0.0000061  0.0000068    0.000088    0.000106
+1990   5  22  48033   0.007872   0.571413   0.0290825   0.0024960   0.000001  -0.000157   0.000163   0.000136  0.0000061  0.0000061    0.000089    0.000108
+1990   5  23  48034   0.011434   0.571650   0.0267041   0.0022401  -0.000239  -0.000225   0.000175   0.000164  0.0000061  0.0000055    0.000093    0.000117
+1990   5  24  48035   0.014941   0.572014   0.0246049   0.0019437  -0.000180  -0.000230   0.000157   0.000147  0.0000049  0.0000051    0.000091    0.000118
+1990   5  25  48036   0.018639   0.572366   0.0227885   0.0016843  -0.000080  -0.000134   0.000143   0.000134  0.0000041  0.0000044    0.000088    0.000097
+1990   5  26  48037   0.022519   0.572592   0.0211886   0.0015357  -0.000048   0.000045   0.000141   0.000136  0.0000039  0.0000051    0.000087    0.000086
+1990   5  27  48038   0.026343   0.572837   0.0196695   0.0015418  -0.000061   0.000214   0.000187   0.000208  0.0000062  0.0000062    0.000110    0.000138
+1990   5  28  48039   0.029837   0.573224   0.0180750   0.0016810  -0.000163   0.000294   0.000213   0.000267  0.0000084  0.0000076    0.000121    0.000197
+1990   5  29  48040   0.033114   0.573737   0.0163022   0.0018724  -0.000323   0.000243   0.000239   0.000297  0.0000091  0.0000104    0.000131    0.000201
+1990   5  30  48041   0.036678   0.574163   0.0143451   0.0020280  -0.000427   0.000083   0.000454   0.000516  0.0000123  0.0000108    0.000183    0.000210
+1990   5  31  48042   0.040824   0.574284   0.0122709   0.0021043  -0.000369  -0.000109   0.000703   0.000727  0.0000125  0.0000100    0.000187    0.000211
+1990   6   1  48043   0.045023   0.574101   0.0101616   0.0021044  -0.000177  -0.000253   0.000509   0.000480  0.0000076  0.0000098    0.000116    0.000224
+1990   6   2  48044   0.048685   0.574015   0.0080832   0.0020451   0.000020  -0.000302   0.000323   0.000313  0.0000071  0.0000074    0.000108    0.000227
+1990   6   3  48045   0.051939   0.574514   0.0060877   0.0019327   0.000108  -0.000284   0.000420   0.000408  0.0000071  0.0000084    0.000109    0.000226
+1990   6   4  48046   0.055599   0.575619   0.0042289   0.0017683   0.000088  -0.000287   0.000507   0.000515  0.0000097  0.0000090    0.000162    0.000173
+1990   6   5  48047   0.059882   0.575914   0.0025563   0.0015683   0.000048  -0.000386   0.000463   0.000481  0.0000108  0.0000096    0.000188    0.000165
+1990   6   6  48048   0.064269   0.574693   0.0010902   0.0013736   0.000059  -0.000556   0.000546   0.000586  0.0000095  0.0000092    0.000169    0.000159
+1990   6   7  48049   0.068045   0.573653  -0.0002005   0.0012271   0.000092  -0.000640   0.000384   0.000454  0.0000076  0.0000092    0.000138    0.000147
+1990   6   8  48050   0.071422   0.572985  -0.0013803   0.0011457   0.000076  -0.000517   0.000489   0.000580  0.0000088  0.0000144    0.000161    0.000174
+1990   6   9  48051   0.074784   0.572389  -0.0025128   0.0011290   0.000011  -0.000356   0.000976   0.001116  0.0000213  0.0000170    0.000370    0.000461
+1990   6  10  48052   0.078638   0.571139  -0.0036613   0.0011859  -0.000040  -0.000376   0.000904   0.001018  0.0000252  0.0000186    0.000428    0.000592
+1990   6  11  48053   0.082570   0.569722  -0.0049067   0.0013218  -0.000007  -0.000497   0.000479   0.000520  0.0000159  0.0000169    0.000385    0.000297
+1990   6  12  48054   0.087157   0.569310  -0.0063227   0.0015146   0.000029  -0.000473   0.000266   0.000287  0.0000085  0.0000125    0.000227    0.000159
+1990   6  13  48055   0.092012   0.569023  -0.0079460   0.0017213  -0.000079  -0.000161   0.000296   0.000309  0.0000090  0.0000101    0.000171    0.000174
+1990   6  14  48056   0.096532   0.568412  -0.0097648   0.0019030  -0.000126   0.000226   0.000492   0.000480  0.0000116  0.0000101    0.000157    0.000239
+1990   6  15  48057   0.100507   0.567683  -0.0117391   0.0020383   0.000002   0.000413   0.001580   0.001564  0.0000112  0.0000092    0.000154    0.000222
+1990   6  16  48058   0.104070   0.567032  -0.0138162   0.0021123   0.000150   0.000286   0.000460   0.000554  0.0000068  0.0000090    0.000149    0.000114
+1990   6  17  48059   0.107731   0.566555  -0.0159287   0.0021077   0.000122  -0.000075   0.000306   0.000370  0.0000068  0.0000074    0.000150    0.000115
+1990   6  18  48060   0.111768   0.566083  -0.0179929   0.0020132  -0.000130  -0.000436   0.000458   0.000553  0.0000080  0.0000135    0.000173    0.000137
+1990   6  19  48061   0.115679   0.565308  -0.0199232   0.0018379  -0.000361  -0.000519   0.000721   0.000878  0.0000201  0.0000160    0.000324    0.000402
+1990   6  20  48062   0.119190   0.563929  -0.0216556   0.0016141  -0.000308  -0.000248   0.000562   0.000747  0.0000241  0.0000185    0.000371    0.000728
+1990   6  21  48063   0.122714   0.562250  -0.0231649   0.0013944  -0.000064   0.000037   0.000427   0.000528  0.0000169  0.0000166    0.000248    0.000375
+1990   6  22  48064   0.127153   0.560009  -0.0244821   0.0012402   0.000143   0.000026   0.000303   0.000237  0.0000091  0.0000122    0.000148    0.000151
+1990   6  23  48065   0.130349   0.558513  -0.0256941   0.0012093   0.000045  -0.000347   0.000265   0.000128  0.0000076  0.0000082    0.000126    0.000096
+1990   6  24  48066   0.132966   0.557502  -0.0269416   0.0013168  -0.000119  -0.000595   0.000350   0.000151  0.0000074  0.0000075    0.000122    0.000084
+1990   6  25  48067   0.136493   0.555879  -0.0283463   0.0015069  -0.000115  -0.000459   0.000365   0.000217  0.0000073  0.0000073    0.000099    0.000105
+1990   6  26  48068   0.140583   0.553485  -0.0299482   0.0016889  -0.000011  -0.000186   0.000240   0.000167  0.0000073  0.0000072    0.000097    0.000115
+1990   6  27  48069   0.144426   0.550853  -0.0316985   0.0017897   0.000050  -0.000088   0.000248   0.000189  0.0000071  0.0000071    0.000108    0.000118
+1990   6  28  48070   0.148241   0.548525  -0.0334959   0.0017958   0.000045  -0.000141   0.000220   0.000129  0.0000068  0.0000071    0.000099    0.000090
+1990   6  29  48071   0.151787   0.546867  -0.0352623   0.0017441  -0.000012  -0.000211   0.000221   0.000089  0.0000070  0.0000082    0.000086    0.000071
+1990   6  30  48072   0.155102   0.545705  -0.0369645   0.0016663  -0.000104  -0.000201   0.000325   0.000140  0.0000096  0.0000092    0.000124    0.000111
+1990   7   1  48073   0.159762   0.543960  -0.0385830   0.0015575  -0.000192  -0.000060   0.000371   0.000372  0.0000114  0.0000092    0.000174    0.000229
+1990   7   2  48074   0.165168   0.542128  -0.0400741   0.0013997  -0.000227   0.000040   0.000251   0.000316  0.0000088  0.0000105    0.000151    0.000163
+1990   7   3  48075   0.169801   0.540552  -0.0413840   0.0012129  -0.000102  -0.000143   0.000297   0.000357  0.0000096  0.0000103    0.000157    0.000187
+1990   7   4  48076   0.174306   0.538655  -0.0425086   0.0010538  -0.000100  -0.000249   0.000439   0.000512  0.0000119  0.0000122    0.000174    0.000290
+1990   7   5  48077   0.179030   0.536481  -0.0435072   0.0009642  -0.000262  -0.000108   0.000184   0.000315  0.0000148  0.0000122    0.000237    0.000225
+1990   7   6  48078   0.183028   0.534683  -0.0444578   0.0009363  -0.000299   0.000027   0.000171   0.000278  0.0000125  0.0000117    0.000210    0.000208
+1990   7   7  48079   0.185743   0.533374  -0.0454034   0.0009286  -0.000094  -0.000068   0.000179   0.000242  0.0000086  0.0000100    0.000144    0.000198
+1990   7   8  48080   0.188312   0.531498  -0.0463385   0.0009397  -0.000110  -0.000199   0.000201   0.000245  0.0000075  0.0000091    0.000125    0.000193
+1990   7   9  48081   0.191516   0.528556  -0.0473031   0.0010212  -0.000352  -0.000252   0.000553   0.000767  0.0000096  0.0000092    0.000139    0.000178
+1990   7  10  48082   0.195068   0.525205  -0.0483935   0.0011948  -0.000395  -0.000272   0.000466   0.000748  0.0000108  0.0000108    0.000149    0.000185
+1990   7  11  48083   0.198318   0.522321  -0.0496937   0.0014146  -0.000034  -0.000284   0.000335   0.000402  0.0000120  0.0000102    0.000163    0.000207
+1990   7  12  48084   0.202495   0.520394  -0.0512097   0.0015959   0.000119  -0.000122   0.000257   0.000254  0.0000095  0.0000113    0.000162    0.000186
+1990   7  13  48085   0.206131   0.518706  -0.0528594   0.0016788  -0.000002   0.000050   0.000328   0.000329  0.0000106  0.0000132    0.000187    0.000247
+1990   7  14  48086   0.209437   0.515862  -0.0545328   0.0016564   0.000077   0.000060   0.000749   0.000840  0.0000169  0.0000169    0.000308    0.000488
+1990   7  15  48087   0.212526   0.512718  -0.0561366   0.0015432   0.000416  -0.000094   0.001381   0.001511  0.0000231  0.0000135    0.000522    0.000544
+1990   7  16  48088   0.215527   0.510393  -0.0575904   0.0013523   0.000675  -0.000266   0.000534   0.000504  0.0000101  0.0000161    0.000187    0.000191
+1990   7  17  48089   0.218901   0.508335  -0.0588270   0.0011071   0.000505  -0.000275   0.000335   0.000316  0.0000091  0.0000102    0.000167    0.000167
+1990   7  18  48090   0.222620   0.505730  -0.0598107   0.0008520  -0.000088  -0.000116   0.000355   0.000362  0.0000103  0.0000105    0.000193    0.000174
+1990   7  19  48091   0.225958   0.503222  -0.0605582   0.0006638  -0.000381  -0.000174   0.000359   0.000313  0.0000119  0.0000112    0.000183    0.000173
+1990   7  20  48092   0.228816   0.500959  -0.0611803   0.0006203  -0.000224  -0.000329   0.000337   0.000217  0.0000120  0.0000110    0.000147    0.000151
+1990   7  21  48093   0.231729   0.498318  -0.0618422   0.0007289  -0.000081  -0.000178   0.000336   0.000202  0.0000102  0.0000113    0.000173    0.000133
+1990   7  22  48094   0.234698   0.495700  -0.0626680   0.0009496   0.000118  -0.000169   0.000304   0.000254  0.0000105  0.0000114    0.000190    0.000162
+1990   7  23  48095   0.237229   0.492068  -0.0637477   0.0012140   0.000234  -0.000246   0.000330   0.000361  0.0000126  0.0000139    0.000203    0.000203
+1990   7  24  48096   0.239925   0.488382  -0.0650785   0.0014246   0.000181  -0.000254   0.000519   0.000464  0.0000173  0.0000167    0.000229    0.000199
+1990   7  25  48097   0.243490   0.486093  -0.0665646   0.0015198   0.000022  -0.000194   0.000696   0.000600  0.0000209  0.0000162    0.000211    0.000230
+1990   7  26  48098   0.246821   0.483587  -0.0680832   0.0015108  -0.000216  -0.000117   0.000538   0.000618  0.0000151  0.0000154    0.000235    0.000223
+1990   7  27  48099   0.249771   0.479740  -0.0695584   0.0014569  -0.000472  -0.000109   0.000384   0.000470  0.0000099  0.0000133    0.000209    0.000152
+1990   7  28  48100   0.252599   0.476435  -0.0709795   0.0013906  -0.000407  -0.000059   0.000381   0.000444  0.0000115  0.0000133    0.000251    0.000176
+1990   7  29  48101   0.255047   0.473384  -0.0723318   0.0013054  -0.000188  -0.000023   0.000537   0.000560  0.0000167  0.0000114    0.000370    0.000259
+1990   7  30  48102   0.257065   0.469851  -0.0735907   0.0011962  -0.000081  -0.000037   0.000751   0.000738  0.0000112  0.0000137    0.000177    0.000206
+1990   7  31  48103   0.259279   0.466332  -0.0747317   0.0010656  -0.000104  -0.000012   0.000528   0.000529  0.0000106  0.0000113    0.000171    0.000181
+1990   8   1  48104   0.261789   0.462351  -0.0757365   0.0009299  -0.000158   0.000102   0.000395   0.000382  0.0000114  0.0000122    0.000230    0.000158
+1990   8   2  48105   0.263432   0.458578  -0.0766120   0.0008330  -0.000140   0.000207   0.000467   0.000474  0.0000138  0.0000142    0.000372    0.000213
+1990   8   3  48106   0.264775   0.454858  -0.0774265   0.0008228  -0.000051   0.000176   0.000656   0.000770  0.0000171  0.0000166    0.000403    0.000310
+1990   8   4  48107   0.266807   0.451919  -0.0782823   0.0009070   0.000082  -0.000107   0.000682   0.000762  0.0000193  0.0000188    0.000343    0.000318
+1990   8   5  48108   0.269544   0.448785  -0.0792629   0.0010658   0.000134  -0.000449   0.000794   0.000839  0.0000204  0.0000191    0.000321    0.000360
+1990   8   6  48109   0.272037   0.445632  -0.0804305   0.0012830   0.000039  -0.000597   0.000966   0.000975  0.0000189  0.0000161    0.000288    0.000331
+1990   8   7  48110   0.274202   0.442309  -0.0818350   0.0015385  -0.000118  -0.000480   0.000403   0.000439  0.0000119  0.0000159    0.000175    0.000188
+1990   8   8  48111   0.276492   0.438388  -0.0834984   0.0017902  -0.000214  -0.000171   0.000424   0.000453  0.0000128  0.0000156    0.000187    0.000199
+1990   8   9  48112   0.278968   0.434204  -0.0853897   0.0019760  -0.000192   0.000166   0.000648   0.000599  0.0000192  0.0000187    0.000271    0.000283
+1990   8  10  48113   0.280605   0.431193  -0.0874126   0.0020458  -0.000109   0.000405   0.000817   0.000715  0.0000245  0.0000164    0.000468    0.000427
+1990   8  11  48114   0.282033   0.428751  -0.0894409   0.0019899  -0.000149   0.000372   0.000428   0.000420  0.0000135  0.0000181    0.000291    0.000253
+1990   8  12  48115   0.283428   0.425048  -0.0913604   0.0018389  -0.000425  -0.000032   0.000425   0.000456  0.0000118  0.0000126    0.000242    0.000239
+1990   8  13  48116   0.284945   0.422522  -0.0931034   0.0016363  -0.000689  -0.000352   0.000520   0.000539  0.0000118  0.0000116    0.000242    0.000251
+1990   8  14  48117   0.286591   0.420752  -0.0946382   0.0014240  -0.000646  -0.000380   0.000577   0.000423  0.0000114  0.0000118    0.000245    0.000215
+1990   8  15  48118   0.287911   0.416843  -0.0959753   0.0012602  -0.000267  -0.000318   0.000567   0.000455  0.0000118  0.0000104    0.000240    0.000203
+1990   8  16  48119   0.288741   0.413296  -0.0971952   0.0012041   0.000110  -0.000196   0.000442   0.000315  0.0000093  0.0000105    0.000214    0.000144
+1990   8  17  48120   0.290370   0.410739  -0.0984237   0.0012783  -0.000068   0.000099   0.000417   0.000307  0.0000092  0.0000098    0.000210    0.000122
+1990   8  18  48121   0.292280   0.407962  -0.0997847   0.0014622  -0.000560   0.000353   0.000436   0.000349  0.0000102  0.0000075    0.000216    0.000119
+1990   8  19  48122   0.293846   0.404476  -0.1013640   0.0017024  -0.000875   0.000370   0.000544   0.000472  0.0000058  0.0000061    0.000183    0.000115
+1990   8  20  48123   0.295620   0.400540  -0.1031838   0.0019316  -0.000824   0.000189   0.000313   0.000290  0.0000020  0.0000039    0.000091    0.000094
+1990   8  21  48124   0.297998   0.396712  -0.1052025   0.0020958  -0.000479  -0.000045   0.000188   0.000174  0.0000020  0.0000022    0.000091    0.000094
+1990   8  22  48125   0.300184   0.393111  -0.1073406   0.0021699  -0.000083  -0.000185   0.000171   0.000158  0.0000023  0.0000047    0.000102    0.000103
+1990   8  23  48126   0.301639   0.389685  -0.1095085   0.0021528   0.000154  -0.000198   0.000360   0.000308  0.0000075  0.0000073    0.000173    0.000149
+1990   8  24  48127   0.302740   0.386432  -0.1116210   0.0020544   0.000164  -0.000170   0.000421   0.000349  0.0000122  0.0000095    0.000186    0.000155
+1990   8  25  48128   0.303807   0.383154  -0.1136038   0.0018932   0.000014  -0.000203   0.000562   0.000411  0.0000115  0.0000118    0.000220    0.000188
+1990   8  26  48129   0.304791   0.379561  -0.1154045   0.0016979  -0.000151  -0.000348   0.000616   0.000429  0.0000113  0.0000114    0.000230    0.000198
+1990   8  27  48130   0.305475   0.375593  -0.1170054   0.0015029  -0.000212  -0.000559   0.000613   0.000427  0.0000113  0.0000115    0.000230    0.000198
+1990   8  28  48131   0.305761   0.371626  -0.1184236   0.0013373  -0.000159  -0.000697   0.000476   0.000328  0.0000116  0.0000115    0.000222    0.000177
+1990   8  29  48132   0.305737   0.368094  -0.1196995   0.0012184  -0.000060  -0.000626   0.000454   0.000313  0.0000117  0.0000114    0.000220    0.000173
+1990   8  30  48133   0.305623   0.364921  -0.1208840   0.0011565   0.000035  -0.000318   0.000387   0.000317  0.0000111  0.0000108    0.000214    0.000167
+1990   8  31  48134   0.305720   0.361350  -0.1220376   0.0011648   0.000166   0.000084   0.000348   0.000368  0.0000099  0.0000105    0.000199    0.000155
+1990   9   1  48135   0.306214   0.356995  -0.1232376   0.0012612   0.000401   0.000368   0.000442   0.000465  0.0000098  0.0000099    0.000199    0.000154
+1990   9   2  48136   0.306943   0.352823  -0.1245798   0.0014559   0.000697   0.000455   0.000642   0.000649  0.0000098  0.0000091    0.000199    0.000154
+1990   9   3  48137   0.307898   0.349297  -0.1261612   0.0017323   0.000903   0.000417   0.001499   0.002510  0.0000084  0.0000091    0.000205    0.000232
+1990   9   4  48138   0.309117   0.346117  -0.1280432   0.0020364   0.000863   0.000390   0.000912   0.001123  0.0000084  0.0000088    0.000208    0.000248
+1990   9   5  48139   0.310548   0.342721  -0.1302152   0.0022878   0.000530   0.000456   0.000538   0.000602  0.0000091  0.0000108    0.000223    0.000270
+1990   9   6  48140   0.311953   0.339028  -0.1325827   0.0024113   0.000033   0.000568   0.000627   0.000689  0.0000131  0.0000125    0.000279    0.000352
+1990   9   7  48141   0.312071   0.335325  -0.1349922   0.0023739  -0.000290   0.000514   0.000520   0.000589  0.0000158  0.0000128    0.000249    0.000248
+1990   9   8  48142   0.311984   0.331500  -0.1372889   0.0021989  -0.000414   0.000215   0.000423   0.000336  0.0000124  0.0000130    0.000169    0.000163
+1990   9   9  48143   0.312750   0.326963  -0.1393660   0.0019426  -0.000338   0.000021   0.000393   0.000227  0.0000101  0.0000109    0.000126    0.000122
+1990   9  10  48144   0.313417   0.321927  -0.1411749   0.0016621  -0.000026   0.000250   0.000353   0.000285  0.0000095  0.0000102    0.000154    0.000131
+1990   9  11  48145   0.312738   0.318082  -0.1427139   0.0014281   0.000067   0.000212   0.000385   0.000357  0.0000103  0.0000105    0.000223    0.000128
+1990   9  12  48146   0.312361   0.314602  -0.1440690   0.0013276   0.000057  -0.000086   0.000392   0.000376  0.0000115  0.0000111    0.000215    0.000135
+1990   9  13  48147   0.312061   0.310131  -0.1454094   0.0013978   0.000060  -0.000267   0.000451   0.000452  0.0000119  0.0000105    0.000186    0.000149
+1990   9  14  48148   0.311658   0.305766  -0.1468975   0.0015968   0.000025  -0.000213   0.000404   0.000403  0.0000094  0.0000103    0.000204    0.000185
+1990   9  15  48149   0.311325   0.301947  -0.1486216   0.0018477   0.000006   0.000015   0.000281   0.000286  0.0000087  0.0000090    0.000216    0.000204
+1990   9  16  48150   0.310784   0.298223  -0.1505942   0.0020850   0.000058   0.000252   0.000279   0.000284  0.0000087  0.0000087    0.000216    0.000204
+1990   9  17  48151   0.309926   0.294407  -0.1527759   0.0022647   0.000164   0.000382   0.000317   0.000320  0.0000087  0.0000095    0.000216    0.000204
+1990   9  18  48152   0.308956   0.290739  -0.1550956   0.0023606   0.000245   0.000390   0.002344   0.001024  0.0000103  0.0000096    0.000284    0.000172
+1990   9  19  48153   0.308195   0.287383  -0.1574644   0.0023628   0.000219   0.000338   0.001012   0.000764  0.0000105  0.0000105    0.000291    0.000171
+1990   9  20  48154   0.307745   0.284027  -0.1597920   0.0022806   0.000071   0.000305   0.000517   0.000481  0.0000107  0.0000110    0.000278    0.000177
+1990   9  21  48155   0.307440   0.279996  -0.1620059   0.0021378  -0.000114   0.000339   0.000502   0.000476  0.0000115  0.0000114    0.000244    0.000210
+1990   9  22  48156   0.307278   0.276788  -0.1640596   0.0019681  -0.000156   0.000420   0.000669   0.000615  0.0000122  0.0000117    0.000226    0.000249
+1990   9  23  48157   0.306415   0.274122  -0.1659447   0.0018065  -0.000020   0.000475   0.000836   0.000741  0.0000118  0.0000104    0.000213    0.000230
+1990   9  24  48158   0.304499   0.270996  -0.1676839   0.0016780   0.000146   0.000434   0.000223   0.000229  0.0000086  0.0000103    0.000154    0.000130
+1990   9  25  48159   0.302025   0.267019  -0.1693188   0.0015978   0.000182   0.000282   0.000226   0.000233  0.0000089  0.0000093    0.000158    0.000133
+1990   9  26  48160   0.299840   0.262508  -0.1709024   0.0015751   0.000066   0.000085   0.000278   0.000299  0.0000100  0.0000094    0.000177    0.000148
+1990   9  27  48161   0.298473   0.258182  -0.1724940   0.0016180   0.000030   0.000010   0.000299   0.000281  0.0000100  0.0000091    0.000182    0.000183
+1990   9  28  48162   0.297793   0.254279  -0.1741628   0.0017348   0.000156   0.000060   0.000232   0.000186  0.0000082  0.0000089    0.000159    0.000329
+1990   9  29  48163   0.297283   0.250494  -0.1759848   0.0019248   0.000279   0.000092   0.000235   0.000199  0.0000079  0.0000079    0.000139    0.000328
+1990   9  30  48164   0.296623   0.246646  -0.1780279   0.0021694   0.000273   0.000062   0.000265   0.000282  0.0000075  0.0000077    0.000114    0.000271
+1990  10   1  48165   0.295866   0.242855  -0.1803295   0.0024270   0.000115   0.000033   0.000378   0.000412  0.0000075  0.0000091    0.000113    0.000267
+1990  10   2  48166   0.295205   0.239358  -0.1828735   0.0026430  -0.000107   0.000086   0.000784   0.000858  0.0000106  0.0000097    0.000177    0.000182
+1990  10   3  48167   0.294635   0.236383  -0.1855893   0.0027686  -0.000254   0.000242   0.000551   0.000570  0.0000118  0.0000097    0.000214    0.000172
+1990  10   4  48168   0.293835   0.233888  -0.1883687   0.0027766  -0.000236   0.000408   0.000577   0.000514  0.0000087  0.0000089    0.000195    0.000174
+1990  10   5  48169   0.292414   0.231174  -0.1910950   0.0026621  -0.000097   0.000385   0.000321   0.000213  0.0000059  0.0000072    0.000152    0.000161
+1990  10   6  48170   0.290446   0.227644  -0.1936561   0.0024377   0.000038   0.000072   0.000217   0.000114  0.0000058  0.0000063    0.000125    0.000124
+1990  10   7  48171   0.287655   0.223997  -0.1959581   0.0021545   0.000076  -0.000279   0.000224   0.000110  0.0000067  0.0000153    0.000133    0.000128
+1990  10   8  48172   0.284561   0.220593  -0.1979820   0.0019018   0.000006  -0.000402   0.000827   0.000399  0.0000248  0.0000139    0.000446    0.000458
+1990  10   9  48173   0.282357   0.216902  -0.1998005   0.0017552  -0.000111  -0.000259   0.000912   0.000872  0.0000211  0.0000171    0.000411    0.000443
+1990  10  10  48174   0.281407   0.212741  -0.2015378   0.0017405  -0.000150  -0.000018   0.000414   0.000427  0.0000095  0.0000151    0.000195    0.000211
+1990  10  11  48175   0.280845   0.208490  -0.2033188   0.0018341  -0.000049   0.000097   0.000395   0.000414  0.0000092  0.0000099    0.000180    0.000216
+1990  10  12  48176   0.278605   0.204684  -0.2052266   0.0019949   0.000054  -0.000144   0.000332   0.000438  0.0000102  0.0000097    0.000191    0.000207
+1990  10  13  48177   0.275677   0.201374  -0.2073109   0.0021778   0.000092  -0.000316   0.000283   0.000415  0.0000101  0.0000091    0.000188    0.000180
+1990  10  14  48178   0.273401   0.198093  -0.2095695   0.0023270   0.000073  -0.000103   0.000275   0.000326  0.0000079  0.0000088    0.000140    0.000153
+1990  10  15  48179   0.271025   0.194431  -0.2119423   0.0024012  -0.000015   0.000206   0.000301   0.000333  0.0000074  0.0000080    0.000128    0.000147
+1990  10  16  48180   0.267968   0.190583  -0.2143445   0.0023921  -0.000156   0.000239   0.000423   0.000486  0.0000081  0.0000094    0.000138    0.000157
+1990  10  17  48181   0.265522   0.187310  -0.2166996   0.0023160  -0.000293  -0.000001   0.000429   0.000567  0.0000115  0.0000094    0.000181    0.000202
+1990  10  18  48182   0.263315   0.184716  -0.2189552   0.0021979  -0.000335  -0.000208   0.000319   0.000316  0.0000107  0.0000100    0.000192    0.000209
+1990  10  19  48183   0.260752   0.181793  -0.2210833   0.0020560  -0.000160  -0.000144   0.000259   0.000217  0.0000086  0.0000091    0.000183    0.000192
+1990  10  20  48184   0.257937   0.177988  -0.2230656   0.0018975   0.000199   0.000142   0.000264   0.000259  0.0000076  0.0000086    0.000138    0.000150
+1990  10  21  48185   0.254626   0.174620  -0.2248864   0.0017484   0.000291   0.000215   0.000317   0.000339  0.0000085  0.0000139    0.000146    0.000159
+1990  10  22  48186   0.251184   0.172122  -0.2265784   0.0016585   0.000119   0.000015   0.000545   0.000535  0.0000202  0.0000110    0.000376    0.000328
+1990  10  23  48187   0.248448   0.169542  -0.2282245   0.0016562   0.000055  -0.000152   0.000328   0.000349  0.0000134  0.0000163    0.000255    0.000211
+1990  10  24  48188   0.246730   0.166155  -0.2299147   0.0017293   0.000226  -0.000083   0.000336   0.000354  0.0000123  0.0000106    0.000226    0.000218
+1990  10  25  48189   0.245418   0.162684  -0.2317070   0.0018482   0.000323   0.000084   0.000247   0.000266  0.0000077  0.0000096    0.000134    0.000159
+1990  10  26  48190   0.243778   0.160015  -0.2336322   0.0019986   0.000000   0.000085   0.000255   0.000258  0.0000069  0.0000079    0.000105    0.000145
+1990  10  27  48191   0.241357   0.157271  -0.2357203   0.0021944  -0.000277  -0.000044   0.000427   0.000412  0.0000081  0.0000096    0.000116    0.000161
+1990  10  28  48192   0.239147   0.154027  -0.2380300   0.0024458  -0.000184  -0.000058   0.000451   0.000554  0.0000124  0.0000093    0.000235    0.000163
+1990  10  29  48193   0.237975   0.151254  -0.2406108   0.0027087   0.000060   0.000156   0.000325   0.000378  0.0000106  0.0000103    0.000211    0.000147
+1990  10  30  48194   0.235971   0.149498  -0.2434323   0.0029140   0.000156   0.000267   0.000262   0.000277  0.0000082  0.0000108    0.000137    0.000148
+1990  10  31  48195   0.233748   0.147520  -0.2464078   0.0030111   0.000099   0.000250   0.000340   0.000347  0.0000110  0.0000116    0.000173    0.000224
+1990  11   1  48196   0.232091   0.145156  -0.2494116   0.0029682  -0.000005   0.000195   0.000428   0.000421  0.0000151  0.0000118    0.000199    0.000344
+1990  11   2  48197   0.230012   0.142382  -0.2523014   0.0027812  -0.000063   0.000143   0.000496   0.000487  0.0000127  0.0000117    0.000162    0.000292
+1990  11   3  48198   0.227534   0.139842  -0.2549470   0.0024843  -0.000035   0.000094   0.000608   0.000649  0.0000083  0.0000101    0.000123    0.000166
+1990  11   4  48199   0.225317   0.137892  -0.2572713   0.0021571   0.000042   0.000009   0.000317   0.000371  0.0000076  0.0000085    0.000115    0.000149
+1990  11   5  48200   0.222738   0.135573  -0.2592918   0.0019046   0.000113  -0.000128   0.000321   0.000378  0.0000086  0.0000127    0.000131    0.000169
+1990  11   6  48201   0.218957   0.133145  -0.2611283   0.0018106   0.000163  -0.000247   0.000510   0.000559  0.0000177  0.0000099    0.000302    0.000384
+1990  11   7  48202   0.214116   0.131349  -0.2629592   0.0018942   0.000200  -0.000244   0.000326   0.000350  0.0000111  0.0000125    0.000198    0.000249
+1990  11   8  48203   0.209926   0.129238  -0.2649452   0.0021018   0.000202  -0.000080   0.000263   0.000271  0.0000073  0.0000082    0.000134    0.000181
+1990  11   9  48204   0.207105   0.126444  -0.2671678   0.0023414   0.000165   0.000158   0.000251   0.000236  0.0000052  0.0000068    0.000099    0.000145
+1990  11  10  48205   0.204796   0.123794  -0.2696136   0.0025308   0.000115   0.000329   0.000301   0.000284  0.0000062  0.0000156    0.000117    0.000172
+1990  11  11  48206   0.202193   0.121708  -0.2722046   0.0026284   0.000068   0.000335   0.001136   0.001256  0.0000260  0.0000441    0.000487    0.000563
+1990  11  12  48207   0.199198   0.119830  -0.2748437   0.0026334   0.000031   0.000192   0.001520   0.002785  0.0000820  0.0000197    0.000860    0.000711
+1990  11  13  48208   0.196169   0.117610  -0.2774473   0.0025632   0.000011   0.000054   0.000498   0.000494  0.0000133  0.0000449    0.000178    0.000219
+1990  11  14  48209   0.193415   0.115203  -0.2799510   0.0024340  -0.000002   0.000015   0.000221   0.000212  0.0000077  0.0000117    0.000104    0.000130
+1990  11  15  48210   0.190525   0.113106  -0.2823030   0.0022569  -0.000025   0.000059   0.000271   0.000259  0.0000101  0.0000113    0.000134    0.000169
+1990  11  16  48211   0.187419   0.110871  -0.2844609   0.0020516  -0.000048   0.000098   0.000453   0.000408  0.0000148  0.0000095    0.000191    0.000241
+1990  11  17  48212   0.184239   0.108424  -0.2864114   0.0018546  -0.000070   0.000082   0.000488   0.000277  0.0000090  0.0000115    0.000128    0.000189
+1990  11  18  48213   0.180998   0.106361  -0.2881835   0.0017072  -0.000074   0.000034   0.000313   0.000192  0.0000081  0.0000083    0.000120    0.000184
+1990  11  19  48214   0.177576   0.104988  -0.2898450   0.0016401  -0.000007   0.000018   0.000233   0.000200  0.0000077  0.0000082    0.000118    0.000204
+1990  11  20  48215   0.174306   0.103511  -0.2914863   0.0016593   0.000264   0.000076   0.000239   0.000287  0.0000083  0.0000105    0.000131    0.000232
+1990  11  21  48216   0.171366   0.101572  -0.2931864   0.0017478   0.000586   0.000211   0.000395   0.000647  0.0000133  0.0000110    0.000237    0.000281
+1990  11  22  48217   0.168532   0.099663  -0.2950023   0.0018880   0.000659   0.000358   0.000414   0.000700  0.0000138  0.0000101    0.000253    0.000281
+1990  11  23  48218   0.165574   0.098205  -0.2969782   0.0020696   0.000414   0.000391   0.000229   0.000242  0.0000070  0.0000101    0.000129    0.000157
+1990  11  24  48219   0.162439   0.097146  -0.2991504   0.0022799   0.000030   0.000229   0.000213   0.000222  0.0000065  0.0000067    0.000119    0.000146
+1990  11  25  48220   0.159196   0.096152  -0.3015386   0.0024939  -0.000246  -0.000069   0.000210   0.000216  0.0000065  0.0000063    0.000118    0.000145
+1990  11  26  48221   0.155848   0.094932  -0.3041287   0.0026750  -0.000295  -0.000263   0.000158   0.000128  0.0000061  0.0000066    0.000083    0.000123
+1990  11  27  48222   0.152269   0.093463  -0.3068671   0.0027883  -0.000174  -0.000144   0.000169   0.000135  0.0000067  0.0000080    0.000088    0.000133
+1990  11  28  48223   0.148346   0.092018  -0.3096724   0.0028120  -0.000040   0.000233   0.000275   0.000222  0.0000100  0.0000077    0.000144    0.000201
+1990  11  29  48224   0.144119   0.090942  -0.3124526   0.0027356  -0.000027   0.000453   0.000320   0.000315  0.0000087  0.0000083    0.000162    0.000182
+1990  11  30  48225   0.139587   0.089708  -0.3151109   0.0025636  -0.000159   0.000290   0.000219   0.000251  0.0000067  0.0000075    0.000095    0.000133
+1990  12   1  48226   0.135171   0.088232  -0.3175667   0.0023374  -0.000258   0.000010   0.000193   0.000234  0.0000063  0.0000064    0.000080    0.000121
+1990  12   2  48227   0.131418   0.086968  -0.3198010   0.0021367  -0.000191  -0.000089   0.000309   0.000371  0.0000061  0.0000056    0.000081    0.000121
+1990  12   3  48228   0.128466   0.086191  -0.3218805   0.0020397   0.000002   0.000051   0.000579   0.000507  0.0000048  0.0000055    0.000190    0.000147
+1990  12   4  48229   0.125843   0.085632  -0.3239308   0.0020756   0.000191   0.000305   0.000367   0.000320  0.0000048  0.0000052    0.000193    0.000148
+1990  12   5  48230   0.122676   0.084508  -0.3260719   0.0022059   0.000270   0.000484   0.000339   0.000294  0.0000056  0.0000103    0.000213    0.000169
+1990  12   6  48231   0.118698   0.082840  -0.3283582   0.0023571   0.000265   0.000501   0.000637   0.000714  0.0000157  0.0000133    0.000331    0.000379
+1990  12   7  48232   0.114548   0.081513  -0.3307751   0.0024751   0.000275   0.000401   0.000850   0.001061  0.0000210  0.0000123    0.000341    0.000434
+1990  12   8  48233   0.111041   0.080951  -0.3332796   0.0025396   0.000320   0.000284   0.000519   0.000549  0.0000090  0.0000146    0.000169    0.000191
+1990  12   9  48234   0.108148   0.080718  -0.3358208   0.0025405   0.000339   0.000232   0.000258   0.000266  0.0000082  0.0000082    0.000157    0.000175
+1990  12  10  48235   0.104824   0.080099  -0.3383322   0.0024612   0.000260   0.000250   0.000217   0.000222  0.0000075  0.0000074    0.000156    0.000176
+1990  12  11  48236   0.101297   0.078776  -0.3407236   0.0022909   0.000081   0.000246   0.000214   0.000218  0.0000065  0.0000078    0.000151    0.000183
+1990  12  12  48237   0.098315   0.077211  -0.3429030   0.0020482  -0.000117   0.000165   0.000266   0.000276  0.0000081  0.0000080    0.000143    0.000214
+1990  12  13  48238   0.094939   0.076500  -0.3448166   0.0017933  -0.000232   0.000184   0.000294   0.000300  0.0000096  0.0000079    0.000140    0.000212
+1990  12  14  48239   0.090725   0.076034  -0.3464937   0.0015977  -0.000141   0.000372   0.000225   0.000217  0.0000076  0.0000087    0.000131    0.000159
+1990  12  15  48240   0.086589   0.074458  -0.3480238   0.0014876   0.000182   0.000604   0.000225   0.000228  0.0000078  0.0000078    0.000098    0.000165
+1990  12  16  48241   0.083364   0.072748  -0.3494870   0.0014357   0.000443   0.000795   0.000229   0.000238  0.0000081  0.0000097    0.000086    0.000171
+1990  12  17  48242   0.080697   0.071834  -0.3509172   0.0014117   0.000467   0.000795   0.000361   0.000161  0.0000115  0.0000090    0.000136    0.000135
+1990  12  18  48243   0.077615   0.071257  -0.3523331   0.0014277   0.000333   0.000482   0.000366   0.000158  0.0000100  0.0000090    0.000148    0.000125
+1990  12  19  48244   0.073891   0.070405  -0.3537933   0.0015314   0.000178  -0.000041   0.000260   0.000186  0.0000065  0.0000082    0.000107    0.000115
+1990  12  20  48245   0.070751   0.069661  -0.3554118   0.0017321   0.000021  -0.000319   0.000340   0.000314  0.0000064  0.0000150    0.000108    0.000125
+1990  12  21  48246   0.068248   0.069293  -0.3572663   0.0019734  -0.000109  -0.000293   0.001176   0.001081  0.0000235  0.0000237    0.000360    0.000363
+1990  12  22  48247   0.064898   0.069227  -0.3593586   0.0021928  -0.000147  -0.000252   0.000958   0.001199  0.0000410  0.0000216    0.000465    0.000301
+1990  12  23  48248   0.060207   0.069333  -0.3616424   0.0023584  -0.000061  -0.000298   0.000407   0.000651  0.0000197  0.0000301    0.000236    0.000140
+1990  12  24  48249   0.055281   0.069404  -0.3640564   0.0024619   0.000126  -0.000325   0.000522   0.000838  0.0000191  0.0000188    0.000230    0.000136
+1990  12  25  48250   0.051236   0.069350  -0.3665392   0.0024995   0.000334  -0.000252   0.001046   0.001440  0.0000180  0.0000142    0.000226    0.000138
+1990  12  26  48251   0.047946   0.069333  -0.3690238   0.0024614   0.000459  -0.000111   0.000439   0.000240  0.0000094  0.0000139    0.000165    0.000211
+1990  12  27  48252   0.044344   0.069615  -0.3714325   0.0023423   0.000432   0.000010   0.000361   0.000198  0.0000099  0.0000106    0.000174    0.000226
+1990  12  28  48253   0.039780   0.070181  -0.3736905   0.0021596   0.000269   0.000029   0.000397   0.000265  0.0000119  0.0000095    0.000211    0.000292
+1990  12  29  48254   0.034862   0.070528  -0.3757549   0.0019626   0.000081  -0.000029   0.000271   0.000259  0.0000092  0.0000097    0.000171    0.000265
+1990  12  30  48255   0.030112   0.070419  -0.3776436   0.0018229   0.000039  -0.000113   0.000217   0.000213  0.0000074  0.0000081    0.000140    0.000217
+1990  12  31  48256   0.025545   0.070119  -0.3794463   0.0018047   0.000187  -0.000171   0.000208   0.000204  0.0000070  0.0000071    0.000133    0.000206
+1991   1   1  48257   0.021270   0.070078   0.6186998   0.0019320   0.000395  -0.000148   0.000909   0.000883  0.0000067  0.0000069    0.000136    0.000133
+1991   1   2  48258   0.017516   0.070628   0.6166596   0.0021703   0.000468  -0.000011   0.000558   0.000583  0.0000068  0.0000070    0.000138    0.000131
+1991   1   3  48259   0.014416   0.071687   0.6143571   0.0024353   0.000292   0.000211   0.000379   0.000407  0.0000072  0.0000086    0.000144    0.000139
+1991   1   4  48260   0.011808   0.072667   0.6118135   0.0026297  -0.000057   0.000430   0.000378   0.000424  0.0000103  0.0000139    0.000177    0.000183
+1991   1   5  48261   0.009047   0.073700   0.6091364   0.0027007  -0.000298   0.000515   0.000493   0.000604  0.0000205  0.0000230    0.000230    0.000272
+1991   1   6  48262   0.006048   0.075104   0.6064503   0.0026609  -0.000260   0.000420   0.001015   0.000881  0.0000356  0.0000171    0.000490    0.000464
+1991   1   7  48263   0.003346   0.076624   0.6038424   0.0025507  -0.000025   0.000232   0.000485   0.000485  0.0000137  0.0000213    0.000303    0.000231
+1991   1   8  48264   0.000927   0.077905   0.6013635   0.0023992   0.000194   0.000105   0.000251   0.000263  0.0000070  0.0000111    0.000163    0.000122
+1991   1   9  48265  -0.001995   0.078934   0.5990477   0.0022201   0.000226   0.000150   0.000304   0.000304  0.0000086  0.0000099    0.000198    0.000146
+1991   1  10  48266  -0.005362   0.079860   0.5969187   0.0020425   0.000100   0.000171   0.000454   0.000302  0.0000128  0.0000113    0.000220    0.000213
+1991   1  11  48267  -0.009013   0.080930   0.5949512   0.0019083  -0.000056   0.000115   0.000525   0.000213  0.0000141  0.0000118    0.000156    0.000269
+1991   1  12  48268  -0.012967   0.082169   0.5930843   0.0018271  -0.000104   0.000147   0.000461   0.000231  0.0000108  0.0000109    0.000158    0.000218
+1991   1  13  48269  -0.016788   0.083225   0.5912744   0.0017866   0.000103   0.000273   0.000406   0.000367  0.0000077  0.0000092    0.000175    0.000160
+1991   1  14  48270  -0.020163   0.083680   0.5894867   0.0017935   0.000538   0.000375   0.000569   0.000532  0.0000076  0.0000106    0.000177    0.000159
+1991   1  15  48271  -0.023704   0.083424   0.5876647   0.0018635   0.000836   0.000362   0.000865   0.000763  0.0000136  0.0000116    0.000207    0.000227
+1991   1  16  48272  -0.027380   0.083431   0.5857415   0.0019903   0.000651   0.000221   0.000551   0.000403  0.0000155  0.0000118    0.000203    0.000243
+1991   1  17  48273  -0.030892   0.084506   0.5836729   0.0021395   0.000065   0.000025   0.000350   0.000272  0.0000101  0.0000113    0.000173    0.000201
+1991   1  18  48274  -0.035151   0.085495   0.5814606   0.0022758   0.000024  -0.000087   0.000212   0.000223  0.0000071  0.0000082    0.000146    0.000169
+1991   1  19  48275  -0.039645   0.085936   0.5791305   0.0023825   0.000439  -0.000078   0.000237   0.000278  0.0000064  0.0000067    0.000137    0.000160
+1991   1  20  48276  -0.043913   0.086191   0.5767156   0.0024514   0.000849   0.000013   0.000775   0.000869  0.0000063  0.0000049    0.000136    0.000158
+1991   1  21  48277  -0.048024   0.086654   0.5742556   0.0024734   0.001009   0.000113   0.000858   0.000854  0.0000035  0.0000049    0.000094    0.000080
+1991   1  22  48278  -0.051599   0.087464   0.5717996   0.0024366   0.000844   0.000155   0.000143   0.000148  0.0000034  0.0000036    0.000093    0.000079
+1991   1  23  48279  -0.054207   0.088491   0.5694096   0.0023296   0.000457   0.000114   0.000147   0.000152  0.0000037  0.0000043    0.000097    0.000083
+1991   1  24  48280  -0.055923   0.089629   0.5671572   0.0021531   0.000049   0.000022   0.000201   0.000203  0.0000052  0.0000065    0.000123    0.000107
+1991   1  25  48281  -0.057576   0.091019   0.5651038   0.0019467  -0.000242  -0.000048   0.000399   0.000385  0.0000094  0.0000084    0.000160    0.000148
+1991   1  26  48282  -0.060070   0.093014   0.5632445   0.0017889  -0.000338  -0.000057   0.000996   0.000935  0.0000117  0.0000090    0.000160    0.000159
+1991   1  27  48283  -0.063399   0.095285   0.5614890   0.0017493  -0.000237  -0.000036   0.000347   0.000571  0.0000087  0.0000105    0.000107    0.000135
+1991   1  28  48284  -0.066763   0.096751   0.5597006   0.0018467  -0.000015  -0.000046   0.000269   0.000436  0.0000092  0.0000105    0.000113    0.000142
+1991   1  29  48285  -0.069986   0.097313   0.5577570   0.0020396   0.000213  -0.000123   0.000323   0.000427  0.0000123  0.0000089    0.000142    0.000176
+1991   1  30  48286  -0.074337   0.098901   0.5556038   0.0022663   0.000332  -0.000248   0.000333   0.000355  0.0000087  0.0000085    0.000179    0.000205
+1991   1  31  48287  -0.079588   0.101429   0.5532347   0.0024787   0.000328  -0.000305   0.000290   0.000302  0.0000047  0.0000068    0.000168    0.000168
+1991   2   1  48288  -0.084243   0.103112   0.5506799   0.0026304   0.000275  -0.000182   0.000363   0.000374  0.0000050  0.0000061    0.000165    0.000158
+1991   2   2  48289  -0.088557   0.104446   0.5480172   0.0026815   0.000228   0.000078   0.000344   0.000360  0.0000074  0.0000064    0.000162    0.000142
+1991   2   3  48290  -0.092809   0.105630   0.5453553   0.0026189   0.000204   0.000319   0.000347   0.000363  0.0000078  0.0000081    0.000161    0.000141
+1991   2   4  48291  -0.096779   0.106662   0.5428039   0.0024614   0.000216   0.000400   0.000649   0.000567  0.0000088  0.0000084    0.000146    0.000158
+1991   2   5  48292  -0.100131   0.107692   0.5404417   0.0022529   0.000251   0.000289   0.000441   0.000386  0.0000091  0.0000088    0.000143    0.000162
+1991   2   6  48293  -0.103245   0.109326   0.5382953   0.0020465   0.000264   0.000075   0.000294   0.000281  0.0000087  0.0000088    0.000143    0.000157
+1991   2   7  48294  -0.106351   0.111033   0.5363375   0.0018846   0.000183  -0.000057   0.000225   0.000236  0.0000085  0.0000100    0.000149    0.000154
+1991   2   8  48295  -0.109165   0.111827   0.5345089   0.0017839   0.000014  -0.000001   0.000348   0.000361  0.0000112  0.0000124    0.000189    0.000203
+1991   2   9  48296  -0.111655   0.112662   0.5327474   0.0017473  -0.000017   0.000059   0.000822   0.000814  0.0000163  0.0000107    0.000252    0.000298
+1991   2  10  48297  -0.114047   0.114720   0.5309889   0.0017763   0.000174   0.000013   0.000953   0.000975  0.0000103  0.0000100    0.000224    0.000274
+1991   2  11  48298  -0.116892   0.117633   0.5291698   0.0018656   0.000414  -0.000063   0.000159   0.000167  0.0000036  0.0000069    0.000108    0.000131
+1991   2  12  48299  -0.120480   0.120304   0.5272362   0.0020039   0.000487  -0.000067   0.000157   0.000165  0.0000035  0.0000034    0.000108    0.000124
+1991   2  13  48300  -0.124374   0.122268   0.5251470   0.0021786   0.000306   0.000002   0.000172   0.000175  0.0000032  0.0000036    0.000103    0.000105
+1991   2  14  48301  -0.127376   0.124626   0.5228728   0.0023725   0.000090  -0.000152   0.000202   0.000181  0.0000038  0.0000043    0.000086    0.000092
+1991   2  15  48302  -0.130161   0.127359   0.5204072   0.0025545   0.000006  -0.000327   0.000295   0.000240  0.0000055  0.0000057    0.000077    0.000089
+1991   2  16  48303  -0.133428   0.130219   0.5177818   0.0026813   0.000030  -0.000254   0.000561   0.000460  0.0000076  0.0000071    0.000123    0.000128
+1991   2  17  48304  -0.136868   0.133440   0.5150738   0.0027119   0.000054  -0.000057   0.000459   0.000399  0.0000087  0.0000082    0.000215    0.000172
+1991   2  18  48305  -0.140197   0.136799   0.5123928   0.0026280  -0.000006   0.000055   0.000567   0.000488  0.0000087  0.0000107    0.000216    0.000173
+1991   2  19  48306  -0.143001   0.139783   0.5098493   0.0024478  -0.000101   0.000021   0.000975   0.000835  0.0000126  0.0000117    0.000187    0.000241
+1991   2  20  48307  -0.145384   0.142420   0.5075168   0.0022249  -0.000108  -0.000067   0.000537   0.000503  0.0000146  0.0000114    0.000181    0.000272
+1991   2  21  48308  -0.148200   0.145670   0.5054016   0.0020316   0.000036  -0.000093   0.000269   0.000298  0.0000102  0.0000106    0.000154    0.000213
+1991   2  22  48309  -0.151538   0.149548   0.5034369   0.0019280   0.000225  -0.000068   0.000159   0.000188  0.0000066  0.0000084    0.000117    0.000149
+1991   2  23  48310  -0.154781   0.153092   0.5015136   0.0019349   0.000295  -0.000073   0.000156   0.000182  0.0000065  0.0000070    0.000115    0.000147
+1991   2  24  48311  -0.157698   0.155566   0.4995268   0.0020401   0.000233  -0.000108   0.000215   0.000127  0.0000073  0.0000070    0.000115    0.000189
+1991   2  25  48312  -0.160495   0.157102   0.4973951   0.0022201   0.000153  -0.000118   0.000239   0.000120  0.0000076  0.0000074    0.000115    0.000202
+1991   2  26  48313  -0.163297   0.158674   0.4950614   0.0024492   0.000161  -0.000065   0.000226   0.000137  0.0000075  0.0000077    0.000120    0.000149
+1991   2  27  48314  -0.165757   0.161604   0.4924934   0.0026896   0.000236  -0.000009   0.000242   0.000265  0.0000079  0.0000096    0.000143    0.000108
+1991   2  28  48315  -0.167608   0.165783   0.4897026   0.0028846   0.000277  -0.000036   0.000369   0.000398  0.0000117  0.0000140    0.000188    0.000145
+1991   3   1  48316  -0.169396   0.168294   0.4867618   0.0029784   0.000198  -0.000102   0.000703   0.000539  0.0000201  0.0000151    0.000254    0.000245
+1991   3   2  48317  -0.171574   0.170302   0.4837880   0.0029441   0.000109  -0.000126   0.000982   0.000654  0.0000185  0.0000158    0.000263    0.000302
+1991   3   3  48318  -0.173782   0.173510   0.4809077   0.0027903   0.000102  -0.000069   0.000794   0.000913  0.0000115  0.0000144    0.000232    0.000248
+1991   3   4  48319  -0.175634   0.177033   0.4782264   0.0025511   0.000119   0.000049   0.000394   0.000505  0.0000104  0.0000109    0.000223    0.000232
+1991   3   5  48320  -0.177593   0.180246   0.4758092   0.0022703   0.000075   0.000166   0.000449   0.000581  0.0000104  0.0000116    0.000222    0.000231
+1991   3   6  48321  -0.179634   0.183228   0.4736778   0.0019922  -0.000013   0.000214   0.000822   0.001261  0.0000128  0.0000120    0.000196    0.000180
+1991   3   7  48322  -0.181570   0.186445   0.4718090   0.0017622  -0.000043   0.000167   0.000496   0.000789  0.0000136  0.0000120    0.000190    0.000172
+1991   3   8  48323  -0.183803   0.189991   0.4701325   0.0016245   0.000069   0.000051   0.000458   0.000626  0.0000111  0.0000109    0.000143    0.000156
+1991   3   9  48324  -0.186244   0.193398   0.4685357   0.0016061   0.000301  -0.000053   0.000275   0.000360  0.0000082  0.0000096    0.000098    0.000130
+1991   3  10  48325  -0.188296   0.196737   0.4668951   0.0016985   0.000535  -0.000072   0.000223   0.000293  0.0000081  0.0000099    0.000097    0.000129
+1991   3  11  48326  -0.189547   0.200251   0.4651158   0.0018646   0.000642  -0.000007   0.000327   0.000399  0.0000115  0.0000104    0.000149    0.000163
+1991   3  12  48327  -0.190165   0.203958   0.4631481   0.0020638   0.000561   0.000076   0.000393   0.000452  0.0000127  0.0000087    0.000180    0.000174
+1991   3  13  48328  -0.190833   0.207838   0.4609779   0.0022711   0.000343   0.000099   0.000262   0.000275  0.0000058  0.0000080    0.000161    0.000115
+1991   3  14  48329  -0.192336   0.212002   0.4586055   0.0024808   0.000158   0.000017   0.000151   0.000140  0.0000033  0.0000046    0.000117    0.000075
+1991   3  15  48330  -0.194547   0.216360   0.4560279   0.0026940   0.000128  -0.000126   0.000122   0.000100  0.0000033  0.0000039    0.000095    0.000084
+1991   3  16  48331  -0.195711   0.220103   0.4532425   0.0028687  -0.000002  -0.000108   0.000150   0.000120  0.0000045  0.0000057    0.000118    0.000110
+1991   3  17  48332  -0.196541   0.223463   0.4503260   0.0029280  -0.000120  -0.000028   0.000278   0.000243  0.0000081  0.0000063    0.000234    0.000138
+1991   3  18  48333  -0.198373   0.227038   0.4474242   0.0028382  -0.000051  -0.000059   0.000514   0.000551  0.0000081  0.0000078    0.000163    0.000163
+1991   3  19  48334  -0.200603   0.230691   0.4446780   0.0026330   0.000077  -0.000153   0.000397   0.000435  0.0000075  0.0000081    0.000142    0.000172
+1991   3  20  48335  -0.202132   0.234095   0.4421676   0.0023879   0.000119  -0.000205   0.000434   0.000481  0.0000081  0.0000107    0.000152    0.000186
+1991   3  21  48336  -0.202783   0.237271   0.4398892   0.0021781   0.000108  -0.000180   0.000532   0.000644  0.0000139  0.0000115    0.000235    0.000341
+1991   3  22  48337  -0.203483   0.240683   0.4377807   0.0020435   0.000165  -0.000122   0.000422   0.000516  0.0000148  0.0000123    0.000245    0.000358
+1991   3  23  48338  -0.204703   0.244612   0.4357633   0.0019970   0.000259  -0.000103   0.000246   0.000270  0.0000108  0.0000124    0.000165    0.000134
+1991   3  24  48339  -0.205916   0.248827   0.4337505   0.0020505   0.000253  -0.000149   0.000240   0.000231  0.0000100  0.0000103    0.000150    0.000120
+1991   3  25  48340  -0.207120   0.253064   0.4316376   0.0022151   0.000156  -0.000213   0.000263   0.000210  0.0000099  0.0000095    0.000148    0.000124
+1991   3  26  48341  -0.209659   0.257415   0.4293125   0.0024673   0.000371  -0.000151   0.000249   0.000204  0.0000090  0.0000092    0.000156    0.000126
+1991   3  27  48342  -0.212824   0.261606   0.4267141   0.0027247   0.000534  -0.000047   0.000339   0.000288  0.0000084  0.0000064    0.000161    0.000125
+1991   3  28  48343  -0.215096   0.265763   0.4238905   0.0028864   0.000432   0.000001   0.000289   0.000275  0.0000037  0.0000060    0.000144    0.000099
+1991   3  29  48344  -0.216091   0.269720   0.4209777   0.0028992   0.000162  -0.000051   0.000192   0.000187  0.0000035  0.0000036    0.000142    0.000097
+1991   3  30  48345  -0.216385   0.273258   0.4181278   0.0027815  -0.000070  -0.000192   0.000190   0.000186  0.0000035  0.0000036    0.000142    0.000097
+1991   3  31  48346  -0.216669   0.276596   0.4154405   0.0025970  -0.000137  -0.000365   0.000205   0.000198  0.0000038  0.0000071    0.000146    0.000104
+1991   4   1  48347  -0.217278   0.280277   0.4129452   0.0024066  -0.000050  -0.000489   0.000475   0.000353  0.0000108  0.0000058    0.000179    0.000208
+1991   4   2  48348  -0.218140   0.284665   0.4106248   0.0022417   0.000098  -0.000495   0.000354   0.000320  0.0000079  0.0000080    0.000170    0.000170
+1991   4   3  48349  -0.218897   0.289544   0.4084491   0.0021061   0.000209  -0.000366   0.000239   0.000265  0.0000052  0.0000071    0.000153    0.000121
+1991   4   4  48350  -0.219084   0.294038   0.4063936   0.0019997   0.000273  -0.000124   0.000311   0.000344  0.0000063  0.0000081    0.000183    0.000135
+1991   4   5  48351  -0.219002   0.298380   0.4044274   0.0019343   0.000349   0.000075   0.000634   0.000605  0.0000110  0.0000095    0.000247    0.000175
+1991   4   6  48352  -0.219390   0.302470   0.4025016   0.0019256   0.000443   0.000123   0.000932   0.000817  0.0000126  0.0000091    0.000232    0.000175
+1991   4   7  48353  -0.220226   0.306313   0.4005541   0.0019799   0.000488   0.000042   0.000258   0.000257  0.0000072  0.0000099    0.000120    0.000112
+1991   4   8  48354  -0.220923   0.310184   0.3985238   0.0020889   0.000424  -0.000082   0.000251   0.000249  0.0000072  0.0000076    0.000120    0.000112
+1991   4   9  48355  -0.221022   0.314228   0.3963643   0.0022317   0.000260  -0.000166   0.000277   0.000269  0.0000080  0.0000107    0.000131    0.000120
+1991   4  10  48356  -0.220742   0.318252   0.3940562   0.0023836   0.000112  -0.000199   0.000463   0.000393  0.0000143  0.0000154    0.000200    0.000167
+1991   4  11  48357  -0.220429   0.322052   0.3916024   0.0025284   0.000097  -0.000212   0.000678   0.000569  0.0000227  0.0000158    0.000312    0.000260
+1991   4  12  48358  -0.219730   0.325893   0.3890163   0.0026517   0.000177  -0.000189   0.000639   0.000697  0.0000173  0.0000155    0.000275    0.000270
+1991   4  13  48359  -0.218614   0.330030   0.3863281   0.0027264   0.000249  -0.000122   0.000371   0.000426  0.0000083  0.0000119    0.000133    0.000132
+1991   4  14  48360  -0.217282   0.334360   0.3836005   0.0027146   0.000215  -0.000037   0.000384   0.000475  0.0000065  0.0000067    0.000104    0.000105
+1991   4  15  48361  -0.215885   0.338351   0.3809342   0.0025887   0.000103   0.000003   0.000138   0.000269  0.0000052  0.0000058    0.000084    0.000104
+1991   4  16  48362  -0.214555   0.341986   0.3784437   0.0023633   0.000040  -0.000062   0.000111   0.000211  0.0000051  0.0000054    0.000083    0.000105
+1991   4  17  48363  -0.213452   0.345663   0.3762046   0.0021050   0.000086  -0.000204   0.000192   0.000312  0.0000057  0.0000052    0.000098    0.000123
+1991   4  18  48364  -0.212757   0.349618   0.3742071   0.0019102   0.000134  -0.000301   0.000217   0.000223  0.0000053  0.0000045    0.000138    0.000188
+1991   4  19  48365  -0.212638   0.353874   0.3723439   0.0018616   0.000082  -0.000240   0.000129   0.000132  0.0000034  0.0000041    0.000096    0.000128
+1991   4  20  48366  -0.212633   0.358062   0.3704445   0.0019774   0.000052  -0.000053   0.000109   0.000112  0.0000028  0.0000034    0.000082    0.000109
+1991   4  21  48367  -0.212317   0.361950   0.3683631   0.0022016   0.000124   0.000108   0.000126   0.000128  0.0000033  0.0000059    0.000085    0.000116
+1991   4  22  48368  -0.211801   0.365675   0.3660343   0.0024519   0.000236   0.000084   0.000238   0.000220  0.0000089  0.0000059    0.000094    0.000141
+1991   4  23  48369  -0.211430   0.369519   0.3634702   0.0026645   0.000292  -0.000142   0.000233   0.000206  0.0000085  0.0000083    0.000099    0.000139
+1991   4  24  48370  -0.211346   0.373628   0.3607290   0.0028063   0.000263  -0.000391   0.000230   0.000179  0.0000077  0.0000096    0.000145    0.000139
+1991   4  25  48371  -0.211313   0.377816   0.3578879   0.0028560   0.000237  -0.000378   0.000366   0.000282  0.0000107  0.0000109    0.000237    0.000191
+1991   4  26  48372  -0.211033   0.381677   0.3550478   0.0027984   0.000248  -0.000119   0.000614   0.000641  0.0000141  0.0000115    0.000234    0.000218
+1991   4  27  48373  -0.210525   0.384986   0.3523163   0.0026463   0.000235   0.000060   0.000502   0.000613  0.0000123  0.0000118    0.000193    0.000186
+1991   4  28  48374  -0.210034   0.388010   0.3497699   0.0024433   0.000171   0.000017   0.000299   0.000351  0.0000095  0.0000098    0.000144    0.000165
+1991   4  29  48375  -0.209651   0.391396   0.3474318   0.0022413   0.000091  -0.000095   0.000200   0.000231  0.0000072  0.0000084    0.000107    0.000142
+1991   4  30  48376  -0.209247   0.395549   0.3452781   0.0020763   0.000050  -0.000072   0.000200   0.000232  0.0000072  0.0000083    0.000107    0.000142
+1991   5   1  48377  -0.208561   0.400032   0.3432620   0.0019601   0.000067   0.000092   0.000266   0.000300  0.0000094  0.0000144    0.000138    0.000173
+1991   5   2  48378  -0.207411   0.403785   0.3413368   0.0018901   0.000101   0.000130   0.000772   0.000623  0.0000215  0.0000140    0.000292    0.000263
+1991   5   3  48379  -0.205877   0.406397   0.3394597   0.0018660   0.000101  -0.000112   0.000622   0.000521  0.0000185  0.0000191    0.000257    0.000250
+1991   5   4  48380  -0.204278   0.408991   0.3375842   0.0019015   0.000091  -0.000256   0.000647   0.000556  0.0000168  0.0000142    0.000235    0.000241
+1991   5   5  48381  -0.202825   0.412497   0.3356395   0.0020152   0.000096  -0.000141   0.001090   0.001033  0.0000099  0.0000117    0.000144    0.000176
+1991   5   6  48382  -0.201414   0.416745   0.3335420   0.0022002   0.000109  -0.000020   0.000315   0.000301  0.0000066  0.0000078    0.000098    0.000128
+1991   5   7  48383  -0.199769   0.421140   0.3312339   0.0024153   0.000122  -0.000147   0.000210   0.000202  0.0000057  0.0000053    0.000096    0.000115
+1991   5   8  48384  -0.197760   0.425162   0.3287136   0.0026055   0.000130  -0.000420   0.000163   0.000159  0.0000040  0.0000049    0.000091    0.000090
+1991   5   9  48385  -0.195572   0.428691   0.3260334   0.0027418   0.000138  -0.000329   0.000172   0.000169  0.0000042  0.0000069    0.000102    0.000094
+1991   5  10  48386  -0.193502   0.432042   0.3232502   0.0028206   0.000208   0.000000   0.000289   0.000296  0.0000099  0.0000080    0.000212    0.000145
+1991   5  11  48387  -0.191704   0.435643   0.3204218   0.0028281   0.000365   0.000089   0.000306   0.000316  0.0000118  0.0000097    0.000233    0.000151
+1991   5  12  48388  -0.190037   0.439612   0.3176280   0.0027445   0.000498  -0.000164   0.000242   0.000271  0.0000095  0.0000097    0.000175    0.000147
+1991   5  13  48389  -0.188207   0.443696   0.3149606   0.0025752   0.000458  -0.000462   0.000195   0.000220  0.0000077  0.0000084    0.000138    0.000143
+1991   5  14  48390  -0.186003   0.447511   0.3124870   0.0023646   0.000216  -0.000467   0.000197   0.000177  0.0000074  0.0000073    0.000141    0.000150
+1991   5  15  48391  -0.183454   0.450856   0.3102154   0.0021787  -0.000042  -0.000170   0.000202   0.000138  0.0000070  0.0000077    0.000148    0.000167
+1991   5  16  48392  -0.180765   0.453868   0.3080923   0.0020639  -0.000028   0.000036   0.000236   0.000163  0.0000079  0.0000090    0.000164    0.000150
+1991   5  17  48393  -0.177993   0.456874   0.3060430   0.0020361   0.000180   0.000060   0.000341   0.000479  0.0000110  0.0000095    0.000193    0.000126
+1991   5  18  48394  -0.175090   0.460135   0.3039859   0.0020937   0.000332   0.000001   0.000345   0.000527  0.0000111  0.0000096    0.000194    0.000126
+1991   5  19  48395  -0.172031   0.463605   0.3018435   0.0022124   0.000302  -0.000066   0.000256   0.000272  0.0000082  0.0000087    0.000136    0.000114
+1991   5  20  48396  -0.168876   0.466991   0.2995725   0.0023399   0.000147  -0.000126   0.000202   0.000190  0.0000062  0.0000064    0.000105    0.000102
+1991   5  21  48397  -0.165753   0.470035   0.2971909   0.0024117   0.000003  -0.000183   0.000197   0.000166  0.0000046  0.0000045    0.000099    0.000099
+1991   5  22  48398  -0.162790   0.472790   0.2947815   0.0023788  -0.000046  -0.000209   0.000204   0.000137  0.0000028  0.0000038    0.000085    0.000088
+1991   5  23  48399  -0.160029   0.475544   0.2924626   0.0022384  -0.000060  -0.000128   0.000294   0.000187  0.0000030  0.0000059    0.000092    0.000093
+1991   5  24  48400  -0.157243   0.478260   0.2903267   0.0020322  -0.000091   0.000006   0.000513   0.000304  0.0000091  0.0000084    0.000178    0.000138
+1991   5  25  48401  -0.154207   0.481151   0.2884112   0.0018123  -0.000145   0.000063   0.000654   0.000382  0.0000138  0.0000092    0.000197    0.000144
+1991   5  26  48402  -0.151104   0.484219   0.2867052   0.0016180  -0.000196  -0.000009   0.001043   0.000876  0.0000094  0.0000105    0.000175    0.000144
+1991   5  27  48403  -0.148196   0.487280   0.2851683   0.0014709  -0.000193  -0.000165   0.000315   0.000294  0.0000071  0.0000083    0.000154    0.000145
+1991   5  28  48404  -0.145329   0.490273   0.2837483   0.0013789  -0.000093  -0.000312   0.000264   0.000246  0.0000071  0.0000083    0.000155    0.000145
+1991   5  29  48405  -0.142305   0.493154   0.2823900   0.0013435   0.000111  -0.000370   0.000535   0.000500  0.0000095  0.0000238    0.000205    0.000194
+1991   5  30  48406  -0.139244   0.495805   0.2810391   0.0013613   0.000373  -0.000334   0.001491   0.001243  0.0000404  0.0000181    0.000544    0.000580
+1991   5  31  48407  -0.136247   0.498160   0.2796466   0.0014256   0.000579  -0.000259   0.000821   0.000665  0.0000267  0.0000312    0.000329    0.000310
+1991   6   1  48408  -0.133470   0.500602   0.2781707   0.0015307   0.000579  -0.000234   0.000649   0.000532  0.0000219  0.0000181    0.000270    0.000250
+1991   6   2  48409  -0.130921   0.503449   0.2765735   0.0016734   0.000353  -0.000273   0.000328   0.000223  0.0000094  0.0000131    0.000150    0.000152
+1991   6   3  48410  -0.128298   0.506558   0.2748186   0.0018480   0.000051  -0.000305   0.000146   0.000078  0.0000044  0.0000069    0.000068    0.000068
+1991   6   4  48411  -0.125198   0.509539   0.2728790   0.0020378  -0.000129  -0.000247   0.000145   0.000078  0.0000044  0.0000044    0.000068    0.000068
+1991   6   5  48412  -0.121491   0.512108   0.2707515   0.0022134  -0.000076  -0.000082   0.000146   0.000078  0.0000044  0.0000066    0.000069    0.000068
+1991   6   6  48413  -0.117542   0.514352   0.2684676   0.0023425   0.000139   0.000083   0.000302   0.000171  0.0000087  0.0000075    0.000130    0.000151
+1991   6   7  48414  -0.113952   0.516624   0.2660888   0.0024017   0.000334   0.000098   0.000391   0.000344  0.0000106  0.0000097    0.000163    0.000244
+1991   6   8  48415  -0.111010   0.519234   0.2636917   0.0023832   0.000352  -0.000099   0.000390   0.000345  0.0000106  0.0000098    0.000163    0.000244
+1991   6   9  48416  -0.108279   0.522205   0.2613495   0.0022945   0.000185  -0.000391   0.000268   0.000278  0.0000089  0.0000090    0.000159    0.000169
+1991   6  10  48417  -0.104940   0.525288   0.2591194   0.0021570  -0.000045  -0.000563   0.000202   0.000224  0.0000073  0.0000076    0.000153    0.000128
+1991   6  11  48418  -0.100623   0.528161   0.2570321   0.0020036  -0.000186  -0.000476   0.000196   0.000194  0.0000063  0.0000059    0.000140    0.000126
+1991   6  12  48419  -0.095995   0.530609   0.2550850   0.0018765  -0.000170  -0.000209   0.000196   0.000157  0.0000045  0.0000055    0.000115    0.000120
+1991   6  13  48420  -0.092253   0.532620   0.2532357   0.0018244  -0.000057  -0.000037   0.000298   0.000232  0.0000048  0.0000076    0.000114    0.000123
+1991   6  14  48421  -0.089318   0.534451   0.2513930   0.0018775   0.000081  -0.000043   0.000523   0.000416  0.0000107  0.0000086    0.000127    0.000137
+1991   6  15  48422  -0.086048   0.536432   0.2494558   0.0020116   0.000190  -0.000124   0.000680   0.000537  0.0000123  0.0000099    0.000128    0.000138
+1991   6  16  48423  -0.082145   0.538452   0.2473726   0.0021572   0.000217  -0.000178   0.000979   0.001033  0.0000091  0.0000097    0.000138    0.000150
+1991   6  17  48424  -0.078182   0.540236   0.2451687   0.0022405   0.000133  -0.000167   0.000244   0.000285  0.0000071  0.0000081    0.000156    0.000174
+1991   6  18  48425  -0.074556   0.541825   0.2429307   0.0022212  -0.000043  -0.000112   0.000226   0.000265  0.0000071  0.0000071    0.000156    0.000175
+1991   6  19  48426  -0.071174   0.543452   0.2407632   0.0021027  -0.000224  -0.000062   0.000438   0.000511  0.0000071  0.0000086    0.000156    0.000173
+1991   6  20  48427  -0.067712   0.545220   0.2387510   0.0019136  -0.000270  -0.000066   0.000581   0.000527  0.0000101  0.0000087    0.000157    0.000140
+1991   6  21  48428  -0.064280   0.546880   0.2369488   0.0016834  -0.000079  -0.000147   0.000336   0.000297  0.0000103  0.0000102    0.000157    0.000139
+1991   6  22  48429  -0.061282   0.548138   0.2353859   0.0014373   0.000314  -0.000283   0.000329   0.000292  0.0000103  0.0000095    0.000157    0.000139
+1991   6  23  48430  -0.058828   0.549128   0.2340672   0.0012017   0.000687  -0.000403   0.000251   0.000257  0.0000086  0.0000088    0.000147    0.000121
+1991   6  24  48431  -0.056560   0.550335   0.2329685   0.0010051   0.000783  -0.000427   0.000214   0.000238  0.0000072  0.0000082    0.000136    0.000105
+1991   6  25  48432  -0.053964   0.552103   0.2320377   0.0008683   0.000513  -0.000336   0.000272   0.000278  0.0000078  0.0000093    0.000146    0.000113
+1991   6  26  48433  -0.050798   0.554228   0.2312095   0.0007988   0.000108  -0.000210   0.000443   0.000302  0.0000114  0.0000131    0.000210    0.000164
+1991   6  27  48434  -0.047271   0.556258   0.2304182   0.0007967   0.000013  -0.000199   0.000712   0.000394  0.0000185  0.0000098    0.000320    0.000304
+1991   6  28  48435  -0.043837   0.558169   0.2295975   0.0008586   0.000087  -0.000260   0.000413   0.000298  0.0000082  0.0000110    0.000204    0.000313
+1991   6  29  48436  -0.040535   0.559862   0.2286878   0.0009726   0.000028  -0.000280   0.000187   0.000129  0.0000036  0.0000060    0.000121    0.000148
+1991   6  30  48437  -0.036915   0.560850   0.2276460   0.0011154  -0.000069  -0.000204   0.000194   0.000134  0.0000038  0.0000047    0.000133    0.000142
+1991   7   1  48438  -0.033115   0.561677   0.2264580   0.0012594  -0.000075  -0.000166   0.000306   0.000215  0.0000059  0.0000044    0.000141    0.000150
+1991   7   2  48439  -0.029683   0.562931   0.2251354   0.0013878  -0.000023  -0.000196   0.000282   0.000195  0.0000050  0.0000065    0.000103    0.000121
+1991   7   3  48440  -0.026533   0.564049   0.2236972   0.0014936   0.000085  -0.000180   0.000385   0.000309  0.0000071  0.0000070    0.000143    0.000136
+1991   7   4  48441  -0.022998   0.564742   0.2221681   0.0015571   0.000287  -0.000221   0.000566   0.000502  0.0000090  0.0000082    0.000180    0.000144
+1991   7   5  48442  -0.018946   0.565484   0.2206062   0.0015445   0.000552  -0.000348   0.000857   0.000729  0.0000093  0.0000090    0.000184    0.000145
+1991   7   6  48443  -0.014548   0.566525   0.2191022   0.0014371   0.000783  -0.000472   0.002499   0.002412  0.0000090  0.0000089    0.000167    0.000140
+1991   7   7  48444  -0.010103   0.567697   0.2177492   0.0012511   0.000870  -0.000477   0.001268   0.001398  0.0000086  0.0000088    0.000145    0.000132
+1991   7   8  48445  -0.005886   0.568657   0.2166040   0.0010381   0.000751  -0.000305   0.000402   0.000440  0.0000086  0.0000088    0.000146    0.000132
+1991   7   9  48446  -0.001932   0.569308   0.2156573   0.0008711   0.000456  -0.000022   0.000286   0.000273  0.0000090  0.0000081    0.000155    0.000131
+1991   7  10  48447   0.001791   0.569662   0.2148270   0.0008195   0.000138   0.000112   0.000234   0.000175  0.0000076  0.0000070    0.000140    0.000118
+1991   7  11  48448   0.005340   0.569666   0.2139743   0.0009224  -0.000006  -0.000181   0.000154   0.000121  0.0000051  0.0000071    0.000092    0.000099
+1991   7  12  48449   0.009679   0.569876   0.2129458   0.0011602  -0.000053  -0.000366   0.000198   0.000156  0.0000067  0.0000096    0.000115    0.000125
+1991   7  13  48450   0.013728   0.569801   0.2116410   0.0014579  -0.000043  -0.000280   0.000405   0.000338  0.0000142  0.0000144    0.000212    0.000205
+1991   7  14  48451   0.017192   0.570212   0.2100467   0.0017189  -0.000007  -0.000093   0.000717   0.000606  0.0000222  0.0000134    0.000364    0.000252
+1991   7  15  48452   0.021634   0.571115   0.2082423   0.0018636   0.000044   0.000041   0.000505   0.000419  0.0000127  0.0000146    0.000226    0.000158
+1991   7  16  48453   0.027015   0.571964   0.2063654   0.0018652   0.000065   0.000022   0.000303   0.000250  0.0000070  0.0000088    0.000144    0.000113
+1991   7  17  48454   0.031775   0.572573   0.2045492   0.0017519   0.000006  -0.000115   0.000220   0.000169  0.0000048  0.0000064    0.000121    0.000106
+1991   7  18  48455   0.035594   0.572694   0.2028821   0.0015714  -0.000105  -0.000203   0.000201   0.000207  0.0000058  0.0000051    0.000140    0.000130
+1991   7  19  48456   0.040812   0.572886   0.2014106   0.0013576  -0.000197  -0.000136   0.000133   0.000188  0.0000053  0.0000060    0.000118    0.000106
+1991   7  20  48457   0.045976   0.572086   0.2001597   0.0011297  -0.000181   0.000011   0.000158   0.000218  0.0000061  0.0000072    0.000127    0.000122
+1991   7  21  48458   0.050090   0.571563   0.1991370   0.0009309  -0.000062   0.000149   0.000285   0.000332  0.0000091  0.0000074    0.000158    0.000183
+1991   7  22  48459   0.054118   0.572322   0.1982791   0.0008208  -0.000009   0.000208   0.000257   0.000303  0.0000086  0.0000105    0.000146    0.000159
+1991   7  23  48460   0.058858   0.573121   0.1974736   0.0008026  -0.000172   0.000151   0.000353   0.000402  0.0000119  0.0000125    0.000183    0.000236
+1991   7  24  48461   0.064191   0.573141   0.1966512   0.0008352  -0.000403   0.000031   0.000580   0.000610  0.0000163  0.0000139    0.000234    0.000533
+1991   7  25  48462   0.068795   0.572463   0.1957825   0.0009013  -0.000366  -0.000165   0.000749   0.000808  0.0000160  0.0000177    0.000246    0.000453
+1991   7  26  48463   0.072871   0.571631   0.1948330   0.0010114  -0.000067  -0.000354   0.000656   0.000680  0.0000190  0.0000179    0.000264    0.000280
+1991   7  27  48464   0.077660   0.570713   0.1937510   0.0011711   0.000161  -0.000366   0.000552   0.000573  0.0000198  0.0000192    0.000231    0.000250
+1991   7  28  48465   0.082143   0.570336   0.1924899   0.0013544   0.000081  -0.000168   0.000497   0.000532  0.0000193  0.0000167    0.000183    0.000217
+1991   7  29  48466   0.085230   0.570743   0.1910493   0.0015010  -0.000210   0.000057   0.000459   0.000464  0.0000136  0.0000140    0.000177    0.000199
+1991   7  30  48467   0.089332   0.570417   0.1895029   0.0015514  -0.000153  -0.000144   0.000358   0.000324  0.0000088  0.0000118    0.000212    0.000153
+1991   7  31  48468   0.092887   0.569720   0.1879675   0.0015074   0.000049  -0.000442   0.000390   0.000379  0.0000101  0.0000118    0.000247    0.000169
+1991   8   1  48469   0.095528   0.568656   0.1865121   0.0014193   0.000138  -0.000512   0.000508   0.000591  0.0000149  0.0000125    0.000234    0.000217
+1991   8   2  48470   0.098323   0.567693   0.1851514   0.0013174   0.000139  -0.000367   0.000615   0.000705  0.0000149  0.0000135    0.000199    0.000212
+1991   8   3  48471   0.101517   0.567296   0.1838935   0.0011925   0.000158  -0.000169   0.000443   0.000601  0.0000122  0.0000121    0.000177    0.000146
+1991   8   4  48472   0.104714   0.565596   0.1827716   0.0010391   0.000260  -0.000021   0.000286   0.000397  0.0000094  0.0000103    0.000164    0.000108
+1991   8   5  48473   0.107708   0.563970   0.1818054   0.0008968   0.000304  -0.000100   0.000245   0.000288  0.0000084  0.0000079    0.000154    0.000100
+1991   8   6  48474   0.111118   0.563048   0.1809518   0.0008292   0.000180  -0.000177   0.000266   0.000252  0.0000065  0.0000063    0.000131    0.000102
+1991   8   7  48475   0.115215   0.561628   0.1801090   0.0008785  -0.000031   0.000018   0.000226   0.000190  0.0000042  0.0000055    0.000105    0.000091
+1991   8   8  48476   0.118697   0.560350   0.1791557   0.0010474  -0.000151   0.000035   0.000211   0.000178  0.0000045  0.0000080    0.000113    0.000101
+1991   8   9  48477   0.121503   0.559265   0.1779887   0.0013002  -0.000116  -0.000149   0.000441   0.000426  0.0000118  0.0000095    0.000181    0.000221
+1991   8  10  48478   0.124705   0.557861   0.1765553   0.0015749   0.000012  -0.000253   0.000495   0.000494  0.0000145  0.0000088    0.000187    0.000244
+1991   8  11  48479   0.128712   0.556183   0.1748664   0.0018038   0.000101  -0.000148   0.000382   0.000452  0.0000059  0.0000092    0.000124    0.000117
+1991   8  12  48480   0.132968   0.554737   0.1729930   0.0019331   0.000034   0.000089   0.000213   0.000255  0.0000040  0.0000049    0.000092    0.000081
+1991   8  13  48481   0.136757   0.553725   0.1710470   0.0019374  -0.000210   0.000291   0.000151   0.000180  0.0000040  0.0000040    0.000092    0.000081
+1991   8  14  48482   0.140071   0.552637   0.1691520   0.0018259  -0.000509   0.000339   0.000176   0.000209  0.0000040  0.0000061    0.000093    0.000082
+1991   8  15  48483   0.143140   0.550916   0.1674095   0.0016389  -0.000643   0.000262   0.000670   0.000690  0.0000082  0.0000068    0.000131    0.000200
+1991   8  16  48484   0.146292   0.548574   0.1658711   0.0014314  -0.000462   0.000182   0.000432   0.000488  0.0000096  0.0000110    0.000143    0.000234
+1991   8  17  48485   0.149798   0.546412   0.1645325   0.0012525  -0.000026   0.000211   0.000464   0.000662  0.0000138  0.0000174    0.000191    0.000257
+1991   8  18  48486   0.152753   0.544474   0.1633467   0.0011291   0.000342   0.000370   0.000700   0.001368  0.0000253  0.0000120    0.000281    0.000260
+1991   8  19  48487   0.154720   0.542393   0.1622523   0.0010653   0.000393   0.000517   0.000424   0.000381  0.0000101  0.0000175    0.000206    0.000145
+1991   8  20  48488   0.156695   0.540504   0.1611931   0.0010536   0.000163   0.000464   0.000345   0.000277  0.0000098  0.0000079    0.000202    0.000146
+1991   8  21  48489   0.159192   0.538889   0.1601230   0.0010880  -0.000088   0.000192   0.000304   0.000202  0.0000057  0.0000064    0.000171    0.000170
+1991   8  22  48490   0.161413   0.536952   0.1589986   0.0011746  -0.000057  -0.000091   0.000188   0.000136  0.0000031  0.0000047    0.000115    0.000147
+1991   8  23  48491   0.163708   0.534958   0.1577619   0.0013240   0.000182  -0.000185   0.000239   0.000187  0.0000037  0.0000048    0.000127    0.000175
+1991   8  24  48492   0.166547   0.532641   0.1563465   0.0015234   0.000185  -0.000059   0.000440   0.000403  0.0000065  0.0000049    0.000164    0.000246
+1991   8  25  48493   0.169803   0.530330   0.1547195   0.0017300  -0.000085   0.000097   0.000360   0.000258  0.0000062  0.0000063    0.000099    0.000113
+1991   8  26  48494   0.172396   0.528039   0.1528996   0.0019001  -0.000232   0.000040   0.000256   0.000184  0.0000061  0.0000064    0.000099    0.000104
+1991   8  27  48495   0.173992   0.525898   0.1509403   0.0020094  -0.000009  -0.000280   0.000280   0.000223  0.0000067  0.0000070    0.000128    0.000110
+1991   8  28  48496   0.176402   0.524654   0.1489069   0.0020460   0.000201  -0.000555   0.000350   0.000314  0.0000080  0.0000130    0.000195    0.000128
+1991   8  29  48497   0.179609   0.522701   0.1468744   0.0020040   0.000193  -0.000671   0.000805   0.000874  0.0000194  0.0000107    0.000263    0.000289
+1991   8  30  48498   0.182294   0.520419   0.1449184   0.0018924  -0.000103  -0.000631   0.000504   0.000630  0.0000135  0.0000151    0.000205    0.000190
+1991   8  31  48499   0.184410   0.518218   0.1430966   0.0017436  -0.000367  -0.000460   0.000409   0.000514  0.0000109  0.0000118    0.000181    0.000154
+1991   9   1  48500   0.186664   0.516088   0.1414228   0.0016105  -0.000396  -0.000247   0.000620   0.000690  0.0000100  0.0000100    0.000156    0.000171
+1991   9   2  48501   0.189444   0.513866   0.1398524   0.0015484  -0.000297  -0.000114   0.000565   0.000544  0.0000092  0.0000095    0.000130    0.000274
+1991   9   3  48502   0.192535   0.511529   0.1382925   0.0015938  -0.000265  -0.000115   0.000428   0.000400  0.0000090  0.0000071    0.000130    0.000264
+1991   9   4  48503   0.195289   0.509310   0.1366287   0.0017512  -0.000360  -0.000186   0.000248   0.000156  0.0000049  0.0000064    0.000120    0.000117
+1991   9   5  48504   0.197899   0.507055   0.1347612   0.0019934  -0.000399  -0.000169   0.000200   0.000118  0.0000038  0.0000048    0.000116    0.000092
+1991   9   6  48505   0.200893   0.504693   0.1326306   0.0022697  -0.000239  -0.000019   0.000234   0.000158  0.0000047  0.0000036    0.000133    0.000118
+1991   9   7  48506   0.204220   0.502756   0.1302341   0.0025085  -0.000055   0.000012   0.000181   0.000154  0.0000034  0.0000039    0.000114    0.000143
+1991   9   8  48507   0.207165   0.500902   0.1276478   0.0026431   0.000015  -0.000048   0.000211   0.000182  0.0000031  0.0000056    0.000111    0.000156
+1991   9   9  48508   0.209787   0.498636   0.1249936   0.0026519  -0.000005   0.000014   0.000402   0.000367  0.0000078  0.0000047    0.000205    0.000203
+1991   9  10  48509   0.212526   0.496392   0.1223865   0.0025545  -0.000052   0.000256   0.000293   0.000322  0.0000063  0.0000066    0.000127    0.000114
+1991   9  11  48510   0.214490   0.494206   0.1199117   0.0023864  -0.000108   0.000554   0.000348   0.000384  0.0000053  0.0000069    0.000106    0.000095
+1991   9  12  48511   0.215421   0.491534   0.1176208   0.0021837  -0.000207   0.000680   0.000458   0.000378  0.0000074  0.0000072    0.000152    0.000153
+1991   9  13  48512   0.216470   0.489029   0.1155348   0.0019764  -0.000368   0.000483   0.000355   0.000270  0.0000092  0.0000101    0.000185    0.000205
+1991   9  14  48513   0.218349   0.487237   0.1136489   0.0017862  -0.000524   0.000048   0.000380   0.000370  0.0000127  0.0000140    0.000217    0.000238
+1991   9  15  48514   0.219825   0.484889   0.1119393   0.0016357  -0.000478  -0.000212   0.000388   0.000588  0.0000189  0.0000108    0.000250    0.000273
+1991   9  16  48515   0.220764   0.481434   0.1103536   0.0015499  -0.000207  -0.000138   0.000277   0.000353  0.0000089  0.0000136    0.000189    0.000251
+1991   9  17  48516   0.222653   0.477886   0.1088163   0.0015405   0.000093   0.000045   0.000323   0.000401  0.0000084  0.0000086    0.000183    0.000247
+1991   9  18  48517   0.225617   0.474859   0.1072522   0.0015993   0.000223   0.000097   0.000437   0.000524  0.0000084  0.0000087    0.000183    0.000238
+1991   9  19  48518   0.228225   0.471983   0.1056026   0.0017100   0.000145   0.000021   0.000385   0.000328  0.0000091  0.0000088    0.000158    0.000117
+1991   9  20  48519   0.230061   0.469083   0.1038246   0.0018586  -0.000053  -0.000037   0.000343   0.000284  0.0000091  0.0000091    0.000157    0.000115
+1991   9  21  48520   0.231451   0.466089   0.1018861   0.0020361  -0.000242   0.000050   0.000343   0.000284  0.0000091  0.0000090    0.000157    0.000115
+1991   9  22  48521   0.232912   0.463009   0.0997616   0.0022287  -0.000350   0.000222   0.000276   0.000280  0.0000089  0.0000088    0.000148    0.000128
+1991   9  23  48522   0.234753   0.459975   0.0974465   0.0024044  -0.000379   0.000299   0.000227   0.000275  0.0000085  0.0000089    0.000137    0.000158
+1991   9  24  48523   0.236976   0.457209   0.0949780   0.0025140  -0.000365   0.000168   0.000245   0.000289  0.0000088  0.0000092    0.000147    0.000167
+1991   9  25  48524   0.239376   0.454925   0.0924475   0.0025135  -0.000332  -0.000078   0.000397   0.000302  0.0000098  0.0000089    0.000196    0.000214
+1991   9  26  48525   0.241806   0.452929   0.0899765   0.0024175  -0.000259  -0.000157   0.000553   0.000218  0.0000090  0.0000099    0.000166    0.000212
+1991   9  27  48526   0.244357   0.449193   0.0876260   0.0022655  -0.000320  -0.000046   0.000408   0.000244  0.0000100  0.0000103    0.000169    0.000159
+1991   9  28  48527   0.246104   0.445595   0.0854412   0.0020867  -0.000391  -0.000071   0.000490   0.000432  0.0000117  0.0000097    0.000188    0.000142
+1991   9  29  48528   0.247466   0.442965   0.0834306   0.0019330  -0.000333  -0.000279   0.000798   0.000735  0.0000093  0.0000095    0.000158    0.000140
+1991   9  30  48529   0.249138   0.440306   0.0815415   0.0018582  -0.000179  -0.000407   0.000230   0.000217  0.0000073  0.0000083    0.000128    0.000140
+1991  10   1  48530   0.250489   0.437478   0.0796783   0.0018888  -0.000032  -0.000228   0.000221   0.000210  0.0000074  0.0000084    0.000128    0.000141
+1991  10   2  48531   0.251094   0.434432   0.0777353   0.0020161   0.000012   0.000162   0.000428   0.000418  0.0000095  0.0000120    0.000159    0.000152
+1991  10   3  48532   0.251576   0.430871   0.0756320   0.0022017  -0.000048   0.000286   0.000630   0.000628  0.0000167  0.0000103    0.000240    0.000161
+1991  10   4  48533   0.252175   0.426971   0.0733363   0.0023910  -0.000161  -0.000130   0.000373   0.000514  0.0000111  0.0000130    0.000193    0.000136
+1991  10   5  48534   0.252717   0.423775   0.0708727   0.0025301  -0.000307  -0.000618   0.000311   0.000495  0.0000093  0.0000094    0.000172    0.000124
+1991  10   6  48535   0.253393   0.421276   0.0683126   0.0025808  -0.000420  -0.000724   0.000242   0.000304  0.0000077  0.0000076    0.000124    0.000110
+1991  10   7  48536   0.254663   0.418058   0.0657517   0.0025312  -0.000405  -0.000436   0.000156   0.000170  0.0000058  0.0000070    0.000085    0.000088
+1991  10   8  48537   0.256661   0.413016   0.0632834   0.0023960  -0.000228  -0.000019   0.000169   0.000185  0.0000064  0.0000086    0.000093    0.000095
+1991  10   9  48538   0.258757   0.407075   0.0609772   0.0022066   0.000025   0.000220   0.000282   0.000324  0.0000114  0.0000110    0.000165    0.000155
+1991  10  10  48539   0.259695   0.403330   0.0588696   0.0019978   0.000132   0.000199   0.000430   0.000537  0.0000156  0.0000102    0.000329    0.000183
+1991  10  11  48540   0.259637   0.401779   0.0569665   0.0017985   0.000076   0.000049   0.000253   0.000324  0.0000089  0.0000122    0.000235    0.000113
+1991  10  12  48541   0.259721   0.399947   0.0552497   0.0016292   0.000001  -0.000033   0.000248   0.000317  0.0000087  0.0000082    0.000231    0.000110
+1991  10  13  48542   0.260252   0.396788   0.0536831   0.0015042  -0.000026  -0.000013   0.000405   0.000404  0.0000076  0.0000075    0.000129    0.000112
+1991  10  14  48543   0.260693   0.392986   0.0522172   0.0014358  -0.000024   0.000024   0.000334   0.000288  0.0000062  0.0000062    0.000093    0.000113
+1991  10  15  48544   0.260651   0.389449   0.0507902   0.0014352  -0.000042  -0.000009   0.000216   0.000180  0.0000048  0.0000048    0.000093    0.000105
+1991  10  16  48545   0.260593   0.385996   0.0493300   0.0015080  -0.000111  -0.000042   0.000150   0.000122  0.0000034  0.0000040    0.000095    0.000091
+1991  10  17  48546   0.261201   0.382622   0.0477639   0.0016420  -0.000197   0.000105   0.000144   0.000121  0.0000033  0.0000040    0.000105    0.000084
+1991  10  18  48547   0.261954   0.379290   0.0460434   0.0018131  -0.000202   0.000160   0.000191   0.000170  0.0000046  0.0000036    0.000140    0.000105
+1991  10  19  48548   0.262019   0.376171   0.0441432   0.0019941  -0.000142   0.000011   0.000151   0.000135  0.0000038  0.0000036    0.000127    0.000092
+1991  10  20  48549   0.261628   0.373060   0.0420684   0.0021516  -0.000113  -0.000127   0.000109   0.000094  0.0000027  0.0000033    0.000086    0.000083
+1991  10  21  48550   0.261485   0.370025   0.0398609   0.0022560  -0.000174  -0.000081   0.000115   0.000097  0.0000028  0.0000032    0.000081    0.000103
+1991  10  22  48551   0.261419   0.366827   0.0375832   0.0022937  -0.000245   0.000061   0.000175   0.000164  0.0000038  0.0000029    0.000097    0.000119
+1991  10  23  48552   0.260957   0.362960   0.0353017   0.0022558  -0.000188   0.000106   0.000156   0.000167  0.0000030  0.0000039    0.000079    0.000095
+1991  10  24  48553   0.260682   0.359627   0.0330925   0.0021410  -0.000074  -0.000004   0.000182   0.000217  0.0000041  0.0000058    0.000100    0.000117
+1991  10  25  48554   0.260320   0.356109   0.0310245   0.0019859  -0.000072  -0.000111   0.000317   0.000417  0.0000085  0.0000159    0.000184    0.000213
+1991  10  26  48555   0.259747   0.352401   0.0291045   0.0018642  -0.000191  -0.000130   0.000836   0.001227  0.0000277  0.0000167    0.000305    0.000602
+1991  10  27  48556   0.259175   0.349268   0.0272627   0.0018410  -0.000224  -0.000107   0.000657   0.000828  0.0000250  0.0000173    0.000235    0.000452
+1991  10  28  48557   0.258854   0.346763   0.0253830   0.0019374  -0.000104  -0.000065   0.000223   0.000230  0.0000070  0.0000151    0.000103    0.000124
+1991  10  29  48558   0.258843   0.344123   0.0233555   0.0021217   0.000016   0.000029   0.000226   0.000187  0.0000052  0.0000052    0.000096    0.000102
+1991  10  30  48559   0.258923   0.340890   0.0211239   0.0023338   0.000056   0.000125   0.000183   0.000118  0.0000035  0.0000044    0.000093    0.000078
+1991  10  31  48560   0.258881   0.337508   0.0186915   0.0025332   0.000144   0.000074   0.000163   0.000104  0.0000037  0.0000043    0.000102    0.000080
+1991  11   1  48561   0.259302   0.334371   0.0160776   0.0026983   0.000160  -0.000043   0.000200   0.000192  0.0000052  0.0000033    0.000136    0.000108
+1991  11   2  48562   0.260664   0.331504   0.0133256   0.0027890  -0.000049  -0.000042   0.000131   0.000139  0.0000028  0.0000038    0.000096    0.000102
+1991  11   3  48563   0.262069   0.328760   0.0105339   0.0027673  -0.000213   0.000042   0.000111   0.000120  0.0000023  0.0000037    0.000082    0.000097
+1991  11   4  48564   0.262726   0.326134   0.0078219   0.0026348  -0.000169   0.000096   0.000173   0.000186  0.0000045  0.0000043    0.000084    0.000100
+1991  11   5  48565   0.262859   0.323698   0.0052849   0.0024283  -0.000073   0.000087   0.000206   0.000220  0.0000063  0.0000054    0.000085    0.000101
+1991  11   6  48566   0.262853   0.321287   0.0029715   0.0022010  -0.000060   0.000030   0.000344   0.000366  0.0000063  0.0000075    0.000086    0.000101
+1991  11   7  48567   0.262600   0.318515   0.0008745   0.0020052  -0.000053  -0.000011   0.000638   0.000730  0.0000088  0.0000071    0.000140    0.000120
+1991  11   8  48568   0.262102   0.315498  -0.0010583   0.0018736   0.000073   0.000017   0.000350   0.000388  0.0000080  0.0000074    0.000149    0.000128
+1991  11   9  48569   0.261728   0.312821  -0.0028972   0.0018114   0.000326   0.000117   0.000378   0.000334  0.0000061  0.0000067    0.000163    0.000156
+1991  11  10  48570   0.261136   0.309781  -0.0047058   0.0018106   0.000413   0.000227   0.000533   0.000416  0.0000054  0.0000088    0.000179    0.000197
+1991  11  11  48571   0.259924   0.306148  -0.0065403   0.0018654   0.000269   0.000269   0.000799   0.000587  0.0000115  0.0000064    0.000286    0.000310
+1991  11  12  48572   0.258891   0.303034  -0.0084538   0.0019689   0.000127   0.000207   0.000375   0.000236  0.0000075  0.0000077    0.000148    0.000172
+1991  11  13  48573   0.258404   0.300822  -0.0104893   0.0021055   0.000106   0.000070   0.000193   0.000122  0.0000039  0.0000057    0.000078    0.000092
+1991  11  14  48574   0.257556   0.298350  -0.0126690   0.0022546   0.000025  -0.000065   0.000191   0.000126  0.0000040  0.0000054    0.000080    0.000089
+1991  11  15  48575   0.256262   0.295427  -0.0149954   0.0023989  -0.000057  -0.000042   0.000288   0.000285  0.0000070  0.0000049    0.000145    0.000121
+1991  11  16  48576   0.255056   0.292508  -0.0174567   0.0025268   0.000028   0.000184   0.000331   0.000259  0.0000058  0.0000061    0.000184    0.000152
+1991  11  17  48577   0.253753   0.289063  -0.0200327   0.0026180   0.000216   0.000292   0.000352   0.000233  0.0000052  0.0000064    0.000216    0.000182
+1991  11  18  48578   0.252439   0.285349  -0.0226710   0.0026395   0.000305   0.000164   0.000281   0.000274  0.0000071  0.0000063    0.000166    0.000129
+1991  11  19  48579   0.251711   0.282391  -0.0252866   0.0025736   0.000171   0.000003   0.000346   0.000241  0.0000075  0.0000072    0.000138    0.000118
+1991  11  20  48580   0.251716   0.279860  -0.0277949   0.0024332  -0.000102  -0.000037   0.000533   0.000150  0.0000073  0.0000070    0.000105    0.000108
+1991  11  21  48581   0.251830   0.276499  -0.0301400   0.0022432  -0.000230  -0.000049   0.000379   0.000168  0.0000066  0.0000066    0.000131    0.000135
+1991  11  22  48582   0.251075   0.273709  -0.0322870   0.0020632  -0.000119  -0.000032   0.000190   0.000270  0.0000058  0.0000060    0.000105    0.000104
+1991  11  23  48583   0.249536   0.271733  -0.0342932   0.0019801   0.000060   0.000064   0.000154   0.000272  0.0000055  0.0000057    0.000086    0.000085
+1991  11  24  48584   0.247944   0.269647  -0.0362877   0.0020377   0.000153   0.000171   0.000172   0.000236  0.0000056  0.0000057    0.000097    0.000093
+1991  11  25  48585   0.246722   0.266776  -0.0384080   0.0022229   0.000149   0.000179   0.000279   0.000202  0.0000060  0.0000060    0.000158    0.000128
+1991  11  26  48586   0.245826   0.262958  -0.0407566   0.0024812   0.000124   0.000060   0.000289   0.000214  0.0000063  0.0000073    0.000159    0.000129
+1991  11  27  48587   0.244866   0.258720  -0.0433698   0.0027379   0.000145  -0.000022   0.000356   0.000302  0.0000086  0.0000091    0.000171    0.000140
+1991  11  28  48588   0.243537   0.254735  -0.0462102   0.0029157   0.000187   0.000213   0.000495   0.000464  0.0000119  0.0000118    0.000230    0.000191
+1991  11  29  48589   0.242293   0.250940  -0.0491672   0.0029695   0.000170   0.000460   0.000698   0.000709  0.0000151  0.0000189    0.000339    0.000289
+1991  11  30  48590   0.241467   0.247255  -0.0521140   0.0029055   0.000081   0.000495   0.001446   0.001283  0.0000260  0.0000219    0.000499    0.000522
+1991  12   1  48591   0.240974   0.243890  -0.0549493   0.0027567  -0.000025   0.000349   0.001272   0.001121  0.0000287  0.0000194    0.000424    0.000471
+1991  12   2  48592   0.240540   0.241058  -0.0576091   0.0025635  -0.000074   0.000172   0.000520   0.000535  0.0000129  0.0000197    0.000232    0.000225
+1991  12   3  48593   0.240089   0.238640  -0.0600696   0.0023647  -0.000048   0.000081   0.000442   0.000405  0.0000107  0.0000104    0.000197    0.000190
+1991  12   4  48594   0.239431   0.236238  -0.0623434   0.0021899   0.000007   0.000077   0.000383   0.000226  0.0000080  0.0000073    0.000153    0.000175
+1991  12   5  48595   0.238026   0.233730  -0.0644648   0.0020551   0.000052   0.000134   0.000196   0.000123  0.0000038  0.0000062    0.000077    0.000089
+1991  12   6  48596   0.236850   0.231978  -0.0664760   0.0019606  -0.000004   0.000168   0.000247   0.000163  0.0000043  0.0000059    0.000084    0.000099
+1991  12   7  48597   0.235270   0.230596  -0.0684109   0.0019089  -0.000075   0.000210   0.000590   0.000451  0.0000080  0.0000056    0.000129    0.000173
+1991  12   8  48598   0.231957   0.228246  -0.0703167   0.0019159  -0.000045   0.000255   0.000683   0.000706  0.0000069  0.0000064    0.000159    0.000208
+1991  12   9  48599   0.227862   0.224641  -0.0722606   0.0019903   0.000078   0.000214   0.000243   0.000261  0.0000048  0.0000060    0.000179    0.000188
+1991  12  10  48600   0.224764   0.220568  -0.0743090   0.0021181   0.000202   0.000044   0.000258   0.000269  0.0000050  0.0000048    0.000180    0.000202
+1991  12  11  48601   0.222944   0.217073  -0.0765013   0.0022653   0.000210  -0.000167   0.000250   0.000211  0.0000049  0.0000043    0.000120    0.000143
+1991  12  12  48602   0.220848   0.214469  -0.0788370   0.0024027   0.000059  -0.000216   0.000152   0.000126  0.0000036  0.0000046    0.000069    0.000077
+1991  12  13  48603   0.219090   0.211689  -0.0812975   0.0025103  -0.000115   0.000010   0.000171   0.000146  0.0000043  0.0000046    0.000077    0.000089
+1991  12  14  48604   0.217679   0.209055  -0.0838432   0.0025748  -0.000081   0.000238   0.000259   0.000243  0.0000057  0.0000043    0.000117    0.000150
+1991  12  15  48605   0.215805   0.206909  -0.0864288   0.0025954   0.000083   0.000316   0.000359   0.000388  0.0000044  0.0000053    0.000208    0.000194
+1991  12  16  48606   0.213277   0.204696  -0.0890133   0.0025712   0.000109   0.000319   0.000281   0.000355  0.0000049  0.0000046    0.000141    0.000168
+1991  12  17  48607   0.211152   0.201980  -0.0915507   0.0024893   0.000041   0.000249   0.000160   0.000190  0.0000048  0.0000040    0.000094    0.000136
+1991  12  18  48608   0.209939   0.198999  -0.0939768   0.0023378   0.000013   0.000117   0.000104   0.000100  0.0000030  0.0000039    0.000070    0.000097
+1991  12  19  48609   0.208367   0.196628  -0.0962240   0.0021391  -0.000083   0.000051   0.000091   0.000079  0.0000030  0.0000038    0.000080    0.000077
+1991  12  20  48610   0.207424   0.194692  -0.0982715   0.0019622  -0.000091   0.000037   0.000125   0.000105  0.0000045  0.0000043    0.000119    0.000098
+1991  12  21  48611   0.206032   0.193061  -0.1001830   0.0018883   0.000084   0.000034   0.000240   0.000218  0.0000056  0.0000047    0.000174    0.000158
+1991  12  22  48612   0.203579   0.191087  -0.1020907   0.0019515   0.000264  -0.000030   0.000260   0.000255  0.0000049  0.0000067    0.000196    0.000161
+1991  12  23  48613   0.200731   0.188577  -0.1041202   0.0021188   0.000309  -0.000139   0.000359   0.000303  0.0000077  0.0000068    0.000175    0.000179
+1991  12  24  48614   0.197806   0.186359  -0.1063391   0.0023260   0.000243  -0.000150   0.000497   0.000412  0.0000086  0.0000083    0.000173    0.000182
+1991  12  25  48615   0.195088   0.184744  -0.1087550   0.0025097   0.000125   0.000012   0.000871   0.000766  0.0000088  0.0000104    0.000173    0.000180
+1991  12  26  48616   0.192831   0.183026  -0.1113209   0.0026174   0.000009   0.000284   0.000593   0.000509  0.0000122  0.0000105    0.000177    0.000148
+1991  12  27  48617   0.191143   0.180371  -0.1139461   0.0026188  -0.000071   0.000525   0.000602   0.000510  0.0000123  0.0000123    0.000177    0.000148
+1991  12  28  48618   0.189924   0.176863  -0.1165226   0.0025171  -0.000104   0.000610   0.000809   0.000674  0.0000123  0.0000112    0.000177    0.000148
+1991  12  29  48619   0.188857   0.173800  -0.1189594   0.0023465  -0.000101   0.000491   0.001152   0.000970  0.0000101  0.0000103    0.000209    0.000178
+1991  12  30  48620   0.187552   0.171723  -0.1212098   0.0021547  -0.000085   0.000217   0.000692   0.000724  0.0000084  0.0000092    0.000308    0.000285
+1991  12  31  48621   0.185716   0.170217  -0.1232749   0.0019810  -0.000074  -0.000105   0.000684   0.000717  0.0000084  0.0000084    0.000308    0.000286
+1992   1   1  48622   0.183318   0.168633  -0.1251865   0.0018467  -0.000071  -0.000343   0.000642   0.000679  0.0000084  0.0000092    0.000292    0.000280
+1992   1   2  48623   0.180598   0.166756  -0.1269890   0.0017620  -0.000051  -0.000365   0.000262   0.000295  0.0000099  0.0000092    0.000130    0.000169
+1992   1   3  48624   0.177883   0.164758  -0.1287347   0.0017370   0.000012  -0.000120   0.000257   0.000290  0.0000100  0.0000100    0.000128    0.000167
+1992   1   4  48625   0.175363   0.162863  -0.1304871   0.0017809   0.000118   0.000310   0.000259   0.000292  0.0000100  0.0000080    0.000128    0.000167
+1992   1   5  48626   0.172997   0.161078  -0.1323168   0.0018917   0.000220   0.000677   0.000519   0.000540  0.0000061  0.0000072    0.000137    0.000154
+1992   1   6  48627   0.170678   0.159216  -0.1342843   0.0020499   0.000254   0.000729   0.000431   0.000402  0.0000044  0.0000050    0.000153    0.000139
+1992   1   7  48628   0.168458   0.157115  -0.1364224   0.0022239   0.000196   0.000421   0.000224   0.000207  0.0000038  0.0000035    0.000122    0.000128
+1992   1   8  48629   0.166474   0.154873  -0.1387302   0.0023849   0.000095   0.000041   0.000127   0.000116  0.0000027  0.0000033    0.000075    0.000100
+1992   1   9  48630   0.163998   0.152960  -0.1411833   0.0025189   0.000062   0.000084   0.000159   0.000147  0.0000028  0.0000047    0.000074    0.000102
+1992   1  10  48631   0.160948   0.151625  -0.1437537   0.0026201   0.000119   0.000498   0.000289   0.000307  0.0000066  0.0000057    0.000107    0.000156
+1992   1  11  48632   0.158183   0.150579  -0.1464055   0.0026736   0.000195   0.000800   0.000472   0.000577  0.0000087  0.0000057    0.000113    0.000166
+1992   1  12  48633   0.155467   0.149442  -0.1490815   0.0026627   0.000217   0.000750   0.000767   0.000911  0.0000048  0.0000061    0.000130    0.000140
+1992   1  13  48634   0.152452   0.147926  -0.1517126   0.0025858   0.000153   0.000452   0.000242   0.000259  0.0000035  0.0000043    0.000175    0.000118
+1992   1  14  48635   0.149460   0.146004  -0.1542394   0.0024601   0.000020   0.000169   0.000226   0.000237  0.0000037  0.0000044    0.000157    0.000116
+1992   1  15  48636   0.146695   0.144094  -0.1566280   0.0023159  -0.000128   0.000067   0.000233   0.000226  0.0000053  0.0000054    0.000120    0.000111
+1992   1  16  48637   0.143825   0.142787  -0.1588804   0.0021932  -0.000236   0.000055   0.000253   0.000242  0.0000071  0.0000070    0.000119    0.000125
+1992   1  17  48638   0.140731   0.141874  -0.1610406   0.0021434  -0.000241   0.000064   0.000304   0.000314  0.0000087  0.0000073    0.000123    0.000207
+1992   1  18  48639   0.137505   0.140836  -0.1632062   0.0022181  -0.000133   0.000082   0.000240   0.000271  0.0000076  0.0000077    0.000089    0.000123
+1992   1  19  48640   0.134020   0.139896  -0.1655172   0.0024293  -0.000011   0.000029   0.000207   0.000235  0.0000067  0.0000058    0.000077    0.000096
+1992   1  20  48641   0.130263   0.139010  -0.1680901   0.0027223   0.000068  -0.000065   0.000143   0.000143  0.0000041  0.0000053    0.000074    0.000059
+1992   1  21  48642   0.126545   0.137704  -0.1709596   0.0030023   0.000129  -0.000074   0.000135   0.000136  0.0000038  0.0000038    0.000074    0.000058
+1992   1  22  48643   0.123278   0.135980  -0.1740640   0.0031798   0.000156   0.000057   0.000121   0.000129  0.0000035  0.0000038    0.000078    0.000068
+1992   1  23  48644   0.120645   0.134518  -0.1772712   0.0032027   0.000056   0.000242   0.000131   0.000141  0.0000038  0.0000054    0.000089    0.000080
+1992   1  24  48645   0.118406   0.133451  -0.1804217   0.0030728  -0.000098   0.000335   0.000258   0.000251  0.0000073  0.0000061    0.000168    0.000126
+1992   1  25  48646   0.116087   0.132344  -0.1833841   0.0028429  -0.000141   0.000258   0.000300   0.000280  0.0000084  0.0000060    0.000190    0.000135
+1992   1  26  48647   0.113373   0.131044  -0.1860952   0.0025856  -0.000069   0.000088   0.000333   0.000323  0.0000047  0.0000058    0.000088    0.000094
+1992   1  27  48648   0.110279   0.129718  -0.1885605   0.0023591   0.000009  -0.000018   0.000201   0.000205  0.0000032  0.0000040    0.000061    0.000072
+1992   1  28  48649   0.107055   0.128415  -0.1908295   0.0021940   0.000013   0.000030   0.000145   0.000144  0.0000033  0.0000035    0.000062    0.000071
+1992   1  29  48650   0.104022   0.126866  -0.1929700   0.0020988   0.000005   0.000147   0.000162   0.000125  0.0000037  0.0000039    0.000068    0.000068
+1992   1  30  48651   0.101337   0.125513  -0.1950510   0.0020748   0.000185   0.000104   0.000267   0.000188  0.0000045  0.0000063    0.000077    0.000074
+1992   1  31  48652   0.098486   0.124571  -0.1971441   0.0021166   0.000495  -0.000099   0.000429   0.000370  0.0000088  0.0000071    0.000115    0.000121
+1992   2   1  48653   0.095786   0.123820  -0.1993067   0.0022017   0.000692  -0.000272   0.000536   0.000488  0.0000098  0.0000080    0.000121    0.000129
+1992   2   2  48654   0.093570   0.123022  -0.2015649   0.0023031   0.000663  -0.000297   0.000863   0.000791  0.0000072  0.0000075    0.000120    0.000133
+1992   2   3  48655   0.091643   0.122286  -0.2039226   0.0024076   0.000464  -0.000192   0.000259   0.000233  0.0000052  0.0000051    0.000117    0.000137
+1992   2   4  48656   0.089704   0.121972  -0.2063811   0.0025170   0.000241  -0.000054   0.000200   0.000171  0.0000030  0.0000034    0.000095    0.000119
+1992   2   5  48657   0.087418   0.122126  -0.2089495   0.0026330   0.000096   0.000020   0.000137   0.000113  0.0000017  0.0000024    0.000063    0.000086
+1992   2   6  48658   0.084694   0.122134  -0.2116335   0.0027358   0.000007   0.000015   0.000120   0.000101  0.0000017  0.0000036    0.000065    0.000088
+1992   2   7  48659   0.081940   0.121322  -0.2144025   0.0027870   0.000002  -0.000063   0.000252   0.000297  0.0000056  0.0000061    0.000114    0.000139
+1992   2   8  48660   0.079412   0.119865  -0.2171867   0.0027588   0.000111  -0.000178   0.000396   0.000560  0.0000105  0.0000084    0.000177    0.000208
+1992   2   9  48661   0.076684   0.118855  -0.2199006   0.0026541   0.000255  -0.000251   0.000402   0.000423  0.0000112  0.0000072    0.000222    0.000268
+1992   2  10  48662   0.073760   0.118493  -0.2224804   0.0025014   0.000277  -0.000200   0.000126   0.000127  0.0000038  0.0000074    0.000061    0.000080
+1992   2  11  48663   0.070993   0.118096  -0.2248976   0.0023315   0.000085  -0.000012   0.000131   0.000133  0.0000037  0.0000041    0.000062    0.000082
+1992   2  12  48664   0.068187   0.117344  -0.2271496   0.0021703  -0.000204   0.000204   0.000210   0.000220  0.0000043  0.0000047    0.000098    0.000129
+1992   2  13  48665   0.064612   0.116758  -0.2292581   0.0020550  -0.000282   0.000259   0.000344   0.000372  0.0000056  0.0000079    0.000165    0.000214
+1992   2  14  48666   0.060752   0.116521  -0.2312919   0.0020334  -0.000101   0.000137   0.000370   0.000290  0.0000114  0.0000064    0.000224    0.000256
+1992   2  15  48667   0.057467   0.116377  -0.2333634   0.0021344   0.000131  -0.000025   0.000206   0.000150  0.0000071  0.0000088    0.000115    0.000129
+1992   2  16  48668   0.054299   0.116292  -0.2355936   0.0023459   0.000200  -0.000113   0.000218   0.000159  0.0000062  0.0000089    0.000099    0.000110
+1992   2  17  48669   0.051083   0.116273  -0.2380688   0.0026131   0.000092  -0.000117   0.000570   0.000507  0.0000107  0.0000096    0.000180    0.000182
+1992   2  18  48670   0.048307   0.116261  -0.2408057   0.0028569  -0.000034  -0.000111   0.000526   0.000587  0.0000129  0.0000129    0.000226    0.000219
+1992   2  19  48671   0.045954   0.116303  -0.2437431   0.0030031  -0.000070  -0.000175   0.000630   0.000598  0.0000152  0.0000121    0.000263    0.000280
+1992   2  20  48672   0.043299   0.116590  -0.2467603   0.0030029  -0.000089  -0.000298   0.000478   0.000546  0.0000113  0.0000110    0.000190    0.000205
+1992   2  21  48673   0.040082   0.116896  -0.2497031   0.0028571  -0.000061  -0.000257   0.000237   0.000302  0.0000069  0.0000085    0.000128    0.000136
+1992   2  22  48674   0.036256   0.117490  -0.2524478   0.0026296   0.000082   0.000086   0.000235   0.000262  0.0000057  0.0000061    0.000163    0.000169
+1992   2  23  48675   0.032351   0.117807  -0.2549584   0.0024083   0.000221   0.000329   0.000260   0.000254  0.0000053  0.0000056    0.000199    0.000210
+1992   2  24  48676   0.028877   0.117399  -0.2572777   0.0022466   0.000247   0.000228   0.000151   0.000166  0.0000055  0.0000052    0.000088    0.000118
+1992   2  25  48677   0.025858   0.116674  -0.2594737   0.0021403   0.000175  -0.000036   0.000147   0.000143  0.0000052  0.0000050    0.000089    0.000114
+1992   2  26  48678   0.023066   0.116191  -0.2615830   0.0020539   0.000088  -0.000195   0.000153   0.000113  0.0000045  0.0000050    0.000113    0.000117
+1992   2  27  48679   0.020231   0.116020  -0.2636059   0.0019853   0.000070  -0.000158   0.000159   0.000118  0.0000049  0.0000065    0.000109    0.000111
+1992   2  28  48680   0.016922   0.115724  -0.2655764   0.0019728   0.000141  -0.000013   0.000187   0.000192  0.0000084  0.0000069    0.000086    0.000097
+1992   2  29  48681   0.013049   0.115125  -0.2675707   0.0020401   0.000254   0.000079   0.000263   0.000277  0.0000089  0.0000078    0.000085    0.000097
+1992   3   1  48682   0.009217   0.114950  -0.2696698   0.0021782   0.000335   0.000049   0.000414   0.000452  0.0000073  0.0000074    0.000096    0.000104
+1992   3   2  48683   0.005726   0.115557  -0.2719322   0.0023586   0.000331  -0.000047   0.000223   0.000285  0.0000059  0.0000059    0.000121    0.000118
+1992   3   3  48684   0.002360   0.116619  -0.2743835   0.0025463   0.000234  -0.000106   0.000173   0.000163  0.0000046  0.0000043    0.000114    0.000110
+1992   3   4  48685  -0.001164   0.117596  -0.2770136   0.0027072   0.000097  -0.000062   0.000106   0.000082  0.0000027  0.0000037    0.000095    0.000089
+1992   3   5  48686  -0.004863   0.118267  -0.2797805   0.0028105   0.000017   0.000058   0.000108   0.000083  0.0000028  0.0000044    0.000096    0.000091
+1992   3   6  48687  -0.008737   0.118887  -0.2826131   0.0028394  -0.000021   0.000094   0.000212   0.000196  0.0000061  0.0000044    0.000121    0.000116
+1992   3   7  48688  -0.012711   0.119704  -0.2854371   0.0028076  -0.000074  -0.000046   0.000215   0.000185  0.0000061  0.0000058    0.000113    0.000088
+1992   3   8  48689  -0.016431   0.120424  -0.2882101   0.0027276  -0.000033  -0.000061   0.000201   0.000164  0.0000055  0.0000055    0.000107    0.000077
+1992   3   9  48690  -0.019656   0.120872  -0.2908828   0.0025990   0.000139   0.000096   0.000181   0.000199  0.0000049  0.0000050    0.000121    0.000079
+1992   3  10  48691  -0.022531   0.121308  -0.2934110   0.0024575   0.000320   0.000139   0.000178   0.000176  0.0000045  0.0000044    0.000114    0.000083
+1992   3  11  48692  -0.025401   0.122046  -0.2958141   0.0023800   0.000364  -0.000039   0.000184   0.000133  0.0000040  0.0000051    0.000095    0.000098
+1992   3  12  48693  -0.028462   0.123106  -0.2981985   0.0024187   0.000212  -0.000147   0.000258   0.000183  0.0000058  0.0000071    0.000140    0.000149
+1992   3  13  48694  -0.031972   0.124204  -0.3006851   0.0025686   0.000050  -0.000095   0.000270   0.000335  0.0000103  0.0000064    0.000273    0.000201
+1992   3  14  48695  -0.034655   0.125916  -0.3033676   0.0027935   0.000114   0.000045   0.000298   0.000379  0.0000070  0.0000081    0.000230    0.000191
+1992   3  15  48696  -0.037404   0.127937  -0.3062923   0.0030561   0.000305   0.000172   0.000505   0.000503  0.0000060  0.0000066    0.000204    0.000188
+1992   3  16  48697  -0.041140   0.129732  -0.3094797   0.0033215   0.000414   0.000185   0.000365   0.000370  0.0000063  0.0000063    0.000142    0.000113
+1992   3  17  48698  -0.044661   0.131568  -0.3129112   0.0035263   0.000340   0.000048   0.000331   0.000322  0.0000066  0.0000082    0.000143    0.000112
+1992   3  18  48699  -0.047278   0.133816  -0.3164894   0.0035936   0.000124  -0.000180   0.000574   0.000337  0.0000100  0.0000092    0.000205    0.000146
+1992   3  19  48700  -0.050326   0.135946  -0.3200497   0.0035053  -0.000054  -0.000382   0.000565   0.000285  0.0000117  0.0000088    0.000226    0.000159
+1992   3  20  48701  -0.054276   0.137351  -0.3234613   0.0033145  -0.000073  -0.000336   0.000412   0.000368  0.0000076  0.0000086    0.000169    0.000140
+1992   3  21  48702  -0.057870   0.139096  -0.3266605   0.0030690   0.000040   0.000080   0.000413   0.000366  0.0000055  0.0000063    0.000165    0.000154
+1992   3  22  48703  -0.060949   0.141014  -0.3296029   0.0028159   0.000162   0.000382   0.000351   0.000303  0.0000049  0.0000061    0.000161    0.000172
+1992   3  23  48704  -0.063808   0.142768  -0.3323111   0.0026220   0.000217   0.000285   0.000212   0.000209  0.0000067  0.0000061    0.000113    0.000197
+1992   3  24  48705  -0.066489   0.144626  -0.3348719   0.0025169   0.000230  -0.000009   0.000203   0.000203  0.0000072  0.0000070    0.000109    0.000201
+1992   3  25  48706  -0.068876   0.146852  -0.3373698   0.0024782   0.000260  -0.000201   0.000205   0.000205  0.0000072  0.0000088    0.000110    0.000200
+1992   3  26  48707  -0.070861   0.149237  -0.3398505   0.0024754   0.000330  -0.000183   0.000338   0.000336  0.0000104  0.0000089    0.000195    0.000186
+1992   3  27  48708  -0.072512   0.151405  -0.3423393   0.0025015   0.000413  -0.000025   0.000352   0.000349  0.0000106  0.0000105    0.000205    0.000185
+1992   3  28  48709  -0.074126   0.153304  -0.3448678   0.0025677   0.000451   0.000121   0.000354   0.000352  0.0000106  0.0000108    0.000205    0.000185
+1992   3  29  48710  -0.076156   0.155487  -0.3474825   0.0026794   0.000378   0.000166   0.000830   0.000746  0.0000109  0.0000110    0.000159    0.000212
+1992   3  30  48711  -0.078770   0.158409  -0.3502265   0.0028196   0.000181   0.000116   0.001226   0.000833  0.0000113  0.0000115    0.000129    0.000281
+1992   3  31  48712  -0.081457   0.161580  -0.3531140   0.0029526  -0.000072   0.000034   0.000981   0.000673  0.0000122  0.0000156    0.000140    0.000268
+1992   4   1  48713  -0.083203   0.163655  -0.3561174   0.0030390  -0.000223  -0.000017   0.001354   0.000999  0.0000199  0.0000164    0.000237    0.000232
+1992   4   2  48714  -0.084527   0.165220  -0.3591728   0.0030553  -0.000117  -0.000019   0.000940   0.000865  0.0000207  0.0000167    0.000279    0.000217
+1992   4   3  48715  -0.086411   0.166943  -0.3622060   0.0029977   0.000153  -0.000011   0.000439   0.000443  0.0000136  0.0000170    0.000187    0.000204
+1992   4   4  48716  -0.088784   0.168605  -0.3651471   0.0028745   0.000342  -0.000036   0.000484   0.000492  0.0000133  0.0000133    0.000183    0.000203
+1992   4   5  48717  -0.091082   0.169997  -0.3679403   0.0027079   0.000336  -0.000054   0.001164   0.001086  0.0000131  0.0000131    0.000160    0.000183
+1992   4   6  48718  -0.092828   0.171322  -0.3705603   0.0025369   0.000198   0.000001   0.000366   0.000322  0.0000129  0.0000132    0.000140    0.000164
+1992   4   7  48719  -0.094003   0.172997  -0.3730266   0.0024098   0.000072   0.000131   0.000303   0.000267  0.0000134  0.0000158    0.000147    0.000170
+1992   4   8  48720  -0.095080   0.175194  -0.3754052   0.0023681   0.000058   0.000220   0.000509   0.000415  0.0000187  0.0000141    0.000231    0.000229
+1992   4   9  48721  -0.096614   0.177638  -0.3777944   0.0024287   0.000120   0.000069   0.000618   0.000485  0.0000148  0.0000137    0.000272    0.000208
+1992   4  10  48722  -0.098608   0.179888  -0.3802920   0.0025809   0.000235  -0.000270   0.000416   0.000374  0.0000087  0.0000116    0.000193    0.000137
+1992   4  11  48723  -0.100565   0.181778  -0.3829758   0.0027998   0.000398  -0.000528   0.000556   0.000496  0.0000083  0.0000079    0.000187    0.000132
+1992   4  12  48724  -0.102237   0.183700  -0.3858955   0.0030495   0.000511  -0.000572   0.000819   0.000701  0.0000071  0.0000068    0.000189    0.000155
+1992   4  13  48725  -0.103703   0.186003  -0.3890604   0.0032835   0.000467  -0.000446   0.000314   0.000311  0.0000052  0.0000062    0.000188    0.000481
+1992   4  14  48726  -0.105216   0.188715  -0.3924315   0.0034542   0.000255  -0.000268   0.000261   0.000245  0.0000053  0.0000055    0.000152    0.000225
+1992   4  15  48727  -0.106926   0.191617  -0.3959278   0.0035216   0.000023  -0.000122   0.000194   0.000178  0.0000058  0.0000058    0.000105    0.000114
+1992   4  16  48728  -0.108774   0.194435  -0.3994351   0.0034459   0.000057   0.000032   0.000195   0.000213  0.0000063  0.0000061    0.000095    0.000085
+1992   4  17  48729  -0.110734   0.197183  -0.4027926   0.0032232   0.000282   0.000113   0.000261   0.000323  0.0000065  0.0000064    0.000093    0.000078
+1992   4  18  48730  -0.112669   0.199915  -0.4058738   0.0029188   0.000507   0.000078   0.000393   0.000504  0.0000065  0.0000060    0.000093    0.000077
+1992   4  19  48731  -0.114520   0.202460  -0.4086413   0.0026218   0.000587  -0.000017   0.000189   0.000245  0.0000055  0.0000060    0.000066    0.000098
+1992   4  20  48732  -0.116323   0.204610  -0.4111402   0.0023979   0.000462  -0.000084   0.000169   0.000216  0.0000055  0.0000051    0.000066    0.000098
+1992   4  21  48733  -0.118124   0.206363  -0.4134630   0.0022718   0.000191  -0.000068   0.000160   0.000184  0.0000048  0.0000044    0.000068    0.000097
+1992   4  22  48734  -0.119839   0.208091  -0.4157072   0.0022334  -0.000086  -0.000002   0.000144   0.000136  0.0000033  0.0000041    0.000086    0.000091
+1992   4  23  48735  -0.121300   0.210321  -0.4179486   0.0022589  -0.000223  -0.000003   0.000195   0.000180  0.0000034  0.0000053    0.000103    0.000099
+1992   4  24  48736  -0.122596   0.212942  -0.4202388   0.0023303  -0.000151  -0.000088   0.000243   0.000253  0.0000073  0.0000061    0.000133    0.000192
+1992   4  25  48737  -0.124089   0.215713  -0.4226174   0.0024394   0.000074  -0.000180   0.000294   0.000314  0.0000089  0.0000085    0.000137    0.000221
+1992   4  26  48738  -0.125885   0.218359  -0.4251194   0.0025741   0.000278  -0.000237   0.000777   0.000747  0.0000097  0.0000099    0.000144    0.000173
+1992   4  27  48739  -0.127681   0.220690  -0.4277604   0.0027054   0.000299  -0.000262   0.000275   0.000244  0.0000110  0.0000091    0.000154    0.000139
+1992   4  28  48740  -0.129095   0.222781  -0.4305188   0.0027935   0.000113  -0.000271   0.000224   0.000186  0.0000084  0.0000081    0.000150    0.000129
+1992   4  29  48741  -0.130128   0.224875  -0.4333315   0.0028057  -0.000108  -0.000250   0.000217   0.000151  0.0000052  0.0000068    0.000136    0.000104
+1992   4  30  48742  -0.131257   0.227223  -0.4361111   0.0027357  -0.000083  -0.000149   0.000203   0.000152  0.0000051  0.0000059    0.000128    0.000096
+1992   5   1  48743  -0.132862   0.230040  -0.4387830   0.0026028   0.000178  -0.000070   0.000178   0.000185  0.0000066  0.0000059    0.000119    0.000091
+1992   5   2  48744  -0.134980   0.233268  -0.4412997   0.0024324   0.000432  -0.000143   0.000177   0.000188  0.0000068  0.0000077    0.000118    0.000090
+1992   5   3  48745  -0.137388   0.236368  -0.4436396   0.0022518   0.000500  -0.000314   0.000226   0.000244  0.0000088  0.0000176    0.000149    0.000117
+1992   5   4  48746  -0.139737   0.238650  -0.4458096   0.0020937   0.000367  -0.000415   0.000840   0.000660  0.0000285  0.0000092    0.000306    0.000348
+1992   5   5  48747  -0.141736   0.239893  -0.4478490   0.0019948   0.000152  -0.000322   0.000346   0.000201  0.0000095  0.0000166    0.000165    0.000158
+1992   5   6  48748  -0.143295   0.240780  -0.4498312   0.0019878   0.000009  -0.000118   0.000181   0.000103  0.0000047  0.0000071    0.000091    0.000084
+1992   5   7  48749  -0.144499   0.242513  -0.4518564   0.0020909   0.000027  -0.000066   0.000177   0.000108  0.0000046  0.0000058    0.000093    0.000079
+1992   5   8  48750  -0.145382   0.245317  -0.4540339   0.0022889   0.000129  -0.000188   0.000245   0.000305  0.0000069  0.0000059    0.000160    0.000091
+1992   5   9  48751  -0.145960   0.248529  -0.4564378   0.0025216   0.000176  -0.000324   0.000255   0.000396  0.0000072  0.0000071    0.000169    0.000092
+1992   5  10  48752  -0.146417   0.251575  -0.4590632   0.0027098   0.000133  -0.000377   0.000566   0.000670  0.0000074  0.0000073    0.000140    0.000110
+1992   5  11  48753  -0.147094   0.254355  -0.4618300   0.0027999   0.000065  -0.000349   0.000489   0.000464  0.0000075  0.0000064    0.000117    0.000175
+1992   5  12  48754  -0.148300   0.257142  -0.4646287   0.0027880   0.000058  -0.000272   0.000257   0.000225  0.0000053  0.0000052    0.000114    0.000168
+1992   5  13  48755  -0.149967   0.260121  -0.4673722   0.0027037   0.000125  -0.000145   0.000144   0.000118  0.0000030  0.0000042    0.000104    0.000144
+1992   5  14  48756  -0.151374   0.262566  -0.4700098   0.0025614   0.000166   0.000071   0.000186   0.000155  0.0000030  0.0000052    0.000109    0.000134
+1992   5  15  48757  -0.152415   0.264667  -0.4724823   0.0023607   0.000154   0.000245   0.000273   0.000308  0.0000074  0.0000081    0.000171    0.000132
+1992   5  16  48758  -0.153483   0.266919  -0.4747350   0.0021369   0.000142   0.000178   0.000388   0.000497  0.0000132  0.0000142    0.000259    0.000199
+1992   5  17  48759  -0.154213   0.269127  -0.4767738   0.0019544   0.000145  -0.000118   0.000867   0.000962  0.0000210  0.0000113    0.000428    0.000446
+1992   5  18  48760  -0.154137   0.271074  -0.4786691   0.0018608   0.000177  -0.000436   0.000353   0.000428  0.0000094  0.0000136    0.000174    0.000173
+1992   5  19  48761  -0.153921   0.273195  -0.4805210   0.0018631   0.000189  -0.000543   0.000272   0.000330  0.0000063  0.0000085    0.000117    0.000114
+1992   5  20  48762  -0.154331   0.275753  -0.4824162   0.0019310   0.000108  -0.000366   0.000483   0.000559  0.0000076  0.0000071    0.000147    0.000142
+1992   5  21  48763  -0.154762   0.278191  -0.4843976   0.0020198  -0.000041  -0.000069   0.000392   0.000637  0.0000079  0.0000065    0.000207    0.000207
+1992   5  22  48764  -0.154423   0.280721  -0.4864640   0.0020964  -0.000149   0.000120   0.000278   0.000427  0.0000054  0.0000067    0.000143    0.000147
+1992   5  23  48765  -0.154681   0.283349  -0.4885923   0.0021747  -0.000050   0.000098   0.000320   0.000253  0.0000055  0.0000058    0.000120    0.000093
+1992   5  24  48766  -0.155405   0.286037  -0.4908091   0.0022736   0.000201   0.000031   0.000329   0.000190  0.0000062  0.0000063    0.000117    0.000084
+1992   5  25  48767  -0.155983   0.288864  -0.4931297   0.0023607   0.000359   0.000036   0.000318   0.000226  0.0000070  0.0000066    0.000153    0.000144
+1992   5  26  48768  -0.156581   0.291502  -0.4955167   0.0023897   0.000224   0.000085   0.000319   0.000239  0.0000070  0.0000062    0.000161    0.000168
+1992   5  27  48769  -0.157448   0.293643  -0.4978929   0.0023364  -0.000120   0.000092   0.000353   0.000275  0.0000054  0.0000060    0.000186    0.000174
+1992   5  28  48770  -0.158415   0.295396  -0.5001725   0.0022097  -0.000291   0.000001   0.000366   0.000322  0.0000049  0.0000058    0.000204    0.000178
+1992   5  29  48771  -0.158981   0.297220  -0.5022965   0.0020457  -0.000050  -0.000158   0.000297   0.000299  0.0000063  0.0000058    0.000160    0.000165
+1992   5  30  48772  -0.158701   0.299499  -0.5042534   0.0018722   0.000310  -0.000223   0.000290   0.000386  0.0000067  0.0000066    0.000143    0.000143
+1992   5  31  48773  -0.157786   0.301778  -0.5060411   0.0017008   0.000383  -0.000105   0.000364   0.000530  0.0000069  0.0000067    0.000174    0.000157
+1992   6   1  48774  -0.156834   0.304339  -0.5076706   0.0015628   0.000108   0.000015   0.000383   0.000338  0.0000067  0.0000061    0.000169    0.000160
+1992   6   2  48775  -0.156370   0.307176  -0.5091965   0.0015082  -0.000059   0.000011   0.000289   0.000206  0.0000053  0.0000070    0.000117    0.000127
+1992   6   3  48776  -0.156296   0.309784  -0.5107224   0.0015727   0.000189  -0.000071   0.000300   0.000173  0.0000073  0.0000084    0.000107    0.000127
+1992   6   4  48777  -0.155833   0.312875  -0.5123698   0.0017420   0.000318  -0.000197   0.000397   0.000256  0.0000114  0.0000144    0.000163    0.000180
+1992   6   5  48778  -0.155912   0.315942  -0.5142154   0.0019517   0.000214  -0.000341   0.000549   0.000579  0.0000215  0.0000267    0.000321    0.000252
+1992   6   6  48779  -0.156225   0.317757  -0.5162597   0.0021256   0.000102  -0.000499   0.000799   0.000951  0.0000420  0.0000159    0.000358    0.000257
+1992   6   7  48780  -0.156064   0.318978  -0.5184363   0.0022091   0.000155  -0.000563   0.001289   0.001112  0.0000102  0.0000243    0.000178    0.000172
+1992   6   8  48781  -0.155401   0.320883  -0.5206411   0.0021830   0.000390  -0.000383   0.000381   0.000372  0.0000066  0.0000084    0.000125    0.000130
+1992   6   9  48782  -0.154905   0.323338  -0.5227688   0.0020638   0.000700   0.000112   0.000340   0.000333  0.0000066  0.0000066    0.000125    0.000130
+1992   6  10  48783  -0.154914   0.325729  -0.5247450   0.0018931   0.000923   0.000798   0.000638   0.000630  0.0000066  0.0000069    0.000125    0.000130
+1992   6  11  48784  -0.154897   0.327985  -0.5265438   0.0017165   0.000946   0.001349   0.002032   0.002231  0.0000071  0.0000071    0.000134    0.000143
+1992   6  12  48785  -0.154415   0.330284  -0.5281797   0.0015634   0.000746   0.001446   0.000517   0.000403  0.0000076  0.0000062    0.000161    0.000200
+1992   6  13  48786  -0.153653   0.332787  -0.5296840   0.0014419   0.000399   0.000994   0.000398   0.000275  0.0000054  0.0000058    0.000156    0.000210
+1992   6  14  48787  -0.153056   0.335675  -0.5310856   0.0013489   0.000047   0.000234   0.000367   0.000225  0.0000039  0.0000047    0.000150    0.000234
+1992   6  15  48788  -0.152737   0.339224  -0.5324072   0.0013085  -0.000055  -0.000229   0.000352   0.000254  0.0000041  0.0000049    0.000172    0.000246
+1992   6  16  48789  -0.152887   0.342819  -0.5337260   0.0013474  -0.000199  -0.000284   0.000361   0.000365  0.0000058  0.0000067    0.000216    0.000216
+1992   6  17  48790  -0.153292   0.345984  -0.5351195   0.0014349  -0.000533  -0.000223   0.000378   0.000341  0.0000094  0.0000100    0.000202    0.000175
+1992   6  18  48791  -0.153245   0.349117  -0.5366057   0.0015291  -0.000502  -0.000295   0.000413   0.000365  0.0000142  0.0000148    0.000197    0.000183
+1992   6  19  48792  -0.153339   0.351770  -0.5381802   0.0016201  -0.000227  -0.000427   0.000552   0.000530  0.0000201  0.0000203    0.000206    0.000276
+1992   6  20  48793  -0.153989   0.353431  -0.5398421   0.0017134  -0.000131  -0.000387   0.000744   0.000775  0.0000265  0.0000202    0.000262    0.000371
+1992   6  21  48794  -0.153249   0.355107  -0.5415978   0.0018056  -0.000024  -0.000152   0.000753   0.001074  0.0000202  0.0000187    0.000336    0.000276
+1992   6  22  48795  -0.151553   0.357510  -0.5434401   0.0018715   0.000239   0.000075   0.000357   0.000420  0.0000108  0.0000132    0.000220    0.000192
+1992   6  23  48796  -0.150336   0.360063  -0.5453256   0.0018801   0.000332   0.000129   0.000216   0.000186  0.0000062  0.0000074    0.000122    0.000149
+1992   6  24  48797  -0.149566   0.362195  -0.5471850   0.0018194   0.000050  -0.000002   0.000164   0.000113  0.0000040  0.0000052    0.000078    0.000117
+1992   6  25  48798  -0.148973   0.364413  -0.5489505   0.0016956  -0.000177  -0.000244   0.000243   0.000165  0.0000042  0.0000068    0.000082    0.000122
+1992   6  26  48799  -0.148203   0.367064  -0.5505661   0.0015297  -0.000182  -0.000452   0.000527   0.000421  0.0000097  0.0000079    0.000177    0.000186
+1992   6  27  48800  -0.147234   0.369798  -0.5520069   0.0013616  -0.000054  -0.000506   0.000658   0.000565  0.0000116  0.0000117    0.000206    0.000201
+1992   6  28  48801  -0.146243   0.372296  -0.5532982   0.0012387   0.000153  -0.000408   0.001250   0.001039  0.0000137  0.0000086    0.000539    0.000446
+1992   6  29  48802  -0.145198   0.374609  -0.5545075   0.0011900   0.000399  -0.000260   0.000427   0.000375  0.0000056  0.0000086    0.000308    0.000222
+1992   6  30  48803  -0.143870   0.376890  -0.5557123   0.0012148   0.000562  -0.000168   0.000216   0.000184  0.0000035  0.0000042    0.000165    0.000129
+1992   7   1  48804  -0.142423   0.379224   0.4430285   0.0012981   0.000446  -0.000168   0.000125   0.000102  0.0000028  0.0000035    0.000095    0.000086
+1992   7   2  48805  -0.141548   0.381563   0.4416712   0.0014381  -0.000024  -0.000211   0.000155   0.000130  0.0000035  0.0000046    0.000107    0.000099
+1992   7   3  48806  -0.141084   0.384126   0.4401567   0.0016176  -0.000456  -0.000235   0.000347   0.000325  0.0000064  0.0000063    0.000150    0.000140
+1992   7   4  48807  -0.140324   0.386983   0.4384647   0.0017671  -0.000449  -0.000220   0.000837   0.000817  0.0000090  0.0000071    0.000168    0.000158
+1992   7   5  48808  -0.138920   0.389671   0.4366654   0.0018124  -0.000073  -0.000196   0.000532   0.000581  0.0000079  0.0000084    0.000158    0.000158
+1992   7   6  48809  -0.136955   0.391696   0.4348818   0.0017313   0.000346  -0.000206   0.000307   0.000337  0.0000078  0.0000082    0.000158    0.000159
+1992   7   7  48810  -0.134789   0.393067   0.4332321   0.0015539   0.000479  -0.000263   0.000307   0.000311  0.0000086  0.0000097    0.000159    0.000163
+1992   7   8  48811  -0.132689   0.394552   0.4317862   0.0013365   0.000279  -0.000318   0.000214   0.000184  0.0000116  0.0000087    0.000116    0.000140
+1992   7   9  48812  -0.130755   0.397033   0.4305563   0.0011301   0.000038  -0.000285   0.000141   0.000121  0.0000089  0.0000100    0.000077    0.000097
+1992   7  10  48813  -0.129468   0.399272   0.4295125   0.0009715  -0.000124  -0.000169   0.000169   0.000153  0.0000084  0.0000089    0.000096    0.000108
+1992   7  11  48814  -0.128484   0.401773   0.4285931   0.0008773  -0.000180  -0.000041   0.000244   0.000255  0.0000090  0.0000072    0.000146    0.000134
+1992   7  12  48815  -0.127576   0.404810   0.4277344   0.0008415  -0.000134   0.000041   0.000495   0.000457  0.0000060  0.0000066    0.000128    0.000136
+1992   7  13  48816  -0.126948   0.407527   0.4268866   0.0008534  -0.000032   0.000067   0.000270   0.000232  0.0000043  0.0000051    0.000099    0.000131
+1992   7  14  48817  -0.126658   0.409240   0.4260077   0.0009105   0.000054   0.000046   0.000177   0.000152  0.0000043  0.0000047    0.000099    0.000130
+1992   7  15  48818  -0.126234   0.410349   0.4250525   0.0010144   0.000050  -0.000014   0.000168   0.000110  0.0000051  0.0000056    0.000098    0.000105
+1992   7  16  48819  -0.124960   0.411916   0.4239738   0.0011527  -0.000097  -0.000126   0.000190   0.000102  0.0000069  0.0000066    0.000102    0.000099
+1992   7  17  48820  -0.122820   0.414195   0.4227494   0.0012902  -0.000305  -0.000251   0.000255   0.000144  0.0000082  0.0000077    0.000120    0.000141
+1992   7  18  48821  -0.120904   0.415836   0.4214018   0.0014013  -0.000261  -0.000247   0.000355   0.000146  0.0000085  0.0000079    0.000121    0.000156
+1992   7  19  48822  -0.118680   0.417442   0.4199595   0.0014845  -0.000061  -0.000136   0.000370   0.000126  0.0000076  0.0000060    0.000115    0.000135
+1992   7  20  48823  -0.115655   0.419976   0.4184481   0.0015377   0.000084  -0.000049   0.000239   0.000238  0.0000034  0.0000054    0.000142    0.000152
+1992   7  21  48824  -0.112560   0.423099   0.4168999   0.0015520   0.000120  -0.000076   0.000149   0.000232  0.0000032  0.0000033    0.000148    0.000131
+1992   7  22  48825  -0.110164   0.425929   0.4153579   0.0015196   0.000077  -0.000194   0.000080   0.000122  0.0000032  0.0000032    0.000100    0.000085
+1992   7  23  48826  -0.108227   0.427929   0.4138705   0.0014474   0.000018  -0.000227   0.000073   0.000105  0.0000033  0.0000038    0.000057    0.000074
+1992   7  24  48827  -0.106347   0.430331   0.4124670   0.0013589  -0.000011  -0.000176   0.000103   0.000137  0.0000044  0.0000048    0.000065    0.000094
+1992   7  25  48828  -0.104054   0.432418   0.4111478   0.0012803  -0.000001  -0.000127   0.000227   0.000233  0.0000064  0.0000050    0.000141    0.000180
+1992   7  26  48829  -0.101658   0.433965   0.4098900   0.0012343   0.000043  -0.000130   0.000311   0.000271  0.0000056  0.0000058    0.000204    0.000290
+1992   7  27  48830  -0.099653   0.436022   0.4086509   0.0012453   0.000116  -0.000212   0.000298   0.000289  0.0000052  0.0000047    0.000202    0.000173
+1992   7  28  48831  -0.097877   0.437978   0.4073648   0.0013383   0.000199  -0.000339   0.000168   0.000156  0.0000038  0.0000039    0.000092    0.000095
+1992   7  29  48832  -0.096379   0.439415   0.4059451   0.0015197   0.000222  -0.000408   0.000104   0.000091  0.0000026  0.0000032    0.000056    0.000070
+1992   7  30  48833  -0.094601   0.441134   0.4043151   0.0017556   0.000114  -0.000358   0.000090   0.000073  0.0000025  0.0000031    0.000055    0.000088
+1992   7  31  48834  -0.092296   0.443136   0.4024507   0.0019812  -0.000075  -0.000221   0.000128   0.000104  0.0000035  0.0000027    0.000078    0.000124
+1992   8   1  48835  -0.090298   0.445591   0.4003930   0.0021276  -0.000205  -0.000054   0.000147   0.000112  0.0000029  0.0000030    0.000095    0.000102
+1992   8   2  48836  -0.088138   0.448273   0.3982454   0.0021441  -0.000225  -0.000022   0.000130   0.000105  0.0000024  0.0000029    0.000088    0.000093
+1992   8   3  48837  -0.085999   0.450657   0.3961469   0.0020306  -0.000147  -0.000055   0.000162   0.000146  0.0000029  0.0000028    0.000097    0.000107
+1992   8   4  48838  -0.084149   0.452636   0.3942069   0.0018431  -0.000028  -0.000041   0.000153   0.000140  0.0000032  0.0000025    0.000085    0.000093
+1992   8   5  48839  -0.081973   0.454526   0.3924619   0.0016442   0.000026  -0.000104   0.000098   0.000084  0.0000022  0.0000027    0.000055    0.000066
+1992   8   6  48840  -0.080106   0.456422   0.3909044   0.0014637  -0.000022  -0.000212   0.000094   0.000082  0.0000022  0.0000027    0.000052    0.000064
+1992   8   7  48841  -0.078480   0.458206   0.3895129   0.0013215  -0.000075  -0.000298   0.000136   0.000118  0.0000032  0.0000026    0.000070    0.000095
+1992   8   8  48842  -0.076571   0.460632   0.3882381   0.0012329  -0.000129  -0.000336   0.000145   0.000116  0.0000030  0.0000028    0.000072    0.000095
+1992   8   9  48843  -0.074536   0.463243   0.3870246   0.0011880  -0.000209  -0.000263   0.000157   0.000104  0.0000023  0.0000026    0.000064    0.000081
+1992   8  10  48844  -0.072590   0.465732   0.3858420   0.0011946  -0.000195  -0.000153   0.000144   0.000088  0.0000022  0.0000026    0.000071    0.000082
+1992   8  11  48845  -0.070583   0.468448   0.3846198   0.0013025  -0.000088  -0.000155   0.000106   0.000099  0.0000029  0.0000032    0.000094    0.000083
+1992   8  12  48846  -0.068441   0.471272   0.3832283   0.0014996  -0.000124  -0.000260   0.000104   0.000134  0.0000042  0.0000041    0.000086    0.000086
+1992   8  13  48847  -0.066562   0.473623   0.3816198   0.0017015  -0.000184  -0.000325   0.000151   0.000201  0.0000054  0.0000054    0.000108    0.000115
+1992   8  14  48848  -0.064759   0.475289   0.3798318   0.0018427  -0.000249  -0.000392   0.000325   0.000313  0.0000066  0.0000069    0.000124    0.000139
+1992   8  15  48849  -0.062749   0.476926   0.3779464   0.0019029  -0.000313  -0.000368   0.000649   0.000489  0.0000084  0.0000066    0.000113    0.000134
+1992   8  16  48850  -0.060464   0.478877   0.3760414   0.0018998  -0.000342  -0.000240   0.000665   0.000517  0.0000065  0.0000067    0.000124    0.000153
+1992   8  17  48851  -0.057917   0.480825   0.3741633   0.0018642  -0.000322  -0.000146   0.000264   0.000229  0.0000051  0.0000059    0.000148    0.000206
+1992   8  18  48852  -0.055118   0.482344   0.3723284   0.0018175  -0.000254  -0.000196   0.000222   0.000203  0.0000054  0.0000059    0.000113    0.000174
+1992   8  19  48853  -0.052028   0.483566   0.3705398   0.0017656  -0.000156  -0.000353   0.000141   0.000135  0.0000067  0.0000066    0.000075    0.000127
+1992   8  20  48854  -0.048720   0.485016   0.3688023   0.0017033  -0.000054  -0.000421   0.000163   0.000158  0.0000079  0.0000083    0.000079    0.000135
+1992   8  21  48855  -0.045645   0.486675   0.3671299   0.0016322   0.000043  -0.000328   0.000405   0.000393  0.0000100  0.0000117    0.000156    0.000253
+1992   8  22  48856  -0.043405   0.488373   0.3655249   0.0015779   0.000135  -0.000148   0.000575   0.000563  0.0000154  0.0000184    0.000247    0.000397
+1992   8  23  48857  -0.041315   0.489609   0.3639511   0.0015817   0.000207  -0.000026   0.001367   0.001170  0.0000269  0.0000118    0.000530    0.000545
+1992   8  24  48858  -0.037840   0.490112   0.3623310   0.0016781   0.000231  -0.000043   0.000575   0.000481  0.0000081  0.0000165    0.000300    0.000266
+1992   8  25  48859  -0.033045   0.490763   0.3605639   0.0018767   0.000192  -0.000176   0.000383   0.000318  0.0000061  0.0000078    0.000202    0.000207
+1992   8  26  48860  -0.029034   0.492552   0.3585571   0.0021513   0.000131  -0.000262   0.000504   0.000400  0.0000075  0.0000060    0.000193    0.000255
+1992   8  27  48861  -0.027097   0.493878   0.3562620   0.0024421   0.000095  -0.000120   0.000385   0.000346  0.0000060  0.0000071    0.000181    0.000220
+1992   8  28  48862  -0.024370   0.495362   0.3536998   0.0026654  -0.000068  -0.000031   0.000304   0.000284  0.0000067  0.0000060    0.000126    0.000144
+1992   8  29  48863  -0.021331   0.496781   0.3509777   0.0027432  -0.000180  -0.000035   0.000355   0.000335  0.0000059  0.0000058    0.000147    0.000176
+1992   8  30  48864  -0.017954   0.498764   0.3482640   0.0026448  -0.000165  -0.000105   0.000452   0.000391  0.0000049  0.0000051    0.000211    0.000282
+1992   8  31  48865  -0.014923   0.501032   0.3457259   0.0024037  -0.000196  -0.000164   0.000264   0.000226  0.0000042  0.0000043    0.000175    0.000156
+1992   9   1  48866  -0.013062   0.502399   0.3434712   0.0020962  -0.000254  -0.000157   0.000171   0.000146  0.0000037  0.0000039    0.000131    0.000111
+1992   9   2  48867  -0.011519   0.502412   0.3415256   0.0018008  -0.000208  -0.000132   0.000148   0.000114  0.0000035  0.0000038    0.000095    0.000118
+1992   9   3  48868  -0.009366   0.501767   0.3398477   0.0015669  -0.000163  -0.000155   0.000161   0.000122  0.0000038  0.0000059    0.000095    0.000132
+1992   9   4  48869  -0.006674   0.501449   0.3383658   0.0014140  -0.000090  -0.000259   0.000370   0.000293  0.0000084  0.0000074    0.000132    0.000188
+1992   9   5  48870  -0.004164   0.501924   0.3369955   0.0013527   0.000129  -0.000411   0.000594   0.000490  0.0000110  0.0000069    0.000140    0.000200
+1992   9   6  48871  -0.001909   0.502919   0.3356401   0.0013874   0.000405  -0.000545   0.000567   0.000468  0.0000053  0.0000074    0.000130    0.000165
+1992   9   7  48872   0.000458   0.503787   0.3342046   0.0015045   0.000521  -0.000596   0.000224   0.000182  0.0000037  0.0000046    0.000120    0.000137
+1992   9   8  48873   0.003209   0.504141   0.3326200   0.0016709   0.000330  -0.000543   0.000236   0.000191  0.0000040  0.0000057    0.000127    0.000145
+1992   9   9  48874   0.006110   0.504272   0.3308583   0.0018456  -0.000065  -0.000432   0.000446   0.000359  0.0000076  0.0000111    0.000222    0.000240
+1992   9  10  48875   0.008517   0.504903   0.3289318   0.0019940  -0.000305  -0.000348   0.000743   0.000716  0.0000182  0.0000092    0.000335    0.000316
+1992   9  11  48876   0.010381   0.506001   0.3268802   0.0020940  -0.000321  -0.000305   0.000427   0.000465  0.0000109  0.0000143    0.000236    0.000227
+1992   9  12  48877   0.012271   0.506808   0.3247584   0.0021350  -0.000329  -0.000245   0.000415   0.000452  0.0000104  0.0000084    0.000229    0.000221
+1992   9  13  48878   0.014492   0.506926   0.3226271   0.0021164  -0.000364  -0.000165   0.000709   0.000512  0.0000059  0.0000074    0.000150    0.000155
+1992   9  14  48879   0.016942   0.506659   0.3205425   0.0020468  -0.000321  -0.000108   0.000501   0.000313  0.0000043  0.0000053    0.000114    0.000120
+1992   9  15  48880   0.019420   0.506677   0.3185477   0.0019426  -0.000128  -0.000119   0.000376   0.000237  0.0000047  0.0000059    0.000123    0.000129
+1992   9  16  48881   0.021950   0.507276   0.3166656   0.0018262   0.000082  -0.000192   0.000444   0.000353  0.0000074  0.0000043    0.000189    0.000196
+1992   9  17  48882   0.024499   0.507515   0.3148947   0.0017223  -0.000007  -0.000245   0.000223   0.000352  0.0000040  0.0000051    0.000135    0.000143
+1992   9  18  48883   0.026963   0.507809   0.3132100   0.0016513  -0.000317  -0.000242   0.000166   0.000291  0.0000028  0.0000034    0.000098    0.000104
+1992   9  19  48884   0.029309   0.507907   0.3115714   0.0016259  -0.000538  -0.000203   0.000219   0.000322  0.0000028  0.0000032    0.000096    0.000102
+1992   9  20  48885   0.031627   0.507460   0.3099307   0.0016574  -0.000536  -0.000165   0.000954   0.000742  0.0000036  0.0000034    0.000105    0.000124
+1992   9  21  48886   0.033931   0.506797   0.3082276   0.0017603  -0.000363  -0.000157   0.000344   0.000247  0.0000039  0.0000038    0.000107    0.000134
+1992   9  22  48887   0.036051   0.506673   0.3063870   0.0019445  -0.000178  -0.000180   0.000193   0.000126  0.0000039  0.0000039    0.000092    0.000120
+1992   9  23  48888   0.037953   0.507068   0.3043295   0.0021953  -0.000115  -0.000196   0.000132   0.000081  0.0000038  0.0000039    0.000070    0.000094
+1992   9  24  48889   0.039945   0.506843   0.3020082   0.0024503  -0.000173  -0.000146   0.000152   0.000096  0.0000038  0.0000039    0.000084    0.000109
+1992   9  25  48890   0.042096   0.506485   0.2994621   0.0026235  -0.000281  -0.000057   0.000289   0.000243  0.0000039  0.0000039    0.000171    0.000183
+1992   9  26  48891   0.044230   0.506788   0.2968080   0.0026616  -0.000358   0.000006   0.000545   0.000475  0.0000039  0.0000038    0.000193    0.000196
+1992   9  27  48892   0.046251   0.506944   0.2941845   0.0025671  -0.000370   0.000028   0.000719   0.000552  0.0000036  0.0000037    0.000215    0.000155
+1992   9  28  48893   0.048306   0.506455   0.2917032   0.0023848  -0.000334   0.000031   0.000237   0.000193  0.0000035  0.0000036    0.000225    0.000145
+1992   9  29  48894   0.050607   0.505441   0.2894207   0.0021755  -0.000289   0.000050   0.000232   0.000189  0.0000035  0.0000035    0.000225    0.000145
+1992   9  30  48895   0.053177   0.504303   0.2873370   0.0019902  -0.000259   0.000103   0.000236   0.000196  0.0000036  0.0000043    0.000216    0.000149
+1992  10   1  48896   0.055745   0.503378   0.2854138   0.0018579  -0.000233   0.000164   0.000294   0.000357  0.0000052  0.0000044    0.000164    0.000245
+1992  10   2  48897   0.058034   0.502859   0.2835934   0.0017894  -0.000187   0.000185   0.000296   0.000367  0.0000052  0.0000052    0.000163    0.000250
+1992  10   3  48898   0.060116   0.502753   0.2818119   0.0017849  -0.000116   0.000132   0.000308   0.000381  0.0000052  0.0000047    0.000163    0.000250
+1992  10   4  48899   0.062464   0.502856   0.2800065   0.0018398  -0.000054   0.000003   0.000811   0.000709  0.0000041  0.0000045    0.000116    0.000133
+1992  10   5  48900   0.065432   0.502893   0.2781204   0.0019458  -0.000050  -0.000173   0.000474   0.000355  0.0000038  0.0000040    0.000106    0.000119
+1992  10   6  48901   0.068775   0.502746   0.2761083   0.0020887  -0.000139  -0.000348   0.000328   0.000242  0.0000038  0.0000039    0.000106    0.000119
+1992  10   7  48902   0.071904   0.502517   0.2739428   0.0022464  -0.000310  -0.000480   0.000496   0.000366  0.0000039  0.0000051    0.000110    0.000123
+1992  10   8  48903   0.074939   0.502163   0.2716222   0.0023891  -0.000502  -0.000533   0.000575   0.000538  0.0000064  0.0000052    0.000200    0.000248
+1992  10   9  48904   0.077931   0.501728   0.2691772   0.0024851  -0.000635  -0.000494   0.000377   0.000372  0.0000065  0.0000064    0.000206    0.000258
+1992  10  10  48905   0.080494   0.501280   0.2666681   0.0025125  -0.000657  -0.000381   0.000539   0.000524  0.0000065  0.0000054    0.000206    0.000258
+1992  10  11  48906   0.082566   0.500471   0.2641694   0.0024693  -0.000571  -0.000238   0.000972   0.000767  0.0000042  0.0000051    0.000152    0.000233
+1992  10  12  48907   0.084531   0.499124   0.2617455   0.0023738  -0.000423  -0.000123   0.000247   0.000202  0.0000038  0.0000037    0.000137    0.000212
+1992  10  13  48908   0.086925   0.497630   0.2594335   0.0022553  -0.000272  -0.000073   0.000164   0.000149  0.0000032  0.0000030    0.000109    0.000131
+1992  10  14  48909   0.089814   0.496461   0.2572387   0.0021442  -0.000158  -0.000087   0.000110   0.000116  0.0000022  0.0000028    0.000071    0.000073
+1992  10  15  48910   0.092701   0.495710   0.2551379   0.0020648  -0.000093  -0.000128   0.000121   0.000127  0.0000025  0.0000031    0.000080    0.000082
+1992  10  16  48911   0.095490   0.495484   0.2530903   0.0020365  -0.000108  -0.000120   0.000202   0.000195  0.0000039  0.0000033    0.000134    0.000151
+1992  10  17  48912   0.098222   0.495590   0.2510379   0.0020774  -0.000208  -0.000028   0.000330   0.000311  0.0000042  0.0000032    0.000145    0.000169
+1992  10  18  48913   0.100545   0.495400   0.2489068   0.0021999  -0.000315   0.000066   0.000380   0.000357  0.0000025  0.0000032    0.000080    0.000097
+1992  10  19  48914   0.102409   0.494760   0.2466151   0.0024037  -0.000337   0.000064   0.000189   0.000184  0.0000022  0.0000024    0.000070    0.000086
+1992  10  20  48915   0.104039   0.493817   0.2440881   0.0026699  -0.000238  -0.000069   0.000214   0.000206  0.0000023  0.0000029    0.000070    0.000086
+1992  10  21  48916   0.105819   0.492667   0.2412801   0.0029509  -0.000086  -0.000235   0.000195   0.000183  0.0000037  0.0000035    0.000072    0.000085
+1992  10  22  48917   0.107980   0.491365   0.2382083   0.0031638  -0.000023  -0.000250   0.000171   0.000160  0.0000047  0.0000040    0.000081    0.000104
+1992  10  23  48918   0.110269   0.490019   0.2349884   0.0032285  -0.000073  -0.000116   0.000193   0.000180  0.0000043  0.0000062    0.000106    0.000191
+1992  10  24  48919   0.112457   0.488861   0.2317928   0.0031264  -0.000135   0.000036   0.000339   0.000311  0.0000077  0.0000089    0.000194    0.000361
+1992  10  25  48920   0.114798   0.488335   0.2287707   0.0029044  -0.000092   0.000152   0.000747   0.000614  0.0000134  0.0000056    0.000417    0.000635
+1992  10  26  48921   0.117102   0.488033   0.2260020   0.0026373   0.000051   0.000213   0.000385   0.000341  0.0000035  0.0000083    0.000123    0.000218
+1992  10  27  48922   0.118917   0.487154   0.2234928   0.0023927   0.000168   0.000216   0.000263   0.000239  0.0000032  0.0000034    0.000115    0.000203
+1992  10  28  48923   0.120426   0.485777   0.2211960   0.0022137   0.000159   0.000156   0.000344   0.000320  0.0000033  0.0000039    0.000117    0.000199
+1992  10  29  48924   0.121730   0.484374   0.2190368   0.0021192   0.000049   0.000026   0.000296   0.000338  0.0000045  0.0000041    0.000143    0.000170
+1992  10  30  48925   0.123085   0.482952   0.2169306   0.0021066  -0.000066  -0.000151   0.000197   0.000230  0.0000049  0.0000064    0.000149    0.000175
+1992  10  31  48926   0.124901   0.480982   0.2148033   0.0021526  -0.000098  -0.000290   0.000268   0.000330  0.0000083  0.0000082    0.000177    0.000206
+1992  11   1  48927   0.127202   0.479146   0.2126124   0.0022185  -0.000038  -0.000265   0.000357   0.000424  0.0000115  0.0000060    0.000182    0.000221
+1992  11   2  48928   0.129623   0.477886   0.2103596   0.0022736   0.000051  -0.000143   0.000195   0.000163  0.0000038  0.0000078    0.000109    0.000182
+1992  11   3  48929   0.131828   0.476964   0.2080639   0.0023220   0.000090  -0.000110   0.000208   0.000174  0.0000041  0.0000050    0.000120    0.000202
+1992  11   4  48930   0.133805   0.475956   0.2057201   0.0023887   0.000052  -0.000222   0.000315   0.000255  0.0000063  0.0000041    0.000142    0.000178
+1992  11   5  48931   0.135617   0.474757   0.2032969   0.0024713  -0.000009  -0.000305   0.000222   0.000163  0.0000040  0.0000047    0.000087    0.000096
+1992  11   6  48932   0.136891   0.473566   0.2007920   0.0025252  -0.000077  -0.000260   0.000205   0.000122  0.0000031  0.0000034    0.000097    0.000093
+1992  11   7  48933   0.138039   0.472317   0.1982628   0.0025126  -0.000142  -0.000229   0.000218   0.000112  0.0000028  0.0000030    0.000126    0.000100
+1992  11   8  48934   0.139526   0.470849   0.1957826   0.0024384  -0.000178  -0.000257   0.000186   0.000114  0.0000029  0.0000030    0.000121    0.000091
+1992  11   9  48935   0.141265   0.469132   0.1933989   0.0023332  -0.000162  -0.000229   0.000165   0.000128  0.0000031  0.0000031    0.000106    0.000078
+1992  11  10  48936   0.143017   0.467238   0.1911235   0.0022277  -0.000097  -0.000062   0.000204   0.000147  0.0000033  0.0000043    0.000110    0.000083
+1992  11  11  48937   0.144919   0.465313   0.1889413   0.0021426  -0.000021   0.000139   0.000284   0.000139  0.0000055  0.0000061    0.000130    0.000111
+1992  11  12  48938   0.147215   0.463454   0.1868237   0.0020899   0.000005   0.000087   0.000319   0.000133  0.0000088  0.0000073    0.000155    0.000144
+1992  11  13  48939   0.149462   0.461838   0.1847359   0.0020861   0.000013  -0.000140   0.000396   0.000335  0.0000090  0.0000072    0.000228    0.000239
+1992  11  14  48940   0.151348   0.460623   0.1826213   0.0021596   0.000061  -0.000244   0.000307   0.000308  0.0000055  0.0000068    0.000166    0.000211
+1992  11  15  48941   0.153464   0.459536   0.1803910   0.0023275   0.000038  -0.000171   0.000305   0.000295  0.0000045  0.0000045    0.000142    0.000179
+1992  11  16  48942   0.155991   0.458319   0.1779538   0.0025660  -0.000072  -0.000030   0.000280   0.000232  0.0000036  0.0000041    0.000132    0.000098
+1992  11  17  48943   0.158252   0.457105   0.1752632   0.0028130  -0.000155   0.000068   0.000204   0.000168  0.0000037  0.0000050    0.000134    0.000097
+1992  11  18  48944   0.159893   0.456222   0.1723476   0.0029934  -0.000171   0.000028   0.000294   0.000222  0.0000065  0.0000080    0.000163    0.000134
+1992  11  19  48945   0.162118   0.455203   0.1693069   0.0030575  -0.000225  -0.000151   0.000495   0.000327  0.0000124  0.0000062    0.000178    0.000180
+1992  11  20  48946   0.164809   0.453732   0.1662674   0.0029999  -0.000305  -0.000321   0.000272   0.000202  0.0000059  0.0000077    0.000147    0.000235
+1992  11  21  48947   0.166634   0.452014   0.1633388   0.0028500  -0.000297  -0.000311   0.000140   0.000100  0.0000029  0.0000042    0.000099    0.000134
+1992  11  22  48948   0.167832   0.450159   0.1605882   0.0026521  -0.000293  -0.000212   0.000116   0.000083  0.0000024  0.0000031    0.000086    0.000112
+1992  11  23  48949   0.169048   0.448342   0.1580394   0.0024490  -0.000336  -0.000115   0.000173   0.000136  0.0000032  0.0000029    0.000108    0.000214
+1992  11  24  48950   0.170190   0.446632   0.1556781   0.0022776  -0.000341   0.000004   0.000220   0.000181  0.0000034  0.0000033    0.000114    0.000271
+1992  11  25  48951   0.170900   0.444751   0.1534600   0.0021626  -0.000226   0.000188   0.000410   0.000331  0.0000034  0.0000034    0.000114    0.000272
+1992  11  26  48952   0.171160   0.442347   0.1513247   0.0021122   0.000005   0.000431   0.001223   0.000875  0.0000034  0.0000034    0.000114    0.000272
+1992  11  27  48953   0.171437   0.439638   0.1492114   0.0021195   0.000280   0.000671   0.002332   0.002426  0.0000034  0.0000032    0.000113    0.000271
+1992  11  28  48954   0.172202   0.437108   0.1470696   0.0021703   0.000490   0.000807   0.002234   0.002317  0.0000031  0.0000032    0.000082    0.000193
+1992  11  29  48955   0.173399   0.434941   0.1448630   0.0022507   0.000534   0.000738   0.000351   0.000268  0.0000031  0.0000031    0.000083    0.000193
+1992  11  30  48956   0.174478   0.432868   0.1425672   0.0023512   0.000385   0.000432   0.000186   0.000141  0.0000031  0.0000033    0.000084    0.000196
+1992  12   1  48957   0.175037   0.430576   0.1401650   0.0024664   0.000111  -0.000004   0.000240   0.000182  0.0000036  0.0000047    0.000096    0.000212
+1992  12   2  48958   0.175343   0.428176   0.1376439   0.0025863  -0.000125  -0.000328   0.000246   0.000184  0.0000062  0.0000046    0.000119    0.000125
+1992  12   3  48959   0.176175   0.426092   0.1350059   0.0026831  -0.000154  -0.000290   0.000132   0.000099  0.0000056  0.0000063    0.000080    0.000070
+1992  12   4  48960   0.178135   0.424471   0.1322932   0.0027180  -0.000051   0.000018   0.000153   0.000123  0.0000063  0.0000049    0.000091    0.000077
+1992  12   5  48961   0.179793   0.423075   0.1295848   0.0026851  -0.000070   0.000207   0.000210   0.000165  0.0000042  0.0000043    0.000118    0.000094
+1992  12   6  48962   0.180495   0.421370   0.1269354   0.0026137  -0.000242   0.000155   0.000230   0.000122  0.0000022  0.0000033    0.000138    0.000098
+1992  12   7  48963   0.181035   0.419132   0.1243653   0.0025239  -0.000389   0.000024   0.000214   0.000127  0.0000024  0.0000026    0.000130    0.000100
+1992  12   8  48964   0.182091   0.416931   0.1218883   0.0024261  -0.000347  -0.000021   0.000214   0.000149  0.0000030  0.0000040    0.000129    0.000109
+1992  12   9  48965   0.183441   0.415134   0.1195034   0.0023464  -0.000186   0.000024   0.000389   0.000276  0.0000057  0.0000083    0.000193    0.000157
+1992  12  10  48966   0.184414   0.413101   0.1171741   0.0023176  -0.000219   0.000019   0.000880   0.000626  0.0000136  0.0000207    0.000259    0.000194
+1992  12  11  48967   0.185129   0.410806   0.1148382   0.0023618  -0.000422  -0.000053   0.001078   0.001054  0.0000357  0.0000271    0.000279    0.000194
+1992  12  12  48968   0.186139   0.408464   0.1124206   0.0024845  -0.000530  -0.000099   0.001002   0.001134  0.0000407  0.0000201    0.000280    0.000194
+1992  12  13  48969   0.187600   0.406354   0.1098508   0.0026669  -0.000458  -0.000077   0.000703   0.000709  0.0000044  0.0000216    0.000113    0.000102
+1992  12  14  48970   0.189096   0.404552   0.1070878   0.0028645  -0.000321  -0.000020   0.000218   0.000229  0.0000025  0.0000036    0.000077    0.000072
+1992  12  15  48971   0.189990   0.402722   0.1041425   0.0030181  -0.000272   0.000011   0.000174   0.000185  0.0000027  0.0000035    0.000082    0.000074
+1992  12  16  48972   0.190182   0.400546   0.1010851   0.0030746  -0.000334  -0.000025   0.000292   0.000281  0.0000045  0.0000058    0.000134    0.000085
+1992  12  17  48973   0.190585   0.398244   0.0980295   0.0030097  -0.000329  -0.000098   0.000448   0.000323  0.0000089  0.0000078    0.000204    0.000091
+1992  12  18  48974   0.191735   0.396034   0.0950956   0.0028365  -0.000198  -0.000159   0.001280   0.000871  0.0000111  0.0000346    0.000225    0.000097
+1992  12  19  48975   0.193071   0.393775   0.0923751   0.0025957  -0.000042  -0.000165   0.002383   0.002467  0.0000603  0.0000164    0.000425    0.000396
+1992  12  20  48976   0.193820   0.391228   0.0899093   0.0023425   0.000012  -0.000113   0.000968   0.000904  0.0000217  0.0000331    0.000342    0.000370
+1992  12  21  48977   0.193962   0.388415   0.0876817   0.0021311  -0.000065  -0.000041   0.000357   0.000288  0.0000059  0.0000131    0.000139    0.000198
+1992  12  22  48978   0.194195   0.383226   0.0855149   0.0019087  -0.000865  -0.000098   0.000368   0.000438  0.0000024  0.0000049    0.000695    0.000833
+1992  12  23  48979   0.195472   0.382357   0.0836370   0.0018826  -0.000035  -0.000109   0.000263   0.000333  0.0000025  0.0000023    0.000718    0.000864
+1992  12  24  48980   0.196264   0.380250   0.0817237   0.0019524   0.000448  -0.000118   0.000473   0.000544  0.0000022  0.0000022    0.000628    0.000743
+1992  12  25  48981   0.197387   0.377354   0.0797120   0.0020758   0.000601  -0.000124   0.000683   0.000756  0.0000020  0.0000020    0.000538    0.000622
+1992  12  26  48982   0.198350   0.374586   0.0775607   0.0022267   0.000481  -0.000129   0.000892   0.000967  0.0000018  0.0000018    0.000448    0.000501
+1992  12  27  48983   0.200391   0.372102   0.0752561   0.0023787   0.000175  -0.000132   0.001127   0.001111  0.0000016  0.0000016    0.000359    0.000380
+1992  12  28  48984   0.202298   0.370025   0.0728080   0.0025129  -0.000071  -0.000131   0.001386   0.001187  0.0000014  0.0000013    0.000430    0.000403
+1992  12  29  48985   0.205224   0.367278   0.0702400   0.0026202  -0.000095  -0.000135   0.001052   0.000940  0.0000011  0.0000011    0.000655    0.000596
+1992  12  30  48986   0.206463   0.364572   0.0675811   0.0026950  -0.000084  -0.000188   0.000580   0.000620  0.0000008  0.0000016    0.000422    0.000531
+1992  12  31  48987   0.207819   0.363277   0.0648654   0.0027273   0.000274  -0.000249   0.000956   0.001043  0.0000021  0.0000010    0.000549    0.000808
+1993   1   1  48988   0.208598   0.359592   0.0621419   0.0027101   0.000557  -0.000284   0.000266   0.000295  0.0000041  0.0000052    0.000323    0.000426
+1993   1   2  48989   0.207964   0.355645   0.0594571   0.0026550   0.000585  -0.000289   0.000155   0.000183  0.0000035  0.0000035    0.000333    0.000394
+1993   1   3  48990   0.208410   0.352628   0.0568394   0.0025807   0.000441  -0.000272   0.000167   0.000228  0.0000030  0.0000030    0.000343    0.000363
+1993   1   4  48991   0.208304   0.350310   0.0542969   0.0025057   0.000191  -0.000242   0.000240   0.000250  0.0000025  0.0000025    0.000352    0.000332
+1993   1   5  48992   0.208103   0.347287   0.0518212   0.0024447  -0.000053  -0.000209   0.000351   0.000290  0.0000021  0.0000026    0.000341    0.000290
+1993   1   6  48993   0.208909   0.344281   0.0493906   0.0024118  -0.000179  -0.000192   0.000318   0.000248  0.0000027  0.0000024    0.000222    0.000192
+1993   1   7  48994   0.210391   0.341339   0.0469706   0.0024225  -0.000189  -0.000113   0.000308   0.000208  0.0000027  0.0000027    0.000337    0.000320
+1993   1   8  48995   0.210147   0.337942   0.0445135   0.0024898  -0.000143  -0.000016   0.000337   0.000279  0.0000027  0.0000026    0.000465    0.000459
+1993   1   9  48996   0.211606   0.335893   0.0419648   0.0026120  -0.000138   0.000067   0.000356   0.000347  0.0000025  0.0000025    0.000500    0.000461
+1993   1  10  48997   0.213394   0.333624   0.0392806   0.0027646  -0.000159   0.000126   0.000362   0.000344  0.0000024  0.0000024    0.000536    0.000463
+1993   1  11  48998   0.213148   0.331091   0.0364503   0.0029037  -0.000204   0.000147   0.000282   0.000303  0.0000022  0.0000023    0.000572    0.000466
+1993   1  12  48999   0.214440   0.328816   0.0335081   0.0029832  -0.000245   0.000127   0.000205   0.000249  0.0000022  0.0000025    0.000588    0.000465
+1993   1  13  49000   0.214930   0.326896   0.0305272   0.0029735  -0.000248   0.000074   0.000182   0.000217  0.0000028  0.0000028    0.000505    0.000453
+1993   1  14  49001   0.214998   0.324624   0.0275987   0.0028715  -0.000210   0.000012   0.000188   0.000231  0.0000034  0.0000034    0.000422    0.000440
+1993   1  15  49002   0.215218   0.321918   0.0248066   0.0026979  -0.000140  -0.000041   0.000163   0.000224  0.0000040  0.0000036    0.000339    0.000427
+1993   1  16  49003   0.214025   0.319193   0.0222077   0.0024880  -0.000057  -0.000062   0.000174   0.000262  0.0000037  0.0000035    0.000318    0.000389
+1993   1  17  49004   0.213138   0.316098   0.0198211   0.0022828   0.000005  -0.000057   0.000184   0.000273  0.0000030  0.0000030    0.000317    0.000343
+1993   1  18  49005   0.212499   0.313186   0.0176233   0.0021232   0.000022  -0.000033   0.000170   0.000215  0.0000024  0.0000024    0.000316    0.000297
+1993   1  19  49006   0.212304   0.310832   0.0155509   0.0020408  -0.000011  -0.000004   0.000187   0.000215  0.0000017  0.0000017    0.000301    0.000247
+1993   1  20  49007   0.212046   0.307346   0.0135164   0.0020465  -0.000108   0.000001   0.000150   0.000169  0.0000011  0.0000018    0.000211    0.000174
+1993   1  21  49008   0.210961   0.304954   0.0114356   0.0021184  -0.000114   0.000050   0.000135   0.000134  0.0000018  0.0000023    0.000212    0.000222
+1993   1  22  49009   0.211313   0.301663   0.0092637   0.0022168  -0.000038   0.000116   0.000197   0.000203  0.0000035  0.0000027    0.000280    0.000357
+1993   1  23  49010   0.211354   0.299462   0.0069952   0.0023174   0.000013   0.000113   0.000244   0.000251  0.0000035  0.0000032    0.000306    0.000371
+1993   1  24  49011   0.211707   0.296802   0.0046309   0.0024202   0.000021   0.000080   0.000273   0.000285  0.0000030  0.0000030    0.000319    0.000344
+1993   1  25  49012   0.211850   0.295199   0.0021635   0.0025298  -0.000024   0.000063   0.000194   0.000217  0.0000024  0.0000026    0.000331    0.000317
+1993   1  26  49013   0.211682   0.293044  -0.0004154   0.0026381  -0.000114   0.000093   0.000116   0.000124  0.0000023  0.0000033    0.000341    0.000306
+1993   1  27  49014   0.211316   0.291258  -0.0030971   0.0027210  -0.000216   0.000184   0.000121   0.000103  0.0000041  0.0000037    0.000333    0.000379
+1993   1  28  49015   0.210918   0.289167  -0.0058418   0.0027506  -0.000300   0.000284   0.000190   0.000133  0.0000051  0.0000049    0.000342    0.000434
+1993   1  29  49016   0.210306   0.287063  -0.0085851   0.0027139  -0.000322   0.000328   0.000215   0.000155  0.0000056  0.0000051    0.000364    0.000476
+1993   1  30  49017   0.209732   0.284184  -0.0112609   0.0026222  -0.000226   0.000198   0.000152   0.000153  0.0000050  0.0000048    0.000380    0.000457
+1993   1  31  49018   0.208523   0.281781  -0.0138273   0.0025069  -0.000084  -0.000012   0.000255   0.000336  0.0000039  0.0000039    0.000394    0.000418
+1993   2   1  49019   0.206339   0.279079  -0.0162799   0.0024053   0.000025  -0.000197   0.000333   0.000416  0.0000028  0.0000030    0.000407    0.000380
+1993   2   2  49020   0.205887   0.276559  -0.0186517   0.0023511   0.000044  -0.000264   0.000470   0.000571  0.0000020  0.0000027    0.000398    0.000325
+1993   2   3  49021   0.205062   0.273194  -0.0210048   0.0023683  -0.000076  -0.000073   0.000518   0.000589  0.0000026  0.0000026    0.000271    0.000183
+1993   2   4  49022   0.204405   0.270293  -0.0234181   0.0024695  -0.000217  -0.000122   0.000351   0.000368  0.0000031  0.0000031    0.000287    0.000360
+1993   2   5  49023   0.205228   0.267459  -0.0259743   0.0026527  -0.000072  -0.000253   0.000284   0.000340  0.0000036  0.0000032    0.000302    0.000409
+1993   2   6  49024   0.205431   0.265580  -0.0287434   0.0028945   0.000029  -0.000291   0.000359   0.000407  0.0000034  0.0000032    0.000311    0.000385
+1993   2   7  49025   0.205792   0.263437  -0.0317620   0.0031451   0.000059  -0.000245   0.000460   0.000638  0.0000028  0.0000028    0.000319    0.000349
+1993   2   8  49026   0.205479   0.261116  -0.0350072   0.0033337   0.000025  -0.000140   0.000328   0.000495  0.0000023  0.0000024    0.000327    0.000313
+1993   2   9  49027   0.204169   0.258910  -0.0383849   0.0033925  -0.000073  -0.000012   0.000238   0.000245  0.0000019  0.0000023    0.000329    0.000276
+1993   2  10  49028   0.203617   0.255757  -0.0417445   0.0032930  -0.000235   0.000090   0.000218   0.000201  0.0000024  0.0000020    0.000295    0.000236
+1993   2  11  49029   0.202377   0.253564  -0.0449360   0.0030849  -0.000228   0.000089   0.000182   0.000171  0.0000020  0.0000030    0.000505    0.000516
+1993   2  12  49030   0.201538   0.250846  -0.0479008   0.0028047  -0.000142   0.000035   0.000195   0.000210  0.0000037  0.0000019    0.000375    0.000495
+1993   2  13  49031   0.199962   0.248336  -0.0505525   0.0025119  -0.000142  -0.000066   0.000147   0.000158  0.0000018  0.0000023    0.000216    0.000240
+1993   2  14  49032   0.198893   0.246019  -0.0529447   0.0023133  -0.000121  -0.000124   0.000231   0.000224  0.0000010  0.0000016    0.000199    0.000164
+1993   2  15  49033   0.197872   0.243140  -0.0552040   0.0022257  -0.000065  -0.000125   0.000284   0.000260  0.0000013  0.0000013    0.000245    0.000204
+1993   2  16  49034   0.197384   0.240465  -0.0574207   0.0022145   0.000003  -0.000091   0.000231   0.000212  0.0000017  0.0000019    0.000282    0.000244
+1993   2  17  49035   0.196786   0.237733  -0.0596547   0.0022594   0.000072  -0.000052   0.000286   0.000250  0.0000024  0.0000024    0.000282    0.000287
+1993   2  18  49036   0.196444   0.235396  -0.0619567   0.0023541   0.000109  -0.000017   0.000289   0.000220  0.0000032  0.0000032    0.000281    0.000329
+1993   2  19  49037   0.195591   0.233210  -0.0643736   0.0024893   0.000092   0.000004   0.000247   0.000214  0.0000039  0.0000034    0.000281    0.000372
+1993   2  20  49038   0.194864   0.231453  -0.0669382   0.0026405   0.000004   0.000008   0.000247   0.000289  0.0000037  0.0000035    0.000296    0.000377
+1993   2  21  49039   0.193159   0.230067  -0.0696494   0.0027701  -0.000121   0.000011   0.000303   0.000368  0.0000031  0.0000031    0.000318    0.000370
+1993   2  22  49040   0.191296   0.229448  -0.0724670   0.0028448  -0.000238   0.000033   0.000272   0.000308  0.0000026  0.0000027    0.000339    0.000363
+1993   2  23  49041   0.188842   0.227597  -0.0753242   0.0028506  -0.000299   0.000083   0.000225   0.000217  0.0000022  0.0000027    0.000354    0.000358
+1993   2  24  49042   0.186203   0.225860  -0.0781524   0.0027961  -0.000271   0.000165   0.000300   0.000248  0.0000028  0.0000028    0.000337    0.000366
+1993   2  25  49043   0.183434   0.223223  -0.0809018   0.0027014  -0.000169   0.000252   0.000353   0.000284  0.0000033  0.0000033    0.000319    0.000374
+1993   2  26  49044   0.182311   0.220991  -0.0835443   0.0025850  -0.000025   0.000320   0.000298   0.000246  0.0000039  0.0000034    0.000302    0.000383
+1993   2  27  49045   0.179878   0.219130  -0.0860667   0.0024584   0.000113   0.000343   0.000263   0.000299  0.0000035  0.0000034    0.000297    0.000374
+1993   2  28  49046   0.178438   0.217041  -0.0884635   0.0023336   0.000202   0.000330   0.000231   0.000337  0.0000029  0.0000029    0.000296    0.000360
+1993   3   1  49047   0.176021   0.214959  -0.0907446   0.0022334   0.000213   0.000297   0.000168   0.000227  0.0000023  0.0000024    0.000294    0.000346
+1993   3   2  49048   0.174034   0.212733  -0.0929490   0.0021899   0.000142   0.000259   0.000145   0.000145  0.0000018  0.0000023    0.000287    0.000324
+1993   3   3  49049   0.172186   0.211196  -0.0951499   0.0022312   0.000001   0.000231   0.000140   0.000103  0.0000023  0.0000023    0.000245    0.000261
+1993   3   4  49050   0.170972   0.209625  -0.0974400   0.0023649  -0.000144   0.000184   0.000139   0.000093  0.0000028  0.0000025    0.000204    0.000198
+1993   3   5  49051   0.169553   0.208054  -0.0999043   0.0025727  -0.000206   0.000107   0.000147   0.000104  0.0000026  0.0000026    0.000268    0.000209
+1993   3   6  49052   0.168401   0.206780  -0.1025964   0.0028178  -0.000248  -0.000017   0.000183   0.000148  0.0000024  0.0000024    0.000288    0.000238
+1993   3   7  49053   0.167070   0.205137  -0.1055288   0.0030520  -0.000252  -0.000140   0.000245   0.000233  0.0000022  0.0000022    0.000294    0.000272
+1993   3   8  49054   0.165485   0.203135  -0.1086662   0.0032217  -0.000217  -0.000213   0.000244   0.000252  0.0000020  0.0000020    0.000299    0.000307
+1993   3   9  49055   0.164032   0.201982  -0.1119240   0.0032812  -0.000153  -0.000201   0.000220   0.000222  0.0000019  0.0000023    0.000284    0.000309
+1993   3  10  49056   0.163182   0.199760  -0.1151825   0.0032138  -0.000059  -0.000086   0.000218   0.000204  0.0000026  0.0000026    0.000167    0.000146
+1993   3  11  49057   0.162385   0.198953  -0.1183230   0.0030465  -0.000041   0.000037   0.000211   0.000186  0.0000033  0.0000033    0.000253    0.000224
+1993   3  12  49058   0.162582   0.197045  -0.1212712   0.0028407  -0.000055   0.000114   0.000204   0.000193  0.0000039  0.0000035    0.000358    0.000325
+1993   3  13  49059   0.161287   0.195906  -0.1240202   0.0026601  -0.000064   0.000078   0.000209   0.000224  0.0000037  0.0000035    0.000366    0.000344
+1993   3  14  49060   0.159916   0.194354  -0.1266172   0.0025420  -0.000052  -0.000018   0.000227   0.000244  0.0000031  0.0000031    0.000341    0.000335
+1993   3  15  49061   0.157952   0.193064  -0.1291302   0.0024911  -0.000012  -0.000103   0.000221   0.000231  0.0000026  0.0000027    0.000317    0.000325
+1993   3  16  49062   0.155472   0.191552  -0.1316207   0.0024957   0.000052  -0.000117   0.000213   0.000208  0.0000022  0.0000026    0.000289    0.000297
+1993   3  17  49063   0.153079   0.189831  -0.1341373   0.0025440   0.000109   0.000016   0.000213   0.000173  0.0000027  0.0000027    0.000245    0.000172
+1993   3  18  49064   0.150301   0.188702  -0.1367194   0.0026253   0.000210   0.000091   0.000224   0.000174  0.0000031  0.0000031    0.000399    0.000446
+1993   3  19  49065   0.148192   0.187097  -0.1393933   0.0027220   0.000209   0.000008   0.000208   0.000178  0.0000036  0.0000032    0.000365    0.000346
+1993   3  20  49066   0.145965   0.185963  -0.1421623   0.0028092   0.000132  -0.000015   0.000218   0.000191  0.0000033  0.0000032    0.000333    0.000311
+1993   3  21  49067   0.144173   0.184097  -0.1450040   0.0028667   0.000030   0.000016   0.000249   0.000277  0.0000029  0.0000029    0.000315    0.000324
+1993   3  22  49068   0.142404   0.182837  -0.1478832   0.0028883  -0.000055   0.000074   0.000244   0.000294  0.0000025  0.0000025    0.000298    0.000337
+1993   3  23  49069   0.140479   0.181500  -0.1507657   0.0028755  -0.000088   0.000141   0.000232   0.000265  0.0000020  0.0000020    0.000283    0.000345
+1993   3  24  49070   0.138089   0.179893  -0.1536197   0.0028274   0.000001   0.000222   0.000216   0.000251  0.0000015  0.0000015    0.000288    0.000333
+1993   3  25  49071   0.135891   0.178951  -0.1564082   0.0027394  -0.000054   0.000082   0.000172   0.000183  0.0000009  0.0000024    0.000213    0.000212
+1993   3  26  49072   0.132905   0.177831  -0.1590904   0.0026153  -0.000380   0.000075   0.000152   0.000178  0.0000034  0.0000023    0.000345    0.000356
+1993   3  27  49073   0.129896   0.176881  -0.1616375   0.0024781  -0.000445   0.000077   0.000212   0.000248  0.0000037  0.0000032    0.000367    0.000394
+1993   3  28  49074   0.126623   0.175356  -0.1640535   0.0023623  -0.000304   0.000077   0.000347   0.000365  0.0000030  0.0000030    0.000337    0.000378
+1993   3  29  49075   0.123562   0.174326  -0.1663774   0.0022972  -0.000079   0.000073   0.000337   0.000341  0.0000024  0.0000025    0.000307    0.000363
+1993   3  30  49076   0.120243   0.172666  -0.1686697   0.0022995   0.000111   0.000049   0.000227   0.000231  0.0000019  0.0000022    0.000280    0.000343
+1993   3  31  49077   0.117866   0.171128  -0.1710015   0.0023774   0.000123   0.000000   0.000210   0.000199  0.0000019  0.0000019    0.000260    0.000304
+1993   4   1  49078   0.115376   0.170151  -0.1734479   0.0025314   0.000035  -0.000046   0.000209   0.000184  0.0000019  0.0000019    0.000241    0.000266
+1993   4   2  49079   0.112655   0.169418  -0.1760794   0.0027474  -0.000095  -0.000063   0.000236   0.000217  0.0000020  0.0000020    0.000221    0.000227
+1993   4   3  49080   0.109894   0.169359  -0.1789426   0.0029886  -0.000155  -0.000026   0.000392   0.000321  0.0000020  0.0000020    0.000242    0.000269
+1993   4   4  49081   0.107044   0.168650  -0.1820370   0.0031993  -0.000140   0.000048   0.000395   0.000311  0.0000020  0.0000020    0.000278    0.000339
+1993   4   5  49082   0.103410   0.168079  -0.1853037   0.0033238  -0.000079   0.000129   0.000225   0.000208  0.0000021  0.0000022    0.000313    0.000408
+1993   4   6  49083   0.100143   0.167361  -0.1886390   0.0033317  -0.000022   0.000179   0.000206   0.000195  0.0000023  0.0000028    0.000350    0.000458
+1993   4   7  49084   0.096639   0.167106  -0.1919283   0.0032315  -0.000024   0.000170   0.000212   0.000177  0.0000034  0.0000034    0.000395    0.000409
+1993   4   8  49085   0.093585   0.166594  -0.1950827   0.0030633  -0.000073   0.000093   0.000188   0.000154  0.0000046  0.0000039    0.000440    0.000359
+1993   4   9  49086   0.090085   0.166321  -0.1980592   0.0028791  -0.000152  -0.000046   0.000211   0.000185  0.0000044  0.0000042    0.000438    0.000369
+1993   4  10  49087   0.087544   0.165463  -0.2008628   0.0027241  -0.000211  -0.000171   0.000279   0.000307  0.0000038  0.0000038    0.000419    0.000398
+1993   4  11  49088   0.083966   0.165030  -0.2035355   0.0026281  -0.000204  -0.000212   0.000325   0.000399  0.0000032  0.0000032    0.000401    0.000427
+1993   4  12  49089   0.081481   0.164830  -0.2061431   0.0026034  -0.000114  -0.000138   0.000240   0.000277  0.0000026  0.0000027    0.000382    0.000457
+1993   4  13  49090   0.079335   0.164382  -0.2087585   0.0026460   0.000054   0.000037   0.000132   0.000131  0.0000022  0.0000029    0.000360    0.000468
+1993   4  14  49091   0.077219   0.164598  -0.2114442   0.0027368   0.000303   0.000313   0.000114   0.000109  0.0000033  0.0000033    0.000320    0.000387
+1993   4  15  49092   0.076091   0.164368  -0.2142362   0.0028453   0.000413   0.000346   0.000106   0.000103  0.0000043  0.0000043    0.000181    0.000193
+1993   4  16  49093   0.074060   0.164595  -0.2171347   0.0029371   0.000253   0.000106   0.000111   0.000110  0.0000053  0.0000045    0.000404    0.000311
+1993   4  17  49094   0.071969   0.164158  -0.2201057   0.0029832   0.000220  -0.000139   0.000126   0.000128  0.0000048  0.0000045    0.000438    0.000362
+1993   4  18  49095   0.069996   0.163657  -0.2230915   0.0029716   0.000240  -0.000314   0.000176   0.000206  0.0000038  0.0000038    0.000395    0.000381
+1993   4  19  49096   0.067510   0.163617  -0.2260362   0.0029170   0.000241  -0.000366   0.000181   0.000213  0.0000028  0.0000029    0.000352    0.000399
+1993   4  20  49097   0.064716   0.163558  -0.2289120   0.0028527   0.000167  -0.000282   0.000144   0.000141  0.0000020  0.0000027    0.000335    0.000412
+1993   4  21  49098   0.061935   0.164385  -0.2317297   0.0028067  -0.000141  -0.000095   0.000138   0.000120  0.0000026  0.0000026    0.000448    0.000393
+1993   4  22  49099   0.059247   0.164375  -0.2345166   0.0027760   0.000027   0.000049   0.000131   0.000116  0.0000032  0.0000032    0.000188    0.000165
+1993   4  23  49100   0.056552   0.164278  -0.2372781   0.0027311   0.000162  -0.000001   0.000137   0.000131  0.0000038  0.0000034    0.000371    0.000235
+1993   4  24  49101   0.053879   0.164250  -0.2399823   0.0026481   0.000252  -0.000165   0.000164   0.000192  0.0000035  0.0000033    0.000411    0.000296
+1993   4  25  49102   0.051343   0.163934  -0.2425863   0.0025446   0.000272  -0.000344   0.000235   0.000296  0.0000028  0.0000028    0.000370    0.000333
+1993   4  26  49103   0.048200   0.163876  -0.2450911   0.0024827   0.000210  -0.000443   0.000246   0.000288  0.0000022  0.0000029    0.000329    0.000369
+1993   4  27  49104   0.045841   0.164074  -0.2475753   0.0025321   0.000092  -0.000385   0.000223   0.000257  0.0000029  0.0000064    0.000331    0.000400
+1993   4  28  49105   0.044260   0.164339  -0.2501773   0.0027158  -0.000071  -0.000081   0.000226   0.000254  0.0000107  0.0000029    0.000554    0.000401
+1993   4  29  49106   0.041686   0.164343  -0.2530216   0.0029644  -0.000033   0.000042   0.000179   0.000179  0.0000028  0.0000070    0.000289    0.000212
+1993   4  30  49107   0.039693   0.164852  -0.2561090   0.0031946   0.000145   0.000046   0.000187   0.000187  0.0000034  0.0000032    0.000441    0.000284
+1993   5   1  49108   0.038042   0.165264  -0.2593992   0.0033705   0.000221   0.000114   0.000279   0.000285  0.0000036  0.0000032    0.000408    0.000264
+1993   5   2  49109   0.036513   0.165551  -0.2628238   0.0034614   0.000221   0.000181   0.000292   0.000320  0.0000030  0.0000030    0.000282    0.000193
+1993   5   3  49110   0.034624   0.165768  -0.2662857   0.0034432   0.000201   0.000176   0.000285   0.000266  0.0000024  0.0000024    0.000181    0.000136
+1993   5   4  49111   0.033355   0.166175  -0.2696729   0.0033078   0.000205   0.000069   0.000256   0.000196  0.0000019  0.0000019    0.000145    0.000112
+1993   5   5  49112   0.031084   0.166674  -0.2728745   0.0030712   0.000182   0.000009   0.000174   0.000161  0.0000013  0.0000017    0.000271    0.000272
+1993   5   6  49113   0.029504   0.166735  -0.2758075   0.0027828   0.000071  -0.000025   0.000173   0.000160  0.0000016  0.0000015    0.000378    0.000346
+1993   5   7  49114   0.027509   0.166797  -0.2784526   0.0025241  -0.000066  -0.000018   0.000238   0.000200  0.0000017  0.0000017    0.000306    0.000345
+1993   5   8  49115   0.025234   0.166706  -0.2808813   0.0023729  -0.000071   0.000031   0.000354   0.000296  0.0000018  0.0000018    0.000186    0.000233
+1993   5   9  49116   0.023414   0.166274  -0.2832261   0.0023493   0.000016   0.000087   0.000363   0.000305  0.0000018  0.0000018    0.000070    0.000071
+1993   5  10  49117   0.021104   0.165932  -0.2856007   0.0024014   0.000048   0.000091   0.000265   0.000232  0.0000019  0.0000019    0.000150    0.000147
+1993   5  11  49118   0.019313   0.166284  -0.2880398   0.0024532   0.000071   0.000074   0.000206   0.000190  0.0000019  0.0000019    0.000278    0.000281
+1993   5  12  49119   0.017522   0.166801  -0.2905101   0.0024684   0.000114   0.000070   0.000179   0.000156  0.0000019  0.0000015    0.000407    0.000416
+1993   5  13  49120   0.016500   0.167171  -0.2929748   0.0024700   0.000201   0.000124   0.000137   0.000115  0.0000012  0.0000014    0.000246    0.000265
+1993   5  14  49121   0.015193   0.167691  -0.2954450   0.0024978   0.000340   0.000208   0.000149   0.000130  0.0000009  0.0000012    0.000255    0.000297
+1993   5  15  49122   0.013742   0.168308  -0.2979622   0.0025563   0.000422   0.000264   0.000230   0.000192  0.0000011  0.0000011    0.000304    0.000347
+1993   5  16  49123   0.012918   0.169034  -0.3005466   0.0026090   0.000395   0.000264   0.000237   0.000215  0.0000013  0.0000013    0.000284    0.000309
+1993   5  17  49124   0.010941   0.169873  -0.3031679   0.0026116   0.000286   0.000201   0.000210   0.000224  0.0000015  0.0000015    0.000265    0.000270
+1993   5  18  49125   0.009795   0.170414  -0.3057586   0.0025481   0.000143   0.000082   0.000179   0.000196  0.0000017  0.0000013    0.000245    0.000231
+1993   5  19  49126   0.008634   0.171661  -0.3082558   0.0024391  -0.000060  -0.000046   0.000144   0.000146  0.0000011  0.0000015    0.000208    0.000177
+1993   5  20  49127   0.007573   0.172685  -0.3106329   0.0023215  -0.000044  -0.000202   0.000163   0.000142  0.0000013  0.0000015    0.000196    0.000192
+1993   5  21  49128   0.006070   0.173854  -0.3129007   0.0022250   0.000092  -0.000316   0.000207   0.000174  0.0000019  0.0000019    0.000195    0.000230
+1993   5  22  49129   0.004520   0.174775  -0.3150921   0.0021644   0.000221  -0.000341   0.000209   0.000159  0.0000024  0.0000021    0.000194    0.000268
+1993   5  23  49130   0.002910   0.175556  -0.3172470   0.0021427   0.000170  -0.000228   0.000219   0.000177  0.0000023  0.0000022    0.000185    0.000234
+1993   5  24  49131   0.000924   0.176307  -0.3194010   0.0021617   0.000041  -0.000074   0.000225   0.000214  0.0000021  0.0000021    0.000175    0.000186
+1993   5  25  49132  -0.001528   0.176918  -0.3215938   0.0022352  -0.000070   0.000040   0.000202   0.000168  0.0000018  0.0000018    0.000165    0.000139
+1993   5  26  49133  -0.004804   0.177631  -0.3238878   0.0023875   0.000001  -0.000036   0.000189   0.000150  0.0000016  0.0000020    0.000302    0.000248
+1993   5  27  49134  -0.007300   0.177952  -0.3263724   0.0026243   0.000165  -0.000107   0.000194   0.000173  0.0000021  0.0000019    0.000422    0.000484
+1993   5  28  49135  -0.008891   0.177871  -0.3291253   0.0028817   0.000337  -0.000171   0.000242   0.000212  0.0000022  0.0000021    0.000440    0.000541
+1993   5  29  49136  -0.010711   0.178802  -0.3321127   0.0030287   0.000469  -0.000225   0.000293   0.000254  0.0000021  0.0000021    0.000414    0.000492
+1993   5  30  49137  -0.011901   0.179075  -0.3351526   0.0029631   0.000528  -0.000259   0.000317   0.000269  0.0000019  0.0000019    0.000389    0.000443
+1993   5  31  49138  -0.013149   0.179912  -0.3380077   0.0027057   0.000499  -0.000275   0.000283   0.000241  0.0000018  0.0000018    0.000363    0.000394
+1993   6   1  49139  -0.015511   0.180405  -0.3405388   0.0023953   0.000398  -0.000280   0.000235   0.000191  0.0000016  0.0000016    0.000337    0.000345
+1993   6   2  49140  -0.017162   0.180641  -0.3427858   0.0021758   0.000263  -0.000268   0.000188   0.000146  0.0000015  0.0000015    0.000312    0.000296
+1993   6   3  49141  -0.019394   0.180833  -0.3448944   0.0020817   0.000129  -0.000315   0.000159   0.000141  0.0000014  0.0000015    0.000578    0.000471
+1993   6   4  49142  -0.020865   0.181094  -0.3469681   0.0020390   0.000075  -0.000183   0.000171   0.000160  0.0000014  0.0000014    0.000296    0.000253
+1993   6   5  49143  -0.023101   0.182254  -0.3489993   0.0019739   0.000058  -0.000088   0.000211   0.000208  0.0000014  0.0000014    0.000258    0.000207
+1993   6   6  49144  -0.024806   0.183250  -0.3509413   0.0018985   0.000090  -0.000039   0.000244   0.000282  0.0000014  0.0000014    0.000276    0.000202
+1993   6   7  49145  -0.026877   0.183831  -0.3528131   0.0018790   0.000156  -0.000052   0.000218   0.000273  0.0000014  0.0000014    0.000295    0.000196
+1993   6   8  49146  -0.028192   0.184801  -0.3547055   0.0019445   0.000221  -0.000131   0.000192   0.000215  0.0000014  0.0000014    0.000313    0.000190
+1993   6   9  49147  -0.030304   0.185926  -0.3566999   0.0020555   0.000349  -0.000200   0.000154   0.000156  0.0000014  0.0000014    0.000286    0.000236
+1993   6  10  49148  -0.031864   0.186736  -0.3588097   0.0021545   0.000248  -0.000397   0.000169   0.000157  0.0000014  0.0000014    0.000306    0.000385
+1993   6  11  49149  -0.033881   0.187771  -0.3609996   0.0022169   0.000149  -0.000428   0.000223   0.000191  0.0000014  0.0000014    0.000298    0.000409
+1993   6  12  49150  -0.034644   0.188406  -0.3632325   0.0022452   0.000117  -0.000297   0.000256   0.000218  0.0000014  0.0000014    0.000264    0.000352
+1993   6  13  49151  -0.035594   0.189672  -0.3654781   0.0022362   0.000130  -0.000140   0.000262   0.000216  0.0000014  0.0000014    0.000231    0.000296
+1993   6  14  49152  -0.036692   0.190973  -0.3676936   0.0021757   0.000179  -0.000055   0.000212   0.000164  0.0000015  0.0000015    0.000198    0.000239
+1993   6  15  49153  -0.038089   0.192762  -0.3698211   0.0020620   0.000235  -0.000098   0.000144   0.000124  0.0000015  0.0000016    0.000165    0.000182
+1993   6  16  49154  -0.038925   0.194417  -0.3718137   0.0019206   0.000249  -0.000449   0.000120   0.000124  0.0000016  0.0000016    0.000271    0.000303
+1993   6  17  49155  -0.041111   0.195403  -0.3736635   0.0017905   0.000226  -0.000604   0.000162   0.000152  0.0000017  0.0000016    0.000406    0.000343
+1993   6  18  49156  -0.042477   0.196822  -0.3754022   0.0017026   0.000172  -0.000572   0.000182   0.000170  0.0000016  0.0000016    0.000540    0.000342
+1993   6  19  49157  -0.045320   0.197455  -0.3770836   0.0016720   0.000105  -0.000437   0.000181   0.000200  0.0000016  0.0000016    0.000674    0.000341
+1993   6  20  49158  -0.047218   0.198389  -0.3787683   0.0017044   0.000054  -0.000276   0.000211   0.000209  0.0000015  0.0000015    0.000808    0.000341
+1993   6  21  49159  -0.049645   0.199499  -0.3805178   0.0017993   0.000043  -0.000201   0.000190   0.000184  0.0000015  0.0000015    0.000762    0.000306
+1993   6  22  49160  -0.051509   0.200274  -0.3823879   0.0019438   0.000090  -0.000307   0.000160   0.000165  0.0000015  0.0000015    0.000136    0.000164
+1993   6  23  49161  -0.053111   0.201044  -0.3844134   0.0021058   0.000116  -0.000318   0.000146   0.000131  0.0000014  0.0000016    0.000243    0.000271
+1993   6  24  49162  -0.054683   0.202205  -0.3865903   0.0022409   0.000255  -0.000177   0.000112   0.000097  0.0000017  0.0000017    0.000333    0.000325
+1993   6  25  49163  -0.055630   0.203058  -0.3888705   0.0023121   0.000386   0.000015   0.000112   0.000108  0.0000020  0.0000015    0.000412    0.000358
+1993   6  26  49164  -0.056378   0.204409  -0.3911821   0.0023059   0.000304   0.000009   0.000122   0.000124  0.0000013  0.0000016    0.000224    0.000242
+1993   6  27  49165  -0.057531   0.205497  -0.3934511   0.0022213   0.000188  -0.000019   0.000143   0.000154  0.0000013  0.0000013    0.000210    0.000207
+1993   6  28  49166  -0.058718   0.206412  -0.3956016   0.0020650   0.000055  -0.000093   0.000163   0.000161  0.0000013  0.0000013    0.000207    0.000178
+1993   6  29  49167  -0.059983   0.207701  -0.3975700   0.0018633  -0.000042  -0.000189   0.000133   0.000117  0.0000013  0.0000013    0.000205    0.000149
+1993   6  30  49168  -0.061466   0.208464  -0.3993301   0.0016618  -0.000011  -0.000219   0.000122   0.000111  0.0000014  0.0000014    0.000164    0.000172
+1993   7   1  49169  -0.062375   0.210028   0.5990926   0.0015071   0.000014  -0.000305   0.000142   0.000135  0.0000014  0.0000014    0.000159    0.000182
+1993   7   2  49170  -0.063928   0.211301   0.5976332   0.0014241   0.000035  -0.000413   0.000150   0.000149  0.0000014  0.0000014    0.000169    0.000184
+1993   7   3  49171  -0.065071   0.212387   0.5962191   0.0014081   0.000061  -0.000496   0.000158   0.000158  0.0000014  0.0000014    0.000179    0.000185
+1993   7   4  49172  -0.066491   0.214021   0.5947960   0.0014362   0.000099  -0.000522   0.000384   0.000580  0.0000015  0.0000015    0.000189    0.000187
+1993   7   5  49173  -0.067069   0.214847   0.5933346   0.0014861   0.000154  -0.000479   0.000589   0.000958  0.0000015  0.0000015    0.000199    0.000188
+1993   7   6  49174  -0.067600   0.216433   0.5918221   0.0015428   0.000227  -0.000385   0.000593   0.000957  0.0000015  0.0000015    0.000210    0.000190
+1993   7   7  49175  -0.067918   0.217231   0.5902551   0.0015945   0.000302  -0.000276   0.000394   0.000586  0.0000015  0.0000016    0.000220    0.000192
+1993   7   8  49176  -0.068365   0.217436   0.5886436   0.0016266   0.000430  -0.000153   0.000365   0.000505  0.0000017  0.0000017    0.000444    0.000528
+1993   7   9  49177  -0.067695   0.218352   0.5870140   0.0016273   0.000389  -0.000158   0.000530   0.000757  0.0000018  0.0000018    0.000445    0.000534
+1993   7  10  49178  -0.068007   0.219769   0.5854015   0.0015967   0.000347  -0.000209   0.000548   0.000833  0.0000020  0.0000020    0.000369    0.000433
+1993   7  11  49179  -0.068569   0.220720   0.5838323   0.0015480   0.000340  -0.000259   0.000370   0.000580  0.0000021  0.0000021    0.000317    0.000369
+1993   7  12  49180  -0.068428   0.221046   0.5823147   0.0014936   0.000323  -0.000297   0.000144   0.000163  0.0000023  0.0000023    0.000264    0.000305
+1993   7  13  49181  -0.069008   0.223127   0.5808501   0.0014330   0.000295  -0.000305   0.000134   0.000120  0.0000025  0.0000019    0.000211    0.000241
+1993   7  14  49182  -0.069701   0.223877   0.5794483   0.0013600   0.000230  -0.000260   0.000116   0.000095  0.0000015  0.0000024    0.000187    0.000215
+1993   7  15  49183  -0.070504   0.225968   0.5781239   0.0012890   0.000160  -0.000238   0.000119   0.000090  0.0000024  0.0000021    0.000221    0.000235
+1993   7  16  49184  -0.071104   0.226926   0.5768577   0.0012490   0.000172  -0.000239   0.000133   0.000098  0.0000027  0.0000024    0.000395    0.000346
+1993   7  17  49185  -0.071925   0.228865   0.5756067   0.0012579   0.000277  -0.000193   0.000112   0.000108  0.0000025  0.0000025    0.000271    0.000219
+1993   7  18  49186  -0.072220   0.230219   0.5743174   0.0013294   0.000400  -0.000125   0.000126   0.000124  0.0000023  0.0000023    0.000168    0.000120
+1993   7  19  49187  -0.072370   0.232337   0.5729235   0.0014748   0.000457  -0.000098   0.000166   0.000148  0.0000021  0.0000021    0.000282    0.000196
+1993   7  20  49188  -0.072861   0.233628   0.5713522   0.0016889   0.000328  -0.000266   0.000149   0.000129  0.0000019  0.0000019    0.000211    0.000162
+1993   7  21  49189  -0.073255   0.236008   0.5695471   0.0019365   0.000150  -0.000323   0.000115   0.000094  0.0000017  0.0000019    0.000278    0.000281
+1993   7  22  49190  -0.074082   0.237117   0.5675006   0.0021552   0.000045  -0.000120   0.000109   0.000089  0.0000018  0.0000018    0.000359    0.000311
+1993   7  23  49191  -0.074467   0.239443   0.5652725   0.0022760  -0.000029   0.000083   0.000142   0.000115  0.0000018  0.0000018    0.000369    0.000300
+1993   7  24  49192  -0.075004   0.240967   0.5629869   0.0022546  -0.000066   0.000212   0.000185   0.000142  0.0000018  0.0000018    0.000347    0.000290
+1993   7  25  49193  -0.075842   0.242725   0.5607922   0.0020987  -0.000055   0.000259   0.000605   0.000643  0.0000018  0.0000018    0.000325    0.000280
+1993   7  26  49194  -0.077374   0.244756   0.5588027   0.0018667  -0.000014   0.000211   0.000836   0.000998  0.0000018  0.0000018    0.000304    0.000270
+1993   7  27  49195  -0.077686   0.246021   0.5570563   0.0016397   0.000037   0.000093   0.000662   0.000828  0.0000018  0.0000018    0.000282    0.000260
+1993   7  28  49196  -0.079259   0.246681   0.5555092   0.0014853   0.000079  -0.000042   0.000415   0.000502  0.0000018  0.0000019    0.000260    0.000250
+1993   7  29  49197  -0.080133   0.249246   0.5540651   0.0014327   0.000127  -0.000185   0.000263   0.000289  0.0000021  0.0000016    0.000468    0.000439
+1993   7  30  49198  -0.081425   0.250816   0.5526210   0.0014557   0.000095  -0.000172   0.000245   0.000249  0.0000014  0.0000018    0.000339    0.000311
+1993   7  31  49199  -0.082334   0.252165   0.5511327   0.0015081   0.000072  -0.000166   0.000419   0.000497  0.0000015  0.0000018    0.000227    0.000225
+1993   8   1  49200  -0.083440   0.254148   0.5495894   0.0015779   0.000095  -0.000219   0.000437   0.000516  0.0000022  0.0000022    0.000252    0.000280
+1993   8   2  49201  -0.084447   0.255627   0.5479701   0.0016732   0.000145  -0.000266   0.000136   0.000140  0.0000030  0.0000030    0.000277    0.000334
+1993   8   3  49202  -0.085320   0.257353   0.5462452   0.0017920   0.000208  -0.000281   0.000107   0.000108  0.0000037  0.0000026    0.000302    0.000388
+1993   8   4  49203  -0.086183   0.259623   0.5443950   0.0019119   0.000249  -0.000211   0.000104   0.000101  0.0000022  0.0000028    0.000262    0.000270
+1993   8   5  49204  -0.087521   0.261555   0.5424341   0.0019977   0.000300  -0.000093   0.000109   0.000105  0.0000018  0.0000021    0.000311    0.000262
+1993   8   6  49205  -0.089142   0.263653   0.5404131   0.0020218   0.000282   0.000008   0.000121   0.000116  0.0000019  0.0000019    0.000279    0.000265
+1993   8   7  49206  -0.091009   0.265560   0.5384031   0.0019765   0.000253   0.000068   0.000130   0.000140  0.0000020  0.0000020    0.000230    0.000243
+1993   8   8  49207  -0.092667   0.267680   0.5364703   0.0018772   0.000236   0.000077   0.000153   0.000182  0.0000021  0.0000021    0.000208    0.000216
+1993   8   9  49208  -0.094028   0.269363   0.5346552   0.0017503   0.000211   0.000042   0.000162   0.000185  0.0000022  0.0000022    0.000188    0.000189
+1993   8  10  49209  -0.094696   0.271523   0.5329710   0.0016184   0.000179   0.000003   0.000137   0.000126  0.0000023  0.0000023    0.000167    0.000162
+1993   8  11  49210  -0.095211   0.273895   0.5314137   0.0015011   0.000089  -0.000081   0.000116   0.000096  0.0000024  0.0000023    0.000264    0.000242
+1993   8  12  49211  -0.095849   0.276275   0.5299581   0.0014274   0.000092   0.000048   0.000111   0.000099  0.0000023  0.0000023    0.000239    0.000272
+1993   8  13  49212  -0.096290   0.278054   0.5285423   0.0014342   0.000121   0.000256   0.000101   0.000097  0.0000022  0.0000022    0.000213    0.000268
+1993   8  14  49213  -0.096962   0.280464   0.5270679   0.0015418   0.000145   0.000419   0.000120   0.000112  0.0000020  0.0000020    0.000210    0.000258
+1993   8  15  49214  -0.097510   0.282797   0.5254345   0.0017308   0.000158   0.000443   0.000146   0.000158  0.0000019  0.0000019    0.000208    0.000247
+1993   8  16  49215  -0.098569   0.284669   0.5235854   0.0019545   0.000148   0.000274   0.000148   0.000165  0.0000017  0.0000017    0.000205    0.000237
+1993   8  17  49216  -0.099513   0.286497   0.5215169   0.0021739   0.000112  -0.000049   0.000123   0.000119  0.0000016  0.0000020    0.000203    0.000227
+1993   8  18  49217  -0.099779   0.288218   0.5192485   0.0023740   0.000036  -0.000558   0.000098   0.000096  0.0000022  0.0000018    0.000308    0.000305
+1993   8  19  49218  -0.100638   0.289762   0.5168001   0.0025302   0.000026  -0.000811   0.000097   0.000088  0.0000019  0.0000018    0.000336    0.000376
+1993   8  20  49219  -0.100977   0.291347   0.5142307   0.0025896  -0.000039  -0.000616   0.000085   0.000077  0.0000013  0.0000015    0.000249    0.000268
+1993   8  21  49220  -0.101743   0.292608   0.5116606   0.0025115  -0.000069  -0.000254   0.000095   0.000090  0.0000011  0.0000013    0.000238    0.000225
+1993   8  22  49221  -0.102063   0.294734   0.5092316   0.0023133  -0.000025   0.000056   0.000126   0.000101  0.0000014  0.0000014    0.000309    0.000290
+1993   8  23  49222  -0.102096   0.296352   0.5070371   0.0020667   0.000050   0.000217   0.000123   0.000091  0.0000017  0.0000017    0.000381    0.000354
+1993   8  24  49223  -0.102065   0.298654   0.5050843   0.0018476   0.000143   0.000148   0.000117   0.000086  0.0000020  0.0000022    0.000452    0.000419
+1993   8  25  49224  -0.101858   0.300237   0.5033194   0.0016930   0.000143  -0.000202   0.000122   0.000080  0.0000027  0.0000026    0.000445    0.000368
+1993   8  26  49225  -0.101763   0.302823   0.5016750   0.0016027   0.000301  -0.000567   0.000114   0.000086  0.0000032  0.0000030    0.000574    0.000490
+1993   8  27  49226  -0.100942   0.304736   0.5000941   0.0015744   0.000442  -0.000818   0.000111   0.000088  0.0000033  0.0000032    0.000579    0.000517
+1993   8  28  49227  -0.100721   0.307739   0.4985114   0.0016150   0.000505  -0.000908   0.000120   0.000108  0.0000032  0.0000032    0.000498    0.000463
+1993   8  29  49228  -0.100587   0.309564   0.4968550   0.0017150   0.000495  -0.000844   0.000202   0.000233  0.0000031  0.0000031    0.000416    0.000409
+1993   8  30  49229  -0.100500   0.311976   0.4950793   0.0018372   0.000417  -0.000672   0.000258   0.000278  0.0000030  0.0000030    0.000334    0.000355
+1993   8  31  49230  -0.099556   0.313974   0.4931855   0.0019426   0.000304  -0.000455   0.000199   0.000192  0.0000029  0.0000028    0.000252    0.000301
+1993   9   1  49231  -0.099817   0.315792   0.4912047   0.0020167   0.000204  -0.000324   0.000149   0.000142  0.0000025  0.0000027    0.000283    0.000262
+1993   9   2  49232  -0.099721   0.317444   0.4891656   0.0020652   0.000078  -0.000156   0.000158   0.000152  0.0000025  0.0000026    0.000260    0.000186
+1993   9   3  49233  -0.099485   0.319429   0.4870877   0.0020870   0.000235   0.000068   0.000185   0.000200  0.0000027  0.0000027    0.000216    0.000175
+1993   9   4  49234  -0.099422   0.321110   0.4850031   0.0020655   0.000396   0.000200   0.000215   0.000217  0.0000030  0.0000030    0.000212    0.000189
+1993   9   5  49235  -0.099581   0.323249   0.4829649   0.0019948   0.000405   0.000191   0.000243   0.000279  0.0000032  0.0000032    0.000236    0.000192
+1993   9   6  49236  -0.099998   0.325561   0.4810171   0.0018993   0.000337   0.000087   0.000218   0.000282  0.0000034  0.0000034    0.000260    0.000195
+1993   9   7  49237  -0.100609   0.326483   0.4791639   0.0018167   0.000223  -0.000063   0.000166   0.000177  0.0000036  0.0000031    0.000284    0.000198
+1993   9   8  49238  -0.101188   0.328431   0.4773749   0.0017672   0.000149  -0.000205   0.000133   0.000128  0.0000029  0.0000031    0.000276    0.000239
+1993   9   9  49239  -0.101324   0.329613   0.4756147   0.0017518   0.000131  -0.000236   0.000138   0.000135  0.0000025  0.0000026    0.000272    0.000249
+1993   9  10  49240  -0.101671   0.331544   0.4738517   0.0017772   0.000178  -0.000163   0.000174   0.000172  0.0000024  0.0000024    0.000269    0.000248
+1993   9  11  49241  -0.101266   0.332842   0.4720377   0.0018682   0.000269  -0.000031   0.000213   0.000217  0.0000022  0.0000022    0.000266    0.000247
+1993   9  12  49242  -0.100832   0.334965   0.4700935   0.0020455   0.000363   0.000093   0.000200   0.000211  0.0000021  0.0000021    0.000263    0.000246
+1993   9  13  49243  -0.100095   0.336934   0.4679317   0.0022949   0.000412   0.000140   0.000148   0.000152  0.0000019  0.0000019    0.000260    0.000245
+1993   9  14  49244  -0.099252   0.339361   0.4655031   0.0025603   0.000381   0.000081   0.000119   0.000112  0.0000017  0.0000017    0.000257    0.000244
+1993   9  15  49245  -0.098475   0.341489   0.4628300   0.0027666   0.000259  -0.000063   0.000098   0.000093  0.0000016  0.0000018    0.000253    0.000243
+1993   9  16  49246  -0.097736   0.344254   0.4600066   0.0028518   0.000037  -0.000388   0.000095   0.000101  0.0000018  0.0000018    0.000261    0.000233
+1993   9  17  49247  -0.097559   0.346392   0.4571706   0.0027927  -0.000167  -0.000400   0.000110   0.000117  0.0000021  0.0000020    0.000426    0.000393
+1993   9  18  49248  -0.097278   0.348521   0.4544579   0.0026157  -0.000343  -0.000304   0.000121   0.000139  0.0000022  0.0000020    0.000488    0.000458
+1993   9  19  49249  -0.096954   0.349951   0.4519558   0.0023883  -0.000457  -0.000254   0.000179   0.000209  0.0000019  0.0000019    0.000420    0.000396
+1993   9  20  49250  -0.097020   0.351668   0.4496753   0.0021861  -0.000446  -0.000203   0.000201   0.000220  0.0000017  0.0000017    0.000352    0.000334
+1993   9  21  49251  -0.097295   0.352672   0.4475615   0.0020586  -0.000298  -0.000171   0.000166   0.000177  0.0000015  0.0000015    0.000283    0.000271
+1993   9  22  49252  -0.097471   0.353761   0.4455313   0.0020145  -0.000052  -0.000156   0.000138   0.000142  0.0000013  0.0000016    0.000215    0.000209
+1993   9  23  49253  -0.097605   0.355064   0.4435099   0.0020344   0.000272  -0.000132   0.000126   0.000131  0.0000017  0.0000018    0.000327    0.000294
+1993   9  24  49254  -0.097598   0.357328   0.4414475   0.0020933   0.000516  -0.000100   0.000135   0.000153  0.0000023  0.0000020    0.000499    0.000429
+1993   9  25  49255  -0.096943   0.359004   0.4393151   0.0021746   0.000471  -0.000065   0.000175   0.000200  0.0000023  0.0000023    0.000448    0.000376
+1993   9  26  49256  -0.096924   0.360939   0.4370953   0.0022676   0.000283  -0.000048   0.000187   0.000207  0.0000024  0.0000024    0.000395    0.000321
+1993   9  27  49257  -0.096531   0.362290   0.4347818   0.0023585   0.000055  -0.000064   0.000146   0.000154  0.0000025  0.0000025    0.000342    0.000267
+1993   9  28  49258  -0.095810   0.364856   0.4323852   0.0024258  -0.000110  -0.000110   0.000127   0.000127  0.0000026  0.0000026    0.000289    0.000213
+1993   9  29  49259  -0.095921   0.366550   0.4299414   0.0024439   0.000006  -0.000200   0.000114   0.000113  0.0000027  0.0000031    0.000289    0.000271
+1993   9  30  49260  -0.095957   0.368739   0.4275107   0.0023964   0.000058  -0.000302   0.000131   0.000118  0.0000037  0.0000023    0.000468    0.000538
+1993  10   1  49261  -0.096423   0.370131   0.4251610   0.0023084   0.000067  -0.000241   0.000114   0.000099  0.0000020  0.0000022    0.000288    0.000339
+1993  10   2  49262  -0.095734   0.372180   0.4229034   0.0022272   0.000092  -0.000187   0.000155   0.000152  0.0000008  0.0000015    0.000154    0.000170
+1993  10   3  49263  -0.095194   0.373616   0.4207122   0.0021685   0.000122  -0.000219   0.000280   0.000262  0.0000010  0.0000010    0.000204    0.000216
+1993  10   4  49264  -0.094369   0.375217   0.4185668   0.0021280   0.000130  -0.000278   0.000288   0.000255  0.0000012  0.0000012    0.000253    0.000262
+1993  10   5  49265  -0.094054   0.377595   0.4164505   0.0021092   0.000118  -0.000334   0.000216   0.000191  0.0000014  0.0000014    0.000303    0.000308
+1993  10   6  49266  -0.093020   0.379588   0.4143359   0.0021282   0.000099  -0.000358   0.000170   0.000161  0.0000016  0.0000017    0.000352    0.000354
+1993  10   7  49267  -0.093001   0.381693   0.4121760   0.0022031   0.000013  -0.000289   0.000158   0.000156  0.0000021  0.0000059    0.000408    0.000379
+1993  10   8  49268  -0.092498   0.383156   0.4099084   0.0023130   0.000067  -0.000184   0.000177   0.000162  0.0000101  0.0000075    0.000773    0.000651
+1993  10   9  49269  -0.091590   0.385083   0.4075288   0.0024274   0.000128  -0.000111   0.000191   0.000195  0.0000130  0.0000099    0.000888    0.000740
+1993  10  10  49270  -0.090266   0.386895   0.4050370   0.0025715   0.000115  -0.000076   0.000196   0.000223  0.0000097  0.0000097    0.000717    0.000610
+1993  10  11  49271  -0.088658   0.388715   0.4023786   0.0027785   0.000070  -0.000067   0.000201   0.000207  0.0000063  0.0000063    0.000547    0.000481
+1993  10  12  49272  -0.087406   0.390783   0.3994876   0.0030251   0.000015  -0.000090   0.000176   0.000168  0.0000029  0.0000040    0.000376    0.000351
+1993  10  13  49273  -0.086274   0.393117   0.3963531   0.0032303  -0.000030  -0.000016   0.000147   0.000130  0.0000016  0.0000021    0.000239    0.000233
+1993  10  14  49274  -0.084603   0.395506   0.3930649   0.0033086  -0.000022  -0.000158   0.000156   0.000133  0.0000014  0.0000015    0.000274    0.000316
+1993  10  15  49275  -0.083947   0.397514   0.3897764   0.0032272   0.000100  -0.000403   0.000193   0.000181  0.0000013  0.0000013    0.000242    0.000281
+1993  10  16  49276  -0.082669   0.399541   0.3866397   0.0030166   0.000199  -0.000503   0.000251   0.000294  0.0000013  0.0000013    0.000203    0.000220
+1993  10  17  49277  -0.082319   0.401407   0.3837513   0.0027516   0.000205  -0.000440   0.000265   0.000402  0.0000012  0.0000012    0.000203    0.000208
+1993  10  18  49278  -0.081398   0.401943   0.3811229   0.0025182   0.000150  -0.000321   0.000206   0.000321  0.0000012  0.0000012    0.000204    0.000195
+1993  10  19  49279  -0.081807   0.403359   0.3786882   0.0023779   0.000058  -0.000210   0.000140   0.000159  0.0000011  0.0000012    0.000204    0.000183
+1993  10  20  49280  -0.080541   0.404091   0.3763396   0.0023470  -0.000082  -0.000330   0.000136   0.000127  0.0000013  0.0000013    0.000216    0.000211
+1993  10  21  49281  -0.080100   0.405841   0.3739748   0.0023959  -0.000049  -0.000305   0.000188   0.000165  0.0000015  0.0000016    0.000308    0.000334
+1993  10  22  49282  -0.079265   0.407440   0.3715385   0.0024776  -0.000049  -0.000277   0.000277   0.000214  0.0000019  0.0000020    0.000351    0.000376
+1993  10  23  49283  -0.079361   0.409570   0.3690178   0.0025616  -0.000100  -0.000282   0.000352   0.000247  0.0000024  0.0000024    0.000356    0.000363
+1993  10  24  49284  -0.078589   0.410552   0.3664178   0.0026389  -0.000138  -0.000284   0.000477   0.000318  0.0000029  0.0000029    0.000360    0.000350
+1993  10  25  49285  -0.078022   0.411860   0.3637454   0.0027083  -0.000134  -0.000274   0.000445   0.000305  0.0000033  0.0000033    0.000365    0.000337
+1993  10  26  49286  -0.077418   0.413587   0.3610097   0.0027609  -0.000067  -0.000232   0.000261   0.000203  0.0000038  0.0000027    0.000370    0.000323
+1993  10  27  49287  -0.076285   0.415374   0.3582349   0.0027770   0.000117  -0.000247   0.000182   0.000162  0.0000021  0.0000028    0.000354    0.000321
+1993  10  28  49288  -0.075568   0.417328   0.3554679   0.0027413   0.000255  -0.000028   0.000146   0.000139  0.0000018  0.0000020    0.000556    0.000314
+1993  10  29  49289  -0.075670   0.418881   0.3527630   0.0026560   0.000295   0.000093   0.000149   0.000143  0.0000020  0.0000020    0.000592    0.000308
+1993  10  30  49290  -0.075128   0.420049   0.3501629   0.0025395   0.000239   0.000058   0.000170   0.000184  0.0000023  0.0000023    0.000508    0.000301
+1993  10  31  49291  -0.074839   0.420622   0.3476864   0.0024154   0.000119  -0.000063   0.000220   0.000268  0.0000025  0.0000025    0.000424    0.000295
+1993  11   1  49292  -0.074163   0.422157   0.3453290   0.0023047  -0.000019  -0.000213   0.000213   0.000266  0.0000028  0.0000028    0.000340    0.000288
+1993  11   2  49293  -0.072496   0.422535   0.3430676   0.0022250  -0.000137  -0.000323   0.000170   0.000170  0.0000031  0.0000023    0.000256    0.000282
+1993  11   3  49294  -0.071182   0.423275   0.3408633   0.0021908  -0.000101  -0.000282   0.000151   0.000112  0.0000018  0.0000023    0.000237    0.000256
+1993  11   4  49295  -0.068744   0.424269   0.3386655   0.0022110  -0.000149  -0.000185   0.000161   0.000116  0.0000014  0.0000016    0.000215    0.000214
+1993  11   5  49296  -0.066955   0.425601   0.3364201   0.0022854  -0.000243  -0.000126   0.000184   0.000136  0.0000014  0.0000014    0.000681    0.000627
+1993  11   6  49297  -0.064348   0.427397   0.3340777   0.0024087  -0.000172  -0.000048   0.000249   0.000202  0.0000014  0.0000014    0.000854    0.000779
+1993  11   7  49298  -0.062592   0.428979   0.3315940   0.0025759   0.000031   0.000043   0.000266   0.000280  0.0000014  0.0000014    0.000642    0.000581
+1993  11   8  49299  -0.060311   0.430700   0.3289289   0.0027748   0.000186   0.000084   0.000236   0.000266  0.0000014  0.0000014    0.000430    0.000383
+1993  11   9  49300  -0.058681   0.432531   0.3260604   0.0029704   0.000193   0.000057   0.000228   0.000199  0.0000014  0.0000014    0.000219    0.000186
+1993  11  10  49301  -0.056916   0.433653   0.3230160   0.0031022  -0.000154  -0.000081   0.000165   0.000135  0.0000014  0.0000014    0.000189    0.000202
+1993  11  11  49302  -0.055077   0.434776   0.3198905   0.0031116  -0.000488  -0.000200   0.000132   0.000143  0.0000014  0.0000014    0.000185    0.000211
+1993  11  12  49303  -0.054091   0.436004   0.3168246   0.0029814  -0.000752  -0.000278   0.000172   0.000219  0.0000015  0.0000015    0.000190    0.000219
+1993  11  13  49304  -0.052276   0.436638   0.3139462   0.0027538  -0.000886  -0.000304   0.000211   0.000240  0.0000015  0.0000015    0.000194    0.000226
+1993  11  14  49305  -0.051163   0.437531   0.3113157   0.0025095  -0.000852  -0.000280   0.000297   0.000333  0.0000016  0.0000016    0.000198    0.000234
+1993  11  15  49306  -0.049702   0.438963   0.3089077   0.0023250  -0.000669  -0.000230   0.000282   0.000329  0.0000016  0.0000016    0.000202    0.000241
+1993  11  16  49307  -0.048977   0.439522   0.3066375   0.0022366  -0.000394  -0.000183   0.000205   0.000203  0.0000017  0.0000017    0.000206    0.000249
+1993  11  17  49308  -0.047759   0.440181   0.3044091   0.0022343  -0.000099  -0.000164   0.000184   0.000175  0.0000017  0.0000017    0.000211    0.000257
+1993  11  18  49309  -0.046623   0.441530   0.3021542   0.0022806   0.000136  -0.000196   0.000125   0.000142  0.0000018  0.0000017    0.000308    0.000348
+1993  11  19  49310  -0.046160   0.442792   0.2998444   0.0023398   0.000291  -0.000246   0.000111   0.000131  0.0000017  0.0000017    0.000332    0.000368
+1993  11  20  49311  -0.046132   0.444114   0.2974787   0.0023931   0.000354  -0.000295   0.000159   0.000156  0.0000017  0.0000017    0.000304    0.000337
+1993  11  21  49312  -0.045893   0.445355   0.2950656   0.0024359   0.000328  -0.000331   0.000203   0.000189  0.0000017  0.0000017    0.000275    0.000307
+1993  11  22  49313  -0.044807   0.445851   0.2926155   0.0024666   0.000235  -0.000340   0.000202   0.000197  0.0000016  0.0000016    0.000246    0.000277
+1993  11  23  49314  -0.043760   0.446579   0.2901423   0.0024791   0.000107  -0.000317   0.000208   0.000174  0.0000016  0.0000016    0.000217    0.000246
+1993  11  24  49315  -0.042514   0.447537   0.2876685   0.0024628  -0.000022  -0.000268   0.000175   0.000131  0.0000016  0.0000015    0.000189    0.000216
+1993  11  25  49316  -0.041636   0.448504   0.2852273   0.0024077  -0.000123  -0.000201   0.000135   0.000138  0.0000015  0.0000015    0.000178    0.000204
+1993  11  26  49317  -0.040864   0.449521   0.2828608   0.0023095  -0.000176  -0.000128   0.000187   0.000231  0.0000014  0.0000014    0.000174    0.000197
+1993  11  27  49318  -0.040294   0.450276   0.2806117   0.0021743  -0.000174  -0.000068   0.000251   0.000297  0.0000012  0.0000012    0.000170    0.000191
+1993  11  28  49319  -0.039082   0.450935   0.2785104   0.0020220  -0.000126  -0.000034   0.000346   0.000401  0.0000011  0.0000011    0.000167    0.000184
+1993  11  29  49320  -0.038472   0.451877   0.2765603   0.0018854  -0.000055  -0.000040   0.000346   0.000422  0.0000010  0.0000010    0.000163    0.000178
+1993  11  30  49321  -0.038557   0.451655   0.2747264   0.0018011   0.000011  -0.000093   0.000200   0.000237  0.0000009  0.0000012    0.000159    0.000172
+1993  12   1  49322  -0.036471   0.452626   0.2729393   0.0017946   0.000099  -0.000146   0.000150   0.000138  0.0000014  0.0000019    0.000193    0.000201
+1993  12   2  49323  -0.035714   0.453238   0.2711158   0.0018546   0.000026  -0.000314   0.000169   0.000150  0.0000028  0.0000023    0.000232    0.000304
+1993  12   3  49324  -0.034103   0.454214   0.2692114   0.0019569  -0.000035  -0.000429   0.000185   0.000171  0.0000031  0.0000028    0.000243    0.000325
+1993  12   4  49325  -0.032239   0.454853   0.2671920   0.0021014  -0.000052  -0.000449   0.000210   0.000208  0.0000027  0.0000027    0.000240    0.000294
+1993  12   5  49326  -0.030459   0.456555   0.2650108   0.0022887  -0.000062  -0.000399   0.000230   0.000233  0.0000023  0.0000023    0.000237    0.000264
+1993  12   6  49327  -0.029531   0.457158   0.2626291   0.0024924  -0.000077  -0.000305   0.000201   0.000200  0.0000019  0.0000019    0.000234    0.000233
+1993  12   7  49328  -0.027849   0.458307   0.2600501   0.0026588  -0.000109  -0.000210   0.000148   0.000139  0.0000014  0.0000018    0.000232    0.000203
+1993  12   8  49329  -0.026786   0.459251   0.2573403   0.0027301  -0.000209  -0.000131   0.000144   0.000119  0.0000017  0.0000020    0.000231    0.000226
+1993  12   9  49330  -0.025641   0.460413   0.2546174   0.0026906  -0.000251  -0.000153   0.000152   0.000123  0.0000026  0.0000027    0.000339    0.000280
+1993  12  10  49331  -0.024396   0.461322   0.2519784   0.0025762  -0.000233  -0.000203   0.000156   0.000129  0.0000037  0.0000033    0.000484    0.000341
+1993  12  11  49332  -0.022260   0.462652   0.2494705   0.0024313  -0.000162  -0.000151   0.000178   0.000148  0.0000041  0.0000038    0.000438    0.000295
+1993  12  12  49333  -0.020852   0.462965   0.2471050   0.0022938  -0.000063  -0.000046   0.000219   0.000215  0.0000038  0.0000038    0.000257    0.000172
+1993  12  13  49334  -0.020645   0.464231   0.2448596   0.0022035  -0.000005  -0.000088   0.000225   0.000222  0.0000036  0.0000036    0.000222    0.000196
+1993  12  14  49335  -0.019439   0.465647   0.2426706   0.0021970   0.000013  -0.000208   0.000189   0.000148  0.0000033  0.0000027    0.000234    0.000269
+1993  12  15  49336  -0.018232   0.467235   0.2404440   0.0022861   0.000044  -0.000362   0.000142   0.000114  0.0000018  0.0000029    0.000215    0.000222
+1993  12  16  49337  -0.017284   0.468449   0.2380887   0.0024259   0.000002  -0.000346   0.000145   0.000123  0.0000025  0.0000029    0.000299    0.000301
+1993  12  17  49338  -0.016018   0.469610   0.2355942   0.0025394  -0.000086  -0.000201   0.000176   0.000135  0.0000040  0.0000033    0.000419    0.000426
+1993  12  18  49339  -0.014846   0.470225   0.2330191   0.0025934  -0.000193  -0.000015   0.000207   0.000190  0.0000041  0.0000036    0.000387    0.000378
+1993  12  19  49340  -0.013553   0.470756   0.2304191   0.0026101  -0.000269   0.000131   0.000295   0.000262  0.0000032  0.0000032    0.000246    0.000207
+1993  12  20  49341  -0.011731   0.471249   0.2278106   0.0026211  -0.000251   0.000156   0.000284   0.000231  0.0000022  0.0000022    0.000169    0.000123
+1993  12  21  49342  -0.010733   0.471974   0.2251881   0.0026299  -0.000099   0.000011   0.000172   0.000144  0.0000013  0.0000018    0.000282    0.000294
+1993  12  22  49343  -0.007335   0.473126   0.2225613   0.0026100  -0.000044  -0.000111   0.000119   0.000091  0.0000014  0.0000014    0.000216    0.000228
+1993  12  23  49344  -0.005368   0.474331   0.2199764   0.0025380   0.000014  -0.000231   0.000132   0.000100  0.0000015  0.0000015    0.000199    0.000211
+1993  12  24  49345  -0.002081   0.475108   0.2174892   0.0024198   0.000062  -0.000319   0.000202   0.000139  0.0000015  0.0000015    0.000210    0.000226
+1993  12  25  49346  -0.000550   0.476076   0.2151353   0.0022826   0.000086  -0.000355   0.000400   0.000472  0.0000015  0.0000015    0.000222    0.000241
+1993  12  26  49347   0.001457   0.477050   0.2129169   0.0021599   0.000091  -0.000344   0.000736   0.000861  0.0000015  0.0000015    0.000232    0.000257
+1993  12  27  49348   0.002590   0.476360   0.2108032   0.0020815   0.000083  -0.000305   0.000679   0.000815  0.0000016  0.0000016    0.000243    0.000272
+1993  12  28  49349   0.003678   0.476442   0.2087366   0.0020704   0.000069  -0.000257   0.000400   0.000517  0.0000016  0.0000016    0.000255    0.000287
+1993  12  29  49350   0.004827   0.476444   0.2066413   0.0021395   0.000056  -0.000216   0.000256   0.000240  0.0000016  0.0000013    0.000266    0.000303
+1993  12  30  49351   0.006624   0.475815   0.2044368   0.0022834   0.000039  -0.000202   0.000130   0.000113  0.0000011  0.0000013    0.000175    0.000217
+1993  12  31  49352   0.008037   0.476216   0.2020606   0.0024713   0.000057  -0.000185   0.000187   0.000192  0.0000009  0.0000011    0.000145    0.000181
+1994   1   1  49353   0.010042   0.476452   0.1994934   0.0026519   0.000105  -0.000164   0.000366   0.000332  0.0000010  0.0000010    0.000161    0.000188
+1994   1   2  49354   0.012735   0.476837   0.1967710   0.0027857   0.000157  -0.000149   0.000356   0.000356  0.0000011  0.0000221    0.000177    0.000195
+1994   1   3  49355   0.015483   0.477084   0.1939727   0.0027667   0.000186  -0.000146   0.000236   0.000268  0.0000012  0.0000233    0.000194    0.000202
+1994   1   4  49356   0.017738   0.477886   0.1911913   0.0026721   0.000165  -0.000159   0.000232   0.000173  0.0000013  0.0000227    0.000210    0.000208
+1994   1   5  49357   0.020951   0.478526   0.1885028   0.0026087   0.000081  -0.000185   0.000177   0.000125  0.0000014  0.0000209    0.000227    0.000215
+1994   1   6  49358   0.023344   0.479187   0.1859515   0.0024658  -0.000026  -0.000247   0.000145   0.000102  0.0000017  0.0000203    0.000273    0.000205
+1994   1   7  49359   0.026408   0.479643   0.1835544   0.0022780  -0.000246  -0.000246   0.000160   0.000117  0.0000021  0.0000203    0.000496    0.000469
+1994   1   8  49360   0.029092   0.480143   0.1813129   0.0021293  -0.000410  -0.000219   0.000165   0.000143  0.0000022  0.0000215    0.000580    0.000590
+1994   1   9  49361   0.031715   0.479899   0.1792163   0.0020344  -0.000439  -0.000198   0.000252   0.000194  0.0000021  0.0000215    0.000500    0.000504
+1994   1  10  49362   0.034090   0.479885   0.1772261   0.0019837  -0.000387  -0.000174   0.000271   0.000187  0.0000021  0.0000203    0.000420    0.000417
+1994   1  11  49363   0.036276   0.479861   0.1752648   0.0020033  -0.000289  -0.000152   0.000191   0.000131  0.0000020  0.0000197    0.000341    0.000330
+1994   1  12  49364   0.037726   0.479714   0.1732328   0.0021033  -0.000214  -0.000142   0.000152   0.000115  0.0000022  0.0000203    0.000333    0.000278
+1994   1  13  49365   0.040704   0.479546   0.1710494   0.0022477  -0.000174  -0.000120   0.000115   0.000098  0.0000013  0.0000197    0.000201    0.000191
+1994   1  14  49366   0.043125   0.479073   0.1687363   0.0023644  -0.000145  -0.000071   0.000084   0.000081  0.0000009  0.0000190    0.000138    0.000161
+1994   1  15  49367   0.046167   0.478711   0.1663672   0.0023863  -0.000109  -0.000072   0.000073   0.000073  0.0000011  0.0000197    0.000149    0.000177
+1994   1  16  49368   0.048248   0.478912   0.1640195   0.0023403  -0.000081  -0.000086   0.000073   0.000068  0.0000011  0.0000197    0.000141    0.000176
+1994   1  17  49369   0.050567   0.479010   0.1617283   0.0022820  -0.000080  -0.000079   0.000080   0.000069  0.0000009  0.0000184    0.000130    0.000164
+1994   1  18  49370   0.052235   0.479099   0.1594752   0.0022233  -0.000106  -0.000026   0.000075   0.000069  0.0000013  0.0000178    0.000169    0.000202
+1994   1  19  49371   0.054156   0.478620   0.1572864   0.0021169  -0.000132   0.000022   0.000077   0.000073  0.0000011  0.0000184    0.000148    0.000161
+1994   1  20  49372   0.055465   0.478139   0.1552174   0.0020183  -0.000136  -0.000013   0.000073   0.000067  0.0000010  0.0000197    0.000126    0.000152
+1994   1  21  49373   0.057549   0.477595   0.1532319   0.0019729  -0.000138  -0.000108   0.000064   0.000063  0.0000010  0.0000209    0.000124    0.000157
+1994   1  22  49374   0.059448   0.477030   0.1512751   0.0019255  -0.000126  -0.000170   0.000067   0.000069  0.0000010  0.0000203    0.000124    0.000157
+1994   1  23  49375   0.062117   0.475801   0.1493517   0.0019227  -0.000088  -0.000170   0.000076   0.000079  0.0000011  0.0000203    0.000129    0.000169
+1994   1  24  49376   0.064793   0.475976   0.1474182   0.0019482  -0.000048  -0.000176   0.000074   0.000079  0.0000010  0.0000203    0.000128    0.000156
+1994   1  25  49377   0.067762   0.476032   0.1454453   0.0020125  -0.000037  -0.000169   0.000066   0.000069  0.0000012  0.0000197    0.000159    0.000175
+1994   1  26  49378   0.070343   0.476343   0.1433649   0.0021736  -0.000050  -0.000158   0.000090   0.000086  0.0000014  0.0000190    0.000192    0.000216
+1994   1  27  49379   0.073309   0.475306   0.1410890   0.0023920  -0.000069  -0.000172   0.000122   0.000104  0.0000023  0.0000190    0.000241    0.000273
+1994   1  28  49380   0.075997   0.474557   0.1385972   0.0026055  -0.000101  -0.000140   0.000129   0.000118  0.0000030  0.0000190    0.000280    0.000309
+1994   1  29  49381   0.078848   0.473685   0.1359311   0.0027492  -0.000150  -0.000022   0.000165   0.000147  0.0000027  0.0000203    0.000269    0.000290
+1994   1  30  49382   0.080435   0.472838   0.1331565   0.0028096  -0.000197   0.000112   0.000196   0.000187  0.0000024  0.0000227    0.000258    0.000271
+1994   1  31  49383   0.083744   0.471732   0.1303492   0.0027911  -0.000233   0.000199   0.000189   0.000203  0.0000021  0.0000246    0.000247    0.000253
+1994   2   1  49384   0.086074   0.471323   0.1275914   0.0026701  -0.000255   0.000179   0.000164   0.000164  0.0000018  0.0000270    0.000235    0.000234
+1994   2   2  49385   0.089490   0.469970   0.1249678   0.0024823  -0.000270   0.000035   0.000121   0.000112  0.0000015  0.0000276    0.000224    0.000215
+1994   2   3  49386   0.091975   0.469581   0.1225452   0.0022888  -0.000256  -0.000278   0.000124   0.000110  0.0000017  0.0000276    0.000202    0.000212
+1994   2   4  49387   0.095516   0.468815   0.1203450   0.0021142  -0.000298  -0.000532   0.000153   0.000137  0.0000019  0.0000270    0.000246    0.000247
+1994   2   5  49388   0.097046   0.468551   0.1183279   0.0019825  -0.000374  -0.000629   0.000161   0.000159  0.0000022  0.0000264    0.000324    0.000300
+1994   2   6  49389   0.099467   0.467274   0.1164086   0.0019084  -0.000424  -0.000565   0.000219   0.000186  0.0000024  0.0000264    0.000403    0.000352
+1994   2   7  49390   0.101711   0.466170   0.1144913   0.0019125  -0.000389  -0.000325   0.000219   0.000179  0.0000026  0.0000252    0.000402    0.000394
+1994   2   8  49391   0.103449   0.465507   0.1125038   0.0020159  -0.000264  -0.000049   0.000156   0.000146  0.0000029  0.0000246    0.000335    0.000425
+1994   2   9  49392   0.105486   0.464566   0.1104130   0.0021359  -0.000092  -0.000117   0.000132   0.000120  0.0000018  0.0000252    0.000258    0.000286
+1994   2  10  49393   0.107690   0.463563   0.1082199   0.0022416   0.000067  -0.000304   0.000159   0.000155  0.0000015  0.0000436    0.000304    0.001718
+1994   2  11  49394   0.109363   0.462545   0.1059453   0.0023270   0.000180  -0.000447   0.000188   0.000201  0.0000015  0.0000430    0.000391    0.001160
+1994   2  12  49395   0.111326   0.461256   0.1036180   0.0023624   0.000235  -0.000450   0.000199   0.000265  0.0000015  0.0000240    0.000409    0.000375
+1994   2  13  49396   0.111631   0.460476   0.1012676   0.0023639   0.000215  -0.000348   0.000276   0.000392  0.0000015  0.0000233    0.000378    0.000344
+1994   2  14  49397   0.113987   0.459398   0.0989227   0.0023451   0.000122  -0.000220   0.000254   0.000337  0.0000015  0.0000233    0.000346    0.000312
+1994   2  15  49398   0.116577   0.457829   0.0966144   0.0022920  -0.000008  -0.000091   0.000169   0.000189  0.0000015  0.0000233    0.000315    0.000281
+1994   2  16  49399   0.118386   0.456972   0.0943775   0.0022269  -0.000152  -0.000215   0.000151   0.000136  0.0000015  0.0000240    0.000295    0.000310
+1994   2  17  49400   0.120769   0.455325   0.0922379   0.0021346  -0.000209   0.000023   0.000148   0.000117  0.0000021  0.0000246    0.000665    0.000599
+1994   2  18  49401   0.122045   0.454569   0.0901902   0.0020667  -0.000074   0.000545   0.000156   0.000131  0.0000021  0.0000246    0.002246    0.003578
+1994   2  19  49402   0.123468   0.452678   0.0881852   0.0019940   0.000167   0.001078   0.000187   0.000177  0.0000021  0.0000252    0.003929    0.006800
+1994   2  20  49403   0.125327   0.451248   0.0861530   0.0019784   0.000417   0.001379   0.000246   0.000248  0.0000020  0.0000270    0.005611    0.010022
+1994   2  21  49404   0.128366   0.449804   0.0840376   0.0020786   0.000563   0.001212   0.000249   0.000293  0.0000019  0.0000283    0.004562    0.008082
+1994   2  22  49405   0.131020   0.449989   0.0818022   0.0022175   0.000541   0.000586   0.000208   0.000255  0.0000019  0.0000283    0.000790    0.001001
+1994   2  23  49406   0.133663   0.448860   0.0794035   0.0024323   0.000335  -0.000296   0.000196   0.000205  0.0000018  0.0000276    0.000432    0.000360
+1994   2  24  49407   0.136359   0.448799   0.0767799   0.0027163   0.000049  -0.001076   0.000206   0.000212  0.0000017  0.0000270    0.001618    0.003026
+1994   2  25  49408   0.137987   0.448349   0.0738840   0.0030034  -0.000220  -0.001424   0.000200   0.000210  0.0000017  0.0000276    0.001539    0.002883
+1994   2  26  49409   0.139138   0.447740   0.0707328   0.0032274  -0.000415  -0.001383   0.000191   0.000247  0.0000016  0.0000283    0.001303    0.002395
+1994   2  27  49410   0.140821   0.446723   0.0674213   0.0033548  -0.000496  -0.001051   0.000202   0.000283  0.0000015  0.0000270    0.001067    0.001907
+1994   2  28  49411   0.141806   0.446144   0.0640843   0.0033737  -0.000456  -0.000602   0.000248   0.000274  0.0000015  0.0000252    0.000831    0.001419
+1994   3   1  49412   0.143306   0.444479   0.0608400   0.0032701  -0.000323  -0.000196   0.000241   0.000223  0.0000014  0.0000240    0.000595    0.000931
+1994   3   2  49413   0.143512   0.443564   0.0577540   0.0030936  -0.000143   0.000074   0.000160   0.000145  0.0000013  0.0000240    0.000359    0.000443
+1994   3   3  49414   0.145383   0.441201   0.0548387   0.0028934   0.000034   0.000118   0.000170   0.000146  0.0000013  0.0000246    0.000331    0.000472
+1994   3   4  49415   0.145986   0.439756   0.0520748   0.0027106   0.000170   0.000075   0.000187   0.000166  0.0000013  0.0000240    0.000373    0.000673
+1994   3   5  49416   0.147103   0.437610   0.0494340   0.0025616   0.000237   0.000175   0.000166   0.000180  0.0000013  0.0000233    0.000388    0.000598
+1994   3   6  49417   0.147689   0.436201   0.0468865   0.0025173   0.000243   0.000309   0.000302   0.000296  0.0000013  0.0000240    0.000400    0.000495
+1994   3   7  49418   0.149182   0.434297   0.0443943   0.0024948   0.000200   0.000405   0.000360   0.000333  0.0000013  0.0000246    0.000412    0.000393
+1994   3   8  49419   0.149580   0.432596   0.0419046   0.0025289   0.000120   0.000402   0.000280   0.000242  0.0000012  0.0000246    0.000424    0.000291
+1994   3   9  49420   0.150824   0.430900   0.0393598   0.0025719   0.000069   0.000133   0.000210   0.000174  0.0000012  0.0000252    0.000300    0.000238
+1994   3  10  49421   0.151672   0.429508   0.0367270   0.0026289  -0.000071  -0.000058   0.000181   0.000161  0.0000012  0.0000252    0.000342    0.000254
+1994   3  11  49422   0.153250   0.427311   0.0340251   0.0026559  -0.000232  -0.000154   0.000217   0.000201  0.0000012  0.0000252    0.000450    0.000289
+1994   3  12  49423   0.154015   0.425356   0.0313243   0.0026026  -0.000322  -0.000194   0.000254   0.000226  0.0000012  0.0000252    0.000454    0.000291
+1994   3  13  49424   0.156151   0.423881   0.0287092   0.0025343  -0.000321  -0.000171   0.000217   0.000166  0.0000012  0.0000246    0.000383    0.000269
+1994   3  14  49425   0.157286   0.422002   0.0262292   0.0024581  -0.000251  -0.000094   0.000117   0.000087  0.0000012  0.0000246    0.000312    0.000247
+1994   3  15  49426   0.159105   0.421217   0.0238722   0.0023637  -0.000154   0.000002   0.000082   0.000081  0.0000013  0.0000233    0.000241    0.000225
+1994   3  16  49427   0.159632   0.419932   0.0215856   0.0022843  -0.000051   0.000103   0.000079   0.000078  0.0000016  0.0000233    0.000292    0.000279
+1994   3  17  49428   0.161755   0.418380   0.0193199   0.0022112  -0.000045   0.000135   0.000071   0.000063  0.0000027  0.0000240    0.000259    0.000291
+1994   3  18  49429   0.162419   0.416389   0.0171639   0.0021554  -0.000133   0.000117   0.000107   0.000096  0.0000045  0.0000246    0.000389    0.000329
+1994   3  19  49430   0.163627   0.415721   0.0151044   0.0021079  -0.000210   0.000047   0.000144   0.000231  0.0000049  0.0000258    0.000403    0.000325
+1994   3  20  49431   0.163283   0.414046   0.0130253   0.0020977  -0.000229  -0.000042   0.000186   0.000267  0.0000041  0.0000276    0.000265    0.000273
+1994   3  21  49432   0.164313   0.412039   0.0108451   0.0021752  -0.000191  -0.000064   0.000235   0.000209  0.0000034  0.0000295    0.000224    0.000294
+1994   3  22  49433   0.164270   0.410252   0.0085210   0.0023549  -0.000124  -0.000040   0.000251   0.000203  0.0000026  0.0000301    0.000224    0.000344
+1994   3  23  49434   0.164033   0.408106   0.0060296   0.0025825  -0.000058  -0.000055   0.000223   0.000161  0.0000018  0.0000295    0.000301    0.000284
+1994   3  24  49435   0.165127   0.405722   0.0033376   0.0028257  -0.000088  -0.000039   0.000142   0.000114  0.0000016  0.0000295    0.000288    0.000242
+1994   3  25  49436   0.166122   0.404297   0.0004017   0.0030989  -0.000201  -0.000010   0.000122   0.000116  0.0000017  0.0000301    0.000344    0.000336
+1994   3  26  49437   0.167585   0.402868  -0.0027491   0.0032762  -0.000312   0.000015   0.000154   0.000166  0.0000017  0.0000283    0.000374    0.000382
+1994   3  27  49438   0.168739   0.400628  -0.0060042   0.0032446  -0.000373   0.000031   0.000182   0.000210  0.0000016  0.0000270    0.000347    0.000344
+1994   3  28  49439   0.169353   0.398926  -0.0092235   0.0030966  -0.000374   0.000032   0.000236   0.000227  0.0000015  0.0000258    0.000320    0.000306
+1994   3  29  49440   0.169928   0.396856  -0.0122859   0.0028981  -0.000315   0.000015   0.000225   0.000227  0.0000015  0.0000240    0.000294    0.000269
+1994   3  30  49441   0.170652   0.394938  -0.0151293   0.0027128  -0.000211  -0.000015   0.000159   0.000167  0.0000014  0.0000233    0.000267    0.000231
+1994   3  31  49442   0.171743   0.392763  -0.0177605   0.0025402  -0.000099  -0.000051   0.000169   0.000141  0.0000014  0.0000233    0.000274    0.000255
+1994   4   1  49443   0.173569   0.391158  -0.0202336   0.0024342  -0.000001  -0.000080   0.000224   0.000169  0.0000016  0.0000240    0.000292    0.000299
+1994   4   2  49444   0.174467   0.389967  -0.0226192   0.0023867   0.000067  -0.000093   0.000227   0.000176  0.0000017  0.0000252    0.000311    0.000343
+1994   4   3  49445   0.176167   0.388105  -0.0249814   0.0024164   0.000099  -0.000090   0.000199   0.000204  0.0000018  0.0000264    0.000329    0.000387
+1994   4   4  49446   0.177343   0.386387  -0.0273719   0.0024895   0.000101  -0.000077   0.000183   0.000198  0.0000019  0.0000270    0.000327    0.000352
+1994   4   5  49447   0.178865   0.384562  -0.0298306   0.0025501   0.000073  -0.000072   0.000149   0.000137  0.0000020  0.0000283    0.000322    0.000311
+1994   4   6  49448   0.179760   0.382725  -0.0323823   0.0025494   0.000023  -0.000089   0.000122   0.000102  0.0000022  0.0000295    0.000318    0.000271
+1994   4   7  49449   0.180783   0.381198  -0.0350222   0.0025649  -0.000048  -0.000137   0.000126   0.000104  0.0000022  0.0000307    0.000319    0.000268
+1994   4   8  49450   0.181308   0.379365  -0.0377064   0.0026078  -0.000120  -0.000211   0.000134   0.000108  0.0000021  0.0000313    0.000322    0.000278
+1994   4   9  49451   0.182020   0.377482  -0.0403639   0.0026140  -0.000172  -0.000293   0.000161   0.000138  0.0000021  0.0000319    0.000324    0.000289
+1994   4  10  49452   0.182511   0.375887  -0.0429342   0.0025762  -0.000194  -0.000348   0.000213   0.000191  0.0000020  0.0000326    0.000327    0.000299
+1994   4  11  49453   0.183075   0.374160  -0.0454050   0.0025066  -0.000188  -0.000340   0.000214   0.000217  0.0000020  0.0000313    0.000329    0.000309
+1994   4  12  49454   0.183344   0.372814  -0.0478142   0.0024008  -0.000186  -0.000224   0.000231   0.000216  0.0000019  0.0000307    0.000332    0.000319
+1994   4  13  49455   0.182991   0.370971  -0.0502068   0.0022905  -0.000230  -0.000043   0.000209   0.000176  0.0000019  0.0000289    0.000321    0.000280
+1994   4  14  49456   0.182863   0.368743  -0.0525820   0.0021882  -0.000310   0.000359   0.000183   0.000150  0.0000018  0.0000276    0.000650    0.000457
+1994   4  15  49457   0.182555   0.366713  -0.0548866   0.0021196  -0.000678   0.000841   0.000198   0.000153  0.0000017  0.0000276    0.000777    0.000529
+1994   4  16  49458   0.183287   0.364234  -0.0570685   0.0021269  -0.001199   0.001239   0.000217   0.000169  0.0000016  0.0000264    0.000745    0.000511
+1994   4  17  49459   0.183365   0.362135  -0.0591443   0.0021769  -0.001589   0.001419   0.000243   0.000208  0.0000015  0.0000258    0.000713    0.000493
+1994   4  18  49460   0.183461   0.360087  -0.0612148   0.0022479  -0.001639   0.001296   0.000217   0.000215  0.0000014  0.0000252    0.000681    0.000475
+1994   4  19  49461   0.183651   0.358142  -0.0634145   0.0023721  -0.001279   0.000896   0.000213   0.000192  0.0000013  0.0000246    0.000649    0.000457
+1994   4  20  49462   0.183778   0.356841  -0.0658401   0.0025636  -0.000223   0.000155   0.000179   0.000146  0.0000012  0.0000240    0.000318    0.000268
+1994   4  21  49463   0.183938   0.355596  -0.0685168   0.0027456   0.000448  -0.000315   0.000146   0.000128  0.0000013  0.0000240    0.000266    0.000245
+1994   4  22  49464   0.183624   0.354255  -0.0714120   0.0029653   0.000676  -0.000474   0.000151   0.000152  0.0000014  0.0000240    0.000315    0.000283
+1994   4  23  49465   0.183580   0.352749  -0.0744624   0.0031483   0.000541  -0.000385   0.000173   0.000181  0.0000016  0.0000246    0.000364    0.000320
+1994   4  24  49466   0.183084   0.350432  -0.0775852   0.0031691   0.000195  -0.000160   0.000208   0.000259  0.0000017  0.0000264    0.000414    0.000358
+1994   4  25  49467   0.182678   0.348921  -0.0806785   0.0030640  -0.000141   0.000051   0.000187   0.000242  0.0000019  0.0000276    0.000463    0.000395
+1994   4  26  49468   0.182632   0.346505  -0.0836392   0.0028424  -0.000305   0.000156   0.000157   0.000150  0.0000020  0.0000283    0.000512    0.000433
+1994   4  27  49469   0.182848   0.344002  -0.0864039   0.0026433  -0.000068  -0.000014   0.000154   0.000126  0.0000016  0.0000283    0.000316    0.000286
+1994   4  28  49470   0.182718   0.341226  -0.0889829   0.0025258   0.000215  -0.000135   0.000179   0.000146  0.0000016  0.0000276    0.000303    0.000228
+1994   4  29  49471   0.182861   0.338459  -0.0914577   0.0024622   0.000103  -0.000025   0.000140   0.000120  0.0000016  0.0000270    0.000260    0.000235
+1994   4  30  49472   0.183131   0.335994  -0.0939244   0.0024674  -0.000081   0.000102   0.000151   0.000141  0.0000017  0.0000264    0.000223    0.000244
+1994   5   1  49473   0.183797   0.334012  -0.0964334   0.0024922  -0.000169   0.000147   0.000195   0.000194  0.0000017  0.0000246    0.000228    0.000247
+1994   5   2  49474   0.183814   0.331948  -0.0989828   0.0025508  -0.000213   0.000140   0.000148   0.000155  0.0000016  0.0000227    0.000233    0.000249
+1994   5   3  49475   0.184647   0.329943  -0.1015532   0.0026110  -0.000193   0.000079   0.000129   0.000124  0.0000016  0.0000221    0.000237    0.000252
+1994   5   4  49476   0.185066   0.327856  -0.1041368   0.0026440  -0.000125  -0.000006   0.000125   0.000112  0.0000016  0.0000227    0.000242    0.000255
+1994   5   5  49477   0.185383   0.325857  -0.1067353   0.0026543  -0.000060  -0.000054   0.000168   0.000130  0.0000015  0.0000246    0.000235    0.000249
+1994   5   6  49478   0.184995   0.323694  -0.1093406   0.0025836  -0.000020  -0.000053   0.000198   0.000161  0.0000015  0.0000246    0.000225    0.000241
+1994   5   7  49479   0.185576   0.321334  -0.1119237   0.0025123  -0.000014  -0.000009   0.000169   0.000183  0.0000014  0.0000246    0.000215    0.000233
+1994   5   8  49480   0.185845   0.318264  -0.1144431   0.0024388  -0.000039   0.000054   0.000153   0.000187  0.0000013  0.0000246    0.000204    0.000225
+1994   5   9  49481   0.186527   0.316310  -0.1168667   0.0023647  -0.000082   0.000098   0.000145   0.000162  0.0000012  0.0000246    0.000194    0.000217
+1994   5  10  49482   0.186939   0.314023  -0.1191869   0.0022884  -0.000115   0.000100   0.000126   0.000120  0.0000011  0.0000258    0.000183    0.000208
+1994   5  11  49483   0.188188   0.312374  -0.1214224   0.0022278  -0.000107   0.000065   0.000132   0.000112  0.0000015  0.0000252    0.000279    0.000258
+1994   5  12  49484   0.188223   0.310227  -0.1236066   0.0021822  -0.000058   0.000006   0.000118   0.000105  0.0000016  0.0000246    0.000265    0.000262
+1994   5  13  49485   0.189046   0.308380  -0.1257751   0.0021565   0.000074  -0.000070   0.000112   0.000107  0.0000020  0.0000240    0.000403    0.000414
+1994   5  14  49486   0.189015   0.305910  -0.1279470   0.0021615   0.000288   0.000030   0.000190   0.000174  0.0000022  0.0000258    0.000571    0.000611
+1994   5  15  49487   0.188880   0.303968  -0.1301370   0.0021951   0.000492   0.000269   0.000195   0.000170  0.0000020  0.0000264    0.000689    0.000779
+1994   5  16  49488   0.187908   0.302122  -0.1323786   0.0023011   0.000570   0.000441   0.000141   0.000121  0.0000018  0.0000240    0.000806    0.000947
+1994   5  17  49489   0.187633   0.300167  -0.1347288   0.0024502   0.000471   0.000428   0.000162   0.000120  0.0000016  0.0000227    0.000923    0.001115
+1994   5  18  49490   0.187293   0.297856  -0.1372465   0.0025797   0.000114   0.000116   0.000161   0.000110  0.0000014  0.0000221    0.000375    0.000428
+1994   5  19  49491   0.187089   0.295925  -0.1399492   0.0026756  -0.000244  -0.000422   0.000136   0.000111  0.0000022  0.0000221    0.000288    0.000220
+1994   5  20  49492   0.187328   0.293694  -0.1427814   0.0027624  -0.000427  -0.000677   0.000161   0.000147  0.0000034  0.0000221    0.000322    0.000238
+1994   5  21  49493   0.186406   0.291872  -0.1456254   0.0027794  -0.000418  -0.000584   0.000197   0.000153  0.0000045  0.0000227    0.000329    0.000275
+1994   5  22  49494   0.186060   0.289925  -0.1483533   0.0027259  -0.000276  -0.000293   0.000214   0.000187  0.0000057  0.0000233    0.000337    0.000312
+1994   5  23  49495   0.185324   0.288794  -0.1508833   0.0025532  -0.000087   0.000030   0.000212   0.000197  0.0000069  0.0000240    0.000344    0.000349
+1994   5  24  49496   0.184208   0.287173  -0.1532011   0.0022898   0.000064   0.000215   0.000188   0.000152  0.0000080  0.0000264    0.000352    0.000386
+1994   5  25  49497   0.182442   0.285573  -0.1553417   0.0020826   0.000007   0.000041   0.000155   0.000130  0.0000028  0.0000276    0.000256    0.000277
+1994   5  26  49498   0.181375   0.283326  -0.1573568   0.0019409   0.000039  -0.000255   0.000166   0.000137  0.0000015  0.0000270    0.000284    0.000290
+1994   5  27  49499   0.179905   0.281146  -0.1592949   0.0018885   0.000066  -0.000464   0.000196   0.000162  0.0000015  0.0000270    0.000295    0.000300
+1994   5  28  49500   0.178733   0.278809  -0.1611979   0.0018695   0.000079  -0.000511   0.000228   0.000171  0.0000015  0.0000270    0.000276    0.000286
+1994   5  29  49501   0.177779   0.276670  -0.1631028   0.0019135   0.000096  -0.000408   0.000258   0.000288  0.0000015  0.0000276    0.000258    0.000272
+1994   5  30  49502   0.176805   0.274553  -0.1650386   0.0019736   0.000110  -0.000213   0.000244   0.000343  0.0000015  0.0000264    0.000239    0.000258
+1994   5  31  49503   0.175675   0.271799  -0.1670186   0.0020051   0.000112  -0.000021   0.000216   0.000252  0.0000015  0.0000252    0.000220    0.000245
+1994   6   1  49504   0.174488   0.269462  -0.1690329   0.0020215   0.000095   0.000090   0.000160   0.000164  0.0000015  0.0000258    0.000202    0.000231
+1994   6   2  49505   0.173687   0.267249  -0.1710489   0.0020043   0.000060   0.000039   0.000144   0.000134  0.0000041  0.0000252    0.000302    0.000376
+1994   6   3  49506   0.172678   0.265279  -0.1730195   0.0019356   0.000006  -0.000094   0.000172   0.000164  0.0000075  0.0000240    0.000443    0.000574
+1994   6   4  49507   0.171594   0.263601  -0.1749000   0.0018232  -0.000067  -0.000162   0.000198   0.000184  0.0000064  0.0000233    0.000414    0.000523
+1994   6   5  49508   0.170606   0.261417  -0.1766627   0.0017236  -0.000129  -0.000180   0.000234   0.000201  0.0000053  0.0000227    0.000385    0.000471
+1994   6   6  49509   0.169230   0.260185  -0.1783034   0.0015785  -0.000158  -0.000143   0.000232   0.000201  0.0000042  0.0000221    0.000356    0.000420
+1994   6   7  49510   0.167283   0.257986  -0.1798377   0.0014706  -0.000139  -0.000077   0.000201   0.000189  0.0000030  0.0000221    0.000328    0.000368
+1994   6   8  49511   0.165984   0.256544  -0.1812944   0.0014253  -0.000075  -0.000026   0.000168   0.000161  0.0000019  0.0000240    0.000299    0.000317
+1994   6   9  49512   0.165780   0.254298  -0.1827095   0.0014594   0.000038  -0.000043   0.000169   0.000140  0.0000016  0.0000264    0.000208    0.000166
+1994   6  10  49513   0.164469   0.252206  -0.1841244   0.0014413   0.000128  -0.000103   0.000190   0.000164  0.0000017  0.0000264    0.000183    0.000129
+1994   6  11  49514   0.163825   0.250014  -0.1855855   0.0014940   0.000169  -0.000195   0.000203   0.000237  0.0000017  0.0000246    0.000202    0.000164
+1994   6  12  49515   0.162653   0.248114  -0.1871401   0.0015959   0.000166  -0.000295   0.000223   0.000263  0.0000017  0.0000227    0.000221    0.000200
+1994   6  13  49516   0.161880   0.245684  -0.1888263   0.0017342   0.000137  -0.000363   0.000205   0.000225  0.0000017  0.0000221    0.000239    0.000235
+1994   6  14  49517   0.160657   0.243442  -0.1906619   0.0019016   0.000107  -0.000378   0.000184   0.000178  0.0000017  0.0000221    0.000267    0.000279
+1994   6  15  49518   0.160032   0.241416  -0.1926386   0.0020569   0.000085  -0.000362   0.000156   0.000127  0.0000018  0.0000221    0.000324    0.000349
+1994   6  16  49519   0.159259   0.239661  -0.1947224   0.0021268   0.000200  -0.000078   0.000135   0.000126  0.0000026  0.0000221    0.000652    0.000596
+1994   6  17  49520   0.158564   0.237829  -0.1968572   0.0021575   0.000297   0.000154   0.000173   0.000173  0.0000027  0.0000227    0.000705    0.000626
+1994   6  18  49521   0.157366   0.235993  -0.1989685   0.0020729   0.000329   0.000249   0.000237   0.000281  0.0000023  0.0000240    0.000571    0.000516
+1994   6  19  49522   0.156396   0.234689  -0.2009732   0.0019236   0.000303   0.000238   0.000343   0.000426  0.0000020  0.0000240    0.000438    0.000407
+1994   6  20  49523   0.154372   0.232642  -0.2027998   0.0017174   0.000223   0.000150   0.000389   0.000488  0.0000016  0.0000233    0.000304    0.000297
+1994   6  21  49524   0.152989   0.230241  -0.2044118   0.0015079   0.000116   0.000051   0.000247   0.000305  0.0000013  0.0000233    0.000171    0.000188
+1994   6  22  49525   0.150965   0.227925  -0.2058231   0.0013359   0.000025   0.000009   0.000167   0.000163  0.0000017  0.0000240    0.000261    0.000288
+1994   6  23  49526   0.150140   0.225538  -0.2070940   0.0012480  -0.000043   0.000066   0.000300   0.000295  0.0000018  0.0000246    0.000346    0.000361
+1994   6  24  49527   0.148376   0.223589  -0.2083064   0.0012049  -0.000078   0.000172   0.000361   0.000390  0.0000018  0.0000252    0.000415    0.000410
+1994   6  25  49528   0.146818   0.221705  -0.2095323   0.0012158  -0.000084   0.000265   0.000285   0.000329  0.0000018  0.0000270    0.000483    0.000458
+1994   6  26  49529   0.145029   0.220023  -0.2108098   0.0012781  -0.000072   0.000281   0.000233   0.000296  0.0000018  0.0000276    0.000548    0.000492
+1994   6  27  49530   0.143597   0.218240  -0.2121363   0.0013338  -0.000045   0.000172   0.000213   0.000278  0.0000022  0.0000270    0.000605    0.000478
+1994   6  28  49531   0.141724   0.216209  -0.2134776   0.0013474  -0.000051   0.000052   0.000177   0.000200  0.0000024  0.0000270    0.000625    0.000445
+1994   6  29  49532   0.139552   0.214693  -0.2147879   0.0013128  -0.000167   0.000072   0.000154   0.000152  0.0000023  0.0000270    0.000218    0.000189
+1994   6  30  49533   0.138211   0.213482  -0.2160316   0.0012100  -0.000168   0.000052   0.000153   0.000145  0.0000022  0.0000270    0.000249    0.000279
+1994   7   1  49534   0.136373   0.212078   0.7828033   0.0011036   0.000015  -0.000179   0.000122   0.000114  0.0000021  0.0000270    0.000188    0.000190
+1994   7   2  49535   0.134876   0.210604   0.7817088   0.0010443   0.000180  -0.000338   0.000140   0.000124  0.0000020  0.0000252    0.000135    0.000123
+1994   7   3  49536   0.133490   0.208904   0.7806723   0.0009942   0.000241  -0.000327   0.000196   0.000232  0.0000019  0.0000240    0.000156    0.000151
+1994   7   4  49537   0.131388   0.208612   0.7796907   0.0009354   0.000231  -0.000225   0.000191   0.000302  0.0000018  0.0000240    0.000176    0.000179
+1994   7   5  49538   0.129396   0.206936   0.7787682   0.0009084   0.000165  -0.000082   0.000178   0.000242  0.0000016  0.0000233    0.000197    0.000207
+1994   7   6  49539   0.127667   0.205133   0.7778983   0.0008844   0.000080   0.000038   0.000152   0.000145  0.0000015  0.0000233    0.000218    0.000235
+1994   7   7  49540   0.125759   0.203726   0.7770435   0.0009032   0.000040   0.000046   0.000152   0.000128  0.0000022  0.0000227    0.000277    0.000336
+1994   7   8  49541   0.124054   0.201779   0.7761321   0.0009772   0.000034  -0.000018   0.000135   0.000126  0.0000032  0.0000227    0.000350    0.000462
+1994   7   9  49542   0.122358   0.200809   0.7750823   0.0011333   0.000010  -0.000057   0.000154   0.000163  0.0000033  0.0000227    0.000332    0.000414
+1994   7  10  49543   0.120882   0.199506   0.7738386   0.0013189  -0.000004  -0.000072   0.000214   0.000217  0.0000033  0.0000221    0.000309    0.000352
+1994   7  11  49544   0.118671   0.198548   0.7723865   0.0015158  -0.000014  -0.000062   0.000212   0.000217  0.0000033  0.0000227    0.000286    0.000289
+1994   7  12  49545   0.116844   0.197113   0.7707474   0.0017018  -0.000031  -0.000054   0.000176   0.000169  0.0000032  0.0000233    0.000262    0.000227
+1994   7  13  49546   0.115618   0.196406   0.7689611   0.0018457  -0.000010   0.000010   0.000150   0.000123  0.0000020  0.0000233    0.000235    0.000230
+1994   7  14  49547   0.113532   0.195068   0.7670736   0.0019397  -0.000055  -0.000098   0.000123   0.000104  0.0000019  0.0000240    0.000255    0.000279
+1994   7  15  49548   0.111658   0.193854   0.7651443   0.0019484  -0.000255  -0.000351   0.000129   0.000117  0.0000019  0.0000252    0.000297    0.000264
+1994   7  16  49549   0.109686   0.192752   0.7632385   0.0018706  -0.000371  -0.000410   0.000192   0.000203  0.0000017  0.0000258    0.000295    0.000233
+1994   7  17  49550   0.107821   0.191217   0.7614154   0.0017581  -0.000335  -0.000249   0.000210   0.000254  0.0000016  0.0000258    0.000259    0.000215
+1994   7  18  49551   0.106062   0.189542   0.7597244   0.0016486  -0.000236  -0.000054   0.000214   0.000236  0.0000014  0.0000246    0.000223    0.000197
+1994   7  19  49552   0.103673   0.188050   0.7581893   0.0014707  -0.000112   0.000076   0.000173   0.000163  0.0000013  0.0000233    0.000187    0.000180
+1994   7  20  49553   0.102168   0.185270   0.7567870   0.0013422  -0.000076  -0.000172   0.000115   0.000101  0.0000014  0.0000233    0.000244    0.000245
+1994   7  21  49554   0.100327   0.184369   0.7554424   0.0012842   0.000012  -0.000321   0.000131   0.000117  0.0000014  0.0000233    0.000328    0.000327
+1994   7  22  49555   0.098481   0.182571   0.7540732   0.0013234   0.000163  -0.000235   0.000148   0.000136  0.0000015  0.0000240    0.000270    0.000289
+1994   7  23  49556   0.096381   0.181623   0.7526414   0.0014122   0.000423  -0.000241   0.000140   0.000141  0.0000015  0.0000240    0.000318    0.000288
+1994   7  24  49557   0.094707   0.179367   0.7511656   0.0014879   0.000697  -0.000373   0.000198   0.000242  0.0000015  0.0000233    0.000494    0.000355
+1994   7  25  49558   0.093045   0.178788   0.7496882   0.0015066   0.000826  -0.000470   0.000244   0.000280  0.0000016  0.0000233    0.000671    0.000423
+1994   7  26  49559   0.091099   0.177462   0.7482343   0.0015287   0.000759  -0.000486   0.000221   0.000204  0.0000016  0.0000240    0.000847    0.000490
+1994   7  27  49560   0.088556   0.176979   0.7468001   0.0015011   0.000181  -0.000129   0.000182   0.000162  0.0000016  0.0000233    0.000416    0.000304
+1994   7  28  49561   0.086693   0.176197   0.7453699   0.0014549   0.000003  -0.000030   0.000189   0.000168  0.0000021  0.0000221    0.000247    0.000230
+1994   7  29  49562   0.084407   0.175907   0.7439368   0.0014032   0.000100  -0.000053   0.000193   0.000178  0.0000028  0.0000227    0.000211    0.000212
+1994   7  30  49563   0.082752   0.175149   0.7425203   0.0013705   0.000109   0.000111   0.000191   0.000200  0.0000031  0.0000227    0.000378    0.000369
+1994   7  31  49564   0.080466   0.174956   0.7411694   0.0012904   0.000117   0.000283   0.000231   0.000227  0.0000033  0.0000227    0.000563    0.000542
+1994   8   1  49565   0.078448   0.174114   0.7399311   0.0011901   0.000103   0.000380   0.000207   0.000207  0.0000035  0.0000233    0.000749    0.000715
+1994   8   2  49566   0.076569   0.173847   0.7388083   0.0011038   0.000066   0.000332   0.000176   0.000181  0.0000037  0.0000227    0.000935    0.000888
+1994   8   3  49567   0.074810   0.173190   0.7377365   0.0011004   0.000020   0.000065   0.000159   0.000154  0.0000022  0.0000221    0.000457    0.000485
+1994   8   4  49568   0.073124   0.172883   0.7366035   0.0011858   0.000026  -0.000335   0.000159   0.000160  0.0000021  0.0000227    0.000568    0.000477
+1994   8   5  49569   0.071656   0.172763   0.7353638   0.0012963   0.000077  -0.000640   0.000155   0.000170  0.0000030  0.0000233    0.000689    0.000647
+1994   8   6  49570   0.069917   0.172632   0.7339955   0.0014314   0.000091  -0.000737   0.000189   0.000203  0.0000032  0.0000233    0.000620    0.000641
+1994   8   7  49571   0.068326   0.172310   0.7324919   0.0015538   0.000048  -0.000645   0.000206   0.000199  0.0000027  0.0000227    0.000496    0.000507
+1994   8   8  49572   0.067072   0.171750   0.7308786   0.0016536  -0.000016  -0.000449   0.000161   0.000160  0.0000022  0.0000221    0.000373    0.000373
+1994   8   9  49573   0.065193   0.171879   0.7291892   0.0017159  -0.000054  -0.000235   0.000134   0.000133  0.0000017  0.0000233    0.000249    0.000239
+1994   8  10  49574   0.064251   0.171708   0.7274570   0.0017482  -0.000085  -0.000136   0.000109   0.000102  0.0000016  0.0000240    0.000226    0.000201
+1994   8  11  49575   0.062876   0.171606   0.7257226   0.0017461   0.000035  -0.000148   0.000138   0.000115  0.0000018  0.0000233    0.000218    0.000232
+1994   8  12  49576   0.061884   0.171521   0.7240460   0.0016810   0.000359   0.000050   0.000171   0.000128  0.0000021  0.0000227    0.000152    0.000167
+1994   8  13  49577   0.059471   0.171426   0.7224836   0.0015149   0.000540   0.000231   0.000182   0.000127  0.0000024  0.0000215    0.000116    0.000117
+1994   8  14  49578   0.057716   0.171028   0.7210532   0.0013520   0.000435   0.000230   0.000209   0.000201  0.0000028  0.0000215    0.000138    0.000138
+1994   8  15  49579   0.054312   0.170650   0.7197300   0.0012379   0.000221   0.000142   0.000191   0.000275  0.0000031  0.0000221    0.000161    0.000158
+1994   8  16  49580   0.051461   0.169683   0.7184719   0.0012158   0.000008  -0.000009   0.000156   0.000193  0.0000034  0.0000215    0.000183    0.000178
+1994   8  17  49581   0.049327   0.168973   0.7172387   0.0012497   0.000037  -0.000134   0.000133   0.000105  0.0000019  0.0000215    0.000211    0.000184
+1994   8  18  49582   0.047719   0.168480   0.7159901   0.0013221   0.000111  -0.000254   0.000154   0.000130  0.0000015  0.0000221    0.000219    0.000186
+1994   8  19  49583   0.045886   0.168314   0.7146740   0.0014088   0.000225  -0.000340   0.000202   0.000150  0.0000016  0.0000221    0.000219    0.000187
+1994   8  20  49584   0.043455   0.168714   0.7132377   0.0015214   0.000339  -0.000380   0.000221   0.000154  0.0000016  0.0000227    0.000219    0.000187
+1994   8  21  49585   0.039748   0.169084   0.7116533   0.0016229   0.000402  -0.000371   0.000224   0.000185  0.0000016  0.0000233    0.000220    0.000187
+1994   8  22  49586   0.036447   0.169006   0.7099359   0.0017323   0.000386  -0.000317   0.000213   0.000194  0.0000016  0.0000233    0.000220    0.000188
+1994   8  23  49587   0.033094   0.168939   0.7081399   0.0017730   0.000297  -0.000231   0.000176   0.000151  0.0000016  0.0000233    0.000220    0.000188
+1994   8  24  49588   0.030410   0.168752   0.7063371   0.0017730   0.000165  -0.000125   0.000132   0.000104  0.0000016  0.0000233    0.000220    0.000189
+1994   8  25  49589   0.028180   0.167831   0.7045900   0.0017113   0.000022  -0.000032   0.000103   0.000085  0.0000018  0.0000227    0.000250    0.000224
+1994   8  26  49590   0.026393   0.168091   0.7029344   0.0016033  -0.000060   0.000069   0.000113   0.000095  0.0000016  0.0000221    0.000330    0.000384
+1994   8  27  49591   0.024848   0.168129   0.7013534   0.0015276  -0.000042   0.000114   0.000162   0.000146  0.0000014  0.0000215    0.000349    0.000434
+1994   8  28  49592   0.023209   0.168479   0.6998185   0.0015017   0.000048   0.000090   0.000207   0.000183  0.0000014  0.0000209    0.000311    0.000365
+1994   8  29  49593   0.021281   0.168781   0.6983259   0.0014559   0.000148   0.000034   0.000203   0.000159  0.0000014  0.0000209    0.000274    0.000296
+1994   8  30  49594   0.018370   0.169177   0.6968780   0.0014200   0.000217  -0.000015   0.000153   0.000115  0.0000013  0.0000203    0.000235    0.000227
+1994   8  31  49595   0.016219   0.169947   0.6954512   0.0014660   0.000143  -0.000056   0.000118   0.000096  0.0000014  0.0000203    0.000225    0.000196
+1994   9   1  49596   0.012859   0.170434   0.6939751   0.0015502   0.000129   0.000056   0.000119   0.000093  0.0000019  0.0000203    0.000227    0.000211
+1994   9   2  49597   0.010705   0.170647   0.6923603   0.0017072   0.000174   0.000156   0.000121   0.000091  0.0000025  0.0000197    0.000337    0.000359
+1994   9   3  49598   0.008291   0.170751   0.6905384   0.0019205   0.000168   0.000213   0.000193   0.000140  0.0000026  0.0000197    0.000379    0.000393
+1994   9   4  49599   0.006356   0.170863   0.6884907   0.0021556   0.000110   0.000229   0.000247   0.000216  0.0000023  0.0000197    0.000333    0.000302
+1994   9   5  49600   0.004489   0.171039   0.6862480   0.0023497   0.000060   0.000182   0.000198   0.000248  0.0000020  0.0000203    0.000288    0.000224
+1994   9   6  49601   0.002080   0.172459   0.6838664   0.0024539   0.000063   0.000074   0.000187   0.000218  0.0000017  0.0000203    0.000245    0.000205
+1994   9   7  49602  -0.000644   0.173529   0.6813988   0.0025180   0.000057  -0.000003   0.000155   0.000137  0.0000014  0.0000203    0.000203    0.000186
+1994   9   8  49603  -0.003528   0.174302   0.6788805   0.0025323  -0.000043   0.000051   0.000098   0.000082  0.0000017  0.0000209    0.000251    0.000226
+1994   9   9  49604  -0.006290   0.174837   0.6763338   0.0025029  -0.000086   0.000134   0.000131   0.000104  0.0000023  0.0000215    0.000353    0.000383
+1994   9  10  49605  -0.008624   0.175725   0.6738427   0.0024158  -0.000061   0.000143   0.000180   0.000194  0.0000028  0.0000227    0.000376    0.000430
+1994   9  11  49606  -0.010828   0.176681   0.6714851   0.0022884  -0.000009   0.000071   0.000284   0.000292  0.0000031  0.0000233    0.000332    0.000360
+1994   9  12  49607  -0.013569   0.178393   0.6692517   0.0022039   0.000055  -0.000045   0.000332   0.000269  0.0000033  0.0000227    0.000288    0.000290
+1994   9  13  49608  -0.015768   0.179079   0.6670694   0.0021872   0.000102  -0.000175   0.000235   0.000175  0.0000036  0.0000227    0.000245    0.000220
+1994   9  14  49609  -0.018679   0.179824   0.6648541   0.0022276   0.000129  -0.000204   0.000172   0.000136  0.0000019  0.0000221    0.000218    0.000208
+1994   9  15  49610  -0.021929   0.180626   0.6625561   0.0023359   0.000085  -0.000276   0.000222   0.000185  0.0000014  0.0000215    0.000219    0.000205
+1994   9  16  49611  -0.025541   0.181689   0.6601533   0.0024630   0.000042  -0.000333   0.000260   0.000228  0.0000014  0.0000221    0.000230    0.000203
+1994   9  17  49612  -0.028189   0.182345   0.6576458   0.0025796   0.000097  -0.000312   0.000264   0.000257  0.0000014  0.0000227    0.000218    0.000191
+1994   9  18  49613  -0.030494   0.183092   0.6550606   0.0025961   0.000217  -0.000237   0.000279   0.000271  0.0000014  0.0000233    0.000189    0.000170
+1994   9  19  49614  -0.033671   0.183759   0.6524484   0.0025814   0.000307  -0.000167   0.000265   0.000220  0.0000014  0.0000215    0.000161    0.000149
+1994   9  20  49615  -0.035702   0.185011   0.6498657   0.0025797   0.000314  -0.000126   0.000225   0.000167  0.0000014  0.0000203    0.000132    0.000128
+1994   9  21  49616  -0.038592   0.186016   0.6473529   0.0024911   0.000086  -0.000196   0.000154   0.000124  0.0000014  0.0000209    0.000187    0.000183
+1994   9  22  49617  -0.040943   0.187693   0.6449276   0.0023906  -0.000051  -0.000189   0.000192   0.000166  0.0000016  0.0000209    0.000250    0.000250
+1994   9  23  49618  -0.044461   0.188501   0.6425962   0.0022602  -0.000100  -0.000112   0.000214   0.000209  0.0000019  0.0000203    0.000315    0.000318
+1994   9  24  49619  -0.046992   0.189157   0.6403694   0.0021133  -0.000114  -0.000001   0.000188   0.000203  0.0000052  0.0000209    0.000358    0.000321
+1994   9  25  49620  -0.049790   0.190654   0.6382608   0.0020153  -0.000076   0.000099   0.000186   0.000189  0.0000087  0.0000215    0.000398    0.000319
+1994   9  26  49621  -0.052187   0.191635   0.6362676   0.0019473  -0.000019   0.000125   0.000176   0.000258  0.0000123  0.0000221    0.000438    0.000317
+1994   9  27  49622  -0.055278   0.192975   0.6343537   0.0019468   0.000017   0.000034   0.000181   0.000235  0.0000158  0.0000227    0.000478    0.000314
+1994   9  28  49623  -0.057452   0.194202   0.6324534   0.0019705   0.000029  -0.000140   0.000155   0.000106  0.0000043  0.0000227    0.000245    0.000207
+1994   9  29  49624  -0.060686   0.195814   0.6304933   0.0020279  -0.000068  -0.000499   0.000145   0.000120  0.0000014  0.0000233    0.000328    0.000212
+1994   9  30  49625  -0.063183   0.197319   0.6284185   0.0021433  -0.000183  -0.000749   0.000194   0.000166  0.0000016  0.0000233    0.000384    0.000243
+1994  10   1  49626  -0.065795   0.198990   0.6261952   0.0022962  -0.000264  -0.000799   0.000258   0.000210  0.0000018  0.0000240    0.000373    0.000266
+1994  10   2  49627  -0.067382   0.200742   0.6237997   0.0024830  -0.000285  -0.000675   0.000350   0.000283  0.0000019  0.0000246    0.000361    0.000290
+1994  10   3  49628  -0.069478   0.202741   0.6212177   0.0026546  -0.000229  -0.000434   0.000308   0.000250  0.0000021  0.0000246    0.000350    0.000314
+1994  10   4  49629  -0.071038   0.204406   0.6184634   0.0028225  -0.000114  -0.000179   0.000172   0.000149  0.0000022  0.0000258    0.000338    0.000337
+1994  10   5  49630  -0.073497   0.206585   0.6155991   0.0029002   0.000044   0.000022   0.000124   0.000109  0.0000012  0.0000270    0.000207    0.000220
+1994  10   6  49631  -0.076581   0.208073   0.6127300   0.0028243   0.000176  -0.000013   0.000115   0.000100  0.0000020  0.0000252    0.000344    0.000378
+1994  10   7  49632  -0.080047   0.209251   0.6099858   0.0026724   0.000156  -0.000193   0.000132   0.000115  0.0000022  0.0000227    0.000401    0.000439
+1994  10   8  49633  -0.083580   0.210493   0.6074281   0.0025019   0.000096  -0.000353   0.000228   0.000182  0.0000020  0.0000221    0.000363    0.000398
+1994  10   9  49634  -0.086177   0.211941   0.6050313   0.0023544   0.000066  -0.000425   0.000284   0.000321  0.0000018  0.0000215    0.000318    0.000351
+1994  10  10  49635  -0.089581   0.213441   0.6027247   0.0022735   0.000060  -0.000413   0.000216   0.000303  0.0000016  0.0000209    0.000273    0.000304
+1994  10  11  49636  -0.091747   0.214794   0.6004307   0.0022885   0.000083  -0.000335   0.000171   0.000176  0.0000014  0.0000209    0.000228    0.000258
+1994  10  12  49637  -0.093489   0.216025   0.5980953   0.0023486   0.000119  -0.000235   0.000140   0.000125  0.0000012  0.0000209    0.000183    0.000211
+1994  10  13  49638  -0.094753   0.217624   0.5956959   0.0024145   0.000149  -0.000185   0.000144   0.000138  0.0000015  0.0000209    0.000171    0.000177
+1994  10  14  49639  -0.096211   0.219734   0.5932329   0.0024961   0.000154  -0.000166   0.000132   0.000139  0.0000020  0.0000209    0.000170    0.000148
+1994  10  15  49640  -0.096892   0.222111   0.5907204   0.0025435   0.000115  -0.000120   0.000135   0.000173  0.0000021  0.0000203    0.000169    0.000153
+1994  10  16  49641  -0.098417   0.224312   0.5881844   0.0025209   0.000074  -0.000079   0.000177   0.000217  0.0000022  0.0000203    0.000169    0.000164
+1994  10  17  49642  -0.099423   0.226746   0.5856730   0.0024385   0.000063  -0.000062   0.000165   0.000175  0.0000022  0.0000203    0.000169    0.000175
+1994  10  18  49643  -0.101814   0.229020   0.5832529   0.0023175   0.000078  -0.000079   0.000132   0.000140  0.0000023  0.0000197    0.000168    0.000187
+1994  10  19  49644  -0.104126   0.231326   0.5809847   0.0021820   0.000227  -0.000157   0.000122   0.000122  0.0000014  0.0000197    0.000183    0.000218
+1994  10  20  49645  -0.107182   0.233293   0.5788870   0.0020902   0.000194  -0.000221   0.000180   0.000146  0.0000035  0.0000184    0.000367    0.000339
+1994  10  21  49646  -0.110137   0.235431   0.5768219   0.0020168  -0.000026  -0.000262   0.000197   0.000163  0.0000034  0.0000178    0.000261    0.000231
+1994  10  22  49647  -0.113028   0.237345   0.5748011   0.0019549  -0.000114  -0.000219   0.000246   0.000218  0.0000029  0.0000190    0.000227    0.000207
+1994  10  23  49648  -0.114801   0.239509   0.5728632   0.0019425  -0.000118  -0.000148   0.000287   0.000240  0.0000024  0.0000197    0.000205    0.000192
+1994  10  24  49649  -0.117213   0.242108   0.5709657   0.0019609  -0.000030  -0.000091   0.000208   0.000168  0.0000018  0.0000190    0.000182    0.000177
+1994  10  25  49650  -0.119246   0.244292   0.5690194   0.0020108   0.000114  -0.000078   0.000117   0.000102  0.0000013  0.0000184    0.000160    0.000162
+1994  10  26  49651  -0.121443   0.246035   0.5669529   0.0021151   0.000295  -0.000159   0.000079   0.000067  0.0000012  0.0000184    0.000185    0.000210
+1994  10  27  49652  -0.123568   0.248510   0.5647670   0.0022475   0.000352  -0.000222   0.000088   0.000071  0.0000013  0.0000184    0.000209    0.000172
+1994  10  28  49653  -0.126064   0.250079   0.5624598   0.0023646   0.000235  -0.000211   0.000078   0.000066  0.0000014  0.0000190    0.000212    0.000211
+1994  10  29  49654  -0.128510   0.252326   0.5599929   0.0025401   0.000146  -0.000128   0.000118   0.000083  0.0000015  0.0000203    0.000272    0.000299
+1994  10  30  49655  -0.130573   0.254302   0.5573364   0.0027259   0.000141  -0.000018   0.000236   0.000182  0.0000017  0.0000215    0.000377    0.000379
+1994  10  31  49656  -0.131714   0.256460   0.5545046   0.0028681   0.000157   0.000057   0.000269   0.000235  0.0000018  0.0000215    0.000481    0.000460
+1994  11   1  49657  -0.133053   0.258712   0.5515601   0.0029741   0.000162   0.000057   0.000214   0.000205  0.0000019  0.0000209    0.000586    0.000540
+1994  11   2  49658  -0.134448   0.261066   0.5485935   0.0029533   0.000071  -0.000059   0.000164   0.000151  0.0000013  0.0000209    0.000259    0.000271
+1994  11   3  49659  -0.136220   0.262805   0.5456929   0.0028536  -0.000028  -0.000239   0.000158   0.000142  0.0000031  0.0000209    0.000524    0.000453
+1994  11   4  49660  -0.137571   0.264994   0.5429309   0.0026873  -0.000126  -0.000263   0.000194   0.000194  0.0000037  0.0000209    0.000580    0.000468
+1994  11   5  49661  -0.138950   0.266922   0.5403406   0.0025019  -0.000180  -0.000156   0.000227   0.000238  0.0000031  0.0000209    0.000425    0.000316
+1994  11   6  49662  -0.140571   0.270025   0.5379056   0.0023865  -0.000163  -0.000028   0.000227   0.000308  0.0000026  0.0000215    0.000269    0.000163
+1994  11   7  49663  -0.141574   0.272562   0.5355776   0.0023530  -0.000036  -0.000031   0.000209   0.000263  0.0000021  0.0000215    0.000237    0.000208
+1994  11   8  49664  -0.142643   0.274229   0.5332950   0.0023279   0.000112  -0.000121   0.000178   0.000147  0.0000016  0.0000197    0.000267    0.000350
+1994  11   9  49665  -0.144633   0.276727   0.5309939   0.0023124   0.000069  -0.000105   0.000141   0.000125  0.0000021  0.0000184    0.000250    0.000366
+1994  11  10  49666  -0.145146   0.278955   0.5286184   0.0023498   0.000004  -0.000101   0.000172   0.000137  0.0000026  0.0000178    0.000330    0.000454
+1994  11  11  49667  -0.145400   0.281992   0.5261514   0.0024492  -0.000071  -0.000101   0.000213   0.000148  0.0000030  0.0000178    0.000444    0.000570
+1994  11  12  49668  -0.145875   0.284694   0.5236224   0.0025236  -0.000129  -0.000101   0.000338   0.000210  0.0000029  0.0000178    0.000456    0.000572
+1994  11  13  49669  -0.146039   0.287669   0.5210858   0.0025382  -0.000144  -0.000106   0.000438   0.000337  0.0000026  0.0000178    0.000395    0.000491
+1994  11  14  49670  -0.146746   0.290587   0.5185924   0.0024916  -0.000114  -0.000116   0.000308   0.000314  0.0000022  0.0000178    0.000334    0.000410
+1994  11  15  49671  -0.147667   0.293214   0.5161712   0.0024252  -0.000048  -0.000129   0.000186   0.000187  0.0000019  0.0000178    0.000272    0.000329
+1994  11  16  49672  -0.147894   0.295309   0.5138302   0.0023347   0.000032  -0.000144   0.000162   0.000133  0.0000015  0.0000178    0.000211    0.000247
+1994  11  17  49673  -0.148960   0.298107   0.5115689   0.0022356   0.000104  -0.000160   0.000201   0.000158  0.0000016  0.0000178    0.000193    0.000228
+1994  11  18  49674  -0.149329   0.300539   0.5093885   0.0021596   0.000154  -0.000180   0.000270   0.000254  0.0000020  0.0000190    0.000189    0.000230
+1994  11  19  49675  -0.150449   0.303962   0.5072881   0.0020819   0.000177  -0.000200   0.000281   0.000293  0.0000023  0.0000197    0.000185    0.000231
+1994  11  20  49676  -0.151366   0.306257   0.5052525   0.0020056   0.000173  -0.000217   0.000293   0.000320  0.0000026  0.0000190    0.000181    0.000233
+1994  11  21  49677  -0.152796   0.308570   0.5032427   0.0020236   0.000146  -0.000227   0.000225   0.000255  0.0000029  0.0000190    0.000177    0.000235
+1994  11  22  49678  -0.153607   0.312037   0.5011990   0.0020854   0.000100  -0.000231   0.000134   0.000125  0.0000032  0.0000184    0.000173    0.000236
+1994  11  23  49679  -0.154189   0.314632   0.4990565   0.0022073   0.000048  -0.000218   0.000128   0.000097  0.0000022  0.0000178    0.000203    0.000260
+1994  11  24  49680  -0.153584   0.317412   0.4967652   0.0023743  -0.000012  -0.000220   0.000166   0.000142  0.0000019  0.0000178    0.000216    0.000260
+1994  11  25  49681  -0.153337   0.320036   0.4943080   0.0025397  -0.000066  -0.000234   0.000274   0.000265  0.0000018  0.0000178    0.000223    0.000251
+1994  11  26  49682  -0.152399   0.323264   0.4917024   0.0026619  -0.000104  -0.000254   0.000349   0.000343  0.0000018  0.0000178    0.000229    0.000242
+1994  11  27  49683  -0.151772   0.325557   0.4889912   0.0027382  -0.000118  -0.000267   0.000461   0.000572  0.0000017  0.0000178    0.000235    0.000232
+1994  11  28  49684  -0.151635   0.328975   0.4862293   0.0027420  -0.000110  -0.000267   0.000393   0.000521  0.0000017  0.0000178    0.000242    0.000223
+1994  11  29  49685  -0.151341   0.331246   0.4834731   0.0027262  -0.000089  -0.000251   0.000155   0.000161  0.0000016  0.0000184    0.000249    0.000214
+1994  11  30  49686  -0.151664   0.334292   0.4807700   0.0026558  -0.000049  -0.000219   0.000097   0.000080  0.0000014  0.0000190    0.000197    0.000205
+1994  12   1  49687  -0.151565   0.336658   0.4781485   0.0025777  -0.000051  -0.000190   0.000111   0.000098  0.0000015  0.0000184    0.000153    0.000168
+1994  12   2  49688  -0.152383   0.339505   0.4756250   0.0024608  -0.000084  -0.000189   0.000114   0.000109  0.0000016  0.0000190    0.000115    0.000122
+1994  12   3  49689  -0.153228   0.341593   0.4732023   0.0023609  -0.000122  -0.000220   0.000095   0.000097  0.0000018  0.0000197    0.000076    0.000075
+1994  12   4  49690  -0.153096   0.344034   0.4708631   0.0023158  -0.000138  -0.000284   0.000185   0.000192  0.0000020  0.0000190    0.000098    0.000093
+1994  12   5  49691  -0.152974   0.346337   0.4685667   0.0023680  -0.000120  -0.000345   0.000244   0.000261  0.0000022  0.0000184    0.000176    0.000173
+1994  12   6  49692  -0.152469   0.347673   0.4662505   0.0024060  -0.000077  -0.000348   0.000176   0.000186  0.0000024  0.0000178    0.000255    0.000252
+1994  12   7  49693  -0.152065   0.350285   0.4638481   0.0024495   0.000007  -0.000266   0.000137   0.000126  0.0000020  0.0000172    0.000238    0.000276
+1994  12   8  49694  -0.151747   0.352516   0.4613243   0.0024585   0.000018  -0.000073   0.000128   0.000112  0.0000050  0.0000172    0.000428    0.000537
+1994  12   9  49695  -0.151883   0.355128   0.4587551   0.0024629   0.000009   0.000095   0.000187   0.000149  0.0000056  0.0000172    0.000473    0.000592
+1994  12  10  49696  -0.151280   0.357980   0.4562349   0.0024720   0.000008   0.000181   0.000288   0.000202  0.0000044  0.0000172    0.000408    0.000503
+1994  12  11  49697  -0.151744   0.361134   0.4537912   0.0024598   0.000022   0.000177   0.000368   0.000338  0.0000033  0.0000172    0.000343    0.000415
+1994  12  12  49698  -0.153290   0.364050   0.4513951   0.0024453   0.000058   0.000090   0.000355   0.000427  0.0000021  0.0000178    0.000278    0.000326
+1994  12  13  49699  -0.153577   0.366891   0.4490125   0.0024022   0.000099  -0.000041   0.000234   0.000284  0.0000009  0.0000178    0.000212    0.000237
+1994  12  14  49700  -0.154308   0.369105   0.4466531   0.0023171   0.000183  -0.000192   0.000141   0.000141  0.0000008  0.0000184    0.000174    0.000187
+1994  12  15  49701  -0.153822   0.371571   0.4443711   0.0022238   0.000133  -0.000253   0.000192   0.000204  0.0000015  0.0000190    0.000167    0.000194
+1994  12  16  49702  -0.154843   0.374531   0.4421720   0.0021857   0.000007  -0.000248   0.000231   0.000231  0.0000024  0.0000197    0.000169    0.000218
+1994  12  17  49703  -0.154470   0.376679   0.4399926   0.0022110  -0.000076  -0.000257   0.000295   0.000365  0.0000021  0.0000209    0.000168    0.000207
+1994  12  18  49704  -0.155546   0.379910   0.4377538   0.0023010  -0.000114  -0.000272   0.000280   0.000408  0.0000017  0.0000209    0.000166    0.000192
+1994  12  19  49705  -0.155650   0.382488   0.4353969   0.0024273  -0.000087  -0.000296   0.000160   0.000202  0.0000013  0.0000197    0.000164    0.000178
+1994  12  20  49706  -0.157083   0.385578   0.4328968   0.0025575   0.000002  -0.000322   0.000128   0.000126  0.0000010  0.0000184    0.000162    0.000163
+1994  12  21  49707  -0.157744   0.387403   0.4302545   0.0027000   0.000129  -0.000338   0.000111   0.000099  0.0000013  0.0000178    0.000177    0.000210
+1994  12  22  49708  -0.158344   0.390045   0.4274804   0.0028149   0.000249  -0.000311   0.000136   0.000114  0.0000014  0.0000172    0.000185    0.000224
+1994  12  23  49709  -0.158689   0.391987   0.4245894   0.0029132   0.000327  -0.000249   0.000186   0.000173  0.0000013  0.0000178    0.000189    0.000222
+1994  12  24  49710  -0.159303   0.394784   0.4216031   0.0029924   0.000344  -0.000176   0.000397   0.000518  0.0000013  0.0000197    0.000193    0.000221
+1994  12  25  49711  -0.159334   0.396671   0.4185535   0.0030451   0.000295  -0.000121   0.000710   0.001227  0.0000013  0.0000203    0.000197    0.000220
+1994  12  26  49712  -0.158655   0.399057   0.4154852   0.0030577   0.000194  -0.000110   0.000587   0.001073  0.0000012  0.0000190    0.000201    0.000218
+1994  12  27  49713  -0.159118   0.402668   0.4124517   0.0030114   0.000074  -0.000153   0.000290   0.000384  0.0000012  0.0000178    0.000205    0.000217
+1994  12  28  49714  -0.158770   0.405956   0.4095046   0.0029092  -0.000028  -0.000235   0.000161   0.000166  0.0000011  0.0000172    0.000210    0.000216
+1994  12  29  49715  -0.158014   0.409337   0.4066759   0.0027847  -0.000130  -0.000395   0.000132   0.000150  0.0000012  0.0000172    0.000222    0.000202
+1994  12  30  49716  -0.157130   0.412166   0.4039628   0.0026793  -0.000069  -0.000415   0.000121   0.000139  0.0000012  0.0000184    0.000198    0.000182
+1994  12  31  49717  -0.155656   0.415186   0.4013219   0.0026395   0.000027  -0.000384   0.000121   0.000121  0.0000012  0.0000190    0.000179    0.000172
+1995   1   1  49718  -0.153165   0.417896   0.3986810   0.0026491   0.000070  -0.000366   0.000263   0.000320  0.0000012  0.0000190    0.000177    0.000171
+1995   1   2  49719  -0.150187   0.420906   0.3959660   0.0027738   0.000075  -0.000336   0.000307   0.000384  0.0000013  0.0000313    0.000175    0.000170
+1995   1   3  49720  -0.148866   0.423992   0.3931318   0.0029165   0.000038  -0.000301   0.000249   0.000326  0.0000013  0.0000418    0.000173    0.000169
+1995   1   4  49721  -0.146696   0.426796   0.3901814   0.0029952  -0.000022  -0.000262   0.000168   0.000223  0.0000013  0.0000399    0.000171    0.000168
+1995   1   5  49722  -0.144834   0.428891   0.3871639   0.0030071  -0.000070  -0.000209   0.000170   0.000180  0.0000016  0.0000375    0.000177    0.000185
+1995   1   6  49723  -0.143388   0.431037   0.3841550   0.0029650  -0.000096  -0.000154   0.000240   0.000251  0.0000020  0.0000344    0.000187    0.000207
+1995   1   7  49724  -0.141525   0.433518   0.3812301   0.0028813  -0.000098  -0.000110   0.000296   0.000355  0.0000024  0.0000319    0.000197    0.000229
+1995   1   8  49725  -0.140591   0.435641   0.3784450   0.0027295  -0.000081  -0.000089   0.000329   0.000419  0.0000028  0.0000307    0.000206    0.000251
+1995   1   9  49726  -0.139065   0.437313   0.3758276   0.0025465  -0.000056  -0.000096   0.000263   0.000281  0.0000031  0.0000295    0.000216    0.000273
+1995   1  10  49727  -0.137169   0.439252   0.3733802   0.0023532  -0.000029  -0.000116   0.000202   0.000167  0.0000035  0.0000264    0.000226    0.000295
+1995   1  11  49728  -0.135704   0.441756   0.3710836   0.0022410  -0.000018  -0.000160   0.000158   0.000130  0.0000017  0.0000246    0.000181    0.000194
+1995   1  12  49729  -0.133580   0.444572   0.3689036   0.0021565   0.000022  -0.000144   0.000146   0.000148  0.0000013  0.0000264    0.000174    0.000170
+1995   1  13  49730  -0.132170   0.446935   0.3667972   0.0020810   0.000083  -0.000075   0.000182   0.000189  0.0000013  0.0000289    0.000181    0.000174
+1995   1  14  49731  -0.131102   0.448996   0.3647200   0.0020670   0.000151   0.000017   0.000189   0.000222  0.0000014  0.0000295    0.000189    0.000178
+1995   1  15  49732  -0.129870   0.451326   0.3626302   0.0021181   0.000206   0.000091   0.000216   0.000250  0.0000014  0.0000295    0.000195    0.000182
+1995   1  16  49733  -0.128385   0.454425   0.3604904   0.0021759   0.000228   0.000105   0.000195   0.000214  0.0000014  0.0000289    0.000202    0.000185
+1995   1  17  49734  -0.128479   0.456771   0.3582658   0.0022671   0.000200   0.000031   0.000132   0.000166  0.0000015  0.0000301    0.000210    0.000189
+1995   1  18  49735  -0.127752   0.459000   0.3559257   0.0023932   0.000124  -0.000124   0.000110   0.000130  0.0000015  0.0000319    0.000217    0.000193
+1995   1  19  49736  -0.127631   0.461054   0.3534486   0.0025356  -0.000003  -0.000357   0.000123   0.000130  0.0000015  0.0000319    0.000323    0.000286
+1995   1  20  49737  -0.125616   0.462831   0.3508318   0.0026832  -0.000106  -0.000533   0.000166   0.000174  0.0000014  0.0000307    0.000348    0.000313
+1995   1  21  49738  -0.125081   0.464109   0.3480953   0.0028028  -0.000158  -0.000598   0.000251   0.000225  0.0000014  0.0000307    0.000307    0.000285
+1995   1  22  49739  -0.123471   0.465737   0.3452796   0.0028549  -0.000161  -0.000553   0.000372   0.000290  0.0000014  0.0000319    0.000266    0.000257
+1995   1  23  49740  -0.122012   0.467491   0.3424342   0.0028626  -0.000127  -0.000427   0.000331   0.000260  0.0000013  0.0000326    0.000224    0.000228
+1995   1  24  49741  -0.120989   0.470244   0.3396056   0.0028117  -0.000080  -0.000277   0.000152   0.000138  0.0000013  0.0000326    0.000183    0.000200
+1995   1  25  49742  -0.119393   0.472454   0.3368260   0.0027289  -0.000046  -0.000167   0.000087   0.000086  0.0000011  0.0000313    0.000162    0.000154
+1995   1  26  49743  -0.117826   0.475312   0.3341069   0.0026700  -0.000050  -0.000140   0.000168   0.000137  0.0000015  0.0000301    0.000193    0.000175
+1995   1  27  49744  -0.116743   0.477814   0.3314401   0.0026447  -0.000083  -0.000204   0.000199   0.000165  0.0000021  0.0000289    0.000239    0.000219
+1995   1  28  49745  -0.115778   0.479963   0.3287937   0.0026491  -0.000120  -0.000352   0.000221   0.000214  0.0000021  0.0000289    0.000312    0.000297
+1995   1  29  49746  -0.115445   0.481511   0.3261154   0.0027146  -0.000150  -0.000483   0.000358   0.000399  0.0000021  0.0000295    0.000387    0.000377
+1995   1  30  49747  -0.114643   0.483158   0.3233616   0.0027935  -0.000161  -0.000525   0.000361   0.000440  0.0000021  0.0000301    0.000462    0.000458
+1995   1  31  49748  -0.114601   0.484649   0.3205261   0.0028720  -0.000155  -0.000457   0.000256   0.000317  0.0000021  0.0000301    0.000537    0.000539
+1995   2   1  49749  -0.115704   0.486310   0.3176454   0.0029136  -0.000104  -0.000188   0.000187   0.000209  0.0000017  0.0000301    0.000288    0.000262
+1995   2   2  49750  -0.115783   0.488026   0.3147758   0.0029004  -0.000111  -0.000029   0.000151   0.000162  0.0000070  0.0000301    0.000364    0.000490
+1995   2   3  49751  -0.115866   0.489365   0.3119120   0.0028392  -0.000127  -0.000102   0.000106   0.000116  0.0000042  0.0000295    0.000271    0.000330
+1995   2   4  49752  -0.115325   0.490817   0.3090713   0.0027606  -0.000107  -0.000220   0.000209   0.000205  0.0000009  0.0000295    0.000172    0.000146
+1995   2   5  49753  -0.113992   0.491902   0.3063062   0.0026832  -0.000059  -0.000288   0.000385   0.000380  0.0000010  0.0000289    0.000171    0.000149
+1995   2   6  49754  -0.112074   0.493351   0.3036581   0.0025908  -0.000009  -0.000316   0.000307   0.000315  0.0000010  0.0000289    0.000169    0.000151
+1995   2   7  49755  -0.109368   0.494972   0.3011464   0.0024779   0.000013  -0.000288   0.000179   0.000196  0.0000010  0.0000295    0.000167    0.000153
+1995   2   8  49756  -0.106329   0.497249   0.2987642   0.0023414  -0.000020  -0.000220   0.000131   0.000136  0.0000011  0.0000289    0.000166    0.000156
+1995   2   9  49757  -0.102988   0.499695   0.2964859   0.0022194  -0.000124  -0.000154   0.000139   0.000136  0.0000011  0.0000307    0.000193    0.000187
+1995   2  10  49758  -0.099444   0.502502   0.2942785   0.0021567  -0.000271  -0.000106   0.000197   0.000186  0.0000012  0.0000350    0.000228    0.000227
+1995   2  11  49759  -0.097793   0.504319   0.2921071   0.0021702  -0.000412  -0.000080   0.000256   0.000203  0.0000013  0.0000375    0.000264    0.000267
+1995   2  12  49760  -0.096310   0.506734   0.2899339   0.0022024  -0.000497  -0.000076   0.000239   0.000226  0.0000014  0.0000381    0.000299    0.000307
+1995   2  13  49761  -0.095181   0.508472   0.2877135   0.0022721  -0.000491  -0.000089   0.000193   0.000212  0.0000014  0.0000375    0.000335    0.000348
+1995   2  14  49762  -0.094389   0.509482   0.2853922   0.0024033  -0.000389  -0.000114   0.000172   0.000139  0.0000015  0.0000375    0.000370    0.000388
+1995   2  15  49763  -0.092989   0.510777   0.2829189   0.0025722  -0.000141  -0.000085   0.000134   0.000105  0.0000016  0.0000387    0.000234    0.000212
+1995   2  16  49764  -0.091029   0.511784   0.2802655   0.0027141  -0.000004  -0.000185   0.000136   0.000110  0.0000027  0.0000418    0.000206    0.000232
+1995   2  17  49765  -0.089076   0.513548   0.2774580   0.0028047   0.000130  -0.000241   0.000165   0.000145  0.0000030  0.0000455    0.000212    0.000254
+1995   2  18  49766  -0.087209   0.514588   0.2745712   0.0028484   0.000248  -0.000222   0.000214   0.000180  0.0000027  0.0000461    0.000214    0.000241
+1995   2  19  49767  -0.085362   0.516724   0.2717003   0.0028230   0.000292  -0.000166   0.000255   0.000202  0.0000024  0.0000436    0.000217    0.000228
+1995   2  20  49768  -0.083614   0.517908   0.2689270   0.0027322   0.000237  -0.000098   0.000232   0.000222  0.0000021  0.0000418    0.000220    0.000215
+1995   2  21  49769  -0.082237   0.519291   0.2662916   0.0026410   0.000078  -0.000056   0.000182   0.000206  0.0000018  0.0000418    0.000222    0.000202
+1995   2  22  49770  -0.080422   0.520076   0.2637818   0.0025256  -0.000158  -0.000061   0.000148   0.000153  0.0000015  0.0000418    0.000225    0.000189
+1995   2  23  49771  -0.079374   0.521516   0.2613437   0.0024452  -0.000449  -0.000134   0.000214   0.000170  0.0000016  0.0000430    0.000294    0.000269
+1995   2  24  49772  -0.076752   0.522854   0.2589051   0.0024421  -0.000681  -0.000214   0.000261   0.000206  0.0000018  0.0000442    0.000387    0.000382
+1995   2  25  49773  -0.074230   0.524671   0.2564026   0.0025094  -0.000718  -0.000204   0.000226   0.000196  0.0000022  0.0000442    0.000382    0.000384
+1995   2  26  49774  -0.070639   0.526885   0.2537986   0.0026383  -0.000611  -0.000131   0.000230   0.000233  0.0000027  0.0000430    0.000368    0.000375
+1995   2  27  49775  -0.067107   0.528919   0.2510822   0.0027625  -0.000421  -0.000026   0.000211   0.000253  0.0000032  0.0000424    0.000354    0.000366
+1995   2  28  49776  -0.063475   0.530287   0.2482599   0.0028460  -0.000233   0.000063   0.000164   0.000235  0.0000036  0.0000467    0.000340    0.000358
+1995   3   1  49777  -0.060013   0.532309   0.2453451   0.0029496  -0.000109   0.000096   0.000142   0.000203  0.0000041  0.0000522    0.000326    0.000349
+1995   3   2  49778  -0.056016   0.533290   0.2423527   0.0030619  -0.000124   0.000032   0.000155   0.000194  0.0000037  0.0000534    0.000331    0.000316
+1995   3   3  49779  -0.053195   0.535243   0.2393031   0.0030584  -0.000192  -0.000084   0.000180   0.000224  0.0000031  0.0000473    0.000342    0.000275
+1995   3   4  49780  -0.050053   0.536286   0.2362346   0.0030253  -0.000149  -0.000177   0.000210   0.000269  0.0000025  0.0000412    0.000297    0.000244
+1995   3   5  49781  -0.046548   0.537542   0.2332085   0.0029718  -0.000067  -0.000220   0.000213   0.000313  0.0000019  0.0000399    0.000249    0.000213
+1995   3   6  49782  -0.042847   0.538526   0.2302876   0.0028711   0.000019  -0.000195   0.000175   0.000259  0.0000013  0.0000387    0.000201    0.000182
+1995   3   7  49783  -0.040195   0.540020   0.2275038   0.0027377   0.000066  -0.000112   0.000129   0.000151  0.0000007  0.0000375    0.000154    0.000151
+1995   3   8  49784  -0.036995   0.541372   0.2248373   0.0026279  -0.000025   0.000021   0.000103   0.000103  0.0000009  0.0000375    0.000166    0.000156
+1995   3   9  49785  -0.034618   0.542500   0.2222206   0.0026257  -0.000096   0.000094   0.000154   0.000150  0.0000011  0.0000387    0.000178    0.000168
+1995   3  10  49786  -0.032031   0.543547   0.2195815   0.0026667  -0.000137   0.000093   0.000181   0.000199  0.0000012  0.0000393    0.000188    0.000182
+1995   3  11  49787  -0.029802   0.544781   0.2168750   0.0027429  -0.000143   0.000036   0.000206   0.000228  0.0000014  0.0000399    0.000199    0.000195
+1995   3  12  49788  -0.027833   0.545026   0.2140876   0.0028261  -0.000114  -0.000046   0.000219   0.000225  0.0000015  0.0000412    0.000208    0.000209
+1995   3  13  49789  -0.026050   0.545604   0.2112232   0.0029165  -0.000063  -0.000113   0.000166   0.000181  0.0000017  0.0000424    0.000219    0.000223
+1995   3  14  49790  -0.024497   0.545642   0.2082811   0.0030161  -0.000006  -0.000130   0.000130   0.000126  0.0000018  0.0000418    0.000229    0.000236
+1995   3  15  49791  -0.022614   0.545742   0.2052455   0.0031065   0.000020  -0.000058   0.000108   0.000088  0.0000018  0.0000399    0.000255    0.000225
+1995   3  16  49792  -0.019653   0.546335   0.2020949   0.0031984   0.000068   0.000025   0.000128   0.000113  0.0000017  0.0000387    0.000255    0.000215
+1995   3  17  49793  -0.016935   0.547187   0.1988353   0.0032751   0.000125   0.000099   0.000158   0.000146  0.0000016  0.0000381    0.000243    0.000208
+1995   3  18  49794  -0.013971   0.547937   0.1955193   0.0033025   0.000174   0.000154   0.000177   0.000153  0.0000015  0.0000375    0.000232    0.000200
+1995   3  19  49795  -0.011408   0.548877   0.1922391   0.0032190   0.000197   0.000178   0.000178   0.000138  0.0000014  0.0000375    0.000221    0.000192
+1995   3  20  49796  -0.008990   0.549833   0.1890970   0.0030300   0.000179   0.000173   0.000169   0.000147  0.0000013  0.0000381    0.000210    0.000185
+1995   3  21  49797  -0.007694   0.550792   0.1861657   0.0028086   0.000115   0.000146   0.000144   0.000141  0.0000012  0.0000381    0.000199    0.000177
+1995   3  22  49798  -0.005279   0.551379   0.1834581   0.0026165   0.000021   0.000100   0.000102   0.000102  0.0000011  0.0000375    0.000187    0.000169
+1995   3  23  49799  -0.003539   0.552395   0.1809200   0.0025017  -0.000094   0.000053   0.000104   0.000113  0.0000014  0.0000362    0.000173    0.000169
+1995   3  24  49800  -0.000964   0.552558   0.1784509   0.0025068  -0.000170  -0.000008   0.000112   0.000107  0.0000019  0.0000362    0.000159    0.000172
+1995   3  25  49801   0.002154   0.552953   0.1759459   0.0025648  -0.000147  -0.000101   0.000187   0.000138  0.0000021  0.0000375    0.000177    0.000192
+1995   3  26  49802   0.006892   0.553181   0.1733381   0.0026680  -0.000055  -0.000189   0.000225   0.000182  0.0000022  0.0000393    0.000220    0.000224
+1995   3  27  49803   0.011800   0.554133   0.1706136   0.0027628   0.000021  -0.000217   0.000151   0.000145  0.0000023  0.0000399    0.000263    0.000257
+1995   3  28  49804   0.017674   0.555124   0.1677968   0.0028555   0.000029  -0.000169   0.000125   0.000118  0.0000024  0.0000387    0.000305    0.000289
+1995   3  29  49805   0.021521   0.557026   0.1649257   0.0029013  -0.000130   0.000031   0.000108   0.000099  0.0000020  0.0000393    0.000260    0.000236
+1995   3  30  49806   0.025632   0.557682   0.1620323   0.0028699  -0.000275   0.000129   0.000101   0.000103  0.0000020  0.0000430    0.000251    0.000242
+1995   3  31  49807   0.028468   0.558486   0.1591498   0.0028087  -0.000371   0.000124   0.000109   0.000113  0.0000021  0.0000455    0.000257    0.000270
+1995   4   1  49808   0.032070   0.558258   0.1563157   0.0027606  -0.000394   0.000048   0.000164   0.000166  0.0000023  0.0000424    0.000263    0.000297
+1995   4   2  49809   0.034454   0.558299   0.1535663   0.0026897  -0.000338  -0.000053   0.000220   0.000209  0.0000024  0.0000381    0.000269    0.000325
+1995   4   3  49810   0.038211   0.557847   0.1509256   0.0026045  -0.000232  -0.000126   0.000185   0.000161  0.0000026  0.0000362    0.000274    0.000353
+1995   4   4  49811   0.041596   0.558442   0.1483922   0.0025132  -0.000130  -0.000145   0.000137   0.000126  0.0000027  0.0000350    0.000280    0.000380
+1995   4   5  49812   0.044408   0.557803   0.1459348   0.0024432  -0.000064  -0.000028   0.000114   0.000103  0.0000014  0.0000344    0.000202    0.000208
+1995   4   6  49813   0.047662   0.557714   0.1435010   0.0024216  -0.000122  -0.000025   0.000118   0.000114  0.0000012  0.0000350    0.000191    0.000174
+1995   4   7  49814   0.051056   0.557312   0.1410449   0.0024743  -0.000269  -0.000116   0.000158   0.000145  0.0000013  0.0000356    0.000204    0.000190
+1995   4   8  49815   0.054035   0.558146   0.1385395   0.0025488  -0.000438  -0.000254   0.000208   0.000211  0.0000015  0.0000362    0.000217    0.000206
+1995   4   9  49816   0.057009   0.557468   0.1359673   0.0026175  -0.000551  -0.000374   0.000338   0.000532  0.0000016  0.0000362    0.000230    0.000221
+1995   4  10  49817   0.060466   0.557710   0.1333042   0.0027226  -0.000551  -0.000409   0.000412   0.000660  0.0000018  0.0000356    0.000243    0.000237
+1995   4  11  49818   0.062691   0.558202   0.1305140   0.0028734  -0.000426  -0.000331   0.000295   0.000357  0.0000019  0.0000356    0.000256    0.000252
+1995   4  12  49819   0.065896   0.558012   0.1275638   0.0030226  -0.000163  -0.000085   0.000141   0.000130  0.0000018  0.0000362    0.000221    0.000227
+1995   4  13  49820   0.069020   0.557615   0.1244545   0.0031346   0.000075   0.000158   0.000132   0.000136  0.0000023  0.0000369    0.000141    0.000177
+1995   4  14  49821   0.071592   0.557066   0.1213008   0.0031648   0.000092   0.000158   0.000195   0.000187  0.0000020  0.0000362    0.000356    0.000407
+1995   4  15  49822   0.075405   0.556492   0.1181605   0.0031344   0.000015   0.000126   0.000263   0.000205  0.0000018  0.0000356    0.000415    0.000467
+1995   4  16  49823   0.078790   0.556446   0.1150665   0.0030429  -0.000109   0.000081   0.000484   0.000603  0.0000016  0.0000362    0.000362    0.000405
+1995   4  17  49824   0.082058   0.555903   0.1120641   0.0029252  -0.000226   0.000025   0.000525   0.000758  0.0000014  0.0000393    0.000309    0.000343
+1995   4  18  49825   0.085643   0.555899   0.1091908   0.0028102  -0.000281  -0.000018   0.000329   0.000370  0.0000012  0.0000418    0.000257    0.000281
+1995   4  19  49826   0.088587   0.555822   0.1064492   0.0026946  -0.000264  -0.000041   0.000166   0.000139  0.0000010  0.0000412    0.000204    0.000219
+1995   4  20  49827   0.091811   0.555975   0.1037914   0.0026577  -0.000116  -0.000062   0.000093   0.000090  0.0000010  0.0000387    0.000263    0.000294
+1995   4  21  49828   0.094595   0.555633   0.1011308   0.0026684  -0.000093  -0.000055   0.000083   0.000078  0.0000013  0.0000350    0.000238    0.000260
+1995   4  22  49829   0.097914   0.554988   0.0984219   0.0027197  -0.000151  -0.000023   0.000121   0.000095  0.0000015  0.0000338    0.000193    0.000207
+1995   4  23  49830   0.101752   0.554385   0.0956561   0.0027945  -0.000206   0.000014   0.000187   0.000158  0.0000017  0.0000350    0.000176    0.000196
+1995   4  24  49831   0.105697   0.553001   0.0928272   0.0028879  -0.000240   0.000047   0.000209   0.000160  0.0000019  0.0000362    0.000160    0.000184
+1995   4  25  49832   0.109273   0.552724   0.0899379   0.0029358  -0.000225   0.000077   0.000157   0.000106  0.0000021  0.0000369    0.000143    0.000173
+1995   4  26  49833   0.113907   0.551357   0.0870132   0.0029219  -0.000095   0.000073   0.000094   0.000067  0.0000019  0.0000369    0.000202    0.000221
+1995   4  27  49834   0.117705   0.549979   0.0841101   0.0028530  -0.000037   0.000126   0.000122   0.000082  0.0000020  0.0000362    0.000217    0.000229
+1995   4  28  49835   0.121811   0.548851   0.0812946   0.0027422  -0.000050   0.000212   0.000154   0.000123  0.0000021  0.0000356    0.000218    0.000224
+1995   4  29  49836   0.125856   0.547747   0.0786152   0.0026003  -0.000118   0.000293   0.000221   0.000145  0.0000023  0.0000356    0.000218    0.000218
+1995   4  30  49837   0.130206   0.545307   0.0760838   0.0024673  -0.000208   0.000325   0.000285   0.000231  0.0000024  0.0000350    0.000219    0.000213
+1995   5   1  49838   0.132606   0.544560   0.0736729   0.0023994  -0.000275   0.000277   0.000236   0.000262  0.0000025  0.0000338    0.000220    0.000207
+1995   5   2  49839   0.136767   0.542655   0.0713293   0.0023521  -0.000285   0.000143   0.000152   0.000169  0.0000027  0.0000332    0.000220    0.000202
+1995   5   3  49840   0.140207   0.541879   0.0689967   0.0023409  -0.000188  -0.000095   0.000101   0.000107  0.0000015  0.0000332    0.000209    0.000226
+1995   5   4  49841   0.143771   0.540186   0.0666348   0.0023836  -0.000094  -0.000284   0.000097   0.000096  0.0000013  0.0000319    0.000207    0.000235
+1995   5   5  49842   0.147175   0.539087   0.0642224   0.0024487  -0.000022  -0.000392   0.000108   0.000102  0.0000013  0.0000301    0.000208    0.000238
+1995   5   6  49843   0.150870   0.536874   0.0617495   0.0025253   0.000021  -0.000407   0.000107   0.000105  0.0000014  0.0000283    0.000209    0.000241
+1995   5   7  49844   0.154818   0.535614   0.0592038   0.0025999   0.000028  -0.000343   0.000177   0.000159  0.0000015  0.0000184    0.000210    0.000244
+1995   5   8  49845   0.159153   0.533804   0.0565642   0.0026674   0.000010  -0.000239   0.000220   0.000217  0.0000015  0.0000098    0.000211    0.000247
+1995   5   9  49846   0.163682   0.532983   0.0538074   0.0027801  -0.000019  -0.000143   0.000219   0.000216  0.0000016  0.0000104    0.000212    0.000250
+1995   5  10  49847   0.167942   0.531034   0.0509255   0.0029078  -0.000053  -0.000091   0.000199   0.000172  0.0000016  0.0000111    0.000213    0.000253
+1995   5  11  49848   0.171197   0.529803   0.0479404   0.0030148  -0.000068  -0.000116   0.000240   0.000227  0.0000016  0.0000111    0.000264    0.000324
+1995   5  12  49849   0.174986   0.527841   0.0449059   0.0030424  -0.000125  -0.000160   0.000316   0.000261  0.0000016  0.0000117    0.000276    0.000338
+1995   5  13  49850   0.177775   0.526300   0.0418927   0.0029874  -0.000222  -0.000194   0.000319   0.000237  0.0000015  0.0000123    0.000259    0.000312
+1995   5  14  49851   0.180677   0.524373   0.0389632   0.0028689  -0.000323  -0.000197   0.000307   0.000261  0.0000015  0.0000129    0.000243    0.000286
+1995   5  15  49852   0.183748   0.522725   0.0361509   0.0027490  -0.000388  -0.000153   0.000254   0.000268  0.0000014  0.0000141    0.000227    0.000261
+1995   5  16  49853   0.186783   0.521560   0.0334521   0.0026310  -0.000375  -0.000061   0.000194   0.000224  0.0000014  0.0000147    0.000210    0.000235
+1995   5  17  49854   0.189739   0.519769   0.0308337   0.0025619  -0.000261   0.000066   0.000149   0.000145  0.0000013  0.0000154    0.000194    0.000210
+1995   5  18  49855   0.191538   0.518278   0.0282513   0.0025274  -0.000043   0.000210   0.000176   0.000162  0.0000013  0.0000160    0.000195    0.000211
+1995   5  19  49856   0.193625   0.516138   0.0256693   0.0025343   0.000231   0.000344   0.000208   0.000184  0.0000014  0.0000154    0.000202    0.000221
+1995   5  20  49857   0.195540   0.514090   0.0230766   0.0025678   0.000487   0.000445   0.000243   0.000191  0.0000015  0.0000147    0.000208    0.000231
+1995   5  21  49858   0.196870   0.511767   0.0204900   0.0025895   0.000651   0.000493   0.000293   0.000260  0.0000016  0.0000141    0.000216    0.000241
+1995   5  22  49859   0.199145   0.509169   0.0179462   0.0025624   0.000665   0.000475   0.000310   0.000297  0.0000017  0.0000135    0.000222    0.000251
+1995   5  23  49860   0.201402   0.506084   0.0154847   0.0024815   0.000511   0.000393   0.000329   0.000278  0.0000018  0.0000135    0.000229    0.000261
+1995   5  24  49861   0.203444   0.503899   0.0131298   0.0023537   0.000223   0.000261   0.000241   0.000210  0.0000018  0.0000135    0.000236    0.000270
+1995   5  25  49862   0.205496   0.501887   0.0108822   0.0022393  -0.000168   0.000098   0.000150   0.000135  0.0000018  0.0000141    0.000250    0.000253
+1995   5  26  49863   0.207455   0.499720   0.0087237   0.0021411  -0.000481  -0.000047   0.000175   0.000169  0.0000017  0.0000135    0.000249    0.000240
+1995   5  27  49864   0.209448   0.497127   0.0066353   0.0020552  -0.000639  -0.000141   0.000246   0.000241  0.0000016  0.0000123    0.000238    0.000235
+1995   5  28  49865   0.211662   0.494223   0.0046085   0.0019716  -0.000636  -0.000173   0.000280   0.000322  0.0000015  0.0000117    0.000228    0.000229
+1995   5  29  49866   0.213293   0.492054   0.0026422   0.0019202  -0.000499  -0.000143   0.000237   0.000398  0.0000014  0.0000111    0.000218    0.000224
+1995   5  30  49867   0.215614   0.489223   0.0007306   0.0018795  -0.000294  -0.000070   0.000213   0.000313  0.0000014  0.0000117    0.000208    0.000219
+1995   5  31  49868   0.217301   0.485987  -0.0011481   0.0018710  -0.000097   0.000014   0.000167   0.000160  0.0000013  0.0000123    0.000198    0.000214
+1995   6   1  49869   0.219754   0.483400  -0.0030345   0.0018860   0.000016   0.000085   0.000094   0.000085  0.0000011  0.0000123    0.000150    0.000178
+1995   6   2  49870   0.221996   0.480067  -0.0049782   0.0019717   0.000039   0.000091   0.000133   0.000115  0.0000011  0.0000123    0.000142    0.000175
+1995   6   3  49871   0.225190   0.476999  -0.0070208   0.0021112  -0.000013   0.000029   0.000195   0.000172  0.0000012  0.0000123    0.000160    0.000193
+1995   6   4  49872   0.227783   0.473940  -0.0091832   0.0022451  -0.000105  -0.000071   0.000265   0.000230  0.0000014  0.0000117    0.000178    0.000211
+1995   6   5  49873   0.231583   0.470498  -0.0114643   0.0023334  -0.000194  -0.000168   0.000314   0.000280  0.0000015  0.0000111    0.000196    0.000229
+1995   6   6  49874   0.234613   0.467461  -0.0138437   0.0023896  -0.000244  -0.000210   0.000299   0.000280  0.0000017  0.0000111    0.000214    0.000246
+1995   6   7  49875   0.237310   0.464222  -0.0162855   0.0024246  -0.000243  -0.000159   0.000245   0.000218  0.0000018  0.0000111    0.000232    0.000264
+1995   6   8  49876   0.240223   0.462074  -0.0187432   0.0024587  -0.000136  -0.000045   0.000130   0.000123  0.0000019  0.0000111    0.000151    0.000183
+1995   6   9  49877   0.243248   0.459096  -0.0211660   0.0024405  -0.000116   0.000222   0.000156   0.000147  0.0000019  0.0000111    0.000173    0.000204
+1995   6  10  49878   0.245705   0.456229  -0.0235108   0.0023488  -0.000075   0.000456   0.000270   0.000243  0.0000018  0.0000111    0.000211    0.000238
+1995   6  11  49879   0.248850   0.452984  -0.0257542   0.0022129   0.000021   0.000537   0.000289   0.000254  0.0000017  0.0000111    0.000211    0.000235
+1995   6  12  49880   0.250321   0.450730  -0.0279015   0.0020901   0.000092   0.000460   0.000233   0.000193  0.0000016  0.0000117    0.000210    0.000231
+1995   6  13  49881   0.251939   0.447265  -0.0299864   0.0020086   0.000109   0.000246   0.000180   0.000143  0.0000016  0.0000123    0.000210    0.000228
+1995   6  14  49882   0.253984   0.444131  -0.0320589   0.0020221   0.000065  -0.000034   0.000141   0.000107  0.0000015  0.0000123    0.000210    0.000224
+1995   6  15  49883   0.256313   0.440835  -0.0341652   0.0020972  -0.000096  -0.000324   0.000126   0.000104  0.0000020  0.0000123    0.000468    0.000389
+1995   6  16  49884   0.258563   0.437306  -0.0363286   0.0021682  -0.000173  -0.000443   0.000160   0.000148  0.0000025  0.0000129    0.000527    0.000435
+1995   6  17  49885   0.260833   0.434325  -0.0385433   0.0022148  -0.000142  -0.000386   0.000195   0.000204  0.0000029  0.0000129    0.000443    0.000394
+1995   6  18  49886   0.263103   0.430937  -0.0407799   0.0022458  -0.000056  -0.000234   0.000237   0.000217  0.0000034  0.0000123    0.000359    0.000354
+1995   6  19  49887   0.265304   0.428062  -0.0430001   0.0022543   0.000037  -0.000077   0.000215   0.000167  0.0000038  0.0000117    0.000275    0.000313
+1995   6  20  49888   0.267345   0.424475  -0.0451683   0.0021711   0.000095   0.000015   0.000206   0.000149  0.0000043  0.0000104    0.000192    0.000272
+1995   6  21  49889   0.269450   0.421123  -0.0472541   0.0020557   0.000012  -0.000080   0.000248   0.000193  0.0000051  0.0000104    0.000274    0.000277
+1995   6  22  49890   0.270960   0.417102  -0.0492269   0.0019118   0.000005  -0.000112   0.000206   0.000172  0.0000049  0.0000104    0.000312    0.000292
+1995   6  23  49891   0.272212   0.413668  -0.0510522   0.0017078   0.000058  -0.000075   0.000159   0.000139  0.0000043  0.0000104    0.000335    0.000310
+1995   6  24  49892   0.273297   0.410140  -0.0526966   0.0014837   0.000144   0.000027   0.000188   0.000161  0.0000038  0.0000104    0.000357    0.000328
+1995   6  25  49893   0.274100   0.406543  -0.0541440   0.0013193   0.000230   0.000165   0.000220   0.000207  0.0000032  0.0000098    0.000379    0.000345
+1995   6  26  49894   0.274351   0.403276  -0.0554115   0.0012256   0.000276   0.000283   0.000222   0.000269  0.0000026  0.0000098    0.000401    0.000363
+1995   6  27  49895   0.275241   0.399633  -0.0565552   0.0011638   0.000267   0.000329   0.000197   0.000240  0.0000020  0.0000092    0.000424    0.000381
+1995   6  28  49896   0.276356   0.396101  -0.0576573   0.0011465   0.000061   0.000272   0.000140   0.000153  0.0000015  0.0000092    0.000278    0.000261
+1995   6  29  49897   0.277375   0.392169  -0.0588008   0.0011956   0.000102   0.000105   0.000095   0.000104  0.0000012  0.0000098    0.000161    0.000185
+1995   6  30  49898   0.278807   0.388407  -0.0600470   0.0012819   0.000143  -0.000045   0.000117   0.000151  0.0000014  0.0000098    0.000145    0.000174
+1995   7   1  49899   0.280249   0.384586  -0.0614260   0.0013849   0.000120  -0.000124   0.000190   0.000215  0.0000019  0.0000098    0.000172    0.000185
+1995   7   2  49900   0.281150   0.380827  -0.0629396   0.0015187   0.000059  -0.000126   0.000228   0.000236  0.0000024  0.0000098    0.000199    0.000197
+1995   7   3  49901   0.281808   0.376724  -0.0645679   0.0016678  -0.000036  -0.000057   0.000240   0.000260  0.0000028  0.0000098    0.000226    0.000209
+1995   7   4  49902   0.282646   0.372314  -0.0662757   0.0017757  -0.000134   0.000040   0.000262   0.000275  0.0000033  0.0000098    0.000252    0.000221
+1995   7   5  49903   0.283474   0.368348  -0.0680191   0.0017870  -0.000184   0.000117   0.000257   0.000250  0.0000038  0.0000098    0.000279    0.000232
+1995   7   6  49904   0.285112   0.363896  -0.0697529   0.0017407  -0.000146   0.000135   0.000188   0.000171  0.0000042  0.0000098    0.000306    0.000244
+1995   7   7  49905   0.285578   0.360324  -0.0714375   0.0016717   0.000008   0.000069   0.000147   0.000137  0.0000040  0.0000092    0.000288    0.000227
+1995   7   8  49906   0.286290   0.356305  -0.0730454   0.0015877   0.000223  -0.000045   0.000183   0.000191  0.0000037  0.0000092    0.000255    0.000201
+1995   7   9  49907   0.286529   0.352429  -0.0745675   0.0015090   0.000413  -0.000159   0.000207   0.000229  0.0000033  0.0000092    0.000222    0.000175
+1995   7  10  49908   0.286792   0.348354  -0.0760182   0.0014234   0.000498  -0.000226   0.000199   0.000209  0.0000029  0.0000092    0.000188    0.000149
+1995   7  11  49909   0.287426   0.344276  -0.0774367   0.0013983   0.000439  -0.000233   0.000210   0.000216  0.0000025  0.0000098    0.000155    0.000123
+1995   7  12  49910   0.287385   0.340888  -0.0788793   0.0014398   0.000165  -0.000094   0.000183   0.000180  0.0000021  0.0000098    0.000240    0.000204
+1995   7  13  49911   0.287706   0.336942  -0.0803999   0.0015354  -0.000062  -0.000092   0.000146   0.000129  0.0000024  0.0000104    0.000199    0.000174
+1995   7  14  49912   0.287677   0.333685  -0.0820269   0.0016564  -0.000188  -0.000120   0.000180   0.000139  0.0000029  0.0000111    0.000146    0.000134
+1995   7  15  49913   0.287783   0.330225  -0.0837482   0.0017415  -0.000200  -0.000133   0.000209   0.000158  0.0000034  0.0000111    0.000113    0.000109
+1995   7  16  49914   0.287878   0.326481  -0.0855138   0.0017673  -0.000119  -0.000130   0.000207   0.000185  0.0000039  0.0000111    0.000080    0.000083
+1995   7  17  49915   0.288096   0.322512  -0.0872539   0.0017082   0.000005  -0.000055   0.000242   0.000221  0.0000043  0.0000104    0.000150    0.000203
+1995   7  18  49916   0.288085   0.318523  -0.0889029   0.0016068   0.000098   0.000031   0.000251   0.000204  0.0000048  0.0000104    0.000241    0.000350
+1995   7  19  49917   0.287940   0.314850  -0.0904150   0.0014742   0.000065  -0.000012   0.000192   0.000150  0.0000028  0.0000104    0.000250    0.000247
+1995   7  20  49918   0.287673   0.311173  -0.0917692   0.0013095  -0.000014   0.000001   0.000169   0.000139  0.0000022  0.0000104    0.002389    0.000199
+1995   7  21  49919   0.287583   0.307200  -0.0929661   0.0011618  -0.000081   0.000042   0.000172   0.000159  0.0000021  0.0000111    0.003868    0.000170
+1995   7  22  49920   0.287607   0.303381  -0.0940231   0.0009984  -0.000091   0.000083   0.000190   0.000198  0.0000020  0.0000111    0.002919    0.000141
+1995   7  23  49921   0.286892   0.299332  -0.0949697   0.0008634  -0.000065   0.000104   0.000253   0.000277  0.0000019  0.0000111    0.001970    0.000112
+1995   7  24  49922   0.286035   0.295322  -0.0958427   0.0007958  -0.000019   0.000085   0.000214   0.000247  0.0000018  0.0000104    0.001020    0.000083
+1995   7  25  49923   0.285511   0.291446  -0.0966789   0.0007984   0.000031   0.000036   0.000157   0.000177  0.0000016  0.0000098    0.000071    0.000054
+1995   7  26  49924   0.285308   0.287634  -0.0975102   0.0008565   0.000018  -0.000082   0.000161   0.000168  0.0000015  0.0000098    0.000266    0.000261
+1995   7  27  49925   0.284534   0.283706  -0.0983644   0.0009329   0.000074  -0.000061   0.000191   0.000186  0.0000016  0.0000104    0.000317    0.000336
+1995   7  28  49926   0.283521   0.279880  -0.0992719   0.0009894   0.000171   0.000079   0.000238   0.000224  0.0000017  0.0000104    0.000320    0.000366
+1995   7  29  49927   0.282831   0.276112  -0.1002689   0.0010487   0.000271   0.000279   0.000236   0.000251  0.0000018  0.0000104    0.000322    0.000395
+1995   7  30  49928   0.281153   0.273278  -0.1013910   0.0011607   0.000331   0.000459   0.000211   0.000248  0.0000019  0.0000104    0.000325    0.000425
+1995   7  31  49929   0.280315   0.268955  -0.1026569   0.0013055   0.000311   0.000536   0.000225   0.000232  0.0000020  0.0000098    0.000327    0.000455
+1995   8   1  49930   0.279395   0.264855  -0.1040530   0.0014153   0.000201   0.000465   0.000224   0.000244  0.0000021  0.0000098    0.000330    0.000485
+1995   8   2  49931   0.279054   0.260847  -0.1055316   0.0014726  -0.000022   0.000130   0.000166   0.000186  0.0000022  0.0000098    0.000264    0.000272
+1995   8   3  49932   0.278144   0.256757  -0.1070265   0.0014697  -0.000217  -0.000111   0.000155   0.000155  0.0000025  0.0000104    0.000272    0.000270
+1995   8   4  49933   0.277507   0.252860  -0.1084772   0.0014002  -0.000335  -0.000224   0.000172   0.000179  0.0000030  0.0000111    0.000310    0.000357
+1995   8   5  49934   0.276611   0.249247  -0.1098503   0.0013264  -0.000352  -0.000227   0.000191   0.000203  0.0000034  0.0000111    0.000348    0.000444
+1995   8   6  49935   0.276046   0.244656  -0.1111495   0.0012869  -0.000271  -0.000146   0.000238   0.000266  0.0000038  0.0000104    0.000386    0.000531
+1995   8   7  49936   0.274410   0.241805  -0.1124144   0.0013088  -0.000130  -0.000030   0.000300   0.000280  0.0000043  0.0000098    0.000424    0.000617
+1995   8   8  49937   0.273436   0.237661  -0.1137095   0.0013820   0.000010   0.000081   0.000323   0.000262  0.0000047  0.0000104    0.000462    0.000703
+1995   8   9  49938   0.272668   0.234035  -0.1151037   0.0014734   0.000170   0.000080   0.000236   0.000202  0.0000021  0.0000104    0.000286    0.000324
+1995   8  10  49939   0.270274   0.230705  -0.1166426   0.0016133   0.000085   0.000174   0.000200   0.000191  0.0000059  0.0000104    0.000533    0.000537
+1995   8  11  49940   0.269034   0.226746  -0.1183214   0.0017479  -0.000008   0.000230   0.000235   0.000245  0.0000072  0.0000104    0.000619    0.000624
+1995   8  12  49941   0.267361   0.223462  -0.1200905   0.0018107  -0.000045   0.000225   0.000249   0.000281  0.0000062  0.0000098    0.000553    0.000548
+1995   8  13  49942   0.266302   0.220095  -0.1218797   0.0017711  -0.000046   0.000189   0.000236   0.000283  0.0000051  0.0000098    0.000487    0.000471
+1995   8  14  49943   0.264605   0.216424  -0.1236257   0.0016791  -0.000014   0.000135   0.000181   0.000207  0.0000041  0.0000098    0.000420    0.000395
+1995   8  15  49944   0.262844   0.212972  -0.1252894   0.0015787   0.000024   0.000087   0.000153   0.000154  0.0000031  0.0000098    0.000354    0.000318
+1995   8  16  49945   0.260083   0.209892  -0.1268569   0.0014966   0.000045   0.000058   0.000130   0.000124  0.0000021  0.0000098    0.000288    0.000242
+1995   8  17  49946   0.257676   0.206200  -0.1283290   0.0014270  -0.000007   0.000084   0.000111   0.000099  0.0000017  0.0000098    0.000242    0.000222
+1995   8  18  49947   0.255108   0.203568  -0.1297146   0.0013658  -0.000030   0.000077   0.000126   0.000121  0.0000016  0.0000098    0.000229    0.000217
+1995   8  19  49948   0.253256   0.200177  -0.1310357   0.0013195  -0.000011   0.000027   0.000191   0.000195  0.0000016  0.0000098    0.000228    0.000210
+1995   8  20  49949   0.251078   0.197372  -0.1323301   0.0013124   0.000022  -0.000035   0.000193   0.000181  0.0000015  0.0000098    0.000227    0.000203
+1995   8  21  49950   0.248904   0.195152  -0.1336425   0.0013443   0.000052  -0.000083   0.000134   0.000135  0.0000014  0.0000092    0.000226    0.000196
+1995   8  22  49951   0.247429   0.191983  -0.1350111   0.0013930   0.000059  -0.000088   0.000116   0.000130  0.0000013  0.0000092    0.000226    0.000189
+1995   8  23  49952   0.245280   0.189103  -0.1364588   0.0014704   0.000048  -0.000039   0.000112   0.000106  0.0000012  0.0000098    0.000225    0.000182
+1995   8  24  49953   0.242789   0.186301  -0.1379981   0.0015922  -0.000046   0.000087   0.000111   0.000097  0.0000011  0.0000098    0.000295    0.000282
+1995   8  25  49954   0.240366   0.183600  -0.1396387   0.0017308  -0.000021   0.000191   0.000123   0.000105  0.0000010  0.0000098    0.000288    0.000293
+1995   8  26  49955   0.238064   0.180316  -0.1414397   0.0018715   0.000092   0.000216   0.000144   0.000120  0.0000010  0.0000098    0.000317    0.000355
+1995   8  27  49956   0.236040   0.177422  -0.1433915   0.0019829   0.000177   0.000198   0.000148   0.000129  0.0000010  0.0000098    0.000280    0.000297
+1995   8  28  49957   0.233933   0.174801  -0.1454502   0.0020719   0.000139   0.000160   0.000119   0.000117  0.0000010  0.0000092    0.000241    0.000248
+1995   8  29  49958   0.232042   0.172343  -0.1475894   0.0021237   0.000001   0.000092   0.000118   0.000103  0.0000010  0.0000086    0.000331    0.000397
+1995   8  30  49959   0.230013   0.169652  -0.1497049   0.0021125  -0.000189   0.000034   0.000114   0.000093  0.0000012  0.0000086    0.000251    0.000256
+1995   8  31  49960   0.227411   0.166878  -0.1517248   0.0020664  -0.000385   0.000059   0.000119   0.000090  0.0000101  0.0000092    0.000527    0.000430
+1995   9   1  49961   0.224803   0.164180  -0.1536812   0.0019955  -0.000415   0.000164   0.000156   0.000108  0.0000126  0.0000098    0.000399    0.000329
+1995   9   2  49962   0.221821   0.161725  -0.1556353   0.0019600  -0.000375   0.000216   0.000165   0.000120  0.0000105  0.0000098    0.000230    0.000200
+1995   9   3  49963   0.219562   0.159233  -0.1576220   0.0019721  -0.000329   0.000177   0.000183   0.000177  0.0000083  0.0000098    0.000228    0.000201
+1995   9   4  49964   0.217065   0.157152  -0.1596467   0.0020146  -0.000267   0.000097   0.000200   0.000235  0.0000062  0.0000092    0.000225    0.000202
+1995   9   5  49965   0.215252   0.154724  -0.1617098   0.0020741  -0.000205   0.000021   0.000201   0.000230  0.0000041  0.0000086    0.000223    0.000204
+1995   9   6  49966   0.212666   0.152928  -0.1638254   0.0021638  -0.000147  -0.000005   0.000169   0.000175  0.0000019  0.0000092    0.000220    0.000205
+1995   9   7  49967   0.210147   0.151169  -0.1660150   0.0022417  -0.000084   0.000084   0.000139   0.000115  0.0000025  0.0000098    0.000191    0.000216
+1995   9   8  49968   0.206621   0.148903  -0.1682883   0.0022976  -0.000017   0.000195   0.000191   0.000184  0.0000030  0.0000098    0.000194    0.000222
+1995   9   9  49969   0.203830   0.146158  -0.1706194   0.0023374   0.000044   0.000281   0.000213   0.000241  0.0000029  0.0000098    0.000217    0.000225
+1995   9  10  49970   0.200745   0.143492  -0.1729499   0.0023224   0.000093   0.000317   0.000217   0.000275  0.0000028  0.0000098    0.000240    0.000227
+1995   9  11  49971   0.197272   0.141032  -0.1752167   0.0022128   0.000117   0.000280   0.000228   0.000281  0.0000026  0.0000098    0.000263    0.000230
+1995   9  12  49972   0.193999   0.138363  -0.1773784   0.0020795   0.000111   0.000175   0.000197   0.000241  0.0000025  0.0000098    0.000286    0.000232
+1995   9  13  49973   0.190978   0.135038  -0.1794273   0.0019677   0.000075   0.000025   0.000179   0.000221  0.0000024  0.0000098    0.000309    0.000235
+1995   9  14  49974   0.188372   0.132960  -0.1813817   0.0018731   0.000018  -0.000130   0.000237   0.000270  0.0000022  0.0000104    0.000292    0.000222
+1995   9  15  49975   0.185677   0.131006  -0.1832687   0.0018296  -0.000041  -0.000249   0.000281   0.000327  0.0000019  0.0000104    0.000261    0.000205
+1995   9  16  49976   0.182840   0.128882  -0.1851123   0.0018341  -0.000081  -0.000300   0.000302   0.000362  0.0000017  0.0000104    0.000231    0.000187
+1995   9  17  49977   0.179717   0.127490  -0.1869324   0.0018411  -0.000088  -0.000274   0.000304   0.000357  0.0000014  0.0000104    0.000200    0.000169
+1995   9  18  49978   0.177253   0.126118  -0.1887547   0.0018654  -0.000061  -0.000186   0.000223   0.000241  0.0000011  0.0000104    0.000169    0.000152
+1995   9  19  49979   0.174274   0.123476  -0.1906205   0.0019230  -0.000016  -0.000080   0.000134   0.000140  0.0000009  0.0000111    0.000139    0.000134
+1995   9  20  49980   0.171205   0.121791  -0.1925848   0.0020450   0.000088   0.000087   0.000115   0.000103  0.0000015  0.0000117    0.000241    0.000225
+1995   9  21  49981   0.168637   0.119620  -0.1947009   0.0022233   0.000072   0.000054   0.000134   0.000123  0.0000016  0.0000123    0.000249    0.000264
+1995   9  22  49982   0.164803   0.118113  -0.1969888   0.0023963   0.000007  -0.000071   0.000136   0.000131  0.0000016  0.0000123    0.000220    0.000282
+1995   9  23  49983   0.161844   0.116543  -0.1994348   0.0025256   0.000036  -0.000079   0.000163   0.000171  0.0000015  0.0000129    0.000213    0.000266
+1995   9  24  49984   0.158013   0.114912  -0.2020107   0.0026053   0.000082  -0.000032   0.000198   0.000240  0.0000014  0.0000129    0.000208    0.000247
+1995   9  25  49985   0.155274   0.113885  -0.2046752   0.0026608   0.000108   0.000045   0.000210   0.000250  0.0000014  0.0000123    0.000203    0.000227
+1995   9  26  49986   0.152807   0.112856  -0.2073697   0.0026664   0.000089   0.000110   0.000191   0.000194  0.0000013  0.0000117    0.000198    0.000207
+1995   9  27  49987   0.149581   0.110849  -0.2100208   0.0026032  -0.000060   0.000087   0.000159   0.000152  0.0000021  0.0000111    0.000272    0.000246
+1995   9  28  49988   0.146912   0.110146  -0.2125608   0.0024883  -0.000141   0.000040   0.000162   0.000166  0.0000023  0.0000117    0.000278    0.000249
+1995   9  29  49989   0.144031   0.109094  -0.2149688   0.0023736  -0.000150  -0.000006   0.000178   0.000190  0.0000022  0.0000117    0.000260    0.000238
+1995   9  30  49990   0.140998   0.108119  -0.2172836   0.0023064  -0.000102  -0.000026   0.000215   0.000235  0.0000022  0.0000111    0.000241    0.000227
+1995  10   1  49991   0.137704   0.107102  -0.2195805   0.0022990  -0.000023   0.000002   0.000270   0.000265  0.0000021  0.0000111    0.000222    0.000216
+1995  10   2  49992   0.134396   0.105974  -0.2219302   0.0023681   0.000047   0.000065   0.000242   0.000248  0.0000020  0.0000111    0.000204    0.000204
+1995  10   3  49993   0.130439   0.105089  -0.2243667   0.0024718   0.000076   0.000124   0.000146   0.000166  0.0000020  0.0000111    0.000185    0.000193
+1995  10   4  49994   0.126530   0.103985  -0.2268829   0.0025673   0.000008   0.000247   0.000110   0.000105  0.0000015  0.0000111    0.000200    0.000198
+1995  10   5  49995   0.122199   0.103226  -0.2294514   0.0026344  -0.000037   0.000105   0.000154   0.000146  0.0000013  0.0000111    0.000200    0.000209
+1995  10   6  49996   0.119027   0.101997  -0.2320858   0.0026660  -0.000055  -0.000159   0.000174   0.000161  0.0000013  0.0000111    0.000193    0.000220
+1995  10   7  49997   0.114622   0.100398  -0.2347961   0.0026630  -0.000063  -0.000263   0.000238   0.000208  0.0000015  0.0000111    0.000219    0.000248
+1995  10   8  49998   0.110945   0.099369  -0.2375079   0.0026044  -0.000053  -0.000254   0.000278   0.000276  0.0000017  0.0000111    0.000248    0.000278
+1995  10   9  49999   0.106336   0.097937  -0.2401079   0.0025083  -0.000035  -0.000150   0.000214   0.000244  0.0000018  0.0000098    0.000277    0.000308
+1995  10  10  50000   0.102291   0.096084  -0.2425320   0.0024052  -0.000014  -0.000002   0.000195   0.000192  0.0000020  0.0000086    0.000306    0.000338
+1995  10  11  50001   0.098190   0.094414  -0.2448095   0.0022580  -0.000011   0.000095   0.000175   0.000165  0.0000023  0.0000080    0.000290    0.000286
+1995  10  12  50002   0.093813   0.093042  -0.2470295   0.0021017   0.000007   0.000132   0.000171   0.000169  0.0000056  0.0000080    0.000547    0.000463
+1995  10  13  50003   0.090761   0.091379  -0.2490458   0.0019735   0.000042   0.000084   0.000149   0.000148  0.0000020  0.0000086    0.000245    0.000266
+1995  10  14  50004   0.087627   0.090808  -0.2508813   0.0019150   0.000063   0.000023   0.000229   0.000324  0.0000013  0.0000086    0.000184    0.000211
+1995  10  15  50005   0.084578   0.090684  -0.2526923   0.0019106   0.000072  -0.000036   0.000334   0.000441  0.0000013  0.0000086    0.000176    0.000191
+1995  10  16  50006   0.081058   0.089495  -0.2546018   0.0019315   0.000067  -0.000071   0.000258   0.000285  0.0000012  0.0000080    0.000167    0.000171
+1995  10  17  50007   0.076649   0.088972  -0.2566595   0.0020164   0.000049  -0.000069   0.000216   0.000227  0.0000012  0.0000074    0.000159    0.000150
+1995  10  18  50008   0.073314   0.087413  -0.2588411   0.0021307   0.000024  -0.000034   0.000168   0.000161  0.0000011  0.0000080    0.000150    0.000130
+1995  10  19  50009   0.069091   0.087172  -0.2610945   0.0022142  -0.000003   0.000019   0.000136   0.000134  0.0000013  0.0000080    0.000158    0.000133
+1995  10  20  50010   0.066609   0.086078  -0.2633877   0.0022973  -0.000023   0.000070   0.000170   0.000174  0.0000015  0.0000074    0.000171    0.000143
+1995  10  21  50011   0.064464   0.085861  -0.2657191   0.0024044  -0.000035   0.000103   0.000214   0.000200  0.0000017  0.0000074    0.000183    0.000154
+1995  10  22  50012   0.062474   0.085193  -0.2680985   0.0024592  -0.000038   0.000107   0.000218   0.000222  0.0000020  0.0000074    0.000197    0.000164
+1995  10  23  50013   0.059005   0.085318  -0.2705238   0.0024575  -0.000032   0.000081   0.000157   0.000176  0.0000022  0.0000074    0.000209    0.000175
+1995  10  24  50014   0.055277   0.085523  -0.2729694   0.0024425  -0.000022   0.000034   0.000140   0.000155  0.0000024  0.0000074    0.000222    0.000185
+1995  10  25  50015   0.051285   0.085031  -0.2753928   0.0024167  -0.000010  -0.000024   0.000129   0.000147  0.0000026  0.0000080    0.000224    0.000248
+1995  10  26  50016   0.047011   0.084242  -0.2777548   0.0023550  -0.000004  -0.000053   0.000140   0.000140  0.0000024  0.0000086    0.000218    0.000253
+1995  10  27  50017   0.042032   0.083616  -0.2800460   0.0022801  -0.000002  -0.000044   0.000198   0.000177  0.0000022  0.0000086    0.000209    0.000239
+1995  10  28  50018   0.038542   0.082259  -0.2822974   0.0022520  -0.000002  -0.000003   0.000248   0.000222  0.0000019  0.0000086    0.000200    0.000224
+1995  10  29  50019   0.034932   0.082379  -0.2845690   0.0022946   0.000001   0.000054   0.000303   0.000322  0.0000017  0.0000080    0.000191    0.000210
+1995  10  30  50020   0.031671   0.081862  -0.2869264   0.0023987   0.000011   0.000099   0.000263   0.000301  0.0000014  0.0000074    0.000183    0.000195
+1995  10  31  50021   0.028082   0.082723  -0.2894145   0.0025426   0.000032   0.000106   0.000163   0.000167  0.0000012  0.0000080    0.000173    0.000181
+1995  11   1  50022   0.024690   0.082749  -0.2920403   0.0026923   0.000064   0.000056   0.000122   0.000110  0.0000010  0.0000092    0.000165    0.000166
+1995  11   2  50023   0.021992   0.083071  -0.2947703   0.0027767   0.000104  -0.000057   0.000113   0.000114  0.0000010  0.0000104    0.000167    0.000167
+1995  11   3  50024   0.018639   0.083401  -0.2975419   0.0027508   0.000147  -0.000204   0.000163   0.000145  0.0000011  0.0000111    0.000173    0.000173
+1995  11   4  50025   0.015101   0.083483  -0.3002830   0.0026521   0.000185  -0.000344   0.000175   0.000156  0.0000012  0.0000111    0.000180    0.000179
+1995  11   5  50026   0.011466   0.084109  -0.3029309   0.0025428   0.000212  -0.000425   0.000184   0.000246  0.0000013  0.0000111    0.000186    0.000185
+1995  11   6  50027   0.007285   0.084275  -0.3054457   0.0024466   0.000222  -0.000411   0.000238   0.000307  0.0000015  0.0000111    0.000193    0.000191
+1995  11   7  50028   0.003809   0.084926  -0.3078133   0.0023426   0.000217  -0.000289   0.000229   0.000257  0.0000016  0.0000111    0.000199    0.000197
+1995  11   8  50029   0.000023   0.085188  -0.3100427   0.0022350   0.000198  -0.000082   0.000146   0.000162  0.0000017  0.0000111    0.000205    0.000203
+1995  11   9  50030  -0.003797   0.085686  -0.3121589   0.0021142   0.000173   0.000176   0.000157   0.000127  0.0000018  0.0000117    0.000226    0.000196
+1995  11  10  50031  -0.007410   0.085694  -0.3141957   0.0020087   0.000149   0.000381   0.000234   0.000180  0.0000018  0.0000117    0.000252    0.000186
+1995  11  11  50032  -0.011188   0.085719  -0.3161912   0.0019612   0.000134   0.000423   0.000248   0.000182  0.0000019  0.0000117    0.000255    0.000194
+1995  11  12  50033  -0.015297   0.086743  -0.3181868   0.0019997   0.000131   0.000311   0.000280   0.000224  0.0000019  0.0000111    0.000242    0.000215
+1995  11  13  50034  -0.018720   0.086762  -0.3202300   0.0020722   0.000139   0.000137   0.000261   0.000253  0.0000020  0.0000098    0.000229    0.000235
+1995  11  14  50035  -0.022288   0.087516  -0.3223736   0.0022103   0.000150  -0.000020   0.000216   0.000189  0.0000021  0.0000098    0.000216    0.000256
+1995  11  15  50036  -0.025318   0.087994  -0.3246658   0.0024040   0.000173  -0.000025   0.000167   0.000128  0.0000013  0.0000098    0.000170    0.000185
+1995  11  16  50037  -0.028737   0.089604  -0.3271341   0.0025773   0.000156  -0.000006   0.000204   0.000164  0.0000013  0.0000098    0.000119    0.000119
+1995  11  17  50038  -0.033283   0.090829  -0.3297719   0.0026838   0.000117   0.000030   0.000199   0.000167  0.0000016  0.0000098    0.000066    0.000055
+1995  11  18  50039  -0.037285   0.092112  -0.3325422   0.0027716   0.000090   0.000056   0.000169   0.000160  0.0000019  0.0000098    0.000090    0.000087
+1995  11  19  50040  -0.041845   0.093423  -0.3353931   0.0028476   0.000065   0.000065   0.000232   0.000268  0.0000022  0.0000098    0.000119    0.000128
+1995  11  20  50041  -0.045655   0.094943  -0.3382721   0.0028790   0.000042   0.000056   0.000221   0.000266  0.0000025  0.0000098    0.000150    0.000169
+1995  11  21  50042  -0.050110   0.096086  -0.3411329   0.0028408   0.000020   0.000038   0.000163   0.000164  0.0000027  0.0000098    0.000180    0.000210
+1995  11  22  50043  -0.054046   0.097167  -0.3439385   0.0027622  -0.000011   0.000039   0.000122   0.000126  0.0000021  0.0000104    0.000196    0.000218
+1995  11  23  50044  -0.058799   0.097602  -0.3466689   0.0026796  -0.000017   0.000016   0.000162   0.000159  0.0000019  0.0000111    0.000233    0.000245
+1995  11  24  50045  -0.061790   0.098890  -0.3493299   0.0026527   0.000003  -0.000025   0.000237   0.000263  0.0000018  0.0000111    0.000278    0.000279
+1995  11  25  50046  -0.065589   0.100798  -0.3519555   0.0026792   0.000042  -0.000082   0.000469   0.000539  0.0000016  0.0000111    0.000323    0.000313
+1995  11  26  50047  -0.068360   0.101643  -0.3545944   0.0027031   0.000087  -0.000142   0.000599   0.000686  0.0000015  0.0000111    0.000368    0.000347
+1995  11  27  50048  -0.071715   0.103272  -0.3572883   0.0027265   0.000121  -0.000188   0.000365   0.000465  0.0000014  0.0000117    0.000413    0.000381
+1995  11  28  50049  -0.076042   0.105983  -0.3600535   0.0027669   0.000126  -0.000195   0.000250   0.000269  0.0000013  0.0000117    0.000457    0.000415
+1995  11  29  50050  -0.079804   0.106651  -0.3628755   0.0028088   0.000096  -0.000157   0.000214   0.000169  0.0000012  0.0000111    0.000239    0.000258
+1995  11  30  50051  -0.084986   0.109439  -0.3657166   0.0027811   0.000016  -0.000039   0.000232   0.000165  0.0000012  0.0000117    0.000183    0.000216
+1995  12   1  50052  -0.090100   0.110284  -0.3685268   0.0026998  -0.000090   0.000133   0.000668   0.000223  0.0000013  0.0000117    0.000181    0.000214
+1995  12   2  50053  -0.094799   0.112442  -0.3712530   0.0026134  -0.000188   0.000311   0.001132   0.000286  0.0000014  0.0000111    0.000178    0.000211
+1995  12   3  50054  -0.099607   0.113882  -0.3738467   0.0025193  -0.000244   0.000443   0.000817   0.000325  0.0000014  0.0000111    0.000176    0.000209
+1995  12   4  50055  -0.104162   0.115633  -0.3762774   0.0024075  -0.000235   0.000487   0.000352   0.000284  0.0000015  0.0000104    0.000174    0.000207
+1995  12   5  50056  -0.109099   0.117824  -0.3785471   0.0022862  -0.000163   0.000422   0.000317   0.000210  0.0000016  0.0000098    0.000172    0.000204
+1995  12   6  50057  -0.112851   0.119215  -0.3806953   0.0021735  -0.000056   0.000267   0.000213   0.000131  0.0000016  0.0000098    0.000170    0.000202
+1995  12   7  50058  -0.116347   0.121754  -0.3827837   0.0021010   0.000119   0.000021   0.000176   0.000153  0.0000018  0.0000098    0.000162    0.000136
+1995  12   8  50059  -0.119882   0.123082  -0.3848678   0.0020774   0.000125  -0.000143   0.000163   0.000141  0.0000020  0.0000104    0.000165    0.000175
+1995  12   9  50060  -0.122418   0.125905  -0.3869801   0.0021165   0.000073  -0.000201   0.000134   0.000127  0.0000020  0.0000111    0.000165    0.000210
+1995  12  10  50061  -0.125565   0.127265  -0.3891389   0.0021944   0.000049  -0.000184   0.000187   0.000184  0.0000017  0.0000111    0.000161    0.000196
+1995  12  11  50062  -0.128432   0.129604  -0.3913656   0.0022821   0.000039  -0.000121   0.000188   0.000179  0.0000014  0.0000111    0.000156    0.000182
+1995  12  12  50063  -0.132151   0.131247  -0.3936905   0.0023796   0.000053  -0.000061   0.000214   0.000215  0.0000012  0.0000104    0.000150    0.000168
+1995  12  13  50064  -0.136076   0.133875  -0.3961360   0.0024919   0.000083  -0.000042   0.000181   0.000185  0.0000009  0.0000098    0.000145    0.000154
+1995  12  14  50065  -0.138797   0.136407  -0.3986939   0.0025868   0.000112  -0.000111   0.000135   0.000112  0.0000013  0.0000098    0.000237    0.000260
+1995  12  15  50066  -0.140658   0.139319  -0.4013204   0.0026281   0.000112  -0.000169   0.000157   0.000121  0.0000017  0.0000098    0.000268    0.000303
+1995  12  16  50067  -0.143315   0.142242  -0.4039688   0.0026299   0.000080  -0.000187   0.000159   0.000130  0.0000021  0.0000098    0.000252    0.000293
+1995  12  17  50068  -0.145590   0.145940  -0.4066150   0.0026422   0.000033  -0.000168   0.000257   0.000220  0.0000024  0.0000098    0.000236    0.000284
+1995  12  18  50069  -0.147339   0.149203  -0.4092526   0.0026512  -0.000008  -0.000122   0.000351   0.000298  0.0000028  0.0000098    0.000220    0.000274
+1995  12  19  50070  -0.150358   0.152454  -0.4118749   0.0026243  -0.000025  -0.000067   0.000297   0.000234  0.0000031  0.0000098    0.000204    0.000265
+1995  12  20  50071  -0.152571   0.154522  -0.4144622   0.0025608   0.000007  -0.000040   0.000199   0.000146  0.0000024  0.0000098    0.000222    0.000247
+1995  12  21  50072  -0.155302   0.157918  -0.4169915   0.0024487   0.000053  -0.000031   0.000146   0.000128  0.0000021  0.0000104    0.000219    0.000234
+1995  12  22  50073  -0.157197   0.160002  -0.4194689   0.0023797   0.000104  -0.000043   0.000191   0.000146  0.0000019  0.0000111    0.000210    0.000223
+1995  12  23  50074  -0.159298   0.164221  -0.4219405   0.0024639   0.000147  -0.000071   0.000332   0.000278  0.0000017  0.0000111    0.000200    0.000211
+1995  12  24  50075  -0.160613   0.167052  -0.4244700   0.0026256   0.000171  -0.000100   0.000440   0.000553  0.0000016  0.0000104    0.000191    0.000200
+1995  12  25  50076  -0.162358   0.171370  -0.4271008   0.0027624   0.000170  -0.000118   0.000537   0.000750  0.0000014  0.0000098    0.000181    0.000188
+1995  12  26  50077  -0.164704   0.174752  -0.4298283   0.0028150   0.000144  -0.000114   0.000589   0.000752  0.0000012  0.0000098    0.000172    0.000177
+1995  12  27  50078  -0.166496   0.177582  -0.4325980   0.0027693   0.000101  -0.000082   0.000336   0.000405  0.0000011  0.0000092    0.000162    0.000166
+1995  12  28  50079  -0.168731   0.180776  -0.4353287   0.0026617   0.000050  -0.000025   0.000126   0.000113  0.0000011  0.0000092    0.000167    0.000169
+1995  12  29  50080  -0.170656   0.183428  -0.4379413   0.0025158   0.000001   0.000049   0.000144   0.000153  0.0000012  0.0000098    0.000177    0.000178
+1995  12  30  50081  -0.172582   0.185999  -0.4403801   0.0023337  -0.000036   0.000126   0.000192   0.000181  0.0000013  0.0000104    0.000186    0.000187
+1995  12  31  50082  -0.174334   0.188903  -0.4426184   0.0021438  -0.000053   0.000193   0.000580   0.000694  0.0000014  0.0000111    0.000196    0.000196
+1996   1   1  50083  -0.176546   0.192471   0.5553455   0.0019329  -0.000048   0.000233   0.000891   0.001159  0.0000015  0.0000104    0.000205    0.000205
+1996   1   2  50084  -0.177034   0.194573   0.5534949   0.0017638  -0.000020   0.000237   0.000716   0.000670  0.0000016  0.0000098    0.000215    0.000214
+1996   1   3  50085  -0.178624   0.197570   0.5517970   0.0016473   0.000025   0.000204   0.000365   0.000175  0.0000017  0.0000092    0.000224    0.000223
+1996   1   4  50086  -0.178984   0.200715   0.5502036   0.0015653   0.000082   0.000138   0.000197   0.000163  0.0000017  0.0000092    0.000224    0.000220
+1996   1   5  50087  -0.180632   0.203748   0.5486539   0.0015330   0.000138   0.000051   0.000300   0.000202  0.0000016  0.0000098    0.000220    0.000213
+1996   1   6  50088  -0.181898   0.207003   0.5470846   0.0015656   0.000184  -0.000039   0.000662   0.000452  0.0000015  0.0000104    0.000216    0.000206
+1996   1   7  50089  -0.183809   0.210916   0.5454435   0.0016699   0.000211  -0.000115   0.000624   0.000470  0.0000014  0.0000104    0.000212    0.000200
+1996   1   8  50090  -0.185767   0.214131   0.5437029   0.0018008   0.000212  -0.000163   0.000259   0.000205  0.0000013  0.0000098    0.000208    0.000193
+1996   1   9  50091  -0.186845   0.216307   0.5418625   0.0019164   0.000185  -0.000172   0.000217   0.000140  0.0000012  0.0000098    0.000204    0.000186
+1996   1  10  50092  -0.188927   0.218768   0.5399425   0.0019826   0.000138  -0.000145   0.000159   0.000094  0.0000011  0.0000098    0.000200    0.000179
+1996   1  11  50093  -0.190414   0.221089   0.5379688   0.0019994   0.000076  -0.000089   0.000134   0.000083  0.0000012  0.0000098    0.000206    0.000184
+1996   1  12  50094  -0.192751   0.224349   0.5359638   0.0019869   0.000015  -0.000023   0.000143   0.000095  0.0000014  0.0000098    0.000215    0.000193
+1996   1  13  50095  -0.194850   0.227291   0.5339455   0.0019798  -0.000031   0.000028   0.000168   0.000115  0.0000015  0.0000098    0.000225    0.000202
+1996   1  14  50096  -0.196509   0.230438   0.5319353   0.0019615  -0.000048   0.000043   0.000269   0.000292  0.0000017  0.0000092    0.000235    0.000211
+1996   1  15  50097  -0.198480   0.232974   0.5299625   0.0019269  -0.000029   0.000006   0.000290   0.000372  0.0000019  0.0000086    0.000244    0.000220
+1996   1  16  50098  -0.199886   0.236194   0.5280565   0.0018989   0.000026  -0.000086   0.000220   0.000263  0.0000020  0.0000086    0.000254    0.000229
+1996   1  17  50099  -0.200664   0.238369   0.5262274   0.0018524   0.000108  -0.000222   0.000171   0.000190  0.0000022  0.0000086    0.000263    0.000238
+1996   1  18  50100  -0.202538   0.241908   0.5244512   0.0017967   0.000202  -0.000380   0.000209   0.000170  0.0000024  0.0000086    0.000271    0.000239
+1996   1  19  50101  -0.203559   0.244984   0.5226718   0.0017816   0.000284  -0.000519   0.000352   0.000328  0.0000026  0.0000092    0.000279    0.000236
+1996   1  20  50102  -0.205145   0.249442   0.5208248   0.0018338   0.000329  -0.000601   0.000375   0.000378  0.0000028  0.0000098    0.000286    0.000234
+1996   1  21  50103  -0.206628   0.252910   0.5188690   0.0019696   0.000326  -0.000597   0.000300   0.000291  0.0000030  0.0000098    0.000294    0.000231
+1996   1  22  50104  -0.208034   0.256245   0.5168081   0.0021161   0.000272  -0.000502   0.000246   0.000280  0.0000032  0.0000092    0.000302    0.000229
+1996   1  23  50105  -0.210207   0.259819   0.5146879   0.0021621   0.000185  -0.000341   0.000188   0.000205  0.0000034  0.0000086    0.000309    0.000227
+1996   1  24  50106  -0.211200   0.262997   0.5125748   0.0021136   0.000053  -0.000123   0.000161   0.000132  0.0000023  0.0000086    0.000264    0.000225
+1996   1  25  50107  -0.212290   0.266984   0.5105311   0.0020004  -0.000004   0.000020   0.000182   0.000133  0.0000021  0.0000092    0.000300    0.000244
+1996   1  26  50108  -0.213059   0.270332   0.5086021   0.0018564  -0.000010   0.000071   0.000196   0.000146  0.0000021  0.0000092    0.000364    0.000269
+1996   1  27  50109  -0.214094   0.274488   0.5068105   0.0017284  -0.000022   0.000047   0.000227   0.000195  0.0000018  0.0000092    0.000313    0.000233
+1996   1  28  50110  -0.215107   0.277980   0.5051565   0.0015995  -0.000015  -0.000033   0.000331   0.000345  0.0000015  0.0000092    0.000251    0.000192
+1996   1  29  50111  -0.216874   0.281431   0.5036237   0.0014817   0.000016  -0.000132   0.000316   0.000333  0.0000012  0.0000086    0.000190    0.000150
+1996   1  30  50112  -0.218582   0.285093   0.5021849   0.0014043   0.000069  -0.000215   0.000172   0.000158  0.0000009  0.0000086    0.000129    0.000109
+1996   1  31  50113  -0.220139   0.288640   0.5008028   0.0013717   0.000168  -0.000242   0.000102   0.000115  0.0000014  0.0000086    0.000262    0.000239
+1996   2   1  50114  -0.220780   0.291891   0.4994282   0.0013944   0.000241  -0.000261   0.000126   0.000139  0.0000017  0.0000092    0.000311    0.000280
+1996   2   2  50115  -0.222039   0.296085   0.4980044   0.0014704   0.000289  -0.000268   0.000147   0.000174  0.0000017  0.0000092    0.000324    0.000285
+1996   2   3  50116  -0.222065   0.299700   0.4964796   0.0016000   0.000310  -0.000257   0.000206   0.000267  0.0000018  0.0000086    0.000338    0.000291
+1996   2   4  50117  -0.222209   0.304041   0.4948238   0.0017296   0.000304  -0.000229   0.000400   0.000356  0.0000019  0.0000086    0.000352    0.000296
+1996   2   5  50118  -0.222439   0.307443   0.4930362   0.0018266   0.000261  -0.000185   0.000432   0.000339  0.0000020  0.0000080    0.000365    0.000302
+1996   2   6  50119  -0.222621   0.311514   0.4911334   0.0019346   0.000168  -0.000136   0.000269   0.000243  0.0000021  0.0000074    0.000379    0.000308
+1996   2   7  50120  -0.223381   0.314566   0.4891316   0.0020466   0.000101  -0.000055   0.000166   0.000148  0.0000011  0.0000080    0.000218    0.000198
+1996   2   8  50121  -0.224426   0.318393   0.4870437   0.0021358  -0.000128  -0.000071   0.000188   0.000166  0.0000012  0.0000092    0.000154    0.000185
+1996   2   9  50122  -0.225368   0.321419   0.4848984   0.0021739  -0.000449  -0.000112   0.000246   0.000236  0.0000018  0.0000092    0.000167    0.000206
+1996   2  10  50123  -0.225366   0.324103   0.4827486   0.0021385  -0.000632  -0.000162   0.000321   0.000286  0.0000023  0.0000086    0.000211    0.000229
+1996   2  11  50124  -0.224651   0.326908   0.4806489   0.0020549  -0.000528  -0.000214   0.000373   0.000277  0.0000028  0.0000080    0.000278    0.000257
+1996   2  12  50125  -0.223422   0.329251   0.4786235   0.0019783  -0.000299  -0.000238   0.000286   0.000256  0.0000033  0.0000074    0.000345    0.000284
+1996   2  13  50126  -0.221938   0.332461   0.4766586   0.0019323  -0.000021  -0.000217   0.000200   0.000215  0.0000038  0.0000074    0.000412    0.000312
+1996   2  14  50127  -0.220627   0.335881   0.4747232   0.0019254  -0.000025  -0.000158   0.000150   0.000136  0.0000026  0.0000074    0.000339    0.000278
+1996   2  15  50128  -0.220058   0.339877   0.4727850   0.0019727   0.000228  -0.000037   0.000135   0.000119  0.0000021  0.0000080    0.000376    0.000350
+1996   2  16  50129  -0.218910   0.344007   0.4707951   0.0020897   0.000551   0.000094   0.000140   0.000131  0.0000019  0.0000086    0.000454    0.000458
+1996   2  17  50130  -0.218903   0.348998   0.4686867   0.0022559   0.000672   0.000173   0.000196   0.000228  0.0000018  0.0000092    0.000421    0.000422
+1996   2  18  50131  -0.218681   0.353522   0.4664044   0.0024015   0.000658   0.000197   0.000259   0.000268  0.0000017  0.0000092    0.000379    0.000374
+1996   2  19  50132  -0.219989   0.357638   0.4639407   0.0025108   0.000532   0.000171   0.000303   0.000271  0.0000017  0.0000086    0.000336    0.000325
+1996   2  20  50133  -0.220785   0.361524   0.4613524   0.0025841   0.000350   0.000113   0.000362   0.000444  0.0000016  0.0000086    0.000293    0.000276
+1996   2  21  50134  -0.221025   0.364496   0.4587423   0.0025670   0.000176   0.000048   0.000283   0.000370  0.0000015  0.0000086    0.000250    0.000228
+1996   2  22  50135  -0.221442   0.367377   0.4562172   0.0024426   0.000086   0.000005   0.000275   0.000266  0.0000012  0.0000092    0.000182    0.000168
+1996   2  23  50136  -0.221111   0.370354   0.4538514   0.0022441   0.000061  -0.000016   0.000228   0.000232  0.0000007  0.0000092    0.000106    0.000104
+1996   2  24  50137  -0.221647   0.374846   0.4516730   0.0020474   0.000040  -0.000030   0.000202   0.000199  0.0000010  0.0000092    0.000134    0.000130
+1996   2  25  50138  -0.220576   0.378974   0.4496727   0.0019055   0.000023  -0.000044   0.000273   0.000320  0.0000014  0.0000092    0.000171    0.000164
+1996   2  26  50139  -0.220712   0.383811   0.4478167   0.0018370  -0.000002  -0.000068   0.000196   0.000290  0.0000018  0.0000086    0.000208    0.000199
+1996   2  27  50140  -0.220041   0.387172   0.4460558   0.0017959  -0.000034  -0.000105   0.000161   0.000207  0.0000022  0.0000092    0.000245    0.000233
+1996   2  28  50141  -0.219791   0.391103   0.4443312   0.0017646  -0.000063  -0.000152   0.000154   0.000156  0.0000026  0.0000098    0.000282    0.000268
+1996   2  29  50142  -0.218901   0.394594   0.4425798   0.0018044  -0.000075  -0.000200   0.000142   0.000138  0.0000027  0.0000098    0.000282    0.000262
+1996   3   1  50143  -0.217996   0.398661   0.4407402   0.0019130  -0.000068  -0.000228   0.000186   0.000162  0.0000027  0.0000098    0.000269    0.000242
+1996   3   2  50144  -0.215924   0.402316   0.4387624   0.0020328  -0.000051  -0.000225   0.000224   0.000210  0.0000027  0.0000104    0.000257    0.000222
+1996   3   3  50145  -0.214580   0.407061   0.4366190   0.0021887  -0.000032  -0.000186   0.000284   0.000295  0.0000027  0.0000104    0.000245    0.000203
+1996   3   4  50146  -0.212782   0.411039   0.4343126   0.0023539  -0.000018  -0.000124   0.000327   0.000323  0.0000026  0.0000098    0.000232    0.000183
+1996   3   5  50147  -0.210420   0.414899   0.4318754   0.0024760  -0.000012  -0.000070   0.000224   0.000216  0.0000026  0.0000098    0.000220    0.000164
+1996   3   6  50148  -0.208746   0.419366   0.4293540   0.0025620  -0.000028   0.000033   0.000133   0.000127  0.0000013  0.0000098    0.000181    0.000157
+1996   3   7  50149  -0.206643   0.423285   0.4267843   0.0026027  -0.000007  -0.000083   0.000107   0.000095  0.0000010  0.0000104    0.000162    0.000161
+1996   3   8  50150  -0.205738   0.427079   0.4241170   0.0026148   0.000035  -0.000199   0.000148   0.000151  0.0000014  0.0000111    0.000176    0.000180
+1996   3   9  50151  -0.203932   0.430513   0.4213794   0.0025996   0.000084  -0.000255   0.000216   0.000220  0.0000020  0.0000111    0.000204    0.000205
+1996   3  10  50152  -0.202721   0.434237   0.4187273   0.0025591   0.000115  -0.000267   0.000217   0.000243  0.0000026  0.0000111    0.000232    0.000230
+1996   3  11  50153  -0.201704   0.437633   0.4162988   0.0024852   0.000105  -0.000234   0.000165   0.000197  0.0000032  0.0000111    0.000259    0.000256
+1996   3  12  50154  -0.199564   0.440931   0.4140621   0.0023607   0.000042  -0.000181   0.000173   0.000168  0.0000036  0.0000111    0.000278    0.000272
+1996   3  13  50155  -0.198160   0.444347   0.4117823   0.0022345  -0.000054  -0.000156   0.000161   0.000155  0.0000023  0.0000111    0.000235    0.000219
+1996   3  14  50156  -0.196850   0.448171   0.4092119   0.0021742  -0.000235  -0.000107   0.000153   0.000162  0.0053471  0.0000117    0.001336    0.001508
+1996   3  15  50157  -0.195148   0.451693   0.4065205   0.0021889  -0.000347  -0.000101   0.000205   0.000203  0.0068415  0.0000117    0.001650    0.001874
+1996   3  16  50158  -0.192973   0.454834   0.4040141   0.0022669  -0.000352  -0.000144   0.000220   0.000191  0.0055392  0.0000111    0.001382    0.001559
+1996   3  17  50159  -0.191245   0.458532   0.4018052   0.0023550  -0.000280  -0.000202   0.000239   0.000251  0.0042369  0.0000104    0.001115    0.001244
+1996   3  18  50160  -0.188217   0.462007   0.3997841   0.0023871  -0.000166  -0.000250   0.000222   0.000251  0.0029346  0.0000104    0.000849    0.000929
+1996   3  19  50161  -0.185183   0.465775   0.3977402   0.0024135  -0.000067  -0.000261   0.000171   0.000165  0.0016323  0.0000104    0.000582    0.000614
+1996   3  20  50162  -0.181888   0.470358   0.3955291   0.0024325  -0.000034  -0.000221   0.000127   0.000124  0.0003300  0.0000098    0.000315    0.000299
+1996   3  21  50163  -0.178862   0.474710   0.3931632   0.0023761  -0.000082  -0.000125   0.000100   0.000107  0.0000018  0.0000092    0.000187    0.000143
+1996   3  22  50164  -0.176736   0.478562   0.3907996   0.0022516  -0.000244  -0.000021   0.000156   0.000154  0.0000019  0.0000092    0.000219    0.000157
+1996   3  23  50165  -0.174953   0.481863   0.3885834   0.0021199  -0.000450   0.000056   0.000248   0.000232  0.0000020  0.0000092    0.000309    0.000231
+1996   3  24  50166  -0.173443   0.484278   0.3865530   0.0020042  -0.000602   0.000086   0.000267   0.000241  0.0000022  0.0000092    0.000399    0.000305
+1996   3  25  50167  -0.170912   0.487521   0.3846579   0.0018982  -0.000637   0.000067   0.000203   0.000211  0.0000024  0.0000098    0.000489    0.000378
+1996   3  26  50168  -0.168389   0.489758   0.3828157   0.0018510  -0.000552   0.000021   0.000182   0.000228  0.0000025  0.0000092    0.000579    0.000452
+1996   3  27  50169  -0.165871   0.493091   0.3809641   0.0018605  -0.000172  -0.000055   0.000172   0.000181  0.0000015  0.0000086    0.000288    0.000249
+1996   3  28  50170  -0.162660   0.495501   0.3790825   0.0018987  -0.000169  -0.000031   0.000126   0.000101  0.0000023  0.0000086    0.000190    0.000213
+1996   3  29  50171  -0.159794   0.498745   0.3771342   0.0019696  -0.000224   0.000063   0.000177   0.000167  0.0000026  0.0000086    0.000192    0.000224
+1996   3  30  50172  -0.156975   0.501551   0.3750814   0.0020446  -0.000248   0.000189   0.000227   0.000228  0.0000024  0.0000086    0.000197    0.000219
+1996   3  31  50173  -0.154804   0.504350   0.3729128   0.0021726  -0.000272   0.000305   0.000307   0.000331  0.0000021  0.0000086    0.000201    0.000215
+1996   4   1  50174  -0.152069   0.507846   0.3706421   0.0023240  -0.000269   0.000362   0.000363   0.000397  0.0000019  0.0000086    0.000206    0.000211
+1996   4   2  50175  -0.149552   0.510488   0.3682962   0.0024400  -0.000245   0.000326   0.000331   0.000363  0.0000016  0.0000080    0.000210    0.000206
+1996   4   3  50176  -0.147324   0.513357   0.3658977   0.0024975  -0.000220   0.000194   0.000240   0.000254  0.0000014  0.0000080    0.000215    0.000202
+1996   4   4  50177  -0.145606   0.515489   0.3634578   0.0025106  -0.000224  -0.000034   0.000238   0.000224  0.0000068  0.0000086    0.000564    0.000400
+1996   4   5  50178  -0.143999   0.517540   0.3609828   0.0024867  -0.000265  -0.000241   0.000356   0.000360  0.0000083  0.0000086    0.000696    0.000488
+1996   4   6  50179  -0.141917   0.519547   0.3584963   0.0024289  -0.000326  -0.000374   0.000483   0.000523  0.0000069  0.0000086    0.000661    0.000488
+1996   4   7  50180  -0.139919   0.520551   0.3560428   0.0023924  -0.000380  -0.000414   0.000462   0.000523  0.0000055  0.0000086    0.000627    0.000487
+1996   4   8  50181  -0.138007   0.522913   0.3536639   0.0023367  -0.000396  -0.000363   0.000290   0.000317  0.0000041  0.0000080    0.000592    0.000486
+1996   4   9  50182  -0.135186   0.525205   0.3513688   0.0022768  -0.000359  -0.000250   0.000239   0.000226  0.0000028  0.0000080    0.000558    0.000485
+1996   4  10  50183  -0.132135   0.528015   0.3491200   0.0022817  -0.000248  -0.000116   0.000187   0.000170  0.0000014  0.0000086    0.000276    0.000253
+1996   4  11  50184  -0.129258   0.530717   0.3468487   0.0023431  -0.000129  -0.000008   0.000185   0.000149  0.0000013  0.0000092    0.000214    0.000208
+1996   4  12  50185  -0.126698   0.533707   0.3444892   0.0024291  -0.000025   0.000055   0.000239   0.000191  0.0000017  0.0000092    0.000232    0.000232
+1996   4  13  50186  -0.123671   0.536744   0.3420121   0.0025324   0.000044   0.000071   0.000239   0.000209  0.0000020  0.0000092    0.000249    0.000257
+1996   4  14  50187  -0.120328   0.539190   0.3394368   0.0025969   0.000067   0.000051   0.000263   0.000293  0.0000024  0.0000092    0.000267    0.000282
+1996   4  15  50188  -0.116105   0.541688   0.3368213   0.0025491   0.000046   0.000018   0.000241   0.000288  0.0000028  0.0000086    0.000285    0.000306
+1996   4  16  50189  -0.112680   0.544385   0.3342387   0.0025089  -0.000007  -0.000010   0.000175   0.000187  0.0000032  0.0000104    0.000303    0.000331
+1996   4  17  50190  -0.109509   0.547018   0.3317546   0.0024273  -0.000073  -0.000008   0.000150   0.000154  0.0000024  0.0000104    0.000265    0.000295
+1996   4  18  50191  -0.106474   0.549343   0.3294112   0.0022784  -0.000124   0.000003   0.000154   0.000166  0.0000021  0.0000086    0.000248    0.000274
+1996   4  19  50192  -0.103565   0.551722   0.3272195   0.0021301  -0.000148   0.000020   0.000167   0.000204  0.0000020  0.0000086    0.000239    0.000259
+1996   4  20  50193  -0.101103   0.553948   0.3251609   0.0020285  -0.000142   0.000037   0.000174   0.000229  0.0000018  0.0000086    0.000230    0.000244
+1996   4  21  50194  -0.097776   0.556095   0.3231954   0.0019750  -0.000114   0.000044   0.000201   0.000262  0.0000017  0.0000086    0.000221    0.000229
+1996   4  22  50195  -0.094596   0.558032   0.3212770   0.0019213  -0.000078   0.000041   0.000206   0.000242  0.0000015  0.0000086    0.000212    0.000214
+1996   4  23  50196  -0.091251   0.559752   0.3193675   0.0018977  -0.000053   0.000030   0.000189   0.000201  0.0000014  0.0000086    0.000203    0.000199
+1996   4  24  50197  -0.088007   0.561911   0.3174416   0.0019267  -0.000055   0.000016   0.000144   0.000142  0.0000012  0.0000092    0.000194    0.000184
+1996   4  25  50198  -0.084012   0.563345   0.3154805   0.0019871  -0.000045   0.000019   0.000133   0.000123  0.0000015  0.0000098    0.000330    0.000266
+1996   4  26  50199  -0.080936   0.564495   0.3134611   0.0020666  -0.000153   0.000006   0.000193   0.000206  0.0000017  0.0000098    0.000266    0.000205
+1996   4  27  50200  -0.076705   0.566021   0.3113520   0.0021915  -0.000194   0.000025   0.000249   0.000303  0.0000017  0.0000098    0.000199    0.000157
+1996   4  28  50201  -0.072416   0.567387   0.3091220   0.0023079  -0.000123   0.000081   0.000246   0.000274  0.0000017  0.0000098    0.000218    0.000183
+1996   4  29  50202  -0.068046   0.569913   0.3067555   0.0024052  -0.000043   0.000127   0.000205   0.000197  0.0000018  0.0000092    0.000238    0.000209
+1996   4  30  50203  -0.063903   0.572215   0.3042630   0.0025035  -0.000007   0.000143   0.000250   0.000211  0.0000018  0.0000092    0.000258    0.000235
+1996   5   1  50204  -0.059776   0.574531   0.3016796   0.0025904  -0.000031   0.000128   0.000231   0.000182  0.0000019  0.0000098    0.000278    0.000261
+1996   5   2  50205  -0.056376   0.576544   0.2990551   0.0026189  -0.000246   0.000023   0.000159   0.000139  0.0000019  0.0000098    0.000375    0.000288
+1996   5   3  50206  -0.053417   0.577915   0.2964423   0.0025799  -0.000259   0.000020   0.000207   0.000179  0.0000020  0.0000098    0.000412    0.000303
+1996   5   4  50207  -0.049635   0.579902   0.2938871   0.0025025  -0.000061   0.000112   0.000242   0.000241  0.0000022  0.0000098    0.000406    0.000310
+1996   5   5  50208  -0.045761   0.580799   0.2914173   0.0024151   0.000185   0.000208   0.000233   0.000250  0.0000024  0.0000092    0.000400    0.000318
+1996   5   6  50209  -0.041636   0.581982   0.2890316   0.0023353   0.000343   0.000234   0.000224   0.000233  0.0000025  0.0000086    0.000394    0.000326
+1996   5   7  50210  -0.038205   0.583506   0.2866973   0.0023301   0.000306   0.000146   0.000200   0.000208  0.0000027  0.0000086    0.000388    0.000333
+1996   5   8  50211  -0.033679   0.584603   0.2843599   0.0023784  -0.000153  -0.000158   0.000179   0.000171  0.0000029  0.0000086    0.000310    0.000369
+1996   5   9  50212  -0.029505   0.585987   0.2819638   0.0024541  -0.000530  -0.000378   0.000172   0.000163  0.0000028  0.0000092    0.000286    0.000365
+1996   5  10  50213  -0.024742   0.587200   0.2794731   0.0025607  -0.000776  -0.000481   0.000195   0.000171  0.0000026  0.0000098    0.000279    0.000346
+1996   5  11  50214  -0.020909   0.588219   0.2768848   0.0026873  -0.000863  -0.000458   0.000241   0.000202  0.0000024  0.0000098    0.000272    0.000328
+1996   5  12  50215  -0.016043   0.589187   0.2742284   0.0027130  -0.000791  -0.000332   0.000269   0.000229  0.0000022  0.0000098    0.000266    0.000310
+1996   5  13  50216  -0.011924   0.589935   0.2715563   0.0026752  -0.000606  -0.000166   0.000240   0.000199  0.0000020  0.0000098    0.000259    0.000291
+1996   5  14  50217  -0.007134   0.591203   0.2689291   0.0025768  -0.000378  -0.000029   0.000199   0.000173  0.0000017  0.0000092    0.000253    0.000273
+1996   5  15  50218  -0.003604   0.591727   0.2664034   0.0024300  -0.000174   0.000035   0.000157   0.000156  0.0000015  0.0000086    0.000246    0.000255
+1996   5  16  50219   0.000191   0.592632   0.2640214   0.0022479  -0.000039  -0.000029   0.000152   0.000158  0.0000017  0.0000092    0.000128    0.000155
+1996   5  17  50220   0.003173   0.593071   0.2618067   0.0020333  -0.000016  -0.000085   0.000209   0.000234  0.0000020  0.0000098    0.000099    0.000138
+1996   5  18  50221   0.006775   0.594189   0.2597630   0.0019104  -0.000079  -0.000087   0.000249   0.000287  0.0000023  0.0000104    0.000132    0.000176
+1996   5  19  50222   0.009785   0.594326   0.2578750   0.0018504  -0.000165  -0.000044   0.000267   0.000273  0.0000026  0.0000098    0.000165    0.000213
+1996   5  20  50223   0.012969   0.595179   0.2561120   0.0017528  -0.000213   0.000033   0.000284   0.000270  0.0000029  0.0000086    0.000199    0.000251
+1996   5  21  50224   0.016974   0.595290   0.2544309   0.0016642  -0.000180   0.000111   0.000232   0.000213  0.0000031  0.0000086    0.000232    0.000289
+1996   5  22  50225   0.020501   0.595469   0.2527831   0.0016594  -0.000013   0.000141   0.000182   0.000163  0.0000025  0.0000092    0.000317    0.000358
+1996   5  23  50226   0.025021   0.595304   0.2511212   0.0016839   0.000180   0.000120   0.000197   0.000180  0.0000024  0.0000098    0.000333    0.000370
+1996   5  24  50227   0.029426   0.595342   0.2494091   0.0017366   0.000363   0.000051   0.000216   0.000212  0.0000025  0.0000098    0.000325    0.000362
+1996   5  25  50228   0.034670   0.595542   0.2476273   0.0018080   0.000490  -0.000042   0.000254   0.000258  0.0000026  0.0000098    0.000317    0.000354
+1996   5  26  50229   0.039451   0.595729   0.2457728   0.0019106   0.000528  -0.000129   0.000315   0.000323  0.0000027  0.0000092    0.000309    0.000346
+1996   5  27  50230   0.045137   0.595694   0.2438561   0.0019823   0.000466  -0.000182   0.000314   0.000320  0.0000027  0.0000086    0.000301    0.000338
+1996   5  28  50231   0.049983   0.596151   0.2418983   0.0019956   0.000318  -0.000187   0.000259   0.000248  0.0000028  0.0000086    0.000293    0.000329
+1996   5  29  50232   0.054062   0.596654   0.2399295   0.0019615   0.000122  -0.000148   0.000198   0.000182  0.0000029  0.0000086    0.000285    0.000321
+1996   5  30  50233   0.057654   0.596950   0.2379874   0.0019005  -0.000069  -0.000054   0.000149   0.000118  0.0000031  0.0000086    0.000272    0.000237
+1996   5  31  50234   0.061574   0.596617   0.2361105   0.0018211  -0.000232  -0.000008   0.000117   0.000088  0.0000021  0.0000086    0.000206    0.000187
+1996   6   1  50235   0.065396   0.596429   0.2343298   0.0017208  -0.000280  -0.000002   0.000173   0.000187  0.0000014  0.0000086    0.000171    0.000185
+1996   6   2  50236   0.070047   0.595382   0.2326423   0.0016390  -0.000212  -0.000004   0.000247   0.000284  0.0000014  0.0000092    0.000177    0.000194
+1996   6   3  50237   0.074720   0.594773   0.2309989   0.0016189  -0.000098   0.000002   0.000216   0.000243  0.0000015  0.0000098    0.000182    0.000203
+1996   6   4  50238   0.078469   0.594147   0.2293297   0.0016813  -0.000005   0.000029   0.000169   0.000166  0.0000015  0.0000098    0.000187    0.000212
+1996   6   5  50239   0.082538   0.592504   0.2275791   0.0017826   0.000032   0.000106   0.000142   0.000124  0.0000025  0.0000098    0.000239    0.000288
+1996   6   6  50240   0.086756   0.591397   0.2257304   0.0018870  -0.000071   0.000147   0.000160   0.000139  0.0000029  0.0000098    0.000207    0.000252
+1996   6   7  50241   0.090919   0.590227   0.2237940   0.0019739  -0.000216   0.000139   0.000179   0.000157  0.0000032  0.0000098    0.000146    0.000177
+1996   6   8  50242   0.094459   0.589408   0.2217912   0.0020421  -0.000309   0.000082   0.000171   0.000169  0.0000034  0.0000098    0.000085    0.000101
+1996   6   9  50243   0.098086   0.588007   0.2197491   0.0020701  -0.000230  -0.000011   0.000159   0.000168  0.0000036  0.0000098    0.000130    0.000194
+1996   6  10  50244   0.101246   0.586552   0.2177049   0.0020541  -0.000074  -0.000094   0.000126   0.000134  0.0000038  0.0000098    0.000228    0.000371
+1996   6  11  50245   0.104836   0.585276   0.2157093   0.0019660   0.000027  -0.000123   0.000098   0.000089  0.0000040  0.0000098    0.000326    0.000548
+1996   6  12  50246   0.109219   0.583478   0.2138179   0.0018321  -0.000200  -0.000085   0.000089   0.000071  0.0000023  0.0000098    0.000263    0.000318
+1996   6  13  50247   0.113429   0.582217   0.2120722   0.0016527  -0.000344   0.000050   0.000084   0.000074  0.0000017  0.0000098    0.000216    0.000242
+1996   6  14  50248   0.118178   0.580560   0.2104827   0.0014964  -0.000279   0.000162   0.000068   0.000071  0.0000015  0.0000098    0.000176    0.000188
+1996   6  15  50249   0.122009   0.579134   0.2090374   0.0013629  -0.000143   0.000167   0.000087   0.000104  0.0000014  0.0000098    0.000166    0.000157
+1996   6  16  50250   0.126519   0.576999   0.2077176   0.0012898  -0.000078   0.000076   0.000164   0.000226  0.0000014  0.0000092    0.000190    0.000185
+1996   6  17  50251   0.130315   0.575084   0.2064940   0.0012279  -0.000038  -0.000038   0.000202   0.000266  0.0000015  0.0000092    0.000213    0.000212
+1996   6  18  50252   0.134392   0.573736   0.2053133   0.0011881  -0.000036  -0.000103   0.000173   0.000190  0.0000015  0.0000098    0.000237    0.000240
+1996   6  19  50253   0.137866   0.571380   0.2041040   0.0012053  -0.000065  -0.000068   0.000148   0.000138  0.0000016  0.0000098    0.000260    0.000267
+1996   6  20  50254   0.141681   0.569445   0.2028061   0.0012799  -0.000082   0.000126   0.000176   0.000164  0.0000040  0.0000098    0.000362    0.000433
+1996   6  21  50255   0.145495   0.567625   0.2014018   0.0013744  -0.000102   0.000354   0.000227   0.000187  0.0000073  0.0000098    0.000490    0.000645
+1996   6  22  50256   0.149141   0.566516   0.1999160   0.0014793  -0.000158   0.000427   0.000237   0.000186  0.0000076  0.0000098    0.000604    0.000732
+1996   6  23  50257   0.153230   0.565108   0.1983906   0.0015705  -0.000222   0.000355   0.000229   0.000216  0.0000067  0.0000098    0.000712    0.000769
+1996   6  24  50258   0.156194   0.563847   0.1968569   0.0016215  -0.000263   0.000202   0.000201   0.000176  0.0000058  0.0000104    0.000820    0.000806
+1996   6  25  50259   0.160151   0.562237   0.1953276   0.0015918  -0.000263   0.000038   0.000181   0.000145  0.0000049  0.0000104    0.000928    0.000842
+1996   6  26  50260   0.162933   0.560802   0.1938078   0.0015322  -0.000187   0.000007   0.000159   0.000133  0.0000019  0.0000111    0.000365    0.000336
+1996   6  27  50261   0.166555   0.557744   0.1923125   0.0014773  -0.000118  -0.000003   0.000189   0.000143  0.0000009  0.0000111    0.000159    0.000149
+1996   6  28  50262   0.169358   0.555400   0.1908731   0.0013923  -0.000073   0.000012   0.000159   0.000133  0.0000007  0.0000098    0.000093    0.000086
+1996   6  29  50263   0.172559   0.552501   0.1895225   0.0012725  -0.000067   0.000040   0.000227   0.000189  0.0000010  0.0000098    0.000125    0.000112
+1996   6  30  50264   0.175871   0.550042   0.1882705   0.0011738  -0.000102   0.000070   0.000394   0.000299  0.0000014  0.0000098    0.000167    0.000145
+1996   7   1  50265   0.179867   0.547115   0.1870893   0.0011324  -0.000166   0.000094   0.000328   0.000276  0.0000018  0.0000104    0.000210    0.000179
+1996   7   2  50266   0.182239   0.544937   0.1859196   0.0011603  -0.000238   0.000118   0.000227   0.000221  0.0000022  0.0000111    0.000251    0.000213
+1996   7   3  50267   0.185895   0.541864   0.1846966   0.0012919  -0.000293   0.000140   0.000164   0.000147  0.0000026  0.0000104    0.000294    0.000246
+1996   7   4  50268   0.188053   0.539038   0.1833814   0.0014305  -0.000309   0.000166   0.000150   0.000126  0.0000026  0.0000098    0.000294    0.000251
+1996   7   5  50269   0.192488   0.536014   0.1819792   0.0014860  -0.000283   0.000188   0.000193   0.000169  0.0000024  0.0000092    0.000281    0.000245
+1996   7   6  50270   0.195915   0.533126   0.1805349   0.0014692  -0.000226   0.000197   0.000239   0.000202  0.0000022  0.0000086    0.000268    0.000240
+1996   7   7  50271   0.200128   0.531021   0.1791101   0.0013841  -0.000159   0.000188   0.000237   0.000216  0.0000020  0.0000086    0.000255    0.000235
+1996   7   8  50272   0.203633   0.528873   0.1777576   0.0012842  -0.000105   0.000157   0.000190   0.000203  0.0000018  0.0000086    0.000242    0.000229
+1996   7   9  50273   0.208138   0.526783   0.1765091   0.0011677  -0.000085   0.000109   0.000167   0.000163  0.0000016  0.0000086    0.000229    0.000224
+1996   7  10  50274   0.211232   0.524542   0.1753765   0.0010336  -0.000106   0.000057   0.000138   0.000119  0.0000014  0.0000086    0.000216    0.000218
+1996   7  11  50275   0.215288   0.521585   0.1743600   0.0009152  -0.000168   0.000008   0.000148   0.000123  0.0000028  0.0000092    0.000273    0.000311
+1996   7  12  50276   0.218586   0.518872   0.1734501   0.0008397  -0.000240  -0.000020   0.000150   0.000140  0.0000048  0.0000092    0.000355    0.000437
+1996   7  13  50277   0.222028   0.515784   0.1726202   0.0008148  -0.000285  -0.000014   0.000216   0.000381  0.0000047  0.0000092    0.000337    0.000415
+1996   7  14  50278   0.224765   0.512845   0.1718215   0.0008124  -0.000287   0.000021   0.000274   0.000485  0.0000043  0.0000092    0.000299    0.000363
+1996   7  15  50279   0.227686   0.509455   0.1709989   0.0008623  -0.000245   0.000071   0.000217   0.000309  0.0000038  0.0000086    0.000261    0.000311
+1996   7  16  50280   0.230501   0.506711   0.1701158   0.0009450  -0.000178   0.000124   0.000184   0.000220  0.0000033  0.0000086    0.000223    0.000259
+1996   7  17  50281   0.233153   0.503337   0.1691660   0.0010036  -0.000035   0.000179   0.000151   0.000145  0.0000018  0.0000086    0.000234    0.000218
+1996   7  18  50282   0.235308   0.500890   0.1681624   0.0010649  -0.000078   0.000181   0.000166   0.000163  0.0000034  0.0000092    0.000345    0.000317
+1996   7  19  50283   0.237319   0.497817   0.1670851   0.0011352  -0.000100   0.000207   0.000200   0.000221  0.0000039  0.0000098    0.000367    0.000345
+1996   7  20  50284   0.239122   0.495251   0.1659129   0.0011931  -0.000072   0.000245   0.000216   0.000242  0.0000033  0.0000098    0.000328    0.000314
+1996   7  21  50285   0.240282   0.492266   0.1646550   0.0012811  -0.000041   0.000252   0.000208   0.000249  0.0000027  0.0000098    0.000288    0.000283
+1996   7  22  50286   0.241538   0.489437   0.1633437   0.0013373  -0.000023   0.000211   0.000176   0.000233  0.0000022  0.0000092    0.000249    0.000252
+1996   7  23  50287   0.242853   0.486342   0.1620133   0.0013501  -0.000027   0.000131   0.000138   0.000161  0.0000016  0.0000092    0.000210    0.000221
+1996   7  24  50288   0.243982   0.483616   0.1606815   0.0013435  -0.000143  -0.000082   0.000136   0.000134  0.0000024  0.0000092    0.000309    0.000247
+1996   7  25  50289   0.245558   0.480934   0.1593486   0.0013319  -0.000156  -0.000086   0.000168   0.000171  0.0000019  0.0000086    0.000244    0.000196
+1996   7  26  50290   0.247028   0.478343   0.1580321   0.0012899  -0.000122   0.000028   0.000121   0.000134  0.0000009  0.0000086    0.000119    0.000119
+1996   7  27  50291   0.248791   0.474911   0.1567562   0.0012388  -0.000143   0.000082   0.000144   0.000177  0.0000010  0.0000086    0.000145    0.000134
+1996   7  28  50292   0.250768   0.471768   0.1555121   0.0012214  -0.000184   0.000103   0.000288   0.000390  0.0000012  0.0000086    0.000186    0.000158
+1996   7  29  50293   0.252710   0.468721   0.1542471   0.0012601  -0.000230   0.000090   0.000305   0.000455  0.0000014  0.0000086    0.000227    0.000182
+1996   7  30  50294   0.254441   0.466714   0.1528866   0.0013775  -0.000255   0.000061   0.000240   0.000343  0.0000016  0.0000092    0.000269    0.000206
+1996   7  31  50295   0.256287   0.463499   0.1513774   0.0015591  -0.000233   0.000051   0.000188   0.000235  0.0000018  0.0000092    0.000309    0.000230
+1996   8   1  50296   0.257624   0.460658   0.1497236   0.0017237  -0.000142   0.000100   0.000176   0.000234  0.0000020  0.0000086    0.000320    0.000238
+1996   8   2  50297   0.259675   0.457382   0.1479916   0.0017925  -0.000008   0.000199   0.000195   0.000239  0.0000021  0.0000086    0.000321    0.000241
+1996   8   3  50298   0.260580   0.454012   0.1462811   0.0017136   0.000126   0.000318   0.000251   0.000337  0.0000022  0.0000086    0.000321    0.000243
+1996   8   4  50299   0.262362   0.449695   0.1446843   0.0015289   0.000209   0.000413   0.000241   0.000334  0.0000023  0.0000086    0.000322    0.000245
+1996   8   5  50300   0.263332   0.445958   0.1432584   0.0013263   0.000200   0.000445   0.000163   0.000168  0.0000024  0.0000086    0.000323    0.000248
+1996   8   6  50301   0.265247   0.441680   0.1420242   0.0011404   0.000089   0.000391   0.000159   0.000146  0.0000025  0.0000086    0.000323    0.000250
+1996   8   7  50302   0.267281   0.437702   0.1409779   0.0009423  -0.000095   0.000264   0.000154   0.000134  0.0000026  0.0000092    0.000324    0.000253
+1996   8   8  50303   0.269944   0.433417   0.1400997   0.0007990  -0.000352   0.000065   0.000166   0.000140  0.0000034  0.0000092    0.000600    0.000514
+1996   8   9  50304   0.272365   0.430203   0.1393525   0.0007138  -0.000481  -0.000068   0.000192   0.000189  0.0000035  0.0000092    0.000570    0.000483
+1996   8  10  50305   0.274513   0.426370   0.1386809   0.0006298  -0.000457  -0.000097   0.000224   0.000238  0.0000033  0.0000092    0.000339    0.000262
+1996   8  11  50306   0.276239   0.422591   0.1380231   0.0006298  -0.000343  -0.000047   0.000218   0.000225  0.0000030  0.0000086    0.000153    0.000085
+1996   8  12  50307   0.277657   0.419881   0.1373313   0.0007168  -0.000212   0.000052   0.000208   0.000190  0.0000027  0.0000086    0.000190    0.000126
+1996   8  13  50308   0.279638   0.415981   0.1365805   0.0007819  -0.000113   0.000106   0.000187   0.000150  0.0000024  0.0000086    0.000226    0.000168
+1996   8  14  50309   0.282061   0.412678   0.1357613   0.0008595  -0.000124  -0.000025   0.000133   0.000103  0.0000022  0.0000092    0.000267    0.000209
+1996   8  15  50310   0.284046   0.408818   0.1348658   0.0009591  -0.000158  -0.000145   0.000132   0.000101  0.0000021  0.0000092    0.000270    0.000214
+1996   8  16  50311   0.286170   0.405689   0.1338846   0.0010502  -0.000200  -0.000236   0.000163   0.000145  0.0000019  0.0000092    0.000260    0.000208
+1996   8  17  50312   0.287244   0.401761   0.1328161   0.0011257  -0.000228  -0.000277   0.000151   0.000160  0.0000017  0.0000092    0.000249    0.000202
+1996   8  18  50313   0.288926   0.397942   0.1316767   0.0011886  -0.000223  -0.000256   0.000194   0.000234  0.0000016  0.0000086    0.000239    0.000195
+1996   8  19  50314   0.289984   0.394609   0.1304969   0.0011840  -0.000182  -0.000187   0.000223   0.000288  0.0000014  0.0000086    0.000229    0.000189
+1996   8  20  50315   0.291316   0.391439   0.1293079   0.0011706  -0.000112  -0.000105   0.000172   0.000233  0.0000013  0.0000092    0.000219    0.000182
+1996   8  21  50316   0.292621   0.387828   0.1281298   0.0011491  -0.000031  -0.000043   0.000145   0.000168  0.0000011  0.0000092    0.000208    0.000176
+1996   8  22  50317   0.293791   0.383870   0.1269708   0.0011186   0.000043  -0.000031   0.000157   0.000167  0.0000013  0.0000086    0.000209    0.000187
+1996   8  23  50318   0.294983   0.380686   0.1258320   0.0011139   0.000098  -0.000062   0.000200   0.000226  0.0000017  0.0000086    0.000214    0.000204
+1996   8  24  50319   0.295955   0.377254   0.1247077   0.0011368   0.000128  -0.000111   0.000224   0.000279  0.0000021  0.0000092    0.000218    0.000221
+1996   8  25  50320   0.296752   0.373770   0.1235756   0.0011744   0.000128  -0.000151   0.000220   0.000309  0.0000025  0.0000098    0.000222    0.000237
+1996   8  26  50321   0.296867   0.369821   0.1223881   0.0012512   0.000094  -0.000153   0.000182   0.000246  0.0000029  0.0000098    0.000226    0.000254
+1996   8  27  50322   0.297386   0.365518   0.1210781   0.0013675   0.000017  -0.000107   0.000137   0.000161  0.0000032  0.0000098    0.000231    0.000271
+1996   8  28  50323   0.297408   0.361507   0.1195864   0.0015469  -0.000050  -0.000003   0.000115   0.000124  0.0000022  0.0000098    0.000288    0.000291
+1996   8  29  50324   0.298126   0.356985   0.1178993   0.0017568  -0.000244   0.000086   0.000095   0.000097  0.0000013  0.0000098    0.000149    0.000140
+1996   8  30  50325   0.298255   0.352447   0.1160864   0.0018513  -0.000420   0.000128   0.000127   0.000106  0.0000010  0.0000098    0.000103    0.000095
+1996   8  31  50326   0.297881   0.348211   0.1142679   0.0018126  -0.000514   0.000126   0.000205   0.000156  0.0000010  0.0000098    0.000137    0.000132
+1996   9   1  50327   0.297180   0.343648   0.1125570   0.0016541  -0.000508   0.000103   0.000204   0.000162  0.0000010  0.0000098    0.000171    0.000168
+1996   9   2  50328   0.297084   0.339291   0.1110239   0.0014387  -0.000399   0.000086   0.000184   0.000153  0.0000010  0.0000098    0.000204    0.000204
+1996   9   3  50329   0.296468   0.334532   0.1096843   0.0012440  -0.000223   0.000089   0.000169   0.000147  0.0000010  0.0000098    0.000238    0.000241
+1996   9   4  50330   0.295866   0.330375   0.1085143   0.0011012  -0.000012   0.000156   0.000132   0.000116  0.0000010  0.0000098    0.000208    0.000195
+1996   9   5  50331   0.295320   0.326474   0.1074696   0.0009973   0.000111   0.000180   0.000107   0.000095  0.0000010  0.0000104    0.000229    0.000216
+1996   9   6  50332   0.294964   0.322278   0.1065186   0.0009441   0.000108   0.000145   0.000106   0.000106  0.0000010  0.0000104    0.000259    0.000235
+1996   9   7  50333   0.294100   0.318315   0.1055812   0.0009322   0.000031   0.000128   0.000119   0.000115  0.0000009  0.0000104    0.000253    0.000231
+1996   9   8  50334   0.293634   0.314226   0.1046228   0.0009612  -0.000110   0.000072   0.000167   0.000166  0.0000011  0.0000104    0.000254    0.000224
+1996   9   9  50335   0.292800   0.310606   0.1036271   0.0010348  -0.000241   0.000000   0.000203   0.000197  0.0000014  0.0000098    0.000265    0.000217
+1996   9  10  50336   0.292453   0.306681   0.1025294   0.0011941  -0.000285  -0.000035   0.000183   0.000184  0.0000018  0.0000104    0.000275    0.000209
+1996   9  11  50337   0.292127   0.303190   0.1012457   0.0014056  -0.000143   0.000043   0.000161   0.000168  0.0000021  0.0000111    0.000277    0.000236
+1996   9  12  50338   0.291411   0.299609   0.0997283   0.0016064   0.000028   0.000108   0.000150   0.000132  0.0000022  0.0000117    0.000198    0.000233
+1996   9  13  50339   0.290296   0.296038   0.0980183   0.0017189   0.000202   0.000155   0.000195   0.000200  0.0000021  0.0000117    0.000168    0.000226
+1996   9  14  50340   0.289192   0.292254   0.0962100   0.0017741   0.000332   0.000175   0.000266   0.000262  0.0000018  0.0000104    0.000177    0.000223
+1996   9  15  50341   0.287662   0.288389   0.0943921   0.0017718   0.000374   0.000158   0.000234   0.000225  0.0000015  0.0000098    0.000185    0.000220
+1996   9  16  50342   0.286320   0.283910   0.0926171   0.0017511   0.000324   0.000112   0.000176   0.000193  0.0000012  0.0000098    0.000193    0.000217
+1996   9  17  50343   0.284735   0.279662   0.0909011   0.0017431   0.000213   0.000053   0.000142   0.000145  0.0000009  0.0000098    0.000202    0.000214
+1996   9  18  50344   0.283866   0.275298   0.0892456   0.0016681   0.000023   0.000000   0.000115   0.000102  0.0000010  0.0000092    0.000193    0.000188
+1996   9  19  50345   0.282799   0.271256   0.0876496   0.0015959  -0.000021  -0.000018   0.000111   0.000091  0.0000009  0.0000086    0.000201    0.000187
+1996   9  20  50346   0.282696   0.267080   0.0860797   0.0015931   0.000030  -0.000020   0.000104   0.000088  0.0000008  0.0000086    0.000201    0.000189
+1996   9  21  50347   0.281846   0.263792   0.0844844   0.0016389   0.000049   0.000009   0.000106   0.000085  0.0000008  0.0000086    0.000181    0.000178
+1996   9  22  50348   0.281779   0.260698   0.0828108   0.0017329   0.000062   0.000052   0.000158   0.000116  0.0000014  0.0000086    0.000231    0.000215
+1996   9  23  50349   0.280580   0.257665   0.0809953   0.0019138   0.000073   0.000086   0.000182   0.000157  0.0000022  0.0000086    0.000319    0.000277
+1996   9  24  50350   0.278988   0.253946   0.0789860   0.0021024   0.000065   0.000096   0.000181   0.000156  0.0000028  0.0000086    0.000377    0.000318
+1996   9  25  50351   0.277228   0.250341   0.0767840   0.0022509   0.000048   0.000057   0.000170   0.000125  0.0000016  0.0000080    0.000232    0.000213
+1996   9  26  50352   0.275925   0.246410   0.0744605   0.0023544   0.000008   0.000057   0.000154   0.000135  0.0000013  0.0000080    0.000169    0.000159
+1996   9  27  50353   0.273751   0.242942   0.0721195   0.0023518  -0.000041   0.000079   0.000166   0.000166  0.0000012  0.0000086    0.000133    0.000122
+1996   9  28  50354   0.272177   0.238666   0.0698526   0.0022185  -0.000088   0.000103   0.000198   0.000187  0.0000011  0.0000086    0.000097    0.000084
+1996   9  29  50355   0.270583   0.234861   0.0677075   0.0020755  -0.000118   0.000124   0.000160   0.000156  0.0000010  0.0000190    0.000061    0.000047
+1996   9  30  50356   0.268522   0.231509   0.0656871   0.0019573  -0.000124   0.000105   0.000116   0.000119  0.0000009  0.0000301    0.000100    0.000092
+1996  10   1  50357   0.267263   0.227861   0.0637798   0.0018422  -0.000102   0.000083   0.000130   0.000120  0.0000008  0.0000307    0.000176    0.000176
+1996  10   2  50358   0.265508   0.224461   0.0619880   0.0017191  -0.000018   0.000149   0.000112   0.000103  0.0000010  0.0000307    0.000196    0.000179
+1996  10   3  50359   0.263816   0.220521   0.0603266   0.0016168   0.000043   0.000226   0.000104   0.000094  0.0000009  0.0000307    0.000194    0.000195
+1996  10   4  50360   0.261432   0.216770   0.0587570   0.0015705   0.000062   0.000254   0.000093   0.000083  0.0000007  0.0000307    0.000184    0.000180
+1996  10   5  50361   0.260080   0.212833   0.0571991   0.0015772   0.000049   0.000204   0.000097   0.000081  0.0000007  0.0000307    0.000170    0.000164
+1996  10   6  50362   0.257573   0.209823   0.0555995   0.0016150   0.000036   0.000121   0.000155   0.000135  0.0000016  0.0000307    0.000238    0.000219
+1996  10   7  50363   0.255982   0.206198   0.0539391   0.0016731   0.000017   0.000049   0.000198   0.000172  0.0000029  0.0000307    0.000347    0.000305
+1996  10   8  50364   0.254014   0.203404   0.0522075   0.0017617  -0.000021   0.000015   0.000183   0.000164  0.0000043  0.0000313    0.000457    0.000391
+1996  10   9  50365   0.252060   0.200576   0.0503868   0.0018762  -0.000110   0.000071   0.000164   0.000158  0.0000023  0.0000313    0.000281    0.000251
+1996  10  10  50366   0.249531   0.198117   0.0484513   0.0019892  -0.000181   0.000137   0.000156   0.000148  0.0000020  0.0000301    0.000285    0.000253
+1996  10  11  50367   0.247156   0.195137   0.0464104   0.0020697  -0.000236   0.000198   0.000167   0.000159  0.0000023  0.0000295    0.000356    0.000308
+1996  10  12  50368   0.244663   0.191876   0.0443070   0.0020994  -0.000291   0.000234   0.000174   0.000169  0.0000020  0.0000307    0.000325    0.000287
+1996  10  13  50369   0.242169   0.188703   0.0421852   0.0021333  -0.000300   0.000247   0.000158   0.000152  0.0000016  0.0000326    0.000295    0.000266
+1996  10  14  50370   0.240139   0.185968   0.0400796   0.0021228  -0.000246   0.000245   0.000135   0.000131  0.0000013  0.0000332    0.000264    0.000245
+1996  10  15  50371   0.237181   0.182782   0.0380151   0.0020546  -0.000142   0.000234   0.000122   0.000112  0.0000009  0.0000313    0.000234    0.000224
+1996  10  16  50372   0.235295   0.180080   0.0360096   0.0019730   0.000053   0.000258   0.000111   0.000091  0.0000013  0.0000289    0.000219    0.000225
+1996  10  17  50373   0.232667   0.177298   0.0340695   0.0019068   0.000140   0.000232   0.000106   0.000086  0.0000010  0.0000283    0.000205    0.000209
+1996  10  18  50374   0.230613   0.174860   0.0321838   0.0018982   0.000075   0.000194   0.000104   0.000089  0.0000008  0.0000283    0.000191    0.000199
+1996  10  19  50375   0.227725   0.171954   0.0302719   0.0019635   0.000063   0.000164   0.000108   0.000097  0.0000008  0.0000276    0.000193    0.000189
+1996  10  20  50376   0.225107   0.169693   0.0282492   0.0020887   0.000027   0.000199   0.000230   0.000212  0.0000018  0.0000264    0.000214    0.000219
+1996  10  21  50377   0.222377   0.167356   0.0260921   0.0021941  -0.000026   0.000263   0.000291   0.000306  0.0000032  0.0000252    0.000241    0.000272
+1996  10  22  50378   0.220341   0.164976   0.0238253   0.0023031  -0.000036   0.000290   0.000207   0.000241  0.0000046  0.0000240    0.000268    0.000324
+1996  10  23  50379   0.217225   0.161839   0.0214880   0.0023950   0.000057   0.000200   0.000157   0.000159  0.0000021  0.0000233    0.000221    0.000235
+1996  10  24  50380   0.214137   0.159244   0.0191065   0.0024206   0.000140   0.000058   0.000146   0.000134  0.0000014  0.0000233    0.000211    0.000213
+1996  10  25  50381   0.210696   0.156104   0.0167149   0.0024013   0.000200  -0.000105   0.000158   0.000154  0.0000014  0.0000233    0.000214    0.000215
+1996  10  26  50382   0.208664   0.153088   0.0143663   0.0023074   0.000223  -0.000243   0.000212   0.000230  0.0000014  0.0000221    0.000216    0.000218
+1996  10  27  50383   0.206390   0.149667   0.0121216   0.0021534   0.000208  -0.000307   0.000361   0.000438  0.0000014  0.0000209    0.000220    0.000220
+1996  10  28  50384   0.204198   0.146793   0.0100280   0.0019961   0.000166  -0.000272   0.000369   0.000453  0.0000014  0.0000209    0.000222    0.000223
+1996  10  29  50385   0.202608   0.144309   0.0081029   0.0018198   0.000120  -0.000147   0.000271   0.000289  0.0000014  0.0000209    0.000225    0.000226
+1996  10  30  50386   0.199535   0.141297   0.0063303   0.0016881   0.000091   0.000019   0.000202   0.000195  0.0000014  0.0000203    0.000228    0.000228
+1996  10  31  50387   0.197504   0.138256   0.0046689   0.0016334   0.000092   0.000233   0.000099   0.000096  0.0000013  0.0000197    0.000136    0.000136
+1996  11   1  50388   0.193878   0.135544   0.0030617   0.0016302   0.000122   0.000283   0.000149   0.000143  0.0000012  0.0000190    0.000112    0.000119
+1996  11   2  50389   0.191244   0.132613   0.0014439   0.0016681   0.000157   0.000188   0.000256   0.000301  0.0000011  0.0000184    0.000138    0.000155
+1996  11   3  50390   0.188501   0.129413  -0.0002469   0.0017402   0.000175   0.000050   0.000252   0.000309  0.0000010  0.0000184    0.000164    0.000191
+1996  11   4  50391   0.185277   0.127170  -0.0020571   0.0018576   0.000165  -0.000056   0.000207   0.000240  0.0000010  0.0000184    0.000190    0.000227
+1996  11   5  50392   0.181934   0.124716  -0.0040034   0.0019742   0.000119   0.000049   0.000166   0.000198  0.0000009  0.0000197    0.000223    0.000225
+1996  11   6  50393   0.178121   0.122770  -0.0060668   0.0020864   0.000053   0.000101   0.000151   0.000147  0.0000013  0.0000215    0.000206    0.000223
+1996  11   7  50394   0.174080   0.121288  -0.0082003   0.0021708   0.000045   0.000096   0.000139   0.000138  0.0000011  0.0000221    0.000221    0.000236
+1996  11   8  50395   0.169873   0.119269  -0.0103836   0.0021812   0.000120   0.000089   0.000090   0.000100  0.0000009  0.0000209    0.000225    0.000238
+1996  11   9  50396   0.166082   0.117514  -0.0125632   0.0021574   0.000176   0.000122   0.000044   0.000053  0.0000007  0.0000184    0.000176    0.000179
+1996  11  10  50397   0.162436   0.114975  -0.0146905   0.0020999   0.000158   0.000148   0.000154   0.000170  0.0000007  0.0000172    0.000158    0.000156
+1996  11  11  50398   0.158553   0.113253  -0.0167668   0.0020639   0.000094   0.000137   0.000256   0.000234  0.0000007  0.0000172    0.000165    0.000164
+1996  11  12  50399   0.154363   0.112458  -0.0188144   0.0020442   0.000022   0.000095   0.000158   0.000127  0.0000008  0.0000172    0.000171    0.000172
+1996  11  13  50400   0.150431   0.110958  -0.0208385   0.0019927   0.000008  -0.000040   0.000098   0.000098  0.0000010  0.0000178    0.000200    0.000218
+1996  11  14  50401   0.146107   0.110204  -0.0228106   0.0019259   0.000013  -0.000065   0.000088   0.000086  0.0000009  0.0000184    0.000148    0.000165
+1996  11  15  50402   0.141314   0.108357  -0.0246929   0.0018639   0.000037  -0.000005   0.000053   0.000061  0.0000009  0.0000190    0.000126    0.000148
+1996  11  16  50403   0.137208   0.106581  -0.0265360   0.0018781   0.000080   0.000063   0.000054   0.000060  0.0000009  0.0000190    0.000110    0.000137
+1996  11  17  50404   0.134058   0.104364  -0.0284328   0.0019729   0.000057   0.000137   0.000150   0.000114  0.0000010  0.0000184    0.000121    0.000151
+1996  11  18  50405   0.131502   0.102865  -0.0304398   0.0020723  -0.000017   0.000199   0.000203   0.000144  0.0000013  0.0000184    0.000152    0.000183
+1996  11  19  50406   0.127997   0.101681  -0.0325567   0.0021140  -0.000087   0.000223   0.000152   0.000106  0.0000016  0.0000184    0.000182    0.000215
+1996  11  20  50407   0.124639   0.100780  -0.0347329   0.0021536  -0.000115   0.000209   0.000135   0.000096  0.0000019  0.0000178    0.000213    0.000248
+1996  11  21  50408   0.122040   0.099404  -0.0368994   0.0021277  -0.000037   0.000131   0.000117   0.000103  0.0000036  0.0000166    0.000569    0.000398
+1996  11  22  50409   0.119316   0.098964  -0.0389991   0.0020477   0.000070   0.000106   0.000080   0.000079  0.0000020  0.0000160    0.000337    0.000231
+1996  11  23  50410   0.115948   0.098037  -0.0409865   0.0019089   0.000132   0.000096   0.000105   0.000105  0.0000009  0.0000166    0.000127    0.000107
+1996  11  24  50411   0.112681   0.097011  -0.0428391   0.0017914   0.000146   0.000071   0.000244   0.000246  0.0000016  0.0000172    0.000197    0.000149
+1996  11  25  50412   0.108926   0.096017  -0.0445682   0.0016899   0.000145   0.000056   0.000253   0.000258  0.0000023  0.0000172    0.000267    0.000191
+1996  11  26  50413   0.105177   0.095250  -0.0462095   0.0016230   0.000152   0.000049   0.000168   0.000176  0.0000030  0.0000178    0.000337    0.000233
+1996  11  27  50414   0.101445   0.094956  -0.0478061   0.0015980   0.000237   0.000061   0.000144   0.000136  0.0000017  0.0000190    0.000225    0.000203
+1996  11  28  50415   0.097441   0.094072  -0.0493929   0.0015953   0.000282   0.000065   0.000168   0.000172  0.0000012  0.0000203    0.000183    0.000190
+1996  11  29  50416   0.093646   0.093616  -0.0509908   0.0015764   0.000291   0.000058   0.000184   0.000235  0.0000012  0.0000221    0.000178    0.000188
+1996  11  30  50417   0.089336   0.093259  -0.0526091   0.0015921   0.000275   0.000037   0.000222   0.000321  0.0000011  0.0000246    0.000173    0.000185
+1996  12   1  50418   0.085715   0.092193  -0.0542501   0.0016601   0.000243   0.000009   0.000236   0.000307  0.0000011  0.0000264    0.000168    0.000182
+1996  12   2  50419   0.082100   0.091657  -0.0559153   0.0017038   0.000200  -0.000020   0.000204   0.000173  0.0000010  0.0000270    0.000163    0.000180
+1996  12   3  50420   0.079086   0.090728  -0.0576095   0.0017110   0.000142  -0.000037   0.000158   0.000123  0.0000010  0.0000270    0.000158    0.000177
+1996  12   4  50421   0.074885   0.090821  -0.0593414   0.0017320   0.000172  -0.000045   0.000100   0.000105  0.0000020  0.0000270    0.000265    0.000277
+1996  12   5  50422   0.071086   0.089852  -0.0611178   0.0017852   0.000028   0.000014   0.000079   0.000086  0.0000020  0.0000264    0.000162    0.000192
+1996  12   6  50423   0.066266   0.089595  -0.0629258   0.0018254  -0.000252   0.000062   0.000134   0.000150  0.0000020  0.0000258    0.000155    0.000160
+1996  12   7  50424   0.062227   0.088622  -0.0647297   0.0018123  -0.000353   0.000115   0.000417   0.000404  0.0000022  0.0000252    0.000199    0.000201
+1996  12   8  50425   0.058705   0.088323  -0.0664887   0.0017089  -0.000229   0.000166   0.000611   0.000548  0.0000024  0.0000240    0.000218    0.000248
+1996  12   9  50426   0.054636   0.087144  -0.0681824   0.0016633  -0.000023   0.000172   0.000423   0.000340  0.0000026  0.0000227    0.000236    0.000295
+1996  12  10  50427   0.050835   0.085716  -0.0698244   0.0016426   0.000167   0.000116   0.000205   0.000137  0.0000028  0.0000215    0.000255    0.000342
+1996  12  11  50428   0.046636   0.085370  -0.0714534   0.0016621   0.000132  -0.000031   0.000156   0.000120  0.0000014  0.0000197    0.000199    0.000230
+1996  12  12  50429   0.042972   0.085232  -0.0731144   0.0016933   0.000075  -0.000164   0.000249   0.000164  0.0000011  0.0000178    0.000184    0.000201
+1996  12  13  50430   0.039601   0.085341  -0.0748475   0.0017809   0.000004  -0.000257   0.000328   0.000194  0.0000012  0.0000166    0.000185    0.000203
+1996  12  14  50431   0.036526   0.085288  -0.0766828   0.0018843  -0.000059  -0.000292   0.000250   0.000184  0.0000013  0.0000160    0.000185    0.000205
+1996  12  15  50432   0.034106   0.086236  -0.0786365   0.0020253  -0.000084  -0.000260   0.000246   0.000180  0.0000014  0.0000160    0.000187    0.000208
+1996  12  16  50433   0.030588   0.086428  -0.0807037   0.0021356  -0.000068  -0.000178   0.000226   0.000164  0.0000014  0.0000160    0.000187    0.000210
+1996  12  17  50434   0.027707   0.087468  -0.0828541   0.0021796  -0.000027  -0.000069   0.000164   0.000158  0.0000015  0.0000160    0.000188    0.000212
+1996  12  18  50435   0.024610   0.087893  -0.0850345   0.0021706   0.000012   0.000035   0.000158   0.000138  0.0000016  0.0000160    0.000189    0.000214
+1996  12  19  50436   0.021473   0.088759  -0.0871824   0.0021361   0.000020   0.000107   0.000146   0.000138  0.0000021  0.0000160    0.000228    0.000231
+1996  12  20  50437   0.018028   0.089407  -0.0892451   0.0020378  -0.000011   0.000139   0.000146   0.000133  0.0000026  0.0000160    0.000280    0.000252
+1996  12  21  50438   0.015143   0.090024  -0.0911972   0.0019177  -0.000074   0.000135   0.000180   0.000128  0.0000032  0.0000160    0.000331    0.000274
+1996  12  22  50439   0.012185   0.090234  -0.0930491   0.0018099  -0.000149   0.000108   0.000210   0.000166  0.0000037  0.0000160    0.000383    0.000295
+1996  12  23  50440   0.010542   0.091025  -0.0948390   0.0017396  -0.000211   0.000076   0.000186   0.000179  0.0000043  0.0000160    0.000434    0.000317
+1996  12  24  50441   0.007368   0.091577  -0.0966103   0.0017090  -0.000235   0.000054   0.000192   0.000181  0.0000048  0.0000160    0.000486    0.000338
+1996  12  25  50442   0.004812   0.092237  -0.0983865   0.0016824  -0.000205   0.000052   0.000284   0.000299  0.0000046  0.0000166    0.000462    0.000329
+1996  12  26  50443   0.001746   0.092408  -0.1001618   0.0016881  -0.000130   0.000067   0.000271   0.000353  0.0000042  0.0000166    0.000430    0.000318
+1996  12  27  50444  -0.001978   0.092672  -0.1019150   0.0017158  -0.000019   0.000089   0.000840   0.001133  0.0000356  0.0000167    0.000285    0.000299
+1996  12  28  50445  -0.005714   0.092649  -0.1036497   0.0017751   0.000083   0.000104   0.000942   0.001432  0.0000393  0.0000160    0.000299    0.000322
+1996  12  29  50446  -0.010032   0.092942  -0.1054004   0.0018396   0.000143   0.000097   0.000684   0.001017  0.0000382  0.0000160    0.000295    0.000315
+1996  12  30  50447  -0.014631   0.094294  -0.1071951   0.0018932   0.000160   0.000072   0.000323   0.000306  0.0000370  0.0000173    0.000290    0.000308
+1996  12  31  50448  -0.019091   0.094752  -0.1090616   0.0019515   0.000134   0.000031   0.000326   0.000312  0.0000359  0.0000180    0.000286    0.000301
+1997   1   1  50449  -0.023197   0.095311  -0.1110080   0.0019734   0.000076  -0.000019   0.000335   0.000320  0.0000347  0.0000186    0.000282    0.000294
+1997   1   2  50450  -0.026897   0.095777  -0.1130154   0.0019902   0.000003  -0.000065   0.000171   0.000165  0.0000168  0.0000096    0.000111    0.000115
+1997   1   3  50451  -0.030416   0.096700  -0.1150426   0.0019487  -0.000061  -0.000096   0.000172   0.000165  0.0000162  0.0000093    0.000109    0.000112
+1997   1   4  50452  -0.033641   0.097913  -0.1170440   0.0019349  -0.000094  -0.000106   0.000170   0.000162  0.0000157  0.0000090    0.000107    0.000109
+1997   1   5  50453  -0.036691   0.099285  -0.1189857   0.0018959  -0.000080  -0.000097   0.000176   0.000167  0.0000151  0.0000090    0.000106    0.000106
+1997   1   6  50454  -0.040164   0.101002  -0.1208588   0.0018426  -0.000020  -0.000074   0.000183   0.000167  0.0000145  0.0000090    0.000104    0.000104
+1997   1   7  50455  -0.044064   0.102369  -0.1226852   0.0018399   0.000072  -0.000050   0.000179   0.000166  0.0000139  0.0000090    0.000102    0.000101
+1997   1   8  50456  -0.047403   0.103456  -0.1245117   0.0018655   0.000164  -0.000039   0.000162   0.000159  0.0000134  0.0000090    0.000101    0.000098
+1997   1   9  50457  -0.050317   0.104434  -0.1263903   0.0019168   0.000248  -0.000035   0.000148   0.000147  0.0000095  0.0000093    0.000093    0.000095
+1997   1  10  50458  -0.053168   0.105818  -0.1283568   0.0020124   0.000233  -0.000065   0.000156   0.000158  0.0000081  0.0000096    0.000064    0.000067
+1997   1  11  50459  -0.055972   0.107116  -0.1304219   0.0021175   0.000129  -0.000099   0.000153   0.000159  0.0000081  0.0000096    0.000033    0.000038
+1997   1  12  50460  -0.058917   0.108082  -0.1325762   0.0021827  -0.000020  -0.000098   0.000148   0.000151  0.0000081  0.0000093    0.000037    0.000043
+1997   1  13  50461  -0.061864   0.109472  -0.1347955   0.0022573  -0.000109  -0.000076   0.000146   0.000149  0.0000081  0.0000090    0.000050    0.000054
+1997   1  14  50462  -0.063944   0.110641  -0.1370386   0.0022495  -0.000123  -0.000037   0.000139   0.000143  0.0000081  0.0000087    0.000062    0.000065
+1997   1  15  50463  -0.066121   0.112435  -0.1392468   0.0021524  -0.000041   0.000004   0.000135   0.000140  0.0000082  0.0000087    0.000075    0.000077
+1997   1  16  50464  -0.067984   0.114282  -0.1413542   0.0020367   0.000123   0.000029   0.000136   0.000145  0.0000082  0.0000096    0.000079    0.000080
+1997   1  17  50465  -0.069867   0.116474  -0.1433093   0.0019083   0.000327   0.000032   0.000147   0.000152  0.0000083  0.0000103    0.000080    0.000081
+1997   1  18  50466  -0.071819   0.118480  -0.1450940   0.0017240   0.000516   0.000018   0.000158   0.000159  0.0000084  0.0000106    0.000081    0.000083
+1997   1  19  50467  -0.073958   0.120455  -0.1467285   0.0015782   0.000636  -0.000005   0.000175   0.000174  0.0000084  0.0000112    0.000082    0.000084
+1997   1  20  50468  -0.076406   0.122785  -0.1482599   0.0014757   0.000648  -0.000023   0.000191   0.000183  0.0000085  0.0000116    0.000084    0.000085
+1997   1  21  50469  -0.079611   0.124896  -0.1497389   0.0014348   0.000544  -0.000025   0.000186   0.000179  0.0000086  0.0000119    0.000085    0.000086
+1997   1  22  50470  -0.082246   0.126546  -0.1511994   0.0014210   0.000349  -0.000007   0.000174   0.000171  0.0000087  0.0000132    0.000086    0.000087
+1997   1  23  50471  -0.084928   0.128708  -0.1526517   0.0014578   0.000088   0.000032   0.000170   0.000161  0.0000064  0.0000141    0.000093    0.000093
+1997   1  24  50472  -0.087471   0.130440  -0.1540977   0.0014980  -0.000116   0.000065   0.000169   0.000162  0.0000058  0.0000141    0.000093    0.000093
+1997   1  25  50473  -0.090366   0.132374  -0.1555555   0.0015122  -0.000217   0.000083   0.000174   0.000172  0.0000062  0.0000141    0.000090    0.000091
+1997   1  26  50474  -0.093525   0.133949  -0.1570643   0.0015739  -0.000208   0.000079   0.000178   0.000175  0.0000065  0.0000144    0.000088    0.000088
+1997   1  27  50475  -0.096737   0.135693  -0.1586577   0.0016317  -0.000112   0.000053   0.000189   0.000177  0.0000068  0.0000148    0.000085    0.000086
+1997   1  28  50476  -0.099457   0.137355  -0.1603276   0.0016501   0.000025   0.000007   0.000189   0.000173  0.0000071  0.0000148    0.000082    0.000083
+1997   1  29  50477  -0.102635   0.139686  -0.1620162   0.0016558   0.000146  -0.000051   0.000164   0.000155  0.0000074  0.0000144    0.000080    0.000081
+1997   1  30  50478  -0.105579   0.141159  -0.1636490   0.0015612   0.000249  -0.000102   0.000163   0.000151  0.0000066  0.0000138    0.000170    0.000239
+1997   1  31  50479  -0.108198   0.143328  -0.1651839   0.0015073   0.000181  -0.000170   0.000133   0.000125  0.0000053  0.0000135    0.000100    0.000135
+1997   2   1  50480  -0.111062   0.145649  -0.1666240   0.0014077   0.000091  -0.000217   0.000132   0.000124  0.0000051  0.0000132    0.000048    0.000044
+1997   2   2  50481  -0.114231   0.147797  -0.1679911   0.0013031   0.000062  -0.000225   0.000159   0.000144  0.0000056  0.0000125    0.000076    0.000072
+1997   2   3  50482  -0.117138   0.149821  -0.1693034   0.0012504   0.000066  -0.000204   0.000137   0.000126  0.0000062  0.0000119    0.000103    0.000101
+1997   2   4  50483  -0.119827   0.152206  -0.1705865   0.0012782   0.000097  -0.000153   0.000133   0.000124  0.0000067  0.0000112    0.000131    0.000130
+1997   2   5  50484  -0.122580   0.154576  -0.1718956   0.0013723   0.000094  -0.000135   0.000131   0.000125  0.0000100  0.0000109    0.000114    0.000113
+1997   2   6  50485  -0.124754   0.157068  -0.1733134   0.0015551   0.000117  -0.000001   0.000126   0.000120  0.0000106  0.0000109    0.000080    0.000090
+1997   2   7  50486  -0.126807   0.159205  -0.1749053   0.0017080   0.000122   0.000164   0.000127   0.000122  0.0000101  0.0000112    0.000048    0.000071
+1997   2   8  50487  -0.128382   0.161460  -0.1766906   0.0019068   0.000060   0.000236   0.000132   0.000126  0.0000096  0.0000116    0.000057    0.000077
+1997   2   9  50488  -0.130396   0.164363  -0.1786465   0.0020332  -0.000009   0.000239   0.000136   0.000130  0.0000091  0.0000109    0.000065    0.000084
+1997   2  10  50489  -0.132276   0.167177  -0.1807227   0.0020804  -0.000052   0.000178   0.000134   0.000134  0.0000086  0.0000106    0.000074    0.000091
+1997   2  11  50490  -0.134236   0.170031  -0.1828464   0.0020799  -0.000042   0.000081   0.000130   0.000134  0.0000081  0.0000109    0.000083    0.000098
+1997   2  12  50491  -0.136176   0.172877  -0.1849288   0.0020228   0.000063  -0.000026   0.000129   0.000130  0.0000076  0.0000109    0.000076    0.000093
+1997   2  13  50492  -0.138555   0.175460  -0.1868886   0.0018616   0.000149  -0.000079   0.000126   0.000123  0.0000077  0.0000109    0.000055    0.000074
+1997   2  14  50493  -0.140394   0.178006  -0.1886879   0.0016973   0.000186  -0.000096   0.000127   0.000126  0.0000080  0.0000109    0.000037    0.000056
+1997   2  15  50494  -0.142397   0.181149  -0.1903445   0.0016142   0.000158  -0.000113   0.000127   0.000131  0.0000083  0.0000106    0.000048    0.000066
+1997   2  16  50495  -0.144725   0.183935  -0.1919115   0.0015543   0.000085  -0.000115   0.000122   0.000127  0.0000086  0.0000099    0.000060    0.000076
+1997   2  17  50496  -0.147302   0.186455  -0.1934446   0.0015202   0.000002  -0.000107   0.000120   0.000122  0.0000089  0.0000096    0.000071    0.000086
+1997   2  18  50497  -0.150101   0.188912  -0.1949824   0.0015278  -0.000049  -0.000085   0.000123   0.000124  0.0000092  0.0000099    0.000082    0.000097
+1997   2  19  50498  -0.152615   0.191248  -0.1965486   0.0015724  -0.000042  -0.000050   0.000117   0.000119  0.0000095  0.0000106    0.000094    0.000107
+1997   2  20  50499  -0.154850   0.193424  -0.1981628   0.0016369   0.000041  -0.000001   0.000119   0.000120  0.0000101  0.0000116    0.000095    0.000120
+1997   2  21  50500  -0.157095   0.195719  -0.1998474   0.0017438   0.000152   0.000045   0.000126   0.000125  0.0000109  0.0000125    0.000093    0.000134
+1997   2  22  50501  -0.158828   0.198080  -0.2016223   0.0018382   0.000216   0.000057   0.000132   0.000131  0.0000114  0.0000132    0.000101    0.000137
+1997   2  23  50502  -0.160462   0.200788  -0.2034939   0.0019290   0.000221   0.000035   0.000136   0.000133  0.0000120  0.0000106    0.000110    0.000138
+1997   2  24  50503  -0.161768   0.203660  -0.2054493   0.0020226   0.000163  -0.000023   0.000140   0.000138  0.0000125  0.0000106    0.000119    0.000140
+1997   2  25  50504  -0.163086   0.207018  -0.2074606   0.0020357   0.000058  -0.000108   0.000154   0.000147  0.0000131  0.0000138    0.000127    0.000142
+1997   2  26  50505  -0.165179   0.210254  -0.2094962   0.0020033  -0.000062  -0.000207   0.000145   0.000139  0.0000136  0.0000153    0.000136    0.000144
+1997   2  27  50506  -0.167683   0.213858  -0.2115328   0.0020017  -0.000161  -0.000302   0.000140   0.000140  0.0000133  0.0000145    0.000136    0.000142
+1997   2  28  50507  -0.170096   0.217032  -0.2135594   0.0020356  -0.000214  -0.000377   0.000148   0.000148  0.0000127  0.0000111    0.000135    0.000138
+1997   3   1  50508  -0.172043   0.220014  -0.2155750   0.0020451  -0.000213  -0.000425   0.000150   0.000152  0.0000122  0.0000109    0.000133    0.000135
+1997   3   2  50509  -0.173849   0.223275  -0.2175836   0.0020292  -0.000160  -0.000441   0.000151   0.000158  0.0000116  0.0000142    0.000132    0.000131
+1997   3   3  50510  -0.175075   0.226475  -0.2195960   0.0020250  -0.000071  -0.000429   0.000149   0.000159  0.0000111  0.0000168    0.000130    0.000128
+1997   3   4  50511  -0.175648   0.229878  -0.2216368   0.0020485   0.000034  -0.000402   0.000152   0.000158  0.0000105  0.0000164    0.000128    0.000124
+1997   3   5  50512  -0.176311   0.233073  -0.2237501   0.0021411   0.000130  -0.000371   0.000150   0.000153  0.0000099  0.0000147    0.000127    0.000120
+1997   3   6  50513  -0.176972   0.236400  -0.2259936   0.0023127   0.000195  -0.000354   0.000154   0.000152  0.0000098  0.0000144    0.000123    0.000118
+1997   3   7  50514  -0.178340   0.239653  -0.2284170   0.0025101   0.000217  -0.000354   0.000155   0.000153  0.0000097  0.0000167    0.000120    0.000115
+1997   3   8  50515  -0.180046   0.242888  -0.2310354   0.0027003   0.000194  -0.000368   0.000158   0.000155  0.0000096  0.0000166    0.000117    0.000113
+1997   3   9  50516  -0.182116   0.245883  -0.2338138   0.0028503   0.000137  -0.000376   0.000158   0.000155  0.0000096  0.0000138    0.000113    0.000111
+1997   3  10  50517  -0.183987   0.248943  -0.2366740   0.0028809   0.000066  -0.000353   0.000146   0.000145  0.0000095  0.0000127    0.000109    0.000108
+1997   3  11  50518  -0.185847   0.251860  -0.2395225   0.0028241   0.000008  -0.000269   0.000143   0.000140  0.0000095  0.0000141    0.000106    0.000106
+1997   3  12  50519  -0.186537   0.255087  -0.2422825   0.0026865  -0.000011  -0.000108   0.000138   0.000135  0.0000094  0.0000150    0.000103    0.000103
+1997   3  13  50520  -0.186600   0.258341  -0.2449140   0.0025352   0.000033   0.000133   0.000142   0.000133  0.0000094  0.0000117    0.000102    0.000104
+1997   3  14  50521  -0.186516   0.262011  -0.2474145   0.0024143   0.000125   0.000401   0.000155   0.000141  0.0000095  0.0000069    0.000102    0.000105
+1997   3  15  50522  -0.186176   0.265786  -0.2498081   0.0023647   0.000233   0.000624   0.000164   0.000150  0.0000095  0.0000081    0.000103    0.000106
+1997   3  16  50523  -0.186406   0.270164  -0.2521329   0.0023370   0.000314   0.000725   0.000164   0.000149  0.0000095  0.0000081    0.000103    0.000106
+1997   3  17  50524  -0.187615   0.274276  -0.2544347   0.0023480   0.000335   0.000662   0.000161   0.000146  0.0000096  0.0000105    0.000103    0.000107
+1997   3  18  50525  -0.188396   0.277836  -0.2567594   0.0023658   0.000289   0.000450   0.000160   0.000144  0.0000096  0.0000141    0.000103    0.000108
+1997   3  19  50526  -0.188697   0.281237  -0.2591407   0.0024028   0.000105   0.000007   0.000146   0.000132  0.0000097  0.0000113    0.000086    0.000082
+1997   3  20  50527  -0.188857   0.285084  -0.2615878   0.0024243   0.000062  -0.000185   0.000136   0.000123  0.0000074  0.0000109    0.000089    0.000088
+1997   3  21  50528  -0.189304   0.288621  -0.2640833   0.0024663   0.000051  -0.000293   0.000148   0.000130  0.0000069  0.0000192    0.000091    0.000091
+1997   3  22  50529  -0.189367   0.292380  -0.2666037   0.0025028   0.000049  -0.000333   0.000160   0.000138  0.0000073  0.0000207    0.000091    0.000090
+1997   3  23  50530  -0.189544   0.296181  -0.2691365   0.0025486   0.000052  -0.000298   0.000162   0.000142  0.0000077  0.0000114    0.000090    0.000089
+1997   3  24  50531  -0.189513   0.299658  -0.2716819   0.0025806   0.000042  -0.000229   0.000158   0.000142  0.0000082  0.0000116    0.000089    0.000088
+1997   3  25  50532  -0.189284   0.303666  -0.2742393   0.0025697   0.000017  -0.000163   0.000160   0.000145  0.0000086  0.0000146    0.000088    0.000086
+1997   3  26  50533  -0.189419   0.307776  -0.2767937   0.0025439  -0.000044  -0.000128   0.000158   0.000140  0.0000086  0.0000160    0.000093    0.000083
+1997   3  27  50534  -0.189983   0.311592  -0.2793146   0.0024796  -0.000048  -0.000121   0.000156   0.000138  0.0000082  0.0000158    0.000086    0.000076
+1997   3  28  50535  -0.190318   0.315414  -0.2817800   0.0024261  -0.000006  -0.000139   0.000164   0.000144  0.0000076  0.0000149    0.000076    0.000068
+1997   3  29  50536  -0.190616   0.319256  -0.2841911   0.0024289   0.000055  -0.000169   0.000170   0.000152  0.0000070  0.0000156    0.000066    0.000060
+1997   3  30  50537  -0.191016   0.323265  -0.2865730   0.0023904   0.000109  -0.000198   0.000174   0.000153  0.0000064  0.0000163    0.000056    0.000052
+1997   3  31  50538  -0.191362   0.326350  -0.2889623   0.0023863   0.000129  -0.000215   0.000164   0.000147  0.0000057  0.0000178    0.000046    0.000044
+1997   4   1  50539  -0.191193   0.329507  -0.2913955   0.0024439   0.000112  -0.000220   0.000134   0.000129  0.0000051  0.0000188    0.000036    0.000036
+1997   4   2  50540  -0.190354   0.333047  -0.2939037   0.0025653  -0.000009  -0.000194   0.000118   0.000117  0.0000075  0.0000151    0.000082    0.000078
+1997   4   3  50541  -0.189316   0.336990  -0.2965122   0.0026676   0.000009  -0.000202   0.000135   0.000131  0.0000101  0.0000133    0.000102    0.000095
+1997   4   4  50542  -0.188320   0.340892  -0.2992548   0.0028188   0.000033  -0.000205   0.000143   0.000137  0.0000107  0.0000142    0.000104    0.000096
+1997   4   5  50543  -0.187108   0.344409  -0.3021373   0.0029525   0.000043  -0.000191   0.000157   0.000145  0.0000107  0.0000149    0.000103    0.000095
+1997   4   6  50544  -0.186300   0.348125  -0.3051094   0.0029631   0.000048  -0.000163   0.000169   0.000154  0.0000107  0.0000181    0.000103    0.000094
+1997   4   7  50545  -0.185520   0.351697  -0.3080782   0.0028890   0.000031  -0.000124   0.000167   0.000154  0.0000106  0.0000154    0.000103    0.000093
+1997   4   8  50546  -0.184703   0.355074  -0.3109451   0.0027910  -0.000020  -0.000086   0.000154   0.000144  0.0000106  0.0000131    0.000102    0.000092
+1997   4   9  50547  -0.183438   0.358488  -0.3136461   0.0026482  -0.000084  -0.000050   0.000135   0.000130  0.0000076  0.0000152    0.000084    0.000081
+1997   4  10  50548  -0.182638   0.362048  -0.3161719   0.0024763  -0.000224  -0.000058   0.000144   0.000140  0.0000072  0.0000141    0.000082    0.000080
+1997   4  11  50549  -0.181441   0.365781  -0.3185519   0.0023550  -0.000401  -0.000103   0.000163   0.000153  0.0000076  0.0000134    0.000085    0.000082
+1997   4  12  50550  -0.180139   0.369887  -0.3208304   0.0022759  -0.000559  -0.000168   0.000155   0.000143  0.0000080  0.0000114    0.000089    0.000083
+1997   4  13  50551  -0.179363   0.373662  -0.3230506   0.0021998  -0.000644  -0.000230   0.000144   0.000135  0.0000084  0.0000112    0.000092    0.000085
+1997   4  14  50552  -0.179214   0.377420  -0.3252482   0.0021779  -0.000618  -0.000263   0.000142   0.000135  0.0000088  0.0000144    0.000095    0.000087
+1997   4  15  50553  -0.179061   0.381137  -0.3274527   0.0021735  -0.000480  -0.000252   0.000140   0.000136  0.0000092  0.0000143    0.000099    0.000089
+1997   4  16  50554  -0.178525   0.384245  -0.3296876   0.0022195  -0.000278  -0.000197   0.000134   0.000132  0.0000096  0.0000147    0.000102    0.000091
+1997   4  17  50555  -0.177873   0.387259  -0.3319675   0.0022916   0.000000  -0.000091   0.000134   0.000136  0.0000068  0.0000148    0.000119    0.000147
+1997   4  18  50556  -0.177050   0.390140  -0.3342942   0.0023416   0.000073  -0.000014   0.000140   0.000144  0.0000074  0.0000119    0.000133    0.000165
+1997   4  19  50557  -0.175795   0.393437  -0.3366547   0.0023463  -0.000041   0.000017   0.000141   0.000145  0.0000097  0.0000114    0.000145    0.000162
+1997   4  20  50558  -0.174831   0.396976  -0.3390247   0.0023424  -0.000232   0.000012   0.000133   0.000134  0.0000119  0.0000125    0.000158    0.000159
+1997   4  21  50559  -0.173876   0.400428  -0.3413760   0.0023666  -0.000383  -0.000021   0.000127   0.000126  0.0000141  0.0000123    0.000169    0.000156
+1997   4  22  50560  -0.173147   0.404218  -0.3436818   0.0023046  -0.000396  -0.000064   0.000128   0.000126  0.0000164  0.0000120    0.000182    0.000154
+1997   4  23  50561  -0.172585   0.407670  -0.3459200   0.0022061  -0.000126  -0.000085   0.000122   0.000119  0.0000114  0.0000134    0.000138    0.000118
+1997   4  24  50562  -0.171856   0.411073  -0.3480768   0.0021281   0.000157  -0.000122   0.000119   0.000116  0.0000100  0.0000142    0.000125    0.000108
+1997   4  25  50563  -0.170606   0.414173  -0.3501499   0.0020577   0.000390  -0.000171   0.000125   0.000121  0.0000101  0.0000132    0.000124    0.000107
+1997   4  26  50564  -0.168819   0.417303  -0.3521515   0.0020001   0.000519  -0.000222   0.000129   0.000123  0.0000102  0.0000131    0.000123    0.000107
+1997   4  27  50565  -0.166827   0.420564  -0.3541100   0.0019604   0.000510  -0.000264   0.000130   0.000127  0.0000104  0.0000133    0.000122    0.000106
+1997   4  28  50566  -0.165340   0.423749  -0.3560655   0.0019628   0.000381  -0.000287   0.000129   0.000126  0.0000105  0.0000117    0.000121    0.000105
+1997   4  29  50567  -0.164245   0.426912  -0.3580613   0.0020024   0.000182  -0.000283   0.000123   0.000120  0.0000106  0.0000107    0.000120    0.000104
+1997   4  30  50568  -0.163434   0.429334  -0.3601352   0.0020987  -0.000020  -0.000254   0.000118   0.000117  0.0000107  0.0000108    0.000119    0.000104
+1997   5   1  50569  -0.162404   0.431750  -0.3623115   0.0022160  -0.000161  -0.000195   0.000122   0.000120  0.0000120  0.0000104    0.000136    0.000122
+1997   5   2  50570  -0.161087   0.434188  -0.3645977   0.0023254  -0.000222  -0.000157   0.000128   0.000127  0.0000122  0.0000088    0.000136    0.000128
+1997   5   3  50571  -0.158900   0.436788  -0.3669859   0.0024396  -0.000208  -0.000146   0.000126   0.000126  0.0000118  0.0000088    0.000130    0.000126
+1997   5   4  50572  -0.156575   0.439570  -0.3694516   0.0025254  -0.000145  -0.000150   0.000129   0.000124  0.0000115  0.0000110    0.000123    0.000125
+1997   5   5  50573  -0.153481   0.442739  -0.3719523   0.0024979  -0.000074  -0.000159   0.000131   0.000123  0.0000112  0.0000099    0.000116    0.000124
+1997   5   6  50574  -0.150637   0.446235  -0.3744323   0.0024369  -0.000034  -0.000166   0.000127   0.000120  0.0000108  0.0000099    0.000109    0.000122
+1997   5   7  50575  -0.147899   0.449611  -0.3768359   0.0023219  -0.000052  -0.000146   0.000119   0.000115  0.0000112  0.0000125    0.000137    0.000133
+1997   5   8  50576  -0.145333   0.452400  -0.3791226   0.0021965  -0.000130  -0.000157   0.000118   0.000114  0.0000111  0.0000131    0.000140    0.000132
+1997   5   9  50577  -0.142192   0.455308  -0.3812825   0.0020937  -0.000244  -0.000195   0.000123   0.000120  0.0000108  0.0000127    0.000135    0.000128
+1997   5  10  50578  -0.139241   0.458269  -0.3833348   0.0020245  -0.000358  -0.000246   0.000124   0.000123  0.0000106  0.0000126    0.000130    0.000123
+1997   5  11  50579  -0.136205   0.461278  -0.3853139   0.0019679  -0.000433  -0.000295   0.000116   0.000117  0.0000103  0.0000103    0.000125    0.000119
+1997   5  12  50580  -0.133681   0.464289  -0.3872542   0.0019565  -0.000439  -0.000320   0.000104   0.000108  0.0000100  0.0000087    0.000120    0.000114
+1997   5  13  50581  -0.131502   0.466869  -0.3891826   0.0019456  -0.000370  -0.000309   0.000101   0.000104  0.0000097  0.0000097    0.000115    0.000110
+1997   5  14  50582  -0.129561   0.469383  -0.3911173   0.0019512  -0.000245  -0.000264   0.000101   0.000103  0.0000094  0.0000091    0.000109    0.000105
+1997   5  15  50583  -0.127481   0.471622  -0.3930710   0.0019668  -0.000072  -0.000176   0.000102   0.000105  0.0000067  0.0000086    0.000099    0.000097
+1997   5  16  50584  -0.125095   0.473694  -0.3950524   0.0019924   0.000029  -0.000118   0.000106   0.000108  0.0000058  0.0000090    0.000088    0.000085
+1997   5  17  50585  -0.122414   0.475773  -0.3970673   0.0020229   0.000044  -0.000102   0.000112   0.000113  0.0000058  0.0000099    0.000077    0.000073
+1997   5  18  50586  -0.119460   0.477841  -0.3991168   0.0020611  -0.000004  -0.000121   0.000109   0.000108  0.0000059  0.0000096    0.000066    0.000061
+1997   5  19  50587  -0.116511   0.480560  -0.4011944   0.0020847  -0.000082  -0.000157   0.000105   0.000103  0.0000059  0.0000116    0.000056    0.000048
+1997   5  20  50588  -0.113697   0.483115  -0.4032853   0.0020999  -0.000152  -0.000186   0.000097   0.000096  0.0000059  0.0000127    0.000045    0.000036
+1997   5  21  50589  -0.110644   0.485829  -0.4053675   0.0020717  -0.000155  -0.000182   0.000094   0.000094  0.0000080  0.0000108    0.000065    0.000072
+1997   5  22  50590  -0.108190   0.488552  -0.4074182   0.0020191  -0.000155  -0.000146   0.000103   0.000100  0.0000089  0.0000117    0.000075    0.000085
+1997   5  23  50591  -0.105951   0.490841  -0.4094242   0.0019856  -0.000155  -0.000088   0.000105   0.000101  0.0000093  0.0000114    0.000080    0.000090
+1997   5  24  50592  -0.103635   0.492983  -0.4113922   0.0019682  -0.000160  -0.000028   0.000107   0.000104  0.0000097  0.0000097    0.000084    0.000095
+1997   5  25  50593  -0.101277   0.495362  -0.4133536   0.0019974  -0.000175   0.000006   0.000121   0.000120  0.0000101  0.0000124    0.000090    0.000100
+1997   5  26  50594  -0.099112   0.497473  -0.4153581   0.0020725  -0.000195  -0.000006   0.000134   0.000133  0.0000105  0.0000157    0.000094    0.000105
+1997   5  27  50595  -0.096770   0.499835  -0.4174588   0.0021639  -0.000210  -0.000079   0.000136   0.000134  0.0000109  0.0000133    0.000099    0.000109
+1997   5  28  50596  -0.094165   0.501902  -0.4196937   0.0023053  -0.000210  -0.000209   0.000130   0.000128  0.0000113  0.0000114    0.000104    0.000114
+1997   5  29  50597  -0.091594   0.503633  -0.4220711   0.0024434  -0.000189  -0.000378   0.000122   0.000119  0.0000115  0.0000119    0.000108    0.000118
+1997   5  30  50598  -0.089458   0.505882  -0.4245631   0.0025203  -0.000152  -0.000547   0.000121   0.000117  0.0000117  0.0000122    0.000111    0.000121
+1997   5  31  50599  -0.087332   0.507623  -0.4271102   0.0024993  -0.000114  -0.000670   0.000128   0.000126  0.0000119  0.0000109    0.000114    0.000124
+1997   6   1  50600  -0.084875   0.509919  -0.4296336   0.0024634  -0.000089  -0.000704   0.000123   0.000122  0.0000122  0.0000084    0.000117    0.000128
+1997   6   2  50601  -0.082575   0.511686  -0.4320536   0.0023445  -0.000085  -0.000623   0.000110   0.000108  0.0000124  0.0000100    0.000119    0.000131
+1997   6   3  50602  -0.080141   0.513337  -0.4343075   0.0021589  -0.000105  -0.000429   0.000109   0.000108  0.0000126  0.0000116    0.000122    0.000134
+1997   6   4  50603  -0.077336   0.514979  -0.4363626   0.0019463  -0.000151  -0.000136   0.000103   0.000103  0.0000089  0.0000108    0.000087    0.000101
+1997   6   5  50604  -0.074855   0.516599  -0.4382196   0.0017560  -0.000172   0.000176   0.000099   0.000101  0.0000084  0.0000108    0.000087    0.000099
+1997   6   6  50605  -0.072636   0.517722  -0.4399076   0.0016057  -0.000162   0.000450   0.000105   0.000108  0.0000090  0.0000106    0.000099    0.000109
+1997   6   7  50606  -0.070501   0.518855  -0.4414714   0.0015162  -0.000123   0.000635   0.000105   0.000109  0.0000096  0.0000108    0.000110    0.000118
+1997   6   8  50607  -0.067947   0.519435  -0.4429606   0.0014642  -0.000065   0.000697   0.000111   0.000115  0.0000102  0.0000103    0.000122    0.000128
+1997   6   9  50608  -0.065371   0.519803  -0.4444204   0.0014657  -0.000013   0.000623   0.000121   0.000126  0.0000108  0.0000102    0.000134    0.000137
+1997   6  10  50609  -0.061929   0.520159  -0.4458871   0.0015058   0.000011   0.000428   0.000120   0.000123  0.0000114  0.0000096    0.000146    0.000147
+1997   6  11  50610  -0.058041   0.521133  -0.4473847   0.0015685  -0.000011   0.000149   0.000119   0.000119  0.0000120  0.0000094    0.000157    0.000156
+1997   6  12  50611  -0.054129   0.522169  -0.4489230   0.0016070  -0.000085  -0.000161   0.000118   0.000121  0.0000118  0.0000096    0.000148    0.000146
+1997   6  13  50612  -0.050405   0.523798  -0.4504974   0.0016039  -0.000187  -0.000437   0.000119   0.000122  0.0000114  0.0000078    0.000131    0.000129
+1997   6  14  50613  -0.046756   0.525470  -0.4520908   0.0015869  -0.000281  -0.000623   0.000121   0.000124  0.0000109  0.0000096    0.000114    0.000113
+1997   6  15  50614  -0.043321   0.527038  -0.4536772   0.0015502  -0.000328  -0.000682   0.000120   0.000123  0.0000105  0.0000107    0.000097    0.000096
+1997   6  16  50615  -0.039729   0.528062  -0.4552246   0.0014798  -0.000302  -0.000608   0.000116   0.000119  0.0000101  0.0000083    0.000080    0.000079
+1997   6  17  50616  -0.036096   0.528745  -0.4566973   0.0013894  -0.000201  -0.000431   0.000114   0.000116  0.0000096  0.0000082    0.000064    0.000062
+1997   6  18  50617  -0.032369   0.529689  -0.4580611   0.0012579  -0.000017  -0.000176   0.000108   0.000110  0.0000092  0.0000088    0.000092    0.000089
+1997   6  19  50618  -0.028862   0.530344  -0.4592932   0.0011450   0.000139   0.000028   0.000110   0.000112  0.0000093  0.0000100    0.000103    0.000102
+1997   6  20  50619  -0.024908   0.531384  -0.4603955   0.0010392   0.000241   0.000143   0.000119   0.000120  0.0000096  0.0000115    0.000107    0.000108
+1997   6  21  50620  -0.021216   0.531954  -0.4614026   0.0009675   0.000283   0.000166   0.000117   0.000115  0.0000099  0.0000114    0.000110    0.000115
+1997   6  22  50621  -0.017109   0.532640  -0.4623778   0.0009934   0.000272   0.000114   0.000115   0.000111  0.0000102  0.0000095    0.000114    0.000122
+1997   6  23  50622  -0.012902   0.533124  -0.4633940   0.0011132   0.000232   0.000028   0.000117   0.000112  0.0000105  0.0000089    0.000117    0.000128
+1997   6  24  50623  -0.008664   0.533452  -0.4645080   0.0012149   0.000188  -0.000045   0.000117   0.000111  0.0000108  0.0000100    0.000121    0.000135
+1997   6  25  50624  -0.004888   0.533917  -0.4657407   0.0013032   0.000157  -0.000074   0.000114   0.000107  0.0000112  0.0000098    0.000125    0.000142
+1997   6  26  50625  -0.001215   0.534608  -0.4670709   0.0013698   0.000147  -0.000050   0.000114   0.000111  0.0000112  0.0000094    0.000125    0.000142
+1997   6  27  50626   0.002592   0.534977  -0.4684446   0.0013651   0.000147   0.000009   0.000118   0.000114  0.0000112  0.0000103    0.000123    0.000139
+1997   6  28  50627   0.006339   0.535385  -0.4697921   0.0013108   0.000142   0.000070   0.000117   0.000112  0.0000112  0.0000110    0.000122    0.000137
+1997   6  29  50628   0.010642   0.535343  -0.4710455   0.0011712   0.000122   0.000100   0.000121   0.000117  0.0000112  0.0000093    0.000120    0.000135
+1997   6  30  50629   0.014932   0.535816  -0.4721535   0.0010050   0.000085   0.000081   0.000124   0.000122  0.0000112  0.0000085    0.000119    0.000132
+1997   7   1  50630   0.019340   0.536433   0.5269097   0.0008630   0.000039   0.000012   0.000129   0.000128  0.0000112  0.0000092    0.000117    0.000130
+1997   7   2  50631   0.023456   0.537042   0.5261387   0.0007066  -0.000001  -0.000085   0.000127   0.000130  0.0000112  0.0000085    0.000116    0.000128
+1997   7   3  50632   0.027864   0.537116   0.5254994   0.0005831  -0.000020  -0.000181   0.000120   0.000127  0.0000111  0.0000093    0.000116    0.000128
+1997   7   4  50633   0.031305   0.537062   0.5249386   0.0005168  -0.000019  -0.000248   0.000125   0.000128  0.0000109  0.0000112    0.000117    0.000130
+1997   7   5  50634   0.035298   0.536740   0.5243985   0.0005230  -0.000009  -0.000271   0.000129   0.000131  0.0000107  0.0000108    0.000117    0.000132
+1997   7   6  50635   0.038844   0.536304   0.5238302   0.0005919  -0.000008  -0.000253   0.000125   0.000130  0.0000105  0.0000110    0.000118    0.000133
+1997   7   7  50636   0.042671   0.535549   0.5232008   0.0006941  -0.000031  -0.000208   0.000121   0.000124  0.0000104  0.0000126    0.000119    0.000135
+1997   7   8  50637   0.046555   0.534975   0.5224910   0.0008101  -0.000083  -0.000161   0.000118   0.000121  0.0000102  0.0000142    0.000120    0.000136
+1997   7   9  50638   0.050967   0.534609   0.5216906   0.0008801  -0.000150  -0.000127   0.000112   0.000118  0.0000100  0.0000135    0.000120    0.000138
+1997   7  10  50639   0.054916   0.534157   0.5207943   0.0009250  -0.000249  -0.000132   0.000110   0.000116  0.0000104  0.0000135    0.000152    0.000148
+1997   7  11  50640   0.058452   0.533941   0.5198047   0.0010008  -0.000247  -0.000131   0.000111   0.000114  0.0000109  0.0000137    0.000158    0.000153
+1997   7  12  50641   0.061655   0.533144   0.5187396   0.0010663  -0.000162  -0.000119   0.000115   0.000117  0.0000113  0.0000141    0.000150    0.000153
+1997   7  13  50642   0.065424   0.532520   0.5176326   0.0011008  -0.000059  -0.000101   0.000112   0.000115  0.0000117  0.0000108    0.000142    0.000154
+1997   7  14  50643   0.068916   0.531562   0.5165230   0.0011179   0.000008  -0.000076   0.000108   0.000108  0.0000121  0.0000096    0.000134    0.000155
+1997   7  15  50644   0.072706   0.530815   0.5154397   0.0011037   0.000005  -0.000043   0.000112   0.000111  0.0000125  0.0000121    0.000127    0.000155
+1997   7  16  50645   0.075911   0.529931   0.5143876   0.0010375  -0.000146  -0.000030   0.000109   0.000108  0.0000102  0.0000113    0.000107    0.000113
+1997   7  17  50646   0.078949   0.529463   0.5133416   0.0010255  -0.000236   0.000025   0.000105   0.000103  0.0000099  0.0000114    0.000107    0.000585
+1997   7  18  50647   0.081623   0.528779   0.5122573   0.0011073  -0.000253   0.000095   0.000112   0.000110  0.0000101  0.0000115    0.000116    0.001077
+1997   7  19  50648   0.084611   0.527946   0.5110819   0.0012181  -0.000198   0.000151   0.000115   0.000113  0.0000104  0.0000147    0.000124    0.000902
+1997   7  20  50649   0.087850   0.526884   0.5097669   0.0014014  -0.000097   0.000177   0.000115   0.000109  0.0000106  0.0000153    0.000132    0.000728
+1997   7  21  50650   0.091954   0.525766   0.5082793   0.0016225  -0.000003   0.000162   0.000115   0.000111  0.0000108  0.0000131    0.000140    0.000554
+1997   7  22  50651   0.095709   0.524605   0.5066097   0.0017907   0.000031   0.000105   0.000116   0.000115  0.0000111  0.0000092    0.000149    0.000379
+1997   7  23  50652   0.099167   0.523566   0.5047751   0.0019132  -0.000021   0.000020   0.000120   0.000117  0.0000113  0.0000103    0.000157    0.000205
+1997   7  24  50653   0.102242   0.522464   0.5028174   0.0020018  -0.000176  -0.000123   0.000119   0.000116  0.0000103  0.0000118    0.000841    0.000224
+1997   7  25  50654   0.105473   0.521698   0.5007990   0.0020098  -0.000356  -0.000141   0.000106   0.000105  0.0000076  0.0000126    0.000368    0.000108
+1997   7  26  50655   0.108113   0.521090   0.4988088   0.0019122  -0.000455  -0.000153   0.000107   0.000103  0.0000070  0.0000172    0.000050    0.000051
+1997   7  27  50656   0.110371   0.519959   0.4969340   0.0017756  -0.000455  -0.000178   0.000113   0.000108  0.0000076  0.0000177    0.000062    0.000061
+1997   7  28  50657   0.112668   0.518779   0.4952287   0.0016205  -0.000383  -0.000188   0.000106   0.000102  0.0000081  0.0000154    0.000074    0.000070
+1997   7  29  50658   0.114958   0.517244   0.4937041   0.0014592  -0.000286  -0.000172   0.000105   0.000101  0.0000087  0.0000127    0.000086    0.000080
+1997   7  30  50659   0.117711   0.515757   0.4923325   0.0013300  -0.000219  -0.000116   0.000104   0.000101  0.0000093  0.0000151    0.000098    0.000090
+1997   7  31  50660   0.120360   0.514741   0.4910629   0.0012496  -0.000234  -0.000009   0.000105   0.000101  0.0000094  0.0000168    0.000106    0.000097
+1997   8   1  50661   0.123449   0.513549   0.4898395   0.0012349  -0.000312   0.000120   0.000104   0.000099  0.0000094  0.0000161    0.000113    0.000104
+1997   8   2  50662   0.126385   0.512213   0.4886163   0.0012620  -0.000404   0.000233   0.000103   0.000100  0.0000094  0.0000167    0.000119    0.000110
+1997   8   3  50663   0.129681   0.510929   0.4873630   0.0012637  -0.000455   0.000289   0.000120   0.000123  0.0000094  0.0000171    0.000126    0.000117
+1997   8   4  50664   0.132427   0.509500   0.4860646   0.0012864  -0.000421   0.000264   0.000138   0.000145  0.0000094  0.0000140    0.000133    0.000124
+1997   8   5  50665   0.135259   0.507979   0.4847168   0.0013547  -0.000300   0.000163   0.000136   0.000140  0.0000094  0.0000128    0.000139    0.000130
+1997   8   6  50666   0.137878   0.506602   0.4833214   0.0014146  -0.000059  -0.000024   0.000127   0.000131  0.0000094  0.0000132    0.000106    0.000119
+1997   8   7  50667   0.140163   0.505456   0.4818846   0.0014477   0.000084  -0.000164   0.000125   0.000132  0.0000096  0.0000110    0.000099    0.000115
+1997   8   8  50668   0.142402   0.503814   0.4804201   0.0014637   0.000111  -0.000234   0.000131   0.000139  0.0000099  0.0000081    0.000104    0.000116
+1997   8   9  50669   0.144681   0.502297   0.4789498   0.0014749   0.000050  -0.000238   0.000131   0.000138  0.0000102  0.0000075    0.000109    0.000117
+1997   8  10  50670   0.147036   0.500393   0.4775020   0.0014478  -0.000056  -0.000198   0.000121   0.000126  0.0000105  0.0000106    0.000115    0.000118
+1997   8  11  50671   0.149140   0.498469   0.4761047   0.0013367  -0.000151  -0.000147   0.000114   0.000117  0.0000108  0.0000124    0.000120    0.000119
+1997   8  12  50672   0.151293   0.496316   0.4747792   0.0012673  -0.000206  -0.000119   0.000112   0.000114  0.0000111  0.0000117    0.000125    0.000120
+1997   8  13  50673   0.153598   0.494199   0.4735326   0.0012132  -0.000137  -0.000158   0.000112   0.000114  0.0000097  0.0000118    0.000105    0.000097
+1997   8  14  50674   0.155647   0.492201   0.4723521   0.0011805  -0.000176  -0.000199   0.000112   0.000116  0.0000094  0.0000108    0.000101    0.000094
+1997   8  15  50675   0.157814   0.489971   0.4711995   0.0011873  -0.000305  -0.000238   0.000113   0.000116  0.0000096  0.0000121    0.000103    0.000098
+1997   8  16  50676   0.159563   0.487993   0.4700122   0.0012675  -0.000476  -0.000267   0.000115   0.000116  0.0000098  0.0000176    0.000105    0.000102
+1997   8  17  50677   0.161388   0.485869   0.4687151   0.0013937  -0.000625  -0.000280   0.000120   0.000115  0.0000100  0.0000130    0.000108    0.000105
+1997   8  18  50678   0.163139   0.484060   0.4672437   0.0015764  -0.000681  -0.000277   0.000123   0.000116  0.0000102  0.0000100    0.000110    0.000109
+1997   8  19  50679   0.165121   0.481673   0.4655729   0.0017180  -0.000604  -0.000262   0.000121   0.000120  0.0000103  0.0000158    0.000112    0.000113
+1997   8  20  50680   0.167062   0.479566   0.4637360   0.0018368  -0.000417  -0.000230   0.000114   0.000116  0.0000105  0.0000180    0.000114    0.000116
+1997   8  21  50681   0.169180   0.477147   0.4618200   0.0019157  -0.000091  -0.000196   0.000114   0.000116  0.0000086  0.0000114    0.000187    0.000173
+1997   8  22  50682   0.171474   0.474828   0.4599358   0.0018568   0.000051  -0.000117   0.000120   0.000122  0.0000083  0.0000084    0.000191    0.000172
+1997   8  23  50683   0.174252   0.472410   0.4581735   0.0017074  -0.000012  -0.000007   0.000125   0.000126  0.0000090  0.0000134    0.000161    0.000143
+1997   8  24  50684   0.177101   0.470443   0.4565714   0.0015156  -0.000192   0.000101   0.000123   0.000126  0.0000096  0.0000138    0.000131    0.000114
+1997   8  25  50685   0.179752   0.468270   0.4551139   0.0013896  -0.000373   0.000164   0.000116   0.000121  0.0000102  0.0000143    0.000102    0.000085
+1997   8  26  50686   0.181905   0.466936   0.4537531   0.0013090  -0.000422   0.000138   0.000111   0.000119  0.0000108  0.0000130    0.000072    0.000056
+1997   8  27  50687   0.183840   0.465205   0.4524377   0.0012868  -0.000202   0.000010   0.000103   0.000113  0.0000114  0.0000152    0.000110    0.000096
+1997   8  28  50688   0.186067   0.463730   0.4511305   0.0013267   0.000208  -0.000246   0.000103   0.000113  0.0000114  0.0000193    0.000119    0.000108
+1997   8  29  50689   0.188347   0.461845   0.4498106   0.0013057   0.000713  -0.000566   0.000112   0.000118  0.0000111  0.0000169    0.000117    0.000109
+1997   8  30  50690   0.190448   0.459950   0.4484645   0.0013437   0.001169  -0.000861   0.000112   0.000115  0.0000109  0.0000151    0.000115    0.000110
+1997   8  31  50691   0.192603   0.458019   0.4470785   0.0013676   0.001426  -0.001038   0.000110   0.000115  0.0000107  0.0000118    0.000113    0.000110
+1997   9   1  50692   0.194945   0.456263   0.4456381   0.0014774   0.001383  -0.001029   0.000109   0.000113  0.0000104  0.0000127    0.000111    0.000111
+1997   9   2  50693   0.197590   0.454656   0.4441338   0.0015618   0.001024  -0.000820   0.000108   0.000111  0.0000102  0.0000146    0.000109    0.000112
+1997   9   3  50694   0.200235   0.452752   0.4425670   0.0016277   0.000444  -0.000466   0.000110   0.000110  0.0000100  0.0000148    0.000107    0.000113
+1997   9   4  50695   0.203059   0.450912   0.4409535   0.0016325  -0.000315   0.000022   0.000114   0.000111  0.0000136  0.0000137    0.000176    0.000201
+1997   9   5  50696   0.204955   0.448951   0.4393222   0.0016081  -0.000785   0.000313   0.000114   0.000110  0.0000139  0.0000146    0.000175    0.000205
+1997   9   6  50697   0.206395   0.446467   0.4377102   0.0015829  -0.000895   0.000375   0.000112   0.000106  0.0000126  0.0000161    0.000140    0.000166
+1997   9   7  50698   0.208043   0.443882   0.4361530   0.0015296  -0.000726   0.000276   0.000117   0.000111  0.0000112  0.0000141    0.000105    0.000127
+1997   9   8  50699   0.209552   0.441099   0.4346725   0.0014525  -0.000413   0.000103   0.000115   0.000116  0.0000098  0.0000137    0.000070    0.000088
+1997   9   9  50700   0.211343   0.438611   0.4332684   0.0014027  -0.000119  -0.000054   0.000107   0.000109  0.0000084  0.0000165    0.000035    0.000049
+1997   9  10  50701   0.212854   0.436217   0.4319145   0.0013679  -0.000069  -0.000027   0.000106   0.000107  0.0000090  0.0000166    0.000086    0.000080
+1997   9  11  50702   0.214019   0.433372   0.4305614   0.0013873  -0.000120  -0.000056   0.000128   0.000125  0.0000112  0.0000122    0.000108    0.000096
+1997   9  12  50703   0.215529   0.430713   0.4291456   0.0015171  -0.000245  -0.000132   0.000132   0.000126  0.0000140  0.0000131    0.000117    0.000105
+1997   9  13  50704   0.217055   0.428351   0.4275980   0.0016421  -0.000383  -0.000227   0.000121   0.000115  0.0000167  0.0000132    0.000126    0.000113
+1997   9  14  50705   0.217814   0.426483   0.4258564   0.0018153  -0.000457  -0.000312   0.000123   0.000116  0.0000194  0.0000104    0.000135    0.000122
+1997   9  15  50706   0.218017   0.424553   0.4238830   0.0020331  -0.000422  -0.000338   0.000118   0.000115  0.0000222  0.0000084    0.000144    0.000130
+1997   9  16  50707   0.218023   0.421875   0.4216830   0.0022845  -0.000274  -0.000270   0.000113   0.000112  0.0000249  0.0000084    0.000153    0.000138
+1997   9  17  50708   0.218090   0.419101   0.4193133   0.0024114  -0.000022  -0.000061   0.000111   0.000109  0.0000195  0.0000124    0.000157    0.000148
+1997   9  18  50709   0.218458   0.416716   0.4168726   0.0024452   0.000219   0.000167   0.000117   0.000111  0.0000171  0.0000181    0.000152    0.000145
+1997   9  19  50710   0.219221   0.414234   0.4144728   0.0023686   0.000397   0.000370   0.000123   0.000114  0.0000159  0.0000184    0.000144    0.000138
+1997   9  20  50711   0.219878   0.411881   0.4122043   0.0021797   0.000477   0.000508   0.000123   0.000115  0.0000146  0.0000161    0.000136    0.000132
+1997   9  21  50712   0.220594   0.409494   0.4101113   0.0020007   0.000448   0.000551   0.000124   0.000115  0.0000134  0.0000144    0.000128    0.000125
+1997   9  22  50713   0.221248   0.406904   0.4081870   0.0018665   0.000327   0.000493   0.000118   0.000109  0.0000121  0.0000156    0.000120    0.000118
+1997   9  23  50714   0.221591   0.404334   0.4063863   0.0017711   0.000153   0.000355   0.000111   0.000102  0.0000109  0.0000131    0.000112    0.000112
+1997   9  24  50715   0.221756   0.401145   0.4046470   0.0017222  -0.000026   0.000169   0.000109   0.000103  0.0000096  0.0000078    0.000104    0.000105
+1997   9  25  50716   0.221341   0.398095   0.4029093   0.0017322  -0.000163  -0.000023   0.000116   0.000114  0.0000099  0.0000078    0.000106    0.000107
+1997   9  26  50717   0.221066   0.394635   0.4011294   0.0018206  -0.000236  -0.000188   0.000121   0.000116  0.0000106  0.0000129    0.000111    0.000111
+1997   9  27  50718   0.221164   0.391480   0.3992853   0.0018792  -0.000237  -0.000303   0.000120   0.000109  0.0000114  0.0000186    0.000117    0.000116
+1997   9  28  50719   0.221066   0.388147   0.3973749   0.0019254  -0.000177  -0.000359   0.000117   0.000107  0.0000122  0.0000168    0.000121    0.000121
+1997   9  29  50720   0.221097   0.385334   0.3954091   0.0019716  -0.000081  -0.000360   0.000115   0.000106  0.0000129  0.0000148    0.000127    0.000125
+1997   9  30  50721   0.221243   0.382258   0.3934029   0.0020208   0.000019  -0.000317   0.000116   0.000105  0.0000137  0.0000151    0.000132    0.000130
+1997  10   1  50722   0.221189   0.379640   0.3913707   0.0020488   0.000099  -0.000247   0.000116   0.000107  0.0000145  0.0000162    0.000137    0.000135
+1997  10   2  50723   0.221599   0.376432   0.3893270   0.0020924   0.000135  -0.000168   0.000116   0.000106  0.0000150  0.0000111    0.000134    0.000135
+1997  10   3  50724   0.221865   0.373521   0.3872900   0.0020552   0.000125  -0.000093   0.000113   0.000105  0.0000155  0.0000087    0.000130    0.000133
+1997  10   4  50725   0.221857   0.370157   0.3852812   0.0019698   0.000081  -0.000028   0.000114   0.000104  0.0000160  0.0000115    0.000125    0.000131
+1997  10   5  50726   0.222227   0.367288   0.3833192   0.0019030   0.000019   0.000026   0.000117   0.000107  0.0000165  0.0000129    0.000121    0.000129
+1997  10   6  50727   0.222295   0.364715   0.3814106   0.0018515  -0.000039   0.000070   0.000116   0.000110  0.0000170  0.0000121    0.000116    0.000127
+1997  10   7  50728   0.222791   0.362235   0.3795439   0.0018320  -0.000078   0.000110   0.000113   0.000107  0.0000174  0.0000098    0.000111    0.000125
+1997  10   8  50729   0.222699   0.359794   0.3776901   0.0018513  -0.000084   0.000149   0.000112   0.000105  0.0000131  0.0000123    0.000123    0.000124
+1997  10   9  50730   0.222750   0.357422   0.3758079   0.0019155  -0.000071   0.000188   0.000115   0.000107  0.0000116  0.0000131    0.000127    0.000126
+1997  10  10  50731   0.222314   0.355300   0.3738511   0.0020011  -0.000050   0.000224   0.000116   0.000111  0.0000114  0.0000115    0.000129    0.000128
+1997  10  11  50732   0.222434   0.352667   0.3717751   0.0021460  -0.000034   0.000255   0.000117   0.000113  0.0000111  0.0000110    0.000130    0.000130
+1997  10  12  50733   0.223054   0.349963   0.3695471   0.0023027  -0.000036   0.000278   0.000119   0.000113  0.0000109  0.0000112    0.000132    0.000132
+1997  10  13  50734   0.224073   0.347273   0.3671575   0.0024692  -0.000064   0.000292   0.000118   0.000112  0.0000106  0.0000116    0.000134    0.000134
+1997  10  14  50735   0.224584   0.344836   0.3646307   0.0025606  -0.000117   0.000294   0.000115   0.000112  0.0000104  0.0000107    0.000135    0.000136
+1997  10  15  50736   0.225122   0.342080   0.3620275   0.0025887  -0.000189   0.000286   0.000112   0.000110  0.0000101  0.0000100    0.000137    0.000138
+1997  10  16  50737   0.225533   0.339439   0.3594317   0.0025556  -0.000266   0.000271   0.000115   0.000111  0.0000106  0.0000099    0.000132    0.000140
+1997  10  17  50738   0.225813   0.336835   0.3569275   0.0024503  -0.000325   0.000254   0.000119   0.000112  0.0000113  0.0000090    0.000125    0.000141
+1997  10  18  50739   0.225762   0.333759   0.3545757   0.0022688  -0.000347   0.000237   0.000117   0.000113  0.0000119  0.0000097    0.000118    0.000141
+1997  10  19  50740   0.226092   0.330701   0.3524003   0.0020821  -0.000319   0.000220   0.000114   0.000117  0.0000126  0.0000108    0.000111    0.000142
+1997  10  20  50741   0.226633   0.327608   0.3503898   0.0019445  -0.000243   0.000202   0.000115   0.000116  0.0000133  0.0000117    0.000104    0.000143
+1997  10  21  50742   0.227635   0.324920   0.3485088   0.0018422  -0.000138   0.000177   0.000112   0.000109  0.0000139  0.0000121    0.000097    0.000144
+1997  10  22  50743   0.228165   0.322509   0.3467104   0.0017720  -0.000009   0.000146   0.000106   0.000108  0.0000099  0.0000125    0.000088    0.000100
+1997  10  23  50744   0.228171   0.319985   0.3449475   0.0017467   0.000059   0.000094   0.000109   0.000112  0.0000088  0.0000107    0.000083    0.000083
+1997  10  24  50745   0.227665   0.317489   0.3431791   0.0017788   0.000063   0.000027   0.000112   0.000115  0.0000091  0.0000084    0.000079    0.000078
+1997  10  25  50746   0.227157   0.314739   0.3413754   0.0018396   0.000022  -0.000036   0.000115   0.000114  0.0000093  0.0000088    0.000075    0.000073
+1997  10  26  50747   0.226314   0.311786   0.3395191   0.0018992  -0.000034  -0.000077   0.000117   0.000114  0.0000096  0.0000092    0.000071    0.000068
+1997  10  27  50748   0.225499   0.308568   0.3376040   0.0019664  -0.000079  -0.000079   0.000118   0.000115  0.0000098  0.0000088    0.000067    0.000063
+1997  10  28  50749   0.224390   0.305595   0.3356319   0.0020148  -0.000101  -0.000033   0.000114   0.000112  0.0000101  0.0000072    0.000063    0.000058
+1997  10  29  50750   0.222730   0.302421   0.3336080   0.0020479  -0.000050   0.000061   0.000110   0.000110  0.0000103  0.0000091    0.000102    0.000101
+1997  10  30  50751   0.220970   0.299050   0.3315410   0.0020801  -0.000085   0.000183   0.000110   0.000108  0.0000073  0.0000129    0.000129    0.000131
+1997  10  31  50752   0.219347   0.295714   0.3294447   0.0021167  -0.000153   0.000301   0.000111   0.000108  0.0000064  0.0000123    0.000227    0.000265
+1997  11   1  50753   0.218072   0.292445   0.3273393   0.0021343  -0.000226   0.000385   0.000114   0.000112  0.0000067  0.0000120    0.000353    0.000440
+1997  11   2  50754   0.217591   0.289402   0.3252457   0.0020875  -0.000279   0.000409   0.000119   0.000119  0.0000070  0.0000102    0.000479    0.000616
+1997  11   3  50755   0.217324   0.287293   0.3231740   0.0020597  -0.000279   0.000362   0.000124   0.000126  0.0000073  0.0000081    0.000604    0.000791
+1997  11   4  50756   0.216493   0.285170   0.3211142   0.0020536  -0.000202   0.000245   0.000122   0.000125  0.0000076  0.0000074    0.000577    0.000759
+1997  11   5  50757   0.215898   0.282809   0.3190349   0.0020705  -0.000045   0.000077   0.000117   0.000120  0.0000079  0.0000098    0.000180    0.000223
+1997  11   6  50758   0.215319   0.280457   0.3168931   0.0021648   0.000131  -0.000097   0.000121   0.000123  0.0000081  0.0000147    0.000085    0.000093
+1997  11   7  50759   0.214802   0.278158   0.3146479   0.0022973   0.000292  -0.000240   0.000130   0.000131  0.0000084  0.0000128    0.000091    0.000098
+1997  11   8  50760   0.213896   0.275966   0.3122734   0.0024195   0.000402  -0.000323   0.000121   0.000124  0.0000086  0.0000078    0.000097    0.000103
+1997  11   9  50761   0.213405   0.273564   0.3097675   0.0025404   0.000431  -0.000327   0.000117   0.000118  0.0000089  0.0000083    0.000103    0.000108
+1997  11  10  50762   0.212551   0.271242   0.3071571   0.0026659   0.000368  -0.000255   0.000122   0.000123  0.0000091  0.0000096    0.000109    0.000113
+1997  11  11  50763   0.211738   0.268904   0.3044993   0.0026962   0.000223  -0.000125   0.000125   0.000127  0.0000094  0.0000110    0.000116    0.000118
+1997  11  12  50764   0.210246   0.266338   0.3018742   0.0026125   0.000029   0.000024   0.000125   0.000128  0.0000096  0.0000128    0.000122    0.000123
+1997  11  13  50765   0.208767   0.263616   0.2993692   0.0024378  -0.000186   0.000172   0.000125   0.000126  0.0000092  0.0000138    0.000158    0.000121
+1997  11  14  50766   0.206995   0.261374   0.2970559   0.0021955  -0.000326   0.000240   0.000126   0.000126  0.0000086  0.0000160    0.000160    0.000112
+1997  11  15  50767   0.205494   0.259115   0.2949694   0.0019513  -0.000359   0.000222   0.000130   0.000127  0.0000079  0.0000168    0.000140    0.000101
+1997  11  16  50768   0.203839   0.257088   0.2930983   0.0017576  -0.000299   0.000155   0.000132   0.000127  0.0000073  0.0000160    0.000120    0.000089
+1997  11  17  50769   0.202622   0.254693   0.2913929   0.0016514  -0.000178   0.000085   0.000129   0.000120  0.0000066  0.0000124    0.000099    0.000078
+1997  11  18  50770   0.201672   0.252627   0.2897853   0.0015871  -0.000048   0.000052   0.000120   0.000114  0.0000060  0.0000110    0.000079    0.000067
+1997  11  19  50771   0.200817   0.250249   0.2882134   0.0015729   0.000086   0.000103   0.000112   0.000110  0.0000075  0.0000105    0.000086    0.000092
+1997  11  20  50772   0.199279   0.248111   0.2866372   0.0015985   0.000086   0.000186   0.000118   0.000115  0.0000079  0.0000096    0.000090    0.000104
+1997  11  21  50773   0.197455   0.245593   0.2850403   0.0015850   0.000031   0.000275   0.000125   0.000124  0.0000078  0.0000113    0.000092    0.000112
+1997  11  22  50774   0.195661   0.242726   0.2834230   0.0016019   0.000064   0.000332   0.000130   0.000128  0.0000077  0.0000143    0.000098    0.000111
+1997  11  23  50775   0.194078   0.239804   0.2817911   0.0016349   0.000120   0.000332   0.000135   0.000131  0.0000076  0.0000146    0.000104    0.000110
+1997  11  24  50776   0.192271   0.236980   0.2801511   0.0016702   0.000166   0.000264   0.000129   0.000125  0.0000075  0.0000129    0.000110    0.000108
+1997  11  25  50777   0.190302   0.234280   0.2785106   0.0016532   0.000163   0.000137   0.000122   0.000116  0.0000074  0.0000122    0.000116    0.000107
+1997  11  26  50778   0.188377   0.232060   0.2768808   0.0016086   0.000031  -0.000024   0.000124   0.000117  0.0000080  0.0000125    0.000064    0.000059
+1997  11  27  50779   0.186249   0.230173   0.2752773   0.0015454  -0.000102  -0.000176   0.000127   0.000124  0.0000085  0.0000138    0.000059    0.000057
+1997  11  28  50780   0.183518   0.228571   0.2737164   0.0015002  -0.000214  -0.000283   0.000134   0.000139  0.0000091  0.0000115    0.000070    0.000071
+1997  11  29  50781   0.180993   0.226602   0.2722107   0.0014525  -0.000284  -0.000323   0.000140   0.000146  0.0000096  0.0000123    0.000081    0.000085
+1997  11  30  50782   0.178392   0.225179   0.2707646   0.0014095  -0.000289  -0.000284   0.000145   0.000149  0.0000101  0.0000140    0.000093    0.000098
+1997  12   1  50783   0.175764   0.223419   0.2693715   0.0013851  -0.000226  -0.000179   0.000145   0.000152  0.0000107  0.0000106    0.000104    0.000112
+1997  12   2  50784   0.173408   0.221392   0.2680103   0.0013922  -0.000106  -0.000040   0.000136   0.000140  0.0000112  0.0000104    0.000115    0.000126
+1997  12   3  50785   0.171865   0.219163   0.2666420   0.0014331   0.000052   0.000094   0.000137   0.000136  0.0000118  0.0000109    0.000127    0.000140
+1997  12   4  50786   0.170329   0.217143   0.2652098   0.0015102   0.000218   0.000182   0.000132   0.000137  0.0000117  0.0000110    0.000134    0.000132
+1997  12   5  50787   0.168637   0.215667   0.2636467   0.0016396   0.000362   0.000210   0.000132   0.000133  0.0000113  0.0000102    0.000140    0.000117
+1997  12   6  50788   0.166328   0.213955   0.2618945   0.0018293   0.000455   0.000188   0.000138   0.000139  0.0000110  0.0000096    0.000146    0.000101
+1997  12   7  50789   0.163801   0.212229   0.2599281   0.0020473   0.000476   0.000140   0.000140   0.000144  0.0000107  0.0000107    0.000152    0.000085
+1997  12   8  50790   0.161484   0.210355   0.2577759   0.0022250   0.000419   0.000096   0.000143   0.000145  0.0000103  0.0000104    0.000159    0.000070
+1997  12   9  50791   0.158993   0.208501   0.2555182   0.0022881   0.000297   0.000070   0.000144   0.000145  0.0000100  0.0000103    0.000165    0.000054
+1997  12  10  50792   0.156853   0.206715   0.2532609   0.0022288   0.000154   0.000124   0.000146   0.000146  0.0000097  0.0000103    0.000128    0.000112
+1997  12  11  50793   0.155310   0.205117   0.2510961   0.0021085  -0.000017   0.000097   0.000144   0.000143  0.0000082  0.0000098    0.000127    0.000124
+1997  12  12  50794   0.153794   0.203631   0.2490738   0.0019685  -0.000095   0.000066   0.000141   0.000139  0.0000076  0.0000107    0.000126    0.000120
+1997  12  13  50795   0.152239   0.202272   0.2472055   0.0018030  -0.000077   0.000047   0.000141   0.000137  0.0000076  0.0000119    0.000121    0.000117
+1997  12  14  50796   0.149623   0.200836   0.2454799   0.0016447  -0.000001   0.000040   0.000137   0.000134  0.0000076  0.0000109    0.000116    0.000113
+1997  12  15  50797   0.146675   0.198359   0.2438737   0.0015303   0.000087   0.000046   0.000131   0.000130  0.0000077  0.0000093    0.000111    0.000110
+1997  12  16  50798   0.143857   0.195980   0.2423540   0.0014917   0.000142   0.000060   0.000131   0.000128  0.0000077  0.0000088    0.000107    0.000106
+1997  12  17  50799   0.140927   0.193878   0.2408769   0.0014829   0.000136   0.000065   0.000128   0.000125  0.0000095  0.0000091    0.000106    0.000104
+1997  12  18  50800   0.138675   0.192033   0.2393924   0.0015079   0.000058   0.000048   0.000099   0.000100  0.0000053  0.0000096    0.000046    0.000049
+1997  12  19  50801   0.137138   0.191133   0.2378677   0.0015456   0.000064  -0.000050   0.000107   0.000109  0.0000040  0.0000100    0.000023    0.000028
+1997  12  20  50802   0.135116   0.190456   0.2362881   0.0015972   0.000153  -0.000194   0.000139   0.000137  0.0000052  0.0000097    0.000031    0.000033
+1997  12  21  50803   0.132227   0.189541   0.2346504   0.0016515   0.000253  -0.000311   0.000130   0.000130  0.0000064  0.0000090    0.000038    0.000037
+1997  12  22  50804   0.129360   0.188072   0.2329643   0.0017059   0.000304  -0.000335   0.000120   0.000120  0.0000076  0.0000093    0.000045    0.000042
+1997  12  23  50805   0.126817   0.186715   0.2312522   0.0017340   0.000261  -0.000232   0.000114   0.000115  0.0000088  0.0000085    0.000053    0.000046
+1997  12  24  50806   0.123518   0.185008   0.2295475   0.0016705   0.000018   0.000052   0.000110   0.000110  0.0000100  0.0000070    0.000106    0.000107
+1997  12  25  50807   0.120630   0.183026   0.2278885   0.0016101  -0.000153   0.000329   0.000117   0.000116  0.0000098  0.0000085    0.000111    0.000114
+1997  12  26  50808   0.117941   0.181651   0.2263086   0.0015241  -0.000249   0.000550   0.000122   0.000122  0.0000094  0.0000099    0.000106    0.000109
+1997  12  27  50809   0.115329   0.180006   0.2248283   0.0014015  -0.000258   0.000665   0.000118   0.000119  0.0000089  0.0000096    0.000101    0.000104
+1997  12  28  50810   0.112880   0.178568   0.2234478   0.0013069  -0.000189   0.000651   0.000109   0.000113  0.0000084  0.0000091    0.000095    0.000099
+1997  12  29  50811   0.110100   0.177271   0.2221439   0.0012814  -0.000076   0.000516   0.000101   0.000105  0.0000080  0.0000073    0.000090    0.000093
+1997  12  30  50812   0.107157   0.176409   0.2208688   0.0013120   0.000041   0.000299   0.000108   0.000112  0.0000075  0.0000090    0.000084    0.000088
+1997  12  31  50813   0.104551   0.175564   0.2195561   0.0013811   0.000129   0.000052   0.000106   0.000112  0.0000071  0.0000121    0.000079    0.000083
+1998   1   1  50814   0.102424   0.174630   0.2181343   0.0015106   0.000166  -0.000169   0.000108   0.000114  0.0000073  0.0000091    0.000082    0.000087
+1998   1   2  50815   0.100036   0.173786   0.2165466   0.0016835   0.000161  -0.000331   0.000112   0.000118  0.0000076  0.0000084    0.000086    0.000093
+1998   1   3  50816   0.097441   0.172937   0.2147705   0.0018493   0.000130  -0.000417   0.000108   0.000111  0.0000080  0.0000084    0.000090    0.000099
+1998   1   4  50817   0.095109   0.172490   0.2128276   0.0020013   0.000094  -0.000424   0.000119   0.000122  0.0000083  0.0000079    0.000095    0.000105
+1998   1   5  50818   0.092746   0.172135   0.2107812   0.0020807   0.000074  -0.000370   0.000124   0.000128  0.0000087  0.0000099    0.000099    0.000111
+1998   1   6  50819   0.090359   0.171816   0.2087202   0.0020402   0.000081  -0.000281   0.000121   0.000123  0.0000090  0.0000086    0.000103    0.000117
+1998   1   7  50820   0.087888   0.171256   0.2067347   0.0019194   0.000120  -0.000182   0.000121   0.000123  0.0000094  0.0000083    0.000108    0.000123
+1998   1   8  50821   0.085392   0.170552   0.2048926   0.0017562   0.000185  -0.000098   0.000126   0.000129  0.0000090  0.0000109    0.000107    0.000122
+1998   1   9  50822   0.082391   0.169742   0.2032214   0.0015785   0.000258  -0.000040   0.000129   0.000133  0.0000083  0.0000125    0.000105    0.000118
+1998   1  10  50823   0.079191   0.169033   0.2017037   0.0014481   0.000317  -0.000004   0.000128   0.000133  0.0000076  0.0000131    0.000103    0.000114
+1998   1  11  50824   0.076103   0.168492   0.2002853   0.0014131   0.000340   0.000017   0.000126   0.000131  0.0000070  0.0000112    0.000100    0.000110
+1998   1  12  50825   0.072741   0.168409   0.1988948   0.0014242   0.000314   0.000030   0.000122   0.000126  0.0000063  0.0000092    0.000098    0.000106
+1998   1  13  50826   0.069316   0.168021   0.1974660   0.0014682   0.000234   0.000047   0.000118   0.000122  0.0000056  0.0000119    0.000096    0.000102
+1998   1  14  50827   0.066508   0.167877   0.1959551   0.0015518   0.000104   0.000075   0.000116   0.000119  0.0000083  0.0000145    0.000102    0.000111
+1998   1  15  50828   0.063719   0.167628   0.1943480   0.0016233  -0.000053   0.000092   0.000121   0.000125  0.0000091  0.0000139    0.000103    0.000113
+1998   1  16  50829   0.060293   0.167565   0.1926559   0.0016731  -0.000206   0.000094   0.000125   0.000128  0.0000090  0.0000123    0.000101    0.000112
+1998   1  17  50830   0.057049   0.167627   0.1909088   0.0016961  -0.000324   0.000080   0.000124   0.000125  0.0000089  0.0000103    0.000099    0.000111
+1998   1  18  50831   0.054048   0.167610   0.1891460   0.0017291  -0.000373   0.000052   0.000125   0.000122  0.0000089  0.0000109    0.000098    0.000110
+1998   1  19  50832   0.051159   0.168030   0.1874039   0.0017771  -0.000330   0.000019   0.000130   0.000126  0.0000088  0.0000116    0.000096    0.000109
+1998   1  20  50833   0.048192   0.168591   0.1857022   0.0017837  -0.000189  -0.000007   0.000137   0.000136  0.0000087  0.0000120    0.000095    0.000109
+1998   1  21  50834   0.044774   0.168454   0.1840348   0.0017361   0.000018  -0.000015   0.000137   0.000136  0.0000086  0.0000153    0.000093    0.000108
+1998   1  22  50835   0.041284   0.168122   0.1823755   0.0016828   0.000326   0.000000   0.000133   0.000133  0.0000083  0.0000134    0.000124    0.000418
+1998   1  23  50836   0.037821   0.167649   0.1806989   0.0016986   0.000456   0.000028   0.000138   0.000140  0.0000080  0.0000128    0.000131    0.000467
+1998   1  24  50837   0.034625   0.167333   0.1789980   0.0017196   0.000406   0.000058   0.000138   0.000142  0.0000076  0.0000142    0.000126    0.000380
+1998   1  25  50838   0.031663   0.166990   0.1772831   0.0017095   0.000259   0.000071   0.000148   0.000151  0.0000072  0.0000137    0.000121    0.000292
+1998   1  26  50839   0.028478   0.166941   0.1755543   0.0017275   0.000100   0.000058   0.000156   0.000155  0.0000068  0.0000116    0.000115    0.000205
+1998   1  27  50840   0.025666   0.166942   0.1737728   0.0018163   0.000005   0.000012   0.000149   0.000149  0.0000064  0.0000123    0.000109    0.000118
+1998   1  28  50841   0.023193   0.167403   0.1718591   0.0020026   0.000096  -0.000051   0.000146   0.000149  0.0000097  0.0000150    0.000137    0.000151
+1998   1  29  50842   0.020284   0.167984   0.1697309   0.0022425   0.000188  -0.000135   0.000147   0.000151  0.0000091  0.0000147    0.000119    0.000136
+1998   1  30  50843   0.017233   0.168613   0.1673784   0.0024418   0.000248  -0.000195   0.000148   0.000152  0.0000069  0.0000148    0.000082    0.000097
+1998   1  31  50844   0.014023   0.169186   0.1648686   0.0025344   0.000256  -0.000167   0.000152   0.000155  0.0000074  0.0000136    0.000075    0.000083
+1998   2   1  50845   0.010888   0.169884   0.1622942   0.0025546   0.000208  -0.000101   0.000162   0.000165  0.0000080  0.0000120    0.000068    0.000070
+1998   2   2  50846   0.007753   0.170412   0.1597347   0.0025350   0.000118  -0.000026   0.000160   0.000162  0.0000085  0.0000110    0.000061    0.000057
+1998   2   3  50847   0.004633   0.171365   0.1572391   0.0024923   0.000012   0.000018   0.000153   0.000155  0.0000091  0.0000106    0.000054    0.000043
+1998   2   4  50848   0.001342   0.172078   0.1548268   0.0024068  -0.000026   0.000021   0.000155   0.000161  0.0000096  0.0000093    0.000102    0.000109
+1998   2   5  50849  -0.002049   0.172868   0.1524984   0.0023141  -0.000149  -0.000074   0.000162   0.000171  0.0000091  0.0000103    0.000160    0.000155
+1998   2   6  50850  -0.005147   0.173473   0.1502468   0.0021925  -0.000219  -0.000104   0.000161   0.000168  0.0000082  0.0000121    0.000159    0.000150
+1998   2   7  50851  -0.007866   0.174368   0.1480674   0.0020983  -0.000212  -0.000057   0.000159   0.000162  0.0000072  0.0000128    0.000127    0.000121
+1998   2   8  50852  -0.010101   0.174892   0.1459622   0.0020718  -0.000158   0.000014   0.000135   0.000140  0.0000063  0.0000133    0.000095    0.000093
+1998   2   9  50853  -0.012440   0.175333   0.1439349   0.0020097  -0.000079   0.000071   0.000103   0.000108  0.0000054  0.0000115    0.000062    0.000065
+1998   2  10  50854  -0.015009   0.175420   0.1419767   0.0019468   0.000005   0.000086   0.000091   0.000096  0.0000045  0.0000104    0.000031    0.000036
+1998   2  11  50855  -0.018046   0.175424   0.1400565   0.0019275   0.000024  -0.000040   0.000091   0.000095  0.0000091  0.0000115    0.000089    0.000099
+1998   2  12  50856  -0.020574   0.175725   0.1381266   0.0019565   0.000078  -0.000065   0.000098   0.000102  0.0000094  0.0000109    0.000099    0.000116
+1998   2  13  50857  -0.023226   0.176430   0.1361561   0.0019760   0.000119  -0.000017   0.000100   0.000104  0.0000082  0.0000123    0.000089    0.000114
+1998   2  14  50858  -0.025285   0.176907   0.1341455   0.0019838   0.000074   0.000032   0.000101   0.000104  0.0000086  0.0000140    0.000089    0.000108
+1998   2  15  50859  -0.026929   0.177409   0.1321204   0.0019963  -0.000006   0.000087   0.000094   0.000096  0.0000090  0.0000114    0.000089    0.000103
+1998   2  16  50860  -0.028626   0.178465   0.1301186   0.0019785  -0.000091   0.000121   0.000089   0.000091  0.0000094  0.0000086    0.000088    0.000097
+1998   2  17  50861  -0.030210   0.179966   0.1281741   0.0019247  -0.000136   0.000109   0.000091   0.000095  0.0000097  0.0000095    0.000088    0.000091
+1998   2  18  50862  -0.032042   0.181351   0.1263032   0.0018523  -0.000107   0.000048   0.000089   0.000093  0.0000101  0.0000110    0.000088    0.000085
+1998   2  19  50863  -0.034633   0.182918   0.1244992   0.0017861   0.000024  -0.000058   0.000085   0.000088  0.0000099  0.0000101    0.000774    0.000496
+1998   2  20  50864  -0.037894   0.183942   0.1227351   0.0017784   0.000209  -0.000172   0.000080   0.000084  0.0000096  0.0000095    0.001337    0.000836
+1998   2  21  50865  -0.041068   0.185207   0.1209726   0.0018032   0.000383  -0.000257   0.000083   0.000085  0.0000092  0.0000098    0.001036    0.000662
+1998   2  22  50866  -0.044820   0.186279   0.1191717   0.0018391   0.000492  -0.000292   0.000087   0.000089  0.0000089  0.0000098    0.000735    0.000488
+1998   2  23  50867  -0.048068   0.186780   0.1172949   0.0019011   0.000494  -0.000264   0.000089   0.000091  0.0000085  0.0000094    0.000434    0.000314
+1998   2  24  50868  -0.050843   0.187818   0.1153078   0.0020317   0.000377  -0.000179   0.000091   0.000091  0.0000082  0.0000095    0.000133    0.000140
+1998   2  25  50869  -0.053529   0.188551   0.1131792   0.0021907   0.000136  -0.000052   0.000089   0.000088  0.0000078  0.0000079    0.000079    0.000084
+1998   2  26  50870  -0.056005   0.189353   0.1108880   0.0023359  -0.000110   0.000074   0.000088   0.000087  0.0000080  0.0000100    0.000078    0.000077
+1998   2  27  50871  -0.057855   0.190132   0.1084362   0.0024918  -0.000310   0.000170   0.000090   0.000088  0.0000082  0.0000135    0.000078    0.000079
+1998   2  28  50872  -0.058809   0.191486   0.1058592   0.0026448  -0.000429   0.000225   0.000093   0.000090  0.0000085  0.0000131    0.000077    0.000081
+1998   3   1  50873  -0.059516   0.193318   0.1032251   0.0026629  -0.000450   0.000231   0.000092   0.000088  0.0000088  0.0000120    0.000077    0.000083
+1998   3   2  50874  -0.060507   0.195012   0.1006201   0.0025908  -0.000382   0.000196   0.000087   0.000084  0.0000091  0.0000097    0.000077    0.000085
+1998   3   3  50875  -0.061946   0.196857   0.0981246   0.0024337  -0.000255   0.000133   0.000085   0.000082  0.0000093  0.0000092    0.000077    0.000087
+1998   3   4  50876  -0.063671   0.198560   0.0957915   0.0022433  -0.000107   0.000061   0.000088   0.000084  0.0000096  0.0000098    0.000076    0.000089
+1998   3   5  50877  -0.065201   0.200550   0.0936358   0.0020883   0.000024  -0.000003   0.000091   0.000088  0.0000097  0.0000098    0.000078    0.000089
+1998   3   6  50878  -0.067097   0.202471   0.0916357   0.0019792   0.000114  -0.000045   0.000089   0.000086  0.0000097  0.0000093    0.000080    0.000088
+1998   3   7  50879  -0.068465   0.204296   0.0897434   0.0019060   0.000155  -0.000065   0.000090   0.000086  0.0000096  0.0000082    0.000082    0.000088
+1998   3   8  50880  -0.070161   0.206507   0.0878986   0.0018446   0.000149  -0.000062   0.000095   0.000090  0.0000096  0.0000111    0.000084    0.000087
+1998   3   9  50881  -0.071671   0.208515   0.0860436   0.0018141   0.000109  -0.000046   0.000098   0.000090  0.0000096  0.0000128    0.000086    0.000087
+1998   3  10  50882  -0.073288   0.210769   0.0841349   0.0018800   0.000054  -0.000024   0.000100   0.000094  0.0000096  0.0000126    0.000088    0.000086
+1998   3  11  50883  -0.074923   0.212645   0.0821511   0.0019892   0.000002  -0.000006   0.000098   0.000093  0.0000096  0.0000132    0.000090    0.000086
+1998   3  12  50884  -0.076194   0.214754   0.0800944   0.0020800  -0.000033   0.000002   0.000090   0.000086  0.0000063  0.0000127    0.000088    0.000096
+1998   3  13  50885  -0.077308   0.216679   0.0779864   0.0021202  -0.000042  -0.000001   0.000092   0.000089  0.0000059  0.0000139    0.000088    0.000099
+1998   3  14  50886  -0.078294   0.218966   0.0758584   0.0021287  -0.000029  -0.000010   0.000099   0.000095  0.0000069  0.0000110    0.000090    0.000100
+1998   3  15  50887  -0.080026   0.221002   0.0737433   0.0021082  -0.000003  -0.000022   0.000098   0.000094  0.0000079  0.0000076    0.000092    0.000100
+1998   3  16  50888  -0.082358   0.222951   0.0716684   0.0020710   0.000023  -0.000034   0.000092   0.000091  0.0000089  0.0000093    0.000094    0.000101
+1998   3  17  50889  -0.084740   0.224382   0.0696513   0.0019962   0.000039  -0.000039   0.000089   0.000088  0.0000099  0.0000104    0.000095    0.000101
+1998   3  18  50890  -0.086949   0.226194   0.0676985   0.0019181   0.000035  -0.000036   0.000087   0.000085  0.0000109  0.0000108    0.000097    0.000101
+1998   3  19  50891  -0.089023   0.227623   0.0658083   0.0018201   0.000012  -0.000025   0.000087   0.000086  0.0000112  0.0000129    0.000098    0.000101
+1998   3  20  50892  -0.090635   0.229363   0.0639769   0.0017620  -0.000021  -0.000010   0.000091   0.000091  0.0000114  0.0000118    0.000097    0.000100
+1998   3  21  50893  -0.092769   0.231247   0.0621974   0.0017450  -0.000051   0.000005   0.000095   0.000094  0.0000115  0.0000106    0.000097    0.000100
+1998   3  22  50894  -0.094955   0.232889   0.0604495   0.0017823  -0.000063   0.000015   0.000092   0.000091  0.0000116  0.0000088    0.000097    0.000099
+1998   3  23  50895  -0.096764   0.234107   0.0586842   0.0018478  -0.000047   0.000017   0.000087   0.000085  0.0000117  0.0000084    0.000097    0.000098
+1998   3  24  50896  -0.098128   0.235485   0.0568202   0.0019726  -0.000005   0.000008   0.000083   0.000080  0.0000119  0.0000090    0.000096    0.000097
+1998   3  25  50897  -0.099286   0.237026   0.0547647   0.0021708   0.000055  -0.000008   0.000080   0.000079  0.0000092  0.0000078    0.000093    0.000077
+1998   3  26  50898  -0.100836   0.239073   0.0524586   0.0024156   0.000120  -0.000040   0.000081   0.000081  0.0000093  0.0000095    0.000105    0.000109
+1998   3  27  50899  -0.102229   0.240845   0.0499348   0.0025585   0.000146  -0.000067   0.000087   0.000086  0.0000100  0.0000108    0.000113    0.000125
+1998   3  28  50900  -0.103936   0.242945   0.0473008   0.0025808   0.000129  -0.000092   0.000090   0.000090  0.0000105  0.0000096    0.000117    0.000129
+1998   3  29  50901  -0.105832   0.245168   0.0446884   0.0025442   0.000083  -0.000122   0.000101   0.000100  0.0000110  0.0000077    0.000121    0.000133
+1998   3  30  50902  -0.107868   0.247767   0.0422078   0.0024197   0.000029  -0.000165   0.000110   0.000105  0.0000116  0.0000098    0.000125    0.000136
+1998   3  31  50903  -0.109134   0.249733   0.0399157   0.0022388  -0.000010  -0.000225   0.000107   0.000103  0.0000121  0.0000106    0.000130    0.000140
+1998   4   1  50904  -0.109956   0.252218   0.0378116   0.0020724  -0.000021  -0.000301   0.000107   0.000105  0.0000126  0.0000089    0.000134    0.000144
+1998   4   2  50905  -0.110429   0.254619   0.0358544   0.0019393   0.000011  -0.000383   0.000109   0.000107  0.0000122  0.0000095    0.000130    0.000141
+1998   4   3  50906  -0.111015   0.257191   0.0339876   0.0018278   0.000057  -0.000445   0.000108   0.000106  0.0000115  0.0000090    0.000124    0.000135
+1998   4   4  50907  -0.111868   0.259347   0.0321591   0.0018060   0.000074  -0.000454   0.000105   0.000104  0.0000107  0.0000083    0.000114    0.000124
+1998   4   5  50908  -0.112873   0.261746   0.0303308   0.0018288   0.000077  -0.000410   0.000099   0.000097  0.0000100  0.0000099    0.000105    0.000112
+1998   4   6  50909  -0.113836   0.263593   0.0284808   0.0018500   0.000073  -0.000318   0.000093   0.000092  0.0000092  0.0000112    0.000095    0.000100
+1998   4   7  50910  -0.114147   0.265619   0.0265994   0.0018778   0.000077  -0.000195   0.000091   0.000091  0.0000085  0.0000106    0.000086    0.000088
+1998   4   8  50911  -0.114125   0.268346   0.0246845   0.0019295   0.000100  -0.000067   0.000088   0.000088  0.0000077  0.0000100    0.000076    0.000076
+1998   4   9  50912  -0.114002   0.270977   0.0227380   0.0019595   0.000155   0.000040   0.000085   0.000088  0.0000071  0.0000098    0.000085    0.000088
+1998   4  10  50913  -0.113823   0.273820   0.0207657   0.0019554   0.000209   0.000103   0.000089   0.000092  0.0000075  0.0000097    0.000092    0.000094
+1998   4  11  50914  -0.113714   0.276635   0.0187842   0.0019628   0.000239   0.000115   0.000093   0.000093  0.0000083  0.0000089    0.000097    0.000095
+1998   4  12  50915  -0.113730   0.279715   0.0168202   0.0019698   0.000233   0.000085   0.000096   0.000094  0.0000090  0.0000077    0.000101    0.000096
+1998   4  13  50916  -0.114130   0.282324   0.0149016   0.0019057   0.000190   0.000028   0.000095   0.000096  0.0000098  0.0000090    0.000105    0.000096
+1998   4  14  50917  -0.114669   0.285075   0.0130468   0.0018374   0.000131  -0.000034   0.000092   0.000093  0.0000105  0.0000099    0.000110    0.000097
+1998   4  15  50918  -0.114954   0.287646   0.0112588   0.0017759   0.000023  -0.000101   0.000090   0.000091  0.0000110  0.0000090    0.000102    0.000097
+1998   4  16  50919  -0.114891   0.290173   0.0095260   0.0017001   0.000067  -0.000110   0.000081   0.000082  0.0000069  0.0000082    0.000056    0.000055
+1998   4  17  50920  -0.114681   0.292875   0.0078373   0.0016568   0.000143  -0.000122   0.000083   0.000083  0.0000056  0.0000090    0.000077    0.000046
+1998   4  18  50921  -0.113892   0.295717   0.0061697   0.0016674   0.000205  -0.000148   0.000091   0.000089  0.0000064  0.0000086    0.000134    0.000060
+1998   4  19  50922  -0.113642   0.298734   0.0044786   0.0017311   0.000241  -0.000173   0.000083   0.000082  0.0000073  0.0000057    0.000192    0.000074
+1998   4  20  50923  -0.113712   0.301401   0.0027049   0.0018485   0.000229  -0.000184   0.000075   0.000075  0.0000081  0.0000064    0.000249    0.000088
+1998   4  21  50924  -0.113621   0.304136   0.0007911   0.0019986   0.000168  -0.000165   0.000076   0.000076  0.0000090  0.0000091    0.000307    0.000102
+1998   4  22  50925  -0.113783   0.306927  -0.0013014   0.0021776   0.000066  -0.000121   0.000075   0.000074  0.0000098  0.0000078    0.000145    0.000119
+1998   4  23  50926  -0.113747   0.309821  -0.0035791   0.0023738  -0.000032   0.000003   0.000072   0.000071  0.0000064  0.0000065    0.000088    0.000102
+1998   4  24  50927  -0.113629   0.312798  -0.0060082   0.0025341  -0.000097   0.000110   0.000075   0.000076  0.0000057  0.0000070    0.000087    0.000095
+1998   4  25  50928  -0.113572   0.315291  -0.0085159   0.0025778  -0.000121   0.000173   0.000076   0.000079  0.0000065  0.0000085    0.000095    0.000097
+1998   4  26  50929  -0.113196   0.317032  -0.0110052   0.0024829  -0.000113   0.000185   0.000073   0.000074  0.0000074  0.0000103    0.000103    0.000099
+1998   4  27  50930  -0.112700   0.319200  -0.0133839   0.0022781  -0.000088   0.000146   0.000069   0.000070  0.0000082  0.0000095    0.000111    0.000101
+1998   4  28  50931  -0.112644   0.321331  -0.0155966   0.0020545  -0.000066   0.000075   0.000067   0.000068  0.0000091  0.0000088    0.000119    0.000103
+1998   4  29  50932  -0.113032   0.323867  -0.0176417   0.0018848  -0.000060  -0.000003   0.000068   0.000067  0.0000099  0.0000088    0.000127    0.000105
+1998   4  30  50933  -0.113386   0.326158  -0.0195589   0.0018112  -0.000077  -0.000058   0.000068   0.000067  0.0000100  0.0000088    0.000129    0.000108
+1998   5   1  50934  -0.113328   0.328268  -0.0213982   0.0017993  -0.000100  -0.000079   0.000067   0.000067  0.0000099  0.0000090    0.000129    0.000111
+1998   5   2  50935  -0.113506   0.330281  -0.0231926   0.0017966  -0.000113  -0.000066   0.000071   0.000070  0.0000097  0.0000098    0.000130    0.000114
+1998   5   3  50936  -0.113574   0.332171  -0.0249549   0.0017859  -0.000100  -0.000030   0.000071   0.000071  0.0000096  0.0000102    0.000130    0.000118
+1998   5   4  50937  -0.114061   0.334312  -0.0266938   0.0017563  -0.000063   0.000009   0.000071   0.000072  0.0000094  0.0000093    0.000131    0.000121
+1998   5   5  50938  -0.114154   0.336429  -0.0284323   0.0017593  -0.000016   0.000030   0.000071   0.000072  0.0000093  0.0000087    0.000131    0.000124
+1998   5   6  50939  -0.114556   0.338962  -0.0302072   0.0018121   0.000062   0.000017   0.000067   0.000067  0.0000086  0.0000073    0.000097    0.000093
+1998   5   7  50940  -0.114540   0.341271  -0.0320472   0.0018524   0.000032  -0.000036   0.000065   0.000066  0.0000057  0.0000088    0.000084    0.000089
+1998   5   8  50941  -0.114525   0.343452  -0.0339303   0.0018337  -0.000023  -0.000120   0.000066   0.000069  0.0000054  0.0000106    0.000081    0.000091
+1998   5   9  50942  -0.114283   0.345468  -0.0358018   0.0017994  -0.000078  -0.000217   0.000068   0.000070  0.0000062  0.0000092    0.000081    0.000094
+1998   5  10  50943  -0.114041   0.347476  -0.0376067   0.0017529  -0.000115  -0.000300   0.000073   0.000075  0.0000071  0.0000090    0.000080    0.000096
+1998   5  11  50944  -0.113302   0.349511  -0.0393083   0.0016743  -0.000117  -0.000342   0.000077   0.000078  0.0000080  0.0000081    0.000080    0.000098
+1998   5  12  50945  -0.112904   0.351607  -0.0408960   0.0015899  -0.000078  -0.000326   0.000078   0.000078  0.0000089  0.0000095    0.000079    0.000101
+1998   5  13  50946  -0.112413   0.353719  -0.0423837   0.0014914  -0.000009  -0.000248   0.000075   0.000075  0.0000097  0.0000100    0.000079    0.000103
+1998   5  14  50947  -0.112033   0.356010  -0.0438062   0.0014236   0.000066  -0.000116   0.000072   0.000072  0.0000098  0.0000093    0.000079    0.000102
+1998   5  15  50948  -0.111476   0.357817  -0.0452146   0.0014082   0.000128   0.000040   0.000073   0.000073  0.0000096  0.0000093    0.000079    0.000099
+1998   5  16  50949  -0.110954   0.359731  -0.0466702   0.0014904   0.000159   0.000180   0.000072   0.000071  0.0000094  0.0000064    0.000080    0.000097
+1998   5  17  50950  -0.110619   0.361444  -0.0482341   0.0016342   0.000157   0.000267   0.000072   0.000071  0.0000093  0.0000070    0.000080    0.000094
+1998   5  18  50951  -0.110473   0.363302  -0.0499550   0.0017990   0.000129   0.000270   0.000074   0.000073  0.0000091  0.0000086    0.000080    0.000092
+1998   5  19  50952  -0.110078   0.364996  -0.0518603   0.0019965   0.000092   0.000181   0.000074   0.000075  0.0000089  0.0000073    0.000081    0.000089
+1998   5  20  50953  -0.109944   0.367014  -0.0539513   0.0021678   0.000059   0.000016   0.000071   0.000072  0.0000087  0.0000070    0.000081    0.000086
+1998   5  21  50954  -0.110118   0.369315  -0.0562019   0.0022965   0.000046  -0.000204   0.000069   0.000070  0.0000063  0.0000082    0.000074    0.000089
+1998   5  22  50955  -0.109610   0.371764  -0.0585586   0.0023842   0.000044  -0.000394   0.000071   0.000073  0.0000060  0.0000096    0.000074    0.000091
+1998   5  23  50956  -0.109253   0.374657  -0.0609413   0.0023738   0.000049  -0.000509   0.000076   0.000077  0.0000068  0.0000097    0.000077    0.000092
+1998   5  24  50957  -0.108751   0.377328  -0.0632551   0.0022623   0.000055  -0.000530   0.000073   0.000074  0.0000075  0.0000084    0.000080    0.000093
+1998   5  25  50958  -0.108132   0.379944  -0.0654122   0.0020594   0.000053  -0.000455   0.000068   0.000069  0.0000082  0.0000073    0.000082    0.000094
+1998   5  26  50959  -0.107536   0.382268  -0.0673562   0.0018169   0.000040  -0.000306   0.000066   0.000069  0.0000090  0.0000068    0.000085    0.000095
+1998   5  27  50960  -0.107375   0.384645  -0.0690768   0.0016083   0.000016  -0.000119   0.000066   0.000068  0.0000097  0.0000074    0.000088    0.000096
+1998   5  28  50961  -0.107450   0.386508  -0.0706071   0.0014534  -0.000014   0.000061   0.000067   0.000069  0.0000098  0.0000078    0.000089    0.000097
+1998   5  29  50962  -0.107304   0.387981  -0.0720056   0.0013527  -0.000042   0.000199   0.000068   0.000071  0.0000096  0.0000077    0.000090    0.000099
+1998   5  30  50963  -0.106512   0.389409  -0.0733339   0.0013254  -0.000058   0.000273   0.000069   0.000071  0.0000094  0.0000081    0.000091    0.000100
+1998   5  31  50964  -0.105860   0.391492  -0.0746390   0.0013273  -0.000055   0.000276   0.000072   0.000072  0.0000093  0.0000077    0.000091    0.000102
+1998   6   1  50965  -0.105288   0.393630  -0.0759468   0.0013142  -0.000029   0.000215   0.000076   0.000075  0.0000091  0.0000065    0.000093    0.000104
+1998   6   2  50966  -0.104810   0.395687  -0.0772637   0.0013050   0.000018   0.000111   0.000077   0.000076  0.0000089  0.0000064    0.000093    0.000105
+1998   6   3  50967  -0.104314   0.397580  -0.0785818   0.0013067   0.000079  -0.000008   0.000073   0.000073  0.0000088  0.0000068    0.000094    0.000107
+1998   6   4  50968  -0.104637   0.399299  -0.0798825   0.0012904   0.000142  -0.000113   0.000074   0.000074  0.0000089  0.0000065    0.000092    0.000106
+1998   6   5  50969  -0.104770   0.400810  -0.0811403   0.0012495   0.000193  -0.000184   0.000079   0.000079  0.0000091  0.0000070    0.000090    0.000104
+1998   6   6  50970  -0.104632   0.402468  -0.0823265   0.0011515   0.000222  -0.000213   0.000081   0.000079  0.0000092  0.0000060    0.000087    0.000102
+1998   6   7  50971  -0.104146   0.403880  -0.0834154   0.0010332   0.000224  -0.000203   0.000077   0.000077  0.0000094  0.0000051    0.000085    0.000101
+1998   6   8  50972  -0.103623   0.405689  -0.0843913   0.0009064   0.000201  -0.000169   0.000072   0.000074  0.0000096  0.0000055    0.000082    0.000099
+1998   6   9  50973  -0.103043   0.407167  -0.0852558   0.0007986   0.000162  -0.000132   0.000070   0.000072  0.0000098  0.0000051    0.000080    0.000097
+1998   6  10  50974  -0.102203   0.408846  -0.0860288   0.0007335   0.000125  -0.000111   0.000071   0.000072  0.0000100  0.0000051    0.000077    0.000095
+1998   6  11  50975  -0.101205   0.410481  -0.0867454   0.0006819   0.000101  -0.000119   0.000070   0.000071  0.0000101  0.0000057    0.000077    0.000097
+1998   6  12  50976  -0.100426   0.412135  -0.0874463   0.0006764   0.000102  -0.000156   0.000070   0.000071  0.0000101  0.0000065    0.000078    0.000099
+1998   6  13  50977  -0.100034   0.413423  -0.0881683   0.0007476   0.000126  -0.000207   0.000071   0.000072  0.0000101  0.0000065    0.000079    0.000102
+1998   6  14  50978  -0.099490   0.414612  -0.0889379   0.0008297   0.000161  -0.000250   0.000072   0.000072  0.0000101  0.0000053    0.000080    0.000104
+1998   6  15  50979  -0.098326   0.415669  -0.0897700   0.0008813   0.000185  -0.000263   0.000071   0.000072  0.0000101  0.0000060    0.000082    0.000106
+1998   6  16  50980  -0.097027   0.417280  -0.0906698   0.0009337   0.000171  -0.000235   0.000070   0.000069  0.0000101  0.0000080    0.000082    0.000109
+1998   6  17  50981  -0.095388   0.418619  -0.0916315   0.0009891   0.000154  -0.000219   0.000068   0.000067  0.0000090  0.0000079    0.000082    0.000095
+1998   6  18  50982  -0.093560   0.420456  -0.0926334   0.0010025  -0.000031  -0.000069   0.000066   0.000066  0.0000061  0.0000076    0.000063    0.000064
+1998   6  19  50983  -0.091760   0.422065  -0.0936277   0.0009662  -0.000196  -0.000033   0.000068   0.000068  0.0000059  0.0000077    0.000065    0.000111
+1998   6  20  50984  -0.089753   0.423660  -0.0945547   0.0008777  -0.000295  -0.000116   0.000070   0.000070  0.0000069  0.0000077    0.000077    0.000190
+1998   6  21  50985  -0.088091   0.425050  -0.0953645   0.0007459  -0.000322  -0.000248   0.000073   0.000073  0.0000080  0.0000080    0.000088    0.000268
+1998   6  22  50986  -0.086376   0.426182  -0.0960330   0.0006108  -0.000274  -0.000364   0.000075   0.000077  0.0000091  0.0000077    0.000100    0.000347
+1998   6  23  50987  -0.084721   0.427471  -0.0965694   0.0004790  -0.000173  -0.000398   0.000075   0.000076  0.0000101  0.0000062    0.000111    0.000425
+1998   6  24  50988  -0.082754   0.428914  -0.0970100   0.0004008  -0.000017  -0.000314   0.000074   0.000074  0.0000112  0.0000060    0.000100    0.000169
+1998   6  25  50989  -0.081207   0.430640  -0.0974021   0.0003814   0.000044  -0.000088   0.000070   0.000070  0.0000075  0.0000071    0.000054    0.000062
+1998   6  26  50990  -0.079832   0.432083  -0.0977889   0.0003979   0.000137   0.000054   0.000072   0.000073  0.0000078  0.0000077    0.000063    0.000080
+1998   6  27  50991  -0.078225   0.433318  -0.0982041   0.0004417   0.000262   0.000064   0.000078   0.000080  0.0000107  0.0000075    0.000103    0.000134
+1998   6  28  50992  -0.076273   0.434453  -0.0986707   0.0005007   0.000362  -0.000021   0.000074   0.000075  0.0000136  0.0000066    0.000144    0.000188
+1998   6  29  50993  -0.073773   0.435648  -0.0991992   0.0005510   0.000398  -0.000145   0.000069   0.000070  0.0000165  0.0000064    0.000184    0.000242
+1998   6  30  50994  -0.071110   0.437050  -0.0997853   0.0005938   0.000329  -0.000230   0.000069   0.000071  0.0000194  0.0000068    0.000225    0.000296
+1998   7   1  50995  -0.068273   0.438808  -0.1004071   0.0006234   0.000179  -0.000201   0.000070   0.000072  0.0000124  0.0000079    0.000133    0.000148
+1998   7   2  50996  -0.065504   0.440752  -0.1010270   0.0006034  -0.000154  -0.000050   0.000071   0.000071  0.0000078  0.0000082    0.000117    0.000108
+1998   7   3  50997  -0.063051   0.442157  -0.1016035   0.0005259  -0.000414   0.000125   0.000073   0.000073  0.0000074  0.0000080    0.000118    0.000108
+1998   7   4  50998  -0.060353   0.443783  -0.1020998   0.0004333  -0.000532   0.000270   0.000076   0.000077  0.0000080  0.0000066    0.000112    0.000105
+1998   7   5  50999  -0.058120   0.445458  -0.1024894   0.0003383  -0.000504   0.000337   0.000082   0.000082  0.0000085  0.0000064    0.000105    0.000101
+1998   7   6  51000  -0.055281   0.447285  -0.1027600   0.0002387  -0.000353   0.000296   0.000087   0.000088  0.0000091  0.0000077    0.000099    0.000098
+1998   7   7  51001  -0.052933   0.448887  -0.1029164   0.0001235  -0.000142   0.000152   0.000085   0.000085  0.0000096  0.0000095    0.000093    0.000095
+1998   7   8  51002  -0.050208   0.449999  -0.1029841   0.0000438   0.000051  -0.000060   0.000079   0.000078  0.0000102  0.0000105    0.000087    0.000091
+1998   7   9  51003  -0.047864   0.451189  -0.1030125   0.0000159   0.000151  -0.000285   0.000081   0.000080  0.0000103  0.0000088    0.000083    0.000091
+1998   7  10  51004  -0.045137   0.452422  -0.1030703   0.0000860   0.000148  -0.000457   0.000082   0.000082  0.0000103  0.0000088    0.000080    0.000091
+1998   7  11  51005  -0.042817   0.454335  -0.1032309   0.0002446   0.000069  -0.000525   0.000079   0.000079  0.0000102  0.0000091    0.000078    0.000091
+1998   7  12  51006  -0.040172   0.456077  -0.1035495   0.0004149  -0.000042  -0.000472   0.000075   0.000075  0.0000102  0.0000093    0.000075    0.000092
+1998   7  13  51007  -0.037752   0.457694  -0.1040440   0.0005824  -0.000134  -0.000325   0.000069   0.000070  0.0000101  0.0000102    0.000072    0.000092
+1998   7  14  51008  -0.035464   0.459147  -0.1046889   0.0006958  -0.000176  -0.000154   0.000068   0.000068  0.0000101  0.0000096    0.000071    0.000093
+1998   7  15  51009  -0.032936   0.460498  -0.1054240   0.0007479  -0.000081   0.000037   0.000069   0.000069  0.0000099  0.0000095    0.000090    0.000096
+1998   7  16  51010  -0.030859   0.461641  -0.1061737   0.0007323  -0.000108  -0.000048   0.000068   0.000068  0.0000075  0.0000098    0.000078    0.000073
+1998   7  17  51011  -0.028651   0.462490  -0.1068704   0.0006358  -0.000063  -0.000287   0.000069   0.000070  0.0000078  0.0000082    0.000086    0.000087
+1998   7  18  51012  -0.026596   0.463311  -0.1074585   0.0005043   0.000040  -0.000577   0.000069   0.000071  0.0000095  0.0000077    0.000104    0.000119
+1998   7  19  51013  -0.024583   0.464178  -0.1078992   0.0003671   0.000138  -0.000808   0.000068   0.000069  0.0000112  0.0000081    0.000123    0.000151
+1998   7  20  51014  -0.022524   0.465068  -0.1081825   0.0002334   0.000194  -0.000870   0.000067   0.000067  0.0000129  0.0000091    0.000142    0.000183
+1998   7  21  51015  -0.020594   0.465934  -0.1083355   0.0001307   0.000183  -0.000713   0.000067   0.000069  0.0000147  0.0000090    0.000160    0.000215
+1998   7  22  51016  -0.018702   0.466814  -0.1084201   0.0000911   0.000058  -0.000293   0.000067   0.000069  0.0000163  0.0000078    0.000148    0.000149
+1998   7  23  51017  -0.016592   0.467692  -0.1085153   0.0001182  -0.000049   0.000145   0.000071   0.000072  0.0000160  0.0000080    0.000138    0.000122
+1998   7  24  51018  -0.014301   0.468502  -0.1086863   0.0001992  -0.000109   0.000500   0.000070   0.000072  0.0000149  0.0000081    0.000130    0.000116
+1998   7  25  51019  -0.011944   0.469146  -0.1089629   0.0003260  -0.000117   0.000706   0.000067   0.000069  0.0000139  0.0000067    0.000123    0.000109
+1998   7  26  51020  -0.009385   0.469834  -0.1093374   0.0004341  -0.000076   0.000727   0.000071   0.000073  0.0000129  0.0000065    0.000115    0.000102
+1998   7  27  51021  -0.006619   0.470978  -0.1097781   0.0004798  -0.000014   0.000584   0.000075   0.000077  0.0000119  0.0000085    0.000107    0.000096
+1998   7  28  51022  -0.004223   0.472086  -0.1102492   0.0004690   0.000037   0.000335   0.000074   0.000076  0.0000109  0.0000082    0.000100    0.000089
+1998   7  29  51023  -0.001812   0.473235  -0.1107246   0.0004550   0.000053   0.000054   0.000072   0.000074  0.0000099  0.0000070    0.000092    0.000083
+1998   7  30  51024   0.000302   0.474381  -0.1111927   0.0004744   0.000007  -0.000178   0.000070   0.000072  0.0000078  0.0000081    0.000110    0.000125
+1998   7  31  51025   0.002021   0.475625  -0.1116506   0.0004743  -0.000049  -0.000343   0.000075   0.000077  0.0000077  0.0000092    0.000117    0.000136
+1998   8   1  51026   0.003865   0.476509  -0.1120940   0.0004492  -0.000098  -0.000425   0.000077   0.000079  0.0000083  0.0000094    0.000115    0.000129
+1998   8   2  51027   0.005994   0.477179  -0.1125126   0.0003899  -0.000125  -0.000422   0.000081   0.000082  0.0000089  0.0000088    0.000114    0.000122
+1998   8   3  51028   0.007738   0.477480  -0.1128952   0.0003378  -0.000123  -0.000352   0.000085   0.000087  0.0000095  0.0000082    0.000113    0.000115
+1998   8   4  51029   0.009745   0.477687  -0.1132389   0.0003136  -0.000098  -0.000244   0.000086   0.000088  0.0000101  0.0000084    0.000111    0.000108
+1998   8   5  51030   0.011900   0.478249  -0.1135584   0.0003235  -0.000061  -0.000127   0.000087   0.000087  0.0000108  0.0000084    0.000110    0.000101
+1998   8   6  51031   0.014240   0.478444  -0.1138902   0.0003602  -0.000032  -0.000029   0.000092   0.000093  0.0000102  0.0000079    0.000100    0.000092
+1998   8   7  51032   0.016175   0.478774  -0.1142887   0.0004457  -0.000022   0.000032   0.000095   0.000097  0.0000093  0.0000085    0.000088    0.000081
+1998   8   8  51033   0.017787   0.478798  -0.1148109   0.0005898  -0.000039   0.000044   0.000092   0.000094  0.0000084  0.0000093    0.000074    0.000071
+1998   8   9  51034   0.019845   0.478429  -0.1154960   0.0007747  -0.000077   0.000011   0.000093   0.000094  0.0000074  0.0000083    0.000061    0.000061
+1998   8  10  51035   0.022283   0.478485  -0.1163452   0.0009285  -0.000121  -0.000055   0.000092   0.000094  0.0000065  0.0000084    0.000049    0.000050
+1998   8  11  51036   0.024663   0.478635  -0.1173138   0.0009914  -0.000151  -0.000128   0.000083   0.000086  0.0000056  0.0000096    0.000035    0.000040
+1998   8  12  51037   0.027589   0.478633  -0.1183199   0.0009958  -0.000160  -0.000200   0.000079   0.000082  0.0000092  0.0000101    0.000085    0.000070
+1998   8  13  51038   0.030540   0.478748  -0.1192682   0.0009200  -0.000104  -0.000223   0.000085   0.000087  0.0000103  0.0000109    0.000099    0.000078
+1998   8  14  51039   0.033343   0.478510  -0.1200802   0.0007600  -0.000005  -0.000203   0.000087   0.000089  0.0000104  0.0000110    0.000101    0.000078
+1998   8  15  51040   0.035514   0.478505  -0.1207171   0.0005587   0.000095  -0.000160   0.000087   0.000089  0.0000105  0.0000101    0.000102    0.000077
+1998   8  16  51041   0.037214   0.478219  -0.1211843   0.0003819   0.000153  -0.000119   0.000086   0.000089  0.0000106  0.0000094    0.000103    0.000077
+1998   8  17  51042   0.039369   0.477753  -0.1215223   0.0002866   0.000136  -0.000106   0.000085   0.000088  0.0000106  0.0000090    0.000105    0.000076
+1998   8  18  51043   0.041652   0.477365  -0.1217866   0.0002358   0.000034  -0.000132   0.000086   0.000088  0.0000107  0.0000088    0.000106    0.000076
+1998   8  19  51044   0.043892   0.477281  -0.1220298   0.0001978  -0.000161  -0.000213   0.000087   0.000087  0.0000108  0.0000103    0.000109    0.000096
+1998   8  20  51045   0.046147   0.477341  -0.1222906   0.0002121  -0.000332  -0.000279   0.000090   0.000089  0.0000107  0.0000099    0.000109    0.000102
+1998   8  21  51046   0.048322   0.477476  -0.1225925   0.0003144  -0.000439  -0.000315   0.000091   0.000091  0.0000106  0.0000085    0.000109    0.000103
+1998   8  22  51047   0.050332   0.477177  -0.1229489   0.0004283  -0.000457  -0.000317   0.000091   0.000091  0.0000105  0.0000097    0.000108    0.000104
+1998   8  23  51048   0.052236   0.476716  -0.1233694   0.0004882  -0.000389  -0.000286   0.000094   0.000093  0.0000104  0.0000112    0.000107    0.000104
+1998   8  24  51049   0.054141   0.476613  -0.1238620   0.0005459  -0.000263  -0.000237   0.000098   0.000096  0.0000103  0.0000094    0.000106    0.000105
+1998   8  25  51050   0.056047   0.476615  -0.1244294   0.0005996  -0.000129  -0.000188   0.000093   0.000093  0.0000102  0.0000088    0.000105    0.000106
+1998   8  26  51051   0.058208   0.476661  -0.1250616   0.0006644   0.000005  -0.000156   0.000086   0.000087  0.0000107  0.0000088    0.000100    0.000083
+1998   8  27  51052   0.060377   0.476586  -0.1257312   0.0006535  -0.000016  -0.000137   0.000091   0.000094  0.0000087  0.0000084    0.000095    0.000087
+1998   8  28  51053   0.063026   0.476539  -0.1263947   0.0005792  -0.000074  -0.000128   0.000093   0.000096  0.0000082  0.0000120    0.000095    0.000091
+1998   8  29  51054   0.065559   0.476380  -0.1270163   0.0005247  -0.000133  -0.000127   0.000094   0.000093  0.0000085  0.0000147    0.000095    0.000091
+1998   8  30  51055   0.067535   0.476579  -0.1275867   0.0005575  -0.000173  -0.000126   0.000092   0.000090  0.0000089  0.0000128    0.000097    0.000092
+1998   8  31  51056   0.069506   0.476188  -0.1281246   0.0005890  -0.000169  -0.000126   0.000088   0.000086  0.0000093  0.0000094    0.000098    0.000093
+1998   9   1  51057   0.071099   0.475846  -0.1286658   0.0006094  -0.000116  -0.000123   0.000089   0.000087  0.0000097  0.0000113    0.000099    0.000094
+1998   9   2  51058   0.072867   0.475012  -0.1292507   0.0006586  -0.000026  -0.000118   0.000086   0.000085  0.0000100  0.0000133    0.000100    0.000095
+1998   9   3  51059   0.074710   0.473719  -0.1299196   0.0007357   0.000077  -0.000115   0.000084   0.000083  0.0000099  0.0000124    0.000099    0.000093
+1998   9   4  51060   0.077034   0.472380  -0.1307121   0.0008593   0.000168  -0.000114   0.000086   0.000084  0.0000097  0.0000117    0.000097    0.000089
+1998   9   5  51061   0.079792   0.471216  -0.1316660   0.0010541   0.000227  -0.000117   0.000084   0.000082  0.0000094  0.0000105    0.000095    0.000086
+1998   9   6  51062   0.082456   0.470298  -0.1328046   0.0012430   0.000242  -0.000122   0.000087   0.000085  0.0000091  0.0000119    0.000092    0.000082
+1998   9   7  51063   0.084926   0.469242  -0.1341198   0.0013878   0.000211  -0.000132   0.000092   0.000089  0.0000089  0.0000144    0.000090    0.000079
+1998   9   8  51064   0.087242   0.468500  -0.1355597   0.0014604   0.000143  -0.000142   0.000097   0.000093  0.0000086  0.0000133    0.000088    0.000075
+1998   9   9  51065   0.089364   0.467973  -0.1370350   0.0014422   0.000055  -0.000150   0.000095   0.000090  0.0000084  0.0000130    0.000086    0.000072
+1998   9  10  51066   0.091378   0.467249  -0.1384423   0.0013288  -0.000036  -0.000155   0.000092   0.000087  0.0000086  0.0000114    0.000088    0.000073
+1998   9  11  51067   0.093193   0.466815  -0.1396965   0.0011493  -0.000110  -0.000155   0.000096   0.000091  0.0000090  0.0000090    0.000090    0.000077
+1998   9  12  51068   0.094917   0.466240  -0.1407557   0.0009623  -0.000156  -0.000150   0.000100   0.000095  0.0000094  0.0000101    0.000092    0.000080
+1998   9  13  51069   0.096750   0.465939  -0.1416303   0.0007907  -0.000167  -0.000142   0.000097   0.000091  0.0000099  0.0000104    0.000095    0.000083
+1998   9  14  51070   0.098955   0.465299  -0.1423744   0.0006910  -0.000144  -0.000133   0.000094   0.000089  0.0000103  0.0000113    0.000097    0.000087
+1998   9  15  51071   0.101731   0.465152  -0.1430620   0.0006999  -0.000096  -0.000126   0.000094   0.000090  0.0000107  0.0000101    0.000100    0.000090
+1998   9  16  51072   0.104166   0.464857  -0.1437595   0.0007637  -0.000037  -0.000125   0.000092   0.000089  0.0000111  0.0000092    0.000103    0.000093
+1998   9  17  51073   0.106430   0.464497  -0.1445049   0.0008307   0.000020  -0.000127   0.000093   0.000089  0.0000108  0.0000097    0.000134    0.000139
+1998   9  18  51074   0.107906   0.464030  -0.1453070   0.0009057   0.000055  -0.000135   0.000095   0.000091  0.0000103  0.0000080    0.000158    0.000176
+1998   9  19  51075   0.109179   0.462759  -0.1461665   0.0010053   0.000055  -0.000147   0.000095   0.000091  0.0000098  0.0000090    0.000143    0.000156
+1998   9  20  51076   0.110427   0.461268  -0.1471019   0.0011045   0.000024  -0.000156   0.000093   0.000090  0.0000093  0.0000099    0.000128    0.000136
+1998   9  21  51077   0.112006   0.459620  -0.1481564   0.0011464  -0.000028  -0.000156   0.000088   0.000089  0.0000088  0.0000093    0.000114    0.000116
+1998   9  22  51078   0.113824   0.458231  -0.1493658   0.0011347  -0.000085  -0.000143   0.000085   0.000087  0.0000083  0.0000103    0.000099    0.000096
+1998   9  23  51079   0.115798   0.456628  -0.1507047   0.0010592  -0.000130  -0.000116   0.000083   0.000084  0.0000078  0.0000116    0.000085    0.000076
+1998   9  24  51080   0.117547   0.455215  -0.1520598   0.0010081  -0.000152  -0.000075   0.000084   0.000084  0.0000076  0.0000102    0.000081    0.000070
+1998   9  25  51081   0.119165   0.453886  -0.1532734   0.0009565  -0.000146  -0.000026   0.000088   0.000088  0.0000075  0.0000072    0.000081    0.000070
+1998   9  26  51082   0.120265   0.452728  -0.1542392   0.0009176  -0.000117   0.000022   0.000092   0.000093  0.0000074  0.0000076    0.000082    0.000070
+1998   9  27  51083   0.121234   0.451414  -0.1549771   0.0008793  -0.000076   0.000058   0.000095   0.000095  0.0000072  0.0000092    0.000082    0.000069
+1998   9  28  51084   0.122144   0.449883  -0.1556197   0.0008244  -0.000038   0.000075   0.000092   0.000091  0.0000071  0.0000094    0.000082    0.000069
+1998   9  29  51085   0.123230   0.447977  -0.1563210   0.0008260  -0.000018   0.000066   0.000086   0.000086  0.0000070  0.0000105    0.000082    0.000069
+1998   9  30  51086   0.124123   0.446552  -0.1571670   0.0009189  -0.000011   0.000041   0.000085   0.000085  0.0000090  0.0000106    0.000093    0.000095
+1998  10   1  51087   0.125225   0.445102  -0.1581676   0.0010775  -0.000048  -0.000019   0.000087   0.000089  0.0000085  0.0000102    0.000074    0.000081
+1998  10   2  51088   0.126449   0.444072  -0.1593475   0.0012899  -0.000096  -0.000082   0.000086   0.000086  0.0000072  0.0000107    0.000045    0.000055
+1998  10   3  51089   0.127917   0.442585  -0.1607544   0.0015277  -0.000115  -0.000104   0.000085   0.000085  0.0000072  0.0000098    0.000053    0.000058
+1998  10   4  51090   0.129823   0.441297  -0.1623949   0.0017306  -0.000095  -0.000108   0.000090   0.000092  0.0000073  0.0000097    0.000064    0.000064
+1998  10   5  51091   0.131492   0.439777  -0.1642116   0.0018721  -0.000047  -0.000104   0.000094   0.000096  0.0000074  0.0000097    0.000076    0.000070
+1998  10   6  51092   0.132923   0.438101  -0.1661040   0.0018956  -0.000006  -0.000095   0.000093   0.000095  0.0000075  0.0000099    0.000088    0.000076
+1998  10   7  51093   0.134298   0.436163  -0.1679758   0.0018180   0.000055  -0.000189   0.000094   0.000095  0.0000113  0.0000104    0.000116    0.000105
+1998  10   8  51094   0.135614   0.433970  -0.1697686   0.0017079  -0.000084  -0.000066   0.000095   0.000093  0.0000078  0.0000111    0.000078    0.000095
+1998  10   9  51095   0.137090   0.432040  -0.1714367   0.0015905  -0.000319   0.000020   0.000096   0.000093  0.0000066  0.0000117    0.000063    0.000084
+1998  10  10  51096   0.138853   0.430574  -0.1729577   0.0014655  -0.000554   0.000037   0.000096   0.000095  0.0000072  0.0000105    0.000064    0.000076
+1998  10  11  51097   0.140141   0.429768  -0.1743431   0.0013190  -0.000695   0.000012   0.000093   0.000092  0.0000078  0.0000103    0.000065    0.000069
+1998  10  12  51098   0.141367   0.428623  -0.1756310   0.0012583  -0.000663  -0.000045   0.000099   0.000098  0.0000084  0.0000120    0.000066    0.000062
+1998  10  13  51099   0.142029   0.427854  -0.1768737   0.0012539  -0.000441  -0.000111   0.000101   0.000100  0.0000090  0.0000126    0.000067    0.000055
+1998  10  14  51100   0.142781   0.426150  -0.1781224   0.0013138   0.000018  -0.000136   0.000096   0.000096  0.0000096  0.0000110    0.000087    0.000092
+1998  10  15  51101   0.143983   0.424579  -0.1794154   0.0013755   0.000383  -0.000170   0.000097   0.000097  0.0000096  0.0000085    0.000092    0.000102
+1998  10  16  51102   0.145158   0.423291  -0.1807707   0.0013843   0.000599  -0.000203   0.000099   0.000099  0.0000095  0.0000092    0.000093    0.000102
+1998  10  17  51103   0.146610   0.422183  -0.1821872   0.0014249   0.000653  -0.000233   0.000101   0.000100  0.0000093  0.0000108    0.000094    0.000103
+1998  10  18  51104   0.147951   0.421134  -0.1836488   0.0014614   0.000571  -0.000254   0.000104   0.000105  0.0000092  0.0000105    0.000095    0.000103
+1998  10  19  51105   0.149169   0.419902  -0.1851320   0.0014723   0.000419  -0.000258   0.000104   0.000107  0.0000091  0.0000099    0.000096    0.000103
+1998  10  20  51106   0.150120   0.418572  -0.1866114   0.0014537   0.000269  -0.000238   0.000098   0.000100  0.0000089  0.0000101    0.000097    0.000104
+1998  10  21  51107   0.151142   0.417031  -0.1880647   0.0014219   0.000168  -0.000187   0.000092   0.000094  0.0000088  0.0000100    0.000098    0.000104
+1998  10  22  51108   0.151753   0.414924  -0.1894758   0.0013638   0.000173  -0.000108   0.000090   0.000092  0.0000071  0.0000085    0.000101    0.000105
+1998  10  23  51109   0.152209   0.413092  -0.1908356   0.0012714   0.000189   0.000000   0.000090   0.000092  0.0000070  0.0000070    0.000101    0.000104
+1998  10  24  51110   0.152407   0.411067  -0.1921387   0.0012330   0.000194   0.000114   0.000094   0.000094  0.0000077  0.0000080    0.000100    0.000103
+1998  10  25  51111   0.152892   0.409613  -0.1933827   0.0012442   0.000188   0.000204   0.000091   0.000090  0.0000084  0.0000085    0.000099    0.000102
+1998  10  26  51112   0.153347   0.408126  -0.1945719   0.0012067   0.000170   0.000245   0.000085   0.000087  0.0000091  0.0000099    0.000098    0.000100
+1998  10  27  51113   0.154045   0.406354  -0.1957279   0.0011797   0.000146   0.000228   0.000082   0.000086  0.0000098  0.0000104    0.000097    0.000099
+1998  10  28  51114   0.154899   0.404677  -0.1969002   0.0012141   0.000119   0.000168   0.000081   0.000082  0.0000105  0.0000092    0.000096    0.000098
+1998  10  29  51115   0.155954   0.402817  -0.1981644   0.0013423   0.000112   0.000061   0.000079   0.000077  0.0000113  0.0000113    0.000074    0.000088
+1998  10  30  51116   0.157120   0.401369  -0.1996018   0.0015283   0.000075  -0.000010   0.000078   0.000079  0.0000121  0.0000125    0.000061    0.000084
+1998  10  31  51117   0.158130   0.399820  -0.2012669   0.0017552  -0.000023   0.000013   0.000080   0.000082  0.0000130  0.0000122    0.000091    0.000100
+1998  11   1  51118   0.159319   0.398389  -0.2031589   0.0019863  -0.000126   0.000065   0.000085   0.000086  0.0000138  0.0000107    0.000121    0.000117
+1998  11   2  51119   0.160745   0.396949  -0.2052159   0.0021278  -0.000199   0.000104   0.000090   0.000091  0.0000147  0.0000091    0.000150    0.000133
+1998  11   3  51120   0.161787   0.395384  -0.2073360   0.0021183  -0.000218   0.000099   0.000091   0.000093  0.0000155  0.0000110    0.000179    0.000150
+1998  11   4  51121   0.162821   0.394073  -0.2094121   0.0020136  -0.000123  -0.000011   0.000090   0.000091  0.0000108  0.0000132    0.000128    0.000130
+1998  11   5  51122   0.163271   0.392328  -0.2113631   0.0018696  -0.000057  -0.000122   0.000088   0.000089  0.0000057  0.0000132    0.000088    0.000102
+1998  11   6  51123   0.163005   0.390673  -0.2131331   0.0017081  -0.000051  -0.000083   0.000091   0.000094  0.0000146  0.0000131    0.000118    0.000111
+1998  11   7  51124   0.163118   0.388323  -0.2147314   0.0015676  -0.000057  -0.000008   0.000098   0.000101  0.0000184  0.0000105    0.000267    0.000319
+1998  11   8  51125   0.163529   0.385996  -0.2162179   0.0014571  -0.000064   0.000052   0.000105   0.000107  0.0000166  0.0000099    0.000468    0.000628
+1998  11   9  51126   0.164239   0.383501  -0.2176606   0.0014470  -0.000069   0.000089   0.000107   0.000107  0.0000147  0.0000107    0.000669    0.000937
+1998  11  10  51127   0.164828   0.381368  -0.2191094   0.0014612  -0.000064   0.000081   0.000099   0.000099  0.0000129  0.0000109    0.000676    0.000956
+1998  11  11  51128   0.165498   0.378897  -0.2205861   0.0014748  -0.000048   0.000026   0.000089   0.000087  0.0000110  0.0000115    0.000212    0.000274
+1998  11  12  51129   0.166126   0.376941  -0.2220893   0.0015038  -0.000057   0.000024   0.000088   0.000088  0.0000108  0.0000108    0.000093    0.000091
+1998  11  13  51130   0.166646   0.375065  -0.2236071   0.0015182  -0.000081   0.000054   0.000092   0.000092  0.0000111  0.0000078    0.000088    0.000075
+1998  11  14  51131   0.166615   0.372699  -0.2251249   0.0015206  -0.000099   0.000079   0.000095   0.000095  0.0000115  0.0000075    0.000088    0.000074
+1998  11  15  51132   0.166172   0.370966  -0.2266275   0.0014843  -0.000104   0.000084   0.000105   0.000103  0.0000119  0.0000098    0.000094    0.000086
+1998  11  16  51133   0.165303   0.368715  -0.2281016   0.0014489  -0.000096   0.000073   0.000112   0.000109  0.0000124  0.0000092    0.000100    0.000099
+1998  11  17  51134   0.164642   0.366689  -0.2295376   0.0014052  -0.000079   0.000048   0.000109   0.000106  0.0000128  0.0000087    0.000106    0.000111
+1998  11  18  51135   0.163987   0.364776  -0.2309310   0.0013823  -0.000057   0.000023   0.000103   0.000102  0.0000132  0.0000082    0.000111    0.000123
+1998  11  19  51136   0.163844   0.362806  -0.2322815   0.0013275  -0.000039   0.000014   0.000101   0.000103  0.0000129  0.0000079    0.000109    0.000122
+1998  11  20  51137   0.163189   0.361059  -0.2335904   0.0012541  -0.000027   0.000027   0.000106   0.000109  0.0000123  0.0000077    0.000104    0.000117
+1998  11  21  51138   0.162137   0.359158  -0.2348596   0.0012246  -0.000019   0.000065   0.000107   0.000109  0.0000118  0.0000073    0.000099    0.000112
+1998  11  22  51139   0.160045   0.357478  -0.2360944   0.0012166  -0.000012   0.000118   0.000103   0.000103  0.0000112  0.0000066    0.000094    0.000106
+1998  11  23  51140   0.158064   0.355049  -0.2373093   0.0012452  -0.000002   0.000175   0.000101   0.000101  0.0000106  0.0000064    0.000090    0.000101
+1998  11  24  51141   0.156390   0.353282  -0.2385341   0.0012724   0.000015   0.000218   0.000105   0.000107  0.0000100  0.0000074    0.000085    0.000096
+1998  11  25  51142   0.154757   0.351298  -0.2398133   0.0013221   0.000038   0.000235   0.000106   0.000106  0.0000095  0.0000077    0.000080    0.000090
+1998  11  26  51143   0.153780   0.349333  -0.2411976   0.0014533   0.000063   0.000215   0.000106   0.000106  0.0000091  0.0000074    0.000078    0.000089
+1998  11  27  51144   0.152805   0.347431  -0.2427257   0.0016211   0.000085   0.000161   0.000109   0.000110  0.0000089  0.0000078    0.000077    0.000088
+1998  11  28  51145   0.151871   0.345067  -0.2444061   0.0017657   0.000095   0.000085   0.000107   0.000107  0.0000086  0.0000079    0.000076    0.000088
+1998  11  29  51146   0.150825   0.342991  -0.2462063   0.0018528   0.000087   0.000005   0.000108   0.000109  0.0000083  0.0000078    0.000075    0.000088
+1998  11  30  51147   0.150208   0.340849  -0.2480575   0.0018502   0.000059  -0.000058   0.000107   0.000111  0.0000081  0.0000080    0.000074    0.000087
+1998  12   1  51148   0.149270   0.339659  -0.2498752   0.0017509   0.000012  -0.000085   0.000103   0.000106  0.0000078  0.0000083    0.000074    0.000087
+1998  12   2  51149   0.147993   0.337786  -0.2515847   0.0016062  -0.000044  -0.000065   0.000097   0.000099  0.0000075  0.0000083    0.000072    0.000087
+1998  12   3  51150   0.146905   0.336292  -0.2531415   0.0014331  -0.000100   0.000002   0.000099   0.000100  0.0000075  0.0000081    0.000074    0.000090
+1998  12   4  51151   0.146559   0.335239  -0.2545360   0.0012789  -0.000142   0.000099   0.000107   0.000110  0.0000075  0.0000083    0.000077    0.000094
+1998  12   5  51152   0.146011   0.334602  -0.2557852   0.0011706  -0.000159   0.000197   0.000115   0.000117  0.0000075  0.0000083    0.000080    0.000098
+1998  12   6  51153   0.144880   0.333621  -0.2569222   0.0011236  -0.000149   0.000265   0.000114   0.000115  0.0000076  0.0000079    0.000083    0.000102
+1998  12   7  51154   0.143647   0.332591  -0.2579892   0.0010984  -0.000118   0.000277   0.000106   0.000106  0.0000076  0.0000076    0.000086    0.000106
+1998  12   8  51155   0.142304   0.331454  -0.2590335   0.0010759  -0.000085   0.000225   0.000100   0.000100  0.0000076  0.0000080    0.000089    0.000110
+1998  12   9  51156   0.140900   0.330021  -0.2601008   0.0010844  -0.000035   0.000158   0.000097   0.000097  0.0000089  0.0000081    0.000084    0.000098
+1998  12  10  51157   0.139637   0.328098  -0.2612206   0.0011459  -0.000072  -0.000008   0.000101   0.000101  0.0000091  0.0000082    0.000107    0.000109
+1998  12  11  51158   0.138569   0.326089  -0.2623903   0.0011878  -0.000143  -0.000116   0.000106   0.000104  0.0000089  0.0000082    0.000127    0.000119
+1998  12  12  51159   0.137848   0.324027  -0.2635785   0.0011867  -0.000193  -0.000051   0.000103   0.000100  0.0000087  0.0000077    0.000113    0.000111
+1998  12  13  51160   0.137318   0.322217  -0.2647426   0.0011312  -0.000214   0.000084   0.000091   0.000091  0.0000085  0.0000074    0.000100    0.000103
+1998  12  14  51161   0.137140   0.320448  -0.2658454   0.0010471  -0.000196   0.000220   0.000081   0.000082  0.0000083  0.0000081    0.000086    0.000094
+1998  12  15  51162   0.137233   0.318578  -0.2668620   0.0009750  -0.000143   0.000291   0.000077   0.000078  0.0000081  0.0000067    0.000073    0.000086
+1998  12  16  51163   0.137480   0.317175  -0.2677818   0.0008713  -0.000040   0.000147   0.000073   0.000075  0.0000079  0.0000065    0.000074    0.000091
+1998  12  17  51164   0.137902   0.315989  -0.2686077   0.0007881  -0.000008   0.000078   0.000070   0.000071  0.0000057  0.0000079    0.000078    0.000078
+1998  12  18  51165   0.138721   0.314743  -0.2693557   0.0007106   0.000022   0.000000   0.000073   0.000074  0.0000048  0.0000073    0.000072    0.000066
+1998  12  19  51166   0.139944   0.313534  -0.2700453   0.0006611   0.000053  -0.000074   0.000076   0.000079  0.0000047  0.0000071    0.000062    0.000057
+1998  12  20  51167   0.141331   0.312710  -0.2706962   0.0006391   0.000073  -0.000108   0.000081   0.000085  0.0000046  0.0000073    0.000052    0.000047
+1998  12  21  51168   0.142507   0.311937  -0.2713342   0.0006400   0.000080  -0.000091   0.000086   0.000090  0.0000045  0.0000070    0.000041    0.000038
+1998  12  22  51169   0.142808   0.310416  -0.2719989   0.0006948   0.000067  -0.000026   0.000079   0.000084  0.0000044  0.0000070    0.000031    0.000028
+1998  12  23  51170   0.143063   0.308447  -0.2727447   0.0008173   0.000031   0.000071   0.000078   0.000083  0.0000082  0.0000076    0.000067    0.000072
+1998  12  24  51171   0.143107   0.306854  -0.2736287   0.0009912  -0.000029   0.000190   0.000086   0.000089  0.0000091  0.0000081    0.000083    0.000090
+1998  12  25  51172   0.143091   0.305507  -0.2746850   0.0011934  -0.000099   0.000296   0.000090   0.000093  0.0000088  0.0000088    0.000090    0.000095
+1998  12  26  51173   0.142894   0.304015  -0.2759059   0.0013127  -0.000158   0.000356   0.000091   0.000092  0.0000086  0.0000090    0.000097    0.000101
+1998  12  27  51174   0.142288   0.302602  -0.2772430   0.0013361  -0.000185   0.000341   0.000094   0.000094  0.0000083  0.0000085    0.000103    0.000107
+1998  12  28  51175   0.141712   0.301423  -0.2786222   0.0013296  -0.000166   0.000241   0.000099   0.000100  0.0000080  0.0000098    0.000110    0.000112
+1998  12  29  51176   0.141295   0.300315  -0.2799661   0.0012855  -0.000098   0.000072   0.000096   0.000098  0.0000078  0.0000105    0.000117    0.000118
+1998  12  30  51177   0.140720   0.298889  -0.2812150   0.0011891   0.000016  -0.000155   0.000091   0.000091  0.0000080  0.0000102    0.000076    0.000071
+1998  12  31  51178   0.139816   0.297679  -0.2823394   0.0010543   0.000132  -0.000342   0.000096   0.000094  0.0000082  0.0000095    0.000067    0.000061
+1999   1   1  51179   0.138556   0.295932   0.7166593   0.0009431   0.000226  -0.000456   0.000097   0.000097  0.0000085  0.0000095    0.000070    0.000066
+1999   1   2  51180   0.137702   0.293717   0.7157548   0.0008776   0.000280  -0.000485   0.000096   0.000095  0.0000088  0.0000114    0.000074    0.000071
+1999   1   3  51181   0.137553   0.291797   0.7149073   0.0008616   0.000285  -0.000432   0.000090   0.000091  0.0000090  0.0000119    0.000078    0.000075
+1999   1   4  51182   0.137279   0.290386   0.7140725   0.0008692   0.000243  -0.000323   0.000081   0.000080  0.0000093  0.0000112    0.000082    0.000080
+1999   1   5  51183   0.136737   0.289080   0.7132094   0.0008862   0.000169  -0.000192   0.000079   0.000077  0.0000096  0.0000096    0.000086    0.000085
+1999   1   6  51184   0.136235   0.287929   0.7122861   0.0009623   0.000082  -0.000076   0.000074   0.000074  0.0000099  0.0000090    0.000090    0.000090
+1999   1   7  51185   0.136337   0.287264   0.7112876   0.0010610   0.000004   0.000002   0.000071   0.000073  0.0000098  0.0000087    0.000090    0.000091
+1999   1   8  51186   0.136058   0.286794   0.7102220   0.0010823  -0.000053   0.000034   0.000073   0.000075  0.0000097  0.0000077    0.000089    0.000090
+1999   1   9  51187   0.135915   0.286345   0.7091217   0.0010550  -0.000079   0.000032   0.000076   0.000077  0.0000095  0.0000079    0.000088    0.000089
+1999   1  10  51188   0.134956   0.285981   0.7080345   0.0010425  -0.000076   0.000011   0.000081   0.000082  0.0000094  0.0000083    0.000086    0.000088
+1999   1  11  51189   0.133677   0.285128   0.7070077   0.0009881  -0.000054  -0.000008   0.000084   0.000085  0.0000092  0.0000079    0.000085    0.000087
+1999   1  12  51190   0.131523   0.283832   0.7060726   0.0008842  -0.000024  -0.000011   0.000081   0.000083  0.0000090  0.0000075    0.000084    0.000086
+1999   1  13  51191   0.129154   0.281902   0.7052391   0.0007671   0.000000   0.000008   0.000081   0.000083  0.0000089  0.0000074    0.000083    0.000085
+1999   1  14  51192   0.126940   0.280251   0.7045006   0.0007044   0.000007   0.000055   0.000081   0.000083  0.0000086  0.0000078    0.000111    0.000121
+1999   1  15  51193   0.124938   0.278124   0.7038437   0.0006631  -0.000003   0.000098   0.000081   0.000082  0.0000086  0.0000081    0.000116    0.000128
+1999   1  16  51194   0.122821   0.276145   0.7032512   0.0005876  -0.000029   0.000128   0.000083   0.000085  0.0000088  0.0000086    0.000109    0.000120
+1999   1  17  51195   0.120631   0.274574   0.7026965   0.0005222  -0.000057   0.000145   0.000081   0.000083  0.0000089  0.0000086    0.000102    0.000111
+1999   1  18  51196   0.118832   0.272992   0.7021356   0.0005579  -0.000080   0.000153   0.000077   0.000079  0.0000091  0.0000084    0.000095    0.000103
+1999   1  19  51197   0.117717   0.271765   0.7015063   0.0006826  -0.000089   0.000160   0.000079   0.000080  0.0000093  0.0000084    0.000088    0.000095
+1999   1  20  51198   0.116362   0.270125   0.7007426   0.0008418  -0.000086   0.000173   0.000081   0.000082  0.0000094  0.0000083    0.000080    0.000086
+1999   1  21  51199   0.115994   0.268854   0.6997972   0.0010355  -0.000076   0.000193   0.000083   0.000083  0.0000101  0.0000068    0.000084    0.000089
+1999   1  22  51200   0.116052   0.267726   0.6986610   0.0012249  -0.000068   0.000218   0.000084   0.000085  0.0000110  0.0000070    0.000090    0.000095
+1999   1  23  51201   0.116516   0.266646   0.6973692   0.0013400  -0.000068   0.000238   0.000085   0.000087  0.0000118  0.0000091    0.000097    0.000101
+1999   1  24  51202   0.116090   0.265726   0.6959902   0.0013888  -0.000075   0.000245   0.000089   0.000091  0.0000127  0.0000087    0.000104    0.000107
+1999   1  25  51203   0.115235   0.264525   0.6946023   0.0013666  -0.000081   0.000229   0.000091   0.000093  0.0000135  0.0000084    0.000111    0.000113
+1999   1  26  51204   0.113848   0.263331   0.6932684   0.0013007  -0.000072   0.000189   0.000090   0.000091  0.0000144  0.0000084    0.000118    0.000119
+1999   1  27  51205   0.112829   0.262428   0.6920176   0.0012175  -0.000040   0.000122   0.000092   0.000091  0.0000153  0.0000087    0.000125    0.000125
+1999   1  28  51206   0.111573   0.261544   0.6908407   0.0011566  -0.000035  -0.000001   0.000089   0.000088  0.0000123  0.0000092    0.000140    0.000153
+1999   1  29  51207   0.110523   0.260776   0.6897006   0.0011455   0.000117  -0.000031   0.000086   0.000088  0.0000087  0.0000085    0.000082    0.000093
+1999   1  30  51208   0.109335   0.259822   0.6885608   0.0011761   0.000111  -0.000168   0.000090   0.000090  0.0000102  0.0000082    0.000108    0.000109
+1999   1  31  51209   0.108156   0.258846   0.6873896   0.0012053   0.000039  -0.000288   0.000094   0.000094  0.0000119  0.0000076    0.000139    0.000129
+1999   2   1  51210   0.106678   0.257585   0.6861653   0.0012514  -0.000063  -0.000329   0.000096   0.000096  0.0000137  0.0000076    0.000169    0.000150
+1999   2   2  51211   0.105047   0.256216   0.6848815   0.0012965  -0.000151  -0.000241   0.000094   0.000095  0.0000154  0.0000090    0.000200    0.000170
+1999   2   3  51212   0.103532   0.254812   0.6835477   0.0013153  -0.000118   0.000000   0.000094   0.000095  0.0000171  0.0000093    0.000151    0.000154
+1999   2   4  51213   0.101783   0.253546   0.6821849   0.0013088  -0.000086   0.000327   0.000093   0.000095  0.0000167  0.0000090    0.000146    0.000163
+1999   2   5  51214   0.100769   0.252499   0.6808200   0.0013206  -0.000025   0.000607   0.000095   0.000098  0.0000156  0.0000093    0.000157    0.000181
+1999   2   6  51215   0.100539   0.252294   0.6794823   0.0013051   0.000108   0.000656   0.000098   0.000101  0.0000145  0.0000094    0.000209    0.000215
+1999   2   7  51216   0.099851   0.252520   0.6782016   0.0012415   0.000222   0.000544   0.000096   0.000097  0.0000133  0.0000091    0.000260    0.000249
+1999   2   8  51217   0.098577   0.252343   0.6770038   0.0011769   0.000272   0.000322   0.000093   0.000093  0.0000122  0.0000085    0.000311    0.000284
+1999   2   9  51218   0.096610   0.252287   0.6759037   0.0010912   0.000236   0.000066   0.000094   0.000093  0.0000111  0.0000082    0.000363    0.000318
+1999   2  10  51219   0.094661   0.252086   0.6748976   0.0009981   0.000049  -0.000051   0.000096   0.000095  0.0000100  0.0000081    0.000159    0.000144
+1999   2  11  51220   0.092336   0.251428   0.6739630   0.0009078  -0.000078  -0.000233   0.000097   0.000094  0.0000097  0.0000090    0.000113    0.000101
+1999   2  12  51221   0.090687   0.250252   0.6730645   0.0008989  -0.000140  -0.000403   0.000104   0.000097  0.0000097  0.0000103    0.000128    0.000108
+1999   2  13  51222   0.089215   0.249601   0.6721597   0.0009358  -0.000170  -0.000460   0.000107   0.000099  0.0000097  0.0000102    0.000120    0.000116
+1999   2  14  51223   0.087880   0.248440   0.6712026   0.0010119  -0.000155  -0.000423   0.000109   0.000104  0.0000097  0.0000109    0.000113    0.000124
+1999   2  15  51224   0.086802   0.247488   0.6701452   0.0011494  -0.000116  -0.000305   0.000111   0.000107  0.0000097  0.0000121    0.000105    0.000132
+1999   2  16  51225   0.085794   0.246935   0.6689444   0.0012738  -0.000075  -0.000147   0.000107   0.000102  0.0000097  0.0000128    0.000097    0.000136
+1999   2  17  51226   0.084486   0.246901   0.6675757   0.0014350  -0.000055   0.000058   0.000107   0.000103  0.0000097  0.0000135    0.000090    0.000103
+1999   2  18  51227   0.082676   0.246986   0.6660459   0.0015875  -0.000036   0.000046   0.000108   0.000106  0.0000140  0.0000129    0.000106    0.000113
+1999   2  19  51228   0.080738   0.246690   0.6643970   0.0016861  -0.000019  -0.000097   0.000109   0.000106  0.0000198  0.0000128    0.000131    0.000138
+1999   2  20  51229   0.079269   0.246091   0.6626985   0.0016762  -0.000007  -0.000190   0.000109   0.000102  0.0000182  0.0000128    0.000126    0.000130
+1999   2  21  51230   0.078448   0.245630   0.6610308   0.0016144  -0.000005  -0.000251   0.000105   0.000099  0.0000167  0.0000112    0.000121    0.000122
+1999   2  22  51231   0.078223   0.245343   0.6594665   0.0015032  -0.000019  -0.000247   0.000110   0.000103  0.0000151  0.0000130    0.000115    0.000114
+1999   2  23  51232   0.078169   0.245079   0.6580548   0.0013382  -0.000059  -0.000178   0.000106   0.000101  0.0000136  0.0000124    0.000110    0.000106
+1999   2  24  51233   0.077787   0.244851   0.6568126   0.0011506  -0.000126  -0.000070   0.000094   0.000092  0.0000120  0.0000092    0.000105    0.000098
+1999   2  25  51234   0.076505   0.244565   0.6557245   0.0010022  -0.000218   0.000036   0.000098   0.000095  0.0000115  0.0000088    0.000103    0.000095
+1999   2  26  51235   0.075028   0.244029   0.6547513   0.0009225  -0.000318   0.000116   0.000101   0.000097  0.0000114  0.0000100    0.000102    0.000095
+1999   2  27  51236   0.073094   0.243404   0.6538441   0.0008998  -0.000404   0.000162   0.000100   0.000098  0.0000112  0.0000111    0.000102    0.000094
+1999   2  28  51237   0.071453   0.242511   0.6529587   0.0009142  -0.000453   0.000170   0.000107   0.000105  0.0000110  0.0000143    0.000101    0.000094
+1999   3   1  51238   0.070010   0.242040   0.6520632   0.0009326  -0.000450   0.000156   0.000111   0.000107  0.0000109  0.0000155    0.000101    0.000093
+1999   3   2  51239   0.068920   0.241535   0.6511399   0.0009484  -0.000386   0.000133   0.000107   0.000103  0.0000107  0.0000126    0.000100    0.000092
+1999   3   3  51240   0.068105   0.241646   0.6501832   0.0009716  -0.000270   0.000116   0.000104   0.000100  0.0000105  0.0000125    0.000099    0.000092
+1999   3   4  51241   0.067531   0.241822   0.6491982   0.0010161  -0.000123   0.000115   0.000107   0.000105  0.0000098  0.0000146    0.000091    0.000085
+1999   3   5  51242   0.066588   0.242150   0.6482019   0.0010265   0.000020   0.000121   0.000110   0.000107  0.0000089  0.0000136    0.000080    0.000076
+1999   3   6  51243   0.065454   0.242609   0.6472224   0.0009207   0.000121   0.000123   0.000110   0.000107  0.0000079  0.0000093    0.000068    0.000067
+1999   3   7  51244   0.064356   0.242764   0.6462924   0.0008636   0.000157   0.000111   0.000111   0.000109  0.0000070  0.0000067    0.000056    0.000059
+1999   3   8  51245   0.063341   0.242650   0.6454378   0.0008193   0.000124   0.000079   0.000107   0.000106  0.0000060  0.0000065    0.000045    0.000050
+1999   3   9  51246   0.062207   0.242531   0.6446656   0.0007243   0.000046   0.000034   0.000093   0.000094  0.0000051  0.0000073    0.000033    0.000041
+1999   3  10  51247   0.060978   0.242102   0.6439569   0.0006881  -0.000074  -0.000032   0.000087   0.000087  0.0000087  0.0000065    0.000084    0.000089
+1999   3  11  51248   0.059939   0.241665   0.6432708   0.0006841  -0.000103  -0.000039   0.000094   0.000091  0.0000069  0.0000080    0.000082    0.000094
+1999   3  12  51249   0.058874   0.241394   0.6425540   0.0007513  -0.000046  -0.000011   0.000100   0.000097  0.0000065  0.0000102    0.000081    0.000089
+1999   3  13  51250   0.057525   0.240951   0.6417566   0.0008426   0.000060   0.000041   0.000105   0.000102  0.0000072  0.0000100    0.000088    0.000087
+1999   3  14  51251   0.056056   0.240506   0.6408402   0.0009787   0.000160   0.000099   0.000104   0.000102  0.0000079  0.0000107    0.000094    0.000086
+1999   3  15  51252   0.054467   0.239970   0.6397777   0.0011525   0.000195   0.000142   0.000099   0.000098  0.0000087  0.0000115    0.000101    0.000084
+1999   3  16  51253   0.052925   0.239649   0.6385519   0.0013344   0.000133   0.000150   0.000095   0.000093  0.0000094  0.0000118    0.000108    0.000082
+1999   3  17  51254   0.051031   0.239118   0.6371582   0.0014711  -0.000066   0.000112   0.000094   0.000091  0.0000092  0.0000128    0.000092    0.000090
+1999   3  18  51255   0.049806   0.238846   0.6356113   0.0015964  -0.000263   0.000040   0.000095   0.000093  0.0000092  0.0000128    0.000088    0.000091
+1999   3  19  51256   0.048902   0.238987   0.6339543   0.0016651  -0.000411  -0.000049   0.000099   0.000098  0.0000091  0.0000100    0.000088    0.000091
+1999   3  20  51257   0.048263   0.239567   0.6322556   0.0016760  -0.000478  -0.000129   0.000101   0.000099  0.0000091  0.0000097    0.000088    0.000090
+1999   3  21  51258   0.047181   0.240113   0.6305933   0.0016300  -0.000446  -0.000175   0.000103   0.000100  0.0000091  0.0000110    0.000088    0.000090
+1999   3  22  51259   0.046485   0.240602   0.6290333   0.0015265  -0.000328  -0.000172   0.000103   0.000101  0.0000091  0.0000109    0.000088    0.000089
+1999   3  23  51260   0.045661   0.241084   0.6276105   0.0013812  -0.000160  -0.000114   0.000098   0.000097  0.0000091  0.0000096    0.000088    0.000088
+1999   3  24  51261   0.044191   0.241527   0.6263200   0.0012489   0.000016  -0.000013   0.000093   0.000092  0.0000091  0.0000076    0.000088    0.000088
+1999   3  25  51262   0.041980   0.241389   0.6251218   0.0011670   0.000154   0.000117   0.000089   0.000089  0.0000093  0.0000087    0.000108    0.000106
+1999   3  26  51263   0.039260   0.241504   0.6239577   0.0011575   0.000236   0.000223   0.000091   0.000093  0.0000095  0.0000100    0.000113    0.000111
+1999   3  27  51264   0.036261   0.241511   0.6227734   0.0012144   0.000258   0.000276   0.000091   0.000093  0.0000097  0.0000097    0.000110    0.000109
+1999   3  28  51265   0.033663   0.241362   0.6215346   0.0012611   0.000225   0.000266   0.000088   0.000090  0.0000099  0.0000092    0.000107    0.000107
+1999   3  29  51266   0.031779   0.240877   0.6202309   0.0013172   0.000158   0.000192   0.000092   0.000092  0.0000102  0.0000096    0.000103    0.000104
+1999   3  30  51267   0.030008   0.240975   0.6188705   0.0013979   0.000080   0.000074   0.000092   0.000092  0.0000104  0.0000093    0.000100    0.000102
+1999   3  31  51268   0.028060   0.241134   0.6174712   0.0014055   0.000016  -0.000067   0.000090   0.000091  0.0000106  0.0000099    0.000097    0.000100
+1999   4   1  51269   0.026117   0.241013   0.6160552   0.0014149  -0.000018  -0.000197   0.000091   0.000091  0.0000106  0.0000100    0.000097    0.000101
+1999   4   2  51270   0.024033   0.240816   0.6146468   0.0014048  -0.000017  -0.000293   0.000090   0.000090  0.0000105  0.0000096    0.000099    0.000103
+1999   4   3  51271   0.021806   0.240323   0.6132716   0.0013543   0.000013  -0.000340   0.000091   0.000091  0.0000104  0.0000105    0.000100    0.000105
+1999   4   4  51272   0.020132   0.239779   0.6119525   0.0012769   0.000060  -0.000332   0.000090   0.000091  0.0000104  0.0000104    0.000102    0.000107
+1999   4   5  51273   0.018714   0.239766   0.6107038   0.0011871   0.000105  -0.000275   0.000086   0.000089  0.0000103  0.0000112    0.000104    0.000109
+1999   4   6  51274   0.017546   0.239468   0.6095246   0.0011427   0.000132  -0.000185   0.000083   0.000087  0.0000103  0.0000112    0.000105    0.000111
+1999   4   7  51275   0.015927   0.239992   0.6083998   0.0011228   0.000129  -0.000087   0.000081   0.000085  0.0000102  0.0000097    0.000107    0.000113
+1999   4   8  51276   0.013851   0.240348   0.6073026   0.0010890   0.000092   0.000005   0.000081   0.000084  0.0000106  0.0000086    0.000105    0.000127
+1999   4   9  51277   0.012067   0.240616   0.6061990   0.0011023   0.000030   0.000058   0.000085   0.000086  0.0000112  0.0000089    0.000103    0.000128
+1999   4  10  51278   0.010987   0.240748   0.6050463   0.0011852  -0.000043   0.000070   0.000089   0.000090  0.0000118  0.0000101    0.000103    0.000123
+1999   4  11  51279   0.010529   0.241202   0.6037935   0.0013054  -0.000107   0.000057   0.000088   0.000088  0.0000124  0.0000109    0.000104    0.000118
+1999   4  12  51280   0.010344   0.242166   0.6023896   0.0015074  -0.000148   0.000035   0.000088   0.000088  0.0000131  0.0000108    0.000104    0.000113
+1999   4  13  51281   0.009728   0.243190   0.6008006   0.0017201  -0.000154   0.000022   0.000088   0.000088  0.0000137  0.0000111    0.000104    0.000108
+1999   4  14  51282   0.008842   0.243964   0.5990302   0.0018853  -0.000125   0.000025   0.000086   0.000085  0.0000143  0.0000100    0.000104    0.000104
+1999   4  15  51283   0.008163   0.245116   0.5971306   0.0019333  -0.000062   0.000053   0.000085   0.000086  0.0000103  0.0000100    0.000073    0.000073
+1999   4  16  51284   0.007328   0.246420   0.5951918   0.0019128   0.000016   0.000077   0.000081   0.000081  0.0000047  0.0000114    0.000031    0.000033
+1999   4  17  51285   0.006417   0.247786   0.5933099   0.0018216   0.000080   0.000046   0.000083   0.000083  0.0000056  0.0000112    0.000040    0.000043
+1999   4  18  51286   0.004915   0.248538   0.5915521   0.0016829   0.000132   0.000000   0.000092   0.000091  0.0000072  0.0000112    0.000053    0.000058
+1999   4  19  51287   0.003132   0.249100   0.5899438   0.0015368   0.000170  -0.000035   0.000091   0.000089  0.0000087  0.0000110    0.000066    0.000073
+1999   4  20  51288   0.001455   0.248958   0.5884778   0.0013922   0.000189  -0.000047   0.000090   0.000088  0.0000103  0.0000106    0.000080    0.000088
+1999   4  21  51289   0.000252   0.248896   0.5871300   0.0012823   0.000242   0.000034   0.000087   0.000084  0.0000101  0.0000096    0.000092    0.000102
+1999   4  22  51290  -0.001040   0.249034   0.5858698   0.0012290   0.000160   0.000019   0.000084   0.000081  0.0000094  0.0000107    0.000089    0.000109
+1999   4  23  51291  -0.002166   0.249326   0.5846445   0.0012461   0.000094  -0.000033   0.000087   0.000082  0.0000098  0.0000106    0.000083    0.000127
+1999   4  24  51292  -0.003528   0.250175   0.5833995   0.0012895   0.000056  -0.000092   0.000087   0.000083  0.0000107  0.0000089    0.000079    0.000150
+1999   4  25  51293  -0.005284   0.251103   0.5820996   0.0013568   0.000028  -0.000141   0.000082   0.000081  0.0000116  0.0000096    0.000075    0.000172
+1999   4  26  51294  -0.006903   0.252059   0.5807310   0.0014044   0.000006  -0.000152   0.000077   0.000079  0.0000125  0.0000111    0.000070    0.000195
+1999   4  27  51295  -0.008070   0.252835   0.5792969   0.0014502  -0.000010  -0.000114   0.000073   0.000074  0.0000134  0.0000129    0.000066    0.000218
+1999   4  28  51296  -0.008288   0.253910   0.5778167   0.0015005  -0.000077  -0.000036   0.000073   0.000074  0.0000143  0.0000107    0.000122    0.000142
+1999   4  29  51297  -0.008364   0.255189   0.5763279   0.0014598  -0.000022   0.000076   0.000073   0.000074  0.0000183  0.0000081    0.000228    0.000191
+1999   4  30  51298  -0.008599   0.256595   0.5748823   0.0013927   0.000068   0.000102   0.000072   0.000073  0.0000185  0.0000086    0.000234    0.000199
+1999   5   1  51299  -0.009077   0.257968   0.5735242   0.0012986   0.000162   0.000048   0.000074   0.000075  0.0000168  0.0000097    0.000196    0.000176
+1999   5   2  51300  -0.010328   0.258911   0.5722776   0.0011881   0.000239  -0.000040   0.000083   0.000082  0.0000152  0.0000101    0.000158    0.000152
+1999   5   3  51301  -0.011903   0.259585   0.5711510   0.0010797   0.000267  -0.000119   0.000093   0.000091  0.0000135  0.0000095    0.000119    0.000129
+1999   5   4  51302  -0.013454   0.260002   0.5701494   0.0009376   0.000232  -0.000154   0.000092   0.000089  0.0000119  0.0000093    0.000081    0.000106
+1999   5   5  51303  -0.014935   0.259989   0.5692780   0.0007962   0.000166  -0.000046   0.000089   0.000086  0.0000116  0.0000087    0.000095    0.000109
+1999   5   6  51304  -0.015746   0.260389   0.5685275   0.0007136   0.000002  -0.000032   0.000090   0.000086  0.0000105  0.0000085    0.000121    0.000123
+1999   5   7  51305  -0.016397   0.261029   0.5678206   0.0007447  -0.000106  -0.000007   0.000088   0.000086  0.0000091  0.0000090    0.000113    0.000113
+1999   5   8  51306  -0.017038   0.261933   0.5670562   0.0008368  -0.000138   0.000018   0.000088   0.000088  0.0000078  0.0000087    0.000092    0.000092
+1999   5   9  51307  -0.017912   0.262844   0.5661586   0.0009632  -0.000120   0.000016   0.000085   0.000085  0.0000065  0.0000093    0.000072    0.000071
+1999   5  10  51308  -0.018533   0.263480   0.5650890   0.0011267  -0.000079  -0.000019   0.000083   0.000082  0.0000052  0.0000100    0.000051    0.000051
+1999   5  11  51309  -0.018869   0.264452   0.5638421   0.0013161  -0.000047  -0.000082   0.000077   0.000078  0.0000039  0.0000084    0.000030    0.000030
+1999   5  12  51310  -0.019030   0.265783   0.5624372   0.0014977  -0.000079  -0.000175   0.000074   0.000076  0.0000098  0.0000067    0.000085    0.000096
+1999   5  13  51311  -0.019246   0.267156   0.5609154   0.0015941  -0.000119  -0.000242   0.000082   0.000084  0.0000115  0.0000071    0.000101    0.000116
+1999   5  14  51312  -0.019207   0.268703   0.5593497   0.0015852  -0.000158  -0.000271   0.000083   0.000085  0.0000116  0.0000076    0.000103    0.000117
+1999   5  15  51313  -0.018917   0.270115   0.5578328   0.0014863  -0.000183  -0.000257   0.000080   0.000082  0.0000117  0.0000075    0.000105    0.000118
+1999   5  16  51314  -0.018877   0.271757   0.5564433   0.0013152  -0.000180  -0.000208   0.000079   0.000081  0.0000118  0.0000074    0.000107    0.000119
+1999   5  17  51315  -0.019350   0.273390   0.5552128   0.0011282  -0.000144  -0.000141   0.000079   0.000081  0.0000119  0.0000068    0.000109    0.000120
+1999   5  18  51316  -0.019913   0.275051   0.5541141   0.0010234  -0.000081  -0.000076   0.000081   0.000083  0.0000121  0.0000067    0.000111    0.000122
+1999   5  19  51317  -0.020098   0.276203   0.5530781   0.0010283  -0.000001  -0.000031   0.000079   0.000080  0.0000122  0.0000077    0.000113    0.000123
+1999   5  20  51318  -0.020373   0.276969   0.5520275   0.0010676   0.000080  -0.000018   0.000077   0.000076  0.0000157  0.0000076    0.000153    0.000160
+1999   5  21  51319  -0.020406   0.277546   0.5509071   0.0011381   0.000145  -0.000023   0.000075   0.000075  0.0000163  0.0000054    0.000158    0.000166
+1999   5  22  51320  -0.020439   0.278393   0.5497000   0.0012367   0.000185  -0.000036   0.000076   0.000075  0.0000154  0.0000052    0.000144    0.000154
+1999   5  23  51321  -0.020384   0.279023   0.5484242   0.0012851   0.000195  -0.000049   0.000079   0.000079  0.0000146  0.0000067    0.000131    0.000143
+1999   5  24  51322  -0.020657   0.279877   0.5471192   0.0012881   0.000175  -0.000053   0.000082   0.000081  0.0000137  0.0000077    0.000118    0.000131
+1999   5  25  51323  -0.021207   0.280413   0.5458315   0.0012829   0.000129  -0.000043   0.000083   0.000083  0.0000128  0.0000081    0.000104    0.000120
+1999   5  26  51324  -0.022037   0.281118   0.5446048   0.0012067   0.000066  -0.000019   0.000080   0.000080  0.0000119  0.0000081    0.000091    0.000108
+1999   5  27  51325  -0.023081   0.281463   0.5434740   0.0010627  -0.000004   0.000018   0.000079   0.000079  0.0000119  0.0000078    0.000092    0.000109
+1999   5  28  51326  -0.023634   0.282104   0.5424615   0.0009286  -0.000070   0.000058   0.000081   0.000081  0.0000121  0.0000080    0.000099    0.000113
+1999   5  29  51327  -0.024064   0.282951   0.5415759   0.0008116  -0.000123   0.000096   0.000081   0.000080  0.0000123  0.0000078    0.000105    0.000117
+1999   5  30  51328  -0.024299   0.283449   0.5408113   0.0007202  -0.000151   0.000121   0.000082   0.000080  0.0000126  0.0000074    0.000112    0.000121
+1999   5  31  51329  -0.024666   0.283971   0.5401481   0.0006479  -0.000148   0.000126   0.000082   0.000082  0.0000128  0.0000055    0.000119    0.000125
+1999   6   1  51330  -0.025052   0.284569   0.5395550   0.0005926  -0.000111   0.000106   0.000080   0.000082  0.0000130  0.0000059    0.000125    0.000130
+1999   6   2  51331  -0.025656   0.285361   0.5389929   0.0005554  -0.000044   0.000059   0.000080   0.000081  0.0000133  0.0000075    0.000132    0.000134
+1999   6   3  51332  -0.026647   0.286270   0.5384191   0.0005862   0.000044  -0.000009   0.000083   0.000083  0.0000133  0.0000077    0.000131    0.000135
+1999   6   4  51333  -0.027315   0.287271   0.5377924   0.0006799   0.000138  -0.000089   0.000086   0.000087  0.0000132  0.0000084    0.000128    0.000136
+1999   6   5  51334  -0.027858   0.288428   0.5370755   0.0007913   0.000219  -0.000168   0.000085   0.000086  0.0000131  0.0000081    0.000125    0.000137
+1999   6   6  51335  -0.028511   0.290182   0.5362349   0.0009182   0.000273  -0.000234   0.000080   0.000081  0.0000130  0.0000077    0.000122    0.000137
+1999   6   7  51336  -0.029331   0.291626   0.5352438   0.0010677   0.000287  -0.000273   0.000078   0.000080  0.0000129  0.0000076    0.000119    0.000138
+1999   6   8  51337  -0.029805   0.292865   0.5340913   0.0012259   0.000260  -0.000278   0.000079   0.000081  0.0000128  0.0000076    0.000116    0.000139
+1999   6   9  51338  -0.030296   0.293763   0.5327963   0.0013468   0.000197  -0.000248   0.000080   0.000082  0.0000127  0.0000078    0.000113    0.000139
+1999   6  10  51339  -0.030855   0.294143   0.5314177   0.0013945   0.000112  -0.000186   0.000080   0.000082  0.0000125  0.0000081    0.000109    0.000135
+1999   6  11  51340  -0.030974   0.294513   0.5300496   0.0013204   0.000025  -0.000109   0.000080   0.000083  0.0000123  0.0000080    0.000104    0.000128
+1999   6  12  51341  -0.031328   0.295126   0.5287952   0.0011473  -0.000042  -0.000029   0.000079   0.000082  0.0000121  0.0000076    0.000099    0.000122
+1999   6  13  51342  -0.031610   0.295794   0.5277288   0.0009339  -0.000074   0.000035   0.000077   0.000079  0.0000119  0.0000081    0.000094    0.000116
+1999   6  14  51343  -0.031519   0.296819   0.5268668   0.0007422  -0.000064   0.000075   0.000082   0.000083  0.0000117  0.0000090    0.000090    0.000109
+1999   6  15  51344  -0.031891   0.297842   0.5261622   0.0006536  -0.000015   0.000088   0.000082   0.000084  0.0000115  0.0000070    0.000085    0.000103
+1999   6  16  51345  -0.032485   0.298878   0.5255300   0.0006287   0.000064   0.000071   0.000078   0.000080  0.0000098  0.0000061    0.000097    0.000097
+1999   6  17  51346  -0.033048   0.299261   0.5248878   0.0006515   0.000145   0.000048   0.000079   0.000080  0.0000087  0.0000070    0.000092    0.000088
+1999   6  18  51347  -0.032896   0.299969   0.5241950   0.0006963   0.000207   0.000029   0.000081   0.000082  0.0000078  0.0000067    0.000081    0.000077
+1999   6  19  51348  -0.032954   0.300421   0.5234601   0.0007223   0.000236   0.000016   0.000080   0.000080  0.0000069  0.0000074    0.000070    0.000066
+1999   6  20  51349  -0.032510   0.301168   0.5227188   0.0007519   0.000221   0.000010   0.000078   0.000077  0.0000060  0.0000088    0.000059    0.000055
+1999   6  21  51350  -0.032354   0.302046   0.5220036   0.0007428   0.000161   0.000005   0.000076   0.000077  0.0000051  0.0000099    0.000048    0.000044
+1999   6  22  51351  -0.032200   0.302984   0.5213285   0.0006863   0.000056  -0.000004   0.000073   0.000074  0.0000043  0.0000109    0.000037    0.000033
+1999   6  23  51352  -0.032469   0.303866   0.5207006   0.0005806  -0.000072  -0.000023   0.000073   0.000073  0.0000094  0.0000108    0.000076    0.000087
+1999   6  24  51353  -0.032114   0.304527   0.5201428   0.0004496  -0.000229  -0.000046   0.000076   0.000078  0.0000110  0.0000100    0.000464    0.000477
+1999   6  25  51354  -0.031973   0.305499   0.5197031   0.0002923  -0.000381  -0.000072   0.000078   0.000080  0.0000112  0.0000095    0.000966    0.000978
+1999   6  26  51355  -0.031904   0.306522   0.5194315   0.0001622  -0.000490  -0.000098   0.000080   0.000082  0.0000114  0.0000100    0.000966    0.001005
+1999   6  27  51356  -0.032397   0.307491   0.5193436   0.0000489  -0.000529  -0.000113   0.000081   0.000083  0.0000116  0.0000113    0.000666    0.000750
+1999   6  28  51357  -0.032644   0.308422   0.5194040  -0.0000631  -0.000483  -0.000109   0.000080   0.000084  0.0000119  0.0000121    0.000366    0.000495
+1999   6  29  51358  -0.032598   0.308937   0.5195446  -0.0001298  -0.000359  -0.000080   0.000080   0.000084  0.0000121  0.0000123    0.000066    0.000240
+1999   6  30  51359  -0.032486   0.309482   0.5196985  -0.0001328  -0.000165  -0.000031   0.000077   0.000080  0.0000123  0.0000105    0.000105    0.000138
+1999   7   1  51360  -0.032251   0.310160   0.5198195  -0.0000768   0.000024   0.000044   0.000079   0.000082  0.0000088  0.0000094    0.000099    0.000099
+1999   7   2  51361  -0.032167   0.310826   0.5198761  -0.0000161   0.000173   0.000113   0.000081   0.000085  0.0000083  0.0000090    0.000096    0.000097
+1999   7   3  51362  -0.031677   0.311852   0.5198350   0.0000873   0.000260   0.000153   0.000080   0.000084  0.0000094  0.0000079    0.000100    0.000102
+1999   7   4  51363  -0.031202   0.313105   0.5196580   0.0002551   0.000282   0.000151   0.000082   0.000086  0.0000104  0.0000074    0.000104    0.000107
+1999   7   5  51364  -0.030393   0.314819   0.5193172   0.0004315   0.000249   0.000097   0.000078   0.000085  0.0000115  0.0000078    0.000107    0.000112
+1999   7   6  51365  -0.029684   0.316112   0.5188154   0.0005784   0.000185  -0.000003   0.000077   0.000083  0.0000126  0.0000072    0.000111    0.000117
+1999   7   7  51366  -0.028871   0.317436   0.5181957   0.0006610   0.000115  -0.000132   0.000077   0.000081  0.0000137  0.0000070    0.000115    0.000122
+1999   7   8  51367  -0.028013   0.318442   0.5175332   0.0006439   0.000060  -0.000263   0.000077   0.000080  0.0000135  0.0000086    0.000113    0.000120
+1999   7   9  51368  -0.026962   0.319664   0.5169128   0.0005466   0.000027  -0.000368   0.000078   0.000082  0.0000129  0.0000084    0.000109    0.000116
+1999   7  10  51369  -0.026250   0.320808   0.5163988   0.0004284   0.000015  -0.000419   0.000076   0.000080  0.0000123  0.0000077    0.000105    0.000111
+1999   7  11  51370  -0.025550   0.322051   0.5160128   0.0003307   0.000012  -0.000400   0.000080   0.000084  0.0000116  0.0000079    0.000101    0.000107
+1999   7  12  51371  -0.024863   0.323154   0.5157280   0.0002715   0.000012  -0.000313   0.000084   0.000088  0.0000110  0.0000077    0.000097    0.000103
+1999   7  13  51372  -0.024618   0.324564   0.5154832   0.0002716   0.000008  -0.000176   0.000080   0.000084  0.0000104  0.0000083    0.000092    0.000099
+1999   7  14  51373  -0.024486   0.325672   0.5152103   0.0003289   0.000004  -0.000024   0.000075   0.000079  0.0000098  0.0000087    0.000088    0.000095
+1999   7  15  51374  -0.024644   0.326771   0.5148614   0.0004092  -0.000012   0.000130   0.000073   0.000076  0.0000107  0.0000086    0.000127    0.000140
+1999   7  16  51375  -0.025245   0.327412   0.5144228   0.0004822   0.000008   0.000201   0.000075   0.000077  0.0000122  0.0000084    0.000140    0.000154
+1999   7  17  51376  -0.025712   0.327982   0.5139144   0.0005294   0.000050   0.000195   0.000076   0.000079  0.0000137  0.0000083    0.000140    0.000150
+1999   7  18  51377  -0.025778   0.328529   0.5133746   0.0005356   0.000083   0.000149   0.000078   0.000080  0.0000152  0.0000073    0.000140    0.000147
+1999   7  19  51378  -0.025686   0.329123   0.5128441   0.0005085   0.000087   0.000094   0.000080   0.000080  0.0000167  0.0000067    0.000140    0.000144
+1999   7  20  51379  -0.025332   0.329991   0.5123554   0.0004464   0.000061   0.000050   0.000080   0.000081  0.0000182  0.0000080    0.000140    0.000140
+1999   7  21  51380  -0.024730   0.330851   0.5119312   0.0003814  -0.000032   0.000080   0.000080   0.000081  0.0000160  0.0000084    0.000127    0.000116
+1999   7  22  51381  -0.024178   0.331517   0.5115884   0.0002874  -0.000028   0.000017   0.000085   0.000085  0.0000150  0.0000084    0.000133    0.000116
+1999   7  23  51382  -0.023463   0.332214   0.5113411   0.0001881   0.000061  -0.000116   0.000088   0.000088  0.0000144  0.0000085    0.000146    0.000125
+1999   7  24  51383  -0.023279   0.332701   0.5111979   0.0000784   0.000193  -0.000270   0.000089   0.000089  0.0000139  0.0000080    0.000160    0.000134
+1999   7  25  51384  -0.023626   0.333114   0.5111525  -0.0000092   0.000310  -0.000391   0.000088   0.000088  0.0000133  0.0000084    0.000173    0.000143
+1999   7  26  51385  -0.023879   0.333620   0.5111775  -0.0000477   0.000345  -0.000434   0.000086   0.000088  0.0000128  0.0000095    0.000187    0.000152
+1999   7  27  51386  -0.023887   0.334043   0.5112258  -0.0000131   0.000253  -0.000365   0.000089   0.000092  0.0000122  0.0000099    0.000187    0.000153
+1999   7  28  51387  -0.023708   0.334614   0.5112412   0.0000478   0.000001  -0.000145   0.000086   0.000088  0.0000117  0.0000100    0.000119    0.000113
+1999   7  29  51388  -0.023430   0.335751   0.5111715   0.0001476  -0.000200  -0.000062   0.000082   0.000083  0.0000106  0.0000100    0.000088    0.000084
+1999   7  30  51389  -0.022872   0.336590   0.5109749   0.0002748  -0.000270   0.000024   0.000086   0.000087  0.0000094  0.0000098    0.000074    0.000071
+1999   7  31  51390  -0.022262   0.337644   0.5106218   0.0004552  -0.000225   0.000093   0.000088   0.000089  0.0000081  0.0000095    0.000064    0.000062
+1999   8   1  51391  -0.021443   0.338728   0.5100960   0.0006155  -0.000114   0.000109   0.000084   0.000085  0.0000069  0.0000094    0.000053    0.000053
+1999   8   2  51392  -0.020951   0.339810   0.5094030   0.0007484  -0.000009   0.000063   0.000083   0.000087  0.0000057  0.0000093    0.000042    0.000044
+1999   8   3  51393  -0.019943   0.340657   0.5085842   0.0008285   0.000039  -0.000033   0.000078   0.000080  0.0000045  0.0000087    0.000031    0.000035
+1999   8   4  51394  -0.018568   0.341753   0.5077211   0.0008228  -0.000058  -0.000187   0.000077   0.000078  0.0000098  0.0000086    0.000087    0.000084
+1999   8   5  51395  -0.017137   0.342344   0.5069206   0.0007101  -0.000126  -0.000300   0.000081   0.000084  0.0000119  0.0000085    0.000111    0.000105
+1999   8   6  51396  -0.015599   0.343540   0.5062736   0.0005321  -0.000146  -0.000349   0.000082   0.000084  0.0000128  0.0000090    0.000123    0.000114
+1999   8   7  51397  -0.014840   0.344758   0.5058198   0.0003494  -0.000109  -0.000329   0.000083   0.000086  0.0000136  0.0000099    0.000134    0.000124
+1999   8   8  51398  -0.014100   0.345884   0.5055341   0.0002504  -0.000020  -0.000252   0.000078   0.000080  0.0000144  0.0000104    0.000145    0.000134
+1999   8   9  51399  -0.013768   0.346732   0.5053402   0.0002104   0.000090  -0.000154   0.000075   0.000076  0.0000153  0.0000116    0.000156    0.000144
+1999   8  10  51400  -0.013607   0.347261   0.5051455   0.0002582   0.000183  -0.000078   0.000076   0.000076  0.0000161  0.0000115    0.000168    0.000154
+1999   8  11  51401  -0.013220   0.347621   0.5048769   0.0003285   0.000195  -0.000025   0.000074   0.000074  0.0000120  0.0000108    0.000116    0.000106
+1999   8  12  51402  -0.012791   0.347958   0.5045017   0.0004284   0.000192  -0.000117   0.000071   0.000070  0.0000120  0.0000108    0.000141    0.000137
+1999   8  13  51403  -0.012302   0.348410   0.5040164   0.0005047   0.000074  -0.000221   0.000070   0.000070  0.0000123  0.0000107    0.000142    0.000137
+1999   8  14  51404  -0.011808   0.348787   0.5034363   0.0005830  -0.000108  -0.000296   0.000071   0.000071  0.0000122  0.0000112    0.000123    0.000115
+1999   8  15  51405  -0.011580   0.349758   0.5027891   0.0006576  -0.000266  -0.000321   0.000078   0.000078  0.0000120  0.0000111    0.000105    0.000092
+1999   8  16  51406  -0.011706   0.350838   0.5021122   0.0006952  -0.000334  -0.000277   0.000081   0.000080  0.0000119  0.0000094    0.000087    0.000070
+1999   8  17  51407  -0.010962   0.352079   0.5014541   0.0006497  -0.000280  -0.000164   0.000078   0.000076  0.0000118  0.0000098    0.000069    0.000048
+1999   8  18  51408  -0.010314   0.353420   0.5008666   0.0005580  -0.000026  -0.000019   0.000076   0.000075  0.0000116  0.0000107    0.000105    0.000090
+1999   8  19  51409  -0.009764   0.354606   0.5003857   0.0004588   0.000154   0.000155   0.000077   0.000076  0.0000127  0.0000100    0.000114    0.000104
+1999   8  20  51410  -0.009406   0.355812   0.5000125   0.0003473   0.000243   0.000308   0.000082   0.000081  0.0000141  0.0000105    0.000115    0.000109
+1999   8  21  51411  -0.008604   0.356815   0.4997129   0.0002845   0.000246   0.000395   0.000083   0.000080  0.0000155  0.0000105    0.000115    0.000114
+1999   8  22  51412  -0.008211   0.358228   0.4994384   0.0002696   0.000194   0.000384   0.000086   0.000083  0.0000169  0.0000110    0.000116    0.000119
+1999   8  23  51413  -0.008219   0.359155   0.4991522   0.0002903   0.000135   0.000273   0.000094   0.000090  0.0000183  0.0000147    0.000117    0.000124
+1999   8  24  51414  -0.008470   0.360198   0.4988316   0.0003327   0.000113   0.000094   0.000092   0.000089  0.0000198  0.0000151    0.000118    0.000129
+1999   8  25  51415  -0.008755   0.361049   0.4984437   0.0004509   0.000180  -0.000156   0.000085   0.000083  0.0000134  0.0000139    0.000107    0.000105
+1999   8  26  51416  -0.008593   0.361780   0.4979238   0.0006476   0.000268  -0.000289   0.000091   0.000087  0.0000114  0.0000166    0.000519    0.000251
+1999   8  27  51417  -0.008286   0.362330   0.4971928   0.0008938   0.000345  -0.000307   0.000096   0.000093  0.0000114  0.0000162    0.001073    0.000455
+1999   8  28  51418  -0.008265   0.362950   0.4962104   0.0010734   0.000372  -0.000247   0.000093   0.000090  0.0000114  0.0000128    0.000996    0.000367
+1999   8  29  51419  -0.007811   0.363193   0.4950193   0.0011838   0.000359  -0.000204   0.000089   0.000085  0.0000114  0.0000114    0.000786    0.000291
+1999   8  30  51420  -0.007278   0.363710   0.4937360   0.0012490   0.000303  -0.000185   0.000081   0.000078  0.0000114  0.0000110    0.000574    0.000229
+1999   8  31  51421  -0.006674   0.364160   0.4924925   0.0012077   0.000216  -0.000192   0.000083   0.000081  0.0000115  0.0000114    0.000362    0.000168
+1999   9   1  51422  -0.006494   0.364718   0.4913767   0.0010808   0.000115  -0.000214   0.000083   0.000080  0.0000115  0.0000139    0.000151    0.000106
+1999   9   2  51423  -0.006377   0.364836   0.4904108   0.0009310   0.000022  -0.000223   0.000079   0.000076  0.0000115  0.0000158    0.000098    0.000092
+1999   9   3  51424  -0.006225   0.365425   0.4895708   0.0007929  -0.000048  -0.000211   0.000077   0.000075  0.0000116  0.0000138    0.000099    0.000094
+1999   9   4  51425  -0.005846   0.365434   0.4888174   0.0007022  -0.000080  -0.000174   0.000079   0.000076  0.0000116  0.0000120    0.000100    0.000096
+1999   9   5  51426  -0.004934   0.366093   0.4881141   0.0006869  -0.000071  -0.000121   0.000085   0.000079  0.0000117  0.0000117    0.000101    0.000098
+1999   9   6  51427  -0.003719   0.366632   0.4874290   0.0006882  -0.000020  -0.000061   0.000083   0.000077  0.0000117  0.0000108    0.000101    0.000101
+1999   9   7  51428  -0.002453   0.367318   0.4867338   0.0007110   0.000063  -0.000004   0.000083   0.000078  0.0000118  0.0000097    0.000102    0.000103
+1999   9   8  51429  -0.001357   0.367731   0.4860067   0.0007260   0.000162   0.000044   0.000083   0.000079  0.0000118  0.0000108    0.000103    0.000105
+1999   9   9  51430  -0.000286   0.368497   0.4852409   0.0007493   0.000258   0.000076   0.000083   0.000078  0.0000118  0.0000120    0.000104    0.000105
+1999   9  10  51431   0.000015   0.369057   0.4844488   0.0007734   0.000332   0.000088   0.000084   0.000080  0.0000118  0.0000114    0.000104    0.000106
+1999   9  11  51432   0.000372   0.369588   0.4836594   0.0007686   0.000369   0.000077   0.000081   0.000077  0.0000118  0.0000123    0.000105    0.000106
+1999   9  12  51433   0.000725   0.370161   0.4829093   0.0007169   0.000360   0.000038   0.000080   0.000076  0.0000118  0.0000119    0.000105    0.000106
+1999   9  13  51434   0.001720   0.370759   0.4822328   0.0006431   0.000304  -0.000036   0.000079   0.000075  0.0000118  0.0000104    0.000106    0.000106
+1999   9  14  51435   0.002557   0.371720   0.4816539   0.0005352   0.000209  -0.000143   0.000076   0.000073  0.0000118  0.0000092    0.000106    0.000107
+1999   9  15  51436   0.003119   0.372608   0.4811827   0.0004128   0.000094  -0.000274   0.000075   0.000072  0.0000118  0.0000088    0.000107    0.000107
+1999   9  16  51437   0.003487   0.373396   0.4808121   0.0003205  -0.000022  -0.000409   0.000078   0.000075  0.0000120  0.0000086    0.000109    0.000105
+1999   9  17  51438   0.003906   0.373798   0.4805157   0.0002808  -0.000111  -0.000518   0.000083   0.000079  0.0000122  0.0000104    0.000111    0.000103
+1999   9  18  51439   0.004384   0.374131   0.4802484   0.0002887  -0.000153  -0.000563   0.000080   0.000076  0.0000125  0.0000101    0.000113    0.000101
+1999   9  19  51440   0.004331   0.374619   0.4799518   0.0003464  -0.000136  -0.000525   0.000077   0.000075  0.0000127  0.0000082    0.000115    0.000098
+1999   9  20  51441   0.004440   0.375169   0.4795649   0.0004456  -0.000062  -0.000406   0.000074   0.000076  0.0000130  0.0000092    0.000117    0.000096
+1999   9  21  51442   0.004874   0.375446   0.4790364   0.0006036   0.000051  -0.000239   0.000073   0.000075  0.0000133  0.0000100    0.000119    0.000094
+1999   9  22  51443   0.005490   0.375792   0.4783356   0.0007887   0.000188  -0.000031   0.000075   0.000076  0.0000108  0.0000109    0.000100    0.000088
+1999   9  23  51444   0.005491   0.376005   0.4774580   0.0009653   0.000281   0.000059   0.000074   0.000076  0.0000105  0.0000123    0.000093    0.000086
+1999   9  24  51445   0.005220   0.376117   0.4764255   0.0011056   0.000316   0.000026   0.000075   0.000077  0.0000109  0.0000131    0.000090    0.000087
+1999   9  25  51446   0.005012   0.375957   0.4752837   0.0011731   0.000290  -0.000093   0.000076   0.000078  0.0000114  0.0000123    0.000087    0.000087
+1999   9  26  51447   0.005118   0.375993   0.4740952   0.0011753   0.000218  -0.000243   0.000081   0.000082  0.0000119  0.0000116    0.000085    0.000087
+1999   9  27  51448   0.005341   0.376270   0.4729297   0.0011316   0.000132  -0.000357   0.000084   0.000084  0.0000123  0.0000116    0.000082    0.000088
+1999   9  28  51449   0.005659   0.376893   0.4718489   0.0010209   0.000062  -0.000393   0.000084   0.000083  0.0000128  0.0000110    0.000079    0.000088
+1999   9  29  51450   0.005796   0.377434   0.4708923   0.0009104   0.000034  -0.000261   0.000081   0.000081  0.0000133  0.0000109    0.000107    0.000113
+1999   9  30  51451   0.006180   0.378377   0.4700672   0.0008043   0.000064  -0.000170   0.000081   0.000081  0.0000127  0.0000120    0.001291    0.000314
+1999  10   1  51452   0.006631   0.379175   0.4693467   0.0006881   0.000141  -0.000077   0.000088   0.000087  0.0000117  0.0000127    0.001936    0.000419
+1999  10   2  51453   0.006596   0.380164   0.4686751   0.0006303   0.000232   0.000039   0.000090   0.000088  0.0000108  0.0000113    0.001492    0.000342
+1999  10   3  51454   0.007174   0.380903   0.4679806   0.0007103   0.000298   0.000124   0.000083   0.000081  0.0000099  0.0000108    0.001047    0.000266
+1999  10   4  51455   0.007846   0.381784   0.4671914   0.0008684   0.000305   0.000159   0.000080   0.000079  0.0000089  0.0000115    0.000602    0.000189
+1999  10   5  51456   0.008451   0.382099   0.4662534   0.0010342   0.000233   0.000118   0.000074   0.000074  0.0000080  0.0000113    0.000158    0.000112
+1999  10   6  51457   0.009235   0.382647   0.4651449   0.0012005   0.000081   0.000012   0.000069   0.000067  0.0000097  0.0000113    0.000088    0.000094
+1999  10   7  51458   0.009832   0.382873   0.4638841   0.0013002  -0.000105  -0.000189   0.000072   0.000071  0.0000104  0.0000115    0.000086    0.000088
+1999  10   8  51459   0.010394   0.382551   0.4625263   0.0013440  -0.000279  -0.000424   0.000077   0.000077  0.0000106  0.0000107    0.000083    0.000081
+1999  10   9  51460   0.011283   0.382433   0.4611480   0.0013669  -0.000391  -0.000615   0.000080   0.000078  0.0000108  0.0000095    0.000080    0.000074
+1999  10  10  51461   0.012269   0.382791   0.4598229   0.0013138  -0.000407  -0.000695   0.000085   0.000081  0.0000110  0.0000098    0.000076    0.000067
+1999  10  11  51462   0.013286   0.382895   0.4585992   0.0011867  -0.000321  -0.000628   0.000088   0.000082  0.0000111  0.0000100    0.000073    0.000061
+1999  10  12  51463   0.013896   0.382936   0.4574886   0.0010555  -0.000156  -0.000435   0.000085   0.000079  0.0000113  0.0000091    0.000070    0.000054
+1999  10  13  51464   0.014264   0.382859   0.4564751   0.0009574   0.000088  -0.000095   0.000086   0.000081  0.0000115  0.0000103    0.000091    0.000090
+1999  10  14  51465   0.013932   0.382737   0.4555377   0.0009012   0.000228   0.000099   0.000085   0.000080  0.0000118  0.0000115    0.000101    0.000108
+1999  10  15  51466   0.013739   0.382714   0.4546682   0.0008139   0.000261   0.000138   0.000086   0.000079  0.0000122  0.0000110    0.000108    0.000120
+1999  10  16  51467   0.013512   0.382702   0.4538697   0.0007157   0.000217   0.000060   0.000090   0.000082  0.0000126  0.0000115    0.000115    0.000132
+1999  10  17  51468   0.014139   0.382567   0.4531317   0.0007297   0.000142  -0.000071   0.000087   0.000080  0.0000130  0.0000114    0.000121    0.000145
+1999  10  18  51469   0.014527   0.382484   0.4524033   0.0007964   0.000086  -0.000180   0.000083   0.000078  0.0000134  0.0000114    0.000128    0.000157
+1999  10  19  51470   0.015094   0.382511   0.4515927   0.0009162   0.000075  -0.000233   0.000083   0.000078  0.0000138  0.0000110    0.000134    0.000169
+1999  10  20  51471   0.015764   0.382773   0.4506004   0.0011197   0.000190  -0.000110   0.000081   0.000075  0.0000123  0.0000113    0.000113    0.000131
+1999  10  21  51472   0.016541   0.383046   0.4493631   0.0013663   0.000206  -0.000142   0.000082   0.000077  0.0000118  0.0000116    0.000137    0.000264
+1999  10  22  51473   0.016808   0.383224   0.4478736   0.0015984   0.000165  -0.000291   0.000087   0.000081  0.0000118  0.0000102    0.000177    0.000458
+1999  10  23  51474   0.017094   0.383232   0.4461704   0.0018097   0.000178  -0.000494   0.000088   0.000082  0.0000118  0.0000105    0.000257    0.000340
+1999  10  24  51475   0.017803   0.383415   0.4443190   0.0019148   0.000187  -0.000629   0.000087   0.000082  0.0000118  0.0000090    0.000341    0.000195
+1999  10  25  51476   0.018336   0.383778   0.4424049   0.0018973   0.000163  -0.000502   0.000087   0.000083  0.0000118  0.0000093    0.000240    0.000154
+1999  10  26  51477   0.018939   0.383913   0.4405318   0.0018029   0.000122  -0.000263   0.000085   0.000082  0.0000118  0.0000119    0.000121    0.000123
+1999  10  27  51478   0.019489   0.383773   0.4388017   0.0016171   0.000072  -0.000114   0.000083   0.000082  0.0000129  0.0000128    0.000107    0.000115
+1999  10  28  51479   0.020055   0.383497   0.4372773   0.0014035   0.000029   0.000023   0.000084   0.000084  0.0000145  0.0000128    0.000110    0.000121
+1999  10  29  51480   0.020403   0.383355   0.4359453   0.0012520   0.000004   0.000108   0.000086   0.000085  0.0000163  0.0000107    0.000116    0.000131
+1999  10  30  51481   0.020568   0.383195   0.4347254   0.0012190   0.000002   0.000131   0.000087   0.000086  0.0000181  0.0000088    0.000121    0.000142
+1999  10  31  51482   0.020723   0.383050   0.4335150   0.0012853   0.000024   0.000109   0.000091   0.000088  0.0000199  0.0000095    0.000127    0.000152
+1999  11   1  51483   0.021369   0.382777   0.4322364   0.0013191   0.000064   0.000066   0.000093   0.000089  0.0000217  0.0000097    0.000132    0.000162
+1999  11   2  51484   0.021972   0.382127   0.4308609   0.0013731   0.000105   0.000023   0.000088   0.000085  0.0000235  0.0000081    0.000138    0.000173
+1999  11   3  51485   0.022709   0.381655   0.4294045   0.0014797   0.000139   0.000002   0.000082   0.000079  0.0000152  0.0000098    0.000113    0.000128
+1999  11   4  51486   0.023199   0.381265   0.4279087   0.0015241   0.000155  -0.000011   0.000080   0.000077  0.0000097  0.0000105    0.000083    0.000096
+1999  11   5  51487   0.023767   0.380598   0.4263911   0.0015085   0.000110  -0.000029   0.000083   0.000079  0.0000149  0.0000084    0.000110    0.000105
+1999  11   6  51488   0.024209   0.380392   0.4249018   0.0014795   0.000062  -0.000030   0.000087   0.000084  0.0000174  0.0000081    0.000121    0.000121
+1999  11   7  51489   0.024519   0.379829   0.4234811   0.0014151   0.000036  -0.000023   0.000094   0.000094  0.0000174  0.0000086    0.000118    0.000136
+1999  11   8  51490   0.024527   0.379287   0.4221237   0.0013207   0.000036  -0.000021   0.000095   0.000096  0.0000173  0.0000082    0.000115    0.000152
+1999  11   9  51491   0.024902   0.378181   0.4208073   0.0012963   0.000053  -0.000024   0.000092   0.000093  0.0000173  0.0000083    0.000111    0.000167
+1999  11  10  51492   0.025704   0.377329   0.4195273   0.0012441   0.000124  -0.000072   0.000093   0.000094  0.0000139  0.0000083    0.000095    0.000112
+1999  11  11  51493   0.026775   0.376498   0.4183101   0.0011646   0.000105  -0.000039   0.000094   0.000095  0.0000176  0.0000079    0.000158    0.000147
+1999  11  12  51494   0.027951   0.376430   0.4171807   0.0010951   0.000005  -0.000013   0.000094   0.000092  0.0000190  0.0000074    0.000157    0.000162
+1999  11  13  51495   0.028435   0.376732   0.4160838   0.0011314  -0.000020   0.000004   0.000098   0.000095  0.0000170  0.0000081    0.000132    0.000143
+1999  11  14  51496   0.029055   0.377537   0.4149352   0.0012297   0.000032   0.000010   0.000096   0.000094  0.0000143  0.0000085    0.000115    0.000118
+1999  11  15  51497   0.028834   0.378469   0.4136869   0.0012971   0.000108  -0.000009   0.000085   0.000086  0.0000117  0.0000078    0.000097    0.000093
+1999  11  16  51498   0.028623   0.378502   0.4123268   0.0013788   0.000171  -0.000056   0.000084   0.000086  0.0000090  0.0000074    0.000080    0.000068
+1999  11  17  51499   0.029238   0.378519   0.4108554   0.0015415   0.000138  -0.000130   0.000082   0.000084  0.0000079  0.0000073    0.000087    0.000088
+1999  11  18  51500   0.030267   0.378499   0.4092632   0.0016781   0.000098  -0.000215   0.000086   0.000088  0.0000079  0.0000077    0.000090    0.000095
+1999  11  19  51501   0.031710   0.378470   0.4075483   0.0017562   0.000059  -0.000292   0.000090   0.000091  0.0000082  0.0000078    0.000091    0.000096
+1999  11  20  51502   0.032667   0.378869   0.4057406   0.0018133   0.000034  -0.000350   0.000092   0.000091  0.0000085  0.0000079    0.000092    0.000098
+1999  11  21  51503   0.033195   0.378882   0.4039108   0.0018053   0.000037  -0.000374   0.000096   0.000096  0.0000088  0.0000084    0.000093    0.000099
+1999  11  22  51504   0.033180   0.378852   0.4021570   0.0016744   0.000072  -0.000358   0.000092   0.000093  0.0000091  0.0000080    0.000093    0.000100
+1999  11  23  51505   0.032863   0.378784   0.4005710   0.0014702   0.000128  -0.000306   0.000090   0.000091  0.0000095  0.0000080    0.000094    0.000101
+1999  11  24  51506   0.032465   0.378204   0.3992024   0.0012694   0.000190  -0.000226   0.000090   0.000091  0.0000098  0.0000084    0.000095    0.000102
+1999  11  25  51507   0.032194   0.377850   0.3980392   0.0011032   0.000240  -0.000132   0.000091   0.000094  0.0000098  0.0000084    0.000096    0.000104
+1999  11  26  51508   0.031848   0.377435   0.3970132   0.0009914   0.000266  -0.000042   0.000090   0.000096  0.0000098  0.0000080    0.000097    0.000105
+1999  11  27  51509   0.031691   0.377205   0.3960288   0.0009738   0.000266   0.000028   0.000087   0.000091  0.0000098  0.0000071    0.000098    0.000106
+1999  11  28  51510   0.031950   0.376915   0.3949964   0.0010564   0.000241   0.000064   0.000085   0.000088  0.0000098  0.0000056    0.000099    0.000107
+1999  11  29  51511   0.032693   0.377058   0.3938600   0.0011899   0.000203   0.000063   0.000080   0.000084  0.0000098  0.0000057    0.000100    0.000108
+1999  11  30  51512   0.033323   0.377218   0.3926082   0.0013398   0.000163   0.000025   0.000079   0.000083  0.0000098  0.0000075    0.000101    0.000109
+1999  12   1  51513   0.033897   0.377752   0.3912704   0.0014088   0.000135  -0.000038   0.000078   0.000082  0.0000098  0.0000079    0.000102    0.000110
+1999  12   2  51514   0.034308   0.378416   0.3899013   0.0013712   0.000125  -0.000111   0.000077   0.000080  0.0000101  0.0000077    0.000100    0.000111
+1999  12   3  51515   0.034478   0.379184   0.3885616   0.0012847   0.000134  -0.000172   0.000079   0.000083  0.0000105  0.0000080    0.000096    0.000113
+1999  12   4  51516   0.034604   0.379382   0.3873005   0.0011911   0.000157  -0.000202   0.000085   0.000089  0.0000109  0.0000087    0.000093    0.000115
+1999  12   5  51517   0.034887   0.379663   0.3861459   0.0010870   0.000183  -0.000193   0.000088   0.000090  0.0000113  0.0000090    0.000090    0.000116
+1999  12   6  51518   0.034567   0.379447   0.3851031   0.0010033   0.000194  -0.000149   0.000083   0.000086  0.0000117  0.0000082    0.000086    0.000118
+1999  12   7  51519   0.034523   0.379288   0.3841606   0.0009031   0.000176  -0.000090   0.000078   0.000081  0.0000121  0.0000078    0.000083    0.000120
+1999  12   8  51520   0.034639   0.379050   0.3832954   0.0008139   0.000132  -0.000017   0.000078   0.000082  0.0000100  0.0000071    0.000082    0.000100
+1999  12   9  51521   0.035759   0.379354   0.3824776   0.0007787   0.000027  -0.000016   0.000079   0.000084  0.0000090  0.0000066    0.000077    0.000088
+1999  12  10  51522   0.036685   0.379846   0.3816719   0.0007971  -0.000108  -0.000075   0.000079   0.000083  0.0000085  0.0000065    0.000070    0.000081
+1999  12  11  51523   0.037268   0.380319   0.3808407   0.0008548  -0.000226  -0.000163   0.000082   0.000086  0.0000080  0.0000066    0.000063    0.000073
+1999  12  12  51524   0.037283   0.380652   0.3799499   0.0009213  -0.000284  -0.000243   0.000089   0.000092  0.0000075  0.0000080    0.000056    0.000065
+1999  12  13  51525   0.037406   0.380786   0.3789744   0.0010252  -0.000251  -0.000281   0.000092   0.000096  0.0000070  0.0000089    0.000049    0.000057
+1999  12  14  51526   0.037552   0.381210   0.3778982   0.0011568  -0.000133  -0.000266   0.000092   0.000096  0.0000065  0.0000097    0.000042    0.000050
+1999  12  15  51527   0.038263   0.381561   0.3767090   0.0012831   0.000061  -0.000134   0.000085   0.000088  0.0000060  0.0000103    0.000068    0.000072
+1999  12  16  51528   0.038421   0.382131   0.3753960   0.0013950   0.000240  -0.000127   0.000085   0.000085  0.0000129  0.0000104    0.000127    0.000147
+1999  12  17  51529   0.038317   0.382228   0.3739589   0.0015076   0.000282  -0.000120   0.000092   0.000093  0.0000136  0.0000102    0.000128    0.000150
+1999  12  18  51530   0.038095   0.382186   0.3724304   0.0015583   0.000206  -0.000113   0.000094   0.000095  0.0000111  0.0000104    0.000105    0.000120
+1999  12  19  51531   0.037925   0.382244   0.3708833   0.0015401   0.000085  -0.000128   0.000098   0.000099  0.0000085  0.0000103    0.000080    0.000090
+1999  12  20  51532   0.037748   0.382135   0.3694094   0.0014268  -0.000004  -0.000160   0.000097   0.000101  0.0000060  0.0000082    0.000056    0.000059
+1999  12  21  51533   0.037190   0.381677   0.3680786   0.0012650   0.000000  -0.000205   0.000087   0.000180  0.0000035  0.0000083    0.000032    0.000029
+1999  12  22  51534   0.036665   0.380976   0.3669051   0.0011184   0.000181  -0.000265   0.000086   0.000179  0.0000112  0.0000085    0.000098    0.000101
+1999  12  23  51535   0.036442   0.379874   0.3658421   0.0010445   0.000361  -0.000299   0.000094   0.000098  0.0000131  0.0000076    0.000116    0.000120
+1999  12  24  51536   0.037134   0.378793   0.3648138   0.0010483   0.000499  -0.000297   0.000095   0.000098  0.0000127  0.0000084    0.000116    0.000118
+1999  12  25  51537   0.038030   0.377920   0.3637482   0.0010872   0.000561  -0.000261   0.000097   0.000099  0.0000124  0.0000080    0.000116    0.000117
+1999  12  26  51538   0.039036   0.377609   0.3626008   0.0011681   0.000533  -0.000199   0.000099   0.000102  0.0000120  0.0000057    0.000115    0.000115
+1999  12  27  51539   0.040062   0.377973   0.3613675   0.0012560   0.000427  -0.000128   0.000096   0.000101  0.0000117  0.0000059    0.000115    0.000113
+1999  12  28  51540   0.041086   0.377926   0.3600826   0.0013136   0.000279  -0.000066   0.000097   0.000103  0.0000113  0.0000072    0.000115    0.000112
+1999  12  29  51541   0.042141   0.378431   0.3588036   0.0012699   0.000124  -0.000028   0.000095   0.000099  0.0000109  0.0000070    0.000115    0.000110
+1999  12  30  51542   0.042493   0.378512   0.3575881   0.0011631  -0.000001  -0.000022   0.000089   0.000091  0.0000085  0.0000073    0.000097    0.000082
+1999  12  31  51543   0.042924   0.378279   0.3564746   0.0010554  -0.000080  -0.000052   0.000093   0.000098  0.0000080  0.0000076    0.000092    0.000075
+2000   1   1  51544   0.043242   0.377915   0.3554777   0.0009693  -0.000108  -0.000103   0.000100   0.000105  0.0000084  0.0000076    0.000095    0.000079
+2000   1   2  51545   0.043515   0.377753   0.3546065   0.0008322  -0.000087  -0.000159   0.000168   0.000174  0.0000276  0.0000006    0.000108    0.000074
+2000   1   3  51546   0.043623   0.377452   0.3538444   0.0006899  -0.000036  -0.000190   0.000163   0.000165  0.0000287  0.0000006    0.000111    0.000078
+2000   1   4  51547   0.043420   0.377099   0.3532222   0.0005475   0.000032  -0.000185   0.000158   0.000164  0.0000251  0.0000006    0.000115    0.000082
+2000   1   5  51548   0.043120   0.376886   0.3527506   0.0004330   0.000102  -0.000146   0.000154   0.000160  0.0000064  0.0000006    0.000118    0.000086
+2000   1   6  51549   0.043099   0.376427   0.3523871   0.0003923   0.000164  -0.000085   0.000154   0.000157  0.0000207  0.0000006    0.000119    0.000090
+2000   1   7  51550   0.043519   0.376308   0.3519551   0.0003953   0.000211  -0.000030   0.000160   0.000163  0.0000383  0.0000006    0.000120    0.000095
+2000   1   8  51551   0.043788   0.376259   0.3514734   0.0004258   0.000240  -0.000006   0.000167   0.000169  0.0000323  0.0000006    0.000121    0.000099
+2000   1   9  51552   0.043793   0.375981   0.3510970   0.0004886   0.000246  -0.000023   0.000159   0.000161  0.0000256  0.0000006    0.000121    0.000103
+2000   1  10  51553   0.043601   0.375557   0.3505869   0.0005921   0.000226  -0.000068   0.000145   0.000148  0.0000144  0.0000006    0.000122    0.000108
+2000   1  11  51554   0.043717   0.375047   0.3498892   0.0007305   0.000178  -0.000110   0.000146   0.000149  0.0000031  0.0000006    0.000123    0.000112
+2000   1  12  51555   0.044260   0.374854   0.3490554   0.0008903   0.000106  -0.000183   0.000142   0.000144  0.0000017  0.0000006    0.000120    0.000105
+2000   1  13  51556   0.045053   0.374891   0.3480849   0.0010403   0.000019  -0.000055   0.000135   0.000138  0.0000012  0.0000006    0.000121    0.000103
+2000   1  14  51557   0.046573   0.374968   0.3469615   0.0011415  -0.000071   0.000092   0.000141   0.000144  0.0000154  0.0000006    0.000120    0.000102
+2000   1  15  51558   0.047592   0.375031   0.3457499   0.0011923  -0.000141   0.000205   0.000147   0.000151  0.0000316  0.0000006    0.000119    0.000101
+2000   1  16  51559   0.048569   0.374948   0.3445829   0.0011403  -0.000174   0.000261   0.000168   0.000174  0.0000371  0.0000007    0.000118    0.000100
+2000   1  17  51560   0.049452   0.375067   0.3435405   0.0010127  -0.000154   0.000237   0.000176   0.000185  0.0000373  0.0000007    0.000117    0.000098
+2000   1  18  51561   0.050696   0.375125   0.3425623   0.0009136  -0.000080   0.000136   0.000163   0.000169  0.0000309  0.0000007    0.000115    0.000097
+2000   1  19  51562   0.052066   0.375905   0.3416107   0.0008329   0.000038  -0.000012   0.000154   0.000160  0.0000072  0.0000007    0.000114    0.000096
+2000   1  20  51563   0.053162   0.375791   0.3407340   0.0008089   0.000181  -0.000159   0.000153   0.000161  0.0000163  0.0000007    0.000113    0.000094
+2000   1  21  51564   0.054272   0.376163   0.3398876   0.0008716   0.000316  -0.000270   0.000156   0.000165  0.0000301  0.0000007    0.000111    0.000093
+2000   1  22  51565   0.055128   0.376451   0.3389816   0.0009745   0.000413  -0.000322   0.000166   0.000175  0.0000298  0.0000007    0.000110    0.000092
+2000   1  23  51566   0.055827   0.377044   0.3379638   0.0010852   0.000447  -0.000310   0.000177   0.000185  0.0000345  0.0000007    0.000109    0.000091
+2000   1  24  51567   0.056228   0.377305   0.3368016   0.0011897   0.000408  -0.000249   0.000173   0.000182  0.0000356  0.0000007    0.000107    0.000090
+2000   1  25  51568   0.056528   0.377532   0.3355488   0.0012962   0.000302  -0.000166   0.000162   0.000170  0.0000297  0.0000007    0.000106    0.000089
+2000   1  26  51569   0.056581   0.377508   0.3342603   0.0013101   0.000151  -0.000089   0.000152   0.000159  0.0000070  0.0000008    0.000105    0.000088
+2000   1  27  51570   0.056929   0.377153   0.3329637   0.0012555  -0.000017  -0.000042   0.000151   0.000158  0.0000173  0.0000008    0.000097    0.000079
+2000   1  28  51571   0.057396   0.376868   0.3317513   0.0011311  -0.000160  -0.000030   0.000153   0.000160  0.0000320  0.0000009    0.000086    0.000066
+2000   1  29  51572   0.057215   0.376716   0.3306946   0.0009737  -0.000235  -0.000044   0.000165   0.000169  0.0000312  0.0000009    0.000071    0.000055
+2000   1  30  51573   0.057044   0.376312   0.3297833   0.0008340  -0.000239  -0.000067   0.000178   0.000180  0.0000277  0.0000009    0.000055    0.000043
+2000   1  31  51574   0.057017   0.376203   0.3290018   0.0007182  -0.000182  -0.000083   0.000175   0.000176  0.0000145  0.0000009    0.000040    0.000032
+2000   2   1  51575   0.057014   0.375773   0.3283203   0.0006442  -0.000099  -0.000084   0.000147   0.000149  0.0000013  0.0000009    0.000024    0.000020
+2000   2   2  51576   0.057184   0.375194   0.3277097   0.0005666  -0.000006  -0.000056   0.000144   0.000145  0.0000014  0.0000010    0.000079    0.000070
+2000   2   3  51577   0.057659   0.374549   0.3271394   0.0005106  -0.000004  -0.000053   0.000167   0.000167  0.0000139  0.0000010    0.000080    0.000074
+2000   2   4  51578   0.058293   0.374007   0.3266495   0.0005030  -0.000084  -0.000076   0.000167   0.000168  0.0000246  0.0000011    0.000060    0.000061
+2000   2   5  51579   0.059048   0.373398   0.3261521   0.0005806  -0.000213  -0.000118   0.000177   0.000178  0.0000247  0.0000011    0.000063    0.000060
+2000   2   6  51580   0.060000   0.372912   0.3254717   0.0007357  -0.000328  -0.000165   0.000183   0.000181  0.0000425  0.0000011    0.000066    0.000059
+2000   2   7  51581   0.061198   0.372504   0.3246358   0.0008869  -0.000379  -0.000201   0.000169   0.000165  0.0001241  0.0000012    0.000068    0.000057
+2000   2   8  51582   0.062204   0.372166   0.3236719   0.0010478  -0.000348  -0.000212   0.000159   0.000154  0.0001434  0.0000012    0.000071    0.000056
+2000   2   9  51583   0.063529   0.372065   0.3225795   0.0011814  -0.000148  -0.000177   0.000151   0.000148  0.0000298  0.0000012    0.000112    0.000100
+2000   2  10  51584   0.064834   0.371940   0.3213676   0.0012292  -0.000069  -0.000144   0.000151   0.000149  0.0000026  0.0000012    0.000142    0.000128
+2000   2  11  51585   0.065837   0.371336   0.3201543   0.0011778  -0.000070  -0.000113   0.000158   0.000153  0.0000040  0.0000012    0.000168    0.000149
+2000   2  12  51586   0.066300   0.371018   0.3190715   0.0010372  -0.000045  -0.000080   0.000171   0.000163  0.0000241  0.0000012    0.000148    0.000129
+2000   2  13  51587   0.066165   0.370355   0.3181423   0.0008662  -0.000036  -0.000064   0.000183   0.000173  0.0000362  0.0000012    0.000127    0.000110
+2000   2  14  51588   0.066145   0.369977   0.3173396   0.0007454  -0.000030  -0.000066   0.000186   0.000175  0.0000194  0.0000011    0.000106    0.000090
+2000   2  15  51589   0.066053   0.369474   0.3166403   0.0006812  -0.000024  -0.000079   0.000176   0.000169  0.0000027  0.0000011    0.000086    0.000070
+2000   2  16  51590   0.066697   0.369035   0.3159951   0.0006407  -0.000021  -0.000106   0.000166   0.000161  0.0000015  0.0000011    0.000101    0.000084
+2000   2  17  51591   0.067436   0.368674   0.3153139   0.0006841  -0.000026  -0.000088   0.000171   0.000168  0.0000132  0.0000011    0.000108    0.000089
+2000   2  18  51592   0.068113   0.368610   0.3145981   0.0007850  -0.000037  -0.000026   0.000179   0.000173  0.0000287  0.0000010    0.000111    0.000091
+2000   2  19  51593   0.068554   0.368541   0.3138007   0.0009400  -0.000047   0.000059   0.000186   0.000175  0.0000409  0.0000010    0.000113    0.000093
+2000   2  20  51594   0.069065   0.368377   0.3128053   0.0011289  -0.000051   0.000138   0.000190   0.000181  0.0000425  0.0000010    0.000116    0.000095
+2000   2  21  51595   0.069272   0.368229   0.3116253   0.0012534  -0.000044   0.000173   0.000184   0.000176  0.0000300  0.0000010    0.000118    0.000097
+2000   2  22  51596   0.069045   0.367545   0.3103545   0.0012627  -0.000027   0.000139   0.000174   0.000165  0.0000175  0.0000009    0.000121    0.000099
+2000   2  23  51597   0.068886   0.367030   0.3091107   0.0011861  -0.000006   0.000029   0.000166   0.000159  0.0000050  0.0000009    0.000123    0.000101
+2000   2  24  51598   0.068484   0.366235   0.3079717   0.0010555   0.000012  -0.000140   0.000166   0.000159  0.0000179  0.0000009    0.000294    0.000198
+2000   2  25  51599   0.067981   0.365555   0.3069407   0.0009275   0.000019  -0.000324   0.000167   0.000161  0.0000343  0.0000009    0.000520    0.000327
+2000   2  26  51600   0.067470   0.364476   0.3060664   0.0007995   0.000013  -0.000470   0.000183   0.000177  0.0000349  0.0000009    0.000747    0.000455
+2000   2  27  51601   0.067062   0.363646   0.3053439   0.0006639  -0.000002  -0.000535   0.000190   0.000186  0.0000271  0.0000009    0.000973    0.000583
+2000   2  28  51602   0.066601   0.362793   0.3046608   0.0005675  -0.000018  -0.000493   0.000165   0.000168  0.0000321  0.0000009    0.001200    0.000712
+2000   2  29  51603   0.066556   0.362106   0.3040878   0.0005479  -0.000027  -0.000352   0.000153   0.000159  0.0000273  0.0000009    0.001127    0.000668
+2000   3   1  51604   0.066367   0.361624   0.3036035   0.0005431  -0.000023  -0.000148   0.000160   0.000165  0.0000070  0.0000009    0.000322    0.000204
+2000   3   2  51605   0.066616   0.361065   0.3030466   0.0005741  -0.000006   0.000074   0.000158   0.000163  0.0000152  0.0000009    0.000121    0.000603
+2000   3   3  51606   0.067106   0.360656   0.3024001   0.0006548   0.000015   0.000254   0.000157   0.000164  0.0000316  0.0000009    0.000123    0.001291
+2000   3   4  51607   0.067837   0.360430   0.3016760   0.0008069   0.000031   0.000348   0.000170   0.000178  0.0000399  0.0000009    0.000124    0.001980
+2000   3   5  51608   0.067987   0.360515   0.3007802   0.0009760   0.000031   0.000336   0.000164   0.000169  0.0000370  0.0000009    0.000126    0.002669
+2000   3   6  51609   0.068116   0.360183   0.2996884   0.0011707   0.000012   0.000229   0.000147   0.000151  0.0000323  0.0000009    0.000127    0.003357
+2000   3   7  51610   0.068555   0.360006   0.2984418   0.0013113  -0.000024   0.000064   0.000144   0.000149  0.0000244  0.0000009    0.000128    0.003141
+2000   3   8  51611   0.068977   0.359833   0.2970915   0.0013866  -0.000063  -0.000105   0.000145   0.000148  0.0000063  0.0000009    0.000130    0.000702
+2000   3   9  51612   0.069301   0.359410   0.2956776   0.0013904  -0.000090  -0.000245   0.000143   0.000148  0.0000255  0.0000009    0.000117    0.000084
+2000   3  10  51613   0.070281   0.359070   0.2943150   0.0013224  -0.000092  -0.000321   0.000144   0.000151  0.0000461  0.0000009    0.000099    0.000073
+2000   3  11  51614   0.071699   0.358832   0.2930691   0.0012081  -0.000067  -0.000325   0.000150   0.000158  0.0000367  0.0000009    0.000081    0.000061
+2000   3  12  51615   0.073113   0.358967   0.2919156   0.0010701  -0.000031  -0.000267   0.000158   0.000164  0.0000371  0.0000009    0.000063    0.000049
+2000   3  13  51616   0.073949   0.358611   0.2909084   0.0009384  -0.000013  -0.000175   0.000157   0.000162  0.0000195  0.0000009    0.000045    0.000038
+2000   3  14  51617   0.074557   0.358182   0.2900573   0.0008372  -0.000050  -0.000079   0.000135   0.000140  0.0000019  0.0000009    0.000027    0.000026
+2000   3  15  51618   0.074763   0.357469   0.2892926   0.0008185  -0.000095  -0.000016   0.000130   0.000134  0.0000018  0.0000009    0.000103    0.000092
+2000   3  16  51619   0.074898   0.356404   0.2884868   0.0008643  -0.000327   0.000029   0.000146   0.000151  0.0000132  0.0000009    0.000126    0.000101
+2000   3  17  51620   0.074657   0.355825   0.2876152   0.0009373  -0.000610   0.000046   0.000154   0.000159  0.0000233  0.0000009    0.000127    0.000088
+2000   3  18  51621   0.074259   0.354966   0.2866990   0.0009932  -0.000727   0.000027   0.000157   0.000160  0.0000233  0.0000009    0.000117    0.000081
+2000   3  19  51622   0.073991   0.354111   0.2857282   0.0010216  -0.000711  -0.000008   0.000150   0.000151  0.0000286  0.0000009    0.000105    0.000073
+2000   3  20  51623   0.073780   0.353300   0.2847285   0.0010461  -0.000560  -0.000040   0.000141   0.000142  0.0000255  0.0000009    0.000095    0.000066
+2000   3  21  51624   0.073888   0.352667   0.2837031   0.0010642  -0.000314  -0.000054   0.000142   0.000144  0.0000192  0.0000009    0.000084    0.000058
+2000   3  22  51625   0.074064   0.352407   0.2826490   0.0010412  -0.000031  -0.000038   0.000129   0.000135  0.0000047  0.0000010    0.000072    0.000051
+2000   3  23  51626   0.074039   0.351704   0.2816005   0.0009689   0.000223   0.000005   0.000126   0.000130  0.0000147  0.0000010    0.000078    0.000055
+2000   3  24  51627   0.074081   0.351156   0.2806981   0.0008410   0.000411   0.000064   0.000142   0.000140  0.0000268  0.0000010    0.000088    0.000062
+2000   3  25  51628   0.073844   0.350646   0.2799637   0.0006671   0.000510   0.000116   0.000149   0.000147  0.0000267  0.0000010    0.000098    0.000070
+2000   3  26  51629   0.073470   0.349779   0.2793204   0.0005233   0.000508   0.000144   0.000155   0.000156  0.0000309  0.0000010    0.000108    0.000077
+2000   3  27  51630   0.073090   0.348869   0.2788533   0.0004113   0.000411   0.000133   0.000158   0.000165  0.0000183  0.0000010    0.000119    0.000085
+2000   3  28  51631   0.072865   0.348221   0.2784853   0.0003766   0.000240   0.000081   0.000151   0.000157  0.0000057  0.0000011    0.000129    0.000093
+2000   3  29  51632   0.072687   0.347461   0.2780968   0.0004014   0.000018  -0.000011   0.000140   0.000144  0.0000024  0.0000011    0.000114    0.000094
+2000   3  30  51633   0.073441   0.346574   0.2776580   0.0004607  -0.000173  -0.000108   0.000139   0.000143  0.0000380  0.0000011    0.000115    0.000098
+2000   3  31  51634   0.074424   0.346203   0.2771553   0.0005865  -0.000303  -0.000188   0.000142   0.000146  0.0000577  0.0000011    0.000121    0.000104
+2000   4   1  51635   0.075371   0.346138   0.2765191   0.0007576  -0.000354  -0.000238   0.000148   0.000155  0.0000291  0.0000012    0.000127    0.000110
+2000   4   2  51636   0.075731   0.346382   0.2756588   0.0009676  -0.000328  -0.000248   0.000154   0.000155  0.0000365  0.0000012    0.000134    0.000115
+2000   4   3  51637   0.076439   0.346652   0.2745594   0.0011765  -0.000243  -0.000218   0.000148   0.000143  0.0000439  0.0000012    0.000140    0.000121
+2000   4   4  51638   0.077161   0.347068   0.2732848   0.0013070  -0.000124  -0.000162   0.000145   0.000140  0.0000396  0.0000013    0.000147    0.000126
+2000   4   5  51639   0.077153   0.347097   0.2719398   0.0013274   0.000000  -0.000095   0.000145   0.000140  0.0000099  0.0000013    0.000153    0.000132
+2000   4   6  51640   0.077086   0.346913   0.2706233   0.0012789   0.000105  -0.000039   0.000146   0.000141  0.0000192  0.0000013    0.000153    0.000130
+2000   4   7  51641   0.077303   0.346328   0.2694113   0.0011319   0.000179  -0.000009   0.000144   0.000139  0.0000292  0.0000013    0.000151    0.000126
+2000   4   8  51642   0.077705   0.345824   0.2683395   0.0009619   0.000218  -0.000010   0.000145   0.000139  0.0000190  0.0000013    0.000148    0.000123
+2000   4   9  51643   0.077835   0.345234   0.2674027   0.0008339   0.000224  -0.000042   0.000145   0.000140  0.0000216  0.0000013    0.000146    0.000119
+2000   4  10  51644   0.078157   0.344382   0.2665692   0.0007569   0.000199  -0.000092   0.000132   0.000127  0.0000242  0.0000013    0.000144    0.000115
+2000   4  11  51645   0.079137   0.343625   0.2657805   0.0007613   0.000150  -0.000145   0.000123   0.000119  0.0000208  0.0000012    0.000142    0.000111
+2000   4  12  51646   0.080330   0.343479   0.2649571   0.0008629   0.000084  -0.000184   0.000121   0.000116  0.0000056  0.0000012    0.000140    0.000107
+2000   4  13  51647   0.081451   0.343440   0.2640217   0.0009915   0.000010  -0.000198   0.000125   0.000121  0.0000096  0.0000012    0.000132    0.000100
+2000   4  14  51648   0.082060   0.343691   0.2629326   0.0011567  -0.000063  -0.000183   0.000128   0.000125  0.0000248  0.0000012    0.000123    0.000093
+2000   4  15  51649   0.082108   0.343977   0.2617025   0.0013095  -0.000122  -0.000146   0.000130   0.000127  0.0000357  0.0000012    0.000113    0.000087
+2000   4  16  51650   0.082185   0.344305   0.2603437   0.0014326  -0.000157  -0.000096   0.000131   0.000128  0.0000263  0.0000012    0.000104    0.000080
+2000   4  17  51651   0.082325   0.344280   0.2588655   0.0014681  -0.000158  -0.000045   0.000125   0.000123  0.0000324  0.0000012    0.000095    0.000073
+2000   4  18  51652   0.082500   0.344145   0.2573903   0.0014306  -0.000119  -0.000006   0.000120   0.000118  0.0000287  0.0000011    0.000086    0.000066
+2000   4  19  51653   0.082330   0.343943   0.2560229   0.0013357  -0.000045   0.000020   0.000112   0.000112  0.0000067  0.0000011    0.000076    0.000059
+2000   4  20  51654   0.082382   0.343209   0.2547778   0.0012229   0.000055   0.000031   0.000112   0.000113  0.0000250  0.0000010    0.000082    0.000069
+2000   4  21  51655   0.082664   0.342567   0.2536468   0.0011119   0.000158   0.000032   0.000118   0.000119  0.0000416  0.0000010    0.000091    0.000083
+2000   4  22  51656   0.082568   0.341893   0.2526244   0.0009761   0.000237   0.000027   0.000122   0.000123  0.0000321  0.0000010    0.000100    0.000098
+2000   4  23  51657   0.082869   0.340978   0.2517107   0.0008445   0.000266   0.000018   0.000129   0.000133  0.0000226  0.0000009    0.000110    0.000113
+2000   4  24  51658   0.083437   0.340244   0.2509122   0.0007293   0.000228   0.000006   0.000132   0.000140  0.0000131  0.0000076    0.000119    0.000128
+2000   4  25  51659   0.084214   0.339743   0.2502242   0.0006500   0.000119  -0.000011   0.000124   0.000132  0.0000036  0.0000141    0.000129    0.000143
+2000   4  26  51660   0.084981   0.339401   0.2496089   0.0006501  -0.000052  -0.000031   0.000116   0.000123  0.0000019  0.0000138    0.000129    0.000104
+2000   4  27  51661   0.085859   0.339008   0.2489911   0.0007305  -0.000242  -0.000057   0.000120   0.000127  0.0000150  0.0000072    0.000135    0.000097
+2000   4  28  51662   0.086651   0.338734   0.2481708   0.0008660  -0.000410  -0.000077   0.000121   0.000129  0.0000324  0.0000007    0.000142    0.000102
+2000   4  29  51663   0.087489   0.338507   0.2471585   0.0010758  -0.000518  -0.000077   0.000123   0.000132  0.0000383  0.0000007    0.000150    0.000107
+2000   4  30  51664   0.088312   0.337997   0.2460443   0.0012815  -0.000539  -0.000045   0.000116   0.000122  0.0000291  0.0000007    0.000158    0.000113
+2000   5   1  51665   0.089151   0.337562   0.2447085   0.0014181  -0.000465   0.000021   0.000102   0.000105  0.0000273  0.0000007    0.000166    0.000118
+2000   5   2  51666   0.089602   0.337197   0.2432394   0.0014957  -0.000309   0.000114   0.000099   0.000102  0.0000223  0.0000007    0.000174    0.000123
+2000   5   3  51667   0.090088   0.336838   0.2417459   0.0015082  -0.000107   0.000213   0.000098   0.000101  0.0000062  0.0000007    0.000182    0.000129
+2000   5   4  51668   0.089948   0.336129   0.2402516   0.0014411   0.000097   0.000294   0.000096   0.000099  0.0000170  0.0000006    0.000175    0.000131
+2000   5   5  51669   0.089540   0.335013   0.2388313   0.0012970   0.000253   0.000330   0.000095   0.000097  0.0000304  0.0000006    0.000163    0.000131
+2000   5   6  51670   0.089151   0.333929   0.2375902   0.0011186   0.000327   0.000307   0.000097   0.000099  0.0000235  0.0000006    0.000151    0.000132
+2000   5   7  51671   0.088621   0.333125   0.2365709   0.0009548   0.000309   0.000225   0.000098   0.000099  0.0000167  0.0000006    0.000139    0.000133
+2000   5   8  51672   0.087976   0.332026   0.2357246   0.0008578   0.000220   0.000106   0.000092   0.000093  0.0000098  0.0000006    0.000128    0.000133
+2000   5   9  51673   0.087586   0.331009   0.2349312   0.0008536   0.000108  -0.000016   0.000088   0.000088  0.0000030  0.0000006    0.000116    0.000134
+2000   5  10  51674   0.087364   0.330273   0.2340566   0.0009420  -0.000049  -0.000127   0.000095   0.000095  0.0000020  0.0000006    0.000114    0.000106
+2000   5  11  51675   0.087447   0.329820   0.2330092   0.0010732  -0.000001  -0.000144   0.000096   0.000097  0.0000456  0.0000006    0.000092    0.000090
+2000   5  12  51676   0.088109   0.329759   0.2318809   0.0011696   0.000094  -0.000106   0.000091   0.000092  0.0000761  0.0000006    0.000090    0.000138
+2000   5  13  51677   0.088894   0.329713   0.2307296   0.0012306   0.000170  -0.000044   0.000092   0.000092  0.0000337  0.0000006    0.000097    0.000206
+2000   5  14  51678   0.089544   0.329822   0.2294638   0.0012672   0.000188   0.000011   0.000089   0.000090  0.0000354  0.0000006    0.000105    0.000274
+2000   5  15  51679   0.090121   0.329793   0.2281468   0.0012369   0.000111   0.000029   0.000090   0.000092  0.0000379  0.0000006    0.000112    0.000342
+2000   5  16  51680   0.090695   0.329373   0.2269342   0.0011462  -0.000050  -0.000001   0.000089   0.000091  0.0000333  0.0000006    0.000119    0.000411
+2000   5  17  51681   0.090985   0.328623   0.2258873   0.0010411  -0.000292  -0.000082   0.000091   0.000094  0.0000087  0.0000006    0.000138    0.000179
+2000   5  18  51682   0.091537   0.327824   0.2249182   0.0009326  -0.000441  -0.000161   0.000091   0.000094  0.0000124  0.0000006    0.000129    0.000109
+2000   5  19  51683   0.092300   0.327231   0.2240165   0.0008008  -0.000474  -0.000217   0.000091   0.000094  0.0000255  0.0000006    0.000110    0.000093
+2000   5  20  51684   0.093319   0.326684   0.2232576   0.0006695  -0.000401  -0.000235   0.000101   0.000103  0.0000454  0.0000006    0.000091    0.000076
+2000   5  21  51685   0.094114   0.326309   0.2226583   0.0005672  -0.000261  -0.000218   0.000104   0.000104  0.0000657  0.0000006    0.000073    0.000060
+2000   5  22  51686   0.094598   0.325762   0.2221374   0.0005056  -0.000114  -0.000183   0.000102   0.000102  0.0000345  0.0000006    0.000054    0.000044
+2000   5  23  51687   0.094734   0.324917   0.2216366   0.0004954  -0.000016  -0.000155   0.000089   0.000090  0.0000033  0.0000006    0.000035    0.000028
+2000   5  24  51688   0.094795   0.323589   0.2211184   0.0005242  -0.000025  -0.000156   0.000083   0.000085  0.0000017  0.0000006    0.000100    0.000087
+2000   5  25  51689   0.095471   0.322557   0.2205446   0.0005707  -0.000073  -0.000191   0.000087   0.000090  0.0000157  0.0000006    0.000125    0.000110
+2000   5  26  51690   0.096171   0.321709   0.2199708   0.0006320  -0.000136  -0.000247   0.000089   0.000091  0.0000350  0.0000007    0.000133    0.000117
+2000   5  27  51691   0.097438   0.320964   0.2193300   0.0007321  -0.000183  -0.000302   0.000090   0.000092  0.0000471  0.0000006    0.000142    0.000125
+2000   5  28  51692   0.098910   0.320320   0.2185017   0.0008527  -0.000188  -0.000332   0.000101   0.000103  0.0000369  0.0000006    0.000150    0.000132
+2000   5  29  51693   0.100786   0.319513   0.2176294   0.0009440  -0.000142  -0.000323   0.000103   0.000106  0.0000274  0.0000006    0.000158    0.000140
+2000   5  30  51694   0.102457   0.318892   0.2167218   0.0009687  -0.000055  -0.000279   0.000094   0.000097  0.0000174  0.0000006    0.000167    0.000147
+2000   5  31  51695   0.103775   0.318233   0.2157933   0.0009246   0.000050  -0.000220   0.000089   0.000094  0.0000065  0.0000006    0.000175    0.000155
+2000   6   1  51696   0.105140   0.317618   0.2149383   0.0008226   0.000142  -0.000174   0.000087   0.000091  0.0000165  0.0000006    0.000171    0.000152
+2000   6   2  51697   0.106422   0.316742   0.2141912   0.0006335   0.000198  -0.000160   0.000088   0.000092  0.0000312  0.0000007    0.000162    0.000145
+2000   6   3  51698   0.107796   0.315662   0.2135703   0.0004927   0.000208  -0.000179   0.000097   0.000099  0.0000375  0.0000008    0.000154    0.000138
+2000   6   4  51699   0.108831   0.314686   0.2130747   0.0004482   0.000174  -0.000216   0.000103   0.000104  0.0000382  0.0000083    0.000146    0.000132
+2000   6   5  51700   0.109868   0.313742   0.2126136   0.0004511   0.000108  -0.000235   0.000098   0.000099  0.0000438  0.0000149    0.000137    0.000125
+2000   6   6  51701   0.110983   0.312818   0.2121409   0.0005277   0.000032  -0.000200   0.000093   0.000095  0.0000382  0.0000142    0.000128    0.000118
+2000   6   7  51702   0.111908   0.312019   0.2115817   0.0006485  -0.000034  -0.000090   0.000092   0.000094  0.0000093  0.0000146    0.000120    0.000111
+2000   6   8  51703   0.112583   0.311297   0.2108416   0.0008129  -0.000074   0.000099   0.000093   0.000096  0.0000161  0.0000149    0.000099    0.000109
+2000   6   9  51704   0.112582   0.310460   0.2099430   0.0009128  -0.000088   0.000316   0.000093   0.000096  0.0000283  0.0000152    0.000074    0.000108
+2000   6  10  51705   0.112548   0.309138   0.2090097   0.0009019  -0.000077   0.000475   0.000097   0.000099  0.0000290  0.0000159    0.000093    0.000119
+2000   6  11  51706   0.112688   0.307666   0.2081375   0.0008399  -0.000063   0.000540   0.000104   0.000106  0.0000325  0.0000159    0.000111    0.000131
+2000   6  12  51707   0.113259   0.306233   0.2073440   0.0007479  -0.000066   0.000476   0.000100   0.000101  0.0000363  0.0000147    0.000130    0.000142
+2000   6  13  51708   0.113497   0.305082   0.2066773   0.0005903  -0.000101   0.000279   0.000090   0.000093  0.0000314  0.0000140    0.000149    0.000153
+2000   6  14  51709   0.113674   0.303764   0.2062303   0.0003769  -0.000168  -0.000016   0.000090   0.000093  0.0000096  0.0000140    0.000168    0.000164
+2000   6  15  51710   0.113779   0.302613   0.2060634   0.0001528  -0.000274  -0.000360   0.000091   0.000094  0.0000167  0.0000110    0.000576    0.000633
+2000   6  16  51711   0.113170   0.301401   0.2060756  -0.0000504  -0.000362  -0.000668   0.000089   0.000092  0.0000333  0.0000079    0.001112    0.001254
+2000   6  17  51712   0.112236   0.300376   0.2061158  -0.0001590  -0.000348  -0.000855   0.000091   0.000094  0.0000387  0.0000079    0.001010    0.001140
+2000   6  18  51713   0.111060   0.299379   0.2061843  -0.0001903  -0.000266  -0.000879   0.000097   0.000099  0.0000244  0.0000080    0.000740    0.000831
+2000   6  19  51714   0.109910   0.297834   0.2063693  -0.0001699  -0.000161  -0.000730   0.000098   0.000099  0.0000141  0.0000080    0.000469    0.000522
+2000   6  20  51715   0.108909   0.296250   0.2065954  -0.0001169  -0.000078  -0.000442   0.000094   0.000096  0.0000037  0.0000079    0.000198    0.000214
+2000   6  21  51716   0.108224   0.294476   0.2067182  -0.0000461  -0.000085  -0.000060   0.000093   0.000095  0.0000023  0.0000078    0.000132    0.000126
+2000   6  22  51717   0.107826   0.292721   0.2066768   0.0000624  -0.000119   0.000297   0.000094   0.000097  0.0000317  0.0000079    0.000116    0.000105
+2000   6  23  51718   0.107648   0.290970   0.2065662   0.0001615  -0.000165   0.000562   0.000094   0.000098  0.0000441  0.0000081    0.000111    0.000101
+2000   6  24  51719   0.107910   0.289278   0.2064100   0.0002566  -0.000205   0.000693   0.000096   0.000099  0.0000238  0.0000081    0.000107    0.000097
+2000   6  25  51720   0.108260   0.288066   0.2061240   0.0003463  -0.000216   0.000676   0.000099   0.000101  0.0000271  0.0000082    0.000102    0.000093
+2000   6  26  51721   0.108587   0.286787   0.2057261   0.0004151  -0.000189   0.000528   0.000097   0.000099  0.0000287  0.0000080    0.000097    0.000089
+2000   6  27  51722   0.109068   0.285455   0.2052727   0.0004486  -0.000130   0.000289   0.000094   0.000097  0.0000231  0.0000080    0.000093    0.000085
+2000   6  28  51723   0.109599   0.284108   0.2048375   0.0004183  -0.000052   0.000014   0.000093   0.000095  0.0000058  0.0000082    0.000088    0.000081
+2000   6  29  51724   0.110177   0.283031   0.2044800   0.0003093   0.000023  -0.000240   0.000093   0.000094  0.0000209  0.0000082    0.000093    0.000083
+2000   6  30  51725   0.110297   0.281714   0.2042327   0.0001607   0.000079  -0.000434   0.000094   0.000094  0.0000336  0.0000081    0.000101    0.000088
+2000   7   1  51726   0.110196   0.280081   0.2041084   0.0000480   0.000106  -0.000541   0.000097   0.000098  0.0000272  0.0000083    0.000109    0.000093
+2000   7   2  51727   0.110104   0.278751   0.2040837   0.0000014   0.000103  -0.000554   0.000109   0.000109  0.0000225  0.0000083    0.000117    0.000097
+2000   7   3  51728   0.109615   0.277628   0.2040748   0.0000621   0.000076  -0.000484   0.000112   0.000111  0.0000178  0.0000079    0.000125    0.000102
+2000   7   4  51729   0.109070   0.276459   0.2039712   0.0002026   0.000040  -0.000353   0.000105   0.000105  0.0000132  0.0000075    0.000133    0.000106
+2000   7   5  51730   0.108306   0.275630   0.2036868   0.0003745   0.000007  -0.000193   0.000106   0.000105  0.0000085  0.0000074    0.000141    0.000111
+2000   7   6  51731   0.107459   0.274881   0.2032026   0.0005326  -0.000015  -0.000040   0.000106   0.000106  0.0000038  0.0000075    0.000149    0.000115
+2000   7   7  51732   0.107042   0.274134   0.2025743   0.0006253  -0.000016   0.000084   0.000098   0.000099  0.0000013  0.0000074    0.000070    0.000060
+2000   7   8  51733   0.106968   0.273346   0.2019037   0.0006387  -0.000026   0.000144   0.000105   0.000104  0.0000009  0.0000075    0.000045    0.000044
+2000   7   9  51734   0.106336   0.272936   0.2012719   0.0005884  -0.000047   0.000144   0.000123   0.000121  0.0000010  0.0000078    0.000053    0.000051
+2000   7  10  51735   0.105541   0.272130   0.2007166   0.0004974  -0.000069   0.000098   0.000121   0.000119  0.0000011  0.0000078    0.000062    0.000058
+2000   7  11  51736   0.104468   0.271571   0.2002545   0.0003804  -0.000079   0.000030   0.000112   0.000111  0.0000012  0.0000077    0.000072    0.000065
+2000   7  12  51737   0.103706   0.270476   0.1999060   0.0002660  -0.000095  -0.000036   0.000109   0.000108  0.0000018  0.0000076    0.000119    0.000101
+2000   7  13  51738   0.102920   0.269438   0.1997066   0.0001386  -0.000019  -0.000077   0.000108   0.000107  0.0000019  0.0000076    0.000141    0.000113
+2000   7  14  51739   0.102203   0.268177   0.1996115   0.0000260   0.000045  -0.000100   0.000112   0.000111  0.0000130  0.0000079    0.000139    0.000109
+2000   7  15  51740   0.101280   0.267240   0.1996090  -0.0000899   0.000076  -0.000104   0.000122   0.000122  0.0000262  0.0000082    0.000132    0.000102
+2000   7  16  51741   0.100097   0.265969   0.1997256  -0.0001638   0.000073  -0.000092   0.000116   0.000116  0.0000253  0.0000083    0.000125    0.000096
+2000   7  17  51742   0.099273   0.265008   0.1999310  -0.0001671   0.000042  -0.000070   0.000099   0.000100  0.0000244  0.0000082    0.000117    0.000090
+2000   7  18  51743   0.098332   0.264057   0.2001521  -0.0001595  -0.000001  -0.000043   0.000097   0.000098  0.0000214  0.0000081    0.000110    0.000083
+2000   7  19  51744   0.097117   0.263063   0.2003241  -0.0001475  -0.000033  -0.000019   0.000098   0.000099  0.0000056  0.0000082    0.000103    0.000077
+2000   7  20  51745   0.096042   0.261713   0.2004340  -0.0000848  -0.000032  -0.000002   0.000100   0.000102  0.0000088  0.0000083    0.000107    0.000081
+2000   7  21  51746   0.094855   0.260354   0.2005168  -0.0000396   0.000000   0.000004   0.000100   0.000102  0.0000160  0.0000086    0.000113    0.000088
+2000   7  22  51747   0.093517   0.259223   0.2005794  -0.0000060   0.000052  -0.000001   0.000104   0.000107  0.0000106  0.0000087    0.000121    0.000096
+2000   7  23  51748   0.092105   0.258370   0.2005705   0.0000719   0.000099  -0.000018   0.000108   0.000112  0.0000079  0.0000086    0.000127    0.000103
+2000   7  24  51749   0.091314   0.257137   0.2004840   0.0001279   0.000119  -0.000049   0.000101   0.000103  0.0000052  0.0000084    0.000134    0.000111
+2000   7  25  51750   0.090836   0.256277   0.2003675   0.0001305   0.000097  -0.000098   0.000097   0.000097  0.0000025  0.0000082    0.000141    0.000118
+2000   7  26  51751   0.090476   0.255836   0.2002886   0.0000617   0.000022  -0.000156   0.000094   0.000095  0.0000021  0.0000081    0.000139    0.000112
+2000   7  27  51752   0.090278   0.255309   0.2002866  -0.0000410  -0.000069  -0.000247   0.000095   0.000096  0.0000151  0.0000083    0.000139    0.000112
+2000   7  28  51753   0.089955   0.254813   0.2003562  -0.0001317  -0.000153  -0.000354   0.000099   0.000100  0.0000294  0.0000086    0.000140    0.000116
+2000   7  29  51754   0.089065   0.254158   0.2004796  -0.0001592  -0.000209  -0.000449   0.000103   0.000102  0.0000272  0.0000089    0.000141    0.000119
+2000   7  30  51755   0.088394   0.253467   0.2006349  -0.0001423  -0.000222  -0.000504   0.000104   0.000102  0.0000219  0.0000094    0.000142    0.000123
+2000   7  31  51756   0.087620   0.252576   0.2007386  -0.0000575  -0.000192  -0.000485   0.000099   0.000097  0.0000166  0.0000098    0.000144    0.000126
+2000   8   1  51757   0.087002   0.251981   0.2006970   0.0001118  -0.000136  -0.000373   0.000096   0.000095  0.0000111  0.0000094    0.000145    0.000130
+2000   8   2  51758   0.086358   0.251340   0.2004758   0.0002546  -0.000081  -0.000171   0.000095   0.000093  0.0000042  0.0000088    0.000146    0.000134
+2000   8   3  51759   0.085943   0.250938   0.2001260   0.0003559  -0.000061   0.000103   0.000096   0.000093  0.0000069  0.0000087    0.000152    0.000132
+2000   8   4  51760   0.085347   0.250506   0.1997269   0.0003920  -0.000084   0.000389   0.000098   0.000095  0.0000123  0.0000087    0.000160    0.000130
+2000   8   5  51761   0.084672   0.249930   0.1993436   0.0003335  -0.000135   0.000616   0.000104   0.000101  0.0000150  0.0000090    0.000168    0.000127
+2000   8   6  51762   0.083948   0.249253   0.1990251   0.0002286  -0.000182   0.000724   0.000110   0.000105  0.0000165  0.0000088    0.000176    0.000124
+2000   8   7  51763   0.083283   0.248755   0.1988262   0.0001078  -0.000186   0.000676   0.000103   0.000100  0.0000181  0.0000082    0.000184    0.000122
+2000   8   8  51764   0.082364   0.248326   0.1987845  -0.0000399  -0.000128   0.000482   0.000096   0.000094  0.0000170  0.0000079    0.000192    0.000119
+2000   8   9  51765   0.081250   0.247983   0.1988923  -0.0001759   0.000016   0.000153   0.000098   0.000095  0.0000049  0.0000079    0.000148    0.000108
+2000   8  10  51766   0.080070   0.247674   0.1990952  -0.0002448   0.000151  -0.000149   0.000100   0.000098  0.0000112  0.0000081    0.000183    0.000508
+2000   8  11  51767   0.078343   0.247432   0.1993435  -0.0002589   0.000199  -0.000359   0.000103   0.000102  0.0000228  0.0000083    0.000216    0.000757
+2000   8  12  51768   0.076657   0.246567   0.1995898  -0.0002479   0.000129  -0.000443   0.000106   0.000103  0.0000275  0.0000083    0.000206    0.000598
+2000   8  13  51769   0.075064   0.245851   0.1997856  -0.0001931   0.000002  -0.000410   0.000106   0.000101  0.0000202  0.0000081    0.000196    0.000439
+2000   8  14  51770   0.073679   0.245218   0.1999193  -0.0001057  -0.000123  -0.000293   0.000101   0.000097  0.0000129  0.0000078    0.000186    0.000280
+2000   8  15  51771   0.072625   0.244791   0.1999769   0.0000058  -0.000194  -0.000137   0.000097   0.000094  0.0000057  0.0000078    0.000176    0.000121
+2000   8  16  51772   0.072025   0.244293   0.1999099   0.0001591  -0.000123  -0.000022   0.000094   0.000092  0.0000040  0.0000079    0.000192    0.000132
+2000   8  17  51773   0.071365   0.244335   0.1996402   0.0003228  -0.000057   0.000110   0.000095   0.000093  0.0000173  0.0000080    0.000167    0.000142
+2000   8  18  51774   0.070402   0.244259   0.1992057   0.0004769  -0.000004   0.000217   0.000097   0.000096  0.0000272  0.0000081    0.000127    0.000146
+2000   8  19  51775   0.069192   0.244390   0.1986776   0.0005849   0.000037   0.000253   0.000097   0.000096  0.0000110  0.0000080    0.000107    0.000128
+2000   8  20  51776   0.067517   0.244184   0.1980571   0.0006413   0.000057   0.000229   0.000103   0.000101  0.0000079  0.0000080    0.000093    0.000103
+2000   8  21  51777   0.065945   0.244032   0.1973730   0.0006522   0.000060   0.000163   0.000102   0.000101  0.0000048  0.0000079    0.000079    0.000077
+2000   8  22  51778   0.063923   0.243828   0.1966796   0.0006208   0.000050   0.000079   0.000096   0.000096  0.0000018  0.0000078    0.000066    0.000052
+2000   8  23  51779   0.062170   0.243528   0.1960493   0.0005509   0.000017   0.000010   0.000095   0.000096  0.0000015  0.0000079    0.000108    0.000087
+2000   8  24  51780   0.060603   0.243308   0.1955768   0.0004725   0.000000  -0.000040   0.000101   0.000101  0.0000206  0.0000081    0.000066    0.000055
+2000   8  25  51781   0.059139   0.242866   0.1951726   0.0004048  -0.000091  -0.000081   0.000105   0.000106  0.0000421  0.0000083    0.000060    0.000052
+2000   8  26  51782   0.057426   0.242978   0.1946883   0.0003889  -0.000239  -0.000099   0.000108   0.000107  0.0000193  0.0000085    0.000082    0.000071
+2000   8  27  51783   0.055665   0.242900   0.1941951   0.0004670  -0.000392  -0.000076   0.000107   0.000106  0.0000233  0.0000084    0.000103    0.000089
+2000   8  28  51784   0.053858   0.242612   0.1936664   0.0006015  -0.000498  -0.000008   0.000099   0.000099  0.0000274  0.0000084    0.000125    0.000108
+2000   8  29  51785   0.052338   0.242364   0.1929868   0.0007561  -0.000512   0.000102   0.000100   0.000102  0.0000292  0.0000087    0.000146    0.000127
+2000   8  30  51786   0.051257   0.241982   0.1921046   0.0008970  -0.000425   0.000227   0.000100   0.000103  0.0000075  0.0000089    0.000167    0.000146
+2000   8  31  51787   0.050133   0.241879   0.1911384   0.0009393  -0.000213   0.000377   0.000096   0.000098  0.0000147  0.0000086    0.000114    0.000123
+2000   9   1  51788   0.049208   0.242003   0.1902095   0.0008990  -0.000034   0.000420   0.000097   0.000099  0.0000295  0.0000084    0.000095    0.000108
+2000   9   2  51789   0.047965   0.242097   0.1893769   0.0007823   0.000052   0.000357   0.000100   0.000102  0.0000244  0.0000087    0.000106    0.000104
+2000   9   3  51790   0.046721   0.241981   0.1886698   0.0006254   0.000042   0.000251   0.000100   0.000102  0.0000193  0.0000087    0.000117    0.000100
+2000   9   4  51791   0.045229   0.242187   0.1880990   0.0004664  -0.000049   0.000165   0.000093   0.000096  0.0000142  0.0000084    0.000128    0.000095
+2000   9   5  51792   0.043361   0.242223   0.1876719   0.0003070  -0.000178   0.000152   0.000090   0.000094  0.0000091  0.0000082    0.000138    0.000091
+2000   9   6  51793   0.041446   0.242256   0.1874002   0.0001648  -0.000283   0.000274   0.000096   0.000099  0.0000039  0.0000082    0.000216    0.000199
+2000   9   7  51794   0.038987   0.242116   0.1872905   0.0000333  -0.000336   0.000433   0.000098   0.000101  0.0000095  0.0000086    0.000746    0.000511
+2000   9   8  51795   0.036693   0.241720   0.1873219  -0.0000476  -0.000322   0.000566   0.000099   0.000101  0.0000166  0.0000089    0.001171    0.000746
+2000   9   9  51796   0.034255   0.241319   0.1874119  -0.0000528  -0.000247   0.000613   0.000101   0.000104  0.0000167  0.0000090    0.000976    0.000628
+2000   9  10  51797   0.031809   0.240629   0.1874501   0.0000068  -0.000134   0.000568   0.000101   0.000105  0.0000177  0.0000087    0.000782    0.000511
+2000   9  11  51798   0.029920   0.240172   0.1874035   0.0000987  -0.000012   0.000441   0.000099   0.000103  0.0000188  0.0000083    0.000587    0.000394
+2000   9  12  51799   0.027808   0.239897   0.1872775   0.0002084   0.000088   0.000263   0.000095   0.000099  0.0000172  0.0000081    0.000393    0.000277
+2000   9  13  51800   0.025261   0.239610   0.1870481   0.0003534   0.000147   0.000082   0.000094   0.000097  0.0000049  0.0000082    0.000199    0.000160
+2000   9  14  51801   0.022124   0.239782   0.1866475   0.0005234   0.000155  -0.000060   0.000094   0.000097  0.0000019  0.0000082    0.000160    0.000131
+2000   9  15  51802   0.019277   0.239877   0.1860609   0.0006752   0.000123  -0.000135   0.000094   0.000096  0.0000020  0.0000082    0.000174    0.000132
+2000   9  16  51803   0.016867   0.240001   0.1853505   0.0007602   0.000073  -0.000132   0.000097   0.000097  0.0000018  0.0000084    0.000151    0.000114
+2000   9  17  51804   0.015290   0.240090   0.1846117   0.0007534   0.000030  -0.000076   0.000105   0.000105  0.0000016  0.0000084    0.000125    0.000095
+2000   9  18  51805   0.013724   0.240658   0.1839314   0.0006565   0.000012  -0.000007   0.000103   0.000104  0.0000014  0.0000082    0.000099    0.000075
+2000   9  19  51806   0.012402   0.241252   0.1833558   0.0005394   0.000024   0.000036   0.000093   0.000095  0.0000012  0.0000080    0.000073    0.000056
+2000   9  20  51807   0.010657   0.242287   0.1828891   0.0004419   0.000077   0.000061   0.000093   0.000094  0.0000016  0.0000079    0.000100    0.000080
+2000   9  21  51808   0.008938   0.243209   0.1825196   0.0003875   0.000114  -0.000059   0.000094   0.000095  0.0000126  0.0000078    0.000080    0.000066
+2000   9  22  51809   0.006930   0.243760   0.1821540   0.0003975   0.000128  -0.000144   0.000095   0.000096  0.0000242  0.0000077    0.000079    0.000066
+2000   9  23  51810   0.005465   0.243621   0.1817031   0.0004470   0.000124  -0.000168   0.000100   0.000100  0.0000229  0.0000076    0.000095    0.000078
+2000   9  24  51811   0.004202   0.243619   0.1811877   0.0005493   0.000108  -0.000142   0.000099   0.000098  0.0000163  0.0000076    0.000112    0.000091
+2000   9  25  51812   0.003038   0.243613   0.1805918   0.0007157   0.000094  -0.000080   0.000095   0.000093  0.0000098  0.0000075    0.000128    0.000103
+2000   9  26  51813   0.001760   0.243731   0.1798456   0.0009107   0.000082  -0.000007   0.000091   0.000089  0.0000032  0.0000075    0.000144    0.000115
+2000   9  27  51814   0.000743   0.244110   0.1788874   0.0010598   0.000096   0.000023   0.000089   0.000087  0.0000019  0.0000075    0.000127    0.000101
+2000   9  28  51815  -0.000599   0.244666   0.1777456   0.0011150   0.000064   0.000067   0.000093   0.000089  0.0000242  0.0000076    0.000124    0.000104
+2000   9  29  51816  -0.002239   0.245647   0.1766106   0.0010897  -0.000005   0.000116   0.000093   0.000090  0.0000449  0.0000076    0.000130    0.000115
+2000   9  30  51817  -0.004240   0.246495   0.1756143   0.0009878  -0.000082   0.000155   0.000095   0.000092  0.0000313  0.0000079    0.000135    0.000126
+2000  10   1  51818  -0.005802   0.247103   0.1747099   0.0008115  -0.000135   0.000175   0.000098   0.000094  0.0000229  0.0000083    0.000141    0.000136
+2000  10   2  51819  -0.007167   0.247768   0.1739381   0.0006237  -0.000131   0.000171   0.000094   0.000091  0.0000145  0.0000082    0.000146    0.000147
+2000  10   3  51820  -0.009107   0.248460   0.1733802   0.0004219  -0.000053   0.000149   0.000091   0.000088  0.0000060  0.0000081    0.000152    0.000158
+2000  10   4  51821  -0.011205   0.248986   0.1730504   0.0002586   0.000115   0.000100   0.000091   0.000088  0.0000023  0.0000082    0.000125    0.000107
+2000  10   5  51822  -0.013032   0.249512   0.1728167   0.0001950   0.000301   0.000105   0.000092   0.000088  0.0000238  0.0000081    0.000134    0.000106
+2000  10   6  51823  -0.014609   0.250120   0.1725894   0.0002360   0.000463   0.000163   0.000090   0.000087  0.0000461  0.0000079    0.000158    0.000126
+2000  10   7  51824  -0.016083   0.250505   0.1723040   0.0003470   0.000568   0.000253   0.000093   0.000089  0.0000449  0.0000077    0.000181    0.000145
+2000  10   8  51825  -0.017572   0.250727   0.1718593   0.0004901   0.000589   0.000337   0.000101   0.000095  0.0000653  0.0000076    0.000205    0.000165
+2000  10   9  51826  -0.018965   0.251083   0.1712452   0.0006485   0.000526   0.000374   0.000101   0.000096  0.0000856  0.0000075    0.000229    0.000185
+2000  10  10  51827  -0.020498   0.251941   0.1704884   0.0008233   0.000399   0.000329   0.000098   0.000094  0.0000880  0.0000075    0.000253    0.000204
+2000  10  11  51828  -0.021770   0.253165   0.1695799   0.0010139   0.000173   0.000202   0.000099   0.000094  0.0000191  0.0000077    0.000159    0.000128
+2000  10  12  51829  -0.022873   0.254822   0.1684698   0.0011645   0.000108  -0.000029   0.000098   0.000094  0.0000019  0.0000079    0.000115    0.000118
+2000  10  13  51830  -0.024262   0.256520   0.1672125   0.0012514   0.000065  -0.000241   0.000098   0.000094  0.0000447  0.0000080    0.000114    0.000124
+2000  10  14  51831  -0.026204   0.258109   0.1658889   0.0012973   0.000036  -0.000379   0.000102   0.000098  0.0000863  0.0000081    0.000120    0.000125
+2000  10  15  51832  -0.028134   0.259278   0.1645677   0.0012880   0.000033  -0.000416   0.000114   0.000107  0.0000594  0.0000080    0.000126    0.000127
+2000  10  16  51833  -0.030366   0.260466   0.1633226   0.0011973   0.000037  -0.000349   0.000114   0.000108  0.0000326  0.0000075    0.000132    0.000128
+2000  10  17  51834  -0.032212   0.261129   0.1621967   0.0010695   0.000031  -0.000211   0.000107   0.000104  0.0000057  0.0000075    0.000138    0.000129
+2000  10  18  51835  -0.033928   0.262023   0.1611807   0.0009626   0.000090   0.000012   0.000107   0.000104  0.0000017  0.0000076    0.000113    0.000105
+2000  10  19  51836  -0.035655   0.262758   0.1602028   0.0008989  -0.000051   0.000091   0.000108   0.000104  0.0000376  0.0000076    0.000064    0.000059
+2000  10  20  51837  -0.037428   0.263640   0.1592989   0.0009141  -0.000098   0.000166   0.000122   0.000115  0.0000781  0.0000074    0.000047    0.000043
+2000  10  21  51838  -0.039084   0.264548   0.1584399   0.0010100  -0.000047   0.000237   0.000127   0.000120  0.0000819  0.0000076    0.000044    0.000040
+2000  10  22  51839  -0.040572   0.265571   0.1573938   0.0011625   0.000028   0.000272   0.000116   0.000111  0.0000555  0.0000078    0.000041    0.000037
+2000  10  23  51840  -0.041965   0.266907   0.1560825   0.0013360   0.000079   0.000254   0.000112   0.000110  0.0000291  0.0000079    0.000039    0.000033
+2000  10  24  51841  -0.043341   0.268626   0.1545890   0.0014845   0.000066   0.000170   0.000105   0.000105  0.0000027  0.0000078    0.000036    0.000030
+2000  10  25  51842  -0.044247   0.270048   0.1530407   0.0015605  -0.000049   0.000063   0.000103   0.000103  0.0000015  0.0000079    0.000091    0.000077
+2000  10  26  51843  -0.045574   0.271824   0.1514785   0.0015592  -0.000219  -0.000203   0.000100   0.000102  0.0000397  0.0000081    0.000219    0.000164
+2000  10  27  51844  -0.046935   0.273617   0.1499136   0.0015125  -0.000259  -0.000383   0.000095   0.000098  0.0000746  0.0000083    0.000236    0.000172
+2000  10  28  51845  -0.048299   0.275145   0.1484125   0.0013909  -0.000177  -0.000425   0.000104   0.000107  0.0000490  0.0000083    0.000198    0.000145
+2000  10  29  51846  -0.049240   0.276473   0.1470790   0.0012426  -0.000040  -0.000350   0.000103   0.000105  0.0000341  0.0000082    0.000160    0.000118
+2000  10  30  51847  -0.050060   0.278430   0.1459342   0.0011068   0.000092  -0.000195   0.000092   0.000094  0.0000192  0.0000080    0.000122    0.000091
+2000  10  31  51848  -0.051115   0.280763   0.1449370   0.0009835   0.000174  -0.000026   0.000088   0.000089  0.0000044  0.0000077    0.000084    0.000063
+2000  11   1  51849  -0.052457   0.282833   0.1440368   0.0008589   0.000091   0.000096   0.000087   0.000088  0.0000014  0.0000076    0.000113    0.000091
+2000  11   2  51850  -0.053682   0.284325   0.1432141   0.0008024   0.000063   0.000112   0.000089   0.000090  0.0000015  0.0000076    0.000097    0.000076
+2000  11   3  51851  -0.055181   0.286196   0.1424171   0.0008372   0.000170   0.000023   0.000090   0.000091  0.0000014  0.0000077    0.000134    0.000110
+2000  11   4  51852  -0.056495   0.287829   0.1415786   0.0008930   0.000211  -0.000055   0.000092   0.000093  0.0000034  0.0000081    0.000163    0.000140
+2000  11   5  51853  -0.057688   0.289442   0.1406700   0.0009509   0.000168  -0.000102   0.000099   0.000097  0.0000064  0.0000084    0.000177    0.000158
+2000  11   6  51854  -0.059247   0.291269   0.1396870   0.0010230   0.000069  -0.000124   0.000098   0.000097  0.0000094  0.0000083    0.000192    0.000176
+2000  11   7  51855  -0.060768   0.293602   0.1386204   0.0011297  -0.000053  -0.000140   0.000094   0.000093  0.0000104  0.0000079    0.000206    0.000194
+2000  11   8  51856  -0.062191   0.295856   0.1374512   0.0012349  -0.000143  -0.000173   0.000093   0.000093  0.0000040  0.0000077    0.000221    0.000213
+2000  11   9  51857  -0.063772   0.297928   0.1361703   0.0013062  -0.000131  -0.000248   0.000096   0.000096  0.0000060  0.0000077    0.000204    0.000197
+2000  11  10  51858  -0.065107   0.299513   0.1348154   0.0013557  -0.000022  -0.000344   0.000097   0.000096  0.0000109  0.0000076    0.000176    0.000170
+2000  11  11  51859  -0.066052   0.300782   0.1334728   0.0013295   0.000142  -0.000426   0.000095   0.000095  0.0000158  0.0000076    0.000148    0.000143
+2000  11  12  51860  -0.066269   0.301844   0.1322451   0.0011848   0.000290  -0.000452   0.000097   0.000097  0.0000207  0.0000076    0.000121    0.000116
+2000  11  13  51861  -0.066468   0.303439   0.1312076   0.0009523   0.000345  -0.000398   0.000095   0.000096  0.0000256  0.0000072    0.000093    0.000089
+2000  11  14  51862  -0.067390   0.305420   0.1303744   0.0007576   0.000272  -0.000264   0.000092   0.000092  0.0000259  0.0000069    0.000065    0.000062
+2000  11  15  51863  -0.069169   0.307146   0.1296922   0.0006541  -0.000011  -0.000049   0.000092   0.000093  0.0000067  0.0000069    0.000111    0.000096
+2000  11  16  51864  -0.071204   0.308664   0.1290712   0.0006058  -0.000233   0.000122   0.000094   0.000095  0.0000109  0.0000072    0.000122    0.000103
+2000  11  17  51865  -0.073128   0.309956   0.1284556   0.0006500  -0.000360   0.000218   0.000094   0.000096  0.0000212  0.0000073    0.000119    0.000101
+2000  11  18  51866  -0.074727   0.311690   0.1277813   0.0007529  -0.000381   0.000229   0.000097   0.000099  0.0000235  0.0000076    0.000117    0.000099
+2000  11  19  51867  -0.075676   0.313602   0.1269566   0.0008971  -0.000305   0.000165   0.000098   0.000099  0.0000226  0.0000080    0.000114    0.000096
+2000  11  20  51868  -0.075886   0.315786   0.1259681   0.0010546  -0.000169   0.000065   0.000091   0.000093  0.0000218  0.0000078    0.000112    0.000094
+2000  11  21  51869  -0.075851   0.318110   0.1248634   0.0011477  -0.000018  -0.000028   0.000087   0.000091  0.0000184  0.0000077    0.000109    0.000091
+2000  11  22  51870  -0.075853   0.320429   0.1237042   0.0011928   0.000108  -0.000075   0.000087   0.000090  0.0000052  0.0000076    0.000107    0.000089
+2000  11  23  51871  -0.076149   0.322456   0.1225386   0.0011684   0.000179  -0.000050   0.000086   0.000090  0.0000046  0.0000076    0.000099    0.000082
+2000  11  24  51872  -0.076575   0.324244   0.1214275   0.0010250   0.000202   0.000031   0.000089   0.000092  0.0000084  0.0000076    0.000089    0.000073
+2000  11  25  51873  -0.077117   0.326019   0.1204435   0.0008614   0.000193   0.000134   0.000093   0.000096  0.0000121  0.0000087    0.000080    0.000065
+2000  11  26  51874  -0.077707   0.327831   0.1196407   0.0006901   0.000177   0.000217   0.000095   0.000097  0.0000158  0.0000095    0.000070    0.000056
+2000  11  27  51875  -0.078426   0.329837   0.1190223   0.0005545   0.000175   0.000245   0.000089   0.000092  0.0000195  0.0000090    0.000060    0.000047
+2000  11  28  51876  -0.079060   0.331688   0.1185282   0.0004907   0.000200   0.000207   0.000086   0.000087  0.0000197  0.0000085    0.000051    0.000038
+2000  11  29  51877  -0.079289   0.333492   0.1180552   0.0005043   0.000260   0.000088   0.000085   0.000087  0.0000055  0.0000084    0.000112    0.000090
+2000  11  30  51878  -0.079565   0.335339   0.1175145   0.0005694   0.000325  -0.000024   0.000085   0.000087  0.0000129  0.0000086    0.000119    0.000096
+2000  12   1  51879  -0.080043   0.337116   0.1169279   0.0006201   0.000373  -0.000102   0.000087   0.000088  0.0000247  0.0000083    0.000101    0.000081
+2000  12   2  51880  -0.080636   0.338897   0.1162864   0.0007339   0.000383  -0.000134   0.000091   0.000092  0.0000234  0.0000084    0.000083    0.000066
+2000  12   3  51881  -0.080808   0.340609   0.1154763   0.0008908   0.000346  -0.000121   0.000098   0.000098  0.0000159  0.0000089    0.000064    0.000051
+2000  12   4  51882  -0.080941   0.342247   0.1144963   0.0010269   0.000271  -0.000078   0.000101   0.000102  0.0000085  0.0000091    0.000046    0.000036
+2000  12   5  51883  -0.081209   0.343982   0.1134046   0.0011335   0.000186  -0.000025   0.000091   0.000092  0.0000011  0.0000089    0.000028    0.000021
+2000  12   6  51884  -0.081790   0.345579   0.1122283   0.0012436   0.000075  -0.000001   0.000089   0.000088  0.0000014  0.0000087    0.000108    0.000077
+2000  12   7  51885  -0.082312   0.347252   0.1109197   0.0013393   0.000085   0.000029   0.000094   0.000093  0.0000315  0.0000085    0.000150    0.000195
+2000  12   8  51886  -0.082820   0.349203   0.1096010   0.0013215   0.000238   0.000056   0.000095   0.000095  0.0000445  0.0000084    0.000113    0.000127
+2000  12   9  51887  -0.083330   0.351145   0.1083518   0.0012314   0.000340   0.000022   0.000097   0.000097  0.0000368  0.0000084    0.000102    0.000110
+2000  12  10  51888  -0.083738   0.352870   0.1071854   0.0011097   0.000417  -0.000023   0.000109   0.000107  0.0000411  0.0000085    0.000091    0.000093
+2000  12  11  51889  -0.083732   0.354150   0.1061499   0.0009440   0.000442  -0.000054   0.000118   0.000117  0.0000454  0.0000083    0.000080    0.000076
+2000  12  12  51890  -0.083570   0.355655   0.1052885   0.0007741   0.000415  -0.000049   0.000113   0.000114  0.0000425  0.0000082    0.000069    0.000059
+2000  12  13  51891  -0.082637   0.357139   0.1045843   0.0006786   0.000306   0.000047   0.000110   0.000111  0.0000102  0.0000080    0.000110    0.000093
+2000  12  14  51892  -0.081391   0.359312   0.1039410   0.0006735   0.000277   0.000105   0.000108   0.000108  0.0000013  0.0000077    0.000105    0.000095
+2000  12  15  51893  -0.080171   0.361370   0.1032444   0.0007305   0.000212   0.000184   0.000108   0.000109  0.0000091  0.0000075    0.000100    0.000094
+2000  12  16  51894  -0.079062   0.363635   0.1024565   0.0008108   0.000125   0.000262   0.000112   0.000114  0.0000169  0.0000075    0.000101    0.000099
+2000  12  17  51895  -0.078151   0.365830   0.1015987   0.0009015   0.000056   0.000297   0.000128   0.000130  0.0000121  0.0000077    0.000102    0.000103
+2000  12  18  51896  -0.077796   0.368185   0.1006885   0.0009613   0.000030   0.000267   0.000133   0.000135  0.0000073  0.0000079    0.000103    0.000108
+2000  12  19  51897  -0.078217   0.369895   0.0997410   0.0009657   0.000060   0.000166   0.000128   0.000128  0.0000024  0.0000079    0.000104    0.000112
+2000  12  20  51898  -0.078566   0.371779   0.0987938   0.0009210   0.000177  -0.000016   0.000129   0.000129  0.0000020  0.0000078    0.000107    0.000091
+2000  12  21  51899  -0.078727   0.374034   0.0979220   0.0008061   0.000286  -0.000193   0.000131   0.000130  0.0000108  0.0000077    0.000109    0.000088
+2000  12  22  51900  -0.078430   0.376478   0.0972020   0.0006711   0.000363  -0.000335   0.000134   0.000134  0.0000258  0.0000080    0.000113    0.000092
+2000  12  23  51901  -0.077997   0.379193   0.0966480   0.0005542   0.000394  -0.000422   0.000141   0.000140  0.0000465  0.0000082    0.000115    0.000096
+2000  12  24  51902  -0.077551   0.381672   0.0962030   0.0004367   0.000376  -0.000445   0.000149   0.000144  0.0000381  0.0000084    0.000119    0.000099
+2000  12  25  51903  -0.077102   0.384316   0.0958166   0.0003317   0.000324  -0.000414   0.000148   0.000144  0.0000297  0.0000088    0.000122    0.000103
+2000  12  26  51904  -0.076553   0.386626   0.0954698   0.0002644   0.000262  -0.000348   0.000145   0.000143  0.0000213  0.0000088    0.000125    0.000107
+2000  12  27  51905  -0.076262   0.388942   0.0951663   0.0002441   0.000213  -0.000269   0.000144   0.000142  0.0000129  0.0000083    0.000128    0.000111
+2000  12  28  51906  -0.076043   0.390932   0.0949008   0.0002589   0.000190  -0.000195   0.000142   0.000140  0.0000046  0.0000078    0.000131    0.000115
+2000  12  29  51907  -0.075424   0.392828   0.0946354   0.0003103   0.000198  -0.000139   0.000141   0.000138  0.0000160  0.0000075    0.000127    0.000110
+2000  12  30  51908  -0.074842   0.394715   0.0943016   0.0004139   0.000220  -0.000100   0.000146   0.000140  0.0000291  0.0000074    0.000121    0.000103
+2000  12  31  51909  -0.074274   0.396467   0.0938387   0.0005602   0.000240  -0.000077   0.000143   0.000142  0.0000225  0.0000072    0.000115    0.000096
+2001   1   1  51910  -0.073472   0.398135   0.0932292   0.0006649   0.000240  -0.000066   0.000130   0.000133  0.0000160  0.0000072    0.000109    0.000089
+2001   1   2  51911  -0.072640   0.399802   0.0924924   0.0007638   0.000218  -0.000068   0.000124   0.000127  0.0000094  0.0000074    0.000103    0.000082
+2001   1   3  51912  -0.071549   0.401814   0.0916637   0.0008557   0.000181  -0.000081   0.000121   0.000121  0.0000029  0.0000077    0.000097    0.000075
+2001   1   4  51913  -0.071047   0.403720   0.0907792   0.0009020   0.000145  -0.000109   0.000122   0.000122  0.0000126  0.0000079    0.000096    0.000076
+2001   1   5  51914  -0.070716   0.405264   0.0898754   0.0008820   0.000129  -0.000143   0.000127   0.000128  0.0000276  0.0000082    0.000097    0.000080
+2001   1   6  51915  -0.070383   0.406694   0.0890198   0.0008021   0.000146  -0.000177   0.000128   0.000128  0.0000372  0.0000082    0.000097    0.000084
+2001   1   7  51916  -0.070072   0.408059   0.0882966   0.0006472   0.000193  -0.000200   0.000131   0.000132  0.0000258  0.0000079    0.000097    0.000088
+2001   1   8  51917  -0.070203   0.409493   0.0877176   0.0004916   0.000249  -0.000207   0.000130   0.000133  0.0000144  0.0000075    0.000098    0.000092
+2001   1   9  51918  -0.070174   0.410820   0.0872401   0.0004382   0.000278  -0.000205   0.000125   0.000127  0.0000029  0.0000074    0.000098    0.000096
+2001   1  10  51919  -0.069863   0.412364   0.0868097   0.0004149   0.000296  -0.000196   0.000123   0.000124  0.0000016  0.0000075    0.000096    0.000081
+2001   1  11  51920  -0.069294   0.414033   0.0863912   0.0004537   0.000146  -0.000217   0.000123   0.000124  0.0000013  0.0000075    0.000109    0.000099
+2001   1  12  51921  -0.068449   0.416159   0.0858993   0.0005918  -0.000061  -0.000310   0.000124   0.000127  0.0000107  0.0000074    0.000113    0.000102
+2001   1  13  51922  -0.067456   0.418225   0.0852398   0.0007461  -0.000258  -0.000442   0.000132   0.000136  0.0000201  0.0000078    0.000111    0.000096
+2001   1  14  51923  -0.066448   0.420156   0.0843885   0.0008784  -0.000385  -0.000558   0.000130   0.000133  0.0000157  0.0000080    0.000111    0.000090
+2001   1  15  51924  -0.065366   0.422039   0.0834209   0.0009395  -0.000386  -0.000600   0.000116   0.000119  0.0000112  0.0000078    0.000110    0.000084
+2001   1  16  51925  -0.064000   0.423523   0.0824681   0.0009124  -0.000237  -0.000529   0.000112   0.000115  0.0000067  0.0000078    0.000109    0.000078
+2001   1  17  51926  -0.062625   0.425095   0.0816440   0.0007758   0.000032  -0.000352   0.000109   0.000111  0.0000023  0.0000077    0.000108    0.000072
+2001   1  18  51927  -0.061464   0.426419   0.0809933   0.0005727   0.000444  -0.000046   0.000106   0.000106  0.0000100  0.0000077    0.000111    0.000086
+2001   1  19  51928  -0.060299   0.427982   0.0804913   0.0004021   0.000695   0.000169   0.000110   0.000111  0.0000225  0.0000077    0.000107    0.000089
+2001   1  20  51929  -0.059198   0.429305   0.0801274   0.0002551   0.000732   0.000236   0.000118   0.000119  0.0000327  0.0000078    0.000099    0.000083
+2001   1  21  51930  -0.058086   0.430408   0.0799407   0.0000798   0.000626   0.000182   0.000118   0.000118  0.0000228  0.0000080    0.000091    0.000077
+2001   1  22  51931  -0.056733   0.431217   0.0799247  -0.0000380   0.000444   0.000048   0.000109   0.000108  0.0000129  0.0000081    0.000082    0.000071
+2001   1  23  51932  -0.055322   0.432542   0.0800129  -0.0000702   0.000265  -0.000108   0.000107   0.000105  0.0000030  0.0000086    0.000074    0.000065
+2001   1  24  51933  -0.054023   0.434316   0.0801043  -0.0000511   0.000217  -0.000180   0.000108   0.000107  0.0000016  0.0000090    0.000097    0.000087
+2001   1  25  51934  -0.052217   0.436044   0.0801109   0.0000485   0.000167  -0.000262   0.000107   0.000107  0.0000013  0.0000088    0.000106    0.000091
+2001   1  26  51935  -0.050441   0.437996   0.0800062   0.0001770   0.000090  -0.000324   0.000107   0.000105  0.0000272  0.0000084    0.000094    0.000079
+2001   1  27  51936  -0.049110   0.439784   0.0797680   0.0002961   0.000015  -0.000351   0.000112   0.000111  0.0000524  0.0000083    0.000078    0.000066
+2001   1  28  51937  -0.047525   0.441587   0.0793772   0.0004515  -0.000029  -0.000348   0.000120   0.000119  0.0000355  0.0000083    0.000062    0.000052
+2001   1  29  51938  -0.045528   0.443481   0.0788594   0.0005584  -0.000012  -0.000312   0.000120   0.000118  0.0000187  0.0000079    0.000045    0.000038
+2001   1  30  51939  -0.043687   0.444913   0.0782764   0.0005977   0.000077  -0.000246   0.000107   0.000108  0.0000018  0.0000079    0.000029    0.000024
+2001   1  31  51940  -0.042020   0.446382   0.0777007   0.0005421   0.000272  -0.000153   0.000111   0.000112  0.0000011  0.0000079    0.000092    0.000075
+2001   2   1  51941  -0.040691   0.447232   0.0771894   0.0004673   0.000425  -0.000067   0.000121   0.000120  0.0000075  0.0000078    0.000108    0.000087
+2001   2   2  51942  -0.039000   0.448056   0.0767753   0.0003683   0.000511  -0.000006   0.000117   0.000116  0.0000190  0.0000077    0.000105    0.000084
+2001   2   3  51943  -0.037685   0.448840   0.0764819   0.0002105   0.000522   0.000016   0.000119   0.000118  0.0000370  0.0000077    0.000102    0.000081
+2001   2   4  51944  -0.036054   0.449536   0.0763270   0.0000702   0.000468  -0.000002   0.000125   0.000124  0.0000259  0.0000082    0.000099    0.000078
+2001   2   5  51945  -0.034031   0.450485   0.0762889  -0.0000011   0.000378  -0.000053   0.000126   0.000128  0.0000147  0.0000085    0.000097    0.000075
+2001   2   6  51946  -0.032100   0.451808   0.0762842   0.0000434   0.000289  -0.000116   0.000121   0.000123  0.0000036  0.0000083    0.000094    0.000072
+2001   2   7  51947  -0.030369   0.453143   0.0761779   0.0002141   0.000225  -0.000198   0.000119   0.000119  0.0000016  0.0000081    0.000119    0.000093
+2001   2   8  51948  -0.028421   0.454715   0.0758341   0.0004657   0.000214  -0.000206   0.000117   0.000117  0.0000012  0.0000079    0.000099    0.000082
+2001   2   9  51949  -0.026556   0.456387   0.0751951   0.0007352   0.000189  -0.000199   0.000117   0.000119  0.0000144  0.0000079    0.000090    0.000076
+2001   2  10  51950  -0.024722   0.457675   0.0743206   0.0009633   0.000148  -0.000192   0.000128   0.000130  0.0000274  0.0000080    0.000090    0.000076
+2001   2  11  51951  -0.023382   0.459171   0.0733052   0.0010824   0.000105  -0.000185   0.000144   0.000145  0.0000190  0.0000081    0.000090    0.000076
+2001   2  12  51952  -0.022405   0.459867   0.0721970   0.0011275   0.000073  -0.000178   0.000145   0.000149  0.0000107  0.0000080    0.000091    0.000076
+2001   2  13  51953  -0.020845   0.460773   0.0710390   0.0011204   0.000061  -0.000158   0.000133   0.000137  0.0000023  0.0000078    0.000091    0.000076
+2001   2  14  51954  -0.019265   0.462082   0.0699199   0.0010201   0.000103  -0.000154   0.000126   0.000130  0.0000015  0.0000077    0.000104    0.000080
+2001   2  15  51955  -0.017606   0.463385   0.0689742   0.0008707   0.000131  -0.000034   0.000124   0.000130  0.0000039  0.0000077    0.000163    0.000165
+2001   2  16  51956  -0.015935   0.464781   0.0681255   0.0007328   0.000147   0.000079   0.000126   0.000131  0.0000129  0.0000076    0.000183    0.000187
+2001   2  17  51957  -0.014018   0.466024   0.0673597   0.0006153   0.000164   0.000151   0.000132   0.000136  0.0000208  0.0000077    0.000181    0.000176
+2001   2  18  51958  -0.012285   0.467268   0.0667353   0.0005654   0.000191   0.000168   0.000126   0.000128  0.0000152  0.0000077    0.000180    0.000165
+2001   2  19  51959  -0.010511   0.468372   0.0661923   0.0005676   0.000232   0.000128   0.000113   0.000114  0.0000096  0.0000076    0.000179    0.000153
+2001   2  20  51960  -0.008296   0.469476   0.0656213   0.0006102   0.000270   0.000053   0.000109   0.000110  0.0000040  0.0000077    0.000178    0.000142
+2001   2  21  51961  -0.005512   0.470937   0.0649651   0.0006495   0.000343  -0.000055   0.000109   0.000111  0.0000021  0.0000078    0.000121    0.000097
+2001   2  22  51962  -0.002318   0.472197   0.0642684   0.0007252   0.000270  -0.000084   0.000106   0.000108  0.0000011  0.0000079    0.000093    0.000074
+2001   2  23  51963   0.001039   0.474119   0.0634734   0.0008643   0.000107  -0.000058   0.000108   0.000110  0.0000097  0.0000081    0.000098    0.000075
+2001   2  24  51964   0.004073   0.475879   0.0625094   0.0010232  -0.000084  -0.000011   0.000115   0.000118  0.0000191  0.0000082    0.000112    0.000082
+2001   2  25  51965   0.006868   0.477557   0.0613677   0.0011918  -0.000238   0.000019   0.000115   0.000118  0.0000177  0.0000084    0.000127    0.000089
+2001   2  26  51966   0.009470   0.478863   0.0600735   0.0013578  -0.000293  -0.000004   0.000108   0.000111  0.0000164  0.0000084    0.000140    0.000096
+2001   2  27  51967   0.012011   0.480196   0.0586721   0.0014557  -0.000224  -0.000090   0.000103   0.000107  0.0000134  0.0000086    0.000154    0.000103
+2001   2  28  51968   0.014343   0.481211   0.0572139   0.0014576   0.000027  -0.000265   0.000102   0.000106  0.0000043  0.0000089    0.000121    0.000096
+2001   3   1  51969   0.016226   0.482317   0.0557613   0.0013799   0.000228  -0.000383   0.000099   0.000104  0.0000118  0.0000088    0.000103    0.000088
+2001   3   2  51970   0.017242   0.482825   0.0544303   0.0012362   0.000345  -0.000426   0.000100   0.000104  0.0000215  0.0000084    0.000095    0.000082
+2001   3   3  51971   0.018500   0.483352   0.0532772   0.0011056   0.000378  -0.000401   0.000103   0.000106  0.0000180  0.0000082    0.000087    0.000075
+2001   3   4  51972   0.020333   0.483910   0.0522394   0.0010075   0.000341  -0.000329   0.000109   0.000110  0.0000126  0.0000083    0.000079    0.000069
+2001   3   5  51973   0.022687   0.484671   0.0512777   0.0009344   0.000268  -0.000248   0.000110   0.000112  0.0000073  0.0000084    0.000070    0.000062
+2001   3   6  51974   0.024494   0.485404   0.0503440   0.0009578   0.000197  -0.000192   0.000103   0.000105  0.0000019  0.0000082    0.000062    0.000056
+2001   3   7  51975   0.026453   0.485540   0.0493423   0.0011173   0.000184  -0.000211   0.000100   0.000101  0.0000014  0.0000080    0.000121    0.000095
+2001   3   8  51976   0.028743   0.485675   0.0481255   0.0013205   0.000154  -0.000221   0.000104   0.000103  0.0000013  0.0000080    0.000107    0.000084
+2001   3   9  51977   0.031128   0.485598   0.0466939   0.0015275   0.000146  -0.000227   0.000106   0.000104  0.0000085  0.0000079    0.000084    0.000068
+2001   3  10  51978   0.033384   0.485457   0.0451293   0.0016333   0.000156  -0.000229   0.000110   0.000108  0.0000157  0.0000079    0.000070    0.000057
+2001   3  11  51979   0.035575   0.485617   0.0435097   0.0016401   0.000166  -0.000224   0.000108   0.000105  0.0000107  0.0000080    0.000056    0.000047
+2001   3  12  51980   0.038026   0.485670   0.0419177   0.0015395   0.000166  -0.000214   0.000100   0.000100  0.0000058  0.0000078    0.000042    0.000037
+2001   3  13  51981   0.040986   0.485851   0.0404506   0.0013387   0.000156  -0.000203   0.000089   0.000090  0.0000009  0.0000078    0.000028    0.000027
+2001   3  14  51982   0.043880   0.486198   0.0392174   0.0010917   0.000118  -0.000207   0.000090   0.000089  0.0000012  0.0000076    0.000084    0.000066
+2001   3  15  51983   0.046455   0.486616   0.0383017   0.0008282   0.000119  -0.000190   0.000097   0.000095  0.0000113  0.0000075    0.000099    0.000075
+2001   3  16  51984   0.048670   0.486688   0.0376010   0.0006412   0.000149  -0.000164   0.000096   0.000095  0.0000201  0.0000076    0.000098    0.000073
+2001   3  17  51985   0.051051   0.487249   0.0369914   0.0005325   0.000190  -0.000141   0.000101   0.000098  0.0000125  0.0000075    0.000097    0.000070
+2001   3  18  51986   0.053578   0.487501   0.0364868   0.0004545   0.000223  -0.000134   0.000104   0.000100  0.0000090  0.0000075    0.000097    0.000068
+2001   3  19  51987   0.056332   0.487927   0.0360629   0.0004238   0.000230  -0.000151   0.000102   0.000098  0.0000055  0.0000076    0.000096    0.000065
+2001   3  20  51988   0.059118   0.488602   0.0356496   0.0004596   0.000210  -0.000185   0.000098   0.000094  0.0000020  0.0000076    0.000095    0.000063
+2001   3  21  51989   0.061700   0.489097   0.0351654   0.0005434   0.000118  -0.000272   0.000096   0.000092  0.0000019  0.0000078    0.000161    0.000124
+2001   3  22  51990   0.064561   0.489235   0.0345710   0.0006455   0.000122  -0.000272   0.000101   0.000096  0.0000013  0.0000078    0.000115    0.000089
+2001   3  23  51991   0.067348   0.489619   0.0338844   0.0007452   0.000136  -0.000275   0.000104   0.000100  0.0000083  0.0000077    0.000093    0.000073
+2001   3  24  51992   0.070268   0.490170   0.0330955   0.0008443   0.000140  -0.000287   0.000108   0.000103  0.0000153  0.0000078    0.000094    0.000075
+2001   3  25  51993   0.073356   0.490646   0.0321738   0.0009687   0.000131  -0.000296   0.000116   0.000108  0.0000110  0.0000080    0.000095    0.000077
+2001   3  26  51994   0.076359   0.491037   0.0311327   0.0010798   0.000097  -0.000299   0.000118   0.000108  0.0000066  0.0000078    0.000096    0.000079
+2001   3  27  51995   0.079205   0.491296   0.0300312   0.0010954   0.000042  -0.000295   0.000113   0.000105  0.0000023  0.0000077    0.000097    0.000081
+2001   3  28  51996   0.081755   0.491313   0.0289474   0.0010336  -0.000021  -0.000264   0.000110   0.000103  0.0000013  0.0000078    0.000101    0.000085
+2001   3  29  51997   0.084060   0.491207   0.0279398   0.0009317  -0.000071  -0.000248   0.000110   0.000103  0.0000015  0.0000080    0.000105    0.000092
+2001   3  30  51998   0.086315   0.491080   0.0270519   0.0008201  -0.000058  -0.000228   0.000113   0.000106  0.0000048  0.0000083    0.000109    0.000092
+2001   3  31  51999   0.088581   0.490434   0.0262799   0.0007103   0.000002  -0.000206   0.000119   0.000112  0.0000080  0.0000084    0.000114    0.000091
+2001   4   1  52000   0.090638   0.489890   0.0255821   0.0006471   0.000073  -0.000195   0.000114   0.000109  0.0000061  0.0000084    0.000119    0.000089
+2001   4   2  52001   0.092737   0.489289   0.0249092   0.0006564   0.000124  -0.000199   0.000106   0.000103  0.0000043  0.0000083    0.000123    0.000088
+2001   4   3  52002   0.094806   0.488997   0.0241941   0.0007449   0.000137  -0.000227   0.000102   0.000099  0.0000024  0.0000081    0.000128    0.000086
+2001   4   4  52003   0.096916   0.488394   0.0233503   0.0009312   0.000040  -0.000261   0.000099   0.000097  0.0000017  0.0000084    0.000103    0.000086
+2001   4   5  52004   0.099134   0.487461   0.0222918   0.0011549   0.000045  -0.000342   0.000099   0.000097  0.0000013  0.0000085    0.000103    0.000087
+2001   4   6  52005   0.101569   0.486809   0.0210325   0.0013462   0.000048  -0.000392   0.000100   0.000099  0.0000036  0.0000084    0.000093    0.000077
+2001   4   7  52006   0.104305   0.486579   0.0196181   0.0014775   0.000041  -0.000399   0.000103   0.000101  0.0000058  0.0000084    0.000078    0.000064
+2001   4   8  52007   0.106731   0.486478   0.0181285   0.0014593   0.000036  -0.000369   0.000102   0.000099  0.0000041  0.0000083    0.000062    0.000051
+2001   4   9  52008   0.108469   0.485905   0.0167115   0.0012858   0.000024  -0.000315   0.000099   0.000097  0.0000024  0.0000079    0.000046    0.000038
+2001   4  10  52009   0.110496   0.484949   0.0155032   0.0010632   0.000005  -0.000257   0.000089   0.000090  0.0000007  0.0000079    0.000031    0.000024
+2001   4  11  52010   0.112981   0.484061   0.0145570   0.0008208  -0.000009  -0.000222   0.000087   0.000089  0.0000011  0.0000079    0.000073    0.000068
+2001   4  12  52011   0.115916   0.483302   0.0138212   0.0006183  -0.000043  -0.000203   0.000094   0.000094  0.0000149  0.0000079    0.000083    0.000077
+2001   4  13  52012   0.118630   0.482959   0.0132913   0.0004387  -0.000078  -0.000203   0.000093   0.000093  0.0000281  0.0000079    0.000078    0.000072
+2001   4  14  52013   0.120928   0.482197   0.0129429   0.0003128  -0.000096  -0.000219   0.000093   0.000094  0.0000211  0.0000077    0.000072    0.000066
+2001   4  15  52014   0.123752   0.481227   0.0126447   0.0003065  -0.000085  -0.000245   0.000092   0.000092  0.0000148  0.0000077    0.000067    0.000060
+2001   4  16  52015   0.126567   0.480446   0.0122969   0.0003878  -0.000045  -0.000271   0.000088   0.000089  0.0000084  0.0000076    0.000062    0.000054
+2001   4  17  52016   0.129683   0.479426   0.0118367   0.0005398   0.000006  -0.000289   0.000081   0.000084  0.0000021  0.0000075    0.000057    0.000049
+2001   4  18  52017   0.132953   0.478718   0.0112257   0.0007086   0.000105  -0.000302   0.000083   0.000087  0.0000013  0.0000075    0.000086    0.000075
+2001   4  19  52018   0.136329   0.478227   0.0104306   0.0008589   0.000051  -0.000273   0.000083   0.000086  0.0000012  0.0000076    0.000097    0.000083
+2001   4  20  52019   0.139490   0.477809   0.0095287   0.0009571  -0.000028  -0.000242   0.000080   0.000082  0.0000128  0.0000075    0.000097    0.000081
+2001   4  21  52020   0.142393   0.477022   0.0085662   0.0010188  -0.000097  -0.000217   0.000085   0.000087  0.0000246  0.0000077    0.000094    0.000080
+2001   4  22  52021   0.144997   0.476159   0.0075558   0.0010286  -0.000147  -0.000200   0.000090   0.000092  0.0000200  0.0000080    0.000092    0.000079
+2001   4  23  52022   0.147402   0.475449   0.0065669   0.0009523  -0.000160  -0.000189   0.000088   0.000090  0.0000155  0.0000078    0.000090    0.000077
+2001   4  24  52023   0.149377   0.474815   0.0056642   0.0008686  -0.000137  -0.000184   0.000083   0.000085  0.0000103  0.0000076    0.000088    0.000076
+2001   4  25  52024   0.151128   0.473810   0.0048439   0.0008230  -0.000092  -0.000177   0.000081   0.000083  0.0000030  0.0000075    0.000086    0.000075
+2001   4  26  52025   0.153560   0.472384   0.0040552   0.0007335  -0.000051  -0.000167   0.000083   0.000085  0.0000139  0.0000076    0.000086    0.000075
+2001   4  27  52026   0.155834   0.471225   0.0033755   0.0006107  -0.000027  -0.000158   0.000085   0.000088  0.0000265  0.0000076    0.000086    0.000075
+2001   4  28  52027   0.157896   0.469639   0.0028310   0.0005411  -0.000022  -0.000156   0.000087   0.000089  0.0000224  0.0000079    0.000087    0.000076
+2001   4  29  52028   0.159668   0.468194   0.0022593   0.0005824  -0.000030  -0.000165   0.000093   0.000095  0.0000216  0.0000081    0.000088    0.000076
+2001   4  30  52029   0.161471   0.466416   0.0015600   0.0007495  -0.000036  -0.000187   0.000095   0.000099  0.0000208  0.0000079    0.000088    0.000077
+2001   5   1  52030   0.163387   0.464499   0.0006996   0.0009410  -0.000031  -0.000215   0.000094   0.000097  0.0000183  0.0000077    0.000089    0.000078
+2001   5   2  52031   0.165151   0.462674  -0.0003380   0.0011330  -0.000014  -0.000236   0.000090   0.000093  0.0000049  0.0000075    0.000090    0.000078
+2001   5   3  52032   0.167198   0.461366  -0.0015879   0.0013264   0.000031  -0.000261   0.000086   0.000089  0.0000013  0.0000075    0.000099    0.000086
+2001   5   4  52033   0.169542   0.460287  -0.0030443   0.0014907   0.000026  -0.000231   0.000089   0.000092  0.0000119  0.0000075    0.000109    0.000095
+2001   5   5  52034   0.171764   0.458630  -0.0046085   0.0015628  -0.000027  -0.000173   0.000091   0.000094  0.0000223  0.0000075    0.000119    0.000103
+2001   5   6  52035   0.173684   0.456706  -0.0061385   0.0014685  -0.000103  -0.000126   0.000087   0.000089  0.0000161  0.0000076    0.000128    0.000112
+2001   5   7  52036   0.175734   0.454575  -0.0075314   0.0012751  -0.000177  -0.000117   0.000082   0.000084  0.0000098  0.0000076    0.000138    0.000121
+2001   5   8  52037   0.178453   0.452336  -0.0087369   0.0010780  -0.000221  -0.000153   0.000080   0.000082  0.0000036  0.0000077    0.000147    0.000130
+2001   5   9  52038   0.181193   0.450185  -0.0097410   0.0008775  -0.000194  -0.000316   0.000080   0.000083  0.0000015  0.0000079    0.000094    0.000088
+2001   5  10  52039   0.183890   0.448016  -0.0105414   0.0006976  -0.000151  -0.000317   0.000078   0.000081  0.0000008  0.0000079    0.000047    0.000040
+2001   5  11  52040   0.186504   0.445842  -0.0111895   0.0005970  -0.000094  -0.000298   0.000077   0.000081  0.0000084  0.0000077    0.000046    0.000036
+2001   5  12  52041   0.189208   0.444164  -0.0117577   0.0005704  -0.000036  -0.000286   0.000081   0.000086  0.0000161  0.0000075    0.000058    0.000046
+2001   5  13  52042   0.191399   0.442664  -0.0123193   0.0005950   0.000007  -0.000282   0.000084   0.000089  0.0000115  0.0000073    0.000070    0.000056
+2001   5  14  52043   0.193311   0.440929  -0.0129501   0.0006851   0.000026  -0.000300   0.000084   0.000088  0.0000069  0.0000071    0.000083    0.000067
+2001   5  15  52044   0.194963   0.438771  -0.0136995   0.0008137   0.000012  -0.000331   0.000080   0.000085  0.0000023  0.0000072    0.000095    0.000077
+2001   5  16  52045   0.196814   0.436454  -0.0145740   0.0009352  -0.000025  -0.000381   0.000080   0.000083  0.0000015  0.0000072    0.000096    0.000087
+2001   5  17  52046   0.198640   0.433772  -0.0155394   0.0010422  -0.000109  -0.000378   0.000080   0.000083  0.0000012  0.0000072    0.000087    0.000079
+2001   5  18  52047   0.200838   0.430864  -0.0165998   0.0011300  -0.000203  -0.000298   0.000080   0.000083  0.0000037  0.0000073    0.000114    0.000104
+2001   5  19  52048   0.203241   0.428105  -0.0177336   0.0011698  -0.000287  -0.000190   0.000084   0.000087  0.0000063  0.0000073    0.000155    0.000145
+2001   5  20  52049   0.205217   0.425340  -0.0188748   0.0011447  -0.000351  -0.000133   0.000090   0.000093  0.0000048  0.0000074    0.000140    0.000128
+2001   5  21  52050   0.206953   0.422665  -0.0199547   0.0010457  -0.000359  -0.000121   0.000091   0.000095  0.0000033  0.0000072    0.000119    0.000106
+2001   5  22  52051   0.208880   0.420326  -0.0209088   0.0008940  -0.000299  -0.000144   0.000090   0.000093  0.0000019  0.0000075    0.000099    0.000084
+2001   5  23  52052   0.210539   0.418228  -0.0216834   0.0006790  -0.000146  -0.000200   0.000088   0.000091  0.0000012  0.0000080    0.000083    0.000074
+2001   5  24  52053   0.211954   0.415694  -0.0222446   0.0004741  -0.000006  -0.000194   0.000089   0.000092  0.0000015  0.0000080    0.000091    0.000087
+2001   5  25  52054   0.213383   0.413279  -0.0226059   0.0003016   0.000097  -0.000143   0.000090   0.000093  0.0000020  0.0000077    0.000108    0.000106
+2001   5  26  52055   0.214689   0.410533  -0.0228334   0.0001929   0.000162  -0.000097   0.000092   0.000094  0.0000020  0.0000077    0.000107    0.000105
+2001   5  27  52056   0.215945   0.407510  -0.0230237   0.0001902   0.000170  -0.000068   0.000104   0.000106  0.0000019  0.0000119    0.000106    0.000103
+2001   5  28  52057   0.217377   0.404626  -0.0232714   0.0002942   0.000122  -0.000071   0.000114   0.000114  0.0000019  0.0000151    0.000104    0.000101
+2001   5  29  52058   0.219080   0.401974  -0.0236390   0.0004512   0.000034  -0.000115   0.000113   0.000114  0.0000018  0.0000144    0.000102    0.000099
+2001   5  30  52059   0.221022   0.399338  -0.0241422   0.0005670  -0.000074  -0.000189   0.000110   0.000112  0.0000018  0.0000141    0.000101    0.000097
+2001   5  31  52060   0.222906   0.396795  -0.0247516   0.0006291  -0.000182  -0.000289   0.000106   0.000107  0.0000013  0.0000139    0.000106    0.000093
+2001   6   1  52061   0.224490   0.394193  -0.0254055   0.0006326  -0.000262  -0.000348   0.000110   0.000110  0.0000012  0.0000138    0.000109    0.000094
+2001   6   2  52062   0.225873   0.391492  -0.0260242   0.0005766  -0.000299  -0.000363   0.000115   0.000115  0.0000013  0.0000143    0.000109    0.000097
+2001   6   3  52063   0.227348   0.388590  -0.0265243   0.0004092  -0.000290  -0.000350   0.000105   0.000108  0.0000014  0.0000146    0.000108    0.000099
+2001   6   4  52064   0.228771   0.385699  -0.0268353   0.0001800  -0.000240  -0.000324   0.000088   0.000092  0.0000015  0.0000135    0.000108    0.000102
+2001   6   5  52065   0.230514   0.382722  -0.0269152  -0.0000293  -0.000162  -0.000294   0.000083   0.000087  0.0000016  0.0000130    0.000108    0.000104
+2001   6   6  52066   0.232499   0.380078  -0.0267612  -0.0002457  -0.000082  -0.000315   0.000083   0.000087  0.0000014  0.0000132    0.000093    0.000086
+2001   6   7  52067   0.234464   0.377418  -0.0264128  -0.0004197   0.000010  -0.000253   0.000081   0.000087  0.0000088  0.0000130    0.000154    0.000125
+2001   6   8  52068   0.236522   0.374864  -0.0259404  -0.0005069   0.000065  -0.000169   0.000085   0.000090  0.0000168  0.0000129    0.000171    0.000135
+2001   6   9  52069   0.238005   0.372650  -0.0254397  -0.0004989   0.000075  -0.000099   0.000087   0.000092  0.0000165  0.0000134    0.000156    0.000121
+2001   6  10  52070   0.239208   0.370215  -0.0250096  -0.0003947   0.000049  -0.000063   0.000086   0.000091  0.0000122  0.0000140    0.000141    0.000108
+2001   6  11  52071   0.240208   0.367568  -0.0247035  -0.0002387   0.000000  -0.000082   0.000086   0.000090  0.0000079  0.0000136    0.000126    0.000095
+2001   6  12  52072   0.241085   0.364736  -0.0245360  -0.0001139  -0.000060  -0.000152   0.000086   0.000088  0.0000035  0.0000135    0.000111    0.000082
+2001   6  13  52073   0.242040   0.361720  -0.0245002   0.0000095  -0.000146  -0.000306   0.000087   0.000090  0.0000020  0.0000137    0.000111    0.000097
+2001   6  14  52074   0.243257   0.358583  -0.0245867   0.0000903  -0.000162  -0.000356   0.000086   0.000088  0.0000014  0.0000134    0.000101    0.000095
+2001   6  15  52075   0.244879   0.355436  -0.0247272   0.0001328  -0.000261  -0.000383   0.000086   0.000087  0.0000066  0.0000133    0.000092    0.000090
+2001   6  16  52076   0.246352   0.352460  -0.0248864   0.0001792  -0.000408  -0.000384   0.000091   0.000093  0.0000124  0.0000140    0.000085    0.000087
+2001   6  17  52077   0.247364   0.349696  -0.0250719   0.0002025  -0.000525  -0.000345   0.000097   0.000099  0.0000123  0.0000144    0.000078    0.000084
+2001   6  18  52078   0.248272   0.346689  -0.0252635   0.0001654  -0.000553  -0.000271   0.000096   0.000098  0.0000123  0.0000136    0.000070    0.000081
+2001   6  19  52079   0.248636   0.343719  -0.0254059   0.0000758  -0.000459  -0.000180   0.000094   0.000095  0.0000107  0.0000132    0.000063    0.000078
+2001   6  20  52080   0.248393   0.340881  -0.0254353  -0.0000535  -0.000164  -0.000056   0.000093   0.000093  0.0000035  0.0000137    0.000108    0.000099
+2001   6  21  52081   0.248357   0.337827  -0.0253304  -0.0001397   0.000060  -0.000006   0.000094   0.000095  0.0000015  0.0000141    0.000096    0.000082
+2001   6  22  52082   0.248525   0.335053  -0.0251612  -0.0001569   0.000193   0.000021   0.000095   0.000097  0.0000095  0.0000140    0.000095    0.000078
+2001   6  23  52083   0.248737   0.332004  -0.0249983  -0.0001679   0.000215   0.000022   0.000097   0.000097  0.0000171  0.0000142    0.000104    0.000084
+2001   6  24  52084   0.249023   0.328938  -0.0248961  -0.0000950   0.000140   0.000000   0.000109   0.000107  0.0000123  0.0000145    0.000113    0.000090
+2001   6  25  52085   0.249569   0.325933  -0.0249276   0.0000901   0.000018  -0.000033   0.000115   0.000114  0.0000074  0.0000139    0.000122    0.000095
+2001   6  26  52086   0.250536   0.322761  -0.0251603   0.0003337  -0.000085  -0.000057   0.000110   0.000109  0.0000026  0.0000134    0.000132    0.000101
+2001   6  27  52087   0.251345   0.319894  -0.0256147   0.0005438  -0.000147  -0.000116   0.000112   0.000111  0.0000016  0.0000137    0.000127    0.000103
+2001   6  28  52088   0.252048   0.317043  -0.0262343   0.0006020  -0.000043  -0.000043   0.000114   0.000112  0.0000014  0.0000137    0.000116    0.000103
+2001   6  29  52089   0.252444   0.314122  -0.0268459   0.0005493   0.000079   0.000011   0.000110   0.000110  0.0000106  0.0000135    0.000111    0.000099
+2001   6  30  52090   0.253016   0.310800  -0.0273298   0.0004255   0.000162   0.000018   0.000113   0.000112  0.0000195  0.0000139    0.000110    0.000094
+2001   7   1  52091   0.253834   0.307795  -0.0276560   0.0002142   0.000179  -0.000009   0.000110   0.000110  0.0000139  0.0000141    0.000108    0.000090
+2001   7   2  52092   0.254061   0.304527  -0.0278067   0.0000462   0.000117  -0.000061   0.000098   0.000098  0.0000084  0.0000131    0.000107    0.000085
+2001   7   3  52093   0.253811   0.301314  -0.0277772  -0.0001089   0.000002  -0.000120   0.000091   0.000092  0.0000028  0.0000124    0.000105    0.000080
+2001   7   4  52094   0.254233   0.298281  -0.0275909  -0.0002496  -0.000154  -0.000169   0.000089   0.000090  0.0000024  0.0000124    0.000116    0.000084
+2001   7   5  52095   0.254350   0.295710  -0.0273144  -0.0003114  -0.000214  -0.000178   0.000090   0.000091  0.0000019  0.0000125    0.000085    0.000061
+2001   7   6  52096   0.253849   0.292989  -0.0270114  -0.0002997  -0.000177  -0.000173   0.000088   0.000090  0.0000007  0.0000129    0.000036    0.000027
+2001   7   7  52097   0.253566   0.290214  -0.0267265  -0.0002802  -0.000093  -0.000207   0.000089   0.000090  0.0000006  0.0000134    0.000045    0.000034
+2001   7   8  52098   0.252752   0.287507  -0.0264982  -0.0002051  -0.000007  -0.000247   0.000099   0.000100  0.0000007  0.0000149    0.000058    0.000045
+2001   7   9  52099   0.251678   0.284275  -0.0263527  -0.0000874   0.000028  -0.000275   0.000101   0.000103  0.0000008  0.0000155    0.000072    0.000056
+2001   7  10  52100   0.251747   0.280907  -0.0262930  -0.0000186  -0.000015  -0.000277   0.000096   0.000099  0.0000009  0.0000148    0.000086    0.000067
+2001   7  11  52101   0.251939   0.277755  -0.0263001   0.0000240  -0.000154  -0.000197   0.000094   0.000096  0.0000015  0.0000148    0.000101    0.000082
+2001   7  12  52102   0.251525   0.274882  -0.0263407   0.0000690  -0.000311  -0.000176   0.000095   0.000097  0.0000014  0.0000150    0.000116    0.000098
+2001   7  13  52103   0.250911   0.271800  -0.0264405   0.0001362  -0.000373  -0.000148   0.000099   0.000100  0.0000132  0.0000160    0.000141    0.000114
+2001   7  14  52104   0.250414   0.269000  -0.0265789   0.0001329  -0.000340  -0.000117   0.000104   0.000104  0.0000247  0.0000175    0.000169    0.000129
+2001   7  15  52105   0.249451   0.265840  -0.0266828   0.0000928  -0.000249  -0.000098   0.000107   0.000106  0.0000181  0.0000174    0.000197    0.000143
+2001   7  16  52106   0.248484   0.262485  -0.0267027  -0.0000157  -0.000151  -0.000088   0.000104   0.000103  0.0000115  0.0000161    0.000225    0.000158
+2001   7  17  52107   0.248006   0.259224  -0.0266086  -0.0001454  -0.000094  -0.000076   0.000099   0.000098  0.0000049  0.0000157    0.000253    0.000173
+2001   7  18  52108   0.248016   0.256042  -0.0263789  -0.0002958  -0.000114  -0.000088   0.000095   0.000094  0.0000019  0.0000157    0.000155    0.000113
+2001   7  19  52109   0.247896   0.252930  -0.0259954  -0.0004325  -0.000218  -0.000016   0.000095   0.000094  0.0000013  0.0000157    0.000107    0.000085
+2001   7  20  52110   0.247645   0.249814  -0.0255058  -0.0005025  -0.000239   0.000089   0.000103   0.000101  0.0000077  0.0000163    0.000105    0.000082
+2001   7  21  52111   0.247117   0.246698  -0.0250034  -0.0004789  -0.000182   0.000182   0.000108   0.000106  0.0000141  0.0000172    0.000109    0.000083
+2001   7  22  52112   0.246295   0.243673  -0.0245996  -0.0003021  -0.000094   0.000231   0.000111   0.000106  0.0000109  0.0000173    0.000114    0.000084
+2001   7  23  52113   0.245274   0.240799  -0.0243960  -0.0000831  -0.000028   0.000209   0.000114   0.000108  0.0000077  0.0000163    0.000119    0.000086
+2001   7  24  52114   0.244285   0.238098  -0.0244250   0.0001216  -0.000026   0.000118   0.000111   0.000105  0.0000044  0.0000156    0.000123    0.000087
+2001   7  25  52115   0.243610   0.235504  -0.0246234   0.0002297  -0.000129  -0.000064   0.000112   0.000106  0.0000022  0.0000156    0.000129    0.000093
+2001   7  26  52116   0.243044   0.232808  -0.0248561   0.0001998  -0.000291  -0.000158   0.000114   0.000107  0.0000014  0.0000157    0.000132    0.000099
+2001   7  27  52117   0.242013   0.230003  -0.0250309   0.0001050  -0.000343  -0.000184   0.000116   0.000111  0.0000091  0.0000156    0.000131    0.000098
+2001   7  28  52118   0.240697   0.226975  -0.0250667  -0.0000571  -0.000281  -0.000152   0.000120   0.000114  0.0000186  0.0000164    0.000127    0.000095
+2001   7  29  52119   0.239050   0.223953  -0.0249002  -0.0002630  -0.000153  -0.000083   0.000119   0.000113  0.0000235  0.0000171    0.000124    0.000093
+2001   7  30  52120   0.237314   0.220886  -0.0245264  -0.0004852  -0.000022  -0.000019   0.000119   0.000116  0.0000284  0.0000167    0.000121    0.000090
+2001   7  31  52121   0.235853   0.218016  -0.0239815  -0.0006359   0.000046   0.000014   0.000115   0.000112  0.0000279  0.0000159    0.000117    0.000087
+2001   8   1  52122   0.234801   0.215835  -0.0233181  -0.0007004   0.000019   0.000010   0.000106   0.000103  0.0000068  0.0000155    0.000114    0.000084
+2001   8   2  52123   0.233317   0.213639  -0.0225990  -0.0007039  -0.000180  -0.000061   0.000103   0.000099  0.0000012  0.0000152    0.000098    0.000085
+2001   8   3  52124   0.231048   0.211575  -0.0219266  -0.0006402  -0.000295  -0.000059   0.000107   0.000104  0.0000140  0.0000153    0.000099    0.000085
+2001   8   4  52125   0.228176   0.208826  -0.0213757  -0.0005124  -0.000307   0.000011   0.000115   0.000113  0.0000263  0.0000167    0.000108    0.000086
+2001   8   5  52126   0.225874   0.205902  -0.0209712  -0.0003292  -0.000254   0.000098   0.000115   0.000113  0.0000183  0.0000175    0.000116    0.000087
+2001   8   6  52127   0.223892   0.203346  -0.0207172  -0.0002103  -0.000180   0.000156   0.000111   0.000109  0.0000104  0.0000165    0.000125    0.000088
+2001   8   7  52128   0.221827   0.200917  -0.0206107  -0.0000604  -0.000131   0.000147   0.000106   0.000105  0.0000025  0.0000156    0.000133    0.000088
+2001   8   8  52129   0.219709   0.198726  -0.0206493   0.0000916  -0.000225   0.000032   0.000103   0.000102  0.0000018  0.0000155    0.000124    0.000095
+2001   8   9  52130   0.217156   0.196664  -0.0208268   0.0002065  -0.000238  -0.000121   0.000104   0.000102  0.0000015  0.0000156    0.000117    0.000097
+2001   8  10  52131   0.214336   0.194212  -0.0211253   0.0002814  -0.000234  -0.000178   0.000105   0.000104  0.0000060  0.0000157    0.000124    0.000099
+2001   8  11  52132   0.211293   0.191712  -0.0214949   0.0003679  -0.000215  -0.000142   0.000108   0.000107  0.0000104  0.0000162    0.000136    0.000102
+2001   8  12  52133   0.208447   0.188943  -0.0218653   0.0003555  -0.000171  -0.000056   0.000109   0.000109  0.0000077  0.0000168    0.000148    0.000104
+2001   8  13  52134   0.206079   0.186354  -0.0221732   0.0002629  -0.000116   0.000029   0.000106   0.000104  0.0000050  0.0000164    0.000160    0.000107
+2001   8  14  52135   0.203685   0.183855  -0.0223773   0.0001508  -0.000065   0.000077   0.000104   0.000103  0.0000023  0.0000157    0.000171    0.000110
+2001   8  15  52136   0.201265   0.181348  -0.0224717   0.0000490  -0.000032   0.000013   0.000105   0.000106  0.0000013  0.0000157    0.000110    0.000076
+2001   8  16  52137   0.198479   0.179250  -0.0224950   0.0000152  -0.000033  -0.000019   0.000105   0.000104  0.0000012  0.0000159    0.000091    0.000084
+2001   8  17  52138   0.196032   0.176961  -0.0225412   0.0001012  -0.000049   0.000038   0.000102   0.000103  0.0000087  0.0000162    0.000092    0.000090
+2001   8  18  52139   0.193459   0.174798  -0.0227244   0.0002967  -0.000079   0.000153   0.000105   0.000106  0.0000160  0.0000170    0.000092    0.000089
+2001   8  19  52140   0.191018   0.172470  -0.0231328   0.0005239  -0.000124   0.000274   0.000106   0.000106  0.0000114  0.0000168    0.000092    0.000088
+2001   8  20  52141   0.188848   0.170484  -0.0237964   0.0007596  -0.000176   0.000343   0.000101   0.000103  0.0000068  0.0000152    0.000092    0.000087
+2001   8  21  52142   0.186480   0.168342  -0.0246685   0.0009217  -0.000220   0.000313   0.000097   0.000099  0.0000022  0.0000144    0.000092    0.000087
+2001   8  22  52143   0.183961   0.166036  -0.0256387   0.0009532  -0.000287   0.000156   0.000094   0.000096  0.0000015  0.0000142    0.000099    0.000074
+2001   8  23  52144   0.181220   0.164115  -0.0265697   0.0008501  -0.000242  -0.000081   0.000093   0.000095  0.0000012  0.0000143    0.000102    0.000074
+2001   8  24  52145   0.178722   0.162275  -0.0273449   0.0006634  -0.000180  -0.000221   0.000100   0.000102  0.0000072  0.0000148    0.000103    0.000076
+2001   8  25  52146   0.176481   0.160389  -0.0278905   0.0004319  -0.000128  -0.000245   0.000104   0.000106  0.0000131  0.0000158    0.000103    0.000077
+2001   8  26  52147   0.174510   0.158231  -0.0281864   0.0001912  -0.000092  -0.000179   0.000104   0.000107  0.0000095  0.0000166    0.000102    0.000077
+2001   8  27  52148   0.172437   0.156162  -0.0282618  -0.0000397  -0.000080  -0.000072   0.000103   0.000105  0.0000059  0.0000159    0.000102    0.000077
+2001   8  28  52149   0.170543   0.154163  -0.0281740  -0.0001358  -0.000082   0.000026   0.000097   0.000102  0.0000023  0.0000151    0.000101    0.000077
+2001   8  29  52150   0.168418   0.152613  -0.0279902  -0.0002017  -0.000114   0.000047   0.000096   0.000100  0.0000012  0.0000151    0.000088    0.000066
+2001   8  30  52151   0.166034   0.151100  -0.0277758  -0.0002295  -0.000068   0.000024   0.000096   0.000097  0.0000012  0.0000151    0.000087    0.000086
+2001   8  31  52152   0.163347   0.150218  -0.0276012  -0.0000996  -0.000019   0.000079   0.000099   0.000101  0.0000203  0.0000152    0.000092    0.000093
+2001   9   1  52153   0.160259   0.149256  -0.0275293   0.0000033   0.000013   0.000186   0.000106   0.000109  0.0000391  0.0000160    0.000097    0.000090
+2001   9   2  52154   0.157147   0.147985  -0.0275981   0.0001229   0.000022   0.000291   0.000109   0.000109  0.0000302  0.0000182    0.000102    0.000087
+2001   9   3  52155   0.153924   0.146417  -0.0278196   0.0002999   0.000001   0.000348   0.000102   0.000102  0.0000214  0.0000190    0.000106    0.000084
+2001   9   4  52156   0.150889   0.144947  -0.0281874   0.0004132  -0.000046   0.000339   0.000096   0.000096  0.0000126  0.0000182    0.000111    0.000081
+2001   9   5  52157   0.147653   0.143026  -0.0286766   0.0005032  -0.000138   0.000098   0.000101   0.000100  0.0000037  0.0000183    0.000104    0.000077
+2001   9   6  52158   0.144485   0.140856  -0.0292248   0.0005285  -0.000161   0.000129   0.000102   0.000101  0.0000013  0.0000185    0.000104    0.000080
+2001   9   7  52159   0.141897   0.139384  -0.0297286   0.0004439  -0.000211   0.000183   0.000100   0.000099  0.0000093  0.0000188    0.000100    0.000079
+2001   9   8  52160   0.139494   0.137871  -0.0301230   0.0003125  -0.000265   0.000216   0.000106   0.000104  0.0000170  0.0000200    0.000095    0.000077
+2001   9   9  52161   0.137281   0.136949  -0.0303956   0.0002033  -0.000284   0.000228   0.000107   0.000105  0.0000120  0.0000191    0.000090    0.000074
+2001   9  10  52162   0.134827   0.135759  -0.0305436   0.0000943  -0.000253   0.000197   0.000101   0.000099  0.0000070  0.0000165    0.000084    0.000072
+2001   9  11  52163   0.132094   0.134637  -0.0305689  -0.0000193  -0.000187   0.000124   0.000094   0.000091  0.0000020  0.0000155    0.000078    0.000070
+2001   9  12  52164   0.128860   0.133396  -0.0304953  -0.0000937  -0.000011  -0.000063   0.000091   0.000088  0.0000013  0.0000154    0.000092    0.000085
+2001   9  13  52165   0.125805   0.132304  -0.0303944  -0.0000460  -0.000039  -0.000058   0.000091   0.000088  0.0000013  0.0000153    0.000105    0.000099
+2001   9  14  52166   0.122496   0.131188  -0.0303802   0.0000781  -0.000130  -0.000135   0.000097   0.000093  0.0000072  0.0000153    0.000107    0.000099
+2001   9  15  52167   0.118906   0.130087  -0.0305686   0.0003154  -0.000235  -0.000283   0.000105   0.000100  0.0000139  0.0000165    0.000106    0.000096
+2001   9  16  52168   0.115112   0.129255  -0.0310327   0.0006093  -0.000326  -0.000418   0.000102   0.000097  0.0000150  0.0000171    0.000105    0.000093
+2001   9  17  52169   0.111714   0.128318  -0.0317729   0.0008865  -0.000360  -0.000473   0.000094   0.000090  0.0000161  0.0000158    0.000103    0.000090
+2001   9  18  52170   0.108316   0.127560  -0.0327055   0.0009656  -0.000318  -0.000394   0.000092   0.000088  0.0000148  0.0000149    0.000102    0.000087
+2001   9  19  52171   0.104672   0.126692  -0.0336895   0.0009310  -0.000219  -0.000177   0.000093   0.000089  0.0000043  0.0000149    0.000100    0.000083
+2001   9  20  52172   0.101278   0.126149  -0.0345837   0.0008237  -0.000058   0.000221   0.000094   0.000091  0.0000010  0.0000152    0.000090    0.000074
+2001   9  21  52173   0.097866   0.125544  -0.0353189   0.0006397   0.000017   0.000497   0.000095   0.000092  0.0000078  0.0000154    0.000092    0.000073
+2001   9  22  52174   0.094518   0.125037  -0.0358616   0.0004464   0.000004   0.000578   0.000099   0.000096  0.0000144  0.0000164    0.000099    0.000076
+2001   9  23  52175   0.091426   0.124370  -0.0362081   0.0002661  -0.000057   0.000482   0.000104   0.000100  0.0000104  0.0000173    0.000106    0.000078
+2001   9  24  52176   0.088604   0.123418  -0.0364009   0.0001384  -0.000119   0.000267   0.000103   0.000098  0.0000063  0.0000163    0.000113    0.000081
+2001   9  25  52177   0.085524   0.122197  -0.0365033   0.0000660  -0.000140   0.000046   0.000098   0.000094  0.0000022  0.0000154    0.000120    0.000084
+2001   9  26  52178   0.082397   0.121052  -0.0365756   0.0000739  -0.000068  -0.000198   0.000095   0.000092  0.0000014  0.0000152    0.000106    0.000093
+2001   9  27  52179   0.078953   0.120069  -0.0366650   0.0001454   0.000038  -0.000005   0.000093   0.000091  0.0000012  0.0000150    0.000092    0.000091
+2001   9  28  52180   0.075419   0.119168  -0.0368625   0.0002385   0.000076   0.000153   0.000094   0.000092  0.0000132  0.0000151    0.000091    0.000090
+2001   9  29  52181   0.071828   0.118722  -0.0372010   0.0003923   0.000048   0.000204   0.000099   0.000096  0.0000247  0.0000161    0.000095    0.000091
+2001   9  30  52182   0.068678   0.118291  -0.0376664   0.0005386  -0.000017   0.000169   0.000099   0.000095  0.0000172  0.0000170    0.000098    0.000092
+2001  10   1  52183   0.065466   0.117988  -0.0382725   0.0006445  -0.000080   0.000066   0.000096   0.000092  0.0000097  0.0000163    0.000102    0.000093
+2001  10   2  52184   0.061731   0.117771  -0.0390266   0.0007839  -0.000107  -0.000048   0.000093   0.000090  0.0000022  0.0000155    0.000106    0.000094
+2001  10   3  52185   0.057890   0.117698  -0.0398892   0.0008457  -0.000025  -0.000117   0.000089   0.000087  0.0000015  0.0000155    0.000091    0.000075
+2001  10   4  52186   0.054879   0.117455  -0.0407656   0.0008887   0.000021  -0.000037   0.000090   0.000088  0.0000013  0.0000153    0.000097    0.000082
+2001  10   5  52187   0.052111   0.117572  -0.0416605   0.0008625   0.000057   0.000030   0.000094   0.000091  0.0000082  0.0000155    0.000101    0.000088
+2001  10   6  52188   0.049035   0.117841  -0.0425240   0.0007589   0.000076   0.000065   0.000097   0.000095  0.0000162  0.0000166    0.000102    0.000089
+2001  10   7  52189   0.046033   0.117927  -0.0432525   0.0006211   0.000066   0.000079   0.000102   0.000099  0.0000179  0.0000164    0.000103    0.000090
+2001  10   8  52190   0.043128   0.117898  -0.0438250   0.0005234   0.000034   0.000083   0.000100   0.000097  0.0000196  0.0000147    0.000103    0.000091
+2001  10   9  52191   0.039795   0.117854  -0.0443045   0.0004966  -0.000006   0.000102   0.000096   0.000094  0.0000182  0.0000140    0.000104    0.000092
+2001  10  10  52192   0.036197   0.117732  -0.0447908   0.0005402  -0.000033   0.000157   0.000093   0.000092  0.0000050  0.0000139    0.000104    0.000093
+2001  10  11  52193   0.031825   0.117402  -0.0453627   0.0006269  -0.000044   0.000275   0.000097   0.000096  0.0000059  0.0000141    0.000161    0.000190
+2001  10  12  52194   0.027487   0.117390  -0.0460476   0.0007838  -0.000008   0.000374   0.000099   0.000099  0.0000139  0.0000144    0.000171    0.000210
+2001  10  13  52195   0.023081   0.117712  -0.0469156   0.0010355   0.000057   0.000422   0.000098   0.000099  0.0000199  0.0000148    0.000156    0.000184
+2001  10  14  52196   0.019372   0.117802  -0.0480558   0.0013298   0.000118   0.000407   0.000102   0.000103  0.0000147  0.0000152    0.000140    0.000159
+2001  10  15  52197   0.015939   0.118462  -0.0494723   0.0015156   0.000147   0.000331   0.000101   0.000102  0.0000096  0.0000145    0.000125    0.000134
+2001  10  16  52198   0.012811   0.119026  -0.0510673   0.0016193   0.000133   0.000220   0.000094   0.000097  0.0000044  0.0000138    0.000109    0.000108
+2001  10  17  52199   0.009803   0.119625  -0.0526781   0.0015541   0.000045   0.000102   0.000091   0.000094  0.0000020  0.0000136    0.000102    0.000094
+2001  10  18  52200   0.006733   0.119989  -0.0541469   0.0013757  -0.000010  -0.000018   0.000094   0.000097  0.0000019  0.0000135    0.000111    0.000107
+2001  10  19  52201   0.003128   0.120603  -0.0553710   0.0010733  -0.000038   0.000053   0.000097   0.000100  0.0000020  0.0000139    0.000145    0.000140
+2001  10  20  52202  -0.000622   0.121137  -0.0563133   0.0007907  -0.000020   0.000096   0.000098   0.000101  0.0000018  0.0000161    0.000146    0.000136
+2001  10  21  52203  -0.004527   0.122021  -0.0570176   0.0006478   0.000035   0.000085   0.000100   0.000101  0.0000016  0.0000169    0.000129    0.000114
+2001  10  22  52204  -0.008592   0.122880  -0.0575798   0.0005723   0.000098   0.000055   0.000099   0.000101  0.0000014  0.0000150    0.000112    0.000093
+2001  10  23  52205  -0.012669   0.123823  -0.0580919   0.0005321   0.000146   0.000028   0.000092   0.000094  0.0000012  0.0000138    0.000096    0.000072
+2001  10  24  52206  -0.016508   0.124749  -0.0586094   0.0005597   0.000140   0.000033   0.000088   0.000089  0.0000016  0.0000132    0.000090    0.000081
+2001  10  25  52207  -0.020098   0.125860  -0.0591522   0.0006195   0.000135   0.000116   0.000093   0.000093  0.0000022  0.0000133    0.000103    0.000094
+2001  10  26  52208  -0.023537   0.126981  -0.0598020   0.0007520   0.000138   0.000187   0.000098   0.000099  0.0000050  0.0000137    0.000096    0.000087
+2001  10  27  52209  -0.026958   0.128294  -0.0606217   0.0009216   0.000145   0.000216   0.000101   0.000102  0.0000074  0.0000145    0.000081    0.000072
+2001  10  28  52210  -0.030385   0.129206  -0.0615994   0.0010467   0.000151   0.000200   0.000110   0.000112  0.0000052  0.0000155    0.000065    0.000058
+2001  10  29  52211  -0.033395   0.130444  -0.0626788   0.0010989   0.000146   0.000136   0.000110   0.000113  0.0000030  0.0000149    0.000050    0.000044
+2001  10  30  52212  -0.036444   0.131489  -0.0637948   0.0011004   0.000122   0.000050   0.000097   0.000099  0.0000007  0.0000139    0.000034    0.000030
+2001  10  31  52213  -0.039652   0.132666  -0.0649009   0.0011090   0.000077  -0.000047   0.000094   0.000097  0.0000012  0.0000137    0.000112    0.000086
+2001  11   1  52214  -0.042968   0.133836  -0.0659691   0.0010220   0.000013  -0.000063   0.000098   0.000100  0.0000023  0.0000140    0.000133    0.000124
+2001  11   2  52215  -0.046548   0.134950  -0.0669078   0.0008577  -0.000027  -0.000027   0.000100   0.000103  0.0000146  0.0000139    0.000127    0.000124
+2001  11   3  52216  -0.050396   0.135991  -0.0676791   0.0006738  -0.000033   0.000036   0.000105   0.000109  0.0000260  0.0000142    0.000119    0.000113
+2001  11   4  52217  -0.053965   0.136987  -0.0683177   0.0005557  -0.000002   0.000106   0.000107   0.000112  0.0000184  0.0000149    0.000111    0.000101
+2001  11   5  52218  -0.056880   0.138019  -0.0688588   0.0005231   0.000053   0.000158   0.000101   0.000105  0.0000107  0.0000144    0.000102    0.000090
+2001  11   6  52219  -0.059332   0.139363  -0.0693396   0.0004792   0.000113   0.000188   0.000095   0.000100  0.0000030  0.0000139    0.000094    0.000078
+2001  11   7  52220  -0.061652   0.141087  -0.0698201   0.0005239   0.000198   0.000136   0.000095   0.000099  0.0000016  0.0000137    0.000094    0.000086
+2001  11   8  52221  -0.063578   0.142891  -0.0703972   0.0006891   0.000164   0.000213   0.000098   0.000101  0.0000019  0.0000137    0.000098    0.000085
+2001  11   9  52222  -0.065416   0.145172  -0.0712258   0.0009823   0.000156   0.000269   0.000099   0.000102  0.0000061  0.0000139    0.000107    0.000105
+2001  11  10  52223  -0.067837   0.147673  -0.0723412   0.0012731   0.000177   0.000284   0.000099   0.000103  0.0000103  0.0000142    0.000117    0.000134
+2001  11  11  52224  -0.069892   0.150053  -0.0736769   0.0014686   0.000197   0.000278   0.000105   0.000108  0.0000086  0.0000148    0.000128    0.000163
+2001  11  12  52225  -0.071450   0.152673  -0.0751842   0.0015793   0.000199   0.000249   0.000105   0.000106  0.0000070  0.0000145    0.000139    0.000192
+2001  11  13  52226  -0.073301   0.155260  -0.0767913   0.0015800   0.000176   0.000204   0.000102   0.000103  0.0000054  0.0000141    0.000149    0.000221
+2001  11  14  52227  -0.075366   0.157383  -0.0783576   0.0014427   0.000054   0.000183   0.000103   0.000105  0.0000022  0.0000143    0.000109    0.000118
+2001  11  15  52228  -0.077892   0.159246  -0.0796819   0.0011734   0.000047   0.000102   0.000102   0.000104  0.0000013  0.0000146    0.000099    0.000095
+2001  11  16  52229  -0.080503   0.160864  -0.0807193   0.0009091   0.000049   0.000011   0.000100   0.000102  0.0000056  0.0000145    0.000097    0.000094
+2001  11  17  52230  -0.082602   0.162794  -0.0815281   0.0007330   0.000053  -0.000068   0.000103   0.000105  0.0000102  0.0000148    0.000094    0.000090
+2001  11  18  52231  -0.084522   0.164626  -0.0821837   0.0005985   0.000068  -0.000118   0.000103   0.000104  0.0000100  0.0000148    0.000091    0.000086
+2001  11  19  52232  -0.086584   0.166572  -0.0827590   0.0005722   0.000089  -0.000127   0.000097   0.000098  0.0000098  0.0000139    0.000087    0.000082
+2001  11  20  52233  -0.088950   0.168693  -0.0833071   0.0005604   0.000109  -0.000082   0.000094   0.000094  0.0000085  0.0000133    0.000084    0.000078
+2001  11  21  52234  -0.091580   0.170729  -0.0838685   0.0005842   0.000120   0.000014   0.000093   0.000093  0.0000028  0.0000134    0.000080    0.000074
+2001  11  22  52235  -0.094500   0.173100  -0.0844812   0.0006852   0.000114   0.000152   0.000094   0.000094  0.0000060  0.0000136    0.000102    0.000098
+2001  11  23  52236  -0.097326   0.175793  -0.0851777   0.0007788   0.000090   0.000297   0.000095   0.000096  0.0000122  0.0000137    0.000133    0.000131
+2001  11  24  52237  -0.100631   0.178302  -0.0859758   0.0008102   0.000056   0.000413   0.000101   0.000101  0.0000185  0.0000145    0.000163    0.000164
+2001  11  25  52238  -0.103592   0.180703  -0.0868707   0.0009305   0.000021   0.000466   0.000108   0.000109  0.0000247  0.0000165    0.000194    0.000198
+2001  11  26  52239  -0.106051   0.183342  -0.0878352   0.0009925  -0.000001   0.000436   0.000108   0.000108  0.0000309  0.0000168    0.000225    0.000231
+2001  11  27  52240  -0.108081   0.185690  -0.0888267   0.0009875  -0.000006   0.000332   0.000104   0.000105  0.0000309  0.0000157    0.000255    0.000264
+2001  11  28  52241  -0.110203   0.188125  -0.0897933   0.0009232   0.000061   0.000151   0.000105   0.000106  0.0000075  0.0000157    0.000146    0.000133
+2001  11  29  52242  -0.112536   0.190415  -0.0906840   0.0008337   0.000031   0.000013   0.000101   0.000102  0.0000012  0.0000155    0.000101    0.000088
+2001  11  30  52243  -0.115305   0.192976  -0.0914723   0.0007138  -0.000011  -0.000068   0.000100   0.000102  0.0000042  0.0000153    0.000084    0.000075
+2001  12   1  52244  -0.118397   0.195674  -0.0921082   0.0005281  -0.000032  -0.000084   0.000106   0.000109  0.0000089  0.0000156    0.000070    0.000062
+2001  12   2  52245  -0.121709   0.198233  -0.0925533   0.0003586  -0.000016  -0.000050   0.000115   0.000118  0.0000149  0.0000155    0.000055    0.000048
+2001  12   3  52246  -0.124542   0.200399  -0.0928484   0.0002698   0.000040   0.000010   0.000117   0.000120  0.0000209  0.0000146    0.000041    0.000035
+2001  12   4  52247  -0.127121   0.202612  -0.0930950   0.0002623   0.000113   0.000070   0.000109   0.000112  0.0000222  0.0000142    0.000026    0.000022
+2001  12   5  52248  -0.129533   0.205438  -0.0934038   0.0003532   0.000265   0.000056   0.000105   0.000109  0.0000056  0.0000141    0.000087    0.000078
+2001  12   6  52249  -0.131756   0.208694  -0.0938502   0.0005532   0.000168   0.000121   0.000108   0.000110  0.0000079  0.0000140    0.000056    0.000047
+2001  12   7  52250  -0.134515   0.211897  -0.0944816   0.0007622   0.000021   0.000122   0.000109   0.000111  0.0000161  0.0000140    0.000049    0.000052
+2001  12   8  52251  -0.137740   0.214596  -0.0953267   0.0009392  -0.000117   0.000071   0.000115   0.000119  0.0000207  0.0000146    0.000066    0.000083
+2001  12   9  52252  -0.141044   0.217092  -0.0963789   0.0011388  -0.000222   0.000017   0.000126   0.000130  0.0000162  0.0000143    0.000082    0.000114
+2001  12  10  52253  -0.143827   0.219813  -0.0975574   0.0012285  -0.000255  -0.000006   0.000128   0.000133  0.0000116  0.0000128    0.000098    0.000145
+2001  12  11  52254  -0.146743   0.222759  -0.0987388   0.0011456  -0.000208   0.000017   0.000130   0.000135  0.0000071  0.0000125    0.000115    0.000176
+2001  12  12  52255  -0.149854   0.225537  -0.0998150   0.0009759  -0.000028   0.000114   0.000132   0.000136  0.0000026  0.0000130    0.000092    0.000101
+2001  12  13  52256  -0.152724   0.228099  -0.1007187   0.0008011   0.000079   0.000181   0.000131   0.000134  0.0000017  0.0000131    0.000093    0.000087
+2001  12  14  52257  -0.155221   0.230618  -0.1014096   0.0005743   0.000153   0.000179   0.000128   0.000130  0.0000020  0.0000128    0.000102    0.000100
+2001  12  15  52258  -0.157769   0.233350  -0.1018854   0.0003825   0.000290   0.000084   0.000131   0.000132  0.0000061  0.0000131    0.000100    0.000096
+2001  12  16  52259  -0.159980   0.235937  -0.1022174   0.0003031   0.000417  -0.000055   0.000134   0.000134  0.0000105  0.0000142    0.000097    0.000089
+2001  12  17  52260  -0.161947   0.238791  -0.1025217   0.0003301   0.000496  -0.000174   0.000123   0.000125  0.0000150  0.0000141    0.000093    0.000083
+2001  12  18  52261  -0.163903   0.241672  -0.1028962   0.0004211   0.000489  -0.000211   0.000118   0.000121  0.0000160  0.0000132    0.000090    0.000077
+2001  12  19  52262  -0.165882   0.244990  -0.1033720   0.0005238   0.000380  -0.000132   0.000115   0.000117  0.0000042  0.0000131    0.000087    0.000070
+2001  12  20  52263  -0.167901   0.248535  -0.1039474   0.0006754   0.000143   0.000100   0.000112   0.000112  0.0000074  0.0000133    0.000051    0.000040
+2001  12  21  52264  -0.169231   0.251942  -0.1047259   0.0009018  -0.000103   0.000339   0.000116   0.000117  0.0000143  0.0000136    0.000042    0.000033
+2001  12  22  52265  -0.170321   0.255507  -0.1057642   0.0010725  -0.000302   0.000522   0.000121   0.000123  0.0000157  0.0000141    0.000045    0.000036
+2001  12  23  52266  -0.171369   0.259096  -0.1069370   0.0011405  -0.000417   0.000612   0.000126   0.000127  0.0000161  0.0000151    0.000049    0.000040
+2001  12  24  52267  -0.172108   0.262658  -0.1081237   0.0011692  -0.000425   0.000592   0.000124   0.000127  0.0000164  0.0000156    0.000053    0.000044
+2001  12  25  52268  -0.172615   0.266562  -0.1092672   0.0011805  -0.000332   0.000476   0.000123   0.000125  0.0000168  0.0000154    0.000057    0.000047
+2001  12  26  52269  -0.173081   0.270618  -0.1103754   0.0011776  -0.000164   0.000307   0.000122   0.000124  0.0000171  0.0000154    0.000061    0.000051
+2001  12  27  52270  -0.173489   0.274802  -0.1114672   0.0011040   0.000037   0.000130   0.000121   0.000123  0.0000151  0.0000153    0.000064    0.000055
+2001  12  28  52271  -0.174601   0.278753  -0.1125197   0.0009935   0.000229  -0.000017   0.000119   0.000122  0.0000040  0.0000154    0.000068    0.000059
+2001  12  29  52272  -0.175343   0.282477  -0.1134723   0.0008577   0.000372  -0.000108   0.000123   0.000126  0.0000037  0.0000160    0.000075    0.000065
+2001  12  30  52273  -0.175938   0.286643  -0.1143000   0.0007965   0.000446  -0.000146   0.000127   0.000129  0.0000071  0.0000163    0.000082    0.000072
+2001  12  31  52274  -0.176697   0.290417  -0.1150471   0.0007560   0.000448  -0.000149   0.000125   0.000128  0.0000104  0.0000159    0.000089    0.000079
+2002   1   1  52275  -0.177019   0.294133  -0.1158072   0.0008132   0.000398  -0.000099   0.000123   0.000127  0.0000067  0.0000155    0.000096    0.000087
+2002   1   2  52276  -0.177493   0.297869  -0.1166748   0.0009396   0.000307  -0.000094   0.000117   0.000122  0.0000067  0.0000148    0.000103    0.000094
+2002   1   3  52277  -0.178406   0.301028  -0.1177031   0.0011210   0.000211  -0.000100   0.000113   0.000120  0.0000059  0.0000142    0.000110    0.000101
+2002   1   4  52278  -0.179023   0.303802  -0.1189005   0.0012883   0.000136  -0.000107   0.000115   0.000119  0.0000018  0.0000142    0.000117    0.000109
+2002   1   5  52279  -0.179599   0.306664  -0.1202295   0.0013099   0.000103  -0.000103   0.000117   0.000119  0.0000008  0.0000152    0.000123    0.000113
+2002   1   6  52280  -0.180024   0.309680  -0.1215970   0.0013328   0.000112  -0.000080   0.000116   0.000119  0.0000008  0.0000162    0.000129    0.000117
+2002   1   7  52281  -0.180669   0.312889  -0.1228797   0.0012457   0.000153  -0.000039   0.000116   0.000117  0.0000008  0.0000161    0.000135    0.000121
+2002   1   8  52282  -0.181633   0.315635  -0.1239699   0.0010026   0.000207   0.000003   0.000114   0.000113  0.0000008  0.0000158    0.000141    0.000125
+2002   1   9  52283  -0.182726   0.318394  -0.1248119   0.0007250   0.000254   0.000029   0.000111   0.000110  0.0000046  0.0000160    0.000131    0.000113
+2002   1  10  52284  -0.183040   0.321343  -0.1254107   0.0004830   0.000288   0.000022   0.000114   0.000114  0.0000073  0.0000167    0.000117    0.000098
+2002   1  11  52285  -0.182927   0.324336  -0.1257974   0.0002958   0.000309  -0.000024   0.000113   0.000112  0.0000021  0.0000176    0.000103    0.000083
+2002   1  12  52286  -0.182686   0.327539  -0.1259999   0.0001381   0.000321  -0.000103   0.000117   0.000114  0.0000006  0.0000187    0.000096    0.000077
+2002   1  13  52287  -0.182300   0.330632  -0.1260640   0.0000218   0.000324  -0.000186   0.000120   0.000116  0.0000006  0.0000190    0.000093    0.000074
+2002   1  14  52288  -0.181591   0.333585  -0.1260581  -0.0000329   0.000316  -0.000243   0.000111   0.000108  0.0000005  0.0000178    0.000089    0.000072
+2002   1  15  52289  -0.181275   0.336963  -0.1260582   0.0000224   0.000299  -0.000256   0.000108   0.000106  0.0000004  0.0000171    0.000086    0.000070
+2002   1  16  52290  -0.180614   0.339860  -0.1261279   0.0001343   0.000276  -0.000201   0.000107   0.000106  0.0000004  0.0000169    0.000063    0.000056
+2002   1  17  52291  -0.179790   0.343105  -0.1263012   0.0002335   0.000253  -0.000124   0.000098   0.000098  0.0000004  0.0000161    0.000037    0.000039
+2002   1  18  52292  -0.179307   0.346256  -0.1265887   0.0003559   0.000223  -0.000123   0.000094   0.000094  0.0000005  0.0000156    0.000091    0.000075
+2002   1  19  52293  -0.178733   0.349377  -0.1269911   0.0004789   0.000229  -0.000097   0.000104   0.000103  0.0000005  0.0000161    0.000104    0.000084
+2002   1  20  52294  -0.178367   0.352411  -0.1274971   0.0005400   0.000260  -0.000057   0.000110   0.000109  0.0000005  0.0000178    0.000093    0.000075
+2002   1  21  52295  -0.178117   0.355417  -0.1280803   0.0005926   0.000293  -0.000029   0.000111   0.000111  0.0000004  0.0000180    0.000082    0.000067
+2002   1  22  52296  -0.177700   0.358579  -0.1287002   0.0005992   0.000307  -0.000024   0.000108   0.000108  0.0000004  0.0000173    0.000070    0.000058
+2002   1  23  52297  -0.177004   0.361977  -0.1293065   0.0005793   0.000291  -0.000049   0.000103   0.000104  0.0000003  0.0000170    0.000059    0.000050
+2002   1  24  52298  -0.176513   0.365510  -0.1298491   0.0004962   0.000226  -0.000119   0.000104   0.000105  0.0000004  0.0000166    0.000068    0.000056
+2002   1  25  52299  -0.175747   0.368867  -0.1302937   0.0003749   0.000151  -0.000186   0.000105   0.000107  0.0000005  0.0000164    0.000082    0.000067
+2002   1  26  52300  -0.174998   0.372303  -0.1306445   0.0002978   0.000120  -0.000184   0.000109   0.000110  0.0000005  0.0000171    0.000088    0.000071
+2002   1  27  52301  -0.174297   0.375664  -0.1309593   0.0003341   0.000122  -0.000142   0.000115   0.000115  0.0000005  0.0000183    0.000090    0.000071
+2002   1  28  52302  -0.173542   0.378913  -0.1313416   0.0004721   0.000139  -0.000100   0.000116   0.000115  0.0000005  0.0000182    0.000092    0.000072
+2002   1  29  52303  -0.172934   0.382283  -0.1319065   0.0007090   0.000160  -0.000085   0.000110   0.000110  0.0000005  0.0000174    0.000094    0.000072
+2002   1  30  52304  -0.172178   0.385315  -0.1327355   0.0009849   0.000104  -0.000185   0.000106   0.000107  0.0000006  0.0000172    0.000098    0.000084
+2002   1  31  52305  -0.170758   0.388410  -0.1338419   0.0012376   0.000148  -0.000211   0.000108   0.000107  0.0000007  0.0000171    0.000107    0.000086
+2002   2   1  52306  -0.168939   0.391717  -0.1351758   0.0014017   0.000226  -0.000186   0.000108   0.000106  0.0000009  0.0000172    0.000116    0.000084
+2002   2   2  52307  -0.167455   0.394882  -0.1366424   0.0014945   0.000224  -0.000167   0.000109   0.000108  0.0000009  0.0000175    0.000120    0.000086
+2002   2   3  52308  -0.166403   0.398051  -0.1381261   0.0014518   0.000181  -0.000129   0.000110   0.000113  0.0000008  0.0000168    0.000123    0.000089
+2002   2   4  52309  -0.165619   0.401055  -0.1395163   0.0012706   0.000151  -0.000060   0.000112   0.000115  0.0000008  0.0000156    0.000125    0.000091
+2002   2   5  52310  -0.164337   0.403717  -0.1407272   0.0010851   0.000163   0.000016   0.000114   0.000117  0.0000007  0.0000156    0.000127    0.000094
+2002   2   6  52311  -0.163270   0.406582  -0.1417109   0.0008853   0.000324   0.000136   0.000112   0.000113  0.0000064  0.0000159    0.000152    0.000114
+2002   2   7  52312  -0.162216   0.409616  -0.1424623   0.0006278   0.000486   0.000190   0.000109   0.000110  0.0000135  0.0000157    0.000182    0.000139
+2002   2   8  52313  -0.161186   0.412596  -0.1430193   0.0004966   0.000324  -0.000083   0.000110   0.000109  0.0000036  0.0000155    0.000130    0.000107
+2002   2   9  52314  -0.159781   0.415599  -0.1434541   0.0003926   0.000194  -0.000217   0.000113   0.000112  0.0000007  0.0000162    0.000122    0.000100
+2002   2  10  52315  -0.157947   0.419041  -0.1438508   0.0003627   0.000117  -0.000197   0.000122   0.000124  0.0000007  0.0000177    0.000138    0.000107
+2002   2  11  52316  -0.156018   0.422661  -0.1442825   0.0004632   0.000066  -0.000105   0.000124   0.000127  0.0000007  0.0000181    0.000154    0.000115
+2002   2  12  52317  -0.154484   0.425959  -0.1447973   0.0005918   0.000056  -0.000003   0.000117   0.000119  0.0000008  0.0000175    0.000170    0.000123
+2002   2  13  52318  -0.153250   0.428985  -0.1454162   0.0006744   0.000043  -0.000043   0.000112   0.000115  0.0000012  0.0000175    0.000128    0.000113
+2002   2  14  52319  -0.152543   0.431938  -0.1461409   0.0007762   0.000119  -0.000106   0.000115   0.000118  0.0000010  0.0000177    0.000107    0.000096
+2002   2  15  52320  -0.151503   0.434689  -0.1469775   0.0008359   0.000226  -0.000180   0.000119   0.000122  0.0000007  0.0000181    0.000097    0.000079
+2002   2  16  52321  -0.150136   0.437250  -0.1479275   0.0009253   0.000274  -0.000239   0.000120   0.000121  0.0000087  0.0000190    0.000092    0.000073
+2002   2  17  52322  -0.148507   0.439956  -0.1489609   0.0010492   0.000264  -0.000267   0.000116   0.000117  0.0000199  0.0000189    0.000090    0.000071
+2002   2  18  52323  -0.146738   0.442526  -0.1500207   0.0010794   0.000220  -0.000267   0.000106   0.000108  0.0000310  0.0000177    0.000088    0.000069
+2002   2  19  52324  -0.145213   0.445426  -0.1510479   0.0010011   0.000174  -0.000251   0.000098   0.000100  0.0000339  0.0000168    0.000086    0.000067
+2002   2  20  52325  -0.143754   0.448149  -0.1520061   0.0009052   0.000156  -0.000237   0.000098   0.000101  0.0000060  0.0000167    0.000084    0.000065
+2002   2  21  52326  -0.141917   0.451007  -0.1528811   0.0008319   0.000203  -0.000244   0.000100   0.000103  0.0000005  0.0000170    0.000093    0.000080
+2002   2  22  52327  -0.140252   0.454173  -0.1536537   0.0007279   0.000270  -0.000265   0.000100   0.000100  0.0000006  0.0000172    0.000106    0.000099
+2002   2  23  52328  -0.138418   0.457356  -0.1543281   0.0006434   0.000286  -0.000284   0.000101   0.000101  0.0000006  0.0000179    0.000105    0.000096
+2002   2  24  52329  -0.136543   0.460897  -0.1549776   0.0007083   0.000253  -0.000287   0.000106   0.000105  0.0000005  0.0000183    0.000097    0.000086
+2002   2  25  52330  -0.134099   0.463887  -0.1557317   0.0008517   0.000189  -0.000267   0.000106   0.000105  0.0000004  0.0000178    0.000090    0.000076
+2002   2  26  52331  -0.131047   0.467032  -0.1567118   0.0010805   0.000123  -0.000227   0.000103   0.000102  0.0000003  0.0000174    0.000082    0.000065
+2002   2  27  52332  -0.128360   0.470417  -0.1579641   0.0013809   0.000095  -0.000171   0.000107   0.000106  0.0000047  0.0000176    0.000083    0.000067
+2002   2  28  52333  -0.125985   0.473628  -0.1594304   0.0015618   0.000104  -0.000128   0.000109   0.000107  0.0000078  0.0000177    0.000086    0.000072
+2002   3   1  52334  -0.123413   0.476716  -0.1610171   0.0016438   0.000138  -0.000119   0.000103   0.000100  0.0000022  0.0000177    0.000088    0.000077
+2002   3   2  52335  -0.120670   0.479874  -0.1626518   0.0016610   0.000172  -0.000159   0.000105   0.000101  0.0000007  0.0000187    0.000089    0.000076
+2002   3   3  52336  -0.118455   0.483083  -0.1642329   0.0015141   0.000188  -0.000217   0.000108   0.000104  0.0000006  0.0000194    0.000088    0.000073
+2002   3   4  52337  -0.116623   0.486051  -0.1656411   0.0012585   0.000178  -0.000256   0.000106   0.000102  0.0000005  0.0000181    0.000087    0.000070
+2002   3   5  52338  -0.114450   0.489078  -0.1667946   0.0009861   0.000151  -0.000256   0.000103   0.000099  0.0000004  0.0000169    0.000086    0.000066
+2002   3   6  52339  -0.111840   0.491932  -0.1676925   0.0008091   0.000092  -0.000175   0.000104   0.000100  0.0000005  0.0000171    0.000080    0.000067
+2002   3   7  52340  -0.108720   0.494559  -0.1684173   0.0006557   0.000097  -0.000109   0.000101   0.000099  0.0000003  0.0000174    0.000042    0.000035
+2002   3   8  52341  -0.105595   0.497255  -0.1690308   0.0005635   0.000197  -0.000150   0.000099   0.000098  0.0000004  0.0000174    0.000068    0.000059
+2002   3   9  52342  -0.102276   0.499887  -0.1695767   0.0005287   0.000272  -0.000203   0.000106   0.000102  0.0000004  0.0000182    0.000076    0.000066
+2002   3  10  52343  -0.099216   0.502593  -0.1701177   0.0005629   0.000300  -0.000241   0.000103   0.000098  0.0000003  0.0000190    0.000068    0.000059
+2002   3  11  52344  -0.096836   0.505342  -0.1707311   0.0006762   0.000284  -0.000252   0.000094   0.000091  0.0000003  0.0000180    0.000059    0.000052
+2002   3  12  52345  -0.094966   0.507768  -0.1714785   0.0008270   0.000241  -0.000233   0.000088   0.000087  0.0000003  0.0000166    0.000051    0.000045
+2002   3  13  52346  -0.092754   0.510000  -0.1723702   0.0009670   0.000159  -0.000163   0.000089   0.000088  0.0000004  0.0000160    0.000069    0.000062
+2002   3  14  52347  -0.090136   0.512400  -0.1733479   0.0010203   0.000165  -0.000129   0.000093   0.000090  0.0000005  0.0000157    0.000135    0.000079
+2002   3  15  52348  -0.087609   0.514517  -0.1743455   0.0009716   0.000242  -0.000227   0.000093   0.000090  0.0000005  0.0000158    0.000100    0.000073
+2002   3  16  52349  -0.084890   0.516617  -0.1753278   0.0008991   0.000262  -0.000306   0.000100   0.000096  0.0000005  0.0000168    0.000083    0.000069
+2002   3  17  52350  -0.081828   0.518718  -0.1762608   0.0008658   0.000241  -0.000328   0.000104   0.000099  0.0000004  0.0000167    0.000086    0.000070
+2002   3  18  52351  -0.078696   0.520418  -0.1770930   0.0008268   0.000214  -0.000288   0.000103   0.000099  0.0000004  0.0000157    0.000088    0.000071
+2002   3  19  52352  -0.075631   0.522454  -0.1777840   0.0007132   0.000201  -0.000204   0.000100   0.000098  0.0000003  0.0000150    0.000091    0.000072
+2002   3  20  52353  -0.072532   0.524204  -0.1783391   0.0005382   0.000271  -0.000064   0.000096   0.000094  0.0000142  0.0000145    0.000177    0.000257
+2002   3  21  52354  -0.069253   0.525863  -0.1788038   0.0004284   0.000311  -0.000019   0.000097   0.000093  0.0000317  0.0000144    0.001358    0.000567
+2002   3  22  52355  -0.065778   0.527668  -0.1792168   0.0003864   0.000279  -0.000104   0.000097   0.000092  0.0000100  0.0000147    0.000519    0.000226
+2002   3  23  52356  -0.062311   0.529373  -0.1796043   0.0003991   0.000247  -0.000218   0.000100   0.000096  0.0000005  0.0000154    0.000082    0.000072
+2002   3  24  52357  -0.058845   0.530837  -0.1800432   0.0005327   0.000223  -0.000298   0.000099   0.000095  0.0000005  0.0000167    0.000084    0.000071
+2002   3  25  52358  -0.055191   0.532461  -0.1806468   0.0007172   0.000205  -0.000304   0.000091   0.000088  0.0000005  0.0000169    0.000084    0.000070
+2002   3  26  52359  -0.051426   0.534221  -0.1815103   0.0010010   0.000192  -0.000238   0.000086   0.000084  0.0000004  0.0000161    0.000086    0.000068
+2002   3  27  52360  -0.047902   0.535985  -0.1826762   0.0013060   0.000224   0.000042   0.000083   0.000082  0.0000004  0.0000157    0.000073    0.000084
+2002   3  28  52361  -0.044862   0.537462  -0.1841010   0.0015334   0.000159  -0.000029   0.000086   0.000084  0.0000005  0.0000156    0.000090    0.000092
+2002   3  29  52362  -0.041724   0.538744  -0.1856485   0.0015477   0.000137  -0.000113   0.000086   0.000086  0.0000020  0.0000156    0.000097    0.000092
+2002   3  30  52363  -0.038211   0.539673  -0.1871418   0.0013585   0.000170  -0.000161   0.000088   0.000088  0.0000038  0.0000163    0.000097    0.000090
+2002   3  31  52364  -0.034497   0.540440  -0.1884409   0.0011469   0.000235  -0.000203   0.000091   0.000089  0.0000049  0.0000167    0.000096    0.000088
+2002   4   1  52365  -0.030707   0.540973  -0.1894848   0.0009528   0.000308  -0.000228   0.000086   0.000085  0.0000060  0.0000158    0.000095    0.000086
+2002   4   2  52366  -0.026950   0.541449  -0.1902792   0.0006922   0.000356  -0.000239   0.000082   0.000082  0.0000059  0.0000149    0.000095    0.000085
+2002   4   3  52367  -0.022913   0.541970  -0.1908642   0.0004834   0.000349  -0.000244   0.000081   0.000082  0.0000014  0.0000146    0.000094    0.000083
+2002   4   4  52368  -0.018870   0.543127  -0.1912972   0.0004052   0.000274  -0.000291   0.000080   0.000081  0.0000005  0.0000144    0.000080    0.000068
+2002   4   5  52369  -0.014845   0.544480  -0.1916728   0.0004048   0.000150  -0.000278   0.000084   0.000084  0.0000005  0.0000146    0.000080    0.000070
+2002   4   6  52370  -0.011623   0.545938  -0.1920753   0.0004595   0.000017  -0.000207   0.000088   0.000090  0.0000005  0.0000155    0.000080    0.000072
+2002   4   7  52371  -0.008757   0.547195  -0.1925570   0.0005529  -0.000072  -0.000133   0.000087   0.000090  0.0000005  0.0000154    0.000078    0.000070
+2002   4   8  52372  -0.006144   0.548114  -0.1931425   0.0006249  -0.000086  -0.000098   0.000082   0.000086  0.0000005  0.0000142    0.000075    0.000069
+2002   4   9  52373  -0.003820   0.548760  -0.1938382   0.0007487  -0.000030  -0.000118   0.000083   0.000086  0.0000005  0.0000136    0.000073    0.000068
+2002   4  10  52374  -0.001789   0.549495  -0.1946416   0.0008562   0.000161  -0.000269   0.000081   0.000082  0.0000005  0.0000136    0.000071    0.000068
+2002   4  11  52375   0.000603   0.549856  -0.1955413   0.0009276   0.000203  -0.000316   0.000077   0.000078  0.0000005  0.0000132    0.000079    0.000078
+2002   4  12  52376   0.003797   0.550529  -0.1965055   0.0009964   0.000149  -0.000263   0.000077   0.000078  0.0000007  0.0000131    0.000091    0.000091
+2002   4  13  52377   0.006802   0.551472  -0.1974708   0.0009156   0.000118  -0.000149   0.000080   0.000081  0.0000006  0.0000137    0.000088    0.000087
+2002   4  14  52378   0.009909   0.551995  -0.1983485   0.0007605   0.000122  -0.000039   0.000086   0.000087  0.0000005  0.0000140    0.000081    0.000078
+2002   4  15  52379   0.012981   0.552744  -0.1990588   0.0006328   0.000160   0.000000   0.000085   0.000087  0.0000004  0.0000133    0.000073    0.000068
+2002   4  16  52380   0.015667   0.553405  -0.1995709   0.0004452   0.000221  -0.000059   0.000085   0.000086  0.0000004  0.0000131    0.000066    0.000058
+2002   4  17  52381   0.018838   0.553847  -0.1999207   0.0002935   0.000282  -0.000277   0.000084   0.000085  0.0000029  0.0000134    0.000107    0.000073
+2002   4  18  52382   0.022230   0.554364  -0.2001926   0.0002335   0.000304  -0.000486   0.000083   0.000084  0.0000048  0.0000133    0.000160    0.000093
+2002   4  19  52383   0.025485   0.554728  -0.2004490   0.0002207   0.000223  -0.000377   0.000082   0.000083  0.0000015  0.0000132    0.000107    0.000088
+2002   4  20  52384   0.029039   0.554989  -0.2007073   0.0002111   0.000132  -0.000259   0.000082   0.000084  0.0000006  0.0000134    0.000080    0.000080
+2002   4  21  52385   0.032031   0.555165  -0.2010242   0.0003511   0.000060  -0.000180   0.000084   0.000086  0.0000005  0.0000134    0.000077    0.000073
+2002   4  22  52386   0.034884   0.555152  -0.2015105   0.0006086   0.000021  -0.000134   0.000080   0.000082  0.0000004  0.0000125    0.000073    0.000066
+2002   4  23  52387   0.037844   0.555031  -0.2022648   0.0009072   0.000029  -0.000137   0.000077   0.000078  0.0000004  0.0000118    0.000070    0.000059
+2002   4  24  52388   0.041291   0.554800  -0.2033057   0.0011821   0.000085  -0.000192   0.000076   0.000078  0.0000033  0.0000115    0.001536    0.001507
+2002   4  25  52389   0.044859   0.554695  -0.2045790   0.0013214   0.000154  -0.000222   0.000079   0.000082  0.0000054  0.0000118    0.001250    0.001228
+2002   4  26  52390   0.048726   0.554461  -0.2059906   0.0014079   0.000212  -0.000236   0.000079   0.000081  0.0000015  0.0000119    0.000335    0.000327
+2002   4  27  52391   0.052475   0.554142  -0.2073748   0.0013117   0.000234  -0.000259   0.000077   0.000079  0.0000005  0.0000120    0.000088    0.000085
+2002   4  28  52392   0.056224   0.553454  -0.2085540   0.0010337   0.000206  -0.000284   0.000078   0.000080  0.0000005  0.0000123    0.000088    0.000086
+2002   4  29  52393   0.059904   0.553152  -0.2094279   0.0006894   0.000135  -0.000308   0.000077   0.000079  0.0000005  0.0000120    0.000087    0.000087
+2002   4  30  52394   0.063465   0.552800  -0.2100003   0.0004423   0.000046  -0.000326   0.000075   0.000077  0.0000005  0.0000117    0.000086    0.000088
+2002   5   1  52395   0.066819   0.552740  -0.2103467   0.0002871  -0.000031  -0.000332   0.000075   0.000077  0.0000071  0.0000119    0.000093    0.000089
+2002   5   2  52396   0.069967   0.552463  -0.2105654   0.0001890  -0.000059  -0.000315   0.000078   0.000080  0.0000119  0.0000121    0.000101    0.000088
+2002   5   3  52397   0.073389   0.552154  -0.2107535   0.0002021  -0.000024  -0.000273   0.000080   0.000081  0.0000030  0.0000122    0.000109    0.000088
+2002   5   4  52398   0.076853   0.552050  -0.2109987   0.0002980   0.000077  -0.000201   0.000080   0.000081  0.0000006  0.0000128    0.000108    0.000090
+2002   5   5  52399   0.080684   0.551889  -0.2113705   0.0004434   0.000194  -0.000133   0.000084   0.000085  0.0000006  0.0000135    0.000104    0.000092
+2002   5   6  52400   0.084636   0.551822  -0.2119083   0.0006474   0.000270  -0.000097   0.000091   0.000091  0.0000005  0.0000137    0.000100    0.000094
+2002   5   7  52401   0.088509   0.551397  -0.2126136   0.0007960   0.000276  -0.000103   0.000089   0.000089  0.0000005  0.0000135    0.000096    0.000095
+2002   5   8  52402   0.091552   0.550944  -0.2134515   0.0008904   0.000156  -0.000204   0.000082   0.000083  0.0000006  0.0000133    0.000062    0.000058
+2002   5   9  52403   0.094223   0.550145  -0.2143638   0.0009659   0.000057  -0.000232   0.000079   0.000080  0.0000004  0.0000130    0.000041    0.000032
+2002   5  10  52404   0.097760   0.549336  -0.2153289   0.0009968   0.000017  -0.000191   0.000081   0.000082  0.0000009  0.0000133    0.000085    0.000081
+2002   5  11  52405   0.101140   0.549069  -0.2162946   0.0009557   0.000034  -0.000153   0.000088   0.000088  0.0000010  0.0000142    0.000097    0.000094
+2002   5  12  52406   0.103906   0.548625  -0.2172013   0.0008476   0.000093  -0.000139   0.000090   0.000090  0.0000009  0.0000141    0.000089    0.000087
+2002   5  13  52407   0.106791   0.547813  -0.2180167   0.0007835   0.000164  -0.000158   0.000087   0.000086  0.0000008  0.0000128    0.000081    0.000079
+2002   5  14  52408   0.109695   0.546940  -0.2187296   0.0006753   0.000217  -0.000203   0.000085   0.000084  0.0000006  0.0000121    0.000074    0.000072
+2002   5  15  52409   0.112066   0.545764  -0.2193425   0.0005512   0.000210  -0.000281   0.000084   0.000084  0.0000007  0.0000122    0.000088    0.000075
+2002   5  16  52410   0.114145   0.544321  -0.2198674   0.0004809   0.000171  -0.000316   0.000083   0.000083  0.0000009  0.0000120    0.000108    0.000080
+2002   5  17  52411   0.116426   0.542574  -0.2203491   0.0004846   0.000166  -0.000169   0.000083   0.000082  0.0000006  0.0000117    0.000089    0.000082
+2002   5  18  52412   0.119113   0.541470  -0.2208838   0.0005792   0.000141  -0.000042   0.000092   0.000091  0.0000005  0.0000123    0.000078    0.000078
+2002   5  19  52413   0.121972   0.540692  -0.2215732   0.0007565   0.000097   0.000020   0.000094   0.000093  0.0000005  0.0000136    0.000075    0.000071
+2002   5  20  52414   0.125165   0.540091  -0.2224844   0.0009959   0.000045   0.000014   0.000085   0.000085  0.0000004  0.0000136    0.000072    0.000065
+2002   5  21  52415   0.128488   0.539683  -0.2236320   0.0012568  -0.000006  -0.000053   0.000082   0.000083  0.0000004  0.0000128    0.000069    0.000058
+2002   5  22  52416   0.131184   0.539025  -0.2249736   0.0013972  -0.000047  -0.000150   0.000081   0.000082  0.0000032  0.0000126    0.000080    0.000067
+2002   5  23  52417   0.133609   0.538176  -0.2264148   0.0014061  -0.000058  -0.000227   0.000080   0.000081  0.0000053  0.0000125    0.000094    0.000080
+2002   5  24  52418   0.135952   0.537154  -0.2278074   0.0013042  -0.000028  -0.000242   0.000081   0.000082  0.0000017  0.0000123    0.000109    0.000092
+2002   5  25  52419   0.138212   0.536191  -0.2289843   0.0010737   0.000046  -0.000158   0.000084   0.000087  0.0000007  0.0000126    0.000239    0.000146
+2002   5  26  52420   0.140522   0.535149  -0.2298501   0.0007715   0.000132  -0.000028   0.000092   0.000096  0.0000007  0.0000123    0.000412    0.000215
+2002   5  27  52421   0.143130   0.533961  -0.2304169   0.0004414   0.000191   0.000083   0.000093   0.000097  0.0000006  0.0000112    0.000585    0.000283
+2002   5  28  52422   0.146236   0.532889  -0.2307649   0.0001869   0.000195   0.000099   0.000088   0.000091  0.0000006  0.0000107    0.000588    0.000286
+2002   5  29  52423   0.149086   0.531635  -0.2309689   0.0000564   0.000136  -0.000016   0.000086   0.000089  0.0000006  0.0000107    0.000168    0.000127
+2002   5  30  52424   0.151907   0.530240  -0.2310606   0.0000277   0.000045  -0.000127   0.000088   0.000091  0.0000006  0.0000107    0.000418    0.002366
+2002   5  31  52425   0.154710   0.528740  -0.2310737   0.0000636  -0.000026  -0.000184   0.000089   0.000091  0.0000007  0.0000108    0.000237    0.000880
+2002   6   1  52426   0.157344   0.527242  -0.2310960   0.0000739  -0.000020  -0.000192   0.000092   0.000093  0.0000006  0.0000113    0.000124    0.000087
+2002   6   2  52427   0.159849   0.525453  -0.2312081   0.0001207   0.000048  -0.000155   0.000094   0.000095  0.0000006  0.0000116    0.000109    0.000078
+2002   6   3  52428   0.162547   0.523562  -0.2314070   0.0001845   0.000134  -0.000102   0.000088   0.000089  0.0000005  0.0000110    0.000095    0.000070
+2002   6   4  52429   0.165255   0.521872  -0.2316170   0.0002123   0.000192  -0.000066   0.000085   0.000086  0.0000004  0.0000105    0.000081    0.000062
+2002   6   5  52430   0.168414   0.520218  -0.2317805   0.0001726   0.000228  -0.000057   0.000086   0.000087  0.0000180  0.0000107    0.000219    0.000138
+2002   6   6  52431   0.171408   0.518626  -0.2319371   0.0000626   0.000123  -0.000140   0.000086   0.000087  0.0000084  0.0000109    0.000202    0.000140
+2002   6   7  52432   0.174581   0.516954  -0.2319647  -0.0000425  -0.000018  -0.000249   0.000086   0.000087  0.0000027  0.0000110    0.000128    0.000113
+2002   6   8  52433   0.177676   0.515284  -0.2318524  -0.0001820  -0.000046  -0.000278   0.000087   0.000088  0.0000010  0.0000112    0.000102    0.000097
+2002   6   9  52434   0.180752   0.513679  -0.2316088  -0.0003242   0.000013  -0.000250   0.000091   0.000093  0.0000009  0.0000119    0.000093    0.000087
+2002   6  10  52435   0.183614   0.512010  -0.2312306  -0.0004737   0.000108  -0.000208   0.000092   0.000094  0.0000008  0.0000117    0.000084    0.000076
+2002   6  11  52436   0.186147   0.510083  -0.2307221  -0.0006066   0.000185  -0.000186   0.000089   0.000090  0.0000006  0.0000113    0.000074    0.000065
+2002   6  12  52437   0.188435   0.508092  -0.2301000  -0.0006905   0.000178  -0.000248   0.000089   0.000091  0.0000007  0.0000114    0.000083    0.000079
+2002   6  13  52438   0.190769   0.505948  -0.2294023  -0.0007112   0.000117  -0.000332   0.000089   0.000091  0.0000008  0.0000113    0.000096    0.000099
+2002   6  14  52439   0.193280   0.504167  -0.2287121  -0.0006455   0.000044  -0.000321   0.000089   0.000091  0.0000009  0.0000112    0.000113    0.000103
+2002   6  15  52440   0.195924   0.502412  -0.2281719  -0.0004388   0.000029  -0.000279   0.000090   0.000092  0.0000008  0.0000115    0.000113    0.000098
+2002   6  16  52441   0.199106   0.500325  -0.2278934  -0.0001650   0.000075  -0.000233   0.000091   0.000093  0.0000007  0.0000110    0.000106    0.000093
+2002   6  17  52442   0.202340   0.497974  -0.2278923   0.0000878   0.000155  -0.000196   0.000092   0.000094  0.0000007  0.0000098    0.000099    0.000087
+2002   6  18  52443   0.204950   0.495546  -0.2280835   0.0002305   0.000226  -0.000187   0.000089   0.000092  0.0000006  0.0000095    0.000093    0.000082
+2002   6  19  52444   0.207471   0.493065  -0.2283481   0.0003060   0.000319  -0.000237   0.000087   0.000090  0.0000085  0.0000094    0.000138    0.000282
+2002   6  20  52445   0.210271   0.490736  -0.2286516   0.0003178   0.000227  -0.000267   0.000088   0.000091  0.0000142  0.0000094    0.000081    0.000134
+2002   6  21  52446   0.212669   0.488968  -0.2289845   0.0002494   0.000024  -0.000229   0.000088   0.000090  0.0000038  0.0000094    0.000101    0.000095
+2002   6  22  52447   0.214611   0.486975  -0.2292383   0.0001586  -0.000013  -0.000186   0.000090   0.000091  0.0000009  0.0000098    0.000113    0.000102
+2002   6  23  52448   0.216608   0.484575  -0.2293308   0.0000172   0.000066  -0.000155   0.000091   0.000092  0.0000008  0.0000107    0.000106    0.000098
+2002   6  24  52449   0.218274   0.482106  -0.2292678  -0.0001209   0.000167  -0.000153   0.000091   0.000093  0.0000007  0.0000109    0.000100    0.000094
+2002   6  25  52450   0.219553   0.479470  -0.2291183  -0.0001718   0.000240  -0.000188   0.000087   0.000090  0.0000006  0.0000105    0.000094    0.000089
+2002   6  26  52451   0.220870   0.476532  -0.2289633  -0.0001498   0.000040  -0.000263   0.000087   0.000090  0.0000007  0.0000105    0.000105    0.000084
+2002   6  27  52452   0.222503   0.473489  -0.2288449  -0.0000921   0.000066  -0.000346   0.000091   0.000094  0.0000007  0.0000104    0.000106    0.000083
+2002   6  28  52453   0.224443   0.470323  -0.2287882  -0.0000106   0.000197  -0.000404   0.000091   0.000094  0.0000006  0.0000102    0.000103    0.000084
+2002   6  29  52454   0.225975   0.467449  -0.2288166   0.0000865   0.000225  -0.000399   0.000092   0.000094  0.0000006  0.0000105    0.000095    0.000079
+2002   6  30  52455   0.227130   0.464683  -0.2289505   0.0001958   0.000180  -0.000353   0.000091   0.000093  0.0000005  0.0000110    0.000087    0.000072
+2002   7   1  52456   0.228134   0.461824  -0.2292032   0.0002921   0.000107  -0.000299   0.000089   0.000091  0.0000005  0.0000110    0.000078    0.000065
+2002   7   2  52457   0.228825   0.458803  -0.2295684   0.0004165   0.000048  -0.000261   0.000087   0.000089  0.0000004  0.0000110    0.000068    0.000057
+2002   7   3  52458   0.229539   0.455775  -0.2300067   0.0004600   0.000078  -0.000299   0.000086   0.000088  0.0000006  0.0000111    0.000108    0.000086
+2002   7   4  52459   0.229926   0.452927  -0.2304497   0.0004002   0.000144  -0.000299   0.000089   0.000091  0.0000089  0.0000113    0.000120    0.000098
+2002   7   5  52460   0.230384   0.449825  -0.2308053   0.0003343   0.000216  -0.000265   0.000092   0.000093  0.0000109  0.0000116    0.000118    0.000100
+2002   7   6  52461   0.230756   0.446646  -0.2310258   0.0001678   0.000265  -0.000224   0.000095   0.000096  0.0000081  0.0000121    0.000116    0.000103
+2002   7   7  52462   0.231508   0.442953  -0.2311136   0.0000229   0.000260  -0.000195   0.000096   0.000097  0.0000057  0.0000122    0.000114    0.000106
+2002   7   8  52463   0.232389   0.439729  -0.2310752  -0.0000933   0.000199  -0.000201   0.000092   0.000092  0.0000034  0.0000113    0.000112    0.000109
+2002   7   9  52464   0.233036   0.436567  -0.2309186  -0.0002081   0.000107  -0.000240   0.000089   0.000090  0.0000011  0.0000110    0.000110    0.000112
+2002   7  10  52465   0.234005   0.433447  -0.2306690  -0.0002747  -0.000026  -0.000350   0.000090   0.000091  0.0000009  0.0000112    0.000148    0.000162
+2002   7  11  52466   0.235407   0.430580  -0.2303916  -0.0002461  -0.000056  -0.000409   0.000090   0.000090  0.0000007  0.0000109    0.000120    0.000117
+2002   7  12  52467   0.236785   0.427659  -0.2301812  -0.0001211   0.000078  -0.000284   0.000096   0.000095  0.0000007  0.0000107    0.000093    0.000079
+2002   7  13  52468   0.238053   0.424667  -0.2301700   0.0001039   0.000188  -0.000200   0.000106   0.000104  0.0000007  0.0000112    0.000089    0.000074
+2002   7  14  52469   0.239159   0.421597  -0.2304264   0.0003603   0.000240  -0.000182   0.000105   0.000103  0.0000007  0.0000125    0.000090    0.000075
+2002   7  15  52470   0.240228   0.418491  -0.2309036   0.0005479   0.000228  -0.000207   0.000100   0.000099  0.0000007  0.0000128    0.000091    0.000077
+2002   7  16  52471   0.241157   0.415706  -0.2314813   0.0005852   0.000160  -0.000266   0.000096   0.000096  0.0000007  0.0000122    0.000092    0.000078
+2002   7  17  52472   0.241869   0.413002  -0.2320356   0.0005166   0.000073  -0.000298   0.000096   0.000096  0.0000076  0.0000118    0.000098    0.000095
+2002   7  18  52473   0.242914   0.410461  -0.2324954   0.0003891   0.000004  -0.000307   0.000098   0.000098  0.0000137  0.0000116    0.000105    0.000115
+2002   7  19  52474   0.243940   0.408353  -0.2328001   0.0001605  -0.000012  -0.000345   0.000097   0.000098  0.0000034  0.0000115    0.000115    0.000112
+2002   7  20  52475   0.244334   0.405821  -0.2328558  -0.0001477   0.000006  -0.000320   0.000100   0.000102  0.0000006  0.0000119    0.000113    0.000104
+2002   7  21  52476   0.244789   0.402984  -0.2326133  -0.0004112   0.000026  -0.000258   0.000101   0.000102  0.0000006  0.0000117    0.000105    0.000098
+2002   7  22  52477   0.245521   0.399932  -0.2321022  -0.0005833   0.000029  -0.000207   0.000098   0.000099  0.0000006  0.0000109    0.000097    0.000091
+2002   7  23  52478   0.246291   0.397185  -0.2314155  -0.0006641   0.000015  -0.000188   0.000093   0.000095  0.0000005  0.0000106    0.000090    0.000085
+2002   7  24  52479   0.246686   0.394298  -0.2306734  -0.0007294  -0.000041  -0.000240   0.000092   0.000093  0.0000005  0.0000105    0.000069    0.000066
+2002   7  25  52480   0.246995   0.391279  -0.2299809  -0.0006638  -0.000051  -0.000307   0.000091   0.000093  0.0000004  0.0000106    0.000045    0.000044
+2002   7  26  52481   0.246921   0.388106  -0.2294061  -0.0005241   0.000155  -0.000304   0.000092   0.000093  0.0000008  0.0000108    0.000135    0.000129
+2002   7  27  52482   0.246846   0.384601  -0.2289772  -0.0004053   0.000327  -0.000275   0.000097   0.000098  0.0000009  0.0000111    0.000163    0.000149
+2002   7  28  52483   0.247175   0.380762  -0.2286814  -0.0002516   0.000407  -0.000244   0.000101   0.000102  0.0000009  0.0000117    0.000154    0.000133
+2002   7  29  52484   0.247645   0.377033  -0.2284757  -0.0001616   0.000384  -0.000228   0.000100   0.000100  0.0000009  0.0000117    0.000145    0.000117
+2002   7  30  52485   0.248473   0.373433  -0.2283032  -0.0001934   0.000264  -0.000244   0.000096   0.000097  0.0000009  0.0000116    0.000135    0.000101
+2002   7  31  52486   0.249809   0.370090  -0.2281101  -0.0002350   0.000085  -0.000305   0.000096   0.000097  0.0000053  0.0000118    0.000134    0.000108
+2002   8   1  52487   0.251269   0.366999  -0.2278561  -0.0002939  -0.000076  -0.000372   0.000096   0.000097  0.0000084  0.0000119    0.000135    0.000121
+2002   8   2  52488   0.252292   0.364419  -0.2275179  -0.0003862  -0.000160  -0.000409   0.000096   0.000097  0.0000024  0.0000121    0.000136    0.000134
+2002   8   3  52489   0.252926   0.361775  -0.2270831  -0.0004719  -0.000115  -0.000379   0.000102   0.000103  0.0000008  0.0000127    0.000132    0.000129
+2002   8   4  52490   0.253979   0.359107  -0.2265407  -0.0006231   0.000002  -0.000308   0.000105   0.000105  0.0000007  0.0000127    0.000125    0.000118
+2002   8   5  52491   0.255033   0.356570  -0.2258907  -0.0007152   0.000117  -0.000237   0.000101   0.000100  0.0000007  0.0000118    0.000118    0.000107
+2002   8   6  52492   0.255722   0.353581  -0.2251660  -0.0007398   0.000187  -0.000195   0.000096   0.000096  0.0000006  0.0000113    0.000111    0.000096
+2002   8   7  52493   0.256762   0.350451  -0.2244483  -0.0006617   0.000037  -0.000244   0.000093   0.000094  0.0000006  0.0000113    0.000097    0.000083
+2002   8   8  52494   0.257990   0.347575  -0.2238604  -0.0004655   0.000060  -0.000265   0.000096   0.000096  0.0000007  0.0000114    0.000113    0.000094
+2002   8   9  52495   0.259058   0.345017  -0.2235147  -0.0002169   0.000151  -0.000246   0.000098   0.000098  0.0000008  0.0000116    0.000137    0.000113
+2002   8  10  52496   0.259969   0.342432  -0.2234733   0.0000877   0.000130  -0.000184   0.000100   0.000100  0.0000008  0.0000122    0.000141    0.000114
+2002   8  11  52497   0.260500   0.339943  -0.2237307   0.0003642   0.000038  -0.000105   0.000104   0.000103  0.0000007  0.0000127    0.000136    0.000109
+2002   8  12  52498   0.260517   0.337074  -0.2242132   0.0005547  -0.000073  -0.000047   0.000101   0.000101  0.0000007  0.0000122    0.000132    0.000104
+2002   8  13  52499   0.260708   0.333937  -0.2247959   0.0005760  -0.000162  -0.000038   0.000098   0.000099  0.0000006  0.0000119    0.000128    0.000100
+2002   8  14  52500   0.260868   0.331078  -0.2253370   0.0004743  -0.000139  -0.000135   0.000100   0.000100  0.0000069  0.0000121    0.000115    0.000090
+2002   8  15  52501   0.260803   0.328368  -0.2257137   0.0002580  -0.000072  -0.000265   0.000099   0.000100  0.0000125  0.0000122    0.000100    0.000078
+2002   8  16  52502   0.260578   0.325775  -0.2258633   0.0000364  -0.000132  -0.000264   0.000097   0.000098  0.0000033  0.0000121    0.000109    0.000088
+2002   8  17  52503   0.260316   0.323193  -0.2257951  -0.0001740  -0.000130  -0.000263   0.000100   0.000100  0.0000008  0.0000125    0.000109    0.000089
+2002   8  18  52504   0.259753   0.320484  -0.2255497  -0.0002984  -0.000078  -0.000265   0.000101   0.000101  0.0000008  0.0000123    0.000101    0.000083
+2002   8  19  52505   0.259177   0.317805  -0.2251844  -0.0003787  -0.000021  -0.000257   0.000099   0.000098  0.0000007  0.0000109    0.000093    0.000078
+2002   8  20  52506   0.258512   0.314876  -0.2247800  -0.0003751   0.000017  -0.000250   0.000093   0.000093  0.0000006  0.0000103    0.000086    0.000072
+2002   8  21  52507   0.257886   0.311968  -0.2244377  -0.0002697   0.000000  -0.000248   0.000092   0.000093  0.0000054  0.0000103    0.000091    0.000078
+2002   8  22  52508   0.257252   0.308877  -0.2242557  -0.0000893  -0.000043  -0.000257   0.000094   0.000094  0.0000088  0.0000103    0.000099    0.000086
+2002   8  23  52509   0.256714   0.305618  -0.2242576   0.0000551  -0.000079  -0.000271   0.000096   0.000094  0.0000023  0.0000106    0.000108    0.000094
+2002   8  24  52510   0.256338   0.302295  -0.2243768   0.0001662  -0.000072  -0.000283   0.000101   0.000098  0.0000006  0.0000114    0.000105    0.000091
+2002   8  25  52511   0.255560   0.298930  -0.2245663   0.0002296  -0.000032  -0.000289   0.000104   0.000100  0.0000005  0.0000125    0.000099    0.000085
+2002   8  26  52512   0.254923   0.295353  -0.2248264   0.0002804   0.000011  -0.000286   0.000105   0.000101  0.0000005  0.0000125    0.000093    0.000079
+2002   8  27  52513   0.254608   0.291949  -0.2251563   0.0003273   0.000031  -0.000275   0.000100   0.000096  0.0000004  0.0000117    0.000086    0.000073
+2002   8  28  52514   0.254547   0.288564  -0.2255028   0.0002720  -0.000003  -0.000255   0.000098   0.000094  0.0000078  0.0000116    0.000799    0.000232
+2002   8  29  52515   0.254615   0.285680  -0.2257527   0.0001662  -0.000067  -0.000222   0.000102   0.000098  0.0000155  0.0000118    0.001699    0.000434
+2002   8  30  52516   0.254130   0.282540  -0.2258282   0.0000309  -0.000134  -0.000178   0.000105   0.000101  0.0000037  0.0000122    0.000591    0.000196
+2002   8  31  52517   0.253571   0.279401  -0.2257620  -0.0000855  -0.000157  -0.000122   0.000106   0.000102  0.0000005  0.0000130    0.000111    0.000088
+2002   9   1  52518   0.252793   0.276305  -0.2256103  -0.0001661  -0.000138  -0.000074   0.000109   0.000103  0.0000005  0.0000131    0.000110    0.000083
+2002   9   2  52519   0.251661   0.273049  -0.2254075  -0.0002285  -0.000096  -0.000060   0.000108   0.000102  0.0000005  0.0000120    0.000109    0.000079
+2002   9   3  52520   0.250098   0.269936  -0.2251803  -0.0002499  -0.000059  -0.000093   0.000107   0.000102  0.0000005  0.0000117    0.000108    0.000074
+2002   9   4  52521   0.249099   0.266794  -0.2249850  -0.0001146  -0.000014  -0.000182   0.000104   0.000100  0.0000005  0.0000118    0.000074    0.000071
+2002   9   5  52522   0.248306   0.263823  -0.2249298   0.0000975  -0.000091  -0.000280   0.000102   0.000097  0.0000138  0.0000115    0.000112    0.000123
+2002   9   6  52523   0.247472   0.260792  -0.2251566   0.0003678  -0.000148  -0.000382   0.000104   0.000098  0.0000051  0.0000117    0.000092    0.000088
+2002   9   7  52524   0.246239   0.258208  -0.2256884   0.0006758  -0.000065  -0.000419   0.000108   0.000101  0.0000049  0.0000127    0.000146    0.000306
+2002   9   8  52525   0.244699   0.255847  -0.2265031   0.0009349   0.000051  -0.000396   0.000112   0.000104  0.0000109  0.0000132    0.000237    0.000630
+2002   9   9  52526   0.242832   0.253410  -0.2275319   0.0010408   0.000066  -0.000340   0.000110   0.000104  0.0000128  0.0000120    0.000265    0.000736
+2002   9  10  52527   0.241004   0.250689  -0.2285829   0.0009388  -0.000102  -0.000280   0.000104   0.000099  0.0000029  0.0000110    0.000103    0.000188
+2002   9  11  52528   0.239335   0.248233  -0.2294109   0.0007081  -0.000326  -0.000267   0.000101   0.000097  0.0000035  0.0000109    0.000076    0.000067
+2002   9  12  52529   0.237497   0.245705  -0.2299577   0.0004342  -0.000472  -0.000275   0.000101   0.000097  0.0000055  0.0000108    0.000085    0.000063
+2002   9  13  52530   0.235855   0.242928  -0.2302889   0.0002378  -0.000180  -0.000273   0.000099   0.000095  0.0000017  0.0000109    0.000091    0.000080
+2002   9  14  52531   0.234236   0.239908  -0.2304444   0.0000746   0.000022  -0.000245   0.000104   0.000098  0.0000006  0.0000118    0.000093    0.000082
+2002   9  15  52532   0.232936   0.236914  -0.2304679  -0.0000316   0.000088  -0.000202   0.000107   0.000101  0.0000006  0.0000124    0.000094    0.000078
+2002   9  16  52533   0.231768   0.234783  -0.2304212  -0.0000352   0.000071  -0.000158   0.000102   0.000097  0.0000005  0.0000114    0.000095    0.000073
+2002   9  17  52534   0.230167   0.232842  -0.2303763   0.0000123  -0.000009  -0.000125   0.000098   0.000095  0.0000005  0.0000106    0.000095    0.000068
+2002   9  18  52535   0.227986   0.231106  -0.2303973   0.0000858  -0.000113  -0.000162   0.000095   0.000093  0.0000006  0.0000104    0.000076    0.000064
+2002   9  19  52536   0.225411   0.229315  -0.2305186   0.0002033  -0.000130  -0.000148   0.000097   0.000093  0.0000006  0.0000105    0.000079    0.000069
+2002   9  20  52537   0.222385   0.227433  -0.2307521   0.0002857  -0.000081  -0.000128   0.000098   0.000094  0.0000006  0.0000108    0.000089    0.000076
+2002   9  21  52538   0.219462   0.225108  -0.2310917   0.0003659  -0.000014  -0.000177   0.000101   0.000097  0.0000006  0.0000116    0.000089    0.000074
+2002   9  22  52539   0.216746   0.222955  -0.2315104   0.0004315   0.000038  -0.000253   0.000106   0.000102  0.0000006  0.0000118    0.000085    0.000068
+2002   9  23  52540   0.214430   0.220628  -0.2319628   0.0004682   0.000045  -0.000310   0.000104   0.000099  0.0000005  0.0000107    0.000081    0.000062
+2002   9  24  52541   0.212321   0.218075  -0.2323936   0.0004057   0.000008  -0.000315   0.000101   0.000099  0.0000005  0.0000101    0.000076    0.000057
+2002   9  25  52542   0.210525   0.215644  -0.2327508   0.0003103  -0.000101  -0.000221   0.000099   0.000097  0.0000004  0.0000099    0.000060    0.000045
+2002   9  26  52543   0.208797   0.213312  -0.2329988   0.0001702  -0.000180  -0.000094   0.000092   0.000091  0.0000003  0.0000098    0.000041    0.000031
+2002   9  27  52544   0.206817   0.211045  -0.2331203   0.0000774  -0.000022  -0.000038   0.000092   0.000092  0.0000007  0.0000100    0.000073    0.000067
+2002   9  28  52545   0.204790   0.208712  -0.2331136  -0.0000335   0.000090  -0.000033   0.000100   0.000098  0.0000007  0.0000107    0.000082    0.000077
+2002   9  29  52546   0.202697   0.206099  -0.2330104  -0.0001104   0.000127  -0.000064   0.000100   0.000098  0.0000007  0.0000115    0.000075    0.000071
+2002   9  30  52547   0.200616   0.203505  -0.2328744  -0.0001455   0.000112  -0.000108   0.000096   0.000096  0.0000006  0.0000111    0.000068    0.000065
+2002  10   1  52548   0.198500   0.200643  -0.2327820  -0.0000577   0.000058  -0.000136   0.000091   0.000092  0.0000005  0.0000106    0.000062    0.000059
+2002  10   2  52549   0.196632   0.198420  -0.2328068   0.0001107   0.000013  -0.000120   0.000088   0.000090  0.0000053  0.0000104    0.000064    0.000061
+2002  10   3  52550   0.194701   0.195803  -0.2330103   0.0003388  -0.000017  -0.000078   0.000091   0.000093  0.0000065  0.0000105    0.000069    0.000065
+2002  10   4  52551   0.192524   0.193706  -0.2334666   0.0006249  -0.000032  -0.000038   0.000090   0.000092  0.0000017  0.0000106    0.000074    0.000070
+2002  10   5  52552   0.189949   0.191541  -0.2342356   0.0009248  -0.000044  -0.000034   0.000091   0.000093  0.0000004  0.0000110    0.000072    0.000068
+2002  10   6  52553   0.187311   0.189493  -0.2352772   0.0011283  -0.000057  -0.000059   0.000094   0.000096  0.0000005  0.0000116    0.000068    0.000064
+2002  10   7  52554   0.184987   0.187381  -0.2364418   0.0011439  -0.000072  -0.000095   0.000093   0.000095  0.0000005  0.0000113    0.000064    0.000060
+2002  10   8  52555   0.182500   0.185194  -0.2375352   0.0010029  -0.000087  -0.000122   0.000089   0.000091  0.0000005  0.0000106    0.000059    0.000056
+2002  10   9  52556   0.180013   0.182965  -0.2384064   0.0007485  -0.000103  -0.000104   0.000087   0.000088  0.0000010  0.0000104    0.000074    0.000080
+2002  10  10  52557   0.177981   0.180866  -0.2390045   0.0004701  -0.000090  -0.000067   0.000088   0.000090  0.0000158  0.0000105    0.000074    0.000060
+2002  10  11  52558   0.175559   0.179136  -0.2393636   0.0002461  -0.000064  -0.000045   0.000090   0.000091  0.0000059  0.0000108    0.000091    0.000080
+2002  10  12  52559   0.173078   0.177163  -0.2395586   0.0001215  -0.000025   0.000005   0.000094   0.000095  0.0000007  0.0000115    0.000095    0.000087
+2002  10  13  52560   0.170964   0.175311  -0.2396870   0.0001249   0.000009   0.000059   0.000095   0.000098  0.0000006  0.0000123    0.000092    0.000083
+2002  10  14  52561   0.168546   0.173657  -0.2398435   0.0002284   0.000018   0.000084   0.000095   0.000098  0.0000005  0.0000120    0.000088    0.000078
+2002  10  15  52562   0.165868   0.171886  -0.2400977   0.0003425   0.000000   0.000066   0.000094   0.000097  0.0000005  0.0000114    0.000085    0.000074
+2002  10  16  52563   0.163458   0.170321  -0.2404881   0.0004590  -0.000079  -0.000012   0.000094   0.000097  0.0000013  0.0000112    0.000093    0.000102
+2002  10  17  52564   0.161165   0.169042  -0.2410175   0.0006102  -0.000105  -0.000118   0.000092   0.000094  0.0000007  0.0000111    0.000064    0.000066
+2002  10  18  52565   0.158314   0.167961  -0.2417010   0.0007318  -0.000098  -0.000178   0.000089   0.000090  0.0000004  0.0000110    0.000054    0.000050
+2002  10  19  52566   0.154577   0.166881  -0.2424338   0.0007471  -0.000067  -0.000196   0.000089   0.000090  0.0000004  0.0000113    0.000051    0.000047
+2002  10  20  52567   0.150380   0.165599  -0.2431923   0.0007494  -0.000059  -0.000159   0.000089   0.000089  0.0000004  0.0000119    0.000047    0.000044
+2002  10  21  52568   0.146571   0.164148  -0.2439468   0.0007324  -0.000101  -0.000101   0.000086   0.000085  0.0000003  0.0000119    0.000044    0.000041
+2002  10  22  52569   0.143239   0.162878  -0.2446799   0.0007057  -0.000132  -0.000067   0.000083   0.000082  0.0000003  0.0000113    0.000046    0.000045
+2002  10  23  52570   0.139954   0.161586  -0.2453506   0.0006271  -0.000133  -0.000071   0.000083   0.000082  0.0000004  0.0000114    0.000051    0.000047
+2002  10  24  52571   0.136689   0.160223  -0.2459127   0.0004925  -0.000150  -0.000093   0.000085   0.000084  0.0000004  0.0000119    0.000051    0.000049
+2002  10  25  52572   0.133052   0.158623  -0.2463383   0.0003615  -0.000138  -0.000150   0.000087   0.000086  0.0000004  0.0000124    0.000053    0.000051
+2002  10  26  52573   0.129476   0.156906  -0.2466312   0.0002554  -0.000090  -0.000213   0.000089   0.000088  0.0000005  0.0000130    0.000066    0.000063
+2002  10  27  52574   0.125887   0.155508  -0.2468474   0.0002137  -0.000051  -0.000219   0.000091   0.000089  0.0000005  0.0000133    0.000074    0.000068
+2002  10  28  52575   0.122324   0.154159  -0.2470319   0.0002032  -0.000046  -0.000186   0.000088   0.000087  0.0000005  0.0000125    0.000067    0.000059
+2002  10  29  52576   0.118910   0.153112  -0.2472043   0.0002487  -0.000057  -0.000158   0.000085   0.000083  0.0000004  0.0000116    0.000055    0.000048
+2002  10  30  52577   0.115436   0.152303  -0.2475187   0.0004557  -0.000097  -0.000130   0.000084   0.000081  0.0000004  0.0000114    0.000056    0.000049
+2002  10  31  52578   0.111562   0.151754  -0.2480849   0.0007353  -0.000130  -0.000107   0.000084   0.000081  0.0000004  0.0000114    0.000051    0.000046
+2002  11   1  52579   0.107607   0.150892  -0.2489263   0.0010034  -0.000076  -0.000096   0.000085   0.000082  0.0000004  0.0000116    0.000073    0.000071
+2002  11   2  52580   0.103569   0.150269  -0.2500185   0.0012089  -0.000059  -0.000088   0.000092   0.000090  0.0000004  0.0000125    0.000081    0.000079
+2002  11   3  52581   0.099932   0.149514  -0.2512621   0.0012881  -0.000076  -0.000088   0.000102   0.000099  0.0000004  0.0000135    0.000079    0.000078
+2002  11   4  52582   0.096534   0.149151  -0.2525021   0.0011710  -0.000102  -0.000097   0.000103   0.000099  0.0000004  0.0000128    0.000078    0.000077
+2002  11   5  52583   0.092788   0.148522  -0.2535854   0.0009466  -0.000120  -0.000108   0.000098   0.000095  0.0000004  0.0000118    0.000076    0.000076
+2002  11   6  52584   0.088853   0.147727  -0.2544165   0.0006991  -0.000102  -0.000136   0.000095   0.000092  0.0000008  0.0000117    0.000074    0.000075
+2002  11   7  52585   0.084773   0.147198  -0.2549841   0.0004683  -0.000049  -0.000131   0.000094   0.000091  0.0000006  0.0000117    0.000083    0.000082
+2002  11   8  52586   0.080738   0.146313  -0.2553354   0.0002743  -0.000053  -0.000059   0.000093   0.000091  0.0000005  0.0000118    0.000078    0.000071
+2002  11   9  52587   0.076680   0.145706  -0.2555239   0.0001531  -0.000061  -0.000007   0.000101   0.000098  0.0000005  0.0000127    0.000076    0.000066
+2002  11  10  52588   0.072882   0.145087  -0.2556219   0.0000874  -0.000075   0.000010   0.000103   0.000100  0.0000005  0.0000137    0.000076    0.000065
+2002  11  11  52589   0.069248   0.144779  -0.2557238   0.0001342  -0.000103  -0.000004   0.000096   0.000092  0.0000005  0.0000133    0.000076    0.000064
+2002  11  12  52590   0.065942   0.144444  -0.2559198   0.0002460  -0.000141  -0.000047   0.000093   0.000090  0.0000005  0.0000125    0.000077    0.000063
+2002  11  13  52591   0.062924   0.144047  -0.2562643   0.0004349  -0.000180  -0.000104   0.000091   0.000088  0.0000014  0.0000122    0.000149    0.000127
+2002  11  14  52592   0.060084   0.143928  -0.2567518   0.0005540  -0.000239  -0.000143   0.000092   0.000090  0.0000012  0.0000121    0.000073    0.000080
+2002  11  15  52593   0.056423   0.143931  -0.2573392   0.0005896  -0.000250  -0.000200   0.000094   0.000092  0.0000007  0.0000120    0.000105    0.000086
+2002  11  16  52594   0.053062   0.143846  -0.2579790   0.0006449  -0.000231  -0.000228   0.000094   0.000091  0.0000006  0.0000123    0.000118    0.000093
+2002  11  17  52595   0.049816   0.143935  -0.2586293   0.0006412  -0.000196  -0.000220   0.000097   0.000094  0.0000005  0.0000124    0.000106    0.000090
+2002  11  18  52596   0.046246   0.143323  -0.2592422   0.0005826  -0.000152  -0.000183   0.000100   0.000097  0.0000005  0.0000117    0.000094    0.000087
+2002  11  19  52597   0.042777   0.142843  -0.2597629   0.0004353  -0.000105  -0.000130   0.000093   0.000093  0.0000005  0.0000109    0.000082    0.000084
+2002  11  20  52598   0.039023   0.142294  -0.2601493   0.0003082  -0.000101  -0.000076   0.000090   0.000089  0.0000008  0.0000103    0.000082    0.000075
+2002  11  21  52599   0.035633   0.141856  -0.2603915   0.0001901  -0.000030  -0.000033   0.000089   0.000089  0.0000010  0.0000101    0.000132    0.000086
+2002  11  22  52600   0.032500   0.141732  -0.2605727   0.0001619   0.000076  -0.000073   0.000089   0.000089  0.0000006  0.0000101    0.000089    0.000067
+2002  11  23  52601   0.029525   0.141955  -0.2607332   0.0001473   0.000128  -0.000100   0.000091   0.000091  0.0000004  0.0000106    0.000066    0.000056
+2002  11  24  52602   0.026285   0.142127  -0.2609032   0.0001846   0.000119  -0.000107   0.000095   0.000094  0.0000004  0.0000110    0.000063    0.000053
+2002  11  25  52603   0.023102   0.142345  -0.2611522   0.0003339   0.000062  -0.000104   0.000096   0.000095  0.0000004  0.0000107    0.000060    0.000049
+2002  11  26  52604   0.020432   0.142289  -0.2615657   0.0005481  -0.000027  -0.000099   0.000093   0.000093  0.0000004  0.0000106    0.000057    0.000046
+2002  11  27  52605   0.017764   0.142206  -0.2622142   0.0007890  -0.000113  -0.000113   0.000093   0.000092  0.0000005  0.0000107    0.000089    0.000073
+2002  11  28  52606   0.014590   0.141882  -0.2631202   0.0010513  -0.000177  -0.000129   0.000094   0.000093  0.0000035  0.0000106    0.000095    0.000080
+2002  11  29  52607   0.011090   0.141724  -0.2642782   0.0012697  -0.000209  -0.000144   0.000094   0.000093  0.0000043  0.0000105    0.000089    0.000079
+2002  11  30  52608   0.007586   0.141601  -0.2656317   0.0014083  -0.000212  -0.000156   0.000098   0.000096  0.0000034  0.0000109    0.000083    0.000077
+2002  12   1  52609   0.004178   0.141419  -0.2670587   0.0014169  -0.000194  -0.000158   0.000103   0.000102  0.0000024  0.0000117    0.000077    0.000075
+2002  12   2  52610   0.000989   0.141410  -0.2684087   0.0012579  -0.000168  -0.000152   0.000104   0.000103  0.0000015  0.0000116    0.000071    0.000073
+2002  12   3  52611  -0.002082   0.141728  -0.2695602   0.0010241  -0.000137  -0.000137   0.000098   0.000098  0.0000006  0.0000109    0.000065    0.000072
+2002  12   4  52612  -0.005170   0.142395  -0.2704502   0.0007542  -0.000125  -0.000115   0.000095   0.000095  0.0000004  0.0000109    0.000340    0.000238
+2002  12   5  52613  -0.008510   0.143380  -0.2710590   0.0004756  -0.000085  -0.000102   0.000095   0.000095  0.0000005  0.0000111    0.000148    0.000118
+2002  12   6  52614  -0.012443   0.144471  -0.2714253   0.0003281  -0.000006  -0.000105   0.000095   0.000094  0.0000006  0.0000112    0.000101    0.000085
+2002  12   7  52615  -0.016674   0.145726  -0.2717063   0.0003542   0.000055  -0.000109   0.000101   0.000099  0.0000006  0.0000117    0.000104    0.000087
+2002  12   8  52616  -0.020928   0.147009  -0.2720735   0.0004631   0.000077  -0.000108   0.000106   0.000103  0.0000005  0.0000122    0.000090    0.000079
+2002  12   9  52617  -0.024244   0.147814  -0.2726153   0.0006010   0.000056  -0.000099   0.000104   0.000102  0.0000004  0.0000120    0.000076    0.000071
+2002  12  10  52618  -0.027084   0.149321  -0.2733330   0.0007847  -0.000001  -0.000083   0.000099   0.000099  0.0000004  0.0000115    0.000061    0.000063
+2002  12  11  52619  -0.030088   0.150752  -0.2741927   0.0009393  -0.000129  -0.000055   0.000099   0.000099  0.0000152  0.0000115    0.000156    0.000116
+2002  12  12  52620  -0.032917   0.152488  -0.2751852   0.0010160  -0.000163  -0.000051   0.000095   0.000094  0.0000051  0.0000116    0.000077    0.000063
+2002  12  13  52621  -0.036389   0.153830  -0.2762125   0.0010454  -0.000118  -0.000065   0.000094   0.000093  0.0000006  0.0000117    0.000082    0.000070
+2002  12  14  52622  -0.040066   0.155012  -0.2772239   0.0010445  -0.000118  -0.000091   0.000100   0.000098  0.0000007  0.0000120    0.000092    0.000079
+2002  12  15  52623  -0.044170   0.156047  -0.2781997   0.0009399  -0.000131  -0.000110   0.000103   0.000101  0.0000006  0.0000116    0.000086    0.000076
+2002  12  16  52624  -0.048070   0.156764  -0.2790958   0.0007939  -0.000119  -0.000106   0.000102   0.000102  0.0000005  0.0000108    0.000081    0.000074
+2002  12  17  52625  -0.051587   0.157560  -0.2798566   0.0006309  -0.000082  -0.000082   0.000098   0.000099  0.0000004  0.0000106    0.000075    0.000071
+2002  12  18  52626  -0.054523   0.158571  -0.2804348   0.0004794   0.000066   0.000001   0.000093   0.000094  0.0000006  0.0000106    0.000090    0.000072
+2002  12  19  52627  -0.056921   0.160012  -0.2808194   0.0002843   0.000064  -0.000006   0.000094   0.000094  0.0000006  0.0000106    0.000090    0.000073
+2002  12  20  52628  -0.059130   0.161906  -0.2810416   0.0001688  -0.000059  -0.000073   0.000096   0.000097  0.0000005  0.0000107    0.000086    0.000073
+2002  12  21  52629  -0.061559   0.164234  -0.2811737   0.0001803  -0.000218  -0.000135   0.000100   0.000101  0.0000025  0.0000109    0.000084    0.000073
+2002  12  22  52630  -0.064280   0.166642  -0.2813180   0.0002031  -0.000383  -0.000174   0.000100   0.000101  0.0000052  0.0000110    0.000084    0.000073
+2002  12  23  52631  -0.066815   0.168811  -0.2815845   0.0003304  -0.000517  -0.000168   0.000098   0.000099  0.0000079  0.0000111    0.000084    0.000072
+2002  12  24  52632  -0.069048   0.171025  -0.2820632   0.0005534  -0.000585  -0.000106   0.000097   0.000096  0.0000100  0.0000113    0.000083    0.000072
+2002  12  25  52633  -0.071607   0.173381  -0.2827974   0.0008449  -0.000578  -0.000002   0.000094   0.000093  0.0000096  0.0000116    0.000083    0.000072
+2002  12  26  52634  -0.074221   0.175390  -0.2837687   0.0010848  -0.000503   0.000122   0.000094   0.000093  0.0000092  0.0000118    0.000082    0.000072
+2002  12  27  52635  -0.076460   0.177046  -0.2849012   0.0012034  -0.000386   0.000231   0.000095   0.000092  0.0000086  0.0000121    0.000082    0.000072
+2002  12  28  52636  -0.078727   0.179021  -0.2860832   0.0011915  -0.000258   0.000297   0.000096   0.000093  0.0000071  0.0000129    0.000082    0.000071
+2002  12  29  52637  -0.081122   0.181369  -0.2871982   0.0010845  -0.000146   0.000303   0.000101   0.000098  0.0000052  0.0000135    0.000082    0.000071
+2002  12  30  52638  -0.083457   0.183430  -0.2881549   0.0008553  -0.000067   0.000251   0.000103   0.000099  0.0000033  0.0000132    0.000081    0.000071
+2002  12  31  52639  -0.085668   0.185680  -0.2889044   0.0006327  -0.000026   0.000158   0.000098   0.000096  0.0000014  0.0000128    0.000081    0.000071
+2003   1   1  52640  -0.088455   0.188143  -0.2894462   0.0004478  -0.000020   0.000051   0.000100   0.000098  0.0000009  0.0000129    0.000080    0.000069
+2003   1   2  52641  -0.091534   0.190448  -0.2898229   0.0003297  -0.000030  -0.000037   0.000102   0.000100  0.0000007  0.0000129    0.000079    0.000067
+2003   1   3  52642  -0.094435   0.192852  -0.2901104   0.0003144  -0.000041  -0.000083   0.000099   0.000097  0.0000006  0.0000129    0.000078    0.000065
+2003   1   4  52643  -0.097562   0.195410  -0.2904026   0.0003740  -0.000038  -0.000075   0.000102   0.000099  0.0000005  0.0000133    0.000072    0.000059
+2003   1   5  52644  -0.100609   0.197600  -0.2907892   0.0004474  -0.000029  -0.000036   0.000112   0.000108  0.0000004  0.0000138    0.000063    0.000053
+2003   1   6  52645  -0.103513   0.199545  -0.2913281   0.0005883  -0.000024  -0.000001   0.000113   0.000111  0.0000004  0.0000131    0.000054    0.000046
+2003   1   7  52646  -0.105933   0.201451  -0.2920264   0.0007777  -0.000029   0.000011   0.000103   0.000103  0.0000003  0.0000120    0.000046    0.000039
+2003   1   8  52647  -0.108553   0.203596  -0.2928461   0.0008565  -0.000061  -0.000032   0.000099   0.000100  0.0000041  0.0000114    0.000051    0.000060
+2003   1   9  52648  -0.111054   0.205660  -0.2937305   0.0008758  -0.000093  -0.000086   0.000100   0.000100  0.0000069  0.0000111    0.000058    0.000088
+2003   1  10  52649  -0.113141   0.208140  -0.2946344   0.0009208  -0.000063  -0.000082   0.000101   0.000101  0.0000018  0.0000114    0.000076    0.000075
+2003   1  11  52650  -0.115221   0.210551  -0.2955339   0.0009051  -0.000050  -0.000054   0.000104   0.000104  0.0000005  0.0000120    0.000078    0.000065
+2003   1  12  52651  -0.117280   0.212885  -0.2964079   0.0008349  -0.000053  -0.000015   0.000108   0.000108  0.0000005  0.0000120    0.000074    0.000061
+2003   1  13  52652  -0.118980   0.214962  -0.2972175   0.0007167  -0.000060   0.000020   0.000108   0.000107  0.0000004  0.0000113    0.000069    0.000058
+2003   1  14  52653  -0.120344   0.217095  -0.2979055   0.0005744  -0.000065   0.000033   0.000102   0.000103  0.0000004  0.0000109    0.000065    0.000054
+2003   1  15  52654  -0.121680   0.219400  -0.2984238   0.0004224  -0.000051   0.000006   0.000103   0.000104  0.0000004  0.0000108    0.000064    0.000055
+2003   1  16  52655  -0.122915   0.221760  -0.2987682   0.0002878  -0.000033  -0.000035   0.000103   0.000104  0.0000004  0.0000108    0.000065    0.000057
+2003   1  17  52656  -0.124248   0.224294  -0.2989957   0.0001778  -0.000044  -0.000029   0.000099   0.000101  0.0000004  0.0000109    0.000070    0.000055
+2003   1  18  52657  -0.126081   0.226712  -0.2992097   0.0002175  -0.000047  -0.000037   0.000104   0.000105  0.0000008  0.0000112    0.000120    0.000099
+2003   1  19  52658  -0.127691   0.229002  -0.2995015   0.0003663  -0.000051  -0.000049   0.000113   0.000113  0.0000013  0.0000116    0.000185    0.000160
+2003   1  20  52659  -0.128823   0.231200  -0.2999192   0.0004924  -0.000064  -0.000044   0.000115   0.000115  0.0000018  0.0000113    0.000251    0.000221
+2003   1  21  52660  -0.129910   0.233699  -0.3004748   0.0006204  -0.000080  -0.000018   0.000115   0.000115  0.0000023  0.0000111    0.000317    0.000282
+2003   1  22  52661  -0.130982   0.236530  -0.3011631   0.0007517  -0.000142   0.000047   0.000112   0.000113  0.0000008  0.0000113    0.000138    0.000117
+2003   1  23  52662  -0.132184   0.239939  -0.3019734   0.0008727  -0.000127   0.000099   0.000112   0.000112  0.0000012  0.0000113    0.000152    0.000133
+2003   1  24  52663  -0.133613   0.242580  -0.3028622   0.0009091  -0.000031   0.000140   0.000115   0.000114  0.0000009  0.0000115    0.000148    0.000116
+2003   1  25  52664  -0.135124   0.245034  -0.3037480   0.0008199   0.000012   0.000129   0.000118   0.000117  0.0000006  0.0000120    0.000125    0.000094
+2003   1  26  52665  -0.136838   0.247223  -0.3045142   0.0006262   0.000004   0.000081   0.000120   0.000118  0.0000005  0.0000120    0.000103    0.000079
+2003   1  27  52666  -0.138125   0.249554  -0.3050537   0.0004358  -0.000034   0.000023   0.000118   0.000116  0.0000004  0.0000114    0.000082    0.000063
+2003   1  28  52667  -0.138993   0.252302  -0.3053298   0.0001829  -0.000087  -0.000024   0.000113   0.000111  0.0000003  0.0000112    0.000060    0.000048
+2003   1  29  52668  -0.139327   0.255308  -0.3054006   0.0000126  -0.000109  -0.000001   0.000108   0.000106  0.0000007  0.0000114    0.000066    0.000059
+2003   1  30  52669  -0.139385   0.258390  -0.3053955  -0.0000381  -0.000182  -0.000004   0.000112   0.000109  0.0000098  0.0000117    0.000083    0.000079
+2003   1  31  52670  -0.139852   0.261504  -0.3053579  -0.0000247  -0.000168  -0.000066   0.000113   0.000110  0.0000039  0.0000116    0.000102    0.000079
+2003   2   1  52671  -0.141145   0.264256  -0.3053316   0.0000212  -0.000179  -0.000072   0.000117   0.000114  0.0000007  0.0000120    0.000100    0.000073
+2003   2   2  52672  -0.142590   0.266951  -0.3054052   0.0001835  -0.000198  -0.000027   0.000125   0.000121  0.0000006  0.0000128    0.000088    0.000068
+2003   2   3  52673  -0.144065   0.269912  -0.3056708   0.0003703  -0.000184   0.000038   0.000122   0.000119  0.0000005  0.0000128    0.000077    0.000063
+2003   2   4  52674  -0.145347   0.272789  -0.3061757   0.0005832  -0.000130   0.000099   0.000116   0.000116  0.0000004  0.0000125    0.000066    0.000059
+2003   2   5  52675  -0.146068   0.275576  -0.3068739   0.0007737  -0.000003   0.000111   0.000111   0.000112  0.0000008  0.0000124    0.000064    0.000052
+2003   2   6  52676  -0.147310   0.278286  -0.3076090   0.0007962   0.000108   0.000106   0.000116   0.000116  0.0000530  0.0000123    0.000124    0.000101
+2003   2   7  52677  -0.148371   0.280624  -0.3084107   0.0007390   0.000061   0.000071   0.000120   0.000121  0.0000187  0.0000123    0.000097    0.000081
+2003   2   8  52678  -0.149577   0.283473  -0.3091843   0.0006674  -0.000033   0.000040   0.000122   0.000122  0.0000005  0.0000132    0.000081    0.000067
+2003   2   9  52679  -0.151319   0.286158  -0.3098126   0.0005526  -0.000121   0.000022   0.000124   0.000124  0.0000005  0.0000138    0.000081    0.000066
+2003   2  10  52680  -0.152938   0.288824  -0.3102739   0.0004275  -0.000164   0.000013   0.000124   0.000125  0.0000005  0.0000131    0.000082    0.000064
+2003   2  11  52681  -0.154236   0.291603  -0.3105941   0.0002965  -0.000138   0.000006   0.000118   0.000119  0.0000005  0.0000125    0.000082    0.000063
+2003   2  12  52682  -0.155346   0.294264  -0.3108365   0.0002219  -0.000014  -0.000002   0.000110   0.000112  0.0000004  0.0000123    0.000075    0.000059
+2003   2  13  52683  -0.155873   0.297061  -0.3110784   0.0002679   0.000113  -0.000022   0.000108   0.000109  0.0000004  0.0000122    0.000066    0.000054
+2003   2  14  52684  -0.156220   0.299682  -0.3113769   0.0003343   0.000072  -0.000098   0.000105   0.000106  0.0000005  0.0000126    0.000082    0.000061
+2003   2  15  52685  -0.156334   0.302331  -0.3117503   0.0003876   0.000002  -0.000113   0.000112   0.000112  0.0000042  0.0000135    0.000083    0.000060
+2003   2  16  52686  -0.156311   0.304810  -0.3122332   0.0005503  -0.000066  -0.000071   0.000120   0.000117  0.0000092  0.0000136    0.000075    0.000055
+2003   2  17  52687  -0.155761   0.307222  -0.3128966   0.0008339  -0.000118  -0.000006   0.000122   0.000118  0.0000142  0.0000129    0.000066    0.000050
+2003   2  18  52688  -0.155213   0.310284  -0.3138018   0.0010638  -0.000132   0.000054   0.000121   0.000118  0.0000155  0.0000125    0.000058    0.000045
+2003   2  19  52689  -0.154942   0.313790  -0.3149378   0.0012233  -0.000103   0.000080   0.000112   0.000111  0.0000029  0.0000126    0.000051    0.000040
+2003   2  20  52690  -0.154645   0.317715  -0.3161980   0.0012659  -0.000043   0.000037   0.000110   0.000108  0.0000004  0.0000124    0.000068    0.000053
+2003   2  21  52691  -0.155073   0.321669  -0.3174328   0.0011801   0.000019  -0.000031   0.000113   0.000109  0.0000005  0.0000121    0.000092    0.000070
+2003   2  22  52692  -0.155469   0.324610  -0.3185104   0.0009762   0.000050  -0.000048   0.000115   0.000110  0.0000005  0.0000127    0.000092    0.000070
+2003   2  23  52693  -0.155413   0.327551  -0.3193548   0.0007053   0.000045  -0.000032   0.000117   0.000111  0.0000005  0.0000137    0.000082    0.000063
+2003   2  24  52694  -0.155053   0.330611  -0.3199551   0.0004757   0.000013  -0.000012   0.000113   0.000106  0.0000004  0.0000132    0.000072    0.000056
+2003   2  25  52695  -0.154647   0.333616  -0.3203499   0.0003251  -0.000024   0.000000   0.000106   0.000102  0.0000003  0.0000125    0.000062    0.000049
+2003   2  26  52696  -0.154558   0.336616  -0.3206078   0.0002359  -0.000057  -0.000063   0.000104   0.000101  0.0000067  0.0000124    0.000067    0.000063
+2003   2  27  52697  -0.154642   0.339451  -0.3208162   0.0002062  -0.000054  -0.000115   0.000111   0.000107  0.0000113  0.0000128    0.000076    0.000081
+2003   2  28  52698  -0.154302   0.342331  -0.3210511   0.0002552   0.000049   0.000038   0.000109   0.000105  0.0000031  0.0000129    0.000100    0.000087
+2003   3   1  52699  -0.153838   0.344827  -0.3213569   0.0003317   0.000109   0.000130   0.000111   0.000106  0.0000008  0.0000135    0.000097    0.000078
+2003   3   2  52700  -0.153118   0.347346  -0.3217675   0.0004730   0.000105   0.000140   0.000116   0.000108  0.0000006  0.0000139    0.000082    0.000066
+2003   3   3  52701  -0.152823   0.350457  -0.3222985   0.0006105   0.000052   0.000105   0.000115   0.000106  0.0000004  0.0000132    0.000067    0.000054
+2003   3   4  52702  -0.153085   0.353379  -0.3229326   0.0006633  -0.000032   0.000048   0.000104   0.000100  0.0000003  0.0000125    0.000053    0.000042
+2003   3   5  52703  -0.153359   0.356029  -0.3236255   0.0006950  -0.000122   0.000003   0.000098   0.000094  0.0000618  0.0000120    0.000959    0.003749
+2003   3   6  52704  -0.153775   0.358552  -0.3243252   0.0006944  -0.000162   0.000028   0.000105   0.000099  0.0000488  0.0000121    0.000789    0.003018
+2003   3   7  52705  -0.154111   0.360925  -0.3249974   0.0006687  -0.000158   0.000090   0.000107   0.000101  0.0000108  0.0000127    0.000232    0.000697
+2003   3   8  52706  -0.154509   0.363735  -0.3256257   0.0006161  -0.000137   0.000133   0.000111   0.000104  0.0000004  0.0000134    0.000076    0.000064
+2003   3   9  52707  -0.154807   0.366534  -0.3261966   0.0005412  -0.000104   0.000152   0.000113   0.000106  0.0000004  0.0000138    0.000069    0.000057
+2003   3  10  52708  -0.154874   0.369534  -0.3266955   0.0004371  -0.000064   0.000151   0.000111   0.000104  0.0000003  0.0000132    0.000062    0.000051
+2003   3  11  52709  -0.155595   0.372651  -0.3271133   0.0003377  -0.000024   0.000138   0.000101   0.000098  0.0000003  0.0000125    0.000055    0.000044
+2003   3  12  52710  -0.156473   0.375689  -0.3274591   0.0003116   0.000017   0.000132   0.000099   0.000096  0.0000003  0.0000123    0.000050    0.000039
+2003   3  13  52711  -0.157015   0.378795  -0.3277714   0.0003277   0.000053   0.000138   0.000099   0.000097  0.0000003  0.0000125    0.000046    0.000034
+2003   3  14  52712  -0.157399   0.381645  -0.3281226   0.0004167   0.000067   0.000146   0.000098   0.000097  0.0000006  0.0000128    0.000081    0.000072
+2003   3  15  52713  -0.157178   0.384143  -0.3286105   0.0005821   0.000093   0.000166   0.000107   0.000104  0.0000006  0.0000134    0.000086    0.000079
+2003   3  16  52714  -0.156928   0.387120  -0.3293381   0.0008402   0.000111   0.000175   0.000106   0.000103  0.0000005  0.0000133    0.000075    0.000069
+2003   3  17  52715  -0.156690   0.389903  -0.3303731   0.0011897   0.000101   0.000154   0.000098   0.000097  0.0000004  0.0000123    0.000064    0.000059
+2003   3  18  52716  -0.155993   0.392872  -0.3317047   0.0014471   0.000064   0.000102   0.000091   0.000091  0.0000003  0.0000116    0.000053    0.000048
+2003   3  19  52717  -0.154949   0.395930  -0.3332275   0.0015439  -0.000068  -0.000020   0.000088   0.000089  0.0000011  0.0000113    0.000127    0.000090
+2003   3  20  52718  -0.153801   0.399810  -0.3347681   0.0014733  -0.000077  -0.000064   0.000093   0.000093  0.0000010  0.0000115    0.000117    0.000088
+2003   3  21  52719  -0.153144   0.403651  -0.3361580   0.0012510  -0.000020  -0.000051   0.000092   0.000092  0.0000005  0.0000117    0.000077    0.000070
+2003   3  22  52720  -0.152319   0.406781  -0.3372859   0.0009586  -0.000005  -0.000024   0.000094   0.000095  0.0000004  0.0000122    0.000065    0.000061
+2003   3  23  52721  -0.151488   0.409790  -0.3381106   0.0006414  -0.000009   0.000000   0.000095   0.000097  0.0000004  0.0000125    0.000063    0.000056
+2003   3  24  52722  -0.150545   0.412605  -0.3386578   0.0004087  -0.000006   0.000009   0.000087   0.000089  0.0000004  0.0000117    0.000062    0.000051
+2003   3  25  52723  -0.149047   0.415556  -0.3390036   0.0002579   0.000012   0.000001   0.000084   0.000086  0.0000004  0.0000113    0.000060    0.000047
+2003   3  26  52724  -0.147561   0.418506  -0.3392554   0.0002225   0.000113  -0.000062   0.000084   0.000086  0.0000004  0.0000113    0.000055    0.000060
+2003   3  27  52725  -0.145727   0.421293  -0.3395330   0.0003188   0.000145  -0.000042   0.000083   0.000087  0.0000005  0.0000112    0.000071    0.000055
+2003   3  28  52726  -0.143330   0.424216  -0.3399321   0.0004704   0.000087   0.000011   0.000085   0.000089  0.0000006  0.0000111    0.000074    0.000064
+2003   3  29  52727  -0.140608   0.427064  -0.3404846   0.0005943   0.000021   0.000024   0.000091   0.000095  0.0000006  0.0000117    0.000072    0.000066
+2003   3  30  52728  -0.137797   0.430046  -0.3411819   0.0007770  -0.000026   0.000004   0.000090   0.000094  0.0000005  0.0000121    0.000070    0.000064
+2003   3  31  52729  -0.135357   0.433063  -0.3420030   0.0008842  -0.000038  -0.000029   0.000081   0.000084  0.0000005  0.0000113    0.000068    0.000061
+2003   4   1  52730  -0.133311   0.435808  -0.3429200   0.0009437  -0.000005  -0.000056   0.000077   0.000079  0.0000005  0.0000106    0.000065    0.000059
+2003   4   2  52731  -0.131262   0.438768  -0.3438931   0.0010055   0.000071  -0.000046   0.000077   0.000079  0.0000025  0.0000103    0.000070    0.000065
+2003   4   3  52732  -0.129043   0.441939  -0.3448663   0.0009912   0.000153  -0.000004   0.000078   0.000080  0.0000039  0.0000103    0.000077    0.000074
+2003   4   4  52733  -0.126962   0.444910  -0.3457859   0.0008673   0.000207   0.000056   0.000080   0.000082  0.0000013  0.0000106    0.000084    0.000082
+2003   4   5  52734  -0.124658   0.447705  -0.3466162   0.0007951   0.000200   0.000113   0.000082   0.000085  0.0000005  0.0000111    0.000080    0.000077
+2003   4   6  52735  -0.122092   0.450925  -0.3473313   0.0006786   0.000156   0.000152   0.000085   0.000087  0.0000005  0.0000114    0.000072    0.000067
+2003   4   7  52736  -0.119780   0.454294  -0.3479135   0.0005145   0.000111   0.000170   0.000084   0.000087  0.0000004  0.0000111    0.000063    0.000056
+2003   4   8  52737  -0.117692   0.457169  -0.3483630   0.0003801   0.000093   0.000164   0.000081   0.000084  0.0000004  0.0000107    0.000055    0.000046
+2003   4   9  52738  -0.116129   0.459931  -0.3487095   0.0003100   0.000155   0.000139   0.000080   0.000082  0.0000018  0.0000107    0.000163    0.000163
+2003   4  10  52739  -0.114690   0.462574  -0.3490183   0.0003487   0.000203   0.000113   0.000083   0.000085  0.0000026  0.0000107    0.000175    0.000140
+2003   4  11  52740  -0.113298   0.465081  -0.3494070   0.0004555   0.000172   0.000079   0.000083   0.000085  0.0000012  0.0000110    0.000101    0.000092
+2003   4  12  52741  -0.111392   0.467662  -0.3499629   0.0006547   0.000136   0.000053   0.000086   0.000086  0.0000037  0.0000117    0.000072    0.000075
+2003   4  13  52742  -0.109344   0.470584  -0.3507637   0.0009339   0.000105   0.000039   0.000088   0.000087  0.0000040  0.0000123    0.000067    0.000065
+2003   4  14  52743  -0.107196   0.473001  -0.3518609   0.0012427   0.000079   0.000038   0.000087   0.000086  0.0000023  0.0000120    0.000062    0.000056
+2003   4  15  52744  -0.105321   0.475535  -0.3532216   0.0014564   0.000067   0.000044   0.000084   0.000084  0.0000006  0.0000114    0.000058    0.000046
+2003   4  16  52745  -0.103936   0.477620  -0.3547132   0.0014975   0.000066   0.000057   0.000082   0.000082  0.0000004  0.0000114    0.000059    0.000051
+2003   4  17  52746  -0.102297   0.479472  -0.3561307   0.0012933   0.000075   0.000064   0.000083   0.000082  0.0000005  0.0000115    0.000061    0.000058
+2003   4  18  52747  -0.100311   0.481377  -0.3572944   0.0010105   0.000092   0.000056   0.000084   0.000083  0.0000049  0.0000117    0.000062    0.000059
+2003   4  19  52748  -0.098112   0.483633  -0.3581541   0.0006524   0.000106   0.000036   0.000091   0.000088  0.0000078  0.0000124    0.000062    0.000057
+2003   4  20  52749  -0.095480   0.485850  -0.3586520   0.0003243   0.000113   0.000011   0.000094   0.000090  0.0000038  0.0000128    0.000062    0.000055
+2003   4  21  52750  -0.093112   0.487984  -0.3588084   0.0000895   0.000109  -0.000009   0.000085   0.000082  0.0000022  0.0000118    0.000062    0.000053
+2003   4  22  52751  -0.090742   0.489870  -0.3588676   0.0000106   0.000100  -0.000016   0.000079   0.000077  0.0000006  0.0000113    0.000062    0.000051
+2003   4  23  52752  -0.088581   0.491983  -0.3589906   0.0000666   0.000078   0.000002   0.000078   0.000076  0.0000441  0.0000113    0.000145    0.000130
+2003   4  24  52753  -0.085992   0.493957  -0.3590500   0.0001634   0.000083   0.000010   0.000077   0.000076  0.0000140  0.0000113    0.000078    0.000072
+2003   4  25  52754  -0.082804   0.495924  -0.3592751   0.0003364   0.000104   0.000038   0.000075   0.000075  0.0000004  0.0000115    0.000053    0.000050
+2003   4  26  52755  -0.080028   0.498257  -0.3597168   0.0004744   0.000121   0.000047   0.000080   0.000079  0.0000004  0.0000121    0.000056    0.000052
+2003   4  27  52756  -0.077688   0.500314  -0.3602786   0.0006109   0.000128   0.000038   0.000083   0.000081  0.0000004  0.0000126    0.000058    0.000053
+2003   4  28  52757  -0.075214   0.502657  -0.3609274   0.0007140   0.000123   0.000024   0.000079   0.000076  0.0000003  0.0000117    0.000060    0.000054
+2003   4  29  52758  -0.072893   0.504640  -0.3616483   0.0007629   0.000106   0.000017   0.000075   0.000073  0.0000003  0.0000110    0.000062    0.000054
+2003   4  30  52759  -0.070318   0.506411  -0.3624052   0.0007557   0.000083   0.000036   0.000075   0.000072  0.0000004  0.0000111    0.000066    0.000060
+2003   5   1  52760  -0.066919   0.508209  -0.3631011   0.0006286   0.000072   0.000063   0.000077   0.000075  0.0000039  0.0000114    0.000065    0.000061
+2003   5   2  52761  -0.063124   0.510122  -0.3636396   0.0004537   0.000082   0.000091   0.000080   0.000078  0.0000075  0.0000114    0.000062    0.000059
+2003   5   3  52762  -0.059465   0.511755  -0.3639692   0.0002728   0.000110   0.000110   0.000080   0.000077  0.0000062  0.0000116    0.000059    0.000057
+2003   5   4  52763  -0.056127   0.513660  -0.3641007   0.0000792   0.000150   0.000114   0.000078   0.000076  0.0000044  0.0000117    0.000056    0.000055
+2003   5   5  52764  -0.053264   0.515650  -0.3641000  -0.0000836   0.000186   0.000104   0.000077   0.000075  0.0000026  0.0000109    0.000053    0.000053
+2003   5   6  52765  -0.050200   0.517731  -0.3640270  -0.0001263   0.000198   0.000087   0.000074   0.000072  0.0000007  0.0000104    0.000050    0.000051
+2003   5   7  52766  -0.047207   0.519928  -0.3639106  -0.0001099   0.000185   0.000055   0.000074   0.000073  0.0000004  0.0000104    0.000057    0.000054
+2003   5   8  52767  -0.044717   0.521795  -0.3638256  -0.0000199   0.000124   0.000072   0.000073   0.000073  0.0000004  0.0000103    0.000046    0.000042
+2003   5   9  52768  -0.042161   0.523521  -0.3639063   0.0001666   0.000038   0.000103   0.000070   0.000071  0.0000005  0.0000102    0.000061    0.000057
+2003   5  10  52769  -0.039746   0.525308  -0.3642098   0.0003945  -0.000010   0.000123   0.000074   0.000074  0.0000050  0.0000106    0.000065    0.000061
+2003   5  11  52770  -0.037732   0.526854  -0.3647162   0.0006286  -0.000008   0.000118   0.000078   0.000077  0.0000054  0.0000108    0.000060    0.000056
+2003   5  12  52771  -0.036073   0.528114  -0.3654717   0.0009193   0.000038   0.000083   0.000079   0.000078  0.0000031  0.0000099    0.000056    0.000052
+2003   5  13  52772  -0.034453   0.529539  -0.3665384   0.0011472   0.000108   0.000026   0.000075   0.000075  0.0000008  0.0000093    0.000051    0.000048
+2003   5  14  52773  -0.032602   0.530797  -0.3678257   0.0012075   0.000178  -0.000045   0.000073   0.000073  0.0000703  0.0000090    0.000219    0.000474
+2003   5  15  52774  -0.030447   0.532070  -0.3690148   0.0011075   0.000217  -0.000083   0.000075   0.000075  0.0000570  0.0000090    0.000196    0.000399
+2003   5  16  52775  -0.028213   0.533348  -0.3699162   0.0008399   0.000222  -0.000071   0.000074   0.000075  0.0000125  0.0000093    0.000101    0.000135
+2003   5  17  52776  -0.025899   0.534510  -0.3705407   0.0004880   0.000207   0.000001   0.000078   0.000078  0.0000027  0.0000097    0.000074    0.000063
+2003   5  18  52777  -0.023603   0.535697  -0.3709082   0.0002263   0.000185   0.000093   0.000083   0.000083  0.0000030  0.0000096    0.000072    0.000062
+2003   5  19  52778  -0.021298   0.536748  -0.3710913   0.0001343   0.000172   0.000155   0.000081   0.000080  0.0000018  0.0000088    0.000071    0.000061
+2003   5  20  52779  -0.018574   0.537664  -0.3712252   0.0001703   0.000172   0.000159   0.000077   0.000076  0.0000007  0.0000086    0.000069    0.000060
+2003   5  21  52780  -0.015426   0.538871  -0.3714275   0.0002529   0.000190   0.000054   0.000076   0.000076  0.0000006  0.0000089    0.000082    0.000085
+2003   5  22  52781  -0.012516   0.539877  -0.3717470   0.0003836   0.000207  -0.000049   0.000077   0.000077  0.0000006  0.0000090    0.000079    0.000074
+2003   5  23  52782  -0.009829   0.540805  -0.3721988   0.0005056   0.000161  -0.000062   0.000076   0.000076  0.0000005  0.0000090    0.000067    0.000060
+2003   5  24  52783  -0.006947   0.541147  -0.3727707   0.0006139   0.000097  -0.000048   0.000081   0.000080  0.0000046  0.0000094    0.000061    0.000056
+2003   5  25  52784  -0.003995   0.541445  -0.3734042   0.0006703   0.000037  -0.000028   0.000086   0.000085  0.0000054  0.0000101    0.000058    0.000054
+2003   5  26  52785  -0.000956   0.541742  -0.3740389   0.0006466  -0.000004  -0.000018   0.000083   0.000082  0.0000038  0.0000100    0.000055    0.000052
+2003   5  27  52786   0.002439   0.542257  -0.3746354   0.0005586  -0.000008  -0.000031   0.000080   0.000079  0.0000023  0.0000096    0.000053    0.000049
+2003   5  28  52787   0.005904   0.542919  -0.3751569   0.0004577   0.000029  -0.000049   0.000078   0.000077  0.0000007  0.0000097    0.000049    0.000047
+2003   5  29  52788   0.009373   0.543923  -0.3755548   0.0003288   0.000103  -0.000149   0.000079   0.000079  0.0000004  0.0000098    0.000060    0.000075
+2003   5  30  52789   0.012530   0.544857  -0.3757788   0.0001416   0.000198  -0.000014   0.000080   0.000080  0.0000003  0.0000099    0.000067    0.000062
+2003   5  31  52790   0.015657   0.545757  -0.3758075  -0.0000628   0.000268   0.000116   0.000080   0.000080  0.0000003  0.0000101    0.000065    0.000053
+2003   6   1  52791   0.018465   0.546680  -0.3756590  -0.0002017   0.000303   0.000185   0.000084   0.000083  0.0000003  0.0000105    0.000062    0.000051
+2003   6   2  52792   0.021347   0.547220  -0.3753692  -0.0003463   0.000304   0.000193   0.000084   0.000083  0.0000003  0.0000102    0.000059    0.000049
+2003   6   3  52793   0.024365   0.547808  -0.3749753  -0.0004546   0.000276   0.000135   0.000079   0.000078  0.0000003  0.0000098    0.000055    0.000047
+2003   6   4  52794   0.027770   0.547979  -0.3745220  -0.0004735   0.000235   0.000033   0.000077   0.000076  0.0000062  0.0000097    0.000060    0.000052
+2003   6   5  52795   0.031554   0.548099  -0.3740751  -0.0004086   0.000177  -0.000061   0.000081   0.000080  0.0000105  0.0000098    0.000068    0.000059
+2003   6   6  52796   0.035026   0.548086  -0.3737483  -0.0002281   0.000106  -0.000104   0.000081   0.000080  0.0000027  0.0000100    0.000076    0.000067
+2003   6   7  52797   0.038188   0.548081  -0.3736725   0.0000337   0.000026  -0.000065   0.000080   0.000080  0.0000125  0.0000103    0.000078    0.000068
+2003   6   8  52798   0.041400   0.548065  -0.3738620   0.0002827  -0.000030   0.000021   0.000082   0.000081  0.0000141  0.0000103    0.000079    0.000066
+2003   6   9  52799   0.044823   0.548146  -0.3742579   0.0004761  -0.000029   0.000096   0.000080   0.000080  0.0000079  0.0000098    0.000080    0.000065
+2003   6  10  52800   0.048347   0.548216  -0.3747715   0.0005186   0.000044   0.000113   0.000079   0.000079  0.0000017  0.0000094    0.000081    0.000064
+2003   6  11  52801   0.051780   0.548398  -0.3752737   0.0004039   0.000191   0.000027   0.000079   0.000078  0.0000062  0.0000092    0.000134    0.000099
+2003   6  12  52802   0.055249   0.547937  -0.3756025   0.0001911   0.000352  -0.000118   0.000077   0.000077  0.0000105  0.0000092    0.000200    0.000145
+2003   6  13  52803   0.058745   0.547521  -0.3756279  -0.0001192   0.000464  -0.000261   0.000078   0.000079  0.0000038  0.0000091    0.000266    0.000190
+2003   6  14  52804   0.062105   0.546872  -0.3753199  -0.0004257   0.000468  -0.000332   0.000080   0.000080  0.0000083  0.0000091    0.000244    0.000178
+2003   6  15  52805   0.065872   0.546382  -0.3747472  -0.0006377   0.000369  -0.000319   0.000078   0.000079  0.0000088  0.0000091    0.000190    0.000144
+2003   6  16  52806   0.069747   0.545830  -0.3740622  -0.0007176   0.000212  -0.000245   0.000075   0.000076  0.0000051  0.0000089    0.000135    0.000110
+2003   6  17  52807   0.074108   0.545252  -0.3734221  -0.0006453   0.000065  -0.000153   0.000074   0.000075  0.0000014  0.0000090    0.000081    0.000076
+2003   6  18  52808   0.078579   0.545143  -0.3729028  -0.0004977  -0.000042  -0.000080   0.000075   0.000076  0.0000015  0.0000094    0.000204    0.000186
+2003   6  19  52809   0.083048   0.544892  -0.3724763  -0.0003270   0.000001  -0.000096   0.000074   0.000075  0.0000009  0.0000097    0.000096    0.000089
+2003   6  20  52810   0.087733   0.544759  -0.3722287  -0.0001619   0.000224  -0.000200   0.000074   0.000074  0.0000008  0.0000098    0.000113    0.000114
+2003   6  21  52811   0.092004   0.544704  -0.3721830  -0.0000824   0.000400  -0.000305   0.000077   0.000076  0.0000008  0.0000101    0.000125    0.000124
+2003   6  22  52812   0.095894   0.544296  -0.3722095  -0.0000379   0.000464  -0.000342   0.000079   0.000077  0.0000007  0.0000105    0.000110    0.000105
+2003   6  23  52813   0.099868   0.543828  -0.3721350  -0.0000899   0.000409  -0.000272   0.000077   0.000076  0.0000006  0.0000101    0.000094    0.000085
+2003   6  24  52814   0.103533   0.543340  -0.3718510  -0.0002115   0.000260  -0.000110   0.000075   0.000075  0.0000005  0.0000097    0.000079    0.000066
+2003   6  25  52815   0.107291   0.542669  -0.3714199  -0.0003197  -0.000034   0.000236   0.000075   0.000075  0.0000456  0.0000097    0.000121    0.000109
+2003   6  26  52816   0.110962   0.542300  -0.3711191  -0.0004742  -0.000095   0.000320   0.000076   0.000076  0.0000060  0.0000098    0.000133    0.000113
+2003   6  27  52817   0.114764   0.541689  -0.3705716  -0.0006053   0.000001   0.000211   0.000078   0.000077  0.0000020  0.0000099    0.000132    0.000100
+2003   6  28  52818   0.118653   0.541251  -0.3698659  -0.0007634   0.000092   0.000082   0.000080   0.000079  0.0000037  0.0000103    0.000121    0.000089
+2003   6  29  52819   0.122652   0.540605  -0.3690520  -0.0008735   0.000166  -0.000042   0.000086   0.000085  0.0000040  0.0000107    0.000106    0.000080
+2003   6  30  52820   0.126785   0.540072  -0.3681448  -0.0008997   0.000217  -0.000127   0.000087   0.000087  0.0000023  0.0000100    0.000091    0.000070
+2003   7   1  52821   0.130443   0.539525  -0.3672291  -0.0008814   0.000236  -0.000151   0.000083   0.000083  0.0000007  0.0000093    0.000076    0.000060
+2003   7   2  52822   0.133949   0.538798  -0.3663916  -0.0007761   0.000231  -0.000122   0.000083   0.000083  0.0000005  0.0000090    0.000083    0.000067
+2003   7   3  52823   0.136997   0.537743  -0.3656859  -0.0006336   0.000225  -0.000063   0.000085   0.000084  0.0000006  0.0000089    0.000094    0.000078
+2003   7   4  52824   0.139958   0.536091  -0.3651353  -0.0004750   0.000250  -0.000011   0.000086   0.000085  0.0000006  0.0000091    0.000095    0.000080
+2003   7   5  52825   0.143100   0.534301  -0.3647496  -0.0003113   0.000286   0.000008   0.000087   0.000087  0.0000006  0.0000096    0.000091    0.000080
+2003   7   6  52826   0.146590   0.532819  -0.3645169  -0.0001739   0.000307  -0.000015   0.000088   0.000088  0.0000006  0.0000100    0.000087    0.000080
+2003   7   7  52827   0.149627   0.531438  -0.3643852  -0.0001411   0.000295  -0.000073   0.000087   0.000087  0.0000006  0.0000097    0.000084    0.000080
+2003   7   8  52828   0.153133   0.529941  -0.3642563  -0.0002059   0.000251  -0.000142   0.000084   0.000085  0.0000006  0.0000093    0.000080    0.000080
+2003   7   9  52829   0.156679   0.528485  -0.3640067  -0.0003746   0.000153  -0.000200   0.000083   0.000084  0.0000005  0.0000091    0.000062    0.000062
+2003   7  10  52830   0.160532   0.526820  -0.3635326  -0.0005924   0.000091  -0.000212   0.000081   0.000082  0.0000003  0.0000091    0.000041    0.000040
+2003   7  11  52831   0.164039   0.525602  -0.3628087  -0.0008363   0.000238  -0.000148   0.000081   0.000082  0.0000007  0.0000092    0.000099    0.000074
+2003   7  12  52832   0.167568   0.524121  -0.3619186  -0.0009651   0.000358  -0.000046   0.000087   0.000088  0.0000061  0.0000096    0.000109    0.000081
+2003   7  13  52833   0.170631   0.522929  -0.3609610  -0.0009781   0.000412   0.000045   0.000090   0.000091  0.0000066  0.0000095    0.000093    0.000071
+2003   7  14  52834   0.173188   0.521418  -0.3600304  -0.0008770   0.000407   0.000082   0.000088   0.000089  0.0000037  0.0000088    0.000077    0.000062
+2003   7  15  52835   0.175717   0.519921  -0.3592229  -0.0007371   0.000341   0.000041   0.000084   0.000085  0.0000009  0.0000087    0.000061    0.000052
+2003   7  16  52836   0.178249   0.518320  -0.3586135  -0.0005244   0.000245  -0.000103   0.000085   0.000086  0.0000008  0.0000091    0.000112    0.000105
+2003   7  17  52837   0.181032   0.516798  -0.3582355  -0.0002982   0.000141  -0.000255   0.000089   0.000090  0.0000006  0.0000092    0.000086    0.000084
+2003   7  18  52838   0.183603   0.514937  -0.3580241  -0.0001784   0.000022  -0.000345   0.000087   0.000088  0.0000005  0.0000091    0.000074    0.000067
+2003   7  19  52839   0.186365   0.512850  -0.3578906  -0.0001299  -0.000095  -0.000378   0.000090   0.000089  0.0000005  0.0000094    0.000076    0.000067
+2003   7  20  52840   0.189423   0.510847  -0.3577702  -0.0001355  -0.000155  -0.000371   0.000093   0.000092  0.0000005  0.0000098    0.000078    0.000069
+2003   7  21  52841   0.192108   0.508782  -0.3576181  -0.0001999  -0.000117  -0.000343   0.000089   0.000089  0.0000005  0.0000096    0.000080    0.000071
+2003   7  22  52842   0.194390   0.506512  -0.3573965  -0.0003019   0.000015  -0.000307   0.000084   0.000085  0.0000005  0.0000093    0.000082    0.000073
+2003   7  23  52843   0.197261   0.504048  -0.3570674  -0.0004012   0.000304  -0.000326   0.000083   0.000083  0.0000036  0.0000092    0.000097    0.000090
+2003   7  24  52844   0.200013   0.501824  -0.3565978  -0.0005186   0.000559  -0.000320   0.000084   0.000084  0.0000058  0.0000092    0.000114    0.000112
+2003   7  25  52845   0.202563   0.499769  -0.3560295  -0.0006179   0.000418  -0.000065   0.000085   0.000085  0.0000018  0.0000094    0.000105    0.000088
+2003   7  26  52846   0.204786   0.497446  -0.3554746  -0.0006602   0.000254   0.000041   0.000089   0.000089  0.0000007  0.0000101    0.000096    0.000076
+2003   7  27  52847   0.206903   0.494993  -0.3549295  -0.0006314   0.000136   0.000000   0.000091   0.000091  0.0000007  0.0000106    0.000090    0.000075
+2003   7  28  52848   0.209014   0.492343  -0.3543164  -0.0005868   0.000074  -0.000108   0.000088   0.000088  0.0000007  0.0000100    0.000084    0.000073
+2003   7  29  52849   0.211377   0.489443  -0.3536463  -0.0005027   0.000092  -0.000230   0.000085   0.000085  0.0000008  0.0000094    0.000078    0.000072
+2003   7  30  52850   0.213843   0.486665  -0.3531171  -0.0002956   0.000295  -0.000210   0.000083   0.000083  0.0000392  0.0000094    0.000142    0.000104
+2003   7  31  52851   0.216600   0.484096  -0.3530723  -0.0000692   0.000327  -0.000245   0.000084   0.000084  0.0000075  0.0000095    0.000131    0.000095
+2003   8   1  52852   0.219180   0.481784  -0.3531154   0.0001208   0.000253  -0.000297   0.000084   0.000085  0.0000021  0.0000098    0.000093    0.000071
+2003   8   2  52853   0.221509   0.479730  -0.3532677   0.0002825   0.000203  -0.000309   0.000086   0.000087  0.0000006  0.0000102    0.000080    0.000065
+2003   8   3  52854   0.223035   0.477488  -0.3535927   0.0003652   0.000178  -0.000293   0.000086   0.000086  0.0000007  0.0000101    0.000076    0.000065
+2003   8   4  52855   0.224884   0.474941  -0.3539993   0.0003415   0.000178  -0.000266   0.000082   0.000082  0.0000007  0.0000094    0.000071    0.000065
+2003   8   5  52856   0.226452   0.472621  -0.3543110   0.0001589   0.000199  -0.000240   0.000079   0.000079  0.0000007  0.0000090    0.000067    0.000065
+2003   8   6  52857   0.228223   0.469798  -0.3543725  -0.0000720   0.000255  -0.000232   0.000079   0.000079  0.0000027  0.0000090    0.000074    0.000068
+2003   8   7  52858   0.230166   0.466828  -0.3541592  -0.0002947   0.000273  -0.000254   0.000081   0.000081  0.0000042  0.0000092    0.000084    0.000072
+2003   8   8  52859   0.232270   0.463887  -0.3537373  -0.0005087   0.000214  -0.000301   0.000081   0.000081  0.0000016  0.0000094    0.000095    0.000076
+2003   8   9  52860   0.234068   0.461311  -0.3531838  -0.0006067  -0.000079  -0.000380   0.000084   0.000083  0.0000044  0.0000100    0.000097    0.000235
+2003   8  10  52861   0.235967   0.459010  -0.3525975  -0.0005485  -0.000280  -0.000436   0.000087   0.000085  0.0000068  0.0000106    0.000099    0.000346
+2003   8  11  52862   0.237731   0.457035  -0.3520934  -0.0003888  -0.000128  -0.000429   0.000087   0.000085  0.0000040  0.0000104    0.000101    0.000234
+2003   8  12  52863   0.239609   0.454650  -0.3517699  -0.0002047   0.000127  -0.000388   0.000084   0.000082  0.0000012  0.0000100    0.000105    0.000121
+2003   8  13  52864   0.241355   0.452374  -0.3516699   0.0000005   0.000272  -0.000287   0.000084   0.000082  0.0000074  0.0000100    0.000211    0.000212
+2003   8  14  52865   0.243125   0.449924  -0.3517717   0.0001716   0.000364  -0.000275   0.000086   0.000084  0.0000076  0.0000102    0.000193    0.000185
+2003   8  15  52866   0.244730   0.447662  -0.3519912   0.0002666   0.000386  -0.000293   0.000085   0.000083  0.0000021  0.0000102    0.000131    0.000108
+2003   8  16  52867   0.245997   0.444967  -0.3522878   0.0003060   0.000340  -0.000237   0.000088   0.000085  0.0000006  0.0000106    0.000106    0.000082
+2003   8  17  52868   0.247584   0.441934  -0.3526011   0.0003022   0.000253  -0.000162   0.000090   0.000088  0.0000006  0.0000109    0.000095    0.000076
+2003   8  18  52869   0.249183   0.438859  -0.3528368   0.0001760   0.000158  -0.000130   0.000087   0.000086  0.0000006  0.0000103    0.000084    0.000069
+2003   8  19  52870   0.250634   0.435653  -0.3529003  -0.0000456   0.000089  -0.000166   0.000084   0.000084  0.0000005  0.0000099    0.000073    0.000063
+2003   8  20  52871   0.252320   0.432631  -0.3527362  -0.0002641   0.000067  -0.000343   0.000084   0.000083  0.0000019  0.0000098    0.000448    0.000104
+2003   8  21  52872   0.253765   0.429949  -0.3523526  -0.0004469   0.000086  -0.000519   0.000085   0.000084  0.0000029  0.0000098    0.000922    0.000158
+2003   8  22  52873   0.255074   0.427463  -0.3518304  -0.0005622   0.000131  -0.000470   0.000086   0.000084  0.0000012  0.0000100    0.000362    0.000117
+2003   8  23  52874   0.255918   0.425174  -0.3512715  -0.0006186   0.000152  -0.000365   0.000088   0.000086  0.0000076  0.0000105    0.000115    0.000094
+2003   8  24  52875   0.256985   0.422257  -0.3506570  -0.0006270   0.000135  -0.000259   0.000093   0.000089  0.0000085  0.0000114    0.000111    0.000089
+2003   8  25  52876   0.258268   0.419030  -0.3500233  -0.0005385   0.000088  -0.000187   0.000094   0.000088  0.0000050  0.0000113    0.000107    0.000084
+2003   8  26  52877   0.259383   0.415883  -0.3495284  -0.0003590   0.000036  -0.000180   0.000088   0.000084  0.0000014  0.0000106    0.000103    0.000079
+2003   8  27  52878   0.260105   0.412555  -0.3493231  -0.0000645  -0.000041  -0.000260   0.000087   0.000083  0.0000306  0.0000106    0.000116    0.000108
+2003   8  28  52879   0.261258   0.409204  -0.3494335   0.0003019  -0.000002  -0.000349   0.000088   0.000084  0.0000099  0.0000107    0.000100    0.000084
+2003   8  29  52880   0.262390   0.406388  -0.3498553   0.0005523   0.000149  -0.000314   0.000087   0.000083  0.0000005  0.0000105    0.000092    0.000074
+2003   8  30  52881   0.263393   0.403442  -0.3505586   0.0007327   0.000241  -0.000223   0.000090   0.000085  0.0000107  0.0000109    0.000086    0.000614
+2003   8  31  52882   0.264458   0.400706  -0.3512691   0.0007558   0.000266  -0.000112   0.000093   0.000088  0.0000127  0.0000113    0.000078    0.001352
+2003   9   1  52883   0.265302   0.397654  -0.3518278   0.0005789   0.000248  -0.000021   0.000092   0.000088  0.0000088  0.0000106    0.000070    0.002091
+2003   9   2  52884   0.265637   0.394622  -0.3522933   0.0003343   0.000209   0.000018   0.000089   0.000085  0.0000050  0.0000100    0.000063    0.002829
+2003   9   3  52885   0.265422   0.391429  -0.3526168   0.0000745   0.000180  -0.000050   0.000083   0.000081  0.0000011  0.0000099    0.000055    0.000564
+2003   9   4  52886   0.265441   0.388134  -0.3526280  -0.0001278   0.000195  -0.000140   0.000084   0.000082  0.0000004  0.0000100    0.000190    0.000168
+2003   9   5  52887   0.265286   0.384705  -0.3523737  -0.0002654   0.000247  -0.000197   0.000086   0.000083  0.0000004  0.0000100    0.000119    0.000109
+2003   9   6  52888   0.265176   0.381022  -0.3520714  -0.0003051   0.000265  -0.000240   0.000088   0.000085  0.0000067  0.0000105    0.000074    0.000070
+2003   9   7  52889   0.265109   0.377690  -0.3518035  -0.0002703   0.000252  -0.000263   0.000095   0.000090  0.0000074  0.0000107    0.000068    0.000064
+2003   9   8  52890   0.264970   0.374399  -0.3516077  -0.0001068   0.000221  -0.000266   0.000096   0.000090  0.0000042  0.0000102    0.000063    0.000058
+2003   9   9  52891   0.264757   0.371372  -0.3515630   0.0000911   0.000180  -0.000258   0.000090   0.000087  0.0000010  0.0000098    0.000058    0.000052
+2003   9  10  52892   0.264466   0.368046  -0.3517232   0.0002522   0.000167  -0.000254   0.000089   0.000085  0.0000004  0.0000097    0.000066    0.000055
+2003   9  11  52893   0.264759   0.364676  -0.3520560   0.0003760   0.000145  -0.000253   0.000088   0.000085  0.0000004  0.0000096    0.000079    0.000060
+2003   9  12  52894   0.264519   0.361525  -0.3524596   0.0003765   0.000034  -0.000237   0.000086   0.000085  0.0000005  0.0000096    0.000086    0.000059
+2003   9  13  52895   0.264285   0.358118  -0.3528330   0.0003117  -0.000052  -0.000242   0.000092   0.000090  0.0000072  0.0000102    0.000087    0.000061
+2003   9  14  52896   0.264268   0.354946  -0.3531112   0.0002404  -0.000096  -0.000246   0.000091   0.000088  0.0000081  0.0000109    0.000087    0.000064
+2003   9  15  52897   0.264287   0.351925  -0.3533030   0.0001655  -0.000100  -0.000228   0.000083   0.000081  0.0000046  0.0000105    0.000087    0.000067
+2003   9  16  52898   0.264194   0.349070  -0.3534408   0.0000686  -0.000061  -0.000186   0.000080   0.000079  0.0000012  0.0000102    0.000088    0.000071
+2003   9  17  52899   0.264066   0.346120  -0.3534944  -0.0000483  -0.000016  -0.000069   0.000080   0.000080  0.0000133  0.0000103    0.000210    0.000223
+2003   9  18  52900   0.263969   0.343182  -0.3533537  -0.0001980   0.000082  -0.000030   0.000077   0.000078  0.0000044  0.0000103    0.000095    0.000091
+2003   9  19  52901   0.263775   0.339969  -0.3530925  -0.0002884   0.000186  -0.000128   0.000076   0.000078  0.0000006  0.0000103    0.000078    0.000067
+2003   9  20  52902   0.263106   0.336659  -0.3528078  -0.0002925   0.000259  -0.000178   0.000081   0.000082  0.0000063  0.0000107    0.000090    0.000079
+2003   9  21  52903   0.262506   0.333050  -0.3525538  -0.0002327   0.000280  -0.000193   0.000083   0.000085  0.0000070  0.0000111    0.000089    0.000079
+2003   9  22  52904   0.262611   0.329842  -0.3524116  -0.0000361   0.000242  -0.000218   0.000082   0.000086  0.0000040  0.0000108    0.000088    0.000078
+2003   9  23  52905   0.262612   0.327199  -0.3524777   0.0002180   0.000166  -0.000256   0.000080   0.000083  0.0000011  0.0000103    0.000087    0.000077
+2003   9  24  52906   0.261881   0.324339  -0.3528142   0.0004699   0.000007  -0.000421   0.000078   0.000082  0.0000059  0.0000103    0.000093    0.000104
+2003   9  25  52907   0.260956   0.321030  -0.3534170   0.0007213  -0.000008  -0.000434   0.000078   0.000083  0.0000097  0.0000103    0.000082    0.000090
+2003   9  26  52908   0.260037   0.317597  -0.3542383   0.0008983   0.000056  -0.000351   0.000078   0.000082  0.0000023  0.0000104    0.000066    0.000061
+2003   9  27  52909   0.259608   0.314188  -0.3551839   0.0009097   0.000073  -0.000286   0.000080   0.000084  0.0000036  0.0000109    0.000060    0.000053
+2003   9  28  52910   0.259437   0.311347  -0.3560839   0.0007794   0.000059  -0.000242   0.000086   0.000089  0.0000040  0.0000111    0.000057    0.000053
+2003   9  29  52911   0.259217   0.308619  -0.3567954   0.0006137   0.000036  -0.000225   0.000088   0.000089  0.0000023  0.0000105    0.000055    0.000052
+2003   9  30  52912   0.259108   0.306437  -0.3572646   0.0003988   0.000025  -0.000232   0.000085   0.000086  0.0000007  0.0000101    0.000052    0.000052
+2003  10   1  52913   0.258454   0.304341  -0.3575054   0.0001466   0.000095  -0.000233   0.000084   0.000085  0.0000105  0.0000100    0.000122    0.000111
+2003  10   2  52914   0.257368   0.301606  -0.3575639  -0.0000244   0.000186  -0.000224   0.000086   0.000087  0.0000177  0.0000100    0.000210    0.000185
+2003  10   3  52915   0.256215   0.298911  -0.3575334  -0.0000212   0.000141  -0.000263   0.000086   0.000086  0.0000043  0.0000100    0.000136    0.000121
+2003  10   4  52916   0.254915   0.296396  -0.3575515   0.0000710   0.000129  -0.000203   0.000089   0.000088  0.0000030  0.0000103    0.000094    0.000086
+2003  10   5  52917   0.253566   0.293704  -0.3577127   0.0002585   0.000144  -0.000091   0.000092   0.000093  0.0000032  0.0000108    0.000084    0.000078
+2003  10   6  52918   0.252293   0.290663  -0.3580655   0.0004424   0.000153  -0.000006   0.000089   0.000092  0.0000020  0.0000104    0.000074    0.000069
+2003  10   7  52919   0.250868   0.287602  -0.3586150   0.0006232   0.000148   0.000005   0.000086   0.000088  0.0000008  0.0000098    0.000065    0.000061
+2003  10   8  52920   0.249636   0.284860  -0.3593117   0.0007264   0.000109  -0.000132   0.000087   0.000088  0.0000008  0.0000097    0.000069    0.000072
+2003  10   9  52921   0.248015   0.282258  -0.3600591   0.0007004   0.000057  -0.000311   0.000087   0.000088  0.0000010  0.0000097    0.000077    0.000088
+2003  10  10  52922   0.246542   0.279458  -0.3607649   0.0006825   0.000023  -0.000361   0.000089   0.000090  0.0000006  0.0000100    0.000078    0.000072
+2003  10  11  52923   0.244445   0.276720  -0.3613899   0.0005865   0.000002  -0.000334   0.000092   0.000093  0.0000004  0.0000105    0.000073    0.000062
+2003  10  12  52924   0.242045   0.273878  -0.3619185   0.0004434   0.000003  -0.000254   0.000091   0.000089  0.0000004  0.0000106    0.000066    0.000057
+2003  10  13  52925   0.239823   0.270901  -0.3623296   0.0003112   0.000027  -0.000157   0.000086   0.000083  0.0000004  0.0000099    0.000060    0.000052
+2003  10  14  52926   0.237735   0.267713  -0.3625979   0.0001711   0.000068  -0.000092   0.000082   0.000081  0.0000003  0.0000094    0.000053    0.000047
+2003  10  15  52927   0.235756   0.264412  -0.3627110   0.0000530   0.000131  -0.000088   0.000081   0.000079  0.0000005  0.0000093    0.000103    0.000088
+2003  10  16  52928   0.233902   0.261255  -0.3626914  -0.0000554   0.000169  -0.000161   0.000082   0.000080  0.0000006  0.0000093    0.000105    0.000094
+2003  10  17  52929   0.231794   0.258222  -0.3625975  -0.0000919   0.000186  -0.000256   0.000083   0.000080  0.0000007  0.0000095    0.000089    0.000084
+2003  10  18  52930   0.229807   0.255198  -0.3625192  -0.0000378   0.000195  -0.000296   0.000084   0.000081  0.0000038  0.0000101    0.000078    0.000075
+2003  10  19  52931   0.227930   0.252680  -0.3625663   0.0001456   0.000197  -0.000278   0.000092   0.000087  0.0000041  0.0000107    0.000070    0.000065
+2003  10  20  52932   0.225996   0.250290  -0.3628362   0.0004307   0.000191  -0.000227   0.000095   0.000090  0.0000024  0.0000103    0.000061    0.000056
+2003  10  21  52933   0.223984   0.247583  -0.3633886   0.0006991   0.000175  -0.000172   0.000089   0.000086  0.0000007  0.0000098    0.000052    0.000046
+2003  10  22  52934   0.221934   0.244964  -0.3642329   0.0009756   0.000154  -0.000156   0.000090   0.000087  0.0000013  0.0000101    0.000105    0.000120
+2003  10  23  52935   0.220226   0.242409  -0.3653239   0.0012246   0.000106  -0.000187   0.000093   0.000090  0.0000008  0.0000104    0.000076    0.000085
+2003  10  24  52936   0.219315   0.240127  -0.3666086   0.0013381   0.000044  -0.000260   0.000092   0.000090  0.0000005  0.0000104    0.000072    0.000074
+2003  10  25  52937   0.218576   0.237982  -0.3679116   0.0012658  -0.000017  -0.000308   0.000097   0.000092  0.0000054  0.0000109    0.000074    0.000074
+2003  10  26  52938   0.218137   0.235924  -0.3691194   0.0010369  -0.000050  -0.000316   0.000098   0.000091  0.0000059  0.0000117    0.000072    0.000069
+2003  10  27  52939   0.217139   0.233983  -0.3700383   0.0006784  -0.000041  -0.000298   0.000096   0.000089  0.0000034  0.0000115    0.000070    0.000064
+2003  10  28  52940   0.215476   0.231809  -0.3704599   0.0003188   0.000005  -0.000275   0.000092   0.000086  0.0000009  0.0000111    0.000069    0.000059
+2003  10  29  52941   0.213767   0.229474  -0.3704668   0.0000418   0.000122  -0.000227   0.000091   0.000086  0.0000336  0.0000114    0.000104    0.000121
+2003  10  30  52942   0.212463   0.227162  -0.3705436  -0.0000697   0.000147  -0.000296   0.000097   0.000091  0.0000099  0.0000117    0.000109    0.000129
+2003  10  31  52943   0.211064   0.225307  -0.3704398  -0.0000779   0.000106  -0.000401   0.000096   0.000090  0.0000028  0.0000114    0.000102    0.000115
+2003  11   1  52944   0.209223   0.223595  -0.3703540  -0.0000288   0.000071  -0.000413   0.000096   0.000089  0.0000027  0.0000114    0.000093    0.000103
+2003  11   2  52945   0.207245   0.221869  -0.3704315   0.0001444   0.000041  -0.000355   0.000094   0.000088  0.0000028  0.0000116    0.000084    0.000092
+2003  11   3  52946   0.205027   0.219789  -0.3706861   0.0003496   0.000015  -0.000275   0.000087   0.000082  0.0000018  0.0000108    0.000074    0.000081
+2003  11   4  52947   0.202748   0.217227  -0.3711034   0.0005151   0.000000  -0.000212   0.000081   0.000079  0.0000007  0.0000103    0.000065    0.000070
+2003  11   5  52948   0.200257   0.214330  -0.3716365   0.0005724  -0.000079  -0.000236   0.000080   0.000079  0.0000486  0.0000103    0.000119    0.000121
+2003  11   6  52949   0.198239   0.211366  -0.3722202   0.0005533  -0.000056  -0.000307   0.000080   0.000079  0.0000157  0.0000102    0.000134    0.000135
+2003  11   7  52950   0.196268   0.208507  -0.3727460   0.0004749   0.000042  -0.000308   0.000078   0.000078  0.0000005  0.0000101    0.000081    0.000078
+2003  11   8  52951   0.194592   0.205961  -0.3731734   0.0003828   0.000055  -0.000265   0.000082   0.000081  0.0000030  0.0000104    0.000062    0.000058
+2003  11   9  52952   0.192682   0.203664  -0.3735105   0.0002636   0.000009  -0.000211   0.000084   0.000084  0.0000033  0.0000108    0.000061    0.000059
+2003  11  10  52953   0.190270   0.201446  -0.3737330   0.0001324  -0.000046  -0.000171   0.000080   0.000081  0.0000020  0.0000103    0.000061    0.000059
+2003  11  11  52954   0.187139   0.198913  -0.3738035   0.0000343  -0.000075  -0.000164   0.000079   0.000078  0.0000007  0.0000098    0.000061    0.000059
+2003  11  12  52955   0.184454   0.196343  -0.3737411  -0.0000409  -0.000036  -0.000256   0.000077   0.000077  0.0000065  0.0000099    0.000177    0.000399
+2003  11  13  52956   0.182103   0.194039  -0.3736721  -0.0000324   0.000052  -0.000317   0.000078   0.000078  0.0000111  0.0000101    0.000138    0.000290
+2003  11  14  52957   0.179805   0.191613  -0.3736869   0.0000241   0.000165  -0.000221   0.000080   0.000079  0.0000029  0.0000103    0.000088    0.000084
+2003  11  15  52958   0.177362   0.189382  -0.3737480   0.0001105   0.000187  -0.000174   0.000085   0.000083  0.0000043  0.0000106    0.000091    0.000080
+2003  11  16  52959   0.175095   0.187273  -0.3739166   0.0002596   0.000143  -0.000170   0.000088   0.000086  0.0000047  0.0000104    0.000082    0.000071
+2003  11  17  52960   0.172860   0.185725  -0.3742815   0.0004909   0.000088  -0.000186   0.000087   0.000084  0.0000028  0.0000097    0.000074    0.000063
+2003  11  18  52961   0.170036   0.184049  -0.3748724   0.0006889   0.000057  -0.000211   0.000084   0.000082  0.0000009  0.0000095    0.000065    0.000054
+2003  11  19  52962   0.167287   0.182050  -0.3756732   0.0008730   0.000144  -0.000217   0.000081   0.000079  0.0000058  0.0000095    0.000065    0.000048
+2003  11  20  52963   0.164411   0.180709  -0.3766412   0.0010128   0.000222  -0.000191   0.000083   0.000080  0.0000172  0.0000095    0.000103    0.000082
+2003  11  21  52964   0.161763   0.179438  -0.3776688   0.0010855   0.000187  -0.000220   0.000082   0.000080  0.0000040  0.0000095    0.000079    0.000072
+2003  11  22  52965   0.159411   0.178624  -0.3787612   0.0010460   0.000173  -0.000247   0.000086   0.000083  0.0000021  0.0000098    0.000063    0.000062
+2003  11  23  52966   0.156536   0.178018  -0.3797365   0.0007989   0.000164  -0.000260   0.000094   0.000090  0.0000023  0.0000104    0.000060    0.000058
+2003  11  24  52967   0.153500   0.176967  -0.3803940   0.0004962   0.000128  -0.000261   0.000095   0.000091  0.0000014  0.0000100    0.000056    0.000055
+2003  11  25  52968   0.149565   0.175831  -0.3807044   0.0002096   0.000060  -0.000251   0.000090   0.000088  0.0000006  0.0000096    0.000053    0.000052
+2003  11  26  52969   0.145256   0.174384  -0.3807712   0.0000045  -0.000066  -0.000226   0.000088   0.000086  0.0000006  0.0000096    0.000089    0.000074
+2003  11  27  52970   0.141130   0.173153  -0.3807317  -0.0000589  -0.000188  -0.000254   0.000090   0.000088  0.0000031  0.0000096    0.000943    0.000311
+2003  11  28  52971   0.137947   0.171986  -0.3807100   0.0000423  -0.000267  -0.000290   0.000090   0.000088  0.0000066  0.0000097    0.002093    0.000625
+2003  11  29  52972   0.134285   0.170890  -0.3807945   0.0002129  -0.000263  -0.000236   0.000092   0.000090  0.0000100  0.0000099    0.001718    0.000518
+2003  11  30  52973   0.130388   0.169228  -0.3810300   0.0003477  -0.000202  -0.000171   0.000090   0.000089  0.0000087  0.0000099    0.001200    0.000372
+2003  12   1  52974   0.126370   0.168059  -0.3814081   0.0004315  -0.000076  -0.000053   0.000344   0.000109  0.0000009  0.0000093    0.000053    0.000048
+2003  12   2  52975   0.123154   0.166823  -0.3819303   0.0005232  -0.000036  -0.000112   0.000224   0.000108  0.0000006  0.0000094    0.000046    0.000041
+2003  12   3  52976   0.120096   0.165623  -0.3824692   0.0005165   0.000006  -0.000166   0.000104   0.000106  0.0000022  0.0000095    0.000078    0.000075
+2003  12   4  52977   0.116989   0.164656  -0.3829707   0.0004472   0.000018  -0.000209   0.000110   0.000111  0.0000023  0.0000095    0.000127    0.000101
+2003  12   5  52978   0.114059   0.164079  -0.3833484   0.0003228  -0.000022  -0.000197   0.000112   0.000114  0.0000014  0.0000097    0.000079    0.000072
+2003  12   6  52979   0.111358   0.163757  -0.3836324   0.0002229  -0.000038  -0.000191   0.000111   0.000114  0.0000209  0.0000105    0.000091    0.000103
+2003  12   7  52980   0.108469   0.163268  -0.3838002   0.0000761  -0.000034  -0.000191   0.000117   0.000120  0.0000251  0.0000116    0.000136    0.000163
+2003  12   8  52981   0.105435   0.162707  -0.3837880  -0.0001181  -0.000023  -0.000190   0.000122   0.000125  0.0000178  0.0000114    0.000183    0.000222
+2003  12   9  52982   0.102491   0.162207  -0.3835742  -0.0003086  -0.000006  -0.000190   0.000117   0.000120  0.0000104  0.0000104    0.000228    0.000282
+2003  12  10  52983   0.099761   0.161795  -0.3832055  -0.0004165   0.000064  -0.000162   0.000107   0.000111  0.0000024  0.0000103    0.000080    0.000088
+2003  12  11  52984   0.096791   0.161253  -0.3828052  -0.0003892   0.000169  -0.000174   0.000108   0.000111  0.0000008  0.0000104    0.000051    0.000071
+2003  12  12  52985   0.093380   0.160599  -0.3824388  -0.0003217   0.000293  -0.000238   0.000111   0.000112  0.0000011  0.0000105    0.000068    0.000067
+2003  12  13  52986   0.089724   0.159745  -0.3821347  -0.0002065   0.000290  -0.000257   0.000114   0.000114  0.0000094  0.0000110    0.000070    0.000062
+2003  12  14  52987   0.086419   0.158961  -0.3819601  -0.0000613   0.000229  -0.000251   0.000116   0.000116  0.0000104  0.0000108    0.000068    0.000064
+2003  12  15  52988   0.083534   0.158775  -0.3819852   0.0001642   0.000156  -0.000241   0.000113   0.000112  0.0000062  0.0000093    0.000065    0.000065
+2003  12  16  52989   0.080589   0.158714  -0.3822511   0.0003817   0.000077  -0.000224   0.000109   0.000108  0.0000020  0.0000086    0.000062    0.000066
+2003  12  17  52990   0.077647   0.158345  -0.3827602   0.0006316   0.000042  -0.000210   0.000109   0.000108  0.0000009  0.0000087    0.000048    0.000052
+2003  12  18  52991   0.074464   0.157968  -0.3834527   0.0007717   0.000025  -0.000195   0.000104   0.000104  0.0000007  0.0000088    0.000031    0.000033
+2003  12  19  52992   0.071494   0.157459  -0.3842278   0.0008104   0.000027  -0.000149   0.000103   0.000103  0.0000009  0.0000089    0.000044    0.000042
+2003  12  20  52993   0.068882   0.157150  -0.3850167   0.0007622   0.000050  -0.000124   0.000121   0.000122  0.0000092  0.0000097    0.000048    0.000046
+2003  12  21  52994   0.066367   0.156661  -0.3856702   0.0005748   0.000083  -0.000112   0.000130   0.000129  0.0000102  0.0000106    0.000047    0.000046
+2003  12  22  52995   0.063518   0.156089  -0.3860857   0.0002744   0.000118  -0.000105   0.000124   0.000120  0.0000060  0.0000103    0.000047    0.000047
+2003  12  23  52996   0.060393   0.155668  -0.3862870   0.0000791   0.000151  -0.000104   0.000116   0.000115  0.0000018  0.0000097    0.000046    0.000047
+2003  12  24  52997   0.056627   0.155292  -0.3863766   0.0000533   0.000148  -0.000107   0.000116   0.000115  0.0000009  0.0000095    0.000045    0.000047
+2003  12  25  52998   0.052661   0.154984  -0.3864777   0.0001149   0.000130  -0.000116   0.000119   0.000119  0.0000009  0.0000093    0.000045    0.000046
+2003  12  26  52999   0.048884   0.154722  -0.3866826   0.0002618   0.000105  -0.000125   0.000121   0.000120  0.0000009  0.0000096    0.000045    0.000046
+2003  12  27  53000   0.045898   0.154702  -0.3870242   0.0003904   0.000076  -0.000136   0.000124   0.000123  0.0000009  0.0000102    0.000045    0.000045
+2003  12  28  53001   0.042911   0.154946  -0.3874793   0.0005125   0.000045  -0.000144   0.000123   0.000122  0.0000009  0.0000104    0.000045    0.000045
+2003  12  29  53002   0.039893   0.155003  -0.3879975   0.0005853   0.000016  -0.000150   0.000121   0.000120  0.0000009  0.0000097    0.000045    0.000044
+2003  12  30  53003   0.036967   0.154668  -0.3885330   0.0005882  -0.000007  -0.000154   0.000115   0.000115  0.0000009  0.0000091    0.000045    0.000044
+2003  12  31  53004   0.034089   0.154381  -0.3890596   0.0005435  -0.000002  -0.000145   0.000114   0.000116  0.0000352  0.0000091    0.000044    0.000043
+2004   1   1  53005   0.031236   0.154053  -0.3895824   0.0004715   0.000016  -0.000132   0.000119   0.000120  0.0000641  0.0000093    0.000043    0.000042
+2004   1   2  53006   0.028865   0.153841  -0.3900752   0.0004016   0.000041  -0.000121   0.000122   0.000124  0.0000389  0.0000093    0.000042    0.000042
+2004   1   3  53007   0.026700   0.154032  -0.3904395   0.0002578   0.000070  -0.000113   0.000124   0.000127  0.0000188  0.0000097    0.000041    0.000041
+2004   1   4  53008   0.024224   0.154461  -0.3906070   0.0000837   0.000101  -0.000107   0.000125   0.000128  0.0000200  0.0000106    0.000039    0.000040
+2004   1   5  53009   0.021576   0.155071  -0.3906044  -0.0000612   0.000132  -0.000107   0.000123   0.000127  0.0000212  0.0000107    0.000038    0.000039
+2004   1   6  53010   0.018733   0.155682  -0.3905153  -0.0001252   0.000159  -0.000111   0.000117   0.000121  0.0000220  0.0000104    0.000037    0.000039
+2004   1   7  53011   0.015930   0.156348  -0.3904412  -0.0000383   0.000130  -0.000158   0.000115   0.000118  0.0000203  0.0000102    0.000042    0.000055
+2004   1   8  53012   0.012987   0.157133  -0.3904554   0.0000835   0.000081  -0.000214   0.000116   0.000119  0.0000147  0.0000099    0.000048    0.000077
+2004   1   9  53013   0.010028   0.157613  -0.3906134   0.0002495   0.000123  -0.000206   0.000118   0.000120  0.0000043  0.0000102    0.000082    0.000082
+2004   1  10  53014   0.007678   0.157895  -0.3909799   0.0004889   0.000139  -0.000207   0.000123   0.000123  0.0000123  0.0000109    0.000085    0.000075
+2004   1  11  53015   0.005344   0.158097  -0.3915956   0.0007437   0.000130  -0.000213   0.000130   0.000129  0.0000135  0.0000113    0.000074    0.000066
+2004   1  12  53016   0.003079   0.158589  -0.3924711   0.0010234   0.000117  -0.000211   0.000132   0.000131  0.0000077  0.0000108    0.000062    0.000057
+2004   1  13  53017   0.000854   0.159336  -0.3935791   0.0012004   0.000102  -0.000203   0.000127   0.000126  0.0000020  0.0000106    0.000051    0.000048
+2004   1  14  53018  -0.001054   0.160190  -0.3948402   0.0012756   0.000065   0.000010   0.000128   0.000128  0.0000024  0.0000108    0.000140    0.000099
+2004   1  15  53019  -0.003313   0.161664  -0.3961012   0.0012317   0.000017  -0.000008   0.000132   0.000129  0.0000022  0.0000108    0.000125    0.000092
+2004   1  16  53020  -0.005434   0.162911  -0.3972551   0.0010767  -0.000031  -0.000112   0.000130   0.000129  0.0000015  0.0000108    0.000073    0.000062
+2004   1  17  53021  -0.007643   0.163977  -0.3982400   0.0008194  -0.000025  -0.000106   0.000133   0.000131  0.0000179  0.0000113    0.000058    0.000054
+2004   1  18  53022  -0.010167   0.165272  -0.3989700   0.0005701   0.000002  -0.000066   0.000139   0.000134  0.0000216  0.0000117    0.000058    0.000053
+2004   1  19  53023  -0.013266   0.166644  -0.3994220   0.0003515   0.000032  -0.000033   0.000139   0.000136  0.0000152  0.0000112    0.000058    0.000053
+2004   1  20  53024  -0.016187   0.167452  -0.3996693   0.0001903   0.000062  -0.000009   0.000139   0.000136  0.0000087  0.0000107    0.000057    0.000052
+2004   1  21  53025  -0.018721   0.168613  -0.3998414   0.0001864   0.000089   0.000008   0.000133   0.000133  0.0000020  0.0000109    0.000056    0.000052
+2004   1  22  53026  -0.021163   0.170309  -0.4000744   0.0003027   0.000057  -0.000070   0.000134   0.000134  0.0000009  0.0000111    0.000073    0.000063
+2004   1  23  53027  -0.023865   0.172129  -0.4004427   0.0004388   0.000009  -0.000173   0.000141   0.000140  0.0000013  0.0000111    0.000094    0.000077
+2004   1  24  53028  -0.026296   0.173438  -0.4009611   0.0006119  -0.000017  -0.000197   0.000141   0.000139  0.0000107  0.0000114    0.000093    0.000076
+2004   1  25  53029  -0.027898   0.174755  -0.4016448   0.0007721  -0.000032  -0.000188   0.000143   0.000141  0.0000117  0.0000124    0.000083    0.000069
+2004   1  26  53030  -0.029133   0.176148  -0.4024566   0.0008425  -0.000042  -0.000172   0.000140   0.000139  0.0000067  0.0000123    0.000073    0.000063
+2004   1  27  53031  -0.030213   0.177690  -0.4033032   0.0008082  -0.000047  -0.000150   0.000130   0.000131  0.0000017  0.0000116    0.000062    0.000057
+2004   1  28  53032  -0.031610   0.179457  -0.4040772   0.0007069  -0.000027  -0.000170   0.000128   0.000130  0.0000063  0.0000116    0.000060    0.000055
+2004   1  29  53033  -0.033479   0.181298  -0.4046737   0.0004852   0.000002  -0.000196   0.000133   0.000134  0.0000105  0.0000115    0.000060    0.000055
+2004   1  30  53034  -0.035908   0.183176  -0.4050364   0.0002490   0.000035  -0.000219   0.000132   0.000132  0.0000031  0.0000114    0.000060    0.000055
+2004   1  31  53035  -0.038945   0.184868  -0.4051870   0.0000284   0.000060  -0.000187   0.000134   0.000132  0.0000294  0.0000120    0.000064    0.000059
+2004   2   1  53036  -0.042094   0.186116  -0.4051590  -0.0001095   0.000081  -0.000136   0.000135   0.000133  0.0000329  0.0000135    0.000071    0.000065
+2004   2   2  53037  -0.044894   0.187257  -0.4049868  -0.0002022   0.000096  -0.000087   0.000129   0.000127  0.0000186  0.0000138    0.000078    0.000071
+2004   2   3  53038  -0.047999   0.188302  -0.4047162  -0.0002583   0.000104  -0.000042   0.000127   0.000125  0.0000043  0.0000131    0.000085    0.000077
+2004   2   4  53039  -0.051183   0.189242  -0.4044127  -0.0002474   0.000096  -0.000069   0.000125   0.000123  0.0000122  0.0000131    0.000235    0.000248
+2004   2   5  53040  -0.054207   0.190061  -0.4041840  -0.0001480   0.000093  -0.000117   0.000124   0.000123  0.0000198  0.0000131    0.000179    0.000190
+2004   2   6  53041  -0.056523   0.190969  -0.4041205   0.0000493   0.000099  -0.000174   0.000123   0.000122  0.0000050  0.0000133    0.000072    0.000063
+2004   2   7  53042  -0.058852   0.192254  -0.4042429   0.0002838   0.000055  -0.000173   0.000127   0.000124  0.0000352  0.0000142    0.000069    0.000057
+2004   2   8  53043  -0.060587   0.193745  -0.4046175   0.0005600  -0.000004  -0.000145   0.000130   0.000125  0.0000395  0.0000133    0.000067    0.000058
+2004   2   9  53044  -0.062527   0.195620  -0.4052639   0.0007410  -0.000058  -0.000114   0.000125   0.000122  0.0000222  0.0000110    0.000066    0.000059
+2004   2  10  53045  -0.064895   0.197407  -0.4061156   0.0008908  -0.000105  -0.000079   0.000120   0.000116  0.0000049  0.0000103    0.000064    0.000060
+2004   2  11  53046  -0.067650   0.199375  -0.4070604   0.0009446  -0.000033  -0.000093   0.000118   0.000115  0.0000037  0.0000101    0.000187    0.000166
+2004   2  12  53047  -0.070743   0.201154  -0.4079712   0.0008583   0.000039  -0.000081   0.000121   0.000118  0.0000033  0.0000102    0.000154    0.000154
+2004   2  13  53048  -0.073736   0.202878  -0.4087533   0.0006698   0.000055  -0.000041   0.000120   0.000117  0.0000018  0.0000104    0.000096    0.000088
+2004   2  14  53049  -0.076724   0.204734  -0.4093509   0.0004503   0.000065  -0.000016   0.000124   0.000120  0.0000182  0.0000111    0.000065    0.000058
+2004   2  15  53050  -0.079519   0.206457  -0.4097180   0.0002328   0.000076  -0.000004   0.000126   0.000121  0.0000200  0.0000121    0.000041    0.000042
+2004   2  16  53051  -0.081462   0.208292  -0.4098826   0.0001072   0.000071  -0.000021   0.000122   0.000117  0.0000112  0.0000116    0.000032    0.000037
+2004   2  17  53052  -0.082989   0.210420  -0.4099540   0.0000519   0.000045  -0.000075   0.000113   0.000111  0.0000023  0.0000108    0.000047    0.000045
+2004   2  18  53053  -0.084267   0.212485  -0.4100691   0.0001823   0.000055  -0.000173   0.000112   0.000109  0.0000037  0.0000108    0.000161    0.000097
+2004   2  19  53054  -0.086542   0.215211  -0.4103336   0.0003906   0.000069  -0.000248   0.000117   0.000113  0.0000034  0.0000107    0.000140    0.000141
+2004   2  20  53055  -0.089877   0.217394  -0.4108216   0.0006096   0.000035  -0.000245   0.000116   0.000112  0.0000018  0.0000108    0.000089    0.000093
+2004   2  21  53056  -0.093035   0.219789  -0.4115565   0.0008224   0.000008  -0.000239   0.000117   0.000114  0.0000012  0.0000114    0.000073    0.000068
+2004   2  22  53057  -0.095686   0.222202  -0.4124948   0.0010220  -0.000010  -0.000237   0.000118   0.000114  0.0000010  0.0000119    0.000069    0.000063
+2004   2  23  53058  -0.097893   0.224529  -0.4135467   0.0010946  -0.000025  -0.000225   0.000112   0.000109  0.0000008  0.0000112    0.000064    0.000058
+2004   2  24  53059  -0.099929   0.226640  -0.4146059   0.0010276  -0.000037  -0.000206   0.000105   0.000105  0.0000006  0.0000108    0.000060    0.000053
+2004   2  25  53060  -0.101237   0.228886  -0.4155745   0.0008831  -0.000033  -0.000219   0.000105   0.000105  0.0000158  0.0000106    0.000062    0.000055
+2004   2  26  53061  -0.102578   0.231245  -0.4163724   0.0006681  -0.000020  -0.000236   0.000108   0.000106  0.0000268  0.0000105    0.000065    0.000059
+2004   2  27  53062  -0.103905   0.233609  -0.4169678   0.0005151  -0.000003  -0.000248   0.000108   0.000106  0.0000068  0.0000108    0.000068    0.000063
+2004   2  28  53063  -0.106020   0.236184  -0.4173886   0.0002629  -0.000006  -0.000214   0.000113   0.000110  0.0000160  0.0000116    0.000067    0.000060
+2004   2  29  53064  -0.108375   0.238064  -0.4175723   0.0000164  -0.000014  -0.000162   0.000119   0.000115  0.0000177  0.0000119    0.000063    0.000054
+2004   3   1  53065  -0.110504   0.240170  -0.4175213  -0.0001005  -0.000021  -0.000112   0.000117   0.000112  0.0000100  0.0000108    0.000060    0.000048
+2004   3   2  53066  -0.112334   0.242278  -0.4173489  -0.0001544  -0.000028  -0.000067   0.000109   0.000108  0.0000024  0.0000102    0.000056    0.000043
+2004   3   3  53067  -0.113956   0.244491  -0.4171975  -0.0001127   0.000014  -0.000074   0.000109   0.000107  0.0000008  0.0000101    0.000049    0.000038
+2004   3   4  53068  -0.115486   0.246521  -0.4171776   0.0000846   0.000065  -0.000098   0.000107   0.000105  0.0000007  0.0000102    0.000040    0.000034
+2004   3   5  53069  -0.117248   0.249180  -0.4173509   0.0002714   0.000078  -0.000173   0.000106   0.000105  0.0000011  0.0000103    0.000071    0.000065
+2004   3   6  53070  -0.119039   0.251636  -0.4177038   0.0005031   0.000065  -0.000166   0.000113   0.000110  0.0000243  0.0000106    0.000076    0.000070
+2004   3   7  53071  -0.120237   0.254379  -0.4183049   0.0007401   0.000042  -0.000123   0.000111   0.000108  0.0000270  0.0000112    0.000068    0.000061
+2004   3   8  53072  -0.121667   0.256555  -0.4191532   0.0009172   0.000016  -0.000081   0.000104   0.000101  0.0000151  0.0000107    0.000059    0.000053
+2004   3   9  53073  -0.122322   0.258221  -0.4201178   0.0009393  -0.000009  -0.000036   0.000098   0.000098  0.0000032  0.0000105    0.000050    0.000044
+2004   3  10  53074  -0.123038   0.260322  -0.4210283   0.0008225  -0.000150  -0.000215   0.000096   0.000096  0.0000013  0.0000106    0.000054    0.000061
+2004   3  11  53075  -0.123780   0.262269  -0.4217297   0.0005868  -0.000162  -0.000233   0.000097   0.000097  0.0000014  0.0000105    0.000062    0.000071
+2004   3  12  53076  -0.124434   0.264400  -0.4221904   0.0003200  -0.000119  -0.000180   0.000095   0.000098  0.0000014  0.0000105    0.000071    0.000077
+2004   3  13  53077  -0.125156   0.266407  -0.4224645   0.0001182  -0.000068  -0.000134   0.000096   0.000100  0.0000101  0.0000110    0.000073    0.000075
+2004   3  14  53078  -0.126050   0.268763  -0.4225474  -0.0000146  -0.000012  -0.000087   0.000101   0.000104  0.0000113  0.0000116    0.000072    0.000070
+2004   3  15  53079  -0.126919   0.270805  -0.4224975  -0.0000226   0.000041  -0.000041   0.000098   0.000103  0.0000071  0.0000111    0.000071    0.000065
+2004   3  16  53080  -0.128074   0.273030  -0.4224582   0.0000635   0.000087   0.000003   0.000094   0.000098  0.0000029  0.0000103    0.000070    0.000060
+2004   3  17  53081  -0.129231   0.275012  -0.4225716   0.0002352   0.000066  -0.000015   0.000095   0.000099  0.0000098  0.0000103    0.000073    0.000062
+2004   3  18  53082  -0.130034   0.277263  -0.4229025   0.0004773   0.000022  -0.000052   0.000097   0.000102  0.0000154  0.0000106    0.000078    0.000065
+2004   3  19  53083  -0.131151   0.279797  -0.4234890   0.0007449  -0.000046  -0.000044   0.000098   0.000101  0.0000047  0.0000107    0.000084    0.000088
+2004   3  20  53084  -0.131758   0.282096  -0.4243894   0.0009899  -0.000096  -0.000038   0.000103   0.000105  0.0000144  0.0000112    0.000081    0.000088
+2004   3  21  53085  -0.131801   0.284914  -0.4254742   0.0011469  -0.000133  -0.000041   0.000106   0.000108  0.0000158  0.0000118    0.000076    0.000077
+2004   3  22  53086  -0.131909   0.288103  -0.4266064   0.0011597  -0.000161  -0.000045   0.000099   0.000103  0.0000092  0.0000113    0.000070    0.000067
+2004   3  23  53087  -0.131921   0.291482  -0.4277263   0.0011365  -0.000179  -0.000047   0.000097   0.000101  0.0000025  0.0000107    0.000064    0.000056
+2004   3  24  53088  -0.132033   0.295183  -0.4287960   0.0010296  -0.000117  -0.000060   0.000097   0.000100  0.0000013  0.0000106    0.000068    0.000063
+2004   3  25  53089  -0.132913   0.298572  -0.4297679   0.0008762  -0.000030  -0.000073   0.000097   0.000098  0.0000014  0.0000106    0.000074    0.000073
+2004   3  26  53090  -0.134037   0.302003  -0.4305939   0.0007541   0.000059  -0.000086   0.000098   0.000099  0.0000016  0.0000108    0.000081    0.000084
+2004   3  27  53091  -0.135574   0.305520  -0.4312464   0.0005668   0.000063  -0.000062   0.000100   0.000100  0.0000065  0.0000112    0.000078    0.000080
+2004   3  28  53092  -0.136949   0.308548  -0.4317354   0.0004212   0.000030  -0.000026   0.000104   0.000102  0.0000068  0.0000116    0.000072    0.000072
+2004   3  29  53093  -0.137899   0.311751  -0.4321220   0.0003438  -0.000009   0.000006   0.000103   0.000101  0.0000040  0.0000111    0.000066    0.000063
+2004   3  30  53094  -0.138764   0.314968  -0.4325020   0.0004125  -0.000055   0.000031   0.000098   0.000097  0.0000012  0.0000106    0.000060    0.000054
+2004   3  31  53095  -0.139493   0.317994  -0.4329756   0.0005571  -0.000017  -0.000014   0.000098   0.000096  0.0000084  0.0000104    0.000061    0.000058
+2004   4   1  53096  -0.140183   0.320818  -0.4336240   0.0007446   0.000038  -0.000080   0.000101   0.000097  0.0000140  0.0000103    0.000063    0.000065
+2004   4   2  53097  -0.140735   0.323573  -0.4344826   0.0009505   0.000085  -0.000145   0.000102   0.000098  0.0000039  0.0000104    0.000065    0.000072
+2004   4   3  53098  -0.140779   0.326225  -0.4355321   0.0012107   0.000037  -0.000167   0.000106   0.000102  0.0000092  0.0000113    0.000064    0.000069
+2004   4   4  53099  -0.140925   0.328893  -0.4368342   0.0014525  -0.000046  -0.000166   0.000111   0.000106  0.0000101  0.0000119    0.000062    0.000063
+2004   4   5  53100  -0.141217   0.331219  -0.4383618   0.0015537  -0.000129  -0.000155   0.000109   0.000105  0.0000060  0.0000110    0.000059    0.000057
+2004   4   6  53101  -0.140842   0.333468  -0.4399545   0.0015310  -0.000205  -0.000136   0.000102   0.000100  0.0000019  0.0000102    0.000057    0.000050
+2004   4   7  53102  -0.140150   0.336390  -0.4414207   0.0013486  -0.000211  -0.000070   0.000102   0.000100  0.0000012  0.0000101    0.000079    0.000088
+2004   4   8  53103  -0.139912   0.339581  -0.4426219   0.0010606  -0.000088  -0.000037   0.000103   0.000100  0.0000014  0.0000102    0.000070    0.000068
+2004   4   9  53104  -0.139784   0.342735  -0.4435121   0.0007633  -0.000050  -0.000016   0.000103   0.000100  0.0000084  0.0000102    0.000062    0.000055
+2004   4  10  53105  -0.139249   0.345954  -0.4441857   0.0005247  -0.000052   0.000006   0.000107   0.000103  0.0000163  0.0000108    0.000058    0.000050
+2004   4  11  53106  -0.138722   0.349394  -0.4446718   0.0003581  -0.000049   0.000028   0.000108   0.000105  0.0000130  0.0000118    0.000056    0.000046
+2004   4  12  53107  -0.138931   0.352543  -0.4449852   0.0003142  -0.000044   0.000049   0.000104   0.000101  0.0000077  0.0000114    0.000053    0.000042
+2004   4  13  53108  -0.139128   0.355477  -0.4453479   0.0004583  -0.000037   0.000069   0.000100   0.000098  0.0000023  0.0000108    0.000050    0.000038
+2004   4  14  53109  -0.139108   0.358216  -0.4459400   0.0006871  -0.000012   0.000044   0.000096   0.000094  0.0000009  0.0000107    0.000043    0.000042
+2004   4  15  53110  -0.138608   0.361055  -0.4467435   0.0008863   0.000039   0.000086   0.000096   0.000094  0.0000009  0.0000104    0.000072    0.000063
+2004   4  16  53111  -0.137409   0.363875  -0.4476939   0.0010075   0.000007   0.000164   0.000100   0.000098  0.0000012  0.0000107    0.000078    0.000079
+2004   4  17  53112  -0.135909   0.367269  -0.4487286   0.0010624   0.000032   0.000193   0.000104   0.000100  0.0000082  0.0000115    0.000074    0.000081
+2004   4  18  53113  -0.134759   0.370676  -0.4497727   0.0010033   0.000088   0.000197   0.000103   0.000099  0.0000091  0.0000111    0.000071    0.000078
+2004   4  19  53114  -0.133484   0.373922  -0.4507417   0.0009077   0.000141   0.000196   0.000097   0.000093  0.0000055  0.0000099    0.000068    0.000076
+2004   4  20  53115  -0.132771   0.377476  -0.4515546   0.0007462   0.000191   0.000188   0.000093   0.000090  0.0000020  0.0000094    0.000064    0.000073
+2004   4  21  53116  -0.132974   0.380609  -0.4521512   0.0004679   0.000203   0.000178   0.000092   0.000090  0.0000081  0.0000093    0.000063    0.000072
+2004   4  22  53117  -0.133186   0.382934  -0.4525059   0.0002311   0.000200   0.000166   0.000093   0.000091  0.0000132  0.0000094    0.000062    0.000071
+2004   4  23  53118  -0.132942   0.385435  -0.4526250   0.0000171   0.000191   0.000153   0.000094   0.000092  0.0000039  0.0000097    0.000062    0.000071
+2004   4  24  53119  -0.132812   0.387501  -0.4525425  -0.0001444   0.000174   0.000125   0.000096   0.000094  0.0000154  0.0000103    0.000064    0.000072
+2004   4  25  53120  -0.132093   0.389267  -0.4523369  -0.0002440   0.000154   0.000094   0.000097   0.000096  0.0000171  0.0000119    0.000066    0.000073
+2004   4  26  53121  -0.130597   0.391103  -0.4521117  -0.0002149   0.000133   0.000067   0.000095   0.000096  0.0000097  0.0000123    0.000068    0.000075
+2004   4  27  53122  -0.128513   0.393108  -0.4519686  -0.0000708   0.000113   0.000042   0.000091   0.000092  0.0000023  0.0000115    0.000071    0.000077
+2004   4  28  53123  -0.126798   0.395377  -0.4519906   0.0001167   0.000186   0.000099   0.000088   0.000089  0.0000139  0.0000114    0.000202    0.000277
+2004   4  29  53124  -0.125025   0.398212  -0.4522198   0.0003354   0.000281   0.000174   0.000089   0.000090  0.0000255  0.0000114    0.000368    0.000528
+2004   4  30  53125  -0.123514   0.401310  -0.4526838   0.0006074   0.000226   0.000156   0.000089   0.000090  0.0000065  0.0000116    0.000139    0.000177
+2004   5   1  53126  -0.121397   0.404515  -0.4534163   0.0009002   0.000185   0.000126   0.000092   0.000095  0.0000013  0.0000125    0.000068    0.000072
+2004   5   2  53127  -0.119730   0.407684  -0.4543961   0.0010628   0.000147   0.000088   0.000101   0.000102  0.0000012  0.0000138    0.000057    0.000060
+2004   5   3  53128  -0.118432   0.410767  -0.4555360   0.0011630   0.000109   0.000042   0.000106   0.000106  0.0000011  0.0000139    0.000047    0.000048
+2004   5   4  53129  -0.117112   0.413777  -0.4567035   0.0011209   0.000072  -0.000005   0.000102   0.000103  0.0000010  0.0000133    0.000036    0.000036
+2004   5   5  53130  -0.115833   0.416640  -0.4577591   0.0009618   0.000141  -0.000054   0.000101   0.000102  0.0000011  0.0000131    0.000038    0.000034
+2004   5   6  53131  -0.115013   0.419413  -0.4586116   0.0007329   0.000237  -0.000096   0.000100   0.000100  0.0000013  0.0000128    0.000043    0.000036
+2004   5   7  53132  -0.114004   0.421820  -0.4592406   0.0005090   0.000213  -0.000108   0.000100   0.000100  0.0000016  0.0000127    0.000072    0.000068
+2004   5   8  53133  -0.112510   0.424116  -0.4596743   0.0003562   0.000124  -0.000116   0.000106   0.000105  0.0000140  0.0000135    0.000065    0.000068
+2004   5   9  53134  -0.111186   0.426459  -0.4600106   0.0003167   0.000029  -0.000119   0.000106   0.000105  0.0000154  0.0000125    0.000043    0.000052
+2004   5  10  53135  -0.109673   0.428919  -0.4603775   0.0004221   0.000062  -0.000091   0.000103   0.000102  0.0000089  0.0000103    0.000038    0.000043
+2004   5  11  53136  -0.107978   0.431882  -0.4608773   0.0005816   0.000100  -0.000055   0.000096   0.000096  0.0000024  0.0000098    0.000033    0.000034
+2004   5  12  53137  -0.106054   0.434693  -0.4615559   0.0007454   0.000082  -0.000057   0.000094   0.000094  0.0000010  0.0000098    0.000041    0.000040
+2004   5  13  53138  -0.103977   0.437430  -0.4623717   0.0008943   0.000088   0.000001   0.000097   0.000096  0.0000012  0.0000097    0.000069    0.000068
+2004   5  14  53139  -0.102274   0.440204  -0.4633318   0.0010073   0.000142   0.000090   0.000098   0.000096  0.0000015  0.0000097    0.000086    0.000086
+2004   5  15  53140  -0.101268   0.442603  -0.4643717   0.0010384   0.000132   0.000102   0.000100   0.000100  0.0000167  0.0000103    0.000080    0.000080
+2004   5  16  53141  -0.100611   0.444298  -0.4653997   0.0009904   0.000095   0.000074   0.000103   0.000103  0.0000185  0.0000106    0.000066    0.000066
+2004   5  17  53142  -0.100163   0.445880  -0.4663457   0.0008747   0.000059   0.000036   0.000099   0.000099  0.0000106  0.0000096    0.000053    0.000052
+2004   5  18  53143  -0.099700   0.447069  -0.4671497   0.0007156   0.000026  -0.000010   0.000091   0.000092  0.0000027  0.0000089    0.000039    0.000038
+2004   5  19  53144  -0.098912   0.448511  -0.4677699   0.0004937   0.000031  -0.000127   0.000091   0.000091  0.0000014  0.0000089    0.000049    0.000050
+2004   5  20  53145  -0.097705   0.449690  -0.4681716   0.0003048   0.000051  -0.000256   0.000094   0.000094  0.0000019  0.0000089    0.000064    0.000070
+2004   5  21  53146  -0.096281   0.451349  -0.4683548   0.0001260   0.000073  -0.000250   0.000096   0.000097  0.0000082  0.0000091    0.000068    0.000076
+2004   5  22  53147  -0.095199   0.452541  -0.4684405  -0.0000319   0.000099  -0.000186   0.000099   0.000098  0.0000218  0.0000097    0.000069    0.000077
+2004   5  23  53148  -0.094216   0.453797  -0.4684660  -0.0000886   0.000129  -0.000111   0.000098   0.000098  0.0000264  0.0000098    0.000069    0.000078
+2004   5  24  53149  -0.093254   0.455275  -0.4683798  -0.0000992   0.000160  -0.000032   0.000095   0.000096  0.0000149  0.0000092    0.000069    0.000080
+2004   5  25  53150  -0.091852   0.456856  -0.4682820  -0.0000138   0.000187   0.000048   0.000091   0.000093  0.0000035  0.0000088    0.000069    0.000081
+2004   5  26  53151  -0.090913   0.458607  -0.4682880   0.0001051   0.000274   0.000058   0.000089   0.000092  0.0000096  0.0000088    0.000155    0.000130
+2004   5  27  53152  -0.090113   0.460087  -0.4684777   0.0002508   0.000308   0.000024   0.000091   0.000093  0.0000159  0.0000089    0.000105    0.000106
+2004   5  28  53153  -0.089402   0.461682  -0.4688547   0.0004265   0.000253  -0.000114   0.000091   0.000094  0.0000047  0.0000089    0.000082    0.000087
+2004   5  29  53154  -0.088273   0.463300  -0.4693341   0.0005069   0.000211  -0.000142   0.000092   0.000095  0.0000113  0.0000093    0.000082    0.000085
+2004   5  30  53155  -0.087156   0.464695  -0.4698789   0.0005491   0.000179  -0.000113   0.000102   0.000105  0.0000132  0.0000105    0.000080    0.000084
+2004   5  31  53156  -0.085578   0.465943  -0.4704303   0.0005422   0.000143  -0.000079   0.000107   0.000110  0.0000094  0.0000107    0.000078    0.000083
+2004   6   1  53157  -0.083867   0.467378  -0.4708845   0.0004187   0.000107  -0.000042   0.000107   0.000109  0.0000056  0.0000102    0.000077    0.000082
+2004   6   2  53158  -0.081972   0.469301  -0.4711493   0.0001795   0.000074  -0.000003   0.000105   0.000107  0.0000019  0.0000102    0.000075    0.000081
+2004   6   3  53159  -0.079980   0.470901  -0.4711810  -0.0000774   0.000117   0.000033   0.000105   0.000105  0.0000013  0.0000104    0.000074    0.000080
+2004   6   4  53160  -0.077638   0.472447  -0.4710105  -0.0002549   0.000183   0.000065   0.000108   0.000107  0.0000016  0.0000106    0.000072    0.000079
+2004   6   5  53161  -0.075911   0.473978  -0.4707334  -0.0003268   0.000164   0.000080   0.000111   0.000110  0.0000197  0.0000113    0.000077    0.000082
+2004   6   6  53162  -0.074510   0.475662  -0.4704687  -0.0002434   0.000117   0.000083   0.000110   0.000108  0.0000218  0.0000109    0.000084    0.000086
+2004   6   7  53163  -0.073404   0.477212  -0.4703246  -0.0000638   0.000075   0.000081   0.000104   0.000103  0.0000124  0.0000095    0.000092    0.000090
+2004   6   8  53164  -0.071878   0.478524  -0.4703677   0.0001658   0.000039   0.000075   0.000100   0.000099  0.0000030  0.0000089    0.000099    0.000094
+2004   6   9  53165  -0.069999   0.480175  -0.4706060   0.0003355   0.000043  -0.000166   0.000101   0.000099  0.0000088  0.0000089    0.000136    0.000113
+2004   6  10  53166  -0.068441   0.481811  -0.4709852   0.0004234   0.000114  -0.000155   0.000103   0.000101  0.0000144  0.0000090    0.000143    0.000130
+2004   6  11  53167  -0.066774   0.483220  -0.4714339   0.0004689   0.000202  -0.000043   0.000103   0.000101  0.0000045  0.0000090    0.000138    0.000144
+2004   6  12  53168  -0.064962   0.484730  -0.4719015   0.0004339   0.000240  -0.000003   0.000104   0.000102  0.0000201  0.0000096    0.000125    0.000133
+2004   6  13  53169  -0.062795   0.486101  -0.4723101   0.0003626   0.000255   0.000013   0.000110   0.000108  0.0000222  0.0000116    0.000108    0.000113
+2004   6  14  53170  -0.060405   0.487507  -0.4725737   0.0001929   0.000261   0.000030   0.000111   0.000110  0.0000129  0.0000124    0.000091    0.000093
+2004   6  15  53171  -0.057911   0.488793  -0.4726258  -0.0000613   0.000262   0.000042   0.000106   0.000106  0.0000036  0.0000118    0.000074    0.000073
+2004   6  16  53172  -0.054886   0.490131  -0.4724345  -0.0003001   0.000086   0.000079   0.000105   0.000106  0.0000017  0.0000116    0.000100    0.000100
+2004   6  17  53173  -0.051569   0.491778  -0.4720076  -0.0004949  -0.000020   0.000067   0.000106   0.000107  0.0000026  0.0000116    0.000156    0.000142
+2004   6  18  53174  -0.048266   0.493533  -0.4714566  -0.0005541   0.000018   0.000027   0.000106   0.000108  0.0000023  0.0000116    0.000103    0.000101
+2004   6  19  53175  -0.045138   0.495631  -0.4708641  -0.0005635   0.000092   0.000000   0.000110   0.000112  0.0000020  0.0000123    0.000087    0.000087
+2004   6  20  53176  -0.041912   0.497183  -0.4702864  -0.0005647   0.000168  -0.000024   0.000112   0.000113  0.0000018  0.0000127    0.000098    0.000093
+2004   6  21  53177  -0.038487   0.498594  -0.4697775  -0.0004933   0.000243  -0.000048   0.000108   0.000110  0.0000017  0.0000119    0.000109    0.000100
+2004   6  22  53178  -0.035192   0.499899  -0.4693786  -0.0003567   0.000313  -0.000070   0.000104   0.000105  0.0000016  0.0000113    0.000120    0.000107
+2004   6  23  53179  -0.031822   0.501183  -0.4691219  -0.0001859   0.000230  -0.000173   0.000100   0.000102  0.0000259  0.0000110    0.000109    0.000115
+2004   6  24  53180  -0.028563   0.502347  -0.4690428  -0.0000074   0.000105  -0.000285   0.000100   0.000103  0.0000432  0.0000111    0.000091    0.000122
+2004   6  25  53181  -0.024999   0.503489  -0.4691384   0.0001629   0.000024  -0.000265   0.000101   0.000104  0.0000103  0.0000114    0.000076    0.000084
+2004   6  26  53182  -0.022003   0.505061  -0.4693338   0.0002064   0.000023  -0.000180   0.000104   0.000107  0.0000013  0.0000120    0.000076    0.000072
+2004   6  27  53183  -0.019131   0.506236  -0.4695455   0.0001785   0.000049  -0.000084   0.000105   0.000106  0.0000012  0.0000121    0.000082    0.000076
+2004   6  28  53184  -0.016249   0.507400  -0.4696878   0.0000699   0.000082   0.000010   0.000101   0.000103  0.0000011  0.0000114    0.000088    0.000080
+2004   6  29  53185  -0.013141   0.508225  -0.4696775  -0.0000938   0.000121   0.000094   0.000099   0.000101  0.0000010  0.0000110    0.000093    0.000084
+2004   6  30  53186  -0.010316   0.509310  -0.4694562  -0.0003210   0.000158   0.000046   0.000099   0.000099  0.0000121  0.0000110    0.000087    0.000082
+2004   7   1  53187  -0.007566   0.510369  -0.4690074  -0.0005347   0.000194  -0.000045   0.000098   0.000099  0.0000203  0.0000108    0.000078    0.000078
+2004   7   2  53188  -0.004628   0.511226  -0.4683713  -0.0007058   0.000226  -0.000144   0.000098   0.000098  0.0000059  0.0000108    0.000069    0.000074
+2004   7   3  53189  -0.001868   0.511853  -0.4676385  -0.0007835   0.000207  -0.000195   0.000101   0.000100  0.0000242  0.0000113    0.000103    0.000125
+2004   7   4  53190   0.000433   0.512586  -0.4669550  -0.0006641   0.000168  -0.000224   0.000108   0.000106  0.0000286  0.0000125    0.000152    0.000195
+2004   7   5  53191   0.002696   0.513273  -0.4664356  -0.0004111   0.000126  -0.000242   0.000109   0.000108  0.0000199  0.0000125    0.000201    0.000266
+2004   7   6  53192   0.005078   0.513953  -0.4661140  -0.0002016   0.000085  -0.000248   0.000106   0.000106  0.0000113  0.0000119    0.000251    0.000336
+2004   7   7  53193   0.007320   0.514476  -0.4659529  -0.0001054   0.000081  -0.000130   0.000104   0.000104  0.0000027  0.0000119    0.000095    0.000111
+2004   7   8  53194   0.009511   0.515027  -0.4658669  -0.0000997   0.000143  -0.000056   0.000102   0.000103  0.0000021  0.0000120    0.000127    0.000117
+2004   7   9  53195   0.012280   0.515392  -0.4657512  -0.0001583   0.000273  -0.000027   0.000103   0.000103  0.0000020  0.0000119    0.000114    0.000104
+2004   7  10  53196   0.015400   0.516397  -0.4655303  -0.0003192   0.000275  -0.000009   0.000106   0.000105  0.0000288  0.0000123    0.000097    0.000088
+2004   7  11  53197   0.018199   0.517219  -0.4651616  -0.0004797   0.000220   0.000002   0.000110   0.000109  0.0000320  0.0000122    0.000090    0.000081
+2004   7  12  53198   0.021474   0.517974  -0.4646149  -0.0006160   0.000162   0.000006   0.000109   0.000107  0.0000183  0.0000111    0.000082    0.000073
+2004   7  13  53199   0.024231   0.518926  -0.4638766  -0.0008178   0.000103   0.000000   0.000105   0.000103  0.0000047  0.0000107    0.000075    0.000065
+2004   7  14  53200   0.026252   0.519444  -0.4629642  -0.0010086   0.000033  -0.000073   0.000104   0.000102  0.0000015  0.0000110    0.000100    0.000089
+2004   7  15  53201   0.028267   0.520122  -0.4619315  -0.0010681   0.000043  -0.000122   0.000102   0.000100  0.0000014  0.0000112    0.000060    0.000061
+2004   7  16  53202   0.030304   0.520614  -0.4608642  -0.0010610   0.000130  -0.000141   0.000104   0.000103  0.0000015  0.0000112    0.000064    0.000055
+2004   7  17  53203   0.032697   0.520890  -0.4599030  -0.0009802   0.000159  -0.000113   0.000108   0.000107  0.0000376  0.0000118    0.000068    0.000055
+2004   7  18  53204   0.035713   0.521020  -0.4590341  -0.0008435   0.000159  -0.000066   0.000111   0.000111  0.0000418  0.0000125    0.000064    0.000052
+2004   7  19  53205   0.038737   0.520977  -0.4582611  -0.0006736   0.000156  -0.000018   0.000110   0.000112  0.0000234  0.0000120    0.000060    0.000049
+2004   7  20  53206   0.041355   0.520718  -0.4576707  -0.0004627   0.000151   0.000032   0.000105   0.000107  0.0000050  0.0000112    0.000056    0.000046
+2004   7  21  53207   0.043957   0.520425  -0.4573271  -0.0002295   0.000067  -0.000024   0.000102   0.000104  0.0000019  0.0000110    0.000113    0.000094
+2004   7  22  53208   0.046958   0.519989  -0.4571910  -0.0000477   0.000045  -0.000104   0.000103   0.000105  0.0000023  0.0000110    0.000142    0.000112
+2004   7  23  53209   0.050034   0.519685  -0.4572116   0.0000483   0.000052  -0.000180   0.000105   0.000106  0.0000026  0.0000112    0.000160    0.000118
+2004   7  24  53210   0.052997   0.519406  -0.4573261   0.0000608   0.000047  -0.000140   0.000107   0.000108  0.0000247  0.0000119    0.000152    0.000110
+2004   7  25  53211   0.056056   0.519293  -0.4574037   0.0000139   0.000044  -0.000057   0.000115   0.000116  0.0000273  0.0000123    0.000133    0.000099
+2004   7  26  53212   0.059062   0.519302  -0.4573199  -0.0001500   0.000048   0.000022   0.000116   0.000117  0.0000158  0.0000114    0.000115    0.000087
+2004   7  27  53213   0.061506   0.519278  -0.4570060  -0.0003827   0.000057   0.000094   0.000114   0.000114  0.0000044  0.0000107    0.000097    0.000075
+2004   7  28  53214   0.063944   0.518873  -0.4564600  -0.0006107   0.000138   0.000091   0.000115   0.000114  0.0000105  0.0000106    0.000105    0.000088
+2004   7  29  53215   0.066432   0.518564  -0.4557631  -0.0007491   0.000232   0.000063   0.000111   0.000110  0.0000166  0.0000105    0.000121    0.000108
+2004   7  30  53216   0.068375   0.517937  -0.4550338  -0.0007178   0.000305  -0.000120   0.000110   0.000108  0.0000048  0.0000106    0.000108    0.000078
+2004   7  31  53217   0.070358   0.517194  -0.4543704  -0.0005791   0.000283  -0.000179   0.000114   0.000111  0.0000187  0.0000113    0.000093    0.000062
+2004   8   1  53218   0.072793   0.516438  -0.4539280  -0.0003023   0.000220  -0.000167   0.000117   0.000115  0.0000208  0.0000115    0.000080    0.000058
+2004   8   2  53219   0.075525   0.515881  -0.4537878  -0.0000144   0.000149  -0.000144   0.000115   0.000113  0.0000120  0.0000106    0.000068    0.000053
+2004   8   3  53220   0.078280   0.515544  -0.4539048   0.0001841   0.000079  -0.000107   0.000111   0.000111  0.0000032  0.0000101    0.000055    0.000049
+2004   8   4  53221   0.081085   0.515455  -0.4541612   0.0002655   0.000070  -0.000065   0.000111   0.000111  0.0000085  0.0000099    0.000074    0.000061
+2004   8   5  53222   0.083847   0.515328  -0.4544189   0.0002167   0.000087  -0.000015   0.000114   0.000112  0.0000137  0.0000099    0.000102    0.000078
+2004   8   6  53223   0.086464   0.515212  -0.4545780   0.0001087   0.000119   0.000037   0.000113   0.000112  0.0000047  0.0000100    0.000130    0.000095
+2004   8   7  53224   0.088798   0.515056  -0.4546054  -0.0000089   0.000130   0.000077   0.000114   0.000113  0.0000021  0.0000105    0.000124    0.000091
+2004   8   8  53225   0.091688   0.514374  -0.4544897  -0.0001569   0.000144   0.000104   0.000117   0.000116  0.0000018  0.0000110    0.000105    0.000080
+2004   8   9  53226   0.094789   0.513927  -0.4542261  -0.0003397   0.000167   0.000123   0.000115   0.000116  0.0000016  0.0000106    0.000086    0.000068
+2004   8  10  53227   0.097240   0.513535  -0.4538171  -0.0005318   0.000196   0.000128   0.000111   0.000112  0.0000014  0.0000100    0.000066    0.000056
+2004   8  11  53228   0.099763   0.513021  -0.4532763  -0.0006057   0.000407   0.000120   0.000111   0.000111  0.0000120  0.0000100    0.000119    0.000090
+2004   8  12  53229   0.102655   0.513132  -0.4526212  -0.0006267   0.000659   0.000100   0.000113   0.000114  0.0000245  0.0000102    0.000191    0.000136
+2004   8  13  53230   0.105716   0.513401  -0.4519484  -0.0006205   0.000614   0.000059   0.000117   0.000117  0.0000282  0.0000104    0.000338    0.000278
+2004   8  14  53231   0.108711   0.513798  -0.4514005  -0.0005277   0.000526   0.000009   0.000121   0.000121  0.0000174  0.0000108    0.000325    0.000275
+2004   8  15  53232   0.111509   0.513938  -0.4509623  -0.0003714   0.000449  -0.000043   0.000125   0.000123  0.0000123  0.0000116    0.000242    0.000204
+2004   8  16  53233   0.114563   0.513715  -0.4507012  -0.0001444   0.000355  -0.000094   0.000123   0.000121  0.0000073  0.0000113    0.000160    0.000133
+2004   8  17  53234   0.117186   0.513301  -0.4506826   0.0000988   0.000252  -0.000141   0.000116   0.000117  0.0000023  0.0000106    0.000076    0.000062
+2004   8  18  53235   0.119720   0.512545  -0.4509265   0.0003341   0.000193  -0.000158   0.000115   0.000115  0.0000021  0.0000105    0.000128    0.000102
+2004   8  19  53236   0.121957   0.512006  -0.4513588   0.0004791   0.000159  -0.000125   0.000116   0.000116  0.0000022  0.0000106    0.000128    0.000121
+2004   8  20  53237   0.124247   0.511298  -0.4518805   0.0005547   0.000160  -0.000133   0.000116   0.000116  0.0000021  0.0000106    0.000116    0.000109
+2004   8  21  53238   0.126452   0.510616  -0.4523912   0.0004864   0.000150  -0.000150   0.000118   0.000119  0.0000020  0.0000112    0.000104    0.000095
+2004   8  22  53239   0.128266   0.509529  -0.4527905   0.0003135   0.000141  -0.000161   0.000122   0.000121  0.0000018  0.0000119    0.000091    0.000084
+2004   8  23  53240   0.130152   0.508212  -0.4530017   0.0000819   0.000145  -0.000168   0.000119   0.000118  0.0000016  0.0000115    0.000078    0.000072
+2004   8  24  53241   0.132227   0.506548  -0.4529924  -0.0001213   0.000159  -0.000170   0.000117   0.000115  0.0000014  0.0000109    0.000066    0.000060
+2004   8  25  53242   0.134385   0.505142  -0.4527844  -0.0002732   0.000179  -0.000180   0.000127   0.000123  0.0000012  0.0000108    0.000054    0.000050
+2004   8  26  53243   0.136114   0.504083  -0.4524491  -0.0003393   0.000202  -0.000192   0.000128   0.000125  0.0000010  0.0000108    0.000042    0.000039
+2004   8  27  53244   0.138465   0.502715  -0.4520989  -0.0003058   0.000207  -0.000141   0.000125   0.000126  0.0000022  0.0000111    0.000078    0.000074
+2004   8  28  53245   0.141047   0.501617  -0.4518685  -0.0001646   0.000235  -0.000107   0.000135   0.000134  0.0000210  0.0000117    0.000096    0.000088
+2004   8  29  53246   0.143682   0.500207  -0.4518210   0.0000910   0.000268  -0.000088   0.000127   0.000125  0.0000268  0.0000121    0.000101    0.000089
+2004   8  30  53247   0.146820   0.498934  -0.4520629   0.0003963   0.000291  -0.000076   0.000116   0.000115  0.0000168  0.0000115    0.000105    0.000091
+2004   8  31  53248   0.149574   0.497666  -0.4525745   0.0005538   0.000303  -0.000068   0.000112   0.000112  0.0000039  0.0000109    0.000110    0.000092
+2004   9   1  53249   0.152177   0.495874  -0.4531788   0.0005763   0.000277  -0.000102   0.000109   0.000111  0.0000099  0.0000107    0.000113    0.000099
+2004   9   2  53250   0.154828   0.494259  -0.4537152   0.0004730   0.000234  -0.000148   0.000109   0.000111  0.0000161  0.0000106    0.000115    0.000106
+2004   9   3  53251   0.157011   0.492217  -0.4540895   0.0002922   0.000185  -0.000193   0.000108   0.000110  0.0000048  0.0000106    0.000116    0.000114
+2004   9   4  53252   0.159233   0.490022  -0.4542818   0.0000366   0.000137  -0.000194   0.000111   0.000114  0.0000170  0.0000114    0.000152    0.000143
+2004   9   5  53253   0.161633   0.487629  -0.4541877  -0.0002571   0.000093  -0.000175   0.000112   0.000116  0.0000182  0.0000121    0.000201    0.000180
+2004   9   6  53254   0.163687   0.485098  -0.4537967  -0.0004929   0.000058  -0.000150   0.000108   0.000112  0.0000119  0.0000115    0.000250    0.000217
+2004   9   7  53255   0.165373   0.482916  -0.4531664  -0.0007031   0.000035  -0.000121   0.000105   0.000109  0.0000291  0.0000109    0.000298    0.000254
+2004   9   8  53256   0.167381   0.481044  -0.4524236  -0.0007962  -0.000015  -0.000165   0.000102   0.000107  0.0000058  0.0000108    0.000139    0.000114
+2004   9   9  53257   0.169422   0.479164  -0.4516256  -0.0007972   0.000006  -0.000130   0.000103   0.000107  0.0000013  0.0000109    0.000232    0.000176
+2004   9  10  53258   0.171679   0.477285  -0.4508865  -0.0006564   0.000133  -0.000010   0.000103   0.000108  0.0000016  0.0000111    0.000141    0.000117
+2004   9  11  53259   0.173927   0.475597  -0.4503487  -0.0004666   0.000191  -0.000007   0.000104   0.000109  0.0000091  0.0000117    0.000092    0.000086
+2004   9  12  53260   0.176102   0.473339  -0.4500652  -0.0001240   0.000210  -0.000059   0.000108   0.000112  0.0000143  0.0000118    0.000090    0.000088
+2004   9  13  53261   0.178026   0.471094  -0.4500956   0.0002153   0.000222  -0.000111   0.000107   0.000111  0.0000104  0.0000108    0.000087    0.000091
+2004   9  14  53262   0.179628   0.468705  -0.4504294   0.0004255   0.000226  -0.000165   0.000104   0.000107  0.0000033  0.0000104    0.000085    0.000093
+2004   9  15  53263   0.181035   0.466403  -0.4509675   0.0005976   0.000187  -0.000125   0.000105   0.000107  0.0000026  0.0000103    0.000147    0.000169
+2004   9  16  53264   0.182158   0.464077  -0.4516560   0.0006853   0.000140  -0.000048   0.000107   0.000107  0.0000035  0.0000102    0.000109    0.000130
+2004   9  17  53265   0.183641   0.461630  -0.4523211   0.0006233   0.000116  -0.000037   0.000106   0.000105  0.0000022  0.0000102    0.000093    0.000096
+2004   9  18  53266   0.184965   0.459410  -0.4528376   0.0004265   0.000110  -0.000037   0.000108   0.000108  0.0000052  0.0000107    0.000090    0.000088
+2004   9  19  53267   0.186460   0.457059  -0.4531392   0.0001570   0.000111  -0.000036   0.000113   0.000112  0.0000100  0.0000112    0.000084    0.000084
+2004   9  20  53268   0.187882   0.454796  -0.4531943  -0.0000539   0.000118  -0.000042   0.000110   0.000108  0.0000081  0.0000107    0.000079    0.000080
+2004   9  21  53269   0.189722   0.452301  -0.4530374  -0.0002170   0.000129  -0.000052   0.000104   0.000103  0.0000027  0.0000100    0.000074    0.000076
+2004   9  22  53270   0.191635   0.450177  -0.4527570  -0.0003198   0.000172  -0.000122   0.000105   0.000103  0.0000201  0.0000099    0.000086    0.000090
+2004   9  23  53271   0.193387   0.448245  -0.4524541  -0.0002411   0.000222  -0.000204   0.000106   0.000104  0.0000335  0.0000100    0.000103    0.000110
+2004   9  24  53272   0.194864   0.446809  -0.4522588  -0.0000529   0.000266  -0.000279   0.000105   0.000102  0.0000090  0.0000098    0.000121    0.000129
+2004   9  25  53273   0.195530   0.445005  -0.4523255   0.0002056   0.000248  -0.000266   0.000110   0.000105  0.0000104  0.0000102    0.000114    0.000122
+2004   9  26  53274   0.195799   0.443063  -0.4526402   0.0004369   0.000203  -0.000215   0.000108   0.000105  0.0000142  0.0000105    0.000098    0.000105
+2004   9  27  53275   0.196234   0.441043  -0.4531978   0.0006640   0.000153  -0.000159   0.000100   0.000097  0.0000098  0.0000097    0.000083    0.000088
+2004   9  28  53276   0.197100   0.438843  -0.4539481   0.0008068   0.000099  -0.000100   0.000097   0.000094  0.0000031  0.0000091    0.000067    0.000071
+2004   9  29  53277   0.197832   0.436695  -0.4547487   0.0007711   0.000111  -0.000071   0.000097   0.000094  0.0000021  0.0000089    0.000068    0.000080
+2004   9  30  53278   0.198081   0.434217  -0.4554559   0.0006285   0.000144  -0.000052   0.000097   0.000094  0.0000026  0.0000089    0.000074    0.000096
+2004  10   1  53279   0.198394   0.431824  -0.4559773   0.0004511   0.000097  -0.000224   0.000099   0.000096  0.0000020  0.0000092    0.000082    0.000089
+2004  10   2  53280   0.199015   0.429398  -0.4563437   0.0002969   0.000085  -0.000252   0.000104   0.000101  0.0000157  0.0000099    0.000079    0.000077
+2004  10   3  53281   0.199859   0.426875  -0.4565552   0.0001340   0.000101  -0.000206   0.000110   0.000106  0.0000172  0.0000104    0.000072    0.000066
+2004  10   4  53282   0.200638   0.424390  -0.4566325   0.0000373   0.000125  -0.000162   0.000106   0.000104  0.0000100  0.0000099    0.000064    0.000056
+2004  10   5  53283   0.201304   0.422047  -0.4566480   0.0000152   0.000154  -0.000119   0.000099   0.000099  0.0000027  0.0000093    0.000057    0.000045
+2004  10   6  53284   0.201802   0.419552  -0.4566722   0.0000480   0.000130  -0.000101   0.000099   0.000098  0.0000010  0.0000092    0.000071    0.000065
+2004  10   7  53285   0.202596   0.416982  -0.4567467   0.0001321   0.000189  -0.000173   0.000098   0.000097  0.0000010  0.0000091    0.000051    0.000045
+2004  10   8  53286   0.203079   0.414636  -0.4569037   0.0002048   0.000323  -0.000250   0.000103   0.000101  0.0000018  0.0000095    0.000081    0.000081
+2004  10   9  53287   0.203492   0.412307  -0.4571780   0.0003469   0.000336  -0.000263   0.000111   0.000107  0.0000019  0.0000104    0.000085    0.000086
+2004  10  10  53288   0.203411   0.410309  -0.4576124   0.0005341   0.000292  -0.000249   0.000115   0.000109  0.0000017  0.0000111    0.000073    0.000072
+2004  10  11  53289   0.203235   0.407838  -0.4582481   0.0007580   0.000240  -0.000225   0.000116   0.000108  0.0000014  0.0000106    0.000061    0.000058
+2004  10  12  53290   0.203416   0.405426  -0.4591022   0.0009583   0.000182  -0.000193   0.000109   0.000103  0.0000012  0.0000099    0.000049    0.000044
+2004  10  13  53291   0.203580   0.402898  -0.4601432   0.0010982   0.000164  -0.000143   0.000108   0.000103  0.0000123  0.0000099    0.000068    0.000059
+2004  10  14  53292   0.203844   0.400069  -0.4612702   0.0011324   0.000158  -0.000092   0.000112   0.000105  0.0000202  0.0000099    0.000096    0.000081
+2004  10  15  53293   0.204515   0.397284  -0.4623568   0.0009906   0.000178   0.000056   0.000111   0.000105  0.0000056  0.0000099    0.000105    0.000101
+2004  10  16  53294   0.205361   0.395005  -0.4633015   0.0007607   0.000188   0.000061   0.000113   0.000107  0.0000092  0.0000106    0.000095    0.000094
+2004  10  17  53295   0.205761   0.392848  -0.4639006   0.0004587   0.000195  -0.000005   0.000116   0.000107  0.0000105  0.0000109    0.000081    0.000078
+2004  10  18  53296   0.206043   0.390648  -0.4641681   0.0001678   0.000205  -0.000080   0.000113   0.000104  0.0000066  0.0000102    0.000066    0.000062
+2004  10  19  53297   0.205959   0.388832  -0.4642332  -0.0000011   0.000217  -0.000162   0.000108   0.000102  0.0000023  0.0000099    0.000052    0.000045
+2004  10  20  53298   0.205890   0.386641  -0.4642090   0.0000139   0.000241  -0.000146   0.000109   0.000104  0.0000222  0.0000101    0.000061    0.000055
+2004  10  21  53299   0.206042   0.384745  -0.4642559   0.0001309   0.000265  -0.000104   0.000111   0.000105  0.0000371  0.0000100    0.000076    0.000071
+2004  10  22  53300   0.206000   0.382781  -0.4644997   0.0003309   0.000283  -0.000061   0.000114   0.000109  0.0000098  0.0000101    0.000091    0.000087
+2004  10  23  53301   0.205941   0.380904  -0.4649691   0.0005367   0.000268  -0.000085   0.000117   0.000111  0.0000089  0.0000107    0.000093    0.000092
+2004  10  24  53302   0.205527   0.379159  -0.4656215   0.0007380   0.000238  -0.000132   0.000120   0.000115  0.0000148  0.0000115    0.000091    0.000093
+2004  10  25  53303   0.205063   0.377027  -0.4664233   0.0008737   0.000203  -0.000174   0.000119   0.000116  0.0000109  0.0000112    0.000089    0.000094
+2004  10  26  53304   0.205355   0.374889  -0.4673210   0.0008792   0.000166  -0.000212   0.000113   0.000111  0.0000029  0.0000104    0.000086    0.000095
+2004  10  27  53305   0.205857   0.372691  -0.4682244   0.0008674   0.000185  -0.000125   0.000112   0.000111  0.0000013  0.0000104    0.000269    0.000116
+2004  10  28  53306   0.206658   0.370348  -0.4690431   0.0007413   0.000167  -0.000116   0.000112   0.000111  0.0000016  0.0000104    0.000150    0.000102
+2004  10  29  53307   0.207105   0.368112  -0.4696968   0.0005183   0.000117  -0.000148   0.000112   0.000111  0.0000017  0.0000106    0.000125    0.000110
+2004  10  30  53308   0.207227   0.365994  -0.4701014   0.0002667   0.000109  -0.000138   0.000117   0.000115  0.0000147  0.0000115    0.000133    0.000117
+2004  10  31  53309   0.206964   0.363862  -0.4702852   0.0000909   0.000122  -0.000113   0.000120   0.000119  0.0000160  0.0000114    0.000129    0.000120
+2004  11   1  53310   0.207264   0.361561  -0.4703251   0.0000004   0.000139  -0.000099   0.000116   0.000115  0.0000094  0.0000101    0.000126    0.000123
+2004  11   2  53311   0.208076   0.359483  -0.4702937  -0.0000265   0.000157  -0.000095   0.000112   0.000111  0.0000030  0.0000094    0.000123    0.000126
+2004  11   3  53312   0.208145   0.357325  -0.4702661  -0.0000058   0.000218  -0.000158   0.000112   0.000112  0.0000071  0.0000094    0.000108    0.000113
+2004  11   4  53313   0.208082   0.355054  -0.4702980   0.0000985   0.000286  -0.000244   0.000114   0.000114  0.0000109  0.0000095    0.000089    0.000094
+2004  11   5  53314   0.207743   0.352400  -0.4704587   0.0002604   0.000200  -0.000249   0.000114   0.000114  0.0000037  0.0000097    0.000070    0.000077
+2004  11   6  53315   0.207843   0.349626  -0.4708535   0.0005229   0.000150  -0.000293   0.000119   0.000117  0.0000122  0.0000102    0.000071    0.000076
+2004  11   7  53316   0.207889   0.347062  -0.4715132   0.0007814   0.000132  -0.000356   0.000122   0.000119  0.0000145  0.0000108    0.000080    0.000083
+2004  11   8  53317   0.208030   0.344784  -0.4724223   0.0010360   0.000117  -0.000409   0.000120   0.000117  0.0000089  0.0000106    0.000088    0.000089
+2004  11   9  53318   0.208014   0.343012  -0.4735571   0.0012259   0.000107  -0.000446   0.000117   0.000116  0.0000023  0.0000102    0.000097    0.000096
+2004  11  10  53319   0.208006   0.341212  -0.4748537   0.0013179   0.000144  -0.000641   0.000117   0.000117  0.0000059  0.0000099    0.000718    0.000179
+2004  11  11  53320   0.207929   0.339246  -0.4761582   0.0012696   0.000177  -0.000524   0.000116   0.000116  0.0000095  0.0000097    0.000604    0.000169
+2004  11  12  53321   0.207788   0.336861  -0.4773374   0.0010920   0.000209  -0.000295   0.000114   0.000112  0.0000036  0.0000096    0.000231    0.000126
+2004  11  13  53322   0.208010   0.334483  -0.4783719   0.0008456   0.000231  -0.000228   0.000116   0.000115  0.0000123  0.0000102    0.000128    0.000117
+2004  11  14  53323   0.207862   0.332191  -0.4790694   0.0005609   0.000247  -0.000226   0.000122   0.000121  0.0000147  0.0000120    0.000125    0.000121
+2004  11  15  53324   0.207653   0.329470  -0.4794926   0.0003777   0.000259  -0.000231   0.000123   0.000120  0.0000094  0.0000125    0.000123    0.000125
+2004  11  16  53325   0.207411   0.327020  -0.4798295   0.0003422   0.000266  -0.000244   0.000117   0.000116  0.0000031  0.0000116    0.000121    0.000129
+2004  11  17  53326   0.207141   0.324562  -0.4801942   0.0004205   0.000302  -0.000228   0.000115   0.000115  0.0000028  0.0000114    0.000113    0.000105
+2004  11  18  53327   0.206883   0.322250  -0.4806853   0.0005952   0.000336  -0.000219   0.000116   0.000117  0.0000028  0.0000114    0.000102    0.000113
+2004  11  19  53328   0.206625   0.319967  -0.4813817   0.0008242   0.000227  -0.000279   0.000117   0.000118  0.0000023  0.0000117    0.000085    0.000089
+2004  11  20  53329   0.205985   0.317999  -0.4823076   0.0010115   0.000180  -0.000302   0.000119   0.000120  0.0000085  0.0000127    0.000082    0.000079
+2004  11  21  53330   0.205595   0.315698  -0.4834000   0.0011251   0.000177  -0.000295   0.000119   0.000121  0.0000120  0.0000124    0.000084    0.000080
+2004  11  22  53331   0.204989   0.313564  -0.4845426   0.0011441   0.000181  -0.000276   0.000115   0.000118  0.0000092  0.0000107    0.000086    0.000081
+2004  11  23  53332   0.204223   0.311353  -0.4856366   0.0010698   0.000190  -0.000246   0.000111   0.000116  0.0000045  0.0000101    0.000088    0.000082
+2004  11  24  53333   0.203060   0.309241  -0.4866095   0.0008874   0.000304  -0.000112   0.000109   0.000114  0.0000039  0.0000100    0.000193    0.000158
+2004  11  25  53334   0.201798   0.306886  -0.4873811   0.0006769   0.000379   0.000001   0.000109   0.000114  0.0000723  0.0000100    0.001621    0.002239
+2004  11  26  53335   0.200576   0.304577  -0.4879173   0.0004635   0.000426   0.000087   0.000109   0.000113  0.0001658  0.0000102    0.003530    0.005058
+2004  11  27  53336   0.199864   0.302120  -0.4882345   0.0001918   0.000385   0.000091   0.000113   0.000116  0.0001290  0.0000107    0.002747    0.003924
+2004  11  28  53337   0.199470   0.300057  -0.4883720   0.0000532   0.000336   0.000071   0.000119   0.000122  0.0000893  0.0000115    0.001914    0.002719
+2004  11  29  53338   0.199176   0.298064  -0.4883892  -0.0000002   0.000280   0.000027   0.000118   0.000120  0.0000497  0.0000112    0.001082    0.001514
+2004  11  30  53339   0.198466   0.296016  -0.4883589  -0.0000346   0.000222  -0.000037   0.000113   0.000116  0.0000100  0.0000107    0.000249    0.000309
+2004  12   1  53340   0.197427   0.293643  -0.4883571   0.0000561   0.000224  -0.000091   0.000115   0.000117  0.0000041  0.0000108    0.000234    0.000201
+2004  12   2  53341   0.195911   0.291474  -0.4884575   0.0002068   0.000229  -0.000215   0.000109   0.000113  0.0000019  0.0000108    0.000093    0.000084
+2004  12   3  53342   0.193961   0.288954  -0.4887353   0.0003641   0.000234  -0.000421   0.000106   0.000111  0.0000017  0.0000108    0.000070    0.000071
+2004  12   4  53343   0.192170   0.286645  -0.4891657   0.0005640   0.000258  -0.000469   0.000117   0.000120  0.0000173  0.0000114    0.000088    0.000086
+2004  12   5  53344   0.190508   0.284634  -0.4898410   0.0007695   0.000289  -0.000440   0.000125   0.000127  0.0000181  0.0000120    0.000095    0.000088
+2004  12   6  53345   0.188857   0.282775  -0.4907231   0.0009376   0.000319  -0.000399   0.000125   0.000125  0.0000105  0.0000114    0.000101    0.000091
+2004  12   7  53346   0.187381   0.280586  -0.4917301   0.0010778   0.000347  -0.000345   0.000119   0.000119  0.0000037  0.0000106    0.000108    0.000093
+2004  12   8  53347   0.186293   0.278700  -0.4928236   0.0010921   0.000179  -0.000342   0.000117   0.000118  0.0000022  0.0000106    0.000086    0.000079
+2004  12   9  53348   0.184270   0.277094  -0.4938741   0.0009575   0.000091  -0.000423   0.000118   0.000119  0.0000028  0.0000106    0.000126    0.000124
+2004  12  10  53349   0.182241   0.274795  -0.4946845   0.0007150   0.000224  -0.000553   0.000118   0.000120  0.0000037  0.0000107    0.000204    0.000177
+2004  12  11  53350   0.180323   0.272813  -0.4953205   0.0004686   0.000259  -0.000550   0.000120   0.000122  0.0000095  0.0000114    0.000193    0.000164
+2004  12  12  53351   0.178439   0.270889  -0.4957260   0.0002776   0.000234  -0.000491   0.000127   0.000127  0.0000095  0.0000122    0.000148    0.000128
+2004  12  13  53352   0.176634   0.268811  -0.4959197   0.0001852   0.000209  -0.000429   0.000131   0.000130  0.0000055  0.0000117    0.000102    0.000093
+2004  12  14  53353   0.174740   0.266780  -0.4961043   0.0002738   0.000183  -0.000364   0.000124   0.000127  0.0000016  0.0000110    0.000057    0.000057
+2004  12  15  53354   0.173193   0.264500  -0.4964766   0.0005069   0.000146  -0.000339   0.000122   0.000126  0.0000040  0.0000108    0.000133    0.000101
+2004  12  16  53355   0.171789   0.262458  -0.4970869   0.0007166   0.000170  -0.000331   0.000127   0.000129  0.0000063  0.0000107    0.000086    0.000086
+2004  12  17  53356   0.170284   0.260675  -0.4979040   0.0009222   0.000222  -0.000329   0.000124   0.000127  0.0000023  0.0000106    0.000060    0.000062
+2004  12  18  53357   0.169284   0.259034  -0.4989080   0.0010374   0.000202  -0.000349   0.000125   0.000128  0.0000084  0.0000110    0.000064    0.000062
+2004  12  19  53358   0.168650   0.257510  -0.4999712   0.0010696   0.000152  -0.000374   0.000131   0.000135  0.0000113  0.0000122    0.000070    0.000070
+2004  12  20  53359   0.167464   0.256089  -0.5010074   0.0009937   0.000101  -0.000390   0.000129   0.000134  0.0000075  0.0000122    0.000076    0.000077
+2004  12  21  53360   0.165934   0.254214  -0.5019299   0.0007937   0.000051  -0.000399   0.000123   0.000129  0.0000021  0.0000116    0.000083    0.000085
+2004  12  22  53361   0.164489   0.252391  -0.5026341   0.0005509   0.000084  -0.000261   0.000122   0.000127  0.0000012  0.0000119    0.000083    0.000081
+2004  12  23  53362   0.163011   0.250382  -0.5030920   0.0003715   0.000139  -0.000089   0.000124   0.000126  0.0000014  0.0000123    0.000083    0.000076
+2004  12  24  53363   0.161477   0.248876  -0.5033307   0.0001551   0.000127  -0.000027   0.000126   0.000128  0.0000016  0.0000125    0.000085    0.000075
+2004  12  25  53364   0.159792   0.247485  -0.5033896  -0.0000889   0.000092  -0.000021   0.000134   0.000135  0.0000017  0.0000129    0.000089    0.000076
+2004  12  26  53365   0.158235   0.246637  -0.5033163  -0.0001485   0.000059  -0.000035   0.000139   0.000141  0.0000019  0.0000131    0.000093    0.000076
+2004  12  27  53366   0.156308   0.245752  -0.5031687  -0.0001335   0.000027  -0.000071   0.000138   0.000140  0.0000020  0.0000121    0.000097    0.000077
+2004  12  28  53367   0.154492   0.244018  -0.5030134  -0.0001121  -0.000002  -0.000125   0.000135   0.000138  0.0000022  0.0000118    0.000101    0.000078
+2004  12  29  53368   0.152858   0.242510  -0.5029212  -0.0000321   0.000042  -0.000237   0.000134   0.000137  0.0000019  0.0000120    0.000088    0.000071
+2004  12  30  53369   0.151067   0.241137  -0.5029636   0.0001021   0.000108  -0.000364   0.000131   0.000133  0.0000015  0.0000117    0.000070    0.000061
+2004  12  31  53370   0.150010   0.239424  -0.5031956   0.0003405   0.000107  -0.000428   0.000134   0.000137  0.0000044  0.0000118    0.000063    0.000056
+2005   1   1  53371   0.149127   0.238253  -0.5036372   0.0005341   0.000080  -0.000455   0.000141   0.000142  0.0000085  0.0000127    0.000059    0.000053
+2005   1   2  53372   0.148627   0.236995  -0.5042718   0.0006838   0.000051  -0.000466   0.000141   0.000141  0.0000127  0.0000127    0.000055    0.000050
+2005   1   3  53373   0.148662   0.235979  -0.5050501   0.0008067   0.000023  -0.000458   0.000137   0.000137  0.0000348  0.0000111    0.000052    0.000047
+2005   1   4  53374   0.148363   0.234958  -0.5058960   0.0008421  -0.000004  -0.000435   0.000131   0.000131  0.0000660  0.0000104    0.000048    0.000044
+2005   1   5  53375   0.147950   0.233535  -0.5067148   0.0007742   0.000000  -0.000381   0.000128   0.000128  0.0000793  0.0000104    0.000065    0.000059
+2005   1   6  53376   0.146804   0.231967  -0.5074019   0.0005978   0.000016  -0.000318   0.000132   0.000131  0.0000304  0.0000106    0.000087    0.000078
+2005   1   7  53377   0.145045   0.230109  -0.5078778   0.0003581   0.000038  -0.000258   0.000132   0.000132  0.0000081  0.0000108    0.000110    0.000097
+2005   1   8  53378   0.143382   0.228233  -0.5081568   0.0001909   0.000048  -0.000253   0.000133   0.000131  0.0000088  0.0000113    0.000106    0.000094
+2005   1   9  53379   0.141822   0.227054  -0.5083525   0.0001380   0.000056  -0.000275   0.000137   0.000136  0.0000150  0.0000119    0.000093    0.000083
+2005   1  10  53380   0.139790   0.225819  -0.5085048   0.0002192   0.000065  -0.000307   0.000134   0.000136  0.0000113  0.0000116    0.000081    0.000072
+2005   1  11  53381   0.137273   0.224654  -0.5087751   0.0004279   0.000074  -0.000348   0.000126   0.000130  0.0000033  0.0000110    0.000068    0.000061
+2005   1  12  53382   0.135164   0.223346  -0.5093768   0.0007228   0.000110  -0.000410   0.000124   0.000129  0.0000281  0.0000108    0.000333    0.000318
+2005   1  13  53383   0.133509   0.222220  -0.5101781   0.0009927   0.000154  -0.000428   0.000127   0.000131  0.0000170  0.0000107    0.000152    0.000166
+2005   1  14  53384   0.131818   0.221169  -0.5112636   0.0011871   0.000164  -0.000385   0.000127   0.000131  0.0000051  0.0000108    0.000090    0.000085
+2005   1  15  53385   0.129979   0.220018  -0.5124684   0.0012163   0.000142  -0.000395   0.000132   0.000135  0.0000082  0.0000116    0.000162    0.000137
+2005   1  16  53386   0.128585   0.218677  -0.5136702   0.0011684   0.000108  -0.000424   0.000130   0.000132  0.0000122  0.0000124    0.000248    0.000212
+2005   1  17  53387   0.127324   0.217577  -0.5147706   0.0010243   0.000072  -0.000446   0.000121   0.000123  0.0000197  0.0000121    0.000335    0.000288
+2005   1  18  53388   0.125800   0.216488  -0.5156937   0.0008176   0.000036  -0.000462   0.000117   0.000120  0.0000301  0.0000116    0.000422    0.000363
+2005   1  19  53389   0.124033   0.215928  -0.5164140   0.0006007  -0.000032  -0.000367   0.000114   0.000115  0.0000060  0.0000115    0.000131    0.000114
+2005   1  20  53390   0.121564   0.215338  -0.5169088   0.0003943  -0.000012  -0.000338   0.000113   0.000112  0.0000014  0.0000115    0.000047    0.000046
+2005   1  21  53391   0.119227   0.214304  -0.5172220   0.0002538   0.000124  -0.000340   0.000116   0.000115  0.0000019  0.0000116    0.000097    0.000087
+2005   1  22  53392   0.117095   0.213449  -0.5174234   0.0001342   0.000134  -0.000337   0.000120   0.000119  0.0000086  0.0000121    0.000107    0.000097
+2005   1  23  53393   0.114619   0.212625  -0.5175168   0.0000639   0.000086  -0.000331   0.000138   0.000136  0.0000133  0.0000134    0.000092    0.000088
+2005   1  24  53394   0.112391   0.211615  -0.5175422   0.0000399   0.000041  -0.000326   0.000148   0.000146  0.0000096  0.0000136    0.000078    0.000078
+2005   1  25  53395   0.110020   0.210797  -0.5175828   0.0000436  -0.000004  -0.000320   0.000138   0.000136  0.0000028  0.0000127    0.000063    0.000069
+2005   1  26  53396   0.107620   0.209791  -0.5177146   0.0001803   0.000048  -0.000363   0.000135   0.000133  0.0000210  0.0000125    0.000173    0.000156
+2005   1  27  53397   0.105428   0.209443  -0.5179914   0.0003989   0.000111  -0.000375   0.000137   0.000135  0.0000352  0.0000127    0.000136    0.000141
+2005   1  28  53398   0.103169   0.209155  -0.5184413   0.0005579   0.000116  -0.000304   0.000136   0.000134  0.0000091  0.0000129    0.000119    0.000127
+2005   1  29  53399   0.100685   0.209161  -0.5190618   0.0006647   0.000104  -0.000259   0.000142   0.000139  0.0000105  0.0000138    0.000114    0.000118
+2005   1  30  53400   0.097510   0.208962  -0.5197072   0.0007052   0.000091  -0.000235   0.000148   0.000145  0.0000155  0.0000142    0.000103    0.000106
+2005   1  31  53401   0.094677   0.208529  -0.5204143   0.0007241   0.000075  -0.000214   0.000144   0.000141  0.0000110  0.0000130    0.000092    0.000093
+2005   2   1  53402   0.091968   0.208520  -0.5211910   0.0007078   0.000056  -0.000198   0.000137   0.000133  0.0000034  0.0000122    0.000081    0.000081
+2005   2   2  53403   0.089165   0.207865  -0.5219008   0.0006168   0.000075  -0.000160   0.000135   0.000132  0.0000390  0.0000121    0.000070    0.000065
+2005   2   3  53404   0.086541   0.207079  -0.5224427   0.0004204   0.000074  -0.000155   0.000137   0.000134  0.0000657  0.0000121    0.000103    0.000112
+2005   2   4  53405   0.083854   0.206451  -0.5227709   0.0002340   0.000056  -0.000270   0.000137   0.000134  0.0000153  0.0000121    0.000127    0.000119
+2005   2   5  53406   0.081472   0.206087  -0.5229198   0.0001845   0.000039  -0.000310   0.000139   0.000136  0.0000115  0.0000127    0.000119    0.000104
+2005   2   6  53407   0.078845   0.206043  -0.5231870   0.0002636   0.000024  -0.000307   0.000143   0.000140  0.0000144  0.0000134    0.000104    0.000089
+2005   2   7  53408   0.076052   0.206006  -0.5235658   0.0004259   0.000012  -0.000304   0.000140   0.000138  0.0000093  0.0000129    0.000088    0.000073
+2005   2   8  53409   0.073083   0.205704  -0.5240690   0.0006717   0.000001  -0.000300   0.000131   0.000130  0.0000027  0.0000125    0.000072    0.000057
+2005   2   9  53410   0.069957   0.205217  -0.5248846   0.0010017  -0.000028  -0.000194   0.000127   0.000127  0.0000101  0.0000125    0.000050    0.000044
+2005   2  10  53411   0.066760   0.204537  -0.5260404   0.0012922   0.000034  -0.000229   0.000128   0.000128  0.0000163  0.0000125    0.000036    0.000034
+2005   2  11  53412   0.064102   0.203869  -0.5274561   0.0015365   0.000056  -0.000286   0.000129   0.000128  0.0000047  0.0000124    0.000072    0.000074
+2005   2  12  53413   0.061531   0.203510  -0.5290253   0.0015783   0.000046  -0.000307   0.000139   0.000138  0.0000093  0.0000134    0.000084    0.000084
+2005   2  13  53414   0.059241   0.203203  -0.5305623   0.0014233   0.000032  -0.000320   0.000139   0.000138  0.0000112  0.0000140    0.000080    0.000077
+2005   2  14  53415   0.057231   0.203388  -0.5319093   0.0011982   0.000020  -0.000332   0.000128   0.000128  0.0000072  0.0000130    0.000077    0.000070
+2005   2  15  53416   0.054666   0.203526  -0.5329792   0.0009317   0.000010  -0.000340   0.000121   0.000121  0.0000026  0.0000122    0.000073    0.000062
+2005   2  16  53417   0.051753   0.203329  -0.5337540   0.0006397  -0.000027  -0.000421   0.000120   0.000121  0.0000163  0.0000121    0.000216    0.000157
+2005   2  17  53418   0.048481   0.203151  -0.5342868   0.0004199  -0.000008  -0.000469   0.000122   0.000123  0.0000267  0.0000123    0.000147    0.000142
+2005   2  18  53419   0.045526   0.203389  -0.5346942   0.0003913   0.000088  -0.000414   0.000120   0.000122  0.0000069  0.0000127    0.000105    0.000100
+2005   2  19  53420   0.042593   0.204048  -0.5351309   0.0004656   0.000113  -0.000363   0.000122   0.000124  0.0000079  0.0000134    0.000100    0.000086
+2005   2  20  53421   0.040200   0.204674  -0.5356545   0.0005882   0.000097  -0.000321   0.000128   0.000129  0.0000100  0.0000131    0.000096    0.000081
+2005   2  21  53422   0.037694   0.205453  -0.5363012   0.0007287   0.000072  -0.000278   0.000127   0.000128  0.0000065  0.0000118    0.000091    0.000075
+2005   2  22  53423   0.035448   0.205934  -0.5371104   0.0009185   0.000038  -0.000240   0.000119   0.000122  0.0000020  0.0000111    0.000087    0.000070
+2005   2  23  53424   0.033304   0.206323  -0.5381046   0.0011003  -0.000001  -0.000039   0.000119   0.000122  0.0000111  0.0000110    0.000608    0.000216
+2005   2  24  53425   0.031512   0.206353  -0.5392994   0.0013194  -0.000037   0.000008   0.000125   0.000126  0.0000184  0.0000112    0.000775    0.000268
+2005   2  25  53426   0.030353   0.206862  -0.5407028   0.0015306  -0.000063  -0.000221   0.000124   0.000125  0.0000052  0.0000112    0.000256    0.000136
+2005   2  26  53427   0.029219   0.207726  -0.5423075   0.0016880  -0.000103  -0.000297   0.000128   0.000128  0.0000099  0.0000121    0.000113    0.000097
+2005   2  27  53428   0.027655   0.208813  -0.5440295   0.0017172  -0.000142  -0.000320   0.000124   0.000126  0.0000164  0.0000123    0.000109    0.000092
+2005   2  28  53429   0.025823   0.209996  -0.5457403   0.0016447  -0.000168  -0.000346   0.000113   0.000116  0.0000118  0.0000111    0.000104    0.000088
+2005   3   1  53430   0.024052   0.211444  -0.5473513   0.0015478  -0.000182  -0.000370   0.000107   0.000111  0.0000029  0.0000105    0.000100    0.000083
+2005   3   2  53431   0.021817   0.213060  -0.5488190   0.0013677  -0.000140  -0.000398   0.000105   0.000109  0.0000176  0.0000105    0.000099    0.000086
+2005   3   3  53432   0.019381   0.214308  -0.5501005   0.0011815  -0.000076  -0.000419   0.000106   0.000110  0.0000295  0.0000105    0.000100    0.000091
+2005   3   4  53433   0.017101   0.215244  -0.5512075   0.0010290  -0.000009  -0.000426   0.000106   0.000109  0.0000073  0.0000105    0.000100    0.000096
+2005   3   5  53434   0.015127   0.216059  -0.5522380   0.0009429   0.000028  -0.000416   0.000111   0.000113  0.0000065  0.0000112    0.000097    0.000094
+2005   3   6  53435   0.012718   0.216748  -0.5531762   0.0009327   0.000049  -0.000392   0.000116   0.000118  0.0000103  0.0000118    0.000094    0.000089
+2005   3   7  53436   0.010573   0.217180  -0.5541318   0.0010298   0.000061  -0.000359   0.000113   0.000115  0.0000075  0.0000112    0.000090    0.000083
+2005   3   8  53437   0.008774   0.217971  -0.5552331   0.0011929   0.000065  -0.000319   0.000109   0.000110  0.0000022  0.0000105    0.000087    0.000078
+2005   3   9  53438   0.006792   0.218809  -0.5565011   0.0013538   0.000050  -0.000275   0.000110   0.000110  0.0000142  0.0000105    0.000092    0.000087
+2005   3  10  53439   0.004739   0.219654  -0.5578996   0.0014772   0.000027  -0.000233   0.000114   0.000113  0.0000236  0.0000105    0.000100    0.000100
+2005   3  11  53440   0.002476   0.220477  -0.5593777   0.0015274   0.000001  -0.000198   0.000114   0.000112  0.0000062  0.0000104    0.000108    0.000113
+2005   3  12  53441   0.000500   0.221380  -0.5609070   0.0014737  -0.000020  -0.000172   0.000116   0.000114  0.0000075  0.0000111    0.000103    0.000109
+2005   3  13  53442  -0.001461   0.222231  -0.5622918   0.0012550  -0.000035  -0.000157   0.000116   0.000114  0.0000082  0.0000114    0.000092    0.000099
+2005   3  14  53443  -0.002597   0.222633  -0.5633800   0.0009517  -0.000045  -0.000153   0.000111   0.000111  0.0000052  0.0000106    0.000082    0.000088
+2005   3  15  53444  -0.003790   0.223284  -0.5641513   0.0005699  -0.000049  -0.000157   0.000108   0.000108  0.0000021  0.0000101    0.000072    0.000078
+2005   3  16  53445  -0.005604   0.223507  -0.5646263   0.0002770  -0.000045  -0.000287   0.000108   0.000109  0.0000376  0.0000102    0.001498    0.001429
+2005   3  17  53446  -0.006865   0.223789  -0.5647499   0.0000988  -0.000002  -0.000347   0.000107   0.000109  0.0000195  0.0000101    0.000540    0.000499
+2005   3  18  53447  -0.008051   0.224235  -0.5648070   0.0000282   0.000085  -0.000256   0.000105   0.000105  0.0000053  0.0000100    0.000101    0.000089
+2005   3  19  53448  -0.008981   0.224977  -0.5648581   0.0000611   0.000083  -0.000226   0.000108   0.000106  0.0000065  0.0000105    0.000094    0.000088
+2005   3  20  53449  -0.009838   0.226012  -0.5649492   0.0001478   0.000039  -0.000234   0.000112   0.000110  0.0000122  0.0000112    0.000084    0.000079
+2005   3  21  53450  -0.010707   0.227071  -0.5651197   0.0002459  -0.000010  -0.000241   0.000112   0.000110  0.0000094  0.0000111    0.000075    0.000069
+2005   3  22  53451  -0.011789   0.228416  -0.5654449   0.0004318  -0.000064  -0.000246   0.000107   0.000105  0.0000026  0.0000108    0.000065    0.000059
+2005   3  23  53452  -0.013284   0.230378  -0.5660244   0.0007294   0.000013  -0.000457   0.000107   0.000105  0.0000015  0.0000108    0.000102    0.000129
+2005   3  24  53453  -0.015256   0.231950  -0.5668728   0.0009882   0.000022  -0.000388   0.000108   0.000107  0.0000019  0.0000105    0.000124    0.000120
+2005   3  25  53454  -0.016567   0.233198  -0.5679314   0.0011630  -0.000010  -0.000333   0.000109   0.000107  0.0000019  0.0000106    0.000120    0.000105
+2005   3  26  53455  -0.017806   0.234663  -0.5691134   0.0012079  -0.000045  -0.000314   0.000113   0.000110  0.0000018  0.0000114    0.000111    0.000097
+2005   3  27  53456  -0.019261   0.236339  -0.5703131   0.0011523  -0.000077  -0.000291   0.000107   0.000103  0.0000017  0.0000108    0.000101    0.000089
+2005   3  28  53457  -0.020793   0.238043  -0.5714170   0.0010145  -0.000105  -0.000265   0.000098   0.000094  0.0000016  0.0000091    0.000091    0.000081
+2005   3  29  53458  -0.022650   0.239326  -0.5723277   0.0007985  -0.000126  -0.000239   0.000095   0.000091  0.0000014  0.0000085    0.000082    0.000073
+2005   3  30  53459  -0.024693   0.240412  -0.5729848   0.0005165  -0.000134  -0.000272   0.000094   0.000090  0.0000059  0.0000084    0.000065    0.000061
+2005   3  31  53460  -0.026863   0.241401  -0.5733644   0.0002467  -0.000135  -0.000321   0.000093   0.000089  0.0000091  0.0000084    0.000047    0.000048
+2005   4   1  53461  -0.028745   0.242820  -0.5735309   0.0000816  -0.000007  -0.000255   0.000094   0.000091  0.0000031  0.0000086    0.000092    0.000088
+2005   4   2  53462  -0.030723   0.244101  -0.5736586   0.0001183   0.000024  -0.000214   0.000099   0.000095  0.0000015  0.0000091    0.000104    0.000100
+2005   4   3  53463  -0.032354   0.245090  -0.5739023   0.0003283   0.000000  -0.000204   0.000104   0.000099  0.0000015  0.0000107    0.000097    0.000095
+2005   4   4  53464  -0.033433   0.245782  -0.5743640   0.0006111  -0.000029  -0.000203   0.000102   0.000097  0.0000016  0.0000114    0.000090    0.000091
+2005   4   5  53465  -0.034454   0.246157  -0.5750895   0.0008783  -0.000063  -0.000208   0.000097   0.000093  0.0000017  0.0000106    0.000083    0.000086
+2005   4   6  53466  -0.034996   0.246631  -0.5760644   0.0010893  -0.000102  -0.000261   0.000096   0.000092  0.0000057  0.0000104    0.000052    0.000051
+2005   4   7  53467  -0.035563   0.248140  -0.5772348   0.0012235  -0.000141  -0.000341   0.000097   0.000094  0.0000086  0.0000104    0.000057    0.000056
+2005   4   8  53468  -0.036664   0.250298  -0.5785151   0.0012943  -0.000125  -0.000360   0.000096   0.000094  0.0000031  0.0000105    0.000083    0.000083
+2005   4   9  53469  -0.038460   0.252496  -0.5797960   0.0011768  -0.000107  -0.000369   0.000098   0.000095  0.0000059  0.0000111    0.000088    0.000088
+2005   4  10  53470  -0.040646   0.254062  -0.5808678   0.0008996  -0.000094  -0.000370   0.000095   0.000093  0.0000063  0.0000111    0.000086    0.000084
+2005   4  11  53471  -0.042510   0.255449  -0.5816150   0.0005758  -0.000080  -0.000358   0.000087   0.000087  0.0000038  0.0000101    0.000082    0.000079
+2005   4  12  53472  -0.044162   0.256959  -0.5820762   0.0003361  -0.000066  -0.000333   0.000084   0.000084  0.0000013  0.0000097    0.000080    0.000074
+2005   4  13  53473  -0.045403   0.258772  -0.5823624   0.0002254  -0.000103  -0.000260   0.000084   0.000085  0.0000077  0.0000097    0.000086    0.000082
+2005   4  14  53474  -0.046132   0.260564  -0.5825931   0.0002095  -0.000151  -0.000173   0.000086   0.000086  0.0000126  0.0000097    0.000095    0.000093
+2005   4  15  53475  -0.046747   0.262527  -0.5828515   0.0002604  -0.000195  -0.000089   0.000084   0.000085  0.0000037  0.0000097    0.000104    0.000104
+2005   4  16  53476  -0.047881   0.264961  -0.5831727   0.0003784  -0.000173  -0.000052   0.000085   0.000086  0.0000113  0.0000102    0.000096    0.000097
+2005   4  17  53477  -0.049349   0.267371  -0.5836554   0.0005368  -0.000124  -0.000042   0.000087   0.000087  0.0000164  0.0000116    0.000083    0.000083
+2005   4  18  53478  -0.050960   0.269652  -0.5843187   0.0007260  -0.000072  -0.000045   0.000087   0.000086  0.0000111  0.0000119    0.000069    0.000069
+2005   4  19  53479  -0.052440   0.271916  -0.5851537   0.0009532  -0.000019  -0.000059   0.000084   0.000084  0.0000028  0.0000114    0.000056    0.000055
+2005   4  20  53480  -0.053865   0.274283  -0.5861801   0.0011395  -0.000029  -0.000098   0.000083   0.000084  0.0000082  0.0000115    0.000093    0.000075
+2005   4  21  53481  -0.054930   0.276508  -0.5873931   0.0013044  -0.000058  -0.000145   0.000083   0.000084  0.0000133  0.0000116    0.000143    0.000105
+2005   4  22  53482  -0.055752   0.278712  -0.5887543   0.0014066  -0.000072  -0.000198   0.000083   0.000084  0.0000040  0.0000116    0.000104    0.000095
+2005   4  23  53483  -0.056823   0.280981  -0.5901870   0.0014591  -0.000063  -0.000198   0.000086   0.000087  0.0000112  0.0000123    0.000080    0.000081
+2005   4  24  53484  -0.057699   0.283370  -0.5915980   0.0013963  -0.000048  -0.000174   0.000094   0.000095  0.0000185  0.0000131    0.000071    0.000070
+2005   4  25  53485  -0.058417   0.285254  -0.5929147   0.0012270  -0.000031  -0.000146   0.000099   0.000098  0.0000132  0.0000126    0.000063    0.000059
+2005   4  26  53486  -0.058775   0.286963  -0.5940472   0.0009727  -0.000015  -0.000115   0.000094   0.000094  0.0000031  0.0000117    0.000055    0.000048
+2005   4  27  53487  -0.058868   0.288622  -0.5949169   0.0006979   0.000021  -0.000088   0.000093   0.000093  0.0000127  0.0000116    0.000043    0.000036
+2005   4  28  53488  -0.058469   0.290477  -0.5955257   0.0005097   0.000057  -0.000063   0.000093   0.000094  0.0000212  0.0000114    0.000030    0.000024
+2005   4  29  53489  -0.057882   0.292558  -0.5959727   0.0004359   0.000060  -0.000127   0.000092   0.000093  0.0000057  0.0000114    0.000072    0.000075
+2005   4  30  53490  -0.057267   0.294864  -0.5964331   0.0005237   0.000051  -0.000153   0.000096   0.000096  0.0000015  0.0000121    0.000081    0.000085
+2005   5   1  53491  -0.057311   0.297688  -0.5970633   0.0007283   0.000040  -0.000152   0.000093   0.000093  0.0000014  0.0000129    0.000070    0.000072
+2005   5   2  53492  -0.057821   0.300144  -0.5979525   0.0010104   0.000026  -0.000148   0.000084   0.000084  0.0000013  0.0000123    0.000060    0.000059
+2005   5   3  53493  -0.059068   0.302228  -0.5991066   0.0012406   0.000013  -0.000139   0.000080   0.000081  0.0000012  0.0000114    0.000050    0.000045
+2005   5   4  53494  -0.059957   0.304043  -0.6004520   0.0013756  -0.000020  -0.000153   0.000079   0.000080  0.0000074  0.0000113    0.000054    0.000054
+2005   5   5  53495  -0.060615   0.306104  -0.6018569   0.0013816  -0.000054  -0.000165   0.000080   0.000081  0.0000119  0.0000115    0.000063    0.000068
+2005   5   6  53496  -0.060897   0.307876  -0.6031970   0.0012961  -0.000081  -0.000170   0.000079   0.000081  0.0000040  0.0000117    0.000071    0.000081
+2005   5   7  53497  -0.060760   0.309849  -0.6044076   0.0011477  -0.000035  -0.000110   0.000081   0.000083  0.0000017  0.0000123    0.000082    0.000090
+2005   5   8  53498  -0.060635   0.311571  -0.6054316   0.0009241   0.000038  -0.000027   0.000086   0.000088  0.0000016  0.0000123    0.000095    0.000097
+2005   5   9  53499  -0.060641   0.313179  -0.6062294   0.0006612   0.000110   0.000052   0.000086   0.000089  0.0000014  0.0000110    0.000107    0.000104
+2005   5  10  53500  -0.060913   0.314771  -0.6067983   0.0004318   0.000176   0.000121   0.000083   0.000087  0.0000012  0.0000106    0.000120    0.000110
+2005   5  11  53501  -0.061328   0.316228  -0.6071747   0.0002892   0.000103   0.000123   0.000082   0.000086  0.0000013  0.0000106    0.000205    0.000241
+2005   5  12  53502  -0.062110   0.317589  -0.6074352   0.0002491   0.000048   0.000072   0.000081   0.000085  0.0000014  0.0000104    0.000200    0.000245
+2005   5  13  53503  -0.063071   0.319000  -0.6076723   0.0002596   0.000032  -0.000012   0.000082   0.000086  0.0000016  0.0000103    0.000109    0.000126
+2005   5  14  53504  -0.064631   0.320398  -0.6079686   0.0003055   0.000016  -0.000045   0.000084   0.000088  0.0000018  0.0000108    0.000082    0.000091
+2005   5  15  53505  -0.065761   0.321768  -0.6083754   0.0004499  -0.000003  -0.000064   0.000089   0.000092  0.0000022  0.0000113    0.000079    0.000088
+2005   5  16  53506  -0.066800   0.323634  -0.6089162   0.0006394  -0.000022  -0.000083   0.000090   0.000092  0.0000025  0.0000108    0.000076    0.000084
+2005   5  17  53507  -0.067524   0.325104  -0.6095964   0.0008206  -0.000038  -0.000100   0.000087   0.000090  0.0000029  0.0000104    0.000072    0.000081
+2005   5  18  53508  -0.068354   0.326519  -0.6104106   0.0009428  -0.000115  -0.000170   0.000087   0.000089  0.0000124  0.0000104    0.000062    0.000068
+2005   5  19  53509  -0.069217   0.327831  -0.6113617   0.0010041  -0.000201  -0.000247   0.000087   0.000088  0.0000191  0.0000103    0.000051    0.000053
+2005   5  20  53510  -0.070063   0.329315  -0.6123921   0.0010101  -0.000059  -0.000224   0.000086   0.000087  0.0000054  0.0000104    0.000066    0.000070
+2005   5  21  53511  -0.070696   0.330702  -0.6133429   0.0009458  -0.000021  -0.000189   0.000089   0.000090  0.0000132  0.0000112    0.000074    0.000075
+2005   5  22  53512  -0.071013   0.332316  -0.6142091   0.0007821  -0.000045  -0.000156   0.000091   0.000091  0.0000181  0.0000119    0.000077    0.000073
+2005   5  23  53513  -0.071279   0.334016  -0.6148453   0.0004865  -0.000065  -0.000115   0.000087   0.000088  0.0000119  0.0000115    0.000080    0.000071
+2005   5  24  53514  -0.071473   0.335642  -0.6151352   0.0001199  -0.000083  -0.000070   0.000085   0.000085  0.0000030  0.0000108    0.000083    0.000069
+2005   5  25  53515  -0.071407   0.337355  -0.6151314  -0.0001653  -0.000081  -0.000066   0.000086   0.000085  0.0000137  0.0000109    0.000106    0.000092
+2005   5  26  53516  -0.070530   0.339319  -0.6148985  -0.0002952  -0.000076  -0.000073   0.000086   0.000086  0.0000227  0.0000109    0.000134    0.000123
+2005   5  27  53517  -0.069019   0.341574  -0.6145757  -0.0002512   0.000045  -0.000161   0.000086   0.000086  0.0000061  0.0000109    0.000125    0.000120
+2005   5  28  53518  -0.068114   0.343783  -0.6144008  -0.0000582   0.000073  -0.000089   0.000088   0.000088  0.0000110  0.0000116    0.000206    0.000196
+2005   5  29  53519  -0.067160   0.345842  -0.6144881   0.0001982   0.000047   0.000045   0.000087   0.000086  0.0000238  0.0000116    0.000325    0.000305
+2005   5  30  53520  -0.066006   0.348020  -0.6148256   0.0004461   0.000012   0.000173   0.000084   0.000084  0.0000427  0.0000106    0.000444    0.000413
+2005   5  31  53521  -0.064567   0.349800  -0.6153906   0.0006725  -0.000049   0.000036   0.000081   0.000081  0.0000283  0.0000099    0.000320    0.000304
+2005   6   1  53522  -0.062985   0.351196  -0.6160988   0.0007315  -0.000118  -0.000167   0.000077   0.000077  0.0000057  0.0000095    0.000136    0.000142
+2005   6   2  53523  -0.061658   0.352698  -0.6168112   0.0006440  -0.000090  -0.000197   0.000076   0.000077  0.0000014  0.0000094    0.000096    0.000107
+2005   6   3  53524  -0.060515   0.354504  -0.6173678   0.0004551  -0.000035  -0.000178   0.000077   0.000079  0.0000017  0.0000095    0.000092    0.000106
+2005   6   4  53525  -0.059993   0.356545  -0.6176596   0.0001878  -0.000065  -0.000127   0.000079   0.000081  0.0000122  0.0000102    0.000087    0.000098
+2005   6   5  53526  -0.059573   0.358275  -0.6177904  -0.0000324  -0.000124  -0.000063   0.000086   0.000087  0.0000252  0.0000113    0.000081    0.000088
+2005   6   6  53527  -0.059163   0.359842  -0.6176885  -0.0002168  -0.000175   0.000003   0.000087   0.000089  0.0000192  0.0000114    0.000075    0.000078
+2005   6   7  53528  -0.058672   0.361170  -0.6173202  -0.0004090  -0.000219   0.000064   0.000083   0.000085  0.0000042  0.0000108    0.000070    0.000068
+2005   6   8  53529  -0.058184   0.362400  -0.6168170  -0.0005549  -0.000006   0.000059   0.000083   0.000086  0.0000150  0.0000108    0.000168    0.000131
+2005   6   9  53530  -0.057674   0.363385  -0.6162652  -0.0005770   0.000022  -0.000040   0.000085   0.000087  0.0000249  0.0000106    0.000181    0.000151
+2005   6  10  53531  -0.056587   0.364853  -0.6157433  -0.0004866  -0.000029  -0.000161   0.000085   0.000089  0.0000066  0.0000108    0.000160    0.000151
+2005   6  11  53532  -0.055492   0.366982  -0.6153516  -0.0003859  -0.000033  -0.000176   0.000087   0.000090  0.0000160  0.0000115    0.000140    0.000135
+2005   6  12  53533  -0.054401   0.369007  -0.6150527  -0.0002312  -0.000024  -0.000148   0.000085   0.000088  0.0000168  0.0000121    0.000119    0.000113
+2005   6  13  53534  -0.053278   0.371104  -0.6148896  -0.0000830  -0.000018  -0.000114   0.000080   0.000083  0.0000095  0.0000116    0.000099    0.000092
+2005   6  14  53535  -0.052484   0.373233  -0.6149074   0.0000729  -0.000013  -0.000074   0.000078   0.000080  0.0000029  0.0000109    0.000078    0.000070
+2005   6  15  53536  -0.052029   0.374995  -0.6150766   0.0002299  -0.000086  -0.000078   0.000078   0.000080  0.0000319  0.0000108    0.000101    0.000121
+2005   6  16  53537  -0.051427   0.376434  -0.6153840   0.0003589  -0.000175  -0.000091   0.000080   0.000081  0.0000537  0.0000109    0.000134    0.000190
+2005   6  17  53538  -0.050514   0.377957  -0.6157761   0.0004037  -0.000040  -0.000043   0.000078   0.000080  0.0000128  0.0000108    0.000092    0.000117
+2005   6  18  53539  -0.049555   0.379514  -0.6161183   0.0002909   0.000013  -0.000015   0.000079   0.000081  0.0000099  0.0000113    0.000072    0.000080
+2005   6  19  53540  -0.048285   0.381104  -0.6162920   0.0000712   0.000010  -0.000004   0.000083   0.000085  0.0000142  0.0000119    0.000070    0.000075
+2005   6  20  53541  -0.047196   0.382881  -0.6162368  -0.0001899   0.000008   0.000004   0.000081   0.000084  0.0000097  0.0000114    0.000068    0.000070
+2005   6  21  53542  -0.046270   0.384319  -0.6159441  -0.0003791   0.000005   0.000007   0.000078   0.000081  0.0000025  0.0000109    0.000066    0.000065
+2005   6  22  53543  -0.045619   0.386010  -0.6154740  -0.0005034   0.000046  -0.000054   0.000078   0.000080  0.0000149  0.0000110    0.000047    0.000050
+2005   6  23  53544  -0.045014   0.387249  -0.6149714  -0.0004800   0.000072  -0.000109   0.000080   0.000081  0.0000249  0.0000110    0.000475    0.000323
+2005   6  24  53545  -0.044492   0.388460  -0.6145893  -0.0003222   0.000060  -0.000118   0.000080   0.000082  0.0000065  0.0000111    0.000167    0.000142
+2005   6  25  53546  -0.043687   0.389652  -0.6144113  -0.0000561   0.000050  -0.000086   0.000082   0.000083  0.0000099  0.0000118    0.000079    0.000087
+2005   6  26  53547  -0.042834   0.390880  -0.6145227   0.0001760   0.000038  -0.000040   0.000083   0.000084  0.0000158  0.0000119    0.000072    0.000079
+2005   6  27  53548  -0.041507   0.391906  -0.6148130   0.0003185   0.000019   0.000001   0.000079   0.000081  0.0000113  0.0000108    0.000064    0.000071
+2005   6  28  53549  -0.040396   0.393473  -0.6151308   0.0003202  -0.000002   0.000037   0.000077   0.000079  0.0000032  0.0000102    0.000056    0.000063
+2005   6  29  53550  -0.039885   0.394803  -0.6153949   0.0002179  -0.000008   0.000023   0.000078   0.000080  0.0000090  0.0000103    0.000063    0.000055
+2005   6  30  53551  -0.039895   0.396165  -0.6155237   0.0000195  -0.000077  -0.000069   0.000078   0.000079  0.0000144  0.0000103    0.000031    0.000032
+2005   7   1  53552  -0.039940   0.396997  -0.6154455  -0.0002243  -0.000096  -0.000185   0.000078   0.000079  0.0000049  0.0000104    0.000095    0.000089
+2005   7   2  53553  -0.039290   0.398043  -0.6151008  -0.0004883  -0.000090  -0.000223   0.000081   0.000082  0.0000251  0.0000112    0.000139    0.000149
+2005   7   3  53554  -0.038486   0.399034  -0.6144287  -0.0008044  -0.000077  -0.000221   0.000086   0.000087  0.0000191  0.0000119    0.000162    0.000199
+2005   7   4  53555  -0.037429   0.399917  -0.6135724  -0.0010064  -0.000055  -0.000200   0.000085   0.000087  0.0000212  0.0000114    0.000185    0.000250
+2005   7   5  53556  -0.036183   0.401353  -0.6125838  -0.0010737  -0.000025  -0.000164   0.000082   0.000083  0.0000314  0.0000108    0.000207    0.000299
+2005   7   6  53557  -0.034475   0.402825  -0.6114674  -0.0010214   0.000032  -0.000090   0.000080   0.000082  0.0000063  0.0000108    0.000117    0.000132
+2005   7   7  53558  -0.032747   0.404697  -0.6104678  -0.0009232  -0.000010   0.000064   0.000081   0.000082  0.0000012  0.0000108    0.000098    0.000098
+2005   7   8  53559  -0.031271   0.406333  -0.6096254  -0.0008266  -0.000077   0.000227   0.000083   0.000084  0.0000014  0.0000109    0.000098    0.000098
+2005   7   9  53560  -0.029862   0.407494  -0.6088712  -0.0006537  -0.000090   0.000391   0.000084   0.000085  0.0000162  0.0000116    0.000069    0.000073
+2005   7  10  53561  -0.028568   0.408168  -0.6083252  -0.0004455   0.000193   0.000257   0.000084   0.000085  0.0000171  0.0000130    0.000051    0.000064
+2005   7  11  53562  -0.027617   0.408808  -0.6080178  -0.0002567   0.000327   0.000055   0.000081   0.000082  0.0000096  0.0000129    0.000066    0.000076
+2005   7  12  53563  -0.026723   0.409497  -0.6078476  -0.0000925   0.000299  -0.000113   0.000077   0.000079  0.0000027  0.0000121    0.000095    0.000092
+2005   7  13  53564  -0.025721   0.410287  -0.6077368  -0.0000170   0.000164  -0.000176   0.000077   0.000078  0.0000950  0.0000120    0.000078    0.000076
+2005   7  14  53565  -0.024353   0.411353  -0.6077506  -0.0000320   0.000023  -0.000138   0.000077   0.000079  0.0000232  0.0000119    0.000129    0.000487
+2005   7  15  53566  -0.023036   0.412652  -0.6076704  -0.0001354   0.000008  -0.000043   0.000076   0.000078  0.0000063  0.0000119    0.000107    0.000223
+2005   7  16  53567  -0.021702   0.413755  -0.6074810  -0.0002743   0.000086  -0.000002   0.000079   0.000079  0.0000176  0.0000128    0.000123    0.000122
+2005   7  17  53568  -0.020439   0.414477  -0.6070986  -0.0004930   0.000185   0.000018   0.000084   0.000083  0.0000213  0.0000131    0.000166    0.000180
+2005   7  18  53569  -0.019723   0.414953  -0.6064795  -0.0006806   0.000211   0.000007   0.000084   0.000084  0.0000132  0.0000119    0.000158    0.000177
+2005   7  19  53570  -0.019195   0.415354  -0.6056911  -0.0008020   0.000115  -0.000055   0.000080   0.000079  0.0000036  0.0000111    0.000066    0.000077
+2005   7  20  53571  -0.018409   0.415391  -0.6048506  -0.0008376   0.000111  -0.000068   0.000080   0.000079  0.0000110  0.0000110    0.000056    0.000060
+2005   7  21  53572  -0.016870   0.415672  -0.6040478  -0.0007465   0.000129  -0.000067   0.000083   0.000081  0.0000175  0.0000111    0.000067    0.000064
+2005   7  22  53573  -0.015389   0.416373  -0.6034088  -0.0004541   0.000144  -0.000065   0.000082   0.000081  0.0000047  0.0000112    0.000078    0.000068
+2005   7  23  53574  -0.013983   0.417154  -0.6031296  -0.0000725   0.000127  -0.000067   0.000084   0.000083  0.0000170  0.0000118    0.000076    0.000067
+2005   7  24  53575  -0.013023   0.418019  -0.6032282   0.0002526   0.000097  -0.000068   0.000091   0.000091  0.0000264  0.0000127    0.000070    0.000063
+2005   7  25  53576  -0.012098   0.418777  -0.6036189   0.0004559   0.000067  -0.000065   0.000095   0.000094  0.0000184  0.0000125    0.000063    0.000060
+2005   7  26  53577  -0.011297   0.419328  -0.6041334   0.0004946   0.000039  -0.000057   0.000090   0.000090  0.0000046  0.0000119    0.000056    0.000057
+2005   7  27  53578  -0.010329   0.419704  -0.6045678   0.0003750   0.000028  -0.000031   0.000089   0.000088  0.0000210  0.0000117    0.000068    0.000068
+2005   7  28  53579  -0.009331   0.420180  -0.6048209   0.0001537   0.000028   0.000000   0.000090   0.000089  0.0000348  0.0000117    0.000085    0.000083
+2005   7  29  53580  -0.008195   0.420289  -0.6048528  -0.0000877   0.000037   0.000033   0.000089   0.000089  0.0000093  0.0000118    0.000101    0.000098
+2005   7  30  53581  -0.006436   0.420565  -0.6046213  -0.0003191   0.000044   0.000050   0.000092   0.000092  0.0000104  0.0000125    0.000101    0.000100
+2005   7  31  53582  -0.004563   0.420906  -0.6041795  -0.0005292   0.000056   0.000058   0.000093   0.000092  0.0000213  0.0000125    0.000095    0.000097
+2005   8   1  53583  -0.002915   0.421365  -0.6036282  -0.0006126   0.000075   0.000062   0.000090   0.000089  0.0000169  0.0000115    0.000089    0.000094
+2005   8   2  53584  -0.001301   0.421599  -0.6030210  -0.0006635   0.000097   0.000059   0.000088   0.000088  0.0000046  0.0000109    0.000083    0.000091
+2005   8   3  53585   0.000715   0.421780  -0.6023817  -0.0006566   0.000171   0.000072   0.000087   0.000086  0.0000093  0.0000108    0.000087    0.000093
+2005   8   4  53586   0.002989   0.422008  -0.6017676  -0.0005708   0.000253   0.000081   0.000086   0.000086  0.0000143  0.0000106    0.000093    0.000095
+2005   8   5  53587   0.004797   0.422428  -0.6012591  -0.0004209   0.000323   0.000081   0.000085   0.000084  0.0000043  0.0000107    0.000100    0.000097
+2005   8   6  53588   0.006600   0.422607  -0.6009351  -0.0002124   0.000312   0.000053   0.000088   0.000086  0.0000197  0.0000115    0.000102    0.000093
+2005   8   7  53589   0.008652   0.423093  -0.6008782   0.0000445   0.000263   0.000011   0.000097   0.000095  0.0000253  0.0000119    0.000102    0.000087
+2005   8   8  53590   0.010988   0.423533  -0.6010525   0.0002680   0.000205  -0.000031   0.000098   0.000096  0.0000163  0.0000109    0.000102    0.000081
+2005   8   9  53591   0.013776   0.424304  -0.6013884   0.0003954   0.000145  -0.000072   0.000092   0.000091  0.0000048  0.0000103    0.000102    0.000075
+2005   8  10  53592   0.016175   0.425348  -0.6018267   0.0004171   0.000043  -0.000191   0.000091   0.000092  0.0000061  0.0000104    0.000114    0.000095
+2005   8  11  53593   0.018333   0.426438  -0.6022549   0.0003763  -0.000062  -0.000323   0.000094   0.000095  0.0000088  0.0000105    0.000129    0.000123
+2005   8  12  53594   0.019995   0.427256  -0.6025566   0.0002313   0.000111  -0.000080   0.000094   0.000095  0.0000036  0.0000107    0.000144    0.000119
+2005   8  13  53595   0.021630   0.427887  -0.6026629  -0.0000107   0.000189  -0.000021   0.000095   0.000096  0.0000188  0.0000112    0.000140    0.000111
+2005   8  14  53596   0.022766   0.428505  -0.6025504  -0.0002376   0.000201  -0.000071   0.000096   0.000096  0.0000210  0.0000122    0.000127    0.000105
+2005   8  15  53597   0.023866   0.429033  -0.6022257  -0.0003841   0.000216  -0.000120   0.000092   0.000092  0.0000124  0.0000123    0.000115    0.000099
+2005   8  16  53598   0.024903   0.429385  -0.6017695  -0.0004241   0.000230  -0.000167   0.000090   0.000091  0.0000037  0.0000117    0.000103    0.000093
+2005   8  17  53599   0.026050   0.429491  -0.6013252  -0.0003921   0.000136  -0.000068   0.000089   0.000091  0.0000115  0.0000116    0.000253    0.000238
+2005   8  18  53600   0.027134   0.429401  -0.6010050  -0.0002413   0.000078   0.000028   0.000089   0.000091  0.0000184  0.0000116    0.000165    0.000157
+2005   8  19  53601   0.028497   0.429137  -0.6009042   0.0000522   0.000215  -0.000003   0.000088   0.000089  0.0000050  0.0000116    0.000081    0.000067
+2005   8  20  53602   0.029806   0.429044  -0.6011142   0.0003956   0.000253  -0.000045   0.000091   0.000092  0.0000192  0.0000123    0.000101    0.000081
+2005   8  21  53603   0.031345   0.429076  -0.6016952   0.0006700   0.000238  -0.000081   0.000099   0.000100  0.0000280  0.0000129    0.000111    0.000090
+2005   8  22  53604   0.032729   0.429079  -0.6024367   0.0006968   0.000220  -0.000112   0.000102   0.000103  0.0000188  0.0000123    0.000121    0.000099
+2005   8  23  53605   0.034152   0.428794  -0.6030815   0.0005415   0.000201  -0.000138   0.000097   0.000100  0.0000045  0.0000114    0.000132    0.000109
+2005   8  24  53606   0.035589   0.428702  -0.6034999   0.0002927   0.000136  -0.000083   0.000096   0.000099  0.0000089  0.0000115    0.000090    0.000077
+2005   8  25  53607   0.036959   0.428423  -0.6036575   0.0000229   0.000063  -0.000005   0.000095   0.000098  0.0000143  0.0000116    0.000035    0.000036
+2005   8  26  53608   0.038261   0.428011  -0.6035336  -0.0002739   0.000119   0.000007   0.000094   0.000097  0.0000045  0.0000115    0.000072    0.000059
+2005   8  27  53609   0.039392   0.427098  -0.6030514  -0.0005651   0.000166   0.000036   0.000099   0.000101  0.0000213  0.0000122    0.000096    0.000077
+2005   8  28  53610   0.040619   0.426169  -0.6023961  -0.0007728   0.000193   0.000072   0.000100   0.000103  0.0000312  0.0000129    0.000103    0.000086
+2005   8  29  53611   0.041394   0.425697  -0.6015933  -0.0008798   0.000221   0.000095   0.000097   0.000101  0.0000210  0.0000123    0.000111    0.000094
+2005   8  30  53612   0.041802   0.425372  -0.6006600  -0.0008721   0.000248   0.000102   0.000093   0.000097  0.0000048  0.0000115    0.000118    0.000102
+2005   8  31  53613   0.041847   0.425077  -0.5997614  -0.0007670   0.000247   0.000078   0.000093   0.000097  0.0000014  0.0000113    0.000115    0.000099
+2005   9   1  53614   0.042068   0.425193  -0.5990504  -0.0005933   0.000237   0.000035   0.000095   0.000099  0.0000014  0.0000113    0.000108    0.000092
+2005   9   2  53615   0.042074   0.425599  -0.5986310  -0.0003227   0.000227  -0.000016   0.000094   0.000098  0.0000013  0.0000113    0.000102    0.000085
+2005   9   3  53616   0.042303   0.425396  -0.5985273  -0.0000337   0.000195  -0.000140   0.000097   0.000099  0.0000145  0.0000119    0.000115    0.000092
+2005   9   4  53617   0.042754   0.424840  -0.5986108   0.0001825   0.000158  -0.000280   0.000103   0.000104  0.0000229  0.0000130    0.000134    0.000105
+2005   9   5  53618   0.043599   0.424215  -0.5988496   0.0003320   0.000128  -0.000405   0.000102   0.000104  0.0000262  0.0000127    0.000153    0.000117
+2005   9   6  53619   0.044733   0.423694  -0.5992263   0.0004180   0.000102  -0.000509   0.000099   0.000101  0.0000294  0.0000117    0.000172    0.000129
+2005   9   7  53620   0.045922   0.423287  -0.5996666   0.0004567   0.000335  -0.000169   0.000099   0.000100  0.0000072  0.0000116    0.000203    0.000163
+2005   9   8  53621   0.047268   0.422918  -0.6001315   0.0004374   0.000450   0.000018   0.000099   0.000101  0.0000022  0.0000119    0.000163    0.000143
+2005   9   9  53622   0.048497   0.422961  -0.6005183   0.0003139   0.000320  -0.000054   0.000100   0.000101  0.0000019  0.0000120    0.000114    0.000096
+2005   9  10  53623   0.049410   0.423114  -0.6007146   0.0001167   0.000280  -0.000090   0.000105   0.000105  0.0000121  0.0000130    0.000090    0.000074
+2005   9  11  53624   0.050077   0.423289  -0.6007239  -0.0001031   0.000295  -0.000087   0.000110   0.000109  0.0000138  0.0000133    0.000076    0.000062
+2005   9  12  53625   0.050492   0.423188  -0.6005781  -0.0002058   0.000301  -0.000090   0.000106   0.000105  0.0000081  0.0000117    0.000061    0.000051
+2005   9  13  53626   0.050341   0.422582  -0.6003989  -0.0001020   0.000300  -0.000100   0.000099   0.000098  0.0000019  0.0000108    0.000047    0.000039
+2005   9  14  53627   0.050130   0.421598  -0.6003794   0.0001037   0.000280  -0.000050   0.000096   0.000095  0.0000007  0.0000108    0.000054    0.000052
+2005   9  15  53628   0.050138   0.421216  -0.6005956   0.0003667   0.000213  -0.000054   0.000096   0.000096  0.0000007  0.0000108    0.000051    0.000044
+2005   9  16  53629   0.050914   0.421297  -0.6011442   0.0007402   0.000159  -0.000076   0.000096   0.000095  0.0000007  0.0000109    0.000047    0.000043
+2005   9  17  53630   0.051877   0.421558  -0.6020713   0.0010809   0.000137  -0.000076   0.000095   0.000094  0.0000006  0.0000113    0.000043    0.000035
+2005   9  18  53631   0.052502   0.421860  -0.6032782   0.0012563   0.000136  -0.000061   0.000093   0.000091  0.0000006  0.0000118    0.000039    0.000033
+2005   9  19  53632   0.052625   0.421831  -0.6045730   0.0012723   0.000158  -0.000041   0.000091   0.000090  0.0000006  0.0000114    0.000039    0.000033
+2005   9  20  53633   0.052664   0.421084  -0.6057816   0.0011059   0.000178  -0.000038   0.000090   0.000089  0.0000007  0.0000108    0.000044    0.000035
+2005   9  21  53634   0.053004   0.420292  -0.6067479   0.0008191   0.000213  -0.000057   0.000090   0.000088  0.0000007  0.0000107    0.000058    0.000049
+2005   9  22  53635   0.053622   0.419471  -0.6073916   0.0005039   0.000270  -0.000059   0.000088   0.000087  0.0000006  0.0000107    0.000043    0.000037
+2005   9  23  53636   0.054357   0.418920  -0.6077240   0.0002018   0.000296  -0.000032   0.000088   0.000087  0.0000006  0.0000107    0.000043    0.000037
+2005   9  24  53637   0.055284   0.418344  -0.6077812  -0.0000394   0.000284  -0.000008   0.000091   0.000089  0.0000007  0.0000113    0.000048    0.000040
+2005   9  25  53638   0.056133   0.417773  -0.6076526  -0.0001723   0.000260  -0.000036   0.000094   0.000092  0.0000006  0.0000121    0.000045    0.000038
+2005   9  26  53639   0.056677   0.417374  -0.6074639  -0.0001616   0.000228  -0.000072   0.000095   0.000094  0.0000006  0.0000117    0.000044    0.000037
+2005   9  27  53640   0.057071   0.417068  -0.6073137  -0.0001204   0.000189  -0.000032   0.000094   0.000093  0.0000006  0.0000109    0.000050    0.000042
+2005   9  28  53641   0.057873   0.416826  -0.6072222  -0.0000052   0.000165   0.000002   0.000100   0.000098  0.0000163  0.0000109    0.000041    0.000035
+2005   9  29  53642   0.058579   0.417012  -0.6072828   0.0001920   0.000147   0.000027   0.000102   0.000099  0.0000275  0.0000109    0.000029    0.000025
+2005   9  30  53643   0.058841   0.417293  -0.6075862   0.0003786   0.000225   0.000023   0.000100   0.000098  0.0000070  0.0000110    0.000101    0.000087
+2005  10   1  53644   0.058690   0.417226  -0.6081126   0.0005517   0.000241   0.000010   0.000105   0.000101  0.0000015  0.0000119    0.000128    0.000111
+2005  10   2  53645   0.058662   0.416986  -0.6087928   0.0007151   0.000227  -0.000004   0.000112   0.000107  0.0000014  0.0000124    0.000128    0.000111
+2005  10   3  53646   0.058892   0.416480  -0.6095324   0.0007690   0.000217  -0.000021   0.000113   0.000108  0.0000014  0.0000118    0.000128    0.000112
+2005  10   4  53647   0.059821   0.415782  -0.6102366   0.0007061   0.000209  -0.000039   0.000109   0.000105  0.0000013  0.0000111    0.000129    0.000113
+2005  10   5  53648   0.060857   0.415439  -0.6108370   0.0005513   0.000232  -0.000044   0.000107   0.000104  0.0000287  0.0000110    0.000135    0.000126
+2005  10   6  53649   0.062153   0.415361  -0.6113220   0.0004262   0.000262  -0.000043   0.000107   0.000103  0.0000486  0.0000110    0.000143    0.000142
+2005  10   7  53650   0.063329   0.415708  -0.6116957   0.0002864   0.000308  -0.000025   0.000105   0.000101  0.0000121  0.0000112    0.000097    0.000094
+2005  10   8  53651   0.063987   0.415741  -0.6119368   0.0001175   0.000316  -0.000026   0.000109   0.000104  0.0000089  0.0000129    0.000086    0.000083
+2005  10   9  53652   0.064457   0.415232  -0.6120248   0.0000312   0.000305  -0.000032   0.000119   0.000115  0.0000145  0.0000134    0.000093    0.000093
+2005  10  10  53653   0.065059   0.414458  -0.6120247   0.0000253   0.000290  -0.000028   0.000122   0.000118  0.0000109  0.0000118    0.000101    0.000102
+2005  10  11  53654   0.065190   0.413759  -0.6120541   0.0000821   0.000270  -0.000016   0.000118   0.000114  0.0000036  0.0000110    0.000109    0.000112
+2005  10  12  53655   0.065325   0.412863  -0.6122316   0.0002781   0.000321  -0.000010   0.000114   0.000111  0.0000192  0.0000109    0.000053    0.000065
+2005  10  13  53656   0.065722   0.412317  -0.6126448   0.0005572   0.000354   0.000052   0.000117   0.000115  0.0000313  0.0000111    0.000060    0.000065
+2005  10  14  53657   0.066317   0.411150  -0.6133547   0.0008769   0.000371   0.000123   0.000117   0.000117  0.0000076  0.0000113    0.000090    0.000082
+2005  10  15  53658   0.066956   0.409975  -0.6143935   0.0011063   0.000322   0.000202   0.000118   0.000118  0.0000074  0.0000120    0.000103    0.000093
+2005  10  16  53659   0.067919   0.408778  -0.6155580   0.0011757   0.000249   0.000267   0.000128   0.000128  0.0000106  0.0000128    0.000109    0.000101
+2005  10  17  53660   0.069310   0.408189  -0.6167040   0.0011133   0.000182   0.000308   0.000129   0.000129  0.0000074  0.0000122    0.000115    0.000109
+2005  10  18  53661   0.070336   0.408067  -0.6177432   0.0009424   0.000125   0.000327   0.000122   0.000123  0.0000023  0.0000113    0.000121    0.000117
+2005  10  19  53662   0.070956   0.407792  -0.6185777   0.0007127   0.000120  -0.000024   0.000120   0.000119  0.0000125  0.0000112    0.000092    0.000090
+2005  10  20  53663   0.070947   0.407406  -0.6191550   0.0004777   0.000198  -0.000170   0.000122   0.000121  0.0000206  0.0000113    0.000088    0.000086
+2005  10  21  53664   0.071052   0.407043  -0.6195043   0.0002865   0.000304  -0.000225   0.000123   0.000122  0.0000059  0.0000114    0.000095    0.000092
+2005  10  22  53665   0.071004   0.406480  -0.6197400   0.0001597   0.000351  -0.000250   0.000126   0.000124  0.0000114  0.0000122    0.000097    0.000093
+2005  10  23  53666   0.070955   0.405793  -0.6198702   0.0001524   0.000374  -0.000250   0.000126   0.000124  0.0000146  0.0000132    0.000097    0.000093
+2005  10  24  53667   0.070873   0.405134  -0.6200166   0.0002123   0.000390  -0.000230   0.000121   0.000118  0.0000094  0.0000127    0.000097    0.000094
+2005  10  25  53668   0.070859   0.404586  -0.6202482   0.0002553   0.000396  -0.000192   0.000116   0.000114  0.0000024  0.0000119    0.000096    0.000094
+2005  10  26  53669   0.070582   0.403847  -0.6205327   0.0003768   0.000401  -0.000172   0.000114   0.000112  0.0000115  0.0000118    0.000095    0.000091
+2005  10  27  53670   0.070077   0.402997  -0.6209629   0.0005349   0.000396  -0.000150   0.000114   0.000112  0.0000191  0.0000117    0.000093    0.000087
+2005  10  28  53671   0.069788   0.402210  -0.6216315   0.0007187   0.000383  -0.000126   0.000114   0.000112  0.0000050  0.0000118    0.000091    0.000083
+2005  10  29  53672   0.069519   0.401693  -0.6225010   0.0009088   0.000343  -0.000090   0.000117   0.000115  0.0000012  0.0000126    0.000089    0.000083
+2005  10  30  53673   0.069378   0.400616  -0.6235120   0.0010527   0.000296  -0.000056   0.000112   0.000111  0.0000012  0.0000124    0.000085    0.000084
+2005  10  31  53674   0.070086   0.399749  -0.6245903   0.0010938   0.000251  -0.000031   0.000102   0.000102  0.0000012  0.0000112    0.000082    0.000086
+2005  11   1  53675   0.071283   0.399024  -0.6256438   0.0009933   0.000214  -0.000017   0.000100   0.000100  0.0000012  0.0000110    0.000078    0.000087
+2005  11   2  53676   0.072283   0.398464  -0.6265776   0.0008305   0.000184  -0.000071   0.000101   0.000101  0.0000102  0.0000110    0.000103    0.000094
+2005  11   3  53677   0.072910   0.397765  -0.6273045   0.0006041   0.000166  -0.000145   0.000102   0.000103  0.0000168  0.0000110    0.000136    0.000102
+2005  11   4  53678   0.073090   0.397175  -0.6277935   0.0003794   0.000260  -0.000225   0.000100   0.000102  0.0000052  0.0000112    0.000123    0.000112
+2005  11   5  53679   0.073046   0.396600  -0.6281021   0.0002020   0.000313  -0.000209   0.000103   0.000105  0.0000096  0.0000118    0.000113    0.000112
+2005  11   6  53680   0.072889   0.396170  -0.6282757   0.0001449   0.000338  -0.000154   0.000105   0.000108  0.0000102  0.0000119    0.000108    0.000110
+2005  11   7  53681   0.072663   0.395576  -0.6284273   0.0002397   0.000359  -0.000096   0.000101   0.000104  0.0000061  0.0000109    0.000104    0.000107
+2005  11   8  53682   0.072471   0.395201  -0.6287305   0.0004353   0.000373  -0.000034   0.000096   0.000100  0.0000020  0.0000101    0.000099    0.000104
+2005  11   9  53683   0.072468   0.394995  -0.6293320   0.0007833   0.000372  -0.000140   0.000095   0.000098  0.0000012  0.0000099    0.000093    0.000085
+2005  11  10  53684   0.072165   0.394729  -0.6302874   0.0011357   0.000328  -0.000212   0.000097   0.000098  0.0000012  0.0000100    0.000098    0.000075
+2005  11  11  53685   0.071508   0.394033  -0.6315504   0.0013616   0.000314  -0.000195   0.000097   0.000098  0.0000013  0.0000102    0.000124    0.000109
+2005  11  12  53686   0.070799   0.393440  -0.6329956   0.0014789   0.000292  -0.000159   0.000100   0.000101  0.0000129  0.0000108    0.000121    0.000113
+2005  11  13  53687   0.070052   0.393173  -0.6344626   0.0014214   0.000264  -0.000124   0.000104   0.000105  0.0000119  0.0000118    0.000105    0.000101
+2005  11  14  53688   0.069269   0.392797  -0.6358033   0.0012572   0.000242  -0.000090   0.000101   0.000102  0.0000060  0.0000116    0.000089    0.000089
+2005  11  15  53689   0.069004   0.392265  -0.6369069   0.0009585   0.000225  -0.000057   0.000096   0.000097  0.0000018  0.0000108    0.000074    0.000077
+2005  11  16  53690   0.069560   0.392123  -0.6377215   0.0006865   0.000235  -0.000150   0.000094   0.000095  0.0000082  0.0000105    0.000047    0.000047
+2005  11  17  53691   0.069753   0.392771  -0.6382643   0.0004600   0.000312  -0.000160   0.000095   0.000096  0.0000138  0.0000104    0.000067    0.000064
+2005  11  18  53692   0.069317   0.392820  -0.6385943   0.0002500   0.000397  -0.000109   0.000094   0.000095  0.0000042  0.0000105    0.000072    0.000070
+2005  11  19  53693   0.068925   0.392331  -0.6387834   0.0001957   0.000399  -0.000098   0.000098   0.000098  0.0000069  0.0000111    0.000071    0.000072
+2005  11  20  53694   0.068060   0.392155  -0.6390013   0.0002951   0.000364  -0.000108   0.000114   0.000114  0.0000108  0.0000116    0.000071    0.000076
+2005  11  21  53695   0.066890   0.391593  -0.6393414   0.0004165   0.000321  -0.000123   0.000123   0.000123  0.0000081  0.0000111    0.000071    0.000080
+2005  11  22  53696   0.065903   0.390725  -0.6398116   0.0005476   0.000272  -0.000141   0.000117   0.000117  0.0000030  0.0000105    0.000072    0.000084
+2005  11  23  53697   0.065250   0.389481  -0.6404090   0.0006808   0.000274  -0.000190   0.000114   0.000114  0.0000013  0.0000104    0.000076    0.000077
+2005  11  24  53698   0.065333   0.388532  -0.6411463   0.0007866   0.000280  -0.000261   0.000116   0.000116  0.0000027  0.0000104    0.000184    0.000168
+2005  11  25  53699   0.066146   0.388094  -0.6420246   0.0009315   0.000284  -0.000333   0.000118   0.000118  0.0000050  0.0000104    0.000329    0.000297
+2005  11  26  53700   0.067036   0.388250  -0.6430174   0.0010409   0.000223  -0.000293   0.000121   0.000121  0.0000073  0.0000111    0.000283    0.000255
+2005  11  27  53701   0.067659   0.388214  -0.6440685   0.0010316   0.000170  -0.000248   0.000126   0.000125  0.0000107  0.0000119    0.000237    0.000213
+2005  11  28  53702   0.068504   0.388127  -0.6450775   0.0009387   0.000128  -0.000199   0.000125   0.000123  0.0000086  0.0000115    0.000191    0.000171
+2005  11  29  53703   0.068943   0.388623  -0.6459525   0.0007693   0.000095  -0.000149   0.000121   0.000120  0.0000036  0.0000109    0.000146    0.000129
+2005  11  30  53704   0.069162   0.389116  -0.6466359   0.0005623   0.000239  -0.000138   0.000117   0.000116  0.0000087  0.0000108    0.000064    0.000058
+2005  12   1  53705   0.068901   0.389507  -0.6470961   0.0003264   0.000307  -0.000195   0.000117   0.000116  0.0000128  0.0000109    0.000053    0.000051
+2005  12   2  53706   0.068522   0.389806  -0.6473551   0.0001954   0.000334  -0.000269   0.000118   0.000117  0.0000037  0.0000110    0.000068    0.000066
+2005  12   3  53707   0.067711   0.390299  -0.6475013   0.0001201   0.000351  -0.000276   0.000124   0.000123  0.0000075  0.0000116    0.000073    0.000072
+2005  12   4  53708   0.066998   0.390639  -0.6476272   0.0001053   0.000358  -0.000255   0.000132   0.000132  0.0000113  0.0000140    0.000074    0.000074
+2005  12   5  53709   0.066351   0.391019  -0.6477629   0.0001902   0.000353  -0.000231   0.000130   0.000132  0.0000079  0.0000146    0.000075    0.000077
+2005  12   6  53710   0.066103   0.391118  -0.6480157   0.0004018   0.000339  -0.000204   0.000122   0.000126  0.0000021  0.0000138    0.000076    0.000079
+2005  12   7  53711   0.066112   0.391130  -0.6485314   0.0006873   0.000218  -0.000140   0.000120   0.000123  0.0000105  0.0000138    0.000044    0.000045
+2005  12   8  53712   0.066162   0.390980  -0.6493129   0.0008586   0.000140  -0.000098   0.000120   0.000121  0.0000174  0.0000139    0.000041    0.000040
+2005  12   9  53713   0.065957   0.390598  -0.6502607   0.0009605   0.000181  -0.000154   0.000120   0.000120  0.0000045  0.0000139    0.000074    0.000066
+2005  12  10  53714   0.065308   0.389980  -0.6512478   0.0009365   0.000200  -0.000166   0.000126   0.000128  0.0000056  0.0000149    0.000084    0.000075
+2005  12  11  53715   0.064264   0.389266  -0.6521310   0.0008287   0.000207  -0.000154   0.000129   0.000131  0.0000092  0.0000157    0.000084    0.000075
+2005  12  12  53716   0.063441   0.388398  -0.6528808   0.0006640   0.000224  -0.000148   0.000123   0.000125  0.0000072  0.0000148    0.000082    0.000076
+2005  12  13  53717   0.063063   0.388017  -0.6534581   0.0004528   0.000251  -0.000145   0.000117   0.000120  0.0000030  0.0000140    0.000082    0.000076
+2005  12  14  53718   0.063336   0.387701  -0.6537988   0.0002386   0.000224  -0.000178   0.000116   0.000118  0.0000105  0.0000138    0.000102    0.000081
+2005  12  15  53719   0.064093   0.387877  -0.6539467   0.0000899   0.000243  -0.000225   0.000115   0.000116  0.0000164  0.0000138    0.000050    0.000045
+2005  12  16  53720   0.064696   0.388285  -0.6539997   0.0000240   0.000324  -0.000167   0.000114   0.000114  0.0000048  0.0000139    0.000067    0.000057
+2005  12  17  53721   0.064980   0.388962  -0.6540436   0.0000578   0.000376  -0.000179   0.000120   0.000120  0.0000086  0.0000147    0.000084    0.000071
+2005  12  18  53722   0.065073   0.389386  -0.6541256   0.0001440   0.000404  -0.000230   0.000135   0.000134  0.0000101  0.0000136    0.000088    0.000079
+2005  12  19  53723   0.064785   0.389446  -0.6543042   0.0002568   0.000420  -0.000279   0.000144   0.000142  0.0000067  0.0000112    0.000093    0.000087
+2005  12  20  53724   0.063821   0.389425  -0.6546562   0.0004442   0.000423  -0.000323   0.000141   0.000140  0.0000029  0.0000106    0.000097    0.000095
+2005  12  21  53725   0.062720   0.388692  -0.6552276   0.0006557   0.000336  -0.000236   0.000139   0.000141  0.0000140  0.0000107    0.000081    0.000086
+2005  12  22  53726   0.062383   0.387971  -0.6559753   0.0008231   0.000284  -0.000217   0.000141   0.000143  0.0000224  0.0000106    0.000107    0.000104
+2005  12  23  53727   0.061756   0.387773  -0.6568284   0.0008985   0.000248  -0.000229   0.000143   0.000144  0.0000060  0.0000107    0.000147    0.000132
+2005  12  24  53728   0.061155   0.387403  -0.6577519   0.0009212   0.000218  -0.000242   0.000148   0.000148  0.0000016  0.0000115    0.000154    0.000139
+2005  12  25  53729   0.060571   0.387327  -0.6586876   0.0008758   0.000195  -0.000254   0.000150   0.000147  0.0000017  0.0000130    0.000149    0.000137
+2005  12  26  53730   0.059437   0.387400  -0.6595567   0.0008211   0.000180  -0.000269   0.000143   0.000140  0.0000017  0.0000133    0.000144    0.000136
+2005  12  27  53731   0.058120   0.387252  -0.6602773   0.0006399   0.000174  -0.000283   0.000139   0.000136  0.0000018  0.0000126    0.000138    0.000134
+2005  12  28  53732   0.057008   0.386666  -0.6607830   0.0003740   0.000177  -0.000297   0.000134   0.000134  0.0000019  0.0000125    0.000133    0.000133
+2005  12  29  53733   0.055866   0.385859  -0.6610506   0.0001553   0.000188  -0.000296   0.000134   0.000134  0.0000018  0.0000125    0.000120    0.000118
+2005  12  30  53734   0.054812   0.385047  -0.6611296   0.0000123   0.000205  -0.000288   0.000135   0.000134  0.0000017  0.0000126    0.000105    0.000100
+2005  12  31  53735   0.053717   0.384245  -0.6611333  -0.0000016   0.000228  -0.000287   0.000140   0.000141  0.0000017  0.0000135    0.000098    0.000091
+2006   1   1  53736   0.052622   0.383685   0.3388053   0.0001436   0.000252  -0.000287   0.000078   0.000077  0.0000013  0.0000154    0.000063    0.000057
+2006   1   2  53737   0.051697   0.383326   0.3385714   0.0003772   0.000274  -0.000284   0.000079   0.000078  0.0000013  0.0000151    0.000061    0.000054
+2006   1   3  53738   0.050889   0.383056   0.3381013   0.0006253   0.000291  -0.000277   0.000076   0.000075  0.0000013  0.0000138    0.000059    0.000050
+2006   1   4  53739   0.050099   0.382780   0.3374012   0.0008031   0.000303  -0.000267   0.000073   0.000073  0.0000014  0.0000136    0.000056    0.000047
+2006   1   5  53740   0.049501   0.382403   0.3365369   0.0009315   0.000234  -0.000271   0.000071   0.000072  0.0000020  0.0000136    0.000076    0.000057
+2006   1   6  53741   0.049406   0.382135   0.3355853   0.0009404   0.000218  -0.000251   0.000074   0.000074  0.0000032  0.0000138    0.000080    0.000059
+2006   1   7  53742   0.049533   0.382004   0.3346744   0.0008423   0.000227  -0.000223   0.000077   0.000075  0.0000047  0.0000146    0.000076    0.000057
+2006   1   8  53743   0.049461   0.381963   0.3339456   0.0005844   0.000232  -0.000199   0.000076   0.000074  0.0000043  0.0000158    0.000072    0.000055
+2006   1   9  53744   0.049453   0.381659   0.3334776   0.0003337   0.000235  -0.000181   0.000070   0.000069  0.0000029  0.0000155    0.000068    0.000053
+2006   1  10  53745   0.049529   0.381488   0.3332791   0.0000867   0.000236  -0.000170   0.000066   0.000065  0.0000016  0.0000146    0.000064    0.000051
+2006   1  11  53746   0.049196   0.381420   0.3333079  -0.0001256   0.000204  -0.000189   0.000065   0.000064  0.0000065  0.0000143    0.000064    0.000052
+2006   1  12  53747   0.048702   0.381000   0.3335044  -0.0002383   0.000165  -0.000219   0.000066   0.000064  0.0000103  0.0000144    0.000064    0.000053
+2006   1  13  53748   0.048506   0.380732   0.3337777  -0.0002628   0.000129  -0.000252   0.000065   0.000064  0.0000034  0.0000146    0.000065    0.000055
+2006   1  14  53749   0.048645   0.380272   0.3339995  -0.0001406   0.000105  -0.000288   0.000067   0.000066  0.0000063  0.0000159    0.000088    0.000064
+2006   1  15  53750   0.049186   0.380122   0.3340951  -0.0000166   0.000090  -0.000323   0.000070   0.000068  0.0000074  0.0000156    0.000120    0.000077
+2006   1  16  53751   0.049940   0.380001   0.3340757   0.0000643   0.000081  -0.000348   0.000068   0.000066  0.0000055  0.0000136    0.000152    0.000089
+2006   1  17  53752   0.050391   0.380281   0.3339359   0.0002024   0.000076  -0.000365   0.000067   0.000064  0.0000034  0.0000129    0.000184    0.000102
+2006   1  18  53753   0.050545   0.380722   0.3336386   0.0004290   0.000209  -0.000313   0.000064   0.000062  0.0000014  0.0000128    0.000072    0.000049
+2006   1  19  53754   0.050709   0.380983   0.3331652   0.0005728   0.000291  -0.000266   0.000063   0.000062  0.0000011  0.0000125    0.000056    0.000064
+2006   1  20  53755   0.050413   0.381349   0.3325532   0.0005883   0.000195  -0.000183   0.000065   0.000063  0.0000012  0.0000126    0.000076    0.000066
+2006   1  21  53756   0.050196   0.381449   0.3318738   0.0006500   0.000143  -0.000164   0.000065   0.000063  0.0000014  0.0000135    0.000079    0.000062
+2006   1  22  53757   0.050135   0.381682   0.3311910   0.0006579   0.000126  -0.000179   0.000071   0.000068  0.0000016  0.0000144    0.000076    0.000060
+2006   1  23  53758   0.050181   0.381064   0.3305532   0.0006163   0.000109  -0.000205   0.000073   0.000072  0.0000019  0.0000140    0.000074    0.000058
+2006   1  24  53759   0.050251   0.380585   0.3299926   0.0005058   0.000094  -0.000239   0.000071   0.000070  0.0000021  0.0000133    0.000070    0.000056
+2006   1  25  53760   0.050138   0.380668   0.3295201   0.0004054   0.000035  -0.000283   0.000070   0.000069  0.0000113  0.0000130    0.000079    0.000075
+2006   1  26  53761   0.050081   0.380913   0.3291130   0.0003900   0.000050  -0.000338   0.000071   0.000069  0.0000177  0.0000130    0.000052    0.000049
+2006   1  27  53762   0.050282   0.381029   0.3287214   0.0004101   0.000169  -0.000367   0.000069   0.000068  0.0000047  0.0000131    0.000056    0.000043
+2006   1  28  53763   0.050671   0.381352   0.3282799   0.0005002   0.000201  -0.000372   0.000070   0.000069  0.0000051  0.0000138    0.000057    0.000043
+2006   1  29  53764   0.051114   0.381721   0.3277077   0.0006900   0.000190  -0.000368   0.000074   0.000071  0.0000093  0.0000145    0.000052    0.000041
+2006   1  30  53765   0.051452   0.382021   0.3268814   0.0010016   0.000175  -0.000356   0.000072   0.000070  0.0000071  0.0000140    0.000047    0.000038
+2006   1  31  53766   0.051536   0.382576   0.3257300   0.0013221   0.000157  -0.000339   0.000067   0.000066  0.0000020  0.0000133    0.000042    0.000036
+2006   2   1  53767   0.051300   0.383349   0.3242966   0.0015259   0.000071  -0.000267   0.000065   0.000064  0.0000044  0.0000131    0.000049    0.000047
+2006   2   2  53768   0.050685   0.384036   0.3227220   0.0015760   0.000013  -0.000258   0.000063   0.000063  0.0000069  0.0000131    0.000022    0.000022
+2006   2   3  53769   0.050150   0.384489   0.3211761   0.0014871   0.000032  -0.000304   0.000062   0.000062  0.0000025  0.0000131    0.000051    0.000039
+2006   2   4  53770   0.050106   0.384822   0.3197823   0.0012803   0.000073  -0.000317   0.000068   0.000068  0.0000047  0.0000138    0.000058    0.000044
+2006   2   5  53771   0.050253   0.384878   0.3186417   0.0009740   0.000118  -0.000314   0.000068   0.000067  0.0000094  0.0000142    0.000049    0.000039
+2006   2   6  53772   0.050916   0.384684   0.3178029   0.0006942   0.000168  -0.000311   0.000063   0.000062  0.0000073  0.0000132    0.000040    0.000034
+2006   2   7  53773   0.051152   0.384790   0.3172219   0.0004507   0.000219  -0.000307   0.000058   0.000058  0.0000019  0.0000129    0.000031    0.000029
+2006   2   8  53774   0.051417   0.384591   0.3167977   0.0003548   0.000172  -0.000286   0.000056   0.000057  0.0000009  0.0000127    0.000027    0.000026
+2006   2   9  53775   0.052648   0.384563   0.3164374   0.0003725   0.000170  -0.000236   0.000059   0.000059  0.0000010  0.0000125    0.000052    0.000049
+2006   2  10  53776   0.053795   0.384748   0.3160645   0.0004150   0.000274  -0.000243   0.000060   0.000060  0.0000011  0.0000127    0.000059    0.000051
+2006   2  11  53777   0.055017   0.384848   0.3156139   0.0005636   0.000285  -0.000248   0.000062   0.000061  0.0000076  0.0000134    0.000054    0.000046
+2006   2  12  53778   0.056346   0.384750   0.3150006   0.0007010   0.000248  -0.000251   0.000063   0.000062  0.0000114  0.0000135    0.000049    0.000042
+2006   2  13  53779   0.057302   0.384409   0.3142256   0.0008254   0.000207  -0.000261   0.000060   0.000060  0.0000079  0.0000123    0.000043    0.000038
+2006   2  14  53780   0.058101   0.384120   0.3133388   0.0009065   0.000166  -0.000275   0.000057   0.000057  0.0000021  0.0000116    0.000038    0.000034
+2006   2  15  53781   0.058961   0.383929   0.3123758   0.0009811   0.000105  -0.000324   0.000057   0.000057  0.0000124  0.0000118    0.000051    0.000047
+2006   2  16  53782   0.060350   0.383891   0.3113446   0.0010617   0.000147  -0.000359   0.000058   0.000058  0.0000207  0.0000118    0.000065    0.000057
+2006   2  17  53783   0.061976   0.384296   0.3102551   0.0011003   0.000221  -0.000384   0.000057   0.000058  0.0000056  0.0000118    0.000078    0.000065
+2006   2  18  53784   0.064191   0.384840   0.3091543   0.0011023   0.000239  -0.000416   0.000059   0.000060  0.0000051  0.0000128    0.000075    0.000063
+2006   2  19  53785   0.065779   0.385239   0.3080913   0.0010044   0.000234  -0.000443   0.000065   0.000065  0.0000082  0.0000137    0.000067    0.000058
+2006   2  20  53786   0.066769   0.385083   0.3071404   0.0008445   0.000226  -0.000459   0.000067   0.000066  0.0000061  0.0000129    0.000058    0.000052
+2006   2  21  53787   0.067402   0.384872   0.3063748   0.0006312   0.000214  -0.000466   0.000063   0.000063  0.0000019  0.0000121    0.000050    0.000046
+2006   2  22  53788   0.067385   0.384547   0.3058200   0.0004554   0.000203  -0.000354   0.000064   0.000065  0.0000102  0.0000121    0.000057    0.000056
+2006   2  23  53789   0.067629   0.384092   0.3054214   0.0003624   0.000190  -0.000210   0.000066   0.000065  0.0000167  0.0000121    0.000068    0.000069
+2006   2  24  53790   0.068008   0.383822   0.3050461   0.0004344   0.000220  -0.000285   0.000065   0.000064  0.0000046  0.0000122    0.000058    0.000054
+2006   2  25  53791   0.068856   0.383343   0.3045182   0.0006563   0.000187  -0.000303   0.000067   0.000065  0.0000063  0.0000127    0.000052    0.000045
+2006   2  26  53792   0.070143   0.383046   0.3037164   0.0010180   0.000126  -0.000278   0.000066   0.000063  0.0000170  0.0000139    0.000050    0.000042
+2006   2  27  53793   0.071359   0.383031   0.3025213   0.0014250   0.000069  -0.000259   0.000061   0.000058  0.0000141  0.0000140    0.000048    0.000038
+2006   2  28  53794   0.071987   0.383274   0.3009021   0.0017759   0.000018  -0.000245   0.000058   0.000056  0.0000034  0.0000134    0.000046    0.000035
+2006   3   1  53795   0.072352   0.383164   0.2989804   0.0019722   0.000058  -0.000256   0.000057   0.000056  0.0000065  0.0000133    0.000053    0.000042
+2006   3   2  53796   0.073599   0.383385   0.2970019   0.0019288   0.000131  -0.000277   0.000058   0.000056  0.0000107  0.0000130    0.000063    0.000052
+2006   3   3  53797   0.074878   0.383503   0.2951869   0.0016972   0.000208  -0.000300   0.000059   0.000057  0.0000035  0.0000132    0.000073    0.000062
+2006   3   4  53798   0.076839   0.383254   0.2936031   0.0014114   0.000199  -0.000303   0.000061   0.000058  0.0000052  0.0000140    0.000067    0.000058
+2006   3   5  53799   0.078668   0.383598   0.2923287   0.0010613   0.000157  -0.000298   0.000065   0.000061  0.0000088  0.0000145    0.000056    0.000049
+2006   3   6  53800   0.079905   0.383722   0.2914006   0.0007676   0.000117  -0.000293   0.000065   0.000063  0.0000065  0.0000138    0.000044    0.000041
+2006   3   7  53801   0.080675   0.383571   0.2907607   0.0005568   0.000076  -0.000288   0.000061   0.000059  0.0000017  0.0000129    0.000033    0.000032
+2006   3   8  53802   0.081177   0.383055   0.2903052   0.0004375   0.000139  -0.000295   0.000061   0.000059  0.0000065  0.0000127    0.000042    0.000039
+2006   3   9  53803   0.081083   0.382680   0.2899324   0.0003389   0.000224  -0.000305   0.000064   0.000061  0.0000108  0.0000125    0.000056    0.000050
+2006   3  10  53804   0.080480   0.382528   0.2895677   0.0003606   0.000300  -0.000318   0.000064   0.000062  0.0000035  0.0000127    0.000071    0.000061
+2006   3  11  53805   0.080381   0.382603   0.2891726   0.0004661   0.000281  -0.000325   0.000066   0.000064  0.0000044  0.0000138    0.000068    0.000059
+2006   3  12  53806   0.080638   0.382580   0.2886730   0.0006049   0.000218  -0.000332   0.000070   0.000067  0.0000059  0.0000148    0.000060    0.000053
+2006   3  13  53807   0.081243   0.381767   0.2879919   0.0007827   0.000147  -0.000338   0.000068   0.000066  0.0000043  0.0000142    0.000051    0.000046
+2006   3  14  53808   0.082286   0.380999   0.2871208   0.0009276   0.000071  -0.000344   0.000064   0.000062  0.0000018  0.0000134    0.000043    0.000039
+2006   3  15  53809   0.083525   0.380434   0.2861154   0.0010413   0.000041  -0.000376   0.000064   0.000063  0.0000106  0.0000135    0.000058    0.000053
+2006   3  16  53810   0.085443   0.379751   0.2850597   0.0010519   0.000025  -0.000411   0.000067   0.000065  0.0000175  0.0000135    0.000080    0.000073
+2006   3  17  53811   0.087944   0.379390   0.2840359   0.0010028   0.000015  -0.000441   0.000067   0.000065  0.0000059  0.0000135    0.000102    0.000092
+2006   3  18  53812   0.089769   0.379215   0.2830951   0.0009228   0.000013  -0.000404   0.000069   0.000066  0.0000078  0.0000143    0.000099    0.000088
+2006   3  19  53813   0.091273   0.378852   0.2822202   0.0008144   0.000018  -0.000341   0.000066   0.000063  0.0000100  0.0000138    0.000086    0.000074
+2006   3  20  53814   0.092703   0.378461   0.2814736   0.0006529   0.000031  -0.000278   0.000059   0.000056  0.0000069  0.0000119    0.000073    0.000061
+2006   3  21  53815   0.093839   0.378145   0.2808846   0.0005076   0.000051  -0.000216   0.000055   0.000054  0.0000023  0.0000112    0.000060    0.000048
+2006   3  22  53816   0.095104   0.378009   0.2803873   0.0004682  -0.000211  -0.000381   0.000055   0.000053  0.0000077  0.0000110    0.000053    0.000066
+2006   3  23  53817   0.096129   0.377847   0.2799038   0.0005042  -0.000086  -0.000373   0.000056   0.000054  0.0000122  0.0000110    0.000056    0.000066
+2006   3  24  53818   0.097254   0.377327   0.2793266   0.0006643   0.000169  -0.000296   0.000055   0.000053  0.0000037  0.0000112    0.000061    0.000059
+2006   3  25  53819   0.097957   0.377152   0.2785150   0.0009774   0.000201  -0.000301   0.000057   0.000054  0.0000055  0.0000117    0.000057    0.000053
+2006   3  26  53820   0.098552   0.376947   0.2773368   0.0013838   0.000145  -0.000332   0.000057   0.000054  0.0000065  0.0000122    0.000050    0.000047
+2006   3  27  53821   0.099233   0.376735   0.2758044   0.0016900   0.000079  -0.000360   0.000055   0.000052  0.0000042  0.0000116    0.000043    0.000041
+2006   3  28  53822   0.099964   0.376213   0.2739669   0.0019627   0.000008  -0.000386   0.000051   0.000049  0.0000013  0.0000108    0.000036    0.000035
+2006   3  29  53823   0.100822   0.375833   0.2719036   0.0021102  -0.000110  -0.000292   0.000050   0.000048  0.0000207  0.0000105    0.000880    0.000184
+2006   3  30  53824   0.101412   0.375321   0.2698537   0.0019671  -0.000140  -0.000214   0.000051   0.000048  0.0000054  0.0000105    0.000302    0.000084
+2006   3  31  53825   0.101958   0.374866   0.2680116   0.0016735  -0.000035  -0.000265   0.000050   0.000048  0.0000020  0.0000106    0.000060    0.000067
+2006   4   1  53826   0.102675   0.374360   0.2665139   0.0012983   0.000000  -0.000271   0.000052   0.000050  0.0000057  0.0000112    0.000064    0.000071
+2006   4   2  53827   0.103267   0.373786   0.2653628   0.0009307   0.000004  -0.000253   0.000057   0.000054  0.0000128  0.0000116    0.000057    0.000060
+2006   4   3  53828   0.103592   0.373292   0.2645438   0.0006716   0.000014  -0.000241   0.000059   0.000058  0.0000103  0.0000111    0.000050    0.000049
+2006   4   4  53829   0.104006   0.372993   0.2639552   0.0005566   0.000029  -0.000235   0.000056   0.000055  0.0000027  0.0000107    0.000043    0.000039
+2006   4   5  53830   0.104443   0.372679   0.2634220   0.0005466   0.000064  -0.000285   0.000056   0.000055  0.0000052  0.0000107    0.000048    0.000045
+2006   4   6  53831   0.104431   0.372190   0.2628447   0.0006028   0.000101  -0.000349   0.000057   0.000057  0.0000080  0.0000107    0.000055    0.000055
+2006   4   7  53832   0.104268   0.372022   0.2621860   0.0006993   0.000132  -0.000408   0.000056   0.000056  0.0000029  0.0000110    0.000063    0.000065
+2006   4   8  53833   0.104031   0.371765   0.2614275   0.0008731   0.000137  -0.000411   0.000057   0.000058  0.0000043  0.0000117    0.000065    0.000066
+2006   4   9  53834   0.104244   0.371135   0.2604346   0.0011002   0.000125  -0.000388   0.000055   0.000056  0.0000048  0.0000116    0.000065    0.000064
+2006   4  10  53835   0.104468   0.370664   0.2592682   0.0012334   0.000104  -0.000355   0.000049   0.000049  0.0000030  0.0000103    0.000066    0.000062
+2006   4  11  53836   0.103946   0.369820   0.2580344   0.0012497   0.000074  -0.000316   0.000047   0.000048  0.0000011  0.0000097    0.000066    0.000059
+2006   4  12  53837   0.103560   0.368858   0.2567630   0.0012503   0.000044  -0.000251   0.000047   0.000047  0.0000010  0.0000097    0.000144    0.000187
+2006   4  13  53838   0.103346   0.368344   0.2555255   0.0012388   0.000059  -0.000267   0.000046   0.000047  0.0000012  0.0000096    0.000107    0.000124
+2006   4  14  53839   0.103194   0.367755   0.2543967   0.0011070   0.000031  -0.000259   0.000047   0.000048  0.0000012  0.0000098    0.000083    0.000083
+2006   4  15  53840   0.102485   0.367269   0.2534155   0.0008954  -0.000017  -0.000236   0.000049   0.000050  0.0000012  0.0000104    0.000081    0.000079
+2006   4  16  53841   0.101840   0.366588   0.2525885   0.0007074  -0.000061  -0.000222   0.000049   0.000049  0.0000011  0.0000112    0.000078    0.000075
+2006   4  17  53842   0.101904   0.366266   0.2519039   0.0005789  -0.000097  -0.000216   0.000047   0.000047  0.0000010  0.0000108    0.000076    0.000070
+2006   4  18  53843   0.102052   0.366087   0.2513337   0.0005090  -0.000124  -0.000218   0.000046   0.000046  0.0000009  0.0000101    0.000073    0.000066
+2006   4  19  53844   0.102150   0.365566   0.2508270   0.0004963  -0.000142  -0.000225   0.000045   0.000046  0.0000008  0.0000101    0.000071    0.000061
+2006   4  20  53845   0.102860   0.364870   0.2503026   0.0005620  -0.000067  -0.000276   0.000045   0.000046  0.0000010  0.0000102    0.000070    0.000071
+2006   4  21  53846   0.103707   0.364410   0.2496572   0.0007299   0.000035  -0.000336   0.000046   0.000047  0.0000013  0.0000102    0.000071    0.000085
+2006   4  22  53847   0.104288   0.364090   0.2487812   0.0010355   0.000050  -0.000359   0.000048   0.000048  0.0000059  0.0000109    0.000065    0.000081
+2006   4  23  53848   0.105026   0.363735   0.2475627   0.0013830   0.000030  -0.000360   0.000048   0.000049  0.0000160  0.0000116    0.000058    0.000072
+2006   4  24  53849   0.105594   0.363167   0.2460152   0.0016766   0.000008  -0.000350   0.000046   0.000047  0.0000137  0.0000110    0.000051    0.000062
+2006   4  25  53850   0.105968   0.362594   0.2442573   0.0018189  -0.000016  -0.000331   0.000044   0.000045  0.0000042  0.0000105    0.000044    0.000052
+2006   4  26  53851   0.106189   0.362214   0.2424380   0.0018348  -0.000084  -0.000257   0.000043   0.000044  0.0000102  0.0000104    0.000021    0.000024
+2006   4  27  53852   0.106475   0.362016   0.2406671   0.0017278  -0.000053  -0.000151   0.000043   0.000045  0.0000157  0.0000104    0.000028    0.000033
+2006   4  28  53853   0.107224   0.361783   0.2390454   0.0014816   0.000043  -0.000067   0.000045   0.000046  0.0000045  0.0000105    0.000057    0.000069
+2006   4  29  53854   0.108503   0.361525   0.2377003   0.0011399   0.000072  -0.000074   0.000046   0.000047  0.0000049  0.0000109    0.000062    0.000073
+2006   4  30  53855   0.109362   0.361060   0.2367177   0.0008445   0.000071  -0.000120   0.000047   0.000049  0.0000080  0.0000112    0.000056    0.000064
+2006   5   1  53856   0.109747   0.360462   0.2359575   0.0006891   0.000068  -0.000174   0.000047   0.000048  0.0000071  0.0000106    0.000050    0.000055
+2006   5   2  53857   0.109810   0.359924   0.2352410   0.0007284   0.000062  -0.000236   0.000046   0.000048  0.0000045  0.0000104    0.000043    0.000046
+2006   5   3  53858   0.109911   0.359300   0.2344782   0.0008193   0.000054  -0.000300   0.000046   0.000047  0.0000018  0.0000104    0.000037    0.000037
+2006   5   4  53859   0.109585   0.358326   0.2336196   0.0009251   0.000049  -0.000243   0.000046   0.000047  0.0000016  0.0000102    0.000052    0.000057
+2006   5   5  53860   0.109191   0.357200   0.2326270   0.0010730   0.000046  -0.000156   0.000047   0.000048  0.0000019  0.0000104    0.000071    0.000085
+2006   5   6  53861   0.108617   0.355950   0.2314821   0.0012090   0.000047  -0.000165   0.000049   0.000049  0.0000046  0.0000108    0.000070    0.000084
+2006   5   7  53862   0.108592   0.354651   0.2302290   0.0013450   0.000050  -0.000210   0.000048   0.000048  0.0000225  0.0000113    0.000060    0.000071
+2006   5   8  53863   0.108246   0.353834   0.2288625   0.0014268   0.000053  -0.000257   0.000045   0.000046  0.0000205  0.0000114    0.000051    0.000059
+2006   5   9  53864   0.107918   0.353138   0.2273940   0.0015040   0.000057  -0.000303   0.000043   0.000044  0.0000044  0.0000111    0.000041    0.000046
+2006   5  10  53865   0.107674   0.352495   0.2258875   0.0015109   0.000057  -0.000324   0.000042   0.000043  0.0000100  0.0000110    0.000047    0.000054
+2006   5  11  53866   0.107412   0.352068   0.2243899   0.0014986   0.000056  -0.000336   0.000043   0.000043  0.0000165  0.0000110    0.000058    0.000068
+2006   5  12  53867   0.107460   0.351837   0.2229480   0.0014102   0.000055  -0.000342   0.000044   0.000044  0.0000047  0.0000110    0.000068    0.000082
+2006   5  13  53868   0.107747   0.351053   0.2216247   0.0012342   0.000052  -0.000336   0.000045   0.000045  0.0000072  0.0000115    0.000074    0.000082
+2006   5  14  53869   0.108489   0.350225   0.2204976   0.0010355   0.000048  -0.000322   0.000043   0.000043  0.0000100  0.0000116    0.000078    0.000078
+2006   5  15  53870   0.109631   0.349500   0.2195420   0.0008706   0.000043  -0.000306   0.000040   0.000040  0.0000075  0.0000108    0.000083    0.000074
+2006   5  16  53871   0.110700   0.348957   0.2187124   0.0007623   0.000037  -0.000286   0.000039   0.000040  0.0000037  0.0000106    0.000087    0.000070
+2006   5  17  53872   0.111008   0.348240   0.2179695   0.0007431   0.000052  -0.000288   0.000039   0.000039  0.0000065  0.0000106    0.000078    0.000066
+2006   5  18  53873   0.111125   0.347418   0.2172021   0.0008228   0.000069  -0.000295   0.000039   0.000039  0.0000089  0.0000104    0.000065    0.000063
+2006   5  19  53874   0.111323   0.346563   0.2162847   0.0009928   0.000080  -0.000303   0.000038   0.000039  0.0000031  0.0000105    0.000052    0.000060
+2006   5  20  53875   0.111510   0.345799   0.2151432   0.0012271   0.000055  -0.000307   0.000039   0.000040  0.0000128  0.0000108    0.000046    0.000055
+2006   5  21  53876   0.111859   0.345404   0.2137951   0.0014204   0.000012  -0.000310   0.000039   0.000040  0.0000134  0.0000114    0.000043    0.000048
+2006   5  22  53877   0.112243   0.344956   0.2122860   0.0015591  -0.000033  -0.000316   0.000037   0.000038  0.0000075  0.0000113    0.000039    0.000042
+2006   5  23  53878   0.112879   0.344427   0.2107028   0.0015633  -0.000081  -0.000326   0.000036   0.000036  0.0000021  0.0000109    0.000036    0.000036
+2006   5  24  53879   0.113553   0.343639   0.2091740   0.0014557  -0.000125  -0.000231   0.000035   0.000036  0.0000045  0.0000108    0.000036    0.000033
+2006   5  25  53880   0.114386   0.342588   0.2078000   0.0012496  -0.000090  -0.000220   0.000036   0.000037  0.0000071  0.0000108    0.000048    0.000046
+2006   5  26  53881   0.115176   0.341484   0.2066796   0.0009378  -0.000029  -0.000244   0.000036   0.000037  0.0000025  0.0000109    0.000062    0.000062
+2006   5  27  53882   0.115902   0.340422   0.2059249   0.0005762  -0.000074  -0.000311   0.000036   0.000037  0.0000097  0.0000115    0.000070    0.000074
+2006   5  28  53883   0.117127   0.339225   0.2054956   0.0002881  -0.000154  -0.000391   0.000038   0.000039  0.0000165  0.0000110    0.000074    0.000083
+2006   5  29  53884   0.118372   0.338287   0.2052694   0.0001511  -0.000225  -0.000463   0.000038   0.000039  0.0000140  0.0000097    0.000078    0.000093
+2006   5  30  53885   0.119346   0.337278   0.2051144   0.0001572  -0.000284  -0.000522   0.000038   0.000038  0.0000080  0.0000093    0.000082    0.000102
+2006   5  31  53886   0.120003   0.336556   0.2049118   0.0002469  -0.000081  -0.000261   0.000037   0.000038  0.0000020  0.0000092    0.000045    0.000046
+2006   6   1  53887   0.120533   0.335721   0.2045854   0.0003796  -0.000038  -0.000252   0.000037   0.000038  0.0000010  0.0000092    0.000044    0.000044
+2006   6   2  53888   0.121148   0.334961   0.2041148   0.0005529  -0.000035  -0.000305   0.000037   0.000039  0.0000014  0.0000094    0.000053    0.000056
+2006   6   3  53889   0.121558   0.334044   0.2035169   0.0007050  -0.000012  -0.000275   0.000038   0.000040  0.0000013  0.0000100    0.000056    0.000059
+2006   6   4  53890   0.122252   0.332780   0.2028150   0.0007793   0.000016  -0.000215   0.000038   0.000039  0.0000012  0.0000107    0.000057    0.000059
+2006   6   5  53891   0.122572   0.331504   0.2020396   0.0007776   0.000040  -0.000164   0.000036   0.000037  0.0000011  0.0000104    0.000058    0.000060
+2006   6   6  53892   0.122540   0.330143   0.2012404   0.0007382   0.000058  -0.000123   0.000035   0.000036  0.0000010  0.0000099    0.000058    0.000060
+2006   6   7  53893   0.122701   0.328749   0.2004886   0.0006611   0.000071  -0.000097   0.000035   0.000036  0.0000008  0.0000100    0.000060    0.000060
+2006   6   8  53894   0.123160   0.327376   0.1998782   0.0004826  -0.000033  -0.000123   0.000035   0.000036  0.0000098  0.0000102    0.000150    0.000177
+2006   6   9  53895   0.123367   0.326099   0.1995504   0.0002138  -0.000064  -0.000236   0.000035   0.000036  0.0000044  0.0000102    0.000081    0.000098
+2006   6  10  53896   0.123405   0.324843   0.1994827  -0.0000416  -0.000003  -0.000269   0.000036   0.000037  0.0000124  0.0000105    0.000047    0.000057
+2006   6  11  53897   0.123590   0.323358   0.1996437  -0.0002519   0.000074  -0.000267   0.000037   0.000037  0.0000122  0.0000109    0.000049    0.000057
+2006   6  12  53898   0.123952   0.321591   0.1999834  -0.0003932   0.000144  -0.000265   0.000036   0.000037  0.0000065  0.0000104    0.000051    0.000057
+2006   6  13  53899   0.124405   0.319871   0.2003693  -0.0003714   0.000205  -0.000258   0.000035   0.000036  0.0000017  0.0000099    0.000053    0.000057
+2006   6  14  53900   0.125141   0.318355   0.2006541  -0.0002089  -0.000034  -0.000454   0.000035   0.000036  0.0000014  0.0000100    0.000055    0.000062
+2006   6  15  53901   0.125710   0.317375   0.2007945   0.0000005  -0.000133  -0.000497   0.000035   0.000036  0.0000081  0.0000100    0.000057    0.000064
+2006   6  16  53902   0.125989   0.316472   0.2006739   0.0002784  -0.000147  -0.000450   0.000035   0.000036  0.0000170  0.0000101    0.000058    0.000064
+2006   6  17  53903   0.126143   0.315672   0.2001596   0.0005777  -0.000153  -0.000388   0.000036   0.000036  0.0000205  0.0000106    0.000060    0.000064
+2006   6  18  53904   0.126316   0.314609   0.1993772   0.0008037  -0.000149  -0.000312   0.000035   0.000036  0.0000196  0.0000110    0.000061    0.000064
+2006   6  19  53905   0.126381   0.313380   0.1985308   0.0008969  -0.000134  -0.000232   0.000039   0.000039  0.0000146  0.0000109    0.000062    0.000064
+2006   6  20  53906   0.126200   0.312331   0.1976979   0.0007934  -0.000107  -0.000151   0.000038   0.000038  0.0000032  0.0000104    0.000064    0.000065
+2006   6  21  53907   0.125986   0.311193   0.1969856   0.0006126  -0.000074  -0.000122   0.000033   0.000033  0.0000106  0.0000102    0.000085    0.000088
+2006   6  22  53908   0.125524   0.310405   0.1964795   0.0003853  -0.000035  -0.000114   0.000033   0.000033  0.0000227  0.0000104    0.000111    0.000118
+2006   6  23  53909   0.124906   0.309549   0.1962099   0.0001886   0.000004  -0.000142   0.000033   0.000034  0.0000065  0.0000103    0.000074    0.000081
+2006   6  24  53910   0.124818   0.308483   0.1961123   0.0000138   0.000008  -0.000150   0.000033   0.000034  0.0000060  0.0000106    0.000061    0.000066
+2006   6  25  53911   0.125196   0.307244   0.1962061  -0.0000945  -0.000004  -0.000149   0.000037   0.000038  0.0000111  0.0000110    0.000066    0.000069
+2006   6  26  53912   0.125623   0.306071   0.1963287  -0.0000897  -0.000018  -0.000151   0.000040   0.000040  0.0000085  0.0000108    0.000071    0.000072
+2006   6  27  53913   0.125989   0.304909   0.1963198   0.0000631  -0.000038  -0.000152   0.000038   0.000039  0.0000024  0.0000105    0.000075    0.000075
+2006   6  28  53914   0.126243   0.303885   0.1961524   0.0002359   0.000020  -0.000140   0.000038   0.000039  0.0000013  0.0000105    0.000045    0.000040
+2006   6  29  53915   0.126713   0.302630   0.1958023   0.0004465   0.000130  -0.000069   0.000038   0.000039  0.0000015  0.0000104    0.000033    0.000033
+2006   6  30  53916   0.127526   0.301290   0.1952571   0.0006307   0.000135  -0.000108   0.000038   0.000039  0.0000017  0.0000104    0.000062    0.000059
+2006   7   1  53917   0.128382   0.299916   0.1945240   0.0008237   0.000075  -0.000102   0.000038   0.000040  0.0000094  0.0000108    0.000075    0.000075
+2006   7   2  53918   0.128778   0.298878   0.1936066   0.0009564   0.000003  -0.000067   0.000039   0.000040  0.0000119  0.0000111    0.000080    0.000085
+2006   7   3  53919   0.128911   0.297710   0.1926335   0.0009924  -0.000067  -0.000040   0.000039   0.000040  0.0000131  0.0000106    0.000084    0.000094
+2006   7   4  53920   0.128828   0.296536   0.1916725   0.0009673  -0.000131  -0.000020   0.000038   0.000039  0.0000138  0.0000102    0.000088    0.000104
+2006   7   5  53921   0.128824   0.295376   0.1907315   0.0009090  -0.000092  -0.000094   0.000038   0.000039  0.0000082  0.0000103    0.000078    0.000083
+2006   7   6  53922   0.128711   0.294520   0.1899088   0.0007662  -0.000048  -0.000173   0.000038   0.000039  0.0000025  0.0000104    0.000066    0.000063
+2006   7   7  53923   0.128379   0.293675   0.1892969   0.0005256   0.000091  -0.000254   0.000038   0.000039  0.0000021  0.0000105    0.000076    0.000075
+2006   7   8  53924   0.128126   0.292414   0.1888874   0.0002595   0.000118  -0.000271   0.000040   0.000041  0.0000097  0.0000111    0.000075    0.000074
+2006   7   9  53925   0.127490   0.291128   0.1887598   0.0000634   0.000091  -0.000262   0.000042   0.000042  0.0000112  0.0000114    0.000068    0.000065
+2006   7  10  53926   0.126859   0.289754   0.1887717  -0.0000110   0.000056  -0.000248   0.000041   0.000041  0.0000069  0.0000108    0.000060    0.000056
+2006   7  11  53927   0.126168   0.288343   0.1887671   0.0000369   0.000014  -0.000229   0.000039   0.000040  0.0000020  0.0000102    0.000054    0.000047
+2006   7  12  53928   0.125970   0.286918   0.1886950   0.0001552  -0.000123  -0.000173   0.000038   0.000039  0.0000042  0.0000101    0.000026    0.000025
+2006   7  13  53929   0.125482   0.285746   0.1884080   0.0004075  -0.000148  -0.000167   0.000039   0.000039  0.0000066  0.0000102    0.000117    0.000211
+2006   7  14  53930   0.124580   0.284874   0.1877945   0.0007491  -0.000017  -0.000243   0.000039   0.000039  0.0000026  0.0000101    0.000087    0.000098
+2006   7  15  53931   0.123406   0.284190   0.1868959   0.0010147  -0.000005  -0.000284   0.000039   0.000040  0.0000092  0.0000104    0.000062    0.000054
+2006   7  16  53932   0.122686   0.283217   0.1858028   0.0011158  -0.000042  -0.000304   0.000040   0.000040  0.0000101  0.0000109    0.000056    0.000050
+2006   7  17  53933   0.122114   0.282120   0.1847076   0.0010318  -0.000069  -0.000319   0.000040   0.000040  0.0000060  0.0000109    0.000049    0.000046
+2006   7  18  53934   0.121603   0.281087   0.1837808   0.0008295  -0.000086  -0.000329   0.000038   0.000038  0.0000019  0.0000104    0.000043    0.000042
+2006   7  19  53935   0.121172   0.280270   0.1830972   0.0005615  -0.000064  -0.000187   0.000036   0.000037  0.0000076  0.0000101    0.000043    0.000042
+2006   7  20  53936   0.120690   0.279487   0.1826737   0.0002957  -0.000027  -0.000010   0.000037   0.000037  0.0000124  0.0000102    0.000046    0.000043
+2006   7  21  53937   0.120077   0.278716   0.1825049   0.0000358   0.000068  -0.000103   0.000038   0.000038  0.0000036  0.0000104    0.000078    0.000062
+2006   7  22  53938   0.119367   0.277846   0.1825903  -0.0001651   0.000145  -0.000159   0.000039   0.000039  0.0000095  0.0000110    0.000081    0.000064
+2006   7  23  53939   0.118782   0.276900   0.1828221  -0.0002581   0.000200  -0.000172   0.000039   0.000039  0.0000104  0.0000114    0.000070    0.000057
+2006   7  24  53940   0.117953   0.275947   0.1830671  -0.0002342   0.000240  -0.000192   0.000037   0.000038  0.0000063  0.0000110    0.000058    0.000050
+2006   7  25  53941   0.117342   0.274688   0.1832291  -0.0001007   0.000263  -0.000215   0.000036   0.000037  0.0000021  0.0000106    0.000046    0.000043
+2006   7  26  53942   0.116946   0.273610   0.1832515   0.0000525   0.000188  -0.000216   0.000036   0.000036  0.0000078  0.0000106    0.000052    0.000048
+2006   7  27  53943   0.116447   0.272925   0.1831289   0.0001542   0.000080  -0.000212   0.000036   0.000037  0.0000127  0.0000108    0.000062    0.000056
+2006   7  28  53944   0.116222   0.272509   0.1828883   0.0002659  -0.000035  -0.000207   0.000036   0.000037  0.0000047  0.0000108    0.000072    0.000065
+2006   7  29  53945   0.116053   0.272509   0.1825617   0.0003811  -0.000061  -0.000217   0.000037   0.000038  0.0000118  0.0000113    0.000075    0.000066
+2006   7  30  53946   0.115047   0.272491   0.1821306   0.0004690  -0.000052  -0.000233   0.000038   0.000038  0.0000179  0.0000120    0.000075    0.000064
+2006   7  31  53947   0.113803   0.271790   0.1816326   0.0004714  -0.000036  -0.000248   0.000037   0.000037  0.0000132  0.0000116    0.000075    0.000063
+2006   8   1  53948   0.112516   0.271155   0.1811646   0.0004055  -0.000014  -0.000260   0.000036   0.000036  0.0000048  0.0000110    0.000074    0.000061
+2006   8   2  53949   0.111311   0.270611   0.1808130   0.0003019  -0.000039  -0.000233   0.000036   0.000036  0.0000077  0.0000110    0.000040    0.000037
+2006   8   3  53950   0.110271   0.269917   0.1805945   0.0001649  -0.000064  -0.000213   0.000036   0.000036  0.0000109  0.0000111    0.000064    0.000071
+2006   8   4  53951   0.109363   0.268990   0.1804994  -0.0000024  -0.000093  -0.000277   0.000037   0.000037  0.0000036  0.0000112    0.000070    0.000060
+2006   8   5  53952   0.108792   0.267829   0.1805367  -0.0001256  -0.000102  -0.000280   0.000038   0.000038  0.0000116  0.0000116    0.000065    0.000051
+2006   8   6  53953   0.108544   0.266507   0.1807052  -0.0001708  -0.000100  -0.000248   0.000041   0.000041  0.0000188  0.0000119    0.000060    0.000050
+2006   8   7  53954   0.108346   0.265253   0.1809052  -0.0001485  -0.000097  -0.000214   0.000043   0.000043  0.0000136  0.0000113    0.000055    0.000049
+2006   8   8  53955   0.108457   0.264180   0.1809912   0.0000306  -0.000093  -0.000177   0.000041   0.000042  0.0000036  0.0000109    0.000050    0.000048
+2006   8   9  53956   0.108439   0.263500   0.1808337   0.0003291  -0.000100  -0.000186   0.000040   0.000041  0.0000106  0.0000109    0.000051    0.000050
+2006   8  10  53957   0.107819   0.262804   0.1803360   0.0006416  -0.000107  -0.000205   0.000040   0.000041  0.0000171  0.0000107    0.000053    0.000052
+2006   8  11  53958   0.106947   0.261775   0.1794967   0.0009422  -0.000113  -0.000223   0.000040   0.000040  0.0000047  0.0000105    0.000056    0.000055
+2006   8  12  53959   0.106018   0.260870   0.1784355   0.0010794  -0.000107  -0.000200   0.000041   0.000041  0.0000136  0.0000110    0.000054    0.000053
+2006   8  13  53960   0.105140   0.260032   0.1773244   0.0010715  -0.000096  -0.000162   0.000041   0.000041  0.0000153  0.0000116    0.000051    0.000049
+2006   8  14  53961   0.104425   0.259465   0.1763605   0.0008605  -0.000084  -0.000128   0.000039   0.000039  0.0000136  0.0000111    0.000049    0.000045
+2006   8  15  53962   0.103461   0.258916   0.1756550   0.0005776  -0.000070  -0.000099   0.000039   0.000039  0.0000128  0.0000107    0.000045    0.000041
+2006   8  16  53963   0.102133   0.258702   0.1752239   0.0002944  -0.000056  -0.000076   0.000038   0.000039  0.0000074  0.0000107    0.000043    0.000038
+2006   8  17  53964   0.100652   0.258082   0.1750530   0.0000437  -0.000041  -0.000059   0.000037   0.000038  0.0000021  0.0000108    0.000039    0.000034
+2006   8  18  53965   0.099403   0.257397   0.1750900  -0.0000994  -0.000048  -0.000162   0.000037   0.000038  0.0000019  0.0000108    0.000071    0.000054
+2006   8  19  53966   0.098092   0.256587   0.1752654  -0.0001699  -0.000051  -0.000198   0.000039   0.000039  0.0000094  0.0000112    0.000074    0.000057
+2006   8  20  53967   0.096592   0.255897   0.1754441  -0.0001397  -0.000051  -0.000199   0.000039   0.000040  0.0000146  0.0000121    0.000063    0.000053
+2006   8  21  53968   0.095112   0.255499   0.1754850   0.0000204  -0.000053  -0.000198   0.000038   0.000038  0.0000104  0.0000116    0.000053    0.000048
+2006   8  22  53969   0.093980   0.255277   0.1753401   0.0002357  -0.000059  -0.000192   0.000037   0.000037  0.0000027  0.0000110    0.000041    0.000043
+2006   8  23  53970   0.092967   0.254958   0.1750285   0.0003915   0.000014  -0.000219   0.000037   0.000037  0.0000159  0.0000109    0.000042    0.000043
+2006   8  24  53971   0.091579   0.254447   0.1745292   0.0005624   0.000106  -0.000251   0.000038   0.000038  0.0000266  0.0000108    0.000047    0.000043
+2006   8  25  53972   0.090538   0.254031   0.1738726   0.0006932  -0.000016  -0.000202   0.000038   0.000038  0.0000067  0.0000110    0.000056    0.000056
+2006   8  26  53973   0.089647   0.254059   0.1732041   0.0007234  -0.000080  -0.000167   0.000039   0.000039  0.0000144  0.0000116    0.000055    0.000055
+2006   8  27  53974   0.088518   0.254176   0.1724687   0.0007010  -0.000096  -0.000144   0.000042   0.000042  0.0000136  0.0000126    0.000050    0.000048
+2006   8  28  53975   0.087099   0.254264   0.1717349   0.0006542  -0.000110  -0.000120   0.000043   0.000043  0.0000069  0.0000126    0.000044    0.000042
+2006   8  29  53976   0.085816   0.254129   0.1711155   0.0005824  -0.000120  -0.000096   0.000042   0.000042  0.0000019  0.0000120    0.000039    0.000035
+2006   8  30  53977   0.084573   0.254175   0.1706373   0.0004190  -0.000136  -0.000071   0.000042   0.000041  0.0000011  0.0000118    0.000029    0.000026
+2006   8  31  53978   0.083394   0.254136   0.1703254   0.0002298  -0.000151  -0.000047   0.000041   0.000041  0.0000014  0.0000118    0.000018    0.000017
+2006   9   1  53979   0.082474   0.254226   0.1701817   0.0000769  -0.000024  -0.000059   0.000041   0.000042  0.0000017  0.0000123    0.000053    0.000055
+2006   9   2  53980   0.081266   0.254310   0.1701625   0.0000003  -0.000008  -0.000063   0.000044   0.000043  0.0000088  0.0000129    0.000064    0.000063
+2006   9   3  53981   0.079766   0.254401   0.1701576   0.0000318  -0.000053  -0.000059   0.000046   0.000045  0.0000101  0.0000129    0.000060    0.000055
+2006   9   4  53982   0.078285   0.254457   0.1700338   0.0002184  -0.000100  -0.000057   0.000045   0.000044  0.0000073  0.0000119    0.000056    0.000047
+2006   9   5  53983   0.077227   0.254444   0.1696653   0.0005476  -0.000147  -0.000056   0.000044   0.000043  0.0000044  0.0000112    0.000051    0.000039
+2006   9   6  53984   0.076809   0.254543   0.1689570   0.0009317  -0.000047  -0.000121   0.000043   0.000042  0.0000016  0.0000112    0.000043    0.000038
+2006   9   7  53985   0.076159   0.254827   0.1678808   0.0012555  -0.000050  -0.000051   0.000043   0.000042  0.0000012  0.0000111    0.000078    0.000067
+2006   9   8  53986   0.075066   0.255126   0.1664788   0.0014850  -0.000080   0.000052   0.000044   0.000043  0.0000014  0.0000112    0.000124    0.000104
+2006   9   9  53987   0.073784   0.254908   0.1648857   0.0015684  -0.000095   0.000054   0.000045   0.000043  0.0000333  0.0000119    0.000121    0.000102
+2006   9  10  53988   0.072438   0.254595   0.1633746   0.0014362  -0.000103   0.000014   0.000047   0.000045  0.0000214  0.0000121    0.000100    0.000083
+2006   9  11  53989   0.070767   0.254187   0.1620949   0.0011667  -0.000107  -0.000029   0.000047   0.000045  0.0000060  0.0000112    0.000079    0.000065
+2006   9  12  53990   0.069105   0.253856   0.1610845   0.0008685  -0.000108  -0.000071   0.000045   0.000043  0.0000016  0.0000106    0.000058    0.000047
+2006   9  13  53991   0.067317   0.253397   0.1603426   0.0006282  -0.000065  -0.000050   0.000043   0.000042  0.0000059  0.0000105    0.000031    0.000028
+2006   9  14  53992   0.065839   0.252653   0.1598301   0.0004458  -0.000024  -0.000065   0.000044   0.000042  0.0000099  0.0000106    0.000019    0.000018
+2006   9  15  53993   0.064582   0.252241   0.1594782   0.0003034   0.000038  -0.000114   0.000045   0.000044  0.0000041  0.0000108    0.000087    0.000089
+2006   9  16  53994   0.063344   0.252160   0.1591900   0.0003160   0.000045  -0.000101   0.000047   0.000045  0.0000073  0.0000114    0.000101    0.000104
+2006   9  17  53995   0.061819   0.252255   0.1588530   0.0003837   0.000026  -0.000053   0.000048   0.000046  0.0000133  0.0000113    0.000086    0.000087
+2006   9  18  53996   0.060235   0.252281   0.1583728   0.0005482   0.000005   0.000005   0.000047   0.000045  0.0000102  0.0000102    0.000071    0.000070
+2006   9  19  53997   0.058521   0.252734   0.1577206   0.0007474  -0.000013   0.000064   0.000044   0.000043  0.0000027  0.0000096    0.000056    0.000054
+2006   9  20  53998   0.056461   0.253042   0.1569103   0.0009147  -0.000169   0.000359   0.000044   0.000042  0.0000088  0.0000095    0.000039    0.000036
+2006   9  21  53999   0.054216   0.253157   0.1559205   0.0010752  -0.000104   0.000414   0.000044   0.000043  0.0000144  0.0000094    0.000056    0.000056
+2006   9  22  54000   0.051760   0.253334   0.1547697   0.0011309   0.000043   0.000363   0.000044   0.000043  0.0000045  0.0000095    0.000083    0.000087
+2006   9  23  54001   0.049186   0.253098   0.1535766   0.0011311   0.000097   0.000292   0.000045   0.000044  0.0000017  0.0000102    0.000082    0.000086
+2006   9  24  54002   0.047186   0.252898   0.1524272   0.0011102   0.000114   0.000202   0.000047   0.000045  0.0000014  0.0000108    0.000069    0.000072
+2006   9  25  54003   0.045057   0.252737   0.1513627   0.0010235   0.000128   0.000099   0.000048   0.000046  0.0000012  0.0000104    0.000057    0.000059
+2006   9  26  54004   0.043274   0.252331   0.1503998   0.0008920   0.000134  -0.000010   0.000046   0.000044  0.0000010  0.0000098    0.000045    0.000046
+2006   9  27  54005   0.041647   0.252148   0.1495421   0.0007627   0.000130  -0.000031   0.000045   0.000043  0.0000103  0.0000097    0.000049    0.000048
+2006   9  28  54006   0.039851   0.252190   0.1488242   0.0006711   0.000116  -0.000022   0.000045   0.000044  0.0000172  0.0000096    0.000056    0.000054
+2006   9  29  54007   0.037436   0.252344   0.1482227   0.0006111   0.000095  -0.000002   0.000044   0.000043  0.0000051  0.0000097    0.000064    0.000060
+2006   9  30  54008   0.035066   0.252342   0.1475874   0.0006492   0.000072  -0.000015   0.000045   0.000044  0.0000077  0.0000106    0.000062    0.000058
+2006  10   1  54009   0.032599   0.252689   0.1468605   0.0007744   0.000049  -0.000033   0.000049   0.000048  0.0000108  0.0000114    0.000055    0.000052
+2006  10   2  54010   0.030362   0.252848   0.1459954   0.0009952   0.000025  -0.000042   0.000050   0.000049  0.0000073  0.0000110    0.000049    0.000047
+2006  10   3  54011   0.028360   0.253106   0.1448803   0.0012835   0.000003  -0.000044   0.000048   0.000048  0.0000018  0.0000107    0.000042    0.000042
+2006  10   4  54012   0.026981   0.253436   0.1434084   0.0016365  -0.000057  -0.000088   0.000047   0.000047  0.0000114  0.0000106    0.000664    0.001485
+2006  10   5  54013   0.026096   0.253970   0.1415683   0.0019940  -0.000083  -0.000082   0.000046   0.000047  0.0000192  0.0000105    0.000289    0.000622
+2006  10   6  54014   0.025261   0.254239   0.1394438   0.0022337  -0.000033   0.000030   0.000046   0.000046  0.0000053  0.0000104    0.000066    0.000069
+2006  10   7  54015   0.024273   0.254685   0.1371810   0.0022128  -0.000010   0.000061   0.000047   0.000048  0.0000060  0.0000115    0.000074    0.000080
+2006  10   8  54016   0.023515   0.255273   0.1350111   0.0020469   0.000000   0.000047   0.000049   0.000050  0.0000089  0.0000118    0.000068    0.000075
+2006  10   9  54017   0.022261   0.256205   0.1331249   0.0017371   0.000012   0.000030   0.000047   0.000048  0.0000064  0.0000104    0.000062    0.000070
+2006  10  10  54018   0.020335   0.257263   0.1315855   0.0013864   0.000026   0.000007   0.000046   0.000046  0.0000022  0.0000098    0.000056    0.000066
+2006  10  11  54019   0.018214   0.257926   0.1303482   0.0011313  -0.000033   0.000087   0.000045   0.000046  0.0000097  0.0000099    0.000033    0.000042
+2006  10  12  54020   0.015684   0.258256   0.1293205   0.0009825  -0.000022   0.000058   0.000046   0.000047  0.0000160  0.0000102    0.000044    0.000049
+2006  10  13  54021   0.013018   0.258061   0.1284057   0.0008637   0.000020  -0.000013   0.000047   0.000048  0.0000046  0.0000104    0.000066    0.000065
+2006  10  14  54022   0.011213   0.257728   0.1275294   0.0008581   0.000041  -0.000031   0.000048   0.000049  0.0000014  0.0000110    0.000066    0.000064
+2006  10  15  54023   0.009829   0.257979   0.1266235   0.0009135   0.000054  -0.000025   0.000049   0.000050  0.0000012  0.0000114    0.000057    0.000056
+2006  10  16  54024   0.008416   0.258812   0.1256280   0.0010665   0.000069  -0.000016   0.000048   0.000049  0.0000011  0.0000110    0.000048    0.000048
+2006  10  17  54025   0.007210   0.259877   0.1244994   0.0012407   0.000083  -0.000001   0.000046   0.000047  0.0000009  0.0000104    0.000039    0.000040
+2006  10  18  54026   0.006152   0.260601   0.1232189   0.0013636   0.000132   0.000038   0.000045   0.000046  0.0000062  0.0000102    0.000049    0.000046
+2006  10  19  54027   0.005230   0.261565   0.1218039   0.0014307   0.000185   0.000082   0.000046   0.000047  0.0000100  0.0000102    0.000063    0.000056
+2006  10  20  54028   0.004195   0.262281   0.1203095   0.0014735   0.000231   0.000120   0.000046   0.000048  0.0000032  0.0000102    0.000078    0.000066
+2006  10  21  54029   0.003455   0.263118   0.1188169   0.0014498   0.000210   0.000112   0.000046   0.000048  0.0000057  0.0000107    0.000080    0.000070
+2006  10  22  54030   0.002940   0.264083   0.1173815   0.0013803   0.000161   0.000081   0.000046   0.000048  0.0000102  0.0000110    0.000077    0.000070
+2006  10  23  54031   0.002204   0.265079   0.1160221   0.0012901   0.000108   0.000042   0.000044   0.000045  0.0000077  0.0000104    0.000074    0.000071
+2006  10  24  54032   0.000998   0.266278   0.1147909   0.0011506   0.000053  -0.000001   0.000043   0.000044  0.0000023  0.0000100    0.000072    0.000072
+2006  10  25  54033  -0.000534   0.267387   0.1137475   0.0009508   0.000051  -0.000042   0.000044   0.000045  0.0000086  0.0000102    0.000075    0.000073
+2006  10  26  54034  -0.001968   0.267970   0.1128532   0.0008468   0.000068  -0.000078   0.000044   0.000044  0.0000140  0.0000102    0.000080    0.000074
+2006  10  27  54035  -0.002445   0.268613   0.1120463   0.0007727   0.000089  -0.000107   0.000043   0.000043  0.0000043  0.0000099    0.000086    0.000075
+2006  10  28  54036  -0.002944   0.269084   0.1113101   0.0007405   0.000095  -0.000100   0.000044   0.000045  0.0000044  0.0000104    0.000078    0.000068
+2006  10  29  54037  -0.003161   0.269656   0.1105186   0.0008962   0.000097  -0.000074   0.000049   0.000049  0.0000045  0.0000108    0.000066    0.000058
+2006  10  30  54038  -0.003300   0.270722   0.1095361   0.0011312   0.000102  -0.000040   0.000052   0.000052  0.0000029  0.0000102    0.000054    0.000048
+2006  10  31  54039  -0.003843   0.271751   0.1082817   0.0013882   0.000107  -0.000002   0.000049   0.000049  0.0000012  0.0000097    0.000042    0.000037
+2006  11   1  54040  -0.004141   0.272896   0.1067256   0.0017057   0.000112   0.000032   0.000049   0.000049  0.0000010  0.0000096    0.000063    0.000056
+2006  11   2  54041  -0.004279   0.274145   0.1048958   0.0019635   0.000115   0.000063   0.000050   0.000050  0.0000012  0.0000096    0.000092    0.000081
+2006  11   3  54042  -0.004586   0.275345   0.1028968   0.0020240   0.000118   0.000090   0.000050   0.000050  0.0000014  0.0000096    0.000121    0.000107
+2006  11   4  54043  -0.005150   0.276057   0.1009011   0.0019070   0.000120   0.000071   0.000052   0.000051  0.0000086  0.0000102    0.000111    0.000098
+2006  11   5  54044  -0.005799   0.276890   0.0991355   0.0016085   0.000122   0.000033   0.000051   0.000051  0.0000101  0.0000108    0.000087    0.000077
+2006  11   6  54045  -0.006508   0.277806   0.0977111   0.0012447   0.000123  -0.000005   0.000047   0.000047  0.0000062  0.0000104    0.000062    0.000056
+2006  11   7  54046  -0.007328   0.279329   0.0966354   0.0009546   0.000124  -0.000044   0.000045   0.000045  0.0000016  0.0000101    0.000038    0.000034
+2006  11   8  54047  -0.008838   0.281199   0.0958459   0.0007450   0.000083   0.000024   0.000045   0.000045  0.0000053  0.0000104    0.000084    0.000097
+2006  11   9  54048  -0.010684   0.282312   0.0951763   0.0006748   0.000105   0.000086   0.000045   0.000046  0.0000088  0.0000106    0.000033    0.000036
+2006  11  10  54049  -0.012334   0.283296   0.0944835   0.0006947   0.000164   0.000103   0.000045   0.000046  0.0000030  0.0000108    0.000049    0.000053
+2006  11  11  54050  -0.013948   0.284008   0.0937408   0.0008120   0.000171   0.000095   0.000048   0.000048  0.0000055  0.0000110    0.000059    0.000062
+2006  11  12  54051  -0.014774   0.284797   0.0928158   0.0010127   0.000154   0.000079   0.000052   0.000052  0.0000071  0.0000112    0.000053    0.000054
+2006  11  13  54052  -0.015750   0.285830   0.0917215   0.0011121   0.000136   0.000062   0.000054   0.000053  0.0000048  0.0000107    0.000048    0.000046
+2006  11  14  54053  -0.016805   0.286780   0.0905472   0.0012242   0.000117   0.000042   0.000051   0.000051  0.0000015  0.0000102    0.000042    0.000038
+2006  11  15  54054  -0.017800   0.287569   0.0893317   0.0012261   0.000081   0.000055   0.000049   0.000050  0.0000027  0.0000100    0.000099    0.000081
+2006  11  16  54055  -0.018540   0.288284   0.0880888   0.0012161   0.000080   0.000068   0.000049   0.000049  0.0000041  0.0000100    0.000054    0.000048
+2006  11  17  54056  -0.019723   0.289446   0.0868427   0.0012022   0.000103   0.000024   0.000049   0.000049  0.0000018  0.0000102    0.000054    0.000052
+2006  11  18  54057  -0.021255   0.290376   0.0856604   0.0011087   0.000115   0.000021   0.000051   0.000051  0.0000051  0.0000106    0.000056    0.000053
+2006  11  19  54058  -0.022714   0.291081   0.0845815   0.0009993   0.000126   0.000040   0.000053   0.000052  0.0000067  0.0000109    0.000048    0.000046
+2006  11  20  54059  -0.024134   0.291571   0.0836158   0.0008946   0.000142   0.000060   0.000052   0.000051  0.0000045  0.0000106    0.000041    0.000038
+2006  11  21  54060  -0.025746   0.292294   0.0827757   0.0007490   0.000161   0.000080   0.000048   0.000048  0.0000013  0.0000102    0.000033    0.000031
+2006  11  22  54061  -0.026821   0.293164   0.0820689   0.0006520   0.000254   0.000026   0.000048   0.000048  0.0000011  0.0000102    0.000064    0.000064
+2006  11  23  54062  -0.028120   0.294634   0.0814799   0.0005828   0.000296   0.000007   0.000050   0.000050  0.0000023  0.0000104    0.000072    0.000071
+2006  11  24  54063  -0.029650   0.296103   0.0809369   0.0005435   0.000304   0.000006   0.000051   0.000052  0.0000037  0.0000104    0.000067    0.000065
+2006  11  25  54064  -0.031269   0.297619   0.0803224   0.0006878   0.000303   0.000005   0.000052   0.000053  0.0000050  0.0000108    0.000062    0.000059
+2006  11  26  54065  -0.032908   0.299121   0.0795126   0.0009488   0.000292   0.000004   0.000054   0.000054  0.0000043  0.0000110    0.000058    0.000053
+2006  11  27  54066  -0.034528   0.300454   0.0784153   0.0012573   0.000272   0.000002   0.000053   0.000054  0.0000028  0.0000104    0.000053    0.000047
+2006  11  28  54067  -0.035801   0.301491   0.0770191   0.0015215   0.000245  -0.000001   0.000051   0.000052  0.0000013  0.0000101    0.000048    0.000041
+2006  11  29  54068  -0.036694   0.302133   0.0753890   0.0017218   0.000188   0.000040   0.000050   0.000051  0.0000065  0.0000102    0.000034    0.000026
+2006  11  30  54069  -0.037430   0.303212   0.0736081   0.0018101   0.000142   0.000022   0.000051   0.000051  0.0000104  0.0000100    0.000056    0.000052
+2006  12   1  54070  -0.038219   0.304196   0.0717985   0.0017521   0.000115  -0.000034   0.000052   0.000053  0.0000033  0.0000100    0.000101    0.000085
+2006  12   2  54071  -0.038563   0.305211   0.0701293   0.0015333   0.000123  -0.000053   0.000055   0.000056  0.0000048  0.0000107    0.000102    0.000083
+2006  12   3  54072  -0.038642   0.306802   0.0687467   0.0012273   0.000142  -0.000051   0.000058   0.000058  0.0000053  0.0000116    0.000086    0.000070
+2006  12   4  54073  -0.038707   0.308695   0.0676407   0.0009872   0.000161  -0.000040   0.000057   0.000057  0.0000035  0.0000112    0.000069    0.000056
+2006  12   5  54074  -0.038830   0.310460   0.0667491   0.0008196   0.000181  -0.000022   0.000053   0.000054  0.0000014  0.0000103    0.000053    0.000043
+2006  12   6  54075  -0.039323   0.312305   0.0660089   0.0006944   0.000163   0.000029   0.000051   0.000052  0.0000070  0.0000102    0.000032    0.000032
+2006  12   7  54076  -0.040296   0.314267   0.0653087   0.0007393   0.000080   0.000109   0.000051   0.000051  0.0000119  0.0000102    0.000017    0.000017
+2006  12   8  54077  -0.041530   0.316207   0.0645224   0.0008624  -0.000010   0.000176   0.000052   0.000052  0.0000063  0.0000104    0.000087    0.000108
+2006  12   9  54078  -0.042607   0.317701   0.0635611   0.0010486  -0.000020   0.000194   0.000055   0.000054  0.0000077  0.0000108    0.000102    0.000125
+2006  12  10  54079  -0.043385   0.318852   0.0624570   0.0012263   0.000013   0.000182   0.000058   0.000057  0.0000043  0.0000119    0.000083    0.000097
+2006  12  11  54080  -0.044239   0.319811   0.0611745   0.0013483   0.000063   0.000155   0.000059   0.000058  0.0000028  0.0000125    0.000064    0.000068
+2006  12  12  54081  -0.044869   0.320731   0.0597619   0.0014344   0.000125   0.000116   0.000056   0.000055  0.0000013  0.0000121    0.000045    0.000040
+2006  12  13  54082  -0.045634   0.322286   0.0582986   0.0014211   0.000329  -0.000030   0.000054   0.000054  0.0000045  0.0000118    0.000039    0.000032
+2006  12  14  54083  -0.046657   0.323811   0.0569069   0.0013247   0.000420  -0.000107   0.000055   0.000055  0.0000071  0.0000116    0.000073    0.000067
+2006  12  15  54084  -0.047953   0.325210   0.0556449   0.0012111   0.000457  -0.000149   0.000056   0.000056  0.0000030  0.0000119    0.000119    0.000113
+2006  12  16  54085  -0.048963   0.326578   0.0544378   0.0010994   0.000464  -0.000153   0.000058   0.000058  0.0000058  0.0000125    0.000115    0.000109
+2006  12  17  54086  -0.049588   0.328007   0.0533941   0.0009256   0.000447  -0.000133   0.000056   0.000056  0.0000083  0.0000122    0.000092    0.000085
+2006  12  18  54087  -0.050172   0.329495   0.0525566   0.0007535   0.000415  -0.000102   0.000051   0.000051  0.0000059  0.0000109    0.000069    0.000062
+2006  12  19  54088  -0.050521   0.331028   0.0518653   0.0006496   0.000368  -0.000061   0.000050   0.000050  0.0000019  0.0000106    0.000046    0.000039
+2006  12  20  54089  -0.051147   0.332198   0.0512634   0.0005641   0.000350  -0.000030   0.000049   0.000050  0.0000061  0.0000107    0.000045    0.000039
+2006  12  21  54090  -0.051962   0.333136   0.0507247   0.0005098   0.000334  -0.000004   0.000049   0.000050  0.0000098  0.0000107    0.000049    0.000045
+2006  12  22  54091  -0.052612   0.333549   0.0501871   0.0006220   0.000316   0.000017   0.000048   0.000050  0.0000033  0.0000106    0.000054    0.000051
+2006  12  23  54092  -0.052596   0.334182   0.0495056   0.0008265   0.000286   0.000004   0.000049   0.000050  0.0000016  0.0000109    0.000056    0.000052
+2006  12  24  54093  -0.052078   0.335245   0.0485723   0.0011188   0.000253  -0.000025   0.000057   0.000058  0.0000017  0.0000122    0.000058    0.000050
+2006  12  25  54094  -0.051303   0.336874   0.0473502   0.0013588   0.000221  -0.000062   0.000061   0.000063  0.0000018  0.0000125    0.000060    0.000049
+2006  12  26  54095  -0.050740   0.338633   0.0458742   0.0015393   0.000189  -0.000104   0.000060   0.000061  0.0000018  0.0000121    0.000062    0.000047
+2006  12  27  54096  -0.050402   0.340392   0.0442409   0.0016459   0.000159  -0.000147   0.000060   0.000061  0.0000019  0.0000123    0.000063    0.000045
+2006  12  28  54097  -0.050256   0.342160   0.0425803   0.0016123   0.000129  -0.000189   0.000060   0.000060  0.0000020  0.0000123    0.000065    0.000044
+2006  12  29  54098  -0.049861   0.343830   0.0410201   0.0014758   0.000118  -0.000127   0.000059   0.000059  0.0000021  0.0000123    0.000111    0.000109
+2006  12  30  54099  -0.049470   0.345463   0.0396448   0.0012837   0.000088  -0.000121   0.000063   0.000062  0.0000020  0.0000130    0.000122    0.000124
+2006  12  31  54100  -0.049436   0.346448   0.0385073   0.0010070   0.000055  -0.000144   0.000064   0.000062  0.0000019  0.0000132    0.000115    0.000114
+2007   1   1  54101  -0.049392   0.347341   0.0376212   0.0007488   0.000031  -0.000162   0.000061   0.000059  0.0000018  0.0000125    0.000108    0.000105
+2007   1   2  54102  -0.049985   0.348602   0.0369474   0.0005811   0.000018  -0.000179   0.000059   0.000057  0.0000017  0.0000120    0.000101    0.000095
+2007   1   3  54103  -0.051126   0.349937   0.0364030   0.0005093   0.000017  -0.000192   0.000059   0.000057  0.0000016  0.0000121    0.000095    0.000085
+2007   1   4  54104  -0.052992   0.351314   0.0358810   0.0005500   0.000031  -0.000198   0.000059   0.000057  0.0000014  0.0000121    0.000096    0.000095
+2007   1   5  54105  -0.054455   0.352666   0.0352680   0.0007190   0.000057  -0.000202   0.000058   0.000057  0.0000012  0.0000120    0.000100    0.000109
+2007   1   6  54106  -0.055965   0.354249   0.0344796   0.0009105   0.000137  -0.000182   0.000060   0.000058  0.0000052  0.0000125    0.000091    0.000102
+2007   1   7  54107  -0.056673   0.355564   0.0334938   0.0010634   0.000237  -0.000154   0.000064   0.000063  0.0000107  0.0000123    0.000079    0.000086
+2007   1   8  54108  -0.057181   0.357183   0.0323393   0.0012030   0.000335  -0.000129   0.000064   0.000064  0.0000143  0.0000111    0.000066    0.000070
+2007   1   9  54109  -0.057577   0.359010   0.0310617   0.0013296   0.000425  -0.000106   0.000061   0.000062  0.0000140  0.0000106    0.000053    0.000055
+2007   1  10  54110  -0.058094   0.361234   0.0297189   0.0013541   0.000286  -0.000221   0.000059   0.000059  0.0000028  0.0000106    0.000038    0.000035
+2007   1  11  54111  -0.059000   0.363122   0.0283807   0.0013116   0.000292  -0.000197   0.000059   0.000060  0.0000007  0.0000106    0.000039    0.000036
+2007   1  12  54112  -0.059180   0.364649   0.0270882   0.0012352   0.000331  -0.000137   0.000060   0.000061  0.0000009  0.0000106    0.000044    0.000043
+2007   1  13  54113  -0.058667   0.366455   0.0258685   0.0011297   0.000347  -0.000156   0.000061   0.000062  0.0000066  0.0000110    0.000043    0.000042
+2007   1  14  54114  -0.058361   0.368175   0.0247776   0.0009970   0.000352  -0.000202   0.000064   0.000065  0.0000106  0.0000116    0.000039    0.000038
+2007   1  15  54115  -0.058004   0.369715   0.0238455   0.0008712   0.000355  -0.000241   0.000064   0.000065  0.0000076  0.0000116    0.000034    0.000035
+2007   1  16  54116  -0.057362   0.371419   0.0230239   0.0007991   0.000355  -0.000275   0.000060   0.000062  0.0000020  0.0000115    0.000030    0.000031
+2007   1  17  54117  -0.056963   0.373242   0.0222216   0.0007943   0.000392  -0.000183   0.000060   0.000062  0.0000055  0.0000116    0.000070    0.000093
+2007   1  18  54118  -0.056506   0.375001   0.0213968   0.0008858   0.000434  -0.000060   0.000063   0.000064  0.0000090  0.0000116    0.000120    0.000172
+2007   1  19  54119  -0.055889   0.377209   0.0204630   0.0010846   0.000427  -0.000010   0.000064   0.000066  0.0000035  0.0000117    0.000119    0.000119
+2007   1  20  54120  -0.055674   0.379806   0.0192287   0.0013788   0.000390  -0.000029   0.000065   0.000066  0.0000098  0.0000121    0.000095    0.000079
+2007   1  21  54121  -0.055641   0.381674   0.0176808   0.0016897   0.000343  -0.000070   0.000068   0.000068  0.0000136  0.0000125    0.000070    0.000059
+2007   1  22  54122  -0.055277   0.383371   0.0158620   0.0019796   0.000294  -0.000119   0.000069   0.000069  0.0000109  0.0000121    0.000045    0.000039
+2007   1  23  54123  -0.055091   0.385137   0.0138195   0.0021356   0.000245  -0.000173   0.000064   0.000065  0.0000076  0.0000115    0.000020    0.000020
+2007   1  24  54124  -0.054798   0.386974   0.0116755   0.0021065   0.000187  -0.000199   0.000063   0.000064  0.0000080  0.0000114    0.000344    0.000231
+2007   1  25  54125  -0.054651   0.388941   0.0096211   0.0019300   0.000177  -0.000206   0.000063   0.000064  0.0000073  0.0000114    0.000081    0.000061
+2007   1  26  54126  -0.054345   0.390536   0.0077936   0.0016970   0.000212  -0.000189   0.000063   0.000064  0.0000026  0.0000113    0.000075    0.000066
+2007   1  27  54127  -0.053708   0.392256   0.0062105   0.0014270   0.000216  -0.000187   0.000068   0.000068  0.0000082  0.0000120    0.000082    0.000071
+2007   1  28  54128  -0.052936   0.393886   0.0048979   0.0011618   0.000207  -0.000192   0.000066   0.000066  0.0000104  0.0000132    0.000062    0.000054
+2007   1  29  54129  -0.051896   0.395808   0.0038247   0.0010191   0.000200  -0.000192   0.000060   0.000060  0.0000174  0.0000137    0.000042    0.000037
+2007   1  30  54130  -0.050889   0.397755   0.0028487   0.0009795   0.000196  -0.000189   0.000057   0.000057  0.0000255  0.0000136    0.000022    0.000020
+2007   1  31  54131  -0.050254   0.399606   0.0018318   0.0010337   0.000189  -0.000194   0.000056   0.000057  0.0000216  0.0000136    0.000031    0.000027
+2007   2   1  54132  -0.049833   0.401078   0.0007270   0.0011779   0.000182  -0.000200   0.000058   0.000059  0.0000163  0.0000137    0.000047    0.000040
+2007   2   2  54133  -0.049187   0.402238  -0.0005219   0.0013550   0.000176  -0.000201   0.000058   0.000058  0.0000044  0.0000136    0.000063    0.000053
+2007   2   3  54134  -0.047727   0.403062  -0.0019552   0.0015252   0.000187  -0.000200   0.000059   0.000059  0.0000065  0.0000136    0.000060    0.000051
+2007   2   4  54135  -0.045644   0.404292  -0.0035315   0.0016333   0.000206  -0.000196   0.000061   0.000061  0.0000087  0.0000135    0.000051    0.000044
+2007   2   5  54136  -0.043551   0.405868  -0.0052017   0.0016932   0.000226  -0.000190   0.000059   0.000059  0.0000057  0.0000129    0.000041    0.000037
+2007   2   6  54137  -0.041285   0.407827  -0.0069194   0.0017208   0.000249  -0.000187   0.000055   0.000055  0.0000013  0.0000123    0.000031    0.000030
+2007   2   7  54138  -0.039557   0.410237  -0.0086209   0.0016372   0.000188  -0.000129   0.000055   0.000055  0.0000044  0.0000123    0.000035    0.000028
+2007   2   8  54139  -0.038573   0.412621  -0.0102233   0.0015400   0.000198  -0.000077   0.000058   0.000058  0.0000074  0.0000126    0.000056    0.000060
+2007   2   9  54140  -0.037769   0.414988  -0.0116624   0.0013509   0.000208  -0.000107   0.000058   0.000058  0.0000024  0.0000127    0.000064    0.000058
+2007   2  10  54141  -0.036850   0.416808  -0.0129258   0.0011706   0.000245  -0.000143   0.000058   0.000058  0.0000073  0.0000128    0.000063    0.000055
+2007   2  11  54142  -0.036046   0.418466  -0.0140475   0.0010248   0.000292  -0.000179   0.000061   0.000061  0.0000109  0.0000133    0.000060    0.000058
+2007   2  12  54143  -0.035008   0.420122  -0.0150036   0.0008793   0.000337  -0.000220   0.000061   0.000061  0.0000076  0.0000129    0.000058    0.000060
+2007   2  13  54144  -0.033834   0.421952  -0.0158062   0.0007424   0.000373  -0.000264   0.000058   0.000058  0.0000021  0.0000123    0.000055    0.000062
+2007   2  14  54145  -0.032722   0.423531  -0.0165401   0.0007488   0.000430  -0.000261   0.000058   0.000058  0.0000055  0.0000125    0.000045    0.000050
+2007   2  15  54146  -0.031507   0.425205  -0.0172906   0.0008278   0.000422  -0.000250   0.000060   0.000059  0.0000088  0.0000125    0.000047    0.000047
+2007   2  16  54147  -0.030848   0.426759  -0.0181312   0.0009470   0.000348  -0.000262   0.000059   0.000057  0.0000027  0.0000123    0.000053    0.000047
+2007   2  17  54148  -0.030344   0.427889  -0.0191112   0.0011395   0.000280  -0.000309   0.000062   0.000059  0.0000082  0.0000129    0.000060    0.000050
+2007   2  18  54149  -0.029479   0.429159  -0.0203506   0.0014120   0.000224  -0.000356   0.000067   0.000063  0.0000156  0.0000135    0.000068    0.000053
+2007   2  19  54150  -0.028623   0.430605  -0.0218575   0.0015965   0.000174  -0.000392   0.000067   0.000063  0.0000162  0.0000129    0.000077    0.000056
+2007   2  20  54151  -0.027676   0.431916  -0.0234784   0.0015778   0.000134  -0.000414   0.000065   0.000062  0.0000143  0.0000123    0.000085    0.000059
+2007   2  21  54152  -0.026996   0.433386  -0.0250114   0.0013883   0.000239  -0.000303   0.000060   0.000058  0.0000130  0.0000123    0.000023    0.000019
+2007   2  22  54153  -0.025600   0.434557  -0.0262959   0.0011185   0.000332  -0.000168   0.000059   0.000056  0.0000104  0.0000123    0.000018    0.000021
+2007   2  23  54154  -0.023482   0.435974  -0.0272778   0.0008440   0.000390  -0.000065   0.000062   0.000058  0.0000030  0.0000124    0.000046    0.000042
+2007   2  24  54155  -0.021353   0.437133  -0.0280280   0.0006179   0.000392  -0.000058   0.000065   0.000061  0.0000055  0.0000129    0.000053    0.000045
+2007   2  25  54156  -0.019157   0.438074  -0.0285732   0.0004733   0.000373  -0.000088   0.000072   0.000067  0.0000080  0.0000130    0.000048    0.000042
+2007   2  26  54157  -0.017570   0.439308  -0.0290049   0.0004207   0.000348  -0.000129   0.000073   0.000069  0.0000056  0.0000123    0.000043    0.000038
+2007   2  27  54158  -0.015980   0.440448  -0.0294330   0.0004535   0.000318  -0.000178   0.000068   0.000065  0.0000016  0.0000119    0.000039    0.000035
+2007   2  28  54159  -0.014654   0.442081  -0.0299220   0.0005618   0.000317  -0.000167   0.000068   0.000065  0.0000071  0.0000119    0.000046    0.000041
+2007   3   1  54160  -0.013858   0.443738  -0.0305283   0.0007035   0.000320  -0.000142   0.000071   0.000067  0.0000117  0.0000122    0.000055    0.000051
+2007   3   2  54161  -0.013131   0.445606  -0.0312976   0.0008574   0.000319  -0.000118   0.000071   0.000068  0.0000035  0.0000125    0.000064    0.000060
+2007   3   3  54162  -0.012814   0.447482  -0.0322545   0.0010395   0.000319  -0.000136   0.000072   0.000069  0.0000074  0.0000129    0.000061    0.000057
+2007   3   4  54163  -0.012370   0.448807  -0.0333362   0.0011686   0.000317  -0.000167   0.000070   0.000066  0.0000077  0.0000136    0.000052    0.000049
+2007   3   5  54164  -0.011637   0.450123  -0.0345252   0.0012361   0.000312  -0.000196   0.000063   0.000060  0.0000044  0.0000135    0.000043    0.000041
+2007   3   6  54165  -0.011198   0.451306  -0.0357730   0.0012278   0.000307  -0.000221   0.000059   0.000057  0.0000013  0.0000129    0.000035    0.000033
+2007   3   7  54166  -0.010637   0.452361  -0.0369830   0.0011983   0.000234  -0.000161   0.000058   0.000055  0.0000016  0.0000128    0.000062    0.000063
+2007   3   8  54167  -0.009885   0.453868  -0.0381375   0.0011530   0.000191  -0.000146   0.000059   0.000056  0.0000047  0.0000127    0.000067    0.000069
+2007   3   9  54168  -0.009123   0.455048  -0.0392029   0.0009616   0.000172  -0.000155   0.000060   0.000057  0.0000087  0.0000126    0.000060    0.000062
+2007   3  10  54169  -0.008195   0.455973  -0.0401231   0.0007738   0.000165  -0.000162   0.000062   0.000059  0.0000120  0.0000134    0.000054    0.000055
+2007   3  11  54170  -0.007364   0.456904  -0.0408734   0.0006509   0.000169  -0.000170   0.000062   0.000060  0.0000132  0.0000144    0.000047    0.000048
+2007   3  12  54171  -0.006457   0.457682  -0.0414853   0.0005573   0.000183  -0.000179   0.000059   0.000056  0.0000090  0.0000144    0.000041    0.000041
+2007   3  13  54172  -0.005802   0.458727  -0.0420259   0.0005269   0.000202  -0.000190   0.000055   0.000053  0.0000022  0.0000140    0.000035    0.000034
+2007   3  14  54173  -0.005310   0.459890  -0.0425913   0.0006152   0.000423  -0.000100   0.000055   0.000053  0.0000062  0.0000139    0.000065    0.000098
+2007   3  15  54174  -0.004491   0.461006  -0.0432784   0.0007796   0.000473  -0.000077   0.000057   0.000055  0.0000102  0.0000140    0.000073    0.000100
+2007   3  16  54175  -0.002881   0.462135  -0.0442090   0.0011234   0.000442  -0.000087   0.000057   0.000055  0.0000035  0.0000141    0.000072    0.000076
+2007   3  17  54176  -0.000920   0.463456  -0.0455277   0.0015505   0.000397  -0.000138   0.000057   0.000056  0.0000068  0.0000145    0.000068    0.000065
+2007   3  18  54177   0.001242   0.464715  -0.0472617   0.0018919   0.000340  -0.000205   0.000061   0.000058  0.0000078  0.0000144    0.000064    0.000060
+2007   3  19  54178   0.003339   0.466571  -0.0492680   0.0020625   0.000278  -0.000268   0.000060   0.000058  0.0000048  0.0000135    0.000059    0.000054
+2007   3  20  54179   0.005066   0.468923  -0.0513695   0.0020932   0.000215  -0.000325   0.000056   0.000055  0.0000014  0.0000132    0.000055    0.000049
+2007   3  21  54180   0.006386   0.470673  -0.0533968   0.0018854   0.000224  -0.000280   0.000056   0.000055  0.0000047  0.0000133    0.000055    0.000051
+2007   3  22  54181   0.006928   0.471681  -0.0551233   0.0014713   0.000256  -0.000202   0.000058   0.000057  0.0000076  0.0000133    0.000056    0.000056
+2007   3  23  54182   0.007424   0.472326  -0.0564148   0.0010635   0.000294  -0.000123   0.000057   0.000057  0.0000027  0.0000134    0.000057    0.000060
+2007   3  24  54183   0.008272   0.472986  -0.0573401   0.0008047   0.000302  -0.000118   0.000058   0.000058  0.0000112  0.0000139    0.000055    0.000059
+2007   3  25  54184   0.009515   0.473499  -0.0581059   0.0007138   0.000301  -0.000143   0.000061   0.000060  0.0000163  0.0000140    0.000053    0.000056
+2007   3  26  54185   0.010691   0.474053  -0.0588115   0.0007164   0.000301  -0.000173   0.000059   0.000060  0.0000110  0.0000133    0.000049    0.000053
+2007   3  27  54186   0.011695   0.474840  -0.0595390   0.0007956   0.000299  -0.000208   0.000056   0.000057  0.0000025  0.0000130    0.000047    0.000051
+2007   3  28  54187   0.013503   0.475563  -0.0603999   0.0009529   0.000296  -0.000218   0.000053   0.000054  0.0000051  0.0000130    0.000021    0.000020
+2007   3  29  54188   0.015718   0.476279  -0.0614417   0.0011388   0.000286  -0.000218   0.000052   0.000053  0.0000083  0.0000129    0.000015    0.000017
+2007   3  30  54189   0.018184   0.477142  -0.0626499   0.0012790   0.000288  -0.000240   0.000053   0.000055  0.0000030  0.0000129    0.000058    0.000062
+2007   3  31  54190   0.020398   0.478082  -0.0639645   0.0013597   0.000282  -0.000249   0.000055   0.000057  0.0000063  0.0000135    0.000067    0.000070
+2007   4   1  54191   0.022670   0.478818  -0.0653639   0.0014826   0.000273  -0.000251   0.000054   0.000056  0.0000093  0.0000135    0.000056    0.000059
+2007   4   2  54192   0.025242   0.479676  -0.0668704   0.0015526   0.000264  -0.000253   0.000050   0.000052  0.0000064  0.0000127    0.000047    0.000048
+2007   4   3  54193   0.027971   0.480733  -0.0684405   0.0015687   0.000255  -0.000255   0.000047   0.000049  0.0000016  0.0000124    0.000037    0.000038
+2007   4   4  54194   0.030694   0.482079  -0.0699774   0.0015070   0.000250  -0.000266   0.000047   0.000049  0.0000013  0.0000124    0.000063    0.000074
+2007   4   5  54195   0.033227   0.483135  -0.0714209   0.0013774   0.000247  -0.000280   0.000048   0.000050  0.0000021  0.0000123    0.000099    0.000122
+2007   4   6  54196   0.035739   0.484209  -0.0727562   0.0012824   0.000252  -0.000294   0.000047   0.000049  0.0000039  0.0000123    0.000100    0.000122
+2007   4   7  54197   0.038133   0.485188  -0.0740162   0.0012154   0.000260  -0.000306   0.000049   0.000051  0.0000059  0.0000125    0.000088    0.000105
+2007   4   8  54198   0.040104   0.485964  -0.0752503   0.0012231   0.000267  -0.000313   0.000049   0.000051  0.0000087  0.0000116    0.000075    0.000088
+2007   4   9  54199   0.041475   0.486690  -0.0764626   0.0012079   0.000271  -0.000314   0.000046   0.000048  0.0000076  0.0000103    0.000063    0.000071
+2007   4  10  54200   0.042605   0.487335  -0.0776617   0.0011898   0.000273  -0.000310   0.000046   0.000047  0.0000044  0.0000102    0.000050    0.000054
+2007   4  11  54201   0.044067   0.487743  -0.0788988   0.0012841   0.000272  -0.000302   0.000044   0.000046  0.0000012  0.0000101    0.000038    0.000037
+2007   4  12  54202   0.045538   0.488424  -0.0802589   0.0014526   0.000228  -0.000307   0.000043   0.000044  0.0000011  0.0000101    0.000355    0.000263
+2007   4  13  54203   0.046991   0.488844  -0.0818511   0.0017582   0.000187  -0.000235   0.000044   0.000045  0.0000017  0.0000103    0.000183    0.000157
+2007   4  14  54204   0.048753   0.489248  -0.0837457   0.0020379   0.000187  -0.000185   0.000046   0.000046  0.0000066  0.0000106    0.000114    0.000116
+2007   4  15  54205   0.050412   0.489652  -0.0858758   0.0022216   0.000203  -0.000158   0.000048   0.000047  0.0000083  0.0000109    0.000149    0.000144
+2007   4  16  54206   0.052293   0.490083  -0.0881621   0.0023217   0.000221  -0.000137   0.000047   0.000047  0.0000092  0.0000105    0.000184    0.000172
+2007   4  17  54207   0.054284   0.490405  -0.0904234   0.0021391   0.000243  -0.000125   0.000046   0.000045  0.0000090  0.0000101    0.000218    0.000200
+2007   4  18  54208   0.056324   0.490410  -0.0924264   0.0018336   0.000150  -0.000275   0.000045   0.000044  0.0000027  0.0000101    0.000074    0.000068
+2007   4  19  54209   0.058146   0.490328  -0.0940600   0.0014215   0.000162  -0.000313   0.000045   0.000044  0.0000014  0.0000100    0.000051    0.000053
+2007   4  20  54210   0.059799   0.490366  -0.0953088   0.0010390   0.000206  -0.000315   0.000046   0.000044  0.0000014  0.0000099    0.000064    0.000072
+2007   4  21  54211   0.061260   0.490390  -0.0962538   0.0008347   0.000229  -0.000297   0.000047   0.000046  0.0000050  0.0000102    0.000063    0.000070
+2007   4  22  54212   0.062618   0.490349  -0.0970535   0.0007949   0.000244  -0.000269   0.000052   0.000051  0.0000079  0.0000108    0.000056    0.000060
+2007   4  23  54213   0.063804   0.490397  -0.0978740   0.0008611   0.000256  -0.000238   0.000054   0.000053  0.0000058  0.0000106    0.000050    0.000050
+2007   4  24  54214   0.065283   0.490414  -0.0987975   0.0009719   0.000265  -0.000208   0.000052   0.000051  0.0000015  0.0000103    0.000043    0.000041
+2007   4  25  54215   0.066868   0.490405  -0.0998347   0.0011060   0.000241  -0.000246   0.000051   0.000050  0.0000059  0.0000102    0.000033    0.000033
+2007   4  26  54216   0.068904   0.490537  -0.1010071   0.0012676   0.000207  -0.000302   0.000051   0.000049  0.0000100  0.0000099    0.000021    0.000025
+2007   4  27  54217   0.071034   0.490958  -0.1023285   0.0014144   0.000212  -0.000333   0.000051   0.000049  0.0000046  0.0000100    0.000092    0.000123
+2007   4  28  54218   0.073084   0.491195  -0.1037705   0.0014895   0.000213  -0.000330   0.000054   0.000051  0.0000084  0.0000106    0.000109    0.000146
+2007   4  29  54219   0.075218   0.491176  -0.1052440   0.0014927   0.000211  -0.000315   0.000052   0.000050  0.0000098  0.0000108    0.000097    0.000128
+2007   4  30  54220   0.077167   0.491128  -0.1066901   0.0014344   0.000214  -0.000301   0.000047   0.000046  0.0000098  0.0000102    0.000084    0.000110
+2007   5   1  54221   0.079116   0.491034  -0.1080602   0.0013162   0.000221  -0.000287   0.000046   0.000045  0.0000096  0.0000099    0.000071    0.000092
+2007   5   2  54222   0.080886   0.490906  -0.1093027   0.0011609   0.000232  -0.000274   0.000047   0.000046  0.0000061  0.0000101    0.000058    0.000074
+2007   5   3  54223   0.082777   0.490502  -0.1103965   0.0010039   0.000245  -0.000262   0.000047   0.000046  0.0000025  0.0000102    0.000046    0.000056
+2007   5   4  54224   0.085104   0.489868  -0.1113418   0.0009060   0.000296  -0.000344   0.000046   0.000045  0.0000022  0.0000100    0.000123    0.000116
+2007   5   5  54225   0.087426   0.489225  -0.1121560   0.0007487   0.000319  -0.000369   0.000048   0.000046  0.0000067  0.0000104    0.000132    0.000121
+2007   5   6  54226   0.089574   0.488240  -0.1128759   0.0006517   0.000325  -0.000362   0.000048   0.000047  0.0000102  0.0000107    0.000109    0.000099
+2007   5   7  54227   0.091642   0.487271  -0.1135281   0.0006450   0.000323  -0.000353   0.000047   0.000046  0.0000074  0.0000104    0.000085    0.000076
+2007   5   8  54228   0.093619   0.486493  -0.1142216   0.0007994   0.000313  -0.000341   0.000045   0.000044  0.0000021  0.0000100    0.000061    0.000054
+2007   5   9  54229   0.095464   0.485848  -0.1151243   0.0010374   0.000292  -0.000332   0.000044   0.000043  0.0000072  0.0000099    0.000068    0.000064
+2007   5  10  54230   0.097408   0.484953  -0.1163124   0.0013453   0.000262  -0.000324   0.000045   0.000045  0.0000118  0.0000102    0.000084    0.000082
+2007   5  11  54231   0.099638   0.484423  -0.1178165   0.0016518   0.000227  -0.000320   0.000045   0.000045  0.0000042  0.0000104    0.000100    0.000101
+2007   5  12  54232   0.101520   0.483871  -0.1196670   0.0020123   0.000196  -0.000317   0.000045   0.000045  0.0000095  0.0000106    0.000089    0.000090
+2007   5  13  54233   0.103916   0.483180  -0.1218019   0.0022292   0.000166  -0.000318   0.000045   0.000044  0.0000099  0.0000107    0.000069    0.000067
+2007   5  14  54234   0.106519   0.482452  -0.1240286   0.0021776   0.000137  -0.000325   0.000043   0.000043  0.0000057  0.0000104    0.000049    0.000045
+2007   5  15  54235   0.109470   0.481629  -0.1261026   0.0019404   0.000112  -0.000336   0.000040   0.000041  0.0000015  0.0000101    0.000028    0.000023
+2007   5  16  54236   0.112286   0.480880  -0.1278400   0.0015543   0.000191  -0.000426   0.000040   0.000040  0.0000048  0.0000100    0.000026    0.000026
+2007   5  17  54237   0.114864   0.479914  -0.1292302   0.0012185   0.000120  -0.000487   0.000041   0.000041  0.0000079  0.0000101    0.000054    0.000047
+2007   5  18  54238   0.117150   0.479048  -0.1303365   0.0009622   0.000008  -0.000527   0.000041   0.000042  0.0000027  0.0000102    0.000089    0.000072
+2007   5  19  54239   0.119156   0.477913  -0.1311851   0.0008483   0.000001  -0.000509   0.000044   0.000044  0.0000111  0.0000104    0.000086    0.000069
+2007   5  20  54240   0.120914   0.476831  -0.1320881   0.0008590   0.000041  -0.000464   0.000044   0.000044  0.0000137  0.0000111    0.000068    0.000055
+2007   5  21  54241   0.122494   0.475463  -0.1330325   0.0009079   0.000089  -0.000410   0.000042   0.000043  0.0000085  0.0000112    0.000050    0.000041
+2007   5  22  54242   0.124366   0.473998  -0.1339405   0.0009635   0.000140  -0.000351   0.000042   0.000043  0.0000021  0.0000108    0.000032    0.000027
+2007   5  23  54243   0.126752   0.473117  -0.1349096   0.0010693   0.000318  -0.000361   0.000042   0.000043  0.0000051  0.0000108    0.000060    0.000049
+2007   5  24  54244   0.129024   0.472693  -0.1360379   0.0012192   0.000370  -0.000367   0.000044   0.000045  0.0000089  0.0000109    0.000137    0.000148
+2007   5  25  54245   0.131420   0.471865  -0.1373290   0.0013079   0.000367  -0.000369   0.000044   0.000045  0.0000062  0.0000110    0.000225    0.000267
+2007   5  26  54246   0.133724   0.470996  -0.1386277   0.0012819   0.000312  -0.000341   0.000045   0.000045  0.0000087  0.0000113    0.000414    0.000289
+2007   5  27  54247   0.135545   0.470167  -0.1398771   0.0011904   0.000235  -0.000306   0.000046   0.000047  0.0000140  0.0000114    0.000640    0.000275
+2007   5  28  54248   0.137191   0.468892  -0.1410219   0.0010942   0.000156  -0.000278   0.000045   0.000045  0.0000126  0.0000108    0.000866    0.000262
+2007   5  29  54249   0.138874   0.467418  -0.1420078   0.0009362   0.000079  -0.000255   0.000044   0.000044  0.0000077  0.0000105    0.001092    0.000248
+2007   5  30  54250   0.140842   0.465684  -0.1428215   0.0007636   0.000106  -0.000327   0.000042   0.000043  0.0000028  0.0000106    0.000282    0.000097
+2007   5  31  54251   0.143479   0.463805  -0.1434626   0.0005842   0.000223  -0.000352   0.000042   0.000043  0.0000016  0.0000108    0.000065    0.000059
+2007   6   1  54252   0.146330   0.462120  -0.1439305   0.0003281   0.000356  -0.000360   0.000043   0.000044  0.0000013  0.0000108    0.000065    0.000057
+2007   6   2  54253   0.149186   0.460407  -0.1442362   0.0001903   0.000347  -0.000368   0.000045   0.000045  0.0000099  0.0000110    0.000069    0.000059
+2007   6   3  54254   0.151589   0.458925  -0.1443769   0.0001479   0.000280  -0.000374   0.000046   0.000047  0.0000105  0.0000120    0.000074    0.000061
+2007   6   4  54255   0.153876   0.457275  -0.1445574   0.0002447   0.000206  -0.000376   0.000045   0.000046  0.0000063  0.0000123    0.000080    0.000064
+2007   6   5  54256   0.156430   0.455894  -0.1449320   0.0004494   0.000127  -0.000374   0.000043   0.000043  0.0000025  0.0000121    0.000085    0.000066
+2007   6   6  54257   0.158771   0.454676  -0.1454980   0.0006767   0.000116  -0.000362   0.000042   0.000043  0.0000081  0.0000121    0.000095    0.000084
+2007   6   7  54258   0.160571   0.453114  -0.1462691   0.0008606   0.000124  -0.000344   0.000043   0.000043  0.0000128  0.0000121    0.000106    0.000107
+2007   6   8  54259   0.162447   0.451431  -0.1472370   0.0010236   0.000134  -0.000321   0.000043   0.000044  0.0000049  0.0000123    0.000116    0.000129
+2007   6   9  54260   0.164436   0.449962  -0.1483320   0.0011213   0.000119  -0.000332   0.000044   0.000045  0.0000089  0.0000125    0.000104    0.000116
+2007   6  10  54261   0.166783   0.448608  -0.1494456   0.0011412   0.000098  -0.000353   0.000043   0.000044  0.0000091  0.0000127    0.000084    0.000090
+2007   6  11  54262   0.169184   0.447154  -0.1505327   0.0010287   0.000082  -0.000371   0.000040   0.000041  0.0000057  0.0000126    0.000064    0.000064
+2007   6  12  54263   0.171325   0.445421  -0.1514622   0.0007726   0.000069  -0.000390   0.000038   0.000039  0.0000025  0.0000126    0.000043    0.000038
+2007   6  13  54264   0.173345   0.443182  -0.1520558   0.0004327   0.000113  -0.000177   0.000038   0.000039  0.0000089  0.0000127    0.000083    0.000068
+2007   6  14  54265   0.175073   0.441187  -0.1523173   0.0001553   0.000099  -0.000130   0.000039   0.000040  0.0000140  0.0000127    0.000105    0.000088
+2007   6  15  54266   0.176633   0.439048  -0.1523591  -0.0000367   0.000066  -0.000161   0.000039   0.000040  0.0000050  0.0000125    0.000118    0.000101
+2007   6  16  54267   0.178378   0.437120  -0.1522916  -0.0000378   0.000080  -0.000206   0.000039   0.000040  0.0000068  0.0000125    0.000112    0.000096
+2007   6  17  54268   0.180311   0.435275  -0.1523014   0.0001058   0.000111  -0.000260   0.000039   0.000040  0.0000089  0.0000126    0.000099    0.000085
+2007   6  18  54269   0.182523   0.433614  -0.1524924   0.0002618   0.000142  -0.000321   0.000038   0.000039  0.0000069  0.0000121    0.000087    0.000074
+2007   6  19  54270   0.184792   0.431904  -0.1528766   0.0004641   0.000170  -0.000384   0.000037   0.000037  0.0000039  0.0000118    0.000074    0.000063
+2007   6  20  54271   0.187187   0.430635  -0.1534303   0.0006458   0.000164  -0.000395   0.000037   0.000038  0.0000054  0.0000119    0.000067    0.000060
+2007   6  21  54272   0.189378   0.429214  -0.1541236   0.0007432   0.000147  -0.000387   0.000038   0.000039  0.0000071  0.0000120    0.000060    0.000060
+2007   6  22  54273   0.191573   0.427172  -0.1548873   0.0007568   0.000127  -0.000371   0.000038   0.000039  0.0000045  0.0000121    0.000054    0.000060
+2007   6  23  54274   0.193638   0.424888  -0.1555884   0.0006878   0.000116  -0.000381   0.000039   0.000040  0.0000058  0.0000125    0.000054    0.000058
+2007   6  24  54275   0.195722   0.422830  -0.1562037   0.0005820   0.000107  -0.000395   0.000042   0.000042  0.0000073  0.0000127    0.000058    0.000056
+2007   6  25  54276   0.197993   0.420792  -0.1567183   0.0004709   0.000098  -0.000403   0.000042   0.000042  0.0000060  0.0000123    0.000060    0.000055
+2007   6  26  54277   0.200756   0.419099  -0.1570982   0.0003262   0.000089  -0.000408   0.000040   0.000040  0.0000037  0.0000119    0.000064    0.000053
+2007   6  27  54278   0.203282   0.417718  -0.1573300   0.0001656   0.000150  -0.000389   0.000039   0.000039  0.0000076  0.0000118    0.000029    0.000027
+2007   6  28  54279   0.205231   0.416353  -0.1574184   0.0000412   0.000167  -0.000318   0.000039   0.000039  0.0000111  0.0000120    0.000032    0.000027
+2007   6  29  54280   0.206743   0.414851  -0.1574081  -0.0000296   0.000140  -0.000256   0.000039   0.000040  0.0000071  0.0000121    0.000088    0.000132
+2007   6  30  54281   0.207955   0.413277  -0.1573874  -0.0000640   0.000102  -0.000279   0.000040   0.000041  0.0000081  0.0000123    0.000093    0.000146
+2007   7   1  54282   0.208667   0.411591  -0.1573282   0.0000114   0.000063  -0.000335   0.000040   0.000041  0.0000107  0.0000122    0.000076    0.000113
+2007   7   2  54283   0.209148   0.409503  -0.1573954   0.0001748   0.000027  -0.000397   0.000038   0.000039  0.0000078  0.0000119    0.000057    0.000081
+2007   7   3  54284   0.209776   0.407201  -0.1577279   0.0004324  -0.000006  -0.000459   0.000036   0.000037  0.0000023  0.0000116    0.000039    0.000048
+2007   7   4  54285   0.210733   0.405063  -0.1582992   0.0006640   0.000020  -0.000546   0.000036   0.000037  0.0000019  0.0000117    0.000098    0.000073
+2007   7   5  54286   0.211810   0.403024  -0.1590736   0.0008312   0.000059  -0.000526   0.000037   0.000038  0.0000029  0.0000116    0.000113    0.000103
+2007   7   6  54287   0.213132   0.400819  -0.1599885   0.0009343   0.000099  -0.000465   0.000036   0.000038  0.0000039  0.0000116    0.000108    0.000129
+2007   7   7  54288   0.214347   0.398611  -0.1609436   0.0009481   0.000093  -0.000433   0.000037   0.000039  0.0000084  0.0000119    0.000094    0.000117
+2007   7   8  54289   0.215167   0.396254  -0.1618176   0.0007583   0.000068  -0.000411   0.000038   0.000039  0.0000088  0.0000114    0.000076    0.000090
+2007   7   9  54290   0.215843   0.393704  -0.1624499   0.0004980   0.000039  -0.000387   0.000037   0.000038  0.0000057  0.0000107    0.000057    0.000063
+2007   7  10  54291   0.216686   0.391045  -0.1627729   0.0002170   0.000008  -0.000363   0.000035   0.000036  0.0000020  0.0000104    0.000038    0.000036
+2007   7  11  54292   0.217696   0.388252  -0.1628350  -0.0000258   0.000022  -0.000488   0.000034   0.000035  0.0000051  0.0000106    0.000024    0.000025
+2007   7  12  54293   0.218496   0.385721  -0.1627151  -0.0001966   0.000036  -0.000448   0.000035   0.000036  0.0000095  0.0000107    0.000025    0.000027
+2007   7  13  54294   0.219487   0.383102  -0.1624652  -0.0002842   0.000046  -0.000352   0.000035   0.000036  0.0000113  0.0000106    0.000031    0.000031
+2007   7  14  54295   0.220791   0.380447  -0.1621636  -0.0002555   0.000024  -0.000357   0.000035   0.000037  0.0000101  0.0000108    0.000040    0.000037
+2007   7  15  54296   0.222027   0.377823  -0.1619942  -0.0000967  -0.000008  -0.000403   0.000035   0.000037  0.0000084  0.0000101    0.000049    0.000044
+2007   7  16  54297   0.223201   0.375355  -0.1619810   0.0000812  -0.000039  -0.000451   0.000034   0.000035  0.0000062  0.0000091    0.000058    0.000050
+2007   7  17  54298   0.224564   0.372907  -0.1621530   0.0002454  -0.000065  -0.000501   0.000033   0.000035  0.0000022  0.0000091    0.000068    0.000057
+2007   7  18  54299   0.225900   0.370451  -0.1624808   0.0003499  -0.000057  -0.000482   0.000033   0.000035  0.0000071  0.0000091    0.000078    0.000065
+2007   7  19  54300   0.227087   0.367946  -0.1628825   0.0004093  -0.000034  -0.000444   0.000033   0.000035  0.0000113  0.0000091    0.000089    0.000074
+2007   7  20  54301   0.227877   0.365360  -0.1632633   0.0003360  -0.000005  -0.000406   0.000034   0.000035  0.0000045  0.0000092    0.000099    0.000083
+2007   7  21  54302   0.228543   0.362509  -0.1635526   0.0002363   0.000001  -0.000419   0.000035   0.000036  0.0000057  0.0000094    0.000093    0.000078
+2007   7  22  54303   0.229147   0.359686  -0.1637170   0.0000873   0.000000  -0.000453   0.000036   0.000036  0.0000090  0.0000097    0.000081    0.000068
+2007   7  23  54304   0.229727   0.356968  -0.1637157  -0.0000895   0.000004  -0.000484   0.000035   0.000035  0.0000071  0.0000097    0.000069    0.000059
+2007   7  24  54305   0.230153   0.355035  -0.1635162  -0.0002743   0.000009  -0.000512   0.000033   0.000034  0.0000030  0.0000095    0.000057    0.000049
+2007   7  25  54306   0.230252   0.352870  -0.1631221  -0.0004747   0.000057  -0.000508   0.000033   0.000035  0.0000065  0.0000095    0.000261    0.000538
+2007   7  26  54307   0.230271   0.350603  -0.1625766  -0.0005957   0.000142  -0.000487   0.000034   0.000035  0.0000096  0.0000095    0.000234    0.000453
+2007   7  27  54308   0.230082   0.348410  -0.1619543  -0.0006186   0.000228  -0.000459   0.000034   0.000036  0.0000036  0.0000096    0.000119    0.000154
+2007   7  28  54309   0.229186   0.345796  -0.1613507  -0.0005467   0.000217  -0.000435   0.000035   0.000037  0.0000060  0.0000097    0.000082    0.000069
+2007   7  29  54310   0.228567   0.342828  -0.1609283  -0.0003271   0.000161  -0.000414   0.000036   0.000038  0.0000090  0.0000104    0.000074    0.000062
+2007   7  30  54311   0.228168   0.339979  -0.1607478  -0.0000737   0.000094  -0.000393   0.000035   0.000036  0.0000070  0.0000106    0.000066    0.000055
+2007   7  31  54312   0.227612   0.337021  -0.1608235   0.0002135   0.000020  -0.000374   0.000033   0.000035  0.0000031  0.0000103    0.000058    0.000048
+2007   8   1  54313   0.227077   0.334164  -0.1611753   0.0004761   0.000001  -0.000269   0.000033   0.000034  0.0000071  0.0000105    0.000043    0.000040
+2007   8   2  54314   0.226656   0.331463  -0.1618072   0.0007015  -0.000040  -0.000294   0.000033   0.000034  0.0000107  0.0000104    0.000028    0.000028
+2007   8   3  54315   0.226343   0.329080  -0.1626141   0.0008066  -0.000090  -0.000419   0.000033   0.000034  0.0000046  0.0000103    0.000084    0.000074
+2007   8   4  54316   0.225970   0.326461  -0.1633424   0.0006911  -0.000101  -0.000433   0.000034   0.000035  0.0000081  0.0000106    0.000105    0.000091
+2007   8   5  54317   0.225377   0.323593  -0.1639504   0.0004874  -0.000089  -0.000399   0.000034   0.000035  0.0000128  0.0000110    0.000107    0.000090
+2007   8   6  54318   0.224141   0.320914  -0.1643159   0.0001968  -0.000065  -0.000364   0.000033   0.000034  0.0000102  0.0000108    0.000108    0.000089
+2007   8   7  54319   0.222876   0.318462  -0.1643529  -0.0000851  -0.000034  -0.000329   0.000031   0.000032  0.0000045  0.0000107    0.000109    0.000088
+2007   8   8  54320   0.221439   0.316022  -0.1641321  -0.0003133   0.000056  -0.000259   0.000031   0.000032  0.0000096  0.0000106    0.000088    0.000069
+2007   8   9  54321   0.219705   0.313369  -0.1637396  -0.0004315   0.000156  -0.000185   0.000032   0.000033  0.0000138  0.0000106    0.000062    0.000046
+2007   8  10  54322   0.218139   0.310856  -0.1632841  -0.0004433   0.000133  -0.000331   0.000032   0.000033  0.0000042  0.0000107    0.000054    0.000045
+2007   8  11  54323   0.217302   0.308214  -0.1628999  -0.0003051   0.000093  -0.000380   0.000033   0.000034  0.0000064  0.0000110    0.000054    0.000048
+2007   8  12  54324   0.216949   0.305710  -0.1627255  -0.0000721   0.000054  -0.000364   0.000036   0.000036  0.0000088  0.0000112    0.000055    0.000050
+2007   8  13  54325   0.216685   0.303255  -0.1627401   0.0000741   0.000006  -0.000345   0.000036   0.000036  0.0000064  0.0000110    0.000056    0.000051
+2007   8  14  54326   0.216284   0.301048  -0.1628867   0.0001795  -0.000046  -0.000323   0.000035   0.000036  0.0000025  0.0000110    0.000057    0.000052
+2007   8  15  54327   0.215428   0.299030  -0.1631384   0.0002495  -0.000071  -0.000300   0.000036   0.000037  0.0000066  0.0000112    0.000068    0.000062
+2007   8  16  54328   0.214172   0.297344  -0.1634081   0.0002541  -0.000084  -0.000278   0.000036   0.000037  0.0000103  0.0000112    0.000083    0.000073
+2007   8  17  54329   0.212729   0.295461  -0.1636358   0.0002284  -0.000090  -0.000257   0.000036   0.000036  0.0000042  0.0000111    0.000097    0.000085
+2007   8  18  54330   0.211570   0.292755  -0.1638501   0.0001897  -0.000088  -0.000252   0.000037   0.000037  0.0000062  0.0000114    0.000089    0.000077
+2007   8  19  54331   0.210920   0.289907  -0.1639851   0.0000945  -0.000078  -0.000256   0.000036   0.000036  0.0000097  0.0000114    0.000071    0.000063
+2007   8  20  54332   0.210428   0.286899  -0.1639883  -0.0000488  -0.000064  -0.000268   0.000033   0.000033  0.0000072  0.0000109    0.000053    0.000048
+2007   8  21  54333   0.210284   0.284219  -0.1638460  -0.0002093  -0.000048  -0.000285   0.000031   0.000032  0.0000020  0.0000106    0.000036    0.000033
+2007   8  22  54334   0.209624   0.282027  -0.1635525  -0.0003649  -0.000049  -0.000315   0.000032   0.000032  0.0000071  0.0000106    0.000039    0.000035
+2007   8  23  54335   0.208382   0.279627  -0.1631162  -0.0004481  -0.000057  -0.000349   0.000032   0.000032  0.0000116  0.0000106    0.000048    0.000041
+2007   8  24  54336   0.206603   0.277322  -0.1626067  -0.0004860  -0.000069  -0.000381   0.000033   0.000033  0.0000040  0.0000106    0.000056    0.000047
+2007   8  25  54337   0.204784   0.274940  -0.1621772  -0.0003663  -0.000068  -0.000396   0.000034   0.000035  0.0000080  0.0000111    0.000056    0.000049
+2007   8  26  54338   0.203039   0.272523  -0.1618969  -0.0001535  -0.000066  -0.000400   0.000037   0.000036  0.0000148  0.0000114    0.000054    0.000047
+2007   8  27  54339   0.201826   0.270315  -0.1618765   0.0001493  -0.000070  -0.000395   0.000037   0.000036  0.0000119  0.0000109    0.000051    0.000046
+2007   8  28  54340   0.200964   0.268564  -0.1621998   0.0004572  -0.000078  -0.000381   0.000035   0.000034  0.0000047  0.0000105    0.000048    0.000045
+2007   8  29  54341   0.200102   0.266958  -0.1628430   0.0007434  -0.000120  -0.000363   0.000035   0.000034  0.0000091  0.0000105    0.000062    0.000056
+2007   8  30  54342   0.199408   0.265438  -0.1637193   0.0009405  -0.000169  -0.000340   0.000035   0.000034  0.0000133  0.0000106    0.000081    0.000071
+2007   8  31  54343   0.198692   0.263764  -0.1646950   0.0009827  -0.000211  -0.000315   0.000036   0.000035  0.0000047  0.0000107    0.000100    0.000085
+2007   9   1  54344   0.197889   0.261802  -0.1656257   0.0008779  -0.000229  -0.000274   0.000037   0.000036  0.0000089  0.0000109    0.000113    0.000090
+2007   9   2  54345   0.196728   0.259809  -0.1663916   0.0006356  -0.000228  -0.000233   0.000038   0.000036  0.0000098  0.0000101    0.000125    0.000091
+2007   9   3  54346   0.195372   0.257715  -0.1668880   0.0003654  -0.000214  -0.000196   0.000036   0.000034  0.0000065  0.0000087    0.000136    0.000093
+2007   9   4  54347   0.194058   0.255859  -0.1671151   0.0001322  -0.000189  -0.000168   0.000035   0.000034  0.0000037  0.0000085    0.000146    0.000094
+2007   9   5  54348   0.192607   0.253720  -0.1671802   0.0000259  -0.000089  -0.000226   0.000034   0.000034  0.0000012  0.0000088    0.000047    0.000038
+2007   9   6  54349   0.190661   0.251812  -0.1672233   0.0000563  -0.000025  -0.000224   0.000034   0.000034  0.0000011  0.0000087    0.000039    0.000036
+2007   9   7  54350   0.188489   0.249659  -0.1673534   0.0001966   0.000025  -0.000206   0.000034   0.000034  0.0000016  0.0000086    0.000054    0.000050
+2007   9   8  54351   0.186962   0.247674  -0.1676392   0.0004029   0.000047  -0.000217   0.000036   0.000035  0.0000082  0.0000089    0.000052    0.000048
+2007   9   9  54352   0.185578   0.245984  -0.1681456   0.0005962   0.000050  -0.000235   0.000035   0.000034  0.0000103  0.0000093    0.000044    0.000040
+2007   9  10  54353   0.184334   0.244362  -0.1688568   0.0007598   0.000036  -0.000246   0.000031   0.000031  0.0000141  0.0000094    0.000035    0.000033
+2007   9  11  54354   0.182894   0.242540  -0.1697096   0.0008647   0.000010  -0.000249   0.000030   0.000030  0.0000185  0.0000093    0.000027    0.000026
+2007   9  12  54355   0.181069   0.240476  -0.1706217   0.0009202   0.000024  -0.000239   0.000030   0.000030  0.0000187  0.0000093    0.000021    0.000021
+2007   9  13  54356   0.179307   0.238380  -0.1715315   0.0009282  -0.000044  -0.000175   0.000030   0.000030  0.0000157  0.0000093    0.000017    0.000020
+2007   9  14  54357   0.177356   0.236321  -0.1724365   0.0008207  -0.000163  -0.000087   0.000030   0.000030  0.0000050  0.0000093    0.000079    0.000094
+2007   9  15  54358   0.175171   0.234163  -0.1732356   0.0007118  -0.000205  -0.000050   0.000031   0.000030  0.0000105  0.0000096    0.000091    0.000107
+2007   9  16  54359   0.172387   0.232226  -0.1738623   0.0005471  -0.000206  -0.000040   0.000032   0.000032  0.0000124  0.0000105    0.000076    0.000088
+2007   9  17  54360   0.169684   0.230225  -0.1743491   0.0004297  -0.000192  -0.000041   0.000032   0.000032  0.0000077  0.0000110    0.000061    0.000068
+2007   9  18  54361   0.167291   0.228502  -0.1747133   0.0002933  -0.000164  -0.000056   0.000030   0.000031  0.0000022  0.0000109    0.000046    0.000049
+2007   9  19  54362   0.165214   0.226588  -0.1749552   0.0002279  -0.000177  -0.000029   0.000030   0.000030  0.0000090  0.0000108    0.000135    0.000176
+2007   9  20  54363   0.163178   0.224739  -0.1751740   0.0002690  -0.000092  -0.000092   0.000030   0.000030  0.0000148  0.0000106    0.000125    0.000159
+2007   9  21  54364   0.160541   0.222912  -0.1754809   0.0003503   0.000021  -0.000190   0.000030   0.000031  0.0000043  0.0000108    0.000077    0.000086
+2007   9  22  54365   0.157614   0.221033  -0.1759207   0.0005468   0.000054  -0.000237   0.000030   0.000031  0.0000093  0.0000112    0.000062    0.000063
+2007   9  23  54366   0.154794   0.219556  -0.1766020   0.0008170   0.000047  -0.000261   0.000034   0.000035  0.0000105  0.0000112    0.000058    0.000057
+2007   9  24  54367   0.151731   0.217971  -0.1775422   0.0010805   0.000026  -0.000277   0.000036   0.000037  0.0000065  0.0000108    0.000054    0.000051
+2007   9  25  54368   0.149038   0.216233  -0.1787880   0.0014439  -0.000007  -0.000283   0.000034   0.000035  0.0000024  0.0000106    0.000051    0.000045
+2007   9  26  54369   0.146593   0.214832  -0.1803858   0.0016875  -0.000083  -0.000275   0.000034   0.000035  0.0000131  0.0000106    0.000072    0.000065
+2007   9  27  54370   0.144021   0.212963  -0.1821284   0.0017032  -0.000167  -0.000257   0.000034   0.000035  0.0000217  0.0000107    0.000101    0.000090
+2007   9  28  54371   0.141570   0.211104  -0.1837531   0.0015425  -0.000243  -0.000232   0.000034   0.000036  0.0000070  0.0000110    0.000130    0.000116
+2007   9  29  54372   0.138668   0.209499  -0.1851632   0.0012827  -0.000240  -0.000208   0.000035   0.000037  0.0000084  0.0000112    0.000119    0.000107
+2007   9  30  54373   0.136108   0.207710  -0.1862953   0.0009820  -0.000196  -0.000184   0.000032   0.000033  0.0000153  0.0000111    0.000094    0.000085
+2007  10   1  54374   0.133642   0.206412  -0.1871188   0.0007047  -0.000138  -0.000161   0.000027   0.000029  0.0000117  0.0000107    0.000068    0.000064
+2007  10   2  54375   0.130549   0.205211  -0.1877115   0.0005482  -0.000070  -0.000139   0.000027   0.000028  0.0000029  0.0000106    0.000043    0.000042
+2007  10   3  54376   0.127579   0.203917  -0.1882182   0.0005268  -0.000022  -0.000133   0.000027   0.000028  0.0000020  0.0000106    0.000097    0.000092
+2007  10   4  54377   0.124559   0.202842  -0.1887492   0.0005553   0.000018  -0.000131   0.000027   0.000028  0.0000030  0.0000102    0.000173    0.000160
+2007  10   5  54378   0.121552   0.201577  -0.1893653   0.0006597   0.000049  -0.000132   0.000027   0.000028  0.0000041  0.0000101    0.000249    0.000229
+2007  10   6  54379   0.118617   0.200468  -0.1900915   0.0007850   0.000062  -0.000125   0.000027   0.000029  0.0000074  0.0000103    0.000235    0.000215
+2007  10   7  54380   0.115677   0.199296  -0.1909558   0.0009177   0.000058  -0.000114   0.000026   0.000027  0.0000139  0.0000099    0.000189    0.000172
+2007  10   8  54381   0.112855   0.198178  -0.1919415   0.0010329   0.000041  -0.000105   0.000023   0.000024  0.0000117  0.0000093    0.000142    0.000128
+2007  10   9  54382   0.109772   0.197509  -0.1929873   0.0010574   0.000013  -0.000096   0.000023   0.000023  0.0000065  0.0000093    0.000095    0.000084
+2007  10  10  54383   0.106664   0.196705  -0.1940611   0.0011008  -0.000021  -0.000089   0.000022   0.000023  0.0000021  0.0000093    0.000049    0.000040
+2007  10  11  54384   0.103301   0.195917  -0.1951414   0.0010532  -0.000122  -0.000080   0.000022   0.000023  0.0000017  0.0000091    0.000021    0.000022
+2007  10  12  54385   0.100231   0.194948  -0.1961571   0.0009275  -0.000167  -0.000040   0.000022   0.000023  0.0000024  0.0000089    0.000101    0.000102
+2007  10  13  54386   0.097534   0.194249  -0.1970241   0.0007821  -0.000171  -0.000042   0.000022   0.000023  0.0000062  0.0000090    0.000117    0.000116
+2007  10  14  54387   0.094890   0.193508  -0.1976945   0.0005905  -0.000159  -0.000067   0.000026   0.000026  0.0000106  0.0000091    0.000099    0.000097
+2007  10  15  54388   0.092057   0.192906  -0.1982262   0.0004630  -0.000137  -0.000096   0.000028   0.000029  0.0000113  0.0000092    0.000080    0.000078
+2007  10  16  54389   0.088965   0.192523  -0.1986575   0.0004006  -0.000108  -0.000129   0.000028   0.000029  0.0000085  0.0000091    0.000061    0.000058
+2007  10  17  54390   0.085864   0.192080  -0.1990340   0.0004275  -0.000073  -0.000161   0.000028   0.000028  0.0000024  0.0000089    0.000043    0.000039
+2007  10  18  54391   0.083020   0.191808  -0.1994751   0.0005046  -0.000049  -0.000205   0.000028   0.000028  0.0000020  0.0000091    0.000070    0.000083
+2007  10  19  54392   0.079872   0.191411  -0.2000378   0.0006465  -0.000051  -0.000208   0.000028   0.000029  0.0000032  0.0000092    0.000150    0.000153
+2007  10  20  54393   0.076682   0.190963  -0.2007483   0.0008548  -0.000054  -0.000206   0.000029   0.000030  0.0000077  0.0000093    0.000150    0.000148
+2007  10  21  54394   0.073409   0.190477  -0.2016753   0.0010285  -0.000056  -0.000202   0.000032   0.000033  0.0000121  0.0000096    0.000117    0.000115
+2007  10  22  54395   0.070790   0.190068  -0.2028272   0.0012591  -0.000064  -0.000191   0.000033   0.000033  0.0000090  0.0000096    0.000084    0.000081
+2007  10  23  54396   0.068615   0.190111  -0.2042169   0.0015281  -0.000076  -0.000176   0.000032   0.000032  0.0000026  0.0000096    0.000051    0.000048
+2007  10  24  54397   0.066464   0.190334  -0.2058375   0.0016937  -0.000056  -0.000120   0.000032   0.000032  0.0000069  0.0000096    0.000039    0.000036
+2007  10  25  54398   0.064097   0.190374  -0.2075312   0.0016209  -0.000027  -0.000056   0.000032   0.000031  0.0000113  0.0000094    0.000032    0.000030
+2007  10  26  54399   0.061621   0.190035  -0.2090619   0.0013830  -0.000089  -0.000100   0.000032   0.000032  0.0000047  0.0000095    0.000108    0.000109
+2007  10  27  54400   0.058847   0.190141  -0.2102336   0.0009955  -0.000120  -0.000116   0.000033   0.000033  0.0000063  0.0000097    0.000116    0.000118
+2007  10  28  54401   0.056248   0.190150  -0.2110456   0.0006981  -0.000124  -0.000111   0.000043   0.000043  0.0000111  0.0000094    0.000089    0.000089
+2007  10  29  54402   0.053450   0.190374  -0.2116465   0.0005284  -0.000122  -0.000112   0.000050   0.000051  0.0000084  0.0000086    0.000062    0.000061
+2007  10  30  54403   0.050657   0.190593  -0.2121547   0.0004864  -0.000114  -0.000115   0.000047   0.000048  0.0000020  0.0000084    0.000035    0.000033
+2007  10  31  54404   0.047807   0.190934  -0.2126391   0.0005239  -0.000013  -0.000110   0.000047   0.000048  0.0000021  0.0000083    0.000093    0.000090
+2007  11   1  54405   0.044802   0.190968  -0.2132007   0.0006015   0.000024  -0.000129   0.000048   0.000049  0.0000032  0.0000082    0.000105    0.000102
+2007  11   2  54406   0.042326   0.191031  -0.2138986   0.0007602   0.000025  -0.000152   0.000049   0.000050  0.0000042  0.0000086    0.000092    0.000088
+2007  11   3  54407   0.040299   0.191393  -0.2147339   0.0009140   0.000022  -0.000166   0.000050   0.000051  0.0000053  0.0000087    0.000079    0.000075
+2007  11   4  54408   0.038287   0.192083  -0.2157192   0.0010045   0.000011  -0.000168   0.000055   0.000056  0.0000064  0.0000094    0.000066    0.000061
+2007  11   5  54409   0.035913   0.192542  -0.2167596   0.0010192  -0.000005  -0.000161   0.000057   0.000057  0.0000046  0.0000101    0.000053    0.000048
+2007  11   6  54410   0.034034   0.192710  -0.2177909   0.0010379  -0.000027  -0.000147   0.000052   0.000052  0.0000016  0.0000097    0.000039    0.000034
+2007  11   7  54411   0.032337   0.193084  -0.2188507   0.0010592  -0.000017   0.000099   0.000051   0.000051  0.0000042  0.0000095    0.000042    0.000039
+2007  11   8  54412   0.030201   0.193182  -0.2199011   0.0009943  -0.000034   0.000224   0.000053   0.000054  0.0000067  0.0000097    0.000046    0.000041
+2007  11   9  54413   0.027845   0.193415  -0.2208470   0.0008504  -0.000057   0.000144   0.000054   0.000055  0.0000034  0.0000099    0.000097    0.000088
+2007  11  10  54414   0.025297   0.193403  -0.2215897   0.0006381  -0.000071   0.000097   0.000056   0.000056  0.0000078  0.0000099    0.000096    0.000089
+2007  11  11  54415   0.022788   0.193494  -0.2221694   0.0004914  -0.000080   0.000075   0.000055   0.000056  0.0000124  0.0000096    0.000072    0.000066
+2007  11  12  54416   0.020048   0.194093  -0.2225887   0.0003641  -0.000083   0.000044   0.000051   0.000053  0.0000099  0.0000091    0.000047    0.000044
+2007  11  13  54417   0.016992   0.194641  -0.2229075   0.0003289  -0.000083   0.000011   0.000049   0.000050  0.0000062  0.0000091    0.000023    0.000021
+2007  11  14  54418   0.014110   0.194867  -0.2232626   0.0003912  -0.000080   0.000045   0.000049   0.000049  0.0000068  0.0000091    0.000039    0.000039
+2007  11  15  54419   0.011131   0.195417  -0.2237498   0.0005860  -0.000029   0.000100   0.000049   0.000050  0.0000051  0.0000090    0.000043    0.000044
+2007  11  16  54420   0.007934   0.196021  -0.2244471   0.0008663   0.000042   0.000130   0.000049   0.000051  0.0000035  0.0000089    0.000164    0.000151
+2007  11  17  54421   0.004603   0.196329  -0.2254121   0.0011235   0.000038   0.000104   0.000051   0.000052  0.0000075  0.0000089    0.000171    0.000157
+2007  11  18  54422   0.001420   0.196935  -0.2266925   0.0014098   0.000003   0.000063   0.000055   0.000055  0.0000112  0.0000088    0.000123    0.000112
+2007  11  19  54423  -0.001540   0.198092  -0.2282755   0.0017007  -0.000033   0.000023   0.000057   0.000057  0.0000090  0.0000087    0.000073    0.000067
+2007  11  20  54424  -0.004170   0.199343  -0.2301000   0.0019269  -0.000068  -0.000014   0.000054   0.000054  0.0000051  0.0000087    0.000024    0.000023
+2007  11  21  54425  -0.006931   0.200727  -0.2320770   0.0019880  -0.000061   0.000019   0.000053   0.000054  0.0000033  0.0000087    0.000170    0.000139
+2007  11  22  54426  -0.009434   0.202194  -0.2340882   0.0019235  -0.000012   0.000073   0.000055   0.000055  0.0000042  0.0000086    0.000185    0.000181
+2007  11  23  54427  -0.011855   0.203741  -0.2359611   0.0017155   0.000052   0.000127   0.000056   0.000056  0.0000061  0.0000085    0.000133    0.000178
+2007  11  24  54428  -0.014831   0.204426  -0.2375404   0.0014174   0.000057   0.000106   0.000058   0.000058  0.0000080  0.0000085    0.000111    0.000145
+2007  11  25  54429  -0.018109   0.204807  -0.2387708   0.0011084   0.000065   0.000079   0.000062   0.000061  0.0000128  0.0000087    0.000088    0.000112
+2007  11  26  54430  -0.020854   0.205098  -0.2397656   0.0009360   0.000074   0.000048   0.000062   0.000062  0.0000099  0.0000087    0.000066    0.000079
+2007  11  27  54431  -0.022937   0.205827  -0.2406821   0.0009137   0.000080   0.000012   0.000058   0.000058  0.0000023  0.0000085    0.000043    0.000046
+2007  11  28  54432  -0.025292   0.206908  -0.2416430   0.0010341   0.000073   0.000006   0.000056   0.000056  0.0000009  0.0000084    0.000023    0.000021
+2007  11  29  54433  -0.027238   0.208121  -0.2427518   0.0012234   0.000147  -0.000015   0.000058   0.000058  0.0000011  0.0000084    0.000066    0.000054
+2007  11  30  54434  -0.028654   0.209483  -0.2440575   0.0014141   0.000239  -0.000040   0.000060   0.000060  0.0000013  0.0000082    0.000126    0.000104
+2007  12   1  54435  -0.029571   0.211038  -0.2455426   0.0015403   0.000220  -0.000055   0.000062   0.000062  0.0000057  0.0000084    0.000121    0.000100
+2007  12   2  54436  -0.030665   0.212616  -0.2471207   0.0015981   0.000154  -0.000062   0.000061   0.000060  0.0000088  0.0000094    0.000091    0.000075
+2007  12   3  54437  -0.032011   0.214108  -0.2487223   0.0015768   0.000081  -0.000062   0.000057   0.000057  0.0000063  0.0000101    0.000062    0.000051
+2007  12   4  54438  -0.033982   0.215819  -0.2502501   0.0014303   0.000005  -0.000057   0.000054   0.000055  0.0000017  0.0000100    0.000033    0.000027
+2007  12   5  54439  -0.036745   0.217099  -0.2515831   0.0012072  -0.000037   0.000004   0.000054   0.000054  0.0000078  0.0000101    0.000188    0.000198
+2007  12   6  54440  -0.039638   0.218546  -0.2526674   0.0009601  -0.000035   0.000035   0.000055   0.000054  0.0000135  0.0000101    0.000072    0.000074
+2007  12   7  54441  -0.042381   0.219779  -0.2534954   0.0006958  -0.000013   0.000018   0.000054   0.000054  0.0000066  0.0000102    0.000251    0.000218
+2007  12   8  54442  -0.044496   0.221118  -0.2540766   0.0004568  -0.000014   0.000003   0.000057   0.000057  0.0000063  0.0000103    0.000278    0.000243
+2007  12   9  54443  -0.046267   0.222350  -0.2544414   0.0002763  -0.000021  -0.000005   0.000052   0.000052  0.0000065  0.0000105    0.000202    0.000177
+2007  12  10  54444  -0.047646   0.223936  -0.2546488   0.0001917  -0.000026  -0.000017   0.000044   0.000045  0.0000043  0.0000103    0.000126    0.000111
+2007  12  11  54445  -0.049102   0.225443  -0.2548073   0.0001863  -0.000031  -0.000029   0.000042   0.000043  0.0000014  0.0000100    0.000050    0.000045
+2007  12  12  54446  -0.050276   0.226607  -0.2550371   0.0003122   0.000014   0.000053   0.000043   0.000043  0.0000054  0.0000102    0.000106    0.000152
+2007  12  13  54447  -0.051597   0.227743  -0.2553923   0.0004504   0.000051   0.000082   0.000044   0.000045  0.0000089  0.0000104    0.000053    0.000062
+2007  12  14  54448  -0.053127   0.228791  -0.2559056   0.0006382  -0.000018  -0.000005   0.000044   0.000045  0.0000035  0.0000105    0.000087    0.000073
+2007  12  15  54449  -0.054631   0.230211  -0.2566352   0.0008512  -0.000067  -0.000027   0.000046   0.000046  0.0000068  0.0000107    0.000094    0.000079
+2007  12  16  54450  -0.056161   0.231783  -0.2576207   0.0011189  -0.000095  -0.000014   0.000043   0.000043  0.0000070  0.0000108    0.000075    0.000063
+2007  12  17  54451  -0.057527   0.233337  -0.2588261   0.0012931  -0.000119  -0.000004   0.000038   0.000038  0.0000041  0.0000105    0.000056    0.000046
+2007  12  18  54452  -0.058887   0.235019  -0.2601477   0.0013436  -0.000136   0.000004   0.000036   0.000036  0.0000012  0.0000102    0.000037    0.000030
+2007  12  19  54453  -0.060001   0.236260  -0.2614623   0.0013230  -0.000121   0.000003   0.000036   0.000036  0.0000056  0.0000103    0.000076    0.000070
+2007  12  20  54454  -0.060997   0.237697  -0.2627168   0.0011910  -0.000093   0.000000   0.000038   0.000037  0.0000096  0.0000106    0.000132    0.000125
+2007  12  21  54455  -0.061813   0.239239  -0.2638291   0.0009286  -0.000060   0.000001   0.000037   0.000037  0.0000055  0.0000108    0.000187    0.000180
+2007  12  22  54456  -0.062729   0.241028  -0.2646238   0.0006512  -0.000029  -0.000059   0.000038   0.000038  0.0000093  0.0000106    0.000185    0.001348
+2007  12  23  54457  -0.063814   0.242618  -0.2651969   0.0005112  -0.000002  -0.000119   0.000087   0.000086  0.0000107  0.0000110    0.000162    0.002605
+2007  12  24  54458  -0.065266   0.244465  -0.2656808   0.0004976   0.000019  -0.000093   0.000131   0.000131  0.0000087  0.0000112    0.000139    0.002002
+2007  12  25  54459  -0.067300   0.246084  -0.2661803   0.0005863   0.000032  -0.000054   0.000129   0.000132  0.0000064  0.0000110    0.000116    0.001398
+2007  12  26  54460  -0.069525   0.247633  -0.2668077   0.0007409   0.000036  -0.000005   0.000129   0.000131  0.0000040  0.0000107    0.000093    0.000794
+2007  12  27  54461  -0.071270   0.249064  -0.2676214   0.0009187   0.000034   0.000049   0.000116   0.000121  0.0000017  0.0000106    0.000070    0.000190
+2007  12  28  54462  -0.072908   0.250944  -0.2686186   0.0010875  -0.000102   0.000232   0.000111   0.000117  0.0000030  0.0000106    0.000134    0.000132
+2007  12  29  54463  -0.074778   0.252711  -0.2697525   0.0012129  -0.000146   0.000300   0.000125   0.000127  0.0000033  0.0000108    0.000143    0.000141
+2007  12  30  54464  -0.076381   0.254725  -0.2709529   0.0012347  -0.000136   0.000300   0.000102   0.000104  0.0000028  0.0000110    0.000123    0.000122
+2007  12  31  54465  -0.078586   0.256918  -0.2721477   0.0011248  -0.000117   0.000280   0.000068   0.000071  0.0000023  0.0000104    0.000103    0.000103
+2008   1   1  54466  -0.080464   0.258320  -0.2732775   0.0010367  -0.000088   0.000240   0.000064   0.000068  0.0000018  0.0000101    0.000082    0.000084
+2008   1   2  54467  -0.081856   0.260081  -0.2742999   0.0009216  -0.000049   0.000189   0.000064   0.000068  0.0000013  0.0000102    0.000062    0.000065
+2008   1   3  54468  -0.083358   0.261871  -0.2751926   0.0008036  -0.000006   0.000131   0.000062   0.000066  0.0000008  0.0000104    0.000042    0.000046
+2008   1   4  54469  -0.085518   0.263835  -0.2759536   0.0006877   0.000066  -0.000067   0.000064   0.000068  0.0000016  0.0000108    0.000141    0.000121
+2008   1   5  54470  -0.087890   0.265471  -0.2766053   0.0006129   0.000086  -0.000102   0.000070   0.000073  0.0000058  0.0000110    0.000154    0.000129
+2008   1   6  54471  -0.090223   0.267150  -0.2772051   0.0005506   0.000080  -0.000050   0.000067   0.000070  0.0000089  0.0000112    0.000124    0.000103
+2008   1   7  54472  -0.092581   0.268748  -0.2777451   0.0005309   0.000068   0.000017   0.000060   0.000064  0.0000065  0.0000110    0.000093    0.000076
+2008   1   8  54473  -0.094394   0.270626  -0.2782570   0.0005583   0.000048   0.000095   0.000057   0.000060  0.0000020  0.0000108    0.000062    0.000049
+2008   1   9  54474  -0.096001   0.272571  -0.2788396   0.0006528   0.000061   0.000160   0.000058   0.000061  0.0000021  0.0000110    0.000084    0.000815
+2008   1  10  54475  -0.097620   0.274912  -0.2795634   0.0008238   0.000077   0.000156   0.000059   0.000062  0.0000034  0.0000109    0.000121    0.000710
+2008   1  11  54476  -0.099539   0.277459  -0.2804686   0.0009786   0.000086   0.000125   0.000057   0.000060  0.0000047  0.0000107    0.000158    0.000267
+2008   1  12  54477  -0.101583   0.280079  -0.2815661   0.0011675   0.000073   0.000108   0.000058   0.000061  0.0000070  0.0000108    0.000146    0.000127
+2008   1  13  54478  -0.103393   0.282793  -0.2828298   0.0013311   0.000050   0.000093   0.000066   0.000069  0.0000097  0.0000120    0.000117    0.000098
+2008   1  14  54479  -0.104962   0.285707  -0.2841949   0.0014106   0.000025   0.000073   0.000068   0.000071  0.0000077  0.0000128    0.000087    0.000070
+2008   1  15  54480  -0.106900   0.288630  -0.2855842   0.0013662   0.000002   0.000050   0.000064   0.000066  0.0000032  0.0000125    0.000057    0.000042
+2008   1  16  54481  -0.108869   0.290995  -0.2869051   0.0011957  -0.000046   0.000045   0.000065   0.000066  0.0000053  0.0000127    0.000054    0.000048
+2008   1  17  54482  -0.110421   0.292914  -0.2880052   0.0009305  -0.000093   0.000045   0.000067   0.000069  0.0000078  0.0000130    0.000058    0.000063
+2008   1  18  54483  -0.112149   0.294952  -0.2887974   0.0006619  -0.000094   0.000061   0.000067   0.000070  0.0000049  0.0000131    0.000194    0.000161
+2008   1  19  54484  -0.113954   0.297067  -0.2893639   0.0004639  -0.000064   0.000061   0.000069   0.000072  0.0000064  0.0000134    0.000234    0.000245
+2008   1  20  54485  -0.115065   0.299162  -0.2898046   0.0004241  -0.000020   0.000056   0.000070   0.000072  0.0000065  0.0000124    0.000221    0.000314
+2008   1  21  54486  -0.115072   0.301583  -0.2902450   0.0005264   0.000029   0.000052   0.000066   0.000068  0.0000051  0.0000112    0.000208    0.000383
+2008   1  22  54487  -0.115070   0.304414  -0.2908253   0.0007038   0.000080   0.000050   0.000064   0.000066  0.0000036  0.0000110    0.000176    0.000425
+2008   1  23  54488  -0.115364   0.306728  -0.2916465   0.0009749   0.000126   0.000016   0.000063   0.000064  0.0000022  0.0000110    0.000073    0.000101
+2008   1  24  54489  -0.115870   0.308978  -0.2927443   0.0012242   0.000156   0.000016   0.000060   0.000063  0.0000017  0.0000111    0.000024    0.000022
+2008   1  25  54490  -0.116616   0.311492  -0.2940869   0.0014188   0.000192   0.000055   0.000060   0.000063  0.0000016  0.0000110    0.000054    0.000043
+2008   1  26  54491  -0.117458   0.313844  -0.2955879   0.0015124   0.000185   0.000077   0.000064   0.000066  0.0000066  0.0000110    0.000062    0.000048
+2008   1  27  54492  -0.117809   0.316452  -0.2971151   0.0015010   0.000158   0.000091   0.000060   0.000062  0.0000083  0.0000103    0.000055    0.000043
+2008   1  28  54493  -0.117978   0.319295  -0.2985989   0.0014300   0.000128   0.000102   0.000054   0.000056  0.0000054  0.0000093    0.000048    0.000037
+2008   1  29  54494  -0.118459   0.321778  -0.2999606   0.0012439   0.000098   0.000112   0.000052   0.000054  0.0000016  0.0000093    0.000040    0.000032
+2008   1  30  54495  -0.119136   0.324037  -0.3011051   0.0010320   0.000134   0.000152   0.000053   0.000055  0.0000196  0.0000095    0.000465    0.000112
+2008   1  31  54496  -0.119602   0.326446  -0.3020167   0.0007998   0.000187   0.000189   0.000053   0.000056  0.0000332  0.0000094    0.000902    0.000196
+2008   2   1  54497  -0.119665   0.329120  -0.3027490   0.0006553   0.000245   0.000150   0.000053   0.000055  0.0000079  0.0000093    0.000241    0.000082
+2008   2   2  54498  -0.119511   0.332313  -0.3033921   0.0005975   0.000245   0.000126   0.000054   0.000056  0.0000080  0.0000095    0.000056    0.000047
+2008   2   3  54499  -0.119824   0.335573  -0.3039673   0.0005629   0.000219   0.000106   0.000058   0.000059  0.0000080  0.0000092    0.000050    0.000042
+2008   2   4  54500  -0.120509   0.338316  -0.3045363   0.0006231   0.000187   0.000083   0.000059   0.000060  0.0000044  0.0000087    0.000043    0.000036
+2008   2   5  54501  -0.120816   0.341137  -0.3052072   0.0007868   0.000150   0.000062   0.000057   0.000057  0.0000014  0.0000087    0.000037    0.000031
+2008   2   6  54502  -0.121269   0.343992  -0.3060684   0.0009843   0.000113   0.000059   0.000056   0.000056  0.0000108  0.0000087    0.000026    0.000024
+2008   2   7  54503  -0.122031   0.346859  -0.3071557   0.0012057   0.000113   0.000081   0.000057   0.000058  0.0000181  0.0000087    0.000070    0.000085
+2008   2   8  54504  -0.122812   0.349411  -0.3084654   0.0014344   0.000168   0.000024   0.000057   0.000057  0.0000046  0.0000087    0.000067    0.000063
+2008   2   9  54505  -0.123509   0.351951  -0.3099706   0.0015576   0.000130   0.000012   0.000058   0.000058  0.0000063  0.0000088    0.000061    0.000048
+2008   2  10  54506  -0.123951   0.354818  -0.3115566   0.0016313   0.000059   0.000027   0.000059   0.000058  0.0000083  0.0000087    0.000062    0.000047
+2008   2  11  54507  -0.124725   0.357627  -0.3131968   0.0016260  -0.000005   0.000039   0.000057   0.000056  0.0000060  0.0000083    0.000063    0.000046
+2008   2  12  54508  -0.125594   0.359896  -0.3148087   0.0014471  -0.000059   0.000048   0.000054   0.000053  0.0000028  0.0000080    0.000063    0.000045
+2008   2  13  54509  -0.126082   0.361878  -0.3162252   0.0012312   0.000005   0.000068   0.000054   0.000053  0.0000018  0.0000079    0.000049    0.000049
+2008   2  14  54510  -0.125701   0.364387  -0.3173649   0.0010159   0.000110   0.000050   0.000055   0.000054  0.0000015  0.0000079    0.000045    0.000050
+2008   2  15  54511  -0.125289   0.367099  -0.3182364   0.0007625   0.000183  -0.000029   0.000056   0.000055  0.0000011  0.0000081    0.000043    0.000045
+2008   2  16  54512  -0.125246   0.369414  -0.3189132   0.0005954   0.000198  -0.000092   0.000056   0.000055  0.0000068  0.0000082    0.000080    0.000097
+2008   2  17  54513  -0.125705   0.371378  -0.3194692   0.0005554   0.000195  -0.000136   0.000055   0.000054  0.0000083  0.0000080    0.000131    0.000171
+2008   2  18  54514  -0.126424   0.373941  -0.3200716   0.0006872   0.000190  -0.000169   0.000053   0.000052  0.0000093  0.0000078    0.000182    0.000244
+2008   2  19  54515  -0.126916   0.376709  -0.3208759   0.0009386   0.000184  -0.000189   0.000052   0.000051  0.0000082  0.0000075    0.000234    0.000318
+2008   2  20  54516  -0.127148   0.379552  -0.3219231   0.0011466   0.000204  -0.000070   0.000051   0.000050  0.0000025  0.0000076    0.000084    0.000090
+2008   2  21  54517  -0.127387   0.382093  -0.3231638   0.0013094   0.000292   0.000020   0.000050   0.000049  0.0000012  0.0000075    0.000028    0.000020
+2008   2  22  54518  -0.127355   0.384908  -0.3244993   0.0013403   0.000335   0.000025   0.000050   0.000050  0.0000011  0.0000073    0.000062    0.000057
+2008   2  23  54519  -0.127480   0.387795  -0.3258270   0.0013149   0.000332   0.000047   0.000053   0.000052  0.0000075  0.0000075    0.000073    0.000068
+2008   2  24  54520  -0.127168   0.390874  -0.3271058   0.0012099   0.000318   0.000078   0.000049   0.000048  0.0000082  0.0000070    0.000069    0.000062
+2008   2  25  54521  -0.126884   0.393793  -0.3282805   0.0010914   0.000301   0.000103   0.000043   0.000042  0.0000049  0.0000063    0.000065    0.000057
+2008   2  26  54522  -0.126302   0.396414  -0.3292794   0.0008783   0.000282   0.000114   0.000041   0.000040  0.0000017  0.0000063    0.000061    0.000052
+2008   2  27  54523  -0.125445   0.398929  -0.3300562   0.0006495   0.000293   0.000175   0.000041   0.000040  0.0000075  0.0000063    0.000066    0.000067
+2008   2  28  54524  -0.124110   0.401583  -0.3306091   0.0004546   0.000313   0.000143   0.000041   0.000041  0.0000121  0.0000062    0.000062    0.000064
+2008   2  29  54525  -0.122871   0.404034  -0.3309693   0.0002955   0.000333   0.000072   0.000041   0.000041  0.0000035  0.0000061    0.000056    0.000054
+2008   3   1  54526  -0.121291   0.406701  -0.3311906   0.0002267   0.000338   0.000024   0.000042   0.000042  0.0000102  0.0000063    0.000049    0.000046
+2008   3   2  54527  -0.120139   0.409775  -0.3314318   0.0002654   0.000335  -0.000014   0.000045   0.000045  0.0000126  0.0000069    0.000041    0.000038
+2008   3   3  54528  -0.119076   0.412662  -0.3317575   0.0003873   0.000328  -0.000050   0.000045   0.000044  0.0000076  0.0000070    0.000032    0.000030
+2008   3   4  54529  -0.118104   0.415893  -0.3322327   0.0005993   0.000319  -0.000081   0.000042   0.000041  0.0000016  0.0000068    0.000024    0.000022
+2008   3   5  54530  -0.117007   0.418921  -0.3329699   0.0008901   0.000285  -0.000093   0.000041   0.000041  0.0000072  0.0000069    0.000039    0.000039
+2008   3   6  54531  -0.115685   0.421738  -0.3339936   0.0011628   0.000245  -0.000095   0.000042   0.000042  0.0000123  0.0000068    0.000059    0.000062
+2008   3   7  54532  -0.114749   0.424319  -0.3352698   0.0013862   0.000209  -0.000087   0.000042   0.000042  0.0000034  0.0000067    0.000079    0.000085
+2008   3   8  54533  -0.113392   0.426650  -0.3367452   0.0015509   0.000207  -0.000074   0.000043   0.000043  0.0000043  0.0000069    0.000084    0.000089
+2008   3   9  54534  -0.111916   0.429344  -0.3383403   0.0015335   0.000221  -0.000056   0.000047   0.000048  0.0000069  0.0000076    0.000082    0.000085
+2008   3  10  54535  -0.110675   0.431737  -0.3398162   0.0013618   0.000241  -0.000036   0.000048   0.000049  0.0000128  0.0000078    0.000080    0.000081
+2008   3  11  54536  -0.109319   0.434414  -0.3410668   0.0010982   0.000265  -0.000017   0.000046   0.000047  0.0000129  0.0000078    0.000079    0.000078
+2008   3  12  54537  -0.107996   0.437534  -0.3420810   0.0008107   0.000292   0.000000   0.000045   0.000046  0.0000034  0.0000079    0.000077    0.000074
+2008   3  13  54538  -0.106512   0.440356  -0.3428102   0.0005875   0.000285  -0.000025   0.000044   0.000045  0.0000014  0.0000078    0.000075    0.000068
+2008   3  14  54539  -0.104859   0.443226  -0.3433280   0.0004567   0.000268  -0.000063   0.000044   0.000046  0.0000014  0.0000078    0.000074    0.000062
+2008   3  15  54540  -0.102974   0.445965  -0.3437782   0.0004543   0.000286  -0.000050   0.000045   0.000047  0.0000056  0.0000080    0.000066    0.000055
+2008   3  16  54541  -0.100911   0.448907  -0.3442873   0.0005647   0.000314  -0.000019   0.000047   0.000049  0.0000113  0.0000086    0.000056    0.000047
+2008   3  17  54542  -0.098561   0.452025  -0.3449408   0.0007805   0.000338   0.000009   0.000047   0.000049  0.0000087  0.0000088    0.000045    0.000040
+2008   3  18  54543  -0.096304   0.455083  -0.3458127   0.0010119   0.000356   0.000037   0.000045   0.000047  0.0000019  0.0000087    0.000035    0.000032
+2008   3  19  54544  -0.094077   0.457881  -0.3469423   0.0012563   0.000298  -0.000047   0.000045   0.000047  0.0000012  0.0000087    0.000092    0.000088
+2008   3  20  54545  -0.091520   0.460880  -0.3482850   0.0013871   0.000221  -0.000157   0.000046   0.000048  0.0000022  0.0000085    0.000166    0.000162
+2008   3  21  54546  -0.088876   0.463828  -0.3497449   0.0014614   0.000208  -0.000154   0.000047   0.000048  0.0000110  0.0000084    0.000167    0.000162
+2008   3  22  54547  -0.086130   0.466983  -0.3512218   0.0014647   0.000222  -0.000104   0.000049   0.000049  0.0000154  0.0000084    0.000140    0.000137
+2008   3  23  54548  -0.083345   0.470167  -0.3526689   0.0014229   0.000243  -0.000048   0.000049   0.000049  0.0000072  0.0000080    0.000113    0.000111
+2008   3  24  54549  -0.080724   0.473076  -0.3540434   0.0013039   0.000268   0.000008   0.000047   0.000048  0.0000055  0.0000076    0.000087    0.000085
+2008   3  25  54550  -0.078457   0.475805  -0.3552779   0.0011495   0.000296   0.000060   0.000046   0.000047  0.0000033  0.0000076    0.000060    0.000059
+2008   3  26  54551  -0.076227   0.478331  -0.3563397   0.0009724   0.000324   0.000104   0.000046   0.000046  0.0000011  0.0000078    0.000033    0.000033
+2008   3  27  54552  -0.074097   0.480640  -0.3572232   0.0007870   0.000342   0.000067   0.000047   0.000047  0.0000007  0.0000078    0.000037    0.000034
+2008   3  28  54553  -0.072199   0.482839  -0.3579581   0.0006765   0.000354   0.000003   0.000047   0.000047  0.0000009  0.0000076    0.000048    0.000043
+2008   3  29  54554  -0.070620   0.484919  -0.3586079   0.0006372   0.000336  -0.000036   0.000047   0.000048  0.0000042  0.0000074    0.000048    0.000044
+2008   3  30  54555  -0.068717   0.486641  -0.3592635   0.0007176   0.000305  -0.000064   0.000048   0.000048  0.0000088  0.0000074    0.000043    0.000041
+2008   3  31  54556  -0.066551   0.488146  -0.3600245   0.0008740   0.000271  -0.000091   0.000047   0.000046  0.0000072  0.0000074    0.000038    0.000038
+2008   4   1  54557  -0.064468   0.489792  -0.3609839   0.0010918   0.000234  -0.000110   0.000045   0.000044  0.0000026  0.0000075    0.000033    0.000035
+2008   4   2  54558  -0.061974   0.491627  -0.3622033   0.0013290   0.000226  -0.000134   0.000045   0.000045  0.0000073  0.0000076    0.000036    0.000037
+2008   4   3  54559  -0.058983   0.493543  -0.3636564   0.0015670   0.000323  -0.000153   0.000045   0.000044  0.0000115  0.0000074    0.000022    0.000019
+2008   4   4  54560  -0.056078   0.495357  -0.3652961   0.0017566   0.000369  -0.000121   0.000044   0.000043  0.0000046  0.0000072    0.000049    0.000045
+2008   4   5  54561  -0.053614   0.497006  -0.3671146   0.0019060   0.000316  -0.000060   0.000047   0.000046  0.0000076  0.0000072    0.000056    0.000053
+2008   4   6  54562  -0.050867   0.498708  -0.3690460   0.0018726   0.000232   0.000008   0.000048   0.000046  0.0000084  0.0000070    0.000050    0.000050
+2008   4   7  54563  -0.047905   0.500439  -0.3708044   0.0015946   0.000147   0.000071   0.000046   0.000045  0.0000052  0.0000067    0.000044    0.000046
+2008   4   8  54564  -0.045139   0.502386  -0.3722037   0.0012151   0.000066   0.000126   0.000045   0.000044  0.0000014  0.0000069    0.000038    0.000043
+2008   4   9  54565  -0.042916   0.504707  -0.3732681   0.0008793   0.000073   0.000071   0.000045   0.000044  0.0000051  0.0000070    0.000032    0.000035
+2008   4  10  54566  -0.041098   0.506791  -0.3740470   0.0006449   0.000112  -0.000019   0.000046   0.000045  0.0000086  0.0000072    0.000025    0.000026
+2008   4  11  54567  -0.038873   0.508632  -0.3746331   0.0005315   0.000177  -0.000093   0.000045   0.000045  0.0000048  0.0000070    0.000097    0.000108
+2008   4  12  54568  -0.036620   0.510326  -0.3751669   0.0005562   0.000178  -0.000097   0.000047   0.000046  0.0000061  0.0000068    0.000108    0.000120
+2008   4  13  54569  -0.034173   0.511826  -0.3757777   0.0006938   0.000162  -0.000075   0.000046   0.000045  0.0000062  0.0000068    0.000087    0.000095
+2008   4  14  54570  -0.031611   0.512934  -0.3765941   0.0009378   0.000156  -0.000049   0.000042   0.000042  0.0000039  0.0000069    0.000066    0.000071
+2008   4  15  54571  -0.029051   0.513786  -0.3776537   0.0011881   0.000159  -0.000020   0.000041   0.000041  0.0000012  0.0000071    0.000045    0.000046
+2008   4  16  54572  -0.026479   0.514565  -0.3788957   0.0013015   0.000232  -0.000017   0.000042   0.000041  0.0000015  0.0000072    0.000083    0.000081
+2008   4  17  54573  -0.023651   0.515642  -0.3802413   0.0013615   0.000323  -0.000023   0.000042   0.000042  0.0000027  0.0000071    0.000137    0.000131
+2008   4  18  54574  -0.020373   0.517318  -0.3816110   0.0013470   0.000410  -0.000030   0.000042   0.000042  0.0000038  0.0000069    0.000191    0.000181
+2008   4  19  54575  -0.016974   0.519358  -0.3829349   0.0012940   0.000469  -0.000036   0.000043   0.000042  0.0000060  0.0000069    0.000224    0.000213
+2008   4  20  54576  -0.013709   0.521578  -0.3841750   0.0011662   0.000507  -0.000044   0.000043   0.000042  0.0000082  0.0000067    0.000249    0.000237
+2008   4  21  54577  -0.010975   0.523806  -0.3852545   0.0009865   0.000529  -0.000055   0.000041   0.000041  0.0000122  0.0000065    0.000274    0.000261
+2008   4  22  54578  -0.008238   0.525766  -0.3861534   0.0008394   0.000534  -0.000067   0.000040   0.000039  0.0000115  0.0000064    0.000298    0.000286
+2008   4  23  54579  -0.005766   0.527452  -0.3869167   0.0007050   0.000331  -0.000165   0.000039   0.000039  0.0000052  0.0000065    0.000097    0.000103
+2008   4  24  54580  -0.003068   0.528386  -0.3875894   0.0006197   0.000298  -0.000159   0.000039   0.000039  0.0000030  0.0000065    0.000069    0.000066
+2008   4  25  54581  -0.000058   0.529141  -0.3881977   0.0005757   0.000310  -0.000125   0.000039   0.000039  0.0000019  0.0000066    0.000086    0.000067
+2008   4  26  54582   0.003089   0.529880  -0.3887732   0.0006051   0.000305  -0.000122   0.000040   0.000041  0.0000048  0.0000068    0.000080    0.000060
+2008   4  27  54583   0.006191   0.530721  -0.3894057   0.0006927   0.000298  -0.000130   0.000043   0.000043  0.0000075  0.0000067    0.000064    0.000051
+2008   4  28  54584   0.009563   0.531744  -0.3901920   0.0008897   0.000299  -0.000137   0.000044   0.000044  0.0000054  0.0000065    0.000048    0.000041
+2008   4  29  54585   0.012909   0.533159  -0.3912119   0.0011471   0.000309  -0.000143   0.000041   0.000042  0.0000015  0.0000064    0.000032    0.000031
+2008   4  30  54586   0.015977   0.534667  -0.3925137   0.0014521   0.000306  -0.000177   0.000040   0.000041  0.0000020  0.0000064    0.000067    0.000074
+2008   5   1  54587   0.018971   0.535985  -0.3940594   0.0016488   0.000313  -0.000192   0.000040   0.000041  0.0000076  0.0000063    0.000076    0.000085
+2008   5   2  54588   0.021731   0.536992  -0.3957746   0.0017830   0.000327  -0.000195   0.000040   0.000041  0.0000124  0.0000063    0.000070    0.000079
+2008   5   3  54589   0.024426   0.537677  -0.3976140   0.0018589   0.000344  -0.000191   0.000041   0.000042  0.0000092  0.0000063    0.000064    0.000073
+2008   5   4  54590   0.027091   0.538292  -0.3994714   0.0018074   0.000360  -0.000182   0.000042   0.000043  0.0000086  0.0000064    0.000058    0.000068
+2008   5   5  54591   0.030019   0.538534  -0.4011573   0.0015731   0.000376  -0.000169   0.000042   0.000043  0.0000062  0.0000063    0.000052    0.000062
+2008   5   6  54592   0.033509   0.538757  -0.4025728   0.0012535   0.000389  -0.000154   0.000040   0.000041  0.0000025  0.0000062    0.000046    0.000056
+2008   5   7  54593   0.036909   0.539259  -0.4036636   0.0009529   0.000390  -0.000094   0.000040   0.000041  0.0000015  0.0000062    0.000724    0.000195
+2008   5   8  54594   0.039750   0.539887  -0.4045533   0.0008147   0.000385  -0.000017   0.000040   0.000041  0.0000013  0.0000062    0.000272    0.000100
+2008   5   9  54595   0.042502   0.540615  -0.4054417   0.0008751   0.000387  -0.000011   0.000041   0.000042  0.0000076  0.0000063    0.000042    0.000048
+2008   5  10  54596   0.044821   0.541474  -0.4063632   0.0010249   0.000389  -0.000038   0.000043   0.000044  0.0000133  0.0000064    0.000038    0.000041
+2008   5  11  54597   0.047326   0.541774  -0.4074716   0.0012695   0.000387  -0.000068   0.000046   0.000046  0.0000087  0.0000065    0.000033    0.000034
+2008   5  12  54598   0.050034   0.542274  -0.4088849   0.0014996   0.000382  -0.000101   0.000046   0.000047  0.0000050  0.0000065    0.000029    0.000027
+2008   5  13  54599   0.052844   0.542516  -0.4104670   0.0016295   0.000374  -0.000134   0.000044   0.000045  0.0000014  0.0000065    0.000025    0.000020
+2008   5  14  54600   0.056399   0.542631  -0.4121296   0.0016876   0.000374  -0.000111   0.000043   0.000044  0.0000050  0.0000065    0.000021    0.000017
+2008   5  15  54601   0.060248   0.542608  -0.4138039   0.0016267   0.000376  -0.000076   0.000043   0.000044  0.0000082  0.0000065    0.000016    0.000015
+2008   5  16  54602   0.064150   0.542640  -0.4154114   0.0015288   0.000286  -0.000069   0.000043   0.000044  0.0000025  0.0000065    0.000045    0.000044
+2008   5  17  54603   0.067966   0.542625  -0.4168329   0.0013170   0.000252  -0.000064   0.000045   0.000046  0.0000081  0.0000065    0.000063    0.000059
+2008   5  18  54604   0.071429   0.542680  -0.4180149   0.0010979   0.000252  -0.000061   0.000046   0.000046  0.0000115  0.0000067    0.000074    0.000064
+2008   5  19  54605   0.074615   0.542673  -0.4189975   0.0008927   0.000253  -0.000069   0.000045   0.000046  0.0000088  0.0000069    0.000084    0.000070
+2008   5  20  54606   0.077668   0.542655  -0.4197929   0.0006429   0.000254  -0.000087   0.000044   0.000045  0.0000046  0.0000068    0.000094    0.000075
+2008   5  21  54607   0.080938   0.542330  -0.4203777   0.0004543   0.000302  -0.000111   0.000043   0.000044  0.0000076  0.0000069    0.000075    0.000062
+2008   5  22  54608   0.084350   0.541892  -0.4207677   0.0003282   0.000360  -0.000139   0.000043   0.000044  0.0000100  0.0000069    0.000049    0.000045
+2008   5  23  54609   0.088203   0.541497  -0.4210388   0.0002795   0.000262  -0.000323   0.000043   0.000044  0.0000029  0.0000070    0.000055    0.000052
+2008   5  24  54610   0.092259   0.541472  -0.4213245   0.0003407   0.000190  -0.000413   0.000045   0.000046  0.0000083  0.0000072    0.000064    0.000066
+2008   5  25  54611   0.096093   0.541313  -0.4217165   0.0004956   0.000154  -0.000437   0.000046   0.000047  0.0000122  0.0000072    0.000069    0.000078
+2008   5  26  54612   0.100047   0.541262  -0.4222929   0.0006966   0.000127  -0.000442   0.000045   0.000046  0.0000124  0.0000069    0.000074    0.000091
+2008   5  27  54613   0.103790   0.541508  -0.4230677   0.0008568   0.000112  -0.000427   0.000043   0.000044  0.0000085  0.0000068    0.000079    0.000103
+2008   5  28  54614   0.107553   0.541418  -0.4240211   0.0010180   0.000152  -0.000247   0.000042   0.000044  0.0000030  0.0000068    0.000078    0.000075
+2008   5  29  54615   0.111245   0.541189  -0.4251299   0.0011774   0.000277  -0.000158   0.000042   0.000044  0.0000028  0.0000068    0.000167    0.000172
+2008   5  30  54616   0.114501   0.540674  -0.4263538   0.0012736   0.000421  -0.000095   0.000042   0.000044  0.0000040  0.0000069    0.000279    0.000302
+2008   5  31  54617   0.117312   0.540075  -0.4276134   0.0012272   0.000439  -0.000097   0.000043   0.000045  0.0000155  0.0000069    0.000259    0.000281
+2008   6   1  54618   0.119994   0.539764  -0.4287414   0.0010419   0.000400  -0.000131   0.000045   0.000046  0.0000129  0.0000069    0.000187    0.000201
+2008   6   2  54619   0.122626   0.539234  -0.4296538   0.0008151   0.000350  -0.000175   0.000044   0.000045  0.0000056  0.0000068    0.000115    0.000122
+2008   6   3  54620   0.125654   0.538441  -0.4303260   0.0005619   0.000292  -0.000230   0.000042   0.000043  0.0000014  0.0000068    0.000043    0.000042
+2008   6   4  54621   0.129052   0.537384  -0.4307664   0.0003694   0.000304  -0.000057   0.000042   0.000044  0.0000130  0.0000068    0.000085    0.000078
+2008   6   5  54622   0.132824   0.536074  -0.4310806   0.0002988   0.000262  -0.000008   0.000043   0.000044  0.0000220  0.0000069    0.000088    0.000083
+2008   6   6  54623   0.136479   0.534934  -0.4314278   0.0003550   0.000200  -0.000019   0.000044   0.000045  0.0000055  0.0000072    0.000070    0.000069
+2008   6   7  54624   0.139895   0.533758  -0.4319488   0.0005273   0.000223  -0.000107   0.000045   0.000046  0.0000143  0.0000074    0.000063    0.000063
+2008   6   8  54625   0.143294   0.532751  -0.4325483   0.0007227   0.000279  -0.000224   0.000047   0.000048  0.0000147  0.0000071    0.000060    0.000058
+2008   6   9  54626   0.146564   0.531708  -0.4333015   0.0008459   0.000338  -0.000335   0.000048   0.000048  0.0000080  0.0000069    0.000056    0.000054
+2008   6  10  54627   0.150193   0.530480  -0.4342535   0.0009854   0.000397  -0.000439   0.000046   0.000046  0.0000022  0.0000067    0.000053    0.000050
+2008   6  11  54628   0.153714   0.529231  -0.4352674   0.0009857   0.000296  -0.000214   0.000045   0.000045  0.0000012  0.0000067    0.000065    0.000072
+2008   6  12  54629   0.157106   0.527650  -0.4361767   0.0008407   0.000253  -0.000142   0.000045   0.000046  0.0000094  0.0000067    0.000065    0.000074
+2008   6  13  54630   0.160609   0.526081  -0.4369257   0.0006520   0.000251  -0.000160   0.000046   0.000046  0.0000173  0.0000068    0.000060    0.000065
+2008   6  14  54631   0.163908   0.524688  -0.4375009   0.0004639   0.000254  -0.000180   0.000046   0.000047  0.0000116  0.0000068    0.000054    0.000057
+2008   6  15  54632   0.166807   0.523332  -0.4378275   0.0002475   0.000261  -0.000204   0.000046   0.000046  0.0000145  0.0000065    0.000049    0.000049
+2008   6  16  54633   0.169564   0.521916  -0.4379854   0.0001296   0.000275  -0.000233   0.000043   0.000043  0.0000111  0.0000063    0.000043    0.000041
+2008   6  17  54634   0.172466   0.520600  -0.4380544   0.0000302   0.000291  -0.000266   0.000042   0.000041  0.0000025  0.0000063    0.000037    0.000033
+2008   6  18  54635   0.175182   0.519058  -0.4380463  -0.0000470   0.000341  -0.000275   0.000040   0.000041  0.0000008  0.0000061    0.000037    0.000033
+2008   6  19  54636   0.177811   0.517434  -0.4379837  -0.0000699   0.000395  -0.000277   0.000041   0.000042  0.0000010  0.0000061    0.000038    0.000037
+2008   6  20  54637   0.180450   0.515845  -0.4379106  -0.0000460   0.000441  -0.000277   0.000041   0.000042  0.0000012  0.0000061    0.000039    0.000040
+2008   6  21  54638   0.183626   0.514356  -0.4379012   0.0000902   0.000436  -0.000308   0.000041   0.000042  0.0000076  0.0000061    0.000041    0.000041
+2008   6  22  54639   0.187026   0.512892  -0.4381024   0.0002894   0.000403  -0.000343   0.000044   0.000045  0.0000097  0.0000065    0.000045    0.000041
+2008   6  23  54640   0.190275   0.511333  -0.4385451   0.0005451   0.000360  -0.000372   0.000045   0.000045  0.0000066  0.0000067    0.000049    0.000042
+2008   6  24  54641   0.193454   0.509895  -0.4392010   0.0007707   0.000311  -0.000394   0.000043   0.000044  0.0000025  0.0000067    0.000052    0.000042
+2008   6  25  54642   0.196488   0.508394  -0.4400492   0.0009336   0.000284  -0.000287   0.000043   0.000044  0.0000062  0.0000067    0.000049    0.000045
+2008   6  26  54643   0.199498   0.507083  -0.4410415   0.0010323   0.000256  -0.000213   0.000044   0.000045  0.0000093  0.0000067    0.000059    0.000052
+2008   6  27  54644   0.201837   0.505801  -0.4420704   0.0009939   0.000213  -0.000280   0.000044   0.000045  0.0000031  0.0000068    0.000116    0.000102
+2008   6  28  54645   0.204237   0.503973  -0.4429678   0.0008817   0.000175  -0.000265   0.000045   0.000046  0.0000081  0.0000068    0.000118    0.000104
+2008   6  29  54646   0.206571   0.502101  -0.4437744   0.0007007   0.000151  -0.000215   0.000047   0.000049  0.0000106  0.0000071    0.000094    0.000083
+2008   6  30  54647   0.208772   0.499818  -0.4443989   0.0004938   0.000141  -0.000178   0.000048   0.000049  0.0000070  0.0000074    0.000070    0.000061
+2008   7   1  54648   0.211236   0.497510  -0.4447531   0.0002776   0.000142  -0.000151   0.000047   0.000048  0.0000021  0.0000074    0.000047    0.000039
+2008   7   2  54649   0.213615   0.495313  -0.4449201   0.0001468   0.000305  -0.000365   0.000047   0.000048  0.0000029  0.0000073    0.000084    0.000070
+2008   7   3  54650   0.216146   0.493237  -0.4450637   0.0001733   0.000505  -0.000634   0.000048   0.000048  0.0000053  0.0000072    0.000138    0.000114
+2008   7   4  54651   0.218883   0.491176  -0.4453513   0.0003442   0.000521  -0.000669   0.000048   0.000048  0.0000083  0.0000072    0.000140    0.000114
+2008   7   5  54652   0.221736   0.489077  -0.4458350   0.0005432   0.000458  -0.000602   0.000049   0.000049  0.0000114  0.0000072    0.000123    0.000098
+2008   7   6  54653   0.224688   0.487207  -0.4464670   0.0007107   0.000381  -0.000513   0.000050   0.000050  0.0000131  0.0000073    0.000106    0.000081
+2008   7   7  54654   0.227277   0.485448  -0.4472413   0.0008080   0.000297  -0.000407   0.000048   0.000048  0.0000093  0.0000072    0.000090    0.000064
+2008   7   8  54655   0.229631   0.483216  -0.4480581   0.0007593   0.000212  -0.000293   0.000046   0.000046  0.0000031  0.0000072    0.000072    0.000048
+2008   7   9  54656   0.231938   0.481146  -0.4487504   0.0006402   0.000098  -0.000151   0.000046   0.000046  0.0000057  0.0000071    0.000153    0.000117
+2008   7  10  54657   0.234163   0.479143  -0.4493073   0.0004898   0.000110  -0.000091   0.000046   0.000047  0.0000084  0.0000071    0.000058    0.000049
+2008   7  11  54658   0.236536   0.477271  -0.4497255   0.0002736   0.000246  -0.000189   0.000047   0.000048  0.0000031  0.0000072    0.000051    0.000050
+2008   7  12  54659   0.238797   0.474930  -0.4498737   0.0000324   0.000319  -0.000249   0.000048   0.000049  0.0000090  0.0000072    0.000058    0.000055
+2008   7  13  54660   0.241245   0.472463  -0.4497825  -0.0001689   0.000357  -0.000288   0.000048   0.000048  0.0000143  0.0000070    0.000051    0.000047
+2008   7  14  54661   0.243378   0.469876  -0.4495385  -0.0003057   0.000388  -0.000333   0.000045   0.000046  0.0000101  0.0000068    0.000045    0.000038
+2008   7  15  54662   0.245346   0.466955  -0.4491865  -0.0003880   0.000409  -0.000381   0.000044   0.000044  0.0000024  0.0000068    0.000038    0.000030
+2008   7  16  54663   0.247878   0.464059  -0.4487742  -0.0003966   0.000368  -0.000309   0.000043   0.000044  0.0000072  0.0000067    0.000068    0.000053
+2008   7  17  54664   0.250617   0.461559  -0.4484004  -0.0003318   0.000304  -0.000206   0.000044   0.000045  0.0000120  0.0000067    0.000107    0.000085
+2008   7  18  54665   0.252942   0.459084  -0.4481566  -0.0001972   0.000175  -0.000305   0.000044   0.000045  0.0000043  0.0000067    0.000089    0.000085
+2008   7  19  54666   0.254996   0.456584  -0.4480724   0.0000019   0.000116  -0.000345   0.000045   0.000046  0.0000123  0.0000067    0.000070    0.000073
+2008   7  20  54667   0.257213   0.453746  -0.4481916   0.0002643   0.000094  -0.000338   0.000046   0.000047  0.0000178  0.0000067    0.000060    0.000059
+2008   7  21  54668   0.259658   0.450866  -0.4485842   0.0005109   0.000080  -0.000329   0.000046   0.000047  0.0000121  0.0000069    0.000049    0.000045
+2008   7  22  54669   0.262234   0.447604  -0.4492214   0.0006832   0.000078  -0.000321   0.000044   0.000046  0.0000029  0.0000069    0.000039    0.000032
+2008   7  23  54670   0.265121   0.444113  -0.4499824   0.0007565   0.000051  -0.000281   0.000044   0.000045  0.0000011  0.0000069    0.000221    0.000303
+2008   7  24  54671   0.267781   0.440700  -0.4507634   0.0007706   0.000075  -0.000338   0.000044   0.000046  0.0000013  0.0000069    0.000201    0.000268
+2008   7  25  54672   0.270317   0.437376  -0.4514821   0.0007085   0.000121  -0.000426   0.000044   0.000046  0.0000014  0.0000068    0.000104    0.000119
+2008   7  26  54673   0.272843   0.434775  -0.4520725   0.0005424   0.000153  -0.000423   0.000045   0.000047  0.0000013  0.0000069    0.000070    0.000070
+2008   7  27  54674   0.275004   0.432353  -0.4524845   0.0003228   0.000178  -0.000389   0.000049   0.000050  0.0000011  0.0000074    0.000060    0.000058
+2008   7  28  54675   0.276764   0.429622  -0.4527027   0.0001030   0.000198  -0.000353   0.000050   0.000050  0.0000009  0.0000078    0.000050    0.000047
+2008   7  29  54676   0.278260   0.426810  -0.4527644   0.0000048   0.000213  -0.000319   0.000048   0.000049  0.0000007  0.0000078    0.000039    0.000035
+2008   7  30  54677   0.279472   0.424017  -0.4527576   0.0000129   0.000015  -0.000315   0.000048   0.000048  0.0000087  0.0000078    0.000040    0.000045
+2008   7  31  54678   0.280212   0.421324  -0.4528058   0.0001129   0.000021  -0.000367   0.000049   0.000049  0.0000147  0.0000076    0.000058    0.000056
+2008   8   1  54679   0.281095   0.418220  -0.4530164   0.0002879   0.000098  -0.000431   0.000048   0.000048  0.0000048  0.0000074    0.000080    0.000065
+2008   8   2  54680   0.282278   0.415059  -0.4534334   0.0005151   0.000123  -0.000439   0.000049   0.000049  0.0000083  0.0000074    0.000078    0.000060
+2008   8   3  54681   0.283698   0.411558  -0.4540488   0.0006875   0.000122  -0.000423   0.000050   0.000049  0.0000112  0.0000074    0.000065    0.000051
+2008   8   4  54682   0.285294   0.408055  -0.4548080   0.0007946   0.000114  -0.000400   0.000048   0.000048  0.0000077  0.0000072    0.000053    0.000041
+2008   8   5  54683   0.286947   0.404612  -0.4556099   0.0007402   0.000103  -0.000372   0.000046   0.000046  0.0000022  0.0000072    0.000041    0.000031
+2008   8   6  54684   0.288561   0.401288  -0.4563356   0.0005971  -0.000014  -0.000337   0.000046   0.000046  0.0000012  0.0000074    0.000228    0.000211
+2008   8   7  54685   0.290013   0.398361  -0.4568748   0.0004084  -0.000130  -0.000308   0.000048   0.000048  0.0000014  0.0000074    0.000211    0.000197
+2008   8   8  54686   0.290735   0.395540  -0.4571656   0.0002168  -0.000226  -0.000284   0.000048   0.000047  0.0000015  0.0000072    0.000118    0.000109
+2008   8   9  54687   0.291462   0.392590  -0.4572240   0.0000861  -0.000208  -0.000270   0.000048   0.000048  0.0000210  0.0000072    0.000079    0.000072
+2008   8  10  54688   0.291934   0.389506  -0.4572517  -0.0000638  -0.000135  -0.000264   0.000049   0.000048  0.0000171  0.0000072    0.000060    0.000055
+2008   8  11  54689   0.292397   0.385923  -0.4571806  -0.0001666  -0.000046  -0.000266   0.000047   0.000047  0.0000157  0.0000070    0.000041    0.000038
+2008   8  12  54690   0.292798   0.382712  -0.4569391  -0.0002300   0.000052  -0.000274   0.000045   0.000045  0.0000198  0.0000070    0.000022    0.000021
+2008   8  13  54691   0.292964   0.379288  -0.4566923  -0.0001714   0.000158  -0.000316   0.000045   0.000045  0.0000166  0.0000072    0.000011    0.000011
+2008   8  14  54692   0.293094   0.376362  -0.4565936  -0.0000605   0.000218  -0.000358   0.000044   0.000044  0.0000175  0.0000072    0.000010    0.000010
+2008   8  15  54693   0.292938   0.373377  -0.4566194   0.0000866   0.000220  -0.000360   0.000045   0.000045  0.0000146  0.0000071    0.000011    0.000011
+2008   8  16  54694   0.293647   0.370583  -0.4568158   0.0002606   0.000209  -0.000363   0.000048   0.000048  0.0000120  0.0000071    0.000013    0.000012
+2008   8  17  54695   0.294227   0.368032  -0.4571434   0.0004320   0.000183  -0.000362   0.000049   0.000050  0.0000129  0.0000072    0.000014    0.000013
+2008   8  18  54696   0.294488   0.365068  -0.4576976   0.0006539   0.000147  -0.000348   0.000048   0.000048  0.0000138  0.0000072    0.000014    0.000013
+2008   8  19  54697   0.294829   0.361866  -0.4584531   0.0008180   0.000120  -0.000333   0.000047   0.000046  0.0000164  0.0000071    0.000013    0.000012
+2008   8  20  54698   0.295383   0.358688  -0.4592786   0.0008574   0.000114  -0.000334   0.000047   0.000047  0.0000264  0.0000071    0.000014    0.000013
+2008   8  21  54699   0.296152   0.355625  -0.4600868   0.0007437   0.000129  -0.000337   0.000045   0.000045  0.0000228  0.0000072    0.000013    0.000012
+2008   8  22  54700   0.297042   0.352272  -0.4607807   0.0005566   0.000152  -0.000308   0.000045   0.000045  0.0000200  0.0000073    0.000010    0.000010
+2008   8  23  54701   0.298078   0.349065  -0.4612562   0.0003478   0.000158  -0.000264   0.000047   0.000047  0.0000185  0.0000072    0.000010    0.000010
+2008   8  24  54702   0.298570   0.346086  -0.4614921   0.0001692   0.000154  -0.000256   0.000050   0.000049  0.0000156  0.0000073    0.000010    0.000011
+2008   8  25  54703   0.298251   0.343028  -0.4615948   0.0000471   0.000160  -0.000278   0.000048   0.000048  0.0000130  0.0000074    0.000010    0.000011
+2008   8  26  54704   0.297860   0.339459  -0.4616488   0.0000745   0.000157  -0.000273   0.000048   0.000047  0.0000101  0.0000076    0.000010    0.000010
+2008   8  27  54705   0.298121   0.335855  -0.4617752   0.0002197   0.000131  -0.000231   0.000049   0.000049  0.0000102  0.0000078    0.001338    0.000237
+2008   8  28  54706   0.298233   0.332587  -0.4620588   0.0003713   0.000107  -0.000203   0.000050   0.000049  0.0000122  0.0000077    0.000623    0.000335
+2008   8  29  54707   0.298333   0.329453  -0.4625377   0.0006048   0.000093  -0.000215   0.000049   0.000050  0.0000042  0.0000076    0.000110    0.000138
+2008   8  30  54708   0.298464   0.326158  -0.4633047   0.0008746   0.000082  -0.000261   0.000050   0.000051  0.0000121  0.0000076    0.000079    0.000071
+2008   8  31  54709   0.298665   0.322331  -0.4642797   0.0010136   0.000073  -0.000318   0.000051   0.000051  0.0000155  0.0000076    0.000088    0.000072
+2008   9   1  54710   0.298707   0.318525  -0.4653344   0.0010423   0.000068  -0.000375   0.000047   0.000047  0.0000127  0.0000072    0.000097    0.000074
+2008   9   2  54711   0.298957   0.314645  -0.4663634   0.0009687   0.000067  -0.000428   0.000045   0.000046  0.0000077  0.0000072    0.000107    0.000075
+2008   9   3  54712   0.299224   0.310818  -0.4672659   0.0007928   0.000073  -0.000374   0.000044   0.000045  0.0000019  0.0000073    0.000050    0.000039
+2008   9   4  54713   0.299112   0.307217  -0.4679755   0.0005900   0.000070  -0.000354   0.000042   0.000043  0.0000012  0.0000073    0.000018    0.000016
+2008   9   5  54714   0.298674   0.303494  -0.4684776   0.0003882   0.000070  -0.000397   0.000042   0.000043  0.0000017  0.0000073    0.000046    0.000057
+2008   9   6  54715   0.298312   0.299890  -0.4687960   0.0002316   0.000099  -0.000406   0.000044   0.000044  0.0000089  0.0000072    0.000057    0.000068
+2008   9   7  54716   0.297902   0.296395  -0.4689500   0.0001238   0.000139  -0.000395   0.000044   0.000045  0.0000171  0.0000071    0.000055    0.000061
+2008   9   8  54717   0.297581   0.292998  -0.4690528   0.0001195   0.000175  -0.000387   0.000043   0.000044  0.0000129  0.0000070    0.000053    0.000054
+2008   9   9  54718   0.297297   0.289776  -0.4692073   0.0002013   0.000206  -0.000382   0.000041   0.000043  0.0000030  0.0000071    0.000051    0.000047
+2008   9  10  54719   0.296925   0.286632  -0.4694590   0.0003153   0.000156  -0.000300   0.000041   0.000043  0.0000080  0.0000072    0.000031    0.000031
+2008   9  11  54720   0.296493   0.283729  -0.4698566   0.0004891   0.000142  -0.000256   0.000042   0.000044  0.0000131  0.0000072    0.000039    0.000031
+2008   9  12  54721   0.295831   0.280756  -0.4704753   0.0007665   0.000123  -0.000335   0.000041   0.000043  0.0000040  0.0000070    0.000074    0.000067
+2008   9  13  54722   0.294494   0.277695  -0.4714153   0.0010890   0.000074  -0.000464   0.000043   0.000044  0.0000108  0.0000070    0.000134    0.000108
+2008   9  14  54723   0.292846   0.274536  -0.4726389   0.0013376   0.000016  -0.000591   0.000046   0.000047  0.0000142  0.0000072    0.000203    0.000148
+2008   9  15  54724   0.291504   0.271284  -0.4740971   0.0015307   0.000060  -0.000597   0.000046   0.000047  0.0000093  0.0000072    0.000172    0.000126
+2008   9  16  54725   0.290494   0.268142  -0.4757079   0.0016192   0.000156  -0.000531   0.000046   0.000047  0.0000026  0.0000072    0.000087    0.000073
+2008   9  17  54726   0.289411   0.265031  -0.4773215   0.0015687   0.000228  -0.000466   0.000046   0.000047  0.0000196  0.0000072    0.000256    0.000197
+2008   9  18  54727   0.287882   0.261652  -0.4787871   0.0013736   0.000139  -0.000362   0.000047   0.000047  0.0000160  0.0000071    0.000222    0.000172
+2008   9  19  54728   0.286010   0.258160  -0.4800163   0.0010884   0.000002  -0.000245   0.000046   0.000046  0.0000044  0.0000071    0.000106    0.000088
+2008   9  20  54729   0.284188   0.254608  -0.4809879   0.0008478  -0.000027  -0.000198   0.000048   0.000047  0.0000096  0.0000072    0.000070    0.000063
+2008   9  21  54730   0.282235   0.251208  -0.4816744   0.0006457  -0.000014  -0.000187   0.000046   0.000045  0.0000133  0.0000067    0.000065    0.000062
+2008   9  22  54731   0.280210   0.247796  -0.4822542   0.0005656   0.000001  -0.000190   0.000043   0.000042  0.0000089  0.0000061    0.000060    0.000060
+2008   9  23  54732   0.278340   0.244288  -0.4828562   0.0006039   0.000018  -0.000210   0.000041   0.000040  0.0000024  0.0000061    0.000054    0.000059
+2008   9  24  54733   0.276571   0.240884  -0.4834873   0.0007108   0.000108  -0.000318   0.000041   0.000040  0.0000097  0.0000062    0.000031    0.000032
+2008   9  25  54734   0.274761   0.237613  -0.4842903   0.0009274   0.000074  -0.000318   0.000042   0.000040  0.0000159  0.0000063    0.000043    0.000036
+2008   9  26  54735   0.273056   0.234359  -0.4853649   0.0011686  -0.000001  -0.000282   0.000042   0.000041  0.0000046  0.0000062    0.000065    0.000050
+2008   9  27  54736   0.271340   0.231030  -0.4866091   0.0013156  -0.000034  -0.000318   0.000042   0.000041  0.0000113  0.0000061    0.000066    0.000053
+2008   9  28  54737   0.269819   0.227894  -0.4879763   0.0014186  -0.000047  -0.000376   0.000045   0.000044  0.0000130  0.0000063    0.000058    0.000051
+2008   9  29  54738   0.268314   0.225378  -0.4894044   0.0014005  -0.000053  -0.000427   0.000046   0.000046  0.0000078  0.0000067    0.000051    0.000049
+2008   9  30  54739   0.266487   0.222774  -0.4907782   0.0012862  -0.000053  -0.000469   0.000045   0.000044  0.0000020  0.0000067    0.000043    0.000047
+2008  10   1  54740   0.264615   0.220275  -0.4919908   0.0011052   0.000028  -0.000434   0.000045   0.000044  0.0000109  0.0000068    0.000051    0.000059
+2008  10   2  54741   0.262467   0.217657  -0.4929841   0.0008630   0.000131  -0.000372   0.000046   0.000046  0.0000183  0.0000069    0.000064    0.000074
+2008  10   3  54742   0.259847   0.214951  -0.4937430   0.0006426   0.000102  -0.000377   0.000046   0.000046  0.0000051  0.0000070    0.000074    0.000068
+2008  10   4  54743   0.256867   0.212303  -0.4942830   0.0004496   0.000087  -0.000363   0.000047   0.000047  0.0000068  0.0000071    0.000077    0.000067
+2008  10   5  54744   0.254355   0.209700  -0.4946710   0.0003660   0.000089  -0.000335   0.000046   0.000045  0.0000078  0.0000067    0.000077    0.000070
+2008  10   6  54745   0.252117   0.207562  -0.4949901   0.0003366   0.000084  -0.000312   0.000041   0.000040  0.0000050  0.0000059    0.000077    0.000073
+2008  10   7  54746   0.249687   0.205508  -0.4953480   0.0003966   0.000070  -0.000297   0.000040   0.000039  0.0000019  0.0000057    0.000077    0.000076
+2008  10   8  54747   0.247214   0.203439  -0.4958532   0.0005666   0.000125  -0.000250   0.000040   0.000039  0.0000097  0.0000058    0.000065    0.000078
+2008  10   9  54748   0.244818   0.200748  -0.4965390   0.0007787   0.000130  -0.000283   0.000040   0.000039  0.0000158  0.0000059    0.000030    0.000038
+2008  10  10  54749   0.242388   0.197804  -0.4974203   0.0010095   0.000024  -0.000466   0.000040   0.000039  0.0000044  0.0000061    0.000041    0.000044
+2008  10  11  54750   0.239638   0.194665  -0.4985465   0.0012476  -0.000036  -0.000503   0.000041   0.000040  0.0000044  0.0000062    0.000054    0.000054
+2008  10  12  54751   0.237156   0.191669  -0.4999131   0.0014551  -0.000066  -0.000463   0.000046   0.000044  0.0000085  0.0000065    0.000060    0.000059
+2008  10  13  54752   0.234757   0.189135  -0.5014520   0.0015640  -0.000092  -0.000416   0.000046   0.000044  0.0000134  0.0000065    0.000067    0.000064
+2008  10  14  54753   0.232560   0.186753  -0.5030265   0.0015747  -0.000111  -0.000361   0.000044   0.000042  0.0000117  0.0000063    0.000074    0.000069
+2008  10  15  54754   0.229752   0.184696  -0.5045302   0.0014595  -0.000122  -0.000299   0.000044   0.000043  0.0000030  0.0000065    0.000080    0.000073
+2008  10  16  54755   0.227078   0.182441  -0.5059278   0.0012953  -0.000117  -0.000307   0.000044   0.000044  0.0000016  0.0000067    0.000089    0.000088
+2008  10  17  54756   0.224416   0.180265  -0.5071454   0.0011354  -0.000104  -0.000333   0.000044   0.000043  0.0000021  0.0000065    0.000098    0.000104
+2008  10  18  54757   0.221646   0.177803  -0.5081474   0.0009747  -0.000088  -0.000314   0.000044   0.000043  0.0000067  0.0000065    0.000088    0.000096
+2008  10  19  54758   0.218910   0.175146  -0.5090496   0.0009588  -0.000071  -0.000283   0.000046   0.000044  0.0000083  0.0000067    0.000072    0.000078
+2008  10  20  54759   0.216266   0.172770  -0.5100037   0.0010169  -0.000055  -0.000259   0.000045   0.000043  0.0000054  0.0000065    0.000054    0.000059
+2008  10  21  54760   0.213672   0.170521  -0.5111015   0.0011584  -0.000040  -0.000242   0.000042   0.000041  0.0000015  0.0000063    0.000037    0.000041
+2008  10  22  54761   0.211332   0.168672  -0.5123738   0.0013182  -0.000047  -0.000264   0.000041   0.000041  0.0000010  0.0000063    0.000050    0.000052
+2008  10  23  54762   0.208404   0.166818  -0.5138042   0.0014820  -0.000063  -0.000299   0.000042   0.000042  0.0000014  0.0000063    0.000071    0.000071
+2008  10  24  54763   0.205017   0.164847  -0.5153474   0.0016242  -0.000081  -0.000336   0.000043   0.000043  0.0000018  0.0000065    0.000091    0.000090
+2008  10  25  54764   0.201236   0.162477  -0.5169512   0.0016531  -0.000082  -0.000355   0.000044   0.000044  0.0000155  0.0000065    0.000092    0.000092
+2008  10  26  54765   0.197797   0.159866  -0.5185921   0.0016022  -0.000077  -0.000365   0.000046   0.000046  0.0000287  0.0000067    0.000085    0.000088
+2008  10  27  54766   0.195294   0.157921  -0.5202037   0.0015495  -0.000072  -0.000369   0.000046   0.000046  0.0000214  0.0000067    0.000078    0.000085
+2008  10  28  54767   0.193293   0.156636  -0.5216944   0.0014209  -0.000066  -0.000366   0.000045   0.000045  0.0000053  0.0000066    0.000071    0.000081
+2008  10  29  54768   0.191198   0.155805  -0.5229960   0.0011831  -0.000077  -0.000341   0.000046   0.000046  0.0000063  0.0000068    0.000084    0.000088
+2008  10  30  54769   0.188446   0.154341  -0.5240779   0.0009573  -0.000092  -0.000306   0.000046   0.000046  0.0000095  0.0000067    0.000101    0.000098
+2008  10  31  54770   0.185699   0.152912  -0.5249567   0.0008156  -0.000107  -0.000267   0.000045   0.000046  0.0000041  0.0000067    0.000119    0.000109
+2008  11   1  54771   0.182606   0.151445  -0.5256874   0.0006669  -0.000102  -0.000264   0.000046   0.000047  0.0000046  0.0000068    0.000109    0.000097
+2008  11   2  54772   0.179447   0.149645  -0.5263055   0.0006240  -0.000091  -0.000273   0.000049   0.000049  0.0000085  0.0000072    0.000088    0.000078
+2008  11   3  54773   0.176517   0.148447  -0.5269205   0.0006352  -0.000083  -0.000284   0.000050   0.000050  0.0000069  0.0000075    0.000067    0.000059
+2008  11   4  54774   0.173275   0.147705  -0.5275902   0.0006640  -0.000080  -0.000296   0.000047   0.000048  0.0000022  0.0000074    0.000046    0.000039
+2008  11   5  54775   0.169828   0.146657  -0.5283051   0.0007806  -0.000094  -0.000196   0.000047   0.000047  0.0000025  0.0000072    0.000066    0.000061
+2008  11   6  54776   0.166521   0.145613  -0.5291430   0.0009370  -0.000116  -0.000073   0.000048   0.000048  0.0000035  0.0000070    0.000096    0.000093
+2008  11   7  54777   0.163837   0.144675  -0.5301825   0.0011358  -0.000103  -0.000184   0.000048   0.000048  0.0000024  0.0000070    0.000093    0.000103
+2008  11   8  54778   0.160902   0.143866  -0.5314144   0.0013463  -0.000136  -0.000218   0.000049   0.000049  0.0000069  0.0000072    0.000081    0.000093
+2008  11   9  54779   0.157716   0.142924  -0.5328725   0.0015621  -0.000187  -0.000199   0.000052   0.000051  0.0000083  0.0000075    0.000070    0.000079
+2008  11  10  54780   0.154105   0.142229  -0.5344983   0.0016572  -0.000226  -0.000183   0.000052   0.000052  0.0000054  0.0000076    0.000060    0.000066
+2008  11  11  54781   0.150285   0.141073  -0.5361754   0.0016335  -0.000249  -0.000168   0.000049   0.000049  0.0000016  0.0000074    0.000050    0.000052
+2008  11  12  54782   0.146769   0.140248  -0.5377860   0.0015145  -0.000296  -0.000316   0.000048   0.000048  0.0000030  0.0000073    0.000041    0.000044
+2008  11  13  54783   0.142562   0.139302  -0.5391944   0.0012609  -0.000222  -0.000397   0.000050   0.000050  0.0000045  0.0000073    0.000064    0.000062
+2008  11  14  54784   0.138365   0.137929  -0.5403113   0.0009955  -0.000158  -0.000330   0.000050   0.000050  0.0000022  0.0000072    0.000067    0.000067
+2008  11  15  54785   0.134511   0.136814  -0.5411472   0.0007951  -0.000036  -0.000255   0.000052   0.000051  0.0000072  0.0000075    0.000092    0.000091
+2008  11  16  54786   0.130906   0.136127  -0.5419075   0.0008257   0.000103  -0.000193   0.000054   0.000054  0.0000111  0.0000080    0.000129    0.000126
+2008  11  17  54787   0.126966   0.135714  -0.5427707   0.0009634   0.000221  -0.000134   0.000052   0.000053  0.0000090  0.0000079    0.000167    0.000160
+2008  11  18  54788   0.123297   0.135415  -0.5438640   0.0012240   0.000311  -0.000078   0.000049   0.000050  0.0000049  0.0000074    0.000204    0.000195
+2008  11  19  54789   0.120597   0.135063  -0.5452676   0.0015684   0.000223  -0.000237   0.000049   0.000050  0.0000070  0.0000073    0.000094    0.000079
+2008  11  20  54790   0.118530   0.135164  -0.5469401   0.0017586  -0.000037  -0.000413   0.000049   0.000050  0.0000088  0.0000074    0.000060    0.000048
+2008  11  21  54791   0.116978   0.135458  -0.5487677   0.0018525  -0.000216  -0.000382   0.000049   0.000050  0.0000036  0.0000074    0.000121    0.000122
+2008  11  22  54792   0.115406   0.135972  -0.5506306   0.0018681  -0.000285  -0.000327   0.000050   0.000052  0.0000078  0.0000076    0.000130    0.000133
+2008  11  23  54793   0.113355   0.136259  -0.5524483   0.0017576  -0.000319  -0.000282   0.000053   0.000053  0.0000202  0.0000077    0.000112    0.000113
+2008  11  24  54794   0.110904   0.136602  -0.5541538   0.0016109  -0.000336  -0.000235   0.000051   0.000052  0.0000167  0.0000075    0.000094    0.000093
+2008  11  25  54795   0.107891   0.137304  -0.5557001   0.0014598  -0.000332  -0.000187   0.000049   0.000050  0.0000040  0.0000074    0.000077    0.000072
+2008  11  26  54796   0.104408   0.137118  -0.5570732   0.0013085  -0.000279  -0.000130   0.000049   0.000050  0.0000022  0.0000074    0.000149    0.000139
+2008  11  27  54797   0.101267   0.136557  -0.5582948   0.0011541  -0.000270  -0.000188   0.000049   0.000051  0.0000045  0.0000075    0.000133    0.000144
+2008  11  28  54798   0.098307   0.136187  -0.5593760   0.0010221  -0.000273  -0.000289   0.000050   0.000051  0.0000073  0.0000075    0.000075    0.000119
+2008  11  29  54799   0.095151   0.135897  -0.5603261   0.0009246  -0.000232  -0.000289   0.000051   0.000051  0.0000102  0.0000075    0.000070    0.000102
+2008  11  30  54800   0.091663   0.135558  -0.5611835   0.0008753  -0.000190  -0.000285   0.000052   0.000052  0.0000085  0.0000074    0.000065    0.000085
+2008  12   1  54801   0.088253   0.135332  -0.5620766   0.0009266  -0.000151  -0.000280   0.000050   0.000050  0.0000049  0.0000073    0.000060    0.000069
+2008  12   2  54802   0.084620   0.135160  -0.5630619   0.0010400  -0.000122  -0.000271   0.000046   0.000047  0.0000015  0.0000072    0.000055    0.000052
+2008  12   3  54803   0.080528   0.135129  -0.5641160   0.0011004  -0.000068  -0.000094   0.000046   0.000046  0.0000042  0.0000071    0.000049    0.000052
+2008  12   4  54804   0.075992   0.135019  -0.5652934   0.0012470  -0.000098  -0.000104   0.000048   0.000048  0.0000068  0.0000071    0.000072    0.000072
+2008  12   5  54805   0.071818   0.135231  -0.5666526   0.0014663  -0.000162  -0.000184   0.000048   0.000049  0.0000028  0.0000072    0.000102    0.000097
+2008  12   6  54806   0.068107   0.135290  -0.5681726   0.0016033  -0.000198  -0.000206   0.000050   0.000050  0.0000053  0.0000073    0.000104    0.000097
+2008  12   7  54807   0.064635   0.135129  -0.5698184   0.0016904  -0.000222  -0.000207   0.000052   0.000052  0.0000069  0.0000076    0.000095    0.000088
+2008  12   8  54808   0.061520   0.134581  -0.5715201   0.0016471  -0.000244  -0.000208   0.000051   0.000051  0.0000085  0.0000077    0.000086    0.000079
+2008  12   9  54809   0.059070   0.134298  -0.5731197   0.0014799  -0.000262  -0.000209   0.000049   0.000049  0.0000082  0.0000076    0.000076    0.000070
+2008  12  10  54810   0.056696   0.134800  -0.5744866   0.0012630  -0.000273  -0.000211   0.000048   0.000048  0.0000025  0.0000075    0.000067    0.000061
+2008  12  11  54811   0.053621   0.134989  -0.5756155   0.0009852  -0.000227  -0.000170   0.000048   0.000048  0.0000014  0.0000075    0.000076    0.000076
+2008  12  12  54812   0.050488   0.134504  -0.5764881   0.0007579  -0.000162  -0.000119   0.000049   0.000049  0.0000014  0.0000075    0.000090    0.000097
+2008  12  13  54813   0.047268   0.134451  -0.5771492   0.0006777  -0.000169  -0.000127   0.000049   0.000049  0.0000032  0.0000074    0.000087    0.000092
+2008  12  14  54814   0.044769   0.134277  -0.5778480   0.0008061  -0.000201  -0.000158   0.000052   0.000052  0.0000058  0.0000076    0.000076    0.000079
+2008  12  15  54815   0.042802   0.134492  -0.5787628   0.0010580  -0.000232  -0.000188   0.000054   0.000053  0.0000046  0.0000077    0.000066    0.000066
+2008  12  16  54816   0.040093   0.134857  -0.5799178   0.0012699  -0.000263  -0.000214   0.000050   0.000050  0.0000014  0.0000077    0.000056    0.000052
+2008  12  17  54817   0.036876   0.135056  -0.5812563   0.0013812  -0.000210  -0.000233   0.000049   0.000050  0.0000060  0.0000078    0.000035    0.000031
+2008  12  18  54818   0.033694   0.135446  -0.5826892   0.0014472  -0.000144  -0.000176   0.000050   0.000051  0.0000099  0.0000076    0.000017    0.000017
+2008  12  19  54819   0.030543   0.136015  -0.5841296   0.0014449  -0.000099  -0.000097   0.000050   0.000052  0.0000034  0.0000076    0.000086    0.000094
+2008  12  20  54820   0.027496   0.136544  -0.5855073   0.0013360  -0.000114  -0.000087   0.000052   0.000053  0.0000058  0.0000077    0.000104    0.000112
+2008  12  21  54821   0.024489   0.137342  -0.5867205   0.0011124  -0.000152  -0.000102   0.000055   0.000056  0.0000086  0.0000078    0.000093    0.000097
+2008  12  22  54822   0.021190   0.138117  -0.5877442   0.0009131  -0.000194  -0.000119   0.000055   0.000056  0.0000062  0.0000080    0.000082    0.000081
+2008  12  23  54823   0.017962   0.138639  -0.5885815   0.0007357  -0.000237  -0.000142   0.000052   0.000054  0.0000019  0.0000081    0.000071    0.000066
+2008  12  24  54824   0.014481   0.139008  -0.5892146   0.0005241  -0.000277  -0.000028   0.000053   0.000054  0.0000093  0.0000081    0.000090    0.000075
+2008  12  25  54825   0.010872   0.139410  -0.5896284   0.0003418  -0.000281   0.000000   0.000054   0.000056  0.0000170  0.0000080    0.000095    0.000079
+2008  12  26  54826   0.006688   0.139931  -0.5898619   0.0002136  -0.000266  -0.000028   0.000055   0.000057  0.0000137  0.0000080    0.000094    0.000079
+2008  12  27  54827   0.002880   0.140413  -0.5900443   0.0002402  -0.000245  -0.000067   0.000056   0.000059  0.0000103  0.0000081    0.000093    0.000079
+2008  12  28  54828  -0.001070   0.141761  -0.5903085   0.0002777  -0.000219  -0.000117   0.000056   0.000057  0.0000093  0.0000078    0.000091    0.000079
+2008  12  29  54829  -0.005267   0.143011  -0.5906606   0.0003875  -0.000191  -0.000170   0.000052   0.000053  0.0000064  0.0000074    0.000090    0.000079
+2008  12  30  54830  -0.009633   0.144173  -0.5911461   0.0005700  -0.000163  -0.000219   0.000051   0.000052  0.0000021  0.0000074    0.000088    0.000079
+2008  12  31  54831  -0.013422   0.144978  -0.5918700   0.0008303  -0.000161  -0.000389   0.000051   0.000053  0.0000031  0.0000076    0.000183    0.000228
+2009   1   1  54832  -0.017026   0.146233   0.4071532   0.0010604  -0.000164  -0.000422   0.000052   0.000053  0.0000054  0.0000076    0.000197    0.000254
+2009   1   2  54833  -0.020388   0.147429   0.4059738   0.0012279  -0.000172  -0.000373   0.000052   0.000053  0.0000077  0.0000076    0.000167    0.000214
+2009   1   3  54834  -0.023244   0.149064   0.4046741   0.0013014  -0.000185  -0.000307   0.000053   0.000054  0.0000091  0.0000076    0.000138    0.000173
+2009   1   4  54835  -0.025738   0.150615   0.4033460   0.0013085  -0.000202  -0.000230   0.000058   0.000058  0.0000065  0.0000077    0.000108    0.000133
+2009   1   5  54836  -0.029045   0.152715   0.4020677   0.0012157  -0.000221  -0.000149   0.000060   0.000059  0.0000039  0.0000077    0.000078    0.000093
+2009   1   6  54837  -0.033356   0.154434   0.4009121   0.0010530  -0.000239  -0.000070   0.000058   0.000057  0.0000013  0.0000077    0.000048    0.000052
+2009   1   7  54838  -0.037535   0.156207   0.3999393   0.0008132  -0.000257  -0.000067   0.000058   0.000058  0.0000072  0.0000079    0.000046    0.000045
+2009   1   8  54839  -0.041695   0.157963   0.3992078   0.0005971  -0.000272  -0.000091   0.000059   0.000059  0.0000119  0.0000080    0.000052    0.000045
+2009   1   9  54840  -0.045888   0.159630   0.3986770   0.0005392  -0.000283  -0.000125   0.000060   0.000060  0.0000035  0.0000081    0.000057    0.000046
+2009   1  10  54841  -0.049557   0.161119   0.3981529   0.0006209  -0.000271  -0.000155   0.000061   0.000061  0.0000072  0.0000081    0.000058    0.000048
+2009   1  11  54842  -0.053093   0.162708   0.3974749   0.0008066  -0.000251  -0.000183   0.000062   0.000063  0.0000096  0.0000085    0.000058    0.000051
+2009   1  12  54843  -0.056477   0.164329   0.3965287   0.0011128  -0.000230  -0.000210   0.000062   0.000063  0.0000066  0.0000089    0.000058    0.000054
+2009   1  13  54844  -0.059584   0.166087   0.3952896   0.0013444  -0.000210  -0.000236   0.000060   0.000061  0.0000022  0.0000088    0.000057    0.000056
+2009   1  14  54845  -0.062423   0.167618   0.3938420   0.0015018  -0.000167  -0.000143   0.000060   0.000061  0.0000014  0.0000090    0.000047    0.000046
+2009   1  15  54846  -0.065311   0.169251   0.3923252   0.0015090  -0.000198  -0.000081   0.000060   0.000062  0.0000014  0.0000091    0.000058    0.000060
+2009   1  16  54847  -0.068177   0.170273   0.3908856   0.0013764  -0.000251  -0.000038   0.000060   0.000061  0.0000014  0.0000089    0.000076    0.000082
+2009   1  17  54848  -0.070698   0.171383   0.3896308   0.0011817  -0.000259  -0.000050   0.000061   0.000062  0.0000085  0.0000089    0.000093    0.000099
+2009   1  18  54849  -0.073253   0.173035   0.3885626   0.0009515  -0.000245  -0.000082   0.000062   0.000062  0.0000122  0.0000089    0.000108    0.000114
+2009   1  19  54850  -0.075679   0.174869   0.3877573   0.0006397  -0.000224  -0.000116   0.000062   0.000063  0.0000098  0.0000091    0.000124    0.000130
+2009   1  20  54851  -0.078305   0.177004   0.3872517   0.0003783  -0.000195  -0.000150   0.000063   0.000063  0.0000058  0.0000093    0.000139    0.000145
+2009   1  21  54852  -0.081110   0.179475   0.3869773   0.0002359  -0.000171  -0.000108   0.000063   0.000062  0.0000018  0.0000093    0.000063    0.000060
+2009   1  22  54853  -0.084382   0.181843   0.3868427   0.0000944  -0.000142  -0.000118   0.000063   0.000062  0.0000012  0.0000092    0.000021    0.000021
+2009   1  23  54854  -0.087489   0.184163   0.3867854   0.0000560  -0.000121  -0.000148   0.000064   0.000063  0.0000014  0.0000093    0.000077    0.000076
+2009   1  24  54855  -0.090118   0.186680   0.3867486   0.0000907  -0.000086  -0.000114   0.000064   0.000063  0.0000055  0.0000093    0.000137    0.000126
+2009   1  25  54856  -0.091529   0.189284   0.3866253   0.0002202  -0.000051  -0.000055   0.000062   0.000060  0.0000065  0.0000086    0.000187    0.000163
+2009   1  26  54857  -0.093220   0.192201   0.3863484   0.0003723  -0.000028   0.000005   0.000057   0.000056  0.0000055  0.0000078    0.000237    0.000200
+2009   1  27  54858  -0.094450   0.194730   0.3858794   0.0005532  -0.000017   0.000059   0.000056   0.000055  0.0000045  0.0000077    0.000288    0.000237
+2009   1  28  54859  -0.095950   0.197451   0.3851993   0.0007342  -0.000043   0.000056   0.000056   0.000055  0.0000119  0.0000076    0.000228    0.000188
+2009   1  29  54860  -0.098095   0.199963   0.3843660   0.0009029  -0.000085   0.000030   0.000057   0.000056  0.0000186  0.0000077    0.000139    0.000116
+2009   1  30  54861  -0.100263   0.202563   0.3834176   0.0009660  -0.000133  -0.000002   0.000057   0.000056  0.0000137  0.0000078    0.000049    0.000044
+2009   1  31  54862  -0.102853   0.205265   0.3824425   0.0009531  -0.000184  -0.000029   0.000057   0.000056  0.0000076  0.0000079    0.000039    0.000038
+2009   2   1  54863  -0.105436   0.207970   0.3815574   0.0008615  -0.000230  -0.000055   0.000059   0.000059  0.0000078  0.0000080    0.000058    0.000057
+2009   2   2  54864  -0.107468   0.210576   0.3807161   0.0007138  -0.000270  -0.000081   0.000059   0.000058  0.0000057  0.0000078    0.000078    0.000076
+2009   2   3  54865  -0.108392   0.213529   0.3800434   0.0005599  -0.000300  -0.000106   0.000058   0.000057  0.0000022  0.0000076    0.000097    0.000096
+2009   2   4  54866  -0.109017   0.216924   0.3795276   0.0004487  -0.000294  -0.000072   0.000058   0.000058  0.0000071  0.0000077    0.000051    0.000050
+2009   2   5  54867  -0.110062   0.220680   0.3790909   0.0004244  -0.000235  -0.000018   0.000058   0.000057  0.0000111  0.0000078    0.000054    0.000068
+2009   2   6  54868  -0.111650   0.224346   0.3786355   0.0004656  -0.000148  -0.000020   0.000058   0.000057  0.0000033  0.0000080    0.000077    0.000069
+2009   2   7  54869  -0.113828   0.227919   0.3780940   0.0006428  -0.000146  -0.000060   0.000060   0.000059  0.0000051  0.0000081    0.000084    0.000070
+2009   2   8  54870  -0.115884   0.231338   0.3773345   0.0008963  -0.000180  -0.000101   0.000061   0.000060  0.0000088  0.0000082    0.000085    0.000075
+2009   2   9  54871  -0.118083   0.234383   0.3763042   0.0011683  -0.000215  -0.000138   0.000061   0.000060  0.0000068  0.0000082    0.000086    0.000080
+2009   2  10  54872  -0.119683   0.237157   0.3750251   0.0013946  -0.000250  -0.000167   0.000059   0.000058  0.0000023  0.0000080    0.000088    0.000085
+2009   2  11  54873  -0.120548   0.240364   0.3735715   0.0014568  -0.000305  -0.000052   0.000059   0.000058  0.0000014  0.0000080    0.000060    0.000072
+2009   2  12  54874  -0.121362   0.244045   0.3721214   0.0013792  -0.000322   0.000087   0.000059   0.000059  0.0000015  0.0000081    0.000048    0.000060
+2009   2  13  54875  -0.122391   0.247675   0.3708727   0.0011380  -0.000194   0.000064   0.000059   0.000058  0.0000015  0.0000081    0.000086    0.000071
+2009   2  14  54876  -0.123653   0.251172   0.3699438   0.0008407  -0.000148   0.000048   0.000059   0.000058  0.0000093  0.0000082    0.000094    0.000072
+2009   2  15  54877  -0.125278   0.254913   0.3692238   0.0006171  -0.000148   0.000048   0.000065   0.000064  0.0000106  0.0000091    0.000087    0.000068
+2009   2  16  54878  -0.126776   0.258683   0.3686771   0.0004182  -0.000152   0.000044   0.000068   0.000068  0.0000107  0.0000097    0.000079    0.000064
+2009   2  17  54879  -0.128643   0.262097   0.3683074   0.0003025  -0.000158   0.000037   0.000067   0.000066  0.0000100  0.0000095    0.000072    0.000060
+2009   2  18  54880  -0.130462   0.264992   0.3680657   0.0001881  -0.000165   0.000030   0.000067   0.000067  0.0000028  0.0000095    0.000064    0.000056
+2009   2  19  54881  -0.132327   0.267942   0.3679031   0.0001367  -0.000196  -0.000213   0.000066   0.000067  0.0000014  0.0000097    0.000064    0.000063
+2009   2  20  54882  -0.133348   0.270364   0.3677703   0.0001833  -0.000228  -0.000054   0.000065   0.000066  0.0000016  0.0000099    0.000066    0.000065
+2009   2  21  54883  -0.133721   0.273036   0.3676093   0.0002297  -0.000216   0.000044   0.000066   0.000067  0.0000106  0.0000099    0.000066    0.000062
+2009   2  22  54884  -0.134150   0.275757   0.3673502   0.0003481  -0.000185   0.000065   0.000064   0.000065  0.0000124  0.0000093    0.000066    0.000059
+2009   2  23  54885  -0.133799   0.278669   0.3668739   0.0005866  -0.000149   0.000085   0.000061   0.000062  0.0000188  0.0000085    0.000066    0.000055
+2009   2  24  54886  -0.133128   0.282083   0.3661528   0.0008416  -0.000111   0.000102   0.000059   0.000060  0.0000186  0.0000083    0.000065    0.000051
+2009   2  25  54887  -0.133353   0.285612   0.3652169   0.0009993  -0.000087   0.000110   0.000060   0.000062  0.0000042  0.0000085    0.000057    0.000067
+2009   2  26  54888  -0.133537   0.288912   0.3640776   0.0011746  -0.000067   0.000099   0.000061   0.000063  0.0000018  0.0000087    0.000078    0.000100
+2009   2  27  54889  -0.133619   0.292518   0.3628267   0.0012627  -0.000050   0.000077   0.000061   0.000063  0.0000027  0.0000087    0.000108    0.000136
+2009   2  28  54890  -0.133962   0.296136   0.3615821   0.0012302  -0.000045   0.000057   0.000061   0.000063  0.0000074  0.0000088    0.000101    0.000129
+2009   3   1  54891  -0.134376   0.299803   0.3603504   0.0011620  -0.000047   0.000037   0.000058   0.000059  0.0000075  0.0000084    0.000081    0.000107
+2009   3   2  54892  -0.134761   0.303218   0.3592008   0.0010409  -0.000054   0.000017   0.000052   0.000053  0.0000046  0.0000080    0.000061    0.000084
+2009   3   3  54893  -0.134758   0.306334   0.3581947   0.0009295  -0.000064  -0.000003   0.000052   0.000052  0.0000016  0.0000078    0.000041    0.000062
+2009   3   4  54894  -0.134163   0.309625   0.3573129   0.0007949  -0.000015   0.000104   0.000051   0.000052  0.0000164  0.0000076    0.000049    0.000055
+2009   3   5  54895  -0.133708   0.313199   0.3565351   0.0007200  -0.000017   0.000076   0.000051   0.000052  0.0000276  0.0000077    0.000063    0.000069
+2009   3   6  54896  -0.133424   0.316779   0.3557782   0.0008478  -0.000043   0.000004   0.000052   0.000053  0.0000073  0.0000081    0.000075    0.000089
+2009   3   7  54897  -0.133142   0.320718   0.3548753   0.0010233  -0.000064  -0.000004   0.000053   0.000054  0.0000074  0.0000082    0.000076    0.000090
+2009   3   8  54898  -0.132980   0.324564   0.3537909   0.0012236  -0.000087   0.000015   0.000054   0.000054  0.0000096  0.0000080    0.000074    0.000084
+2009   3   9  54899  -0.132804   0.328801   0.3524025   0.0015402  -0.000112   0.000041   0.000053   0.000054  0.0000137  0.0000076    0.000071    0.000078
+2009   3  10  54900  -0.132483   0.332889   0.3507512   0.0017412  -0.000137   0.000071   0.000052   0.000053  0.0000111  0.0000075    0.000068    0.000072
+2009   3  11  54901  -0.132168   0.336768   0.3490103   0.0017690  -0.000160   0.000103   0.000053   0.000053  0.0000031  0.0000075    0.000066    0.000066
+2009   3  12  54902  -0.131939   0.340558   0.3473088   0.0016650  -0.000202   0.000136   0.000053   0.000054  0.0000015  0.0000076    0.000064    0.000062
+2009   3  13  54903  -0.131766   0.343848   0.3457145   0.0014812  -0.000242   0.000166   0.000053   0.000054  0.0000016  0.0000076    0.000063    0.000059
+2009   3  14  54904  -0.130842   0.346662   0.3442688   0.0012540  -0.000245   0.000182   0.000054   0.000054  0.0000513  0.0000078    0.000060    0.000056
+2009   3  15  54905  -0.130339   0.350164   0.3431809   0.0010070  -0.000230   0.000190   0.000054   0.000054  0.0000343  0.0000078    0.000056    0.000053
+2009   3  16  54906  -0.129449   0.353234   0.3423226   0.0008176  -0.000207   0.000190   0.000053   0.000053  0.0000096  0.0000076    0.000052    0.000050
+2009   3  17  54907  -0.128487   0.356583   0.3415509   0.0006310  -0.000178   0.000185   0.000052   0.000053  0.0000023  0.0000074    0.000048    0.000046
+2009   3  18  54908  -0.127700   0.359829   0.3408992   0.0005676  -0.000148   0.000148   0.000053   0.000054  0.0000009  0.0000072    0.000060    0.000057
+2009   3  19  54909  -0.127283   0.363318   0.3403170   0.0006039  -0.000119   0.000102   0.000053   0.000054  0.0000011  0.0000072    0.000076    0.000070
+2009   3  20  54910  -0.126833   0.366763   0.3396996   0.0006829  -0.000094   0.000057   0.000053   0.000053  0.0000013  0.0000074    0.000092    0.000084
+2009   3  21  54911  -0.125981   0.370089   0.3389350   0.0008860  -0.000082   0.000077   0.000054   0.000053  0.0000071  0.0000076    0.000096    0.000085
+2009   3  22  54912  -0.124870   0.373599   0.3379291   0.0011442  -0.000078   0.000124   0.000053   0.000051  0.0000129  0.0000074    0.000095    0.000081
+2009   3  23  54913  -0.123472   0.376826   0.3366747   0.0013601  -0.000078   0.000170   0.000050   0.000049  0.0000098  0.0000069    0.000095    0.000078
+2009   3  24  54914  -0.122080   0.380434   0.3352183   0.0015474  -0.000080   0.000218   0.000050   0.000049  0.0000027  0.0000067    0.000094    0.000075
+2009   3  25  54915  -0.120928   0.384333   0.3336227   0.0016415  -0.000139   0.000079   0.000050   0.000049  0.0000066  0.0000067    0.000084    0.000074
+2009   3  26  54916  -0.119883   0.387858   0.3319554   0.0016680  -0.000209  -0.000102   0.000051   0.000049  0.0000106  0.0000068    0.000070    0.000075
+2009   3  27  54917  -0.119193   0.391571   0.3302926   0.0016216  -0.000153  -0.000010   0.000050   0.000049  0.0000037  0.0000068    0.000111    0.000092
+2009   3  28  54918  -0.118481   0.394864   0.3287241   0.0014864  -0.000110   0.000048   0.000051   0.000049  0.0000058  0.0000069    0.000112    0.000089
+2009   3  29  54919  -0.118058   0.398167   0.3273515   0.0012536  -0.000067   0.000096   0.000052   0.000050  0.0000096  0.0000069    0.000098    0.000078
+2009   3  30  54920  -0.118377   0.400766   0.3262199   0.0009980  -0.000020   0.000147   0.000051   0.000050  0.0000071  0.0000068    0.000084    0.000068
+2009   3  31  54921  -0.118902   0.403571   0.3252903   0.0008295   0.000025   0.000198   0.000051   0.000050  0.0000019  0.0000069    0.000070    0.000057
+2009   4   1  54922  -0.118802   0.405888   0.3244726   0.0007745   0.000075   0.000184   0.000051   0.000051  0.0000011  0.0000068    0.000089    0.000074
+2009   4   2  54923  -0.117776   0.408352   0.3236769   0.0008241   0.000119   0.000150   0.000051   0.000050  0.0000014  0.0000067    0.000117    0.000097
+2009   4   3  54924  -0.116440   0.410919   0.3228212   0.0009341   0.000155   0.000112   0.000052   0.000051  0.0000018  0.0000067    0.000144    0.000120
+2009   4   4  54925  -0.115139   0.413656   0.3218308   0.0011101   0.000116   0.000130   0.000052   0.000051  0.0000058  0.0000068    0.000140    0.000117
+2009   4   5  54926  -0.113249   0.416429   0.3206205   0.0013241   0.000048   0.000167   0.000051   0.000050  0.0000062  0.0000069    0.000125    0.000104
+2009   4   6  54927  -0.110787   0.419496   0.3191573   0.0015817  -0.000020   0.000201   0.000050   0.000048  0.0000041  0.0000068    0.000109    0.000092
+2009   4   7  54928  -0.108458   0.423066   0.3174875   0.0017420  -0.000085   0.000233   0.000049   0.000047  0.0000020  0.0000067    0.000094    0.000079
+2009   4   8  54929  -0.106894   0.426086   0.3157162   0.0017759   0.000039   0.000176   0.000048   0.000048  0.0000021  0.0000066    0.000047    0.000038
+2009   4   9  54930  -0.105304   0.428851   0.3139800   0.0016366   0.000090   0.000083   0.000049   0.000048  0.0000028  0.0000066    0.000126    0.000092
+2009   4  10  54931  -0.103774   0.431642   0.3123980   0.0014649   0.000103   0.000073   0.000049   0.000048  0.0000074  0.0000066    0.000147    0.000110
+2009   4  11  54932  -0.102264   0.434586   0.3110250   0.0012832   0.000114   0.000098   0.000049   0.000048  0.0000107  0.0000066    0.000134    0.000104
+2009   4  12  54933  -0.100728   0.437077   0.3098687   0.0010353   0.000120   0.000124   0.000050   0.000049  0.0000122  0.0000068    0.000120    0.000097
+2009   4  13  54934  -0.098550   0.439504   0.3089350   0.0008141   0.000121   0.000151   0.000050   0.000049  0.0000112  0.0000070    0.000107    0.000091
+2009   4  14  54935  -0.096546   0.442421   0.3081615   0.0007093   0.000115   0.000173   0.000049   0.000049  0.0000066  0.0000072    0.000093    0.000084
+2009   4  15  54936  -0.094045   0.445592   0.3074332   0.0007456   0.000102   0.000192   0.000049   0.000048  0.0000020  0.0000072    0.000080    0.000078
+2009   4  16  54937  -0.091460   0.449119   0.3066438   0.0008242   0.000065   0.000174   0.000049   0.000049  0.0000015  0.0000071    0.000046    0.000048
+2009   4  17  54938  -0.088941   0.452397   0.3057452   0.0009583   0.000028   0.000142   0.000049   0.000049  0.0000019  0.0000069    0.000070    0.000066
+2009   4  18  54939  -0.086883   0.455329   0.3047251   0.0011086   0.000005   0.000095   0.000049   0.000049  0.0000076  0.0000069    0.000078    0.000074
+2009   4  19  54940  -0.084807   0.458177   0.3035589   0.0012720  -0.000010   0.000048   0.000050   0.000049  0.0000095  0.0000069    0.000072    0.000071
+2009   4  20  54941  -0.082726   0.460810   0.3021841   0.0014870  -0.000021   0.000007   0.000049   0.000049  0.0000064  0.0000069    0.000066    0.000068
+2009   4  21  54942  -0.080436   0.463483   0.3005850   0.0016957  -0.000027  -0.000024   0.000049   0.000049  0.0000021  0.0000071    0.000061    0.000065
+2009   4  22  54943  -0.078554   0.466315   0.2988224   0.0018210   0.000021   0.000007   0.000048   0.000049  0.0000052  0.0000071    0.000024    0.000024
+2009   4  23  54944  -0.076920   0.469205   0.2970066   0.0017976   0.000015   0.000086   0.000048   0.000049  0.0000082  0.0000069    0.000054    0.000055
+2009   4  24  54945  -0.075944   0.471575   0.2952532   0.0016793  -0.000010   0.000178   0.000047   0.000048  0.0000036  0.0000067    0.000107    0.000109
+2009   4  25  54946  -0.074955   0.473791   0.2936377   0.0015093  -0.000010   0.000209   0.000047   0.000049  0.0000076  0.0000067    0.000113    0.000116
+2009   4  26  54947  -0.073736   0.476110   0.2922383   0.0012948  -0.000001   0.000214   0.000048   0.000049  0.0000103  0.0000067    0.000103    0.000104
+2009   4  27  54948  -0.071956   0.478032   0.2910394   0.0011022   0.000011   0.000213   0.000046   0.000048  0.0000074  0.0000067    0.000092    0.000093
+2009   4  28  54949  -0.069798   0.480081   0.2899723   0.0010164   0.000022   0.000207   0.000046   0.000047  0.0000026  0.0000067    0.000082    0.000082
+2009   4  29  54950  -0.067611   0.482239   0.2889584   0.0010102   0.000071   0.000223   0.000046   0.000047  0.0000018  0.0000067    0.000107    0.000099
+2009   4  30  54951  -0.065195   0.484330   0.2878976   0.0010917   0.000127   0.000240   0.000047   0.000048  0.0000019  0.0000068    0.000140    0.000123
+2009   5   1  54952  -0.062325   0.486405   0.2866991   0.0013182   0.000124   0.000232   0.000047   0.000047  0.0000061  0.0000066    0.000150    0.000135
+2009   5   2  54953  -0.059549   0.488641   0.2853024   0.0015137   0.000095   0.000213   0.000046   0.000047  0.0000118  0.0000065    0.000152    0.000141
+2009   5   3  54954  -0.056722   0.490422   0.2836978   0.0017137   0.000063   0.000192   0.000047   0.000047  0.0000135  0.0000065    0.000153    0.000148
+2009   5   4  54955  -0.053893   0.492381   0.2819388   0.0018121   0.000029   0.000170   0.000045   0.000047  0.0000099  0.0000066    0.000154    0.000154
+2009   5   5  54956  -0.051521   0.494268   0.2801350   0.0017550  -0.000004   0.000147   0.000045   0.000047  0.0000046  0.0000067    0.000156    0.000161
+2009   5   6  54957  -0.048951   0.495831   0.2784187   0.0016525   0.000022   0.000154   0.000045   0.000047  0.0000027  0.0000067    0.000143    0.000144
+2009   5   7  54958  -0.045745   0.497692   0.2768967   0.0014173   0.000067   0.000169   0.000045   0.000047  0.0000017  0.0000066    0.000126    0.000120
+2009   5   8  54959  -0.042774   0.499752   0.2756332   0.0011192   0.000071   0.000159   0.000046   0.000047  0.0000057  0.0000065    0.000112    0.000104
+2009   5   9  54960  -0.039632   0.502103   0.2746751   0.0008689   0.000061   0.000142   0.000046   0.000048  0.0000116  0.0000067    0.000099    0.000092
+2009   5  10  54961  -0.036649   0.504331   0.2739520   0.0006759   0.000054   0.000124   0.000047   0.000049  0.0000108  0.0000067    0.000086    0.000079
+2009   5  11  54962  -0.033652   0.506087   0.2733315   0.0005509   0.000049   0.000107   0.000046   0.000047  0.0000063  0.0000066    0.000073    0.000067
+2009   5  12  54963  -0.031115   0.507823   0.2727717   0.0005195   0.000046   0.000091   0.000045   0.000046  0.0000019  0.0000065    0.000060    0.000054
+2009   5  13  54964  -0.028533   0.509858   0.2722377   0.0005396   0.000078   0.000080   0.000045   0.000047  0.0000045  0.0000066    0.000040    0.000036
+2009   5  14  54965  -0.025754   0.511783   0.2716476   0.0006260   0.000118   0.000072   0.000045   0.000047  0.0000071  0.0000067    0.000018    0.000017
+2009   5  15  54966  -0.023085   0.513823   0.2709334   0.0007723   0.000138   0.000103   0.000045   0.000047  0.0000026  0.0000066    0.000063    0.000056
+2009   5  16  54967  -0.020160   0.515387   0.2700967   0.0009203   0.000136   0.000108   0.000046   0.000047  0.0000116  0.0000065    0.000075    0.000067
+2009   5  17  54968  -0.016638   0.516867   0.2691096   0.0010499   0.000128   0.000098   0.000045   0.000047  0.0000140  0.0000061    0.000067    0.000060
+2009   5  18  54969  -0.013014   0.518493   0.2679802   0.0012090   0.000119   0.000088   0.000044   0.000046  0.0000086  0.0000058    0.000058    0.000052
+2009   5  19  54970  -0.009424   0.520156   0.2666974   0.0013901   0.000111   0.000079   0.000044   0.000045  0.0000022  0.0000059    0.000050    0.000045
+2009   5  20  54971  -0.005985   0.521612   0.2652524   0.0014993   0.000099   0.000032   0.000044   0.000046  0.0000010  0.0000059    0.000065    0.000074
+2009   5  21  54972  -0.002666   0.522672   0.2637560   0.0014593   0.000118   0.000017   0.000044   0.000046  0.0000013  0.0000059    0.000074    0.000079
+2009   5  22  54973   0.000620   0.523974   0.2623645   0.0013205   0.000148   0.000016   0.000044   0.000046  0.0000016  0.0000059    0.000078    0.000074
+2009   5  23  54974   0.003594   0.525267   0.2611852   0.0011381   0.000169   0.000048   0.000045   0.000046  0.0000093  0.0000059    0.000079    0.000078
+2009   5  24  54975   0.007038   0.526202   0.2601485   0.0009745   0.000186   0.000092   0.000046   0.000046  0.0000114  0.0000062    0.000078    0.000086
+2009   5  25  54976   0.010778   0.527475   0.2592689   0.0008006   0.000198   0.000132   0.000045   0.000045  0.0000106  0.0000063    0.000078    0.000093
+2009   5  26  54977   0.013818   0.528760   0.2585174   0.0007101   0.000206   0.000168   0.000044   0.000044  0.0000075  0.0000063    0.000077    0.000101
+2009   5  27  54978   0.016539   0.530081   0.2577756   0.0007570   0.000197   0.000155   0.000044   0.000044  0.0000030  0.0000062    0.000069    0.000072
+2009   5  28  54979   0.019348   0.531510   0.2569233   0.0009230   0.000157   0.000090   0.000043   0.000043  0.0000021  0.0000063    0.000082    0.000088
+2009   5  29  54980   0.021764   0.532668   0.2558760   0.0011795   0.000107   0.000008   0.000043   0.000043  0.0000021  0.0000063    0.000101    0.000116
+2009   5  30  54981   0.024565   0.533316   0.2546206   0.0014001   0.000099  -0.000006   0.000043   0.000044  0.0000094  0.0000061    0.000099    0.000115
+2009   5  31  54982   0.027812   0.533683   0.2531717   0.0014742   0.000108   0.000008   0.000045   0.000044  0.0000142  0.0000063    0.000091    0.000102
+2009   6   1  54983   0.031535   0.533537   0.2516920   0.0014088   0.000118   0.000023   0.000045   0.000044  0.0000118  0.0000065    0.000082    0.000089
+2009   6   2  54984   0.035464   0.533702   0.2503358   0.0013081   0.000131   0.000041   0.000044   0.000043  0.0000071  0.0000065    0.000073    0.000076
+2009   6   3  54985   0.039537   0.534397   0.2491572   0.0011076   0.000147   0.000060   0.000044   0.000043  0.0000024  0.0000066    0.000064    0.000063
+2009   6   4  54986   0.043736   0.535186   0.2481729   0.0008673   0.000121   0.000008   0.000044   0.000043  0.0000026  0.0000066    0.000130    0.000129
+2009   6   5  54987   0.048062   0.536525   0.2474159   0.0006185   0.000087  -0.000062   0.000044   0.000044  0.0000041  0.0000066    0.000214    0.000215
+2009   6   6  54988   0.051732   0.537781   0.2468993   0.0004565   0.000085  -0.000054   0.000045   0.000045  0.0000096  0.0000067    0.000205    0.000205
+2009   6   7  54989   0.055268   0.538780   0.2465075   0.0003309   0.000096  -0.000018   0.000046   0.000046  0.0000137  0.0000069    0.000162    0.000159
+2009   6   8  54990   0.058578   0.539462   0.2462060   0.0002418   0.000110   0.000018   0.000046   0.000046  0.0000097  0.0000069    0.000119    0.000113
+2009   6   9  54991   0.061730   0.540018   0.2459633   0.0002549   0.000125   0.000053   0.000045   0.000045  0.0000025  0.0000067    0.000076    0.000067
+2009   6  10  54992   0.064314   0.540476   0.2456803   0.0003423   0.000156   0.000032   0.000044   0.000045  0.0000011  0.0000067    0.000068    0.000057
+2009   6  11  54993   0.067535   0.540332   0.2452545   0.0004712   0.000189  -0.000005   0.000044   0.000046  0.0000013  0.0000068    0.000069    0.000056
+2009   6  12  54994   0.071053   0.540545   0.2446278   0.0006675   0.000196  -0.000027   0.000044   0.000045  0.0000091  0.0000068    0.000071    0.000058
+2009   6  13  54995   0.074727   0.541057   0.2439131   0.0008190   0.000190  -0.000041   0.000045   0.000046  0.0000174  0.0000069    0.000073    0.000062
+2009   6  14  54996   0.078517   0.541492   0.2430881   0.0008913   0.000177  -0.000053   0.000044   0.000045  0.0000177  0.0000064    0.000075    0.000066
+2009   6  15  54997   0.082228   0.541830   0.2421333   0.0009555   0.000161  -0.000060   0.000041   0.000042  0.0000122  0.0000056    0.000077    0.000070
+2009   6  16  54998   0.085567   0.541783   0.2411510   0.0010437   0.000142  -0.000064   0.000039   0.000041  0.0000035  0.0000053    0.000079    0.000075
+2009   6  17  54999   0.088599   0.541716   0.2401387   0.0010327   0.000113  -0.000030   0.000039   0.000041  0.0000018  0.0000053    0.000083    0.000080
+2009   6  18  55000   0.091196   0.541130   0.2391674   0.0008946   0.000084   0.000012   0.000040   0.000041  0.0000017  0.0000054    0.000087    0.000087
+2009   6  19  55001   0.094095   0.540663   0.2383457   0.0007265   0.000062   0.000054   0.000040   0.000041  0.0000017  0.0000055    0.000091    0.000093
+2009   6  20  55002   0.097209   0.540446   0.2377553   0.0005304   0.000073   0.000054   0.000041   0.000041  0.0000105  0.0000055    0.000086    0.000087
+2009   6  21  55003   0.100328   0.540313   0.2373540   0.0003335   0.000101   0.000035   0.000043   0.000043  0.0000150  0.0000058    0.000076    0.000078
+2009   6  22  55004   0.103112   0.539769   0.2371243   0.0001630   0.000134   0.000012   0.000044   0.000045  0.0000104  0.0000061    0.000066    0.000068
+2009   6  23  55005   0.105991   0.539071   0.2369988   0.0001071   0.000169  -0.000015   0.000044   0.000045  0.0000030  0.0000061    0.000057    0.000058
+2009   6  24  55006   0.109206   0.538389   0.2368338   0.0002076   0.000198  -0.000019   0.000044   0.000045  0.0000055  0.0000061    0.000072    0.000079
+2009   6  25  55007   0.112448   0.537943   0.2365280   0.0003864   0.000232  -0.000007   0.000044   0.000045  0.0000085  0.0000061    0.000082    0.000086
+2009   6  26  55008   0.115387   0.537508   0.2360354   0.0005628   0.000264   0.000010   0.000044   0.000045  0.0000037  0.0000062    0.000089    0.000087
+2009   6  27  55009   0.118040   0.537241   0.2353693   0.0007108   0.000235  -0.000009   0.000045   0.000045  0.0000121  0.0000063    0.000089    0.000086
+2009   6  28  55010   0.120853   0.536607   0.2346512   0.0007477   0.000180  -0.000038   0.000048   0.000049  0.0000210  0.0000067    0.000088    0.000083
+2009   6  29  55011   0.123684   0.535899   0.2339571   0.0006267   0.000121  -0.000063   0.000051   0.000051  0.0000155  0.0000070    0.000086    0.000081
+2009   6  30  55012   0.126851   0.534671   0.2333904   0.0004070   0.000059  -0.000085   0.000054   0.000055  0.0000038  0.0000069    0.000084    0.000078
+2009   7   1  55013   0.130423   0.533636   0.2330772   0.0001644   0.000147  -0.000012   0.000059   0.000061  0.0000017  0.0000069    0.000091    0.000089
+2009   7   2  55014   0.134330   0.532557   0.2330230  -0.0000389   0.000274   0.000085   0.000058   0.000059  0.0000020  0.0000067    0.000101    0.000102
+2009   7   3  55015   0.138470   0.531598   0.2331606  -0.0001930   0.000252   0.000091   0.000057   0.000058  0.0000061  0.0000067    0.000100    0.000102
+2009   7   4  55016   0.142489   0.531005   0.2334340  -0.0003033   0.000176   0.000059   0.000057   0.000058  0.0000116  0.0000067    0.000095    0.000096
+2009   7   5  55017   0.146001   0.530399   0.2337840  -0.0004276   0.000044  -0.000009   0.000031   0.000033  0.0000035  0.0000075    0.000062    0.000067
+2009   7   6  55018   0.149173   0.529511   0.2342126  -0.0004424  -0.000010  -0.000038   0.000030   0.000030  0.0000024  0.0000069    0.000058    0.000063
+2009   7   7  55019   0.152128   0.528739   0.2346211  -0.0003852  -0.000042  -0.000060   0.000029   0.000029  0.0000008  0.0000069    0.000055    0.000058
+2009   7   8  55020   0.154863   0.527582   0.2349410  -0.0002750   0.000054   0.000014   0.000029   0.000029  0.0000041  0.0000069    0.000056    0.000054
+2009   7   9  55021   0.157258   0.526742   0.2351319  -0.0001313   0.000189   0.000116   0.000029   0.000029  0.0000048  0.0000070    0.000057    0.000051
+2009   7  10  55022   0.159892   0.525679   0.2351873  -0.0000108   0.000166  -0.000055   0.000030   0.000030  0.0000018  0.0000071    0.000103    0.000106
+2009   7  11  55023   0.162796   0.524951   0.2351208   0.0001419   0.000152  -0.000093   0.000030   0.000032  0.0000026  0.0000072    0.000111    0.000117
+2009   7  12  55024   0.165855   0.524105   0.2349017   0.0003022   0.000158  -0.000050   0.000033   0.000034  0.0000037  0.0000077    0.000101    0.000104
+2009   7  13  55025   0.169046   0.523415   0.2345945   0.0003194   0.000158  -0.000010   0.000034   0.000035  0.0000029  0.0000082    0.000091    0.000091
+2009   7  14  55026   0.171976   0.522268   0.2342887   0.0003109   0.000153   0.000028   0.000033   0.000035  0.0000011  0.0000082    0.000080    0.000078
+2009   7  15  55027   0.175583   0.521216   0.2339906   0.0002704   0.000161   0.000002   0.000033   0.000034  0.0000019  0.0000081    0.000089    0.000089
+2009   7  16  55028   0.179216   0.520084   0.2337893   0.0001054   0.000172  -0.000043   0.000033   0.000034  0.0000022  0.0000082    0.000103    0.000106
+2009   7  17  55029   0.182712   0.518884   0.2337383  -0.0000025   0.000183  -0.000089   0.000033   0.000034  0.0000013  0.0000083    0.000117    0.000123
+2009   7  18  55030   0.185928   0.518288   0.2338017  -0.0001015   0.000172  -0.000108   0.000034   0.000034  0.0000026  0.0000084    0.000135    0.000128
+2009   7  19  55031   0.188851   0.517302   0.2339424  -0.0001601   0.000154  -0.000117   0.000034   0.000034  0.0000037  0.0000080    0.000156    0.000130
+2009   7  20  55032   0.191912   0.515932   0.2340881  -0.0001175   0.000141  -0.000122   0.000033   0.000033  0.0000070  0.0000075    0.000176    0.000131
+2009   7  21  55033   0.194980   0.514829   0.2341632  -0.0000162   0.000130  -0.000124   0.000033   0.000033  0.0000075  0.0000076    0.000197    0.000132
+2009   7  22  55034   0.197932   0.513566   0.2340957   0.0001457   0.000260  -0.000068   0.000033   0.000033  0.0000017  0.0000078    0.000071    0.000057
+2009   7  23  55035   0.200684   0.512191   0.2338050   0.0003733   0.000290  -0.000046   0.000033   0.000033  0.0000008  0.0000078    0.000121    0.000088
+2009   7  24  55036   0.203114   0.510605   0.2332777   0.0006050   0.000274  -0.000048   0.000033   0.000033  0.0000012  0.0000076    0.000099    0.000089
+2009   7  25  55037   0.205442   0.508752   0.2325739   0.0007691   0.000262  -0.000076   0.000033   0.000033  0.0000021  0.0000077    0.000085    0.000083
+2009   7  26  55038   0.207845   0.506883   0.2318094   0.0007433   0.000250  -0.000110   0.000032   0.000032  0.0000032  0.0000079    0.000088    0.000082
+2009   7  27  55039   0.210591   0.504746   0.2311011   0.0006427   0.000237  -0.000146   0.000031   0.000031  0.0000029  0.0000076    0.000091    0.000081
+2009   7  28  55040   0.213268   0.502760   0.2305498   0.0004626   0.000223  -0.000180   0.000031   0.000031  0.0000013  0.0000073    0.000093    0.000079
+2009   7  29  55041   0.215576   0.500227   0.2302332   0.0001998   0.000206  -0.000161   0.000031   0.000031  0.0000048  0.0000071    0.000066    0.000055
+2009   7  30  55042   0.217632   0.497830   0.2301654  -0.0000381   0.000191  -0.000127   0.000031   0.000032  0.0000055  0.0000074    0.000030    0.000025
+2009   7  31  55043   0.219531   0.495524   0.2303055  -0.0002025   0.000216  -0.000029   0.000031   0.000032  0.0000019  0.0000076    0.000058    0.000050
+2009   8   1  55044   0.221792   0.492923   0.2305787  -0.0003097   0.000248  -0.000037   0.000031   0.000031  0.0000026  0.0000075    0.000070    0.000065
+2009   8   2  55045   0.223944   0.490345   0.2309104  -0.0003274   0.000280  -0.000090   0.000031   0.000031  0.0000037  0.0000077    0.000069    0.000071
+2009   8   3  55046   0.225966   0.487592   0.2312048  -0.0002444   0.000311  -0.000141   0.000031   0.000031  0.0000029  0.0000076    0.000067    0.000077
+2009   8   4  55047   0.227933   0.485019   0.2313918  -0.0001239   0.000338  -0.000190   0.000031   0.000031  0.0000012  0.0000076    0.000065    0.000083
+2009   8   5  55048   0.230050   0.482345   0.2314553   0.0000116   0.000321  -0.000169   0.000031   0.000031  0.0000049  0.0000076    0.000060    0.000074
+2009   8   6  55049   0.232024   0.479957   0.2313484   0.0001927   0.000287  -0.000129   0.000031   0.000031  0.0000055  0.0000075    0.000054    0.000061
+2009   8   7  55050   0.234228   0.477553   0.2310498   0.0003811   0.000246  -0.000084   0.000031   0.000031  0.0000017  0.0000074    0.000048    0.000048
+2009   8   8  55051   0.236336   0.475320   0.2305894   0.0005315   0.000256  -0.000040   0.000031   0.000031  0.0000025  0.0000074    0.000056    0.000053
+2009   8   9  55052   0.238383   0.473143   0.2300025   0.0006263   0.000281  -0.000001   0.000031   0.000032  0.0000037  0.0000074    0.000068    0.000065
+2009   8  10  55053   0.240424   0.470729   0.2293462   0.0006562   0.000301   0.000031   0.000031   0.000032  0.0000030  0.0000073    0.000080    0.000076
+2009   8  11  55054   0.242407   0.468239   0.2287030   0.0006052   0.000317   0.000052   0.000031   0.000031  0.0000017  0.0000073    0.000093    0.000088
+2009   8  12  55055   0.244502   0.465695   0.2281579   0.0004723   0.000210  -0.000007   0.000031   0.000031  0.0000022  0.0000076    0.000093    0.000088
+2009   8  13  55056   0.246661   0.463298   0.2277799   0.0002665   0.000075  -0.000090   0.000031   0.000032  0.0000021  0.0000075    0.000089    0.000084
+2009   8  14  55057   0.248526   0.461311   0.2275979   0.0000965  -0.000053  -0.000176   0.000031   0.000032  0.0000010  0.0000074    0.000086    0.000081
+2009   8  15  55058   0.249925   0.459130   0.2275859  -0.0000438  -0.000013  -0.000185   0.000031   0.000032  0.0000025  0.0000075    0.000081    0.000077
+2009   8  16  55059   0.251517   0.456834   0.2276722  -0.0001012   0.000094  -0.000161   0.000032   0.000034  0.0000037  0.0000081    0.000076    0.000073
+2009   8  17  55060   0.252845   0.454384   0.2277355   0.0000032   0.000203  -0.000131   0.000032   0.000034  0.0000029  0.0000082    0.000070    0.000068
+2009   8  18  55061   0.253997   0.452002   0.2276255   0.0002454   0.000313  -0.000095   0.000032   0.000033  0.0000012  0.0000080    0.000065    0.000064
+2009   8  19  55062   0.254997   0.449598   0.2272283   0.0005222   0.000239  -0.000112   0.000033   0.000033  0.0000048  0.0000081    0.000089    0.000077
+2009   8  20  55063   0.256243   0.447094   0.2265517   0.0007535   0.000116  -0.000140   0.000033   0.000034  0.0000058  0.0000081    0.000119    0.000095
+2009   8  21  55064   0.257976   0.444758   0.2256682   0.0009403  -0.000004  -0.000168   0.000033   0.000035  0.0000026  0.0000082    0.000150    0.000112
+2009   8  22  55065   0.259756   0.442490   0.2246725   0.0010055  -0.000008  -0.000146   0.000034   0.000035  0.0000029  0.0000083    0.000141    0.000107
+2009   8  23  55066   0.260862   0.440344   0.2237111   0.0008776   0.000038  -0.000110   0.000034   0.000034  0.0000037  0.0000083    0.000117    0.000094
+2009   8  24  55067   0.261931   0.438015   0.2229052   0.0006860   0.000096  -0.000077   0.000033   0.000033  0.0000029  0.0000080    0.000092    0.000081
+2009   8  25  55068   0.263063   0.435816   0.2223086   0.0004776   0.000161  -0.000050   0.000033   0.000033  0.0000013  0.0000080    0.000068    0.000067
+2009   8  26  55069   0.264246   0.433528   0.2219229   0.0002829   0.000286  -0.000039   0.000033   0.000033  0.0000049  0.0000080    0.000070    0.000059
+2009   8  27  55070   0.265376   0.431155   0.2217158   0.0001287   0.000306  -0.000116   0.000032   0.000033  0.0000064  0.0000079    0.000133    0.000093
+2009   8  28  55071   0.266423   0.428725   0.2216264   0.0000463   0.000285  -0.000218   0.000031   0.000033  0.0000042  0.0000078    0.000212    0.000140
+2009   8  29  55072   0.267604   0.426162   0.2215794   0.0000492   0.000303  -0.000234   0.000031   0.000033  0.0000037  0.0000078    0.000202    0.000135
+2009   8  30  55073   0.268851   0.423540   0.2215106   0.0000916   0.000330  -0.000210   0.000032   0.000034  0.0000037  0.0000081    0.000156    0.000109
+2009   8  31  55074   0.269882   0.420780   0.2213846   0.0001701   0.000347  -0.000180   0.000032   0.000034  0.0000028  0.0000082    0.000109    0.000083
+2009   9   1  55075   0.270459   0.417975   0.2211624   0.0002869   0.000355  -0.000142   0.000032   0.000033  0.0000010  0.0000080    0.000063    0.000057
+2009   9   2  55076   0.270935   0.414840   0.2207856   0.0004648   0.000322  -0.000150   0.000033   0.000034  0.0000048  0.0000081    0.000046    0.000043
+2009   9   3  55077   0.271354   0.411714   0.2202289   0.0006418   0.000277  -0.000167   0.000033   0.000034  0.0000056  0.0000081    0.000037    0.000031
+2009   9   4  55078   0.272163   0.408816   0.2194976   0.0008180   0.000238  -0.000225   0.000033   0.000033  0.0000019  0.0000080    0.000074    0.000066
+2009   9   5  55079   0.272701   0.406249   0.2186242   0.0009346   0.000227  -0.000173   0.000033   0.000034  0.0000026  0.0000080    0.000095    0.000082
+2009   9   6  55080   0.272833   0.403537   0.2176658   0.0009869   0.000226  -0.000078   0.000034   0.000035  0.0000037  0.0000080    0.000104    0.000086
+2009   9   7  55081   0.272462   0.400599   0.2167135   0.0009255   0.000227   0.000009   0.000034   0.000034  0.0000037  0.0000080    0.000113    0.000090
+2009   9   8  55082   0.272373   0.397444   0.2158568   0.0007957   0.000230   0.000087   0.000033   0.000033  0.0000028  0.0000080    0.000123    0.000093
+2009   9   9  55083   0.272124   0.394524   0.2151561   0.0006167   0.000229  -0.000124   0.000033   0.000034  0.0000009  0.0000082    0.000054    0.000047
+2009   9  10  55084   0.271906   0.391746   0.2146433   0.0004433   0.000201  -0.000198   0.000034   0.000035  0.0000008  0.0000081    0.000065    0.000064
+2009   9  11  55085   0.271502   0.388949   0.2142932   0.0003043   0.000165  -0.000233   0.000035   0.000035  0.0000011  0.0000078    0.000097    0.000097
+2009   9  12  55086   0.271629   0.385881   0.2140291   0.0002678   0.000160  -0.000229   0.000035   0.000035  0.0000027  0.0000079    0.000093    0.000093
+2009   9  13  55087   0.271947   0.382744   0.2137366   0.0003579   0.000165  -0.000207   0.000035   0.000035  0.0000037  0.0000081    0.000076    0.000076
+2009   9  14  55088   0.272512   0.379736   0.2133134   0.0005316   0.000170  -0.000177   0.000034   0.000034  0.0000028  0.0000081    0.000060    0.000059
+2009   9  15  55089   0.273197   0.376527   0.2126861   0.0007459   0.000174  -0.000144   0.000033   0.000033  0.0000009  0.0000081    0.000043    0.000042
+2009   9  16  55090   0.274191   0.373662   0.2118060   0.0009970   0.000139  -0.000117   0.000034   0.000033  0.0000018  0.0000079    0.000060    0.000066
+2009   9  17  55091   0.275194   0.370984   0.2106584   0.0012598   0.000097  -0.000092   0.000034   0.000033  0.0000022  0.0000077    0.000086    0.000101
+2009   9  18  55092   0.275613   0.368385   0.2093245   0.0013574   0.000060  -0.000070   0.000034   0.000034  0.0000014  0.0000075    0.000113    0.000136
+2009   9  19  55093   0.275553   0.365755   0.2079675   0.0013206   0.000061  -0.000101   0.000035   0.000034  0.0000027  0.0000075    0.000109    0.000131
+2009   9  20  55094   0.274916   0.363265   0.2066982   0.0011871   0.000080  -0.000152   0.000036   0.000034  0.0000040  0.0000078    0.000095    0.000111
+2009   9  21  55095   0.274102   0.360494   0.2056254   0.0009377   0.000106  -0.000200   0.000036   0.000035  0.0000033  0.0000082    0.000081    0.000091
+2009   9  22  55096   0.273437   0.357593   0.2048303   0.0006430   0.000135  -0.000246   0.000036   0.000035  0.0000014  0.0000083    0.000066    0.000070
+2009   9  23  55097   0.272770   0.354482   0.2042914   0.0004419   0.000200  -0.000201   0.000036   0.000035  0.0000056  0.0000078    0.000066    0.000060
+2009   9  24  55098   0.272000   0.351347   0.2039125   0.0003375   0.000271  -0.000131   0.000035   0.000035  0.0000063  0.0000075    0.000068    0.000052
+2009   9  25  55099   0.271198   0.347963   0.2036100   0.0002875   0.000298  -0.000060   0.000035   0.000035  0.0000018  0.0000081    0.000064    0.000055
+2009   9  26  55100   0.270262   0.345017   0.2033428   0.0002726   0.000266  -0.000051   0.000036   0.000035  0.0000025  0.0000086    0.000058    0.000055
+2009   9  27  55101   0.269160   0.341956   0.2030644   0.0003044   0.000210  -0.000072   0.000037   0.000035  0.0000037  0.0000086    0.000052    0.000054
+2009   9  28  55102   0.268277   0.338955   0.2026854   0.0004693   0.000151  -0.000102   0.000036   0.000035  0.0000028  0.0000085    0.000047    0.000052
+2009   9  29  55103   0.267575   0.336639   0.2020959   0.0007184   0.000089  -0.000140   0.000036   0.000036  0.0000008  0.0000084    0.000042    0.000050
+2009   9  30  55104   0.266535   0.334075   0.2012333   0.0009770   0.000104  -0.000162   0.000035   0.000036  0.0000047  0.0000082    0.000051    0.000056
+2009  10   1  55105   0.265675   0.331321   0.2001343   0.0011874   0.000141  -0.000184   0.000033   0.000034  0.0000056  0.0000076    0.000065    0.000064
+2009  10   2  55106   0.265022   0.328386   0.1988914   0.0012589   0.000180  -0.000206   0.000034   0.000034  0.0000021  0.0000075    0.000079    0.000073
+2009  10   3  55107   0.264676   0.325631   0.1975984   0.0013031   0.000187  -0.000257   0.000035   0.000035  0.0000027  0.0000080    0.000082    0.000080
+2009  10   4  55108   0.264198   0.322972   0.1962804   0.0013134   0.000181  -0.000312   0.000035   0.000035  0.0000037  0.0000071    0.000081    0.000086
+2009  10   5  55109   0.263722   0.320331   0.1950163   0.0012087   0.000176  -0.000357   0.000035   0.000035  0.0000030  0.0000070    0.000080    0.000092
+2009  10   6  55110   0.263126   0.317878   0.1939101   0.0010064   0.000173  -0.000390   0.000034   0.000034  0.0000015  0.0000076    0.000080    0.000099
+2009  10   7  55111   0.262443   0.315500   0.1929824   0.0008438   0.000074  -0.000338   0.000033   0.000033  0.0000050  0.0000076    0.000125    0.000121
+2009  10   8  55112   0.261957   0.313379   0.1922225   0.0006954   0.000025  -0.000235   0.000034   0.000034  0.0000055  0.0000079    0.000048    0.000041
+2009  10   9  55113   0.261996   0.310883   0.1915873   0.0006141   0.000105  -0.000183   0.000034   0.000034  0.0000016  0.0000080    0.000054    0.000052
+2009  10  10  55114   0.261775   0.308539   0.1910048   0.0005874   0.000156  -0.000172   0.000034   0.000033  0.0000025  0.0000080    0.000065    0.000063
+2009  10  11  55115   0.261108   0.305922   0.1903993   0.0006563   0.000183  -0.000170   0.000035   0.000033  0.0000037  0.0000079    0.000062    0.000059
+2009  10  12  55116   0.260139   0.303650   0.1896713   0.0008256   0.000206  -0.000170   0.000034   0.000033  0.0000070  0.0000073    0.000058    0.000055
+2009  10  13  55117   0.258821   0.301333   0.1887291   0.0010772   0.000223  -0.000175   0.000033   0.000033  0.0000075  0.0000074    0.000054    0.000050
+2009  10  14  55118   0.257125   0.299087   0.1875474   0.0012913   0.000233  -0.000183   0.000033   0.000033  0.0000017  0.0000080    0.000051    0.000046
+2009  10  15  55119   0.254964   0.296167   0.1861674   0.0014304   0.000128  -0.000154   0.000034   0.000033  0.0000006  0.0000080    0.000043    0.000040
+2009  10  16  55120   0.253558   0.293040   0.1846803   0.0014844   0.000067  -0.000187   0.000034   0.000033  0.0000007  0.0000081    0.000067    0.000064
+2009  10  17  55121   0.252771   0.290508   0.1832068   0.0014297   0.000068  -0.000173   0.000035   0.000034  0.0000025  0.0000081    0.000088    0.000081
+2009  10  18  55122   0.251873   0.287923   0.1818745   0.0012198   0.000083  -0.000136   0.000036   0.000036  0.0000037  0.0000082    0.000103    0.000090
+2009  10  19  55123   0.250974   0.285545   0.1807696   0.0009736   0.000100  -0.000103   0.000036   0.000036  0.0000031  0.0000084    0.000117    0.000100
+2009  10  20  55124   0.249980   0.283393   0.1798943   0.0007846   0.000119  -0.000077   0.000035   0.000035  0.0000020  0.0000084    0.000132    0.000110
+2009  10  21  55125   0.249101   0.281490   0.1791843   0.0006445  -0.000030  -0.000025   0.000035   0.000035  0.0000057  0.0000078    0.000081    0.000062
+2009  10  22  55126   0.247976   0.279230   0.1785729   0.0005697  -0.000027  -0.000131   0.000035   0.000036  0.0000063  0.0000081    0.000086    0.000073
+2009  10  23  55127   0.247296   0.276612   0.1780188   0.0005598   0.000037  -0.000284   0.000035   0.000037  0.0000021  0.0000088    0.000113    0.000106
+2009  10  24  55128   0.246089   0.273910   0.1774942   0.0005405   0.000052  -0.000308   0.000036   0.000037  0.0000029  0.0000085    0.000108    0.000103
+2009  10  25  55129   0.244790   0.271020   0.1769243   0.0006314   0.000048  -0.000279   0.000037   0.000038  0.0000040  0.0000084    0.000090    0.000087
+2009  10  26  55130   0.243954   0.268768   0.1762193   0.0008043   0.000044  -0.000243   0.000037   0.000039  0.0000027  0.0000084    0.000073    0.000070
+2009  10  27  55131   0.242999   0.266601   0.1753322   0.0009887   0.000041  -0.000205   0.000037   0.000038  0.0000008  0.0000081    0.000055    0.000054
+2009  10  28  55132   0.241819   0.264243   0.1742713   0.0011316   0.000019  -0.000190   0.000037   0.000037  0.0000020  0.0000083    0.000057    0.000059
+2009  10  29  55133   0.240682   0.262163   0.1730948   0.0012121  -0.000006  -0.000182   0.000036   0.000037  0.0000024  0.0000087    0.000064    0.000069
+2009  10  30  55134   0.239407   0.259767   0.1718509   0.0012519  -0.000026  -0.000181   0.000035   0.000037  0.0000010  0.0000080    0.000070    0.000079
+2009  10  31  55135   0.237654   0.257600   0.1705661   0.0012937  -0.000013  -0.000217   0.000037   0.000038  0.0000028  0.0000081    0.000069    0.000078
+2009  11   1  55136   0.235685   0.255643   0.1693264   0.0011763   0.000015  -0.000269   0.000038   0.000038  0.0000040  0.0000087    0.000065    0.000072
+2009  11   2  55137   0.234532   0.253364   0.1682011   0.0010440   0.000046  -0.000324   0.000036   0.000037  0.0000028  0.0000085    0.000061    0.000066
+2009  11   3  55138   0.234399   0.251609   0.1672180   0.0009272   0.000075  -0.000379   0.000036   0.000036  0.0000010  0.0000084    0.000057    0.000061
+2009  11   4  55139   0.233955   0.250083   0.1663897   0.0007541   0.000104  -0.000381   0.000035   0.000036  0.0000054  0.0000085    0.000056    0.000059
+2009  11   5  55140   0.233327   0.248236   0.1656813   0.0006720   0.000128  -0.000366   0.000035   0.000037  0.0000062  0.0000088    0.000056    0.000057
+2009  11   6  55141   0.231948   0.246238   0.1650281   0.0006786   0.000144  -0.000342   0.000035   0.000037  0.0000017  0.0000089    0.000056    0.000056
+2009  11   7  55142   0.229755   0.243695   0.1643564   0.0007271   0.000117  -0.000336   0.000035   0.000037  0.0000027  0.0000089    0.000061    0.000060
+2009  11   8  55143   0.227157   0.241061   0.1635998   0.0008317   0.000073  -0.000332   0.000037   0.000039  0.0000042  0.0000093    0.000067    0.000066
+2009  11   9  55144   0.224981   0.238631   0.1627213   0.0009749   0.000027  -0.000319   0.000039   0.000041  0.0000032  0.0000093    0.000073    0.000071
+2009  11  10  55145   0.222837   0.236396   0.1616847   0.0011436  -0.000017  -0.000298   0.000040   0.000041  0.0000012  0.0000093    0.000079    0.000077
+2009  11  11  55146   0.220643   0.234356   0.1604640   0.0012830  -0.000048  -0.000369   0.000040   0.000041  0.0000052  0.0000096    0.000136    0.000109
+2009  11  12  55147   0.218065   0.232236   0.1591258   0.0013386  -0.000014  -0.000319   0.000037   0.000040  0.0000063  0.0000096    0.000170    0.000128
+2009  11  13  55148   0.215700   0.230219   0.1578047   0.0012875   0.000081  -0.000151   0.000037   0.000040  0.0000024  0.0000095    0.000103    0.000109
+2009  11  14  55149   0.212865   0.228335   0.1566409   0.0010714   0.000100  -0.000091   0.000039   0.000041  0.0000031  0.0000096    0.000072    0.000092
+2009  11  15  55150   0.209699   0.226629   0.1556948   0.0008398   0.000085  -0.000086   0.000041   0.000042  0.0000042  0.0000094    0.000065    0.000080
+2009  11  16  55151   0.206224   0.225135   0.1549652   0.0006431   0.000071  -0.000093   0.000041   0.000042  0.0000031  0.0000091    0.000058    0.000068
+2009  11  17  55152   0.203234   0.223707   0.1544069   0.0005016   0.000054  -0.000113   0.000040   0.000042  0.0000009  0.0000091    0.000051    0.000055
+2009  11  18  55153   0.200528   0.222344   0.1539458   0.0004313   0.000116  -0.000032   0.000041   0.000042  0.0000038  0.0000094    0.000065    0.000057
+2009  11  19  55154   0.198074   0.220896   0.1535646   0.0003452   0.000164  -0.000054   0.000040   0.000041  0.0000071  0.0000093    0.000032    0.000023
+2009  11  20  55155   0.195719   0.219416   0.1532142   0.0003623   0.000068  -0.000158   0.000040   0.000041  0.0000086  0.0000094    0.000091    0.000060
+2009  11  21  55156   0.193596   0.218018   0.1527721   0.0005224   0.000044  -0.000220   0.000041   0.000041  0.0000067  0.0000097    0.000107    0.000075
+2009  11  22  55157   0.191473   0.216755   0.1521420   0.0007244   0.000059  -0.000257   0.000039   0.000039  0.0000040  0.0000092    0.000093    0.000072
+2009  11  23  55158   0.189707   0.215259   0.1513051   0.0009319   0.000068  -0.000285   0.000037   0.000037  0.0000028  0.0000085    0.000079    0.000069
+2009  11  24  55159   0.187816   0.214006   0.1502920   0.0010631   0.000073  -0.000303   0.000037   0.000037  0.0000010  0.0000083    0.000065    0.000066
+2009  11  25  55160   0.185876   0.212822   0.1491494   0.0011856   0.000006  -0.000303   0.000037   0.000037  0.0000047  0.0000082    0.000213    0.000129
+2009  11  26  55161   0.183584   0.212417   0.1478948   0.0012834  -0.000064  -0.000251   0.000037   0.000037  0.0000052  0.0000084    0.000192    0.000130
+2009  11  27  55162   0.180912   0.211904   0.1465551   0.0013498  -0.000124  -0.000179   0.000036   0.000037  0.0000030  0.0000086    0.000093    0.000102
+2009  11  28  55163   0.178024   0.211051   0.1452079   0.0013069  -0.000129  -0.000158   0.000036   0.000038  0.0000036  0.0000088    0.000080    0.000088
+2009  11  29  55164   0.174969   0.210078   0.1439482   0.0011818  -0.000125  -0.000141   0.000037   0.000038  0.0000040  0.0000086    0.000068    0.000075
+2009  11  30  55165   0.172186   0.209479   0.1428495   0.0010013  -0.000111  -0.000132   0.000036   0.000036  0.0000027  0.0000083    0.000055    0.000062
+2009  12   1  55166   0.168820   0.208712   0.1419521   0.0007969  -0.000087  -0.000132   0.000035   0.000035  0.0000008  0.0000076    0.000043    0.000049
+2009  12   2  55167   0.165198   0.207651   0.1412390   0.0006561  -0.000050  -0.000174   0.000034   0.000035  0.0000046  0.0000074    0.000031    0.000034
+2009  12   3  55168   0.161827   0.206174   0.1406117   0.0006345  -0.000007  -0.000228   0.000033   0.000035  0.0000059  0.0000078    0.000018    0.000018
+2009  12   4  55169   0.158982   0.204743   0.1399516   0.0007337   0.000011  -0.000296   0.000033   0.000035  0.0000030  0.0000079    0.000136    0.000178
+2009  12   5  55170   0.156642   0.203291   0.1391706   0.0008865   0.000021  -0.000309   0.000034   0.000036  0.0000034  0.0000083    0.000155    0.000200
+2009  12   6  55171   0.154450   0.202123   0.1382308   0.0010321   0.000030  -0.000293   0.000038   0.000040  0.0000045  0.0000092    0.000120    0.000151
+2009  12   7  55172   0.152197   0.201226   0.1371163   0.0012208   0.000035  -0.000270   0.000041   0.000043  0.0000035  0.0000098    0.000084    0.000101
+2009  12   8  55173   0.149703   0.200522   0.1358307   0.0013625   0.000038  -0.000241   0.000040   0.000043  0.0000009  0.0000087    0.000049    0.000052
+2009  12   9  55174   0.147236   0.199623   0.1344300   0.0014239   0.000089  -0.000102   0.000040   0.000043  0.0000020  0.0000085    0.000084    0.000069
+2009  12  10  55175   0.145104   0.198562   0.1330319   0.0013527   0.000111  -0.000104   0.000040   0.000042  0.0000023  0.0000087    0.000089    0.000078
+2009  12  11  55176   0.142583   0.197687   0.1317700   0.0011580   0.000119  -0.000156   0.000041   0.000042  0.0000010  0.0000088    0.000080    0.000078
+2009  12  12  55177   0.140327   0.196743   0.1307345   0.0009203   0.000105  -0.000187   0.000041   0.000043  0.0000031  0.0000096    0.000070    0.000071
+2009  12  13  55178   0.138305   0.196159   0.1298967   0.0007620   0.000083  -0.000211   0.000041   0.000043  0.0000047  0.0000098    0.000062    0.000062
+2009  12  14  55179   0.136196   0.195912   0.1292026   0.0006489   0.000060  -0.000231   0.000041   0.000043  0.0000035  0.0000099    0.000053    0.000052
+2009  12  15  55180   0.133234   0.195621   0.1286057   0.0005608   0.000037  -0.000252   0.000041   0.000043  0.0000010  0.0000095    0.000044    0.000042
+2009  12  16  55181   0.130516   0.195108   0.1280351   0.0005798   0.000122  -0.000084   0.000041   0.000042  0.0000051  0.0000094    0.000051    0.000050
+2009  12  17  55182   0.127836   0.194647   0.1274354   0.0006311   0.000156   0.000012   0.000042   0.000040  0.0000063  0.0000095    0.000054    0.000051
+2009  12  18  55183   0.125412   0.193979   0.1267714   0.0007050   0.000064  -0.000006   0.000042   0.000041  0.0000024  0.0000095    0.000108    0.000119
+2009  12  19  55184   0.123406   0.193670   0.1260170   0.0008202   0.000037  -0.000054   0.000042   0.000042  0.0000030  0.0000095    0.000113    0.000128
+2009  12  20  55185   0.121745   0.193592   0.1251151   0.0009917   0.000046  -0.000111   0.000042   0.000041  0.0000042  0.0000093    0.000093    0.000108
+2009  12  21  55186   0.120039   0.193554   0.1240491   0.0011416   0.000054  -0.000172   0.000039   0.000040  0.0000031  0.0000091    0.000074    0.000087
+2009  12  22  55187   0.118103   0.193169   0.1228445   0.0012610   0.000058  -0.000233   0.000038   0.000041  0.0000010  0.0000092    0.000054    0.000066
+2009  12  23  55188   0.116014   0.192900   0.1215344   0.0013331   0.000094  -0.000216   0.000039   0.000041  0.0000009  0.0000091    0.000090    0.000102
+2009  12  24  55189   0.113872   0.192455   0.1202182   0.0012784   0.000069  -0.000214   0.000038   0.000041  0.0000022  0.0000090    0.000100    0.000112
+2009  12  25  55190   0.112080   0.192049   0.1189566   0.0012219   0.000019  -0.000219   0.000039   0.000041  0.0000030  0.0000091    0.000095    0.000106
+2009  12  26  55191   0.110403   0.191817   0.1177904   0.0010946  -0.000027  -0.000214   0.000041   0.000041  0.0000036  0.0000092    0.000090    0.000100
+2009  12  27  55192   0.108657   0.191751   0.1167661   0.0009457  -0.000065  -0.000200   0.000041   0.000042  0.0000045  0.0000097    0.000085    0.000094
+2009  12  28  55193   0.106800   0.191802   0.1159196   0.0007594  -0.000095  -0.000181   0.000042   0.000042  0.0000036  0.0000100    0.000080    0.000088
+2009  12  29  55194   0.104835   0.191866   0.1152888   0.0005220  -0.000116  -0.000160   0.000042   0.000042  0.0000012  0.0000100    0.000076    0.000082
+2009  12  30  55195   0.102809   0.191975   0.1148664   0.0003730   0.000052  -0.000060   0.000043   0.000042  0.0000020  0.0000096    0.000135    0.000140
+2009  12  31  55196   0.100710   0.192257   0.1145165   0.0003994   0.000115  -0.000032   0.000043   0.000042  0.0000067  0.0000093    0.000141    0.000145
+2010   1   1  55197   0.098726   0.192809   0.1140749   0.0005533   0.000117  -0.000045   0.000043   0.000044  0.0000065  0.0000092    0.000121    0.000124
+2010   1   2  55198   0.096636   0.193215   0.1134294   0.0007800   0.000112  -0.000066   0.000043   0.000044  0.0000043  0.0000096    0.000100    0.000102
+2010   1   3  55199   0.094705   0.193068   0.1125216   0.0010638   0.000098  -0.000095   0.000045   0.000047  0.0000053  0.0000107    0.000079    0.000081
+2010   1   4  55200   0.092758   0.193452   0.1113549   0.0012663   0.000074  -0.000128   0.000047   0.000049  0.0000038  0.0000113    0.000058    0.000059
+2010   1   5  55201   0.090532   0.193699   0.1100120   0.0014130   0.000041  -0.000165   0.000046   0.000047  0.0000009  0.0000113    0.000037    0.000038
+2010   1   6  55202   0.087633   0.194129   0.1086246   0.0013311   0.000023  -0.000179   0.000045   0.000047  0.0000066  0.0000113    0.000040    0.000044
+2010   1   7  55203   0.084315   0.194241   0.1073367   0.0011626   0.000007  -0.000185   0.000046   0.000045  0.0000078  0.0000110    0.000049    0.000057
+2010   1   8  55204   0.081227   0.194421   0.1062509   0.0009768  -0.000008  -0.000189   0.000046   0.000045  0.0000022  0.0000111    0.000058    0.000071
+2010   1   9  55205   0.077930   0.194474   0.1054075   0.0007348  -0.000033  -0.000193   0.000047   0.000049  0.0000034  0.0000115    0.000057    0.000068
+2010   1  10  55206   0.074247   0.194381   0.1048094   0.0004836  -0.000054  -0.000198   0.000047   0.000048  0.0000053  0.0000112    0.000052    0.000060
+2010   1  11  55207   0.070533   0.194261   0.1044109   0.0003317  -0.000065  -0.000204   0.000046   0.000047  0.0000038  0.0000106    0.000047    0.000052
+2010   1  12  55208   0.067640   0.194353   0.1041315   0.0002611  -0.000064  -0.000215   0.000045   0.000046  0.0000009  0.0000106    0.000041    0.000043
+2010   1  13  55209   0.064905   0.194508   0.1038922   0.0002492  -0.000057  -0.000221   0.000046   0.000048  0.0000064  0.0000098    0.000253    0.000159
+2010   1  14  55210   0.062152   0.194910   0.1036422   0.0002665  -0.000041  -0.000229   0.000049   0.000048  0.0000076  0.0000095    0.000521    0.000306
+2010   1  15  55211   0.059170   0.195186   0.1033214   0.0003838   0.000014  -0.000238   0.000049   0.000048  0.0000020  0.0000103    0.000195    0.000133
+2010   1  16  55212   0.055833   0.195619   0.1028545   0.0005693   0.000096  -0.000302   0.000048   0.000047  0.0000036  0.0000109    0.000064    0.000067
+2010   1  17  55213   0.052404   0.195718   0.1021960   0.0007534   0.000178  -0.000380   0.000057   0.000057  0.0000063  0.0000125    0.000078    0.000079
+2010   1  18  55214   0.048883   0.195984   0.1013583   0.0009027   0.000248  -0.000443   0.000065   0.000065  0.0000069  0.0000138    0.000092    0.000091
+2010   1  19  55215   0.044990   0.196117   0.1004125   0.0009708   0.000304  -0.000488   0.000065   0.000066  0.0000049  0.0000138    0.000106    0.000102
+2010   1  20  55216   0.041033   0.196439   0.0994206   0.0009742   0.000112  -0.000307   0.000065   0.000066  0.0000012  0.0000138    0.000049    0.000049
+2010   1  21  55217   0.037040   0.196811   0.0984061   0.0009853   0.000037  -0.000228   0.000064   0.000065  0.0000005  0.0000131    0.000047    0.000050
+2010   1  22  55218   0.033601   0.197097   0.0973884   0.0010025  -0.000011  -0.000173   0.000064   0.000067  0.0000006  0.0000129    0.000059    0.000065
+2010   1  23  55219   0.030616   0.197155   0.0963973   0.0009631  -0.000014  -0.000119   0.000065   0.000068  0.0000040  0.0000134    0.000056    0.000061
+2010   1  24  55220   0.028163   0.197354   0.0954881   0.0008425   0.000000  -0.000074   0.000067   0.000064  0.0000063  0.0000134    0.000048    0.000050
+2010   1  25  55221   0.025557   0.197986   0.0947211   0.0006827   0.000016  -0.000046   0.000063   0.000059  0.0000094  0.0000129    0.000040    0.000040
+2010   1  26  55222   0.023080   0.198517   0.0940925   0.0005822   0.000030  -0.000034   0.000062   0.000063  0.0000125  0.0000120    0.000031    0.000029
+2010   1  27  55223   0.020666   0.199248   0.0935333   0.0005661   0.000054  -0.000033   0.000064   0.000065  0.0000108  0.0000115    0.000043    0.000036
+2010   1  28  55224   0.018929   0.200317   0.0929144   0.0006996   0.000077  -0.000045   0.000063   0.000063  0.0000067  0.0000113    0.000060    0.000049
+2010   1  29  55225   0.017858   0.201863   0.0920944   0.0009557  -0.000079  -0.000233   0.000064   0.000063  0.0000022  0.0000108    0.000064    0.000053
+2010   1  30  55226   0.016392   0.204026   0.0909960   0.0012788  -0.000156  -0.000305   0.000063   0.000065  0.0000042  0.0000116    0.000063    0.000052
+2010   1  31  55227   0.014096   0.206323   0.0895595   0.0016029  -0.000177  -0.000309   0.000065   0.000065  0.0000066  0.0000131    0.000060    0.000050
+2010   2   1  55228   0.011566   0.207960   0.0878374   0.0018304  -0.000188  -0.000307   0.000066   0.000066  0.0000050  0.0000130    0.000057    0.000047
+2010   2   2  55229   0.008713   0.209262   0.0859774   0.0018631  -0.000187  -0.000298   0.000065   0.000068  0.0000012  0.0000134    0.000055    0.000045
+2010   2   3  55230   0.006056   0.210320   0.0841301   0.0017921  -0.000211  -0.000236   0.000065   0.000069  0.0000085  0.0000139    0.000074    0.000059
+2010   2   4  55231   0.003314   0.211845   0.0824540   0.0015370  -0.000157  -0.000249   0.000064   0.000065  0.0000130  0.0000136    0.000233    0.000209
+2010   2   5  55232   0.000906   0.212744   0.0810372   0.0012743  -0.000005  -0.000346   0.000064   0.000052  0.0000129  0.0000129    0.000185    0.000184
+2010   2   6  55233  -0.001071   0.213357   0.0798676   0.0010554   0.000031  -0.000374   0.000066   0.000052  0.0000101  0.0000132    0.000130    0.000137
+2010   2   7  55234  -0.002842   0.214081   0.0789184   0.0008431   0.000011  -0.000364   0.000067   0.000061  0.0000065  0.0000134    0.000103    0.000107
+2010   2   8  55235  -0.004825   0.215039   0.0781611   0.0006788  -0.000017  -0.000348   0.000064   0.000064  0.0000045  0.0000132    0.000076    0.000078
+2010   2   9  55236  -0.006459   0.216232   0.0775394   0.0005773  -0.000054  -0.000327   0.000064   0.000060  0.0000010  0.0000140    0.000049    0.000049
+2010   2  10  55237  -0.008312   0.217846   0.0769841   0.0005652   0.000016  -0.000184   0.000065   0.000060  0.0000031  0.0000137    0.000060    0.000061
+2010   2  11  55238  -0.010818   0.219449   0.0763377   0.0006661  -0.000285   0.000284   0.000058   0.000061  0.0000006  0.0000135    0.000086    0.000083
+2010   2  12  55239  -0.013636   0.221032   0.0756465   0.0008070  -0.000103  -0.000143   0.000057   0.000061  0.0000015  0.0000129    0.000053    0.000047
+2010   2  13  55240  -0.015907   0.222555   0.0747605   0.0009935  -0.000046  -0.000300   0.000057   0.000059  0.0000064  0.0000129    0.000039    0.000033
+2010   2  14  55241  -0.017850   0.224413   0.0736913   0.0011551  -0.000045  -0.000333   0.000054   0.000054  0.0000085  0.0000122    0.000037    0.000032
+2010   2  15  55242  -0.019530   0.226286   0.0724428   0.0013146  -0.000055  -0.000332   0.000050   0.000048  0.0000120  0.0000112    0.000036    0.000031
+2010   2  16  55243  -0.021171   0.228558   0.0710554   0.0014275  -0.000075  -0.000303   0.000049   0.000049  0.0000107  0.0000116    0.000034    0.000030
+2010   2  17  55244  -0.022536   0.230871   0.0695809   0.0014932  -0.000100  -0.000254   0.000048   0.000051  0.0000020  0.0000115    0.000032    0.000029
+2010   2  18  55245  -0.023438   0.232931   0.0680581   0.0014967  -0.000063  -0.000346   0.000048   0.000051  0.0000003  0.0000108    0.000045    0.000030
+2010   2  19  55246  -0.024196   0.235179   0.0665725   0.0014156  -0.000112  -0.000179   0.000048   0.000051  0.0000003  0.0000106    0.000043    0.000037
+2010   2  20  55247  -0.025097   0.237254   0.0652119   0.0012956  -0.000111  -0.000148   0.000049   0.000052  0.0000061  0.0000113    0.000039    0.000037
+2010   2  21  55248  -0.026340   0.239158   0.0639713   0.0011756  -0.000081  -0.000200   0.000052   0.000056  0.0000082  0.0000113    0.000035    0.000034
+2010   2  22  55249  -0.027511   0.240850   0.0628411   0.0010699  -0.000051  -0.000256   0.000054   0.000054  0.0000051  0.0000117    0.000032    0.000030
+2010   2  23  55250  -0.028336   0.242578   0.0618202   0.0009803  -0.000021  -0.000313   0.000053   0.000053  0.0000011  0.0000122    0.000029    0.000027
+2010   2  24  55251  -0.029175   0.244479   0.0608519   0.0010008  -0.000054  -0.000283   0.000052   0.000057  0.0000053  0.0000122    0.000038    0.000034
+2010   2  25  55252  -0.030407   0.246621   0.0597762   0.0011880  -0.000102  -0.000230   0.000053   0.000058  0.0000088  0.0000120    0.000051    0.000044
+2010   2  26  55253  -0.031553   0.248674   0.0584561   0.0014609  -0.000146  -0.000181   0.000053   0.000056  0.0000025  0.0000116    0.000064    0.000054
+2010   2  27  55254  -0.032498   0.251011   0.0568957   0.0017301  -0.000169  -0.000139   0.000054   0.000057  0.0000090  0.0000119    0.000063    0.000052
+2010   2  28  55255  -0.034051   0.253388   0.0550421   0.0019727  -0.000179  -0.000107   0.000054   0.000057  0.0000122  0.0000123    0.000056    0.000047
+2010   3   1  55256  -0.035022   0.255572   0.0529799   0.0020920  -0.000185  -0.000083   0.000053   0.000054  0.0000076  0.0000120    0.000050    0.000042
+2010   3   2  55257  -0.035928   0.257692   0.0509183   0.0019988  -0.000189  -0.000064   0.000051   0.000053  0.0000016  0.0000119    0.000043    0.000037
+2010   3   3  55258  -0.036883   0.259829   0.0490364   0.0017576   0.000261  -0.000283   0.000051   0.000054  0.0000073  0.0000120    0.000078    0.000090
+2010   3   4  55259  -0.038271   0.261877   0.0474024   0.0014769   0.000219  -0.000307   0.000049   0.000054  0.0000120  0.0000119    0.000076    0.000090
+2010   3   5  55260  -0.039059   0.263869   0.0460255   0.0012084  -0.000013  -0.000249   0.000050   0.000054  0.0000032  0.0000120    0.000060    0.000069
+2010   3   6  55261  -0.039936   0.265978   0.0449255   0.0009630  -0.000104  -0.000234   0.000052   0.000054  0.0000070  0.0000123    0.000053    0.000060
+2010   3   7  55262  -0.041314   0.267682   0.0440378   0.0008250  -0.000141  -0.000228   0.000052   0.000052  0.0000093  0.0000120    0.000047    0.000054
+2010   3   8  55263  -0.042948   0.269473   0.0432550   0.0007611  -0.000173  -0.000210   0.000052   0.000052  0.0000059  0.0000114    0.000042    0.000048
+2010   3   9  55264  -0.044802   0.270946   0.0424560   0.0008369  -0.000198  -0.000184   0.000051   0.000051  0.0000013  0.0000113    0.000037    0.000043
+2010   3  10  55265  -0.046157   0.272476   0.0415468   0.0009236  -0.000110  -0.000110   0.000051   0.000041  0.0000109  0.0000111    0.000040    0.000045
+2010   3  11  55266  -0.047062   0.273908   0.0405758   0.0009821   0.000009  -0.000027   0.000051   0.000042  0.0000158  0.0000105    0.000044    0.000049
+2010   3  12  55267  -0.048035   0.275747   0.0395810   0.0010905   0.000127   0.000050   0.000051   0.000050  0.0000037  0.0000108    0.000049    0.000054
+2010   3  13  55268  -0.048704   0.277641   0.0384942   0.0011360   0.000113   0.000062   0.000052   0.000052  0.0000078  0.0000116    0.000048    0.000052
+2010   3  14  55269  -0.049656   0.280122   0.0373805   0.0011206   0.000045   0.000043   0.000050   0.000052  0.0000094  0.0000112    0.000045    0.000048
+2010   3  15  55270  -0.050821   0.282708   0.0362458   0.0011670  -0.000031   0.000012   0.000046   0.000050  0.0000055  0.0000103    0.000042    0.000045
+2010   3  16  55271  -0.051856   0.285419   0.0350490   0.0012104  -0.000114  -0.000026   0.000045   0.000050  0.0000014  0.0000095    0.000039    0.000041
+2010   3  17  55272  -0.052544   0.287660   0.0338086   0.0012363  -0.000110  -0.000066   0.000045   0.000046  0.0000085  0.0000097    0.000043    0.000043
+2010   3  18  55273  -0.053205   0.289659   0.0325901   0.0011787  -0.000085  -0.000107   0.000045   0.000046  0.0000100  0.0000104    0.000047    0.000048
+2010   3  19  55274  -0.053905   0.291101   0.0314869   0.0009786  -0.000060  -0.000147   0.000044   0.000049  0.0000027  0.0000105    0.000053    0.000052
+2010   3  20  55275  -0.054397   0.292482   0.0305739   0.0008219  -0.000073  -0.000110   0.000044   0.000048  0.0000084  0.0000104    0.000049    0.000049
+2010   3  21  55276  -0.054487   0.294094   0.0298260   0.0006704  -0.000100  -0.000045   0.000046   0.000045  0.0000129  0.0000101    0.000043    0.000044
+2010   3  22  55277  -0.054452   0.296079   0.0292010   0.0005599  -0.000126   0.000019   0.000044   0.000044  0.0000088  0.0000097    0.000036    0.000039
+2010   3  23  55278  -0.054665   0.298261   0.0286539   0.0005362  -0.000150   0.000084   0.000043   0.000046  0.0000018  0.0000097    0.000030    0.000034
+2010   3  24  55279  -0.055173   0.300826   0.0280713   0.0006614  -0.000228  -0.000098   0.000043   0.000044  0.0000031  0.0000100    0.000072    0.000043
+2010   3  25  55280  -0.055966   0.303553   0.0272732   0.0009548  -0.000294  -0.000306   0.000043   0.000044  0.0000051  0.0000101    0.000114    0.000053
+2010   3  26  55281  -0.057001   0.306182   0.0261316   0.0013048  -0.000178  -0.000208   0.000043   0.000045  0.0000013  0.0000099    0.000045    0.000033
+2010   3  27  55282  -0.057609   0.308208   0.0246740   0.0016149  -0.000160  -0.000157   0.000044   0.000045  0.0000044  0.0000097    0.000025    0.000027
+2010   3  28  55283  -0.058274   0.310491   0.0229522   0.0018541  -0.000176  -0.000120   0.000045   0.000046  0.0000061  0.0000099    0.000025    0.000026
+2010   3  29  55284  -0.058899   0.312631   0.0210233   0.0019777  -0.000191  -0.000081   0.000045   0.000046  0.0000040  0.0000101    0.000024    0.000026
+2010   3  30  55285  -0.059896   0.314902   0.0190459   0.0019103  -0.000205  -0.000043   0.000043   0.000045  0.0000010  0.0000099    0.000024    0.000026
+2010   3  31  55286  -0.060789   0.316838   0.0172333   0.0016406  -0.000179  -0.000032   0.000043   0.000044  0.0000005  0.0000098    0.000026    0.000029
+2010   4   1  55287  -0.061070   0.319217   0.0157299   0.0013097  -0.000144  -0.000032   0.000042   0.000043  0.0000007  0.0000099    0.000029    0.000032
+2010   4   2  55288  -0.061595   0.322004   0.0145719   0.0010220  -0.000147  -0.000049   0.000042   0.000043  0.0000035  0.0000098    0.000033    0.000035
+2010   4   3  55289  -0.062106   0.324581   0.0136532   0.0008362  -0.000165  -0.000074   0.000042   0.000045  0.0000077  0.0000099    0.000036    0.000037
+2010   4   4  55290  -0.062950   0.327269   0.0128560   0.0007609  -0.000184  -0.000101   0.000046   0.000048  0.0000110  0.0000103    0.000039    0.000039
+2010   4   5  55291  -0.064115   0.329423   0.0120637   0.0008052  -0.000202  -0.000125   0.000050   0.000052  0.0000135  0.0000110    0.000043    0.000041
+2010   4   6  55292  -0.065848   0.331314   0.0112002   0.0008983  -0.000221  -0.000143   0.000050   0.000050  0.0000107  0.0000115    0.000046    0.000043
+2010   4   7  55293  -0.067063   0.332875   0.0102386   0.0010387  -0.000241  -0.000151   0.000049   0.000049  0.0000021  0.0000114    0.000049    0.000046
+2010   4   8  55294  -0.067829   0.334913   0.0091217   0.0011833  -0.000054  -0.000207   0.000048   0.000050  0.0000004  0.0000111    0.000056    0.000043
+2010   4   9  55295  -0.068175   0.337168   0.0078644   0.0013248  -0.000132  -0.000127   0.000049   0.000052  0.0000005  0.0000111    0.000041    0.000034
+2010   4  10  55296  -0.068462   0.339673   0.0065117   0.0014156  -0.000183  -0.000039   0.000049   0.000052  0.0000049  0.0000113    0.000040    0.000035
+2010   4  11  55297  -0.068303   0.342213   0.0050623   0.0014964  -0.000189   0.000035   0.000047   0.000051  0.0000077  0.0000111    0.000047    0.000039
+2010   4  12  55298  -0.068121   0.345080   0.0035314   0.0015574  -0.000192   0.000103   0.000046   0.000049  0.0000055  0.0000108    0.000054    0.000044
+2010   4  13  55299  -0.068125   0.347953   0.0019636   0.0015914  -0.000192   0.000160   0.000046   0.000049  0.0000016  0.0000101    0.000060    0.000048
+2010   4  14  55300  -0.068413   0.350711   0.0004089   0.0015243  -0.000294   0.000108   0.000046   0.000048  0.0000056  0.0000099    0.000052    0.000039
+2010   4  15  55301  -0.068870   0.353083  -0.0010886   0.0014133  -0.000213   0.000049   0.000046   0.000048  0.0000089  0.0000103    0.000053    0.000045
+2010   4  16  55302  -0.068868   0.355239  -0.0024745   0.0012906  -0.000070  -0.000013   0.000046   0.000048  0.0000028  0.0000103    0.000058    0.000057
+2010   4  17  55303  -0.069024   0.357448  -0.0036825   0.0011497  -0.000058  -0.000039   0.000046   0.000045  0.0000048  0.0000100    0.000055    0.000056
+2010   4  18  55304  -0.069204   0.359706  -0.0047679   0.0010549  -0.000098  -0.000053   0.000045   0.000045  0.0000072  0.0000100    0.000049    0.000049
+2010   4  19  55305  -0.068972   0.362012  -0.0058021   0.0010203  -0.000143  -0.000064   0.000044   0.000045  0.0000051  0.0000102    0.000044    0.000042
+2010   4  20  55306  -0.068843   0.364650  -0.0068524   0.0010916  -0.000192  -0.000070   0.000045   0.000045  0.0000013  0.0000103    0.000039    0.000035
+2010   4  21  55307  -0.068894   0.366970  -0.0080089   0.0012691  -0.000194  -0.000066   0.000045   0.000047  0.0000072  0.0000103    0.000039    0.000036
+2010   4  22  55308  -0.069333   0.369362  -0.0093709   0.0014918  -0.000185  -0.000053   0.000045   0.000048  0.0000114  0.0000104    0.000041    0.000039
+2010   4  23  55309  -0.069943   0.371851  -0.0109733   0.0016918  -0.000178  -0.000038   0.000044   0.000048  0.0000030  0.0000100    0.000043    0.000042
+2010   4  24  55310  -0.070312   0.374060  -0.0127411   0.0018479  -0.000182  -0.000039   0.000045   0.000048  0.0000053  0.0000096    0.000043    0.000043
+2010   4  25  55311  -0.070707   0.376344  -0.0146136   0.0019225  -0.000191  -0.000044   0.000046   0.000048  0.0000086  0.0000099    0.000041    0.000042
+2010   4  26  55312  -0.071107   0.378575  -0.0165046   0.0018475  -0.000199  -0.000048   0.000045   0.000049  0.0000063  0.0000106    0.000040    0.000042
+2010   4  27  55313  -0.070784   0.380913  -0.0183068   0.0017313  -0.000205  -0.000053   0.000045   0.000050  0.0000016  0.0000110    0.000039    0.000041
+2010   4  28  55314  -0.070789   0.383505  -0.0199301   0.0014949  -0.000233  -0.000052   0.000046   0.000050  0.0000094  0.0000112    0.000044    0.000046
+2010   4  29  55315  -0.071053   0.385470  -0.0212899   0.0011968  -0.000262  -0.000048   0.000047   0.000050  0.0000110  0.0000111    0.000050    0.000053
+2010   4  30  55316  -0.071084   0.387524  -0.0223517   0.0009168  -0.000281  -0.000045   0.000046   0.000050  0.0000029  0.0000105    0.000056    0.000060
+2010   5   1  55317  -0.070832   0.389504  -0.0231518   0.0007061  -0.000280  -0.000034   0.000046   0.000050  0.0000099  0.0000102    0.000055    0.000059
+2010   5   2  55318  -0.070276   0.391405  -0.0238060   0.0006139  -0.000265  -0.000021   0.000052   0.000054  0.0000122  0.0000109    0.000051    0.000054
+2010   5   3  55319  -0.069533   0.393386  -0.0243796   0.0005487  -0.000245  -0.000010   0.000055   0.000058  0.0000062  0.0000107    0.000047    0.000048
+2010   5   4  55320  -0.068356   0.395410  -0.0249120   0.0005428  -0.000224  -0.000004   0.000052   0.000054  0.0000014  0.0000088    0.000043    0.000043
+2010   5   5  55321  -0.066683   0.397377  -0.0254737   0.0005986   0.000104   0.000024   0.000051   0.000052  0.0000047  0.0000087    0.000056    0.000062
+2010   5   6  55322  -0.064912   0.399829  -0.0261043   0.0006727   0.000089   0.000013   0.000051   0.000054  0.0000078  0.0000103    0.000059    0.000064
+2010   5   7  55323  -0.062943   0.402390  -0.0268355   0.0007951  -0.000062  -0.000014   0.000052   0.000055  0.0000022  0.0000116    0.000058    0.000059
+2010   5   8  55324  -0.060503   0.405204  -0.0277073   0.0009605  -0.000124  -0.000043   0.000053   0.000056  0.0000079  0.0000126    0.000053    0.000053
+2010   5   9  55325  -0.058914   0.408068  -0.0287427   0.0011273  -0.000154  -0.000070   0.000051   0.000054  0.0000090  0.0000123    0.000047    0.000047
+2010   5  10  55326  -0.057852   0.410644  -0.0299152   0.0012332  -0.000183  -0.000093   0.000048   0.000050  0.0000050  0.0000115    0.000041    0.000041
+2010   5  11  55327  -0.056599   0.413093  -0.0311473   0.0012321  -0.000207  -0.000109   0.000046   0.000049  0.0000011  0.0000112    0.000035    0.000034
+2010   5  12  55328  -0.055558   0.415348  -0.0323395   0.0011380  -0.000181  -0.000087   0.000046   0.000048  0.0000093  0.0000109    0.000032    0.000032
+2010   5  13  55329  -0.054473   0.417510  -0.0334105   0.0009681  -0.000137  -0.000050   0.000043   0.000045  0.0000109  0.0000109    0.000031    0.000030
+2010   5  14  55330  -0.053355   0.419462  -0.0342972   0.0007874  -0.000091  -0.000011   0.000044   0.000047  0.0000028  0.0000110    0.000029    0.000028
+2010   5  15  55331  -0.051882   0.421506  -0.0349867   0.0006400  -0.000064   0.000014   0.000047   0.000051  0.0000060  0.0000105    0.000029    0.000027
+2010   5  16  55332  -0.050583   0.423401  -0.0356390   0.0006344  -0.000050   0.000031   0.000046   0.000050  0.0000104  0.0000098    0.000031    0.000028
+2010   5  17  55333  -0.049099   0.424992  -0.0363365   0.0007436  -0.000048   0.000041   0.000043   0.000046  0.0000078  0.0000092    0.000032    0.000028
+2010   5  18  55334  -0.047442   0.426299  -0.0371562   0.0009165  -0.000060   0.000043   0.000041   0.000044  0.0000017  0.0000092    0.000033    0.000029
+2010   5  19  55335  -0.045408   0.427774  -0.0382255   0.0011612  -0.000064   0.000062   0.000041   0.000043  0.0000089  0.0000092    0.000040    0.000032
+2010   5  20  55336  -0.043492   0.429582  -0.0395343   0.0014010  -0.000116   0.000037   0.000041   0.000043  0.0000137  0.0000092    0.000132    0.000076
+2010   5  21  55337  -0.041560   0.431458  -0.0410244   0.0015981  -0.000252  -0.000036   0.000042   0.000045  0.0000033  0.0000097    0.000091    0.000060
+2010   5  22  55338  -0.039432   0.433357  -0.0426714   0.0017008  -0.000337  -0.000069   0.000043   0.000046  0.0000064  0.0000102    0.000062    0.000049
+2010   5  23  55339  -0.037522   0.435497  -0.0443585   0.0016489  -0.000386  -0.000080   0.000040   0.000043  0.0000113  0.0000096    0.000058    0.000049
+2010   5  24  55340  -0.035657   0.437514  -0.0459009   0.0014401  -0.000418  -0.000085   0.000037   0.000039  0.0000117  0.0000089    0.000054    0.000049
+2010   5  25  55341  -0.034043   0.439624  -0.0471966   0.0011883  -0.000429  -0.000082   0.000036   0.000038  0.0000078  0.0000086    0.000049    0.000049
+2010   5  26  55342  -0.032550   0.441675  -0.0482544   0.0009493  -0.000421  -0.000073   0.000036   0.000038  0.0000017  0.0000084    0.000045    0.000049
+2010   5  27  55343  -0.031427   0.443742  -0.0491160   0.0007630  -0.000314  -0.000031   0.000036   0.000038  0.0000005  0.0000084    0.000567    0.001275
+2010   5  28  55344  -0.030425   0.445365  -0.0498072   0.0006252  -0.000197   0.000013   0.000038   0.000040  0.0000006  0.0000087    0.000216    0.000461
+2010   5  29  55345  -0.028977   0.446704  -0.0503449   0.0004691  -0.000144   0.000031   0.000039   0.000041  0.0000063  0.0000089    0.000031    0.000030
+2010   5  30  55346  -0.027330   0.448101  -0.0507473   0.0003693  -0.000116   0.000038   0.000040   0.000043  0.0000091  0.0000092    0.000033    0.000031
+2010   5  31  55347  -0.025941   0.450080  -0.0511163   0.0004030  -0.000093   0.000042   0.000041   0.000045  0.0000103  0.0000095    0.000036    0.000032
+2010   6   1  55348  -0.024105   0.451851  -0.0515738   0.0005185  -0.000079   0.000045   0.000039   0.000044  0.0000076  0.0000094    0.000038    0.000033
+2010   6   2  55349  -0.022387   0.453656  -0.0521586   0.0006414  -0.000073   0.000047   0.000039   0.000043  0.0000017  0.0000096    0.000040    0.000034
+2010   6   3  55350  -0.020816   0.454969  -0.0528448   0.0007272  -0.000049   0.000047   0.000039   0.000043  0.0000006  0.0000097    0.000037    0.000033
+2010   6   4  55351  -0.019305   0.456478  -0.0535790   0.0007203  -0.000024   0.000047   0.000039   0.000044  0.0000006  0.0000093    0.000032    0.000033
+2010   6   5  55352  -0.017327   0.457776  -0.0543059   0.0007406  -0.000027   0.000066   0.000040   0.000045  0.0000072  0.0000091    0.000037    0.000036
+2010   6   6  55353  -0.014569   0.459303  -0.0550206   0.0007082  -0.000043   0.000091   0.000042   0.000046  0.0000095  0.0000098    0.000045    0.000040
+2010   6   7  55354  -0.011921   0.461098  -0.0556747   0.0006091  -0.000060   0.000116   0.000042   0.000045  0.0000059  0.0000101    0.000054    0.000045
+2010   6   8  55355  -0.009543   0.462681  -0.0562189   0.0005007  -0.000077   0.000138   0.000041   0.000045  0.0000013  0.0000097    0.000062    0.000049
+2010   6   9  55356  -0.006576   0.464239  -0.0566479   0.0003832  -0.000058   0.000130   0.000041   0.000040  0.0000135  0.0000098    0.000060    0.000052
+2010   6  10  55357  -0.003767   0.466092  -0.0569665   0.0002542  -0.000033   0.000116   0.000041   0.000039  0.0000188  0.0000099    0.000058    0.000054
+2010   6  11  55358  -0.001155   0.467668  -0.0571681   0.0001225  -0.000008   0.000097   0.000041   0.000042  0.0000045  0.0000095    0.000055    0.000056
+2010   6  12  55359   0.001673   0.469309  -0.0572418   0.0000284  -0.000016   0.000099   0.000043   0.000042  0.0000074  0.0000097    0.000052    0.000054
+2010   6  13  55360   0.004960   0.470811  -0.0572942   0.0000699  -0.000035   0.000106   0.000042   0.000043  0.0000100  0.0000095    0.000049    0.000050
+2010   6  14  55361   0.007774   0.472326  -0.0574002   0.0001512  -0.000053   0.000112   0.000039   0.000041  0.0000061  0.0000090    0.000045    0.000046
+2010   6  15  55362   0.010304   0.473358  -0.0576016   0.0002555  -0.000069   0.000115   0.000038   0.000041  0.0000010  0.0000089    0.000042    0.000042
+2010   6  16  55363   0.012923   0.474408  -0.0579511   0.0004144  -0.000060   0.000078   0.000038   0.000041  0.0000071  0.0000086    0.000045    0.000043
+2010   6  17  55364   0.015962   0.475372  -0.0584630   0.0005659  -0.000045   0.000037   0.000038   0.000040  0.0000079  0.0000085    0.000048    0.000045
+2010   6  18  55365   0.019152   0.476452  -0.0590938   0.0006472  -0.000026   0.000003   0.000038   0.000040  0.0000019  0.0000087    0.000051    0.000047
+2010   6  19  55366   0.022351   0.477546  -0.0597379   0.0005848  -0.000015   0.000015   0.000039   0.000042  0.0000064  0.0000092    0.000051    0.000047
+2010   6  20  55367   0.024873   0.478505  -0.0601979   0.0003505  -0.000004   0.000045   0.000039   0.000041  0.0000091  0.0000088    0.000051    0.000046
+2010   6  21  55368   0.027630   0.478734  -0.0604142   0.0000987   0.000006   0.000079   0.000038   0.000040  0.0000060  0.0000077    0.000050    0.000044
+2010   6  22  55369   0.030637   0.478928  -0.0604056  -0.0001476   0.000013   0.000117   0.000037   0.000041  0.0000010  0.0000076    0.000050    0.000043
+2010   6  23  55370   0.034115   0.478831  -0.0601735  -0.0003677   0.000011   0.000132   0.000037   0.000039  0.0000071  0.0000082    0.000368    0.000727
+2010   6  24  55371   0.037827   0.479095  -0.0597300  -0.0005401   0.000061   0.000144   0.000038   0.000036  0.0000106  0.0000085    0.000304    0.000584
+2010   6  25  55372   0.041375   0.479703  -0.0591346  -0.0006183   0.000119   0.000152   0.000038   0.000037  0.0000026  0.0000090    0.000114    0.000172
+2010   6  26  55373   0.044200   0.480400  -0.0585110  -0.0005900   0.000085   0.000168   0.000039   0.000042  0.0000077  0.0000092    0.000071    0.000082
+2010   6  27  55374   0.047215   0.481201  -0.0579359  -0.0005444   0.000024   0.000180   0.000038   0.000041  0.0000083  0.0000090    0.000062    0.000067
+2010   6  28  55375   0.050173   0.481898  -0.0574497  -0.0004355  -0.000044   0.000187   0.000036   0.000039  0.0000045  0.0000087    0.000053    0.000053
+2010   6  29  55376   0.053607   0.482441  -0.0571065  -0.0002741  -0.000113   0.000187   0.000036   0.000037  0.0000010  0.0000082    0.000045    0.000038
+2010   6  30  55377   0.056963   0.482897  -0.0569425  -0.0001395  -0.000284   0.000094   0.000036   0.000038  0.0000084  0.0000077    0.000071    0.000076
+2010   7   1  55378   0.060852   0.483107  -0.0568717  -0.0000346  -0.000240   0.000048   0.000036   0.000039  0.0000124  0.0000080    0.000091    0.000100
+2010   7   2  55379   0.064590   0.483583  -0.0568314   0.0000234  -0.000121   0.000021   0.000036   0.000039  0.0000036  0.0000085    0.000110    0.000118
+2010   7   3  55380   0.067989   0.483868  -0.0568679   0.0000497  -0.000114   0.000037   0.000036   0.000038  0.0000068  0.0000081    0.000121    0.000120
+2010   7   4  55381   0.071021   0.483998  -0.0568966   0.0000205  -0.000146   0.000071   0.000038   0.000040  0.0000102  0.0000079    0.000129    0.000116
+2010   7   5  55382   0.074426   0.484080  -0.0568556  -0.0001057  -0.000172   0.000104   0.000039   0.000041  0.0000112  0.0000077    0.000138    0.000113
+2010   7   6  55383   0.077816   0.484027  -0.0566833  -0.0002521  -0.000195   0.000135   0.000038   0.000040  0.0000078  0.0000083    0.000146    0.000109
+2010   7   7  55384   0.080981   0.484337  -0.0563325  -0.0004187  -0.000157   0.000056   0.000038   0.000041  0.0000015  0.0000090    0.000088    0.000072
+2010   7   8  55385   0.083756   0.484229  -0.0558318  -0.0005672  -0.000156   0.000046   0.000038   0.000042  0.0000007  0.0000089    0.000075    0.000069
+2010   7   9  55386   0.086311   0.484011  -0.0552295  -0.0006141  -0.000162   0.000049   0.000039   0.000043  0.0000006  0.0000089    0.000067    0.000071
+2010   7  10  55387   0.088555   0.483888  -0.0546013  -0.0005838  -0.000150   0.000014   0.000040   0.000043  0.0000062  0.0000090    0.000062    0.000064
+2010   7  11  55388   0.090810   0.483801  -0.0540619  -0.0004737  -0.000138  -0.000018   0.000040   0.000044  0.0000095  0.0000093    0.000056    0.000055
+2010   7  12  55389   0.093165   0.483707  -0.0536747  -0.0003198  -0.000132  -0.000035   0.000040   0.000043  0.0000065  0.0000095    0.000051    0.000046
+2010   7  13  55390   0.095450   0.483748  -0.0534865  -0.0000957  -0.000135  -0.000034   0.000039   0.000042  0.0000010  0.0000093    0.000045    0.000037
+2010   7  14  55391   0.098128   0.483709  -0.0535317   0.0001312  -0.000136   0.000082   0.000039   0.000042  0.0000100  0.0000092    0.000157    0.000148
+2010   7  15  55392   0.100375   0.483835  -0.0537556   0.0002661  -0.000142   0.000216   0.000039   0.000042  0.0000147  0.0000091    0.000285    0.000276
+2010   7  16  55393   0.102295   0.483329  -0.0540669   0.0003248  -0.000153   0.000347   0.000040   0.000043  0.0000039  0.0000092    0.000414    0.000404
+2010   7  17  55394   0.104190   0.482872  -0.0543856   0.0002769  -0.000224   0.000414   0.000040   0.000043  0.0000088  0.0000095    0.000386    0.000382
+2010   7  18  55395   0.106473   0.481682  -0.0545841   0.0001395  -0.000301   0.000447   0.000040   0.000043  0.0000117  0.0000093    0.000322    0.000325
+2010   7  19  55396   0.109448   0.480580  -0.0545988  -0.0000795  -0.000366   0.000454   0.000039   0.000042  0.0000080  0.0000087    0.000258    0.000268
+2010   7  20  55397   0.112146   0.479428  -0.0544174  -0.0003120  -0.000413   0.000436   0.000038   0.000041  0.0000023  0.0000084    0.000194    0.000212
+2010   7  21  55398   0.114595   0.478610  -0.0540278  -0.0005405  -0.000329   0.000324   0.000039   0.000042  0.0000055  0.0000086    0.000155    0.000171
+2010   7  22  55399   0.117032   0.477863  -0.0534070  -0.0007245  -0.000211   0.000190   0.000039   0.000042  0.0000077  0.0000088    0.000119    0.000133
+2010   7  23  55400   0.119516   0.477129  -0.0526178  -0.0007720  -0.000078   0.000052   0.000038   0.000040  0.0000024  0.0000087    0.000083    0.000095
+2010   7  24  55401   0.121733   0.476362  -0.0518601  -0.0007264  -0.000021   0.000013   0.000038   0.000040  0.0000075  0.0000088    0.000068    0.000078
+2010   7  25  55402   0.123759   0.474958  -0.0511580  -0.0006463   0.000007   0.000019   0.000037   0.000041  0.0000105  0.0000089    0.000060    0.000068
+2010   7  26  55403   0.126236   0.473573  -0.0505794  -0.0004812   0.000032   0.000038   0.000036   0.000040  0.0000067  0.0000088    0.000053    0.000058
+2010   7  27  55404   0.128864   0.472279  -0.0501920  -0.0003135   0.000051   0.000072   0.000036   0.000040  0.0000014  0.0000086    0.000045    0.000048
+2010   7  28  55405   0.131255   0.471277  -0.0499513  -0.0001918   0.000136   0.000046   0.000036   0.000040  0.0000073  0.0000084    0.000065    0.000061
+2010   7  29  55406   0.133376   0.470430  -0.0498338  -0.0000873   0.000214   0.000020   0.000036   0.000041  0.0000079  0.0000086    0.000089    0.000078
+2010   7  30  55407   0.135281   0.469477  -0.0497783  -0.0000460   0.000274   0.000001   0.000036   0.000041  0.0000021  0.0000086    0.000112    0.000094
+2010   7  31  55408   0.137272   0.467988  -0.0496918  -0.0000971   0.000267   0.000019   0.000035   0.000038  0.0000071  0.0000083    0.000108    0.000091
+2010   8   1  55409   0.139468   0.466696  -0.0495352  -0.0001951   0.000231   0.000044   0.000037   0.000039  0.0000116  0.0000087    0.000098    0.000084
+2010   8   2  55410   0.141635   0.465533  -0.0492834  -0.0002834   0.000179   0.000068   0.000039   0.000040  0.0000087  0.0000087    0.000088    0.000077
+2010   8   3  55411   0.143835   0.464540  -0.0489455  -0.0003613   0.000118   0.000089   0.000039   0.000041  0.0000015  0.0000086    0.000078    0.000070
+2010   8   4  55412   0.145939   0.463660  -0.0485718  -0.0004303  -0.000017   0.000056   0.000039   0.000042  0.0000103  0.0000088    0.000601    0.000234
+2010   8   5  55413   0.147713   0.462520  -0.0481466  -0.0004490  -0.000093   0.000058   0.000038   0.000041  0.0000150  0.0000088    0.000195    0.000080
+2010   8   6  55414   0.149642   0.461386  -0.0476840  -0.0004207  -0.000067   0.000131   0.000038   0.000041  0.0000037  0.0000086    0.000055    0.000051
+2010   8   7  55415   0.151728   0.460002  -0.0472925  -0.0003219  -0.000061   0.000111   0.000039   0.000040  0.0000076  0.0000088    0.000068    0.000064
+2010   8   8  55416   0.153885   0.458940  -0.0470567  -0.0001416  -0.000063   0.000053   0.000041   0.000042  0.0000122  0.0000090    0.000067    0.000064
+2010   8   9  55417   0.156184   0.457790  -0.0470509   0.0001382  -0.000051  -0.000001   0.000041   0.000043  0.0000087  0.0000090    0.000066    0.000064
+2010   8  10  55418   0.158482   0.456716  -0.0473484   0.0004451  -0.000028  -0.000046   0.000040   0.000043  0.0000016  0.0000089    0.000066    0.000063
+2010   8  11  55419   0.161130   0.455342  -0.0479526   0.0006765   0.000001   0.000007   0.000041   0.000043  0.0000077  0.0000091    0.000070    0.000064
+2010   8  12  55420   0.164099   0.454289  -0.0487082   0.0007462   0.000035   0.000081   0.000041   0.000044  0.0000112  0.0000095    0.000075    0.000065
+2010   8  13  55421   0.166609   0.452938  -0.0494342   0.0006678   0.000069   0.000156   0.000041   0.000045  0.0000021  0.0000092    0.000080    0.000066
+2010   8  14  55422   0.169005   0.451439  -0.0500413   0.0005246   0.000088   0.000181   0.000041   0.000044  0.0000080  0.0000089    0.000078    0.000068
+2010   8  15  55423   0.171390   0.449639  -0.0504516   0.0002868   0.000101   0.000189   0.000042   0.000045  0.0000122  0.0000093    0.000075    0.000069
+2010   8  16  55424   0.174497   0.447967  -0.0506159   0.0000504   0.000109   0.000186   0.000042   0.000044  0.0000086  0.0000084    0.000072    0.000070
+2010   8  17  55425   0.177723   0.447071  -0.0505325  -0.0001865   0.000111   0.000172   0.000042   0.000045  0.0000014  0.0000086    0.000069    0.000072
+2010   8  18  55426   0.180192   0.445942  -0.0502496  -0.0003428   0.000124   0.000137   0.000042   0.000047  0.0000091  0.0000096    0.000086    0.000075
+2010   8  19  55427   0.182554   0.444847  -0.0498584  -0.0003959   0.000132   0.000092   0.000042   0.000046  0.0000100  0.0000089    0.000105    0.000078
+2010   8  20  55428   0.184480   0.443034  -0.0494586  -0.0003668   0.000136   0.000042   0.000042   0.000046  0.0000028  0.0000084    0.000125    0.000082
+2010   8  21  55429   0.186797   0.441230  -0.0491341  -0.0002535   0.000123  -0.000002   0.000040   0.000044  0.0000102  0.0000085    0.000114    0.000077
+2010   8  22  55430   0.189132   0.439198  -0.0489380  -0.0001160   0.000107  -0.000043   0.000042   0.000046  0.0000147  0.0000091    0.000098    0.000071
+2010   8  23  55431   0.192067   0.437223  -0.0489113   0.0000484   0.000090  -0.000077   0.000044   0.000048  0.0000099  0.0000095    0.000082    0.000066
+2010   8  24  55432   0.194838   0.435772  -0.0490425   0.0001714   0.000074  -0.000104   0.000044   0.000049  0.0000016  0.0000097    0.000066    0.000060
+2010   8  25  55433   0.197377   0.434488  -0.0492760   0.0002790   0.000061  -0.000101   0.000044   0.000049  0.0000090  0.0000092    0.000078    0.000074
+2010   8  26  55434   0.199349   0.433260  -0.0496151   0.0003657   0.000055  -0.000087   0.000043   0.000048  0.0000100  0.0000094    0.000094    0.000091
+2010   8  27  55435   0.201118   0.431695  -0.0500062   0.0003893   0.000057  -0.000065   0.000044   0.000048  0.0000029  0.0000097    0.000109    0.000108
+2010   8  28  55436   0.202338   0.429962  -0.0503339   0.0003335   0.000071  -0.000057   0.000044   0.000048  0.0000082  0.0000096    0.000097    0.000097
+2010   8  29  55437   0.203377   0.428398  -0.0506125   0.0002374   0.000094  -0.000052   0.000045   0.000047  0.0000126  0.0000102    0.000076    0.000075
+2010   8  30  55438   0.204408   0.427159  -0.0508174   0.0001454   0.000125  -0.000044   0.000045   0.000048  0.0000085  0.0000102    0.000053    0.000054
+2010   8  31  55439   0.205651   0.425668  -0.0509049   0.0000401   0.000160  -0.000031   0.000045   0.000048  0.0000011  0.0000101    0.000031    0.000032
+2010   9   1  55440   0.206955   0.424607  -0.0508948  -0.0000422   0.000213  -0.000007   0.000044   0.000046  0.0000088  0.0000100    0.000071    0.000067
+2010   9   2  55441   0.207612   0.423031  -0.0508176  -0.0000929   0.000265   0.000019   0.000044   0.000047  0.0000100  0.0000099    0.000119    0.000108
+2010   9   3  55442   0.208791   0.421266  -0.0507263  -0.0000764   0.000307   0.000045   0.000045   0.000048  0.0000028  0.0000098    0.000166    0.000150
+2010   9   4  55443   0.210037   0.419366  -0.0507022   0.0000488   0.000324   0.000079   0.000045   0.000050  0.0000093  0.0000094    0.000159    0.000135
+2010   9   5  55444   0.211558   0.417763  -0.0508462   0.0002723   0.000322   0.000111   0.000045   0.000050  0.0000147  0.0000099    0.000142    0.000110
+2010   9   6  55445   0.212727   0.416241  -0.0512398   0.0005157   0.000306   0.000137   0.000047   0.000046  0.0000169  0.0000108    0.000125    0.000086
+2010   9   7  55446   0.214116   0.414408  -0.0519117   0.0007970   0.000276   0.000159   0.000047   0.000045  0.0000126  0.0000103    0.000108    0.000061
+2010   9   8  55447   0.215817   0.412621  -0.0528409   0.0010196   0.000234   0.000145   0.000047   0.000049  0.0000029  0.0000103    0.000109    0.000113
+2010   9   9  55448   0.217144   0.410820  -0.0539347   0.0010630   0.000166   0.000138   0.000047   0.000048  0.0000009  0.0000110    0.000075    0.000093
+2010   9  10  55449   0.218743   0.408731  -0.0549747   0.0009220   0.000094   0.000132   0.000047   0.000048  0.0000008  0.0000108    0.000031    0.000054
+2010   9  11  55450   0.220295   0.406567  -0.0557445   0.0006629   0.000036   0.000118   0.000048   0.000050  0.0000107  0.0000110    0.000026    0.000046
+2010   9  12  55451   0.221830   0.404381  -0.0562742   0.0004165  -0.000007   0.000101   0.000048   0.000048  0.0000134  0.0000106    0.000035    0.000048
+2010   9  13  55452   0.222777   0.402204  -0.0565320   0.0001252  -0.000037   0.000084   0.000046   0.000046  0.0000076  0.0000100    0.000044    0.000050
+2010   9  14  55453   0.223737   0.399851  -0.0565273  -0.0000867  -0.000054   0.000068   0.000045   0.000047  0.0000019  0.0000103    0.000052    0.000052
+2010   9  15  55454   0.224862   0.397004  -0.0564294  -0.0001517   0.000020   0.000141   0.000046   0.000049  0.0000062  0.0000104    0.000022    0.000022
+2010   9  16  55455   0.226622   0.394737  -0.0562980  -0.0001316   0.000131   0.000159   0.000046   0.000048  0.0000097  0.0000102    0.000030    0.000062
+2010   9  17  55456   0.228009   0.392870  -0.0561720  -0.0000726   0.000243   0.000149   0.000045   0.000047  0.0000032  0.0000102    0.000051    0.000126
+2010   9  18  55457   0.229354   0.391111  -0.0561567   0.0000573   0.000222   0.000117   0.000044   0.000048  0.0000101  0.0000102    0.000049    0.000122
+2010   9  19  55458   0.230610   0.389436  -0.0562887   0.0001826   0.000146   0.000073   0.000044   0.000045  0.0000145  0.0000098    0.000039    0.000093
+2010   9  20  55459   0.231523   0.387950  -0.0565558   0.0003095   0.000067   0.000028   0.000043   0.000043  0.0000096  0.0000095    0.000027    0.000065
+2010   9  21  55460   0.231996   0.386059  -0.0569152   0.0003860  -0.000010  -0.000015   0.000042   0.000045  0.0000018  0.0000097    0.000016    0.000036
+2010   9  22  55461   0.232370   0.384119  -0.0573153   0.0004217  -0.000005  -0.000002   0.000043   0.000046  0.0000129  0.0000098    0.000018    0.000043
+2010   9  23  55462   0.233106   0.381839  -0.0577741   0.0004806   0.000023   0.000021   0.000045   0.000045  0.0000179  0.0000096    0.000021    0.000056
+2010   9  24  55463   0.234233   0.380165  -0.0582763   0.0005074   0.000066   0.000047   0.000045   0.000045  0.0000032  0.0000087    0.000024    0.000069
+2010   9  25  55464   0.234711   0.378535  -0.0587281   0.0004663   0.000135   0.000021   0.000045   0.000045  0.0000088  0.0000085    0.000023    0.000067
+2010   9  26  55465   0.235200   0.376707  -0.0591462   0.0003924   0.000216  -0.000014   0.000045   0.000046  0.0000128  0.0000091    0.000022    0.000062
+2010   9  27  55466   0.235288   0.374886  -0.0594707   0.0002591   0.000298  -0.000044   0.000044   0.000047  0.0000088  0.0000093    0.000021    0.000058
+2010   9  28  55467   0.235341   0.372716  -0.0596557   0.0001386   0.000377  -0.000072   0.000045   0.000048  0.0000019  0.0000093    0.000020    0.000053
+2010   9  29  55468   0.235135   0.370386  -0.0597680   0.0000845   0.000408  -0.000042   0.000046   0.000049  0.0000068  0.0000091    0.000044    0.000059
+2010   9  30  55469   0.234786   0.368062  -0.0598920   0.0001357   0.000415   0.000006   0.000045   0.000047  0.0000150  0.0000096    0.000074    0.000066
+2010  10   1  55470   0.234246   0.365773  -0.0600893   0.0002400   0.000405   0.000053   0.000045   0.000047  0.0000213  0.0000097    0.000104    0.000074
+2010  10   2  55471   0.234063   0.363465  -0.0604302   0.0004630   0.000391   0.000053   0.000046   0.000050  0.0000171  0.0000102    0.000094    0.000071
+2010  10   3  55472   0.234016   0.360956  -0.0610840   0.0008301   0.000366   0.000032   0.000047   0.000050  0.0000135  0.0000108    0.000069    0.000064
+2010  10   4  55473   0.234024   0.358493  -0.0621062   0.0011838   0.000330   0.000012   0.000045   0.000049  0.0000098  0.0000107    0.000045    0.000058
+2010  10   5  55474   0.234204   0.356216  -0.0634704   0.0014808   0.000287  -0.000009   0.000045   0.000049  0.0000017  0.0000106    0.000019    0.000051
+2010  10   6  55475   0.234839   0.353756  -0.0650993   0.0016532   0.000231  -0.000015   0.000044   0.000048  0.0000134  0.0000106    0.000020    0.000055
+2010  10   7  55476   0.234980   0.351599  -0.0668114   0.0016703   0.000176  -0.000017   0.000044   0.000048  0.0000188  0.0000101    0.000025    0.000062
+2010  10   8  55477   0.234874   0.349070  -0.0684221   0.0015335   0.000126  -0.000015   0.000045   0.000048  0.0000046  0.0000100    0.000029    0.000068
+2010  10   9  55478   0.234457   0.346610  -0.0698321   0.0013040   0.000104   0.000016   0.000045   0.000048  0.0000073  0.0000101    0.000028    0.000064
+2010  10  10  55479   0.234164   0.344120  -0.0710272   0.0010749   0.000098   0.000057   0.000043   0.000046  0.0000084  0.0000099    0.000024    0.000055
+2010  10  11  55480   0.233964   0.341957  -0.0720036   0.0009084   0.000103   0.000096   0.000041   0.000045  0.0000138  0.0000102    0.000020    0.000046
+2010  10  12  55481   0.233786   0.339416  -0.0728214   0.0007989   0.000118   0.000129   0.000041   0.000047  0.0000146  0.0000108    0.000016    0.000038
+2010  10  13  55482   0.233883   0.337253  -0.0735901   0.0007578   0.000142   0.000156   0.000040   0.000044  0.0000029  0.0000106    0.000013    0.000029
+2010  10  14  55483   0.234122   0.335520  -0.0743862   0.0007895   0.000166   0.000023   0.000041   0.000044  0.0000006  0.0000102    0.000014    0.000015
+2010  10  15  55484   0.234342   0.333917  -0.0752251   0.0008858   0.000079  -0.000020   0.000043   0.000046  0.0000009  0.0000107    0.000032    0.000065
+2010  10  16  55485   0.234076   0.332454  -0.0760990   0.0009453   0.000101  -0.000013   0.000042   0.000045  0.0000054  0.0000106    0.000033    0.000073
+2010  10  17  55486   0.233539   0.330783  -0.0770797   0.0010245   0.000175   0.000000   0.000041   0.000044  0.0000080  0.0000100    0.000027    0.000058
+2010  10  18  55487   0.233246   0.328906  -0.0781683   0.0011280   0.000247   0.000016   0.000041   0.000045  0.0000055  0.0000097    0.000020    0.000044
+2010  10  19  55488   0.232903   0.326972  -0.0793432   0.0012355   0.000312   0.000036   0.000041   0.000045  0.0000014  0.0000088    0.000014    0.000029
+2010  10  20  55489   0.232474   0.324968  -0.0805992   0.0012498   0.000317   0.000039   0.000042   0.000047  0.0000083  0.0000092    0.000020    0.000051
+2010  10  21  55490   0.231849   0.323027  -0.0818382   0.0011813   0.000298   0.000040   0.000041   0.000046  0.0000133  0.0000099    0.000029    0.000083
+2010  10  22  55491   0.231372   0.320597  -0.0829554   0.0010882   0.000273   0.000040   0.000042   0.000045  0.0000049  0.0000091    0.000039    0.000114
+2010  10  23  55492   0.230630   0.318388  -0.0839225   0.0009438   0.000238   0.000049   0.000043   0.000047  0.0000094  0.0000086    0.000039    0.000112
+2010  10  24  55493   0.230112   0.316429  -0.0847870   0.0008044   0.000201   0.000061   0.000050   0.000053  0.0000164  0.0000109    0.000035    0.000095
+2010  10  25  55494   0.229017   0.314983  -0.0855244   0.0006664   0.000170   0.000071   0.000056   0.000059  0.0000132  0.0000133    0.000032    0.000078
+2010  10  26  55495   0.227483   0.312919  -0.0861212   0.0005770   0.000149   0.000081   0.000056   0.000060  0.0000015  0.0000130    0.000028    0.000061
+2010  10  27  55496   0.226329   0.310745  -0.0866614   0.0005376   0.000200   0.000064   0.000055   0.000060  0.0000125  0.0000123    0.000036    0.000076
+2010  10  28  55497   0.225432   0.308277  -0.0872115   0.0005690   0.000266   0.000046   0.000056   0.000057  0.0000145  0.0000128    0.000045    0.000093
+2010  10  29  55498   0.224665   0.306053  -0.0878459   0.0007096   0.000337   0.000029   0.000056   0.000057  0.0000054  0.0000129    0.000054    0.000110
+2010  10  30  55499   0.224146   0.303517  -0.0886511   0.0009475   0.000378   0.000040   0.000058   0.000060  0.0000069  0.0000126    0.000051    0.000104
+2010  10  31  55500   0.223352   0.301668  -0.0897345   0.0012198   0.000404   0.000061   0.000054   0.000058  0.0000104  0.0000125    0.000043    0.000090
+2010  11   1  55501   0.222599   0.299463  -0.0911107   0.0014780   0.000422   0.000082   0.000051   0.000056  0.0000139  0.0000116    0.000035    0.000075
+2010  11   2  55502   0.221524   0.297244  -0.0927210   0.0016794   0.000431   0.000101   0.000051   0.000051  0.0000132  0.0000115    0.000027    0.000061
+2010  11   3  55503   0.221000   0.294236  -0.0944569   0.0017646   0.000429   0.000117   0.000050   0.000050  0.0000016  0.0000111    0.000019    0.000046
+2010  11   4  55504   0.220666   0.291898  -0.0961571   0.0016431   0.000381   0.000112   0.000051   0.000053  0.0000007  0.0000111    0.000021    0.000048
+2010  11   5  55505   0.220476   0.289516  -0.0977127   0.0014366   0.000324   0.000098   0.000052   0.000053  0.0000008  0.0000119    0.000024    0.000052
+2010  11   6  55506   0.220257   0.287284  -0.0990644   0.0012300   0.000317   0.000082   0.000053   0.000054  0.0000060  0.0000121    0.000024    0.000053
+2010  11   7  55507   0.219535   0.285382  -0.1001451   0.0009719   0.000329   0.000062   0.000050   0.000052  0.0000085  0.0000115    0.000023    0.000053
+2010  11   8  55508   0.217665   0.283070  -0.1009900   0.0007620   0.000342   0.000039   0.000047   0.000050  0.0000059  0.0000107    0.000023    0.000052
+2010  11   9  55509   0.216263   0.280656  -0.1016732   0.0006230   0.000356   0.000015   0.000047   0.000049  0.0000017  0.0000108    0.000023    0.000052
+2010  11  10  55510   0.215000   0.278753  -0.1022543   0.0005785   0.000326  -0.000033   0.000047   0.000049  0.0000095  0.0000109    0.000025    0.000054
+2010  11  11  55511   0.213846   0.276852  -0.1028423   0.0006321   0.000287  -0.000081   0.000047   0.000050  0.0000110  0.0000101    0.000027    0.000056
+2010  11  12  55512   0.212739   0.275090  -0.1035271   0.0007532   0.000252  -0.000121   0.000047   0.000048  0.0000030  0.0000101    0.000030    0.000059
+2010  11  13  55513   0.212001   0.273500  -0.1043467   0.0009055   0.000250  -0.000113   0.000047   0.000049  0.0000072  0.0000107    0.000027    0.000053
+2010  11  14  55514   0.211006   0.272296  -0.1053250   0.0010336   0.000262  -0.000081   0.000049   0.000051  0.0000096  0.0000110    0.000022    0.000044
+2010  11  15  55515   0.210033   0.270614  -0.1064262   0.0011437   0.000277  -0.000044   0.000048   0.000049  0.0000059  0.0000105    0.000018    0.000035
+2010  11  16  55516   0.208873   0.268602  -0.1075900   0.0011851   0.000293  -0.000006   0.000047   0.000049  0.0000010  0.0000105    0.000013    0.000026
+2010  11  17  55517   0.208002   0.266045  -0.1087635   0.0011375   0.000318   0.000000   0.000047   0.000050  0.0000098  0.0000110    0.000011    0.000018
+2010  11  18  55518   0.207142   0.263503  -0.1098924   0.0010667   0.000342  -0.000009   0.000046   0.000050  0.0000111  0.0000106    0.000010    0.000010
+2010  11  19  55519   0.206475   0.260900  -0.1109050   0.0009321   0.000329  -0.000005   0.000046   0.000049  0.0000034  0.0000106    0.000023    0.000050
+2010  11  20  55520   0.205585   0.258358  -0.1117330   0.0007720   0.000301  -0.000004   0.000045   0.000047  0.0000072  0.0000105    0.000026    0.000062
+2010  11  21  55521   0.205156   0.256116  -0.1124050   0.0006179   0.000270  -0.000022   0.000045   0.000048  0.0000105  0.0000107    0.000024    0.000058
+2010  11  22  55522   0.204803   0.254194  -0.1129652   0.0005255   0.000239  -0.000055   0.000046   0.000050  0.0000073  0.0000112    0.000022    0.000054
+2010  11  23  55523   0.204244   0.252294  -0.1134560   0.0004861   0.000209  -0.000095   0.000046   0.000049  0.0000018  0.0000110    0.000020    0.000050
+2010  11  24  55524   0.202828   0.250678  -0.1139461   0.0005054   0.000245  -0.000299   0.000045   0.000048  0.0000104  0.0000111    0.000053    0.000044
+2010  11  25  55525   0.201243   0.248737  -0.1145016   0.0006277   0.000278  -0.000492   0.000045   0.000048  0.0000179  0.0000111    0.001548    0.000963
+2010  11  26  55526   0.199938   0.246974  -0.1152128   0.0008123   0.000296  -0.000607   0.000046   0.000050  0.0000150  0.0000110    0.003006    0.001869
+2010  11  27  55527   0.198781   0.245548  -0.1161367   0.0010471   0.000275  -0.000551   0.000047   0.000051  0.0000103  0.0000110    0.002295    0.001434
+2010  11  28  55528   0.197273   0.244395  -0.1173209   0.0012872   0.000259  -0.000461   0.000050   0.000055  0.0000080  0.0000107    0.001584    0.000998
+2010  11  29  55529   0.195833   0.242774  -0.1186708   0.0013707   0.000248  -0.000342   0.000051   0.000056  0.0000058  0.0000108    0.000873    0.000563
+2010  11  30  55530   0.194732   0.241084  -0.1200603   0.0013660   0.000241  -0.000205   0.000050   0.000053  0.0000015  0.0000111    0.000162    0.000127
+2010  12   1  55531   0.193555   0.239689  -0.1214417   0.0012927   0.000305  -0.000069   0.000048   0.000051  0.0000115  0.0000108    0.000020    0.000050
+2010  12   2  55532   0.192131   0.238425  -0.1226821   0.0011207   0.000385   0.000054   0.000049   0.000053  0.0000176  0.0000109    0.000028    0.000066
+2010  12   3  55533   0.191007   0.236894  -0.1236694   0.0008973   0.000461   0.000155   0.000050   0.000056  0.0000045  0.0000113    0.000035    0.000083
+2010  12   4  55534   0.190021   0.235420  -0.1244059   0.0006332   0.000454   0.000158   0.000051   0.000055  0.0000054  0.0000114    0.000033    0.000075
+2010  12   5  55535   0.188308   0.234024  -0.1249405   0.0004592   0.000412   0.000104   0.000051   0.000055  0.0000085  0.0000110    0.000026    0.000059
+2010  12   6  55536   0.186406   0.232393  -0.1253669   0.0004128   0.000365   0.000025   0.000049   0.000053  0.0000060  0.0000109    0.000019    0.000043
+2010  12   7  55537   0.184913   0.230861  -0.1257788   0.0004489   0.000315  -0.000071   0.000048   0.000051  0.0000013  0.0000103    0.000013    0.000027
+2010  12   8  55538   0.183783   0.229501  -0.1262382   0.0005104   0.000287  -0.000134   0.000048   0.000051  0.0000067  0.0000101    0.000010    0.000011
+2010  12   9  55539   0.183045   0.228407  -0.1268013   0.0006240   0.000330  -0.000204   0.000049   0.000050  0.0000109  0.0000108    0.000015    0.000027
+2010  12  10  55540   0.181802   0.227737  -0.1274716   0.0006903   0.000394  -0.000267   0.000049   0.000051  0.0000028  0.0000112    0.000022    0.000053
+2010  12  11  55541   0.179880   0.226787  -0.1281778   0.0007133   0.000399  -0.000263   0.000049   0.000052  0.0000075  0.0000114    0.000022    0.000056
+2010  12  12  55542   0.177757   0.225752  -0.1288967   0.0007287   0.000381  -0.000223   0.000048   0.000049  0.0000087  0.0000113    0.000020    0.000050
+2010  12  13  55543   0.175140   0.225140  -0.1296359   0.0007241   0.000360  -0.000170   0.000047   0.000050  0.0000050  0.0000112    0.000017    0.000044
+2010  12  14  55544   0.171858   0.223981  -0.1303511   0.0006843   0.000337  -0.000111   0.000048   0.000051  0.0000012  0.0000111    0.000015    0.000038
+2010  12  15  55545   0.168408   0.222455  -0.1309761   0.0005823   0.000290  -0.000062   0.000047   0.000051  0.0000073  0.0000109    0.000118    0.000080
+2010  12  16  55546   0.166006   0.220789  -0.1315322   0.0005209   0.000257  -0.000042   0.000048   0.000052  0.0000114  0.0000110    0.000101    0.000083
+2010  12  17  55547   0.164906   0.219736  -0.1320332   0.0004508   0.000232  -0.000039   0.000049   0.000055  0.0000031  0.0000114    0.000038    0.000070
+2010  12  18  55548   0.164103   0.218821  -0.1324155   0.0003275   0.000239  -0.000066   0.000051   0.000056  0.0000100  0.0000116    0.000019    0.000059
+2010  12  19  55549   0.163200   0.217756  -0.1326793   0.0002047   0.000260  -0.000112   0.000054   0.000057  0.0000145  0.0000111    0.000017    0.000049
+2010  12  20  55550   0.161409   0.216705  -0.1328209   0.0001020   0.000283  -0.000166   0.000054   0.000059  0.0000088  0.0000111    0.000015    0.000038
+2010  12  21  55551   0.159204   0.215481  -0.1329024   0.0001007   0.000305  -0.000221   0.000053   0.000057  0.0000017  0.0000119    0.000012    0.000028
+2010  12  22  55552   0.157025   0.214415  -0.1330783   0.0002613   0.000279  -0.000245   0.000054   0.000057  0.0000004  0.0000125    0.000021    0.000044
+2010  12  23  55553   0.154838   0.213230  -0.1334320   0.0004661   0.000238  -0.000255   0.000054   0.000058  0.0000005  0.0000120    0.000031    0.000067
+2010  12  24  55554   0.153143   0.212299  -0.1339861   0.0006686   0.000227  -0.000256   0.000053   0.000057  0.0000099  0.0000114    0.000033    0.000073
+2010  12  25  55555   0.151470   0.211557  -0.1347324   0.0008440   0.000226  -0.000247   0.000054   0.000058  0.0000177  0.0000121    0.000031    0.000072
+2010  12  26  55556   0.149598   0.210603  -0.1357018   0.0010719   0.000224  -0.000228   0.000056   0.000063  0.0000140  0.0000143    0.000030    0.000072
+2010  12  27  55557   0.147329   0.209353  -0.1368307   0.0011511   0.000221  -0.000200   0.000052   0.000070  0.0000070  0.0000155    0.000029    0.000072
+2010  12  28  55558   0.144572   0.207791  -0.1379451   0.0010534   0.000217  -0.000168   0.000056   0.000072  0.0000017  0.0000150    0.000027    0.000071
+2010  12  29  55559   0.141007   0.206567  -0.1389107   0.0008467   0.000184  -0.000110   0.000067   0.000071  0.0000007  0.0000153    0.000029    0.000072
+2010  12  30  55560   0.137314   0.205262  -0.1396578   0.0006531   0.000144  -0.000051   0.000066   0.000071  0.0000008  0.0000146    0.000031    0.000074
+2010  12  31  55561   0.134060   0.204158  -0.1401867   0.0004628   0.000143  -0.000040   0.000068   0.000068  0.0000029  0.0000129    0.000029    0.000068
+2011   1   1  55562   0.130780   0.203060  -0.1405590   0.0003001   0.000313  -0.000047   0.000144   0.000141  0.0000129  0.0000218    0.000006    0.000020
+2011   1   2  55563   0.127352   0.202170  -0.1408005   0.0002060   0.000343  -0.000074   0.000139   0.000144  0.0000013  0.0000209    0.000000    0.000002
+2011   1   3  55564   0.124663   0.201341  -0.1409736   0.0001672   0.000299  -0.000119   0.000123   0.000130  0.0000015  0.0000251    0.000007    0.000016
+2011   1   4  55565   0.121413   0.200758  -0.1411296   0.0001977   0.000239  -0.000159   0.000121   0.000134  0.0000004  0.0000279    0.000014    0.000033
+2011   1   5  55566   0.117765   0.200098  -0.1413483   0.0002535   0.000210  -0.000224   0.000125   0.000137  0.0000017  0.0000294    0.000043    0.000058
+2011   1   6  55567   0.113935   0.199864  -0.1416403   0.0003698   0.000215  -0.000261   0.000135   0.000292  0.0000160  0.0000295    0.000090    0.000121
+2011   1   7  55568   0.109984   0.199410  -0.1420670   0.0004851   0.000186  -0.000258   0.000131   0.000145  0.0000054  0.0000277    0.000076    0.000100
+2011   1   8  55569   0.106068   0.198759  -0.1425991   0.0005498   0.000189  -0.000238   0.000136   0.000146  0.0000029  0.0000225    0.000066    0.000086
+2011   1   9  55570   0.102803   0.197486  -0.1431333   0.0005877  -0.000240  -0.000303   0.000145   0.000142  0.0000010  0.0000222    0.000015    0.000019
+2011   1  10  55571   0.101064   0.196439  -0.1437230   0.0005867  -0.000116  -0.000267   0.000146   0.000137  0.0000011  0.0000272    0.000006    0.000009
+2011   1  11  55572   0.099677   0.196083  -0.1443239   0.0005863   0.000148  -0.000208   0.000145   0.000139  0.0000006  0.0000282    0.000028    0.000037
+2011   1  12  55573   0.098924   0.195678  -0.1449071   0.0005596   0.000353  -0.000165   0.000145   0.000138  0.0000178  0.0000300    0.000049    0.000064
+2011   1  13  55574   0.097784   0.195955  -0.1454671   0.0005228   0.000817  -0.000126   0.000157   0.000150  0.0000246  0.0000335    0.000054    0.000130
+2011   1  14  55575   0.095478   0.196087  -0.1459359   0.0004222   0.000713  -0.000119   0.000156   0.000150  0.0000014  0.0000338    0.000087    0.000124
+2011   1  15  55576   0.092346   0.195875  -0.1463947   0.0003470   0.000510  -0.000133   0.000157   0.000142  0.0000269  0.0000258    0.000121    0.000121
+2011   1  16  55577   0.088836   0.195929  -0.1466375   0.0002847   0.000271   0.000352   0.000151   0.000135  0.0000013  0.0000213    0.000535    0.000227
+2011   1  17  55578   0.085077   0.195548  -0.1468916   0.0002530   0.000164   0.000146   0.000140   0.000137  0.0000013  0.0000250    0.000382    0.000170
+2011   1  18  55579   0.081199   0.195268  -0.1471788   0.0003525   0.000115  -0.000129   0.000137   0.000139  0.0000125  0.0000249    0.000223    0.000111
+2011   1  19  55580   0.077814   0.194802  -0.1475593   0.0004249   0.000059  -0.000418   0.000136   0.000138  0.0000037  0.0000269    0.000023    0.000037
+2011   1  20  55581   0.074547   0.194696  -0.1480420   0.0006156   0.000135  -0.000341   0.000150   0.000151  0.0000081  0.0000308    0.000037    0.000045
+2011   1  21  55582   0.071277   0.194666  -0.1487934   0.0008446   0.000227  -0.000272   0.000146   0.000146  0.0000051  0.0000310    0.000057    0.000056
+2011   1  22  55583   0.067767   0.194591  -0.1497052   0.0010434   0.000205  -0.000239   0.000146   0.000143  0.0000017  0.0000259    0.000051    0.000053
+2011   1  23  55584   0.064823   0.194616  -0.1508298   0.0010992   0.000045  -0.000145   0.000137   0.000133  0.0000009  0.0000226    0.000016    0.000015
+2011   1  24  55585   0.060700   0.194896  -0.1519858   0.0011153   0.000063  -0.000145   0.000382   0.000118  0.0000151  0.0000273    0.000023    0.000027
+2011   1  25  55586   0.058225   0.195809  -0.1530855   0.0009803   0.000133  -0.000185   0.000252   0.000116  0.0000050  0.0000284    0.000031    0.000040
+2011   1  26  55587   0.055061   0.196351  -0.1540053   0.0008141   0.000190  -0.000227   0.000123   0.000117  0.0000076  0.0000276    0.000039    0.000053
+2011   1  27  55588   0.052221   0.197284  -0.1547069   0.0005623   0.000266  -0.000160   0.000133   0.000136  0.0000014  0.0000313    0.000064    0.000095
+2011   1  28  55589   0.049422   0.198105  -0.1552193   0.0003172   0.000264  -0.000231   0.000133   0.000136  0.0000059  0.0000293    0.000058    0.000084
+2011   1  29  55590   0.047540   0.198580  -0.1555719   0.0003250   0.000238  -0.000294   0.000140   0.000131  0.0000176  0.0000225    0.000052    0.000073
+2011   1  30  55591   0.046065   0.199346  -0.1558688   0.0002940   0.000213  -0.000335   0.000135   0.000125  0.0000116  0.0000224    0.000045    0.000062
+2011   1  31  55592   0.045103   0.199784  -0.1561855   0.0003321   0.000191  -0.000356   0.000123   0.000126  0.0000135  0.0000257    0.000039    0.000051
+2011   2   1  55593   0.044436   0.200675  -0.1565698   0.0004055   0.000174  -0.000361   0.000121   0.000119  0.0000047  0.0000265    0.000032    0.000039
+2011   2   2  55594   0.043649   0.201453  -0.1570371   0.0005670   0.000057  -0.000130   0.000121   0.000121  0.0000157  0.0000275    0.000070    0.000040
+2011   2   3  55595   0.042813   0.202275  -0.1576789   0.0006853   0.000005  -0.000002   0.000121   0.000130  0.0000137  0.0000279    0.000166    0.000267
+2011   2   4  55596   0.041536   0.202581  -0.1584075   0.0007822   0.000052  -0.000060   0.000119   0.000128  0.0000048  0.0000284    0.000089    0.000144
+2011   2   5  55597   0.040230   0.202910  -0.1592646   0.0008051   0.000087  -0.000068   0.000119   0.000127  0.0000114  0.0000243    0.000049    0.000070
+2011   2   6  55598   0.039049   0.203388  -0.1599922   0.0007784   0.000115  -0.000053   0.000117   0.000119  0.0000115  0.0000222    0.000046    0.000066
+2011   2   7  55599   0.038221   0.204330  -0.1607544   0.0007339   0.000148  -0.000058   0.000114   0.000115  0.0000133  0.0000254    0.000043    0.000062
+2011   2   8  55600   0.037485   0.205738  -0.1614656   0.0006664   0.000182  -0.000081   0.000111   0.000115  0.0000046  0.0000265    0.000040    0.000058
+2011   2   9  55601   0.036206   0.207276  -0.1620482   0.0005868   0.000203  -0.000128   0.000106   0.000110  0.0000133  0.0000266    0.000132    0.000083
+2011   2  10  55602   0.034269   0.208614  -0.1626196   0.0005121   0.000204  -0.000190   0.000106   0.000109  0.0000103  0.0000265    0.000532    0.000388
+2011   2  11  55603   0.032119   0.209566  -0.1630886   0.0004233   0.000188  -0.000257   0.000110   0.000114  0.0000046  0.0000274    0.000234    0.000210
+2011   2  12  55604   0.030689   0.210486  -0.1634603   0.0003795   0.000195  -0.000335   0.000113   0.000115  0.0000240  0.0000239    0.000076    0.000102
+2011   2  13  55605   0.029403   0.211574  -0.1638137   0.0003605   0.000209  -0.000411   0.000116   0.000122  0.0000139  0.0000229    0.000064    0.000088
+2011   2  14  55606   0.027761   0.212381  -0.1641831   0.0004157   0.000215  -0.000474   0.000119   0.000128  0.0000148  0.0000271    0.000053    0.000074
+2011   2  15  55607   0.026137   0.213128  -0.1646698   0.0005830   0.000214  -0.000522   0.000122   0.000123  0.0000047  0.0000287    0.000042    0.000059
+2011   2  16  55608   0.024915   0.214465  -0.1653758   0.0008704   0.000189  -0.000531   0.000124   0.000104  0.0000153  0.0000300    0.000042    0.000064
+2011   2  17  55609   0.023426   0.216252  -0.1663731   0.0011596   0.000154  -0.000517   0.000123   0.000106  0.0000121  0.0000287    0.000044    0.000074
+2011   2  18  55610   0.021780   0.217873  -0.1676468   0.0013994   0.000117  -0.000489   0.000123   0.000124  0.0000052  0.0000287    0.000046    0.000083
+2011   2  19  55611   0.020056   0.218880  -0.1691641   0.0015993   0.000085  -0.000439   0.000125   0.000126  0.0000193  0.0000258    0.000044    0.000078
+2011   2  20  55612   0.018540   0.220039  -0.1707634   0.0016580   0.000057  -0.000382   0.000128   0.000132  0.0000130  0.0000246    0.000041    0.000068
+2011   2  21  55613   0.016811   0.220720  -0.1723944   0.0015231   0.000034  -0.000328   0.000128   0.000133  0.0000158  0.0000280    0.000038    0.000057
+2011   2  22  55614   0.015213   0.221285  -0.1738294   0.0012933   0.000017  -0.000279   0.000125   0.000087  0.0000057  0.0000280    0.000035    0.000047
+2011   2  23  55615   0.013800   0.221985  -0.1750012   0.0010086   0.000004  -0.000220   0.000127   0.000085  0.0000152  0.0000293    0.000027    0.000020
+2011   2  24  55616   0.012264   0.222922  -0.1758420   0.0007092  -0.000011  -0.000317   0.000127   0.000126  0.0000157  0.0000306    0.000030    0.000013
+2011   2  25  55617   0.010174   0.223972  -0.1764703   0.0005428  -0.000049  -0.000415   0.000126   0.000128  0.0000052  0.0000305    0.000050    0.000060
+2011   2  26  55618   0.007618   0.224746  -0.1769626   0.0004502  -0.000011  -0.000426   0.000130   0.000132  0.0000334  0.0000255    0.000055    0.000073
+2011   2  27  55619   0.004972   0.225677  -0.1773799   0.0004291   0.000057  -0.000407   0.000125   0.000127  0.0000123  0.0000231    0.000054    0.000070
+2011   2  28  55620   0.002596   0.226932  -0.1778458   0.0005176   0.000124  -0.000383   0.000116   0.000118  0.0000137  0.0000264    0.000052    0.000066
+2011   3   1  55621   0.000849   0.228229  -0.1784542   0.0006837   0.000186  -0.000357   0.000114   0.000115  0.0000048  0.0000272    0.000050    0.000062
+2011   3   2  55622  -0.000719   0.229390  -0.1791927   0.0008052   0.000134  -0.000300   0.000113   0.000114  0.0000142  0.0000275    0.000063    0.000076
+2011   3   3  55623  -0.001804   0.230504  -0.1800832   0.0009735   0.000051  -0.000239   0.000112   0.000115  0.0000125  0.0000280    0.000080    0.000096
+2011   3   4  55624  -0.002634   0.231982  -0.1811519   0.0011134  -0.000032  -0.000185   0.000114   0.000114  0.0000050  0.0000283    0.000097    0.000115
+2011   3   5  55625  -0.003062   0.233502  -0.1823339   0.0012007  -0.000034  -0.000209   0.000114   0.000114  0.0000438  0.0000239    0.000088    0.000105
+2011   3   6  55626  -0.003432   0.235531  -0.1835158   0.0011817  -0.000003  -0.000267   0.000116   0.000117  0.0000124  0.0000223    0.000069    0.000083
+2011   3   7  55627  -0.004495   0.237507  -0.1846894   0.0010801   0.000032  -0.000329   0.000117   0.000120  0.0000151  0.0000261    0.000050    0.000062
+2011   3   8  55628  -0.005808   0.238965  -0.1857505   0.0009939   0.000068  -0.000389   0.000116   0.000121  0.0000051  0.0000257    0.000031    0.000041
+2011   3   9  55629  -0.006946   0.240519  -0.1867278   0.0009051   0.000113  -0.000410   0.000117   0.000120  0.0000185  0.0000254    0.000045    0.000048
+2011   3  10  55630  -0.007854   0.242336  -0.1876086   0.0008218   0.000153  -0.000412   0.000119   0.000123  0.0000121  0.0000274    0.000067    0.000063
+2011   3  11  55631  -0.008868   0.244260  -0.1884053   0.0007477   0.000184  -0.000403   0.000119   0.000119  0.0000051  0.0000289    0.000089    0.000078
+2011   3  12  55632  -0.010372   0.246245  -0.1891228   0.0006379   0.000129  -0.000359   0.000119   0.000119  0.0000130  0.0000248    0.000096    0.000087
+2011   3  13  55633  -0.011723   0.247995  -0.1897033   0.0005735   0.000038  -0.000299   0.000114   0.000117  0.0000110  0.0000222    0.000098    0.000095
+2011   3  14  55634  -0.013539   0.249713  -0.1903008   0.0006398  -0.000054  -0.000241   0.000107   0.000109  0.0000113  0.0000229    0.000100    0.000104
+2011   3  15  55635  -0.015244   0.250602  -0.1910293   0.0008489  -0.000143  -0.000188   0.000107   0.000106  0.0000115  0.0000239    0.000101    0.000112
+2011   3  16  55636  -0.016841   0.251710  -0.1919961   0.0010872  -0.000223  -0.000146   0.000109   0.000108  0.0000045  0.0000266    0.000103    0.000120
+2011   3  17  55637  -0.018318   0.253073  -0.1932309   0.0013543  -0.000141  -0.000190   0.000109   0.000107  0.0000206  0.0000267    0.000089    0.000109
+2011   3  18  55638  -0.019584   0.254456  -0.1946490   0.0015284  -0.000009  -0.000265   0.000107   0.000104  0.0000055  0.0000264    0.000070    0.000094
+2011   3  19  55639  -0.020632   0.256005  -0.1962163   0.0016169   0.000015  -0.000307   0.000107   0.000107  0.0000180  0.0000227    0.000064    0.000087
+2011   3  20  55640  -0.021711   0.257728  -0.1978506   0.0015894   0.000000  -0.000337   0.000109   0.000111  0.0000131  0.0000220    0.000062    0.000084
+2011   3  21  55641  -0.022765   0.259764  -0.1993866   0.0014600  -0.000013  -0.000362   0.000110   0.000111  0.0000131  0.0000250    0.000060    0.000080
+2011   3  22  55642  -0.024491   0.261832  -0.2007339   0.0012211  -0.000028  -0.000382   0.000110   0.000109  0.0000044  0.0000255    0.000059    0.000077
+2011   3  23  55643  -0.025721   0.263444  -0.2018290   0.0009585  -0.000067  -0.000363   0.000110   0.000111  0.0000205  0.0000254    0.000202    0.000228
+2011   3  24  55644  -0.026882   0.265329  -0.2027557   0.0008172  -0.000077  -0.000330   0.000108   0.000106  0.0000155  0.0000255    0.000500    0.000244
+2011   3  25  55645  -0.027215   0.267034  -0.2035687   0.0008378  -0.000042  -0.000292   0.000107   0.000106  0.0000052  0.0000265    0.000197    0.000113
+2011   3  26  55646  -0.027499   0.268987  -0.2044373   0.0008691  -0.000006  -0.000269   0.000107   0.000107  0.0000166  0.0000223    0.000058    0.000068
+2011   3  27  55647  -0.028466   0.270774  -0.2053410   0.0009447   0.000021  -0.000250   0.000108   0.000106  0.0000132  0.0000209    0.000057    0.000067
+2011   3  28  55648  -0.029378   0.272664  -0.2063703   0.0010944   0.000044  -0.000230   0.000108   0.000109  0.0000132  0.0000247    0.000056    0.000065
+2011   3  29  55649  -0.030329   0.274325  -0.2075344   0.0012436   0.000060  -0.000212   0.000107   0.000107  0.0000041  0.0000257    0.000055    0.000064
+2011   3  30  55650  -0.030949   0.275765  -0.2088540   0.0013641  -0.000030  -0.000229   0.000107   0.000109  0.0000214  0.0000258    0.000033    0.000024
+2011   3  31  55651  -0.031758   0.277492  -0.2102391   0.0014329  -0.000064  -0.000187   0.000109   0.000110  0.0000140  0.0000265    0.000041    0.000036
+2011   4   1  55652  -0.033083   0.279070  -0.2117114   0.0014790  -0.000070  -0.000134   0.000108   0.000111  0.0000049  0.0000267    0.000059    0.000065
+2011   4   2  55653  -0.034720   0.280652  -0.2131919   0.0014909  -0.000091  -0.000132   0.000108   0.000113  0.0000117  0.0000227    0.000060    0.000063
+2011   4   3  55654  -0.036213   0.281938  -0.2146784   0.0014369  -0.000111  -0.000157   0.000100   0.000106  0.0000135  0.0000215    0.000056    0.000050
+2011   4   4  55655  -0.037479   0.283617  -0.2160500   0.0013019  -0.000122  -0.000191   0.000091   0.000098  0.0000156  0.0000239    0.000053    0.000037
+2011   4   5  55656  -0.039369   0.285435  -0.2172563   0.0011320  -0.000126  -0.000231   0.000093   0.000100  0.0000183  0.0000252    0.000048    0.000023
+2011   4   6  55657  -0.041399   0.287004  -0.2183240   0.0009752  -0.000058  -0.000301   0.000097   0.000102  0.0000188  0.0000262    0.000032    0.000014
+2011   4   7  55658  -0.042423   0.288704  -0.2192422   0.0008173   0.000006  -0.000355   0.000097   0.000101  0.0000185  0.0000263    0.000051    0.000047
+2011   4   8  55659  -0.042939   0.290931  -0.2199830   0.0007270   0.000059  -0.000394   0.000094   0.000101  0.0000043  0.0000261    0.000082    0.000091
+2011   4   9  55660  -0.043389   0.293415  -0.2207433   0.0007569   0.000068  -0.000401   0.000097   0.000100  0.0000216  0.0000224    0.000082    0.000095
+2011   4  10  55661  -0.043308   0.295695  -0.2214928   0.0008207   0.000051  -0.000387   0.000096   0.000098  0.0000130  0.0000208    0.000070    0.000084
+2011   4  11  55662  -0.043620   0.297675  -0.2223469   0.0009105   0.000022  -0.000360   0.000092   0.000097  0.0000115  0.0000231    0.000058    0.000073
+2011   4  12  55663  -0.043919   0.299584  -0.2233100   0.0010863  -0.000018  -0.000323   0.000094   0.000099  0.0000035  0.0000239    0.000046    0.000063
+2011   4  13  55664  -0.044062   0.301844  -0.2244795   0.0012662  -0.000117  -0.000291   0.000092   0.000098  0.0000204  0.0000239    0.000040    0.000044
+2011   4  14  55665  -0.044180   0.304194  -0.2258048   0.0014164  -0.000230  -0.000262   0.000088   0.000094  0.0000124  0.0000233    0.000035    0.000023
+2011   4  15  55666  -0.044083   0.306683  -0.2273032   0.0015810  -0.000254  -0.000200   0.000090   0.000096  0.0000044  0.0000233    0.000058    0.000071
+2011   4  16  55667  -0.043869   0.309390  -0.2289176   0.0016684  -0.000241  -0.000172   0.000092   0.000096  0.0000190  0.0000206    0.000063    0.000084
+2011   4  17  55668  -0.044070   0.311932  -0.2305894   0.0016129  -0.000217  -0.000170   0.000057   0.000059  0.0000059  0.0000119    0.000057    0.000075
+2011   4  18  55669  -0.044240   0.314342  -0.2321225   0.0014380  -0.000184  -0.000182   0.000022   0.000024  0.0000031  0.0000060    0.000052    0.000066
+2011   4  19  55670  -0.044562   0.316350  -0.2334574   0.0012217  -0.000143  -0.000205   0.000022   0.000024  0.0000022  0.0000062    0.000047    0.000057
+2011   4  20  55671  -0.044636   0.318394  -0.2345634   0.0009749  -0.000155  -0.000217   0.000022   0.000024  0.0000014  0.0000062    0.000073    0.000081
+2011   4  21  55672  -0.044958   0.320435  -0.2354477   0.0007911  -0.000156  -0.000256   0.000022   0.000024  0.0000018  0.0000062    0.000080    0.000089
+2011   4  22  55673  -0.045062   0.322209  -0.2361869   0.0007037  -0.000149  -0.000306   0.000022   0.000024  0.0000039  0.0000062    0.000077    0.000088
+2011   4  23  55674  -0.045243   0.323933  -0.2368997   0.0007210  -0.000143  -0.000349   0.000022   0.000024  0.0000045  0.0000061    0.000074    0.000088
+2011   4  24  55675  -0.045844   0.325797  -0.2376781   0.0008317  -0.000139  -0.000380   0.000022   0.000024  0.0000031  0.0000059    0.000071    0.000087
+2011   4  25  55676  -0.046184   0.327511  -0.2385535   0.0009187  -0.000138  -0.000396   0.000022   0.000022  0.0000027  0.0000058    0.000068    0.000086
+2011   4  26  55677  -0.046002   0.329180  -0.2395074   0.0010004  -0.000140  -0.000395   0.000022   0.000020  0.0000022  0.0000058    0.000065    0.000085
+2011   4  27  55678  -0.045781   0.331332  -0.2405596   0.0010769  -0.000145  -0.000379   0.000022   0.000020  0.0000014  0.0000058    0.000062    0.000085
+2011   4  28  55679  -0.045320   0.333581  -0.2416176   0.0011120  -0.000149  -0.000246   0.000022   0.000022  0.0000130  0.0000060    0.000071    0.000094
+2011   4  29  55680  -0.045127   0.336151  -0.2427746   0.0011374  -0.000156  -0.000079   0.000022   0.000024  0.0000016  0.0000062    0.000083    0.000106
+2011   4  30  55681  -0.044682   0.338518  -0.2438692   0.0010795  -0.000147  -0.000041   0.000022   0.000024  0.0000226  0.0000061    0.000079    0.000101
+2011   5   1  55682  -0.044021   0.341134  -0.2449135   0.0009989  -0.000136  -0.000057   0.000022   0.000024  0.0000027  0.0000061    0.000070    0.000090
+2011   5   2  55683  -0.043223   0.344033  -0.2458811   0.0009553  -0.000132  -0.000082   0.000020   0.000022  0.0000027  0.0000060    0.000061    0.000078
+2011   5   3  55684  -0.042670   0.346724  -0.2468522   0.0009179  -0.000133  -0.000118   0.000019   0.000020  0.0000018  0.0000058    0.000052    0.000067
+2011   5   4  55685  -0.042430   0.349103  -0.2476853   0.0008825  -0.000340  -0.000066   0.000019   0.000020  0.0000122  0.0000058    0.000068    0.000044
+2011   5   5  55686  -0.041887   0.351228  -0.2485910   0.0008160  -0.000412  -0.000027   0.000019   0.000020  0.0000042  0.0000058    0.000142    0.000146
+2011   5   6  55687  -0.041664   0.353483  -0.2494025   0.0007895  -0.000421  -0.000004   0.000019   0.000020  0.0000032  0.0000056    0.000232    0.000286
+2011   5   7  55688  -0.041474   0.355308  -0.2502068   0.0008451  -0.000398  -0.000017   0.000019   0.000020  0.0000162  0.0000055    0.000219    0.000279
+2011   5   8  55689  -0.041731   0.357342  -0.2510832   0.0009153  -0.000358  -0.000044   0.000020   0.000022  0.0000022  0.0000059    0.000168    0.000217
+2011   5   9  55690  -0.041753   0.358940  -0.2521129   0.0011320  -0.000311  -0.000074   0.000022   0.000022  0.0000022  0.0000062    0.000117    0.000155
+2011   5  10  55691  -0.041194   0.360775  -0.2533249   0.0013621  -0.000262  -0.000104   0.000022   0.000020  0.0000019  0.0000062    0.000066    0.000094
+2011   5  11  55692  -0.039836   0.362864  -0.2548237   0.0015346  -0.000298  -0.000133   0.000020   0.000020  0.0000191  0.0000060    0.000055    0.000076
+2011   5  12  55693  -0.038488   0.365452  -0.2564082   0.0017001  -0.000355  -0.000157   0.000019   0.000020  0.0000022  0.0000058    0.000054    0.000070
+2011   5  13  55694  -0.036560   0.368175  -0.2581659   0.0018043  -0.000410  -0.000173   0.000020   0.000020  0.0000014  0.0000060    0.000053    0.000064
+2011   5  14  55695  -0.034785   0.371189  -0.2599846   0.0018232  -0.000393  -0.000155   0.000022   0.000020  0.0000022  0.0000061    0.000055    0.000070
+2011   5  15  55696  -0.033370   0.374018  -0.2617832   0.0017442  -0.000346  -0.000119   0.000020   0.000020  0.0000031  0.0000059    0.000058    0.000080
+2011   5  16  55697  -0.032609   0.376432  -0.2634219   0.0015323  -0.000295  -0.000081   0.000019   0.000020  0.0000031  0.0000056    0.000062    0.000091
+2011   5  17  55698  -0.031902   0.377941  -0.2648388   0.0012892  -0.000242  -0.000043   0.000019   0.000020  0.0000022  0.0000056    0.000066    0.000101
+2011   5  18  55699  -0.031294   0.380008  -0.2659941   0.0010607  -0.000221  -0.000035   0.000019   0.000020  0.0000098  0.0000056    0.000062    0.000092
+2011   5  19  55700  -0.030682   0.381597  -0.2669714   0.0008851  -0.000209  -0.000039   0.000019   0.000020  0.0000042  0.0000054    0.000056    0.000077
+2011   5  20  55701  -0.029859   0.383254  -0.2677925   0.0007776  -0.000197  -0.000052   0.000019   0.000020  0.0000015  0.0000054    0.000050    0.000062
+2011   5  21  55702  -0.028955   0.384760  -0.2685662   0.0007794  -0.000181  -0.000073   0.000019   0.000020  0.0000023  0.0000053    0.000053    0.000064
+2011   5  22  55703  -0.028093   0.386195  -0.2693607   0.0008255  -0.000163  -0.000099   0.000019   0.000020  0.0000031  0.0000053    0.000059    0.000072
+2011   5  23  55704  -0.026753   0.387690  -0.2702027   0.0008670  -0.000146  -0.000129   0.000019   0.000020  0.0000026  0.0000052    0.000066    0.000080
+2011   5  24  55705  -0.025454   0.389209  -0.2710964   0.0009167  -0.000129  -0.000159   0.000019   0.000020  0.0000048  0.0000050    0.000072    0.000087
+2011   5  25  55706  -0.023642   0.390864  -0.2719881   0.0008934  -0.000093  -0.000126   0.000019   0.000020  0.0000114  0.0000050    0.000679    0.000099
+2011   5  26  55707  -0.021999   0.393072  -0.2729066   0.0009495  -0.000056  -0.000155   0.000013   0.000013  0.0000081  0.0000033    0.000486    0.000100
+2011   5  27  55708  -0.020279   0.395562  -0.2739026   0.0009960  -0.000026  -0.000201   0.000019   0.000020  0.0000018  0.0000050    0.000202    0.000111
+2011   5  28  55709  -0.019072   0.397323  -0.2748716   0.0009335  -0.000027  -0.000205   0.000019   0.000020  0.0000025  0.0000049    0.000111    0.000127
+2011   5  29  55710  -0.017910   0.398904  -0.2757827   0.0008814  -0.000046  -0.000189   0.000019   0.000020  0.0000031  0.0000049    0.000125    0.000147
+2011   5  30  55711  -0.017306   0.400662  -0.2766035   0.0007456  -0.000076  -0.000163   0.000019   0.000020  0.0000027  0.0000050    0.000138    0.000168
+2011   5  31  55712  -0.016447   0.401974  -0.2772920   0.0006203  -0.000118  -0.000131   0.000019   0.000020  0.0000022  0.0000050    0.000152    0.000188
+2011   6   1  55713  -0.015294   0.403217  -0.2778905   0.0005571  -0.000168  -0.000097   0.000019   0.000020  0.0000032  0.0000050    0.000165    0.000208
+2011   6   2  55714  -0.014217   0.404443  -0.2784168   0.0005053  -0.000161  -0.000035   0.000019   0.000020  0.0000150  0.0000050    0.000123    0.000166
+2011   6   3  55715  -0.013071   0.405691  -0.2789094   0.0004653  -0.000139   0.000029   0.000019   0.000020  0.0000017  0.0000050    0.000067    0.000108
+2011   6   4  55716  -0.011585   0.407428  -0.2794204   0.0005558  -0.000227   0.000038   0.000019   0.000020  0.0000024  0.0000049    0.000044    0.000077
+2011   6   5  55717  -0.009834   0.409290  -0.2800650   0.0007423  -0.000346   0.000018   0.000019   0.000020  0.0000031  0.0000049    0.000033    0.000056
+2011   6   6  55718  -0.007666   0.410741  -0.2808916   0.0008968  -0.000449  -0.000012   0.000019   0.000020  0.0000027  0.0000049    0.000021    0.000035
+2011   6   7  55719  -0.005625   0.412262  -0.2818600   0.0010641  -0.000533  -0.000048   0.000019   0.000018  0.0000008  0.0000048    0.000010    0.000013
+2011   6   8  55720  -0.003178   0.413950  -0.2830058   0.0011670  -0.000452  -0.000078   0.000019   0.000018  0.0000132  0.0000048    0.000018    0.000023
+2011   6   9  55721  -0.000953   0.415650  -0.2841649   0.0011594  -0.000316  -0.000105   0.000019   0.000020  0.0000022  0.0000050    0.000031    0.000041
+2011   6  10  55722   0.001798   0.416826  -0.2853045   0.0010993  -0.000173  -0.000126   0.000019   0.000020  0.0000014  0.0000050    0.000044    0.000059
+2011   6  11  55723   0.004988   0.418167  -0.2863554   0.0009883  -0.000120  -0.000121   0.000019   0.000020  0.0000022  0.0000049    0.000056    0.000072
+2011   6  12  55724   0.008078   0.419791  -0.2872450   0.0007870  -0.000109  -0.000098   0.000017   0.000018  0.0000031  0.0000047    0.000066    0.000081
+2011   6  13  55725   0.010611   0.421080  -0.2879301   0.0005849  -0.000113  -0.000069   0.000015   0.000016  0.0000027  0.0000045    0.000078    0.000091
+2011   6  14  55726   0.013218   0.422139  -0.2884258   0.0004360  -0.000135  -0.000035   0.000015   0.000016  0.0000022  0.0000046    0.000089    0.000101
+2011   6  15  55727   0.015169   0.422939  -0.2887931   0.0002739  -0.000171   0.000002   0.000015   0.000016  0.0000030  0.0000046    0.000100    0.000111
+2011   6  16  55728   0.017119   0.423499  -0.2889809   0.0001888  -0.000206   0.000009   0.000015   0.000016  0.0000144  0.0000046    0.000081    0.000094
+2011   6  17  55729   0.018914   0.424432  -0.2891890   0.0001954  -0.000244   0.000004   0.000015   0.000016  0.0000015  0.0000045    0.000053    0.000070
+2011   6  18  55730   0.020900   0.425358  -0.2894192   0.0002686  -0.000291   0.000020   0.000017   0.000018  0.0000023  0.0000047    0.000056    0.000075
+2011   6  19  55731   0.022796   0.426422  -0.2897293   0.0003441  -0.000336   0.000036   0.000019   0.000020  0.0000031  0.0000049    0.000069    0.000090
+2011   6  20  55732   0.025033   0.427005  -0.2901017   0.0003777  -0.000367   0.000042   0.000017   0.000018  0.0000031  0.0000049    0.000082    0.000105
+2011   6  21  55733   0.027123   0.427744  -0.2904809   0.0003988  -0.000384   0.000038   0.000015   0.000016  0.0000026  0.0000049    0.000095    0.000120
+2011   6  22  55734   0.029126   0.428426  -0.2909052   0.0003713  -0.000349   0.000027   0.000017   0.000018  0.0000195  0.0000050    0.000050    0.000041
+2011   6  23  55735   0.031053   0.429227  -0.2912266   0.0003309  -0.000250  -0.000038   0.000019   0.000020  0.0000042  0.0000050    0.000038    0.000034
+2011   6  24  55736   0.032729   0.430135  -0.2915129   0.0002421  -0.000130  -0.000118   0.000019   0.000020  0.0000014  0.0000050    0.000041    0.000054
+2011   6  25  55737   0.033651   0.430754  -0.2916816   0.0001193  -0.000103  -0.000165   0.000019   0.000020  0.0000023  0.0000049    0.000048    0.000070
+2011   6  26  55738   0.034690   0.431491  -0.2917365   0.0000110  -0.000111  -0.000188   0.000019   0.000018  0.0000031  0.0000049    0.000056    0.000084
+2011   6  27  55739   0.036618   0.432144  -0.2917016  -0.0000566  -0.000124  -0.000198   0.000019   0.000018  0.0000027  0.0000050    0.000065    0.000098
+2011   6  28  55740   0.038496   0.433073  -0.2915946  -0.0001300  -0.000143  -0.000191   0.000019   0.000018  0.0000031  0.0000050    0.000074    0.000112
+2011   6  29  55741   0.040170   0.433745  -0.2914117  -0.0002026  -0.000089  -0.000133   0.000019   0.000018  0.0000181  0.0000050    0.000072    0.000105
+2011   6  30  55742   0.042129   0.434646  -0.2911762  -0.0002886  -0.000026  -0.000057   0.000019   0.000020  0.0000042  0.0000050    0.000068    0.000093
+2011   7   1  55743   0.043686   0.435522  -0.2908906  -0.0002954   0.000025   0.000024   0.000019   0.000020  0.0000013  0.0000050    0.000064    0.000081
+2011   7   2  55744   0.045231   0.436353  -0.2906550  -0.0001822   0.000012   0.000074   0.000019   0.000020  0.0000022  0.0000049    0.000214    0.000090
+2011   7   3  55745   0.046685   0.437092  -0.2905671   0.0000021  -0.000032   0.000105   0.000019   0.000020  0.0000031  0.0000049    0.000420    0.000108
+2011   7   4  55746   0.048254   0.437857  -0.2907147   0.0002695  -0.000087   0.000127   0.000019   0.000018  0.0000031  0.0000050    0.000625    0.000126
+2011   7   5  55747   0.050467   0.438911  -0.2910940   0.0004507  -0.000147   0.000135   0.000019   0.000016  0.0000027  0.0000050    0.000830    0.000143
+2011   7   6  55748   0.052446   0.440119  -0.2915636   0.0004987  -0.000211   0.000128   0.000019   0.000016  0.0000009  0.0000050    0.000150    0.000033
+2011   7   7  55749   0.055156   0.440700  -0.2920977   0.0004628  -0.000253   0.000093   0.000019   0.000018  0.0000161  0.0000050    0.000018    0.000021
+2011   7   8  55750   0.057624   0.441317  -0.2924874   0.0003625  -0.000281   0.000047   0.000019   0.000018  0.0000015  0.0000048    0.000030    0.000034
+2011   7   9  55751   0.059897   0.441678  -0.2927692   0.0001827  -0.000301   0.000036   0.000019   0.000018  0.0000023  0.0000047    0.000051    0.000060
+2011   7  10  55752   0.062117   0.442125  -0.2928465  -0.0000259  -0.000310   0.000040   0.000019   0.000020  0.0000031  0.0000049    0.000076    0.000092
+2011   7  11  55753   0.064391   0.442929  -0.2927417  -0.0001729  -0.000304   0.000049   0.000017   0.000018  0.0000031  0.0000048    0.000100    0.000124
+2011   7  12  55754   0.065789   0.443820  -0.2924942  -0.0002972  -0.000288   0.000064   0.000015   0.000016  0.0000079  0.0000046    0.000125    0.000155
+2011   7  13  55755   0.067199   0.444322  -0.2921737  -0.0003452  -0.000210   0.000040   0.000017   0.000016  0.0000150  0.0000048    0.000073    0.000062
+2011   7  14  55756   0.068763   0.444776  -0.2918420  -0.0002972  -0.000139   0.000026   0.000017   0.000016  0.0000042  0.0000050    0.000053    0.000040
+2011   7  15  55757   0.070662   0.445100  -0.2915728  -0.0002387  -0.000076   0.000020   0.000015   0.000016  0.0000012  0.0000048    0.000047    0.000048
+2011   7  16  55758   0.072292   0.445591  -0.2913894  -0.0001394  -0.000079   0.000066   0.000015   0.000018  0.0000021  0.0000047    0.000043    0.000049
+2011   7  17  55759   0.074474   0.446289  -0.2913305  -0.0000028  -0.000112   0.000126   0.000017   0.000020  0.0000031  0.0000049    0.000040    0.000047
+2011   7  18  55760   0.076551   0.447190  -0.2914163   0.0001291  -0.000153   0.000178   0.000019   0.000020  0.0000031  0.0000049    0.000037    0.000045
+2011   7  19  55761   0.078703   0.447576  -0.2915775   0.0002231  -0.000200   0.000221   0.000019   0.000020  0.0000019  0.0000049    0.000034    0.000043
+2011   7  20  55762   0.081144   0.447863  -0.2918752   0.0002359  -0.000135   0.000177   0.000019   0.000020  0.0000094  0.0000050    0.000069    0.000080
+2011   7  21  55763   0.083804   0.448189  -0.2920334   0.0001492  -0.000041   0.000105   0.000019   0.000020  0.0000022  0.0000050    0.000115    0.000128
+2011   7  22  55764   0.086581   0.448640  -0.2921619   0.0000900  -0.000167   0.000035   0.000019   0.000020  0.0000015  0.0000050    0.000086    0.000119
+2011   7  23  55765   0.089073   0.449385  -0.2922196   0.0000261  -0.000221  -0.000009   0.000019   0.000020  0.0000023  0.0000049    0.000091    0.000131
+2011   7  24  55766   0.090995   0.449731  -0.2922105  -0.0000490  -0.000218  -0.000035   0.000019   0.000020  0.0000031  0.0000049    0.000118    0.000158
+2011   7  25  55767   0.093168   0.449634  -0.2921039  -0.0001560  -0.000208  -0.000045   0.000019   0.000020  0.0000031  0.0000050    0.000144    0.000184
+2011   7  26  55768   0.094899   0.449557  -0.2918645  -0.0002724  -0.000193  -0.000038   0.000019   0.000020  0.0000039  0.0000050    0.000171    0.000211
+2011   7  27  55769   0.096255   0.448675  -0.2915892  -0.0003227  -0.000152   0.000086   0.000019   0.000020  0.0000169  0.0000050    0.000147    0.000183
+2011   7  28  55770   0.097856   0.447303  -0.2912258  -0.0003105  -0.000106   0.000241   0.000019   0.000020  0.0000041  0.0000050    0.000110    0.000141
+2011   7  29  55771   0.099919   0.446308  -0.2909298  -0.0002397  -0.000061   0.000391   0.000019   0.000020  0.0000016  0.0000050    0.000073    0.000099
+2011   7  30  55772   0.101604   0.445878  -0.2907622  -0.0000763  -0.000066   0.000399   0.000019   0.000020  0.0000023  0.0000049    0.000069    0.000095
+2011   7  31  55773   0.103137   0.445717  -0.2908183   0.0001737  -0.000094   0.000340   0.000019   0.000020  0.0000031  0.0000051    0.000077    0.000106
+2011   8   1  55774   0.104874   0.445634  -0.2911245   0.0004199  -0.000127   0.000268   0.000019   0.000020  0.0000031  0.0000051    0.000086    0.000117
+2011   8   2  55775   0.106979   0.444957  -0.2916487   0.0006106  -0.000163   0.000182   0.000019   0.000020  0.0000027  0.0000049    0.000094    0.000128
+2011   8   3  55776   0.109328   0.444442  -0.2923332   0.0006809  -0.000163   0.000169   0.000018   0.000020  0.0000170  0.0000052    0.000098    0.000120
+2011   8   4  55777   0.111763   0.443806  -0.2929965   0.0006461  -0.000153   0.000175   0.000018   0.000020  0.0000042  0.0000054    0.000101    0.000108
+2011   8   5  55778   0.114570   0.443243  -0.2935922   0.0005097  -0.000140   0.000178   0.000019   0.000020  0.0000018  0.0000054    0.000105    0.000095
+2011   8   6  55779   0.117274   0.442796  -0.2939787   0.0002614  -0.000144   0.000171   0.000019   0.000020  0.0000025  0.0000053    0.000101    0.000096
+2011   8   7  55780   0.119277   0.442391  -0.2941329   0.0000634  -0.000151   0.000162   0.000019   0.000019  0.0000031  0.0000051    0.000096    0.000101
+2011   8   8  55781   0.121144   0.441836  -0.2941217  -0.0000771  -0.000156   0.000155   0.000019   0.000019  0.0000027  0.0000049    0.000090    0.000106
+2011   8   9  55782   0.123254   0.441142  -0.2939619  -0.0001689  -0.000157   0.000154   0.000019   0.000020  0.0000041  0.0000049    0.000085    0.000111
+2011   8  10  55783   0.125592   0.440520  -0.2938027  -0.0001955  -0.000136   0.000113   0.000019   0.000020  0.0000198  0.0000051    0.000089    0.000114
+2011   8  11  55784   0.127820   0.440072  -0.2935996  -0.0001561  -0.000108   0.000069   0.000019   0.000020  0.0000022  0.0000054    0.000096    0.000117
+2011   8  12  55785   0.129628   0.439533  -0.2934816  -0.0000682  -0.000080   0.000035   0.000019   0.000020  0.0000018  0.0000054    0.000103    0.000119
+2011   8  13  55786   0.131524   0.438997  -0.2934636   0.0000275  -0.000078   0.000065   0.000019   0.000020  0.0000025  0.0000053    0.000098    0.000106
+2011   8  14  55787   0.133078   0.438523  -0.2935486   0.0001144  -0.000086   0.000124   0.000019   0.000020  0.0000031  0.0000051    0.000088    0.000087
+2011   8  15  55788   0.134792   0.437408  -0.2937175   0.0002102  -0.000095   0.000190   0.000019   0.000020  0.0000044  0.0000050    0.000078    0.000068
+2011   8  16  55789   0.136683   0.436704  -0.2939462   0.0002297  -0.000104   0.000259   0.000019   0.000020  0.0000041  0.0000050    0.000068    0.000050
+2011   8  17  55790   0.138514   0.435947  -0.2941881   0.0002309  -0.000113   0.000323   0.000019   0.000020  0.0000022  0.0000050    0.000058    0.000031
+2011   8  18  55791   0.140347   0.435419  -0.2944273   0.0002307  -0.000068   0.000369   0.000019   0.000020  0.0000022  0.0000050    0.000066    0.000038
+2011   8  19  55792   0.141882   0.434610  -0.2946153   0.0001345  -0.000010   0.000399   0.000019   0.000020  0.0000022  0.0000050    0.000080    0.000051
+2011   8  20  55793   0.143261   0.433771  -0.2946921   0.0000121  -0.000012   0.000385   0.000019   0.000020  0.0000027  0.0000049    0.000070    0.000049
+2011   8  21  55794   0.144155   0.432791  -0.2946572  -0.0000865  -0.000038   0.000346   0.000019   0.000020  0.0000026  0.0000051    0.000053    0.000040
+2011   8  22  55795   0.145499   0.431463  -0.2945413  -0.0001353  -0.000064   0.000296   0.000019   0.000020  0.0000022  0.0000052    0.000035    0.000031
+2011   8  23  55796   0.146652   0.430487  -0.2943994  -0.0001557  -0.000092   0.000242   0.000019   0.000020  0.0000011  0.0000052    0.000018    0.000023
+2011   8  24  55797   0.147662   0.429169  -0.2942385  -0.0001262  -0.000067   0.000224   0.000019   0.000020  0.0000096  0.0000052    0.000015    0.000021
+2011   8  25  55798   0.148853   0.428107  -0.2941519  -0.0000405  -0.000029   0.000219   0.000019   0.000020  0.0000042  0.0000051    0.000016    0.000020
+2011   8  26  55799   0.150211   0.427048  -0.2942084   0.0001760   0.000006   0.000220   0.000019   0.000020  0.0000013  0.0000054    0.000017    0.000020
+2011   8  27  55800   0.151933   0.426025  -0.2945206   0.0004487  -0.000002   0.000209   0.000019   0.000020  0.0000022  0.0000053    0.000014    0.000017
+2011   8  28  55801   0.153571   0.424842  -0.2951017   0.0006907  -0.000026   0.000200   0.000019   0.000020  0.0000031  0.0000051    0.000011    0.000013
+2011   8  29  55802   0.155607   0.423520  -0.2959149   0.0009093  -0.000051   0.000200   0.000019   0.000020  0.0000031  0.0000052    0.000007    0.000009
+2011   8  30  55803   0.157454   0.422664  -0.2968974   0.0009949  -0.000076   0.000207   0.000019   0.000020  0.0000012  0.0000054    0.000004    0.000005
+2011   8  31  55804   0.159193   0.421606  -0.2979044   0.0009989  -0.000090   0.000209   0.000019   0.000020  0.0000122  0.0000054    0.000006    0.000007
+2011   9   1  55805   0.161067   0.420835  -0.2988856   0.0009060  -0.000098   0.000212   0.000019   0.000020  0.0000040  0.0000054    0.000009    0.000009
+2011   9   2  55806   0.162527   0.419760  -0.2997147   0.0007088  -0.000102   0.000219   0.000019   0.000020  0.0000010  0.0000052    0.000012    0.000012
+2011   9   3  55807   0.163910   0.418660  -0.3002971   0.0004585  -0.000072   0.000264   0.000019   0.000020  0.0000020  0.0000051    0.000133    0.000052
+2011   9   4  55808   0.165290   0.417086  -0.3006470   0.0002685  -0.000029   0.000320   0.000019   0.000020  0.0000031  0.0000053    0.000298    0.000106
+2011   9   5  55809   0.166560   0.415666  -0.3008624   0.0001830   0.000012   0.000369   0.000019   0.000020  0.0000031  0.0000053    0.000463    0.000160
+2011   9   6  55810   0.167468   0.414368  -0.3010333   0.0001785   0.000050   0.000409   0.000019   0.000020  0.0000027  0.0000054    0.000627    0.000214
+2011   9   7  55811   0.168600   0.413222  -0.3012190   0.0002391   0.000031   0.000394   0.000019   0.000020  0.0000008  0.0000052    0.000115    0.000046
+2011   9   8  55812   0.170152   0.411886  -0.3014901   0.0003147  -0.000023   0.000333   0.000019   0.000020  0.0000015  0.0000051    0.000014    0.000022
+2011   9   9  55813   0.172119   0.410667  -0.3018697   0.0004115  -0.000086   0.000258   0.000019   0.000020  0.0000014  0.0000054    0.000022    0.000035
+2011   9  10  55814   0.174341   0.409372  -0.3023100   0.0004731  -0.000090   0.000226   0.000019   0.000020  0.0000022  0.0000053    0.000025    0.000038
+2011   9  11  55815   0.176190   0.408100  -0.3028281   0.0005621  -0.000070   0.000214   0.000019   0.000020  0.0000031  0.0000053    0.000027    0.000036
+2011   9  12  55816   0.177574   0.406829  -0.3034262   0.0006229  -0.000045   0.000208   0.000019   0.000020  0.0000031  0.0000053    0.000028    0.000035
+2011   9  13  55817   0.178644   0.405686  -0.3040903   0.0006776  -0.000014   0.000210   0.000019   0.000020  0.0000013  0.0000053    0.000029    0.000034
+2011   9  14  55818   0.179737   0.404563  -0.3047790   0.0007271   0.000004   0.000231   0.000019   0.000020  0.0000354  0.0000054    0.000026    0.000026
+2011   9  15  55819   0.180619   0.403685  -0.3055068   0.0006719   0.000020   0.000262   0.000019   0.000020  0.0000061  0.0000054    0.000023    0.000016
+2011   9  16  55820   0.181465   0.402535  -0.3061267   0.0005652   0.000039   0.000286   0.000019   0.000020  0.0000052  0.0000054    0.000021    0.000011
+2011   9  17  55821   0.182140   0.401458  -0.3066386   0.0004443   0.000057   0.000304   0.000019   0.000020  0.0000037  0.0000053    0.000021    0.000011
+2011   9  18  55822   0.182331   0.400185  -0.3070730   0.0004198   0.000070   0.000321   0.000019   0.000020  0.0000031  0.0000055    0.000022    0.000011
+2011   9  19  55823   0.182159   0.399096  -0.3074859   0.0004071   0.000077   0.000335   0.000019   0.000020  0.0000045  0.0000056    0.000023    0.000011
+2011   9  20  55824   0.181978   0.397125  -0.3079043   0.0004333   0.000072   0.000334   0.000019   0.000020  0.0000060  0.0000056    0.000024    0.000012
+2011   9  21  55825   0.182277   0.394953  -0.3084007   0.0005729   0.000056   0.000318   0.000019   0.000020  0.0000061  0.0000058    0.000025    0.000013
+2011   9  22  55826   0.182369   0.393000  -0.3090513   0.0007381   0.000035   0.000299   0.000019   0.000020  0.0000061  0.0000058    0.000027    0.000013
+2011   9  23  55827   0.182344   0.391231  -0.3099061   0.0009799   0.000016   0.000296   0.000019   0.000020  0.0000060  0.0000058    0.000027    0.000014
+2011   9  24  55828   0.182598   0.389574  -0.3110223   0.0012520   0.000000   0.000307   0.000019   0.000020  0.0000045  0.0000057    0.000026    0.000013
+2011   9  25  55829   0.182542   0.388045  -0.3124062   0.0014978  -0.000013   0.000318   0.000019   0.000020  0.0000031  0.0000057    0.000025    0.000013
+2011   9  26  55830   0.181995   0.386278  -0.3140084   0.0016816  -0.000022   0.000328   0.000019   0.000020  0.0000043  0.0000060    0.000024    0.000012
+2011   9  27  55831   0.181326   0.384430  -0.3157567   0.0017894  -0.000023   0.000328   0.000019   0.000020  0.0000059  0.0000060    0.000024    0.000012
+2011   9  28  55832   0.180478   0.382530  -0.3175180   0.0017158  -0.000015   0.000320   0.000019   0.000020  0.0000061  0.0000058    0.000025    0.000013
+2011   9  29  55833   0.179884   0.380493  -0.3191195   0.0014792   0.000001   0.000309   0.000019   0.000020  0.0000058  0.0000058    0.000026    0.000013
+2011   9  30  55834   0.179848   0.378710  -0.3204764   0.0012468   0.000017   0.000296   0.000019   0.000020  0.0000057  0.0000060    0.000028    0.000020
+2011  10   1  55835   0.179959   0.376801  -0.3216220   0.0010753   0.000030   0.000281   0.000019   0.000020  0.0000045  0.0000061    0.000032    0.000033
+2011  10   2  55836   0.180046   0.374966  -0.3226186   0.0009549   0.000048   0.000266   0.000019   0.000020  0.0000031  0.0000058    0.000036    0.000047
+2011  10   3  55837   0.180168   0.373161  -0.3235295   0.0009171   0.000070   0.000254   0.000019   0.000020  0.0000031  0.0000057    0.000040    0.000060
+2011  10   4  55838   0.180796   0.371281  -0.3244655   0.0009632   0.000092   0.000247   0.000019   0.000020  0.0000058  0.0000058    0.000043    0.000074
+2011  10   5  55839   0.181805   0.369386  -0.3254545   0.0010910   0.000170   0.000227   0.000019   0.000020  0.0000449  0.0000058    0.000066    0.000106
+2011  10   6  55840   0.183038   0.367931  -0.3266240   0.0012202   0.000256   0.000210   0.000019   0.000020  0.0000041  0.0000058    0.000093    0.000142
+2011  10   7  55841   0.183849   0.366623  -0.3278836   0.0013039   0.000330   0.000197   0.000019   0.000020  0.0000022  0.0000058    0.000120    0.000178
+2011  10   8  55842   0.184914   0.365350  -0.3292239   0.0013681   0.000302   0.000235   0.000019   0.000020  0.0000027  0.0000057    0.000109    0.000159
+2011  10   9  55843   0.185843   0.364146  -0.3306031   0.0013871   0.000229   0.000288   0.000019   0.000020  0.0000031  0.0000055    0.000084    0.000119
+2011  10  10  55844   0.186335   0.362751  -0.3319938   0.0013744   0.000151   0.000335   0.000019   0.000020  0.0000031  0.0000054    0.000058    0.000079
+2011  10  11  55845   0.186283   0.361240  -0.3333521   0.0013458   0.000074   0.000372   0.000019   0.000020  0.0000014  0.0000054    0.000033    0.000040
+2011  10  12  55846   0.186172   0.359868  -0.3346526   0.0012322   0.000065   0.000345   0.000019   0.000020  0.0000316  0.0000054    0.000036    0.000046
+2011  10  13  55847   0.185875   0.358428  -0.3357966   0.0010538   0.000083   0.000292   0.000019   0.000020  0.0000042  0.0000054    0.000047    0.000065
+2011  10  14  55848   0.185584   0.356848  -0.3367601   0.0008592   0.000112   0.000231   0.000019   0.000020  0.0000018  0.0000054    0.000058    0.000084
+2011  10  15  55849   0.185118   0.354989  -0.3375216   0.0006866   0.000158   0.000168   0.000019   0.000020  0.0000025  0.0000055    0.000054    0.000079
+2011  10  16  55850   0.184585   0.353028  -0.3381282   0.0005690   0.000214   0.000108   0.000019   0.000020  0.0000031  0.0000055    0.000047    0.000065
+2011  10  17  55851   0.184489   0.351154  -0.3386577   0.0005244   0.000271   0.000056   0.000019   0.000020  0.0000031  0.0000054    0.000039    0.000052
+2011  10  18  55852   0.184678   0.349635  -0.3391626   0.0005278   0.000326   0.000017   0.000019   0.000020  0.0000014  0.0000054    0.000030    0.000038
+2011  10  19  55853   0.185409   0.348154  -0.3397202   0.0006278   0.000267   0.000056   0.000019   0.000020  0.0000013  0.0000054    0.000054    0.000080
+2011  10  20  55854   0.186175   0.346913  -0.3404140   0.0007852   0.000256   0.000092   0.000019   0.000020  0.0000019  0.0000054    0.000059    0.000087
+2011  10  21  55855   0.186835   0.345228  -0.3412907   0.0009790   0.000268   0.000128   0.000019   0.000020  0.0000022  0.0000054    0.000052    0.000077
+2011  10  22  55856   0.186987   0.343892  -0.3423730   0.0011882   0.000272   0.000171   0.000019   0.000020  0.0000022  0.0000053    0.000045    0.000066
+2011  10  23  55857   0.187069   0.342621  -0.3436760   0.0014037   0.000269   0.000215   0.000019   0.000020  0.0000027  0.0000055    0.000039    0.000056
+2011  10  24  55858   0.187276   0.341667  -0.3451673   0.0015571   0.000260   0.000257   0.000019   0.000020  0.0000027  0.0000058    0.000032    0.000045
+2011  10  25  55859   0.187703   0.340368  -0.3467517   0.0015717   0.000248   0.000291   0.000019   0.000020  0.0000012  0.0000058    0.000025    0.000035
+2011  10  26  55860   0.187687   0.338859  -0.3482743   0.0014618   0.000204   0.000289   0.000019   0.000020  0.0000144  0.0000056    0.000063    0.000080
+2011  10  27  55861   0.187584   0.336921  -0.3496496   0.0012730   0.000154   0.000270   0.000019   0.000020  0.0000040  0.0000054    0.000111    0.000140
+2011  10  28  55862   0.187494   0.334921  -0.3508079   0.0010517   0.000109   0.000244   0.000019   0.000020  0.0000046  0.0000054    0.000160    0.000200
+2011  10  29  55863   0.187633   0.332685  -0.3517657   0.0008819   0.000110   0.000239   0.000019   0.000020  0.0000042  0.0000053    0.000162    0.000203
+2011  10  30  55864   0.187589   0.330331  -0.3525982   0.0008057   0.000133   0.000240   0.000019   0.000020  0.0000031  0.0000051    0.000145    0.000184
+2011  10  31  55865   0.187330   0.328167  -0.3534127   0.0008428   0.000161   0.000243   0.000019   0.000018  0.0000058  0.0000049    0.000128    0.000166
+2011  11   1  55866   0.186888   0.326392  -0.3543012   0.0009470   0.000191   0.000245   0.000019   0.000016  0.0000073  0.0000050    0.000111    0.000147
+2011  11   2  55867   0.186822   0.324831  -0.3553032   0.0010624   0.000221   0.000250   0.000019   0.000016  0.0000041  0.0000050    0.000094    0.000128
+2011  11   3  55868   0.187040   0.323848  -0.3564137   0.0011722   0.000252   0.000256   0.000019   0.000018  0.0000019  0.0000050    0.000077    0.000110
+2011  11   4  55869   0.187158   0.322986  -0.3576742   0.0013400   0.000188   0.000207   0.000019   0.000018  0.0000013  0.0000050    0.000051    0.000075
+2011  11   5  55870   0.186865   0.321874  -0.3590589   0.0014143   0.000163   0.000212   0.000019   0.000016  0.0000023  0.0000049    0.000047    0.000071
+2011  11   6  55871   0.186241   0.320274  -0.3604797   0.0014107   0.000164   0.000242   0.000019   0.000016  0.0000031  0.0000049    0.000054    0.000080
+2011  11   7  55872   0.185529   0.318315  -0.3618695   0.0013685   0.000171   0.000271   0.000017   0.000016  0.0000031  0.0000050    0.000060    0.000090
+2011  11   8  55873   0.184851   0.316125  -0.3632047   0.0012673   0.000185   0.000298   0.000015   0.000016  0.0000026  0.0000050    0.000066    0.000100
+2011  11   9  55874   0.184737   0.314192  -0.3643687   0.0010937   0.000245   0.000281   0.000015   0.000018  0.0000173  0.0000050    0.000066    0.000095
+2011  11  10  55875   0.184847   0.312700  -0.3653718   0.0009152   0.000320   0.000249   0.000015   0.000018  0.0000042  0.0000050    0.000064    0.000087
+2011  11  11  55876   0.184311   0.310976  -0.3662312   0.0008048   0.000396   0.000215   0.000015   0.000016  0.0000017  0.0000050    0.000062    0.000078
+2011  11  12  55877   0.183239   0.309272  -0.3669630   0.0007041   0.000410   0.000197   0.000015   0.000018  0.0000158  0.0000051    0.000056    0.000070
+2011  11  13  55878   0.181724   0.307496  -0.3676449   0.0006600   0.000397   0.000185   0.000015   0.000018  0.0000027  0.0000051    0.000049    0.000062
+2011  11  14  55879   0.180539   0.305731  -0.3683014   0.0006752   0.000379   0.000172   0.000015   0.000016  0.0000031  0.0000049    0.000041    0.000055
+2011  11  15  55880   0.179414   0.304534  -0.3689980   0.0007475   0.000353   0.000158   0.000015   0.000016  0.0000017  0.0000049    0.000033    0.000047
+2011  11  16  55881   0.178356   0.303216  -0.3698090   0.0008567   0.000485   0.000240   0.000015   0.000016  0.0000106  0.0000050    0.000050    0.000034
+2011  11  17  55882   0.177458   0.302301  -0.3707386   0.0010369   0.000541   0.000257   0.000015   0.000016  0.0000042  0.0000050    0.001385    0.000489
+2011  11  18  55883   0.176776   0.301593  -0.3718716   0.0012226   0.000462   0.000169   0.000015   0.000016  0.0000012  0.0000050    0.000503    0.000200
+2011  11  19  55884   0.176069   0.300681  -0.3731938   0.0014173   0.000412   0.000117   0.000017   0.000018  0.0000021  0.0000049    0.000027    0.000039
+2011  11  20  55885   0.175325   0.299566  -0.3746757   0.0015367   0.000376   0.000089   0.000019   0.000020  0.0000031  0.0000051    0.000025    0.000034
+2011  11  21  55886   0.174424   0.298706  -0.3762212   0.0015311   0.000334   0.000065   0.000019   0.000020  0.0000031  0.0000054    0.000022    0.000029
+2011  11  22  55887   0.173153   0.297495  -0.3777325   0.0014802   0.000291   0.000046   0.000019   0.000020  0.0000013  0.0000052    0.000019    0.000024
+2011  11  23  55888   0.171564   0.296098  -0.3791574   0.0013413   0.000174   0.000093   0.000019   0.000020  0.0000010  0.0000052    0.000033    0.000052
+2011  11  24  55889   0.170136   0.294421  -0.3804025   0.0011359   0.000124   0.000112   0.000019   0.000020  0.0000093  0.0000054    0.000036    0.000058
+2011  11  25  55890   0.168429   0.292625  -0.3814249   0.0009227   0.000117   0.000117   0.000019   0.000020  0.0000022  0.0000052    0.000033    0.000051
+2011  11  26  55891   0.166974   0.290798  -0.3822708   0.0007756   0.000125   0.000124   0.000019   0.000020  0.0000022  0.0000051    0.000030    0.000045
+2011  11  27  55892   0.166229   0.289484  -0.3830272   0.0007467   0.000147   0.000131   0.000019   0.000020  0.0000022  0.0000051    0.000026    0.000039
+2011  11  28  55893   0.165659   0.288717  -0.3837946   0.0007875   0.000183   0.000137   0.000017   0.000020  0.0000027  0.0000049    0.000023    0.000033
+2011  11  29  55894   0.164062   0.287855  -0.3846123   0.0008545   0.000227   0.000143   0.000017   0.000020  0.0000017  0.0000050    0.000020    0.000026
+2011  11  30  55895   0.162515   0.286555  -0.3855442   0.0009721   0.000255   0.000143   0.000018   0.000020  0.0000071  0.0000050    0.000021    0.000028
+2011  12   1  55896   0.161065   0.285213  -0.3865785   0.0010984   0.000277   0.000142   0.000017   0.000018  0.0000022  0.0000050    0.000024    0.000032
+2011  12   2  55897   0.160523   0.284037  -0.3877325   0.0011892   0.000297   0.000139   0.000017   0.000018  0.0000013  0.0000050    0.000027    0.000036
+2011  12   3  55898   0.160126   0.283224  -0.3889094   0.0011487   0.000332   0.000148   0.000017   0.000020  0.0000022  0.0000049    0.000027    0.000036
+2011  12   4  55899   0.159780   0.282234  -0.3900109   0.0010352   0.000366   0.000160   0.000017   0.000020  0.0000031  0.0000051    0.000026    0.000034
+2011  12   5  55900   0.159498   0.281546  -0.3910159   0.0009634   0.000392   0.000172   0.000019   0.000020  0.0000031  0.0000054    0.000025    0.000032
+2011  12   6  55901   0.158879   0.281124  -0.3919309   0.0008532   0.000408   0.000182   0.000018   0.000020  0.0000014  0.0000052    0.000024    0.000030
+2011  12   7  55902   0.157695   0.280548  -0.3926990   0.0006886   0.000365   0.000165   0.000018   0.000020  0.0000188  0.0000050    0.000033    0.000040
+2011  12   8  55903   0.156075   0.279858  -0.3933303   0.0005762   0.000303   0.000142   0.000018   0.000020  0.0000042  0.0000049    0.000043    0.000051
+2011  12   9  55904   0.154586   0.279027  -0.3939013   0.0005734   0.000239   0.000121   0.000018   0.000020  0.0000017  0.0000051    0.000054    0.000063
+2011  12  10  55905   0.153975   0.278268  -0.3944609   0.0005679   0.000253   0.000131   0.000019   0.000020  0.0000024  0.0000053    0.000066    0.000086
+2011  12  11  55906   0.152946   0.277793  -0.3950130   0.0005617   0.000297   0.000154   0.000019   0.000020  0.0000031  0.0000053    0.000079    0.000113
+2011  12  12  55907   0.152122   0.277134  -0.3955934   0.0006209   0.000342   0.000176   0.000019   0.000020  0.0000031  0.0000053    0.000092    0.000140
+2011  12  13  55908   0.151257   0.276507  -0.3962759   0.0007756   0.000387   0.000197   0.000019   0.000020  0.0000028  0.0000054    0.000104    0.000167
+2011  12  14  55909   0.149943   0.276031  -0.3971234   0.0009411   0.000327   0.000190   0.000019   0.000020  0.0000200  0.0000054    0.000092    0.000146
+2011  12  15  55910   0.148412   0.275427  -0.3981620   0.0011186   0.000242   0.000172   0.000019   0.000020  0.0000022  0.0000054    0.000073    0.000112
+2011  12  16  55911   0.147197   0.274874  -0.3993830   0.0013247   0.000159   0.000149   0.000019   0.000020  0.0000013  0.0000054    0.000053    0.000079
+2011  12  17  55912   0.145681   0.274731  -0.4007753   0.0014372   0.000187   0.000128   0.000019   0.000020  0.0000022  0.0000053    0.000046    0.000066
+2011  12  18  55913   0.144383   0.274584  -0.4022345   0.0014914   0.000258   0.000104   0.000019   0.000020  0.0000031  0.0000055    0.000043    0.000060
+2011  12  19  55914   0.142680   0.274384  -0.4037276   0.0014690   0.000332   0.000076   0.000019   0.000020  0.0000031  0.0000058    0.000039    0.000055
+2011  12  20  55915   0.140327   0.273271  -0.4051147   0.0013238   0.000407   0.000044   0.000019   0.000020  0.0000017  0.0000057    0.000036    0.000049
+2011  12  21  55916   0.138124   0.271971  -0.4063581   0.0011456   0.000334   0.000025   0.000019   0.000020  0.0000310  0.0000057    0.000064    0.000099
+2011  12  22  55917   0.135795   0.270784  -0.4073918   0.0009061   0.000226   0.000009   0.000019   0.000020  0.0000029  0.0000058    0.000100    0.000164
+2011  12  23  55918   0.134133   0.269652  -0.4082160   0.0007472   0.000231  -0.000033   0.000019   0.000020  0.0000026  0.0000058    0.000118    0.000191
+2011  12  24  55919   0.132693   0.268659  -0.4089480   0.0007486   0.000282  -0.000082   0.000019   0.000020  0.0000022  0.0000057    0.000128    0.000203
+2011  12  25  55920   0.131411   0.267980  -0.4097440   0.0008731   0.000340  -0.000126   0.000019   0.000020  0.0000022  0.0000055    0.000140    0.000215
+2011  12  26  55921   0.129575   0.267432  -0.4107022   0.0010590   0.000402  -0.000161   0.000019   0.000020  0.0000022  0.0000052    0.000151    0.000227
+2011  12  27  55922   0.127687   0.266757  -0.4118681   0.0012761   0.000465  -0.000187   0.000019   0.000020  0.0000022  0.0000050    0.000162    0.000239
+2011  12  28  55923   0.126148   0.266352  -0.4132189   0.0014129   0.000526  -0.000202   0.000019   0.000020  0.0000038  0.0000050    0.000173    0.000252
+2011  12  29  55924   0.124444   0.265677  -0.4146747   0.0014905   0.000537  -0.000169   0.000019   0.000021  0.0000238  0.0000052    0.000176    0.000268
+2011  12  30  55925   0.122715   0.264897  -0.4162016   0.0015042   0.000527  -0.000119   0.000019   0.000021  0.0000034  0.0000052    0.000179    0.000283
+2011  12  31  55926   0.120760   0.264166  -0.4176734   0.0014123   0.000525  -0.000087   0.000019   0.000021  0.0000065  0.0000053    0.000160    0.000257
+2012   1   1  55927   0.118700   0.263209  -0.4190307   0.0012643   0.000520  -0.000064   0.000019   0.000021  0.0000070  0.0000055    0.000134    0.000215
+2012   1   2  55928   0.117478   0.262407  -0.4202660   0.0011668   0.000506  -0.000044   0.000018   0.000020  0.0000043  0.0000055    0.000107    0.000169
+2012   1   3  55929   0.115947   0.261649  -0.4213914   0.0010732   0.000487  -0.000035   0.000018   0.000020  0.0000046  0.0000055    0.000080    0.000127
+2012   1   4  55930   0.114546   0.260620  -0.4223894   0.0009431   0.000464  -0.000036   0.000018   0.000019  0.0000024  0.0000054    0.000056    0.000088
+2012   1   5  55931   0.113261   0.260200  -0.4232747   0.0008274   0.000424  -0.000073   0.000018   0.000019  0.0000140  0.0000054    0.000076    0.000121
+2012   1   6  55932   0.111438   0.259932  -0.4240546   0.0007439   0.000381  -0.000125   0.000018   0.000019  0.0000031  0.0000054    0.000109    0.000174
+2012   1   7  55933   0.108883   0.259664  -0.4247816   0.0007242   0.000348  -0.000141   0.000018   0.000019  0.0000036  0.0000053    0.000109    0.000170
+2012   1   8  55934   0.106429   0.258874  -0.4255338   0.0007866   0.000325  -0.000147   0.000018   0.000019  0.0000056  0.0000055    0.000096    0.000144
+2012   1   9  55935   0.104225   0.258041  -0.4263648   0.0009020   0.000308  -0.000153   0.000019   0.000021  0.0000066  0.0000055    0.000083    0.000118
+2012   1  10  55936   0.101787   0.257252  -0.4272859   0.0009794   0.000299  -0.000161   0.000019   0.000021  0.0000030  0.0000055    0.000071    0.000092
+2012   1  11  55937   0.099783   0.256002  -0.4283517   0.0011310   0.000296  -0.000196   0.000019   0.000020  0.0000152  0.0000055    0.000082    0.000108
+2012   1  12  55938   0.098374   0.255057  -0.4295936   0.0013295   0.000299  -0.000236   0.000019   0.000020  0.0000041  0.0000053    0.000097    0.000135
+2012   1  13  55939   0.097330   0.254481  -0.4310036   0.0014854   0.000308  -0.000272   0.000019   0.000020  0.0000029  0.0000053    0.000113    0.000162
+2012   1  14  55940   0.096133   0.254325  -0.4325201   0.0015230   0.000307  -0.000270   0.000019   0.000020  0.0000058  0.0000052    0.000109    0.000157
+2012   1  15  55941   0.094902   0.254379  -0.4340233   0.0014555   0.000303  -0.000252   0.000019   0.000020  0.0000076  0.0000033    0.000098    0.000139
+2012   1  16  55942   0.093576   0.254528  -0.4354233   0.0013370   0.000298  -0.000223   0.000020   0.000020  0.0000063  0.0000014    0.000031    0.000043
+2012   1  17  55943   0.091710   0.254906  -0.4366664   0.0011580   0.000295  -0.000201   0.000020   0.000020  0.0000040  0.0000014    0.000029    0.000041
+2012   1  18  55944   0.089569   0.254798  -0.4377220   0.0009552   0.000292  -0.000183   0.000019   0.000020  0.0000012  0.0000014    0.000028    0.000040
+2012   1  19  55945   0.087373   0.254461  -0.4385853   0.0007743   0.000356  -0.000209   0.000019   0.000020  0.0000219  0.0000014    0.000040    0.000049
+2012   1  20  55946   0.085428   0.254180  -0.4393168   0.0006897   0.000431  -0.000250   0.000019   0.000020  0.0000042  0.0000014    0.000056    0.000062
+2012   1  21  55947   0.083249   0.254651  -0.4400245   0.0007410   0.000439  -0.000289   0.000019   0.000020  0.0000024  0.0000014    0.000063    0.000071
+2012   1  22  55948   0.080627   0.254924  -0.4408023   0.0008370   0.000401  -0.000323   0.000019   0.000020  0.0000042  0.0000011    0.000065    0.000077
+2012   1  23  55949   0.078598   0.255078  -0.4416951   0.0009573   0.000353  -0.000351   0.000019   0.000020  0.0000056  0.0000010    0.000068    0.000085
+2012   1  24  55950   0.076541   0.255624  -0.4427049   0.0010539   0.000302  -0.000373   0.000019   0.000020  0.0000028  0.0000010    0.000070    0.000091
+2012   1  25  55951   0.074227   0.255806  -0.4437962   0.0011148   0.000253  -0.000351   0.000018   0.000019  0.0000151  0.0000010    0.000079    0.000101
+2012   1  26  55952   0.071900   0.256092  -0.4449204   0.0011189   0.000212  -0.000312   0.000018   0.000019  0.0000071  0.0000010    0.000088    0.000111
+2012   1  27  55953   0.069358   0.256156  -0.4460334   0.0010883   0.000181  -0.000266   0.000018   0.000019  0.0000025  0.0000010    0.000098    0.000120
+2012   1  28  55954   0.066770   0.256221  -0.4470732   0.0010003   0.000207  -0.000237   0.000018   0.000019  0.0000154  0.0000010    0.000089    0.000109
+2012   1  29  55955   0.064294   0.256203  -0.4479982   0.0008641   0.000260  -0.000216   0.000018   0.000019  0.0000049  0.0000012    0.000073    0.000090
+2012   1  30  55956   0.061824   0.255972  -0.4487993   0.0007511   0.000316  -0.000195   0.000019   0.000021  0.0000048  0.0000017    0.000056    0.000071
+2012   1  31  55957   0.059292   0.255822  -0.4494656   0.0006002   0.000376  -0.000179   0.000019   0.000021  0.0000020  0.0000017    0.000041    0.000052
+2012   2   1  55958   0.056906   0.255521  -0.4499897   0.0004580   0.000404  -0.000155   0.000019   0.000020  0.0000026  0.0000015    0.000036    0.000046
+2012   2   2  55959   0.054725   0.255253  -0.4504155   0.0003937   0.000416  -0.000138   0.000019   0.000020  0.0000040  0.0000015    0.000035    0.000045
+2012   2   3  55960   0.052998   0.254824  -0.4508189   0.0004269   0.000416  -0.000134   0.000019   0.000018  0.0000018  0.0000015    0.000034    0.000044
+2012   2   4  55961   0.051408   0.254365  -0.4512567   0.0004943   0.000404  -0.000161   0.000019   0.000018  0.0000196  0.0000015    0.000038    0.000041
+2012   2   5  55962   0.049333   0.254085  -0.4517747   0.0005607   0.000378  -0.000204   0.000019   0.000020  0.0000080  0.0000015    0.000043    0.000037
+2012   2   6  55963   0.047368   0.254001  -0.4524402   0.0007546   0.000308  -0.000278   0.000022   0.000023  0.0000070  0.0000017    0.000030    0.000040
+2012   2   7  55964   0.045706   0.254220  -0.4533091   0.0009995   0.000258  -0.000330   0.000022   0.000023  0.0000023  0.0000017    0.000028    0.000038
+2012   2   8  55965   0.044328   0.254546  -0.4544131   0.0012229   0.000299  -0.000339   0.000021   0.000022  0.0000350  0.0000016    0.000034    0.000046
+2012   2   9  55966   0.043192   0.255056  -0.4557227   0.0013892   0.000362  -0.000331   0.000021   0.000022  0.0000087  0.0000016    0.000042    0.000056
+2012   2  10  55967   0.042172   0.255797  -0.4571640   0.0014757   0.000422  -0.000316   0.000021   0.000022  0.0000028  0.0000016    0.000050    0.000067
+2012   2  11  55968   0.041276   0.256690  -0.4586395   0.0014643   0.000361  -0.000304   0.000021   0.000022  0.0000103  0.0000016    0.000049    0.000067
+2012   2  12  55969   0.040311   0.257438  -0.4600560   0.0013481   0.000255  -0.000290   0.000021   0.000022  0.0000090  0.0000014    0.000046    0.000063
+2012   2  13  55970   0.038861   0.258102  -0.4613256   0.0011742   0.000149  -0.000272   0.000022   0.000025  0.0000081  0.0000012    0.000043    0.000061
+2012   2  14  55971   0.037082   0.258631  -0.4623763   0.0009157   0.000050  -0.000258   0.000022   0.000025  0.0000030  0.0000012    0.000041    0.000057
+2012   2  15  55972   0.035700   0.259565  -0.4631795   0.0006923   0.000089  -0.000259   0.000021   0.000024  0.0000638  0.0000012    0.000040    0.000057
+2012   2  16  55973   0.034328   0.260928  -0.4637969   0.0005548   0.000168  -0.000266   0.000021   0.000024  0.0000067  0.0000012    0.000040    0.000057
+2012   2  17  55974   0.033052   0.261952  -0.4643422   0.0005356   0.000251  -0.000278   0.000021   0.000024  0.0000019  0.0000012    0.000040    0.000057
+2012   2  18  55975   0.031627   0.263077  -0.4649159   0.0006173   0.000243  -0.000280   0.000021   0.000024  0.0000033  0.0000012    0.000052    0.000074
+2012   2  19  55976   0.030595   0.263990  -0.4655836   0.0007289   0.000201  -0.000280   0.000021   0.000024  0.0000052  0.0000014    0.000068    0.000096
+2012   2  20  55977   0.029688   0.265055  -0.4663655   0.0008446   0.000148  -0.000275   0.000023   0.000028  0.0000060  0.0000018    0.000085    0.000120
+2012   2  21  55978   0.028345   0.265672  -0.4672390   0.0008971   0.000106  -0.000277   0.000023   0.000028  0.0000052  0.0000018    0.000101    0.000142
+2012   2  22  55979   0.026675   0.266316  -0.4681516   0.0009304   0.000069  -0.000276   0.000022   0.000027  0.0000027  0.0000018    0.000116    0.000160
+2012   2  23  55980   0.024689   0.267060  -0.4690540   0.0008475   0.000138  -0.000287   0.000022   0.000027  0.0000198  0.0000018    0.000091    0.000126
+2012   2  24  55981   0.022814   0.267829  -0.4698906   0.0007513   0.000232  -0.000299   0.000022   0.000027  0.0000016  0.0000018    0.000055    0.000076
+2012   2  25  55982   0.021568   0.268920  -0.4706253   0.0006815   0.000242  -0.000344   0.000022   0.000027  0.0000028  0.0000018    0.000049    0.000068
+2012   2  26  55983   0.020597   0.270273  -0.4712585   0.0005631   0.000213  -0.000396   0.000022   0.000027  0.0000063  0.0000018    0.000055    0.000076
+2012   2  27  55984   0.020119   0.271192  -0.4718084   0.0005016   0.000167  -0.000441   0.000027   0.000030  0.0000069  0.0000019    0.000061    0.000083
+2012   2  28  55985   0.019720   0.271968  -0.4722734   0.0004154   0.000125  -0.000477   0.000027   0.000030  0.0000024  0.0000019    0.000067    0.000091
+2012   2  29  55986   0.019069   0.273018  -0.4726379   0.0003138   0.000115  -0.000438   0.000026   0.000030  0.0000356  0.0000019    0.000085    0.000127
+2012   3   1  55987   0.018798   0.274244  -0.4729194   0.0002463   0.000113  -0.000373   0.000023   0.000025  0.0000086  0.0000022    0.000113    0.000171
+2012   3   2  55988   0.018937   0.275646  -0.4731884   0.0002932   0.000111  -0.000303   0.000023   0.000025  0.0000040  0.0000022    0.000141    0.000216
+2012   3   3  55989   0.018563   0.277173  -0.4735285   0.0003928   0.000089  -0.000259   0.000023   0.000025  0.0000039  0.0000022    0.000136    0.000192
+2012   3   4  55990   0.017782   0.278172  -0.4739946   0.0005434   0.000063  -0.000232   0.000023   0.000025  0.0000043  0.0000022    0.000120    0.000144
+2012   3   5  55991   0.017387   0.279057  -0.4746191   0.0007031   0.000063  -0.000317   0.000021   0.000024  0.0000040  0.0000021    0.000114    0.000146
+2012   3   6  55992   0.016938   0.279996  -0.4754440   0.0009276   0.000053  -0.000354   0.000021   0.000024  0.0000023  0.0000021    0.000103    0.000126
+2012   3   7  55993   0.015713   0.280781  -0.4764778   0.0011170   0.000055  -0.000372   0.000021   0.000023  0.0000253  0.0000021    0.000089    0.000107
+2012   3   8  55994   0.014414   0.281463  -0.4776973   0.0012909   0.000064  -0.000383   0.000021   0.000023  0.0000110  0.0000021    0.000072    0.000087
+2012   3   9  55995   0.013219   0.282526  -0.4790665   0.0014230   0.000076  -0.000390   0.000021   0.000023  0.0000027  0.0000021    0.000056    0.000068
+2012   3  10  55996   0.012112   0.283779  -0.4805270   0.0014563   0.000089  -0.000393   0.000021   0.000023  0.0000048  0.0000021    0.000054    0.000065
+2012   3  11  55997   0.011081   0.285000  -0.4819953   0.0014503   0.000101  -0.000387   0.000021   0.000023  0.0000064  0.0000021    0.000056    0.000069
+2012   3  12  55998   0.009693   0.286339  -0.4833724   0.0012916   0.000111  -0.000366   0.000022   0.000024  0.0000076  0.0000023    0.000060    0.000074
+2012   3  13  55999   0.008716   0.287402  -0.4846160   0.0011775   0.000115  -0.000333   0.000022   0.000024  0.0000076  0.0000023    0.000062    0.000077
+2012   3  14  56000   0.007787   0.288851  -0.4857658   0.0011305   0.000113  -0.000287   0.000021   0.000023  0.0000023  0.0000022    0.000066    0.000081
+2012   3  15  56001   0.006396   0.290088  -0.4868843   0.0011365   0.000123  -0.000261   0.000021   0.000023  0.0000239  0.0000022    0.000051    0.000067
+2012   3  16  56002   0.004961   0.291305  -0.4880525   0.0012366   0.000131  -0.000237   0.000021   0.000023  0.0000022  0.0000022    0.000033    0.000048
+2012   3  17  56003   0.003408   0.292453  -0.4893520   0.0013827   0.000134  -0.000231   0.000021   0.000023  0.0000060  0.0000022    0.000032    0.000048
+2012   3  18  56004   0.001664   0.293818  -0.4907959   0.0014974   0.000132  -0.000232   0.000021   0.000023  0.0000098  0.0000022    0.000039    0.000056
+2012   3  19  56005  -0.000066   0.295068  -0.4923400   0.0015768   0.000127  -0.000233   0.000021   0.000024  0.0000088  0.0000023    0.000045    0.000064
+2012   3  20  56006  -0.001503   0.295981  -0.4939230   0.0015941   0.000118  -0.000230   0.000021   0.000024  0.0000033  0.0000023    0.000052    0.000071
+2012   3  21  56007  -0.002628   0.296959  -0.4954831   0.0015507   0.000104  -0.000200   0.000020   0.000023  0.0000308  0.0000022    0.000047    0.000066
+2012   3  22  56008  -0.003668   0.298210  -0.4969786   0.0014646   0.000091  -0.000163   0.000020   0.000023  0.0000074  0.0000022    0.000040    0.000057
+2012   3  23  56009  -0.004461   0.299582  -0.4983959   0.0013760   0.000078  -0.000125   0.000020   0.000023  0.0000032  0.0000022    0.000033    0.000048
+2012   3  24  56010  -0.004601   0.300921  -0.4997354   0.0013061   0.000129  -0.000121   0.000020   0.000023  0.0000040  0.0000022    0.000031    0.000045
+2012   3  25  56011  -0.005048   0.302625  -0.5009856   0.0012063   0.000203  -0.000130   0.000020   0.000023  0.0000065  0.0000018    0.000031    0.000045
+2012   3  26  56012  -0.005769   0.303991  -0.5021345   0.0011041   0.000295  -0.000150   0.000020   0.000024  0.0000060  0.0000015    0.000030    0.000043
+2012   3  27  56013  -0.006669   0.305064  -0.5031977   0.0010361   0.000361  -0.000174   0.000020   0.000024  0.0000022  0.0000015    0.000030    0.000042
+2012   3  28  56014  -0.007584   0.305823  -0.5042043   0.0010024   0.000324  -0.000259   0.000019   0.000023  0.0000037  0.0000015    0.000043    0.000058
+2012   3  29  56015  -0.008111   0.307058  -0.5051893   0.0009960   0.000254  -0.000355   0.000019   0.000023  0.0000051  0.0000015    0.000057    0.000076
+2012   3  30  56016  -0.008824   0.308790  -0.5061999   0.0010312   0.000176  -0.000439   0.000019   0.000023  0.0000024  0.0000015    0.000072    0.000093
+2012   3  31  56017  -0.009569   0.310658  -0.5072863   0.0011621   0.000149  -0.000438   0.000019   0.000023  0.0000018  0.0000015    0.000076    0.000103
+2012   4   1  56018  -0.010272   0.312753  -0.5085085   0.0013212   0.000142  -0.000392   0.000019   0.000023  0.0000044  0.0000018    0.000077    0.000111
+2012   4   2  56019  -0.011351   0.314853  -0.5098935   0.0014645   0.000136  -0.000317   0.000020   0.000023  0.0000059  0.0000023    0.000068    0.000114
+2012   4   3  56020  -0.012264   0.316855  -0.5114393   0.0016464   0.000140  -0.000253   0.000020   0.000023  0.0000029  0.0000023    0.000068    0.000121
+2012   4   4  56021  -0.012896   0.318655  -0.5131549   0.0017876   0.000264  -0.000234   0.000019   0.000022  0.0000241  0.0000023    0.000072    0.000128
+2012   4   5  56022  -0.013364   0.320312  -0.5149928   0.0018599   0.000415  -0.000232   0.000019   0.000022  0.0000019  0.0000023    0.000076    0.000134
+2012   4   6  56023  -0.013715   0.322168  -0.5168595   0.0018563   0.000421  -0.000251   0.000019   0.000022  0.0000202  0.0000023    0.000072    0.000129
+2012   4   7  56024  -0.013652   0.324149  -0.5186314   0.0016680   0.000362  -0.000280   0.000021   0.000022  0.0000088  0.0000023    0.000066    0.000120
+2012   4   8  56025  -0.013097   0.325975  -0.5202021   0.0014264   0.000289  -0.000309   0.000021   0.000022  0.0000079  0.0000023    0.000060    0.000110
+2012   4   9  56026  -0.012284   0.327886  -0.5215395   0.0012179   0.000207  -0.000296   0.000020   0.000023  0.0000069  0.0000023    0.000053    0.000102
+2012   4  10  56027  -0.011627   0.330100  -0.5226753   0.0010577   0.000112  -0.000322   0.000020   0.000023  0.0000046  0.0000023    0.000047    0.000093
+2012   4  11  56028  -0.010886   0.332532  -0.5236983   0.0009927   0.000018  -0.000346   0.000020   0.000022  0.0000028  0.0000022    0.000038    0.000083
+2012   4  12  56029  -0.009896   0.334821  -0.5247296   0.0010518  -0.000003  -0.000367   0.000020   0.000022  0.0000184  0.0000022    0.000027    0.000058
+2012   4  13  56030  -0.008876   0.337102  -0.5258404   0.0011597   0.000004  -0.000382   0.000020   0.000022  0.0000026  0.0000022    0.000014    0.000029
+2012   4  14  56031  -0.008011   0.339146  -0.5270311   0.0012156   0.000001  -0.000389   0.000020   0.000022  0.0000041  0.0000022    0.000014    0.000028
+2012   4  15  56032  -0.007230   0.341115  -0.5282793   0.0012592   0.000002  -0.000387   0.000020   0.000022  0.0000066  0.0000022    0.000019    0.000037
+2012   4  16  56033  -0.006329   0.342951  -0.5295673   0.0013069   0.000012  -0.000375   0.000020   0.000023  0.0000048  0.0000024    0.000027    0.000047
+2012   4  17  56034  -0.005199   0.344926  -0.5308783   0.0013224   0.000030  -0.000365   0.000020   0.000023  0.0000015  0.0000024    0.000033    0.000056
+2012   4  18  56035  -0.004236   0.347145  -0.5321965   0.0013050   0.000049  -0.000340   0.000022   0.000024  0.0000216  0.0000024    0.000035    0.000059
+2012   4  19  56036  -0.003430   0.349499  -0.5334911   0.0012692   0.000068  -0.000312   0.000022   0.000024  0.0000034  0.0000024    0.000036    0.000061
+2012   4  20  56037  -0.002859   0.351929  -0.5347248   0.0011976   0.000088  -0.000285   0.000022   0.000024  0.0000015  0.0000024    0.000038    0.000064
+2012   4  21  56038  -0.002364   0.354154  -0.5358613   0.0010735   0.000084  -0.000298   0.000022   0.000024  0.0000184  0.0000024    0.000034    0.000058
+2012   4  22  56039  -0.001494   0.356002  -0.5368881   0.0009847   0.000070  -0.000325   0.000022   0.000024  0.0000048  0.0000024    0.000029    0.000048
+2012   4  23  56040  -0.000272   0.357958  -0.5378074   0.0008768   0.000053  -0.000345   0.000022   0.000026  0.0000056  0.0000102    0.000024    0.000040
+2012   4  24  56041   0.000653   0.359920  -0.5386339   0.0007777   0.000033  -0.000357   0.000022   0.000026  0.0000020  0.0000102    0.000018    0.000030
+2012   4  25  56042   0.001379   0.361760  -0.5394047   0.0007599   0.000097  -0.000332   0.000021   0.000026  0.0000238  0.0000100    0.000051    0.000046
+2012   4  26  56043   0.002156   0.363391  -0.5401645   0.0007562   0.000179  -0.000290   0.000021   0.000026  0.0000078  0.0000100    0.000095    0.000069
+2012   4  27  56044   0.003382   0.364806  -0.5409514   0.0008113   0.000255  -0.000242   0.000021   0.000026  0.0000102  0.0000100    0.000138    0.000091
+2012   4  28  56045   0.004355   0.366218  -0.5417935   0.0008890   0.000002   0.000002   0.000021   0.000026  0.0000085  0.0000099    0.000087    0.000081
+2012   4  29  56046   0.005295   0.367419  -0.5427026   0.0009543   0.000002   0.000002   0.000021   0.000026  0.0000075  0.0000099    0.000065    0.000075
+2012   4  30  56047   0.006321   0.368720  -0.5436860   0.0010777  -0.000016  -0.000254   0.000022   0.000027  0.0000081  0.0000104    0.000034    0.000061
+2012   5   1  56048   0.007701   0.369896  -0.5448627   0.0012836  -0.000072  -0.000241   0.000022   0.000027  0.0000060  0.0000104    0.000034    0.000061
+2012   5   2  56049   0.009214   0.370867  -0.5462259   0.0014206  -0.000130  -0.000252   0.000021   0.000026  0.0000038  0.0000099    0.000039    0.000071
+2012   5   3  56050   0.010546   0.371897  -0.5476981   0.0014781  -0.000174  -0.000257   0.000021   0.000026  0.0000011  0.0000095    0.000042    0.000076
+2012   5   4  56051   0.011863   0.373233  -0.5491911   0.0014524  -0.000124  -0.000430   0.000021   0.000026  0.0000003  0.0000099    0.000029    0.000053
+2012   5   5  56052   0.013328   0.374713  -0.5505806   0.0013560  -0.000128  -0.000496   0.000021   0.000026  0.0000124  0.0000101    0.000029    0.000050
+2012   5   6  56053   0.015115   0.376289  -0.5519143   0.0011972  -0.000156  -0.000490   0.000021   0.000026  0.0000108  0.0000097    0.000035    0.000058
+2012   5   7  56054   0.016308   0.378006  -0.5529813   0.0009654  -0.000176  -0.000452   0.000021   0.000029  0.0000082  0.0000099    0.000039    0.000065
+2012   5   8  56055   0.016994   0.379387  -0.5538805   0.0008582  -0.000188  -0.000415   0.000021   0.000029  0.0000023  0.0000095    0.000045    0.000072
+2012   5   9  56056   0.017569   0.380756  -0.5546775   0.0008585  -0.000164  -0.000381   0.000020   0.000027  0.0000084  0.0000087    0.000039    0.000065
+2012   5  10  56057   0.017690   0.381913  -0.5555654   0.0008893  -0.000129  -0.000348   0.000020   0.000027  0.0000094  0.0000087    0.000032    0.000055
+2012   5  11  56058   0.017780   0.382703  -0.5564987   0.0009321  -0.000094  -0.000313   0.000020   0.000027  0.0000021  0.0000090    0.000024    0.000045
+2012   5  12  56059   0.018358   0.383365  -0.5574634   0.0009890  -0.000051  -0.000324   0.000020   0.000027  0.0000147  0.0000093    0.000022    0.000042
+2012   5  13  56060   0.019698   0.384038  -0.5584999   0.0010488  -0.000011  -0.000353   0.000020   0.000027  0.0000130  0.0000089    0.000021    0.000041
+2012   5  14  56061   0.021579   0.384748  -0.5595554   0.0010784   0.000021  -0.000379   0.000018   0.000021  0.0000075  0.0000086    0.000021    0.000041
+2012   5  15  56062   0.023673   0.385619  -0.5606062   0.0010969   0.000040  -0.000404   0.000016   0.000018  0.0000026  0.0000086    0.000021    0.000041
+2012   5  16  56063   0.025895   0.386691  -0.5617379   0.0010618  -0.000032  -0.000384   0.000015   0.000020  0.0000114  0.0000082    0.000029    0.000040
+2012   5  17  56064   0.027811   0.387502  -0.5626890   0.0009536  -0.000129  -0.000346   0.000015   0.000020  0.0000068  0.0000079    0.000041    0.000040
+2012   5  18  56065   0.029234   0.388335  -0.5636053   0.0008258  -0.000223  -0.000299   0.000017   0.000022  0.0000037  0.0000078    0.000053    0.000040
+2012   5  19  56066   0.030346   0.388884  -0.5643392   0.0006682  -0.000226  -0.000250   0.000019   0.000025  0.0000060  0.0000080    0.000053    0.000037
+2012   5  20  56067   0.031434   0.389058  -0.5649455   0.0005017  -0.000186  -0.000199   0.000017   0.000022  0.0000061  0.0000078    0.000047    0.000034
+2012   5  21  56068   0.032275   0.389282  -0.5653980   0.0004082  -0.000137  -0.000147   0.000016   0.000022  0.0000118  0.0000074    0.000042    0.000031
+2012   5  22  56069   0.033210   0.389771  -0.5657928   0.0004042  -0.000078  -0.000097   0.000016   0.000022  0.0000061  0.0000074    0.000037    0.000027
+2012   5  23  56070   0.034221   0.390526  -0.5661696   0.0004037  -0.000073  -0.000096   0.000015   0.000021  0.0000111  0.0000074    0.000035    0.000029
+2012   5  24  56071   0.035455   0.391205  -0.5665821   0.0004431  -0.000082  -0.000117   0.000015   0.000021  0.0000075  0.0000074    0.000040    0.000033
+2012   5  25  56072   0.037074   0.391898  -0.5670903   0.0005170  -0.000093  -0.000149   0.000015   0.000021  0.0000039  0.0000074    0.000045    0.000037
+2012   5  26  56073   0.039082   0.392483  -0.5677077   0.0006670  -0.000100  -0.000185   0.000015   0.000021  0.0000159  0.0000073    0.000046    0.000038
+2012   5  27  56074   0.041109   0.393177  -0.5684351   0.0008057  -0.000108  -0.000221   0.000015   0.000021  0.0000142  0.0000073    0.000045    0.000038
+2012   5  28  56075   0.042920   0.393837  -0.5693419   0.0009406  -0.000102  -0.000231   0.000016   0.000022  0.0000129  0.0000072    0.000054    0.000039
+2012   5  29  56076   0.044706   0.394674  -0.5703691   0.0010727  -0.000112  -0.000261   0.000016   0.000022  0.0000088  0.0000072    0.000053    0.000039
+2012   5  30  56077   0.045635   0.395458  -0.5714640   0.0011683  -0.000124  -0.000283   0.000015   0.000021  0.0000045  0.0000071    0.000050    0.000038
+2012   5  31  56078   0.046295   0.395962  -0.5726044   0.0012286  -0.000105  -0.000410   0.000018   0.000022  0.0000062  0.0000077    0.000029    0.000057
+2012   6   1  56079   0.046904   0.396529  -0.5738579   0.0011900  -0.000126  -0.000424   0.000018   0.000022  0.0000020  0.0000077    0.000023    0.000038
+2012   6   2  56080   0.047752   0.397169  -0.5750136   0.0010731  -0.000151  -0.000414   0.000018   0.000022  0.0000048  0.0000077    0.000023    0.000035
+2012   6   3  56081   0.048883   0.397593  -0.5759777   0.0008980  -0.000177  -0.000388   0.000018   0.000022  0.0000064  0.0000080    0.000024    0.000037
+2012   6   4  56082   0.050164   0.397885  -0.5768206   0.0007145  -0.000202  -0.000346   0.000016   0.000021  0.0000066  0.0000082    0.000026    0.000041
+2012   6   5  56083   0.051748   0.398092  -0.5774835   0.0006022  -0.000224  -0.000306   0.000016   0.000021  0.0000049  0.0000082    0.000027    0.000043
+2012   6   6  56084   0.053303   0.398675  -0.5780250   0.0006101  -0.000244  -0.000266   0.000015   0.000021  0.0000020  0.0000077    0.000028    0.000046
+2012   6   7  56085   0.054801   0.398944  -0.5786822   0.0007000  -0.000230  -0.000265   0.000015   0.000021  0.0000117  0.0000074    0.000028    0.000046
+2012   6   8  56086   0.056559   0.399505  -0.5794676   0.0008186  -0.000203  -0.000275   0.000015   0.000021  0.0000033  0.0000071    0.000028    0.000045
+2012   6   9  56087   0.058236   0.400027  -0.5803155   0.0008893  -0.000203  -0.000290   0.000015   0.000021  0.0000142  0.0000074    0.000028    0.000046
+2012   6  10  56088   0.059975   0.400443  -0.5812728   0.0008809  -0.000211  -0.000305   0.000015   0.000021  0.0000086  0.0000071    0.000028    0.000047
+2012   6  11  56089   0.061732   0.401401  -0.5820705   0.0008119  -0.000212  -0.000315   0.000017   0.000022  0.0000092  0.0000067    0.000029    0.000048
+2012   6  12  56090   0.063526   0.402509  -0.5828366   0.0007430  -0.000207  -0.000316   0.000017   0.000022  0.0000080  0.0000067    0.000029    0.000049
+2012   6  13  56091   0.064962   0.403874  -0.5835287   0.0006265  -0.000191  -0.000301   0.000017   0.000021  0.0000021  0.0000065    0.000031    0.000053
+2012   6  14  56092   0.065967   0.404715  -0.5840927   0.0004785  -0.000165  -0.000228   0.000017   0.000021  0.0000055  0.0000065    0.000032    0.000057
+2012   6  15  56093   0.066912   0.405172  -0.5844996   0.0003328  -0.000133  -0.000135   0.000017   0.000021  0.0000019  0.0000062    0.000034    0.000063
+2012   6  16  56094   0.067613   0.405417  -0.5847645   0.0002061  -0.000137  -0.000153   0.000017   0.000021  0.0000080  0.0000065    0.000043    0.000076
+2012   6  17  56095   0.068671   0.405618  -0.5849684   0.0001149  -0.000158  -0.000216   0.000017   0.000021  0.0000088  0.0000071    0.000056    0.000091
+2012   6  18  56096   0.070078   0.405863  -0.5850269   0.0000151  -0.000188  -0.000289   0.000018   0.000022  0.0000090  0.0000077    0.000065    0.000103
+2012   6  19  56097   0.071947   0.406222  -0.5849518  -0.0000577  -0.000219  -0.000356   0.000018   0.000022  0.0000044  0.0000077    0.000075    0.000115
+2012   6  20  56098   0.073719   0.406799  -0.5848340  -0.0000932  -0.000227  -0.000336   0.000016   0.000022  0.0000025  0.0000079    0.000060    0.000099
+2012   6  21  56099   0.075527   0.407342  -0.5847583  -0.0000777  -0.000228  -0.000283   0.000016   0.000022  0.0000019  0.0000079    0.000047    0.000079
+2012   6  22  56100   0.077422   0.407945  -0.5847443  -0.0000077  -0.000231  -0.000226   0.000016   0.000022  0.0000013  0.0000076    0.000033    0.000059
+2012   6  23  56101   0.078904   0.408461  -0.5848059   0.0001223  -0.000278  -0.000220   0.000016   0.000022  0.0000160  0.0000075    0.000033    0.000057
+2012   6  24  56102   0.080862   0.408502  -0.5850064   0.0002569  -0.000337  -0.000230   0.000016   0.000022  0.0000086  0.0000075    0.000037    0.000061
+2012   6  25  56103   0.083114   0.408517  -0.5853030   0.0003872  -0.000388  -0.000240   0.000017   0.000022  0.0000104  0.0000074    0.000041    0.000065
+2012   6  26  56104   0.085285   0.408564  -0.5857136   0.0004553  -0.000429  -0.000250   0.000015   0.000019  0.0000044  0.0000073    0.000045    0.000068
+2012   6  27  56105   0.087439   0.408651  -0.5861801   0.0004176  -0.000400  -0.000254   0.000014   0.000018  0.0000136  0.0000073    0.000037    0.000055
+2012   6  28  56106   0.089473   0.409002  -0.5865662   0.0003057  -0.000345  -0.000256   0.000014   0.000018  0.0000077  0.0000073    0.000025    0.000038
+2012   6  29  56107   0.091346   0.409225  -0.5867776   0.0001678  -0.000281  -0.000255   0.000014   0.000018  0.0000018  0.0000073    0.000013    0.000021
+2012   6  30  56108   0.092800   0.409392  -0.5868238   0.0000012  -0.000256  -0.000237   0.000014   0.000018  0.0000449  0.0000076    0.000014    0.000021
+2012   7   1  56109   0.094064   0.409151   0.4131816  -0.0001241  -0.000242  -0.000210   0.000014   0.000018  0.0000122  0.0000075    0.000019    0.000029
+2012   7   2  56110   0.095640   0.408939   0.4133963  -0.0002276  -0.000216  -0.000170   0.000019   0.000022  0.0000087  0.0000073    0.000024    0.000037
+2012   7   3  56111   0.097268   0.408650   0.4136688  -0.0002157  -0.000206  -0.000143   0.000019   0.000022  0.0000024  0.0000073    0.000029    0.000044
+2012   7   4  56112   0.098946   0.408274   0.4137809  -0.0001348  -0.000183  -0.000148   0.000018   0.000023  0.0000153  0.0000072    0.000030    0.000046
+2012   7   5  56113   0.100502   0.407981   0.4138739  -0.0000409  -0.000162  -0.000166   0.000018   0.000023  0.0000091  0.0000072    0.000031    0.000046
+2012   7   6  56114   0.102491   0.407531   0.4138922   0.0000899  -0.000148  -0.000186   0.000018   0.000023  0.0000028  0.0000072    0.000031    0.000046
+2012   7   7  56115   0.105059   0.407518   0.4137229   0.0002019  -0.000176  -0.000200   0.000018   0.000023  0.0000161  0.0000072    0.000029    0.000044
+2012   7   8  56116   0.107683   0.407590   0.4134589   0.0002824  -0.000218  -0.000209   0.000018   0.000023  0.0000124  0.0000072    0.000027    0.000042
+2012   7   9  56117   0.110089   0.407731   0.4131662   0.0002979  -0.000255  -0.000213   0.000017   0.000020  0.0000076  0.0000075    0.000026    0.000040
+2012   7  10  56118   0.111864   0.407792   0.4128977   0.0002350  -0.000282  -0.000210   0.000015   0.000018  0.0000019  0.0000074    0.000023    0.000037
+2012   7  11  56119   0.113448   0.407539   0.4127029   0.0001164  -0.000265  -0.000220   0.000018   0.000021  0.0000126  0.0000070    0.000021    0.000034
+2012   7  12  56120   0.114869   0.407288   0.4126306  -0.0000738  -0.000230  -0.000229   0.000018   0.000021  0.0000106  0.0000070    0.000019    0.000031
+2012   7  13  56121   0.116662   0.407013   0.4128536  -0.0002246  -0.000191  -0.000231   0.000018   0.000021  0.0000027  0.0000070    0.000017    0.000028
+2012   7  14  56122   0.118293   0.407111   0.4131009  -0.0002932  -0.000196  -0.000193   0.000022   0.000023  0.0000082  0.0000075    0.000018    0.000031
+2012   7  15  56123   0.119936   0.407332   0.4133776  -0.0003112  -0.000214  -0.000137   0.000022   0.000023  0.0000052  0.0000078    0.000021    0.000035
+2012   7  16  56124   0.121393   0.407270   0.4137799  -0.0003142  -0.000219  -0.000077   0.000020   0.000023  0.0000117  0.0000075    0.000024    0.000040
+2012   7  17  56125   0.122814   0.407047   0.4140680  -0.0002586  -0.000231  -0.000023   0.000020   0.000023  0.0000040  0.0000072    0.000027    0.000044
+2012   7  18  56126   0.124435   0.406840   0.4141897  -0.0001211  -0.000188  -0.000023   0.000019   0.000021  0.0000055  0.0000072    0.000026    0.000042
+2012   7  19  56127   0.126239   0.406643   0.4142080   0.0000848  -0.000135  -0.000040   0.000019   0.000021  0.0000034  0.0000072    0.000024    0.000038
+2012   7  20  56128   0.127745   0.406264   0.4140650   0.0002780  -0.000089  -0.000063   0.000019   0.000021  0.0000013  0.0000072    0.000023    0.000035
+2012   7  21  56129   0.129227   0.405785   0.4137358   0.0003926  -0.000102  -0.000089   0.000019   0.000021  0.0000051  0.0000072    0.000030    0.000035
+2012   7  22  56130   0.130787   0.405125   0.4132710   0.0004882  -0.000138  -0.000117   0.000019   0.000021  0.0000047  0.0000072    0.000041    0.000037
+2012   7  23  56131   0.132387   0.404523   0.4127181   0.0005677  -0.000169  -0.000247   0.000018   0.000021  0.0000041  0.0000069    0.000023    0.000033
+2012   7  24  56132   0.133932   0.404018   0.4121307   0.0005665  -0.000200  -0.000303   0.000018   0.000021  0.0000014  0.0000069    0.000022    0.000033
+2012   7  25  56133   0.135614   0.403272   0.4115946   0.0005071  -0.000246  -0.000239   0.000017   0.000020  0.0000139  0.0000066    0.000018    0.000028
+2012   7  26  56134   0.137280   0.402524   0.4110659   0.0004115  -0.000296  -0.000133   0.000017   0.000020  0.0000084  0.0000066    0.000017    0.000024
+2012   7  27  56135   0.138993   0.401814   0.4107666   0.0002750  -0.000338  -0.000018   0.000017   0.000020  0.0000020  0.0000066    0.000015    0.000019
+2012   7  28  56136   0.140920   0.401178   0.4105485   0.0001827  -0.000365   0.000037   0.000017   0.000020  0.0000078  0.0000069    0.000016    0.000019
+2012   7  29  56137   0.142506   0.401049   0.4104218   0.0001033  -0.000378   0.000066   0.000223   0.000101  0.0000051  0.0000270    0.000016    0.000021
+2012   7  30  56138   0.143480   0.400692   0.4103389   0.0000898  -0.000352   0.000113   0.000020   0.000022  0.0000102  0.0000081    0.000095    0.000050
+2012   7  31  56139   0.144625   0.400215   0.4102122   0.0001944  -0.000361   0.000129   0.000020   0.000022  0.0000100  0.0000081    0.000095    0.000052
+2012   8   1  56140   0.145946   0.399829   0.4099390   0.0003125  -0.000243  -0.000097   0.000020   0.000023  0.0000101  0.0000079    0.000013    0.000017
+2012   8   2  56141   0.147315   0.399345   0.4095109   0.0004448  -0.000259  -0.000018   0.000020   0.000023  0.0000248  0.0000080    0.000018    0.000023
+2012   8   3  56142   0.148473   0.398802   0.4090457   0.0005349  -0.000267   0.000054   0.000020   0.000023  0.0000056  0.0000080    0.000024    0.000030
+2012   8   4  56143   0.149249   0.398140   0.4084970   0.0005555  -0.000253   0.000091   0.000020   0.000023  0.0000047  0.0000079    0.000027    0.000034
+2012   8   5  56144   0.149979   0.397590   0.4078980   0.0005695  -0.000229   0.000114   0.000020   0.000023  0.0000052  0.0000076    0.000029    0.000037
+2012   8   6  56145   0.150671   0.397024   0.4074006   0.0005046  -0.000323   0.000025   0.000020   0.000023  0.0000178  0.0000075    0.000028    0.000035
+2012   8   7  56146   0.151467   0.396333   0.4069557   0.0003400  -0.000340  -0.000001   0.000020   0.000023  0.0000060  0.0000075    0.000029    0.000036
+2012   8   8  56147   0.152500   0.395877   0.4066848   0.0001660  -0.000288   0.000044   0.000019   0.000022  0.0000130  0.0000079    0.000032    0.000041
+2012   8   9  56148   0.153731   0.395218   0.4065725   0.0000398  -0.000217   0.000103   0.000019   0.000022  0.0000146  0.0000079    0.000036    0.000046
+2012   8  10  56149   0.155332   0.394230   0.4065859  -0.0000282  -0.000147   0.000157   0.000019   0.000022  0.0000036  0.0000076    0.000039    0.000052
+2012   8  11  56150   0.156948   0.393425   0.4066744  -0.0000903  -0.000136   0.000116   0.000019   0.000022  0.0000088  0.0000079    0.000038    0.000050
+2012   8  12  56151   0.158540   0.392912   0.4068334  -0.0001849  -0.000149   0.000040   0.000019   0.000022  0.0000101  0.0000078    0.000035    0.000045
+2012   8  13  56152   0.160221   0.392335   0.4070462  -0.0001930  -0.000153  -0.000034   0.000020   0.000023  0.0000134  0.0000075    0.000033    0.000040
+2012   8  14  56153   0.162134   0.391867   0.4071880  -0.0000865  -0.000175  -0.000110   0.000020   0.000023  0.0000041  0.0000075    0.000030    0.000035
+2012   8  15  56154   0.163362   0.391425   0.4072338   0.0000221  -0.000192  -0.000108   0.000019   0.000022  0.0000178  0.0000073    0.000027    0.000031
+2012   8  16  56155   0.164337   0.390714   0.4071029   0.0001697  -0.000213  -0.000081   0.000019   0.000022  0.0000102  0.0000073    0.000023    0.000028
+2012   8  17  56156   0.165627   0.389979   0.4068344   0.0003544  -0.000237  -0.000049   0.000019   0.000022  0.0000025  0.0000073    0.000019    0.000025
+2012   8  18  56157   0.167118   0.389033   0.4064603   0.0005000  -0.000252  -0.000046   0.000019   0.000022  0.0000222  0.0000073    0.000017    0.000022
+2012   8  19  56158   0.168597   0.387928   0.4058641   0.0006231  -0.000264  -0.000053   0.000024   0.000027  0.0000098  0.0000069    0.000014    0.000019
+2012   8  20  56159   0.169942   0.386763   0.4051827   0.0006640  -0.000273  -0.000058   0.000023   0.000026  0.0000150  0.0000059    0.000012    0.000016
+2012   8  21  56160   0.171298   0.385398   0.4044970   0.0006236  -0.000283  -0.000061   0.000023   0.000026  0.0000044  0.0000059    0.000010    0.000013
+2012   8  22  56161   0.172368   0.384295   0.4039089   0.0005211  -0.000301  -0.000077   0.000023   0.000027  0.0000107  0.0000060    0.000014    0.000019
+2012   8  23  56162   0.173431   0.383057   0.4034457   0.0003728  -0.000321  -0.000093   0.000021   0.000025  0.0000130  0.0000060    0.000021    0.000028
+2012   8  24  56163   0.174105   0.382028   0.4031042   0.0002330  -0.000337  -0.000107   0.000025   0.000025  0.0000031  0.0000066    0.000028    0.000037
+2012   8  25  56164   0.174644   0.380911   0.4029126   0.0001327  -0.000362  -0.000095   0.000027   0.000025  0.0000127  0.0000066    0.000035    0.000047
+2012   8  26  56165   0.175245   0.379956   0.4027897   0.0001302  -0.000384  -0.000070   0.000219   0.000124  0.0000091  0.0000255    0.000041    0.000058
+2012   8  27  56166   0.175637   0.378763   0.4025922   0.0002565  -0.000394  -0.000041   0.000029   0.000030  0.0000075  0.0000065    0.000049    0.000065
+2012   8  28  56167   0.176051   0.377272   0.4022464   0.0004426  -0.000394  -0.000012   0.000029   0.000030  0.0000023  0.0000061    0.000055    0.000075
+2012   8  29  56168   0.176396   0.375751   0.4017502   0.0006084  -0.000357  -0.000015   0.000029   0.000029  0.0000144  0.0000069    0.000047    0.000066
+2012   8  30  56169   0.176738   0.374268   0.4010153   0.0007421  -0.000303  -0.000027   0.000029   0.000029  0.0000074  0.0000069    0.000034    0.000046
+2012   8  31  56170   0.177099   0.373095   0.4002225   0.0008255  -0.000245  -0.000040   0.000027   0.000029  0.0000018  0.0000066    0.000020    0.000025
+2012   9   1  56171   0.177275   0.371957   0.3993713   0.0008531  -0.000176  -0.000026   0.000025   0.000026  0.0000068  0.0000063    0.000018    0.000021
+2012   9   2  56172   0.176992   0.370856   0.3985346   0.0008164  -0.000110  -0.000004   0.000025   0.000026  0.0000062  0.0000060    0.000019    0.000024
+2012   9   3  56173   0.176650   0.369576   0.3977350   0.0007865  -0.000057   0.000019   0.000022   0.000025  0.0000038  0.0000060    0.000021    0.000027
+2012   9   4  56174   0.176375   0.368337   0.3969768   0.0006557  -0.000013   0.000037   0.000022   0.000025  0.0000021  0.0000060    0.000022    0.000030
+2012   9   5  56175   0.176227   0.366835   0.3964221   0.0004809   0.000018   0.000054   0.000024   0.000024  0.0000010  0.0000068    0.000024    0.000033
+2012   9   6  56176   0.176079   0.365318   0.3960766   0.0003651  -0.000030   0.000018   0.000024   0.000024  0.0000127  0.0000078    0.000026    0.000038
+2012   9   7  56177   0.175947   0.363610   0.3957532   0.0002873  -0.000106  -0.000029   0.000024   0.000026  0.0000033  0.0000085    0.000029    0.000042
+2012   9   8  56178   0.175877   0.362235   0.3954737   0.0001969  -0.000136  -0.000033   0.000022   0.000024  0.0000111  0.0000071    0.000027    0.000040
+2012   9   9  56179   0.175770   0.360924   0.3953274   0.0002235  -0.000150  -0.000016   0.000020   0.000022  0.0000063  0.0000065    0.000024    0.000036
+2012   9  10  56180   0.175594   0.359634   0.3950609   0.0003344  -0.000162   0.000006   0.000019   0.000024  0.0000054  0.0000067    0.000021    0.000031
+2012   9  11  56181   0.175696   0.358288   0.3946589   0.0004786  -0.000174   0.000033   0.000019   0.000024  0.0000015  0.0000070    0.000018    0.000026
+2012   9  12  56182   0.176007   0.357211   0.3940966   0.0006534  -0.000177   0.000074   0.000017   0.000025  0.0000098  0.0000072    0.000021    0.000031
+2012   9  13  56183   0.176196   0.356139   0.3933510   0.0008391  -0.000176   0.000117   0.000017   0.000025  0.0000047  0.0000069    0.000025    0.000036
+2012   9  14  56184   0.176741   0.355007   0.3923733   0.0010866  -0.000168   0.000155   0.000017   0.000023  0.0000017  0.0000065    0.000029    0.000041
+2012   9  15  56185   0.177425   0.353913   0.3911818   0.0013191  -0.000191   0.000147   0.000017   0.000023  0.0000124  0.0000193    0.000031    0.000042
+2012   9  16  56186   0.177784   0.352812   0.3897334   0.0014194  -0.000218   0.000119   0.000017   0.000023  0.0000065  0.0000233    0.000031    0.000043
+2012   9  17  56187   0.177802   0.351932   0.3883459   0.0014015  -0.000241   0.000068   0.000017   0.000023  0.0000066  0.0000234    0.000031    0.000042
+2012   9  18  56188   0.177737   0.350812   0.3869787   0.0012928  -0.000246   0.000034   0.000017   0.000023  0.0000022  0.0000335    0.000027    0.000036
+2012   9  19  56189   0.177452   0.349704   0.3857794   0.0011324  -0.000193   0.000041   0.000017   0.000026  0.0000089  0.0000326    0.000027    0.000040
+2012   9  20  56190   0.177149   0.348196   0.3847136   0.0009374  -0.000120   0.000064   0.000017   0.000026  0.0000054  0.0000272    0.000029    0.000044
+2012   9  21  56191   0.176564   0.346359   0.3838781   0.0007399  -0.000049   0.000094   0.000017   0.000026  0.0000020  0.0000059    0.000032    0.000049
+2012   9  22  56192   0.176120   0.344589   0.3832650   0.0006562  -0.000048   0.000110   0.000017   0.000026  0.0000213  0.0000694    0.000030    0.000046
+2012   9  23  56193   0.175882   0.343246   0.3825801   0.0006935  -0.000078   0.000122   0.000015   0.000026  0.0000082  0.0000825    0.000025    0.000040
+2012   9  24  56194   0.175608   0.342116   0.3818287   0.0007769  -0.000112   0.000136   0.000016   0.000032  0.0000050  0.0000066    0.000022    0.000035
+2012   9  25  56195   0.174962   0.341530   0.3810195   0.0009283  -0.000151   0.000149   0.000018   0.000032  0.0000013  0.0000072    0.000018    0.000029
+2012   9  26  56196   0.173929   0.341108   0.3799844   0.0011293  -0.000145   0.000177   0.000018   0.000029  0.0000145  0.0000070    0.000018    0.000031
+2012   9  27  56197   0.173095   0.340541   0.3787985   0.0012887  -0.000128   0.000206   0.000018   0.000029  0.0000066  0.0000064    0.000021    0.000034
+2012   9  28  56198   0.172110   0.339831   0.3774630   0.0013459  -0.000112   0.000229   0.000018   0.000027  0.0000018  0.0000057    0.000024    0.000037
+2012   9  29  56199   0.170690   0.338621   0.3761286   0.0013303  -0.000110   0.000207   0.000018   0.000029  0.0000067  0.0000061    0.000025    0.000041
+2012   9  30  56200   0.169484   0.336658   0.3748316   0.0012338  -0.000112   0.000169   0.000018   0.000029  0.0000106  0.0000061    0.000026    0.000045
+2012  10   1  56201   0.168893   0.334488   0.3736748   0.0010666  -0.000113   0.000127   0.000020   0.000029  0.0000062  0.0000061    0.000028    0.000049
+2012  10   2  56202   0.168556   0.332869   0.3726886   0.0008843  -0.000118   0.000091   0.000017   0.000027  0.0000021  0.0000064    0.000029    0.000054
+2012  10   3  56203   0.168261   0.331527   0.3719108   0.0007204  -0.000140   0.000111   0.000019   0.000027  0.0000085  0.0000059    0.000029    0.000050
+2012  10   4  56204   0.168218   0.330668   0.3712561   0.0006217  -0.000165   0.000148   0.000019   0.000027  0.0000187  0.0000056    0.000027    0.000044
+2012  10   5  56205   0.167775   0.329688   0.3706736   0.0005530  -0.000188   0.000189   0.000019   0.000027  0.0000043  0.0000053    0.000025    0.000038
+2012  10   6  56206   0.166829   0.328457   0.3701593   0.0005139  -0.000180   0.000203   0.000019   0.000027  0.0000253  0.0000053    0.000028    0.000043
+2012  10   7  56207   0.165776   0.327262   0.3696645   0.0005181  -0.000157   0.000207   0.000019   0.000027  0.0000081  0.0000059    0.000034    0.000053
+2012  10   8  56208   0.164811   0.326195   0.3691114   0.0006293  -0.000128   0.000192   0.000019   0.000033  0.0000027  0.0000060    0.000038    0.000064
+2012  10   9  56209   0.163850   0.325275   0.3684334   0.0007981  -0.000105   0.000184   0.000016   0.000030  0.0000205  0.0000053    0.000045    0.000075
+2012  10  10  56210   0.162665   0.324057   0.3675127   0.0009569  -0.000086   0.000176   0.000015   0.000030  0.0000296  0.0000053    0.000051    0.000085
+2012  10  11  56211   0.161680   0.322876   0.3664814   0.0011412  -0.000070   0.000166   0.000017   0.000030  0.0000053  0.0000059    0.000056    0.000095
+2012  10  12  56212   0.160551   0.322152   0.3652754   0.0013041  -0.000107   0.000125   0.000019   0.000030  0.0000001  0.0000059    0.000023    0.000038
+2012  10  13  56213   0.159093   0.321446   0.3638545   0.0014383  -0.000146   0.000121   0.000017   0.000030  0.0000110  0.0000056    0.000010    0.000017
+2012  10  14  56214   0.157601   0.320568   0.3623838   0.0015090  -0.000178   0.000136   0.000017   0.000030  0.0000069  0.0000060    0.000010    0.000016
+2012  10  15  56215   0.156054   0.319968   0.3608963   0.0014698  -0.000204   0.000141   0.000022   0.000032  0.0000087  0.0000066    0.000009    0.000015
+2012  10  16  56216   0.154180   0.319360   0.3594887   0.0013351  -0.000221   0.000160   0.000020   0.000032  0.0000017  0.0000063    0.000008    0.000014
+2012  10  17  56217   0.152154   0.318297   0.3582199   0.0011582  -0.000164   0.000188   0.000018   0.000032  0.0000113  0.0000060    0.000008    0.000014
+2012  10  18  56218   0.150678   0.317253   0.3571501   0.0009695  -0.000085   0.000219   0.000016   0.000030  0.0000201  0.0000058    0.000008    0.000013
+2012  10  19  56219   0.149569   0.316662   0.3562671   0.0008218  -0.000007   0.000251   0.000018   0.000033  0.0000044  0.0000061    0.000008    0.000013
+2012  10  20  56220   0.148043   0.316131   0.3554928   0.0007675   0.000026   0.000253   0.000020   0.000033  0.0000085  0.0000061    0.000013    0.000024
+2012  10  21  56221   0.146608   0.315322   0.3547440   0.0007928   0.000035   0.000246   0.000020   0.000033  0.0000061  0.0000067    0.000021    0.000039
+2012  10  22  56222   0.145543   0.314380   0.3538588   0.0008641   0.000032   0.000236   0.000021   0.000033  0.0000060  0.0000069    0.000029    0.000055
+2012  10  23  56223   0.145007   0.313268   0.3530058   0.0009556   0.000020   0.000224   0.000021   0.000030  0.0000018  0.0000059    0.000037    0.000071
+2012  10  24  56224   0.145213   0.312435   0.3519872   0.0010597  -0.000030   0.000219   0.000022   0.000029  0.0000066  0.0000057    0.000043    0.000080
+2012  10  25  56225   0.145615   0.311852   0.3509033   0.0011278  -0.000092   0.000220   0.000020   0.000030  0.0000041  0.0000054    0.000049    0.000087
+2012  10  26  56226   0.145955   0.311525   0.3497695   0.0011597  -0.000150   0.000221   0.000017   0.000030  0.0000016  0.0000051    0.000054    0.000095
+2012  10  27  56227   0.146089   0.311350   0.3485935   0.0011237  -0.000144   0.000245   0.000017   0.000027  0.0000118  0.0000051    0.000052    0.000092
+2012  10  28  56228   0.145902   0.311464   0.3474828   0.0010661  -0.000109   0.000273   0.000017   0.000027  0.0000142  0.0000051    0.000046    0.000084
+2012  10  29  56229   0.144985   0.311623   0.3464489   0.0009639  -0.000067   0.000294   0.000018   0.000028  0.0000077  0.0000058    0.000040    0.000075
+2012  10  30  56230   0.144143   0.311322   0.3455521   0.0008863  -0.000020   0.000307   0.000018   0.000028  0.0000012  0.0000058    0.000034    0.000068
+2012  10  31  56231   0.143952   0.311344   0.3446854   0.0008094  -0.000003   0.000307   0.000018   0.000027  0.0000110  0.0000060    0.000029    0.000057
+2012  11   1  56232   0.143335   0.311322   0.3439558   0.0007282   0.000011   0.000307   0.000018   0.000027  0.0000078  0.0000060    0.000025    0.000045
+2012  11   2  56233   0.142496   0.311202   0.3432281   0.0007022   0.000026   0.000308   0.000018   0.000027  0.0000018  0.0000056    0.000020    0.000033
+2012  11   3  56234   0.141501   0.311090   0.3425405   0.0007021   0.000075   0.000329   0.000018   0.000027  0.0000043  0.0000056    0.000031    0.000053
+2012  11   4  56235   0.140655   0.310338   0.3417878   0.0008071   0.000132   0.000359   0.000018   0.000024  0.0000070  0.0000056    0.000047    0.000086
+2012  11   5  56236   0.139661   0.309499   0.3409540   0.0008889   0.000173   0.000366   0.000018   0.000023  0.0000056  0.0000058    0.000063    0.000121
+2012  11   6  56237   0.138701   0.308399   0.3400027   0.0010174   0.000208   0.000380   0.000018   0.000026  0.0000016  0.0000058    0.000079    0.000154
+2012  11   7  56238   0.138146   0.307641   0.3389408   0.0011536   0.000179   0.000341   0.000017   0.000026  0.0000081  0.0000061    0.000066    0.000128
+2012  11   8  56239   0.137681   0.306960   0.3377096   0.0012756   0.000113   0.000267   0.000017   0.000026  0.0000151  0.0000061    0.000046    0.000087
+2012  11   9  56240   0.137470   0.306697   0.3363673   0.0013616   0.000042   0.000190   0.000019   0.000026  0.0000035  0.0000065    0.000025    0.000047
+2012  11  10  56241   0.136415   0.306862   0.3349822   0.0014158   0.000013   0.000190   0.000019   0.000026  0.0000117  0.0000065    0.000021    0.000038
+2012  11  11  56242   0.135140   0.306608   0.3335328   0.0014946   0.000001   0.000216   0.000017   0.000026  0.0000114  0.0000057    0.000023    0.000042
+2012  11  12  56243   0.134281   0.306265   0.3320174   0.0015146  -0.000006   0.000233   0.000018   0.000027  0.0000078  0.0000060    0.000026    0.000045
+2012  11  13  56244   0.133366   0.305787   0.3305276   0.0014486  -0.000004   0.000257   0.000018   0.000027  0.0000017  0.0000060    0.000028    0.000049
+2012  11  14  56245   0.132333   0.305606   0.3291377   0.0013427   0.000034   0.000230   0.000017   0.000026  0.0000061  0.0000060    0.000031    0.000054
+2012  11  15  56246   0.131284   0.305387   0.3278387   0.0012898   0.000085   0.000191   0.000017   0.000026  0.0000094  0.0000060    0.000035    0.000060
+2012  11  16  56247   0.130376   0.305026   0.3265250   0.0012852   0.000137   0.000156   0.000017   0.000026  0.0000022  0.0000060    0.000039    0.000066
+2012  11  17  56248   0.129972   0.304514   0.3252155   0.0013455   0.000130   0.000153   0.000017   0.000026  0.0000050  0.0000060    0.000035    0.000059
+2012  11  18  56249   0.129616   0.304629   0.3237804   0.0015122   0.000098   0.000164   0.000017   0.000026  0.0000057  0.0000060    0.000028    0.000048
+2012  11  19  56250   0.128850   0.304488   0.3221868   0.0016714   0.000064   0.000177   0.000020   0.000036  0.0000111  0.0000063    0.000022    0.000037
+2012  11  20  56251   0.127719   0.304116   0.3204734   0.0017408   0.000031   0.000198   0.000020   0.000036  0.0000033  0.0000063    0.000016    0.000025
+2012  11  21  56252   0.126270   0.303725   0.3187318   0.0017465   0.000117   0.000183   0.000017   0.000030  0.0000002  0.0000058    0.000025    0.000045
+2012  11  22  56253   0.124830   0.303039   0.3170010   0.0017007   0.000157   0.000215   0.000017   0.000030  0.0000085  0.0000058    0.000026    0.000048
+2012  11  23  56254   0.123682   0.302270   0.3153139   0.0016361   0.000166   0.000263   0.000017   0.000030  0.0000077  0.0000058    0.000023    0.000041
+2012  11  24  56255   0.122815   0.301758   0.3137377   0.0015098   0.000168   0.000299   0.000017   0.000030  0.0000068  0.0000061    0.000020    0.000035
+2012  11  25  56256   0.121446   0.301305   0.3123183   0.0013572   0.000163   0.000323   0.000017   0.000030  0.0000058  0.0000061    0.000017    0.000028
+2012  11  26  56257   0.120330   0.300698   0.3110089   0.0012209   0.000138   0.000319   0.000018   0.000035  0.0000068  0.0000059    0.000014    0.000022
+2012  11  27  56258   0.120111   0.300372   0.3098756   0.0010843   0.000131   0.000330   0.000018   0.000035  0.0000017  0.0000059    0.000010    0.000016
+2012  11  28  56259   0.119773   0.300632   0.3088455   0.0009915   0.000130   0.000313   0.000017   0.000036  0.0000170  0.0000060    0.000010    0.000014
+2012  11  29  56260   0.119249   0.300583   0.3079206   0.0009233   0.000132   0.000285   0.000017   0.000036  0.0000051  0.0000060    0.000009    0.000013
+2012  11  30  56261   0.118883   0.300539   0.3070117   0.0008703   0.000135   0.000252   0.000017   0.000036  0.0000011  0.0000060    0.000009    0.000013
+2012  12   1  56262   0.118435   0.300220   0.3061411   0.0009115   0.000149   0.000219   0.000017   0.000036  0.0000048  0.0000060    0.000012    0.000018
+2012  12   2  56263   0.117747   0.299784   0.3051720   0.0010053   0.000166   0.000188   0.000017   0.000032  0.0000059  0.0000060    0.000017    0.000025
+2012  12   3  56264   0.116649   0.299475   0.3041420   0.0010707   0.000179   0.000159   0.000019   0.000031  0.0000051  0.0000062    0.000022    0.000031
+2012  12   4  56265   0.115800   0.299221   0.3030426   0.0011420   0.000189   0.000137   0.000019   0.000035  0.0000013  0.0000062    0.000027    0.000038
+2012  12   5  56266   0.115161   0.299515   0.3018303   0.0012547   0.000172   0.000142   0.000018   0.000034  0.0000154  0.0000060    0.000024    0.000039
+2012  12   6  56267   0.114070   0.299438   0.3005523   0.0013252   0.000143   0.000154   0.000018   0.000034  0.0000087  0.0000060    0.000020    0.000039
+2012  12   7  56268   0.112562   0.299270   0.2991894   0.0013649   0.000111   0.000168   0.000020   0.000034  0.0000020  0.0000064    0.000017    0.000038
+2012  12   8  56269   0.110757   0.299082   0.2977818   0.0013447   0.000094   0.000184   0.000020   0.000034  0.0000138  0.0000064    0.000015    0.000034
+2012  12   9  56270   0.109587   0.298335   0.2964589   0.0013415   0.000082   0.000195   0.000018   0.000034  0.0000101  0.0000056    0.000013    0.000028
+2012  12  10  56271   0.108678   0.297733   0.2951313   0.0013011   0.000070   0.000200   0.000018   0.000034  0.0000070  0.0000055    0.000012    0.000022
+2012  12  11  56272   0.107369   0.297098   0.2938971   0.0011538   0.000060   0.000199   0.000018   0.000034  0.0000013  0.0000059    0.000010    0.000016
+2012  12  12  56273   0.106168   0.296689   0.2928453   0.0010051   0.000076   0.000244   0.000018   0.000031  0.0000203  0.0000059    0.000012    0.000024
+2012  12  13  56274   0.104749   0.296358   0.2919197   0.0009091   0.000103   0.000299   0.000018   0.000031  0.0000348  0.0000062    0.000016    0.000035
+2012  12  14  56275   0.103055   0.295597   0.2909741   0.0009133   0.000136   0.000349   0.000020   0.000033  0.0000075  0.0000069    0.000020    0.000045
+2012  12  15  56276   0.101061   0.294850   0.2899782   0.0009629   0.000165   0.000367   0.000020   0.000033  0.0000119  0.0000066    0.000023    0.000054
+2012  12  16  56277   0.098998   0.293924   0.2890035   0.0010471   0.000142   0.000299   0.000020   0.000033  0.0000090  0.0000062    0.000023    0.000048
+2012  12  17  56278   0.096862   0.293381   0.2879406   0.0010959   0.000142   0.000244   0.000021   0.000035  0.0000086  0.0000073    0.000023    0.000046
+2012  12  18  56279   0.094647   0.292659   0.2868441   0.0011422   0.000143   0.000193   0.000023   0.000035  0.0000050  0.0000076    0.000024    0.000044
+2012  12  19  56280   0.093111   0.291768   0.2857065   0.0011148   0.000145   0.000134   0.000019   0.000032  0.0000014  0.0000062    0.000025    0.000045
+2012  12  20  56281   0.091472   0.291349   0.2846565   0.0009436   0.000172   0.000145   0.000019   0.000032  0.0000084  0.0000059    0.000027    0.000046
+2012  12  21  56282   0.090028   0.291117   0.2837893   0.0007936   0.000205   0.000170   0.000022   0.000032  0.0000020  0.0000062    0.000034    0.000059
+2012  12  22  56283   0.088588   0.291159   0.2830603   0.0007287   0.000222   0.000170   0.000019   0.000032  0.0000111  0.0000062    0.000039    0.000072
+2012  12  23  56284   0.087501   0.290712   0.2823224   0.0006926   0.000234   0.000163   0.000019   0.000032  0.0000088  0.0000062    0.000044    0.000084
+2012  12  24  56285   0.086882   0.290363   0.2816902   0.0006156   0.000225   0.000157   0.000021   0.000030  0.0000068  0.0000064    0.000050    0.000098
+2012  12  25  56286   0.086339   0.290236   0.2811304   0.0005151   0.000234   0.000161   0.000018   0.000030  0.0000050  0.0000060    0.000054    0.000111
+2012  12  26  56287   0.085694   0.290416   0.2806345   0.0004547   0.000245   0.000166   0.000018   0.000029  0.0000032  0.0000059    0.000058    0.000124
+2012  12  27  56288   0.084727   0.290487   0.2801731   0.0004607   0.000254   0.000175   0.000020   0.000032  0.0000015  0.0000063    0.000062    0.000136
+2012  12  28  56289   0.082947   0.290475   0.2797111   0.0004567   0.000220   0.000199   0.000020   0.000032  0.0000003  0.0000063    0.000021    0.000044
+2012  12  29  56290   0.080756   0.290205   0.2792361   0.0005094   0.000233   0.000215   0.000018   0.000029  0.0000070  0.0000059    0.000010    0.000016
+2012  12  30  56291   0.079007   0.289959   0.2786180   0.0006577   0.000265   0.000224   0.000018   0.000029  0.0000093  0.0000059    0.000015    0.000023
+2012  12  31  56292   0.077238   0.289933   0.2778751   0.0007788   0.000286   0.000226   0.000018   0.000028  0.0000082  0.0000061    0.000019    0.000029
+2013   1   1  56293   0.075310   0.289856   0.2770907   0.0008953   0.000305   0.000222   0.000018   0.000028  0.0000053  0.0000061    0.000024    0.000036
+2013   1   2  56294   0.073304   0.289898   0.2761366   0.0010388   0.000311   0.000209   0.000017   0.000027  0.0000030  0.0000058    0.000029    0.000042
+2013   1   3  56295   0.071432   0.289699   0.2750374   0.0011460   0.000319   0.000191   0.000019   0.000027  0.0000008  0.0000058    0.000033    0.000048
+2013   1   4  56296   0.070098   0.289581   0.2738579   0.0012008   0.000213   0.000153   0.000017   0.000027  0.0000002  0.0000058    0.000016    0.000026
+2013   1   5  56297   0.069042   0.289567   0.2726572   0.0012058   0.000165   0.000115   0.000015   0.000027  0.0000120  0.0000058    0.000014    0.000027
+2013   1   6  56298   0.068196   0.289667   0.2714547   0.0011330   0.000149   0.000080   0.000015   0.000027  0.0000105  0.0000058    0.000020    0.000038
+2013   1   7  56299   0.067202   0.290066   0.2703787   0.0009866   0.000134   0.000048   0.000018   0.000029  0.0000061  0.0000060    0.000026    0.000050
+2013   1   8  56300   0.066292   0.290535   0.2694610   0.0008848   0.000121   0.000019   0.000020   0.000029  0.0000013  0.0000060    0.000032    0.000061
+2013   1   9  56301   0.065345   0.291314   0.2686011   0.0008299   0.000155   0.000022   0.000018   0.000028  0.0000093  0.0000058    0.000043    0.000074
+2013   1  10  56302   0.064410   0.292185   0.2677166   0.0008850   0.000206   0.000037   0.000016   0.000028  0.0000055  0.0000058    0.000056    0.000090
+2013   1  11  56303   0.063228   0.293001   0.2667804   0.0010202   0.000259   0.000058   0.000018   0.000028  0.0000017  0.0000058    0.000070    0.000106
+2013   1  12  56304   0.062007   0.293634   0.2657273   0.0011708   0.000285   0.000069   0.000020   0.000028  0.0000073  0.0000058    0.000067    0.000102
+2013   1  13  56305   0.060558   0.294295   0.2644642   0.0013139   0.000296   0.000074   0.000020   0.000031  0.0000051  0.0000065    0.000058    0.000091
+2013   1  14  56306   0.059312   0.295115   0.2630661   0.0014745   0.000297   0.000110   0.000018   0.000034  0.0000061  0.0000069    0.000051    0.000085
+2013   1  15  56307   0.058302   0.295904   0.2615439   0.0015341   0.000287   0.000095   0.000016   0.000031  0.0000067  0.0000061    0.000042    0.000073
+2013   1  16  56308   0.057049   0.296543   0.2600685   0.0014583   0.000263   0.000077   0.000016   0.000033  0.0000014  0.0000058    0.000022    0.000060
+2013   1  17  56309   0.055439   0.297309   0.2586723   0.0013456   0.000229   0.000066   0.000016   0.000068  0.0000098  0.0000058    0.000023    0.000060
+2013   1  18  56310   0.053948   0.298279   0.2573663   0.0012650   0.000190   0.000056   0.000016   0.000068  0.0000024  0.0000058    0.000027    0.000063
+2013   1  19  56311   0.052961   0.299392   0.2561193   0.0011997   0.000194   0.000064   0.000018   0.000033  0.0000077  0.0000062    0.000025    0.000059
+2013   1  20  56312   0.051723   0.300681   0.2549468   0.0011070   0.000215   0.000076   0.000021   0.000039  0.0000089  0.0000072    0.000021    0.000051
+2013   1  21  56313   0.050316   0.301866   0.2538462   0.0010660   0.000234   0.000086   0.000021   0.000039  0.0000078  0.0000072    0.000034    0.000045
+2013   1  22  56314   0.049409   0.302778   0.2527747   0.0010632   0.000254   0.000094   0.000017   0.000033  0.0000045  0.0000061    0.000027    0.000037
+2013   1  23  56315   0.048658   0.304062   0.2517351   0.0010777   0.000271   0.000100   0.000017   0.000031  0.0000010  0.0000059    0.000020    0.000030
+2013   1  24  56316   0.047848   0.305129   0.2506394   0.0011155   0.000190   0.000068   0.000017   0.000031  0.0000130  0.0000059    0.000078    0.000120
+2013   1  25  56317   0.047084   0.305881   0.2495234   0.0011164   0.000088   0.000024   0.000019   0.000034  0.0000021  0.0000063    0.000154    0.000236
+2013   1  26  56318   0.046371   0.306470   0.2483765   0.0011738   0.000088   0.000013   0.000021   0.000037  0.0000123  0.0000066    0.000148    0.000225
+2013   1  27  56319   0.045599   0.306874   0.2471377   0.0013068   0.000131   0.000012   0.000021   0.000034  0.0000038  0.0000066    0.000112    0.000168
+2013   1  28  56320   0.044918   0.307151   0.2457751   0.0014177   0.000178   0.000008   0.000020   0.000033  0.0000040  0.0000069    0.000079    0.000115
+2013   1  29  56321   0.044014   0.307627   0.2443075   0.0014914   0.000230   0.000004   0.000020   0.000033  0.0000016  0.0000069    0.000042    0.000056
+2013   1  30  56322   0.043132   0.308172   0.2427764   0.0015553   0.000260  -0.000025   0.000019   0.000033  0.0000141  0.0000071    0.000043    0.000054
+2013   1  31  56323   0.042804   0.309225   0.2412309   0.0015468   0.000282  -0.000061   0.000019   0.000036  0.0000052  0.0000071    0.000054    0.000066
+2013   2   1  56324   0.042402   0.310532   0.2397409   0.0014332   0.000298  -0.000099   0.000019   0.000033  0.0000015  0.0000071    0.000064    0.000079
+2013   2   2  56325   0.042573   0.311892   0.2383674   0.0012980   0.000286  -0.000135   0.000017   0.000030  0.0000095  0.0000067    0.000060    0.000074
+2013   2   3  56326   0.042527   0.313519   0.2371341   0.0011515   0.000261  -0.000167   0.000015   0.000030  0.0000039  0.0000060    0.000051    0.000064
+2013   2   4  56327   0.041943   0.314696   0.2360251   0.0010576   0.000228  -0.000193   0.000017   0.000031  0.0000039  0.0000066    0.000043    0.000054
+2013   2   5  56328   0.041026   0.315632   0.2350277   0.0009339   0.000195  -0.000211   0.000019   0.000031  0.0000015  0.0000070    0.000033    0.000043
+2013   2   6  56329   0.039925   0.316871   0.2341112   0.0009146   0.000182  -0.000204   0.000017   0.000029  0.0000103  0.0000068    0.000040    0.000050
+2013   2   7  56330   0.038904   0.318468   0.2331814   0.0009866   0.000177  -0.000184   0.000017   0.000029  0.0000027  0.0000068    0.000051    0.000061
+2013   2   8  56331   0.037461   0.319742   0.2321391   0.0011251   0.000177  -0.000157   0.000017   0.000032  0.0000015  0.0000068    0.000062    0.000073
+2013   2   9  56332   0.036213   0.320493   0.2309424   0.0012819   0.000175  -0.000138   0.000017   0.000035  0.0000131  0.0000069    0.000064    0.000075
+2013   2  10  56333   0.035528   0.321217   0.2296106   0.0013781   0.000173  -0.000119   0.000018   0.000034  0.0000037  0.0000074    0.000062    0.000075
+2013   2  11  56334   0.035202   0.322110   0.2281932   0.0014360   0.000177  -0.000098   0.000022   0.000033  0.0000058  0.0000071    0.000061    0.000074
+2013   2  12  56335   0.034936   0.323155   0.2267687   0.0013864   0.000187  -0.000076   0.000022   0.000030  0.0000059  0.0000067    0.000059    0.000073
+2013   2  13  56336   0.034437   0.324038   0.2254403   0.0012154   0.000197  -0.000057   0.000021   0.000035  0.0000012  0.0000066    0.000058    0.000072
+2013   2  14  56337   0.033839   0.324559   0.2242863   0.0010507   0.000219  -0.000002   0.000021   0.000038  0.0000162  0.0000070    0.000049    0.000063
+2013   2  15  56338   0.033896   0.325100   0.2232824   0.0009415   0.000245   0.000057   0.000019   0.000035  0.0000011  0.0000066    0.000037    0.000052
+2013   2  16  56339   0.033934   0.325933   0.2223836   0.0008336   0.000265   0.000057   0.000017   0.000032  0.0000189  0.0000062    0.000038    0.000053
+2013   2  17  56340   0.033677   0.326909   0.2215868   0.0007367   0.000282   0.000029   0.000019   0.000032  0.0000032  0.0000066    0.000042    0.000059
+2013   2  18  56341   0.033328   0.327848   0.2208980   0.0006401   0.000293  -0.000004   0.000019   0.000031  0.0000036  0.0000073    0.000049    0.000064
+2013   2  19  56342   0.033035   0.329142   0.2202777   0.0005919   0.000305  -0.000047   0.000019   0.000031  0.0000017  0.0000073    0.000053    0.000070
+2013   2  20  56343   0.032955   0.330293   0.2196491   0.0006588   0.000325  -0.000058   0.000020   0.000030  0.0000208  0.0000068    0.000056    0.000068
+2013   2  21  56344   0.032780   0.331394   0.2189361   0.0007661   0.000343  -0.000062   0.000020   0.000033  0.0000063  0.0000068    0.000059    0.000066
+2013   2  22  56345   0.032543   0.332411   0.2180799   0.0009389   0.000356  -0.000067   0.000022   0.000035  0.0000013  0.0000076    0.000062    0.000065
+2013   2  23  56346   0.032034   0.333397   0.2170537   0.0011245   0.000351  -0.000100   0.000022   0.000035  0.0000360  0.0000080    0.000061    0.000063
+2013   2  24  56347   0.031539   0.334330   0.2158533   0.0012915   0.000334  -0.000139   0.000022   0.000033  0.0000035  0.0000076    0.000060    0.000061
+2013   2  25  56348   0.030708   0.334905   0.2144766   0.0014607   0.000295  -0.000159   0.000023   0.000032  0.0000033  0.0000073    0.000057    0.000059
+2013   2  26  56349   0.029717   0.335104   0.2129240   0.0016352   0.000270  -0.000190   0.000023   0.000032  0.0000013  0.0000073    0.000056    0.000057
+2013   2  27  56350   0.029301   0.335794   0.2112407   0.0017303   0.000283  -0.000207   0.000028   0.000037  0.0000210  0.0000076    0.000064    0.000063
+2013   2  28  56351   0.029608   0.336794   0.2094895   0.0017399   0.000305  -0.000217   0.000028   0.000037  0.0000062  0.0000076    0.000074    0.000071
+2013   3   1  56352   0.030228   0.338132   0.2077371   0.0017242   0.000325  -0.000220   0.000028   0.000041  0.0000015  0.0000076    0.000084    0.000080
+2013   3   2  56353   0.030504   0.339745   0.2060790   0.0015855   0.000322  -0.000235   0.000026   0.000041  0.0000141  0.0000072    0.000100    0.000105
+2013   3   3  56354   0.030835   0.341230   0.2045416   0.0014922   0.000305  -0.000248   0.000026   0.000041  0.0000035  0.0000080    0.000118    0.000136
+2013   3   4  56355   0.031168   0.342793   0.2030631   0.0014730   0.000280  -0.000253   0.000023   0.000039  0.0000035  0.0000086    0.000138    0.000171
+2013   3   5  56356   0.031606   0.343977   0.2015976   0.0014735   0.000249  -0.000247   0.000023   0.000036  0.0000022  0.0000082    0.000156    0.000203
+2013   3   6  56357   0.032057   0.344980   0.2001138   0.0015136   0.000208  -0.000183   0.000021   0.000036  0.0000104  0.0000083    0.000134    0.000179
+2013   3   7  56358   0.032966   0.345676   0.1985635   0.0016159   0.000164  -0.000104   0.000021   0.000040  0.0000040  0.0000087    0.000103    0.000142
+2013   3   8  56359   0.034227   0.346404   0.1969090   0.0017065   0.000121  -0.000025   0.000021   0.000036  0.0000016  0.0000087    0.000072    0.000106
+2013   3   9  56360   0.035556   0.347362   0.1951480   0.0018239   0.000115   0.000018   0.000019   0.000033  0.0000151  0.0000083    0.000065    0.000095
+2013   3  10  56361   0.036631   0.348518   0.1932916   0.0019075   0.000127   0.000042   0.000019   0.000036  0.0000029  0.0000083    0.000067    0.000094
+2013   3  11  56362   0.037671   0.349957   0.1913827   0.0019055   0.000170   0.000068   0.000020   0.000037  0.0000062  0.0000084    0.000069    0.000094
+2013   3  12  56363   0.038804   0.351869   0.1894875   0.0018686   0.000194   0.000074   0.000018   0.000033  0.0000067  0.0000077    0.000071    0.000092
+2013   3  13  56364   0.039868   0.354087   0.1876517   0.0017802   0.000210   0.000075   0.000018   0.000034  0.0000012  0.0000075    0.000074    0.000092
+2013   3  14  56365   0.040502   0.355956   0.1859185   0.0016696   0.000240   0.000018   0.000018   0.000034  0.0000145  0.0000075    0.000066    0.000081
+2013   3  15  56366   0.040922   0.357387   0.1843097   0.0015444   0.000265  -0.000054   0.000016   0.000034  0.0000013  0.0000075    0.000056    0.000068
+2013   3  16  56367   0.040917   0.358605   0.1828274   0.0014094   0.000286  -0.000105   0.000018   0.000034  0.0000139  0.0000079    0.000059    0.000072
+2013   3  17  56368   0.041048   0.359554   0.1814609   0.0013064   0.000298  -0.000144   0.000020   0.000037  0.0000031  0.0000082    0.000067    0.000083
+2013   3  18  56369   0.041612   0.360244   0.1801933   0.0012257   0.000292  -0.000172   0.000022   0.000046  0.0000032  0.0000084    0.000075    0.000095
+2013   3  19  56370   0.042497   0.360690   0.1790038   0.0011488   0.000286  -0.000190   0.000022   0.000046  0.0000016  0.0000085    0.000083    0.000106
+2013   3  20  56371   0.043576   0.361269   0.1778524   0.0011518   0.000259  -0.000174   0.000021   0.000042  0.0000182  0.0000087    0.000074    0.000093
+2013   3  21  56372   0.044658   0.362180   0.1766940   0.0011941   0.000224  -0.000143   0.000021   0.000042  0.0000076  0.0000087    0.000062    0.000077
+2013   3  22  56373   0.045163   0.363185   0.1754806   0.0012650   0.000190  -0.000108   0.000021   0.000042  0.0000011  0.0000084    0.000050    0.000061
+2013   3  23  56374   0.045712   0.364433   0.1741466   0.0014234   0.000183  -0.000078   0.000021   0.000039  0.0000124  0.0000084    0.000044    0.000055
+2013   3  24  56375   0.046523   0.365546   0.1726579   0.0015763   0.000190  -0.000055   0.000021   0.000039  0.0000033  0.0000084    0.000041    0.000053
+2013   3  25  56376   0.047532   0.366900   0.1710171   0.0017087   0.000199  -0.000040   0.000024   0.000040  0.0000034  0.0000082    0.000032    0.000047
+2013   3  26  56377   0.048050   0.368190   0.1692350   0.0018537   0.000216  -0.000038   0.000024   0.000036  0.0000012  0.0000082    0.000030    0.000045
+2013   3  27  56378   0.048646   0.369461   0.1673193   0.0019571   0.000193  -0.000101   0.000024   0.000032  0.0000003  0.0000081    0.000035    0.000051
+2013   3  28  56379   0.049544   0.370878   0.1653462   0.0019493   0.000200  -0.000151   0.000021   0.000032  0.0000132  0.0000081    0.000035    0.000052
+2013   3  29  56380   0.050462   0.372076   0.1634083   0.0018880   0.000223  -0.000192   0.000021   0.000032  0.0000098  0.0000081    0.000034    0.000049
+2013   3  30  56381   0.051044   0.373287   0.1615621   0.0017866   0.000244  -0.000229   0.000021   0.000032  0.0000066  0.0000081    0.000032    0.000047
+2013   3  31  56382   0.051411   0.374395   0.1598229   0.0016822   0.000261  -0.000258   0.000021   0.000032  0.0000034  0.0000081    0.000031    0.000045
+2013   4   1  56383   0.051214   0.375299   0.1581763   0.0016152   0.000265  -0.000273   0.000023   0.000033  0.0000032  0.0000089    0.000029    0.000044
+2013   4   2  56384   0.050905   0.376037   0.1565882   0.0015642   0.000270  -0.000279   0.000023   0.000033  0.0000026  0.0000089    0.000028    0.000042
+2013   4   3  56385   0.050998   0.376745   0.1550193   0.0015665   0.000269  -0.000274   0.000020   0.000029  0.0000009  0.0000079    0.000027    0.000039
+2013   4   4  56386   0.051506   0.377383   0.1534214   0.0016313   0.000196  -0.000196   0.000020   0.000029  0.0000126  0.0000083    0.000029    0.000039
+2013   4   5  56387   0.052276   0.378082   0.1517328   0.0017658   0.000107  -0.000098   0.000020   0.000029  0.0000010  0.0000083    0.000033    0.000039
+2013   4   6  56388   0.052841   0.378754   0.1499249   0.0018676   0.000119  -0.000077   0.000018   0.000029  0.0000128  0.0000079    0.000030    0.000034
+2013   4   7  56389   0.053136   0.379352   0.1480361   0.0019019   0.000172  -0.000088   0.000018   0.000029  0.0000034  0.0000080    0.000023    0.000027
+2013   4   8  56390   0.053553   0.380052   0.1461365   0.0018727   0.000211  -0.000095   0.000023   0.000031  0.0000034  0.0000084    0.000017    0.000021
+2013   4   9  56391   0.054123   0.381208   0.1442935   0.0018016   0.000268  -0.000118   0.000026   0.000031  0.0000010  0.0000088    0.000010    0.000014
+2013   4  10  56392   0.054952   0.382367   0.1425544   0.0016754   0.000296  -0.000136   0.000023   0.000035  0.0000162  0.0000093    0.000017    0.000026
+2013   4  11  56393   0.055466   0.383473   0.1409548   0.0015061   0.000316  -0.000154   0.000023   0.000035  0.0000078  0.0000087    0.000027    0.000043
+2013   4  12  56394   0.055501   0.384248   0.1395110   0.0013579   0.000331  -0.000175   0.000023   0.000032  0.0000012  0.0000079    0.000037    0.000060
+2013   4  13  56395   0.055469   0.385068   0.1382134   0.0012326   0.000331  -0.000180   0.000023   0.000031  0.0000235  0.0000081    0.000048    0.000076
+2013   4  14  56396   0.055481   0.385646   0.1370305   0.0011411   0.000322  -0.000178   0.000023   0.000031  0.0000040  0.0000085    0.000060    0.000092
+2013   4  15  56397   0.055611   0.386035   0.1359184   0.0010907   0.000303  -0.000168   0.000025   0.000034  0.0000037  0.0000092    0.000072    0.000108
+2013   4  16  56398   0.055924   0.386392   0.1348169   0.0011174   0.000284  -0.000162   0.000025   0.000034  0.0000026  0.0000087    0.000084    0.000124
+2013   4  17  56399   0.056513   0.386975   0.1336791   0.0011618   0.000261  -0.000156   0.000022   0.000034  0.0000017  0.0000082    0.000105    0.000143
+2013   4  18  56400   0.057539   0.387547   0.1325125   0.0011964   0.000282  -0.000164   0.000019   0.000034  0.0000119  0.0000082    0.000080    0.000106
+2013   4  19  56401   0.058626   0.388699   0.1312775   0.0013092   0.000313  -0.000175   0.000019   0.000034  0.0000011  0.0000078    0.000045    0.000055
+2013   4  20  56402   0.059409   0.389916   0.1298980   0.0014732   0.000321  -0.000214   0.000022   0.000034  0.0000146  0.0000078    0.000037    0.000043
+2013   4  21  56403   0.060033   0.390944   0.1283636   0.0015956   0.000316  -0.000260   0.000022   0.000034  0.0000033  0.0000078    0.000039    0.000046
+2013   4  22  56404   0.061029   0.391927   0.1267085   0.0017050   0.000300  -0.000284   0.000018   0.000033  0.0000031  0.0000082    0.000040    0.000050
+2013   4  23  56405   0.062006   0.392789   0.1249559   0.0018000   0.000282  -0.000319   0.000016   0.000031  0.0000010  0.0000086    0.000042    0.000053
+2013   4  24  56406   0.062986   0.393349   0.1231388   0.0018280   0.000248  -0.000337   0.000019   0.000029  0.0000225  0.0000081    0.000094    0.000134
+2013   4  25  56407   0.063896   0.393885   0.1213194   0.0017907   0.000207  -0.000347   0.000022   0.000029  0.0000051  0.0000077    0.000160    0.000234
+2013   4  26  56408   0.064797   0.394217   0.1195726   0.0016971   0.000164  -0.000350   0.000024   0.000029  0.0000029  0.0000081    0.000226    0.000335
+2013   4  27  56409   0.065668   0.394751   0.1179550   0.0015370   0.000139  -0.000354   0.000024   0.000029  0.0000110  0.0000089    0.000206    0.000306
+2013   4  28  56410   0.066128   0.395232   0.1164902   0.0013879   0.000123  -0.000354   0.000024   0.000029  0.0000036  0.0000089    0.000156    0.000229
+2013   4  29  56411   0.066910   0.395496   0.1151226   0.0013580   0.000082  -0.000312   0.000022   0.000033  0.0000031  0.0000086    0.000103    0.000153
+2013   4  30  56412   0.067944   0.395987   0.1137639   0.0013742   0.000071  -0.000293   0.000020   0.000033  0.0000012  0.0000081    0.000051    0.000077
+2013   5   1  56413   0.069079   0.396187   0.1123734   0.0014241   0.000058  -0.000278   0.000018   0.000031  0.0000133  0.0000077    0.000042    0.000066
+2013   5   2  56414   0.070598   0.396865   0.1108968   0.0015399   0.000051  -0.000261   0.000020   0.000031  0.0000025  0.0000081    0.000044    0.000072
+2013   5   3  56415   0.072196   0.397607   0.1092979   0.0016617   0.000051  -0.000241   0.000022   0.000031  0.0000013  0.0000081    0.000046    0.000078
+2013   5   4  56416   0.073931   0.398142   0.1076280   0.0017014   0.000062  -0.000202   0.000020   0.000031  0.0000133  0.0000077    0.000047    0.000077
+2013   5   5  56417   0.075382   0.398690   0.1059460   0.0016757   0.000080  -0.000156   0.000020   0.000031  0.0000024  0.0000077    0.000047    0.000073
+2013   5   6  56418   0.076730   0.399162   0.1042827   0.0016511   0.000098  -0.000109   0.000021   0.000033  0.0000053  0.0000084    0.000047    0.000069
+2013   5   7  56419   0.077713   0.399520   0.1026651   0.0015729   0.000123  -0.000072   0.000021   0.000033  0.0000059  0.0000084    0.000047    0.000065
+2013   5   8  56420   0.078800   0.399676   0.1011258   0.0014570   0.000147  -0.000041   0.000020   0.000032  0.0000013  0.0000077    0.000045    0.000059
+2013   5   9  56421   0.080181   0.400159   0.0997499   0.0012809   0.000097  -0.000090   0.000017   0.000032  0.0000136  0.0000073    0.000084    0.000101
+2013   5  10  56422   0.081796   0.400479   0.0985505   0.0011247   0.000028  -0.000164   0.000020   0.000032  0.0000021  0.0000077    0.000131    0.000156
+2013   5  11  56423   0.084201   0.400858   0.0974696   0.0010228   0.000054  -0.000180   0.000022   0.000032  0.0000131  0.0000081    0.000127    0.000151
+2013   5  12  56424   0.086355   0.401440   0.0964810   0.0009413   0.000114  -0.000173   0.000020   0.000032  0.0000031  0.0000077    0.000102    0.000123
+2013   5  13  56425   0.088272   0.402161   0.0955606   0.0009037   0.000166  -0.000149   0.000022   0.000032  0.0000034  0.0000079    0.000082    0.000103
+2013   5  14  56426   0.089509   0.403203   0.0946677   0.0009035   0.000218  -0.000142   0.000024   0.000032  0.0000015  0.0000078    0.000056    0.000073
+2013   5  15  56427   0.090692   0.403960   0.0937434   0.0009546   0.000183  -0.000224   0.000022   0.000033  0.0000164  0.0000073    0.000054    0.000075
+2013   5  16  56428   0.091140   0.404564   0.0927334   0.0010329   0.000124  -0.000325   0.000022   0.000033  0.0000061  0.0000077    0.000059    0.000088
+2013   5  17  56429   0.091633   0.404720   0.0916057   0.0011913   0.000062  -0.000418   0.000022   0.000033  0.0000013  0.0000077    0.000063    0.000101
+2013   5  18  56430   0.092305   0.404886   0.0903432   0.0013154   0.000089  -0.000442   0.000022   0.000033  0.0000170  0.0000077    0.000063    0.000100
+2013   5  19  56431   0.093357   0.404814   0.0889580   0.0014222   0.000152  -0.000430   0.000024   0.000033  0.0000031  0.0000077    0.000062    0.000093
+2013   5  20  56432   0.094835   0.404856   0.0874807   0.0015032   0.000109  -0.000393   0.000020   0.000030  0.0000031  0.0000070    0.000128    0.000171
+2013   5  21  56433   0.096650   0.405103   0.0859534   0.0015170   0.000129  -0.000354   0.000020   0.000030  0.0000026  0.0000070    0.000152    0.000195
+2013   5  22  56434   0.098108   0.405783   0.0844501   0.0014488   0.000145  -0.000310   0.000021   0.000027  0.0000040  0.0000072    0.000171    0.000218
+2013   5  23  56435   0.099430   0.406575   0.0830146   0.0013755   0.000149  -0.000249   0.000021   0.000027  0.0001122  0.0000072    0.000146    0.000196
+2013   5  24  56436   0.100669   0.407104   0.0817241   0.0012537   0.000145  -0.000186   0.000019   0.000027  0.0000018  0.0000069    0.000109    0.000162
+2013   5  25  56437   0.101490   0.407171   0.0805331   0.0011307   0.000106  -0.000193   0.000017   0.000027  0.0000250  0.0000069    0.000101    0.000154
+2013   5  26  56438   0.102327   0.407199   0.0794448   0.0010336   0.000053  -0.000224   0.000304   0.000234  0.0000054  0.0000236    0.000105    0.000156
+2013   5  27  56439   0.102864   0.407246   0.0784812   0.0009137  -0.000009  -0.000245   0.000026   0.000030  0.0000031  0.0000075    0.000114    0.000159
+2013   5  28  56440   0.103517   0.407139   0.0775747   0.0009094  -0.000057  -0.000278   0.000026   0.000034  0.0000026  0.0000075    0.000118    0.000161
+2013   5  29  56441   0.104118   0.407196   0.0766735   0.0009130  -0.000094  -0.000310   0.000025   0.000032  0.0000019  0.0000073    0.000118    0.000153
+2013   5  30  56442   0.104913   0.407053   0.0757525   0.0009351  -0.000087  -0.000262   0.000028   0.000031  0.0000112  0.0000077    0.000107    0.000133
+2013   5  31  56443   0.106353   0.406900   0.0748141   0.0009118  -0.000059  -0.000192   0.000028   0.000031  0.0000016  0.0000077    0.000092    0.000107
+2013   6   1  56444   0.108309   0.406628   0.0739569   0.0008131  -0.000001  -0.000158   0.000028   0.000031  0.0000081  0.0000077    0.000084    0.000096
+2013   6   2  56445   0.110225   0.406481   0.0732060   0.0007016   0.000068  -0.000139   0.000028   0.000031  0.0000030  0.0000077    0.000077    0.000091
+2013   6   3  56446   0.111846   0.406343   0.0725254   0.0006471   0.000136  -0.000127   0.000023   0.000030  0.0000029  0.0000074    0.000071    0.000086
+2013   6   4  56447   0.113256   0.405956   0.0719147   0.0005507   0.000197  -0.000121   0.000023   0.000030  0.0000013  0.0000074    0.000064    0.000081
+2013   6   5  56448   0.114176   0.405386   0.0714299   0.0004190   0.000151  -0.000152   0.000022   0.000028  0.0000174  0.0000072    0.000062    0.000085
+2013   6   6  56449   0.114605   0.404595   0.0710683   0.0003198   0.000072  -0.000194   0.000022   0.000028  0.0000059  0.0000072    0.000062    0.000092
+2013   6   7  56450   0.115042   0.403767   0.0707839   0.0002307  -0.000011  -0.000236   0.000022   0.000028  0.0000014  0.0000072    0.000062    0.000100
+2013   6   8  56451   0.115655   0.402894   0.0706110   0.0001381  -0.000001  -0.000257   0.000022   0.000028  0.0000279  0.0000071    0.000060    0.000096
+2013   6   9  56452   0.116356   0.402086   0.0705071   0.0000830   0.000043  -0.000264   0.000307   0.000144  0.0000033  0.0000201    0.000057    0.000089
+2013   6  10  56453   0.117353   0.401350   0.0704022   0.0000989   0.000086  -0.000262   0.000032   0.000025  0.0000027  0.0000082    0.000054    0.000081
+2013   6  11  56454   0.118260   0.401044   0.0702341   0.0001960   0.000126  -0.000255   0.000032   0.000028  0.0000013  0.0000078    0.000051    0.000074
+2013   6  12  56455   0.119228   0.400606   0.0699942   0.0002892   0.000090  -0.000217   0.000034   0.000030  0.0000187  0.0000080    0.000055    0.000075
+2013   6  13  56456   0.120715   0.399987   0.0696499   0.0004153   0.000031  -0.000173   0.000034   0.000030  0.0000028  0.0000084    0.000060    0.000079
+2013   6  14  56457   0.122407   0.399512   0.0691558   0.0005602  -0.000029  -0.000132   0.000031   0.000030  0.0000016  0.0000080    0.000066    0.000083
+2013   6  15  56458   0.123927   0.398878   0.0685337   0.0006864  -0.000064  -0.000161   0.000027   0.000030  0.0000217  0.0000076    0.000076    0.000091
+2013   6  16  56459   0.125696   0.398557   0.0678080   0.0007759  -0.000085  -0.000216   0.000027   0.000027  0.0000034  0.0000076    0.000090    0.000101
+2013   6  17  56460   0.127391   0.398251   0.0669948   0.0008524  -0.000096  -0.000257   0.000029   0.000024  0.0000034  0.0000082    0.000101    0.000110
+2013   6  18  56461   0.129304   0.397823   0.0661280   0.0008752  -0.000105  -0.000310   0.000032   0.000027  0.0000018  0.0000087    0.000114    0.000120
+2013   6  19  56462   0.131168   0.397852   0.0652819   0.0008272  -0.000095  -0.000318   0.000032   0.000063  0.0000246  0.0000085    0.000091    0.000097
+2013   6  20  56463   0.132630   0.397704   0.0644927   0.0007700  -0.000077  -0.000312   0.000029   0.000063  0.0000027  0.0000081    0.000060    0.000066
+2013   6  21  56464   0.134141   0.397002   0.0637729   0.0006587  -0.000058  -0.000298   0.000029   0.000030  0.0000011  0.0000081    0.000029    0.000035
+2013   6  22  56465   0.135324   0.396487   0.0631683   0.0005846  -0.000068  -0.000297   0.000032   0.000030  0.0000159  0.0000085    0.000029    0.000034
+2013   6  23  56466   0.136121   0.395919   0.0626275   0.0005627  -0.000089  -0.000296   0.000029   0.000030  0.0000026  0.0000085    0.000041    0.000045
+2013   6  24  56467   0.136436   0.395594   0.0620426   0.0005992  -0.000103  -0.000278   0.000029   0.000030  0.0000030  0.0000083    0.000052    0.000055
+2013   6  25  56468   0.136960   0.394965   0.0613753   0.0007043  -0.000122  -0.000264   0.000029   0.000030  0.0000016  0.0000079    0.000063    0.000065
+2013   6  26  56469   0.137560   0.394336   0.0606312   0.0007642  -0.000127  -0.000281   0.000027   0.000030  0.0000155  0.0000078    0.000061    0.000064
+2013   6  27  56470   0.137992   0.393733   0.0598411   0.0007937  -0.000127  -0.000300   0.000027   0.000030  0.0000051  0.0000077    0.000054    0.000061
+2013   6  28  56471   0.138780   0.392827   0.0590512   0.0007557  -0.000126  -0.000315   0.000027   0.000030  0.0000010  0.0000077    0.000047    0.000058
+2013   6  29  56472   0.140183   0.391993   0.0583348   0.0006506  -0.000124  -0.000272   0.000031   0.000030  0.0000299  0.0000082    0.000055    0.000055
+2013   6  30  56473   0.141520   0.391422   0.0577584   0.0004939  -0.000119  -0.000206   0.000031   0.000030  0.0000032  0.0000082    0.000070    0.000052
+2013   7   1  56474   0.142615   0.390794   0.0573666   0.0002946  -0.000050  -0.000215   0.000026   0.000031  0.0000036  0.0000072    0.000025    0.000031
+2013   7   2  56475   0.144086   0.390119   0.0571657   0.0001138  -0.000026  -0.000181   0.000026   0.000030  0.0000026  0.0000088    0.000017    0.000021
+2013   7   3  56476   0.145652   0.389520   0.0571564  -0.0000670  -0.000074  -0.000169   0.000025   0.000030  0.0000015  0.0000084    0.000063    0.000073
+2013   7   4  56477   0.146721   0.388729   0.0572832  -0.0002368  -0.000109  -0.000193   0.000025   0.000030  0.0000094  0.0000084    0.000090    0.000089
+2013   7   5  56478   0.147705   0.387541   0.0575537  -0.0003000  -0.000132  -0.000226   0.000025   0.000030  0.0000087  0.0000087    0.000105    0.000086
+2013   7   6  56479   0.148966   0.386151   0.0579280  -0.0003526  -0.000150  -0.000255   0.000025   0.000030  0.0000096  0.0000090    0.000119    0.000083
+2013   7   7  56480   0.150357   0.384903   0.0583167  -0.0003661  -0.000163  -0.000275   0.000107   0.000099  0.0000163  0.0000110    0.000134    0.000080
+2013   7   8  56481   0.151590   0.383539   0.0585779  -0.0002537  -0.000127  -0.000261   0.000032   0.000032  0.0000125  0.0000085    0.000042    0.000052
+2013   7   9  56482   0.153026   0.382250   0.0587683  -0.0001194  -0.000132  -0.000271   0.000032   0.000032  0.0000044  0.0000085    0.000034    0.000043
+2013   7  10  56483   0.154524   0.381145   0.0588276   0.0000078  -0.000113  -0.000234   0.000030   0.000036  0.0000109  0.0000085    0.000066    0.000078
+2013   7  11  56484   0.156046   0.380732   0.0587437   0.0001635  -0.000091  -0.000208   0.000034   0.000036  0.0000068  0.0000087    0.000099    0.000114
+2013   7  12  56485   0.156895   0.380599   0.0585248   0.0002568  -0.000066  -0.000186   0.000034   0.000036  0.0000038  0.0000087    0.000132    0.000149
+2013   7  13  56486   0.158050   0.380042   0.0582255   0.0003536  -0.000073  -0.000194   0.000030   0.000036  0.0000181  0.0000087    0.000127    0.000144
+2013   7  14  56487   0.159081   0.379385   0.0578480   0.0003991  -0.000087  -0.000215   0.000030   0.000036  0.0000085  0.0000089    0.000108    0.000124
+2013   7  15  56488   0.159936   0.378229   0.0574290   0.0004241  -0.000082  -0.000236   0.000028   0.000035  0.0000093  0.0000087    0.000088    0.000100
+2013   7  16  56489   0.160897   0.377171   0.0569832   0.0004291  -0.000090  -0.000247   0.000031   0.000035  0.0000109  0.0000088    0.000068    0.000080
+2013   7  17  56490   0.161824   0.376243   0.0565385   0.0003878  -0.000092  -0.000249   0.000036   0.000034  0.0000048  0.0000091    0.000049    0.000059
+2013   7  18  56491   0.162549   0.375422   0.0561746   0.0003214  -0.000096  -0.000180   0.000036   0.000034  0.0000094  0.0000091    0.000060    0.000077
+2013   7  19  56492   0.162962   0.374696   0.0558663   0.0002716  -0.000096  -0.000091   0.000033   0.000034  0.0000029  0.0000090    0.000079    0.000105
+2013   7  20  56493   0.163838   0.373849   0.0556151   0.0002333  -0.000127  -0.000085   0.000029   0.000034  0.0000178  0.0000090    0.000078    0.000103
+2013   7  21  56494   0.164551   0.373090   0.0554059   0.0002098  -0.000167  -0.000112   0.000032   0.000034  0.0000067  0.0000090    0.000069    0.000089
+2013   7  22  56495   0.164791   0.371800   0.0551523   0.0002812  -0.000200  -0.000142   0.000034   0.000036  0.0000069  0.0000095    0.000059    0.000075
+2013   7  23  56496   0.165297   0.370338   0.0547829   0.0004291  -0.000224  -0.000176   0.000031   0.000036  0.0000028  0.0000093    0.000051    0.000061
+2013   7  24  56497   0.165995   0.368999   0.0542810   0.0005603  -0.000168  -0.000170   0.000031   0.000033  0.0000166  0.0000089    0.000049    0.000065
+2013   7  25  56498   0.166349   0.367911   0.0536717   0.0006255  -0.000090  -0.000152   0.000034   0.000033  0.0000105  0.0000092    0.000060    0.000084
+2013   7  26  56499   0.166811   0.366676   0.0530071   0.0006567  -0.000012  -0.000130   0.000034   0.000033  0.0000035  0.0000095    0.000072    0.000102
+2013   7  27  56500   0.167708   0.365549   0.0523630   0.0006006   0.000015  -0.000119   0.000034   0.000033  0.0000121  0.0000098    0.000088    0.000126
+2013   7  28  56501   0.168758   0.364738   0.0518197   0.0004764   0.000017  -0.000109   0.000031   0.000033  0.0000108  0.0000098    0.000104    0.000151
+2013   7  29  56502   0.169709   0.363977   0.0513965   0.0003449   0.000011  -0.000085   0.000027   0.000032  0.0000105  0.0000102    0.000125    0.000182
+2013   7  30  56503   0.170580   0.362929   0.0510988   0.0002185   0.000006  -0.000072   0.000028   0.000033  0.0000065  0.0000088    0.000142    0.000208
+2013   7  31  56504   0.171178   0.361742   0.0509293   0.0001075  -0.000047  -0.000055   0.000029   0.000032  0.0000126  0.0000085    0.000098    0.000152
+2013   8   1  56505   0.171589   0.360801   0.0508664   0.0000354  -0.000115  -0.000041   0.000029   0.000032  0.0000116  0.0000088    0.000061    0.000092
+2013   8   2  56506   0.171471   0.359906   0.0508698  -0.0000262  -0.000184  -0.000031   0.000029   0.000032  0.0000021  0.0000088    0.000024    0.000033
+2013   8   3  56507   0.171802   0.358758   0.0508896  -0.0000357  -0.000185  -0.000041   0.000029   0.000032  0.0000159  0.0000088    0.000015    0.000019
+2013   8   4  56508   0.172185   0.357514   0.0508920  -0.0000184  -0.000157  -0.000058   0.000029   0.000029  0.0000092  0.0000091    0.000017    0.000021
+2013   8   5  56509   0.172401   0.356273   0.0508653   0.0000659  -0.000111  -0.000073   0.000033   0.000029  0.0000153  0.0000097    0.000019    0.000026
+2013   8   6  56510   0.172554   0.355256   0.0507705   0.0001743  -0.000076  -0.000090   0.000033   0.000032  0.0000055  0.0000096    0.000021    0.000028
+2013   8   7  56511   0.172778   0.354263   0.0505584   0.0002672  -0.000114  -0.000073   0.000030   0.000031  0.0000125  0.0000098    0.000031    0.000044
+2013   8   8  56512   0.173427   0.353372   0.0502377   0.0003265  -0.000172  -0.000048   0.000030   0.000028  0.0000059  0.0000098    0.000043    0.000062
+2013   8   9  56513   0.173697   0.352904   0.0498320   0.0004346  -0.000232  -0.000025   0.000030   0.000028  0.0000021  0.0000099    0.000054    0.000079
+2013   8  10  56514   0.173888   0.352080   0.0493378   0.0005192  -0.000260  -0.000042   0.000030   0.000028  0.0000104  0.0000101    0.000053    0.000076
+2013   8  11  56515   0.173994   0.351257   0.0487936   0.0005298  -0.000274  -0.000075   0.000030   0.000028  0.0000082  0.0000101    0.000047    0.000064
+2013   8  12  56516   0.173765   0.350190   0.0482710   0.0004758  -0.000286  -0.000107   0.000033   0.000032  0.0000091  0.0000098    0.000041    0.000053
+2013   8  13  56517   0.173651   0.348912   0.0477934   0.0004126  -0.000288  -0.000146   0.000033   0.000032  0.0000033  0.0000099    0.000035    0.000042
+2013   8  14  56518   0.173705   0.347770   0.0473953   0.0003477  -0.000236  -0.000091   0.000031   0.000030  0.0000013  0.0000103    0.000053    0.000067
+2013   8  15  56519   0.173741   0.346387   0.0470610   0.0002979  -0.000223  -0.000112   0.000034   0.000033  0.0000087  0.0000105    0.000058    0.000074
+2013   8  16  56520   0.173646   0.345159   0.0467545   0.0002797  -0.000226  -0.000167   0.000034   0.000033  0.0000096  0.0000108    0.000055    0.000071
+2013   8  17  56521   0.173383   0.343912   0.0464163   0.0003744  -0.000223  -0.000214   0.000031   0.000033  0.0000089  0.0000111    0.000052    0.000067
+2013   8  18  56522   0.173288   0.342890   0.0459741   0.0005323  -0.000213  -0.000249   0.000034   0.000033  0.0000088  0.0000111    0.000049    0.000064
+2013   8  19  56523   0.173168   0.341865   0.0453977   0.0006168  -0.000174  -0.000272   0.000033   0.000034  0.0000079  0.0000104    0.000044    0.000057
+2013   8  20  56524   0.173063   0.340726   0.0446799   0.0007632  -0.000177  -0.000287   0.000029   0.000034  0.0000025  0.0000104    0.000042    0.000054
+2013   8  21  56525   0.172398   0.339375   0.0438305   0.0008525  -0.000179  -0.000249   0.000028   0.000031  0.0000139  0.0000103    0.000051    0.000063
+2013   8  22  56526   0.171684   0.337844   0.0429512   0.0008717  -0.000185  -0.000190   0.000031   0.000031  0.0000092  0.0000097    0.000064    0.000076
+2013   8  23  56527   0.170625   0.336442   0.0420842   0.0008230  -0.000194  -0.000127   0.000031   0.000031  0.0000041  0.0000097    0.000076    0.000089
+2013   8  24  56528   0.169798   0.334944   0.0412703   0.0007489  -0.000217  -0.000093   0.000031   0.000031  0.0000090  0.0000099    0.000118    0.000146
+2013   8  25  56529   0.169189   0.333577   0.0405795   0.0006309  -0.000243  -0.000073   0.000031   0.000034  0.0000072  0.0000099    0.000169    0.000220
+2013   8  26  56530   0.168893   0.332209   0.0400021   0.0005207  -0.000239  -0.000063   0.000028   0.000034  0.0000114  0.0000100    0.000282    0.000295
+2013   8  27  56531   0.168519   0.330738   0.0395337   0.0003777  -0.000247  -0.000057   0.000028   0.000031  0.0000100  0.0000100    0.000348    0.000369
+2013   8  28  56532   0.168415   0.329414   0.0391717   0.0002806  -0.000228  -0.000070   0.000029   0.000030  0.0000139  0.0000093    0.000235    0.000293
+2013   8  29  56533   0.168163   0.328251   0.0388973   0.0002473  -0.000196  -0.000082   0.000029   0.000033  0.0000142  0.0000093    0.000138    0.000172
+2013   8  30  56534   0.167661   0.327082   0.0386768   0.0002367  -0.000168  -0.000096   0.000029   0.000033  0.0000058  0.0000095    0.000041    0.000051
+2013   8  31  56535   0.166593   0.325700   0.0384634   0.0002152  -0.000155  -0.000089   0.000029   0.000033  0.0000122  0.0000095    0.000023    0.000028
+2013   9   1  56536   0.165860   0.324084   0.0382068   0.0002970  -0.000152  -0.000074   0.000029   0.000033  0.0000084  0.0000093    0.000035    0.000041
+2013   9   2  56537   0.165573   0.322684   0.0378617   0.0004198  -0.000142  -0.000047   0.000035   0.000036  0.0000102  0.0000109    0.000043    0.000053
+2013   9   3  56538   0.165314   0.321419   0.0373927   0.0005024  -0.000149  -0.000031   0.000039   0.000036  0.0000127  0.0000114    0.000053    0.000066
+2013   9   4  56539   0.164827   0.320456   0.0367879   0.0006379  -0.000156  -0.000014   0.000034   0.000034  0.0000049  0.0000106    0.000062    0.000077
+2013   9   5  56540   0.164368   0.319491   0.0360450   0.0008060  -0.000259  -0.000088   0.000034   0.000034  0.0000114  0.0000104    0.000058    0.000072
+2013   9   6  56541   0.164310   0.318349   0.0351748   0.0009072  -0.000380  -0.000180   0.000038   0.000034  0.0000046  0.0000104    0.000051    0.000064
+2013   9   7  56542   0.163910   0.317351   0.0342240   0.0009627  -0.000400  -0.000187   0.000034   0.000034  0.0000118  0.0000101    0.000061    0.000083
+2013   9   8  56543   0.163508   0.316383   0.0332626   0.0009316  -0.000371  -0.000155   0.000034   0.000031  0.0000085  0.0000098    0.000077    0.000112
+2013   9   9  56544   0.162948   0.315306   0.0323533   0.0008653  -0.000327  -0.000098   0.000033   0.000031  0.0000085  0.0000101    0.000094    0.000145
+2013   9  10  56545   0.162052   0.314146   0.0315245   0.0007584  -0.000269  -0.000045   0.000033   0.000035  0.0000075  0.0000101    0.000110    0.000176
+2013   9  11  56546   0.161094   0.312773   0.0307834   0.0006948  -0.000268   0.000120   0.000031   0.000029  0.0000096  0.0000100    0.000092    0.000145
+2013   9  12  56547   0.159937   0.311450   0.0301155   0.0006528  -0.000286   0.000308   0.000027   0.000026  0.0000070  0.0000100    0.000066    0.000100
+2013   9  13  56548   0.158737   0.309930   0.0294762   0.0006294  -0.000305   0.000479   0.000027   0.000026  0.0000030  0.0000100    0.000039    0.000055
+2013   9  14  56549   0.157790   0.308431   0.0288025   0.0007154  -0.000342   0.000490   0.000031   0.000029  0.0000144  0.0000103    0.000044    0.000057
+2013   9  15  56550   0.157350   0.306944   0.0280242   0.0008645  -0.000383   0.000421   0.000031   0.000029  0.0000071  0.0000105    0.000060    0.000077
+2013   9  16  56551   0.157106   0.305976   0.0270896   0.0010175  -0.000419   0.000334   0.000030   0.000030  0.0000068  0.0000099    0.000071    0.000091
+2013   9  17  56552   0.156504   0.305514   0.0259668   0.0011926  -0.000437   0.000221   0.000030   0.000034  0.0000079  0.0000099    0.000085    0.000109
+2013   9  18  56553   0.155377   0.305349   0.0246770   0.0013240  -0.000434   0.000094   0.000029   0.000032  0.0000056  0.0000102    0.000099    0.000127
+2013   9  19  56554   0.153947   0.304766   0.0232973   0.0013738  -0.000357   0.000099   0.000043   0.000045  0.0000129  0.0000102    0.000074    0.000097
+2013   9  20  56555   0.152824   0.303963   0.0219443   0.0012905  -0.000246   0.000155   0.000043   0.000045  0.0000038  0.0000102    0.000037    0.000054
+2013   9  21  56556   0.151406   0.303196   0.0207179   0.0011330  -0.000223   0.000123   0.000048   0.000045  0.0000082  0.0000108    0.000028    0.000043
+2013   9  22  56557   0.149281   0.302354   0.0196438   0.0010117  -0.000233   0.000067   0.000054   0.000050  0.0000083  0.0000111    0.000031    0.000045
+2013   9  23  56558   0.146735   0.301442   0.0186897   0.0008985  -0.000242   0.000020   0.000033   0.000048  0.0000096  0.0000092    0.000033    0.000047
+2013   9  24  56559   0.144871   0.300344   0.0178077   0.0008517  -0.000255  -0.000012   0.000033   0.000047  0.0000100  0.0000092    0.000035    0.000048
+2013   9  25  56560   0.143566   0.299610   0.0169717   0.0008146  -0.000269  -0.000032   0.000033   0.000045  0.0000028  0.0000092    0.000035    0.000044
+2013   9  26  56561   0.142079   0.298821   0.0161801   0.0007604  -0.000214   0.000000   0.000033   0.000045  0.0000090  0.0000089    0.000030    0.000037
+2013   9  27  56562   0.140889   0.297939   0.0154371   0.0007188  -0.000141   0.000048   0.000033   0.000046  0.0000036  0.0000092    0.000023    0.000027
+2013   9  28  56563   0.139500   0.297257   0.0147280   0.0007030  -0.000128   0.000090   0.000033   0.000046  0.0000080  0.0000095    0.000028    0.000036
diff --git a/astropy/utils/iers/iers.py b/astropy/utils/iers/iers.py
new file mode 100644
index 0000000..e8f1134
--- /dev/null
+++ b/astropy/utils/iers/iers.py
@@ -0,0 +1,350 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+The astropy.utils.iers package provides access to the tables provided by
+the International Earth Rotation and Reference Systems Service, in
+particular allowing interpolation of published UT1-UTC values for given
+times.  These are used in astropy.time to provide UT1 values.  By
+default, IERS B values provided as part of astropy are used, but
+user-downloaded files can be substituted.
+
+Generally, there is no need to invoke the iers classes oneself.  E.g.,
+the default IERS B table is loaded as necessary in `Time`::
+
+    >>> from astropy.time import Time
+    >>> t = Time(['2012-06-30 12:00:00', '2012-06-30 23:59:59',
+    ...           '2012-06-30 23:59:60', '2012-07-01 00:00:00',
+    ...           '2012-07-01 12:00:00'], scale='utc')
+    >>> t.ut1
+    <Time object: scale='ut1' format='iso' value=['2012-06-30 11:59:59.413'
+     '2012-06-30 23:59:58.413' '2012-06-30 23:59:59.413'
+     '2012-07-01 00:00:00.413' '2012-07-01 12:00:00.413']>
+
+But if one is dealing with very recent observations, this does not work::
+
+    >>> t2 = Time.now()
+    >>> t2.ut1
+    Traceback (most recent call last):
+    ...
+    IndexError: (some) times are outside of range covered by IERS table.
+
+In this case, one needs to update the IERS B table or use IERS A instead
+(which also has predictions).  In future versions, this may become
+configurable or automatic, but currently it requires handiwork.  For
+`Time`, easiest is to set the `delta_ut1_utc` property directly::
+
+    >>> from astropy.utils.iers import IERS_A
+    >>> iers_a = IERS_A.open('finals2000A.all')    # doctest: +SKIP
+    >>> iers_a.ut1_utc(t2)                         # doctest: +SKIP
+    0.069727551794218745
+    >>> t2.delta_ut1_utc = iers_a.ut1_utc(t2)      # doctest: +SKIP
+    >>> t2.ut1.iso                                 # doctest: +SKIP
+    <Time object: scale='ut1' format='datetime'
+     value=2013-06-22 17:01:13.446632>
+
+Instead of local copies of IERS files, one can also download them, using
+`iers.IERS_A_URL` and `iers.IERS_B_URL`::
+
+    >>> from astropy.utils.iers import IERS_A, IERS_A_URL
+    >>> from astropy.utils.data import download_file
+    >>> iers_a_file = download_file(IERS_A_URL, cache=True)  # doctest: +SKIP
+    >>> iers_a = IERS_A.open(iers_a_file)                    # doctest: +SKIP
+"""
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import numpy as np
+
+from ...table import Table
+from ...utils.data import get_pkg_data_filename
+
+__all__ = ['IERS', 'IERS_B', 'IERS_A',
+           'FROM_IERS_B', 'FROM_IERS_A', 'FROM_IERS_A_PREDICTION',
+           'TIME_BEFORE_IERS_RANGE', 'TIME_BEYOND_IERS_RANGE',
+           'IERS_A_FILE', 'IERS_A_URL', 'IERS_A_README',
+           'IERS_B_FILE', 'IERS_B_URL', 'IERS_B_README']
+
+# IERS-A default file name, URL, and ReadMe with content description
+IERS_A_FILE = 'finals2000A.all'
+IERS_A_URL = 'http://maia.usno.navy.mil/ser7/finals2000A.all'
+IERS_A_README = get_pkg_data_filename('data/ReadMe.finals2000A')
+# IERS-B default file name, URL, and ReadMe with content description
+IERS_B_FILE = get_pkg_data_filename('data/eopc04_IAU2000.62-now')
+IERS_B_URL = 'http://hpiers.obspm.fr/iers/eop/eopc04/eopc04_IAU2000.62-now'
+IERS_B_README = get_pkg_data_filename('data/ReadMe.eopc04_IAU2000')
+# Status/source values returned by IERS.ut1_utc
+FROM_IERS_B = 0
+FROM_IERS_A = 1
+FROM_IERS_A_PREDICTION = 2
+TIME_BEFORE_IERS_RANGE = -1
+TIME_BEYOND_IERS_RANGE = -2
+
+
+MJD_ZERO = 2400000.5
+
+
+class IERS(Table):
+    """Generic IERS table class, defining interpolation functions.
+
+    Sub-classed from `astropy.table.Table`.  The table should hold columns
+    'MJD' and 'UT1_UTC'.
+    """
+
+    iers_table = None
+
+    @classmethod
+    def open(cls, file=None, **kwargs):
+        """Open an IERS table, reading it from a file if not loaded before.
+
+        Parameters
+        ----------
+        file : str or None
+            full path to the ascii file holding IERS data, for passing on to
+            the `read` class methods (further optional arguments that are
+            available for some IERS subclasses can be added).
+            If None, use the default location from the `read` class method.
+
+        Returns
+        -------
+        An IERS table class instance
+
+        Notes
+        -----
+        On the first call in a session, the table will be memoized (in
+        `cls.iers_table`), and further calls to `open` will return this stored
+        table if `file=None` (the default).
+
+        If a table needs to be re-read from disk, pass on an explicit file
+        loction or use the (sub-class) close method and re-open.
+
+        For the IERS class itself, an IERS_B sub-class instance is opened.
+        """
+        if file is not None or cls.iers_table is None:
+            if file is not None:
+                kwargs.update(file=file)
+            cls.iers_table = cls.read(**kwargs)
+        return cls.iers_table
+
+    @classmethod
+    def close(cls):
+        """Remove the IERS table from the class.
+
+        This allows the table to be re-read from disk during one's session
+        (e.g., if one finds it is out of date and has updated the file).
+        """
+        cls.iers_table = None
+
+    def mjd_utc(self, jd1, jd2=0.):
+        """Turn a time to MJD, returning integer and fractional parts.
+
+        Parameters
+        ----------
+        jd1 : float, array, or Time
+            first part of two-part JD, or Time object
+        jd2 : float or array, optional
+            second part of two-part JD (default: 0., ignored if jd1 is Time)
+
+        Returns
+        -------
+        mjd : float or array
+            integer part of MJD
+        utc : float or array
+            fractional part of MJD
+        """
+        try:  # see if this is a Time object
+            jd1, jd2 = jd1.utc.jd1, jd1.utc.jd2
+        except:
+            pass
+        mjd = np.floor(jd1 - MJD_ZERO + jd2)
+        utc = jd1 - (MJD_ZERO+mjd) + jd2
+        return mjd, utc
+
+    def ut1_utc(self, jd1, jd2=0., return_status=False):
+        """Interpolate UT1-UTC corrections in IERS Table for given dates.
+
+        Parameters
+        ----------
+        jd1 : float, float array, or Time object
+            first part of two-part JD, or Time object
+        jd2 : float or float array, optional
+            second part of two-part JD (default 0., ignored if jd1 is Time)
+        return_status : bool
+            Whether to return status values.  If False (default),
+            raise `IndexError` if any time is out of the range covered
+            by the IERS table.
+
+        Returns
+        -------
+        ut1_utc : float or float array
+            UT1-UTC, interpolated in IERS Table
+        status : int or int array
+            Status values (if `return_status`=`True`)::
+            `iers.FROM_IERS_B`
+            `iers.FROM_IERS_A`
+            `iers.FROM_IERS_A_PREDICTION`
+            `iers.TIME_BEFORE_IERS_RANGE`
+            `iers.TIME_BEYOND_IERS_RANGE`
+        """
+
+        mjd, utc = self.mjd_utc(jd1, jd2)
+        # enforce array
+        is_scalar = not hasattr(mjd, '__array__') or mjd.ndim == 0
+        if is_scalar:
+            mjd = np.array([mjd])
+            utc = np.array([utc])
+        # For typical format, will always find a match (since MJD are integer)
+        # hence, important to define which side we will be; this ensures
+        # self['MJD'][i-1]<=mjd<self['MJD'][i]
+        i = np.searchsorted(self['MJD'], mjd, side='right')
+        # Get index to MJD at or just below given mjd, clipping to ensure we
+        # stay in range of table (status will be set below for those outside)
+        i1 = np.clip(i, 1, len(self)-1)
+        i0 = i1-1
+        mjd_0, mjd_1 = self['MJD'][i0], self['MJD'][i1]
+        ut1_utc_0, ut1_utc_1 = self['UT1_UTC'][i0], self['UT1_UTC'][i1]
+        # Check and correct for possible leap second (correcting difference,
+        # not first point, since jump can only happen right at second point)
+        d_ut1_utc = ut1_utc_1 - ut1_utc_0
+        d_ut1_utc -= np.round(d_ut1_utc)
+        # Linearly interpolate to get UT1-UTC
+        # (which is what TEMPO does, but may want to follow IERS gazette #13
+        # for more precise interpolation and correction for tidal effects;
+        # http://maia.usno.navy.mil/iers-gaz13)
+        ut1_utc = ut1_utc_0 + (mjd-mjd_0+utc)/(mjd_1-mjd_0)*d_ut1_utc
+
+        if is_scalar:
+            ut1_utc = ut1_utc[0]
+
+        if return_status:
+            # Set status to source, possibly using routine provided by subclass
+            status = self.ut1_utc_source(i1)
+            # Check for out of range
+            status[i == 0] = TIME_BEFORE_IERS_RANGE
+            status[i == len(self)] = TIME_BEYOND_IERS_RANGE
+            if is_scalar:
+                status = status[0]
+            return ut1_utc, status
+        else:
+            # Not returning status, so raise an exception for out-of-range
+            if np.any(i1 != i):
+                raise IndexError('(some) times are outside of range covered '
+                                 'by IERS table.')
+            return ut1_utc
+
+    def ut1_utc_source(self, i):
+        """Source for UT1-UTC.  To be overridden by subclass."""
+        return np.zeros_like(i)
+
+
+class IERS_A(IERS):
+    """IERS Table class targeted to IERS A, provided by USNO.
+
+    These include rapid turnaround and predicted times.
+    See http://maia.usno.navy.mil/
+
+    Notes
+    -----
+    The IERS A file is not part of astropy.  It can be downloaded from
+    `iers.IERS_A_URL`.  See `iers.__doc__` for instructions on how to use
+    it in `Time`, etc.
+    """
+
+    iers_table = None
+
+    def __init__(self, table):
+        """Initialize an IERS-A table that is already read in.
+        Use read or open class methods to read it from disk.
+
+        Combines UT1-UTC values, taking UT1_UTC_B if available, else UT1_UTC_A
+        """
+        table['UT1_UTC'] = np.where(table['UT1_UTC_B'].mask,
+                                    table['UT1_UTC_A'],
+                                    table['UT1_UTC_B'])
+        table['UT1Flag'] = np.where(table['UT1_UTC_B'].mask,
+                                    table['UT1Flag_A'],
+                                    'B')
+        super(IERS_A, self).__init__(table.filled())
+
+    @classmethod
+    def read(cls, file=IERS_A_FILE, readme=None):
+        """Read IERS-A table from a finals2000a.* file provided by USNO.
+
+        Parameters
+        ----------
+        file : str
+            full path to ascii file holding IERS-A data
+            (default: `iers.IERS_A_FILE`)
+        readme : str
+            full path to ascii file holding CDS-style readme
+            (default: package version, `iers.IERS_A_README`)
+
+        Returns
+        -------
+        `IERS_A` class instance
+        """
+        if readme is None:
+            readme = IERS_A_README
+        iers_a = Table.read(file, format='cds', readme=readme)
+        # IERS A has some rows at the end that hold nothing but dates & MJD
+        # presumably to be filled later.  Exclude those a priori -- there
+        # should at least be a predicted UT1-UTC!
+        return cls(iers_a[~iers_a['UT1_UTC_A'].mask])
+
+    def ut1_utc_source(self, i):
+        """Set UT1-UTC source flag for entries in IERS table"""
+        ut1flag = self['UT1Flag'][i]
+        source = np.ones_like(i) * FROM_IERS_B
+        source[ut1flag == 'I'] = FROM_IERS_A
+        source[ut1flag == 'P'] = FROM_IERS_A_PREDICTION
+        return source
+
+
+class IERS_B(IERS):
+    """IERS Table class targeted to IERS B, provided by IERS itself.
+
+    These are final values; see http://www.iers.org/
+
+    Notes
+    -----
+    If the package IERS B file (`iers.IERS_B_FILE`) is out of date, a new
+    version can be downloaded from `iers.IERS_B_URL`.  See `iers.__doc__`
+    for instructions on how to use it in `Time`, etc.
+    """
+
+    iers_table = None
+
+    @classmethod
+    def read(cls, file=None, readme=None, data_start=14):
+        """Read IERS-B table from a eopc04_iau2000.* file provided by IERS.
+
+        Parameters
+        ----------
+        file : str
+            full path to ascii file holding IERS-B data
+            (default: package version, `iers.IERS_B_FILE`)
+        readme : str
+            full path to ascii file holding CDS-style readme
+            (default: package version, `iers.IERS_B_README`)
+        data_start : int
+            starting row (default: 14, appropriate for standard IERS files)
+
+        Returns
+        -------
+        `IERS_B` class instance
+        """
+        if file is None:
+            file = IERS_B_FILE
+        if readme is None:
+            readme = IERS_B_README
+
+        # can this be done more elegantly, initialising directly, without
+        # passing a Table to the Table initialiser?
+        iers_b = Table.read(file, format='cds', readme=readme,
+                            data_start=data_start)
+        return cls(iers_b)
+
+    def ut1_utc_source(self, i):
+        """Set UT1-UTC source flag for entries in IERS table"""
+        return np.ones_like(i) * FROM_IERS_B
+
+# by default for IERS class, read IERS-B table
+IERS.read = IERS_B.read
diff --git a/astropy/utils/iers/tests/__init__.py b/astropy/utils/iers/tests/__init__.py
new file mode 100644
index 0000000..800d82e
--- /dev/null
+++ b/astropy/utils/iers/tests/__init__.py
@@ -0,0 +1,2 @@
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
diff --git a/astropy/utils/iers/tests/test_iers.py b/astropy/utils/iers/tests/test_iers.py
new file mode 100644
index 0000000..592b264
--- /dev/null
+++ b/astropy/utils/iers/tests/test_iers.py
@@ -0,0 +1,76 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import functools
+import numpy as np
+
+from ....tests.helper import pytest
+from .. import iers
+from ....table import Table
+from ....time import Time
+
+allclose_sec = functools.partial(np.allclose, rtol=1e-15, atol=1e-9)
+# 1 nanosec atol
+
+try:
+    iers.IERS_A.open()  # check if IERS_A is available
+except IOError:
+    HAS_IERS_A = False
+else:
+    HAS_IERS_A = True
+
+
+class TestBasic():
+    """Basic tests that IERS_B returns correct values"""
+
+    def test_simple(self):
+        iers.IERS.close()
+        assert iers.IERS.iers_table is None
+        iers_tab = iers.IERS.open()
+        assert iers.IERS.iers_table is not None
+        assert isinstance(iers.IERS.iers_table, Table)
+        jd1 = np.array([2456108.5, 2456108.5, 2456108.5,
+                        2456109.5, 2456109.5])
+        jd2 = np.array([0.49999421, 0.99997685, 0.99998843, 0., 0.5])
+        ut1_utc = iers_tab.ut1_utc(jd1, jd2)
+        assert allclose_sec(ut1_utc, np.array([-0.5868211, -0.5868184,
+                                               -0.5868184, 0.4131816,
+                                               0.41328895]))
+        # should be future-proof; surely we've moved to another planet by then
+        with pytest.raises(IndexError):
+            ut1_utc2, status2 = iers_tab.ut1_utc(1e11, 0.)
+        # also check it returns the right status
+        ut1_utc2, status2 = iers_tab.ut1_utc(jd1, jd2, return_status=True)
+        assert np.all(status2 == iers.FROM_IERS_B)
+        ut1_utc4, status4 = iers_tab.ut1_utc(1e11, 0., return_status=True)
+        assert status4 == iers.TIME_BEYOND_IERS_RANGE
+
+        # check it works via Time too
+        t = Time(jd1, jd2, format='jd', scale='utc')
+        ut1_utc3 = iers_tab.ut1_utc(t)
+        assert allclose_sec(ut1_utc3, np.array([-0.5868211, -0.5868184,
+                                                -0.5868184, 0.4131816,
+                                                0.41328895]))
+
+
+ at pytest.mark.skipif(str('not HAS_IERS_A'))
+class TestIERS_A():
+    def test_simple(self):
+        iers_tab = iers.IERS_A.open()
+        jd1 = np.array([2456108.5, 2456108.5, 2456108.5,
+                        2456109.5, 2456109.5])
+        jd2 = np.array([0.49999421, 0.99997685, 0.99998843, 0., 0.5])
+        ut1_utc, status = iers_tab.ut1_utc(jd1, jd2, return_status=True)
+        assert np.all(status == iers.FROM_IERS_B)
+        assert allclose_sec(ut1_utc, np.array([-0.5868211, -0.5868184,
+                                               -0.5868184, 0.4131816,
+                                               0.41328895]))
+        ut1_utc2, status2 = iers_tab.ut1_utc(1e11, 0., return_status=True)
+        assert status2 == iers.TIME_BEYOND_IERS_RANGE
+
+        tnow = Time.now()
+
+        ut1_utc3, status3 = iers_tab.ut1_utc(tnow, return_status=True)
+        assert status3 == iers.FROM_IERS_A_PREDICTION
+        assert ut1_utc3 != 0.
diff --git a/astropy/utils/metadata.py b/astropy/utils/metadata.py
new file mode 100644
index 0000000..b48331b
--- /dev/null
+++ b/astropy/utils/metadata.py
@@ -0,0 +1,133 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+This module contains helper functions for handling metadata.
+"""
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+from ..extern import six
+
+import warnings
+
+import collections
+from copy import deepcopy
+
+from .compat.odict import OrderedDict
+from ..utils.exceptions import AstropyWarning
+
+
+class MergeConflictError(TypeError):
+    pass
+
+
+class MergeConflictWarning(AstropyWarning):
+    pass
+
+
+def take_left(left, right):
+    return left
+
+
+def take_right(left, right):
+    return left
+
+
+def concat(left, right):
+    """
+    Concatenate the ``left`` and ``right`` objects
+
+    Currently only lists and tuples are allowed, but this could change.
+    """
+    if type(left) != type(right):
+        raise MergeConflictError()
+    if any(isinstance(left, cls) for cls in (tuple, list)):
+        return left + right
+    else:
+        raise MergeConflictError()
+
+
+def raise_error(left, right):
+    """
+    Raise a MergeConflictError if left and right sequences
+    are being merged.
+    """
+    raise MergeConflictError()
+
+
+def _both_isinstance(left, right, cls):
+    return isinstance(left, cls) and isinstance(right, cls)
+
+
+def merge(left, right, merge_func=concat, metadata_conflicts='warn'):
+    """
+    Merge the ``left`` and ``right`` metadata objects.
+
+    This is a simplistic and limited implemenation at this point.
+    """
+    if not _both_isinstance(left, right, dict):
+        raise MergeConflictError('Can only merge two dict-based objects')
+
+    out = deepcopy(left)
+
+    for key, val in list(six.iteritems(right)):
+        # If no conflict then insert val into out dict and continue
+        if key not in out:
+            out[key] = deepcopy(val)
+            continue
+
+        # There is a conflict that must be resolved
+        if _both_isinstance(left[key], right[key], dict):
+            out[key] = merge(left[key], right[key], merge_func)
+
+        else:
+            try:
+                out[key] = merge_func(left[key], right[key])
+            except MergeConflictError:
+
+                # Pick the metadata item that is not None, or they are both not
+                # None, then if they are equal, there is no conflict, and if
+                # they are different, there is a conflict and we pick the one
+                # on the right (or raise an error).
+
+                if left[key] is None:
+                    # This may not seem necessary since out[key] gets set to
+                    # right[key], but not all objects support != which is
+                    # needed for one of the if clauses.
+                    out[key] = right[key]
+                elif right[key] is None:
+                    out[key] = left[key]
+                elif left[key] != right[key]:
+                    if metadata_conflicts == 'warn':
+                        warnings.warn('Cannot merge meta key {0!r} types {1!r} and {2!r}, choosing {0}={3!r}'
+                                                 .format(key, type(left[key]), type(right[key]), right[key]), MergeConflictWarning)
+                    elif metadata_conflicts == 'error':
+                        raise MergeConflictError('Cannot merge meta key {0!r} types {1!r} and {2!r}'
+                                                 .format(key, type(left[key]), type(right[key])))
+                    elif metadata_conflicts != 'silent':
+                        raise ValueError('metadata_conflict argument must be one of "silent", "warn", or "error"')
+                    out[key] = right[key]
+                else:
+                    out[key] = right[key]
+
+    return out
+
+
+class MetaData(object):
+    """
+    A descriptor for classes that have a ``meta`` property.
+
+    This can be set to any valid mapping.
+    """
+
+    def __get__(self, instance, owner):
+        if not hasattr(instance, '_meta'):
+            instance._meta = OrderedDict()
+        return instance._meta
+
+    def __set__(self, instance, value):
+        if value is None:
+            instance._meta = OrderedDict()
+        else:
+            if isinstance(value, collections.Mapping):
+                instance._meta = deepcopy(value)
+            else:
+                raise TypeError("meta attribute must be dict-like")
diff --git a/astropy/utils/misc.py b/astropy/utils/misc.py
index e16a920..41c7896 100644
--- a/astropy/utils/misc.py
+++ b/astropy/utils/misc.py
@@ -4,21 +4,33 @@ A "grab bag" of relatively small general-purpose utilities that don't have
 a clear module/package to live in.
 """
 
-from __future__ import absolute_import
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 
-import collections
 import contextlib
 import functools
+import inspect
+import json
 import os
+import signal
 import sys
 import textwrap
 import traceback
 import warnings
 
+from .exceptions import AstropyDeprecationWarning, AstropyPendingDeprecationWarning
+
+from ..extern import six
+from ..extern.six.moves import urllib
+
 
 __all__ = ['find_current_module', 'isiterable', 'deprecated', 'lazyproperty',
            'deprecated_attribute', 'silence', 'format_exception',
-           'NumpyRNGContext', 'is_path_hidden', 'walk_skip_hidden']
+           'NumpyRNGContext', 'find_api_page', 'is_path_hidden',
+           'walk_skip_hidden', 'JsonCustomEncoder', 'indent']
+
+__doctest_skip__ = ['find_current_module']
 
 
 def find_current_module(depth=1, finddiff=False):
@@ -97,13 +109,12 @@ def find_current_module(depth=1, finddiff=False):
         pkg.mod1
 
     """
-    from inspect import currentframe, ismodule
 
     # using a patched version of getmodule because the py 3.1 and 3.2 stdlib
     # is broken if the list of modules changes during import
     from .compat import inspect_getmodule
 
-    frm = currentframe()
+    frm = inspect.currentframe()
     for i in range(depth):
         frm = frm.f_back
         if frm is None:
@@ -116,9 +127,9 @@ def find_current_module(depth=1, finddiff=False):
         else:
             diffmods = []
             for fd in finddiff:
-                if ismodule(fd):
+                if inspect.ismodule(fd):
                     diffmods.append(fd)
-                elif isinstance(fd, basestring):
+                elif isinstance(fd, six.string_types):
                     diffmods.append(__import__(fd))
                 elif fd is True:
                     diffmods.append(currmod)
@@ -167,21 +178,21 @@ def find_mod_objs(modname, onlylocals=False):
         the other arguments)
 
     """
-    from inspect import ismodule
 
     __import__(modname)
     mod = sys.modules[modname]
 
     if hasattr(mod, '__all__'):
-        pkgitems = [(k, getattr(mod, k)) for k in mod.__all__]
+        pkgitems = [(k, mod.__dict__[k]) for k in mod.__all__]
     else:
-        pkgitems = [(k, getattr(mod, k)) for k in dir(mod) if k[0] != '_']
+        pkgitems = [(k, mod.__dict__[k]) for k in dir(mod) if k[0] != '_']
 
-    #filter out modules and pull the names and objs out
+    # filter out modules and pull the names and objs out
+    ismodule = inspect.ismodule
     localnames = [k for k, v in pkgitems if not ismodule(v)]
     objs = [v for k, v in pkgitems if not ismodule(v)]
 
-    #fully qualified names can be determined from the object's module
+    # fully qualified names can be determined from the object's module
     fqnames = []
     for obj, lnm in zip(objs, localnames):
         if hasattr(obj, '__module__') and hasattr(obj, '__name__'):
@@ -208,6 +219,17 @@ def isiterable(obj):
         return False
 
 
+def indent(s, shift=1, width=4):
+    """Indent a block of text.  The indentation is applied to each line."""
+
+    indented = '\n'.join(' ' * (width * shift) + l if l else ''
+                         for l in s.splitlines())
+    if s[-1] == '\n':
+        indented += '\n'
+
+    return indented
+
+
 class lazyproperty(object):
     """
     Works similarly to property(), but computes the value only once.
@@ -220,7 +242,7 @@ class lazyproperty(object):
         >>> class LazyTest(object):
         ...     @lazyproperty
         ...     def complicated_property(self):
-        ...         print 'Computing the value for complicated_property...'
+        ...         print('Computing the value for complicated_property...')
         ...         return 42
         ...
         >>> lt = LazyTest()
@@ -249,7 +271,7 @@ class lazyproperty(object):
     def __get__(self, obj, owner=None):
         if obj is None:
             return self
-        key = self._fget.func_name
+        key = self._fget.__name__
         if key not in obj.__dict__:
             val = self._fget(obj)
             obj.__dict__[key] = val
@@ -259,7 +281,7 @@ class lazyproperty(object):
 
     def __set__(self, obj, val):
         obj_dict = obj.__dict__
-        func_name = self._fget.func_name
+        func_name = self._fget.__name__
         if self._fset:
             ret = self._fset(obj, val)
             if ret is not None and obj_dict.get(func_name) is ret:
@@ -272,7 +294,7 @@ class lazyproperty(object):
     def __delete__(self, obj):
         if self._fdel:
             self._fdel(obj)
-        key = self._fget.func_name
+        key = self._fget.__name__
         if key in obj.__dict__:
             del obj.__dict__[key]
 
@@ -289,7 +311,7 @@ class lazyproperty(object):
         args = [self._fget, self._fset, self._fdel, self.__doc__]
         args[arg] = f
         cls_ns = sys._getframe(1).f_locals
-        for k, v in cls_ns.items():
+        for k, v in six.iteritems(cls_ns):
             if v is self:
                 property_name = k
                 break
@@ -338,8 +360,8 @@ def deprecated(since, message='', name='', alternative='', pending=False,
         this alternative if provided.
 
     pending : bool, optional
-        If True, uses a PendingDeprecationWarning instead of a
-        DeprecationWarning.
+        If True, uses a AstropyPendingDeprecationWarning instead of a
+        AstropyDeprecationWarning.
     """
 
     def deprecate(func, message=message, name=name, alternative=alternative,
@@ -387,9 +409,9 @@ def deprecated(since, message='', name='', alternative='', pending=False,
         @functools.wraps(func)
         def deprecated_func(*args, **kwargs):
             if pending:
-                category = PendingDeprecationWarning
+                category = AstropyPendingDeprecationWarning
             else:
-                category = DeprecationWarning
+                category = AstropyDeprecationWarning
 
             warnings.warn(message, category, stacklevel=2)
 
@@ -453,8 +475,8 @@ def deprecated_attribute(name, since, message=None, alternative=None,
         user about this alternative if provided.
 
     pending : bool, optional
-        If True, uses a PendingDeprecationWarning instead of a
-        DeprecationWarning.
+        If True, uses a AstropyPendingDeprecationWarning instead of a
+        AstropyDeprecationWarning.
 
     Examples
     --------
@@ -586,6 +608,115 @@ class NumpyRNGContext(object):
         random.set_state(self.startstate)
 
 
+def find_api_page(obj, version=None, openinbrowser=True, timeout=None):
+    """
+    Determines the URL of the API page for the specified object, and
+    optionally open that page in a web browser.
+
+    .. note::
+        You must be connected to the internet for this to function even
+        if `openinbrowser` is False, unless you provide a local version of
+        the documentation to `version` (e.g., ``file:///path/to/docs``).
+
+    Parameters
+    ----------
+    obj
+        The object to open the docs for or its fully-qualified name
+        (as a str).
+    version : str
+        The doc version - either a version number like '0.1', 'dev' for
+        the development/latest docs, or a URL to point to a specific
+        location that should be the *base* of the documentation. Defaults to
+        latest if you are on aren't on a release, otherwise, the version you
+        are on.
+    openinbrowser : bool
+        If True, the `webbrowser` package will be used to open the doc
+        page in a new web browser window.
+    timeout : number, optional
+        The number of seconds to wait before timing-out the query to
+        the astropy documentation.  If not given, the default python
+        stdlib timeout will be used.
+    Returns
+    -------
+    url : str
+        The loaded URL
+
+    Raises
+    ------
+    ValueError
+        If the documentation can't be found
+
+    """
+    import webbrowser
+
+    from zlib import decompress
+
+    if (not isinstance(obj, six.string_types) and
+            hasattr(obj, '__module__') and
+            hasattr(obj, '__name__')):
+        obj = obj.__module__ + '.' + obj.__name__
+    elif inspect.ismodule(obj):
+        obj = obj.__name__
+
+    if version is None:
+        from .. import version
+
+        if version.release:
+            version = 'v' + version.version
+        else:
+            version = 'dev'
+
+    if '://' in version:
+        if version.endswith('index.html'):
+            baseurl = version[:-10]
+        elif version.endswith('/'):
+            baseurl = version
+        else:
+            baseurl = version + '/'
+    elif version == 'dev' or version == 'latest':
+        baseurl = 'http://devdocs.astropy.org/'
+    else:
+        baseurl = 'http://docs.astropy.org/en/{vers}/'.format(vers=version)
+
+    if timeout is None:
+        uf = urllib.request.urlopen(baseurl + 'objects.inv')
+    else:
+        uf = urllib.request.urlopen(baseurl + 'objects.inv', timeout=timeout)
+
+    try:
+        # we read these lines so that `oistr` only gets the compressed
+        # contents, not the header information
+        isvers = uf.readline().rstrip().decode('utf-8')  # intersphinx version line
+        proj = uf.readline().rstrip().decode('utf-8')  # project name
+        vers = uf.readline().rstrip().decode('utf-8')  # project version
+        uf.readline().rstrip().decode('utf-8')
+        oistr = uf.read()
+    finally:
+        uf.close()
+
+    oistr = decompress(oistr).decode('utf-8')
+
+    resurl = None
+
+    for l in oistr.strip().splitlines():
+        ls = l.split()
+        name = ls[0]
+        loc = ls[3]
+        if loc.endswith('$'):
+            loc = loc[:-1] + name
+
+        if name == obj:
+            resurl = baseurl + loc
+            break
+
+    if resurl is None:
+        raise ValueError('Could not find the docs for the object {obj}'.format(obj=obj))
+    elif openinbrowser:
+        webbrowser.open(resurl)
+
+    return resurl
+
+
 def signal_number_to_name(signum):
     """
     Given an OS signal number, returns a signal name.  If the signal
@@ -594,7 +725,6 @@ def signal_number_to_name(signum):
     # Since these numbers and names are platform specific, we use the
     # builtin signal module and build a reverse mapping.
 
-    import signal
     signal_to_name_map = dict(
         (k, v) for v, k in signal.__dict__.iteritems() if v.startswith('SIG'))
 
@@ -666,3 +796,36 @@ def walk_skip_hidden(top, onerror=None, followlinks=False):
         dirs[:] = [d for d in dirs if not is_path_hidden(d)]
         files[:] = [f for f in files if not is_path_hidden(f)]
         yield root, dirs, files
+
+
+class JsonCustomEncoder(json.JSONEncoder):
+    """Support for data types that JSON default encoder
+    does not do.
+
+    This includes:
+
+        * Numpy array or number
+        * Complex number
+        * Set
+        * Bytes (Python 3)
+
+    Examples
+    --------
+    >>> import json
+    >>> import numpy as np
+    >>> from astropy.utils.misc import JsonCustomEncoder
+    >>> json.dumps(np.arange(3), cls=JsonCustomEncoder)
+    '[0, 1, 2]'
+
+    """
+    def default(self, obj):
+        import numpy as np
+        if isinstance(obj, (np.ndarray, np.number)):
+            return obj.tolist()
+        elif isinstance(obj, (complex, np.complex)):
+            return [obj.real, obj.imag]
+        elif isinstance(obj, set):
+            return list(obj)
+        elif isinstance(obj, bytes):  # pragma: py3
+            return obj.decode()
+        return json.JSONEncoder.default(self, obj)
diff --git a/astropy/utils/release.py b/astropy/utils/release.py
index bf0555a..d328837 100644
--- a/astropy/utils/release.py
+++ b/astropy/utils/release.py
@@ -4,6 +4,13 @@
 This module contains hooks for zest.releaser for use in semi-automated releases
 of Astropy.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+import io
+import os
+import re
+import sys
 
 
 def prereleaser_middle(data):
@@ -31,9 +38,6 @@ def releaser_middle(data):
     if data['name'] != 'astropy':
         return
 
-    import os
-    import sys
-
     from zest.releaser.git import Git
     from zest.releaser.release import Releaser
 
@@ -45,30 +49,29 @@ def releaser_middle(data):
         msg = "Tagging %s" % (version,)
         cmd = 'git tag -s %s -m "%s"' % (version, msg)
         if os.path.isdir('.git/svn'):
-            print "\nEXPERIMENTAL support for git-svn tagging!\n"
+            print("\nEXPERIMENTAL support for git-svn tagging!\n")
             cur_branch = open('.git/HEAD').read().strip().split('/')[-1]
-            print "You are on branch %s." % (cur_branch,)
+            print("You are on branch %s." % (cur_branch,))
             if cur_branch != 'master':
-                print "Only the master branch is supported for git-svn tagging."
-                print "Please tag yourself."
-                print "'git tag' needs to list tag named %s." % (version,)
+                print("Only the master branch is supported for git-svn tagging.")
+                print("Please tag yourself.")
+                print("'git tag' needs to list tag named %s." % (version,))
                 sys.exit()
             cmd = [cmd]
             local_head = open('.git/refs/heads/master').read()
             trunk = open('.git/refs/remotes/trunk').read()
             if local_head != trunk:
-                print "Your local master diverges from trunk.\n"
+                print("Your local master diverges from trunk.\n")
                 # dcommit before local tagging
                 cmd.insert(0, 'git svn dcommit')
             # create tag in svn
             cmd.append('git svn tag -m "%s" %s' % (msg, version))
         return cmd
 
-    # Similarly copied from zer.releaser to support use of 'v' in front
+    # Similarly copied from zest.releaser to support use of 'v' in front
     # of the version number
     def _my_make_tag(self):
         from zest.releaser import utils
-        from os import system
 
         if self.data['tag_already_exists']:
             return
@@ -76,18 +79,18 @@ def releaser_middle(data):
         if not isinstance(cmds, list):
             cmds = [cmds]
         if len(cmds) == 1:
-            print "Tag needed to proceed, you can use the following command:"
+            print("Tag needed to proceed, you can use the following command:")
         for cmd in cmds:
-            print cmd
+            print(cmd)
             if utils.ask("Run this command"):
-                print system(cmd)
+                print(os.system(cmd))
             else:
                 # all commands are needed in order to proceed normally
-                print "Please create a tag for %s yourself and rerun." % \
-                        (self.data['version'],)
+                print("Please create a tag for %s yourself and rerun." % \
+                        (self.data['version'],))
                 sys.exit()
         if not self.vcs.tag_exists('v' + self.data['version']):
-            print "\nFailed to create tag %s!" % (self.data['version'],)
+            print("\nFailed to create tag %s!" % (self.data['version'],))
             sys.exit()
 
     # Normally all this does is to return '--formats=zip', which is currently
@@ -124,18 +127,14 @@ def postreleaser_middle(data):
 
 
 def _update_setup_py_version(version):
-    import re
-    from StringIO import StringIO
-
     pattern = re.compile(r'^VERSION\s*=\s*[\'"]{1,3}')
-    output = StringIO()
+    output = io.StringIO()
     with open('setup.py') as setup_py:
         for line in setup_py:
             if not pattern.match(line):
-                output.write(line)
+                output.write(line.decode('utf-8'))
             else:
-                output.write('VERSION = {0!r}\n'.format(version))
+                output.write("VERSION = '{0}'\n".format(version))
 
-    with open('setup.py', 'w') as setup_py:
+    with io.open('setup.py', 'w') as setup_py:
         setup_py.write(output.getvalue())
-
diff --git a/astropy/utils/setup_package.py b/astropy/utils/setup_package.py
index 237bcbf..d013261 100644
--- a/astropy/utils/setup_package.py
+++ b/astropy/utils/setup_package.py
@@ -4,11 +4,12 @@ from os.path import dirname, join, relpath
 
 ASTROPY_UTILS_ROOT = dirname(__file__)
 
+
 def get_extensions():
     return [
         Extension('astropy.utils._compiler',
                   [relpath(join(ASTROPY_UTILS_ROOT, 'src', 'compiler.c'))])
-        ]
+    ]
 
 
 def get_package_data():
@@ -21,5 +22,13 @@ def get_package_data():
             'data/*.dat.gz',
             'data/*.dat.bz2',
             'data/*.txt',
-            'data/.hidden_file.txt']
-        }
+            'data/.hidden_file.txt'],
+        'astropy.utils.iers': [
+            'data/ReadMe.eopc04_IAU2000',
+            'data/ReadMe.finals2000A',
+            'data/eopc04_IAU2000.62-now']
+    }
+
+
+def requires_2to3():
+    return False
diff --git a/astropy/utils/tests/__init__.py b/astropy/utils/tests/__init__.py
index e69de29..800d82e 100644
--- a/astropy/utils/tests/__init__.py
+++ b/astropy/utils/tests/__init__.py
@@ -0,0 +1,2 @@
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
diff --git a/astropy/utils/tests/odict_mapping.py b/astropy/utils/tests/odict_mapping.py
index 8e105e7..93042f7 100644
--- a/astropy/utils/tests/odict_mapping.py
+++ b/astropy/utils/tests/odict_mapping.py
@@ -1,10 +1,6 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-import unittest
 
-try:
-    import UserDict
-except ImportError:
-    from collections import UserDict
+import unittest
 
 from . import odict_support as test_support
 
@@ -228,7 +224,7 @@ class BasicTestMappingProtocol(unittest.TestCase):
 
         d.clear()
 
-        class FailingUserDict:
+        class FailingUserDict2:
             def keys(self):
                 class BogonIter:
                     def __init__(self):
@@ -243,9 +239,9 @@ class BasicTestMappingProtocol(unittest.TestCase):
                 return BogonIter()
             def __getitem__(self, key):
                 return key
-        self.assertRaises(Exc, d.update, FailingUserDict())
+        self.assertRaises(Exc, d.update, FailingUserDict2())
 
-        class FailingUserDict:
+        class FailingUserDict3:
             def keys(self):
                 class BogonIter:
                     def __init__(self):
@@ -261,7 +257,7 @@ class BasicTestMappingProtocol(unittest.TestCase):
                 return BogonIter()
             def __getitem__(self, key):
                 raise Exc
-        self.assertRaises(Exc, d.update, FailingUserDict())
+        self.assertRaises(Exc, d.update, FailingUserDict3())
 
         d = self._empty_mapping()
         class badseq(object):
diff --git a/astropy/utils/tests/odict_support.py b/astropy/utils/tests/odict_support.py
index 90418a3..c069533 100644
--- a/astropy/utils/tests/odict_support.py
+++ b/astropy/utils/tests/odict_support.py
@@ -5,10 +5,7 @@ import contextlib
 import sys
 import warnings
 import re
-try:
-    import thread
-except ImportError:
-    thread = None
+
 
 __all__ = ["check_py3k_warnings"]
 
diff --git a/astropy/utils/tests/test_collections.py b/astropy/utils/tests/test_collections.py
index 637bf43..af7fe93 100644
--- a/astropy/utils/tests/test_collections.py
+++ b/astropy/utils/tests/test_collections.py
@@ -1,4 +1,7 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 from ...tests.helper import raises
 
 from .. import collections
diff --git a/astropy/utils/tests/test_console.py b/astropy/utils/tests/test_console.py
index 6aee9b5..f39aae4 100644
--- a/astropy/utils/tests/test_console.py
+++ b/astropy/utils/tests/test_console.py
@@ -1,18 +1,72 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 # -*- coding: utf-8 -*-
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from ...extern.six import next
+from ...extern.six.moves import xrange
 
 import io
 import locale
-import sys
-
-from ...tests.helper import pytest, raises
 
+from ...tests.helper import pytest
 from .. import console
 
 
- at pytest.mark.skipif("sys.platform.startswith('win')")
+class FakeTTY(io.StringIO):
+    """IOStream that fakes a TTY; provide an encoding to emulate an output
+    stream with a specific encoding.
+    """
+
+    def __new__(cls, encoding=None):
+        # Return a new subclass of FakeTTY with the requested encoding
+        if encoding is None:
+            return super(FakeTTY, cls).__new__(cls)
+
+        # Since we're using unicode_literals in this module ensure that this is
+        # a 'str' object (since a class name can't be unicode in Python 2.7)
+        encoding = str(encoding)
+        cls = type(encoding.title() + cls.__name__, (cls,),
+                   {'encoding': encoding})
+
+        return cls.__new__(cls)
+
+    def __init__(self, encoding=None):
+        super(FakeTTY, self).__init__()
+
+    def write(self, s):
+        if isinstance(s, bytes):
+            # Just allow this case to work
+            s = s.decode('latin-1')
+        elif self.encoding is not None:
+            s.encode(self.encoding)
+
+        return super(FakeTTY, self).write(s)
+
+    def isatty(self):
+        return True
+
+
+def test_fake_tty():
+    # First test without a specified encoding; we should be able to write
+    # arbitrary unicode strings
+    f1 = FakeTTY()
+    assert f1.isatty()
+    f1.write('\N{SNOWMAN}')
+    assert f1.getvalue() == '\N{SNOWMAN}'
+
+    # Now test an ASCII-only TTY--it should raise a UnicodeEncodeError when
+    # trying to write a string containing non-ASCII characters
+    f2 = FakeTTY('ascii')
+    assert f2.isatty()
+    assert f2.__class__.__name__ == 'AsciiFakeTTY'
+    assert pytest.raises(UnicodeEncodeError, f2.write, '\N{SNOWMAN}')
+    assert f2.getvalue() == ''
+
+
+ at pytest.mark.skipif(str("sys.platform.startswith('win')"))
 def test_color_text():
-    assert console._color_text("foo", "green") == u'\033[0;32mfoo\033[0m'
+    assert console._color_text("foo", "green") == '\033[0;32mfoo\033[0m'
 
 
 def test_color_print():
@@ -27,38 +81,35 @@ def test_color_print2():
     # not a tty
     stream = io.StringIO()
     console.color_print("foo", "green", file=stream)
-    assert stream.getvalue() == u'foo\n'
+    assert stream.getvalue() == 'foo\n'
 
     stream = io.StringIO()
     console.color_print("foo", "green", "bar", "red", "baz", file=stream)
-    assert stream.getvalue() == u'foobarbaz\n'
+    assert stream.getvalue() == 'foobarbaz\n'
 
 
- at pytest.mark.skipif("sys.platform.startswith('win')")
+ at pytest.mark.skipif(str("sys.platform.startswith('win')"))
 def test_color_print3():
-    # Test that this things the FakeTTY is a tty and applies colors.
-    class FakeTTY(io.StringIO):
-        def isatty(self):
-            return True
+    # Test that this thinks the FakeTTY is a tty and applies colors.
 
     stream = FakeTTY()
     console.color_print("foo", "green", file=stream)
-    assert stream.getvalue() == u'\x1b[0;32mfoo\x1b[0m\n'
+    assert stream.getvalue() == '\x1b[0;32mfoo\x1b[0m\n'
 
     stream = FakeTTY()
     console.color_print("foo", "green", "bar", "red", "baz", file=stream)
-    assert stream.getvalue() == u'\x1b[0;32mfoo\x1b[0m\x1b[0;31mbar\x1b[0mbaz\n'
+    assert stream.getvalue() == '\x1b[0;32mfoo\x1b[0m\x1b[0;31mbar\x1b[0mbaz\n'
 
 
 def test_color_print_unicode():
-    console.color_print(u"überbær", "red")
+    console.color_print("überbær", "red")
 
 
 def test_color_print_invalid_color():
     console.color_print("foo", "unknown")
 
 
- at pytest.mark.skipif('sys.version_info[0] > 2')
+ at pytest.mark.skipif(str('sys.version_info[0] > 2'))
 def test_color_print_no_default_encoding():
     """Regression test for #1244
 
@@ -74,16 +125,32 @@ def test_color_print_no_default_encoding():
         # Try printing a string that can be utf-8 decoded (the default)
         stream = io.StringIO()
         console.color_print(b'\xe2\x98\x83', 'white', file=stream)
-        assert stream.getvalue() == u'☃\n'
+        assert stream.getvalue() == '☃\n'
 
         # Test the latin-1 fallback
         stream = io.StringIO()
         console.color_print(b'\xcd\xef', 'red', file=stream)
-        assert stream.getvalue() == u'Íï\n'
+        assert stream.getvalue() == 'Íï\n'
     finally:
         locale.getpreferredencoding = orig_func
 
 
+def test_spinner_non_unicode_console():
+    """Regression test for #1760
+
+    Ensures that the spinner can fall go into fallback mode when using the
+    unicode spinner on a terminal whose default encoding cannot encode the
+    unicode characters.
+    """
+
+    stream = FakeTTY('ascii')
+    chars = console.Spinner._default_unicode_chars
+
+    with console.Spinner("Reticulating splines", file=stream,
+                         chars=chars) as s:
+        next(s)
+
+
 def test_progress_bar():
     # This stuff is hard to test, at least smoke test it
     with console.ProgressBar(50) as bar:
@@ -92,7 +159,7 @@ def test_progress_bar():
 
 
 def test_progress_bar2():
-    for x in console.ProgressBar.iterate(range(50)):
+    for x in console.ProgressBar.iterate(xrange(50)):
         pass
 
 
@@ -100,9 +167,21 @@ def test_progress_bar3():
     def do_nothing(*args, **kwargs):
         pass
 
-    console.ProgressBar.map(do_nothing, range(50))
+    console.ProgressBar.map(do_nothing, xrange(50))
 
 
 def test_zero_progress_bar():
     with console.ProgressBar(0) as bar:
         pass
+
+
+def test_progress_bar_as_generator():
+    sum = 0
+    for x in console.ProgressBar(xrange(50)):
+        sum += x
+    assert sum == 1225
+
+    sum = 0
+    for x in console.ProgressBar(50):
+        sum += x
+    assert sum == 1225
diff --git a/astropy/utils/tests/test_data.py b/astropy/utils/tests/test_data.py
index 761c666..7fbece0 100644
--- a/astropy/utils/tests/test_data.py
+++ b/astropy/utils/tests/test_data.py
@@ -1,6 +1,12 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from ...extern import six
+
 from ...tests.helper import remote_data, raises
 
+import hashlib
 import io
 import os
 import sys
@@ -15,7 +21,6 @@ TESTURL = 'http://www.google.com/index.html'
 
 @remote_data
 def test_download_nocache():
-
     from ..data import download_file
 
     fnout = download_file(TESTURL)
@@ -23,6 +28,14 @@ def test_download_nocache():
 
 
 @remote_data
+def test_download_noprogress():
+    from ..data import download_file
+
+    fnout = download_file(TESTURL, show_progress=False)
+    assert os.path.isfile(fnout)
+
+
+ at remote_data
 def test_download_cache():
 
     from ..data import download_file, clear_download_cache
@@ -49,8 +62,6 @@ def test_find_by_hash():
 
     from ..data import get_readable_fileobj, get_pkg_data_filename, clear_download_cache
 
-    import hashlib
-
     with get_readable_fileobj(TESTURL, encoding="binary", cache=True) as googlepage:
         hash = hashlib.md5(googlepage.read())
 
@@ -65,6 +76,17 @@ def test_find_by_hash():
     assert not os.path.isdir(lockdir), 'Cache dir lock was not released!'
 
 
+ at remote_data
+def test_find_by_hash():
+    from urllib2 import URLError
+    from ..data import get_pkg_data_filename
+
+    #this is of course not a real data file and not on any remote server, but it should *try* to go to the remote server
+    with raises(URLError):
+        get_pkg_data_filename('kjfrhgjklahgiulrhgiuraehgiurhgiuhreglhurieghruelighiuerahiulruli')
+
+
+
 # Package data functions
 @pytest.mark.parametrize(('filename'), ['local.dat', 'local.dat.gz', 'local.dat.bz2'])
 def test_local_data_obj(filename):
@@ -129,7 +151,6 @@ def test_local_data_nonlocalfail():
 
 
 def test_compute_hash(tmpdir):
-    import hashlib
     from ..data import compute_hash
 
     rands = b'1234567890abcdefghijklmnopqrstuvwxyz'
@@ -163,7 +184,7 @@ def test_data_noastropy_fallback(monkeypatch, recwarn):
     Tests to make sure the default behavior when the cache directory can't
     be located is correct
     """
-    from pytest import raises
+
     from .. import data
     from ...config import paths
 
@@ -235,9 +256,9 @@ def test_read_unicode():
     from ..data import get_pkg_data_contents
 
     contents = get_pkg_data_contents('data/unicode.txt', encoding='utf-8')
-    assert isinstance(contents, unicode)
+    assert isinstance(contents, six.text_type)
     contents = contents.splitlines()[1]
-    assert contents == u"\u05d4\u05d0\u05e1\u05d8\u05e8\u05d5\u05e0\u05d5\u05de\u05d9 \u05e4\u05d9\u05d9\u05ea\u05d5\u05df"
+    assert contents == "\u05d4\u05d0\u05e1\u05d8\u05e8\u05d5\u05e0\u05d5\u05de\u05d9 \u05e4\u05d9\u05d9\u05ea\u05d5\u05df"
 
     contents = get_pkg_data_contents('data/unicode.txt', encoding='binary')
     assert isinstance(contents, bytes)
@@ -280,7 +301,7 @@ def test_invalid_location_download():
     checks that download_file gives a URLError and not an AttributeError,
     as its code pathway involves some fiddling with the exception.
     """
-    from urllib2 import URLError
+    from ...extern.six.moves.urllib_error import URLError
     from ..data import download_file
 
     with pytest.raises(URLError):
diff --git a/astropy/utils/tests/test_gzip.py b/astropy/utils/tests/test_gzip.py
index 0ef5cbb..f760eaf 100644
--- a/astropy/utils/tests/test_gzip.py
+++ b/astropy/utils/tests/test_gzip.py
@@ -1,11 +1,14 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 import io
-import os
 
 from ...tests.helper import pytest
 from ..compat import gzip
 
-pytestmark = pytest.mark.skipif("sys.version_info < (3,0)")
+
+pytestmark = pytest.mark.skipif(str("sys.version_info < (3,0)"))
 
 
 def test_gzip(tmpdir):
@@ -16,4 +19,3 @@ def test_gzip(tmpdir):
 def test_gzip2(tmpdir):
     with gzip.GzipFile(str(tmpdir.join("test.gz")), 'wb') as fd:
         pass
-
diff --git a/astropy/utils/tests/test_metadata.py b/astropy/utils/tests/test_metadata.py
new file mode 100644
index 0000000..6ca0abb
--- /dev/null
+++ b/astropy/utils/tests/test_metadata.py
@@ -0,0 +1,73 @@
+import abc
+
+from ..metadata import MetaData
+from ..compat.odict import OrderedDict
+from ...tests.helper import pytest
+from ...io import fits
+
+
+class OrderedDictSubclass(OrderedDict):
+    pass
+
+
+class MetaBaseTest(object):
+
+    __metaclass__ = abc.ABCMeta
+
+    def test_none(self):
+        d = self.test_class(*self.args)
+        assert isinstance(d.meta, OrderedDict)
+        assert len(d.meta) == 0
+
+
+    @pytest.mark.parametrize(('meta'), ([dict([('a', 1)]),
+                                         OrderedDict([('a', 1)]),
+                                         OrderedDictSubclass([('a', 1)])]))
+    def test_mapping_init(self, meta):
+        d = self.test_class(*self.args, meta=meta)
+        assert type(d.meta) == type(meta)
+        assert d.meta['a'] == 1
+
+
+    @pytest.mark.parametrize(('meta'), (["ceci n'est pas un meta", 1.2, [1, 2, 3]]))
+    def test_non_mapping_init(self, meta):
+        with pytest.raises(TypeError):
+            self.test_class(*self.args, meta=meta)
+
+
+    @pytest.mark.parametrize(('meta'), ([dict([('a', 1)]),
+                                         OrderedDict([('a', 1)]),
+                                         OrderedDictSubclass([('a', 1)])]))
+    def test_mapping_set(self, meta):
+        d = self.test_class(*self.args, meta=meta)
+        assert type(d.meta) == type(meta)
+        assert d.meta['a'] == 1
+
+
+    @pytest.mark.parametrize(('meta'), (["ceci n'est pas un meta", 1.2, [1, 2, 3]]))
+    def test_non_mapping_set(self, meta):
+        with pytest.raises(TypeError):
+            d = self.test_class(*self.args, meta=meta)
+
+
+    def test_meta_fits_header(self):
+
+        header = fits.header.Header()
+        header.set('observer', 'Edwin Hubble')
+        header.set('exptime', '3600')
+
+        d = self.test_class(*self.args, meta=header)
+
+        assert d.meta['OBSERVER'] == 'Edwin Hubble'
+
+
+class ExampleData(object):
+    meta = MetaData()
+
+    def __init__(self, meta=None):
+        self.meta = meta
+
+
+class TestMetaExampleData(MetaBaseTest):
+    test_class = ExampleData
+    args = ()
diff --git a/astropy/utils/tests/test_misc.py b/astropy/utils/tests/test_misc.py
index 4a1327f..20836fe 100644
--- a/astropy/utils/tests/test_misc.py
+++ b/astropy/utils/tests/test_misc.py
@@ -1,11 +1,18 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from .. import misc
-from .. import data
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
+import json
+import os
 
 #namedtuple is needed for find_mod_objs so it can have a non-local module
 from collections import namedtuple
-import warnings
+
+import numpy as np
+
+from .. import data, misc
+from ..exceptions import AstropyDeprecationWarning
+from ...tests.helper import remote_data, catch_warnings
 
 
 def test_pkg_finder():
@@ -65,13 +72,11 @@ def test_find_current_mod():
 
 
 def test_isiterable():
-    from numpy import array
-
     assert misc.isiterable(2) is False
     assert misc.isiterable([2]) is True
     assert misc.isiterable([1, 2, 3]) is True
-    assert misc.isiterable(array(2)) is False
-    assert misc.isiterable(array([1, 2, 3])) is True
+    assert misc.isiterable(np.array(2)) is False
+    assert misc.isiterable(np.array([1, 2, 3])) is True
 
 
 def test_deprecated_attribute():
@@ -86,26 +91,28 @@ def test_deprecated_attribute():
 
     dummy = DummyClass()
 
-    with warnings.catch_warnings(record=True) as w:
-        warnings.resetwarnings()
-        warnings.simplefilter('always')
+    with catch_warnings(AstropyDeprecationWarning) as w:
         x = dummy.foo
 
     assert len(w) == 1
     assert str(w[0].message) == ("The foo attribute is deprecated and may be "
                                  "removed in a future version.")
 
-    with warnings.catch_warnings(record=True) as w:
-        warnings.resetwarnings()
-        warnings.simplefilter('always')
+    with catch_warnings() as w:
         dummy.set_private()
 
     assert len(w) == 0
 
+ at remote_data
+def test_api_lookup():
+    strurl = misc.find_api_page('astropy.utils.misc', 'dev', False, timeout=3)
+    objurl = misc.find_api_page(misc, 'dev', False, timeout=3)
 
-def test_skip_hidden():
-    import os
+    assert strurl == objurl
+    assert strurl == 'http://devdocs.astropy.org/utils/index.html#module-astropy.utils.misc'
 
+
+def test_skip_hidden():
     path = data._find_pkg_data_path('data')
     for root, dirs, files in os.walk(path):
         assert '.hidden_file.txt' in files
@@ -118,3 +125,13 @@ def test_skip_hidden():
         assert '.hidden_file.txt' not in files
         assert 'local.dat' in files
         break
+
+
+def test_JsonCustomEncoder():
+    assert json.dumps(np.arange(3), cls=misc.JsonCustomEncoder) == '[0, 1, 2]'
+    assert json.dumps(1+2j, cls=misc.JsonCustomEncoder) == '[1.0, 2.0]'
+    assert json.dumps(set([1, 2, 1]), cls=misc.JsonCustomEncoder) == '[1, 2]'
+    assert json.dumps(b'hello world \xc3\x85',
+                      cls=misc.JsonCustomEncoder) == '"hello world \\u00c5"'
+    assert json.dumps({1: 2},
+                      cls=misc.JsonCustomEncoder) == '{"1": 2}'  # default
diff --git a/astropy/utils/tests/test_odict.py b/astropy/utils/tests/test_odict.py
index ffc51b4..0cbfb8a 100644
--- a/astropy/utils/tests/test_odict.py
+++ b/astropy/utils/tests/test_odict.py
@@ -7,6 +7,10 @@ OrderedDict and slightly customized (and renamed) the modules
 test_support.py and mapping_tests.py that provide support for those
 tests.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from ...extern import six
 
 import unittest
 import inspect
@@ -19,7 +23,7 @@ from ..compat.odict import OrderedDict
 from ...tests.helper import pytest
 
 #Skips all of these tests if the builtin ordered dict is available
-pytestmark = pytest.mark.skipif("sys.version_info >= (2,7)")
+pytestmark = pytest.mark.skipif(str("sys.version_info >= (2,7)"))
 
 
 class TestOrderedDict(unittest.TestCase):
@@ -121,9 +125,9 @@ class TestOrderedDict(unittest.TestCase):
         self.assertEqual(od.keys()[:], [t[0] for t in pairs])
         self.assertEqual(od.values()[:], [t[1] for t in pairs])
         self.assertEqual(od.items()[:], pairs)
-        self.assertEqual(list(od.iterkeys()), [t[0] for t in pairs])
-        self.assertEqual(list(od.itervalues()), [t[1] for t in pairs])
-        self.assertEqual(list(od.iteritems()), pairs)
+        self.assertEqual(list(six.iterkeys(od)), [t[0] for t in pairs])
+        self.assertEqual(list(six.itervalues(od)), [t[1] for t in pairs])
+        self.assertEqual(list(six.iteritems(od)), pairs)
         self.assertEqual(list(reversed(od)),
                          [t[0] for t in reversed(pairs)])
 
@@ -224,7 +228,7 @@ class TestOrderedDict(unittest.TestCase):
     def test_repr(self):
         od = OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])
         self.assertEqual(repr(od),
-            "OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])")
+            "OrderedDict([(u'c', 1), (u'b', 2), (u'a', 3), (u'd', 4), (u'e', 5), (u'f', 6)])")
         self.assertEqual(eval(repr(od)), od)
         self.assertEqual(repr(OrderedDict()), "OrderedDict()")
 
diff --git a/astropy/utils/tests/test_timer.py b/astropy/utils/tests/test_timer.py
new file mode 100644
index 0000000..cd07bea
--- /dev/null
+++ b/astropy/utils/tests/test_timer.py
@@ -0,0 +1,64 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""Test `astropy.utils.timer`.
+
+.. note::
+
+    The tests only compare rough estimates as
+    performance is machine-dependent.
+
+"""
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+# STDLIB
+import time
+
+# LOCAL
+from ..timer import RunTimePredictor
+
+
+def func_to_time(x):
+    """This is sleeps for x seconds for timing tests."""
+    time.sleep(x)
+    return 'Slept for {0} second(s)'.format(x)
+
+
+def test_timer():
+    p = RunTimePredictor(func_to_time)
+    try:
+        p.do_fit()
+    except AssertionError as e:
+        assert str(e) == 'Requires 3 points but has 0'
+
+    try:
+        p.predict_time(100)
+    except AssertionError as e:
+        assert str(e) == 'No fitted data for prediction'
+
+    p.time_func([0.1, 0.2, 0.5, 'a', 1.5])
+    p.time_func(1.0)
+
+    assert p._funcname == 'func_to_time'
+    assert p._cache_bad == ['a']
+    assert p.results == {0.1: 'Slept for 0.1 second(s)',
+                         0.2: 'Slept for 0.2 second(s)',
+                         0.5: 'Slept for 0.5 second(s)',
+                         1.5: 'Slept for 1.5 second(s)',
+                         1.0: 'Slept for 1.0 second(s)'}
+
+    a = p.do_fit()
+    assert p._power == 1
+
+    # Perfect slope is 1, with 10% uncertainty
+    assert 0.9 <= a[0] <= 1.1
+
+    # Perfect intercept is 0, with 1-sec uncertainty
+    assert -1 <= a[1] <= 1
+
+    # Perfect answer is 100, with 10% uncertainty
+    t = p.predict_time(100)
+    assert 90 <= t <= 110
+
+    # Repeated call to access cached run time
+    t2 = p.predict_time(100)
+    assert t == t2
diff --git a/astropy/utils/tests/test_xml.py b/astropy/utils/tests/test_xml.py
index e33cf83..adad665 100644
--- a/astropy/utils/tests/test_xml.py
+++ b/astropy/utils/tests/test_xml.py
@@ -1,7 +1,12 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from ...extern import six
+
 import io
 
-from ..xml import check, writer
+from ..xml import check, unescaper, writer
 
 
 def test_writer():
@@ -41,15 +46,31 @@ def test_check_anyuri():
     assert check.check_anyuri("https://github.com/astropy/astropy")
 
 
+def test_unescape_all():
+    # str
+    url_in = 'http://casu.ast.cam.ac.uk/ag/iphas-dsa/SubmitCone?' \
+             'DSACAT=IDR&amp;DSATAB=Emitters&amp;'
+    url_out = 'http://casu.ast.cam.ac.uk/ag/iphas-dsa/SubmitCone?' \
+              'DSACAT=IDR&DSATAB=Emitters&'
+    assert unescaper.unescape_all(url_in) == url_out
+
+    # bytes
+    url_in = b'http://casu.ast.cam.ac.uk/ag/iphas-dsa/SubmitCone?' \
+             b'DSACAT=IDR&amp;DSATAB=Emitters&amp;'
+    url_out = b'http://casu.ast.cam.ac.uk/ag/iphas-dsa/SubmitCone?' \
+              b'DSACAT=IDR&DSATAB=Emitters&'
+    assert unescaper.unescape_all(url_in) == url_out
+
+
 def test_escape_xml():
     s = writer.xml_escape('This & That')
-    assert type(s) == unicode
-    assert s == u'This & That'
+    assert type(s) == six.text_type
+    assert s == 'This & That'
 
-    s = writer.xml_escape(u'This & That')
-    assert type(s) == unicode
-    assert s == u'This & That'
+    s = writer.xml_escape('This & That')
+    assert type(s) == six.text_type
+    assert s == 'This & That'
 
     s = writer.xml_escape(1)
-    assert type(s) == unicode
-    assert s == u'1'
+    assert type(s) == six.text_type
+    assert s == '1'
diff --git a/astropy/utils/timer.py b/astropy/utils/timer.py
new file mode 100644
index 0000000..5a37291
--- /dev/null
+++ b/astropy/utils/timer.py
@@ -0,0 +1,344 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""General purpose timer related functions."""
+
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from ..extern import six
+from ..extern.six.moves import xrange, map
+
+# STDLIB
+import time
+import warnings
+from collections import Iterable
+from functools import partial, wraps
+
+# THIRD-PARTY
+import numpy as np
+
+# LOCAL
+from . import OrderedDict
+from .. import units as u
+from .. import log
+from .exceptions import AstropyUserWarning
+
+
+__all__ = ['timefunc', 'RunTimePredictor']
+
+
+__doctest_skip__ = ['timefunc']
+
+
+def timefunc(num_tries=1, verbose=True):
+    """Decorator to time a function or method.
+
+    Parameters
+    ----------
+    num_tries : int, optional
+        Number of calls to make. Timer will take the
+        average run time.
+
+    verbose : bool, optional
+        Extra log INFO.
+
+    function
+        Function to time.
+
+    args, kwargs
+        Arguments to the function.
+
+    Returns
+    -------
+    tt : float
+        Average run time in seconds.
+
+    result
+        Output(s) from the function.
+
+    Examples
+    --------
+    To add timer to time `numpy.log` for 100 times with
+    verbose output::
+
+        import numpy as np
+        from astropy.utils.timer import timefunc
+
+        @timefunc(100)
+        def timed_log(x):
+            return np.log(x)
+
+    To run the decorated function above:
+
+    >>> t, y = timed_log(100)
+    INFO: timed_log took 9.29832458496e-06 s on AVERAGE for 100 call(s). [...]
+    >>> t
+    9.298324584960938e-06
+    >>> y
+    4.6051701859880918
+
+    """
+    def real_decorator(function):
+        @wraps(function)
+        def wrapper(*args, **kwargs):
+            ts = time.time()
+            for i in xrange(num_tries):
+                result = function(*args, **kwargs)
+            te = time.time()
+            tt = (te - ts) / num_tries
+            if verbose:  # pragma: no cover
+                log.info('{0} took {1} s on AVERAGE for {2} call(s).'.format(
+                    function.__name__, tt, num_tries))
+            return tt, result
+        return wrapper
+    return real_decorator
+
+
+class RunTimePredictor(object):
+    """Class to predict run time.
+
+    .. note:: Only predict for single varying numeric input parameter.
+
+    Parameters
+    ----------
+    func : function
+        Function to time.
+
+    args : tuple
+        Fixed positional argument(s) for the function.
+
+    kwargs : dict
+        Fixed keyword argument(s) for the function.
+
+    Examples
+    --------
+    >>> from astropy.utils.timer import RunTimePredictor
+
+    Set up a predictor for ``10**X``:
+
+    >>> p = RunTimePredictor(pow, 10)
+
+    Give it baseline data to use for prediction and
+    get the function output values:
+
+    >>> p.time_func(range(10, 1000, 200))
+    >>> for input, result in sorted(p.results.items()):
+    ...     print("pow(10, {0})\\n{1}".format(input, result))
+    pow(10, 10)
+    10000000000
+    pow(10, 210)
+    10000000000...
+    pow(10, 410)
+    10000000000...
+    pow(10, 610)
+    10000000000...
+    pow(10, 810)
+    10000000000...
+
+    Fit a straight line assuming ``arg**1`` relationship
+    (coefficients are returned):
+
+    >>> p.do_fit()  # doctest: +SKIP
+    array([  1.00135803e-08,   1.16777420e-05])
+
+    Predict run time for ``10**5000``:
+
+    >>> p.predict_time(5000)  # doctest: +SKIP
+    6.174564361572262e-05
+
+    Plot the prediction:
+
+    >>> p.plot(xlabeltext='Power of 10')  # doctest: +SKIP
+
+    .. image:: /_static/timer_prediction_pow10.png
+        :width: 450px
+        :alt: Example plot from `astropy.utils.timer.RunTimePredictor`
+
+    When the changing argument is not the last, e.g.,
+    `pow(x, 2)`, something like this might work:
+
+    >>> p = RunTimePredictor(lambda x: pow(x, 2))
+    >>> p.time_func([2,3,5])
+    >>> sorted(p.results.items())
+    [(2, 4), (3, 9), (5, 25)]
+
+    """
+    def __init__(self, func, *args, **kwargs):
+        self._funcname = func.__name__
+        self._pfunc = partial(func, *args, **kwargs)
+        self._cache_good = OrderedDict()
+        self._cache_bad = []
+        self._cache_est = OrderedDict()
+        self._cache_out = {}
+        self._fit_func = None
+        self._power = None
+
+    @property
+    def results(self):
+        """Function outputs from `time_func`.
+
+        A dictionary mapping input arguments (fixed arguments
+        are not included) to their respective output values.
+
+        """
+        return self._cache_out
+
+    @timefunc(num_tries=1, verbose=False)
+    def _timed_pfunc(self, arg):
+        """Run partial func once for single arg and time it."""
+        return self._pfunc(arg)
+
+    def _cache_time(self, arg):
+        """Cache timing results without repetition."""
+        if arg not in self._cache_good and arg not in self._cache_bad:
+            try:
+                result = self._timed_pfunc(arg)
+            except Exception as e:
+                warnings.warn(str(e), AstropyUserWarning)
+                self._cache_bad.append(arg)
+            else:
+                self._cache_good[arg] = result[0]  # Run time
+                self._cache_out[arg] = result[1]  # Function output
+
+    def time_func(self, arglist):
+        """Time the partial function for a list of single args
+        and store run time in a cache. This forms a baseline for
+        the prediction.
+
+        This also stores function outputs in `results`.
+
+        Parameters
+        ----------
+        arglist : list of numbers
+            List of input arguments to time.
+
+        """
+        if not isinstance(arglist, Iterable):
+            arglist = [arglist]
+        dummy = list(map(self._cache_time, arglist))
+
+    # FUTURE: Implement N^x * O(log(N)) fancy fitting.
+    def do_fit(self, power=1, deg=1, min_datapoints=3):
+        """Fit a function to the lists of arguments and
+        their respective run time in the cache.
+
+        .. math::
+
+            t = a[deg] + a[deg-1] * arg^{power} + ... + a[0] * (arg^{power})^{deg}
+
+        Parameters
+        ----------
+        power : int, optional
+            Power of values to fit.
+
+        deg : int, optional
+            Degree of polynomial to fit.
+
+        min_datapoints : int, optional
+            Minimum number of data points required for fitting.
+            They can be built up with `time_func`.
+
+        Returns
+        -------
+        a : array_like
+            Fitted coefficients from `numpy.polyfit`.
+
+        """
+        # Reset related attributes
+        self._power = power
+        self._cache_est = OrderedDict()
+
+        x_arr = np.array(list(six.iterkeys(self._cache_good)))
+        assert x_arr.size >= min_datapoints, \
+            'Requires {0} points but has {1}'.format(min_datapoints,
+                                                     x_arr.size)
+
+        a = np.polyfit(x_arr**power, list(six.iterkeys(self._cache_good)), deg)
+        self._fit_func = np.poly1d(a)
+
+        return a
+
+    def predict_time(self, arg):
+        """Predict run time for given argument.
+        If prediction is already cached, cached value is returned.
+
+        Parameters
+        ----------
+        arg : number
+            Input argument to predict run time for.
+
+        Returns
+        -------
+        t_est : float
+            Estimated run time for given argument.
+
+        """
+        if arg in self._cache_est:
+            t_est = self._cache_est[arg]
+        else:
+            assert self._fit_func is not None, 'No fitted data for prediction'
+            t_est = self._fit_func(arg**self._power)
+            self._cache_est[arg] = t_est
+        return t_est
+
+    def plot(self, xscale='linear', yscale='linear', xlabeltext='args',
+             save_as=''):  # pragma: no cover
+        """Plot prediction.
+
+        .. note:: Uses :mod:`matplotlib`.
+
+        Parameters
+        ----------
+        xscale, yscale : {'linear', 'log', 'symlog'}
+            Scaling for `matplotlib.axes.Axes`.
+
+        xlabeltext : str, optional
+            Text for X-label.
+
+        save_as : str, optional
+            Save plot as given filename.
+
+        """
+        import matplotlib.pyplot as plt
+
+        # Actual data
+        x_arr = sorted(self._cache_good)
+        y_arr = np.array([self._cache_good[x] for x in x_arr])
+
+        assert len(x_arr) > 1, 'Insufficient data for plotting'
+
+        # Auto-ranging
+        qmean = y_arr.mean() * u.second
+        for cur_u in (u.minute, u.second, u.millisecond, u.microsecond,
+                      u.nanosecond):
+            val = qmean.to(cur_u).value
+            if 1000 > val >= 1:
+                break
+        y_arr = (y_arr * u.second).to(cur_u).value
+
+        fig, ax = plt.subplots()
+        ax.plot(x_arr, y_arr, 'kx-', label='Actual')
+
+        # Fitted data
+        if self._fit_func is not None:
+            x_est = list(six.iterkeys(self._cache_est))
+            y_est = (np.array(list(six.itervalues(self._cache_est))) *
+                     u.second).to(cur_u).value
+            ax.scatter(x_est, y_est, marker='o', c='r', label='Predicted')
+
+            x_fit = np.array(sorted(x_arr + x_est))
+            y_fit = (self._fit_func(x_fit**self._power) *
+                     u.second).to(cur_u).value
+            ax.plot(x_fit, y_fit, 'b--', label='Fit')
+
+        ax.set_xscale(xscale)
+        ax.set_yscale(yscale)
+
+        ax.set_xlabel(xlabeltext)
+        ax.set_ylabel('Run time ({})'.format(cur_u.to_string()))
+        ax.set_title(self._funcname)
+        ax.legend(loc='best', numpoints=1)
+
+        plt.draw()
+
+        if save_as:
+            plt.savefig(save_as)
diff --git a/astropy/utils/xml/__init__.py b/astropy/utils/xml/__init__.py
index e69de29..800d82e 100644
--- a/astropy/utils/xml/__init__.py
+++ b/astropy/utils/xml/__init__.py
@@ -0,0 +1,2 @@
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
diff --git a/astropy/utils/xml/check.py b/astropy/utils/xml/check.py
index 706d572..4dbd282 100644
--- a/astropy/utils/xml/check.py
+++ b/astropy/utils/xml/check.py
@@ -3,9 +3,12 @@
 A collection of functions for checking various XML-related strings for
 standards compliance.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+from ...extern.six.moves import xrange, urllib
 
 import re
-import urlparse
 
 
 def check_id(ID):
@@ -68,7 +71,7 @@ def check_anyuri(uri):
         uri) is None):
         return False
     try:
-        urlparse.urlparse(uri)
+        urllib.parse.urlparse(uri)
     except:
         return False
     return True
diff --git a/astropy/utils/xml/iterparser.py b/astropy/utils/xml/iterparser.py
index 5df0cdf..adb7bdf 100644
--- a/astropy/utils/xml/iterparser.py
+++ b/astropy/utils/xml/iterparser.py
@@ -2,6 +2,9 @@
 """
 This module includes a fast iterator-based XML parser.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+from ...extern import six
 
 # STDLIB
 import collections
@@ -33,7 +36,7 @@ else:
         Abstracts away the different ways to test for a callable object in
         Python 2.x and 3.x.
         """
-        return callable(o)
+        return six.callable(o)
 ############################################################
 
 
@@ -82,9 +85,7 @@ def _convert_to_fd_or_read_function(fd):
         yield fd
         return
 
-    from astropy.utils.data import get_readable_fileobj
-
-    with get_readable_fileobj(fd, encoding='binary') as new_fd:
+    with data.get_readable_fileobj(fd, encoding='binary') as new_fd:
         if sys.platform.startswith('win'):
             yield new_fd.read
         else:
@@ -120,11 +121,11 @@ def _fast_iterparse(fd, buffersize=2 ** 10):
         # Due to Python issue #4978, convert all keys to byte strings
         _start = start
         def start(name, attr):
-            attr = dict((k.encode('utf-8'), v) for (k, v) in attr.iteritems())
+            attr = dict((k.encode('utf-8'), v) for (k, v) in six.iteritems(attr))
             return _start(name, attr)
 
     def end(name):
-        queue.append((False, name, u''.join(text).strip(),
+        queue.append((False, name, ''.join(text).strip(),
                       (parser.CurrentLineNumber, parser.CurrentColumnNumber)))
 
     parser = expat.ParserCreate()
@@ -214,8 +215,8 @@ def get_xml_encoding(source):
     encoding : str
     """
     with get_xml_iterator(source) as iterator:
-        start, tag, data, pos = iterator.next()
-        if not start or tag != u'xml':
+        start, tag, data, pos = six.next(iterator)
+        if not start or tag != 'xml':
             raise IOError('Invalid XML file')
 
     # The XML spec says that no encoding === utf-8
diff --git a/astropy/utils/xml/unescaper.py b/astropy/utils/xml/unescaper.py
new file mode 100644
index 0000000..8da60a6
--- /dev/null
+++ b/astropy/utils/xml/unescaper.py
@@ -0,0 +1,58 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""URL unescaper functions."""
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
+# STDLIB
+from xml.sax import saxutils
+
+
+__all__ = ['unescape_all']
+
+_bytes_entities = {b'&': b'&', b'<': b'<', b'>': b'>',
+                   b'&&': b'&'}
+_bytes_keys = [b'&&', b'&', b'<', b'>']
+
+_str_entities = {'&&': '&'}
+_str_keys = ['&', '<', '>']
+
+
+def unescape_all(url):
+    """Recursively unescape a given URL.
+
+    .. note:: '&&' becomes a single '&'.
+
+    Parameters
+    ----------
+    url : str or bytes
+        URL to unescape.
+
+    Returns
+    -------
+    clean_url : str or bytes
+        Unescaped URL.
+
+    """
+    if isinstance(url, bytes):
+        func2use = _unescape_bytes
+        keys2use = _bytes_keys
+    else:
+        func2use = _unescape_str
+        keys2use = _str_keys
+    clean_url = func2use(url)
+    not_done = [clean_url.count(key) > 0 for key in keys2use]
+    if True in not_done:
+        return unescape_all(clean_url)
+    else:
+        return clean_url
+
+
+def _unescape_str(url):
+    return saxutils.unescape(url, _str_entities)
+
+
+def _unescape_bytes(url):
+    clean_url = url
+    for key in _bytes_keys:
+        clean_url = clean_url.replace(key, _bytes_entities[key])
+    return clean_url
diff --git a/astropy/utils/xml/validate.py b/astropy/utils/xml/validate.py
index 81d89f3..0fad898 100644
--- a/astropy/utils/xml/validate.py
+++ b/astropy/utils/xml/validate.py
@@ -1,12 +1,17 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+
 """
 Functions to do XML schema and DTD validation.  At the moment, this
 makes a subprocess call to xmllint.  This could use a Python-based
 library at some point in the future, if something appropriate could be
 found.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 
 import os
+import subprocess
 
 
 def validate_schema(filename, schema_file):
@@ -27,7 +32,6 @@ def validate_schema(filename, schema_file):
         Returns the returncode from xmllint and the stdout and stderr
         as strings
     """
-    import subprocess
 
     base, ext = os.path.splitext(schema_file)
     if ext == '.xsd':
diff --git a/astropy/utils/xml/writer.py b/astropy/utils/xml/writer.py
index e07ef5d..421c580 100644
--- a/astropy/utils/xml/writer.py
+++ b/astropy/utils/xml/writer.py
@@ -3,6 +3,9 @@
 Contains a class that makes it simple to stream out well-formed and
 nicely-indented XML.
 """
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+from ...extern import six
 
 # STDLIB
 import contextlib
@@ -16,9 +19,9 @@ except ImportError:
         """
         Escapes &, < and > in an XML CDATA string.
         """
-        s = s.replace(u"&", u"&")
-        s = s.replace(u"<", u"<")
-        s = s.replace(u">", u">")
+        s = s.replace("&", "&")
+        s = s.replace("<", "<")
+        s = s.replace(">", ">")
         return s
 
 
@@ -26,11 +29,11 @@ except ImportError:
         """
         Escapes &, ', ", < and > in an XML attribute value.
         """
-        s = s.replace(u"&", u"&")
-        s = s.replace(u"'", u"'")
-        s = s.replace(u"\"", u""")
-        s = s.replace(u"<", u"<")
-        s = s.replace(u">", u">")
+        s = s.replace("&", "&")
+        s = s.replace("'", "'")
+        s = s.replace("\"", """)
+        s = s.replace("<", "<")
+        s = s.replace(">", ">")
         return s
 else:
     xml_escape_cdata = _iterparser.escape_xml_cdata
@@ -69,7 +72,7 @@ class XMLWriter:
         self._open = 0  # true if start tag is open
         self._tags = []
         self._data = []
-        self._indentation = u" " * 64
+        self._indentation = " " * 64
 
         self.xml_escape_cdata = xml_escape_cdata
         self.xml_escape = xml_escape
@@ -80,21 +83,21 @@ class XMLWriter:
         """
         if self._open:
             if indent:
-                self.write(u">\n")
+                self.write(">\n")
             else:
-                self.write(u">")
+                self.write(">")
             self._open = 0
         if self._data:
-            data = u''.join(self._data)
+            data = ''.join(self._data)
             if wrap:
                 indent = self.get_indentation_spaces(1)
                 data = textwrap.fill(
                     data,
                     initial_indent=indent,
                     subsequent_indent=indent)
-                self.write(u'\n')
+                self.write('\n')
                 self.write(self.xml_escape_cdata(data))
-                self.write(u'\n')
+                self.write('\n')
                 self.write(self.get_indentation_spaces())
             else:
                 self.write(self.xml_escape_cdata(data))
@@ -128,18 +131,18 @@ class XMLWriter:
         self._data = []
         self._tags.append(tag)
         self.write(self.get_indentation_spaces(-1))
-        self.write(u"<%s" % tag)
+        self.write("<%s" % tag)
         if attrib or extra:
             attrib = attrib.copy()
             attrib.update(extra)
-            attrib = attrib.items()
+            attrib = list(six.iteritems(attrib))
             attrib.sort()
             for k, v in attrib:
                 if v is not None:
                     # This is just busy work -- we know our keys are clean
                     # k = xml_escape_cdata(k)
                     v = self.xml_escape(v)
-                    self.write(u" %s=\"%s\"" % (k, v))
+                    self.write(" %s=\"%s\"" % (k, v))
         self._open = 1
 
         return len(self._tags)
@@ -170,7 +173,7 @@ class XMLWriter:
         """
         self._flush()
         self.write(self.get_indentation_spaces())
-        self.write(u"<!-- %s -->\n" % self.xml_escape_cdata(comment))
+        self.write("<!-- %s -->\n" % self.xml_escape_cdata(comment))
 
     def data(self, text):
         """
@@ -205,11 +208,11 @@ class XMLWriter:
             self._flush(indent, wrap)
         elif self._open:
             self._open = 0
-            self.write(u"/>\n")
+            self.write("/>\n")
             return
         if indent:
             self.write(self.get_indentation_spaces())
-        self.write(u"</%s>\n" % tag)
+        self.write("</%s>\n" % tag)
 
     def close(self, id):
         """
@@ -276,5 +279,5 @@ class XMLWriter:
         d = {}
         for attr in attrs:
             if getattr(obj, attr) is not None:
-                d[attr.replace(u'_', u'-')] = unicode(getattr(obj, attr))
+                d[attr.replace('_', '-')] = six.text_type(getattr(obj, attr))
         return d
diff --git a/astropy/version.py b/astropy/version.py
index c4a2c5e..a0db764 100644
--- a/astropy/version.py
+++ b/astropy/version.py
@@ -1,15 +1,15 @@
-# Autogenerated by Astropy's setup.py on 2013-10-25 12:29:59.160488
+# Autogenerated by Astropy's setup.py on 2013-11-20 20:09:10.840506
 
 from astropy.version_helpers import update_git_devstr, get_git_devstr
 
-_last_generated_version = '0.2.5'
+_last_generated_version = '0.3'
 
 version = update_git_devstr(_last_generated_version)
 githash = get_git_devstr(sha=True, show_warning=False)
 
 major = 0
-minor = 2
-bugfix = 5
+minor = 3
+bugfix = 0
 
 release = True
 debug = False
diff --git a/astropy/version_helpers.py b/astropy/version_helpers.py
index 7566df5..92c1a98 100644
--- a/astropy/version_helpers.py
+++ b/astropy/version_helpers.py
@@ -1,5 +1,4 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from __future__ import division
 
 """
 Utilities for generating the version string for Astropy (or an affiliated
@@ -19,6 +18,17 @@ or::
 
 """
 
+from __future__ import division
+
+import datetime
+import imp
+import os
+import subprocess
+import sys
+
+from distutils import log
+from warnings import warn
+
 
 def _version_split(version):
     """
@@ -94,9 +104,6 @@ def get_git_devstr(sha=False, show_warning=True, path=None):
 
     """
 
-    import os
-    from subprocess import Popen, PIPE
-    from warnings import warn
     from .utils import find_current_module
 
     if path is None:
@@ -114,8 +121,9 @@ def get_git_devstr(sha=False, show_warning=True, path=None):
         cmd = 'rev-list'
 
     try:
-        p = Popen(['git', cmd, 'HEAD'], cwd=path,
-                  stdout=PIPE, stderr=PIPE, stdin=PIPE)
+        p = subprocess.Popen(['git', cmd, 'HEAD'], cwd=path,
+                             stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+                             stdin=subprocess.PIPE)
         stdout, stderr = p.communicate()
     except OSError as e:
         if show_warning:
@@ -172,9 +180,6 @@ except ImportError:
 
 
 def _get_version_py_str(packagename, version, release, debug):
-
-    import datetime
-
     timestamp = str(datetime.datetime.now())
     major, minor, bugfix = _version_split(version)
     if packagename.lower() == 'astropy':
@@ -195,10 +200,6 @@ def generate_version_py(packagename, version, release=None, debug=None):
 
     from .setup_helpers import is_distutils_display_option
     from .utils.compat.misc import invalidate_caches
-    from distutils import log
-    import imp
-    import os
-    import sys
 
     try:
         version_module = __import__(packagename + '.version',
diff --git a/astropy/config/tests/__init__.py b/astropy/vo/__init__.py
similarity index 100%
copy from astropy/config/tests/__init__.py
copy to astropy/vo/__init__.py
diff --git a/astropy/config/tests/__init__.py b/astropy/vo/client/__init__.py
similarity index 100%
copy from astropy/config/tests/__init__.py
copy to astropy/vo/client/__init__.py
diff --git a/astropy/vo/client/async.py b/astropy/vo/client/async.py
new file mode 100644
index 0000000..db7dd8a
--- /dev/null
+++ b/astropy/vo/client/async.py
@@ -0,0 +1,83 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""Asynchronous VO service requests."""
+from __future__ import print_function, division
+
+# LOCAL
+from ...utils.compat.futures import ThreadPoolExecutor
+
+
+__all__ = ['AsyncBase']
+
+
+class AsyncBase(object):
+    """Base class for asynchronous VO service requests
+    using :py:class:`concurrent.futures.ThreadPoolExecutor`.
+
+    Service request will be forced to run in silent
+    mode by setting ``verbose=False``. Warnings are controled
+    by :py:mod:`warnings` module.
+
+    .. note::
+
+        Methods of the attributes can be accessed directly,
+        with priority given to ``executor``.
+
+    Parameters
+    ----------
+    func : function
+        The function to run.
+
+    args, kwargs
+        Arguments and keywords accepted by the service request
+        function to be called asynchronously.
+
+    Attributes
+    ----------
+    executor : :py:class:`concurrent.futures.ThreadPoolExecutor`
+        Executor running the function on single thread.
+
+    future : :py:class:`concurrent.futures.Future`
+        Asynchronous execution created by ``executor``.
+
+    """
+    def __init__(self, func, *args, **kwargs):
+        kwargs['verbose'] = False
+        self.executor = ThreadPoolExecutor(1)
+        self.future = self.executor.submit(func, *args, **kwargs)
+
+    def __getattr__(self, what):
+        """Expose ``executor`` and ``future`` methods."""
+        try:
+            return getattr(self.executor, what)
+        except AttributeError:
+            return getattr(self.future, what)
+
+    def get(self, timeout=None):
+        """Get result, if available, then shut down thread.
+
+        Parameters
+        ----------
+        timeout : int or float
+            Wait the given amount of time in seconds before
+            obtaining result. If not given, wait indefinitely
+            until function is done.
+
+        Returns
+        -------
+        result
+            Result returned by the function.
+
+        Raises
+        ------
+        Exception
+            Errors raised by :py:class:`concurrent.futures.Future`.
+
+        """
+        try:
+            result = self.future.result(timeout=timeout)
+        except Exception as e:  # pragma: no cover
+            result = None
+            raise e
+        finally:
+            self.executor.shutdown(wait=False)
+            return result
diff --git a/astropy/vo/client/conesearch.py b/astropy/vo/client/conesearch.py
new file mode 100644
index 0000000..b3340e5
--- /dev/null
+++ b/astropy/vo/client/conesearch.py
@@ -0,0 +1,505 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""Support VO Simple Cone Search capabilities."""
+from __future__ import print_function, division
+
+import warnings
+
+# THIRD-PARTY
+import numpy as np
+
+# LOCAL
+from . import vos_catalog
+from .async import AsyncBase
+from ... import units as u
+from ...config.configuration import ConfigurationItem
+from ...coordinates import Angle, ICRS, SphericalCoordinatesBase
+from ...logger import log
+from ...utils.data import REMOTE_TIMEOUT
+from ...utils.timer import timefunc, RunTimePredictor
+from ...utils.exceptions import AstropyUserWarning
+
+
+__all__ = ['AsyncConeSearch', 'conesearch', 'AsyncSearchAll', 'search_all',
+           'list_catalogs', 'predict_search', 'conesearch_timer']
+
+# Skip these doctests for now;
+# TODO: Add the ability to add py.test markers (such as remote_data) to
+# doctests
+__doctest_skip__ = ['AsyncConeSearch', 'AsyncSearchAll']
+
+CONESEARCH_DBNAME = ConfigurationItem('conesearch_dbname', 'conesearch_good',
+                                      'Conesearch database name.')
+
+
+class ConeSearchError(Exception):  # pragma: no cover
+    pass
+
+
+class AsyncConeSearch(AsyncBase):
+    """Perform a Cone Search asynchronously and returns the result of the
+    first successful query.
+
+    .. note::
+
+        See `~astropy.vo.client.async.AsyncBase` for more details.
+
+    Parameters
+    ----------
+    args, kwargs : see :func:`conesearch`
+
+    Examples
+    --------
+    >>> from astropy import coordinates as coord
+    >>> from astropy import units as u
+    >>> c = coord.ICRS(6.0223, -72.0814, unit=(u.degree, u.degree))
+    >>> async_search = conesearch.AsyncConeSearch(
+    ...     c, 0.5 * u.degree,
+    ...     catalog_db='The PMM USNO-A1.0 Catalogue (Monet 1997) 1')
+
+    Check search status:
+
+    >>> async_search.running()
+    True
+    >>> async_search.done()
+    False
+
+    Get search results after a 30-second wait (not to be
+    confused with ``astropy.utils.data.REMOTE_TIMEOUT`` that
+    governs individual Cone Search queries). If search is still not
+    done after 30 seconds, ``TimeoutError`` is raised. Otherwise,
+    Cone Search result is returned and can be manipulated as in
+    :ref:`Simple Cone Search Examples <vo-sec-scs-examples>`.
+    If no ``timeout`` keyword given, it waits until completion:
+
+    >>> async_result = async_search.get(timeout=30)
+    >>> cone_arr = async_result.array.data
+    >>> cone_arr.size
+    36184
+
+    """
+    def __init__(self, *args, **kwargs):
+        AsyncBase.__init__(self, conesearch, *args, **kwargs)
+
+
+def conesearch(center, radius, verb=1, **kwargs):
+    """Perform Cone Search and returns the result of the
+    first successful query.
+
+    Parameters
+    ----------
+    center : tuple of float or :ref:`astropy-coordinates`
+        Right-ascension and declination for the position of
+        the center of the cone to search:
+
+            - If tuple of float is given, it is assumed to be
+              ``(RA, DEC)`` in the ICRS coordinate system,
+              given in decimal degrees.
+            - If astropy coordinates object is given, it will
+              be converted internally to
+              `~astropy.coordinates.builtin_systems.ICRS`.
+
+    radius : float or `~astropy.coordinates.angles.Angle` object
+        Radius of the cone to search:
+
+            - If float is given, it is assumed to be in decimal degrees.
+            - If astropy angle object or angular quantity is given,
+              it is internally converted to degrees.
+
+    verb : {1, 2, 3}
+        Verbosity indicating how many columns are to be returned
+        in the resulting table. Support for this parameter by
+        a Cone Search service implementation is optional. If the
+        service supports the parameter:
+
+            1. Return the bare minimum number of columns that
+               the provider considers useful in describing the
+               returned objects.
+            2. Return a medium number of columns between the
+               minimum and maximum (inclusive) that are
+               considered by the provider to most typically
+               useful to the user.
+            3. Return all of the columns that are available for
+               describing the objects.
+
+        If not supported, the service should ignore the parameter
+        and always return the same columns for every request.
+
+    catalog_db
+        May be one of the following, in order from easiest to
+        use to most control:
+
+            - `None`: A database of
+              ``astropy.vo.client.conesearch.CONESEARCH_DBNAME``
+              catalogs is downloaded from
+              ``astropy.vo.client.vos_catalog.BASEURL``.  The first
+              catalog in the database to successfully return a result is used.
+
+            - *catalog name*: A name in the database of
+              ``astropy.vo.client.conesearch.CONESEARCH_DBNAME``
+              catalogs at ``astropy.vo.client.vos_catalog.BASEURL`` is used.
+              For a list of acceptable names, use :func:`list_catalogs`.
+
+            - *url*: The prefix of a URL to a IVOA Service for
+              ``astropy.vo.client.conesearch.CONESEARCH_DBNAME``.
+              Must end in either '?' or '&'.
+
+            - `VOSCatalog` object: A specific catalog manually downloaded and
+              selected from the database (see :ref:`vo-sec-client-vos`).
+
+            - Any of the above 3 options combined in a list, in which case
+              they are tried in order.
+
+    pedantic : bool or `None`
+        When `True`, raise an error when the file violates the spec,
+        otherwise issue a warning.  Warnings may be controlled using
+        :py:mod:`warnings` module.
+        When not provided, uses the configuration setting
+        ``astropy.io.votable.table.PEDANTIC``, which defaults to `False`.
+
+    verbose : bool
+        Verbose output.
+
+    cache : bool
+        Use caching for VO Service database. Access to actual VO
+        websites referenced by the database still needs internet
+        connection.
+
+    Returns
+    -------
+    obj : `astropy.io.votable.tree.Table` object
+        First table from first successful VO service request.
+
+    Raises
+    ------
+    ConeSearchError
+        When invalid inputs are passed into Cone Search.
+
+    VOSError
+        If VO service request fails.
+
+    """
+    # Validate RA and DEC
+    ra, dec = _validate_coord(center)
+
+    # Validate search radius
+    sr = _validate_sr(radius)
+
+    # Validate verbosity
+    verb = _local_conversion(int, verb)
+    if verb not in (1, 2, 3):  # pragma: no cover
+        raise ConeSearchError('Verbosity must be 1, 2, or 3')
+
+    args = {'RA': ra, 'DEC': dec, 'SR': sr, 'VERB': verb}
+
+    return vos_catalog.call_vo_service(CONESEARCH_DBNAME(),
+                                       kwargs=args, **kwargs)
+
+
+class AsyncSearchAll(AsyncBase):
+    """Perform a Cone Search asynchronously, storing all results
+    instead of just the result from first successfull query.
+
+    .. note::
+
+        See `~astropy.vo.client.async.AsyncBase` for more details.
+
+    Parameters
+    ----------
+    args, kwargs : see :func:`search_all`
+
+    Examples
+    --------
+    >>> from astropy import coordinates as coord
+    >>> from astropy import units as u
+    >>> c = coord.ICRS(6.0223, -72.0814, unit=(u.degree, u.degree))
+    >>> async_searchall = conesearch.AsyncSearchAll(c, 0.5 * u.degree)
+
+    Check search status:
+
+    >>> async_search.running()
+    True
+    >>> async_search.done()
+    False
+
+    Get a dictionary of all search results after a 30-second wait
+    (not to be confused with ``astropy.utils.data.REMOTE_TIMEOUT`` that
+    governs individual Cone Search queries). If search is still not
+    done after 30 seconds, ``TimeoutError`` is raised. Otherwise,
+    a dictionary is returned and can be manipulated as in
+    :ref:`Simple Cone Search Examples <vo-sec-scs-examples>`.
+    If no ``timeout`` keyword given, it waits until completion:
+
+    >>> async_allresults = async_search.get(timeout=30)
+    >>> all_catalogs = async_allresults.keys()
+    >>> first_cone_arr = async_allresults[all_catalogs[0]].array.data
+    >>> first_cone_arr.size
+    36184
+
+    """
+    def __init__(self, *args, **kwargs):
+        AsyncBase.__init__(self, search_all, *args, **kwargs)
+
+
+def search_all(*args, **kwargs):
+    """Perform Cone Search and returns the results of
+    all successful queries.
+
+    .. warning::
+
+        Could potentially take up significant run time and
+        computing resources.
+
+    Parameters
+    ----------
+    args, kwargs
+        Arguments and keywords accepted by :func:`conesearch`.
+
+    Returns
+    -------
+    all_results : dict of `astropy.io.votable.tree.Table` objects
+        A dictionary of tables from successful VO service requests,
+        with keys being the access URLs. If none is successful,
+        an empty dictionary is returned.
+
+    Raises
+    ------
+    ConeSearchError
+        When invalid inputs are passed into Cone Search.
+
+    """
+    all_results = {}
+
+    catalog_db = kwargs.get('catalog_db', None)
+    if 'catalog_db' in kwargs:
+        kwargs.pop('catalog_db')
+
+    cache = kwargs.get('cache', True)
+    verbose = kwargs.get('verbose', True)
+
+    catalogs = vos_catalog._get_catalogs(CONESEARCH_DBNAME(), catalog_db,
+                                         cache=cache, verbose=verbose)
+
+    for name, catalog in catalogs:
+        try:
+            result = conesearch(catalog_db=catalog, *args, **kwargs)
+        except vos_catalog.VOSError:
+            pass
+        else:
+            all_results[result.url] = result
+
+    return all_results
+
+
+def list_catalogs(**kwargs):
+    """Return the available Cone Search catalogs as a list of strings.
+    These can be used for the ``catalog_db`` argument to
+    :func:`conesearch`.
+
+    Parameters
+    ----------
+    cache : bool
+        Use caching for VO Service database. Access to actual VO
+        websites referenced by the database still needs internet
+        connection.
+
+    verbose : bool
+        Show download progress bars.
+
+    pattern : str or `None`
+        If given string is anywhere in a catalog name, it is
+        considered a matching catalog. It accepts patterns as
+        in :py:mod:`fnmatch` and is case-insensitive.
+        By default, all catalogs are returned.
+
+    sort : bool
+        Sort output in alphabetical order. If not sorted, the
+        order depends on dictionary hashing. Default is `True`.
+
+    Returns
+    -------
+    arr : list of str
+        List of catalog names.
+
+    """
+    return vos_catalog.list_catalogs(CONESEARCH_DBNAME(), **kwargs)
+
+
+def predict_search(url, *args, **kwargs):
+    """Predict the run time needed and the number of objects
+    for a Cone Search for the given access URL, position, and
+    radius.
+
+    Run time prediction uses `astropy.utils.timer.RunTimePredictor`.
+    Baseline searches are done with starting and ending radii at
+    0.05 and 0.5 of the given radius, respectively.
+
+    Extrapolation on good data uses least-square straight line fitting,
+    assuming linear increase of search time and number of objects
+    with radius, which might not be accurate for some cases. If
+    there are less than 3 data points in the fit, it fails.
+
+    Warnings (controlled by :py:mod:`warnings`) are given when:
+
+        #. Fitted slope is negative.
+        #. Any of the estimated results is negative.
+        #. Estimated run time exceeds ``astropy.utils.data.REMOTE_TIMEOUT``.
+
+    .. note::
+
+        If ``verbose=True``, extra log info will be provided.
+        But unlike :func:`conesearch_timer`, timer info is suppressed.
+
+        If ``plot=True``, plot will be displayed.
+        Plotting uses :mod:`matplotlib`.
+
+        The predicted results are just *rough* estimates.
+
+        Prediction is done using :func:`conesearch`. Prediction for
+        `AsyncConeSearch` is not supported.
+
+    Parameters
+    ----------
+    url : str
+        Cone Search access URL to use.
+
+    args, kwargs : see :func:`conesearch`
+        Extra keyword ``plot`` is allowed and only used by this
+        function and not :func:`conesearch`.
+
+    Returns
+    -------
+    t_est : float
+        Estimated time in seconds needed for the search.
+
+    n_est : int
+        Estimated number of objects the search will yield.
+
+    Raises
+    ------
+    AssertionError
+        If prediction fails.
+
+    ConeSearchError
+        If input parameters are invalid.
+
+    VOSError
+        If VO service request fails.
+
+    """
+    if len(args) != 2:  # pragma: no cover
+        raise ConeSearchError('conesearch must have exactly 2 arguments')
+
+    plot = kwargs.get('plot', False)
+    if 'plot' in kwargs:  # pragma: no cover
+        del kwargs['plot']
+
+    center, radius = args
+    sr = _validate_sr(radius)
+    if sr <= 0:
+        raise ConeSearchError('Search radius must be > 0 degrees')
+
+    kwargs['catalog_db'] = url
+    cs_pred = RunTimePredictor(conesearch, center, **kwargs)
+
+    # Search properties for timer extrapolation
+    num_datapoints = 10  # Number of desired data points for extrapolation
+    sr_min = 0.05 * sr  # Min radius to start the timer
+    sr_max = 0.5 * sr   # Max radius to stop the timer
+    sr_step = (1.0 / num_datapoints) * (sr_max - sr_min)  # Radius step
+
+    # Slowly increase radius to get data points for extrapolation
+    sr_arr = np.arange(sr_min, sr_max + sr_step, sr_step)
+    cs_pred.time_func(sr_arr)
+
+    # Predict run time
+    t_coeffs = cs_pred.do_fit()
+    t_est = cs_pred.predict_time(sr)
+
+    if t_est < 0 or t_coeffs[0] < 0:  # pragma: no cover
+        warnings.warn('Estimated runtime ({0} s) is non-physical with slope of '
+                      '{1}'.format(t_est, t_coeffs[0]), AstropyUserWarning)
+    elif t_est > REMOTE_TIMEOUT():  # pragma: no cover
+        warnings.warn('Estimated runtime is longer than timeout of '
+                      '{0} s'.format(REMOTE_TIMEOUT()), AstropyUserWarning)
+
+    # Predict number of objects
+    sr_arr = sorted(cs_pred.results)  # Orig with floating point error
+    n_arr = [cs_pred.results[key].array.size for key in sr_arr]
+    n_coeffs = np.polyfit(sr_arr, n_arr, 1)
+    n_fitfunc = np.poly1d(n_coeffs)
+    n_est = int(round(n_fitfunc(sr)))
+
+    if n_est < 0 or n_coeffs[0] < 0:  # pragma: no cover
+        warnings.warn('Estimated #objects ({0}) is non-physical with slope of '
+                      '{1}'.format(n_est, n_coeffs[0]), AstropyUserWarning)
+
+    if plot:  # pragma: no cover
+        import matplotlib.pyplot as plt
+
+        xlabeltext = 'radius (deg)'
+        sr_fit = np.append(sr_arr, sr)
+        n_fit = n_fitfunc(sr_fit)
+
+        cs_pred.plot(xlabeltext=xlabeltext)
+
+        fig, ax = plt.subplots()
+        ax.plot(sr_arr, n_arr, 'kx-', label='Actual')
+        ax.plot(sr_fit, n_fit, 'b--', label='Fit')
+        ax.scatter([sr], [n_est], marker='o', c='r', label='Predicted')
+        ax.set_xlabel(xlabeltext)
+        ax.set_ylabel('#objects')
+        ax.legend(loc='best', numpoints=1)
+        plt.draw()
+
+    return t_est, n_est
+
+
+ at timefunc(1)
+def conesearch_timer(*args, **kwargs):
+    """Time a single Cone Search using `astropy.utils.timer.timefunc`
+    with a single try and a verbose timer.
+
+    Parameters
+    ----------
+    args, kwargs : see :func:`conesearch`
+
+    Returns
+    -------
+    t : float
+        Run time in seconds.
+
+    obj : `astropy.io.votable.tree.Table` object
+        First table from first successful VO service request.
+
+    """
+    return conesearch(*args, **kwargs)
+
+
+def _local_conversion(func, x):
+    """Try ``func(x)`` and replace ``ValueError`` with ``ConeSearchError``."""
+    try:
+        y = func(x)
+    except ValueError as e:  # pragma: no cover
+        raise ConeSearchError(str(e))
+    else:
+        return y
+
+
+def _validate_coord(center):
+    if isinstance(center, SphericalCoordinatesBase):
+        icrscoord = center.transform_to(ICRS)
+    else:
+        icrscoord = ICRS(*center, unit=(u.degree, u.degree))
+
+    return icrscoord.ra.degree, icrscoord.dec.degree
+
+
+def _validate_sr(radius):
+    """Validate search radius."""
+        # Validate search radius
+    if isinstance(radius, Angle):
+        sr_angle = radius
+    else:
+        sr_angle = Angle(radius, unit=u.degree)
+
+    return sr_angle.degree
diff --git a/astropy/coordinates/setup_package.py b/astropy/vo/client/setup_package.py
old mode 100644
new mode 100755
similarity index 57%
copy from astropy/coordinates/setup_package.py
copy to astropy/vo/client/setup_package.py
index fb10ce3..cc8a4f8
--- a/astropy/coordinates/setup_package.py
+++ b/astropy/vo/client/setup_package.py
@@ -1,4 +1,6 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
 
+
 def get_package_data():
-    return {'astropy.coordinates.tests.accuracy': ['*.csv']}
+    return {
+        'astropy.vo.client.tests': ['data/*.xml']}
diff --git a/astropy/config/tests/__init__.py b/astropy/vo/client/tests/__init__.py
similarity index 100%
copy from astropy/config/tests/__init__.py
copy to astropy/vo/client/tests/__init__.py
diff --git a/astropy/vo/client/tests/data/conesearch_error1.xml b/astropy/vo/client/tests/data/conesearch_error1.xml
new file mode 100644
index 0000000..d5803ba
--- /dev/null
+++ b/astropy/vo/client/tests/data/conesearch_error1.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!DOCTYPE VOTABLE SYSTEM "http://us-vo.org/xml/VOTable.dtd">
+<VOTABLE version="1.0">
+  <DESCRIPTION>MAST Simple Cone Search Service</DESCRIPTION>
+  <INFO ID="Error" name="Error" value="Error in input RA value: as3f"/>
+</VOTABLE>
diff --git a/astropy/vo/client/tests/data/conesearch_error2.xml b/astropy/vo/client/tests/data/conesearch_error2.xml
new file mode 100644
index 0000000..462a963
--- /dev/null
+++ b/astropy/vo/client/tests/data/conesearch_error2.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!DOCTYPE VOTABLE SYSTEM "http://us-vo.org/xml/VOTable.dtd">
+<VOTABLE version="1.0">
+  <DESCRIPTION>MAST Simple Cone Search Service</DESCRIPTION>
+  <RESOURCE ID="error_resource">
+     <INFO ID="Error" name="Error" value="Error in input RA value: as3f"/>
+ </RESOURCE>
+</VOTABLE>
diff --git a/astropy/vo/client/tests/data/conesearch_error3.xml b/astropy/vo/client/tests/data/conesearch_error3.xml
new file mode 100644
index 0000000..168b8ef
--- /dev/null
+++ b/astropy/vo/client/tests/data/conesearch_error3.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE VOTABLE SYSTEM "http://us-vo.org/xml/VOTable.dtd">
+<VOTABLE version="1.0">
+  <DESCRIPTION>MAST Simple Cone Search Service</DESCRIPTION>
+  <RESOURCE ID="error_resource">
+    <PARAM ID="Error" name="Error" datatype="char" arraysize="*"
+          value="Invalid data type: text/html"/>
+ </RESOURCE>
+</VOTABLE>
diff --git a/astropy/vo/client/tests/data/conesearch_error4.xml b/astropy/vo/client/tests/data/conesearch_error4.xml
new file mode 100644
index 0000000..b1956dc
--- /dev/null
+++ b/astropy/vo/client/tests/data/conesearch_error4.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE VOTABLE SYSTEM "http://us-vo.org/xml/VOTable.dtd">
+<VOTABLE version="1.0">
+<DESCRIPTION>MAST Simple Cone Search Service</DESCRIPTION>
+<DEFINITIONS>
+<PARAM ID="Error" name="Error" datatype="char" arraysize="*"
+    value="Invalid data type: text/html"/>
+</DEFINITIONS>
+</VOTABLE>
diff --git a/astropy/vo/client/tests/test_vo.py b/astropy/vo/client/tests/test_vo.py
new file mode 100644
index 0000000..79c0ecd
--- /dev/null
+++ b/astropy/vo/client/tests/test_vo.py
@@ -0,0 +1,240 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""Tests for `astropy.vo.client`
+
+Examples
+--------
+Running inside Python::
+
+    >>> import astropy
+    >>> astropy.test('vo.client', remote_data=True)
+
+Running from top level via command line::
+
+    $ python setup.py test -P vo.client --remote-data
+
+Running from ``astropy/vo/client/tests`` directory::
+
+    $ setenv ASTROPY_USE_SYSTEM_PYTEST 1
+    $ py.test test_vo.py --remote-data
+
+"""
+# STDLIB
+import os
+
+# THIRD-PARTY
+import numpy as np
+
+# LOCAL
+from .. import conesearch, vos_catalog
+from .... import units as u
+from ....coordinates import Angle, ICRS
+from ....tests.helper import pytest, remote_data
+from ....utils.data import get_pkg_data_filename
+from ....utils.data import REMOTE_TIMEOUT
+
+
+__doctest_skip__ = ['*']
+
+
+# Global variables for TestConeSearch
+SCS_RA = 0
+SCS_DEC = 0
+SCS_SR = 0.1
+SCS_CENTER = ICRS(SCS_RA, SCS_DEC, unit=(u.degree, u.degree))
+SCS_RADIUS = Angle(SCS_SR, unit=u.degree)
+
+
+ at remote_data
+def test_basic_db():
+    """Read dummy ``basic.json`` database to test underlying database
+    functionality.
+
+    """
+    basic_db = vos_catalog.get_remote_catalog_db('basic')
+    assert sorted(basic_db.keys()) == ['__version__', 'catalogs', 'content']
+    assert basic_db['content'] == ['A', 'B', 'C']
+
+    assert basic_db.list_catalogs() == ['foo']
+    assert basic_db.list_catalogs(pattern='whatever') == []
+
+    foo_cat1 = basic_db.get_catalog('foo')
+    for k, v in basic_db.get_catalogs():
+        assert k == 'foo'
+        assert v._tree == foo_cat1._tree == {'title': 'bar', 'url': 'bar.foo'}
+
+    foo_cat2 = basic_db.get_catalog_by_url('bar.foo')
+    for k, v in basic_db.get_catalogs_by_url('bar.foo'):
+        assert k == 'foo'
+        assert v._tree == foo_cat2._tree == {'title': 'bar', 'url': 'bar.foo'}
+
+    try:
+        x = basic_db.get_catalog('not_there')
+    except vos_catalog.VOSError:
+        pass
+
+    assert vos_catalog.list_catalogs('basic') == ['foo']
+
+
+ at remote_data
+class TestConeSearch(object):
+    """Test Cone Search on a pre-defined access URL.
+
+    .. note::
+
+        This test will fail if the URL becomes inaccessible,
+        which is beyond AstroPy's control. When this happens,
+        change the test to use a different URL.
+
+        At the time this was written, ``pedantic=True`` will
+        not yield any successful search.
+
+    """
+    def setup_class(self):
+        # If this link is broken, use the next in database that works
+        self.url = 'http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-A2&'
+        self.catname = 'USNO-A2'
+
+        # Avoid downloading the full database
+        conesearch.CONESEARCH_DBNAME.set('conesearch_simple')
+
+        self.verbose = False
+        self.pedantic = False
+
+    def test_cat_listing(self):
+        assert (conesearch.list_catalogs() ==
+                ['BROKEN', 'USNO ACT', 'USNO NOMAD', 'USNO-A2', 'USNO-B1'])
+        assert (conesearch.list_catalogs(pattern='usno*a') ==
+                ['USNO ACT', 'USNO NOMAD', 'USNO-A2'])
+
+    @pytest.mark.parametrize(('center', 'radius'),
+                             [((SCS_RA, SCS_DEC), SCS_SR),
+                              (SCS_CENTER, SCS_RADIUS)])
+    def test_one_search(self, center, radius):
+        """This does not necessarily uses ``self.url`` because of
+        unordered dict in JSON tree.
+
+        """
+        tab_1 = conesearch.conesearch(
+            center, radius, pedantic=self.pedantic, verbose=self.verbose)
+
+        assert tab_1.array.size > 0
+
+    def test_searches(self):
+        tab_2 = conesearch.conesearch(
+            SCS_CENTER, SCS_RADIUS, catalog_db=self.url,
+            pedantic=self.pedantic, verbose=self.verbose)
+
+        tab_3 = conesearch.conesearch(
+            SCS_CENTER, SCS_RADIUS,
+            catalog_db=[self.catname, self.url],
+            pedantic=self.pedantic, verbose=self.verbose)
+
+        tab_4 = conesearch.conesearch(
+            SCS_CENTER, SCS_RADIUS,
+            catalog_db=vos_catalog.get_remote_catalog_db(
+                conesearch.CONESEARCH_DBNAME()),
+            pedantic=self.pedantic, verbose=self.verbose)
+
+        assert tab_2.url == tab_3.url
+        np.testing.assert_array_equal(tab_2.array, tab_3.array)
+
+        # If this fails, it is because of dict hashing, no big deal.
+        if tab_2.url == tab_4.url:
+            np.testing.assert_array_equal(tab_2.array, tab_4.array)
+        else:
+            pytest.xfail('conesearch_simple.json used a different URL')
+
+    @pytest.mark.parametrize(('center', 'radius'),
+                             [((SCS_RA, SCS_DEC), SCS_SR),
+                              (SCS_CENTER, SCS_RADIUS)])
+    def test_search_all(self, center, radius):
+        all_results = conesearch.search_all(
+            center, radius, catalog_db=['BROKEN', self.url],
+            pedantic=self.pedantic, verbose=self.verbose)
+
+        assert len(all_results) == 1
+
+        tab_1 = all_results[self.url]
+
+        assert tab_1.array.size > 0
+
+    def test_async(self):
+        async_search = conesearch.AsyncConeSearch(
+            SCS_CENTER, SCS_RADIUS, pedantic=self.pedantic)
+
+        tab = async_search.get(timeout=REMOTE_TIMEOUT())
+
+        assert async_search.done()
+        assert tab.array.size > 0
+
+    def test_async_all(self):
+        async_search_all = conesearch.AsyncSearchAll(
+            SCS_CENTER, SCS_RADIUS, pedantic=self.pedantic)
+
+        all_results = async_search_all.get(timeout=(REMOTE_TIMEOUT() * 2))
+
+        assert async_search_all.done()
+        for tab in all_results.values():
+            assert tab.array.size > 0
+
+    @pytest.mark.parametrize(('center', 'radius'),
+                             [((SCS_RA, SCS_DEC), SCS_SR),
+                              (SCS_CENTER, SCS_RADIUS)])
+    def test_prediction(self,  center, radius):
+        """Prediction tests are not very accurate but will have to do."""
+        t_1, tab_1 = conesearch.conesearch_timer(
+            center, radius, catalog_db=self.url,
+            pedantic=self.pedantic, verbose=self.verbose)
+        n_1 = tab_1.array.size
+
+        t_2, n_2 = conesearch.predict_search(
+            self.url, (SCS_RA, SCS_DEC), SCS_SR,
+            pedantic=self.pedantic, verbose=self.verbose)
+
+        assert n_2 > 0 and n_2 <= n_1 * 1.5
+        assert t_2 > 0 and t_2 <= t_1 * 1.5
+
+    def teardown_class(self):
+        conesearch.CONESEARCH_DBNAME.set(
+            conesearch.CONESEARCH_DBNAME.defaultvalue)
+
+
+class TestErrorResponse(object):
+    """Test Cone Search error response handling.
+
+    This is defined in Section 2.3 of Simple Cone Search Version 1.03,
+    IVOA Recommendation, 22 February 2008.
+
+    Also see https://github.com/astropy/astropy/issues/1001
+
+    """
+    def setup_class(self):
+        self.datadir = 'data'
+        self.pedantic = False
+        self.conesearch_errmsg = {
+            'conesearch_error1.xml': 'Error in input RA value: as3f',
+            'conesearch_error2.xml': 'Error in input RA value: as3f',
+            'conesearch_error3.xml': 'Invalid data type: text/html',
+            'conesearch_error4.xml': 'Invalid data type: text/html'}
+
+    def conesearch_compare(self, xmlfile, msg):
+        """Bypassing Cone Search query and just imitating the reply,
+        then check if appropriate error message is caught.
+
+        """
+        # conesearch_error4.xml is a wont-fix for now
+        if xmlfile == 'conesearch_error4.xml':
+            pytest.xfail('Currently not supported, '
+                         'see astropy.io.votable.exceptions.W22')
+
+        url = get_pkg_data_filename(os.path.join(self.datadir, xmlfile))
+        try:
+            r = vos_catalog._vo_service_request(url, self.pedantic, {})
+        except vos_catalog.VOSError as e:
+            assert msg in str(e)
+
+    @pytest.mark.parametrize(('id'), [1, 2, 3, 4])
+    def test_conesearch_response(self, id):
+        xml = 'conesearch_error{0}.xml'.format(id)
+        msg = self.conesearch_errmsg[xml]
+        self.conesearch_compare(xml, msg)
diff --git a/astropy/vo/client/vos_catalog.py b/astropy/vo/client/vos_catalog.py
new file mode 100644
index 0000000..59ae7b4
--- /dev/null
+++ b/astropy/vo/client/vos_catalog.py
@@ -0,0 +1,464 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""Common utilities for accessing VO simple services."""
+from __future__ import print_function, division
+
+# STDLIB
+import fnmatch
+import json
+import re
+import urllib
+
+# LOCAL
+from ...config.configuration import ConfigurationItem
+from ...io.votable import table, tree
+from ...io.votable.exceptions import vo_raise, vo_warn, E19, W24, W25
+from ...utils.console import color_print
+from ...utils.data import get_readable_fileobj
+
+
+__all__ = ['VOSCatalog', 'VOSDatabase', 'get_remote_catalog_db',
+           'call_vo_service', 'list_catalogs']
+
+__dbversion__ = 1
+
+VO_PEDANTIC = table.PEDANTIC()
+
+BASEURL = ConfigurationItem('vos_baseurl',
+                            'http://stsdas.stsci.edu/astrolib/vo_databases/',
+                            'URL where VO Service database file is stored.')
+
+
+class VOSError(Exception):  # pragma: no cover
+    pass
+
+
+class VOSCatalog(object):
+    """A class to represent VO Service Catalog.
+
+    Parameters
+    ----------
+    tree : JSON tree
+
+    """
+    def __init__(self, tree):
+        self._tree = tree
+
+    def __getattr__(self, what):
+        """Expose dictionary attributes."""
+        return getattr(self._tree, what)
+
+    def __getitem__(self, what):
+        """Expose dictionary key look-up."""
+        return self._tree[what]
+
+    def __str__(self):  # pragma: no cover
+        """Show the most important and unique things about a catalog."""
+        keys = ('title', 'url')
+        out_str = '\n'.join(['{0}: {1}'.format(key, self._tree[key])
+                             for key in keys if key in self._tree])
+        return out_str
+
+    def dumps(self):  # pragma: no cover
+        """Dump the contents into a string.
+
+        Returns
+        -------
+        s : str
+            Contents as JSON string dump.
+
+        """
+        return json.dumps(self._tree, sort_keys=True, indent=4)
+
+
+class VOSDatabase(VOSCatalog):
+    """A class to represent a collection of `VOSCatalog`.
+
+    Parameters
+    ----------
+    tree : JSON tree
+
+    Raises
+    ------
+    VOSError
+        If given ``tree`` does not have 'catalogs' key.
+
+    """
+    def __init__(self, tree):
+        self._tree = tree
+
+        if tree['__version__'] > __dbversion__:  # pragma: no cover
+            vo_warn(W24)
+
+        if not 'catalogs' in tree:  # pragma: no cover
+            raise VOSError("Invalid VO service catalog database")
+
+        self._catalogs = tree['catalogs']
+
+    def __str__(self):  # pragma: no cover
+        """Show the most important and unique things about a database."""
+        return '\n'.join(sorted(self._catalogs.keys()))
+
+    def get_catalogs(self):
+        """Iterator to get all catalogs."""
+        for key, val in self._catalogs.items():
+            yield key, VOSCatalog(val)
+
+    def get_catalogs_by_url(self, url):
+        """Like :func:`get_catalogs` but using access URL look-up."""
+        for key, cat in self.get_catalogs():
+            if cat['url'] == url:
+                yield key, cat
+
+    def get_catalog(self, name):
+        """Get one catalog of given name.
+
+        Parameters
+        ----------
+        name : str
+            Primary key identifying the catalog.
+
+        Returns
+        -------
+        obj : `VOSCatalog` object
+
+        Raises
+        ------
+        VOSError
+            If catalog is not found.
+
+        """
+        if not name in self._catalogs:
+            raise VOSError("No catalog '{0}' found.".format(name))
+        return VOSCatalog(self._catalogs[name])
+
+    def get_catalog_by_url(self, url):
+        """Like :func:`get_catalog` but using access URL look-up.
+        On multiple matches, only first match is returned.
+
+        """
+        out_cat = None
+        for key, cat in self.get_catalogs_by_url(url):
+            out_cat = cat
+            break
+        if out_cat is None:  # pragma: no cover
+            raise VOSError("No catalog with URL '{0}' found.".format(url))
+        return out_cat
+
+    def list_catalogs(self, pattern=None, sort=True):
+        """List catalog names.
+
+        Parameters
+        ----------
+        pattern : str or `None`
+            If given string is anywhere in a catalog name, it is
+            considered a matching catalog. It accepts patterns as
+            in :py:mod:`fnmatch` and is case-insensitive.
+            By default, all catalogs are returned.
+
+        sort : bool
+            Sort output in alphabetical order. If not sorted, the
+            order depends on dictionary hashing. Default is `True`.
+
+        Returns
+        -------
+        out_arr : list of str
+            List of catalog names.
+
+        """
+        all_catalogs = self._catalogs.keys()
+
+        if pattern is None or len(all_catalogs) == 0:
+            out_arr = all_catalogs
+        else:
+            pattern = re.compile(fnmatch.translate('*' + pattern + '*'),
+                                 re.IGNORECASE)
+            out_arr = [s for s in all_catalogs if pattern.match(s)]
+
+        if sort:
+            out_arr.sort()
+
+        return out_arr
+
+
+def get_remote_catalog_db(dbname, cache=True, verbose=True):
+    """Get a database of VO services (which is a JSON file) from a remote
+    location.
+
+    Parameters
+    ----------
+    dbname : str
+        Prefix of JSON file to download from
+        ``astropy.vo.client.vos_catalog.BASEURL``.
+
+    cache : bool
+        Use caching for VO Service database. Access to actual VO
+        websites referenced by the database still needs internet
+        connection.
+
+    verbose : bool
+        Show download progress bars.
+
+    Returns
+    -------
+    obj : `VOSDatabase` object
+        A database of VO services.
+
+    """
+    with get_readable_fileobj(BASEURL() + dbname + '.json',
+                              encoding='utf8', cache=cache,
+                              show_progress=verbose) as fd:
+        tree = json.load(fd)
+
+    return VOSDatabase(tree)
+
+
+def _get_catalogs(service_type, catalog_db, **kwargs):
+    """Expand ``catalog_db`` to a list of catalogs.
+
+    Parameters
+    ----------
+    service_type, catalog_db
+        See :func:`call_vo_service`.
+
+    kwargs : dict
+        Keywords accepted by :func:`get_remote_catalog_db`.
+
+    Returns
+    -------
+    catalogs : list of tuple
+        List of catalogs in the form of ``(key, VOSCatalog)``.
+
+    """
+    if catalog_db is None:
+        catalog_db = get_remote_catalog_db(service_type, **kwargs)
+        catalogs = catalog_db.get_catalogs()
+    elif isinstance(catalog_db, VOSDatabase):
+        catalogs = catalog_db.get_catalogs()
+    elif isinstance(catalog_db, (VOSCatalog, basestring)):
+        catalogs = [(None, catalog_db)]
+    elif isinstance(catalog_db, list):
+        for x in catalog_db:
+            assert (isinstance(x, (VOSCatalog, basestring)) and
+                    not isinstance(x, VOSDatabase))
+        catalogs = [(None, x) for x in catalog_db]
+    else:  # pragma: no cover
+        raise VOSError('catalog_db must be a catalog database, '
+                       'a list of catalogs, or a catalog')
+
+    return catalogs
+
+
+def _vo_service_request(url, pedantic, kwargs, verbose=False):
+    if len(kwargs) and not (url.endswith('?') or url.endswith('&')):
+        raise VOSError("url should already end with '?' or '&'")
+
+    query = []
+    for key, value in kwargs.iteritems():
+        query.append('{}={}'.format(
+            urllib.quote(key), urllib.quote_plus(str(value))))
+
+    parsed_url = url + '&'.join(query)
+    with get_readable_fileobj(parsed_url, encoding='binary',
+                              show_progress=verbose) as req:
+        tab = table.parse(req, filename=parsed_url, pedantic=pedantic)
+
+    return vo_tab_parse(tab, url, kwargs)
+
+
+def vo_tab_parse(tab, url, kwargs):
+    """In case of errors from the server, a complete and correct
+    'stub' VOTable file may still be returned.  This is to
+    detect that case.
+
+    Parameters
+    ----------
+    tab : `astropy.io.votable.tree.VOTableFile` object
+
+    url : str
+        URL used to obtain ``tab``.
+
+    kwargs : dict
+        Keywords used to obtain ``tab``, if any.
+
+    Returns
+    -------
+    out_tab : `astropy.io.votable.tree.Table` object
+
+    Raises
+    ------
+    IndexError
+        Table iterator fails.
+
+    VOSError
+        Server returns error message or invalid table.
+
+    """
+    for param in tab.iter_fields_and_params():
+        if param.ID is not None and param.ID.lower() == 'error':
+            if isinstance(param, tree.Param):
+                e = param.value
+            else:  # pragma: no cover
+                e = ''
+            raise VOSError("Catalog server '{0}' returned error '{1}'".format(
+                url, e))
+
+    for info in tab.infos:
+        if info.name is not None and info.name.lower() == 'error':
+            raise VOSError("Catalog server '{0}' returned error '{1}'".format(
+                url, info.value))
+
+    if tab.resources == []:  # pragma: no cover
+        vo_raise(E19)
+
+    for info in tab.resources[0].infos:
+        if ((info.name == 'QUERY_STATUS' and info.value != 'OK') or
+                (info.name is not None and info.name.lower() == 'error')):
+            if info.content is not None:  # pragma: no cover
+                long_descr = ':\n{0}'.format(info.content)
+            else:
+                long_descr = ''
+            raise VOSError("Catalog server '{0}' returned status "
+                           "'{1}'{2}".format(url, info.value, long_descr))
+
+    out_tab = tab.get_first_table()
+
+    kw_sr = [k for k in kwargs if 'sr' == k.lower()]
+    if len(kw_sr) == 0:
+        sr = 0
+    else:
+        sr = kwargs.get(kw_sr[0])
+
+    if sr != 0 and out_tab.array.size <= 0:
+        raise VOSError("Catalog server '{0}' returned {1} result".format(
+            url, out_tab.array.size))
+
+    out_tab.url = url  # Track the URL
+    return out_tab
+
+
+def call_vo_service(service_type, catalog_db=None, pedantic=None,
+                    verbose=True, cache=True, kwargs={}):
+    """Makes a generic VO service call.
+
+    Parameters
+    ----------
+    service_type : str
+        Name of the type of service, e.g., 'conesearch_good'.
+        Used in error messages and to select a catalog database
+        if ``catalog_db`` is not provided.
+
+    catalog_db
+        May be one of the following, in order from easiest to
+        use to most control:
+
+            - `None`: A database of ``service_type`` catalogs is downloaded
+              from ``astropy.vo.client.vos_catalog.BASEURL``.  The first
+              catalog in the database to successfully return a result is used.
+
+            - *catalog name*: A name in the database of ``service_type``
+              catalogs at ``astropy.vo.client.vos_catalog.BASEURL`` is used.
+              For a list of acceptable names, use :func:`list_catalogs`.
+
+            - *url*: The prefix of a URL to a IVOA Service for
+              ``service_type``. Must end in either '?' or '&'.
+
+            - `VOSCatalog` object: A specific catalog manually downloaded and
+              selected from the database (see :ref:`vo-sec-client-vos`).
+
+            - Any of the above 3 options combined in a list, in which case
+              they are tried in order.
+
+    pedantic : bool or `None`
+        When `True`, raise an error when the file violates the spec,
+        otherwise issue a warning.  Warnings may be controlled using
+        :py:mod:`warnings` module.
+        When not provided, uses the configuration setting
+        ``astropy.io.votable.table.PEDANTIC``, which defaults to `False`.
+
+    verbose : bool
+        Verbose output.
+
+    cache : bool
+        Use caching for VO Service database. Access to actual VO
+        websites referenced by the database still needs internet
+        connection.
+
+    kwargs : dictionary
+        Keyword arguments to pass to the catalog service.
+        No checking is done that the arguments are accepted by
+        the service, etc.
+
+    Returns
+    -------
+    obj : `astropy.io.votable.tree.Table` object
+        First table from first successful VO service request.
+
+    Raises
+    ------
+    VOSError
+        If VO service request fails.
+
+    """
+    catalogs = _get_catalogs(service_type, catalog_db, cache=cache,
+                             verbose=verbose)
+
+    if pedantic is None:  # pragma: no cover
+        pedantic = VO_PEDANTIC
+
+    for name, catalog in catalogs:
+        if isinstance(catalog, basestring):
+            if catalog.startswith("http"):
+                url = catalog
+            else:
+                remote_db = get_remote_catalog_db(service_type, cache=cache,
+                                                  verbose=verbose)
+                catalog = remote_db.get_catalog(catalog)
+                url = catalog['url']
+        else:
+            url = catalog['url']
+
+        if verbose:  # pragma: no cover
+            color_print('Trying {0}'.format(url), 'green')
+
+        try:
+            return _vo_service_request(url, pedantic, kwargs, verbose=verbose)
+        except Exception as e:
+            vo_warn(W25, (url, str(e)))
+
+    raise VOSError('None of the available catalogs returned valid results.')
+
+
+def list_catalogs(service_type, cache=True, verbose=True, **kwargs):
+    """List the catalogs available for the given service type.
+
+    Parameters
+    ----------
+    service_type : str
+        Name of the type of service, e.g., 'conesearch_good'.
+
+    cache : bool
+        Use caching for VO Service database. Access to actual VO
+        websites referenced by the database still needs internet
+        connection.
+
+    verbose : bool
+        Show download progress bars.
+
+    pattern : str or `None`
+        If given string is anywhere in a catalog name, it is
+        considered a matching catalog. It accepts patterns as
+        in :py:mod:`fnmatch` and is case-insensitive.
+        By default, all catalogs are returned.
+
+    sort : bool
+        Sort output in alphabetical order. If not sorted, the
+        order depends on dictionary hashing. Default is `True`.
+
+    Returns
+    -------
+    arr : list of str
+        List of catalog names.
+
+    """
+    return get_remote_catalog_db(service_type, cache=cache,
+                                 verbose=verbose).list_catalogs(**kwargs)
diff --git a/astropy/config/tests/__init__.py b/astropy/vo/validator/__init__.py
similarity index 100%
copy from astropy/config/tests/__init__.py
copy to astropy/vo/validator/__init__.py
diff --git a/astropy/vo/validator/data/conesearch_urls.txt b/astropy/vo/validator/data/conesearch_urls.txt
new file mode 100644
index 0000000..ab1bfa6
--- /dev/null
+++ b/astropy/vo/validator/data/conesearch_urls.txt
@@ -0,0 +1,30 @@
+http://archive.noao.edu/nvo/usno.php?cat=a&
+http://gsss.stsci.edu/webservices/vo/ConeSearch.aspx?CAT=GSC23&
+http://irsa.ipac.caltech.edu/cgi-bin/Oasis/CatSearch/nph-catsearch?CAT=fp_psc&
+http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/220/out&
+http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/243/out&
+http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/252/out&
+http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/254/out&
+http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/255/out&
+http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/284/out&
+http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=II/246/out&
+http://vo.astronet.ru/sai_cas/conesearch?cat=sdssdr7&tab=field&
+http://vo.astronet.ru/sai_cas/conesearch?cat=sdssdr7&tab=photoobjall&
+http://vo.astronet.ru/sai_cas/conesearch?cat=sdssdr7&tab=phototag&
+http://vo.astronet.ru/sai_cas/conesearch?cat=sdssdr7&tab=specobjall&
+http://vo.astronet.ru/sai_cas/conesearch?cat=sdssdr7&tab=specphotoall&
+http://vo.astronet.ru/sai_cas/conesearch?cat=sdssdr7&tab=sppparams&
+http://vo.astronet.ru/sai_cas/conesearch?cat=twomass&tab=psc&
+http://vo.astronet.ru/sai_cas/conesearch?cat=twomass&tab=xsc&
+http://vo.astronet.ru/sai_cas/conesearch?cat=usnoa2&tab=main&
+http://vo.astronet.ru/sai_cas/conesearch?cat=usnob1&tab=main&
+http://wfaudata.roe.ac.uk/sdssdr7-dsa/DirectCone?DSACAT=SDSS_DR7&DSATAB=Galaxy&
+http://wfaudata.roe.ac.uk/sdssdr7-dsa/DirectCone?DSACAT=SDSS_DR7&DSATAB=PhotoObj&
+http://wfaudata.roe.ac.uk/sdssdr7-dsa/DirectCone?DSACAT=SDSS_DR7&DSATAB=PhotoObjAll&
+http://wfaudata.roe.ac.uk/sdssdr7-dsa/DirectCone?DSACAT=SDSS_DR7&DSATAB=Star&
+http://wfaudata.roe.ac.uk/sdssdr8-dsa/DirectCone?DSACAT=SDSS_DR8&DSATAB=PhotoObjAll&
+http://wfaudata.roe.ac.uk/sdssdr8-dsa/DirectCone?DSACAT=SDSS_DR8&DSATAB=SpecObjAll&
+http://wfaudata.roe.ac.uk/twomass-dsa/DirectCone?DSACAT=TWOMASS&DSATAB=twomass_psc&
+http://wfaudata.roe.ac.uk/twomass-dsa/DirectCone?DSACAT=TWOMASS&DSATAB=twomass_xsc&
+http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-A2&
+http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-B1&
diff --git a/astropy/vo/validator/inspect.py b/astropy/vo/validator/inspect.py
new file mode 100644
index 0000000..03900a4
--- /dev/null
+++ b/astropy/vo/validator/inspect.py
@@ -0,0 +1,189 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""Inspect results from `astropy.vo.validator.validate`."""
+from __future__ import print_function, division
+
+# STDLIB
+import sys
+
+# LOCAL
+from ..client.vos_catalog import get_remote_catalog_db
+
+
+__all__ = ['ConeSearchResults']
+
+
+class ConeSearchResults(object):
+    """A class to store Cone Search validation results.
+
+    Attributes
+    ----------
+    dbtypes : list
+        Cone Search database identifiers.
+
+    dbs : dict
+        Stores `astropy.vo.client.vos_catalog.VOSDatabase`
+        for each ``dbtypes``.
+
+    catkeys : dict
+        Stores sorted catalog keys for each ``dbtypes``.
+
+    Parameters
+    ----------
+    cache : bool
+       Read from cache, if available.
+       Default is `False` to ensure the latest data are read.
+
+    verbose : bool
+        Show download progress bars.
+
+    """
+    def __init__(self, cache=False, verbose=True):
+        self.dbtypes = ['good', 'warn', 'exception', 'error']
+        self.dbs = {}
+        self.catkeys = {}
+
+        for typ in self.dbtypes:
+            self.dbs[typ] = get_remote_catalog_db(
+                'conesearch_' + typ, cache=cache, verbose=verbose)
+            self.catkeys[typ] = self.dbs[typ].list_catalogs()
+
+    def tally(self, fout=None):
+        """
+        Tally databases.
+
+        Parameters
+        ----------
+        fout : output stream
+            Default is sys.stdout.
+
+        """
+        if fout is None:
+            fout = sys.stdout
+
+        str_list = []
+        n_tot = 0
+
+        for typ in self.dbtypes:
+            n_cur = len(self.catkeys[typ])
+            n_tot += n_cur
+            str_list.append('{0}: {1} catalog(s)'.format(typ, n_cur))
+
+        if len(str_list) > 0:
+            str_list.append('total: {0} catalog(s)\n'.format(n_tot))
+            fout.write('\n'.join(str_list))
+
+    def list_cats(self, typ, fout=None, ignore_noncrit=False):
+        """
+        List catalogs in given database.
+
+        Listing contains:
+
+            #. Catalog key
+            #. Cone search access URL
+            #. Warning codes
+            #. Warning descriptions
+
+        Parameters
+        ----------
+        typ : str
+            Any value in ``self.dbtypes``.
+
+        fout : output stream
+            Default is screen output.
+
+        ignore_noncrit : bool
+            Exclude warnings in
+            ``astropy.vo.validator.validate.NONCRIT_WARNINGS``.
+            This is useful to see why a catalog failed validation.
+
+        """
+        if fout is None:
+            fout = sys.stdout
+
+        assert typ in self.dbtypes
+        str_list = []
+
+        for cat in self.catkeys[typ]:
+            cat_db = self.dbs[typ].get_catalog(cat)
+
+            if ignore_noncrit:
+                out_wt = _exclude_noncrit(cat_db['validate_warning_types'])
+                out_ws = _exclude_noncrit(cat_db['validate_warnings'])
+            else:
+                out_wt = cat_db['validate_warning_types']
+                out_ws = cat_db['validate_warnings']
+
+            # Warning types contains None if some other Exception was thrown.
+            # There should be only 1 occurence for each warning type.
+            # But will put in a loop anyway, just in case.
+            while None in out_wt:  # pragma: no cover
+                out_wt[out_wt.index(None)] = 'None'
+
+            str_list += [cat, cat_db['url']]
+            if len(out_wt) > 0:
+                str_list.append(','.join(out_wt))
+            if len(out_ws) > 0:
+                str_list.append('\n'.join(out_ws))
+            str_list[-1] += '\n'
+
+        if len(str_list) > 0:
+            fout.write('\n'.join(str_list))
+
+    def print_cat(self, key, fout=None):
+        """
+        Display a single catalog of given key.
+
+        If not found, nothing is written out.
+
+        Parameters
+        -----------
+        key : str
+            Catalog key.
+
+        fout : output stream
+            Default is screen output.
+
+        """
+        if fout is None:
+            fout = sys.stdout
+
+        str_list = []
+
+        for typ in self.dbtypes:
+            if key in self.catkeys[typ]:
+                str_list += [self.dbs[typ].get_catalog(key).dumps(),
+                             '\nFound in {0}'.format(typ)]
+
+                # Only has one match, so quits when it is found
+                break
+
+        if len(str_list) > 0:
+            fout.write('\n'.join(str_list) + '\n')
+
+
+def _exclude_noncrit(in_list):
+    """
+    Exclude any items in input list containing
+    ``astropy.vo.validator.validate.NONCRIT_WARNINGS``.
+
+    Parameters
+    ----------
+    in_list : list
+        List of strings to process.
+
+    Returns
+    -------
+    out_list : list
+        List with only qualified strings.
+
+    """
+    from .validate import NONCRIT_WARNINGS
+    out_list = []
+    for s in in_list:
+        n = 0
+        if s is not None:
+            for w in NONCRIT_WARNINGS():
+                n += s.count(w)
+        if n == 0:  # pragma: no cover
+            out_list.append(s)
+    return out_list
diff --git a/astropy/vo/validator/setup_package.py b/astropy/vo/validator/setup_package.py
new file mode 100755
index 0000000..aceae1d
--- /dev/null
+++ b/astropy/vo/validator/setup_package.py
@@ -0,0 +1,8 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+
+def get_package_data():
+    return {
+        'astropy.vo.validator': ['data/*.txt'],
+        'astropy.vo.validator.tests': ['data/*.json', 'data/*.xml',
+                                       'data/*.out']}
diff --git a/astropy/config/tests/__init__.py b/astropy/vo/validator/tests/__init__.py
similarity index 100%
copy from astropy/config/tests/__init__.py
copy to astropy/vo/validator/tests/__init__.py
diff --git a/astropy/vo/validator/tests/data/conesearch_error.json b/astropy/vo/validator/tests/data/conesearch_error.json
new file mode 100644
index 0000000..bef15e7
--- /dev/null
+++ b/astropy/vo/validator/tests/data/conesearch_error.json
@@ -0,0 +1,4 @@
+{
+    "__version__": 1, 
+    "catalogs": {}
+}
\ No newline at end of file
diff --git a/astropy/vo/validator/tests/data/conesearch_exception.json b/astropy/vo/validator/tests/data/conesearch_exception.json
new file mode 100644
index 0000000..bef15e7
--- /dev/null
+++ b/astropy/vo/validator/tests/data/conesearch_exception.json
@@ -0,0 +1,4 @@
+{
+    "__version__": 1, 
+    "catalogs": {}
+}
\ No newline at end of file
diff --git a/astropy/vo/validator/tests/data/conesearch_good.json b/astropy/vo/validator/tests/data/conesearch_good.json
new file mode 100644
index 0000000..82182ea
--- /dev/null
+++ b/astropy/vo/validator/tests/data/conesearch_good.json
@@ -0,0 +1,91 @@
+{
+    "__version__": 1, 
+    "catalogs": {
+        "HST Guide Star Catalog 2.3 1": {
+            "capabilityClass": "ConeSearch", 
+            "capabilityStandardID": "ivo://ivoa.net/std/ConeSearch", 
+            "capabilityValidationLevel": "2", 
+            "contentLevel": "#Research#", 
+            "description": "The Guide Star Catalog II (GSC-II) is an all-sky optical catalog based on 1\" resolution scans of the photographic Sky Survey plates, at two epochs and three bandpasses, from the Palomar and UK Schmidt telescopes. This all-sky catalog will ultimately contains positions, proper motions, classifications, and magnitudes in multiple bandpasses for almost a billion objects down to approximately Jpg=21, Fpg=20. The GSC-II is currently used for HST Bright Object Prot [...]
+            "duplicatesIgnored": 0, 
+            "identifier": "ivo://archive.stsci.edu/gsc/gsc2.3#1", 
+            "interfaceClass": "ParamHTTP", 
+            "interfaceRole": "std?", 
+            "interfaceVersion": "", 
+            "maxRadius": 1.0, 
+            "maxRecords": 1000, 
+            "publisher": "Space Telescope Science", 
+            "publisherID": "", 
+            "referenceURL": "http://gsss.stsci.edu/Catalogs/GSC/GSC2/GSC2.htm", 
+            "regionOfRegard": NaN, 
+            "resourceID": "ivo://archive.stsci.edu/gsc/gsc2.3", 
+            "shortName": "GSC23", 
+            "subject": "#Surveys#", 
+            "tags": "Catalog", 
+            "title": "HST Guide Star Catalog 2.3", 
+            "type": "#Catalog#", 
+            "updated": "2012-03-08T20:39:06", 
+            "url": "http://gsss.stsci.edu/webservices/vo/ConeSearch.aspx?CAT=GSC23&", 
+            "validate_expected": "good", 
+            "validate_network_error": null, 
+            "validate_nexceptions": 0, 
+            "validate_nwarnings": 2, 
+            "validate_out_db_name": "good", 
+            "validate_version": "1.2", 
+            "validate_warning_types": [
+                "W48", 
+                "W50"
+            ], 
+            "validate_warnings": [
+                "./results/0b/1a/daefc22180f34be9334262a5d8c5/vo.xml:136:0: W50: Invalid unit string 'pixel'", 
+                "./results/0b/1a/daefc22180f34be9334262a5d8c5/vo.xml:155:0: W48: Unknown attribute 'nrows' on TABLEDATA"
+            ], 
+            "validate_xmllint": false, 
+            "validate_xmllint_content": "./results/0b/1a/daefc22180f34be9334262a5d8c5/vo.xml:155: element TABLEDATA: Schemas validity error : Element '{http://www.ivoa.net/xml/VOTable/v1.2}TABLEDATA', attribute 'nrows': The attribute 'nrows' is not allowed.\n./results/0b/1a/daefc22180f34be9334262a5d8c5/vo.xml fails to validate\n", 
+            "version": "2.3.2", 
+            "waveband": "#Optical#"
+        }, 
+        "The USNO-A2.0 Catalogue (Monet+ 1998) 1": {
+            "capabilityClass": "ConeSearch", 
+            "capabilityStandardID": "ivo://ivoa.net/std/ConeSearch", 
+            "capabilityValidationLevel": "", 
+            "contentLevel": "#Research#", 
+            "description": "USNO-A2.0 is a catalog of 526,280,881 stars, and is based on a re-reduction of the Precision Measuring Machine (PMM) scans that were the basis for the USNO-A1.0 catalog. The major difference between A2.0 and A1.0 is that A1.0 used the Guide Star Catalog (Lasker et al. 1986, see Cat. <I/220>) as its reference frame whereas A2.0 uses the ICRF as realized by the USNO ACT catalog (Urban et al. 1997, see Cat. II/246>). A2.0 presents right ascension and dec [...]
+            "duplicatesIgnored": 0, 
+            "identifier": "ivo://CDS.VizieR/I/252#out", 
+            "interfaceClass": "ParamHTTP", 
+            "interfaceRole": "std?", 
+            "interfaceVersion": "", 
+            "maxRadius": 180.0, 
+            "maxRecords": 9999, 
+            "publisher": "CDS", 
+            "publisherID": "ivo://CDS", 
+            "referenceURL": "http://cdsarc.u-strasbg.fr/cgi-bin/Cat?I/252", 
+            "regionOfRegard": NaN, 
+            "resourceID": "ivo://CDS.VizieR/I/252", 
+            "shortName": "I/252", 
+            "subject": "#Positional_Data#", 
+            "tags": "Catalog", 
+            "title": "The USNO-A2.0 Catalogue (Monet+ 1998)", 
+            "type": "#Catalog#", 
+            "updated": "2011-09-14T20:20:21", 
+            "url": "http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/252/out&", 
+            "validate_expected": "good", 
+            "validate_network_error": null, 
+            "validate_nexceptions": 0, 
+            "validate_nwarnings": 1, 
+            "validate_out_db_name": "good", 
+            "validate_version": "1.1", 
+            "validate_warning_types": [
+                "W22"
+            ], 
+            "validate_warnings": [
+                "./results/f7/bb/d44fbd316338550aed4e1c1a8fc6/vo.xml:13:0: W22: The DEFINITIONS element is deprecated in VOTable 1.1.  Ignoring"
+            ], 
+            "validate_xmllint": true, 
+            "validate_xmllint_content": "./results/f7/bb/d44fbd316338550aed4e1c1a8fc6/vo.xml validates\n", 
+            "version": "27-Oct-1998", 
+            "waveband": "#Optical#"
+        }
+    }
+}
\ No newline at end of file
diff --git a/astropy/vo/validator/tests/data/conesearch_good_subset.json b/astropy/vo/validator/tests/data/conesearch_good_subset.json
new file mode 100644
index 0000000..29f5ba8
--- /dev/null
+++ b/astropy/vo/validator/tests/data/conesearch_good_subset.json
@@ -0,0 +1,47 @@
+{
+    "__version__": 1, 
+    "catalogs": {
+        "The USNO-A2.0 Catalogue (Monet+ 1998) 1": {
+            "capabilityClass": "ConeSearch", 
+            "capabilityStandardID": "ivo://ivoa.net/std/ConeSearch", 
+            "capabilityValidationLevel": "", 
+            "contentLevel": "#Research#", 
+            "description": "USNO-A2.0 is a catalog of 526,280,881 stars, and is based on a re-reduction of the Precision Measuring Machine (PMM) scans that were the basis for the USNO-A1.0 catalog. The major difference between A2.0 and A1.0 is that A1.0 used the Guide Star Catalog (Lasker et al. 1986, see Cat. <I/220>) as its reference frame whereas A2.0 uses the ICRF as realized by the USNO ACT catalog (Urban et al. 1997, see Cat. II/246>). A2.0 presents right ascension and dec [...]
+            "duplicatesIgnored": 0, 
+            "identifier": "ivo://CDS.VizieR/I/252#out", 
+            "interfaceClass": "ParamHTTP", 
+            "interfaceRole": "std?", 
+            "interfaceVersion": "", 
+            "maxRadius": 180.0, 
+            "maxRecords": 9999, 
+            "publisher": "CDS", 
+            "publisherID": "ivo://CDS", 
+            "referenceURL": "http://cdsarc.u-strasbg.fr/cgi-bin/Cat?I/252", 
+            "regionOfRegard": NaN, 
+            "resourceID": "ivo://CDS.VizieR/I/252", 
+            "shortName": "I/252", 
+            "subject": "#Positional_Data#", 
+            "tags": "Catalog", 
+            "title": "The USNO-A2.0 Catalogue (Monet+ 1998)", 
+            "type": "#Catalog#", 
+            "updated": "2011-09-14T20:20:21", 
+            "url": "http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/252/out&", 
+            "validate_expected": "good", 
+            "validate_network_error": null, 
+            "validate_nexceptions": 0, 
+            "validate_nwarnings": 1, 
+            "validate_out_db_name": "good", 
+            "validate_version": "1.1", 
+            "validate_warning_types": [
+                "W22"
+            ], 
+            "validate_warnings": [
+                "/eng/ssb/web/astrolib/vo_databases/daily_20121203/results/57/4f/1898273d7498efddc5a3544da882/vo.xml:13:0: W22: The DEFINITIONS element is deprecated in VOTable 1.1.  Ignoring"
+            ], 
+            "validate_xmllint": true, 
+            "validate_xmllint_content": "/eng/ssb/web/astrolib/vo_databases/daily_20121203/results/57/4f/1898273d7498efddc5a3544da882/vo.xml validates\n", 
+            "version": "27-Oct-1998", 
+            "waveband": "#Optical#"
+        }
+    }
+}
\ No newline at end of file
diff --git a/astropy/vo/validator/tests/data/conesearch_warn.json b/astropy/vo/validator/tests/data/conesearch_warn.json
new file mode 100644
index 0000000..bef15e7
--- /dev/null
+++ b/astropy/vo/validator/tests/data/conesearch_warn.json
@@ -0,0 +1,4 @@
+{
+    "__version__": 1, 
+    "catalogs": {}
+}
\ No newline at end of file
diff --git a/astropy/vo/validator/tests/data/listcats1.out b/astropy/vo/validator/tests/data/listcats1.out
new file mode 100644
index 0000000..9ed1440
--- /dev/null
+++ b/astropy/vo/validator/tests/data/listcats1.out
@@ -0,0 +1,10 @@
+HST Guide Star Catalog 2.3 1
+http://gsss.stsci.edu/webservices/vo/ConeSearch.aspx?CAT=GSC23&
+W48,W50
+./results/0b/1a/daefc22180f34be9334262a5d8c5/vo.xml:136:0: W50: Invalid unit string 'pixel'
+./results/0b/1a/daefc22180f34be9334262a5d8c5/vo.xml:155:0: W48: Unknown attribute 'nrows' on TABLEDATA
+
+The USNO-A2.0 Catalogue (Monet+ 1998) 1
+http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/252/out&
+W22
+./results/f7/bb/d44fbd316338550aed4e1c1a8fc6/vo.xml:13:0: W22: The DEFINITIONS element is deprecated in VOTable 1.1.  Ignoring
diff --git a/astropy/vo/validator/tests/data/listcats2.out b/astropy/vo/validator/tests/data/listcats2.out
new file mode 100644
index 0000000..70dfd91
--- /dev/null
+++ b/astropy/vo/validator/tests/data/listcats2.out
@@ -0,0 +1,5 @@
+HST Guide Star Catalog 2.3 1
+http://gsss.stsci.edu/webservices/vo/ConeSearch.aspx?CAT=GSC23&
+
+The USNO-A2.0 Catalogue (Monet+ 1998) 1
+http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/252/out&
diff --git a/astropy/vo/validator/tests/data/printcat.out b/astropy/vo/validator/tests/data/printcat.out
new file mode 100644
index 0000000..8e87280
--- /dev/null
+++ b/astropy/vo/validator/tests/data/printcat.out
@@ -0,0 +1,44 @@
+{
+    "capabilityClass": "ConeSearch", 
+    "capabilityStandardID": "ivo://ivoa.net/std/ConeSearch", 
+    "capabilityValidationLevel": "", 
+    "contentLevel": "#Research#", 
+    "description": "USNO-A2.0 is a catalog of 526,280,881 stars, and is based on a re-reduction of the Precision Measuring Machine (PMM) scans that were the basis for the USNO-A1.0 catalog. The major difference between A2.0 and A1.0 is that A1.0 used the Guide Star Catalog (Lasker et al. 1986, see Cat. <I/220>) as its reference frame whereas A2.0 uses the ICRF as realized by the USNO ACT catalog (Urban et al. 1997, see Cat. II/246>). A2.0 presents right ascension and declination [...]
+    "duplicatesIgnored": 0, 
+    "identifier": "ivo://CDS.VizieR/I/252#out", 
+    "interfaceClass": "ParamHTTP", 
+    "interfaceRole": "std?", 
+    "interfaceVersion": "", 
+    "maxRadius": 180.0, 
+    "maxRecords": 9999, 
+    "publisher": "CDS", 
+    "publisherID": "ivo://CDS", 
+    "referenceURL": "http://cdsarc.u-strasbg.fr/cgi-bin/Cat?I/252", 
+    "regionOfRegard": NaN, 
+    "resourceID": "ivo://CDS.VizieR/I/252", 
+    "shortName": "I/252", 
+    "subject": "#Positional_Data#", 
+    "tags": "Catalog", 
+    "title": "The USNO-A2.0 Catalogue (Monet+ 1998)", 
+    "type": "#Catalog#", 
+    "updated": "2011-09-14T20:20:21", 
+    "url": "http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/252/out&", 
+    "validate_expected": "good", 
+    "validate_network_error": null, 
+    "validate_nexceptions": 0, 
+    "validate_nwarnings": 1, 
+    "validate_out_db_name": "good", 
+    "validate_version": "1.1", 
+    "validate_warning_types": [
+        "W22"
+    ], 
+    "validate_warnings": [
+        "./results/f7/bb/d44fbd316338550aed4e1c1a8fc6/vo.xml:13:0: W22: The DEFINITIONS element is deprecated in VOTable 1.1.  Ignoring"
+    ], 
+    "validate_xmllint": true, 
+    "validate_xmllint_content": "./results/f7/bb/d44fbd316338550aed4e1c1a8fc6/vo.xml validates\n", 
+    "version": "27-Oct-1998", 
+    "waveband": "#Optical#"
+}
+
+Found in good
diff --git a/astropy/vo/validator/tests/data/tally.out b/astropy/vo/validator/tests/data/tally.out
new file mode 100644
index 0000000..1f67d3d
--- /dev/null
+++ b/astropy/vo/validator/tests/data/tally.out
@@ -0,0 +1,5 @@
+good: 2 catalog(s)
+warn: 0 catalog(s)
+exception: 0 catalog(s)
+error: 0 catalog(s)
+total: 2 catalog(s)
diff --git a/astropy/vo/validator/tests/data/vao_conesearch_sites_121107_subset.xml b/astropy/vo/validator/tests/data/vao_conesearch_sites_121107_subset.xml
new file mode 100644
index 0000000..7a05605
--- /dev/null
+++ b/astropy/vo/validator/tests/data/vao_conesearch_sites_121107_subset.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<VOTABLE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.ivoa.net/xml/VOTable/v1.1" version="1.1">
+  <RESOURCE>
+    <TABLE>
+      <FIELD ID="tags" datatype="char" name="categories" arraysize="*"/>
+      <FIELD ID="shortName" datatype="char" name="shortName" arraysize="*"/>
+      <FIELD ID="title" datatype="char" name="title" arraysize="*"/>
+      <FIELD ID="description" datatype="char" name="description" arraysize="*"/>
+      <FIELD ID="publisher" datatype="char" name="publisher" arraysize="*"/>
+      <FIELD ID="waveband" datatype="char" name="waveband" arraysize="*"/>
+      <FIELD ID="identifier" datatype="char" name="identifier" ucd="ID_MAIN" arraysize="*"/>
+      <FIELD ID="updated" datatype="char" name="descriptionUpdated" arraysize="*"/>
+      <FIELD ID="subject" datatype="char" name="subject" arraysize="*"/>
+      <FIELD ID="type" datatype="char" name="type" arraysize="*"/>
+      <FIELD ID="contentLevel" datatype="char" name="contentLevel" arraysize="*"/>
+      <FIELD ID="regionOfRegard" unit="arcsec" datatype="float" name="typicalRegionSize"/>
+      <FIELD ID="version" datatype="char" name="version" arraysize="*"/>
+      <FIELD ID="resourceID" datatype="char" name="resourceID" arraysize="*"/>
+      <FIELD ID="capabilityClass" datatype="char" name="capabilityClass" arraysize="*"/>
+      <FIELD ID="capabilityStandardID" datatype="char" name="capabilityStandardID" arraysize="*"/>
+      <FIELD ID="capabilityValidationLevel" datatype="char" name="capabilityValidationLevel" arraysize="*"/>
+      <FIELD ID="interfaceClass" datatype="char" name="interfaceClass" arraysize="*"/>
+      <FIELD ID="interfaceVersion" datatype="char" name="interfaceVersion" arraysize="*"/>
+      <FIELD ID="interfaceRole" datatype="char" name="interfaceRole" arraysize="*"/>
+      <FIELD ID="accessURL" datatype="char" name="accessURL" arraysize="*"/>
+      <FIELD ID="maxRadius" datatype="float" name="maxSearchRadius"/>
+      <FIELD ID="maxRecords" datatype="int" name="maxRecords"/>
+      <FIELD ID="publisherID" datatype="char" name="publisherIdentifier" arraysize="*"/>
+      <FIELD ID="referenceURL" datatype="char" name="referenceURL" arraysize="*"/>
+      <DATA>
+        <TABLEDATA>
+          <TR>
+            <TD>Catalog</TD>
+            <TD>GSC23</TD>
+            <TD>HST Guide Star Catalog 2.3</TD>
+            <TD>The Guide Star Catalog II (GSC-II) is an all-sky optical catalog based on 1" resolution scans of the photographic Sky Survey plates, at two epochs and three bandpasses, from the Palomar and UK Schmidt telescopes. This all-sky catalog will ultimately contains positions, proper motions, classifications, and magnitudes in multiple bandpasses for almost a billion objects down to approximately Jpg=21, Fpg=20. The GSC-II is currently used for HST Bright Object Protection and HS [...]
+            <TD>Space Telescope Science</TD>
+            <TD>#Optical#</TD>
+            <TD>ivo://archive.stsci.edu/gsc/gsc2.3#1</TD>
+            <TD>2012-03-08T20:39:06</TD>
+            <TD>#Surveys#</TD>
+            <TD>#Catalog#</TD>
+            <TD>#Research#</TD>
+            <TD/>
+            <TD>2.3.2</TD>
+            <TD>ivo://archive.stsci.edu/gsc/gsc2.3</TD>
+            <TD>ConeSearch</TD>
+            <TD>ivo://ivoa.net/std/ConeSearch</TD>
+            <TD>2</TD>
+            <TD>ParamHTTP</TD>
+            <TD/>
+            <TD>std?</TD>
+            <TD>http://gsss.stsci.edu/webservices/vo/ConeSearch.aspx?CAT=GSC23&amp;</TD>
+            <TD>1</TD>
+            <TD>1000</TD>
+            <TD/>
+            <TD>http://gsss.stsci.edu/Catalogs/GSC/GSC2/GSC2.htm</TD>
+          </TR>
+          <TR>
+            <TD>Catalog</TD>
+            <TD>I/252</TD>
+            <TD>The USNO-A2.0 Catalogue (Monet+ 1998)</TD>
+            <TD>USNO-A2.0 is a catalog of 526,280,881 stars, and is based on a re-reduction of the Precision Measuring Machine (PMM) scans that were the basis for the USNO-A1.0 catalog. The major difference between A2.0 and A1.0 is that A1.0 used the Guide Star Catalog (Lasker et al. 1986, see Cat. &lt;I/220&gt;) as its reference frame whereas A2.0 uses the ICRF as realized by the USNO ACT catalog (Urban et al. 1997, see Cat. II/246&gt;). A2.0 presents right ascension and dec [...]
+
+This particular record describes access specifically to the "out" table within this catalog through the VO-standard ConeSearch service interface.  It can be used automatically by compliant tools and applications.  Consult the referenceURL for more information about this table.</TD>
+            <TD>CDS</TD>
+            <TD>#Optical#</TD>
+            <TD>ivo://CDS.VizieR/I/252#out</TD>
+            <TD>2011-09-14T20:20:21</TD>
+            <TD>#Positional_Data#</TD>
+            <TD>#Catalog#</TD>
+            <TD>#Research#</TD>
+            <TD/>
+            <TD>27-Oct-1998</TD>
+            <TD>ivo://CDS.VizieR/I/252</TD>
+            <TD>ConeSearch</TD>
+            <TD>ivo://ivoa.net/std/ConeSearch</TD>
+            <TD/>
+            <TD>ParamHTTP</TD>
+            <TD/>
+            <TD>std?</TD>
+            <TD>http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/252/out&amp;</TD>
+            <TD>180</TD>
+            <TD>9999</TD>
+            <TD>ivo://CDS</TD>
+            <TD>http://cdsarc.u-strasbg.fr/cgi-bin/Cat?I/252</TD>
+          </TR>
+        </TABLEDATA>
+      </DATA>
+    </TABLE>
+  </RESOURCE>
+</VOTABLE>
diff --git a/astropy/vo/validator/tests/test_validate.py b/astropy/vo/validator/tests/test_validate.py
new file mode 100644
index 0000000..7e37718
--- /dev/null
+++ b/astropy/vo/validator/tests/test_validate.py
@@ -0,0 +1,154 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""Tests for `astropy.vo.validator`
+
+.. note::
+
+    This test will fail if external URL query status
+    changes. This is beyond the control of AstroPy.
+    When this happens, rerun or update the test.
+
+Examples
+--------
+Running inside Python::
+
+    >>> import astropy
+    >>> astropy.test('vo.validator', remote_data=True)
+
+Running from top level via command line::
+
+    $ python setup.py test -P vo.validator --remote-data
+
+Running from ``astropy/vo/validator/tests`` directory::
+
+    $ setenv ASTROPY_USE_SYSTEM_PYTEST 1
+    $ py.test test_validate.py --remote-data
+
+"""
+# STDLIB
+import json
+import os
+import shutil
+import sys
+import tempfile
+
+# LOCAL
+from .. import inspect, validate
+from ...client.vos_catalog import BASEURL
+from ....tests.helper import pytest, remote_data
+from ....utils.data import _find_pkg_data_path, get_pkg_data_filename
+from ....utils.data import REMOTE_TIMEOUT
+
+
+__doctest_skip__ = ['*']
+
+
+ at remote_data
+class TestConeSearchValidation(object):
+    """Validation on a small subset of Cone Search sites."""
+    def setup_class(self):
+        self.datadir = 'data'
+        self.out_dir = tempfile.mkdtemp()
+        self.filenames = {'good': 'conesearch_good.json',
+                          'warn': 'conesearch_warn.json',
+                          'excp': 'conesearch_exception.json',
+                          'nerr': 'conesearch_error.json'}
+
+        validate.CS_MSTR_LIST.set(get_pkg_data_filename(os.path.join(
+            self.datadir, 'vao_conesearch_sites_121107_subset.xml')))
+
+        REMOTE_TIMEOUT.set(30)
+
+    @pytest.mark.parametrize(('parallel'), [True, False])
+    def test_validation(self, parallel):
+        if os.path.exists(self.out_dir):
+            shutil.rmtree(self.out_dir)
+
+        # For some reason, Python 3.3 does not work
+        # using multiprocessing.Pool and callback function.
+        # See http://bugs.python.org/issue16307
+        try:
+            validate.check_conesearch_sites(
+                destdir=self.out_dir, parallel=parallel, url_list=None)
+        except AssertionError as e:
+            if parallel and sys.version_info >= (3, 3):
+                pytest.xfail('See http://bugs.python.org/issue16307')
+            else:
+                raise
+
+        for val in self.filenames.values():
+            _compare_catnames(get_pkg_data_filename(
+                os.path.join(self.datadir, val)),
+                os.path.join(self.out_dir, val))
+
+    def test_url_list(self):
+        local_outdir = os.path.join(self.out_dir, 'subtmp1')
+        local_list = [
+            'http://www.google.com/foo&',
+            'http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/252/out&']
+        # Same multiprocessing problem in Python 3.3 as above
+        validate.check_conesearch_sites(destdir=local_outdir, parallel=False,
+                                        url_list=local_list)
+        _compare_catnames(get_pkg_data_filename(
+            os.path.join(self.datadir, 'conesearch_good_subset.json')),
+            os.path.join(local_outdir, 'conesearch_good.json'))
+
+    def teardown_class(self):
+        validate.CS_MSTR_LIST.set(validate.CS_MSTR_LIST.defaultvalue)
+        REMOTE_TIMEOUT.set(REMOTE_TIMEOUT.defaultvalue)
+        shutil.rmtree(self.out_dir)
+
+
+class TestConeSearchResults(object):
+    """Inspection of `TestConeSearchValidation` results."""
+    def setup_class(self):
+        self.datadir = 'data'
+        self.out_dir = tempfile.mkdtemp()
+        BASEURL.set(_find_pkg_data_path(self.datadir) + os.sep)
+        self.r = inspect.ConeSearchResults()
+
+    def test_catkeys(self):
+        assert (self.r.catkeys['good'] ==
+                ['HST Guide Star Catalog 2.3 1',
+                 'The USNO-A2.0 Catalogue (Monet+ 1998) 1'])
+        assert self.r.catkeys['warn'] == []
+        assert self.r.catkeys['exception'] == []
+        assert self.r.catkeys['error'] == []
+
+    def gen_cmp(self, func, oname, *args, **kwargs):
+        dat_file = get_pkg_data_filename(os.path.join(self.datadir, oname))
+        out_file = os.path.join(self.out_dir, oname)
+        with open(out_file, 'w') as fout:
+            func(fout=fout, *args, **kwargs)
+
+        with open(dat_file) as f1:
+            with open(out_file) as f2:
+                assert f1.read() == f2.read()
+
+    def test_tally(self):
+        self.gen_cmp(self.r.tally, 'tally.out')
+
+    def test_listcats(self):
+        self.gen_cmp(self.r.list_cats, 'listcats1.out', 'good')
+        self.gen_cmp(self.r.list_cats, 'listcats2.out', 'good',
+                     ignore_noncrit=True)
+
+    def test_printcat(self):
+        self.gen_cmp(self.r.print_cat, 'printcat.out',
+                     'The USNO-A2.0 Catalogue (Monet+ 1998) 1')
+
+    def teardown_class(self):
+        BASEURL.set(BASEURL.defaultvalue)
+        shutil.rmtree(self.out_dir)
+
+
+def _load_catnames(fname):
+    with open(fname, 'r') as fd:
+        js = json.load(fd)
+        cats = sorted(js['catalogs'])
+    return cats
+
+
+def _compare_catnames(fname1, fname2):
+    cat1 = _load_catnames(fname1)
+    cat2 = _load_catnames(fname2)
+    assert cat1 == cat2
diff --git a/astropy/vo/validator/tstquery.py b/astropy/vo/validator/tstquery.py
new file mode 100644
index 0000000..bb27cff
--- /dev/null
+++ b/astropy/vo/validator/tstquery.py
@@ -0,0 +1,73 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""Temporary solution until ``astropy.vo.validator.validate.CS_MSTR_LIST``
+includes ``<testQuery>`` fields.
+
+In case USVO service is unstable, it does the following:
+
+    #. Try USVO production server.
+    #. If fails, try USVO test server (has latest bug fix, but does not
+       contain all registered services).
+    #. If fails, use RA=0 DEC=0 SR=1.
+
+"""
+from __future__ import print_function, division
+
+# STDLIB
+from xml.dom import minidom
+
+# LOCAL
+from ...logger import log
+from ...utils import OrderedDict  # For 2.6 compatibility
+from ...utils.data import get_readable_fileobj
+
+
+def parse_cs(id):
+    """Return ``<testQuery>`` pars as dict for given Resource ID."""
+    if isinstance(id, bytes):  # pragma: py3
+        id = id.decode('ascii')
+
+    # Production server.
+    url = 'http://vao.stsci.edu/directory/getRecord.aspx?' \
+        'id={0}&format=xml'.format(id)
+
+    # Test server (in case production server fails).
+    backup_url = 'http://vaotest.stsci.edu/directory/getRecord.aspx?' \
+        'id={0}&format=xml'.format(id)
+
+    tqp = ['ra', 'dec', 'sr']
+    d = OrderedDict()
+    urls_failed = False
+    urls_errmsg = ''
+
+    try:
+        with get_readable_fileobj(url, encoding='binary',
+                                  show_progress=False) as fd:
+            dom = minidom.parse(fd)
+    except Exception as e: # pragma: no cover
+        try:
+            log.warn('{0} raised {1}, trying {2}'.format(
+                    url, str(e), backup_url))
+            with get_readable_fileobj(backup_url, encoding='binary',
+                                      show_progress=False) as fd:
+                dom = minidom.parse(fd)
+        except Exception as e:
+            urls_failed = True
+            urls_errmsg = '{0} raised {1}, using default'.format(
+                    backup_url, str(e))
+
+    if not urls_failed:
+        tq = dom.getElementsByTagName('testQuery')
+        if tq:
+            for key in tqp:
+                d[key.upper()] = tq[0].getElementsByTagName(
+                    key)[0].firstChild.nodeValue.strip()
+        else: # pragma: no cover
+            urls_failed = True
+            urls_errmsg = 'No testQuery found for {0}, using default'.format(id)
+
+    # If no testQuery found, use RA=0 DEC=0 SR=1
+    if urls_failed:  # pragma: no cover
+        d = OrderedDict({'RA': '0', 'DEC': '0', 'SR': '1'})
+        log.warn(urls_errmsg)
+
+    return d
diff --git a/astropy/vo/validator/validate.py b/astropy/vo/validator/validate.py
new file mode 100644
index 0000000..14f660f
--- /dev/null
+++ b/astropy/vo/validator/validate.py
@@ -0,0 +1,384 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""Validate VO Services."""
+from __future__ import print_function, division
+
+# STDLIB
+import json
+import multiprocessing
+import os
+import time
+import warnings
+
+from collections import defaultdict
+from copy import deepcopy
+
+# THIRD PARTY
+import numpy as np
+
+# LOCAL
+from ..client import vos_catalog
+from ...config.configuration import ConfigurationItem
+from ...io import votable
+from ...io.votable.exceptions import E19
+from ...io.votable.validator import html, result
+from ...logger import log
+from ...utils.data import get_readable_fileobj, get_pkg_data_contents
+from ...utils.data import REMOTE_TIMEOUT
+from ...utils.misc import JsonCustomEncoder
+from ...utils.xml.unescaper import unescape_all
+from ...utils.exceptions import AstropyUserWarning
+
+# Temporary solution until STScI VAO registry formally provides
+# <testQuery> tags
+from .tstquery import parse_cs
+
+
+__all__ = ['check_conesearch_sites']
+
+CS_MSTR_LIST = ConfigurationItem(
+    'cs_mstr_list',
+    'http://vao.stsci.edu/directory/NVORegInt.asmx/VOTCapabilityPredOpt?'
+    'predicate=1%3D1&capability=conesearch&VOTStyleOption=2',
+    'Cone Search services master list for validation.')
+
+CS_URLS = ConfigurationItem(
+    'cs_urls',
+    get_pkg_data_contents(
+        os.path.join('data', 'conesearch_urls.txt')).split(),
+    'Only check these Cone Search URLs.',
+    'list')
+
+NONCRIT_WARNINGS = ConfigurationItem(
+    'noncrit_warnings',
+    ['W03', 'W06', 'W07', 'W09', 'W10', 'W15', 'W17', 'W20', 'W21', 'W22',
+     'W27', 'W28', 'W29', 'W41', 'W42', 'W48', 'W50'],
+    'VO Table warning codes that are considered non-critical',
+    'list')
+
+_OUT_ROOT = None  # Set by `check_conesearch_sites`
+
+
+def check_conesearch_sites(destdir=os.curdir, verbose=True, parallel=True,
+                           url_list=CS_URLS()):
+    """Validate Cone Search Services.
+
+    .. note::
+
+        URLs are unescaped prior to validation.
+
+        Only check queries with ``<testQuery>`` parameters.
+        Does not perform meta-data and erroneous queries.
+
+    Parameters
+    ----------
+    destdir : str
+        Directory to store output files. Will be created if does
+        not exist. Existing files with these names will be deleted
+        or replaced:
+
+            * conesearch_good.json
+            * conesearch_warn.json
+            * conesearch_exception.json
+            * conesearch_error.json
+
+    verbose : bool
+        Print extra info to log.
+
+    parallel : bool
+        Enable multiprocessing.
+
+    url_list : list of string
+        Only check these access URLs against
+        ``astropy.vo.validator.validate.CS_MSTR_LIST`` and ignore the others,
+        which will not appear in output files.
+        By default, check those in ``astropy.vo.validator.validate.CS_URLS``.
+        If `None`, check everything.
+
+    Raises
+    ------
+    AssertionError
+        Parameter failed assertion test.
+
+    IOError
+        Invalid destination directory.
+
+    timeout
+        URL request timed out.
+
+    """
+    global _OUT_ROOT
+
+    # Start timer
+    t_beg = time.time()
+
+    if (not isinstance(destdir, basestring) or len(destdir) == 0 or
+            os.path.exists(destdir) and not os.path.isdir(destdir)):
+        raise IOError('Invalid destination directory')  # pragma: no cover
+
+    if not os.path.exists(destdir):
+        os.mkdir(destdir)
+
+    # Output dir created by votable.validator
+    _OUT_ROOT = os.path.join(destdir, 'results')
+
+    if not os.path.exists(_OUT_ROOT):
+        os.mkdir(_OUT_ROOT)
+
+    # Output files
+    db_file = {}
+    db_file['good'] = os.path.join(destdir, 'conesearch_good.json')
+    db_file['warn'] = os.path.join(destdir, 'conesearch_warn.json')
+    db_file['excp'] = os.path.join(destdir, 'conesearch_exception.json')
+    db_file['nerr'] = os.path.join(destdir, 'conesearch_error.json')
+
+    # JSON dictionaries for output files
+    js_template = {'__version__': 1, 'catalogs': {}}
+    js_mstr = deepcopy(js_template)
+    js_tree = {}
+    for key in db_file:
+        js_tree[key] = deepcopy(js_template)
+
+        # Delete existing files, if any, to be on the safe side.
+        # Else can cause confusion if program exited prior to
+        # new files being written but old files are still there.
+        if os.path.exists(db_file[key]):  # pragma: no cover
+            os.remove(db_file[key])
+            if verbose:
+                log.info('Existing file {0} deleted'.format(db_file[key]))
+
+    # Get all Cone Search sites
+    with get_readable_fileobj(CS_MSTR_LIST(), encoding='binary',
+                              show_progress=verbose) as fd:
+        tab_all = votable.parse_single_table(fd, pedantic=False)
+    arr_cone = tab_all.array.data[np.where(
+        tab_all.array['capabilityClass'] == b'ConeSearch')]
+
+    assert arr_cone.size > 0, \
+        'astropy.vo.validator.validate.CS_MSTR_LIST yields no valid result'
+
+    fixed_urls = [unescape_all(cur_url) for cur_url in arr_cone['accessURL']]
+    uniq_urls = set(fixed_urls)
+
+    if url_list is None:
+        url_list = uniq_urls
+    else:
+        tmp_list = [cur_url.encode('utf-8') if isinstance(cur_url, str)
+                    else cur_url for cur_url in set(url_list)]
+        url_list = [unescape_all(cur_url) for cur_url in tmp_list]
+
+        if verbose:
+            log.info('Only {0}/{1} site(s) are validated'.format(
+                len(url_list), len(uniq_urls)))
+
+    uniq_rows = len(url_list)
+
+    # Re-structure dictionary for JSON file
+
+    col_names = tab_all.array.dtype.names
+    title_counter = defaultdict(int)
+    key_lookup_by_url = {}
+
+    for cur_url in url_list:
+        num_match = fixed_urls.count(cur_url)
+
+        if num_match == 0:
+            warnings.warn('{0} not found in cs_mstr_list! Skipping...'.format(cur_url),
+                          AstropyUserWarning)
+            continue
+
+        i = fixed_urls.index(cur_url)
+        n_ignored = num_match - 1
+        row_d = {'duplicatesIgnored': n_ignored}
+        if verbose and n_ignored > 0:  # pragma: no cover
+            log.info('{0} has {1} ignored duplicate entries in '
+                     'cs_mstr_list'.format(cur_url, n_ignored))
+
+        cur_title = arr_cone[i]['title']
+        title_counter[cur_title] += 1
+
+        if isinstance(cur_title, bytes):  # pragma: py3
+            cat_key = '{0} {1}'.format(cur_title.decode('ascii'),
+                                       title_counter[cur_title])
+        else:  # pragma: py2
+            cat_key = '{0} {1}'.format(cur_title, title_counter[cur_title])
+
+        for col in col_names:
+            if col == 'accessURL':
+                row_d['url'] = fixed_urls[i]
+            else:
+                row_d[col] = arr_cone[i][col]
+
+        # Use testQuery to return non-empty VO table
+        testquery_pars = parse_cs(arr_cone[i]['resourceID'])
+        cs_pars_arr = ['='.join([key, testquery_pars[key]]).encode('utf-8')
+                       for key in testquery_pars]
+
+        # Max verbosity
+        cs_pars_arr += [b'VERB=3']
+        js_mstr['catalogs'][cat_key] = row_d
+        key_lookup_by_url[cur_url + b'&'.join(cs_pars_arr)] = cat_key
+
+    # Validate URLs
+
+    all_urls = key_lookup_by_url.keys()
+
+    if parallel:
+        mp_list = []
+        pool = multiprocessing.Pool()
+        mp_proc = pool.map_async(_do_validation, all_urls,
+                                 callback=mp_list.append)
+        mp_proc.wait()
+        assert len(mp_list) > 0, \
+            'Multiprocessing pool callback returned empty list'
+        mp_list = mp_list[0]
+
+    else:
+        mp_list = [_do_validation(cur_url) for cur_url in all_urls]
+
+    # Categorize validation results
+    for r in mp_list:
+        db_key = r['out_db_name']
+        cat_key = key_lookup_by_url[r.url]
+        js_tree[db_key]['catalogs'][cat_key] = js_mstr['catalogs'][cat_key]
+        _copy_r_to_db(r, js_tree[db_key]['catalogs'][cat_key])
+
+    # Write to HTML
+
+    html_subsets = result.get_result_subsets(mp_list, _OUT_ROOT)
+    html.write_index(html_subsets, all_urls, _OUT_ROOT)
+
+    if parallel:
+        html_subindex_args = [(html_subset, uniq_rows)
+                              for html_subset in html_subsets]
+        mp_proc = pool.map_async(_html_subindex, html_subindex_args)
+        mp_proc.wait()
+
+    else:
+        for html_subset in html_subsets:
+            _html_subindex((html_subset, uniq_rows))
+
+    # Write to JSON
+    n = {}
+    n_tot = 0
+    for key in db_file:
+        n[key] = len(js_tree[key]['catalogs'])
+        n_tot += n[key]
+        if verbose:
+            log.info('{0}: {1} catalog(s)'.format(key, n[key]))
+        with open(db_file[key], 'w') as f_json:
+            f_json.write(json.dumps(js_tree[key], cls=JsonCustomEncoder,
+                                    sort_keys=True, indent=4))
+
+    # End timer
+    t_end = time.time()
+
+    if verbose:
+        log.info('total: {0} catalog(s)'.format(n_tot))
+        log.info('Validation of {0} site(s) took {1:.3f} s'.format(
+            uniq_rows, t_end - t_beg))
+
+    if n['good'] == 0:  # pragma: no cover
+        warnings.warn('No good sites available for Cone Search.', AstropyUserWarning)
+
+
+def _do_validation(url):
+    """Validation for multiprocessing support."""
+    votable.table.reset_vo_warnings()
+
+    r = result.Result(url, root=_OUT_ROOT, timeout=REMOTE_TIMEOUT())
+    r.validate_vo()
+
+    _categorize_result(r)
+
+    # This was already checked above.
+    # Calling this again to get VOTableFile object to catch
+    # well-formed error responses in downloaded XML.
+    #
+    # 'incorrect' is also added in case user wants to use
+    # 'conesearch_warn.json' anyway.
+    #
+    # If using cached data, it will not detect network error
+    # like the first run, but will raise exception.
+    #
+    # When SR is not 0, VOSError is raised for empty table.
+    #
+    if r['expected'] in ('good', 'incorrect') and r['nexceptions'] == 0:
+        nexceptions = 0
+        nwarnings = 0
+        lines = []
+
+        with warnings.catch_warnings(record=True) as warning_lines:
+            try:
+                tab = vos_catalog.vo_tab_parse(votable.table.parse(
+                    r.get_vo_xml_path(), pedantic=False), r.url, {})
+            except (E19, IndexError, vos_catalog.VOSError) as e:  # pragma: no cover
+                lines.append(str(e))
+                nexceptions += 1
+        lines = [str(x.message) for x in warning_lines] + lines
+
+        warning_types = set()
+        for line in lines:  # pragma: no cover
+            w = votable.exceptions.parse_vowarning(line)
+            if w['is_warning']:
+                nwarnings += 1
+            if w['is_exception']:
+                nexceptions += 1
+            warning_types.add(w['warning'])
+
+        r['nwarnings'] += nwarnings
+        r['nexceptions'] += nexceptions
+        r['warnings'] += lines
+        r['warning_types'] = r['warning_types'].union(warning_types)
+
+        _categorize_result(r)
+
+    html.write_result(r)
+    return r
+
+
+def _categorize_result(r):
+    """Set success codes.
+
+    Parameters
+    ----------
+    r : `astropy.io.votable.validator.result.Result` object
+
+    """
+    if 'network_error' in r and r['network_error'] is not None:  # pragma: no cover
+        r['out_db_name'] = 'nerr'
+        r['expected'] = 'broken'
+    elif ((r['nexceptions'] == 0 and r['nwarnings'] == 0) or
+            r['warning_types'].issubset(NONCRIT_WARNINGS())):
+        r['out_db_name'] = 'good'
+        r['expected'] = 'good'
+    elif r['nexceptions'] > 0:  # pragma: no cover
+        r['out_db_name'] = 'excp'
+        r['expected'] = 'incorrect'
+    elif r['nwarnings'] > 0:  # pragma: no cover
+        r['out_db_name'] = 'warn'
+        r['expected'] = 'incorrect'
+    else:  # pragma: no cover
+        raise vos_catalog.VOSError(
+            'Unhandled validation result attributes: '
+            '{0}'.format(r._attributes))
+
+
+def _html_subindex(args):
+    """HTML writer for multiprocessing support."""
+    subset, total = args
+    html.write_index_table(_OUT_ROOT, *subset, total=total)
+
+
+def _copy_r_to_db(r, db):
+    """Copy validation result attributes to given JSON database entry.
+
+    Parameters
+    ----------
+    r : `astropy.io.votable.validate.result.Result` object
+
+    db : dict
+
+    """
+    for key in r._attributes:
+        new_key = 'validate_' + key
+        db[new_key] = r._attributes[key]
diff --git a/astropy/wcs/_docutil.py b/astropy/wcs/_docutil.py
index 8514bd6..e380433 100644
--- a/astropy/wcs/_docutil.py
+++ b/astropy/wcs/_docutil.py
@@ -3,7 +3,7 @@
 astropy.wcs-specific utilities for generating boilerplate in docstrings.
 """
 
-from __future__ import division  # confidence high
+from __future__ import absolute_import, division, print_function, unicode_literals
 
 
 __all__ = ['TWO_OR_THREE_ARGS', 'RETURNS', 'ORIGIN', 'RA_DEC_ORDER']
diff --git a/astropy/wcs/docstrings.py b/astropy/wcs/docstrings.py
index e7ca9ca..2a28804 100644
--- a/astropy/wcs/docstrings.py
+++ b/astropy/wcs/docstrings.py
@@ -1,14 +1,5 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from __future__ import division  # confidence high
-# We don't want the "division" symbol in the namespace, since it
-# should have only docstrings
-try:
-    del division
-except NameError:
-    # When building the configuration defaults in 3.x, the ``del division`` line
-    # throws a NameError because for some reason it seems to think it's already
-    # deleted.  This works around that.
-    pass
+from __future__ import absolute_import, division, print_function, unicode_literals
 
 # It gets to be really tedious to type long docstrings in ANSI C
 # syntax (since multi-line string literals are not valid).
@@ -1735,7 +1726,7 @@ vice versa.
 
 Parameters
 ----------
-ctype : string
+ctype : str
     Required spectral ``CTYPEia``, maximum of 8 characters.  The first
     four characters are required to be given and are never modified.
     The remaining four, the algorithm code, are completely determined
@@ -2019,17 +2010,17 @@ like ``"log (m ** 2)"`` which is formally disallowed.
 Parameters
 ----------
 
-have : string
+have : str
     FITS unit string to convert from, with or without surrounding
     square brackets (for inline specifications); text following the
     closing bracket is ignored.
 
-want : string
+want : str
     FITS unit string to convert to, with or without surrounding square
     brackets (for inline specifications); text following the closing
     bracket is ignored.
 
-ctrl : string, optional
+ctrl : str, optional
     Do potentially unsafe translations of non-standard unit strings.
 
     Although ``\"S\"`` is commonly used to represent seconds, its
@@ -2099,7 +2090,7 @@ whitespace.
 
 Parameters
 ----------
-translate_units : string, optional
+translate_units : str, optional
     Do potentially unsafe translations of non-standard unit strings.
 
     Although ``\"S\"`` is commonly used to represent seconds, its
@@ -2200,7 +2191,7 @@ Parameters
 header : An `astropy.io.fits.Header`, string, or `None`.
   If ``None``, the object will be initialized to default values.
 
-key : string, optional
+key : str, optional
     The key referring to a particular WCS transform in the header.
     This may be either ``' '`` or ``'A'``-``'Z'`` and corresponds to
     the ``\"a\"`` part of ``\"CTYPEia\"``.  (*key* may only be
@@ -2265,3 +2256,62 @@ zsource = """
 
 An undefined value is represented by NaN.
 """
+
+WcsError = """
+Base class of all invalid WCS errors.
+"""
+
+SingularMatrix = """
+SingularMatrixError()
+
+The linear transformation matrix is singular.
+"""
+
+InconsistentAxisTypes = """
+InconsistentAxisTypesError()
+
+The WCS header inconsistent or unrecognized coordinate axis type(s).
+"""
+
+InvalidTransform = """
+InvalidTransformError()
+
+The WCS transformation is invalid, or the transformation parameters
+are invalid.
+"""
+
+InvalidCoordinate = """
+InvalidCoordinateError()
+
+One or more of the world coordinates is invalid.
+"""
+
+NoSolution = """
+NoSolutionError()
+
+No solution can be found in the given interval.
+"""
+
+InvalidSubimageSpecification = """
+InvalidSubimageSpecificationError()
+
+The subimage specification is invalid.
+"""
+
+NonseparableSubimageCoordinateSystem = """
+NonseparableSubimageCoordinateSystemError()
+
+Non-separable subimage coordinate system.
+"""
+
+NoWcsKeywordsFound = """
+NoWcsKeywordsFoundError()
+
+No WCS keywords were found in the given header.
+"""
+
+InvalidTabularParameters = """
+InvalidTabularParametersError()
+
+The given tabular parameters are invalid.
+"""
diff --git a/astropy/wcs/include/astropy_wcs.h b/astropy/wcs/include/astropy_wcs/astropy_wcs.h
similarity index 100%
rename from astropy/wcs/include/astropy_wcs.h
rename to astropy/wcs/include/astropy_wcs/astropy_wcs.h
diff --git a/astropy/wcs/include/astropy_wcs_api.h b/astropy/wcs/include/astropy_wcs/astropy_wcs_api.h
similarity index 100%
copy from astropy/wcs/include/astropy_wcs_api.h
copy to astropy/wcs/include/astropy_wcs/astropy_wcs_api.h
diff --git a/astropy/wcs/include/distortion.h b/astropy/wcs/include/astropy_wcs/distortion.h
similarity index 100%
rename from astropy/wcs/include/distortion.h
rename to astropy/wcs/include/astropy_wcs/distortion.h
diff --git a/astropy/wcs/include/distortion_wrap.h b/astropy/wcs/include/astropy_wcs/distortion_wrap.h
similarity index 100%
rename from astropy/wcs/include/distortion_wrap.h
rename to astropy/wcs/include/astropy_wcs/distortion_wrap.h
diff --git a/astropy/wcs/include/docstrings.h b/astropy/wcs/include/astropy_wcs/docstrings.h
similarity index 88%
rename from astropy/wcs/include/docstrings.h
rename to astropy/wcs/include/astropy_wcs/docstrings.h
index 6dd0b6f..e7c75e6 100644
--- a/astropy/wcs/include/docstrings.h
+++ b/astropy/wcs/include/astropy_wcs/docstrings.h
@@ -13,13 +13,23 @@ void fill_docstrings(void);
 #endif
 
 extern char doc_DistortionLookupTable[374];
+extern char doc_InconsistentAxisTypes[100];
+extern char doc_InvalidCoordinate[76];
+extern char doc_InvalidSubimageSpecification[77];
+extern char doc_InvalidTabularParameters[76];
+extern char doc_InvalidTransform[107];
 extern char doc_K[202];
 extern char doc_M[56];
+extern char doc_NoSolution[68];
+extern char doc_NoWcsKeywordsFound[76];
+extern char doc_NonseparableSubimageCoordinateSystem[88];
+extern char doc_SingularMatrix[70];
 extern char doc_Sip[1040];
 extern char doc_Tabprm[234];
-extern char doc_UnitConverter[2358];
+extern char doc_UnitConverter[2349];
 extern char doc_Wcs[513];
-extern char doc_Wcsprm[2091];
+extern char doc_WcsError[39];
+extern char doc_Wcsprm[2088];
 extern char doc_Wtbarr[202];
 extern char doc_a[264];
 extern char doc_a_order[60];
@@ -132,7 +142,7 @@ extern char doc_sip_pix2foc[649];
 extern char doc_spcfix[272];
 extern char doc_spec[68];
 extern char doc_specsys[145];
-extern char doc_sptr[1373];
+extern char doc_sptr[1370];
 extern char doc_ssysobs[253];
 extern char doc_ssyssrc[150];
 extern char doc_sub[3436];
@@ -140,7 +150,7 @@ extern char doc_tab[112];
 extern char doc_theta0[289];
 extern char doc_to_header[2229];
 extern char doc_ttype[108];
-extern char doc_unitfix[1050];
+extern char doc_unitfix[1047];
 extern char doc_velangl[186];
 extern char doc_velosys[316];
 extern char doc_want[173];
diff --git a/astropy/wcs/include/isnan.h b/astropy/wcs/include/astropy_wcs/isnan.h
similarity index 100%
rename from astropy/wcs/include/isnan.h
rename to astropy/wcs/include/astropy_wcs/isnan.h
diff --git a/astropy/wcs/include/pipeline.h b/astropy/wcs/include/astropy_wcs/pipeline.h
similarity index 100%
rename from astropy/wcs/include/pipeline.h
rename to astropy/wcs/include/astropy_wcs/pipeline.h
diff --git a/astropy/wcs/include/pyutil.h b/astropy/wcs/include/astropy_wcs/pyutil.h
similarity index 99%
rename from astropy/wcs/include/pyutil.h
rename to astropy/wcs/include/astropy_wcs/pyutil.h
index a0ecec0..7ca08f2 100644
--- a/astropy/wcs/include/pyutil.h
+++ b/astropy/wcs/include/astropy_wcs/pyutil.h
@@ -190,9 +190,9 @@ get_string(
     const char* value) {
 
   #if PY3K
-  return PyBytes_FromString(value);
+  return PyUnicode_FromString(value);
   #else
-  return PyString_FromString(value);
+  return PyBytes_FromString(value);
   #endif
 }
 
diff --git a/astropy/wcs/include/sip.h b/astropy/wcs/include/astropy_wcs/sip.h
similarity index 100%
rename from astropy/wcs/include/sip.h
rename to astropy/wcs/include/astropy_wcs/sip.h
diff --git a/astropy/wcs/include/sip_wrap.h b/astropy/wcs/include/astropy_wcs/sip_wrap.h
similarity index 100%
rename from astropy/wcs/include/sip_wrap.h
rename to astropy/wcs/include/astropy_wcs/sip_wrap.h
diff --git a/astropy/wcs/include/str_list_proxy.h b/astropy/wcs/include/astropy_wcs/str_list_proxy.h
similarity index 100%
rename from astropy/wcs/include/str_list_proxy.h
rename to astropy/wcs/include/astropy_wcs/str_list_proxy.h
diff --git a/astropy/wcs/include/unit_list_proxy.h b/astropy/wcs/include/astropy_wcs/unit_list_proxy.h
similarity index 100%
rename from astropy/wcs/include/unit_list_proxy.h
rename to astropy/wcs/include/astropy_wcs/unit_list_proxy.h
diff --git a/astropy/wcs/include/util.h b/astropy/wcs/include/astropy_wcs/util.h
similarity index 100%
rename from astropy/wcs/include/util.h
rename to astropy/wcs/include/astropy_wcs/util.h
diff --git a/astropy/wcs/include/astropy_wcs/wcsconfig.h b/astropy/wcs/include/astropy_wcs/wcsconfig.h
new file mode 100644
index 0000000..490efd4
--- /dev/null
+++ b/astropy/wcs/include/astropy_wcs/wcsconfig.h
@@ -0,0 +1,35 @@
+
+    /* WCSLIB library version number. */
+    #define WCSLIB_VERSION 4.10
+
+    /* 64-bit integer data type. */
+    #define WCSLIB_INT64 long long int
+
+    /* Windows needs some other defines to prevent inclusion of wcsset()
+       which conflicts with wcslib's wcsset().  These need to be set
+       on code that *uses* astropy.wcs, in addition to astropy.wcs itself.
+       */
+    #if defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) || defined (__MINGW64__)
+
+    #ifndef YY_NO_UNISTD_H
+    #define YY_NO_UNISTD_H
+    #endif
+
+    #ifndef _CRT_SECURE_NO_WARNINGS
+    #define _CRT_SECURE_NO_WARNINGS
+    #endif
+
+    #ifndef _NO_OLDNAMES
+    #define _NO_OLDNAMES
+    #endif
+
+    #ifndef NO_OLDNAMES
+    #define NO_OLDNAMES
+    #endif
+
+    #ifndef __STDC__
+    #define __STDC__ 1
+    #endif
+
+    #endif
+    
\ No newline at end of file
diff --git a/astropy/wcs/include/wcslib_tabprm_wrap.h b/astropy/wcs/include/astropy_wcs/wcslib_tabprm_wrap.h
similarity index 100%
rename from astropy/wcs/include/wcslib_tabprm_wrap.h
rename to astropy/wcs/include/astropy_wcs/wcslib_tabprm_wrap.h
diff --git a/astropy/wcs/include/wcslib_units_wrap.h b/astropy/wcs/include/astropy_wcs/wcslib_units_wrap.h
similarity index 100%
rename from astropy/wcs/include/wcslib_units_wrap.h
rename to astropy/wcs/include/astropy_wcs/wcslib_units_wrap.h
diff --git a/astropy/wcs/include/wcslib_wrap.h b/astropy/wcs/include/astropy_wcs/wcslib_wrap.h
similarity index 100%
rename from astropy/wcs/include/wcslib_wrap.h
rename to astropy/wcs/include/astropy_wcs/wcslib_wrap.h
diff --git a/astropy/wcs/include/wcslib_wtbarr_wrap.h b/astropy/wcs/include/astropy_wcs/wcslib_wtbarr_wrap.h
similarity index 100%
rename from astropy/wcs/include/wcslib_wtbarr_wrap.h
rename to astropy/wcs/include/astropy_wcs/wcslib_wtbarr_wrap.h
diff --git a/astropy/wcs/include/astropy_wcs_api.h b/astropy/wcs/include/astropy_wcs_api.h
index 8e9d30e..670831f 100644
--- a/astropy/wcs/include/astropy_wcs_api.h
+++ b/astropy/wcs/include/astropy_wcs_api.h
@@ -1,121 +1 @@
-#ifndef ASTROPY_WCS_API_H
-#define ASTROPY_WCS_API_H
-
-#include "wcsconfig.h"
-#include "pyutil.h"
-#include "distortion.h"
-#include "pipeline.h"
-#include "sip.h"
-#include "wcs.h"
-#include "wcsprintf.h"
-
-/*
-HOW TO UPDATE THE PUBLIC API
-
-This code uses a table of function pointers to dynamically expose the
-public API to other code that wants to use astropy.wcs from C.
-
-Each function should be:
-
-  1) Declared, as usual for C, in a .h file
-
-  2) Defined in a .c file that is compiled as part of the _wcs.so file
-
-  3) Have a macro that maps the function name to a position in the
-     function table.  That macro should go in this file
-     (astropy_wcs_api.h)
-
-  4) An entry in the function table, which lives in astropy_wcs_api.c
-
-Every time the function signatures change, or functions are added or
-removed from the table, the value of REVISION should be incremented.
-This allows for a rudimentary version check upon dynamic linking to
-the astropy._wcs module.
- */
-
-#define REVISION 4
-
-#ifdef ASTROPY_WCS_BUILD
-
-int _setup_api(PyObject* m);
-
-#else
-
-#if defined(NO_IMPORT_ASTROPY_WCS_API)
-extern void** AstropyWcs_API;
-#else
-void** AstropyWcs_API;
-#endif /* defined(NO_IMPORT_ASTROPY_PYWCS_API) */
-
-/* Function macros that delegate to a function pointer in the AstropyWcs_API table */
-#define AstropyWcs_GetCVersion (*(int (*)(void)) AstropyWcs_API[0])
-#define wcsprm_python2c (*(void (*)(struct wcsprm*)) AstropyWcs_API[1])
-#define wcsprm_c2python (*(void (*)(struct wcsprm*)) AstropyWcs_API[2])
-#define distortion_lookup_t_init (*(int (*)(distortion_lookup_t* lookup)) AstropyWcs_API[3])
-#define distortion_lookup_t_free (*(void (*)(distortion_lookup_t* lookup)) AstropyWcs_API[4])
-#define get_distortion_offset (*(double (*)(const distortion_lookup_t*, const double* const)) AstropyWcs_API[5])
-#define p4_pix2foc (*(int (*)(const unsigned int, const distortion_lookup_t**, const unsigned int, const double *, double *)) AstropyWcs_API[6])
-#define p4_pix2deltas (*(int (*)(const unsigned int, const distortion_lookup_t**, const unsigned int, const double *, double *)) AstropyWcs_API[7])
-#define sip_clear (*(void (*)(sip_t*) AstropyWcs_API[8]))
-#define sip_init (*(int (*)(sip_t*, unsigned int, double*, unsigned int, double*, unsigned int, double*, unsigned int, double*, double*)) AstropyWcs_API[9])
-#define sip_free (*(void (*)(sip_t*) AstropyWcs_API[10]))
-#define sip_pix2foc (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[11])
-#define sip_pix2deltas (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[12])
-#define sip_foc2pix (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[13])
-#define sip_foc2deltas (*(int (*)(sip_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[14])
-#define pipeline_clear (*(void (*)(pipeline_t*)) AstropyWcs_API[15])
-#define pipeline_init (*(void (*)(pipeline_t*, sip_t*, distortion_lookup_t**, struct wcsprm*)) AstropyWcs_API[16])
-#define pipeline_free (*(void (*)(pipeline_t*)) AstropyWcs_API[17])
-#define pipeline_all_pixel2world (*(int (*)(pipeline_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[18])
-#define pipeline_pix2foc (*(int (*)(pipeline_t*, unsigned int, unsigned int, double*, double*)) AstropyWcs_API[19])
-#define wcsp2s (*(int (*)(struct wcsprm *, int, int, const double[], double[], double[], double[], double[], int[])) AstropyWcs_API[20])
-#define wcss2p (*(int (*)(struct wcsprm *, int, int, const double[], double[], double[], double[], double[], int[])) AstropyWcs_API[21])
-#define wcsprt (*(int (*)(struct wcsprm *)) AstropyWcs_API[22])
-#define wcslib_get_error_message (*(const char* (*)(int)) AstropyWcs_API[23])
-#define wcsprintf_buf (*(const char * (*)()) AstropyWcs_API[24])
-
-#ifndef NO_IMPORT_ASTROPY_WCS_API
-int
-import_astropy_wcs(void) {
-  PyObject *wcs_module   = NULL;
-  PyObject *c_api        = NULL;
-  int       status       = -1;
-
-  #if PY_VERSION_HEX >= 0x03020000
-    AstropyWcs_API = (void **)PyCapsule_Import("astropy.wcs._wcs._ASTROPY_WCS_API", 0);
-    if (AstropyWcs_API == NULL) goto exit;
-  #else
-    pywcs_module = PyImport_ImportModule("astropy.wcs._wcs");
-    if (pywcs_module == NULL) goto exit;
-
-    c_api = PyObject_GetAttrString(pywcs_module, "_ASTROPY_WCS_API");
-    if (c_api == NULL) goto exit;
-
-    if (PyCObject_Check(c_api)) {
-      AstropyWcs_API = (void **)PyCObject_AsVoidPtr(c_api);
-    } else {
-      goto exit;
-    }
-  #endif
-
-  /* Perform runtime check of C API version */
-  if (REVISION != AstropyWcs_GetCVersion()) {
-    PyErr_Format(
-                 PyExc_ImportError, "module compiled against "        \
-                 "ABI version '%x' but this version of astropy.wcs is '%x'", \
-                 (int)REVISION, (int)PyWcs_GetCVersion());
-    return -1;
-  }
-
- exit:
-  Py_XDECREF(wcs_module);
-  Py_XDECREF(c_api);
-
-  return status;
-}
-
-#endif /* !defined(NO_IMPORT_ASTROPY_WCS_API) */
-
-#endif /* ASTROPY_WCS_BUILD */
-
-#endif /* ASTROPY_WCS_API_H */
+#error "Since version 0.3, astropy.wcs public API should be imported as \"astropy_wcs/astropy_wcs_api.h"
diff --git a/astropy/wcs/setup_package.py b/astropy/wcs/setup_package.py
index 8350ab2..f6cf5b8 100644
--- a/astropy/wcs/setup_package.py
+++ b/astropy/wcs/setup_package.py
@@ -1,15 +1,17 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from __future__ import division  # confidence high
+from __future__ import absolute_import, division, print_function, unicode_literals
 
 CONTACT = "Michael Droettboom"
 EMAIL = "mdroe at stsci.edu"
 
 from distutils.core import Extension
+import io
 from os.path import join
 import os.path
 import sys
 
 from astropy import setup_helpers
+from astropy.extern import six
 
 WCSROOT = os.path.relpath(os.path.dirname(__file__))
 WCSVERSION = "4.10"
@@ -18,18 +20,13 @@ WCSVERSION = "4.10"
 def b(s):
     return s.encode('ascii')
 
-if sys.version_info[0] >= 3:
-
+if six.PY3:
     def string_escape(s):
         s = s.decode('ascii').encode('ascii', 'backslashreplace')
-        s = s.replace(b('\n'), b('\\n'))
-        s = s.replace(b('\0'), b('\\0'))
+        s = s.replace(b'\n', b'\\n')
+        s = s.replace(b'\0', b'\\0')
         return s.decode('ascii')
-
-    from io import StringIO
-    string_types = (str, bytes)
 else:
-
     def string_escape(s):
         # string_escape has subtle differences with the escaping done in Python
         # 3 so correct for those too
@@ -37,9 +34,6 @@ else:
         s = s.replace(r'\x00', r'\0')
         return s.replace(r"\'", "'")
 
-    from cStringIO import StringIO
-    string_types = (str, unicode)
-
 
 def determine_64_bit_int():
     """
@@ -74,7 +68,7 @@ def write_wcsconfig_h():
     """
     Writes out the wcsconfig.h header with local configuration.
     """
-    h_file = StringIO()
+    h_file = io.StringIO()
     h_file.write("""
     /* WCSLIB library version number. */
     #define WCSLIB_VERSION {0}
@@ -111,6 +105,9 @@ def write_wcsconfig_h():
     #endif
     """.format(WCSVERSION, determine_64_bit_int()))
     setup_helpers.write_if_different(
+        join(WCSROOT, 'include', 'astropy_wcs', 'wcsconfig.h'),
+        h_file.getvalue().encode('ascii'))
+    setup_helpers.write_if_different(
         join(WCSROOT, 'include', 'wcsconfig.h'),
         h_file.getvalue().encode('ascii'))
 
@@ -122,14 +119,14 @@ def generate_c_docstrings():
     from astropy.wcs import docstrings
     docstrings = docstrings.__dict__
     keys = [
-        key for key in docstrings.keys()
-        if not key.startswith('__') and type(key) in string_types]
+        key for key, val in docstrings.items()
+        if not key.startswith('__') and isinstance(val, six.string_types)]
     keys.sort()
     docs = {}
     for key in keys:
         docs[key] = docstrings[key].encode('utf8').lstrip() + b'\0'
 
-    h_file = StringIO()
+    h_file = io.StringIO()
     h_file.write("""/*
 DO NOT EDIT!
 
@@ -151,10 +148,10 @@ void fill_docstrings(void);
     h_file.write("\n#endif\n\n")
 
     setup_helpers.write_if_different(
-        join(WCSROOT, 'include', 'docstrings.h'),
+        join(WCSROOT, 'include', 'astropy_wcs', 'docstrings.h'),
         h_file.getvalue().encode('utf-8'))
 
-    c_file = StringIO()
+    c_file = io.StringIO()
     c_file.write("""/*
 DO NOT EDIT!
 
@@ -166,7 +163,7 @@ MSVC, do not support string literals greater than 256 characters.
 */
 
 #include <string.h>
-#include "docstrings.h"
+#include "astropy_wcs/docstrings.h"
 
 #if defined(_MSC_VER)
 """)
@@ -293,7 +290,11 @@ def get_extensions():
     if sys.platform.startswith('linux'):
         cfg['define_macros'].append(('HAVE_SINCOS', None))
 
-    return [Extension('astropy.wcs._wcs', **cfg)]
+    cfg['sources'] = [str(x) for x in cfg['sources']]
+
+    cfg = dict((str(key), val) for key, val in six.iteritems(cfg))
+
+    return [Extension(str('astropy.wcs._wcs'), **cfg)]
 
 
 def get_package_data():
@@ -307,16 +308,20 @@ def get_package_data():
         'pipeline.h',
         'sip.h'
         ]
-    api_files = [join('include', x) for x in api_files]
-    return {
-        'astropy.wcs.tests': ['data/*.hdr', 'data/*.fits',
-                              'maps/*.hdr', 'spectra/*.hdr'],
-        'astropy.wcs': api_files}
-
+    api_files = [join('include', 'astropy_wcs', x) for x in api_files]
+    api_files.append(join('include', 'astropy_wcs_api.h'))
 
-def get_legacy_alias():
-    return setup_helpers.add_legacy_alias('pywcs', 'astropy.wcs', '1.11')
+    return {
+        str('astropy.wcs.tests'): ['data/*.hdr', 'data/*.fits',
+                                   'data/*.txt',
+                                   'maps/*.hdr', 'spectra/*.hdr'],
+        str('astropy.wcs'): api_files
+    }
 
 
 def get_external_libraries():
     return ['wcslib']
+
+
+def requires_2to3():
+    return False
diff --git a/astropy/wcs/src/astropy_wcs.c b/astropy/wcs/src/astropy_wcs.c
index 8ccf7ac..9d0f63e 100644
--- a/astropy/wcs/src/astropy_wcs.c
+++ b/astropy/wcs/src/astropy_wcs.c
@@ -3,16 +3,16 @@
          mdroe at stsci.edu
 */
 
-#include "astropy_wcs.h"
-#include "wcslib_wrap.h"
-#include "wcslib_tabprm_wrap.h"
-#include "wcslib_units_wrap.h"
-#include "wcslib_wtbarr_wrap.h"
-#include "distortion_wrap.h"
-#include "sip_wrap.h"
-#include "docstrings.h"
-#include "astropy_wcs_api.h"
-#include "unit_list_proxy.h"
+#include "astropy_wcs/astropy_wcs.h"
+#include "astropy_wcs/wcslib_wrap.h"
+#include "astropy_wcs/wcslib_tabprm_wrap.h"
+#include "astropy_wcs/wcslib_units_wrap.h"
+#include "astropy_wcs/wcslib_wtbarr_wrap.h"
+#include "astropy_wcs/distortion_wrap.h"
+#include "astropy_wcs/sip_wrap.h"
+#include "astropy_wcs/docstrings.h"
+#include "astropy_wcs/astropy_wcs_api.h"
+#include "astropy_wcs/unit_list_proxy.h"
 
 #include <structmember.h> /* from Python */
 
diff --git a/astropy/wcs/src/astropy_wcs_api.c b/astropy/wcs/src/astropy_wcs_api.c
index f5b83de..3c7bee4 100644
--- a/astropy/wcs/src/astropy_wcs_api.c
+++ b/astropy/wcs/src/astropy_wcs_api.c
@@ -1,6 +1,6 @@
 #define NO_IMPORT_ARRAY
 
-#include "astropy_wcs_api.h"
+#include "astropy_wcs/astropy_wcs_api.h"
 
 int
 AstropyWcs_GetCVersion(void) {
diff --git a/astropy/wcs/src/distortion.c b/astropy/wcs/src/distortion.c
index 7a8d630..1b21a48 100644
--- a/astropy/wcs/src/distortion.c
+++ b/astropy/wcs/src/distortion.c
@@ -3,7 +3,7 @@
          mdroe at stsci.edu
 */
 
-#include "distortion.h"
+#include "astropy_wcs/distortion.h"
 
 #include <assert.h>
 #include <math.h>
@@ -220,4 +220,3 @@ p4_pix2foc(
 
   return p4_pix2deltas(naxes, lookup, nelem, pix, foc);
 }
-
diff --git a/astropy/wcs/src/distortion_wrap.c b/astropy/wcs/src/distortion_wrap.c
index e8568c8..eb117f9 100644
--- a/astropy/wcs/src/distortion_wrap.c
+++ b/astropy/wcs/src/distortion_wrap.c
@@ -5,8 +5,8 @@
 
 #define NO_IMPORT_ARRAY
 
-#include "distortion_wrap.h"
-#include "docstrings.h"
+#include "astropy_wcs/distortion_wrap.h"
+#include "astropy_wcs/docstrings.h"
 
 #include <structmember.h> /* From Python */
 
diff --git a/astropy/wcs/src/docstrings.c b/astropy/wcs/src/docstrings.c
index c48b15d..8f4ff7a 100644
--- a/astropy/wcs/src/docstrings.c
+++ b/astropy/wcs/src/docstrings.c
@@ -9,17 +9,27 @@ MSVC, do not support string literals greater than 256 characters.
 */
 
 #include <string.h>
-#include "docstrings.h"
+#include "astropy_wcs/docstrings.h"
 
 #if defined(_MSC_VER)
 char doc_DistortionLookupTable[374];
+char doc_InconsistentAxisTypes[100];
+char doc_InvalidCoordinate[76];
+char doc_InvalidSubimageSpecification[77];
+char doc_InvalidTabularParameters[76];
+char doc_InvalidTransform[107];
 char doc_K[202];
 char doc_M[56];
+char doc_NoSolution[68];
+char doc_NoWcsKeywordsFound[76];
+char doc_NonseparableSubimageCoordinateSystem[88];
+char doc_SingularMatrix[70];
 char doc_Sip[1040];
 char doc_Tabprm[234];
-char doc_UnitConverter[2358];
+char doc_UnitConverter[2349];
 char doc_Wcs[513];
-char doc_Wcsprm[2091];
+char doc_WcsError[39];
+char doc_Wcsprm[2088];
 char doc_Wtbarr[202];
 char doc_a[264];
 char doc_a_order[60];
@@ -132,7 +142,7 @@ char doc_sip_pix2foc[649];
 char doc_spcfix[272];
 char doc_spec[68];
 char doc_specsys[145];
-char doc_sptr[1373];
+char doc_sptr[1370];
 char doc_ssysobs[253];
 char doc_ssyssrc[150];
 char doc_sub[3436];
@@ -140,7 +150,7 @@ char doc_tab[112];
 char doc_theta0[289];
 char doc_to_header[2229];
 char doc_ttype[108];
-char doc_unitfix[1050];
+char doc_unitfix[1047];
 char doc_velangl[186];
 char doc_velosys[316];
 char doc_want[173];
@@ -152,10 +162,28 @@ void fill_docstrings(void)
    strncpy(doc_DistortionLookupTable + 0, "DistortionLookupTable(*table*, *crpix*, *crval*, *cdelt*)\n\nRepresents a single lookup table for a `Paper IV`_ distortion\ntransformation.\n\nParameters\n----------\ntable : 2-dimensional array\n    The distortion lookup table.\n\ncrpix : 2-tuple\n    The distortion", 256);
    strncpy(doc_DistortionLookupTable + 256, " array reference pixel\n\ncrval : 2-tuple\n    The image array pixel coordinate\n\ncdelt : 2-tuple\n    The grid step size\n\0", 118);
 
+   strncpy(doc_InconsistentAxisTypes + 0, "InconsistentAxisTypesError()\n\nThe WCS header inconsistent or unrecognized coordinate axis type(s).\n\0", 100);
+
+   strncpy(doc_InvalidCoordinate + 0, "InvalidCoordinateError()\n\nOne or more of the world coordinates is invalid.\n\0", 76);
+
+   strncpy(doc_InvalidSubimageSpecification + 0, "InvalidSubimageSpecificationError()\n\nThe subimage specification is invalid.\n\0", 77);
+
+   strncpy(doc_InvalidTabularParameters + 0, "InvalidTabularParametersError()\n\nThe given tabular parameters are invalid.\n\0", 76);
+
+   strncpy(doc_InvalidTransform + 0, "InvalidTransformError()\n\nThe WCS transformation is invalid, or the transformation parameters\nare invalid.\n\0", 107);
+
    strncpy(doc_K + 0, "``int array[M]`` (read-only) The lengths of the axes of the coordinate\narray.\n\nAn array of length `M` whose elements record the lengths of the axes of\nthe coordinate array and of each indexing vector.\n\0", 202);
 
    strncpy(doc_M + 0, "``int`` (read-only) Number of tabular coordinate axes.\n\0", 56);
 
+   strncpy(doc_NoSolution + 0, "NoSolutionError()\n\nNo solution can be found in the given interval.\n\0", 68);
+
+   strncpy(doc_NoWcsKeywordsFound + 0, "NoWcsKeywordsFoundError()\n\nNo WCS keywords were found in the given header.\n\0", 76);
+
+   strncpy(doc_NonseparableSubimageCoordinateSystem + 0, "NonseparableSubimageCoordinateSystemError()\n\nNon-separable subimage coordinate system.\n\0", 88);
+
+   strncpy(doc_SingularMatrix + 0, "SingularMatrixError()\n\nThe linear transformation matrix is singular.\n\0", 70);
+
    strncpy(doc_Sip + 0, "Sip(*a, b, ap, bp, crpix*)\n\nThe `~astropy.wcs.Sip` class performs polynomial distortion correction\nusing the `SIP`_ convention in both directions.\n\nParameters\n----------\na : double array[m+1][m+1]\n    The ``A_i_j`` polynomial for pixel to focal plane trans", 256);
    strncpy(doc_Sip + 256, "formation.\n    Its size must be (*m* + 1, *m* + 1) where *m* = ``A_ORDER``.\n\nb : double array[m+1][m+1]\n    The ``B_i_j`` polynomial for pixel to focal plane transformation.\n    Its size must be (*m* + 1, *m* + 1) where *m* = ``B_ORDER``.\n\nap : double arra", 256);
    strncpy(doc_Sip + 512, "y[m+1][m+1]\n    The ``AP_i_j`` polynomial for pixel to focal plane transformation.\n    Its size must be (*m* + 1, *m* + 1) where *m* = ``AP_ORDER``.\n\nbp : double array[m+1][m+1]\n    The ``BP_i_j`` polynomial for pixel to focal plane transformation.\n    Its", 256);
@@ -166,28 +194,30 @@ void fill_docstrings(void)
 
    strncpy(doc_UnitConverter + 0, "UnitConverter(have, want, translate_units='')\n\nAn object for converting from one system of units to another.\n\nUse the returned object's `~astropy.wcs.UnitConverter.convert` method\nto convert values from *have* to *want*.\n\nThis function is permissive in acc", 256);
    strncpy(doc_UnitConverter + 256, "epting whitespace in all contexts in\na units specification where it does not create ambiguity (e.g. not\nbetween a metric prefix and a basic unit string), including in strings\nlike ``\"log (m ** 2)\"`` which is formally disallowed.\n\n.. note:: Deprecated in As", 256);
-   strncpy(doc_UnitConverter + 512, "tropy 0.2\n\n   `UnitConverter` will be removed in a future version of astropy.\n   The `astropy.units` package should be used instead.\n\nParameters\n----------\n\nhave : string\n    FITS unit string to convert from, with or without surrounding\n    square brackets", 256);
-   strncpy(doc_UnitConverter + 768, " (for inline specifications); text following the\n    closing bracket is ignored.\n\nwant : string\n    FITS unit string to convert to, with or without surrounding square\n    brackets (for inline specifications); text following the closing\n    bracket is ignor", 256);
-   strncpy(doc_UnitConverter + 1024, "ed.\n\nctrl : string, optional\n    Do potentially unsafe translations of non-standard unit strings.\n\n    Although ``\"S\"`` is commonly used to represent seconds, its\n    recognizes ``\"S\"`` formally as Siemens, however rarely that may\n    be translation to ``\"", 256);
-   strncpy(doc_UnitConverter + 1280, "s\"`` is potentially unsafe since the\n    standard used.  The same applies to ``\"H\"`` for hours (Henry),\n    and ``\"D\"`` for days (Debye).\n\n    This string controls what to do in such cases, and is\n    case-insensitive.\n\n    - If the string contains ``\"s\"``", 256);
-   strncpy(doc_UnitConverter + 1536, ", translate ``\"S\"`` to ``\"s\"``.\n\n    - If the string contains ``\"h\"``, translate ``\"H\"`` to ``\"h\"``.\n\n    - If the string contains ``\"d\"``, translate ``\"D\"`` to ``\"d\"``.\n\n    Thus ``''`` doesn't do any unsafe translations, whereas ``'shd'``\n    does all of", 256);
-   strncpy(doc_UnitConverter + 1792, " them.\n\nRaises\n------\nValueError\n    Invalid numeric multiplier.\n\nSyntaxError\n    Dangling binary operator.\n\nSyntaxError\n    Invalid symbol in INITIAL context.\n\nSyntaxError\n    Function in invalid context.\n\nSyntaxError\n    Invalid symbol in EXPON context.\n", 256);
-   strncpy(doc_UnitConverter + 2048, "\nSyntaxError\n    Unbalanced bracket.\n\nSyntaxError\n    Unbalanced parenthesis.\n\nSyntaxError\n    Consecutive binary operators.\n\nSyntaxError\n    Internal parser error.\n\nSyntaxError\n    Non-conformant unit specifications.\n\nSyntaxError\n    Non-conformant functi", 256);
-   strncpy(doc_UnitConverter + 2304, "ons.\n\nValueError\n    Potentially unsafe translation.\n\0", 54);
+   strncpy(doc_UnitConverter + 512, "tropy 0.2\n\n   `UnitConverter` will be removed in a future version of astropy.\n   The `astropy.units` package should be used instead.\n\nParameters\n----------\n\nhave : str\n    FITS unit string to convert from, with or without surrounding\n    square brackets (f", 256);
+   strncpy(doc_UnitConverter + 768, "or inline specifications); text following the\n    closing bracket is ignored.\n\nwant : str\n    FITS unit string to convert to, with or without surrounding square\n    brackets (for inline specifications); text following the closing\n    bracket is ignored.\n\nc", 256);
+   strncpy(doc_UnitConverter + 1024, "trl : str, optional\n    Do potentially unsafe translations of non-standard unit strings.\n\n    Although ``\"S\"`` is commonly used to represent seconds, its\n    recognizes ``\"S\"`` formally as Siemens, however rarely that may\n    be translation to ``\"s\"`` is p", 256);
+   strncpy(doc_UnitConverter + 1280, "otentially unsafe since the\n    standard used.  The same applies to ``\"H\"`` for hours (Henry),\n    and ``\"D\"`` for days (Debye).\n\n    This string controls what to do in such cases, and is\n    case-insensitive.\n\n    - If the string contains ``\"s\"``, transla", 256);
+   strncpy(doc_UnitConverter + 1536, "te ``\"S\"`` to ``\"s\"``.\n\n    - If the string contains ``\"h\"``, translate ``\"H\"`` to ``\"h\"``.\n\n    - If the string contains ``\"d\"``, translate ``\"D\"`` to ``\"d\"``.\n\n    Thus ``''`` doesn't do any unsafe translations, whereas ``'shd'``\n    does all of them.\n\nR", 256);
+   strncpy(doc_UnitConverter + 1792, "aises\n------\nValueError\n    Invalid numeric multiplier.\n\nSyntaxError\n    Dangling binary operator.\n\nSyntaxError\n    Invalid symbol in INITIAL context.\n\nSyntaxError\n    Function in invalid context.\n\nSyntaxError\n    Invalid symbol in EXPON context.\n\nSyntaxEr", 256);
+   strncpy(doc_UnitConverter + 2048, "ror\n    Unbalanced bracket.\n\nSyntaxError\n    Unbalanced parenthesis.\n\nSyntaxError\n    Consecutive binary operators.\n\nSyntaxError\n    Internal parser error.\n\nSyntaxError\n    Non-conformant unit specifications.\n\nSyntaxError\n    Non-conformant functions.\n\nVal", 256);
+   strncpy(doc_UnitConverter + 2304, "ueError\n    Potentially unsafe translation.\n\0", 45);
 
    strncpy(doc_Wcs + 0, "Wcs(*sip, cpdis, wcsprm, det2im*)\n\nWcs objects amalgamate basic WCS (as provided by `wcslib`_), with\n`SIP`_ and `Paper IV`_ distortion operations.\n\nTo perform all distortion corrections and WCS tranformation, use\n`all_pix2world`.\n\nParameters\n----------\nsip", 256);
    strncpy(doc_Wcs + 256, " : `~astropy.wcs.Sip` object or `None`\n\ncpdis : A pair of `~astropy.wcs.DistortionLookupTable` objects, or\n  ``(None, None)``.\n\nwcsprm : `~astropy.wcs.Wcsprm` object\n\ndet2im : A pair of `~astropy.wcs.DistortionLookupTable` objects, or\n   ``(None, None)``.\n", 256);
    strncpy(doc_Wcs + 512, "\0", 1);
 
+   strncpy(doc_WcsError + 0, "Base class of all invalid WCS errors.\n\0", 39);
+
    strncpy(doc_Wcsprm + 0, "Wcsprm(header=None, key=' ', relax=False, naxis=2, keysel=0, colsel=None)\n\n`~astropy.wcs.Wcsprm` is a direct wrapper around `wcslib`_.  It\nprovides access to the core WCS transformations that it supports.\n\nThe FITS header parsing enforces correct FITS \"key", 256);
    strncpy(doc_Wcsprm + 256, "word = value\" syntax\nwith regard to the equals sign occurring in columns 9 and 10.\nHowever, it does recognize free-format character (NOST 100-2.0,\nSect. 5.2.1), integer (Sect. 5.2.3), and floating-point values\n(Sect. 5.2.4) for all keywords.\n\nParameters\n--", 256);
-   strncpy(doc_Wcsprm + 512, "--------\nheader : An `astropy.io.fits.Header`, string, or `None`.\n  If ``None``, the object will be initialized to default values.\n\nkey : string, optional\n    The key referring to a particular WCS transform in the header.\n    This may be either ``' '`` or ", 256);
-   strncpy(doc_Wcsprm + 768, "``'A'``-``'Z'`` and corresponds to\n    the ``\"a\"`` part of ``\"CTYPEia\"``.  (*key* may only be\n    provided if *header* is also provided.)\n\nrelax : bool or int, optional\n\n    Degree of permissiveness:\n\n    - `False`: Recognize only FITS keywords defined by ", 256);
-   strncpy(doc_Wcsprm + 1024, "the published\n      WCS standard.\n\n    - `True`: Admit all recognized informal extensions of the WCS\n      standard.\n\n    - `int`: a bit field selecting specific extensions to accept.  See\n      :ref:`relaxread` for details.\n\nnaxis : int, optional\n    The ", 256);
-   strncpy(doc_Wcsprm + 1280, "number of world coordinates axes for the object.  (*naxis* may\n    only be provided if *header* is `None`.)\n\nkeysel : sequence of flag bits, optional\n    Vector of flag bits that may be used to restrict the keyword types\n    considered:\n\n        - ``WCSHDR", 256);
-   strncpy(doc_Wcsprm + 1536, "_IMGHEAD``: Image header keywords.\n\n        - ``WCSHDR_BIMGARR``: Binary table image array.\n\n        - ``WCSHDR_PIXLIST``: Pixel list keywords.\n\n    If zero, there is no restriction.  If -1, the underlying wcslib\n    function ``wcspih()`` is called, rather", 256);
-   strncpy(doc_Wcsprm + 1792, " than ``wcstbh()``.\n\ncolsel : sequence of int\n    A sequence of table column numbers used to restrict the keywords\n    considered.  `None` indicates no restriction.\n\nRaises\n------\nMemoryError\n     Memory allocation failed.\n\nValueError\n     Invalid key.\n\nKe", 256);
-   strncpy(doc_Wcsprm + 2048, "yError\n     Key not found in FITS header.\n\0", 43);
+   strncpy(doc_Wcsprm + 512, "--------\nheader : An `astropy.io.fits.Header`, string, or `None`.\n  If ``None``, the object will be initialized to default values.\n\nkey : str, optional\n    The key referring to a particular WCS transform in the header.\n    This may be either ``' '`` or ``'", 256);
+   strncpy(doc_Wcsprm + 768, "A'``-``'Z'`` and corresponds to\n    the ``\"a\"`` part of ``\"CTYPEia\"``.  (*key* may only be\n    provided if *header* is also provided.)\n\nrelax : bool or int, optional\n\n    Degree of permissiveness:\n\n    - `False`: Recognize only FITS keywords defined by the", 256);
+   strncpy(doc_Wcsprm + 1024, " published\n      WCS standard.\n\n    - `True`: Admit all recognized informal extensions of the WCS\n      standard.\n\n    - `int`: a bit field selecting specific extensions to accept.  See\n      :ref:`relaxread` for details.\n\nnaxis : int, optional\n    The num", 256);
+   strncpy(doc_Wcsprm + 1280, "ber of world coordinates axes for the object.  (*naxis* may\n    only be provided if *header* is `None`.)\n\nkeysel : sequence of flag bits, optional\n    Vector of flag bits that may be used to restrict the keyword types\n    considered:\n\n        - ``WCSHDR_IM", 256);
+   strncpy(doc_Wcsprm + 1536, "GHEAD``: Image header keywords.\n\n        - ``WCSHDR_BIMGARR``: Binary table image array.\n\n        - ``WCSHDR_PIXLIST``: Pixel list keywords.\n\n    If zero, there is no restriction.  If -1, the underlying wcslib\n    function ``wcspih()`` is called, rather th", 256);
+   strncpy(doc_Wcsprm + 1792, "an ``wcstbh()``.\n\ncolsel : sequence of int\n    A sequence of table column numbers used to restrict the keywords\n    considered.  `None` indicates no restriction.\n\nRaises\n------\nMemoryError\n     Memory allocation failed.\n\nValueError\n     Invalid key.\n\nKeyEr", 256);
+   strncpy(doc_Wcsprm + 2048, "ror\n     Key not found in FITS header.\n\0", 40);
 
    strncpy(doc_Wtbarr + 0, "Classes to construct coordinate lookup tables from a binary table\nextension (BINTABLE).\n\nThis class can not be constructed directly from Python, but instead is\nreturned from `~astropy.wcs.Wcsprm.wtb`.\n\0", 202);
 
@@ -525,12 +555,12 @@ void fill_docstrings(void)
 
    strncpy(doc_specsys + 0, "``string`` Spectral reference frame (standard of rest), ``SPECSYSa``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.ssysobs, astropy.wcs.Wcsprm.velosys\n\0", 145);
 
-   strncpy(doc_sptr + 0, "sptr(ctype, i=-1)\n\nTranslates the spectral axis in a WCS object.\n\nFor example, a ``FREQ`` axis may be translated into ``ZOPT-F2W`` and\nvice versa.\n\nParameters\n----------\nctype : string\n    Required spectral ``CTYPEia``, maximum of 8 characters.  The first\n", 256);
-   strncpy(doc_sptr + 256, "    four characters are required to be given and are never modified.\n    The remaining four, the algorithm code, are completely determined\n    by, and must be consistent with, the first four characters.\n    Wildcarding may be used, i.e.  if the final three", 256);
-   strncpy(doc_sptr + 512, " characters are\n    specified as ``\"???\"``, or if just the eighth character is\n    specified as ``\"?\"``, the correct algorithm code will be\n    substituted and returned.\n\ni : int\n    Index of the spectral axis (0-relative).  If ``i < 0`` (or not\n    provid", 256);
-   strncpy(doc_sptr + 768, "ed), it will be set to the first spectral axis identified\n    from the ``CTYPE`` keyvalues in the FITS header.\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nSingularMatrixError\n    Linear transformation matrix is singular.\n\nInconsistentAxisType", 256);
-   strncpy(doc_sptr + 1024, "sError\n    Inconsistent or unrecognized coordinate axis types.\n\nValueError\n    Invalid parameter value.\n\nInvalidTransformError\n    Invalid coordinate transformation parameters.\n\nInvalidTransformError\n    Ill-conditioned coordinate transformation parameters", 256);
-   strncpy(doc_sptr + 1280, ".\n\nInvalidSubimageSpecificationError\n    Invalid subimage specification (no spectral axis).\n\0", 93);
+   strncpy(doc_sptr + 0, "sptr(ctype, i=-1)\n\nTranslates the spectral axis in a WCS object.\n\nFor example, a ``FREQ`` axis may be translated into ``ZOPT-F2W`` and\nvice versa.\n\nParameters\n----------\nctype : str\n    Required spectral ``CTYPEia``, maximum of 8 characters.  The first\n   ", 256);
+   strncpy(doc_sptr + 256, " four characters are required to be given and are never modified.\n    The remaining four, the algorithm code, are completely determined\n    by, and must be consistent with, the first four characters.\n    Wildcarding may be used, i.e.  if the final three ch", 256);
+   strncpy(doc_sptr + 512, "aracters are\n    specified as ``\"???\"``, or if just the eighth character is\n    specified as ``\"?\"``, the correct algorithm code will be\n    substituted and returned.\n\ni : int\n    Index of the spectral axis (0-relative).  If ``i < 0`` (or not\n    provided)", 256);
+   strncpy(doc_sptr + 768, ", it will be set to the first spectral axis identified\n    from the ``CTYPE`` keyvalues in the FITS header.\n\nRaises\n------\nMemoryError\n    Memory allocation failed.\n\nSingularMatrixError\n    Linear transformation matrix is singular.\n\nInconsistentAxisTypesEr", 256);
+   strncpy(doc_sptr + 1024, "ror\n    Inconsistent or unrecognized coordinate axis types.\n\nValueError\n    Invalid parameter value.\n\nInvalidTransformError\n    Invalid coordinate transformation parameters.\n\nInvalidTransformError\n    Ill-conditioned coordinate transformation parameters.\n\n", 256);
+   strncpy(doc_sptr + 1280, "InvalidSubimageSpecificationError\n    Invalid subimage specification (no spectral axis).\n\0", 90);
 
    strncpy(doc_ssysobs + 0, "``string`` Spectral reference frame.\n\nThe spectral reference frame in which there is no differential\nvariation in the spectral coordinate across the field-of-view,\n``SSYSOBSa``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.specsys, astropy.wcs.Wcsprm.velosys\n\0", 253);
 
@@ -568,11 +598,11 @@ void fill_docstrings(void)
 
    strncpy(doc_ttype + 0, "``str`` (read-only)\n\n``TTYPEn`` identifying the column of the binary table that contains\nthe wcstab array.\n\0", 108);
 
-   strncpy(doc_unitfix + 0, "unitfix(translate_units='')\n\nTranslates non-standard ``CUNITia`` keyvalues.\n\nFor example, ``DEG`` -> ``deg``, also stripping off unnecessary\nwhitespace.\n\nParameters\n----------\ntranslate_units : string, optional\n    Do potentially unsafe translations of non", 256);
-   strncpy(doc_unitfix + 256, "-standard unit strings.\n\n    Although ``\"S\"`` is commonly used to represent seconds, its\n    recognizes ``\"S\"`` formally as Siemens, however rarely that may\n    be translation to ``\"s\"`` is potentially unsafe since the\n    standard used.  The same applies ", 256);
-   strncpy(doc_unitfix + 512, "to ``\"H\"`` for hours (Henry),\n    and ``\"D\"`` for days (Debye).\n\n    This string controls what to do in such cases, and is\n    case-insensitive.\n\n    - If the string contains ``\"s\"``, translate ``\"S\"`` to ``\"s\"``.\n\n    - If the string contains ``\"h\"``, tra", 256);
-   strncpy(doc_unitfix + 768, "nslate ``\"H\"`` to ``\"h\"``.\n\n    - If the string contains ``\"d\"``, translate ``\"D\"`` to ``\"d\"``.\n\n    Thus ``''`` doesn't do any unsafe translations, whereas ``'shd'``\n    does all of them.\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`", 256);
-   strncpy(doc_unitfix + 1024, "` if no change required.\n\0", 26);
+   strncpy(doc_unitfix + 0, "unitfix(translate_units='')\n\nTranslates non-standard ``CUNITia`` keyvalues.\n\nFor example, ``DEG`` -> ``deg``, also stripping off unnecessary\nwhitespace.\n\nParameters\n----------\ntranslate_units : str, optional\n    Do potentially unsafe translations of non-st", 256);
+   strncpy(doc_unitfix + 256, "andard unit strings.\n\n    Although ``\"S\"`` is commonly used to represent seconds, its\n    recognizes ``\"S\"`` formally as Siemens, however rarely that may\n    be translation to ``\"s\"`` is potentially unsafe since the\n    standard used.  The same applies to ", 256);
+   strncpy(doc_unitfix + 512, "``\"H\"`` for hours (Henry),\n    and ``\"D\"`` for days (Debye).\n\n    This string controls what to do in such cases, and is\n    case-insensitive.\n\n    - If the string contains ``\"s\"``, translate ``\"S\"`` to ``\"s\"``.\n\n    - If the string contains ``\"h\"``, transl", 256);
+   strncpy(doc_unitfix + 768, "ate ``\"H\"`` to ``\"h\"``.\n\n    - If the string contains ``\"d\"``, translate ``\"D\"`` to ``\"d\"``.\n\n    Thus ``''`` doesn't do any unsafe translations, whereas ``'shd'``\n    does all of them.\n\nReturns\n-------\nsuccess : int\n    Returns ``0`` for success; ``-1`` i", 256);
+   strncpy(doc_unitfix + 1024, "f no change required.\n\0", 23);
 
    strncpy(doc_velangl + 0, "``double`` Velocity angle.\n\nThe angle in degrees that should be used to decompose an observed\nvelocity into radial and transverse components.\n\nAn undefined value is represented by NaN.\n\0", 186);
 
@@ -591,19 +621,39 @@ void fill_docstrings(void)
 #else /* UNIX */
 char doc_DistortionLookupTable[374] = "DistortionLookupTable(*table*, *crpix*, *crval*, *cdelt*)\n\nRepresents a single lookup table for a `Paper IV`_ distortion\ntransformation.\n\nParameters\n----------\ntable : 2-dimensional array\n    The distortion lookup table.\n\ncrpix : 2-tuple\n    The distortion array reference pixel\n\ncrval : 2-tuple\n    The image array pixel coordinate\n\ncdelt : 2-tuple\n    The grid step size\n\0";
 
+char doc_InconsistentAxisTypes[100] = "InconsistentAxisTypesError()\n\nThe WCS header inconsistent or unrecognized coordinate axis type(s).\n\0";
+
+char doc_InvalidCoordinate[76] = "InvalidCoordinateError()\n\nOne or more of the world coordinates is invalid.\n\0";
+
+char doc_InvalidSubimageSpecification[77] = "InvalidSubimageSpecificationError()\n\nThe subimage specification is invalid.\n\0";
+
+char doc_InvalidTabularParameters[76] = "InvalidTabularParametersError()\n\nThe given tabular parameters are invalid.\n\0";
+
+char doc_InvalidTransform[107] = "InvalidTransformError()\n\nThe WCS transformation is invalid, or the transformation parameters\nare invalid.\n\0";
+
 char doc_K[202] = "``int array[M]`` (read-only) The lengths of the axes of the coordinate\narray.\n\nAn array of length `M` whose elements record the lengths of the axes of\nthe coordinate array and of each indexing vector.\n\0";
 
 char doc_M[56] = "``int`` (read-only) Number of tabular coordinate axes.\n\0";
 
+char doc_NoSolution[68] = "NoSolutionError()\n\nNo solution can be found in the given interval.\n\0";
+
+char doc_NoWcsKeywordsFound[76] = "NoWcsKeywordsFoundError()\n\nNo WCS keywords were found in the given header.\n\0";
+
+char doc_NonseparableSubimageCoordinateSystem[88] = "NonseparableSubimageCoordinateSystemError()\n\nNon-separable subimage coordinate system.\n\0";
+
+char doc_SingularMatrix[70] = "SingularMatrixError()\n\nThe linear transformation matrix is singular.\n\0";
+
 char doc_Sip[1040] = "Sip(*a, b, ap, bp, crpix*)\n\nThe `~astropy.wcs.Sip` class performs polynomial distortion correction\nusing the `SIP`_ convention in both directions.\n\nParameters\n----------\na : double array[m+1][m+1]\n    The ``A_i_j`` polynomial for pixel to focal plane transformation.\n    Its size must be (*m* + 1, *m* + 1) where *m* = ``A_ORDER``.\n\nb : double array[m+1][m+1]\n    The ``B_i_j`` polynomial for pixel to focal plane transformation.\n    Its size must be (*m* + [...]
 
 char doc_Tabprm[234] = "A class to store the information related to tabular coordinates,\ni.e., coordinates that are defined via a lookup table.\n\nThis class can not be constructed directly from Python, but instead is\nreturned from `~astropy.wcs.Wcsprm.tab`.\n\0";
 
-char doc_UnitConverter[2358] = "UnitConverter(have, want, translate_units='')\n\nAn object for converting from one system of units to another.\n\nUse the returned object's `~astropy.wcs.UnitConverter.convert` method\nto convert values from *have* to *want*.\n\nThis function is permissive in accepting whitespace in all contexts in\na units specification where it does not create ambiguity (e.g. not\nbetween a metric prefix and a basic unit string), including in strings\nlike ``\"log (m **  [...]
+char doc_UnitConverter[2349] = "UnitConverter(have, want, translate_units='')\n\nAn object for converting from one system of units to another.\n\nUse the returned object's `~astropy.wcs.UnitConverter.convert` method\nto convert values from *have* to *want*.\n\nThis function is permissive in accepting whitespace in all contexts in\na units specification where it does not create ambiguity (e.g. not\nbetween a metric prefix and a basic unit string), including in strings\nlike ``\"log (m **  [...]
 
 char doc_Wcs[513] = "Wcs(*sip, cpdis, wcsprm, det2im*)\n\nWcs objects amalgamate basic WCS (as provided by `wcslib`_), with\n`SIP`_ and `Paper IV`_ distortion operations.\n\nTo perform all distortion corrections and WCS tranformation, use\n`all_pix2world`.\n\nParameters\n----------\nsip : `~astropy.wcs.Sip` object or `None`\n\ncpdis : A pair of `~astropy.wcs.DistortionLookupTable` objects, or\n  ``(None, None)``.\n\nwcsprm : `~astropy.wcs.Wcsprm` object\n\ndet2im : A pair of `~astropy.wc [...]
 
-char doc_Wcsprm[2091] = "Wcsprm(header=None, key=' ', relax=False, naxis=2, keysel=0, colsel=None)\n\n`~astropy.wcs.Wcsprm` is a direct wrapper around `wcslib`_.  It\nprovides access to the core WCS transformations that it supports.\n\nThe FITS header parsing enforces correct FITS \"keyword = value\" syntax\nwith regard to the equals sign occurring in columns 9 and 10.\nHowever, it does recognize free-format character (NOST 100-2.0,\nSect. 5.2.1), integer (Sect. 5.2.3), and floating-poin [...]
+char doc_WcsError[39] = "Base class of all invalid WCS errors.\n\0";
+
+char doc_Wcsprm[2088] = "Wcsprm(header=None, key=' ', relax=False, naxis=2, keysel=0, colsel=None)\n\n`~astropy.wcs.Wcsprm` is a direct wrapper around `wcslib`_.  It\nprovides access to the core WCS transformations that it supports.\n\nThe FITS header parsing enforces correct FITS \"keyword = value\" syntax\nwith regard to the equals sign occurring in columns 9 and 10.\nHowever, it does recognize free-format character (NOST 100-2.0,\nSect. 5.2.1), integer (Sect. 5.2.3), and floating-poin [...]
 
 char doc_Wtbarr[202] = "Classes to construct coordinate lookup tables from a binary table\nextension (BINTABLE).\n\nThis class can not be constructed directly from Python, but instead is\nreturned from `~astropy.wcs.Wcsprm.wtb`.\n\0";
 
@@ -829,7 +879,7 @@ char doc_spec[68] = "``int`` (read-only) The index containing the spectral axis
 
 char doc_specsys[145] = "``string`` Spectral reference frame (standard of rest), ``SPECSYSa``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.ssysobs, astropy.wcs.Wcsprm.velosys\n\0";
 
-char doc_sptr[1373] = "sptr(ctype, i=-1)\n\nTranslates the spectral axis in a WCS object.\n\nFor example, a ``FREQ`` axis may be translated into ``ZOPT-F2W`` and\nvice versa.\n\nParameters\n----------\nctype : string\n    Required spectral ``CTYPEia``, maximum of 8 characters.  The first\n    four characters are required to be given and are never modified.\n    The remaining four, the algorithm code, are completely determined\n    by, and must be consistent with, the first four character [...]
+char doc_sptr[1370] = "sptr(ctype, i=-1)\n\nTranslates the spectral axis in a WCS object.\n\nFor example, a ``FREQ`` axis may be translated into ``ZOPT-F2W`` and\nvice versa.\n\nParameters\n----------\nctype : str\n    Required spectral ``CTYPEia``, maximum of 8 characters.  The first\n    four characters are required to be given and are never modified.\n    The remaining four, the algorithm code, are completely determined\n    by, and must be consistent with, the first four characters.\ [...]
 
 char doc_ssysobs[253] = "``string`` Spectral reference frame.\n\nThe spectral reference frame in which there is no differential\nvariation in the spectral coordinate across the field-of-view,\n``SSYSOBSa``.\n\nSee also\n--------\nastropy.wcs.Wcsprm.specsys, astropy.wcs.Wcsprm.velosys\n\0";
 
@@ -845,7 +895,7 @@ char doc_to_header[2229] = "to_header(relax=False)\n\n`to_header` translates a W
 
 char doc_ttype[108] = "``str`` (read-only)\n\n``TTYPEn`` identifying the column of the binary table that contains\nthe wcstab array.\n\0";
 
-char doc_unitfix[1050] = "unitfix(translate_units='')\n\nTranslates non-standard ``CUNITia`` keyvalues.\n\nFor example, ``DEG`` -> ``deg``, also stripping off unnecessary\nwhitespace.\n\nParameters\n----------\ntranslate_units : string, optional\n    Do potentially unsafe translations of non-standard unit strings.\n\n    Although ``\"S\"`` is commonly used to represent seconds, its\n    recognizes ``\"S\"`` formally as Siemens, however rarely that may\n    be translation to ``\"s\"`` is  [...]
+char doc_unitfix[1047] = "unitfix(translate_units='')\n\nTranslates non-standard ``CUNITia`` keyvalues.\n\nFor example, ``DEG`` -> ``deg``, also stripping off unnecessary\nwhitespace.\n\nParameters\n----------\ntranslate_units : str, optional\n    Do potentially unsafe translations of non-standard unit strings.\n\n    Although ``\"S\"`` is commonly used to represent seconds, its\n    recognizes ``\"S\"`` formally as Siemens, however rarely that may\n    be translation to ``\"s\"`` is pot [...]
 
 char doc_velangl[186] = "``double`` Velocity angle.\n\nThe angle in degrees that should be used to decompose an observed\nvelocity into radial and transverse components.\n\nAn undefined value is represented by NaN.\n\0";
 
diff --git a/astropy/wcs/src/pipeline.c b/astropy/wcs/src/pipeline.c
index bfa1a2b..4e553e6 100644
--- a/astropy/wcs/src/pipeline.c
+++ b/astropy/wcs/src/pipeline.c
@@ -3,8 +3,8 @@
          mdroe at stsci.edu
 */
 
-#include "pipeline.h"
-#include "util.h"
+#include "astropy_wcs/pipeline.h"
+#include "astropy_wcs/util.h"
 #include <assert.h>
 #include <stdlib.h>
 #include <string.h>
@@ -248,4 +248,3 @@ int pipeline_pix2foc(
 
   return status;
 }
-
diff --git a/astropy/wcs/src/pyutil.c b/astropy/wcs/src/pyutil.c
index 2767e79..13d7e56 100644
--- a/astropy/wcs/src/pyutil.c
+++ b/astropy/wcs/src/pyutil.c
@@ -6,7 +6,9 @@
 #define NO_IMPORT_ARRAY
 
 /* util.h must be imported first */
-#include "pyutil.h"
+#include "astropy_wcs/pyutil.h"
+
+#include "astropy_wcs/docstrings.h"
 
 #include "wcsfix.h"
 #include "wcsprintf.h"
@@ -203,6 +205,7 @@ wcsprm_python2c(
  * Exceptions                                                              *
  ***************************************************************************/
 
+PyObject* WcsExc_Wcs;
 PyObject* WcsExc_SingularMatrix;
 PyObject* WcsExc_InconsistentAxisTypes;
 PyObject* WcsExc_InvalidTransform;
@@ -219,8 +222,47 @@ PyObject* WcsExc_InvalidTabularParameters;
  */
 PyObject** wcs_errexc[14];
 
+static PyObject*
+_new_exception_with_doc(char *name, char *doc, PyObject *base)
+{
+#if ((PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 7) || \
+     (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 2))
+  return PyErr_NewExceptionWithDoc(name, doc, base, NULL);
+#else
+  /* Python 2.6 and 3.1 don't have PyErr_NewExceptionWithDoc */
+  PyObject *dict;
+  PyObject *docobj;
+  int result;
+
+  dict = PyDict_New();
+  if (dict == NULL) {
+    return NULL;
+  }
+
+  if (doc != NULL) {
+    docobj = PyUnicode_FromString(doc);
+    if (docobj == NULL) {
+      Py_DECREF(dict);
+      return NULL;
+    }
+
+    result = PyDict_SetItemString(dict, "__doc__", docobj);
+    Py_DECREF(docobj);
+    if (result < 0) {
+      Py_DECREF(dict);
+      return NULL;
+    }
+
+    return PyErr_NewException(name, base, dict);
+  }
+#endif
+}
+
 #define DEFINE_EXCEPTION(exc) \
-  WcsExc_##exc = PyErr_NewException("astropy.wcs._wcs." #exc "Error", PyExc_ValueError, NULL); \
+  WcsExc_##exc = _new_exception_with_doc(                             \
+      "astropy.wcs._wcs." #exc "Error",                                 \
+      doc_##exc,                                                        \
+      WcsExc_Wcs);                                                      \
   if (WcsExc_##exc == NULL) \
     return 1; \
   PyModule_AddObject(m, #exc "Error", WcsExc_##exc); \
@@ -229,6 +271,15 @@ int
 _define_exceptions(
     PyObject* m) {
 
+  WcsExc_Wcs = _new_exception_with_doc(
+      "astropy.wcs._wcs.WcsError",
+      doc_WcsError,
+      PyExc_ValueError);
+  if (WcsExc_Wcs == NULL) {
+    return 1;
+  }
+  PyModule_AddObject(m, "WcsError", WcsExc_Wcs);
+
   DEFINE_EXCEPTION(SingularMatrix);
   DEFINE_EXCEPTION(InconsistentAxisTypes);
   DEFINE_EXCEPTION(InvalidTransform);
@@ -363,20 +414,29 @@ set_string(
 
   char*      buffer;
   Py_ssize_t len;
+  PyObject*  ascii_obj = NULL;
+  int        result = -1;
 
   if (check_delete(propname, value)) {
     return -1;
   }
 
-  #if PY3K
-  if (PyBytes_AsStringAndSize(value, &buffer, &len) == -1) {
-    return -1;
-  }
-  #else
-  if (PyString_AsStringAndSize(value, &buffer, &len) == -1) {
-    return -1;
+  if (PyUnicode_Check(value)) {
+    ascii_obj = PyUnicode_AsASCIIString(value);
+    if (ascii_obj == NULL) {
+      goto end;
+    }
+    if (PyBytes_AsStringAndSize(ascii_obj, &buffer, &len) == -1) {
+      goto end;
+    }
+  } else if (PyBytes_Check(value)) {
+    if (PyBytes_AsStringAndSize(value, &buffer, &len) == -1) {
+      goto end;
+    }
+  } else {
+    PyErr_SetString(PyExc_TypeError, "value must be bytes or unicode");
+    goto end;
   }
-  #endif
 
   if (len > maxlen) {
     PyErr_Format(
@@ -384,12 +444,17 @@ set_string(
         "'%s' must be less than %u characters",
         propname,
         (unsigned int)maxlen);
-    return -1;
+    goto end;
   }
 
   strncpy(dest, buffer, (size_t)maxlen);
 
-  return 0;
+  result = 0;
+
+ end:
+  Py_XDECREF(ascii_obj);
+
+  return result;
 }
 
 /* get_bool is inlined */
@@ -550,8 +615,6 @@ set_int_array(
 
 /* get_str_list is inlined */
 
-/* set_str_list is inlined */
-
 int
 set_str_list(
     const char* propname,
@@ -561,8 +624,7 @@ set_str_list(
     char (*dest)[72]) {
 
   PyObject*  str      = NULL;
-  char*      str_char = NULL;
-  Py_ssize_t str_len  = 0;
+  Py_ssize_t input_len;
   Py_ssize_t i        = 0;
 
   if (check_delete(propname, value)) {
@@ -600,38 +662,26 @@ set_str_list(
       return -1;
     }
 
-    #if PY3K
-    if (!PyBytes_CheckExact(str)) {
-    #else
-    if (!PyString_CheckExact(str)) {
-    #endif
+    if (!(PyBytes_CheckExact(str) || PyUnicode_CheckExact(str))) {
       PyErr_Format(
           PyExc_TypeError,
-          #if PY3K
-          "'%s' must be a sequence of bytes",
-          #else
-          "'%s' must be a sequence of strings",
-          #endif
+          "'%s' must be a sequence of bytes or strings",
           propname);
       Py_DECREF(str);
       return -1;
     }
 
-    #if PY3K
-    if (PyBytes_Size(str) > maxlen) {
-    #else
-    if (PyString_Size(str) > maxlen) {
-    #endif
+    input_len = PySequence_Size(str);
+    if (input_len > maxlen) {
       PyErr_Format(
           PyExc_TypeError,
-          #if PY3K
-          "Each bytes in '%s' must be less than %u characters",
-          #else
-          "Each string in '%s' must be less than %u characters",
-          #endif
+          "Each entry in '%s' must be less than %u characters",
           propname, (unsigned int)maxlen);
       Py_DECREF(str);
       return -1;
+    } else if (input_len == -1) {
+      Py_DECREF(str);
+      return -1;
     }
 
     Py_DECREF(str);
@@ -642,20 +692,15 @@ set_str_list(
     if (str == NULL) {
       /* Theoretically, something has gone really wrong here, since
          we've already verified the list. */
+      PyErr_Clear();
       PyErr_Format(
           PyExc_RuntimeError,
           "Input values have changed underneath us.  Something is seriously wrong.");
       return -1;
     }
 
-    /* We already know its a string of the correct length */
-    #if PY3K
-    if (PyBytes_AsStringAndSize(str, &str_char, &str_len)) {
-    #else
-    if (PyString_AsStringAndSize(str, &str_char, &str_len)) {
-    #endif
-      /* Theoretically, something has gone really wrong here, since
-         we've already verified the list. */
+    if (set_string(propname, str, dest[i], maxlen)) {
+      PyErr_Clear();
       PyErr_Format(
           PyExc_RuntimeError,
           "Input values have changed underneath us.  Something is seriously wrong.");
@@ -663,8 +708,6 @@ set_str_list(
       return -1;
     }
 
-    strncpy(dest[i], str_char, (size_t)maxlen);
-
     Py_DECREF(str);
   }
 
@@ -683,8 +726,7 @@ get_pscards(
   Py_ssize_t i         = 0;
 
   if (nps < 0) {
-    PyErr_SetString(PyExc_ValueError, "Object has no pscards");
-    return NULL;
+    nps = 0;
   }
 
   result = PyList_New((Py_ssize_t)nps);
@@ -692,6 +734,11 @@ get_pscards(
     return NULL;
   }
 
+  if (nps && ps == NULL) {
+    PyErr_SetString(PyExc_MemoryError, "NULL pointer");
+    return NULL;
+  }
+
   for (i = 0; i < (Py_ssize_t)nps; ++i) {
     subresult = Py_BuildValue("iis", ps[i].i, ps[i].m, ps[i].value);
     if (subresult == NULL) {
@@ -790,8 +837,7 @@ get_pvcards(
   Py_ssize_t i         = 0;
 
   if (npv < 0) {
-    PyErr_SetString(PyExc_ValueError, "Object has no pvcards");
-    return NULL;
+    npv = 0;
   }
 
   result = PyList_New((Py_ssize_t)npv);
@@ -799,6 +845,11 @@ get_pvcards(
     return NULL;
   }
 
+  if (npv && pv == NULL) {
+    PyErr_SetString(PyExc_MemoryError, "NULL pointer");
+    return NULL;
+  }
+
   for (i = 0; i < (Py_ssize_t)npv; ++i) {
     subresult = Py_BuildValue("iid", pv[i].i, pv[i].m, pv[i].value);
     if (subresult == NULL) {
@@ -824,65 +875,50 @@ set_pvcards(
     int *npv,
     int *npvmax) {
 
-  PyObject*  subvalue  = NULL;
-  int        i         = 0;
-  Py_ssize_t size      = 0;
-  int        ival      = 0;
-  int        mval      = 0;
-  double     dblvalue  = 0.0;
-  void*      newmem    = NULL;
+  PyObject* fastseq = NULL;
+  struct pvcard* newmem = NULL;
+  Py_ssize_t size;
+  int ret = -1;
+  int i;
 
-  if (!PySequence_Check(value)) {
-    return -1;
-  }
-  size = PySequence_Size(value);
-  if (size > 0x7fffffff) {
-    return -1;
-  }
+  fastseq = PySequence_Fast(value, "Expected sequence type");
+  if (!fastseq)
+    goto done;
 
-  if (size > (Py_ssize_t)*npvmax) {
-    newmem = malloc(sizeof(struct pvcard) * size);
-    if (newmem == NULL) {
-      PyErr_SetString(PyExc_MemoryError, "Could not allocate memory.");
-      return -1;
-    }
-    free(*pv);
-    *pv = newmem;
-    *npvmax = (int)size;
-  }
+  size = PySequence_Fast_GET_SIZE(value);
+  newmem = malloc(sizeof(struct pvcard) * size);
 
-  /* Verify the entire list for correct types first, so we don't have
-     to undo anything copied into the canonical array. */
-  for (i = 0; i < size; ++i) {
-    subvalue = PySequence_GetItem(value, i);
-    if (subvalue == NULL) {
-      return -1;
-    }
-    if (!PyArg_ParseTuple(subvalue, "iid", &ival, &mval, &dblvalue)) {
-      Py_DECREF(subvalue);
-      return -1;
-    }
-    Py_DECREF(subvalue);
+  /* Raise exception if size is nonzero but newmem
+   * could not be allocated. */
+  if (size && !newmem) {
+    PyErr_SetString(PyExc_MemoryError, "Could not allocate memory.");
+    return -1;
   }
 
-  for (i = 0; i < size; ++i) {
-    subvalue = PySequence_GetItem(value, i);
-    if (subvalue == NULL) {
-      return -1;
-    }
-    if (!PyArg_ParseTuple(subvalue, "iid", &ival, &mval, &dblvalue)) {
-      Py_DECREF(subvalue);
-      return -1;
+  for (i = 0; i < size; ++i)
+  {
+    if (!PyArg_ParseTuple(PySequence_Fast_GET_ITEM(value, i), "iid",
+        &newmem[i].i, &newmem[i].m, &newmem[i].value))
+    {
+      goto done;
     }
-    Py_DECREF(subvalue);
+  }
 
-    (*pv)[i].i = ival;
-    (*pv)[i].m = mval;
-    (*pv)[i].value = dblvalue;
-    (*npv) = i + 1;
+  if (size <= (Py_ssize_t)*npvmax) {
+    memcpy(*pv, newmem, sizeof(struct pvcard) * size);
+  } else { /* (size > (Py_ssize_t)*npvmax) */
+    free(*pv);
+    *npv = (int)size;
+    *pv = newmem;
+    newmem = NULL;
   }
+  *npv = (int)size;
 
-  return 0;
+  ret = 0;
+done:
+  Py_XDECREF(fastseq);
+  free(newmem);
+  return ret;
 }
 
 PyObject*
diff --git a/astropy/wcs/src/sip.c b/astropy/wcs/src/sip.c
index 6958709..75c1896 100644
--- a/astropy/wcs/src/sip.c
+++ b/astropy/wcs/src/sip.c
@@ -3,7 +3,7 @@
          mdroe at stsci.edu
 */
 
-#include "sip.h"
+#include "astropy_wcs/sip.h"
 
 #include <assert.h>
 #include <stdlib.h>
@@ -127,15 +127,13 @@ sip_init(
     }
   }
 
-  if (scratch_size > 0) {
-    scratch_size = (scratch_size + 1) * sizeof(double);
-    sip->scratch = malloc(scratch_size);
-    if (sip->scratch == NULL) {
-      sip_free(sip);
-      status = wcserr_set(
-        SIP_ERRMSG(WCSERR_MEMORY), "Memory allocation failed");
-      goto exit;
-    }
+  scratch_size = (scratch_size + 1) * sizeof(double);
+  sip->scratch = malloc(scratch_size);
+  if (sip->scratch == NULL) {
+    sip_free(sip);
+    status = wcserr_set(
+      SIP_ERRMSG(WCSERR_MEMORY), "Memory allocation failed");
+    goto exit;
   }
 
   sip->crpix[0] = crpix[0];
@@ -330,4 +328,3 @@ sip_foc2pix(
 
   return sip_foc2deltas(sip, naxes, nelem, foc, pix);
 }
-
diff --git a/astropy/wcs/src/sip_wrap.c b/astropy/wcs/src/sip_wrap.c
index 4153846..a013cf6 100644
--- a/astropy/wcs/src/sip_wrap.c
+++ b/astropy/wcs/src/sip_wrap.c
@@ -5,8 +5,8 @@
 
 #define NO_IMPORT_ARRAY
 
-#include "sip_wrap.h"
-#include "docstrings.h"
+#include "astropy_wcs/sip_wrap.h"
+#include "astropy_wcs/docstrings.h"
 #include "wcs.h"
 
 static void
diff --git a/astropy/wcs/src/str_list_proxy.c b/astropy/wcs/src/str_list_proxy.c
index eddf8a7..0ec7a51 100644
--- a/astropy/wcs/src/str_list_proxy.c
+++ b/astropy/wcs/src/str_list_proxy.c
@@ -5,7 +5,7 @@
 
 #define NO_IMPORT_ARRAY
 
-#include "pyutil.h"
+#include "astropy_wcs/pyutil.h"
 
 /***************************************************************************
  * List-of-strings proxy object
@@ -118,11 +118,7 @@ PyStrListProxy_getitem(
     return NULL;
   }
 
-  #if PY3K
-  return PyBytes_FromString(self->array[index]);
-  #else
-  return PyString_FromString(self->array[index]);
-  #endif
+  return get_string("string", self->array[index]);
 }
 
 static int
@@ -131,31 +127,12 @@ PyStrListProxy_setitem(
     Py_ssize_t index,
     PyObject* arg) {
 
-  char* value;
-  Py_ssize_t value_length;
-
   if (index > self->size) {
     PyErr_SetString(PyExc_IndexError, "index out of range");
     return -1;
   }
 
-  #if PY3K
-  if (PyBytes_AsStringAndSize(arg, &value, &value_length)) {
-  #else
-  if (PyString_AsStringAndSize(arg, &value, &value_length)) {
-  #endif
-      return -1;
-  }
-
-  if (value_length >= self->maxsize) {
-    PyErr_Format(PyExc_ValueError,
-                 "string must be less than %zd characters", self->maxsize);
-    return -1;
-  }
-
-  strncpy(self->array[index], value, self->maxsize);
-
-  return 0;
+  return set_string("string", arg, self->array[index], self->maxsize);
 }
 
 /*@null@*/ PyObject*
diff --git a/astropy/wcs/src/unit_list_proxy.c b/astropy/wcs/src/unit_list_proxy.c
index fdd0ad6..9abc239 100644
--- a/astropy/wcs/src/unit_list_proxy.c
+++ b/astropy/wcs/src/unit_list_proxy.c
@@ -5,8 +5,8 @@
 
 #define NO_IMPORT_ARRAY
 
-#include "pyutil.h"
-#include "str_list_proxy.h"
+#include "astropy_wcs/pyutil.h"
+#include "astropy_wcs/str_list_proxy.h"
 
 /***************************************************************************
  * List-of-units proxy object
diff --git a/astropy/wcs/src/util.c b/astropy/wcs/src/util.c
index 2c1532b..ccae802 100644
--- a/astropy/wcs/src/util.c
+++ b/astropy/wcs/src/util.c
@@ -5,7 +5,7 @@
 
 #define NO_IMPORT_ARRAY
 
-#include "util.h"
+#include "astropy_wcs/util.h"
 #include <math.h>
 #include <float.h>
 
diff --git a/astropy/wcs/src/wcslib_tabprm_wrap.c b/astropy/wcs/src/wcslib_tabprm_wrap.c
index ab39032..fea8c83 100644
--- a/astropy/wcs/src/wcslib_tabprm_wrap.c
+++ b/astropy/wcs/src/wcslib_tabprm_wrap.c
@@ -5,7 +5,7 @@
 
 #define NO_IMPORT_ARRAY
 
-#include "wcslib_tabprm_wrap.h"
+#include "astropy_wcs/wcslib_tabprm_wrap.h"
 
 #include <wcs.h>
 #include <wcsprintf.h>
@@ -17,7 +17,7 @@
  docstrings are written in doc/docstrings.py, which are then converted
  by setup.py into docstrings.h, which we include here.
 */
-#include "docstrings.h"
+#include "astropy_wcs/docstrings.h"
 
 /***************************************************************************
  * Helper functions                                                        *
diff --git a/astropy/wcs/src/wcslib_units_wrap.c b/astropy/wcs/src/wcslib_units_wrap.c
index 85ea6a5..2df9607 100644
--- a/astropy/wcs/src/wcslib_units_wrap.c
+++ b/astropy/wcs/src/wcslib_units_wrap.c
@@ -5,7 +5,7 @@
 
 #define NO_IMPORT_ARRAY
 
-#include "wcslib_units_wrap.h"
+#include "astropy_wcs/wcslib_units_wrap.h"
 
 #include <wcsunits.h>
 
@@ -15,7 +15,7 @@
  docstrings are written in doc/docstrings.py, which are then converted
  by setup.py into docstrings.h, which we include here.
 */
-#include "docstrings.h"
+#include "astropy_wcs/docstrings.h"
 
 /***************************************************************************
  * PyTabprm methods
diff --git a/astropy/wcs/src/wcslib_wrap.c b/astropy/wcs/src/wcslib_wrap.c
index 0ce4c67..53b06ff 100644
--- a/astropy/wcs/src/wcslib_wrap.c
+++ b/astropy/wcs/src/wcslib_wrap.c
@@ -5,11 +5,11 @@
 
 #define NO_IMPORT_ARRAY
 
-#include "wcslib_wrap.h"
-#include "wcslib_tabprm_wrap.h"
-#include "wcslib_wtbarr_wrap.h"
-#include "wcslib_units_wrap.h"
-#include "unit_list_proxy.h"
+#include "astropy_wcs/wcslib_wrap.h"
+#include "astropy_wcs/wcslib_tabprm_wrap.h"
+#include "astropy_wcs/wcslib_wtbarr_wrap.h"
+#include "astropy_wcs/wcslib_units_wrap.h"
+#include "astropy_wcs/unit_list_proxy.h"
 #include <structmember.h> /* from Python */
 
 #include <wcs.h>
@@ -19,8 +19,8 @@
 #include <wcsprintf.h>
 #include <wcsunits.h>
 
-#include "isnan.h"
-#include "distortion.h"
+#include "astropy_wcs/isnan.h"
+#include "astropy_wcs/distortion.h"
 
 /*
  It gets to be really tedious to type long docstrings in ANSI C syntax
@@ -28,7 +28,7 @@
  docstrings are written in doc/docstrings.py, which are then converted
  by setup.py into docstrings.h, which we include here.
 */
-#include "docstrings.h"
+#include "astropy_wcs/docstrings.h"
 
 /***************************************************************************
  * Helper functions                                                        *
@@ -54,6 +54,101 @@ is_valid_alt_key(
   return 1;
 }
 
+static int
+convert_rejections_to_warnings() {
+  char buf[1024];
+  const char *src;
+  char *dst;
+  int last_was_space;
+  PyObject *wcs_module = NULL;
+  PyObject *FITSFixedWarning = NULL;
+  int status = -1;
+
+  if (wcsprintf_buf()[0] == 0) {
+    return 0;
+  }
+
+  wcs_module = PyImport_ImportModule("astropy.wcs");
+  if (wcs_module == NULL) {
+    goto exit;
+  }
+
+  FITSFixedWarning = PyObject_GetAttrString(
+      wcs_module, "FITSFixedWarning");
+  if (FITSFixedWarning == NULL) {
+    goto exit;
+  }
+
+  src = wcsprintf_buf();
+  while (*src != 0) {
+    dst = buf;
+
+    /* Read the first line, removing any repeated spaces */
+    last_was_space = 0;
+    for (; *src != 0; ++src) {
+      if (*src == ' ') {
+        if (!last_was_space) {
+          *(dst++) = *src;
+          last_was_space = 1;
+        }
+      } else if (*src == '\n') {
+        ++src;
+        break;
+      } else {
+        *(dst++) = *src;
+        last_was_space = 0;
+      }
+    }
+
+    *(dst++) = '\n';
+
+    /* For the second line, remove everything up to and including the
+       first colon */
+    for (; *src != 0; ++src) {
+      if (*src == ':') {
+        ++src;
+        break;
+      }
+    }
+
+    /* Read to the end of the second line, removing any repeated
+       spaces */
+    last_was_space = 1;
+    for (; *src != 0; ++src) {
+      if (*src == ' ') {
+        if (!last_was_space) {
+          *(dst++) = *src;
+          last_was_space = 1;
+        }
+      } else if (*src == '\n') {
+        ++src;
+        break;
+      } else {
+        *(dst++) = *src;
+        last_was_space = 0;
+      }
+    }
+
+    /* NULL terminate the string */
+    *dst = 0;
+
+    /* Raise the warning.  Depending on the user's configuration, this
+       may raise an exception, and PyErr_WarnEx returns -1. */
+    if (PyErr_WarnEx(FITSFixedWarning, buf, 1)) {
+      goto exit;
+    }
+  }
+
+  status = 0;
+
+ exit:
+
+  Py_XDECREF(wcs_module);
+  Py_XDECREF(FITSFixedWarning);
+
+  return status;
+}
+
 /***************************************************************************
  * PyWcsprm methods
  */
@@ -111,7 +206,6 @@ PyWcsprm_init(
   PyObject*      colsel        = Py_None;
   PyArrayObject* colsel_array  = NULL;
   int*           colsel_ints   = NULL;
-  int            ctrl          = 0;
   int            nreject       = 0;
   int            nwcs          = 0;
   struct wcsprm* wcs           = NULL;
@@ -197,6 +291,8 @@ PyWcsprm_init(
             "relax must be True, False or an integer.");
         return -1;
       }
+      /* Mask out any invalid flags */
+      relax &= WCSHDR_all;
     }
 
     if (!is_valid_alt_key(key)) {
@@ -242,12 +338,55 @@ PyWcsprm_init(
       Py_DECREF(colsel_array);
     }
 
+    wcsprintf_set(NULL);
+
+    /* Call the header parser twice, the first time to get warnings
+       out about "rejected" keywords (which we can then send to Python
+       as warnings), and the second time to get a corrected wcsprm
+       object. */
+
+    if (keysel < 0) {
+      status = wcspih(
+          header,
+          (int)nkeyrec,
+          WCSHDR_reject,
+          2,
+          &nreject,
+          &nwcs,
+          &wcs);
+    } else {
+      status = wcsbth(
+          header,
+          (int)nkeyrec,
+          WCSHDR_reject,
+          2,
+          keysel,
+          colsel_ints,
+          &nreject,
+          &nwcs,
+          &wcs);
+    }
+
+    if (status != 0) {
+      free(colsel_ints);
+      PyErr_SetString(
+          PyExc_MemoryError,
+          "Memory allocation error.");
+      return -1;
+    }
+
+    if (convert_rejections_to_warnings(wcsprintf_buf())) {
+      free(colsel_ints);
+      wcsvfree(&nwcs, &wcs);
+      return -1;
+    }
+
     if (keysel < 0) {
       status = wcspih(
           header,
           (int)nkeyrec,
           relax,
-          ctrl,
+          0,
           &nreject,
           &nwcs,
           &wcs);
@@ -256,7 +395,7 @@ PyWcsprm_init(
           header,
           (int)nkeyrec,
           relax,
-          ctrl,
+          0,
           keysel,
           colsel_ints,
           &nreject,
@@ -354,7 +493,6 @@ PyWcsprm_find_all_wcs(
   PyObject*      relax_obj     = NULL;
   int            relax         = 0;
   int            keysel        = 0;
-  int            ctrl          = 0;
   int            nreject       = 0;
   int            nwcs          = 0;
   struct wcsprm* wcs           = NULL;
@@ -402,6 +540,50 @@ PyWcsprm_find_all_wcs(
           "relax must be True, False or an integer.");
       return NULL;
     }
+
+    /* Mask out any invalid flags */
+    relax &= WCSHDR_all;
+  }
+
+  /* Call the header parser twice, the first time to get warnings
+     out about "rejected" keywords (which we can then send to Python
+     as warnings), and the second time to get a corrected wcsprm
+     object. */
+
+  Py_BEGIN_ALLOW_THREADS
+  if (keysel < 0) {
+    status = wcspih(
+        header,
+        (int)nkeyrec,
+        WCSHDR_reject,
+        2,
+        &nreject,
+        &nwcs,
+        &wcs);
+  } else {
+    status = wcsbth(
+        header,
+        (int)nkeyrec,
+        WCSHDR_reject,
+        2,
+        keysel,
+        NULL,
+        &nreject,
+        &nwcs,
+        &wcs);
+  }
+  Py_END_ALLOW_THREADS
+
+  if (status != 0) {
+    PyErr_SetString(
+        PyExc_MemoryError,
+        "Memory allocation error.");
+    return NULL;
+  }
+
+  if (convert_rejections_to_warnings(wcsprintf_buf())) {
+    wcsvfree(&nwcs, &wcs);
+    return NULL;
   }
 
   Py_BEGIN_ALLOW_THREADS
@@ -410,7 +592,7 @@ PyWcsprm_find_all_wcs(
         header,
         (int)nkeyrec,
         relax,
-        ctrl,
+        0,
         &nreject,
         &nwcs,
         &wcs);
@@ -419,7 +601,7 @@ PyWcsprm_find_all_wcs(
         header,
         (int)nkeyrec,
         relax,
-        ctrl,
+        0,
         keysel,
         NULL,
         &nreject,
@@ -460,11 +642,6 @@ PyWcsprm_find_all_wcs(
     }
 
     subresult->x.flag = 0;
-    if (PyWcsprm_cset(subresult, 0)) {
-      Py_DECREF(result);
-      wcsvfree(&nwcs, &wcs);
-      return NULL;
-    }
     wcsprm_c2python(&subresult->x);
   }
 
@@ -746,13 +923,6 @@ PyWcsprm_get_ps(
     /*@unused@*/ PyObject* args,
     /*@unused@*/ PyObject* kwds) {
 
-  if (self->x.ps == NULL) {
-    PyErr_SetString(
-        PyExc_AssertionError,
-        "No PSi_ma records present.");
-    return NULL;
-  }
-
   return get_pscards("ps", self->x.ps, self->x.nps);
 }
 
@@ -762,13 +932,6 @@ PyWcsprm_get_pv(
     /*@unused@*/ PyObject* args,
     /*@unused@*/ PyObject* kwds) {
 
-  if (self->x.pv == NULL) {
-    PyErr_SetString(
-        PyExc_AssertionError,
-        "No PVi_ma records present.");
-    return NULL;
-  }
-
   return get_pvcards("pv", self->x.pv, self->x.npv);
 }
 
@@ -1326,18 +1489,14 @@ PyWcsprm_set_pv(
 
   if (is_null(self->x.pv)) {
     return NULL;
-  }
-
-  if (set_pvcards("pv", arg, &self->x.pv, &self->x.npv, &self->x.npvmax)) {
-    self->x.m_pv = self->x.pv;
+  } else if (set_pvcards("pv", arg, &self->x.pv, &self->x.npv, &self->x.npvmax)) {
     return NULL;
+  } else {
+    self->x.m_pv = self->x.pv;
+    note_change(self);
+    Py_INCREF(Py_None);
+    return Py_None;
   }
-  self->x.m_pv = self->x.pv;
-
-  note_change(self);
-
-  Py_INCREF(Py_None);
-  return Py_None;
 }
 
 /* TODO: This is convenient for debugging for now -- but it's not very
diff --git a/astropy/wcs/src/wcslib_wtbarr_wrap.c b/astropy/wcs/src/wcslib_wtbarr_wrap.c
index 8a2afdf..33d234e 100644
--- a/astropy/wcs/src/wcslib_wtbarr_wrap.c
+++ b/astropy/wcs/src/wcslib_wtbarr_wrap.c
@@ -5,7 +5,7 @@
 
 #define NO_IMPORT_ARRAY
 
-#include "wcslib_wtbarr_wrap.h"
+#include "astropy_wcs/wcslib_wtbarr_wrap.h"
 
 #include <wcs.h>
 
@@ -15,7 +15,7 @@
  docstrings are written in doc/docstrings.py, which are then converted
  by setup.py into docstrings.h, which we include here.
 */
-#include "docstrings.h"
+#include "astropy_wcs/docstrings.h"
 
 /***************************************************************************
  * Helper functions                                                        *
diff --git a/astropy/wcs/tests/__init__.py b/astropy/wcs/tests/__init__.py
index 975bdd1..31a39ec 100644
--- a/astropy/wcs/tests/__init__.py
+++ b/astropy/wcs/tests/__init__.py
@@ -1,2 +1,2 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-
+from __future__ import absolute_import, division, print_function, unicode_literals
diff --git a/astropy/wcs/tests/data/defunct_keywords.hdr b/astropy/wcs/tests/data/defunct_keywords.hdr
new file mode 100644
index 0000000..61ba12b
--- /dev/null
+++ b/astropy/wcs/tests/data/defunct_keywords.hdr
@@ -0,0 +1 @@
+SIMPLE  =                    T / Uncompressed file's conforms to FITS           BITPIX  =                   16 / data type of original image                    NAXIS   =                    2 / dimension of original image                    NAXIS1  =                  720 / length of original image axis                  NAXIS2  =                  720 / length of original image axis                  PSLIB_V = '34286   '                                                            MODULE_V= '3 [...]
\ No newline at end of file
diff --git a/astropy/wcs/tests/data/dist.fits b/astropy/wcs/tests/data/dist.fits
index 5f68377..457c63f 100644
Binary files a/astropy/wcs/tests/data/dist.fits and b/astropy/wcs/tests/data/dist.fits differ
diff --git a/astropy/wcs/tests/data/validate.fits b/astropy/wcs/tests/data/validate.fits
new file mode 100644
index 0000000..9c2ae0a
--- /dev/null
+++ b/astropy/wcs/tests/data/validate.fits
@@ -0,0 +1 @@
+SIMPLE  =                    T / conforms to FITS standard                      BITPIX  =                    8 / array data type                                NAXIS   =                    0 / number of array dimensions                     EXTEND  =                    T                                                  END                                                                                                                                                                          [...]
\ No newline at end of file
diff --git a/astropy/wcs/tests/data/validate.txt b/astropy/wcs/tests/data/validate.txt
new file mode 100644
index 0000000..3c8900e
--- /dev/null
+++ b/astropy/wcs/tests/data/validate.txt
@@ -0,0 +1,16 @@
+HDU 1:
+  WCS key ' ':
+    - RADECSYS= 'ICRS ' / Astrometric system
+      RADECSYS is non-standard, use RADESYSa.
+    - The WCS transformation has more axes (2) than the image it is
+      associated with (0)
+    - Removed redundant SCAMP distortion parameters because SIP
+      parameters are also present
+
+HDU 2:
+  WCS key ' ':
+    - The WCS transformation has more axes (3) than the image it is
+      associated with (0)
+    - 'celfix' made the change 'In CUNIT2 : Mismatched units type
+      'length': have 'Hz', want 'm''.
+    - 'unitfix' made the change 'Changed units: 'HZ      ' -> 'Hz''.
diff --git a/astropy/wcs/tests/test_pickle.py b/astropy/wcs/tests/test_pickle.py
index d4ee2eb..1bf851a 100644
--- a/astropy/wcs/tests/test_pickle.py
+++ b/astropy/wcs/tests/test_pickle.py
@@ -1,14 +1,15 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import absolute_import, division, print_function, unicode_literals
+
 import os
-import cPickle
 
 import numpy as np
 from numpy.testing import assert_array_almost_equal
 
+from ...extern.six.moves import cPickle
 from ...utils.data import get_pkg_data_contents, get_pkg_data_fileobj
 from ...utils.misc import NumpyRNGContext
 from ...io import fits
-from ...tests.helper import pytest
 from ... import wcs
 
 
diff --git a/astropy/wcs/tests/test_profiling.py b/astropy/wcs/tests/test_profiling.py
index fb095cb..ad0b64d 100644
--- a/astropy/wcs/tests/test_profiling.py
+++ b/astropy/wcs/tests/test_profiling.py
@@ -1,10 +1,11 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-import glob
+
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
+
 import os
-import sys
 
 import numpy as np
-from numpy.testing import assert_array_almost_equal
 
 from ...utils.data import get_pkg_data_filenames, get_pkg_data_contents
 from ...utils.misc import NumpyRNGContext
diff --git a/astropy/wcs/tests/test_wcs.py b/astropy/wcs/tests/test_wcs.py
index 19a4db6..d25f52a 100644
--- a/astropy/wcs/tests/test_wcs.py
+++ b/astropy/wcs/tests/test_wcs.py
@@ -1,20 +1,29 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
+from __future__ import absolute_import, division, print_function, unicode_literals
+
 import os
 import sys
 import warnings
 
 import numpy as np
 from numpy.testing import (
-    assert_array_almost_equal, assert_array_almost_equal_nulp)
+    assert_allclose, assert_array_almost_equal, assert_array_almost_equal_nulp)
 
-from ...tests.helper import raises
+from ...tests.helper import raises, catch_warnings, pytest
 from ... import wcs
 from ...utils.data import (
     get_pkg_data_filenames, get_pkg_data_contents, get_pkg_data_filename)
-from ...utils.misc import NumpyRNGContext
 from ...tests.helper import pytest
+from ...utils.misc import NumpyRNGContext
 
 
+try:
+    import scipy  # pylint: disable=W0611
+except ImportError:
+    HAS_SCIPY = False
+else:
+    HAS_SCIPY = True
+
 # test_maps() is a generator
 def test_maps():
 
@@ -216,14 +225,13 @@ def test_fixes():
             'data/nonstandard_units.hdr', encoding='binary')
         w = wcs.WCS(header)
 
-    with warnings.catch_warnings(record=True) as w:
-        warnings.simplefilter("always")
+    with catch_warnings(wcs.FITSFixedWarning) as w:
         run()
-        assert len(w) == 2
-        for item in w:
-            assert issubclass(item.category, wcs.FITSFixedWarning)
-            if 'unitfix' in str(item.message):
-                assert 'Hz' in str(item.message)
+
+    assert len(w) == 2
+    for item in w:
+        if 'unitfix' in str(item.message):
+            assert 'Hz' in str(item.message)
 
 
 def test_outside_sky():
@@ -379,15 +387,30 @@ def test_invalid_shape():
         xy2 = w.wcs_pix2world(xy, 1)
 
 
- at raises(wcs._wcs.InvalidTransformError)
-def test_find_all_wcs_crash():
-    """
-    Causes a double free without a recent fix in wcslib_wrap.C
-    """
-    from ...io import fits
+def test_warning_about_defunct_keywords():
+    def run():
+        header = get_pkg_data_contents(
+            'data/defunct_keywords.hdr', encoding='binary')
+        w = wcs.WCS(header)
+
+    with catch_warnings(wcs.FITSFixedWarning) as w:
+        run()
+
+    assert len(w) == 4
+    for item in w:
+        assert 'PCi_ja' in str(item.message)
+
 
-    with fits.open(get_pkg_data_filename("data/too_many_pv.hdr")) as hdulist:
-        wcses = wcs.find_all_wcs(hdulist[0].header)
+ at raises(wcs.FITSFixedWarning)
+def test_warning_about_defunct_keywords_exception():
+    def run():
+        header = get_pkg_data_contents(
+            'data/defunct_keywords.hdr', encoding='binary')
+        w = wcs.WCS(header)
+
+    with catch_warnings(wcs.FITSFixedWarning) as w:
+        warnings.simplefilter("error", wcs.FITSFixedWarning)
+        run()
 
 
 def test_to_header_string():
@@ -401,3 +424,57 @@ def test_to_header_string():
 def test_to_fits():
     w = wcs.WCS()
     w.to_fits()
+
+
+ at raises(wcs.InvalidTransformError)
+def test_find_all_wcs_crash():
+    """
+    Causes a double free without a recent fix in wcslib_wrap.C
+    """
+    with open(get_pkg_data_filename("data/too_many_pv.hdr")) as fd:
+        header = fd.read()
+    # We have to set fix=False here, because one of the fixing tasks is to
+    # remove redundant SCAMP distortion parameters when SIP distortion
+    # parameters are also present.
+    wcses = wcs.find_all_wcs(header, fix=False)
+
+
+def test_validate():
+    results = wcs.validate(get_pkg_data_filename("data/validate.fits"))
+    results_txt = repr(results)
+    with open(get_pkg_data_filename("data/validate.txt"), "r") as fd:
+        assert set([x.strip() for x in fd.readlines()]) == set([
+            x.strip() for x in results_txt.splitlines()])
+
+
+ at pytest.mark.skipif(str('not HAS_SCIPY'))
+def test_all_world2pix():
+    """Test all_world2pix, iterative inverse of all_pix2world"""
+    fits = get_pkg_data_filename('data/sip.fits')
+    w = wcs.WCS(fits)
+
+    tolerance = 1e-6
+    with NumpyRNGContext(123456789):
+        world = 0.1 * np.random.randn(100, 2)
+        for i in range(len(w.wcs.crval)):
+            world[:, i] += w.wcs.crval[i]
+        all_pix = w.all_world2pix(world, 0, tolerance=tolerance)
+        wcs_pix = w.wcs_world2pix(world, 0)
+        all_world = w.all_pix2world(all_pix, 0)
+
+        # First, check that the SIP distortion correction at least produces
+        # some different answers from the WCS-only transform.
+        assert np.any(all_pix != wcs_pix)
+
+        assert_allclose(all_world, world, rtol=0, atol=tolerance)
+
+
+def test_scamp_sip_distortion_parameters():
+    """
+    Test parsing of WCS parameters with redundant SIP and SCAMP distortion
+    parameters.
+    """
+    header = get_pkg_data_contents('data/validate.fits', encoding='binary')
+    w = wcs.WCS(header)
+    # Just check that this doesn't raise an exception.
+    w.all_pix2world(0, 0, 0)
diff --git a/astropy/wcs/tests/test_wcsprm.py b/astropy/wcs/tests/test_wcsprm.py
index e160357..b8cb1ac 100644
--- a/astropy/wcs/tests/test_wcsprm.py
+++ b/astropy/wcs/tests/test_wcsprm.py
@@ -1,9 +1,8 @@
 # Licensed under a 3-clause BSD style license - see LICENSE.rst
-from __future__ import print_function
+from __future__ import absolute_import, division, print_function, unicode_literals
 
 import locale
 import re
-import warnings
 
 from numpy.testing import assert_array_equal
 import numpy as np
@@ -15,31 +14,28 @@ from ...utils.data import get_pkg_data_contents, get_pkg_data_fileobj
 from ... import units as u
 
 
-def b(s):
-    return s.encode('ascii')
-
 ######################################################################
 
 
 def test_alt():
     w = _wcs.Wcsprm()
-    assert w.alt == b(" ")
-    w.alt = b("X")
-    assert w.alt == b("X")
+    assert w.alt == " "
+    w.alt = "X"
+    assert w.alt == "X"
     del w.alt
-    assert w.alt == b(" ")
+    assert w.alt == " "
 
 
 @raises(ValueError)
 def test_alt_invalid1():
     w = _wcs.Wcsprm()
-    w.alt = b("$")
+    w.alt = "$"
 
 
 @raises(ValueError)
 def test_alt_invalid2():
     w = _wcs.Wcsprm()
-    w.alt = b("  ")
+    w.alt = "  "
 
 
 def test_axis_types():
@@ -113,10 +109,10 @@ def test_cname():
     w = _wcs.Wcsprm()
     # Test that this works as an iterator
     for x in w.cname:
-        assert x == b('')
-    assert list(w.cname) == [b(''), b('')]
-    w.cname = [b('foo'), b('bar')]
-    assert list(w.cname) == [b('foo'), b('bar')]
+        assert x == ''
+    assert list(w.cname) == ['', '']
+    w.cname = [b'foo', 'bar']
+    assert list(w.cname) == ['foo', 'bar']
 
 
 @raises(TypeError)
@@ -215,21 +211,21 @@ def test_csyer():
 
 def test_ctype():
     w = _wcs.Wcsprm()
-    assert list(w.ctype) == [b(''), b('')]
-    w.ctype = [b('RA---TAN'), b('DEC--TAN')]
+    assert list(w.ctype) == ['', '']
+    w.ctype = [b'RA---TAN', 'DEC--TAN']
     assert_array_equal(w.axis_types, [2200, 2201])
     assert w.lat == 1
     assert w.lng == 0
-    assert w.lattyp == b('DEC')
-    assert w.lngtyp == b('RA')
-    assert list(w.ctype) == [b('RA---TAN'), b('DEC--TAN')]
-    w.ctype = [b('foo'), b('bar')]
+    assert w.lattyp == 'DEC'
+    assert w.lngtyp == 'RA'
+    assert list(w.ctype) == ['RA---TAN', 'DEC--TAN']
+    w.ctype = ['foo', 'bar']
     assert_array_equal(w.axis_types, [0, 0])
-    assert list(w.ctype) == [b('foo'), b('bar')]
+    assert list(w.ctype) == ['foo', 'bar']
     assert w.lat == -1
     assert w.lng == -1
-    assert w.lattyp == b('DEC')
-    assert w.lngtyp == b('RA')
+    assert w.lattyp == 'DEC'
+    assert w.lngtyp == 'RA'
 
 
 def test_cubeface():
@@ -278,21 +274,21 @@ def test_cylfix():
 
 def test_dateavg():
     w = _wcs.Wcsprm()
-    assert w.dateavg == b('')
+    assert w.dateavg == ''
     # TODO: When dateavg is verified, check that it works
 
 
 def test_dateobs():
     w = _wcs.Wcsprm()
-    assert w.dateobs == b('')
+    assert w.dateobs == ''
     # TODO: When dateavg is verified, check that it works
 
 
 def test_datfix():
     w = _wcs.Wcsprm()
-    w.dateobs = b('31/12/99')
+    w.dateobs = '31/12/99'
     assert w.datfix() == 0
-    assert w.dateobs == b('1999-12-31')
+    assert w.dateobs == '1999-12-31'
     assert w.mjdobs == 51543.0
 
 
@@ -318,7 +314,7 @@ def test_fix():
 
 def test_fix2():
     w = _wcs.Wcsprm()
-    w.dateobs = b('31/12/99')
+    w.dateobs = '31/12/99'
     assert w.fix() == {
         'cdfix': 'No change',
         'cylfix': 'No change',
@@ -326,13 +322,13 @@ def test_fix2():
         'spcfix': 'No change',
         'unitfix': 'No change',
         'celfix': 'No change'}
-    assert w.dateobs == b('1999-12-31')
+    assert w.dateobs == '1999-12-31'
     assert w.mjdobs == 51543.0
 
 
 def test_fix3():
     w = _wcs.Wcsprm()
-    w.dateobs = b('31/12/F9')
+    w.dateobs = '31/12/F9'
     assert w.fix() == {
         'cdfix': 'No change',
         'cylfix': 'No change',
@@ -340,7 +336,7 @@ def test_fix3():
         'spcfix': 'No change',
         'unitfix': 'No change',
         'celfix': 'No change'}
-    assert w.dateobs == b('31/12/F9')
+    assert w.dateobs == '31/12/F9'
     assert np.isnan(w.mjdobs)
 
 
@@ -363,7 +359,7 @@ def test_imgpix_matrix():
 
 
 @raises(AttributeError)
-def test_imgpix_matrix():
+def test_imgpix_matrix2():
     w = _wcs.Wcsprm()
     w.imgpix_matrix = None
 
@@ -396,7 +392,7 @@ def test_latpole():
 def test_lattyp():
     w = _wcs.Wcsprm()
     print(repr(w.lattyp))
-    assert w.lattyp == b("    ")
+    assert w.lattyp == "    "
 
 
 @raises(AttributeError)
@@ -418,7 +414,7 @@ def test_lng_set():
 
 def test_lngtyp():
     w = _wcs.Wcsprm()
-    assert w.lngtyp == b("    ")
+    assert w.lngtyp == "    "
 
 
 @raises(AttributeError)
@@ -456,9 +452,9 @@ def test_mjdobs():
 
 def test_name():
     w = _wcs.Wcsprm()
-    assert w.name == b('')
-    w.name = b('foo')
-    assert w.name == b('foo')
+    assert w.name == ''
+    w.name = 'foo'
+    assert w.name == 'foo'
 
 
 def test_naxis():
@@ -516,7 +512,7 @@ def test_piximg_matrix():
 
 
 @raises(AttributeError)
-def test_piximg_matrix():
+def test_piximg_matrix2():
     w = _wcs.Wcsprm()
     w.piximg_matrix = None
 
@@ -530,9 +526,9 @@ def test_print_contents():
 
 def test_radesys():
     w = _wcs.Wcsprm()
-    assert w.radesys == b('')
-    w.radesys = b('foo')
-    assert w.radesys == b('foo')
+    assert w.radesys == ''
+    w.radesys = 'foo'
+    assert w.radesys == 'foo'
 
 
 def test_restfrq():
@@ -595,9 +591,9 @@ def test_spec_set():
 
 def test_specsys():
     w = _wcs.Wcsprm()
-    assert w.specsys == b('')
-    w.specsys = b('foo')
-    assert w.specsys == b('foo')
+    assert w.specsys == ''
+    w.specsys = 'foo'
+    assert w.specsys == 'foo'
 
 
 def test_sptr():
@@ -607,16 +603,16 @@ def test_sptr():
 
 def test_ssysobs():
     w = _wcs.Wcsprm()
-    assert w.ssysobs == b('')
-    w.ssysobs = b('foo')
-    assert w.ssysobs == b('foo')
+    assert w.ssysobs == ''
+    w.ssysobs = 'foo'
+    assert w.ssysobs == 'foo'
 
 
 def test_ssyssrc():
     w = _wcs.Wcsprm()
-    assert w.ssyssrc == b('')
-    w.ssyssrc = b('foo')
-    assert w.ssyssrc == b('foo')
+    assert w.ssyssrc == ''
+    w.ssyssrc = 'foo'
+    assert w.ssyssrc == 'foo'
 
 
 def test_tab():
@@ -694,12 +690,12 @@ def test_detailed_err():
 
 
 def test_header_parse():
-    from astropy.io import fits
+    from ...io import fits
     with get_pkg_data_fileobj(
             'data/header_newlines.fits', encoding='binary') as test_file:
         hdulist = fits.open(test_file)
         w = wcs.WCS(hdulist[0].header)
-    assert w.wcs.ctype[0] == b'RA---TAN-SIP'
+    assert w.wcs.ctype[0] == 'RA---TAN-SIP'
 
 
 def test_locale():
@@ -717,3 +713,9 @@ def test_locale():
         assert re.search("[0-9]+,[0-9]*", w.to_header()) is None
     finally:
         locale.setlocale(locale.LC_NUMERIC, orig_locale)
+
+
+ at raises(UnicodeEncodeError)
+def test_unicode():
+    w = _wcs.Wcsprm()
+    w.alt = "\u2030"
diff --git a/astropy/wcs/wcs.py b/astropy/wcs/wcs.py
index 5bee9d2..32b3e2c 100644
--- a/astropy/wcs/wcs.py
+++ b/astropy/wcs/wcs.py
@@ -26,43 +26,44 @@ together in a pipeline:
 
    - `wcslib`_ WCS transformation (by a `~astropy.wcs.Wcsprm` object)
 """
-
-from __future__ import division  # confidence high
+from __future__ import absolute_import, division, print_function, unicode_literals
 
 # STDLIB
 import copy
 import io
 import os
-import sys
+import textwrap
 import warnings
 
 # THIRD-PARTY
 import numpy as np
 
 # LOCAL
+from ..extern import six
 from ..io import fits
 from . import _docutil as __
 try:
     from . import _wcs
 except ImportError:
     _wcs = None
+
 from ..utils import deprecated, deprecated_attribute
-from .. import log
+from ..utils.exceptions import AstropyWarning, AstropyUserWarning, AstropyDeprecationWarning
 
 if _wcs is not None:
     assert _wcs._sanity_check(), \
         "astropy.wcs did not pass its sanity check for your build " \
         "on your platform."
 
-if sys.version_info[0] >= 3:  # pragma: py3
-    string_types = (bytes, str)
-else:  # pragma: py2
-    string_types = (str, unicode)
-
 
 __all__ = ['FITSFixedWarning', 'WCS', 'find_all_wcs',
            'DistortionLookupTable', 'Sip', 'Tabprm', 'UnitConverter',
-           'Wcsprm', 'WCSBase']
+           'Wcsprm', 'WCSBase', 'validate', 'WcsError', 'SingularMatrixError',
+           'InconsistentAxisTypesError', 'InvalidTransformError',
+           'InvalidCoordinateError', 'NoSolutionError',
+           'InvalidSubimageSpecificationError',
+           'NonseparableSubimageCoordinateSystemError',
+           'NoWcsKeywordsFoundError', 'InvalidTabularParametersError']
 
 
 if _wcs is not None:
@@ -72,6 +73,17 @@ if _wcs is not None:
     UnitConverter = _wcs.UnitConverter
     Wcsprm = _wcs.Wcsprm
     Tabprm = _wcs.Tabprm
+    WcsError = _wcs.WcsError
+    SingularMatrixError = _wcs.SingularMatrixError
+    InconsistentAxisTypesError = _wcs.InconsistentAxisTypesError
+    InvalidTransformError = _wcs.InvalidTransformError
+    InvalidCoordinateError = _wcs.InvalidCoordinateError
+    NoSolutionError = _wcs.NoSolutionError
+    InvalidSubimageSpecificationError = _wcs.InvalidSubimageSpecificationError
+    NonseparableSubimageCoordinateSystemError = _wcs.NonseparableSubimageCoordinateSystemError
+    NoWcsKeywordsFoundError = _wcs.NoWcsKeywordsFoundError
+    InvalidTabularParametersError = _wcs.InvalidTabularParametersError
+
     # Copy all the constants from the C extension into this module's namespace
     for key, val in _wcs.__dict__.items():
         if (key.startswith('WCSSUB') or
@@ -90,6 +102,16 @@ else:
     Sip = object
     UnitConverter = object
     Tabprm = object
+    WcsError = None
+    SingularMatrixError = None
+    InconsistentAxisTypesError = None
+    InvalidTransformError = None
+    InvalidCoordinateError = None
+    NoSolutionError = None
+    InvalidSubimageSpecificationError = None
+    NonseparableSubimageCoordinateSystemError = None
+    NoWcsKeywordsFoundError = None
+    InvalidTabularParametersError = None
 
 
 # Additional relax bit flags
@@ -116,7 +138,7 @@ def _parse_keysel(keysel):
     return keysel_flags
 
 
-class FITSFixedWarning(Warning):
+class FITSFixedWarning(AstropyWarning):
     """
     The warning raised when the contents of the FITS header have been
     modified to be standards compliant.
@@ -140,7 +162,7 @@ class WCS(WCSBase):
         It is needed when header keywords point to a `Paper IV`_
         Lookup table distortion stored in a different extension.
 
-    key : string, optional
+    key : str, optional
         The name of a particular WCS transform to use.  This may be
         either ``' '`` or ``'A'``-``'Z'`` and corresponds to the
         ``\"a\"`` part of the ``CTYPEia`` cards.  *key* may only be
@@ -274,7 +296,7 @@ class WCS(WCSBase):
         else:
             keysel_flags = _parse_keysel(keysel)
 
-            if isinstance(header, string_types):
+            if isinstance(header, (six.text_type, six.binary_type)):
                 try:
                     is_path = os.path.exists(header)
                 except (IOError, ValueError):
@@ -297,7 +319,7 @@ class WCS(WCSBase):
                 try:
                     # Accept any dict-like object
                     new_header = fits.Header()
-                    for dict_key in header:
+                    for dict_key in header.keys():
                         new_header[dict_key] = header[dict_key]
                     header_string = new_header.tostring()
                 except TypeError:
@@ -305,7 +327,9 @@ class WCS(WCSBase):
                         "header must be a string, an astropy.io.fits.Header "
                         "object, or a dict-like object")
 
-            if isinstance(header_string, unicode):
+            header_string = header_string.strip()
+
+            if isinstance(header_string, six.text_type):
                 header_bytes = header_string.encode('ascii')
                 header_string = header_string
             else:
@@ -350,24 +374,17 @@ naxis kwarg.
 
             header_naxis = header.get('NAXIS', None)
             if header_naxis is not None and header_naxis < wcsprm.naxis:
-                log.info(
+                warnings.warn(
                     "The WCS transformation has more axes ({0:d}) than the "
                     "image it is associated with ({1:d})".format(
-                        wcsprm.naxis, header_naxis))
-
-        if fix:
-            fixes = wcsprm.fix()
-            for key, val in fixes.iteritems():
-                if val != "No change":
-                    warnings.warn(
-                        ("'{0}' made the change '{1}'. "
-                         "This FITS header contains non-standard content.").
-                        format(key, val),
-                        FITSFixedWarning)
+                        wcsprm.naxis, header_naxis), FITSFixedWarning)
 
         self._get_naxis(header)
         WCSBase.__init__(self, sip, cpdis, wcsprm, det2im)
 
+        if fix:
+            self.fix()
+
         for fd in close_fds:
             fd.close()
 
@@ -420,6 +437,64 @@ naxis kwarg.
     if _wcs is not None:
         sub.__doc__ = _wcs.Wcsprm.sub.__doc__
 
+    def _fix_scamp(self):
+        """
+        Remove SCAMP's PVi_m distortion parameters if SIP distortion parameters
+        are also present. Some projects (e.g., Palomar Transient Factory)
+        convert SCAMP's distortion parameters (which abuse the PVi_m cards) to
+        SIP. However, wcslib gets confused by the presence of both SCAMP and
+        SIP distortion parameters.
+
+        See https://github.com/astropy/astropy/issues/299.
+        """
+        # Nothing to be done if no WCS attached
+        if self.wcs is None:
+            return
+
+        # Nothing to be done if no PV parameters attached
+        pv = self.wcs.get_pv()
+        if not pv:
+            return
+
+        # Nothing to be done if axes don't use SIP distortion parameters
+        if not all(ctype.endswith('-SIP') for ctype in self.wcs.ctype):
+            return
+
+        # Nothing to be done if any radial terms are present...
+        # Loop over list to find any radial terms.
+        # Certain values of the `j' index are used for storing
+        # radial terms; refer to Equation (1) in
+        # <http://web.ipac.caltech.edu/staff/shupe/reprints/SIP_to_PV_SPIE2012.pdf>.
+        pv = np.asarray(pv)
+        # Loop over distinct values of `i' index
+        for i in set(pv[:, 0]):
+            # Get all values of `j' index for this value of `i' index
+            js = set(pv[:, 1][pv[:, 0] == i])
+            # Find max value of `j' index
+            max_j = max(js)
+            for j in (3, 11, 23, 39):
+                if j < max_j and j in js:
+                    return
+
+        self.wcs.set_pv([])
+        warnings.warn("Removed redundant SCAMP distortion parameters " +
+            "because SIP parameters are also present", FITSFixedWarning)
+
+    def fix(self):
+        """
+        Perform the fix operations from wcslib, and warn about any
+        changes it has made.
+        """
+        if self.wcs is not None:
+            self._fix_scamp()
+            fixes = self.wcs.fix()
+            for key, val in six.iteritems(fixes):
+                if val != "No change":
+                    warnings.warn(
+                        ("'{0}' made the change '{1}'.").
+                        format(key, val),
+                        FITSFixedWarning)
+
     def calcFootprint(self, header=None, undistort=True, axes=None):
         """
         Calculates the footprint of the image on the sky.
@@ -456,7 +531,7 @@ naxis kwarg.
                     naxis1 = self._naxis1
                     naxis2 = self._naxis2
                 except AttributeError:
-                    print("Need a valid header in order to calculate footprint\n")
+                    warnings.warn("Need a valid header in order to calculate footprint\n", AstropyUserWarning)
                     return None
             else:
                 naxis1 = header.get('NAXIS1', None)
@@ -484,44 +559,92 @@ naxis kwarg.
         Create a `Paper IV`_ type lookup table for detector to image
         plane correction.
         """
-        cpdis = [None, None]
-        crpix = [0., 0.]
-        crval = [0., 0.]
-        cdelt = [1., 1.]
-
         if fobj is None:
             return (None, None)
 
         if not isinstance(fobj, fits.HDUList):
             return (None, None)
 
-        d_error = header.get('D2IMERR', 0.0)
-        if d_error < err:
+        try:
+            axiscorr = header[str('AXISCORR')]
+            d2imdis = self._read_d2im_old_format(header, fobj, axiscorr)
+            return d2imdis
+        except KeyError:
+            pass
+
+        dist = 'D2IMDIS'
+        d_kw = 'D2IM'
+        err_kw = 'D2IMERR'
+        tables = {}
+        for i in range(1, self.naxis + 1):
+            d_error = header.get(err_kw + str(i), 0.0)
+            if d_error < err:
+                tables[i] = None
+                continue
+            distortion = dist + str(i)
+            if distortion in header:
+                dis = header[distortion].lower()
+                if dis == 'lookup':
+                    assert isinstance(fobj, fits.HDUList), ('An astropy.io.fits.HDUList'
+                                'is required for Lookup table distortion.')
+                    dp = (d_kw + str(i)).strip()
+                    d_extver = header.get(dp + '.EXTVER', 1)
+                    if i == header[dp + '.AXIS.{0:d}'.format(i)]:
+                        d_data = fobj[str('D2IMARR'), d_extver].data
+                    else:
+                        d_data = (fobj[str('D2IMARR'), d_extver].data).transpose()
+                    d_header = fobj[str('D2IMARR'), d_extver].header
+                    d_crpix = (d_header.get(str('CRPIX1'), 0.0), d_header.get(str('CRPIX2'), 0.0))
+                    d_crval = (d_header.get(str('CRVAL1'), 0.0), d_header.get(str('CRVAL2'), 0.0))
+                    d_cdelt = (d_header.get(str('CDELT1'), 1.0), d_header.get(str('CDELT2'), 1.0))
+                    d_lookup = DistortionLookupTable(d_data, d_crpix,
+                                                     d_crval, d_cdelt)
+                    tables[i] = d_lookup
+                else:
+                    warnings.warn('Polynomial distortion is not implemented.\n', AstropyUserWarning)
+            else:
+                tables[i] = None
+        if not tables:
             return (None, None)
+        else:
+            return (tables.get(1), tables.get(2))
 
+    def _read_d2im_old_format(self, header, fobj, axiscorr):
+        warnings.warn("The use of ``AXISCORR`` for D2IM correction has been deprecated."
+                      "The new style of this correction is described at"
+                      ""
+                      "PyWCS will read in files with ``AXISCORR`` but to_fits() will write"
+                      "out files in the new style",
+                      AstropyDeprecationWarning)
+        cpdis = [None, None]
+        crpix = [0., 0.]
+        crval = [0., 0.]
+        cdelt = [1., 1.]
         try:
-            d2im_data = fobj[('D2IMARR', 1)].data
+            d2im_data = fobj[(str('D2IMARR'), 1)].data
         except KeyError:
             return (None, None)
         except AttributeError:
             return (None, None)
+
         d2im_data = np.array([d2im_data])
-        d2im_hdr = fobj[('D2IMARR', 1)].header
-        naxis = d2im_hdr['NAXIS']
+        d2im_hdr = fobj[(str('D2IMARR'), 1)].header
+        naxis = d2im_hdr[str('NAXIS')]
 
         for i in range(1, naxis + 1):
-            crpix[i - 1] = d2im_hdr.get('CRPIX' + str(i), 0.0)
-            crval[i - 1] = d2im_hdr.get('CRVAL' + str(i), 0.0)
-            cdelt[i - 1] = d2im_hdr.get('CDELT' + str(i), 1.0)
+            crpix[i - 1] = d2im_hdr.get(str('CRPIX') + str(i), 0.0)
+            crval[i - 1] = d2im_hdr.get(str('CRVAL') + str(i), 0.0)
+            cdelt[i - 1] = d2im_hdr.get(str('CDELT') + str(i), 1.0)
 
         cpdis = DistortionLookupTable(d2im_data, crpix, crval, cdelt)
 
-        axiscorr = header.get('AXISCORR', None)
-
         if axiscorr == 1:
             return (cpdis, None)
-        else:
+        elif axiscorr == 2:
             return (None, cpdis)
+        else:
+            warnings.warn("Expected AXISCORR to be 1 or 2", AstropyUserWarning)
+            return (None, None)
 
     def _write_det2im(self, hdulist):
         """
@@ -529,30 +652,46 @@ naxis kwarg.
         `astropy.io.fits.HDUList`.
         """
 
-        det2im1 = self.det2im1
-        det2im2 = self.det2im2
-        if det2im1 is not None and det2im2 is None:
-            hdulist[0].header.update('AXISCORR', 1)
-            det2im = det2im1
-        elif det2im1 is None and det2im2 is not None:
-            hdulist[0].header.update('AXISCORR', 0)
-            det2im = det2im2
-        elif det2im1 is None and det2im2 is None:
+        if self.det2im1 is None and self.det2im2 is None:
             return
-        else:
-            raise ValueError("Saving both distortion images is not supported")
+        dist = 'D2IMDIS'
+        d_kw = 'D2IM'
+        err_kw = 'D2IMERR'
 
-        image = fits.ImageHDU(det2im.data[0], name='D2IMARR')
-        header = image.header
-
-        header.update('CRPIX1', det2im.crpix[0])
-        header.update('CRPIX2', det2im.crpix[1])
-        header.update('CRVAL1', det2im.crval[0])
-        header.update('CRVAL2', det2im.crval[1])
-        header.update('CDELT1', det2im.cdelt[0])
-        header.update('CDELT2', det2im.cdelt[1])
+        def write_d2i(num, det2im):
+            if det2im is None:
+                return
+            str('{0}{1:d}').format(dist, num),
+            hdulist[0].header[str('{0}{1:d}').format(dist, num)] = (
+                'LOOKUP', 'Detector to image correction type')
+            hdulist[0].header[str('{0}{1:d}.EXTVER').format(d_kw, num)] = (
+                num, 'Version number of WCSDVARR extension')
+            hdulist[0].header[str('{0}{1:d}.NAXES').format(d_kw, num)] = (
+                len(det2im.data.shape), 'Number of independent variables in d2im function')
+            for i in range(det2im.data.ndim):
+                hdulist[0].header[str('{0}{1:d}.AXIS.{2:d}').format(d_kw, num, i + 1)] = (
+                    i + 1, 'Axis number of the jth independent variable in a d2im function')
+
+            image = fits.ImageHDU(det2im.data, name=str('D2IMARR'))
+            header = image.header
 
-        hdulist.append(image)
+            header[str('CRPIX1')] = (det2im.crpix[0],
+                                     'Coordinate system reference pixel')
+            header[str('CRPIX2')] = (det2im.crpix[1],
+                                     'Coordinate system reference pixel')
+            header[str('CRVAL1')] = (det2im.crval[0],
+                                     'Coordinate system value at reference pixel')
+            header[str('CRVAL2')] = (det2im.crval[1],
+                                     'Coordinate system value at reference pixel')
+            header[str('CDELT1')] = (det2im.cdelt[0],
+                                     'Coordinate increment along axis')
+            header[str('CDELT2')] = (det2im.cdelt[1],
+                                     'Coordinate increment along axis')
+            image.update_ext_version(
+                int(hdulist[0].header[str('{0}{1:d}.EXTVER').format(d_kw, num)]))
+            hdulist.append(image)
+        write_d2i(1, self.det2im1)
+        write_d2i(2, self.det2im2)
 
     def _read_distortion_kw(self, header, fobj, dist='CPDIS', err=0.0):
         """
@@ -563,15 +702,15 @@ naxis kwarg.
         If no `Paper IV`_ distortion keywords are found, ``(None,
         None)`` is returned.
         """
-        if isinstance(header, string_types):
+        if isinstance(header, (six.text_type, six.binary_type)):
             return (None, None)
 
         if dist == 'CPDIS':
-            d_kw = 'DP'
-            err_kw = 'CPERR'
+            d_kw = str('DP')
+            err_kw = str('CPERR')
         else:
-            d_kw = 'DQ'
-            err_kw = 'CQERR'
+            d_kw = str('DQ')
+            err_kw = str('CQERR')
 
         tables = {}
         for i in range(1, self.naxis + 1):
@@ -587,23 +726,23 @@ naxis kwarg.
                         'An astropy.io.fits.HDUList is required for ' + \
                         'Lookup table distortion.'
                     dp = (d_kw + str(i)).strip()
-                    d_extver = header.get(dp + '.EXTVER', 1)
-                    if i == header[dp + '.AXIS.' + str(i)]:
-                        d_data = fobj['WCSDVARR', d_extver].data
+                    d_extver = header.get(dp + str('.EXTVER'), 1)
+                    if i == header[dp + str('.AXIS.') + str(i)]:
+                        d_data = fobj[str('WCSDVARR'), d_extver].data
                     else:
-                        d_data = (fobj['WCSDVARR', d_extver].data).transpose()
-                    d_header = fobj['WCSDVARR', d_extver].header
-                    d_crpix = (d_header.get('CRPIX1', 0.0),
-                               d_header.get('CRPIX2', 0.0))
-                    d_crval = (d_header.get('CRVAL1', 0.0),
-                               d_header.get('CRVAL2', 0.0))
-                    d_cdelt = (d_header.get('CDELT1', 1.0),
-                               d_header.get('CDELT2', 1.0))
-                    d_lookup = DistortionLookupTable(d_data, d_crpix,
-                                                     d_crval, d_cdelt)
+                        d_data = (fobj[str('WCSDVARR'), d_extver].data).transpose()
+
+                    d_header = fobj[str('WCSDVARR'), d_extver].header
+                    d_crpix = (d_header.get(str('CRPIX1'), 0.0),
+                               d_header.get(str('CRPIX2'), 0.0))
+                    d_crval = (d_header.get(str('CRVAL1'), 0.0),
+                               d_header.get(str('CRVAL2'), 0.0))
+                    d_cdelt = (d_header.get(str('CDELT1'), 1.0),
+                               d_header.get(str('CDELT2'), 1.0))
+                    d_lookup = DistortionLookupTable(d_data, d_crpix, d_crval, d_cdelt)
                     tables[i] = d_lookup
                 else:
-                    print('Polynomial distortion is not implemented.\n')
+                    warnings.warn('Polynomial distortion is not implemented.\n', AstropyUserWarning)
             else:
                 tables[i] = None
 
@@ -621,57 +760,39 @@ naxis kwarg.
             return
 
         if dist == 'CPDIS':
-            d_kw = 'DP'
-            err_kw = 'CPERR'
+            d_kw = str('DP')
+            err_kw = str('CPERR')
         else:
-            d_kw = 'DQ'
-            err_kw = 'CQERR'
+            d_kw = str('DQ')
+            err_kw = str('CQERR')
 
         def write_dist(num, cpdis):
             if cpdis is None:
                 return
 
-            hdulist[0].header.update(
-                '{0}{1:d}'.format(dist, num),
-                ('LOOKUP', 'Prior distortion function type'))
-            hdulist[0].header.update(
-                '{0}{1:d}.EXTVER'.format(d_kw, num),
-                (num, 'Version number of WCSDVARR extension'))
-            hdulist[0].header.update(
-                '{0}{1:d}.NAXES'.format(d_kw, num),
-                (len(cpdis.data.shape),
-                 'Number of independent variables in distortion function'))
+            hdulist[0].header[str('{0}{1:d}').format(dist, num)] = (
+                'LOOKUP', 'Prior distortion function type')
+            hdulist[0].header[str('{0}{1:d}.EXTVER').format(d_kw, num)] = (
+                num, 'Version number of WCSDVARR extension')
+            hdulist[0].header[str('{0}{1:d}.NAXES').format(d_kw, num)] = (
+                len(cpdis.data.shape), 'Number of independent variables in distortion function')
 
             for i in range(cpdis.data.ndim):
-                hdulist[0].header.update(
-                    '{0}{1:d}.AXIS.{2:d}'.format(d_kw, num, i + 1),
-                    (i + 1, 'Axis number of the jth independent variable in a '
-                     'distortion function'))
+                hdulist[0].header[str('{0}{1:d}.AXIS.{2:d}').format(d_kw, num, i + 1)] = (
+                    i + 1,
+                    'Axis number of the jth independent variable in a distortion function')
 
-            image = fits.ImageHDU(cpdis.data, name='WCSDVARR')
+            image = fits.ImageHDU(cpdis.data, name=str('WCSDVARR'))
             header = image.header
 
-            header.update(
-                'CRPIX1',
-                (cpdis.crpix[0], 'Coordinate system reference pixel'))
-            header.update(
-                'CRPIX2',
-                (cpdis.crpix[1], 'Coordinate system reference pixel'))
-            header.update(
-                'CRVAL1',
-                (cpdis.crval[0], 'Coordinate system value at reference pixel'))
-            header.update(
-                'CRVAL2',
-                (cpdis.crval[1], 'Coordinate system value at reference pixel'))
-            header.update(
-                'CDELT1',
-                (cpdis.cdelt[0], 'Coordinate increment along axis'))
-            header.update(
-                'CDELT2',
-                (cpdis.cdelt[1], 'Coordinate increment along axis'))
+            header[str('CRPIX1')] = (cpdis.crpix[0], 'Coordinate system reference pixel')
+            header[str('CRPIX2')] = (cpdis.crpix[1], 'Coordinate system reference pixel')
+            header[str('CRVAL1')] = (cpdis.crval[0], 'Coordinate system value at reference pixel')
+            header[str('CRVAL2')] = (cpdis.crval[1], 'Coordinate system value at reference pixel')
+            header[str('CDELT1')] = (cpdis.cdelt[0], 'Coordinate increment along axis')
+            header[str('CDELT2')] = (cpdis.cdelt[1], 'Coordinate increment along axis')
             image.update_ext_version(
-                int(hdulist[0].header['{0}{1:d}.EXTVER'.format(d_kw, num)]))
-
+                int(hdulist[0].header[str('{0}{1:d}.EXTVER').format(d_kw, num)]))
             hdulist.append(image)
 
         write_dist(1, self.cpdis1)
@@ -684,28 +805,32 @@ naxis kwarg.
 
         If no `SIP`_ header keywords are found, ``None`` is returned.
         """
-        if isinstance(header, string_types):
+        if isinstance(header, (six.text_type, six.binary_type)):
             # TODO: Parse SIP from a string without pyfits around
             return None
 
-        if "A_ORDER" in header:
-            if "B_ORDER" not in header:
+        if str("A_ORDER") in header and header[str('A_ORDER')] > 1:
+            if str("B_ORDER") not in header:
                 raise ValueError(
                     "A_ORDER provided without corresponding B_ORDER "
                     "keyword for SIP distortion")
 
-            m = int(header["A_ORDER"])
+            m = int(header[str("A_ORDER")])
             a = np.zeros((m + 1, m + 1), np.double)
             for i in range(m + 1):
                 for j in range(m - i + 1):
-                    a[i, j] = header.get(("A_{0}_{1}".format(i, j)), 0.0)
-
-            m = int(header["B_ORDER"])
-            b = np.zeros((m + 1, m + 1), np.double)
-            for i in range(m + 1):
-                for j in range(m - i + 1):
-                    b[i, j] = header.get(("B_{0}_{1}".format(i, j)), 0.0)
-        elif "B_ORDER" in header:
+                    a[i, j] = header.get((str("A_{0}_{1}").format(i, j)), 0.0)
+
+            m = int(header[str("B_ORDER")])
+            if m > 1:
+                b = np.zeros((m + 1, m + 1), np.double)
+                for i in range(m + 1):
+                    for j in range(m - i + 1):
+                        b[i, j] = header.get((str("B_{0}_{1}").format(i, j)), 0.0)
+            else:
+                a = None
+                b = None
+        elif str("B_ORDER") in header and header[str('B_ORDER')] > 1:
             raise ValueError(
                 "B_ORDER provided without corresponding A_ORDER " +
                 "keyword for SIP distortion")
@@ -713,24 +838,28 @@ naxis kwarg.
             a = None
             b = None
 
-        if "AP_ORDER" in header:
-            if "BP_ORDER" not in header:
+        if str("AP_ORDER") in header and header[str('AP_ORDER')] > 1:
+            if str("BP_ORDER") not in header:
                 raise ValueError(
                     "AP_ORDER provided without corresponding BP_ORDER "
                     "keyword for SIP distortion")
 
-            m = int(header["AP_ORDER"])
+            m = int(header[str("AP_ORDER")])
             ap = np.zeros((m + 1, m + 1), np.double)
             for i in range(m + 1):
                 for j in range(m - i + 1):
                     ap[i, j] = header.get("AP_{0}_{1}".format(i, j), 0.0)
 
-            m = int(header["BP_ORDER"])
-            bp = np.zeros((m + 1, m + 1), np.double)
-            for i in range(m + 1):
-                for j in range(m - i + 1):
-                    bp[i, j] = header.get("BP_{0}_{1}".format(i, j), 0.0)
-        elif "BP_ORDER" in header:
+            m = int(header[str("BP_ORDER")])
+            if m > 1:
+                bp = np.zeros((m + 1, m + 1), np.double)
+                for i in range(m + 1):
+                    for j in range(m - i + 1):
+                        bp[i, j] = header.get("BP_{0}_{1}".format(i, j), 0.0)
+            else:
+                ap = None
+                bp = None
+        elif str("BP_ORDER") in header and header[str('BP_ORDER')] > 1:
             raise ValueError(
                 "BP_ORDER provided without corresponding AP_ORDER "
                 "keyword for SIP distortion")
@@ -741,7 +870,7 @@ naxis kwarg.
         if a is None and b is None and ap is None and bp is None:
             return None
 
-        if "CRPIX1" not in header or "CRPIX2" not in header:
+        if str("CRPIX1") not in header or str("CRPIX2") not in header:
             raise ValueError(
                 "Header has SIP keywords without CRPIX keywords")
 
@@ -764,20 +893,17 @@ naxis kwarg.
             if a is None:
                 return
             size = a.shape[0]
-            keywords['{0}_ORDER'.format(name)] = size - 1
+            keywords[str('{0}_ORDER').format(name)] = size - 1
             for i in range(size):
                 for j in range(size - i):
                     if a[i, j] != 0.0:
                         keywords[
-                            '{0}_{1:d}_{2:d}'.format(name, i, j)] = a[i, j]
-
-        write_array('A', self.sip.a)
-        write_array('B', self.sip.b)
-        write_array('AP', self.sip.ap)
-        write_array('BP', self.sip.bp)
+                            str('{0}_{1:d}_{2:d}').format(name, i, j)] = a[i, j]
 
-        keywords['CRPIX1'] = self.sip.crpix[0]
-        keywords['CRPIX2'] = self.sip.crpix[1]
+        write_array(str('A'), self.sip.a)
+        write_array(str('B'), self.sip.b)
+        write_array(str('AP'), self.sip.ap)
+        write_array(str('BP'), self.sip.bp)
 
         return keywords
 
@@ -1011,6 +1137,11 @@ naxis kwarg.
 
         {1}
 
+        tolerance : float, optional
+            Tolerance of solution. Iteration terminates when the iterative
+            solver estimates that the true solution is within this many pixels
+            current estimate. Default value is 1e-6 (pixels).
+
         Returns
         -------
 
@@ -1059,6 +1190,94 @@ naxis kwarg.
     def wcs_pix2sky(self, *args, **kwargs):
         return self.wcs_pix2world(*args, **kwargs)
 
+    def _all_world2pix(self, world, origin, tolerance, **kwargs):
+        try:
+            import scipy.optimize
+        except ImportError:
+            raise ImportError(
+                "You must have Scipy installed to use this method. " +
+                "See <http://www.scipy.org>.")
+        pix = []
+        for i in range(len(world)):
+            x0 = self.wcs_world2pix(np.atleast_2d(world[i]), origin,
+                **kwargs).flatten()
+            func = lambda pix: (self.all_pix2world(np.atleast_2d(pix),
+                origin, **kwargs) - world[i]).flatten()
+            # Use Broyden inverse because it is (a) present in a wide range of
+            # Scipy version, (b) provides an option for the absolute tolerance,
+            # and (c) is suitable for small-scale problems (i.e., a few
+            # variables, rather than hundreds of variables).
+            soln = scipy.optimize.broyden1(func, x0, x_tol=tolerance)
+            pix.append(soln.flatten())
+        return np.asarray(pix)
+
+    def all_world2pix(self, *args, **kwargs):
+        if self.wcs is None:
+            raise ValueError("No basic WCS settings were created.")
+        tolerance = kwargs.pop('tolerance', 1e-6)
+        return self._array_converter(lambda *args, **kwargs:
+            self._all_world2pix(*args, tolerance=tolerance, **kwargs),
+            'input', *args,
+            **kwargs)
+    all_world2pix.__doc__ = """
+        Transforms world coordinates to pixel coordinates, using numerical
+        iteration to invert the method `~astropy.wcs.WCS.all_pix2world` within a
+        tolerance of 1e-6 pixels.
+
+        Note that to use this function, you must have Scipy installed.
+
+        Parameters
+        ----------
+        {0}
+
+            For a transformation that is not two-dimensional, the
+            two-argument form must be used.
+
+        {1}
+
+        Returns
+        -------
+
+        {2}
+
+        Notes
+        -----
+        The order of the axes for the input world array is determined by
+        the `CTYPEia` keywords in the FITS header, therefore it may
+        not always be of the form (*ra*, *dec*).  The
+        `~astropy.wcs.Wcsprm.lat`, `~astropy.wcs.Wcsprm.lng`,
+        `~astropy.wcs.Wcsprm.lattyp` and `~astropy.wcs.Wcsprm.lngtyp`
+        members can be used to determine the order of the axes.
+
+        Raises
+        ------
+        MemoryError
+            Memory allocation failed.
+
+        SingularMatrixError
+            Linear transformation matrix is singular.
+
+        InconsistentAxisTypesError
+            Inconsistent or unrecognized coordinate axis types.
+
+        ValueError
+            Invalid parameter value.
+
+        ValueError
+            Invalid coordinate transformation parameters.
+
+        ValueError
+            x- and y-coordinate arrays are not the same size.
+
+        InvalidTransformError
+            Invalid coordinate transformation parameters.
+
+        InvalidTransformError
+            Ill-conditioned coordinate transformation parameters.
+        """.format(__.TWO_OR_MORE_ARGS('naxis', 8),
+                   __.RA_DEC_ORDER(8),
+                   __.RETURNS('pixel coordinates', 8))
+
     def wcs_world2pix(self, *args, **kwargs):
         if self.wcs is None:
             raise ValueError("No basic WCS settings were created.")
@@ -1281,7 +1500,7 @@ naxis kwarg.
         """.format(__.TWO_OR_MORE_ARGS('2', 8),
                    __.RETURNS('pixel coordinates', 8))
 
-    def to_fits(self, relax=False):
+    def to_fits(self, relax=False, key=None):
         """
         Generate an `astropy.io.fits.HDUList` object with all of the
         information stored in this object.  This should be logically identical
@@ -1304,12 +1523,17 @@ naxis kwarg.
             - `int`: a bit field selecting specific extensions to
               write.  See :ref:`relaxwrite` for details.
 
+        key : str
+            The name of a particular WCS transform to use.  This may be
+            either ``' '`` or ``'A'``-``'Z'`` and corresponds to the ``"a"``
+            part of the ``CTYPEia`` cards.
+
         Returns
         -------
         hdulist : `astropy.io.fits.HDUList`
         """
 
-        header = self.to_header(relax=relax)
+        header = self.to_header(relax=relax, key=key)
 
         hdu = fits.PrimaryHDU(header=header)
         hdulist = fits.HDUList(hdu)
@@ -1319,7 +1543,7 @@ naxis kwarg.
 
         return hdulist
 
-    def to_header(self, relax=False):
+    def to_header(self, relax=False, key=None):
         """
         Generate an `astropy.io.fits.Header` object with the basic WCS and SIP
         information stored in this object.  This should be logically
@@ -1346,6 +1570,10 @@ naxis kwarg.
 
             - `int`: a bit field selecting specific extensions to
               write.  See :ref:`relaxwrite` for details.
+        key : str
+            The name of a particular WCS transform to use.  This may be
+            either ``' '`` or ``'A'``-``'Z'`` and corresponds to the ``"a"``
+            part of the ``CTYPEia`` cards.
 
         Returns
         -------
@@ -1382,7 +1610,11 @@ naxis kwarg.
              `to_header` tries hard to write meaningful comments.
 
           8. Keyword order may be changed.
+
+
         """
+        if key is not None:
+            self.wcs.alt = key
 
         if relax not in (True, False):
             do_sip = relax & WCSHDO_SIP
@@ -1398,7 +1630,7 @@ naxis kwarg.
 
         if do_sip and self.sip is not None:
             for key, val in self._write_sip_kw().items():
-                header.update(key, val)
+                header[key] = val
 
         return header
 
@@ -1416,10 +1648,10 @@ naxis kwarg.
 
         Parameters
         ----------
-        filename : string, optional
+        filename : str, optional
             Output file name - default is ``'footprint.reg'``
 
-        color : string, optional
+        color : str, optional
             Color to use when plotting the line.
 
         width : int, optional
@@ -1450,9 +1682,10 @@ naxis kwarg.
     def _get_naxis(self, header=None):
         self._naxis1 = 0
         self._naxis2 = 0
-        if header is not None and not isinstance(header, string_types):
-            self.naxis1 = header.get('NAXIS1', 0)
-            self.naxis2 = header.get('NAXIS2', 0)
+        if (header is not None and
+            not isinstance(header, (six.text_type, six.binary_type))):
+            self._naxis1 = header.get('NAXIS1', 0)
+            self._naxis2 = header.get('NAXIS2', 0)
 
     def rotateCD(self, theta):
         _theta = np.deg2rad(theta)
@@ -1472,10 +1705,17 @@ naxis kwarg.
                 self.wcs.cd[0, 0], self.wcs.cd[0, 1]))
             print('CD_21  CD_22: {!r} {!r}'.format(
                 self.wcs.cd[1, 0], self.wcs.cd[1, 1]))
+        else:
+            print('PC_11  PC_12: {!r} {!r}'.format(
+                self.wcs.pc[0, 0], self.wcs.pc[0, 1]))
+            print('PC_21  PC_22: {!r} {!r}'.format(
+                self.wcs.pc[1, 0], self.wcs.pc[1, 1]))
         print('CRVAL    : {!r} {!r}'.format(
             self.wcs.crval[0], self.wcs.crval[1]))
         print('CRPIX    : {!r} {!r}'.format(
             self.wcs.crpix[0], self.wcs.crpix[1]))
+        print('CDELT    : {!r} {!r}'.format(
+            self.wcs.cdelt[0], self.wcs.cdelt[1]))
         print('NAXIS    : {!r} {!r}'.format(
             self.naxis1, self.naxis2))
 
@@ -1607,13 +1847,14 @@ def __WCS_unpickle__(cls, dct, fits_data):
     return self
 
 
-def find_all_wcs(header, relax=True, keysel=None):
+def find_all_wcs(header, relax=True, keysel=None, fix=True,
+                 _do_set=True):
     """
     Find all the WCS transformations in the given header.
 
     Parameters
     ----------
-    header : string or astropy.io.fits header object.
+    header : str or astropy.io.fits header object.
 
     relax : bool or int, optional
         Degree of permissiveness:
@@ -1647,12 +1888,18 @@ def find_all_wcs(header, relax=True, keysel=None):
         ``WCSNna`` and ``TWCSna``) are selected by both 'binary' and
         'pixel'.
 
+    fix : bool, optional
+        When `True` (default), call `~astropy.wcs._wcs.Wcsprm.fix` on
+        the resulting objects to fix any non-standard uses in the
+        header.  `FITSFixedWarning` warnings will be emitted if any
+        changes were made.
+
     Returns
     -------
     wcses : list of `WCS` objects
     """
 
-    if isinstance(header, string_types):
+    if isinstance(header, (six.text_type, six.binary_type)):
         header_string = header
     elif isinstance(header, fits.Header):
         header_string = header.tostring()
@@ -1662,7 +1909,7 @@ def find_all_wcs(header, relax=True, keysel=None):
 
     keysel_flags = _parse_keysel(keysel)
 
-    if isinstance(header_string, unicode):
+    if isinstance(header_string, six.text_type):
         header_bytes = header_string.encode('ascii')
     else:
         header_bytes = header_string
@@ -1671,8 +1918,121 @@ def find_all_wcs(header, relax=True, keysel=None):
 
     result = []
     for wcsprm in wcsprms:
-        subresult = WCS()
+        subresult = WCS(fix=False)
         subresult.wcs = wcsprm
         result.append(subresult)
 
+        if fix:
+            subresult.fix()
+
+        if _do_set:
+            subresult.wcs.set()
+
     return result
+
+
+def validate(source):
+    """
+    Prints a WCS validation report for the given FITS file.
+
+    Parameters
+    ----------
+    source : str path, readable file-like object or `astropy.io.fits.HDUList` object
+        The FITS file to validate.
+
+    Returns
+    -------
+    results : WcsValidateResults instance
+        The result is returned as nested lists.  The first level
+        corresponds to the HDUs in the given file.  The next level has
+        an entry for each WCS found in that header.  The special
+        subclass of list will pretty-print the results as a table when
+        printed.
+    """
+    class _WcsValidateWcsResult(list):
+        def __init__(self, key):
+            self._key = key
+
+        def __repr__(self):
+            result = ["  WCS key '{0}':".format(self._key or ' ')]
+            if len(self):
+                for entry in self:
+                    for i, line in enumerate(entry.splitlines()):
+                        if i == 0:
+                            initial_indent = '    - '
+                        else:
+                            initial_indent = '      '
+                        result.extend(
+                            textwrap.wrap(
+                                line,
+                                initial_indent=initial_indent,
+                                subsequent_indent='      '))
+            else:
+                result.append("    No issues.")
+            return '\n'.join(result)
+
+    class _WcsValidateHduResult(list):
+        def __init__(self, hdu_index, hdu_name):
+            self._hdu_index = hdu_index
+            self._hdu_name = hdu_name
+            list.__init__(self)
+
+        def __repr__(self):
+            if len(self):
+                if self._hdu_name:
+                    hdu_name = ' ({0})'.format(self._hdu_name)
+                else:
+                    hdu_name = ''
+                result = ['HDU {0}{1}:'.format(self._hdu_index, hdu_name)]
+                for wcs in self:
+                    result.append(repr(wcs))
+                return '\n'.join(result)
+            return ''
+
+    class _WcsValidateResults(list):
+        def __repr__(self):
+            result = []
+            for hdu in self:
+                content = repr(hdu)
+                if len(content):
+                    result.append(content)
+            return '\n\n'.join(result)
+
+    global __warningregistry__
+
+    if isinstance(source, fits.HDUList):
+        hdulist = source
+    else:
+        hdulist = fits.open(source)
+
+    results = _WcsValidateResults()
+
+    for i, hdu in enumerate(hdulist):
+        hdu_results = _WcsValidateHduResult(i, hdu.name)
+        results.append(hdu_results)
+
+        with warnings.catch_warnings(record=True) as warning_lines:
+            wcses = find_all_wcs(
+                hdu.header, relax=True, fix=False, _do_set=False)
+
+        for wcs in wcses:
+            wcs_results = _WcsValidateWcsResult(wcs.wcs.name)
+            hdu_results.append(wcs_results)
+
+            del __warningregistry__
+
+            with warnings.catch_warnings(record=True) as warning_lines:
+                warnings.resetwarnings()
+                warnings.simplefilter(
+                    "always", FITSFixedWarning, append=True)
+
+                try:
+                    WCS(hdu.header,
+                        key=wcs.wcs.name or ' ',
+                        relax=True, fix=True)
+                except WcsError as e:
+                    wcs_results.append(str(e))
+
+                wcs_results.extend([str(x.message) for x in warning_lines])
+
+    return results
diff --git a/astropy/wcs/wcslint.py b/astropy/wcs/wcslint.py
new file mode 100644
index 0000000..5d42b04
--- /dev/null
+++ b/astropy/wcs/wcslint.py
@@ -0,0 +1,19 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+Script support for validating the WCS keywords in a FITS file.
+"""
+from __future__ import absolute_import, division, print_function, unicode_literals
+
+
+def main(args=None):
+    from . import wcs
+    from astropy.utils.compat import argparse
+
+    parser = argparse.ArgumentParser(
+        description=("Check the WCS keywords in a FITS file for "
+                     "compliance against the standards"))
+    parser.add_argument(
+        'filename', nargs=1, help='Path to FITS file to check')
+    args = parser.parse_args(args)
+
+    print(wcs.validate(args.filename[0]))
diff --git a/cextern/cfitsio/cfileio.c b/cextern/cfitsio/cfileio.c
index ca081a0..72b8796 100644
--- a/cextern/cfitsio/cfileio.c
+++ b/cextern/cfitsio/cfileio.c
@@ -46,7 +46,12 @@ int no_of_drivers = 0;         /* number of currently defined I/O drivers */
 
 static int pixel_filter_helper(fitsfile **fptr, char *outfile,
 				char *expr,  int *status);
-
+static int find_quote(char **string);
+static int find_doublequote(char **string);
+static int find_paren(char **string);
+static int find_bracket(char **string);
+static int find_curlybracket(char **string);
+int comma2semicolon(char *string);
 
 #ifdef _REENTRANT
 
@@ -58,6 +63,7 @@ pthread_mutex_t Fitsio_InitLock = PTHREAD_MUTEX_INITIALIZER;
 int fitsio_init_lock(void)
 {
   static int need_to_init = 1;
+  int status;
   
 #ifdef _REENTRANT
 
@@ -69,16 +75,30 @@ int fitsio_init_lock(void)
 
     /* Init the main fitsio lock here since we need a a recursive lock */
 
-    assert(!pthread_mutexattr_init(&mutex_init));
+    status = pthread_mutexattr_init(&mutex_init);
+    if (status) {
+        ffpmsg("pthread_mutexattr_init failed (fitsio_init_lock)");
+        return(status);
+    }
+
 #ifdef linux
-    assert(!pthread_mutexattr_settype(&mutex_init,
-				     PTHREAD_MUTEX_RECURSIVE_NP));
+    status = pthread_mutexattr_settype(&mutex_init,
+				     PTHREAD_MUTEX_RECURSIVE_NP);
 #else
-    assert(!pthread_mutexattr_settype(&mutex_init,
-				     PTHREAD_MUTEX_RECURSIVE));
+    status = pthread_mutexattr_settype(&mutex_init,
+				     PTHREAD_MUTEX_RECURSIVE);
 #endif
+    if (status) {
+        ffpmsg("pthread_mutexattr_settu[e failed (fitsio_init_lock)");
+        return(status);
+    }
+
+    status = pthread_mutex_init(&Fitsio_Lock,&mutex_init);
+    if (status) {
+        ffpmsg("pthread_mutex_init failed (fitsio_init_lock)");
+        return(status);
+    }
 
-    assert(!pthread_mutex_init(&Fitsio_Lock,&mutex_init));
     need_to_init = 0;
   }
 
@@ -429,7 +449,7 @@ int ffiopn(fitsfile **fptr,      /* O - FITS file pointer                   */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffopentest(double version,   /* I - CFITSIO version number, from the    */
+int ffopentest(int soname,       /* I - CFITSIO shared library version     */
                                  /*     application program (fitsio.h file) */
            fitsfile **fptr,      /* O - FITS file pointer                   */ 
            const char *name,     /* I - full name of file to open           */
@@ -437,18 +457,21 @@ int ffopentest(double version,   /* I - CFITSIO version number, from the    */
            int *status)          /* IO - error status                       */
 /*
   Open an existing FITS file with either readonly or read/write access.
-  First test that the version of fitsio.h used to build the CFITSIO library
-  is the same as the version used in building the application program that
+  First test that the SONAME of fitsio.h used to build the CFITSIO library
+  is the same as was used in compiling the application program that
   links to the library.
 */
-{
-    if (version != CFITSIO_VERSION)
+{ 
+    if (soname != CFITSIO_SONAME)
     {
-        printf("ERROR: Mismatch in the version of the fitsio.h include file used to build\n");
-	printf("the CFITSIO library, and the version included by the application program:\n");
-	printf("   Version used to build the CFITSIO library   = %f\n",CFITSIO_VERSION);
-	printf("   Version included by the application program = %f\n",version);
-	
+        printf("\nERROR: Mismatch in the CFITSIO_SONAME value in the fitsio.h include file\n");
+	printf("that was used to build the CFITSIO library, and the value in the include file\n");
+	printf("that was used when compiling the application program:\n");
+	printf("   Version used to build the CFITSIO library   = %d\n",CFITSIO_SONAME);
+	printf("   Version included by the application program = %d\n",soname);
+	printf("\nFix this by recompiling and then relinking this application program \n");
+	printf("with the CFITSIO library.\n");
+
         *status = FILE_NOT_OPENED;
 	return(*status);
     }
@@ -477,7 +500,7 @@ int ffopen(fitsfile **fptr,      /* O - FITS file pointer                   */
     char imagecolname[FLEN_VALUE], rowexpress[FLEN_FILENAME];
     char binspec[FLEN_FILENAME], colspec[FLEN_FILENAME], pixfilter[FLEN_FILENAME];
     char histfilename[FLEN_FILENAME];
-    char filtfilename[FLEN_FILENAME];
+    char filtfilename[FLEN_FILENAME], compspec[FLEN_FILENAME];
     char wtcol[FLEN_VALUE];
     char minname[4][FLEN_VALUE], maxname[4][FLEN_VALUE];
     char binname[4][FLEN_VALUE];
@@ -566,6 +589,7 @@ int ffopen(fitsfile **fptr,      /* O - FITS file pointer                   */
         colspec[0] = '\0';
         rowfilter[0] = '\0';
         pixfilter[0] = '\0';
+        compspec[0] = '\0';
     }
     else
     {
@@ -576,8 +600,9 @@ int ffopen(fitsfile **fptr,      /* O - FITS file pointer                   */
 	/* therefore in general we do not have to worry about buffer */
 	/* overflow of any of the returned strings. */
 	
-        fits_parse_input_filename(url, urltype, infile, outfile, extspec,
-              rowfilter, binspec, colspec, pixfilter, status);
+        /* call the newer version of this parsing routine that supports 'compspec' */
+        ffifile2(url, urltype, infile, outfile, extspec,
+              rowfilter, binspec, colspec, pixfilter, compspec, status);
     }
     
     if (*status > 0)
@@ -1030,7 +1055,7 @@ move2hdu:
           ffpmsg(outfile);
           return(*status);
        }
-       
+      
        if (fits_copy_cell2image(*fptr, newptr, imagecolname, rownum,
                                 status) > 0)
        {
@@ -1284,10 +1309,9 @@ move2hdu:
           "CFITSIO used the following expression to create this image:",
           status);
           ffphis(*fptr, name, status);
-
-          return *status;
        }
-       else {
+       else
+       {
           ffpmsg("cannot use pixel filter on non-IMAGE HDU");
           ffpmsg(pixfilter);
           ffclos(*fptr, status);
@@ -1297,6 +1321,11 @@ move2hdu:
        }
     }
 
+   /* parse and save image compression specification, if given */
+   if (*compspec) {
+      ffparsecompspec(*fptr, compspec, status);
+   }
+ 
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -1571,6 +1600,195 @@ int fits_is_this_a_copy(char *urltype) /* I - type of file */
     return(iscopy);
 }
 /*--------------------------------------------------------------------------*/
+static int find_quote(char **string)
+
+/*  
+    look for the closing single quote character in the input string
+*/
+{
+    char *tstr;
+
+    tstr = *string;
+
+    while (*tstr) {
+        if (*tstr == '\'') { /* found the closing quote */
+           *string = tstr + 1;  /* set pointer to next char */
+           return(0); 
+        } else {  /* skip over any other character */
+           tstr++;
+        }
+    }
+    return(1);  /* opps, didn't find the closing character */
+}
+/*--------------------------------------------------------------------------*/
+static int find_doublequote(char **string)
+
+/*  
+    look for the closing double quote character in the input string
+*/
+{
+    char *tstr;
+
+    tstr = *string;
+
+    while (*tstr) {
+        if (*tstr == '"') { /* found the closing quote */
+           *string = tstr + 1;  /* set pointer to next char */
+           return(0); 
+        } else {  /* skip over any other character */
+           tstr++;
+        }
+    }
+    return(1);  /* opps, didn't find the closing character */
+}
+
+/*--------------------------------------------------------------------------*/
+static int find_paren(char **string)
+
+/*  
+    look for the closing parenthesis character in the input string
+*/
+{
+    char *tstr;
+
+    tstr = *string;
+
+    while (*tstr) {
+
+        if (*tstr == ')') { /* found the closing parens */
+           *string = tstr + 1;  /* set pointer to next char */
+           return(0); 
+        } else if (*tstr == '(') { /* found another level of parens */
+           tstr++;
+           if (find_paren(&tstr)) return(1); 
+        } else if (*tstr == '[') { 
+           tstr++;
+           if (find_bracket(&tstr)) return(1);
+        } else if (*tstr == '{') { 
+           tstr++;
+           if (find_curlybracket(&tstr)) return(1);
+        } else if (*tstr == '"') { 
+           tstr++;
+           if (find_doublequote(&tstr)) return(1);
+        } else if (*tstr == '\'') { 
+           tstr++;
+           if (find_quote(&tstr)) return(1);
+        } else { 
+           tstr++;
+        }
+    }
+    return(1);  /* opps, didn't find the closing character */
+}
+/*--------------------------------------------------------------------------*/
+static int find_bracket(char **string)
+
+/*  
+    look for the closing bracket character in the input string
+*/
+{
+    char *tstr;
+
+    tstr = *string;
+
+    while (*tstr) {
+        if (*tstr == ']') { /* found the closing bracket */
+           *string = tstr + 1;  /* set pointer to next char */
+           return(0); 
+        } else if (*tstr == '(') { /* found another level of parens */
+           tstr++;
+           if (find_paren(&tstr)) return(1); 
+        } else if (*tstr == '[') { 
+           tstr++;
+           if (find_bracket(&tstr)) return(1);
+        } else if (*tstr == '{') { 
+           tstr++;
+           if (find_curlybracket(&tstr)) return(1);
+        } else if (*tstr == '"') { 
+           tstr++;
+           if (find_doublequote(&tstr)) return(1);
+        } else if (*tstr == '\'') { 
+           tstr++;
+           if (find_quote(&tstr)) return(1);
+        } else { 
+           tstr++;
+        }
+    }
+    return(1);  /* opps, didn't find the closing character */
+}
+/*--------------------------------------------------------------------------*/
+static int find_curlybracket(char **string)
+
+/*  
+    look for the closing curly bracket character in the input string
+*/
+{
+    char *tstr;
+
+    tstr = *string;
+
+    while (*tstr) {
+        if (*tstr == '}') { /* found the closing curly bracket */
+           *string = tstr + 1;  /* set pointer to next char */
+           return(0); 
+        } else if (*tstr == '(') { /* found another level of parens */
+           tstr++;
+           if (find_paren(&tstr)) return(1); 
+        } else if (*tstr == '[') { 
+           tstr++;
+           if (find_bracket(&tstr)) return(1);
+        } else if (*tstr == '{') { 
+           tstr++;
+           if (find_curlybracket(&tstr)) return(1);
+        } else if (*tstr == '"') { 
+           tstr++;
+           if (find_doublequote(&tstr)) return(1);
+        } else if (*tstr == '\'') { 
+           tstr++;
+           if (find_quote(&tstr)) return(1);
+        } else { 
+           tstr++;
+        }
+    }
+    return(1);  /* opps, didn't find the closing character */
+}
+/*--------------------------------------------------------------------------*/
+int comma2semicolon(char *string)
+
+/*  
+    replace commas with semicolons, unless the comma is within a quoted or bracketed expression 
+*/
+{
+    char *tstr;
+
+    tstr = string;
+
+    while (*tstr) {
+
+        if (*tstr == ',') { /* found a comma */
+           *tstr = ';';
+           tstr++;
+        } else if (*tstr == '(') { /* found another level of parens */
+           tstr++;
+           if (find_paren(&tstr)) return(1); 
+        } else if (*tstr == '[') { 
+           tstr++;
+           if (find_bracket(&tstr)) return(1);
+        } else if (*tstr == '{') { 
+           tstr++;
+           if (find_curlybracket(&tstr)) return(1);
+        } else if (*tstr == '"') { 
+           tstr++;
+           if (find_doublequote(&tstr)) return(1);
+        } else if (*tstr == '\'') { 
+           tstr++;
+           if (find_quote(&tstr)) return(1);
+        } else { 
+           tstr++;
+        }
+    }
+    return(0);  /* reached end of string */
+}
+/*--------------------------------------------------------------------------*/
 int ffedit_columns(
            fitsfile **fptr,  /* IO - pointer to input table; on output it  */
                              /*      points to the new selected rows table */
@@ -1583,8 +1801,8 @@ int ffedit_columns(
 {
     fitsfile *newptr;
     int ii, hdunum, slen, colnum = -1, testnum, deletecol = 0, savecol = 0;
-    int numcols = 0, *colindex = 0, tstatus = 0;
-    char *cptr, *cptr2, *cptr3, clause[FLEN_FILENAME], keyname[FLEN_KEYWORD];
+    int numcols = 0, *colindex = 0, tstatus = 0, inparen;
+    char *cptr, *cptr2, *cptr3, *clause = NULL, keyname[FLEN_KEYWORD];
     char colname[FLEN_VALUE], oldname[FLEN_VALUE], colformat[FLEN_VALUE];
     char *file_expr = NULL, testname[FLEN_VALUE], card[FLEN_CARD];
 
@@ -1667,9 +1885,23 @@ int ffedit_columns(
     tstatus = 0;
     ffgncl(*fptr, &numcols, &tstatus);  /* get initial # of cols */
 
-    /* parse expression and get first clause, if more than 1 */
+    /* as of July 2012, the CFITSIO column filter syntax was modified */
+    /* so that commas may be used to separate clauses, as well as semi-colons. */
+    /* This was done because users cannot enter the semi-colon in the HEASARC's */
+    /* Hera on-line data processing system for computer security reasons.  */
+    /* Therefore, we must convert those commas back to semi-colons here, but we */
+    /* must not convert any columns that occur within parenthesies.  */
+
+    if (comma2semicolon(cptr)) {
+         ffpmsg("parsing error in column filter expression");
+         ffpmsg(cptr);
+         if( file_expr ) free( file_expr );
+         *status = PARSE_SYNTAX_ERR;
+         return(*status);
+    }
 
-    while ((slen = fits_get_token(&cptr, ";", clause, NULL)) > 0 )
+    /* parse expression and get first clause, if more than 1 */
+    while ((slen = fits_get_token2(&cptr, ";", &clause, NULL, status)) > 0 )
     {
         if( *cptr==';' ) cptr++;
         clause[slen] = '\0';
@@ -1689,6 +1921,7 @@ int ffedit_columns(
                     ffpmsg(clause);
                     if( colindex ) free( colindex );
                     if( file_expr ) free( file_expr );
+		    if( clause ) free(clause);
                     return(*status);
                 }
                 deletecol = 1; /* set flag that at least one col was deleted */
@@ -1706,6 +1939,7 @@ int ffedit_columns(
                     ffpmsg(clause);
                     if( colindex ) free( colindex );
                     if( file_expr ) free( file_expr );
+		    if( clause ) free(clause);
                     return(*status);
                 }
             }
@@ -1725,13 +1959,13 @@ int ffedit_columns(
             cptr2 = clause;
             slen = fits_get_token(&cptr2, "( =", colname, NULL);
 
-
             if (slen == 0)
             {
                 ffpmsg("error: column or keyword name is blank:");
                 ffpmsg(clause);
                 if( colindex ) free( colindex );
                 if( file_expr ) free( file_expr );
+		if (clause) free(clause);
                 return(*status= URL_PARSE_ERROR);
             }
 
@@ -1750,6 +1984,8 @@ int ffedit_columns(
 		    ffpmsg(colname);
 		    ffpmsg("is invalid unless a column has been previously");
 		    ffpmsg("created or editted by a calculator command");
+                    if( file_expr ) free( file_expr );
+		    if (clause) free(clause);
 		    return(*status = URL_PARSE_ERROR);
 		  }
 		colname[strlen(colname)-1] = '\0';
@@ -1779,7 +2015,11 @@ int ffedit_columns(
  		    testname[strlen(testname)-1] = '\0';
 		    /* Make keyword name and put it in oldname */
 		    ffkeyn(testname, colnum, oldname, status);
-		    if (*status) return (*status);
+		    if (*status) {
+                      if( file_expr ) free( file_expr );
+		      if (clause) free(clause);
+		      return (*status);
+		    }
 
 		    tstatus = 0;
 		    if (!fits_read_card(*fptr, oldname, card, &tstatus)) {
@@ -1860,6 +2100,7 @@ int ffedit_columns(
                ffpmsg(cptr2);
                if( colindex ) free( colindex );
                if( file_expr ) free( file_expr );
+	       if (clause) free(clause);
                return(*status = URL_PARSE_ERROR);
               }
             }
@@ -1899,6 +2140,7 @@ int ffedit_columns(
                       ffpmsg(colname);
                       if( colindex ) free( colindex );
                       if( file_expr ) free( file_expr );
+	              if (clause) free(clause);
                       return(*status);
                     }
                     /* keep this column in the output file */
@@ -1919,6 +2161,7 @@ int ffedit_columns(
                         ffpmsg(clause);
                         if( colindex ) free( colindex );
                         if( file_expr ) free( file_expr );
+			if (clause) free(clause);
                         return(*status);
                     }
                 }
@@ -1951,7 +2194,10 @@ int ffedit_columns(
        	                        status) > 0) {
 				
                         ffpmsg("Unable to calculate expression");
-                        return(*status);
+                        if( colindex ) free( colindex );
+                        if( file_expr ) free( file_expr );
+			if (clause) free(clause);
+                         return(*status);
                 }
 
                 /* test if this is a column and not a keyword */
@@ -1976,6 +2222,8 @@ int ffedit_columns(
               }
             }
         }
+	if (clause) free(clause);  /* free old clause before getting new one */
+        clause = NULL;
     }
 
     if (savecol && !deletecol)
@@ -1991,6 +2239,7 @@ int ffedit_columns(
              ffpmsg(clause);
              if( colindex ) free( colindex );
              if( file_expr ) free( file_expr );
+	     if (clause) free(clause);
              return(*status);
            }
          }
@@ -1999,6 +2248,8 @@ int ffedit_columns(
 
     if( colindex ) free( colindex );
     if( file_expr ) free( file_expr );
+    if (clause) free(clause);
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -3190,9 +3441,10 @@ when writing FITS images.
 
     /* initialize with default values */
     int ii, compresstype = RICE_1, smooth = 0;
-    long tilesize[MAX_COMPRESS_DIM] = {0,1,1,1,1,1};
-    float qlevel = 0.0, scale = 0.;
-
+    int quantize_method = SUBTRACTIVE_DITHER_1;
+    long tilesize[MAX_COMPRESS_DIM] = {0,0,0,0,0,0};
+    float qlevel = -99., scale = 0.;
+    
     ptr1 = compspec;
     while (*ptr1 == ' ')    /* ignore leading blanks */
            ptr1++;
@@ -3300,6 +3552,16 @@ when writing FITS images.
                 /* this should be the floating point quantization parameter */
 
                   ptr1++;
+                  if (*ptr1 == 'z' || *ptr1 == 'Z') {
+                      /* use the subtractive_dither_2 option */
+                      quantize_method = SUBTRACTIVE_DITHER_2;
+                      ptr1++;
+		  } else if (*ptr1 == '0') {
+                      /* do not dither */
+                      quantize_method = NO_DITHER;
+                      ptr1++;
+		  }
+
                   while (*ptr1 == ' ')    /* ignore leading blanks */
                       ptr1++;
 
@@ -3320,15 +3582,17 @@ when writing FITS images.
 
     fits_set_compression_type(fptr, compresstype, status);
     fits_set_tile_dim(fptr, MAX_COMPRESS_DIM, tilesize, status);
-    
+ 
     if (compresstype == HCOMPRESS_1) {
         fits_set_hcomp_scale (fptr, scale,  status);
         fits_set_hcomp_smooth(fptr, smooth, status);
     }
 
-    if (qlevel != 0.0)
+    if (qlevel != -99.) {
         fits_set_quantize_level(fptr, qlevel, status);
-    
+        fits_set_quantize_method(fptr, quantize_method, status);
+    }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -3450,9 +3714,11 @@ int ffinit(fitsfile **fptr,      /* O - FITS file pointer                   */
         /* call appropriate driver to create the file */
     if (driverTable[driver].create)
     {
+
         FFLOCK;  /* lock this while searching for vacant handle */
         *status = (*driverTable[driver].create)(outfile, &handle);
         FFUNLOCK;
+
         if (*status)
         {
             ffpmsg("failed to create new file (already exists?):");
@@ -4535,13 +4801,12 @@ int ffiurl(char *url,               /* input filename */
            int *status)
 /*
    parse the input URL into its basic components.
-   This routine is big and ugly and should be redesigned someday!
+   This routine does not support the pixfilter or compspec components.
 */
 {
-	return fits_parse_input_filename(url, urltype, infilex, outfile,
-               extspec, rowfilterx, binspec, colspec, 0, status);
+	return ffifile2(url, urltype, infilex, outfile,
+               extspec, rowfilterx, binspec, colspec, 0, 0, status);
 }
-
 /*--------------------------------------------------------------------------*/
 /* fits_parse_input_file */
 int ffifile(char *url,       /* input filename */
@@ -4557,13 +4822,35 @@ int ffifile(char *url,       /* input filename */
 /*
    fits_parse_input_filename
    parse the input URL into its basic components.
+   This routine does not support the compspec component.
+*/
+{
+	return ffifile2(url, urltype, infilex, outfile,
+               extspec, rowfilterx, binspec, colspec, pixfilter, 0, status);
+
+} 
+/*--------------------------------------------------------------------------*/
+int ffifile2(char *url,       /* input filename */
+           char *urltype,    /* e.g., 'file://', 'http://', 'mem://' */
+           char *infilex,    /* root filename (may be complete path) */
+           char *outfile,    /* optional output file name            */
+           char *extspec,    /* extension spec: +n or [extname, extver]  */
+           char *rowfilterx, /* boolean row filter expression */
+           char *binspec,    /* histogram binning specifier   */
+           char *colspec,    /* column or keyword modifier expression */
+           char *pixfilter,  /* pixel filter expression */
+           char *compspec,   /* image compression specification */
+           int *status)
+/*
+   fits_parse_input_filename
+   parse the input URL into its basic components.
    This routine is big and ugly and should be redesigned someday!
 */
 { 
     int ii, jj, slen, infilelen, plus_ext = 0, collen;
     char *ptr1, *ptr2, *ptr3, *ptr4, *tmptr;
     int hasAt, hasDot, hasOper, followingOper, spaceTerm, rowFilter;
-    int colStart, binStart, pixStart;
+    int colStart, binStart, pixStart, compStart;
 
 
     /* must have temporary variable for these, in case inputs are NULL */
@@ -4583,7 +4870,7 @@ int ffifile(char *url,       /* input filename */
     if (colspec) *colspec = '\0';
     if (rowfilterx) *rowfilterx = '\0';
     if (pixfilter) *pixfilter = '\0';
- 
+    if (compspec) *compspec = '\0';
     slen = strlen(url);
 
     if (slen == 0)       /* blank filename ?? */
@@ -4916,6 +5203,7 @@ int ffifile(char *url,       /* input filename */
                    /* first brackets must enclose extension name or # */
                    /* or it encloses a image subsection specification */
                    /* or a raw binary image specifier */
+                   /* or a image compression specifier */
 
                    /* Or, the extension specification may have been */
                    /* omitted and we have to guess what the user intended */
@@ -5075,6 +5363,8 @@ int ffifile(char *url,       /* input filename */
             [gtifilter()]
             [regfilter("region.reg")]
 
+            [compress Rice]
+
          There will always be some ambiguity between an extension name and 
          a boolean row filtering expression, (as in a couple of the above
          examples).  If there is any doubt, the expression should be treated
@@ -5117,6 +5407,7 @@ int ffifile(char *url,       /* input filename */
            colStart = 0;
            binStart = 0;
            pixStart = 0;
+           compStart = 0;
 
            if (*tmptr == '@')  /* test for leading @ symbol */
                hasAt = 1;
@@ -5130,6 +5421,10 @@ int ffifile(char *url,       /* input filename */
            if ( !strncasecmp(tmptr, "pix", 3) )
               pixStart = 1;
 
+           if ( !strncasecmp(tmptr, "compress ", 9) ||
+                !strncasecmp(tmptr, "compress]", 9) )
+              compStart = 1;
+
            if ( !strncasecmp(tmptr, "gtifilter(", 10) ||
                 !strncasecmp(tmptr, "regfilter(", 10) )
            {
@@ -5183,6 +5478,7 @@ int ffifile(char *url,       /* input filename */
            if ( rowFilter || (pixStart && spaceTerm) ||
                 (hasAt && hasDot) ||
                 hasOper ||
+                compStart ||
                 (spaceTerm && followingOper) )
            {
                /* this is (probably) not an extension specifier */
@@ -5444,7 +5740,56 @@ int ffifile(char *url,       /* input filename */
         strcpy(ptr1, tmpstr);      /* overwrite binspec */
     }
 
+    /* ------------------------------------------------------------ */
+    /* does the filter contain an image compression specification?  */
+    /* ------------------------------------------------------------ */
 
+    ptr1 = strstr(rowfilter, "[compress");
+
+    if (ptr1)
+    {
+      ptr2 = ptr1 + 9;     /* end of the '[compress' string */
+
+      if ( *ptr2 != ' ' && *ptr2 != ']')
+        ptr1 = NULL;   /* compress string must be followed by space or ] */
+    }
+
+    if (ptr1)
+    {
+        /* found the compress string */
+        if (compspec)
+        {
+	    if (strlen(ptr1 +1) > FLEN_FILENAME - 1)
+	    {
+                    free(infile);
+                    return(*status = URL_PARSE_ERROR);
+            }
+
+            strcpy(compspec, ptr1 + 1);       
+            ptr2 = strchr(compspec, ']');
+
+            if (ptr2)      /* terminate the binning filter */
+            {
+                *ptr2 = '\0';
+
+                if ( *(--ptr2) == ' ')  /* delete trailing spaces */
+                    *ptr2 = '\0';
+            }
+            else
+            {
+                ffpmsg("input file URL is missing closing bracket ']'");
+                ffpmsg(rowfilter);
+                free(infile);
+                return(*status = URL_PARSE_ERROR);  /* error, no closing ] */
+            }
+        }
+
+        /* delete the compression spec from the row filter string */
+        ptr2 = strchr(ptr1, ']');
+        strcpy(tmpstr, ptr2+1);  /* copy any chars after the binspec */
+        strcpy(ptr1, tmpstr);    /* overwrite binspec */
+    }
+   
     /* copy the remaining string to the rowfilter output... should only */
     /* contain a rowfilter expression of the form "[expr]"              */
 
@@ -6233,7 +6578,7 @@ int ffimport_file( char *filename,   /* Text file to read                   */
    reallocating memory.
 */
 {
-   int allocLen, totalLen, llen, eoline;
+   int allocLen, totalLen, llen, eoline = 1;
    char *lines,line[256];
    FILE *aFile;
 
@@ -6257,7 +6602,7 @@ int ffimport_file( char *filename,   /* Text file to read                   */
 
    while( fgets(line,256,aFile)!=NULL ) {
       llen = strlen(line);
-      if ((llen > 1) && (line[0] == '/' && line[1] == '/'))
+      if ( eoline && (llen > 1) && (line[0] == '/' && line[1] == '/'))
           continue;       /* skip comment lines begging with // */
 
       eoline = 0;
@@ -6327,7 +6672,8 @@ int fits_get_token(char **ptr,
             *isanumber = 1;
 
 	    if (strchr(token, 'D'))  {
-	        strcpy(tval, token);
+	        strncpy(tval, token, 72);
+		tval[72] = '\0';
 
 	        /*  The C language does not support a 'D'; replace with 'E' */
 	        if (loc = strchr(tval, 'D')) *loc = 'E';
@@ -6345,6 +6691,68 @@ int fits_get_token(char **ptr,
 
     return(slen);
 }
+/*--------------------------------------------------------------------------*/
+int fits_get_token2(char **ptr, 
+                   char *delimiter,
+                   char **token,
+                   int *isanumber,  /* O - is this token a number? */
+		   int *status)
+
+/*
+   parse off the next token, delimited by a character in 'delimiter',
+   from the input ptr string;  increment *ptr to the end of the token.
+   Returns the length of the token, not including the delimiter char;
+
+   This routine allocates the *token string;  the calling routine must free it 
+*/
+{
+    char *loc, tval[73];
+    int slen;
+    double dval;
+    
+    if (*status)
+        return(0);
+	
+    while (**ptr == ' ')  /* skip over leading blanks */
+        (*ptr)++;
+
+    slen = strcspn(*ptr, delimiter);  /* length of next token */
+    if (slen)
+    {
+	*token = (char *) calloc(slen + 1, 1); 
+	if (!(*token)) {
+          ffpmsg("Couldn't allocate memory to hold token string (fits_get_token2).");
+          *status = MEMORY_ALLOCATION ;
+	  return(0);
+        }
+ 
+        strncat(*token, *ptr, slen);       /* copy token */
+        (*ptr) += slen;                   /* skip over the token */
+
+        if (isanumber)  /* check if token is a number */
+        {
+            *isanumber = 1;
+
+	    if (strchr(*token, 'D'))  {
+	        strncpy(tval, *token, 72);
+		tval[72] = '\0';
+
+	        /*  The C language does not support a 'D'; replace with 'E' */
+	        if (loc = strchr(tval, 'D')) *loc = 'E';
+
+	        dval =  strtod(tval, &loc);
+	    } else {
+	        dval =  strtod(*token, &loc);
+ 	    }
+
+	    /* check for read error, or junk following the value */
+	    if (*loc != '\0' && *loc != ' ' ) *isanumber = 0;
+	    if (errno == ERANGE) *isanumber = 0;
+        }
+    }
+
+    return(slen);
+}
 /*---------------------------------------------------------------------------*/
 char *fits_split_names(
    char *list)   /* I   - input list of names */
diff --git a/cextern/cfitsio/changes.txt b/cextern/cfitsio/changes.txt
index 71ea413..08d0d01 100644
--- a/cextern/cfitsio/changes.txt
+++ b/cextern/cfitsio/changes.txt
@@ -1,5 +1,247 @@
                    Log of Changes Made to CFITSIO
 
+   - modified Makefile.in so that doing 'make distclean' does not delete
+     new config.sub and config.guess files that were recently added.
+
+Version 3.35 - 26 June 2013  (1st beta release on 24 May)
+		   
+   - fixed problem with the default tile size when compressing images with
+     fpack using the Hcompress algorithm.
+
+   - fixed returned value ("status" instead of "*status") 
+
+   - in imcompress.c, declared some arrays that are used to store the dimensions
+     of the image from 'int' to 'long', to support very large images (at least
+     on systems where sizeof(long) = 8),
+
+   - modified the routines that convert a string value to a float or double
+     to prevent them from returning a NaN or Inf value if the
+     string is "NaN" or "Inf" (as can happen with gcc implementation of the
+     strtod function).
+
+   - removed/replaced the use of the assert() functions when locking or
+     unlocking threads because they did not work correctly if NDEBUG is
+     defined.
+
+   - made modifications to the way the command-line file filters are parsed to
+     1) remove the 1024-character limit when specifying a column filter,
+     2) fixed a potential character buffer-overflow risk in fits_get_token, and
+     3) improved the parsing logic to remove any possible of confusing
+     2 slash characters ("//") in the string as the beginning of a 
+     comment string.
+
+   - modified configure and Makefile.in so that when building CFITSIO
+     as a shared library on linux or Mac platforms, it will use the SONAME
+     convention to indicate whether each new release of the CFITSIO
+     library is binary-compatible with the previous version.  Application
+     programs that link with the shared library will not need to be
+     recompiled as long as the versions are compatible.  In practice,
+     this means that the shared library binary file that is created (on
+     Linux systems) will have a name like 'libcfitsio.so.I.J.K', where I is the
+     SONAME version number, J is the major CFITSIO version number (e.g. 3),
+     and K is the minor CFITSIO version number (e.g., 34).  Two link
+     files will also be created such that
+       libcfitsio.so -> libcfitsio.so.I, and
+       libcfitsio.so.I -> libcfitsio.I.J.K
+     Application programs will still run correctly with the new version of
+     CFITSIO as long as the 'I' version number remains the same, but the
+     applications will fail to run if the 'I' number changes, thus alerting
+     the user that the application must be rebuilt.
+
+   - fixed bug in fits_insert_col when computing the new table row width
+     when inserting a '1Q' variable length array column.
+
+  - modified the image compression routines so that the output compressed
+     image (stored in a FITS binary table) uses the '1Q' variable length
+     array format (instead of '1P') when the input file is larger than 4 GB.
+
+   - added support for "compression directive" keywords which indicate how
+     that HDU should be compressed (e.g., which compression algorithm to use,
+     what tiling pattern to use, etc.).  The values of these keywords will
+     override the compression parameters that were specified on the command 
+     line when running the fpack FITS file compression program.
+
+   - globally changed the variable and/or subroutine name "dither_offset" 
+     to "dither_seed" and "quantize_dither" to "quantize_method" so
+     that the names more accurately reflects their purpose.
+
+   - added support for a new SUBTRACTIVE_DITHER_2 method when compressing
+     floating point images.  The only difference with the previous method
+     is that pixels with a value exactly equal to 0.0 will not be dithered,
+     and instead will be exactly preserved when the image is compressed.
+
+   - added support for an alias of "RICE_ONE" for "RICE_1" as the value
+     of the ZCMPTYPE keyword, which gives the name of the image compression
+     algorithm.  This alias is used if the new SUBTRACTIVE_DITHER_2 option
+     is used, to prevent old versions of funpack from creating a corrupted
+     uncompressed image file.  Only newer versions of funpack will recognize
+     this alias and be able to uncompress the image. 
+   
+   - made performance improvement to fits_read_compressed_img so that 
+     when reading a section of an compressed image that includes only 
+     every nth pixel in some dimension, it will only uncompressed a tile 
+     if there are actually any pixels of interest in that tile.
+
+   - fixed several issues with the beta FITS binary table compression code
+     that is used by fpack:  added support for zero-length vector columns,
+     made improvements to the output report when using the -T option in fpack,
+     changed the default table compression method to 'Rice' instead of 
+     'Best', and now writes the 'ZTILELEN' keyword to document the number
+     of table rows in each tile.
+
+   - fixed error in ffbinit in calculating the total length of the binary
+     table extension if the THEAP keyword was used to override the
+     default starting location of the heap.
+
+Version 3.34 - 20 March 2013
+
+   - modified configure and configure.in to support cross-compiled cfitsio 
+     as a static library for Windows on a Linux platform using MXE 
+     (http://mxe.cc) - a build environment for mingw32. (contributed by 
+     Niels Kristian Bech Jensen)
+
+   - added conditional compilation statementsfor the mingw32 environment in 
+     drvrfile.c because mingw32 does not include the ftello and fseeko functions. 
+     (contributed by Niels Kristian Bech Jensen)
+
+   - fixed a potential bug in ffcpcl (routine to copy a column from one table
+     to another table) when dealing with the rare case of a '0X' column (zero
+     length bit column).
+
+   - fixed an issue in the routines that update or modify string-valued
+     keyword values, as a result of the change to ffc2s in the previous 
+     release.  These routines would exit with a 204 error status if the 
+     current value of the keyword to be updated or modified is null.
+
+   - fixed typo in the previous modification that was intended to ignore
+     numerical overflows in Hcompress when decompressing an image.
+
+   - moved the 'startcol' static variable out of the ffgcnn routine and
+     instead added it as a member of the 'FITSfile' structure that is defined
+     in fitsio.h.  This removes a possible race condition in ffgcnn in 
+     multi-threaded environments.
+
+Version 3.33 - 14 Feb 2013
+
+   - modified the imcomp_decompress_tile routine to ignore any numerical 
+     overflows that might occur when using Hcompress to decompress the
+     image.  If Hcompress is used in its 'lossy' mode, the uncompressed
+     image pixel values may slightly exceed the range of an integer*2 
+     variable. This is generally of no consequence, so we can safely ignore
+     any overflows in this case and just clip the values to the legal range.
+
+   - the default tiling pattern when writing a tile-compressed image
+     has been changed.  The old behavior was to compress the whole image
+     as one single large tile.  This is often not optimal when dealing
+     with large images, so the new default behavior is to treat each
+     row of the image as one tile.  This is the same default behavior
+     as in the standalone fpack program.  The default tile size can
+     be overridden by calling fits_set_tile_dim.
+
+   - fixed bug that resulted in a corrupted output FITS image when
+     attempting to write a float or double array of values to a 
+     tile-compressed integer data type image.  CFITSIO does not support
+     implicit data type conversion in this case and now correctly
+     returns an appropriate error status. 
+
+   - modified ricecomp.c to define the nonzero_count lookup table as an 
+     external variable, rather then dynamically allocating it within the
+     3 routines that use it.  This simplifies the code and eliminates the
+     need for special thread locking and unlocking statements. (Thanks to
+     Lars Kr. Lundin for this suggestion). 
+
+   - modifed how the uncompressed size of a gzipped file is computed in the
+     mem_compress_open routine in drvrmem.c.  Since gzip only uses 4 bytes
+     in the compressed file header to store the original file size, one may
+     need to apply a modulo 2^32 byte correction in some cases.  The logic
+     here was modified to allow for corner cases (e.g., very small files, and 
+     when running on 32-bit platforms that do not support files larger than
+     2^31 bytes in size). 
+
+   - added new public routine to construct a 80 keyword record from the 3 input
+     component strings, i.e, the keyword name string, the value string, and
+     the comment string: fits_make_key/ffmkky.  (This was already an undocumented
+     internal routine in previous versions of CFITSIO).
+
+   - modified ffc2s so that if the input keyword value string is a null string,
+     then it will return a VALUE_UNDEFINED (204) status value.  This makes it
+     consistent with the behavior when attempting to read a null keyword 
+     (which has no value) as a logical or as a number (which also returns
+     the 204 error).  This should only affect cases where the header keyword
+     does not have an equal sign followed by a space character in columns 9
+     and 10 of the header record.
+
+   - Changed the "char *" parameter declarations to "const char *" in many 
+     of the routines (mainly the routines that modify or update keywords) to
+     avoid compiler warnings or errors from C++ programs that tend to be more
+     rigorous about using "const char *" when appropriate.
+
+   - added support for caching uncompressed image tiles, so that the tile does
+     not need to be uncompressed again if the application program wants 
+     to read more data from the same tile. This required changes to the
+     main FITS file structure that is defined in fitsio.h, as well as
+     changes to imcompress.c.
+
+   - enhanced the previous modification to drvrfile.c to handle additional user
+     cases when running in the HEASARC's Hera environment.
+
+Version 3.32 - Oct 2012
+
+   - fixed flaw in the way logical columns (TFORM = 'L') in binary tables 
+     were read which caused an illegal value of 1 in the column to be interpreted
+     as a 'T' (TRUE) value.
+
+   - extended the column filtering syntax in the CFITSIO file name parser to
+     enable users and scripts to append new COMMENT or HISTORY keyword into the
+     header of the filtered file (provided by Craig Markwardt).  For example,
+     fcopy "infile.fits[col #HISTORY='Processed on 2012-10-05']" outfile.fits
+     will append this header keyword: "HISTORY Processed on 2012-10-05"
+
+   - small change to the code that opens and reads an ASCII region file to
+     return an error if the file is empty.
+
+   - fixed obscure sign propagation error when attempting to read the
+     uncompressed size of a gzipped FITS file.  This resulted in a memory
+     allocation error if the gzipped file had an uncompressed file
+     size between 2^31 and 2^32 bytes.  Fix supplied by Gudlaugur Johannesson 
+     (Stanford).
+
+Version 3.31 - 18 July 2012
+
+   - enhanced the CFITSIO column filtering syntax to allow the comma, in addition
+     to the semi-colon, to be used to separate clauses, for example:
+     [col X,Y;Z = max(X,Y)].  This was done because users are not allowed to
+     enter the semi-colon character in the on-line Hera data processing
+     system due to computer security concerns.
+
+   - enhanced the CFITSIO extended filename syntax to allow specifying image
+     compression parameters (e.g. '[compress Rice]') when opening an existing
+     FITS file with write access.  The specified compression parameters will
+     be used by default if more images are appended to the existing file.
+
+   - modified drvrfile.c to do additional file security checks when CFITSIO
+     is running within the HEASARC's Hera software system.  In this case
+     CFITSIO will not allow FITS files to be created outside of the user's
+     individual Hera data directory area.
+
+   - fixed an issue in fpack and funpack on Windows machines, caused by
+     the fact that the 'rename' function behaves differently on Windows
+     in that it does not clobber an existing file, as it does on Unix
+     platforms.
+
+   - fixed bug in the way byte-swapping was being performed when writing 
+     integer*8 null values to an image or binary table column.  
+
+   - added the missing macro definition for fffree to fitsio.h.
+
+   - modified the low level table read and write functions in getcol*.c and 
+     putcol*.c to remove the 32-bit limitation on the number of elements. 
+     These routines now support reading and writing more than 2**31 elements
+     at one time. Thanks to Keh-Cheng Chu (Stanford U.) for the patch.
+
+   - modified Makefile.in so that the shared libcfitsio.so is linked against 
+     pthreads and libm.
+
 Version 3.30 - 11 April 2012
 
   Enhancements
@@ -8,15 +250,16 @@ Version 3.30 - 11 April 2012
      whether or not CFITSIO was compiled with the -D_REENTRANT directive.  This can
      be used to determine if it is safe to use CFITSIO in multi-threaded programs.
 
-   - Implimented much faster byte-swapping algorithms in swapproc.c based on code
+   - Implemented much faster byte-swapping algorithms in swapproc.c based on code
      provided by Julian Taylor at ESO, Garching.  These routines significantly 
      improve the FITS image read and write speed (by more than a factor of 2 in 
-     some cases) on little-endian machines (e.g., Linux and Microsoft Windows running
-     on x86 PCs) where byte-swapping is required.  This has no effect on big-endian 
-     machines (e.g., Macs).  Even faster performance can be achieved in some cases
-     by invoking the new "--enable-sse2" or "--enable-ssse3" configure options when
-     building CFITSIO on machines that have CPUs and compilers that support the SSE2
-     and SSSE3 machine instructions.
+     some cases) on little-endian machines (e.g., Linux and Microsoft Windows and
+     Macs running on x86 CPUs) where byte-swapping is required when reading and 
+     writing data in FITS files.  This has no effect on big-endian machines 
+     (e.g. Motorola CPUs and some IBM systems).  Even faster byte-swapping
+     performance can be achieved in some cases by invoking the new "--enable-sse2" 
+     or "--enable-ssse3" configure options when building CFITSIO on machines that
+     have CPUs and compilers that support the SSE2 and SSSE3 machine instructions.
 
    - added additional support for implicit data type conversion in cases where
      the floating point image has been losslessly compressed with gzip.  The
@@ -27,7 +270,7 @@ Version 3.30 - 11 April 2012
      testing if __s390x__ or __s390__ is defined.
 
    - small change to ffgcrd in getkey.c so that it supports reading a blank
-     keyword (e.g., a keyword whose name simply contains 8 space chracters).
+     keyword (e.g., a keyword whose name simply contains 8 space characters).
 
    Bug Fixes
 
@@ -94,7 +337,7 @@ Version 3.29 - 2 December 2011
      binning 2 table columns, if a keyword or column name is given as the
      weighting factor,  then the output histrogram image will have a floating
      point datatype, not the default integer datatype as is the case when no
-     weigth is specified (e.g. with a filename like 
+     weight is specified (e.g. with a filename like 
      "myfile.fits[bin x,y; weight_column]"
 
    - added fix to the code in imcompress.c to work around a problem with
@@ -144,12 +387,12 @@ Version 3.27 - 3 March 2011
 
     - enhanced the ffmkky routine in fitscore.c to not put a space before the
       equals sign when writing long string-valued keywords using the ESO
-      HIERARCH keyword convension, if that extra character is needed to
+      HIERARCH keyword convention, if that extra character is needed to
       fit the length of the keyword name + value string within the 80-character
       FITS keyword record.
 
     - made small change to fits_translate_keyword to support translation of
-      blank keywords (where the name = 8 blank chracters)
+      blank keywords (where the name = 8 blank characters)
 
     - modified fpack so that it uses the minimum of the 2nd, 3rd, and 5th order
       MAD noise values when quantizing and compressing a floating point image.
@@ -190,7 +433,7 @@ Version 3.26 - 30 December 2010
    - enhanced the template keyword parsing code in grparser.c to support
      the 'D' exponent character in the ASCII representation of floating
      point keyword values (as in TVAL = 1.23D03).  Previously, the parser
-     would have writen this keyword with a string value (TVAL = '1.23D03').
+     would have written this keyword with a string value (TVAL = '1.23D03').
 
    - modified the low-level routines that write a keyword record to a FITS 
      header so that they silently replace any illegal characters (ASCII 
@@ -223,7 +466,7 @@ Version 3.26 - 30 December 2010
 
    - enhanced the test for illegal ASCII characters in a header (fftrec) to
      print out the name of the offending character (e.g TAB or Line Feed) as
-     well as the Hex value of the chracter.
+     well as the Hex value of the character.
      
    - modified ffgtbc (in fitscore.c) to support nonstandard vector variable
      length array columns in binary tables (e.g. with TFORMn = 2000PE(500)').
@@ -258,7 +501,7 @@ Version 3.26 - 30 December 2010
    - fixed a bug when updating the value of the CRPIXn world coordinate 
      system keywords when extracting a subimage from larger FITS image, using the
      extended CFITSIO syntax (e.g.  myimage[1:500:2, 1:500:2]).  This bug only 
-     affects casee where the pixel increment value is not equal to 1, and caused
+     affects cases where the pixel increment value is not equal to 1, and caused
      the coordinate grid to be shifted by between 0.25 pixels (in the case of
      a pixel increment of 2) and 0.5 pixels (for large pixel increment values).
 
diff --git a/cextern/cfitsio/drvrfile.c b/cextern/cfitsio/drvrfile.c
index 7cfa9c1..bc1be53 100644
--- a/cextern/cfitsio/drvrfile.c
+++ b/cextern/cfitsio/drvrfile.c
@@ -318,6 +318,79 @@ int file_create(char *filename, int *handle)
     int ii;
     char mode[4];
 
+#if defined(BUILD_HERA) 
+
+    /* special code to verify that the path to the file to be created */
+    /* is within the users data directory on Hera */
+ 
+    int status = 0, rootlen, rootlen2, slen;
+    char *cpos;
+    char cwd[FLEN_FILENAME], absURL[FLEN_FILENAME];
+    /* note that "/heradata/users/" is actually "/.hera_mountpnt/hera_users/"  */
+    char rootstring[]="/.hera_mountpnt/hera_users/";
+    char rootstring2[]="/heradata/users/";
+    char username[FLEN_FILENAME], userroot[FLEN_FILENAME], userroot2[FLEN_FILENAME];
+
+    /* Get the current working directory */
+    fits_get_cwd(cwd, &status);  
+    slen = strlen(cwd);
+    if (cwd[slen-1] != '/') strcat(cwd,"/"); /* make sure the CWD ends with slash */
+
+/*    printf("CWD = %s\n", cwd);  */
+
+    /* check that CWD string matches the rootstring */
+    rootlen = strlen(rootstring);
+    if (strncmp(rootstring, cwd, rootlen)) {
+       ffpmsg("invalid CWD: does not match Hera data directory");
+/*       ffpmsg(rootstring);  */
+       return(FILE_NOT_CREATED); 
+    } else {
+
+       /* get the user name from CWD (it follows the root string) */
+       strcpy(username, cwd+rootlen);  
+       cpos=strchr(username, '/');
+       if (!cpos) {
+          ffpmsg("invalid CWD: not equal to Hera data directory + username");
+/*          ffpmsg(cwd); */
+          return(FILE_NOT_CREATED); 
+       } else {
+          *(cpos+1) = '\0';   /* truncate user name string */
+
+          /* construct full user root name */
+          strcpy(userroot, rootstring);
+          strcat(userroot, username);
+          rootlen = strlen(userroot);
+
+          /* construct alternate full user root name */
+          strcpy(userroot2, rootstring2);
+          strcat(userroot2, username);
+          rootlen2 = strlen(userroot2);
+
+          /* convert the input filename to absolute path relative to the CWD */
+          fits_relurl2url(cwd,  filename,  absURL, &status);
+/*
+          printf("username = %s\n", username);
+          printf("userroot = %s\n", userroot);
+          printf("filename = %s\n", filename);
+          printf("ABS = %s\n", absURL);
+*/
+          /* check that CWD string matches the rootstring or alternate root string */
+
+          if ( strncmp(userroot,  absURL, rootlen)  &&
+               strncmp(userroot2, absURL, rootlen2) ) {
+             ffpmsg("invalid filename: path not within user directory");
+/*
+             ffpmsg(absURL);
+             ffpmsg(userroot);
+*/
+             return(FILE_NOT_CREATED); 
+          }
+       }
+    }
+    /* if we got here, then the input filename appears to be valid */
+
+#endif
+
     *handle = -1;
     for (ii = 0; ii < NMAXFILES; ii++)  /* find empty slot in table */
     {
@@ -410,7 +483,7 @@ int file_size(int handle, LONGLONG *filesize)
     if (_fseeki64(diskfile, position1, 0) != 0)  /* seek back to original pos */
         return(SEEK_ERROR);
 
-#elif _FILE_OFFSET_BITS - 0 == 64
+#elif _FILE_OFFSET_BITS - 0 == 64 && !defined(__MINGW32__)
 
 /* call the newer ftello and fseeko routines , which support */
 /*  Large Files (> 2GB) if they are supported.  */
@@ -511,7 +584,7 @@ int file_seek(int handle, LONGLONG offset)
     if (_fseeki64(handleTable[handle].fileptr, (OFF_T) offset, 0) != 0)
         return(SEEK_ERROR);
 	
-#elif _FILE_OFFSET_BITS - 0 == 64
+#elif _FILE_OFFSET_BITS - 0 == 64 && !defined(__MINGW32__)
 
     if (fseeko(handleTable[handle].fileptr, (OFF_T) offset, 0) != 0)
         return(SEEK_ERROR);
diff --git a/cextern/cfitsio/drvrmem.c b/cextern/cfitsio/drvrmem.c
index 4ef23b7..f997ed3 100644
--- a/cextern/cfitsio/drvrmem.c
+++ b/cextern/cfitsio/drvrmem.c
@@ -557,7 +557,8 @@ int mem_compress_open(char *filename, int rwmode, int *hdl)
     FILE *diskfile;
     int status, estimated = 1;
     unsigned char buffer[4];
-    size_t finalsize;
+    size_t finalsize, filesize;
+    unsigned int modulosize;
     char *ptr;
 
     if (rwmode != READONLY)
@@ -585,17 +586,45 @@ int mem_compress_open(char *filename, int rwmode, int *hdl)
 
     if (memcmp(buffer, "\037\213", 2) == 0)  /* GZIP */
     {
-        /* the uncompressed file size is give at the end of the file */
+        /* the uncompressed file size is give at the end */
+        /* of the file in the ISIZE field  (modulo 2^32) */
 
         fseek(diskfile, 0, 2);            /* move to end of file */
+        filesize = ftell(diskfile);       /* position = size of file */
         fseek(diskfile, -4L, 1);          /* move back 4 bytes */
         fread(buffer, 1, 4L, diskfile);   /* read 4 bytes */
 
         /* have to worry about integer byte order */
-	finalsize  = buffer[0];
-	finalsize |= buffer[1] << 8;
-	finalsize |= buffer[2] << 16;
-	finalsize |= buffer[3] << 24;
+	modulosize  = buffer[0];
+	modulosize |= buffer[1] << 8;
+	modulosize |= buffer[2] << 16;
+	modulosize |= buffer[3] << 24;
+
+/*
+  the field ISIZE in the gzipped file header only stores 4 bytes and contains
+  the uncompressed file size modulo 2^32.  If the uncompressed file size
+  is less than the compressed file size (filesize), then one probably needs to
+  add 2^32 = 4294967296 to the uncompressed file size, assuming that the gzip
+  produces a compressed file that is smaller than the original file.
+
+  But one must allow for the case of very small files, where the
+  gzipped file may actually be larger then the original uncompressed file.
+  Therefore, only perform the modulo 2^32 correction test if the compressed 
+  file is greater than 10,000 bytes in size.  (Note: this threhold would
+  fail only if the original file was greater than 2^32 bytes in size AND gzip 
+  was able to compress it by more than a factor of 400,000 (!) which seems
+  highly unlikely.)
+  
+  Also, obviously, this 2^32 modulo correction cannot be performed if the
+  finalsize variable is only 32-bits long.  Typically, the 'size_t' integer
+  type must be 8 bytes or larger in size to support data files that are 
+  greater than 2 GB (2^31 bytes) in size.  
+*/
+        finalsize = modulosize;
+
+        if (sizeof(size_t) > 4 && filesize > 10000) {
+            while (finalsize <  filesize) finalsize += 4294967296;
+        }
 
         estimated = 0;  /* file size is known, not estimated */
     }
@@ -607,10 +636,11 @@ int mem_compress_open(char *filename, int rwmode, int *hdl)
         fread(buffer, 1, 4L, diskfile);   /* read 4 bytes */
 
         /* have to worry about integer byte order */
-	finalsize  = buffer[0];
-	finalsize |= buffer[1] << 8;
-	finalsize |= buffer[2] << 16;
-	finalsize |= buffer[3] << 24;
+	modulosize  = buffer[0];
+	modulosize |= buffer[1] << 8;
+	modulosize |= buffer[2] << 16;
+	modulosize |= buffer[3] << 24;
+        finalsize = modulosize;
 
         estimated = 0;  /* file size is known, not estimated */
     }
diff --git a/cextern/cfitsio/editcol.c b/cextern/cfitsio/editcol.c
index dc82f02..1ca4a70 100644
--- a/cextern/cfitsio/editcol.c
+++ b/cextern/cfitsio/editcol.c
@@ -1109,9 +1109,12 @@ int fficls(fitsfile *fptr,  /* I - FITS file pointer                        */
         {
             ffbnfm(tfm, &datacode, &repeat, &width, status);
 
-            if (datacode < 0)         /* variable length array column */
-                delbyte += 8;
-            else if (datacode == 1)          /* bit column; round up  */
+            if (datacode < 0)  {       /* variable length array column */
+	        if (strchr(tfm, 'Q'))
+		  delbyte += 16;
+		else
+                  delbyte += 8;
+            } else if (datacode == 1)          /* bit column; round up  */
                 delbyte += (repeat + 7) / 8; /* to multiple of 8 bits */
             else if (datacode == 16)  /* ASCII string column */
                 delbyte += repeat;
@@ -1649,7 +1652,7 @@ int ffcpcl(fitsfile *infptr,    /* I - FITS file pointer to input file  */
     nrows = minvalue(nrows, outrows);
 
     if (typecode == TBIT)
-        repeat = (repeat - 1) / 8 + 1;  /* convert from bits to bytes */
+        repeat = (repeat + 7) / 8;  /* convert from bits to bytes */
     else if (typecode == TSTRING && (infptr->Fptr)->hdutype == BINARY_TBL)
         repeat = repeat / width;  /* convert from chars to unit strings */
 
diff --git a/cextern/cfitsio/eval_f.c b/cextern/cfitsio/eval_f.c
index f9bdd05..b642d88 100644
--- a/cextern/cfitsio/eval_f.c
+++ b/cextern/cfitsio/eval_f.c
@@ -559,7 +559,14 @@ int ffcalc_rng( fitsfile *infptr,   /* I - Input FITS file                  */
             FFUNLOCK;
             return( *status = PARSE_BAD_TYPE );
          }
-         parName++;
+         parName++;  /* Advance past '#' */
+	 if ( (strcasecmp(parName,"HISTORY") == 0 || strcasecmp(parName,"COMMENT") == 0) &&
+	      Info.datatype != TSTRING ) {
+            ffcprs();
+            ffpmsg( "HISTORY and COMMENT values must be strings (ffcalc)" );
+	    FFUNLOCK;
+	    return( *status = PARSE_BAD_TYPE );
+	 }
 
       } else if( constant ) {
 
@@ -761,7 +768,13 @@ int ffcalc_rng( fitsfile *infptr,   /* I - Input FITS file                  */
          break;
       case TBIT:
       case TSTRING:
-         ffukys( outfptr, parName, result->value.data.str, parInfo, status );
+	 if (strcasecmp(parName,"HISTORY") == 0) {
+	   ffphis( outfptr, result->value.data.str, status);
+	 } else if (strcasecmp(parName,"COMMENT") == 0) {
+	   ffpcom( outfptr, result->value.data.str, status);
+	 } else {
+	   ffukys( outfptr, parName, result->value.data.str, parInfo, status );
+	 }
          break;
       }
    }
@@ -1048,8 +1061,10 @@ int parse_data( long    totalrows,     /* I - Total rows to be processed     */
              }
           }
           repeat = outcol->repeat;
+/*
           if (DEBUG_PIXFILTER)
             printf("parse_data: using null value %ld\n", jnull);
+*/
        } else {
 
           Data = userInfo->dataPtr;
@@ -1089,9 +1104,10 @@ int parse_data( long    totalrows,     /* I - Total rows to be processed     */
 
     /*  If writing to output column, set first element to appropriate  */
     /*  null value.  If no NULLs encounter, zero out before returning. */
+/*
           if (DEBUG_PIXFILTER)
             printf("parse_data: using null value %ld\n", jnull);
-
+*/
 
     if( userInfo->dataPtr == NULL ) {
        /* First, reset Data pointer to start of output array */
diff --git a/cextern/cfitsio/fitscore.c b/cextern/cfitsio/fitscore.c
index cf82614..50332f5 100644
--- a/cextern/cfitsio/fitscore.c
+++ b/cextern/cfitsio/fitscore.c
@@ -73,11 +73,16 @@ float ffvers(float *version)  /* IO - version number */
   return the current version number of the FITSIO software
 */
 {
-      *version = (float) 3.30;
+      *version = (float) 3.35;
 
-/*       11 Apr 2012
+/*       23 May 2013
 
    Previous releases:
+      *version = 3.34    20 Mar 2013
+      *version = 3.33    14 Feb 2013
+      *version = 3.32       Oct 2012
+      *version = 3.31    18 Jul 2012
+      *version = 3.30    11 Apr 2012
       *version = 3.29    22 Sep 2011
       *version = 3.28    12 May 2011
       *version = 3.27     3 Mar 2011
@@ -1170,7 +1175,7 @@ int ffmkky(const char *keyname,   /* I - keyword name    */
 }
 /*--------------------------------------------------------------------------*/
 int ffmkey(fitsfile *fptr,    /* I - FITS file pointer  */
-           char *card,        /* I - card string value  */
+           const char *card,  /* I - card string value  */
            int *status)       /* IO - error status      */
 /*
   replace the previously read card (i.e. starting 80 bytes before the
@@ -1240,7 +1245,7 @@ int ffkeyn(const char *keyroot,   /* I - root string for keyword name */
 }
 /*--------------------------------------------------------------------------*/
 int ffnkey(int value,       /* I - index number to be appended to root name */
-           char *keyroot,   /* I - root string for keyword name */
+           const char *keyroot,   /* I - root string for keyword name */
            char *keyname,   /* O - output root + index keyword name */
            int *status)     /* IO - error status  */
 /*
@@ -3116,14 +3121,13 @@ int ffgcnn( fitsfile *fptr,  /* I - FITS file pointer                       */
 */
 {
     char errmsg[FLEN_ERRMSG];
-    static int startcol;
     int tstatus, ii, founde, foundw, match, exact, unique;
     long ivalue;
     tcolumn *colptr;
 
     if (*status <= 0)
     {
-        startcol = 0;   /* start search with first column */
+        (fptr->Fptr)->startcol = 0;   /* start search with first column */
         tstatus = 0;
     }
     else if (*status == COL_NOT_UNIQUE) /* start search from previous spot */
@@ -3145,13 +3149,13 @@ int ffgcnn( fitsfile *fptr,  /* I - FITS file pointer                       */
             return(*status);
 
     colptr = (fptr->Fptr)->tableptr;   /* pointer to first column */
-    colptr += (startcol);      /* offset to starting column */
+    colptr += ((fptr->Fptr)->startcol);      /* offset to starting column */
 
     founde = FALSE;   /* initialize 'found exact match' flag */
     foundw = FALSE;   /* initialize 'found wildcard match' flag */
     unique = FALSE;
 
-    for (ii = startcol; ii < (fptr->Fptr)->tfield; ii++, colptr++)
+    for (ii = (fptr->Fptr)->startcol; ii < (fptr->Fptr)->tfield; ii++, colptr++)
     {
         ffcmps(templt, colptr->ttype, casesen, &match, &exact);
         if (match)
@@ -3160,7 +3164,7 @@ int ffgcnn( fitsfile *fptr,  /* I - FITS file pointer                       */
             {
                 /* warning: this is the second exact match we've found     */
                 /*reset pointer to first match so next search starts there */
-               startcol = *colnum;
+               (fptr->Fptr)->startcol = *colnum;
                return(*status = COL_NOT_UNIQUE);
             }
             else if (founde)   /* a wildcard match */
@@ -3185,7 +3189,7 @@ int ffgcnn( fitsfile *fptr,  /* I - FITS file pointer                       */
                /* this is the first wild card match we've found. save it */
                strcpy(colname, colptr->ttype);
                *colnum = ii + 1;
-               startcol = *colnum;
+               (fptr->Fptr)->startcol = *colnum;
                foundw = TRUE;
                unique = TRUE;
             }
@@ -3227,7 +3231,7 @@ int ffgcnn( fitsfile *fptr,  /* I - FITS file pointer                       */
         }
     }
     
-    startcol = *colnum;  /* save pointer for next time */
+    (fptr->Fptr)->startcol = *colnum;  /* save pointer for next time */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -4244,7 +4248,7 @@ int ffpinit(fitsfile *fptr,      /* I - FITS file pointer */
 */
 {
     int groups, tstatus, simple, bitpix, naxis, extend, nspace;
-    int ttype = 0, bytlen = 0, ii;
+    int ttype = 0, bytlen = 0, ii, ntilebins;
     long  pcount, gcount;
     LONGLONG naxes[999], npix, blank;
     double bscale, bzero;
@@ -4373,17 +4377,33 @@ int ffpinit(fitsfile *fptr,      /* I - FITS file pointer */
         (fptr->Fptr)->tfield = 0;       /* table has no fields   */
 
         /* free the tile-compressed image cache, if it exists */
-        if ((fptr->Fptr)->tiledata) {
-	       free((fptr->Fptr)->tiledata);
-	       (fptr->Fptr)->tiledata = 0;
-	       (fptr->Fptr)->tilerow = 0;
-	       (fptr->Fptr)->tiledatasize = 0;
-	       (fptr->Fptr)->tiletype = 0;
-        }
+        if ((fptr->Fptr)->tilerow) {
+           ntilebins = 
+	    (((fptr->Fptr)->znaxis[0] - 1) / ((fptr->Fptr)->tilesize[0])) + 1;
+
+           for (ii = 0; ii < ntilebins; ii++) {
+             if ((fptr->Fptr)->tiledata[ii]) {
+	       free((fptr->Fptr)->tiledata[ii]);
+             }
+
+             if ((fptr->Fptr)->tilenullarray[ii]) {
+	       free((fptr->Fptr)->tilenullarray[ii]);
+             }
+            }
+	    
+	    free((fptr->Fptr)->tileanynull);
+	    free((fptr->Fptr)->tiletype);	   
+	    free((fptr->Fptr)->tiledatasize);
+	    free((fptr->Fptr)->tilenullarray);
+	    free((fptr->Fptr)->tiledata);
+	    free((fptr->Fptr)->tilerow);
 
-        if ((fptr->Fptr)->tilenullarray) {
-	       free((fptr->Fptr)->tilenullarray);
-	       (fptr->Fptr)->tilenullarray = 0;
+	    (fptr->Fptr)->tileanynull = 0;
+	    (fptr->Fptr)->tiletype = 0;	   
+	    (fptr->Fptr)->tiledatasize = 0;
+	    (fptr->Fptr)->tilenullarray = 0;
+	    (fptr->Fptr)->tiledata = 0;
+	    (fptr->Fptr)->tilerow = 0;
         }
 
         if ((fptr->Fptr)->tableptr)
@@ -4410,19 +4430,34 @@ int ffpinit(fitsfile *fptr,      /* I - FITS file pointer */
         (fptr->Fptr)->tfield = 2;  /* 2 fields: group params and the image */
 
         /* free the tile-compressed image cache, if it exists */
+        if ((fptr->Fptr)->tilerow) {
 
-        /* free the tile-compressed image cache, if it exists */
-        if ((fptr->Fptr)->tiledata) {
-	       free((fptr->Fptr)->tiledata);
-	       (fptr->Fptr)->tiledata = 0;
-	       (fptr->Fptr)->tilerow = 0;
-	       (fptr->Fptr)->tiledatasize = 0;
-	       (fptr->Fptr)->tiletype = 0;
-        }
+           ntilebins = 
+	    (((fptr->Fptr)->znaxis[0] - 1) / ((fptr->Fptr)->tilesize[0])) + 1;
+
+           for (ii = 0; ii < ntilebins; ii++) {
+             if ((fptr->Fptr)->tiledata[ii]) {
+	       free((fptr->Fptr)->tiledata[ii]);
+             }
+
+             if ((fptr->Fptr)->tilenullarray[ii]) {
+	       free((fptr->Fptr)->tilenullarray[ii]);
+             }
+            }
+	    
+	    free((fptr->Fptr)->tileanynull);
+	    free((fptr->Fptr)->tiletype);	   
+	    free((fptr->Fptr)->tiledatasize);
+	    free((fptr->Fptr)->tilenullarray);
+	    free((fptr->Fptr)->tiledata);
+	    free((fptr->Fptr)->tilerow);
 
-        if ((fptr->Fptr)->tilenullarray) {
-	       free((fptr->Fptr)->tilenullarray);
-	       (fptr->Fptr)->tilenullarray = 0;
+	    (fptr->Fptr)->tileanynull = 0;
+	    (fptr->Fptr)->tiletype = 0;	   
+	    (fptr->Fptr)->tiledatasize = 0;
+	    (fptr->Fptr)->tilenullarray = 0;
+	    (fptr->Fptr)->tiledata = 0;
+	    (fptr->Fptr)->tilerow = 0;
         }
 
         if ((fptr->Fptr)->tableptr)
@@ -4474,7 +4509,7 @@ int ffainit(fitsfile *fptr,      /* I - FITS file pointer */
 /*
   initialize the parameters defining the structure of an ASCII table 
 */
-    int  ii, nspace;
+    int  ii, nspace, ntilebins;
     long tfield;
     LONGLONG pcount, rowlen, nrows, tbcoln;
     tcolumn *colptr = 0;
@@ -4507,19 +4542,35 @@ int ffainit(fitsfile *fptr,      /* I - FITS file pointer */
     (fptr->Fptr)->tfield = tfield; /* store number of table fields in row */
 
      /* free the tile-compressed image cache, if it exists */
-     if ((fptr->Fptr)->tiledata) {
-	       free((fptr->Fptr)->tiledata);
-	       (fptr->Fptr)->tiledata = 0;
-	       (fptr->Fptr)->tilerow = 0;
-	       (fptr->Fptr)->tiledatasize = 0;
-	       (fptr->Fptr)->tiletype = 0;
-     }
+     if ((fptr->Fptr)->tilerow) {
 
-     if ((fptr->Fptr)->tilenullarray) {
-	       free((fptr->Fptr)->tilenullarray);
-	       (fptr->Fptr)->tilenullarray = 0;
-     }
+           ntilebins = 
+	    (((fptr->Fptr)->znaxis[0] - 1) / ((fptr->Fptr)->tilesize[0])) + 1;
+
+           for (ii = 0; ii < ntilebins; ii++) {
+             if ((fptr->Fptr)->tiledata[ii]) {
+	       free((fptr->Fptr)->tiledata[ii]);
+             }
 
+             if ((fptr->Fptr)->tilenullarray[ii]) {
+	       free((fptr->Fptr)->tilenullarray[ii]);
+             }
+            }
+	    
+	    free((fptr->Fptr)->tileanynull);
+	    free((fptr->Fptr)->tiletype);	   
+	    free((fptr->Fptr)->tiledatasize);
+	    free((fptr->Fptr)->tilenullarray);
+	    free((fptr->Fptr)->tiledata);
+	    free((fptr->Fptr)->tilerow);
+
+	    (fptr->Fptr)->tileanynull = 0;
+	    (fptr->Fptr)->tiletype = 0;	   
+	    (fptr->Fptr)->tiledatasize = 0;
+	    (fptr->Fptr)->tilenullarray = 0;
+	    (fptr->Fptr)->tiledata = 0;
+	    (fptr->Fptr)->tilerow = 0;
+     }
 
     if ((fptr->Fptr)->tableptr)
        free((fptr->Fptr)->tableptr); /* free memory for the old CHDU */
@@ -4675,7 +4726,7 @@ int ffbinit(fitsfile *fptr,     /* I - FITS file pointer */
 /*
   initialize the parameters defining the structure of a binary table 
 */
-    int  ii, nspace;
+    int  ii, nspace, ntilebins;
     long tfield;
     LONGLONG pcount, rowlen, nrows, totalwidth;
     tcolumn *colptr = 0;
@@ -4699,20 +4750,36 @@ int ffbinit(fitsfile *fptr,     /* I - FITS file pointer */
     (fptr->Fptr)->rowlength =  rowlen; /* store length of a row */
     (fptr->Fptr)->tfield = tfield; /* store number of table fields in row */
 
+     /* free the tile-compressed image cache, if it exists */
+     if ((fptr->Fptr)->tilerow) {
 
-    /* free the tile-compressed image cache, if it exists */
-    if ((fptr->Fptr)->tiledata) {
-	       free((fptr->Fptr)->tiledata);
-	       (fptr->Fptr)->tiledata = 0;
-	       (fptr->Fptr)->tilerow = 0;
-	       (fptr->Fptr)->tiledatasize = 0;
-	       (fptr->Fptr)->tiletype = 0;
-    }
+           ntilebins = 
+	    (((fptr->Fptr)->znaxis[0] - 1) / ((fptr->Fptr)->tilesize[0])) + 1;
 
-    if ((fptr->Fptr)->tilenullarray) {
-	       free((fptr->Fptr)->tilenullarray);
-	       (fptr->Fptr)->tilenullarray = 0;
-    }
+           for (ii = 0; ii < ntilebins; ii++) {
+             if ((fptr->Fptr)->tiledata[ii]) {
+	       free((fptr->Fptr)->tiledata[ii]);
+             }
+
+             if ((fptr->Fptr)->tilenullarray[ii]) {
+	       free((fptr->Fptr)->tilenullarray[ii]);
+             }
+            }
+	    
+	    free((fptr->Fptr)->tileanynull);
+	    free((fptr->Fptr)->tiletype);	   
+	    free((fptr->Fptr)->tiledatasize);
+	    free((fptr->Fptr)->tilenullarray);
+	    free((fptr->Fptr)->tiledata);
+	    free((fptr->Fptr)->tilerow);
+
+	    (fptr->Fptr)->tileanynull = 0;
+	    (fptr->Fptr)->tiletype = 0;	   
+	    (fptr->Fptr)->tiledatasize = 0;
+	    (fptr->Fptr)->tilenullarray = 0;
+	    (fptr->Fptr)->tiledata = 0;
+	    (fptr->Fptr)->tilerow = 0;
+     }
 
     if ((fptr->Fptr)->tableptr)
        free((fptr->Fptr)->tableptr); /* free memory for the old CHDU */
@@ -4830,7 +4897,7 @@ int ffbinit(fitsfile *fptr,     /* I - FITS file pointer */
     /* the next HDU begins in the next logical block after the data  */
     (fptr->Fptr)->headstart[ (fptr->Fptr)->curhdu + 1] = 
          (fptr->Fptr)->datastart +
-         ( (rowlen * nrows + pcount + 2879) / 2880 * 2880 );
+	 ( ((fptr->Fptr)->heapstart + (fptr->Fptr)->heapsize + 2879) / 2880 * 2880 );
 
     /* determine the byte offset to the beginning of each column */
     ffgtbc(fptr, &totalwidth, status);
@@ -6301,7 +6368,7 @@ int ffchdu(fitsfile *fptr,      /* I - FITS file pointer */
     - check the data fill values, and rewrite them if not correct
 */
     char message[FLEN_ERRMSG];
-    int stdriver;
+    int ii, stdriver, ntilebins;
 
     /* reset position to the correct HDU if necessary */
     if (fptr->HDUposition != (fptr->Fptr)->curhdu)
@@ -6326,25 +6393,43 @@ int ffchdu(fitsfile *fptr,      /* I - FITS file pointer */
 
     if ((fptr->Fptr)->open_count == 1)
     {
+
     /* free memory for the CHDU structure only if no other files are using it */
         if ((fptr->Fptr)->tableptr)
         {
             free((fptr->Fptr)->tableptr);
            (fptr->Fptr)->tableptr = NULL;
 
-            /* free the tile-compressed image cache, if it exists */
-            if ((fptr->Fptr)->tiledata) {
-	       free((fptr->Fptr)->tiledata);
-	       (fptr->Fptr)->tiledata = 0;
-	       (fptr->Fptr)->tilerow = 0;
-	       (fptr->Fptr)->tiledatasize = 0;
-	       (fptr->Fptr)->tiletype = 0;
-            }
+          /* free the tile-compressed image cache, if it exists */
+          if ((fptr->Fptr)->tilerow) {
 
-            if ((fptr->Fptr)->tilenullarray) {
-	       free((fptr->Fptr)->tilenullarray);
-	       (fptr->Fptr)->tilenullarray = 0;
+           ntilebins = 
+	    (((fptr->Fptr)->znaxis[0] - 1) / ((fptr->Fptr)->tilesize[0])) + 1;
+
+           for (ii = 0; ii < ntilebins; ii++) {
+             if ((fptr->Fptr)->tiledata[ii]) {
+	       free((fptr->Fptr)->tiledata[ii]);
+             }
+
+             if ((fptr->Fptr)->tilenullarray[ii]) {
+	       free((fptr->Fptr)->tilenullarray[ii]);
+             }
             }
+	    
+	    free((fptr->Fptr)->tileanynull);
+	    free((fptr->Fptr)->tiletype);	   
+	    free((fptr->Fptr)->tiledatasize);
+	    free((fptr->Fptr)->tilenullarray);
+	    free((fptr->Fptr)->tiledata);
+	    free((fptr->Fptr)->tilerow);
+
+	    (fptr->Fptr)->tileanynull = 0;
+	    (fptr->Fptr)->tiletype = 0;	   
+	    (fptr->Fptr)->tiledatasize = 0;
+	    (fptr->Fptr)->tilenullarray = 0;
+	    (fptr->Fptr)->tiledata = 0;
+	    (fptr->Fptr)->tilerow = 0;
+          }
         }
     }
 
@@ -6896,7 +6981,7 @@ int ffcrhd(fitsfile *fptr,      /* I - FITS file pointer */
        
        /* reset the dithering offset that may have been calculated for the */
        /* previous HDU back to the requested default value */
-       (fptr->Fptr)->dither_offset = (fptr->Fptr)->request_dither_offset;
+       (fptr->Fptr)->dither_seed = (fptr->Fptr)->request_dither_seed;
     }
 
     return(*status);
@@ -8484,7 +8569,7 @@ int ffgkcl(char *tcard)
     return (TYP_USER_KEY);  /* by default all others are user keywords */
 }
 /*--------------------------------------------------------------------------*/
-int ffdtyp(char *cval,  /* I - formatted string representation of the value */
+int ffdtyp(const char *cval,  /* I - formatted string representation of the value */
            char *dtype, /* O - datatype code: C, L, F, I, or X */
           int *status)  /* IO - error status */
 /*
@@ -8638,8 +8723,8 @@ int ffinttyp(char *cval,  /* I - formatted string representation of the integer
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2x(char *cval,   /* I - formatted string representation of the value */
-          char *dtype,  /* O - datatype code: C, L, F, I or X  */
+int ffc2x(const char *cval,   /* I - formatted string representation of the value */
+          char *dtype,        /* O - datatype code: C, L, F, I or X  */
 
     /* Only one of the following will be defined, depending on datatype */
           long *ival,    /* O - integer value       */
@@ -8667,8 +8752,8 @@ int ffc2x(char *cval,   /* I - formatted string representation of the value */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2xx(char *cval,   /* I - formatted string representation of the value */
-          char *dtype,  /* O - datatype code: C, L, F, I or X  */
+int ffc2xx(const char *cval,   /* I - formatted string representation of the value */
+          char *dtype,         /* O - datatype code: C, L, F, I or X  */
 
     /* Only one of the following will be defined, depending on datatype */
           LONGLONG *ival, /* O - integer value       */
@@ -8696,9 +8781,9 @@ int ffc2xx(char *cval,   /* I - formatted string representation of the value */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2i(char *cval,   /* I - string representation of the value */
-          long *ival,   /* O - numerical value of the input string */
-          int *status)  /* IO - error status */
+int ffc2i(const char *cval,   /* I - string representation of the value */
+          long *ival,         /* O - numerical value of the input string */
+          int *status)        /* IO - error status */
 /*
   convert formatted string to an integer value, doing implicit
   datatype conversion if necessary.
@@ -8757,9 +8842,9 @@ int ffc2i(char *cval,   /* I - string representation of the value */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2j(char *cval,     /* I - string representation of the value */
-          LONGLONG *ival, /* O - numerical value of the input string */
-          int *status)    /* IO - error status */
+int ffc2j(const char *cval,     /* I - string representation of the value */
+          LONGLONG *ival,       /* O - numerical value of the input string */
+          int *status)          /* IO - error status */
 /*
   convert formatted string to a LONGLONG integer value, doing implicit
   datatype conversion if necessary.
@@ -8818,9 +8903,9 @@ int ffc2j(char *cval,     /* I - string representation of the value */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2l(char *cval,  /* I - string representation of the value */
-         int *lval,    /* O - numerical value of the input string */
-         int *status)  /* IO - error status */
+int ffc2l(const char *cval,  /* I - string representation of the value */
+         int *lval,          /* O - numerical value of the input string */
+         int *status)        /* IO - error status */
 /*
   convert formatted string to a logical value, doing implicit
   datatype conversion if necessary
@@ -8869,9 +8954,9 @@ int ffc2l(char *cval,  /* I - string representation of the value */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2r(char *cval,   /* I - string representation of the value */
-          float *fval,  /* O - numerical value of the input string */
-          int *status)  /* IO - error status */
+int ffc2r(const char *cval,   /* I - string representation of the value */
+          float *fval,        /* O - numerical value of the input string */
+          int *status)        /* IO - error status */
 /*
   convert formatted string to a real float value, doing implicit
   datatype conversion if necessary
@@ -8916,9 +9001,9 @@ int ffc2r(char *cval,   /* I - string representation of the value */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2d(char *cval,   /* I - string representation of the value */
-          double *dval, /* O - numerical value of the input string */
-          int *status)  /* IO - error status */
+int ffc2d(const char *cval,   /* I - string representation of the value */
+          double *dval,       /* O - numerical value of the input string */
+          int *status)        /* IO - error status */
 /*
   convert formatted string to a double value, doing implicit
   datatype conversion if necessary
@@ -8963,9 +9048,9 @@ int ffc2d(char *cval,   /* I - string representation of the value */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2ii(char *cval,  /* I - string representation of the value */
-          long *ival,   /* O - numerical value of the input string */
-          int *status)  /* IO - error status */
+int ffc2ii(const char *cval,  /* I - string representation of the value */
+          long *ival,         /* O - numerical value of the input string */
+          int *status)        /* IO - error status */
 /*
   convert null-terminated formatted string to an integer value
 */
@@ -8996,9 +9081,9 @@ int ffc2ii(char *cval,  /* I - string representation of the value */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2jj(char *cval,  /* I - string representation of the value */
-          LONGLONG *ival,   /* O - numerical value of the input string */
-          int *status)  /* IO - error status */
+int ffc2jj(const char *cval,  /* I - string representation of the value */
+          LONGLONG *ival,     /* O - numerical value of the input string */
+          int *status)        /* IO - error status */
 /*
   convert null-terminated formatted string to an long long integer value
 */
@@ -9044,9 +9129,9 @@ int ffc2jj(char *cval,  /* I - string representation of the value */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2ll(char *cval,  /* I - string representation of the value: T or F */
-           int *lval,   /* O - numerical value of the input string: 1 or 0 */
-           int *status) /* IO - error status */
+int ffc2ll(const char *cval,  /* I - string representation of the value: T or F */
+           int *lval,         /* O - numerical value of the input string: 1 or 0 */
+           int *status)       /* IO - error status */
 /*
   convert null-terminated formatted string to a logical value
 */
@@ -9062,9 +9147,9 @@ int ffc2ll(char *cval,  /* I - string representation of the value: T or F */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2s(char *instr,  /* I - null terminated quoted input string */
-          char *outstr, /* O - null terminated output string without quotes */
-          int *status)  /* IO - error status */
+int ffc2s(const char *instr,  /* I - null terminated quoted input string */
+          char *outstr,       /* O - null terminated output string without quotes */
+          int *status)        /* IO - error status */
 /*
     convert an input quoted string to an unquoted string by removing
     the leading and trailing quote character.  Also, replace any
@@ -9081,8 +9166,13 @@ int ffc2s(char *instr,  /* I - null terminated quoted input string */
 
     if (instr[0] != '\'')
     {
-        strcpy(outstr, instr);  /* no leading quote, so return input string */
-        return(*status);
+        if (instr[0] == '\0') {
+           outstr[0] = '\0';
+           return(*status = VALUE_UNDEFINED);  /* null value string */
+        } else {
+          strcpy(outstr, instr);  /* no leading quote, so return input string */
+          return(*status);
+        }
     }
 
     len = strlen(instr);
@@ -9115,12 +9205,13 @@ int ffc2s(char *instr,  /* I - null terminated quoted input string */
         else
             break;
     }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2rr(char *cval,   /* I - string representation of the value */
-           float *fval,  /* O - numerical value of the input string */
-           int *status)  /* IO - error status */
+int ffc2rr(const char *cval,   /* I - string representation of the value */
+           float *fval,        /* O - numerical value of the input string */
+           int *status)        /* IO - error status */
 /*
   convert null-terminated formatted string to a float value
 */
@@ -9128,6 +9219,7 @@ int ffc2rr(char *cval,   /* I - string representation of the value */
     char *loc, msg[81], tval[73];
     struct lconv *lcc = 0;
     static char decimalpt = 0;
+    short *sptr, iret;
 
     if (*status > 0)           /* inherit input status value if > 0 */
         return(*status);
@@ -9167,11 +9259,18 @@ int ffc2rr(char *cval,   /* I - string representation of the value */
         *status = BAD_C2F;   
     }
 
-    if (errno == ERANGE)
+    sptr = (short *) fval;
+#if BYTESWAPPED && MACHINE != VAXVMS && MACHINE != ALPHAVMS
+    sptr++;       /* point to MSBs */
+#endif
+    iret = fnan(*sptr);  /* if iret == 1, then the float value is a NaN */
+
+    if (errno == ERANGE || (iret == 1) )
     {
         strcpy(msg,"Error in ffc2rr converting string to float: ");
         strncat(msg,cval,30);
         ffpmsg(msg);
+	*fval = 0.;
 
         *status = NUM_OVERFLOW;
         errno = 0;
@@ -9180,9 +9279,9 @@ int ffc2rr(char *cval,   /* I - string representation of the value */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffc2dd(char *cval,   /* I - string representation of the value */
-           double *dval, /* O - numerical value of the input string */
-           int *status)  /* IO - error status */
+int ffc2dd(const char *cval,   /* I - string representation of the value */
+           double *dval,       /* O - numerical value of the input string */
+           int *status)        /* IO - error status */
 /*
   convert null-terminated formatted string to a double value
 */
@@ -9190,6 +9289,7 @@ int ffc2dd(char *cval,   /* I - string representation of the value */
     char *loc, msg[81], tval[73];
     struct lconv *lcc = 0;
     static char decimalpt = 0;
+    short *sptr, iret;
 
     if (*status > 0)           /* inherit input status value if > 0 */
         return(*status);
@@ -9228,11 +9328,18 @@ int ffc2dd(char *cval,   /* I - string representation of the value */
         *status = BAD_C2D;   
     }
 
-    if (errno == ERANGE)
+    sptr = (short *) dval;
+#if BYTESWAPPED && MACHINE != VAXVMS && MACHINE != ALPHAVMS
+    sptr += 3;       /* point to MSBs */
+#endif
+    iret = dnan(*sptr);  /* if iret == 1, then the double value is a NaN */
+
+    if (errno == ERANGE || (iret == 1) )
     {
         strcpy(msg,"Error in ffc2dd converting string to double: ");
         strncat(msg,cval,30);
         ffpmsg(msg);
+	*dval = 0.;
 
         *status = NUM_OVERFLOW;
         errno = 0;
diff --git a/cextern/cfitsio/fitsio.h b/cextern/cfitsio/fitsio.h
index 9425630..d86b916 100644
--- a/cextern/cfitsio/fitsio.h
+++ b/cextern/cfitsio/fitsio.h
@@ -34,9 +34,14 @@ SERVICES PROVIDED HEREUNDER."
 #ifndef _FITSIO_H
 #define _FITSIO_H
 
-#define CFITSIO_VERSION 3.30
-#define CFITSIO_MINOR 30
+#define CFITSIO_VERSION 3.35
+#define CFITSIO_MINOR 35
 #define CFITSIO_MAJOR 3
+#define CFITSIO_SONAME 1
+
+/* the SONAME is incremented in a new release if the binary shared */
+/* library (on linux and Mac systems) is not backward compatible */
+/* with the previous release of CFITSIO */
 
 #include <stdio.h>
 
@@ -255,8 +260,10 @@ SERVICES PROVIDED HEREUNDER."
 #define FLOATNULLVALUE -9.11912E-36F
 #define DOUBLENULLVALUE -9.1191291391491E-36
  
-/* compression algorithm type codes */
+/* compression algorithm codes */
+#define NO_DITHER -1
 #define SUBTRACTIVE_DITHER_1 1
+#define SUBTRACTIVE_DITHER_2 2
 #define MAX_COMPRESS_DIM     6
 #define RICE_1      11
 #define GZIP_1      21
@@ -264,7 +271,7 @@ SERVICES PROVIDED HEREUNDER."
 #define PLIO_1      31
 #define HCOMPRESS_1 41
 #define BZIP2_1     51  /* not publicly supported; only for test purposes */
-#define NOCOMPRESS  0
+#define NOCOMPRESS  -1
 
 #ifndef TRUE
 #define TRUE 1
@@ -347,6 +354,7 @@ typedef struct      /* structure used to store basic FITS file information */
     int imgdim;         /* dimension of image; cached for fast access */
     LONGLONG imgnaxis[99]; /* length of each axis; cached for fast access */
     int tfield;          /* number of fields in the table (primary array has 2 */
+    int startcol;        /* used by ffgcnn to record starting column number */
     LONGLONG origrows;   /* original number of rows (value of NAXIS2 keyword)  */
     LONGLONG numrows;    /* number of rows in the table (dynamically updated) */
     LONGLONG rowlength;  /* length of a table row or image size (bytes) */
@@ -355,24 +363,31 @@ typedef struct      /* structure used to store basic FITS file information */
     LONGLONG heapsize;   /* size of the heap, in bytes */
 
          /* the following elements are related to compressed images */
+
+    /* these record the 'requested' options to be used when the image is compressed */
     int request_compress_type;  /* requested image compression algorithm */
     long request_tilesize[MAX_COMPRESS_DIM]; /* requested tiling size */
+    float request_quantize_level;  /* requested quantize level */
+    int request_quantize_method ;  /* requested  quantizing method */
+    int request_dither_seed;     /* starting offset into the array of random dithering */
+    int request_lossy_int_compress; /* lossy compress integer image as if float image? */
+    int request_huge_hdu;          /* use '1Q' rather then '1P' variable length arrays */
+    float request_hcomp_scale;     /* requested HCOMPRESS scale factor */
+    int request_hcomp_smooth;      /* requested HCOMPRESS smooth parameter */
+
+    /* these record the actual options that were used when the image was compressed */
+    int compress_type;      /* type of compression algorithm */
+    long tilesize[MAX_COMPRESS_DIM]; /* size of compression tiles */
+    float quantize_level;   /* floating point quantization level */
+    int quantize_method;   /* floating point pixel quantization algorithm */
+    int dither_seed;      /* starting offset into the array of random dithering */
 
-    float request_hcomp_scale;    /* requested HCOMPRESS scale factor */
-    int request_hcomp_smooth;     /* requested HCOMPRESS smooth parameter */
-    int request_quantize_dither ; /* requested dithering mode when quantizing */
-                                  /* floating point images to integer */
-    int request_dither_offset;    /* starting offset into the array of random dithering */
-    int request_lossy_int_compress;  /* lossy compress integer image as if float image? */
-
+    /* other compression parameters */
     int compressimg; /* 1 if HDU contains a compressed image, else 0 */
-    int quantize_dither;   /* floating point pixel quantization algorithm */
     char zcmptype[12];      /* compression type string */
-    int compress_type;      /* type of compression algorithm */
     int zbitpix;            /* FITS data type of image (BITPIX) */
     int zndim;              /* dimension of image */
     long znaxis[MAX_COMPRESS_DIM];  /* length of each axis */
-    long tilesize[MAX_COMPRESS_DIM]; /* size of compression tiles */
     long maxtilelen;        /* max number of pixels in each image tile */
     long maxelem;	    /* maximum byte length of tile compressed arrays */
 
@@ -390,19 +405,17 @@ typedef struct      /* structure used to store basic FITS file information */
     double cn_actual_bzero; /* actual value of the BZERO keyword  */
     int zblank;             /* value for null pixels, if not a column */
 
-    int rice_blocksize;     /* first compression parameter: pixels/block */
-    int rice_bytepix;       /* 2nd compression parameter: bytes/pixel */
-    float quantize_level;   /* floating point quantization level */
-    int dither_offset;      /* starting offset into the array of random dithering */
+    int rice_blocksize;     /* first compression parameter: Rice pixels/block */
+    int rice_bytepix;       /* 2nd compression parameter:   Rice bytes/pixel */
     float hcomp_scale;      /* 1st hcompress compression parameter */
     int hcomp_smooth;       /* 2nd hcompress compression parameter */
 
-    int  tilerow;           /* row number of the uncompressed tiledata */
-    long tiledatasize;       /* length of the tile data in bytes */
-    int tiletype;           /* datatype of the tile (TINT, TSHORT, etc) */
-    void *tiledata;         /* uncompressed tile of data, for row tilerow */
-    char *tilenullarray;    /* optional array of null value flags */
-    int tileanynull;        /* anynulls in this tile? */
+    int  *tilerow;          /* row number of the array of uncompressed tiledata */
+    long *tiledatasize;     /* length of the array of tile data in bytes */
+    int *tiletype;          /* datatype of the array of tile (TINT, TSHORT, etc) */
+    void **tiledata;        /* array of uncompressed tile of data, for row *tilerow */
+    void **tilenullarray;   /* array of optional array of null value flags */
+    int *tileanynull;       /* anynulls in the array of tile? */
 
     char *iobuffer;         /* pointer to FITS file I/O buffers */
     long bufrecnum[NIOBUF]; /* file record number of each of the buffers */
@@ -678,7 +691,8 @@ int CFITS2Unit( fitsfile *fptr );
 fitsfile* CUnit2FITS(int unit);
 
 /*----------------  FITS file URL parsing routines -------------*/
-int fits_get_token(char **ptr, char *delimiter, char *token, int *isanumber);
+int fits_get_token (char **ptr, char *delimiter, char *token, int *isanumber);
+int fits_get_token2(char **ptr, char *delimiter, char **token, int *isanumber, int *status);
 char *fits_split_names(char *list);
 int ffiurl(  char *url,  char *urltype, char *infile,
                     char *outfile, char *extspec, char *rowfilter,
@@ -686,6 +700,9 @@ int ffiurl(  char *url,  char *urltype, char *infile,
 int ffifile (char *url,  char *urltype, char *infile,
                     char *outfile, char *extspec, char *rowfilter,
                     char *binspec, char *colspec, char *pixfilter, int *status);
+int ffifile2 (char *url,  char *urltype, char *infile,
+                    char *outfile, char *extspec, char *rowfilter,
+                    char *binspec, char *colspec, char *pixfilter, char *compspec, int *status);
 int ffrtnm(char *url, char *rootname, int *status);
 int ffexist(const char *infile, int *exists, int *status);
 int ffexts(char *extspec, int *extnum,  char *extname, int *extvers,
@@ -719,7 +736,7 @@ int ffomem(fitsfile **fptr, const char *name, int mode, void **buffptr,
            void *(*mem_realloc)(void *p, size_t newsize),
            int *status);
 int ffopen(fitsfile **fptr, const char *filename, int iomode, int *status);
-int ffopentest(double version, fitsfile **fptr, const char *filename, int iomode, int *status);
+int ffopentest(int soname, fitsfile **fptr, const char *filename, int iomode, int *status);
 
 int ffdopn(fitsfile **fptr, const char *filename, int iomode, int *status);
 int fftopn(fitsfile **fptr, const char *filename, int iomode, int *status);
@@ -740,7 +757,7 @@ int ffclos(fitsfile *fptr, int *status);
 int ffdelt(fitsfile *fptr, int *status);
 int ffflnm(fitsfile *fptr, char *filename, int *status);
 int ffflmd(fitsfile *fptr, int *filemode, int *status);
-int fits_delete_iraf_file(char *filename, int *status);
+int fits_delete_iraf_file(const char *filename, int *status);
 
 /*---------------- utility routines -------------*/
 
@@ -759,13 +776,14 @@ int fftkey(const char *keyword, int *status);
 int fftrec(char *card, int *status);
 int ffnchk(fitsfile *fptr, int *status);
 int ffkeyn(const char *keyroot, int value, char *keyname, int *status);
-int ffnkey(int value, char *keyroot, char *keyname, int *status);
+int ffnkey(int value, const char *keyroot, char *keyname, int *status);
 int ffgkcl(char *card);
-int ffdtyp(char *cval, char *dtype, int *status);
+int ffdtyp(const char *cval, char *dtype, int *status);
 int ffinttyp(char *cval, int *datatype, int *negative, int *status);
 int ffpsvc(char *card, char *value, char *comm, int *status);
 int ffgknm(char *card, char *name, int *length, int *status);
 int ffgthd(char *tmplt, char *card, int *hdtype, int *status);
+int ffmkky(const char *keyname, char *keyval, const char *comm, char *card, int *status);
 int fits_translate_keyword(char *inrec, char *outrec, char *patterns[][2],
           int npat, int n_value, int n_offset, int n_range, int *pat_num,
           int *i, int *j,  int *m, int *n, int *status);
@@ -789,7 +807,7 @@ int ffpky(fitsfile *fptr, int datatype, const char *keyname, void *value,
           const char *comm, int *status);
 int ffprec(fitsfile *fptr, const char *card, int *status);
 int ffpcom(fitsfile *fptr, const char *comm, int *status);
-int ffpunt(fitsfile *fptr, const char *keyname, char *unit, int *status);
+int ffpunt(fitsfile *fptr, const char *keyname, const char *unit, int *status);
 int ffphis(fitsfile *fptr, const char *history, int *status);
 int ffpdat(fitsfile *fptr, int *status);
 int ffverifydate(int year, int month, int day, int *status);
@@ -802,7 +820,7 @@ int ffs2dt(char *datestr, int *year, int *month, int *day, int *status);
 int ffs2tm(char *datestr, int *year, int *month, int *day, int *hour,
           int *minute, double *second, int *status);
 int ffpkyu(fitsfile *fptr, const char *keyname, const char *comm, int *status);
-int ffpkys(fitsfile *fptr, const char *keyname, char *value, const char *comm,int *status);
+int ffpkys(fitsfile *fptr, const char *keyname, const char *value, const char *comm,int *status);
 int ffpkls(fitsfile *fptr, const char *keyname, const char *value, const char *comm,int *status);
 int ffplsw(fitsfile *fptr, int *status);
 int ffpkyl(fitsfile *fptr, const char *keyname, int  value, const char *comm, int *status);
@@ -888,6 +906,7 @@ int ffgky( fitsfile *fptr, int datatype, const char *keyname, void *value,
            char *comm, int *status);
 int ffgkys(fitsfile *fptr, const char *keyname, char *value, char *comm, int *status);
 int ffgkls(fitsfile *fptr, const char *keyname, char **value, char *comm, int *status);
+int fffree(void *value,  int  *status); 
 int fffkls(char *value, int *status);
 int ffgkyl(fitsfile *fptr, const char *keyname, int *value, char *comm, int *status);
 int ffgkyj(fitsfile *fptr, const char *keyname, long *value, char *comm, int *status);
@@ -952,80 +971,80 @@ int ffghbnll(fitsfile *fptr, int maxfield, LONGLONG *naxis2, int *tfields,
 
 /*--------------------- update keywords ---------------*/
 int ffuky(fitsfile *fptr, int datatype, const char *keyname, void *value,
-          char *comm, int *status);
-int ffucrd(fitsfile *fptr, const char *keyname, char *card, int *status);
-int ffukyu(fitsfile *fptr, const char *keyname, char *comm, int *status);
-int ffukys(fitsfile *fptr, const char *keyname, char *value, char *comm, int *status);
-int ffukls(fitsfile *fptr, const char *keyname, char *value, char *comm, int *status);
-int ffukyl(fitsfile *fptr, const char *keyname, int value, char *comm, int *status);
-int ffukyj(fitsfile *fptr, const char *keyname, LONGLONG value, char *comm, int *status);
-int ffukyf(fitsfile *fptr, const char *keyname, float value, int decim, char *comm,
+          const char *comm, int *status);
+int ffucrd(fitsfile *fptr, const char *keyname, const char *card, int *status);
+int ffukyu(fitsfile *fptr, const char *keyname, const char *comm, int *status);
+int ffukys(fitsfile *fptr, const char *keyname, const char *value, const char *comm, int *status);
+int ffukls(fitsfile *fptr, const char *keyname, const char *value, const char *comm, int *status);
+int ffukyl(fitsfile *fptr, const char *keyname, int value, const char *comm, int *status);
+int ffukyj(fitsfile *fptr, const char *keyname, LONGLONG value, const char *comm, int *status);
+int ffukyf(fitsfile *fptr, const char *keyname, float value, int decim, const char *comm,
           int *status);
-int ffukye(fitsfile *fptr, const char *keyname, float value, int decim, char *comm,
+int ffukye(fitsfile *fptr, const char *keyname, float value, int decim, const char *comm,
           int *status);
-int ffukyg(fitsfile *fptr, const char *keyname, double value, int decim, char *comm,
+int ffukyg(fitsfile *fptr, const char *keyname, double value, int decim, const char *comm,
           int *status);
-int ffukyd(fitsfile *fptr, const char *keyname, double value, int decim, char *comm,
+int ffukyd(fitsfile *fptr, const char *keyname, double value, int decim, const char *comm,
           int *status);
-int ffukyc(fitsfile *fptr, const char *keyname, float *value, int decim, char *comm,
+int ffukyc(fitsfile *fptr, const char *keyname, float *value, int decim, const char *comm,
           int *status);
-int ffukym(fitsfile *fptr, const char *keyname, double *value, int decim, char *comm,
+int ffukym(fitsfile *fptr, const char *keyname, double *value, int decim, const char *comm,
           int *status);
-int ffukfc(fitsfile *fptr, const char *keyname, float *value, int decim, char *comm,
+int ffukfc(fitsfile *fptr, const char *keyname, float *value, int decim, const char *comm,
           int *status);
-int ffukfm(fitsfile *fptr, const char *keyname, double *value, int decim, char *comm,
+int ffukfm(fitsfile *fptr, const char *keyname, double *value, int decim, const char *comm,
           int *status);
 
 /*--------------------- modify keywords ---------------*/
-int ffmrec(fitsfile *fptr, int nkey, char *card, int *status);
-int ffmcrd(fitsfile *fptr, const char *keyname, char *card, int *status);
+int ffmrec(fitsfile *fptr, int nkey, const char *card, int *status);
+int ffmcrd(fitsfile *fptr, const char *keyname, const char *card, int *status);
 int ffmnam(fitsfile *fptr, const char *oldname, const char *newname, int *status);
-int ffmcom(fitsfile *fptr, const char *keyname, char *comm, int *status);
-int ffmkyu(fitsfile *fptr, const char *keyname, char *comm, int *status);
-int ffmkys(fitsfile *fptr, const char *keyname, char *value, char *comm,int *status);
-int ffmkls(fitsfile *fptr, const char *keyname, char *value, char *comm,int *status);
-int ffmkyl(fitsfile *fptr, const char *keyname, int value, char *comm, int *status);
-int ffmkyj(fitsfile *fptr, const char *keyname, LONGLONG value, char *comm, int *status);
-int ffmkyf(fitsfile *fptr, const char *keyname, float value, int decim, char *comm,
+int ffmcom(fitsfile *fptr, const char *keyname, const char *comm, int *status);
+int ffmkyu(fitsfile *fptr, const char *keyname, const char *comm, int *status);
+int ffmkys(fitsfile *fptr, const char *keyname, const char *value, const char *comm,int *status);
+int ffmkls(fitsfile *fptr, const char *keyname, const char *value, const char *comm,int *status);
+int ffmkyl(fitsfile *fptr, const char *keyname, int value, const char *comm, int *status);
+int ffmkyj(fitsfile *fptr, const char *keyname, LONGLONG value, const char *comm, int *status);
+int ffmkyf(fitsfile *fptr, const char *keyname, float value, int decim, const char *comm,
           int *status);
-int ffmkye(fitsfile *fptr, const char *keyname, float value, int decim, char *comm,
+int ffmkye(fitsfile *fptr, const char *keyname, float value, int decim, const char *comm,
           int *status);
-int ffmkyg(fitsfile *fptr, const char *keyname, double value, int decim, char *comm,
+int ffmkyg(fitsfile *fptr, const char *keyname, double value, int decim, const char *comm,
           int *status);
-int ffmkyd(fitsfile *fptr, const char *keyname, double value, int decim, char *comm,
+int ffmkyd(fitsfile *fptr, const char *keyname, double value, int decim, const char *comm,
           int *status);
-int ffmkyc(fitsfile *fptr, const char *keyname, float *value, int decim, char *comm,
+int ffmkyc(fitsfile *fptr, const char *keyname, float *value, int decim, const char *comm,
           int *status);
-int ffmkym(fitsfile *fptr, const char *keyname, double *value, int decim, char *comm,
+int ffmkym(fitsfile *fptr, const char *keyname, double *value, int decim, const char *comm,
           int *status);
-int ffmkfc(fitsfile *fptr, const char *keyname, float *value, int decim, char *comm,
+int ffmkfc(fitsfile *fptr, const char *keyname, float *value, int decim, const char *comm,
           int *status);
-int ffmkfm(fitsfile *fptr, const char *keyname, double *value, int decim, char *comm,
+int ffmkfm(fitsfile *fptr, const char *keyname, double *value, int decim, const char *comm,
           int *status);
  
 /*--------------------- insert keywords ---------------*/
-int ffirec(fitsfile *fptr, int nkey, char *card, int *status);
-int ffikey(fitsfile *fptr, char *card, int *status);
-int ffikyu(fitsfile *fptr, const char *keyname, char *comm, int *status);
-int ffikys(fitsfile *fptr, const char *keyname, char *value, char *comm,int *status);
-int ffikls(fitsfile *fptr, const char *keyname, char *value, char *comm,int *status);
-int ffikyl(fitsfile *fptr, const char *keyname, int value, char *comm, int *status);
-int ffikyj(fitsfile *fptr, const char *keyname, LONGLONG value, char *comm, int *status);
-int ffikyf(fitsfile *fptr, const char *keyname, float value, int decim, char *comm,
+int ffirec(fitsfile *fptr, int nkey, const char *card, int *status);
+int ffikey(fitsfile *fptr, const char *card, int *status);
+int ffikyu(fitsfile *fptr, const char *keyname, const char *comm, int *status);
+int ffikys(fitsfile *fptr, const char *keyname, const char *value, const char *comm,int *status);
+int ffikls(fitsfile *fptr, const char *keyname, const char *value, const char *comm,int *status);
+int ffikyl(fitsfile *fptr, const char *keyname, int value, const char *comm, int *status);
+int ffikyj(fitsfile *fptr, const char *keyname, LONGLONG value, const char *comm, int *status);
+int ffikyf(fitsfile *fptr, const char *keyname, float value, int decim, const char *comm,
           int *status);
-int ffikye(fitsfile *fptr, const char *keyname, float value, int decim, char *comm,
+int ffikye(fitsfile *fptr, const char *keyname, float value, int decim, const char *comm,
           int *status);
-int ffikyg(fitsfile *fptr, const char *keyname, double value, int decim, char *comm,
+int ffikyg(fitsfile *fptr, const char *keyname, double value, int decim, const char *comm,
           int *status);
-int ffikyd(fitsfile *fptr, const char *keyname, double value, int decim, char *comm,
+int ffikyd(fitsfile *fptr, const char *keyname, double value, int decim, const char *comm,
           int *status);
-int ffikyc(fitsfile *fptr, const char *keyname, float *value, int decim, char *comm,
+int ffikyc(fitsfile *fptr, const char *keyname, float *value, int decim, const char *comm,
           int *status);
-int ffikym(fitsfile *fptr, const char *keyname, double *value, int decim, char *comm,
+int ffikym(fitsfile *fptr, const char *keyname, double *value, int decim, const char *comm,
           int *status);
-int ffikfc(fitsfile *fptr, const char *keyname, float *value, int decim, char *comm,
+int ffikfc(fitsfile *fptr, const char *keyname, float *value, int decim, const char *comm,
           int *status);
-int ffikfm(fitsfile *fptr, const char *keyname, double *value, int decim, char *comm,
+int ffikfm(fitsfile *fptr, const char *keyname, double *value, int decim, const char *comm,
           int *status);
 
 /*--------------------- delete keywords ---------------*/
@@ -1881,9 +1900,13 @@ int fits_set_noise_bits(fitsfile *fptr, int noisebits, int *status);
 int fits_set_quantize_level(fitsfile *fptr, float qlevel, int *status);
 int fits_set_hcomp_scale(fitsfile *fptr, float scale, int *status);
 int fits_set_hcomp_smooth(fitsfile *fptr, int smooth, int *status);
+int fits_set_quantize_method(fitsfile *fptr, int method, int *status);
 int fits_set_quantize_dither(fitsfile *fptr, int dither, int *status);
+int fits_set_dither_seed(fitsfile *fptr, int seed, int *status);
 int fits_set_dither_offset(fitsfile *fptr, int offset, int *status);
 int fits_set_lossy_int(fitsfile *fptr, int lossy_int, int *status);
+int fits_set_huge_hdu(fitsfile *fptr, int huge, int *status);
+int fits_set_compression_pref(fitsfile *infptr, fitsfile *outfptr, int *status);
 
 int fits_get_compression_type(fitsfile *fptr, int *ctype, int *status);
 int fits_get_tile_dim(fitsfile *fptr, int ndim, long *dims, int *status);
@@ -1891,7 +1914,7 @@ int fits_get_quantize_level(fitsfile *fptr, float *qlevel, int *status);
 int fits_get_noise_bits(fitsfile *fptr, int *noisebits, int *status);
 int fits_get_hcomp_scale(fitsfile *fptr, float *scale, int *status);
 int fits_get_hcomp_smooth(fitsfile *fptr, int *smooth, int *status);
-int fits_get_dither_offset(fitsfile *fptr, int *offset, int *status);
+int fits_get_dither_seed(fitsfile *fptr, int *seed, int *status);
 
 int fits_img_compress(fitsfile *infptr, fitsfile *outfptr, int *status);
 int fits_compress_img(fitsfile *infptr, fitsfile *outfptr, int compress_type,
@@ -1912,8 +1935,8 @@ int fits_hdecompress(unsigned char *input, int smooth, int *a, int *nx,
 int fits_hdecompress64(unsigned char *input, int smooth, LONGLONG *a, int *nx, 
        int *ny, int *scale, int *status);
 
-int fits_transpose_table(fitsfile *infptr, fitsfile *outfptr, int *status);
-int fits_compress_table_fast(fitsfile *infptr, fitsfile *outfptr, int *status);
+int fits_compress_table_gzip(fitsfile *infptr, fitsfile *outfptr, int *status);
+int fits_compress_table_shuffle(fitsfile *infptr, fitsfile *outfptr, int *status);
 int fits_compress_table_best(fitsfile *infptr, fitsfile *outfptr, int *status);
 int fits_compress_table_rice(fitsfile *infptr, fitsfile *outfptr, int *status);
 int fits_uncompress_table(fitsfile *infptr, fitsfile *outfptr, int *status);
diff --git a/cextern/cfitsio/fitsio2.h b/cextern/cfitsio/fitsio2.h
index b6fd66c..438defc 100644
--- a/cextern/cfitsio/fitsio2.h
+++ b/cextern/cfitsio/fitsio2.h
@@ -18,12 +18,12 @@
 
 #ifdef _REENTRANT
 #include <pthread.h>
-#include <assert.h>
+/*  #include <assert.h>  not needed any more */
 extern pthread_mutex_t Fitsio_Lock;
 extern int Fitsio_Pthread_Status;
 
-#define FFLOCK1(lockname)   (assert(!(Fitsio_Pthread_Status = pthread_mutex_lock(&lockname))))
-#define FFUNLOCK1(lockname) (assert(!(Fitsio_Pthread_Status = pthread_mutex_unlock(&lockname))))
+#define FFLOCK1(lockname)   (Fitsio_Pthread_Status = pthread_mutex_lock(&lockname))
+#define FFUNLOCK1(lockname) (Fitsio_Pthread_Status = pthread_mutex_unlock(&lockname))
 #define FFLOCK   FFLOCK1(Fitsio_Lock)
 #define FFUNLOCK FFUNLOCK1(Fitsio_Lock)
 
@@ -313,7 +313,6 @@ extern int Fitsio_Pthread_Status;
 #define COMPRESS_NULL_VALUE -2147483647
 #define N_RANDOM 10000  /* DO NOT CHANGE THIS;  used when quantizing real numbers */
 
-int ffmkky(const char *keyname, char *keyval, const char *comm, char *card, int *status);
 int ffgnky(fitsfile *fptr, char *card, int *status);
 void ffcfmt(char *tform, char *cform);
 void ffcdsp(char *tform, char *cform);
@@ -322,24 +321,26 @@ void ffswap4(INT32BIT *values, long nvalues);
 void ffswap8(double *values, long nvalues);
 int ffi2c(LONGLONG ival, char *cval, int *status);
 int ffl2c(int lval, char *cval, int *status);
-int ffs2c(char *instr, char *outstr, int *status);
+int ffs2c(const char *instr, char *outstr, int *status);
 int ffr2f(float fval, int decim, char *cval, int *status);
 int ffr2e(float fval, int decim, char *cval, int *status);
 int ffd2f(double dval, int decim, char *cval, int *status);
 int ffd2e(double dval, int decim, char *cval, int *status);
-int ffc2ii(char *cval, long *ival, int *status);
-int ffc2jj(char *cval, LONGLONG *ival, int *status);
-int ffc2ll(char *cval, int *lval, int *status);
-int ffc2rr(char *cval, float *fval, int *status);
-int ffc2dd(char *cval, double *dval, int *status);
-int ffc2x(char *cval, char *dtype, long *ival, int *lval, char *sval,
+int ffc2ii(const char *cval, long *ival, int *status);
+int ffc2jj(const char *cval, LONGLONG *ival, int *status);
+int ffc2ll(const char *cval, int *lval, int *status);
+int ffc2rr(const char *cval, float *fval, int *status);
+int ffc2dd(const char *cval, double *dval, int *status);
+int ffc2x(const char *cval, char *dtype, long *ival, int *lval, char *sval,
           double *dval, int *status);
-int ffc2s(char *instr, char *outstr, int *status);
-int ffc2i(char *cval, long *ival, int *status);
-int ffc2j(char *cval, LONGLONG *ival, int *status);
-int ffc2r(char *cval, float *fval, int *status);
-int ffc2d(char *cval, double *dval, int *status);
-int ffc2l(char *cval, int *lval, int *status);
+int ffc2xx(const char *cval, char *dtype, LONGLONG *ival, int *lval, char *sval,
+          double *dval, int *status);
+int ffc2s(const char *instr, char *outstr, int *status);
+int ffc2i(const char *cval, long *ival, int *status);
+int ffc2j(const char *cval, LONGLONG *ival, int *status);
+int ffc2r(const char *cval, float *fval, int *status);
+int ffc2d(const char *cval, double *dval, int *status);
+int ffc2l(const char *cval, int *lval, int *status);
 void ffxmsg(int action, char *err_message);
 int ffgcnt(fitsfile *fptr, char *value, int *status);
 int ffgtkn(fitsfile *fptr, int numkey, char *keyname, long *value, int *status);
@@ -351,7 +352,7 @@ int ffgphd(fitsfile *fptr, int maxdim, int *simple, int *bitpix, int *naxis,
 int ffgttb(fitsfile *fptr, LONGLONG *rowlen, LONGLONG *nrows, LONGLONG *pcount,
           long *tfield, int *status);
  
-int ffmkey(fitsfile *fptr, char *card, int *status);
+int ffmkey(fitsfile *fptr, const char *card, int *status);
  
 /*  ffmbyt has been moved to fitsio.h */
 int ffgbyt(fitsfile *fptr, LONGLONG nbytes, void *buffer, int *status);
@@ -1001,18 +1002,20 @@ int imcomp_copy_overlap (char *tile, int pixlen, int ndim,
          long *tfpixel, long *tlpixel, char *bnullarray, char *image,
          long *fpixel, long *lpixel, long *inc, int nullcheck, char *nullarray,
          int *status);
+int imcomp_test_overlap (int ndim, long *tfpixel, long *tlpixel, 
+         long *fpixel, long *lpixel, long *inc, int *status);
 int imcomp_merge_overlap (char *tile, int pixlen, int ndim,
          long *tfpixel, long *tlpixel, char *bnullarray, char *image,
          long *fpixel, long *lpixel, int nullcheck, int *status);
 int imcomp_decompress_img(fitsfile *infptr, fitsfile *outfptr, int datatype,
          int  *status);
 int fits_quantize_float (long row, float fdata[], long nx, long ny, int nullcheck,
-         float in_null_value,
-           float quantize_level, int idata[], double *bscale, double *bzero,
+         float in_null_value, float quantize_level, 
+           int dither_method, int idata[], double *bscale, double *bzero,
            int *iminval, int *imaxval);
 int fits_quantize_double (long row, double fdata[], long nx, long ny, int nullcheck,
-         double in_null_value,
-           float quantize_level, int idata[], double *bscale, double *bzero,
+         double in_null_value, float quantize_level,
+           int dither_method, int idata[], double *bscale, double *bzero,
            int *iminval, int *imaxval);
 int fits_rcomp(int a[], int nx, unsigned char *c, int clen,int nblock);
 int fits_rcomp_short(short a[], int nx, unsigned char *c, int clen,int nblock);
@@ -1026,7 +1029,8 @@ int fits_rdecomp_byte (unsigned char *c, int clen, unsigned char array[], int nx
 int pl_p2li (int *pxsrc, int xs, short *lldst, int npix);
 int pl_l2pi (short *ll_src, int xs, int *px_dst, int npix);
 int fits_init_randoms(void);
-
+int fits_unset_compression_param( fitsfile *fptr, int *status);
+int fits_unset_compression_request( fitsfile *fptr, int *status);
 int fitsio_init_lock(void);
 
 /* general driver routines */
diff --git a/cextern/cfitsio/getcolb.c b/cextern/cfitsio/getcolb.c
index 4fff57d..9c2746f 100644
--- a/cextern/cfitsio/getcolb.c
+++ b/cextern/cfitsio/getcolb.c
@@ -659,12 +659,12 @@ int ffgclb( fitsfile *fptr,   /* I - FITS file pointer                       */
 */
 {
     double scale, zero, power = 1., dtemp;
-    int tcode, maxelem, hdutype, xcode, decimals;
+    int tcode, maxelem2, hdutype, xcode, decimals;
     long twidth, incre, ntodo;
     long ii, xwidth;
     int convert, nulcheck, readcheck = 0;
     LONGLONG repeat, startpos, elemnum, readptr, tnull;
-    LONGLONG rowlen, rownum, remain, next, rowincre;
+    LONGLONG rowlen, rownum, remain, next, rowincre, maxelem;
     char tform[20];
     char message[81];
     char snull[20];   /*  the FITS null value if reading from ASCII table  */
@@ -695,8 +695,9 @@ int ffgclb( fitsfile *fptr,   /* I - FITS file pointer                       */
         readcheck = -1;  /* don't do range checking in this case */
 
     ffgcprll( fptr, colnum, firstrow, firstelem, nelem, readcheck, &scale, &zero,
-         tform, &twidth, &tcode, &maxelem, &startpos, &elemnum, &incre,
+         tform, &twidth, &tcode, &maxelem2, &startpos, &elemnum, &incre,
          &repeat, &rowlen, &hdutype, &tnull, snull, status);
+    maxelem = maxelem2;
 
     /* special case */
     if (tcode == TLOGICAL && elemincre == 1)
@@ -772,7 +773,7 @@ int ffgclb( fitsfile *fptr,   /* I - FITS file pointer                       */
     convert = 1;
     if (tcode == TBYTE) /* Special Case:                        */
     {                             /* no type convertion required, so read */
-        maxelem = (int) nelem;          /* data directly into output buffer.    */
+        maxelem = nelem;          /* data directly into output buffer.    */
 
         if (nulcheck == 0 && scale == 1. && zero == 0.)
             convert = 0;  /* no need to scale data or find nulls */
diff --git a/cextern/cfitsio/getcold.c b/cextern/cfitsio/getcold.c
index 8c33931..cbee5b0 100644
--- a/cextern/cfitsio/getcold.c
+++ b/cextern/cfitsio/getcold.c
@@ -734,12 +734,12 @@ int ffgcld( fitsfile *fptr,   /* I - FITS file pointer                       */
 */
 {
     double scale, zero, power = 1, dtemp;
-    int tcode, hdutype, xcode, decimals, maxelem;
+    int tcode, hdutype, xcode, decimals, maxelem2;
     long twidth, incre;
     long ii, xwidth, ntodo;
     int convert, nulcheck, readcheck = 0;
     LONGLONG repeat, startpos, elemnum, readptr, tnull;
-    LONGLONG rowlen, rownum, remain, next, rowincre;
+    LONGLONG rowlen, rownum, remain, next, rowincre, maxelem;
     char tform[20];
     char message[81];
     char snull[20];   /*  the FITS null value if reading from ASCII table  */
@@ -765,9 +765,10 @@ int ffgcld( fitsfile *fptr,   /* I - FITS file pointer                       */
         readcheck = -1;  /* don't do range checking in this case */
 
     if ( ffgcprll( fptr, colnum, firstrow, firstelem, nelem, readcheck, &scale, &zero,
-         tform, &twidth, &tcode, &maxelem, &startpos, &elemnum, &incre,
+         tform, &twidth, &tcode, &maxelem2, &startpos, &elemnum, &incre,
          &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0 )
          return(*status);
+    maxelem = maxelem2;
 
     incre *= elemincre;   /* multiply incre to just get every nth pixel */
 
@@ -807,7 +808,7 @@ int ffgcld( fitsfile *fptr,   /* I - FITS file pointer                       */
     convert = 1;
     if (tcode == TDOUBLE) /* Special Case:                        */
     {                              /* no type convertion required, so read */
-        maxelem = (int) nelem;           /* data directly into output buffer.    */
+        maxelem = nelem;           /* data directly into output buffer.    */
 
         if (nulcheck == 0 && scale == 1. && zero == 0.)
             convert = 0;  /* no need to scale data or find nulls */
diff --git a/cextern/cfitsio/getcole.c b/cextern/cfitsio/getcole.c
index 441c657..268c16d 100644
--- a/cextern/cfitsio/getcole.c
+++ b/cextern/cfitsio/getcole.c
@@ -735,12 +735,12 @@ int ffgcle( fitsfile *fptr,   /* I - FITS file pointer                       */
 */
 {
     double scale, zero, power = 1., dtemp;
-    int tcode, maxelem, hdutype, xcode, decimals;
+    int tcode, maxelem2, hdutype, xcode, decimals;
     long twidth, incre;
     long ii, xwidth, ntodo;
     int convert, nulcheck, readcheck = 0;
     LONGLONG repeat, startpos, elemnum, readptr, tnull;
-    LONGLONG rowlen, rownum, remain, next, rowincre;
+    LONGLONG rowlen, rownum, remain, next, rowincre, maxelem;
     char tform[20];
     char message[81];
     char snull[20];   /*  the FITS null value if reading from ASCII table  */
@@ -766,9 +766,10 @@ int ffgcle( fitsfile *fptr,   /* I - FITS file pointer                       */
         readcheck = -1;  /* don't do range checking in this case */
 
     if ( ffgcprll( fptr, colnum, firstrow, firstelem, nelem, readcheck, &scale, &zero,
-         tform, &twidth, &tcode, &maxelem, &startpos, &elemnum, &incre,
+         tform, &twidth, &tcode, &maxelem2, &startpos, &elemnum, &incre,
          &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0 )
          return(*status);
+    maxelem = maxelem2;
 
     incre *= elemincre;   /* multiply incre to just get every nth pixel */
 
@@ -808,7 +809,7 @@ int ffgcle( fitsfile *fptr,   /* I - FITS file pointer                       */
     convert = 1;
     if (tcode == TFLOAT) /* Special Case:                        */
     {                             /* no type convertion required, so read */
-        maxelem = (int) nelem;          /* data directly into output buffer.    */
+        maxelem = nelem;          /* data directly into output buffer.    */
 
         if (nulcheck == 0 && scale == 1. && zero == 0.)
             convert = 0;  /* no need to scale data or find nulls */
diff --git a/cextern/cfitsio/getcoli.c b/cextern/cfitsio/getcoli.c
index e3386e8..6ad2956 100644
--- a/cextern/cfitsio/getcoli.c
+++ b/cextern/cfitsio/getcoli.c
@@ -659,12 +659,12 @@ int ffgcli( fitsfile *fptr,   /* I - FITS file pointer                       */
 */
 {
     double scale, zero, power = 1., dtemp;
-    int tcode, maxelem, hdutype, xcode, decimals;
+    int tcode, maxelem2, hdutype, xcode, decimals;
     long twidth, incre;
     long ii, xwidth, ntodo;
     int convert, nulcheck, readcheck = 0;
     LONGLONG repeat, startpos, elemnum, readptr, tnull;
-    LONGLONG rowlen, rownum, remain, next, rowincre;
+    LONGLONG rowlen, rownum, remain, next, rowincre, maxelem;
     char tform[20];
     char message[81];
     char snull[20];   /*  the FITS null value if reading from ASCII table  */
@@ -690,9 +690,10 @@ int ffgcli( fitsfile *fptr,   /* I - FITS file pointer                       */
         readcheck = -1;  /* don't do range checking in this case */
 
     if ( ffgcprll( fptr, colnum, firstrow, firstelem, nelem, readcheck, &scale, &zero,
-         tform, &twidth, &tcode, &maxelem, &startpos, &elemnum, &incre,
+         tform, &twidth, &tcode, &maxelem2, &startpos, &elemnum, &incre,
          &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0 )
          return(*status);
+    maxelem = maxelem2;
 
     incre *= elemincre;   /* multiply incre to just get every nth pixel */
 
@@ -731,7 +732,7 @@ int ffgcli( fitsfile *fptr,   /* I - FITS file pointer                       */
     convert = 1;
     if (tcode == TSHORT) /* Special Case:                        */
     {                             /* no type convertion required, so read */
-        maxelem = (int) nelem;          /* data directly into output buffer.    */
+        maxelem = nelem;          /* data directly into output buffer.    */
 
         if (nulcheck == 0 && scale == 1. && zero == 0.)
             convert = 0;  /* no need to scale data or find nulls */
diff --git a/cextern/cfitsio/getcolj.c b/cextern/cfitsio/getcolj.c
index 2d90913..67a6cde 100644
--- a/cextern/cfitsio/getcolj.c
+++ b/cextern/cfitsio/getcolj.c
@@ -658,12 +658,12 @@ int ffgclj( fitsfile *fptr,   /* I - FITS file pointer                       */
 */
 {
     double scale, zero, power = 1., dtemp;
-    int tcode, maxelem, hdutype, xcode, decimals;
+    int tcode, maxelem2, hdutype, xcode, decimals;
     long twidth, incre;
     long ii, xwidth, ntodo;
     int convert, nulcheck, readcheck = 0;
     LONGLONG repeat, startpos, elemnum, readptr, tnull;
-    LONGLONG rowlen, rownum, remain, next, rowincre;
+    LONGLONG rowlen, rownum, remain, next, rowincre, maxelem;
     char tform[20];
     char message[81];
     char snull[20];   /*  the FITS null value if reading from ASCII table  */
@@ -689,9 +689,10 @@ int ffgclj( fitsfile *fptr,   /* I - FITS file pointer                       */
         readcheck = -1;  /* don't do range checking in this case */
 
     if (ffgcprll(fptr, colnum, firstrow, firstelem, nelem, readcheck, &scale, &zero,
-         tform, &twidth, &tcode, &maxelem, &startpos, &elemnum, &incre,
+         tform, &twidth, &tcode, &maxelem2, &startpos, &elemnum, &incre,
          &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0 )
          return(*status);
+    maxelem = maxelem2;
 
     incre *= elemincre;   /* multiply incre to just get every nth pixel */
 
@@ -730,7 +731,7 @@ int ffgclj( fitsfile *fptr,   /* I - FITS file pointer                       */
     convert = 1;
     if (tcode == TLONG)  /* Special Case:                        */
     {                             /* no type convertion required, so read */
-        maxelem = (int) nelem;          /* data directly into output buffer.    */
+        maxelem = nelem;          /* data directly into output buffer.    */
 
         if (nulcheck == 0 && scale == 1. && zero == 0. && LONGSIZE == 32)
             convert = 0;  /* no need to scale data or find nulls */
@@ -2533,12 +2534,12 @@ int ffgcljj( fitsfile *fptr,   /* I - FITS file pointer                       */
 */
 {
     double scale, zero, power = 1., dtemp;
-    int tcode, maxelem, hdutype, xcode, decimals;
+    int tcode, maxelem2, hdutype, xcode, decimals;
     long twidth, incre;
     long ii, xwidth, ntodo;
     int convert, nulcheck, readcheck = 0;
     LONGLONG repeat, startpos, elemnum, readptr, tnull;
-    LONGLONG rowlen, rownum, remain, next, rowincre;
+    LONGLONG rowlen, rownum, remain, next, rowincre, maxelem;
     char tform[20];
     char message[81];
     char snull[20];   /*  the FITS null value if reading from ASCII table  */
@@ -2564,9 +2565,10 @@ int ffgcljj( fitsfile *fptr,   /* I - FITS file pointer                       */
         readcheck = -1;  /* don't do range checking in this case */
 
     if (ffgcprll(fptr, colnum, firstrow, firstelem, nelem, readcheck, &scale, &zero,
-         tform, &twidth, &tcode, &maxelem, &startpos, &elemnum, &incre,
+         tform, &twidth, &tcode, &maxelem2, &startpos, &elemnum, &incre,
          &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0 )
          return(*status);
+    maxelem = maxelem2;
 
     incre *= elemincre;   /* multiply incre to just get every nth pixel */
 
@@ -2605,7 +2607,7 @@ int ffgcljj( fitsfile *fptr,   /* I - FITS file pointer                       */
     convert = 1;
     if (tcode == TLONGLONG)  /* Special Case:                        */
     {                             /* no type convertion required, so read */
-        maxelem = (int) nelem;          /* data directly into output buffer.    */
+        maxelem = nelem;          /* data directly into output buffer.    */
 
         if (nulcheck == 0 && scale == 1. && zero == 0.)
             convert = 0;  /* no need to scale data or find nulls */
diff --git a/cextern/cfitsio/getcolk.c b/cextern/cfitsio/getcolk.c
index 4b4447e..3958a59 100644
--- a/cextern/cfitsio/getcolk.c
+++ b/cextern/cfitsio/getcolk.c
@@ -659,12 +659,12 @@ int ffgclk( fitsfile *fptr,   /* I - FITS file pointer                       */
 */
 {
     double scale, zero, power, dtemp;
-    int tcode, maxelem, hdutype, xcode, decimals;
+    int tcode, maxelem2, hdutype, xcode, decimals;
     long twidth, incre;
     long ii, xwidth, ntodo;
     int convert, nulcheck, readcheck = 0;
     LONGLONG repeat, startpos, elemnum, readptr, tnull;
-    LONGLONG rowlen, rownum, remain, next, rowincre;
+    LONGLONG rowlen, rownum, remain, next, rowincre, maxelem;
     char tform[20];
     char message[81];
     char snull[20];   /*  the FITS null value if reading from ASCII table  */
@@ -706,9 +706,10 @@ int ffgclk( fitsfile *fptr,   /* I - FITS file pointer                       */
         readcheck = -1;  /* don't do range checking in this case */
 
     if ( ffgcprll( fptr, colnum, firstrow, firstelem, nelem, readcheck, &scale, &zero,
-         tform, &twidth, &tcode, &maxelem, &startpos, &elemnum, &incre,
+         tform, &twidth, &tcode, &maxelem2, &startpos, &elemnum, &incre,
          &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0 )
          return(*status);
+    maxelem = maxelem2;
 
     incre *= elemincre;   /* multiply incre to just get every nth pixel */
 
@@ -747,7 +748,7 @@ int ffgclk( fitsfile *fptr,   /* I - FITS file pointer                       */
     convert = 1;
     if (tcode == TLONG)           /* Special Case:                        */
     {                             /* no type convertion required, so read */
-        maxelem = (int) nelem;          /* data directly into output buffer.    */
+        maxelem = nelem;          /* data directly into output buffer.    */
 
         if (nulcheck == 0 && scale == 1. && zero == 0.)
             convert = 0;  /* no need to scale data or find nulls */
diff --git a/cextern/cfitsio/getcoll.c b/cextern/cfitsio/getcoll.c
index 427247d..7e1ab20 100644
--- a/cextern/cfitsio/getcoll.c
+++ b/cextern/cfitsio/getcoll.c
@@ -175,7 +175,14 @@ int ffgcll( fitsfile *fptr,   /* I - FITS file pointer                       */
         }
         else  /* some other illegal character; return the char value */
         {
-          array[next] = (char) *buffptr;
+          if (*buffptr == 1) {
+            /* this is an unfortunate case where the illegal value is the same
+               as what we set True values to, so set the value to the character '1'
+               instead, which has ASCII value 49.  */
+            array[next] = 49;
+          } else {
+            array[next] = (char) *buffptr;
+          }
         }
       }
 
diff --git a/cextern/cfitsio/getcolui.c b/cextern/cfitsio/getcolui.c
index 6de4efc..b98790a 100644
--- a/cextern/cfitsio/getcolui.c
+++ b/cextern/cfitsio/getcolui.c
@@ -647,12 +647,12 @@ int ffgclui( fitsfile *fptr,   /* I - FITS file pointer                       */
 */
 {
     double scale, zero, power = 1., dtemp;
-    int tcode, maxelem, hdutype, xcode, decimals;
+    int tcode, maxelem2, hdutype, xcode, decimals;
     long twidth, incre;
     long ii, xwidth, ntodo;
     int nulcheck;
     LONGLONG repeat, startpos, elemnum, readptr, tnull;
-    LONGLONG rowlen, rownum, remain, next, rowincre;
+    LONGLONG rowlen, rownum, remain, next, rowincre, maxelem;
     char tform[20];
     char message[81];
     char snull[20];   /*  the FITS null value if reading from ASCII table  */
@@ -675,9 +675,10 @@ int ffgclui( fitsfile *fptr,   /* I - FITS file pointer                       */
     /*  Check input and get parameters about the column: */
     /*---------------------------------------------------*/
     if ( ffgcprll( fptr, colnum, firstrow, firstelem, nelem, 0, &scale, &zero,
-         tform, &twidth, &tcode, &maxelem, &startpos, &elemnum, &incre,
+         tform, &twidth, &tcode, &maxelem2, &startpos, &elemnum, &incre,
          &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0 )
          return(*status);
+    maxelem = maxelem2;
 
     incre *= elemincre;   /* multiply incre to just get every nth pixel */
 
@@ -715,7 +716,7 @@ int ffgclui( fitsfile *fptr,   /* I - FITS file pointer                       */
     /*----------------------------------------------------------------------*/
     if (tcode == TSHORT) /* Special Case:                        */
     {                             /* no type convertion required, so read */
-        maxelem = (int) nelem;          /* data directly into output buffer.    */
+        maxelem = nelem;          /* data directly into output buffer.    */
     }
 
     /*---------------------------------------------------------------------*/
diff --git a/cextern/cfitsio/getcoluj.c b/cextern/cfitsio/getcoluj.c
index bb69134..79fb4b6 100644
--- a/cextern/cfitsio/getcoluj.c
+++ b/cextern/cfitsio/getcoluj.c
@@ -648,12 +648,12 @@ int ffgcluj(fitsfile *fptr,   /* I - FITS file pointer                       */
 */
 {
     double scale, zero, power = 1., dtemp;
-    int tcode, maxelem, hdutype, xcode, decimals;
+    int tcode, maxelem2, hdutype, xcode, decimals;
     long twidth, incre;
     long ii, xwidth, ntodo;
     int nulcheck;
     LONGLONG repeat, startpos, elemnum, readptr, tnull;
-    LONGLONG rowlen, rownum, remain, next, rowincre;
+    LONGLONG rowlen, rownum, remain, next, rowincre, maxelem;
     char tform[20];
     char message[81];
     char snull[20];   /*  the FITS null value if reading from ASCII table  */
@@ -676,9 +676,10 @@ int ffgcluj(fitsfile *fptr,   /* I - FITS file pointer                       */
     /*  Check input and get parameters about the column: */
     /*---------------------------------------------------*/
     if ( ffgcprll( fptr, colnum, firstrow, firstelem, nelem, 0, &scale, &zero,
-         tform, &twidth, &tcode, &maxelem, &startpos, &elemnum, &incre,
+         tform, &twidth, &tcode, &maxelem2, &startpos, &elemnum, &incre,
          &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0 )
          return(*status);
+    maxelem = maxelem2;
 
     incre *= elemincre;   /* multiply incre to just get every nth pixel */
 
@@ -716,7 +717,7 @@ int ffgcluj(fitsfile *fptr,   /* I - FITS file pointer                       */
     /*----------------------------------------------------------------------*/
     if (tcode == TLONG)  /* Special Case:                        */
     {                             /* no type convertion required, so read */
-        maxelem = (int) nelem;          /* data directly into output buffer.    */
+        maxelem = nelem;          /* data directly into output buffer.    */
     }
 
     /*---------------------------------------------------------------------*/
diff --git a/cextern/cfitsio/getcoluk.c b/cextern/cfitsio/getcoluk.c
index 36d32e0..4467fca 100644
--- a/cextern/cfitsio/getcoluk.c
+++ b/cextern/cfitsio/getcoluk.c
@@ -648,12 +648,12 @@ int ffgcluk( fitsfile *fptr,  /* I - FITS file pointer                       */
 */
 {
     double scale, zero, power = 1., dtemp;
-    int tcode, maxelem, hdutype, xcode, decimals;
+    int tcode, maxelem2, hdutype, xcode, decimals;
     long twidth, incre;
     long ii, xwidth, ntodo;
     int nulcheck;
     LONGLONG repeat, startpos, elemnum, readptr, tnull;
-    LONGLONG rowlen, rownum, remain, next, rowincre;
+    LONGLONG rowlen, rownum, remain, next, rowincre, maxelem;
     char tform[20];
     char message[81];
     char snull[20];   /*  the FITS null value if reading from ASCII table  */
@@ -693,9 +693,10 @@ int ffgcluk( fitsfile *fptr,  /* I - FITS file pointer                       */
     /*  Check input and get parameters about the column: */
     /*---------------------------------------------------*/
     if ( ffgcprll( fptr, colnum, firstrow, firstelem, nelem, 0, &scale, &zero,
-         tform, &twidth, &tcode, &maxelem, &startpos, &elemnum, &incre,
+         tform, &twidth, &tcode, &maxelem2, &startpos, &elemnum, &incre,
          &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0 )
          return(*status);
+    maxelem = maxelem2;
 
     incre *= elemincre;   /* multiply incre to just get every nth pixel */
 
@@ -733,7 +734,7 @@ int ffgcluk( fitsfile *fptr,  /* I - FITS file pointer                       */
     /*----------------------------------------------------------------------*/
     if (tcode == TLONG)  /* Special Case: */
     {                             /* data are 4-bytes long, so read       */
-        maxelem = (int) nelem;          /* data directly into output buffer.    */
+        maxelem = nelem;          /* data directly into output buffer.    */
     }
 
     /*---------------------------------------------------------------------*/
diff --git a/cextern/cfitsio/getkey.c b/cextern/cfitsio/getkey.c
index 3184779..f12b666 100644
--- a/cextern/cfitsio/getkey.c
+++ b/cextern/cfitsio/getkey.c
@@ -862,10 +862,11 @@ int ffgkls( fitsfile *fptr,     /* I - FITS file pointer         */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int fffree( char *value,       /* I - pointer to keyword value  */
+int fffree( void *value,       /* I - pointer to keyword value  */
             int  *status)      /* IO - error status             */
 /*
-  Free the memory that was allocated by ffgkls for the long string keyword value.
+  Free the memory that was previously allocated by CFITSIO, 
+  such as by ffgkls or fits_hdr2str
 */
 {
     if (*status > 0)
@@ -1696,6 +1697,7 @@ int ffdtdm(fitsfile *fptr,  /* I - FITS file pointer                        */
 /*
   decode the TDIMnnn keyword to get the dimensionality of a column.
   Check that the value is legal and consistent with the TFORM value.
+  If colnum = 0, then the validity checking is disabled.
 */
 {
     long dimsize, totalpix = 1;
@@ -1705,34 +1707,37 @@ int ffdtdm(fitsfile *fptr,  /* I - FITS file pointer                        */
     if (*status > 0)
         return(*status);
 
-    if (fptr->HDUposition != (fptr->Fptr)->curhdu)
-        ffmahd(fptr, (fptr->HDUposition) + 1, NULL, status);
+    if (colnum != 0) {
+        if (fptr->HDUposition != (fptr->Fptr)->curhdu)
+            ffmahd(fptr, (fptr->HDUposition) + 1, NULL, status);
 
-    if (colnum < 1 || colnum > (fptr->Fptr)->tfield)
-        return(*status = BAD_COL_NUM);
+        if (colnum < 1 || colnum > (fptr->Fptr)->tfield)
+            return(*status = BAD_COL_NUM);
 
-    colptr = (fptr->Fptr)->tableptr;   /* set pointer to the first column */
-    colptr += (colnum - 1);    /* increment to the correct column */
+        colptr = (fptr->Fptr)->tableptr;   /* set pointer to the first column */
+        colptr += (colnum - 1);    /* increment to the correct column */
 
-    if (!tdimstr[0])   /* TDIMn keyword doesn't exist? */
-    {
-        *naxis = 1;                   /* default = 1 dimensional */
-        if (maxdim > 0)
-            naxes[0] = (long) colptr->trepeat; /* default length = repeat */
+        if (!tdimstr[0])   /* TDIMn keyword doesn't exist? */
+        {
+            *naxis = 1;                   /* default = 1 dimensional */
+            if (maxdim > 0)
+                naxes[0] = (long) colptr->trepeat; /* default length = repeat */
+
+            return(*status);
+        }
     }
-    else
-    {
-        *naxis = 0;
 
-        loc = strchr(tdimstr, '(' );  /* find the opening quote */
-        if (!loc)
-        {
-            sprintf(message, "Illegal TDIM keyword value: %s", tdimstr);
+    *naxis = 0;
+
+    loc = strchr(tdimstr, '(' );  /* find the opening quote */
+    if (!loc)
+    {
+            sprintf(message, "Illegal dimensions format: %s", tdimstr);
             return(*status = BAD_TDIM);
-        }
+    }
 
-        while (loc)
-        {
+    while (loc)
+    {
             loc++;
             dimsize = strtol(loc, &loc, 10);  /* read size of next dimension */
             if (*naxis < maxdim)
@@ -1740,7 +1745,7 @@ int ffdtdm(fitsfile *fptr,  /* I - FITS file pointer                        */
 
             if (dimsize < 0)
             {
-                ffpmsg("one or more TDIM values are less than 0 (ffdtdm)");
+                ffpmsg("one or more dimension are less than 0 (ffdtdm)");
                 ffpmsg(tdimstr);
                 return(*status = BAD_TDIM);
             }
@@ -1749,15 +1754,16 @@ int ffdtdm(fitsfile *fptr,  /* I - FITS file pointer                        */
             (*naxis)++;
             lastloc = loc;
             loc = strchr(loc, ',');  /* look for comma before next dimension */
-        }
+    }
 
-        loc = strchr(lastloc, ')' );  /* check for the closing quote */
-        if (!loc)
-        {
-            sprintf(message, "Illegal TDIM keyword value: %s", tdimstr);
+    loc = strchr(lastloc, ')' );  /* check for the closing quote */
+    if (!loc)
+    {
+            sprintf(message, "Illegal dimensions format: %s", tdimstr);
             return(*status = BAD_TDIM);
-        }
+    }
 
+    if (colnum != 0) {
         if ((colptr->tdatatype > 0) && ((long) colptr->trepeat != totalpix))
         {
           sprintf(message,
diff --git a/cextern/cfitsio/imcompress.c b/cextern/cfitsio/imcompress.c
index 6330bf8..275f1bf 100644
--- a/cextern/cfitsio/imcompress.c
+++ b/cextern/cfitsio/imcompress.c
@@ -7,6 +7,7 @@
 # include "fitsio2.h"
 
 #define NULL_VALUE -2147483647 /* value used to represent undefined pixels */
+#define ZERO_VALUE -2147483646 /* value used to represent zero-valued pixels */
 
 /* nearest integer function */
 # define NINT(x)  ((x >= 0.) ? (int) (x + 0.5) : (int) (x - 0.5))
@@ -15,7 +16,6 @@
 /* should not be quantized and instead losslessly compressed (with GZIP) */
 #define NO_QUANTIZE 9999
 
-
 /* string array for storing the individual column compression stats */
 char results[999][60];
 float trans_ratio[999];
@@ -54,6 +54,7 @@ static int unquantize_i1r4(long row,
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - which subtractive dither method to use */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -68,6 +69,7 @@ static int unquantize_i2r4(long row,
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - which subtractive dither method to use */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -82,6 +84,7 @@ static int unquantize_i4r4(long row,
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - which subtractive dither method to use */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -96,6 +99,7 @@ static int unquantize_i1r8(long row,
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - which subtractive dither method to use */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -110,6 +114,7 @@ static int unquantize_i2r8(long row,
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - which subtractive dither method to use */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -124,6 +129,7 @@ static int unquantize_i4r8(long row,
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - which subtractive dither method to use */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -158,6 +164,8 @@ static int fits_unshuffle_4bytes(char *heap, LONGLONG length, int *status);
 static int fits_unshuffle_2bytes(char *heap, LONGLONG length, int *status);
 static int fits_gunzip_heap(fitsfile *infptr, fitsfile *outfptr, int *status);
 
+/* only used for diagnoitic purposes */
+/* int fits_get_case(int *c1, int*c2, int*c3); */ 
 /*---------------------------------------------------------------------------*/
 int fits_init_randoms(void) {
 
@@ -234,7 +242,20 @@ int fits_set_compression_type(fitsfile *fptr,  /* I - FITS file pointer     */
    each tile is compressed and stored in a row of at variable length binary
    table column.
 */
-    (fptr->Fptr)->request_compress_type = ctype;
+
+    if (ctype != RICE_1 && 
+        ctype != GZIP_1 && 
+        ctype != GZIP_2 && 
+        ctype != PLIO_1 && 
+        ctype != HCOMPRESS_1 && 
+        ctype != BZIP2_1 && 
+        ctype != NOCOMPRESS)
+    {
+	ffpmsg("unknown compression algorithm (fits_set_compression_type)");
+	*status = DATA_COMPRESSION_ERR; 
+    } else {
+        (fptr->Fptr)->request_compress_type = ctype;
+    }
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -255,6 +276,7 @@ int fits_set_tile_dim(fitsfile *fptr,  /* I - FITS file pointer             */
     if (ndim < 0 || ndim > MAX_COMPRESS_DIM)
     {
         *status = BAD_DIMEN;
+	ffpmsg("illegal number of tile dimensions (fits_set_tile_dim)");
         return(*status);
     }
 
@@ -280,34 +302,55 @@ int fits_set_quantize_level(fitsfile *fptr,  /* I - FITS file pointer   */
     {
         /* this means don't quantize the floating point values. Instead, */
 	/* the floating point values will be losslessly compressed */
-       (fptr->Fptr)->quantize_level = NO_QUANTIZE;
+       (fptr->Fptr)->request_quantize_level = NO_QUANTIZE;
     } else {
 
-        (fptr->Fptr)->quantize_level = qlevel;
-
+        (fptr->Fptr)->request_quantize_level = qlevel;
     }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int fits_set_quantize_dither(fitsfile *fptr,  /* I - FITS file pointer   */
-           int dither,        /* dither type      */
+int fits_set_quantize_method(fitsfile *fptr,  /* I - FITS file pointer   */
+           int method,          /* quantization method       */
            int *status)         /* IO - error status                */
 {
 /*
    This routine specifies what type of dithering (randomization) should
    be performed when quantizing floating point images to integer prior to
    compression.   A value of -1 means do no dithering.  A value of 0 means
-   used the default  SUBTRACTIVE_DITHER_1 (which is equivalent to dither = 1).
-   A value of -1 means do not apply any dither.
+   use the default SUBTRACTIVE_DITHER_1 (which is equivalent to dither = 1).
+   A value of 2 means use SUBTRACTIVE_DITHER_2.
 */
 
-    if (dither == 0) dither = 1;
-    (fptr->Fptr)->request_quantize_dither = dither;
+    if (method < -1 || method > 2)
+    {
+	ffpmsg("illegal dithering value (fits_set_quantize_method)");
+	*status = DATA_COMPRESSION_ERR; 
+    } else {
+       
+        if (method == 0) method = 1;
+        (fptr->Fptr)->request_quantize_method = method;
+    }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int fits_set_dither_offset(fitsfile *fptr,  /* I - FITS file pointer   */
-           int offset,        /* random dithering offset value (1 to 10000) */
+int fits_set_quantize_dither(fitsfile *fptr,  /* I - FITS file pointer   */
+           int dither,        /* dither type      */
+           int *status)         /* IO - error status                */
+{
+/*
+   the name of this routine has changed.  This is kept here only for backwards
+   compatibility for any software that may be calling the old routine.
+*/
+
+    fits_set_quantize_method(fptr, dither, status);
+    return(*status);
+}
+/*--------------------------------------------------------------------------*/
+int fits_set_dither_seed(fitsfile *fptr,  /* I - FITS file pointer   */
+           int seed,        /* random dithering seed value (1 to 10000) */
            int *status)         /* IO - error status                */
 {
 /*
@@ -324,11 +367,26 @@ int fits_set_dither_offset(fitsfile *fptr,  /* I - FITS file pointer   */
 
 */
     /* if positive, ensure that the value is in the range 1 to 10000 */
-    if (offset > 0)
-       (fptr->Fptr)->request_dither_offset = ((offset - 1) % 10000 ) + 1; 
-    else
-       (fptr->Fptr)->request_dither_offset = offset; 
+    if (seed > 10000) {
+	ffpmsg("illegal dithering seed value (fits_set_dither_seed)");
+	*status = DATA_COMPRESSION_ERR;
+    } else {
+       (fptr->Fptr)->request_dither_seed = seed; 
+    }
+    
+    return(*status);
+}
+/*--------------------------------------------------------------------------*/
+int fits_set_dither_offset(fitsfile *fptr,  /* I - FITS file pointer   */
+           int offset,        /* random dithering offset value (1 to 10000) */
+           int *status)         /* IO - error status                */
+{
+/*
+    The name of this routine has changed.  This is kept just for
+    backwards compatibility with any software that calls the old name
+*/
 
+    fits_set_dither_seed(fptr, offset, status);
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -358,6 +416,7 @@ int fits_set_noise_bits(fitsfile *fptr,  /* I - FITS file pointer   */
     if (noisebits < 1 || noisebits > 16)
     {
         *status = DATA_COMPRESSION_ERR;
+	ffpmsg("illegal number of noise bits (fits_set_noise_bits)");
         return(*status);
     }
 
@@ -373,10 +432,7 @@ int fits_set_hcomp_scale(fitsfile *fptr,  /* I - FITS file pointer   */
            int *status)         /* IO - error status                */
 {
 /*
-   This routine specifies the value of the hcompress scale parameter that
-  The image is
-   divided into tiles, and each tile is compressed and stored in a row
-   of at variable length binary table column.
+   This routine specifies the value of the hcompress scale parameter.
 */
     (fptr->Fptr)->request_hcomp_scale = scale;
     return(*status);
@@ -392,10 +448,7 @@ int fits_set_hcomp_smooth(fitsfile *fptr,  /* I - FITS file pointer   */
            int *status)         /* IO - error status                */
 {
 /*
-   This routine specifies the value of the hcompress scale parameter that
-  The image is
-   divided into tiles, and each tile is compressed and stored in a row
-   of at variable length binary table column.
+   This routine specifies the value of the hcompress scale parameter.
 */
 
     (fptr->Fptr)->request_hcomp_smooth = smooth;
@@ -415,7 +468,23 @@ int fits_set_lossy_int(fitsfile *fptr,  /* I - FITS file pointer   */
 
     (fptr->Fptr)->request_lossy_int_compress = lossy_int;
     return(*status);
-}/*--------------------------------------------------------------------------*/
+}
+/*--------------------------------------------------------------------------*/
+int fits_set_huge_hdu(fitsfile *fptr,  /* I - FITS file pointer   */
+           int huge,       /* I - True (!= 0) or False (0) */
+           int *status)         /* IO - error status                */
+{
+/*
+   This routine specifies whether the HDU that is being compressed is so large
+   (i.e., > 4 GB) that the 'Q' type variable length array columns should be used
+   rather than the normal 'P' type.  The allows the heap pointers to be stored
+   as 64-bit quantities, rather than just 32-bits.
+*/
+
+    (fptr->Fptr)->request_huge_hdu = huge;
+    return(*status);
+}
+/*--------------------------------------------------------------------------*/
 int fits_get_compression_type(fitsfile *fptr,  /* I - FITS file pointer     */
        int *ctype,   /* image compression type code;                        */
                      /* allowed values:                                     */
@@ -429,6 +498,19 @@ int fits_get_compression_type(fitsfile *fptr,  /* I - FITS file pointer     */
    table column.
 */
     *ctype = (fptr->Fptr)->request_compress_type;
+
+    if (*ctype != RICE_1 && 
+        *ctype != GZIP_1 && 
+        *ctype != GZIP_2 && 
+        *ctype != PLIO_1 && 
+        *ctype != HCOMPRESS_1 && 
+        *ctype != BZIP2_1 && 
+        *ctype != NOCOMPRESS)
+    {
+	ffpmsg("unknown compression algorithm (fits_get_compression_type)");
+	*status = DATA_COMPRESSION_ERR; 
+    }
+ 
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -449,6 +531,7 @@ int fits_get_tile_dim(fitsfile *fptr,  /* I - FITS file pointer             */
     if (ndim < 0 || ndim > MAX_COMPRESS_DIM)
     {
         *status = BAD_DIMEN;
+	ffpmsg("illegal number of tile dimensions (fits_get_tile_dim)");
         return(*status);
     }
 
@@ -460,6 +543,197 @@ int fits_get_tile_dim(fitsfile *fptr,  /* I - FITS file pointer             */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
+int fits_unset_compression_param(
+      fitsfile *fptr,
+      int *status) 
+{
+    int ii;
+
+    (fptr->Fptr)->compress_type = 0;
+    (fptr->Fptr)->quantize_level = 0;
+    (fptr->Fptr)->quantize_method = 0;
+    (fptr->Fptr)->dither_seed = 0; 
+    (fptr->Fptr)->hcomp_scale = 0;
+
+    for (ii = 0; ii < MAX_COMPRESS_DIM; ii++)
+    {
+        (fptr->Fptr)->tilesize[ii] = 0;
+    }
+
+}
+/*--------------------------------------------------------------------------*/
+int fits_unset_compression_request(
+      fitsfile *fptr,
+      int *status) 
+{
+    int ii;
+
+    (fptr->Fptr)->request_compress_type = 0;
+    (fptr->Fptr)->request_quantize_level = 0;
+    (fptr->Fptr)->request_quantize_method = 0;
+    (fptr->Fptr)->request_dither_seed = 0; 
+    (fptr->Fptr)->request_hcomp_scale = 0;
+    (fptr->Fptr)->request_lossy_int_compress = 0;
+    (fptr->Fptr)->request_huge_hdu = 0;
+
+    for (ii = 0; ii < MAX_COMPRESS_DIM; ii++)
+    {
+        (fptr->Fptr)->request_tilesize[ii] = 0;
+    }
+
+}
+/*--------------------------------------------------------------------------*/
+int fits_set_compression_pref(
+      fitsfile *infptr,
+      fitsfile *outfptr,
+      int *status) 
+{
+/*
+   Set the preference for various compression options, based
+   on keywords in the input file that
+   provide guidance about how the HDU should be compressed when written
+   to the output file.
+*/
+
+    int ii, naxis, nkeys, comptype, lossyintvalue, hsmooth;
+    int  ivalue, tstatus;
+    long tiledim[6]= {1,1,1,1,1,1};
+    char card[FLEN_CARD], value[FLEN_VALUE];
+    double  qvalue, hscale;
+    LONGLONG datastart, dataend; 
+    if (*status > 0)
+        return(*status);
+
+    /* check the size of the HDU that is to be compressed */
+    fits_get_hduaddrll(infptr, NULL, &datastart, &dataend, status);
+    if ( (LONGLONG)(dataend - datastart) > UINT32_MAX) {
+       /* use 64-bit '1Q' variable length columns instead of '1P' columns */
+       /* for large files, in case the heap size becomes larger than 2**32 bytes*/
+       fits_set_huge_hdu(outfptr, 1, status);
+    }
+
+    fits_get_hdrspace(infptr, &nkeys, NULL, status);
+ 
+   /* look for a image compression directive keywords (begin with 'FZ') */
+    for (ii = 2; ii <= nkeys; ii++) {
+        
+	fits_read_record(infptr, ii, card, status);
+
+	if (!strncmp(card, "FZ", 2) ){
+	
+            /* get the keyword value string */
+            fits_parse_value(card, value, NULL, status);
+	    
+	    if      (!strncmp(card+2, "ALGOR", 5) ) {
+
+	        /* set the desired compression algorithm */
+                /* allowed values: RICE_1, GZIP_1, GZIP_2, PLIO_1,     */
+                /*  HCOMPRESS_1, BZIP2_1, and NOCOMPRESS               */
+
+                if        (!strncasecmp(value, "'RICE_1", 7) ) {
+		    comptype = RICE_1;
+                } else if (!strncasecmp(value, "'GZIP_1", 7) ) {
+		    comptype = GZIP_1;
+                } else if (!strncasecmp(value, "'GZIP_2", 7) ) {
+		    comptype = GZIP_2;
+                } else if (!strncasecmp(value, "'PLIO_1", 7) ) {
+		    comptype = PLIO_1;
+                } else if (!strncasecmp(value, "'HCOMPRESS_1", 12) ) {
+		    comptype = HCOMPRESS_1;
+                } else if (!strncasecmp(value, "'NONE", 5) ) {
+		    comptype = NOCOMPRESS;
+		} else {
+			ffpmsg("Unknown FZALGOR keyword compression algorithm:");
+			ffpmsg(value);
+			return(*status = DATA_COMPRESSION_ERR);
+		}  
+
+	        fits_set_compression_type (outfptr, comptype, status);
+
+	    } else if (!strncmp(card+2, "TILE  ", 6) ) {
+
+		tstatus = 0;
+                if (!strncasecmp(value, "'row", 4) ) {
+                   tiledim[0] = -1;
+		} else if (!strncasecmp(value, "'whole", 6) ) {
+                   tiledim[0] = -1;
+                   tiledim[1] = -1;
+                   tiledim[2] = -1;
+                } else {
+		   ffdtdm(infptr, value, 0,6, &naxis, tiledim, status);
+                }
+
+	        /* set the desired tile size */
+		fits_set_tile_dim (outfptr, 6, tiledim, status);
+
+	    } else if (!strncmp(card+2, "QVALUE", 6) ) {
+
+	        /* set the desired Q quantization value */
+		qvalue = atof(value);
+		fits_set_quantize_level (outfptr, (float) qvalue, status);
+
+	    } else if (!strncmp(card+2, "QMETHD", 6) ) {
+
+                    if (!strncasecmp(value, "'no_dither", 10) ) {
+                        ivalue = -1; /* just quantize, with no dithering */
+		    } else if (!strncasecmp(value, "'subtractive_dither_1", 21) ) {
+                        ivalue = SUBTRACTIVE_DITHER_1; /* use subtractive dithering */
+		    } else if (!strncasecmp(value, "'subtractive_dither_2", 21) ) {
+                        ivalue = SUBTRACTIVE_DITHER_2; /* dither, except preserve zero-valued pixels */
+		    } else {
+		        ffpmsg("Unknown value for FZQUANT keyword: (set_compression_pref)");
+			ffpmsg(value);
+                        return(*status = DATA_COMPRESSION_ERR);
+		    }
+
+		    fits_set_quantize_method(outfptr, ivalue, status);
+		    
+	    } else if (!strncmp(card+2, "DTHRSD", 6) ) {
+
+                if (!strncasecmp(value, "'checksum", 9) ) {
+                    ivalue = -1; /* use checksum of first tile */
+		} else if (!strncasecmp(value, "'clock", 6) ) {
+                    ivalue = 0; /* set dithering seed based on system clock */
+		} else {  /* read integer value */
+		    if (*value == '\'')
+                        ivalue = (int) atol(value+1); /* allow for leading quote character */
+                    else 
+                        ivalue = (int) atol(value+1); 
+
+                    if (ivalue < 1 || ivalue > 10000) {
+		        ffpmsg("Invalid value for FZDTHRSD keyword: (set_compression_pref)");
+			ffpmsg(value);
+                        return(*status = DATA_COMPRESSION_ERR);
+                    }
+		}
+
+	        /* set the desired dithering */
+		fits_set_dither_seed(outfptr, ivalue, status);
+
+	    } else if (!strncmp(card+2, "INT2F", 5) ) {
+
+	        /* set whether to convert integers to float then use lossy compression */
+                if (!strcasecmp(value, "t") ) {
+		    fits_set_lossy_int (outfptr, 1, status);
+		} else if (!strcasecmp(value, "f") ) {
+		    fits_set_lossy_int (outfptr, 0, status);
+		} else {
+		        ffpmsg("Unknown value for FZINT2F keyword: (set_compression_pref)");
+			ffpmsg(value);
+                        return(*status = DATA_COMPRESSION_ERR);
+                }
+
+	    } else if (!strncmp(card+2, "HSCALE ", 6) ) {
+
+	        /* set the desired Hcompress scale value */
+		hscale = atof(value);
+		fits_set_hcomp_scale (outfptr, hscale, status);
+            }
+	}    
+    }
+    return(*status);
+}
+/*--------------------------------------------------------------------------*/
 int fits_get_noise_bits(fitsfile *fptr,  /* I - FITS file pointer   */
            int *noisebits,       /* noise_bits parameter value       */
                                 /* (default = 4)                    */
@@ -489,7 +763,7 @@ int fits_get_noise_bits(fitsfile *fptr,  /* I - FITS file pointer   */
 */
     double qlevel;
 
-    qlevel = (fptr->Fptr)->quantize_level;
+    qlevel = (fptr->Fptr)->request_quantize_level;
 
     if (qlevel > 0. && qlevel < 65537. )
          *noisebits =  (int) ((log(qlevel) / log(2.0)) + 0.5);
@@ -510,16 +784,16 @@ int fits_get_quantize_level(fitsfile *fptr,  /* I - FITS file pointer   */
    of at variable length binary table column.
 */
 
-    if ((fptr->Fptr)->quantize_level == NO_QUANTIZE) {
+    if ((fptr->Fptr)->request_quantize_level == NO_QUANTIZE) {
       *qlevel = 0;
     } else {
-      *qlevel = (fptr->Fptr)->quantize_level;
+      *qlevel = (fptr->Fptr)->request_quantize_level;
     }
 
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int fits_get_dither_offset(fitsfile *fptr,  /* I - FITS file pointer   */
+int fits_get_dither_seed(fitsfile *fptr,  /* I - FITS file pointer   */
            int *offset,       /* dithering offset parameter value       */
            int *status)         /* IO - error status                */
 {
@@ -530,7 +804,7 @@ int fits_get_dither_offset(fitsfile *fptr,  /* I - FITS file pointer   */
    of at variable length binary table column.
 */
 
-    *offset = (fptr->Fptr)->request_dither_offset;
+    *offset = (fptr->Fptr)->request_dither_seed;
     return(*status);
 }/*--------------------------------------------------------------------------*/
 int fits_get_hcomp_scale(fitsfile *fptr,  /* I - FITS file pointer   */
@@ -573,10 +847,12 @@ int fits_img_compress(fitsfile *infptr, /* pointer to image to be compressed */
 {
     int bitpix, naxis;
     long naxes[MAX_COMPRESS_DIM];
+/*    int c1, c2, c3; */
 
     if (*status > 0)
         return(*status);
 
+
     /* get datatype and size of input image */
     if (fits_get_img_param(infptr, MAX_COMPRESS_DIM, &bitpix, 
                        &naxis, naxes, status) > 0)
@@ -588,6 +864,32 @@ int fits_img_compress(fitsfile *infptr, /* pointer to image to be compressed */
         return(*status = BAD_NAXIS);
     }
 
+    /* create a new empty HDU in the output file now, before setting the */
+    /* compression preferences.  This HDU will become a binary table that */
+    /* contains the compressed image.  If necessary, create a dummy primary */
+    /* array, which much precede the binary table extension. */
+    
+    ffcrhd(outfptr, status);  /* this does nothing if the output file is empty */
+
+    if ((outfptr->Fptr)->curhdu == 0)  /* have to create dummy primary array */
+    {
+       ffcrim(outfptr, 16, 0, NULL, status);
+       ffcrhd(outfptr, status);
+    } else {
+        /* unset any compress parameter preferences that may have been
+           set when closing the previous HDU in the output file */
+        fits_unset_compression_param(outfptr, status);
+    }
+    
+    /* set any compress parameter preferences as given in the input file */
+    fits_set_compression_pref(infptr, outfptr, status);
+
+    /* special case: the quantization level is not given by a keyword in  */
+    /* the HDU header, so we have to explicitly copy the requested value */
+    /* to the actual value */
+    if ( (outfptr->Fptr)->request_quantize_level != 0.)
+        (outfptr->Fptr)->quantize_level = (outfptr->Fptr)->request_quantize_level;
+
     /* if requested, treat integer images same as a float image. */
     /* Then the pixels will be quantized (lossy algorithm) to achieve */
     /* higher amounts of compression than with lossless algorithms */
@@ -598,7 +900,7 @@ int fits_img_compress(fitsfile *infptr, /* pointer to image to be compressed */
     /* initialize output table */
     if (imcomp_init_table(outfptr, bitpix, naxis, naxes, 0, status) > 0)
         return (*status);    
-    
+
     /* Copy the image header keywords to the table header. */
     if (imcomp_copy_img2comp(infptr, outfptr, status) > 0)
 	    return (*status);
@@ -627,73 +929,13 @@ int fits_img_compress(fitsfile *infptr, /* pointer to image to be compressed */
     /* update PCOUNT and TFORMn = '1PB(iii)' keyword values. */
     ffrdef(outfptr, status);
 
-    return (*status);
-}
-/*--------------------------------------------------------------------------*/
-int fits_compress_img_OBSOLETE(fitsfile *infptr, /* pointer to image to be compressed */
-                 fitsfile *outfptr, /* empty HDU for output compressed image */
-                 int compress_type, /* compression type code               */
-                                    /*  RICE_1, HCOMPRESS_1, etc.          */
-                 long *intilesize,    /* size in each dimension of the tiles */
-                                    /* NULL pointer means tile by rows */
-		 int blocksize,     /* compression parameter: blocksize  */
-                 int nbits,         /* compression parameter: nbits  */
-                 int *status)       /* IO - error status               */
+    /* unset any previously set compress parameter preferences */
+    fits_unset_compression_request(outfptr, status);
 
 /*
-  !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!
-   This routine is obsolete and should not be used.  The 
-   ftools 'fimgzip' task used to call this routine (but that task has been deleted); 
-
-  The name of the routine was changed 4/27/2011, to see if anyone complains.
-  If not, then this routine should be deleted from the source code.
-  !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!
-  
-   This routine initializes the output table, copies all the keywords,
-   and  loops through the input image, compressing the data and
-   writing the compressed tiles to the output table.
+    fits_get_case(&c1, &c2, &c3);
+    printf("c1, c2, c3 = %d, %d, %d\n", c1, c2, c3); 
 */
-{
-    int bitpix, naxis;
-    long naxes[MAX_COMPRESS_DIM];
-
-    if (*status > 0)
-        return(*status);
-
-    /* get datatype and size of input image */
-    if (fits_get_img_param(infptr, MAX_COMPRESS_DIM, &bitpix, 
-                       &naxis, naxes, status) > 0)
-        return(*status);
-
-    if (naxis < 1 || naxis > MAX_COMPRESS_DIM)
-    {
-        ffpmsg("Image cannot be compressed: NAXIS out of range");
-        return(*status = BAD_NAXIS);
-    }
-
-    /* initialize output table */
-    if (imcomp_init_table(outfptr, bitpix, naxis, naxes, 0, status) > 0)
-        return (*status);
-
-    /* Copy the image header keywords to the table header. */
-    if (imcomp_copy_imheader(infptr, outfptr, status) > 0)
-	    return (*status);
-
-    /* turn off any intensity scaling (defined by BSCALE and BZERO */
-    /* keywords) so that unscaled values will be read by CFITSIO */
-    ffpscl(infptr, 1.0, 0.0, status);
-
-    /* force a rescan of the output file keywords, so that */
-    /* the compression parameters will be copied to the internal */
-    /* fitsfile structure used by CFITSIO */
-    ffrdef(outfptr, status);
-
-    /* Read each image tile, compress, and write to a table row. */
-    imcomp_compress_image (infptr, outfptr, status);
-
-    /* force another rescan of the output file keywords, to */
-    /* update PCOUNT and TFORMn = '1PB(iii)' keyword values. */
-    ffrdef(outfptr, status);
 
     return (*status);
 }
@@ -723,14 +965,38 @@ int imcomp_init_table(fitsfile *outfptr,
 
     /* check for special case of losslessly compressing floating point */
     /* images.  Only compression algorithm that supports this is GZIP */
-    if ( (outfptr->Fptr)->quantize_level == NO_QUANTIZE) {
+    if ( (outfptr->Fptr)->request_quantize_level == NO_QUANTIZE) {
        if (((outfptr->Fptr)->request_compress_type != GZIP_1) &&
            ((outfptr->Fptr)->request_compress_type != GZIP_2)) {
          ffpmsg("Lossless compression of floating point images must use GZIP (imcomp_init_table)");
          return(*status = DATA_COMPRESSION_ERR);
        }
     }
+ 
+     /* set default compression parameter values, if undefined */
     
+    if ( (outfptr->Fptr)->request_compress_type == 0) {
+	/* use RICE_1 by default */
+	(outfptr->Fptr)->request_compress_type = RICE_1;
+    }
+
+    if (inbitpix < 0 && (outfptr->Fptr)->request_quantize_level != NO_QUANTIZE) {  
+	/* set defaults for quantizing floating point images */
+	if ( (outfptr->Fptr)->request_quantize_method == 0) {
+	      /* set default dithering method */
+              (outfptr->Fptr)->request_quantize_method = SUBTRACTIVE_DITHER_1;
+	}
+
+	if ( (outfptr->Fptr)->request_quantize_level == 0) {
+	    if ((outfptr->Fptr)->request_quantize_method == NO_DITHER) {
+	        /* must use finer quantization if no dithering is done */
+	        (outfptr->Fptr)->request_quantize_level = 16; 
+	    } else {
+	        (outfptr->Fptr)->request_quantize_level = 4; 
+	    }
+        }
+    }
+
     /* test for the 2 special cases that represent unsigned integers */
     if (inbitpix == USHORT_IMG)
         bitpix = SHORT_IMG;
@@ -755,8 +1021,8 @@ int imcomp_init_table(fitsfile *outfptr,
             return(*status = DATA_COMPRESSION_ERR);
          }
 
-         if ((actual_tilesize[0] == 0) &&
-             (actual_tilesize[1] == 0) ){
+         if ((actual_tilesize[0] <= 0) &&
+             (actual_tilesize[1] == -1) ){
 	     
 	    /* compress the whole image as a single tile */
              actual_tilesize[0] = naxes[0];
@@ -767,8 +1033,8 @@ int imcomp_init_table(fitsfile *outfptr,
                      actual_tilesize[ii] = 1;
 	      }
 
-         } else if ((actual_tilesize[0] == 0) &&
-             (actual_tilesize[1] == 1) ){
+         } else if ((actual_tilesize[0] <= 0) &&
+             (actual_tilesize[1] == 0 || actual_tilesize[1] == 1) ){
 	     
              /*
               The Hcompress algorithm is inherently 2D in nature, so the row by row
@@ -847,14 +1113,25 @@ int imcomp_init_table(fitsfile *outfptr,
     } /* end, if HCOMPRESS_1 */
     
     for (ii = 0; ii < naxis; ii++) {
-        if (actual_tilesize[ii] <= 0) {
-	    /* tile size of 0 means use the image size of that dimension */
-            actual_tilesize[ii] = naxes[ii];
+	if (ii == 0) { /* first axis is different */
+	    if (actual_tilesize[ii] <= 0) {
+                actual_tilesize[ii] = naxes[ii]; 
+	    }
+	} else {
+	    if (actual_tilesize[ii] < 0) {
+                actual_tilesize[ii] = naxes[ii];  /* negative value maean use whole length */
+	    } else if (actual_tilesize[ii] == 0) {
+                actual_tilesize[ii] = 1;  /* zero value means use default value = 1 */
+	    }
 	}
     }
 
     /* ---- set up array of TFORM strings -------------------------------*/
-    strcpy(tf0, "1PB");
+    if ( (outfptr->Fptr)->request_huge_hdu != 0) {
+        strcpy(tf0, "1QB");
+    } else {
+        strcpy(tf0, "1PB");
+    }
     strcpy(tf1, "1D");
     strcpy(tf2, "1D");
 
@@ -870,7 +1147,7 @@ int imcomp_init_table(fitsfile *outfptr,
     }
 
     /* determine the default  number of columns in the output table */
-    if (bitpix < 0 && (outfptr->Fptr)->quantize_level != NO_QUANTIZE)  
+    if (bitpix < 0 && (outfptr->Fptr)->request_quantize_level != NO_QUANTIZE)  
         ncols = 3;  /* quantized and scaled floating point image */
     else
         ncols = 1; /* default table has just one 'COMPRESSED_DATA' column */
@@ -895,7 +1172,11 @@ int imcomp_init_table(fitsfile *outfptr,
     {
         strcpy(zcmptype, "PLIO_1");
        /* the PLIO compression algorithm outputs short integers, not bytes */
-       strcpy(tform[0], "1PI");
+        if ( (outfptr->Fptr)->request_huge_hdu != 0) {
+            strcpy(tform[0], "1QI");
+        } else {
+            strcpy(tform[0], "1PI");
+        }
     }
     else if ((outfptr->Fptr)->request_compress_type == HCOMPRESS_1)
     {
@@ -946,27 +1227,49 @@ int imcomp_init_table(fitsfile *outfptr,
 
     if (bitpix < 0) {
        
-	if ((outfptr->Fptr)->quantize_level == NO_QUANTIZE) {
+	if ((outfptr->Fptr)->request_quantize_level == NO_QUANTIZE) {
 	    ffpkys(outfptr, "ZQUANTIZ", "NONE", 
 	      "Lossless compression without quantization", status);
 	} else {
 	    
 	    /* Unless dithering has been specifically turned off by setting */
-	    /* request_quantize_dither = -1, use dithering by default */
+	    /* request_quantize_method = -1, use dithering by default */
 	    /* when quantizing floating point images. */
 	
-	    if ( (outfptr->Fptr)->request_quantize_dither == 0) 
-              (outfptr->Fptr)->request_quantize_dither = SUBTRACTIVE_DITHER_1;
+	    if ( (outfptr->Fptr)->request_quantize_method == 0) 
+              (outfptr->Fptr)->request_quantize_method = SUBTRACTIVE_DITHER_1;
        
-	    if ((outfptr->Fptr)->request_quantize_dither == SUBTRACTIVE_DITHER_1) {
+	    if ((outfptr->Fptr)->request_quantize_method == SUBTRACTIVE_DITHER_1) {
 	      ffpkys(outfptr, "ZQUANTIZ", "SUBTRACTIVE_DITHER_1", 
 	        "Pixel Quantization Algorithm", status);
 
 	      /* also write the associated ZDITHER0 keyword with a default value */
 	      /* which may get updated later. */
-              ffpky(outfptr, TINT, "ZDITHER0", &((outfptr->Fptr)->request_dither_offset), 
+              ffpky(outfptr, TINT, "ZDITHER0", &((outfptr->Fptr)->request_dither_seed), 
 	       "dithering offset when quantizing floats", status);
-            }
+ 
+            } else if ((outfptr->Fptr)->request_quantize_method == SUBTRACTIVE_DITHER_2) {
+	      ffpkys(outfptr, "ZQUANTIZ", "SUBTRACTIVE_DITHER_2", 
+	        "Pixel Quantization Algorithm", status);
+
+	      /* also write the associated ZDITHER0 keyword with a default value */
+	      /* which may get updated later. */
+              ffpky(outfptr, TINT, "ZDITHER0", &((outfptr->Fptr)->request_dither_seed), 
+	       "dithering offset when quantizing floats", status);
+
+	      if (!strcmp(zcmptype, "RICE_1"))  {
+	        /* when using this new dithering method, change the compression type */
+		/* to an alias, so that old versions of funpack will not be able to */
+		/* created a corrupted uncompressed image. */
+		/* ******* can remove this cludge after about June 2015, after most old versions of fpack are gone */
+        	strcpy(zcmptype, "RICE_ONE");
+	      }
+
+            } else if ((outfptr->Fptr)->request_quantize_method == NO_DITHER) {
+	      ffpkys(outfptr, "ZQUANTIZ", "NO_DITHER", 
+	        "No dithering during quantization", status);
+	    }
+
 	}
     }
 
@@ -1388,6 +1691,7 @@ int imcomp_compress_tile (fitsfile *outfptr,
     size_t clen;		/* size of cbuf */
     short *cbuf;	/* compressed data */
     int  nelem = 0;		/* number of bytes */
+    int tilecol;
     size_t gzip_nelem = 0;
     unsigned int bzlen;
     int ihcompscale;
@@ -1405,26 +1709,33 @@ int imcomp_compress_tile (fitsfile *outfptr,
     if ( (outfptr->Fptr)->quantize_level == NO_QUANTIZE) {
        if (((outfptr->Fptr)->compress_type != GZIP_1) &&
            ((outfptr->Fptr)->compress_type != GZIP_2)) {
-         ffpmsg("Lossless compression of floating point images must use GZIP");
+         ffpmsg("Lossless compression of floating point images must use GZIP (imcomp_compress_tile)");
          return(*status = DATA_COMPRESSION_ERR);
        }
     }
 
     /* free the previously saved tile if the input tile is for the same row */
-    if ((outfptr->Fptr)->tilerow == row) {
-        if ((outfptr->Fptr)->tiledata) {
-            free((outfptr->Fptr)->tiledata);
+    if ((outfptr->Fptr)->tilerow) {  /* has the tile cache been allocated? */
+
+      /* calculate the column bin of the compressed tile */
+      tilecol = (row - 1) % ((long)(((outfptr->Fptr)->znaxis[0] - 1) / ((outfptr->Fptr)->tilesize[0])) + 1);
+      
+      if ((outfptr->Fptr)->tilerow[tilecol] == row) {
+        if (((outfptr->Fptr)->tiledata)[tilecol]) {
+            free(((outfptr->Fptr)->tiledata)[tilecol]);
         }
 	  
-        if ((outfptr->Fptr)->tilenullarray) {
-            free((outfptr->Fptr)->tilenullarray);
+        if (((outfptr->Fptr)->tilenullarray)[tilecol]) {
+            free(((outfptr->Fptr)->tilenullarray)[tilecol]);
         }
 
-        (outfptr->Fptr)->tiledata = 0;
-        (outfptr->Fptr)->tilenullarray = 0;
-        (outfptr->Fptr)->tilerow = 0;
-        (outfptr->Fptr)->tiledatasize = 0;
-        (outfptr->Fptr)->tiletype = 0;
+        ((outfptr->Fptr)->tiledata)[tilecol] = 0;
+        ((outfptr->Fptr)->tilenullarray)[tilecol] = 0;
+        (outfptr->Fptr)->tilerow[tilecol] = 0;
+        (outfptr->Fptr)->tiledatasize[tilecol] = 0;
+        (outfptr->Fptr)->tiletype[tilecol] = 0;
+        (outfptr->Fptr)->tileanynull[tilecol] = 0;
+      }
     }
 
     if ( (outfptr->Fptr)->compress_type == NOCOMPRESS) {
@@ -1734,13 +2045,17 @@ int imcomp_compress_tile (fitsfile *outfptr,
 
          /* if gzip2 compressed data column doesn't exist, create it */
          if ((outfptr->Fptr)->cn_gzip_data < 1) {
+              if ( (outfptr->Fptr)->request_huge_hdu != 0) {
+                 fits_insert_col(outfptr, 999, "GZIP_COMPRESSED_DATA", "1QB", status);
+              } else {
                  fits_insert_col(outfptr, 999, "GZIP_COMPRESSED_DATA", "1PB", status);
+              }
 
                  if (*status <= 0)  /* save the number of this column */
                        ffgcno(outfptr, CASEINSEN, "GZIP_COMPRESSED_DATA",
                                 &(outfptr->Fptr)->cn_gzip_data, status);
          }
- 
+
          if (datatype == TFLOAT)  {
                /* allocate buffer for the compressed tile bytes */
 	       /* make it 10% larger than the original uncompressed data */
@@ -1967,7 +2282,7 @@ int imcomp_convert_tile_tushort(
     int *status)
 {
     /*  Prepare the input  tile array of pixels for compression.
-    /*  Convert input integer*2 tile array in place to 4 or 8-byte ints for compression, */
+    /*  Convert input unsigned integer*2 tile array in place to 4 or 8-byte ints for compression, */
     /*  If needed, convert 4 or 8-byte ints and do null value substitution. */
     /*  Note that the calling routine must have allocated the input array big enough */
     /* to be able to do this.  */
@@ -2049,11 +2364,9 @@ int imcomp_convert_tile_tint(
     int *status)
 {
     /*  Prepare the input tile array of pixels for compression.
-    /*  Convert input integer*2 tile array in place to 4 or 8-byte ints for compression, */
-    /*  If needed, convert 4 or 8-byte ints and do null value substitution. */
-    /*  Note that the calling routine must have allocated the input array big enough */
-    /* to be able to do this.  */
-
+    /*  Convert input integer tile array in place to 4 or 8-byte ints for compression, */
+    /*  If needed, do null value substitution. */
+   
     int flagval, *idata;
     long ii;
     
@@ -2099,15 +2412,13 @@ int imcomp_convert_tile_tuint(
     int *status)
 {
     /*  Prepare the input tile array of pixels for compression.
-    /*  Convert input integer*2 tile array in place to 4 or 8-byte ints for compression, */
-    /*  If needed, convert 4 or 8-byte ints and do null value substitution. */
-    /*  Note that the calling routine must have allocated the input array big enough */
-    /* to be able to do this.  */
+    /*  Convert input unsigned integer tile array in place to 4 or 8-byte ints for compression, */
+    /*  If needed, do null value substitution. */
+
 
     int flagval, *idata;
     unsigned int *uintbuff, uintflagval;
     long ii;
-    
  
        /* datatype of input array is unsigned int.  We only support writing this datatype
           to a FITS image with BITPIX = 32 and with BZERO = 0 and BSCALE = 2147483648.  */
@@ -2157,7 +2468,7 @@ int imcomp_convert_tile_tbyte(
     int *status)
 {
     /*  Prepare the input tile array of pixels for compression.
-    /*  Convert input integer*2 tile array in place to 4 or 8-byte ints for compression, */
+    /*  Convert input unsigned integer*1 tile array in place to 4 or 8-byte ints for compression, */
     /*  If needed, convert 4 or 8-byte ints and do null value substitution. */
     /*  Note that the calling routine must have allocated the input array big enough */
     /* to be able to do this.  */
@@ -2229,7 +2540,7 @@ int imcomp_convert_tile_tsbyte(
     int *status)
 {
     /*  Prepare the input tile array of pixels for compression.
-    /*  Convert input integer*2 tile array in place to 4 or 8-byte ints for compression, */
+    /*  Convert input integer*1 tile array in place to 4 or 8-byte ints for compression, */
     /*  If needed, convert 4 or 8-byte ints and do null value substitution. */
     /*  Note that the calling routine must have allocated the input array big enough */
     /* to be able to do this.  */
@@ -2312,7 +2623,7 @@ int imcomp_convert_tile_tfloat(
     int *status)
 {
     /*  Prepare the input tile array of pixels for compression.
-    /*  Convert input integer*2 tile array in place to 4 or 8-byte ints for compression, */
+    /*  Convert input float tile array in place to 4 or 8-byte ints for compression, */
     /*  If needed, convert 4 or 8-byte ints and do null value substitution. */
     /*  Note that the calling routine must have allocated the input array big enough */
     /* to be able to do this.  */
@@ -2324,6 +2635,15 @@ int imcomp_convert_tile_tfloat(
     unsigned long dithersum;
     int iminval = 0, imaxval = 0;  /* min and max quantized integers */
 
+        /* datatype of input array is double.  We only support writing this datatype
+           to a FITS image with BITPIX = -64 or -32, except we also support the special case where
+	   BITPIX = 32 and BZERO = 0 and BSCALE = 1.  */
+
+       if ((zbitpix != LONG_IMG && zbitpix != DOUBLE_IMG && zbitpix != FLOAT_IMG) || scale != 1.0 || zero != 0.) {
+           ffpmsg("Implicit datatype conversion is not supported when writing to compressed images");
+           return(*status = DATA_COMPRESSION_ERR);
+       } 
+
            *intlength = 4;
            idata = (int *) tiledata;
 
@@ -2338,10 +2658,11 @@ int imcomp_convert_tile_tfloat(
 	    else
 	      floatnull = FLOATNULLVALUE;  /* NaNs are represented by this, by default */
 
-            if ((outfptr->Fptr)->quantize_dither == SUBTRACTIVE_DITHER_1) {
+            if ((outfptr->Fptr)->quantize_method == SUBTRACTIVE_DITHER_1  ||
+	        (outfptr->Fptr)->quantize_method == SUBTRACTIVE_DITHER_2) {
 	      
 	          /* see if the dithering offset value needs to be initialized */                  
-	          if ((outfptr->Fptr)->request_dither_offset == 0 && (outfptr->Fptr)->dither_offset == 0) {
+	          if ((outfptr->Fptr)->request_dither_seed == 0 && (outfptr->Fptr)->dither_seed == 0) {
 
 		     /* This means randomly choose the dithering offset based on the system time. */
 		     /* The offset will have a value between 1 and 10000, inclusive. */
@@ -2349,21 +2670,21 @@ int imcomp_convert_tile_tfloat(
 		     /* The clock function returns the elapsed CPU time, in integer CLOCKS_PER_SEC units. */
 		     /* The CPU time returned by clock is typically (on linux PC) only good to 0.01 sec */
 		     /* Summing the 2 quantities may help avoid cases where 2 executions of the program */
-		     /* (perhaps in a multithreaded environoment) end up with exactly the same dither_offset */
+		     /* (perhaps in a multithreaded environoment) end up with exactly the same dither seed */
 		     /* value.  The sum is incremented by the current HDU number in the file to provide */
 		     /* further randomization.  This randomization is desireable if multiple compressed */
 		     /* images will be summed (or differenced). In such cases, the benefits of dithering */
 		     /* may be lost if all the images use exactly the same sequence of random numbers when */
 		     /* calculating the dithering offsets. */	     
 		     
-		     (outfptr->Fptr)->dither_offset = 
+		     (outfptr->Fptr)->dither_seed = 
 		       (( (int)time(NULL) + ( (int) clock() / (int) (CLOCKS_PER_SEC / 100)) + (outfptr->Fptr)->curhdu) % 10000) + 1;
 		     
                      /* update the header keyword with this new value */
-		     fits_update_key(outfptr, TINT, "ZDITHER0", &((outfptr->Fptr)->dither_offset), 
+		     fits_update_key(outfptr, TINT, "ZDITHER0", &((outfptr->Fptr)->dither_seed), 
 	                        NULL, status);
 
-	          } else if ((outfptr->Fptr)->request_dither_offset < 0 && (outfptr->Fptr)->dither_offset < 0) {
+	          } else if ((outfptr->Fptr)->request_dither_seed < 0 && (outfptr->Fptr)->dither_seed < 0) {
 
 		     /* this means randomly choose the dithering offset based on some hash function */
 		     /* of the first input tile of data to be quantized and compressed.  This ensures that */
@@ -2374,23 +2695,27 @@ int imcomp_convert_tile_tfloat(
 		     for (ii = 0; ii < 4 * tilelen; ii++) {
 		         dithersum += usbbuff[ii];  /* doesn't matter if there is an integer overflow */
 	             }
-		     (outfptr->Fptr)->dither_offset = ((int) (dithersum % 10000)) + 1;
+		     (outfptr->Fptr)->dither_seed = ((int) (dithersum % 10000)) + 1;
 		
                      /* update the header keyword with this new value */
-		     fits_update_key(outfptr, TINT, "ZDITHER0", &((outfptr->Fptr)->dither_offset), 
+		     fits_update_key(outfptr, TINT, "ZDITHER0", &((outfptr->Fptr)->dither_seed), 
 	                        NULL, status);
 		  }
 
                   /* subtract 1 to convert from 1-based to 0-based element number */
-	          irow = row + (outfptr->Fptr)->dither_offset - 1; /* dither the quantized values */
+	          irow = row + (outfptr->Fptr)->dither_seed - 1; /* dither the quantized values */
 
-	      } else {
+	      } else if ((outfptr->Fptr)->quantize_method == -1) {
 	          irow = 0;  /* do not dither the quantized values */
+              } else {
+                  ffpmsg("Unknown dithering method.");
+                  ffpmsg("May need to install a newer version of CFITSIO.");
+                  return(*status = DATA_COMPRESSION_ERR);
               }
 	      
               *flag = fits_quantize_float (irow, (float *) tiledata, tilenx, tileny,
-                   nullcheck, floatnull, (outfptr->Fptr)->quantize_level, idata,
-                   bscale, bzero, &iminval, &imaxval);
+                   nullcheck, floatnull, (outfptr->Fptr)->quantize_level, 
+		   (outfptr->Fptr)->quantize_method, idata, bscale, bzero, &iminval, &imaxval);
 
               if (*flag > 1)
 		   return(*status = *flag);
@@ -2438,7 +2763,7 @@ int imcomp_convert_tile_tdouble(
     int *status)
 {
     /*  Prepare the input tile array of pixels for compression.
-    /*  Convert input integer*2 tile array in place to 4 or 8-byte ints for compression, */
+    /*  Convert input double tile array in place to 4-byte ints for compression, */
     /*  If needed, convert 4 or 8-byte ints and do null value substitution. */
     /*  Note that the calling routine must have allocated the input array big enough */
     /* to be able to do this.  */
@@ -2450,6 +2775,15 @@ int imcomp_convert_tile_tdouble(
     unsigned long dithersum;
     int iminval = 0, imaxval = 0;  /* min and max quantized integers */
 
+        /* datatype of input array is double.  We only support writing this datatype
+           to a FITS image with BITPIX = -64 or -32, except we also support the special case where
+	   BITPIX = 32 and BZERO = 0 and BSCALE = 1.  */
+
+       if ((zbitpix != LONG_IMG && zbitpix != DOUBLE_IMG && zbitpix != FLOAT_IMG) || scale != 1.0 || zero != 0.) {
+           ffpmsg("Implicit datatype conversion is not supported when writing to compressed images");
+           return(*status = DATA_COMPRESSION_ERR);
+       } 
+
            *intlength = 4;
            idata = (int *) tiledata;
 
@@ -2463,42 +2797,48 @@ int imcomp_convert_tile_tdouble(
 	      doublenull = *(double *) (nullflagval);
 	    else
 	      doublenull = DOUBLENULLVALUE;
-	      
+
             /* quantize the double values into integers */
-              if ((outfptr->Fptr)->quantize_dither == SUBTRACTIVE_DITHER_1) {
+              if ((outfptr->Fptr)->quantize_method == SUBTRACTIVE_DITHER_1 ||
+	          (outfptr->Fptr)->quantize_method == SUBTRACTIVE_DITHER_2) {
 
 	          /* see if the dithering offset value needs to be initialized (see above) */                  
-	          if ((outfptr->Fptr)->request_dither_offset == 0 && (outfptr->Fptr)->dither_offset == 0) {
+	          if ((outfptr->Fptr)->request_dither_seed == 0 && (outfptr->Fptr)->dither_seed == 0) {
 
-		     (outfptr->Fptr)->dither_offset = 
+		     (outfptr->Fptr)->dither_seed = 
 		       (( (int)time(NULL) + ( (int) clock() / (int) (CLOCKS_PER_SEC / 100)) + (outfptr->Fptr)->curhdu) % 10000) + 1;
 		     
                      /* update the header keyword with this new value */
-		     fits_update_key(outfptr, TINT, "ZDITHER0", &((outfptr->Fptr)->dither_offset), 
+		     fits_update_key(outfptr, TINT, "ZDITHER0", &((outfptr->Fptr)->dither_seed), 
 	                        NULL, status);
 
-	          } else if ((outfptr->Fptr)->request_dither_offset < 0 && (outfptr->Fptr)->dither_offset < 0) {
+	          } else if ((outfptr->Fptr)->request_dither_seed < 0 && (outfptr->Fptr)->dither_seed < 0) {
 
 		     usbbuff = (unsigned char *) tiledata;
 		     dithersum = 0;
 		     for (ii = 0; ii < 8 * tilelen; ii++) {
 		         dithersum += usbbuff[ii];
 	             }
-		     (outfptr->Fptr)->dither_offset = ((int) (dithersum % 10000)) + 1;
+		     (outfptr->Fptr)->dither_seed = ((int) (dithersum % 10000)) + 1;
 		
                      /* update the header keyword with this new value */
-		     fits_update_key(outfptr, TINT, "ZDITHER0", &((outfptr->Fptr)->dither_offset), 
+		     fits_update_key(outfptr, TINT, "ZDITHER0", &((outfptr->Fptr)->dither_seed), 
 	                        NULL, status);
 		  }
 
-	          irow = row + (outfptr->Fptr)->dither_offset - 1; /* dither the quantized values */
+	          irow = row + (outfptr->Fptr)->dither_seed - 1; /* dither the quantized values */
 
-	      } else {
+	      } else if ((outfptr->Fptr)->quantize_method == -1) {
 	          irow = 0;  /* do not dither the quantized values */
-	      }
+              } else {
+                  ffpmsg("Unknown subtractive dithering method.");
+                  ffpmsg("May need to install a newer version of CFITSIO.");
+                  return(*status = DATA_COMPRESSION_ERR);
+              }
 
             *flag = fits_quantize_double (irow, (double *) tiledata, tilenx, tileny,
-               nullcheck, doublenull, (outfptr->Fptr)->quantize_level, idata,
+               nullcheck, doublenull, (outfptr->Fptr)->quantize_level, 
+	       (outfptr->Fptr)->quantize_method, idata,
                bscale, bzero, &iminval, &imaxval);
 
             if (*flag > 1)
@@ -3057,13 +3397,15 @@ int fits_write_compressed_img(fitsfile *fptr,   /* I - FITS file pointer     */
    Write a section of a compressed image.
 */
 {
-    int naxis[MAX_COMPRESS_DIM], tiledim[MAX_COMPRESS_DIM];
+    int  tiledim[MAX_COMPRESS_DIM];
+    long naxis[MAX_COMPRESS_DIM];
     long tilesize[MAX_COMPRESS_DIM], thistilesize[MAX_COMPRESS_DIM];
     long ftile[MAX_COMPRESS_DIM], ltile[MAX_COMPRESS_DIM];
     long tfpixel[MAX_COMPRESS_DIM], tlpixel[MAX_COMPRESS_DIM];
     long rowdim[MAX_COMPRESS_DIM], offset[MAX_COMPRESS_DIM],ntemp;
     long fpixel[MAX_COMPRESS_DIM], lpixel[MAX_COMPRESS_DIM];
-    int ii, i5, i4, i3, i2, i1, i0, ndim, irow, pixlen, tilenul;
+    long i5, i4, i3, i2, i1, i0, irow;
+    int ii, ndim, pixlen, tilenul;
     int  tstatus, buffpixsiz;
     void *buffer;
     char *bnullarray = 0, card[FLEN_CARD];
@@ -3957,14 +4299,15 @@ int fits_read_compressed_img(fitsfile *fptr,   /* I - FITS file pointer      */
    returned.
 */
 {
-    int naxis[MAX_COMPRESS_DIM], tiledim[MAX_COMPRESS_DIM];
+    long naxis[MAX_COMPRESS_DIM], tiledim[MAX_COMPRESS_DIM];
     long tilesize[MAX_COMPRESS_DIM], thistilesize[MAX_COMPRESS_DIM];
     long ftile[MAX_COMPRESS_DIM], ltile[MAX_COMPRESS_DIM];
     long tfpixel[MAX_COMPRESS_DIM], tlpixel[MAX_COMPRESS_DIM];
     long rowdim[MAX_COMPRESS_DIM], offset[MAX_COMPRESS_DIM],ntemp;
     long fpixel[MAX_COMPRESS_DIM], lpixel[MAX_COMPRESS_DIM];
     long inc[MAX_COMPRESS_DIM];
-    int ii, i5, i4, i3, i2, i1, i0, ndim, irow, pixlen, tilenul;
+    long i5, i4, i3, i2, i1, i0, irow;
+    int ii, ndim, pixlen, tilenul;
     void *buffer;
     char *bnullarray = 0;
     double testnullval = 0.;
@@ -4166,8 +4509,8 @@ int fits_read_compressed_img(fitsfile *fptr,   /* I - FITS file pointer      */
             offset[1] = (i1 - 1) * rowdim[1] + offset[2];
             for (i0 = ftile[0]; i0 <= ltile[0]; i0++)
             {
-              tfpixel[0] = (i0 - 1) * tilesize[0] + 1;
-              tlpixel[0] = minvalue(tfpixel[0] + tilesize[0] - 1, 
+             tfpixel[0] = (i0 - 1) * tilesize[0] + 1;
+             tlpixel[0] = minvalue(tfpixel[0] + tilesize[0] - 1, 
                                     naxis[0]);
               thistilesize[0] = thistilesize[1] * (tlpixel[0] - tfpixel[0] + 1);
               /* calculate row of table containing this tile */
@@ -4178,25 +4521,29 @@ printf("row %d, %d %d, %d %d, %d %d; %d\n",
               irow, tfpixel[0],tlpixel[0],tfpixel[1],tlpixel[1],tfpixel[2],tlpixel[2],
 	      thistilesize[0]);
 */   
-              /* read and uncompress this row (tile) of the table */
-              /* also do type conversion and undefined pixel substitution */
-              /* at this point */
-
-              imcomp_decompress_tile(fptr, irow, thistilesize[0],
+              /* test if there are any intersecting pixels in this tile and the output image */
+              if (imcomp_test_overlap(ndim, tfpixel, tlpixel, 
+                      fpixel, lpixel, inc, status)) {
+                  /* read and uncompress this row (tile) of the table */
+                  /* also do type conversion and undefined pixel substitution */
+                  /* at this point */
+
+                  imcomp_decompress_tile(fptr, irow, thistilesize[0],
                     datatype, nullcheck, nullval, buffer, bnullarray, &tilenul,
                      status);
 
-              if (tilenul && anynul)
-                  *anynul = 1;  /* there are null pixels */
+                  if (tilenul && anynul)
+                      *anynul = 1;  /* there are null pixels */
 /*
 printf(" pixlen=%d, ndim=%d, %d %d %d, %d %d %d, %d %d %d\n",
      pixlen, ndim, fpixel[0],lpixel[0],inc[0],fpixel[1],lpixel[1],inc[1],
      fpixel[2],lpixel[2],inc[2]);
 */
-              /* copy the intersecting pixels from this tile to the output */
-              imcomp_copy_overlap(buffer, pixlen, ndim, tfpixel, tlpixel, 
+                  /* copy the intersecting pixels from this tile to the output */
+                  imcomp_copy_overlap(buffer, pixlen, ndim, tfpixel, tlpixel, 
                      bnullarray, array, fpixel, lpixel, inc, nullcheck, 
                      nullarray, status);
+               }
             }
           }
         }
@@ -4229,14 +4576,15 @@ int fits_read_write_compressed_img(fitsfile *fptr,   /* I - FITS file pointer
    the array.
 */
 {
-    int naxis[MAX_COMPRESS_DIM], tiledim[MAX_COMPRESS_DIM];
+    long naxis[MAX_COMPRESS_DIM], tiledim[MAX_COMPRESS_DIM];
     long tilesize[MAX_COMPRESS_DIM], thistilesize[MAX_COMPRESS_DIM];
     long ftile[MAX_COMPRESS_DIM], ltile[MAX_COMPRESS_DIM];
     long tfpixel[MAX_COMPRESS_DIM], tlpixel[MAX_COMPRESS_DIM];
     long rowdim[MAX_COMPRESS_DIM], offset[MAX_COMPRESS_DIM],ntemp;
     long fpixel[MAX_COMPRESS_DIM], lpixel[MAX_COMPRESS_DIM];
     long inc[MAX_COMPRESS_DIM];
-    int ii, i5, i4, i3, i2, i1, i0, ndim, irow, pixlen, tilenul;
+    long i5, i4, i3, i2, i1, i0, irow;
+    int ii, ndim, pixlen, tilenul;
     void *buffer;
     char *bnullarray = 0;
     double testnullval = 0.;
@@ -4782,7 +5130,7 @@ int imcomp_get_compressed_image_par(fitsfile *infptr, int *status)
     (infptr->Fptr)->zcmptype[0] = '\0';
     strncat((infptr->Fptr)->zcmptype, value, 11);
 
-    if (!FSTRCMP(value, "RICE_1") )
+    if (!FSTRCMP(value, "RICE_1") || !FSTRCMP(value, "RICE_ONE") )
         (infptr->Fptr)->compress_type = RICE_1;
     else if (!FSTRCMP(value, "HCOMPRESS_1") )
         (infptr->Fptr)->compress_type = HCOMPRESS_1;
@@ -4808,14 +5156,19 @@ int imcomp_get_compressed_image_par(fitsfile *infptr, int *status)
     tstatus = 0;
     if (ffgky(infptr, TSTRING, "ZQUANTIZ", value, NULL, &tstatus) > 0)
     {
-        (infptr->Fptr)->quantize_dither = 0;
+        (infptr->Fptr)->quantize_method = 0;
     } else {
-        if (!FSTRCMP(value, "NONE") )
+
+        if (!FSTRCMP(value, "NONE") ) {
             (infptr->Fptr)->quantize_level = NO_QUANTIZE;
-        else if (!FSTRCMP(value, "SUBTRACTIVE_DITHER_1") )
-            (infptr->Fptr)->quantize_dither = SUBTRACTIVE_DITHER_1;
+       } else if (!FSTRCMP(value, "SUBTRACTIVE_DITHER_1") )
+            (infptr->Fptr)->quantize_method = SUBTRACTIVE_DITHER_1;
+        else if (!FSTRCMP(value, "SUBTRACTIVE_DITHER_2") )
+            (infptr->Fptr)->quantize_method = SUBTRACTIVE_DITHER_2;
+        else if (!FSTRCMP(value, "NO_DITHER") )
+            (infptr->Fptr)->quantize_method = NO_DITHER;
         else
-            (infptr->Fptr)->quantize_dither = 0;
+            (infptr->Fptr)->quantize_method = 0;
     }
 
     /* get the floating point quantization dithering offset, if present. */
@@ -4824,9 +5177,9 @@ int imcomp_get_compressed_image_par(fitsfile *infptr, int *status)
     if (ffgky(infptr, TINT, "ZDITHER0", &doffset, NULL, &tstatus) > 0)
     {
 	/* by default start with 1st element of random sequence */
-        (infptr->Fptr)->dither_offset = 1;  
+        (infptr->Fptr)->dither_seed = 1;  
     } else {
-        (infptr->Fptr)->dither_offset = doffset;
+        (infptr->Fptr)->dither_seed = doffset;
     }
 
     if (ffgky (infptr, TINT,  "ZBITPIX",  &(infptr->Fptr)->zbitpix,  
@@ -5161,12 +5514,17 @@ int imcomp_copy_img2comp(fitsfile *infptr, fitsfile *outfptr, int *status)
         /* rewrite the deleted keyword at the end of the header */
         fits_write_record(outfptr, card, status);
 
-	fits_write_history(outfptr, 
-	    "Image was compressed by CFITSIO using scaled integer quantization:", status);
-	sprintf(card2, "  q = %f / quantized level scaling parameter", 
-	    (outfptr->Fptr)->quantize_level);
-	fits_write_history(outfptr, card2, status); 
-	fits_write_history(outfptr, card+10, status); 
+	/* write some associated HISTORY keywords */
+        fits_parse_value(card, card2, NULL, status);
+	if (strncasecmp(card2, "'NONE", 5) ) {
+	    /* the value is not 'NONE' */	
+	    fits_write_history(outfptr, 
+	        "Image was compressed by CFITSIO using scaled integer quantization:", status);
+	    sprintf(card2, "  q = %f / quantized level scaling parameter", 
+	        (outfptr->Fptr)->request_quantize_level);
+	    fits_write_history(outfptr, card2, status); 
+	    fits_write_history(outfptr, card+10, status); 
+	}
    }
 
    tstatus = 0;
@@ -5356,7 +5714,7 @@ int imcomp_decompress_tile (fitsfile *infptr,
     unsigned char *cbuf; /* compressed data */
     unsigned char charnull = 0;
     short snull = 0;
-    int blocksize;
+    int blocksize, ntilebins, tilecol;
     float fnulval=0;
     float *tempfloat = 0;
     double dnulval=0;
@@ -5367,17 +5725,43 @@ int imcomp_decompress_tile (fitsfile *infptr,
     if (*status > 0)
        return(*status);
 
+
+    /* **************************************************************** */
+    /* allocate pointers to array of cached uncompressed tiles, if not already done */
+    if ((infptr->Fptr)->tilerow == 0)  {
+
+      /* calculate number of column bins of compressed tile */
+      ntilebins =  (((infptr->Fptr)->znaxis[0] - 1) / ((infptr->Fptr)->tilesize[0])) + 1;
+
+     if ((infptr->Fptr)->znaxis[0]   != (infptr->Fptr)->tilesize[0] ||
+        (infptr->Fptr)->tilesize[1] != 1 ) {   /* don't cache the tile if only single row of the image */
+
+        (infptr->Fptr)->tilerow = (int *) calloc (ntilebins, sizeof(int));
+        (infptr->Fptr)->tiledata = (void**) calloc (ntilebins, sizeof(void*));
+        (infptr->Fptr)->tilenullarray = (void **) calloc (ntilebins, sizeof(char*));
+        (infptr->Fptr)->tiledatasize = (long *) calloc (ntilebins, sizeof(long));
+        (infptr->Fptr)->tiletype = (int *) calloc (ntilebins, sizeof(int));
+        (infptr->Fptr)->tileanynull = (int *) calloc (ntilebins, sizeof(int));
+      }
+    }
+ 
     /* **************************************************************** */
     /* check if this tile was cached; if so, just copy it out */
-    if (nrow == (infptr->Fptr)->tilerow && datatype == (infptr->Fptr)->tiletype ) {
+    if ((infptr->Fptr)->tilerow)  {
+      /* calculate the column bin of the compressed tile */
+      tilecol = (nrow - 1) % ((long)(((infptr->Fptr)->znaxis[0] - 1) / ((infptr->Fptr)->tilesize[0])) + 1);
+
+      if (nrow == (infptr->Fptr)->tilerow[tilecol] && datatype == (infptr->Fptr)->tiletype[tilecol] ) {
 
-         memcpy(buffer, (infptr->Fptr)->tiledata, (infptr->Fptr)->tiledatasize);
+         memcpy(buffer, ((infptr->Fptr)->tiledata)[tilecol], (infptr->Fptr)->tiledatasize[tilecol]);
 	 
 	 if (nullcheck == 2)
-             memcpy(bnullarray, (infptr->Fptr)->tilenullarray, tilelen);
+             memcpy(bnullarray, (infptr->Fptr)->tilenullarray[tilecol], tilelen);
+
+         *anynul = (infptr->Fptr)->tileanynull[tilecol];
 
-         *anynul = (infptr->Fptr)->tileanynull;
          return(*status);
+       }
     }
 
     /* **************************************************************** */
@@ -5554,7 +5938,7 @@ int imcomp_decompress_tile (fitsfile *infptr,
 
         return(*status);
     }
-   
+
     /* **************************************************************** */
     /* deal with the normal case of a compressed tile of pixels */
     if (nullcheck == 2)  {
@@ -5877,6 +6261,19 @@ int imcomp_decompress_tile (fitsfile *infptr,
             fffi4i2(idata, tilelen, bscale, bzero, nullcheck, tnull,
              *(short *) nulval, bnullarray, anynul,
             (short *) buffer, status);
+
+            /*
+	       Hcompress is a special case:  ignore any numerical overflow
+	       errors that may have occurred during the integer*4 to integer*2
+	       convertion.  Overflows can happen when a lossy Hcompress algorithm
+	       is invoked (with a non-zero scale factor).  The fffi4i2 routine
+	       clips the returned values to be within the legal I*2 range, so
+	       all we need to is to reset the error status to zero.
+	    */
+	       
+            if ((infptr->Fptr)->compress_type == HCOMPRESS_1) {
+	        if (*status == NUM_OVERFLOW) *status = 0;
+	    }
           }
         else if (tiledatatype == TSHORT)
           fffi2i2((short *)idata, tilelen, bscale, bzero, nullcheck, (short) tnull,
@@ -5968,23 +6365,24 @@ int imcomp_decompress_tile (fitsfile *infptr,
                 (float *) buffer, status);
           }
 	
-        } else if ((infptr->Fptr)->quantize_dither == SUBTRACTIVE_DITHER_1) {
+        } else if ((infptr->Fptr)->quantize_method == SUBTRACTIVE_DITHER_1 ||
+	           (infptr->Fptr)->quantize_method == SUBTRACTIVE_DITHER_2) {
 
          /* use the new dithering algorithm (introduced in July 2009) */
 
          if (tiledatatype == TINT)
-          unquantize_i4r4(nrow + (infptr->Fptr)->dither_offset - 1, idata, 
-	   tilelen, bscale, bzero, nullcheck, tnull,
+          unquantize_i4r4(nrow + (infptr->Fptr)->dither_seed - 1, idata, 
+	   tilelen, bscale, bzero, (infptr->Fptr)->quantize_method, nullcheck, tnull,
            fnulval, bnullarray, anynul,
             (float *) buffer, status);
          else if (tiledatatype == TSHORT)
-          unquantize_i2r4(nrow + (infptr->Fptr)->dither_offset - 1, (short *)idata, 
-	   tilelen, bscale, bzero, nullcheck, (short) tnull,
+          unquantize_i2r4(nrow + (infptr->Fptr)->dither_seed - 1, (short *)idata, 
+	   tilelen, bscale, bzero, (infptr->Fptr)->quantize_method, nullcheck, (short) tnull,
            fnulval, bnullarray, anynul,
             (float *) buffer, status);
          else if (tiledatatype == TBYTE)
-          unquantize_i1r4(nrow + (infptr->Fptr)->dither_offset - 1, (unsigned char *)idata, 
-	   tilelen, bscale, bzero, nullcheck, (unsigned char) tnull,
+          unquantize_i1r4(nrow + (infptr->Fptr)->dither_seed - 1, (unsigned char *)idata, 
+	   tilelen, bscale, bzero, (infptr->Fptr)->quantize_method, nullcheck, (unsigned char) tnull,
            fnulval, bnullarray, anynul,
             (float *) buffer, status);
 
@@ -6025,22 +6423,23 @@ int imcomp_decompress_tile (fitsfile *infptr,
                 (double *) buffer, status);
           }
 	
-	} else if ((infptr->Fptr)->quantize_dither == SUBTRACTIVE_DITHER_1) {
+	} else if ((infptr->Fptr)->quantize_method == SUBTRACTIVE_DITHER_1 ||
+	           (infptr->Fptr)->quantize_method == SUBTRACTIVE_DITHER_2) {
 
          /* use the new dithering algorithm (introduced in July 2009) */
          if (tiledatatype == TINT)
-          unquantize_i4r8(nrow + (infptr->Fptr)->dither_offset - 1, idata,
-	   tilelen, bscale, bzero, nullcheck, tnull,
+          unquantize_i4r8(nrow + (infptr->Fptr)->dither_seed - 1, idata,
+	   tilelen, bscale, bzero, (infptr->Fptr)->quantize_method, nullcheck, tnull,
            dnulval, bnullarray, anynul,
             (double *) buffer, status);
          else if (tiledatatype == TSHORT)
-          unquantize_i2r8(nrow + (infptr->Fptr)->dither_offset - 1, (short *)idata,
-	   tilelen, bscale, bzero, nullcheck, (short) tnull,
+          unquantize_i2r8(nrow + (infptr->Fptr)->dither_seed - 1, (short *)idata,
+	   tilelen, bscale, bzero, (infptr->Fptr)->quantize_method, nullcheck, (short) tnull,
            dnulval, bnullarray, anynul,
             (double *) buffer, status);
          else if (tiledatatype == TBYTE)
-          unquantize_i1r8(nrow + (infptr->Fptr)->dither_offset - 1, (unsigned char *)idata,
-	   tilelen, bscale, bzero, nullcheck, (unsigned char) tnull,
+          unquantize_i1r8(nrow + (infptr->Fptr)->dither_seed - 1, (unsigned char *)idata,
+	   tilelen, bscale, bzero, (infptr->Fptr)->quantize_method, nullcheck, (unsigned char) tnull,
            dnulval, bnullarray, anynul,
             (double *) buffer, status);
 
@@ -6194,62 +6593,163 @@ int imcomp_decompress_tile (fitsfile *infptr,
          it is less likely that the cache will be used in this cases,
 	 so it is not worth the time and the memory overheads.
     */
-    if ((infptr->Fptr)->znaxis[0]   != (infptr->Fptr)->tilesize[0] ||
+    
+    if ((infptr->Fptr)->tilerow)  {  /* make sure cache has been allocated */
+     if ((infptr->Fptr)->znaxis[0]   != (infptr->Fptr)->tilesize[0] ||
         (infptr->Fptr)->tilesize[1] != 1 )
-    {
+     {
       tilesize = pixlen * tilelen;
 
       /* check that tile size/type has not changed */
-      if (tilesize != (infptr->Fptr)->tiledatasize ||
-        datatype != (infptr->Fptr)->tiletype )  {
+      if (tilesize != (infptr->Fptr)->tiledatasize[tilecol] ||
+        datatype != (infptr->Fptr)->tiletype[tilecol] )  {
 
-        if ((infptr->Fptr)->tiledata) {
-            free((infptr->Fptr)->tiledata);	    
+        if (((infptr->Fptr)->tiledata)[tilecol]) {
+            free(((infptr->Fptr)->tiledata)[tilecol]);	    
         }
 	
-        (infptr->Fptr)->tiledata = 0;
-
-        if ((infptr->Fptr)->tilenullarray) {
-            free((infptr->Fptr)->tilenullarray);
+        if (((infptr->Fptr)->tilenullarray)[tilecol]) {
+            free(((infptr->Fptr)->tilenullarray)[tilecol]);
         }
 	
-        (infptr->Fptr)->tilenullarray = 0;
-        (infptr->Fptr)->tilerow = 0;
-        (infptr->Fptr)->tiledatasize = 0;
-        (infptr->Fptr)->tiletype = 0;
+        ((infptr->Fptr)->tilenullarray)[tilecol] = 0;
+        ((infptr->Fptr)->tilerow)[tilecol] = 0;
+        ((infptr->Fptr)->tiledatasize)[tilecol] = 0;
+        ((infptr->Fptr)->tiletype)[tilecol] = 0;
 
         /* allocate new array(s) */
-	(infptr->Fptr)->tiledata = malloc(tilesize);
-	if ((infptr->Fptr)->tiledata == 0)
+	((infptr->Fptr)->tiledata)[tilecol] = malloc(tilesize);
+
+	if (((infptr->Fptr)->tiledata)[tilecol] == 0)
 	   return (*status);
 
         if (nullcheck == 2) {  /* also need array of null pixel flags */
-	    (infptr->Fptr)->tilenullarray = malloc(tilelen);
-	    if ((infptr->Fptr)->tilenullarray == 0)
+	    (infptr->Fptr)->tilenullarray[tilecol] = malloc(tilelen);
+	    if ((infptr->Fptr)->tilenullarray[tilecol] == 0)
 	        return (*status);
         }
 
-        (infptr->Fptr)->tiledatasize = tilesize;
-        (infptr->Fptr)->tiletype = datatype;
+        (infptr->Fptr)->tiledatasize[tilecol] = tilesize;
+        (infptr->Fptr)->tiletype[tilecol] = datatype;
       }
 
       /* copy the tile array(s) into cache buffer */
-      memcpy((infptr->Fptr)->tiledata, buffer, tilesize);
+      memcpy((infptr->Fptr)->tiledata[tilecol], buffer, tilesize);
 
       if (nullcheck == 2) {
 	    if ((infptr->Fptr)->tilenullarray == 0)  {
-       	      (infptr->Fptr)->tilenullarray = malloc(tilelen);
+       	      (infptr->Fptr)->tilenullarray[tilecol] = malloc(tilelen);
             }
-            memcpy((infptr->Fptr)->tilenullarray, bnullarray, tilelen);
+            memcpy((infptr->Fptr)->tilenullarray[tilecol], bnullarray, tilelen);
       }
 
-      (infptr->Fptr)->tilerow = nrow;
-      (infptr->Fptr)->tileanynull = *anynul;
+      (infptr->Fptr)->tilerow[tilecol] = nrow;
+      (infptr->Fptr)->tileanynull[tilecol] = *anynul;
+     }
     }
-
     return (*status);
 }
 /*--------------------------------------------------------------------------*/
+int imcomp_test_overlap (
+    int ndim,           /* I - number of dimension in the tile and image */
+    long *tfpixel,      /* I - first pixel number in each dim. of the tile */
+    long *tlpixel,      /* I - last pixel number in each dim. of the tile */
+    long *fpixel,       /* I - first pixel number in each dim. of the image */
+    long *lpixel,       /* I - last pixel number in each dim. of the image */
+    long *ininc,        /* I - increment to be applied in each image dimen. */
+    int *status)
+
+/* 
+  test if there are any intersecting pixels between this tile and the section
+  of the image defined by fixel, lpixel, ininc. 
+*/
+{
+    long imgdim[MAX_COMPRESS_DIM]; /* product of preceding dimensions in the */
+                                   /* output image, allowing for inc factor */
+    long tiledim[MAX_COMPRESS_DIM]; /* product of preceding dimensions in the */
+                                 /* tile, array;  inc factor is not relevant */
+    long imgfpix[MAX_COMPRESS_DIM]; /* 1st img pix overlapping tile: 0 base, */
+                                    /*  allowing for inc factor */
+    long imglpix[MAX_COMPRESS_DIM]; /* last img pix overlapping tile 0 base, */
+                                    /*  allowing for inc factor */
+    long tilefpix[MAX_COMPRESS_DIM]; /* 1st tile pix overlapping img 0 base, */
+                                    /*  allowing for inc factor */
+    long inc[MAX_COMPRESS_DIM]; /* local copy of input ininc */
+    int ii;
+    long tf, tl;
+
+    if (*status > 0)
+        return(*status);
+
+
+    /* ------------------------------------------------------------ */
+    /* calc amount of overlap in each dimension; if there is zero   */
+    /* overlap in any dimension then just return  */
+    /* ------------------------------------------------------------ */
+    
+    for (ii = 0; ii < ndim; ii++)
+    {
+        if (tlpixel[ii] < fpixel[ii] || tfpixel[ii] > lpixel[ii])
+            return(0);  /* there are no overlapping pixels */
+
+        inc[ii] = ininc[ii];
+
+        /* calc dimensions of the output image section */
+        imgdim[ii] = (lpixel[ii] - fpixel[ii]) / labs(inc[ii]) + 1;
+        if (imgdim[ii] < 1) {
+            *status = NEG_AXIS;
+            return(0);
+        }
+
+        /* calc dimensions of the tile */
+        tiledim[ii] = tlpixel[ii] - tfpixel[ii] + 1;
+        if (tiledim[ii] < 1) {
+            *status = NEG_AXIS;
+            return(0);
+        }
+
+        if (ii > 0)
+           tiledim[ii] *= tiledim[ii - 1];  /* product of dimensions */
+
+        /* first and last pixels in image that overlap with the tile, 0 base */
+        tf = tfpixel[ii] - 1;
+        tl = tlpixel[ii] - 1;
+
+        /* skip this plane if it falls in the cracks of the subsampled image */
+        while ((tf-(fpixel[ii] - 1)) % labs(inc[ii]))
+        {
+           tf++;
+           if (tf > tl)
+             return(0);  /* no overlapping pixels */
+        }
+
+        while ((tl-(fpixel[ii] - 1)) % labs(inc[ii]))
+        {
+           tl--;
+           if (tf > tl)
+             return(0);  /* no overlapping pixels */
+        }
+        imgfpix[ii] = maxvalue((tf - fpixel[ii] +1) / labs(inc[ii]) , 0);
+        imglpix[ii] = minvalue((tl - fpixel[ii] +1) / labs(inc[ii]) ,
+                               imgdim[ii] - 1);
+
+        /* first pixel in the tile that overlaps with the image (0 base) */
+        tilefpix[ii] = maxvalue(fpixel[ii] - tfpixel[ii], 0);
+
+        while ((tfpixel[ii] + tilefpix[ii] - fpixel[ii]) % labs(inc[ii]))
+        {
+           (tilefpix[ii])++;
+           if (tilefpix[ii] >= tiledim[ii])
+              return(0);  /* no overlapping pixels */
+        }
+
+        if (ii > 0)
+           imgdim[ii] *= imgdim[ii - 1];  /* product of dimensions */
+    }
+
+    return(1);  /* there appears to be  intersecting pixels */
+}
+/*--------------------------------------------------------------------------*/
 int imcomp_copy_overlap (
     char *tile,         /* I - multi dimensional array of tile pixels */
     int pixlen,         /* I - number of bytes in each tile or image pixel */
@@ -6722,6 +7222,7 @@ static int unquantize_i1r4(long row, /* tile number = row number in table  */
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - dithering method to use             */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -6747,15 +7248,19 @@ static int unquantize_i1r4(long row, /* tile number = row number in table  */
 
     if (nullcheck == 0)     /* no null checking required */
     {
-           for (ii = 0; ii < ntodo; ii++)
+             for (ii = 0; ii < ntodo; ii++)
             {
-                output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+		if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		    output[ii] = 0.0;
+		else
+                    output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
-	            nextrand = (int) (fits_rand_value[iseed] * 500);
-                }
+		    nextrand = (int) (fits_rand_value[iseed] * 500);
+	        }
             }
     }
     else        /* must check for null values */
@@ -6772,18 +7277,21 @@ static int unquantize_i1r4(long row, /* tile number = row number in table  */
                 }
                 else
                 {
-                    output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
-                }
-
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+		    if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		        output[ii] = 0.0;
+		    else
+                        output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+                } 
+
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
 	            nextrand = (int) (fits_rand_value[iseed] * 500);
                 }
- 
             }
     }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -6792,6 +7300,7 @@ static int unquantize_i2r4(long row, /* seed for random values  */
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - dithering method to use             */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -6819,13 +7328,17 @@ static int unquantize_i2r4(long row, /* seed for random values  */
     {
            for (ii = 0; ii < ntodo; ii++)
             {
-                output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+		if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		    output[ii] = 0.0;
+		else
+                    output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
-	            nextrand = (int) (fits_rand_value[iseed] * 500);
-                }
+		    nextrand = (int) (fits_rand_value[iseed] * 500);
+	        }
             }
     }
     else        /* must check for null values */
@@ -6842,18 +7355,21 @@ static int unquantize_i2r4(long row, /* seed for random values  */
                 }
                 else
                 {
-                    output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+                    if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		        output[ii] = 0.0;
+		    else
+                        output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
                 }
 
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
-	            nextrand = (int) (fits_rand_value[iseed] * 500);
-                }
- 
-            }
+		    nextrand = (int) (fits_rand_value[iseed] * 500);
+	        }
+             }
     }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -6862,6 +7378,7 @@ static int unquantize_i4r4(long row, /* tile number = row number in table    */
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - dithering method to use             */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -6889,14 +7406,17 @@ static int unquantize_i4r4(long row, /* tile number = row number in table    */
     {
             for (ii = 0; ii < ntodo; ii++)
             {
-                output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+                if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		    output[ii] = 0.0;
+		else
+                    output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
 
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
-	            nextrand = (int) (fits_rand_value[iseed] * 500);
-                }
+		    nextrand = (int) (fits_rand_value[iseed] * 500);
+	        }
             }
     }
     else        /* must check for null values */
@@ -6913,18 +7433,21 @@ static int unquantize_i4r4(long row, /* tile number = row number in table    */
                 }
                 else
                 {
-                    output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+                    if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		        output[ii] = 0.0;
+		    else
+                        output[ii] = (float) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
                 }
 
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
-	            nextrand = (int) (fits_rand_value[iseed] * 500);
-                }
-
+		    nextrand = (int) (fits_rand_value[iseed] * 500);
+	        }
             }
     }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -6933,6 +7456,7 @@ static int unquantize_i1r8(long row, /* tile number = row number in table  */
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - dithering method to use             */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -6958,15 +7482,19 @@ static int unquantize_i1r8(long row, /* tile number = row number in table  */
 
     if (nullcheck == 0)     /* no null checking required */
     {
-           for (ii = 0; ii < ntodo; ii++)
+            for (ii = 0; ii < ntodo; ii++)
             {
-                output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+                if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		    output[ii] = 0.0;
+		else
+                    output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
-	            nextrand = (int) (fits_rand_value[iseed] * 500);
-                }
+		    nextrand = (int) (fits_rand_value[iseed] * 500);
+	        }
             }
     }
     else        /* must check for null values */
@@ -6983,18 +7511,21 @@ static int unquantize_i1r8(long row, /* tile number = row number in table  */
                 }
                 else
                 {
-                    output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+                    if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		        output[ii] = 0.0;
+		    else
+                        output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
                 }
 
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
-	            nextrand = (int) (fits_rand_value[iseed] * 500);
-                }
- 
+		    nextrand = (int) (fits_rand_value[iseed] * 500);
+	        }
             }
     }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -7003,6 +7534,7 @@ static int unquantize_i2r8(long row, /* tile number = row number in table  */
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - dithering method to use             */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -7030,13 +7562,17 @@ static int unquantize_i2r8(long row, /* tile number = row number in table  */
     {
            for (ii = 0; ii < ntodo; ii++)
             {
-                output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+                if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		    output[ii] = 0.0;
+		else
+                    output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
-	            nextrand = (int) (fits_rand_value[iseed] * 500);
-                }
+		    nextrand = (int) (fits_rand_value[iseed] * 500);
+	        }
             }
     }
     else        /* must check for null values */
@@ -7053,18 +7589,21 @@ static int unquantize_i2r8(long row, /* tile number = row number in table  */
                 }
                 else
                 {
-                    output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+                    if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		        output[ii] = 0.0;
+		    else
+                        output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
                 }
 
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
-	            nextrand = (int) (fits_rand_value[iseed] * 500);
-                }
- 
+		    nextrand = (int) (fits_rand_value[iseed] * 500);
+	        }
             }
     }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -7073,6 +7612,7 @@ static int unquantize_i4r8(long row, /* tile number = row number in table    */
             long ntodo,           /* I - number of elements in the array     */
             double scale,         /* I - FITS TSCALn or BSCALE value         */
             double zero,          /* I - FITS TZEROn or BZERO  value         */
+            int dither_method,    /* I - dithering method to use             */
             int nullcheck,        /* I - null checking code; 0 = don't check */
                                   /*     1:set null pixels = nullval         */
                                   /*     2: if null pixel, set nullarray = 1 */
@@ -7100,14 +7640,17 @@ static int unquantize_i4r8(long row, /* tile number = row number in table    */
     {
             for (ii = 0; ii < ntodo; ii++)
             {
-                output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+                if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		    output[ii] = 0.0;
+		else
+                    output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
 
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
-	            nextrand = (int) (fits_rand_value[iseed] * 500);
-                }
+		    nextrand = (int) (fits_rand_value[iseed] * 500);
+	        }
             }
     }
     else        /* must check for null values */
@@ -7124,18 +7667,21 @@ static int unquantize_i4r8(long row, /* tile number = row number in table    */
                 }
                 else
                 {
-                    output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
+                    if (dither_method == SUBTRACTIVE_DITHER_2 && input[ii] == ZERO_VALUE)
+		        output[ii] = 0.0;
+		    else
+                        output[ii] = (double) (((double) input[ii] - fits_rand_value[nextrand] + 0.5) * scale + zero);
                 }
 
-                nextrand++;
-		if (nextrand == N_RANDOM) {
-                    iseed++;
+	        nextrand++;
+	        if (nextrand == N_RANDOM) {
+	            iseed++;
 		    if (iseed == N_RANDOM) iseed = 0;
-	            nextrand = (int) (fits_rand_value[iseed] * 500);
-                }
-
+		    nextrand = (int) (fits_rand_value[iseed] * 500);
+	        }
             }
     }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -7181,16 +7727,15 @@ static int imcomp_double2nan(double *indata,
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int fits_transpose_table(fitsfile *infptr, fitsfile *outfptr, int *status)
+int fits_compress_table_gzip(fitsfile *infptr, fitsfile *outfptr, int *status)
 
 /*
   Transpose the elements in the input table columns from row-major order into
-  column-major order, and write to the output table (which may be the same as
+  column-major order, then compress each column with gzip.
+  Write to the output table (which may be the same as
   the input table).   For example, a table with 10000 rows and 2 '1I' columns
   will be transformed into a 1 row table with 2 '10000I' columns.
   
-  In addition, compress each column of data and write as a 1-row variable length
-  array column.
 */
 { 
     LONGLONG nrows, incolwidth[999], inrepeat[999], outcolstart[1000], outbytespan[999];
@@ -7307,7 +7852,8 @@ int fits_transpose_table(fitsfile *infptr, fitsfile *outfptr, int *status)
     for (jj = 0; jj < nrows; jj++)   {    /* loop over rows */
       for (ii = 0; ii < ncols; ii++) {  /* loop over columns */
       
-	kk = 0;	
+        if (inrepeat[ii] > 0) {
+	    kk = 0;	
 
 	    cptr = buffer + (outcolstart[ii] + (jj * incolwidth[ii]));   /* addr to copy to */
 
@@ -7318,6 +7864,7 @@ int fits_transpose_table(fitsfile *infptr, fitsfile *outfptr, int *status)
 	    if (incolwidth[ii] >= MINDIRECT) { /* have to explicitly move to next byte */
 		ffmbyt(infptr, startbyte + incolwidth[ii], 0, status);
 	    }
+         }
       }
     }
 
@@ -7326,6 +7873,7 @@ int fits_transpose_table(fitsfile *infptr, fitsfile *outfptr, int *status)
     /* now compress each column with GZIP and write out to output table */
     for (ii = 0; ii < ncols; ii++) {  /* loop over columns */
 
+      if (inrepeat[ii] > 0) {
 	datasize = (size_t) (outcolstart[ii + 1] - outcolstart[ii]);
 
 	/* allocate memory for the compressed data */
@@ -7347,10 +7895,24 @@ int fits_transpose_table(fitsfile *infptr, fitsfile *outfptr, int *status)
         cratio[ii] = (float) datasize / (float) dlen;	
 	free(compressed_data);   /* don't need the compressed data any more */
 	
-	sprintf(results[ii]," %3d %10.10s %4d %c  %5.2f", ii+1, colname[ii], (int) inrepeat[ii],colcode[ii],cratio[ii]);
+	fits_make_keyn("ZCTYP", ii+1, keyname, status);
+	fits_write_key(outfptr, TSTRING, keyname, "GZIP_1",
+	     	     "compression algorithm for column", status);
+
+	sprintf(results[ii]," %3d %10.10s %6d%c  %6.2f", ii+1, colname[ii], (int) inrepeat[ii],colcode[ii],cratio[ii]);
 	trans_ratio[ii] = cratio[ii];
+      } else {
+        /* zero length vector column;  not compressed */
+	sprintf(results[ii]," %3d %10.10s %6d%c ", ii+1, colname[ii], (int) inrepeat[ii],colcode[ii]);
+      }
     }
 
+    fits_write_key(outfptr, TLOGICAL, "ZTABLE", &ltrue, 
+        "this is a compressed table", status);
+
+    fits_write_key(outfptr, TLONGLONG, "ZTILELEN", &nrows,
+          "number of rows in each tile", status);
+
     /* save the original PCOUNT value */
     fits_read_key(infptr, TLONG, "PCOUNT", &pcount, comm, status);
     fits_write_key(outfptr, TLONG, "ZPCOUNT", &pcount, comm, status);
@@ -7360,11 +7922,6 @@ int fits_transpose_table(fitsfile *infptr, fitsfile *outfptr, int *status)
     fits_write_key(outfptr, TLONGLONG, "ZNAXIS2", &nrows, "original number of rows",
 	status);
 
-    fits_write_key(outfptr, TLOGICAL, "TVIRTUAL", &ltrue, 
-        "this is a virtual table", status);
-    fits_write_key(outfptr, TSTRING, "ZMETHOD", "TRANSPOSED_SHUFFLED_GZIP",
-	   "table compression method", status);
-
     fits_set_hdustruc(outfptr, status);
 
     /* copy the heap from input to output file */
@@ -7394,13 +7951,19 @@ int fits_compress_table_rice(fitsfile *infptr, fitsfile *outfptr, int *status)
     LONGLONG nrows, incolwidth[999], inrepeat[999], outcolstart[1000], outbytespan[999];
     LONGLONG headstart, datastart, dataend, startbyte, jj, kk, naxis1;
     long repeat, width, pcount;
-    int ii, ncols, coltype, hdutype, ltrue = 1;
+    int ii, ncols, coltype, hdutype, ltrue = 1, print_report = 0;
     char *buffer, *cptr, keyname[9], tform[40], colcode[999], tempstring[20];
     char comm[FLEN_COMMENT], *compressed_data;
     float cratio[999];
     
     size_t dlen, datasize;
 
+    if (*status == -999) {
+       /* special flag  that means print out diagnostics */
+       print_report = 1;
+       *status = 0;
+    }
+
     if (*status > 0)
         return(*status);
     
@@ -7499,6 +8062,8 @@ int fits_compress_table_rice(fitsfile *infptr, fitsfile *outfptr, int *status)
     for (jj = 0; jj < nrows; jj++)   {    /* loop over rows */
       for (ii = 0; ii < ncols; ii++) {  /* loop over columns */
       
+       if (inrepeat[ii] > 0) {
+
 	kk = 0;	
 
 	switch (colcode[ii]) {
@@ -7551,6 +8116,7 @@ int fits_compress_table_rice(fitsfile *infptr, fitsfile *outfptr, int *status)
 		ffmbyt(infptr, startbyte + incolwidth[ii], 0, status);
 	    }
 	}
+       }
       }
     }
 
@@ -7558,6 +8124,8 @@ int fits_compress_table_rice(fitsfile *infptr, fitsfile *outfptr, int *status)
     
     for (ii = 0; ii < ncols; ii++) {  /* loop over columns */
 
+      if (inrepeat[ii] > 0) {
+
 	datasize = (size_t) (outcolstart[ii + 1] - outcolstart[ii]);
 	/* allocate memory for the compressed data */
 	compressed_data = malloc(datasize*2);
@@ -7610,11 +8178,21 @@ int fits_compress_table_rice(fitsfile *infptr, fitsfile *outfptr, int *status)
 		compress2mem_from_mem(buffer + outcolstart[ii], datasize,
 	    		&compressed_data,  &datasize, realloc, &dlen, status);        
 
-
 	  	fits_make_keyn("ZCTYP", ii+1, keyname, status);
-	  	fits_write_key(outfptr, TSTRING, keyname, "GZIP_2",
-	     	     "compression algorithm for column", status);
 
+	        switch (colcode[ii]) {
+		    case 'E':
+		    case 'D':
+		    case 'K':
+			fits_write_key(outfptr, TSTRING, keyname, "GZIP_2",
+	     	        "compression algorithm for column", status);
+		      break;
+
+		    default: 
+
+			fits_write_key(outfptr, TSTRING, keyname, "GZIP_1",
+	     	        "compression algorithm for column", status);
+		}
 	} /* end of switch block */
 
 	if (dlen != 0)
@@ -7623,25 +8201,32 @@ int fits_compress_table_rice(fitsfile *infptr, fitsfile *outfptr, int *status)
 	/* write the compressed data to the output column */
 	fits_set_tscale(outfptr, ii + 1, 1.0, 0.0, status);  /* turn off any data scaling, first */
 	fits_write_col(outfptr, TBYTE, ii + 1, 1, 1, dlen, compressed_data, status);
-	
 	free(compressed_data);   /* don't need the compressed data any more */
 /*	printf("   %c  %5.2f\n",colcode[ii],cratio[ii]); */
 
-	    sprintf(tempstring,"  %5.2f\n",cratio[ii]);
-/*
+
         if (colcode[ii] == 'I' || colcode[ii] == 'J' || colcode[ii] == 'B') 
-	    sprintf(tempstring,"  %5.2f\n",cratio[ii]);
+	    sprintf(tempstring,"  %6.2f\n",cratio[ii]);
 	else
 	    sprintf(tempstring," \n");	
-*/
+
 	strcat(results[ii],tempstring);
+      }
     }  /* end of loop over ncols */
 
-    printf("                       Trans   Shuf   Rice\n");
-    for (ii = 0; ii < ncols; ii++) {  /* loop over columns */
-      printf("%s", results[ii]);
+
+    if (print_report) {
+       printf("   Compression Ratios:    Gzip     Shuf    Rice\n");
+       for (ii = 0; ii < ncols; ii++) {  
+          printf("%s", results[ii]);
+       }
     }
-    
+
+    fits_write_key(outfptr, TLOGICAL, "ZTABLE", &ltrue, 
+        "this is a compressed table", status);
+    fits_write_key(outfptr, TLONGLONG, "ZTILELEN", &nrows,
+          "number of rows in each tile", status);
+
     /* save the original PCOUNT value */
     fits_read_key(infptr, TLONG, "PCOUNT", &pcount, comm, status);
     fits_write_key(outfptr, TLONG, "ZPCOUNT", &pcount, comm, status);
@@ -7652,9 +8237,6 @@ int fits_compress_table_rice(fitsfile *infptr, fitsfile *outfptr, int *status)
     fits_write_key(outfptr, TLONGLONG, "ZNAXIS2", &nrows, "original number of rows",
 	status);
 
-    fits_write_key(outfptr, TLOGICAL, "ZTABLE", &ltrue, 
-        "this is a compressed table", status);
-
     free(buffer);
 
     fits_gzip_heap(infptr, outfptr, status);
@@ -7663,7 +8245,7 @@ int fits_compress_table_rice(fitsfile *infptr, fitsfile *outfptr, int *status)
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int fits_compress_table_fast(fitsfile *infptr, fitsfile *outfptr, int *status)
+int fits_compress_table_shuffle(fitsfile *infptr, fitsfile *outfptr, int *status)
 
 /*
   Compress the input FITS binary table using the 'fast' method, which consists
@@ -7755,10 +8337,6 @@ int fits_compress_table_fast(fitsfile *infptr, fitsfile *outfptr, int *status)
        /* all columns are now VLAs */
 	fits_modify_key_str(outfptr, keyname, "1PB", "&", status);
 
- 	fits_make_keyn("ZCTYP", ii+1, keyname, status);
-	fits_write_key(outfptr, TSTRING, keyname, "GZIP_2",
-	     "compression algorithm for column", status);
-
         fits_binary_tform(tform, &coltype, &repeat, &width, status);
 
 	cptr = tform;
@@ -7800,6 +8378,7 @@ int fits_compress_table_fast(fitsfile *infptr, fitsfile *outfptr, int *status)
 
     for (jj = 0; jj < nrows; jj++)   {    /* loop over rows */
       for (ii = 0; ii < ncols; ii++) {  /* loop over columns */
+       if (inrepeat[ii] > 0) {
       
 	kk = 0;	
 
@@ -7866,6 +8445,7 @@ int fits_compress_table_fast(fitsfile *infptr, fitsfile *outfptr, int *status)
 		ffmbyt(infptr, startbyte + incolwidth[ii], 0, status);
 	    }
 	}
+       }
       }
     }
 
@@ -7873,6 +8453,7 @@ int fits_compress_table_fast(fitsfile *infptr, fitsfile *outfptr, int *status)
     
     /* now compress each column */
     for (ii = 0; ii < ncols; ii++) {  /* loop over columns */
+      if (inrepeat[ii] > 0) {
 
 	/* write the compression type code for this column */
 	switch (colcode[ii]) {
@@ -7912,9 +8493,10 @@ int fits_compress_table_fast(fitsfile *infptr, fitsfile *outfptr, int *status)
         cratio[ii] = (float) datasize / (float) dlen;	
 	free(compressed_data);   /* don't need the compressed data any more */
 
-	sprintf(tempstring,"  %5.2f",cratio[ii]);
+	sprintf(tempstring,"  %6.2f",cratio[ii]);
 
 	strcat(results[ii],tempstring);
+      }
     }
 
     free(buffer);
@@ -8063,6 +8645,7 @@ int fits_compress_table_best(fitsfile *infptr, fitsfile *outfptr, int *status)
     /* now transpose the rows and columns in the table into an array in memory */
     for (jj = 0; jj < nrows; jj++)   {    /* loop over rows */
         for (ii = 0; ii < ncols; ii++) {  /* loop over columns */
+          if (inrepeat[ii] > 0) {
       
 	    cptr = buffer + (outcolstart[ii] + (jj * incolwidth[ii])); /* output address */
 	    startbyte = (infptr->Fptr)->bytepos;  /* save the starting byte location */
@@ -8071,6 +8654,7 @@ int fits_compress_table_best(fitsfile *infptr, fitsfile *outfptr, int *status)
 	    if (incolwidth[ii] >= MINDIRECT) { /* have to explicitly move to next byte */
 		ffmbyt(infptr, startbyte + incolwidth[ii], 0, status);
 	    }
+          }
         }
     }
 
@@ -8081,6 +8665,8 @@ int fits_compress_table_best(fitsfile *infptr, fitsfile *outfptr, int *status)
     /* that gives the most compression. */
     for (ii = 0; ii < ncols; ii++) {  /* loop over columns */
 
+      if (inrepeat[ii] > 0) {
+
 	datasize = (size_t) (outcolstart[ii + 1] - outcolstart[ii]);
 
 	/* allocate memory for the gzip compressed data */
@@ -8242,6 +8828,7 @@ int fits_compress_table_best(fitsfile *infptr, fitsfile *outfptr, int *status)
 	if (gzip2_data) free(gzip2_data);   
 	gzip1_data = 0;
 	gzip2_data = 0;
+      }
     }
 
     free(buffer);
@@ -8270,7 +8857,7 @@ int fits_uncompress_table(fitsfile *infptr, fitsfile *outfptr, int *status)
     long  pcount, zheapptr, naxis1, naxis2, ii, jj;
     char *ptr, comm[FLEN_COMMENT], zvalue[FLEN_VALUE];
     size_t dlen, fullsize;
-    
+
     /**** do initial sanity checks *****/
     if (*status > 0)
         return(*status);
@@ -8385,7 +8972,6 @@ int fits_uncompress_table(fitsfile *infptr, fitsfile *outfptr, int *status)
     rmajor_colstart[0] = 0;
     cmajor_colstart[0] = 0;
     for (ii = 0; ii < ncols; ii++) {
-
 	/* get the original column type, repeat count, and unit width */
 	fits_make_keyn("ZFORM", ii+1, keyname, status);
 	fits_read_key(infptr, TSTRING, keyname, tform, comm, status);
@@ -8431,6 +9017,8 @@ int fits_uncompress_table(fitsfile *infptr, fitsfile *outfptr, int *status)
 	/* starting offset of each field in the  row-major table */
 	rmajor_colstart[ii + 1] = rmajor_colstart[ii] + rmajor_colwidth[ii];
 
+       if (rmajor_repeat[ii] > 0) {
+
 	/* read compressed bytes from input table */
 	fits_read_descript(infptr, ii + 1, 1, &vla_repeat, NULL, status);
 	
@@ -8497,12 +9085,15 @@ int fits_uncompress_table(fitsfile *infptr, fitsfile *outfptr, int *status)
 	} /* end of switch block */
 
 	free(ptr);
+      }
     }
 
     /* now transpose the rows and columns (from transbuffer to buffer) */
     ptr = transbuffer;
     for (ii = 0; ii < ncols; ii++) {  /* loop over columns */
 
+     if (rmajor_repeat[ii] > 0) {
+
       if ((zctype[ii] == GZIP_2)) {  /*  need to unshuffle the bytes */
 
 	switch (colcode[ii]) {
@@ -8677,7 +9268,7 @@ int fits_uncompress_table(fitsfile *infptr, fitsfile *outfptr, int *status)
 	    ptr += (rmajor_colwidth[ii]);
 	  }
       }
-
+     }
     }  /* end of ncols loop */
 
     /* copy the buffer of data to the output data unit */
@@ -8695,7 +9286,6 @@ int fits_uncompress_table(fitsfile *infptr, fitsfile *outfptr, int *status)
 
     return(*status);
 }
-
 /*--------------------------------------------------------------------------*/
 int fits_gzip_datablocks(fitsfile *fptr, size_t *size, int *status)
 /*
diff --git a/cextern/cfitsio/iraffits.c b/cextern/cfitsio/iraffits.c
index d8fc06b..bbf8a11 100644
--- a/cextern/cfitsio/iraffits.c
+++ b/cextern/cfitsio/iraffits.c
@@ -117,12 +117,12 @@ static int irafgeti4(char *irafheader, int offset);
 static char *irafgetc2(char *irafheader, int offset, int nc);
 static char *irafgetc(char *irafheader,	int offset, int	nc);
 static char *iraf2str(char *irafstring, int nchar);
-static char *irafrdhead(char *filename, int *lihead);
+static char *irafrdhead(const char *filename, int *lihead);
 static int irafrdimage (char **buffptr, size_t *buffsize,
     size_t *filesize, int *status);
 static int iraftofits (char *hdrname, char *irafheader, int nbiraf,
     char **buffptr, size_t *nbfits, size_t *fitssize, int *status);
-static char *same_path(char *pixname, char *hdrname);
+static char *same_path(char *pixname, const char *hdrname);
 
 static int swaphead=0;	/* =1 to swap data bytes of IRAF header values */
 static int swapdata=0;  /* =1 to swap bytes in IRAF data pixels */
@@ -147,15 +147,15 @@ static void hputs(char* hstring,char* keyword,char* cval);
 static void hputcom(char* hstring,char* keyword,char* comment);
 static void hputl(char* hstring,char* keyword,int lval);
 static void hputc(char* hstring,char* keyword,char* cval);
-static int getirafpixname (char *hdrname, char *irafheader, char *pixfilename, int *status);
+static int getirafpixname (const char *hdrname, char *irafheader, char *pixfilename, int *status);
 int iraf2mem(char *filename, char **buffptr, size_t *buffsize, 
       size_t *filesize, int *status);
 
 void ffpmsg(const char *err_message);
 
 /*--------------------------------------------------------------------------*/
-int fits_delete_iraf_file(char *filename,     /* name of input file                 */
-             int *status)        /* IO - error status                       */
+int fits_delete_iraf_file(const char *filename,  /* name of input file      */
+             int *status)                        /* IO - error status       */
 
 /*
    Delete the iraf .imh header file and the associated .pix data file
@@ -242,8 +242,8 @@ int iraf2mem(char *filename,     /* name of input file                 */
  */
 
 static char *irafrdhead (
-    char *filename,   /* Name of IRAF header file */
-    int *lihead)     /* Length of IRAF image header in bytes (returned) */
+    const char *filename,  /* Name of IRAF header file */
+    int *lihead)           /* Length of IRAF image header in bytes (returned) */
 {
     FILE *fd;
     int nbr;
@@ -877,7 +877,7 @@ static int iraftofits (
 /* get the IRAF pixel file name */
 
 static int getirafpixname (
-    char    *hdrname,  /* IRAF header file name (may be path) */
+    const char *hdrname,  /* IRAF header file name (may be path) */
     char    *irafheader,  /* IRAF image header */
     char    *pixfilename,     /* IRAF pixel file name */
     int     *status)
@@ -931,7 +931,7 @@ static int getirafpixname (
 static char *same_path (
 
 char	*pixname,	/* IRAF pixel file pathname */
-char	*hdrname)	/* IRAF image header file pathname */
+const char	*hdrname)	/* IRAF image header file pathname */
 
 {
     int len;
diff --git a/cextern/cfitsio/longnam.h b/cextern/cfitsio/longnam.h
index cac8da4..81a6a4f 100644
--- a/cextern/cfitsio/longnam.h
+++ b/cextern/cfitsio/longnam.h
@@ -15,11 +15,11 @@
 #define fits_open_memfile   ffomem
 
 /* 
-   use the following special macro to test that the fitsio.h include
-   file that was used to build the CFITSIO library is the same version
+   use the following special macro to test that the fitsio.h include file
+   that was used to build the CFITSIO library is compatible with the version
    as included when compiling the application program
 */
-#define fits_open_file(A, B, C, D)  ffopentest( CFITSIO_VERSION, A, B, C, D)
+#define fits_open_file(A, B, C, D)  ffopentest( CFITSIO_SONAME, A, B, C, D)
 
 #define fits_open_data      ffdopn
 #define fits_open_table     fftopn
@@ -53,6 +53,7 @@
 #define fits_null_check     ffnchk
 #define fits_make_keyn      ffkeyn
 #define fits_make_nkey      ffnkey
+#define fits_make_key       ffmkky
 #define fits_get_keyclass   ffgkcl
 #define fits_get_keytype    ffdtyp
 #define fits_get_inttype    ffinttyp
diff --git a/cextern/cfitsio/modkey.c b/cextern/cfitsio/modkey.c
index e6fe03a..03357e2 100644
--- a/cextern/cfitsio/modkey.c
+++ b/cextern/cfitsio/modkey.c
@@ -14,9 +14,9 @@
 /*--------------------------------------------------------------------------*/
 int ffuky( fitsfile *fptr,     /* I - FITS file pointer        */
            int  datatype,      /* I - datatype of the value    */
-           const char *keyname,      /* I - name of keyword to write */
+           const char *keyname,/* I - name of keyword to write */
            void *value,        /* I - keyword value            */
-           char *comm,         /* I - keyword comment          */
+           const char *comm,   /* I - keyword comment          */
            int  *status)       /* IO - error status            */
 /*
   Update the keyword, value and comment in the FITS header.
@@ -94,10 +94,10 @@ int ffuky( fitsfile *fptr,     /* I - FITS file pointer        */
     return(*status);
 } 
 /*--------------------------------------------------------------------------*/
-int ffukyu(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffukyu(fitsfile *fptr,      /* I - FITS file pointer  */
+           const char *keyname, /* I - keyword name       */
+           const char *comm,    /* I - keyword comment    */
+           int *status)         /* IO - error status      */
 {
     int tstatus;
 
@@ -114,11 +114,11 @@ int ffukyu(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffukys(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           char *value,       /* I - keyword value      */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */ 
+int ffukys(fitsfile *fptr,       /* I - FITS file pointer  */
+           const char *keyname,  /* I - keyword name       */
+           const char *value,    /* I - keyword value      */
+           const char *comm,     /* I - keyword comment    */
+           int *status)          /* IO - error status      */ 
 {
     int tstatus;
 
@@ -135,11 +135,11 @@ int ffukys(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffukls(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           char *value,       /* I - keyword value      */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */ 
+int ffukls(fitsfile *fptr,      /* I - FITS file pointer  */
+           const char *keyname, /* I - keyword name       */
+           const char *value,   /* I - keyword value      */
+           const char *comm,    /* I - keyword comment    */
+           int *status)         /* IO - error status      */ 
 {
     /* update a long string keyword */
 
@@ -161,11 +161,11 @@ int ffukls(fitsfile *fptr,    /* I - FITS file pointer  */
     }
     return(*status);
 }/*--------------------------------------------------------------------------*/
-int ffukyl(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           int value,         /* I - keyword value      */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffukyl(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           int value,          /* I - keyword value      */
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     int tstatus;
 
@@ -182,11 +182,11 @@ int ffukyl(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffukyj(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           LONGLONG value,    /* I - keyword value      */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffukyj(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           LONGLONG value,     /* I - keyword value      */
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     int tstatus;
 
@@ -203,12 +203,12 @@ int ffukyj(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffukyf(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           float value,       /* I - keyword value      */
-           int decim,         /* I - no of decimals     */         
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffukyf(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           float value,        /* I - keyword value      */
+           int decim,          /* I - no of decimals     */         
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     int tstatus;
 
@@ -225,12 +225,12 @@ int ffukyf(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffukye(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           float value,       /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffukye(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           float value,        /* I - keyword value      */
+           int decim,          /* I - no of decimals     */
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     int tstatus;
 
@@ -247,12 +247,12 @@ int ffukye(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffukyg(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           double value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffukyg(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           double value,       /* I - keyword value      */
+           int decim,          /* I - no of decimals     */
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     int tstatus;
 
@@ -269,12 +269,12 @@ int ffukyg(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffukyd(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           double value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffukyd(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           double value,       /* I - keyword value      */
+           int decim,          /* I - no of decimals     */
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     int tstatus;
 
@@ -291,12 +291,12 @@ int ffukyd(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffukfc(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           float *value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */         
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffukfc(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           float *value,       /* I - keyword value      */
+           int decim,          /* I - no of decimals     */         
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     int tstatus;
 
@@ -313,12 +313,12 @@ int ffukfc(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffukyc(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           float *value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffukyc(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           float *value,       /* I - keyword value      */
+           int decim,          /* I - no of decimals     */
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     int tstatus;
 
@@ -335,12 +335,12 @@ int ffukyc(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffukfm(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           double *value,     /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffukfm(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           double *value,      /* I - keyword value      */
+           int decim,          /* I - no of decimals     */
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     int tstatus;
 
@@ -357,12 +357,12 @@ int ffukfm(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffukym(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           double *value,     /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffukym(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           double *value,      /* I - keyword value      */
+           int decim,          /* I - no of decimals     */
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     int tstatus;
 
@@ -379,10 +379,10 @@ int ffukym(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffucrd(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           char *card,        /* I - card string value  */
-           int *status)       /* IO - error status      */
+int ffucrd(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           const char *card,   /* I - card string value  */
+           int *status)        /* IO - error status      */
 {
     int tstatus;
 
@@ -401,7 +401,7 @@ int ffucrd(fitsfile *fptr,    /* I - FITS file pointer  */
 /*--------------------------------------------------------------------------*/
 int ffmrec(fitsfile *fptr,    /* I - FITS file pointer               */
            int nkey,          /* I - number of the keyword to modify */
-           char *card,        /* I - card string value               */
+           const char *card,  /* I - card string value               */
            int *status)       /* IO - error status                   */
 {
     if (*status > 0)           /* inherit input status value if > 0 */
@@ -412,10 +412,10 @@ int ffmrec(fitsfile *fptr,    /* I - FITS file pointer               */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmcrd(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           char *card,        /* I - card string value  */
-           int *status)       /* IO - error status      */
+int ffmcrd(fitsfile *fptr,      /* I - FITS file pointer  */
+           const char *keyname, /* I - keyword name       */
+           const char *card,    /* I - card string value  */
+           int *status)         /* IO - error status      */
 {
     char tcard[FLEN_CARD], valstring[FLEN_CARD], comm[FLEN_CARD], value[FLEN_CARD];
     int keypos, len;
@@ -433,12 +433,22 @@ int ffmcrd(fitsfile *fptr,    /* I - FITS file pointer  */
 
     ffpsvc(tcard, valstring, comm, status);
 
+    if (*status > 0)           /* inherit input status value if > 0 */
+        return(*status);
+
     /* check for string value which may be continued over multiple keywords */
+    ffpmrk(); /* put mark on message stack; erase any messages after this */
     ffc2s(valstring, value, status);   /* remove quotes and trailing spaces */
-    len = strlen(value);
 
-    while (len && value[len - 1] == '&')  /* ampersand used as continuation char */
-    {
+    if (*status == VALUE_UNDEFINED) {
+       ffcmrk();  /* clear any spurious error messages, back to the mark */
+       *status = 0;
+    } else {
+ 
+      len = strlen(value);
+
+      while (len && value[len - 1] == '&')  /* ampersand used as continuation char */
+      {
         ffgcnt(fptr, value, status);
         if (*value)
         {
@@ -447,15 +457,16 @@ int ffmcrd(fitsfile *fptr,    /* I - FITS file pointer  */
         }
         else   /* a null valstring indicates no continuation */
             len = 0;
+      }
     }
 
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmnam(fitsfile *fptr,    /* I - FITS file pointer     */
-           const char *oldname,     /* I - existing keyword name */
-           const char *newname,     /* I - new name for keyword  */
-           int *status)       /* IO - error status         */
+int ffmnam(fitsfile *fptr,     /* I - FITS file pointer     */
+           const char *oldname,/* I - existing keyword name */
+           const char *newname,/* I - new name for keyword  */
+           int *status)        /* IO - error status         */
 {
     char comm[FLEN_COMMENT];
     char value[FLEN_VALUE];
@@ -473,10 +484,10 @@ int ffmnam(fitsfile *fptr,    /* I - FITS file pointer     */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmcom(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffmcom(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     char oldcomm[FLEN_COMMENT];
     char value[FLEN_VALUE];
@@ -494,10 +505,10 @@ int ffmcom(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffpunt(fitsfile *fptr,    /* I - FITS file pointer   */
-           const char *keyname,     /* I - keyword name        */
-           char *unit,        /* I - keyword unit string */
-           int *status)       /* IO - error status       */
+int ffpunt(fitsfile *fptr,     /* I - FITS file pointer   */
+           const char *keyname,/* I - keyword name        */
+           const char *unit,   /* I - keyword unit string */
+           int *status)        /* IO - error status       */
 /*
     Write (put) the units string into the comment field of the existing
     keyword. This routine uses a local FITS convention (not defined in the
@@ -562,10 +573,10 @@ int ffpunt(fitsfile *fptr,    /* I - FITS file pointer   */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkyu(fitsfile *fptr,    /* I - FITS file pointer  */
-           const char *keyname,     /* I - keyword name       */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+int ffmkyu(fitsfile *fptr,     /* I - FITS file pointer  */
+           const char *keyname,/* I - keyword name       */
+           const char *comm,   /* I - keyword comment    */
+           int *status)        /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char oldcomm[FLEN_COMMENT];
@@ -589,11 +600,11 @@ int ffmkyu(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkys(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffmkys(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           char *value,       /* I - keyword value      */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           const char *value,       /* I - keyword value      */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
   /* NOTE: This routine does not support long continued strings */
   /*  It will correctly overwrite an existing long continued string, */
@@ -621,12 +632,22 @@ int ffmkys(fitsfile *fptr,    /* I - FITS file pointer  */
 
     keypos = (int) (((((fptr->Fptr)->nextkey) - ((fptr->Fptr)->headstart[(fptr->Fptr)->curhdu])) / 80) + 1);
 
+    if (*status > 0)           
+        return(*status);
+
     /* check if old string value was continued over multiple keywords */
+    ffpmrk(); /* put mark on message stack; erase any messages after this */
     ffc2s(oldval, valstring, status); /* remove quotes and trailing spaces */
-    len = strlen(valstring);
 
-    while (len && valstring[len - 1] == '&')  /* ampersand is continuation char */
-    {
+    if (*status == VALUE_UNDEFINED) {
+       ffcmrk();  /* clear any spurious error messages, back to the mark */
+       *status = 0;
+    } else {
+        
+      len = strlen(valstring);
+
+      while (len && valstring[len - 1] == '&')  /* ampersand is continuation char */
+      {
         ffgcnt(fptr, valstring, status);
         if (*valstring)
         {
@@ -635,15 +656,17 @@ int ffmkys(fitsfile *fptr,    /* I - FITS file pointer  */
         }
         else   /* a null valstring indicates no continuation */
             len = 0;
+      }
     }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkls( fitsfile *fptr,     /* I - FITS file pointer        */
+int ffmkls( fitsfile *fptr,           /* I - FITS file pointer        */
             const char *keyname,      /* I - name of keyword to write */
-            char *value,        /* I - keyword value            */
-            char *incomm,       /* I - keyword comment          */
-            int  *status)       /* IO - error status            */
+            const char *value,        /* I - keyword value            */
+            const char *incomm,       /* I - keyword comment          */
+            int  *status)             /* IO - error status            */
 /*
   Modify the value and optionally the comment of a long string keyword.
   This routine supports the
@@ -776,11 +799,11 @@ int ffmkls( fitsfile *fptr,     /* I - FITS file pointer        */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkyl(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffmkyl(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           int value,         /* I - keyword value      */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           int value,               /* I - keyword value      */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char oldcomm[FLEN_COMMENT];
@@ -804,11 +827,11 @@ int ffmkyl(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkyj(fitsfile *fptr,   /* I - FITS file pointer  */
+int ffmkyj(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           LONGLONG value,    /* I - keyword value      */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           LONGLONG value,          /* I - keyword value      */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char oldcomm[FLEN_COMMENT];
@@ -832,12 +855,12 @@ int ffmkyj(fitsfile *fptr,   /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkyf(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffmkyf(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           float value,       /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           float value,             /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char oldcomm[FLEN_COMMENT];
@@ -861,12 +884,12 @@ int ffmkyf(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkye(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffmkye(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           float value,       /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           float value,             /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char oldcomm[FLEN_COMMENT];
@@ -890,12 +913,12 @@ int ffmkye(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkyg(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffmkyg(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           double value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           double value,            /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char oldcomm[FLEN_COMMENT];
@@ -919,12 +942,12 @@ int ffmkyg(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkyd(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffmkyd(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           double value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           double value,            /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char oldcomm[FLEN_COMMENT];
@@ -948,12 +971,12 @@ int ffmkyd(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkfc(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffmkfc(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           float *value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           float *value,            /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE], tmpstring[FLEN_VALUE];
     char oldcomm[FLEN_COMMENT];
@@ -983,12 +1006,12 @@ int ffmkfc(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkyc(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffmkyc(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           float *value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           float *value,            /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE], tmpstring[FLEN_VALUE];
     char oldcomm[FLEN_COMMENT];
@@ -1018,12 +1041,12 @@ int ffmkyc(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffmkfm(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffmkfm(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           double *value,     /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           double *value,           /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE], tmpstring[FLEN_VALUE];
     char oldcomm[FLEN_COMMENT];
@@ -1057,7 +1080,7 @@ int ffmkym(fitsfile *fptr,    /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
            double *value,     /* I - keyword value      */
            int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */
+           const char *comm,        /* I - keyword comment    */
            int *status)       /* IO - error status      */
 {
     char valstring[FLEN_VALUE], tmpstring[FLEN_VALUE];
@@ -1088,10 +1111,10 @@ int ffmkym(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikyu(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikyu(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 /*
   Insert a null-valued keyword and comment into the FITS header.  
 */
@@ -1109,11 +1132,11 @@ int ffikyu(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikys(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikys(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           char *value,       /* I - keyword value      */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           const char *value,       /* I - keyword value      */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char card[FLEN_CARD];
@@ -1128,11 +1151,11 @@ int ffikys(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikls( fitsfile *fptr,     /* I - FITS file pointer        */
+int ffikls( fitsfile *fptr,           /* I - FITS file pointer        */
             const char *keyname,      /* I - name of keyword to write */
-            char *value,        /* I - keyword value            */
-            char *comm,         /* I - keyword comment          */
-            int  *status)       /* IO - error status            */
+            const char *value,        /* I - keyword value            */
+            const char *comm,         /* I - keyword comment          */
+            int  *status)             /* IO - error status            */
 /*
   Insert a long string keyword.  This routine supports the
   HEASARC long string convention and can insert arbitrarily long string
@@ -1234,11 +1257,11 @@ int ffikls( fitsfile *fptr,     /* I - FITS file pointer        */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikyl(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikyl(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           int value,         /* I - keyword value      */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           int value,               /* I - keyword value      */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char card[FLEN_CARD];
@@ -1253,11 +1276,11 @@ int ffikyl(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikyj(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikyj(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           LONGLONG value,    /* I - keyword value      */
-           char *comm,        /* I - keyword comment    */
-           int *status)       /* IO - error status      */
+           LONGLONG value,          /* I - keyword value      */
+           const char *comm,        /* I - keyword comment    */
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char card[FLEN_CARD];
@@ -1272,12 +1295,12 @@ int ffikyj(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikyf(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikyf(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           float value,       /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */ 
-           int *status)       /* IO - error status      */
+           float value,             /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */ 
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char card[FLEN_CARD];
@@ -1289,15 +1312,15 @@ int ffikyf(fitsfile *fptr,    /* I - FITS file pointer  */
     ffmkky(keyname, valstring, comm, card, status);  /* construct the keyword*/
     ffikey(fptr, card, status);  /* write the keyword*/
 
-    return(*status);
+    return(*status); 
 }
 /*--------------------------------------------------------------------------*/
-int ffikye(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikye(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           float value,       /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */ 
-           int *status)       /* IO - error status      */
+           float value,             /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */ 
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char card[FLEN_CARD];
@@ -1312,12 +1335,12 @@ int ffikye(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikyg(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikyg(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           double value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */ 
-           int *status)       /* IO - error status      */
+           double value,            /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */ 
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char card[FLEN_CARD];
@@ -1332,12 +1355,12 @@ int ffikyg(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikyd(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikyd(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           double value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */ 
-           int *status)       /* IO - error status      */
+           double value,            /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */ 
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE];
     char card[FLEN_CARD];
@@ -1352,12 +1375,12 @@ int ffikyd(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikfc(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikfc(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           float *value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */ 
-           int *status)       /* IO - error status      */
+           float *value,            /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */ 
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE], tmpstring[FLEN_VALUE];
     char card[FLEN_CARD];
@@ -1379,12 +1402,12 @@ int ffikfc(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikyc(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikyc(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           float *value,      /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */ 
-           int *status)       /* IO - error status      */
+           float *value,            /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */ 
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE], tmpstring[FLEN_VALUE];
     char card[FLEN_CARD];
@@ -1406,12 +1429,12 @@ int ffikyc(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikfm(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikfm(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           double *value,     /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */ 
-           int *status)       /* IO - error status      */
+           double *value,           /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */ 
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE], tmpstring[FLEN_VALUE];
     char card[FLEN_CARD];
@@ -1434,12 +1457,12 @@ int ffikfm(fitsfile *fptr,    /* I - FITS file pointer  */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffikym(fitsfile *fptr,    /* I - FITS file pointer  */
+int ffikym(fitsfile *fptr,          /* I - FITS file pointer  */
            const char *keyname,     /* I - keyword name       */
-           double *value,     /* I - keyword value      */
-           int decim,         /* I - no of decimals     */
-           char *comm,        /* I - keyword comment    */ 
-           int *status)       /* IO - error status      */
+           double *value,           /* I - keyword value      */
+           int decim,               /* I - no of decimals     */
+           const char *comm,        /* I - keyword comment    */ 
+           int *status)             /* IO - error status      */
 {
     char valstring[FLEN_VALUE], tmpstring[FLEN_VALUE];
     char card[FLEN_CARD];
@@ -1463,7 +1486,7 @@ int ffikym(fitsfile *fptr,    /* I - FITS file pointer  */
 /*--------------------------------------------------------------------------*/
 int ffirec(fitsfile *fptr,    /* I - FITS file pointer              */
            int nkey,          /* I - position to insert new keyword */
-           char *card,        /* I - card string value              */
+           const char *card,  /* I - card string value              */
            int *status)       /* IO - error status                  */
 {
     if (*status > 0)           /* inherit input status value if > 0 */
@@ -1476,7 +1499,7 @@ int ffirec(fitsfile *fptr,    /* I - FITS file pointer              */
 }
 /*--------------------------------------------------------------------------*/
 int ffikey(fitsfile *fptr,    /* I - FITS file pointer  */
-           char *card,        /* I - card string value  */
+           const char *card,  /* I - card string value  */
            int *status)       /* IO - error status      */
 /*
   insert a keyword at the position of (fptr->Fptr)->nextkey
@@ -1579,12 +1602,22 @@ int ffdkey(fitsfile *fptr,    /* I - FITS file pointer  */
 
     ffdrec(fptr, keypos, status);  /* delete the keyword */
 
+    if (*status > 0)           /* inherit input status value if > 0 */
+        return(*status);
+
     /* check for string value which may be continued over multiple keywords */
+    ffpmrk(); /* put mark on message stack; erase any messages after this */
     ffc2s(valstring, value, status);   /* remove quotes and trailing spaces */
-    len = strlen(value);
 
-    while (len && value[len - 1] == '&')  /* ampersand used as continuation char */
-    {
+    if (*status == VALUE_UNDEFINED) {
+       ffcmrk();  /* clear any spurious error messages, back to the mark */
+       *status = 0;
+    } else {
+ 
+      len = strlen(value);
+
+      while (len && value[len - 1] == '&')  /* ampersand used as continuation char */
+      {
         ffgcnt(fptr, value, status);
         if (*value)
         {
@@ -1593,7 +1626,9 @@ int ffdkey(fitsfile *fptr,    /* I - FITS file pointer  */
         }
         else   /* a null valstring indicates no continuation */
             len = 0;
+      }
     }
+
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
@@ -1626,11 +1661,23 @@ int ffdstr(fitsfile *fptr,    /* I - FITS file pointer  */
 
         /* check for string value which may be continued over multiple keywords */
     ffpsvc(card, valstring, comm, status);
+
+    if (*status > 0)           /* inherit input status value if > 0 */
+        return(*status);
+
+    /* check for string value which may be continued over multiple keywords */
+    ffpmrk(); /* put mark on message stack; erase any messages after this */
     ffc2s(valstring, value, status);   /* remove quotes and trailing spaces */
-    len = strlen(value);
 
-    while (len && value[len - 1] == '&')  /* ampersand used as continuation char */
-    {
+    if (*status == VALUE_UNDEFINED) {
+       ffcmrk();  /* clear any spurious error messages, back to the mark */
+       *status = 0;
+    } else {
+ 
+      len = strlen(value);
+
+      while (len && value[len - 1] == '&')  /* ampersand used as continuation char */
+      {
         ffgcnt(fptr, value, status);
         if (*value)
         {
@@ -1639,7 +1686,9 @@ int ffdstr(fitsfile *fptr,    /* I - FITS file pointer  */
         }
         else   /* a null valstring indicates no continuation */
             len = 0;
+      }
     }
+
     return(*status);
 }/*--------------------------------------------------------------------------*/
 int ffdrec(fitsfile *fptr,   /* I - FITS file pointer  */
diff --git a/cextern/cfitsio/putcolb.c b/cextern/cfitsio/putcolb.c
index 120cca8..8b96202 100644
--- a/cextern/cfitsio/putcolb.c
+++ b/cextern/cfitsio/putcolb.c
@@ -356,10 +356,10 @@ int ffpclb( fitsfile *fptr,  /* I - FITS file pointer                       */
   and will be inverse-scaled by the FITS TSCALn and TZEROn values if necessary.
 */
 {
-    int tcode, maxelem, hdutype, writeraw;
+    int tcode, maxelem2, hdutype, writeraw;
     long twidth, incre;
     long  ntodo;
-    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull;
+    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull, maxelem;
     double scale, zero;
     char tform[20], cform[20];
     char message[FLEN_ERRMSG];
@@ -378,9 +378,10 @@ int ffpclb( fitsfile *fptr,  /* I - FITS file pointer                       */
     /*  Check input and get parameters about the column: */
     /*---------------------------------------------------*/
     if (ffgcprll( fptr, colnum, firstrow, firstelem, nelem, 1, &scale, &zero,
-        tform, &twidth, &tcode, &maxelem, &startpos,  &elemnum, &incre,
+        tform, &twidth, &tcode, &maxelem2, &startpos,  &elemnum, &incre,
         &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0)
         return(*status);
+    maxelem = maxelem2;
 
     if (tcode == TSTRING)   
          ffcfmt(tform, cform);     /* derive C format for writing strings */
@@ -395,7 +396,7 @@ int ffpclb( fitsfile *fptr,  /* I - FITS file pointer                       */
     if (scale == 1. && zero == 0. && tcode == TBYTE)
     {
         writeraw = 1;
-        maxelem = (int) nelem;  /* we can write the entire array at one time */
+        maxelem = nelem;  /* we can write the entire array at one time */
     }
     else
         writeraw = 0;
diff --git a/cextern/cfitsio/putcold.c b/cextern/cfitsio/putcold.c
index b0c135a..8291367 100644
--- a/cextern/cfitsio/putcold.c
+++ b/cextern/cfitsio/putcold.c
@@ -354,10 +354,10 @@ int ffpcld( fitsfile *fptr,  /* I - FITS file pointer                       */
   and will be inverse-scaled by the FITS TSCALn and TZEROn values if necessary.
 */
 {
-    int tcode, maxelem, hdutype, writeraw;
+    int tcode, maxelem2, hdutype, writeraw;
     long twidth, incre;
     long ntodo;
-    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull;
+    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull, maxelem;
     double scale, zero;
     char tform[20], cform[20];
     char message[FLEN_ERRMSG];
@@ -376,9 +376,10 @@ int ffpcld( fitsfile *fptr,  /* I - FITS file pointer                       */
     /*  Check input and get parameters about the column: */
     /*---------------------------------------------------*/
     if (ffgcprll( fptr, colnum, firstrow, firstelem, nelem, 1, &scale, &zero,
-        tform, &twidth, &tcode, &maxelem, &startpos,  &elemnum, &incre,
+        tform, &twidth, &tcode, &maxelem2, &startpos,  &elemnum, &incre,
         &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0)
         return(*status);
+    maxelem = maxelem2;
 
     if (tcode == TSTRING)   
          ffcfmt(tform, cform);     /* derive C format for writing strings */
@@ -394,7 +395,7 @@ int ffpcld( fitsfile *fptr,  /* I - FITS file pointer                       */
        MACHINE == NATIVE && tcode == TDOUBLE)
     {
         writeraw = 1;
-        maxelem = (int) nelem;  /* we can write the entire array at one time */
+        maxelem = nelem;  /* we can write the entire array at one time */
     }
     else
         writeraw = 0;
diff --git a/cextern/cfitsio/putcole.c b/cextern/cfitsio/putcole.c
index c13f04c..af9aa86 100644
--- a/cextern/cfitsio/putcole.c
+++ b/cextern/cfitsio/putcole.c
@@ -368,10 +368,10 @@ int ffpcle( fitsfile *fptr,  /* I - FITS file pointer                       */
   and will be inverse-scaled by the FITS TSCALn and TZEROn values if necessary.
 */
 {
-    int tcode, maxelem, hdutype, writeraw;
+    int tcode, maxelem2, hdutype, writeraw;
     long twidth, incre;
     long ntodo;
-    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull;
+    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull, maxelem;
     double scale, zero;
     char tform[20], cform[20];
     char message[FLEN_ERRMSG];
@@ -390,9 +390,10 @@ int ffpcle( fitsfile *fptr,  /* I - FITS file pointer                       */
     /*  Check input and get parameters about the column: */
     /*---------------------------------------------------*/
     if (ffgcprll( fptr, colnum, firstrow, firstelem, nelem, 1, &scale, &zero,
-        tform, &twidth, &tcode, &maxelem, &startpos,  &elemnum, &incre,
+        tform, &twidth, &tcode, &maxelem2, &startpos,  &elemnum, &incre,
         &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0)
         return(*status);
+    maxelem = maxelem2;
 
     if (tcode == TSTRING)   
          ffcfmt(tform, cform);     /* derive C format for writing strings */
@@ -408,7 +409,7 @@ int ffpcle( fitsfile *fptr,  /* I - FITS file pointer                       */
        MACHINE == NATIVE && tcode == TFLOAT)
     {
         writeraw = 1;
-        maxelem = (int) nelem;  /* we can write the entire array at one time */
+        maxelem = nelem;  /* we can write the entire array at one time */
     }
     else
         writeraw = 0;
diff --git a/cextern/cfitsio/putcoli.c b/cextern/cfitsio/putcoli.c
index bddc459..9a623f9 100644
--- a/cextern/cfitsio/putcoli.c
+++ b/cextern/cfitsio/putcoli.c
@@ -355,10 +355,10 @@ int ffpcli( fitsfile *fptr,  /* I - FITS file pointer                       */
   and will be inverse-scaled by the FITS TSCALn and TZEROn values if necessary.
 */
 {
-    int tcode, maxelem, hdutype, writeraw;
+    int tcode, maxelem2, hdutype, writeraw;
     long twidth, incre;
     long ntodo;
-    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull;
+    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull, maxelem;
     double scale, zero;
     char tform[20], cform[20];
     char message[FLEN_ERRMSG];
@@ -377,9 +377,10 @@ int ffpcli( fitsfile *fptr,  /* I - FITS file pointer                       */
     /*  Check input and get parameters about the column: */
     /*---------------------------------------------------*/
     if (ffgcprll( fptr, colnum, firstrow, firstelem, nelem, 1, &scale, &zero,
-        tform, &twidth, &tcode, &maxelem, &startpos,  &elemnum, &incre,
+        tform, &twidth, &tcode, &maxelem2, &startpos,  &elemnum, &incre,
         &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0)
         return(*status);
+    maxelem = maxelem2;
 
     if (tcode == TSTRING)   
          ffcfmt(tform, cform);     /* derive C format for writing strings */
@@ -395,7 +396,7 @@ int ffpcli( fitsfile *fptr,  /* I - FITS file pointer                       */
        MACHINE == NATIVE && tcode == TSHORT)
     {
         writeraw = 1;
-        maxelem = (int) nelem;  /* we can write the entire array at one time */
+        maxelem = nelem;  /* we can write the entire array at one time */
     }
     else
         writeraw = 0;
diff --git a/cextern/cfitsio/putcolj.c b/cextern/cfitsio/putcolj.c
index b7f6713..57b1777 100644
--- a/cextern/cfitsio/putcolj.c
+++ b/cextern/cfitsio/putcolj.c
@@ -355,10 +355,10 @@ int ffpclj( fitsfile *fptr,  /* I - FITS file pointer                       */
   and will be inverse-scaled by the FITS TSCALn and TZEROn values if necessary.
 */
 {
-    int tcode, maxelem, hdutype, writeraw;
+    int tcode, maxelem2, hdutype, writeraw;
     long twidth, incre;
     long ntodo;
-    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull;
+    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull, maxelem;
     double scale, zero;
     char tform[20], cform[20];
     char message[FLEN_ERRMSG];
@@ -377,9 +377,10 @@ int ffpclj( fitsfile *fptr,  /* I - FITS file pointer                       */
     /*  Check input and get parameters about the column: */
     /*---------------------------------------------------*/
     if (ffgcprll( fptr, colnum, firstrow, firstelem, nelem, 1, &scale, &zero,
-        tform, &twidth, &tcode, &maxelem, &startpos,  &elemnum, &incre,
+        tform, &twidth, &tcode, &maxelem2, &startpos,  &elemnum, &incre,
         &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0)
         return(*status);
+    maxelem = maxelem2;
 
     if (tcode == TSTRING)   
          ffcfmt(tform, cform);     /* derive C format for writing strings */
@@ -395,7 +396,7 @@ int ffpclj( fitsfile *fptr,  /* I - FITS file pointer                       */
        MACHINE == NATIVE && tcode == TLONG && LONGSIZE == 32)
     {
         writeraw = 1;
-        maxelem = (int) nelem;  /* we can write the entire array at one time */
+        maxelem = nelem;  /* we can write the entire array at one time */
     }
     else
         writeraw = 0;
@@ -1336,10 +1337,10 @@ int ffpcljj(fitsfile *fptr,  /* I - FITS file pointer                       */
   and will be inverse-scaled by the FITS TSCALn and TZEROn values if necessary.
 */
 {
-    int tcode, maxelem, hdutype, writeraw;
+    int tcode, maxelem2, hdutype, writeraw;
     long twidth, incre;
     long  ntodo;
-    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull;
+    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull, maxelem;
     double scale, zero;
     char tform[20], cform[20];
     char message[FLEN_ERRMSG];
@@ -1358,9 +1359,10 @@ int ffpcljj(fitsfile *fptr,  /* I - FITS file pointer                       */
     /*  Check input and get parameters about the column: */
     /*---------------------------------------------------*/
     if (ffgcprll( fptr, colnum, firstrow, firstelem, nelem, 1, &scale, &zero,
-        tform, &twidth, &tcode, &maxelem, &startpos,  &elemnum, &incre,
+        tform, &twidth, &tcode, &maxelem2, &startpos,  &elemnum, &incre,
         &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0)
         return(*status);
+    maxelem = maxelem2;
 
     if (tcode == TSTRING)   
          ffcfmt(tform, cform);     /* derive C format for writing strings */
@@ -1376,7 +1378,7 @@ int ffpcljj(fitsfile *fptr,  /* I - FITS file pointer                       */
        MACHINE == NATIVE && tcode == TLONGLONG)
     {
         writeraw = 1;
-        maxelem = (int) nelem;  /* we can write the entire array at one time */
+        maxelem = nelem;  /* we can write the entire array at one time */
     }
     else
         writeraw = 0;
diff --git a/cextern/cfitsio/putcolk.c b/cextern/cfitsio/putcolk.c
index 005a142..9036057 100644
--- a/cextern/cfitsio/putcolk.c
+++ b/cextern/cfitsio/putcolk.c
@@ -354,10 +354,10 @@ int ffpclk( fitsfile *fptr,  /* I - FITS file pointer                       */
   and will be inverse-scaled by the FITS TSCALn and TZEROn values if necessary.
 */
 {
-    int tcode, maxelem, hdutype, writeraw;
+    int tcode, maxelem2, hdutype, writeraw;
     long twidth, incre;
     long ntodo;
-    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull;
+    LONGLONG repeat, startpos, elemnum, wrtptr, rowlen, rownum, remain, next, tnull, maxelem;
     double scale, zero;
     char tform[20], cform[20];
     char message[FLEN_ERRMSG];
@@ -391,9 +391,10 @@ int ffpclk( fitsfile *fptr,  /* I - FITS file pointer                       */
     /*  Check input and get parameters about the column: */
     /*---------------------------------------------------*/
     if (ffgcprll( fptr, colnum, firstrow, firstelem, nelem, 1, &scale, &zero,
-        tform, &twidth, &tcode, &maxelem, &startpos,  &elemnum, &incre,
+        tform, &twidth, &tcode, &maxelem2, &startpos,  &elemnum, &incre,
         &repeat, &rowlen, &hdutype, &tnull, snull, status) > 0)
         return(*status);
+    maxelem = maxelem2;
 
     if (tcode == TSTRING)   
          ffcfmt(tform, cform);     /* derive C format for writing strings */
@@ -409,7 +410,7 @@ int ffpclk( fitsfile *fptr,  /* I - FITS file pointer                       */
        MACHINE == NATIVE && tcode == TLONG)
     {
         writeraw = 1;
-        maxelem = (int) nelem;  /* we can write the entire array at one time */
+        maxelem = nelem;  /* we can write the entire array at one time */
     }
     else
         writeraw = 0;
diff --git a/cextern/cfitsio/putcolu.c b/cextern/cfitsio/putcolu.c
index 90227f0..15840d8 100644
--- a/cextern/cfitsio/putcolu.c
+++ b/cextern/cfitsio/putcolu.c
@@ -202,7 +202,7 @@ int ffpclu( fitsfile *fptr,  /* I - FITS file pointer                       */
       {
          i8null = tnull;
 #if BYTESWAPPED
-         ffswap4( (INT32BIT*) (&i8null), 2); /* reverse order of bytes */
+         ffswap8((double *)(&i8null), 1);  /* reverse order of bytes */
 #endif
       }
     }
diff --git a/cextern/cfitsio/putkey.c b/cextern/cfitsio/putkey.c
index 2a88096..0763b6a 100644
--- a/cextern/cfitsio/putkey.c
+++ b/cextern/cfitsio/putkey.c
@@ -72,12 +72,12 @@ int ffcrimll(fitsfile *fptr,    /* I - FITS file pointer           */
 /*--------------------------------------------------------------------------*/
 int ffcrtb(fitsfile *fptr,  /* I - FITS file pointer                        */
            int tbltype,     /* I - type of table to create                  */
-           LONGLONG naxis2,     /* I - number of rows in the table              */
+           LONGLONG naxis2, /* I - number of rows in the table              */
            int tfields,     /* I - number of columns in the table           */
            char **ttype,    /* I - name of each column                      */
            char **tform,    /* I - value of TFORMn keyword for each column  */
            char **tunit,    /* I - value of TUNITn keyword for each column  */
-           const char *extnm,     /* I - value of EXTNAME keyword, if any         */
+           const char *extnm, /* I - value of EXTNAME keyword, if any         */
            int *status)     /* IO - error status                            */
 /*
   Create a table extension in a FITS file. 
@@ -187,9 +187,9 @@ int ffpktp(fitsfile *fptr,       /* I - FITS file pointer       */
 /*--------------------------------------------------------------------------*/
 int ffpky( fitsfile *fptr,     /* I - FITS file pointer        */
            int  datatype,      /* I - datatype of the value    */
-           const char *keyname,      /* I - name of keyword to write */
+           const char *keyname,/* I - name of keyword to write */
            void *value,        /* I - keyword value            */
-           const char *comm,         /* I - keyword comment          */
+           const char *comm,   /* I - keyword comment          */
            int  *status)       /* IO - error status            */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -328,8 +328,8 @@ int ffprec(fitsfile *fptr,     /* I - FITS file pointer        */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkyu( fitsfile *fptr,     /* I - FITS file pointer        */
-            const char *keyname,      /* I - name of keyword to write */
-            const char *comm,         /* I - keyword comment          */
+            const char *keyname,/* I - name of keyword to write */
+            const char *comm,   /* I - keyword comment          */
             int  *status)       /* IO - error status            */
 /*
   Write (put) a null-valued keyword and comment into the FITS header.  
@@ -349,9 +349,9 @@ int ffpkyu( fitsfile *fptr,     /* I - FITS file pointer        */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkys( fitsfile *fptr,     /* I - FITS file pointer        */
-            const char *keyname,      /* I - name of keyword to write */
-            char *value,        /* I - keyword value            */
-            const char *comm,         /* I - keyword comment          */
+            const char *keyname,/* I - name of keyword to write */
+            const char *value,  /* I - keyword value            */
+            const char *comm,   /* I - keyword comment          */
             int  *status)       /* IO - error status            */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -373,9 +373,9 @@ int ffpkys( fitsfile *fptr,     /* I - FITS file pointer        */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkls( fitsfile *fptr,     /* I - FITS file pointer        */
-            const char *keyname,      /* I - name of keyword to write */
-            const char *value,        /* I - keyword value            */
-            const char *comm,         /* I - keyword comment          */
+            const char *keyname,/* I - name of keyword to write */
+            const char *value,  /* I - keyword value            */
+            const char *comm,   /* I - keyword comment          */
             int  *status)       /* IO - error status            */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -533,9 +533,9 @@ int ffplsw( fitsfile *fptr,     /* I - FITS file pointer  */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkyl( fitsfile *fptr,     /* I - FITS file pointer        */
-            const char *keyname,      /* I - name of keyword to write */
+            const char *keyname,/* I - name of keyword to write */
             int  value,         /* I - keyword value            */
-            const char *comm,         /* I - keyword comment          */
+            const char *comm,   /* I - keyword comment          */
             int  *status)       /* IO - error status            */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -557,9 +557,9 @@ int ffpkyl( fitsfile *fptr,     /* I - FITS file pointer        */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkyj( fitsfile *fptr,     /* I - FITS file pointer        */
-            const char *keyname,      /* I - name of keyword to write */
+            const char *keyname,/* I - name of keyword to write */
             LONGLONG value,     /* I - keyword value            */
-            const char *comm,         /* I - keyword comment          */
+            const char *comm,   /* I - keyword comment          */
             int  *status)       /* IO - error status            */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -580,10 +580,10 @@ int ffpkyj( fitsfile *fptr,     /* I - FITS file pointer        */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkyf( fitsfile *fptr,      /* I - FITS file pointer                   */
-            const char  *keyname,      /* I - name of keyword to write            */
+            const char  *keyname,/* I - name of keyword to write            */
             float value,         /* I - keyword value                       */
             int   decim,         /* I - number of decimal places to display */
-            const char  *comm,         /* I - keyword comment                     */
+            const char  *comm,   /* I - keyword comment                     */
             int   *status)       /* IO - error status                       */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -604,10 +604,10 @@ int ffpkyf( fitsfile *fptr,      /* I - FITS file pointer                   */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkye( fitsfile *fptr,      /* I - FITS file pointer                   */
-            const char  *keyname,      /* I - name of keyword to write            */
+            const char  *keyname,/* I - name of keyword to write            */
             float value,         /* I - keyword value                       */
             int   decim,         /* I - number of decimal places to display */
-            const char  *comm,         /* I - keyword comment                     */
+            const char  *comm,   /* I - keyword comment                     */
             int   *status)       /* IO - error status                       */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -628,10 +628,10 @@ int ffpkye( fitsfile *fptr,      /* I - FITS file pointer                   */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkyg( fitsfile *fptr,      /* I - FITS file pointer                   */
-            const char  *keyname,      /* I - name of keyword to write            */
+            const char  *keyname,/* I - name of keyword to write            */
             double value,        /* I - keyword value                       */
             int   decim,         /* I - number of decimal places to display */
-            const char  *comm,         /* I - keyword comment                     */
+            const char  *comm,   /* I - keyword comment                     */
             int   *status)       /* IO - error status                       */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -651,10 +651,10 @@ int ffpkyg( fitsfile *fptr,      /* I - FITS file pointer                   */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkyd( fitsfile *fptr,      /* I - FITS file pointer                   */
-            const char  *keyname,      /* I - name of keyword to write            */
+            const char  *keyname,/* I - name of keyword to write            */
             double value,        /* I - keyword value                       */
             int   decim,         /* I - number of decimal places to display */
-            const char  *comm,         /* I - keyword comment                     */
+            const char  *comm,   /* I - keyword comment                     */
             int   *status)       /* IO - error status                       */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -674,10 +674,10 @@ int ffpkyd( fitsfile *fptr,      /* I - FITS file pointer                   */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkyc( fitsfile *fptr,      /* I - FITS file pointer                   */
-            const char  *keyname,      /* I - name of keyword to write            */
+            const char  *keyname,/* I - name of keyword to write            */
             float *value,        /* I - keyword value (real, imaginary)     */
             int   decim,         /* I - number of decimal places to display */
-            const char  *comm,         /* I - keyword comment                     */
+            const char  *comm,   /* I - keyword comment                     */
             int   *status)       /* IO - error status                       */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -705,10 +705,10 @@ int ffpkyc( fitsfile *fptr,      /* I - FITS file pointer                   */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkym( fitsfile *fptr,      /* I - FITS file pointer                   */
-            const char  *keyname,      /* I - name of keyword to write            */
+            const char  *keyname,/* I - name of keyword to write            */
             double *value,       /* I - keyword value (real, imaginary)     */
             int   decim,         /* I - number of decimal places to display */
-            const char  *comm,         /* I - keyword comment                     */
+            const char  *comm,   /* I - keyword comment                     */
             int   *status)       /* IO - error status                       */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -736,10 +736,10 @@ int ffpkym( fitsfile *fptr,      /* I - FITS file pointer                   */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkfc( fitsfile *fptr,      /* I - FITS file pointer                   */
-            const char  *keyname,      /* I - name of keyword to write            */
+            const char  *keyname,/* I - name of keyword to write            */
             float *value,        /* I - keyword value (real, imaginary)     */
             int   decim,         /* I - number of decimal places to display */
-            const char  *comm,         /* I - keyword comment                     */
+            const char  *comm,   /* I - keyword comment                     */
             int   *status)       /* IO - error status                       */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -767,10 +767,10 @@ int ffpkfc( fitsfile *fptr,      /* I - FITS file pointer                   */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkfm( fitsfile *fptr,      /* I - FITS file pointer                   */
-            const char  *keyname,      /* I - name of keyword to write            */
+            const char  *keyname,/* I - name of keyword to write            */
             double *value,       /* I - keyword value (real, imaginary)     */
             int   decim,         /* I - number of decimal places to display */
-            const char  *comm,         /* I - keyword comment                     */
+            const char  *comm,   /* I - keyword comment                     */
             int   *status)       /* IO - error status                       */
 /*
   Write (put) the keyword, value and comment into the FITS header.
@@ -798,10 +798,10 @@ int ffpkfm( fitsfile *fptr,      /* I - FITS file pointer                   */
 }
 /*--------------------------------------------------------------------------*/
 int ffpkyt( fitsfile *fptr,      /* I - FITS file pointer        */
-            const char  *keyname,      /* I - name of keyword to write */
+            const char  *keyname,/* I - name of keyword to write */
             long  intval,        /* I - integer part of value    */
             double fraction,     /* I - fractional part of value */
-            const char  *comm,         /* I - keyword comment          */
+            const char  *comm,   /* I - keyword comment          */
             int   *status)       /* IO - error status            */
 /*
   Write (put) a 'triple' precision keyword where the integer and
@@ -2814,9 +2814,9 @@ int ffl2c(int lval,    /* I - value to be converted to a string */
     return(*status);
 }
 /*--------------------------------------------------------------------------*/
-int ffs2c(char *instr,   /* I - null terminated input string  */
-          char *outstr,  /* O - null terminated quoted output string */
-          int *status)   /* IO - error status */
+int ffs2c(const char *instr, /* I - null terminated input string  */
+          char *outstr,      /* O - null terminated quoted output string */
+          int *status)       /* IO - error status */
 /*
   convert an input string to a quoted string. Leading spaces 
   are significant.  FITS string keyword values must be at least 
diff --git a/cextern/cfitsio/quantize.c b/cextern/cfitsio/quantize.c
index 8fe6acc..a3c55ec 100644
--- a/cextern/cfitsio/quantize.c
+++ b/cextern/cfitsio/quantize.c
@@ -15,6 +15,7 @@
 # define NINT(x)  ((x >= 0.) ? (int) (x + 0.5) : (int) (x - 0.5))
 
 #define NULL_VALUE -2147483647 /* value used to represent undefined pixels */
+#define ZERO_VALUE -2147483646 /* value used to represent zero-valued pixels */
 #define N_RESERVED_VALUES 10   /* number of reserved values, starting with */
                                /* and including NULL_VALUE.  These values */
                                /* may not be used to represent the quantized */
@@ -81,11 +82,11 @@ static double quick_select_double(double arr[], int n);
 
 /*---------------------------------------------------------------------------*/
 int fits_quantize_float (long row, float fdata[], long nxpix, long nypix, int nullcheck, 
-	float in_null_value, float qlevel, int idata[], double *bscale,
+	float in_null_value, float qlevel, int dither_method, int idata[], double *bscale,
 	double *bzero, int *iminval, int *imaxval) {
 
 /* arguments:
-long row            i: if positive, tile number = row number in the binary table
+long row            i: if positive, used to calculate random dithering seed value
                        (this is only used when dithering the quantized values)
 float fdata[]       i: array of image pixels to be compressed
 long nxpix          i: number of pixels in each row of fdata
@@ -93,6 +94,7 @@ long nypix          i: number of rows in fdata
 nullcheck           i: check for nullvalues in fdata?
 float in_null_value i: value used to represent undefined pixels in fdata
 float qlevel        i: quantization level
+int dither_method   i; which dithering method to use
 int idata[]         o: values of fdata after applying bzero and bscale
 double bscale       o: scale factor
 double bzero        o: zero offset
@@ -177,7 +179,12 @@ If the function value is zero, the data were not copied to idata.
             /* compression algorithms either only work for positive integers, */
             /* or are more efficient.  */
 
-            if ((maxval - minval) / delta < 2147483647. - N_RESERVED_VALUES )
+            if (dither_method == SUBTRACTIVE_DITHER_2)
+	    {
+                /* shift the range to be close to the value used to represent zeros */
+                zeropt = minval - delta * (NULL_VALUE + N_RESERVED_VALUES);
+            }
+	    else if ((maxval - minval) / delta < 2147483647. - N_RESERVED_VALUES )
             {
                 zeropt = minval;
 		/* fudge the zero point so it is an integer multiple of delta */
@@ -195,7 +202,11 @@ If the function value is zero, the data were not copied to idata.
             if (row > 0) {  /* dither the values when quantizing */
               for (i = 0;  i < nx;  i++) {
 	    
-		idata[i] =  NINT((((double) fdata[i] - zeropt) / delta) + fits_rand_value[nextrand] - 0.5);
+		if (dither_method == SUBTRACTIVE_DITHER_2 && fdata[i] == 0.0) {
+		   idata[i] = ZERO_VALUE;
+		} else {
+		   idata[i] =  NINT((((double) fdata[i] - zeropt) / delta) + fits_rand_value[nextrand] - 0.5);
+		}
 
                 nextrand++;
 		if (nextrand == N_RANDOM) {
@@ -219,7 +230,11 @@ If the function value is zero, the data were not copied to idata.
             if (row > 0) {  /* dither the values */
 	      for (i = 0;  i < nx;  i++) {
                 if (fdata[i] != in_null_value) {
-		    idata[i] =  NINT((((double) fdata[i] - zeropt) / delta) + fits_rand_value[nextrand] - 0.5);
+		    if (dither_method == SUBTRACTIVE_DITHER_2 && fdata[i] == 0.0) {
+		       idata[i] = ZERO_VALUE;
+		    } else {
+		       idata[i] =  NINT((((double) fdata[i] - zeropt) / delta) + fits_rand_value[nextrand] - 0.5);
+		    }
                 } else {
                     idata[i] = NULL_VALUE;
                 }
@@ -234,10 +249,12 @@ If the function value is zero, the data were not copied to idata.
               }
             } else {  /* do not dither the values */
 	       for (i = 0;  i < nx;  i++) {
-                 if (fdata[i] != in_null_value)
+ 
+                 if (fdata[i] != in_null_value) {
 		    idata[i] =  NINT((fdata[i] - zeropt) / delta);
-                 else 
+                 } else { 
                     idata[i] = NULL_VALUE;
+                 }
                }
             }
 	}
@@ -254,7 +271,7 @@ If the function value is zero, the data were not copied to idata.
 }
 /*---------------------------------------------------------------------------*/
 int fits_quantize_double (long row, double fdata[], long nxpix, long nypix, int nullcheck, 
-	double in_null_value, float qlevel, int idata[], double *bscale,
+	double in_null_value, float qlevel, int dither_method, int idata[], double *bscale,
 	double *bzero, int *iminval, int *imaxval) {
 
 /* arguments:
@@ -264,7 +281,8 @@ long nxpix          i: number of pixels in each row of fdata
 long nypix          i: number of rows in fdata
 nullcheck           i: check for nullvalues in fdata?
 double in_null_value i: value used to represent undefined pixels in fdata
-int noise_bits      i: quantization level (number of bits)
+float qlevel        i: quantization level
+int dither_method   i; which dithering method to use
 int idata[]         o: values of fdata after applying bzero and bscale
 double bscale       o: scale factor
 double bzero        o: zero offset
@@ -348,7 +366,13 @@ If the function value is zero, the data were not copied to idata.
             /* return all positive values, if possible since some */
             /* compression algorithms either only work for positive integers, */
             /* or are more efficient.  */
-            if ((maxval - minval) / delta < 2147483647. - N_RESERVED_VALUES )
+
+            if (dither_method == SUBTRACTIVE_DITHER_2)
+	    {
+                /* shift the range to be close to the value used to represent zeros */
+                zeropt = minval - delta * (NULL_VALUE + N_RESERVED_VALUES);
+            }
+	    else if ((maxval - minval) / delta < 2147483647. - N_RESERVED_VALUES )
             {
                 zeropt = minval;
 		/* fudge the zero point so it is an integer multiple of delta */
@@ -366,7 +390,11 @@ If the function value is zero, the data were not copied to idata.
             if (row > 0) {  /* dither the values when quantizing */
        	      for (i = 0;  i < nx;  i++) {
 
-		idata[i] =  NINT((((double) fdata[i] - zeropt) / delta) + fits_rand_value[nextrand] - 0.5);
+		if (dither_method == SUBTRACTIVE_DITHER_2 && fdata[i] == 0.0) {
+		   idata[i] = ZERO_VALUE;
+		} else {
+		   idata[i] =  NINT((((double) fdata[i] - zeropt) / delta) + fits_rand_value[nextrand] - 0.5);
+		}
 
                 nextrand++;
 		if (nextrand == N_RANDOM) {
@@ -389,7 +417,11 @@ If the function value is zero, the data were not copied to idata.
             if (row > 0) {  /* dither the values */
 	      for (i = 0;  i < nx;  i++) {
                 if (fdata[i] != in_null_value) {
-		    idata[i] =  NINT((((double) fdata[i] - zeropt) / delta) + fits_rand_value[nextrand] - 0.5);
+		    if (dither_method == SUBTRACTIVE_DITHER_2 && fdata[i] == 0.0) {
+		       idata[i] = ZERO_VALUE;
+		    } else {
+		       idata[i] =  NINT((((double) fdata[i] - zeropt) / delta) + fits_rand_value[nextrand] - 0.5);
+		    }
                 } else {
                     idata[i] = NULL_VALUE;
                 }
diff --git a/cextern/cfitsio/region.c b/cextern/cfitsio/region.c
index 3ec5bc2..e8a3429 100644
--- a/cextern/cfitsio/region.c
+++ b/cextern/cfitsio/region.c
@@ -96,9 +96,14 @@ int fits_read_ascii_region( const char *filename,
    }
    
    /*  Read in file, line by line  */
+   /*  First, set error status in case file is empty */ 
+   *status = FILE_NOT_OPENED;
 
    while( fgets(currLine,allocLen,rgnFile) != NULL ) {
 
+      /* reset status if we got here */
+      *status = 0;
+
       /*  Make sure we have a full line of text  */
 
       lineLen = strlen(currLine);
diff --git a/cextern/cfitsio/ricecomp.c b/cextern/cfitsio/ricecomp.c
index d5a11a4..a474c01 100644
--- a/cextern/cfitsio/ricecomp.c
+++ b/cextern/cfitsio/ricecomp.c
@@ -23,14 +23,40 @@
 #include <stdlib.h>
 #include <string.h>
 
+/*
+ * nonzero_count is lookup table giving number of bits in 8-bit values not including
+ * leading zeros used in fits_rdecomp, fits_rdecomp_short and fits_rdecomp_byte
+ */
+static const int nonzero_count[256] = {
+0, 
+1, 
+2, 2, 
+3, 3, 3, 3, 
+4, 4, 4, 4, 4, 4, 4, 4, 
+5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
+6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
+6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
+7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
+7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
+7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
+7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
+8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
+8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
+8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
+8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
+8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
+8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
+8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
+8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8};
+
 typedef unsigned char Buffer_t;
 
 typedef struct {
-	int bitbuffer;		/* bit buffer					*/
-	int bits_to_go;		/* bits to go in buffer			*/
-	Buffer_t *start;	/* start of buffer				*/
+	int bitbuffer;		/* bit buffer			*/
+	int bits_to_go;		/* bits to go in buffer		*/
+	Buffer_t *start;	/* start of buffer		*/
 	Buffer_t *current;	/* current position in buffer	*/
-	Buffer_t *end;		/* end of buffer				*/
+	Buffer_t *end;		/* end of buffer		*/
 } Buffer;
 
 #define putcbuf(c,mf) 	((*(mf->current)++ = c), 0)
@@ -41,6 +67,17 @@ static void start_outputing_bits(Buffer *buffer);
 static int done_outputing_bits(Buffer *buffer);
 static int output_nbits(Buffer *buffer, int bits, int n);
 
+/*  only used for diagnoistics
+static int case1, case2, case3;
+int fits_get_case(int *c1, int*c2, int*c3) {
+
+  *c1 = case1;
+  *c2 = case2;
+  *c3 = case3;
+  return(0);
+}
+*/
+
 /* this routine used to be called 'rcomp'  (WDP)  */
 /*---------------------------------------------------------------------------*/
 
@@ -99,6 +136,7 @@ unsigned int *diff;
     /* move out of switch block, to tweak performance */
     fsbits = 5;
     fsmax = 25;
+
     bbits = 1<<fsbits;
 
     /*
@@ -395,6 +433,7 @@ unsigned int *diff;
 	 * fsbits ID bits used to indicate split level
 	 */
 	if (fs >= fsmax) {
+/* case3++; */
 	    /* Special high entropy case when FS >= fsmax
 	     * Just write pixel difference values directly, no Rice coding at all.
 	     */
@@ -411,6 +450,7 @@ unsigned int *diff;
 		}
 	    }
 	} else if (fs == 0 && pixelsum == 0) {
+/* case1++; */
 	    /*
 	     * special low entropy case when FS = 0 and pixelsum=0 (all
 	     * pixels in block are zero.)
@@ -422,6 +462,7 @@ unsigned int *diff;
 		return(-1);
 	    }
 	} else {
+/* case2++; */
 	    /* normal case: not either very high or very low entropy */
 	    if (output_nbits(buffer, fs+1, fsbits) == EOF) {
                 ffpmsg("rice_encode: end of buffer");
@@ -828,7 +869,7 @@ int nbits, nzero, fs;
 unsigned char *cend, bytevalue;
 unsigned int b, diff, lastpix;
 int fsmax, fsbits, bbits;
-static int *nonzero_count = (int *)NULL;
+extern const int nonzero_count[];
 
    /*
      * Original size of each pixel (bsize, bytes) and coding block
@@ -872,30 +913,6 @@ static int *nonzero_count = (int *)NULL;
 
     bbits = 1<<fsbits;
 
-    FFLOCK;
-    if (nonzero_count == (int *) NULL) {
-	/*
-	 * nonzero_count is lookup table giving number of bits
-	 * in 8-bit values not including leading zeros
-	 */
-
-        /*  NOTE!!!  This memory never gets freed  */
-	nonzero_count = (int *) malloc(256*sizeof(int));
-	if (nonzero_count == (int *) NULL) {
-            ffpmsg("rdecomp: insufficient memory");
-            FFUNLOCK;
-	    return 1;
-	}
-	nzero = 8;
-	k = 128;
-	for (i=255; i>=0; ) {
-	    for ( ; i>=k; i--) nonzero_count[i] = nzero;
-	    k = k/2;
-	    nzero--;
-	}
-    }
-    FFUNLOCK;
-
     /*
      * Decode in blocks of nblock pixels
      */
@@ -1021,7 +1038,7 @@ int nbits, nzero, fs;
 unsigned char *cend, bytevalue;
 unsigned int b, diff, lastpix;
 int fsmax, fsbits, bbits;
-static int *nonzero_count = (int *)NULL;
+extern const int nonzero_count[];
 
    /*
      * Original size of each pixel (bsize, bytes) and coding block
@@ -1066,29 +1083,6 @@ static int *nonzero_count = (int *)NULL;
 
     bbits = 1<<fsbits;
 
-    FFLOCK;
-    if (nonzero_count == (int *) NULL) {
-	/*
-	 * nonzero_count is lookup table giving number of bits
-	 * in 8-bit values not including leading zeros
-	 */
-
-        /*  NOTE!!!  This memory never gets freed  */
-	nonzero_count = (int *) malloc(256*sizeof(int));
-	if (nonzero_count == (int *) NULL) {
-            ffpmsg("rdecomp: insufficient memory");
-	    FFUNLOCK;
-	    return 1;
-	}
-	nzero = 8;
-	k = 128;
-	for (i=255; i>=0; ) {
-	    for ( ; i>=k; i--) nonzero_count[i] = nzero;
-	    k = k/2;
-	    nzero--;
-	}
-    }
-    FFUNLOCK;
     /*
      * Decode in blocks of nblock pixels
      */
@@ -1211,7 +1205,7 @@ int nbits, nzero, fs;
 unsigned char *cend;
 unsigned int b, diff, lastpix;
 int fsmax, fsbits, bbits;
-static int *nonzero_count = (int *)NULL;
+extern const int nonzero_count[];
 
    /*
      * Original size of each pixel (bsize, bytes) and coding block
@@ -1256,29 +1250,6 @@ static int *nonzero_count = (int *)NULL;
 
     bbits = 1<<fsbits;
 
-    FFLOCK;
-    if (nonzero_count == (int *) NULL) {
-	/*
-	 * nonzero_count is lookup table giving number of bits
-	 * in 8-bit values not including leading zeros
-	 */
-
-        /*  NOTE!!!  This memory never gets freed  */
-	nonzero_count = (int *) malloc(256*sizeof(int));
-	if (nonzero_count == (int *) NULL) {
-            ffpmsg("rdecomp: insufficient memory");
-	    FFUNLOCK;
-	    return 1;
-	}
-	nzero = 8;
-	k = 128;
-	for (i=255; i>=0; ) {
-	    for ( ; i>=k; i--) nonzero_count[i] = nzero;
-	    k = k/2;
-	    nzero--;
-	}
-    }
-    FFUNLOCK;
     /*
      * Decode in blocks of nblock pixels
      */
diff --git a/cextern/erfa/erfa.c b/cextern/erfa/erfa.c
new file mode 100644
index 0000000..3a056b7
--- /dev/null
+++ b/cextern/erfa/erfa.c
@@ -0,0 +1,22822 @@
+#include "erfa.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+void eraA2af(int ndp, double angle, char *sign, int idmsf[4])
+/*
+**  - - - - - - - -
+**   e r a A 2 a f
+**  - - - - - - - -
+**
+**  Decompose radians into degrees, arcminutes, arcseconds, fraction.
+**
+**  Given:
+**     ndp     int     resolution (Note 1)
+**     angle   double  angle in radians
+**
+**  Returned:
+**     sign    char    '+' or '-'
+**     idmsf   int[4]  degrees, arcminutes, arcseconds, fraction
+**
+**  Called:
+**     eraD2tf      decompose days to hms
+**
+**  Notes:
+**
+**  1) The argument ndp is interpreted as follows:
+**
+**     ndp         resolution
+**      :      ...0000 00 00
+**     -7         1000 00 00
+**     -6          100 00 00
+**     -5           10 00 00
+**     -4            1 00 00
+**     -3            0 10 00
+**     -2            0 01 00
+**     -1            0 00 10
+**      0            0 00 01
+**      1            0 00 00.1
+**      2            0 00 00.01
+**      3            0 00 00.001
+**      :            0 00 00.000...
+**
+**  2) The largest positive useful value for ndp is determined by the
+**     size of angle, the format of doubles on the target platform, and
+**     the risk of overflowing idmsf[3].  On a typical platform, for
+**     angle up to 2pi, the available floating-point precision might
+**     correspond to ndp=12.  However, the practical limit is typically
+**     ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is
+**     only 16 bits.
+**
+**  3) The absolute value of angle may exceed 2pi.  In cases where it
+**     does not, it is up to the caller to test for and handle the
+**     case where angle is very nearly 2pi and rounds up to 360 degrees,
+**     by testing for idmsf[0]=360 and setting idmsf[0-3] to zero.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Hours to degrees * radians to turns */
+   const double F = 15.0 / ERFA_D2PI;
+
+
+/* Scale then use days to h,m,s function. */
+   eraD2tf(ndp, angle*F, sign, idmsf);
+
+   return;
+
+}
+
+void eraA2tf(int ndp, double angle, char *sign, int ihmsf[4])
+/*
+**  - - - - - - - -
+**   e r a A 2 t f
+**  - - - - - - - -
+**
+**  Decompose radians into hours, minutes, seconds, fraction.
+**
+**  Given:
+**     ndp     int     resolution (Note 1)
+**     angle   double  angle in radians
+**
+**  Returned:
+**     sign    char    '+' or '-'
+**     ihmsf   int[4]  hours, minutes, seconds, fraction
+**
+**  Called:
+**     eraD2tf      decompose days to hms
+**
+**  Notes:
+**
+**  1) The argument ndp is interpreted as follows:
+**
+**     ndp         resolution
+**      :      ...0000 00 00
+**     -7         1000 00 00
+**     -6          100 00 00
+**     -5           10 00 00
+**     -4            1 00 00
+**     -3            0 10 00
+**     -2            0 01 00
+**     -1            0 00 10
+**      0            0 00 01
+**      1            0 00 00.1
+**      2            0 00 00.01
+**      3            0 00 00.001
+**      :            0 00 00.000...
+**
+**  2) The largest positive useful value for ndp is determined by the
+**     size of angle, the format of doubles on the target platform, and
+**     the risk of overflowing ihmsf[3].  On a typical platform, for
+**     angle up to 2pi, the available floating-point precision might
+**     correspond to ndp=12.  However, the practical limit is typically
+**     ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is
+**     only 16 bits.
+**
+**  3) The absolute value of angle may exceed 2pi.  In cases where it
+**     does not, it is up to the caller to test for and handle the
+**     case where angle is very nearly 2pi and rounds up to 24 hours,
+**     by testing for ihmsf[0]=24 and setting ihmsf(0-3) to zero.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Scale then use days to h,m,s function. */
+   eraD2tf(ndp, angle/ERFA_D2PI, sign, ihmsf);
+
+   return;
+
+}
+
+int eraAf2a(char s, int ideg, int iamin, double asec, double *rad)
+/*
+**  - - - - - - - -
+**   e r a A f 2 a
+**  - - - - - - - -
+**
+**  Convert degrees, arcminutes, arcseconds to radians.
+**
+**  Given:
+**     s         char    sign:  '-' = negative, otherwise positive
+**     ideg      int     degrees
+**     iamin     int     arcminutes
+**     asec      double  arcseconds
+**
+**  Returned:
+**     rad       double  angle in radians
+**
+**  Returned (function value):
+**               int     status:  0 = OK
+**                                1 = ideg outside range 0-359
+**                                2 = iamin outside range 0-59
+**                                3 = asec outside range 0-59.999...
+**
+**  Notes:
+**
+**  1)  The result is computed even if any of the range checks fail.
+**
+**  2)  Negative ideg, iamin and/or asec produce a warning status, but
+**      the absolute value is used in the conversion.
+**
+**  3)  If there are multiple errors, the status value reflects only the
+**      first, the smallest taking precedence.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* Compute the interval. */
+   *rad  = ( s == '-' ? -1.0 : 1.0 ) *
+           ( 60.0 * ( 60.0 * ( (double) abs(ideg) ) +
+                             ( (double) abs(iamin) ) ) +
+                                        fabs(asec) ) * ERFA_DAS2R;
+
+/* Validate arguments and return status. */
+   if ( ideg < 0 || ideg > 359 ) return 1;
+   if ( iamin < 0 || iamin > 59 ) return 2;
+   if ( asec < 0.0 || asec >= 60.0 ) return 3;
+   return 0;
+
+}
+
+double eraAnp(double a)
+/*
+**  - - - - - - -
+**   e r a A n p
+**  - - - - - - -
+**
+**  Normalize angle into the range 0 <= a < 2pi.
+**
+**  Given:
+**     a        double     angle (radians)
+**
+**  Returned (function value):
+**              double     angle in range 0-2pi
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double w;
+
+
+   w = fmod(a, ERFA_D2PI);
+   if (w < 0) w += ERFA_D2PI;
+
+   return w;
+
+}
+
+double eraAnpm(double a)
+/*
+**  - - - - - - - -
+**   e r a A n p m
+**  - - - - - - - -
+**
+**  Normalize angle into the range -pi <= a < +pi.
+**
+**  Given:
+**     a        double     angle (radians)
+**
+**  Returned (function value):
+**              double     angle in range +/-pi
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double w;
+
+
+   w = fmod(a, ERFA_D2PI);
+   if (fabs(w) >= ERFA_DPI) w -= ERFA_DSIGN(ERFA_D2PI, a);
+
+   return w;
+
+}
+
+void eraBi00(double *dpsibi, double *depsbi, double *dra)
+/*
+**  - - - - - - - -
+**   e r a B i 0 0
+**  - - - - - - - -
+**
+**  Frame bias components of IAU 2000 precession-nutation models (part
+**  of MHB2000 with additions).
+**
+**  Returned:
+**     dpsibi,depsbi  double  longitude and obliquity corrections
+**     dra            double  the ICRS RA of the J2000.0 mean equinox
+**
+**  Notes:
+**
+**  1) The frame bias corrections in longitude and obliquity (radians)
+**     are required in order to correct for the offset between the GCRS
+**     pole and the mean J2000.0 pole.  They define, with respect to the
+**     GCRS frame, a J2000.0 mean pole that is consistent with the rest
+**     of the IAU 2000A precession-nutation model.
+**
+**  2) In addition to the displacement of the pole, the complete
+**     description of the frame bias requires also an offset in right
+**     ascension.  This is not part of the IAU 2000A model, and is from
+**     Chapront et al. (2002).  It is returned in radians.
+**
+**  3) This is a supplemented implementation of one aspect of the IAU
+**     2000A nutation model, formally adopted by the IAU General
+**     Assembly in 2000, namely MHB2000 (Mathews et al. 2002).
+**
+**  References:
+**
+**     Chapront, J., Chapront-Touze, M. & Francou, G., Astron.
+**     Astrophys., 387, 700, 2002.
+**
+**     Mathews, P.M., Herring, T.A., Buffet, B.A., "Modeling of nutation
+**     and precession   New nutation series for nonrigid Earth and
+**     insights into the Earth's interior", J.Geophys.Res., 107, B4,
+**     2002.  The MHB2000 code itself was obtained on 9th September 2002
+**     from ftp://maia.usno.navy.mil/conv2000/chapter5/IAU2000A.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* The frame bias corrections in longitude and obliquity */
+   const double DPBIAS = -0.041775  * ERFA_DAS2R,
+                DEBIAS = -0.0068192 * ERFA_DAS2R;
+
+/* The ICRS RA of the J2000.0 equinox (Chapront et al., 2002) */
+   const double DRA0 = -0.0146 * ERFA_DAS2R;
+
+
+/* Return the results (which are fixed). */
+   *dpsibi = DPBIAS;
+   *depsbi = DEBIAS;
+   *dra = DRA0;
+
+   return;
+
+}
+
+void eraBp00(double date1, double date2,
+             double rb[3][3], double rp[3][3], double rbp[3][3])
+/*
+**  - - - - - - - -
+**   e r a B p 0 0
+**  - - - - - - - -
+**
+**  Frame bias and precession, IAU 2000.
+**
+**  Given:
+**     date1,date2  double         TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rb           double[3][3]   frame bias matrix (Note 2)
+**     rp           double[3][3]   precession matrix (Note 3)
+**     rbp          double[3][3]   bias-precession matrix (Note 4)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**             date1         date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix rb transforms vectors from GCRS to mean J2000.0 by
+**     applying frame bias.
+**
+**  3) The matrix rp transforms vectors from J2000.0 mean equator and
+**     equinox to mean equator and equinox of date by applying
+**     precession.
+**
+**  4) The matrix rbp transforms vectors from GCRS to mean equator and
+**     equinox of date by applying frame bias then precession.  It is
+**     the product rp x rb.
+**
+**  5) It is permissible to re-use the same array in the returned
+**     arguments.  The arrays are filled in the order given.
+**
+**  Called:
+**     eraBi00      frame bias components, IAU 2000
+**     eraPr00      IAU 2000 precession adjustments
+**     eraIr        initialize r-matrix to identity
+**     eraRx        rotate around X-axis
+**     eraRy        rotate around Y-axis
+**     eraRz        rotate around Z-axis
+**     eraCr        copy r-matrix
+**     eraRxr       product of two r-matrices
+**
+**  Reference:
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* J2000.0 obliquity (Lieske et al. 1977) */
+   const double EPS0 = 84381.448 * ERFA_DAS2R;
+
+   double t, dpsibi, depsbi;
+   double dra0, psia77, oma77, chia, dpsipr, depspr, psia, oma,
+          rbw[3][3];
+
+
+/* Interval between fundamental epoch J2000.0 and current date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Frame bias. */
+   eraBi00(&dpsibi, &depsbi, &dra0);
+
+/* Precession angles (Lieske et al. 1977) */
+   psia77 = (5038.7784 + (-1.07259 + (-0.001147) * t) * t) * t * ERFA_DAS2R;
+   oma77  =       EPS0 + ((0.05127 + (-0.007726) * t) * t) * t * ERFA_DAS2R;
+   chia   = (  10.5526 + (-2.38064 + (-0.001125) * t) * t) * t * ERFA_DAS2R;
+
+/* Apply IAU 2000 precession corrections. */
+   eraPr00(date1, date2, &dpsipr,  &depspr);
+   psia = psia77 + dpsipr;
+   oma  = oma77  + depspr;
+
+/* Frame bias matrix: GCRS to J2000.0. */
+   eraIr(rbw);
+   eraRz(dra0, rbw);
+   eraRy(dpsibi * sin(EPS0), rbw);
+   eraRx(-depsbi, rbw);
+   eraCr(rbw, rb);
+
+/* Precession matrix: J2000.0 to mean of date. */
+   eraIr(rp);
+   eraRx(EPS0,  rp);
+   eraRz(-psia, rp);
+   eraRx(-oma,  rp);
+   eraRz(chia,  rp);
+
+/* Bias-precession matrix: GCRS to mean of date. */
+   eraRxr(rp, rbw, rbp);
+
+   return;
+
+}
+
+void eraBp06(double date1, double date2,
+             double rb[3][3], double rp[3][3], double rbp[3][3])
+/*
+**  - - - - - - - -
+**   e r a B p 0 6
+**  - - - - - - - -
+**
+**  Frame bias and precession, IAU 2006.
+**
+**  Given:
+**     date1,date2  double         TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rb           double[3][3]   frame bias matrix (Note 2)
+**     rp           double[3][3]   precession matrix (Note 3)
+**     rbp          double[3][3]   bias-precession matrix (Note 4)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**             date1         date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix rb transforms vectors from GCRS to mean J2000.0 by
+**     applying frame bias.
+**
+**  3) The matrix rp transforms vectors from mean J2000.0 to mean of
+**     date by applying precession.
+**
+**  4) The matrix rbp transforms vectors from GCRS to mean of date by
+**     applying frame bias then precession.  It is the product rp x rb.
+**
+**  Called:
+**     eraPfw06     bias-precession F-W angles, IAU 2006
+**     eraFw2m      F-W angles to r-matrix
+**     eraPmat06    PB matrix, IAU 2006
+**     eraTr        transpose r-matrix
+**     eraRxr       product of two r-matrices
+**
+**  References:
+**
+**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
+**
+**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double gamb, phib, psib, epsa, rbt[3][3];
+
+
+/* B matrix. */
+   eraPfw06(ERFA_DJM0, ERFA_DJM00, &gamb, &phib, &psib, &epsa);
+   eraFw2m(gamb, phib, psib, epsa, rb);
+
+/* PxB matrix. */
+   eraPmat06(date1, date2, rbp);
+
+/* P matrix. */
+   eraTr(rb, rbt);
+   eraRxr(rbp, rbt, rp);
+
+   return;
+
+}
+
+void eraBpn2xy(double rbpn[3][3], double *x, double *y)
+/*
+**  - - - - - - - - - -
+**   e r a B p n 2 x y
+**  - - - - - - - - - -
+**
+**  Extract from the bias-precession-nutation matrix the X,Y coordinates
+**  of the Celestial Intermediate Pole.
+**
+**  Given:
+**     rbpn      double[3][3]  celestial-to-true matrix (Note 1)
+**
+**  Returned:
+**     x,y       double        Celestial Intermediate Pole (Note 2)
+**
+**  Notes:
+**
+**  1) The matrix rbpn transforms vectors from GCRS to true equator (and
+**     CIO or equinox) of date, and therefore the Celestial Intermediate
+**     Pole unit vector is the bottom row of the matrix.
+**
+**  2) The arguments x,y are components of the Celestial Intermediate
+**     Pole unit vector in the Geocentric Celestial Reference System.
+**
+**  Reference:
+**
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154
+**     (2003)
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Extract the X,Y coordinates. */
+   *x = rbpn[2][0];
+   *y = rbpn[2][1];
+
+   return;
+
+}
+
+void eraC2i00a(double date1, double date2, double rc2i[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a C 2 i 0 0 a
+**  - - - - - - - - - -
+**
+**  Form the celestial-to-intermediate matrix for a given date using the
+**  IAU 2000A precession-nutation model.
+**
+**  Given:
+**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rc2i        double[3][3] celestial-to-intermediate matrix (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix rc2i is the first stage in the transformation from
+**     celestial to terrestrial coordinates:
+**
+**        [TRS]  =  RPOM * R_3(ERA) * rc2i * [CRS]
+**
+**               =  rc2t * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003), ERA is the Earth
+**     Rotation Angle and RPOM is the polar motion matrix.
+**
+**  3) A faster, but slightly less accurate result (about 1 mas), can be
+**     obtained by using instead the eraC2i00b function.
+**
+**  Called:
+**     eraPnm00a    classical NPB matrix, IAU 2000A
+**     eraC2ibpn    celestial-to-intermediate matrix, given NPB matrix
+**
+**  References:
+**
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154
+**     (2003)
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rbpn[3][3];
+
+
+/* Obtain the celestial-to-true matrix (IAU 2000A). */
+   eraPnm00a(date1, date2, rbpn);
+
+/* Form the celestial-to-intermediate matrix. */
+   eraC2ibpn(date1, date2, rbpn, rc2i);
+
+   return;
+
+}
+
+void eraC2i00b(double date1, double date2, double rc2i[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a C 2 i 0 0 b
+**  - - - - - - - - - -
+**
+**  Form the celestial-to-intermediate matrix for a given date using the
+**  IAU 2000B precession-nutation model.
+**
+**  Given:
+**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rc2i        double[3][3] celestial-to-intermediate matrix (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix rc2i is the first stage in the transformation from
+**     celestial to terrestrial coordinates:
+**
+**        [TRS]  =  RPOM * R_3(ERA) * rc2i * [CRS]
+**
+**               =  rc2t * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003), ERA is the Earth
+**     Rotation Angle and RPOM is the polar motion matrix.
+**
+**  3) The present function is faster, but slightly less accurate (about
+**     1 mas), than the eraC2i00a function.
+**
+**  Called:
+**     eraPnm00b    classical NPB matrix, IAU 2000B
+**     eraC2ibpn    celestial-to-intermediate matrix, given NPB matrix
+**
+**  References:
+**
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154
+**     (2003)
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rbpn[3][3];
+
+
+/* Obtain the celestial-to-true matrix (IAU 2000B). */
+   eraPnm00b(date1, date2, rbpn);
+
+/* Form the celestial-to-intermediate matrix. */
+   eraC2ibpn(date1, date2, rbpn, rc2i);
+
+   return;
+
+}
+
+void eraC2i06a(double date1, double date2, double rc2i[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a _ c 2 i 0 6 a
+**  - - - - - - - - - -
+**
+**  Form the celestial-to-intermediate matrix for a given date using the
+**  IAU 2006 precession and IAU 2000A nutation models.
+**
+**  Given:
+**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rc2i        double[3][3] celestial-to-intermediate matrix (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix rc2i is the first stage in the transformation from
+**     celestial to terrestrial coordinates:
+**
+**        [TRS]  =  RPOM * R_3(ERA) * rc2i * [CRS]
+**
+**               =  RC2T * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003), ERA is the Earth
+**     Rotation Angle and RPOM is the polar motion matrix.
+**
+**  Called:
+**     eraPnm06a    classical NPB matrix, IAU 2006/2000A
+**     eraBpn2xy    extract CIP X,Y coordinates from NPB matrix
+**     eraS06       the CIO locator s, Given X,Y, IAU 2006
+**     eraC2ixys    celestial-to-intermediate matrix, Given X,Y and s
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rbpn[3][3], x, y, s;
+
+
+/* Obtain the celestial-to-true matrix (IAU 2006/2000A). */
+   eraPnm06a(date1, date2, rbpn);
+
+/* Extract the X,Y coordinates. */
+   eraBpn2xy(rbpn, &x, &y);
+
+/* Obtain the CIO locator. */
+   s = eraS06(date1, date2, x, y);
+
+/* Form the celestial-to-intermediate matrix. */
+   eraC2ixys(x, y, s, rc2i);
+
+   return;
+
+}
+
+void eraC2ibpn(double date1, double date2, double rbpn[3][3],
+               double rc2i[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a C 2 i b p n
+**  - - - - - - - - - -
+**
+**  Form the celestial-to-intermediate matrix for a given date given
+**  the bias-precession-nutation matrix.  IAU 2000.
+**
+**  Given:
+**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
+**     rbpn        double[3][3] celestial-to-true matrix (Note 2)
+**
+**  Returned:
+**     rc2i        double[3][3] celestial-to-intermediate matrix (Note 3)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix rbpn transforms vectors from GCRS to true equator (and
+**     CIO or equinox) of date.  Only the CIP (bottom row) is used.
+**
+**  3) The matrix rc2i is the first stage in the transformation from
+**     celestial to terrestrial coordinates:
+**
+**        [TRS] = RPOM * R_3(ERA) * rc2i * [CRS]
+**
+**              = RC2T * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003), ERA is the Earth
+**     Rotation Angle and RPOM is the polar motion matrix.
+**
+**  4) Although its name does not include "00", This function is in fact
+**     specific to the IAU 2000 models.
+**
+**  Called:
+**     eraBpn2xy    extract CIP X,Y coordinates from NPB matrix
+**     eraC2ixy     celestial-to-intermediate matrix, given X,Y
+**
+**  References:
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double x, y;
+
+
+/* Extract the X,Y coordinates. */
+   eraBpn2xy(rbpn, &x, &y);
+
+/* Form the celestial-to-intermediate matrix (n.b. IAU 2000 specific). */
+   eraC2ixy(date1, date2, x, y, rc2i);
+
+   return;
+
+}
+
+void eraC2ixy(double date1, double date2, double x, double y,
+              double rc2i[3][3])
+/*
+**  - - - - - - - - -
+**   e r a C 2 i x y
+**  - - - - - - - - -
+**
+**  Form the celestial to intermediate-frame-of-date matrix for a given
+**  date when the CIP X,Y coordinates are known.  IAU 2000.
+**
+**  Given:
+**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
+**     x,y         double       Celestial Intermediate Pole (Note 2)
+**
+**  Returned:
+**     rc2i        double[3][3] celestial-to-intermediate matrix (Note 3)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The Celestial Intermediate Pole coordinates are the x,y components
+**     of the unit vector in the Geocentric Celestial Reference System.
+**
+**  3) The matrix rc2i is the first stage in the transformation from
+**     celestial to terrestrial coordinates:
+**
+**        [TRS] = RPOM * R_3(ERA) * rc2i * [CRS]
+**
+**              = RC2T * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003), ERA is the Earth
+**     Rotation Angle and RPOM is the polar motion matrix.
+**
+**  4) Although its name does not include "00", This function is in fact
+**     specific to the IAU 2000 models.
+**
+**  Called:
+**     eraC2ixys    celestial-to-intermediate matrix, given X,Y and s
+**     eraS00       the CIO locator s, given X,Y, IAU 2000A
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+
+{
+/* Compute s and then the matrix. */
+   eraC2ixys(x, y, eraS00(date1, date2, x, y), rc2i);
+
+   return;
+
+}
+
+void eraC2ixys(double x, double y, double s, double rc2i[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a C 2 i x y s
+**  - - - - - - - - - -
+**
+**  Form the celestial to intermediate-frame-of-date matrix given the CIP
+**  X,Y and the CIO locator s.
+**
+**  Given:
+**     x,y      double         Celestial Intermediate Pole (Note 1)
+**     s        double         the CIO locator s (Note 2)
+**
+**  Returned:
+**     rc2i     double[3][3]   celestial-to-intermediate matrix (Note 3)
+**
+**  Notes:
+**
+**  1) The Celestial Intermediate Pole coordinates are the x,y
+**     components of the unit vector in the Geocentric Celestial
+**     Reference System.
+**
+**  2) The CIO locator s (in radians) positions the Celestial
+**     Intermediate Origin on the equator of the CIP.
+**
+**  3) The matrix rc2i is the first stage in the transformation from
+**     celestial to terrestrial coordinates:
+**
+**        [TRS] = RPOM * R_3(ERA) * rc2i * [CRS]
+**
+**              = RC2T * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003), ERA is the Earth
+**     Rotation Angle and RPOM is the polar motion matrix.
+**
+**  Called:
+**     eraIr        initialize r-matrix to identity
+**     eraRz        rotate around Z-axis
+**     eraRy        rotate around Y-axis
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double r2, e, d;
+
+
+/* Obtain the spherical angles E and d. */
+   r2 = x*x + y*y;
+   e = (r2 != 0.0) ? atan2(y, x) : 0.0;
+   d = atan(sqrt(r2 / (1.0 - r2)));
+
+/* Form the matrix. */
+   eraIr(rc2i);
+   eraRz(e, rc2i);
+   eraRy(d, rc2i);
+   eraRz(-(e+s), rc2i);
+
+   return;
+
+}
+
+void eraC2s(double p[3], double *theta, double *phi)
+/*
+**  - - - - - - -
+**   e r a C 2 s
+**  - - - - - - -
+**
+**  P-vector to spherical coordinates.
+**
+**  Given:
+**     p      double[3]    p-vector
+**
+**  Returned:
+**     theta  double       longitude angle (radians)
+**     phi    double       latitude angle (radians)
+**
+**  Notes:
+**
+**  1) The vector p can have any magnitude; only its direction is used.
+**
+**  2) If p is null, zero theta and phi are returned.
+**
+**  3) At either pole, zero theta is returned.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double x, y, z, d2;
+
+
+   x  = p[0];
+   y  = p[1];
+   z  = p[2];
+   d2 = x*x + y*y;
+
+   *theta = (d2 == 0.0) ? 0.0 : atan2(y, x);
+   *phi = (z == 0.0) ? 0.0 : atan2(z, sqrt(d2));
+
+   return;
+
+}
+
+void eraC2t00a(double tta, double ttb, double uta, double utb,
+               double xp, double yp, double rc2t[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a C 2 t 0 0 a
+**  - - - - - - - - - -
+**
+**  Form the celestial to terrestrial matrix given the date, the UT1 and
+**  the polar motion, using the IAU 2000A nutation model.
+**
+**  Given:
+**     tta,ttb  double         TT as a 2-part Julian Date (Note 1)
+**     uta,utb  double         UT1 as a 2-part Julian Date (Note 1)
+**     xp,yp    double         coordinates of the pole (radians, Note 2)
+**
+**  Returned:
+**     rc2t     double[3][3]   celestial-to-terrestrial matrix (Note 3)
+**
+**  Notes:
+**
+**  1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates,
+**     apportioned in any convenient way between the arguments uta and
+**     utb.  For example, JD(UT1)=2450123.7 could be expressed in any of
+**     these ways, among others:
+**
+**             uta            utb
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution is
+**     acceptable.  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  In the case of uta,utb, the
+**     date & time method is best matched to the Earth rotation angle
+**     algorithm used:  maximum precision is delivered when the uta
+**     argument is for 0hrs UT1 on the day in question and the utb
+**     argument lies in the range 0 to 1, or vice versa.
+**
+**  2) The arguments xp and yp are the coordinates (in radians) of the
+**     Celestial Intermediate Pole with respect to the International
+**     Terrestrial Reference System (see IERS Conventions 2003),
+**     measured along the meridians to 0 and 90 deg west respectively.
+**
+**  3) The matrix rc2t transforms from celestial to terrestrial
+**     coordinates:
+**
+**        [TRS] = RPOM * R_3(ERA) * RC2I * [CRS]
+**
+**              = rc2t * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003), RC2I is the
+**     celestial-to-intermediate matrix, ERA is the Earth rotation
+**     angle and RPOM is the polar motion matrix.
+**
+**  4) A faster, but slightly less accurate result (about 1 mas), can
+**     be obtained by using instead the eraC2t00b function.
+**
+**  Called:
+**     eraC2i00a    celestial-to-intermediate matrix, IAU 2000A
+**     eraEra00     Earth rotation angle, IAU 2000
+**     eraSp00      the TIO locator s', IERS 2000
+**     eraPom00     polar motion matrix
+**     eraC2tcio    form CIO-based celestial-to-terrestrial matrix
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rc2i[3][3], era, sp, rpom[3][3];
+
+
+/* Form the celestial-to-intermediate matrix for this TT (IAU 2000A). */
+   eraC2i00a(tta, ttb, rc2i );
+
+/* Predict the Earth rotation angle for this UT1. */
+   era = eraEra00(uta, utb);
+
+/* Estimate s'. */
+   sp = eraSp00(tta, ttb);
+
+/* Form the polar motion matrix. */
+   eraPom00(xp, yp, sp, rpom);
+
+/* Combine to form the celestial-to-terrestrial matrix. */
+   eraC2tcio(rc2i, era, rpom, rc2t);
+
+   return;
+
+}
+
+void eraC2t00b(double tta, double ttb, double uta, double utb,
+               double xp, double yp, double rc2t[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a C 2 t 0 0 b
+**  - - - - - - - - - -
+**
+**  Form the celestial to terrestrial matrix given the date, the UT1 and
+**  the polar motion, using the IAU 2000B nutation model.
+**
+**  Given:
+**     tta,ttb  double         TT as a 2-part Julian Date (Note 1)
+**     uta,utb  double         UT1 as a 2-part Julian Date (Note 1)
+**     xp,yp    double         coordinates of the pole (radians, Note 2)
+**
+**  Returned:
+**     rc2t     double[3][3]   celestial-to-terrestrial matrix (Note 3)
+**
+**  Notes:
+**
+**  1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates,
+**     apportioned in any convenient way between the arguments uta and
+**     utb.  For example, JD(UT1)=2450123.7 could be expressed in any of
+**     these ways, among others:
+**
+**             uta            utb
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution is
+**     acceptable.  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  In the case of uta,utb, the
+**     date & time method is best matched to the Earth rotation angle
+**     algorithm used:  maximum precision is delivered when the uta
+**     argument is for 0hrs UT1 on the day in question and the utb
+**     argument lies in the range 0 to 1, or vice versa.
+**
+**  2) The arguments xp and yp are the coordinates (in radians) of the
+**     Celestial Intermediate Pole with respect to the International
+**     Terrestrial Reference System (see IERS Conventions 2003),
+**     measured along the meridians to 0 and 90 deg west respectively.
+**
+**  3) The matrix rc2t transforms from celestial to terrestrial
+**     coordinates:
+**
+**        [TRS] = RPOM * R_3(ERA) * RC2I * [CRS]
+**
+**              = rc2t * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003), RC2I is the
+**     celestial-to-intermediate matrix, ERA is the Earth rotation
+**     angle and RPOM is the polar motion matrix.
+**
+**  4) The present function is faster, but slightly less accurate (about
+**     1 mas), than the eraC2t00a function.
+**
+**  Called:
+**     eraC2i00b    celestial-to-intermediate matrix, IAU 2000B
+**     eraEra00     Earth rotation angle, IAU 2000
+**     eraPom00     polar motion matrix
+**     eraC2tcio    form CIO-based celestial-to-terrestrial matrix
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rc2i[3][3], era, rpom[3][3];
+
+
+/* Form the celestial-to-intermediate matrix for this TT (IAU 2000B). */
+   eraC2i00b(tta, ttb, rc2i);
+
+/* Predict the Earth rotation angle for this UT1. */
+   era = eraEra00(uta, utb);
+
+/* Form the polar motion matrix (neglecting s'). */
+   eraPom00(xp, yp, 0.0, rpom);
+
+/* Combine to form the celestial-to-terrestrial matrix. */
+   eraC2tcio(rc2i, era, rpom, rc2t);
+
+   return;
+
+}
+
+void eraC2t06a(double tta, double ttb, double uta, double utb,
+               double xp, double yp, double rc2t[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a C 2 t 0 6 a
+**  - - - - - - - - - -
+**
+**  Form the celestial to terrestrial matrix given the date, the UT1 and
+**  the polar motion, using the IAU 2006 precession and IAU 2000A
+**  nutation models.
+**
+**  Given:
+**     tta,ttb  double         TT as a 2-part Julian Date (Note 1)
+**     uta,utb  double         UT1 as a 2-part Julian Date (Note 1)
+**     xp,yp    double         coordinates of the pole (radians, Note 2)
+**
+**  Returned:
+**     rc2t     double[3][3]   celestial-to-terrestrial matrix (Note 3)
+**
+**  Notes:
+**
+**  1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates,
+**     apportioned in any convenient way between the arguments uta and
+**     utb.  For example, JD(UT1)=2450123.7 could be expressed in any of
+**     these ways, among others:
+**
+**             uta            utb
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution is
+**     acceptable.  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  In the case of uta,utb, the
+**     date & time method is best matched to the Earth rotation angle
+**     algorithm used:  maximum precision is delivered when the uta
+**     argument is for 0hrs UT1 on the day in question and the utb
+**     argument lies in the range 0 to 1, or vice versa.
+**
+**  2) The arguments xp and yp are the coordinates (in radians) of the
+**     Celestial Intermediate Pole with respect to the International
+**     Terrestrial Reference System (see IERS Conventions 2003),
+**     measured along the meridians to 0 and 90 deg west respectively.
+**
+**  3) The matrix rc2t transforms from celestial to terrestrial
+**     coordinates:
+**
+**        [TRS] = RPOM * R_3(ERA) * RC2I * [CRS]
+**
+**              = rc2t * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003), RC2I is the
+**     celestial-to-intermediate matrix, ERA is the Earth rotation
+**     angle and RPOM is the polar motion matrix.
+**
+**  Called:
+**     eraC2i06a    celestial-to-intermediate matrix, IAU 2006/2000A
+**     eraEra00     Earth rotation angle, IAU 2000
+**     eraSp00      the TIO locator s', IERS 2000
+**     eraPom00     polar motion matrix
+**     eraC2tcio    form CIO-based celestial-to-terrestrial matrix
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rc2i[3][3], era, sp, rpom[3][3];
+
+
+/* Form the celestial-to-intermediate matrix for this TT. */
+   eraC2i06a(tta, ttb, rc2i);
+
+/* Predict the Earth rotation angle for this UT1. */
+   era = eraEra00(uta, utb);
+
+/* Estimate s'. */
+   sp = eraSp00(tta, ttb);
+
+/* Form the polar motion matrix. */
+   eraPom00(xp, yp, sp, rpom);
+
+/* Combine to form the celestial-to-terrestrial matrix. */
+   eraC2tcio(rc2i, era, rpom, rc2t);
+
+   return;
+
+}
+
+void eraC2tcio(double rc2i[3][3], double era, double rpom[3][3],
+               double rc2t[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a C 2 t c i o
+**  - - - - - - - - - -
+**
+**  Assemble the celestial to terrestrial matrix from CIO-based
+**  components (the celestial-to-intermediate matrix, the Earth Rotation
+**  Angle and the polar motion matrix).
+**
+**  Given:
+**     rc2i     double[3][3]    celestial-to-intermediate matrix
+**     era      double          Earth rotation angle
+**     rpom     double[3][3]    polar-motion matrix
+**
+**  Returned:
+**     rc2t     double[3][3]    celestial-to-terrestrial matrix
+**
+**  Notes:
+**
+**  1) This function constructs the rotation matrix that transforms
+**     vectors in the celestial system into vectors in the terrestrial
+**     system.  It does so starting from precomputed components, namely
+**     the matrix which rotates from celestial coordinates to the
+**     intermediate frame, the Earth rotation angle and the polar motion
+**     matrix.  One use of the present function is when generating a
+**     series of celestial-to-terrestrial matrices where only the Earth
+**     Rotation Angle changes, avoiding the considerable overhead of
+**     recomputing the precession-nutation more often than necessary to
+**     achieve given accuracy objectives.
+**
+**  2) The relationship between the arguments is as follows:
+**
+**        [TRS] = RPOM * R_3(ERA) * rc2i * [CRS]
+**
+**              = rc2t * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003).
+**
+**  Called:
+**     eraCr        copy r-matrix
+**     eraRz        rotate around Z-axis
+**     eraRxr       product of two r-matrices
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double r[3][3];
+
+
+/* Construct the matrix. */
+   eraCr(rc2i, r);
+   eraRz(era, r);
+   eraRxr(rpom, r, rc2t);
+
+   return;
+
+}
+
+void eraC2teqx(double rbpn[3][3], double gst, double rpom[3][3],
+               double rc2t[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a C 2 t e q x
+**  - - - - - - - - - -
+**
+**  Assemble the celestial to terrestrial matrix from equinox-based
+**  components (the celestial-to-true matrix, the Greenwich Apparent
+**  Sidereal Time and the polar motion matrix).
+**
+**  Given:
+**     rbpn     double[3][3]    celestial-to-true matrix
+**     gst      double          Greenwich (apparent) Sidereal Time
+**     rpom     double[3][3]    polar-motion matrix
+**
+**  Returned:
+**     rc2t     double[3][3]    celestial-to-terrestrial matrix (Note 2)
+**
+**  Notes:
+**
+**  1) This function constructs the rotation matrix that transforms
+**     vectors in the celestial system into vectors in the terrestrial
+**     system.  It does so starting from precomputed components, namely
+**     the matrix which rotates from celestial coordinates to the
+**     true equator and equinox of date, the Greenwich Apparent Sidereal
+**     Time and the polar motion matrix.  One use of the present function
+**     is when generating a series of celestial-to-terrestrial matrices
+**     where only the Sidereal Time changes, avoiding the considerable
+**     overhead of recomputing the precession-nutation more often than
+**     necessary to achieve given accuracy objectives.
+**
+**  2) The relationship between the arguments is as follows:
+**
+**        [TRS] = rpom * R_3(gst) * rbpn * [CRS]
+**
+**              = rc2t * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003).
+**
+**  Called:
+**     eraCr        copy r-matrix
+**     eraRz        rotate around Z-axis
+**     eraRxr       product of two r-matrices
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double r[3][3];
+
+
+/* Construct the matrix. */
+   eraCr(rbpn, r);
+   eraRz(gst, r);
+   eraRxr(rpom, r, rc2t);
+
+   return;
+
+}
+
+void eraC2tpe(double tta, double ttb, double uta, double utb,
+              double dpsi, double deps, double xp, double yp,
+              double rc2t[3][3])
+/*
+**  - - - - - - - - -
+**   e r a C 2 t p e
+**  - - - - - - - - -
+**
+**  Form the celestial to terrestrial matrix given the date, the UT1,
+**  the nutation and the polar motion.  IAU 2000.
+**
+**  Given:
+**     tta,ttb    double        TT as a 2-part Julian Date (Note 1)
+**     uta,utb    double        UT1 as a 2-part Julian Date (Note 1)
+**     dpsi,deps  double        nutation (Note 2)
+**     xp,yp      double        coordinates of the pole (radians, Note 3)
+**
+**  Returned:
+**     rc2t       double[3][3]  celestial-to-terrestrial matrix (Note 4)
+**
+**  Notes:
+**
+**  1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates,
+**     apportioned in any convenient way between the arguments uta and
+**     utb.  For example, JD(UT1)=2450123.7 could be expressed in any of
+**     these ways, among others:
+**
+**             uta            utb
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution is
+**     acceptable.  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  In the case of uta,utb, the
+**     date & time method is best matched to the Earth rotation angle
+**     algorithm used:  maximum precision is delivered when the uta
+**     argument is for 0hrs UT1 on the day in question and the utb
+**     argument lies in the range 0 to 1, or vice versa.
+**
+**  2) The caller is responsible for providing the nutation components;
+**     they are in longitude and obliquity, in radians and are with
+**     respect to the equinox and ecliptic of date.  For high-accuracy
+**     applications, free core nutation should be included as well as
+**     any other relevant corrections to the position of the CIP.
+**
+**  3) The arguments xp and yp are the coordinates (in radians) of the
+**     Celestial Intermediate Pole with respect to the International
+**     Terrestrial Reference System (see IERS Conventions 2003),
+**     measured along the meridians to 0 and 90 deg west respectively.
+**
+**  4) The matrix rc2t transforms from celestial to terrestrial
+**     coordinates:
+**
+**        [TRS] = RPOM * R_3(GST) * RBPN * [CRS]
+**
+**              = rc2t * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003), RBPN is the
+**     bias-precession-nutation matrix, GST is the Greenwich (apparent)
+**     Sidereal Time and RPOM is the polar motion matrix.
+**
+**  5) Although its name does not include "00", This function is in fact
+**     specific to the IAU 2000 models.
+**
+**  Called:
+**     eraPn00      bias/precession/nutation results, IAU 2000
+**     eraGmst00    Greenwich mean sidereal time, IAU 2000
+**     eraSp00      the TIO locator s', IERS 2000
+**     eraEe00      equation of the equinoxes, IAU 2000
+**     eraPom00     polar motion matrix
+**     eraC2teqx    form equinox-based celestial-to-terrestrial matrix
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double epsa, rb[3][3], rp[3][3], rbp[3][3], rn[3][3],
+          rbpn[3][3], gmst, ee, sp, rpom[3][3];
+
+
+/* Form the celestial-to-true matrix for this TT. */
+   eraPn00(tta, ttb, dpsi, deps, &epsa, rb, rp, rbp, rn, rbpn);
+
+/* Predict the Greenwich Mean Sidereal Time for this UT1 and TT. */
+   gmst = eraGmst00(uta, utb, tta, ttb);
+
+/* Predict the equation of the equinoxes given TT and nutation. */
+   ee = eraEe00(tta, ttb, epsa, dpsi);
+
+/* Estimate s'. */
+   sp = eraSp00(tta, ttb);
+
+/* Form the polar motion matrix. */
+   eraPom00(xp, yp, sp, rpom);
+
+/* Combine to form the celestial-to-terrestrial matrix. */
+   eraC2teqx(rbpn, gmst + ee, rpom, rc2t);
+
+   return;
+
+}
+
+void eraC2txy(double tta, double ttb, double uta, double utb,
+              double x, double y, double xp, double yp,
+              double rc2t[3][3])
+/*
+**  - - - - - - - - -
+**   e r a C 2 t x y
+**  - - - - - - - - -
+**
+**  Form the celestial to terrestrial matrix given the date, the UT1,
+**  the CIP coordinates and the polar motion.  IAU 2000.
+**
+**  Given:
+**     tta,ttb  double         TT as a 2-part Julian Date (Note 1)
+**     uta,utb  double         UT1 as a 2-part Julian Date (Note 1)
+**     x,y      double         Celestial Intermediate Pole (Note 2)
+**     xp,yp    double         coordinates of the pole (radians, Note 3)
+**
+**  Returned:
+**     rc2t     double[3][3]   celestial-to-terrestrial matrix (Note 4)
+**
+**  Notes:
+**
+**  1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates,
+**     apportioned in any convenient way between the arguments uta and
+**     utb.  For example, JD(UT1)=2450123.7 could be expressed in any o
+**     these ways, among others:
+**
+**             uta            utb
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution is
+**     acceptable.  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  In the case of uta,utb, the
+**     date & time method is best matched to the Earth rotation angle
+**     algorithm used:  maximum precision is delivered when the uta
+**     argument is for 0hrs UT1 on the day in question and the utb
+**     argument lies in the range 0 to 1, or vice versa.
+**
+**  2) The Celestial Intermediate Pole coordinates are the x,y
+**     components of the unit vector in the Geocentric Celestial
+**     Reference System.
+**
+**  3) The arguments xp and yp are the coordinates (in radians) of the
+**     Celestial Intermediate Pole with respect to the International
+**     Terrestrial Reference System (see IERS Conventions 2003),
+**     measured along the meridians to 0 and 90 deg west respectively.
+**
+**  4) The matrix rc2t transforms from celestial to terrestrial
+**     coordinates:
+**
+**        [TRS] = RPOM * R_3(ERA) * RC2I * [CRS]
+**
+**              = rc2t * [CRS]
+**
+**     where [CRS] is a vector in the Geocentric Celestial Reference
+**     System and [TRS] is a vector in the International Terrestrial
+**     Reference System (see IERS Conventions 2003), ERA is the Earth
+**     Rotation Angle and RPOM is the polar motion matrix.
+**
+**  5) Although its name does not include "00", This function is in fact
+**     specific to the IAU 2000 models.
+**
+**  Called:
+**     eraC2ixy     celestial-to-intermediate matrix, given X,Y
+**     eraEra00     Earth rotation angle, IAU 2000
+**     eraSp00      the TIO locator s', IERS 2000
+**     eraPom00     polar motion matrix
+**     eraC2tcio    form CIO-based celestial-to-terrestrial matrix
+**
+** Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rc2i[3][3], era, sp, rpom[3][3];
+
+
+/* Form the celestial-to-intermediate matrix for this TT. */
+   eraC2ixy(tta, ttb, x, y, rc2i);
+
+/* Predict the Earth rotation angle for this UT1. */
+   era = eraEra00(uta, utb);
+
+/* Estimate s'. */
+   sp = eraSp00(tta, ttb);
+
+/* Form the polar motion matrix. */
+   eraPom00(xp, yp, sp, rpom);
+
+/* Combine to form the celestial-to-terrestrial matrix. */
+   eraC2tcio(rc2i, era, rpom, rc2t);
+
+   return;
+
+}
+
+int eraCal2jd(int iy, int im, int id, double *djm0, double *djm)
+/*
+**  - - - - - - - - - -
+**   e r a C a l 2 j d
+**  - - - - - - - - - -
+**
+**  Gregorian Calendar to Julian Date.
+**
+**  Given:
+**     iy,im,id  int     year, month, day in Gregorian calendar (Note 1)
+**
+**  Returned:
+**     djm0      double  MJD zero-point: always 2400000.5
+**     djm       double  Modified Julian Date for 0 hrs
+**
+**  Returned (function value):
+**               int     status:
+**                           0 = OK
+**                          -1 = bad year   (Note 3: JD not computed)
+**                          -2 = bad month  (JD not computed)
+**                          -3 = bad day    (JD computed)
+**
+**  Notes:
+**
+**  1) The algorithm used is valid from -4800 March 1, but this
+**     implementation rejects dates before -4799 January 1.
+**
+**  2) The Julian Date is returned in two pieces, in the usual ERFA
+**     manner, which is designed to preserve time resolution.  The
+**     Julian Date is available as a single number by adding djm0 and
+**     djm.
+**
+**  3) In early eras the conversion is from the "Proleptic Gregorian
+**     Calendar";  no account is taken of the date(s) of adoption of
+**     the Gregorian Calendar, nor is the AD/BC numbering convention
+**     observed.
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     Section 12.92 (p604).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int j, ly, my;
+   long iypmy;
+
+/* Earliest year allowed (4800BC) */
+   const int IYMIN = -4799;
+
+/* Month lengths in days */
+   static const int mtab[]
+                     = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+
+
+/* Preset status. */
+   j = 0;
+
+/* Validate year and month. */
+   if (iy < IYMIN) return -1;
+   if (im < 1 || im > 12) return -2;
+
+/* If February in a leap year, 1, otherwise 0. */
+   ly = ((im == 2) && !(iy%4) && (iy%100 || !(iy%400)));
+
+/* Validate day, taking into account leap years. */
+   if ( (id < 1) || (id > (mtab[im-1] + ly))) j = -3;
+
+/* Return result. */
+   my = (im - 14) / 12;
+   iypmy = (long) (iy + my);
+   *djm0 = 2400000.5;
+   *djm = (double)((1461L * (iypmy + 4800L)) / 4L
+                 + (367L * (long) (im - 2 - 12 * my)) / 12L
+                 - (3L * ((iypmy + 4900L) / 100L)) / 4L
+                 + (long) id - 2432076L);
+
+/* Return status. */
+   return j;
+
+}
+
+void eraCp(double p[3], double c[3])
+/*
+**  - - - - - -
+**   e r a C p
+**  - - - - - -
+**
+**  Copy a p-vector.
+**
+**  Given:
+**     p        double[3]     p-vector to be copied
+**
+**  Returned:
+**     c        double[3]     copy
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   c[0] = p[0];
+   c[1] = p[1];
+   c[2] = p[2];
+
+   return;
+
+}
+
+void eraCpv(double pv[2][3], double c[2][3])
+/*
+**  - - - - - - -
+**   e r a C p v
+**  - - - - - - -
+**
+**  Copy a position/velocity vector.
+**
+**  Given:
+**     pv     double[2][3]    position/velocity vector to be copied
+**
+**  Returned:
+**     c      double[2][3]    copy
+**
+**  Called:
+**     eraCp        copy p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraCp(pv[0], c[0]);
+   eraCp(pv[1], c[1]);
+
+   return;
+
+}
+
+void eraCr(double r[3][3], double c[3][3])
+/*
+**  - - - - - -
+**   e r a C r
+**  - - - - - -
+**
+**  Copy an r-matrix.
+**
+**  Given:
+**     r        double[3][3]    r-matrix to be copied
+**
+**  Returned:
+**   char[]     double[3][3]    copy
+**
+**  Called:
+**     eraCp        copy p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraCp(r[0], c[0]);
+   eraCp(r[1], c[1]);
+   eraCp(r[2], c[2]);
+
+   return;
+
+}
+
+int eraD2dtf(const char *scale, int ndp, double d1, double d2,
+             int *iy, int *im, int *id, int ihmsf[4])
+/*
+**  - - - - - - - - -
+**   e r a D 2 d t f
+**  - - - - - - - - -
+**
+**  Format for output a 2-part Julian Date (or in the case of UTC a
+**  quasi-JD form that includes special provision for leap seconds).
+**
+**  Given:
+**     scale     char[]  time scale ID (Note 1)
+**     ndp       int     resolution (Note 2)
+**     d1,d2     double  time as a 2-part Julian Date (Notes 3,4)
+**
+**  Returned:
+**     iy,im,id  int     year, month, day in Gregorian calendar (Note 5)
+**     ihmsf     int[4]  hours, minutes, seconds, fraction (Note 1)
+**
+**  Returned (function value):
+**               int     status: +1 = dubious year (Note 5)
+**                                0 = OK
+**                               -1 = unacceptable date (Note 6)
+**
+**  Notes:
+**
+**  1) scale identifies the time scale.  Only the value "UTC" (in upper
+**     case) is significant, and enables handling of leap seconds (see
+**     Note 4).
+**
+**  2) ndp is the number of decimal places in the seconds field, and can
+**     have negative as well as positive values, such as:
+**
+**     ndp         resolution
+**     -4            1 00 00
+**     -3            0 10 00
+**     -2            0 01 00
+**     -1            0 00 10
+**      0            0 00 01
+**      1            0 00 00.1
+**      2            0 00 00.01
+**      3            0 00 00.001
+**
+**     The limits are platform dependent, but a safe range is -5 to +9.
+**
+**  3) d1+d2 is Julian Date, apportioned in any convenient way between
+**     the two arguments, for example where d1 is the Julian Day Number
+**     and d2 is the fraction of a day.  In the case of UTC, where the
+**     use of JD is problematical, special conventions apply:  see the
+**     next note.
+**
+**  4) JD cannot unambiguously represent UTC during a leap second unless
+**     special measures are taken.  The ERFA internal convention is that
+**     the quasi-JD day represents UTC days whether the length is 86399,
+**     86400 or 86401 SI seconds.
+**
+**  5) The warning status "dubious year" flags UTCs that predate the
+**     introduction of the time scale and that are too far in the future
+**     to be trusted.  See eraDat for further details.
+**
+**  6) For calendar conventions and limitations, see eraCal2jd.
+**
+**  Called:
+**     eraJd2cal    JD to Gregorian calendar
+**     eraD2tf      decompose days to hms
+**     eraDat       delta(AT) = TAI-UTC
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int leap;
+   char s;
+   int iy1, im1, id1, js, iy2, im2, id2, ihmsf1[4], i;
+   double a1, b1, fd, dat1, w, dat2, ddt;
+
+
+/* The two-part JD. */
+   a1 = d1;
+   b1 = d2;
+
+/* Provisional calendar date. */
+   js = eraJd2cal(a1, b1, &iy1, &im1, &id1, &fd);
+   if ( js ) return js < 0 ? -1 : js;
+
+/* Is this a leap second day? */
+   leap = 0;
+   if ( ! strcmp(scale,"UTC") ) {
+
+   /* TAI-UTC today. */
+      js = eraDat(iy1, im1, id1, fd, &dat1);
+      if ( js < 0 ) return -1;
+
+   /* TAI-UTC tomorrow (at noon, to avoid rounding effects). */
+      js = eraJd2cal(a1+1.5, b1-fd, &iy2, &im2, &id2, &w);
+      js = eraDat(iy2, im2, id2, 0.0, &dat2);
+      if ( js < 0 ) return -1;
+
+   /* The change in TAI-UTC (seconds). */
+      ddt = dat2 - dat1;
+
+   /* If leap second day, scale the fraction of a day into SI. */
+      leap = fabs(ddt) > 0.5;
+      if (leap) fd += fd * ddt/ERFA_DAYSEC;
+   }
+
+/* Provisional time of day. */
+   eraD2tf ( ndp, fd, &s, ihmsf1 );
+
+/* Is this a leap second day? */
+   if ( ! leap ) {
+
+   /* No.  Has the time rounded up to 24h? */
+      if ( ihmsf1[0] > 23 ) {
+
+      /* Yes.  We will need tomorrow's calendar date. */
+         js = eraJd2cal(a1+1.5, b1-fd, &iy2, &im2, &id2, &w);
+
+      /* Use 0h tomorrow. */
+         iy1 = iy2;
+         im1 = im2;
+         id1 = id2;
+         for ( i = 0; i < 4; i++ ) {
+            ihmsf1[i] = 0;
+         }
+      }
+   } else {
+
+   /* This is a leap second day.  Has the time reached or passed 24h? */
+      if ( ihmsf1[0] > 23 ) {
+
+      /* Yes.  Use 23 59 60... */
+         ihmsf1[0] = 23;
+         ihmsf1[1] = 59;
+         ihmsf1[2] = 60;
+      }
+   }
+
+/* Results. */
+   *iy = iy1;
+   *im = im1;
+   *id = id1;
+   for ( i = 0; i < 4; i++ ) {
+      ihmsf[i] = ihmsf1[i];
+   }
+
+/* Status. */
+   return js < 0 ? -1 : js;
+
+}
+
+void eraD2tf(int ndp, double days, char *sign, int ihmsf[4])
+/*
+**  - - - - - - - -
+**   e r a D 2 t f
+**  - - - - - - - -
+**
+**  Decompose days to hours, minutes, seconds, fraction.
+**
+**  Given:
+**     ndp     int     resolution (Note 1)
+**     days    double  interval in days
+**
+**  Returned:
+**     sign    char    '+' or '-'
+**     ihmsf   int[4]  hours, minutes, seconds, fraction
+**
+**  Notes:
+**
+**  1) The argument ndp is interpreted as follows:
+**
+**     ndp         resolution
+**      :      ...0000 00 00
+**     -7         1000 00 00
+**     -6          100 00 00
+**     -5           10 00 00
+**     -4            1 00 00
+**     -3            0 10 00
+**     -2            0 01 00
+**     -1            0 00 10
+**      0            0 00 01
+**      1            0 00 00.1
+**      2            0 00 00.01
+**      3            0 00 00.001
+**      :            0 00 00.000...
+**
+**  2) The largest positive useful value for ndp is determined by the
+**     size of days, the format of double on the target platform, and
+**     the risk of overflowing ihmsf[3].  On a typical platform, for
+**     days up to 1.0, the available floating-point precision might
+**     correspond to ndp=12.  However, the practical limit is typically
+**     ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is
+**     only 16 bits.
+**
+**  3) The absolute value of days may exceed 1.0.  In cases where it
+**     does not, it is up to the caller to test for and handle the
+**     case where days is very nearly 1.0 and rounds up to 24 hours,
+**     by testing for ihmsf[0]=24 and setting ihmsf[0-3] to zero.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int nrs, n;
+   double rs, rm, rh, a, w, ah, am, as, af;
+
+
+/* Handle sign. */
+   *sign = (char) ( ( days >= 0.0 ) ? '+' : '-' );
+
+/* Interval in seconds. */
+   a = ERFA_DAYSEC * fabs(days);
+
+/* Pre-round if resolution coarser than 1s (then pretend ndp=1). */
+   if (ndp < 0) {
+      nrs = 1;
+      for (n = 1; n <= -ndp; n++) {
+          nrs *= (n == 2 || n == 4) ? 6 : 10;
+      }
+      rs = (double) nrs;
+      w = a / rs;
+      a = rs * ERFA_DNINT(w);
+   }
+
+/* Express the unit of each field in resolution units. */
+   nrs = 1;
+   for (n = 1; n <= ndp; n++) {
+      nrs *= 10;
+   }
+   rs = (double) nrs;
+   rm = rs * 60.0;
+   rh = rm * 60.0;
+
+/* Round the interval and express in resolution units. */
+   a = ERFA_DNINT(rs * a);
+
+/* Break into fields. */
+   ah = a / rh;
+   ah = ERFA_DINT(ah);
+   a -= ah * rh;
+   am = a / rm;
+   am = ERFA_DINT(am);
+   a -= am * rm;
+   as = a / rs;
+   as = ERFA_DINT(as);
+   af = a - as * rs;
+
+/* Return results. */
+   ihmsf[0] = (int) ah;
+   ihmsf[1] = (int) am;
+   ihmsf[2] = (int) as;
+   ihmsf[3] = (int) af;
+
+   return;
+
+}
+
+int eraDat(int iy, int im, int id, double fd, double *deltat )
+/*
+**  - - - - - - -
+**   e r a D a t
+**  - - - - - - -
+**
+**  For a given UTC date, calculate delta(AT) = TAI-UTC.
+**
+**     :------------------------------------------:
+**     :                                          :
+**     :                 IMPORTANT                :
+**     :                                          :
+**     :  A new version of this function must be  :
+**     :  produced whenever a new leap second is  :
+**     :  announced.  There are four items to     :
+**     :  change on each such occasion:           :
+**     :                                          :
+**     :  1) A new line must be added to the set  :
+**     :     of statements that initialize the    :
+**     :     array "changes".                     :
+**     :                                          :
+**     :  2) The parameter IYV must be set to     :
+**     :     the current year.                    :
+**     :                                          :
+**     :  3) The "Latest leap second" comment     :
+**     :     below must be set to the new leap    :
+**     :     second date.                         :
+**     :                                          :
+**     :  4) The "This revision" comment, later,  :
+**     :     must be set to the current date.     :
+**     :                                          :
+**     :  Change (2) must also be carried out     :
+**     :  whenever the function is re-issued,     :
+**     :  even if no leap seconds have been       :
+**     :  added.                                  :
+**     :                                          :
+**     :  Latest leap second:  2012 June 30       :
+**     :                                          :
+**     :__________________________________________:
+**
+**  Given:
+**     iy     int      UTC:  year (Notes 1 and 2)
+**     im     int            month (Note 2)
+**     id     int            day (Notes 2 and 3)
+**     fd     double         fraction of day (Note 4)
+**
+**  Returned:
+**     deltat double   TAI minus UTC, seconds
+**
+**  Returned (function value):
+**            int      status (Note 5):
+**                       1 = dubious year (Note 1)
+**                       0 = OK
+**                      -1 = bad year
+**                      -2 = bad month
+**                      -3 = bad day (Note 3)
+**                      -4 = bad fraction (Note 4)
+**
+**  Notes:
+**
+**  1) UTC began at 1960 January 1.0 (JD 2436934.5) and it is improper
+**     to call the function with an earlier date.  If this is attempted,
+**     zero is returned together with a warning status.
+**
+**     Because leap seconds cannot, in principle, be predicted in
+**     advance, a reliable check for dates beyond the valid range is
+**     impossible.  To guard against gross errors, a year five or more
+**     after the release year of the present function (see parameter
+**     IYV) is considered dubious.  In this case a warning status is
+**     returned but the result is computed in the normal way.
+**
+**     For both too-early and too-late years, the warning status is
+**     j=+1.  This is distinct from the error status j=-1, which
+**     signifies a year so early that JD could not be computed.
+**
+**  2) If the specified date is for a day which ends with a leap second,
+**     the UTC-TAI value returned is for the period leading up to the
+**     leap second.  If the date is for a day which begins as a leap
+**     second ends, the UTC-TAI returned is for the period following the
+**     leap second.
+**
+**  3) The day number must be in the normal calendar range, for example
+**     1 through 30 for April.  The "almanac" convention of allowing
+**     such dates as January 0 and December 32 is not supported in this
+**     function, in order to avoid confusion near leap seconds.
+**
+**  4) The fraction of day is used only for dates before the
+**     introduction of leap seconds, the first of which occurred at the
+**     end of 1971.  It is tested for validity (0 to 1 is the valid
+**     range) even if not used;  if invalid, zero is used and status
+**     j=-4 is returned.  For many applications, setting fd to zero is
+**     acceptable;  the resulting error is always less than 3 ms (and
+**     occurs only pre-1972).
+**
+**  5) The status value returned in the case where there are multiple
+**     errors refers to the first error detected.  For example, if the
+**     month and day are 13 and 32 respectively, j=-2 (bad month)
+**     will be returned.
+**
+**  6) In cases where a valid result is not available, zero is returned.
+**
+**  References:
+**
+**  1) For dates from 1961 January 1 onwards, the expressions from the
+**     file ftp://maia.usno.navy.mil/ser7/tai-utc.dat are used.
+**
+**  2) The 5ms timestep at 1961 January 1 is taken from 2.58.1 (p87) of
+**     the 1992 Explanatory Supplement.
+**
+**  Called:
+**     eraCal2jd    Gregorian calendar to Julian Day number
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Release year for this version of eraDat */
+#define IYV (2012)
+
+/* Reference dates (MJD) and drift rates (s/day), pre leap seconds */
+   static const double drift[][2] = {
+      { 37300.0, 0.0012960 },
+      { 37300.0, 0.0012960 },
+      { 37300.0, 0.0012960 },
+      { 37665.0, 0.0011232 },
+      { 37665.0, 0.0011232 },
+      { 38761.0, 0.0012960 },
+      { 38761.0, 0.0012960 },
+      { 38761.0, 0.0012960 },
+      { 38761.0, 0.0012960 },
+      { 38761.0, 0.0012960 },
+      { 38761.0, 0.0012960 },
+      { 38761.0, 0.0012960 },
+      { 39126.0, 0.0025920 },
+      { 39126.0, 0.0025920 }
+   };
+
+/* Number of Delta(AT) expressions before leap seconds were introduced */
+#define NERA1 ((int) (sizeof drift / sizeof (double) / 2))
+
+/* Dates and Delta(AT)s */
+   static const struct {
+      int iyear, month;
+      double delat;
+   } changes[] = {
+      { 1960,  1,  1.4178180 },
+      { 1961,  1,  1.4228180 },
+      { 1961,  8,  1.3728180 },
+      { 1962,  1,  1.8458580 },
+      { 1963, 11,  1.9458580 },
+      { 1964,  1,  3.2401300 },
+      { 1964,  4,  3.3401300 },
+      { 1964,  9,  3.4401300 },
+      { 1965,  1,  3.5401300 },
+      { 1965,  3,  3.6401300 },
+      { 1965,  7,  3.7401300 },
+      { 1965,  9,  3.8401300 },
+      { 1966,  1,  4.3131700 },
+      { 1968,  2,  4.2131700 },
+      { 1972,  1, 10.0       },
+      { 1972,  7, 11.0       },
+      { 1973,  1, 12.0       },
+      { 1974,  1, 13.0       },
+      { 1975,  1, 14.0       },
+      { 1976,  1, 15.0       },
+      { 1977,  1, 16.0       },
+      { 1978,  1, 17.0       },
+      { 1979,  1, 18.0       },
+      { 1980,  1, 19.0       },
+      { 1981,  7, 20.0       },
+      { 1982,  7, 21.0       },
+      { 1983,  7, 22.0       },
+      { 1985,  7, 23.0       },
+      { 1988,  1, 24.0       },
+      { 1990,  1, 25.0       },
+      { 1991,  1, 26.0       },
+      { 1992,  7, 27.0       },
+      { 1993,  7, 28.0       },
+      { 1994,  7, 29.0       },
+      { 1996,  1, 30.0       },
+      { 1997,  7, 31.0       },
+      { 1999,  1, 32.0       },
+      { 2006,  1, 33.0       },
+      { 2009,  1, 34.0       },
+      { 2012,  7, 35.0       }
+   };
+
+/* Number of Delta(AT) changes */
+   const int NDAT = sizeof changes / sizeof changes[0];
+
+/* Miscellaneous local variables */
+   int j, i, m;
+   double da, djm0, djm;
+
+
+/* Initialize the result to zero. */
+   *deltat = da = 0.0;
+
+/* If invalid fraction of a day, set error status and give up. */
+   if (fd < 0.0 || fd > 1.0) return -4;
+
+/* Convert the date into an MJD. */
+   j = eraCal2jd(iy, im, id, &djm0, &djm);
+
+/* If invalid year, month, or day, give up. */
+   if (j < 0) return j;
+
+/* If pre-UTC year, set warning status and give up. */
+   if (iy < changes[0].iyear) return 1;
+
+/* If suspiciously late year, set warning status but proceed. */
+   if (iy > IYV + 5) j = 1;
+
+/* Combine year and month to form a date-ordered integer... */
+   m = 12*iy + im;
+
+/* ...and use it to find the preceding table entry. */
+   for (i = NDAT-1; i >=0; i--) {
+      if (m >= (12 * changes[i].iyear + changes[i].month)) break;
+   }
+
+/* Get the Delta(AT). */
+   da = changes[i].delat;
+
+/* If pre-1972, adjust for drift. */
+   if (i < NERA1) da += (djm + fd - drift[i][0]) * drift[i][1];
+
+/* Return the Delta(AT) value. */
+   *deltat = da;
+
+/* Return the status. */
+   return j;
+
+}
+
+double eraDtdb(double date1, double date2,
+               double ut, double elong, double u, double v)
+/*
+**  - - - - - - - -
+**   e r a D t d b
+**  - - - - - - - -
+**
+**  An approximation to TDB-TT, the difference between barycentric
+**  dynamical time and terrestrial time, for an observer on the Earth.
+**
+**  The different time scales - proper, coordinate and realized - are
+**  related to each other:
+**
+**            TAI             <-  physically realized
+**             :
+**          offset            <-  observed (nominally +32.184s)
+**             :
+**            TT              <-  terrestrial time
+**             :
+**    rate adjustment (L_G)   <-  definition of TT
+**             :
+**            TCG             <-  time scale for GCRS
+**             :
+**      "periodic" terms      <-  eraDtdb  is an implementation
+**             :
+**    rate adjustment (L_C)   <-  function of solar-system ephemeris
+**             :
+**            TCB             <-  time scale for BCRS
+**             :
+**    rate adjustment (-L_B)  <-  definition of TDB
+**             :
+**            TDB             <-  TCB scaled to track TT
+**             :
+**      "periodic" terms      <-  -eraDtdb is an approximation
+**             :
+**            TT              <-  terrestrial time
+**
+**  Adopted values for the various constants can be found in the IERS
+**  Conventions (McCarthy & Petit 2003).
+**
+**  Given:
+**     date1,date2   double  date, TDB (Notes 1-3)
+**     ut            double  universal time (UT1, fraction of one day)
+**     elong         double  longitude (east positive, radians)
+**     u             double  distance from Earth spin axis (km)
+**     v             double  distance north of equatorial plane (km)
+**
+**  Returned (function value):
+**                   double  TDB-TT (seconds)
+**
+**  Notes:
+**
+**  1) The date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**     Although the date is, formally, barycentric dynamical time (TDB),
+**     the terrestrial dynamical time (TT) can be used with no practical
+**     effect on the accuracy of the prediction.
+**
+**  2) TT can be regarded as a coordinate time that is realized as an
+**     offset of 32.184s from International Atomic Time, TAI.  TT is a
+**     specific linear transformation of geocentric coordinate time TCG,
+**     which is the time scale for the Geocentric Celestial Reference
+**     System, GCRS.
+**
+**  3) TDB is a coordinate time, and is a specific linear transformation
+**     of barycentric coordinate time TCB, which is the time scale for
+**     the Barycentric Celestial Reference System, BCRS.
+**
+**  4) The difference TCG-TCB depends on the masses and positions of the
+**     bodies of the solar system and the velocity of the Earth.  It is
+**     dominated by a rate difference, the residual being of a periodic
+**     character.  The latter, which is modeled by the present function,
+**     comprises a main (annual) sinusoidal term of amplitude
+**     approximately 0.00166 seconds, plus planetary terms up to about
+**     20 microseconds, and lunar and diurnal terms up to 2 microseconds.
+**     These effects come from the changing transverse Doppler effect
+**     and gravitational red-shift as the observer (on the Earth's
+**     surface) experiences variations in speed (with respect to the
+**     BCRS) and gravitational potential.
+**
+**  5) TDB can be regarded as the same as TCB but with a rate adjustment
+**     to keep it close to TT, which is convenient for many applications.
+**     The history of successive attempts to define TDB is set out in
+**     Resolution 3 adopted by the IAU General Assembly in 2006, which
+**     defines a fixed TDB(TCB) transformation that is consistent with
+**     contemporary solar-system ephemerides.  Future ephemerides will
+**     imply slightly changed transformations between TCG and TCB, which
+**     could introduce a linear drift between TDB and TT;  however, any
+**     such drift is unlikely to exceed 1 nanosecond per century.
+**
+**  6) The geocentric TDB-TT model used in the present function is that of
+**     Fairhead & Bretagnon (1990), in its full form.  It was originally
+**     supplied by Fairhead (private communications with P.T.Wallace,
+**     1990) as a Fortran subroutine.  The present C function contains an
+**     adaptation of the Fairhead code.  The numerical results are
+**     essentially unaffected by the changes, the differences with
+**     respect to the Fairhead & Bretagnon original being at the 1e-20 s
+**     level.
+**
+**     The topocentric part of the model is from Moyer (1981) and
+**     Murray (1983), with fundamental arguments adapted from
+**     Simon et al. 1994.  It is an approximation to the expression
+**     ( v / c ) . ( r / c ), where v is the barycentric velocity of
+**     the Earth, r is the geocentric position of the observer and
+**     c is the speed of light.
+**
+**     By supplying zeroes for u and v, the topocentric part of the
+**     model can be nullified, and the function will return the Fairhead
+**     & Bretagnon result alone.
+**
+**  7) During the interval 1950-2050, the absolute accuracy is better
+**     than +/- 3 nanoseconds relative to time ephemerides obtained by
+**     direct numerical integrations based on the JPL DE405 solar system
+**     ephemeris.
+**
+**  8) It must be stressed that the present function is merely a model,
+**     and that numerical integration of solar-system ephemerides is the
+**     definitive method for predicting the relationship between TCG and
+**     TCB and hence between TT and TDB.
+**
+**  References:
+**
+**     Fairhead, L., & Bretagnon, P., Astron.Astrophys., 229, 240-247
+**     (1990).
+**
+**     IAU 2006 Resolution 3.
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Moyer, T.D., Cel.Mech., 23, 33 (1981).
+**
+**     Murray, C.A., Vectorial Astrometry, Adam Hilger (1983).
+**
+**     Seidelmann, P.K. et al., Explanatory Supplement to the
+**     Astronomical Almanac, Chapter 2, University Science Books (1992).
+**
+**     Simon, J.L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G. & Laskar, J., Astron.Astrophys., 282, 663-683 (1994).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t, tsol, w, elsun, emsun, d, elj, els, wt, w0, w1, w2, w3, w4,
+          wf, wj;
+   int j;
+
+/*
+** =====================
+** Fairhead et al. model
+** =====================
+**
+** 787 sets of three coefficients.
+**
+** Each set is
+**    amplitude (microseconds)
+**      frequency (radians per Julian millennium since J2000.0)
+**      phase (radians)
+**
+** Sets   1-474 are the T**0 terms
+**  "   475-679  "   "  T**1
+**  "   680-764  "   "  T**2
+**  "   765-784  "   "  T**3
+**  "   785-787  "   "  T**4
+*/
+
+   static const double fairhd[787][3] = {
+   /* 1, 10 */
+      { 1656.674564e-6,     6283.075849991,  6.240054195 },
+      {   22.417471e-6,     5753.384884897,  4.296977442 },
+      {   13.839792e-6,    12566.151699983,  6.196904410 },
+      {    4.770086e-6,      529.690965095,  0.444401603 },
+      {    4.676740e-6,     6069.776754553,  4.021195093 },
+      {    2.256707e-6,      213.299095438,  5.543113262 },
+      {    1.694205e-6,      -3.523118349,   5.025132748 },
+      {    1.554905e-6,    77713.771467920,  5.198467090 },
+      {    1.276839e-6,     7860.419392439,  5.988822341 },
+      {    1.193379e-6,     5223.693919802,  3.649823730 },
+   /* 11, 20 */
+      {    1.115322e-6,     3930.209696220,  1.422745069 },
+      {    0.794185e-6,    11506.769769794,  2.322313077 },
+      {    0.447061e-6,       26.298319800,  3.615796498 },
+      {    0.435206e-6,     -398.149003408,  4.349338347 },
+      {    0.600309e-6,     1577.343542448,  2.678271909 },
+      {    0.496817e-6,     6208.294251424,  5.696701824 },
+      {    0.486306e-6,     5884.926846583,  0.520007179 },
+      {    0.432392e-6,       74.781598567,  2.435898309 },
+      {    0.468597e-6,     6244.942814354,  5.866398759 },
+      {    0.375510e-6,     5507.553238667,  4.103476804 },
+   /* 21, 30 */
+      {    0.243085e-6,     -775.522611324,  3.651837925 },
+      {    0.173435e-6,    18849.227549974,  6.153743485 },
+      {    0.230685e-6,     5856.477659115,  4.773852582 },
+      {    0.203747e-6,    12036.460734888,  4.333987818 },
+      {    0.143935e-6,     -796.298006816,  5.957517795 },
+      {    0.159080e-6,    10977.078804699,  1.890075226 },
+      {    0.119979e-6,       38.133035638,  4.551585768 },
+      {    0.118971e-6,     5486.777843175,  1.914547226 },
+      {    0.116120e-6,     1059.381930189,  0.873504123 },
+      {    0.137927e-6,    11790.629088659,  1.135934669 },
+   /* 31, 40 */
+      {    0.098358e-6,     2544.314419883,  0.092793886 },
+      {    0.101868e-6,    -5573.142801634,  5.984503847 },
+      {    0.080164e-6,      206.185548437,  2.095377709 },
+      {    0.079645e-6,     4694.002954708,  2.949233637 },
+      {    0.062617e-6,       20.775395492,  2.654394814 },
+      {    0.075019e-6,     2942.463423292,  4.980931759 },
+      {    0.064397e-6,     5746.271337896,  1.280308748 },
+      {    0.063814e-6,     5760.498431898,  4.167901731 },
+      {    0.048042e-6,     2146.165416475,  1.495846011 },
+      {    0.048373e-6,      155.420399434,  2.251573730 },
+   /* 41, 50 */
+      {    0.058844e-6,      426.598190876,  4.839650148 },
+      {    0.046551e-6,       -0.980321068,  0.921573539 },
+      {    0.054139e-6,    17260.154654690,  3.411091093 },
+      {    0.042411e-6,     6275.962302991,  2.869567043 },
+      {    0.040184e-6,       -7.113547001,  3.565975565 },
+      {    0.036564e-6,     5088.628839767,  3.324679049 },
+      {    0.040759e-6,    12352.852604545,  3.981496998 },
+      {    0.036507e-6,      801.820931124,  6.248866009 },
+      {    0.036955e-6,     3154.687084896,  5.071801441 },
+      {    0.042732e-6,      632.783739313,  5.720622217 },
+   /* 51, 60 */
+      {    0.042560e-6,   161000.685737473,  1.270837679 },
+      {    0.040480e-6,    15720.838784878,  2.546610123 },
+      {    0.028244e-6,    -6286.598968340,  5.069663519 },
+      {    0.033477e-6,     6062.663207553,  4.144987272 },
+      {    0.034867e-6,      522.577418094,  5.210064075 },
+      {    0.032438e-6,     6076.890301554,  0.749317412 },
+      {    0.030215e-6,     7084.896781115,  3.389610345 },
+      {    0.029247e-6,   -71430.695617928,  4.183178762 },
+      {    0.033529e-6,     9437.762934887,  2.404714239 },
+      {    0.032423e-6,     8827.390269875,  5.541473556 },
+   /* 61, 70 */
+      {    0.027567e-6,     6279.552731642,  5.040846034 },
+      {    0.029862e-6,    12139.553509107,  1.770181024 },
+      {    0.022509e-6,    10447.387839604,  1.460726241 },
+      {    0.020937e-6,     8429.241266467,  0.652303414 },
+      {    0.020322e-6,      419.484643875,  3.735430632 },
+      {    0.024816e-6,    -1194.447010225,  1.087136918 },
+      {    0.025196e-6,     1748.016413067,  2.901883301 },
+      {    0.021691e-6,    14143.495242431,  5.952658009 },
+      {    0.017673e-6,     6812.766815086,  3.186129845 },
+      {    0.022567e-6,     6133.512652857,  3.307984806 },
+   /* 71, 80 */
+      {    0.016155e-6,    10213.285546211,  1.331103168 },
+      {    0.014751e-6,     1349.867409659,  4.308933301 },
+      {    0.015949e-6,     -220.412642439,  4.005298270 },
+      {    0.015974e-6,    -2352.866153772,  6.145309371 },
+      {    0.014223e-6,    17789.845619785,  2.104551349 },
+      {    0.017806e-6,       73.297125859,  3.475975097 },
+      {    0.013671e-6,     -536.804512095,  5.971672571 },
+      {    0.011942e-6,     8031.092263058,  2.053414715 },
+      {    0.014318e-6,    16730.463689596,  3.016058075 },
+      {    0.012462e-6,      103.092774219,  1.737438797 },
+   /* 81, 90 */
+      {    0.010962e-6,        3.590428652,  2.196567739 },
+      {    0.015078e-6,    19651.048481098,  3.969480770 },
+      {    0.010396e-6,      951.718406251,  5.717799605 },
+      {    0.011707e-6,    -4705.732307544,  2.654125618 },
+      {    0.010453e-6,     5863.591206116,  1.913704550 },
+      {    0.012420e-6,     4690.479836359,  4.734090399 },
+      {    0.011847e-6,     5643.178563677,  5.489005403 },
+      {    0.008610e-6,     3340.612426700,  3.661698944 },
+      {    0.011622e-6,     5120.601145584,  4.863931876 },
+      {    0.010825e-6,      553.569402842,  0.842715011 },
+   /* 91, 100 */
+      {    0.008666e-6,     -135.065080035,  3.293406547 },
+      {    0.009963e-6,      149.563197135,  4.870690598 },
+      {    0.009858e-6,     6309.374169791,  1.061816410 },
+      {    0.007959e-6,      316.391869657,  2.465042647 },
+      {    0.010099e-6,      283.859318865,  1.942176992 },
+      {    0.007147e-6,     -242.728603974,  3.661486981 },
+      {    0.007505e-6,     5230.807466803,  4.920937029 },
+      {    0.008323e-6,    11769.853693166,  1.229392026 },
+      {    0.007490e-6,    -6256.777530192,  3.658444681 },
+      {    0.009370e-6,   149854.400134205,  0.673880395 },
+   /* 101, 110 */
+      {    0.007117e-6,       38.027672636,  5.294249518 },
+      {    0.007857e-6,    12168.002696575,  0.525733528 },
+      {    0.007019e-6,     6206.809778716,  0.837688810 },
+      {    0.006056e-6,      955.599741609,  4.194535082 },
+      {    0.008107e-6,    13367.972631107,  3.793235253 },
+      {    0.006731e-6,     5650.292110678,  5.639906583 },
+      {    0.007332e-6,       36.648562930,  0.114858677 },
+      {    0.006366e-6,     4164.311989613,  2.262081818 },
+      {    0.006858e-6,     5216.580372801,  0.642063318 },
+      {    0.006919e-6,     6681.224853400,  6.018501522 },
+   /* 111, 120 */
+      {    0.006826e-6,     7632.943259650,  3.458654112 },
+      {    0.005308e-6,    -1592.596013633,  2.500382359 },
+      {    0.005096e-6,    11371.704689758,  2.547107806 },
+      {    0.004841e-6,     5333.900241022,  0.437078094 },
+      {    0.005582e-6,     5966.683980335,  2.246174308 },
+      {    0.006304e-6,    11926.254413669,  2.512929171 },
+      {    0.006603e-6,    23581.258177318,  5.393136889 },
+      {    0.005123e-6,       -1.484472708,  2.999641028 },
+      {    0.004648e-6,     1589.072895284,  1.275847090 },
+      {    0.005119e-6,     6438.496249426,  1.486539246 },
+   /* 121, 130 */
+      {    0.004521e-6,     4292.330832950,  6.140635794 },
+      {    0.005680e-6,    23013.539539587,  4.557814849 },
+      {    0.005488e-6,       -3.455808046,  0.090675389 },
+      {    0.004193e-6,     7234.794256242,  4.869091389 },
+      {    0.003742e-6,     7238.675591600,  4.691976180 },
+      {    0.004148e-6,     -110.206321219,  3.016173439 },
+      {    0.004553e-6,    11499.656222793,  5.554998314 },
+      {    0.004892e-6,     5436.993015240,  1.475415597 },
+      {    0.004044e-6,     4732.030627343,  1.398784824 },
+      {    0.004164e-6,    12491.370101415,  5.650931916 },
+   /* 131, 140 */
+      {    0.004349e-6,    11513.883316794,  2.181745369 },
+      {    0.003919e-6,    12528.018664345,  5.823319737 },
+      {    0.003129e-6,     6836.645252834,  0.003844094 },
+      {    0.004080e-6,    -7058.598461315,  3.690360123 },
+      {    0.003270e-6,       76.266071276,  1.517189902 },
+      {    0.002954e-6,     6283.143160294,  4.447203799 },
+      {    0.002872e-6,       28.449187468,  1.158692983 },
+      {    0.002881e-6,      735.876513532,  0.349250250 },
+      {    0.003279e-6,     5849.364112115,  4.893384368 },
+      {    0.003625e-6,     6209.778724132,  1.473760578 },
+   /* 141, 150 */
+      {    0.003074e-6,      949.175608970,  5.185878737 },
+      {    0.002775e-6,     9917.696874510,  1.030026325 },
+      {    0.002646e-6,    10973.555686350,  3.918259169 },
+      {    0.002575e-6,    25132.303399966,  6.109659023 },
+      {    0.003500e-6,      263.083923373,  1.892100742 },
+      {    0.002740e-6,    18319.536584880,  4.320519510 },
+      {    0.002464e-6,      202.253395174,  4.698203059 },
+      {    0.002409e-6,        2.542797281,  5.325009315 },
+      {    0.003354e-6,   -90955.551694697,  1.942656623 },
+      {    0.002296e-6,     6496.374945429,  5.061810696 },
+   /* 151, 160 */
+      {    0.003002e-6,     6172.869528772,  2.797822767 },
+      {    0.003202e-6,    27511.467873537,  0.531673101 },
+      {    0.002954e-6,    -6283.008539689,  4.533471191 },
+      {    0.002353e-6,      639.897286314,  3.734548088 },
+      {    0.002401e-6,    16200.772724501,  2.605547070 },
+      {    0.003053e-6,   233141.314403759,  3.029030662 },
+      {    0.003024e-6,    83286.914269554,  2.355556099 },
+      {    0.002863e-6,    17298.182327326,  5.240963796 },
+      {    0.002103e-6,    -7079.373856808,  5.756641637 },
+      {    0.002303e-6,    83996.847317911,  2.013686814 },
+   /* 161, 170 */
+      {    0.002303e-6,    18073.704938650,  1.089100410 },
+      {    0.002381e-6,       63.735898303,  0.759188178 },
+      {    0.002493e-6,     6386.168624210,  0.645026535 },
+      {    0.002366e-6,        3.932153263,  6.215885448 },
+      {    0.002169e-6,    11015.106477335,  4.845297676 },
+      {    0.002397e-6,     6243.458341645,  3.809290043 },
+      {    0.002183e-6,     1162.474704408,  6.179611691 },
+      {    0.002353e-6,     6246.427287062,  4.781719760 },
+      {    0.002199e-6,     -245.831646229,  5.956152284 },
+      {    0.001729e-6,     3894.181829542,  1.264976635 },
+   /* 171, 180 */
+      {    0.001896e-6,    -3128.388765096,  4.914231596 },
+      {    0.002085e-6,       35.164090221,  1.405158503 },
+      {    0.002024e-6,    14712.317116458,  2.752035928 },
+      {    0.001737e-6,     6290.189396992,  5.280820144 },
+      {    0.002229e-6,      491.557929457,  1.571007057 },
+      {    0.001602e-6,    14314.168113050,  4.203664806 },
+      {    0.002186e-6,      454.909366527,  1.402101526 },
+      {    0.001897e-6,    22483.848574493,  4.167932508 },
+      {    0.001825e-6,    -3738.761430108,  0.545828785 },
+      {    0.001894e-6,     1052.268383188,  5.817167450 },
+   /* 181, 190 */
+      {    0.001421e-6,       20.355319399,  2.419886601 },
+      {    0.001408e-6,    10984.192351700,  2.732084787 },
+      {    0.001847e-6,    10873.986030480,  2.903477885 },
+      {    0.001391e-6,    -8635.942003763,  0.593891500 },
+      {    0.001388e-6,       -7.046236698,  1.166145902 },
+      {    0.001810e-6,   -88860.057071188,  0.487355242 },
+      {    0.001288e-6,    -1990.745017041,  3.913022880 },
+      {    0.001297e-6,    23543.230504682,  3.063805171 },
+      {    0.001335e-6,     -266.607041722,  3.995764039 },
+      {    0.001376e-6,    10969.965257698,  5.152914309 },
+   /* 191, 200 */
+      {    0.001745e-6,   244287.600007027,  3.626395673 },
+      {    0.001649e-6,    31441.677569757,  1.952049260 },
+      {    0.001416e-6,     9225.539273283,  4.996408389 },
+      {    0.001238e-6,     4804.209275927,  5.503379738 },
+      {    0.001472e-6,     4590.910180489,  4.164913291 },
+      {    0.001169e-6,     6040.347246017,  5.841719038 },
+      {    0.001039e-6,     5540.085789459,  2.769753519 },
+      {    0.001004e-6,     -170.672870619,  0.755008103 },
+      {    0.001284e-6,    10575.406682942,  5.306538209 },
+      {    0.001278e-6,       71.812653151,  4.713486491 },
+   /* 201, 210 */
+      {    0.001321e-6,    18209.330263660,  2.624866359 },
+      {    0.001297e-6,    21228.392023546,  0.382603541 },
+      {    0.000954e-6,     6282.095528923,  0.882213514 },
+      {    0.001145e-6,     6058.731054289,  1.169483931 },
+      {    0.000979e-6,     5547.199336460,  5.448375984 },
+      {    0.000987e-6,    -6262.300454499,  2.656486959 },
+      {    0.001070e-6,  -154717.609887482,  1.827624012 },
+      {    0.000991e-6,     4701.116501708,  4.387001801 },
+      {    0.001155e-6,      -14.227094002,  3.042700750 },
+      {    0.001176e-6,      277.034993741,  3.335519004 },
+   /* 211, 220 */
+      {    0.000890e-6,    13916.019109642,  5.601498297 },
+      {    0.000884e-6,    -1551.045222648,  1.088831705 },
+      {    0.000876e-6,     5017.508371365,  3.969902609 },
+      {    0.000806e-6,    15110.466119866,  5.142876744 },
+      {    0.000773e-6,    -4136.910433516,  0.022067765 },
+      {    0.001077e-6,      175.166059800,  1.844913056 },
+      {    0.000954e-6,    -6284.056171060,  0.968480906 },
+      {    0.000737e-6,     5326.786694021,  4.923831588 },
+      {    0.000845e-6,     -433.711737877,  4.749245231 },
+      {    0.000819e-6,     8662.240323563,  5.991247817 },
+   /* 221, 230 */
+      {    0.000852e-6,      199.072001436,  2.189604979 },
+      {    0.000723e-6,    17256.631536341,  6.068719637 },
+      {    0.000940e-6,     6037.244203762,  6.197428148 },
+      {    0.000885e-6,    11712.955318231,  3.280414875 },
+      {    0.000706e-6,    12559.038152982,  2.824848947 },
+      {    0.000732e-6,     2379.164473572,  2.501813417 },
+      {    0.000764e-6,    -6127.655450557,  2.236346329 },
+      {    0.000908e-6,      131.541961686,  2.521257490 },
+      {    0.000907e-6,    35371.887265976,  3.370195967 },
+      {    0.000673e-6,     1066.495477190,  3.876512374 },
+   /* 231, 240 */
+      {    0.000814e-6,    17654.780539750,  4.627122566 },
+      {    0.000630e-6,       36.027866677,  0.156368499 },
+      {    0.000798e-6,      515.463871093,  5.151962502 },
+      {    0.000798e-6,      148.078724426,  5.909225055 },
+      {    0.000806e-6,      309.278322656,  6.054064447 },
+      {    0.000607e-6,      -39.617508346,  2.839021623 },
+      {    0.000601e-6,      412.371096874,  3.984225404 },
+      {    0.000646e-6,    11403.676995575,  3.852959484 },
+      {    0.000704e-6,    13521.751441591,  2.300991267 },
+      {    0.000603e-6,   -65147.619767937,  4.140083146 },
+   /* 241, 250 */
+      {    0.000609e-6,    10177.257679534,  0.437122327 },
+      {    0.000631e-6,     5767.611978898,  4.026532329 },
+      {    0.000576e-6,    11087.285125918,  4.760293101 },
+      {    0.000674e-6,    14945.316173554,  6.270510511 },
+      {    0.000726e-6,     5429.879468239,  6.039606892 },
+      {    0.000710e-6,    28766.924424484,  5.672617711 },
+      {    0.000647e-6,    11856.218651625,  3.397132627 },
+      {    0.000678e-6,    -5481.254918868,  6.249666675 },
+      {    0.000618e-6,    22003.914634870,  2.466427018 },
+      {    0.000738e-6,     6134.997125565,  2.242668890 },
+   /* 251, 260 */
+      {    0.000660e-6,      625.670192312,  5.864091907 },
+      {    0.000694e-6,     3496.032826134,  2.668309141 },
+      {    0.000531e-6,     6489.261398429,  1.681888780 },
+      {    0.000611e-6,  -143571.324284214,  2.424978312 },
+      {    0.000575e-6,    12043.574281889,  4.216492400 },
+      {    0.000553e-6,    12416.588502848,  4.772158039 },
+      {    0.000689e-6,     4686.889407707,  6.224271088 },
+      {    0.000495e-6,     7342.457780181,  3.817285811 },
+      {    0.000567e-6,     3634.621024518,  1.649264690 },
+      {    0.000515e-6,    18635.928454536,  3.945345892 },
+   /* 261, 270 */
+      {    0.000486e-6,     -323.505416657,  4.061673868 },
+      {    0.000662e-6,    25158.601719765,  1.794058369 },
+      {    0.000509e-6,      846.082834751,  3.053874588 },
+      {    0.000472e-6,   -12569.674818332,  5.112133338 },
+      {    0.000461e-6,     6179.983075773,  0.513669325 },
+      {    0.000641e-6,    83467.156352816,  3.210727723 },
+      {    0.000520e-6,    10344.295065386,  2.445597761 },
+      {    0.000493e-6,    18422.629359098,  1.676939306 },
+      {    0.000478e-6,     1265.567478626,  5.487314569 },
+      {    0.000472e-6,      -18.159247265,  1.999707589 },
+   /* 271, 280 */
+      {    0.000559e-6,    11190.377900137,  5.783236356 },
+      {    0.000494e-6,     9623.688276691,  3.022645053 },
+      {    0.000463e-6,     5739.157790895,  1.411223013 },
+      {    0.000432e-6,    16858.482532933,  1.179256434 },
+      {    0.000574e-6,    72140.628666286,  1.758191830 },
+      {    0.000484e-6,    17267.268201691,  3.290589143 },
+      {    0.000550e-6,     4907.302050146,  0.864024298 },
+      {    0.000399e-6,       14.977853527,  2.094441910 },
+      {    0.000491e-6,      224.344795702,  0.878372791 },
+      {    0.000432e-6,    20426.571092422,  6.003829241 },
+   /* 281, 290 */
+      {    0.000481e-6,     5749.452731634,  4.309591964 },
+      {    0.000480e-6,     5757.317038160,  1.142348571 },
+      {    0.000485e-6,     6702.560493867,  0.210580917 },
+      {    0.000426e-6,     6055.549660552,  4.274476529 },
+      {    0.000480e-6,     5959.570433334,  5.031351030 },
+      {    0.000466e-6,    12562.628581634,  4.959581597 },
+      {    0.000520e-6,    39302.096962196,  4.788002889 },
+      {    0.000458e-6,    12132.439962106,  1.880103788 },
+      {    0.000470e-6,    12029.347187887,  1.405611197 },
+      {    0.000416e-6,    -7477.522860216,  1.082356330 },
+   /* 291, 300 */
+      {    0.000449e-6,    11609.862544012,  4.179989585 },
+      {    0.000465e-6,    17253.041107690,  0.353496295 },
+      {    0.000362e-6,    -4535.059436924,  1.583849576 },
+      {    0.000383e-6,    21954.157609398,  3.747376371 },
+      {    0.000389e-6,       17.252277143,  1.395753179 },
+      {    0.000331e-6,    18052.929543158,  0.566790582 },
+      {    0.000430e-6,    13517.870106233,  0.685827538 },
+      {    0.000368e-6,    -5756.908003246,  0.731374317 },
+      {    0.000330e-6,    10557.594160824,  3.710043680 },
+      {    0.000332e-6,    20199.094959633,  1.652901407 },
+   /* 301, 310 */
+      {    0.000384e-6,    11933.367960670,  5.827781531 },
+      {    0.000387e-6,    10454.501386605,  2.541182564 },
+      {    0.000325e-6,    15671.081759407,  2.178850542 },
+      {    0.000318e-6,      138.517496871,  2.253253037 },
+      {    0.000305e-6,     9388.005909415,  0.578340206 },
+      {    0.000352e-6,     5749.861766548,  3.000297967 },
+      {    0.000311e-6,     6915.859589305,  1.693574249 },
+      {    0.000297e-6,    24072.921469776,  1.997249392 },
+      {    0.000363e-6,     -640.877607382,  5.071820966 },
+      {    0.000323e-6,    12592.450019783,  1.072262823 },
+   /* 311, 320 */
+      {    0.000341e-6,    12146.667056108,  4.700657997 },
+      {    0.000290e-6,     9779.108676125,  1.812320441 },
+      {    0.000342e-6,     6132.028180148,  4.322238614 },
+      {    0.000329e-6,     6268.848755990,  3.033827743 },
+      {    0.000374e-6,    17996.031168222,  3.388716544 },
+      {    0.000285e-6,     -533.214083444,  4.687313233 },
+      {    0.000338e-6,     6065.844601290,  0.877776108 },
+      {    0.000276e-6,       24.298513841,  0.770299429 },
+      {    0.000336e-6,    -2388.894020449,  5.353796034 },
+      {    0.000290e-6,     3097.883822726,  4.075291557 },
+   /* 321, 330 */
+      {    0.000318e-6,      709.933048357,  5.941207518 },
+      {    0.000271e-6,    13095.842665077,  3.208912203 },
+      {    0.000331e-6,     6073.708907816,  4.007881169 },
+      {    0.000292e-6,      742.990060533,  2.714333592 },
+      {    0.000362e-6,    29088.811415985,  3.215977013 },
+      {    0.000280e-6,    12359.966151546,  0.710872502 },
+      {    0.000267e-6,    10440.274292604,  4.730108488 },
+      {    0.000262e-6,      838.969287750,  1.327720272 },
+      {    0.000250e-6,    16496.361396202,  0.898769761 },
+      {    0.000325e-6,    20597.243963041,  0.180044365 },
+   /* 331, 340 */
+      {    0.000268e-6,     6148.010769956,  5.152666276 },
+      {    0.000284e-6,     5636.065016677,  5.655385808 },
+      {    0.000301e-6,     6080.822454817,  2.135396205 },
+      {    0.000294e-6,     -377.373607916,  3.708784168 },
+      {    0.000236e-6,     2118.763860378,  1.733578756 },
+      {    0.000234e-6,     5867.523359379,  5.575209112 },
+      {    0.000268e-6,  -226858.238553767,  0.069432392 },
+      {    0.000265e-6,   167283.761587465,  4.369302826 },
+      {    0.000280e-6,    28237.233459389,  5.304829118 },
+      {    0.000292e-6,    12345.739057544,  4.096094132 },
+   /* 341, 350 */
+      {    0.000223e-6,    19800.945956225,  3.069327406 },
+      {    0.000301e-6,    43232.306658416,  6.205311188 },
+      {    0.000264e-6,    18875.525869774,  1.417263408 },
+      {    0.000304e-6,    -1823.175188677,  3.409035232 },
+      {    0.000301e-6,      109.945688789,  0.510922054 },
+      {    0.000260e-6,      813.550283960,  2.389438934 },
+      {    0.000299e-6,   316428.228673312,  5.384595078 },
+      {    0.000211e-6,     5756.566278634,  3.789392838 },
+      {    0.000209e-6,     5750.203491159,  1.661943545 },
+      {    0.000240e-6,    12489.885628707,  5.684549045 },
+   /* 351, 360 */
+      {    0.000216e-6,     6303.851245484,  3.862942261 },
+      {    0.000203e-6,     1581.959348283,  5.549853589 },
+      {    0.000200e-6,     5642.198242609,  1.016115785 },
+      {    0.000197e-6,      -70.849445304,  4.690702525 },
+      {    0.000227e-6,     6287.008003254,  2.911891613 },
+      {    0.000197e-6,      533.623118358,  1.048982898 },
+      {    0.000205e-6,    -6279.485421340,  1.829362730 },
+      {    0.000209e-6,   -10988.808157535,  2.636140084 },
+      {    0.000208e-6,     -227.526189440,  4.127883842 },
+      {    0.000191e-6,      415.552490612,  4.401165650 },
+   /* 361, 370 */
+      {    0.000190e-6,    29296.615389579,  4.175658539 },
+      {    0.000264e-6,    66567.485864652,  4.601102551 },
+      {    0.000256e-6,    -3646.350377354,  0.506364778 },
+      {    0.000188e-6,    13119.721102825,  2.032195842 },
+      {    0.000185e-6,     -209.366942175,  4.694756586 },
+      {    0.000198e-6,    25934.124331089,  3.832703118 },
+      {    0.000195e-6,     4061.219215394,  3.308463427 },
+      {    0.000234e-6,     5113.487598583,  1.716090661 },
+      {    0.000188e-6,     1478.866574064,  5.686865780 },
+      {    0.000222e-6,    11823.161639450,  1.942386641 },
+   /* 371, 380 */
+      {    0.000181e-6,    10770.893256262,  1.999482059 },
+      {    0.000171e-6,     6546.159773364,  1.182807992 },
+      {    0.000206e-6,       70.328180442,  5.934076062 },
+      {    0.000169e-6,    20995.392966449,  2.169080622 },
+      {    0.000191e-6,    10660.686935042,  5.405515999 },
+      {    0.000228e-6,    33019.021112205,  4.656985514 },
+      {    0.000184e-6,    -4933.208440333,  3.327476868 },
+      {    0.000220e-6,     -135.625325010,  1.765430262 },
+      {    0.000166e-6,    23141.558382925,  3.454132746 },
+      {    0.000191e-6,     6144.558353121,  5.020393445 },
+   /* 381, 390 */
+      {    0.000180e-6,     6084.003848555,  0.602182191 },
+      {    0.000163e-6,    17782.732072784,  4.960593133 },
+      {    0.000225e-6,    16460.333529525,  2.596451817 },
+      {    0.000222e-6,     5905.702242076,  3.731990323 },
+      {    0.000204e-6,      227.476132789,  5.636192701 },
+      {    0.000159e-6,    16737.577236597,  3.600691544 },
+      {    0.000200e-6,     6805.653268085,  0.868220961 },
+      {    0.000187e-6,    11919.140866668,  2.629456641 },
+      {    0.000161e-6,      127.471796607,  2.862574720 },
+      {    0.000205e-6,     6286.666278643,  1.742882331 },
+   /* 391, 400 */
+      {    0.000189e-6,      153.778810485,  4.812372643 },
+      {    0.000168e-6,    16723.350142595,  0.027860588 },
+      {    0.000149e-6,    11720.068865232,  0.659721876 },
+      {    0.000189e-6,     5237.921013804,  5.245313000 },
+      {    0.000143e-6,     6709.674040867,  4.317625647 },
+      {    0.000146e-6,     4487.817406270,  4.815297007 },
+      {    0.000144e-6,     -664.756045130,  5.381366880 },
+      {    0.000175e-6,     5127.714692584,  4.728443327 },
+      {    0.000162e-6,     6254.626662524,  1.435132069 },
+      {    0.000187e-6,    47162.516354635,  1.354371923 },
+   /* 401, 410 */
+      {    0.000146e-6,    11080.171578918,  3.369695406 },
+      {    0.000180e-6,     -348.924420448,  2.490902145 },
+      {    0.000148e-6,      151.047669843,  3.799109588 },
+      {    0.000157e-6,     6197.248551160,  1.284375887 },
+      {    0.000167e-6,      146.594251718,  0.759969109 },
+      {    0.000133e-6,    -5331.357443741,  5.409701889 },
+      {    0.000154e-6,       95.979227218,  3.366890614 },
+      {    0.000148e-6,    -6418.140930027,  3.384104996 },
+      {    0.000128e-6,    -6525.804453965,  3.803419985 },
+      {    0.000130e-6,    11293.470674356,  0.939039445 },
+   /* 411, 420 */
+      {    0.000152e-6,    -5729.506447149,  0.734117523 },
+      {    0.000138e-6,      210.117701700,  2.564216078 },
+      {    0.000123e-6,     6066.595360816,  4.517099537 },
+      {    0.000140e-6,    18451.078546566,  0.642049130 },
+      {    0.000126e-6,    11300.584221356,  3.485280663 },
+      {    0.000119e-6,    10027.903195729,  3.217431161 },
+      {    0.000151e-6,     4274.518310832,  4.404359108 },
+      {    0.000117e-6,     6072.958148291,  0.366324650 },
+      {    0.000165e-6,    -7668.637425143,  4.298212528 },
+      {    0.000117e-6,    -6245.048177356,  5.379518958 },
+   /* 421, 430 */
+      {    0.000130e-6,    -5888.449964932,  4.527681115 },
+      {    0.000121e-6,     -543.918059096,  6.109429504 },
+      {    0.000162e-6,     9683.594581116,  5.720092446 },
+      {    0.000141e-6,     6219.339951688,  0.679068671 },
+      {    0.000118e-6,    22743.409379516,  4.881123092 },
+      {    0.000129e-6,     1692.165669502,  0.351407289 },
+      {    0.000126e-6,     5657.405657679,  5.146592349 },
+      {    0.000114e-6,      728.762966531,  0.520791814 },
+      {    0.000120e-6,       52.596639600,  0.948516300 },
+      {    0.000115e-6,       65.220371012,  3.504914846 },
+   /* 431, 440 */
+      {    0.000126e-6,     5881.403728234,  5.577502482 },
+      {    0.000158e-6,   163096.180360983,  2.957128968 },
+      {    0.000134e-6,    12341.806904281,  2.598576764 },
+      {    0.000151e-6,    16627.370915377,  3.985702050 },
+      {    0.000109e-6,     1368.660252845,  0.014730471 },
+      {    0.000131e-6,     6211.263196841,  0.085077024 },
+      {    0.000146e-6,     5792.741760812,  0.708426604 },
+      {    0.000146e-6,      -77.750543984,  3.121576600 },
+      {    0.000107e-6,     5341.013788022,  0.288231904 },
+      {    0.000138e-6,     6281.591377283,  2.797450317 },
+   /* 441, 450 */
+      {    0.000113e-6,    -6277.552925684,  2.788904128 },
+      {    0.000115e-6,     -525.758811831,  5.895222200 },
+      {    0.000138e-6,     6016.468808270,  6.096188999 },
+      {    0.000139e-6,    23539.707386333,  2.028195445 },
+      {    0.000146e-6,    -4176.041342449,  4.660008502 },
+      {    0.000107e-6,    16062.184526117,  4.066520001 },
+      {    0.000142e-6,    83783.548222473,  2.936315115 },
+      {    0.000128e-6,     9380.959672717,  3.223844306 },
+      {    0.000135e-6,     6205.325306007,  1.638054048 },
+      {    0.000101e-6,     2699.734819318,  5.481603249 },
+   /* 451, 460 */
+      {    0.000104e-6,     -568.821874027,  2.205734493 },
+      {    0.000103e-6,     6321.103522627,  2.440421099 },
+      {    0.000119e-6,     6321.208885629,  2.547496264 },
+      {    0.000138e-6,     1975.492545856,  2.314608466 },
+      {    0.000121e-6,      137.033024162,  4.539108237 },
+      {    0.000123e-6,    19402.796952817,  4.538074405 },
+      {    0.000119e-6,    22805.735565994,  2.869040566 },
+      {    0.000133e-6,    64471.991241142,  6.056405489 },
+      {    0.000129e-6,      -85.827298831,  2.540635083 },
+      {    0.000131e-6,    13613.804277336,  4.005732868 },
+   /* 461, 470 */
+      {    0.000104e-6,     9814.604100291,  1.959967212 },
+      {    0.000112e-6,    16097.679950283,  3.589026260 },
+      {    0.000123e-6,     2107.034507542,  1.728627253 },
+      {    0.000121e-6,    36949.230808424,  6.072332087 },
+      {    0.000108e-6,   -12539.853380183,  3.716133846 },
+      {    0.000113e-6,    -7875.671863624,  2.725771122 },
+      {    0.000109e-6,     4171.425536614,  4.033338079 },
+      {    0.000101e-6,     6247.911759770,  3.441347021 },
+      {    0.000113e-6,     7330.728427345,  0.656372122 },
+      {    0.000113e-6,    51092.726050855,  2.791483066 },
+   /* 471, 480 */
+      {    0.000106e-6,     5621.842923210,  1.815323326 },
+      {    0.000101e-6,      111.430161497,  5.711033677 },
+      {    0.000103e-6,      909.818733055,  2.812745443 },
+      {    0.000101e-6,     1790.642637886,  1.965746028 },
+
+   /* T */
+      {  102.156724e-6,     6283.075849991,  4.249032005 },
+      {    1.706807e-6,    12566.151699983,  4.205904248 },
+      {    0.269668e-6,      213.299095438,  3.400290479 },
+      {    0.265919e-6,      529.690965095,  5.836047367 },
+      {    0.210568e-6,       -3.523118349,  6.262738348 },
+      {    0.077996e-6,     5223.693919802,  4.670344204 },
+   /* 481, 490 */
+      {    0.054764e-6,     1577.343542448,  4.534800170 },
+      {    0.059146e-6,       26.298319800,  1.083044735 },
+      {    0.034420e-6,     -398.149003408,  5.980077351 },
+      {    0.032088e-6,    18849.227549974,  4.162913471 },
+      {    0.033595e-6,     5507.553238667,  5.980162321 },
+      {    0.029198e-6,     5856.477659115,  0.623811863 },
+      {    0.027764e-6,      155.420399434,  3.745318113 },
+      {    0.025190e-6,     5746.271337896,  2.980330535 },
+      {    0.022997e-6,     -796.298006816,  1.174411803 },
+      {    0.024976e-6,     5760.498431898,  2.467913690 },
+   /* 491, 500 */
+      {    0.021774e-6,      206.185548437,  3.854787540 },
+      {    0.017925e-6,     -775.522611324,  1.092065955 },
+      {    0.013794e-6,      426.598190876,  2.699831988 },
+      {    0.013276e-6,     6062.663207553,  5.845801920 },
+      {    0.011774e-6,    12036.460734888,  2.292832062 },
+      {    0.012869e-6,     6076.890301554,  5.333425680 },
+      {    0.012152e-6,     1059.381930189,  6.222874454 },
+      {    0.011081e-6,       -7.113547001,  5.154724984 },
+      {    0.010143e-6,     4694.002954708,  4.044013795 },
+      {    0.009357e-6,     5486.777843175,  3.416081409 },
+   /* 501, 510 */
+      {    0.010084e-6,      522.577418094,  0.749320262 },
+      {    0.008587e-6,    10977.078804699,  2.777152598 },
+      {    0.008628e-6,     6275.962302991,  4.562060226 },
+      {    0.008158e-6,     -220.412642439,  5.806891533 },
+      {    0.007746e-6,     2544.314419883,  1.603197066 },
+      {    0.007670e-6,     2146.165416475,  3.000200440 },
+      {    0.007098e-6,       74.781598567,  0.443725817 },
+      {    0.006180e-6,     -536.804512095,  1.302642751 },
+      {    0.005818e-6,     5088.628839767,  4.827723531 },
+      {    0.004945e-6,    -6286.598968340,  0.268305170 },
+   /* 511, 520 */
+      {    0.004774e-6,     1349.867409659,  5.808636673 },
+      {    0.004687e-6,     -242.728603974,  5.154890570 },
+      {    0.006089e-6,     1748.016413067,  4.403765209 },
+      {    0.005975e-6,    -1194.447010225,  2.583472591 },
+      {    0.004229e-6,      951.718406251,  0.931172179 },
+      {    0.005264e-6,      553.569402842,  2.336107252 },
+      {    0.003049e-6,     5643.178563677,  1.362634430 },
+      {    0.002974e-6,     6812.766815086,  1.583012668 },
+      {    0.003403e-6,    -2352.866153772,  2.552189886 },
+      {    0.003030e-6,      419.484643875,  5.286473844 },
+   /* 521, 530 */
+      {    0.003210e-6,       -7.046236698,  1.863796539 },
+      {    0.003058e-6,     9437.762934887,  4.226420633 },
+      {    0.002589e-6,    12352.852604545,  1.991935820 },
+      {    0.002927e-6,     5216.580372801,  2.319951253 },
+      {    0.002425e-6,     5230.807466803,  3.084752833 },
+      {    0.002656e-6,     3154.687084896,  2.487447866 },
+      {    0.002445e-6,    10447.387839604,  2.347139160 },
+      {    0.002990e-6,     4690.479836359,  6.235872050 },
+      {    0.002890e-6,     5863.591206116,  0.095197563 },
+      {    0.002498e-6,     6438.496249426,  2.994779800 },
+   /* 531, 540 */
+      {    0.001889e-6,     8031.092263058,  3.569003717 },
+      {    0.002567e-6,      801.820931124,  3.425611498 },
+      {    0.001803e-6,   -71430.695617928,  2.192295512 },
+      {    0.001782e-6,        3.932153263,  5.180433689 },
+      {    0.001694e-6,    -4705.732307544,  4.641779174 },
+      {    0.001704e-6,    -1592.596013633,  3.997097652 },
+      {    0.001735e-6,     5849.364112115,  0.417558428 },
+      {    0.001643e-6,     8429.241266467,  2.180619584 },
+      {    0.001680e-6,       38.133035638,  4.164529426 },
+      {    0.002045e-6,     7084.896781115,  0.526323854 },
+   /* 541, 550 */
+      {    0.001458e-6,     4292.330832950,  1.356098141 },
+      {    0.001437e-6,       20.355319399,  3.895439360 },
+      {    0.001738e-6,     6279.552731642,  0.087484036 },
+      {    0.001367e-6,    14143.495242431,  3.987576591 },
+      {    0.001344e-6,     7234.794256242,  0.090454338 },
+      {    0.001438e-6,    11499.656222793,  0.974387904 },
+      {    0.001257e-6,     6836.645252834,  1.509069366 },
+      {    0.001358e-6,    11513.883316794,  0.495572260 },
+      {    0.001628e-6,     7632.943259650,  4.968445721 },
+      {    0.001169e-6,      103.092774219,  2.838496795 },
+   /* 551, 560 */
+      {    0.001162e-6,     4164.311989613,  3.408387778 },
+      {    0.001092e-6,     6069.776754553,  3.617942651 },
+      {    0.001008e-6,    17789.845619785,  0.286350174 },
+      {    0.001008e-6,      639.897286314,  1.610762073 },
+      {    0.000918e-6,    10213.285546211,  5.532798067 },
+      {    0.001011e-6,    -6256.777530192,  0.661826484 },
+      {    0.000753e-6,    16730.463689596,  3.905030235 },
+      {    0.000737e-6,    11926.254413669,  4.641956361 },
+      {    0.000694e-6,     3340.612426700,  2.111120332 },
+      {    0.000701e-6,     3894.181829542,  2.760823491 },
+   /* 561, 570 */
+      {    0.000689e-6,     -135.065080035,  4.768800780 },
+      {    0.000700e-6,    13367.972631107,  5.760439898 },
+      {    0.000664e-6,     6040.347246017,  1.051215840 },
+      {    0.000654e-6,     5650.292110678,  4.911332503 },
+      {    0.000788e-6,     6681.224853400,  4.699648011 },
+      {    0.000628e-6,     5333.900241022,  5.024608847 },
+      {    0.000755e-6,     -110.206321219,  4.370971253 },
+      {    0.000628e-6,     6290.189396992,  3.660478857 },
+      {    0.000635e-6,    25132.303399966,  4.121051532 },
+      {    0.000534e-6,     5966.683980335,  1.173284524 },
+   /* 571, 580 */
+      {    0.000543e-6,     -433.711737877,  0.345585464 },
+      {    0.000517e-6,    -1990.745017041,  5.414571768 },
+      {    0.000504e-6,     5767.611978898,  2.328281115 },
+      {    0.000485e-6,     5753.384884897,  1.685874771 },
+      {    0.000463e-6,     7860.419392439,  5.297703006 },
+      {    0.000604e-6,      515.463871093,  0.591998446 },
+      {    0.000443e-6,    12168.002696575,  4.830881244 },
+      {    0.000570e-6,      199.072001436,  3.899190272 },
+      {    0.000465e-6,    10969.965257698,  0.476681802 },
+      {    0.000424e-6,    -7079.373856808,  1.112242763 },
+   /* 581, 590 */
+      {    0.000427e-6,      735.876513532,  1.994214480 },
+      {    0.000478e-6,    -6127.655450557,  3.778025483 },
+      {    0.000414e-6,    10973.555686350,  5.441088327 },
+      {    0.000512e-6,     1589.072895284,  0.107123853 },
+      {    0.000378e-6,    10984.192351700,  0.915087231 },
+      {    0.000402e-6,    11371.704689758,  4.107281715 },
+      {    0.000453e-6,     9917.696874510,  1.917490952 },
+      {    0.000395e-6,      149.563197135,  2.763124165 },
+      {    0.000371e-6,     5739.157790895,  3.112111866 },
+      {    0.000350e-6,    11790.629088659,  0.440639857 },
+   /* 591, 600 */
+      {    0.000356e-6,     6133.512652857,  5.444568842 },
+      {    0.000344e-6,      412.371096874,  5.676832684 },
+      {    0.000383e-6,      955.599741609,  5.559734846 },
+      {    0.000333e-6,     6496.374945429,  0.261537984 },
+      {    0.000340e-6,     6055.549660552,  5.975534987 },
+      {    0.000334e-6,     1066.495477190,  2.335063907 },
+      {    0.000399e-6,    11506.769769794,  5.321230910 },
+      {    0.000314e-6,    18319.536584880,  2.313312404 },
+      {    0.000424e-6,     1052.268383188,  1.211961766 },
+      {    0.000307e-6,       63.735898303,  3.169551388 },
+   /* 601, 610 */
+      {    0.000329e-6,       29.821438149,  6.106912080 },
+      {    0.000357e-6,     6309.374169791,  4.223760346 },
+      {    0.000312e-6,    -3738.761430108,  2.180556645 },
+      {    0.000301e-6,      309.278322656,  1.499984572 },
+      {    0.000268e-6,    12043.574281889,  2.447520648 },
+      {    0.000257e-6,    12491.370101415,  3.662331761 },
+      {    0.000290e-6,      625.670192312,  1.272834584 },
+      {    0.000256e-6,     5429.879468239,  1.913426912 },
+      {    0.000339e-6,     3496.032826134,  4.165930011 },
+      {    0.000283e-6,     3930.209696220,  4.325565754 },
+   /* 611, 620 */
+      {    0.000241e-6,    12528.018664345,  3.832324536 },
+      {    0.000304e-6,     4686.889407707,  1.612348468 },
+      {    0.000259e-6,    16200.772724501,  3.470173146 },
+      {    0.000238e-6,    12139.553509107,  1.147977842 },
+      {    0.000236e-6,     6172.869528772,  3.776271728 },
+      {    0.000296e-6,    -7058.598461315,  0.460368852 },
+      {    0.000306e-6,    10575.406682942,  0.554749016 },
+      {    0.000251e-6,    17298.182327326,  0.834332510 },
+      {    0.000290e-6,     4732.030627343,  4.759564091 },
+      {    0.000261e-6,     5884.926846583,  0.298259862 },
+   /* 621, 630 */
+      {    0.000249e-6,     5547.199336460,  3.749366406 },
+      {    0.000213e-6,    11712.955318231,  5.415666119 },
+      {    0.000223e-6,     4701.116501708,  2.703203558 },
+      {    0.000268e-6,     -640.877607382,  0.283670793 },
+      {    0.000209e-6,     5636.065016677,  1.238477199 },
+      {    0.000193e-6,    10177.257679534,  1.943251340 },
+      {    0.000182e-6,     6283.143160294,  2.456157599 },
+      {    0.000184e-6,     -227.526189440,  5.888038582 },
+      {    0.000182e-6,    -6283.008539689,  0.241332086 },
+      {    0.000228e-6,    -6284.056171060,  2.657323816 },
+   /* 631, 640 */
+      {    0.000166e-6,     7238.675591600,  5.930629110 },
+      {    0.000167e-6,     3097.883822726,  5.570955333 },
+      {    0.000159e-6,     -323.505416657,  5.786670700 },
+      {    0.000154e-6,    -4136.910433516,  1.517805532 },
+      {    0.000176e-6,    12029.347187887,  3.139266834 },
+      {    0.000167e-6,    12132.439962106,  3.556352289 },
+      {    0.000153e-6,      202.253395174,  1.463313961 },
+      {    0.000157e-6,    17267.268201691,  1.586837396 },
+      {    0.000142e-6,    83996.847317911,  0.022670115 },
+      {    0.000152e-6,    17260.154654690,  0.708528947 },
+   /* 641, 650 */
+      {    0.000144e-6,     6084.003848555,  5.187075177 },
+      {    0.000135e-6,     5756.566278634,  1.993229262 },
+      {    0.000134e-6,     5750.203491159,  3.457197134 },
+      {    0.000144e-6,     5326.786694021,  6.066193291 },
+      {    0.000160e-6,    11015.106477335,  1.710431974 },
+      {    0.000133e-6,     3634.621024518,  2.836451652 },
+      {    0.000134e-6,    18073.704938650,  5.453106665 },
+      {    0.000134e-6,     1162.474704408,  5.326898811 },
+      {    0.000128e-6,     5642.198242609,  2.511652591 },
+      {    0.000160e-6,      632.783739313,  5.628785365 },
+   /* 651, 660 */
+      {    0.000132e-6,    13916.019109642,  0.819294053 },
+      {    0.000122e-6,    14314.168113050,  5.677408071 },
+      {    0.000125e-6,    12359.966151546,  5.251984735 },
+      {    0.000121e-6,     5749.452731634,  2.210924603 },
+      {    0.000136e-6,     -245.831646229,  1.646502367 },
+      {    0.000120e-6,     5757.317038160,  3.240883049 },
+      {    0.000134e-6,    12146.667056108,  3.059480037 },
+      {    0.000137e-6,     6206.809778716,  1.867105418 },
+      {    0.000141e-6,    17253.041107690,  2.069217456 },
+      {    0.000129e-6,    -7477.522860216,  2.781469314 },
+   /* 661, 670 */
+      {    0.000116e-6,     5540.085789459,  4.281176991 },
+      {    0.000116e-6,     9779.108676125,  3.320925381 },
+      {    0.000129e-6,     5237.921013804,  3.497704076 },
+      {    0.000113e-6,     5959.570433334,  0.983210840 },
+      {    0.000122e-6,     6282.095528923,  2.674938860 },
+      {    0.000140e-6,      -11.045700264,  4.957936982 },
+      {    0.000108e-6,    23543.230504682,  1.390113589 },
+      {    0.000106e-6,   -12569.674818332,  0.429631317 },
+      {    0.000110e-6,     -266.607041722,  5.501340197 },
+      {    0.000115e-6,    12559.038152982,  4.691456618 },
+   /* 671, 680 */
+      {    0.000134e-6,    -2388.894020449,  0.577313584 },
+      {    0.000109e-6,    10440.274292604,  6.218148717 },
+      {    0.000102e-6,     -543.918059096,  1.477842615 },
+      {    0.000108e-6,    21228.392023546,  2.237753948 },
+      {    0.000101e-6,    -4535.059436924,  3.100492232 },
+      {    0.000103e-6,       76.266071276,  5.594294322 },
+      {    0.000104e-6,      949.175608970,  5.674287810 },
+      {    0.000101e-6,    13517.870106233,  2.196632348 },
+      {    0.000100e-6,    11933.367960670,  4.056084160 },
+
+   /* T^2 */
+      {    4.322990e-6,     6283.075849991,  2.642893748 },
+   /* 681, 690 */
+      {    0.406495e-6,        0.000000000,  4.712388980 },
+      {    0.122605e-6,    12566.151699983,  2.438140634 },
+      {    0.019476e-6,      213.299095438,  1.642186981 },
+      {    0.016916e-6,      529.690965095,  4.510959344 },
+      {    0.013374e-6,       -3.523118349,  1.502210314 },
+      {    0.008042e-6,       26.298319800,  0.478549024 },
+      {    0.007824e-6,      155.420399434,  5.254710405 },
+      {    0.004894e-6,     5746.271337896,  4.683210850 },
+      {    0.004875e-6,     5760.498431898,  0.759507698 },
+      {    0.004416e-6,     5223.693919802,  6.028853166 },
+   /* 691, 700 */
+      {    0.004088e-6,       -7.113547001,  0.060926389 },
+      {    0.004433e-6,    77713.771467920,  3.627734103 },
+      {    0.003277e-6,    18849.227549974,  2.327912542 },
+      {    0.002703e-6,     6062.663207553,  1.271941729 },
+      {    0.003435e-6,     -775.522611324,  0.747446224 },
+      {    0.002618e-6,     6076.890301554,  3.633715689 },
+      {    0.003146e-6,      206.185548437,  5.647874613 },
+      {    0.002544e-6,     1577.343542448,  6.232904270 },
+      {    0.002218e-6,     -220.412642439,  1.309509946 },
+      {    0.002197e-6,     5856.477659115,  2.407212349 },
+   /* 701, 710 */
+      {    0.002897e-6,     5753.384884897,  5.863842246 },
+      {    0.001766e-6,      426.598190876,  0.754113147 },
+      {    0.001738e-6,     -796.298006816,  2.714942671 },
+      {    0.001695e-6,      522.577418094,  2.629369842 },
+      {    0.001584e-6,     5507.553238667,  1.341138229 },
+      {    0.001503e-6,     -242.728603974,  0.377699736 },
+      {    0.001552e-6,     -536.804512095,  2.904684667 },
+      {    0.001370e-6,     -398.149003408,  1.265599125 },
+      {    0.001889e-6,    -5573.142801634,  4.413514859 },
+      {    0.001722e-6,     6069.776754553,  2.445966339 },
+   /* 711, 720 */
+      {    0.001124e-6,     1059.381930189,  5.041799657 },
+      {    0.001258e-6,      553.569402842,  3.849557278 },
+      {    0.000831e-6,      951.718406251,  2.471094709 },
+      {    0.000767e-6,     4694.002954708,  5.363125422 },
+      {    0.000756e-6,     1349.867409659,  1.046195744 },
+      {    0.000775e-6,      -11.045700264,  0.245548001 },
+      {    0.000597e-6,     2146.165416475,  4.543268798 },
+      {    0.000568e-6,     5216.580372801,  4.178853144 },
+      {    0.000711e-6,     1748.016413067,  5.934271972 },
+      {    0.000499e-6,    12036.460734888,  0.624434410 },
+   /* 721, 730 */
+      {    0.000671e-6,    -1194.447010225,  4.136047594 },
+      {    0.000488e-6,     5849.364112115,  2.209679987 },
+      {    0.000621e-6,     6438.496249426,  4.518860804 },
+      {    0.000495e-6,    -6286.598968340,  1.868201275 },
+      {    0.000456e-6,     5230.807466803,  1.271231591 },
+      {    0.000451e-6,     5088.628839767,  0.084060889 },
+      {    0.000435e-6,     5643.178563677,  3.324456609 },
+      {    0.000387e-6,    10977.078804699,  4.052488477 },
+      {    0.000547e-6,   161000.685737473,  2.841633844 },
+      {    0.000522e-6,     3154.687084896,  2.171979966 },
+   /* 731, 740 */
+      {    0.000375e-6,     5486.777843175,  4.983027306 },
+      {    0.000421e-6,     5863.591206116,  4.546432249 },
+      {    0.000439e-6,     7084.896781115,  0.522967921 },
+      {    0.000309e-6,     2544.314419883,  3.172606705 },
+      {    0.000347e-6,     4690.479836359,  1.479586566 },
+      {    0.000317e-6,      801.820931124,  3.553088096 },
+      {    0.000262e-6,      419.484643875,  0.606635550 },
+      {    0.000248e-6,     6836.645252834,  3.014082064 },
+      {    0.000245e-6,    -1592.596013633,  5.519526220 },
+      {    0.000225e-6,     4292.330832950,  2.877956536 },
+   /* 741, 750 */
+      {    0.000214e-6,     7234.794256242,  1.605227587 },
+      {    0.000205e-6,     5767.611978898,  0.625804796 },
+      {    0.000180e-6,    10447.387839604,  3.499954526 },
+      {    0.000229e-6,      199.072001436,  5.632304604 },
+      {    0.000214e-6,      639.897286314,  5.960227667 },
+      {    0.000175e-6,     -433.711737877,  2.162417992 },
+      {    0.000209e-6,      515.463871093,  2.322150893 },
+      {    0.000173e-6,     6040.347246017,  2.556183691 },
+      {    0.000184e-6,     6309.374169791,  4.732296790 },
+      {    0.000227e-6,   149854.400134205,  5.385812217 },
+   /* 751, 760 */
+      {    0.000154e-6,     8031.092263058,  5.120720920 },
+      {    0.000151e-6,     5739.157790895,  4.815000443 },
+      {    0.000197e-6,     7632.943259650,  0.222827271 },
+      {    0.000197e-6,       74.781598567,  3.910456770 },
+      {    0.000138e-6,     6055.549660552,  1.397484253 },
+      {    0.000149e-6,    -6127.655450557,  5.333727496 },
+      {    0.000137e-6,     3894.181829542,  4.281749907 },
+      {    0.000135e-6,     9437.762934887,  5.979971885 },
+      {    0.000139e-6,    -2352.866153772,  4.715630782 },
+      {    0.000142e-6,     6812.766815086,  0.513330157 },
+   /* 761, 770 */
+      {    0.000120e-6,    -4705.732307544,  0.194160689 },
+      {    0.000131e-6,   -71430.695617928,  0.000379226 },
+      {    0.000124e-6,     6279.552731642,  2.122264908 },
+      {    0.000108e-6,    -6256.777530192,  0.883445696 },
+
+   /* T^3 */
+      {    0.143388e-6,     6283.075849991,  1.131453581 },
+      {    0.006671e-6,    12566.151699983,  0.775148887 },
+      {    0.001480e-6,      155.420399434,  0.480016880 },
+      {    0.000934e-6,      213.299095438,  6.144453084 },
+      {    0.000795e-6,      529.690965095,  2.941595619 },
+      {    0.000673e-6,     5746.271337896,  0.120415406 },
+   /* 771, 780 */
+      {    0.000672e-6,     5760.498431898,  5.317009738 },
+      {    0.000389e-6,     -220.412642439,  3.090323467 },
+      {    0.000373e-6,     6062.663207553,  3.003551964 },
+      {    0.000360e-6,     6076.890301554,  1.918913041 },
+      {    0.000316e-6,      -21.340641002,  5.545798121 },
+      {    0.000315e-6,     -242.728603974,  1.884932563 },
+      {    0.000278e-6,      206.185548437,  1.266254859 },
+      {    0.000238e-6,     -536.804512095,  4.532664830 },
+      {    0.000185e-6,      522.577418094,  4.578313856 },
+      {    0.000245e-6,    18849.227549974,  0.587467082 },
+   /* 781, 787 */
+      {    0.000180e-6,      426.598190876,  5.151178553 },
+      {    0.000200e-6,      553.569402842,  5.355983739 },
+      {    0.000141e-6,     5223.693919802,  1.336556009 },
+      {    0.000104e-6,     5856.477659115,  4.239842759 },
+
+   /* T^4 */
+      {    0.003826e-6,     6283.075849991,  5.705257275 },
+      {    0.000303e-6,    12566.151699983,  5.407132842 },
+      {    0.000209e-6,      155.420399434,  1.989815753 }
+   };
+
+
+/* Time since J2000.0 in Julian millennia. */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJM;
+
+/* ================= */
+/* Topocentric terms */
+/* ================= */
+
+/* Convert UT to local solar time in radians. */
+   tsol = fmod(ut, 1.0) * ERFA_D2PI + elong;
+
+/* FUNDAMENTAL ARGUMENTS:  Simon et al. 1994. */
+
+/* Combine time argument (millennia) with deg/arcsec factor. */
+   w = t / 3600.0;
+
+/* Sun Mean Longitude. */
+   elsun = fmod(280.46645683 + 1296027711.03429 * w, 360.0) * ERFA_DD2R;
+
+/* Sun Mean Anomaly. */
+   emsun = fmod(357.52910918 + 1295965810.481 * w, 360.0) * ERFA_DD2R;
+
+/* Mean Elongation of Moon from Sun. */
+   d = fmod(297.85019547 + 16029616012.090 * w, 360.0) * ERFA_DD2R;
+
+/* Mean Longitude of Jupiter. */
+   elj = fmod(34.35151874 + 109306899.89453 * w, 360.0) * ERFA_DD2R;
+
+/* Mean Longitude of Saturn. */
+   els = fmod(50.07744430 + 44046398.47038 * w, 360.0) * ERFA_DD2R;
+
+/* TOPOCENTRIC TERMS:  Moyer 1981 and Murray 1983. */
+   wt =   +  0.00029e-10 * u * sin(tsol + elsun - els)
+          +  0.00100e-10 * u * sin(tsol - 2.0 * emsun)
+          +  0.00133e-10 * u * sin(tsol - d)
+          +  0.00133e-10 * u * sin(tsol + elsun - elj)
+          -  0.00229e-10 * u * sin(tsol + 2.0 * elsun + emsun)
+          -  0.02200e-10 * v * cos(elsun + emsun)
+          +  0.05312e-10 * u * sin(tsol - emsun)
+          -  0.13677e-10 * u * sin(tsol + 2.0 * elsun)
+          -  1.31840e-10 * v * cos(elsun)
+          +  3.17679e-10 * u * sin(tsol);
+
+/* ===================== */
+/* Fairhead et al. model */
+/* ===================== */
+
+/* T**0 */
+   w0 = 0;
+   for (j = 473; j >= 0; j--) {
+      w0 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]);
+   }
+
+/* T**1 */
+   w1 = 0;
+   for (j = 678; j >= 474; j--) {
+      w1 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]);
+   }
+
+/* T**2 */
+   w2 = 0;
+   for (j = 763; j >= 679; j--) {
+      w2 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]);
+   }
+
+/* T**3 */
+   w3 = 0;
+   for (j = 783; j >= 764; j--) {
+      w3 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]);
+   }
+
+/* T**4 */
+   w4 = 0;
+   for (j = 786; j >= 784; j--) {
+      w4 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]);
+   }
+
+/* Multiply by powers of T and combine. */
+   wf = t * (t * (t * (t * w4 + w3) + w2) + w1) + w0;
+
+/* Adjustments to use JPL planetary masses instead of IAU. */
+   wj =   0.00065e-6 * sin(6069.776754 * t + 4.021194) +
+          0.00033e-6 * sin( 213.299095 * t + 5.543132) +
+        (-0.00196e-6 * sin(6208.294251 * t + 5.696701)) +
+        (-0.00173e-6 * sin(  74.781599 * t + 2.435900)) +
+          0.03638e-6 * t * t;
+
+/* ============ */
+/* Final result */
+/* ============ */
+
+/* TDB-TT in seconds. */
+   w = wt + wf + wj;
+
+   return w;
+
+}
+
+int eraDtf2d(const char *scale, int iy, int im, int id,
+             int ihr, int imn, double sec, double *d1, double *d2)
+/*
+**  - - - - - - - - -
+**   e r a D t f 2 d
+**  - - - - - - - - -
+**
+**  Encode date and time fields into 2-part Julian Date (or in the case
+**  of UTC a quasi-JD form that includes special provision for leap
+**  seconds).
+**
+**  Given:
+**     scale     char[]  time scale ID (Note 1)
+**     iy,im,id  int     year, month, day in Gregorian calendar (Note 2)
+**     ihr,imn   int     hour, minute
+**     sec       double  seconds
+**
+**  Returned:
+**     d1,d2     double  2-part Julian Date (Notes 3,4)
+**
+**  Returned (function value):
+**               int     status: +3 = both of next two
+**                               +2 = time is after end of day (Note 5)
+**                               +1 = dubious year (Note 6)
+**                                0 = OK
+**                               -1 = bad year
+**                               -2 = bad month
+**                               -3 = bad day
+**                               -4 = bad hour
+**                               -5 = bad minute
+**                               -6 = bad second (<0)
+**
+**  Notes:
+**
+**  1) scale identifies the time scale.  Only the value "UTC" (in upper
+**     case) is significant, and enables handling of leap seconds (see
+**     Note 4).
+**
+**  2) For calendar conventions and limitations, see eraCal2jd.
+**
+**  3) The sum of the results, d1+d2, is Julian Date, where normally d1
+**     is the Julian Day Number and d2 is the fraction of a day.  In the
+**     case of UTC, where the use of JD is problematical, special
+**     conventions apply:  see the next note.
+**
+**  4) JD cannot unambiguously represent UTC during a leap second unless
+**     special measures are taken.  The ERFA internal convention is that
+**     the quasi-JD day represents UTC days whether the length is 86399,
+**     86400 or 86401 SI seconds.
+**
+**  5) The warning status "time is after end of day" usually means that
+**     the sec argument is greater than 60.0.  However, in a day ending
+**     in a leap second the limit changes to 61.0 (or 59.0 in the case
+**     of a negative leap second).
+**
+**  6) The warning status "dubious year" flags UTCs that predate the
+**     introduction of the time scale and that are too far in the future
+**     to be trusted.  See eraDat for further details.
+**
+**  7) Only in the case of continuous and regular time scales (TAI, TT,
+**     TCG, TCB and TDB) is the result d1+d2 a Julian Date, strictly
+**     speaking.  In the other cases (UT1 and UTC) the result must be
+**     used with circumspection;  in particular the difference between
+**     two such results cannot be interpreted as a precise time
+**     interval.
+**
+**  Called:
+**     eraCal2jd    Gregorian calendar to JD
+**     eraDat       delta(AT) = TAI-UTC
+**     eraJd2cal    JD to Gregorian calendar
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int js, iy2, im2, id2;
+   double dj, w, day, seclim, dat1, dat2, ddt, time;
+
+
+/* Today's Julian Day Number. */
+   js = eraCal2jd(iy, im, id, &dj, &w);
+   if ( js ) return js;
+   dj += w;
+
+/* Day length and final minute length in seconds (provisional). */
+   day = ERFA_DAYSEC;
+   seclim = 60;
+
+/* Deal with the UTC leap second case. */
+   if ( ! strcmp(scale,"UTC") ) {
+
+   /* TAI-UTC today. */
+      js = eraDat(iy, im, id, 0.0, &dat1);
+      if ( js < 0 ) return js;
+
+   /* TAI-UTC tomorrow. */
+      js = eraJd2cal ( dj, 1.0, &iy2, &im2, &id2, &w);
+      if ( js ) return js;
+      js = eraDat(iy2, im2, id2, 0.0, &dat2);
+      if ( js < 0 ) return js;
+
+   /* The change in TAI-UTC (seconds). */
+      ddt = dat2 - dat1;
+
+   /* If leap second day, correct the day and final minute lengths. */
+      if ( fabs(ddt) > 0.5 ) {
+         day += ddt;
+         if ( ihr == 23 && imn == 59 ) seclim += ddt;
+      }
+   }
+
+/* Validate the time. */
+   if ( ihr >= 0 && ihr <= 23 ) {
+      if ( imn >= 0 && imn <= 59 ) {
+         if ( sec >= 0 ) {
+            if ( sec >= seclim ) {
+               js += 2;
+            }
+         } else {
+            js = -6;
+         }
+      } else {
+         js = -5;
+      }
+   } else {
+      js = -4;
+   }
+   if ( js < 0 ) return js;
+
+/* The time in days. */
+   time  = ( 60.0 * ( (double) ( 60 * ihr + imn ) ) + sec ) / day;
+
+/* Return the date and time. */
+   *d1 = dj;
+   *d2 = time;
+
+/* Status. */
+   return js;
+
+}
+
+double eraEe00(double date1, double date2, double epsa, double dpsi)
+/*
+**  - - - - - - - -
+**   e r a E e 0 0
+**  - - - - - - - -
+**
+**  The equation of the equinoxes, compatible with IAU 2000 resolutions,
+**  given the nutation in longitude and the mean obliquity.
+**
+**  Given:
+**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
+**     epsa         double    mean obliquity (Note 2)
+**     dpsi         double    nutation in longitude (Note 3)
+**
+**  Returned (function value):
+**                  double    equation of the equinoxes (Note 4)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The obliquity, in radians, is mean of date.
+**
+**  3) The result, which is in radians, operates in the following sense:
+**
+**        Greenwich apparent ST = GMST + equation of the equinoxes
+**
+**  4) The result is compatible with the IAU 2000 resolutions.  For
+**     further details, see IERS Conventions 2003 and Capitaine et al.
+**     (2002).
+**
+**  Called:
+**     eraEect00    equation of the equinoxes complementary terms
+**
+**  References:
+**
+**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
+**     implement the IAU 2000 definition of UT1", Astronomy &
+**     Astrophysics, 406, 1135-1149 (2003)
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double ee;
+
+
+/* Equation of the equinoxes. */
+   ee = dpsi * cos(epsa) + eraEect00(date1, date2);
+
+   return ee;
+
+}
+
+double eraEe00a(double date1, double date2)
+/*
+**  - - - - - - - - -
+**   e r a E e 0 0 a
+**  - - - - - - - - -
+**
+**  Equation of the equinoxes, compatible with IAU 2000 resolutions.
+**
+**  Given:
+**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (function value):
+**                  double    equation of the equinoxes (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The result, which is in radians, operates in the following sense:
+**
+**        Greenwich apparent ST = GMST + equation of the equinoxes
+**
+**  3) The result is compatible with the IAU 2000 resolutions.  For
+**     further details, see IERS Conventions 2003 and Capitaine et al.
+**     (2002).
+**
+**  Called:
+**     eraPr00      IAU 2000 precession adjustments
+**     eraObl80     mean obliquity, IAU 1980
+**     eraNut00a    nutation, IAU 2000A
+**     eraEe00      equation of the equinoxes, IAU 2000
+**
+**  References:
+**
+**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
+**     implement the IAU 2000 definition of UT1", Astronomy &
+**     Astrophysics, 406, 1135-1149 (2003).
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dpsipr, depspr, epsa, dpsi, deps, ee;
+
+
+/* IAU 2000 precession-rate adjustments. */
+   eraPr00(date1, date2, &dpsipr, &depspr);
+
+/* Mean obliquity, consistent with IAU 2000 precession-nutation. */
+   epsa = eraObl80(date1, date2) + depspr;
+
+/* Nutation in longitude. */
+   eraNut00a(date1, date2, &dpsi, &deps);
+
+/* Equation of the equinoxes. */
+   ee = eraEe00(date1, date2, epsa, dpsi);
+
+   return ee;
+
+}
+
+double eraEe00b(double date1, double date2)
+/*
+**  - - - - - - - - -
+**   e r a E e 0 0 b
+**  - - - - - - - - -
+**
+**  Equation of the equinoxes, compatible with IAU 2000 resolutions but
+**  using the truncated nutation model IAU 2000B.
+**
+**  Given:
+**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (function value):
+**                  double    equation of the equinoxes (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The result, which is in radians, operates in the following sense:
+**
+**        Greenwich apparent ST = GMST + equation of the equinoxes
+**
+**  3) The result is compatible with the IAU 2000 resolutions except
+**     that accuracy has been compromised for the sake of speed.  For
+**     further details, see McCarthy & Luzum (2001), IERS Conventions
+**     2003 and Capitaine et al. (2003).
+**
+**  Called:
+**     eraPr00      IAU 2000 precession adjustments
+**     eraObl80     mean obliquity, IAU 1980
+**     eraNut00b    nutation, IAU 2000B
+**     eraEe00      equation of the equinoxes, IAU 2000
+**
+**  References:
+**
+**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
+**     implement the IAU 2000 definition of UT1", Astronomy &
+**     Astrophysics, 406, 1135-1149 (2003)
+**
+**     McCarthy, D.D. & Luzum, B.J., "An abridged model of the
+**     precession-nutation of the celestial pole", Celestial Mechanics &
+**     Dynamical Astronomy, 85, 37-49 (2003)
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dpsipr, depspr, epsa, dpsi, deps, ee;
+
+
+/* IAU 2000 precession-rate adjustments. */
+   eraPr00(date1, date2, &dpsipr, &depspr);
+
+/* Mean obliquity, consistent with IAU 2000 precession-nutation. */
+   epsa = eraObl80(date1, date2) + depspr;
+
+/* Nutation in longitude. */
+   eraNut00b(date1, date2, &dpsi, &deps);
+
+/* Equation of the equinoxes. */
+   ee = eraEe00(date1, date2, epsa, dpsi);
+
+   return ee;
+
+}
+
+double eraEe06a(double date1, double date2)
+/*
+**  - - - - - - - - -
+**   e r a E e 0 6 a
+**  - - - - - - - - -
+**
+**  Equation of the equinoxes, compatible with IAU 2000 resolutions and
+**  IAU 2006/2000A precession-nutation.
+**
+**  Given:
+**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (function value):
+**                  double    equation of the equinoxes (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The result, which is in radians, operates in the following sense:
+**
+**        Greenwich apparent ST = GMST + equation of the equinoxes
+**
+**  Called:
+**     eraAnpm      normalize angle into range +/- pi
+**     eraGst06a    Greenwich apparent sidereal time, IAU 2006/2000A
+**     eraGmst06    Greenwich mean sidereal time, IAU 2006
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double gst06a, gmst06, ee;
+
+
+/* Apparent and mean sidereal times. */
+   gst06a = eraGst06a(0.0, 0.0, date1, date2);
+   gmst06 = eraGmst06(0.0, 0.0, date1, date2);
+
+/* Equation of the equinoxes. */
+   ee  = eraAnpm(gst06a - gmst06);
+
+   return ee;
+
+}
+
+double eraEect00(double date1, double date2)
+/*
+**  - - - - - - - - - -
+**   e r a E e c t 0 0
+**  - - - - - - - - - -
+**
+**  Equation of the equinoxes complementary terms, consistent with
+**  IAU 2000 resolutions.
+**
+**  Given:
+**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (function value):
+**                  double   complementary terms (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The "complementary terms" are part of the equation of the
+**     equinoxes (EE), classically the difference between apparent and
+**     mean Sidereal Time:
+**
+**        GAST = GMST + EE
+**
+**     with:
+**
+**        EE = dpsi * cos(eps)
+**
+**     where dpsi is the nutation in longitude and eps is the obliquity
+**     of date.  However, if the rotation of the Earth were constant in
+**     an inertial frame the classical formulation would lead to
+**     apparent irregularities in the UT1 timescale traceable to side-
+**     effects of precession-nutation.  In order to eliminate these
+**     effects from UT1, "complementary terms" were introduced in 1994
+**     (IAU, 1994) and took effect from 1997 (Capitaine and Gontier,
+**     1993):
+**
+**        GAST = GMST + CT + EE
+**
+**     By convention, the complementary terms are included as part of
+**     the equation of the equinoxes rather than as part of the mean
+**     Sidereal Time.  This slightly compromises the "geometrical"
+**     interpretation of mean sidereal time but is otherwise
+**     inconsequential.
+**
+**     The present function computes CT in the above expression,
+**     compatible with IAU 2000 resolutions (Capitaine et al., 2002, and
+**     IERS Conventions 2003).
+**
+**  Called:
+**     eraFal03     mean anomaly of the Moon
+**     eraFalp03    mean anomaly of the Sun
+**     eraFaf03     mean argument of the latitude of the Moon
+**     eraFad03     mean elongation of the Moon from the Sun
+**     eraFaom03    mean longitude of the Moon's ascending node
+**     eraFave03    mean longitude of Venus
+**     eraFae03     mean longitude of Earth
+**     eraFapa03    general accumulated precession in longitude
+**
+**  References:
+**
+**     Capitaine, N. & Gontier, A.-M., Astron. Astrophys., 275,
+**     645-650 (1993)
+**
+**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
+**     implement the IAU 2000 definition of UT1", Astronomy &
+**     Astrophysics, 406, 1135-1149 (2003)
+**
+**     IAU Resolution C7, Recommendation 3 (1994)
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Time since J2000.0, in Julian centuries */
+   double t;
+
+/* Miscellaneous */
+   int i, j;
+   double a, s0, s1;
+
+/* Fundamental arguments */
+   double fa[14];
+
+/* Returned value. */
+   double eect;
+
+/* ----------------------------------------- */
+/* The series for the EE complementary terms */
+/* ----------------------------------------- */
+
+   typedef struct {
+      int nfa[8];      /* coefficients of l,l',F,D,Om,LVe,LE,pA */
+      double s, c;     /* sine and cosine coefficients */
+   } TERM;
+
+/* Terms of order t^0 */
+   static const TERM e0[] = {
+
+   /* 1-10 */
+      {{ 0,  0,  0,  0,  1,  0,  0,  0}, 2640.96e-6, -0.39e-6 },
+      {{ 0,  0,  0,  0,  2,  0,  0,  0},   63.52e-6, -0.02e-6 },
+      {{ 0,  0,  2, -2,  3,  0,  0,  0},   11.75e-6,  0.01e-6 },
+      {{ 0,  0,  2, -2,  1,  0,  0,  0},   11.21e-6,  0.01e-6 },
+      {{ 0,  0,  2, -2,  2,  0,  0,  0},   -4.55e-6,  0.00e-6 },
+      {{ 0,  0,  2,  0,  3,  0,  0,  0},    2.02e-6,  0.00e-6 },
+      {{ 0,  0,  2,  0,  1,  0,  0,  0},    1.98e-6,  0.00e-6 },
+      {{ 0,  0,  0,  0,  3,  0,  0,  0},   -1.72e-6,  0.00e-6 },
+      {{ 0,  1,  0,  0,  1,  0,  0,  0},   -1.41e-6, -0.01e-6 },
+      {{ 0,  1,  0,  0, -1,  0,  0,  0},   -1.26e-6, -0.01e-6 },
+
+   /* 11-20 */
+      {{ 1,  0,  0,  0, -1,  0,  0,  0},   -0.63e-6,  0.00e-6 },
+      {{ 1,  0,  0,  0,  1,  0,  0,  0},   -0.63e-6,  0.00e-6 },
+      {{ 0,  1,  2, -2,  3,  0,  0,  0},    0.46e-6,  0.00e-6 },
+      {{ 0,  1,  2, -2,  1,  0,  0,  0},    0.45e-6,  0.00e-6 },
+      {{ 0,  0,  4, -4,  4,  0,  0,  0},    0.36e-6,  0.00e-6 },
+      {{ 0,  0,  1, -1,  1, -8, 12,  0},   -0.24e-6, -0.12e-6 },
+      {{ 0,  0,  2,  0,  0,  0,  0,  0},    0.32e-6,  0.00e-6 },
+      {{ 0,  0,  2,  0,  2,  0,  0,  0},    0.28e-6,  0.00e-6 },
+      {{ 1,  0,  2,  0,  3,  0,  0,  0},    0.27e-6,  0.00e-6 },
+      {{ 1,  0,  2,  0,  1,  0,  0,  0},    0.26e-6,  0.00e-6 },
+
+   /* 21-30 */
+      {{ 0,  0,  2, -2,  0,  0,  0,  0},   -0.21e-6,  0.00e-6 },
+      {{ 0,  1, -2,  2, -3,  0,  0,  0},    0.19e-6,  0.00e-6 },
+      {{ 0,  1, -2,  2, -1,  0,  0,  0},    0.18e-6,  0.00e-6 },
+      {{ 0,  0,  0,  0,  0,  8,-13, -1},   -0.10e-6,  0.05e-6 },
+      {{ 0,  0,  0,  2,  0,  0,  0,  0},    0.15e-6,  0.00e-6 },
+      {{ 2,  0, -2,  0, -1,  0,  0,  0},   -0.14e-6,  0.00e-6 },
+      {{ 1,  0,  0, -2,  1,  0,  0,  0},    0.14e-6,  0.00e-6 },
+      {{ 0,  1,  2, -2,  2,  0,  0,  0},   -0.14e-6,  0.00e-6 },
+      {{ 1,  0,  0, -2, -1,  0,  0,  0},    0.14e-6,  0.00e-6 },
+      {{ 0,  0,  4, -2,  4,  0,  0,  0},    0.13e-6,  0.00e-6 },
+
+   /* 31-33 */
+      {{ 0,  0,  2, -2,  4,  0,  0,  0},   -0.11e-6,  0.00e-6 },
+      {{ 1,  0, -2,  0, -3,  0,  0,  0},    0.11e-6,  0.00e-6 },
+      {{ 1,  0, -2,  0, -1,  0,  0,  0},    0.11e-6,  0.00e-6 }
+   };
+
+/* Terms of order t^1 */
+   static const TERM e1[] = {
+      {{ 0,  0,  0,  0,  1,  0,  0,  0},    -0.87e-6,  0.00e-6 }
+   };
+
+/* Number of terms in the series */
+   const int NE0 = (int) (sizeof e0 / sizeof (TERM));
+   const int NE1 = (int) (sizeof e1 / sizeof (TERM));
+
+/*--------------------------------------------------------------------*/
+
+/* Interval between fundamental epoch J2000.0 and current date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Fundamental Arguments (from IERS Conventions 2003) */
+
+/* Mean anomaly of the Moon. */
+   fa[0] = eraFal03(t);
+
+/* Mean anomaly of the Sun. */
+   fa[1] = eraFalp03(t);
+
+/* Mean longitude of the Moon minus that of the ascending node. */
+   fa[2] = eraFaf03(t);
+
+/* Mean elongation of the Moon from the Sun. */
+   fa[3] = eraFad03(t);
+
+/* Mean longitude of the ascending node of the Moon. */
+   fa[4] = eraFaom03(t);
+
+/* Mean longitude of Venus. */
+   fa[5] = eraFave03(t);
+
+/* Mean longitude of Earth. */
+   fa[6] = eraFae03(t);
+
+/* General precession in longitude. */
+   fa[7] = eraFapa03(t);
+
+/* Evaluate the EE complementary terms. */
+   s0 = 0.0;
+   s1 = 0.0;
+
+   for (i = NE0-1; i >= 0; i--) {
+      a = 0.0;
+      for (j = 0; j < 8; j++) {
+         a += (double)(e0[i].nfa[j]) * fa[j];
+      }
+      s0 += e0[i].s * sin(a) + e0[i].c * cos(a);
+   }
+
+   for (i = NE1-1; i >= 0; i--) {
+      a = 0.0;
+      for (j = 0; j < 8; j++) {
+         a += (double)(e1[i].nfa[j]) * fa[j];
+      }
+      s1 += e1[i].s * sin(a) + e1[i].c * cos(a);
+   }
+
+   eect = (s0 + s1 * t ) * ERFA_DAS2R;
+
+   return eect;
+
+}
+
+int eraEform ( int n, double *a, double *f )
+/*
+**  - - - - - - - - -
+**   e r a E f o r m
+**  - - - - - - - - -
+**
+**  Earth reference ellipsoids.
+**
+**  Given:
+**     n    int         ellipsoid identifier (Note 1)
+**
+**  Returned:
+**     a    double      equatorial radius (meters, Note 2)
+**     f    double      flattening (Note 2)
+**
+**  Returned (function value):
+**          int         status:  0 = OK
+**                              -1 = illegal identifier (Note 3)
+**
+**  Notes:
+**
+**  1) The identifier n is a number that specifies the choice of
+**     reference ellipsoid.  The following are supported:
+**
+**        n    ellipsoid
+**
+**        1     ERFA_WGS84
+**        2     ERFA_GRS80
+**        3     ERFA_WGS72
+**
+**     The n value has no significance outside the ERFA software.  For
+**     convenience, symbols ERFA_WGS84 etc. are defined in erfam.h.
+**
+**  2) The ellipsoid parameters are returned in the form of equatorial
+**     radius in meters (a) and flattening (f).  The latter is a number
+**     around 0.00335, i.e. around 1/298.
+**
+**  3) For the case where an unsupported n value is supplied, zero a and
+**     f are returned, as well as error status.
+**
+**  References:
+**
+**     Department of Defense World Geodetic System 1984, National
+**     Imagery and Mapping Agency Technical Report 8350.2, Third
+**     Edition, p3-2.
+**
+**     Moritz, H., Bull. Geodesique 66-2, 187 (1992).
+**
+**     The Department of Defense World Geodetic System 1972, World
+**     Geodetic System Committee, May 1974.
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     p220.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* Look up a and f for the specified reference ellipsoid. */
+   switch ( n ) {
+
+   case ERFA_WGS84:
+      *a = 6378137.0;
+      *f = 1.0 / 298.257223563;
+      break;
+
+   case ERFA_GRS80:
+      *a = 6378137.0;
+      *f = 1.0 / 298.257222101;
+      break;
+
+   case ERFA_WGS72:
+      *a = 6378135.0;
+      *f = 1.0 / 298.26;
+      break;
+
+   default:
+
+   /* Invalid identifier. */
+      *a = 0.0;
+      *f = 0.0;
+      return -1;
+
+   }
+
+/* OK status. */
+   return 0;
+
+}
+
+double eraEo06a(double date1, double date2)
+/*
+**  - - - - - - - - -
+**   e r a E o 0 6 a
+**  - - - - - - - - -
+**
+**  Equation of the origins, IAU 2006 precession and IAU 2000A nutation.
+**
+**  Given:
+**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (function value):
+**                  double    equation of the origins in radians
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The equation of the origins is the distance between the true
+**     equinox and the celestial intermediate origin and, equivalently,
+**     the difference between Earth rotation angle and Greenwich
+**     apparent sidereal time (ERA-GST).  It comprises the precession
+**     (since J2000.0) in right ascension plus the equation of the
+**     equinoxes (including the small correction terms).
+**
+**  Called:
+**     eraPnm06a    classical NPB matrix, IAU 2006/2000A
+**     eraBpn2xy    extract CIP X,Y coordinates from NPB matrix
+**     eraS06       the CIO locator s, given X,Y, IAU 2006
+**     eraEors      equation of the origins, Given NPB matrix and s
+**
+**  References:
+**
+**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
+**
+**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double r[3][3], x, y, s, eo;
+
+
+/* Classical nutation x precession x bias matrix. */
+   eraPnm06a(date1, date2, r);
+
+/* Extract CIP coordinates. */
+   eraBpn2xy(r, &x, &y);
+
+/* The CIO locator, s. */
+   s = eraS06(date1, date2, x, y);
+
+/* Solve for the EO. */
+   eo = eraEors(r, s);
+
+   return eo;
+
+}
+
+double eraEors(double rnpb[3][3], double s)
+/*
+**  - - - - - - - -
+**   e r a E o r s
+**  - - - - - - - -
+**
+**  Equation of the origins, given the classical NPB matrix and the
+**  quantity s.
+**
+**  Given:
+**     rnpb  double[3][3]  classical nutation x precession x bias matrix
+**     s     double        the quantity s (the CIO locator)
+**
+**  Returned (function value):
+**           double        the equation of the origins in radians.
+**
+**  Notes:
+**
+**  1)  The equation of the origins is the distance between the true
+**      equinox and the celestial intermediate origin and, equivalently,
+**      the difference between Earth rotation angle and Greenwich
+**      apparent sidereal time (ERA-GST).  It comprises the precession
+**      (since J2000.0) in right ascension plus the equation of the
+**      equinoxes (including the small correction terms).
+**
+**  2)  The algorithm is from Wallace & Capitaine (2006).
+**
+** References:
+**
+**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
+**
+**     Wallace, P. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double x, ax, xs, ys, zs, p, q, eo;
+
+
+/* Evaluate Wallace & Capitaine (2006) expression (16). */
+   x = rnpb[2][0];
+   ax = x / (1.0 + rnpb[2][2]);
+   xs = 1.0 - ax * x;
+   ys = -ax * rnpb[2][1];
+   zs = -x;
+   p = rnpb[0][0] * xs + rnpb[0][1] * ys + rnpb[0][2] * zs;
+   q = rnpb[1][0] * xs + rnpb[1][1] * ys + rnpb[1][2] * zs;
+   eo = ((p != 0) || (q != 0)) ? s - atan2(q, p) : s;
+
+   return eo;
+
+}
+
+double eraEpb(double dj1, double dj2)
+/*
+**  - - - - - - -
+**   e r a E p b
+**  - - - - - - -
+**
+**  Julian Date to Besselian Epoch.
+**
+**  Given:
+**     dj1,dj2    double     Julian Date (see note)
+**
+**  Returned (function value):
+**                double     Besselian Epoch.
+**
+**  Note:
+**
+**     The Julian Date is supplied in two pieces, in the usual ERFA
+**     manner, which is designed to preserve time resolution.  The
+**     Julian Date is available as a single number by adding dj1 and
+**     dj2.  The maximum resolution is achieved if dj1 is 2451545D0
+**     (J2000.0).
+**
+**  Reference:
+**
+**     Lieske,J.H., 1979. Astron.Astrophys.,73,282.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* J2000.0 minus B1900.0 (2415019.81352) in Julian days */
+   static const double D1900 = 36524.68648;
+
+   double epb;
+
+
+   epb = 1900.0 + ((dj1 - ERFA_DJ00) + (dj2 + D1900)) / ERFA_DTY;
+
+   return epb;
+
+}
+
+void eraEpb2jd(double epb, double *djm0, double *djm)
+/*
+**  - - - - - - - - - -
+**   e r a E p b 2 j d
+**  - - - - - - - - - -
+**
+**  Besselian Epoch to Julian Date.
+**
+**  Given:
+**     epb      double    Besselian Epoch (e.g. 1957.3D0)
+**
+**  Returned:
+**     djm0     double    MJD zero-point: always 2400000.5
+**     djm      double    Modified Julian Date
+**
+**  Note:
+**
+**     The Julian Date is returned in two pieces, in the usual ERFA
+**     manner, which is designed to preserve time resolution.  The
+**     Julian Date is available as a single number by adding djm0 and
+**     djm.
+**
+**  Reference:
+**
+**     Lieske, J.H., 1979, Astron.Astrophys. 73, 282.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   *djm0 = 2400000.5;
+   *djm  =   15019.81352 + (epb - 1900.0) * ERFA_DTY;
+
+   return;
+
+}
+
+double eraEpj(double dj1, double dj2)
+/*
+**  - - - - - - -
+**   e r a E p j
+**  - - - - - - -
+**
+**  Julian Date to Julian Epoch.
+**
+**  Given:
+**     dj1,dj2    double     Julian Date (see note)
+**
+**  Returned (function value):
+**                double     Julian Epoch
+**
+**  Note:
+**
+**     The Julian Date is supplied in two pieces, in the usual ERFA
+**     manner, which is designed to preserve time resolution.  The
+**     Julian Date is available as a single number by adding dj1 and
+**     dj2.  The maximum resolution is achieved if dj1 is 2451545D0
+**     (J2000.0).
+**
+**  Reference:
+**
+**     Lieske, J.H., 1979, Astron.Astrophys. 73, 282.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double epj;
+
+
+   epj = 2000.0 + ((dj1 - ERFA_DJ00) + dj2) / ERFA_DJY;
+
+   return epj;
+
+}
+
+void eraEpj2jd(double epj, double *djm0, double *djm)
+/*
+**  - - - - - - - - - -
+**   e r a E p j 2 j d
+**  - - - - - - - - - -
+**
+**  Julian Epoch to Julian Date.
+**
+**  Given:
+**     epj      double    Julian Epoch (e.g. 1996.8D0)
+**
+**  Returned:
+**     djm0     double    MJD zero-point: always 2400000.5
+**     djm      double    Modified Julian Date
+**
+**  Note:
+**
+**     The Julian Date is returned in two pieces, in the usual ERFA
+**     manner, which is designed to preserve time resolution.  The
+**     Julian Date is available as a single number by adding djm0 and
+**     djm.
+**
+**  Reference:
+**
+**     Lieske, J.H., 1979, Astron.Astrophys. 73, 282.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   *djm0 = 2400000.5;
+   *djm  =   51544.5 + (epj - 2000.0) * 365.25;
+
+   return;
+
+}
+
+int eraEpv00(double date1, double date2,
+             double pvh[2][3], double pvb[2][3])
+/*
+**  - - - - - - - - -
+**   e r a E p v 0 0
+**  - - - - - - - - -
+**
+**  Earth position and velocity, heliocentric and barycentric, with
+**  respect to the Barycentric Celestial Reference System.
+**
+**  Given:
+**     date1,date2  double        TDB date (Note 1)
+**
+**  Returned:
+**     pvh          double[2][3]  heliocentric Earth position/velocity
+**     pvb          double[2][3]  barycentric Earth position/velocity
+**
+**  Returned (function value):
+**                  int           status: 0 = OK
+**                                       +1 = warning: date outside
+**                                            the range 1900-2100 AD
+**
+**  Notes:
+**
+**  1) The TDB date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TDB)=2450123.7 could be expressed in any of these ways, among
+**     others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in cases
+**     where the loss of several decimal digits of resolution is
+**     acceptable.  The J2000 method is best matched to the way the
+**     argument is handled internally and will deliver the optimum
+**     resolution.  The MJD method and the date & time methods are both
+**     good compromises between resolution and convenience.  However,
+**     the accuracy of the result is more likely to be limited by the
+**     algorithm itself than the way the date has been expressed.
+**
+**     n.b. TT can be used instead of TDB in most applications.
+**
+**  2) On return, the arrays pvh and pvb contain the following:
+**
+**        pvh[0][0]  x       }
+**        pvh[0][1]  y       } heliocentric position, AU
+**        pvh[0][2]  z       }
+**
+**        pvh[1][0]  xdot    }
+**        pvh[1][1]  ydot    } heliocentric velocity, AU/d
+**        pvh[1][2]  zdot    }
+**
+**        pvb[0][0]  x       }
+**        pvb[0][1]  y       } barycentric position, AU
+**        pvb[0][2]  z       }
+**
+**        pvb[1][0]  xdot    }
+**        pvb[1][1]  ydot    } barycentric velocity, AU/d
+**        pvb[1][2]  zdot    }
+**
+**     The vectors are with respect to the Barycentric Celestial
+**     Reference System.  The time unit is one day in TDB.
+**
+**  3) The function is a SIMPLIFIED SOLUTION from the planetary theory
+**     VSOP2000 (X. Moisson, P. Bretagnon, 2001, Celes. Mechanics &
+**     Dyn. Astron., 80, 3/4, 205-213) and is an adaptation of original
+**     Fortran code supplied by P. Bretagnon (private comm., 2000).
+**
+**  4) Comparisons over the time span 1900-2100 with this simplified
+**     solution and the JPL DE405 ephemeris give the following results:
+**
+**                                RMS    max
+**           Heliocentric:
+**              position error    3.7   11.2   km
+**              velocity error    1.4    5.0   mm/s
+**
+**           Barycentric:
+**              position error    4.6   13.4   km
+**              velocity error    1.4    4.9   mm/s
+**
+**     Comparisons with the JPL DE406 ephemeris show that by 1800 and
+**     2200 the position errors are approximately double their 1900-2100
+**     size.  By 1500 and 2500 the deterioration is a factor of 10 and
+**     by 1000 and 3000 a factor of 60.  The velocity accuracy falls off
+**     at about half that rate.
+**
+**  5) It is permissible to use the same array for pvh and pvb, which
+**     will receive the barycentric values.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/*
+** Matrix elements for orienting the analytical model to DE405.
+**
+** The corresponding Euler angles are:
+**
+**                       d  '  "
+**   1st rotation    -  23 26 21.4091 about the x-axis  (obliquity)
+**   2nd rotation    +         0.0475 about the z-axis  (RA offset)
+**
+** These were obtained empirically, by comparisons with DE405 over
+** 1900-2100.
+*/
+   static const double am12 =  0.000000211284,
+                       am13 = -0.000000091603,
+                       am21 = -0.000000230286,
+                       am22 =  0.917482137087,
+                       am23 = -0.397776982902,
+                       am32 =  0.397776982902,
+                       am33 =  0.917482137087;
+
+/*
+** ----------------------
+** Ephemeris Coefficients
+** ----------------------
+**
+** The ephemeris consists of harmonic terms for predicting (i) the Sun
+** to Earth vector and (ii) the Solar-System-barycenter to Sun vector
+** respectively.  The coefficients are stored in arrays which, although
+** 1-demensional, contain groups of three.  Each triplet of
+** coefficients is the amplitude, phase and frequency for one term in
+** the model, and each array contains the number of terms called for by
+** the model.
+**
+** There are eighteen such arrays, named as follows:
+**
+**     array         model      power of T      component
+**
+**      e0x      Sun-to-Earth        0              x
+**      e0y      Sun-to-Earth        0              y
+**      e0z      Sun-to-Earth        0              z
+**
+**      e1x      Sun-to-Earth        1              x
+**      e1y      Sun-to-Earth        1              y
+**      e1z      Sun-to-Earth        1              z
+**
+**      e2x      Sun-to-Earth        2              x
+**      e2y      Sun-to-Earth        2              y
+**      e2z      Sun-to-Earth        2              z
+**
+**      s0x      SSB-to-Sun          0              x
+**      s0y      SSB-to-Sun          0              y
+**      s0z      SSB-to-Sun          0              z
+**
+**      s1x      SSB-to-Sun          1              x
+**      s1y      SSB-to-Sun          1              y
+**      s1z      SSB-to-Sun          1              z
+**
+**      s2x      SSB-to-Sun          2              x
+**      s2y      SSB-to-Sun          2              y
+**      s2z      SSB-to-Sun          2              z
+*/
+
+/* Sun-to-Earth, T^0, X */
+   static const double e0x[] = {
+      0.9998292878132e+00, 0.1753485171504e+01, 0.6283075850446e+01,
+      0.8352579567414e-02, 0.1710344404582e+01, 0.1256615170089e+02,
+      0.5611445335148e-02, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.1046664295572e-03, 0.1667225416770e+01, 0.1884922755134e+02,
+      0.3110842534677e-04, 0.6687513390251e+00, 0.8399684731857e+02,
+      0.2552413503550e-04, 0.5830637358413e+00, 0.5296909721118e+00,
+      0.2137207845781e-04, 0.1092330954011e+01, 0.1577343543434e+01,
+      0.1680240182951e-04, 0.4955366134987e+00, 0.6279552690824e+01,
+      0.1679012370795e-04, 0.6153014091901e+01, 0.6286599010068e+01,
+      0.1445526946777e-04, 0.3472744100492e+01, 0.2352866153506e+01,
+
+      0.1091038246184e-04, 0.3689845786119e+01, 0.5223693906222e+01,
+      0.9344399733932e-05, 0.6073934645672e+01, 0.1203646072878e+02,
+      0.8993182910652e-05, 0.3175705249069e+01, 0.1021328554739e+02,
+      0.5665546034116e-05, 0.2152484672246e+01, 0.1059381944224e+01,
+      0.6844146703035e-05, 0.1306964099750e+01, 0.5753384878334e+01,
+      0.7346610905565e-05, 0.4354980070466e+01, 0.3981490189893e+00,
+      0.6815396474414e-05, 0.2218229211267e+01, 0.4705732307012e+01,
+      0.6112787253053e-05, 0.5384788425458e+01, 0.6812766822558e+01,
+      0.4518120711239e-05, 0.6087604012291e+01, 0.5884926831456e+01,
+      0.4521963430706e-05, 0.1279424524906e+01, 0.6256777527156e+01,
+
+      0.4497426764085e-05, 0.5369129144266e+01, 0.6309374173736e+01,
+      0.4062190566959e-05, 0.5436473303367e+00, 0.6681224869435e+01,
+      0.5412193480192e-05, 0.7867838528395e+00, 0.7755226100720e+00,
+      0.5469839049386e-05, 0.1461440311134e+01, 0.1414349524433e+02,
+      0.5205264083477e-05, 0.4432944696116e+01, 0.7860419393880e+01,
+      0.2149759935455e-05, 0.4502237496846e+01, 0.1150676975667e+02,
+      0.2279109618501e-05, 0.1239441308815e+01, 0.7058598460518e+01,
+      0.2259282939683e-05, 0.3272430985331e+01, 0.4694002934110e+01,
+      0.2558950271319e-05, 0.2265471086404e+01, 0.1216800268190e+02,
+      0.2561581447555e-05, 0.1454740653245e+01, 0.7099330490126e+00,
+
+      0.1781441115440e-05, 0.2962068630206e+01, 0.7962980379786e+00,
+      0.1612005874644e-05, 0.1473255041006e+01, 0.5486777812467e+01,
+      0.1818630667105e-05, 0.3743903293447e+00, 0.6283008715021e+01,
+      0.1818601377529e-05, 0.6274174354554e+01, 0.6283142985870e+01,
+      0.1554475925257e-05, 0.1624110906816e+01, 0.2513230340178e+02,
+      0.2090948029241e-05, 0.5852052276256e+01, 0.1179062909082e+02,
+      0.2000176345460e-05, 0.4072093298513e+01, 0.1778984560711e+02,
+      0.1289535917759e-05, 0.5217019331069e+01, 0.7079373888424e+01,
+      0.1281135307881e-05, 0.4802054538934e+01, 0.3738761453707e+01,
+      0.1518229005692e-05, 0.8691914742502e+00, 0.2132990797783e+00,
+
+      0.9450128579027e-06, 0.4601859529950e+01, 0.1097707878456e+02,
+      0.7781119494996e-06, 0.1844352816694e+01, 0.8827390247185e+01,
+      0.7733407759912e-06, 0.3582790154750e+01, 0.5507553240374e+01,
+      0.7350644318120e-06, 0.2695277788230e+01, 0.1589072916335e+01,
+      0.6535928827023e-06, 0.3651327986142e+01, 0.1176985366291e+02,
+      0.6324624183656e-06, 0.2241302375862e+01, 0.6262300422539e+01,
+      0.6298565300557e-06, 0.4407122406081e+01, 0.6303851278352e+01,
+      0.8587037089179e-06, 0.3024307223119e+01, 0.1672837615881e+03,
+      0.8299954491035e-06, 0.6192539428237e+01, 0.3340612434717e+01,
+      0.6311263503401e-06, 0.2014758795416e+01, 0.7113454667900e-02,
+
+      0.6005646745452e-06, 0.3399500503397e+01, 0.4136910472696e+01,
+      0.7917715109929e-06, 0.2493386877837e+01, 0.6069776770667e+01,
+      0.7556958099685e-06, 0.4159491740143e+01, 0.6496374930224e+01,
+      0.6773228244949e-06, 0.4034162934230e+01, 0.9437762937313e+01,
+      0.5370708577847e-06, 0.1562219163734e+01, 0.1194447056968e+01,
+      0.5710804266203e-06, 0.2662730803386e+01, 0.6282095334605e+01,
+      0.5709824583726e-06, 0.3985828430833e+01, 0.6284056366286e+01,
+      0.5143950896447e-06, 0.1308144688689e+01, 0.6290189305114e+01,
+      0.5088010604546e-06, 0.5352817214804e+01, 0.6275962395778e+01,
+      0.4960369085172e-06, 0.2644267922349e+01, 0.6127655567643e+01,
+
+      0.4803137891183e-06, 0.4008844192080e+01, 0.6438496133249e+01,
+      0.5731747768225e-06, 0.3794550174597e+01, 0.3154687086868e+01,
+      0.4735947960579e-06, 0.6107118308982e+01, 0.3128388763578e+01,
+      0.4808348796625e-06, 0.4771458618163e+01, 0.8018209333619e+00,
+      0.4115073743137e-06, 0.3327111335159e+01, 0.8429241228195e+01,
+      0.5230575889287e-06, 0.5305708551694e+01, 0.1336797263425e+02,
+      0.5133977889215e-06, 0.5784230738814e+01, 0.1235285262111e+02,
+      0.5065815825327e-06, 0.2052064793679e+01, 0.1185621865188e+02,
+      0.4339831593868e-06, 0.3644994195830e+01, 0.1726015463500e+02,
+      0.3952928638953e-06, 0.4930376436758e+01, 0.5481254917084e+01,
+
+      0.4898498111942e-06, 0.4542084219731e+00, 0.9225539266174e+01,
+      0.4757490209328e-06, 0.3161126388878e+01, 0.5856477690889e+01,
+      0.4727701669749e-06, 0.6214993845446e+00, 0.2544314396739e+01,
+      0.3800966681863e-06, 0.3040132339297e+01, 0.4265981595566e+00,
+      0.3257301077939e-06, 0.8064977360087e+00, 0.3930209696940e+01,
+      0.3255810528674e-06, 0.1974147981034e+01, 0.2146165377750e+01,
+      0.3252029748187e-06, 0.2845924913135e+01, 0.4164311961999e+01,
+      0.3255505635308e-06, 0.3017900824120e+01, 0.5088628793478e+01,
+      0.2801345211990e-06, 0.6109717793179e+01, 0.1256967486051e+02,
+      0.3688987740970e-06, 0.2911550235289e+01, 0.1807370494127e+02,
+
+      0.2475153429458e-06, 0.2179146025856e+01, 0.2629832328990e-01,
+      0.3033457749150e-06, 0.1994161050744e+01, 0.4535059491685e+01,
+      0.2186743763110e-06, 0.5125687237936e+01, 0.1137170464392e+02,
+      0.2764777032774e-06, 0.4822646860252e+00, 0.1256262854127e+02,
+      0.2199028768592e-06, 0.4637633293831e+01, 0.1255903824622e+02,
+      0.2046482824760e-06, 0.1467038733093e+01, 0.7084896783808e+01,
+      0.2611209147507e-06, 0.3044718783485e+00, 0.7143069561767e+02,
+      0.2286079656818e-06, 0.4764220356805e+01, 0.8031092209206e+01,
+      0.1855071202587e-06, 0.3383637774428e+01, 0.1748016358760e+01,
+      0.2324669506784e-06, 0.6189088449251e+01, 0.1831953657923e+02,
+
+      0.1709528015688e-06, 0.5874966729774e+00, 0.4933208510675e+01,
+      0.2168156875828e-06, 0.4302994009132e+01, 0.1044738781244e+02,
+      0.2106675556535e-06, 0.3800475419891e+01, 0.7477522907414e+01,
+      0.1430213830465e-06, 0.1294660846502e+01, 0.2942463415728e+01,
+      0.1388396901944e-06, 0.4594797202114e+01, 0.8635942003952e+01,
+      0.1922258844190e-06, 0.4943044543591e+00, 0.1729818233119e+02,
+      0.1888460058292e-06, 0.2426943912028e+01, 0.1561374759853e+03,
+      0.1789449386107e-06, 0.1582973303499e+00, 0.1592596075957e+01,
+      0.1360803685374e-06, 0.5197240440504e+01, 0.1309584267300e+02,
+      0.1504038014709e-06, 0.3120360916217e+01, 0.1649636139783e+02,
+
+      0.1382769533389e-06, 0.6164702888205e+01, 0.7632943190217e+01,
+      0.1438059769079e-06, 0.1437423770979e+01, 0.2042657109477e+02,
+      0.1326303260037e-06, 0.3609688799679e+01, 0.1213955354133e+02,
+      0.1159244950540e-06, 0.5463018167225e+01, 0.5331357529664e+01,
+      0.1433118149136e-06, 0.6028909912097e+01, 0.7342457794669e+01,
+      0.1234623148594e-06, 0.3109645574997e+01, 0.6279485555400e+01,
+      0.1233949875344e-06, 0.3539359332866e+01, 0.6286666145492e+01,
+      0.9927196061299e-07, 0.1259321569772e+01, 0.7234794171227e+01,
+      0.1242302191316e-06, 0.1065949392609e+01, 0.1511046609763e+02,
+      0.1098402195201e-06, 0.2192508743837e+01, 0.1098880815746e+02,
+
+      0.1158191395315e-06, 0.4054411278650e+01, 0.5729506548653e+01,
+      0.9048475596241e-07, 0.5429764748518e+01, 0.9623688285163e+01,
+      0.8889853269023e-07, 0.5046586206575e+01, 0.6148010737701e+01,
+      0.1048694242164e-06, 0.2628858030806e+01, 0.6836645152238e+01,
+      0.1112308378646e-06, 0.4177292719907e+01, 0.1572083878776e+02,
+      0.8631729709901e-07, 0.1601345232557e+01, 0.6418140963190e+01,
+      0.8527816951664e-07, 0.2463888997513e+01, 0.1471231707864e+02,
+      0.7892139456991e-07, 0.3154022088718e+01, 0.2118763888447e+01,
+      0.1051782905236e-06, 0.4795035816088e+01, 0.1349867339771e+01,
+      0.1048219943164e-06, 0.2952983395230e+01, 0.5999216516294e+01,
+
+      0.7435760775143e-07, 0.5420547991464e+01, 0.6040347114260e+01,
+      0.9869574106949e-07, 0.3695646753667e+01, 0.6566935184597e+01,
+      0.9156886364226e-07, 0.3922675306609e+01, 0.5643178611111e+01,
+      0.7006834356188e-07, 0.1233968624861e+01, 0.6525804586632e+01,
+      0.9806170182601e-07, 0.1919542280684e+01, 0.2122839202813e+02,
+      0.9052289673607e-07, 0.4615902724369e+01, 0.4690479774488e+01,
+      0.7554200867893e-07, 0.1236863719072e+01, 0.1253985337760e+02,
+      0.8215741286498e-07, 0.3286800101559e+00, 0.1097355562493e+02,
+      0.7185178575397e-07, 0.5880942158367e+01, 0.6245048154254e+01,
+      0.7130726476180e-07, 0.7674871987661e+00, 0.6321103546637e+01,
+
+      0.6650894461162e-07, 0.6987129150116e+00, 0.5327476111629e+01,
+      0.7396888823688e-07, 0.3576824794443e+01, 0.5368044267797e+00,
+      0.7420588884775e-07, 0.5033615245369e+01, 0.2354323048545e+02,
+      0.6141181642908e-07, 0.9449927045673e+00, 0.1296430071988e+02,
+      0.6373557924058e-07, 0.6206342280341e+01, 0.9517183207817e+00,
+      0.6359474329261e-07, 0.5036079095757e+01, 0.1990745094947e+01,
+      0.5740173582646e-07, 0.6105106371350e+01, 0.9555997388169e+00,
+      0.7019864084602e-07, 0.7237747359018e+00, 0.5225775174439e+00,
+      0.6398054487042e-07, 0.3976367969666e+01, 0.2407292145756e+02,
+      0.7797092650498e-07, 0.4305423910623e+01, 0.2200391463820e+02,
+
+      0.6466760000900e-07, 0.3500136825200e+01, 0.5230807360890e+01,
+      0.7529417043890e-07, 0.3514779246100e+01, 0.1842262939178e+02,
+      0.6924571140892e-07, 0.2743457928679e+01, 0.1554202828031e+00,
+      0.6220798650222e-07, 0.2242598118209e+01, 0.1845107853235e+02,
+      0.5870209391853e-07, 0.2332832707527e+01, 0.6398972393349e+00,
+      0.6263953473888e-07, 0.2191105358956e+01, 0.6277552955062e+01,
+      0.6257781390012e-07, 0.4457559396698e+01, 0.6288598745829e+01,
+      0.5697304945123e-07, 0.3499234761404e+01, 0.1551045220144e+01,
+      0.6335438746791e-07, 0.6441691079251e+00, 0.5216580451554e+01,
+      0.6377258441152e-07, 0.2252599151092e+01, 0.5650292065779e+01,
+
+      0.6484841818165e-07, 0.1992812417646e+01, 0.1030928125552e+00,
+      0.4735551485250e-07, 0.3744672082942e+01, 0.1431416805965e+02,
+      0.4628595996170e-07, 0.1334226211745e+01, 0.5535693017924e+00,
+      0.6258152336933e-07, 0.4395836159154e+01, 0.2608790314060e+02,
+      0.6196171366594e-07, 0.2587043007997e+01, 0.8467247584405e+02,
+      0.6159556952126e-07, 0.4782499769128e+01, 0.2394243902548e+03,
+      0.4987741172394e-07, 0.7312257619924e+00, 0.7771377146812e+02,
+      0.5459280703142e-07, 0.3001376372532e+01, 0.6179983037890e+01,
+      0.4863461189999e-07, 0.3767222128541e+01, 0.9027992316901e+02,
+      0.5349912093158e-07, 0.3663594450273e+01, 0.6386168663001e+01,
+
+      0.5673725607806e-07, 0.4331187919049e+01, 0.6915859635113e+01,
+      0.4745485060512e-07, 0.5816195745518e+01, 0.6282970628506e+01,
+      0.4745379005326e-07, 0.8323672435672e+00, 0.6283181072386e+01,
+      0.4049002796321e-07, 0.3785023976293e+01, 0.6254626709878e+01,
+      0.4247084014515e-07, 0.2378220728783e+01, 0.7875671926403e+01,
+      0.4026912363055e-07, 0.2864103423269e+01, 0.6311524991013e+01,
+      0.4062935011774e-07, 0.2415408595975e+01, 0.3634620989887e+01,
+      0.5347771048509e-07, 0.3343479309801e+01, 0.2515860172507e+02,
+      0.4829494136505e-07, 0.2821742398262e+01, 0.5760498333002e+01,
+      0.4342554404599e-07, 0.5624662458712e+01, 0.7238675589263e+01,
+
+      0.4021599184361e-07, 0.5557250275009e+00, 0.1101510648075e+02,
+      0.4104900474558e-07, 0.3296691780005e+01, 0.6709674010002e+01,
+      0.4376532905131e-07, 0.3814443999443e+01, 0.6805653367890e+01,
+      0.3314590480650e-07, 0.3560229189250e+01, 0.1259245002418e+02,
+      0.3232421839643e-07, 0.5185389180568e+01, 0.1066495398892e+01,
+      0.3541176318876e-07, 0.3921381909679e+01, 0.9917696840332e+01,
+      0.3689831242681e-07, 0.4190658955386e+01, 0.1192625446156e+02,
+      0.3890605376774e-07, 0.5546023371097e+01, 0.7478166569050e-01,
+      0.3038559339780e-07, 0.6231032794494e+01, 0.1256621883632e+02,
+      0.3137083969782e-07, 0.6207063419190e+01, 0.4292330755499e+01,
+
+      0.4024004081854e-07, 0.1195257375713e+01, 0.1334167431096e+02,
+      0.3300234879283e-07, 0.1804694240998e+01, 0.1057540660594e+02,
+      0.3635399155575e-07, 0.5597811343500e+01, 0.6208294184755e+01,
+      0.3032668691356e-07, 0.3191059366530e+01, 0.1805292951336e+02,
+      0.2809652069058e-07, 0.4094348032570e+01, 0.3523159621801e-02,
+      0.3696955383823e-07, 0.5219282738794e+01, 0.5966683958112e+01,
+      0.3562894142503e-07, 0.1037247544554e+01, 0.6357857516136e+01,
+      0.3510598524148e-07, 0.1430020816116e+01, 0.6599467742779e+01,
+      0.3617736142953e-07, 0.3002911403677e+01, 0.6019991944201e+01,
+      0.2624524910730e-07, 0.2437046757292e+01, 0.6702560555334e+01,
+
+      0.2535824204490e-07, 0.1581594689647e+01, 0.3141537925223e+02,
+      0.3519787226257e-07, 0.5379863121521e+01, 0.2505706758577e+03,
+      0.2578406709982e-07, 0.4904222639329e+01, 0.1673046366289e+02,
+      0.3423887981473e-07, 0.3646448997315e+01, 0.6546159756691e+01,
+      0.2776083886467e-07, 0.3307829300144e+01, 0.1272157198369e+02,
+      0.3379592818379e-07, 0.1747541251125e+01, 0.1494531617769e+02,
+      0.3050255426284e-07, 0.1784689432607e-01, 0.4732030630302e+01,
+      0.2652378350236e-07, 0.4420055276260e+01, 0.5863591145557e+01,
+      0.2374498173768e-07, 0.3629773929208e+01, 0.2388894113936e+01,
+      0.2716451255140e-07, 0.3079623706780e+01, 0.1202934727411e+02,
+
+      0.3038583699229e-07, 0.3312487903507e+00, 0.1256608456547e+02,
+      0.2220681228760e-07, 0.5265520401774e+01, 0.1336244973887e+02,
+      0.3044156540912e-07, 0.4766664081250e+01, 0.2908881142201e+02,
+      0.2731859923561e-07, 0.5069146530691e+01, 0.1391601904066e+02,
+      0.2285603018171e-07, 0.5954935112271e+01, 0.6076890225335e+01,
+      0.2025006454555e-07, 0.4061789589267e+01, 0.4701116388778e+01,
+      0.2012597519804e-07, 0.2485047705241e+01, 0.6262720680387e+01,
+      0.2003406962258e-07, 0.4163779209320e+01, 0.6303431020504e+01,
+      0.2207863441371e-07, 0.6923839133828e+00, 0.6489261475556e+01,
+      0.2481374305624e-07, 0.5944173595676e+01, 0.1204357418345e+02,
+
+      0.2130923288870e-07, 0.4641013671967e+01, 0.5746271423666e+01,
+      0.2446370543391e-07, 0.6125796518757e+01, 0.1495633313810e+00,
+      0.1932492759052e-07, 0.2234572324504e+00, 0.1352175143971e+02,
+      0.2600122568049e-07, 0.4281012405440e+01, 0.4590910121555e+01,
+      0.2431754047488e-07, 0.1429943874870e+00, 0.1162474756779e+01,
+      0.1875902869209e-07, 0.9781803816948e+00, 0.6279194432410e+01,
+      0.1874381139426e-07, 0.5670368130173e+01, 0.6286957268481e+01,
+      0.2156696047173e-07, 0.2008985006833e+01, 0.1813929450232e+02,
+      0.1965076182484e-07, 0.2566186202453e+00, 0.4686889479442e+01,
+      0.2334816372359e-07, 0.4408121891493e+01, 0.1002183730415e+02,
+
+      0.1869937408802e-07, 0.5272745038656e+01, 0.2427287361862e+00,
+      0.2436236460883e-07, 0.4407720479029e+01, 0.9514313292143e+02,
+      0.1761365216611e-07, 0.1943892315074e+00, 0.1351787002167e+02,
+      0.2156289480503e-07, 0.1418570924545e+01, 0.6037244212485e+01,
+      0.2164748979255e-07, 0.4724603439430e+01, 0.2301353951334e+02,
+      0.2222286670853e-07, 0.2400266874598e+01, 0.1266924451345e+02,
+      0.2070901414929e-07, 0.5230348028732e+01, 0.6528907488406e+01,
+      0.1792745177020e-07, 0.2099190328945e+01, 0.6819880277225e+01,
+      0.1841802068445e-07, 0.3467527844848e+00, 0.6514761976723e+02,
+      0.1578401631718e-07, 0.7098642356340e+00, 0.2077542790660e-01,
+
+      0.1561690152531e-07, 0.5943349620372e+01, 0.6272439236156e+01,
+      0.1558591045463e-07, 0.7040653478980e+00, 0.6293712464735e+01,
+      0.1737356469576e-07, 0.4487064760345e+01, 0.1765478049437e+02,
+      0.1434755619991e-07, 0.2993391570995e+01, 0.1102062672231e+00,
+      0.1482187806654e-07, 0.2278049198251e+01, 0.1052268489556e+01,
+      0.1424812827089e-07, 0.1682114725827e+01, 0.1311972100268e+02,
+      0.1380282448623e-07, 0.3262668602579e+01, 0.1017725758696e+02,
+      0.1811481244566e-07, 0.3187771221777e+01, 0.1887552587463e+02,
+      0.1504446185696e-07, 0.5650162308647e+01, 0.7626583626240e-01,
+      0.1740776154137e-07, 0.5487068607507e+01, 0.1965104848470e+02,
+
+      0.1374339536251e-07, 0.5745688172201e+01, 0.6016468784579e+01,
+      0.1761377477704e-07, 0.5748060203659e+01, 0.2593412433514e+02,
+      0.1535138225795e-07, 0.6226848505790e+01, 0.9411464614024e+01,
+      0.1788140543676e-07, 0.6189318878563e+01, 0.3301902111895e+02,
+      0.1375002807996e-07, 0.5371812884394e+01, 0.6327837846670e+00,
+      0.1242115758632e-07, 0.1471687569712e+01, 0.3894181736510e+01,
+      0.1450977333938e-07, 0.4143836662127e+01, 0.1277945078067e+02,
+      0.1297579575023e-07, 0.9003477661957e+00, 0.6549682916313e+01,
+      0.1462667934821e-07, 0.5760505536428e+01, 0.1863592847156e+02,
+      0.1381774374799e-07, 0.1085471729463e+01, 0.2379164476796e+01,
+
+      0.1682333169307e-07, 0.5409870870133e+01, 0.1620077269078e+02,
+      0.1190812918837e-07, 0.1397205174601e+01, 0.1149965630200e+02,
+      0.1221434762106e-07, 0.9001804809095e+00, 0.1257326515556e+02,
+      0.1549934644860e-07, 0.4262528275544e+01, 0.1820933031200e+02,
+      0.1252138953050e-07, 0.1411642012027e+01, 0.6993008899458e+01,
+      0.1237078905387e-07, 0.2844472403615e+01, 0.2435678079171e+02,
+      0.1446953389615e-07, 0.5295835522223e+01, 0.3813291813120e-01,
+      0.1388446457170e-07, 0.4969428135497e+01, 0.2458316379602e+00,
+      0.1019339179228e-07, 0.2491369561806e+01, 0.6112403035119e+01,
+      0.1258880815343e-07, 0.4679426248976e+01, 0.5429879531333e+01,
+
+      0.1297768238261e-07, 0.1074509953328e+01, 0.1249137003520e+02,
+      0.9913505718094e-08, 0.4735097918224e+01, 0.6247047890016e+01,
+      0.9830453155969e-08, 0.4158649187338e+01, 0.6453748665772e+01,
+      0.1192615865309e-07, 0.3438208613699e+01, 0.6290122169689e+01,
+      0.9835874798277e-08, 0.1913300781229e+01, 0.6319103810876e+01,
+      0.9639087569277e-08, 0.9487683644125e+00, 0.8273820945392e+01,
+      0.1175716107001e-07, 0.3228141664287e+01, 0.6276029531202e+01,
+      0.1018926508678e-07, 0.2216607854300e+01, 0.1254537627298e+02,
+      0.9500087869225e-08, 0.2625116459733e+01, 0.1256517118505e+02,
+      0.9664192916575e-08, 0.5860562449214e+01, 0.6259197520765e+01,
+
+      0.9612858712203e-08, 0.7885682917381e+00, 0.6306954180126e+01,
+      0.1117645675413e-07, 0.3932148831189e+01, 0.1779695906178e+02,
+      0.1158864052160e-07, 0.9995605521691e+00, 0.1778273215245e+02,
+      0.9021043467028e-08, 0.5263769742673e+01, 0.6172869583223e+01,
+      0.8836134773563e-08, 0.1496843220365e+01, 0.1692165728891e+01,
+      0.1045872200691e-07, 0.7009039517214e+00, 0.2204125344462e+00,
+      0.1211463487798e-07, 0.4041544938511e+01, 0.8257698122054e+02,
+      0.8541990804094e-08, 0.1447586692316e+01, 0.6393282117669e+01,
+      0.1038720703636e-07, 0.4594249718112e+00, 0.1550861511662e+02,
+      0.1126722351445e-07, 0.3925550579036e+01, 0.2061856251104e+00,
+
+      0.8697373859631e-08, 0.4411341856037e+01, 0.9491756770005e+00,
+      0.8869380028441e-08, 0.2402659724813e+01, 0.3903911373650e+01,
+      0.9247014693258e-08, 0.1401579743423e+01, 0.6267823317922e+01,
+      0.9205062930950e-08, 0.5245978000814e+01, 0.6298328382969e+01,
+      0.8000745038049e-08, 0.3590803356945e+01, 0.2648454860559e+01,
+      0.9168973650819e-08, 0.2470150501679e+01, 0.1498544001348e+03,
+      0.1075444949238e-07, 0.1328606161230e+01, 0.3694923081589e+02,
+      0.7817298525817e-08, 0.6162256225998e+01, 0.4804209201333e+01,
+      0.9541469226356e-08, 0.3942568967039e+01, 0.1256713221673e+02,
+      0.9821910122027e-08, 0.2360246287233e+00, 0.1140367694411e+02,
+
+      0.9897822023777e-08, 0.4619805634280e+01, 0.2280573557157e+02,
+      0.7737289283765e-08, 0.3784727847451e+01, 0.7834121070590e+01,
+      0.9260204034710e-08, 0.2223352487601e+01, 0.2787043132925e+01,
+      0.7320252888486e-08, 0.1288694636874e+01, 0.6282655592598e+01,
+      0.7319785780946e-08, 0.5359869567774e+01, 0.6283496108294e+01,
+      0.7147219933778e-08, 0.5516616675856e+01, 0.1725663147538e+02,
+      0.7946502829878e-08, 0.2630459984567e+01, 0.1241073141809e+02,
+      0.9001711808932e-08, 0.2849815827227e+01, 0.6281591679874e+01,
+      0.8994041507257e-08, 0.3795244450750e+01, 0.6284560021018e+01,
+      0.8298582787358e-08, 0.5236413127363e+00, 0.1241658836951e+02,
+
+      0.8526596520710e-08, 0.4794605424426e+01, 0.1098419223922e+02,
+      0.8209822103197e-08, 0.1578752370328e+01, 0.1096996532989e+02,
+      0.6357049861094e-08, 0.5708926113761e+01, 0.1596186371003e+01,
+      0.7370473179049e-08, 0.3842402530241e+01, 0.4061219149443e+01,
+      0.7232154664726e-08, 0.3067548981535e+01, 0.1610006857377e+03,
+      0.6328765494903e-08, 0.1313930030069e+01, 0.1193336791622e+02,
+      0.8030064908595e-08, 0.3488500408886e+01, 0.8460828644453e+00,
+      0.6275464259232e-08, 0.1532061626198e+01, 0.8531963191132e+00,
+      0.7051897446325e-08, 0.3285859929993e+01, 0.5849364236221e+01,
+      0.6161593705428e-08, 0.1477341999464e+01, 0.5573142801433e+01,
+
+      0.7754683957278e-08, 0.1586118663096e+01, 0.8662240327241e+01,
+      0.5889928990701e-08, 0.1304887868803e+01, 0.1232342296471e+02,
+      0.5705756047075e-08, 0.4555333589350e+01, 0.1258692712880e+02,
+      0.5964178808332e-08, 0.3001762842062e+01, 0.5333900173445e+01,
+      0.6712446027467e-08, 0.4886780007595e+01, 0.1171295538178e+02,
+      0.5941809275464e-08, 0.4701509603824e+01, 0.9779108567966e+01,
+      0.5466993627395e-08, 0.4588357817278e+01, 0.1884211409667e+02,
+      0.6340512090980e-08, 0.1164543038893e+01, 0.5217580628120e+02,
+      0.6325505710045e-08, 0.3919171259645e+01, 0.1041998632314e+02,
+      0.6164789509685e-08, 0.2143828253542e+01, 0.6151533897323e+01,
+
+      0.5263330812430e-08, 0.6066564434241e+01, 0.1885275071096e+02,
+      0.5597087780221e-08, 0.2926316429472e+01, 0.4337116142245e+00,
+      0.5396556236817e-08, 0.3244303591505e+01, 0.6286362197481e+01,
+      0.5396615148223e-08, 0.3404304703662e+01, 0.6279789503410e+01,
+      0.7091832443341e-08, 0.8532377803192e+00, 0.4907302013889e+01,
+      0.6572352589782e-08, 0.4901966774419e+01, 0.1176433076753e+02,
+      0.5960236060795e-08, 0.1874672315797e+01, 0.1422690933580e-01,
+      0.5125480043511e-08, 0.3735726064334e+01, 0.1245594543367e+02,
+      0.5928241866410e-08, 0.4502033899935e+01, 0.6414617803568e+01,
+      0.5249600357424e-08, 0.4372334799878e+01, 0.1151388321134e+02,
+
+      0.6059171276087e-08, 0.2581617302908e+01, 0.6062663316000e+01,
+      0.5295235081662e-08, 0.2974811513158e+01, 0.3496032717521e+01,
+      0.5820561875933e-08, 0.1796073748244e+00, 0.2838593341516e+00,
+      0.4754696606440e-08, 0.1981998136973e+01, 0.3104930017775e+01,
+      0.6385053548955e-08, 0.2559174171605e+00, 0.6133512519065e+01,
+      0.6589828273941e-08, 0.2750967106776e+01, 0.4087944051283e+02,
+      0.5383376567189e-08, 0.6325947523578e+00, 0.2248384854122e+02,
+      0.5928941683538e-08, 0.1672304519067e+01, 0.1581959461667e+01,
+      0.4816060709794e-08, 0.3512566172575e+01, 0.9388005868221e+01,
+      0.6003381586512e-08, 0.5610932219189e+01, 0.5326786718777e+01,
+
+      0.5504225393105e-08, 0.4037501131256e+01, 0.6503488384892e+01,
+      0.5353772620129e-08, 0.6122774968240e+01, 0.1735668374386e+03,
+      0.5786253768544e-08, 0.5527984999515e+01, 0.1350651127443e+00,
+      0.5065706702002e-08, 0.9980765573624e+00, 0.1248988586463e+02,
+      0.5972838885276e-08, 0.6044489493203e+01, 0.2673594526851e+02,
+      0.5323585877961e-08, 0.3924265998147e+01, 0.4171425416666e+01,
+      0.5210772682858e-08, 0.6220111376901e+01, 0.2460261242967e+02,
+      0.4726549040535e-08, 0.3716043206862e+01, 0.7232251527446e+01,
+      0.6029425105059e-08, 0.8548704071116e+00, 0.3227113045244e+03,
+      0.4481542826513e-08, 0.1426925072829e+01, 0.5547199253223e+01,
+
+      0.5836024505068e-08, 0.7135651752625e-01, 0.7285056171570e+02,
+      0.4137046613272e-08, 0.5330767643283e+01, 0.1087398597200e+02,
+      0.5171977473924e-08, 0.4494262335353e+00, 0.1884570439172e+02,
+      0.5694429833732e-08, 0.2952369582215e+01, 0.9723862754494e+02,
+      0.4009158925298e-08, 0.3500003416535e+01, 0.6244942932314e+01,
+      0.4784939596873e-08, 0.6196709413181e+01, 0.2929661536378e+02,
+      0.3983725022610e-08, 0.5103690031897e+01, 0.4274518229222e+01,
+      0.3870535232462e-08, 0.3187569587401e+01, 0.6321208768577e+01,
+      0.5140501213951e-08, 0.1668924357457e+01, 0.1232032006293e+02,
+      0.3849034819355e-08, 0.4445722510309e+01, 0.1726726808967e+02,
+
+      0.4002383075060e-08, 0.5226224152423e+01, 0.7018952447668e+01,
+      0.3890719543549e-08, 0.4371166550274e+01, 0.1491901785440e+02,
+      0.4887084607881e-08, 0.5973556689693e+01, 0.1478866649112e+01,
+      0.3739939287592e-08, 0.2089084714600e+01, 0.6922973089781e+01,
+      0.5031925918209e-08, 0.4658371936827e+01, 0.1715706182245e+02,
+      0.4387748764954e-08, 0.4825580552819e+01, 0.2331413144044e+03,
+      0.4147398098865e-08, 0.3739003524998e+01, 0.1376059875786e+02,
+      0.3719089993586e-08, 0.1148941386536e+01, 0.6297302759782e+01,
+      0.3934238461056e-08, 0.1559893008343e+01, 0.7872148766781e+01,
+      0.3672471375622e-08, 0.5516145383612e+01, 0.6268848941110e+01,
+
+      0.3768911277583e-08, 0.6116053700563e+01, 0.4157198507331e+01,
+      0.4033388417295e-08, 0.5076821746017e+01, 0.1567108171867e+02,
+      0.3764194617832e-08, 0.8164676232075e+00, 0.3185192151914e+01,
+      0.4840628226284e-08, 0.1360479453671e+01, 0.1252801878276e+02,
+      0.4949443923785e-08, 0.2725622229926e+01, 0.1617106187867e+03,
+      0.4117393089971e-08, 0.6054459628492e+00, 0.5642198095270e+01,
+      0.3925754020428e-08, 0.8570462135210e+00, 0.2139354194808e+02,
+      0.3630551757923e-08, 0.3552067338279e+01, 0.6294805223347e+01,
+      0.3627274802357e-08, 0.3096565085313e+01, 0.6271346477544e+01,
+      0.3806143885093e-08, 0.6367751709777e+00, 0.1725304118033e+02,
+
+      0.4433254641565e-08, 0.4848461503937e+01, 0.7445550607224e+01,
+      0.3712319846576e-08, 0.1331950643655e+01, 0.4194847048887e+00,
+      0.3849847534783e-08, 0.4958368297746e+00, 0.9562891316684e+00,
+      0.3483955430165e-08, 0.2237215515707e+01, 0.1161697602389e+02,
+      0.3961912730982e-08, 0.3332402188575e+01, 0.2277943724828e+02,
+      0.3419978244481e-08, 0.5785600576016e+01, 0.1362553364512e+02,
+      0.3329417758177e-08, 0.9812676559709e-01, 0.1685848245639e+02,
+      0.4207206893193e-08, 0.9494780468236e+00, 0.2986433403208e+02,
+      0.3268548976410e-08, 0.1739332095686e+00, 0.5749861718712e+01,
+      0.3321880082685e-08, 0.1423354800666e+01, 0.6279143387820e+01,
+
+      0.4503173010852e-08, 0.2314972675293e+00, 0.1385561574497e+01,
+      0.4316599090954e-08, 0.1012646782616e+00, 0.4176041334900e+01,
+      0.3283493323850e-08, 0.5233306881265e+01, 0.6287008313071e+01,
+      0.3164033542343e-08, 0.4005597257511e+01, 0.2099539292909e+02,
+      0.4159720956725e-08, 0.5365676242020e+01, 0.5905702259363e+01,
+      0.3565176892217e-08, 0.4284440620612e+01, 0.3932462625300e-02,
+      0.3514440950221e-08, 0.4270562636575e+01, 0.7335344340001e+01,
+      0.3540596871909e-08, 0.5953553201060e+01, 0.1234573916645e+02,
+      0.2960769905118e-08, 0.1115180417718e+01, 0.2670964694522e+02,
+      0.2962213739684e-08, 0.3863811918186e+01, 0.6408777551755e+00,
+
+      0.3883556700251e-08, 0.1268617928302e+01, 0.6660449441528e+01,
+      0.2919225516346e-08, 0.4908605223265e+01, 0.1375773836557e+01,
+      0.3115158863370e-08, 0.3744519976885e+01, 0.3802769619140e-01,
+      0.4099438144212e-08, 0.4173244670532e+01, 0.4480965020977e+02,
+      0.2899531858964e-08, 0.5910601428850e+01, 0.2059724391010e+02,
+      0.3289733429855e-08, 0.2488050078239e+01, 0.1081813534213e+02,
+      0.3933075612875e-08, 0.1122363652883e+01, 0.3773735910827e+00,
+      0.3021403764467e-08, 0.4951973724904e+01, 0.2982630633589e+02,
+      0.2798598949757e-08, 0.5117057845513e+01, 0.1937891852345e+02,
+      0.3397421302707e-08, 0.6104159180476e+01, 0.6923953605621e+01,
+
+      0.3720398002179e-08, 0.1184933429829e+01, 0.3066615496545e+02,
+      0.3598484186267e-08, 0.3505282086105e+01, 0.6147450479709e+01,
+      0.3694594027310e-08, 0.2286651088141e+01, 0.2636725487657e+01,
+      0.2680444152969e-08, 0.1871816775482e+00, 0.6816289982179e+01,
+      0.3497574865641e-08, 0.3143251755431e+01, 0.6418701221183e+01,
+      0.3130274129494e-08, 0.2462167316018e+01, 0.1235996607578e+02,
+      0.3241119069551e-08, 0.4256374004686e+01, 0.1652265972112e+02,
+      0.2601960842061e-08, 0.4970362941425e+01, 0.1045450126711e+02,
+      0.2690601527504e-08, 0.2372657824898e+01, 0.3163918923335e+00,
+      0.2908688152664e-08, 0.4232652627721e+01, 0.2828699048865e+02,
+
+      0.3120456131875e-08, 0.3925747001137e+00, 0.2195415756911e+02,
+      0.3148855423384e-08, 0.3093478330445e+01, 0.1172006883645e+02,
+      0.3051044261017e-08, 0.5560948248212e+01, 0.6055599646783e+01,
+      0.2826006876660e-08, 0.5072790310072e+01, 0.5120601093667e+01,
+      0.3100034191711e-08, 0.4998530231096e+01, 0.1799603123222e+02,
+      0.2398771640101e-08, 0.2561739802176e+01, 0.6255674361143e+01,
+      0.2384002842728e-08, 0.4087420284111e+01, 0.6310477339748e+01,
+      0.2842146517568e-08, 0.2515048217955e+01, 0.5469525544182e+01,
+      0.2847674371340e-08, 0.5235326497443e+01, 0.1034429499989e+02,
+      0.2903722140764e-08, 0.1088200795797e+01, 0.6510552054109e+01,
+
+      0.3187610710605e-08, 0.4710624424816e+01, 0.1693792562116e+03,
+      0.3048869992813e-08, 0.2857975896445e+00, 0.8390110365991e+01,
+      0.2860216950984e-08, 0.2241619020815e+01, 0.2243449970715e+00,
+      0.2701117683113e-08, 0.6651573305272e-01, 0.6129297044991e+01,
+      0.2509891590152e-08, 0.1285135324585e+01, 0.1044027435778e+02,
+      0.2623200252223e-08, 0.2981229834530e+00, 0.6436854655901e+01,
+      0.2622541669202e-08, 0.6122470726189e+01, 0.9380959548977e+01,
+      0.2818435667099e-08, 0.4251087148947e+01, 0.5934151399930e+01,
+      0.2365196797465e-08, 0.3465070460790e+01, 0.2470570524223e+02,
+      0.2358704646143e-08, 0.5791603815350e+01, 0.8671969964381e+01,
+
+      0.2388299481390e-08, 0.4142483772941e+01, 0.7096626156709e+01,
+      0.1996041217224e-08, 0.2101901889496e+01, 0.1727188400790e+02,
+      0.2687593060336e-08, 0.1526689456959e+01, 0.7075506709219e+02,
+      0.2618913670810e-08, 0.2397684236095e+01, 0.6632000300961e+01,
+      0.2571523050364e-08, 0.5751929456787e+00, 0.6206810014183e+01,
+      0.2582135006946e-08, 0.5595464352926e+01, 0.4873985990671e+02,
+      0.2372530190361e-08, 0.5092689490655e+01, 0.1590676413561e+02,
+      0.2357178484712e-08, 0.4444363527851e+01, 0.3097883698531e+01,
+      0.2451590394723e-08, 0.3108251687661e+01, 0.6612329252343e+00,
+      0.2370045949608e-08, 0.2608133861079e+01, 0.3459636466239e+02,
+
+      0.2268997267358e-08, 0.3639717753384e+01, 0.2844914056730e-01,
+      0.1731432137906e-08, 0.1741898445707e+00, 0.2019909489111e+02,
+      0.1629869741622e-08, 0.3902225646724e+01, 0.3035599730800e+02,
+      0.2206215801974e-08, 0.4971131250731e+01, 0.6281667977667e+01,
+      0.2205469554680e-08, 0.1677462357110e+01, 0.6284483723224e+01,
+      0.2148792362509e-08, 0.4236259604006e+01, 0.1980482729015e+02,
+      0.1873733657847e-08, 0.5926814998687e+01, 0.2876692439167e+02,
+      0.2026573758959e-08, 0.4349643351962e+01, 0.2449240616245e+02,
+      0.1807770325110e-08, 0.5700940482701e+01, 0.2045286941806e+02,
+      0.1881174408581e-08, 0.6601286363430e+00, 0.2358125818164e+02,
+
+      0.1368023671690e-08, 0.2211098592752e+01, 0.2473415438279e+02,
+      0.1720017916280e-08, 0.4942488551129e+01, 0.1679593901136e+03,
+      0.1702427665131e-08, 0.1452233856386e+01, 0.3338575901272e+03,
+      0.1414032510054e-08, 0.5525357721439e+01, 0.1624205518357e+03,
+      0.1652626045364e-08, 0.4108794283624e+01, 0.8956999012000e+02,
+      0.1642957769686e-08, 0.7344335209984e+00, 0.5267006960365e+02,
+      0.1614952403624e-08, 0.3541213951363e+01, 0.3332657872986e+02,
+      0.1535988291188e-08, 0.4031094072151e+01, 0.3852657435933e+02,
+      0.1593193738177e-08, 0.4185136203609e+01, 0.2282781046519e+03,
+      0.1074569126382e-08, 0.1720485636868e+01, 0.8397383534231e+02,
+
+      0.1074408214509e-08, 0.2758613420318e+01, 0.8401985929482e+02,
+      0.9700199670465e-09, 0.4216686842097e+01, 0.7826370942180e+02,
+      0.1258433517061e-08, 0.2575068876639e+00, 0.3115650189215e+03,
+      0.1240303229539e-08, 0.4800844956756e+00, 0.1784300471910e+03,
+      0.9018345948127e-09, 0.3896756361552e+00, 0.5886454391678e+02,
+      0.1135301432805e-08, 0.3700805023550e+00, 0.7842370451713e+02,
+      0.9215887951370e-09, 0.4364579276638e+01, 0.1014262087719e+03,
+      0.1055401054147e-08, 0.2156564222111e+01, 0.5660027930059e+02,
+      0.1008725979831e-08, 0.5454015785234e+01, 0.4245678405627e+02,
+      0.7217398104321e-09, 0.1597772562175e+01, 0.2457074661053e+03,
+
+      0.6912033134447e-09, 0.5824090621461e+01, 0.1679936946371e+03,
+      0.6833881523549e-09, 0.3578778482835e+01, 0.6053048899753e+02,
+      0.4887304205142e-09, 0.3724362812423e+01, 0.9656299901946e+02,
+      0.5173709754788e-09, 0.5422427507933e+01, 0.2442876000072e+03,
+      0.4671353097145e-09, 0.2396106924439e+01, 0.1435713242844e+03,
+      0.5652608439480e-09, 0.2804028838685e+01, 0.8365903305582e+02,
+      0.5604061331253e-09, 0.1638816006247e+01, 0.8433466158131e+02,
+      0.4712723365400e-09, 0.8979003224474e+00, 0.3164282286739e+03,
+      0.4909967465112e-09, 0.3210426725516e+01, 0.4059982187939e+03,
+      0.4771358267658e-09, 0.5308027211629e+01, 0.1805255418145e+03,
+
+      0.3943451445989e-09, 0.2195145341074e+01, 0.2568537517081e+03,
+      0.3952109120244e-09, 0.5081189491586e+01, 0.2449975330562e+03,
+      0.3788134594789e-09, 0.4345171264441e+01, 0.1568131045107e+03,
+      0.3738330190479e-09, 0.2613062847997e+01, 0.3948519331910e+03,
+      0.3099866678136e-09, 0.2846760817689e+01, 0.1547176098872e+03,
+      0.2002962716768e-09, 0.4921360989412e+01, 0.2268582385539e+03,
+      0.2198291338754e-09, 0.1130360117454e+00, 0.1658638954901e+03,
+      0.1491958330784e-09, 0.4228195232278e+01, 0.2219950288015e+03,
+      0.1475384076173e-09, 0.3005721811604e+00, 0.3052819430710e+03,
+      0.1661626624624e-09, 0.7830125621203e+00, 0.2526661704812e+03,
+
+      0.9015823460025e-10, 0.3807792942715e+01, 0.4171445043968e+03 };
+
+/* Sun-to-Earth, T^0, Y */
+   static const double e0y[] = {
+      0.9998921098898e+00, 0.1826583913846e+00, 0.6283075850446e+01,
+     -0.2442700893735e-01, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.8352929742915e-02, 0.1395277998680e+00, 0.1256615170089e+02,
+      0.1046697300177e-03, 0.9641423109763e-01, 0.1884922755134e+02,
+      0.3110841876663e-04, 0.5381140401712e+01, 0.8399684731857e+02,
+      0.2570269094593e-04, 0.5301016407128e+01, 0.5296909721118e+00,
+      0.2147389623610e-04, 0.2662510869850e+01, 0.1577343543434e+01,
+      0.1680344384050e-04, 0.5207904119704e+01, 0.6279552690824e+01,
+      0.1679117312193e-04, 0.4582187486968e+01, 0.6286599010068e+01,
+      0.1440512068440e-04, 0.1900688517726e+01, 0.2352866153506e+01,
+
+      0.1135139664999e-04, 0.5273108538556e+01, 0.5223693906222e+01,
+      0.9345482571018e-05, 0.4503047687738e+01, 0.1203646072878e+02,
+      0.9007418719568e-05, 0.1605621059637e+01, 0.1021328554739e+02,
+      0.5671536712314e-05, 0.5812849070861e+00, 0.1059381944224e+01,
+      0.7451401861666e-05, 0.2807346794836e+01, 0.3981490189893e+00,
+      0.6393470057114e-05, 0.6029224133855e+01, 0.5753384878334e+01,
+      0.6814275881697e-05, 0.6472990145974e+00, 0.4705732307012e+01,
+      0.6113705628887e-05, 0.3813843419700e+01, 0.6812766822558e+01,
+      0.4503851367273e-05, 0.4527804370996e+01, 0.5884926831456e+01,
+      0.4522249141926e-05, 0.5991783029224e+01, 0.6256777527156e+01,
+
+      0.4501794307018e-05, 0.3798703844397e+01, 0.6309374173736e+01,
+      0.5514927480180e-05, 0.3961257833388e+01, 0.5507553240374e+01,
+      0.4062862799995e-05, 0.5256247296369e+01, 0.6681224869435e+01,
+      0.5414900429712e-05, 0.5499032014097e+01, 0.7755226100720e+00,
+      0.5463153987424e-05, 0.6173092454097e+01, 0.1414349524433e+02,
+      0.5071611859329e-05, 0.2870244247651e+01, 0.7860419393880e+01,
+      0.2195112094455e-05, 0.2952338617201e+01, 0.1150676975667e+02,
+      0.2279139233919e-05, 0.5951775132933e+01, 0.7058598460518e+01,
+      0.2278386100876e-05, 0.4845456398785e+01, 0.4694002934110e+01,
+      0.2559088003308e-05, 0.6945321117311e+00, 0.1216800268190e+02,
+
+      0.2561079286856e-05, 0.6167224608301e+01, 0.7099330490126e+00,
+      0.1792755796387e-05, 0.1400122509632e+01, 0.7962980379786e+00,
+      0.1818715656502e-05, 0.4703347611830e+01, 0.6283142985870e+01,
+      0.1818744924791e-05, 0.5086748900237e+01, 0.6283008715021e+01,
+      0.1554518791390e-05, 0.5331008042713e-01, 0.2513230340178e+02,
+      0.2063265737239e-05, 0.4283680484178e+01, 0.1179062909082e+02,
+      0.1497613520041e-05, 0.6074207826073e+01, 0.5486777812467e+01,
+      0.2000617940427e-05, 0.2501426281450e+01, 0.1778984560711e+02,
+      0.1289731195580e-05, 0.3646340599536e+01, 0.7079373888424e+01,
+      0.1282657998934e-05, 0.3232864804902e+01, 0.3738761453707e+01,
+
+      0.1528915968658e-05, 0.5581433416669e+01, 0.2132990797783e+00,
+      0.1187304098432e-05, 0.5453576453694e+01, 0.9437762937313e+01,
+      0.7842782928118e-06, 0.2823953922273e+00, 0.8827390247185e+01,
+      0.7352892280868e-06, 0.1124369580175e+01, 0.1589072916335e+01,
+      0.6570189360797e-06, 0.2089154042840e+01, 0.1176985366291e+02,
+      0.6324967590410e-06, 0.6704855581230e+00, 0.6262300422539e+01,
+      0.6298289872283e-06, 0.2836414855840e+01, 0.6303851278352e+01,
+      0.6476686465855e-06, 0.4852433866467e+00, 0.7113454667900e-02,
+      0.8587034651234e-06, 0.1453511005668e+01, 0.1672837615881e+03,
+      0.8068948788113e-06, 0.9224087798609e+00, 0.6069776770667e+01,
+
+      0.8353786011661e-06, 0.4631707184895e+01, 0.3340612434717e+01,
+      0.6009324532132e-06, 0.1829498827726e+01, 0.4136910472696e+01,
+      0.7558158559566e-06, 0.2588596800317e+01, 0.6496374930224e+01,
+      0.5809279504503e-06, 0.5516818853476e+00, 0.1097707878456e+02,
+      0.5374131950254e-06, 0.6275674734960e+01, 0.1194447056968e+01,
+      0.5711160507326e-06, 0.1091905956872e+01, 0.6282095334605e+01,
+      0.5710183170746e-06, 0.2415001635090e+01, 0.6284056366286e+01,
+      0.5144373590610e-06, 0.6020336443438e+01, 0.6290189305114e+01,
+      0.5103108927267e-06, 0.3775634564605e+01, 0.6275962395778e+01,
+      0.4960654697891e-06, 0.1073450946756e+01, 0.6127655567643e+01,
+
+      0.4786385689280e-06, 0.2431178012310e+01, 0.6438496133249e+01,
+      0.6109911263665e-06, 0.5343356157914e+01, 0.3154687086868e+01,
+      0.4839898944024e-06, 0.5830833594047e-01, 0.8018209333619e+00,
+      0.4734822623919e-06, 0.4536080134821e+01, 0.3128388763578e+01,
+      0.4834741473290e-06, 0.2585090489754e+00, 0.7084896783808e+01,
+      0.5134858581156e-06, 0.4213317172603e+01, 0.1235285262111e+02,
+      0.5064004264978e-06, 0.4814418806478e+00, 0.1185621865188e+02,
+      0.3753476772761e-06, 0.1599953399788e+01, 0.8429241228195e+01,
+      0.4935264014283e-06, 0.2157417556873e+01, 0.2544314396739e+01,
+      0.3950929600897e-06, 0.3359394184254e+01, 0.5481254917084e+01,
+
+      0.4895849789777e-06, 0.5165704376558e+01, 0.9225539266174e+01,
+      0.4215241688886e-06, 0.2065368800993e+01, 0.1726015463500e+02,
+      0.3796773731132e-06, 0.1468606346612e+01, 0.4265981595566e+00,
+      0.3114178142515e-06, 0.3615638079474e+01, 0.2146165377750e+01,
+      0.3260664220838e-06, 0.4417134922435e+01, 0.4164311961999e+01,
+      0.3976996123008e-06, 0.4700866883004e+01, 0.5856477690889e+01,
+      0.2801459672924e-06, 0.4538902060922e+01, 0.1256967486051e+02,
+      0.3638931868861e-06, 0.1334197991475e+01, 0.1807370494127e+02,
+      0.2487013269476e-06, 0.3749275558275e+01, 0.2629832328990e-01,
+      0.3034165481994e-06, 0.4236622030873e+00, 0.4535059491685e+01,
+
+      0.2676278825586e-06, 0.5970848007811e+01, 0.3930209696940e+01,
+      0.2764903818918e-06, 0.5194636754501e+01, 0.1256262854127e+02,
+      0.2485149930507e-06, 0.1002434207846e+01, 0.5088628793478e+01,
+      0.2199305540941e-06, 0.3066773098403e+01, 0.1255903824622e+02,
+      0.2571106500435e-06, 0.7588312459063e+00, 0.1336797263425e+02,
+      0.2049751817158e-06, 0.3444977434856e+01, 0.1137170464392e+02,
+      0.2599707296297e-06, 0.1873128542205e+01, 0.7143069561767e+02,
+      0.1785018072217e-06, 0.5015891306615e+01, 0.1748016358760e+01,
+      0.2324833891115e-06, 0.4618271239730e+01, 0.1831953657923e+02,
+      0.1709711119545e-06, 0.5300003455669e+01, 0.4933208510675e+01,
+
+      0.2107159351716e-06, 0.2229819815115e+01, 0.7477522907414e+01,
+      0.1750333080295e-06, 0.6161485880008e+01, 0.1044738781244e+02,
+      0.2000598210339e-06, 0.2967357299999e+01, 0.8031092209206e+01,
+      0.1380920248681e-06, 0.3027007923917e+01, 0.8635942003952e+01,
+      0.1412460470299e-06, 0.6037597163798e+01, 0.2942463415728e+01,
+      0.1888459803001e-06, 0.8561476243374e+00, 0.1561374759853e+03,
+      0.1788370542585e-06, 0.4869736290209e+01, 0.1592596075957e+01,
+      0.1360893296167e-06, 0.3626411886436e+01, 0.1309584267300e+02,
+      0.1506846530160e-06, 0.1550975377427e+01, 0.1649636139783e+02,
+      0.1800913376176e-06, 0.2075826033190e+01, 0.1729818233119e+02,
+
+      0.1436261390649e-06, 0.6148876420255e+01, 0.2042657109477e+02,
+      0.1220227114151e-06, 0.4382583879906e+01, 0.7632943190217e+01,
+      0.1337883603592e-06, 0.2036644327361e+01, 0.1213955354133e+02,
+      0.1159326650738e-06, 0.3892276994687e+01, 0.5331357529664e+01,
+      0.1352853128569e-06, 0.1447950649744e+01, 0.1673046366289e+02,
+      0.1433408296083e-06, 0.4457854692961e+01, 0.7342457794669e+01,
+      0.1234701666518e-06, 0.1538818147151e+01, 0.6279485555400e+01,
+      0.1234027192007e-06, 0.1968523220760e+01, 0.6286666145492e+01,
+      0.1244024091797e-06, 0.5779803499985e+01, 0.1511046609763e+02,
+      0.1097934945516e-06, 0.6210975221388e+00, 0.1098880815746e+02,
+
+      0.1254611329856e-06, 0.2591963807998e+01, 0.1572083878776e+02,
+      0.1158247286784e-06, 0.2483612812670e+01, 0.5729506548653e+01,
+      0.9039078252960e-07, 0.3857554579796e+01, 0.9623688285163e+01,
+      0.9108024978836e-07, 0.5826368512984e+01, 0.7234794171227e+01,
+      0.8887068108436e-07, 0.3475694573987e+01, 0.6148010737701e+01,
+      0.8632374035438e-07, 0.3059070488983e-01, 0.6418140963190e+01,
+      0.7893186992967e-07, 0.1583194837728e+01, 0.2118763888447e+01,
+      0.8297650201172e-07, 0.8519770534637e+00, 0.1471231707864e+02,
+      0.1019759578988e-06, 0.1319598738732e+00, 0.1349867339771e+01,
+      0.1010037696236e-06, 0.9937860115618e+00, 0.6836645152238e+01,
+
+      0.1047727548266e-06, 0.1382138405399e+01, 0.5999216516294e+01,
+      0.7351993881086e-07, 0.3833397851735e+01, 0.6040347114260e+01,
+      0.9868771092341e-07, 0.2124913814390e+01, 0.6566935184597e+01,
+      0.7007321959390e-07, 0.5946305343763e+01, 0.6525804586632e+01,
+      0.6861411679709e-07, 0.4574654977089e+01, 0.7238675589263e+01,
+      0.7554519809614e-07, 0.5949232686844e+01, 0.1253985337760e+02,
+      0.9541880448335e-07, 0.3495242990564e+01, 0.2122839202813e+02,
+      0.7185606722155e-07, 0.4310113471661e+01, 0.6245048154254e+01,
+      0.7131360871710e-07, 0.5480309323650e+01, 0.6321103546637e+01,
+      0.6651142021039e-07, 0.5411097713654e+01, 0.5327476111629e+01,
+
+      0.8538618213667e-07, 0.1827849973951e+01, 0.1101510648075e+02,
+      0.8634954288044e-07, 0.5443584943349e+01, 0.5643178611111e+01,
+      0.7449415051484e-07, 0.2011535459060e+01, 0.5368044267797e+00,
+      0.7421047599169e-07, 0.3464562529249e+01, 0.2354323048545e+02,
+      0.6140694354424e-07, 0.5657556228815e+01, 0.1296430071988e+02,
+      0.6353525143033e-07, 0.3463816593821e+01, 0.1990745094947e+01,
+      0.6221964013447e-07, 0.1532259498697e+01, 0.9517183207817e+00,
+      0.5852480257244e-07, 0.1375396598875e+01, 0.9555997388169e+00,
+      0.6398637498911e-07, 0.2405645801972e+01, 0.2407292145756e+02,
+      0.7039744069878e-07, 0.5397541799027e+01, 0.5225775174439e+00,
+
+      0.6977997694382e-07, 0.4762347105419e+01, 0.1097355562493e+02,
+      0.7460629558396e-07, 0.2711944692164e+01, 0.2200391463820e+02,
+      0.5376577536101e-07, 0.2352980430239e+01, 0.1431416805965e+02,
+      0.7530607893556e-07, 0.1943940180699e+01, 0.1842262939178e+02,
+      0.6822928971605e-07, 0.4337651846959e+01, 0.1554202828031e+00,
+      0.6220772380094e-07, 0.6716871369278e+00, 0.1845107853235e+02,
+      0.6586950799043e-07, 0.2229714460505e+01, 0.5216580451554e+01,
+      0.5873800565771e-07, 0.7627013920580e+00, 0.6398972393349e+00,
+      0.6264346929745e-07, 0.6202785478961e+00, 0.6277552955062e+01,
+      0.6257929115669e-07, 0.2886775596668e+01, 0.6288598745829e+01,
+
+      0.5343536033409e-07, 0.1977241012051e+01, 0.4690479774488e+01,
+      0.5587849781714e-07, 0.1922923484825e+01, 0.1551045220144e+01,
+      0.6905100845603e-07, 0.3570757164631e+01, 0.1030928125552e+00,
+      0.6178957066649e-07, 0.5197558947765e+01, 0.5230807360890e+01,
+      0.6187270224331e-07, 0.8193497368922e+00, 0.5650292065779e+01,
+      0.5385664291426e-07, 0.5406336665586e+01, 0.7771377146812e+02,
+      0.6329363917926e-07, 0.2837760654536e+01, 0.2608790314060e+02,
+      0.4546018761604e-07, 0.2933580297050e+01, 0.5535693017924e+00,
+      0.6196091049375e-07, 0.4157871494377e+01, 0.8467247584405e+02,
+      0.6159555108218e-07, 0.3211703561703e+01, 0.2394243902548e+03,
+
+      0.4995340539317e-07, 0.1459098102922e+01, 0.4732030630302e+01,
+      0.5457031243572e-07, 0.1430457676136e+01, 0.6179983037890e+01,
+      0.4863461418397e-07, 0.2196425916730e+01, 0.9027992316901e+02,
+      0.5342947626870e-07, 0.2086612890268e+01, 0.6386168663001e+01,
+      0.5674296648439e-07, 0.2760204966535e+01, 0.6915859635113e+01,
+      0.4745783120161e-07, 0.4245368971862e+01, 0.6282970628506e+01,
+      0.4745676961198e-07, 0.5544725787016e+01, 0.6283181072386e+01,
+      0.4049796869973e-07, 0.2213984363586e+01, 0.6254626709878e+01,
+      0.4248333596940e-07, 0.8075781952896e+00, 0.7875671926403e+01,
+      0.4027178070205e-07, 0.1293268540378e+01, 0.6311524991013e+01,
+
+      0.4066543943476e-07, 0.3986141175804e+01, 0.3634620989887e+01,
+      0.4858863787880e-07, 0.1276112738231e+01, 0.5760498333002e+01,
+      0.5277398263530e-07, 0.4916111741527e+01, 0.2515860172507e+02,
+      0.4105635656559e-07, 0.1725805864426e+01, 0.6709674010002e+01,
+      0.4376781925772e-07, 0.2243642442106e+01, 0.6805653367890e+01,
+      0.3235827894693e-07, 0.3614135118271e+01, 0.1066495398892e+01,
+      0.3073244740308e-07, 0.2460873393460e+01, 0.5863591145557e+01,
+      0.3088609271373e-07, 0.5678431771790e+01, 0.9917696840332e+01,
+      0.3393022279836e-07, 0.3814017477291e+01, 0.1391601904066e+02,
+      0.3038686508802e-07, 0.4660216229171e+01, 0.1256621883632e+02,
+
+      0.4019677752497e-07, 0.5906906243735e+01, 0.1334167431096e+02,
+      0.3288834998232e-07, 0.9536146445882e+00, 0.1620077269078e+02,
+      0.3889973794631e-07, 0.3942205097644e+01, 0.7478166569050e-01,
+      0.3050438987141e-07, 0.1624810271286e+01, 0.1805292951336e+02,
+      0.3601142564638e-07, 0.4030467142575e+01, 0.6208294184755e+01,
+      0.3689015557141e-07, 0.3648878818694e+01, 0.5966683958112e+01,
+      0.3563471893565e-07, 0.5749584017096e+01, 0.6357857516136e+01,
+      0.2776183170667e-07, 0.2630124187070e+01, 0.3523159621801e-02,
+      0.2922350530341e-07, 0.1790346403629e+01, 0.1272157198369e+02,
+      0.3511076917302e-07, 0.6142198301611e+01, 0.6599467742779e+01,
+
+      0.3619351007632e-07, 0.1432421386492e+01, 0.6019991944201e+01,
+      0.2561254711098e-07, 0.2302822475792e+01, 0.1259245002418e+02,
+      0.2626903942920e-07, 0.8660470994571e+00, 0.6702560555334e+01,
+      0.2550187397083e-07, 0.6069721995383e+01, 0.1057540660594e+02,
+      0.2535873526138e-07, 0.1079020331795e-01, 0.3141537925223e+02,
+      0.3519786153847e-07, 0.3809066902283e+01, 0.2505706758577e+03,
+      0.3424651492873e-07, 0.2075435114417e+01, 0.6546159756691e+01,
+      0.2372676630861e-07, 0.2057803120154e+01, 0.2388894113936e+01,
+      0.2710980779541e-07, 0.1510068488010e+01, 0.1202934727411e+02,
+      0.3038710889704e-07, 0.5043617528901e+01, 0.1256608456547e+02,
+
+      0.2220364130585e-07, 0.3694793218205e+01, 0.1336244973887e+02,
+      0.3025880825460e-07, 0.5450618999049e-01, 0.2908881142201e+02,
+      0.2784493486864e-07, 0.3381164084502e+01, 0.1494531617769e+02,
+      0.2294414142438e-07, 0.4382309025210e+01, 0.6076890225335e+01,
+      0.2012723294724e-07, 0.9142212256518e+00, 0.6262720680387e+01,
+      0.2036357831958e-07, 0.5676172293154e+01, 0.4701116388778e+01,
+      0.2003474823288e-07, 0.2592767977625e+01, 0.6303431020504e+01,
+      0.2207144900109e-07, 0.5404976271180e+01, 0.6489261475556e+01,
+      0.2481664905135e-07, 0.4373284587027e+01, 0.1204357418345e+02,
+      0.2674949182295e-07, 0.5859182188482e+01, 0.4590910121555e+01,
+
+      0.2450554720322e-07, 0.4555381557451e+01, 0.1495633313810e+00,
+      0.2601975986457e-07, 0.3933165584959e+01, 0.1965104848470e+02,
+      0.2199860022848e-07, 0.5227977189087e+01, 0.1351787002167e+02,
+      0.2448121172316e-07, 0.4858060353949e+01, 0.1162474756779e+01,
+      0.1876014864049e-07, 0.5690546553605e+01, 0.6279194432410e+01,
+      0.1874513219396e-07, 0.4099539297446e+01, 0.6286957268481e+01,
+      0.2156380842559e-07, 0.4382594769913e+00, 0.1813929450232e+02,
+      0.1981691240061e-07, 0.1829784152444e+01, 0.4686889479442e+01,
+      0.2329992648539e-07, 0.2836254278973e+01, 0.1002183730415e+02,
+      0.1765184135302e-07, 0.2803494925833e+01, 0.4292330755499e+01,
+
+      0.2436368366085e-07, 0.2836897959677e+01, 0.9514313292143e+02,
+      0.2164089203889e-07, 0.6127522446024e+01, 0.6037244212485e+01,
+      0.1847755034221e-07, 0.3683163635008e+01, 0.2427287361862e+00,
+      0.1674798769966e-07, 0.3316993867246e+00, 0.1311972100268e+02,
+      0.2222542124356e-07, 0.8294097805480e+00, 0.1266924451345e+02,
+      0.2071074505925e-07, 0.3659492220261e+01, 0.6528907488406e+01,
+      0.1608224471835e-07, 0.4774492067182e+01, 0.1352175143971e+02,
+      0.1857583439071e-07, 0.2873120597682e+01, 0.8662240327241e+01,
+      0.1793018836159e-07, 0.5282441177929e+00, 0.6819880277225e+01,
+      0.1575391221692e-07, 0.1320789654258e+01, 0.1102062672231e+00,
+
+      0.1840132009557e-07, 0.1917110916256e+01, 0.6514761976723e+02,
+      0.1760917288281e-07, 0.2972635937132e+01, 0.5746271423666e+01,
+      0.1561779518516e-07, 0.4372569261981e+01, 0.6272439236156e+01,
+      0.1558687885205e-07, 0.5416424926425e+01, 0.6293712464735e+01,
+      0.1951359382579e-07, 0.3094448898752e+01, 0.2301353951334e+02,
+      0.1569144275614e-07, 0.2802103689808e+01, 0.1765478049437e+02,
+      0.1479130389462e-07, 0.2136435020467e+01, 0.2077542790660e-01,
+      0.1467828510764e-07, 0.7072627435674e+00, 0.1052268489556e+01,
+      0.1627627337440e-07, 0.3947607143237e+01, 0.6327837846670e+00,
+      0.1503498479758e-07, 0.4079248909190e+01, 0.7626583626240e-01,
+
+      0.1297967708237e-07, 0.6269637122840e+01, 0.1149965630200e+02,
+      0.1374416896634e-07, 0.4175657970702e+01, 0.6016468784579e+01,
+      0.1783812325219e-07, 0.1476540547560e+01, 0.3301902111895e+02,
+      0.1525884228756e-07, 0.4653477715241e+01, 0.9411464614024e+01,
+      0.1451067396763e-07, 0.2573001128225e+01, 0.1277945078067e+02,
+      0.1297713111950e-07, 0.5612799618771e+01, 0.6549682916313e+01,
+      0.1462784012820e-07, 0.4189661623870e+01, 0.1863592847156e+02,
+      0.1384185980007e-07, 0.2656915472196e+01, 0.2379164476796e+01,
+      0.1221497599801e-07, 0.5612515760138e+01, 0.1257326515556e+02,
+      0.1560574525896e-07, 0.4783414317919e+01, 0.1887552587463e+02,
+
+      0.1544598372036e-07, 0.2694431138063e+01, 0.1820933031200e+02,
+      0.1531678928696e-07, 0.4105103489666e+01, 0.2593412433514e+02,
+      0.1349321503795e-07, 0.3082437194015e+00, 0.5120601093667e+01,
+      0.1252030290917e-07, 0.6124072334087e+01, 0.6993008899458e+01,
+      0.1459243816687e-07, 0.3733103981697e+01, 0.3813291813120e-01,
+      0.1226103625262e-07, 0.1267127706817e+01, 0.2435678079171e+02,
+      0.1019449641504e-07, 0.4367790112269e+01, 0.1725663147538e+02,
+      0.1380789433607e-07, 0.3387201768700e+01, 0.2458316379602e+00,
+      0.1019453421658e-07, 0.9204143073737e+00, 0.6112403035119e+01,
+      0.1297929434405e-07, 0.5786874896426e+01, 0.1249137003520e+02,
+
+      0.9912677786097e-08, 0.3164232870746e+01, 0.6247047890016e+01,
+      0.9829386098599e-08, 0.2586762413351e+01, 0.6453748665772e+01,
+      0.1226807746104e-07, 0.6239068436607e+01, 0.5429879531333e+01,
+      0.1192691755997e-07, 0.1867380051424e+01, 0.6290122169689e+01,
+      0.9836499227081e-08, 0.3424716293727e+00, 0.6319103810876e+01,
+      0.9642862564285e-08, 0.5661372990657e+01, 0.8273820945392e+01,
+      0.1165184404862e-07, 0.5768367239093e+01, 0.1778273215245e+02,
+      0.1175794418818e-07, 0.1657351222943e+01, 0.6276029531202e+01,
+      0.1018948635601e-07, 0.6458292350865e+00, 0.1254537627298e+02,
+      0.9500383606676e-08, 0.1054306140741e+01, 0.1256517118505e+02,
+
+      0.1227512202906e-07, 0.2505278379114e+01, 0.2248384854122e+02,
+      0.9664792009993e-08, 0.4289737277000e+01, 0.6259197520765e+01,
+      0.9613285666331e-08, 0.5500597673141e+01, 0.6306954180126e+01,
+      0.1117906736211e-07, 0.2361405953468e+01, 0.1779695906178e+02,
+      0.9611378640782e-08, 0.2851310576269e+01, 0.2061856251104e+00,
+      0.8845354852370e-08, 0.6208777705343e+01, 0.1692165728891e+01,
+      0.1054046966600e-07, 0.5413091423934e+01, 0.2204125344462e+00,
+      0.1215539124483e-07, 0.5613969479755e+01, 0.8257698122054e+02,
+      0.9932460955209e-08, 0.1106124877015e+01, 0.1017725758696e+02,
+      0.8785804715043e-08, 0.2869224476477e+01, 0.9491756770005e+00,
+
+      0.8538084097562e-08, 0.6159640899344e+01, 0.6393282117669e+01,
+      0.8648994369529e-08, 0.1374901198784e+01, 0.4804209201333e+01,
+      0.1039063219067e-07, 0.5171080641327e+01, 0.1550861511662e+02,
+      0.8867983926439e-08, 0.8317320304902e+00, 0.3903911373650e+01,
+      0.8327495955244e-08, 0.3605591969180e+01, 0.6172869583223e+01,
+      0.9243088356133e-08, 0.6114299196843e+01, 0.6267823317922e+01,
+      0.9205657357835e-08, 0.3675153683737e+01, 0.6298328382969e+01,
+      0.1033269714606e-07, 0.3313328813024e+01, 0.5573142801433e+01,
+      0.8001706275552e-08, 0.2019980960053e+01, 0.2648454860559e+01,
+      0.9171858254191e-08, 0.8992015524177e+00, 0.1498544001348e+03,
+
+      0.1075327150242e-07, 0.2898669963648e+01, 0.3694923081589e+02,
+      0.9884866689828e-08, 0.4946715904478e+01, 0.1140367694411e+02,
+      0.9541835576677e-08, 0.2371787888469e+01, 0.1256713221673e+02,
+      0.7739903376237e-08, 0.2213775190612e+01, 0.7834121070590e+01,
+      0.7311962684106e-08, 0.3429378787739e+01, 0.1192625446156e+02,
+      0.9724904869624e-08, 0.6195878564404e+01, 0.2280573557157e+02,
+      0.9251628983612e-08, 0.6511509527390e+00, 0.2787043132925e+01,
+      0.7320763787842e-08, 0.6001083639421e+01, 0.6282655592598e+01,
+      0.7320296650962e-08, 0.3789073265087e+01, 0.6283496108294e+01,
+      0.7947032271039e-08, 0.1059659582204e+01, 0.1241073141809e+02,
+
+      0.9005277053115e-08, 0.1280315624361e+01, 0.6281591679874e+01,
+      0.8995601652048e-08, 0.2224439106766e+01, 0.6284560021018e+01,
+      0.8288040568796e-08, 0.5234914433867e+01, 0.1241658836951e+02,
+      0.6359381347255e-08, 0.4137989441490e+01, 0.1596186371003e+01,
+      0.8699572228626e-08, 0.1758411009497e+01, 0.6133512519065e+01,
+      0.6456797542736e-08, 0.5919285089994e+01, 0.1685848245639e+02,
+      0.7424573475452e-08, 0.5414616938827e+01, 0.4061219149443e+01,
+      0.7235671196168e-08, 0.1496516557134e+01, 0.1610006857377e+03,
+      0.8104015182733e-08, 0.1919918242764e+01, 0.8460828644453e+00,
+      0.8098576535937e-08, 0.3819615855458e+01, 0.3894181736510e+01,
+
+      0.6275292346625e-08, 0.6244264115141e+01, 0.8531963191132e+00,
+      0.6052432989112e-08, 0.5037731872610e+00, 0.1567108171867e+02,
+      0.5705651535817e-08, 0.2984557271995e+01, 0.1258692712880e+02,
+      0.5789650115138e-08, 0.6087038140697e+01, 0.1193336791622e+02,
+      0.5512132153377e-08, 0.5855668994076e+01, 0.1232342296471e+02,
+      0.7388890819102e-08, 0.2443128574740e+01, 0.4907302013889e+01,
+      0.5467593991798e-08, 0.3017561234194e+01, 0.1884211409667e+02,
+      0.6388519802999e-08, 0.5887386712935e+01, 0.5217580628120e+02,
+      0.6106777149944e-08, 0.3483461059895e+00, 0.1422690933580e-01,
+      0.7383420275489e-08, 0.5417387056707e+01, 0.2358125818164e+02,
+
+      0.5505208141738e-08, 0.2848193644783e+01, 0.1151388321134e+02,
+      0.6310757462877e-08, 0.2349882520828e+01, 0.1041998632314e+02,
+      0.6166904929691e-08, 0.5728575944077e+00, 0.6151533897323e+01,
+      0.5263442042754e-08, 0.4495796125937e+01, 0.1885275071096e+02,
+      0.5591828082629e-08, 0.1355441967677e+01, 0.4337116142245e+00,
+      0.5397051680497e-08, 0.1673422864307e+01, 0.6286362197481e+01,
+      0.5396992745159e-08, 0.1833502206373e+01, 0.6279789503410e+01,
+      0.6572913000726e-08, 0.3331122065824e+01, 0.1176433076753e+02,
+      0.5123421866413e-08, 0.2165327142679e+01, 0.1245594543367e+02,
+      0.5930495725999e-08, 0.2931146089284e+01, 0.6414617803568e+01,
+
+      0.6431797403933e-08, 0.4134407994088e+01, 0.1350651127443e+00,
+      0.5003182207604e-08, 0.3805420303749e+01, 0.1096996532989e+02,
+      0.5587731032504e-08, 0.1082469260599e+01, 0.6062663316000e+01,
+      0.5935263407816e-08, 0.8384333678401e+00, 0.5326786718777e+01,
+      0.4756019827760e-08, 0.3552588749309e+01, 0.3104930017775e+01,
+      0.6599951172637e-08, 0.4320826409528e+01, 0.4087944051283e+02,
+      0.5902606868464e-08, 0.4811879454445e+01, 0.5849364236221e+01,
+      0.5921147809031e-08, 0.9942628922396e-01, 0.1581959461667e+01,
+      0.5505382581266e-08, 0.2466557607764e+01, 0.6503488384892e+01,
+      0.5353771071862e-08, 0.4551978748683e+01, 0.1735668374386e+03,
+
+      0.5063282210946e-08, 0.5710812312425e+01, 0.1248988586463e+02,
+      0.5926120403383e-08, 0.1333998428358e+01, 0.2673594526851e+02,
+      0.5211016176149e-08, 0.4649315360760e+01, 0.2460261242967e+02,
+      0.5347075084894e-08, 0.5512754081205e+01, 0.4171425416666e+01,
+      0.4872609773574e-08, 0.1308025299938e+01, 0.5333900173445e+01,
+      0.4727711321420e-08, 0.2144908368062e+01, 0.7232251527446e+01,
+      0.6029426018652e-08, 0.5567259412084e+01, 0.3227113045244e+03,
+      0.4321485284369e-08, 0.5230667156451e+01, 0.9388005868221e+01,
+      0.4476406760553e-08, 0.6134081115303e+01, 0.5547199253223e+01,
+      0.5835268277420e-08, 0.4783808492071e+01, 0.7285056171570e+02,
+
+      0.5172183602748e-08, 0.5161817911099e+01, 0.1884570439172e+02,
+      0.5693571465184e-08, 0.1381646203111e+01, 0.9723862754494e+02,
+      0.4060634965349e-08, 0.3876705259495e+00, 0.4274518229222e+01,
+      0.3967398770473e-08, 0.5029491776223e+01, 0.3496032717521e+01,
+      0.3943754005255e-08, 0.1923162955490e+01, 0.6244942932314e+01,
+      0.4781323427824e-08, 0.4633332586423e+01, 0.2929661536378e+02,
+      0.3871483781204e-08, 0.1616650009743e+01, 0.6321208768577e+01,
+      0.5141741733997e-08, 0.9817316704659e-01, 0.1232032006293e+02,
+      0.4002385978497e-08, 0.3656161212139e+01, 0.7018952447668e+01,
+      0.4901092604097e-08, 0.4404098713092e+01, 0.1478866649112e+01,
+
+      0.3740932630345e-08, 0.5181188732639e+00, 0.6922973089781e+01,
+      0.4387283718538e-08, 0.3254859566869e+01, 0.2331413144044e+03,
+      0.5019197802033e-08, 0.3086773224677e+01, 0.1715706182245e+02,
+      0.3834931695175e-08, 0.2797882673542e+01, 0.1491901785440e+02,
+      0.3760413942497e-08, 0.2892676280217e+01, 0.1726726808967e+02,
+      0.3719717204628e-08, 0.5861046025739e+01, 0.6297302759782e+01,
+      0.4145623530149e-08, 0.2168239627033e+01, 0.1376059875786e+02,
+      0.3932788425380e-08, 0.6271811124181e+01, 0.7872148766781e+01,
+      0.3686377476857e-08, 0.3936853151404e+01, 0.6268848941110e+01,
+      0.3779077950339e-08, 0.1404148734043e+01, 0.4157198507331e+01,
+
+      0.4091334550598e-08, 0.2452436180854e+01, 0.9779108567966e+01,
+      0.3926694536146e-08, 0.6102292739040e+01, 0.1098419223922e+02,
+      0.4841000253289e-08, 0.6072760457276e+01, 0.1252801878276e+02,
+      0.4949340130240e-08, 0.1154832815171e+01, 0.1617106187867e+03,
+      0.3761557737360e-08, 0.5527545321897e+01, 0.3185192151914e+01,
+      0.3647396268188e-08, 0.1525035688629e+01, 0.6271346477544e+01,
+      0.3932405074189e-08, 0.5570681040569e+01, 0.2139354194808e+02,
+      0.3631322501141e-08, 0.1981240601160e+01, 0.6294805223347e+01,
+      0.4130007425139e-08, 0.2050060880201e+01, 0.2195415756911e+02,
+      0.4433905965176e-08, 0.3277477970321e+01, 0.7445550607224e+01,
+
+      0.3851814176947e-08, 0.5210690074886e+01, 0.9562891316684e+00,
+      0.3485807052785e-08, 0.6653274904611e+00, 0.1161697602389e+02,
+      0.3979772816991e-08, 0.1767941436148e+01, 0.2277943724828e+02,
+      0.3402607460500e-08, 0.3421746306465e+01, 0.1087398597200e+02,
+      0.4049993000926e-08, 0.1127144787547e+01, 0.3163918923335e+00,
+      0.3420511182382e-08, 0.4214794779161e+01, 0.1362553364512e+02,
+      0.3640772365012e-08, 0.5324905497687e+01, 0.1725304118033e+02,
+      0.3323037987501e-08, 0.6135761838271e+01, 0.6279143387820e+01,
+      0.4503141663637e-08, 0.1802305450666e+01, 0.1385561574497e+01,
+      0.4314560055588e-08, 0.4812299731574e+01, 0.4176041334900e+01,
+
+      0.3294226949110e-08, 0.3657547059723e+01, 0.6287008313071e+01,
+      0.3215657197281e-08, 0.4866676894425e+01, 0.5749861718712e+01,
+      0.4129362656266e-08, 0.3809342558906e+01, 0.5905702259363e+01,
+      0.3137762976388e-08, 0.2494635174443e+01, 0.2099539292909e+02,
+      0.3514010952384e-08, 0.2699961831678e+01, 0.7335344340001e+01,
+      0.3327607571530e-08, 0.3318457714816e+01, 0.5436992986000e+01,
+      0.3541066946675e-08, 0.4382703582466e+01, 0.1234573916645e+02,
+      0.3216179847052e-08, 0.5271066317054e+01, 0.3802769619140e-01,
+      0.2959045059570e-08, 0.5819591585302e+01, 0.2670964694522e+02,
+      0.3884040326665e-08, 0.5980934960428e+01, 0.6660449441528e+01,
+
+      0.2922027539886e-08, 0.3337290282483e+01, 0.1375773836557e+01,
+      0.4110846382042e-08, 0.5742978187327e+01, 0.4480965020977e+02,
+      0.2934508411032e-08, 0.2278075804200e+01, 0.6408777551755e+00,
+      0.3966896193000e-08, 0.5835747858477e+01, 0.3773735910827e+00,
+      0.3286695827610e-08, 0.5838898193902e+01, 0.3932462625300e-02,
+      0.3720643094196e-08, 0.1122212337858e+01, 0.1646033343740e+02,
+      0.3285508906174e-08, 0.9182250996416e+00, 0.1081813534213e+02,
+      0.3753880575973e-08, 0.5174761973266e+01, 0.5642198095270e+01,
+      0.3022129385587e-08, 0.3381611020639e+01, 0.2982630633589e+02,
+      0.2798569205621e-08, 0.3546193723922e+01, 0.1937891852345e+02,
+
+      0.3397872070505e-08, 0.4533203197934e+01, 0.6923953605621e+01,
+      0.3708099772977e-08, 0.2756168198616e+01, 0.3066615496545e+02,
+      0.3599283541510e-08, 0.1934395469918e+01, 0.6147450479709e+01,
+      0.3688702753059e-08, 0.7149920971109e+00, 0.2636725487657e+01,
+      0.2681084724003e-08, 0.4899819493154e+01, 0.6816289982179e+01,
+      0.3495993460759e-08, 0.1572418915115e+01, 0.6418701221183e+01,
+      0.3130770324995e-08, 0.8912190180489e+00, 0.1235996607578e+02,
+      0.2744353821941e-08, 0.3800821940055e+01, 0.2059724391010e+02,
+      0.2842732906341e-08, 0.2644717440029e+01, 0.2828699048865e+02,
+      0.3046882682154e-08, 0.3987793020179e+01, 0.6055599646783e+01,
+
+      0.2399072455143e-08, 0.9908826440764e+00, 0.6255674361143e+01,
+      0.2384306274204e-08, 0.2516149752220e+01, 0.6310477339748e+01,
+      0.2977324500559e-08, 0.5849195642118e+01, 0.1652265972112e+02,
+      0.3062835258972e-08, 0.1681660100162e+01, 0.1172006883645e+02,
+      0.3109682589231e-08, 0.5804143987737e+00, 0.2751146787858e+02,
+      0.2903920355299e-08, 0.5800768280123e+01, 0.6510552054109e+01,
+      0.2823221989212e-08, 0.9241118370216e+00, 0.5469525544182e+01,
+      0.3187949696649e-08, 0.3139776445735e+01, 0.1693792562116e+03,
+      0.2922559771655e-08, 0.3549440782984e+01, 0.2630839062450e+00,
+      0.2436302066603e-08, 0.4735540696319e+01, 0.3946258593675e+00,
+
+      0.3049473043606e-08, 0.4998289124561e+01, 0.8390110365991e+01,
+      0.2863682575784e-08, 0.6709515671102e+00, 0.2243449970715e+00,
+      0.2641750517966e-08, 0.5410978257284e+01, 0.2986433403208e+02,
+      0.2704093466243e-08, 0.4778317207821e+01, 0.6129297044991e+01,
+      0.2445522177011e-08, 0.6009020662222e+01, 0.1171295538178e+02,
+      0.2623608810230e-08, 0.5010449777147e+01, 0.6436854655901e+01,
+      0.2079259704053e-08, 0.5980943768809e+01, 0.2019909489111e+02,
+      0.2820225596771e-08, 0.2679965110468e+01, 0.5934151399930e+01,
+      0.2365221950927e-08, 0.1894231148810e+01, 0.2470570524223e+02,
+      0.2359682077149e-08, 0.4220752950780e+01, 0.8671969964381e+01,
+
+      0.2387577137206e-08, 0.2571783940617e+01, 0.7096626156709e+01,
+      0.1982102089816e-08, 0.5169765997119e+00, 0.1727188400790e+02,
+      0.2687502389925e-08, 0.6239078264579e+01, 0.7075506709219e+02,
+      0.2207751669135e-08, 0.2031184412677e+01, 0.4377611041777e+01,
+      0.2618370214274e-08, 0.8266079985979e+00, 0.6632000300961e+01,
+      0.2591951887361e-08, 0.8819350522008e+00, 0.4873985990671e+02,
+      0.2375055656248e-08, 0.3520944177789e+01, 0.1590676413561e+02,
+      0.2472019978911e-08, 0.1551431908671e+01, 0.6612329252343e+00,
+      0.2368157127199e-08, 0.4178610147412e+01, 0.3459636466239e+02,
+      0.1764846605693e-08, 0.1506764000157e+01, 0.1980094587212e+02,
+
+      0.2291769608798e-08, 0.2118250611782e+01, 0.2844914056730e-01,
+      0.2209997316943e-08, 0.3363255261678e+01, 0.2666070658668e+00,
+      0.2292699097923e-08, 0.4200423956460e+00, 0.1484170571900e-02,
+      0.1629683015329e-08, 0.2331362582487e+01, 0.3035599730800e+02,
+      0.2206492862426e-08, 0.3400274026992e+01, 0.6281667977667e+01,
+      0.2205746568257e-08, 0.1066051230724e+00, 0.6284483723224e+01,
+      0.2026310767991e-08, 0.2779066487979e+01, 0.2449240616245e+02,
+      0.1762977622163e-08, 0.9951450691840e+00, 0.2045286941806e+02,
+      0.1368535049606e-08, 0.6402447365817e+00, 0.2473415438279e+02,
+      0.1720598775450e-08, 0.2303524214705e+00, 0.1679593901136e+03,
+
+      0.1702429015449e-08, 0.6164622655048e+01, 0.3338575901272e+03,
+      0.1414033197685e-08, 0.3954561185580e+01, 0.1624205518357e+03,
+      0.1573768958043e-08, 0.2028286308984e+01, 0.3144167757552e+02,
+      0.1650705184447e-08, 0.2304040666128e+01, 0.5267006960365e+02,
+      0.1651087618855e-08, 0.2538461057280e+01, 0.8956999012000e+02,
+      0.1616409518983e-08, 0.5111054348152e+01, 0.3332657872986e+02,
+      0.1537175173581e-08, 0.5601130666603e+01, 0.3852657435933e+02,
+      0.1593191980553e-08, 0.2614340453411e+01, 0.2282781046519e+03,
+      0.1499480170643e-08, 0.3624721577264e+01, 0.2823723341956e+02,
+      0.1493807843235e-08, 0.4214569879008e+01, 0.2876692439167e+02,
+
+      0.1074571199328e-08, 0.1496911744704e+00, 0.8397383534231e+02,
+      0.1074406983417e-08, 0.1187817671922e+01, 0.8401985929482e+02,
+      0.9757576855851e-09, 0.2655703035858e+01, 0.7826370942180e+02,
+      0.1258432887565e-08, 0.4969896184844e+01, 0.3115650189215e+03,
+      0.1240336343282e-08, 0.5192460776926e+01, 0.1784300471910e+03,
+      0.9016107005164e-09, 0.1960356923057e+01, 0.5886454391678e+02,
+      0.1135392360918e-08, 0.5082427809068e+01, 0.7842370451713e+02,
+      0.9216046089565e-09, 0.2793775037273e+01, 0.1014262087719e+03,
+      0.1061276615030e-08, 0.3726144311409e+01, 0.5660027930059e+02,
+      0.1010110596263e-08, 0.7404080708937e+00, 0.4245678405627e+02,
+
+      0.7217424756199e-09, 0.2697449980577e-01, 0.2457074661053e+03,
+      0.6912003846756e-09, 0.4253296276335e+01, 0.1679936946371e+03,
+      0.6871814664847e-09, 0.5148072412354e+01, 0.6053048899753e+02,
+      0.4887158016343e-09, 0.2153581148294e+01, 0.9656299901946e+02,
+      0.5161802866314e-09, 0.3852750634351e+01, 0.2442876000072e+03,
+      0.5652599559057e-09, 0.1233233356270e+01, 0.8365903305582e+02,
+      0.4710812608586e-09, 0.5610486976767e+01, 0.3164282286739e+03,
+      0.4909977500324e-09, 0.1639629524123e+01, 0.4059982187939e+03,
+      0.4772641839378e-09, 0.3737100368583e+01, 0.1805255418145e+03,
+      0.4487562567153e-09, 0.1158417054478e+00, 0.8433466158131e+02,
+
+      0.3943441230497e-09, 0.6243502862796e+00, 0.2568537517081e+03,
+      0.3952236913598e-09, 0.3510377382385e+01, 0.2449975330562e+03,
+      0.3788898363417e-09, 0.5916128302299e+01, 0.1568131045107e+03,
+      0.3738329328831e-09, 0.1042266763456e+01, 0.3948519331910e+03,
+      0.2451199165151e-09, 0.1166788435700e+01, 0.1435713242844e+03,
+      0.2436734402904e-09, 0.3254726114901e+01, 0.2268582385539e+03,
+      0.2213605274325e-09, 0.1687210598530e+01, 0.1658638954901e+03,
+      0.1491521204829e-09, 0.2657541786794e+01, 0.2219950288015e+03,
+      0.1474995329744e-09, 0.5013089805819e+01, 0.3052819430710e+03,
+      0.1661939475656e-09, 0.5495315428418e+01, 0.2526661704812e+03,
+
+      0.9015946748003e-10, 0.2236989966505e+01, 0.4171445043968e+03 };
+
+/* Sun-to-Earth, T^0, Z */
+   static const double e0z[] = {
+      0.2796207639075e-05, 0.3198701560209e+01, 0.8433466158131e+02,
+      0.1016042198142e-05, 0.5422360395913e+01, 0.5507553240374e+01,
+      0.8044305033647e-06, 0.3880222866652e+01, 0.5223693906222e+01,
+      0.4385347909274e-06, 0.3704369937468e+01, 0.2352866153506e+01,
+      0.3186156414906e-06, 0.3999639363235e+01, 0.1577343543434e+01,
+      0.2272412285792e-06, 0.3984738315952e+01, 0.1047747311755e+01,
+      0.1645620103007e-06, 0.3565412516841e+01, 0.5856477690889e+01,
+      0.1815836921166e-06, 0.4984507059020e+01, 0.6283075850446e+01,
+      0.1447461676364e-06, 0.3702753570108e+01, 0.9437762937313e+01,
+      0.1430760876382e-06, 0.3409658712357e+01, 0.1021328554739e+02,
+
+      0.1120445753226e-06, 0.4829561570246e+01, 0.1414349524433e+02,
+      0.1090232840797e-06, 0.2080729178066e+01, 0.6812766822558e+01,
+      0.9715727346551e-07, 0.3476295881948e+01, 0.4694002934110e+01,
+      0.1036267136217e-06, 0.4056639536648e+01, 0.7109288135493e+02,
+      0.8752665271340e-07, 0.4448159519911e+01, 0.5753384878334e+01,
+      0.8331864956004e-07, 0.4991704044208e+01, 0.7084896783808e+01,
+      0.6901658670245e-07, 0.4325358994219e+01, 0.6275962395778e+01,
+      0.9144536848998e-07, 0.1141826375363e+01, 0.6620890113188e+01,
+      0.7205085037435e-07, 0.3624344170143e+01, 0.5296909721118e+00,
+      0.7697874654176e-07, 0.5554257458998e+01, 0.1676215758509e+03,
+
+      0.5197545738384e-07, 0.6251760961735e+01, 0.1807370494127e+02,
+      0.5031345378608e-07, 0.2497341091913e+01, 0.4705732307012e+01,
+      0.4527110205840e-07, 0.2335079920992e+01, 0.6309374173736e+01,
+      0.4753355798089e-07, 0.7094148987474e+00, 0.5884926831456e+01,
+      0.4296951977516e-07, 0.1101916352091e+01, 0.6681224869435e+01,
+      0.3855341568387e-07, 0.1825495405486e+01, 0.5486777812467e+01,
+      0.5253930970990e-07, 0.4424740687208e+01, 0.7860419393880e+01,
+      0.4024630496471e-07, 0.5120498157053e+01, 0.1336797263425e+02,
+      0.4061069791453e-07, 0.6029771435451e+01, 0.3930209696940e+01,
+      0.3797883804205e-07, 0.4435193600836e+00, 0.3154687086868e+01,
+
+      0.2933033225587e-07, 0.5124157356507e+01, 0.1059381944224e+01,
+      0.3503000930426e-07, 0.5421830162065e+01, 0.6069776770667e+01,
+      0.3670096214050e-07, 0.4582101667297e+01, 0.1219403291462e+02,
+      0.2905609437008e-07, 0.1926566420072e+01, 0.1097707878456e+02,
+      0.2466827821713e-07, 0.6090174539834e+00, 0.6496374930224e+01,
+      0.2691647295332e-07, 0.1393432595077e+01, 0.2200391463820e+02,
+      0.2150554667946e-07, 0.4308671715951e+01, 0.5643178611111e+01,
+      0.2237481922680e-07, 0.8133968269414e+00, 0.8635942003952e+01,
+      0.1817741038157e-07, 0.3755205127454e+01, 0.3340612434717e+01,
+      0.2227820762132e-07, 0.2759558596664e+01, 0.1203646072878e+02,
+
+      0.1944713772307e-07, 0.5699645869121e+01, 0.1179062909082e+02,
+      0.1527340520662e-07, 0.1986749091746e+01, 0.3981490189893e+00,
+      0.1577282574914e-07, 0.3205017217983e+01, 0.5088628793478e+01,
+      0.1424738825424e-07, 0.6256747903666e+01, 0.2544314396739e+01,
+      0.1616563121701e-07, 0.2601671259394e+00, 0.1729818233119e+02,
+      0.1401210391692e-07, 0.4686939173506e+01, 0.7058598460518e+01,
+      0.1488726974214e-07, 0.2815862451372e+01, 0.2593412433514e+02,
+      0.1692626442388e-07, 0.4956894109797e+01, 0.1564752902480e+03,
+      0.1123571582910e-07, 0.2381192697696e+01, 0.3738761453707e+01,
+      0.9903308606317e-08, 0.4294851657684e+01, 0.9225539266174e+01,
+
+      0.9174533187191e-08, 0.3075171510642e+01, 0.4164311961999e+01,
+      0.8645985631457e-08, 0.5477534821633e+00, 0.8429241228195e+01,
+     -0.1085876492688e-07, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.9264309077815e-08, 0.5968571670097e+01, 0.7079373888424e+01,
+      0.8243116984954e-08, 0.1489098777643e+01, 0.1044738781244e+02,
+      0.8268102113708e-08, 0.3512977691983e+01, 0.1150676975667e+02,
+      0.9043613988227e-08, 0.1290704408221e+00, 0.1101510648075e+02,
+      0.7432912038789e-08, 0.1991086893337e+01, 0.2608790314060e+02,
+      0.8586233727285e-08, 0.4238357924414e+01, 0.2986433403208e+02,
+      0.7612230060131e-08, 0.2911090150166e+01, 0.4732030630302e+01,
+
+      0.7097787751408e-08, 0.1908938392390e+01, 0.8031092209206e+01,
+      0.7640237040175e-08, 0.6129219000168e+00, 0.7962980379786e+00,
+      0.7070445688081e-08, 0.1380417036651e+01, 0.2146165377750e+01,
+      0.7690770957702e-08, 0.1680504249084e+01, 0.2122839202813e+02,
+      0.8051292542594e-08, 0.5127423484511e+01, 0.2942463415728e+01,
+      0.5902709104515e-08, 0.2020274190917e+01, 0.7755226100720e+00,
+      0.5134567496462e-08, 0.2606778676418e+01, 0.1256615170089e+02,
+      0.5525802046102e-08, 0.1613011769663e+01, 0.8018209333619e+00,
+      0.5880724784221e-08, 0.4604483417236e+01, 0.4690479774488e+01,
+      0.5211699081370e-08, 0.5718964114193e+01, 0.8827390247185e+01,
+
+      0.4891849573562e-08, 0.3689658932196e+01, 0.2132990797783e+00,
+      0.5150246069997e-08, 0.4099769855122e+01, 0.6480980550449e+02,
+      0.5102434319633e-08, 0.5660834602509e+01, 0.3379454372902e+02,
+      0.5083405254252e-08, 0.9842221218974e+00, 0.4136910472696e+01,
+      0.4206562585682e-08, 0.1341363634163e+00, 0.3128388763578e+01,
+      0.4663249683579e-08, 0.8130132735866e+00, 0.5216580451554e+01,
+      0.4099474416530e-08, 0.5791497770644e+01, 0.4265981595566e+00,
+      0.4628251220767e-08, 0.1249802769331e+01, 0.1572083878776e+02,
+      0.5024068728142e-08, 0.4795684802743e+01, 0.6290189305114e+01,
+      0.5120234327758e-08, 0.3810420387208e+01, 0.5230807360890e+01,
+
+      0.5524029815280e-08, 0.1029264714351e+01, 0.2397622045175e+03,
+      0.4757415718860e-08, 0.3528044781779e+01, 0.1649636139783e+02,
+      0.3915786131127e-08, 0.5593889282646e+01, 0.1589072916335e+01,
+      0.4869053149991e-08, 0.3299636454433e+01, 0.7632943190217e+01,
+      0.3649365703729e-08, 0.1286049002584e+01, 0.6206810014183e+01,
+      0.3992493949002e-08, 0.3100307589464e+01, 0.2515860172507e+02,
+      0.3320247477418e-08, 0.6212683940807e+01, 0.1216800268190e+02,
+      0.3287123739696e-08, 0.4699118445928e+01, 0.7234794171227e+01,
+      0.3472776811103e-08, 0.2630507142004e+01, 0.7342457794669e+01,
+      0.3423253294767e-08, 0.2946432844305e+01, 0.9623688285163e+01,
+
+      0.3896173898244e-08, 0.1224834179264e+01, 0.6438496133249e+01,
+      0.3388455337924e-08, 0.1543807616351e+01, 0.1494531617769e+02,
+      0.3062704716523e-08, 0.1191777572310e+01, 0.8662240327241e+01,
+      0.3270075600400e-08, 0.5483498767737e+01, 0.1194447056968e+01,
+      0.3101209215259e-08, 0.8000833804348e+00, 0.3772475342596e+02,
+      0.2780883347311e-08, 0.4077980721888e+00, 0.5863591145557e+01,
+      0.2903605931824e-08, 0.2617490302147e+01, 0.1965104848470e+02,
+      0.2682014743119e-08, 0.2634703158290e+01, 0.7238675589263e+01,
+      0.2534360108492e-08, 0.6102446114873e+01, 0.6836645152238e+01,
+      0.2392564882509e-08, 0.3681820208691e+01, 0.5849364236221e+01,
+
+      0.2656667254856e-08, 0.6216045388886e+01, 0.6133512519065e+01,
+      0.2331242096773e-08, 0.5864949777744e+01, 0.4535059491685e+01,
+      0.2287898363668e-08, 0.4566628532802e+01, 0.7477522907414e+01,
+      0.2336944521306e-08, 0.2442722126930e+01, 0.1137170464392e+02,
+      0.3156632236269e-08, 0.1626628050682e+01, 0.2509084901204e+03,
+      0.2982612402766e-08, 0.2803604512609e+01, 0.1748016358760e+01,
+      0.2774031674807e-08, 0.4654002897158e+01, 0.8223916695780e+02,
+      0.2295236548638e-08, 0.4326518333253e+01, 0.3378142627421e+00,
+      0.2190714699873e-08, 0.4519614578328e+01, 0.2908881142201e+02,
+      0.2191495845045e-08, 0.3012626912549e+01, 0.1673046366289e+02,
+
+      0.2492901628386e-08, 0.1290101424052e+00, 0.1543797956245e+03,
+      0.1993778064319e-08, 0.3864046799414e+01, 0.1778984560711e+02,
+      0.1898146479022e-08, 0.5053777235891e+01, 0.2042657109477e+02,
+      0.1918280127634e-08, 0.2222470192548e+01, 0.4165496312290e+02,
+      0.1916351061607e-08, 0.8719067257774e+00, 0.7737595720538e+02,
+      0.1834720181466e-08, 0.4031491098040e+01, 0.2358125818164e+02,
+      0.1249201523806e-08, 0.5938379466835e+01, 0.3301902111895e+02,
+      0.1477304050539e-08, 0.6544722606797e+00, 0.9548094718417e+02,
+      0.1264316431249e-08, 0.2059072853236e+01, 0.8399684731857e+02,
+      0.1203526495039e-08, 0.3644813532605e+01, 0.4558517281984e+02,
+
+      0.9221681059831e-09, 0.3241815055602e+01, 0.7805158573086e+02,
+      0.7849278367646e-09, 0.5043812342457e+01, 0.5217580628120e+02,
+      0.7983392077387e-09, 0.5000024502753e+01, 0.1501922143975e+03,
+      0.7925395431654e-09, 0.1398734871821e-01, 0.9061773743175e+02,
+      0.7640473285886e-09, 0.5067111723130e+01, 0.4951538251678e+02,
+      0.5398937754482e-09, 0.5597382200075e+01, 0.1613385000004e+03,
+      0.5626247550193e-09, 0.2601338209422e+01, 0.7318837597844e+02,
+      0.5525197197855e-09, 0.5814832109256e+01, 0.1432335100216e+03,
+      0.5407629837898e-09, 0.3384820609076e+01, 0.3230491187871e+03,
+      0.3856739119801e-09, 0.1072391840473e+01, 0.2334791286671e+03,
+
+      0.3856425239987e-09, 0.2369540393327e+01, 0.1739046517013e+03,
+      0.4350867755983e-09, 0.5255575751082e+01, 0.1620484330494e+03,
+      0.3844113924996e-09, 0.5482356246182e+01, 0.9757644180768e+02,
+      0.2854869155431e-09, 0.9573634763143e+00, 0.1697170704744e+03,
+      0.1719227671416e-09, 0.1887203025202e+01, 0.2265204242912e+03,
+      0.1527846879755e-09, 0.3982183931157e+01, 0.3341954043900e+03,
+      0.1128229264847e-09, 0.2787457156298e+01, 0.3119028331842e+03 };
+
+/* Sun-to-Earth, T^1, X */
+   static const double e1x[] = {
+      0.1234046326004e-05, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.5150068824701e-06, 0.6002664557501e+01, 0.1256615170089e+02,
+      0.1290743923245e-07, 0.5959437664199e+01, 0.1884922755134e+02,
+      0.1068615564952e-07, 0.2015529654209e+01, 0.6283075850446e+01,
+      0.2079619142538e-08, 0.1732960531432e+01, 0.6279552690824e+01,
+      0.2078009243969e-08, 0.4915604476996e+01, 0.6286599010068e+01,
+      0.6206330058856e-09, 0.3616457953824e+00, 0.4705732307012e+01,
+      0.5989335313746e-09, 0.3802607304474e+01, 0.6256777527156e+01,
+      0.5958495663840e-09, 0.2845866560031e+01, 0.6309374173736e+01,
+      0.4866923261539e-09, 0.5213203771824e+01, 0.7755226100720e+00,
+
+      0.4267785823142e-09, 0.4368189727818e+00, 0.1059381944224e+01,
+      0.4610675141648e-09, 0.1837249181372e-01, 0.7860419393880e+01,
+      0.3626989993973e-09, 0.2161590545326e+01, 0.5753384878334e+01,
+      0.3563071194389e-09, 0.1452631954746e+01, 0.5884926831456e+01,
+      0.3557015642807e-09, 0.4470593393054e+01, 0.6812766822558e+01,
+      0.3210412089122e-09, 0.5195926078314e+01, 0.6681224869435e+01,
+      0.2875473577986e-09, 0.5916256610193e+01, 0.2513230340178e+02,
+      0.2842913681629e-09, 0.1149902426047e+01, 0.6127655567643e+01,
+      0.2751248215916e-09, 0.5502088574662e+01, 0.6438496133249e+01,
+      0.2481432881127e-09, 0.2921989846637e+01, 0.5486777812467e+01,
+
+      0.2059885976560e-09, 0.3718070376585e+01, 0.7079373888424e+01,
+      0.2015522342591e-09, 0.5979395259740e+01, 0.6290189305114e+01,
+      0.1995364084253e-09, 0.6772087985494e+00, 0.6275962395778e+01,
+      0.1957436436943e-09, 0.2899210654665e+01, 0.5507553240374e+01,
+      0.1651609818948e-09, 0.6228206482192e+01, 0.1150676975667e+02,
+      0.1822980550699e-09, 0.1469348746179e+01, 0.1179062909082e+02,
+      0.1675223159760e-09, 0.3813910555688e+01, 0.7058598460518e+01,
+      0.1706491764745e-09, 0.3004380506684e+00, 0.7113454667900e-02,
+      0.1392952362615e-09, 0.1440393973406e+01, 0.7962980379786e+00,
+      0.1209868266342e-09, 0.4150425791727e+01, 0.4694002934110e+01,
+
+      0.1009827202611e-09, 0.3290040429843e+01, 0.3738761453707e+01,
+      0.1047261388602e-09, 0.4229590090227e+01, 0.6282095334605e+01,
+      0.1047006652004e-09, 0.2418967680575e+01, 0.6284056366286e+01,
+      0.9609993143095e-10, 0.4627943659201e+01, 0.6069776770667e+01,
+      0.9590900593873e-10, 0.1894393939924e+01, 0.4136910472696e+01,
+      0.9146249188071e-10, 0.2010647519562e+01, 0.6496374930224e+01,
+      0.8545274480290e-10, 0.5529846956226e-01, 0.1194447056968e+01,
+      0.8224377881194e-10, 0.1254304102174e+01, 0.1589072916335e+01,
+      0.6183529510410e-10, 0.3360862168815e+01, 0.8827390247185e+01,
+      0.6259255147141e-10, 0.4755628243179e+01, 0.8429241228195e+01,
+
+      0.5539291694151e-10, 0.5371746955142e+01, 0.4933208510675e+01,
+      0.7328259466314e-10, 0.4927699613906e+00, 0.4535059491685e+01,
+      0.6017835843560e-10, 0.5776682001734e-01, 0.1255903824622e+02,
+      0.7079827775243e-10, 0.4395059432251e+01, 0.5088628793478e+01,
+      0.5170358878213e-10, 0.5154062619954e+01, 0.1176985366291e+02,
+      0.4872301838682e-10, 0.6289611648973e+00, 0.6040347114260e+01,
+      0.5249869411058e-10, 0.5617272046949e+01, 0.3154687086868e+01,
+      0.4716172354411e-10, 0.3965901800877e+01, 0.5331357529664e+01,
+      0.4871214940964e-10, 0.4627507050093e+01, 0.1256967486051e+02,
+      0.4598076850751e-10, 0.6023631226459e+01, 0.6525804586632e+01,
+
+      0.4562196089485e-10, 0.4138562084068e+01, 0.3930209696940e+01,
+      0.4325493872224e-10, 0.1330845906564e+01, 0.7632943190217e+01,
+      0.5673781176748e-10, 0.2558752615657e+01, 0.5729506548653e+01,
+      0.3961436642503e-10, 0.2728071734630e+01, 0.7234794171227e+01,
+      0.5101868209058e-10, 0.4113444965144e+01, 0.6836645152238e+01,
+      0.5257043167676e-10, 0.6195089830590e+01, 0.8031092209206e+01,
+      0.5076613989393e-10, 0.2305124132918e+01, 0.7477522907414e+01,
+      0.3342169352778e-10, 0.5415998155071e+01, 0.1097707878456e+02,
+      0.3545881983591e-10, 0.3727160564574e+01, 0.4164311961999e+01,
+      0.3364063738599e-10, 0.2901121049204e+00, 0.1137170464392e+02,
+
+      0.3357039670776e-10, 0.1652229354331e+01, 0.5223693906222e+01,
+      0.4307412268687e-10, 0.4938909587445e+01, 0.1592596075957e+01,
+      0.3405769115435e-10, 0.2408890766511e+01, 0.3128388763578e+01,
+      0.3001926198480e-10, 0.4862239006386e+01, 0.1748016358760e+01,
+      0.2778264787325e-10, 0.5241168661353e+01, 0.7342457794669e+01,
+      0.2676159480666e-10, 0.3423593942199e+01, 0.2146165377750e+01,
+      0.2954273399939e-10, 0.1881721265406e+01, 0.5368044267797e+00,
+      0.3309362888795e-10, 0.1931525677349e+01, 0.8018209333619e+00,
+      0.2810283608438e-10, 0.2414659495050e+01, 0.5225775174439e+00,
+      0.3378045637764e-10, 0.4238019163430e+01, 0.1554202828031e+00,
+
+      0.2558134979840e-10, 0.1828225235805e+01, 0.5230807360890e+01,
+      0.2273755578447e-10, 0.5858184283998e+01, 0.7084896783808e+01,
+      0.2294176037690e-10, 0.4514589779057e+01, 0.1726015463500e+02,
+      0.2533506099435e-10, 0.2355717851551e+01, 0.5216580451554e+01,
+      0.2716685375812e-10, 0.2221003625100e+01, 0.8635942003952e+01,
+      0.2419043435198e-10, 0.5955704951635e+01, 0.4690479774488e+01,
+      0.2521232544812e-10, 0.1395676848521e+01, 0.5481254917084e+01,
+      0.2630195021491e-10, 0.5727468918743e+01, 0.2629832328990e-01,
+      0.2548395840944e-10, 0.2628351859400e-03, 0.1349867339771e+01 };
+
+/* Sun-to-Earth, T^1, Y */
+   static const double e1y[] = {
+      0.9304690546528e-06, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.5150715570663e-06, 0.4431807116294e+01, 0.1256615170089e+02,
+      0.1290825411056e-07, 0.4388610039678e+01, 0.1884922755134e+02,
+      0.4645466665386e-08, 0.5827263376034e+01, 0.6283075850446e+01,
+      0.2079625310718e-08, 0.1621698662282e+00, 0.6279552690824e+01,
+      0.2078189850907e-08, 0.3344713435140e+01, 0.6286599010068e+01,
+      0.6207190138027e-09, 0.5074049319576e+01, 0.4705732307012e+01,
+      0.5989826532569e-09, 0.2231842216620e+01, 0.6256777527156e+01,
+      0.5961360812618e-09, 0.1274975769045e+01, 0.6309374173736e+01,
+      0.4874165471016e-09, 0.3642277426779e+01, 0.7755226100720e+00,
+
+      0.4283834034360e-09, 0.5148765510106e+01, 0.1059381944224e+01,
+      0.4652389287529e-09, 0.4715794792175e+01, 0.7860419393880e+01,
+      0.3751707476401e-09, 0.6617207370325e+00, 0.5753384878334e+01,
+      0.3559998806198e-09, 0.6155548875404e+01, 0.5884926831456e+01,
+      0.3558447558857e-09, 0.2898827297664e+01, 0.6812766822558e+01,
+      0.3211116927106e-09, 0.3625813502509e+01, 0.6681224869435e+01,
+      0.2875609914672e-09, 0.4345435813134e+01, 0.2513230340178e+02,
+      0.2843109704069e-09, 0.5862263940038e+01, 0.6127655567643e+01,
+      0.2744676468427e-09, 0.3926419475089e+01, 0.6438496133249e+01,
+      0.2481285237789e-09, 0.1351976572828e+01, 0.5486777812467e+01,
+
+      0.2060338481033e-09, 0.2147556998591e+01, 0.7079373888424e+01,
+      0.2015822358331e-09, 0.4408358972216e+01, 0.6290189305114e+01,
+      0.2001195944195e-09, 0.5385829822531e+01, 0.6275962395778e+01,
+      0.1953667642377e-09, 0.1304933746120e+01, 0.5507553240374e+01,
+      0.1839744078713e-09, 0.6173567228835e+01, 0.1179062909082e+02,
+      0.1643334294845e-09, 0.4635942997523e+01, 0.1150676975667e+02,
+      0.1768051018652e-09, 0.5086283558874e+01, 0.7113454667900e-02,
+      0.1674874205489e-09, 0.2243332137241e+01, 0.7058598460518e+01,
+      0.1421445397609e-09, 0.6186899771515e+01, 0.7962980379786e+00,
+      0.1255163958267e-09, 0.5730238465658e+01, 0.4694002934110e+01,
+
+      0.1013945281961e-09, 0.1726055228402e+01, 0.3738761453707e+01,
+      0.1047294335852e-09, 0.2658801228129e+01, 0.6282095334605e+01,
+      0.1047103879392e-09, 0.8481047835035e+00, 0.6284056366286e+01,
+      0.9530343962826e-10, 0.3079267149859e+01, 0.6069776770667e+01,
+      0.9604637611690e-10, 0.3258679792918e+00, 0.4136910472696e+01,
+      0.9153518537177e-10, 0.4398599886584e+00, 0.6496374930224e+01,
+      0.8562458214922e-10, 0.4772686794145e+01, 0.1194447056968e+01,
+      0.8232525360654e-10, 0.5966220721679e+01, 0.1589072916335e+01,
+      0.6150223411438e-10, 0.1780985591923e+01, 0.8827390247185e+01,
+      0.6272087858000e-10, 0.3184305429012e+01, 0.8429241228195e+01,
+
+      0.5540476311040e-10, 0.3801260595433e+01, 0.4933208510675e+01,
+      0.7331901699361e-10, 0.5205948591865e+01, 0.4535059491685e+01,
+      0.6018528702791e-10, 0.4770139083623e+01, 0.1255903824622e+02,
+      0.5150530724804e-10, 0.3574796899585e+01, 0.1176985366291e+02,
+      0.6471933741811e-10, 0.2679787266521e+01, 0.5088628793478e+01,
+      0.5317460644174e-10, 0.9528763345494e+00, 0.3154687086868e+01,
+      0.4832187748783e-10, 0.5329322498232e+01, 0.6040347114260e+01,
+      0.4716763555110e-10, 0.2395235316466e+01, 0.5331357529664e+01,
+      0.4871509139861e-10, 0.3056663648823e+01, 0.1256967486051e+02,
+      0.4598417696768e-10, 0.4452762609019e+01, 0.6525804586632e+01,
+
+      0.5674189533175e-10, 0.9879680872193e+00, 0.5729506548653e+01,
+      0.4073560328195e-10, 0.5939127696986e+01, 0.7632943190217e+01,
+      0.5040994945359e-10, 0.4549875824510e+01, 0.8031092209206e+01,
+      0.5078185134679e-10, 0.7346659893982e+00, 0.7477522907414e+01,
+      0.3769343537061e-10, 0.1071317188367e+01, 0.7234794171227e+01,
+      0.4980331365299e-10, 0.2500345341784e+01, 0.6836645152238e+01,
+      0.3458236594757e-10, 0.3825159450711e+01, 0.1097707878456e+02,
+      0.3578859493602e-10, 0.5299664791549e+01, 0.4164311961999e+01,
+      0.3370504646419e-10, 0.5002316301593e+01, 0.1137170464392e+02,
+      0.3299873338428e-10, 0.2526123275282e+01, 0.3930209696940e+01,
+
+      0.4304917318409e-10, 0.3368078557132e+01, 0.1592596075957e+01,
+      0.3402418753455e-10, 0.8385495425800e+00, 0.3128388763578e+01,
+      0.2778460572146e-10, 0.3669905203240e+01, 0.7342457794669e+01,
+      0.2782710128902e-10, 0.2691664812170e+00, 0.1748016358760e+01,
+      0.2711725179646e-10, 0.4707487217718e+01, 0.5296909721118e+00,
+      0.2981760946340e-10, 0.3190260867816e+00, 0.5368044267797e+00,
+      0.2811672977772e-10, 0.3196532315372e+01, 0.7084896783808e+01,
+      0.2863454474467e-10, 0.2263240324780e+00, 0.5223693906222e+01,
+      0.3333464634051e-10, 0.3498451685065e+01, 0.8018209333619e+00,
+      0.3312991747609e-10, 0.5839154477412e+01, 0.1554202828031e+00,
+
+      0.2813255564006e-10, 0.8268044346621e+00, 0.5225775174439e+00,
+      0.2665098083966e-10, 0.3934021725360e+01, 0.5216580451554e+01,
+      0.2349795705216e-10, 0.5197620913779e+01, 0.2146165377750e+01,
+      0.2330352293961e-10, 0.2984999231807e+01, 0.1726015463500e+02,
+      0.2728001683419e-10, 0.6521679638544e+00, 0.8635942003952e+01,
+      0.2484061007669e-10, 0.3468955561097e+01, 0.5230807360890e+01,
+      0.2646328768427e-10, 0.1013724533516e+01, 0.2629832328990e-01,
+      0.2518630264831e-10, 0.6108081057122e+01, 0.5481254917084e+01,
+      0.2421901455384e-10, 0.1651097776260e+01, 0.1349867339771e+01,
+      0.6348533267831e-11, 0.3220226560321e+01, 0.8433466158131e+02 };
+
+/* Sun-to-Earth, T^1, Z */
+   static const double e1z[] = {
+      0.2278290449966e-05, 0.3413716033863e+01, 0.6283075850446e+01,
+      0.5429458209830e-07, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.1903240492525e-07, 0.3370592358297e+01, 0.1256615170089e+02,
+      0.2385409276743e-09, 0.3327914718416e+01, 0.1884922755134e+02,
+      0.8676928342573e-10, 0.1824006811264e+01, 0.5223693906222e+01,
+      0.7765442593544e-10, 0.3888564279247e+01, 0.5507553240374e+01,
+      0.7066158332715e-10, 0.5194267231944e+01, 0.2352866153506e+01,
+      0.7092175288657e-10, 0.2333246960021e+01, 0.8399684731857e+02,
+      0.5357582213535e-10, 0.2224031176619e+01, 0.5296909721118e+00,
+      0.3828035865021e-10, 0.2156710933584e+01, 0.6279552690824e+01,
+
+      0.3824857220427e-10, 0.1529755219915e+01, 0.6286599010068e+01,
+      0.3286995181628e-10, 0.4879512900483e+01, 0.1021328554739e+02 };
+
+/* Sun-to-Earth, T^2, X */
+   static const double e2x[] = {
+     -0.4143818297913e-10, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.2171497694435e-10, 0.4398225628264e+01, 0.1256615170089e+02,
+      0.9845398442516e-11, 0.2079720838384e+00, 0.6283075850446e+01,
+      0.9256833552682e-12, 0.4191264694361e+01, 0.1884922755134e+02,
+      0.1022049384115e-12, 0.5381133195658e+01, 0.8399684731857e+02 };
+
+/* Sun-to-Earth, T^2, Y */
+   static const double e2y[] = {
+      0.5063375872532e-10, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.2173815785980e-10, 0.2827805833053e+01, 0.1256615170089e+02,
+      0.1010231999920e-10, 0.4634612377133e+01, 0.6283075850446e+01,
+      0.9259745317636e-12, 0.2620612076189e+01, 0.1884922755134e+02,
+      0.1022202095812e-12, 0.3809562326066e+01, 0.8399684731857e+02 };
+
+/* Sun-to-Earth, T^2, Z */
+   static const double e2z[] = {
+      0.9722666114891e-10, 0.5152219582658e+01, 0.6283075850446e+01,
+     -0.3494819171909e-11, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.6713034376076e-12, 0.6440188750495e+00, 0.1256615170089e+02 };
+
+/* SSB-to-Sun, T^0, X */
+   static const double s0x[] = {
+      0.4956757536410e-02, 0.3741073751789e+01, 0.5296909721118e+00,
+      0.2718490072522e-02, 0.4016011511425e+01, 0.2132990797783e+00,
+      0.1546493974344e-02, 0.2170528330642e+01, 0.3813291813120e-01,
+      0.8366855276341e-03, 0.2339614075294e+01, 0.7478166569050e-01,
+      0.2936777942117e-03, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.1201317439469e-03, 0.4090736353305e+01, 0.1059381944224e+01,
+      0.7578550887230e-04, 0.3241518088140e+01, 0.4265981595566e+00,
+      0.1941787367773e-04, 0.1012202064330e+01, 0.2061856251104e+00,
+      0.1889227765991e-04, 0.3892520416440e+01, 0.2204125344462e+00,
+      0.1937896968613e-04, 0.4797779441161e+01, 0.1495633313810e+00,
+
+      0.1434506110873e-04, 0.3868960697933e+01, 0.5225775174439e+00,
+      0.1406659911580e-04, 0.4759766557397e+00, 0.5368044267797e+00,
+      0.1179022300202e-04, 0.7774961520598e+00, 0.7626583626240e-01,
+      0.8085864460959e-05, 0.3254654471465e+01, 0.3664874755930e-01,
+      0.7622752967615e-05, 0.4227633103489e+01, 0.3961708870310e-01,
+      0.6209171139066e-05, 0.2791828325711e+00, 0.7329749511860e-01,
+      0.4366435633970e-05, 0.4440454875925e+01, 0.1589072916335e+01,
+      0.3792124889348e-05, 0.5156393842356e+01, 0.7113454667900e-02,
+      0.3154548963402e-05, 0.6157005730093e+01, 0.4194847048887e+00,
+      0.3088359882942e-05, 0.2494567553163e+01, 0.6398972393349e+00,
+
+      0.2788440902136e-05, 0.4934318747989e+01, 0.1102062672231e+00,
+      0.3039928456376e-05, 0.4895077702640e+01, 0.6283075850446e+01,
+      0.2272258457679e-05, 0.5278394064764e+01, 0.1030928125552e+00,
+      0.2162007057957e-05, 0.5802978019099e+01, 0.3163918923335e+00,
+      0.1767632855737e-05, 0.3415346595193e-01, 0.1021328554739e+02,
+      0.1349413459362e-05, 0.2001643230755e+01, 0.1484170571900e-02,
+      0.1170141900476e-05, 0.2424750491620e+01, 0.6327837846670e+00,
+      0.1054355266820e-05, 0.3123311487576e+01, 0.4337116142245e+00,
+      0.9800822461610e-06, 0.3026258088130e+01, 0.1052268489556e+01,
+      0.1091203749931e-05, 0.3157811670347e+01, 0.1162474756779e+01,
+
+      0.6960236715913e-06, 0.8219570542313e+00, 0.1066495398892e+01,
+      0.5689257296909e-06, 0.1323052375236e+01, 0.9491756770005e+00,
+      0.6613172135802e-06, 0.2765348881598e+00, 0.8460828644453e+00,
+      0.6277702517571e-06, 0.5794064466382e+01, 0.1480791608091e+00,
+      0.6304884066699e-06, 0.7323555380787e+00, 0.2243449970715e+00,
+      0.4897850467382e-06, 0.3062464235399e+01, 0.3340612434717e+01,
+      0.3759148598786e-06, 0.4588290469664e+01, 0.3516457698740e-01,
+      0.3110520548195e-06, 0.1374299536572e+01, 0.6373574839730e-01,
+      0.3064708359780e-06, 0.4222267485047e+01, 0.1104591729320e-01,
+      0.2856347168241e-06, 0.3714202944973e+01, 0.1510475019529e+00,
+
+      0.2840945514288e-06, 0.2847972875882e+01, 0.4110125927500e-01,
+      0.2378951599405e-06, 0.3762072563388e+01, 0.2275259891141e+00,
+      0.2714229481417e-06, 0.1036049980031e+01, 0.2535050500000e-01,
+      0.2323551717307e-06, 0.4682388599076e+00, 0.8582758298370e-01,
+      0.1881790512219e-06, 0.4790565425418e+01, 0.2118763888447e+01,
+      0.2261353968371e-06, 0.1669144912212e+01, 0.7181332454670e-01,
+      0.2214546389848e-06, 0.3937717281614e+01, 0.2968341143800e-02,
+      0.2184915594933e-06, 0.1129169845099e+00, 0.7775000683430e-01,
+      0.2000164937936e-06, 0.4030009638488e+01, 0.2093666171530e+00,
+      0.1966105136719e-06, 0.8745955786834e+00, 0.2172315424036e+00,
+
+      0.1904742332624e-06, 0.5919743598964e+01, 0.2022531624851e+00,
+      0.1657399705031e-06, 0.2549141484884e+01, 0.7358765972222e+00,
+      0.1574070533987e-06, 0.5277533020230e+01, 0.7429900518901e+00,
+      0.1832261651039e-06, 0.3064688127777e+01, 0.3235053470014e+00,
+      0.1733615346569e-06, 0.3011432799094e+01, 0.1385174140878e+00,
+      0.1549124014496e-06, 0.4005569132359e+01, 0.5154640627760e+00,
+      0.1637044713838e-06, 0.1831375966632e+01, 0.8531963191132e+00,
+      0.1123420082383e-06, 0.1180270407578e+01, 0.1990721704425e+00,
+      0.1083754165740e-06, 0.3414101320863e+00, 0.5439178814476e+00,
+      0.1156638012655e-06, 0.6130479452594e+00, 0.5257585094865e+00,
+
+      0.1142548785134e-06, 0.3724761948846e+01, 0.5336234347371e+00,
+      0.7921463895965e-07, 0.2435425589361e+01, 0.1478866649112e+01,
+      0.7428600285231e-07, 0.3542144398753e+01, 0.2164800718209e+00,
+      0.8323211246747e-07, 0.3525058072354e+01, 0.1692165728891e+01,
+      0.7257595116312e-07, 0.1364299431982e+01, 0.2101180877357e+00,
+      0.7111185833236e-07, 0.2460478875808e+01, 0.4155522422634e+00,
+      0.6868090383716e-07, 0.4397327670704e+01, 0.1173197218910e+00,
+      0.7226419974175e-07, 0.4042647308905e+01, 0.1265567569334e+01,
+      0.6955642383177e-07, 0.2865047906085e+01, 0.9562891316684e+00,
+      0.7492139296331e-07, 0.5014278994215e+01, 0.1422690933580e-01,
+
+      0.6598363128857e-07, 0.2376730020492e+01, 0.6470106940028e+00,
+      0.7381147293385e-07, 0.3272990384244e+01, 0.1581959461667e+01,
+      0.6402909624032e-07, 0.5302290955138e+01, 0.9597935788730e-01,
+      0.6237454263857e-07, 0.5444144425332e+01, 0.7084920306520e-01,
+      0.5241198544016e-07, 0.4215359579205e+01, 0.5265099800692e+00,
+      0.5144463853918e-07, 0.1218916689916e+00, 0.5328719641544e+00,
+      0.5868164772299e-07, 0.2369402002213e+01, 0.7871412831580e-01,
+      0.6233195669151e-07, 0.1254922242403e+01, 0.2608790314060e+02,
+      0.6068463791422e-07, 0.5679713760431e+01, 0.1114304132498e+00,
+      0.4359361135065e-07, 0.6097219641646e+00, 0.1375773836557e+01,
+
+      0.4686510366826e-07, 0.4786231041431e+01, 0.1143987543936e+00,
+      0.3758977287225e-07, 0.1167368068139e+01, 0.1596186371003e+01,
+      0.4282051974778e-07, 0.1519471064319e+01, 0.2770348281756e+00,
+      0.5153765386113e-07, 0.1860532322984e+01, 0.2228608264996e+00,
+      0.4575129387188e-07, 0.7632857887158e+00, 0.1465949902372e+00,
+      0.3326844933286e-07, 0.1298219485285e+01, 0.5070101000000e-01,
+      0.3748617450984e-07, 0.1046510321062e+01, 0.4903339079539e+00,
+      0.2816756661499e-07, 0.3434522346190e+01, 0.2991266627620e+00,
+      0.3412750405039e-07, 0.2523766270318e+01, 0.3518164938661e+00,
+      0.2655796761776e-07, 0.2904422260194e+01, 0.6256703299991e+00,
+
+      0.2963597929458e-07, 0.5923900431149e+00, 0.1099462426779e+00,
+      0.2539523734781e-07, 0.4851947722567e+01, 0.1256615170089e+02,
+      0.2283087914139e-07, 0.3400498595496e+01, 0.6681224869435e+01,
+      0.2321309799331e-07, 0.5789099148673e+01, 0.3368040641550e-01,
+      0.2549657649750e-07, 0.3991856479792e-01, 0.1169588211447e+01,
+      0.2290462303977e-07, 0.2788567577052e+01, 0.1045155034888e+01,
+      0.1945398522914e-07, 0.3290896998176e+01, 0.1155361302111e+01,
+      0.1849171512638e-07, 0.2698060129367e+01, 0.4452511715700e-02,
+      0.1647199834254e-07, 0.3016735644085e+01, 0.4408250688924e+00,
+      0.1529530765273e-07, 0.5573043116178e+01, 0.6521991896920e-01,
+
+      0.1433199339978e-07, 0.1481192356147e+01, 0.9420622223326e+00,
+      0.1729134193602e-07, 0.1422817538933e+01, 0.2108507877249e+00,
+      0.1716463931346e-07, 0.3469468901855e+01, 0.2157473718317e+00,
+      0.1391206061378e-07, 0.6122436220547e+01, 0.4123712502208e+00,
+      0.1404746661924e-07, 0.1647765641936e+01, 0.4258542984690e-01,
+      0.1410452399455e-07, 0.5989729161964e+01, 0.2258291676434e+00,
+      0.1089828772168e-07, 0.2833705509371e+01, 0.4226656969313e+00,
+      0.1047374564948e-07, 0.5090690007331e+00, 0.3092784376656e+00,
+      0.1358279126532e-07, 0.5128990262836e+01, 0.7923417740620e-01,
+      0.1020456476148e-07, 0.9632772880808e+00, 0.1456308687557e+00,
+
+      0.1033428735328e-07, 0.3223779318418e+01, 0.1795258541446e+01,
+      0.1412435841540e-07, 0.2410271572721e+01, 0.1525316725248e+00,
+      0.9722759371574e-08, 0.2333531395690e+01, 0.8434341241180e-01,
+      0.9657334084704e-08, 0.6199270974168e+01, 0.1272681024002e+01,
+      0.1083641148690e-07, 0.2864222292929e+01, 0.7032915397480e-01,
+      0.1067318403838e-07, 0.5833458866568e+00, 0.2123349582968e+00,
+      0.1062366201976e-07, 0.4307753989494e+01, 0.2142632012598e+00,
+      0.1236364149266e-07, 0.2873917870593e+01, 0.1847279083684e+00,
+      0.1092759489593e-07, 0.2959887266733e+01, 0.1370332435159e+00,
+      0.8912069362899e-08, 0.5141213702562e+01, 0.2648454860559e+01,
+
+      0.9656467707970e-08, 0.4532182462323e+01, 0.4376440768498e+00,
+      0.8098386150135e-08, 0.2268906338379e+01, 0.2880807454688e+00,
+      0.7857714675000e-08, 0.4055544260745e+01, 0.2037373330570e+00,
+      0.7288455940646e-08, 0.5357901655142e+01, 0.1129145838217e+00,
+      0.9450595950552e-08, 0.4264926963939e+01, 0.5272426800584e+00,
+      0.9381718247537e-08, 0.7489366976576e-01, 0.5321392641652e+00,
+      0.7079052646038e-08, 0.1923311052874e+01, 0.6288513220417e+00,
+      0.9259004415344e-08, 0.2970256853438e+01, 0.1606092486742e+00,
+      0.8259801499742e-08, 0.3327056314697e+01, 0.8389694097774e+00,
+      0.6476334355779e-08, 0.2954925505727e+01, 0.2008557621224e+01,
+
+      0.5984021492007e-08, 0.9138753105829e+00, 0.2042657109477e+02,
+      0.5989546863181e-08, 0.3244464082031e+01, 0.2111650433779e+01,
+      0.6233108606023e-08, 0.4995232638403e+00, 0.4305306221819e+00,
+      0.6877299149965e-08, 0.2834987233449e+01, 0.9561746721300e-02,
+      0.8311234227190e-08, 0.2202951835758e+01, 0.3801276407308e+00,
+      0.6599472832414e-08, 0.4478581462618e+01, 0.1063314406849e+01,
+      0.6160491096549e-08, 0.5145858696411e+01, 0.1368660381889e+01,
+      0.6164772043891e-08, 0.3762976697911e+00, 0.4234171675140e+00,
+      0.6363248684450e-08, 0.3162246718685e+01, 0.1253008786510e-01,
+      0.6448587520999e-08, 0.3442693302119e+01, 0.5287268506303e+00,
+
+      0.6431662283977e-08, 0.8977549136606e+00, 0.5306550935933e+00,
+      0.6351223158474e-08, 0.4306447410369e+01, 0.5217580628120e+02,
+      0.5476721393451e-08, 0.3888529177855e+01, 0.2221856701002e+01,
+      0.5341772572619e-08, 0.2655560662512e+01, 0.7466759693650e-01,
+      0.5337055758302e-08, 0.5164990735946e+01, 0.7489573444450e-01,
+      0.5373120816787e-08, 0.6041214553456e+01, 0.1274714967946e+00,
+      0.5392351705426e-08, 0.9177763485932e+00, 0.1055449481598e+01,
+      0.6688495850205e-08, 0.3089608126937e+01, 0.2213766559277e+00,
+      0.5072003660362e-08, 0.4311316541553e+01, 0.2132517061319e+00,
+      0.5070726650455e-08, 0.5790675464444e+00, 0.2133464534247e+00,
+
+      0.5658012950032e-08, 0.2703945510675e+01, 0.7287631425543e+00,
+      0.4835509924854e-08, 0.2975422976065e+01, 0.7160067364790e-01,
+      0.6479821978012e-08, 0.1324168733114e+01, 0.2209183458640e-01,
+      0.6230636494980e-08, 0.2860103632836e+01, 0.3306188016693e+00,
+      0.4649239516213e-08, 0.4832259763403e+01, 0.7796265773310e-01,
+      0.6487325792700e-08, 0.2726165825042e+01, 0.3884652414254e+00,
+      0.4682823682770e-08, 0.6966602455408e+00, 0.1073608853559e+01,
+      0.5704230804976e-08, 0.5669634104606e+01, 0.8731175355560e-01,
+      0.6125413585489e-08, 0.1513386538915e+01, 0.7605151500000e-01,
+      0.6035825038187e-08, 0.1983509168227e+01, 0.9846002785331e+00,
+
+      0.4331123462303e-08, 0.2782892992807e+01, 0.4297791515992e+00,
+      0.4681107685143e-08, 0.5337232886836e+01, 0.2127790306879e+00,
+      0.4669105829655e-08, 0.5837133792160e+01, 0.2138191288687e+00,
+      0.5138823602365e-08, 0.3080560200507e+01, 0.7233337363710e-01,
+      0.4615856664534e-08, 0.1661747897471e+01, 0.8603097737811e+00,
+      0.4496916702197e-08, 0.2112508027068e+01, 0.7381754420900e-01,
+      0.4278479042945e-08, 0.5716528462627e+01, 0.7574578717200e-01,
+      0.3840525503932e-08, 0.6424172726492e+00, 0.3407705765729e+00,
+      0.4866636509685e-08, 0.4919244697715e+01, 0.7722995774390e-01,
+      0.3526100639296e-08, 0.2550821052734e+01, 0.6225157782540e-01,
+
+      0.3939558488075e-08, 0.3939331491710e+01, 0.5268983110410e-01,
+      0.4041268772576e-08, 0.2275337571218e+01, 0.3503323232942e+00,
+      0.3948761842853e-08, 0.1999324200790e+01, 0.1451108196653e+00,
+      0.3258394550029e-08, 0.9121001378200e+00, 0.5296435984654e+00,
+      0.3257897048761e-08, 0.3428428660869e+01, 0.5297383457582e+00,
+      0.3842559031298e-08, 0.6132927720035e+01, 0.9098186128426e+00,
+      0.3109920095448e-08, 0.7693650193003e+00, 0.3932462625300e-02,
+      0.3132237775119e-08, 0.3621293854908e+01, 0.2346394437820e+00,
+      0.3942189421510e-08, 0.4841863659733e+01, 0.3180992042600e-02,
+      0.3796972285340e-08, 0.1814174994268e+01, 0.1862120789403e+00,
+
+      0.3995640233688e-08, 0.1386990406091e+01, 0.4549093064213e+00,
+      0.2875013727414e-08, 0.9178318587177e+00, 0.1905464808669e+01,
+      0.3073719932844e-08, 0.2688923811835e+01, 0.3628624111593e+00,
+      0.2731016580075e-08, 0.1188259127584e+01, 0.2131850110243e+00,
+      0.2729549896546e-08, 0.3702160634273e+01, 0.2134131485323e+00,
+      0.3339372892449e-08, 0.7199163960331e+00, 0.2007689919132e+00,
+      0.2898833764204e-08, 0.1916709364999e+01, 0.5291709230214e+00,
+      0.2894536549362e-08, 0.2424043195547e+01, 0.5302110212022e+00,
+      0.3096872473843e-08, 0.4445894977497e+01, 0.2976424921901e+00,
+      0.2635672326810e-08, 0.3814366984117e+01, 0.1485980103780e+01,
+
+      0.3649302697001e-08, 0.2924200596084e+01, 0.6044726378023e+00,
+      0.3127954585895e-08, 0.1842251648327e+01, 0.1084620721060e+00,
+      0.2616040173947e-08, 0.4155841921984e+01, 0.1258454114666e+01,
+      0.2597395859860e-08, 0.1158045978874e+00, 0.2103781122809e+00,
+      0.2593286172210e-08, 0.4771850408691e+01, 0.2162200472757e+00,
+      0.2481823585747e-08, 0.4608842558889e+00, 0.1062562936266e+01,
+      0.2742219550725e-08, 0.1538781127028e+01, 0.5651155736444e+00,
+      0.3199558469610e-08, 0.3226647822878e+00, 0.7036329877322e+00,
+      0.2666088542957e-08, 0.1967991731219e+00, 0.1400015846597e+00,
+      0.2397067430580e-08, 0.3707036669873e+01, 0.2125476091956e+00,
+
+      0.2376570772738e-08, 0.1182086628042e+01, 0.2140505503610e+00,
+      0.2547228007887e-08, 0.4906256820629e+01, 0.1534957940063e+00,
+      0.2265575594114e-08, 0.3414949866857e+01, 0.2235935264888e+00,
+      0.2464381430585e-08, 0.4599122275378e+01, 0.2091065926078e+00,
+      0.2433408527044e-08, 0.2830751145445e+00, 0.2174915669488e+00,
+      0.2443605509076e-08, 0.4212046432538e+01, 0.1739420156204e+00,
+      0.2319779262465e-08, 0.9881978408630e+00, 0.7530171478090e-01,
+      0.2284622835465e-08, 0.5565347331588e+00, 0.7426161660010e-01,
+      0.2467268750783e-08, 0.5655708150766e+00, 0.2526561439362e+00,
+      0.2808513492782e-08, 0.1418405053408e+01, 0.5636314030725e+00,
+
+      0.2329528932532e-08, 0.4069557545675e+01, 0.1056200952181e+01,
+      0.9698639532817e-09, 0.1074134313634e+01, 0.7826370942180e+02 };
+
+/* SSB-to-Sun, T^0, Y */
+   static const double s0y[] = {
+      0.4955392320126e-02, 0.2170467313679e+01, 0.5296909721118e+00,
+      0.2722325167392e-02, 0.2444433682196e+01, 0.2132990797783e+00,
+      0.1546579925346e-02, 0.5992779281546e+00, 0.3813291813120e-01,
+      0.8363140252966e-03, 0.7687356310801e+00, 0.7478166569050e-01,
+      0.3385792683603e-03, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.1201192221613e-03, 0.2520035601514e+01, 0.1059381944224e+01,
+      0.7587125720554e-04, 0.1669954006449e+01, 0.4265981595566e+00,
+      0.1964155361250e-04, 0.5707743963343e+01, 0.2061856251104e+00,
+      0.1891900364909e-04, 0.2320960679937e+01, 0.2204125344462e+00,
+      0.1937373433356e-04, 0.3226940689555e+01, 0.1495633313810e+00,
+
+      0.1437139941351e-04, 0.2301626908096e+01, 0.5225775174439e+00,
+      0.1406267683099e-04, 0.5188579265542e+01, 0.5368044267797e+00,
+      0.1178703080346e-04, 0.5489483248476e+01, 0.7626583626240e-01,
+      0.8079835186041e-05, 0.1683751835264e+01, 0.3664874755930e-01,
+      0.7623253594652e-05, 0.2656400462961e+01, 0.3961708870310e-01,
+      0.6248667483971e-05, 0.4992775362055e+01, 0.7329749511860e-01,
+      0.4366353695038e-05, 0.2869706279678e+01, 0.1589072916335e+01,
+      0.3829101568895e-05, 0.3572131359950e+01, 0.7113454667900e-02,
+      0.3175733773908e-05, 0.4535372530045e+01, 0.4194847048887e+00,
+      0.3092437902159e-05, 0.9230153317909e+00, 0.6398972393349e+00,
+
+      0.2874168812154e-05, 0.3363143761101e+01, 0.1102062672231e+00,
+      0.3040119321826e-05, 0.3324250895675e+01, 0.6283075850446e+01,
+      0.2699723308006e-05, 0.2917882441928e+00, 0.1030928125552e+00,
+      0.2134832683534e-05, 0.4220997202487e+01, 0.3163918923335e+00,
+      0.1770412139433e-05, 0.4747318496462e+01, 0.1021328554739e+02,
+      0.1377264209373e-05, 0.4305058462401e+00, 0.1484170571900e-02,
+      0.1127814538960e-05, 0.8538177240740e+00, 0.6327837846670e+00,
+      0.1055608090130e-05, 0.1551800742580e+01, 0.4337116142245e+00,
+      0.9802673861420e-06, 0.1459646735377e+01, 0.1052268489556e+01,
+      0.1090329461951e-05, 0.1587351228711e+01, 0.1162474756779e+01,
+
+      0.6959590025090e-06, 0.5534442628766e+01, 0.1066495398892e+01,
+      0.5664914529542e-06, 0.6030673003297e+01, 0.9491756770005e+00,
+      0.6607787763599e-06, 0.4989507233927e+01, 0.8460828644453e+00,
+      0.6269725742838e-06, 0.4222951804572e+01, 0.1480791608091e+00,
+      0.6301889697863e-06, 0.5444316669126e+01, 0.2243449970715e+00,
+      0.4891042662861e-06, 0.1490552839784e+01, 0.3340612434717e+01,
+      0.3457083123290e-06, 0.3030475486049e+01, 0.3516457698740e-01,
+      0.3032559967314e-06, 0.2652038793632e+01, 0.1104591729320e-01,
+      0.2841133988903e-06, 0.1276744786829e+01, 0.4110125927500e-01,
+      0.2855564444432e-06, 0.2143368674733e+01, 0.1510475019529e+00,
+
+      0.2765157135038e-06, 0.5444186109077e+01, 0.6373574839730e-01,
+      0.2382312465034e-06, 0.2190521137593e+01, 0.2275259891141e+00,
+      0.2808060365077e-06, 0.5735195064841e+01, 0.2535050500000e-01,
+      0.2332175234405e-06, 0.9481985524859e-01, 0.7181332454670e-01,
+      0.2322488199659e-06, 0.5180499361533e+01, 0.8582758298370e-01,
+      0.1881850258423e-06, 0.3219788273885e+01, 0.2118763888447e+01,
+      0.2196111392808e-06, 0.2366941159761e+01, 0.2968341143800e-02,
+      0.2183810335519e-06, 0.4825445110915e+01, 0.7775000683430e-01,
+      0.2002733093326e-06, 0.2457148995307e+01, 0.2093666171530e+00,
+      0.1967111767229e-06, 0.5586291545459e+01, 0.2172315424036e+00,
+
+      0.1568473250543e-06, 0.3708003123320e+01, 0.7429900518901e+00,
+      0.1852528314300e-06, 0.4310638151560e+01, 0.2022531624851e+00,
+      0.1832111226447e-06, 0.1494665322656e+01, 0.3235053470014e+00,
+      0.1746805502310e-06, 0.1451378500784e+01, 0.1385174140878e+00,
+      0.1555730966650e-06, 0.1068040418198e+01, 0.7358765972222e+00,
+      0.1554883462559e-06, 0.2442579035461e+01, 0.5154640627760e+00,
+      0.1638380568746e-06, 0.2597913420625e+00, 0.8531963191132e+00,
+      0.1159938593640e-06, 0.5834512021280e+01, 0.1990721704425e+00,
+      0.1083427965695e-06, 0.5054033177950e+01, 0.5439178814476e+00,
+      0.1156480369431e-06, 0.5325677432457e+01, 0.5257585094865e+00,
+
+      0.1141308860095e-06, 0.2153403923857e+01, 0.5336234347371e+00,
+      0.7913146470946e-07, 0.8642846847027e+00, 0.1478866649112e+01,
+      0.7439752463733e-07, 0.1970628496213e+01, 0.2164800718209e+00,
+      0.7280277104079e-07, 0.6073307250609e+01, 0.2101180877357e+00,
+      0.8319567719136e-07, 0.1954371928334e+01, 0.1692165728891e+01,
+      0.7137705549290e-07, 0.8904989440909e+00, 0.4155522422634e+00,
+      0.6900825396225e-07, 0.2825717714977e+01, 0.1173197218910e+00,
+      0.7245757216635e-07, 0.2481677513331e+01, 0.1265567569334e+01,
+      0.6961165696255e-07, 0.1292955312978e+01, 0.9562891316684e+00,
+      0.7571804456890e-07, 0.3427517575069e+01, 0.1422690933580e-01,
+
+      0.6605425721904e-07, 0.8052192701492e+00, 0.6470106940028e+00,
+      0.7375477357248e-07, 0.1705076390088e+01, 0.1581959461667e+01,
+      0.7041664951470e-07, 0.4848356967891e+00, 0.9597935788730e-01,
+      0.6322199535763e-07, 0.3878069473909e+01, 0.7084920306520e-01,
+      0.5244380279191e-07, 0.2645560544125e+01, 0.5265099800692e+00,
+      0.5143125704988e-07, 0.4834486101370e+01, 0.5328719641544e+00,
+      0.5871866319373e-07, 0.7981472548900e+00, 0.7871412831580e-01,
+      0.6300822573871e-07, 0.5979398788281e+01, 0.2608790314060e+02,
+      0.6062154271548e-07, 0.4108655402756e+01, 0.1114304132498e+00,
+      0.4361912339976e-07, 0.5322624319280e+01, 0.1375773836557e+01,
+
+      0.4417005920067e-07, 0.6240817359284e+01, 0.2770348281756e+00,
+      0.4686806749936e-07, 0.3214977301156e+01, 0.1143987543936e+00,
+      0.3758892132305e-07, 0.5879809634765e+01, 0.1596186371003e+01,
+      0.5151351332319e-07, 0.2893377688007e+00, 0.2228608264996e+00,
+      0.4554683578572e-07, 0.5475427144122e+01, 0.1465949902372e+00,
+      0.3442381385338e-07, 0.5992034796640e+01, 0.5070101000000e-01,
+      0.2831093954933e-07, 0.5367350273914e+01, 0.3092784376656e+00,
+      0.3756267090084e-07, 0.5758171285420e+01, 0.4903339079539e+00,
+      0.2816374679892e-07, 0.1863718700923e+01, 0.2991266627620e+00,
+      0.3419307025569e-07, 0.9524347534130e+00, 0.3518164938661e+00,
+
+      0.2904250494239e-07, 0.5304471615602e+01, 0.1099462426779e+00,
+      0.2471734511206e-07, 0.1297069793530e+01, 0.6256703299991e+00,
+      0.2539620831872e-07, 0.3281126083375e+01, 0.1256615170089e+02,
+      0.2281017868007e-07, 0.1829122133165e+01, 0.6681224869435e+01,
+      0.2275319473335e-07, 0.5797198160181e+01, 0.3932462625300e-02,
+      0.2547755368442e-07, 0.4752697708330e+01, 0.1169588211447e+01,
+      0.2285979669317e-07, 0.1223205292886e+01, 0.1045155034888e+01,
+      0.1913386560994e-07, 0.1757532993389e+01, 0.1155361302111e+01,
+      0.1809020525147e-07, 0.4246116108791e+01, 0.3368040641550e-01,
+      0.1649213300201e-07, 0.1445162890627e+01, 0.4408250688924e+00,
+
+      0.1834972793932e-07, 0.1126917567225e+01, 0.4452511715700e-02,
+      0.1439550648138e-07, 0.6160756834764e+01, 0.9420622223326e+00,
+      0.1487645457041e-07, 0.4358761931792e+01, 0.4123712502208e+00,
+      0.1731729516660e-07, 0.6134456753344e+01, 0.2108507877249e+00,
+      0.1717747163567e-07, 0.1898186084455e+01, 0.2157473718317e+00,
+      0.1418190430374e-07, 0.4180286741266e+01, 0.6521991896920e-01,
+      0.1404844134873e-07, 0.7654053565412e-01, 0.4258542984690e-01,
+      0.1409842846538e-07, 0.4418612420312e+01, 0.2258291676434e+00,
+      0.1090948346291e-07, 0.1260615686131e+01, 0.4226656969313e+00,
+      0.1357577323612e-07, 0.3558248818690e+01, 0.7923417740620e-01,
+
+      0.1018154061960e-07, 0.5676087241256e+01, 0.1456308687557e+00,
+      0.1412073972109e-07, 0.8394392632422e+00, 0.1525316725248e+00,
+      0.1030938326496e-07, 0.1653593274064e+01, 0.1795258541446e+01,
+      0.1180081567104e-07, 0.1285802592036e+01, 0.7032915397480e-01,
+      0.9708510575650e-08, 0.7631889488106e+00, 0.8434341241180e-01,
+      0.9637689663447e-08, 0.4630642649176e+01, 0.1272681024002e+01,
+      0.1068910429389e-07, 0.5294934032165e+01, 0.2123349582968e+00,
+      0.1063716179336e-07, 0.2736266800832e+01, 0.2142632012598e+00,
+      0.1234858713814e-07, 0.1302891146570e+01, 0.1847279083684e+00,
+      0.8912631189738e-08, 0.3570415993621e+01, 0.2648454860559e+01,
+
+      0.1036378285534e-07, 0.4236693440949e+01, 0.1370332435159e+00,
+      0.9667798501561e-08, 0.2960768892398e+01, 0.4376440768498e+00,
+      0.8108314201902e-08, 0.6987781646841e+00, 0.2880807454688e+00,
+      0.7648364324628e-08, 0.2499017863863e+01, 0.2037373330570e+00,
+      0.7286136828406e-08, 0.3787426951665e+01, 0.1129145838217e+00,
+      0.9448237743913e-08, 0.2694354332983e+01, 0.5272426800584e+00,
+      0.9374276106428e-08, 0.4787121277064e+01, 0.5321392641652e+00,
+      0.7100226287462e-08, 0.3530238792101e+00, 0.6288513220417e+00,
+      0.9253056659571e-08, 0.1399478925664e+01, 0.1606092486742e+00,
+      0.6636432145504e-08, 0.3479575438447e+01, 0.1368660381889e+01,
+
+      0.6469975312932e-08, 0.1383669964800e+01, 0.2008557621224e+01,
+      0.7335849729765e-08, 0.1243698166898e+01, 0.9561746721300e-02,
+      0.8743421205855e-08, 0.3776164289301e+01, 0.3801276407308e+00,
+      0.5993635744494e-08, 0.5627122113596e+01, 0.2042657109477e+02,
+      0.5981008479693e-08, 0.1674336636752e+01, 0.2111650433779e+01,
+      0.6188535145838e-08, 0.5214925208672e+01, 0.4305306221819e+00,
+      0.6596074017566e-08, 0.2907653268124e+01, 0.1063314406849e+01,
+      0.6630815126226e-08, 0.2127643669658e+01, 0.8389694097774e+00,
+      0.6156772830040e-08, 0.5082160803295e+01, 0.4234171675140e+00,
+      0.6446960563014e-08, 0.1872100916905e+01, 0.5287268506303e+00,
+
+      0.6429324424668e-08, 0.5610276103577e+01, 0.5306550935933e+00,
+      0.6302232396465e-08, 0.1592152049607e+01, 0.1253008786510e-01,
+      0.6399244436159e-08, 0.2746214421532e+01, 0.5217580628120e+02,
+      0.5474965172558e-08, 0.2317666374383e+01, 0.2221856701002e+01,
+      0.5339293190692e-08, 0.1084724961156e+01, 0.7466759693650e-01,
+      0.5334733683389e-08, 0.3594106067745e+01, 0.7489573444450e-01,
+      0.5392665782110e-08, 0.5630254365606e+01, 0.1055449481598e+01,
+      0.6682075673789e-08, 0.1518480041732e+01, 0.2213766559277e+00,
+      0.5079130495960e-08, 0.2739765115711e+01, 0.2132517061319e+00,
+      0.5077759793261e-08, 0.5290711290094e+01, 0.2133464534247e+00,
+
+      0.4832037368310e-08, 0.1404473217200e+01, 0.7160067364790e-01,
+      0.6463279674802e-08, 0.6038381695210e+01, 0.2209183458640e-01,
+      0.6240592771560e-08, 0.1290170653666e+01, 0.3306188016693e+00,
+      0.4672013521493e-08, 0.3261895939677e+01, 0.7796265773310e-01,
+      0.6500650750348e-08, 0.1154522312095e+01, 0.3884652414254e+00,
+      0.6344161389053e-08, 0.6206111545062e+01, 0.7605151500000e-01,
+      0.4682518370646e-08, 0.5409118796685e+01, 0.1073608853559e+01,
+      0.5329460015591e-08, 0.1202985784864e+01, 0.7287631425543e+00,
+      0.5701588675898e-08, 0.4098715257064e+01, 0.8731175355560e-01,
+      0.6030690867211e-08, 0.4132033218460e+00, 0.9846002785331e+00,
+
+      0.4336256312655e-08, 0.1211415991827e+01, 0.4297791515992e+00,
+      0.4688498808975e-08, 0.3765479072409e+01, 0.2127790306879e+00,
+      0.4675578609335e-08, 0.4265540037226e+01, 0.2138191288687e+00,
+      0.4225578112158e-08, 0.5237566010676e+01, 0.3407705765729e+00,
+      0.5139422230028e-08, 0.1507173079513e+01, 0.7233337363710e-01,
+      0.4619995093571e-08, 0.9023957449848e-01, 0.8603097737811e+00,
+      0.4494776255461e-08, 0.5414930552139e+00, 0.7381754420900e-01,
+      0.4274026276788e-08, 0.4145735303659e+01, 0.7574578717200e-01,
+      0.5018141789353e-08, 0.3344408829055e+01, 0.3180992042600e-02,
+      0.4866163952181e-08, 0.3348534657607e+01, 0.7722995774390e-01,
+
+      0.4111986020501e-08, 0.4198823597220e+00, 0.1451108196653e+00,
+      0.3356142784950e-08, 0.5609144747180e+01, 0.1274714967946e+00,
+      0.4070575554551e-08, 0.7028411059224e+00, 0.3503323232942e+00,
+      0.3257451857278e-08, 0.5624697983086e+01, 0.5296435984654e+00,
+      0.3256973703026e-08, 0.1857842076707e+01, 0.5297383457582e+00,
+      0.3830771508640e-08, 0.4562887279931e+01, 0.9098186128426e+00,
+      0.3725024005962e-08, 0.2358058692652e+00, 0.1084620721060e+00,
+      0.3136763921756e-08, 0.2049731526845e+01, 0.2346394437820e+00,
+      0.3795147256194e-08, 0.2432356296933e+00, 0.1862120789403e+00,
+      0.2877342229911e-08, 0.5631101279387e+01, 0.1905464808669e+01,
+
+      0.3076931798805e-08, 0.1117615737392e+01, 0.3628624111593e+00,
+      0.2734765945273e-08, 0.5899826516955e+01, 0.2131850110243e+00,
+      0.2733405296885e-08, 0.2130562964070e+01, 0.2134131485323e+00,
+      0.2898552353410e-08, 0.3462387048225e+00, 0.5291709230214e+00,
+      0.2893736103681e-08, 0.8534352781543e+00, 0.5302110212022e+00,
+      0.3095717734137e-08, 0.2875061429041e+01, 0.2976424921901e+00,
+      0.2636190425832e-08, 0.2242512846659e+01, 0.1485980103780e+01,
+      0.3645512095537e-08, 0.1354016903958e+01, 0.6044726378023e+00,
+      0.2808173547723e-08, 0.6705114365631e-01, 0.6225157782540e-01,
+      0.2625012866888e-08, 0.4775705748482e+01, 0.5268983110410e-01,
+
+      0.2572233995651e-08, 0.2638924216139e+01, 0.1258454114666e+01,
+      0.2604238824792e-08, 0.4826358927373e+01, 0.2103781122809e+00,
+      0.2596886385239e-08, 0.3200388483118e+01, 0.2162200472757e+00,
+      0.3228057304264e-08, 0.5384848409563e+01, 0.2007689919132e+00,
+      0.2481601798252e-08, 0.5173373487744e+01, 0.1062562936266e+01,
+      0.2745977498864e-08, 0.6250966149853e+01, 0.5651155736444e+00,
+      0.2669878833811e-08, 0.4906001352499e+01, 0.1400015846597e+00,
+      0.3203986611711e-08, 0.5034333010005e+01, 0.7036329877322e+00,
+      0.3354961227212e-08, 0.6108262423137e+01, 0.4549093064213e+00,
+      0.2400407324558e-08, 0.2135399294955e+01, 0.2125476091956e+00,
+
+      0.2379905859802e-08, 0.5893721933961e+01, 0.2140505503610e+00,
+      0.2550844302187e-08, 0.3331940762063e+01, 0.1534957940063e+00,
+      0.2268824211001e-08, 0.1843418461035e+01, 0.2235935264888e+00,
+      0.2464700891204e-08, 0.3029548547230e+01, 0.2091065926078e+00,
+      0.2436814726024e-08, 0.4994717970364e+01, 0.2174915669488e+00,
+      0.2443623894745e-08, 0.2645102591375e+01, 0.1739420156204e+00,
+      0.2318701783838e-08, 0.5700547397897e+01, 0.7530171478090e-01,
+      0.2284448700256e-08, 0.5268898905872e+01, 0.7426161660010e-01,
+      0.2468848123510e-08, 0.5276280575078e+01, 0.2526561439362e+00,
+      0.2814052350303e-08, 0.6130168623475e+01, 0.5636314030725e+00,
+
+      0.2243662755220e-08, 0.6631692457995e+00, 0.8886590321940e-01,
+      0.2330795855941e-08, 0.2499435487702e+01, 0.1056200952181e+01,
+      0.9757679038404e-09, 0.5796846023126e+01, 0.7826370942180e+02 };
+
+/* SSB-to-Sun, T^0, Z */
+   static const double s0z[] = {
+      0.1181255122986e-03, 0.4607918989164e+00, 0.2132990797783e+00,
+      0.1127777651095e-03, 0.4169146331296e+00, 0.5296909721118e+00,
+      0.4777754401806e-04, 0.4582657007130e+01, 0.3813291813120e-01,
+      0.1129354285772e-04, 0.5758735142480e+01, 0.7478166569050e-01,
+     -0.1149543637123e-04, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.3298730512306e-05, 0.5978801994625e+01, 0.4265981595566e+00,
+      0.2733376706079e-05, 0.7665413691040e+00, 0.1059381944224e+01,
+      0.9426389657270e-06, 0.3710201265838e+01, 0.2061856251104e+00,
+      0.8187517749552e-06, 0.3390675605802e+00, 0.2204125344462e+00,
+      0.4080447871819e-06, 0.4552296640088e+00, 0.5225775174439e+00,
+
+      0.3169973017028e-06, 0.3445455899321e+01, 0.5368044267797e+00,
+      0.2438098615549e-06, 0.5664675150648e+01, 0.3664874755930e-01,
+      0.2601897517235e-06, 0.1931894095697e+01, 0.1495633313810e+00,
+      0.2314558080079e-06, 0.3666319115574e+00, 0.3961708870310e-01,
+      0.1962549548002e-06, 0.3167411699020e+01, 0.7626583626240e-01,
+      0.2180518287925e-06, 0.1544420746580e+01, 0.7113454667900e-02,
+      0.1451382442868e-06, 0.1583756740070e+01, 0.1102062672231e+00,
+      0.1358439007389e-06, 0.5239941758280e+01, 0.6398972393349e+00,
+      0.1050585898028e-06, 0.2266958352859e+01, 0.3163918923335e+00,
+      0.1050029870186e-06, 0.2711495250354e+01, 0.4194847048887e+00,
+
+      0.9934920679800e-07, 0.1116208151396e+01, 0.1589072916335e+01,
+      0.1048395331560e-06, 0.3408619600206e+01, 0.1021328554739e+02,
+      0.8370147196668e-07, 0.3810459401087e+01, 0.2535050500000e-01,
+      0.7989856510998e-07, 0.3769910473647e+01, 0.7329749511860e-01,
+      0.5441221655233e-07, 0.2416994903374e+01, 0.1030928125552e+00,
+      0.4610812906784e-07, 0.5858503336994e+01, 0.4337116142245e+00,
+      0.3923022803444e-07, 0.3354170010125e+00, 0.1484170571900e-02,
+      0.2610725582128e-07, 0.5410600646324e+01, 0.6327837846670e+00,
+      0.2455279767721e-07, 0.6120216681403e+01, 0.1162474756779e+01,
+      0.2375530706525e-07, 0.6055443426143e+01, 0.1052268489556e+01,
+
+      0.1782967577553e-07, 0.3146108708004e+01, 0.8460828644453e+00,
+      0.1581687095238e-07, 0.6255496089819e+00, 0.3340612434717e+01,
+      0.1594657672461e-07, 0.3782604300261e+01, 0.1066495398892e+01,
+      0.1563448615040e-07, 0.1997775733196e+01, 0.2022531624851e+00,
+      0.1463624258525e-07, 0.1736316792088e+00, 0.3516457698740e-01,
+      0.1331585056673e-07, 0.4331941830747e+01, 0.9491756770005e+00,
+      0.1130634557637e-07, 0.6152017751825e+01, 0.2968341143800e-02,
+      0.1028949607145e-07, 0.2101792614637e+00, 0.2275259891141e+00,
+      0.1024074971618e-07, 0.4071833211074e+01, 0.5070101000000e-01,
+      0.8826956060303e-08, 0.4861633688145e+00, 0.2093666171530e+00,
+
+      0.8572230171541e-08, 0.5268190724302e+01, 0.4110125927500e-01,
+      0.7649332643544e-08, 0.5134543417106e+01, 0.2608790314060e+02,
+      0.8581673291033e-08, 0.2920218146681e+01, 0.1480791608091e+00,
+      0.8430589300938e-08, 0.3604576619108e+01, 0.2172315424036e+00,
+      0.7776165501012e-08, 0.3772942249792e+01, 0.6373574839730e-01,
+      0.8311070234408e-08, 0.6200412329888e+01, 0.3235053470014e+00,
+      0.6927365212582e-08, 0.4543353113437e+01, 0.8531963191132e+00,
+      0.6791574208598e-08, 0.2882188406238e+01, 0.7181332454670e-01,
+      0.5593100811839e-08, 0.1776646892780e+01, 0.7429900518901e+00,
+      0.4553381853021e-08, 0.3949617611240e+01, 0.7775000683430e-01,
+
+      0.5758000450068e-08, 0.3859251775075e+01, 0.1990721704425e+00,
+      0.4281283457133e-08, 0.1466294631206e+01, 0.2118763888447e+01,
+      0.4206935661097e-08, 0.5421776011706e+01, 0.1104591729320e-01,
+      0.4213751641837e-08, 0.3412048993322e+01, 0.2243449970715e+00,
+      0.5310506239878e-08, 0.5421641370995e+00, 0.5154640627760e+00,
+      0.3827450341320e-08, 0.8887314524995e+00, 0.1510475019529e+00,
+      0.4292435241187e-08, 0.1405043757194e+01, 0.1422690933580e-01,
+      0.3189780702289e-08, 0.1060049293445e+01, 0.1173197218910e+00,
+      0.3226611928069e-08, 0.6270858897442e+01, 0.2164800718209e+00,
+      0.2893897608830e-08, 0.5117563223301e+01, 0.6470106940028e+00,
+
+      0.3239852024578e-08, 0.4079092237983e+01, 0.2101180877357e+00,
+      0.2956892222200e-08, 0.1594917021704e+01, 0.3092784376656e+00,
+      0.2980177912437e-08, 0.5258787667564e+01, 0.4155522422634e+00,
+      0.3163725690776e-08, 0.3854589225479e+01, 0.8582758298370e-01,
+      0.2662262399118e-08, 0.3561326430187e+01, 0.5257585094865e+00,
+      0.2766689135729e-08, 0.3180732086830e+00, 0.1385174140878e+00,
+      0.2411600278464e-08, 0.3324798335058e+01, 0.5439178814476e+00,
+      0.2483527695131e-08, 0.4169069291947e+00, 0.5336234347371e+00,
+      0.7788777276590e-09, 0.1900569908215e+01, 0.5217580628120e+02 };
+
+/* SSB-to-Sun, T^1, X */
+   static const double s1x[] = {
+     -0.1296310361520e-07, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.8975769009438e-08, 0.1128891609250e+01, 0.4265981595566e+00,
+      0.7771113441307e-08, 0.2706039877077e+01, 0.2061856251104e+00,
+      0.7538303866642e-08, 0.2191281289498e+01, 0.2204125344462e+00,
+      0.6061384579336e-08, 0.3248167319958e+01, 0.1059381944224e+01,
+      0.5726994235594e-08, 0.5569981398610e+01, 0.5225775174439e+00,
+      0.5616492836424e-08, 0.5057386614909e+01, 0.5368044267797e+00,
+      0.1010881584769e-08, 0.3473577116095e+01, 0.7113454667900e-02,
+      0.7259606157626e-09, 0.3651858593665e+00, 0.6398972393349e+00,
+      0.8755095026935e-09, 0.1662835408338e+01, 0.4194847048887e+00,
+
+      0.5370491182812e-09, 0.1327673878077e+01, 0.4337116142245e+00,
+      0.5743773887665e-09, 0.4250200846687e+01, 0.2132990797783e+00,
+      0.4408103140300e-09, 0.3598752574277e+01, 0.1589072916335e+01,
+      0.3101892374445e-09, 0.4887822983319e+01, 0.1052268489556e+01,
+      0.3209453713578e-09, 0.9702272295114e+00, 0.5296909721118e+00,
+      0.3017228286064e-09, 0.5484462275949e+01, 0.1066495398892e+01,
+      0.3200700038601e-09, 0.2846613338643e+01, 0.1495633313810e+00,
+      0.2137637279911e-09, 0.5692163292729e+00, 0.3163918923335e+00,
+      0.1899686386727e-09, 0.2061077157189e+01, 0.2275259891141e+00,
+      0.1401994545308e-09, 0.4177771136967e+01, 0.1102062672231e+00,
+
+      0.1578057810499e-09, 0.5782460597335e+01, 0.7626583626240e-01,
+      0.1237713253351e-09, 0.5705900866881e+01, 0.5154640627760e+00,
+      0.1313076837395e-09, 0.5163438179576e+01, 0.3664874755930e-01,
+      0.1184963304860e-09, 0.3054804427242e+01, 0.6327837846670e+00,
+      0.1238130878565e-09, 0.2317292575962e+01, 0.3961708870310e-01,
+      0.1015959527736e-09, 0.2194643645526e+01, 0.7329749511860e-01,
+      0.9017954423714e-10, 0.2868603545435e+01, 0.1990721704425e+00,
+      0.8668024955603e-10, 0.4923849675082e+01, 0.5439178814476e+00,
+      0.7756083930103e-10, 0.3014334135200e+01, 0.9491756770005e+00,
+      0.7536503401741e-10, 0.2704886279769e+01, 0.1030928125552e+00,
+
+      0.5483308679332e-10, 0.6010983673799e+01, 0.8531963191132e+00,
+      0.5184339620428e-10, 0.1952704573291e+01, 0.2093666171530e+00,
+      0.5108658712030e-10, 0.2958575786649e+01, 0.2172315424036e+00,
+      0.5019424524650e-10, 0.1736317621318e+01, 0.2164800718209e+00,
+      0.4909312625978e-10, 0.3167216416257e+01, 0.2101180877357e+00,
+      0.4456638901107e-10, 0.7697579923471e+00, 0.3235053470014e+00,
+      0.4227030350925e-10, 0.3490910137928e+01, 0.6373574839730e-01,
+      0.4095456040093e-10, 0.5178888984491e+00, 0.6470106940028e+00,
+      0.4990537041422e-10, 0.3323887668974e+01, 0.1422690933580e-01,
+      0.4321170010845e-10, 0.4288484987118e+01, 0.7358765972222e+00,
+
+      0.3544072091802e-10, 0.6021051579251e+01, 0.5265099800692e+00,
+      0.3480198638687e-10, 0.4600027054714e+01, 0.5328719641544e+00,
+      0.3440287244435e-10, 0.4349525970742e+01, 0.8582758298370e-01,
+      0.3330628322713e-10, 0.2347391505082e+01, 0.1104591729320e-01,
+      0.2973060707184e-10, 0.4789409286400e+01, 0.5257585094865e+00,
+      0.2932606766089e-10, 0.5831693799927e+01, 0.5336234347371e+00,
+      0.2876972310953e-10, 0.2692638514771e+01, 0.1173197218910e+00,
+      0.2827488278556e-10, 0.2056052487960e+01, 0.2022531624851e+00,
+      0.2515028239756e-10, 0.7411863262449e+00, 0.9597935788730e-01,
+      0.2853033744415e-10, 0.3948481024894e+01, 0.2118763888447e+01 };
+
+/* SSB-to-Sun, T^1, Y */
+   static const double s1y[] = {
+      0.8989047573576e-08, 0.5840593672122e+01, 0.4265981595566e+00,
+      0.7815938401048e-08, 0.1129664707133e+01, 0.2061856251104e+00,
+      0.7550926713280e-08, 0.6196589104845e+00, 0.2204125344462e+00,
+      0.6056556925895e-08, 0.1677494667846e+01, 0.1059381944224e+01,
+      0.5734142698204e-08, 0.4000920852962e+01, 0.5225775174439e+00,
+      0.5614341822459e-08, 0.3486722577328e+01, 0.5368044267797e+00,
+      0.1028678147656e-08, 0.1877141024787e+01, 0.7113454667900e-02,
+      0.7270792075266e-09, 0.5077167301739e+01, 0.6398972393349e+00,
+      0.8734141726040e-09, 0.9069550282609e-01, 0.4194847048887e+00,
+      0.5377371402113e-09, 0.6039381844671e+01, 0.4337116142245e+00,
+
+      0.4729719431571e-09, 0.2153086311760e+01, 0.2132990797783e+00,
+      0.4458052820973e-09, 0.5059830025565e+01, 0.5296909721118e+00,
+      0.4406855467908e-09, 0.2027971692630e+01, 0.1589072916335e+01,
+      0.3101659310977e-09, 0.3317677981860e+01, 0.1052268489556e+01,
+      0.3016749232545e-09, 0.3913703482532e+01, 0.1066495398892e+01,
+      0.3198541352656e-09, 0.1275513098525e+01, 0.1495633313810e+00,
+      0.2142065389871e-09, 0.5301351614597e+01, 0.3163918923335e+00,
+      0.1902615247592e-09, 0.4894943352736e+00, 0.2275259891141e+00,
+      0.1613410990871e-09, 0.2449891130437e+01, 0.1102062672231e+00,
+      0.1576992165097e-09, 0.4211421447633e+01, 0.7626583626240e-01,
+
+      0.1241637259894e-09, 0.4140803368133e+01, 0.5154640627760e+00,
+      0.1313974830355e-09, 0.3591920305503e+01, 0.3664874755930e-01,
+      0.1181697118258e-09, 0.1506314382788e+01, 0.6327837846670e+00,
+      0.1238239742779e-09, 0.7461405378404e+00, 0.3961708870310e-01,
+      0.1010107068241e-09, 0.6271010795475e+00, 0.7329749511860e-01,
+      0.9226316616509e-10, 0.1259158839583e+01, 0.1990721704425e+00,
+      0.8664946419555e-10, 0.3353244696934e+01, 0.5439178814476e+00,
+      0.7757230468978e-10, 0.1447677295196e+01, 0.9491756770005e+00,
+      0.7693168628139e-10, 0.1120509896721e+01, 0.1030928125552e+00,
+      0.5487897454612e-10, 0.4439380426795e+01, 0.8531963191132e+00,
+
+      0.5196118677218e-10, 0.3788856619137e+00, 0.2093666171530e+00,
+      0.5110853339935e-10, 0.1386879372016e+01, 0.2172315424036e+00,
+      0.5027804534813e-10, 0.1647881805466e+00, 0.2164800718209e+00,
+      0.4922485922674e-10, 0.1594315079862e+01, 0.2101180877357e+00,
+      0.6155599524400e-10, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.4447147832161e-10, 0.5480720918976e+01, 0.3235053470014e+00,
+      0.4144691276422e-10, 0.1931371033660e+01, 0.6373574839730e-01,
+      0.4099950625452e-10, 0.5229611294335e+01, 0.6470106940028e+00,
+      0.5060541682953e-10, 0.1731112486298e+01, 0.1422690933580e-01,
+      0.4293615946300e-10, 0.2714571038925e+01, 0.7358765972222e+00,
+
+      0.3545659845763e-10, 0.4451041444634e+01, 0.5265099800692e+00,
+      0.3479112041196e-10, 0.3029385448081e+01, 0.5328719641544e+00,
+      0.3438516493570e-10, 0.2778507143731e+01, 0.8582758298370e-01,
+      0.3297341285033e-10, 0.7898709807584e+00, 0.1104591729320e-01,
+      0.2972585818015e-10, 0.3218785316973e+01, 0.5257585094865e+00,
+      0.2931707295017e-10, 0.4260731012098e+01, 0.5336234347371e+00,
+      0.2897198149403e-10, 0.1120753978101e+01, 0.1173197218910e+00,
+      0.2832293240878e-10, 0.4597682717827e+00, 0.2022531624851e+00,
+      0.2864348326612e-10, 0.2169939928448e+01, 0.9597935788730e-01,
+      0.2852714675471e-10, 0.2377659870578e+01, 0.2118763888447e+01 };
+
+/* SSB-to-Sun, T^1, Z */
+   static const double s1z[] = {
+      0.5444220475678e-08, 0.1803825509310e+01, 0.2132990797783e+00,
+      0.3883412695596e-08, 0.4668616389392e+01, 0.5296909721118e+00,
+      0.1334341434551e-08, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.3730001266883e-09, 0.5401405918943e+01, 0.2061856251104e+00,
+      0.2894929197956e-09, 0.4932415609852e+01, 0.2204125344462e+00,
+      0.2857950357701e-09, 0.3154625362131e+01, 0.7478166569050e-01,
+      0.2499226432292e-09, 0.3657486128988e+01, 0.4265981595566e+00,
+      0.1937705443593e-09, 0.5740434679002e+01, 0.1059381944224e+01,
+      0.1374894396320e-09, 0.1712857366891e+01, 0.5368044267797e+00,
+      0.1217248678408e-09, 0.2312090870932e+01, 0.5225775174439e+00,
+
+      0.7961052740870e-10, 0.5283368554163e+01, 0.3813291813120e-01,
+      0.4979225949689e-10, 0.4298290471860e+01, 0.4194847048887e+00,
+      0.4388552286597e-10, 0.6145515047406e+01, 0.7113454667900e-02,
+      0.2586835212560e-10, 0.3019448001809e+01, 0.6398972393349e+00 };
+
+/* SSB-to-Sun, T^2, X */
+   static const double s2x[] = {
+      0.1603551636587e-11, 0.4404109410481e+01, 0.2061856251104e+00,
+      0.1556935889384e-11, 0.4818040873603e+00, 0.2204125344462e+00,
+      0.1182594414915e-11, 0.9935762734472e+00, 0.5225775174439e+00,
+      0.1158794583180e-11, 0.3353180966450e+01, 0.5368044267797e+00,
+      0.9597358943932e-12, 0.5567045358298e+01, 0.2132990797783e+00,
+      0.6511516579605e-12, 0.5630872420788e+01, 0.4265981595566e+00,
+      0.7419792747688e-12, 0.2156188581957e+01, 0.5296909721118e+00,
+      0.3951972655848e-12, 0.1981022541805e+01, 0.1059381944224e+01,
+      0.4478223877045e-12, 0.0000000000000e+00, 0.0000000000000e+00 };
+
+/* SSB-to-Sun, T^2, Y */
+   static const double s2y[] = {
+      0.1609114495091e-11, 0.2831096993481e+01, 0.2061856251104e+00,
+      0.1560330784946e-11, 0.5193058213906e+01, 0.2204125344462e+00,
+      0.1183535479202e-11, 0.5707003443890e+01, 0.5225775174439e+00,
+      0.1158183066182e-11, 0.1782400404928e+01, 0.5368044267797e+00,
+      0.1032868027407e-11, 0.4036925452011e+01, 0.2132990797783e+00,
+      0.6540142847741e-12, 0.4058241056717e+01, 0.4265981595566e+00,
+      0.7305236491596e-12, 0.6175401942957e+00, 0.5296909721118e+00,
+     -0.5580725052968e-12, 0.0000000000000e+00, 0.0000000000000e+00,
+      0.3946122651015e-12, 0.4108265279171e+00, 0.1059381944224e+01 };
+
+/* SSB-to-Sun, T^2, Z */
+   static const double s2z[] = {
+      0.3749920358054e-12, 0.3230285558668e+01, 0.2132990797783e+00,
+      0.2735037220939e-12, 0.6154322683046e+01, 0.5296909721118e+00 };
+
+/* Pointers to coefficient arrays, in x,y,z sets */
+   static const double *ce0[] = { e0x, e0y, e0z },
+                       *ce1[] = { e1x, e1y, e1z },
+                       *ce2[] = { e2x, e2y, e2z },
+                       *cs0[] = { s0x, s0y, s0z },
+                       *cs1[] = { s1x, s1y, s1z },
+                       *cs2[] = { s2x, s2y, s2z };
+   const double *coeffs;
+
+/* Numbers of terms for each component of the model, in x,y,z sets */
+   static const int ne0[3] = {(int)(sizeof e0x / sizeof (double) / 3),
+                              (int)(sizeof e0y / sizeof (double) / 3),
+                              (int)(sizeof e0z / sizeof (double) / 3) },
+                    ne1[3] = {(int)(sizeof e1x / sizeof (double) / 3),
+                              (int)(sizeof e1y / sizeof (double) / 3),
+                              (int)(sizeof e1z / sizeof (double) / 3) },
+                    ne2[3] = {(int)(sizeof e2x / sizeof (double) / 3),
+                              (int)(sizeof e2y / sizeof (double) / 3),
+                              (int)(sizeof e2z / sizeof (double) / 3) },
+                    ns0[3] = {(int)(sizeof s0x / sizeof (double) / 3),
+                              (int)(sizeof s0y / sizeof (double) / 3),
+                              (int)(sizeof s0z / sizeof (double) / 3) },
+                    ns1[3] = {(int)(sizeof s1x / sizeof (double) / 3),
+                              (int)(sizeof s1y / sizeof (double) / 3),
+                              (int)(sizeof s1z / sizeof (double) / 3) },
+                    ns2[3] = {(int)(sizeof s2x / sizeof (double) / 3),
+                              (int)(sizeof s2y / sizeof (double) / 3),
+                              (int)(sizeof s2z / sizeof (double) / 3) };
+   int nterms;
+
+/* Miscellaneous */
+   int jstat, i, j;
+   double t, t2, xyz, xyzd, a, b, c, ct, p, cp,
+          ph[3], vh[3], pb[3], vb[3], x, y, z;
+
+/*--------------------------------------------------------------------*/
+
+/* Time since reference epoch, Julian years. */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJY;
+   t2 = t*t;
+
+/* Set status. */
+   jstat = fabs(t) <= 100.0 ? 0 : 1;
+
+/* X then Y then Z. */
+   for (i = 0; i < 3; i++) {
+
+   /* Initialize position and velocity component. */
+      xyz = 0.0;
+      xyzd = 0.0;
+
+   /* ------------------------------------------------ */
+   /* Obtain component of Sun to Earth ecliptic vector */
+   /* ------------------------------------------------ */
+
+   /* Sun to Earth, T^0 terms. */
+      coeffs = ce0[i];
+      nterms = ne0[i];
+      for (j = 0; j < nterms; j++) {
+         a = *coeffs++;
+         b = *coeffs++;
+         c = *coeffs++;
+         p = b + c*t;
+         xyz  += a*cos(p);
+         xyzd -= a*c*sin(p);
+      }
+
+   /* Sun to Earth, T^1 terms. */
+      coeffs = ce1[i];
+      nterms = ne1[i];
+      for (j = 0; j < nterms; j++) {
+         a = *coeffs++;
+         b = *coeffs++;
+         c = *coeffs++;
+         ct = c*t;
+         p = b + ct;
+         cp = cos(p);
+         xyz  += a*t*cp;
+         xyzd += a*( cp - ct*sin(p) );
+      }
+
+   /* Sun to Earth, T^2 terms. */
+      coeffs = ce2[i];
+      nterms = ne2[i];
+      for (j = 0; j < nterms; j++) {
+         a = *coeffs++;
+         b = *coeffs++;
+         c = *coeffs++;
+         ct = c*t;
+         p = b + ct;
+         cp = cos(p);
+         xyz  += a*t2*cp;
+         xyzd += a*t*( 2.0*cp - ct*sin(p) );
+      }
+
+   /* Heliocentric Earth position and velocity component. */
+      ph[i] = xyz;
+      vh[i] = xyzd / ERFA_DJY;
+
+   /* ------------------------------------------------ */
+   /* Obtain component of SSB to Earth ecliptic vector */
+   /* ------------------------------------------------ */
+
+   /* SSB to Sun, T^0 terms. */
+      coeffs = cs0[i];
+      nterms = ns0[i];
+      for (j = 0; j < nterms; j++) {
+         a = *coeffs++;
+         b = *coeffs++;
+         c = *coeffs++;
+         p = b + c*t;
+         xyz  += a*cos(p);
+         xyzd -= a*c*sin(p);
+      }
+
+   /* SSB to Sun, T^1 terms. */
+      coeffs = cs1[i];
+      nterms = ns1[i];
+      for (j = 0; j < nterms; j++) {
+         a = *coeffs++;
+         b = *coeffs++;
+         c = *coeffs++;
+         ct = c*t;
+         p = b + ct;
+         cp = cos(p);
+         xyz  += a*t*cp;
+         xyzd += a*(cp - ct*sin(p));
+      }
+
+   /* SSB to Sun, T^2 terms. */
+      coeffs = cs2[i];
+      nterms = ns2[i];
+      for (j = 0; j < nterms; j++) {
+         a = *coeffs++;
+         b = *coeffs++;
+         c = *coeffs++;
+         ct = c*t;
+         p = b + ct;
+         cp = cos(p);
+         xyz  += a*t2*cp;
+         xyzd += a*t*(2.0*cp - ct*sin(p));
+     }
+
+   /* Barycentric Earth position and velocity component. */
+     pb[i] = xyz;
+     vb[i] = xyzd / ERFA_DJY;
+
+   /* Next Cartesian component. */
+   }
+
+/* Rotate from ecliptic to BCRS coordinates. */
+
+   x = ph[0];
+   y = ph[1];
+   z = ph[2];
+   pvh[0][0] =      x + am12*y + am13*z;
+   pvh[0][1] = am21*x + am22*y + am23*z;
+   pvh[0][2] =          am32*y + am33*z;
+
+   x = vh[0];
+   y = vh[1];
+   z = vh[2];
+   pvh[1][0] =      x + am12*y + am13*z;
+   pvh[1][1] = am21*x + am22*y + am23*z;
+   pvh[1][2] =          am32*y + am33*z;
+
+   x = pb[0];
+   y = pb[1];
+   z = pb[2];
+   pvb[0][0] =      x + am12*y + am13*z;
+   pvb[0][1] = am21*x + am22*y + am23*z;
+   pvb[0][2] =          am32*y + am33*z;
+
+   x = vb[0];
+   y = vb[1];
+   z = vb[2];
+   pvb[1][0] =      x + am12*y + am13*z;
+   pvb[1][1] = am21*x + am22*y + am23*z;
+   pvb[1][2] =          am32*y + am33*z;
+
+/* Return the status. */
+   return jstat;
+
+}
+
+double eraEqeq94(double date1, double date2)
+/*
+**  - - - - - - - - - -
+**   e r a E q e q 9 4
+**  - - - - - - - - - -
+**
+**  Equation of the equinoxes, IAU 1994 model.
+**
+**  Given:
+**     date1,date2   double     TDB date (Note 1)
+**
+**  Returned (function value):
+**                   double     equation of the equinoxes (Note 2)
+**
+**  Notes:
+**
+**  1) The date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The result, which is in radians, operates in the following sense:
+**
+**        Greenwich apparent ST = GMST + equation of the equinoxes
+**
+**  Called:
+**     eraNut80     nutation, IAU 1980
+**     eraObl80     mean obliquity, IAU 1980
+**
+**  References:
+**
+**     IAU Resolution C7, Recommendation 3 (1994).
+**
+**     Capitaine, N. & Gontier, A.-M., 1993, Astron. Astrophys., 275,
+**     645-650.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t,  om,  dpsi,  deps,  eps0, ee;
+
+
+/* Interval between fundamental epoch J2000.0 and given date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Longitude of the mean ascending node of the lunar orbit on the */
+/* ecliptic, measured from the mean equinox of date. */
+   om = eraAnpm((450160.280 + (-482890.539
+           + (7.455 + 0.008 * t) * t) * t) * ERFA_DAS2R
+           + fmod(-5.0 * t, 1.0) * ERFA_D2PI);
+
+/* Nutation components and mean obliquity. */
+   eraNut80(date1, date2, &dpsi, &deps);
+   eps0 = eraObl80(date1, date2);
+
+/* Equation of the equinoxes. */
+   ee = dpsi*cos(eps0) + ERFA_DAS2R*(0.00264*sin(om) + 0.000063*sin(om+om));
+
+   return ee;
+
+}
+
+double eraEra00(double dj1, double dj2)
+/*
+**  - - - - - - - - -
+**   e r a E r a 0 0
+**  - - - - - - - - -
+**
+**  Earth rotation angle (IAU 2000 model).
+**
+**  Given:
+**     dj1,dj2   double    UT1 as a 2-part Julian Date (see note)
+**
+**  Returned (function value):
+**               double    Earth rotation angle (radians), range 0-2pi
+**
+**  Notes:
+**
+**  1) The UT1 date dj1+dj2 is a Julian Date, apportioned in any
+**     convenient way between the arguments dj1 and dj2.  For example,
+**     JD(UT1)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**             dj1            dj2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  The date & time method is
+**     best matched to the algorithm used:  maximum precision is
+**     delivered when the dj1 argument is for 0hrs UT1 on the day in
+**     question and the dj2 argument lies in the range 0 to 1, or vice
+**     versa.
+**
+**  2) The algorithm is adapted from Expression 22 of Capitaine et al.
+**     2000.  The time argument has been expressed in days directly,
+**     and, to retain precision, integer contributions have been
+**     eliminated.  The same formulation is given in IERS Conventions
+**     (2003), Chap. 5, Eq. 14.
+**
+**  Called:
+**     eraAnp       normalize angle into range 0 to 2pi
+**
+**  References:
+**
+**     Capitaine N., Guinot B. and McCarthy D.D, 2000, Astron.
+**     Astrophys., 355, 398-405.
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double d1, d2, t, f, theta;
+
+
+/* Days since fundamental epoch. */
+   if (dj1 < dj2) {
+      d1 = dj1;
+      d2 = dj2;
+   } else {
+      d1 = dj2;
+      d2 = dj1;
+   }
+   t = d1 + (d2- ERFA_DJ00);
+
+/* Fractional part of T (days). */
+   f = fmod(d1, 1.0) + fmod(d2, 1.0);
+
+/* Earth rotation angle at this UT1. */
+   theta = eraAnp(ERFA_D2PI * (f + 0.7790572732640
+                            + 0.00273781191135448 * t));
+
+   return theta;
+
+}
+
+double eraFad03(double t)
+/*
+**  - - - - - - - - -
+**   e r a F a d 0 3
+**  - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean elongation of the Moon from the Sun.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    D, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     is from Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean elongation of the Moon from the Sun (IERS Conventions 2003). */
+   a = fmod(          1072260.703692 +
+             t * ( 1602961601.2090 +
+             t * (        - 6.3706 +
+             t * (          0.006593 +
+             t * (        - 0.00003169 ) ) ) ), ERFA_TURNAS ) * ERFA_DAS2R;
+
+   return a;
+
+}
+
+double eraFae03(double t)
+/*
+**  - - - - - - - - -
+**   e r a F a e 0 3
+**  - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean longitude of Earth.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    mean longitude of Earth, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     comes from Souchay et al. (1999) after Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
+**     Astron.Astrophys.Supp.Ser. 135, 111
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean longitude of Earth (IERS Conventions 2003). */
+   a = fmod(1.753470314 + 628.3075849991 * t, ERFA_D2PI);
+
+   return a;
+
+}
+
+double eraFaf03(double t)
+/*
+**  - - - - - - - - -
+**   e r a F a f 0 3
+**  - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean longitude of the Moon minus mean longitude of the ascending
+**  node.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    F, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     is from Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean longitude of the Moon minus that of the ascending node */
+/* (IERS Conventions 2003).                                    */
+   a = fmod(           335779.526232 +
+             t * ( 1739527262.8478 +
+             t * (       - 12.7512 +
+             t * (        - 0.001037 +
+             t * (          0.00000417 ) ) ) ), ERFA_TURNAS ) * ERFA_DAS2R;
+
+   return a;
+
+
+}
+
+double eraFaju03(double t)
+/*
+**  - - - - - - - - - -
+**   e r a F a j u 0 3
+**  - - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean longitude of Jupiter.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    mean longitude of Jupiter, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     comes from Souchay et al. (1999) after Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
+**     Astron.Astrophys.Supp.Ser. 135, 111
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean longitude of Jupiter (IERS Conventions 2003). */
+   a = fmod(0.599546497 + 52.9690962641 * t, ERFA_D2PI);
+
+   return a;
+
+}
+
+double eraFal03(double t)
+/*
+**  - - - - - - - - -
+**   e r a F a l 0 3
+**  - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean anomaly of the Moon.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    l, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     is from Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean anomaly of the Moon (IERS Conventions 2003). */
+   a = fmod(           485868.249036  +
+             t * ( 1717915923.2178 +
+             t * (         31.8792 +
+             t * (          0.051635 +
+             t * (        - 0.00024470 ) ) ) ), ERFA_TURNAS ) * ERFA_DAS2R;
+
+   return a;
+
+}
+
+double eraFalp03(double t)
+/*
+**  - - - - - - - - - -
+**   e r a F a l p 0 3
+**  - - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean anomaly of the Sun.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    l', radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     is from Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean anomaly of the Sun (IERS Conventions 2003). */
+   a = fmod(         1287104.793048 +
+             t * ( 129596581.0481 +
+             t * (       - 0.5532 +
+             t * (         0.000136 +
+             t * (       - 0.00001149 ) ) ) ), ERFA_TURNAS ) * ERFA_DAS2R;
+
+   return a;
+
+}
+
+double eraFama03(double t)
+/*
+**  - - - - - - - - - -
+**   e r a F a m a 0 3
+**  - - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean longitude of Mars.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    mean longitude of Mars, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     comes from Souchay et al. (1999) after Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
+**     Astron.Astrophys.Supp.Ser. 135, 111
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean longitude of Mars (IERS Conventions 2003). */
+   a = fmod(6.203480913 + 334.0612426700 * t, ERFA_D2PI);
+
+   return a;
+
+}
+
+double eraFame03(double t)
+/*
+**  - - - - - - - - - -
+**   e r a F a m e 0 3
+**  - - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean longitude of Mercury.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    mean longitude of Mercury, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     comes from Souchay et al. (1999) after Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
+**     Astron.Astrophys.Supp.Ser. 135, 111
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean longitude of Mercury (IERS Conventions 2003). */
+   a = fmod(4.402608842 + 2608.7903141574 * t, ERFA_D2PI);
+
+   return a;
+
+}
+
+double eraFane03(double t)
+/*
+**  - - - - - - - - - -
+**   e r a F a n e 0 3
+**  - - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean longitude of Neptune.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    mean longitude of Neptune, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     is adapted from Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean longitude of Neptune (IERS Conventions 2003). */
+   a = fmod(5.311886287 + 3.8133035638 * t, ERFA_D2PI);
+
+   return a;
+
+}
+
+double eraFaom03(double t)
+/*
+**  - - - - - - - - - -
+**   e r a F a o m 0 3
+**  - - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean longitude of the Moon's ascending node.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    Omega, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     is from Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean longitude of the Moon's ascending node */
+/* (IERS Conventions 2003).                    */
+   a = fmod(          450160.398036 +
+             t * ( - 6962890.5431 +
+             t * (         7.4722 +
+             t * (         0.007702 +
+             t * (       - 0.00005939 ) ) ) ), ERFA_TURNAS ) * ERFA_DAS2R;
+
+   return a;
+
+}
+
+double eraFapa03(double t)
+/*
+**  - - - - - - - - - -
+**   e r a F a p a 0 3
+**  - - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  general accumulated precession in longitude.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    general precession in longitude, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003).  It
+**     is taken from Kinoshita & Souchay (1990) and comes originally
+**     from Lieske et al. (1977).
+**
+**  References:
+**
+**     Kinoshita, H. and Souchay J. 1990, Celest.Mech. and Dyn.Astron.
+**     48, 187
+**
+**     Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977,
+**     Astron.Astrophys. 58, 1-16
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* General accumulated precession in longitude. */
+   a = (0.024381750 + 0.00000538691 * t) * t;
+
+   return a;
+
+}
+
+double eraFasa03(double t)
+/*
+**  - - - - - - - - - -
+**   e r a F a s a 0 3
+**  - - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean longitude of Saturn.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    mean longitude of Saturn, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     comes from Souchay et al. (1999) after Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
+**     Astron.Astrophys.Supp.Ser. 135, 111
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean longitude of Saturn (IERS Conventions 2003). */
+   a = fmod(0.874016757 + 21.3299104960 * t, ERFA_D2PI);
+
+   return a;
+
+}
+
+double eraFaur03(double t)
+/*
+**  - - - - - - - - - -
+**   e r a F a u r 0 3
+**  - - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean longitude of Uranus.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned  (function value):
+**           double    mean longitude of Uranus, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     is adapted from Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean longitude of Uranus (IERS Conventions 2003). */
+   a = fmod(5.481293872 + 7.4781598567 * t, ERFA_D2PI);
+
+   return a;
+
+}
+
+double eraFave03(double t)
+/*
+**  - - - - - - - - - -
+**   e r a F a v e 0 3
+**  - - - - - - - - - -
+**
+**  Fundamental argument, IERS Conventions (2003):
+**  mean longitude of Venus.
+**
+**  Given:
+**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
+**
+**  Returned (function value):
+**           double    mean longitude of Venus, radians (Note 2)
+**
+**  Notes:
+**
+**  1) Though t is strictly TDB, it is usually more convenient to use
+**     TT, which makes no significant difference.
+**
+**  2) The expression used is as adopted in IERS Conventions (2003) and
+**     comes from Souchay et al. (1999) after Simon et al. (1994).
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
+**     Astron.Astrophys.Supp.Ser. 135, 111
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double a;
+
+
+/* Mean longitude of Venus (IERS Conventions 2003). */
+   a = fmod(3.176146697 + 1021.3285546211 * t, ERFA_D2PI);
+
+   return a;
+
+}
+
+void eraFk52h(double r5, double d5,
+              double dr5, double dd5, double px5, double rv5,
+              double *rh, double *dh,
+              double *drh, double *ddh, double *pxh, double *rvh)
+/*
+**  - - - - - - - - -
+**   e r a F k 5 2 h
+**  - - - - - - - - -
+**
+**  Transform FK5 (J2000.0) star data into the Hipparcos system.
+**
+**  Given (all FK5, equinox J2000.0, epoch J2000.0):
+**     r5      double    RA (radians)
+**     d5      double    Dec (radians)
+**     dr5     double    proper motion in RA (dRA/dt, rad/Jyear)
+**     dd5     double    proper motion in Dec (dDec/dt, rad/Jyear)
+**     px5     double    parallax (arcsec)
+**     rv5     double    radial velocity (km/s, positive = receding)
+**
+**  Returned (all Hipparcos, epoch J2000.0):
+**     rh      double    RA (radians)
+**     dh      double    Dec (radians)
+**     drh     double    proper motion in RA (dRA/dt, rad/Jyear)
+**     ddh     double    proper motion in Dec (dDec/dt, rad/Jyear)
+**     pxh     double    parallax (arcsec)
+**     rvh     double    radial velocity (km/s, positive = receding)
+**
+**  Notes:
+**
+**  1) This function transforms FK5 star positions and proper motions
+**     into the system of the Hipparcos catalog.
+**
+**  2) The proper motions in RA are dRA/dt rather than
+**     cos(Dec)*dRA/dt, and are per year rather than per century.
+**
+**  3) The FK5 to Hipparcos transformation is modeled as a pure
+**     rotation and spin;  zonal errors in the FK5 catalog are not
+**     taken into account.
+**
+**  4) See also eraH2fk5, eraFk5hz, eraHfk5z.
+**
+**  Called:
+**     eraStarpv    star catalog data to space motion pv-vector
+**     eraFk5hip    FK5 to Hipparcos rotation and spin
+**     eraRxp       product of r-matrix and p-vector
+**     eraPxp       vector product of two p-vectors
+**     eraPpp       p-vector plus p-vector
+**     eraPvstar    space motion pv-vector to star catalog data
+**
+**  Reference:
+**
+**     F.Mignard & M.Froeschle, Astron. Astrophys. 354, 732-739 (2000).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int i;
+   double pv5[2][3], r5h[3][3], s5h[3], wxp[3], vv[3], pvh[2][3];
+
+
+/* FK5 barycentric position/velocity pv-vector (normalized). */
+   eraStarpv(r5, d5, dr5, dd5, px5, rv5, pv5);
+
+/* FK5 to Hipparcos orientation matrix and spin vector. */
+   eraFk5hip(r5h, s5h);
+
+/* Make spin units per day instead of per year. */
+   for ( i = 0; i < 3; s5h[i++] /= 365.25 );
+
+/* Orient the FK5 position into the Hipparcos system. */
+   eraRxp(r5h, pv5[0], pvh[0]);
+
+/* Apply spin to the position giving an extra space motion component. */
+   eraPxp(pv5[0], s5h, wxp);
+
+/* Add this component to the FK5 space motion. */
+   eraPpp(wxp, pv5[1], vv);
+
+/* Orient the FK5 space motion into the Hipparcos system. */
+   eraRxp(r5h, vv, pvh[1]);
+
+/* Hipparcos pv-vector to spherical. */
+   eraPvstar(pvh, rh, dh, drh, ddh, pxh, rvh);
+
+   return;
+
+}
+
+void eraFk5hip(double r5h[3][3], double s5h[3])
+/*
+**  - - - - - - - - - -
+**   e r a F k 5 h i p
+**  - - - - - - - - - -
+**
+**  FK5 to Hipparcos rotation and spin.
+**
+**  Returned:
+**     r5h   double[3][3]  r-matrix: FK5 rotation wrt Hipparcos (Note 2)
+**     s5h   double[3]     r-vector: FK5 spin wrt Hipparcos (Note 3)
+**
+**  Notes:
+**
+**  1) This function models the FK5 to Hipparcos transformation as a
+**     pure rotation and spin;  zonal errors in the FK5 catalogue are
+**     not taken into account.
+**
+**  2) The r-matrix r5h operates in the sense:
+**
+**           P_Hipparcos = r5h x P_FK5
+**
+**     where P_FK5 is a p-vector in the FK5 frame, and P_Hipparcos is
+**     the equivalent Hipparcos p-vector.
+**
+**  3) The r-vector s5h represents the time derivative of the FK5 to
+**     Hipparcos rotation.  The units are radians per year (Julian,
+**     TDB).
+**
+**  Called:
+**     eraRv2m      r-vector to r-matrix
+**
+**  Reference:
+**
+**     F.Mignard & M.Froeschle, Astron. Astrophys. 354, 732-739 (2000).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double v[3];
+
+/* FK5 wrt Hipparcos orientation and spin (radians, radians/year) */
+   double epx, epy, epz;
+   double omx, omy, omz;
+
+
+   epx = -19.9e-3 * ERFA_DAS2R;
+   epy =  -9.1e-3 * ERFA_DAS2R;
+   epz =  22.9e-3 * ERFA_DAS2R;
+
+   omx = -0.30e-3 * ERFA_DAS2R;
+   omy =  0.60e-3 * ERFA_DAS2R;
+   omz =  0.70e-3 * ERFA_DAS2R;
+
+/* FK5 to Hipparcos orientation expressed as an r-vector. */
+   v[0] = epx;
+   v[1] = epy;
+   v[2] = epz;
+
+/* Re-express as an r-matrix. */
+   eraRv2m(v, r5h);
+
+/* Hipparcos wrt FK5 spin expressed as an r-vector. */
+   s5h[0] = omx;
+   s5h[1] = omy;
+   s5h[2] = omz;
+
+   return;
+
+}
+
+void eraFk5hz(double r5, double d5, double date1, double date2,
+              double *rh, double *dh)
+/*
+**  - - - - - - - - -
+**   e r a F k 5 h z
+**  - - - - - - - - -
+**
+**  Transform an FK5 (J2000.0) star position into the system of the
+**  Hipparcos catalogue, assuming zero Hipparcos proper motion.
+**
+**  Given:
+**     r5           double   FK5 RA (radians), equinox J2000.0, at date
+**     d5           double   FK5 Dec (radians), equinox J2000.0, at date
+**     date1,date2  double   TDB date (Notes 1,2)
+**
+**  Returned:
+**     rh           double   Hipparcos RA (radians)
+**     dh           double   Hipparcos Dec (radians)
+**
+**  Notes:
+**
+**  1) This function converts a star position from the FK5 system to
+**     the Hipparcos system, in such a way that the Hipparcos proper
+**     motion is zero.  Because such a star has, in general, a non-zero
+**     proper motion in the FK5 system, the function requires the date
+**     at which the position in the FK5 system was determined.
+**
+**  2) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  3) The FK5 to Hipparcos transformation is modeled as a pure
+**     rotation and spin;  zonal errors in the FK5 catalogue are not
+**     taken into account.
+**
+**  4) The position returned by this function is in the Hipparcos
+**     reference system but at date date1+date2.
+**
+**  5) See also eraFk52h, eraH2fk5, eraHfk5z.
+**
+**  Called:
+**     eraS2c       spherical coordinates to unit vector
+**     eraFk5hip    FK5 to Hipparcos rotation and spin
+**     eraSxp       multiply p-vector by scalar
+**     eraRv2m      r-vector to r-matrix
+**     eraTrxp      product of transpose of r-matrix and p-vector
+**     eraPxp       vector product of two p-vectors
+**     eraC2s       p-vector to spherical
+**     eraAnp       normalize angle into range 0 to 2pi
+**
+**  Reference:
+**
+**     F.Mignard & M.Froeschle, 2000, Astron.Astrophys. 354, 732-739.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t, p5e[3], r5h[3][3], s5h[3], vst[3], rst[3][3], p5[3],
+          ph[3], w;
+
+
+/* Interval from given date to fundamental epoch J2000.0 (JY). */
+   t = - ((date1 - ERFA_DJ00) + date2) / ERFA_DJY;
+
+/* FK5 barycentric position vector. */
+   eraS2c(r5, d5, p5e);
+
+/* FK5 to Hipparcos orientation matrix and spin vector. */
+   eraFk5hip(r5h, s5h);
+
+/* Accumulated Hipparcos wrt FK5 spin over that interval. */
+   eraSxp(t, s5h, vst);
+
+/* Express the accumulated spin as a rotation matrix. */
+   eraRv2m(vst, rst);
+
+/* Derotate the vector's FK5 axes back to date. */
+   eraTrxp(rst, p5e, p5);
+
+/* Rotate the vector into the Hipparcos system. */
+   eraRxp(r5h, p5, ph);
+
+/* Hipparcos vector to spherical. */
+   eraC2s(ph, &w, dh);
+   *rh = eraAnp(w);
+
+   return;
+
+}
+
+void eraFw2m(double gamb, double phib, double psi, double eps,
+             double r[3][3])
+/*
+**  - - - - - - - -
+**   e r a F w 2 m
+**  - - - - - - - -
+**
+**  Form rotation matrix given the Fukushima-Williams angles.
+**
+**  Given:
+**     gamb     double         F-W angle gamma_bar (radians)
+**     phib     double         F-W angle phi_bar (radians)
+**     psi      double         F-W angle psi (radians)
+**     eps      double         F-W angle epsilon (radians)
+**
+**  Returned:
+**     r        double[3][3]   rotation matrix
+**
+**  Notes:
+**
+**  1) Naming the following points:
+**
+**           e = J2000.0 ecliptic pole,
+**           p = GCRS pole,
+**           E = ecliptic pole of date,
+**     and   P = CIP,
+**
+**     the four Fukushima-Williams angles are as follows:
+**
+**        gamb = gamma = epE
+**        phib = phi = pE
+**        psi = psi = pEP
+**        eps = epsilon = EP
+**
+**  2) The matrix representing the combined effects of frame bias,
+**     precession and nutation is:
+**
+**        NxPxB = R_1(-eps).R_3(-psi).R_1(phib).R_3(gamb)
+**
+**  3) Three different matrices can be constructed, depending on the
+**     supplied angles:
+**
+**     o  To obtain the nutation x precession x frame bias matrix,
+**        generate the four precession angles, generate the nutation
+**        components and add them to the psi_bar and epsilon_A angles,
+**        and call the present function.
+**
+**     o  To obtain the precession x frame bias matrix, generate the
+**        four precession angles and call the present function.
+**
+**     o  To obtain the frame bias matrix, generate the four precession
+**        angles for date J2000.0 and call the present function.
+**
+**     The nutation-only and precession-only matrices can if necessary
+**     be obtained by combining these three appropriately.
+**
+**  Called:
+**     eraIr        initialize r-matrix to identity
+**     eraRz        rotate around Z-axis
+**     eraRx        rotate around X-axis
+**
+**  Reference:
+**
+**     Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Construct the matrix. */
+   eraIr(r);
+   eraRz(gamb, r);
+   eraRx(phib, r);
+   eraRz(-psi, r);
+   eraRx(-eps, r);
+
+   return;
+
+}
+
+void eraFw2xy(double gamb, double phib, double psi, double eps,
+              double *x, double *y)
+/*
+**  - - - - - - - - -
+**   e r a F w 2 x y
+**  - - - - - - - - -
+**
+**  CIP X,Y given Fukushima-Williams bias-precession-nutation angles.
+**
+**  Given:
+**     gamb     double    F-W angle gamma_bar (radians)
+**     phib     double    F-W angle phi_bar (radians)
+**     psi      double    F-W angle psi (radians)
+**     eps      double    F-W angle epsilon (radians)
+**
+**  Returned:
+**     x,y      double    CIP X,Y ("radians")
+**
+**  Notes:
+**
+**  1) Naming the following points:
+**
+**           e = J2000.0 ecliptic pole,
+**           p = GCRS pole
+**           E = ecliptic pole of date,
+**     and   P = CIP,
+**
+**     the four Fukushima-Williams angles are as follows:
+**
+**        gamb = gamma = epE
+**        phib = phi = pE
+**        psi = psi = pEP
+**        eps = epsilon = EP
+**
+**  2) The matrix representing the combined effects of frame bias,
+**     precession and nutation is:
+**
+**        NxPxB = R_1(-epsA).R_3(-psi).R_1(phib).R_3(gamb)
+**
+**     X,Y are elements (3,1) and (3,2) of the matrix.
+**
+**  Called:
+**     eraFw2m      F-W angles to r-matrix
+**     eraBpn2xy    extract CIP X,Y coordinates from NPB matrix
+**
+**  Reference:
+**
+**     Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double r[3][3];
+
+
+/* Form NxPxB matrix. */
+   eraFw2m(gamb, phib, psi, eps, r);
+
+/* Extract CIP X,Y. */
+   eraBpn2xy(r, x, y);
+
+   return;
+
+}
+
+int eraGc2gd ( int n, double xyz[3],
+               double *elong, double *phi, double *height )
+/*
+**  - - - - - - - - -
+**   e r a G c 2 g d
+**  - - - - - - - - -
+**
+**  Transform geocentric coordinates to geodetic using the specified
+**  reference ellipsoid.
+**
+**  Given:
+**     n       int        ellipsoid identifier (Note 1)
+**     xyz     double[3]  geocentric vector (Note 2)
+**
+**  Returned:
+**     elong   double     longitude (radians, east +ve)
+**     phi     double     latitude (geodetic, radians, Note 3)
+**     height  double     height above ellipsoid (geodetic, Notes 2,3)
+**
+**  Returned (function value):
+**            int         status:  0 = OK
+**                                -1 = illegal identifier (Note 3)
+**                                -2 = internal error (Note 3)
+**
+**  Notes:
+**
+**  1) The identifier n is a number that specifies the choice of
+**     reference ellipsoid.  The following are supported:
+**
+**        n    ellipsoid
+**
+**        1     ERFA_WGS84
+**        2     ERFA_GRS80
+**        3     ERFA_WGS72
+**
+**     The n value has no significance outside the ERFA software.  For
+**     convenience, symbols ERFA_WGS84 etc. are defined in erfam.h.
+**
+**  2) The geocentric vector (xyz, given) and height (height, returned)
+**     are in meters.
+**
+**  3) An error status -1 means that the identifier n is illegal.  An
+**     error status -2 is theoretically impossible.  In all error cases,
+**     phi and height are both set to -1e9.
+**
+**  4) The inverse transformation is performed in the function eraGd2gc.
+**
+**  Called:
+**     eraEform     Earth reference ellipsoids
+**     eraGc2gde    geocentric to geodetic transformation, general
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int j;
+   double a, f;
+
+
+/* Obtain reference ellipsoid parameters. */
+   j = eraEform ( n, &a, &f );
+
+/* If OK, transform x,y,z to longitude, geodetic latitude, height. */
+   if ( j == 0 ) {
+      j = eraGc2gde ( a, f, xyz, elong, phi, height );
+      if ( j < 0 ) j = -2;
+   }
+
+/* Deal with any errors. */
+   if ( j < 0 ) {
+      *phi = -1e9;
+      *height = -1e9;
+   }
+
+/* Return the status. */
+   return j;
+
+}
+
+int eraGc2gde ( double a, double f, double xyz[3],
+                double *elong, double *phi, double *height )
+/*
+**  - - - - - - - - - -
+**   e r a G c 2 g d e
+**  - - - - - - - - - -
+**
+**  Transform geocentric coordinates to geodetic for a reference
+**  ellipsoid of specified form.
+**
+**  Given:
+**     a       double     equatorial radius (Notes 2,4)
+**     f       double     flattening (Note 3)
+**     xyz     double[3]  geocentric vector (Note 4)
+**
+**  Returned:
+**     elong   double     longitude (radians, east +ve)
+**     phi     double     latitude (geodetic, radians)
+**     height  double     height above ellipsoid (geodetic, Note 4)
+**
+**  Returned (function value):
+**             int        status:  0 = OK
+**                                -1 = illegal f
+**                                -2 = illegal a
+**
+**  Notes:
+**
+**  1) This function is based on the GCONV2H Fortran subroutine by
+**     Toshio Fukushima (see reference).
+**
+**  2) The equatorial radius, a, can be in any units, but meters is
+**     the conventional choice.
+**
+**  3) The flattening, f, is (for the Earth) a value around 0.00335,
+**     i.e. around 1/298.
+**
+**  4) The equatorial radius, a, and the geocentric vector, xyz,
+**     must be given in the same units, and determine the units of
+**     the returned height, height.
+**
+**  5) If an error occurs (status < 0), elong, phi and height are
+**     unchanged.
+**
+**  6) The inverse transformation is performed in the function
+**     eraGd2gce.
+**
+**  7) The transformation for a standard ellipsoid (such as ERFA_WGS84) can
+**     more conveniently be performed by calling eraGc2gd, which uses a
+**     numerical code to identify the required A and F values.
+**
+**  Reference:
+**
+**     Fukushima, T., "Transformation from Cartesian to geodetic
+**     coordinates accelerated by Halley's method", J.Geodesy (2006)
+**     79: 689-693
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double aeps2, e2, e4t, ec2, ec, b, x, y, z, p2, absz, p, s0, pn, zc,
+                 c0, c02, c03, s02, s03, a02, a0, a03, d0, f0, b0, s1,
+                 cc, s12, cc2;
+
+
+/* ------------- */
+/* Preliminaries */
+/* ------------- */
+
+/* Validate ellipsoid parameters. */
+   if ( f < 0.0 || f >= 1.0 ) return -1;
+   if ( a <= 0.0 ) return -2;
+
+/* Functions of ellipsoid parameters (with further validation of f). */
+   aeps2 = a*a * 1e-32;
+   e2 = (2.0 - f) * f;
+   e4t = e2*e2 * 1.5;
+   ec2 = 1.0 - e2;
+   if ( ec2 <= 0.0 ) return -1;
+   ec = sqrt(ec2);
+   b = a * ec;
+
+/* Cartesian components. */
+   x = xyz[0];
+   y = xyz[1];
+   z = xyz[2];
+
+/* Distance from polar axis squared. */
+   p2 = x*x + y*y;
+
+/* Longitude. */
+   *elong = p2 != 0.0 ? atan2(y, x) : 0.0;
+
+/* Unsigned z-coordinate. */
+   absz = fabs(z);
+
+/* Proceed unless polar case. */
+   if ( p2 > aeps2 ) {
+
+   /* Distance from polar axis. */
+      p = sqrt(p2);
+
+   /* Normalization. */
+      s0 = absz / a;
+      pn = p / a;
+      zc = ec * s0;
+
+   /* Prepare Newton correction factors. */
+      c0 = ec * pn;
+      c02 = c0 * c0;
+      c03 = c02 * c0;
+      s02 = s0 * s0;
+      s03 = s02 * s0;
+      a02 = c02 + s02;
+      a0 = sqrt(a02);
+      a03 = a02 * a0;
+      d0 = zc*a03 + e2*s03;
+      f0 = pn*a03 - e2*c03;
+
+   /* Prepare Halley correction factor. */
+      b0 = e4t * s02 * c02 * pn * (a0 - ec);
+      s1 = d0*f0 - b0*s0;
+      cc = ec * (f0*f0 - b0*c0);
+
+   /* Evaluate latitude and height. */
+      *phi = atan(s1/cc);
+      s12 = s1 * s1;
+      cc2 = cc * cc;
+      *height = (p*cc + absz*s1 - a * sqrt(ec2*s12 + cc2)) /
+                                                        sqrt(s12 + cc2);
+   } else {
+
+   /* Exception: pole. */
+      *phi = ERFA_DPI / 2.0;
+      *height = absz - b;
+   }
+
+/* Restore sign of latitude. */
+   if ( z < 0 ) *phi = -*phi;
+
+/* OK status. */
+   return 0;
+
+}
+
+int eraGd2gc ( int n, double elong, double phi, double height,
+               double xyz[3] )
+/*
+**  - - - - - - - - -
+**   e r a G d 2 g c
+**  - - - - - - - - -
+**
+**  Transform geodetic coordinates to geocentric using the specified
+**  reference ellipsoid.
+**
+**  Given:
+**     n       int        ellipsoid identifier (Note 1)
+**     elong   double     longitude (radians, east +ve)
+**     phi     double     latitude (geodetic, radians, Note 3)
+**     height  double     height above ellipsoid (geodetic, Notes 2,3)
+**
+**  Returned:
+**     xyz     double[3]  geocentric vector (Note 2)
+**
+**  Returned (function value):
+**             int        status:  0 = OK
+**                                -1 = illegal identifier (Note 3)
+**                                -2 = illegal case (Note 3)
+**
+**  Notes:
+**
+**  1) The identifier n is a number that specifies the choice of
+**     reference ellipsoid.  The following are supported:
+**
+**        n    ellipsoid
+**
+**        1     ERFA_WGS84
+**        2     ERFA_GRS80
+**        3     ERFA_WGS72
+**
+**     The n value has no significance outside the ERFA software.  For
+**     convenience, symbols ERFA_WGS84 etc. are defined in erfam.h.
+**
+**  2) The height (height, given) and the geocentric vector (xyz,
+**     returned) are in meters.
+**
+**  3) No validation is performed on the arguments elong, phi and
+**     height.  An error status -1 means that the identifier n is
+**     illegal.  An error status -2 protects against cases that would
+**     lead to arithmetic exceptions.  In all error cases, xyz is set
+**     to zeros.
+**
+**  4) The inverse transformation is performed in the function eraGc2gd.
+**
+**  Called:
+**     eraEform     Earth reference ellipsoids
+**     eraGd2gce    geodetic to geocentric transformation, general
+**     eraZp        zero p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int j;
+   double a, f;
+
+
+/* Obtain reference ellipsoid parameters. */
+   j = eraEform ( n, &a, &f );
+
+/* If OK, transform longitude, geodetic latitude, height to x,y,z. */
+   if ( j == 0 ) {
+      j = eraGd2gce ( a, f, elong, phi, height, xyz );
+      if ( j != 0 ) j = -2;
+   }
+
+/* Deal with any errors. */
+   if ( j != 0 ) eraZp ( xyz );
+
+/* Return the status. */
+   return j;
+
+}
+
+int eraGd2gce ( double a, double f, double elong, double phi,
+                double height, double xyz[3] )
+/*
+**  - - - - - - - - - -
+**   e r a G d 2 g c e
+**  - - - - - - - - - -
+**
+**  Transform geodetic coordinates to geocentric for a reference
+**  ellipsoid of specified form.
+**
+**  Given:
+**     a       double     equatorial radius (Notes 1,4)
+**     f       double     flattening (Notes 2,4)
+**     elong   double     longitude (radians, east +ve)
+**     phi     double     latitude (geodetic, radians, Note 4)
+**     height  double     height above ellipsoid (geodetic, Notes 3,4)
+**
+**  Returned:
+**     xyz     double[3]  geocentric vector (Note 3)
+**
+**  Returned (function value):
+**             int        status:  0 = OK
+**                                -1 = illegal case (Note 4)
+**  Notes:
+**
+**  1) The equatorial radius, a, can be in any units, but meters is
+**     the conventional choice.
+**
+**  2) The flattening, f, is (for the Earth) a value around 0.00335,
+**     i.e. around 1/298.
+**
+**  3) The equatorial radius, a, and the height, height, must be
+**     given in the same units, and determine the units of the
+**     returned geocentric vector, xyz.
+**
+**  4) No validation is performed on individual arguments.  The error
+**     status -1 protects against (unrealistic) cases that would lead
+**     to arithmetic exceptions.  If an error occurs, xyz is unchanged.
+**
+**  5) The inverse transformation is performed in the function
+**     eraGc2gde.
+**
+**  6) The transformation for a standard ellipsoid (such as ERFA_WGS84) can
+**     more conveniently be performed by calling eraGd2gc,  which uses a
+**     numerical code to identify the required a and f values.
+**
+**  References:
+**
+**     Green, R.M., Spherical Astronomy, Cambridge University Press,
+**     (1985) Section 4.5, p96.
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     Section 4.22, p202.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double sp, cp, w, d, ac, as, r;
+
+
+/* Functions of geodetic latitude. */
+   sp = sin(phi);
+   cp = cos(phi);
+   w = 1.0 - f;
+   w = w * w;
+   d = cp*cp + w*sp*sp;
+   if ( d <= 0.0 ) return -1;
+   ac = a / sqrt(d);
+   as = w * ac;
+
+/* Geocentric vector. */
+   r = (ac + height) * cp;
+   xyz[0] = r * cos(elong);
+   xyz[1] = r * sin(elong);
+   xyz[2] = (as + height) * sp;
+
+/* Success. */
+   return 0;
+
+}
+
+double eraGmst00(double uta, double utb, double tta, double ttb)
+/*
+**  - - - - - - - - - -
+**   e r a G m s t 0 0
+**  - - - - - - - - - -
+**
+**  Greenwich mean sidereal time (model consistent with IAU 2000
+**  resolutions).
+**
+**  Given:
+**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
+**     tta,ttb    double    TT as a 2-part Julian Date (Notes 1,2)
+**
+**  Returned (function value):
+**                double    Greenwich mean sidereal time (radians)
+**
+**  Notes:
+**
+**  1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
+**     Julian Dates, apportioned in any convenient way between the
+**     argument pairs.  For example, JD=2450123.7 could be expressed in
+**     any of these ways, among others:
+**
+**            Part A         Part B
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable (in the case of UT;  the TT is not at all critical
+**     in this respect).  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  For UT, the date & time
+**     method is best matched to the algorithm that is used by the Earth
+**     Rotation Angle function, called internally:  maximum precision is
+**     delivered when the uta argument is for 0hrs UT1 on the day in
+**     question and the utb argument lies in the range 0 to 1, or vice
+**     versa.
+**
+**  2) Both UT1 and TT are required, UT1 to predict the Earth rotation
+**     and TT to predict the effects of precession.  If UT1 is used for
+**     both purposes, errors of order 100 microarcseconds result.
+**
+**  3) This GMST is compatible with the IAU 2000 resolutions and must be
+**     used only in conjunction with other IAU 2000 compatible
+**     components such as precession-nutation and equation of the
+**     equinoxes.
+**
+**  4) The result is returned in the range 0 to 2pi.
+**
+**  5) The algorithm is from Capitaine et al. (2003) and IERS
+**     Conventions 2003.
+**
+**  Called:
+**     eraEra00     Earth rotation angle, IAU 2000
+**     eraAnp       normalize angle into range 0 to 2pi
+**
+**  References:
+**
+**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
+**     implement the IAU 2000 definition of UT1", Astronomy &
+**     Astrophysics, 406, 1135-1149 (2003)
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t, gmst;
+
+
+/* TT Julian centuries since J2000.0. */
+   t = ((tta - ERFA_DJ00) + ttb) / ERFA_DJC;
+
+/* Greenwich Mean Sidereal Time, IAU 2000. */
+   gmst = eraAnp(eraEra00(uta, utb) +
+                   (     0.014506   +
+                   (  4612.15739966 +
+                   (     1.39667721 +
+                   (    -0.00009344 +
+                   (     0.00001882 )
+          * t) * t) * t) * t) * ERFA_DAS2R);
+
+   return gmst;
+
+}
+
+double eraGmst06(double uta, double utb, double tta, double ttb)
+/*
+**  - - - - - - - - - -
+**   e r a G m s t 0 6
+**  - - - - - - - - - -
+**
+**  Greenwich mean sidereal time (consistent with IAU 2006 precession).
+**
+**  Given:
+**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
+**     tta,ttb    double    TT as a 2-part Julian Date (Notes 1,2)
+**
+**  Returned (function value):
+**                double    Greenwich mean sidereal time (radians)
+**
+**  Notes:
+**
+**  1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
+**     Julian Dates, apportioned in any convenient way between the
+**     argument pairs.  For example, JD=2450123.7 could be expressed in
+**     any of these ways, among others:
+**
+**            Part A        Part B
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable (in the case of UT;  the TT is not at all critical
+**     in this respect).  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  For UT, the date & time
+**     method is best matched to the algorithm that is used by the Earth
+**     rotation angle function, called internally:  maximum precision is
+**     delivered when the uta argument is for 0hrs UT1 on the day in
+**     question and the utb argument lies in the range 0 to 1, or vice
+**     versa.
+**
+**  2) Both UT1 and TT are required, UT1 to predict the Earth rotation
+**     and TT to predict the effects of precession.  If UT1 is used for
+**     both purposes, errors of order 100 microarcseconds result.
+**
+**  3) This GMST is compatible with the IAU 2006 precession and must not
+**     be used with other precession models.
+**
+**  4) The result is returned in the range 0 to 2pi.
+**
+**  Called:
+**     eraEra00     Earth rotation angle, IAU 2000
+**     eraAnp       normalize angle into range 0 to 2pi
+**
+**  Reference:
+**
+**     Capitaine, N., Wallace, P.T. & Chapront, J., 2005,
+**     Astron.Astrophys. 432, 355
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t, gmst;
+
+
+/* TT Julian centuries since J2000.0. */
+   t = ((tta - ERFA_DJ00) + ttb) / ERFA_DJC;
+
+/* Greenwich mean sidereal time, IAU 2006. */
+   gmst = eraAnp(eraEra00(uta, utb) +
+                  (    0.014506     +
+                  (  4612.156534    +
+                  (     1.3915817   +
+                  (    -0.00000044  +
+                  (    -0.000029956 +
+                  (    -0.0000000368 )
+          * t) * t) * t) * t) * t) * ERFA_DAS2R);
+
+   return gmst;
+
+}
+
+double eraGmst82(double dj1, double dj2)
+/*
+**  - - - - - - - - - -
+**   e r a G m s t 8 2
+**  - - - - - - - - - -
+**
+**  Universal Time to Greenwich mean sidereal time (IAU 1982 model).
+**
+**  Given:
+**     dj1,dj2    double    UT1 Julian Date (see note)
+**
+**  Returned (function value):
+**                double    Greenwich mean sidereal time (radians)
+**
+**  Notes:
+**
+**  1) The UT1 date dj1+dj2 is a Julian Date, apportioned in any
+**     convenient way between the arguments dj1 and dj2.  For example,
+**     JD(UT1)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**             dj1            dj2
+**
+**         2450123.7D0        0D0        (JD method)
+**          2451545D0      -1421.3D0     (J2000 method)
+**         2400000.5D0     50123.2D0     (MJD method)
+**         2450123.5D0       0.2D0       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  The date & time method is
+**     best matched to the algorithm used:  maximum accuracy (or, at
+**     least, minimum noise) is delivered when the dj1 argument is for
+**     0hrs UT1 on the day in question and the dj2 argument lies in the
+**     range 0 to 1, or vice versa.
+**
+**  2) The algorithm is based on the IAU 1982 expression.  This is
+**     always described as giving the GMST at 0 hours UT1.  In fact, it
+**     gives the difference between the GMST and the UT, the steady
+**     4-minutes-per-day drawing-ahead of ST with respect to UT.  When
+**     whole days are ignored, the expression happens to equal the GMST
+**     at 0 hours UT1 each day.
+**
+**  3) In this function, the entire UT1 (the sum of the two arguments
+**     dj1 and dj2) is used directly as the argument for the standard
+**     formula, the constant term of which is adjusted by 12 hours to
+**     take account of the noon phasing of Julian Date.  The UT1 is then
+**     added, but omitting whole days to conserve accuracy.
+**
+**  Called:
+**     eraAnp       normalize angle into range 0 to 2pi
+**
+**  References:
+**
+**     Transactions of the International Astronomical Union,
+**     XVIII B, 67 (1983).
+**
+**     Aoki et al., Astron. Astrophys. 105, 359-361 (1982).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Coefficients of IAU 1982 GMST-UT1 model */
+   double A = 24110.54841  -  ERFA_DAYSEC / 2.0;
+   double B = 8640184.812866;
+   double C = 0.093104;
+   double D =  -6.2e-6;
+
+/* Note: the first constant, A, has to be adjusted by 12 hours */
+/* because the UT1 is supplied as a Julian date, which begins  */
+/* at noon.                                                    */
+
+   double d1, d2, t, f, gmst;
+
+
+/* Julian centuries since fundamental epoch. */
+   if (dj1 < dj2) {
+      d1 = dj1;
+      d2 = dj2;
+   } else {
+      d1 = dj2;
+      d2 = dj1;
+   }
+   t = (d1 + (d2 - ERFA_DJ00)) / ERFA_DJC;
+
+/* Fractional part of JD(UT1), in seconds. */
+   f = ERFA_DAYSEC * (fmod(d1, 1.0) + fmod(d2, 1.0));
+
+/* GMST at this UT1. */
+   gmst = eraAnp(ERFA_DS2R * ((A + (B + (C + D * t) * t) * t) + f));
+
+   return gmst;
+
+}
+
+double eraGst00a(double uta, double utb, double tta, double ttb)
+/*
+**  - - - - - - - - - -
+**   e r a G s t 0 0 a
+**  - - - - - - - - - -
+**
+**  Greenwich apparent sidereal time (consistent with IAU 2000
+**  resolutions).
+**
+**  Given:
+**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
+**     tta,ttb    double    TT as a 2-part Julian Date (Notes 1,2)
+**
+**  Returned (function value):
+**                double    Greenwich apparent sidereal time (radians)
+**
+**  Notes:
+**
+**  1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
+**     Julian Dates, apportioned in any convenient way between the
+**     argument pairs.  For example, JD=2450123.7 could be expressed in
+**     any of these ways, among others:
+**
+**            Part A        Part B
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable (in the case of UT;  the TT is not at all critical
+**     in this respect).  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  For UT, the date & time
+**     method is best matched to the algorithm that is used by the Earth
+**     Rotation Angle function, called internally:  maximum precision is
+**     delivered when the uta argument is for 0hrs UT1 on the day in
+**     question and the utb argument lies in the range 0 to 1, or vice
+**     versa.
+**
+**  2) Both UT1 and TT are required, UT1 to predict the Earth rotation
+**     and TT to predict the effects of precession-nutation.  If UT1 is
+**     used for both purposes, errors of order 100 microarcseconds
+**     result.
+**
+**  3) This GAST is compatible with the IAU 2000 resolutions and must be
+**     used only in conjunction with other IAU 2000 compatible
+**     components such as precession-nutation.
+**
+**  4) The result is returned in the range 0 to 2pi.
+**
+**  5) The algorithm is from Capitaine et al. (2003) and IERS
+**     Conventions 2003.
+**
+**  Called:
+**     eraGmst00    Greenwich mean sidereal time, IAU 2000
+**     eraEe00a     equation of the equinoxes, IAU 2000A
+**     eraAnp       normalize angle into range 0 to 2pi
+**
+**  References:
+**
+**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
+**     implement the IAU 2000 definition of UT1", Astronomy &
+**     Astrophysics, 406, 1135-1149 (2003)
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double gmst00, ee00a, gst;
+
+
+   gmst00 = eraGmst00(uta, utb, tta, ttb);
+   ee00a = eraEe00a(tta, ttb);
+   gst = eraAnp(gmst00 + ee00a);
+
+   return gst;
+
+}
+
+double eraGst00b(double uta, double utb)
+/*
+**  - - - - - - - - - -
+**   e r a G s t 0 0 b
+**  - - - - - - - - - -
+**
+**  Greenwich apparent sidereal time (consistent with IAU 2000
+**  resolutions but using the truncated nutation model IAU 2000B).
+**
+**  Given:
+**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
+**
+**  Returned (function value):
+**                double    Greenwich apparent sidereal time (radians)
+**
+**  Notes:
+**
+**  1) The UT1 date uta+utb is a Julian Date, apportioned in any
+**     convenient way between the argument pair.  For example,
+**     JD=2450123.7 could be expressed in any of these ways, among
+**     others:
+**
+**             uta            utb
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in cases
+**     where the loss of several decimal digits of resolution is
+**     acceptable.  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  For UT, the date & time
+**     method is best matched to the algorithm that is used by the Earth
+**     Rotation Angle function, called internally:  maximum precision is
+**     delivered when the uta argument is for 0hrs UT1 on the day in
+**     question and the utb argument lies in the range 0 to 1, or vice
+**     versa.
+**
+**  2) The result is compatible with the IAU 2000 resolutions, except
+**     that accuracy has been compromised for the sake of speed and
+**     convenience in two respects:
+**
+**     . UT is used instead of TDB (or TT) to compute the precession
+**       component of GMST and the equation of the equinoxes.  This
+**       results in errors of order 0.1 mas at present.
+**
+**     . The IAU 2000B abridged nutation model (McCarthy & Luzum, 2001)
+**       is used, introducing errors of up to 1 mas.
+**
+**  3) This GAST is compatible with the IAU 2000 resolutions and must be
+**     used only in conjunction with other IAU 2000 compatible
+**     components such as precession-nutation.
+**
+**  4) The result is returned in the range 0 to 2pi.
+**
+**  5) The algorithm is from Capitaine et al. (2003) and IERS
+**     Conventions 2003.
+**
+**  Called:
+**     eraGmst00    Greenwich mean sidereal time, IAU 2000
+**     eraEe00b     equation of the equinoxes, IAU 2000B
+**     eraAnp       normalize angle into range 0 to 2pi
+**
+**  References:
+**
+**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
+**     implement the IAU 2000 definition of UT1", Astronomy &
+**     Astrophysics, 406, 1135-1149 (2003)
+**
+**     McCarthy, D.D. & Luzum, B.J., "An abridged model of the
+**     precession-nutation of the celestial pole", Celestial Mechanics &
+**     Dynamical Astronomy, 85, 37-49 (2003)
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double gmst00, ee00b, gst;
+
+
+   gmst00 = eraGmst00(uta, utb, uta, utb);
+   ee00b = eraEe00b(uta, utb);
+   gst = eraAnp(gmst00 + ee00b);
+
+   return gst;
+
+}
+
+double eraGst06(double uta, double utb, double tta, double ttb,
+                double rnpb[3][3])
+/*
+**  - - - - - - - - -
+**   e r a G s t 0 6
+**  - - - - - - - - -
+**
+**  Greenwich apparent sidereal time, IAU 2006, given the NPB matrix.
+**
+**  Given:
+**     uta,utb  double        UT1 as a 2-part Julian Date (Notes 1,2)
+**     tta,ttb  double        TT as a 2-part Julian Date (Notes 1,2)
+**     rnpb     double[3][3]  nutation x precession x bias matrix
+**
+**  Returned (function value):
+**              double        Greenwich apparent sidereal time (radians)
+**
+**  Notes:
+**
+**  1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
+**     Julian Dates, apportioned in any convenient way between the
+**     argument pairs.  For example, JD=2450123.7 could be expressed in
+**     any of these ways, among others:
+**
+**            Part A        Part B
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable (in the case of UT;  the TT is not at all critical
+**     in this respect).  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  For UT, the date & time
+**     method is best matched to the algorithm that is used by the Earth
+**     rotation angle function, called internally:  maximum precision is
+**     delivered when the uta argument is for 0hrs UT1 on the day in
+**     question and the utb argument lies in the range 0 to 1, or vice
+**     versa.
+**
+**  2) Both UT1 and TT are required, UT1 to predict the Earth rotation
+**     and TT to predict the effects of precession-nutation.  If UT1 is
+**     used for both purposes, errors of order 100 microarcseconds
+**     result.
+**
+**  3) Although the function uses the IAU 2006 series for s+XY/2, it is
+**     otherwise independent of the precession-nutation model and can in
+**     practice be used with any equinox-based NPB matrix.
+**
+**  4) The result is returned in the range 0 to 2pi.
+**
+**  Called:
+**     eraBpn2xy    extract CIP X,Y coordinates from NPB matrix
+**     eraS06       the CIO locator s, given X,Y, IAU 2006
+**     eraAnp       normalize angle into range 0 to 2pi
+**     eraEra00     Earth rotation angle, IAU 2000
+**     eraEors      equation of the origins, given NPB matrix and s
+**
+**  Reference:
+**
+**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double x, y, s, era, eors, gst;
+
+
+/* Extract CIP coordinates. */
+   eraBpn2xy(rnpb, &x, &y);
+
+/* The CIO locator, s. */
+   s = eraS06(tta, ttb, x, y);
+
+/* Greenwich apparent sidereal time. */
+   era = eraEra00(uta, utb);
+   eors = eraEors(rnpb, s);
+   gst = eraAnp(era - eors);
+
+   return gst;
+
+}
+
+double eraGst06a(double uta, double utb, double tta, double ttb)
+/*
+**  - - - - - - - - - -
+**   e r a G s t 0 6 a
+**  - - - - - - - - - -
+**
+**  Greenwich apparent sidereal time (consistent with IAU 2000 and 2006
+**  resolutions).
+**
+**  Given:
+**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
+**     tta,ttb    double    TT as a 2-part Julian Date (Notes 1,2)
+**
+**  Returned (function value):
+**                double    Greenwich apparent sidereal time (radians)
+**
+**  Notes:
+**
+**  1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
+**     Julian Dates, apportioned in any convenient way between the
+**     argument pairs.  For example, JD=2450123.7 could be expressed in
+**     any of these ways, among others:
+**
+**            Part A        Part B
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable (in the case of UT;  the TT is not at all critical
+**     in this respect).  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  For UT, the date & time
+**     method is best matched to the algorithm that is used by the Earth
+**     rotation angle function, called internally:  maximum precision is
+**     delivered when the uta argument is for 0hrs UT1 on the day in
+**     question and the utb argument lies in the range 0 to 1, or vice
+**     versa.
+**
+**  2) Both UT1 and TT are required, UT1 to predict the Earth rotation
+**     and TT to predict the effects of precession-nutation.  If UT1 is
+**     used for both purposes, errors of order 100 microarcseconds
+**     result.
+**
+**  3) This GAST is compatible with the IAU 2000/2006 resolutions and
+**     must be used only in conjunction with IAU 2006 precession and
+**     IAU 2000A nutation.
+**
+**  4) The result is returned in the range 0 to 2pi.
+**
+**  Called:
+**     eraPnm06a    classical NPB matrix, IAU 2006/2000A
+**     eraGst06     Greenwich apparent ST, IAU 2006, given NPB matrix
+**
+**  Reference:
+**
+**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rnpb[3][3], gst;
+
+
+/* Classical nutation x precession x bias matrix, IAU 2000A. */
+   eraPnm06a(tta, ttb, rnpb);
+
+/* Greenwich apparent sidereal time. */
+   gst = eraGst06(uta, utb, tta, ttb, rnpb);
+
+   return gst;
+
+}
+
+double eraGst94(double uta, double utb)
+/*
+**  - - - - - - - - -
+**   e r a G s t 9 4
+**  - - - - - - - - -
+**
+**  Greenwich apparent sidereal time (consistent with IAU 1982/94
+**  resolutions).
+**
+**  Given:
+**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
+**
+**  Returned (function value):
+**                double    Greenwich apparent sidereal time (radians)
+**
+**  Notes:
+**
+**  1) The UT1 date uta+utb is a Julian Date, apportioned in any
+**     convenient way between the argument pair.  For example,
+**     JD=2450123.7 could be expressed in any of these ways, among
+**     others:
+**
+**             uta            utb
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in cases
+**     where the loss of several decimal digits of resolution is
+**     acceptable.  The J2000 and MJD methods are good compromises
+**     between resolution and convenience.  For UT, the date & time
+**     method is best matched to the algorithm that is used by the Earth
+**     Rotation Angle function, called internally:  maximum precision is
+**     delivered when the uta argument is for 0hrs UT1 on the day in
+**     question and the utb argument lies in the range 0 to 1, or vice
+**     versa.
+**
+**  2) The result is compatible with the IAU 1982 and 1994 resolutions,
+**     except that accuracy has been compromised for the sake of
+**     convenience in that UT is used instead of TDB (or TT) to compute
+**     the equation of the equinoxes.
+**
+**  3) This GAST must be used only in conjunction with contemporaneous
+**     IAU standards such as 1976 precession, 1980 obliquity and 1982
+**     nutation.  It is not compatible with the IAU 2000 resolutions.
+**
+**  4) The result is returned in the range 0 to 2pi.
+**
+**  Called:
+**     eraGmst82    Greenwich mean sidereal time, IAU 1982
+**     eraEqeq94    equation of the equinoxes, IAU 1994
+**     eraAnp       normalize angle into range 0 to 2pi
+**
+**  References:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992)
+**
+**     IAU Resolution C7, Recommendation 3 (1994)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double gmst82, eqeq94, gst;
+
+
+   gmst82 = eraGmst82(uta, utb);
+   eqeq94 = eraEqeq94(uta, utb);
+   gst = eraAnp(gmst82  + eqeq94);
+
+   return gst;
+
+}
+
+void eraH2fk5(double rh, double dh,
+              double drh, double ddh, double pxh, double rvh,
+              double *r5, double *d5,
+              double *dr5, double *dd5, double *px5, double *rv5)
+/*
+**  - - - - - - - - -
+**   e r a H 2 f k 5
+**  - - - - - - - - -
+**
+**  Transform Hipparcos star data into the FK5 (J2000.0) system.
+**
+**  Given (all Hipparcos, epoch J2000.0):
+**     rh      double    RA (radians)
+**     dh      double    Dec (radians)
+**     drh     double    proper motion in RA (dRA/dt, rad/Jyear)
+**     ddh     double    proper motion in Dec (dDec/dt, rad/Jyear)
+**     pxh     double    parallax (arcsec)
+**     rvh     double    radial velocity (km/s, positive = receding)
+**
+**  Returned (all FK5, equinox J2000.0, epoch J2000.0):
+**     r5      double    RA (radians)
+**     d5      double    Dec (radians)
+**     dr5     double    proper motion in RA (dRA/dt, rad/Jyear)
+**     dd5     double    proper motion in Dec (dDec/dt, rad/Jyear)
+**     px5     double    parallax (arcsec)
+**     rv5     double    radial velocity (km/s, positive = receding)
+**
+**  Notes:
+**
+**  1) This function transforms Hipparcos star positions and proper
+**     motions into FK5 J2000.0.
+**
+**  2) The proper motions in RA are dRA/dt rather than
+**     cos(Dec)*dRA/dt, and are per year rather than per century.
+**
+**  3) The FK5 to Hipparcos transformation is modeled as a pure
+**     rotation and spin;  zonal errors in the FK5 catalog are not
+**     taken into account.
+**
+**  4) See also eraFk52h, eraFk5hz, eraHfk5z.
+**
+**  Called:
+**     eraStarpv    star catalog data to space motion pv-vector
+**     eraFk5hip    FK5 to Hipparcos rotation and spin
+**     eraRv2m      r-vector to r-matrix
+**     eraRxp       product of r-matrix and p-vector
+**     eraTrxp      product of transpose of r-matrix and p-vector
+**     eraPxp       vector product of two p-vectors
+**     eraPmp       p-vector minus p-vector
+**     eraPvstar    space motion pv-vector to star catalog data
+**
+**  Reference:
+**
+**     F.Mignard & M.Froeschle, Astron. Astrophys. 354, 732-739 (2000).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int i;
+   double pvh[2][3], r5h[3][3], s5h[3], sh[3], wxp[3], vv[3], pv5[2][3];
+
+
+/* Hipparcos barycentric position/velocity pv-vector (normalized). */
+   eraStarpv(rh, dh, drh, ddh, pxh, rvh, pvh);
+
+/* FK5 to Hipparcos orientation matrix and spin vector. */
+   eraFk5hip(r5h, s5h);
+
+/* Make spin units per day instead of per year. */
+   for ( i = 0; i < 3; s5h[i++] /= 365.25 );
+
+/* Orient the spin into the Hipparcos system. */
+   eraRxp(r5h, s5h, sh);
+
+/* De-orient the Hipparcos position into the FK5 system. */
+   eraTrxp(r5h, pvh[0], pv5[0]);
+
+/* Apply spin to the position giving an extra space motion component. */
+   eraPxp(pvh[0], sh, wxp);
+
+/* Subtract this component from the Hipparcos space motion. */
+   eraPmp(pvh[1], wxp, vv);
+
+/* De-orient the Hipparcos space motion into the FK5 system. */
+   eraTrxp(r5h, vv, pv5[1]);
+
+/* FK5 pv-vector to spherical. */
+   eraPvstar(pv5, r5, d5, dr5, dd5, px5, rv5);
+
+   return;
+
+}
+
+void eraHfk5z(double rh, double dh, double date1, double date2,
+              double *r5, double *d5, double *dr5, double *dd5)
+/*
+**  - - - - - - - - -
+**   e r a H f k 5 z
+**  - - - - - - - - -
+**
+**  Transform a Hipparcos star position into FK5 J2000.0, assuming
+**  zero Hipparcos proper motion.
+**
+**  Given:
+**     rh            double    Hipparcos RA (radians)
+**     dh            double    Hipparcos Dec (radians)
+**     date1,date2   double    TDB date (Note 1)
+**
+**  Returned (all FK5, equinox J2000.0, date date1+date2):
+**     r5            double    RA (radians)
+**     d5            double    Dec (radians)
+**     dr5           double    FK5 RA proper motion (rad/year, Note 4)
+**     dd5           double    Dec proper motion (rad/year, Note 4)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt.
+**
+**  3) The FK5 to Hipparcos transformation is modeled as a pure rotation
+**     and spin;  zonal errors in the FK5 catalogue are not taken into
+**     account.
+**
+**  4) It was the intention that Hipparcos should be a close
+**     approximation to an inertial frame, so that distant objects have
+**     zero proper motion;  such objects have (in general) non-zero
+**     proper motion in FK5, and this function returns those fictitious
+**     proper motions.
+**
+**  5) The position returned by this function is in the FK5 J2000.0
+**     reference system but at date date1+date2.
+**
+**  6) See also eraFk52h, eraH2fk5, eraFk5zhz.
+**
+**  Called:
+**     eraS2c       spherical coordinates to unit vector
+**     eraFk5hip    FK5 to Hipparcos rotation and spin
+**     eraRxp       product of r-matrix and p-vector
+**     eraSxp       multiply p-vector by scalar
+**     eraRxr       product of two r-matrices
+**     eraTrxp      product of transpose of r-matrix and p-vector
+**     eraPxp       vector product of two p-vectors
+**     eraPv2s      pv-vector to spherical
+**     eraAnp       normalize angle into range 0 to 2pi
+**
+**  Reference:
+**
+**     F.Mignard & M.Froeschle, 2000, Astron.Astrophys. 354, 732-739.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t, ph[3], r5h[3][3], s5h[3], sh[3], vst[3],
+   rst[3][3], r5ht[3][3], pv5e[2][3], vv[3],
+   w, r, v;
+
+
+/* Time interval from fundamental epoch J2000.0 to given date (JY). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJY;
+
+/* Hipparcos barycentric position vector (normalized). */
+   eraS2c(rh, dh, ph);
+
+/* FK5 to Hipparcos orientation matrix and spin vector. */
+   eraFk5hip(r5h, s5h);
+
+/* Rotate the spin into the Hipparcos system. */
+   eraRxp(r5h, s5h, sh);
+
+/* Accumulated Hipparcos wrt FK5 spin over that interval. */
+   eraSxp(t, s5h, vst);
+
+/* Express the accumulated spin as a rotation matrix. */
+   eraRv2m(vst, rst);
+
+/* Rotation matrix:  accumulated spin, then FK5 to Hipparcos. */
+   eraRxr(r5h, rst, r5ht);
+
+/* De-orient & de-spin the Hipparcos position into FK5 J2000.0. */
+   eraTrxp(r5ht, ph, pv5e[0]);
+
+/* Apply spin to the position giving a space motion. */
+   eraPxp(sh, ph, vv);
+
+/* De-orient & de-spin the Hipparcos space motion into FK5 J2000.0. */
+   eraTrxp(r5ht, vv, pv5e[1]);
+
+/* FK5 position/velocity pv-vector to spherical. */
+   eraPv2s(pv5e, &w, d5, &r, dr5, dd5, &v);
+   *r5 = eraAnp(w);
+
+   return;
+
+}
+
+void eraIr(double r[3][3])
+/*
+**  - - - - - -
+**   e r a I r
+**  - - - - - -
+**
+**  Initialize an r-matrix to the identity matrix.
+**
+**  Returned:
+**     r       double[3][3]    r-matrix
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   r[0][0] = 1.0;
+   r[0][1] = 0.0;
+   r[0][2] = 0.0;
+   r[1][0] = 0.0;
+   r[1][1] = 1.0;
+   r[1][2] = 0.0;
+   r[2][0] = 0.0;
+   r[2][1] = 0.0;
+   r[2][2] = 1.0;
+
+   return;
+
+}
+
+int eraJd2cal(double dj1, double dj2,
+              int *iy, int *im, int *id, double *fd)
+/*
+**  - - - - - - - - - -
+**   e r a J d 2 c a l
+**  - - - - - - - - - -
+**
+**  Julian Date to Gregorian year, month, day, and fraction of a day.
+**
+**  Given:
+**     dj1,dj2   double   Julian Date (Notes 1, 2)
+**
+**  Returned (arguments):
+**     iy        int      year
+**     im        int      month
+**     id        int      day
+**     fd        double   fraction of day
+**
+**  Returned (function value):
+**               int      status:
+**                           0 = OK
+**                          -1 = unacceptable date (Note 3)
+**
+**  Notes:
+**
+**  1) The earliest valid date is -68569.5 (-4900 March 1).  The
+**     largest value accepted is 10^9.
+**
+**  2) The Julian Date is apportioned in any convenient way between
+**     the arguments dj1 and dj2.  For example, JD=2450123.7 could
+**     be expressed in any of these ways, among others:
+**
+**            dj1             dj2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**  3) In early eras the conversion is from the "proleptic Gregorian
+**     calendar";  no account is taken of the date(s) of adoption of
+**     the Gregorian calendar, nor is the AD/BC numbering convention
+**     observed.
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     Section 12.92 (p604).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Minimum and maximum allowed JD */
+   static const double djmin = -68569.5;
+   static const double djmax = 1e9;
+
+   long jd, l, n, i, k;
+   double dj, d1, d2, f1, f2, f, d;
+
+
+/* Verify date is acceptable. */
+   dj = dj1 + dj2;
+   if (dj < djmin || dj > djmax) return -1;
+
+/* Copy the date, big then small, and re-align to midnight. */
+   if (dj1 >= dj2) {
+      d1 = dj1;
+      d2 = dj2;
+   } else {
+      d1 = dj2;
+      d2 = dj1;
+   }
+   d2 -= 0.5;
+
+/* Separate day and fraction. */
+   f1 = fmod(d1, 1.0);
+   f2 = fmod(d2, 1.0);
+   f = fmod(f1 + f2, 1.0);
+   if (f < 0.0) f += 1.0;
+   d = floor(d1 - f1) + floor(d2 - f2) + floor(f1 + f2 - f);
+   jd = (long) floor(d) + 1L;
+
+/* Express day in Gregorian calendar. */
+   l = jd + 68569L;
+   n = (4L * l) / 146097L;
+   l -= (146097L * n + 3L) / 4L;
+   i = (4000L * (l + 1L)) / 1461001L;
+   l -= (1461L * i) / 4L - 31L;
+   k = (80L * l) / 2447L;
+   *id = (int) (l - (2447L * k) / 80L);
+   l = k / 11L;
+   *im = (int) (k + 2L - 12L * l);
+   *iy = (int) (100L * (n - 49L) + i + l);
+   *fd = f;
+
+   return 0;
+
+}
+
+int eraJdcalf(int ndp, double dj1, double dj2, int iymdf[4])
+/*
+**  - - - - - - - - - -
+**   e r a J d c a l f
+**  - - - - - - - - - -
+**
+**  Julian Date to Gregorian Calendar, expressed in a form convenient
+**  for formatting messages:  rounded to a specified precision.
+**
+**  Given:
+**     ndp       int      number of decimal places of days in fraction
+**     dj1,dj2   double   dj1+dj2 = Julian Date (Note 1)
+**
+**  Returned:
+**     iymdf     int[4]   year, month, day, fraction in Gregorian
+**                        calendar
+**
+**  Returned (function value):
+**               int      status:
+**                          -1 = date out of range
+**                           0 = OK
+**                          +1 = NDP not 0-9 (interpreted as 0)
+**
+**  Notes:
+**
+**  1) The Julian Date is apportioned in any convenient way between
+**     the arguments dj1 and dj2.  For example, JD=2450123.7 could
+**     be expressed in any of these ways, among others:
+**
+**             dj1            dj2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**  2) In early eras the conversion is from the "Proleptic Gregorian
+**     Calendar";  no account is taken of the date(s) of adoption of
+**     the Gregorian Calendar, nor is the AD/BC numbering convention
+**     observed.
+**
+**  3) Refer to the function eraJd2cal.
+**
+**  4) NDP should be 4 or less if internal overflows are to be
+**     avoided on machines which use 16-bit integers.
+**
+**  Called:
+**     eraJd2cal    JD to Gregorian calendar
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     Section 12.92 (p604).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int j, js;
+   double denom, d1, d2, f1, f2, f;
+
+
+/* Denominator of fraction (e.g. 100 for 2 decimal places). */
+   if ((ndp >= 0) && (ndp <= 9)) {
+      j = 0;
+      denom = pow(10.0, ndp);
+   } else {
+      j = 1;
+      denom = 1.0;
+   }
+
+/* Copy the date, big then small, and realign to midnight. */
+   if (dj1 >= dj2) {
+      d1 = dj1;
+      d2 = dj2;
+   } else {
+      d1 = dj2;
+      d2 = dj1;
+   }
+   d2 -= 0.5;
+
+/* Separate days and fractions. */
+   f1 = fmod(d1, 1.0);
+   f2 = fmod(d2, 1.0);
+   d1 = floor(d1 - f1);
+   d2 = floor(d2 - f2);
+
+/* Round the total fraction to the specified number of places. */
+   f = floor((f1+f2)*denom + 0.5) / denom;
+
+/* Re-assemble the rounded date and re-align to noon. */
+   d2 += f + 0.5;
+
+/* Convert to Gregorian calendar. */
+   js = eraJd2cal(d1, d2, &iymdf[0], &iymdf[1], &iymdf[2], &f);
+   if (js == 0) {
+      iymdf[3] = (int) (f * denom);
+   } else {
+      j = js;
+   }
+
+/* Return the status. */
+   return j;
+
+}
+
+void eraNum00a(double date1, double date2, double rmatn[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a N u m 0 0 a
+**  - - - - - - - - - -
+**
+**  Form the matrix of nutation for a given date, IAU 2000A model.
+**
+**  Given:
+**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rmatn        double[3][3]    nutation matrix
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix operates in the sense V(true) = rmatn * V(mean), where
+**     the p-vector V(true) is with respect to the true equatorial triad
+**     of date and the p-vector V(mean) is with respect to the mean
+**     equatorial triad of date.
+**
+**  3) A faster, but slightly less accurate result (about 1 mas), can be
+**     obtained by using instead the eraNum00b function.
+**
+**  Called:
+**     eraPn00a     bias/precession/nutation, IAU 2000A
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     Section 3.222-3 (p114).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rbpn[3][3];
+
+
+/* Obtain the required matrix (discarding other results). */
+   eraPn00a(date1, date2,
+            &dpsi, &deps, &epsa, rb, rp, rbp, rmatn, rbpn);
+
+   return;
+
+}
+
+void eraNum00b(double date1, double date2, double rmatn[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a N u m 0 0 b
+**  - - - - - - - - - -
+**
+**  Form the matrix of nutation for a given date, IAU 2000B model.
+**
+**  Given:
+**     date1,date2  double         TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rmatn        double[3][3]   nutation matrix
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix operates in the sense V(true) = rmatn * V(mean), where
+**     the p-vector V(true) is with respect to the true equatorial triad
+**     of date and the p-vector V(mean) is with respect to the mean
+**     equatorial triad of date.
+**
+**  3) The present function is faster, but slightly less accurate (about
+**     1 mas), than the eraNum00a function.
+**
+**  Called:
+**     eraPn00b     bias/precession/nutation, IAU 2000B
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     Section 3.222-3 (p114).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rbpn[3][3];
+
+
+/* Obtain the required matrix (discarding other results). */
+   eraPn00b(date1, date2,
+            &dpsi, &deps, &epsa, rb, rp, rbp, rmatn, rbpn);
+
+   return;
+
+}
+
+void eraNum06a(double date1, double date2, double rmatn[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a N u m 0 6 a
+**  - - - - - - - - - -
+**
+**  Form the matrix of nutation for a given date, IAU 2006/2000A model.
+**
+**  Given:
+**     date1,date2   double          TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rmatn         double[3][3]    nutation matrix
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix operates in the sense V(true) = rmatn * V(mean), where
+**     the p-vector V(true) is with respect to the true equatorial triad
+**     of date and the p-vector V(mean) is with respect to the mean
+**     equatorial triad of date.
+**
+**  Called:
+**     eraObl06     mean obliquity, IAU 2006
+**     eraNut06a    nutation, IAU 2006/2000A
+**     eraNumat     form nutation matrix
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     Section 3.222-3 (p114).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double eps, dp, de;
+
+
+/* Mean obliquity. */
+   eps = eraObl06(date1, date2);
+
+/* Nutation components. */
+   eraNut06a(date1, date2, &dp, &de);
+
+/* Nutation matrix. */
+   eraNumat(eps, dp, de, rmatn);
+
+   return;
+
+}
+
+void eraNumat(double epsa, double dpsi, double deps, double rmatn[3][3])
+/*
+**  - - - - - - - - -
+**   e r a N u m a t
+**  - - - - - - - - -
+**
+**  Form the matrix of nutation.
+**
+**  Given:
+**     epsa        double         mean obliquity of date (Note 1)
+**     dpsi,deps   double         nutation (Note 2)
+**
+**  Returned:
+**     rmatn       double[3][3]   nutation matrix (Note 3)
+**
+**  Notes:
+**
+**
+**  1) The supplied mean obliquity epsa, must be consistent with the
+**     precession-nutation models from which dpsi and deps were obtained.
+**
+**  2) The caller is responsible for providing the nutation components;
+**     they are in longitude and obliquity, in radians and are with
+**     respect to the equinox and ecliptic of date.
+**
+**  3) The matrix operates in the sense V(true) = rmatn * V(mean),
+**     where the p-vector V(true) is with respect to the true
+**     equatorial triad of date and the p-vector V(mean) is with
+**     respect to the mean equatorial triad of date.
+**
+**  Called:
+**     eraIr        initialize r-matrix to identity
+**     eraRx        rotate around X-axis
+**     eraRz        rotate around Z-axis
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     Section 3.222-3 (p114).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Build the rotation matrix. */
+   eraIr(rmatn);
+   eraRx(epsa, rmatn);
+   eraRz(-dpsi, rmatn);
+   eraRx(-(epsa + deps), rmatn);
+
+   return;
+
+}
+
+void eraNut00a(double date1, double date2, double *dpsi, double *deps)
+/*
+**  - - - - - - - - - -
+**   e r a N u t 0 0 a
+**  - - - - - - - - - -
+**
+**  Nutation, IAU 2000A model (MHB2000 luni-solar and planetary nutation
+**  with free core nutation omitted).
+**
+**  Given:
+**     date1,date2   double   TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     dpsi,deps     double   nutation, luni-solar + planetary (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The nutation components in longitude and obliquity are in radians
+**     and with respect to the equinox and ecliptic of date.  The
+**     obliquity at J2000.0 is assumed to be the Lieske et al. (1977)
+**     value of 84381.448 arcsec.
+**
+**     Both the luni-solar and planetary nutations are included.  The
+**     latter are due to direct planetary nutations and the
+**     perturbations of the lunar and terrestrial orbits.
+**
+**  3) The function computes the MHB2000 nutation series with the
+**     associated corrections for planetary nutations.  It is an
+**     implementation of the nutation part of the IAU 2000A precession-
+**     nutation model, formally adopted by the IAU General Assembly in
+**     2000, namely MHB2000 (Mathews et al. 2002), but with the free
+**     core nutation (FCN - see Note 4) omitted.
+**
+**  4) The full MHB2000 model also contains contributions to the
+**     nutations in longitude and obliquity due to the free-excitation
+**     of the free-core-nutation during the period 1979-2000.  These FCN
+**     terms, which are time-dependent and unpredictable, are NOT
+**     included in the present function and, if required, must be
+**     independently computed.  With the FCN corrections included, the
+**     present function delivers a pole which is at current epochs
+**     accurate to a few hundred microarcseconds.  The omission of FCN
+**     introduces further errors of about that size.
+**
+**  5) The present function provides classical nutation.  The MHB2000
+**     algorithm, from which it is adapted, deals also with (i) the
+**     offsets between the GCRS and mean poles and (ii) the adjustments
+**     in longitude and obliquity due to the changed precession rates.
+**     These additional functions, namely frame bias and precession
+**     adjustments, are supported by the ERFA functions eraBi00  and
+**     eraPr00.
+**
+**  6) The MHB2000 algorithm also provides "total" nutations, comprising
+**     the arithmetic sum of the frame bias, precession adjustments,
+**     luni-solar nutation and planetary nutation.  These total
+**     nutations can be used in combination with an existing IAU 1976
+**     precession implementation, such as eraPmat76,  to deliver GCRS-
+**     to-true predictions of sub-mas accuracy at current dates.
+**     However, there are three shortcomings in the MHB2000 model that
+**     must be taken into account if more accurate or definitive results
+**     are required (see Wallace 2002):
+**
+**       (i) The MHB2000 total nutations are simply arithmetic sums,
+**           yet in reality the various components are successive Euler
+**           rotations.  This slight lack of rigor leads to cross terms
+**           that exceed 1 mas after a century.  The rigorous procedure
+**           is to form the GCRS-to-true rotation matrix by applying the
+**           bias, precession and nutation in that order.
+**
+**      (ii) Although the precession adjustments are stated to be with
+**           respect to Lieske et al. (1977), the MHB2000 model does
+**           not specify which set of Euler angles are to be used and
+**           how the adjustments are to be applied.  The most literal
+**           and straightforward procedure is to adopt the 4-rotation
+**           epsilon_0, psi_A, omega_A, xi_A option, and to add DPSIPR
+**           to psi_A and DEPSPR to both omega_A and eps_A.
+**
+**     (iii) The MHB2000 model predates the determination by Chapront
+**           et al. (2002) of a 14.6 mas displacement between the
+**           J2000.0 mean equinox and the origin of the ICRS frame.  It
+**           should, however, be noted that neglecting this displacement
+**           when calculating star coordinates does not lead to a
+**           14.6 mas change in right ascension, only a small second-
+**           order distortion in the pattern of the precession-nutation
+**           effect.
+**
+**     For these reasons, the ERFA functions do not generate the "total
+**     nutations" directly, though they can of course easily be
+**     generated by calling eraBi00, eraPr00 and the present function
+**     and adding the results.
+**
+**  7) The MHB2000 model contains 41 instances where the same frequency
+**     appears multiple times, of which 38 are duplicates and three are
+**     triplicates.  To keep the present code close to the original MHB
+**     algorithm, this small inefficiency has not been corrected.
+**
+**  Called:
+**     eraFal03     mean anomaly of the Moon
+**     eraFaf03     mean argument of the latitude of the Moon
+**     eraFaom03    mean longitude of the Moon's ascending node
+**     eraFame03    mean longitude of Mercury
+**     eraFave03    mean longitude of Venus
+**     eraFae03     mean longitude of Earth
+**     eraFama03    mean longitude of Mars
+**     eraFaju03    mean longitude of Jupiter
+**     eraFasa03    mean longitude of Saturn
+**     eraFaur03    mean longitude of Uranus
+**     eraFapa03    general accumulated precession in longitude
+**
+**  References:
+**
+**     Chapront, J., Chapront-Touze, M. & Francou, G. 2002,
+**     Astron.Astrophys. 387, 700
+**
+**     Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977,
+**     Astron.Astrophys. 58, 1-16
+**
+**     Mathews, P.M., Herring, T.A., Buffet, B.A. 2002, J.Geophys.Res.
+**     107, B4.  The MHB_2000 code itself was obtained on 9th September
+**     2002 from ftp//maia.usno.navy.mil/conv2000/chapter5/IAU2000A.
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
+**     Astron.Astrophys.Supp.Ser. 135, 111
+**
+**     Wallace, P.T., "Software for Implementing the IAU 2000
+**     Resolutions", in IERS Workshop 5.1 (2002)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int i;
+   double t, el, elp, f, d, om, arg, dp, de, sarg, carg,
+          al, af, ad, aom, alme, alve, alea, alma,
+          alju, alsa, alur, alne, apa, dpsils, depsls,
+          dpsipl, depspl;
+
+/* Units of 0.1 microarcsecond to radians */
+   const double U2R = ERFA_DAS2R / 1e7;
+
+/* ------------------------- */
+/* Luni-Solar nutation model */
+/* ------------------------- */
+
+/* The units for the sine and cosine coefficients are */
+/* 0.1 microarcsecond and the same per Julian century */
+
+   static const struct {
+      int nl,nlp,nf,nd,nom; /* coefficients of l,l',F,D,Om */
+      double sp,spt,cp;     /* longitude sin, t*sin, cos coefficients */
+      double ce,cet,se;     /* obliquity cos, t*cos, sin coefficients */
+   } xls[] = {
+
+   /* 1- 10 */
+      { 0, 0, 0, 0, 1,
+         -172064161.0, -174666.0, 33386.0, 92052331.0, 9086.0, 15377.0},
+      { 0, 0, 2,-2, 2,
+           -13170906.0, -1675.0, -13696.0, 5730336.0, -3015.0, -4587.0},
+      { 0, 0, 2, 0, 2,-2276413.0,-234.0,2796.0,978459.0,-485.0, 1374.0},
+      { 0, 0, 0, 0, 2,2074554.0, 207.0, -698.0,-897492.0,470.0, -291.0},
+      { 0, 1, 0, 0, 0,1475877.0,-3633.0,11817.0,73871.0,-184.0,-1924.0},
+      { 0, 1, 2,-2, 2,-516821.0,1226.0, -524.0,224386.0,-677.0, -174.0},
+      { 1, 0, 0, 0, 0, 711159.0,  73.0, -872.0,  -6750.0,  0.0,  358.0},
+      { 0, 0, 2, 0, 1,-387298.0,-367.0,  380.0, 200728.0, 18.0,  318.0},
+      { 1, 0, 2, 0, 2,-301461.0, -36.0,  816.0, 129025.0,-63.0,  367.0},
+      { 0,-1, 2,-2, 2, 215829.0,-494.0,  111.0, -95929.0,299.0,  132.0},
+
+   /* 11-20 */
+      { 0, 0, 2,-2, 1, 128227.0, 137.0,  181.0, -68982.0, -9.0,   39.0},
+      {-1, 0, 2, 0, 2, 123457.0,  11.0,   19.0, -53311.0, 32.0,   -4.0},
+      {-1, 0, 0, 2, 0, 156994.0,  10.0, -168.0,  -1235.0,  0.0,   82.0},
+      { 1, 0, 0, 0, 1,  63110.0,  63.0,   27.0, -33228.0,  0.0,   -9.0},
+      {-1, 0, 0, 0, 1, -57976.0, -63.0, -189.0,  31429.0,  0.0,  -75.0},
+      {-1, 0, 2, 2, 2, -59641.0, -11.0,  149.0,  25543.0,-11.0,   66.0},
+      { 1, 0, 2, 0, 1, -51613.0, -42.0,  129.0,  26366.0,  0.0,   78.0},
+      {-2, 0, 2, 0, 1,  45893.0,  50.0,   31.0, -24236.0,-10.0,   20.0},
+      { 0, 0, 0, 2, 0,  63384.0,  11.0, -150.0,  -1220.0,  0.0,   29.0},
+      { 0, 0, 2, 2, 2, -38571.0,  -1.0,  158.0,  16452.0,-11.0,   68.0},
+
+   /* 21-30 */
+      { 0,-2, 2,-2, 2,  32481.0,   0.0,    0.0, -13870.0,  0.0,    0.0},
+      {-2, 0, 0, 2, 0, -47722.0,   0.0,  -18.0,    477.0,  0.0,  -25.0},
+      { 2, 0, 2, 0, 2, -31046.0,  -1.0,  131.0,  13238.0,-11.0,   59.0},
+      { 1, 0, 2,-2, 2,  28593.0,   0.0,   -1.0, -12338.0, 10.0,   -3.0},
+      {-1, 0, 2, 0, 1,  20441.0,  21.0,   10.0, -10758.0,  0.0,   -3.0},
+      { 2, 0, 0, 0, 0,  29243.0,   0.0,  -74.0,   -609.0,  0.0,   13.0},
+      { 0, 0, 2, 0, 0,  25887.0,   0.0,  -66.0,   -550.0,  0.0,   11.0},
+      { 0, 1, 0, 0, 1, -14053.0, -25.0,   79.0,   8551.0, -2.0,  -45.0},
+      {-1, 0, 0, 2, 1,  15164.0,  10.0,   11.0,  -8001.0,  0.0,   -1.0},
+      { 0, 2, 2,-2, 2, -15794.0,  72.0,  -16.0,   6850.0,-42.0,   -5.0},
+
+   /* 31-40 */
+      { 0, 0,-2, 2, 0,  21783.0,   0.0,   13.0,   -167.0,  0.0,   13.0},
+      { 1, 0, 0,-2, 1, -12873.0, -10.0,  -37.0,   6953.0,  0.0,  -14.0},
+      { 0,-1, 0, 0, 1, -12654.0,  11.0,   63.0,   6415.0,  0.0,   26.0},
+      {-1, 0, 2, 2, 1, -10204.0,   0.0,   25.0,   5222.0,  0.0,   15.0},
+      { 0, 2, 0, 0, 0,  16707.0, -85.0,  -10.0,    168.0, -1.0,   10.0},
+      { 1, 0, 2, 2, 2,  -7691.0,   0.0,   44.0,   3268.0,  0.0,   19.0},
+      {-2, 0, 2, 0, 0, -11024.0,   0.0,  -14.0,    104.0,  0.0,    2.0},
+      { 0, 1, 2, 0, 2,   7566.0, -21.0,  -11.0,  -3250.0,  0.0,   -5.0},
+      { 0, 0, 2, 2, 1,  -6637.0, -11.0,   25.0,   3353.0,  0.0,   14.0},
+      { 0,-1, 2, 0, 2,  -7141.0,  21.0,    8.0,   3070.0,  0.0,    4.0},
+
+   /* 41-50 */
+      { 0, 0, 0, 2, 1,  -6302.0, -11.0,    2.0,   3272.0,  0.0,    4.0},
+      { 1, 0, 2,-2, 1,   5800.0,  10.0,    2.0,  -3045.0,  0.0,   -1.0},
+      { 2, 0, 2,-2, 2,   6443.0,   0.0,   -7.0,  -2768.0,  0.0,   -4.0},
+      {-2, 0, 0, 2, 1,  -5774.0, -11.0,  -15.0,   3041.0,  0.0,   -5.0},
+      { 2, 0, 2, 0, 1,  -5350.0,   0.0,   21.0,   2695.0,  0.0,   12.0},
+      { 0,-1, 2,-2, 1,  -4752.0, -11.0,   -3.0,   2719.0,  0.0,   -3.0},
+      { 0, 0, 0,-2, 1,  -4940.0, -11.0,  -21.0,   2720.0,  0.0,   -9.0},
+      {-1,-1, 0, 2, 0,   7350.0,   0.0,   -8.0,    -51.0,  0.0,    4.0},
+      { 2, 0, 0,-2, 1,   4065.0,   0.0,    6.0,  -2206.0,  0.0,    1.0},
+      { 1, 0, 0, 2, 0,   6579.0,   0.0,  -24.0,   -199.0,  0.0,    2.0},
+
+   /* 51-60 */
+      { 0, 1, 2,-2, 1,   3579.0,   0.0,    5.0,  -1900.0,  0.0,    1.0},
+      { 1,-1, 0, 0, 0,   4725.0,   0.0,   -6.0,    -41.0,  0.0,    3.0},
+      {-2, 0, 2, 0, 2,  -3075.0,   0.0,   -2.0,   1313.0,  0.0,   -1.0},
+      { 3, 0, 2, 0, 2,  -2904.0,   0.0,   15.0,   1233.0,  0.0,    7.0},
+      { 0,-1, 0, 2, 0,   4348.0,   0.0,  -10.0,    -81.0,  0.0,    2.0},
+      { 1,-1, 2, 0, 2,  -2878.0,   0.0,    8.0,   1232.0,  0.0,    4.0},
+      { 0, 0, 0, 1, 0,  -4230.0,   0.0,    5.0,    -20.0,  0.0,   -2.0},
+      {-1,-1, 2, 2, 2,  -2819.0,   0.0,    7.0,   1207.0,  0.0,    3.0},
+      {-1, 0, 2, 0, 0,  -4056.0,   0.0,    5.0,     40.0,  0.0,   -2.0},
+      { 0,-1, 2, 2, 2,  -2647.0,   0.0,   11.0,   1129.0,  0.0,    5.0},
+
+   /* 61-70 */
+      {-2, 0, 0, 0, 1,  -2294.0,   0.0,  -10.0,   1266.0,  0.0,   -4.0},
+      { 1, 1, 2, 0, 2,   2481.0,   0.0,   -7.0,  -1062.0,  0.0,   -3.0},
+      { 2, 0, 0, 0, 1,   2179.0,   0.0,   -2.0,  -1129.0,  0.0,   -2.0},
+      {-1, 1, 0, 1, 0,   3276.0,   0.0,    1.0,     -9.0,  0.0,    0.0},
+      { 1, 1, 0, 0, 0,  -3389.0,   0.0,    5.0,     35.0,  0.0,   -2.0},
+      { 1, 0, 2, 0, 0,   3339.0,   0.0,  -13.0,   -107.0,  0.0,    1.0},
+      {-1, 0, 2,-2, 1,  -1987.0,   0.0,   -6.0,   1073.0,  0.0,   -2.0},
+      { 1, 0, 0, 0, 2,  -1981.0,   0.0,    0.0,    854.0,  0.0,    0.0},
+      {-1, 0, 0, 1, 0,   4026.0,   0.0, -353.0,   -553.0,  0.0, -139.0},
+      { 0, 0, 2, 1, 2,   1660.0,   0.0,   -5.0,   -710.0,  0.0,   -2.0},
+
+   /* 71-80 */
+      {-1, 0, 2, 4, 2,  -1521.0,   0.0,    9.0,    647.0,  0.0,    4.0},
+      {-1, 1, 0, 1, 1,   1314.0,   0.0,    0.0,   -700.0,  0.0,    0.0},
+      { 0,-2, 2,-2, 1,  -1283.0,   0.0,    0.0,    672.0,  0.0,    0.0},
+      { 1, 0, 2, 2, 1,  -1331.0,   0.0,    8.0,    663.0,  0.0,    4.0},
+      {-2, 0, 2, 2, 2,   1383.0,   0.0,   -2.0,   -594.0,  0.0,   -2.0},
+      {-1, 0, 0, 0, 2,   1405.0,   0.0,    4.0,   -610.0,  0.0,    2.0},
+      { 1, 1, 2,-2, 2,   1290.0,   0.0,    0.0,   -556.0,  0.0,    0.0},
+      {-2, 0, 2, 4, 2,  -1214.0,   0.0,    5.0,    518.0,  0.0,    2.0},
+      {-1, 0, 4, 0, 2,   1146.0,   0.0,   -3.0,   -490.0,  0.0,   -1.0},
+      { 2, 0, 2,-2, 1,   1019.0,   0.0,   -1.0,   -527.0,  0.0,   -1.0},
+
+   /* 81-90 */
+      { 2, 0, 2, 2, 2,  -1100.0,   0.0,    9.0,    465.0,  0.0,    4.0},
+      { 1, 0, 0, 2, 1,   -970.0,   0.0,    2.0,    496.0,  0.0,    1.0},
+      { 3, 0, 0, 0, 0,   1575.0,   0.0,   -6.0,    -50.0,  0.0,    0.0},
+      { 3, 0, 2,-2, 2,    934.0,   0.0,   -3.0,   -399.0,  0.0,   -1.0},
+      { 0, 0, 4,-2, 2,    922.0,   0.0,   -1.0,   -395.0,  0.0,   -1.0},
+      { 0, 1, 2, 0, 1,    815.0,   0.0,   -1.0,   -422.0,  0.0,   -1.0},
+      { 0, 0,-2, 2, 1,    834.0,   0.0,    2.0,   -440.0,  0.0,    1.0},
+      { 0, 0, 2,-2, 3,   1248.0,   0.0,    0.0,   -170.0,  0.0,    1.0},
+      {-1, 0, 0, 4, 0,   1338.0,   0.0,   -5.0,    -39.0,  0.0,    0.0},
+      { 2, 0,-2, 0, 1,    716.0,   0.0,   -2.0,   -389.0,  0.0,   -1.0},
+
+   /* 91-100 */
+      {-2, 0, 0, 4, 0,   1282.0,   0.0,   -3.0,    -23.0,  0.0,    1.0},
+      {-1,-1, 0, 2, 1,    742.0,   0.0,    1.0,   -391.0,  0.0,    0.0},
+      {-1, 0, 0, 1, 1,   1020.0,   0.0,  -25.0,   -495.0,  0.0,  -10.0},
+      { 0, 1, 0, 0, 2,    715.0,   0.0,   -4.0,   -326.0,  0.0,    2.0},
+      { 0, 0,-2, 0, 1,   -666.0,   0.0,   -3.0,    369.0,  0.0,   -1.0},
+      { 0,-1, 2, 0, 1,   -667.0,   0.0,    1.0,    346.0,  0.0,    1.0},
+      { 0, 0, 2,-1, 2,   -704.0,   0.0,    0.0,    304.0,  0.0,    0.0},
+      { 0, 0, 2, 4, 2,   -694.0,   0.0,    5.0,    294.0,  0.0,    2.0},
+      {-2,-1, 0, 2, 0,  -1014.0,   0.0,   -1.0,      4.0,  0.0,   -1.0},
+      { 1, 1, 0,-2, 1,   -585.0,   0.0,   -2.0,    316.0,  0.0,   -1.0},
+
+   /* 101-110 */
+      {-1, 1, 0, 2, 0,   -949.0,   0.0,    1.0,      8.0,  0.0,   -1.0},
+      {-1, 1, 0, 1, 2,   -595.0,   0.0,    0.0,    258.0,  0.0,    0.0},
+      { 1,-1, 0, 0, 1,    528.0,   0.0,    0.0,   -279.0,  0.0,    0.0},
+      { 1,-1, 2, 2, 2,   -590.0,   0.0,    4.0,    252.0,  0.0,    2.0},
+      {-1, 1, 2, 2, 2,    570.0,   0.0,   -2.0,   -244.0,  0.0,   -1.0},
+      { 3, 0, 2, 0, 1,   -502.0,   0.0,    3.0,    250.0,  0.0,    2.0},
+      { 0, 1,-2, 2, 0,   -875.0,   0.0,    1.0,     29.0,  0.0,    0.0},
+      {-1, 0, 0,-2, 1,   -492.0,   0.0,   -3.0,    275.0,  0.0,   -1.0},
+      { 0, 1, 2, 2, 2,    535.0,   0.0,   -2.0,   -228.0,  0.0,   -1.0},
+      {-1,-1, 2, 2, 1,   -467.0,   0.0,    1.0,    240.0,  0.0,    1.0},
+
+   /* 111-120 */
+      { 0,-1, 0, 0, 2,    591.0,   0.0,    0.0,   -253.0,  0.0,    0.0},
+      { 1, 0, 2,-4, 1,   -453.0,   0.0,   -1.0,    244.0,  0.0,   -1.0},
+      {-1, 0,-2, 2, 0,    766.0,   0.0,    1.0,      9.0,  0.0,    0.0},
+      { 0,-1, 2, 2, 1,   -446.0,   0.0,    2.0,    225.0,  0.0,    1.0},
+      { 2,-1, 2, 0, 2,   -488.0,   0.0,    2.0,    207.0,  0.0,    1.0},
+      { 0, 0, 0, 2, 2,   -468.0,   0.0,    0.0,    201.0,  0.0,    0.0},
+      { 1,-1, 2, 0, 1,   -421.0,   0.0,    1.0,    216.0,  0.0,    1.0},
+      {-1, 1, 2, 0, 2,    463.0,   0.0,    0.0,   -200.0,  0.0,    0.0},
+      { 0, 1, 0, 2, 0,   -673.0,   0.0,    2.0,     14.0,  0.0,    0.0},
+      { 0,-1,-2, 2, 0,    658.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+
+   /* 121-130 */
+      { 0, 3, 2,-2, 2,   -438.0,   0.0,    0.0,    188.0,  0.0,    0.0},
+      { 0, 0, 0, 1, 1,   -390.0,   0.0,    0.0,    205.0,  0.0,    0.0},
+      {-1, 0, 2, 2, 0,    639.0, -11.0,   -2.0,    -19.0,  0.0,    0.0},
+      { 2, 1, 2, 0, 2,    412.0,   0.0,   -2.0,   -176.0,  0.0,   -1.0},
+      { 1, 1, 0, 0, 1,   -361.0,   0.0,    0.0,    189.0,  0.0,    0.0},
+      { 1, 1, 2, 0, 1,    360.0,   0.0,   -1.0,   -185.0,  0.0,   -1.0},
+      { 2, 0, 0, 2, 0,    588.0,   0.0,   -3.0,    -24.0,  0.0,    0.0},
+      { 1, 0,-2, 2, 0,   -578.0,   0.0,    1.0,      5.0,  0.0,    0.0},
+      {-1, 0, 0, 2, 2,   -396.0,   0.0,    0.0,    171.0,  0.0,    0.0},
+      { 0, 1, 0, 1, 0,    565.0,   0.0,   -1.0,     -6.0,  0.0,    0.0},
+
+   /* 131-140 */
+      { 0, 1, 0,-2, 1,   -335.0,   0.0,   -1.0,    184.0,  0.0,   -1.0},
+      {-1, 0, 2,-2, 2,    357.0,   0.0,    1.0,   -154.0,  0.0,    0.0},
+      { 0, 0, 0,-1, 1,    321.0,   0.0,    1.0,   -174.0,  0.0,    0.0},
+      {-1, 1, 0, 0, 1,   -301.0,   0.0,   -1.0,    162.0,  0.0,    0.0},
+      { 1, 0, 2,-1, 2,   -334.0,   0.0,    0.0,    144.0,  0.0,    0.0},
+      { 1,-1, 0, 2, 0,    493.0,   0.0,   -2.0,    -15.0,  0.0,    0.0},
+      { 0, 0, 0, 4, 0,    494.0,   0.0,   -2.0,    -19.0,  0.0,    0.0},
+      { 1, 0, 2, 1, 2,    337.0,   0.0,   -1.0,   -143.0,  0.0,   -1.0},
+      { 0, 0, 2, 1, 1,    280.0,   0.0,   -1.0,   -144.0,  0.0,    0.0},
+      { 1, 0, 0,-2, 2,    309.0,   0.0,    1.0,   -134.0,  0.0,    0.0},
+
+   /* 141-150 */
+      {-1, 0, 2, 4, 1,   -263.0,   0.0,    2.0,    131.0,  0.0,    1.0},
+      { 1, 0,-2, 0, 1,    253.0,   0.0,    1.0,   -138.0,  0.0,    0.0},
+      { 1, 1, 2,-2, 1,    245.0,   0.0,    0.0,   -128.0,  0.0,    0.0},
+      { 0, 0, 2, 2, 0,    416.0,   0.0,   -2.0,    -17.0,  0.0,    0.0},
+      {-1, 0, 2,-1, 1,   -229.0,   0.0,    0.0,    128.0,  0.0,    0.0},
+      {-2, 0, 2, 2, 1,    231.0,   0.0,    0.0,   -120.0,  0.0,    0.0},
+      { 4, 0, 2, 0, 2,   -259.0,   0.0,    2.0,    109.0,  0.0,    1.0},
+      { 2,-1, 0, 0, 0,    375.0,   0.0,   -1.0,     -8.0,  0.0,    0.0},
+      { 2, 1, 2,-2, 2,    252.0,   0.0,    0.0,   -108.0,  0.0,    0.0},
+      { 0, 1, 2, 1, 2,   -245.0,   0.0,    1.0,    104.0,  0.0,    0.0},
+
+   /* 151-160 */
+      { 1, 0, 4,-2, 2,    243.0,   0.0,   -1.0,   -104.0,  0.0,    0.0},
+      {-1,-1, 0, 0, 1,    208.0,   0.0,    1.0,   -112.0,  0.0,    0.0},
+      { 0, 1, 0, 2, 1,    199.0,   0.0,    0.0,   -102.0,  0.0,    0.0},
+      {-2, 0, 2, 4, 1,   -208.0,   0.0,    1.0,    105.0,  0.0,    0.0},
+      { 2, 0, 2, 0, 0,    335.0,   0.0,   -2.0,    -14.0,  0.0,    0.0},
+      { 1, 0, 0, 1, 0,   -325.0,   0.0,    1.0,      7.0,  0.0,    0.0},
+      {-1, 0, 0, 4, 1,   -187.0,   0.0,    0.0,     96.0,  0.0,    0.0},
+      {-1, 0, 4, 0, 1,    197.0,   0.0,   -1.0,   -100.0,  0.0,    0.0},
+      { 2, 0, 2, 2, 1,   -192.0,   0.0,    2.0,     94.0,  0.0,    1.0},
+      { 0, 0, 2,-3, 2,   -188.0,   0.0,    0.0,     83.0,  0.0,    0.0},
+
+   /* 161-170 */
+      {-1,-2, 0, 2, 0,    276.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 2, 1, 0, 0, 0,   -286.0,   0.0,    1.0,      6.0,  0.0,    0.0},
+      { 0, 0, 4, 0, 2,    186.0,   0.0,   -1.0,    -79.0,  0.0,    0.0},
+      { 0, 0, 0, 0, 3,   -219.0,   0.0,    0.0,     43.0,  0.0,    0.0},
+      { 0, 3, 0, 0, 0,    276.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 0, 0, 2,-4, 1,   -153.0,   0.0,   -1.0,     84.0,  0.0,    0.0},
+      { 0,-1, 0, 2, 1,   -156.0,   0.0,    0.0,     81.0,  0.0,    0.0},
+      { 0, 0, 0, 4, 1,   -154.0,   0.0,    1.0,     78.0,  0.0,    0.0},
+      {-1,-1, 2, 4, 2,   -174.0,   0.0,    1.0,     75.0,  0.0,    0.0},
+      { 1, 0, 2, 4, 2,   -163.0,   0.0,    2.0,     69.0,  0.0,    1.0},
+
+   /* 171-180 */
+      {-2, 2, 0, 2, 0,   -228.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      {-2,-1, 2, 0, 1,     91.0,   0.0,   -4.0,    -54.0,  0.0,   -2.0},
+      {-2, 0, 0, 2, 2,    175.0,   0.0,    0.0,    -75.0,  0.0,    0.0},
+      {-1,-1, 2, 0, 2,   -159.0,   0.0,    0.0,     69.0,  0.0,    0.0},
+      { 0, 0, 4,-2, 1,    141.0,   0.0,    0.0,    -72.0,  0.0,    0.0},
+      { 3, 0, 2,-2, 1,    147.0,   0.0,    0.0,    -75.0,  0.0,    0.0},
+      {-2,-1, 0, 2, 1,   -132.0,   0.0,    0.0,     69.0,  0.0,    0.0},
+      { 1, 0, 0,-1, 1,    159.0,   0.0,  -28.0,    -54.0,  0.0,   11.0},
+      { 0,-2, 0, 2, 0,    213.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      {-2, 0, 0, 4, 1,    123.0,   0.0,    0.0,    -64.0,  0.0,    0.0},
+
+   /* 181-190 */
+      {-3, 0, 0, 0, 1,   -118.0,   0.0,   -1.0,     66.0,  0.0,    0.0},
+      { 1, 1, 2, 2, 2,    144.0,   0.0,   -1.0,    -61.0,  0.0,    0.0},
+      { 0, 0, 2, 4, 1,   -121.0,   0.0,    1.0,     60.0,  0.0,    0.0},
+      { 3, 0, 2, 2, 2,   -134.0,   0.0,    1.0,     56.0,  0.0,    1.0},
+      {-1, 1, 2,-2, 1,   -105.0,   0.0,    0.0,     57.0,  0.0,    0.0},
+      { 2, 0, 0,-4, 1,   -102.0,   0.0,    0.0,     56.0,  0.0,    0.0},
+      { 0, 0, 0,-2, 2,    120.0,   0.0,    0.0,    -52.0,  0.0,    0.0},
+      { 2, 0, 2,-4, 1,    101.0,   0.0,    0.0,    -54.0,  0.0,    0.0},
+      {-1, 1, 0, 2, 1,   -113.0,   0.0,    0.0,     59.0,  0.0,    0.0},
+      { 0, 0, 2,-1, 1,   -106.0,   0.0,    0.0,     61.0,  0.0,    0.0},
+
+   /* 191-200 */
+      { 0,-2, 2, 2, 2,   -129.0,   0.0,    1.0,     55.0,  0.0,    0.0},
+      { 2, 0, 0, 2, 1,   -114.0,   0.0,    0.0,     57.0,  0.0,    0.0},
+      { 4, 0, 2,-2, 2,    113.0,   0.0,   -1.0,    -49.0,  0.0,    0.0},
+      { 2, 0, 0,-2, 2,   -102.0,   0.0,    0.0,     44.0,  0.0,    0.0},
+      { 0, 2, 0, 0, 1,    -94.0,   0.0,    0.0,     51.0,  0.0,    0.0},
+      { 1, 0, 0,-4, 1,   -100.0,   0.0,   -1.0,     56.0,  0.0,    0.0},
+      { 0, 2, 2,-2, 1,     87.0,   0.0,    0.0,    -47.0,  0.0,    0.0},
+      {-3, 0, 0, 4, 0,    161.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      {-1, 1, 2, 0, 1,     96.0,   0.0,    0.0,    -50.0,  0.0,    0.0},
+      {-1,-1, 0, 4, 0,    151.0,   0.0,   -1.0,     -5.0,  0.0,    0.0},
+
+   /* 201-210 */
+      {-1,-2, 2, 2, 2,   -104.0,   0.0,    0.0,     44.0,  0.0,    0.0},
+      {-2,-1, 2, 4, 2,   -110.0,   0.0,    0.0,     48.0,  0.0,    0.0},
+      { 1,-1, 2, 2, 1,   -100.0,   0.0,    1.0,     50.0,  0.0,    0.0},
+      {-2, 1, 0, 2, 0,     92.0,   0.0,   -5.0,     12.0,  0.0,   -2.0},
+      {-2, 1, 2, 0, 1,     82.0,   0.0,    0.0,    -45.0,  0.0,    0.0},
+      { 2, 1, 0,-2, 1,     82.0,   0.0,    0.0,    -45.0,  0.0,    0.0},
+      {-3, 0, 2, 0, 1,    -78.0,   0.0,    0.0,     41.0,  0.0,    0.0},
+      {-2, 0, 2,-2, 1,    -77.0,   0.0,    0.0,     43.0,  0.0,    0.0},
+      {-1, 1, 0, 2, 2,      2.0,   0.0,    0.0,     54.0,  0.0,    0.0},
+      { 0,-1, 2,-1, 2,     94.0,   0.0,    0.0,    -40.0,  0.0,    0.0},
+
+   /* 211-220 */
+      {-1, 0, 4,-2, 2,    -93.0,   0.0,    0.0,     40.0,  0.0,    0.0},
+      { 0,-2, 2, 0, 2,    -83.0,   0.0,   10.0,     40.0,  0.0,   -2.0},
+      {-1, 0, 2, 1, 2,     83.0,   0.0,    0.0,    -36.0,  0.0,    0.0},
+      { 2, 0, 0, 0, 2,    -91.0,   0.0,    0.0,     39.0,  0.0,    0.0},
+      { 0, 0, 2, 0, 3,    128.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      {-2, 0, 4, 0, 2,    -79.0,   0.0,    0.0,     34.0,  0.0,    0.0},
+      {-1, 0,-2, 0, 1,    -83.0,   0.0,    0.0,     47.0,  0.0,    0.0},
+      {-1, 1, 2, 2, 1,     84.0,   0.0,    0.0,    -44.0,  0.0,    0.0},
+      { 3, 0, 0, 0, 1,     83.0,   0.0,    0.0,    -43.0,  0.0,    0.0},
+      {-1, 0, 2, 3, 2,     91.0,   0.0,    0.0,    -39.0,  0.0,    0.0},
+
+   /* 221-230 */
+      { 2,-1, 2, 0, 1,    -77.0,   0.0,    0.0,     39.0,  0.0,    0.0},
+      { 0, 1, 2, 2, 1,     84.0,   0.0,    0.0,    -43.0,  0.0,    0.0},
+      { 0,-1, 2, 4, 2,    -92.0,   0.0,    1.0,     39.0,  0.0,    0.0},
+      { 2,-1, 2, 2, 2,    -92.0,   0.0,    1.0,     39.0,  0.0,    0.0},
+      { 0, 2,-2, 2, 0,    -94.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1,-1, 2,-1, 1,     68.0,   0.0,    0.0,    -36.0,  0.0,    0.0},
+      { 0,-2, 0, 0, 1,    -61.0,   0.0,    0.0,     32.0,  0.0,    0.0},
+      { 1, 0, 2,-4, 2,     71.0,   0.0,    0.0,    -31.0,  0.0,    0.0},
+      { 1,-1, 0,-2, 1,     62.0,   0.0,    0.0,    -34.0,  0.0,    0.0},
+      {-1,-1, 2, 0, 1,    -63.0,   0.0,    0.0,     33.0,  0.0,    0.0},
+
+   /* 231-240 */
+      { 1,-1, 2,-2, 2,    -73.0,   0.0,    0.0,     32.0,  0.0,    0.0},
+      {-2,-1, 0, 4, 0,    115.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-1, 0, 0, 3, 0,   -103.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-2,-1, 2, 2, 2,     63.0,   0.0,    0.0,    -28.0,  0.0,    0.0},
+      { 0, 2, 2, 0, 2,     74.0,   0.0,    0.0,    -32.0,  0.0,    0.0},
+      { 1, 1, 0, 2, 0,   -103.0,   0.0,   -3.0,      3.0,  0.0,   -1.0},
+      { 2, 0, 2,-1, 2,    -69.0,   0.0,    0.0,     30.0,  0.0,    0.0},
+      { 1, 0, 2, 1, 1,     57.0,   0.0,    0.0,    -29.0,  0.0,    0.0},
+      { 4, 0, 0, 0, 0,     94.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      { 2, 1, 2, 0, 1,     64.0,   0.0,    0.0,    -33.0,  0.0,    0.0},
+
+   /* 241-250 */
+      { 3,-1, 2, 0, 2,    -63.0,   0.0,    0.0,     26.0,  0.0,    0.0},
+      {-2, 2, 0, 2, 1,    -38.0,   0.0,    0.0,     20.0,  0.0,    0.0},
+      { 1, 0, 2,-3, 1,    -43.0,   0.0,    0.0,     24.0,  0.0,    0.0},
+      { 1, 1, 2,-4, 1,    -45.0,   0.0,    0.0,     23.0,  0.0,    0.0},
+      {-1,-1, 2,-2, 1,     47.0,   0.0,    0.0,    -24.0,  0.0,    0.0},
+      { 0,-1, 0,-1, 1,    -48.0,   0.0,    0.0,     25.0,  0.0,    0.0},
+      { 0,-1, 0,-2, 1,     45.0,   0.0,    0.0,    -26.0,  0.0,    0.0},
+      {-2, 0, 0, 0, 2,     56.0,   0.0,    0.0,    -25.0,  0.0,    0.0},
+      {-2, 0,-2, 2, 0,     88.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-1, 0,-2, 4, 0,    -75.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+
+   /* 251-260 */
+      { 1,-2, 0, 0, 0,     85.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 1, 0, 1, 1,     49.0,   0.0,    0.0,    -26.0,  0.0,    0.0},
+      {-1, 2, 0, 2, 0,    -74.0,   0.0,   -3.0,     -1.0,  0.0,   -1.0},
+      { 1,-1, 2,-2, 1,    -39.0,   0.0,    0.0,     21.0,  0.0,    0.0},
+      { 1, 2, 2,-2, 2,     45.0,   0.0,    0.0,    -20.0,  0.0,    0.0},
+      { 2,-1, 2,-2, 2,     51.0,   0.0,    0.0,    -22.0,  0.0,    0.0},
+      { 1, 0, 2,-1, 1,    -40.0,   0.0,    0.0,     21.0,  0.0,    0.0},
+      { 2, 1, 2,-2, 1,     41.0,   0.0,    0.0,    -21.0,  0.0,    0.0},
+      {-2, 0, 0,-2, 1,    -42.0,   0.0,    0.0,     24.0,  0.0,    0.0},
+      { 1,-2, 2, 0, 2,    -51.0,   0.0,    0.0,     22.0,  0.0,    0.0},
+
+   /* 261-270 */
+      { 0, 1, 2, 1, 1,    -42.0,   0.0,    0.0,     22.0,  0.0,    0.0},
+      { 1, 0, 4,-2, 1,     39.0,   0.0,    0.0,    -21.0,  0.0,    0.0},
+      {-2, 0, 4, 2, 2,     46.0,   0.0,    0.0,    -18.0,  0.0,    0.0},
+      { 1, 1, 2, 1, 2,    -53.0,   0.0,    0.0,     22.0,  0.0,    0.0},
+      { 1, 0, 0, 4, 0,     82.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      { 1, 0, 2, 2, 0,     81.0,   0.0,   -1.0,     -4.0,  0.0,    0.0},
+      { 2, 0, 2, 1, 2,     47.0,   0.0,    0.0,    -19.0,  0.0,    0.0},
+      { 3, 1, 2, 0, 2,     53.0,   0.0,    0.0,    -23.0,  0.0,    0.0},
+      { 4, 0, 2, 0, 1,    -45.0,   0.0,    0.0,     22.0,  0.0,    0.0},
+      {-2,-1, 2, 0, 0,    -44.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+
+   /* 271-280 */
+      { 0, 1,-2, 2, 1,    -33.0,   0.0,    0.0,     16.0,  0.0,    0.0},
+      { 1, 0,-2, 1, 0,    -61.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      { 0,-1,-2, 2, 1,     28.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
+      { 2,-1, 0,-2, 1,    -38.0,   0.0,    0.0,     19.0,  0.0,    0.0},
+      {-1, 0, 2,-1, 2,    -33.0,   0.0,    0.0,     21.0,  0.0,    0.0},
+      { 1, 0, 2,-3, 2,    -60.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 1, 2,-2, 3,     48.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
+      { 0, 0, 2,-3, 1,     27.0,   0.0,    0.0,    -14.0,  0.0,    0.0},
+      {-1, 0,-2, 2, 1,     38.0,   0.0,    0.0,    -20.0,  0.0,    0.0},
+      { 0, 0, 2,-4, 2,     31.0,   0.0,    0.0,    -13.0,  0.0,    0.0},
+
+   /* 281-290 */
+      {-2, 1, 0, 0, 1,    -29.0,   0.0,    0.0,     15.0,  0.0,    0.0},
+      {-1, 0, 0,-1, 1,     28.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
+      { 2, 0, 2,-4, 2,    -32.0,   0.0,    0.0,     15.0,  0.0,    0.0},
+      { 0, 0, 4,-4, 4,     45.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
+      { 0, 0, 4,-4, 2,    -44.0,   0.0,    0.0,     19.0,  0.0,    0.0},
+      {-1,-2, 0, 2, 1,     28.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
+      {-2, 0, 0, 3, 0,    -51.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 0,-2, 2, 1,    -36.0,   0.0,    0.0,     20.0,  0.0,    0.0},
+      {-3, 0, 2, 2, 2,     44.0,   0.0,    0.0,    -19.0,  0.0,    0.0},
+      {-3, 0, 2, 2, 1,     26.0,   0.0,    0.0,    -14.0,  0.0,    0.0},
+
+   /* 291-300 */
+      {-2, 0, 2, 2, 0,    -60.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 2,-1, 0, 0, 1,     35.0,   0.0,    0.0,    -18.0,  0.0,    0.0},
+      {-2, 1, 2, 2, 2,    -27.0,   0.0,    0.0,     11.0,  0.0,    0.0},
+      { 1, 1, 0, 1, 0,     47.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 0, 1, 4,-2, 2,     36.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
+      {-1, 1, 0,-2, 1,    -36.0,   0.0,    0.0,     20.0,  0.0,    0.0},
+      { 0, 0, 0,-4, 1,    -35.0,   0.0,    0.0,     19.0,  0.0,    0.0},
+      { 1,-1, 0, 2, 1,    -37.0,   0.0,    0.0,     19.0,  0.0,    0.0},
+      { 1, 1, 0, 2, 1,     32.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
+      {-1, 2, 2, 2, 2,     35.0,   0.0,    0.0,    -14.0,  0.0,    0.0},
+
+   /* 301-310 */
+      { 3, 1, 2,-2, 2,     32.0,   0.0,    0.0,    -13.0,  0.0,    0.0},
+      { 0,-1, 0, 4, 0,     65.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 2,-1, 0, 2, 0,     47.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 0, 0, 4, 0, 1,     32.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
+      { 2, 0, 4,-2, 2,     37.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
+      {-1,-1, 2, 4, 1,    -30.0,   0.0,    0.0,     15.0,  0.0,    0.0},
+      { 1, 0, 0, 4, 1,    -32.0,   0.0,    0.0,     16.0,  0.0,    0.0},
+      { 1,-2, 2, 2, 2,    -31.0,   0.0,    0.0,     13.0,  0.0,    0.0},
+      { 0, 0, 2, 3, 2,     37.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
+      {-1, 1, 2, 4, 2,     31.0,   0.0,    0.0,    -13.0,  0.0,    0.0},
+
+   /* 311-320 */
+      { 3, 0, 0, 2, 0,     49.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-1, 0, 4, 2, 2,     32.0,   0.0,    0.0,    -13.0,  0.0,    0.0},
+      { 1, 1, 2, 2, 1,     23.0,   0.0,    0.0,    -12.0,  0.0,    0.0},
+      {-2, 0, 2, 6, 2,    -43.0,   0.0,    0.0,     18.0,  0.0,    0.0},
+      { 2, 1, 2, 2, 2,     26.0,   0.0,    0.0,    -11.0,  0.0,    0.0},
+      {-1, 0, 2, 6, 2,    -32.0,   0.0,    0.0,     14.0,  0.0,    0.0},
+      { 1, 0, 2, 4, 1,    -29.0,   0.0,    0.0,     14.0,  0.0,    0.0},
+      { 2, 0, 2, 4, 2,    -27.0,   0.0,    0.0,     12.0,  0.0,    0.0},
+      { 1, 1,-2, 1, 0,     30.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-3, 1, 2, 1, 2,    -11.0,   0.0,    0.0,      5.0,  0.0,    0.0},
+
+   /* 321-330 */
+      { 2, 0,-2, 0, 2,    -21.0,   0.0,    0.0,     10.0,  0.0,    0.0},
+      {-1, 0, 0, 1, 2,    -34.0,   0.0,    0.0,     15.0,  0.0,    0.0},
+      {-4, 0, 2, 2, 1,    -10.0,   0.0,    0.0,      6.0,  0.0,    0.0},
+      {-1,-1, 0, 1, 0,    -36.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 0,-2, 2, 2,     -9.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+      { 1, 0, 0,-1, 2,    -12.0,   0.0,    0.0,      5.0,  0.0,    0.0},
+      { 0,-1, 2,-2, 3,    -21.0,   0.0,    0.0,      5.0,  0.0,    0.0},
+      {-2, 1, 2, 0, 0,    -29.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 0, 0, 2,-2, 4,    -15.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      {-2,-2, 0, 2, 0,    -20.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+
+   /* 331-340 */
+      {-2, 0,-2, 4, 0,     28.0,   0.0,    0.0,      0.0,  0.0,   -2.0},
+      { 0,-2,-2, 2, 0,     17.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 2, 0,-2, 1,    -22.0,   0.0,    0.0,     12.0,  0.0,    0.0},
+      { 3, 0, 0,-4, 1,    -14.0,   0.0,    0.0,      7.0,  0.0,    0.0},
+      {-1, 1, 2,-2, 2,     24.0,   0.0,    0.0,    -11.0,  0.0,    0.0},
+      { 1,-1, 2,-4, 1,     11.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
+      { 1, 1, 0,-2, 2,     14.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
+      {-3, 0, 2, 0, 0,     24.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-3, 0, 2, 0, 2,     18.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
+      {-2, 0, 0, 1, 0,    -38.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+
+   /* 341-350 */
+      { 0, 0,-2, 1, 0,    -31.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-3, 0, 0, 2, 1,    -16.0,   0.0,    0.0,      8.0,  0.0,    0.0},
+      {-1,-1,-2, 2, 0,     29.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 1, 2,-4, 1,    -18.0,   0.0,    0.0,     10.0,  0.0,    0.0},
+      { 2, 1, 0,-4, 1,    -10.0,   0.0,    0.0,      5.0,  0.0,    0.0},
+      { 0, 2, 0,-2, 1,    -17.0,   0.0,    0.0,     10.0,  0.0,    0.0},
+      { 1, 0, 0,-3, 1,      9.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      {-2, 0, 2,-2, 2,     16.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
+      {-2,-1, 0, 0, 1,     22.0,   0.0,    0.0,    -12.0,  0.0,    0.0},
+      {-4, 0, 0, 2, 0,     20.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+
+   /* 351-360 */
+      { 1, 1, 0,-4, 1,    -13.0,   0.0,    0.0,      6.0,  0.0,    0.0},
+      {-1, 0, 2,-4, 1,    -17.0,   0.0,    0.0,      9.0,  0.0,    0.0},
+      { 0, 0, 4,-4, 1,    -14.0,   0.0,    0.0,      8.0,  0.0,    0.0},
+      { 0, 3, 2,-2, 2,      0.0,   0.0,    0.0,     -7.0,  0.0,    0.0},
+      {-3,-1, 0, 4, 0,     14.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-3, 0, 0, 4, 1,     19.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
+      { 1,-1,-2, 2, 0,    -34.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1,-1, 0, 2, 2,    -20.0,   0.0,    0.0,      8.0,  0.0,    0.0},
+      { 1,-2, 0, 0, 1,      9.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
+      { 1,-1, 0, 0, 2,    -18.0,   0.0,    0.0,      7.0,  0.0,    0.0},
+
+   /* 361-370 */
+      { 0, 0, 0, 1, 2,     13.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
+      {-1,-1, 2, 0, 0,     17.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1,-2, 2,-2, 2,    -12.0,   0.0,    0.0,      5.0,  0.0,    0.0},
+      { 0,-1, 2,-1, 1,     15.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
+      {-1, 0, 2, 0, 3,    -11.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      { 1, 1, 0, 0, 2,     13.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
+      {-1, 1, 2, 0, 0,    -18.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 2, 0, 0, 0,    -35.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1, 2, 2, 0, 2,      9.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      {-1, 0, 4,-2, 1,    -19.0,   0.0,    0.0,     10.0,  0.0,    0.0},
+
+   /* 371-380 */
+      { 3, 0, 2,-4, 2,    -26.0,   0.0,    0.0,     11.0,  0.0,    0.0},
+      { 1, 2, 2,-2, 1,      8.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      { 1, 0, 4,-4, 2,    -10.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+      {-2,-1, 0, 4, 1,     10.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
+      { 0,-1, 0, 2, 2,    -21.0,   0.0,    0.0,      9.0,  0.0,    0.0},
+      {-2, 1, 0, 4, 0,    -15.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-2,-1, 2, 2, 1,      9.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
+      { 2, 0,-2, 2, 0,    -29.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 0, 0, 1, 1,    -19.0,   0.0,    0.0,     10.0,  0.0,    0.0},
+      { 0, 1, 0, 2, 2,     12.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
+
+   /* 381-390 */
+      { 1,-1, 2,-1, 2,     22.0,   0.0,    0.0,     -9.0,  0.0,    0.0},
+      {-2, 0, 4, 0, 1,    -10.0,   0.0,    0.0,      5.0,  0.0,    0.0},
+      { 2, 1, 0, 0, 1,    -20.0,   0.0,    0.0,     11.0,  0.0,    0.0},
+      { 0, 1, 2, 0, 0,    -20.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0,-1, 4,-2, 2,    -17.0,   0.0,    0.0,      7.0,  0.0,    0.0},
+      { 0, 0, 4,-2, 4,     15.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 0, 2, 2, 0, 1,      8.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      {-3, 0, 0, 6, 0,     14.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1,-1, 0, 4, 1,    -12.0,   0.0,    0.0,      6.0,  0.0,    0.0},
+      { 1,-2, 0, 2, 0,     25.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+
+   /* 391-400 */
+      {-1, 0, 0, 4, 2,    -13.0,   0.0,    0.0,      6.0,  0.0,    0.0},
+      {-1,-2, 2, 2, 1,    -14.0,   0.0,    0.0,      8.0,  0.0,    0.0},
+      {-1, 0, 0,-2, 2,     13.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
+      { 1, 0,-2,-2, 1,    -17.0,   0.0,    0.0,      9.0,  0.0,    0.0},
+      { 0, 0,-2,-2, 1,    -12.0,   0.0,    0.0,      6.0,  0.0,    0.0},
+      {-2, 0,-2, 0, 1,    -10.0,   0.0,    0.0,      5.0,  0.0,    0.0},
+      { 0, 0, 0, 3, 1,     10.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
+      { 0, 0, 0, 3, 0,    -15.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1, 1, 0, 4, 0,    -22.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1,-1, 2, 2, 0,     28.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+
+   /* 401-410 */
+      {-2, 0, 2, 3, 2,     15.0,   0.0,    0.0,     -7.0,  0.0,    0.0},
+      { 1, 0, 0, 2, 2,     23.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
+      { 0,-1, 2, 1, 2,     12.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
+      { 3,-1, 0, 0, 0,     29.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 2, 0, 0, 1, 0,    -25.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      { 1,-1, 2, 0, 0,     22.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 0, 2, 1, 0,    -18.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 0, 2, 0, 3,     15.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      { 3, 1, 0, 0, 0,    -23.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 3,-1, 2,-2, 2,     12.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
+
+   /* 411-420 */
+      { 2, 0, 2,-1, 1,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+      { 1, 1, 2, 0, 0,    -19.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 0, 4,-1, 2,    -10.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+      { 1, 2, 2, 0, 2,     21.0,   0.0,    0.0,     -9.0,  0.0,    0.0},
+      {-2, 0, 0, 6, 0,     23.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 0,-1, 0, 4, 1,    -16.0,   0.0,    0.0,      8.0,  0.0,    0.0},
+      {-2,-1, 2, 4, 1,    -19.0,   0.0,    0.0,      9.0,  0.0,    0.0},
+      { 0,-2, 2, 2, 1,    -22.0,   0.0,    0.0,     10.0,  0.0,    0.0},
+      { 0,-1, 2, 2, 0,     27.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      {-1, 0, 2, 3, 1,     16.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
+
+   /* 421-430 */
+      {-2, 1, 2, 4, 2,     19.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
+      { 2, 0, 0, 2, 2,      9.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      { 2,-2, 2, 0, 2,     -9.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+      {-1, 1, 2, 3, 2,     -9.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+      { 3, 0, 2,-1, 2,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+      { 4, 0, 2,-2, 1,     18.0,   0.0,    0.0,     -9.0,  0.0,    0.0},
+      {-1, 0, 0, 6, 0,     16.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      {-1,-2, 2, 4, 2,    -10.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+      {-3, 0, 2, 6, 2,    -23.0,   0.0,    0.0,      9.0,  0.0,    0.0},
+      {-1, 0, 2, 4, 0,     16.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+
+   /* 431-440 */
+      { 3, 0, 0, 2, 1,    -12.0,   0.0,    0.0,      6.0,  0.0,    0.0},
+      { 3,-1, 2, 0, 1,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+      { 3, 0, 2, 0, 0,     30.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 1, 0, 4, 0, 2,     24.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
+      { 5, 0, 2,-2, 2,     10.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      { 0,-1, 2, 4, 1,    -16.0,   0.0,    0.0,      7.0,  0.0,    0.0},
+      { 2,-1, 2, 2, 1,    -16.0,   0.0,    0.0,      7.0,  0.0,    0.0},
+      { 0, 1, 2, 4, 2,     17.0,   0.0,    0.0,     -7.0,  0.0,    0.0},
+      { 1,-1, 2, 4, 2,    -24.0,   0.0,    0.0,     10.0,  0.0,    0.0},
+      { 3,-1, 2, 2, 2,    -12.0,   0.0,    0.0,      5.0,  0.0,    0.0},
+
+   /* 441-450 */
+      { 3, 0, 2, 2, 1,    -24.0,   0.0,    0.0,     11.0,  0.0,    0.0},
+      { 5, 0, 2, 0, 2,    -23.0,   0.0,    0.0,      9.0,  0.0,    0.0},
+      { 0, 0, 2, 6, 2,    -13.0,   0.0,    0.0,      5.0,  0.0,    0.0},
+      { 4, 0, 2, 2, 2,    -15.0,   0.0,    0.0,      7.0,  0.0,    0.0},
+      { 0,-1, 1,-1, 1,      0.0,   0.0,-1988.0,      0.0,  0.0,-1679.0},
+      {-1, 0, 1, 0, 3,      0.0,   0.0,  -63.0,      0.0,  0.0,  -27.0},
+      { 0,-2, 2,-2, 3,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 0,-1, 0, 1,      0.0,   0.0,    5.0,      0.0,  0.0,    4.0},
+      { 2,-2, 0,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      {-1, 0, 1, 0, 2,      0.0,   0.0,  364.0,      0.0,  0.0,  176.0},
+
+   /* 451-460 */
+      {-1, 0, 1, 0, 1,      0.0,   0.0,-1044.0,      0.0,  0.0, -891.0},
+      {-1,-1, 2,-1, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      {-2, 2, 0, 2, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-1, 0, 1, 0, 0,      0.0,   0.0,  330.0,      0.0,  0.0,    0.0},
+      {-4, 1, 2, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-3, 0, 2, 1, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-2,-1, 2, 0, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      { 1, 0,-2, 1, 1,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 2,-1,-2, 0, 1,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      {-4, 0, 2, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+
+   /* 461-470 */
+      {-3, 1, 0, 3, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1, 0,-1, 2, 0,      0.0,   0.0,    5.0,      0.0,  0.0,    0.0},
+      { 0,-2, 0, 0, 2,      0.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      { 0,-2, 0, 0, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-3, 0, 0, 3, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-2,-1, 0, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-1, 0,-2, 3, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-4, 0, 0, 4, 0,    -12.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 2, 1,-2, 0, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 2,-1, 0,-2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+
+   /* 471-480 */
+      { 0, 0, 1,-1, 0,     -5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1, 2, 0, 1, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-2, 1, 2, 0, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      { 1, 1, 0,-1, 1,      7.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      { 1, 0, 1,-2, 1,      0.0,   0.0,  -12.0,      0.0,  0.0,  -10.0},
+      { 0, 2, 0, 0, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 1,-1, 2,-3, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-1, 1, 2,-1, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-2, 0, 4,-2, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      {-2, 0, 4,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+
+   /* 481-490 */
+      {-2,-2, 0, 2, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      {-2, 0,-2, 4, 0,      0.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 2, 2,-4, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      { 1, 1, 2,-4, 2,      7.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      {-1, 2, 2,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 2, 0, 0,-3, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-1, 2, 0, 0, 1,     -5.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      { 0, 0, 0,-2, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1,-1, 2,-2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-1, 1, 0, 0, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+
+   /* 491-500 */
+      { 0, 0, 0,-1, 2,     -8.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      {-2, 1, 0, 1, 0,      9.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1,-2, 0,-2, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 1, 0,-2, 0, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-3, 1, 0, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1, 1,-2, 2, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1,-1, 0, 0, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      {-3, 0, 0, 2, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-3,-1, 0, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 2, 0, 2,-6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+
+   /* 501-510 */
+      { 0, 1, 2,-4, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 2, 0, 0,-4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      {-2, 1, 2,-2, 1,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 0,-1, 2,-4, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 0, 1, 0,-2, 2,      9.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      {-1, 0, 0,-2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 2, 0,-2,-2, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-4, 0, 2, 0, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-1,-1, 0,-1, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 0, 0,-2, 0, 2,      9.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+
+   /* 511-520 */
+      {-3, 0, 0, 1, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1, 0,-2, 1, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-2, 0,-2, 2, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 0, 0,-4, 2, 0,      8.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-2,-1,-2, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 0, 2,-6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-1, 0, 2,-4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 1, 0, 0,-4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 2, 1, 2,-4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      { 2, 1, 2,-4, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+
+   /* 521-530 */
+      { 0, 1, 4,-4, 4,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 1, 4,-4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      {-1,-1,-2, 4, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1,-3, 0, 2, 0,      9.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1, 0,-2, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-2,-1, 0, 3, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 0,-2, 3, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-2, 0, 0, 3, 1,     -5.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      { 0,-1, 0, 1, 0,    -13.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-3, 0, 2, 2, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+
+   /* 531-540 */
+      { 1, 1,-2, 2, 0,     10.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1, 1, 0, 2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 1,-2, 2,-2, 1,     10.0,   0.0,   13.0,      6.0,  0.0,   -5.0},
+      { 0, 0, 1, 0, 2,      0.0,   0.0,   30.0,      0.0,  0.0,   14.0},
+      { 0, 0, 1, 0, 1,      0.0,   0.0, -162.0,      0.0,  0.0, -138.0},
+      { 0, 0, 1, 0, 0,      0.0,   0.0,   75.0,      0.0,  0.0,    0.0},
+      {-1, 2, 0, 2, 1,     -7.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+      { 0, 0, 2, 0, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-2, 0, 2, 0, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 2, 0, 0,-1, 1,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+
+   /* 541-550 */
+      { 3, 0, 0,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 1, 0, 2,-2, 3,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 2, 0, 0, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 2, 0, 2,-3, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-1, 1, 4,-2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-2,-2, 0, 4, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0,-3, 0, 2, 0,      9.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 0,-2, 4, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1,-1, 0, 3, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-2, 0, 0, 4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+
+   /* 551-560 */
+      {-1, 0, 0, 3, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 2,-2, 0, 0, 0,      7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1,-1, 0, 1, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1, 0, 0, 2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0,-2, 2, 0, 1,     -6.0,   0.0,   -3.0,      3.0,  0.0,    1.0},
+      {-1, 0, 1, 2, 1,      0.0,   0.0,   -3.0,      0.0,  0.0,   -2.0},
+      {-1, 1, 0, 3, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1,-1, 2, 1, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 0,-1, 2, 0, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-2, 1, 2, 2, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+
+   /* 561-570 */
+      { 2,-2, 2,-2, 2,     -1.0,   0.0,    3.0,      3.0,  0.0,   -1.0},
+      { 1, 1, 0, 1, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 1, 0, 1, 0, 1,      0.0,   0.0,  -13.0,      0.0,  0.0,  -11.0},
+      { 1, 0, 1, 0, 0,      3.0,   0.0,    6.0,      0.0,  0.0,    0.0},
+      { 0, 2, 0, 2, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 2,-1, 2,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 0,-1, 4,-2, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      { 0, 0, 4,-2, 3,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 1, 4,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 4, 0, 2,-4, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+
+   /* 571-580 */
+      { 2, 2, 2,-2, 2,      8.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 2, 0, 4,-4, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-1,-2, 0, 4, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1,-3, 2, 2, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      {-3, 0, 2, 4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      {-3, 0, 2,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-1,-1, 0,-2, 1,      8.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      {-3, 0, 0, 0, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      {-3, 0,-2, 2, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 1, 0,-4, 1,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+
+   /* 581-590 */
+      {-2, 1, 0,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-4, 0, 0, 0, 1,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+      {-1, 0, 0,-4, 1,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      {-3, 0, 0,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 0, 0, 0, 3, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      {-1, 1, 0, 4, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 1,-2, 2, 0, 1,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      { 0, 1, 0, 3, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-1, 0, 2, 2, 3,      6.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 0, 0, 2, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+
+   /* 591-600 */
+      {-2, 0, 2, 2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-1, 1, 2, 2, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 3, 0, 0, 0, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 2, 1, 0, 1, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 2,-1, 2,-1, 2,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 0, 0, 2, 0, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 0, 0, 3, 0, 3,      0.0,   0.0,  -26.0,      0.0,  0.0,  -11.0},
+      { 0, 0, 3, 0, 2,      0.0,   0.0,  -10.0,      0.0,  0.0,   -5.0},
+      {-1, 2, 2, 2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      {-1, 0, 4, 0, 0,    -13.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+
+   /* 601-610 */
+      { 1, 2, 2, 0, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 3, 1, 2,-2, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 1, 1, 4,-2, 2,      7.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      {-2,-1, 0, 6, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0,-2, 0, 4, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-2, 0, 0, 6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-2,-2, 2, 4, 2,     -6.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 0,-3, 2, 2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 0, 0, 0, 4, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      {-1,-1, 2, 3, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+
+   /* 611-620 */
+      {-2, 0, 2, 4, 0,     13.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 2,-1, 0, 2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 1, 0, 0, 3, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 1, 0, 4, 1,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 0, 1, 0, 4, 0,    -11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1,-1, 2, 1, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 0, 0, 2, 2, 3,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 0, 2, 2, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-1, 0, 2, 2, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-2, 0, 4, 2, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+
+   /* 621-630 */
+      { 2, 1, 0, 2, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 2, 1, 0, 2, 0,    -12.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 2,-1, 2, 0, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 0, 2, 1, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 1, 2, 2, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 2, 0, 2, 0, 3,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 3, 0, 2, 0, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 1, 0, 2, 0, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      { 1, 0, 3, 0, 3,      0.0,   0.0,   -5.0,      0.0,  0.0,   -2.0},
+      { 1, 1, 2, 1, 1,     -7.0,   0.0,    0.0,      4.0,  0.0,    0.0},
+
+   /* 631-640 */
+      { 0, 2, 2, 2, 2,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 2, 1, 2, 0, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 2, 0, 4,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 4, 1, 2,-2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      {-1,-1, 0, 6, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      {-3,-1, 2, 6, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      {-1, 0, 0, 6, 1,     -5.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      {-3, 0, 2, 6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 1,-1, 0, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 1,-1, 0, 4, 0,     12.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+
+   /* 641-650 */
+      {-2, 0, 2, 5, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 1,-2, 2, 2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 3,-1, 0, 2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1,-1, 2, 2, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 0, 2, 3, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      {-1, 1, 2, 4, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 0, 1, 2, 3, 2,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      {-1, 0, 4, 2, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 2, 0, 2, 1, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 5, 0, 0, 0, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+
+   /* 651-660 */
+      { 2, 1, 2, 1, 2,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      { 1, 0, 4, 0, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 3, 1, 2, 0, 1,      7.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
+      { 3, 0, 4,-2, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      {-2,-1, 2, 6, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 0, 0, 0, 6, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0,-2, 2, 4, 2,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      {-2, 0, 2, 6, 1,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
+      { 2, 0, 0, 4, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 2, 0, 0, 4, 0,     10.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+
+   /* 661-670 */
+      { 2,-2, 2, 2, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 0, 0, 2, 4, 0,      7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 1, 0, 2, 3, 2,      7.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
+      { 4, 0, 0, 2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 2, 0, 2, 2, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
+      { 0, 0, 4, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 4,-1, 2, 0, 2,     -6.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 3, 0, 2, 1, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 2, 1, 2, 2, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 4, 1, 2, 0, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+
+   /* 671-678 */
+      {-1,-1, 2, 6, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      {-1, 0, 2, 6, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 1,-1, 2, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
+      { 1, 1, 2, 4, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
+      { 3, 1, 2, 2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
+      { 5, 0, 2, 0, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      { 2,-1, 2, 4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
+      { 2, 0, 2, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0}
+   };
+
+/* Number of terms in the luni-solar nutation model */
+   const int NLS = (int) (sizeof xls / sizeof xls[0]);
+
+/* ------------------------ */
+/* Planetary nutation model */
+/* ------------------------ */
+
+/* The units for the sine and cosine coefficients are */
+/* 0.1 microarcsecond                                 */
+
+   static const struct {
+      int nl,               /* coefficients of l, F, D and Omega */
+          nf,
+          nd,
+          nom,
+          nme,              /* coefficients of planetary longitudes */
+          nve,
+          nea,
+          nma,
+          nju,
+          nsa,
+          nur,
+          nne,
+          npa;              /* coefficient of general precession */
+      int sp,cp;            /* longitude sin, cos coefficients */
+      int se,ce;            /* obliquity sin, cos coefficients */
+   } xpl[] = {
+
+   /* 1-10 */
+      { 0, 0, 0, 0, 0,  0,  8,-16, 4, 5, 0, 0, 0, 1440,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -8, 16,-4,-5, 0, 0, 2,   56,-117,  -42, -40},
+      { 0, 0, 0, 0, 0,  0,  8,-16, 4, 5, 0, 0, 2,  125, -43,    0, -54},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0,-1, 2, 2,    0,   5,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -4,  8,-1,-5, 0, 0, 2,    3,  -7,   -3,   0},
+      { 0, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 1,    3,   0,    0,  -2},
+      { 0, 1,-1, 1, 0,  0,  3, -8, 3, 0, 0, 0, 0, -114,   0,    0,  61},
+      {-1, 0, 0, 0, 0, 10, -3,  0, 0, 0, 0, 0, 0, -219,  89,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  0,  0,-2, 6,-3, 0, 2,   -3,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0, -462,1604,    0,   0},
+
+   /* 11-20 */
+      { 0, 1,-1, 1, 0,  0, -5,  8,-3, 0, 0, 0, 0,   99,   0,    0, -53},
+      { 0, 0, 0, 0, 0,  0, -4,  8,-3, 0, 0, 0, 1,   -3,   0,    0,   2},
+      { 0, 0, 0, 0, 0,  0,  4, -8, 1, 5, 0, 0, 2,    0,   6,    2,   0},
+      { 0, 0, 0, 0, 0, -5,  6,  4, 0, 0, 0, 0, 2,    3,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 2,-5, 0, 0, 2,  -12,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 2,-5, 0, 0, 1,   14,-218,  117,   8},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 2,-5, 0, 0, 0,   31,-481, -257, -17},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 2,-5, 0, 0, 0, -491, 128,    0,   0},
+      { 0, 1,-1, 1, 0,  0, -1,  0,-2, 5, 0, 0, 0,-3084,5123, 2735,1647},
+      { 0, 0, 0, 0, 0,  0,  0,  0,-2, 5, 0, 0, 1,-1444,2409,-1286,-771},
+
+   /* 21-30 */
+      { 0, 0, 0, 0, 0,  0,  0,  0,-2, 5, 0, 0, 2,   11, -24,  -11,  -9},
+      { 2,-1,-1, 0, 0,  0,  3, -7, 0, 0, 0, 0, 0,   26,  -9,    0,   0},
+      { 1, 0,-2, 0, 0, 19,-21,  3, 0, 0, 0, 0, 0,  103, -60,    0,   0},
+      { 0, 1,-1, 1, 0,  2, -4,  0,-3, 0, 0, 0, 0,    0, -13,   -7,   0},
+      { 1, 0,-1, 1, 0,  0, -1,  0, 2, 0, 0, 0, 0,  -26, -29,  -16,  14},
+      { 0, 1,-1, 1, 0,  0, -1,  0,-4,10, 0, 0, 0,    9, -27,  -14,  -5},
+      {-2, 0, 2, 1, 0,  0,  2,  0, 0,-5, 0, 0, 0,   12,   0,    0,  -6},
+      { 0, 0, 0, 0, 0,  3, -7,  4, 0, 0, 0, 0, 0,   -7,   0,    0,   0},
+      { 0,-1, 1, 0, 0,  0,  1,  0, 1,-1, 0, 0, 0,    0,  24,    0,   0},
+      {-2, 0, 2, 1, 0,  0,  2,  0,-2, 0, 0, 0, 0,  284,   0,    0,-151},
+
+   /* 31-40 */
+      {-1, 0, 0, 0, 0, 18,-16,  0, 0, 0, 0, 0, 0,  226, 101,    0,   0},
+      {-2, 1, 1, 2, 0,  0,  1,  0,-2, 0, 0, 0, 0,    0,  -8,   -2,   0},
+      {-1, 1,-1, 1, 0, 18,-17,  0, 0, 0, 0, 0, 0,    0,  -6,   -3,   0},
+      {-1, 0, 1, 1, 0,  0,  2, -2, 0, 0, 0, 0, 0,    5,   0,    0,  -3},
+      { 0, 0, 0, 0, 0, -8, 13,  0, 0, 0, 0, 0, 2,  -41, 175,   76,  17},
+      { 0, 2,-2, 2, 0, -8, 11,  0, 0, 0, 0, 0, 0,    0,  15,    6,   0},
+      { 0, 0, 0, 0, 0, -8, 13,  0, 0, 0, 0, 0, 1,  425, 212, -133, 269},
+      { 0, 1,-1, 1, 0, -8, 12,  0, 0, 0, 0, 0, 0, 1200, 598,  319,-641},
+      { 0, 0, 0, 0, 0,  8,-13,  0, 0, 0, 0, 0, 0,  235, 334,    0,   0},
+      { 0, 1,-1, 1, 0,  8,-14,  0, 0, 0, 0, 0, 0,   11, -12,   -7,  -6},
+
+   /* 41-50 */
+      { 0, 0, 0, 0, 0,  8,-13,  0, 0, 0, 0, 0, 1,    5,  -6,    3,   3},
+      {-2, 0, 2, 1, 0,  0,  2,  0,-4, 5, 0, 0, 0,   -5,   0,    0,   3},
+      {-2, 0, 2, 2, 0,  3, -3,  0, 0, 0, 0, 0, 0,    6,   0,    0,  -3},
+      {-2, 0, 2, 0, 0,  0,  2,  0,-3, 1, 0, 0, 0,   15,   0,    0,   0},
+      { 0, 0, 0, 1, 0,  3, -5,  0, 2, 0, 0, 0, 0,   13,   0,    0,  -7},
+      {-2, 0, 2, 0, 0,  0,  2,  0,-4, 3, 0, 0, 0,   -6,  -9,    0,   0},
+      { 0,-1, 1, 0, 0,  0,  0,  2, 0, 0, 0, 0, 0,  266, -78,    0,   0},
+      { 0, 0, 0, 1, 0,  0, -1,  2, 0, 0, 0, 0, 0, -460,-435, -232, 246},
+      { 0, 1,-1, 2, 0,  0, -2,  2, 0, 0, 0, 0, 0,    0,  15,    7,   0},
+      {-1, 1, 0, 1, 0,  3, -5,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   2},
+
+   /* 51-60 */
+      {-1, 0, 1, 0, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0, 131,    0,   0},
+      {-2, 0, 2, 0, 0,  0,  2,  0,-2,-2, 0, 0, 0,    4,   0,    0,   0},
+      {-2, 2, 0, 2, 0,  0, -5,  9, 0, 0, 0, 0, 0,    0,   3,    0,   0},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 0,-1, 0, 0,    0,   4,    2,   0},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 1, 0, 0,    0,   3,    0,   0},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 0, 0, 2, 0,  -17, -19,  -10,   9},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 0, 2, 1,   -9, -11,    6,  -5},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 0, 2, 2,   -6,   0,    0,   3},
+      {-1, 0, 1, 0, 0,  0,  3, -4, 0, 0, 0, 0, 0,  -16,   8,    0,   0},
+      { 0,-1, 1, 0, 0,  0,  1,  0, 0, 2, 0, 0, 0,    0,   3,    0,   0},
+
+   /* 61-70 */
+      { 0, 1,-1, 2, 0,  0, -1,  0, 0, 2, 0, 0, 0,   11,  24,   11,  -5},
+      { 0, 0, 0, 1, 0,  0, -9, 17, 0, 0, 0, 0, 0,   -3,  -4,   -2,   1},
+      { 0, 0, 0, 2, 0, -3,  5,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
+      { 0, 1,-1, 1, 0,  0, -1,  0,-1, 2, 0, 0, 0,    0,  -8,   -4,   0},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 1,-2, 0, 0, 0,    0,   3,    0,   0},
+      { 1, 0,-2, 0, 0, 17,-16,  0,-2, 0, 0, 0, 0,    0,   5,    0,   0},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 1,-3, 0, 0, 0,    0,   3,    2,   0},
+      {-2, 0, 2, 1, 0,  0,  5, -6, 0, 0, 0, 0, 0,   -6,   4,    2,   3},
+      { 0,-2, 2, 0, 0,  0,  9,-13, 0, 0, 0, 0, 0,   -3,  -5,    0,   0},
+      { 0, 1,-1, 2, 0,  0, -1,  0, 0, 1, 0, 0, 0,   -5,   0,    0,   2},
+
+   /* 71-80 */
+      { 0, 0, 0, 1, 0,  0,  0,  0, 0, 1, 0, 0, 0,    4,  24,   13,  -2},
+      { 0,-1, 1, 0, 0,  0,  1,  0, 0, 1, 0, 0, 0,  -42,  20,    0,   0},
+      { 0,-2, 2, 0, 0,  5, -6,  0, 0, 0, 0, 0, 0,  -10, 233,    0,   0},
+      { 0,-1, 1, 1, 0,  5, -7,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
+      {-2, 0, 2, 0, 0,  6, -8,  0, 0, 0, 0, 0, 0,   78, -18,    0,   0},
+      { 2, 1,-3, 1, 0, -6,  7,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
+      { 0, 0, 0, 2, 0,  0,  0,  0, 1, 0, 0, 0, 0,    0,  -3,   -1,   0},
+      { 0,-1, 1, 1, 0,  0,  1,  0, 1, 0, 0, 0, 0,    0,  -4,   -2,   1},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 0, 2, 0, 0,    0,  -8,   -4,  -1},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 2, 0, 1,    0,  -5,    3,   0},
+
+   /* 81-90 */
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 2, 0, 2,   -7,   0,    0,   3},
+      { 0, 0, 0, 0, 0,  0, -8, 15, 0, 0, 0, 0, 2,  -14,   8,    3,   6},
+      { 0, 0, 0, 0, 0,  0, -8, 15, 0, 0, 0, 0, 1,    0,   8,   -4,   0},
+      { 0, 1,-1, 1, 0,  0, -9, 15, 0, 0, 0, 0, 0,    0,  19,   10,   0},
+      { 0, 0, 0, 0, 0,  0,  8,-15, 0, 0, 0, 0, 0,   45, -22,    0,   0},
+      { 1,-1,-1, 0, 0,  0,  8,-15, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
+      { 2, 0,-2, 0, 0,  2, -5,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
+      {-2, 0, 2, 0, 0,  0,  2,  0,-5, 5, 0, 0, 0,    0,   3,    0,   0},
+      { 2, 0,-2, 1, 0,  0, -6,  8, 0, 0, 0, 0, 0,    3,   5,    3,  -2},
+      { 2, 0,-2, 1, 0,  0, -2,  0, 3, 0, 0, 0, 0,   89, -16,   -9, -48},
+
+   /* 91-100 */
+      {-2, 1, 1, 0, 0,  0,  1,  0,-3, 0, 0, 0, 0,    0,   3,    0,   0},
+      {-2, 1, 1, 1, 0,  0,  1,  0,-3, 0, 0, 0, 0,   -3,   7,    4,   2},
+      {-2, 0, 2, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0, -349, -62,    0,   0},
+      {-2, 0, 2, 0, 0,  0,  6, -8, 0, 0, 0, 0, 0,  -15,  22,    0,   0},
+      {-2, 0, 2, 0, 0,  0,  2,  0,-1,-5, 0, 0, 0,   -3,   0,    0,   0},
+      {-1, 0, 1, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,  -53,   0,    0,   0},
+      {-1, 1, 1, 1, 0,-20, 20,  0, 0, 0, 0, 0, 0,    5,   0,    0,  -3},
+      { 1, 0,-2, 0, 0, 20,-21,  0, 0, 0, 0, 0, 0,    0,  -8,    0,   0},
+      { 0, 0, 0, 1, 0,  0,  8,-15, 0, 0, 0, 0, 0,   15,  -7,   -4,  -8},
+      { 0, 2,-2, 1, 0,  0,-10, 15, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
+
+   /* 101-110 */
+      { 0,-1, 1, 0, 0,  0,  1,  0, 1, 0, 0, 0, 0,  -21, -78,    0,   0},
+      { 0, 0, 0, 1, 0,  0,  0,  0, 1, 0, 0, 0, 0,   20, -70,  -37, -11},
+      { 0, 1,-1, 2, 0,  0, -1,  0, 1, 0, 0, 0, 0,    0,   6,    3,   0},
+      { 0, 1,-1, 1, 0,  0, -1,  0,-2, 4, 0, 0, 0,    5,   3,    2,  -2},
+      { 2, 0,-2, 1, 0, -6,  8,  0, 0, 0, 0, 0, 0,  -17,  -4,   -2,   9},
+      { 0,-2, 2, 1, 0,  5, -6,  0, 0, 0, 0, 0, 0,    0,   6,    3,   0},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0,-1, 0, 0, 1,   32,  15,   -8,  17},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 0,-1, 0, 0, 0,  174,  84,   45, -93},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 1, 0, 0, 0,   11,  56,    0,   0},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 1, 0, 0, 0,  -66, -12,   -6,  35},
+
+   /* 111-120 */
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 1, 0, 0, 1,   47,   8,    4, -25},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 1, 0, 0, 2,    0,   8,    4,   0},
+      { 0, 2,-2, 1, 0,  0, -9, 13, 0, 0, 0, 0, 0,   10, -22,  -12,  -5},
+      { 0, 0, 0, 1, 0,  0,  7,-13, 0, 0, 0, 0, 0,   -3,   0,    0,   2},
+      {-2, 0, 2, 0, 0,  0,  5, -6, 0, 0, 0, 0, 0,  -24,  12,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  9,-17, 0, 0, 0, 0, 0,    5,  -6,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -9, 17, 0, 0, 0, 0, 2,    3,   0,    0,  -2},
+      { 1, 0,-1, 1, 0,  0, -3,  4, 0, 0, 0, 0, 0,    4,   3,    1,  -2},
+      { 1, 0,-1, 1, 0, -3,  4,  0, 0, 0, 0, 0, 0,    0,  29,   15,   0},
+      { 0, 0, 0, 2, 0,  0, -1,  2, 0, 0, 0, 0, 0,   -5,  -4,   -2,   2},
+
+   /* 121-130 */
+      { 0,-1, 1, 1, 0,  0,  0,  2, 0, 0, 0, 0, 0,    8,  -3,   -1,  -5},
+      { 0,-2, 2, 0, 1,  0, -2,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
+      { 0, 0, 0, 0, 0,  3, -5,  0, 2, 0, 0, 0, 0,   10,   0,    0,   0},
+      {-2, 0, 2, 1, 0,  0,  2,  0,-3, 1, 0, 0, 0,    3,   0,    0,  -2},
+      {-2, 0, 2, 1, 0,  3, -3,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   3},
+      { 0, 0, 0, 1, 0,  8,-13,  0, 0, 0, 0, 0, 0,   46,  66,   35, -25},
+      { 0,-1, 1, 0, 0,  8,-12,  0, 0, 0, 0, 0, 0,  -14,   7,    0,   0},
+      { 0, 2,-2, 1, 0, -8, 11,  0, 0, 0, 0, 0, 0,    0,   3,    2,   0},
+      {-1, 0, 1, 0, 0,  0,  2, -2, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
+      {-1, 0, 0, 1, 0, 18,-16,  0, 0, 0, 0, 0, 0,  -68, -34,  -18,  36},
+
+   /* 131-140 */
+      { 0, 1,-1, 1, 0,  0, -1,  0,-1, 1, 0, 0, 0,    0,  14,    7,   0},
+      { 0, 0, 0, 1, 0,  3, -7,  4, 0, 0, 0, 0, 0,   10,  -6,   -3,  -5},
+      {-2, 1, 1, 1, 0,  0, -3,  7, 0, 0, 0, 0, 0,   -5,  -4,   -2,   3},
+      { 0, 1,-1, 2, 0,  0, -1,  0,-2, 5, 0, 0, 0,   -3,   5,    2,   1},
+      { 0, 0, 0, 1, 0,  0,  0,  0,-2, 5, 0, 0, 0,   76,  17,    9, -41},
+      { 0, 0, 0, 1, 0,  0, -4,  8,-3, 0, 0, 0, 0,   84, 298,  159, -45},
+      { 1, 0, 0, 1, 0,-10,  3,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
+      { 0, 2,-2, 1, 0,  0, -2,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   2},
+      {-1, 0, 0, 1, 0, 10, -3,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
+      { 0, 0, 0, 1, 0,  0,  4, -8, 3, 0, 0, 0, 0,  -82, 292,  156,  44},
+
+   /* 141-150 */
+      { 0, 0, 0, 1, 0,  0,  0,  0, 2,-5, 0, 0, 0,  -73,  17,    9,  39},
+      { 0,-1, 1, 0, 0,  0,  1,  0, 2,-5, 0, 0, 0,   -9, -16,    0,   0},
+      { 2,-1,-1, 1, 0,  0,  3, -7, 0, 0, 0, 0, 0,    3,   0,   -1,  -2},
+      {-2, 0, 2, 0, 0,  0,  2,  0, 0,-5, 0, 0, 0,   -3,   0,    0,   0},
+      { 0, 0, 0, 1, 0, -3,  7, -4, 0, 0, 0, 0, 0,   -9,  -5,   -3,   5},
+      {-2, 0, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0, -439,   0,    0,   0},
+      { 1, 0, 0, 1, 0,-18, 16,  0, 0, 0, 0, 0, 0,   57, -28,  -15, -30},
+      {-2, 1, 1, 1, 0,  0,  1,  0,-2, 0, 0, 0, 0,    0,  -6,   -3,   0},
+      { 0, 1,-1, 2, 0, -8, 12,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   2},
+      { 0, 0, 0, 1, 0, -8, 13,  0, 0, 0, 0, 0, 0,  -40,  57,   30,  21},
+
+   /* 151-160 */
+      { 0, 0, 0, 0, 0,  0,  1, -2, 0, 0, 0, 0, 1,   23,   7,    3, -13},
+      { 0, 1,-1, 1, 0,  0,  0, -2, 0, 0, 0, 0, 0,  273,  80,   43,-146},
+      { 0, 0, 0, 0, 0,  0,  1, -2, 0, 0, 0, 0, 0, -449, 430,    0,   0},
+      { 0, 1,-1, 1, 0,  0, -2,  2, 0, 0, 0, 0, 0,   -8, -47,  -25,   4},
+      { 0, 0, 0, 0, 0,  0, -1,  2, 0, 0, 0, 0, 1,    6,  47,   25,  -3},
+      {-1, 0, 1, 1, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0,  23,   13,   0},
+      {-1, 0, 1, 1, 0,  0,  3, -4, 0, 0, 0, 0, 0,   -3,   0,    0,   2},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 0,-2, 0, 0, 0,    3,  -4,   -2,  -2},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 2, 0, 0, 0,  -48,-110,  -59,  26},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 2, 0, 0, 1,   51, 114,   61, -27},
+
+   /* 161-170 */
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 2, 0, 0, 2, -133,   0,    0,  57},
+      { 0, 1,-1, 0, 0,  3, -6,  0, 0, 0, 0, 0, 0,    0,   4,    0,   0},
+      { 0, 0, 0, 1, 0, -3,  5,  0, 0, 0, 0, 0, 0,  -21,  -6,   -3,  11},
+      { 0, 1,-1, 2, 0, -3,  4,  0, 0, 0, 0, 0, 0,    0,  -3,   -1,   0},
+      { 0, 0, 0, 1, 0,  0, -2,  4, 0, 0, 0, 0, 0,  -11, -21,  -11,   6},
+      { 0, 2,-2, 1, 0, -5,  6,  0, 0, 0, 0, 0, 0,  -18,-436, -233,   9},
+      { 0,-1, 1, 0, 0,  5, -7,  0, 0, 0, 0, 0, 0,   35,  -7,    0,   0},
+      { 0, 0, 0, 1, 0,  5, -8,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},
+      {-2, 0, 2, 1, 0,  6, -8,  0, 0, 0, 0, 0, 0,   11,  -3,   -1,  -6},
+      { 0, 0, 0, 1, 0,  0, -8, 15, 0, 0, 0, 0, 0,   -5,  -3,   -1,   3},
+
+   /* 171-180 */
+      {-2, 0, 2, 1, 0,  0,  2,  0,-3, 0, 0, 0, 0,  -53,  -9,   -5,  28},
+      {-2, 0, 2, 1, 0,  0,  6, -8, 0, 0, 0, 0, 0,    0,   3,    2,   1},
+      { 1, 0,-1, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,    4,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 3,-5, 0, 0, 0,    0,  -4,    0,   0},
+      { 0, 1,-1, 1, 0,  0, -1,  0,-1, 0, 0, 0, 0,  -50, 194,  103,  27},
+      { 0, 0, 0, 0, 0,  0,  0,  0,-1, 0, 0, 0, 1,  -13,  52,   28,   7},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 0,  -91, 248,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 1,    6,  49,   26,  -3},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,   -6, -47,  -25,   3},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 1,    0,   5,    3,   0},
+
+   /* 181-190 */
+      { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 2,   52,  23,   10, -23},
+      { 0, 1,-1, 2, 0,  0, -1,  0, 0,-1, 0, 0, 0,   -3,   0,    0,   1},
+      { 0, 0, 0, 1, 0,  0,  0,  0, 0,-1, 0, 0, 0,    0,   5,    3,   0},
+      { 0,-1, 1, 0, 0,  0,  1,  0, 0,-1, 0, 0, 0,   -4,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -7, 13, 0, 0, 0, 0, 2,   -4,   8,    3,   2},
+      { 0, 0, 0, 0, 0,  0,  7,-13, 0, 0, 0, 0, 0,   10,   0,    0,   0},
+      { 2, 0,-2, 1, 0,  0, -5,  6, 0, 0, 0, 0, 0,    3,   0,    0,  -2},
+      { 0, 2,-2, 1, 0,  0, -8, 11, 0, 0, 0, 0, 0,    0,   8,    4,   0},
+      { 0, 2,-2, 1,-1,  0,  2,  0, 0, 0, 0, 0, 0,    0,   8,    4,   1},
+      {-2, 0, 2, 0, 0,  0,  4, -4, 0, 0, 0, 0, 0,   -4,   0,    0,   0},
+
+   /* 191-200 */
+      { 0, 0, 0, 0, 0,  0,  0,  0, 2,-2, 0, 0, 0,   -4,   0,    0,   0},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 3, 0, 0, 0,   -8,   4,    2,   4},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 3, 0, 0, 1,    8,  -4,   -2,  -4},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 3, 0, 0, 2,    0,  15,    7,   0},
+      {-2, 0, 2, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0, -138,   0,    0,   0},
+      { 0, 0, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,  -7,   -3,   0},
+      { 0, 0, 0, 2, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -7,   -3,   0},
+      { 2, 0,-2, 1, 0,  0, -2,  0, 2, 0, 0, 0, 0,   54,   0,    0, -29},
+      { 0, 1,-1, 2, 0,  0, -1,  0, 2, 0, 0, 0, 0,    0,  10,    4,   0},
+      { 0, 1,-1, 2, 0,  0,  0, -2, 0, 0, 0, 0, 0,   -7,   0,    0,   3},
+
+   /* 201-210 */
+      { 0, 0, 0, 1, 0,  0,  1, -2, 0, 0, 0, 0, 0,  -37,  35,   19,  20},
+      { 0,-1, 1, 0, 0,  0,  2, -2, 0, 0, 0, 0, 0,    0,   4,    0,   0},
+      { 0,-1, 1, 0, 0,  0,  1,  0, 0,-2, 0, 0, 0,   -4,   9,    0,   0},
+      { 0, 2,-2, 1, 0,  0, -2,  0, 0, 2, 0, 0, 0,    8,   0,    0,  -4},
+      { 0, 1,-1, 1, 0,  3, -6,  0, 0, 0, 0, 0, 0,   -9, -14,   -8,   5},
+      { 0, 0, 0, 0, 0,  3, -5,  0, 0, 0, 0, 0, 1,   -3,  -9,   -5,   3},
+      { 0, 0, 0, 0, 0,  3, -5,  0, 0, 0, 0, 0, 0, -145,  47,    0,   0},
+      { 0, 1,-1, 1, 0, -3,  4,  0, 0, 0, 0, 0, 0,  -10,  40,   21,   5},
+      { 0, 0, 0, 0, 0, -3,  5,  0, 0, 0, 0, 0, 1,   11, -49,  -26,  -7},
+      { 0, 0, 0, 0, 0, -3,  5,  0, 0, 0, 0, 0, 2,-2150,   0,    0, 932},
+
+   /* 211-220 */
+      { 0, 2,-2, 2, 0, -3,  3,  0, 0, 0, 0, 0, 0,  -12,   0,    0,   5},
+      { 0, 0, 0, 0, 0, -3,  5,  0, 0, 0, 0, 0, 2,   85,   0,    0, -37},
+      { 0, 0, 0, 0, 0,  0,  2, -4, 0, 0, 0, 0, 1,    4,   0,    0,  -2},
+      { 0, 1,-1, 1, 0,  0,  1, -4, 0, 0, 0, 0, 0,    3,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  0,  2, -4, 0, 0, 0, 0, 0,  -86, 153,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -2,  4, 0, 0, 0, 0, 1,   -6,   9,    5,   3},
+      { 0, 1,-1, 1, 0,  0, -3,  4, 0, 0, 0, 0, 0,    9, -13,   -7,  -5},
+      { 0, 0, 0, 0, 0,  0, -2,  4, 0, 0, 0, 0, 1,   -8,  12,    6,   4},
+      { 0, 0, 0, 0, 0,  0, -2,  4, 0, 0, 0, 0, 2,  -51,   0,    0,  22},
+      { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 2,  -11,-268, -116,   5},
+
+   /* 221-230 */
+      { 0, 2,-2, 2, 0, -5,  6,  0, 0, 0, 0, 0, 0,    0,  12,    5,   0},
+      { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 2,    0,   7,    3,   0},
+      { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 1,   31,   6,    3, -17},
+      { 0, 1,-1, 1, 0, -5,  7,  0, 0, 0, 0, 0, 0,  140,  27,   14, -75},
+      { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 1,   57,  11,    6, -30},
+      { 0, 0, 0, 0, 0,  5, -8,  0, 0, 0, 0, 0, 0,  -14, -39,    0,   0},
+      { 0, 1,-1, 2, 0,  0, -1,  0,-1, 0, 0, 0, 0,    0,  -6,   -2,   0},
+      { 0, 0, 0, 1, 0,  0,  0,  0,-1, 0, 0, 0, 0,    4,  15,    8,  -2},
+      { 0,-1, 1, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    0,   4,    0,   0},
+      { 0, 2,-2, 1, 0,  0, -2,  0, 1, 0, 0, 0, 0,   -3,   0,    0,   1},
+
+   /* 231-240 */
+      { 0, 0, 0, 0, 0,  0, -6, 11, 0, 0, 0, 0, 2,    0,  11,    5,   0},
+      { 0, 0, 0, 0, 0,  0,  6,-11, 0, 0, 0, 0, 0,    9,   6,    0,   0},
+      { 0, 0, 0, 0,-1,  0,  4,  0, 0, 0, 0, 0, 2,   -4,  10,    4,   2},
+      { 0, 0, 0, 0, 1,  0, -4,  0, 0, 0, 0, 0, 0,    5,   3,    0,   0},
+      { 2, 0,-2, 1, 0, -3,  3,  0, 0, 0, 0, 0, 0,   16,   0,    0,  -9},
+      {-2, 0, 2, 0, 0,  0,  2,  0, 0,-2, 0, 0, 0,   -3,   0,    0,   0},
+      { 0, 2,-2, 1, 0,  0, -7,  9, 0, 0, 0, 0, 0,    0,   3,    2,  -1},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 4,-5, 0, 0, 2,    7,   0,    0,  -3},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 0,  -25,  22,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 1,   42, 223,  119, -22},
+
+   /* 241-250 */
+      { 0, 1,-1, 1, 0,  0, -1,  0, 2, 0, 0, 0, 0,  -27,-143,  -77,  14},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 1,    9,  49,   26,  -5},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 2,-1166,   0,    0, 505},
+      { 0, 2,-2, 2, 0,  0, -2,  0, 2, 0, 0, 0, 0,   -5,   0,    0,   2},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 5, 0, 0, 2,   -6,   0,    0,   3},
+      { 0, 0, 0, 1, 0,  3, -5,  0, 0, 0, 0, 0, 0,   -8,   0,    1,   4},
+      { 0,-1, 1, 0, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
+      { 0, 2,-2, 1, 0, -3,  3,  0, 0, 0, 0, 0, 0,  117,   0,    0, -63},
+      { 0, 0, 0, 1, 0,  0,  2, -4, 0, 0, 0, 0, 0,   -4,   8,    4,   2},
+      { 0, 2,-2, 1, 0,  0, -4,  4, 0, 0, 0, 0, 0,    3,   0,    0,  -2},
+
+   /* 251-260 */
+      { 0, 1,-1, 2, 0, -5,  7,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   2},
+      { 0, 0, 0, 0, 0,  0,  3, -6, 0, 0, 0, 0, 0,    0,  31,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -3,  6, 0, 0, 0, 0, 1,   -5,   0,    1,   3},
+      { 0, 1,-1, 1, 0,  0, -4,  6, 0, 0, 0, 0, 0,    4,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  0, -3,  6, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
+      { 0, 0, 0, 0, 0,  0, -3,  6, 0, 0, 0, 0, 2,  -24, -13,   -6,  10},
+      { 0,-1, 1, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    3,   0,    0,   0},
+      { 0, 0, 0, 1, 0,  2, -3,  0, 0, 0, 0, 0, 0,    0, -32,  -17,   0},
+      { 0, 0, 0, 0, 0,  0, -5,  9, 0, 0, 0, 0, 2,    8,  12,    5,  -3},
+      { 0, 0, 0, 0, 0,  0, -5,  9, 0, 0, 0, 0, 1,    3,   0,    0,  -1},
+
+   /* 261-270 */
+      { 0, 0, 0, 0, 0,  0,  5, -9, 0, 0, 0, 0, 0,    7,  13,    0,   0},
+      { 0,-1, 1, 0, 0,  0,  1,  0,-2, 0, 0, 0, 0,   -3,  16,    0,   0},
+      { 0, 2,-2, 1, 0,  0, -2,  0, 2, 0, 0, 0, 0,   50,   0,    0, -27},
+      {-2, 1, 1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -5,   -3,   0},
+      { 0,-2, 2, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,   13,   0,    0,   0},
+      { 0, 0, 0, 0, 0, -6, 10,  0, 0, 0, 0, 0, 1,    0,   5,    3,   1},
+      { 0, 0, 0, 0, 0, -6, 10,  0, 0, 0, 0, 0, 2,   24,   5,    2, -11},
+      { 0, 0, 0, 0, 0, -2,  3,  0, 0, 0, 0, 0, 2,    5, -11,   -5,  -2},
+      { 0, 0, 0, 0, 0, -2,  3,  0, 0, 0, 0, 0, 1,   30,  -3,   -2, -16},
+      { 0, 1,-1, 1, 0, -2,  2,  0, 0, 0, 0, 0, 0,   18,   0,    0,  -9},
+
+   /* 271-280 */
+      { 0, 0, 0, 0, 0,  2, -3,  0, 0, 0, 0, 0, 0,    8, 614,    0,   0},
+      { 0, 0, 0, 0, 0,  2, -3,  0, 0, 0, 0, 0, 1,    3,  -3,   -1,  -2},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 3, 0, 0, 0, 1,    6,  17,    9,  -3},
+      { 0, 1,-1, 1, 0,  0, -1,  0, 3, 0, 0, 0, 0,   -3,  -9,   -5,   2},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 3, 0, 0, 0, 1,    0,   6,    3,  -1},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 3, 0, 0, 0, 2, -127,  21,    9,  55},
+      { 0, 0, 0, 0, 0,  0,  4, -8, 0, 0, 0, 0, 0,    3,   5,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -4,  8, 0, 0, 0, 0, 2,   -6, -10,   -4,   3},
+      { 0,-2, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,    5,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -4,  7, 0, 0, 0, 0, 2,   16,   9,    4,  -7},
+
+   /* 281-290 */
+      { 0, 0, 0, 0, 0,  0, -4,  7, 0, 0, 0, 0, 1,    3,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  0,  4, -7, 0, 0, 0, 0, 0,    0,  22,    0,   0},
+      { 0, 0, 0, 1, 0, -2,  3,  0, 0, 0, 0, 0, 0,    0,  19,   10,   0},
+      { 0, 2,-2, 1, 0,  0, -2,  0, 3, 0, 0, 0, 0,    7,   0,    0,  -4},
+      { 0, 0, 0, 0, 0,  0, -5, 10, 0, 0, 0, 0, 2,    0,  -5,   -2,   0},
+      { 0, 0, 0, 1, 0, -1,  2,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
+      { 0, 0, 0, 0, 0,  0,  0,  0, 4, 0, 0, 0, 2,   -9,   3,    1,   4},
+      { 0, 0, 0, 0, 0,  0, -3,  5, 0, 0, 0, 0, 2,   17,   0,    0,  -7},
+      { 0, 0, 0, 0, 0,  0, -3,  5, 0, 0, 0, 0, 1,    0,  -3,   -2,  -1},
+      { 0, 0, 0, 0, 0,  0,  3, -5, 0, 0, 0, 0, 0,  -20,  34,    0,   0},
+
+   /* 291-300 */
+      { 0, 0, 0, 0, 0,  1, -2,  0, 0, 0, 0, 0, 1,  -10,   0,    1,   5},
+      { 0, 1,-1, 1, 0,  1, -3,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   2},
+      { 0, 0, 0, 0, 0,  1, -2,  0, 0, 0, 0, 0, 0,   22, -87,    0,   0},
+      { 0, 0, 0, 0, 0, -1,  2,  0, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
+      { 0, 0, 0, 0, 0, -1,  2,  0, 0, 0, 0, 0, 2,   -3,  -6,   -2,   1},
+      { 0, 0, 0, 0, 0, -7, 11,  0, 0, 0, 0, 0, 2,  -16,  -3,   -1,   7},
+      { 0, 0, 0, 0, 0, -7, 11,  0, 0, 0, 0, 0, 1,    0,  -3,   -2,   0},
+      { 0,-2, 2, 0, 0,  4, -4,  0, 0, 0, 0, 0, 0,    4,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  2, -3, 0, 0, 0, 0, 0,  -68,  39,    0,   0},
+      { 0, 2,-2, 1, 0, -4,  4,  0, 0, 0, 0, 0, 0,   27,   0,    0, -14},
+
+   /* 301-310 */
+      { 0,-1, 1, 0, 0,  4, -5,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  1, -1, 0, 0, 0, 0, 0,  -25,   0,    0,   0},
+      { 0, 0, 0, 0, 0, -4,  7,  0, 0, 0, 0, 0, 1,  -12,  -3,   -2,   6},
+      { 0, 1,-1, 1, 0, -4,  6,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
+      { 0, 0, 0, 0, 0, -4,  7,  0, 0, 0, 0, 0, 2,    3,  66,   29,  -1},
+      { 0, 0, 0, 0, 0, -4,  6,  0, 0, 0, 0, 0, 2,  490,   0,    0,-213},
+      { 0, 0, 0, 0, 0, -4,  6,  0, 0, 0, 0, 0, 1,  -22,  93,   49,  12},
+      { 0, 1,-1, 1, 0, -4,  5,  0, 0, 0, 0, 0, 0,   -7,  28,   15,   4},
+      { 0, 0, 0, 0, 0, -4,  6,  0, 0, 0, 0, 0, 1,   -3,  13,    7,   2},
+      { 0, 0, 0, 0, 0,  4, -6,  0, 0, 0, 0, 0, 0,  -46,  14,    0,   0},
+
+   /* 311-320 */
+      {-2, 0, 2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  0,  1, 0, 0, 0, 0, 0,    2,   1,    0,   0},
+      { 0,-1, 1, 0, 0,  1,  0,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
+      { 0, 0, 0, 1, 0,  1, -1,  0, 0, 0, 0, 0, 0,  -28,   0,    0,  15},
+      { 0, 0, 0, 0, 0,  0, -1,  0, 5, 0, 0, 0, 2,    5,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  0,  1, -3, 0, 0, 0, 0, 0,    0,   3,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -1,  3, 0, 0, 0, 0, 2,  -11,   0,    0,   5},
+      { 0, 0, 0, 0, 0,  0, -7, 12, 0, 0, 0, 0, 2,    0,   3,    1,   0},
+      { 0, 0, 0, 0, 0, -1,  1,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
+      { 0, 0, 0, 0, 0, -1,  1,  0, 0, 0, 0, 0, 1,   25, 106,   57, -13},
+
+   /* 321-330 */
+      { 0, 1,-1, 1, 0, -1,  0,  0, 0, 0, 0, 0, 0,    5,  21,   11,  -3},
+      { 0, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0, 1485,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 1,   -7, -32,  -17,   4},
+      { 0, 1,-1, 1, 0,  1, -2,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},
+      { 0, 0, 0, 0, 0,  0, -2,  5, 0, 0, 0, 0, 2,   -6,  -3,   -2,   3},
+      { 0, 0, 0, 0, 0,  0, -1,  0, 4, 0, 0, 0, 2,   30,  -6,   -2, -13},
+      { 0, 0, 0, 0, 0,  0,  1,  0,-4, 0, 0, 0, 0,   -4,   4,    0,   0},
+      { 0, 0, 0, 1, 0, -1,  1,  0, 0, 0, 0, 0, 0,  -19,   0,    0,  10},
+      { 0, 0, 0, 0, 0,  0, -6, 10, 0, 0, 0, 0, 2,    0,   4,    2,  -1},
+      { 0, 0, 0, 0, 0,  0, -6, 10, 0, 0, 0, 0, 0,    0,   3,    0,   0},
+
+   /* 331-340 */
+      { 0, 2,-2, 1, 0,  0, -3,  0, 3, 0, 0, 0, 0,    4,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  0, -3,  7, 0, 0, 0, 0, 2,    0,  -3,   -1,   0},
+      {-2, 0, 2, 0, 0,  4, -4,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -5,  8, 0, 0, 0, 0, 2,    5,   3,    1,  -2},
+      { 0, 0, 0, 0, 0,  0,  5, -8, 0, 0, 0, 0, 0,    0,  11,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -1,  0, 3, 0, 0, 0, 2,  118,   0,    0, -52},
+      { 0, 0, 0, 0, 0,  0, -1,  0, 3, 0, 0, 0, 1,    0,  -5,   -3,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0,-3, 0, 0, 0, 0,  -28,  36,    0,   0},
+      { 0, 0, 0, 0, 0,  2, -4,  0, 0, 0, 0, 0, 0,    5,  -5,    0,   0},
+      { 0, 0, 0, 0, 0, -2,  4,  0, 0, 0, 0, 0, 1,   14, -59,  -31,  -8},
+
+   /* 341-350 */
+      { 0, 1,-1, 1, 0, -2,  3,  0, 0, 0, 0, 0, 0,    0,   9,    5,   1},
+      { 0, 0, 0, 0, 0, -2,  4,  0, 0, 0, 0, 0, 2, -458,   0,    0, 198},
+      { 0, 0, 0, 0, 0, -6,  9,  0, 0, 0, 0, 0, 2,    0, -45,  -20,   0},
+      { 0, 0, 0, 0, 0, -6,  9,  0, 0, 0, 0, 0, 1,    9,   0,    0,  -5},
+      { 0, 0, 0, 0, 0,  6, -9,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
+      { 0, 0, 0, 1, 0,  0,  1,  0,-2, 0, 0, 0, 0,    0,  -4,   -2,  -1},
+      { 0, 2,-2, 1, 0, -2,  2,  0, 0, 0, 0, 0, 0,   11,   0,    0,  -6},
+      { 0, 0, 0, 0, 0,  0, -4,  6, 0, 0, 0, 0, 2,    6,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  0,  4, -6, 0, 0, 0, 0, 0,  -16,  23,    0,   0},
+      { 0, 0, 0, 1, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0,  -4,   -2,   0},
+
+   /* 351-360 */
+      { 0, 0, 0, 0, 0,  0, -1,  0, 2, 0, 0, 0, 2,   -5,   0,    0,   2},
+      { 0, 0, 0, 0, 0,  0,  1,  0,-2, 0, 0, 0, 0, -166, 269,    0,   0},
+      { 0, 0, 0, 1, 0,  0,  1,  0,-1, 0, 0, 0, 0,   15,   0,    0,  -8},
+      { 0, 0, 0, 0, 0, -5,  9,  0, 0, 0, 0, 0, 2,   10,   0,    0,  -4},
+      { 0, 0, 0, 0, 0,  0,  3, -4, 0, 0, 0, 0, 0,  -78,  45,    0,   0},
+      { 0, 0, 0, 0, 0, -3,  4,  0, 0, 0, 0, 0, 2,    0,  -5,   -2,   0},
+      { 0, 0, 0, 0, 0, -3,  4,  0, 0, 0, 0, 0, 1,    7,   0,    0,  -4},
+      { 0, 0, 0, 0, 0,  3, -4,  0, 0, 0, 0, 0, 0,   -5, 328,    0,   0},
+      { 0, 0, 0, 0, 0,  3, -4,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -2},
+      { 0, 0, 0, 1, 0,  0,  2, -2, 0, 0, 0, 0, 0,    5,   0,    0,  -2},
+
+   /* 361-370 */
+      { 0, 0, 0, 1, 0,  0, -1,  0, 2, 0, 0, 0, 0,    0,   3,    1,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 0,-3, 0, 0, 0,   -3,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 1,-5, 0, 0, 0,   -3,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -1,  0, 1, 0, 0, 0, 1,    0,  -4,   -2,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,-1223, -26,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 1,    0,   7,    3,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0,-3, 5, 0, 0, 0,    3,   0,    0,   0},
+      { 0, 0, 0, 1, 0, -3,  4,  0, 0, 0, 0, 0, 0,    0,   3,    2,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 0,-2, 0, 0, 0,   -6,  20,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  2, -2, 0, 0, 0, 0, 0, -368,   0,    0,   0},
+
+   /* 371-380 */
+      { 0, 0, 0, 0, 0,  0,  1,  0, 0,-1, 0, 0, 0,  -75,   0,    0,   0},
+      { 0, 0, 0, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,   11,   0,    0,  -6},
+      { 0, 0, 0, 1, 0,  0, -2,  2, 0, 0, 0, 0, 0,    3,   0,    0,  -2},
+      { 0, 0, 0, 0, 0, -8, 14,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 2,-5, 0, 0, 0,  -13, -30,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  5, -8, 3, 0, 0, 0, 0,   21,   3,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  5, -8, 3, 0, 0, 0, 2,   -3,   0,    0,   1},
+      { 0, 0, 0, 0, 0,  0, -1,  0, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    8, -27,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  3, -8, 3, 0, 0, 0, 0,  -19, -11,    0,   0},
+
+   /* 381-390 */
+      { 0, 0, 0, 0, 0,  0, -3,  8,-3, 0, 0, 0, 2,   -4,   0,    0,   2},
+      { 0, 0, 0, 0, 0,  0,  1,  0,-2, 5, 0, 0, 2,    0,   5,    2,   0},
+      { 0, 0, 0, 0, 0, -8, 12,  0, 0, 0, 0, 0, 2,   -6,   0,    0,   2},
+      { 0, 0, 0, 0, 0, -8, 12,  0, 0, 0, 0, 0, 0,   -8,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 1,-2, 0, 0, 0,   -1,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 0, 1, 0, 0, 2,  -14,   0,    0,   6},
+      { 0, 0, 0, 0, 0,  0,  0,  2, 0, 0, 0, 0, 0,    6,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  0,  2, 0, 0, 0, 0, 2,  -74,   0,    0,  32},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 0, 2, 0, 0, 2,    0,  -3,   -1,   0},
+      { 0, 2,-2, 1, 0, -5,  5,  0, 0, 0, 0, 0, 0,    4,   0,    0,  -2},
+
+   /* 391-400 */
+      { 0, 0, 0, 0, 0,  0,  1,  0, 1, 0, 0, 0, 0,    8,  11,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 1, 0, 0, 0, 1,    0,   3,    2,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 1, 0, 0, 0, 2, -262,   0,    0, 114},
+      { 0, 0, 0, 0, 0,  3, -6,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
+      { 0, 0, 0, 0, 0, -3,  6,  0, 0, 0, 0, 0, 1,   -7,   0,    0,   4},
+      { 0, 0, 0, 0, 0, -3,  6,  0, 0, 0, 0, 0, 2,    0, -27,  -12,   0},
+      { 0, 0, 0, 0, 0,  0, -1,  4, 0, 0, 0, 0, 2,  -19,  -8,   -4,   8},
+      { 0, 0, 0, 0, 0, -5,  7,  0, 0, 0, 0, 0, 2,  202,   0,    0, -87},
+      { 0, 0, 0, 0, 0, -5,  7,  0, 0, 0, 0, 0, 1,   -8,  35,   19,   5},
+      { 0, 1,-1, 1, 0, -5,  6,  0, 0, 0, 0, 0, 0,    0,   4,    2,   0},
+
+   /* 401-410 */
+      { 0, 0, 0, 0, 0,  5, -7,  0, 0, 0, 0, 0, 0,   16,  -5,    0,   0},
+      { 0, 2,-2, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,    5,   0,    0,  -3},
+      { 0, 0, 0, 0, 0,  0, -1,  0, 1, 0, 0, 0, 0,    0,  -3,    0,   0},
+      { 0, 0, 0, 0,-1,  0,  3,  0, 0, 0, 0, 0, 2,    1,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 2, 0, 0, 0, 2,  -35, -48,  -21,  15},
+      { 0, 0, 0, 0, 0,  0, -2,  6, 0, 0, 0, 0, 2,   -3,  -5,   -2,   1},
+      { 0, 0, 0, 1, 0,  2, -2,  0, 0, 0, 0, 0, 0,    6,   0,    0,  -3},
+      { 0, 0, 0, 0, 0,  0, -6,  9, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
+      { 0, 0, 0, 0, 0,  0,  6, -9, 0, 0, 0, 0, 0,    0,  -5,    0,   0},
+      { 0, 0, 0, 0, 0, -2,  2,  0, 0, 0, 0, 0, 1,   12,  55,   29,  -6},
+
+   /* 411-420 */
+      { 0, 1,-1, 1, 0, -2,  1,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},
+      { 0, 0, 0, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0, -598,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  2, -2,  0, 0, 0, 0, 0, 1,   -3, -13,   -7,   1},
+      { 0, 0, 0, 0, 0,  0,  1,  0, 3, 0, 0, 0, 2,   -5,  -7,   -3,   2},
+      { 0, 0, 0, 0, 0,  0, -5,  7, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
+      { 0, 0, 0, 0, 0,  0,  5, -7, 0, 0, 0, 0, 0,    5,  -7,    0,   0},
+      { 0, 0, 0, 1, 0, -2,  2,  0, 0, 0, 0, 0, 0,    4,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  0,  4, -5, 0, 0, 0, 0, 0,   16,  -6,    0,   0},
+      { 0, 0, 0, 0, 0,  1, -3,  0, 0, 0, 0, 0, 0,    8,  -3,    0,   0},
+      { 0, 0, 0, 0, 0, -1,  3,  0, 0, 0, 0, 0, 1,    8, -31,  -16,  -4},
+
+   /* 421-430 */
+      { 0, 1,-1, 1, 0, -1,  2,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
+      { 0, 0, 0, 0, 0, -1,  3,  0, 0, 0, 0, 0, 2,  113,   0,    0, -49},
+      { 0, 0, 0, 0, 0, -7, 10,  0, 0, 0, 0, 0, 2,    0, -24,  -10,   0},
+      { 0, 0, 0, 0, 0, -7, 10,  0, 0, 0, 0, 0, 1,    4,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  0,  3, -3, 0, 0, 0, 0, 0,   27,   0,    0,   0},
+      { 0, 0, 0, 0, 0, -4,  8,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
+      { 0, 0, 0, 0, 0, -4,  5,  0, 0, 0, 0, 0, 2,    0,  -4,   -2,   0},
+      { 0, 0, 0, 0, 0, -4,  5,  0, 0, 0, 0, 0, 1,    5,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  4, -5,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  1, 0, 0, 0, 0, 2,  -13,   0,    0,   6},
+
+   /* 431-440 */
+      { 0, 0, 0, 0, 0,  0, -2,  0, 5, 0, 0, 0, 2,    5,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  0,  0,  3, 0, 0, 0, 0, 2,  -18, -10,   -4,   8},
+      { 0, 0, 0, 0, 0,  1,  0,  0, 0, 0, 0, 0, 0,   -4, -28,    0,   0},
+      { 0, 0, 0, 0, 0,  1,  0,  0, 0, 0, 0, 0, 2,   -5,   6,    3,   2},
+      { 0, 0, 0, 0, 0, -9, 13,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
+      { 0, 0, 0, 0, 0,  0, -1,  5, 0, 0, 0, 0, 2,   -5,  -9,   -4,   2},
+      { 0, 0, 0, 0, 0,  0, -2,  0, 4, 0, 0, 0, 2,   17,   0,    0,  -7},
+      { 0, 0, 0, 0, 0,  0,  2,  0,-4, 0, 0, 0, 0,   11,   4,    0,   0},
+      { 0, 0, 0, 0, 0,  0, -2,  7, 0, 0, 0, 0, 2,    0,  -6,   -2,   0},
+      { 0, 0, 0, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   83,  15,    0,   0},
+
+   /* 441-450 */
+      { 0, 0, 0, 0, 0, -2,  5,  0, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
+      { 0, 0, 0, 0, 0, -2,  5,  0, 0, 0, 0, 0, 2,    0,-114,  -49,   0},
+      { 0, 0, 0, 0, 0, -6,  8,  0, 0, 0, 0, 0, 2,  117,   0,    0, -51},
+      { 0, 0, 0, 0, 0, -6,  8,  0, 0, 0, 0, 0, 1,   -5,  19,   10,   2},
+      { 0, 0, 0, 0, 0,  6, -8,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
+      { 0, 0, 0, 1, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   2},
+      { 0, 0, 0, 0, 0,  0, -3,  9, 0, 0, 0, 0, 2,    0,  -3,   -1,   0},
+      { 0, 0, 0, 0, 0,  0,  5, -6, 0, 0, 0, 0, 0,    3,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  5, -6, 0, 0, 0, 0, 2,    0,  -6,   -2,   0},
+      { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,  393,   3,    0,   0},
+
+   /* 451-460 */
+      { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 1,   -4,  21,   11,   2},
+      { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 2,   -6,   0,   -1,   3},
+      { 0, 0, 0, 0, 0, -5, 10,  0, 0, 0, 0, 0, 2,   -3,   8,    4,   1},
+      { 0, 0, 0, 0, 0,  0,  4, -4, 0, 0, 0, 0, 0,    8,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  4, -4, 0, 0, 0, 0, 2,   18, -29,  -13,  -8},
+      { 0, 0, 0, 0, 0, -3,  3,  0, 0, 0, 0, 0, 1,    8,  34,   18,  -4},
+      { 0, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,   89,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 1,    3,  12,    6,  -1},
+      { 0, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 2,   54, -15,   -7, -24},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 0,-3, 0, 0, 0,    0,   3,    0,   0},
+
+   /* 461-470 */
+      { 0, 0, 0, 0, 0,  0, -5, 13, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
+      { 0, 0, 0, 0, 0,  0,  2,  0,-1, 0, 0, 0, 0,    0,  35,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  2,  0,-1, 0, 0, 0, 2, -154, -30,  -13,  67},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 0,-2, 0, 0, 0,   15,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 0,-2, 0, 0, 1,    0,   4,    2,   0},
+      { 0, 0, 0, 0, 0,  0,  3, -2, 0, 0, 0, 0, 0,    0,   9,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  3, -2, 0, 0, 0, 0, 2,   80, -71,  -31, -35},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 0,-1, 0, 0, 2,    0, -20,   -9,   0},
+      { 0, 0, 0, 0, 0,  0, -6, 15, 0, 0, 0, 0, 2,   11,   5,    2,  -5},
+      { 0, 0, 0, 0, 0, -8, 15,  0, 0, 0, 0, 0, 2,   61, -96,  -42, -27},
+
+   /* 471-480 */
+      { 0, 0, 0, 0, 0, -3,  9, -4, 0, 0, 0, 0, 2,   14,   9,    4,  -6},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 2,-5, 0, 0, 2,  -11,  -6,   -3,   5},
+      { 0, 0, 0, 0, 0,  0, -2,  8,-1,-5, 0, 0, 2,    0,  -3,   -1,   0},
+      { 0, 0, 0, 0, 0,  0,  6, -8, 3, 0, 0, 0, 2,  123,-415, -180, -53},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 0,    0,   0,    0, -35},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 1,    7, -32,  -17,  -4},
+      { 0, 1,-1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -9,   -5,   0},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 1,    0,  -4,    2,   0},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 2,  -89,   0,    0,  38},
+
+   /* 481-490 */
+      { 0, 0, 0, 0, 0,  0, -6, 16,-4,-5, 0, 0, 2,    0, -86,  -19,  -6},
+      { 0, 0, 0, 0, 0,  0, -2,  8,-3, 0, 0, 0, 2,    0,   0,  -19,   6},
+      { 0, 0, 0, 0, 0,  0, -2,  8,-3, 0, 0, 0, 2, -123,-416, -180,  53},
+      { 0, 0, 0, 0, 0,  0,  6, -8, 1, 5, 0, 0, 2,    0,  -3,   -1,   0},
+      { 0, 0, 0, 0, 0,  0,  2,  0,-2, 5, 0, 0, 2,   12,  -6,   -3,  -5},
+      { 0, 0, 0, 0, 0,  3, -5,  4, 0, 0, 0, 0, 2,  -13,   9,    4,   6},
+      { 0, 0, 0, 0, 0, -8, 11,  0, 0, 0, 0, 0, 2,    0, -15,   -7,   0},
+      { 0, 0, 0, 0, 0, -8, 11,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -1},
+      { 0, 0, 0, 0, 0, -8, 11,  0, 0, 0, 0, 0, 2,  -62, -97,  -42,  27},
+      { 0, 0, 0, 0, 0,  0, 11,  0, 0, 0, 0, 0, 2,  -11,   5,    2,   5},
+
+   /* 491-500 */
+      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 1, 0, 0, 2,    0, -19,   -8,   0},
+      { 0, 0, 0, 0, 0,  3, -3,  0, 2, 0, 0, 0, 2,   -3,   0,    0,   1},
+      { 0, 2,-2, 1, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,   4,    2,   0},
+      { 0, 1,-1, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,   3,    0,   0},
+      { 0, 2,-2, 1, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,   4,    2,   0},
+      { 0, 0, 0, 0, 0,  0,  1,  2, 0, 0, 0, 0, 2,  -85, -70,  -31,  37},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 1, 0, 0, 0, 2,  163, -12,   -5, -72},
+      { 0, 0, 0, 0, 0, -3,  7,  0, 0, 0, 0, 0, 2,  -63, -16,   -7,  28},
+      { 0, 0, 0, 0, 0,  0,  0,  4, 0, 0, 0, 0, 2,  -21, -32,  -14,   9},
+      { 0, 0, 0, 0, 0, -5,  6,  0, 0, 0, 0, 0, 2,    0,  -3,   -1,   0},
+
+   /* 501-510 */
+      { 0, 0, 0, 0, 0, -5,  6,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -2},
+      { 0, 0, 0, 0, 0,  5, -6,  0, 0, 0, 0, 0, 0,    0,   8,    0,   0},
+      { 0, 0, 0, 0, 0,  5, -6,  0, 0, 0, 0, 0, 2,    3,  10,    4,  -1},
+      { 0, 0, 0, 0, 0,  0,  2,  0, 2, 0, 0, 0, 2,    3,   0,    0,  -1},
+      { 0, 0, 0, 0, 0,  0, -1,  6, 0, 0, 0, 0, 2,    0,  -7,   -3,   0},
+      { 0, 0, 0, 0, 0,  0,  7, -9, 0, 0, 0, 0, 2,    0,  -4,   -2,   0},
+      { 0, 0, 0, 0, 0,  2, -1,  0, 0, 0, 0, 0, 0,    6,  19,    0,   0},
+      { 0, 0, 0, 0, 0,  2, -1,  0, 0, 0, 0, 0, 2,    5,-173,  -75,  -2},
+      { 0, 0, 0, 0, 0,  0,  6, -7, 0, 0, 0, 0, 2,    0,  -7,   -3,   0},
+      { 0, 0, 0, 0, 0,  0,  5, -5, 0, 0, 0, 0, 2,    7, -12,   -5,  -3},
+
+   /* 511-520 */
+      { 0, 0, 0, 0, 0, -1,  4,  0, 0, 0, 0, 0, 1,   -3,   0,    0,   2},
+      { 0, 0, 0, 0, 0, -1,  4,  0, 0, 0, 0, 0, 2,    3,  -4,   -2,  -1},
+      { 0, 0, 0, 0, 0, -7,  9,  0, 0, 0, 0, 0, 2,   74,   0,    0, -32},
+      { 0, 0, 0, 0, 0, -7,  9,  0, 0, 0, 0, 0, 1,   -3,  12,    6,   2},
+      { 0, 0, 0, 0, 0,  0,  4, -3, 0, 0, 0, 0, 2,   26, -14,   -6, -11},
+      { 0, 0, 0, 0, 0,  0,  3, -1, 0, 0, 0, 0, 2,   19,   0,    0,  -8},
+      { 0, 0, 0, 0, 0, -4,  4,  0, 0, 0, 0, 0, 1,    6,  24,   13,  -3},
+      { 0, 0, 0, 0, 0,  4, -4,  0, 0, 0, 0, 0, 0,   83,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  4, -4,  0, 0, 0, 0, 0, 1,    0, -10,   -5,   0},
+      { 0, 0, 0, 0, 0,  4, -4,  0, 0, 0, 0, 0, 2,   11,  -3,   -1,  -5},
+
+   /* 521-530 */
+      { 0, 0, 0, 0, 0,  0,  2,  1, 0, 0, 0, 0, 2,    3,   0,    1,  -1},
+      { 0, 0, 0, 0, 0,  0, -3,  0, 5, 0, 0, 0, 2,    3,   0,    0,  -1},
+      { 0, 0, 0, 0, 0,  1,  1,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  1,  1,  0, 0, 0, 0, 0, 1,    5, -23,  -12,  -3},
+      { 0, 0, 0, 0, 0,  1,  1,  0, 0, 0, 0, 0, 2, -339,   0,    0, 147},
+      { 0, 0, 0, 0, 0, -9, 12,  0, 0, 0, 0, 0, 2,    0, -10,   -5,   0},
+      { 0, 0, 0, 0, 0,  0,  3,  0,-4, 0, 0, 0, 0,    5,   0,    0,   0},
+      { 0, 2,-2, 1, 0,  1, -1,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
+      { 0, 0, 0, 0, 0,  0,  7, -8, 0, 0, 0, 0, 2,    0,  -4,   -2,   0},
+      { 0, 0, 0, 0, 0,  0,  3,  0,-3, 0, 0, 0, 0,   18,  -3,    0,   0},
+
+   /* 531-540 */
+      { 0, 0, 0, 0, 0,  0,  3,  0,-3, 0, 0, 0, 2,    9, -11,   -5,  -4},
+      { 0, 0, 0, 0, 0, -2,  6,  0, 0, 0, 0, 0, 2,   -8,   0,    0,   4},
+      { 0, 0, 0, 0, 0, -6,  7,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -1},
+      { 0, 0, 0, 0, 0,  6, -7,  0, 0, 0, 0, 0, 0,    0,   9,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  6, -6, 0, 0, 0, 0, 2,    6,  -9,   -4,  -2},
+      { 0, 0, 0, 0, 0,  0,  3,  0,-2, 0, 0, 0, 0,   -4, -12,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  3,  0,-2, 0, 0, 0, 2,   67, -91,  -39, -29},
+      { 0, 0, 0, 0, 0,  0,  5, -4, 0, 0, 0, 0, 2,   30, -18,   -8, -13},
+      { 0, 0, 0, 0, 0,  3, -2,  0, 0, 0, 0, 0, 0,    0,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  3, -2,  0, 0, 0, 0, 0, 2,    0,-114,  -50,   0},
+
+   /* 541-550 */
+      { 0, 0, 0, 0, 0,  0,  3,  0,-1, 0, 0, 0, 2,    0,   0,    0,  23},
+      { 0, 0, 0, 0, 0,  0,  3,  0,-1, 0, 0, 0, 2,  517,  16,    7,-224},
+      { 0, 0, 0, 0, 0,  0,  3,  0, 0,-2, 0, 0, 2,    0,  -7,   -3,   0},
+      { 0, 0, 0, 0, 0,  0,  4, -2, 0, 0, 0, 0, 2,  143,  -3,   -1, -62},
+      { 0, 0, 0, 0, 0,  0,  3,  0, 0,-1, 0, 0, 2,   29,   0,    0, -13},
+      { 0, 2,-2, 1, 0,  0,  1,  0,-1, 0, 0, 0, 0,   -4,   0,    0,   2},
+      { 0, 0, 0, 0, 0, -8, 16,  0, 0, 0, 0, 0, 2,   -6,   0,    0,   3},
+      { 0, 0, 0, 0, 0,  0,  3,  0, 2,-5, 0, 0, 2,    5,  12,    5,  -2},
+      { 0, 0, 0, 0, 0,  0,  7, -8, 3, 0, 0, 0, 2,  -25,   0,    0,  11},
+      { 0, 0, 0, 0, 0,  0, -5, 16,-4,-5, 0, 0, 2,   -3,   0,    0,   1},
+
+   /* 551-560 */
+      { 0, 0, 0, 0, 0,  0,  3,  0, 0, 0, 0, 0, 2,    0,   4,    2,   0},
+      { 0, 0, 0, 0, 0,  0, -1,  8,-3, 0, 0, 0, 2,  -22,  12,    5,  10},
+      { 0, 0, 0, 0, 0, -8, 10,  0, 0, 0, 0, 0, 2,   50,   0,    0, -22},
+      { 0, 0, 0, 0, 0, -8, 10,  0, 0, 0, 0, 0, 1,    0,   7,    4,   0},
+      { 0, 0, 0, 0, 0, -8, 10,  0, 0, 0, 0, 0, 2,    0,   3,    1,   0},
+      { 0, 0, 0, 0, 0,  0,  2,  2, 0, 0, 0, 0, 2,   -4,   4,    2,   2},
+      { 0, 0, 0, 0, 0,  0,  3,  0, 1, 0, 0, 0, 2,   -5, -11,   -5,   2},
+      { 0, 0, 0, 0, 0, -3,  8,  0, 0, 0, 0, 0, 2,    0,   4,    2,   0},
+      { 0, 0, 0, 0, 0, -5,  5,  0, 0, 0, 0, 0, 1,    4,  17,    9,  -2},
+      { 0, 0, 0, 0, 0,  5, -5,  0, 0, 0, 0, 0, 0,   59,   0,    0,   0},
+
+   /* 561-570 */
+      { 0, 0, 0, 0, 0,  5, -5,  0, 0, 0, 0, 0, 1,    0,  -4,   -2,   0},
+      { 0, 0, 0, 0, 0,  5, -5,  0, 0, 0, 0, 0, 2,   -8,   0,    0,   4},
+      { 0, 0, 0, 0, 0,  2,  0,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  2,  0,  0, 0, 0, 0, 0, 1,    4, -15,   -8,  -2},
+      { 0, 0, 0, 0, 0,  2,  0,  0, 0, 0, 0, 0, 2,  370,  -8,    0,-160},
+      { 0, 0, 0, 0, 0,  0,  7, -7, 0, 0, 0, 0, 2,    0,   0,   -3,   0},
+      { 0, 0, 0, 0, 0,  0,  7, -7, 0, 0, 0, 0, 2,    0,   3,    1,   0},
+      { 0, 0, 0, 0, 0,  0,  6, -5, 0, 0, 0, 0, 2,   -6,   3,    1,   3},
+      { 0, 0, 0, 0, 0,  7, -8,  0, 0, 0, 0, 0, 0,    0,   6,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  5, -3, 0, 0, 0, 0, 2,  -10,   0,    0,   4},
+
+   /* 571-580 */
+      { 0, 0, 0, 0, 0,  4, -3,  0, 0, 0, 0, 0, 2,    0,   9,    4,   0},
+      { 0, 0, 0, 0, 0,  1,  2,  0, 0, 0, 0, 0, 2,    4,  17,    7,  -2},
+      { 0, 0, 0, 0, 0, -9, 11,  0, 0, 0, 0, 0, 2,   34,   0,    0, -15},
+      { 0, 0, 0, 0, 0, -9, 11,  0, 0, 0, 0, 0, 1,    0,   5,    3,   0},
+      { 0, 0, 0, 0, 0,  0,  4,  0,-4, 0, 0, 0, 2,   -5,   0,    0,   2},
+      { 0, 0, 0, 0, 0,  0,  4,  0,-3, 0, 0, 0, 2,  -37,  -7,   -3,  16},
+      { 0, 0, 0, 0, 0, -6,  6,  0, 0, 0, 0, 0, 1,    3,  13,    7,  -2},
+      { 0, 0, 0, 0, 0,  6, -6,  0, 0, 0, 0, 0, 0,   40,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  6, -6,  0, 0, 0, 0, 0, 1,    0,  -3,   -2,   0},
+      { 0, 0, 0, 0, 0,  0,  4,  0,-2, 0, 0, 0, 2, -184,  -3,   -1,  80},
+
+   /* 581-590 */
+      { 0, 0, 0, 0, 0,  0,  6, -4, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
+      { 0, 0, 0, 0, 0,  3, -1,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  3, -1,  0, 0, 0, 0, 0, 1,    0, -10,   -6,  -1},
+      { 0, 0, 0, 0, 0,  3, -1,  0, 0, 0, 0, 0, 2,   31,  -6,    0, -13},
+      { 0, 0, 0, 0, 0,  0,  4,  0,-1, 0, 0, 0, 2,   -3, -32,  -14,   1},
+      { 0, 0, 0, 0, 0,  0,  4,  0, 0,-2, 0, 0, 2,   -7,   0,    0,   3},
+      { 0, 0, 0, 0, 0,  0,  5, -2, 0, 0, 0, 0, 2,    0,  -8,   -4,   0},
+      { 0, 0, 0, 0, 0,  0,  4,  0, 0, 0, 0, 0, 0,    3,  -4,    0,   0},
+      { 0, 0, 0, 0, 0,  8, -9,  0, 0, 0, 0, 0, 0,    0,   4,    0,   0},
+      { 0, 0, 0, 0, 0,  5, -4,  0, 0, 0, 0, 0, 2,    0,   3,    1,   0},
+
+   /* 591-600 */
+      { 0, 0, 0, 0, 0,  2,  1,  0, 0, 0, 0, 0, 2,   19, -23,  -10,   2},
+      { 0, 0, 0, 0, 0,  2,  1,  0, 0, 0, 0, 0, 1,    0,   0,    0, -10},
+      { 0, 0, 0, 0, 0,  2,  1,  0, 0, 0, 0, 0, 1,    0,   3,    2,   0},
+      { 0, 0, 0, 0, 0, -7,  7,  0, 0, 0, 0, 0, 1,    0,   9,    5,  -1},
+      { 0, 0, 0, 0, 0,  7, -7,  0, 0, 0, 0, 0, 0,   28,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 1,    0,  -7,   -4,   0},
+      { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 2,    8,  -4,    0,  -4},
+      { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 0,    0,   0,   -2,   0},
+      { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 0,    0,   3,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  5,  0,-4, 0, 0, 0, 2,   -3,   0,    0,   1},
+
+   /* 601-610 */
+      { 0, 0, 0, 0, 0,  0,  5,  0,-3, 0, 0, 0, 2,   -9,   0,    1,   4},
+      { 0, 0, 0, 0, 0,  0,  5,  0,-2, 0, 0, 0, 2,    3,  12,    5,  -1},
+      { 0, 0, 0, 0, 0,  3,  0,  0, 0, 0, 0, 0, 2,   17,  -3,   -1,   0},
+      { 0, 0, 0, 0, 0, -8,  8,  0, 0, 0, 0, 0, 1,    0,   7,    4,   0},
+      { 0, 0, 0, 0, 0,  8, -8,  0, 0, 0, 0, 0, 0,   19,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  5, -3,  0, 0, 0, 0, 0, 1,    0,  -5,   -3,   0},
+      { 0, 0, 0, 0, 0,  5, -3,  0, 0, 0, 0, 0, 2,   14,  -3,    0,  -1},
+      { 0, 0, 0, 0, 0, -9,  9,  0, 0, 0, 0, 0, 1,    0,   0,   -1,   0},
+      { 0, 0, 0, 0, 0, -9,  9,  0, 0, 0, 0, 0, 1,    0,   0,    0,  -5},
+      { 0, 0, 0, 0, 0, -9,  9,  0, 0, 0, 0, 0, 1,    0,   5,    3,   0},
+
+   /* 611-620 */
+      { 0, 0, 0, 0, 0,  9, -9,  0, 0, 0, 0, 0, 0,   13,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  6, -4,  0, 0, 0, 0, 0, 1,    0,  -3,   -2,   0},
+      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 2,    2,   9,    4,   3},
+      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 0,    0,   0,    0,  -4},
+      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 0,    8,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 1,    0,   4,    2,   0},
+      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 2,    6,   0,    0,  -3},
+      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 0,    6,   0,    0,   0},
+      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 1,    0,   3,    1,   0},
+      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 2,    5,   0,    0,  -2},
+
+   /* 621-630 */
+      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
+      { 1, 0,-2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   0},
+      { 1, 0,-2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    6,   0,    0,   0},
+      { 1, 0,-2, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    7,   0,    0,   0},
+      { 1, 0,-2, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   0},
+      {-1, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,    4,   0,    0,   0},
+      {-1, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,    6,   0,    0,   0},
+      {-1, 0, 2, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -4,    0,   0},
+      { 1, 0,-2, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -4,    0,   0},
+      {-2, 0, 2, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    5,   0,    0,   0},
+
+   /* 631-640 */
+      {-1, 0, 0, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   -3,   0,    0,   0},
+      {-1, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    4,   0,    0,   0},
+      {-1, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
+      {-1, 0, 2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    4,   0,    0,   0},
+      { 1,-1, 1, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,   3,    0,   0},
+      {-1, 0, 2, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   13,   0,    0,   0},
+      {-2, 0, 0, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   21,  11,    0,   0},
+      { 1, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -5,    0,   0},
+      {-1, 1,-1, 1, 0,  0, -1,  0, 0, 0, 0, 0, 0,    0,  -5,   -2,   0},
+      { 1, 1,-1, 1, 0,  0, -1,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},
+
+   /* 641-650 */
+      {-1, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -5,    0,   0},
+      {-1, 0, 2, 1, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   2},
+      { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,   20,  10,    0,   0},
+      {-1, 0, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,  -34,   0,    0,   0},
+      {-1, 0, 2, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,  -19,   0,    0,   0},
+      { 1, 0,-2, 1, 0,  0, -2,  0, 2, 0, 0, 0, 0,    3,   0,    0,  -2},
+      { 1, 2,-2, 2, 0, -3,  3,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
+      { 1, 2,-2, 2, 0,  0, -2,  0, 2, 0, 0, 0, 0,   -6,   0,    0,   3},
+      { 1, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   0},
+      { 1, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    3,   0,    0,   0},
+
+   /* 651-660 */
+      { 0, 0,-2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    3,   0,    0,   0},
+      { 0, 0,-2, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    4,   0,    0,   0},
+      { 0, 2, 0, 2, 0, -2,  2,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
+      { 0, 2, 0, 2, 0,  0, -1,  0, 1, 0, 0, 0, 0,    6,   0,    0,  -3},
+      { 0, 2, 0, 2, 0, -1,  1,  0, 0, 0, 0, 0, 0,   -8,   0,    0,   3},
+      { 0, 2, 0, 2, 0, -2,  3,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
+      { 0, 0, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   0},
+      { 0, 1, 1, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -3,   -2,   0},
+      { 1, 2, 0, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,  126, -63,  -27, -55},
+      {-1, 2, 0, 2, 0, 10, -3,  0, 0, 0, 0, 0, 0,   -5,   0,    1,   2},
+
+   /* 661-670 */
+      { 0, 1, 1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,   -3,  28,   15,   2},
+      { 1, 2, 0, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,    5,   0,    1,  -2},
+      { 0, 2, 0, 2, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,   9,    4,   1},
+      { 0, 2, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,   9,    4,  -1},
+      {-1, 2, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0, -126, -63,  -27,  55},
+      { 2, 2,-2, 2, 0,  0, -2,  0, 3, 0, 0, 0, 0,    3,   0,    0,  -1},
+      { 1, 2, 0, 1, 0,  0, -2,  0, 3, 0, 0, 0, 0,   21, -11,   -6, -11},
+      { 0, 1, 1, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
+      {-1, 2, 0, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,  -21, -11,   -6,  11},
+      {-2, 2, 2, 2, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   1},
+
+   /* 671-680 */
+      { 0, 2, 0, 2, 0,  2, -3,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
+      { 0, 2, 0, 2, 0,  1, -1,  0, 0, 0, 0, 0, 0,    8,   0,    0,  -4},
+      { 0, 2, 0, 2, 0,  0,  1,  0,-1, 0, 0, 0, 0,   -6,   0,    0,   3},
+      { 0, 2, 0, 2, 0,  2, -2,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
+      {-1, 2, 2, 2, 0,  0, -1,  0, 1, 0, 0, 0, 0,    3,   0,    0,  -1},
+      { 1, 2, 0, 2, 0, -1,  1,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
+      {-1, 2, 2, 2, 0,  0,  2,  0,-3, 0, 0, 0, 0,   -5,   0,    0,   2},
+      { 2, 2, 0, 2, 0,  0,  2,  0,-3, 0, 0, 0, 0,   24, -12,   -5, -11},
+      { 1, 2, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,   3,    1,   0},
+      { 1, 2, 0, 2, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,   3,    1,   0},
+
+   /* 681-687 */
+      { 1, 1, 1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,   3,    2,   0},
+      { 0, 2, 0, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,  -24, -12,   -5,  10},
+      { 2, 2, 0, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    4,   0,   -1,  -2},
+      {-1, 2, 2, 2, 0,  0,  2,  0,-2, 0, 0, 0, 0,   13,   0,    0,  -6},
+      {-1, 2, 2, 2, 0,  3, -3,  0, 0, 0, 0, 0, 0,    7,   0,    0,  -3},
+      { 1, 2, 0, 2, 0,  1, -1,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
+      { 0, 2, 2, 2, 0,  0,  2,  0,-2, 0, 0, 0, 0,    3,   0,    0,  -1}
+   };
+
+/* Number of terms in the planetary nutation model */
+   const int NPL = (int) (sizeof xpl / sizeof xpl[0]);
+
+/*--------------------------------------------------------------------*/
+
+/* Interval between fundamental date J2000.0 and given date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* ------------------- */
+/* LUNI-SOLAR NUTATION */
+/* ------------------- */
+
+/* Fundamental (Delaunay) arguments */
+
+/* Mean anomaly of the Moon (IERS 2003). */
+   el = eraFal03(t);
+
+/* Mean anomaly of the Sun (MHB2000). */
+   elp = fmod(1287104.79305  +
+            t * (129596581.0481  +
+            t * (-0.5532  +
+            t * (0.000136  +
+            t * (-0.00001149)))), ERFA_TURNAS) * ERFA_DAS2R;
+
+/* Mean longitude of the Moon minus that of the ascending node */
+/* (IERS 2003. */
+   f = eraFaf03(t);
+
+/* Mean elongation of the Moon from the Sun (MHB2000). */
+   d = fmod(1072260.70369  +
+          t * (1602961601.2090  +
+          t * (-6.3706  +
+          t * (0.006593  +
+          t * (-0.00003169)))), ERFA_TURNAS) * ERFA_DAS2R;
+
+/* Mean longitude of the ascending node of the Moon (IERS 2003). */
+   om = eraFaom03(t);
+
+/* Initialize the nutation values. */
+   dp = 0.0;
+   de = 0.0;
+
+/* Summation of luni-solar nutation series (in reverse order). */
+   for (i = NLS-1; i >= 0; i--) {
+
+   /* Argument and functions. */
+      arg = fmod((double)xls[i].nl  * el +
+                 (double)xls[i].nlp * elp +
+                 (double)xls[i].nf  * f +
+                 (double)xls[i].nd  * d +
+                 (double)xls[i].nom * om, ERFA_D2PI);
+      sarg = sin(arg);
+      carg = cos(arg);
+
+   /* Term. */
+      dp += (xls[i].sp + xls[i].spt * t) * sarg + xls[i].cp * carg;
+      de += (xls[i].ce + xls[i].cet * t) * carg + xls[i].se * sarg;
+   }
+
+/* Convert from 0.1 microarcsec units to radians. */
+   dpsils = dp * U2R;
+   depsls = de * U2R;
+
+/* ------------------ */
+/* PLANETARY NUTATION */
+/* ------------------ */
+
+/* n.b.  The MHB2000 code computes the luni-solar and planetary nutation */
+/* in different functions, using slightly different Delaunay */
+/* arguments in the two cases.  This behaviour is faithfully */
+/* reproduced here.  Use of the IERS 2003 expressions for both */
+/* cases leads to negligible changes, well below */
+/* 0.1 microarcsecond. */
+
+/* Mean anomaly of the Moon (MHB2000). */
+   al = fmod(2.35555598 + 8328.6914269554 * t, ERFA_D2PI);
+
+/* Mean longitude of the Moon minus that of the ascending node */
+/*(MHB2000). */
+   af = fmod(1.627905234 + 8433.466158131 * t, ERFA_D2PI);
+
+/* Mean elongation of the Moon from the Sun (MHB2000). */
+   ad = fmod(5.198466741 + 7771.3771468121 * t, ERFA_D2PI);
+
+/* Mean longitude of the ascending node of the Moon (MHB2000). */
+   aom = fmod(2.18243920 - 33.757045 * t, ERFA_D2PI);
+
+/* General accumulated precession in longitude (IERS 2003). */
+   apa = eraFapa03(t);
+
+/* Planetary longitudes, Mercury through Uranus (IERS 2003). */
+   alme = eraFame03(t);
+   alve = eraFave03(t);
+   alea = eraFae03(t);
+   alma = eraFama03(t);
+   alju = eraFaju03(t);
+   alsa = eraFasa03(t);
+   alur = eraFaur03(t);
+
+/* Neptune longitude (MHB2000). */
+   alne = fmod(5.321159000 + 3.8127774000 * t, ERFA_D2PI);
+
+/* Initialize the nutation values. */
+   dp = 0.0;
+   de = 0.0;
+
+/* Summation of planetary nutation series (in reverse order). */
+   for (i = NPL-1; i >= 0; i--) {
+
+   /* Argument and functions. */
+      arg = fmod((double)xpl[i].nl  * al   +
+                 (double)xpl[i].nf  * af   +
+                 (double)xpl[i].nd  * ad   +
+                 (double)xpl[i].nom * aom  +
+                 (double)xpl[i].nme * alme +
+                 (double)xpl[i].nve * alve +
+                 (double)xpl[i].nea * alea +
+                 (double)xpl[i].nma * alma +
+                 (double)xpl[i].nju * alju +
+                 (double)xpl[i].nsa * alsa +
+                 (double)xpl[i].nur * alur +
+                 (double)xpl[i].nne * alne +
+                 (double)xpl[i].npa * apa, ERFA_D2PI);
+      sarg = sin(arg);
+      carg = cos(arg);
+
+   /* Term. */
+      dp += (double)xpl[i].sp * sarg + (double)xpl[i].cp * carg;
+      de += (double)xpl[i].se * sarg + (double)xpl[i].ce * carg;
+
+   }
+
+/* Convert from 0.1 microarcsec units to radians. */
+   dpsipl = dp * U2R;
+   depspl = de * U2R;
+
+/* ------- */
+/* RESULTS */
+/* ------- */
+
+/* Add luni-solar and planetary components. */
+   *dpsi = dpsils + dpsipl;
+   *deps = depsls + depspl;
+
+   return;
+
+}
+
+void eraNut00b(double date1, double date2, double *dpsi, double *deps)
+/*
+**  - - - - - - - - - -
+**   e r a N u t 0 0 b
+**  - - - - - - - - - -
+**
+**  Nutation, IAU 2000B model.
+**
+**  Given:
+**     date1,date2   double    TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     dpsi,deps     double    nutation, luni-solar + planetary (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The nutation components in longitude and obliquity are in radians
+**     and with respect to the equinox and ecliptic of date.  The
+**     obliquity at J2000.0 is assumed to be the Lieske et al. (1977)
+**     value of 84381.448 arcsec.  (The errors that result from using
+**     this function with the IAU 2006 value of 84381.406 arcsec can be
+**     neglected.)
+**
+**     The nutation model consists only of luni-solar terms, but
+**     includes also a fixed offset which compensates for certain long-
+**     period planetary terms (Note 7).
+**
+**  3) This function is an implementation of the IAU 2000B abridged
+**     nutation model formally adopted by the IAU General Assembly in
+**     2000.  The function computes the MHB_2000_SHORT luni-solar
+**     nutation series (Luzum 2001), but without the associated
+**     corrections for the precession rate adjustments and the offset
+**     between the GCRS and J2000.0 mean poles.
+**
+**  4) The full IAU 2000A (MHB2000) nutation model contains nearly 1400
+**     terms.  The IAU 2000B model (McCarthy & Luzum 2003) contains only
+**     77 terms, plus additional simplifications, yet still delivers
+**     results of 1 mas accuracy at present epochs.  This combination of
+**     accuracy and size makes the IAU 2000B abridged nutation model
+**     suitable for most practical applications.
+**
+**     The function delivers a pole accurate to 1 mas from 1900 to 2100
+**     (usually better than 1 mas, very occasionally just outside
+**     1 mas).  The full IAU 2000A model, which is implemented in the
+**     function eraNut00a (q.v.), delivers considerably greater accuracy
+**     at current dates;  however, to realize this improved accuracy,
+**     corrections for the essentially unpredictable free-core-nutation
+**     (FCN) must also be included.
+**
+**  5) The present function provides classical nutation.  The
+**     MHB_2000_SHORT algorithm, from which it is adapted, deals also
+**     with (i) the offsets between the GCRS and mean poles and (ii) the
+**     adjustments in longitude and obliquity due to the changed
+**     precession rates.  These additional functions, namely frame bias
+**     and precession adjustments, are supported by the ERFA functions
+**     eraBi00  and eraPr00.
+**
+**  6) The MHB_2000_SHORT algorithm also provides "total" nutations,
+**     comprising the arithmetic sum of the frame bias, precession
+**     adjustments, and nutation (luni-solar + planetary).  These total
+**     nutations can be used in combination with an existing IAU 1976
+**     precession implementation, such as eraPmat76,  to deliver GCRS-
+**     to-true predictions of mas accuracy at current epochs.  However,
+**     for symmetry with the eraNut00a  function (q.v. for the reasons),
+**     the ERFA functions do not generate the "total nutations"
+**     directly.  Should they be required, they could of course easily
+**     be generated by calling eraBi00, eraPr00 and the present function
+**     and adding the results.
+**
+**  7) The IAU 2000B model includes "planetary bias" terms that are
+**     fixed in size but compensate for long-period nutations.  The
+**     amplitudes quoted in McCarthy & Luzum (2003), namely
+**     Dpsi = -1.5835 mas and Depsilon = +1.6339 mas, are optimized for
+**     the "total nutations" method described in Note 6.  The Luzum
+**     (2001) values used in this ERFA implementation, namely -0.135 mas
+**     and +0.388 mas, are optimized for the "rigorous" method, where
+**     frame bias, precession and nutation are applied separately and in
+**     that order.  During the interval 1995-2050, the ERFA
+**     implementation delivers a maximum error of 1.001 mas (not
+**     including FCN).
+**
+**  References:
+**
+**     Lieske, J.H., Lederle, T., Fricke, W., Morando, B., "Expressions
+**     for the precession quantities based upon the IAU /1976/ system of
+**     astronomical constants", Astron.Astrophys. 58, 1-2, 1-16. (1977)
+**
+**     Luzum, B., private communication, 2001 (Fortran code
+**     MHB_2000_SHORT)
+**
+**     McCarthy, D.D. & Luzum, B.J., "An abridged model of the
+**     precession-nutation of the celestial pole", Cel.Mech.Dyn.Astron.
+**     85, 37-49 (2003)
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J., Astron.Astrophys. 282, 663-683 (1994)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t, el, elp, f, d, om, arg, dp, de, sarg, carg,
+          dpsils, depsls, dpsipl, depspl;
+   int i;
+
+/* Units of 0.1 microarcsecond to radians */
+   static const double U2R = ERFA_DAS2R / 1e7;
+
+/* ---------------------------------------- */
+/* Fixed offsets in lieu of planetary terms */
+/* ---------------------------------------- */
+
+   static const double DPPLAN = -0.135 * ERFA_DMAS2R;
+   static const double DEPLAN =  0.388 * ERFA_DMAS2R;
+
+/* --------------------------------------------------- */
+/* Luni-solar nutation: argument and term coefficients */
+/* --------------------------------------------------- */
+
+/* The units for the sine and cosine coefficients are */
+/* 0.1 microarcsec and the same per Julian century    */
+
+   static const struct {
+      int nl,nlp,nf,nd,nom; /* coefficients of l,l',F,D,Om */
+      double ps,pst,pc;     /* longitude sin, t*sin, cos coefficients */
+      double ec,ect,es;     /* obliquity cos, t*cos, sin coefficients */
+
+   } x[] = {
+
+   /* 1-10 */
+      { 0, 0, 0, 0,1,
+         -172064161.0, -174666.0, 33386.0, 92052331.0, 9086.0, 15377.0},
+      { 0, 0, 2,-2,2,
+           -13170906.0, -1675.0, -13696.0, 5730336.0, -3015.0, -4587.0},
+      { 0, 0, 2, 0,2,-2276413.0,-234.0, 2796.0, 978459.0,-485.0,1374.0},
+      { 0, 0, 0, 0,2,2074554.0,  207.0, -698.0,-897492.0, 470.0,-291.0},
+      { 0, 1, 0, 0,0,1475877.0,-3633.0,11817.0, 73871.0,-184.0,-1924.0},
+      { 0, 1, 2,-2,2,-516821.0, 1226.0, -524.0, 224386.0,-677.0,-174.0},
+      { 1, 0, 0, 0,0, 711159.0,   73.0, -872.0,  -6750.0,   0.0, 358.0},
+      { 0, 0, 2, 0,1,-387298.0, -367.0,  380.0, 200728.0,  18.0, 318.0},
+      { 1, 0, 2, 0,2,-301461.0,  -36.0,  816.0, 129025.0, -63.0, 367.0},
+      { 0,-1, 2,-2,2, 215829.0, -494.0,  111.0, -95929.0, 299.0, 132.0},
+
+   /* 11-20 */
+      { 0, 0, 2,-2,1, 128227.0,  137.0,  181.0, -68982.0,  -9.0,  39.0},
+      {-1, 0, 2, 0,2, 123457.0,   11.0,   19.0, -53311.0,  32.0,  -4.0},
+      {-1, 0, 0, 2,0, 156994.0,   10.0, -168.0,  -1235.0,   0.0,  82.0},
+      { 1, 0, 0, 0,1,  63110.0,   63.0,   27.0, -33228.0,   0.0,  -9.0},
+      {-1, 0, 0, 0,1, -57976.0,  -63.0, -189.0,  31429.0,   0.0, -75.0},
+      {-1, 0, 2, 2,2, -59641.0,  -11.0,  149.0,  25543.0, -11.0,  66.0},
+      { 1, 0, 2, 0,1, -51613.0,  -42.0,  129.0,  26366.0,   0.0,  78.0},
+      {-2, 0, 2, 0,1,  45893.0,   50.0,   31.0, -24236.0, -10.0,  20.0},
+      { 0, 0, 0, 2,0,  63384.0,   11.0, -150.0,  -1220.0,   0.0,  29.0},
+      { 0, 0, 2, 2,2, -38571.0,   -1.0,  158.0,  16452.0, -11.0,  68.0},
+
+   /* 21-30 */
+      { 0,-2, 2,-2,2,  32481.0,    0.0,    0.0, -13870.0,   0.0,   0.0},
+      {-2, 0, 0, 2,0, -47722.0,    0.0,  -18.0,    477.0,   0.0, -25.0},
+      { 2, 0, 2, 0,2, -31046.0,   -1.0,  131.0,  13238.0, -11.0,  59.0},
+      { 1, 0, 2,-2,2,  28593.0,    0.0,   -1.0, -12338.0,  10.0,  -3.0},
+      {-1, 0, 2, 0,1,  20441.0,   21.0,   10.0, -10758.0,   0.0,  -3.0},
+      { 2, 0, 0, 0,0,  29243.0,    0.0,  -74.0,   -609.0,   0.0,  13.0},
+      { 0, 0, 2, 0,0,  25887.0,    0.0,  -66.0,   -550.0,   0.0,  11.0},
+      { 0, 1, 0, 0,1, -14053.0,  -25.0,   79.0,   8551.0,  -2.0, -45.0},
+      {-1, 0, 0, 2,1,  15164.0,   10.0,   11.0,  -8001.0,   0.0,  -1.0},
+      { 0, 2, 2,-2,2, -15794.0,   72.0,  -16.0,   6850.0, -42.0,  -5.0},
+
+   /* 31-40 */
+      { 0, 0,-2, 2,0,  21783.0,    0.0,   13.0,   -167.0,   0.0,  13.0},
+      { 1, 0, 0,-2,1, -12873.0,  -10.0,  -37.0,   6953.0,   0.0, -14.0},
+      { 0,-1, 0, 0,1, -12654.0,   11.0,   63.0,   6415.0,   0.0,  26.0},
+      {-1, 0, 2, 2,1, -10204.0,    0.0,   25.0,   5222.0,   0.0,  15.0},
+      { 0, 2, 0, 0,0,  16707.0,  -85.0,  -10.0,    168.0,  -1.0,  10.0},
+      { 1, 0, 2, 2,2,  -7691.0,    0.0,   44.0,   3268.0,   0.0,  19.0},
+      {-2, 0, 2, 0,0, -11024.0,    0.0,  -14.0,    104.0,   0.0,   2.0},
+      { 0, 1, 2, 0,2,   7566.0,  -21.0,  -11.0,  -3250.0,   0.0,  -5.0},
+      { 0, 0, 2, 2,1,  -6637.0,  -11.0,   25.0,   3353.0,   0.0,  14.0},
+      { 0,-1, 2, 0,2,  -7141.0,   21.0,    8.0,   3070.0,   0.0,   4.0},
+
+   /* 41-50 */
+      { 0, 0, 0, 2,1,  -6302.0,  -11.0,    2.0,   3272.0,   0.0,   4.0},
+      { 1, 0, 2,-2,1,   5800.0,   10.0,    2.0,  -3045.0,   0.0,  -1.0},
+      { 2, 0, 2,-2,2,   6443.0,    0.0,   -7.0,  -2768.0,   0.0,  -4.0},
+      {-2, 0, 0, 2,1,  -5774.0,  -11.0,  -15.0,   3041.0,   0.0,  -5.0},
+      { 2, 0, 2, 0,1,  -5350.0,    0.0,   21.0,   2695.0,   0.0,  12.0},
+      { 0,-1, 2,-2,1,  -4752.0,  -11.0,   -3.0,   2719.0,   0.0,  -3.0},
+      { 0, 0, 0,-2,1,  -4940.0,  -11.0,  -21.0,   2720.0,   0.0,  -9.0},
+      {-1,-1, 0, 2,0,   7350.0,    0.0,   -8.0,    -51.0,   0.0,   4.0},
+      { 2, 0, 0,-2,1,   4065.0,    0.0,    6.0,  -2206.0,   0.0,   1.0},
+      { 1, 0, 0, 2,0,   6579.0,    0.0,  -24.0,   -199.0,   0.0,   2.0},
+
+   /* 51-60 */
+      { 0, 1, 2,-2,1,   3579.0,    0.0,    5.0,  -1900.0,   0.0,   1.0},
+      { 1,-1, 0, 0,0,   4725.0,    0.0,   -6.0,    -41.0,   0.0,   3.0},
+      {-2, 0, 2, 0,2,  -3075.0,    0.0,   -2.0,   1313.0,   0.0,  -1.0},
+      { 3, 0, 2, 0,2,  -2904.0,    0.0,   15.0,   1233.0,   0.0,   7.0},
+      { 0,-1, 0, 2,0,   4348.0,    0.0,  -10.0,    -81.0,   0.0,   2.0},
+      { 1,-1, 2, 0,2,  -2878.0,    0.0,    8.0,   1232.0,   0.0,   4.0},
+      { 0, 0, 0, 1,0,  -4230.0,    0.0,    5.0,    -20.0,   0.0,  -2.0},
+      {-1,-1, 2, 2,2,  -2819.0,    0.0,    7.0,   1207.0,   0.0,   3.0},
+      {-1, 0, 2, 0,0,  -4056.0,    0.0,    5.0,     40.0,   0.0,  -2.0},
+      { 0,-1, 2, 2,2,  -2647.0,    0.0,   11.0,   1129.0,   0.0,   5.0},
+
+   /* 61-70 */
+      {-2, 0, 0, 0,1,  -2294.0,    0.0,  -10.0,   1266.0,   0.0,  -4.0},
+      { 1, 1, 2, 0,2,   2481.0,    0.0,   -7.0,  -1062.0,   0.0,  -3.0},
+      { 2, 0, 0, 0,1,   2179.0,    0.0,   -2.0,  -1129.0,   0.0,  -2.0},
+      {-1, 1, 0, 1,0,   3276.0,    0.0,    1.0,     -9.0,   0.0,   0.0},
+      { 1, 1, 0, 0,0,  -3389.0,    0.0,    5.0,     35.0,   0.0,  -2.0},
+      { 1, 0, 2, 0,0,   3339.0,    0.0,  -13.0,   -107.0,   0.0,   1.0},
+      {-1, 0, 2,-2,1,  -1987.0,    0.0,   -6.0,   1073.0,   0.0,  -2.0},
+      { 1, 0, 0, 0,2,  -1981.0,    0.0,    0.0,    854.0,   0.0,   0.0},
+      {-1, 0, 0, 1,0,   4026.0,    0.0, -353.0,   -553.0,   0.0,-139.0},
+      { 0, 0, 2, 1,2,   1660.0,    0.0,   -5.0,   -710.0,   0.0,  -2.0},
+
+   /* 71-77 */
+      {-1, 0, 2, 4,2,  -1521.0,    0.0,    9.0,    647.0,   0.0,   4.0},
+      {-1, 1, 0, 1,1,   1314.0,    0.0,    0.0,   -700.0,   0.0,   0.0},
+      { 0,-2, 2,-2,1,  -1283.0,    0.0,    0.0,    672.0,   0.0,   0.0},
+      { 1, 0, 2, 2,1,  -1331.0,    0.0,    8.0,    663.0,   0.0,   4.0},
+      {-2, 0, 2, 2,2,   1383.0,    0.0,   -2.0,   -594.0,   0.0,  -2.0},
+      {-1, 0, 0, 0,2,   1405.0,    0.0,    4.0,   -610.0,   0.0,   2.0},
+      { 1, 1, 2,-2,2,   1290.0,    0.0,    0.0,   -556.0,   0.0,   0.0}
+   };
+
+/* Number of terms in the series */
+   const int NLS = (int) (sizeof x / sizeof x[0]);
+
+/*--------------------------------------------------------------------*/
+
+/* Interval between fundamental epoch J2000.0 and given date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* --------------------*/
+/* LUNI-SOLAR NUTATION */
+/* --------------------*/
+
+/* Fundamental (Delaunay) arguments from Simon et al. (1994) */
+
+/* Mean anomaly of the Moon. */
+   el = fmod(485868.249036 + (1717915923.2178) * t, ERFA_TURNAS) * ERFA_DAS2R;
+
+/* Mean anomaly of the Sun. */
+   elp = fmod(1287104.79305 + (129596581.0481) * t, ERFA_TURNAS) * ERFA_DAS2R;
+
+/* Mean argument of the latitude of the Moon. */
+   f = fmod(335779.526232 + (1739527262.8478) * t, ERFA_TURNAS) * ERFA_DAS2R;
+
+/* Mean elongation of the Moon from the Sun. */
+   d = fmod(1072260.70369 + (1602961601.2090) * t, ERFA_TURNAS) * ERFA_DAS2R;
+
+/* Mean longitude of the ascending node of the Moon. */
+   om = fmod(450160.398036 + (-6962890.5431) * t, ERFA_TURNAS) * ERFA_DAS2R;
+
+/* Initialize the nutation values. */
+   dp = 0.0;
+   de = 0.0;
+
+/* Summation of luni-solar nutation series (smallest terms first). */
+   for (i = NLS-1; i >= 0; i--) {
+
+   /* Argument and functions. */
+      arg = fmod( (double)x[i].nl  * el  +
+                  (double)x[i].nlp * elp +
+                  (double)x[i].nf  * f   +
+                  (double)x[i].nd  * d   +
+                  (double)x[i].nom * om, ERFA_D2PI  );
+      sarg = sin(arg);
+      carg = cos(arg);
+
+   /* Term. */
+      dp += (x[i].ps + x[i].pst * t) * sarg + x[i].pc * carg;
+      de += (x[i].ec + x[i].ect * t) * carg + x[i].es * sarg;
+   }
+
+/* Convert from 0.1 microarcsec units to radians. */
+   dpsils = dp * U2R;
+   depsls = de * U2R;
+
+/* ------------------------------*/
+/* IN LIEU OF PLANETARY NUTATION */
+/* ------------------------------*/
+
+/* Fixed offset to correct for missing terms in truncated series. */
+   dpsipl = DPPLAN;
+   depspl = DEPLAN;
+
+/* --------*/
+/* RESULTS */
+/* --------*/
+
+/* Add luni-solar and planetary components. */
+   *dpsi = dpsils + dpsipl;
+   *deps = depsls + depspl;
+
+   return;
+
+}
+
+void eraNut06a(double date1, double date2, double *dpsi, double *deps)
+/*
+**  - - - - - - - - - -
+**   e r a N u t 0 6 a
+**  - - - - - - - - - -
+**
+**  IAU 2000A nutation with adjustments to match the IAU 2006
+**  precession.
+**
+**  Given:
+**     date1,date2   double   TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     dpsi,deps     double   nutation, luni-solar + planetary (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The nutation components in longitude and obliquity are in radians
+**     and with respect to the mean equinox and ecliptic of date,
+**     IAU 2006 precession model (Hilton et al. 2006, Capitaine et al.
+**     2005).
+**
+**  3) The function first computes the IAU 2000A nutation, then applies
+**     adjustments for (i) the consequences of the change in obliquity
+**     from the IAU 1980 ecliptic to the IAU 2006 ecliptic and (ii) the
+**     secular variation in the Earth's dynamical form factor J2.
+**
+**  4) The present function provides classical nutation, complementing
+**     the IAU 2000 frame bias and IAU 2006 precession.  It delivers a
+**     pole which is at current epochs accurate to a few tens of
+**     microarcseconds, apart from the free core nutation.
+**
+**  Called:
+**     eraNut00a    nutation, IAU 2000A
+**
+**  References:
+**
+**     Chapront, J., Chapront-Touze, M. & Francou, G. 2002,
+**     Astron.Astrophys. 387, 700
+**
+**     Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977,
+**     Astron.Astrophys. 58, 1-16
+**
+**     Mathews, P.M., Herring, T.A., Buffet, B.A. 2002, J.Geophys.Res.
+**     107, B4.  The MHB_2000 code itself was obtained on 9th September
+**     2002 from ftp//maia.usno.navy.mil/conv2000/chapter5/IAU2000A.
+**
+**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
+**
+**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
+**     Astron.Astrophys.Supp.Ser. 135, 111
+**
+**     Wallace, P.T., "Software for Implementing the IAU 2000
+**     Resolutions", in IERS Workshop 5.1 (2002)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t, fj2, dp, de;
+
+
+/* Interval between fundamental date J2000.0 and given date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Factor correcting for secular variation of J2. */
+   fj2 = -2.7774e-6 * t;
+
+/* Obtain IAU 2000A nutation. */
+   eraNut00a(date1, date2, &dp, &de);
+
+/* Apply P03 adjustments (Wallace & Capitaine, 2006, Eqs.5). */
+   *dpsi = dp + dp * (0.4697e-6 + fj2);
+   *deps = de + de * fj2;
+
+   return;
+
+}
+
+void eraNut80(double date1, double date2, double *dpsi, double *deps)
+/*
+**  - - - - - - - - -
+**   e r a N u t 8 0
+**  - - - - - - - - -
+**
+**  Nutation, IAU 1980 model.
+**
+**  Given:
+**     date1,date2   double    TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     dpsi          double    nutation in longitude (radians)
+**     deps          double    nutation in obliquity (radians)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The nutation components are with respect to the ecliptic of
+**     date.
+**
+**  Called:
+**     eraAnpm      normalize angle into range +/- pi
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     Section 3.222 (p111).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t, el, elp, f, d, om, dp, de, arg, s, c;
+   int j;
+
+/* Units of 0.1 milliarcsecond to radians */
+   const double U2R = ERFA_DAS2R / 1e4;
+
+/* ------------------------------------------------ */
+/* Table of multiples of arguments and coefficients */
+/* ------------------------------------------------ */
+
+/* The units for the sine and cosine coefficients are 0.1 mas and */
+/* the same per Julian century */
+
+   static const struct {
+      int nl,nlp,nf,nd,nom; /* coefficients of l,l',F,D,Om */
+      double sp,spt;        /* longitude sine, 1 and t coefficients */
+      double ce,cet;        /* obliquity cosine, 1 and t coefficients */
+   } x[] = {
+
+   /* 1-10 */
+      {  0,  0,  0,  0,  1, -171996.0, -174.2,  92025.0,    8.9 },
+      {  0,  0,  0,  0,  2,    2062.0,    0.2,   -895.0,    0.5 },
+      { -2,  0,  2,  0,  1,      46.0,    0.0,    -24.0,    0.0 },
+      {  2,  0, -2,  0,  0,      11.0,    0.0,      0.0,    0.0 },
+      { -2,  0,  2,  0,  2,      -3.0,    0.0,      1.0,    0.0 },
+      {  1, -1,  0, -1,  0,      -3.0,    0.0,      0.0,    0.0 },
+      {  0, -2,  2, -2,  1,      -2.0,    0.0,      1.0,    0.0 },
+      {  2,  0, -2,  0,  1,       1.0,    0.0,      0.0,    0.0 },
+      {  0,  0,  2, -2,  2,  -13187.0,   -1.6,   5736.0,   -3.1 },
+      {  0,  1,  0,  0,  0,    1426.0,   -3.4,     54.0,   -0.1 },
+
+   /* 11-20 */
+      {  0,  1,  2, -2,  2,    -517.0,    1.2,    224.0,   -0.6 },
+      {  0, -1,  2, -2,  2,     217.0,   -0.5,    -95.0,    0.3 },
+      {  0,  0,  2, -2,  1,     129.0,    0.1,    -70.0,    0.0 },
+      {  2,  0,  0, -2,  0,      48.0,    0.0,      1.0,    0.0 },
+      {  0,  0,  2, -2,  0,     -22.0,    0.0,      0.0,    0.0 },
+      {  0,  2,  0,  0,  0,      17.0,   -0.1,      0.0,    0.0 },
+      {  0,  1,  0,  0,  1,     -15.0,    0.0,      9.0,    0.0 },
+      {  0,  2,  2, -2,  2,     -16.0,    0.1,      7.0,    0.0 },
+      {  0, -1,  0,  0,  1,     -12.0,    0.0,      6.0,    0.0 },
+      { -2,  0,  0,  2,  1,      -6.0,    0.0,      3.0,    0.0 },
+
+   /* 21-30 */
+      {  0, -1,  2, -2,  1,      -5.0,    0.0,      3.0,    0.0 },
+      {  2,  0,  0, -2,  1,       4.0,    0.0,     -2.0,    0.0 },
+      {  0,  1,  2, -2,  1,       4.0,    0.0,     -2.0,    0.0 },
+      {  1,  0,  0, -1,  0,      -4.0,    0.0,      0.0,    0.0 },
+      {  2,  1,  0, -2,  0,       1.0,    0.0,      0.0,    0.0 },
+      {  0,  0, -2,  2,  1,       1.0,    0.0,      0.0,    0.0 },
+      {  0,  1, -2,  2,  0,      -1.0,    0.0,      0.0,    0.0 },
+      {  0,  1,  0,  0,  2,       1.0,    0.0,      0.0,    0.0 },
+      { -1,  0,  0,  1,  1,       1.0,    0.0,      0.0,    0.0 },
+      {  0,  1,  2, -2,  0,      -1.0,    0.0,      0.0,    0.0 },
+
+   /* 31-40 */
+      {  0,  0,  2,  0,  2,   -2274.0,   -0.2,    977.0,   -0.5 },
+      {  1,  0,  0,  0,  0,     712.0,    0.1,     -7.0,    0.0 },
+      {  0,  0,  2,  0,  1,    -386.0,   -0.4,    200.0,    0.0 },
+      {  1,  0,  2,  0,  2,    -301.0,    0.0,    129.0,   -0.1 },
+      {  1,  0,  0, -2,  0,    -158.0,    0.0,     -1.0,    0.0 },
+      { -1,  0,  2,  0,  2,     123.0,    0.0,    -53.0,    0.0 },
+      {  0,  0,  0,  2,  0,      63.0,    0.0,     -2.0,    0.0 },
+      {  1,  0,  0,  0,  1,      63.0,    0.1,    -33.0,    0.0 },
+      { -1,  0,  0,  0,  1,     -58.0,   -0.1,     32.0,    0.0 },
+      { -1,  0,  2,  2,  2,     -59.0,    0.0,     26.0,    0.0 },
+
+   /* 41-50 */
+      {  1,  0,  2,  0,  1,     -51.0,    0.0,     27.0,    0.0 },
+      {  0,  0,  2,  2,  2,     -38.0,    0.0,     16.0,    0.0 },
+      {  2,  0,  0,  0,  0,      29.0,    0.0,     -1.0,    0.0 },
+      {  1,  0,  2, -2,  2,      29.0,    0.0,    -12.0,    0.0 },
+      {  2,  0,  2,  0,  2,     -31.0,    0.0,     13.0,    0.0 },
+      {  0,  0,  2,  0,  0,      26.0,    0.0,     -1.0,    0.0 },
+      { -1,  0,  2,  0,  1,      21.0,    0.0,    -10.0,    0.0 },
+      { -1,  0,  0,  2,  1,      16.0,    0.0,     -8.0,    0.0 },
+      {  1,  0,  0, -2,  1,     -13.0,    0.0,      7.0,    0.0 },
+      { -1,  0,  2,  2,  1,     -10.0,    0.0,      5.0,    0.0 },
+
+   /* 51-60 */
+      {  1,  1,  0, -2,  0,      -7.0,    0.0,      0.0,    0.0 },
+      {  0,  1,  2,  0,  2,       7.0,    0.0,     -3.0,    0.0 },
+      {  0, -1,  2,  0,  2,      -7.0,    0.0,      3.0,    0.0 },
+      {  1,  0,  2,  2,  2,      -8.0,    0.0,      3.0,    0.0 },
+      {  1,  0,  0,  2,  0,       6.0,    0.0,      0.0,    0.0 },
+      {  2,  0,  2, -2,  2,       6.0,    0.0,     -3.0,    0.0 },
+      {  0,  0,  0,  2,  1,      -6.0,    0.0,      3.0,    0.0 },
+      {  0,  0,  2,  2,  1,      -7.0,    0.0,      3.0,    0.0 },
+      {  1,  0,  2, -2,  1,       6.0,    0.0,     -3.0,    0.0 },
+      {  0,  0,  0, -2,  1,      -5.0,    0.0,      3.0,    0.0 },
+
+   /* 61-70 */
+      {  1, -1,  0,  0,  0,       5.0,    0.0,      0.0,    0.0 },
+      {  2,  0,  2,  0,  1,      -5.0,    0.0,      3.0,    0.0 },
+      {  0,  1,  0, -2,  0,      -4.0,    0.0,      0.0,    0.0 },
+      {  1,  0, -2,  0,  0,       4.0,    0.0,      0.0,    0.0 },
+      {  0,  0,  0,  1,  0,      -4.0,    0.0,      0.0,    0.0 },
+      {  1,  1,  0,  0,  0,      -3.0,    0.0,      0.0,    0.0 },
+      {  1,  0,  2,  0,  0,       3.0,    0.0,      0.0,    0.0 },
+      {  1, -1,  2,  0,  2,      -3.0,    0.0,      1.0,    0.0 },
+      { -1, -1,  2,  2,  2,      -3.0,    0.0,      1.0,    0.0 },
+      { -2,  0,  0,  0,  1,      -2.0,    0.0,      1.0,    0.0 },
+
+   /* 71-80 */
+      {  3,  0,  2,  0,  2,      -3.0,    0.0,      1.0,    0.0 },
+      {  0, -1,  2,  2,  2,      -3.0,    0.0,      1.0,    0.0 },
+      {  1,  1,  2,  0,  2,       2.0,    0.0,     -1.0,    0.0 },
+      { -1,  0,  2, -2,  1,      -2.0,    0.0,      1.0,    0.0 },
+      {  2,  0,  0,  0,  1,       2.0,    0.0,     -1.0,    0.0 },
+      {  1,  0,  0,  0,  2,      -2.0,    0.0,      1.0,    0.0 },
+      {  3,  0,  0,  0,  0,       2.0,    0.0,      0.0,    0.0 },
+      {  0,  0,  2,  1,  2,       2.0,    0.0,     -1.0,    0.0 },
+      { -1,  0,  0,  0,  2,       1.0,    0.0,     -1.0,    0.0 },
+      {  1,  0,  0, -4,  0,      -1.0,    0.0,      0.0,    0.0 },
+
+   /* 81-90 */
+      { -2,  0,  2,  2,  2,       1.0,    0.0,     -1.0,    0.0 },
+      { -1,  0,  2,  4,  2,      -2.0,    0.0,      1.0,    0.0 },
+      {  2,  0,  0, -4,  0,      -1.0,    0.0,      0.0,    0.0 },
+      {  1,  1,  2, -2,  2,       1.0,    0.0,     -1.0,    0.0 },
+      {  1,  0,  2,  2,  1,      -1.0,    0.0,      1.0,    0.0 },
+      { -2,  0,  2,  4,  2,      -1.0,    0.0,      1.0,    0.0 },
+      { -1,  0,  4,  0,  2,       1.0,    0.0,      0.0,    0.0 },
+      {  1, -1,  0, -2,  0,       1.0,    0.0,      0.0,    0.0 },
+      {  2,  0,  2, -2,  1,       1.0,    0.0,     -1.0,    0.0 },
+      {  2,  0,  2,  2,  2,      -1.0,    0.0,      0.0,    0.0 },
+
+   /* 91-100 */
+      {  1,  0,  0,  2,  1,      -1.0,    0.0,      0.0,    0.0 },
+      {  0,  0,  4, -2,  2,       1.0,    0.0,      0.0,    0.0 },
+      {  3,  0,  2, -2,  2,       1.0,    0.0,      0.0,    0.0 },
+      {  1,  0,  2, -2,  0,      -1.0,    0.0,      0.0,    0.0 },
+      {  0,  1,  2,  0,  1,       1.0,    0.0,      0.0,    0.0 },
+      { -1, -1,  0,  2,  1,       1.0,    0.0,      0.0,    0.0 },
+      {  0,  0, -2,  0,  1,      -1.0,    0.0,      0.0,    0.0 },
+      {  0,  0,  2, -1,  2,      -1.0,    0.0,      0.0,    0.0 },
+      {  0,  1,  0,  2,  0,      -1.0,    0.0,      0.0,    0.0 },
+      {  1,  0, -2, -2,  0,      -1.0,    0.0,      0.0,    0.0 },
+
+   /* 101-106 */
+      {  0, -1,  2,  0,  1,      -1.0,    0.0,      0.0,    0.0 },
+      {  1,  1,  0, -2,  1,      -1.0,    0.0,      0.0,    0.0 },
+      {  1,  0, -2,  2,  0,      -1.0,    0.0,      0.0,    0.0 },
+      {  2,  0,  0,  2,  0,       1.0,    0.0,      0.0,    0.0 },
+      {  0,  0,  2,  4,  2,      -1.0,    0.0,      0.0,    0.0 },
+      {  0,  1,  0,  1,  0,       1.0,    0.0,      0.0,    0.0 }
+   };
+
+/* Number of terms in the series */
+   const int NT = (int) (sizeof x / sizeof x[0]);
+
+/*--------------------------------------------------------------------*/
+
+/* Interval between fundamental epoch J2000.0 and given date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* --------------------- */
+/* Fundamental arguments */
+/* --------------------- */
+
+/* Mean longitude of Moon minus mean longitude of Moon's perigee. */
+   el = eraAnpm(
+        (485866.733 + (715922.633 + (31.310 + 0.064 * t) * t) * t)
+        * ERFA_DAS2R + fmod(1325.0 * t, 1.0) * ERFA_D2PI);
+
+/* Mean longitude of Sun minus mean longitude of Sun's perigee. */
+   elp = eraAnpm(
+         (1287099.804 + (1292581.224 + (-0.577 - 0.012 * t) * t) * t)
+         * ERFA_DAS2R + fmod(99.0 * t, 1.0) * ERFA_D2PI);
+
+/* Mean longitude of Moon minus mean longitude of Moon's node. */
+   f = eraAnpm(
+       (335778.877 + (295263.137 + (-13.257 + 0.011 * t) * t) * t)
+       * ERFA_DAS2R + fmod(1342.0 * t, 1.0) * ERFA_D2PI);
+
+/* Mean elongation of Moon from Sun. */
+   d = eraAnpm(
+       (1072261.307 + (1105601.328 + (-6.891 + 0.019 * t) * t) * t)
+       * ERFA_DAS2R + fmod(1236.0 * t, 1.0) * ERFA_D2PI);
+
+/* Longitude of the mean ascending node of the lunar orbit on the */
+/* ecliptic, measured from the mean equinox of date. */
+   om = eraAnpm(
+        (450160.280 + (-482890.539 + (7.455 + 0.008 * t) * t) * t)
+        * ERFA_DAS2R + fmod(-5.0 * t, 1.0) * ERFA_D2PI);
+
+/* --------------- */
+/* Nutation series */
+/* --------------- */
+
+/* Initialize nutation components. */
+   dp = 0.0;
+   de = 0.0;
+
+/* Sum the nutation terms, ending with the biggest. */
+   for (j = NT-1; j >= 0; j--) {
+
+   /* Form argument for current term. */
+      arg = (double)x[j].nl  * el
+          + (double)x[j].nlp * elp
+          + (double)x[j].nf  * f
+          + (double)x[j].nd  * d
+          + (double)x[j].nom * om;
+
+   /* Accumulate current nutation term. */
+      s = x[j].sp + x[j].spt * t;
+      c = x[j].ce + x[j].cet * t;
+      if (s != 0.0) dp += s * sin(arg);
+      if (c != 0.0) de += c * cos(arg);
+   }
+
+/* Convert results from 0.1 mas units to radians. */
+   *dpsi = dp * U2R;
+   *deps = de * U2R;
+
+   return;
+
+}
+
+void eraNutm80(double date1, double date2, double rmatn[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a N u t m 8 0
+**  - - - - - - - - - -
+**
+**  Form the matrix of nutation for a given date, IAU 1980 model.
+**
+**  Given:
+**     date1,date2    double          TDB date (Note 1)
+**
+**  Returned:
+**     rmatn          double[3][3]    nutation matrix
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix operates in the sense V(true) = rmatn * V(mean),
+**     where the p-vector V(true) is with respect to the true
+**     equatorial triad of date and the p-vector V(mean) is with
+**     respect to the mean equatorial triad of date.
+**
+**  Called:
+**     eraNut80     nutation, IAU 1980
+**     eraObl80     mean obliquity, IAU 1980
+**     eraNumat     form nutation matrix
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dpsi, deps, epsa;
+
+
+/* Nutation components and mean obliquity. */
+   eraNut80(date1, date2, &dpsi, &deps);
+   epsa = eraObl80(date1, date2);
+
+/* Build the rotation matrix. */
+   eraNumat(epsa, dpsi, deps, rmatn);
+
+   return;
+
+}
+
+double eraObl06(double date1, double date2)
+/*
+**  - - - - - - - - -
+**   e r a O b l 0 6
+**  - - - - - - - - -
+**
+**  Mean obliquity of the ecliptic, IAU 2006 precession model.
+**
+**  Given:
+**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (function value):
+**                  double   obliquity of the ecliptic (radians, Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The result is the angle between the ecliptic and mean equator of
+**     date date1+date2.
+**
+**  Reference:
+**
+**     Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t, eps0;
+
+
+/* Interval between fundamental date J2000.0 and given date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Mean obliquity. */
+   eps0 = (84381.406     +
+          (-46.836769    +
+          ( -0.0001831   +
+          (  0.00200340  +
+          ( -0.000000576 +
+          ( -0.0000000434) * t) * t) * t) * t) * t) * ERFA_DAS2R;
+
+   return eps0;
+
+}
+
+double eraObl80(double date1, double date2)
+/*
+**  - - - - - - - - -
+**   e r a O b l 8 0
+**  - - - - - - - - -
+**
+**  Mean obliquity of the ecliptic, IAU 1980 model.
+**
+**  Given:
+**     date1,date2   double    TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (function value):
+**                   double    obliquity of the ecliptic (radians, Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The result is the angle between the ecliptic and mean equator of
+**     date date1+date2.
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     Expression 3.222-1 (p114).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t, eps0;
+
+
+/* Interval between fundamental epoch J2000.0 and given date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Mean obliquity of date. */
+   eps0 = ERFA_DAS2R * (84381.448  +
+                  (-46.8150   +
+                  (-0.00059   +
+                  ( 0.001813) * t) * t) * t);
+
+   return eps0;
+
+}
+
+void eraP06e(double date1, double date2,
+             double *eps0, double *psia, double *oma, double *bpa,
+             double *bqa, double *pia, double *bpia,
+             double *epsa, double *chia, double *za, double *zetaa,
+             double *thetaa, double *pa,
+             double *gam, double *phi, double *psi)
+/*
+**  - - - - - - - -
+**   e r a P 0 6 e
+**  - - - - - - - -
+**
+**  Precession angles, IAU 2006, equinox based.
+**
+**  Given:
+**     date1,date2   double   TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (see Note 2):
+**     eps0          double   epsilon_0
+**     psia          double   psi_A
+**     oma           double   omega_A
+**     bpa           double   P_A
+**     bqa           double   Q_A
+**     pia           double   pi_A
+**     bpia          double   Pi_A
+**     epsa          double   obliquity epsilon_A
+**     chia          double   chi_A
+**     za            double   z_A
+**     zetaa         double   zeta_A
+**     thetaa        double   theta_A
+**     pa            double   p_A
+**     gam           double   F-W angle gamma_J2000
+**     phi           double   F-W angle phi_J2000
+**     psi           double   F-W angle psi_J2000
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) This function returns the set of equinox based angles for the
+**     Capitaine et al. "P03" precession theory, adopted by the IAU in
+**     2006.  The angles are set out in Table 1 of Hilton et al. (2006):
+**
+**     eps0   epsilon_0   obliquity at J2000.0
+**     psia   psi_A       luni-solar precession
+**     oma    omega_A     inclination of equator wrt J2000.0 ecliptic
+**     bpa    P_A         ecliptic pole x, J2000.0 ecliptic triad
+**     bqa    Q_A         ecliptic pole -y, J2000.0 ecliptic triad
+**     pia    pi_A        angle between moving and J2000.0 ecliptics
+**     bpia   Pi_A        longitude of ascending node of the ecliptic
+**     epsa   epsilon_A   obliquity of the ecliptic
+**     chia   chi_A       planetary precession
+**     za     z_A         equatorial precession: -3rd 323 Euler angle
+**     zetaa  zeta_A      equatorial precession: -1st 323 Euler angle
+**     thetaa theta_A     equatorial precession: 2nd 323 Euler angle
+**     pa     p_A         general precession
+**     gam    gamma_J2000 J2000.0 RA difference of ecliptic poles
+**     phi    phi_J2000   J2000.0 codeclination of ecliptic pole
+**     psi    psi_J2000   longitude difference of equator poles, J2000.0
+**
+**     The returned values are all radians.
+**
+**  3) Hilton et al. (2006) Table 1 also contains angles that depend on
+**     models distinct from the P03 precession theory itself, namely the
+**     IAU 2000A frame bias and nutation.  The quoted polynomials are
+**     used in other ERFA functions:
+**
+**     . eraXy06  contains the polynomial parts of the X and Y series.
+**
+**     . eraS06  contains the polynomial part of the s+XY/2 series.
+**
+**     . eraPfw06  implements the series for the Fukushima-Williams
+**       angles that are with respect to the GCRS pole (i.e. the variants
+**       that include frame bias).
+**
+**  4) The IAU resolution stipulated that the choice of parameterization
+**     was left to the user, and so an IAU compliant precession
+**     implementation can be constructed using various combinations of
+**     the angles returned by the present function.
+**
+**  5) The parameterization used by ERFA is the version of the Fukushima-
+**     Williams angles that refers directly to the GCRS pole.  These
+**     angles may be calculated by calling the function eraPfw06.  ERFA
+**     also supports the direct computation of the CIP GCRS X,Y by
+**     series, available by calling eraXy06.
+**
+**  6) The agreement between the different parameterizations is at the
+**     1 microarcsecond level in the present era.
+**
+**  7) When constructing a precession formulation that refers to the GCRS
+**     pole rather than the dynamical pole, it may (depending on the
+**     choice of angles) be necessary to introduce the frame bias
+**     explicitly.
+**
+**  8) It is permissible to re-use the same variable in the returned
+**     arguments.  The quantities are stored in the stated order.
+**
+**  Reference:
+**
+**     Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351
+**
+**  Called:
+**     eraObl06     mean obliquity, IAU 2006
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t;
+
+
+/* Interval between fundamental date J2000.0 and given date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Obliquity at J2000.0. */
+
+   *eps0 = 84381.406 * ERFA_DAS2R;
+
+/* Luni-solar precession. */
+
+   *psia = ( 5038.481507     +
+           (   -1.0790069    +
+           (   -0.00114045   +
+           (    0.000132851  +
+           (   -0.0000000951 )
+           * t) * t) * t) * t) * t * ERFA_DAS2R;
+
+/* Inclination of mean equator with respect to the J2000.0 ecliptic. */
+
+   *oma = *eps0 + ( -0.025754     +
+                  (  0.0512623    +
+                  ( -0.00772503   +
+                  ( -0.000000467  +
+                  (  0.0000003337 )
+                  * t) * t) * t) * t) * t * ERFA_DAS2R;
+
+/* Ecliptic pole x, J2000.0 ecliptic triad. */
+
+   *bpa = (  4.199094     +
+          (  0.1939873    +
+          ( -0.00022466   +
+          ( -0.000000912  +
+          (  0.0000000120 )
+          * t) * t) * t) * t) * t * ERFA_DAS2R;
+
+/* Ecliptic pole -y, J2000.0 ecliptic triad. */
+
+   *bqa = ( -46.811015     +
+          (   0.0510283    +
+          (   0.00052413   +
+          (  -0.000000646  +
+          (  -0.0000000172 )
+          * t) * t) * t) * t) * t * ERFA_DAS2R;
+
+/* Angle between moving and J2000.0 ecliptics. */
+
+   *pia = ( 46.998973     +
+          ( -0.0334926    +
+          ( -0.00012559   +
+          (  0.000000113  +
+          ( -0.0000000022 )
+          * t) * t) * t) * t) * t * ERFA_DAS2R;
+
+/* Longitude of ascending node of the moving ecliptic. */
+
+   *bpia = ( 629546.7936      +
+           (   -867.95758     +
+           (      0.157992    +
+           (     -0.0005371   +
+           (     -0.00004797  +
+           (      0.000000072 )
+           * t) * t) * t) * t) * t) * ERFA_DAS2R;
+
+/* Mean obliquity of the ecliptic. */
+
+   *epsa = eraObl06(date1, date2);
+
+/* Planetary precession. */
+
+   *chia = ( 10.556403     +
+           ( -2.3814292    +
+           ( -0.00121197   +
+           (  0.000170663  +
+           ( -0.0000000560 )
+           * t) * t) * t) * t) * t * ERFA_DAS2R;
+
+/* Equatorial precession: minus the third of the 323 Euler angles. */
+
+   *za = (   -2.650545     +
+         ( 2306.077181     +
+         (    1.0927348    +
+         (    0.01826837   +
+         (   -0.000028596  +
+         (   -0.0000002904 )
+         * t) * t) * t) * t) * t) * ERFA_DAS2R;
+
+/* Equatorial precession: minus the first of the 323 Euler angles. */
+
+   *zetaa = (    2.650545     +
+            ( 2306.083227     +
+            (    0.2988499    +
+            (    0.01801828   +
+            (   -0.000005971  +
+            (   -0.0000003173 )
+            * t) * t) * t) * t) * t) * ERFA_DAS2R;
+
+/* Equatorial precession: second of the 323 Euler angles. */
+
+   *thetaa = ( 2004.191903     +
+             (   -0.4294934    +
+             (   -0.04182264   +
+             (   -0.000007089  +
+             (   -0.0000001274 )
+             * t) * t) * t) * t) * t * ERFA_DAS2R;
+
+/* General precession. */
+
+   *pa = ( 5028.796195     +
+         (    1.1054348    +
+         (    0.00007964   +
+         (   -0.000023857  +
+         (    0.0000000383 )
+         * t) * t) * t) * t) * t * ERFA_DAS2R;
+
+/* Fukushima-Williams angles for precession. */
+
+   *gam = ( 10.556403     +
+          (  0.4932044    +
+          ( -0.00031238   +
+          ( -0.000002788  +
+          (  0.0000000260 )
+          * t) * t) * t) * t) * t * ERFA_DAS2R;
+
+   *phi = *eps0 + ( -46.811015     +
+                  (   0.0511269    +
+                  (   0.00053289   +
+                  (  -0.000000440  +
+                  (  -0.0000000176 )
+                  * t) * t) * t) * t) * t * ERFA_DAS2R;
+
+   *psi = ( 5038.481507     +
+          (    1.5584176    +
+          (   -0.00018522   +
+          (   -0.000026452  +
+          (   -0.0000000148 )
+          * t) * t) * t) * t) * t * ERFA_DAS2R;
+
+   return;
+
+}
+
+void eraP2pv(double p[3], double pv[2][3])
+/*
+**  - - - - - - - -
+**   e r a P 2 p v
+**  - - - - - - - -
+**
+**  Extend a p-vector to a pv-vector by appending a zero velocity.
+**
+**  Given:
+**     p        double[3]       p-vector
+**
+**  Returned:
+**     pv       double[2][3]    pv-vector
+**
+**  Called:
+**     eraCp        copy p-vector
+**     eraZp        zero p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraCp(p, pv[0]);
+   eraZp(pv[1]);
+
+   return;
+
+}
+
+void eraP2s(double p[3], double *theta, double *phi, double *r)
+/*
+**  - - - - - - -
+**   e r a P 2 s
+**  - - - - - - -
+**
+**  P-vector to spherical polar coordinates.
+**
+**  Given:
+**     p        double[3]    p-vector
+**
+**  Returned:
+**     theta    double       longitude angle (radians)
+**     phi      double       latitude angle (radians)
+**     r        double       radial distance
+**
+**  Notes:
+**
+**  1) If P is null, zero theta, phi and r are returned.
+**
+**  2) At either pole, zero theta is returned.
+**
+**  Called:
+**     eraC2s       p-vector to spherical
+**     eraPm        modulus of p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraC2s(p, theta, phi);
+   *r = eraPm(p);
+
+   return;
+
+}
+
+double eraPap(double a[3], double b[3])
+/*
+**  - - - - - - -
+**   e r a P a p
+**  - - - - - - -
+**
+**  Position-angle from two p-vectors.
+**
+**  Given:
+**     a      double[3]  direction of reference point
+**     b      double[3]  direction of point whose PA is required
+**
+**  Returned (function value):
+**            double     position angle of b with respect to a (radians)
+**
+**  Notes:
+**
+**  1) The result is the position angle, in radians, of direction b with
+**     respect to direction a.  It is in the range -pi to +pi.  The
+**     sense is such that if b is a small distance "north" of a the
+**     position angle is approximately zero, and if b is a small
+**     distance "east" of a the position angle is approximately +pi/2.
+**
+**  2) The vectors a and b need not be of unit length.
+**
+**  3) Zero is returned if the two directions are the same or if either
+**     vector is null.
+**
+**  4) If vector a is at a pole, the result is ill-defined.
+**
+**  Called:
+**     eraPn        decompose p-vector into modulus and direction
+**     eraPm        modulus of p-vector
+**     eraPxp       vector product of two p-vectors
+**     eraPmp       p-vector minus p-vector
+**     eraPdp       scalar product of two p-vectors
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double am, au[3], bm, st, ct, xa, ya, za, eta[3], xi[3], a2b[3], pa;
+
+
+/* Modulus and direction of the a vector. */
+   eraPn(a, &am, au);
+
+/* Modulus of the b vector. */
+   bm = eraPm(b);
+
+/* Deal with the case of a null vector. */
+   if ((am == 0.0) || (bm == 0.0)) {
+      st = 0.0;
+      ct = 1.0;
+   } else {
+
+   /* The "north" axis tangential from a (arbitrary length). */
+      xa = a[0];
+      ya = a[1];
+      za = a[2];
+      eta[0] = -xa * za;
+      eta[1] = -ya * za;
+      eta[2] =  xa*xa + ya*ya;
+
+   /* The "east" axis tangential from a (same length). */
+      eraPxp(eta, au, xi);
+
+   /* The vector from a to b. */
+      eraPmp(b, a, a2b);
+
+   /* Resolve into components along the north and east axes. */
+      st = eraPdp(a2b, xi);
+      ct = eraPdp(a2b, eta);
+
+   /* Deal with degenerate cases. */
+      if ((st == 0.0) && (ct == 0.0)) ct = 1.0;
+   }
+
+/* Position angle. */
+   pa = atan2(st, ct);
+
+   return pa;
+
+}
+
+double eraPas(double al, double ap, double bl, double bp)
+/*
+**  - - - - - - -
+**   e r a P a s
+**  - - - - - - -
+**
+**  Position-angle from spherical coordinates.
+**
+**  Given:
+**     al     double     longitude of point A (e.g. RA) in radians
+**     ap     double     latitude of point A (e.g. Dec) in radians
+**     bl     double     longitude of point B
+**     bp     double     latitude of point B
+**
+**  Returned (function value):
+**            double     position angle of B with respect to A
+**
+**  Notes:
+**
+**  1) The result is the bearing (position angle), in radians, of point
+**     B with respect to point A.  It is in the range -pi to +pi.  The
+**     sense is such that if B is a small distance "east" of point A,
+**     the bearing is approximately +pi/2.
+**
+**  2) Zero is returned if the two points are coincident.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dl, x, y, pa;
+
+
+   dl = bl - al;
+   y = sin(dl) * cos(bp);
+   x = sin(bp) * cos(ap) - cos(bp) * sin(ap) * cos(dl);
+   pa = ((x != 0.0) || (y != 0.0)) ? atan2(y, x) : 0.0;
+
+   return pa;
+
+}
+
+void eraPb06(double date1, double date2,
+             double *bzeta, double *bz, double *btheta)
+/*
+**  - - - - - - - -
+**   e r a P b 0 6
+**  - - - - - - - -
+**
+**  This function forms three Euler angles which implement general
+**  precession from epoch J2000.0, using the IAU 2006 model.  Frame
+**  bias (the offset between ICRS and mean J2000.0) is included.
+**
+**  Given:
+**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     bzeta        double   1st rotation: radians cw around z
+**     bz           double   3rd rotation: radians cw around z
+**     btheta       double   2nd rotation: radians ccw around y
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The traditional accumulated precession angles zeta_A, z_A,
+**     theta_A cannot be obtained in the usual way, namely through
+**     polynomial expressions, because of the frame bias.  The latter
+**     means that two of the angles undergo rapid changes near this
+**     date.  They are instead the results of decomposing the
+**     precession-bias matrix obtained by using the Fukushima-Williams
+**     method, which does not suffer from the problem.  The
+**     decomposition returns values which can be used in the
+**     conventional formulation and which include frame bias.
+**
+**  3) The three angles are returned in the conventional order, which
+**     is not the same as the order of the corresponding Euler
+**     rotations.  The precession-bias matrix is
+**     R_3(-z) x R_2(+theta) x R_3(-zeta).
+**
+**  4) Should zeta_A, z_A, theta_A angles be required that do not
+**     contain frame bias, they are available by calling the ERFA
+**     function eraP06e.
+**
+**  Called:
+**     eraPmat06    PB matrix, IAU 2006
+**     eraRz        rotate around Z-axis
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double r[3][3], r31, r32;
+
+
+/* Precession matrix via Fukushima-Williams angles. */
+   eraPmat06(date1, date2, r);
+
+/* Solve for z. */
+   *bz = atan2(r[1][2], r[0][2]);
+
+/* Remove it from the matrix. */
+   eraRz(*bz, r);
+
+/* Solve for the remaining two angles. */
+   *bzeta = atan2 (r[1][0], r[1][1]);
+   r31 = r[2][0];
+   r32 = r[2][1];
+   *btheta = atan2(-ERFA_DSIGN(sqrt(r31 * r31 + r32 * r32), r[0][2]),
+                   r[2][2]);
+
+   return;
+
+}
+
+double eraPdp(double a[3], double b[3])
+/*
+**  - - - - - - -
+**   e r a P d p
+**  - - - - - - -
+**
+**  p-vector inner (=scalar=dot) product.
+**
+**  Given:
+**     a      double[3]     first p-vector
+**     b      double[3]     second p-vector
+**
+**  Returned (function value):
+**            double        a . b
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double w;
+
+
+   w  = a[0] * b[0]
+      + a[1] * b[1]
+      + a[2] * b[2];
+
+   return w;
+
+}
+
+void eraPfw06(double date1, double date2,
+              double *gamb, double *phib, double *psib, double *epsa)
+/*
+**  - - - - - - - - -
+**   e r a P f w 0 6
+**  - - - - - - - - -
+**
+**  Precession angles, IAU 2006 (Fukushima-Williams 4-angle formulation).
+**
+**  Given:
+**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     gamb         double   F-W angle gamma_bar (radians)
+**     phib         double   F-W angle phi_bar (radians)
+**     psib         double   F-W angle psi_bar (radians)
+**     epsa         double   F-W angle epsilon_A (radians)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) Naming the following points:
+**
+**           e = J2000.0 ecliptic pole,
+**           p = GCRS pole,
+**           E = mean ecliptic pole of date,
+**     and   P = mean pole of date,
+**
+**     the four Fukushima-Williams angles are as follows:
+**
+**        gamb = gamma_bar = epE
+**        phib = phi_bar = pE
+**        psib = psi_bar = pEP
+**        epsa = epsilon_A = EP
+**
+**  3) The matrix representing the combined effects of frame bias and
+**     precession is:
+**
+**        PxB = R_1(-epsa).R_3(-psib).R_1(phib).R_3(gamb)
+**
+**  4) The matrix representing the combined effects of frame bias,
+**     precession and nutation is simply:
+**
+**        NxPxB = R_1(-epsa-dE).R_3(-psib-dP).R_1(phib).R_3(gamb)
+**
+**     where dP and dE are the nutation components with respect to the
+**     ecliptic of date.
+**
+**  Reference:
+**
+**     Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351
+**
+**  Called:
+**     eraObl06     mean obliquity, IAU 2006
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t;
+
+
+/* Interval between fundamental date J2000.0 and given date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* P03 bias+precession angles. */
+   *gamb = (    -0.052928     +
+           (    10.556378     +
+           (     0.4932044    +
+           (    -0.00031238   +
+           (    -0.000002788  +
+           (     0.0000000260 )
+           * t) * t) * t) * t) * t) * ERFA_DAS2R;
+   *phib = ( 84381.412819     +
+           (   -46.811016     +
+           (     0.0511268    +
+           (     0.00053289   +
+           (    -0.000000440  +
+           (    -0.0000000176 )
+           * t) * t) * t) * t) * t) * ERFA_DAS2R;
+   *psib = (    -0.041775     +
+           (  5038.481484     +
+           (     1.5584175    +
+           (    -0.00018522   +
+           (    -0.000026452  +
+           (    -0.0000000148 )
+           * t) * t) * t) * t) * t) * ERFA_DAS2R;
+   *epsa =  eraObl06(date1, date2);
+
+   return;
+
+}
+
+int eraPlan94(double date1, double date2, int np, double pv[2][3])
+/*
+**  - - - - - - - - - -
+**   e r a P l a n 9 4
+**  - - - - - - - - - -
+**
+**  Approximate heliocentric position and velocity of a nominated major
+**  planet:  Mercury, Venus, EMB, Mars, Jupiter, Saturn, Uranus or
+**  Neptune (but not the Earth itself).
+**
+**  Given:
+**     date1  double       TDB date part A (Note 1)
+**     date2  double       TDB date part B (Note 1)
+**     np     int          planet (1=Mercury, 2=Venus, 3=EMB, 4=Mars,
+**                             5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune)
+**
+**  Returned (argument):
+**     pv     double[2][3] planet p,v (heliocentric, J2000.0, AU,AU/d)
+**
+**  Returned (function value):
+**            int          status: -1 = illegal NP (outside 1-8)
+**                                  0 = OK
+**                                 +1 = warning: year outside 1000-3000
+**                                 +2 = warning: failed to converge
+**
+**  Notes:
+**
+**  1) The date date1+date2 is in the TDB time scale (in practice TT can
+**     be used) and is a Julian Date, apportioned in any convenient way
+**     between the two arguments.  For example, JD(TDB)=2450123.7 could
+**     be expressed in any of these ways, among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in cases
+**     where the loss of several decimal digits of resolution is
+**     acceptable.  The J2000 method is best matched to the way the
+**     argument is handled internally and will deliver the optimum
+**     resolution.  The MJD method and the date & time methods are both
+**     good compromises between resolution and convenience.  The limited
+**     accuracy of the present algorithm is such that any of the methods
+**     is satisfactory.
+**
+**  2) If an np value outside the range 1-8 is supplied, an error status
+**     (function value -1) is returned and the pv vector set to zeroes.
+**
+**  3) For np=3 the result is for the Earth-Moon Barycenter.  To obtain
+**     the heliocentric position and velocity of the Earth, use instead
+**     the ERFA function eraEpv00.
+**
+**  4) On successful return, the array pv contains the following:
+**
+**        pv[0][0]   x      }
+**        pv[0][1]   y      } heliocentric position, AU
+**        pv[0][2]   z      }
+**
+**        pv[1][0]   xdot   }
+**        pv[1][1]   ydot   } heliocentric velocity, AU/d
+**        pv[1][2]   zdot   }
+**
+**     The reference frame is equatorial and is with respect to the
+**     mean equator and equinox of epoch J2000.0.
+**
+**  5) The algorithm is due to J.L. Simon, P. Bretagnon, J. Chapront,
+**     M. Chapront-Touze, G. Francou and J. Laskar (Bureau des
+**     Longitudes, Paris, France).  From comparisons with JPL
+**     ephemeris DE102, they quote the following maximum errors
+**     over the interval 1800-2050:
+**
+**                     L (arcsec)    B (arcsec)      R (km)
+**
+**        Mercury          4             1             300
+**        Venus            5             1             800
+**        EMB              6             1            1000
+**        Mars            17             1            7700
+**        Jupiter         71             5           76000
+**        Saturn          81            13          267000
+**        Uranus          86             7          712000
+**        Neptune         11             1          253000
+**
+**     Over the interval 1000-3000, they report that the accuracy is no
+**     worse than 1.5 times that over 1800-2050.  Outside 1000-3000 the
+**     accuracy declines.
+**
+**     Comparisons of the present function with the JPL DE200 ephemeris
+**     give the following RMS errors over the interval 1960-2025:
+**
+**                      position (km)     velocity (m/s)
+**
+**        Mercury            334               0.437
+**        Venus             1060               0.855
+**        EMB               2010               0.815
+**        Mars              7690               1.98
+**        Jupiter          71700               7.70
+**        Saturn          199000              19.4
+**        Uranus          564000              16.4
+**        Neptune         158000              14.4
+**
+**     Comparisons against DE200 over the interval 1800-2100 gave the
+**     following maximum absolute differences.  (The results using
+**     DE406 were essentially the same.)
+**
+**                   L (arcsec)   B (arcsec)     R (km)   Rdot (m/s)
+**
+**        Mercury        7            1            500       0.7
+**        Venus          7            1           1100       0.9
+**        EMB            9            1           1300       1.0
+**        Mars          26            1           9000       2.5
+**        Jupiter       78            6          82000       8.2
+**        Saturn        87           14         263000      24.6
+**        Uranus        86            7         661000      27.4
+**        Neptune       11            2         248000      21.4
+**
+**  6) The present ERFA re-implementation of the original Simon et al.
+**     Fortran code differs from the original in the following respects:
+**
+**       *  C instead of Fortran.
+**
+**       *  The date is supplied in two parts.
+**
+**       *  The result is returned only in equatorial Cartesian form;
+**          the ecliptic longitude, latitude and radius vector are not
+**          returned.
+**
+**       *  The result is in the J2000.0 equatorial frame, not ecliptic.
+**
+**       *  More is done in-line: there are fewer calls to subroutines.
+**
+**       *  Different error/warning status values are used.
+**
+**       *  A different Kepler's-equation-solver is used (avoiding
+**          use of double precision complex).
+**
+**       *  Polynomials in t are nested to minimize rounding errors.
+**
+**       *  Explicit double constants are used to avoid mixed-mode
+**          expressions.
+**
+**     None of the above changes affects the result significantly.
+**
+**  7) The returned status indicates the most serious condition
+**     encountered during execution of the function.  Illegal np is
+**     considered the most serious, overriding failure to converge,
+**     which in turn takes precedence over the remote date warning.
+**
+**  Called:
+**     eraAnp       normalize angle into range 0 to 2pi
+**
+**  Reference:  Simon, J.L, Bretagnon, P., Chapront, J.,
+**              Chapront-Touze, M., Francou, G., and Laskar, J.,
+**              Astron. Astrophys. 282, 663 (1994).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Gaussian constant */
+   static const double GK = 0.017202098950;
+
+/* Sin and cos of J2000.0 mean obliquity (IAU 1976) */
+   static const double SINEPS = 0.3977771559319137;
+   static const double COSEPS = 0.9174820620691818;
+
+/* Maximum number of iterations allowed to solve Kepler's equation */
+   static const int KMAX = 10;
+
+   int jstat, i, k;
+   double t, da, dl, de, dp, di, dom, dmu, arga, argl, am,
+          ae, dae, ae2, at, r, v, si2, xq, xp, tl, xsw,
+          xcw, xm2, xf, ci2, xms, xmc, xpxq2, x, y, z;
+
+/* Planetary inverse masses */
+   static const double amas[] = { 6023600.0,       /* Mercury */
+                                   408523.5,       /* Venus   */
+                                   328900.5,       /* EMB     */
+                                  3098710.0,       /* Mars    */
+                                     1047.355,     /* Jupiter */
+                                     3498.5,       /* Saturn  */
+                                    22869.0,       /* Uranus  */
+                                    19314.0 };     /* Neptune */
+
+/*
+** Tables giving the mean Keplerian elements, limited to t^2 terms:
+**
+**   a       semi-major axis (AU)
+**   dlm     mean longitude (degree and arcsecond)
+**   e       eccentricity
+**   pi      longitude of the perihelion (degree and arcsecond)
+**   dinc    inclination (degree and arcsecond)
+**   omega   longitude of the ascending node (degree and arcsecond)
+*/
+
+   static const double a[][3] = {
+       {  0.3870983098,           0.0,     0.0 },  /* Mercury */
+       {  0.7233298200,           0.0,     0.0 },  /* Venus   */
+       {  1.0000010178,           0.0,     0.0 },  /* EMB     */
+       {  1.5236793419,         3e-10,     0.0 },  /* Mars    */
+       {  5.2026032092,     19132e-10, -39e-10 },  /* Jupiter */
+       {  9.5549091915, -0.0000213896, 444e-10 },  /* Saturn  */
+       { 19.2184460618,     -3716e-10, 979e-10 },  /* Uranus  */
+       { 30.1103868694,    -16635e-10, 686e-10 }   /* Neptune */
+   };
+
+   static const double dlm[][3] = {
+       { 252.25090552, 5381016286.88982,  -1.92789 },
+       { 181.97980085, 2106641364.33548,   0.59381 },
+       { 100.46645683, 1295977422.83429,  -2.04411 },
+       { 355.43299958,  689050774.93988,   0.94264 },
+       {  34.35151874,  109256603.77991, -30.60378 },
+       {  50.07744430,   43996098.55732,  75.61614 },
+       { 314.05500511,   15424811.93933,  -1.75083 },
+       { 304.34866548,    7865503.20744,   0.21103 }
+   };
+
+   static const double e[][3] = {
+       { 0.2056317526,  0.0002040653,    -28349e-10 },
+       { 0.0067719164, -0.0004776521,     98127e-10 },
+       { 0.0167086342, -0.0004203654, -0.0000126734 },
+       { 0.0934006477,  0.0009048438,    -80641e-10 },
+       { 0.0484979255,  0.0016322542, -0.0000471366 },
+       { 0.0555481426, -0.0034664062, -0.0000643639 },
+       { 0.0463812221, -0.0002729293,  0.0000078913 },
+       { 0.0094557470,  0.0000603263,           0.0 }
+   };
+
+   static const double pi[][3] = {
+       {  77.45611904,  5719.11590,   -4.83016 },
+       { 131.56370300,   175.48640, -498.48184 },
+       { 102.93734808, 11612.35290,   53.27577 },
+       { 336.06023395, 15980.45908,  -62.32800 },
+       {  14.33120687,  7758.75163,  259.95938 },
+       {  93.05723748, 20395.49439,  190.25952 },
+       { 173.00529106,  3215.56238,  -34.09288 },
+       {  48.12027554,  1050.71912,   27.39717 }
+   };
+
+   static const double dinc[][3] = {
+       { 7.00498625, -214.25629,   0.28977 },
+       { 3.39466189,  -30.84437, -11.67836 },
+       {        0.0,  469.97289,  -3.35053 },
+       { 1.84972648, -293.31722,  -8.11830 },
+       { 1.30326698,  -71.55890,  11.95297 },
+       { 2.48887878,   91.85195, -17.66225 },
+       { 0.77319689,  -60.72723,   1.25759 },
+       { 1.76995259,    8.12333,   0.08135 }
+   };
+
+   static const double omega[][3] = {
+       {  48.33089304,  -4515.21727,  -31.79892 },
+       {  76.67992019, -10008.48154,  -51.32614 },
+       { 174.87317577,  -8679.27034,   15.34191 },
+       {  49.55809321, -10620.90088, -230.57416 },
+       { 100.46440702,   6362.03561,  326.52178 },
+       { 113.66550252,  -9240.19942,  -66.23743 },
+       {  74.00595701,   2669.15033,  145.93964 },
+       { 131.78405702,   -221.94322,   -0.78728 }
+   };
+
+/* Tables for trigonometric terms to be added to the mean elements of */
+/* the semi-major axes */
+
+   static const double kp[][9] = {
+    {   69613, 75645, 88306, 59899, 15746, 71087, 142173,  3086,    0 },
+    {   21863, 32794, 26934, 10931, 26250, 43725,  53867, 28939,    0 },
+    {   16002, 21863, 32004, 10931, 14529, 16368,  15318, 32794,    0 },
+    {    6345,  7818, 15636,  7077,  8184, 14163,   1107,  4872,    0 },
+    {    1760,  1454,  1167,   880,   287,  2640,     19,  2047, 1454 },
+    {     574,     0,   880,   287,    19,  1760,   1167,   306,  574 },
+    {     204,     0,   177,  1265,     4,   385,    200,   208,  204 },
+    {       0,   102,   106,     4,    98,  1367,    487,   204,    0 }
+   };
+
+   static const double ca[][9] = {
+    {       4,    -13,    11,   -9,    -9,   -3,     -1,     4,     0 },
+    {    -156,     59,   -42,    6,    19,  -20,    -10,   -12,     0 },
+    {      64,   -152,    62,   -8,    32,  -41,     19,   -11,     0 },
+    {     124,    621,  -145,  208,    54,  -57,     30,    15,     0 },
+    {  -23437,  -2634,  6601, 6259, -1507,-1821,   2620, -2115, -1489 },
+    {   62911,-119919, 79336,17814,-24241,12068,   8306, -4893,  8902 },
+    {  389061,-262125,-44088, 8387,-22976,-2093,   -615, -9720,  6633 },
+    { -412235,-157046,-31430,37817, -9740,  -13,  -7449,  9644,     0 }
+   };
+
+   static const double sa[][9] = {
+    {     -29,    -1,     9,     6,    -6,     5,     4,     0,     0 },
+    {     -48,  -125,   -26,   -37,    18,   -13,   -20,    -2,     0 },
+    {    -150,   -46,    68,    54,    14,    24,   -28,    22,     0 },
+    {    -621,   532,  -694,   -20,   192,   -94,    71,   -73,     0 },
+    {  -14614,-19828, -5869,  1881, -4372, -2255,   782,   930,   913 },
+    {  139737,     0, 24667, 51123, -5102,  7429, -4095, -1976, -9566 },
+    { -138081,     0, 37205,-49039,-41901,-33872,-27037,-12474, 18797 },
+    {       0, 28492,133236, 69654, 52322,-49577,-26430, -3593,     0 }
+   };
+
+/* Tables giving the trigonometric terms to be added to the mean */
+/* elements of the mean longitudes */
+
+   static const double kq[][10] = {
+    {   3086,15746,69613,59899,75645,88306, 12661,  2658,    0,     0 },
+    {  21863,32794,10931,   73, 4387,26934,  1473,  2157,    0,     0 },
+    {     10,16002,21863,10931, 1473,32004,  4387,    73,    0,     0 },
+    {     10, 6345, 7818, 1107,15636, 7077,  8184,   532,   10,     0 },
+    {     19, 1760, 1454,  287, 1167,  880,   574,  2640,   19,  1454 },
+    {     19,  574,  287,  306, 1760,   12,    31,    38,   19,   574 },
+    {      4,  204,  177,    8,   31,  200,  1265,   102,    4,   204 },
+    {      4,  102,  106,    8,   98, 1367,   487,   204,    4,   102 }
+   };
+
+   static const double cl[][10] = {
+    {      21,   -95, -157,   41,   -5,   42,  23,  30,      0,     0 },
+    {    -160,  -313, -235,   60,  -74,  -76, -27,  34,      0,     0 },
+    {    -325,  -322,  -79,  232,  -52,   97,  55, -41,      0,     0 },
+    {    2268,  -979,  802,  602, -668,  -33, 345, 201,    -55,     0 },
+    {    7610, -4997,-7689,-5841,-2617, 1115,-748,-607,   6074,   354 },
+    {  -18549, 30125,20012, -730,  824,   23,1289,-352, -14767, -2062 },
+    { -135245,-14594, 4197,-4030,-5630,-2898,2540,-306,   2939,  1986 },
+    {   89948,  2103, 8963, 2695, 3682, 1648, 866,-154,  -1963,  -283 }
+   };
+
+   static const double sl[][10] = {
+    {   -342,   136,  -23,   62,   66,  -52, -33,    17,     0,     0 },
+    {    524,  -149,  -35,  117,  151,  122, -71,   -62,     0,     0 },
+    {   -105,  -137,  258,   35, -116,  -88,-112,   -80,     0,     0 },
+    {    854,  -205, -936, -240,  140, -341, -97,  -232,   536,     0 },
+    { -56980,  8016, 1012, 1448,-3024,-3710, 318,   503,  3767,   577 },
+    { 138606,-13478,-4964, 1441,-1319,-1482, 427,  1236, -9167, -1918 },
+    {  71234,-41116, 5334,-4935,-1848,   66, 434, -1748,  3780,  -701 },
+    { -47645, 11647, 2166, 3194,  679,    0,-244,  -419, -2531,    48 }
+   };
+
+/*--------------------------------------------------------------------*/
+
+/* Validate the planet number. */
+   if ((np < 1) || (np > 8)) {
+      jstat = -1;
+
+   /* Reset the result in case of failure. */
+      for (k = 0; k < 2; k++) {
+         for (i = 0; i < 3; i++) {
+            pv[k][i] = 0.0;
+         }
+      }
+
+   } else {
+
+   /* Decrement the planet number to start at zero. */
+      np--;
+
+   /* Time: Julian millennia since J2000.0. */
+      t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJM;
+
+   /* OK status unless remote date. */
+      jstat = fabs(t) <= 1.0 ? 0 : 1;
+
+   /* Compute the mean elements. */
+      da = a[np][0] +
+          (a[np][1] +
+           a[np][2] * t) * t;
+      dl = (3600.0 * dlm[np][0] +
+                    (dlm[np][1] +
+                     dlm[np][2] * t) * t) * ERFA_DAS2R;
+      de = e[np][0] +
+         ( e[np][1] +
+           e[np][2] * t) * t;
+      dp = eraAnpm((3600.0 * pi[np][0] +
+                            (pi[np][1] +
+                             pi[np][2] * t) * t) * ERFA_DAS2R);
+      di = (3600.0 * dinc[np][0] +
+                    (dinc[np][1] +
+                     dinc[np][2] * t) * t) * ERFA_DAS2R;
+      dom = eraAnpm((3600.0 * omega[np][0] +
+                             (omega[np][1] +
+                              omega[np][2] * t) * t) * ERFA_DAS2R);
+
+   /* Apply the trigonometric terms. */
+      dmu = 0.35953620 * t;
+      for (k = 0; k < 8; k++) {
+         arga = kp[np][k] * dmu;
+         argl = kq[np][k] * dmu;
+         da += (ca[np][k] * cos(arga) +
+                sa[np][k] * sin(arga)) * 1e-7;
+         dl += (cl[np][k] * cos(argl) +
+                sl[np][k] * sin(argl)) * 1e-7;
+      }
+      arga = kp[np][8] * dmu;
+      da += t * (ca[np][8] * cos(arga) +
+                 sa[np][8] * sin(arga)) * 1e-7;
+      for (k = 8; k < 10; k++) {
+         argl = kq[np][k] * dmu;
+         dl += t * (cl[np][k] * cos(argl) +
+                    sl[np][k] * sin(argl)) * 1e-7;
+      }
+      dl = fmod(dl, ERFA_D2PI);
+
+   /* Iterative soln. of Kepler's equation to get eccentric anomaly. */
+      am = dl - dp;
+      ae = am + de * sin(am);
+      k = 0;
+      dae = 1.0;
+      while (k < KMAX && fabs(dae) > 1e-12) {
+         dae = (am - ae + de * sin(ae)) / (1.0 - de * cos(ae));
+         ae += dae;
+         k++;
+         if (k == KMAX-1) jstat = 2;
+      }
+
+   /* True anomaly. */
+      ae2 = ae / 2.0;
+      at = 2.0 * atan2(sqrt((1.0 + de) / (1.0 - de)) * sin(ae2),
+                                                       cos(ae2));
+
+   /* Distance (AU) and speed (radians per day). */
+      r = da * (1.0 - de * cos(ae));
+      v = GK * sqrt((1.0 + 1.0 / amas[np]) / (da * da * da));
+
+      si2 = sin(di / 2.0);
+      xq = si2 * cos(dom);
+      xp = si2 * sin(dom);
+      tl = at + dp;
+      xsw = sin(tl);
+      xcw = cos(tl);
+      xm2 = 2.0 * (xp * xcw - xq * xsw);
+      xf = da / sqrt(1  -  de * de);
+      ci2 = cos(di / 2.0);
+      xms = (de * sin(dp) + xsw) * xf;
+      xmc = (de * cos(dp) + xcw) * xf;
+      xpxq2 = 2 * xp * xq;
+
+   /* Position (J2000.0 ecliptic x,y,z in AU). */
+      x = r * (xcw - xm2 * xp);
+      y = r * (xsw + xm2 * xq);
+      z = r * (-xm2 * ci2);
+
+   /* Rotate to equatorial. */
+      pv[0][0] = x;
+      pv[0][1] = y * COSEPS - z * SINEPS;
+      pv[0][2] = y * SINEPS + z * COSEPS;
+
+   /* Velocity (J2000.0 ecliptic xdot,ydot,zdot in AU/d). */
+      x = v * (( -1.0 + 2.0 * xp * xp) * xms + xpxq2 * xmc);
+      y = v * ((  1.0 - 2.0 * xq * xq) * xmc - xpxq2 * xms);
+      z = v * (2.0 * ci2 * (xp * xms + xq * xmc));
+
+   /* Rotate to equatorial. */
+      pv[1][0] = x;
+      pv[1][1] = y * COSEPS - z * SINEPS;
+      pv[1][2] = y * SINEPS + z * COSEPS;
+
+   }
+
+/* Return the status. */
+   return jstat;
+
+}
+
+double eraPm(double p[3])
+/*
+**  - - - - - -
+**   e r a P m
+**  - - - - - -
+**
+**  Modulus of p-vector.
+**
+**  Given:
+**     p      double[3]     p-vector
+**
+**  Returned (function value):
+**            double        modulus
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double w;
+
+
+   w  = sqrt( p[0] * p[0]
+            + p[1] * p[1]
+            + p[2] * p[2] );
+
+   return w;
+
+}
+
+void eraPmat00(double date1, double date2, double rbp[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a P m a t 0 0
+**  - - - - - - - - - -
+**
+**  Precession matrix (including frame bias) from GCRS to a specified
+**  date, IAU 2000 model.
+**
+**  Given:
+**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rbp          double[3][3]    bias-precession matrix (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix operates in the sense V(date) = rbp * V(GCRS), where
+**     the p-vector V(GCRS) is with respect to the Geocentric Celestial
+**     Reference System (IAU, 2000) and the p-vector V(date) is with
+**     respect to the mean equatorial triad of the given date.
+**
+**  Called:
+**     eraBp00      frame bias and precession matrices, IAU 2000
+**
+**  Reference:
+**
+**     IAU: Trans. International Astronomical Union, Vol. XXIVB;  Proc.
+**     24th General Assembly, Manchester, UK.  Resolutions B1.3, B1.6.
+**     (2000)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rb[3][3], rp[3][3];
+
+
+/* Obtain the required matrix (discarding others). */
+   eraBp00(date1, date2, rb, rp, rbp);
+
+   return;
+
+}
+
+void eraPmat06(double date1, double date2, double rbp[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a P m a t 0 6
+**  - - - - - - - - - -
+**
+**  Precession matrix (including frame bias) from GCRS to a specified
+**  date, IAU 2006 model.
+**
+**  Given:
+**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rbp          double[3][3]    bias-precession matrix (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix operates in the sense V(date) = rbp * V(GCRS), where
+**     the p-vector V(GCRS) is with respect to the Geocentric Celestial
+**     Reference System (IAU, 2000) and the p-vector V(date) is with
+**     respect to the mean equatorial triad of the given date.
+**
+**  Called:
+**     eraPfw06     bias-precession F-W angles, IAU 2006
+**     eraFw2m      F-W angles to r-matrix
+**
+**  References:
+**
+**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
+**
+**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double gamb, phib, psib, epsa;
+
+
+/* Bias-precession Fukushima-Williams angles. */
+   eraPfw06(date1, date2, &gamb, &phib, &psib, &epsa);
+
+/* Form the matrix. */
+   eraFw2m(gamb, phib, psib, epsa, rbp);
+
+   return;
+
+}
+
+void eraPmat76(double date1, double date2, double rmatp[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a P m a t 7 6
+**  - - - - - - - - - -
+**
+**  Precession matrix from J2000.0 to a specified date, IAU 1976 model.
+**
+**  Given:
+**     date1,date2 double       ending date, TT (Note 1)
+**
+**  Returned:
+**     rmatp       double[3][3] precession matrix, J2000.0 -> date1+date2
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix operates in the sense V(date) = RMATP * V(J2000),
+**     where the p-vector V(J2000) is with respect to the mean
+**     equatorial triad of epoch J2000.0 and the p-vector V(date)
+**     is with respect to the mean equatorial triad of the given
+**     date.
+**
+**  3) Though the matrix method itself is rigorous, the precession
+**     angles are expressed through canonical polynomials which are
+**     valid only for a limited time span.  In addition, the IAU 1976
+**     precession rate is known to be imperfect.  The absolute accuracy
+**     of the present formulation is better than 0.1 arcsec from
+**     1960AD to 2040AD, better than 1 arcsec from 1640AD to 2360AD,
+**     and remains below 3 arcsec for the whole of the period
+**     500BC to 3000AD.  The errors exceed 10 arcsec outside the
+**     range 1200BC to 3900AD, exceed 100 arcsec outside 4200BC to
+**     5600AD and exceed 1000 arcsec outside 6800BC to 8200AD.
+**
+**  Called:
+**     eraPrec76    accumulated precession angles, IAU 1976
+**     eraIr        initialize r-matrix to identity
+**     eraRz        rotate around Z-axis
+**     eraRy        rotate around Y-axis
+**     eraCr        copy r-matrix
+**
+**  References:
+**
+**     Lieske, J.H., 1979, Astron.Astrophys. 73, 282.
+**      equations (6) & (7), p283.
+**
+**     Kaplan,G.H., 1981. USNO circular no. 163, pA2.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double zeta, z, theta, wmat[3][3];
+
+
+/* Precession Euler angles, J2000.0 to specified date. */
+   eraPrec76(ERFA_DJ00, 0.0, date1, date2, &zeta, &z, &theta);
+
+/* Form the rotation matrix. */
+   eraIr(  wmat);
+   eraRz( -zeta, wmat);
+   eraRy(  theta, wmat);
+   eraRz( -z, wmat);
+   eraCr( wmat, rmatp);
+
+   return;
+
+}
+
+void eraPmp(double a[3], double b[3], double amb[3])
+/*
+**  - - - - - - -
+**   e r a P m p
+**  - - - - - - -
+**
+**  P-vector subtraction.
+**
+**  Given:
+**     a        double[3]      first p-vector
+**     b        double[3]      second p-vector
+**
+**  Returned:
+**     amb      double[3]      a - b
+**
+**  Note:
+**     It is permissible to re-use the same array for any of the
+**     arguments.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   amb[0] = a[0] - b[0];
+   amb[1] = a[1] - b[1];
+   amb[2] = a[2] - b[2];
+
+   return;
+
+}
+
+void eraPn(double p[3], double *r, double u[3])
+/*
+**  - - - - - -
+**   e r a P n
+**  - - - - - -
+**
+**  Convert a p-vector into modulus and unit vector.
+**
+**  Given:
+**     p        double[3]      p-vector
+**
+**  Returned:
+**     r        double         modulus
+**     u        double[3]      unit vector
+**
+**  Notes:
+**
+**  1) If p is null, the result is null.  Otherwise the result is a unit
+**     vector.
+**
+**  2) It is permissible to re-use the same array for any of the
+**     arguments.
+**
+**  Called:
+**     eraPm        modulus of p-vector
+**     eraZp        zero p-vector
+**     eraSxp       multiply p-vector by scalar
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double w;
+
+
+/* Obtain the modulus and test for zero. */
+   w = eraPm(p);
+   if (w == 0.0) {
+
+   /* Null vector. */
+      eraZp(u);
+
+   } else {
+
+   /* Unit vector. */
+      eraSxp(1.0/w, p, u);
+   }
+
+/* Return the modulus. */
+   *r = w;
+
+   return;
+
+}
+
+void eraPn00(double date1, double date2, double dpsi, double deps,
+             double *epsa,
+             double rb[3][3], double rp[3][3], double rbp[3][3],
+             double rn[3][3], double rbpn[3][3])
+/*
+**  - - - - - - - -
+**   e r a P n 0 0
+**  - - - - - - - -
+**
+**  Precession-nutation, IAU 2000 model:  a multi-purpose function,
+**  supporting classical (equinox-based) use directly and CIO-based
+**  use indirectly.
+**
+**  Given:
+**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
+**     dpsi,deps    double          nutation (Note 2)
+**
+**  Returned:
+**     epsa         double          mean obliquity (Note 3)
+**     rb           double[3][3]    frame bias matrix (Note 4)
+**     rp           double[3][3]    precession matrix (Note 5)
+**     rbp          double[3][3]    bias-precession matrix (Note 6)
+**     rn           double[3][3]    nutation matrix (Note 7)
+**     rbpn         double[3][3]    GCRS-to-true matrix (Note 8)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The caller is responsible for providing the nutation components;
+**     they are in longitude and obliquity, in radians and are with
+**     respect to the equinox and ecliptic of date.  For high-accuracy
+**     applications, free core nutation should be included as well as
+**     any other relevant corrections to the position of the CIP.
+**
+**  3) The returned mean obliquity is consistent with the IAU 2000
+**     precession-nutation models.
+**
+**  4) The matrix rb transforms vectors from GCRS to J2000.0 mean
+**     equator and equinox by applying frame bias.
+**
+**  5) The matrix rp transforms vectors from J2000.0 mean equator and
+**     equinox to mean equator and equinox of date by applying
+**     precession.
+**
+**  6) The matrix rbp transforms vectors from GCRS to mean equator and
+**     equinox of date by applying frame bias then precession.  It is
+**     the product rp x rb.
+**
+**  7) The matrix rn transforms vectors from mean equator and equinox of
+**     date to true equator and equinox of date by applying the nutation
+**     (luni-solar + planetary).
+**
+**  8) The matrix rbpn transforms vectors from GCRS to true equator and
+**     equinox of date.  It is the product rn x rbp, applying frame
+**     bias, precession and nutation in that order.
+**
+**  9) It is permissible to re-use the same array in the returned
+**     arguments.  The arrays are filled in the order given.
+**
+**  Called:
+**     eraPr00      IAU 2000 precession adjustments
+**     eraObl80     mean obliquity, IAU 1980
+**     eraBp00      frame bias and precession matrices, IAU 2000
+**     eraCr        copy r-matrix
+**     eraNumat     form nutation matrix
+**     eraRxr       product of two r-matrices
+**
+**  Reference:
+**
+**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dpsipr, depspr, rbpw[3][3], rnw[3][3];
+
+
+/* IAU 2000 precession-rate adjustments. */
+   eraPr00(date1, date2, &dpsipr, &depspr);
+
+/* Mean obliquity, consistent with IAU 2000 precession-nutation. */
+   *epsa = eraObl80(date1, date2) + depspr;
+
+/* Frame bias and precession matrices and their product. */
+   eraBp00(date1, date2, rb, rp, rbpw);
+   eraCr(rbpw, rbp);
+
+/* Nutation matrix. */
+   eraNumat(*epsa, dpsi, deps, rnw);
+   eraCr(rnw, rn);
+
+/* Bias-precession-nutation matrix (classical). */
+   eraRxr(rnw, rbpw, rbpn);
+
+   return;
+
+}
+
+void eraPn00a(double date1, double date2,
+              double *dpsi, double *deps, double *epsa,
+              double rb[3][3], double rp[3][3], double rbp[3][3],
+              double rn[3][3], double rbpn[3][3])
+/*
+**  - - - - - - - - -
+**   e r a P n 0 0 a
+**  - - - - - - - - -
+**
+**  Precession-nutation, IAU 2000A model:  a multi-purpose function,
+**  supporting classical (equinox-based) use directly and CIO-based
+**  use indirectly.
+**
+**  Given:
+**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     dpsi,deps    double          nutation (Note 2)
+**     epsa         double          mean obliquity (Note 3)
+**     rb           double[3][3]    frame bias matrix (Note 4)
+**     rp           double[3][3]    precession matrix (Note 5)
+**     rbp          double[3][3]    bias-precession matrix (Note 6)
+**     rn           double[3][3]    nutation matrix (Note 7)
+**     rbpn         double[3][3]    GCRS-to-true matrix (Notes 8,9)
+**
+**  Notes:
+**
+**  1)  The TT date date1+date2 is a Julian Date, apportioned in any
+**      convenient way between the two arguments.  For example,
+**      JD(TT)=2450123.7 could be expressed in any of these ways,
+**      among others:
+**
+**             date1          date2
+**
+**          2450123.7           0.0       (JD method)
+**          2451545.0       -1421.3       (J2000 method)
+**          2400000.5       50123.2       (MJD method)
+**          2450123.5           0.2       (date & time method)
+**
+**      The JD method is the most natural and convenient to use in
+**      cases where the loss of several decimal digits of resolution
+**      is acceptable.  The J2000 method is best matched to the way
+**      the argument is handled internally and will deliver the
+**      optimum resolution.  The MJD method and the date & time methods
+**      are both good compromises between resolution and convenience.
+**
+**  2)  The nutation components (luni-solar + planetary, IAU 2000A) in
+**      longitude and obliquity are in radians and with respect to the
+**      equinox and ecliptic of date.  Free core nutation is omitted;
+**      for the utmost accuracy, use the eraPn00  function, where the
+**      nutation components are caller-specified.  For faster but
+**      slightly less accurate results, use the eraPn00b function.
+**
+**  3)  The mean obliquity is consistent with the IAU 2000 precession.
+**
+**  4)  The matrix rb transforms vectors from GCRS to J2000.0 mean
+**      equator and equinox by applying frame bias.
+**
+**  5)  The matrix rp transforms vectors from J2000.0 mean equator and
+**      equinox to mean equator and equinox of date by applying
+**      precession.
+**
+**  6)  The matrix rbp transforms vectors from GCRS to mean equator and
+**      equinox of date by applying frame bias then precession.  It is
+**      the product rp x rb.
+**
+**  7)  The matrix rn transforms vectors from mean equator and equinox
+**      of date to true equator and equinox of date by applying the
+**      nutation (luni-solar + planetary).
+**
+**  8)  The matrix rbpn transforms vectors from GCRS to true equator and
+**      equinox of date.  It is the product rn x rbp, applying frame
+**      bias, precession and nutation in that order.
+**
+**  9)  The X,Y,Z coordinates of the IAU 2000B Celestial Intermediate
+**      Pole are elements (3,1-3) of the matrix rbpn.
+**
+**  10) It is permissible to re-use the same array in the returned
+**      arguments.  The arrays are filled in the order given.
+**
+**  Called:
+**     eraNut00a    nutation, IAU 2000A
+**     eraPn00      bias/precession/nutation results, IAU 2000
+**
+**  Reference:
+**
+**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Nutation. */
+   eraNut00a(date1, date2, dpsi, deps);
+
+/* Remaining results. */
+   eraPn00(date1, date2, *dpsi, *deps, epsa, rb, rp, rbp, rn, rbpn);
+
+   return;
+
+}
+
+void eraPn00b(double date1, double date2,
+              double *dpsi, double *deps, double *epsa,
+              double rb[3][3], double rp[3][3], double rbp[3][3],
+              double rn[3][3], double rbpn[3][3])
+/*
+**  - - - - - - - - -
+**   e r a P n 0 0 b
+**  - - - - - - - - -
+**
+**  Precession-nutation, IAU 2000B model:  a multi-purpose function,
+**  supporting classical (equinox-based) use directly and CIO-based
+**  use indirectly.
+**
+**  Given:
+**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     dpsi,deps    double          nutation (Note 2)
+**     epsa         double          mean obliquity (Note 3)
+**     rb           double[3][3]    frame bias matrix (Note 4)
+**     rp           double[3][3]    precession matrix (Note 5)
+**     rbp          double[3][3]    bias-precession matrix (Note 6)
+**     rn           double[3][3]    nutation matrix (Note 7)
+**     rbpn         double[3][3]    GCRS-to-true matrix (Notes 8,9)
+**
+**  Notes:
+**
+**  1)  The TT date date1+date2 is a Julian Date, apportioned in any
+**      convenient way between the two arguments.  For example,
+**      JD(TT)=2450123.7 could be expressed in any of these ways,
+**      among others:
+**
+**             date1          date2
+**
+**          2450123.7           0.0       (JD method)
+**          2451545.0       -1421.3       (J2000 method)
+**          2400000.5       50123.2       (MJD method)
+**          2450123.5           0.2       (date & time method)
+**
+**      The JD method is the most natural and convenient to use in
+**      cases where the loss of several decimal digits of resolution
+**      is acceptable.  The J2000 method is best matched to the way
+**      the argument is handled internally and will deliver the
+**      optimum resolution.  The MJD method and the date & time methods
+**      are both good compromises between resolution and convenience.
+**
+**  2)  The nutation components (luni-solar + planetary, IAU 2000B) in
+**      longitude and obliquity are in radians and with respect to the
+**      equinox and ecliptic of date.  For more accurate results, but
+**      at the cost of increased computation, use the eraPn00a function.
+**      For the utmost accuracy, use the eraPn00  function, where the
+**      nutation components are caller-specified.
+**
+**  3)  The mean obliquity is consistent with the IAU 2000 precession.
+**
+**  4)  The matrix rb transforms vectors from GCRS to J2000.0 mean
+**      equator and equinox by applying frame bias.
+**
+**  5)  The matrix rp transforms vectors from J2000.0 mean equator and
+**      equinox to mean equator and equinox of date by applying
+**      precession.
+**
+**  6)  The matrix rbp transforms vectors from GCRS to mean equator and
+**      equinox of date by applying frame bias then precession.  It is
+**      the product rp x rb.
+**
+**  7)  The matrix rn transforms vectors from mean equator and equinox
+**      of date to true equator and equinox of date by applying the
+**      nutation (luni-solar + planetary).
+**
+**  8)  The matrix rbpn transforms vectors from GCRS to true equator and
+**      equinox of date.  It is the product rn x rbp, applying frame
+**      bias, precession and nutation in that order.
+**
+**  9)  The X,Y,Z coordinates of the IAU 2000B Celestial Intermediate
+**      Pole are elements (3,1-3) of the matrix rbpn.
+**
+**  10) It is permissible to re-use the same array in the returned
+**      arguments.  The arrays are filled in the stated order.
+**
+**  Called:
+**     eraNut00b    nutation, IAU 2000B
+**     eraPn00      bias/precession/nutation results, IAU 2000
+**
+**  Reference:
+**
+**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003).
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Nutation. */
+   eraNut00b(date1, date2, dpsi, deps);
+
+/* Remaining results. */
+   eraPn00(date1, date2, *dpsi, *deps, epsa, rb, rp, rbp, rn, rbpn);
+
+   return;
+
+}
+
+void eraPn06(double date1, double date2, double dpsi, double deps,
+             double *epsa,
+             double rb[3][3], double rp[3][3], double rbp[3][3],
+             double rn[3][3], double rbpn[3][3])
+/*
+**  - - - - - - - -
+**   e r a P n 0 6
+**  - - - - - - - -
+**
+**  Precession-nutation, IAU 2006 model:  a multi-purpose function,
+**  supporting classical (equinox-based) use directly and CIO-based use
+**  indirectly.
+**
+**  Given:
+**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
+**     dpsi,deps    double          nutation (Note 2)
+**
+**  Returned:
+**     epsa         double          mean obliquity (Note 3)
+**     rb           double[3][3]    frame bias matrix (Note 4)
+**     rp           double[3][3]    precession matrix (Note 5)
+**     rbp          double[3][3]    bias-precession matrix (Note 6)
+**     rn           double[3][3]    nutation matrix (Note 7)
+**     rbpn         double[3][3]    GCRS-to-true matrix (Note 8)
+**
+**  Notes:
+**
+**  1)  The TT date date1+date2 is a Julian Date, apportioned in any
+**      convenient way between the two arguments.  For example,
+**      JD(TT)=2450123.7 could be expressed in any of these ways,
+**      among others:
+**
+**             date1          date2
+**
+**          2450123.7           0.0       (JD method)
+**          2451545.0       -1421.3       (J2000 method)
+**          2400000.5       50123.2       (MJD method)
+**          2450123.5           0.2       (date & time method)
+**
+**      The JD method is the most natural and convenient to use in
+**      cases where the loss of several decimal digits of resolution
+**      is acceptable.  The J2000 method is best matched to the way
+**      the argument is handled internally and will deliver the
+**      optimum resolution.  The MJD method and the date & time methods
+**      are both good compromises between resolution and convenience.
+**
+**  2)  The caller is responsible for providing the nutation components;
+**      they are in longitude and obliquity, in radians and are with
+**      respect to the equinox and ecliptic of date.  For high-accuracy
+**      applications, free core nutation should be included as well as
+**      any other relevant corrections to the position of the CIP.
+**
+**  3)  The returned mean obliquity is consistent with the IAU 2006
+**      precession.
+**
+**  4)  The matrix rb transforms vectors from GCRS to J2000.0 mean
+**      equator and equinox by applying frame bias.
+**
+**  5)  The matrix rp transforms vectors from J2000.0 mean equator and
+**      equinox to mean equator and equinox of date by applying
+**      precession.
+**
+**  6)  The matrix rbp transforms vectors from GCRS to mean equator and
+**      equinox of date by applying frame bias then precession.  It is
+**      the product rp x rb.
+**
+**  7)  The matrix rn transforms vectors from mean equator and equinox
+**      of date to true equator and equinox of date by applying the
+**      nutation (luni-solar + planetary).
+**
+**  8)  The matrix rbpn transforms vectors from GCRS to true equator and
+**      equinox of date.  It is the product rn x rbp, applying frame
+**      bias, precession and nutation in that order.
+**
+**  9)  The X,Y,Z coordinates of the IAU 2000B Celestial Intermediate
+**      Pole are elements (3,1-3) of the matrix rbpn.
+**
+**  10) It is permissible to re-use the same array in the returned
+**      arguments.  The arrays are filled in the stated order.
+**
+**  Called:
+**     eraPfw06     bias-precession F-W angles, IAU 2006
+**     eraFw2m      F-W angles to r-matrix
+**     eraCr        copy r-matrix
+**     eraTr        transpose r-matrix
+**     eraRxr       product of two r-matrices
+**
+**  References:
+**
+**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
+**
+**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double gamb, phib, psib, eps, r1[3][3], r2[3][3], rt[3][3];
+
+
+/* Bias-precession Fukushima-Williams angles of J2000.0 = frame bias. */
+   eraPfw06(ERFA_DJM0, ERFA_DJM00, &gamb, &phib, &psib, &eps);
+
+/* B matrix. */
+   eraFw2m(gamb, phib, psib, eps, r1);
+   eraCr(r1, rb);
+
+/* Bias-precession Fukushima-Williams angles of date. */
+   eraPfw06(date1, date2, &gamb, &phib, &psib, &eps);
+
+/* Bias-precession matrix. */
+   eraFw2m(gamb, phib, psib, eps, r2);
+   eraCr(r2, rbp);
+
+/* Solve for precession matrix. */
+   eraTr(r1, rt);
+   eraRxr(r2, rt, rp);
+
+/* Equinox-based bias-precession-nutation matrix. */
+   eraFw2m(gamb, phib, psib + dpsi, eps + deps, r1);
+   eraCr(r1, rbpn);
+
+/* Solve for nutation matrix. */
+   eraTr(r2, rt);
+   eraRxr(r1, rt, rn);
+
+/* Obliquity, mean of date. */
+   *epsa = eps;
+
+   return;
+
+}
+
+void eraPn06a(double date1, double date2,
+              double *dpsi, double *deps, double *epsa,
+              double rb[3][3], double rp[3][3], double rbp[3][3],
+              double rn[3][3], double rbpn[3][3])
+/*
+**  - - - - - - - - -
+**   e r a P n 0 6 a
+**  - - - - - - - - -
+**
+**  Precession-nutation, IAU 2006/2000A models:  a multi-purpose function,
+**  supporting classical (equinox-based) use directly and CIO-based use
+**  indirectly.
+**
+**  Given:
+**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     dpsi,deps    double          nutation (Note 2)
+**     epsa         double          mean obliquity (Note 3)
+**     rb           double[3][3]    frame bias matrix (Note 4)
+**     rp           double[3][3]    precession matrix (Note 5)
+**     rbp          double[3][3]    bias-precession matrix (Note 6)
+**     rn           double[3][3]    nutation matrix (Note 7)
+**     rbpn         double[3][3]    GCRS-to-true matrix (Notes 8,9)
+**
+**  Notes:
+**
+**  1)  The TT date date1+date2 is a Julian Date, apportioned in any
+**      convenient way between the two arguments.  For example,
+**      JD(TT)=2450123.7 could be expressed in any of these ways,
+**      among others:
+**
+**             date1          date2
+**
+**          2450123.7           0.0       (JD method)
+**          2451545.0       -1421.3       (J2000 method)
+**          2400000.5       50123.2       (MJD method)
+**          2450123.5           0.2       (date & time method)
+**
+**      The JD method is the most natural and convenient to use in
+**      cases where the loss of several decimal digits of resolution
+**      is acceptable.  The J2000 method is best matched to the way
+**      the argument is handled internally and will deliver the
+**      optimum resolution.  The MJD method and the date & time methods
+**      are both good compromises between resolution and convenience.
+**
+**  2)  The nutation components (luni-solar + planetary, IAU 2000A) in
+**      longitude and obliquity are in radians and with respect to the
+**      equinox and ecliptic of date.  Free core nutation is omitted;
+**      for the utmost accuracy, use the eraPn06 function, where the
+**      nutation components are caller-specified.
+**
+**  3)  The mean obliquity is consistent with the IAU 2006 precession.
+**
+**  4)  The matrix rb transforms vectors from GCRS to mean J2000.0 by
+**      applying frame bias.
+**
+**  5)  The matrix rp transforms vectors from mean J2000.0 to mean of
+**      date by applying precession.
+**
+**  6)  The matrix rbp transforms vectors from GCRS to mean of date by
+**      applying frame bias then precession.  It is the product rp x rb.
+**
+**  7)  The matrix rn transforms vectors from mean of date to true of
+**      date by applying the nutation (luni-solar + planetary).
+**
+**  8)  The matrix rbpn transforms vectors from GCRS to true of date
+**      (CIP/equinox).  It is the product rn x rbp, applying frame bias,
+**      precession and nutation in that order.
+**
+**  9)  The X,Y,Z coordinates of the IAU 2006/2000A Celestial
+**      Intermediate Pole are elements (1,1-3) of the matrix rbpn.
+**
+**  10) It is permissible to re-use the same array in the returned
+**      arguments.  The arrays are filled in the stated order.
+**
+**  Called:
+**     eraNut06a    nutation, IAU 2006/2000A
+**     eraPn06      bias/precession/nutation results, IAU 2006
+**
+**  Reference:
+**
+**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Nutation. */
+   eraNut06a(date1, date2, dpsi, deps);
+
+/* Remaining results. */
+   eraPn06(date1, date2, *dpsi, *deps, epsa, rb, rp, rbp, rn, rbpn);
+
+   return;
+
+}
+
+void eraPnm00a(double date1, double date2, double rbpn[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a P n m 0 0 a
+**  - - - - - - - - - -
+**
+**  Form the matrix of precession-nutation for a given date (including
+**  frame bias), equinox-based, IAU 2000A model.
+**
+**  Given:
+**     date1,date2  double     TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rbpn         double[3][3]    classical NPB matrix (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix operates in the sense V(date) = rbpn * V(GCRS), where
+**     the p-vector V(date) is with respect to the true equatorial triad
+**     of date date1+date2 and the p-vector V(GCRS) is with respect to
+**     the Geocentric Celestial Reference System (IAU, 2000).
+**
+**  3) A faster, but slightly less accurate result (about 1 mas), can be
+**     obtained by using instead the eraPnm00b function.
+**
+**  Called:
+**     eraPn00a     bias/precession/nutation, IAU 2000A
+**
+**  Reference:
+**
+**     IAU: Trans. International Astronomical Union, Vol. XXIVB;  Proc.
+**     24th General Assembly, Manchester, UK.  Resolutions B1.3, B1.6.
+**     (2000)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rn[3][3];
+
+
+/* Obtain the required matrix (discarding other results). */
+   eraPn00a(date1, date2, &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn);
+
+   return;
+
+}
+
+void eraPnm00b(double date1, double date2, double rbpn[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a P n m 0 0 b
+**  - - - - - - - - - -
+**
+**  Form the matrix of precession-nutation for a given date (including
+**  frame bias), equinox-based, IAU 2000B model.
+**
+**  Given:
+**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rbpn        double[3][3] bias-precession-nutation matrix (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix operates in the sense V(date) = rbpn * V(GCRS), where
+**     the p-vector V(date) is with respect to the true equatorial triad
+**     of date date1+date2 and the p-vector V(GCRS) is with respect to
+**     the Geocentric Celestial Reference System (IAU, 2000).
+**
+**  3) The present function is faster, but slightly less accurate (about
+**     1 mas), than the eraPnm00a function.
+**
+**  Called:
+**     eraPn00b     bias/precession/nutation, IAU 2000B
+**
+**  Reference:
+**
+**     IAU: Trans. International Astronomical Union, Vol. XXIVB;  Proc.
+**     24th General Assembly, Manchester, UK.  Resolutions B1.3, B1.6.
+**     (2000)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rn[3][3];
+
+
+/* Obtain the required matrix (discarding other results). */
+   eraPn00b(date1, date2, &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn);
+
+   return;
+
+}
+
+void eraPnm06a(double date1, double date2, double rnpb[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a P n m 0 6 a
+**  - - - - - - - - - -
+**
+**  Form the matrix of precession-nutation for a given date (including
+**  frame bias), IAU 2006 precession and IAU 2000A nutation models.
+**
+**  Given:
+**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     rnpb        double[3][3] bias-precession-nutation matrix (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix operates in the sense V(date) = rnpb * V(GCRS), where
+**     the p-vector V(date) is with respect to the true equatorial triad
+**     of date date1+date2 and the p-vector V(GCRS) is with respect to
+**     the Geocentric Celestial Reference System (IAU, 2000).
+**
+**  Called:
+**     eraPfw06     bias-precession F-W angles, IAU 2006
+**     eraNut06a    nutation, IAU 2006/2000A
+**     eraFw2m      F-W angles to r-matrix
+**
+**  Reference:
+**
+**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double gamb, phib, psib, epsa, dp, de;
+
+
+/* Fukushima-Williams angles for frame bias and precession. */
+   eraPfw06(date1, date2, &gamb, &phib, &psib, &epsa);
+
+/* Nutation components. */
+   eraNut06a(date1, date2, &dp, &de);
+
+/* Equinox based nutation x precession x bias matrix. */
+   eraFw2m(gamb, phib, psib + dp, epsa + de, rnpb);
+
+   return;
+
+}
+
+void eraPnm80(double date1, double date2, double rmatpn[3][3])
+/*
+**  - - - - - - - - -
+**   e r a P n m 8 0
+**  - - - - - - - - -
+**
+**  Form the matrix of precession/nutation for a given date, IAU 1976
+**  precession model, IAU 1980 nutation model.
+**
+**  Given:
+**     date1,date2    double         TDB date (Note 1)
+**
+**  Returned:
+**     rmatpn         double[3][3]   combined precession/nutation matrix
+**
+**  Notes:
+**
+**  1) The TDB date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TDB)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The matrix operates in the sense V(date) = rmatpn * V(J2000),
+**     where the p-vector V(date) is with respect to the true equatorial
+**     triad of date date1+date2 and the p-vector V(J2000) is with
+**     respect to the mean equatorial triad of epoch J2000.0.
+**
+**  Called:
+**     eraPmat76    precession matrix, IAU 1976
+**     eraNutm80    nutation matrix, IAU 1980
+**     eraRxr       product of two r-matrices
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992),
+**     Section 3.3 (p145).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rmatp[3][3], rmatn[3][3];
+
+
+/* Precession matrix, J2000.0 to date. */
+   eraPmat76(date1, date2, rmatp);
+
+/* Nutation matrix. */
+   eraNutm80(date1, date2, rmatn);
+
+/* Combine the matrices:  PN = N x P. */
+   eraRxr(rmatn, rmatp, rmatpn);
+
+   return;
+
+}
+
+void eraPom00(double xp, double yp, double sp, double rpom[3][3])
+/*
+**  - - - - - - - - - -
+**   e r a P o m 0 0
+**  - - - - - - - - - -
+**
+**  Form the matrix of polar motion for a given date, IAU 2000.
+**
+**  Given:
+**     xp,yp    double    coordinates of the pole (radians, Note 1)
+**     sp       double    the TIO locator s' (radians, Note 2)
+**
+**  Returned:
+**     rpom     double[3][3]   polar-motion matrix (Note 3)
+**
+**  Notes:
+**
+**  1) The arguments xp and yp are the coordinates (in radians) of the
+**     Celestial Intermediate Pole with respect to the International
+**     Terrestrial Reference System (see IERS Conventions 2003),
+**     measured along the meridians to 0 and 90 deg west respectively.
+**
+**  2) The argument sp is the TIO locator s', in radians, which
+**     positions the Terrestrial Intermediate Origin on the equator.  It
+**     is obtained from polar motion observations by numerical
+**     integration, and so is in essence unpredictable.  However, it is
+**     dominated by a secular drift of about 47 microarcseconds per
+**     century, and so can be taken into account by using s' = -47*t,
+**     where t is centuries since J2000.0.  The function eraSp00
+**     implements this approximation.
+**
+**  3) The matrix operates in the sense V(TRS) = rpom * V(CIP), meaning
+**     that it is the final rotation when computing the pointing
+**     direction to a celestial source.
+**
+**  Called:
+**     eraIr        initialize r-matrix to identity
+**     eraRz        rotate around Z-axis
+**     eraRy        rotate around Y-axis
+**     eraRx        rotate around X-axis
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* Construct the matrix. */
+   eraIr(rpom);
+   eraRz(sp, rpom);
+   eraRy(-xp, rpom);
+   eraRx(-yp, rpom);
+
+   return;
+
+}
+
+void eraPpp(double a[3], double b[3], double apb[3])
+/*
+**  - - - - - - -
+**   e r a P p p
+**  - - - - - - -
+**
+**  P-vector addition.
+**
+**  Given:
+**     a        double[3]      first p-vector
+**     b        double[3]      second p-vector
+**
+**  Returned:
+**     apb      double[3]      a + b
+**
+**  Note:
+**     It is permissible to re-use the same array for any of the
+**     arguments.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   apb[0] = a[0] + b[0];
+   apb[1] = a[1] + b[1];
+   apb[2] = a[2] + b[2];
+
+   return;
+
+}
+
+void eraPpsp(double a[3], double s, double b[3], double apsb[3])
+/*
+**  - - - - - - - -
+**   e r a P p s p
+**  - - - - - - - -
+**
+**  P-vector plus scaled p-vector.
+**
+**  Given:
+**     a      double[3]     first p-vector
+**     s      double        scalar (multiplier for b)
+**     b      double[3]     second p-vector
+**
+**  Returned:
+**     apsb   double[3]     a + s*b
+**
+**  Note:
+**     It is permissible for any of a, b and apsb to be the same array.
+**
+**  Called:
+**     eraSxp       multiply p-vector by scalar
+**     eraPpp       p-vector plus p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double sb[3];
+
+
+/* s*b. */
+   eraSxp(s, b, sb);
+
+/* a + s*b. */
+   eraPpp(a, sb, apsb);
+
+   return;
+
+}
+
+void eraPr00(double date1, double date2, double *dpsipr, double *depspr)
+/*
+**  - - - - - - - -
+**   e r a P r 0 0
+**  - - - - - - - -
+**
+**  Precession-rate part of the IAU 2000 precession-nutation models
+**  (part of MHB2000).
+**
+**  Given:
+**     date1,date2    double  TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     dpsipr,depspr  double  precession corrections (Notes 2,3)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The precession adjustments are expressed as "nutation
+**     components", corrections in longitude and obliquity with respect
+**     to the J2000.0 equinox and ecliptic.
+**
+**  3) Although the precession adjustments are stated to be with respect
+**     to Lieske et al. (1977), the MHB2000 model does not specify which
+**     set of Euler angles are to be used and how the adjustments are to
+**     be applied.  The most literal and straightforward procedure is to
+**     adopt the 4-rotation epsilon_0, psi_A, omega_A, xi_A option, and
+**     to add dpsipr to psi_A and depspr to both omega_A and eps_A.
+**
+**  4) This is an implementation of one aspect of the IAU 2000A nutation
+**     model, formally adopted by the IAU General Assembly in 2000,
+**     namely MHB2000 (Mathews et al. 2002).
+**
+**  References:
+**
+**     Lieske, J.H., Lederle, T., Fricke, W. & Morando, B., "Expressions
+**     for the precession quantities based upon the IAU (1976) System of
+**     Astronomical Constants", Astron.Astrophys., 58, 1-16 (1977)
+**
+**     Mathews, P.M., Herring, T.A., Buffet, B.A., "Modeling of nutation
+**     and precession   New nutation series for nonrigid Earth and
+**     insights into the Earth's interior", J.Geophys.Res., 107, B4,
+**     2002.  The MHB2000 code itself was obtained on 9th September 2002
+**     from ftp://maia.usno.navy.mil/conv2000/chapter5/IAU2000A.
+**
+**     Wallace, P.T., "Software for Implementing the IAU 2000
+**     Resolutions", in IERS Workshop 5.1 (2002).
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t;
+
+/* Precession and obliquity corrections (radians per century) */
+   static const double PRECOR = -0.29965 * ERFA_DAS2R,
+                       OBLCOR = -0.02524 * ERFA_DAS2R;
+
+
+/* Interval between fundamental epoch J2000.0 and given date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Precession rate contributions with respect to IAU 1976/80. */
+   *dpsipr = PRECOR * t;
+   *depspr = OBLCOR * t;
+
+   return;
+
+}
+
+void eraPrec76(double ep01, double ep02, double ep11, double ep12,
+               double *zeta, double *z, double *theta)
+/*
+**  - - - - - - - - - -
+**   e r a P r e c 7 6
+**  - - - - - - - - - -
+**
+**  IAU 1976 precession model.
+**
+**  This function forms the three Euler angles which implement general
+**  precession between two epochs, using the IAU 1976 model (as for
+**  the FK5 catalog).
+**
+**  Given:
+**     ep01,ep02   double    TDB starting epoch (Note 1)
+**     ep11,ep12   double    TDB ending epoch (Note 1)
+**
+**  Returned:
+**     zeta        double    1st rotation: radians cw around z
+**     z           double    3rd rotation: radians cw around z
+**     theta       double    2nd rotation: radians ccw around y
+**
+**  Notes:
+**
+**  1) The epochs ep01+ep02 and ep11+ep12 are Julian Dates, apportioned
+**     in any convenient way between the arguments epn1 and epn2.  For
+**     example, JD(TDB)=2450123.7 could be expressed in any of these
+**     ways, among others:
+**
+**             epn1          epn2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in cases
+**     where the loss of several decimal digits of resolution is
+**     acceptable.  The J2000 method is best matched to the way the
+**     argument is handled internally and will deliver the optimum
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**     The two epochs may be expressed using different methods, but at
+**     the risk of losing some resolution.
+**
+**  2) The accumulated precession angles zeta, z, theta are expressed
+**     through canonical polynomials which are valid only for a limited
+**     time span.  In addition, the IAU 1976 precession rate is known to
+**     be imperfect.  The absolute accuracy of the present formulation
+**     is better than 0.1 arcsec from 1960AD to 2040AD, better than
+**     1 arcsec from 1640AD to 2360AD, and remains below 3 arcsec for
+**     the whole of the period 500BC to 3000AD.  The errors exceed
+**     10 arcsec outside the range 1200BC to 3900AD, exceed 100 arcsec
+**     outside 4200BC to 5600AD and exceed 1000 arcsec outside 6800BC to
+**     8200AD.
+**
+**  3) The three angles are returned in the conventional order, which
+**     is not the same as the order of the corresponding Euler
+**     rotations.  The precession matrix is
+**     R_3(-z) x R_2(+theta) x R_3(-zeta).
+**
+**  Reference:
+**
+**     Lieske, J.H., 1979, Astron.Astrophys. 73, 282, equations
+**     (6) & (7), p283.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t0, t, tas2r, w;
+
+
+/* Interval between fundamental epoch J2000.0 and start epoch (JC). */
+   t0 = ((ep01 - ERFA_DJ00) + ep02) / ERFA_DJC;
+
+/* Interval over which precession required (JC). */
+   t = ((ep11 - ep01) + (ep12 - ep02)) / ERFA_DJC;
+
+/* Euler angles. */
+   tas2r = t * ERFA_DAS2R;
+   w = 2306.2181 + (1.39656 - 0.000139 * t0) * t0;
+
+   *zeta = (w + ((0.30188 - 0.000344 * t0) + 0.017998 * t) * t) * tas2r;
+
+   *z = (w + ((1.09468 + 0.000066 * t0) + 0.018203 * t) * t) * tas2r;
+
+   *theta = ((2004.3109 + (-0.85330 - 0.000217 * t0) * t0)
+          + ((-0.42665 - 0.000217 * t0) - 0.041833 * t) * t) * tas2r;
+
+   return;
+
+}
+
+void eraPv2p(double pv[2][3], double p[3])
+/*
+**  - - - - - - - -
+**   e r a P v 2 p
+**  - - - - - - - -
+**
+**  Discard velocity component of a pv-vector.
+**
+**  Given:
+**     pv      double[2][3]     pv-vector
+**
+**  Returned:
+**     p       double[3]        p-vector
+**
+**  Called:
+**     eraCp        copy p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraCp(pv[0], p);
+
+   return;
+
+}
+
+void eraPv2s(double pv[2][3],
+             double *theta, double *phi, double *r,
+             double *td, double *pd, double *rd)
+/*
+**  - - - - - - - -
+**   e r a P v 2 s
+**  - - - - - - - -
+**
+**  Convert position/velocity from Cartesian to spherical coordinates.
+**
+**  Given:
+**     pv       double[2][3]  pv-vector
+**
+**  Returned:
+**     theta    double        longitude angle (radians)
+**     phi      double        latitude angle (radians)
+**     r        double        radial distance
+**     td       double        rate of change of theta
+**     pd       double        rate of change of phi
+**     rd       double        rate of change of r
+**
+**  Notes:
+**
+**  1) If the position part of pv is null, theta, phi, td and pd
+**     are indeterminate.  This is handled by extrapolating the
+**     position through unit time by using the velocity part of
+**     pv.  This moves the origin without changing the direction
+**     of the velocity component.  If the position and velocity
+**     components of pv are both null, zeroes are returned for all
+**     six results.
+**
+**  2) If the position is a pole, theta, td and pd are indeterminate.
+**     In such cases zeroes are returned for all three.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double x, y, z, xd, yd, zd, rxy2, rxy, r2, rtrue, rw, xyp;
+
+
+/* Components of position/velocity vector. */
+   x  = pv[0][0];
+   y  = pv[0][1];
+   z  = pv[0][2];
+   xd = pv[1][0];
+   yd = pv[1][1];
+   zd = pv[1][2];
+
+/* Component of r in XY plane squared. */
+   rxy2 = x*x + y*y;
+
+/* Modulus squared. */
+   r2 = rxy2 + z*z;
+
+/* Modulus. */
+   rtrue = sqrt(r2);
+
+/* If null vector, move the origin along the direction of movement. */
+   rw = rtrue;
+   if (rtrue == 0.0) {
+       x = xd;
+       y = yd;
+       z = zd;
+       rxy2 = x*x + y*y;
+       r2 = rxy2 + z*z;
+       rw = sqrt(r2);
+   }
+
+/* Position and velocity in spherical coordinates. */
+   rxy = sqrt(rxy2);
+   xyp = x*xd + y*yd;
+   if (rxy2 != 0.0) {
+       *theta = atan2(y, x);
+       *phi = atan2(z, rxy);
+       *td = (x*yd - y*xd) / rxy2;
+       *pd = (zd*rxy2 - z*xyp) / (r2*rxy);
+   } else {
+       *theta = 0.0;
+       *phi = (z != 0.0) ? atan2(z, rxy) : 0.0;
+       *td = 0.0;
+       *pd = 0.0;
+   }
+   *r = rtrue;
+   *rd = (rw != 0.0) ? (xyp + z*zd) / rw : 0.0;
+
+   return;
+
+}
+
+void eraPvdpv(double a[2][3], double b[2][3], double adb[2])
+/*
+**  - - - - - - - - -
+**   e r a P v d p v
+**  - - - - - - - - -
+**
+**  Inner (=scalar=dot) product of two pv-vectors.
+**
+**  Given:
+**     a        double[2][3]      first pv-vector
+**     b        double[2][3]      second pv-vector
+**
+**  Returned:
+**     adb      double[2]         a . b (see note)
+**
+**  Note:
+**
+**     If the position and velocity components of the two pv-vectors are
+**     ( ap, av ) and ( bp, bv ), the result, a . b, is the pair of
+**     numbers ( ap . bp , ap . bv + av . bp ).  The two numbers are the
+**     dot-product of the two p-vectors and its derivative.
+**
+**  Called:
+**     eraPdp       scalar product of two p-vectors
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double adbd, addb;
+
+
+/* a . b = constant part of result. */
+   adb[0] = eraPdp(a[0], b[0]);
+
+/* a . bdot */
+   adbd = eraPdp(a[0], b[1]);
+
+/* adot . b */
+   addb = eraPdp(a[1], b[0]);
+
+/* Velocity part of result. */
+   adb[1] = adbd + addb;
+
+   return;
+
+}
+
+void eraPvm(double pv[2][3], double *r, double *s)
+/*
+**  - - - - - - -
+**   e r a P v m
+**  - - - - - - -
+**
+**  Modulus of pv-vector.
+**
+**  Given:
+**     pv     double[2][3]   pv-vector
+**
+**  Returned:
+**     r      double         modulus of position component
+**     s      double         modulus of velocity component
+**
+**  Called:
+**     eraPm        modulus of p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Distance. */
+   *r = eraPm(pv[0]);
+
+/* Speed. */
+   *s = eraPm(pv[1]);
+
+   return;
+
+}
+
+void eraPvmpv(double a[2][3], double b[2][3], double amb[2][3])
+/*
+**  - - - - - - - - -
+**   e r a P v m p v
+**  - - - - - - - - -
+**
+**  Subtract one pv-vector from another.
+**
+**  Given:
+**     a       double[2][3]      first pv-vector
+**     b       double[2][3]      second pv-vector
+**
+**  Returned:
+**     amb     double[2][3]      a - b
+**
+**  Note:
+**     It is permissible to re-use the same array for any of the
+**     arguments.
+**
+**  Called:
+**     eraPmp       p-vector minus p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraPmp(a[0], b[0], amb[0]);
+   eraPmp(a[1], b[1], amb[1]);
+
+   return;
+
+}
+
+void eraPvppv(double a[2][3], double b[2][3], double apb[2][3])
+/*
+**  - - - - - - - - -
+**   e r a P v p p v
+**  - - - - - - - - -
+**
+**  Add one pv-vector to another.
+**
+**  Given:
+**     a        double[2][3]      first pv-vector
+**     b        double[2][3]      second pv-vector
+**
+**  Returned:
+**     apb      double[2][3]      a + b
+**
+**  Note:
+**     It is permissible to re-use the same array for any of the
+**     arguments.
+**
+**  Called:
+**     eraPpp       p-vector plus p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraPpp(a[0], b[0], apb[0]);
+   eraPpp(a[1], b[1], apb[1]);
+
+   return;
+
+}
+
+int eraPvstar(double pv[2][3], double *ra, double *dec,
+              double *pmr, double *pmd, double *px, double *rv)
+/*
+**  - - - - - - - - - -
+**   e r a P v s t a r
+**  - - - - - - - - - -
+**
+**  Convert star position+velocity vector to catalog coordinates.
+**
+**  Given (Note 1):
+**     pv     double[2][3]   pv-vector (AU, AU/day)
+**
+**  Returned (Note 2):
+**     ra     double         right ascension (radians)
+**     dec    double         declination (radians)
+**     pmr    double         RA proper motion (radians/year)
+**     pmd    double         Dec proper motion (radians/year)
+**     px     double         parallax (arcsec)
+**     rv     double         radial velocity (km/s, positive = receding)
+**
+**  Returned (function value):
+**            int            status:
+**                              0 = OK
+**                             -1 = superluminal speed (Note 5)
+**                             -2 = null position vector
+**
+**  Notes:
+**
+**  1) The specified pv-vector is the coordinate direction (and its rate
+**     of change) for the date at which the light leaving the star
+**     reached the solar-system barycenter.
+**
+**  2) The star data returned by this function are "observables" for an
+**     imaginary observer at the solar-system barycenter.  Proper motion
+**     and radial velocity are, strictly, in terms of barycentric
+**     coordinate time, TCB.  For most practical applications, it is
+**     permissible to neglect the distinction between TCB and ordinary
+**     "proper" time on Earth (TT/TAI).  The result will, as a rule, be
+**     limited by the intrinsic accuracy of the proper-motion and
+**     radial-velocity data;  moreover, the supplied pv-vector is likely
+**     to be merely an intermediate result (for example generated by the
+**     function eraStarpv), so that a change of time unit will cancel
+**     out overall.
+**
+**     In accordance with normal star-catalog conventions, the object's
+**     right ascension and declination are freed from the effects of
+**     secular aberration.  The frame, which is aligned to the catalog
+**     equator and equinox, is Lorentzian and centered on the SSB.
+**
+**     Summarizing, the specified pv-vector is for most stars almost
+**     identical to the result of applying the standard geometrical
+**     "space motion" transformation to the catalog data.  The
+**     differences, which are the subject of the Stumpff paper cited
+**     below, are:
+**
+**     (i) In stars with significant radial velocity and proper motion,
+**     the constantly changing light-time distorts the apparent proper
+**     motion.  Note that this is a classical, not a relativistic,
+**     effect.
+**
+**     (ii) The transformation complies with special relativity.
+**
+**  3) Care is needed with units.  The star coordinates are in radians
+**     and the proper motions in radians per Julian year, but the
+**     parallax is in arcseconds; the radial velocity is in km/s, but
+**     the pv-vector result is in AU and AU/day.
+**
+**  4) The proper motions are the rate of change of the right ascension
+**     and declination at the catalog epoch and are in radians per Julian
+**     year.  The RA proper motion is in terms of coordinate angle, not
+**     true angle, and will thus be numerically larger at high
+**     declinations.
+**
+**  5) Straight-line motion at constant speed in the inertial frame is
+**     assumed.  If the speed is greater than or equal to the speed of
+**     light, the function aborts with an error status.
+**
+**  6) The inverse transformation is performed by the function eraStarpv.
+**
+**  Called:
+**     eraPn        decompose p-vector into modulus and direction
+**     eraPdp       scalar product of two p-vectors
+**     eraSxp       multiply p-vector by scalar
+**     eraPmp       p-vector minus p-vector
+**     eraPm        modulus of p-vector
+**     eraPpp       p-vector plus p-vector
+**     eraPv2s      pv-vector to spherical
+**     eraAnp       normalize angle into range 0 to 2pi
+**
+**  Reference:
+**
+**     Stumpff, P., 1985, Astron.Astrophys. 144, 232-240.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double r, x[3], vr, ur[3], vt, ut[3], bett, betr, d, w, del,
+          usr[3], ust[3], a, rad, decd, rd;
+
+
+/* Isolate the radial component of the velocity (AU/day, inertial). */
+   eraPn(pv[0], &r, x);
+   vr = eraPdp(x, pv[1]);
+   eraSxp(vr, x, ur);
+
+/* Isolate the transverse component of the velocity (AU/day, inertial). */
+   eraPmp(pv[1], ur, ut);
+   vt = eraPm(ut);
+
+/* Special-relativity dimensionless parameters. */
+   bett = vt / ERFA_DC;
+   betr = vr / ERFA_DC;
+
+/* The inertial-to-observed correction terms. */
+   d = 1.0 + betr;
+   w = 1.0 - betr*betr - bett*bett;
+   if (d == 0.0 || w < 0) return -1;
+   del = sqrt(w) - 1.0;
+
+/* Apply relativistic correction factor to radial velocity component. */
+   w = (betr != 0) ? (betr - del) / (betr * d) : 1.0;
+   eraSxp(w, ur, usr);
+
+/* Apply relativistic correction factor to tangential velocity */
+/* component.                                                  */
+   eraSxp(1.0/d, ut, ust);
+
+/* Combine the two to obtain the observed velocity vector (AU/day). */
+   eraPpp(usr, ust, pv[1]);
+
+/* Cartesian to spherical. */
+   eraPv2s(pv, &a, dec, &r, &rad, &decd, &rd);
+   if (r == 0.0) return -2;
+
+/* Return RA in range 0 to 2pi. */
+   *ra = eraAnp(a);
+
+/* Return proper motions in radians per year. */
+   *pmr = rad * ERFA_DJY;
+   *pmd = decd * ERFA_DJY;
+
+/* Return parallax in arcsec. */
+   *px = ERFA_DR2AS / r;
+
+/* Return radial velocity in km/s. */
+   *rv = 1e-3 * rd * ERFA_DAU / ERFA_DAYSEC;
+
+/* OK status. */
+   return 0;
+
+}
+
+void eraPvu(double dt, double pv[2][3], double upv[2][3])
+/*
+**  - - - - - - -
+**   e r a P v u
+**  - - - - - - -
+**
+**  Update a pv-vector.
+**
+**  Given:
+**     dt       double           time interval
+**     pv       double[2][3]     pv-vector
+**
+**  Returned:
+**     upv      double[2][3]     p updated, v unchanged
+**
+**  Notes:
+**
+**  1) "Update" means "refer the position component of the vector
+**     to a new date dt time units from the existing date".
+**
+**  2) The time units of dt must match those of the velocity.
+**
+**  3) It is permissible for pv and upv to be the same array.
+**
+**  Called:
+**     eraPpsp      p-vector plus scaled p-vector
+**     eraCp        copy p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraPpsp(pv[0], dt, pv[1], upv[0]);
+   eraCp(pv[1], upv[1]);
+
+   return;
+
+}
+
+void eraPvup(double dt, double pv[2][3], double p[3])
+/*
+**  - - - - - - - -
+**   e r a P v u p
+**  - - - - - - - -
+**
+**  Update a pv-vector, discarding the velocity component.
+**
+**  Given:
+**     dt       double            time interval
+**     pv       double[2][3]      pv-vector
+**
+**  Returned:
+**     p        double[3]         p-vector
+**
+**  Notes:
+**
+**  1) "Update" means "refer the position component of the vector to a
+**     new date dt time units from the existing date".
+**
+**  2) The time units of dt must match those of the velocity.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   p[0] = pv[0][0] + dt * pv[1][0];
+   p[1] = pv[0][1] + dt * pv[1][1];
+   p[2] = pv[0][2] + dt * pv[1][2];
+
+   return;
+
+}
+
+void eraPvxpv(double a[2][3], double b[2][3], double axb[2][3])
+/*
+**  - - - - - - - - -
+**   e r a P v x p v
+**  - - - - - - - - -
+**
+**  Outer (=vector=cross) product of two pv-vectors.
+**
+**  Given:
+**     a        double[2][3]      first pv-vector
+**     b        double[2][3]      second pv-vector
+**
+**  Returned:
+**     axb      double[2][3]      a x b
+**
+**  Notes:
+**
+**  1) If the position and velocity components of the two pv-vectors are
+**     ( ap, av ) and ( bp, bv ), the result, a x b, is the pair of
+**     vectors ( ap x bp, ap x bv + av x bp ).  The two vectors are the
+**     cross-product of the two p-vectors and its derivative.
+**
+**  2) It is permissible to re-use the same array for any of the
+**     arguments.
+**
+**  Called:
+**     eraCpv       copy pv-vector
+**     eraPxp       vector product of two p-vectors
+**     eraPpp       p-vector plus p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double wa[2][3], wb[2][3], axbd[3], adxb[3];
+
+
+/* Make copies of the inputs. */
+   eraCpv(a, wa);
+   eraCpv(b, wb);
+
+/* a x b = position part of result. */
+   eraPxp(wa[0], wb[0], axb[0]);
+
+/* a x bdot + adot x b = velocity part of result. */
+   eraPxp(wa[0], wb[1], axbd);
+   eraPxp(wa[1], wb[0], adxb);
+   eraPpp(axbd, adxb, axb[1]);
+
+   return;
+
+}
+
+void eraPxp(double a[3], double b[3], double axb[3])
+/*
+**  - - - - - - -
+**   e r a P x p
+**  - - - - - - -
+**
+**  p-vector outer (=vector=cross) product.
+**
+**  Given:
+**     a        double[3]      first p-vector
+**     b        double[3]      second p-vector
+**
+**  Returned:
+**     axb      double[3]      a x b
+**
+**  Note:
+**     It is permissible to re-use the same array for any of the
+**     arguments.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double xa, ya, za, xb, yb, zb;
+
+
+   xa = a[0];
+   ya = a[1];
+   za = a[2];
+   xb = b[0];
+   yb = b[1];
+   zb = b[2];
+   axb[0] = ya*zb - za*yb;
+   axb[1] = za*xb - xa*zb;
+   axb[2] = xa*yb - ya*xb;
+
+   return;
+
+}
+
+void eraRm2v(double r[3][3], double w[3])
+/*
+**  - - - - - - - -
+**   e r a R m 2 v
+**  - - - - - - - -
+**
+**  Express an r-matrix as an r-vector.
+**
+**  Given:
+**     r        double[3][3]    rotation matrix
+**
+**  Returned:
+**     w        double[3]       rotation vector (Note 1)
+**
+**  Notes:
+**
+**  1) A rotation matrix describes a rotation through some angle about
+**     some arbitrary axis called the Euler axis.  The "rotation vector"
+**     returned by this function has the same direction as the Euler axis,
+**     and its magnitude is the angle in radians.  (The magnitude and
+**     direction can be separated by means of the function eraPn.)
+**
+**  2) If r is null, so is the result.  If r is not a rotation matrix
+**     the result is undefined;  r must be proper (i.e. have a positive
+**     determinant) and real orthogonal (inverse = transpose).
+**
+**  3) The reference frame rotates clockwise as seen looking along
+**     the rotation vector from the origin.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double x, y, z, s2, c2, phi, f;
+
+
+   x = r[1][2] - r[2][1];
+   y = r[2][0] - r[0][2];
+   z = r[0][1] - r[1][0];
+   s2 = sqrt(x*x + y*y + z*z);
+   if (s2 != 0) {
+      c2 = r[0][0] + r[1][1] + r[2][2] - 1.0;
+      phi = atan2(s2, c2);
+      f =  phi / s2;
+      w[0] = x * f;
+      w[1] = y * f;
+      w[2] = z * f;
+   } else {
+      w[0] = 0.0;
+      w[1] = 0.0;
+      w[2] = 0.0;
+   }
+
+   return;
+
+}
+
+void eraRv2m(double w[3], double r[3][3])
+/*
+**  - - - - - - - -
+**   e r a R v 2 m
+**  - - - - - - - -
+**
+**  Form the r-matrix corresponding to a given r-vector.
+**
+**  Given:
+**     w        double[3]      rotation vector (Note 1)
+**
+**  Returned:
+**     r        double[3][3]    rotation matrix
+**
+**  Notes:
+**
+**  1) A rotation matrix describes a rotation through some angle about
+**     some arbitrary axis called the Euler axis.  The "rotation vector"
+**     supplied to This function has the same direction as the Euler
+**     axis, and its magnitude is the angle in radians.
+**
+**  2) If w is null, the unit matrix is returned.
+**
+**  3) The reference frame rotates clockwise as seen looking along the
+**     rotation vector from the origin.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double x, y, z, phi, s, c, f;
+
+
+/* Euler angle (magnitude of rotation vector) and functions. */
+   x = w[0];
+   y = w[1];
+   z = w[2];
+   phi = sqrt(x*x + y*y + z*z);
+   s = sin(phi);
+   c = cos(phi);
+   f = 1.0 - c;
+
+/* Euler axis (direction of rotation vector), perhaps null. */
+   if (phi != 0.0) {
+       x /= phi;
+       y /= phi;
+       z /= phi;
+   }
+
+/* Form the rotation matrix. */
+   r[0][0] = x*x*f + c;
+   r[0][1] = x*y*f + z*s;
+   r[0][2] = x*z*f - y*s;
+   r[1][0] = y*x*f - z*s;
+   r[1][1] = y*y*f + c;
+   r[1][2] = y*z*f + x*s;
+   r[2][0] = z*x*f + y*s;
+   r[2][1] = z*y*f - x*s;
+   r[2][2] = z*z*f + c;
+
+   return;
+
+}
+
+void eraRx(double phi, double r[3][3])
+/*
+**  - - - - - -
+**   e r a R x
+**  - - - - - -
+**
+**  Rotate an r-matrix about the x-axis.
+**
+**  Given:
+**     phi    double          angle (radians)
+**
+**  Given and returned:
+**     r      double[3][3]    r-matrix, rotated
+**
+**  Notes:
+**
+**  1) Calling this function with positive phi incorporates in the
+**     supplied r-matrix r an additional rotation, about the x-axis,
+**     anticlockwise as seen looking towards the origin from positive x.
+**
+**  2) The additional rotation can be represented by this matrix:
+**
+**         (  1        0            0      )
+**         (                               )
+**         (  0   + cos(phi)   + sin(phi)  )
+**         (                               )
+**         (  0   - sin(phi)   + cos(phi)  )
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double s, c, a10, a11, a12, a20, a21, a22;
+
+
+   s = sin(phi);
+   c = cos(phi);
+
+   a10 =   c*r[1][0] + s*r[2][0];
+   a11 =   c*r[1][1] + s*r[2][1];
+   a12 =   c*r[1][2] + s*r[2][2];
+   a20 = - s*r[1][0] + c*r[2][0];
+   a21 = - s*r[1][1] + c*r[2][1];
+   a22 = - s*r[1][2] + c*r[2][2];
+
+   r[1][0] = a10;
+   r[1][1] = a11;
+   r[1][2] = a12;
+   r[2][0] = a20;
+   r[2][1] = a21;
+   r[2][2] = a22;
+
+   return;
+
+}
+
+void eraRxp(double r[3][3], double p[3], double rp[3])
+/*
+**  - - - - - - -
+**   e r a R x p
+**  - - - - - - -
+**
+**  Multiply a p-vector by an r-matrix.
+**
+**  Given:
+**     r        double[3][3]    r-matrix
+**     p        double[3]       p-vector
+**
+**  Returned:
+**     rp       double[3]       r * p
+**
+**  Note:
+**     It is permissible for p and rp to be the same array.
+**
+**  Called:
+**     eraCp        copy p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double w, wrp[3];
+   int i, j;
+
+
+/* Matrix r * vector p. */
+   for (j = 0; j < 3; j++) {
+       w = 0.0;
+       for (i = 0; i < 3; i++) {
+           w += r[j][i] * p[i];
+       }
+       wrp[j] = w;
+   }
+
+/* Return the result. */
+   eraCp(wrp, rp);
+
+   return;
+
+}
+
+void eraRxpv(double r[3][3], double pv[2][3], double rpv[2][3])
+/*
+**  - - - - - - - -
+**   e r a R x p v
+**  - - - - - - - -
+**
+**  Multiply a pv-vector by an r-matrix.
+**
+**  Given:
+**     r        double[3][3]    r-matrix
+**     pv       double[2][3]    pv-vector
+**
+**  Returned:
+**     rpv      double[2][3]    r * pv
+**
+**  Note:
+**     It is permissible for pv and rpv to be the same array.
+**
+**  Called:
+**     eraRxp       product of r-matrix and p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraRxp(r, pv[0], rpv[0]);
+   eraRxp(r, pv[1], rpv[1]);
+
+   return;
+
+}
+
+void eraRxr(double a[3][3], double b[3][3], double atb[3][3])
+/*
+**  - - - - - - -
+**   e r a R x r
+**  - - - - - - -
+**
+**  Multiply two r-matrices.
+**
+**  Given:
+**     a        double[3][3]    first r-matrix
+**     b        double[3][3]    second r-matrix
+**
+**  Returned:
+**     atb      double[3][3]    a * b
+**
+**  Note:
+**     It is permissible to re-use the same array for any of the
+**     arguments.
+**
+**  Called:
+**     eraCr        copy r-matrix
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int i, j, k;
+   double w, wm[3][3];
+
+
+   for (i = 0; i < 3; i++) {
+      for (j = 0; j < 3; j++) {
+         w = 0.0;
+         for (k = 0; k < 3; k++) {
+            w +=  a[i][k] * b[k][j];
+         }
+         wm[i][j] = w;
+      }
+   }
+   eraCr(wm, atb);
+
+   return;
+
+}
+
+void eraRy(double theta, double r[3][3])
+/*
+**  - - - - - -
+**   e r a R y
+**  - - - - - -
+**
+**  Rotate an r-matrix about the y-axis.
+**
+**  Given:
+**     theta  double          angle (radians)
+**
+**  Given and returned:
+**     r      double[3][3]    r-matrix, rotated
+**
+**  Notes:
+**
+**  1) Calling this function with positive theta incorporates in the
+**     supplied r-matrix r an additional rotation, about the y-axis,
+**     anticlockwise as seen looking towards the origin from positive y.
+**
+**  2) The additional rotation can be represented by this matrix:
+**
+**         (  + cos(theta)     0      - sin(theta)  )
+**         (                                        )
+**         (       0           1           0        )
+**         (                                        )
+**         (  + sin(theta)     0      + cos(theta)  )
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double s, c, a00, a01, a02, a20, a21, a22;
+
+
+   s = sin(theta);
+   c = cos(theta);
+
+   a00 = c*r[0][0] - s*r[2][0];
+   a01 = c*r[0][1] - s*r[2][1];
+   a02 = c*r[0][2] - s*r[2][2];
+   a20 = s*r[0][0] + c*r[2][0];
+   a21 = s*r[0][1] + c*r[2][1];
+   a22 = s*r[0][2] + c*r[2][2];
+
+   r[0][0] = a00;
+   r[0][1] = a01;
+   r[0][2] = a02;
+   r[2][0] = a20;
+   r[2][1] = a21;
+   r[2][2] = a22;
+
+   return;
+
+}
+
+void eraRz(double psi, double r[3][3])
+/*
+**  - - - - - -
+**   e r a R z
+**  - - - - - -
+**
+**  Rotate an r-matrix about the z-axis.
+**
+**  Given:
+**     psi    double          angle (radians)
+**
+**  Given and returned:
+**     r      double[3][3]    r-matrix, rotated
+**
+**  Notes:
+**
+**  1) Calling this function with positive psi incorporates in the
+**     supplied r-matrix r an additional rotation, about the z-axis,
+**     anticlockwise as seen looking towards the origin from positive z.
+**
+**  2) The additional rotation can be represented by this matrix:
+**
+**         (  + cos(psi)   + sin(psi)     0  )
+**         (                                 )
+**         (  - sin(psi)   + cos(psi)     0  )
+**         (                                 )
+**         (       0            0         1  )
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double s, c, a00, a01, a02, a10, a11, a12;
+
+
+   s = sin(psi);
+   c = cos(psi);
+
+   a00 =   c*r[0][0] + s*r[1][0];
+   a01 =   c*r[0][1] + s*r[1][1];
+   a02 =   c*r[0][2] + s*r[1][2];
+   a10 = - s*r[0][0] + c*r[1][0];
+   a11 = - s*r[0][1] + c*r[1][1];
+   a12 = - s*r[0][2] + c*r[1][2];
+
+   r[0][0] = a00;
+   r[0][1] = a01;
+   r[0][2] = a02;
+   r[1][0] = a10;
+   r[1][1] = a11;
+   r[1][2] = a12;
+
+   return;
+
+}
+
+double eraS00(double date1, double date2, double x, double y)
+/*
+**  - - - - - - -
+**   e r a S 0 0
+**  - - - - - - -
+**
+**  The CIO locator s, positioning the Celestial Intermediate Origin on
+**  the equator of the Celestial Intermediate Pole, given the CIP's X,Y
+**  coordinates.  Compatible with IAU 2000A precession-nutation.
+**
+**  Given:
+**     date1,date2   double    TT as a 2-part Julian Date (Note 1)
+**     x,y           double    CIP coordinates (Note 3)
+**
+**  Returned (function value):
+**                   double    the CIO locator s in radians (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The CIO locator s is the difference between the right ascensions
+**     of the same point in two systems:  the two systems are the GCRS
+**     and the CIP,CIO, and the point is the ascending node of the
+**     CIP equator.  The quantity s remains below 0.1 arcsecond
+**     throughout 1900-2100.
+**
+**  3) The series used to compute s is in fact for s+XY/2, where X and Y
+**     are the x and y components of the CIP unit vector;  this series
+**     is more compact than a direct series for s would be.  This
+**     function requires X,Y to be supplied by the caller, who is
+**     responsible for providing values that are consistent with the
+**     supplied date.
+**
+**  4) The model is consistent with the IAU 2000A precession-nutation.
+**
+**  Called:
+**     eraFal03     mean anomaly of the Moon
+**     eraFalp03    mean anomaly of the Sun
+**     eraFaf03     mean argument of the latitude of the Moon
+**     eraFad03     mean elongation of the Moon from the Sun
+**     eraFaom03    mean longitude of the Moon's ascending node
+**     eraFave03    mean longitude of Venus
+**     eraFae03     mean longitude of Earth
+**     eraFapa03    general accumulated precession in longitude
+**
+**  References:
+**
+**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Time since J2000.0, in Julian centuries */
+   double t;
+
+/* Miscellaneous */
+   int i, j;
+   double a, w0, w1, w2, w3, w4, w5;
+
+/* Fundamental arguments */
+   double fa[8];
+
+/* Returned value */
+   double s;
+
+/* --------------------- */
+/* The series for s+XY/2 */
+/* --------------------- */
+
+   typedef struct {
+      int nfa[8];      /* coefficients of l,l',F,D,Om,LVe,LE,pA */
+      double s, c;     /* sine and cosine coefficients */
+   } TERM;
+
+/* Polynomial coefficients */
+   static const double sp[] = {
+
+   /* 1-6 */
+          94.00e-6,
+        3808.35e-6,
+        -119.94e-6,
+      -72574.09e-6,
+          27.70e-6,
+          15.61e-6
+   };
+
+/* Terms of order t^0 */
+   static const TERM s0[] = {
+
+   /* 1-10 */
+      {{ 0,  0,  0,  0,  1,  0,  0,  0}, -2640.73e-6,   0.39e-6 },
+      {{ 0,  0,  0,  0,  2,  0,  0,  0},   -63.53e-6,   0.02e-6 },
+      {{ 0,  0,  2, -2,  3,  0,  0,  0},   -11.75e-6,  -0.01e-6 },
+      {{ 0,  0,  2, -2,  1,  0,  0,  0},   -11.21e-6,  -0.01e-6 },
+      {{ 0,  0,  2, -2,  2,  0,  0,  0},     4.57e-6,   0.00e-6 },
+      {{ 0,  0,  2,  0,  3,  0,  0,  0},    -2.02e-6,   0.00e-6 },
+      {{ 0,  0,  2,  0,  1,  0,  0,  0},    -1.98e-6,   0.00e-6 },
+      {{ 0,  0,  0,  0,  3,  0,  0,  0},     1.72e-6,   0.00e-6 },
+      {{ 0,  1,  0,  0,  1,  0,  0,  0},     1.41e-6,   0.01e-6 },
+      {{ 0,  1,  0,  0, -1,  0,  0,  0},     1.26e-6,   0.01e-6 },
+
+   /* 11-20 */
+      {{ 1,  0,  0,  0, -1,  0,  0,  0},     0.63e-6,   0.00e-6 },
+      {{ 1,  0,  0,  0,  1,  0,  0,  0},     0.63e-6,   0.00e-6 },
+      {{ 0,  1,  2, -2,  3,  0,  0,  0},    -0.46e-6,   0.00e-6 },
+      {{ 0,  1,  2, -2,  1,  0,  0,  0},    -0.45e-6,   0.00e-6 },
+      {{ 0,  0,  4, -4,  4,  0,  0,  0},    -0.36e-6,   0.00e-6 },
+      {{ 0,  0,  1, -1,  1, -8, 12,  0},     0.24e-6,   0.12e-6 },
+      {{ 0,  0,  2,  0,  0,  0,  0,  0},    -0.32e-6,   0.00e-6 },
+      {{ 0,  0,  2,  0,  2,  0,  0,  0},    -0.28e-6,   0.00e-6 },
+      {{ 1,  0,  2,  0,  3,  0,  0,  0},    -0.27e-6,   0.00e-6 },
+      {{ 1,  0,  2,  0,  1,  0,  0,  0},    -0.26e-6,   0.00e-6 },
+
+   /* 21-30 */
+      {{ 0,  0,  2, -2,  0,  0,  0,  0},     0.21e-6,   0.00e-6 },
+      {{ 0,  1, -2,  2, -3,  0,  0,  0},    -0.19e-6,   0.00e-6 },
+      {{ 0,  1, -2,  2, -1,  0,  0,  0},    -0.18e-6,   0.00e-6 },
+      {{ 0,  0,  0,  0,  0,  8,-13, -1},     0.10e-6,  -0.05e-6 },
+      {{ 0,  0,  0,  2,  0,  0,  0,  0},    -0.15e-6,   0.00e-6 },
+      {{ 2,  0, -2,  0, -1,  0,  0,  0},     0.14e-6,   0.00e-6 },
+      {{ 0,  1,  2, -2,  2,  0,  0,  0},     0.14e-6,   0.00e-6 },
+      {{ 1,  0,  0, -2,  1,  0,  0,  0},    -0.14e-6,   0.00e-6 },
+      {{ 1,  0,  0, -2, -1,  0,  0,  0},    -0.14e-6,   0.00e-6 },
+      {{ 0,  0,  4, -2,  4,  0,  0,  0},    -0.13e-6,   0.00e-6 },
+
+   /* 31-33 */
+      {{ 0,  0,  2, -2,  4,  0,  0,  0},     0.11e-6,   0.00e-6 },
+      {{ 1,  0, -2,  0, -3,  0,  0,  0},    -0.11e-6,   0.00e-6 },
+      {{ 1,  0, -2,  0, -1,  0,  0,  0},    -0.11e-6,   0.00e-6 }
+   };
+
+/* Terms of order t^1 */
+   static const TERM s1[] ={
+
+   /* 1-3 */
+      {{ 0,  0,  0,  0,  2,  0,  0,  0},    -0.07e-6,   3.57e-6 },
+      {{ 0,  0,  0,  0,  1,  0,  0,  0},     1.71e-6,  -0.03e-6 },
+      {{ 0,  0,  2, -2,  3,  0,  0,  0},     0.00e-6,   0.48e-6 }
+   };
+
+/* Terms of order t^2 */
+   static const TERM s2[] ={
+
+   /* 1-10 */
+      {{ 0,  0,  0,  0,  1,  0,  0,  0},   743.53e-6,  -0.17e-6 },
+      {{ 0,  0,  2, -2,  2,  0,  0,  0},    56.91e-6,   0.06e-6 },
+      {{ 0,  0,  2,  0,  2,  0,  0,  0},     9.84e-6,  -0.01e-6 },
+      {{ 0,  0,  0,  0,  2,  0,  0,  0},    -8.85e-6,   0.01e-6 },
+      {{ 0,  1,  0,  0,  0,  0,  0,  0},    -6.38e-6,  -0.05e-6 },
+      {{ 1,  0,  0,  0,  0,  0,  0,  0},    -3.07e-6,   0.00e-6 },
+      {{ 0,  1,  2, -2,  2,  0,  0,  0},     2.23e-6,   0.00e-6 },
+      {{ 0,  0,  2,  0,  1,  0,  0,  0},     1.67e-6,   0.00e-6 },
+      {{ 1,  0,  2,  0,  2,  0,  0,  0},     1.30e-6,   0.00e-6 },
+      {{ 0,  1, -2,  2, -2,  0,  0,  0},     0.93e-6,   0.00e-6 },
+
+   /* 11-20 */
+      {{ 1,  0,  0, -2,  0,  0,  0,  0},     0.68e-6,   0.00e-6 },
+      {{ 0,  0,  2, -2,  1,  0,  0,  0},    -0.55e-6,   0.00e-6 },
+      {{ 1,  0, -2,  0, -2,  0,  0,  0},     0.53e-6,   0.00e-6 },
+      {{ 0,  0,  0,  2,  0,  0,  0,  0},    -0.27e-6,   0.00e-6 },
+      {{ 1,  0,  0,  0,  1,  0,  0,  0},    -0.27e-6,   0.00e-6 },
+      {{ 1,  0, -2, -2, -2,  0,  0,  0},    -0.26e-6,   0.00e-6 },
+      {{ 1,  0,  0,  0, -1,  0,  0,  0},    -0.25e-6,   0.00e-6 },
+      {{ 1,  0,  2,  0,  1,  0,  0,  0},     0.22e-6,   0.00e-6 },
+      {{ 2,  0,  0, -2,  0,  0,  0,  0},    -0.21e-6,   0.00e-6 },
+      {{ 2,  0, -2,  0, -1,  0,  0,  0},     0.20e-6,   0.00e-6 },
+
+   /* 21-25 */
+      {{ 0,  0,  2,  2,  2,  0,  0,  0},     0.17e-6,   0.00e-6 },
+      {{ 2,  0,  2,  0,  2,  0,  0,  0},     0.13e-6,   0.00e-6 },
+      {{ 2,  0,  0,  0,  0,  0,  0,  0},    -0.13e-6,   0.00e-6 },
+      {{ 1,  0,  2, -2,  2,  0,  0,  0},    -0.12e-6,   0.00e-6 },
+      {{ 0,  0,  2,  0,  0,  0,  0,  0},    -0.11e-6,   0.00e-6 }
+   };
+
+/* Terms of order t^3 */
+   static const TERM s3[] ={
+
+   /* 1-4 */
+      {{ 0,  0,  0,  0,  1,  0,  0,  0},     0.30e-6, -23.51e-6 },
+      {{ 0,  0,  2, -2,  2,  0,  0,  0},    -0.03e-6,  -1.39e-6 },
+      {{ 0,  0,  2,  0,  2,  0,  0,  0},    -0.01e-6,  -0.24e-6 },
+      {{ 0,  0,  0,  0,  2,  0,  0,  0},     0.00e-6,   0.22e-6 }
+   };
+
+/* Terms of order t^4 */
+   static const TERM s4[] ={
+
+   /* 1-1 */
+      {{ 0,  0,  0,  0,  1,  0,  0,  0},    -0.26e-6,  -0.01e-6 }
+   };
+
+/* Number of terms in the series */
+   const int NS0 = (int) (sizeof s0 / sizeof (TERM));
+   const int NS1 = (int) (sizeof s1 / sizeof (TERM));
+   const int NS2 = (int) (sizeof s2 / sizeof (TERM));
+   const int NS3 = (int) (sizeof s3 / sizeof (TERM));
+   const int NS4 = (int) (sizeof s4 / sizeof (TERM));
+
+/*--------------------------------------------------------------------*/
+
+/* Interval between fundamental epoch J2000.0 and current date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Fundamental Arguments (from IERS Conventions 2003) */
+
+/* Mean anomaly of the Moon. */
+   fa[0] = eraFal03(t);
+
+/* Mean anomaly of the Sun. */
+   fa[1] = eraFalp03(t);
+
+/* Mean longitude of the Moon minus that of the ascending node. */
+   fa[2] = eraFaf03(t);
+
+/* Mean elongation of the Moon from the Sun. */
+   fa[3] = eraFad03(t);
+
+/* Mean longitude of the ascending node of the Moon. */
+   fa[4] = eraFaom03(t);
+
+/* Mean longitude of Venus. */
+   fa[5] = eraFave03(t);
+
+/* Mean longitude of Earth. */
+   fa[6] = eraFae03(t);
+
+/* General precession in longitude. */
+   fa[7] = eraFapa03(t);
+
+/* Evaluate s. */
+   w0 = sp[0];
+   w1 = sp[1];
+   w2 = sp[2];
+   w3 = sp[3];
+   w4 = sp[4];
+   w5 = sp[5];
+
+   for (i = NS0-1; i >= 0; i--) {
+   a = 0.0;
+   for (j = 0; j < 8; j++) {
+       a += (double)s0[i].nfa[j] * fa[j];
+   }
+   w0 += s0[i].s * sin(a) + s0[i].c * cos(a);
+   }
+
+   for (i = NS1-1; i >= 0; i--) {
+   a = 0.0;
+   for (j = 0; j < 8; j++) {
+       a += (double)s1[i].nfa[j] * fa[j];
+   }
+   w1 += s1[i].s * sin(a) + s1[i].c * cos(a);
+   }
+
+   for (i = NS2-1; i >= 0; i--) {
+   a = 0.0;
+   for (j = 0; j < 8; j++) {
+       a += (double)s2[i].nfa[j] * fa[j];
+   }
+   w2 += s2[i].s * sin(a) + s2[i].c * cos(a);
+   }
+
+   for (i = NS3-1; i >= 0; i--) {
+   a = 0.0;
+   for (j = 0; j < 8; j++) {
+       a += (double)s3[i].nfa[j] * fa[j];
+   }
+   w3 += s3[i].s * sin(a) + s3[i].c * cos(a);
+   }
+
+   for (i = NS4-1; i >= 0; i--) {
+   a = 0.0;
+   for (j = 0; j < 8; j++) {
+       a += (double)s4[i].nfa[j] * fa[j];
+   }
+   w4 += s4[i].s * sin(a) + s4[i].c * cos(a);
+   }
+
+   s = (w0 +
+       (w1 +
+       (w2 +
+       (w3 +
+       (w4 +
+        w5 * t) * t) * t) * t) * t) * ERFA_DAS2R - x*y/2.0;
+
+   return s;
+
+}
+
+double eraS00a(double date1, double date2)
+/*
+**  - - - - - - - -
+**   e r a S 0 0 a
+**  - - - - - - - -
+**
+**  The CIO locator s, positioning the Celestial Intermediate Origin on
+**  the equator of the Celestial Intermediate Pole, using the IAU 2000A
+**  precession-nutation model.
+**
+**  Given:
+**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (function value):
+**                  double    the CIO locator s in radians (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The CIO locator s is the difference between the right ascensions
+**     of the same point in two systems.  The two systems are the GCRS
+**     and the CIP,CIO, and the point is the ascending node of the
+**     CIP equator.  The CIO locator s remains a small fraction of
+**     1 arcsecond throughout 1900-2100.
+**
+**  3) The series used to compute s is in fact for s+XY/2, where X and Y
+**     are the x and y components of the CIP unit vector;  this series
+**     is more compact than a direct series for s would be.  The present
+**     function uses the full IAU 2000A nutation model when predicting
+**     the CIP position.  Faster results, with no significant loss of
+**     accuracy, can be obtained via the function eraS00b, which uses
+**     instead the IAU 2000B truncated model.
+**
+**  Called:
+**     eraPnm00a     classical NPB matrix, IAU 2000A
+**     eraBnp2xy     extract CIP X,Y from the BPN matrix
+**     eraS00        the CIO locator s, given X,Y, IAU 2000A
+**
+**  References:
+**
+**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rbpn[3][3], x, y, s;
+
+
+/* Bias-precession-nutation-matrix, IAU 2000A. */
+   eraPnm00a(date1, date2, rbpn);
+
+/* Extract the CIP coordinates. */
+   eraBpn2xy(rbpn, &x, &y);
+
+/* Compute the CIO locator s, given the CIP coordinates. */
+   s = eraS00(date1, date2, x, y);
+
+   return s;
+
+}
+
+double eraS00b(double date1, double date2)
+/*
+**  - - - - - - - -
+**   e r a S 0 0 b
+**  - - - - - - - -
+**
+**  The CIO locator s, positioning the Celestial Intermediate Origin on
+**  the equator of the Celestial Intermediate Pole, using the IAU 2000B
+**  precession-nutation model.
+**
+**  Given:
+**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (function value):
+**                  double    the CIO locator s in radians (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The CIO locator s is the difference between the right ascensions
+**     of the same point in two systems.  The two systems are the GCRS
+**     and the CIP,CIO, and the point is the ascending node of the
+**     CIP equator.  The CIO locator s remains a small fraction of
+**     1 arcsecond throughout 1900-2100.
+**
+**  3) The series used to compute s is in fact for s+XY/2, where X and Y
+**     are the x and y components of the CIP unit vector;  this series
+**     is more compact than a direct series for s would be.  The present
+**     function uses the IAU 2000B truncated nutation model when
+**     predicting the CIP position.  The function eraS00a uses instead
+**     the full IAU 2000A model, but with no significant increase in
+**     accuracy and at some cost in speed.
+**
+**  Called:
+**     eraPnm00b     classical NPB matrix, IAU 2000B
+**     eraBnp2xy     extract CIP X,Y from the BPN matrix
+**     eraS00        the CIO locator s, given X,Y, IAU 2000A
+**
+**  References:
+**
+**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rbpn[3][3], x, y, s;
+
+
+/* Bias-precession-nutation-matrix, IAU 2000B. */
+   eraPnm00b(date1, date2, rbpn);
+
+/* Extract the CIP coordinates. */
+   eraBpn2xy(rbpn, &x, &y);
+
+/* Compute the CIO locator s, given the CIP coordinates. */
+   s = eraS00(date1, date2, x, y);
+
+   return s;
+
+}
+
+double eraS06(double date1, double date2, double x, double y)
+/*
+**  - - - - - - -
+**   e r a S 0 6
+**  - - - - - - -
+**
+**  The CIO locator s, positioning the Celestial Intermediate Origin on
+**  the equator of the Celestial Intermediate Pole, given the CIP's X,Y
+**  coordinates.  Compatible with IAU 2006/2000A precession-nutation.
+**
+**  Given:
+**     date1,date2   double    TT as a 2-part Julian Date (Note 1)
+**     x,y           double    CIP coordinates (Note 3)
+**
+**  Returned (function value):
+**                   double    the CIO locator s in radians (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The CIO locator s is the difference between the right ascensions
+**     of the same point in two systems:  the two systems are the GCRS
+**     and the CIP,CIO, and the point is the ascending node of the
+**     CIP equator.  The quantity s remains below 0.1 arcsecond
+**     throughout 1900-2100.
+**
+**  3) The series used to compute s is in fact for s+XY/2, where X and Y
+**     are the x and y components of the CIP unit vector;  this series
+**     is more compact than a direct series for s would be.  This
+**     function requires X,Y to be supplied by the caller, who is
+**     responsible for providing values that are consistent with the
+**     supplied date.
+**
+**  4) The model is consistent with the "P03" precession (Capitaine et
+**     al. 2003), adopted by IAU 2006 Resolution 1, 2006, and the
+**     IAU 2000A nutation (with P03 adjustments).
+**
+**  Called:
+**     eraFal03     mean anomaly of the Moon
+**     eraFalp03    mean anomaly of the Sun
+**     eraFaf03     mean argument of the latitude of the Moon
+**     eraFad03     mean elongation of the Moon from the Sun
+**     eraFaom03    mean longitude of the Moon's ascending node
+**     eraFave03    mean longitude of Venus
+**     eraFae03     mean longitude of Earth
+**     eraFapa03    general accumulated precession in longitude
+**
+**  References:
+**
+**     Capitaine, N., Wallace, P.T. & Chapront, J., 2003, Astron.
+**     Astrophys. 432, 355
+**
+**     McCarthy, D.D., Petit, G. (eds.) 2004, IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Time since J2000.0, in Julian centuries */
+   double t;
+
+/* Miscellaneous */
+   int i, j;
+   double a, w0, w1, w2, w3, w4, w5;
+
+/* Fundamental arguments */
+   double fa[8];
+
+/* Returned value */
+   double s;
+
+/* --------------------- */
+/* The series for s+XY/2 */
+/* --------------------- */
+
+   typedef struct {
+      int nfa[8];      /* coefficients of l,l',F,D,Om,LVe,LE,pA */
+      double s, c;     /* sine and cosine coefficients */
+   } TERM;
+
+/* Polynomial coefficients */
+   static const double sp[] = {
+
+   /* 1-6 */
+          94.00e-6,
+        3808.65e-6,
+        -122.68e-6,
+      -72574.11e-6,
+          27.98e-6,
+          15.62e-6
+   };
+
+/* Terms of order t^0 */
+   static const TERM s0[] = {
+
+   /* 1-10 */
+      {{ 0,  0,  0,  0,  1,  0,  0,  0}, -2640.73e-6,   0.39e-6 },
+      {{ 0,  0,  0,  0,  2,  0,  0,  0},   -63.53e-6,   0.02e-6 },
+      {{ 0,  0,  2, -2,  3,  0,  0,  0},   -11.75e-6,  -0.01e-6 },
+      {{ 0,  0,  2, -2,  1,  0,  0,  0},   -11.21e-6,  -0.01e-6 },
+      {{ 0,  0,  2, -2,  2,  0,  0,  0},     4.57e-6,   0.00e-6 },
+      {{ 0,  0,  2,  0,  3,  0,  0,  0},    -2.02e-6,   0.00e-6 },
+      {{ 0,  0,  2,  0,  1,  0,  0,  0},    -1.98e-6,   0.00e-6 },
+      {{ 0,  0,  0,  0,  3,  0,  0,  0},     1.72e-6,   0.00e-6 },
+      {{ 0,  1,  0,  0,  1,  0,  0,  0},     1.41e-6,   0.01e-6 },
+      {{ 0,  1,  0,  0, -1,  0,  0,  0},     1.26e-6,   0.01e-6 },
+
+   /* 11-20 */
+      {{ 1,  0,  0,  0, -1,  0,  0,  0},     0.63e-6,   0.00e-6 },
+      {{ 1,  0,  0,  0,  1,  0,  0,  0},     0.63e-6,   0.00e-6 },
+      {{ 0,  1,  2, -2,  3,  0,  0,  0},    -0.46e-6,   0.00e-6 },
+      {{ 0,  1,  2, -2,  1,  0,  0,  0},    -0.45e-6,   0.00e-6 },
+      {{ 0,  0,  4, -4,  4,  0,  0,  0},    -0.36e-6,   0.00e-6 },
+      {{ 0,  0,  1, -1,  1, -8, 12,  0},     0.24e-6,   0.12e-6 },
+      {{ 0,  0,  2,  0,  0,  0,  0,  0},    -0.32e-6,   0.00e-6 },
+      {{ 0,  0,  2,  0,  2,  0,  0,  0},    -0.28e-6,   0.00e-6 },
+      {{ 1,  0,  2,  0,  3,  0,  0,  0},    -0.27e-6,   0.00e-6 },
+      {{ 1,  0,  2,  0,  1,  0,  0,  0},    -0.26e-6,   0.00e-6 },
+
+   /* 21-30 */
+      {{ 0,  0,  2, -2,  0,  0,  0,  0},     0.21e-6,   0.00e-6 },
+      {{ 0,  1, -2,  2, -3,  0,  0,  0},    -0.19e-6,   0.00e-6 },
+      {{ 0,  1, -2,  2, -1,  0,  0,  0},    -0.18e-6,   0.00e-6 },
+      {{ 0,  0,  0,  0,  0,  8,-13, -1},     0.10e-6,  -0.05e-6 },
+      {{ 0,  0,  0,  2,  0,  0,  0,  0},    -0.15e-6,   0.00e-6 },
+      {{ 2,  0, -2,  0, -1,  0,  0,  0},     0.14e-6,   0.00e-6 },
+      {{ 0,  1,  2, -2,  2,  0,  0,  0},     0.14e-6,   0.00e-6 },
+      {{ 1,  0,  0, -2,  1,  0,  0,  0},    -0.14e-6,   0.00e-6 },
+      {{ 1,  0,  0, -2, -1,  0,  0,  0},    -0.14e-6,   0.00e-6 },
+      {{ 0,  0,  4, -2,  4,  0,  0,  0},    -0.13e-6,   0.00e-6 },
+
+   /* 31-33 */
+      {{ 0,  0,  2, -2,  4,  0,  0,  0},     0.11e-6,   0.00e-6 },
+      {{ 1,  0, -2,  0, -3,  0,  0,  0},    -0.11e-6,   0.00e-6 },
+      {{ 1,  0, -2,  0, -1,  0,  0,  0},    -0.11e-6,   0.00e-6 }
+   };
+
+/* Terms of order t^1 */
+   static const TERM s1[] = {
+
+   /* 1 - 3 */
+      {{ 0,  0,  0,  0,  2,  0,  0,  0},    -0.07e-6,   3.57e-6 },
+      {{ 0,  0,  0,  0,  1,  0,  0,  0},     1.73e-6,  -0.03e-6 },
+      {{ 0,  0,  2, -2,  3,  0,  0,  0},     0.00e-6,   0.48e-6 }
+   };
+
+/* Terms of order t^2 */
+   static const TERM s2[] = {
+
+   /* 1-10 */
+      {{ 0,  0,  0,  0,  1,  0,  0,  0},   743.52e-6,  -0.17e-6 },
+      {{ 0,  0,  2, -2,  2,  0,  0,  0},    56.91e-6,   0.06e-6 },
+      {{ 0,  0,  2,  0,  2,  0,  0,  0},     9.84e-6,  -0.01e-6 },
+      {{ 0,  0,  0,  0,  2,  0,  0,  0},    -8.85e-6,   0.01e-6 },
+      {{ 0,  1,  0,  0,  0,  0,  0,  0},    -6.38e-6,  -0.05e-6 },
+      {{ 1,  0,  0,  0,  0,  0,  0,  0},    -3.07e-6,   0.00e-6 },
+      {{ 0,  1,  2, -2,  2,  0,  0,  0},     2.23e-6,   0.00e-6 },
+      {{ 0,  0,  2,  0,  1,  0,  0,  0},     1.67e-6,   0.00e-6 },
+      {{ 1,  0,  2,  0,  2,  0,  0,  0},     1.30e-6,   0.00e-6 },
+      {{ 0,  1, -2,  2, -2,  0,  0,  0},     0.93e-6,   0.00e-6 },
+
+   /* 11-20 */
+      {{ 1,  0,  0, -2,  0,  0,  0,  0},     0.68e-6,   0.00e-6 },
+      {{ 0,  0,  2, -2,  1,  0,  0,  0},    -0.55e-6,   0.00e-6 },
+      {{ 1,  0, -2,  0, -2,  0,  0,  0},     0.53e-6,   0.00e-6 },
+      {{ 0,  0,  0,  2,  0,  0,  0,  0},    -0.27e-6,   0.00e-6 },
+      {{ 1,  0,  0,  0,  1,  0,  0,  0},    -0.27e-6,   0.00e-6 },
+      {{ 1,  0, -2, -2, -2,  0,  0,  0},    -0.26e-6,   0.00e-6 },
+      {{ 1,  0,  0,  0, -1,  0,  0,  0},    -0.25e-6,   0.00e-6 },
+      {{ 1,  0,  2,  0,  1,  0,  0,  0},     0.22e-6,   0.00e-6 },
+      {{ 2,  0,  0, -2,  0,  0,  0,  0},    -0.21e-6,   0.00e-6 },
+      {{ 2,  0, -2,  0, -1,  0,  0,  0},     0.20e-6,   0.00e-6 },
+
+   /* 21-25 */
+      {{ 0,  0,  2,  2,  2,  0,  0,  0},     0.17e-6,   0.00e-6 },
+      {{ 2,  0,  2,  0,  2,  0,  0,  0},     0.13e-6,   0.00e-6 },
+      {{ 2,  0,  0,  0,  0,  0,  0,  0},    -0.13e-6,   0.00e-6 },
+      {{ 1,  0,  2, -2,  2,  0,  0,  0},    -0.12e-6,   0.00e-6 },
+      {{ 0,  0,  2,  0,  0,  0,  0,  0},    -0.11e-6,   0.00e-6 }
+   };
+
+/* Terms of order t^3 */
+   static const TERM s3[] = {
+
+   /* 1-4 */
+      {{ 0,  0,  0,  0,  1,  0,  0,  0},     0.30e-6, -23.42e-6 },
+      {{ 0,  0,  2, -2,  2,  0,  0,  0},    -0.03e-6,  -1.46e-6 },
+      {{ 0,  0,  2,  0,  2,  0,  0,  0},    -0.01e-6,  -0.25e-6 },
+      {{ 0,  0,  0,  0,  2,  0,  0,  0},     0.00e-6,   0.23e-6 }
+   };
+
+/* Terms of order t^4 */
+   static const TERM s4[] = {
+
+   /* 1-1 */
+      {{ 0,  0,  0,  0,  1,  0,  0,  0},    -0.26e-6,  -0.01e-6 }
+   };
+
+/* Number of terms in the series */
+   static const int NS0 = (int) (sizeof s0 / sizeof (TERM));
+   static const int NS1 = (int) (sizeof s1 / sizeof (TERM));
+   static const int NS2 = (int) (sizeof s2 / sizeof (TERM));
+   static const int NS3 = (int) (sizeof s3 / sizeof (TERM));
+   static const int NS4 = (int) (sizeof s4 / sizeof (TERM));
+
+/*--------------------------------------------------------------------*/
+
+/* Interval between fundamental epoch J2000.0 and current date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Fundamental Arguments (from IERS Conventions 2003) */
+
+/* Mean anomaly of the Moon. */
+   fa[0] = eraFal03(t);
+
+/* Mean anomaly of the Sun. */
+   fa[1] = eraFalp03(t);
+
+/* Mean longitude of the Moon minus that of the ascending node. */
+   fa[2] = eraFaf03(t);
+
+/* Mean elongation of the Moon from the Sun. */
+   fa[3] = eraFad03(t);
+
+/* Mean longitude of the ascending node of the Moon. */
+   fa[4] = eraFaom03(t);
+
+/* Mean longitude of Venus. */
+   fa[5] = eraFave03(t);
+
+/* Mean longitude of Earth. */
+   fa[6] = eraFae03(t);
+
+/* General precession in longitude. */
+   fa[7] = eraFapa03(t);
+
+/* Evaluate s. */
+   w0 = sp[0];
+   w1 = sp[1];
+   w2 = sp[2];
+   w3 = sp[3];
+   w4 = sp[4];
+   w5 = sp[5];
+
+   for (i = NS0-1; i >= 0; i--) {
+   a = 0.0;
+   for (j = 0; j < 8; j++) {
+      a += (double)s0[i].nfa[j] * fa[j];
+   }
+   w0 += s0[i].s * sin(a) + s0[i].c * cos(a);
+   }
+
+   for (i = NS1-1; i >= 0; i--) {
+      a = 0.0;
+      for (j = 0; j < 8; j++) {
+         a += (double)s1[i].nfa[j] * fa[j];
+      }
+      w1 += s1[i].s * sin(a) + s1[i].c * cos(a);
+   }
+
+   for (i = NS2-1; i >= 0; i--) {
+      a = 0.0;
+      for (j = 0; j < 8; j++) {
+         a += (double)s2[i].nfa[j] * fa[j];
+      }
+      w2 += s2[i].s * sin(a) + s2[i].c * cos(a);
+   }
+
+   for (i = NS3-1; i >= 0; i--) {
+      a = 0.0;
+      for (j = 0; j < 8; j++) {
+         a += (double)s3[i].nfa[j] * fa[j];
+      }
+      w3 += s3[i].s * sin(a) + s3[i].c * cos(a);
+   }
+
+   for (i = NS4-1; i >= 0; i--) {
+      a = 0.0;
+      for (j = 0; j < 8; j++) {
+         a += (double)s4[i].nfa[j] * fa[j];
+      }
+      w4 += s4[i].s * sin(a) + s4[i].c * cos(a);
+   }
+
+   s = (w0 +
+       (w1 +
+       (w2 +
+       (w3 +
+       (w4 +
+        w5 * t) * t) * t) * t) * t) * ERFA_DAS2R - x*y/2.0;
+
+   return s;
+
+}
+
+double eraS06a(double date1, double date2)
+/*
+**  - - - - - - - -
+**   e r a S 0 6 a
+**  - - - - - - - -
+**
+**  The CIO locator s, positioning the Celestial Intermediate Origin on
+**  the equator of the Celestial Intermediate Pole, using the IAU 2006
+**  precession and IAU 2000A nutation models.
+**
+**  Given:
+**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (function value):
+**                  double    the CIO locator s in radians (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The CIO locator s is the difference between the right ascensions
+**     of the same point in two systems.  The two systems are the GCRS
+**     and the CIP,CIO, and the point is the ascending node of the
+**     CIP equator.  The CIO locator s remains a small fraction of
+**     1 arcsecond throughout 1900-2100.
+**
+**  3) The series used to compute s is in fact for s+XY/2, where X and Y
+**     are the x and y components of the CIP unit vector;  this series is
+**     more compact than a direct series for s would be.  The present
+**     function uses the full IAU 2000A nutation model when predicting
+**     the CIP position.
+**
+**  Called:
+**     eraPnm06a    classical NPB matrix, IAU 2006/2000A
+**     eraBpn2xy    extract CIP X,Y coordinates from NPB matrix
+**     eraS06       the CIO locator s, given X,Y, IAU 2006
+**
+**  References:
+**
+**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
+**     "Expressions for the Celestial Intermediate Pole and Celestial
+**     Ephemeris Origin consistent with the IAU 2000A precession-
+**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
+**
+**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
+**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
+**
+**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
+**
+**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG
+**
+**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rnpb[3][3], x, y, s;
+
+
+/* Bias-precession-nutation-matrix, IAU 20006/2000A. */
+   eraPnm06a(date1, date2, rnpb);
+
+/* Extract the CIP coordinates. */
+   eraBpn2xy(rnpb, &x, &y);
+
+/* Compute the CIO locator s, given the CIP coordinates. */
+   s = eraS06(date1, date2, x, y);
+
+   return s;
+
+}
+
+void eraS2c(double theta, double phi, double c[3])
+/*
+**  - - - - - - -
+**   e r a S 2 c
+**  - - - - - - -
+**
+**  Convert spherical coordinates to Cartesian.
+**
+**  Given:
+**     theta    double       longitude angle (radians)
+**     phi      double       latitude angle (radians)
+**
+**  Returned:
+**     c        double[3]    direction cosines
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double cp;
+
+
+   cp = cos(phi);
+   c[0] = cos(theta) * cp;
+   c[1] = sin(theta) * cp;
+   c[2] = sin(phi);
+
+   return;
+
+}
+
+void eraS2p(double theta, double phi, double r, double p[3])
+/*
+**  - - - - - - -
+**   e r a S 2 p
+**  - - - - - - -
+**
+**  Convert spherical polar coordinates to p-vector.
+**
+**  Given:
+**     theta   double       longitude angle (radians)
+**     phi     double       latitude angle (radians)
+**     r       double       radial distance
+**
+**  Returned:
+**     p       double[3]    Cartesian coordinates
+**
+**  Called:
+**     eraS2c       spherical coordinates to unit vector
+**     eraSxp       multiply p-vector by scalar
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double u[3];
+
+
+   eraS2c(theta, phi, u);
+   eraSxp(r, u, p);
+
+   return;
+
+}
+
+void eraS2pv(double theta, double phi, double r,
+             double td, double pd, double rd,
+             double pv[2][3])
+/*
+**  - - - - - - - -
+**   e r a S 2 p v
+**  - - - - - - - -
+**
+**  Convert position/velocity from spherical to Cartesian coordinates.
+**
+**  Given:
+**     theta    double          longitude angle (radians)
+**     phi      double          latitude angle (radians)
+**     r        double          radial distance
+**     td       double          rate of change of theta
+**     pd       double          rate of change of phi
+**     rd       double          rate of change of r
+**
+**  Returned:
+**     pv       double[2][3]    pv-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double st, ct, sp, cp, rcp, x, y, rpd, w;
+
+
+   st = sin(theta);
+   ct = cos(theta);
+   sp = sin(phi);
+   cp = cos(phi);
+   rcp = r * cp;
+   x = rcp * ct;
+   y = rcp * st;
+   rpd = r * pd;
+   w = rpd*sp - cp*rd;
+
+   pv[0][0] = x;
+   pv[0][1] = y;
+   pv[0][2] = r * sp;
+   pv[1][0] = -y*td - w*ct;
+   pv[1][1] =  x*td - w*st;
+   pv[1][2] = rpd*cp + sp*rd;
+
+   return;
+
+}
+
+void eraS2xpv(double s1, double s2, double pv[2][3], double spv[2][3])
+/*
+**  - - - - - - - - -
+**   e r a S 2 x p v
+**  - - - - - - - - -
+**
+**  Multiply a pv-vector by two scalars.
+**
+**  Given:
+**     s1     double         scalar to multiply position component by
+**     s2     double         scalar to multiply velocity component by
+**     pv     double[2][3]   pv-vector
+**
+**  Returned:
+**     spv    double[2][3]   pv-vector: p scaled by s1, v scaled by s2
+**
+**  Note:
+**     It is permissible for pv and spv to be the same array.
+**
+**  Called:
+**     eraSxp       multiply p-vector by scalar
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraSxp(s1, pv[0], spv[0]);
+   eraSxp(s2, pv[1], spv[1]);
+
+   return;
+
+}
+
+double eraSepp(double a[3], double b[3])
+/*
+**  - - - - - - - -
+**   e r a S e p p
+**  - - - - - - - -
+**
+**  Angular separation between two p-vectors.
+**
+**  Given:
+**     a      double[3]    first p-vector (not necessarily unit length)
+**     b      double[3]    second p-vector (not necessarily unit length)
+**
+**  Returned (function value):
+**            double       angular separation (radians, always positive)
+**
+**  Notes:
+**
+**  1) If either vector is null, a zero result is returned.
+**
+**  2) The angular separation is most simply formulated in terms of
+**     scalar product.  However, this gives poor accuracy for angles
+**     near zero and pi.  The present algorithm uses both cross product
+**     and dot product, to deliver full accuracy whatever the size of
+**     the angle.
+**
+**  Called:
+**     eraPxp       vector product of two p-vectors
+**     eraPm        modulus of p-vector
+**     eraPdp       scalar product of two p-vectors
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double axb[3], ss, cs, s;
+
+
+/* Sine of angle between the vectors, multiplied by the two moduli. */
+   eraPxp(a, b, axb);
+   ss = eraPm(axb);
+
+/* Cosine of the angle, multiplied by the two moduli. */
+   cs = eraPdp(a, b);
+
+/* The angle. */
+   s = ((ss != 0.0) || (cs != 0.0)) ? atan2(ss, cs) : 0.0;
+
+   return s;
+
+}
+
+double eraSeps(double al, double ap, double bl, double bp)
+/*
+**  - - - - - - - -
+**   e r a S e p s
+**  - - - - - - - -
+**
+**  Angular separation between two sets of spherical coordinates.
+**
+**  Given:
+**     al     double       first longitude (radians)
+**     ap     double       first latitude (radians)
+**     bl     double       second longitude (radians)
+**     bp     double       second latitude (radians)
+**
+**  Returned (function value):
+**            double       angular separation (radians)
+**
+**  Called:
+**     eraS2c       spherical coordinates to unit vector
+**     eraSepp      angular separation between two p-vectors
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double ac[3], bc[3], s;
+
+
+/* Spherical to Cartesian. */
+   eraS2c(al, ap, ac);
+   eraS2c(bl, bp, bc);
+
+/* Angle between the vectors. */
+   s = eraSepp(ac, bc);
+
+   return s;
+
+}
+
+double eraSp00(double date1, double date2)
+/*
+**  - - - - - - - -
+**   e r a S p 0 0
+**  - - - - - - - -
+**
+**  The TIO locator s', positioning the Terrestrial Intermediate Origin
+**  on the equator of the Celestial Intermediate Pole.
+**
+**  Given:
+**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
+**
+**  Returned (function value):
+**                  double    the TIO locator s' in radians (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The TIO locator s' is obtained from polar motion observations by
+**     numerical integration, and so is in essence unpredictable.
+**     However, it is dominated by a secular drift of about
+**     47 microarcseconds per century, which is the approximation
+**     evaluated by the present function.
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double t, sp;
+
+
+/* Interval between fundamental epoch J2000.0 and current date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Approximate s'. */
+   sp = -47e-6 * t * ERFA_DAS2R;
+
+   return sp;
+
+}
+
+int eraStarpm(double ra1, double dec1,
+              double pmr1, double pmd1, double px1, double rv1,
+              double ep1a, double ep1b, double ep2a, double ep2b,
+              double *ra2, double *dec2,
+              double *pmr2, double *pmd2, double *px2, double *rv2)
+/*
+**  - - - - - - - - - -
+**   e r a S t a r p m
+**  - - - - - - - - - -
+**
+**  Star proper motion:  update star catalog data for space motion.
+**
+**  Given:
+**     ra1    double     right ascension (radians), before
+**     dec1   double     declination (radians), before
+**     pmr1   double     RA proper motion (radians/year), before
+**     pmd1   double     Dec proper motion (radians/year), before
+**     px1    double     parallax (arcseconds), before
+**     rv1    double     radial velocity (km/s, +ve = receding), before
+**     ep1a   double     "before" epoch, part A (Note 1)
+**     ep1b   double     "before" epoch, part B (Note 1)
+**     ep2a   double     "after" epoch, part A (Note 1)
+**     ep2b   double     "after" epoch, part B (Note 1)
+**
+**  Returned:
+**     ra2    double     right ascension (radians), after
+**     dec2   double     declination (radians), after
+**     pmr2   double     RA proper motion (radians/year), after
+**     pmd2   double     Dec proper motion (radians/year), after
+**     px2    double     parallax (arcseconds), after
+**     rv2    double     radial velocity (km/s, +ve = receding), after
+**
+**  Returned (function value):
+**            int        status:
+**                          -1 = system error (should not occur)
+**                           0 = no warnings or errors
+**                           1 = distance overridden (Note 6)
+**                           2 = excessive velocity (Note 7)
+**                           4 = solution didn't converge (Note 8)
+**                        else = binary logical OR of the above warnings
+**
+**  Notes:
+**
+**  1) The starting and ending TDB dates ep1a+ep1b and ep2a+ep2b are
+**     Julian Dates, apportioned in any convenient way between the two
+**     parts (A and B).  For example, JD(TDB)=2450123.7 could be
+**     expressed in any of these ways, among others:
+**
+**             epna          epnb
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) In accordance with normal star-catalog conventions, the object's
+**     right ascension and declination are freed from the effects of
+**     secular aberration.  The frame, which is aligned to the catalog
+**     equator and equinox, is Lorentzian and centered on the SSB.
+**
+**     The proper motions are the rate of change of the right ascension
+**     and declination at the catalog epoch and are in radians per TDB
+**     Julian year.
+**
+**     The parallax and radial velocity are in the same frame.
+**
+**  3) Care is needed with units.  The star coordinates are in radians
+**     and the proper motions in radians per Julian year, but the
+**     parallax is in arcseconds.
+**
+**  4) The RA proper motion is in terms of coordinate angle, not true
+**     angle.  If the catalog uses arcseconds for both RA and Dec proper
+**     motions, the RA proper motion will need to be divided by cos(Dec)
+**     before use.
+**
+**  5) Straight-line motion at constant speed, in the inertial frame,
+**     is assumed.
+**
+**  6) An extremely small (or zero or negative) parallax is interpreted
+**     to mean that the object is on the "celestial sphere", the radius
+**     of which is an arbitrary (large) value (see the eraStarpv
+**     function for the value used).  When the distance is overridden in
+**     this way, the status, initially zero, has 1 added to it.
+**
+**  7) If the space velocity is a significant fraction of c (see the
+**     constant VMAX in the function eraStarpv),  it is arbitrarily set
+**     to zero.  When this action occurs, 2 is added to the status.
+**
+**  8) The relativistic adjustment carried out in the eraStarpv function
+**     involves an iterative calculation.  If the process fails to
+**     converge within a set number of iterations, 4 is added to the
+**     status.
+**
+**  Called:
+**     eraStarpv    star catalog data to space motion pv-vector
+**     eraPvu       update a pv-vector
+**     eraPdp       scalar product of two p-vectors
+**     eraPvstar    space motion pv-vector to star catalog data
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double pv1[2][3], tl1, dt, pv[2][3], r2, rdv, v2, c2mv2, tl2,
+          pv2[2][3];
+   int j1, j2, j;
+
+
+/* RA,Dec etc. at the "before" epoch to space motion pv-vector. */
+   j1 = eraStarpv(ra1, dec1, pmr1, pmd1, px1, rv1, pv1);
+
+/* Light time when observed (days). */
+   tl1 = eraPm(pv1[0]) / ERFA_DC;
+
+/* Time interval, "before" to "after" (days). */
+   dt = (ep2a - ep1a) + (ep2b - ep1b);
+
+/* Move star along track from the "before" observed position to the */
+/* "after" geometric position. */
+   eraPvu(dt + tl1, pv1, pv);
+
+/* From this geometric position, deduce the observed light time (days) */
+/* at the "after" epoch (with theoretically unneccessary error check). */
+   r2 = eraPdp(pv[0], pv[0]);
+   rdv = eraPdp(pv[0], pv[1]);
+   v2 = eraPdp(pv[1], pv[1]);
+   c2mv2 = ERFA_DC*ERFA_DC - v2;
+   if (c2mv2 <=  0) return -1;
+   tl2 = (-rdv + sqrt(rdv*rdv + c2mv2*r2)) / c2mv2;
+
+/* Move the position along track from the observed place at the */
+/* "before" epoch to the observed place at the "after" epoch. */
+   eraPvu(dt + (tl1 - tl2), pv1, pv2);
+
+/* Space motion pv-vector to RA,Dec etc. at the "after" epoch. */
+   j2 = eraPvstar(pv2, ra2, dec2, pmr2, pmd2, px2, rv2);
+
+/* Final status. */
+   j = (j2 == 0) ? j1 : -1;
+
+   return j;
+
+}
+
+int eraStarpv(double ra, double dec,
+              double pmr, double pmd, double px, double rv,
+              double pv[2][3])
+/*
+**  - - - - - - - - - -
+**   e r a S t a r p v
+**  - - - - - - - - - -
+**
+**  Convert star catalog coordinates to position+velocity vector.
+**
+**  Given (Note 1):
+**     ra     double        right ascension (radians)
+**     dec    double        declination (radians)
+**     pmr    double        RA proper motion (radians/year)
+**     pmd    double        Dec proper motion (radians/year)
+**     px     double        parallax (arcseconds)
+**     rv     double        radial velocity (km/s, positive = receding)
+**
+**  Returned (Note 2):
+**     pv     double[2][3]  pv-vector (AU, AU/day)
+**
+**  Returned (function value):
+**            int           status:
+**                              0 = no warnings
+**                              1 = distance overridden (Note 6)
+**                              2 = excessive speed (Note 7)
+**                              4 = solution didn't converge (Note 8)
+**                           else = binary logical OR of the above
+**
+**  Notes:
+**
+**  1) The star data accepted by this function are "observables" for an
+**     imaginary observer at the solar-system barycenter.  Proper motion
+**     and radial velocity are, strictly, in terms of barycentric
+**     coordinate time, TCB.  For most practical applications, it is
+**     permissible to neglect the distinction between TCB and ordinary
+**     "proper" time on Earth (TT/TAI).  The result will, as a rule, be
+**     limited by the intrinsic accuracy of the proper-motion and
+**     radial-velocity data;  moreover, the pv-vector is likely to be
+**     merely an intermediate result, so that a change of time unit
+**     would cancel out overall.
+**
+**     In accordance with normal star-catalog conventions, the object's
+**     right ascension and declination are freed from the effects of
+**     secular aberration.  The frame, which is aligned to the catalog
+**     equator and equinox, is Lorentzian and centered on the SSB.
+**
+**  2) The resulting position and velocity pv-vector is with respect to
+**     the same frame and, like the catalog coordinates, is freed from
+**     the effects of secular aberration.  Should the "coordinate
+**     direction", where the object was located at the catalog epoch, be
+**     required, it may be obtained by calculating the magnitude of the
+**     position vector pv[0][0-2] dividing by the speed of light in
+**     AU/day to give the light-time, and then multiplying the space
+**     velocity pv[1][0-2] by this light-time and adding the result to
+**     pv[0][0-2].
+**
+**     Summarizing, the pv-vector returned is for most stars almost
+**     identical to the result of applying the standard geometrical
+**     "space motion" transformation.  The differences, which are the
+**     subject of the Stumpff paper referenced below, are:
+**
+**     (i) In stars with significant radial velocity and proper motion,
+**     the constantly changing light-time distorts the apparent proper
+**     motion.  Note that this is a classical, not a relativistic,
+**     effect.
+**
+**     (ii) The transformation complies with special relativity.
+**
+**  3) Care is needed with units.  The star coordinates are in radians
+**     and the proper motions in radians per Julian year, but the
+**     parallax is in arcseconds; the radial velocity is in km/s, but
+**     the pv-vector result is in AU and AU/day.
+**
+**  4) The RA proper motion is in terms of coordinate angle, not true
+**     angle.  If the catalog uses arcseconds for both RA and Dec proper
+**     motions, the RA proper motion will need to be divided by cos(Dec)
+**     before use.
+**
+**  5) Straight-line motion at constant speed, in the inertial frame,
+**     is assumed.
+**
+**  6) An extremely small (or zero or negative) parallax is interpreted
+**     to mean that the object is on the "celestial sphere", the radius
+**     of which is an arbitrary (large) value (see the constant PXMIN).
+**     When the distance is overridden in this way, the status,
+**     initially zero, has 1 added to it.
+**
+**  7) If the space velocity is a significant fraction of c (see the
+**     constant VMAX), it is arbitrarily set to zero.  When this action
+**     occurs, 2 is added to the status.
+**
+**  8) The relativistic adjustment involves an iterative calculation.
+**     If the process fails to converge within a set number (IMAX) of
+**     iterations, 4 is added to the status.
+**
+**  9) The inverse transformation is performed by the function
+**     eraPvstar.
+**
+**  Called:
+**     eraS2pv      spherical coordinates to pv-vector
+**     eraPm        modulus of p-vector
+**     eraZp        zero p-vector
+**     eraPn        decompose p-vector into modulus and direction
+**     eraPdp       scalar product of two p-vectors
+**     eraSxp       multiply p-vector by scalar
+**     eraPmp       p-vector minus p-vector
+**     eraPpp       p-vector plus p-vector
+**
+**  Reference:
+**
+**     Stumpff, P., 1985, Astron.Astrophys. 144, 232-240.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+/* Smallest allowed parallax */
+   static const double PXMIN = 1e-7;
+
+/* Largest allowed speed (fraction of c) */
+   static const double VMAX = 0.5;
+
+/* Maximum number of iterations for relativistic solution */
+   static const int IMAX = 100;
+
+   int i, iwarn;
+   double w, r, rd, rad, decd, v, x[3], usr[3], ust[3],
+          vsr, vst, betst, betsr, bett, betr,
+          dd, ddel, ur[3], ut[3],
+          d = 0.0, del = 0.0,       /* to prevent */
+          odd = 0.0, oddel = 0.0,   /* compiler   */
+          od = 0.0, odel = 0.0;     /* warnings   */
+
+
+/* Distance (AU). */
+   if (px >= PXMIN) {
+      w = px;
+      iwarn = 0;
+   } else {
+      w = PXMIN;
+      iwarn = 1;
+   }
+   r = ERFA_DR2AS / w;
+
+/* Radial velocity (AU/day). */
+   rd = ERFA_DAYSEC * rv * 1e3 / ERFA_DAU;
+
+/* Proper motion (radian/day). */
+   rad = pmr / ERFA_DJY;
+   decd = pmd / ERFA_DJY;
+
+/* To pv-vector (AU,AU/day). */
+   eraS2pv(ra, dec, r, rad, decd, rd, pv);
+
+/* If excessive velocity, arbitrarily set it to zero. */
+   v = eraPm(pv[1]);
+   if (v / ERFA_DC > VMAX) {
+      eraZp(pv[1]);
+      iwarn += 2;
+   }
+
+/* Isolate the radial component of the velocity (AU/day). */
+   eraPn(pv[0], &w, x);
+   vsr = eraPdp(x, pv[1]);
+   eraSxp(vsr, x, usr);
+
+/* Isolate the transverse component of the velocity (AU/day). */
+   eraPmp(pv[1], usr, ust);
+   vst = eraPm(ust);
+
+/* Special-relativity dimensionless parameters. */
+   betsr = vsr / ERFA_DC;
+   betst = vst / ERFA_DC;
+
+/* Determine the inertial-to-observed relativistic correction terms. */
+   bett = betst;
+   betr = betsr;
+   for (i = 0; i < IMAX; i++) {
+      d = 1.0 + betr;
+      del = sqrt(1.0 - betr*betr - bett*bett) - 1.0;
+      betr = d * betsr + del;
+      bett = d * betst;
+      if (i > 0) {
+         dd = fabs(d - od);
+         ddel = fabs(del - odel);
+         if ((i > 1) && (dd >= odd) && (ddel >= oddel)) break;
+         odd = dd;
+         oddel = ddel;
+      }
+      od = d;
+      odel = del;
+   }
+   if (i >= IMAX) iwarn += 4;
+
+/* Replace observed radial velocity with inertial value. */
+   w = (betsr != 0.0) ? d + del / betsr : 1.0;
+   eraSxp(w, usr, ur);
+
+/* Replace observed tangential velocity with inertial value. */
+   eraSxp(d, ust, ut);
+
+/* Combine the two to obtain the inertial space velocity. */
+   eraPpp(ur, ut, pv[1]);
+
+/* Return the status. */
+   return iwarn;
+
+}
+
+void eraSxp(double s, double p[3], double sp[3])
+/*
+**  - - - - - - -
+**   e r a S x p
+**  - - - - - - -
+**
+**  Multiply a p-vector by a scalar.
+**
+**  Given:
+**     s      double        scalar
+**     p      double[3]     p-vector
+**
+**  Returned:
+**     sp     double[3]     s * p
+**
+**  Note:
+**     It is permissible for p and sp to be the same array.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   sp[0] = s * p[0];
+   sp[1] = s * p[1];
+   sp[2] = s * p[2];
+
+   return;
+
+}
+
+void eraSxpv(double s, double pv[2][3], double spv[2][3])
+/*
+**  - - - - - - - -
+**   e r a S x p v
+**  - - - - - - - -
+**
+**  Multiply a pv-vector by a scalar.
+**
+**  Given:
+**     s       double          scalar
+**     pv      double[2][3]    pv-vector
+**
+**  Returned:
+**     spv     double[2][3]    s * pv
+**
+**  Note:
+**     It is permissible for pv and psv to be the same array
+**
+**  Called:
+**     eraS2xpv     multiply pv-vector by two scalars
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraS2xpv(s, s, pv, spv);
+
+   return;
+
+}
+
+int eraTaitt(double tai1, double tai2, double *tt1, double *tt2)
+/*
+**  - - - - - - - - -
+**   e r a T a i t t
+**  - - - - - - - - -
+**
+**  Time scale transformation:  International Atomic Time, TAI, to
+**  Terrestrial Time, TT.
+**
+**  Given:
+**     tai1,tai2  double    TAI as a 2-part Julian Date
+**
+**  Returned:
+**     tt1,tt2    double    TT as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Note:
+**
+**     tai1+tai2 is Julian Date, apportioned in any convenient way
+**     between the two arguments, for example where tai1 is the Julian
+**     Day Number and tai2 is the fraction of a day.  The returned
+**     tt1,tt2 follow suit.
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* TT minus TAI (days). */
+   static const double dtat = ERFA_TTMTAI/ERFA_DAYSEC;
+
+
+/* Result, safeguarding precision. */
+   if ( tai1 > tai2 ) {
+      *tt1 = tai1;
+      *tt2 = tai2 + dtat;
+   } else {
+      *tt1 = tai1 + dtat;
+      *tt2 = tai2;
+   }
+
+/* Status (always OK). */
+   return 0;
+
+}
+
+int eraTaiut1(double tai1, double tai2, double dta,
+              double *ut11, double *ut12)
+/*
+**  - - - - - - - - - -
+**   e r a T a i u t 1
+**  - - - - - - - - - -
+**
+**  Time scale transformation:  International Atomic Time, TAI, to
+**  Universal Time, UT1.
+**
+**  Given:
+**     tai1,tai2  double    TAI as a 2-part Julian Date
+**     dta        double    UT1-TAI in seconds
+**
+**  Returned:
+**     ut11,ut12  double    UT1 as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Notes:
+**
+**  1) tai1+tai2 is Julian Date, apportioned in any convenient way
+**     between the two arguments, for example where tai1 is the Julian
+**     Day Number and tai2 is the fraction of a day.  The returned
+**     UT11,UT12 follow suit.
+**
+**  2) The argument dta, i.e. UT1-TAI, is an observed quantity, and is
+**     available from IERS tabulations.
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dtad;
+
+
+/* Result, safeguarding precision. */
+   dtad = dta / ERFA_DAYSEC;
+   if ( tai1 > tai2 ) {
+      *ut11 = tai1;
+      *ut12 = tai2 + dtad;
+   } else {
+      *ut11 = tai1 + dtad;
+      *ut12 = tai2;
+   }
+
+/* Status (always OK). */
+   return 0;
+
+}
+
+int eraTaiutc(double tai1, double tai2, double *utc1, double *utc2)
+/*
+**  - - - - - - - - - -
+**   e r a T a i u t c
+**  - - - - - - - - - -
+**
+**  Time scale transformation:  International Atomic Time, TAI, to
+**  Coordinated Universal Time, UTC.
+**
+**  Given:
+**     tai1,tai2  double   TAI as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-3)
+**
+**  Returned (function value):
+**                int      status: +1 = dubious year (Note 4)
+**                                  0 = OK
+**                                 -1 = unacceptable date
+**
+**  Notes:
+**
+**  1) tai1+tai2 is Julian Date, apportioned in any convenient way
+**     between the two arguments, for example where tai1 is the Julian
+**     Day Number and tai2 is the fraction of a day.  The returned utc1
+**     and utc2 form an analogous pair, except that a special convention
+**     is used, to deal with the problem of leap seconds - see the next
+**     note.
+**
+**  2) JD cannot unambiguously represent UTC during a leap second unless
+**     special measures are taken.  The convention in the present
+**     function is that the JD day represents UTC days whether the
+**     length is 86399, 86400 or 86401 SI seconds.
+**
+**  3) The function eraD2dtf can be used to transform the UTC quasi-JD
+**     into calendar date and clock time, including UTC leap second
+**     handling.
+**
+**  4) The warning status "dubious year" flags UTCs that predate the
+**     introduction of the time scale and that are too far in the future
+**     to be trusted.  See eraDat for further details.
+**
+**  Called:
+**     eraJd2cal    JD to Gregorian calendar
+**     eraDat       delta(AT) = TAI-UTC
+**     eraCal2jd    Gregorian calendar to JD
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int big1;
+   int i, iy, im, id, js;
+   double a1, a2, d1, dats1, d2, fd, ddats, dats2, datd, as1, as2, da;
+
+
+/* Put the two parts of the TAI into big-first order. */
+   big1 = ( tai1 >= tai2 );
+   if ( big1 ) {
+      a1 = tai1;
+      a2 = tai2;
+   } else {
+      a1 = tai2;
+      a2 = tai1;
+   }
+
+/* See if the TAI can possibly be in a leap-second day. */
+   d1 = a1;
+   dats1 = 0.0;
+   for ( i = -1; i <= 3; i++ ) {
+      d2 = a2 + (double) i;
+      if ( eraJd2cal(d1, d2, &iy, &im, &id, &fd) ) return -1;
+      js = eraDat(iy, im, id, 0.0, &dats2);
+      if ( js < 0 ) return -1;
+      if ( i == -1 ) dats1 = dats2;
+      ddats = dats2 - dats1;
+      datd = dats1 / ERFA_DAYSEC;
+      if ( fabs(ddats) >= 0.5 ) {
+
+      /* Yes.  Get TAI for the start of the UTC day that */
+      /* ends in a leap. */
+         if ( eraCal2jd(iy, im, id, &d1, &d2) ) return -1;
+         as1 = d1;
+         as2 = d2 - 1.0 + datd;
+
+      /* Is the TAI after this point? */
+         da = a1 - as1;
+         da = da + ( a2 - as2 );
+         if ( da > 0 ) {
+
+         /* Yes:  fraction of the current UTC day that has elapsed. */
+            fd = da * ERFA_DAYSEC / ( ERFA_DAYSEC + ddats );
+
+         /* Ramp TAI-UTC to bring about ERFA's JD(UTC) convention. */
+            datd += ddats * ( fd <= 1.0 ? fd : 1.0 ) / ERFA_DAYSEC;
+         }
+
+      /* Done. */
+         break;
+      }
+      dats1 = dats2;
+   }
+
+/* Subtract the (possibly adjusted) TAI-UTC from TAI to give UTC. */
+   a2 -= datd;
+
+/* Return the UTC result, preserving the TAI order. */
+   if ( big1 ) {
+      *utc1 = a1;
+      *utc2 = a2;
+   } else {
+      *utc1 = a2;
+      *utc2 = a1;
+   }
+
+/* Status. */
+   return js;
+
+}
+
+int eraTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2)
+/*
+**  - - - - - - - - - -
+**   e r a T c b t d b
+**  - - - - - - - - - -
+**
+**  Time scale transformation:  Barycentric Coordinate Time, TCB, to
+**  Barycentric Dynamical Time, TDB.
+**
+**  Given:
+**     tcb1,tcb2  double    TCB as a 2-part Julian Date
+**
+**  Returned:
+**     tdb1,tdb2  double    TDB as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Notes:
+**
+**  1) tcb1+tcb2 is Julian Date, apportioned in any convenient way
+**     between the two arguments, for example where tcb1 is the Julian
+**     Day Number and tcb2 is the fraction of a day.  The returned
+**     tdb1,tdb2 follow suit.
+**
+**  2) The 2006 IAU General Assembly introduced a conventional linear
+**     transformation between TDB and TCB.  This transformation
+**     compensates for the drift between TCB and terrestrial time TT,
+**     and keeps TDB approximately centered on TT.  Because the
+**     relationship between TT and TCB depends on the adopted solar
+**     system ephemeris, the degree of alignment between TDB and TT over
+**     long intervals will vary according to which ephemeris is used.
+**     Former definitions of TDB attempted to avoid this problem by
+**     stipulating that TDB and TT should differ only by periodic
+**     effects.  This is a good description of the nature of the
+**     relationship but eluded precise mathematical formulation.  The
+**     conventional linear relationship adopted in 2006 sidestepped
+**     these difficulties whilst delivering a TDB that in practice was
+**     consistent with values before that date.
+**
+**  3) TDB is essentially the same as Teph, the time argument for the
+**     JPL solar system ephemerides.
+**
+**  Reference:
+**
+**     IAU 2006 Resolution B3
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* 1977 Jan 1 00:00:32.184 TT, as two-part JD */
+   static const double t77td = ERFA_DJM0 + ERFA_DJM77;
+   static const double t77tf = ERFA_TTMTAI/ERFA_DAYSEC;
+
+/* TDB (days) at TAI 1977 Jan 1.0 */
+   static const double tdb0 = ERFA_TDB0/ERFA_DAYSEC;
+
+   double d;
+
+
+/* Result, safeguarding precision. */
+   if ( tcb1 > tcb2 ) {
+      d = tcb1 - t77td;
+      *tdb1 = tcb1;
+      *tdb2 = tcb2 + tdb0 - ( d + ( tcb2 - t77tf ) ) * ERFA_ELB;
+   } else {
+      d = tcb2 - t77td;
+      *tdb1 = tcb1 + tdb0 - ( d + ( tcb1 - t77tf ) ) * ERFA_ELB;
+      *tdb2 = tcb2;
+   }
+
+/* Status (always OK). */
+   return 0;
+
+}
+
+int eraTcgtt(double tcg1, double tcg2, double *tt1, double *tt2)
+/*
+**  - - - - - - - - -
+**   e r a T c g t t
+**  - - - - - - - - -
+**
+**  Time scale transformation:  Geocentric Coordinate Time, TCG, to
+**  Terrestrial Time, TT.
+**
+**  Given:
+**     tcg1,tcg2  double    TCG as a 2-part Julian Date
+**
+**  Returned:
+**     tt1,tt2    double    TT as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Note:
+**
+**     tcg1+tcg2 is Julian Date, apportioned in any convenient way
+**     between the two arguments, for example where tcg1 is the Julian
+**     Day Number and tcg22 is the fraction of a day.  The returned
+**     tt1,tt2 follow suit.
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),.
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     IAU 2000 Resolution B1.9
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* 1977 Jan 1 00:00:32.184 TT, as MJD */
+   static const double t77t = ERFA_DJM77 + ERFA_TTMTAI/ERFA_DAYSEC;
+
+
+/* Result, safeguarding precision. */
+   if ( tcg1 > tcg2 ) {
+      *tt1 = tcg1;
+      *tt2 = tcg2 - ( ( tcg1 - ERFA_DJM0 ) + ( tcg2 - t77t ) ) * ERFA_ELG;
+   } else {
+      *tt1 = tcg1 - ( ( tcg2 - ERFA_DJM0 ) + ( tcg1 - t77t ) ) * ERFA_ELG;
+      *tt2 = tcg2;
+   }
+
+/* OK status. */
+   return 0;
+
+}
+
+int eraTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2)
+/*
+**  - - - - - - - - - -
+**   e r a T d b t c b
+**  - - - - - - - - - -
+**
+**  Time scale transformation:  Barycentric Dynamical Time, TDB, to
+**  Barycentric Coordinate Time, TCB.
+**
+**  Given:
+**     tdb1,tdb2  double    TDB as a 2-part Julian Date
+**
+**  Returned:
+**     tcb1,tcb2  double    TCB as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Notes:
+**
+**  1) tdb1+tdb2 is Julian Date, apportioned in any convenient way
+**     between the two arguments, for example where tdb1 is the Julian
+**     Day Number and tdb2 is the fraction of a day.  The returned
+**     tcb1,tcb2 follow suit.
+**
+**  2) The 2006 IAU General Assembly introduced a conventional linear
+**     transformation between TDB and TCB.  This transformation
+**     compensates for the drift between TCB and terrestrial time TT,
+**     and keeps TDB approximately centered on TT.  Because the
+**     relationship between TT and TCB depends on the adopted solar
+**     system ephemeris, the degree of alignment between TDB and TT over
+**     long intervals will vary according to which ephemeris is used.
+**     Former definitions of TDB attempted to avoid this problem by
+**     stipulating that TDB and TT should differ only by periodic
+**     effects.  This is a good description of the nature of the
+**     relationship but eluded precise mathematical formulation.  The
+**     conventional linear relationship adopted in 2006 sidestepped
+**     these difficulties whilst delivering a TDB that in practice was
+**     consistent with values before that date.
+**
+**  3) TDB is essentially the same as Teph, the time argument for the
+**     JPL solar system ephemerides.
+**
+**  Reference:
+**
+**     IAU 2006 Resolution B3
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* 1977 Jan 1 00:00:32.184 TT, as two-part JD */
+   static const double t77td = ERFA_DJM0 + ERFA_DJM77;
+   static const double t77tf = ERFA_TTMTAI/ERFA_DAYSEC;
+
+/* TDB (days) at TAI 1977 Jan 1.0 */
+   static const double tdb0 = ERFA_TDB0/ERFA_DAYSEC;
+
+/* TDB to TCB rate */
+   static const double elbb = ERFA_ELB/(1.0-ERFA_ELB);
+
+   double d, f;
+
+
+/* Result, preserving date format but safeguarding precision. */
+   if ( tdb1 > tdb2 ) {
+      d = t77td - tdb1;
+      f  = tdb2 - tdb0;
+      *tcb1 = tdb1;
+      *tcb2 = f - ( d - ( f - t77tf ) ) * elbb;
+   } else {
+      d = t77td - tdb2;
+      f  = tdb1 - tdb0;
+      *tcb1 = f + ( d - ( f - t77tf ) ) * elbb;
+      *tcb2 = tdb2;
+   }
+
+/* Status (always OK). */
+   return 0;
+
+}
+
+int eraTdbtt(double tdb1, double tdb2, double dtr,
+             double *tt1, double *tt2 )
+/*
+**  - - - - - - - - -
+**   e r a T d b t t
+**  - - - - - - - - -
+**
+**  Time scale transformation:  Barycentric Dynamical Time, TDB, to
+**  Terrestrial Time, TT.
+**
+**  Given:
+**     tdb1,tdb2  double    TDB as a 2-part Julian Date
+**     dtr        double    TDB-TT in seconds
+**
+**  Returned:
+**     tt1,tt2    double    TT as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Notes:
+**
+**  1) tdb1+tdb2 is Julian Date, apportioned in any convenient way
+**     between the two arguments, for example where tdb1 is the Julian
+**     Day Number and tdb2 is the fraction of a day.  The returned
+**     tt1,tt2 follow suit.
+**
+**  2) The argument dtr represents the quasi-periodic component of the
+**     GR transformation between TT and TCB.  It is dependent upon the
+**     adopted solar-system ephemeris, and can be obtained by numerical
+**     integration, by interrogating a precomputed time ephemeris or by
+**     evaluating a model such as that implemented in the ERFA function
+**     eraDtdb.   The quantity is dominated by an annual term of 1.7 ms
+**     amplitude.
+**
+**  3) TDB is essentially the same as Teph, the time argument for the
+**     JPL solar system ephemerides.
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     IAU 2006 Resolution 3
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dtrd;
+
+
+/* Result, safeguarding precision. */
+   dtrd = dtr / ERFA_DAYSEC;
+   if ( tdb1 > tdb2 ) {
+      *tt1 = tdb1;
+      *tt2 = tdb2 - dtrd;
+   } else {
+      *tt1 = tdb1 - dtrd;
+      *tt2 = tdb2;
+   }
+
+/* Status (always OK). */
+   return 0;
+
+}
+
+int eraTf2a(char s, int ihour, int imin, double sec, double *rad)
+/*
+**  - - - - - - - -
+**   e r a T f 2 a
+**  - - - - - - - -
+**
+**  Convert hours, minutes, seconds to radians.
+**
+**  Given:
+**     s         char    sign:  '-' = negative, otherwise positive
+**     ihour     int     hours
+**     imin      int     minutes
+**     sec       double  seconds
+**
+**  Returned:
+**     rad       double  angle in radians
+**
+**  Returned (function value):
+**               int     status:  0 = OK
+**                                1 = ihour outside range 0-23
+**                                2 = imin outside range 0-59
+**                                3 = sec outside range 0-59.999...
+**
+**  Notes:
+**
+**  1)  The result is computed even if any of the range checks fail.
+**
+**  2)  Negative ihour, imin and/or sec produce a warning status, but
+**      the absolute value is used in the conversion.
+**
+**  3)  If there are multiple errors, the status value reflects only the
+**      first, the smallest taking precedence.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* Compute the interval. */
+   *rad  = ( s == '-' ? -1.0 : 1.0 ) *
+           ( 60.0 * ( 60.0 * ( (double) abs(ihour) ) +
+                             ( (double) abs(imin) ) ) +
+                                        fabs(sec) ) * ERFA_DS2R;
+
+/* Validate arguments and return status. */
+   if ( ihour < 0 || ihour > 23 ) return 1;
+   if ( imin < 0 || imin > 59 ) return 2;
+   if ( sec < 0.0 || sec >= 60.0 ) return 3;
+   return 0;
+
+}
+
+int eraTf2d(char s, int ihour, int imin, double sec, double *days)
+/*
+**  - - - - - - - -
+**   e r a T f 2 d
+**  - - - - - - - -
+**
+**  Convert hours, minutes, seconds to days.
+**
+**  Given:
+**     s         char    sign:  '-' = negative, otherwise positive
+**     ihour     int     hours
+**     imin      int     minutes
+**     sec       double  seconds
+**
+**  Returned:
+**     days      double  interval in days
+**
+**  Returned (function value):
+**               int     status:  0 = OK
+**                                1 = ihour outside range 0-23
+**                                2 = imin outside range 0-59
+**                                3 = sec outside range 0-59.999...
+**
+**  Notes:
+**
+**  1)  The result is computed even if any of the range checks fail.
+**
+**  2)  Negative ihour, imin and/or sec produce a warning status, but
+**      the absolute value is used in the conversion.
+**
+**  3)  If there are multiple errors, the status value reflects only the
+**      first, the smallest taking precedence.
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* Compute the interval. */
+   *days  = ( s == '-' ? -1.0 : 1.0 ) *
+            ( 60.0 * ( 60.0 * ( (double) abs(ihour) ) +
+                              ( (double) abs(imin) ) ) +
+                                         fabs(sec) ) / ERFA_DAYSEC;
+
+/* Validate arguments and return status. */
+   if ( ihour < 0 || ihour > 23 ) return 1;
+   if ( imin < 0 || imin > 59 ) return 2;
+   if ( sec < 0.0 || sec >= 60.0 ) return 3;
+   return 0;
+
+}
+
+void eraTr(double r[3][3], double rt[3][3])
+/*
+**  - - - - - -
+**   e r a T r
+**  - - - - - -
+**
+**  Transpose an r-matrix.
+**
+**  Given:
+**     r        double[3][3]    r-matrix
+**
+**  Returned:
+**     rt       double[3][3]    transpose
+**
+**  Note:
+**     It is permissible for r and rt to be the same array.
+**
+**  Called:
+**     eraCr        copy r-matrix
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double wm[3][3];
+   int i, j;
+
+
+   for (i = 0; i < 3; i++) {
+      for (j = 0; j < 3; j++) {
+         wm[i][j] = r[j][i];
+      }
+   }
+   eraCr(wm, rt);
+
+   return;
+
+}
+
+void eraTrxp(double r[3][3], double p[3], double trp[3])
+/*
+**  - - - - - - - -
+**   e r a T r x p
+**  - - - - - - - -
+**
+**  Multiply a p-vector by the transpose of an r-matrix.
+**
+**  Given:
+**     r        double[3][3]   r-matrix
+**     p        double[3]      p-vector
+**
+**  Returned:
+**     trp      double[3]      r * p
+**
+**  Note:
+**     It is permissible for p and trp to be the same array.
+**
+**  Called:
+**     eraTr        transpose r-matrix
+**     eraRxp       product of r-matrix and p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double tr[3][3];
+
+
+/* Transpose of matrix r. */
+   eraTr(r, tr);
+
+/* Matrix tr * vector p -> vector trp. */
+   eraRxp(tr, p, trp);
+
+   return;
+
+}
+
+void eraTrxpv(double r[3][3], double pv[2][3], double trpv[2][3])
+/*
+**  - - - - - - - - -
+**   e r a T r x p v
+**  - - - - - - - - -
+**
+**  Multiply a pv-vector by the transpose of an r-matrix.
+**
+**  Given:
+**     r        double[3][3]    r-matrix
+**     pv       double[2][3]    pv-vector
+**
+**  Returned:
+**     trpv     double[2][3]    r * pv
+**
+**  Note:
+**     It is permissible for pv and trpv to be the same array.
+**
+**  Called:
+**     eraTr        transpose r-matrix
+**     eraRxpv      product of r-matrix and pv-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double tr[3][3];
+
+
+/* Transpose of matrix r. */
+   eraTr(r, tr);
+
+/* Matrix tr * vector pv -> vector trpv. */
+   eraRxpv(tr, pv, trpv);
+
+   return;
+
+}
+
+int eraTttai(double tt1, double tt2, double *tai1, double *tai2)
+/*
+**  - - - - - - - - -
+**   e r a T t t a i
+**  - - - - - - - - -
+**
+**  Time scale transformation:  Terrestrial Time, TT, to International
+**  Atomic Time, TAI.
+**
+**  Given:
+**     tt1,tt2    double    TT as a 2-part Julian Date
+**
+**  Returned:
+**     tai1,tai2  double    TAI as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Note:
+**
+**     tt1+tt2 is Julian Date, apportioned in any convenient way between
+**     the two arguments, for example where tt1 is the Julian Day Number
+**     and tt2 is the fraction of a day.  The returned tai1,tai2 follow
+**     suit.
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* TT minus TAI (days). */
+   static const double dtat = ERFA_TTMTAI/ERFA_DAYSEC;
+
+
+/* Result, safeguarding precision. */
+   if ( tt1 > tt2 ) {
+      *tai1 = tt1;
+      *tai2 = tt2 - dtat;
+   } else {
+      *tai1 = tt1 - dtat;
+      *tai2 = tt2;
+   }
+
+/* Status (always OK). */
+   return 0;
+
+}
+
+int eraTttcg(double tt1, double tt2, double *tcg1, double *tcg2)
+/*
+**  - - - - - - - - -
+**   e r a T t t c g
+**  - - - - - - - - -
+**
+**  Time scale transformation:  Terrestrial Time, TT, to Geocentric
+**  Coordinate Time, TCG.
+**
+**  Given:
+**     tt1,tt2    double    TT as a 2-part Julian Date
+**
+**  Returned:
+**     tcg1,tcg2  double    TCG as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Note:
+**
+**     tt1+tt2 is Julian Date, apportioned in any convenient way between
+**     the two arguments, for example where tt1 is the Julian Day Number
+**     and tt2 is the fraction of a day.  The returned tcg1,tcg2 follow
+**     suit.
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     IAU 2000 Resolution B1.9
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* 1977 Jan 1 00:00:32.184 TT, as MJD */
+   static const double t77t = ERFA_DJM77 + ERFA_TTMTAI/ERFA_DAYSEC;
+
+/* TT to TCG rate */
+   static const double elgg = ERFA_ELG/(1.0-ERFA_ELG);
+
+
+/* Result, safeguarding precision. */
+   if ( tt1 > tt2 ) {
+      *tcg1 = tt1;
+      *tcg2 = tt2 + ( ( tt1 - ERFA_DJM0 ) + ( tt2 - t77t ) ) * elgg;
+   } else {
+      *tcg1 = tt1 + ( ( tt2 - ERFA_DJM0 ) + ( tt1 - t77t ) ) * elgg;
+      *tcg2 = tt2;
+   }
+
+/* Status (always OK). */
+   return 0;
+
+}
+
+int eraTttdb(double tt1, double tt2, double dtr,
+             double *tdb1, double *tdb2)
+/*
+**  - - - - - - - - -
+**   e r a T t t d b
+**  - - - - - - - - -
+**
+**  Time scale transformation:  Terrestrial Time, TT, to Barycentric
+**  Dynamical Time, TDB.
+**
+**  Given:
+**     tt1,tt2    double    TT as a 2-part Julian Date
+**     dtr        double    TDB-TT in seconds
+**
+**  Returned:
+**     tdb1,tdb2  double    TDB as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Notes:
+**
+**  1) tt1+tt2 is Julian Date, apportioned in any convenient way between
+**     the two arguments, for example where tt1 is the Julian Day Number
+**     and tt2 is the fraction of a day.  The returned tdb1,tdb2 follow
+**     suit.
+**
+**  2) The argument dtr represents the quasi-periodic component of the
+**     GR transformation between TT and TCB.  It is dependent upon the
+**     adopted solar-system ephemeris, and can be obtained by numerical
+**     integration, by interrogating a precomputed time ephemeris or by
+**     evaluating a model such as that implemented in the ERFA function
+**     eraDtdb.   The quantity is dominated by an annual term of 1.7 ms
+**     amplitude.
+**
+**  3) TDB is essentially the same as Teph, the time argument for the JPL
+**     solar system ephemerides.
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     IAU 2006 Resolution 3
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dtrd;
+
+
+/* Result, safeguarding precision. */
+   dtrd = dtr / ERFA_DAYSEC;
+   if ( tt1 > tt2 ) {
+      *tdb1 = tt1;
+      *tdb2 = tt2 + dtrd;
+   } else {
+      *tdb1 = tt1 + dtrd;
+      *tdb2 = tt2;
+   }
+
+/* Status (always OK). */
+   return 0;
+
+}
+
+int eraTtut1(double tt1, double tt2, double dt,
+             double *ut11, double *ut12)
+/*
+**  - - - - - - - - -
+**   e r a T t u t 1
+**  - - - - - - - - -
+**
+**  Time scale transformation:  Terrestrial Time, TT, to Universal Time,
+**  UT1.
+**
+**  Given:
+**     tt1,tt2    double    TT as a 2-part Julian Date
+**     dt         double    TT-UT1 in seconds
+**
+**  Returned:
+**     ut11,ut12  double    UT1 as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Notes:
+**
+**  1) tt1+tt2 is Julian Date, apportioned in any convenient way between
+**     the two arguments, for example where tt1 is the Julian Day Number
+**     and tt2 is the fraction of a day.  The returned ut11,ut12 follow
+**     suit.
+**
+**  2) The argument dt is classical Delta T.
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dtd;
+
+
+/* Result, safeguarding precision. */
+   dtd = dt / ERFA_DAYSEC;
+   if ( tt1 > tt2 ) {
+      *ut11 = tt1;
+      *ut12 = tt2 - dtd;
+   } else {
+      *ut11 = tt1 - dtd;
+      *ut12 = tt2;
+   }
+
+/* Status (always OK). */
+   return 0;
+
+}
+
+int eraUt1tai(double ut11, double ut12, double dta,
+              double *tai1, double *tai2)
+/*
+**  - - - - - - - - - -
+**   e r a U t 1 t a i
+**  - - - - - - - - - -
+**
+**  Time scale transformation:  Universal Time, UT1, to International
+**  Atomic Time, TAI.
+**
+**  Given:
+**     ut11,ut12  double    UT1 as a 2-part Julian Date
+**     dta        double    UT1-TAI in seconds
+**
+**  Returned:
+**     tai1,tai2  double    TAI as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Notes:
+**
+**  1) ut11+ut12 is Julian Date, apportioned in any convenient way
+**     between the two arguments, for example where ut11 is the Julian
+**     Day Number and ut12 is the fraction of a day.  The returned
+**     tai1,tai2 follow suit.
+**
+**  2) The argument dta, i.e. UT1-TAI, is an observed quantity, and is
+**     available from IERS tabulations.
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dtad;
+
+
+/* Result, safeguarding precision. */
+   dtad = dta / ERFA_DAYSEC;
+   if ( ut11 > ut12 ) {
+      *tai1 = ut11;
+      *tai2 = ut12 - dtad;
+   } else {
+      *tai1 = ut11 - dtad;
+      *tai2 = ut12;
+   }
+
+/* Status (always OK). */
+   return 0;
+
+}
+
+int eraUt1tt(double ut11, double ut12, double dt,
+             double *tt1, double *tt2)
+/*
+**  - - - - - - - - -
+**   e r a U t 1 t t
+**  - - - - - - - - -
+**
+**  Time scale transformation:  Universal Time, UT1, to Terrestrial
+**  Time, TT.
+**
+**  Given:
+**     ut11,ut12  double    UT1 as a 2-part Julian Date
+**     dt         double    TT-UT1 in seconds
+**
+**  Returned:
+**     tt1,tt2    double    TT as a 2-part Julian Date
+**
+**  Returned (function value):
+**                int       status:  0 = OK
+**
+**  Notes:
+**
+**  1) ut11+ut12 is Julian Date, apportioned in any convenient way
+**     between the two arguments, for example where ut11 is the Julian
+**     Day Number and ut12 is the fraction of a day.  The returned
+**     tt1,tt2 follow suit.
+**
+**  2) The argument dt is classical Delta T.
+**
+**  Reference:
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double dtd;
+
+
+/* Result, safeguarding precision. */
+   dtd = dt / ERFA_DAYSEC;
+   if ( ut11 > ut12 ) {
+      *tt1 = ut11;
+      *tt2 = ut12 + dtd;
+   } else {
+      *tt1 = ut11 + dtd;
+      *tt2 = ut12;
+   }
+
+/* Status (always OK). */
+   return 0;
+
+}
+
+int eraUt1utc(double ut11, double ut12, double dut1,
+              double *utc1, double *utc2)
+/*
+**  - - - - - - - - - -
+**   e r a U t 1 u t c
+**  - - - - - - - - - -
+**
+**  Time scale transformation:  Universal Time, UT1, to Coordinated
+**  Universal Time, UTC.
+**
+**  Given:
+**     ut11,ut12  double   UT1 as a 2-part Julian Date (Note 1)
+**     dut1       double   Delta UT1: UT1-UTC in seconds (Note 2)
+**
+**  Returned:
+**     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 3,4)
+**
+**  Returned (function value):
+**                int      status: +1 = dubious year (Note 5)
+**                                  0 = OK
+**                                 -1 = unacceptable date
+**
+**  Notes:
+**
+**  1) ut11+ut12 is Julian Date, apportioned in any convenient way
+**     between the two arguments, for example where ut11 is the Julian
+**     Day Number and ut12 is the fraction of a day.  The returned utc1
+**     and utc2 form an analogous pair, except that a special convention
+**     is used, to deal with the problem of leap seconds - see Note 3.
+**
+**  2) Delta UT1 can be obtained from tabulations provided by the
+**     International Earth Rotation and Reference Systems Service.  The
+**     value changes abruptly by 1s at a leap second;  however, close to
+**     a leap second the algorithm used here is tolerant of the "wrong"
+**     choice of value being made.
+**
+**  3) JD cannot unambiguously represent UTC during a leap second unless
+**     special measures are taken.  The convention in the present
+**     function is that the returned quasi JD day UTC1+UTC2 represents
+**     UTC days whether the length is 86399, 86400 or 86401 SI seconds.
+**
+**  4) The function eraD2dtf can be used to transform the UTC quasi-JD
+**     into calendar date and clock time, including UTC leap second
+**     handling.
+**
+**  5) The warning status "dubious year" flags UTCs that predate the
+**     introduction of the time scale and that are too far in the future
+**     to be trusted.  See eraDat for further details.
+**
+**  Called:
+**     eraJd2cal    JD to Gregorian calendar
+**     eraDat       delta(AT) = TAI-UTC
+**     eraCal2jd    Gregorian calendar to JD
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int big1;
+   int i, iy, im, id, js;
+   double duts, u1, u2, d1, dats1, d2, fd, dats2, ddats, us1, us2, du;
+
+
+/* UT1-UTC in seconds. */
+   duts = dut1;
+
+/* Put the two parts of the UT1 into big-first order. */
+   big1 = ( ut11 >= ut12 );
+   if ( big1 ) {
+      u1 = ut11;
+      u2 = ut12;
+   } else {
+      u1 = ut12;
+      u2 = ut11;
+   }
+
+/* See if the UT1 can possibly be in a leap-second day. */
+   d1 = u1;
+   dats1 = 0;
+   for ( i = -1; i <= 3; i++ ) {
+      d2 = u2 + (double) i;
+      if ( eraJd2cal(d1, d2, &iy, &im, &id, &fd) ) return -1;
+      js = eraDat(iy, im, id, 0.0, &dats2);
+      if ( js < 0 ) return -1;
+      if ( i == - 1 ) dats1 = dats2;
+      ddats = dats2 - dats1;
+      if ( fabs(ddats) >= 0.5 ) {
+
+      /* Yes, leap second nearby: ensure UT1-UTC is "before" value. */
+         if ( ddats * duts >= 0 ) duts -= ddats;
+
+      /* UT1 for the start of the UTC day that ends in a leap. */
+         if ( eraCal2jd(iy, im, id, &d1, &d2) ) return -1;
+         us1 = d1;
+         us2 = d2 - 1.0 + duts/ERFA_DAYSEC;
+
+      /* Is the UT1 after this point? */
+         du = u1 - us1;
+         du += u2 - us2;
+         if ( du > 0 ) {
+
+         /* Yes:  fraction of the current UTC day that has elapsed. */
+            fd = du * ERFA_DAYSEC / ( ERFA_DAYSEC + ddats );
+
+         /* Ramp UT1-UTC to bring about ERFA's JD(UTC) convention. */
+            duts += ddats * ( fd <= 1.0 ? fd : 1.0 );
+         }
+
+      /* Done. */
+         break;
+      }
+      dats1 = dats2;
+   }
+
+/* Subtract the (possibly adjusted) UT1-UTC from UT1 to give UTC. */
+   u2 -= duts / ERFA_DAYSEC;
+
+/* Result, safeguarding precision. */
+   if ( big1 ) {
+      *utc1 = u1;
+      *utc2 = u2;
+   } else {
+      *utc1 = u2;
+      *utc2 = u1;
+   }
+
+/* Status. */
+   return js;
+
+}
+
+int eraUtctai(double utc1, double utc2, double *tai1, double *tai2)
+/*
+**  - - - - - - - - - -
+**   e r a U t c t a i
+**  - - - - - - - - - -
+**
+**  Time scale transformation:  Coordinated Universal Time, UTC, to
+**  International Atomic Time, TAI.
+**
+**  Given:
+**     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)
+**
+**  Returned:
+**     tai1,tai2  double   TAI as a 2-part Julian Date (Note 5)
+**
+**  Returned (function value):
+**                int      status: +1 = dubious year (Note 3)
+**                                  0 = OK
+**                                 -1 = unacceptable date
+**
+**  Notes:
+**
+**  1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any
+**     convenient way between the two arguments, for example where utc1
+**     is the Julian Day Number and utc2 is the fraction of a day.
+**
+**  2) JD cannot unambiguously represent UTC during a leap second unless
+**     special measures are taken.  The convention in the present
+**     function is that the JD day represents UTC days whether the
+**     length is 86399, 86400 or 86401 SI seconds.
+**
+**  3) The warning status "dubious year" flags UTCs that predate the
+**     introduction of the time scale and that are too far in the future
+**     to be trusted.  See eraDat  for further details.
+**
+**  4) The function eraDtf2d converts from calendar date and time of day
+**     into 2-part Julian Date, and in the case of UTC implements the
+**     leap-second-ambiguity convention described above.
+**
+**  5) The returned TAI1,TAI2 are such that their sum is the TAI Julian
+**     Date.
+**
+**  Called:
+**     eraJd2cal    JD to Gregorian calendar
+**     eraDat       delta(AT) = TAI-UTC
+**     eraCal2jd    Gregorian calendar to JD
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int big1;
+   int iy, im, id, js, iyt, imt, idt;
+   double u1, u2, fd, dats, fdt, datst, ddat, z1, z2, a2;
+
+
+/* Put the two parts of the UTC into big-first order. */
+   big1 = ( utc1 >= utc2 );
+   if ( big1 ) {
+      u1 = utc1;
+      u2 = utc2;
+   } else {
+      u1 = utc2;
+      u2 = utc1;
+   }
+
+/* Get TAI-UTC now. */
+   if ( eraJd2cal(u1, u2, &iy, &im, &id, &fd) ) return -1;
+   js = eraDat(iy, im, id, fd, &dats);
+   if ( js < 0 ) return -1;
+
+/* Get TAI-UTC tomorrow. */
+   if ( eraJd2cal(u1+1.5, u2-fd, &iyt, &imt, &idt, &fdt) ) return -1;
+   js = eraDat(iyt, imt, idt, fdt, &datst);
+   if ( js < 0 ) return -1;
+
+/* If today ends in a leap second, scale the fraction into SI days. */
+   ddat = datst - dats;
+   if ( fabs(ddat) > 0.5 ) fd += fd * ddat / ERFA_DAYSEC;
+
+/* Today's calendar date to 2-part JD. */
+   if ( eraCal2jd(iy, im, id, &z1, &z2) ) return -1;
+
+/* Assemble the TAI result, preserving the UTC split and order. */
+   a2 = z1 - u1;
+   a2 += z2;
+   a2 += fd + dats / ERFA_DAYSEC;
+   if ( big1 ) {
+      *tai1 = u1;
+      *tai2 = a2;
+   } else {
+      *tai1 = a2;
+      *tai2 = u1;
+   }
+
+/* Status. */
+   return js;
+
+}
+
+int eraUtcut1(double utc1, double utc2, double dut1,
+              double *ut11, double *ut12)
+/*
+**  - - - - - - - - - -
+**   e r a U t c u t 1
+**  - - - - - - - - - -
+**
+**  Time scale transformation:  Coordinated Universal Time, UTC, to
+**  Universal Time, UT1.
+**
+**  Given:
+**     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)
+**     dut1       double   Delta UT1 = UT1-UTC in seconds (Note 5)
+**
+**  Returned:
+**     ut11,ut12  double   UT1 as a 2-part Julian Date (Note 6)
+**
+**  Returned (function value):
+**                int      status: +1 = dubious year (Note 7)
+**                                  0 = OK
+**                                 -1 = unacceptable date
+**
+**  Notes:
+**
+**  1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any
+**     convenient way between the two arguments, for example where utc1
+**     is the Julian Day Number and utc2 is the fraction of a day.
+**
+**  2) JD cannot unambiguously represent UTC during a leap second unless
+**     special measures are taken.  The convention in the present
+**     function is that the JD day represents UTC days whether the
+**     length is 86399, 86400 or 86401 SI seconds.
+**
+**  3) The warning status "dubious year" flags UTCs that predate the
+**     introduction of the time scale and that are too far in the future
+**     to be trusted.  See eraDat  for further details.
+**
+**  4) The function eraDtf2d  converts from calendar date and time of
+**     day into 2-part Julian Date, and in the case of UTC implements
+**     the leap-second-ambiguity convention described above.
+**
+**  5) Delta UT1 can be obtained from tabulations provided by the
+**     International Earth Rotation and Reference Systems Service.  It
+**     It is the caller's responsibility to supply a DUT argument
+**     containing the UT1-UTC value that matches the given UTC.
+**
+**  6) The returned ut11,ut12 are such that their sum is the UT1 Julian
+**     Date.
+**
+**  7) The warning status "dubious year" flags UTCs that predate the
+**     introduction of the time scale and that are too far in the future
+**     to be trusted.  See eraDat for further details.
+**
+**  References:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**     Explanatory Supplement to the Astronomical Almanac,
+**     P. Kenneth Seidelmann (ed), University Science Books (1992)
+**
+**  Called:
+**     eraJd2cal    JD to Gregorian calendar
+**     eraDat       delta(AT) = TAI-UTC
+**     eraUtctai    UTC to TAI
+**     eraTaiut1    TAI to UT1
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   int iy, im, id, js, jw;
+   double w, dat, dta, tai1, tai2;
+
+
+/* Look up TAI-UTC. */
+   if ( eraJd2cal(utc1, utc2, &iy, &im, &id, &w) ) return -1;
+   js = eraDat ( iy, im, id, 0.0, &dat);
+   if ( js < 0 ) return -1;
+
+/* Form UT1-TAI. */
+   dta = dut1 - dat;
+
+/* UTC to TAI to UT1. */
+   jw = eraUtctai(utc1, utc2, &tai1, &tai2);
+   if ( jw < 0 ) {
+      return -1;
+   } else if ( jw > 0 ) {
+      js = jw;
+   }
+   if ( eraTaiut1(tai1, tai2, dta, ut11, ut12) ) return -1;
+
+/* Status. */
+   return js;
+
+}
+
+void eraXy06(double date1, double date2, double *x, double *y)
+/*
+**  - - - - - - - -
+**   e r a X y 0 6
+**  - - - - - - - -
+**
+**  X,Y coordinates of celestial intermediate pole from series based
+**  on IAU 2006 precession and IAU 2000A nutation.
+**
+**  Given:
+**     date1,date2  double     TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     x,y          double     CIP X,Y coordinates (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The X,Y coordinates are those of the unit vector towards the
+**     celestial intermediate pole.  They represent the combined effects
+**     of frame bias, precession and nutation.
+**
+**  3) The fundamental arguments used are as adopted in IERS Conventions
+**     (2003) and are from Simon et al. (1994) and Souchay et al.
+**     (1999).
+**
+**  4) This is an alternative to the angles-based method, via the ERFA
+**     function eraFw2xy and as used in eraXys06a for example.  The two
+**     methods agree at the 1 microarcsecond level (at present), a
+**     negligible amount compared with the intrinsic accuracy of the
+**     models.  However, it would be unwise to mix the two methods
+**     (angles-based and series-based) in a single application.
+**
+**  Called:
+**     eraFal03     mean anomaly of the Moon
+**     eraFalp03    mean anomaly of the Sun
+**     eraFaf03     mean argument of the latitude of the Moon
+**     eraFad03     mean elongation of the Moon from the Sun
+**     eraFaom03    mean longitude of the Moon's ascending node
+**     eraFame03    mean longitude of Mercury
+**     eraFave03    mean longitude of Venus
+**     eraFae03     mean longitude of Earth
+**     eraFama03    mean longitude of Mars
+**     eraFaju03    mean longitude of Jupiter
+**     eraFasa03    mean longitude of Saturn
+**     eraFaur03    mean longitude of Uranus
+**     eraFane03    mean longitude of Neptune
+**     eraFapa03    general accumulated precession in longitude
+**
+**  References:
+**
+**     Capitaine, N., Wallace, P.T. & Chapront, J., 2003,
+**     Astron.Astrophys., 412, 567
+**
+**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
+**
+**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG
+**
+**     Simon, J.L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
+**     Francou, G. & Laskar, J., Astron.Astrophys., 1994, 282, 663
+**
+**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M., 1999,
+**     Astron.Astrophys.Supp.Ser. 135, 111
+**
+**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+
+/* Maximum power of T in the polynomials for X and Y */
+#define MAXPT (5)
+
+/* Polynomial coefficients (arcsec, X then Y). */
+   static const double xyp[2][MAXPT+1] = {
+
+      {    -0.016617,
+         2004.191898,
+           -0.4297829,
+           -0.19861834,
+            0.000007578,
+            0.0000059285
+      },
+      {    -0.006951,
+           -0.025896,
+          -22.4072747,
+            0.00190059,
+            0.001112526,
+            0.0000001358
+      }
+   };
+
+/* Fundamental-argument multipliers:  luni-solar terms */
+   static const int mfals[][5] = {
+
+   /* 1-10 */
+      {  0,   0,   0,   0,   1 },
+      {  0,   0,   2,  -2,   2 },
+      {  0,   0,   2,   0,   2 },
+      {  0,   0,   0,   0,   2 },
+      {  0,   1,   0,   0,   0 },
+      {  0,   1,   2,  -2,   2 },
+      {  1,   0,   0,   0,   0 },
+      {  0,   0,   2,   0,   1 },
+      {  1,   0,   2,   0,   2 },
+      {  0,   1,  -2,   2,  -2 },
+
+   /* 11-20 */
+      {  0,   0,   2,  -2,   1 },
+      {  1,   0,  -2,   0,  -2 },
+      {  1,   0,   0,  -2,   0 },
+      {  1,   0,   0,   0,   1 },
+      {  1,   0,   0,   0,  -1 },
+      {  1,   0,  -2,  -2,  -2 },
+      {  1,   0,   2,   0,   1 },
+      {  2,   0,  -2,   0,  -1 },
+      {  0,   0,   0,   2,   0 },
+      {  0,   0,   2,   2,   2 },
+
+   /* 21-30 */
+      {  2,   0,   0,  -2,   0 },
+      {  0,   2,  -2,   2,  -2 },
+      {  2,   0,   2,   0,   2 },
+      {  1,   0,   2,  -2,   2 },
+      {  1,   0,  -2,   0,  -1 },
+      {  2,   0,   0,   0,   0 },
+      {  0,   0,   2,   0,   0 },
+      {  0,   1,   0,   0,   1 },
+      {  1,   0,   0,  -2,  -1 },
+      {  0,   2,   2,  -2,   2 },
+
+   /* 31-40 */
+      {  0,   0,   2,  -2,   0 },
+      {  1,   0,   0,  -2,   1 },
+      {  0,   1,   0,   0,  -1 },
+      {  0,   2,   0,   0,   0 },
+      {  1,   0,  -2,  -2,  -1 },
+      {  1,   0,   2,   2,   2 },
+      {  0,   1,   2,   0,   2 },
+      {  2,   0,  -2,   0,   0 },
+      {  0,   0,   2,   2,   1 },
+      {  0,   1,  -2,   0,  -2 },
+
+   /* 41-50 */
+      {  0,   0,   0,   2,   1 },
+      {  1,   0,   2,  -2,   1 },
+      {  2,   0,   0,  -2,  -1 },
+      {  2,   0,   2,  -2,   2 },
+      {  2,   0,   2,   0,   1 },
+      {  0,   0,   0,   2,  -1 },
+      {  0,   1,  -2,   2,  -1 },
+      {  1,   1,   0,  -2,   0 },
+      {  2,   0,   0,  -2,   1 },
+      {  1,   0,   0,   2,   0 },
+
+   /* 51-60 */
+      {  0,   1,   2,  -2,   1 },
+      {  1,  -1,   0,   0,   0 },
+      {  0,   1,  -1,   1,  -1 },
+      {  2,   0,  -2,   0,  -2 },
+      {  0,   1,   0,  -2,   0 },
+      {  1,   0,   0,  -1,   0 },
+      {  3,   0,   2,   0,   2 },
+      {  0,   0,   0,   1,   0 },
+      {  1,  -1,   2,   0,   2 },
+      {  1,   1,  -2,  -2,  -2 },
+
+   /* 61-70 */
+      {  1,   0,  -2,   0,   0 },
+      {  2,   0,   0,   0,  -1 },
+      {  0,   1,  -2,  -2,  -2 },
+      {  1,   1,   2,   0,   2 },
+      {  2,   0,   0,   0,   1 },
+      {  1,   1,   0,   0,   0 },
+      {  1,   0,  -2,   2,  -1 },
+      {  1,   0,   2,   0,   0 },
+      {  1,  -1,   0,  -1,   0 },
+      {  1,   0,   0,   0,   2 },
+
+   /* 71-80 */
+      {  1,   0,  -1,   0,  -1 },
+      {  0,   0,   2,   1,   2 },
+      {  1,   0,  -2,  -4,  -2 },
+      {  1,  -1,   0,  -1,  -1 },
+      {  1,   0,   2,   2,   1 },
+      {  0,   2,  -2,   2,  -1 },
+      {  1,   0,   0,   0,  -2 },
+      {  2,   0,  -2,  -2,  -2 },
+      {  1,   1,   2,  -2,   2 },
+      {  2,   0,  -2,  -4,  -2 },
+
+   /* 81-90 */
+      {  1,   0,  -4,   0,  -2 },
+      {  2,   0,   2,  -2,   1 },
+      {  1,   0,   0,  -1,  -1 },
+      {  2,   0,   2,   2,   2 },
+      {  3,   0,   0,   0,   0 },
+      {  1,   0,   0,   2,   1 },
+      {  0,   0,   2,  -2,  -1 },
+      {  3,   0,   2,  -2,   2 },
+      {  0,   0,   4,  -2,   2 },
+      {  1,   0,   0,  -4,   0 },
+
+   /* 91-100 */
+      {  0,   1,   2,   0,   1 },
+      {  2,   0,   0,  -4,   0 },
+      {  1,   1,   0,  -2,  -1 },
+      {  2,   0,  -2,   0,   1 },
+      {  0,   0,   2,   0,  -1 },
+      {  0,   1,  -2,   0,  -1 },
+      {  0,   1,   0,   0,   2 },
+      {  0,   0,   2,  -1,   2 },
+      {  0,   0,   2,   4,   2 },
+      {  2,   1,   0,  -2,   0 },
+
+   /* 101-110 */
+      {  1,   1,   0,  -2,   1 },
+      {  1,  -1,   0,  -2,   0 },
+      {  1,  -1,   0,  -1,  -2 },
+      {  1,  -1,   0,   0,   1 },
+      {  0,   1,  -2,   2,   0 },
+      {  0,   1,   0,   0,  -2 },
+      {  1,  -1,   2,   2,   2 },
+      {  1,   0,   0,   2,  -1 },
+      {  1,  -1,  -2,  -2,  -2 },
+      {  3,   0,   2,   0,   1 },
+
+   /* 111-120 */
+      {  0,   1,   2,   2,   2 },
+      {  1,   0,   2,  -2,   0 },
+      {  1,   1,  -2,  -2,  -1 },
+      {  1,   0,   2,  -4,   1 },
+      {  0,   1,  -2,  -2,  -1 },
+      {  2,  -1,   2,   0,   2 },
+      {  0,   0,   0,   2,   2 },
+      {  1,  -1,   2,   0,   1 },
+      {  1,  -1,  -2,   0,  -2 },
+      {  0,   1,   0,   2,   0 },
+
+   /* 121-130 */
+      {  0,   1,   2,  -2,   0 },
+      {  0,   0,   0,   1,   1 },
+      {  1,   0,  -2,  -2,   0 },
+      {  0,   3,   2,  -2,   2 },
+      {  2,   1,   2,   0,   2 },
+      {  1,   1,   0,   0,   1 },
+      {  2,   0,   0,   2,   0 },
+      {  1,   1,   2,   0,   1 },
+      {  1,   0,   0,  -2,  -2 },
+      {  1,   0,  -2,   2,   0 },
+
+   /* 131-140 */
+      {  1,   0,  -1,   0,  -2 },
+      {  0,   1,   0,  -2,   1 },
+      {  0,   1,   0,   1,   0 },
+      {  0,   0,   0,   1,  -1 },
+      {  1,   0,  -2,   2,  -2 },
+      {  1,  -1,   0,   0,  -1 },
+      {  0,   0,   0,   4,   0 },
+      {  1,  -1,   0,   2,   0 },
+      {  1,   0,   2,   1,   2 },
+      {  1,   0,   2,  -1,   2 },
+
+   /* 141-150 */
+      {  0,   0,   2,   1,   1 },
+      {  1,   0,   0,  -2,   2 },
+      {  1,   0,  -2,   0,   1 },
+      {  1,   0,  -2,  -4,  -1 },
+      {  0,   0,   2,   2,   0 },
+      {  1,   1,   2,  -2,   1 },
+      {  1,   0,  -2,   1,  -1 },
+      {  0,   0,   1,   0,   1 },
+      {  2,   0,  -2,  -2,  -1 },
+      {  4,   0,   2,   0,   2 },
+
+   /* 151-160 */
+      {  2,  -1,   0,   0,   0 },
+      {  2,   1,   2,  -2,   2 },
+      {  0,   1,   2,   1,   2 },
+      {  1,   0,   4,  -2,   2 },
+      {  1,   1,   0,   0,  -1 },
+      {  2,   0,   2,   0,   0 },
+      {  2,   0,  -2,  -4,  -1 },
+      {  1,   0,  -1,   0,   0 },
+      {  1,   0,   0,   1,   0 },
+      {  0,   1,   0,   2,   1 },
+
+   /* 161-170 */
+      {  1,   0,  -4,   0,  -1 },
+      {  1,   0,   0,  -4,  -1 },
+      {  2,   0,   2,   2,   1 },
+      {  2,   1,   0,   0,   0 },
+      {  0,   0,   2,  -3,   2 },
+      {  1,   2,   0,  -2,   0 },
+      {  0,   3,   0,   0,   0 },
+      {  0,   0,   4,   0,   2 },
+      {  0,   0,   2,  -4,   1 },
+      {  2,   0,   0,  -2,  -2 },
+
+   /* 171-180 */
+      {  1,   1,  -2,  -4,  -2 },
+      {  0,   1,   0,  -2,  -1 },
+      {  0,   0,   0,   4,   1 },
+      {  3,   0,   2,  -2,   1 },
+      {  1,   0,   2,   4,   2 },
+      {  1,   1,  -2,   0,  -2 },
+      {  0,   0,   4,  -2,   1 },
+      {  2,  -2,   0,  -2,   0 },
+      {  2,   1,   0,  -2,  -1 },
+      {  0,   2,   0,  -2,   0 },
+
+   /* 181-190 */
+      {  1,   0,   0,  -1,   1 },
+      {  1,   1,   2,   2,   2 },
+      {  3,   0,   0,   0,  -1 },
+      {  2,   0,   0,  -4,  -1 },
+      {  3,   0,   2,   2,   2 },
+      {  0,   0,   2,   4,   1 },
+      {  0,   2,  -2,  -2,  -2 },
+      {  1,  -1,   0,  -2,  -1 },
+      {  0,   0,   2,  -1,   1 },
+      {  2,   0,   0,   2,   1 },
+
+   /* 191-200 */
+      {  1,  -1,  -2,   2,  -1 },
+      {  0,   0,   0,   2,  -2 },
+      {  2,   0,   0,  -4,   1 },
+      {  1,   0,   0,  -4,   1 },
+      {  2,   0,   2,  -4,   1 },
+      {  4,   0,   2,  -2,   2 },
+      {  2,   1,  -2,   0,  -1 },
+      {  2,   1,  -2,  -4,  -2 },
+      {  3,   0,   0,  -4,   0 },
+      {  1,  -1,   2,   2,   1 },
+
+   /* 201-210 */
+      {  1,  -1,  -2,   0,  -1 },
+      {  0,   2,   0,   0,   1 },
+      {  1,   2,  -2,  -2,  -2 },
+      {  1,   1,   0,  -4,   0 },
+      {  2,   0,   0,  -2,   2 },
+      {  0,   2,   2,  -2,   1 },
+      {  1,   0,   2,   0,  -1 },
+      {  2,   1,   0,  -2,   1 },
+      {  2,  -1,  -2,   0,  -1 },
+      {  1,  -1,  -2,  -2,  -1 },
+
+   /* 211-220 */
+      {  0,   1,  -2,   1,  -2 },
+      {  1,   0,  -4,   2,  -2 },
+      {  0,   1,   2,   2,   1 },
+      {  3,   0,   0,   0,   1 },
+      {  2,  -1,   2,   2,   2 },
+      {  0,   1,  -2,  -4,  -2 },
+      {  1,   0,  -2,  -3,  -2 },
+      {  2,   0,   0,   0,   2 },
+      {  1,  -1,   0,  -2,  -2 },
+      {  2,   0,  -2,   2,  -1 },
+
+   /* 221-230 */
+      {  0,   2,  -2,   0,  -2 },
+      {  3,   0,  -2,   0,  -1 },
+      {  2,  -1,   2,   0,   1 },
+      {  1,   0,  -2,  -1,  -2 },
+      {  0,   0,   2,   0,   3 },
+      {  2,   0,  -4,   0,  -2 },
+      {  2,   1,   0,  -4,   0 },
+      {  1,   1,  -2,   1,  -1 },
+      {  0,   2,   2,   0,   2 },
+      {  1,  -1,   2,  -2,   2 },
+
+   /* 231-240 */
+      {  1,  -1,   0,  -2,   1 },
+      {  2,   1,   2,   0,   1 },
+      {  1,   0,   2,  -4,   2 },
+      {  1,   1,  -2,   0,  -1 },
+      {  1,   1,   0,   2,   0 },
+      {  1,   0,   0,  -3,   0 },
+      {  2,   0,   2,  -1,   2 },
+      {  0,   2,   0,   0,  -1 },
+      {  2,  -1,   0,  -2,   0 },
+      {  4,   0,   0,   0,   0 },
+
+   /* 241-250 */
+      {  2,   1,  -2,  -2,  -2 },
+      {  0,   2,  -2,   2,   0 },
+      {  1,   0,   2,   1,   1 },
+      {  1,   0,  -1,   0,  -3 },
+      {  3,  -1,   2,   0,   2 },
+      {  2,   0,   2,  -2,   0 },
+      {  1,  -2,   0,   0,   0 },
+      {  2,   0,   0,   0,  -2 },
+      {  1,   0,   0,   4,   0 },
+      {  0,   1,   0,   1,   1 },
+
+   /* 251-260 */
+      {  1,   0,   2,   2,   0 },
+      {  0,   1,   0,   2,  -1 },
+      {  0,   1,   0,   1,  -1 },
+      {  0,   0,   2,  -2,   3 },
+      {  3,   1,   2,   0,   2 },
+      {  1,   1,   2,   1,   2 },
+      {  1,   1,  -2,   2,  -1 },
+      {  2,  -1,   2,  -2,   2 },
+      {  1,  -2,   2,   0,   2 },
+      {  1,   0,   2,  -4,   0 },
+
+   /* 261-270 */
+      {  0,   0,   1,   0,   0 },
+      {  1,   0,   2,  -3,   1 },
+      {  1,  -2,   0,  -2,   0 },
+      {  2,   0,   0,   2,  -1 },
+      {  1,   1,   2,  -4,   1 },
+      {  4,   0,   2,   0,   1 },
+      {  0,   1,   2,   1,   1 },
+      {  1,   2,   2,  -2,   2 },
+      {  2,   0,   2,   1,   2 },
+      {  2,   1,   2,  -2,   1 },
+
+   /* 271-280 */
+      {  1,   0,   2,  -1,   1 },
+      {  1,   0,   4,  -2,   1 },
+      {  1,  -1,   2,  -2,   1 },
+      {  0,   1,   0,  -4,   0 },
+      {  3,   0,  -2,  -2,  -2 },
+      {  0,   0,   4,  -4,   2 },
+      {  2,   0,  -4,  -2,  -2 },
+      {  2,  -2,   0,  -2,  -1 },
+      {  1,   0,   2,  -2,  -1 },
+      {  2,   0,  -2,  -6,  -2 },
+
+   /* 281-290 */
+      {  1,   0,  -2,   1,  -2 },
+      {  1,   0,  -2,   2,   1 },
+      {  1,  -1,   0,   2,  -1 },
+      {  1,   0,  -2,   1,   0 },
+      {  2,  -1,   0,  -2,   1 },
+      {  1,  -1,   0,   2,   1 },
+      {  2,   0,  -2,  -2,   0 },
+      {  1,   0,   2,  -3,   2 },
+      {  0,   0,   0,   4,  -1 },
+      {  2,  -1,   0,   0,   1 },
+
+   /* 291-300 */
+      {  2,   0,   4,  -2,   2 },
+      {  0,   0,   2,   3,   2 },
+      {  0,   1,   4,  -2,   2 },
+      {  0,   1,  -2,   2,   1 },
+      {  1,   1,   0,   2,   1 },
+      {  1,   0,   0,   4,   1 },
+      {  0,   0,   4,   0,   1 },
+      {  2,   0,   0,  -3,   0 },
+      {  1,   0,   0,  -1,  -2 },
+      {  1,  -2,  -2,  -2,  -2 },
+
+   /* 301-310 */
+      {  3,   0,   0,   2,   0 },
+      {  2,   0,   2,  -4,   2 },
+      {  1,   1,  -2,  -4,  -1 },
+      {  1,   0,  -2,  -6,  -2 },
+      {  2,  -1,   0,   0,  -1 },
+      {  2,  -1,   0,   2,   0 },
+      {  0,   1,   2,  -2,  -1 },
+      {  1,   1,   0,   1,   0 },
+      {  1,   2,   0,  -2,  -1 },
+      {  1,   0,   0,   1,  -1 },
+
+   /* 311-320 */
+      {  0,   0,   1,   0,   2 },
+      {  3,   1,   2,  -2,   2 },
+      {  1,   0,  -4,  -2,  -2 },
+      {  1,   0,   2,   4,   1 },
+      {  1,  -2,   2,   2,   2 },
+      {  1,  -1,  -2,  -4,  -2 },
+      {  0,   0,   2,  -4,   2 },
+      {  0,   0,   2,  -3,   1 },
+      {  2,   1,  -2,   0,   0 },
+      {  3,   0,  -2,  -2,  -1 },
+
+   /* 321-330 */
+      {  2,   0,   2,   4,   2 },
+      {  0,   0,   0,   0,   3 },
+      {  2,  -1,  -2,  -2,  -2 },
+      {  2,   0,   0,  -1,   0 },
+      {  3,   0,   2,  -4,   2 },
+      {  2,   1,   2,   2,   2 },
+      {  0,   0,   3,   0,   3 },
+      {  1,   1,   2,   2,   1 },
+      {  2,   1,   0,   0,  -1 },
+      {  1,   2,   0,  -2,   1 },
+
+   /* 331-340 */
+      {  3,   0,   2,   2,   1 },
+      {  1,  -1,  -2,   2,  -2 },
+      {  1,   1,   0,  -1,   0 },
+      {  1,   2,   0,   0,   0 },
+      {  1,   0,   4,   0,   2 },
+      {  1,  -1,   2,   4,   2 },
+      {  2,   1,   0,   0,   1 },
+      {  1,   0,   0,   2,   2 },
+      {  1,  -1,  -2,   2,   0 },
+      {  0,   2,  -2,  -2,  -1 },
+
+   /* 341-350 */
+      {  2,   0,  -2,   0,   2 },
+      {  5,   0,   2,   0,   2 },
+      {  3,   0,  -2,  -6,  -2 },
+      {  1,  -1,   2,  -1,   2 },
+      {  3,   0,   0,  -4,  -1 },
+      {  1,   0,   0,   1,   1 },
+      {  1,   0,  -4,   2,  -1 },
+      {  0,   1,   2,  -4,   1 },
+      {  1,   2,   2,   0,   2 },
+      {  0,   1,   0,  -2,  -2 },
+
+   /* 351-360 */
+      {  0,   0,   2,  -1,   0 },
+      {  1,   0,   1,   0,   1 },
+      {  0,   2,   0,  -2,   1 },
+      {  3,   0,   2,   0,   0 },
+      {  1,   1,  -2,   1,   0 },
+      {  2,   1,  -2,  -4,  -1 },
+      {  3,  -1,   0,   0,   0 },
+      {  2,  -1,  -2,   0,   0 },
+      {  4,   0,   2,  -2,   1 },
+      {  2,   0,  -2,   2,   0 },
+
+   /* 361-370 */
+      {  1,   1,   2,  -2,   0 },
+      {  1,   0,  -2,   4,  -1 },
+      {  1,   0,  -2,  -2,   1 },
+      {  2,   0,   2,  -4,   0 },
+      {  1,   1,   0,  -2,  -2 },
+      {  1,   1,  -2,  -2,   0 },
+      {  1,   0,   1,  -2,   1 },
+      {  2,  -1,  -2,  -4,  -2 },
+      {  3,   0,  -2,   0,  -2 },
+      {  0,   1,  -2,  -2,   0 },
+
+   /* 371-380 */
+      {  3,   0,   0,  -2,  -1 },
+      {  1,   0,  -2,  -3,  -1 },
+      {  0,   1,   0,  -4,  -1 },
+      {  1,  -2,   2,  -2,   1 },
+      {  0,   1,  -2,   1,  -1 },
+      {  1,  -1,   0,   0,   2 },
+      {  2,   0,   0,   1,   0 },
+      {  1,  -2,   0,   2,   0 },
+      {  1,   2,  -2,  -2,  -1 },
+      {  0,   0,   4,  -4,   1 },
+
+   /* 381-390 */
+      {  0,   1,   2,   4,   2 },
+      {  0,   1,  -4,   2,  -2 },
+      {  3,   0,  -2,   0,   0 },
+      {  2,  -1,   2,   2,   1 },
+      {  0,   1,  -2,  -4,  -1 },
+      {  4,   0,   2,   2,   2 },
+      {  2,   0,  -2,  -3,  -2 },
+      {  2,   0,   0,  -6,   0 },
+      {  1,   0,   2,   0,   3 },
+      {  3,   1,   0,   0,   0 },
+
+   /* 391-400 */
+      {  3,   0,   0,  -4,   1 },
+      {  1,  -1,   2,   0,   0 },
+      {  1,  -1,   0,  -4,   0 },
+      {  2,   0,  -2,   2,  -2 },
+      {  1,   1,   0,  -2,   2 },
+      {  4,   0,   0,  -2,   0 },
+      {  2,   2,   0,  -2,   0 },
+      {  0,   1,   2,   0,   0 },
+      {  1,   1,   0,  -4,   1 },
+      {  1,   0,   0,  -4,  -2 },
+
+   /* 401-410 */
+      {  0,   0,   0,   1,   2 },
+      {  3,   0,   0,   2,   1 },
+      {  1,   1,   0,  -4,  -1 },
+      {  0,   0,   2,   2,  -1 },
+      {  1,   1,   2,   0,   0 },
+      {  1,  -1,   2,  -4,   1 },
+      {  1,   1,   0,   0,   2 },
+      {  0,   0,   2,   6,   2 },
+      {  4,   0,  -2,  -2,  -1 },
+      {  2,   1,   0,  -4,  -1 },
+
+   /* 411-420 */
+      {  0,   0,   0,   3,   1 },
+      {  1,  -1,  -2,   0,   0 },
+      {  0,   0,   2,   1,   0 },
+      {  1,   0,   0,   2,  -2 },
+      {  3,  -1,   2,   2,   2 },
+      {  3,  -1,   2,  -2,   2 },
+      {  1,   0,   0,  -1,   2 },
+      {  1,  -2,   2,  -2,   2 },
+      {  0,   1,   0,   2,   2 },
+      {  0,   1,  -2,  -1,  -2 },
+
+   /* 421-430 */
+      {  1,   1,  -2,   0,   0 },
+      {  0,   2,   2,  -2,   0 },
+      {  3,  -1,  -2,  -1,  -2 },
+      {  1,   0,   0,  -6,   0 },
+      {  1,   0,  -2,  -4,   0 },
+      {  2,   1,   0,  -4,   1 },
+      {  2,   0,   2,   0,  -1 },
+      {  2,   0,  -4,   0,  -1 },
+      {  0,   0,   3,   0,   2 },
+      {  2,   1,  -2,  -2,  -1 },
+
+   /* 431-440 */
+      {  1,  -2,   0,   0,   1 },
+      {  2,  -1,   0,  -4,   0 },
+      {  0,   0,   0,   3,   0 },
+      {  5,   0,   2,  -2,   2 },
+      {  1,   2,  -2,  -4,  -2 },
+      {  1,   0,   4,  -4,   2 },
+      {  0,   0,   4,  -1,   2 },
+      {  3,   1,   0,  -4,   0 },
+      {  3,   0,   0,  -6,   0 },
+      {  2,   0,   0,   2,   2 },
+
+   /* 441-450 */
+      {  2,  -2,   2,   0,   2 },
+      {  1,   0,   0,  -3,   1 },
+      {  1,  -2,  -2,   0,  -2 },
+      {  1,  -1,  -2,  -3,  -2 },
+      {  0,   0,   2,  -2,  -2 },
+      {  2,   0,  -2,  -4,   0 },
+      {  1,   0,  -4,   0,   0 },
+      {  0,   1,   0,  -1,   0 },
+      {  4,   0,   0,   0,  -1 },
+      {  3,   0,   2,  -1,   2 },
+
+   /* 451-460 */
+      {  3,  -1,   2,   0,   1 },
+      {  2,   0,   2,  -1,   1 },
+      {  1,   2,   2,  -2,   1 },
+      {  1,   1,   0,   2,  -1 },
+      {  0,   2,   2,   0,   1 },
+      {  3,   1,   2,   0,   1 },
+      {  1,   1,   2,   1,   1 },
+      {  1,   1,   0,  -1,   1 },
+      {  1,  -2,   0,  -2,  -1 },
+      {  4,   0,   0,  -4,   0 },
+
+   /* 461-470 */
+      {  2,   1,   0,   2,   0 },
+      {  1,  -1,   0,   4,   0 },
+      {  0,   1,   0,  -2,   2 },
+      {  0,   0,   2,   0,  -2 },
+      {  1,   0,  -1,   0,   1 },
+      {  3,   0,   2,  -2,   0 },
+      {  2,   0,   2,   2,   0 },
+      {  1,   2,   0,  -4,   0 },
+      {  1,  -1,   0,  -3,   0 },
+      {  0,   1,   0,   4,   0 },
+
+   /* 471 - 480 */
+      {  0,   1,  -2,   0,   0 },
+      {  2,   2,   2,  -2,   2 },
+      {  0,   0,   0,   1,  -2 },
+      {  0,   2,  -2,   0,  -1 },
+      {  4,   0,   2,  -4,   2 },
+      {  2,   0,  -4,   2,  -2 },
+      {  2,  -1,  -2,   0,  -2 },
+      {  1,   1,   4,  -2,   2 },
+      {  1,   1,   2,  -4,   2 },
+      {  1,   0,   2,   3,   2 },
+
+   /* 481-490 */
+      {  1,   0,   0,   4,  -1 },
+      {  0,   0,   0,   4,   2 },
+      {  2,   0,   0,   4,   0 },
+      {  1,   1,  -2,   2,   0 },
+      {  2,   1,   2,   1,   2 },
+      {  2,   1,   2,  -4,   1 },
+      {  2,   0,   2,   1,   1 },
+      {  2,   0,  -4,  -2,  -1 },
+      {  2,   0,  -2,  -6,  -1 },
+      {  2,  -1,   2,  -1,   2 },
+
+   /* 491-500 */
+      {  1,  -2,   2,   0,   1 },
+      {  1,  -2,   0,  -2,   1 },
+      {  1,  -1,   0,  -4,  -1 },
+      {  0,   2,   2,   2,   2 },
+      {  0,   2,  -2,  -4,  -2 },
+      {  0,   1,   2,   3,   2 },
+      {  0,   1,   0,  -4,   1 },
+      {  3,   0,   0,  -2,   1 },
+      {  2,   1,  -2,   0,   1 },
+      {  2,   0,   4,  -2,   1 },
+
+   /* 501-510 */
+      {  2,   0,   0,  -3,  -1 },
+      {  2,  -2,   0,  -2,   1 },
+      {  2,  -1,   2,  -2,   1 },
+      {  1,   0,   0,  -6,  -1 },
+      {  1,  -2,   0,   0,  -1 },
+      {  1,  -2,  -2,  -2,  -1 },
+      {  0,   1,   4,  -2,   1 },
+      {  0,   0,   2,   3,   1 },
+      {  2,  -1,   0,  -1,   0 },
+      {  1,   3,   0,  -2,   0 },
+
+   /* 511-520 */
+      {  0,   3,   0,  -2,   0 },
+      {  2,  -2,   2,  -2,   2 },
+      {  0,   0,   4,  -2,   0 },
+      {  4,  -1,   2,   0,   2 },
+      {  2,   2,  -2,  -4,  -2 },
+      {  4,   1,   2,   0,   2 },
+      {  4,  -1,  -2,  -2,  -2 },
+      {  2,   1,   0,  -2,  -2 },
+      {  2,   1,  -2,  -6,  -2 },
+      {  2,   0,   0,  -1,   1 },
+
+   /* 521-530 */
+      {  2,  -1,  -2,   2,  -1 },
+      {  1,   1,  -2,   2,  -2 },
+      {  1,   1,  -2,  -3,  -2 },
+      {  1,   0,   3,   0,   3 },
+      {  1,   0,  -2,   1,   1 },
+      {  1,   0,  -2,   0,   2 },
+      {  1,  -1,   2,   1,   2 },
+      {  1,  -1,   0,   0,  -2 },
+      {  1,  -1,  -4,   2,  -2 },
+      {  0,   3,  -2,  -2,  -2 },
+
+   /* 531-540 */
+      {  0,   1,   0,   4,   1 },
+      {  0,   0,   4,   2,   2 },
+      {  3,   0,  -2,  -2,   0 },
+      {  2,  -2,   0,   0,   0 },
+      {  1,   1,   2,  -4,   0 },
+      {  1,   1,   0,  -3,   0 },
+      {  1,   0,   2,  -3,   0 },
+      {  1,  -1,   2,  -2,   0 },
+      {  0,   2,   0,   2,   0 },
+      {  0,   0,   2,   4,   0 },
+
+   /* 541-550 */
+      {  1,   0,   1,   0,   0 },
+      {  3,   1,   2,  -2,   1 },
+      {  3,   0,   4,  -2,   2 },
+      {  3,   0,   2,   1,   2 },
+      {  3,   0,   0,   2,  -1 },
+      {  3,   0,   0,   0,   2 },
+      {  3,   0,  -2,   2,  -1 },
+      {  2,   0,   4,  -4,   2 },
+      {  2,   0,   2,  -3,   2 },
+      {  2,   0,   0,   4,   1 },
+
+   /* 551-560 */
+      {  2,   0,   0,  -3,   1 },
+      {  2,   0,  -4,   2,  -1 },
+      {  2,   0,  -2,  -2,   1 },
+      {  2,  -2,   2,   2,   2 },
+      {  2,  -2,   0,  -2,  -2 },
+      {  2,  -1,   0,   2,   1 },
+      {  2,  -1,   0,   2,  -1 },
+      {  1,   1,   2,   4,   2 },
+      {  1,   1,   0,   1,   1 },
+      {  1,   1,   0,   1,  -1 },
+
+   /* 561-570 */
+      {  1,   1,  -2,  -6,  -2 },
+      {  1,   0,   0,  -3,  -1 },
+      {  1,   0,  -4,  -2,  -1 },
+      {  1,   0,  -2,  -6,  -1 },
+      {  1,  -2,   2,   2,   1 },
+      {  1,  -2,  -2,   2,  -1 },
+      {  1,  -1,  -2,  -4,  -1 },
+      {  0,   2,   0,   0,   2 },
+      {  0,   1,   2,  -4,   2 },
+      {  0,   1,  -2,   4,  -1 },
+
+   /* 571-580 */
+      {  5,   0,   0,   0,   0 },
+      {  3,   0,   0,  -3,   0 },
+      {  2,   2,   0,  -4,   0 },
+      {  1,  -1,   2,   2,   0 },
+      {  0,   1,   0,   3,   0 },
+      {  4,   0,  -2,   0,  -1 },
+      {  3,   0,  -2,  -6,  -1 },
+      {  3,   0,  -2,  -1,  -1 },
+      {  2,   1,   2,   2,   1 },
+      {  2,   1,   0,   2,   1 },
+
+   /* 581-590 */
+      {  2,   0,   2,   4,   1 },
+      {  2,   0,   2,  -6,   1 },
+      {  2,   0,   2,  -2,  -1 },
+      {  2,   0,   0,  -6,  -1 },
+      {  2,  -1,  -2,  -2,  -1 },
+      {  1,   2,   2,   0,   1 },
+      {  1,   2,   0,   0,   1 },
+      {  1,   0,   4,   0,   1 },
+      {  1,   0,   2,  -6,   1 },
+      {  1,   0,   2,  -4,  -1 },
+
+   /* 591-600 */
+      {  1,   0,  -1,  -2,  -1 },
+      {  1,  -1,   2,   4,   1 },
+      {  1,  -1,   2,  -3,   1 },
+      {  1,  -1,   0,   4,   1 },
+      {  1,  -1,  -2,   1,  -1 },
+      {  0,   1,   2,  -2,   3 },
+      {  3,   0,   0,  -2,   0 },
+      {  1,   0,   1,  -2,   0 },
+      {  0,   2,   0,  -4,   0 },
+      {  0,   0,   2,  -4,   0 },
+
+   /* 601-610 */
+      {  0,   0,   1,  -1,   0 },
+      {  0,   0,   0,   6,   0 },
+      {  0,   2,   0,   0,  -2 },
+      {  0,   1,  -2,   2,  -3 },
+      {  4,   0,   0,   2,   0 },
+      {  3,   0,   0,  -1,   0 },
+      {  3,  -1,   0,   2,   0 },
+      {  2,   1,   0,   1,   0 },
+      {  2,   1,   0,  -6,   0 },
+      {  2,  -1,   2,   0,   0 },
+
+   /* 611-620 */
+      {  1,   0,   2,  -1,   0 },
+      {  1,  -1,   0,   1,   0 },
+      {  1,  -1,  -2,  -2,   0 },
+      {  0,   1,   2,   2,   0 },
+      {  0,   0,   2,  -3,   0 },
+      {  2,   2,   0,  -2,  -1 },
+      {  2,  -1,  -2,   0,   1 },
+      {  1,   2,   2,  -4,   1 },
+      {  0,   1,   4,  -4,   2 },
+      {  0,   0,   0,   3,   2 },
+
+   /* 621-630 */
+      {  5,   0,   2,   0,   1 },
+      {  4,   1,   2,  -2,   2 },
+      {  4,   0,  -2,  -2,   0 },
+      {  3,   1,   2,   2,   2 },
+      {  3,   1,   0,  -2,   0 },
+      {  3,   1,  -2,  -6,  -2 },
+      {  3,   0,   0,   0,  -2 },
+      {  3,   0,  -2,  -4,  -2 },
+      {  3,  -1,   0,  -3,   0 },
+      {  3,  -1,   0,  -2,   0 },
+
+   /* 631-640 */
+      {  2,   1,   2,   0,   0 },
+      {  2,   1,   2,  -4,   2 },
+      {  2,   1,   2,  -2,   0 },
+      {  2,   1,   0,  -3,   0 },
+      {  2,   1,  -2,   0,  -2 },
+      {  2,   0,   0,  -4,   2 },
+      {  2,   0,   0,  -4,  -2 },
+      {  2,   0,  -2,  -5,  -2 },
+      {  2,  -1,   2,   4,   2 },
+      {  2,  -1,   0,  -2,   2 },
+
+   /* 641-650 */
+      {  1,   3,  -2,  -2,  -2 },
+      {  1,   1,   0,   0,  -2 },
+      {  1,   1,   0,  -6,   0 },
+      {  1,   1,  -2,   1,  -2 },
+      {  1,   1,  -2,  -1,  -2 },
+      {  1,   0,   2,   1,   0 },
+      {  1,   0,   0,   3,   0 },
+      {  1,   0,   0,  -4,   2 },
+      {  1,   0,  -2,   4,  -2 },
+      {  1,  -2,   0,  -1,   0 },
+
+   /* 651-NFLS */
+      {  0,   1,  -4,   2,  -1 },
+      {  1,   0,  -2,   0,  -3 },
+      {  0,   0,   4,  -4,   4 }
+   };
+
+/* Number of frequencies:  luni-solar */
+   static const int NFLS = (int) (sizeof mfals / sizeof (int) / 5);
+
+/* Fundamental-argument multipliers:  planetary terms */
+   static const int mfapl[][14] = {
+
+   /* 1-10 */
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -2,  5,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  1, -1,  1,  0, -8, 12,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  8,-16,  4,  5,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0, -1,  2,  0,  0,  0,  0,  0 },
+
+   /* 11-20 */
+      {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  2, -5,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -1,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2, -8,  3,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  6, -8,  3,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0,  0 },
+
+   /* 21-30 */
+      {  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  1,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  1, -1,  1,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
+      {  2,  0,  0, -2, -1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  1 },
+      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+
+   /* 31-40 */
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  1 },
+      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0, -1,  0,  0,  0 },
+
+   /* 41-50 */
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  1, -1,  0,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  4,  0, -2,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  2, -1,  0,  0,  0,  0,  0,  2 },
+      {  1,  0,  0,  0,  0,  0,-18, 16,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  1,  0,  0,  0,  2 },
+
+   /* 51-60 */
+      {  0,  0,  1, -1,  1,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0,  0,  0,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  0,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -1,  0,  0,  0,  2 },
+      {  1,  0,  2,  0,  2,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  1 },
+      {  1,  0, -2,  0, -2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  2,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
+
+   /* 61-70 */
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  8,-16,  4,  5,  0,  0, -2 },
+      {  0,  0,  1, -1,  1,  0,  0,  3, -8,  3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  8,-11,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  8,-16,  4,  5,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0 },
+
+   /* 71-80 */
+      {  0,  0,  0,  0,  0,  0,  6, -8,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  3, -2,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -2,  0,  0,  0,  2 },
+      {  0,  0,  1, -1,  1,  0,  0, -5,  8, -3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  2,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -2,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0,  0 },
+
+   /* 81-90 */
+      {  2,  0,  0, -2,  1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0, -1 },
+      {  2,  0,  0, -2,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  8,-13,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0,  0,  0, -2,  5,  0,  0,  0 },
+      {  1,  0,  0, -1,  0,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  2 },
+      {  1,  0,  0,  0, -1,  0,-18, 16,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0,  0,  0,  2, -5,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0,  0,  0,  1,  0,  0,  0,  0 },
+
+   /* 91-100 */
+      {  1,  0,  0, -2,  0,  0, 19,-21,  3,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0, -8, 13,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  1,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  7, -9,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  2 },
+      {  1,  0,  0,  0,  1,  0,-18, 16,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  6,-16,  4,  5,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  3, -7,  0,  0,  0,  0,  0, -2 },
+
+   /* 101-110 */
+      {  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  1 },
+      {  2,  0,  0, -2,  1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0,  0 },
+      {  2,  0,  0, -2, -1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  2,  0,  0,  0,  2 },
+
+   /* 111-120 */
+      {  0,  0,  0,  0,  1,  0,  0,  1, -2,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  2 },
+      {  0,  0,  2, -2,  1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
+      {  2,  0,  0, -2,  0,  0, -6,  8,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
+
+   /* 121-130 */
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  1 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -1,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  8,-10,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  1, -1,  1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0, -2 },
+      {  1,  0,  0, -1,  1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
+
+   /* 131-140 */
+      {  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  4,  0, -3,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  1,  0,  2, -3,  0,  0,  0,  0,  0,  0 },
+
+   /* 141-150 */
+      {  1,  0,  0, -1,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -4,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  9,-11,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0, -4,  5,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  4,  0, -1,  0,  0,  0,  2 },
+
+   /* 151-160 */
+      {  1,  0,  0, -1,  1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1,  1,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -4, 10,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0, -1,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0, -2 },
+      {  0,  0,  2, -2,  1,  0, -4,  4,  0,  0,  0,  0,  0,  0 },
+
+   /* 161-170 */
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0,  0, -1,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -3,  0,  0,  0,  0,  2 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0,  0,  2,  0 },
+      {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  1,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0, -9, 13,  0,  0,  0,  0,  0 },
+      {  2,  0,  2,  0,  2,  0,  0,  2,  0, -3,  0,  0,  0,  0 },
+
+   /* 171-180 */
+      {  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  1, -1,  2,  0,  0, -1,  0,  0,  2,  0,  0,  0 },
+      {  1,  0,  0, -1, -1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  1 },
+      {  1,  0,  2,  0,  1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
+      {  1,  0, -2,  0, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0, -2,  4,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0 },
+
+   /* 181-190 */
+      {  0,  0,  0,  0,  0,  0,  2,  1,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  2,  0,  2,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1, -8,  3,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  7, -8,  3,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  1,  0, -3,  5,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0, -1,  0,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  0,  0,  0,  1 },
+
+   /* 191-200 */
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  7,-10,  0,  0,  0,  0,  0, -2 },
+      {  1,  0,  0, -2,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  2, -5,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  6, -8,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  1, -1,  1,  0,  0, -9, 15,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0, -2,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0, -1,  1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0 },
+
+   /* 201-210 */
+      {  0,  0,  0,  0,  0,  0,  0,  1, -4,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -1,  0,  0,  2 },
+      {  2,  0,  0, -2,  1,  0, -6,  8,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  1, -1,  1,  0,  3, -6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  8,-14,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+
+   /* 211-220 */
+      {  0,  0,  0,  0,  1,  0,  0,  8,-15,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  7, -7,  0,  0,  0,  0,  0,  0 },
+      {  2,  0,  0, -2,  1,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  1,  0,  0,  2 },
+      {  2,  0, -1, -1,  0,  0,  0,  3, -7,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -3,  4,  0,  0,  0,  0,  0 },
+
+   /* 221-230 */
+      {  2,  0,  0, -2,  0,  0,  0, -6,  8,  0,  0,  0,  0,  0 },
+      {  2,  0,  0, -2,  0,  0,  0, -5,  6,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0,  0,  0, -1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  2,  1,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  1,  2,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  1,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  3, -9,  4,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0, -2 },
+
+   /* 231-240 */
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -4,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  1 },
+      {  0,  0,  0,  0,  0,  0,  7,-11,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  3, -5,  4,  0,  0,  0,  0,  2 },
+      {  0,  0,  1, -1,  0,  0,  0, -1,  0, -1,  1,  0,  0,  0 },
+      {  2,  0,  0,  0,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0, -2 },
+      {  0,  0,  1, -1,  2,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  0, -1 },
+
+   /* 241-250 */
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -1,  1,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -8,  3,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  2, -4,  0, -3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  3, -5,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -3,  0,  0,  0,  2 },
+      {  0,  0,  2, -2,  2,  0, -8, 11,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -8,  3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -2,  0,  0,  0 },
+
+   /* 251-260 */
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  1,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  7, -9,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  2, -1,  0,  0,  0,  0,  0,  0 },
+      {  1,  0, -2, -2, -2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  5,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0,  1 },
+
+   /* 261-270 */
+      {  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  2, -5,  0,  0,  2 },
+      {  2,  0,  0, -2, -1,  0,  0, -2,  0,  0,  5,  0,  0,  0 },
+      {  2,  0,  0, -2, -1,  0, -6,  8,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0, -2,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  8, -8,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0,  2, -5,  0,  0,  2 },
+      {  0,  0,  0,  0,  1,  0,  3, -7,  4,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
+
+   /* 271-280 */
+      {  0,  0,  1, -1,  0,  0,  0, -1,  0, -2,  5,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0, 11,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  6,-15,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0,  1,  0,  0,  0,  2 },
+      {  1,  0,  0, -1,  0,  0,  0, -3,  4,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0, -3,  7, -4,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  5,  0, -2,  0,  0,  0,  2 },
+
+   /* 281-290 */
+      {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  2, -2,  2,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  6,-11,  0,  0,  0,  0, -2 },
+
+   /* 291-300 */
+      {  0,  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0, -2 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  3,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  9,-12,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  1, -1,  0,  0, -8, 12,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0, -2,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  7, -7,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0, -1 },
+
+   /* 301-310 */
+      {  0,  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  1, -1,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  1, -1, -1,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1, -5,  0,  0,  0,  0, -2 },
+      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  3, -1,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -2,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0,  2 },
+
+   /* 311-320 */
+      {  0,  0,  0,  0,  0,  0,  9, -9,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  3,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0,  2, -4,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  5, -3,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  1 },
+      {  0,  0,  1, -1,  2,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -3,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  2 },
+      {  0,  0,  2,  0,  2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
+
+   /* 321-330 */
+      {  0,  0,  2,  0,  2,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  5,  0, -3,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0 },
+      {  2,  0, -1, -1, -1,  0,  0, -1,  0,  3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  4, -3,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  5,-10,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  2, -2,  1, -1,  0,  2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0,  2,  0,  0 },
+
+   /* 331-340 */
+      {  0,  0,  0,  0,  1,  0,  3, -5,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0, -2,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  9, -9,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2,  0,  2,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0, -8, 11,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0, -2,  0,  0,  2,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -1,  2,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  2, -6,  0,  0,  0,  0,  0, -2 },
+
+   /* 341-350 */
+      {  0,  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -2,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  7,-13,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  3,  0,  0,  0,  2 },
+      {  0,  0,  2, -2,  1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  8, -8,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  8,-10,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  0,  1 },
+
+   /* 351-360 */
+      {  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -4,  0,  0,  0,  0 },
+      {  2,  0,  0, -2, -1,  0,  0, -5,  6,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0,  0, -2 },
+      {  2,  0, -1, -1, -1,  0,  0,  3, -7,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0 },
+      {  0,  0,  2,  0,  2,  0, -1,  1,  0,  0,  0,  0,  0,  0 },
+
+   /* 361-370 */
+      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  4, -3,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  6,-11,  0,  0,  0,  0,  0 },
+      {  2,  0,  0, -2,  1,  0,  0, -6,  8,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  1,  5,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  6, -5,  0,  0,  0,  0,  2 },
+      {  1,  0, -2, -2, -2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  2,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  2,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  1 },
+
+   /* 371-380 */
+      {  0,  0,  0,  0,  0,  0,  0,  6, -7,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  4,  0,  0, -2,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0,  0, -2,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  0,  1, -6,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  3, -5,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  7,-13,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  0,  0,  0,  2 },
+
+   /* 381-390 */
+      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0,  2,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0, -8, 15,  0,  0,  0,  0,  0 },
+      {  2,  0,  0, -2, -2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
+      {  2,  0, -1, -1, -1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
+      {  1,  0,  2, -2,  2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+      {  1,  0, -1,  1, -1,  0,-18, 17,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2,  0,  2,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
+      {  0,  0,  2,  0,  2,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
+      {  0,  0,  2, -2, -1,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  2,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
+
+   /* 391-400 */
+      {  0,  0,  0,  0,  1,  0,  2, -2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  8,-16,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  2 },
+      {  0,  0,  0,  0,  2,  0,  0, -1,  2,  0,  0,  0,  0,  0 },
+      {  2,  0, -1, -1, -2,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -2,  4,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  2,  0,  0,  0,  0,  2 },
+      {  2,  0,  0, -2, -1,  0,  0, -2,  0,  4, -5,  0,  0,  0 },
+
+   /* 401-410 */
+      {  2,  0,  0, -2, -1,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
+      {  2,  0, -1, -1, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0, -1, -1,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
+      {  1,  0, -1, -1, -1,  0, 20,-20,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  1, -2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0, -2,  1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  5, -8,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0,  0,  0,  0, -1,  0,  0,  0 },
+
+   /* 411-420 */
+      {  0,  0,  0,  0,  0,  0,  9,-11,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  5, -3,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  6, -7,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -2,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0, -2,  0,  0,  0 },
+      {  0,  0,  1, -1,  2,  0,  0, -1,  0, -2,  5,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0 },
+
+   /* 421-430 */
+      {  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2, -6,  0,  0,  0,  0, -2 },
+      {  1,  0,  0, -2,  0,  0, 20,-21,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  8,-12,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  2,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  8,-12,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  9,-17,  0,  0,  0,  0,  0 },
+
+   /* 431-440 */
+      {  0,  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  1,  5,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2, -7,  0,  0,  0,  0, -2 },
+      {  1,  0,  0, -1,  1,  0,  0, -3,  4,  0,  0,  0,  0,  0 },
+      {  1,  0, -2,  0, -2,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0, -9, 17,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  1, -4,  0,  0,  0,  0,  0, -2 },
+      {  1,  0, -2, -2, -2,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
+      {  1,  0, -1,  1, -1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+
+   /* 441-450 */
+      {  0,  0,  2, -2,  2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  2,  0,  0, -1,  0,  0,  1,  0,  0,  0 },
+      {  0,  0,  1, -1,  2,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0,  2, -2,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  5,-10,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  4,  0, -4,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -5,  0,  0,  0, -2 },
+
+   /* 451-460 */
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -5,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -2,  5,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -2,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0,  1 },
+      {  1,  0,  0, -2,  0,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  3, -7,  4,  0,  0,  0,  0,  0 },
+      {  2,  0,  2,  0,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1, -1,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0,  1,  0, -2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0, -2 },
+
+   /* 461-470 */
+      {  1,  0,  0, -1,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0, -3,  0,  3,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0, -5,  5,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  1, -3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -4,  6,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0, -1,  0,  0 },
+      {  0,  0,  1, -1,  1,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
+
+   /* 471-480 */
+      {  0,  0,  0,  0,  1,  0,  3, -4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  7,-10,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  3, -8,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  7, -9,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  7, -8,  0,  0,  0,  0,  2 },
+
+   /* 481-490 */
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -8,  3,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -2,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0, -1 },
+      {  2,  0,  0, -2, -1,  0,  0, -6,  8,  0,  0,  0,  0,  0 },
+      {  2,  0, -1, -1,  1,  0,  0,  3, -7,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0, -7,  9,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0, -1 },
+
+   /* 491-500 */
+      {  0,  0,  1, -1,  2,  0, -8, 12,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0,  0,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+      {  1,  0,  0, -2,  0,  0,  2, -2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  7, -8,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0 },
+      {  2,  0,  0, -2,  1,  0,  0, -5,  6,  0,  0,  0,  0,  0 },
+      {  2,  0,  0, -2, -1,  0,  0, -2,  0,  3, -1,  0,  0,  0 },
+      {  1,  0,  1,  1,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0, -2,  1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+      {  1,  0,  0, -2, -1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+
+   /* 501-510 */
+      {  1,  0,  0, -1, -1,  0,  0, -3,  4,  0,  0,  0,  0,  0 },
+      {  1,  0, -1,  0, -1,  0, -3,  5,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0, -4,  4,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0, -2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0, -8, 11,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  0,  0,  0, -9, 13,  0,  0,  0,  0,  0 },
+      {  0,  0,  1,  1,  2,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0,  1, -4,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  1, -3,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0,  7,-13,  0,  0,  0,  0,  0 },
+
+   /* 511-520 */
+      {  0,  0,  0,  0,  1,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  7,-11,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  6, -4,  0,  0,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0,  1 },
+
+   /* 521-530 */
+      {  0,  0,  0,  0,  0,  0,  1, -4,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  9,-17,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  7, -7,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  1 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0,  0 },
+      {  2,  0,  0, -2,  0,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
+
+   /* 531-540 */
+      {  2,  0,  0, -2,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
+      {  1,  0,  0,  0,  0,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
+      {  1,  0,  0,  0,  0,  0, -1,  1,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0, -2,  0,  0, 17,-16,  0, -2,  0,  0,  0,  0 },
+      {  1,  0,  0, -1,  0,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -4,  0,  0,  0,  0 },
+
+   /* 541-550 */
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, -2, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  1,  0,  0,  0,  0,  2 },
+      {  2,  0,  0, -2,  0,  0,  0, -4,  4,  0,  0,  0,  0,  0 },
+      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  2,  2,  0,  0,  0 },
+      {  1,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0,  0,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
+      {  1,  0,  0,  0,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0, -2,  0,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0, -2,  0,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
+      {  1,  0,  0, -2,  0,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
+
+   /* 551-560 */
+      {  1,  0,  0, -2,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  0,  0, -4,  4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1,  1,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0,  3, -6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0,  1,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0, -4,  5,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  2,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
+
+   /* 561-570 */
+      {  0,  0,  0,  0,  0,  0,  8, -9,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0 },
+      {  2,  0, -2, -2, -2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
+      {  1,  0,  0,  0,  1,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0,  0, -1,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2,  0,  2,  0,  2, -3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2,  0,  2,  0,  2, -2,  0,  0,  0,  0,  0,  0 },
+
+   /* 571-580 */
+      {  0,  0,  2,  0,  2,  0, -2,  3,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2,  0,  2,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  2,  0,  0,  0,  0,  1,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
+      {  2,  0,  2, -2,  2,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
+      {  2,  0,  1, -3,  1,  0, -6,  7,  0,  0,  0,  0,  0,  0 },
+      {  2,  0,  0, -2,  0,  0,  2, -5,  0,  0,  0,  0,  0,  0 },
+      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  5, -5,  0,  0,  0 },
+      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  1,  5,  0,  0,  0 },
+      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  0,  5,  0,  0,  0 },
+
+   /* 581-590 */
+      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  0,  2,  0,  0,  0 },
+      {  2,  0,  0, -2,  0,  0, -4,  4,  0,  0,  0,  0,  0,  0 },
+      {  2,  0, -2,  0, -2,  0,  0,  5, -9,  0,  0,  0,  0,  0 },
+      {  2,  0, -1, -1,  0,  0,  0, -1,  0,  3,  0,  0,  0,  0 },
+      {  1,  0,  2,  0,  2,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  2,  0,  2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
+      {  1,  0,  2,  0,  2,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
+      {  1,  0,  2,  0,  2,  0, -1,  1,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  2, -2,  2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
+      {  1,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
+
+   /* 591-600 */
+      {  1,  0,  0,  0,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
+      {  1,  0,  0, -2,  0,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
+      {  1,  0, -2, -2, -2,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
+      {  1,  0, -1,  1,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+      {  1,  0, -1, -1,  0,  0,  0,  8,-15,  0,  0,  0,  0,  0 },
+      {  0,  0,  2,  2,  2,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0, -2,  0,  1,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  1,  0,  0,-10, 15,  0,  0,  0,  0,  0 },
+      {  0,  0,  2, -2,  0, -1,  0,  2,  0,  0,  0,  0,  0,  0 },
+
+   /* 601-610 */
+      {  0,  0,  1, -1,  2,  0,  0, -1,  0,  0, -1,  0,  0,  0 },
+      {  0,  0,  1, -1,  2,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0, -4,  6,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  1,  0, -1,  2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0, -2,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  1, -1, -1,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  2,  0,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
+
+   /* 611-620 */
+      {  0,  0,  0,  2,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  2,  0, -3,  5,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  1,  0, -1,  2,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  9,-13,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  8,-14,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  8,-11,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  6, -8,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  6, -7,  0,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0, -2 },
+
+   /* 621-630 */
+      {  0,  0,  0,  0,  0,  0,  5, -6, -4,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  5, -4,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  4, -8,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  3, -3,  0,  2,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  7,-12,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0, -2 },
+
+   /* 631-640 */
+      {  0,  0,  0,  0,  0,  0,  0,  6, -8,  1,  5,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  6, -4,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  5,  0, -4,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0, -1 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -8,  3,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  5,-16,  4,  5,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  5,-13,  0,  0,  0,  0, -2 },
+
+   /* 641-650 */
+      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -5,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -9,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  3, -7,  0,  0,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -3,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  2, -8,  1,  5,  0,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1, -5,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  2,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -3,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  5,  0,  0,  0 },
+
+   /* 651-NFPL */
+      {  0,  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -6,  3,  0, -2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2 },
+      {  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0 }
+   };
+
+/* Number of frequencies:  planetary */
+   static const int NFPL = (int) (sizeof mfapl / sizeof (int) / 14);
+
+/* Pointers into amplitudes array, one pointer per frequency */
+   static const int nc[] = {
+
+   /* 1-100 */
+       1,    21,    37,    51,    65,    79,    91,   103,   115,   127,
+     139,   151,   163,   172,   184,   196,   207,   219,   231,   240,
+     252,   261,   273,   285,   297,   309,   318,   327,   339,   351,
+     363,   372,   384,   396,   405,   415,   423,   435,   444,   452,
+     460,   467,   474,   482,   490,   498,   506,   513,   521,   528,
+     536,   543,   551,   559,   566,   574,   582,   590,   597,   605,
+     613,   620,   628,   636,   644,   651,   658,   666,   674,   680,
+     687,   695,   702,   710,   717,   725,   732,   739,   746,   753,
+     760,   767,   774,   782,   790,   798,   805,   812,   819,   826,
+     833,   840,   846,   853,   860,   867,   874,   881,   888,   895,
+
+   /* 101-200 */
+     901,   908,   914,   921,   928,   934,   941,   948,   955,   962,
+     969,   976,   982,   989,   996,  1003,  1010,  1017,  1024,  1031,
+    1037,  1043,  1050,  1057,  1064,  1071,  1078,  1084,  1091,  1098,
+    1104,  1112,  1118,  1124,  1131,  1138,  1145,  1151,  1157,  1164,
+    1171,  1178,  1185,  1192,  1199,  1205,  1212,  1218,  1226,  1232,
+    1239,  1245,  1252,  1259,  1266,  1272,  1278,  1284,  1292,  1298,
+    1304,  1310,  1316,  1323,  1329,  1335,  1341,  1347,  1353,  1359,
+    1365,  1371,  1377,  1383,  1389,  1396,  1402,  1408,  1414,  1420,
+    1426,  1434,  1440,  1446,  1452,  1459,  1465,  1471,  1477,  1482,
+    1488,  1493,  1499,  1504,  1509,  1514,  1520,  1527,  1532,  1538,
+
+   /* 201-300 */
+    1543,  1548,  1553,  1558,  1564,  1569,  1574,  1579,  1584,  1589,
+    1594,  1596,  1598,  1600,  1602,  1605,  1608,  1610,  1612,  1617,
+    1619,  1623,  1625,  1627,  1629,  1632,  1634,  1640,  1642,  1644,
+    1646,  1648,  1650,  1652,  1654,  1658,  1660,  1662,  1664,  1668,
+    1670,  1672,  1673,  1675,  1679,  1681,  1683,  1684,  1686,  1688,
+    1690,  1693,  1695,  1697,  1701,  1703,  1705,  1707,  1709,  1711,
+    1712,  1715,  1717,  1721,  1723,  1725,  1727,  1729,  1731,  1733,
+    1735,  1737,  1739,  1741,  1743,  1745,  1747,  1749,  1751,  1753,
+    1755,  1757,  1759,  1761,  1762,  1764,  1766,  1768,  1769,  1771,
+    1773,  1775,  1777,  1779,  1781,  1783,  1785,  1787,  1788,  1790,
+
+   /* 301-400 */
+    1792,  1794,  1796,  1798,  1800,  1802,  1804,  1806,  1807,  1809,
+    1811,  1815,  1817,  1819,  1821,  1823,  1825,  1827,  1829,  1831,
+    1833,  1835,  1837,  1839,  1840,  1842,  1844,  1848,  1850,  1852,
+    1854,  1856,  1858,  1859,  1860,  1862,  1864,  1866,  1868,  1869,
+    1871,  1873,  1875,  1877,  1879,  1881,  1883,  1885,  1887,  1889,
+    1891,  1892,  1896,  1898,  1900,  1901,  1903,  1905,  1907,  1909,
+    1910,  1911,  1913,  1915,  1919,  1921,  1923,  1927,  1929,  1931,
+    1933,  1935,  1937,  1939,  1943,  1945,  1947,  1948,  1949,  1951,
+    1953,  1955,  1957,  1958,  1960,  1962,  1964,  1966,  1968,  1970,
+    1971,  1973,  1974,  1975,  1977,  1979,  1980,  1981,  1982,  1984,
+
+   /* 401-500 */
+    1986,  1988,  1990,  1992,  1994,  1995,  1997,  1999,  2001,  2003,
+    2005,  2007,  2008,  2009,  2011,  2013,  2015,  2017,  2019,  2021,
+    2023,  2024,  2025,  2027,  2029,  2031,  2033,  2035,  2037,  2041,
+    2043,  2045,  2046,  2047,  2049,  2051,  2053,  2055,  2056,  2057,
+    2059,  2061,  2063,  2065,  2067,  2069,  2070,  2071,  2072,  2074,
+    2076,  2078,  2080,  2082,  2084,  2086,  2088,  2090,  2092,  2094,
+    2095,  2096,  2097,  2099,  2101,  2105,  2106,  2107,  2108,  2109,
+    2110,  2111,  2113,  2115,  2119,  2121,  2123,  2125,  2127,  2129,
+    2131,  2133,  2135,  2136,  2137,  2139,  2141,  2143,  2145,  2147,
+    2149,  2151,  2153,  2155,  2157,  2159,  2161,  2163,  2165,  2167,
+
+   /* 501-600 */
+    2169,  2171,  2173,  2175,  2177,  2179,  2181,  2183,  2185,  2186,
+    2187,  2188,  2192,  2193,  2195,  2197,  2199,  2201,  2203,  2205,
+    2207,  2209,  2211,  2213,  2217,  2219,  2221,  2223,  2225,  2227,
+    2229,  2231,  2233,  2234,  2235,  2236,  2237,  2238,  2239,  2240,
+    2241,  2244,  2246,  2248,  2250,  2252,  2254,  2256,  2258,  2260,
+    2262,  2264,  2266,  2268,  2270,  2272,  2274,  2276,  2278,  2280,
+    2282,  2284,  2286,  2288,  2290,  2292,  2294,  2296,  2298,  2300,
+    2302,  2303,  2304,  2305,  2306,  2307,  2309,  2311,  2313,  2315,
+    2317,  2319,  2321,  2323,  2325,  2327,  2329,  2331,  2333,  2335,
+    2337,  2341,  2343,  2345,  2347,  2349,  2351,  2352,  2355,  2356,
+
+   /* 601-700 */
+    2357,  2358,  2359,  2361,  2363,  2364,  2365,  2366,  2367,  2368,
+    2369,  2370,  2371,  2372,  2373,  2374,  2376,  2378,  2380,  2382,
+    2384,  2385,  2386,  2387,  2388,  2389,  2390,  2391,  2392,  2393,
+    2394,  2395,  2396,  2397,  2398,  2399,  2400,  2401,  2402,  2403,
+    2404,  2405,  2406,  2407,  2408,  2409,  2410,  2411,  2412,  2413,
+    2414,  2415,  2417,  2418,  2430,  2438,  2445,  2453,  2460,  2468,
+    2474,  2480,  2488,  2496,  2504,  2512,  2520,  2527,  2535,  2543,
+    2550,  2558,  2566,  2574,  2580,  2588,  2596,  2604,  2612,  2619,
+    2627,  2634,  2642,  2648,  2656,  2664,  2671,  2679,  2685,  2693,
+    2701,  2709,  2717,  2725,  2733,  2739,  2747,  2753,  2761,  2769,
+
+   /* 701-800 */
+    2777,  2785,  2793,  2801,  2809,  2817,  2825,  2833,  2841,  2848,
+    2856,  2864,  2872,  2878,  2884,  2892,  2898,  2906,  2914,  2922,
+    2930,  2938,  2944,  2952,  2958,  2966,  2974,  2982,  2988,  2996,
+    3001,  3009,  3017,  3025,  3032,  3039,  3045,  3052,  3059,  3067,
+    3069,  3076,  3083,  3090,  3098,  3105,  3109,  3111,  3113,  3120,
+    3124,  3128,  3132,  3136,  3140,  3144,  3146,  3150,  3158,  3161,
+    3165,  3166,  3168,  3172,  3176,  3180,  3182,  3185,  3189,  3193,
+    3194,  3197,  3200,  3204,  3208,  3212,  3216,  3219,  3221,  3222,
+    3226,  3230,  3234,  3238,  3242,  3243,  3247,  3251,  3254,  3258,
+    3262,  3266,  3270,  3274,  3275,  3279,  3283,  3287,  3289,  3293,
+
+   /* 801-900 */
+    3296,  3300,  3303,  3307,  3311,  3315,  3319,  3321,  3324,  3327,
+    3330,  3334,  3338,  3340,  3342,  3346,  3350,  3354,  3358,  3361,
+    3365,  3369,  3373,  3377,  3381,  3385,  3389,  3393,  3394,  3398,
+    3402,  3406,  3410,  3413,  3417,  3421,  3425,  3429,  3433,  3435,
+    3439,  3443,  3446,  3450,  3453,  3457,  3458,  3461,  3464,  3468,
+    3472,  3476,  3478,  3481,  3485,  3489,  3493,  3497,  3501,  3505,
+    3507,  3511,  3514,  3517,  3521,  3524,  3525,  3527,  3529,  3533,
+    3536,  3540,  3541,  3545,  3548,  3551,  3555,  3559,  3563,  3567,
+    3569,  3570,  3574,  3576,  3578,  3582,  3586,  3590,  3593,  3596,
+    3600,  3604,  3608,  3612,  3616,  3620,  3623,  3626,  3630,  3632,
+
+   /* 901-1000 */
+    3636,  3640,  3643,  3646,  3648,  3652,  3656,  3660,  3664,  3667,
+    3669,  3671,  3675,  3679,  3683,  3687,  3689,  3693,  3694,  3695,
+    3699,  3703,  3705,  3707,  3710,  3713,  3717,  3721,  3725,  3729,
+    3733,  3736,  3740,  3744,  3748,  3752,  3754,  3757,  3759,  3763,
+    3767,  3770,  3773,  3777,  3779,  3783,  3786,  3790,  3794,  3798,
+    3801,  3805,  3809,  3813,  3817,  3821,  3825,  3827,  3831,  3835,
+    3836,  3837,  3840,  3844,  3848,  3852,  3856,  3859,  3863,  3867,
+    3869,  3871,  3875,  3879,  3883,  3887,  3890,  3894,  3898,  3901,
+    3905,  3909,  3913,  3917,  3921,  3922,  3923,  3924,  3926,  3930,
+    3932,  3936,  3938,  3940,  3944,  3948,  3952,  3956,  3959,  3963,
+
+   /* 1001-1100 */
+    3965,  3969,  3973,  3977,  3979,  3981,  3982,  3986,  3989,  3993,
+    3997,  4001,  4004,  4006,  4009,  4012,  4016,  4020,  4024,  4026,
+    4028,  4032,  4036,  4040,  4044,  4046,  4050,  4054,  4058,  4060,
+    4062,  4063,  4064,  4068,  4071,  4075,  4077,  4081,  4083,  4087,
+    4089,  4091,  4095,  4099,  4101,  4103,  4105,  4107,  4111,  4115,
+    4119,  4123,  4127,  4129,  4131,  4135,  4139,  4141,  4143,  4145,
+    4149,  4153,  4157,  4161,  4165,  4169,  4173,  4177,  4180,  4183,
+    4187,  4191,  4195,  4198,  4201,  4205,  4209,  4212,  4213,  4216,
+    4217,  4221,  4223,  4226,  4230,  4234,  4236,  4240,  4244,  4248,
+    4252,  4256,  4258,  4262,  4264,  4266,  4268,  4270,  4272,  4276,
+
+   /* 1101-1200 */
+    4279,  4283,  4285,  4287,  4289,  4293,  4295,  4299,  4300,  4301,
+    4305,  4309,  4313,  4317,  4319,  4323,  4325,  4329,  4331,  4333,
+    4335,  4337,  4341,  4345,  4349,  4351,  4353,  4357,  4361,  4365,
+    4367,  4369,  4373,  4377,  4381,  4383,  4387,  4389,  4391,  4395,
+    4399,  4403,  4407,  4411,  4413,  4414,  4415,  4418,  4419,  4421,
+    4423,  4427,  4429,  4431,  4433,  4435,  4437,  4439,  4443,  4446,
+    4450,  4452,  4456,  4458,  4460,  4462,  4466,  4469,  4473,  4477,
+    4481,  4483,  4487,  4489,  4491,  4493,  4497,  4499,  4501,  4504,
+    4506,  4510,  4513,  4514,  4515,  4518,  4521,  4522,  4525,  4526,
+    4527,  4530,  4533,  4534,  4537,  4541,  4542,  4543,  4544,  4545,
+
+   /* 1201-1300 */
+    4546,  4547,  4550,  4553,  4554,  4555,  4558,  4561,  4564,  4567,
+    4568,  4571,  4574,  4575,  4578,  4581,  4582,  4585,  4586,  4588,
+    4590,  4592,  4596,  4598,  4602,  4604,  4608,  4612,  4613,  4616,
+    4619,  4622,  4623,  4624,  4625,  4626,  4629,  4632,  4633,  4636,
+    4639,  4640,  4641,  4642,  4643,  4644,  4645,  4648,  4649,  4650,
+    4651,  4652,  4653,  4656,  4657,  4660,  4661,  4664,  4667,  4670,
+    4671,  4674,  4675,  4676,  4677,  4678,  4681,  4682,  4683,  4684,
+    4687,  4688,  4689,  4692,  4693,  4696,  4697,  4700,  4701,  4702,
+    4703,  4704,  4707,  4708,  4711,  4712,  4715,  4716,  4717,  4718,
+    4719,  4720,  4721,  4722,  4723,  4726,  4729,  4730,  4733,  4736,
+
+   /* 1301-(NFLS+NFPL) */
+    4737,  4740,  4741,  4742,  4745,  4746,  4749,  4752,  4753
+   };
+
+/* Amplitude coefficients (microarcsec);  indexed using the nc array. */
+   static const double a[] = {
+
+   /* 1-105 */
+         -6844318.44,     9205236.26,1328.67,1538.18,      205833.11,
+           153041.79,       -3309.73, 853.32,2037.98,       -2301.27,
+       81.46, 120.56, -20.39, -15.22,   1.73,  -1.61,  -0.10,   0.11,
+       -0.02,  -0.02,     -523908.04,      573033.42,-544.75,-458.66,
+            12814.01,       11714.49, 198.97,-290.91, 155.74,-143.27,
+       -2.75,  -1.03,  -1.27,  -1.16,   0.00,  -0.01,      -90552.22,
+            97846.69, 111.23, 137.41,2187.91,2024.68,  41.44, -51.26,
+       26.92, -24.46,  -0.46,  -0.28,  -0.22,  -0.20,       82168.76,
+           -89618.24, -27.64, -29.05,       -2004.36,       -1837.32,
+      -36.07,  48.00, -24.43,  22.41,   0.47,   0.24,   0.20,   0.18,
+            58707.02,7387.02, 470.05,-192.40, 164.33,       -1312.21,
+     -179.73, -28.93, -17.36,  -1.83,  -0.50,   3.57,   0.00,   0.13,
+           -20557.78,       22438.42, -20.84, -17.40, 501.82, 459.68,
+       59.20, -67.30,   6.08,  -5.61,  -1.36,  -1.19,       28288.28,
+     -674.99, -34.69,  35.80, -15.07,-632.54, -11.19,   0.78,  -8.41,
+        0.17,   0.01,   0.07,      -15406.85,       20069.50,  15.12,
+
+   /* 106-219 */
+       31.80, 448.76, 344.50,  -5.77,   1.41,   4.59,  -5.02,   0.17,
+        0.24,      -11991.74,       12902.66,  32.46,  36.70, 288.49,
+      268.14,   5.70,  -7.06,   3.57,  -3.23,  -0.06,  -0.04,
+            -8584.95,       -9592.72,   4.42, -13.20,-214.50, 192.06,
+       23.87,  29.83,   2.54,   2.40,   0.60,  -0.48,5095.50,
+            -6918.22,   7.19,   3.92,-154.91,-113.94,   2.86,  -1.04,
+       -1.52,   1.73,  -0.07,  -0.10,       -4910.93,       -5331.13,
+        0.76,   0.40,-119.21, 109.81,   2.16,   3.20,   1.46,   1.33,
+        0.04,  -0.02,       -6245.02,-123.48,  -6.68,  -8.20,  -2.76,
+      139.64,   2.71,   0.15,   1.86,2511.85,       -3323.89,   1.07,
+       -0.90, -74.33, -56.17,   1.16,  -0.01,  -0.75,   0.83,  -0.02,
+       -0.04,2307.58,3143.98,  -7.52,   7.50,  70.31, -51.60,   1.46,
+        0.16,  -0.69,  -0.79,   0.02,  -0.05,2372.58,2554.51,   5.93,
+       -6.60,  57.12, -53.05,  -0.96,  -1.24,  -0.71,  -0.64,  -0.01,
+            -2053.16,2636.13,   5.13,   7.80,  58.94,  45.91,  -0.42,
+       -0.12,   0.61,  -0.66,   0.02,   0.03,       -1825.49,
+
+   /* 220-339 */
+            -2423.59,   1.23,  -2.00, -54.19,  40.82,  -1.07,  -1.02,
+        0.54,   0.61,  -0.04,   0.04,2521.07,-122.28,  -5.97,   2.90,
+       -2.73, -56.37,  -0.82,   0.13,  -0.75,       -1534.09,1645.01,
+        6.29,   6.80,  36.78,  34.30,   0.92,  -1.25,   0.46,  -0.41,
+       -0.02,  -0.01,1898.27,  47.70,  -0.72,   2.50,   1.07, -42.45,
+       -0.94,   0.02,  -0.56,       -1292.02,       -1387.00,   0.00,
+        0.00, -31.01,  28.89,   0.68,   0.00,   0.38,   0.35,  -0.01,
+       -0.01,       -1234.96,1323.81,   5.21,   5.90,  29.60,  27.61,
+        0.74,  -1.22,   0.37,  -0.33,  -0.02,  -0.01,1137.48,
+            -1233.89,  -0.04,  -0.30, -27.59, -25.43,  -0.61,   1.00,
+       -0.34,   0.31,   0.01,   0.01,-813.13,       -1075.60,   0.40,
+        0.30, -24.05,  18.18,  -0.40,  -0.01,   0.24,   0.27,  -0.01,
+        0.01,1163.22, -60.90,  -2.94,   1.30,  -1.36, -26.01,  -0.58,
+        0.07,  -0.35,1029.70, -55.55,  -2.63,   1.10,  -1.25, -23.02,
+       -0.52,   0.06,  -0.31,-556.26, 852.85,   3.16,  -4.48,  19.06,
+       12.44,  -0.81,  -0.27,   0.17,  -0.21,   0.00,   0.02,-603.52,
+
+   /* 340-467 */
+     -800.34,   0.44,   0.10, -17.90,  13.49,  -0.08,  -0.01,   0.18,
+        0.20,  -0.01,   0.01,-628.24, 684.99,  -0.64,  -0.50,  15.32,
+       14.05,   3.18,  -4.19,   0.19,  -0.17,  -0.09,  -0.07,-866.48,
+      -16.26,   0.52,  -1.30,  -0.36,  19.37,   0.43,  -0.01,   0.26,
+     -512.37, 695.54,  -1.47,  -1.40,  15.55,  11.46,  -0.16,   0.03,
+        0.15,  -0.17,   0.01,   0.01, 506.65, 643.75,   2.54,  -2.62,
+       14.40, -11.33,  -0.77,  -0.06,  -0.15,  -0.16,   0.00,   0.01,
+      664.57,  16.81,  -0.40,   1.00,   0.38, -14.86,  -3.71,  -0.09,
+       -0.20, 405.91, 522.11,   0.99,  -1.50,  11.67,  -9.08,  -0.25,
+       -0.02,  -0.12,  -0.13,-305.78, 326.60,   1.75,   1.90,   7.30,
+        6.84,   0.20,  -0.04, 300.99,-325.03,  -0.44,  -0.50,  -7.27,
+       -6.73,  -1.01,   0.01,   0.00,   0.08,   0.00,   0.02, 438.51,
+       10.47,  -0.56,  -0.20,   0.24,  -9.81,  -0.24,   0.01,  -0.13,
+     -264.02, 335.24,   0.99,   1.40,   7.49,   5.90,  -0.27,  -0.02,
+      284.09, 307.03,   0.32,  -0.40,   6.87,  -6.35,  -0.99,  -0.01,
+     -250.54, 327.11,   0.08,   0.40,   7.31,   5.60,  -0.30, 230.72,
+
+   /* 468-595 */
+     -304.46,   0.08,  -0.10,  -6.81,  -5.16,   0.27, 229.78, 304.17,
+       -0.60,   0.50,   6.80,  -5.14,   0.33,   0.01, 256.30,-276.81,
+       -0.28,  -0.40,  -6.19,  -5.73,  -0.14,   0.01,-212.82, 269.45,
+        0.84,   1.20,   6.02,   4.76,   0.14,  -0.02, 196.64, 272.05,
+       -0.84,   0.90,   6.08,  -4.40,   0.35,   0.02, 188.95, 272.22,
+       -0.12,   0.30,   6.09,  -4.22,   0.34,-292.37,  -5.10,  -0.32,
+       -0.40,  -0.11,   6.54,   0.14,   0.01, 161.79,-220.67,   0.24,
+        0.10,  -4.93,  -3.62,  -0.08, 261.54, -19.94,  -0.95,   0.20,
+       -0.45,  -5.85,  -0.13,   0.02, 142.16,-190.79,   0.20,   0.10,
+       -4.27,  -3.18,  -0.07, 187.95,  -4.11,  -0.24,   0.30,  -0.09,
+       -4.20,  -0.09,   0.01,   0.00,   0.00, -79.08, 167.90,   0.04,
+        0.00,   3.75,   1.77, 121.98, 131.04,  -0.08,   0.10,   2.93,
+       -2.73,  -0.06,-172.95,  -8.11,  -0.40,  -0.20,  -0.18,   3.87,
+        0.09,   0.01,-160.15, -55.30, -14.04,  13.90,  -1.23,   3.58,
+        0.40,   0.31,-115.40, 123.20,   0.60,   0.70,   2.75,   2.58,
+        0.08,  -0.01,-168.26,  -2.00,   0.20,  -0.20,  -0.04,   3.76,
+
+   /* 596-723 */
+        0.08,-114.49, 123.20,   0.32,   0.40,   2.75,   2.56,   0.07,
+       -0.01, 112.14, 120.70,   0.28,  -0.30,   2.70,  -2.51,  -0.07,
+       -0.01, 161.34,   4.03,   0.20,   0.20,   0.09,  -3.61,  -0.08,
+       91.31, 126.64,  -0.40,   0.40,   2.83,  -2.04,  -0.04,   0.01,
+      105.29, 112.90,   0.44,  -0.50,   2.52,  -2.35,  -0.07,  -0.01,
+       98.69,-106.20,  -0.28,  -0.30,  -2.37,  -2.21,  -0.06,   0.01,
+       86.74,-112.94,  -0.08,  -0.20,  -2.53,  -1.94,  -0.05,-134.81,
+        3.51,   0.20,  -0.20,   0.08,   3.01,   0.07,  79.03, 107.31,
+       -0.24,   0.20,   2.40,  -1.77,  -0.04,   0.01, 132.81, -10.77,
+       -0.52,   0.10,  -0.24,  -2.97,  -0.07,   0.01,-130.31,  -0.90,
+        0.04,   0.00,   0.00,   2.91, -78.56,  85.32,   0.00,   0.00,
+        1.91,   1.76,   0.04,   0.00,   0.00, -41.53,  89.10,   0.02,
+        0.00,   1.99,   0.93,  66.03, -71.00,  -0.20,  -0.20,  -1.59,
+       -1.48,  -0.04,  60.50,  64.70,   0.36,  -0.40,   1.45,  -1.35,
+       -0.04,  -0.01, -52.27, -70.01,   0.00,   0.00,  -1.57,   1.17,
+        0.03, -52.95,  66.29,   0.32,   0.40,   1.48,   1.18,   0.04,
+
+   /* 724-851 */
+       -0.01,  51.02,  67.25,   0.00,   0.00,   1.50,  -1.14,  -0.03,
+      -55.66, -60.92,   0.16,  -0.20,  -1.36,   1.24,   0.03, -54.81,
+      -59.20,  -0.08,   0.20,  -1.32,   1.23,   0.03,  51.32, -55.60,
+        0.00,   0.00,  -1.24,  -1.15,  -0.03,  48.29,  51.80,   0.20,
+       -0.20,   1.16,  -1.08,  -0.03, -45.59, -49.00,  -0.12,   0.10,
+       -1.10,   1.02,   0.03,  40.54, -52.69,  -0.04,  -0.10,  -1.18,
+       -0.91,  -0.02, -40.58, -49.51,  -1.00,   1.00,  -1.11,   0.91,
+        0.04,   0.02, -43.76,  46.50,   0.36,   0.40,   1.04,   0.98,
+        0.03,  -0.01,  62.65,  -5.00,  -0.24,   0.00,  -0.11,  -1.40,
+       -0.03,   0.01, -38.57,  49.59,   0.08,   0.10,   1.11,   0.86,
+        0.02, -33.22, -44.04,   0.08,  -0.10,  -0.98,   0.74,   0.02,
+       37.15, -39.90,  -0.12,  -0.10,  -0.89,  -0.83,  -0.02,  36.68,
+      -39.50,  -0.04,  -0.10,  -0.88,  -0.82,  -0.02, -53.22,  -3.91,
+       -0.20,   0.00,  -0.09,   1.19,   0.03,  32.43, -42.19,  -0.04,
+       -0.10,  -0.94,  -0.73,  -0.02, -51.00,  -2.30,  -0.12,  -0.10,
+        0.00,   1.14, -29.53, -39.11,   0.04,   0.00,  -0.87,   0.66,
+
+   /* 852-979 */
+        0.02,  28.50, -38.92,  -0.08,  -0.10,  -0.87,  -0.64,  -0.02,
+       26.54,  36.95,  -0.12,   0.10,   0.83,  -0.59,  -0.01,  26.54,
+       34.59,   0.04,  -0.10,   0.77,  -0.59,  -0.02,  28.35, -32.55,
+       -0.16,   0.20,  -0.73,  -0.63,  -0.01, -28.00,  30.40,   0.00,
+        0.00,   0.68,   0.63,   0.01, -27.61,  29.40,   0.20,   0.20,
+        0.66,   0.62,   0.02,  40.33,   0.40,  -0.04,   0.10,   0.00,
+       -0.90, -23.28,  31.61,  -0.08,  -0.10,   0.71,   0.52,   0.01,
+       37.75,   0.80,   0.04,   0.10,   0.00,  -0.84,  23.66,  25.80,
+        0.00,   0.00,   0.58,  -0.53,  -0.01,  21.01, -27.91,   0.00,
+        0.00,  -0.62,  -0.47,  -0.01, -34.81,   2.89,   0.04,   0.00,
+        0.00,   0.78, -23.49, -25.31,   0.00,   0.00,  -0.57,   0.53,
+        0.01, -23.47,  25.20,   0.16,   0.20,   0.56,   0.52,   0.02,
+       19.58,  27.50,  -0.12,   0.10,   0.62,  -0.44,  -0.01, -22.67,
+      -24.40,  -0.08,   0.10,  -0.55,   0.51,   0.01, -19.97,  25.00,
+        0.12,   0.20,   0.56,   0.45,   0.01,  21.28, -22.80,  -0.08,
+       -0.10,  -0.51,  -0.48,  -0.01, -30.47,   0.91,   0.04,   0.00,
+
+   /* 980-1107 */
+        0.00,   0.68,  18.58,  24.00,   0.04,  -0.10,   0.54,  -0.42,
+       -0.01, -18.02,  24.40,  -0.04,  -0.10,   0.55,   0.40,   0.01,
+       17.74,  22.50,   0.08,  -0.10,   0.50,  -0.40,  -0.01, -19.41,
+       20.70,   0.08,   0.10,   0.46,   0.43,   0.01, -18.64,  20.11,
+        0.00,   0.00,   0.45,   0.42,   0.01, -16.75,  21.60,   0.04,
+        0.10,   0.48,   0.37,   0.01, -18.42, -20.00,   0.00,   0.00,
+       -0.45,   0.41,   0.01, -26.77,   1.41,   0.08,   0.00,   0.00,
+        0.60, -26.17,  -0.19,   0.00,   0.00,   0.00,   0.59, -15.52,
+       20.51,   0.00,   0.00,   0.46,   0.35,   0.01, -25.42,  -1.91,
+       -0.08,   0.00,  -0.04,   0.57,   0.45, -17.42,  18.10,   0.00,
+        0.00,   0.40,   0.39,   0.01,  16.39, -17.60,  -0.08,  -0.10,
+       -0.39,  -0.37,  -0.01, -14.37,  18.91,   0.00,   0.00,   0.42,
+        0.32,   0.01,  23.39,  -2.40,  -0.12,   0.00,   0.00,  -0.52,
+       14.32, -18.50,  -0.04,  -0.10,  -0.41,  -0.32,  -0.01,  15.69,
+       17.08,   0.00,   0.00,   0.38,  -0.35,  -0.01, -22.99,   0.50,
+        0.04,   0.00,   0.00,   0.51,   0.00,   0.00,  14.47, -17.60,
+
+   /* 1108-1235 */
+       -0.01,   0.00,  -0.39,  -0.32, -13.33,  18.40,  -0.04,  -0.10,
+        0.41,   0.30,  22.47,  -0.60,  -0.04,   0.00,   0.00,  -0.50,
+      -12.78, -17.41,   0.04,   0.00,  -0.39,   0.29,   0.01, -14.10,
+      -15.31,   0.04,   0.00,  -0.34,   0.32,   0.01,  11.98,  16.21,
+       -0.04,   0.00,   0.36,  -0.27,  -0.01,  19.65,  -1.90,  -0.08,
+        0.00,   0.00,  -0.44,  19.61,  -1.50,  -0.08,   0.00,   0.00,
+       -0.44,  13.41, -14.30,  -0.04,  -0.10,  -0.32,  -0.30,  -0.01,
+      -13.29,  14.40,   0.00,   0.00,   0.32,   0.30,   0.01,  11.14,
+      -14.40,  -0.04,   0.00,  -0.32,  -0.25,  -0.01,  12.24, -13.38,
+        0.04,   0.00,  -0.30,  -0.27,  -0.01,  10.07, -13.81,   0.04,
+        0.00,  -0.31,  -0.23,  -0.01,  10.46,  13.10,   0.08,  -0.10,
+        0.29,  -0.23,  -0.01,  16.55,  -1.71,  -0.08,   0.00,   0.00,
+       -0.37,   9.75, -12.80,   0.00,   0.00,  -0.29,  -0.22,  -0.01,
+        9.11,  12.80,   0.00,   0.00,   0.29,  -0.20,   0.00,   0.00,
+       -6.44, -13.80,   0.00,   0.00,  -0.31,   0.14,  -9.19, -12.00,
+        0.00,   0.00,  -0.27,   0.21, -10.30,  10.90,   0.08,   0.10,
+
+   /* 1236-1363 */
+        0.24,   0.23,   0.01,  14.92,  -0.80,  -0.04,   0.00,   0.00,
+       -0.33,  10.02, -10.80,   0.00,   0.00,  -0.24,  -0.22,  -0.01,
+       -9.75,  10.40,   0.04,   0.00,   0.23,   0.22,   0.01,   9.67,
+      -10.40,  -0.04,   0.00,  -0.23,  -0.22,  -0.01,  -8.28, -11.20,
+        0.04,   0.00,  -0.25,   0.19,  13.32,  -1.41,  -0.08,   0.00,
+        0.00,  -0.30,   8.27,  10.50,   0.04,   0.00,   0.23,  -0.19,
+        0.00,   0.00,  13.13,   0.00,   0.00,   0.00,   0.00,  -0.29,
+      -12.93,   0.70,   0.04,   0.00,   0.00,   0.29,   7.91, -10.20,
+        0.00,   0.00,  -0.23,  -0.18,  -7.84, -10.00,  -0.04,   0.00,
+       -0.22,   0.18,   7.44,   9.60,   0.00,   0.00,   0.21,  -0.17,
+       -7.64,   9.40,   0.08,   0.10,   0.21,   0.17,   0.01, -11.38,
+        0.60,   0.04,   0.00,   0.00,   0.25,  -7.48,   8.30,   0.00,
+        0.00,   0.19,   0.17, -10.98,  -0.20,   0.00,   0.00,   0.00,
+        0.25,  10.98,   0.20,   0.00,   0.00,   0.00,  -0.25,   7.40,
+       -7.90,  -0.04,   0.00,  -0.18,  -0.17,  -6.09,   8.40,  -0.04,
+        0.00,   0.19,   0.14,  -6.94,  -7.49,   0.00,   0.00,  -0.17,
+
+   /* 1364-1491 */
+        0.16,   6.92,   7.50,   0.04,   0.00,   0.17,  -0.15,   6.20,
+        8.09,   0.00,   0.00,   0.18,  -0.14,  -6.12,   7.80,   0.04,
+        0.00,   0.17,   0.14,   5.85,  -7.50,   0.00,   0.00,  -0.17,
+       -0.13,  -6.48,   6.90,   0.08,   0.10,   0.15,   0.14,   0.01,
+        6.32,   6.90,   0.00,   0.00,   0.15,  -0.14,   5.61,  -7.20,
+        0.00,   0.00,  -0.16,  -0.13,   9.07,   0.00,   0.00,   0.00,
+        0.00,  -0.20,   5.25,   6.90,   0.00,   0.00,   0.15,  -0.12,
+       -8.47,  -0.40,   0.00,   0.00,   0.00,   0.19,   6.32,  -5.39,
+       -1.11,   1.10,  -0.12,  -0.14,   0.02,   0.02,   5.73,  -6.10,
+       -0.04,   0.00,  -0.14,  -0.13,   4.70,   6.60,  -0.04,   0.00,
+        0.15,  -0.11,  -4.90,  -6.40,   0.00,   0.00,  -0.14,   0.11,
+       -5.33,   5.60,   0.04,   0.10,   0.13,   0.12,   0.01,  -4.81,
+        6.00,   0.04,   0.00,   0.13,   0.11,   5.13,   5.50,   0.04,
+        0.00,   0.12,  -0.11,   4.50,   5.90,   0.00,   0.00,   0.13,
+       -0.10,  -4.22,   6.10,   0.00,   0.00,   0.14,  -4.53,   5.70,
+        0.00,   0.00,   0.13,   0.10,   4.18,   5.70,   0.00,   0.00,
+
+   /* 1492-1619 */
+        0.13,  -4.75,  -5.19,   0.00,   0.00,  -0.12,   0.11,  -4.06,
+        5.60,   0.00,   0.00,   0.13,  -3.98,   5.60,  -0.04,   0.00,
+        0.13,   4.02,  -5.40,   0.00,   0.00,  -0.12,   4.49,  -4.90,
+       -0.04,   0.00,  -0.11,  -0.10,  -3.62,  -5.40,  -0.16,   0.20,
+       -0.12,   0.00,   0.01,   4.38,   4.80,   0.00,   0.00,   0.11,
+       -6.40,  -0.10,   0.00,   0.00,   0.00,   0.14,  -3.98,   5.00,
+        0.04,   0.00,   0.11,  -3.82,  -5.00,   0.00,   0.00,  -0.11,
+       -3.71,   5.07,   0.00,   0.00,   0.11,   4.14,   4.40,   0.00,
+        0.00,   0.10,  -6.01,  -0.50,  -0.04,   0.00,   0.00,   0.13,
+       -4.04,   4.39,   0.00,   0.00,   0.10,   3.45,  -4.72,   0.00,
+        0.00,  -0.11,   3.31,   4.71,   0.00,   0.00,   0.11,   3.26,
+       -4.50,   0.00,   0.00,  -0.10,  -3.26,  -4.50,   0.00,   0.00,
+       -0.10,  -3.34,  -4.40,   0.00,   0.00,  -0.10,  -3.74,  -4.00,
+        3.70,   4.00,   3.34,  -4.30,   3.30,  -4.30,  -3.66,   3.90,
+        0.04,   3.66,   3.90,   0.04,  -3.62,  -3.90,  -3.61,   3.90,
+       -0.20,   5.30,   0.00,   0.00,   0.12,   3.06,   4.30,   3.30,
+
+   /* 1620-1747 */
+        4.00,   0.40,   0.20,   3.10,   4.10,  -3.06,   3.90,  -3.30,
+       -3.60,  -3.30,   3.36,   0.01,   3.14,   3.40,  -4.57,  -0.20,
+        0.00,   0.00,   0.00,   0.10,  -2.70,  -3.60,   2.94,  -3.20,
+       -2.90,   3.20,   2.47,  -3.40,   2.55,  -3.30,   2.80,  -3.08,
+        2.51,   3.30,  -4.10,   0.30,  -0.12,  -0.10,   4.10,   0.20,
+       -2.74,   3.00,   2.46,   3.23,  -3.66,   1.20,  -0.20,   0.20,
+        3.74,  -0.40,  -2.51,  -2.80,  -3.74,   2.27,  -2.90,   0.00,
+        0.00,  -2.50,   2.70,  -2.51,   2.60,  -3.50,   0.20,   3.38,
+       -2.22,  -2.50,   3.26,  -0.40,   1.95,  -2.60,   3.22,  -0.40,
+       -0.04,  -1.79,  -2.60,   1.91,   2.50,   0.74,   3.05,  -0.04,
+        0.08,   2.11,  -2.30,  -2.11,   2.20,  -1.87,  -2.40,   2.03,
+       -2.20,  -2.03,   2.20,   2.98,   0.00,   0.00,   2.98,  -1.71,
+        2.40,   2.94,  -0.10,  -0.12,   0.10,   1.67,   2.40,  -1.79,
+        2.30,  -1.79,   2.20,  -1.67,   2.20,   1.79,  -2.00,   1.87,
+       -1.90,   1.63,  -2.10,  -1.59,   2.10,   1.55,  -2.10,  -1.55,
+        2.10,  -2.59,  -0.20,  -1.75,  -1.90,  -1.75,   1.90,  -1.83,
+
+   /* 1748-1875 */
+       -1.80,   1.51,   2.00,  -1.51,  -2.00,   1.71,   1.80,   1.31,
+        2.10,  -1.43,   2.00,   1.43,   2.00,  -2.43,  -1.51,   1.90,
+       -1.47,   1.90,   2.39,   0.20,  -2.39,   1.39,   1.90,   1.39,
+       -1.80,   1.47,  -1.60,   1.47,  -1.60,   1.43,  -1.50,  -1.31,
+        1.60,   1.27,  -1.60,  -1.27,   1.60,   1.27,  -1.60,   2.03,
+        1.35,   1.50,  -1.39,  -1.40,   1.95,  -0.20,  -1.27,   1.49,
+        1.19,   1.50,   1.27,   1.40,   1.15,   1.50,   1.87,  -0.10,
+       -1.12,  -1.50,   1.87,  -1.11,  -1.50,  -1.11,  -1.50,   0.00,
+        0.00,   1.19,   1.40,   1.27,  -1.30,  -1.27,  -1.30,  -1.15,
+        1.40,  -1.23,   1.30,  -1.23,  -1.30,   1.22,  -1.29,   1.07,
+       -1.40,   1.75,  -0.20,  -1.03,  -1.40,  -1.07,   1.20,  -1.03,
+        1.15,   1.07,   1.10,   1.51,  -1.03,   1.10,   1.03,  -1.10,
+        0.00,   0.00,  -1.03,  -1.10,   0.91,  -1.20,  -0.88,  -1.20,
+       -0.88,   1.20,  -0.95,   1.10,  -0.95,  -1.10,   1.43,  -1.39,
+        0.95,  -1.00,  -0.95,   1.00,  -0.80,   1.10,   0.91,  -1.00,
+       -1.35,   0.88,   1.00,  -0.83,   1.00,  -0.91,   0.90,   0.91,
+
+   /* 1876-2003 */
+        0.90,   0.88,  -0.90,  -0.76,  -1.00,  -0.76,   1.00,   0.76,
+        1.00,  -0.72,   1.00,   0.84,  -0.90,   0.84,   0.90,   1.23,
+        0.00,   0.00,  -0.52,  -1.10,  -0.68,   1.00,   1.19,  -0.20,
+        1.19,   0.76,   0.90,   1.15,  -0.10,   1.15,  -0.10,   0.72,
+       -0.90,  -1.15,  -1.15,   0.68,   0.90,  -0.68,   0.90,  -1.11,
+        0.00,   0.00,   0.20,   0.79,   0.80,  -1.11,  -0.10,   0.00,
+        0.00,  -0.48,  -1.00,  -0.76,  -0.80,  -0.72,  -0.80,  -1.07,
+       -0.10,   0.64,   0.80,  -0.64,  -0.80,   0.64,   0.80,   0.40,
+        0.60,   0.52,  -0.50,  -0.60,  -0.80,  -0.71,   0.70,  -0.99,
+        0.99,   0.56,   0.80,  -0.56,   0.80,   0.68,  -0.70,   0.68,
+        0.70,  -0.95,  -0.64,   0.70,   0.64,   0.70,  -0.60,   0.70,
+       -0.60,  -0.70,  -0.91,  -0.10,  -0.51,   0.76,  -0.91,  -0.56,
+        0.70,   0.88,   0.88,  -0.63,  -0.60,   0.55,  -0.60,  -0.80,
+        0.80,  -0.80,  -0.52,   0.60,   0.52,   0.60,   0.52,  -0.60,
+       -0.48,   0.60,   0.48,   0.60,   0.48,   0.60,  -0.76,   0.44,
+       -0.60,   0.52,  -0.50,  -0.52,   0.50,   0.40,   0.60,  -0.40,
+
+   /* 2004-2131 */
+       -0.60,   0.40,  -0.60,   0.72,  -0.72,  -0.51,  -0.50,  -0.48,
+        0.50,   0.48,  -0.50,  -0.48,   0.50,  -0.48,   0.50,   0.48,
+       -0.50,  -0.48,  -0.50,  -0.68,  -0.68,   0.44,   0.50,  -0.64,
+       -0.10,  -0.64,  -0.10,  -0.40,   0.50,   0.40,   0.50,   0.40,
+        0.50,   0.00,   0.00,  -0.40,  -0.50,  -0.36,  -0.50,   0.36,
+       -0.50,   0.60,  -0.60,   0.40,  -0.40,   0.40,   0.40,  -0.40,
+        0.40,  -0.40,   0.40,  -0.56,  -0.56,   0.36,  -0.40,  -0.36,
+        0.40,   0.36,  -0.40,  -0.36,  -0.40,   0.36,   0.40,   0.36,
+        0.40,  -0.52,   0.52,   0.52,   0.32,   0.40,  -0.32,   0.40,
+       -0.32,   0.40,  -0.32,   0.40,   0.32,  -0.40,  -0.32,  -0.40,
+        0.32,  -0.40,   0.28,  -0.40,  -0.28,   0.40,   0.28,  -0.40,
+        0.28,   0.40,   0.48,  -0.48,   0.48,   0.36,  -0.30,  -0.36,
+       -0.30,   0.00,   0.00,   0.20,   0.40,  -0.44,   0.44,  -0.44,
+       -0.44,  -0.44,  -0.44,   0.32,  -0.30,   0.32,   0.30,   0.24,
+        0.30,  -0.12,  -0.10,  -0.28,   0.30,   0.28,   0.30,   0.28,
+        0.30,   0.28,  -0.30,   0.28,  -0.30,   0.28,  -0.30,   0.28,
+
+   /* 2132-2259 */
+        0.30,  -0.28,   0.30,   0.40,   0.40,  -0.24,   0.30,   0.24,
+       -0.30,   0.24,  -0.30,  -0.24,  -0.30,   0.24,   0.30,   0.24,
+       -0.30,  -0.24,   0.30,   0.24,  -0.30,  -0.24,  -0.30,   0.24,
+       -0.30,   0.24,   0.30,  -0.24,   0.30,  -0.24,   0.30,   0.20,
+       -0.30,   0.20,  -0.30,   0.20,  -0.30,   0.20,   0.30,   0.20,
+       -0.30,   0.20,  -0.30,   0.20,   0.30,   0.20,   0.30,  -0.20,
+       -0.30,   0.20,  -0.30,   0.20,  -0.30,  -0.36,  -0.36,  -0.36,
+       -0.04,   0.30,   0.12,  -0.10,  -0.32,  -0.24,   0.20,   0.24,
+        0.20,   0.20,  -0.20,  -0.20,  -0.20,  -0.20,  -0.20,   0.20,
+        0.20,   0.20,  -0.20,   0.20,   0.20,   0.20,   0.20,  -0.20,
+       -0.20,   0.00,   0.00,  -0.20,  -0.20,  -0.20,   0.20,  -0.20,
+        0.20,   0.20,  -0.20,  -0.20,  -0.20,   0.20,   0.20,   0.20,
+        0.20,   0.20,  -0.20,   0.20,  -0.20,   0.28,   0.28,   0.28,
+        0.28,   0.28,   0.28,  -0.28,   0.28,   0.12,   0.00,   0.24,
+        0.16,  -0.20,   0.16,  -0.20,   0.16,  -0.20,   0.16,   0.20,
+       -0.16,   0.20,   0.16,   0.20,  -0.16,   0.20,  -0.16,   0.20,
+
+   /* 2260-2387 */
+       -0.16,   0.20,   0.16,  -0.20,   0.16,   0.20,   0.16,  -0.20,
+       -0.16,   0.20,  -0.16,  -0.20,  -0.16,   0.20,   0.16,   0.20,
+        0.16,  -0.20,   0.16,  -0.20,   0.16,   0.20,   0.16,   0.20,
+        0.16,   0.20,  -0.16,  -0.20,   0.16,   0.20,  -0.16,   0.20,
+        0.16,   0.20,  -0.16,  -0.20,   0.16,  -0.20,   0.16,  -0.20,
+       -0.16,  -0.20,   0.24,  -0.24,  -0.24,   0.24,   0.24,   0.12,
+        0.20,   0.12,   0.20,  -0.12,  -0.20,   0.12,  -0.20,   0.12,
+       -0.20,  -0.12,   0.20,  -0.12,   0.20,  -0.12,  -0.20,   0.12,
+        0.20,   0.12,   0.20,   0.12,  -0.20,  -0.12,   0.20,   0.12,
+       -0.20,  -0.12,   0.20,   0.12,   0.20,   0.00,   0.00,  -0.12,
+        0.20,  -0.12,   0.20,   0.12,  -0.20,  -0.12,   0.20,   0.12,
+        0.20,   0.00,  -0.21,  -0.20,   0.00,   0.00,   0.20,  -0.20,
+       -0.20,  -0.20,   0.20,  -0.16,  -0.10,   0.00,   0.17,   0.16,
+        0.16,   0.16,   0.16,  -0.16,   0.16,   0.16,  -0.16,   0.16,
+       -0.16,   0.16,   0.12,   0.10,   0.12,  -0.10,  -0.12,   0.10,
+       -0.12,   0.10,   0.12,  -0.10,  -0.12,   0.12,  -0.12,   0.12,
+
+   /* 2388-2515 */
+       -0.12,   0.12,  -0.12,  -0.12,  -0.12,  -0.12,  -0.12,  -0.12,
+       -0.12,   0.12,   0.12,   0.12,   0.12,  -0.12,  -0.12,   0.12,
+        0.12,   0.12,  -0.12,   0.12,  -0.12,  -0.12,  -0.12,   0.12,
+       -0.12,  -0.12,   0.12,   0.00,   0.11,   0.11,-122.67, 164.70,
+      203.78, 273.50,   3.58,   2.74,   6.18,  -4.56,   0.00,  -0.04,
+        0.00,  -0.07,  57.44, -77.10,  95.82, 128.60,  -1.77,  -1.28,
+        2.85,  -2.14,  82.14,  89.50,   0.00,   0.00,   2.00,  -1.84,
+       -0.04,  47.73, -64.10,  23.79,  31.90,  -1.45,  -1.07,   0.69,
+       -0.53, -46.38,  50.50,   0.00,   0.00,   1.13,   1.04,   0.02,
+      -18.38,   0.00,  63.80,   0.00,   0.00,   0.41,   0.00,  -1.43,
+       59.07,   0.00,   0.00,   0.00,   0.00,  -1.32,  57.28,   0.00,
+        0.00,   0.00,   0.00,  -1.28, -48.65,   0.00,  -1.15,   0.00,
+        0.00,   1.09,   0.00,   0.03, -18.30,  24.60, -17.30, -23.20,
+        0.56,   0.41,  -0.51,   0.39, -16.91,  26.90,   8.43,  13.30,
+        0.60,   0.38,   0.31,  -0.19,   1.23,  -1.70, -19.13, -25.70,
+       -0.03,  -0.03,  -0.58,   0.43,  -0.72,   0.90, -17.34, -23.30,
+
+   /* 2516-2643 */
+        0.03,   0.02,  -0.52,   0.39, -19.49, -21.30,   0.00,   0.00,
+       -0.48,   0.44,   0.01,  20.57, -20.10,   0.64,   0.70,  -0.45,
+       -0.46,   0.00,  -0.01,   4.89,   5.90, -16.55,  19.90,   0.14,
+       -0.11,   0.44,   0.37,  18.22,  19.80,   0.00,   0.00,   0.44,
+       -0.41,  -0.01,   4.89,  -5.30, -16.51, -18.00,  -0.11,  -0.11,
+       -0.41,   0.37, -17.86,   0.00,  17.10,   0.00,   0.00,   0.40,
+        0.00,  -0.38,   0.32,   0.00,  24.42,   0.00,   0.00,  -0.01,
+        0.00,  -0.55, -23.79,   0.00,   0.00,   0.00,   0.00,   0.53,
+       14.72, -16.00,  -0.32,   0.00,  -0.36,  -0.33,  -0.01,   0.01,
+        3.34,  -4.50,  11.86,  15.90,  -0.11,  -0.07,   0.35,  -0.27,
+       -3.26,   4.40,  11.62,  15.60,   0.09,   0.07,   0.35,  -0.26,
+      -19.53,   0.00,   5.09,   0.00,   0.00,   0.44,   0.00,  -0.11,
+      -13.48,  14.70,   0.00,   0.00,   0.33,   0.30,   0.01,  10.86,
+      -14.60,   3.18,   4.30,  -0.33,  -0.24,   0.09,  -0.07, -11.30,
+      -15.10,   0.00,   0.00,  -0.34,   0.25,   0.01,   2.03,  -2.70,
+       10.82,  14.50,  -0.07,  -0.05,   0.32,  -0.24,  17.46,   0.00,
+
+   /* 2644-2771 */
+        0.00,   0.00,   0.00,  -0.39,  16.43,   0.00,   0.52,   0.00,
+        0.00,  -0.37,   0.00,  -0.01,   9.35,   0.00,  13.29,   0.00,
+        0.00,  -0.21,   0.00,  -0.30, -10.42,  11.40,   0.00,   0.00,
+        0.25,   0.23,   0.01,   0.44,   0.50, -10.38,  11.30,   0.02,
+       -0.01,   0.25,   0.23, -14.64,   0.00,   0.00,   0.00,   0.00,
+        0.33,   0.56,   0.80,  -8.67,  11.70,   0.02,  -0.01,   0.26,
+        0.19,  13.88,   0.00,  -2.47,   0.00,   0.00,  -0.31,   0.00,
+        0.06,  -1.99,   2.70,   7.72,  10.30,   0.06,   0.04,   0.23,
+       -0.17,  -0.20,   0.00,  13.05,   0.00,   0.00,   0.00,   0.00,
+       -0.29,   6.92,  -9.30,   3.34,   4.50,  -0.21,  -0.15,   0.10,
+       -0.07,  -6.60,   0.00,  10.70,   0.00,   0.00,   0.15,   0.00,
+       -0.24,  -8.04,  -8.70,   0.00,   0.00,  -0.19,   0.18, -10.58,
+        0.00,  -3.10,   0.00,   0.00,   0.24,   0.00,   0.07,  -7.32,
+        8.00,  -0.12,  -0.10,   0.18,   0.16,   1.63,   1.70,   6.96,
+       -7.60,   0.03,  -0.04,  -0.17,  -0.16,  -3.62,   0.00,   9.86,
+        0.00,   0.00,   0.08,   0.00,  -0.22,   0.20,  -0.20,  -6.88,
+
+   /* 2772-2899 */
+       -7.50,   0.00,   0.00,  -0.17,   0.15,  -8.99,   0.00,   4.02,
+        0.00,   0.00,   0.20,   0.00,  -0.09,  -1.07,   1.40,  -5.69,
+       -7.70,   0.03,   0.02,  -0.17,   0.13,   6.48,  -7.20,  -0.48,
+       -0.50,  -0.16,  -0.14,  -0.01,   0.01,   5.57,  -7.50,   1.07,
+        1.40,  -0.17,  -0.12,   0.03,  -0.02,   8.71,   0.00,   3.54,
+        0.00,   0.00,  -0.19,   0.00,  -0.08,   0.40,   0.00,   9.27,
+        0.00,   0.00,  -0.01,   0.00,  -0.21,  -6.13,   6.70,  -1.19,
+       -1.30,   0.15,   0.14,  -0.03,   0.03,   5.21,  -5.70,  -2.51,
+       -2.60,  -0.13,  -0.12,  -0.06,   0.06,   5.69,  -6.20,  -0.12,
+       -0.10,  -0.14,  -0.13,  -0.01,   2.03,  -2.70,   4.53,   6.10,
+       -0.06,  -0.05,   0.14,  -0.10,   5.01,   5.50,  -2.51,   2.70,
+        0.12,  -0.11,   0.06,   0.06,  -1.91,   2.60,  -4.38,  -5.90,
+        0.06,   0.04,  -0.13,   0.10,   4.65,  -6.30,   0.00,   0.00,
+       -0.14,  -0.10,  -5.29,   5.70,   0.00,   0.00,   0.13,   0.12,
+       -2.23,  -4.00,  -4.65,   4.20,  -0.09,   0.05,   0.10,   0.10,
+       -4.53,   6.10,   0.00,   0.00,   0.14,   0.10,   2.47,   2.70,
+
+   /* 2900-3027 */
+       -4.46,   4.90,   0.06,  -0.06,   0.11,   0.10,  -5.05,   5.50,
+        0.84,   0.90,   0.12,   0.11,   0.02,  -0.02,   4.97,  -5.40,
+       -1.71,   0.00,  -0.12,  -0.11,   0.00,   0.04,  -0.99,  -1.30,
+        4.22,  -5.70,  -0.03,   0.02,  -0.13,  -0.09,   0.99,   1.40,
+        4.22,  -5.60,   0.03,  -0.02,  -0.13,  -0.09,  -4.69,  -5.20,
+        0.00,   0.00,  -0.12,   0.10,  -3.42,   0.00,   6.09,   0.00,
+        0.00,   0.08,   0.00,  -0.14,  -4.65,  -5.10,   0.00,   0.00,
+       -0.11,   0.10,   0.00,   0.00,  -4.53,  -5.00,   0.00,   0.00,
+       -0.11,   0.10,  -2.43,  -2.70,  -3.82,   4.20,  -0.06,   0.05,
+        0.10,   0.09,   0.00,   0.00,  -4.53,   4.90,   0.00,   0.00,
+        0.11,   0.10,  -4.49,  -4.90,   0.00,   0.00,  -0.11,   0.10,
+        2.67,  -2.90,  -3.62,  -3.90,  -0.06,  -0.06,  -0.09,   0.08,
+        3.94,  -5.30,   0.00,   0.00,  -0.12,  -3.38,   3.70,  -2.78,
+       -3.10,   0.08,   0.08,  -0.07,   0.06,   3.18,  -3.50,  -2.82,
+       -3.10,  -0.08,  -0.07,  -0.07,   0.06,  -5.77,   0.00,   1.87,
+        0.00,   0.00,   0.13,   0.00,  -0.04,   3.54,  -4.80,  -0.64,
+
+   /* 3028-3155 */
+       -0.90,  -0.11,   0.00,  -0.02,  -3.50,  -4.70,   0.68,  -0.90,
+       -0.11,   0.00,  -0.02,   5.49,   0.00,   0.00,   0.00,   0.00,
+       -0.12,   1.83,  -2.50,   2.63,   3.50,  -0.06,   0.00,   0.08,
+        3.02,  -4.10,   0.68,   0.90,  -0.09,   0.00,   0.02,   0.00,
+        0.00,   5.21,   0.00,   0.00,   0.00,   0.00,  -0.12,  -3.54,
+        3.80,   2.70,   3.60,  -1.35,   1.80,   0.08,   0.00,   0.04,
+       -2.90,   3.90,   0.68,   0.90,   0.09,   0.00,   0.02,   0.80,
+       -1.10,  -2.78,  -3.70,  -0.02,   0.00,  -0.08,   4.10,   0.00,
+       -2.39,   0.00,   0.00,  -0.09,   0.00,   0.05,  -1.59,   2.10,
+        2.27,   3.00,   0.05,   0.00,   0.07,  -2.63,   3.50,  -0.48,
+       -0.60,  -2.94,  -3.20,  -2.94,   3.20,   2.27,  -3.00,  -1.11,
+       -1.50,  -0.07,   0.00,  -0.03,  -0.56,  -0.80,  -2.35,   3.10,
+        0.00,  -0.60,  -3.42,   1.90,  -0.12,  -0.10,   2.63,  -2.90,
+        2.51,   2.80,  -0.64,   0.70,  -0.48,  -0.60,   2.19,  -2.90,
+        0.24,  -0.30,   2.15,   2.90,   2.15,  -2.90,   0.52,   0.70,
+        2.07,  -2.80,  -3.10,   0.00,   1.79,   0.00,   0.00,   0.07,
+
+   /* 3156-3283 */
+        0.00,  -0.04,   0.88,   0.00,  -3.46,   2.11,   2.80,  -0.36,
+        0.50,   3.54,  -0.20,  -3.50,  -1.39,   1.50,  -1.91,  -2.10,
+       -1.47,   2.00,   1.39,   1.90,   2.07,  -2.30,   0.91,   1.00,
+        1.99,  -2.70,   3.30,   0.00,   0.60,  -0.44,  -0.70,  -1.95,
+        2.60,   2.15,  -2.40,  -0.60,  -0.70,   3.30,   0.84,   0.00,
+       -3.10,  -3.10,   0.00,  -0.72,  -0.32,   0.40,  -1.87,  -2.50,
+        1.87,  -2.50,   0.32,   0.40,  -0.24,   0.30,  -1.87,  -2.50,
+       -0.24,  -0.30,   1.87,  -2.50,  -2.70,   0.00,   1.55,   2.03,
+        2.20,  -2.98,  -1.99,  -2.20,   0.12,  -0.10,  -0.40,   0.50,
+        1.59,   2.10,   0.00,   0.00,  -1.79,   2.00,  -1.03,   1.40,
+       -1.15,  -1.60,   0.32,   0.50,   1.39,  -1.90,   2.35,  -1.27,
+        1.70,   0.60,   0.80,  -0.32,  -0.40,   1.35,  -1.80,   0.44,
+        0.00,   2.23,  -0.84,   0.90,  -1.27,  -1.40,  -1.47,   1.60,
+       -0.28,  -0.30,  -0.28,   0.40,  -1.27,  -1.70,   0.28,  -0.40,
+       -1.43,  -1.50,   0.00,   0.00,  -1.27,  -1.70,   2.11,  -0.32,
+       -0.40,  -1.23,   1.60,   1.19,  -1.30,  -0.72,  -0.80,   0.72,
+
+   /* 3284-3411 */
+       -0.80,  -1.15,  -1.30,  -1.35,  -1.50,  -1.19,  -1.60,  -0.12,
+        0.20,   1.79,   0.00,  -0.88,  -0.28,   0.40,   1.11,   1.50,
+       -1.83,   0.00,   0.56,  -0.12,   0.10,  -1.27,  -1.40,   0.00,
+        0.00,   1.15,   1.50,  -0.12,   0.20,   1.11,   1.50,   0.36,
+       -0.50,  -1.07,  -1.40,  -1.11,   1.50,   1.67,   0.00,   0.80,
+       -1.11,   0.00,   1.43,   1.23,  -1.30,  -0.24,  -1.19,  -1.30,
+       -0.24,   0.20,  -0.44,  -0.90,  -0.95,   1.10,   1.07,  -1.40,
+        1.15,  -1.30,   1.03,  -1.10,  -0.56,  -0.60,  -0.68,   0.90,
+       -0.76,  -1.00,  -0.24,  -0.30,   0.95,  -1.30,   0.56,   0.70,
+        0.84,  -1.10,  -0.56,   0.00,  -1.55,   0.91,  -1.30,   0.28,
+        0.30,   0.16,  -0.20,   0.95,   1.30,   0.40,  -0.50,  -0.88,
+       -1.20,   0.95,  -1.10,  -0.48,  -0.50,   0.00,   0.00,  -1.07,
+        1.20,   0.44,  -0.50,   0.95,   1.10,   0.00,   0.00,   0.92,
+       -1.30,   0.95,   1.00,  -0.52,   0.60,   1.59,   0.24,  -0.40,
+        0.91,   1.20,   0.84,  -1.10,  -0.44,  -0.60,   0.84,   1.10,
+       -0.44,   0.60,  -0.44,   0.60,  -0.84,  -1.10,  -0.80,   0.00,
+
+   /* 3412-3539 */
+        1.35,   0.76,   0.20,  -0.91,  -1.00,   0.20,  -0.30,  -0.91,
+       -1.20,  -0.95,   1.00,  -0.48,  -0.50,   0.88,   1.00,   0.48,
+       -0.50,  -0.95,  -1.10,   0.20,  -0.20,  -0.99,   1.10,  -0.84,
+        1.10,  -0.24,  -0.30,   0.20,  -0.30,   0.84,   1.10,  -1.39,
+        0.00,  -0.28,  -0.16,   0.20,   0.84,   1.10,   0.00,   0.00,
+        1.39,   0.00,   0.00,  -0.95,   1.00,   1.35,  -0.99,   0.00,
+        0.88,  -0.52,   0.00,  -1.19,   0.20,   0.20,   0.76,  -1.00,
+        0.00,   0.00,   0.76,   1.00,   0.00,   0.00,   0.76,   1.00,
+       -0.76,   1.00,   0.00,   0.00,   1.23,   0.76,   0.80,  -0.32,
+        0.40,  -0.72,   0.80,  -0.40,  -0.40,   0.00,   0.00,  -0.80,
+       -0.90,  -0.68,   0.90,  -0.16,  -0.20,  -0.16,  -0.20,   0.68,
+       -0.90,  -0.36,   0.50,  -0.56,  -0.80,   0.72,  -0.90,   0.44,
+       -0.60,  -0.48,  -0.70,  -0.16,   0.00,  -1.11,   0.32,   0.00,
+       -1.07,   0.60,  -0.80,  -0.28,  -0.40,  -0.64,   0.00,   0.91,
+        1.11,   0.64,  -0.90,   0.76,  -0.80,   0.00,   0.00,  -0.76,
+       -0.80,   1.03,   0.00,  -0.36,  -0.64,  -0.70,   0.36,  -0.40,
+
+   /* 3540-3667 */
+        1.07,   0.36,  -0.50,  -0.52,  -0.70,   0.60,   0.00,   0.88,
+        0.95,   0.00,   0.48,   0.16,  -0.20,   0.60,   0.80,   0.16,
+       -0.20,  -0.60,  -0.80,   0.00,  -1.00,   0.12,   0.20,   0.16,
+       -0.20,   0.68,   0.70,   0.59,  -0.80,  -0.99,  -0.56,  -0.60,
+        0.36,  -0.40,  -0.68,  -0.70,  -0.68,  -0.70,  -0.36,  -0.50,
+       -0.44,   0.60,   0.64,   0.70,  -0.12,   0.10,  -0.52,   0.60,
+        0.36,   0.40,   0.00,   0.00,   0.95,  -0.84,   0.00,   0.44,
+        0.56,   0.60,   0.32,  -0.30,   0.00,   0.00,   0.60,   0.70,
+        0.00,   0.00,   0.60,   0.70,  -0.12,  -0.20,   0.52,  -0.70,
+        0.00,   0.00,   0.56,   0.70,  -0.12,   0.10,  -0.52,  -0.70,
+        0.00,   0.00,   0.88,  -0.76,   0.00,  -0.44,   0.00,   0.00,
+       -0.52,  -0.70,   0.52,  -0.70,   0.36,  -0.40,  -0.44,  -0.50,
+        0.00,   0.00,   0.60,   0.60,   0.84,   0.00,   0.12,  -0.24,
+        0.00,   0.80,  -0.56,   0.60,  -0.32,  -0.30,   0.48,  -0.50,
+        0.28,  -0.30,  -0.48,  -0.50,   0.12,   0.20,   0.48,  -0.60,
+        0.48,   0.60,  -0.12,   0.20,   0.24,   0.00,   0.76,  -0.52,
+
+   /* 3668-3795 */
+       -0.60,  -0.52,   0.60,   0.48,  -0.50,  -0.24,  -0.30,   0.12,
+       -0.10,   0.48,   0.60,   0.52,  -0.20,   0.36,   0.40,  -0.44,
+        0.50,  -0.24,  -0.30,  -0.48,  -0.60,  -0.44,  -0.60,  -0.12,
+        0.10,   0.76,   0.76,   0.20,  -0.20,   0.48,   0.50,   0.40,
+       -0.50,  -0.24,  -0.30,   0.44,  -0.60,   0.44,  -0.60,   0.36,
+        0.00,  -0.64,   0.72,   0.00,  -0.12,   0.00,  -0.10,  -0.40,
+       -0.60,  -0.20,  -0.20,  -0.44,   0.50,  -0.44,   0.50,   0.20,
+        0.20,  -0.44,  -0.50,   0.20,  -0.20,  -0.20,   0.20,  -0.44,
+       -0.50,   0.64,   0.00,   0.32,  -0.36,   0.50,  -0.20,  -0.30,
+        0.12,  -0.10,   0.48,   0.50,  -0.12,   0.30,  -0.36,  -0.50,
+        0.00,   0.00,   0.48,   0.50,  -0.48,   0.50,   0.68,   0.00,
+       -0.12,   0.56,  -0.40,   0.44,  -0.50,  -0.12,  -0.10,   0.24,
+        0.30,  -0.40,   0.40,   0.64,   0.00,  -0.24,   0.64,   0.00,
+       -0.20,   0.00,   0.00,   0.44,  -0.50,   0.44,   0.50,  -0.12,
+        0.20,  -0.36,  -0.50,   0.12,   0.00,   0.64,  -0.40,   0.50,
+        0.00,   0.10,   0.00,   0.00,  -0.40,   0.50,   0.00,   0.00,
+
+   /* 3796-3923 */
+       -0.40,  -0.50,   0.56,   0.00,   0.28,   0.00,   0.10,   0.36,
+        0.50,   0.00,  -0.10,   0.36,  -0.50,   0.36,   0.50,   0.00,
+       -0.10,   0.24,  -0.20,  -0.36,  -0.40,   0.16,   0.20,   0.40,
+       -0.40,   0.00,   0.00,  -0.36,  -0.50,  -0.36,  -0.50,  -0.32,
+       -0.50,  -0.12,   0.10,   0.20,   0.20,  -0.36,   0.40,  -0.60,
+        0.60,   0.28,   0.00,   0.52,   0.12,  -0.10,   0.40,   0.40,
+        0.00,  -0.50,   0.20,  -0.20,  -0.32,   0.40,   0.16,   0.20,
+       -0.16,   0.20,   0.32,   0.40,   0.56,   0.00,  -0.12,   0.32,
+       -0.40,  -0.16,  -0.20,   0.00,   0.00,   0.40,   0.40,  -0.40,
+       -0.40,  -0.40,   0.40,  -0.36,   0.40,   0.12,   0.10,   0.00,
+        0.10,   0.36,   0.40,   0.00,  -0.10,   0.36,   0.40,  -0.36,
+        0.40,   0.00,   0.10,   0.32,   0.00,   0.44,   0.12,   0.20,
+        0.28,  -0.40,   0.00,   0.00,   0.36,   0.40,   0.32,  -0.40,
+       -0.16,   0.12,   0.10,   0.32,  -0.40,   0.20,   0.30,  -0.24,
+        0.30,   0.00,   0.10,   0.32,   0.40,   0.00,  -0.10,  -0.32,
+       -0.40,  -0.32,   0.40,   0.00,   0.10,  -0.52,  -0.52,   0.52,
+
+   /* 3924-4051 */
+        0.32,  -0.40,   0.00,   0.00,   0.32,   0.40,   0.32,  -0.40,
+        0.00,   0.00,  -0.32,  -0.40,  -0.32,   0.40,   0.32,   0.40,
+        0.00,   0.00,   0.32,   0.40,   0.00,   0.00,  -0.32,  -0.40,
+        0.00,   0.00,   0.32,   0.40,   0.16,   0.20,   0.32,  -0.30,
+       -0.16,   0.00,  -0.48,  -0.20,   0.20,  -0.28,  -0.30,   0.28,
+       -0.40,   0.00,   0.00,   0.28,  -0.40,   0.00,   0.00,   0.28,
+       -0.40,   0.00,   0.00,  -0.28,  -0.40,   0.28,   0.40,  -0.28,
+       -0.40,  -0.48,  -0.20,   0.20,   0.24,   0.30,   0.44,   0.00,
+        0.16,   0.24,   0.30,   0.16,  -0.20,   0.24,   0.30,  -0.12,
+        0.20,   0.20,   0.30,  -0.16,   0.20,   0.00,   0.00,   0.44,
+       -0.32,   0.30,   0.24,   0.00,  -0.36,   0.36,   0.00,   0.24,
+        0.12,  -0.20,   0.20,   0.30,  -0.12,   0.00,  -0.28,   0.30,
+       -0.24,   0.30,   0.12,   0.10,  -0.28,  -0.30,  -0.28,   0.30,
+        0.00,   0.00,  -0.28,  -0.30,   0.00,   0.00,  -0.28,  -0.30,
+        0.00,   0.00,   0.28,   0.30,   0.00,   0.00,  -0.28,  -0.30,
+       -0.28,   0.30,   0.00,   0.00,  -0.28,  -0.30,   0.00,   0.00,
+
+   /* 4052-4179 */
+        0.28,   0.30,   0.00,   0.00,  -0.28,   0.30,   0.28,  -0.30,
+       -0.28,   0.30,   0.40,   0.40,  -0.24,   0.30,   0.00,  -0.10,
+        0.16,   0.00,   0.36,  -0.20,   0.30,  -0.12,  -0.10,  -0.24,
+       -0.30,   0.00,   0.00,  -0.24,   0.30,  -0.24,   0.30,   0.00,
+        0.00,  -0.24,   0.30,  -0.24,   0.30,   0.24,  -0.30,   0.00,
+        0.00,   0.24,  -0.30,   0.00,   0.00,   0.24,   0.30,   0.24,
+       -0.30,   0.24,   0.30,  -0.24,   0.30,  -0.24,   0.30,  -0.20,
+        0.20,  -0.16,  -0.20,   0.00,   0.00,  -0.32,   0.20,   0.00,
+        0.10,   0.20,  -0.30,   0.20,  -0.20,   0.12,   0.20,  -0.16,
+        0.20,   0.16,   0.20,   0.20,   0.30,   0.20,   0.30,   0.00,
+        0.00,  -0.20,   0.30,   0.00,   0.00,   0.20,   0.30,  -0.20,
+       -0.30,  -0.20,  -0.30,   0.20,  -0.30,   0.00,   0.00,   0.20,
+        0.30,   0.00,   0.00,   0.20,   0.30,   0.00,   0.00,   0.20,
+        0.30,   0.00,   0.00,   0.20,   0.30,   0.00,   0.00,   0.20,
+       -0.30,   0.00,   0.00,  -0.20,  -0.30,   0.00,   0.00,  -0.20,
+        0.30,   0.00,   0.00,  -0.20,   0.30,   0.00,   0.00,   0.36,
+
+   /* 4180-4307 */
+        0.00,   0.00,   0.36,   0.12,   0.10,  -0.24,   0.20,   0.12,
+       -0.20,  -0.16,  -0.20,  -0.13,   0.10,   0.22,   0.21,   0.20,
+        0.00,  -0.28,   0.32,   0.00,  -0.12,  -0.20,  -0.20,   0.12,
+       -0.10,   0.12,   0.10,  -0.20,   0.20,   0.00,   0.00,  -0.32,
+        0.32,   0.00,   0.00,   0.32,   0.32,   0.00,   0.00,  -0.24,
+       -0.20,   0.24,   0.20,   0.20,   0.00,  -0.24,   0.00,   0.00,
+       -0.24,  -0.20,   0.00,   0.00,   0.24,   0.20,  -0.24,  -0.20,
+        0.00,   0.00,  -0.24,   0.20,   0.16,  -0.20,   0.12,   0.10,
+        0.20,   0.20,   0.00,  -0.10,  -0.12,   0.10,  -0.16,  -0.20,
+       -0.12,  -0.10,  -0.16,   0.20,   0.20,   0.20,   0.00,   0.00,
+       -0.20,   0.20,  -0.20,   0.20,  -0.20,   0.20,  -0.20,   0.20,
+        0.20,  -0.20,  -0.20,  -0.20,   0.00,   0.00,  -0.20,   0.20,
+        0.20,   0.00,  -0.20,   0.00,   0.00,  -0.20,   0.20,  -0.20,
+        0.20,  -0.20,  -0.20,  -0.20,  -0.20,   0.00,   0.00,   0.20,
+        0.20,   0.20,   0.20,   0.12,  -0.20,  -0.12,  -0.10,   0.28,
+       -0.28,   0.16,  -0.20,   0.00,  -0.10,   0.00,   0.10,  -0.16,
+
+   /* 4308-4435 */
+        0.20,   0.00,  -0.10,  -0.16,  -0.20,   0.00,  -0.10,   0.16,
+       -0.20,   0.16,  -0.20,   0.00,   0.00,   0.16,   0.20,  -0.16,
+        0.20,   0.00,   0.00,   0.16,   0.20,   0.16,  -0.20,   0.16,
+       -0.20,  -0.16,   0.20,   0.16,  -0.20,   0.00,   0.00,   0.16,
+        0.20,   0.00,   0.00,   0.16,   0.20,   0.00,   0.00,  -0.16,
+       -0.20,   0.16,  -0.20,  -0.16,  -0.20,   0.00,   0.00,  -0.16,
+       -0.20,   0.00,   0.00,  -0.16,   0.20,   0.00,   0.00,   0.16,
+       -0.20,   0.16,   0.20,   0.16,   0.20,   0.00,   0.00,  -0.16,
+       -0.20,   0.00,   0.00,  -0.16,  -0.20,   0.00,   0.00,   0.16,
+        0.20,   0.16,   0.20,   0.00,   0.00,   0.16,   0.20,   0.16,
+       -0.20,   0.16,   0.20,   0.00,   0.00,  -0.16,   0.20,   0.00,
+        0.10,   0.12,  -0.20,   0.12,  -0.20,   0.00,  -0.10,   0.00,
+       -0.10,   0.12,   0.20,   0.00,  -0.10,  -0.12,   0.20,  -0.15,
+        0.20,  -0.24,   0.24,   0.00,   0.00,   0.24,   0.24,   0.12,
+       -0.20,  -0.12,  -0.20,   0.00,   0.00,   0.12,   0.20,   0.12,
+       -0.20,   0.12,   0.20,   0.12,   0.20,   0.12,   0.20,   0.12,
+
+   /* 4436-4563 */
+       -0.20,  -0.12,   0.20,   0.00,   0.00,   0.12,   0.20,   0.12,
+        0.00,  -0.20,   0.00,   0.00,  -0.12,  -0.20,   0.12,  -0.20,
+        0.00,   0.00,   0.12,   0.20,  -0.12,   0.20,  -0.12,   0.20,
+        0.12,  -0.20,   0.00,   0.00,   0.12,   0.20,   0.20,   0.00,
+        0.12,   0.00,   0.00,  -0.12,   0.20,   0.00,   0.00,  -0.12,
+       -0.20,   0.00,   0.00,  -0.12,  -0.20,  -0.12,  -0.20,   0.00,
+        0.00,   0.12,  -0.20,   0.12,  -0.20,   0.12,   0.20,  -0.12,
+       -0.20,   0.00,   0.00,   0.12,  -0.20,   0.12,  -0.20,   0.12,
+        0.20,   0.12,   0.00,   0.20,  -0.12,  -0.20,   0.00,   0.00,
+        0.12,   0.20,  -0.16,   0.00,   0.16,  -0.20,   0.20,   0.00,
+        0.00,  -0.20,   0.00,   0.00,  -0.20,   0.20,   0.00,   0.00,
+        0.20,   0.20,  -0.20,   0.00,   0.00,  -0.20,   0.12,   0.00,
+       -0.16,   0.20,   0.00,   0.00,   0.20,   0.12,  -0.10,   0.00,
+        0.10,   0.16,  -0.16,  -0.16,  -0.16,  -0.16,  -0.16,   0.00,
+        0.00,  -0.16,   0.00,   0.00,  -0.16,  -0.16,  -0.16,   0.00,
+        0.00,  -0.16,   0.00,   0.00,   0.16,   0.00,   0.00,   0.16,
+
+   /* 4564-4691 */
+        0.00,   0.00,   0.16,   0.16,   0.00,   0.00,  -0.16,   0.00,
+        0.00,  -0.16,  -0.16,   0.00,   0.00,   0.16,   0.00,   0.00,
+       -0.16,  -0.16,   0.00,   0.00,  -0.16,  -0.16,   0.12,   0.10,
+        0.12,  -0.10,   0.12,   0.10,   0.00,   0.00,   0.12,   0.10,
+       -0.12,   0.10,   0.00,   0.00,   0.12,   0.10,   0.12,  -0.10,
+        0.00,   0.00,  -0.12,  -0.10,   0.00,   0.00,   0.12,   0.10,
+        0.12,   0.00,   0.00,   0.12,   0.00,   0.00,  -0.12,   0.00,
+        0.00,   0.12,   0.12,   0.12,   0.12,   0.12,   0.00,   0.00,
+        0.12,   0.00,   0.00,   0.12,   0.12,   0.00,   0.00,   0.12,
+        0.00,   0.00,   0.12,  -0.12,  -0.12,   0.12,   0.12,  -0.12,
+       -0.12,   0.00,   0.00,   0.12,  -0.12,   0.12,   0.12,  -0.12,
+       -0.12,   0.00,   0.00,  -0.12,  -0.12,   0.00,   0.00,  -0.12,
+        0.12,   0.00,   0.00,   0.12,   0.00,   0.00,   0.12,   0.00,
+        0.00,   0.12,  -0.12,   0.00,   0.00,  -0.12,   0.12,  -0.12,
+       -0.12,   0.12,   0.00,   0.00,   0.12,   0.12,   0.12,  -0.12,
+        0.00,   0.00,  -0.12,  -0.12,  -0.12,   0.00,   0.00,  -0.12,
+
+   /* 4692-NA */
+       -0.12,   0.00,   0.00,   0.12,   0.12,   0.00,   0.00,  -0.12,
+       -0.12,  -0.12,  -0.12,   0.12,   0.00,   0.00,   0.12,  -0.12,
+        0.00,   0.00,  -0.12,  -0.12,   0.00,   0.00,   0.12,  -0.12,
+       -0.12,  -0.12,  -0.12,   0.12,   0.12,  -0.12,  -0.12,   0.00,
+        0.00,  -0.12,   0.00,   0.00,  -0.12,   0.12,   0.00,   0.00,
+        0.12,   0.00,   0.00,  -0.12,  -0.12,   0.00,   0.00,  -0.12,
+       -0.12,   0.12,   0.00,   0.00,   0.12,   0.12,   0.00,   0.00,
+        0.12,   0.00,   0.00,   0.12,   0.12,   0.08,   0.00,   0.04
+   };
+
+/* Number of amplitude coefficients */
+   static const int NA = (int) (sizeof a / sizeof (double));
+
+/* Amplitude usage: X or Y, sin or cos, power of T. */
+   static const int jaxy[] = {0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1};
+   static const int jasc[] = {0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0};
+   static const int japt[] = {0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4};
+
+/* Miscellaneous */
+   double t, w, pt[MAXPT+1], fa[14], xypr[2], xypl[2], xyls[2], arg,
+          sc[2];
+   int jpt, i, j, jxy, ialast, ifreq, m, ia, jsc;
+
+/*--------------------------------------------------------------------*/
+
+/* Interval between fundamental date J2000.0 and given date (JC). */
+   t = ((date1 - ERFA_DJ00) + date2) / ERFA_DJC;
+
+/* Powers of T. */
+   w = 1.0;
+   for (jpt = 0; jpt <= MAXPT; jpt++) {
+      pt[jpt] = w;
+      w *= t;
+   }
+
+/* Initialize totals in X and Y:  polynomial, luni-solar, planetary. */
+   for (jxy = 0; jxy < 2; jxy++) {
+      xypr[jxy] = 0.0;
+      xyls[jxy] = 0.0;
+      xypl[jxy] = 0.0;
+   }
+
+/* --------------------------------- */
+/* Fundamental arguments (IERS 2003) */
+/* --------------------------------- */
+
+/* Mean anomaly of the Moon. */
+   fa[0] = eraFal03(t);
+
+/* Mean anomaly of the Sun. */
+   fa[1] = eraFalp03(t);
+
+/* Mean argument of the latitude of the Moon. */
+   fa[2] = eraFaf03(t);
+
+/* Mean elongation of the Moon from the Sun. */
+   fa[3] = eraFad03(t);
+
+/* Mean longitude of the ascending node of the Moon. */
+   fa[4] = eraFaom03(t);
+
+/* Planetary longitudes, Mercury through Neptune. */
+   fa[5] = eraFame03(t);
+   fa[6] = eraFave03(t);
+   fa[7] = eraFae03(t);
+   fa[8] = eraFama03(t);
+   fa[9] = eraFaju03(t);
+   fa[10] = eraFasa03(t);
+   fa[11] = eraFaur03(t);
+   fa[12] = eraFane03(t);
+
+/* General accumulated precession in longitude. */
+   fa[13] = eraFapa03(t);
+
+/* -------------------------------------- */
+/* Polynomial part of precession-nutation */
+/* -------------------------------------- */
+
+   for (jxy = 0; jxy < 2; jxy++) {
+      for (j = MAXPT; j >= 0; j--) {
+         xypr[jxy] += xyp[jxy][j] * pt[j];
+      }
+   }
+
+/* ---------------------------------- */
+/* Nutation periodic terms, planetary */
+/* ---------------------------------- */
+
+/* Work backwards through the coefficients per frequency list. */
+   ialast = NA;
+   for (ifreq = NFPL-1; ifreq >= 0; ifreq--) {
+
+   /* Obtain the argument functions. */
+      arg = 0.0;
+      for (i = 0; i < 14; i++) {
+         m = mfapl[ifreq][i];
+         if (m != 0) arg += (double)m * fa[i];
+      }
+      sc[0] = sin(arg);
+      sc[1] = cos(arg);
+
+   /* Work backwards through the amplitudes at this frequency. */
+      ia = nc[ifreq+NFLS];
+      for (i = ialast; i >= ia; i--) {
+
+      /* Coefficient number (0 = 1st). */
+         j = i-ia;
+
+      /* X or Y. */
+         jxy = jaxy[j];
+
+      /* Sin or cos. */
+         jsc = jasc[j];
+
+      /* Power of T. */
+         jpt = japt[j];
+
+      /* Accumulate the component. */
+         xypl[jxy] += a[i-1] * sc[jsc] * pt[jpt];
+      }
+      ialast = ia-1;
+   }
+
+/* ----------------------------------- */
+/* Nutation periodic terms, luni-solar */
+/* ----------------------------------- */
+
+/* Continue working backwards through the number of coefficients list. */
+   for (ifreq = NFLS-1; ifreq >= 0; ifreq--) {
+
+   /* Obtain the argument functions. */
+      arg = 0.0;
+      for (i = 0; i < 5; i++) {
+         m = mfals[ifreq][i];
+         if (m != 0) arg += (double)m * fa[i];
+      }
+      sc[0] = sin(arg);
+      sc[1] = cos(arg);
+
+   /* Work backwards through the amplitudes at this frequency. */
+      ia = nc[ifreq];
+      for (i = ialast; i >= ia; i--) {
+
+      /* Coefficient number (0 = 1st). */
+         j = i-ia;
+
+      /* X or Y. */
+         jxy = jaxy[j];
+
+      /* Sin or cos. */
+         jsc = jasc[j];
+
+      /* Power of T. */
+         jpt = japt[j];
+
+      /* Accumulate the component. */
+         xyls[jxy] += a[i-1] * sc[jsc] * pt[jpt];
+      }
+      ialast = ia-1;
+   }
+
+/* ------------------------------------ */
+/* Results:  CIP unit vector components */
+/* ------------------------------------ */
+
+   *x = ERFA_DAS2R * (xypr[0] + (xyls[0] + xypl[0]) / 1e6);
+   *y = ERFA_DAS2R * (xypr[1] + (xyls[1] + xypl[1]) / 1e6);
+
+   return;
+
+}
+
+void eraXys00a(double date1, double date2,
+               double *x, double *y, double *s)
+/*
+**  - - - - - - - - - -
+**   e r a X y s 0 0 a
+**  - - - - - - - - - -
+**
+**  For a given TT date, compute the X,Y coordinates of the Celestial
+**  Intermediate Pole and the CIO locator s, using the IAU 2000A
+**  precession-nutation model.
+**
+**  Given:
+**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     x,y          double   Celestial Intermediate Pole (Note 2)
+**     s            double   the CIO locator s (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The Celestial Intermediate Pole coordinates are the x,y
+**     components of the unit vector in the Geocentric Celestial
+**     Reference System.
+**
+**  3) The CIO locator s (in radians) positions the Celestial
+**     Intermediate Origin on the equator of the CIP.
+**
+**  4) A faster, but slightly less accurate result (about 1 mas for
+**     X,Y), can be obtained by using instead the eraXys00b function.
+**
+**  Called:
+**     eraPnm00a    classical NPB matrix, IAU 2000A
+**     eraBpn2xy    extract CIP X,Y coordinates from NPB matrix
+**     eraS00       the CIO locator s, given X,Y, IAU 2000A
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rbpn[3][3];
+
+
+/* Form the bias-precession-nutation matrix, IAU 2000A. */
+   eraPnm00a(date1, date2, rbpn);
+
+/* Extract X,Y. */
+   eraBpn2xy(rbpn, x, y);
+
+/* Obtain s. */
+   *s = eraS00(date1, date2, *x, *y);
+
+   return;
+
+}
+
+void eraXys00b(double date1, double date2,
+               double *x, double *y, double *s)
+/*
+**  - - - - - - - - - -
+**   e r a X y s 0 0 b
+**  - - - - - - - - - -
+**
+**  For a given TT date, compute the X,Y coordinates of the Celestial
+**  Intermediate Pole and the CIO locator s, using the IAU 2000B
+**  precession-nutation model.
+**
+**  Given:
+**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     x,y          double   Celestial Intermediate Pole (Note 2)
+**     s            double   the CIO locator s (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The Celestial Intermediate Pole coordinates are the x,y
+**     components of the unit vector in the Geocentric Celestial
+**     Reference System.
+**
+**  3) The CIO locator s (in radians) positions the Celestial
+**     Intermediate Origin on the equator of the CIP.
+**
+**  4) The present function is faster, but slightly less accurate (about
+**     1 mas in X,Y), than the eraXys00a function.
+**
+**  Called:
+**     eraPnm00b    classical NPB matrix, IAU 2000B
+**     eraBpn2xy    extract CIP X,Y coordinates from NPB matrix
+**     eraS00       the CIO locator s, given X,Y, IAU 2000A
+**
+**  Reference:
+**
+**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
+**     IERS Technical Note No. 32, BKG (2004)
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rbpn[3][3];
+
+
+/* Form the bias-precession-nutation matrix, IAU 2000A. */
+   eraPnm00b(date1, date2, rbpn);
+
+/* Extract X,Y. */
+   eraBpn2xy(rbpn, x, y);
+
+/* Obtain s. */
+   *s = eraS00(date1, date2, *x, *y);
+
+   return;
+
+}
+
+void eraXys06a(double date1, double date2,
+               double *x, double *y, double *s)
+/*
+**  - - - - - - - - - -
+**   e r a X y s 0 6 a
+**  - - - - - - - - - -
+**
+**  For a given TT date, compute the X,Y coordinates of the Celestial
+**  Intermediate Pole and the CIO locator s, using the IAU 2006
+**  precession and IAU 2000A nutation models.
+**
+**  Given:
+**     date1,date2  double  TT as a 2-part Julian Date (Note 1)
+**
+**  Returned:
+**     x,y          double  Celestial Intermediate Pole (Note 2)
+**     s            double  the CIO locator s (Note 2)
+**
+**  Notes:
+**
+**  1) The TT date date1+date2 is a Julian Date, apportioned in any
+**     convenient way between the two arguments.  For example,
+**     JD(TT)=2450123.7 could be expressed in any of these ways,
+**     among others:
+**
+**            date1          date2
+**
+**         2450123.7           0.0       (JD method)
+**         2451545.0       -1421.3       (J2000 method)
+**         2400000.5       50123.2       (MJD method)
+**         2450123.5           0.2       (date & time method)
+**
+**     The JD method is the most natural and convenient to use in
+**     cases where the loss of several decimal digits of resolution
+**     is acceptable.  The J2000 method is best matched to the way
+**     the argument is handled internally and will deliver the
+**     optimum resolution.  The MJD method and the date & time methods
+**     are both good compromises between resolution and convenience.
+**
+**  2) The Celestial Intermediate Pole coordinates are the x,y components
+**     of the unit vector in the Geocentric Celestial Reference System.
+**
+**  3) The CIO locator s (in radians) positions the Celestial
+**     Intermediate Origin on the equator of the CIP.
+**
+**  4) Series-based solutions for generating X and Y are also available:
+**     see Capitaine & Wallace (2006) and eraXy06.
+**
+**  Called:
+**     eraPnm06a    classical NPB matrix, IAU 2006/2000A
+**     eraBpn2xy    extract CIP X,Y coordinates from NPB matrix
+**     eraS06       the CIO locator s, given X,Y, IAU 2006
+**
+**  References:
+**
+**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
+**
+**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   double rbpn[3][3];
+
+
+/* Form the bias-precession-nutation matrix, IAU 2000A. */
+   eraPnm06a(date1, date2, rbpn);
+
+/* Extract X,Y. */
+   eraBpn2xy(rbpn, x, y);
+
+/* Obtain s. */
+   *s = eraS06(date1, date2, *x, *y);
+
+   return;
+
+}
+
+void eraZp(double p[3])
+/*
+**  - - - - - -
+**   e r a Z p
+**  - - - - - -
+**
+**  Zero a p-vector.
+**
+**  Returned:
+**     p        double[3]      p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   p[0] = 0.0;
+   p[1] = 0.0;
+   p[2] = 0.0;
+
+   return;
+
+}
+
+void eraZpv(double pv[2][3])
+/*
+**  - - - - - - -
+**   e r a Z p v
+**  - - - - - - -
+**
+**  Zero a pv-vector.
+**
+**  Returned:
+**     pv       double[2][3]      pv-vector
+**
+**  Called:
+**     eraZp        zero p-vector
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   eraZp(pv[0]);
+   eraZp(pv[1]);
+
+   return;
+
+}
+
+void eraZr(double r[3][3])
+/*
+**  - - - - - -
+**   e r a Z r
+**  - - - - - -
+**
+**  Initialize an r-matrix to the null matrix.
+**
+**  Returned:
+**     r        double[3][3]    r-matrix
+**
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  Derived, with permission, from the SOFA library.  See notes at end of file.
+*/
+{
+   r[0][0] = 0.0;
+   r[0][1] = 0.0;
+   r[0][2] = 0.0;
+   r[1][0] = 0.0;
+   r[1][1] = 0.0;
+   r[1][2] = 0.0;
+   r[2][0] = 0.0;
+   r[2][1] = 0.0;
+   r[2][2] = 0.0;
+
+   return;
+
+}
+
+/*----------------------------------------------------------------------
+**  
+**  
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  All rights reserved.
+**  
+**  This library is derived, with permission, from the International
+**  Astronomical Union's "Standards of Fundamental Astronomy" library,
+**  available from http://www.iausofa.org.
+**  
+**  The ERFA version is intended to retain identical functionality to
+**  the SOFA library, but made distinct through different function and
+**  file names, as set out in the SOFA license conditions.  The SOFA
+**  original has a role as a reference standard for the IAU and IERS,
+**  and consequently redistribution is permitted only in its unaltered
+**  state.  The ERFA version is not subject to this restriction and
+**  therefore can be included in distributions which do not support the
+**  concept of "read only" software.
+**  
+**  Although the intent is to replicate the SOFA API (other than
+**  replacement of prefix names) and results (with the exception of
+**  bugs;  any that are discovered will be fixed), SOFA is not
+**  responsible for any errors found in this version of the library.
+**  
+**  If you wish to acknowledge the SOFA heritage, please acknowledge
+**  that you are using a library derived from SOFA, rather than SOFA
+**  itself.
+**  
+**  
+**  TERMS AND CONDITIONS
+**  
+**  Redistribution and use in source and binary forms, with or without
+**  modification, are permitted provided that the following conditions
+**  are met:
+**  
+**  1 Redistributions of source code must retain the above copyright
+**    notice, this list of conditions and the following disclaimer.
+**  
+**  2 Redistributions in binary form must reproduce the above copyright
+**    notice, this list of conditions and the following disclaimer in
+**    the documentation and/or other materials provided with the
+**    distribution.
+**  
+**  3 Neither the name of the Standards Of Fundamental Astronomy Board,
+**    the International Astronomical Union nor the names of its
+**    contributors may be used to endorse or promote products derived
+**    from this software without specific prior written permission.
+**  
+**  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+**  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+**  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+**  FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
+**  COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+**  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+**  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+**  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+**  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+**  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+**  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+**  POSSIBILITY OF SUCH DAMAGE.
+**  
+*/
diff --git a/cextern/erfa/erfa.h b/cextern/erfa/erfa.h
new file mode 100644
index 0000000..e4dbdfa
--- /dev/null
+++ b/cextern/erfa/erfa.h
@@ -0,0 +1,467 @@
+#ifndef SRCHDEF
+#define SRCHDEF
+
+#include <math.h>
+
+/*
+**  - - - - - - -
+**   s r c . h
+**  - - - - - - -
+**
+**  Prototype function declarations and macros for src library.
+**
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Astronomy/Calendars */
+int eraCal2jd(int iy, int im, int id, double *djm0, double *djm);
+double eraEpb(double dj1, double dj2);
+void eraEpb2jd(double epb, double *djm0, double *djm);
+double eraEpj(double dj1, double dj2);
+void eraEpj2jd(double epj, double *djm0, double *djm);
+int eraJd2cal(double dj1, double dj2,
+                     int *iy, int *im, int *id, double *fd);
+int eraJdcalf(int ndp, double dj1, double dj2, int iymdf[4]);
+
+/* Astronomy/Ephemerides */
+int eraEpv00(double date1, double date2,
+             double pvh[2][3], double pvb[2][3]);
+int eraPlan94(double date1, double date2, int np, double pv[2][3]);
+
+/* Astronomy/FundamentalArgs */
+double eraFad03(double t);
+double eraFae03(double t);
+double eraFaf03(double t);
+double eraFaju03(double t);
+double eraFal03(double t);
+double eraFalp03(double t);
+double eraFama03(double t);
+double eraFame03(double t);
+double eraFane03(double t);
+double eraFaom03(double t);
+double eraFapa03(double t);
+double eraFasa03(double t);
+double eraFaur03(double t);
+double eraFave03(double t);
+
+/* Astronomy/PrecNutPolar */
+void eraBi00(double *dpsibi, double *depsbi, double *dra);
+void eraBp00(double date1, double date2,
+             double rb[3][3], double rp[3][3], double rbp[3][3]);
+void eraBp06(double date1, double date2,
+             double rb[3][3], double rp[3][3], double rbp[3][3]);
+void eraBpn2xy(double rbpn[3][3], double *x, double *y);
+void eraC2i00a(double date1, double date2, double rc2i[3][3]);
+void eraC2i00b(double date1, double date2, double rc2i[3][3]);
+void eraC2i06a(double date1, double date2, double rc2i[3][3]);
+void eraC2ibpn(double date1, double date2, double rbpn[3][3],
+               double rc2i[3][3]);
+void eraC2ixy(double date1, double date2, double x, double y,
+              double rc2i[3][3]);
+void eraC2ixys(double x, double y, double s, double rc2i[3][3]);
+void eraC2t00a(double tta, double ttb, double uta, double utb,
+               double xp, double yp, double rc2t[3][3]);
+void eraC2t00b(double tta, double ttb, double uta, double utb,
+               double xp, double yp, double rc2t[3][3]);
+void eraC2t06a(double tta, double ttb, double uta, double utb,
+               double xp, double yp, double rc2t[3][3]);
+void eraC2tcio(double rc2i[3][3], double era, double rpom[3][3],
+               double rc2t[3][3]);
+void eraC2teqx(double rbpn[3][3], double gst, double rpom[3][3],
+               double rc2t[3][3]);
+void eraC2tpe(double tta, double ttb, double uta, double utb,
+              double dpsi, double deps, double xp, double yp,
+              double rc2t[3][3]);
+void eraC2txy(double tta, double ttb, double uta, double utb,
+              double x, double y, double xp, double yp,
+              double rc2t[3][3]);
+double eraEo06a(double date1, double date2);
+double eraEors(double rnpb[3][3], double s);
+void eraFw2m(double gamb, double phib, double psi, double eps,
+             double r[3][3]);
+void eraFw2xy(double gamb, double phib, double psi, double eps,
+              double *x, double *y);
+void eraNum00a(double date1, double date2, double rmatn[3][3]);
+void eraNum00b(double date1, double date2, double rmatn[3][3]);
+void eraNum06a(double date1, double date2, double rmatn[3][3]);
+void eraNumat(double epsa, double dpsi, double deps, double rmatn[3][3]);
+void eraNut00a(double date1, double date2, double *dpsi, double *deps);
+void eraNut00b(double date1, double date2, double *dpsi, double *deps);
+void eraNut06a(double date1, double date2, double *dpsi, double *deps);
+void eraNut80(double date1, double date2, double *dpsi, double *deps);
+void eraNutm80(double date1, double date2, double rmatn[3][3]);
+double eraObl06(double date1, double date2);
+double eraObl80(double date1, double date2);
+void eraP06e(double date1, double date2,
+             double *eps0, double *psia, double *oma, double *bpa,
+             double *bqa, double *pia, double *bpia,
+             double *epsa, double *chia, double *za, double *zetaa,
+             double *thetaa, double *pa,
+             double *gam, double *phi, double *psi);
+void eraPb06(double date1, double date2,
+             double *bzeta, double *bz, double *btheta);
+void eraPfw06(double date1, double date2,
+              double *gamb, double *phib, double *psib, double *epsa);
+void eraPmat00(double date1, double date2, double rbp[3][3]);
+void eraPmat06(double date1, double date2, double rbp[3][3]);
+void eraPmat76(double date1, double date2, double rmatp[3][3]);
+void eraPn00(double date1, double date2, double dpsi, double deps,
+             double *epsa,
+             double rb[3][3], double rp[3][3], double rbp[3][3],
+             double rn[3][3], double rbpn[3][3]);
+void eraPn00a(double date1, double date2,
+              double *dpsi, double *deps, double *epsa,
+              double rb[3][3], double rp[3][3], double rbp[3][3],
+              double rn[3][3], double rbpn[3][3]);
+void eraPn00b(double date1, double date2,
+              double *dpsi, double *deps, double *epsa,
+              double rb[3][3], double rp[3][3], double rbp[3][3],
+              double rn[3][3], double rbpn[3][3]);
+void eraPn06(double date1, double date2, double dpsi, double deps,
+             double *epsa,
+             double rb[3][3], double rp[3][3], double rbp[3][3],
+             double rn[3][3], double rbpn[3][3]);
+void eraPn06a(double date1, double date2,
+              double *dpsi, double *deps, double *epsa,
+              double rb[3][3], double rp[3][3], double rbp[3][3],
+              double rn[3][3], double rbpn[3][3]);
+void eraPnm00a(double date1, double date2, double rbpn[3][3]);
+void eraPnm00b(double date1, double date2, double rbpn[3][3]);
+void eraPnm06a(double date1, double date2, double rnpb[3][3]);
+void eraPnm80(double date1, double date2, double rmatpn[3][3]);
+void eraPom00(double xp, double yp, double sp, double rpom[3][3]);
+void eraPr00(double date1, double date2, double *dpsipr, double *depspr);
+void eraPrec76(double ep01, double ep02, double ep11, double ep12,
+               double *zeta, double *z, double *theta);
+double eraS00(double date1, double date2, double x, double y);
+double eraS00a(double date1, double date2);
+double eraS00b(double date1, double date2);
+double eraS06(double date1, double date2, double x, double y);
+double eraS06a(double date1, double date2);
+double eraSp00(double date1, double date2);
+void eraXy06(double date1, double date2, double *x, double *y);
+void eraXys00a(double date1, double date2,
+               double *x, double *y, double *s);
+void eraXys00b(double date1, double date2,
+               double *x, double *y, double *s);
+void eraXys06a(double date1, double date2,
+               double *x, double *y, double *s);
+
+/* Astronomy/RotationAndTime */
+double eraEe00(double date1, double date2, double epsa, double dpsi);
+double eraEe00a(double date1, double date2);
+double eraEe00b(double date1, double date2);
+double eraEe06a(double date1, double date2);
+double eraEect00(double date1, double date2);
+double eraEqeq94(double date1, double date2);
+double eraEra00(double dj1, double dj2);
+double eraGmst00(double uta, double utb, double tta, double ttb);
+double eraGmst06(double uta, double utb, double tta, double ttb);
+double eraGmst82(double dj1, double dj2);
+double eraGst00a(double uta, double utb, double tta, double ttb);
+double eraGst00b(double uta, double utb);
+double eraGst06(double uta, double utb, double tta, double ttb,
+                double rnpb[3][3]);
+double eraGst06a(double uta, double utb, double tta, double ttb);
+double eraGst94(double uta, double utb);
+
+/* Astronomy/SpaceMotion */
+int eraPvstar(double pv[2][3], double *ra, double *dec,
+              double *pmr, double *pmd, double *px, double *rv);
+int eraStarpv(double ra, double dec,
+              double pmr, double pmd, double px, double rv,
+              double pv[2][3]);
+
+/* Astronomy/StarCatalogs */
+void eraFk52h(double r5, double d5,
+              double dr5, double dd5, double px5, double rv5,
+              double *rh, double *dh,
+              double *drh, double *ddh, double *pxh, double *rvh);
+void eraFk5hip(double r5h[3][3], double s5h[3]);
+void eraFk5hz(double r5, double d5, double date1, double date2,
+              double *rh, double *dh);
+void eraH2fk5(double rh, double dh,
+              double drh, double ddh, double pxh, double rvh,
+              double *r5, double *d5,
+              double *dr5, double *dd5, double *px5, double *rv5);
+void eraHfk5z(double rh, double dh, double date1, double date2,
+              double *r5, double *d5, double *dr5, double *dd5);
+int eraStarpm(double ra1, double dec1,
+              double pmr1, double pmd1, double px1, double rv1,
+              double ep1a, double ep1b, double ep2a, double ep2b,
+              double *ra2, double *dec2,
+              double *pmr2, double *pmd2, double *px2, double *rv2);
+
+/* Astronomy/Geodetic/Geocentric */
+int eraEform(int n, double *a, double *f);
+int eraGc2gd(int n, double xyz[3],
+             double *elong, double *phi, double *height);
+int eraGc2gde(double a, double f, double xyz[3],
+              double *elong, double *phi, double *height);
+int eraGd2gc(int n, double elong, double phi, double height,
+             double xyz[3]);
+int eraGd2gce(double a, double f,
+              double elong, double phi, double height, double xyz[3]);
+
+/* Astronomy/Timescales */
+int eraD2dtf(const char *scale, int ndp, double d1, double d2,
+             int *iy, int *im, int *id, int ihmsf[4]);
+int eraDat(int iy, int im, int id, double fd, double *deltat);
+double eraDtdb(double date1, double date2,
+               double ut, double elong, double u, double v);
+int eraDtf2d(const char *scale, int iy, int im, int id,
+             int ihr, int imn, double sec, double *d1, double *d2);
+int eraTaitt(double tai1, double tai2, double *tt1, double *tt2);
+int eraTaiut1(double tai1, double tai2, double dta,
+              double *ut11, double *ut12);
+int eraTaiutc(double tai1, double tai2, double *utc1, double *utc2);
+int eraTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2);
+int eraTcgtt(double tcg1, double tcg2, double *tt1, double *tt2);
+int eraTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2);
+int eraTdbtt(double tdb1, double tdb2, double dtr,
+             double *tt1, double *tt2);
+int eraTttai(double tt1, double tt2, double *tai1, double *tai2);
+int eraTttcg(double tt1, double tt2, double *tcg1, double *tcg2);
+int eraTttdb(double tt1, double tt2, double dtr,
+             double *tdb1, double *tdb2);
+int eraTtut1(double tt1, double tt2, double dt,
+             double *ut11, double *ut12);
+int eraUt1tai(double ut11, double ut12, double dta,
+              double *tai1, double *tai2);
+int eraUt1tt(double ut11, double ut12, double dt,
+             double *tt1, double *tt2);
+int eraUt1utc(double ut11, double ut12, double dut1,
+              double *utc1, double *utc2);
+int eraUtctai(double utc1, double utc2, double *tai1, double *tai2);
+int eraUtcut1(double utc1, double utc2, double dut1,
+              double *ut11, double *ut12);
+
+/* VectorMatrix/AngleOps */
+void eraA2af(int ndp, double angle, char *sign, int idmsf[4]);
+void eraA2tf(int ndp, double angle, char *sign, int ihmsf[4]);
+int eraAf2a(char s, int ideg, int iamin, double asec, double *rad);
+double eraAnp(double a);
+double eraAnpm(double a);
+void eraD2tf(int ndp, double days, char *sign, int ihmsf[4]);
+int eraTf2a(char s, int ihour, int imin, double sec, double *rad);
+int eraTf2d(char s, int ihour, int imin, double sec, double *days);
+
+/* VectorMatrix/BuildRotations */
+void eraRx(double phi, double r[3][3]);
+void eraRy(double theta, double r[3][3]);
+void eraRz(double psi, double r[3][3]);
+
+/* VectorMatrix/CopyExtendExtract */
+void eraCp(double p[3], double c[3]);
+void eraCpv(double pv[2][3], double c[2][3]);
+void eraCr(double r[3][3], double c[3][3]);
+void eraP2pv(double p[3], double pv[2][3]);
+void eraPv2p(double pv[2][3], double p[3]);
+
+/* VectorMatrix/Initialization */
+void eraIr(double r[3][3]);
+void eraZp(double p[3]);
+void eraZpv(double pv[2][3]);
+void eraZr(double r[3][3]);
+
+/* VectorMatrix/MatrixOps */
+void eraRxr(double a[3][3], double b[3][3], double atb[3][3]);
+void eraTr(double r[3][3], double rt[3][3]);
+
+/* VectorMatrix/MatrixVectorProducts */
+void eraRxp(double r[3][3], double p[3], double rp[3]);
+void eraRxpv(double r[3][3], double pv[2][3], double rpv[2][3]);
+void eraTrxp(double r[3][3], double p[3], double trp[3]);
+void eraTrxpv(double r[3][3], double pv[2][3], double trpv[2][3]);
+
+/* VectorMatrix/RotationVectors */
+void eraRm2v(double r[3][3], double w[3]);
+void eraRv2m(double w[3], double r[3][3]);
+
+/* VectorMatrix/SeparationAndAngle */
+double eraPap(double a[3], double b[3]);
+double eraPas(double al, double ap, double bl, double bp);
+double eraSepp(double a[3], double b[3]);
+double eraSeps(double al, double ap, double bl, double bp);
+
+/* VectorMatrix/SphericalCartesian */
+void eraC2s(double p[3], double *theta, double *phi);
+void eraP2s(double p[3], double *theta, double *phi, double *r);
+void eraPv2s(double pv[2][3],
+             double *theta, double *phi, double *r,
+             double *td, double *pd, double *rd);
+void eraS2c(double theta, double phi, double c[3]);
+void eraS2p(double theta, double phi, double r, double p[3]);
+void eraS2pv(double theta, double phi, double r,
+             double td, double pd, double rd,
+             double pv[2][3]);
+
+/* VectorMatrix/VectorOps */
+double eraPdp(double a[3], double b[3]);
+double eraPm(double p[3]);
+void eraPmp(double a[3], double b[3], double amb[3]);
+void eraPn(double p[3], double *r, double u[3]);
+void eraPpp(double a[3], double b[3], double apb[3]);
+void eraPpsp(double a[3], double s, double b[3], double apsb[3]);
+void eraPvdpv(double a[2][3], double b[2][3], double adb[2]);
+void eraPvm(double pv[2][3], double *r, double *s);
+void eraPvmpv(double a[2][3], double b[2][3], double amb[2][3]);
+void eraPvppv(double a[2][3], double b[2][3], double apb[2][3]);
+void eraPvu(double dt, double pv[2][3], double upv[2][3]);
+void eraPvup(double dt, double pv[2][3], double p[3]);
+void eraPvxpv(double a[2][3], double b[2][3], double axb[2][3]);
+void eraPxp(double a[3], double b[3], double axb[3]);
+void eraS2xpv(double s1, double s2, double pv[2][3], double spv[2][3]);
+void eraSxp(double s, double p[3], double sp[3]);
+void eraSxpv(double s, double pv[2][3], double spv[2][3]);
+
+
+
+/* Pi */
+#define ERFA_DPI (3.141592653589793238462643)
+
+/* 2Pi */
+#define ERFA_D2PI (6.283185307179586476925287)
+
+/* Degrees to radians */
+#define ERFA_DD2R (1.745329251994329576923691e-2)
+
+/* Radians to arcseconds */
+#define ERFA_DR2AS (206264.8062470963551564734)
+
+/* Arcseconds to radians */
+#define ERFA_DAS2R (4.848136811095359935899141e-6)
+
+/* Seconds of time to radians */
+#define ERFA_DS2R (7.272205216643039903848712e-5)
+
+/* Arcseconds in a full circle */
+#define ERFA_TURNAS (1296000.0)
+
+/* Milliarcseconds to radians */
+#define ERFA_DMAS2R (ERFA_DAS2R / 1e3)
+
+/* Length of tropical year B1900 (days) */
+#define ERFA_DTY (365.242198781)
+
+/* Seconds per day. */
+#define ERFA_DAYSEC (86400.0)
+
+/* Days per Julian year */
+#define ERFA_DJY (365.25)
+
+/* Days per Julian century */
+#define ERFA_DJC (36525.0)
+
+/* Days per Julian millennium */
+#define ERFA_DJM (365250.0)
+
+/* Reference epoch (J2000.0), Julian Date */
+#define ERFA_DJ00 (2451545.0)
+
+/* Julian Date of Modified Julian Date zero */
+#define ERFA_DJM0 (2400000.5)
+
+/* Reference epoch (J2000.0), Modified Julian Date */
+#define ERFA_DJM00 (51544.5)
+
+/* 1977 Jan 1.0 as MJD */
+#define ERFA_DJM77 (43144.0)
+
+/* TT minus TAI (s) */
+#define ERFA_TTMTAI (32.184)
+
+/* AU (m) */
+#define ERFA_DAU (149597870e3)
+
+/* Speed of light (AU per day) */
+#define ERFA_DC (ERFA_DAYSEC / 499.004782)
+
+/* L_G = 1 - d(TT)/d(TCG) */
+#define ERFA_ELG (6.969290134e-10)
+
+/* L_B = 1 - d(TDB)/d(TCB), and TDB (s) at TAI 1977/1/1.0 */
+#define ERFA_ELB (1.550519768e-8)
+#define ERFA_TDB0 (-6.55e-5)
+
+/* ERFA_DINT(A) - truncate to nearest whole number towards zero (double) */
+#define ERFA_DINT(A) ((A)<0.0?ceil(A):floor(A))
+
+/* ERFA_DNINT(A) - round to nearest whole number (double) */
+#define ERFA_DNINT(A) ((A)<0.0?ceil((A)-0.5):floor((A)+0.5))
+
+/* ERFA_DSIGN(A,B) - magnitude of A with sign of B (double) */
+#define ERFA_DSIGN(A,B) ((B)<0.0?-fabs(A):fabs(A))
+
+/* Reference ellipsoids */
+#define ERFA_WGS84 1
+#define ERFA_GRS80 2
+#define ERFA_WGS72 3
+
+#endif
+
+/*----------------------------------------------------------------------
+**  
+**  
+**  Copyright (C) 2013, NumFOCUS Foundation.
+**  All rights reserved.
+**  
+**  This library is derived, with permission, from the International
+**  Astronomical Union's "Standards of Fundamental Astronomy" library,
+**  available from http://www.iausofa.org.
+**  
+**  The ERFA version is intended to retain identical functionality to
+**  the SOFA library, but made distinct through different function and
+**  file names, as set out in the SOFA license conditions.  The SOFA
+**  original has a role as a reference standard for the IAU and IERS,
+**  and consequently redistribution is permitted only in its unaltered
+**  state.  The ERFA version is not subject to this restriction and
+**  therefore can be included in distributions which do not support the
+**  concept of "read only" software.
+**  
+**  Although the intent is to replicate the SOFA API (other than
+**  replacement of prefix names) and results (with the exception of
+**  bugs;  any that are discovered will be fixed), SOFA is not
+**  responsible for any errors found in this version of the library.
+**  
+**  If you wish to acknowledge the SOFA heritage, please acknowledge
+**  that you are using a library derived from SOFA, rather than SOFA
+**  itself.
+**  
+**  
+**  TERMS AND CONDITIONS
+**  
+**  Redistribution and use in source and binary forms, with or without
+**  modification, are permitted provided that the following conditions
+**  are met:
+**  
+**  1 Redistributions of source code must retain the above copyright
+**    notice, this list of conditions and the following disclaimer.
+**  
+**  2 Redistributions in binary form must reproduce the above copyright
+**    notice, this list of conditions and the following disclaimer in
+**    the documentation and/or other materials provided with the
+**    distribution.
+**  
+**  3 Neither the name of the Standards Of Fundamental Astronomy Board,
+**    the International Astronomical Union nor the names of its
+**    contributors may be used to endorse or promote products derived
+**    from this software without specific prior written permission.
+**  
+**  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+**  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+**  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+**  FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
+**  COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+**  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+**  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+**  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+**  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+**  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+**  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+**  POSSIBILITY OF SUCH DAMAGE.
+**  
+*/
diff --git a/cextern/sofa/sofa.c b/cextern/sofa/sofa.c
deleted file mode 100644
index 707eda5..0000000
--- a/cextern/sofa/sofa.c
+++ /dev/null
@@ -1,49467 +0,0 @@
-#include "sofam.h"
-#include <stdlib.h>
-
-void iauA2af(int ndp, double angle, char *sign, int idmsf[4])
-/*
-**  - - - - - - - -
-**   i a u A 2 a f
-**  - - - - - - - -
-**
-**  Decompose radians into degrees, arcminutes, arcseconds, fraction.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     ndp     int     resolution (Note 1)
-**     angle   double  angle in radians
-**
-**  Returned:
-**     sign    char    '+' or '-'
-**     idmsf   int[4]  degrees, arcminutes, arcseconds, fraction
-**
-**  Called:
-**     iauD2tf      decompose days to hms
-**
-**  Notes:
-**
-**  1) The argument ndp is interpreted as follows:
-**
-**     ndp         resolution
-**      :      ...0000 00 00
-**     -7         1000 00 00
-**     -6          100 00 00
-**     -5           10 00 00
-**     -4            1 00 00
-**     -3            0 10 00
-**     -2            0 01 00
-**     -1            0 00 10
-**      0            0 00 01
-**      1            0 00 00.1
-**      2            0 00 00.01
-**      3            0 00 00.001
-**      :            0 00 00.000...
-**
-**  2) The largest positive useful value for ndp is determined by the
-**     size of angle, the format of doubles on the target platform, and
-**     the risk of overflowing idmsf[3].  On a typical platform, for
-**     angle up to 2pi, the available floating-point precision might
-**     correspond to ndp=12.  However, the practical limit is typically
-**     ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is
-**     only 16 bits.
-**
-**  3) The absolute value of angle may exceed 2pi.  In cases where it
-**     does not, it is up to the caller to test for and handle the
-**     case where angle is very nearly 2pi and rounds up to 360 degrees,
-**     by testing for idmsf[0]=360 and setting idmsf[0-3] to zero.
-**
-**  This revision:  2008 May 27
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Hours to degrees * radians to turns */
-   const double F = 15.0 / D2PI;
-
-
-/* Scale then use days to h,m,s function. */
-   iauD2tf(ndp, angle*F, sign, idmsf);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauA2tf(int ndp, double angle, char *sign, int ihmsf[4])
-/*
-**  - - - - - - - -
-**   i a u A 2 t f
-**  - - - - - - - -
-**
-**  Decompose radians into hours, minutes, seconds, fraction.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     ndp     int     resolution (Note 1)
-**     angle   double  angle in radians
-**
-**  Returned:
-**     sign    char    '+' or '-'
-**     ihmsf   int[4]  hours, minutes, seconds, fraction
-**
-**  Called:
-**     iauD2tf      decompose days to hms
-**
-**  Notes:
-**
-**  1) The argument ndp is interpreted as follows:
-**
-**     ndp         resolution
-**      :      ...0000 00 00
-**     -7         1000 00 00
-**     -6          100 00 00
-**     -5           10 00 00
-**     -4            1 00 00
-**     -3            0 10 00
-**     -2            0 01 00
-**     -1            0 00 10
-**      0            0 00 01
-**      1            0 00 00.1
-**      2            0 00 00.01
-**      3            0 00 00.001
-**      :            0 00 00.000...
-**
-**  2) The largest positive useful value for ndp is determined by the
-**     size of angle, the format of doubles on the target platform, and
-**     the risk of overflowing ihmsf[3].  On a typical platform, for
-**     angle up to 2pi, the available floating-point precision might
-**     correspond to ndp=12.  However, the practical limit is typically
-**     ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is
-**     only 16 bits.
-**
-**  3) The absolute value of angle may exceed 2pi.  In cases where it
-**     does not, it is up to the caller to test for and handle the
-**     case where angle is very nearly 2pi and rounds up to 24 hours,
-**     by testing for ihmsf[0]=24 and setting ihmsf(0-3) to zero.
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Scale then use days to h,m,s function. */
-   iauD2tf(ndp, angle/D2PI, sign, ihmsf);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-
-int iauAf2a(char s, int ideg, int iamin, double asec, double *rad)
-/*
-**  - - - - - - - -
-**   i a u A f 2 a
-**  - - - - - - - -
-**
-**  Convert degrees, arcminutes, arcseconds to radians.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     s         char    sign:  '-' = negative, otherwise positive
-**     ideg      int     degrees
-**     iamin     int     arcminutes
-**     asec      double  arcseconds
-**
-**  Returned:
-**     rad       double  angle in radians
-**
-**  Returned (function value):
-**               int     status:  0 = OK
-**                                1 = ideg outside range 0-359
-**                                2 = iamin outside range 0-59
-**                                3 = asec outside range 0-59.999...
-**
-**  Notes:
-**
-**  1)  The result is computed even if any of the range checks fail.
-**
-**  2)  Negative ideg, iamin and/or asec produce a warning status, but
-**      the absolute value is used in the conversion.
-**
-**  3)  If there are multiple errors, the status value reflects only the
-**      first, the smallest taking precedence.
-**
-**  This revision:  2012 February 13
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* Compute the interval. */
-   *rad  = ( s == '-' ? -1.0 : 1.0 ) *
-           ( 60.0 * ( 60.0 * ( (double) abs(ideg) ) +
-                             ( (double) abs(iamin) ) ) +
-                                        fabs(asec) ) * DAS2R;
-
-/* Validate arguments and return status. */
-   if ( ideg < 0 || ideg > 359 ) return 1;
-   if ( iamin < 0 || iamin > 59 ) return 2;
-   if ( asec < 0.0 || asec >= 60.0 ) return 3;
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauAnp(double a)
-/*
-**  - - - - - - -
-**   i a u A n p
-**  - - - - - - -
-**
-**  Normalize angle into the range 0 <= a < 2pi.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a        double     angle (radians)
-**
-**  Returned (function value):
-**              double     angle in range 0-2pi
-**
-**  This revision:  2008 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double w;
-
-
-   w = fmod(a, D2PI);
-   if (w < 0) w += D2PI;
-
-   return w;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauAnpm(double a)
-/*
-**  - - - - - - - -
-**   i a u A n p m
-**  - - - - - - - -
-**
-**  Normalize angle into the range -pi <= a < +pi.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a        double     angle (radians)
-**
-**  Returned (function value):
-**              double     angle in range +/-pi
-**
-**  This revision:  2008 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double w;
-
-
-   w = fmod(a, D2PI);
-   if (fabs(w) >= DPI) w -= dsign(D2PI, a);
-
-   return w;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauBi00(double *dpsibi, double *depsbi, double *dra)
-/*
-**  - - - - - - - -
-**   i a u B i 0 0
-**  - - - - - - - -
-**
-**  Frame bias components of IAU 2000 precession-nutation models (part
-**  of MHB2000 with additions).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Returned:
-**     dpsibi,depsbi  double  longitude and obliquity corrections
-**     dra            double  the ICRS RA of the J2000.0 mean equinox
-**
-**  Notes:
-**
-**  1) The frame bias corrections in longitude and obliquity (radians)
-**     are required in order to correct for the offset between the GCRS
-**     pole and the mean J2000.0 pole.  They define, with respect to the
-**     GCRS frame, a J2000.0 mean pole that is consistent with the rest
-**     of the IAU 2000A precession-nutation model.
-**
-**  2) In addition to the displacement of the pole, the complete
-**     description of the frame bias requires also an offset in right
-**     ascension.  This is not part of the IAU 2000A model, and is from
-**     Chapront et al. (2002).  It is returned in radians.
-**
-**  3) This is a supplemented implementation of one aspect of the IAU
-**     2000A nutation model, formally adopted by the IAU General
-**     Assembly in 2000, namely MHB2000 (Mathews et al. 2002).
-**
-**  References:
-**
-**     Chapront, J., Chapront-Touze, M. & Francou, G., Astron.
-**     Astrophys., 387, 700, 2002.
-**
-**     Mathews, P.M., Herring, T.A., Buffet, B.A., "Modeling of nutation
-**     and precession   New nutation series for nonrigid Earth and
-**     insights into the Earth's interior", J.Geophys.Res., 107, B4,
-**     2002.  The MHB2000 code itself was obtained on 9th September 2002
-**     from ftp://maia.usno.navy.mil/conv2000/chapter5/IAU2000A.
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* The frame bias corrections in longitude and obliquity */
-   const double DPBIAS = -0.041775  * DAS2R,
-                DEBIAS = -0.0068192 * DAS2R;
-
-/* The ICRS RA of the J2000.0 equinox (Chapront et al., 2002) */
-   const double DRA0 = -0.0146 * DAS2R;
-
-
-/* Return the results (which are fixed). */
-   *dpsibi = DPBIAS;
-   *depsbi = DEBIAS;
-   *dra = DRA0;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauBp00(double date1, double date2,
-             double rb[3][3], double rp[3][3], double rbp[3][3])
-/*
-**  - - - - - - - -
-**   i a u B p 0 0
-**  - - - - - - - -
-**
-**  Frame bias and precession, IAU 2000.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2  double         TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rb           double[3][3]   frame bias matrix (Note 2)
-**     rp           double[3][3]   precession matrix (Note 3)
-**     rbp          double[3][3]   bias-precession matrix (Note 4)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**             date1         date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix rb transforms vectors from GCRS to mean J2000.0 by
-**     applying frame bias.
-**
-**  3) The matrix rp transforms vectors from J2000.0 mean equator and
-**     equinox to mean equator and equinox of date by applying
-**     precession.
-**
-**  4) The matrix rbp transforms vectors from GCRS to mean equator and
-**     equinox of date by applying frame bias then precession.  It is
-**     the product rp x rb.
-**
-**  5) It is permissible to re-use the same array in the returned
-**     arguments.  The arrays are filled in the order given.
-**
-**  Called:
-**     iauBi00      frame bias components, IAU 2000
-**     iauPr00      IAU 2000 precession adjustments
-**     iauIr        initialize r-matrix to identity
-**     iauRx        rotate around X-axis
-**     iauRy        rotate around Y-axis
-**     iauRz        rotate around Z-axis
-**     iauCr        copy r-matrix
-**     iauRxr       product of two r-matrices
-**
-**  Reference:
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* J2000.0 obliquity (Lieske et al. 1977) */
-   const double EPS0 = 84381.448 * DAS2R;
-
-   double t, dpsibi, depsbi;
-   double dra0, psia77, oma77, chia, dpsipr, depspr, psia, oma,
-          rbw[3][3];
-
-
-/* Interval between fundamental epoch J2000.0 and current date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Frame bias. */
-   iauBi00(&dpsibi, &depsbi, &dra0);
-
-/* Precession angles (Lieske et al. 1977) */
-   psia77 = (5038.7784 + (-1.07259 + (-0.001147) * t) * t) * t * DAS2R;
-   oma77  =       EPS0 + ((0.05127 + (-0.007726) * t) * t) * t * DAS2R;
-   chia   = (  10.5526 + (-2.38064 + (-0.001125) * t) * t) * t * DAS2R;
-
-/* Apply IAU 2000 precession corrections. */
-   iauPr00(date1, date2, &dpsipr,  &depspr);
-   psia = psia77 + dpsipr;
-   oma  = oma77  + depspr;
-
-/* Frame bias matrix: GCRS to J2000.0. */
-   iauIr(rbw);
-   iauRz(dra0, rbw);
-   iauRy(dpsibi * sin(EPS0), rbw);
-   iauRx(-depsbi, rbw);
-   iauCr(rbw, rb);
-
-/* Precession matrix: J2000.0 to mean of date. */
-   iauIr(rp);
-   iauRx(EPS0,  rp);
-   iauRz(-psia, rp);
-   iauRx(-oma,  rp);
-   iauRz(chia,  rp);
-
-/* Bias-precession matrix: GCRS to mean of date. */
-   iauRxr(rp, rbw, rbp);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauBp06(double date1, double date2,
-             double rb[3][3], double rp[3][3], double rbp[3][3])
-/*
-**  - - - - - - - -
-**   i a u B p 0 6
-**  - - - - - - - -
-**
-**  Frame bias and precession, IAU 2006.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double         TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rb           double[3][3]   frame bias matrix (Note 2)
-**     rp           double[3][3]   precession matrix (Note 3)
-**     rbp          double[3][3]   bias-precession matrix (Note 4)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**             date1         date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix rb transforms vectors from GCRS to mean J2000.0 by
-**     applying frame bias.
-**
-**  3) The matrix rp transforms vectors from mean J2000.0 to mean of
-**     date by applying precession.
-**
-**  4) The matrix rbp transforms vectors from GCRS to mean of date by
-**     applying frame bias then precession.  It is the product rp x rb.
-**
-**  Called:
-**     iauPfw06     bias-precession F-W angles, IAU 2006
-**     iauFw2m      F-W angles to r-matrix
-**     iauPmat06    PB matrix, IAU 2006
-**     iauTr        transpose r-matrix
-**     iauRxr       product of two r-matrices
-**
-**  References:
-**
-**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
-**
-**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double gamb, phib, psib, epsa, rbt[3][3];
-
-
-/* B matrix. */
-   iauPfw06(DJM0, DJM00, &gamb, &phib, &psib, &epsa);
-   iauFw2m(gamb, phib, psib, epsa, rb);
-
-/* PxB matrix. */
-   iauPmat06(date1, date2, rbp);
-
-/* P matrix. */
-   iauTr(rb, rbt);
-   iauRxr(rbp, rbt, rp);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauBpn2xy(double rbpn[3][3], double *x, double *y)
-/*
-**  - - - - - - - - - -
-**   i a u B p n 2 x y
-**  - - - - - - - - - -
-**
-**  Extract from the bias-precession-nutation matrix the X,Y coordinates
-**  of the Celestial Intermediate Pole.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     rbpn      double[3][3]  celestial-to-true matrix (Note 1)
-**
-**  Returned:
-**     x,y       double        Celestial Intermediate Pole (Note 2)
-**
-**  Notes:
-**
-**  1) The matrix rbpn transforms vectors from GCRS to true equator (and
-**     CIO or equinox) of date, and therefore the Celestial Intermediate
-**     Pole unit vector is the bottom row of the matrix.
-**
-**  2) The arguments x,y are components of the Celestial Intermediate
-**     Pole unit vector in the Geocentric Celestial Reference System.
-**
-**  Reference:
-**
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154
-**     (2003)
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Extract the X,Y coordinates. */
-   *x = rbpn[2][0];
-   *y = rbpn[2][1];
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2i00a(double date1, double date2, double rc2i[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u C 2 i 0 0 a
-**  - - - - - - - - - -
-**
-**  Form the celestial-to-intermediate matrix for a given date using the
-**  IAU 2000A precession-nutation model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rc2i        double[3][3] celestial-to-intermediate matrix (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix rc2i is the first stage in the transformation from
-**     celestial to terrestrial coordinates:
-**
-**        [TRS]  =  RPOM * R_3(ERA) * rc2i * [CRS]
-**
-**               =  rc2t * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003), ERA is the Earth
-**     Rotation Angle and RPOM is the polar motion matrix.
-**
-**  3) A faster, but slightly less accurate result (about 1 mas), can be
-**     obtained by using instead the iauC2i00b function.
-**
-**  Called:
-**     iauPnm00a    classical NPB matrix, IAU 2000A
-**     iauC2ibpn    celestial-to-intermediate matrix, given NPB matrix
-**
-**  References:
-**
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154
-**     (2003)
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rbpn[3][3];
-
-
-/* Obtain the celestial-to-true matrix (IAU 2000A). */
-   iauPnm00a(date1, date2, rbpn);
-
-/* Form the celestial-to-intermediate matrix. */
-   iauC2ibpn(date1, date2, rbpn, rc2i);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2i00b(double date1, double date2, double rc2i[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u C 2 i 0 0 b
-**  - - - - - - - - - -
-**
-**  Form the celestial-to-intermediate matrix for a given date using the
-**  IAU 2000B precession-nutation model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rc2i        double[3][3] celestial-to-intermediate matrix (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix rc2i is the first stage in the transformation from
-**     celestial to terrestrial coordinates:
-**
-**        [TRS]  =  RPOM * R_3(ERA) * rc2i * [CRS]
-**
-**               =  rc2t * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003), ERA is the Earth
-**     Rotation Angle and RPOM is the polar motion matrix.
-**
-**  3) The present function is faster, but slightly less accurate (about
-**     1 mas), than the iauC2i00a function.
-**
-**  Called:
-**     iauPnm00b    classical NPB matrix, IAU 2000B
-**     iauC2ibpn    celestial-to-intermediate matrix, given NPB matrix
-**
-**  References:
-**
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154
-**     (2003)
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rbpn[3][3];
-
-
-/* Obtain the celestial-to-true matrix (IAU 2000B). */
-   iauPnm00b(date1, date2, rbpn);
-
-/* Form the celestial-to-intermediate matrix. */
-   iauC2ibpn(date1, date2, rbpn, rc2i);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2i06a(double date1, double date2, double rc2i[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u _ c 2 i 0 6 a
-**  - - - - - - - - - -
-**
-**  Form the celestial-to-intermediate matrix for a given date using the
-**  IAU 2006 precession and IAU 2000A nutation models.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rc2i        double[3][3] celestial-to-intermediate matrix (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix rc2i is the first stage in the transformation from
-**     celestial to terrestrial coordinates:
-**
-**        [TRS]  =  RPOM * R_3(ERA) * rc2i * [CRS]
-**
-**               =  RC2T * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003), ERA is the Earth
-**     Rotation Angle and RPOM is the polar motion matrix.
-**
-**  Called:
-**     iauPnm06a    classical NPB matrix, IAU 2006/2000A
-**     iauBpn2xy    extract CIP X,Y coordinates from NPB matrix
-**     iauS06       the CIO locator s, Given X,Y, IAU 2006
-**     iauC2ixys    celestial-to-intermediate matrix, Given X,Y and s
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG
-**
-**  This revision:  2008 May 13
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rbpn[3][3], x, y, s;
-
-
-/* Obtain the celestial-to-true matrix (IAU 2006/2000A). */
-   iauPnm06a(date1, date2, rbpn);
-
-/* Extract the X,Y coordinates. */
-   iauBpn2xy(rbpn, &x, &y);
-
-/* Obtain the CIO locator. */
-   s = iauS06(date1, date2, x, y);
-
-/* Form the celestial-to-intermediate matrix. */
-   iauC2ixys(x, y, s, rc2i);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2ibpn(double date1, double date2, double rbpn[3][3],
-               double rc2i[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u C 2 i b p n
-**  - - - - - - - - - -
-**
-**  Form the celestial-to-intermediate matrix for a given date given
-**  the bias-precession-nutation matrix.  IAU 2000.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
-**     rbpn        double[3][3] celestial-to-true matrix (Note 2)
-**
-**  Returned:
-**     rc2i        double[3][3] celestial-to-intermediate matrix (Note 3)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix rbpn transforms vectors from GCRS to true equator (and
-**     CIO or equinox) of date.  Only the CIP (bottom row) is used.
-**
-**  3) The matrix rc2i is the first stage in the transformation from
-**     celestial to terrestrial coordinates:
-**
-**        [TRS] = RPOM * R_3(ERA) * rc2i * [CRS]
-**
-**              = RC2T * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003), ERA is the Earth
-**     Rotation Angle and RPOM is the polar motion matrix.
-**
-**  4) Although its name does not include "00", This function is in fact
-**     specific to the IAU 2000 models.
-**
-**  Called:
-**     iauBpn2xy    extract CIP X,Y coordinates from NPB matrix
-**     iauC2ixy     celestial-to-intermediate matrix, given X,Y
-**
-**  References:
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double x, y;
-
-
-/* Extract the X,Y coordinates. */
-   iauBpn2xy(rbpn, &x, &y);
-
-/* Form the celestial-to-intermediate matrix (n.b. IAU 2000 specific). */
-   iauC2ixy(date1, date2, x, y, rc2i);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2ixy(double date1, double date2, double x, double y,
-              double rc2i[3][3])
-/*
-**  - - - - - - - - -
-**   i a u C 2 i x y
-**  - - - - - - - - -
-**
-**  Form the celestial to intermediate-frame-of-date matrix for a given
-**  date when the CIP X,Y coordinates are known.  IAU 2000.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
-**     x,y         double       Celestial Intermediate Pole (Note 2)
-**
-**  Returned:
-**     rc2i        double[3][3] celestial-to-intermediate matrix (Note 3)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The Celestial Intermediate Pole coordinates are the x,y components
-**     of the unit vector in the Geocentric Celestial Reference System.
-**
-**  3) The matrix rc2i is the first stage in the transformation from
-**     celestial to terrestrial coordinates:
-**
-**        [TRS] = RPOM * R_3(ERA) * rc2i * [CRS]
-**
-**              = RC2T * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003), ERA is the Earth
-**     Rotation Angle and RPOM is the polar motion matrix.
-**
-**  4) Although its name does not include "00", This function is in fact
-**     specific to the IAU 2000 models.
-**
-**  Called:
-**     iauC2ixys    celestial-to-intermediate matrix, given X,Y and s
-**     iauS00       the CIO locator s, given X,Y, IAU 2000A
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-
-{
-/* Compute s and then the matrix. */
-   iauC2ixys(x, y, iauS00(date1, date2, x, y), rc2i);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2ixys(double x, double y, double s, double rc2i[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u C 2 i x y s
-**  - - - - - - - - - -
-**
-**  Form the celestial to intermediate-frame-of-date matrix given the CIP
-**  X,Y and the CIO locator s.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     x,y      double         Celestial Intermediate Pole (Note 1)
-**     s        double         the CIO locator s (Note 2)
-**
-**  Returned:
-**     rc2i     double[3][3]   celestial-to-intermediate matrix (Note 3)
-**
-**  Notes:
-**
-**  1) The Celestial Intermediate Pole coordinates are the x,y
-**     components of the unit vector in the Geocentric Celestial
-**     Reference System.
-**
-**  2) The CIO locator s (in radians) positions the Celestial
-**     Intermediate Origin on the equator of the CIP.
-**
-**  3) The matrix rc2i is the first stage in the transformation from
-**     celestial to terrestrial coordinates:
-**
-**        [TRS] = RPOM * R_3(ERA) * rc2i * [CRS]
-**
-**              = RC2T * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003), ERA is the Earth
-**     Rotation Angle and RPOM is the polar motion matrix.
-**
-**  Called:
-**     iauIr        initialize r-matrix to identity
-**     iauRz        rotate around Z-axis
-**     iauRy        rotate around Y-axis
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double r2, e, d;
-
-
-/* Obtain the spherical angles E and d. */
-   r2 = x*x + y*y;
-   e = (r2 != 0.0) ? atan2(y, x) : 0.0;
-   d = atan(sqrt(r2 / (1.0 - r2)));
-
-/* Form the matrix. */
-   iauIr(rc2i);
-   iauRz(e, rc2i);
-   iauRy(d, rc2i);
-   iauRz(-(e+s), rc2i);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2s(double p[3], double *theta, double *phi)
-/*
-**  - - - - - - -
-**   i a u C 2 s
-**  - - - - - - -
-**
-**  P-vector to spherical coordinates.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     p      double[3]    p-vector
-**
-**  Returned:
-**     theta  double       longitude angle (radians)
-**     phi    double       latitude angle (radians)
-**
-**  Notes:
-**
-**  1) The vector p can have any magnitude; only its direction is used.
-**
-**  2) If p is null, zero theta and phi are returned.
-**
-**  3) At either pole, zero theta is returned.
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double x, y, z, d2;
-
-
-   x  = p[0];
-   y  = p[1];
-   z  = p[2];
-   d2 = x*x + y*y;
-
-   *theta = (d2 == 0.0) ? 0.0 : atan2(y, x);
-   *phi = (z == 0.0) ? 0.0 : atan2(z, sqrt(d2));
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2t00a(double tta, double ttb, double uta, double utb,
-               double xp, double yp, double rc2t[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u C 2 t 0 0 a
-**  - - - - - - - - - -
-**
-**  Form the celestial to terrestrial matrix given the date, the UT1 and
-**  the polar motion, using the IAU 2000A nutation model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     tta,ttb  double         TT as a 2-part Julian Date (Note 1)
-**     uta,utb  double         UT1 as a 2-part Julian Date (Note 1)
-**     xp,yp    double         coordinates of the pole (radians, Note 2)
-**
-**  Returned:
-**     rc2t     double[3][3]   celestial-to-terrestrial matrix (Note 3)
-**
-**  Notes:
-**
-**  1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates,
-**     apportioned in any convenient way between the arguments uta and
-**     utb.  For example, JD(UT1)=2450123.7 could be expressed in any of
-**     these ways, among others:
-**
-**             uta            utb
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution is
-**     acceptable.  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  In the case of uta,utb, the
-**     date & time method is best matched to the Earth rotation angle
-**     algorithm used:  maximum precision is delivered when the uta
-**     argument is for 0hrs UT1 on the day in question and the utb
-**     argument lies in the range 0 to 1, or vice versa.
-**
-**  2) The arguments xp and yp are the coordinates (in radians) of the
-**     Celestial Intermediate Pole with respect to the International
-**     Terrestrial Reference System (see IERS Conventions 2003),
-**     measured along the meridians to 0 and 90 deg west respectively.
-**
-**  3) The matrix rc2t transforms from celestial to terrestrial
-**     coordinates:
-**
-**        [TRS] = RPOM * R_3(ERA) * RC2I * [CRS]
-**
-**              = rc2t * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003), RC2I is the
-**     celestial-to-intermediate matrix, ERA is the Earth rotation
-**     angle and RPOM is the polar motion matrix.
-**
-**  4) A faster, but slightly less accurate result (about 1 mas), can
-**     be obtained by using instead the iauC2t00b function.
-**
-**  Called:
-**     iauC2i00a    celestial-to-intermediate matrix, IAU 2000A
-**     iauEra00     Earth rotation angle, IAU 2000
-**     iauSp00      the TIO locator s', IERS 2000
-**     iauPom00     polar motion matrix
-**     iauC2tcio    form CIO-based celestial-to-terrestrial matrix
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2009 April 1
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rc2i[3][3], era, sp, rpom[3][3];
-
-
-/* Form the celestial-to-intermediate matrix for this TT (IAU 2000A). */
-   iauC2i00a(tta, ttb, rc2i );
-
-/* Predict the Earth rotation angle for this UT1. */
-   era = iauEra00(uta, utb);
-
-/* Estimate s'. */
-   sp = iauSp00(tta, ttb);
-
-/* Form the polar motion matrix. */
-   iauPom00(xp, yp, sp, rpom);
-
-/* Combine to form the celestial-to-terrestrial matrix. */
-   iauC2tcio(rc2i, era, rpom, rc2t);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2t00b(double tta, double ttb, double uta, double utb,
-               double xp, double yp, double rc2t[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u C 2 t 0 0 b
-**  - - - - - - - - - -
-**
-**  Form the celestial to terrestrial matrix given the date, the UT1 and
-**  the polar motion, using the IAU 2000B nutation model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     tta,ttb  double         TT as a 2-part Julian Date (Note 1)
-**     uta,utb  double         UT1 as a 2-part Julian Date (Note 1)
-**     xp,yp    double         coordinates of the pole (radians, Note 2)
-**
-**  Returned:
-**     rc2t     double[3][3]   celestial-to-terrestrial matrix (Note 3)
-**
-**  Notes:
-**
-**  1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates,
-**     apportioned in any convenient way between the arguments uta and
-**     utb.  For example, JD(UT1)=2450123.7 could be expressed in any of
-**     these ways, among others:
-**
-**             uta            utb
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution is
-**     acceptable.  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  In the case of uta,utb, the
-**     date & time method is best matched to the Earth rotation angle
-**     algorithm used:  maximum precision is delivered when the uta
-**     argument is for 0hrs UT1 on the day in question and the utb
-**     argument lies in the range 0 to 1, or vice versa.
-**
-**  2) The arguments xp and yp are the coordinates (in radians) of the
-**     Celestial Intermediate Pole with respect to the International
-**     Terrestrial Reference System (see IERS Conventions 2003),
-**     measured along the meridians to 0 and 90 deg west respectively.
-**
-**  3) The matrix rc2t transforms from celestial to terrestrial
-**     coordinates:
-**
-**        [TRS] = RPOM * R_3(ERA) * RC2I * [CRS]
-**
-**              = rc2t * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003), RC2I is the
-**     celestial-to-intermediate matrix, ERA is the Earth rotation
-**     angle and RPOM is the polar motion matrix.
-**
-**  4) The present function is faster, but slightly less accurate (about
-**     1 mas), than the iauC2t00a function.
-**
-**  Called:
-**     iauC2i00b    celestial-to-intermediate matrix, IAU 2000B
-**     iauEra00     Earth rotation angle, IAU 2000
-**     iauPom00     polar motion matrix
-**     iauC2tcio    form CIO-based celestial-to-terrestrial matrix
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2009 April 1
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rc2i[3][3], era, rpom[3][3];
-
-
-/* Form the celestial-to-intermediate matrix for this TT (IAU 2000B). */
-   iauC2i00b(tta, ttb, rc2i);
-
-/* Predict the Earth rotation angle for this UT1. */
-   era = iauEra00(uta, utb);
-
-/* Form the polar motion matrix (neglecting s'). */
-   iauPom00(xp, yp, 0.0, rpom);
-
-/* Combine to form the celestial-to-terrestrial matrix. */
-   iauC2tcio(rc2i, era, rpom, rc2t);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2t06a(double tta, double ttb, double uta, double utb,
-               double xp, double yp, double rc2t[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u C 2 t 0 6 a
-**  - - - - - - - - - -
-**
-**  Form the celestial to terrestrial matrix given the date, the UT1 and
-**  the polar motion, using the IAU 2006 precession and IAU 2000A
-**  nutation models.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     tta,ttb  double         TT as a 2-part Julian Date (Note 1)
-**     uta,utb  double         UT1 as a 2-part Julian Date (Note 1)
-**     xp,yp    double         coordinates of the pole (radians, Note 2)
-**
-**  Returned:
-**     rc2t     double[3][3]   celestial-to-terrestrial matrix (Note 3)
-**
-**  Notes:
-**
-**  1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates,
-**     apportioned in any convenient way between the arguments uta and
-**     utb.  For example, JD(UT1)=2450123.7 could be expressed in any of
-**     these ways, among others:
-**
-**             uta            utb
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution is
-**     acceptable.  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  In the case of uta,utb, the
-**     date & time method is best matched to the Earth rotation angle
-**     algorithm used:  maximum precision is delivered when the uta
-**     argument is for 0hrs UT1 on the day in question and the utb
-**     argument lies in the range 0 to 1, or vice versa.
-**
-**  2) The arguments xp and yp are the coordinates (in radians) of the
-**     Celestial Intermediate Pole with respect to the International
-**     Terrestrial Reference System (see IERS Conventions 2003),
-**     measured along the meridians to 0 and 90 deg west respectively.
-**
-**  3) The matrix rc2t transforms from celestial to terrestrial
-**     coordinates:
-**
-**        [TRS] = RPOM * R_3(ERA) * RC2I * [CRS]
-**
-**              = rc2t * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003), RC2I is the
-**     celestial-to-intermediate matrix, ERA is the Earth rotation
-**     angle and RPOM is the polar motion matrix.
-**
-**  Called:
-**     iauC2i06a    celestial-to-intermediate matrix, IAU 2006/2000A
-**     iauEra00     Earth rotation angle, IAU 2000
-**     iauSp00      the TIO locator s', IERS 2000
-**     iauPom00     polar motion matrix
-**     iauC2tcio    form CIO-based celestial-to-terrestrial matrix
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG
-**
-**  This revision:  2009 April 1
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rc2i[3][3], era, sp, rpom[3][3];
-
-
-/* Form the celestial-to-intermediate matrix for this TT. */
-   iauC2i06a(tta, ttb, rc2i);
-
-/* Predict the Earth rotation angle for this UT1. */
-   era = iauEra00(uta, utb);
-
-/* Estimate s'. */
-   sp = iauSp00(tta, ttb);
-
-/* Form the polar motion matrix. */
-   iauPom00(xp, yp, sp, rpom);
-
-/* Combine to form the celestial-to-terrestrial matrix. */
-   iauC2tcio(rc2i, era, rpom, rc2t);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2tcio(double rc2i[3][3], double era, double rpom[3][3],
-               double rc2t[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u C 2 t c i o
-**  - - - - - - - - - -
-**
-**  Assemble the celestial to terrestrial matrix from CIO-based
-**  components (the celestial-to-intermediate matrix, the Earth Rotation
-**  Angle and the polar motion matrix).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     rc2i     double[3][3]    celestial-to-intermediate matrix
-**     era      double          Earth rotation angle
-**     rpom     double[3][3]    polar-motion matrix
-**
-**  Returned:
-**     rc2t     double[3][3]    celestial-to-terrestrial matrix
-**
-**  Notes:
-**
-**  1) This function constructs the rotation matrix that transforms
-**     vectors in the celestial system into vectors in the terrestrial
-**     system.  It does so starting from precomputed components, namely
-**     the matrix which rotates from celestial coordinates to the
-**     intermediate frame, the Earth rotation angle and the polar motion
-**     matrix.  One use of the present function is when generating a
-**     series of celestial-to-terrestrial matrices where only the Earth
-**     Rotation Angle changes, avoiding the considerable overhead of
-**     recomputing the precession-nutation more often than necessary to
-**     achieve given accuracy objectives.
-**
-**  2) The relationship between the arguments is as follows:
-**
-**        [TRS] = RPOM * R_3(ERA) * rc2i * [CRS]
-**
-**              = rc2t * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003).
-**
-**  Called:
-**     iauCr        copy r-matrix
-**     iauRz        rotate around Z-axis
-**     iauRxr       product of two r-matrices
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double r[3][3];
-
-
-/* Construct the matrix. */
-   iauCr(rc2i, r);
-   iauRz(era, r);
-   iauRxr(rpom, r, rc2t);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2teqx(double rbpn[3][3], double gst, double rpom[3][3],
-               double rc2t[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u C 2 t e q x
-**  - - - - - - - - - -
-**
-**  Assemble the celestial to terrestrial matrix from equinox-based
-**  components (the celestial-to-true matrix, the Greenwich Apparent
-**  Sidereal Time and the polar motion matrix).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     rbpn     double[3][3]    celestial-to-true matrix
-**     gst      double          Greenwich (apparent) Sidereal Time
-**     rpom     double[3][3]    polar-motion matrix
-**
-**  Returned:
-**     rc2t     double[3][3]    celestial-to-terrestrial matrix (Note 2)
-**
-**  Notes:
-**
-**  1) This function constructs the rotation matrix that transforms
-**     vectors in the celestial system into vectors in the terrestrial
-**     system.  It does so starting from precomputed components, namely
-**     the matrix which rotates from celestial coordinates to the
-**     true equator and equinox of date, the Greenwich Apparent Sidereal
-**     Time and the polar motion matrix.  One use of the present function
-**     is when generating a series of celestial-to-terrestrial matrices
-**     where only the Sidereal Time changes, avoiding the considerable
-**     overhead of recomputing the precession-nutation more often than
-**     necessary to achieve given accuracy objectives.
-**
-**  2) The relationship between the arguments is as follows:
-**
-**        [TRS] = rpom * R_3(gst) * rbpn * [CRS]
-**
-**              = rc2t * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003).
-**
-**  Called:
-**     iauCr        copy r-matrix
-**     iauRz        rotate around Z-axis
-**     iauRxr       product of two r-matrices
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double r[3][3];
-
-
-/* Construct the matrix. */
-   iauCr(rbpn, r);
-   iauRz(gst, r);
-   iauRxr(rpom, r, rc2t);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2tpe(double tta, double ttb, double uta, double utb,
-              double dpsi, double deps, double xp, double yp,
-              double rc2t[3][3])
-/*
-**  - - - - - - - - -
-**   i a u C 2 t p e
-**  - - - - - - - - -
-**
-**  Form the celestial to terrestrial matrix given the date, the UT1,
-**  the nutation and the polar motion.  IAU 2000.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     tta,ttb    double        TT as a 2-part Julian Date (Note 1)
-**     uta,utb    double        UT1 as a 2-part Julian Date (Note 1)
-**     dpsi,deps  double        nutation (Note 2)
-**     xp,yp      double        coordinates of the pole (radians, Note 3)
-**
-**  Returned:
-**     rc2t       double[3][3]  celestial-to-terrestrial matrix (Note 4)
-**
-**  Notes:
-**
-**  1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates,
-**     apportioned in any convenient way between the arguments uta and
-**     utb.  For example, JD(UT1)=2450123.7 could be expressed in any of
-**     these ways, among others:
-**
-**             uta            utb
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution is
-**     acceptable.  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  In the case of uta,utb, the
-**     date & time method is best matched to the Earth rotation angle
-**     algorithm used:  maximum precision is delivered when the uta
-**     argument is for 0hrs UT1 on the day in question and the utb
-**     argument lies in the range 0 to 1, or vice versa.
-**
-**  2) The caller is responsible for providing the nutation components;
-**     they are in longitude and obliquity, in radians and are with
-**     respect to the equinox and ecliptic of date.  For high-accuracy
-**     applications, free core nutation should be included as well as
-**     any other relevant corrections to the position of the CIP.
-**
-**  3) The arguments xp and yp are the coordinates (in radians) of the
-**     Celestial Intermediate Pole with respect to the International
-**     Terrestrial Reference System (see IERS Conventions 2003),
-**     measured along the meridians to 0 and 90 deg west respectively.
-**
-**  4) The matrix rc2t transforms from celestial to terrestrial
-**     coordinates:
-**
-**        [TRS] = RPOM * R_3(GST) * RBPN * [CRS]
-**
-**              = rc2t * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003), RBPN is the
-**     bias-precession-nutation matrix, GST is the Greenwich (apparent)
-**     Sidereal Time and RPOM is the polar motion matrix.
-**
-**  5) Although its name does not include "00", This function is in fact
-**     specific to the IAU 2000 models.
-**
-**  Called:
-**     iauPn00      bias/precession/nutation results, IAU 2000
-**     iauGmst00    Greenwich mean sidereal time, IAU 2000
-**     iauSp00      the TIO locator s', IERS 2000
-**     iauEe00      equation of the equinoxes, IAU 2000
-**     iauPom00     polar motion matrix
-**     iauC2teqx    form equinox-based celestial-to-terrestrial matrix
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2009 April 1
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double epsa, rb[3][3], rp[3][3], rbp[3][3], rn[3][3],
-          rbpn[3][3], gmst, ee, sp, rpom[3][3];
-
-
-/* Form the celestial-to-true matrix for this TT. */
-   iauPn00(tta, ttb, dpsi, deps, &epsa, rb, rp, rbp, rn, rbpn);
-
-/* Predict the Greenwich Mean Sidereal Time for this UT1 and TT. */
-   gmst = iauGmst00(uta, utb, tta, ttb);
-
-/* Predict the equation of the equinoxes given TT and nutation. */
-   ee = iauEe00(tta, ttb, epsa, dpsi);
-
-/* Estimate s'. */
-   sp = iauSp00(tta, ttb);
-
-/* Form the polar motion matrix. */
-   iauPom00(xp, yp, sp, rpom);
-
-/* Combine to form the celestial-to-terrestrial matrix. */
-   iauC2teqx(rbpn, gmst + ee, rpom, rc2t);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauC2txy(double tta, double ttb, double uta, double utb,
-              double x, double y, double xp, double yp,
-              double rc2t[3][3])
-/*
-**  - - - - - - - - -
-**   i a u C 2 t x y
-**  - - - - - - - - -
-**
-**  Form the celestial to terrestrial matrix given the date, the UT1,
-**  the CIP coordinates and the polar motion.  IAU 2000.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     tta,ttb  double         TT as a 2-part Julian Date (Note 1)
-**     uta,utb  double         UT1 as a 2-part Julian Date (Note 1)
-**     x,y      double         Celestial Intermediate Pole (Note 2)
-**     xp,yp    double         coordinates of the pole (radians, Note 3)
-**
-**  Returned:
-**     rc2t     double[3][3]   celestial-to-terrestrial matrix (Note 4)
-**
-**  Notes:
-**
-**  1) The TT and UT1 dates tta+ttb and uta+utb are Julian Dates,
-**     apportioned in any convenient way between the arguments uta and
-**     utb.  For example, JD(UT1)=2450123.7 could be expressed in any o
-**     these ways, among others:
-**
-**             uta            utb
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution is
-**     acceptable.  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  In the case of uta,utb, the
-**     date & time method is best matched to the Earth rotation angle
-**     algorithm used:  maximum precision is delivered when the uta
-**     argument is for 0hrs UT1 on the day in question and the utb
-**     argument lies in the range 0 to 1, or vice versa.
-**
-**  2) The Celestial Intermediate Pole coordinates are the x,y
-**     components of the unit vector in the Geocentric Celestial
-**     Reference System.
-**
-**  3) The arguments xp and yp are the coordinates (in radians) of the
-**     Celestial Intermediate Pole with respect to the International
-**     Terrestrial Reference System (see IERS Conventions 2003),
-**     measured along the meridians to 0 and 90 deg west respectively.
-**
-**  4) The matrix rc2t transforms from celestial to terrestrial
-**     coordinates:
-**
-**        [TRS] = RPOM * R_3(ERA) * RC2I * [CRS]
-**
-**              = rc2t * [CRS]
-**
-**     where [CRS] is a vector in the Geocentric Celestial Reference
-**     System and [TRS] is a vector in the International Terrestrial
-**     Reference System (see IERS Conventions 2003), ERA is the Earth
-**     Rotation Angle and RPOM is the polar motion matrix.
-**
-**  5) Although its name does not include "00", This function is in fact
-**     specific to the IAU 2000 models.
-**
-**  Called:
-**     iauC2ixy     celestial-to-intermediate matrix, given X,Y
-**     iauEra00     Earth rotation angle, IAU 2000
-**     iauSp00      the TIO locator s', IERS 2000
-**     iauPom00     polar motion matrix
-**     iauC2tcio    form CIO-based celestial-to-terrestrial matrix
-**
-** Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2009 April 1
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rc2i[3][3], era, sp, rpom[3][3];
-
-
-/* Form the celestial-to-intermediate matrix for this TT. */
-   iauC2ixy(tta, ttb, x, y, rc2i);
-
-/* Predict the Earth rotation angle for this UT1. */
-   era = iauEra00(uta, utb);
-
-/* Estimate s'. */
-   sp = iauSp00(tta, ttb);
-
-/* Form the polar motion matrix. */
-   iauPom00(xp, yp, sp, rpom);
-
-/* Combine to form the celestial-to-terrestrial matrix. */
-   iauC2tcio(rc2i, era, rpom, rc2t);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauCal2jd(int iy, int im, int id, double *djm0, double *djm)
-/*
-**  - - - - - - - - - -
-**   i a u C a l 2 j d
-**  - - - - - - - - - -
-**
-**  Gregorian Calendar to Julian Date.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     iy,im,id  int     year, month, day in Gregorian calendar (Note 1)
-**
-**  Returned:
-**     djm0      double  MJD zero-point: always 2400000.5
-**     djm       double  Modified Julian Date for 0 hrs
-**
-**  Returned (function value):
-**               int     status:
-**                           0 = OK
-**                          -1 = bad year   (Note 3: JD not computed)
-**                          -2 = bad month  (JD not computed)
-**                          -3 = bad day    (JD computed)
-**
-**  Notes:
-**
-**  1) The algorithm used is valid from -4800 March 1, but this
-**     implementation rejects dates before -4799 January 1.
-**
-**  2) The Julian Date is returned in two pieces, in the usual SOFA
-**     manner, which is designed to preserve time resolution.  The
-**     Julian Date is available as a single number by adding djm0 and
-**     djm.
-**
-**  3) In early eras the conversion is from the "Proleptic Gregorian
-**     Calendar";  no account is taken of the date(s) of adoption of
-**     the Gregorian Calendar, nor is the AD/BC numbering convention
-**     observed.
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     Section 12.92 (p604).
-**
-**  This revision:  2009 October 19
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int j, ly, my;
-   long iypmy;
-
-/* Earliest year allowed (4800BC) */
-   const int IYMIN = -4799;
-
-/* Month lengths in days */
-   static const int mtab[]
-                     = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
-
-
-/* Preset status. */
-   j = 0;
-
-/* Validate year and month. */
-   if (iy < IYMIN) return -1;
-   if (im < 1 || im > 12) return -2;
-
-/* If February in a leap year, 1, otherwise 0. */
-   ly = ((im == 2) && !(iy%4) && (iy%100 || !(iy%400)));
-
-/* Validate day, taking into account leap years. */
-   if ( (id < 1) || (id > (mtab[im-1] + ly))) j = -3;
-
-/* Return result. */
-   my = (im - 14) / 12;
-   iypmy = (long) (iy + my);
-   *djm0 = 2400000.5;
-   *djm = (double)((1461L * (iypmy + 4800L)) / 4L
-                 + (367L * (long) (im - 2 - 12 * my)) / 12L
-                 - (3L * ((iypmy + 4900L) / 100L)) / 4L
-                 + (long) id - 2432076L);
-
-/* Return status. */
-   return j;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauCp(double p[3], double c[3])
-/*
-**  - - - - - -
-**   i a u C p
-**  - - - - - -
-**
-**  Copy a p-vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     p        double[3]     p-vector to be copied
-**
-**  Returned:
-**     c        double[3]     copy
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   c[0] = p[0];
-   c[1] = p[1];
-   c[2] = p[2];
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauCpv(double pv[2][3], double c[2][3])
-/*
-**  - - - - - - -
-**   i a u C p v
-**  - - - - - - -
-**
-**  Copy a position/velocity vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     pv     double[2][3]    position/velocity vector to be copied
-**
-**  Returned:
-**     c      double[2][3]    copy
-**
-**  Called:
-**     iauCp        copy p-vector
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauCp(pv[0], c[0]);
-   iauCp(pv[1], c[1]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauCr(double r[3][3], double c[3][3])
-/*
-**  - - - - - -
-**   i a u C r
-**  - - - - - -
-**
-**  Copy an r-matrix.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     r        double[3][3]    r-matrix to be copied
-**
-**  Returned:
-**   char[]     double[3][3]    copy
-**
-**  Called:
-**     iauCp        copy p-vector
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauCp(r[0], c[0]);
-   iauCp(r[1], c[1]);
-   iauCp(r[2], c[2]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-#include <string.h>
-
-int iauD2dtf(const char *scale, int ndp, double d1, double d2,
-             int *iy, int *im, int *id, int ihmsf[4])
-/*
-**  - - - - - - - - -
-**   i a u D 2 d t f
-**  - - - - - - - - -
-**
-**  Format for output a 2-part Julian Date (or in the case of UTC a
-**  quasi-JD form that includes special provision for leap seconds).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     scale     char[]  time scale ID (Note 1)
-**     ndp       int     resolution (Note 2)
-**     d1,d2     double  time as a 2-part Julian Date (Notes 3,4)
-**
-**  Returned:
-**     iy,im,id  int     year, month, day in Gregorian calendar (Note 5)
-**     ihmsf     int[4]  hours, minutes, seconds, fraction (Note 1)
-**
-**  Returned (function value):
-**               int     status: +1 = dubious year (Note 5)
-**                                0 = OK
-**                               -1 = unacceptable date (Note 6)
-**
-**  Notes:
-**
-**  1) scale identifies the time scale.  Only the value "UTC" (in upper
-**     case) is significant, and enables handling of leap seconds (see
-**     Note 4).
-**
-**  2) ndp is the number of decimal places in the seconds field, and can
-**     have negative as well as positive values, such as:
-**
-**     ndp         resolution
-**     -4            1 00 00
-**     -3            0 10 00
-**     -2            0 01 00
-**     -1            0 00 10
-**      0            0 00 01
-**      1            0 00 00.1
-**      2            0 00 00.01
-**      3            0 00 00.001
-**
-**     The limits are platform dependent, but a safe range is -5 to +9.
-**
-**  3) d1+d2 is Julian Date, apportioned in any convenient way between
-**     the two arguments, for example where d1 is the Julian Day Number
-**     and d2 is the fraction of a day.  In the case of UTC, where the
-**     use of JD is problematical, special conventions apply:  see the
-**     next note.
-**
-**  4) JD cannot unambiguously represent UTC during a leap second unless
-**     special measures are taken.  The SOFA internal convention is that
-**     the quasi-JD day represents UTC days whether the length is 86399,
-**     86400 or 86401 SI seconds.
-**
-**  5) The warning status "dubious year" flags UTCs that predate the
-**     introduction of the time scale and that are too far in the future
-**     to be trusted.  See iauDat for further details.
-**
-**  6) For calendar conventions and limitations, see iauCal2jd.
-**
-**  Called:
-**     iauJd2cal    JD to Gregorian calendar
-**     iauD2tf      decompose days to hms
-**     iauDat       delta(AT) = TAI-UTC
-**
-**  This revision:  2012 February 12
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int leap;
-   char s;
-   int iy1, im1, id1, js, iy2, im2, id2, ihmsf1[4], i;
-   double a1, b1, fd, dat1, w, dat2, ddt;
-
-/* The two-part JD. */
-   a1 = d1;
-   b1 = d2;
-
-/* Provisional calendar date. */
-   js = iauJd2cal(a1, b1, &iy1, &im1, &id1, &fd);
-   if ( js ) return js < 0 ? -1 : js;
-
-/* Is this a leap second day? */
-   leap = 0;
-   if ( ! strcmp(scale,"UTC") ) {
-
-   /* TAI-UTC today. */
-      js = iauDat(iy1, im1, id1, fd, &dat1);
-      if ( js < 0 ) return -1;
-
-   /* TAI-UTC tomorrow (at noon, to avoid rounding effects). */
-      js = iauJd2cal(a1+1.5, b1-fd, &iy2, &im2, &id2, &w);
-      js = iauDat(iy2, im2, id2, 0.0, &dat2);
-      if ( js < 0 ) return -1;
-
-   /* The change in TAI-UTC (seconds). */
-      ddt = dat2 - dat1;
-
-   /* If leap second day, scale the fraction of a day into SI. */
-      leap = fabs(ddt) > 0.5;
-      if (leap) fd += fd * ddt/DAYSEC;
-   }
-
-/* Provisional time of day. */
-   iauD2tf ( ndp, fd, &s, ihmsf1 );
-
-/* Is this a leap second day? */
-   if ( ! leap ) {
-
-   /* No.  Has the time rounded up to 24h? */
-      if ( ihmsf1[0] > 23 ) {
-
-      /* Yes.  We will need tomorrow's calendar date. */
-         js = iauJd2cal(a1+1.5, b1-fd, &iy2, &im2, &id2, &w);
-
-      /* Use 0h tomorrow. */
-         iy1 = iy2;
-         im1 = im2;
-         id1 = id2;
-         for ( i = 0; i < 4; i++ ) {
-            ihmsf1[i] = 0;
-         }
-      }
-   } else {
-
-   /* This is a leap second day.  Has the time reached or passed 24h? */
-      if ( ihmsf1[0] > 23 ) {
-
-      /* Yes.  Use 23 59 60... */
-         ihmsf1[0] = 23;
-         ihmsf1[1] = 59;
-         ihmsf1[2] = 60;
-      }
-   }
-
-/* Results. */
-   *iy = iy1;
-   *im = im1;
-   *id = id1;
-   for ( i = 0; i < 4; i++ ) {
-      ihmsf[i] = ihmsf1[i];
-   }
-
-/* Status. */
-   return js < 0 ? -1 : js;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauD2tf(int ndp, double days, char *sign, int ihmsf[4])
-/*
-**  - - - - - - - -
-**   i a u D 2 t f
-**  - - - - - - - -
-**
-**  Decompose days to hours, minutes, seconds, fraction.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     ndp     int     resolution (Note 1)
-**     days    double  interval in days
-**
-**  Returned:
-**     sign    char    '+' or '-'
-**     ihmsf   int[4]  hours, minutes, seconds, fraction
-**
-**  Notes:
-**
-**  1) The argument ndp is interpreted as follows:
-**
-**     ndp         resolution
-**      :      ...0000 00 00
-**     -7         1000 00 00
-**     -6          100 00 00
-**     -5           10 00 00
-**     -4            1 00 00
-**     -3            0 10 00
-**     -2            0 01 00
-**     -1            0 00 10
-**      0            0 00 01
-**      1            0 00 00.1
-**      2            0 00 00.01
-**      3            0 00 00.001
-**      :            0 00 00.000...
-**
-**  2) The largest positive useful value for ndp is determined by the
-**     size of days, the format of double on the target platform, and
-**     the risk of overflowing ihmsf[3].  On a typical platform, for
-**     days up to 1.0, the available floating-point precision might
-**     correspond to ndp=12.  However, the practical limit is typically
-**     ndp=9, set by the capacity of a 32-bit int, or ndp=4 if int is
-**     only 16 bits.
-**
-**  3) The absolute value of days may exceed 1.0.  In cases where it
-**     does not, it is up to the caller to test for and handle the
-**     case where days is very nearly 1.0 and rounds up to 24 hours,
-**     by testing for ihmsf[0]=24 and setting ihmsf[0-3] to zero.
-**
-**  This revision:  2008 May 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int nrs, n;
-   double rs, rm, rh, a, w, ah, am, as, af;
-
-
-/* Handle sign. */
-   *sign = (char) ( ( days >= 0.0 ) ? '+' : '-' );
-
-/* Interval in seconds. */
-   a = DAYSEC * fabs(days);
-
-/* Pre-round if resolution coarser than 1s (then pretend ndp=1). */
-   if (ndp < 0) {
-      nrs = 1;
-      for (n = 1; n <= -ndp; n++) {
-          nrs *= (n == 2 || n == 4) ? 6 : 10;
-      }
-      rs = (double) nrs;
-      w = a / rs;
-      a = rs * dnint(w);
-   }
-
-/* Express the unit of each field in resolution units. */
-   nrs = 1;
-   for (n = 1; n <= ndp; n++) {
-      nrs *= 10;
-   }
-   rs = (double) nrs;
-   rm = rs * 60.0;
-   rh = rm * 60.0;
-
-/* Round the interval and express in resolution units. */
-   a = dnint(rs * a);
-
-/* Break into fields. */
-   ah = a / rh;
-   ah = dint(ah);
-   a -= ah * rh;
-   am = a / rm;
-   am = dint(am);
-   a -= am * rm;
-   as = a / rs;
-   as = dint(as);
-   af = a - as * rs;
-
-/* Return results. */
-   ihmsf[0] = (int) ah;
-   ihmsf[1] = (int) am;
-   ihmsf[2] = (int) as;
-   ihmsf[3] = (int) af;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauDat(int iy, int im, int id, double fd, double *deltat )
-/*
-**  - - - - - - -
-**   i a u D a t
-**  - - - - - - -
-**
-**  For a given UTC date, calculate delta(AT) = TAI-UTC.
-**
-**     :------------------------------------------:
-**     :                                          :
-**     :                 IMPORTANT                :
-**     :                                          :
-**     :  A new version of this function must be  :
-**     :  produced whenever a new leap second is  :
-**     :  announced.  There are four items to     :
-**     :  change on each such occasion:           :
-**     :                                          :
-**     :  1) A new line must be added to the set  :
-**     :     of statements that initialize the    :
-**     :     array "changes".                     :
-**     :                                          :
-**     :  2) The parameter IYV must be set to     :
-**     :     the current year.                    :
-**     :                                          :
-**     :  3) The "Latest leap second" comment     :
-**     :     below must be set to the new leap    :
-**     :     second date.                         :
-**     :                                          :
-**     :  4) The "This revision" comment, later,  :
-**     :     must be set to the current date.     :
-**     :                                          :
-**     :  Change (2) must also be carried out     :
-**     :  whenever the function is re-issued,     :
-**     :  even if no leap seconds have been       :
-**     :  added.                                  :
-**     :                                          :
-**     :  Latest leap second:  2012 June 30       :
-**     :                                          :
-**     :__________________________________________:
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     iy     int      UTC:  year (Notes 1 and 2)
-**     im     int            month (Note 2)
-**     id     int            day (Notes 2 and 3)
-**     fd     double         fraction of day (Note 4)
-**
-**  Returned:
-**     deltat double   TAI minus UTC, seconds
-**
-**  Returned (function value):
-**            int      status (Note 5):
-**                       1 = dubious year (Note 1)
-**                       0 = OK
-**                      -1 = bad year
-**                      -2 = bad month
-**                      -3 = bad day (Note 3)
-**                      -4 = bad fraction (Note 4)
-**
-**  Notes:
-**
-**  1) UTC began at 1960 January 1.0 (JD 2436934.5) and it is improper
-**     to call the function with an earlier date.  If this is attempted,
-**     zero is returned together with a warning status.
-**
-**     Because leap seconds cannot, in principle, be predicted in
-**     advance, a reliable check for dates beyond the valid range is
-**     impossible.  To guard against gross errors, a year five or more
-**     after the release year of the present function (see parameter
-**     IYV) is considered dubious.  In this case a warning status is
-**     returned but the result is computed in the normal way.
-**
-**     For both too-early and too-late years, the warning status is
-**     j=+1.  This is distinct from the error status j=-1, which
-**     signifies a year so early that JD could not be computed.
-**
-**  2) If the specified date is for a day which ends with a leap second,
-**     the UTC-TAI value returned is for the period leading up to the
-**     leap second.  If the date is for a day which begins as a leap
-**     second ends, the UTC-TAI returned is for the period following the
-**     leap second.
-**
-**  3) The day number must be in the normal calendar range, for example
-**     1 through 30 for April.  The "almanac" convention of allowing
-**     such dates as January 0 and December 32 is not supported in this
-**     function, in order to avoid confusion near leap seconds.
-**
-**  4) The fraction of day is used only for dates before the
-**     introduction of leap seconds, the first of which occurred at the
-**     end of 1971.  It is tested for validity (zero to less than 1 is
-**     the valid range) even if not used;  if invalid, zero is used and
-**     status j=-4 is returned.  For many applications, setting fd to
-**     zero is acceptable;  the resulting error is always less than 3 ms
-**     (and occurs only pre-1972).
-**
-**  5) The status value returned in the case where there are multiple
-**     errors refers to the first error detected.  For example, if the
-**     month and day are 13 and 32 respectively, j=-2 (bad month)
-**     will be returned.
-**
-**  6) In cases where a valid result is not available, zero is returned.
-**
-**  References:
-**
-**  1) For dates from 1961 January 1 onwards, the expressions from the
-**     file ftp://maia.usno.navy.mil/ser7/tai-utc.dat are used.
-**
-**  2) The 5ms timestep at 1961 January 1 is taken from 2.58.1 (p87) of
-**     the 1992 Explanatory Supplement.
-**
-**  Called:
-**     iauCal2jd    Gregorian calendar to Julian Day number
-**
-**  This revision:  2012 January 5
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Release year for this version of iauDat */
-#define IYV (2012)
-
-/* Reference dates (MJD) and drift rates (s/day), pre leap seconds */
-   static const double drift[][2] = {
-      { 37300.0, 0.0012960 },
-      { 37300.0, 0.0012960 },
-      { 37300.0, 0.0012960 },
-      { 37665.0, 0.0011232 },
-      { 37665.0, 0.0011232 },
-      { 38761.0, 0.0012960 },
-      { 38761.0, 0.0012960 },
-      { 38761.0, 0.0012960 },
-      { 38761.0, 0.0012960 },
-      { 38761.0, 0.0012960 },
-      { 38761.0, 0.0012960 },
-      { 38761.0, 0.0012960 },
-      { 39126.0, 0.0025920 },
-      { 39126.0, 0.0025920 }
-   };
-
-/* Number of Delta(AT) expressions before leap seconds were introduced */
-#define NERA1 ((int) (sizeof drift / sizeof (double) / 2))
-
-/* Dates and Delta(AT)s */
-   static const struct {
-      int iyear, month;
-      double delat;
-   } changes[] = {
-      { 1960,  1,  1.4178180 },
-      { 1961,  1,  1.4228180 },
-      { 1961,  8,  1.3728180 },
-      { 1962,  1,  1.8458580 },
-      { 1963, 11,  1.9458580 },
-      { 1964,  1,  3.2401300 },
-      { 1964,  4,  3.3401300 },
-      { 1964,  9,  3.4401300 },
-      { 1965,  1,  3.5401300 },
-      { 1965,  3,  3.6401300 },
-      { 1965,  7,  3.7401300 },
-      { 1965,  9,  3.8401300 },
-      { 1966,  1,  4.3131700 },
-      { 1968,  2,  4.2131700 },
-      { 1972,  1, 10.0       },
-      { 1972,  7, 11.0       },
-      { 1973,  1, 12.0       },
-      { 1974,  1, 13.0       },
-      { 1975,  1, 14.0       },
-      { 1976,  1, 15.0       },
-      { 1977,  1, 16.0       },
-      { 1978,  1, 17.0       },
-      { 1979,  1, 18.0       },
-      { 1980,  1, 19.0       },
-      { 1981,  7, 20.0       },
-      { 1982,  7, 21.0       },
-      { 1983,  7, 22.0       },
-      { 1985,  7, 23.0       },
-      { 1988,  1, 24.0       },
-      { 1990,  1, 25.0       },
-      { 1991,  1, 26.0       },
-      { 1992,  7, 27.0       },
-      { 1993,  7, 28.0       },
-      { 1994,  7, 29.0       },
-      { 1996,  1, 30.0       },
-      { 1997,  7, 31.0       },
-      { 1999,  1, 32.0       },
-      { 2006,  1, 33.0       },
-      { 2009,  1, 34.0       },
-      { 2012,  7, 35.0       }
-   };
-
-/* Number of Delta(AT) changes */
-   const int NDAT = sizeof changes / sizeof changes[0];
-
-/* Miscellaneous local variables */
-   int j, i, m;
-   double da, djm0, djm;
-
-
-/* Initialize the result to zero. */
-   *deltat = da = 0.0;
-
-/* If invalid fraction of a day, set error status and give up. */
-   if (fd < 0.0 || fd >= 1.0) return -4;
-
-/* Convert the date into an MJD. */
-   j = iauCal2jd(iy, im, id, &djm0, &djm);
-
-/* If invalid year, month, or day, give up. */
-   if (j < 0) return j;
-
-/* If pre-UTC year, set warning status and give up. */
-   if (iy < changes[0].iyear) return 1;
-
-/* If suspiciously late year, set warning status but proceed. */
-   if (iy > IYV + 5) j = 1;
-
-/* Combine year and month to form a date-ordered integer... */
-   m = 12*iy + im;
-
-/* ...and use it to find the preceding table entry. */
-   for (i = NDAT-1; i >=0; i--) {
-      if (m >= (12 * changes[i].iyear + changes[i].month)) break;
-   }
-
-/* Get the Delta(AT). */
-   da = changes[i].delat;
-
-/* If pre-1972, adjust for drift. */
-   if (i < NERA1) da += (djm + fd - drift[i][0]) * drift[i][1];
-
-/* Return the Delta(AT) value. */
-   *deltat = da;
-
-/* Return the status. */
-   return j;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauDtdb(double date1, double date2,
-               double ut, double elong, double u, double v)
-/*
-**  - - - - - - - -
-**   i a u D t d b
-**  - - - - - - - -
-**
-**  An approximation to TDB-TT, the difference between barycentric
-**  dynamical time and terrestrial time, for an observer on the Earth.
-**
-**  The different time scales - proper, coordinate and realized - are
-**  related to each other:
-**
-**            TAI             <-  physically realized
-**             :
-**          offset            <-  observed (nominally +32.184s)
-**             :
-**            TT              <-  terrestrial time
-**             :
-**    rate adjustment (L_G)   <-  definition of TT
-**             :
-**            TCG             <-  time scale for GCRS
-**             :
-**      "periodic" terms      <-  iauDtdb  is an implementation
-**             :
-**    rate adjustment (L_C)   <-  function of solar-system ephemeris
-**             :
-**            TCB             <-  time scale for BCRS
-**             :
-**    rate adjustment (-L_B)  <-  definition of TDB
-**             :
-**            TDB             <-  TCB scaled to track TT
-**             :
-**      "periodic" terms      <-  -iauDtdb is an approximation
-**             :
-**            TT              <-  terrestrial time
-**
-**  Adopted values for the various constants can be found in the IERS
-**  Conventions (McCarthy & Petit 2003).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support routine.
-**
-**  Given:
-**     date1,date2   double  date, TDB (Notes 1-3)
-**     ut            double  universal time (UT1, fraction of one day)
-**     elong         double  longitude (east positive, radians)
-**     u             double  distance from Earth spin axis (km)
-**     v             double  distance north of equatorial plane (km)
-**
-**  Returned (function value):
-**                   double  TDB-TT (seconds)
-**
-**  Notes:
-**
-**  1) The date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**     Although the date is, formally, barycentric dynamical time (TDB),
-**     the terrestrial dynamical time (TT) can be used with no practical
-**     effect on the accuracy of the prediction.
-**
-**  2) TT can be regarded as a coordinate time that is realized as an
-**     offset of 32.184s from International Atomic Time, TAI.  TT is a
-**     specific linear transformation of geocentric coordinate time TCG,
-**     which is the time scale for the Geocentric Celestial Reference
-**     System, GCRS.
-**
-**  3) TDB is a coordinate time, and is a specific linear transformation
-**     of barycentric coordinate time TCB, which is the time scale for
-**     the Barycentric Celestial Reference System, BCRS.
-**
-**  4) The difference TCG-TCB depends on the masses and positions of the
-**     bodies of the solar system and the velocity of the Earth.  It is
-**     dominated by a rate difference, the residual being of a periodic
-**     character.  The latter, which is modeled by the present function,
-**     comprises a main (annual) sinusoidal term of amplitude
-**     approximately 0.00166 seconds, plus planetary terms up to about
-**     20 microseconds, and lunar and diurnal terms up to 2 microseconds.
-**     These effects come from the changing transverse Doppler effect
-**     and gravitational red-shift as the observer (on the Earth's
-**     surface) experiences variations in speed (with respect to the
-**     BCRS) and gravitational potential.
-**
-**  5) TDB can be regarded as the same as TCB but with a rate adjustment
-**     to keep it close to TT, which is convenient for many applications.
-**     The history of successive attempts to define TDB is set out in
-**     Resolution 3 adopted by the IAU General Assembly in 2006, which
-**     defines a fixed TDB(TCB) transformation that is consistent with
-**     contemporary solar-system ephemerides.  Future ephemerides will
-**     imply slightly changed transformations between TCG and TCB, which
-**     could introduce a linear drift between TDB and TT;  however, any
-**     such drift is unlikely to exceed 1 nanosecond per century.
-**
-**  6) The geocentric TDB-TT model used in the present function is that of
-**     Fairhead & Bretagnon (1990), in its full form.  It was originally
-**     supplied by Fairhead (private communications with P.T.Wallace,
-**     1990) as a Fortran subroutine.  The present C function contains an
-**     adaptation of the Fairhead code.  The numerical results are
-**     essentially unaffected by the changes, the differences with
-**     respect to the Fairhead & Bretagnon original being at the 1e-20 s
-**     level.
-**
-**     The topocentric part of the model is from Moyer (1981) and
-**     Murray (1983), with fundamental arguments adapted from
-**     Simon et al. 1994.  It is an approximation to the expression
-**     ( v / c ) . ( r / c ), where v is the barycentric velocity of
-**     the Earth, r is the geocentric position of the observer and
-**     c is the speed of light.
-**
-**     By supplying zeroes for u and v, the topocentric part of the
-**     model can be nullified, and the function will return the Fairhead
-**     & Bretagnon result alone.
-**
-**  7) During the interval 1950-2050, the absolute accuracy is better
-**     than +/- 3 nanoseconds relative to time ephemerides obtained by
-**     direct numerical integrations based on the JPL DE405 solar system
-**     ephemeris.
-**
-**  8) It must be stressed that the present function is merely a model,
-**     and that numerical integration of solar-system ephemerides is the
-**     definitive method for predicting the relationship between TCG and
-**     TCB and hence between TT and TDB.
-**
-**  References:
-**
-**     Fairhead, L., & Bretagnon, P., Astron.Astrophys., 229, 240-247
-**     (1990).
-**
-**     IAU 2006 Resolution 3.
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Moyer, T.D., Cel.Mech., 23, 33 (1981).
-**
-**     Murray, C.A., Vectorial Astrometry, Adam Hilger (1983).
-**
-**     Seidelmann, P.K. et al., Explanatory Supplement to the
-**     Astronomical Almanac, Chapter 2, University Science Books (1992).
-**
-**     Simon, J.L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G. & Laskar, J., Astron.Astrophys., 282, 663-683 (1994).
-**
-**  This revision:  2012 February 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t, tsol, w, elsun, emsun, d, elj, els, wt, w0, w1, w2, w3, w4,
-          wf, wj;
-   int j;
-
-/*
-** =====================
-** Fairhead et al. model
-** =====================
-**
-** 787 sets of three coefficients.
-**
-** Each set is
-**    amplitude (microseconds)
-**      frequency (radians per Julian millennium since J2000.0)
-**      phase (radians)
-**
-** Sets   1-474 are the T**0 terms
-**  "   475-679  "   "  T**1
-**  "   680-764  "   "  T**2
-**  "   765-784  "   "  T**3
-**  "   785-787  "   "  T**4
-*/
-
-   static const double fairhd[787][3] = {
-   /* 1, 10 */
-      { 1656.674564e-6,     6283.075849991,  6.240054195 },
-      {   22.417471e-6,     5753.384884897,  4.296977442 },
-      {   13.839792e-6,    12566.151699983,  6.196904410 },
-      {    4.770086e-6,      529.690965095,  0.444401603 },
-      {    4.676740e-6,     6069.776754553,  4.021195093 },
-      {    2.256707e-6,      213.299095438,  5.543113262 },
-      {    1.694205e-6,      -3.523118349,   5.025132748 },
-      {    1.554905e-6,    77713.771467920,  5.198467090 },
-      {    1.276839e-6,     7860.419392439,  5.988822341 },
-      {    1.193379e-6,     5223.693919802,  3.649823730 },
-   /* 11, 20 */
-      {    1.115322e-6,     3930.209696220,  1.422745069 },
-      {    0.794185e-6,    11506.769769794,  2.322313077 },
-      {    0.447061e-6,       26.298319800,  3.615796498 },
-      {    0.435206e-6,     -398.149003408,  4.349338347 },
-      {    0.600309e-6,     1577.343542448,  2.678271909 },
-      {    0.496817e-6,     6208.294251424,  5.696701824 },
-      {    0.486306e-6,     5884.926846583,  0.520007179 },
-      {    0.432392e-6,       74.781598567,  2.435898309 },
-      {    0.468597e-6,     6244.942814354,  5.866398759 },
-      {    0.375510e-6,     5507.553238667,  4.103476804 },
-   /* 21, 30 */
-      {    0.243085e-6,     -775.522611324,  3.651837925 },
-      {    0.173435e-6,    18849.227549974,  6.153743485 },
-      {    0.230685e-6,     5856.477659115,  4.773852582 },
-      {    0.203747e-6,    12036.460734888,  4.333987818 },
-      {    0.143935e-6,     -796.298006816,  5.957517795 },
-      {    0.159080e-6,    10977.078804699,  1.890075226 },
-      {    0.119979e-6,       38.133035638,  4.551585768 },
-      {    0.118971e-6,     5486.777843175,  1.914547226 },
-      {    0.116120e-6,     1059.381930189,  0.873504123 },
-      {    0.137927e-6,    11790.629088659,  1.135934669 },
-   /* 31, 40 */
-      {    0.098358e-6,     2544.314419883,  0.092793886 },
-      {    0.101868e-6,    -5573.142801634,  5.984503847 },
-      {    0.080164e-6,      206.185548437,  2.095377709 },
-      {    0.079645e-6,     4694.002954708,  2.949233637 },
-      {    0.062617e-6,       20.775395492,  2.654394814 },
-      {    0.075019e-6,     2942.463423292,  4.980931759 },
-      {    0.064397e-6,     5746.271337896,  1.280308748 },
-      {    0.063814e-6,     5760.498431898,  4.167901731 },
-      {    0.048042e-6,     2146.165416475,  1.495846011 },
-      {    0.048373e-6,      155.420399434,  2.251573730 },
-   /* 41, 50 */
-      {    0.058844e-6,      426.598190876,  4.839650148 },
-      {    0.046551e-6,       -0.980321068,  0.921573539 },
-      {    0.054139e-6,    17260.154654690,  3.411091093 },
-      {    0.042411e-6,     6275.962302991,  2.869567043 },
-      {    0.040184e-6,       -7.113547001,  3.565975565 },
-      {    0.036564e-6,     5088.628839767,  3.324679049 },
-      {    0.040759e-6,    12352.852604545,  3.981496998 },
-      {    0.036507e-6,      801.820931124,  6.248866009 },
-      {    0.036955e-6,     3154.687084896,  5.071801441 },
-      {    0.042732e-6,      632.783739313,  5.720622217 },
-   /* 51, 60 */
-      {    0.042560e-6,   161000.685737473,  1.270837679 },
-      {    0.040480e-6,    15720.838784878,  2.546610123 },
-      {    0.028244e-6,    -6286.598968340,  5.069663519 },
-      {    0.033477e-6,     6062.663207553,  4.144987272 },
-      {    0.034867e-6,      522.577418094,  5.210064075 },
-      {    0.032438e-6,     6076.890301554,  0.749317412 },
-      {    0.030215e-6,     7084.896781115,  3.389610345 },
-      {    0.029247e-6,   -71430.695617928,  4.183178762 },
-      {    0.033529e-6,     9437.762934887,  2.404714239 },
-      {    0.032423e-6,     8827.390269875,  5.541473556 },
-   /* 61, 70 */
-      {    0.027567e-6,     6279.552731642,  5.040846034 },
-      {    0.029862e-6,    12139.553509107,  1.770181024 },
-      {    0.022509e-6,    10447.387839604,  1.460726241 },
-      {    0.020937e-6,     8429.241266467,  0.652303414 },
-      {    0.020322e-6,      419.484643875,  3.735430632 },
-      {    0.024816e-6,    -1194.447010225,  1.087136918 },
-      {    0.025196e-6,     1748.016413067,  2.901883301 },
-      {    0.021691e-6,    14143.495242431,  5.952658009 },
-      {    0.017673e-6,     6812.766815086,  3.186129845 },
-      {    0.022567e-6,     6133.512652857,  3.307984806 },
-   /* 71, 80 */
-      {    0.016155e-6,    10213.285546211,  1.331103168 },
-      {    0.014751e-6,     1349.867409659,  4.308933301 },
-      {    0.015949e-6,     -220.412642439,  4.005298270 },
-      {    0.015974e-6,    -2352.866153772,  6.145309371 },
-      {    0.014223e-6,    17789.845619785,  2.104551349 },
-      {    0.017806e-6,       73.297125859,  3.475975097 },
-      {    0.013671e-6,     -536.804512095,  5.971672571 },
-      {    0.011942e-6,     8031.092263058,  2.053414715 },
-      {    0.014318e-6,    16730.463689596,  3.016058075 },
-      {    0.012462e-6,      103.092774219,  1.737438797 },
-   /* 81, 90 */
-      {    0.010962e-6,        3.590428652,  2.196567739 },
-      {    0.015078e-6,    19651.048481098,  3.969480770 },
-      {    0.010396e-6,      951.718406251,  5.717799605 },
-      {    0.011707e-6,    -4705.732307544,  2.654125618 },
-      {    0.010453e-6,     5863.591206116,  1.913704550 },
-      {    0.012420e-6,     4690.479836359,  4.734090399 },
-      {    0.011847e-6,     5643.178563677,  5.489005403 },
-      {    0.008610e-6,     3340.612426700,  3.661698944 },
-      {    0.011622e-6,     5120.601145584,  4.863931876 },
-      {    0.010825e-6,      553.569402842,  0.842715011 },
-   /* 91, 100 */
-      {    0.008666e-6,     -135.065080035,  3.293406547 },
-      {    0.009963e-6,      149.563197135,  4.870690598 },
-      {    0.009858e-6,     6309.374169791,  1.061816410 },
-      {    0.007959e-6,      316.391869657,  2.465042647 },
-      {    0.010099e-6,      283.859318865,  1.942176992 },
-      {    0.007147e-6,     -242.728603974,  3.661486981 },
-      {    0.007505e-6,     5230.807466803,  4.920937029 },
-      {    0.008323e-6,    11769.853693166,  1.229392026 },
-      {    0.007490e-6,    -6256.777530192,  3.658444681 },
-      {    0.009370e-6,   149854.400134205,  0.673880395 },
-   /* 101, 110 */
-      {    0.007117e-6,       38.027672636,  5.294249518 },
-      {    0.007857e-6,    12168.002696575,  0.525733528 },
-      {    0.007019e-6,     6206.809778716,  0.837688810 },
-      {    0.006056e-6,      955.599741609,  4.194535082 },
-      {    0.008107e-6,    13367.972631107,  3.793235253 },
-      {    0.006731e-6,     5650.292110678,  5.639906583 },
-      {    0.007332e-6,       36.648562930,  0.114858677 },
-      {    0.006366e-6,     4164.311989613,  2.262081818 },
-      {    0.006858e-6,     5216.580372801,  0.642063318 },
-      {    0.006919e-6,     6681.224853400,  6.018501522 },
-   /* 111, 120 */
-      {    0.006826e-6,     7632.943259650,  3.458654112 },
-      {    0.005308e-6,    -1592.596013633,  2.500382359 },
-      {    0.005096e-6,    11371.704689758,  2.547107806 },
-      {    0.004841e-6,     5333.900241022,  0.437078094 },
-      {    0.005582e-6,     5966.683980335,  2.246174308 },
-      {    0.006304e-6,    11926.254413669,  2.512929171 },
-      {    0.006603e-6,    23581.258177318,  5.393136889 },
-      {    0.005123e-6,       -1.484472708,  2.999641028 },
-      {    0.004648e-6,     1589.072895284,  1.275847090 },
-      {    0.005119e-6,     6438.496249426,  1.486539246 },
-   /* 121, 130 */
-      {    0.004521e-6,     4292.330832950,  6.140635794 },
-      {    0.005680e-6,    23013.539539587,  4.557814849 },
-      {    0.005488e-6,       -3.455808046,  0.090675389 },
-      {    0.004193e-6,     7234.794256242,  4.869091389 },
-      {    0.003742e-6,     7238.675591600,  4.691976180 },
-      {    0.004148e-6,     -110.206321219,  3.016173439 },
-      {    0.004553e-6,    11499.656222793,  5.554998314 },
-      {    0.004892e-6,     5436.993015240,  1.475415597 },
-      {    0.004044e-6,     4732.030627343,  1.398784824 },
-      {    0.004164e-6,    12491.370101415,  5.650931916 },
-   /* 131, 140 */
-      {    0.004349e-6,    11513.883316794,  2.181745369 },
-      {    0.003919e-6,    12528.018664345,  5.823319737 },
-      {    0.003129e-6,     6836.645252834,  0.003844094 },
-      {    0.004080e-6,    -7058.598461315,  3.690360123 },
-      {    0.003270e-6,       76.266071276,  1.517189902 },
-      {    0.002954e-6,     6283.143160294,  4.447203799 },
-      {    0.002872e-6,       28.449187468,  1.158692983 },
-      {    0.002881e-6,      735.876513532,  0.349250250 },
-      {    0.003279e-6,     5849.364112115,  4.893384368 },
-      {    0.003625e-6,     6209.778724132,  1.473760578 },
-   /* 141, 150 */
-      {    0.003074e-6,      949.175608970,  5.185878737 },
-      {    0.002775e-6,     9917.696874510,  1.030026325 },
-      {    0.002646e-6,    10973.555686350,  3.918259169 },
-      {    0.002575e-6,    25132.303399966,  6.109659023 },
-      {    0.003500e-6,      263.083923373,  1.892100742 },
-      {    0.002740e-6,    18319.536584880,  4.320519510 },
-      {    0.002464e-6,      202.253395174,  4.698203059 },
-      {    0.002409e-6,        2.542797281,  5.325009315 },
-      {    0.003354e-6,   -90955.551694697,  1.942656623 },
-      {    0.002296e-6,     6496.374945429,  5.061810696 },
-   /* 151, 160 */
-      {    0.003002e-6,     6172.869528772,  2.797822767 },
-      {    0.003202e-6,    27511.467873537,  0.531673101 },
-      {    0.002954e-6,    -6283.008539689,  4.533471191 },
-      {    0.002353e-6,      639.897286314,  3.734548088 },
-      {    0.002401e-6,    16200.772724501,  2.605547070 },
-      {    0.003053e-6,   233141.314403759,  3.029030662 },
-      {    0.003024e-6,    83286.914269554,  2.355556099 },
-      {    0.002863e-6,    17298.182327326,  5.240963796 },
-      {    0.002103e-6,    -7079.373856808,  5.756641637 },
-      {    0.002303e-6,    83996.847317911,  2.013686814 },
-   /* 161, 170 */
-      {    0.002303e-6,    18073.704938650,  1.089100410 },
-      {    0.002381e-6,       63.735898303,  0.759188178 },
-      {    0.002493e-6,     6386.168624210,  0.645026535 },
-      {    0.002366e-6,        3.932153263,  6.215885448 },
-      {    0.002169e-6,    11015.106477335,  4.845297676 },
-      {    0.002397e-6,     6243.458341645,  3.809290043 },
-      {    0.002183e-6,     1162.474704408,  6.179611691 },
-      {    0.002353e-6,     6246.427287062,  4.781719760 },
-      {    0.002199e-6,     -245.831646229,  5.956152284 },
-      {    0.001729e-6,     3894.181829542,  1.264976635 },
-   /* 171, 180 */
-      {    0.001896e-6,    -3128.388765096,  4.914231596 },
-      {    0.002085e-6,       35.164090221,  1.405158503 },
-      {    0.002024e-6,    14712.317116458,  2.752035928 },
-      {    0.001737e-6,     6290.189396992,  5.280820144 },
-      {    0.002229e-6,      491.557929457,  1.571007057 },
-      {    0.001602e-6,    14314.168113050,  4.203664806 },
-      {    0.002186e-6,      454.909366527,  1.402101526 },
-      {    0.001897e-6,    22483.848574493,  4.167932508 },
-      {    0.001825e-6,    -3738.761430108,  0.545828785 },
-      {    0.001894e-6,     1052.268383188,  5.817167450 },
-   /* 181, 190 */
-      {    0.001421e-6,       20.355319399,  2.419886601 },
-      {    0.001408e-6,    10984.192351700,  2.732084787 },
-      {    0.001847e-6,    10873.986030480,  2.903477885 },
-      {    0.001391e-6,    -8635.942003763,  0.593891500 },
-      {    0.001388e-6,       -7.046236698,  1.166145902 },
-      {    0.001810e-6,   -88860.057071188,  0.487355242 },
-      {    0.001288e-6,    -1990.745017041,  3.913022880 },
-      {    0.001297e-6,    23543.230504682,  3.063805171 },
-      {    0.001335e-6,     -266.607041722,  3.995764039 },
-      {    0.001376e-6,    10969.965257698,  5.152914309 },
-   /* 191, 200 */
-      {    0.001745e-6,   244287.600007027,  3.626395673 },
-      {    0.001649e-6,    31441.677569757,  1.952049260 },
-      {    0.001416e-6,     9225.539273283,  4.996408389 },
-      {    0.001238e-6,     4804.209275927,  5.503379738 },
-      {    0.001472e-6,     4590.910180489,  4.164913291 },
-      {    0.001169e-6,     6040.347246017,  5.841719038 },
-      {    0.001039e-6,     5540.085789459,  2.769753519 },
-      {    0.001004e-6,     -170.672870619,  0.755008103 },
-      {    0.001284e-6,    10575.406682942,  5.306538209 },
-      {    0.001278e-6,       71.812653151,  4.713486491 },
-   /* 201, 210 */
-      {    0.001321e-6,    18209.330263660,  2.624866359 },
-      {    0.001297e-6,    21228.392023546,  0.382603541 },
-      {    0.000954e-6,     6282.095528923,  0.882213514 },
-      {    0.001145e-6,     6058.731054289,  1.169483931 },
-      {    0.000979e-6,     5547.199336460,  5.448375984 },
-      {    0.000987e-6,    -6262.300454499,  2.656486959 },
-      {    0.001070e-6,  -154717.609887482,  1.827624012 },
-      {    0.000991e-6,     4701.116501708,  4.387001801 },
-      {    0.001155e-6,      -14.227094002,  3.042700750 },
-      {    0.001176e-6,      277.034993741,  3.335519004 },
-   /* 211, 220 */
-      {    0.000890e-6,    13916.019109642,  5.601498297 },
-      {    0.000884e-6,    -1551.045222648,  1.088831705 },
-      {    0.000876e-6,     5017.508371365,  3.969902609 },
-      {    0.000806e-6,    15110.466119866,  5.142876744 },
-      {    0.000773e-6,    -4136.910433516,  0.022067765 },
-      {    0.001077e-6,      175.166059800,  1.844913056 },
-      {    0.000954e-6,    -6284.056171060,  0.968480906 },
-      {    0.000737e-6,     5326.786694021,  4.923831588 },
-      {    0.000845e-6,     -433.711737877,  4.749245231 },
-      {    0.000819e-6,     8662.240323563,  5.991247817 },
-   /* 221, 230 */
-      {    0.000852e-6,      199.072001436,  2.189604979 },
-      {    0.000723e-6,    17256.631536341,  6.068719637 },
-      {    0.000940e-6,     6037.244203762,  6.197428148 },
-      {    0.000885e-6,    11712.955318231,  3.280414875 },
-      {    0.000706e-6,    12559.038152982,  2.824848947 },
-      {    0.000732e-6,     2379.164473572,  2.501813417 },
-      {    0.000764e-6,    -6127.655450557,  2.236346329 },
-      {    0.000908e-6,      131.541961686,  2.521257490 },
-      {    0.000907e-6,    35371.887265976,  3.370195967 },
-      {    0.000673e-6,     1066.495477190,  3.876512374 },
-   /* 231, 240 */
-      {    0.000814e-6,    17654.780539750,  4.627122566 },
-      {    0.000630e-6,       36.027866677,  0.156368499 },
-      {    0.000798e-6,      515.463871093,  5.151962502 },
-      {    0.000798e-6,      148.078724426,  5.909225055 },
-      {    0.000806e-6,      309.278322656,  6.054064447 },
-      {    0.000607e-6,      -39.617508346,  2.839021623 },
-      {    0.000601e-6,      412.371096874,  3.984225404 },
-      {    0.000646e-6,    11403.676995575,  3.852959484 },
-      {    0.000704e-6,    13521.751441591,  2.300991267 },
-      {    0.000603e-6,   -65147.619767937,  4.140083146 },
-   /* 241, 250 */
-      {    0.000609e-6,    10177.257679534,  0.437122327 },
-      {    0.000631e-6,     5767.611978898,  4.026532329 },
-      {    0.000576e-6,    11087.285125918,  4.760293101 },
-      {    0.000674e-6,    14945.316173554,  6.270510511 },
-      {    0.000726e-6,     5429.879468239,  6.039606892 },
-      {    0.000710e-6,    28766.924424484,  5.672617711 },
-      {    0.000647e-6,    11856.218651625,  3.397132627 },
-      {    0.000678e-6,    -5481.254918868,  6.249666675 },
-      {    0.000618e-6,    22003.914634870,  2.466427018 },
-      {    0.000738e-6,     6134.997125565,  2.242668890 },
-   /* 251, 260 */
-      {    0.000660e-6,      625.670192312,  5.864091907 },
-      {    0.000694e-6,     3496.032826134,  2.668309141 },
-      {    0.000531e-6,     6489.261398429,  1.681888780 },
-      {    0.000611e-6,  -143571.324284214,  2.424978312 },
-      {    0.000575e-6,    12043.574281889,  4.216492400 },
-      {    0.000553e-6,    12416.588502848,  4.772158039 },
-      {    0.000689e-6,     4686.889407707,  6.224271088 },
-      {    0.000495e-6,     7342.457780181,  3.817285811 },
-      {    0.000567e-6,     3634.621024518,  1.649264690 },
-      {    0.000515e-6,    18635.928454536,  3.945345892 },
-   /* 261, 270 */
-      {    0.000486e-6,     -323.505416657,  4.061673868 },
-      {    0.000662e-6,    25158.601719765,  1.794058369 },
-      {    0.000509e-6,      846.082834751,  3.053874588 },
-      {    0.000472e-6,   -12569.674818332,  5.112133338 },
-      {    0.000461e-6,     6179.983075773,  0.513669325 },
-      {    0.000641e-6,    83467.156352816,  3.210727723 },
-      {    0.000520e-6,    10344.295065386,  2.445597761 },
-      {    0.000493e-6,    18422.629359098,  1.676939306 },
-      {    0.000478e-6,     1265.567478626,  5.487314569 },
-      {    0.000472e-6,      -18.159247265,  1.999707589 },
-   /* 271, 280 */
-      {    0.000559e-6,    11190.377900137,  5.783236356 },
-      {    0.000494e-6,     9623.688276691,  3.022645053 },
-      {    0.000463e-6,     5739.157790895,  1.411223013 },
-      {    0.000432e-6,    16858.482532933,  1.179256434 },
-      {    0.000574e-6,    72140.628666286,  1.758191830 },
-      {    0.000484e-6,    17267.268201691,  3.290589143 },
-      {    0.000550e-6,     4907.302050146,  0.864024298 },
-      {    0.000399e-6,       14.977853527,  2.094441910 },
-      {    0.000491e-6,      224.344795702,  0.878372791 },
-      {    0.000432e-6,    20426.571092422,  6.003829241 },
-   /* 281, 290 */
-      {    0.000481e-6,     5749.452731634,  4.309591964 },
-      {    0.000480e-6,     5757.317038160,  1.142348571 },
-      {    0.000485e-6,     6702.560493867,  0.210580917 },
-      {    0.000426e-6,     6055.549660552,  4.274476529 },
-      {    0.000480e-6,     5959.570433334,  5.031351030 },
-      {    0.000466e-6,    12562.628581634,  4.959581597 },
-      {    0.000520e-6,    39302.096962196,  4.788002889 },
-      {    0.000458e-6,    12132.439962106,  1.880103788 },
-      {    0.000470e-6,    12029.347187887,  1.405611197 },
-      {    0.000416e-6,    -7477.522860216,  1.082356330 },
-   /* 291, 300 */
-      {    0.000449e-6,    11609.862544012,  4.179989585 },
-      {    0.000465e-6,    17253.041107690,  0.353496295 },
-      {    0.000362e-6,    -4535.059436924,  1.583849576 },
-      {    0.000383e-6,    21954.157609398,  3.747376371 },
-      {    0.000389e-6,       17.252277143,  1.395753179 },
-      {    0.000331e-6,    18052.929543158,  0.566790582 },
-      {    0.000430e-6,    13517.870106233,  0.685827538 },
-      {    0.000368e-6,    -5756.908003246,  0.731374317 },
-      {    0.000330e-6,    10557.594160824,  3.710043680 },
-      {    0.000332e-6,    20199.094959633,  1.652901407 },
-   /* 301, 310 */
-      {    0.000384e-6,    11933.367960670,  5.827781531 },
-      {    0.000387e-6,    10454.501386605,  2.541182564 },
-      {    0.000325e-6,    15671.081759407,  2.178850542 },
-      {    0.000318e-6,      138.517496871,  2.253253037 },
-      {    0.000305e-6,     9388.005909415,  0.578340206 },
-      {    0.000352e-6,     5749.861766548,  3.000297967 },
-      {    0.000311e-6,     6915.859589305,  1.693574249 },
-      {    0.000297e-6,    24072.921469776,  1.997249392 },
-      {    0.000363e-6,     -640.877607382,  5.071820966 },
-      {    0.000323e-6,    12592.450019783,  1.072262823 },
-   /* 311, 320 */
-      {    0.000341e-6,    12146.667056108,  4.700657997 },
-      {    0.000290e-6,     9779.108676125,  1.812320441 },
-      {    0.000342e-6,     6132.028180148,  4.322238614 },
-      {    0.000329e-6,     6268.848755990,  3.033827743 },
-      {    0.000374e-6,    17996.031168222,  3.388716544 },
-      {    0.000285e-6,     -533.214083444,  4.687313233 },
-      {    0.000338e-6,     6065.844601290,  0.877776108 },
-      {    0.000276e-6,       24.298513841,  0.770299429 },
-      {    0.000336e-6,    -2388.894020449,  5.353796034 },
-      {    0.000290e-6,     3097.883822726,  4.075291557 },
-   /* 321, 330 */
-      {    0.000318e-6,      709.933048357,  5.941207518 },
-      {    0.000271e-6,    13095.842665077,  3.208912203 },
-      {    0.000331e-6,     6073.708907816,  4.007881169 },
-      {    0.000292e-6,      742.990060533,  2.714333592 },
-      {    0.000362e-6,    29088.811415985,  3.215977013 },
-      {    0.000280e-6,    12359.966151546,  0.710872502 },
-      {    0.000267e-6,    10440.274292604,  4.730108488 },
-      {    0.000262e-6,      838.969287750,  1.327720272 },
-      {    0.000250e-6,    16496.361396202,  0.898769761 },
-      {    0.000325e-6,    20597.243963041,  0.180044365 },
-   /* 331, 340 */
-      {    0.000268e-6,     6148.010769956,  5.152666276 },
-      {    0.000284e-6,     5636.065016677,  5.655385808 },
-      {    0.000301e-6,     6080.822454817,  2.135396205 },
-      {    0.000294e-6,     -377.373607916,  3.708784168 },
-      {    0.000236e-6,     2118.763860378,  1.733578756 },
-      {    0.000234e-6,     5867.523359379,  5.575209112 },
-      {    0.000268e-6,  -226858.238553767,  0.069432392 },
-      {    0.000265e-6,   167283.761587465,  4.369302826 },
-      {    0.000280e-6,    28237.233459389,  5.304829118 },
-      {    0.000292e-6,    12345.739057544,  4.096094132 },
-   /* 341, 350 */
-      {    0.000223e-6,    19800.945956225,  3.069327406 },
-      {    0.000301e-6,    43232.306658416,  6.205311188 },
-      {    0.000264e-6,    18875.525869774,  1.417263408 },
-      {    0.000304e-6,    -1823.175188677,  3.409035232 },
-      {    0.000301e-6,      109.945688789,  0.510922054 },
-      {    0.000260e-6,      813.550283960,  2.389438934 },
-      {    0.000299e-6,   316428.228673312,  5.384595078 },
-      {    0.000211e-6,     5756.566278634,  3.789392838 },
-      {    0.000209e-6,     5750.203491159,  1.661943545 },
-      {    0.000240e-6,    12489.885628707,  5.684549045 },
-   /* 351, 360 */
-      {    0.000216e-6,     6303.851245484,  3.862942261 },
-      {    0.000203e-6,     1581.959348283,  5.549853589 },
-      {    0.000200e-6,     5642.198242609,  1.016115785 },
-      {    0.000197e-6,      -70.849445304,  4.690702525 },
-      {    0.000227e-6,     6287.008003254,  2.911891613 },
-      {    0.000197e-6,      533.623118358,  1.048982898 },
-      {    0.000205e-6,    -6279.485421340,  1.829362730 },
-      {    0.000209e-6,   -10988.808157535,  2.636140084 },
-      {    0.000208e-6,     -227.526189440,  4.127883842 },
-      {    0.000191e-6,      415.552490612,  4.401165650 },
-   /* 361, 370 */
-      {    0.000190e-6,    29296.615389579,  4.175658539 },
-      {    0.000264e-6,    66567.485864652,  4.601102551 },
-      {    0.000256e-6,    -3646.350377354,  0.506364778 },
-      {    0.000188e-6,    13119.721102825,  2.032195842 },
-      {    0.000185e-6,     -209.366942175,  4.694756586 },
-      {    0.000198e-6,    25934.124331089,  3.832703118 },
-      {    0.000195e-6,     4061.219215394,  3.308463427 },
-      {    0.000234e-6,     5113.487598583,  1.716090661 },
-      {    0.000188e-6,     1478.866574064,  5.686865780 },
-      {    0.000222e-6,    11823.161639450,  1.942386641 },
-   /* 371, 380 */
-      {    0.000181e-6,    10770.893256262,  1.999482059 },
-      {    0.000171e-6,     6546.159773364,  1.182807992 },
-      {    0.000206e-6,       70.328180442,  5.934076062 },
-      {    0.000169e-6,    20995.392966449,  2.169080622 },
-      {    0.000191e-6,    10660.686935042,  5.405515999 },
-      {    0.000228e-6,    33019.021112205,  4.656985514 },
-      {    0.000184e-6,    -4933.208440333,  3.327476868 },
-      {    0.000220e-6,     -135.625325010,  1.765430262 },
-      {    0.000166e-6,    23141.558382925,  3.454132746 },
-      {    0.000191e-6,     6144.558353121,  5.020393445 },
-   /* 381, 390 */
-      {    0.000180e-6,     6084.003848555,  0.602182191 },
-      {    0.000163e-6,    17782.732072784,  4.960593133 },
-      {    0.000225e-6,    16460.333529525,  2.596451817 },
-      {    0.000222e-6,     5905.702242076,  3.731990323 },
-      {    0.000204e-6,      227.476132789,  5.636192701 },
-      {    0.000159e-6,    16737.577236597,  3.600691544 },
-      {    0.000200e-6,     6805.653268085,  0.868220961 },
-      {    0.000187e-6,    11919.140866668,  2.629456641 },
-      {    0.000161e-6,      127.471796607,  2.862574720 },
-      {    0.000205e-6,     6286.666278643,  1.742882331 },
-   /* 391, 400 */
-      {    0.000189e-6,      153.778810485,  4.812372643 },
-      {    0.000168e-6,    16723.350142595,  0.027860588 },
-      {    0.000149e-6,    11720.068865232,  0.659721876 },
-      {    0.000189e-6,     5237.921013804,  5.245313000 },
-      {    0.000143e-6,     6709.674040867,  4.317625647 },
-      {    0.000146e-6,     4487.817406270,  4.815297007 },
-      {    0.000144e-6,     -664.756045130,  5.381366880 },
-      {    0.000175e-6,     5127.714692584,  4.728443327 },
-      {    0.000162e-6,     6254.626662524,  1.435132069 },
-      {    0.000187e-6,    47162.516354635,  1.354371923 },
-   /* 401, 410 */
-      {    0.000146e-6,    11080.171578918,  3.369695406 },
-      {    0.000180e-6,     -348.924420448,  2.490902145 },
-      {    0.000148e-6,      151.047669843,  3.799109588 },
-      {    0.000157e-6,     6197.248551160,  1.284375887 },
-      {    0.000167e-6,      146.594251718,  0.759969109 },
-      {    0.000133e-6,    -5331.357443741,  5.409701889 },
-      {    0.000154e-6,       95.979227218,  3.366890614 },
-      {    0.000148e-6,    -6418.140930027,  3.384104996 },
-      {    0.000128e-6,    -6525.804453965,  3.803419985 },
-      {    0.000130e-6,    11293.470674356,  0.939039445 },
-   /* 411, 420 */
-      {    0.000152e-6,    -5729.506447149,  0.734117523 },
-      {    0.000138e-6,      210.117701700,  2.564216078 },
-      {    0.000123e-6,     6066.595360816,  4.517099537 },
-      {    0.000140e-6,    18451.078546566,  0.642049130 },
-      {    0.000126e-6,    11300.584221356,  3.485280663 },
-      {    0.000119e-6,    10027.903195729,  3.217431161 },
-      {    0.000151e-6,     4274.518310832,  4.404359108 },
-      {    0.000117e-6,     6072.958148291,  0.366324650 },
-      {    0.000165e-6,    -7668.637425143,  4.298212528 },
-      {    0.000117e-6,    -6245.048177356,  5.379518958 },
-   /* 421, 430 */
-      {    0.000130e-6,    -5888.449964932,  4.527681115 },
-      {    0.000121e-6,     -543.918059096,  6.109429504 },
-      {    0.000162e-6,     9683.594581116,  5.720092446 },
-      {    0.000141e-6,     6219.339951688,  0.679068671 },
-      {    0.000118e-6,    22743.409379516,  4.881123092 },
-      {    0.000129e-6,     1692.165669502,  0.351407289 },
-      {    0.000126e-6,     5657.405657679,  5.146592349 },
-      {    0.000114e-6,      728.762966531,  0.520791814 },
-      {    0.000120e-6,       52.596639600,  0.948516300 },
-      {    0.000115e-6,       65.220371012,  3.504914846 },
-   /* 431, 440 */
-      {    0.000126e-6,     5881.403728234,  5.577502482 },
-      {    0.000158e-6,   163096.180360983,  2.957128968 },
-      {    0.000134e-6,    12341.806904281,  2.598576764 },
-      {    0.000151e-6,    16627.370915377,  3.985702050 },
-      {    0.000109e-6,     1368.660252845,  0.014730471 },
-      {    0.000131e-6,     6211.263196841,  0.085077024 },
-      {    0.000146e-6,     5792.741760812,  0.708426604 },
-      {    0.000146e-6,      -77.750543984,  3.121576600 },
-      {    0.000107e-6,     5341.013788022,  0.288231904 },
-      {    0.000138e-6,     6281.591377283,  2.797450317 },
-   /* 441, 450 */
-      {    0.000113e-6,    -6277.552925684,  2.788904128 },
-      {    0.000115e-6,     -525.758811831,  5.895222200 },
-      {    0.000138e-6,     6016.468808270,  6.096188999 },
-      {    0.000139e-6,    23539.707386333,  2.028195445 },
-      {    0.000146e-6,    -4176.041342449,  4.660008502 },
-      {    0.000107e-6,    16062.184526117,  4.066520001 },
-      {    0.000142e-6,    83783.548222473,  2.936315115 },
-      {    0.000128e-6,     9380.959672717,  3.223844306 },
-      {    0.000135e-6,     6205.325306007,  1.638054048 },
-      {    0.000101e-6,     2699.734819318,  5.481603249 },
-   /* 451, 460 */
-      {    0.000104e-6,     -568.821874027,  2.205734493 },
-      {    0.000103e-6,     6321.103522627,  2.440421099 },
-      {    0.000119e-6,     6321.208885629,  2.547496264 },
-      {    0.000138e-6,     1975.492545856,  2.314608466 },
-      {    0.000121e-6,      137.033024162,  4.539108237 },
-      {    0.000123e-6,    19402.796952817,  4.538074405 },
-      {    0.000119e-6,    22805.735565994,  2.869040566 },
-      {    0.000133e-6,    64471.991241142,  6.056405489 },
-      {    0.000129e-6,      -85.827298831,  2.540635083 },
-      {    0.000131e-6,    13613.804277336,  4.005732868 },
-   /* 461, 470 */
-      {    0.000104e-6,     9814.604100291,  1.959967212 },
-      {    0.000112e-6,    16097.679950283,  3.589026260 },
-      {    0.000123e-6,     2107.034507542,  1.728627253 },
-      {    0.000121e-6,    36949.230808424,  6.072332087 },
-      {    0.000108e-6,   -12539.853380183,  3.716133846 },
-      {    0.000113e-6,    -7875.671863624,  2.725771122 },
-      {    0.000109e-6,     4171.425536614,  4.033338079 },
-      {    0.000101e-6,     6247.911759770,  3.441347021 },
-      {    0.000113e-6,     7330.728427345,  0.656372122 },
-      {    0.000113e-6,    51092.726050855,  2.791483066 },
-   /* 471, 480 */
-      {    0.000106e-6,     5621.842923210,  1.815323326 },
-      {    0.000101e-6,      111.430161497,  5.711033677 },
-      {    0.000103e-6,      909.818733055,  2.812745443 },
-      {    0.000101e-6,     1790.642637886,  1.965746028 },
-
-   /* T */
-      {  102.156724e-6,     6283.075849991,  4.249032005 },
-      {    1.706807e-6,    12566.151699983,  4.205904248 },
-      {    0.269668e-6,      213.299095438,  3.400290479 },
-      {    0.265919e-6,      529.690965095,  5.836047367 },
-      {    0.210568e-6,       -3.523118349,  6.262738348 },
-      {    0.077996e-6,     5223.693919802,  4.670344204 },
-   /* 481, 490 */
-      {    0.054764e-6,     1577.343542448,  4.534800170 },
-      {    0.059146e-6,       26.298319800,  1.083044735 },
-      {    0.034420e-6,     -398.149003408,  5.980077351 },
-      {    0.032088e-6,    18849.227549974,  4.162913471 },
-      {    0.033595e-6,     5507.553238667,  5.980162321 },
-      {    0.029198e-6,     5856.477659115,  0.623811863 },
-      {    0.027764e-6,      155.420399434,  3.745318113 },
-      {    0.025190e-6,     5746.271337896,  2.980330535 },
-      {    0.022997e-6,     -796.298006816,  1.174411803 },
-      {    0.024976e-6,     5760.498431898,  2.467913690 },
-   /* 491, 500 */
-      {    0.021774e-6,      206.185548437,  3.854787540 },
-      {    0.017925e-6,     -775.522611324,  1.092065955 },
-      {    0.013794e-6,      426.598190876,  2.699831988 },
-      {    0.013276e-6,     6062.663207553,  5.845801920 },
-      {    0.011774e-6,    12036.460734888,  2.292832062 },
-      {    0.012869e-6,     6076.890301554,  5.333425680 },
-      {    0.012152e-6,     1059.381930189,  6.222874454 },
-      {    0.011081e-6,       -7.113547001,  5.154724984 },
-      {    0.010143e-6,     4694.002954708,  4.044013795 },
-      {    0.009357e-6,     5486.777843175,  3.416081409 },
-   /* 501, 510 */
-      {    0.010084e-6,      522.577418094,  0.749320262 },
-      {    0.008587e-6,    10977.078804699,  2.777152598 },
-      {    0.008628e-6,     6275.962302991,  4.562060226 },
-      {    0.008158e-6,     -220.412642439,  5.806891533 },
-      {    0.007746e-6,     2544.314419883,  1.603197066 },
-      {    0.007670e-6,     2146.165416475,  3.000200440 },
-      {    0.007098e-6,       74.781598567,  0.443725817 },
-      {    0.006180e-6,     -536.804512095,  1.302642751 },
-      {    0.005818e-6,     5088.628839767,  4.827723531 },
-      {    0.004945e-6,    -6286.598968340,  0.268305170 },
-   /* 511, 520 */
-      {    0.004774e-6,     1349.867409659,  5.808636673 },
-      {    0.004687e-6,     -242.728603974,  5.154890570 },
-      {    0.006089e-6,     1748.016413067,  4.403765209 },
-      {    0.005975e-6,    -1194.447010225,  2.583472591 },
-      {    0.004229e-6,      951.718406251,  0.931172179 },
-      {    0.005264e-6,      553.569402842,  2.336107252 },
-      {    0.003049e-6,     5643.178563677,  1.362634430 },
-      {    0.002974e-6,     6812.766815086,  1.583012668 },
-      {    0.003403e-6,    -2352.866153772,  2.552189886 },
-      {    0.003030e-6,      419.484643875,  5.286473844 },
-   /* 521, 530 */
-      {    0.003210e-6,       -7.046236698,  1.863796539 },
-      {    0.003058e-6,     9437.762934887,  4.226420633 },
-      {    0.002589e-6,    12352.852604545,  1.991935820 },
-      {    0.002927e-6,     5216.580372801,  2.319951253 },
-      {    0.002425e-6,     5230.807466803,  3.084752833 },
-      {    0.002656e-6,     3154.687084896,  2.487447866 },
-      {    0.002445e-6,    10447.387839604,  2.347139160 },
-      {    0.002990e-6,     4690.479836359,  6.235872050 },
-      {    0.002890e-6,     5863.591206116,  0.095197563 },
-      {    0.002498e-6,     6438.496249426,  2.994779800 },
-   /* 531, 540 */
-      {    0.001889e-6,     8031.092263058,  3.569003717 },
-      {    0.002567e-6,      801.820931124,  3.425611498 },
-      {    0.001803e-6,   -71430.695617928,  2.192295512 },
-      {    0.001782e-6,        3.932153263,  5.180433689 },
-      {    0.001694e-6,    -4705.732307544,  4.641779174 },
-      {    0.001704e-6,    -1592.596013633,  3.997097652 },
-      {    0.001735e-6,     5849.364112115,  0.417558428 },
-      {    0.001643e-6,     8429.241266467,  2.180619584 },
-      {    0.001680e-6,       38.133035638,  4.164529426 },
-      {    0.002045e-6,     7084.896781115,  0.526323854 },
-   /* 541, 550 */
-      {    0.001458e-6,     4292.330832950,  1.356098141 },
-      {    0.001437e-6,       20.355319399,  3.895439360 },
-      {    0.001738e-6,     6279.552731642,  0.087484036 },
-      {    0.001367e-6,    14143.495242431,  3.987576591 },
-      {    0.001344e-6,     7234.794256242,  0.090454338 },
-      {    0.001438e-6,    11499.656222793,  0.974387904 },
-      {    0.001257e-6,     6836.645252834,  1.509069366 },
-      {    0.001358e-6,    11513.883316794,  0.495572260 },
-      {    0.001628e-6,     7632.943259650,  4.968445721 },
-      {    0.001169e-6,      103.092774219,  2.838496795 },
-   /* 551, 560 */
-      {    0.001162e-6,     4164.311989613,  3.408387778 },
-      {    0.001092e-6,     6069.776754553,  3.617942651 },
-      {    0.001008e-6,    17789.845619785,  0.286350174 },
-      {    0.001008e-6,      639.897286314,  1.610762073 },
-      {    0.000918e-6,    10213.285546211,  5.532798067 },
-      {    0.001011e-6,    -6256.777530192,  0.661826484 },
-      {    0.000753e-6,    16730.463689596,  3.905030235 },
-      {    0.000737e-6,    11926.254413669,  4.641956361 },
-      {    0.000694e-6,     3340.612426700,  2.111120332 },
-      {    0.000701e-6,     3894.181829542,  2.760823491 },
-   /* 561, 570 */
-      {    0.000689e-6,     -135.065080035,  4.768800780 },
-      {    0.000700e-6,    13367.972631107,  5.760439898 },
-      {    0.000664e-6,     6040.347246017,  1.051215840 },
-      {    0.000654e-6,     5650.292110678,  4.911332503 },
-      {    0.000788e-6,     6681.224853400,  4.699648011 },
-      {    0.000628e-6,     5333.900241022,  5.024608847 },
-      {    0.000755e-6,     -110.206321219,  4.370971253 },
-      {    0.000628e-6,     6290.189396992,  3.660478857 },
-      {    0.000635e-6,    25132.303399966,  4.121051532 },
-      {    0.000534e-6,     5966.683980335,  1.173284524 },
-   /* 571, 580 */
-      {    0.000543e-6,     -433.711737877,  0.345585464 },
-      {    0.000517e-6,    -1990.745017041,  5.414571768 },
-      {    0.000504e-6,     5767.611978898,  2.328281115 },
-      {    0.000485e-6,     5753.384884897,  1.685874771 },
-      {    0.000463e-6,     7860.419392439,  5.297703006 },
-      {    0.000604e-6,      515.463871093,  0.591998446 },
-      {    0.000443e-6,    12168.002696575,  4.830881244 },
-      {    0.000570e-6,      199.072001436,  3.899190272 },
-      {    0.000465e-6,    10969.965257698,  0.476681802 },
-      {    0.000424e-6,    -7079.373856808,  1.112242763 },
-   /* 581, 590 */
-      {    0.000427e-6,      735.876513532,  1.994214480 },
-      {    0.000478e-6,    -6127.655450557,  3.778025483 },
-      {    0.000414e-6,    10973.555686350,  5.441088327 },
-      {    0.000512e-6,     1589.072895284,  0.107123853 },
-      {    0.000378e-6,    10984.192351700,  0.915087231 },
-      {    0.000402e-6,    11371.704689758,  4.107281715 },
-      {    0.000453e-6,     9917.696874510,  1.917490952 },
-      {    0.000395e-6,      149.563197135,  2.763124165 },
-      {    0.000371e-6,     5739.157790895,  3.112111866 },
-      {    0.000350e-6,    11790.629088659,  0.440639857 },
-   /* 591, 600 */
-      {    0.000356e-6,     6133.512652857,  5.444568842 },
-      {    0.000344e-6,      412.371096874,  5.676832684 },
-      {    0.000383e-6,      955.599741609,  5.559734846 },
-      {    0.000333e-6,     6496.374945429,  0.261537984 },
-      {    0.000340e-6,     6055.549660552,  5.975534987 },
-      {    0.000334e-6,     1066.495477190,  2.335063907 },
-      {    0.000399e-6,    11506.769769794,  5.321230910 },
-      {    0.000314e-6,    18319.536584880,  2.313312404 },
-      {    0.000424e-6,     1052.268383188,  1.211961766 },
-      {    0.000307e-6,       63.735898303,  3.169551388 },
-   /* 601, 610 */
-      {    0.000329e-6,       29.821438149,  6.106912080 },
-      {    0.000357e-6,     6309.374169791,  4.223760346 },
-      {    0.000312e-6,    -3738.761430108,  2.180556645 },
-      {    0.000301e-6,      309.278322656,  1.499984572 },
-      {    0.000268e-6,    12043.574281889,  2.447520648 },
-      {    0.000257e-6,    12491.370101415,  3.662331761 },
-      {    0.000290e-6,      625.670192312,  1.272834584 },
-      {    0.000256e-6,     5429.879468239,  1.913426912 },
-      {    0.000339e-6,     3496.032826134,  4.165930011 },
-      {    0.000283e-6,     3930.209696220,  4.325565754 },
-   /* 611, 620 */
-      {    0.000241e-6,    12528.018664345,  3.832324536 },
-      {    0.000304e-6,     4686.889407707,  1.612348468 },
-      {    0.000259e-6,    16200.772724501,  3.470173146 },
-      {    0.000238e-6,    12139.553509107,  1.147977842 },
-      {    0.000236e-6,     6172.869528772,  3.776271728 },
-      {    0.000296e-6,    -7058.598461315,  0.460368852 },
-      {    0.000306e-6,    10575.406682942,  0.554749016 },
-      {    0.000251e-6,    17298.182327326,  0.834332510 },
-      {    0.000290e-6,     4732.030627343,  4.759564091 },
-      {    0.000261e-6,     5884.926846583,  0.298259862 },
-   /* 621, 630 */
-      {    0.000249e-6,     5547.199336460,  3.749366406 },
-      {    0.000213e-6,    11712.955318231,  5.415666119 },
-      {    0.000223e-6,     4701.116501708,  2.703203558 },
-      {    0.000268e-6,     -640.877607382,  0.283670793 },
-      {    0.000209e-6,     5636.065016677,  1.238477199 },
-      {    0.000193e-6,    10177.257679534,  1.943251340 },
-      {    0.000182e-6,     6283.143160294,  2.456157599 },
-      {    0.000184e-6,     -227.526189440,  5.888038582 },
-      {    0.000182e-6,    -6283.008539689,  0.241332086 },
-      {    0.000228e-6,    -6284.056171060,  2.657323816 },
-   /* 631, 640 */
-      {    0.000166e-6,     7238.675591600,  5.930629110 },
-      {    0.000167e-6,     3097.883822726,  5.570955333 },
-      {    0.000159e-6,     -323.505416657,  5.786670700 },
-      {    0.000154e-6,    -4136.910433516,  1.517805532 },
-      {    0.000176e-6,    12029.347187887,  3.139266834 },
-      {    0.000167e-6,    12132.439962106,  3.556352289 },
-      {    0.000153e-6,      202.253395174,  1.463313961 },
-      {    0.000157e-6,    17267.268201691,  1.586837396 },
-      {    0.000142e-6,    83996.847317911,  0.022670115 },
-      {    0.000152e-6,    17260.154654690,  0.708528947 },
-   /* 641, 650 */
-      {    0.000144e-6,     6084.003848555,  5.187075177 },
-      {    0.000135e-6,     5756.566278634,  1.993229262 },
-      {    0.000134e-6,     5750.203491159,  3.457197134 },
-      {    0.000144e-6,     5326.786694021,  6.066193291 },
-      {    0.000160e-6,    11015.106477335,  1.710431974 },
-      {    0.000133e-6,     3634.621024518,  2.836451652 },
-      {    0.000134e-6,    18073.704938650,  5.453106665 },
-      {    0.000134e-6,     1162.474704408,  5.326898811 },
-      {    0.000128e-6,     5642.198242609,  2.511652591 },
-      {    0.000160e-6,      632.783739313,  5.628785365 },
-   /* 651, 660 */
-      {    0.000132e-6,    13916.019109642,  0.819294053 },
-      {    0.000122e-6,    14314.168113050,  5.677408071 },
-      {    0.000125e-6,    12359.966151546,  5.251984735 },
-      {    0.000121e-6,     5749.452731634,  2.210924603 },
-      {    0.000136e-6,     -245.831646229,  1.646502367 },
-      {    0.000120e-6,     5757.317038160,  3.240883049 },
-      {    0.000134e-6,    12146.667056108,  3.059480037 },
-      {    0.000137e-6,     6206.809778716,  1.867105418 },
-      {    0.000141e-6,    17253.041107690,  2.069217456 },
-      {    0.000129e-6,    -7477.522860216,  2.781469314 },
-   /* 661, 670 */
-      {    0.000116e-6,     5540.085789459,  4.281176991 },
-      {    0.000116e-6,     9779.108676125,  3.320925381 },
-      {    0.000129e-6,     5237.921013804,  3.497704076 },
-      {    0.000113e-6,     5959.570433334,  0.983210840 },
-      {    0.000122e-6,     6282.095528923,  2.674938860 },
-      {    0.000140e-6,      -11.045700264,  4.957936982 },
-      {    0.000108e-6,    23543.230504682,  1.390113589 },
-      {    0.000106e-6,   -12569.674818332,  0.429631317 },
-      {    0.000110e-6,     -266.607041722,  5.501340197 },
-      {    0.000115e-6,    12559.038152982,  4.691456618 },
-   /* 671, 680 */
-      {    0.000134e-6,    -2388.894020449,  0.577313584 },
-      {    0.000109e-6,    10440.274292604,  6.218148717 },
-      {    0.000102e-6,     -543.918059096,  1.477842615 },
-      {    0.000108e-6,    21228.392023546,  2.237753948 },
-      {    0.000101e-6,    -4535.059436924,  3.100492232 },
-      {    0.000103e-6,       76.266071276,  5.594294322 },
-      {    0.000104e-6,      949.175608970,  5.674287810 },
-      {    0.000101e-6,    13517.870106233,  2.196632348 },
-      {    0.000100e-6,    11933.367960670,  4.056084160 },
-
-   /* T^2 */
-      {    4.322990e-6,     6283.075849991,  2.642893748 },
-   /* 681, 690 */
-      {    0.406495e-6,        0.000000000,  4.712388980 },
-      {    0.122605e-6,    12566.151699983,  2.438140634 },
-      {    0.019476e-6,      213.299095438,  1.642186981 },
-      {    0.016916e-6,      529.690965095,  4.510959344 },
-      {    0.013374e-6,       -3.523118349,  1.502210314 },
-      {    0.008042e-6,       26.298319800,  0.478549024 },
-      {    0.007824e-6,      155.420399434,  5.254710405 },
-      {    0.004894e-6,     5746.271337896,  4.683210850 },
-      {    0.004875e-6,     5760.498431898,  0.759507698 },
-      {    0.004416e-6,     5223.693919802,  6.028853166 },
-   /* 691, 700 */
-      {    0.004088e-6,       -7.113547001,  0.060926389 },
-      {    0.004433e-6,    77713.771467920,  3.627734103 },
-      {    0.003277e-6,    18849.227549974,  2.327912542 },
-      {    0.002703e-6,     6062.663207553,  1.271941729 },
-      {    0.003435e-6,     -775.522611324,  0.747446224 },
-      {    0.002618e-6,     6076.890301554,  3.633715689 },
-      {    0.003146e-6,      206.185548437,  5.647874613 },
-      {    0.002544e-6,     1577.343542448,  6.232904270 },
-      {    0.002218e-6,     -220.412642439,  1.309509946 },
-      {    0.002197e-6,     5856.477659115,  2.407212349 },
-   /* 701, 710 */
-      {    0.002897e-6,     5753.384884897,  5.863842246 },
-      {    0.001766e-6,      426.598190876,  0.754113147 },
-      {    0.001738e-6,     -796.298006816,  2.714942671 },
-      {    0.001695e-6,      522.577418094,  2.629369842 },
-      {    0.001584e-6,     5507.553238667,  1.341138229 },
-      {    0.001503e-6,     -242.728603974,  0.377699736 },
-      {    0.001552e-6,     -536.804512095,  2.904684667 },
-      {    0.001370e-6,     -398.149003408,  1.265599125 },
-      {    0.001889e-6,    -5573.142801634,  4.413514859 },
-      {    0.001722e-6,     6069.776754553,  2.445966339 },
-   /* 711, 720 */
-      {    0.001124e-6,     1059.381930189,  5.041799657 },
-      {    0.001258e-6,      553.569402842,  3.849557278 },
-      {    0.000831e-6,      951.718406251,  2.471094709 },
-      {    0.000767e-6,     4694.002954708,  5.363125422 },
-      {    0.000756e-6,     1349.867409659,  1.046195744 },
-      {    0.000775e-6,      -11.045700264,  0.245548001 },
-      {    0.000597e-6,     2146.165416475,  4.543268798 },
-      {    0.000568e-6,     5216.580372801,  4.178853144 },
-      {    0.000711e-6,     1748.016413067,  5.934271972 },
-      {    0.000499e-6,    12036.460734888,  0.624434410 },
-   /* 721, 730 */
-      {    0.000671e-6,    -1194.447010225,  4.136047594 },
-      {    0.000488e-6,     5849.364112115,  2.209679987 },
-      {    0.000621e-6,     6438.496249426,  4.518860804 },
-      {    0.000495e-6,    -6286.598968340,  1.868201275 },
-      {    0.000456e-6,     5230.807466803,  1.271231591 },
-      {    0.000451e-6,     5088.628839767,  0.084060889 },
-      {    0.000435e-6,     5643.178563677,  3.324456609 },
-      {    0.000387e-6,    10977.078804699,  4.052488477 },
-      {    0.000547e-6,   161000.685737473,  2.841633844 },
-      {    0.000522e-6,     3154.687084896,  2.171979966 },
-   /* 731, 740 */
-      {    0.000375e-6,     5486.777843175,  4.983027306 },
-      {    0.000421e-6,     5863.591206116,  4.546432249 },
-      {    0.000439e-6,     7084.896781115,  0.522967921 },
-      {    0.000309e-6,     2544.314419883,  3.172606705 },
-      {    0.000347e-6,     4690.479836359,  1.479586566 },
-      {    0.000317e-6,      801.820931124,  3.553088096 },
-      {    0.000262e-6,      419.484643875,  0.606635550 },
-      {    0.000248e-6,     6836.645252834,  3.014082064 },
-      {    0.000245e-6,    -1592.596013633,  5.519526220 },
-      {    0.000225e-6,     4292.330832950,  2.877956536 },
-   /* 741, 750 */
-      {    0.000214e-6,     7234.794256242,  1.605227587 },
-      {    0.000205e-6,     5767.611978898,  0.625804796 },
-      {    0.000180e-6,    10447.387839604,  3.499954526 },
-      {    0.000229e-6,      199.072001436,  5.632304604 },
-      {    0.000214e-6,      639.897286314,  5.960227667 },
-      {    0.000175e-6,     -433.711737877,  2.162417992 },
-      {    0.000209e-6,      515.463871093,  2.322150893 },
-      {    0.000173e-6,     6040.347246017,  2.556183691 },
-      {    0.000184e-6,     6309.374169791,  4.732296790 },
-      {    0.000227e-6,   149854.400134205,  5.385812217 },
-   /* 751, 760 */
-      {    0.000154e-6,     8031.092263058,  5.120720920 },
-      {    0.000151e-6,     5739.157790895,  4.815000443 },
-      {    0.000197e-6,     7632.943259650,  0.222827271 },
-      {    0.000197e-6,       74.781598567,  3.910456770 },
-      {    0.000138e-6,     6055.549660552,  1.397484253 },
-      {    0.000149e-6,    -6127.655450557,  5.333727496 },
-      {    0.000137e-6,     3894.181829542,  4.281749907 },
-      {    0.000135e-6,     9437.762934887,  5.979971885 },
-      {    0.000139e-6,    -2352.866153772,  4.715630782 },
-      {    0.000142e-6,     6812.766815086,  0.513330157 },
-   /* 761, 770 */
-      {    0.000120e-6,    -4705.732307544,  0.194160689 },
-      {    0.000131e-6,   -71430.695617928,  0.000379226 },
-      {    0.000124e-6,     6279.552731642,  2.122264908 },
-      {    0.000108e-6,    -6256.777530192,  0.883445696 },
-
-   /* T^3 */
-      {    0.143388e-6,     6283.075849991,  1.131453581 },
-      {    0.006671e-6,    12566.151699983,  0.775148887 },
-      {    0.001480e-6,      155.420399434,  0.480016880 },
-      {    0.000934e-6,      213.299095438,  6.144453084 },
-      {    0.000795e-6,      529.690965095,  2.941595619 },
-      {    0.000673e-6,     5746.271337896,  0.120415406 },
-   /* 771, 780 */
-      {    0.000672e-6,     5760.498431898,  5.317009738 },
-      {    0.000389e-6,     -220.412642439,  3.090323467 },
-      {    0.000373e-6,     6062.663207553,  3.003551964 },
-      {    0.000360e-6,     6076.890301554,  1.918913041 },
-      {    0.000316e-6,      -21.340641002,  5.545798121 },
-      {    0.000315e-6,     -242.728603974,  1.884932563 },
-      {    0.000278e-6,      206.185548437,  1.266254859 },
-      {    0.000238e-6,     -536.804512095,  4.532664830 },
-      {    0.000185e-6,      522.577418094,  4.578313856 },
-      {    0.000245e-6,    18849.227549974,  0.587467082 },
-   /* 781, 787 */
-      {    0.000180e-6,      426.598190876,  5.151178553 },
-      {    0.000200e-6,      553.569402842,  5.355983739 },
-      {    0.000141e-6,     5223.693919802,  1.336556009 },
-      {    0.000104e-6,     5856.477659115,  4.239842759 },
-
-   /* T^4 */
-      {    0.003826e-6,     6283.075849991,  5.705257275 },
-      {    0.000303e-6,    12566.151699983,  5.407132842 },
-      {    0.000209e-6,      155.420399434,  1.989815753 }
-   };
-
-
-/* Time since J2000.0 in Julian millennia. */
-   t = ((date1 - DJ00) + date2) / DJM;
-
-/* ================= */
-/* Topocentric terms */
-/* ================= */
-
-/* Convert UT to local solar time in radians. */
-   tsol = fmod(ut, 1.0) * D2PI + elong;
-
-/* FUNDAMENTAL ARGUMENTS:  Simon et al. 1994. */
-
-/* Combine time argument (millennia) with deg/arcsec factor. */
-   w = t / 3600.0;
-
-/* Sun Mean Longitude. */
-   elsun = fmod(280.46645683 + 1296027711.03429 * w, 360.0) * DD2R;
-
-/* Sun Mean Anomaly. */
-   emsun = fmod(357.52910918 + 1295965810.481 * w, 360.0) * DD2R;
-
-/* Mean Elongation of Moon from Sun. */
-   d = fmod(297.85019547 + 16029616012.090 * w, 360.0) * DD2R;
-
-/* Mean Longitude of Jupiter. */
-   elj = fmod(34.35151874 + 109306899.89453 * w, 360.0) * DD2R;
-
-/* Mean Longitude of Saturn. */
-   els = fmod(50.07744430 + 44046398.47038 * w, 360.0) * DD2R;
-
-/* TOPOCENTRIC TERMS:  Moyer 1981 and Murray 1983. */
-   wt =   +  0.00029e-10 * u * sin(tsol + elsun - els)
-          +  0.00100e-10 * u * sin(tsol - 2.0 * emsun)
-          +  0.00133e-10 * u * sin(tsol - d)
-          +  0.00133e-10 * u * sin(tsol + elsun - elj)
-          -  0.00229e-10 * u * sin(tsol + 2.0 * elsun + emsun)
-          -  0.02200e-10 * v * cos(elsun + emsun)
-          +  0.05312e-10 * u * sin(tsol - emsun)
-          -  0.13677e-10 * u * sin(tsol + 2.0 * elsun)
-          -  1.31840e-10 * v * cos(elsun)
-          +  3.17679e-10 * u * sin(tsol);
-
-/* ===================== */
-/* Fairhead et al. model */
-/* ===================== */
-
-/* T**0 */
-   w0 = 0;
-   for (j = 473; j >= 0; j--) {
-      w0 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]);
-   }
-
-/* T**1 */
-   w1 = 0;
-   for (j = 678; j >= 474; j--) {
-      w1 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]);
-   }
-
-/* T**2 */
-   w2 = 0;
-   for (j = 763; j >= 679; j--) {
-      w2 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]);
-   }
-
-/* T**3 */
-   w3 = 0;
-   for (j = 783; j >= 764; j--) {
-      w3 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]);
-   }
-
-/* T**4 */
-   w4 = 0;
-   for (j = 786; j >= 784; j--) {
-      w4 += fairhd[j][0] * sin(fairhd[j][1] * t + fairhd[j][2]);
-   }
-
-/* Multiply by powers of T and combine. */
-   wf = t * (t * (t * (t * w4 + w3) + w2) + w1) + w0;
-
-/* Adjustments to use JPL planetary masses instead of IAU. */
-   wj =   0.00065e-6 * sin(6069.776754 * t + 4.021194) +
-          0.00033e-6 * sin( 213.299095 * t + 5.543132) +
-        (-0.00196e-6 * sin(6208.294251 * t + 5.696701)) +
-        (-0.00173e-6 * sin(  74.781599 * t + 2.435900)) +
-          0.03638e-6 * t * t;
-
-/* ============ */
-/* Final result */
-/* ============ */
-
-/* TDB-TT in seconds. */
-   w = wt + wf + wj;
-
-   return w;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-#include <string.h>
-
-int iauDtf2d(const char *scale, int iy, int im, int id,
-             int ihr, int imn, double sec, double *d1, double *d2)
-/*
-**  - - - - - - - - -
-**   i a u D t f 2 d
-**  - - - - - - - - -
-**
-**  Encode date and time fields into 2-part Julian Date (or in the case
-**  of UTC a quasi-JD form that includes special provision for leap
-**  seconds).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     scale     char[]  time scale ID (Note 1)
-**     iy,im,id  int     year, month, day in Gregorian calendar (Note 2)
-**     ihr,imn   int     hour, minute
-**     sec       double  seconds
-**
-**  Returned:
-**     d1,d2     double  2-part Julian Date (Notes 3,4)
-**
-**  Returned (function value):
-**               int     status: +3 = both of next two
-**                               +2 = time is after end of day (Note 5)
-**                               +1 = dubious year (Note 6)
-**                                0 = OK
-**                               -1 = bad year
-**                               -2 = bad month
-**                               -3 = bad day
-**                               -4 = bad hour
-**                               -5 = bad minute
-**                               -6 = bad second (<0)
-**
-**  Notes:
-**
-**  1) scale identifies the time scale.  Only the value "UTC" (in upper
-**     case) is significant, and enables handling of leap seconds (see
-**     Note 4).
-**
-**  2) For calendar conventions and limitations, see iauCal2jd.
-**
-**  3) The sum of the results, d1+d2, is Julian Date, where normally d1
-**     is the Julian Day Number and d2 is the fraction of a day.  In the
-**     case of UTC, where the use of JD is problematical, special
-**     conventions apply:  see the next note.
-**
-**  4) JD cannot unambiguously represent UTC during a leap second unless
-**     special measures are taken.  The SOFA internal convention is that
-**     the quasi-JD day represents UTC days whether the length is 86399,
-**     86400 or 86401 SI seconds.
-**
-**  5) The warning status "time is after end of day" usually means that
-**     the sec argument is greater than 60.0.  However, in a day ending
-**     in a leap second the limit changes to 61.0 (or 59.0 in the case
-**     of a negative leap second).
-**
-**  6) The warning status "dubious year" flags UTCs that predate the
-**     introduction of the time scale and that are too far in the future
-**     to be trusted.  See iauDat for further details.
-**
-**  7) Only in the case of continuous and regular time scales (TAI, TT,
-**     TCG, TCB and TDB) is the result d1+d2 a Julian Date, strictly
-**     speaking.  In the other cases (UT1 and UTC) the result must be
-**     used with circumspection;  in particular the difference between
-**     two such results cannot be interpreted as a precise time
-**     interval.
-**
-**  Called:
-**     iauCal2jd    Gregorian calendar to JD
-**     iauDat       delta(AT) = TAI-UTC
-**     iauJd2cal    JD to Gregorian calendar
-**
-**  This revision:  2012 February 12
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int js, iy2, im2, id2;
-   double dj, w, day, seclim, dat1, dat2, ddt, time;
-
-
-/* Today's Julian Day Number. */
-   js = iauCal2jd(iy, im, id, &dj, &w);
-   if ( js ) return js;
-   dj += w;
-
-/* Day length and final minute length in seconds (provisional). */
-   day = DAYSEC;
-   seclim = 60;
-
-/* Deal with the UTC leap second case. */
-   if ( ! strcmp(scale,"UTC") ) {
-
-   /* TAI-UTC today. */
-      js = iauDat(iy, im, id, 0.0, &dat1);
-      if ( js < 0 ) return js;
-
-   /* TAI-UTC tomorrow. */
-      js = iauJd2cal ( dj, 1.0, &iy2, &im2, &id2, &w);
-      if ( js ) return js;
-      js = iauDat(iy2, im2, id2, 0.0, &dat2);
-      if ( js < 0 ) return js;
-
-   /* The change in TAI-UTC (seconds). */
-      ddt = dat2 - dat1;
-
-   /* If leap second day, correct the day and final minute lengths. */
-      if ( fabs(ddt) > 0.5 ) {
-         day += ddt;
-         if ( ihr == 23 && imn == 59 ) seclim += ddt;
-      }
-   }
-
-/* Validate the time. */
-   if ( ihr >= 0 && ihr <= 23 ) {
-      if ( imn >= 0 && imn <= 59 ) {
-         if ( sec >= 0 ) {
-            if ( sec >= seclim ) {
-               js += 2;
-            }
-         } else {
-            js = -6;
-         }
-      } else {
-         js = -5;
-      }
-   } else {
-      js = -4;
-   }
-   if ( js < 0 ) return js;
-
-/* The time in days. */
-   time  = ( 60.0 * ( (double) ( 60 * ihr + imn ) ) + sec ) / day;
-
-/* Return the date and time. */
-   *d1 = dj;
-   *d2 = time;
-
-/* Status. */
-   return js;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofa.h"
-
-double iauEe00(double date1, double date2, double epsa, double dpsi)
-/*
-**  - - - - - - - -
-**   i a u E e 0 0
-**  - - - - - - - -
-**
-**  The equation of the equinoxes, compatible with IAU 2000 resolutions,
-**  given the nutation in longitude and the mean obliquity.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
-**     epsa         double    mean obliquity (Note 2)
-**     dpsi         double    nutation in longitude (Note 3)
-**
-**  Returned (function value):
-**                  double    equation of the equinoxes (Note 4)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The obliquity, in radians, is mean of date.
-**
-**  3) The result, which is in radians, operates in the following sense:
-**
-**        Greenwich apparent ST = GMST + equation of the equinoxes
-**
-**  4) The result is compatible with the IAU 2000 resolutions.  For
-**     further details, see IERS Conventions 2003 and Capitaine et al.
-**     (2002).
-**
-**  Called:
-**     iauEect00    equation of the equinoxes complementary terms
-**
-**  References:
-**
-**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
-**     implement the IAU 2000 definition of UT1", Astronomy &
-**     Astrophysics, 406, 1135-1149 (2003)
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2008 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double ee;
-
-
-/* Equation of the equinoxes. */
-   ee = dpsi * cos(epsa) + iauEect00(date1, date2);
-
-   return ee;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofa.h"
-
-double iauEe00a(double date1, double date2)
-/*
-**  - - - - - - - - -
-**   i a u E e 0 0 a
-**  - - - - - - - - -
-**
-**  Equation of the equinoxes, compatible with IAU 2000 resolutions.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (function value):
-**                  double    equation of the equinoxes (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The result, which is in radians, operates in the following sense:
-**
-**        Greenwich apparent ST = GMST + equation of the equinoxes
-**
-**  3) The result is compatible with the IAU 2000 resolutions.  For
-**     further details, see IERS Conventions 2003 and Capitaine et al.
-**     (2002).
-**
-**  Called:
-**     iauPr00      IAU 2000 precession adjustments
-**     iauObl80     mean obliquity, IAU 1980
-**     iauNut00a    nutation, IAU 2000A
-**     iauEe00      equation of the equinoxes, IAU 2000
-**
-**  References:
-**
-**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
-**     implement the IAU 2000 definition of UT1", Astronomy &
-**     Astrophysics, 406, 1135-1149 (2003).
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004).
-**
-**  This revision:  2008 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dpsipr, depspr, epsa, dpsi, deps, ee;
-
-
-/* IAU 2000 precession-rate adjustments. */
-   iauPr00(date1, date2, &dpsipr, &depspr);
-
-/* Mean obliquity, consistent with IAU 2000 precession-nutation. */
-   epsa = iauObl80(date1, date2) + depspr;
-
-/* Nutation in longitude. */
-   iauNut00a(date1, date2, &dpsi, &deps);
-
-/* Equation of the equinoxes. */
-   ee = iauEe00(date1, date2, epsa, dpsi);
-
-   return ee;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofa.h"
-
-double iauEe00b(double date1, double date2)
-/*
-**  - - - - - - - - -
-**   i a u E e 0 0 b
-**  - - - - - - - - -
-**
-**  Equation of the equinoxes, compatible with IAU 2000 resolutions but
-**  using the truncated nutation model IAU 2000B.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (function value):
-**                  double    equation of the equinoxes (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The result, which is in radians, operates in the following sense:
-**
-**        Greenwich apparent ST = GMST + equation of the equinoxes
-**
-**  3) The result is compatible with the IAU 2000 resolutions except
-**     that accuracy has been compromised for the sake of speed.  For
-**     further details, see McCarthy & Luzum (2001), IERS Conventions
-**     2003 and Capitaine et al. (2003).
-**
-**  Called:
-**     iauPr00      IAU 2000 precession adjustments
-**     iauObl80     mean obliquity, IAU 1980
-**     iauNut00b    nutation, IAU 2000B
-**     iauEe00      equation of the equinoxes, IAU 2000
-**
-**  References:
-**
-**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
-**     implement the IAU 2000 definition of UT1", Astronomy &
-**     Astrophysics, 406, 1135-1149 (2003)
-**
-**     McCarthy, D.D. & Luzum, B.J., "An abridged model of the
-**     precession-nutation of the celestial pole", Celestial Mechanics &
-**     Dynamical Astronomy, 85, 37-49 (2003)
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2008 May 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dpsipr, depspr, epsa, dpsi, deps, ee;
-
-
-/* IAU 2000 precession-rate adjustments. */
-   iauPr00(date1, date2, &dpsipr, &depspr);
-
-/* Mean obliquity, consistent with IAU 2000 precession-nutation. */
-   epsa = iauObl80(date1, date2) + depspr;
-
-/* Nutation in longitude. */
-   iauNut00b(date1, date2, &dpsi, &deps);
-
-/* Equation of the equinoxes. */
-   ee = iauEe00(date1, date2, epsa, dpsi);
-
-   return ee;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofa.h"
-
-double iauEe06a(double date1, double date2)
-/*
-**  - - - - - - - - -
-**   i a u E e 0 6 a
-**  - - - - - - - - -
-**
-**  Equation of the equinoxes, compatible with IAU 2000 resolutions and
-**  IAU 2006/2000A precession-nutation.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (function value):
-**                  double    equation of the equinoxes (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The result, which is in radians, operates in the following sense:
-**
-**        Greenwich apparent ST = GMST + equation of the equinoxes
-**
-**  Called:
-**     iauAnpm      normalize angle into range +/- pi
-**     iauGst06a    Greenwich apparent sidereal time, IAU 2006/2000A
-**     iauGmst06    Greenwich mean sidereal time, IAU 2006
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG
-**
-**  This revision:  2008 May 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double gst06a, gmst06, ee;
-
-
-/* Apparent and mean sidereal times. */
-   gst06a = iauGst06a(0.0, 0.0, date1, date2);
-   gmst06 = iauGmst06(0.0, 0.0, date1, date2);
-
-/* Equation of the equinoxes. */
-   ee  = iauAnpm(gst06a - gmst06);
-
-   return ee;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauEect00(double date1, double date2)
-/*
-**  - - - - - - - - - -
-**   i a u E e c t 0 0
-**  - - - - - - - - - -
-**
-**  Equation of the equinoxes complementary terms, consistent with
-**  IAU 2000 resolutions.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (function value):
-**                  double   complementary terms (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The "complementary terms" are part of the equation of the
-**     equinoxes (EE), classically the difference between apparent and
-**     mean Sidereal Time:
-**
-**        GAST = GMST + EE
-**
-**     with:
-**
-**        EE = dpsi * cos(eps)
-**
-**     where dpsi is the nutation in longitude and eps is the obliquity
-**     of date.  However, if the rotation of the Earth were constant in
-**     an inertial frame the classical formulation would lead to
-**     apparent irregularities in the UT1 timescale traceable to side-
-**     effects of precession-nutation.  In order to eliminate these
-**     effects from UT1, "complementary terms" were introduced in 1994
-**     (IAU, 1994) and took effect from 1997 (Capitaine and Gontier,
-**     1993):
-**
-**        GAST = GMST + CT + EE
-**
-**     By convention, the complementary terms are included as part of
-**     the equation of the equinoxes rather than as part of the mean
-**     Sidereal Time.  This slightly compromises the "geometrical"
-**     interpretation of mean sidereal time but is otherwise
-**     inconsequential.
-**
-**     The present function computes CT in the above expression,
-**     compatible with IAU 2000 resolutions (Capitaine et al., 2002, and
-**     IERS Conventions 2003).
-**
-**  Called:
-**     iauFal03     mean anomaly of the Moon
-**     iauFalp03    mean anomaly of the Sun
-**     iauFaf03     mean argument of the latitude of the Moon
-**     iauFad03     mean elongation of the Moon from the Sun
-**     iauFaom03    mean longitude of the Moon's ascending node
-**     iauFave03    mean longitude of Venus
-**     iauFae03     mean longitude of Earth
-**     iauFapa03    general accumulated precession in longitude
-**
-**  References:
-**
-**     Capitaine, N. & Gontier, A.-M., Astron. Astrophys., 275,
-**     645-650 (1993)
-**
-**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
-**     implement the IAU 2000 definition of UT1", Astronomy &
-**     Astrophysics, 406, 1135-1149 (2003)
-**
-**     IAU Resolution C7, Recommendation 3 (1994)
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Time since J2000.0, in Julian centuries */
-   double t;
-
-/* Miscellaneous */
-   int i, j;
-   double a, s0, s1;
-
-/* Fundamental arguments */
-   double fa[14];
-
-/* Returned value. */
-   double eect;
-
-/* ----------------------------------------- */
-/* The series for the EE complementary terms */
-/* ----------------------------------------- */
-
-   typedef struct {
-      int nfa[8];      /* coefficients of l,l',F,D,Om,LVe,LE,pA */
-      double s, c;     /* sine and cosine coefficients */
-   } TERM;
-
-/* Terms of order t^0 */
-   static const TERM e0[] = {
-
-   /* 1-10 */
-      {{ 0,  0,  0,  0,  1,  0,  0,  0}, 2640.96e-6, -0.39e-6 },
-      {{ 0,  0,  0,  0,  2,  0,  0,  0},   63.52e-6, -0.02e-6 },
-      {{ 0,  0,  2, -2,  3,  0,  0,  0},   11.75e-6,  0.01e-6 },
-      {{ 0,  0,  2, -2,  1,  0,  0,  0},   11.21e-6,  0.01e-6 },
-      {{ 0,  0,  2, -2,  2,  0,  0,  0},   -4.55e-6,  0.00e-6 },
-      {{ 0,  0,  2,  0,  3,  0,  0,  0},    2.02e-6,  0.00e-6 },
-      {{ 0,  0,  2,  0,  1,  0,  0,  0},    1.98e-6,  0.00e-6 },
-      {{ 0,  0,  0,  0,  3,  0,  0,  0},   -1.72e-6,  0.00e-6 },
-      {{ 0,  1,  0,  0,  1,  0,  0,  0},   -1.41e-6, -0.01e-6 },
-      {{ 0,  1,  0,  0, -1,  0,  0,  0},   -1.26e-6, -0.01e-6 },
-
-   /* 11-20 */
-      {{ 1,  0,  0,  0, -1,  0,  0,  0},   -0.63e-6,  0.00e-6 },
-      {{ 1,  0,  0,  0,  1,  0,  0,  0},   -0.63e-6,  0.00e-6 },
-      {{ 0,  1,  2, -2,  3,  0,  0,  0},    0.46e-6,  0.00e-6 },
-      {{ 0,  1,  2, -2,  1,  0,  0,  0},    0.45e-6,  0.00e-6 },
-      {{ 0,  0,  4, -4,  4,  0,  0,  0},    0.36e-6,  0.00e-6 },
-      {{ 0,  0,  1, -1,  1, -8, 12,  0},   -0.24e-6, -0.12e-6 },
-      {{ 0,  0,  2,  0,  0,  0,  0,  0},    0.32e-6,  0.00e-6 },
-      {{ 0,  0,  2,  0,  2,  0,  0,  0},    0.28e-6,  0.00e-6 },
-      {{ 1,  0,  2,  0,  3,  0,  0,  0},    0.27e-6,  0.00e-6 },
-      {{ 1,  0,  2,  0,  1,  0,  0,  0},    0.26e-6,  0.00e-6 },
-
-   /* 21-30 */
-      {{ 0,  0,  2, -2,  0,  0,  0,  0},   -0.21e-6,  0.00e-6 },
-      {{ 0,  1, -2,  2, -3,  0,  0,  0},    0.19e-6,  0.00e-6 },
-      {{ 0,  1, -2,  2, -1,  0,  0,  0},    0.18e-6,  0.00e-6 },
-      {{ 0,  0,  0,  0,  0,  8,-13, -1},   -0.10e-6,  0.05e-6 },
-      {{ 0,  0,  0,  2,  0,  0,  0,  0},    0.15e-6,  0.00e-6 },
-      {{ 2,  0, -2,  0, -1,  0,  0,  0},   -0.14e-6,  0.00e-6 },
-      {{ 1,  0,  0, -2,  1,  0,  0,  0},    0.14e-6,  0.00e-6 },
-      {{ 0,  1,  2, -2,  2,  0,  0,  0},   -0.14e-6,  0.00e-6 },
-      {{ 1,  0,  0, -2, -1,  0,  0,  0},    0.14e-6,  0.00e-6 },
-      {{ 0,  0,  4, -2,  4,  0,  0,  0},    0.13e-6,  0.00e-6 },
-
-   /* 31-33 */
-      {{ 0,  0,  2, -2,  4,  0,  0,  0},   -0.11e-6,  0.00e-6 },
-      {{ 1,  0, -2,  0, -3,  0,  0,  0},    0.11e-6,  0.00e-6 },
-      {{ 1,  0, -2,  0, -1,  0,  0,  0},    0.11e-6,  0.00e-6 }
-   };
-
-/* Terms of order t^1 */
-   static const TERM e1[] = {
-      {{ 0,  0,  0,  0,  1,  0,  0,  0},    -0.87e-6,  0.00e-6 }
-   };
-
-/* Number of terms in the series */
-   const int NE0 = (int) (sizeof e0 / sizeof (TERM));
-   const int NE1 = (int) (sizeof e1 / sizeof (TERM));
-
-/*--------------------------------------------------------------------*/
-
-/* Interval between fundamental epoch J2000.0 and current date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Fundamental Arguments (from IERS Conventions 2003) */
-
-/* Mean anomaly of the Moon. */
-   fa[0] = iauFal03(t);
-
-/* Mean anomaly of the Sun. */
-   fa[1] = iauFalp03(t);
-
-/* Mean longitude of the Moon minus that of the ascending node. */
-   fa[2] = iauFaf03(t);
-
-/* Mean elongation of the Moon from the Sun. */
-   fa[3] = iauFad03(t);
-
-/* Mean longitude of the ascending node of the Moon. */
-   fa[4] = iauFaom03(t);
-
-/* Mean longitude of Venus. */
-   fa[5] = iauFave03(t);
-
-/* Mean longitude of Earth. */
-   fa[6] = iauFae03(t);
-
-/* General precession in longitude. */
-   fa[7] = iauFapa03(t);
-
-/* Evaluate the EE complementary terms. */
-   s0 = 0.0;
-   s1 = 0.0;
-
-   for (i = NE0-1; i >= 0; i--) {
-      a = 0.0;
-      for (j = 0; j < 8; j++) {
-         a += (double)(e0[i].nfa[j]) * fa[j];
-      }
-      s0 += e0[i].s * sin(a) + e0[i].c * cos(a);
-   }
-
-   for (i = NE1-1; i >= 0; i--) {
-      a = 0.0;
-      for (j = 0; j < 8; j++) {
-         a += (double)(e1[i].nfa[j]) * fa[j];
-      }
-      s1 += e1[i].s * sin(a) + e1[i].c * cos(a);
-   }
-
-   eect = (s0 + s1 * t ) * DAS2R;
-
-   return eect;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauEform ( int n, double *a, double *f )
-/*
-**  - - - - - - - - -
-**   i a u E f o r m
-**  - - - - - - - - -
-**
-**  Earth reference ellipsoids.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     n    int         ellipsoid identifier (Note 1)
-**
-**  Returned:
-**     a    double      equatorial radius (meters, Note 2)
-**     f    double      flattening (Note 2)
-**
-**  Returned (function value):
-**          int         status:  0 = OK
-**                              -1 = illegal identifier (Note 3)
-**
-**  Notes:
-**
-**  1) The identifier n is a number that specifies the choice of
-**     reference ellipsoid.  The following are supported:
-**
-**        n    ellipsoid
-**
-**        1     WGS84
-**        2     GRS80
-**        3     WGS72
-**
-**     The n value has no significance outside the SOFA software.  For
-**     convenience, symbols WGS84 etc. are defined in sofam.h.
-**
-**  2) The ellipsoid parameters are returned in the form of equatorial
-**     radius in meters (a) and flattening (f).  The latter is a number
-**     around 0.00335, i.e. around 1/298.
-**
-**  3) For the case where an unsupported n value is supplied, zero a and
-**     f are returned, as well as error status.
-**
-**  References:
-**
-**     Department of Defense World Geodetic System 1984, National
-**     Imagery and Mapping Agency Technical Report 8350.2, Third
-**     Edition, p3-2.
-**
-**     Moritz, H., Bull. Geodesique 66-2, 187 (1992).
-**
-**     The Department of Defense World Geodetic System 1972, World
-**     Geodetic System Committee, May 1974.
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     p220.
-**
-**  This revision:  2012 February 23
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* Look up a and f for the specified reference ellipsoid. */
-   switch ( n ) {
-
-   case WGS84:
-      *a = 6378137.0;
-      *f = 1.0 / 298.257223563;
-      break;
-
-   case GRS80:
-      *a = 6378137.0;
-      *f = 1.0 / 298.257222101;
-      break;
-
-   case WGS72:
-      *a = 6378135.0;
-      *f = 1.0 / 298.26;
-      break;
-
-   default:
-
-   /* Invalid identifier. */
-      *a = 0.0;
-      *f = 0.0;
-      return -1;
-
-   }
-
-/* OK status. */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-
-}
-#include "sofam.h"
-
-double iauEo06a(double date1, double date2)
-/*
-**  - - - - - - - - -
-**   i a u E o 0 6 a
-**  - - - - - - - - -
-**
-**  Equation of the origins, IAU 2006 precession and IAU 2000A nutation.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (function value):
-**                  double    equation of the origins in radians
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The equation of the origins is the distance between the true
-**     equinox and the celestial intermediate origin and, equivalently,
-**     the difference between Earth rotation angle and Greenwich
-**     apparent sidereal time (ERA-GST).  It comprises the precession
-**     (since J2000.0) in right ascension plus the equation of the
-**     equinoxes (including the small correction terms).
-**
-**  Called:
-**     iauPnm06a    classical NPB matrix, IAU 2006/2000A
-**     iauBpn2xy    extract CIP X,Y coordinates from NPB matrix
-**     iauS06       the CIO locator s, given X,Y, IAU 2006
-**     iauEors      equation of the origins, Given NPB matrix and s
-**
-**  References:
-**
-**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
-**
-**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
-**
-**  This revision:  2008 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double r[3][3], x, y, s, eo;
-
-
-/* Classical nutation x precession x bias matrix. */
-   iauPnm06a(date1, date2, r);
-
-/* Extract CIP coordinates. */
-   iauBpn2xy(r, &x, &y);
-
-/* The CIO locator, s. */
-   s = iauS06(date1, date2, x, y);
-
-/* Solve for the EO. */
-   eo = iauEors(r, s);
-
-   return eo;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauEors(double rnpb[3][3], double s)
-/*
-**  - - - - - - - -
-**   i a u E o r s
-**  - - - - - - - -
-**
-**  Equation of the origins, given the classical NPB matrix and the
-**  quantity s.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     rnpb  double[3][3]  classical nutation x precession x bias matrix
-**     s     double        the quantity s (the CIO locator)
-**
-**  Returned (function value):
-**           double        the equation of the origins in radians.
-**
-**  Notes:
-**
-**  1)  The equation of the origins is the distance between the true
-**      equinox and the celestial intermediate origin and, equivalently,
-**      the difference between Earth rotation angle and Greenwich
-**      apparent sidereal time (ERA-GST).  It comprises the precession
-**      (since J2000.0) in right ascension plus the equation of the
-**      equinoxes (including the small correction terms).
-**
-**  2)  The algorithm is from Wallace & Capitaine (2006).
-**
-** References:
-**
-**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
-**
-**     Wallace, P. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
-**
-**  This revision:  2008 May 26
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double x, ax, xs, ys, zs, p, q, eo;
-
-
-/* Evaluate Wallace & Capitaine (2006) expression (16). */
-   x = rnpb[2][0];
-   ax = x / (1.0 + rnpb[2][2]);
-   xs = 1.0 - ax * x;
-   ys = -ax * rnpb[2][1];
-   zs = -x;
-   p = rnpb[0][0] * xs + rnpb[0][1] * ys + rnpb[0][2] * zs;
-   q = rnpb[1][0] * xs + rnpb[1][1] * ys + rnpb[1][2] * zs;
-   eo = ((p != 0) || (q != 0)) ? s - atan2(q, p) : s;
-
-   return eo;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauEpb(double dj1, double dj2)
-/*
-**  - - - - - - -
-**   i a u E p b
-**  - - - - - - -
-**
-**  Julian Date to Besselian Epoch.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     dj1,dj2    double     Julian Date (see note)
-**
-**  Returned (function value):
-**                double     Besselian Epoch.
-**
-**  Note:
-**
-**     The Julian Date is supplied in two pieces, in the usual SOFA
-**     manner, which is designed to preserve time resolution.  The
-**     Julian Date is available as a single number by adding dj1 and
-**     dj2.  The maximum resolution is achieved if dj1 is 2451545D0
-**     (J2000.0).
-**
-**  Reference:
-**
-**     Lieske,J.H., 1979. Astron.Astrophys.,73,282.
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* J2000.0 minus B1900.0 (2415019.81352) in Julian days */
-   static const double D1900 = 36524.68648;
-
-   double epb;
-
-
-   epb = 1900.0 + ((dj1 - DJ00) + (dj2 + D1900)) / DTY;
-
-   return epb;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauEpb2jd(double epb, double *djm0, double *djm)
-/*
-**  - - - - - - - - - -
-**   i a u E p b 2 j d
-**  - - - - - - - - - -
-**
-**  Besselian Epoch to Julian Date.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     epb      double    Besselian Epoch (e.g. 1957.3D0)
-**
-**  Returned:
-**     djm0     double    MJD zero-point: always 2400000.5
-**     djm      double    Modified Julian Date
-**
-**  Note:
-**
-**     The Julian Date is returned in two pieces, in the usual SOFA
-**     manner, which is designed to preserve time resolution.  The
-**     Julian Date is available as a single number by adding djm0 and
-**     djm.
-**
-**  Reference:
-**
-**     Lieske, J.H., 1979, Astron.Astrophys. 73, 282.
-**
-**  This revision:  2008 May 24
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   *djm0 = 2400000.5;
-   *djm  =   15019.81352 + (epb - 1900.0) * DTY;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauEpj(double dj1, double dj2)
-/*
-**  - - - - - - -
-**   i a u E p j
-**  - - - - - - -
-**
-**  Julian Date to Julian Epoch.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     dj1,dj2    double     Julian Date (see note)
-**
-**  Returned (function value):
-**                double     Julian Epoch
-**
-**  Note:
-**
-**     The Julian Date is supplied in two pieces, in the usual SOFA
-**     manner, which is designed to preserve time resolution.  The
-**     Julian Date is available as a single number by adding dj1 and
-**     dj2.  The maximum resolution is achieved if dj1 is 2451545D0
-**     (J2000.0).
-**
-**  Reference:
-**
-**     Lieske, J.H., 1979, Astron.Astrophys. 73, 282.
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double epj;
-
-
-   epj = 2000.0 + ((dj1 - DJ00) + dj2) / DJY;
-
-   return epj;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauEpj2jd(double epj, double *djm0, double *djm)
-/*
-**  - - - - - - - - - -
-**   i a u E p j 2 j d
-**  - - - - - - - - - -
-**
-**  Julian Epoch to Julian Date.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     epj      double    Julian Epoch (e.g. 1996.8D0)
-**
-**  Returned:
-**     djm0     double    MJD zero-point: always 2400000.5
-**     djm      double    Modified Julian Date
-**
-**  Note:
-**
-**     The Julian Date is returned in two pieces, in the usual SOFA
-**     manner, which is designed to preserve time resolution.  The
-**     Julian Date is available as a single number by adding djm0 and
-**     djm.
-**
-**  Reference:
-**
-**     Lieske, J.H., 1979, Astron.Astrophys. 73, 282.
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   *djm0 = 2400000.5;
-   *djm  =   51544.5 + (epj - 2000.0) * 365.25;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauEpv00(double date1, double date2,
-             double pvh[2][3], double pvb[2][3])
-/*
-**  - - - - - - - - -
-**   i a u E p v 0 0
-**  - - - - - - - - -
-**
-**  Earth position and velocity, heliocentric and barycentric, with
-**  respect to the Barycentric Celestial Reference System.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double        TDB date (Note 1)
-**
-**  Returned:
-**     pvh          double[2][3]  heliocentric Earth position/velocity
-**     pvb          double[2][3]  barycentric Earth position/velocity
-**
-**  Returned (function value):
-**                  int           status: 0 = OK
-**                                       +1 = warning: date outside
-**                                            the range 1900-2100 AD
-**
-**  Notes:
-**
-**  1) The TDB date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TDB)=2450123.7 could be expressed in any of these ways, among
-**     others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in cases
-**     where the loss of several decimal digits of resolution is
-**     acceptable.  The J2000 method is best matched to the way the
-**     argument is handled internally and will deliver the optimum
-**     resolution.  The MJD method and the date & time methods are both
-**     good compromises between resolution and convenience.  However,
-**     the accuracy of the result is more likely to be limited by the
-**     algorithm itself than the way the date has been expressed.
-**
-**     n.b. TT can be used instead of TDB in most applications.
-**
-**  2) On return, the arrays pvh and pvb contain the following:
-**
-**        pvh[0][0]  x       }
-**        pvh[0][1]  y       } heliocentric position, AU
-**        pvh[0][2]  z       }
-**
-**        pvh[1][0]  xdot    }
-**        pvh[1][1]  ydot    } heliocentric velocity, AU/d
-**        pvh[1][2]  zdot    }
-**
-**        pvb[0][0]  x       }
-**        pvb[0][1]  y       } barycentric position, AU
-**        pvb[0][2]  z       }
-**
-**        pvb[1][0]  xdot    }
-**        pvb[1][1]  ydot    } barycentric velocity, AU/d
-**        pvb[1][2]  zdot    }
-**
-**     The vectors are with respect to the Barycentric Celestial
-**     Reference System.  The time unit is one day in TDB.
-**
-**  3) The function is a SIMPLIFIED SOLUTION from the planetary theory
-**     VSOP2000 (X. Moisson, P. Bretagnon, 2001, Celes. Mechanics &
-**     Dyn. Astron., 80, 3/4, 205-213) and is an adaptation of original
-**     Fortran code supplied by P. Bretagnon (private comm., 2000).
-**
-**  4) Comparisons over the time span 1900-2100 with this simplified
-**     solution and the JPL DE405 ephemeris give the following results:
-**
-**                                RMS    max
-**           Heliocentric:
-**              position error    3.7   11.2   km
-**              velocity error    1.4    5.0   mm/s
-**
-**           Barycentric:
-**              position error    4.6   13.4   km
-**              velocity error    1.4    4.9   mm/s
-**
-**     Comparisons with the JPL DE406 ephemeris show that by 1800 and
-**     2200 the position errors are approximately double their 1900-2100
-**     size.  By 1500 and 2500 the deterioration is a factor of 10 and
-**     by 1000 and 3000 a factor of 60.  The velocity accuracy falls off
-**     at about half that rate.
-**
-**  5) It is permissible to use the same array for pvh and pvb, which
-**     will receive the barycentric values.
-**
-**  This revision:  2008 November 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/*
-** Matrix elements for orienting the analytical model to DE405.
-**
-** The corresponding Euler angles are:
-**
-**                       d  '  "
-**   1st rotation    -  23 26 21.4091 about the x-axis  (obliquity)
-**   2nd rotation    +         0.0475 about the z-axis  (RA offset)
-**
-** These were obtained empirically, by comparisons with DE405 over
-** 1900-2100.
-*/
-   static const double am12 =  0.000000211284,
-                       am13 = -0.000000091603,
-                       am21 = -0.000000230286,
-                       am22 =  0.917482137087,
-                       am23 = -0.397776982902,
-                       am32 =  0.397776982902,
-                       am33 =  0.917482137087;
-
-/*
-** ----------------------
-** Ephemeris Coefficients
-** ----------------------
-**
-** The ephemeris consists of harmonic terms for predicting (i) the Sun
-** to Earth vector and (ii) the Solar-System-barycenter to Sun vector
-** respectively.  The coefficients are stored in arrays which, although
-** 1-demensional, contain groups of three.  Each triplet of
-** coefficients is the amplitude, phase and frequency for one term in
-** the model, and each array contains the number of terms called for by
-** the model.
-**
-** There are eighteen such arrays, named as follows:
-**
-**     array         model      power of T      component
-**
-**      e0x      Sun-to-Earth        0              x
-**      e0y      Sun-to-Earth        0              y
-**      e0z      Sun-to-Earth        0              z
-**
-**      e1x      Sun-to-Earth        1              x
-**      e1y      Sun-to-Earth        1              y
-**      e1z      Sun-to-Earth        1              z
-**
-**      e2x      Sun-to-Earth        2              x
-**      e2y      Sun-to-Earth        2              y
-**      e2z      Sun-to-Earth        2              z
-**
-**      s0x      SSB-to-Sun          0              x
-**      s0y      SSB-to-Sun          0              y
-**      s0z      SSB-to-Sun          0              z
-**
-**      s1x      SSB-to-Sun          1              x
-**      s1y      SSB-to-Sun          1              y
-**      s1z      SSB-to-Sun          1              z
-**
-**      s2x      SSB-to-Sun          2              x
-**      s2y      SSB-to-Sun          2              y
-**      s2z      SSB-to-Sun          2              z
-*/
-
-/* Sun-to-Earth, T^0, X */
-   static const double e0x[] = {
-      0.9998292878132e+00, 0.1753485171504e+01, 0.6283075850446e+01,
-      0.8352579567414e-02, 0.1710344404582e+01, 0.1256615170089e+02,
-      0.5611445335148e-02, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.1046664295572e-03, 0.1667225416770e+01, 0.1884922755134e+02,
-      0.3110842534677e-04, 0.6687513390251e+00, 0.8399684731857e+02,
-      0.2552413503550e-04, 0.5830637358413e+00, 0.5296909721118e+00,
-      0.2137207845781e-04, 0.1092330954011e+01, 0.1577343543434e+01,
-      0.1680240182951e-04, 0.4955366134987e+00, 0.6279552690824e+01,
-      0.1679012370795e-04, 0.6153014091901e+01, 0.6286599010068e+01,
-      0.1445526946777e-04, 0.3472744100492e+01, 0.2352866153506e+01,
-
-      0.1091038246184e-04, 0.3689845786119e+01, 0.5223693906222e+01,
-      0.9344399733932e-05, 0.6073934645672e+01, 0.1203646072878e+02,
-      0.8993182910652e-05, 0.3175705249069e+01, 0.1021328554739e+02,
-      0.5665546034116e-05, 0.2152484672246e+01, 0.1059381944224e+01,
-      0.6844146703035e-05, 0.1306964099750e+01, 0.5753384878334e+01,
-      0.7346610905565e-05, 0.4354980070466e+01, 0.3981490189893e+00,
-      0.6815396474414e-05, 0.2218229211267e+01, 0.4705732307012e+01,
-      0.6112787253053e-05, 0.5384788425458e+01, 0.6812766822558e+01,
-      0.4518120711239e-05, 0.6087604012291e+01, 0.5884926831456e+01,
-      0.4521963430706e-05, 0.1279424524906e+01, 0.6256777527156e+01,
-
-      0.4497426764085e-05, 0.5369129144266e+01, 0.6309374173736e+01,
-      0.4062190566959e-05, 0.5436473303367e+00, 0.6681224869435e+01,
-      0.5412193480192e-05, 0.7867838528395e+00, 0.7755226100720e+00,
-      0.5469839049386e-05, 0.1461440311134e+01, 0.1414349524433e+02,
-      0.5205264083477e-05, 0.4432944696116e+01, 0.7860419393880e+01,
-      0.2149759935455e-05, 0.4502237496846e+01, 0.1150676975667e+02,
-      0.2279109618501e-05, 0.1239441308815e+01, 0.7058598460518e+01,
-      0.2259282939683e-05, 0.3272430985331e+01, 0.4694002934110e+01,
-      0.2558950271319e-05, 0.2265471086404e+01, 0.1216800268190e+02,
-      0.2561581447555e-05, 0.1454740653245e+01, 0.7099330490126e+00,
-
-      0.1781441115440e-05, 0.2962068630206e+01, 0.7962980379786e+00,
-      0.1612005874644e-05, 0.1473255041006e+01, 0.5486777812467e+01,
-      0.1818630667105e-05, 0.3743903293447e+00, 0.6283008715021e+01,
-      0.1818601377529e-05, 0.6274174354554e+01, 0.6283142985870e+01,
-      0.1554475925257e-05, 0.1624110906816e+01, 0.2513230340178e+02,
-      0.2090948029241e-05, 0.5852052276256e+01, 0.1179062909082e+02,
-      0.2000176345460e-05, 0.4072093298513e+01, 0.1778984560711e+02,
-      0.1289535917759e-05, 0.5217019331069e+01, 0.7079373888424e+01,
-      0.1281135307881e-05, 0.4802054538934e+01, 0.3738761453707e+01,
-      0.1518229005692e-05, 0.8691914742502e+00, 0.2132990797783e+00,
-
-      0.9450128579027e-06, 0.4601859529950e+01, 0.1097707878456e+02,
-      0.7781119494996e-06, 0.1844352816694e+01, 0.8827390247185e+01,
-      0.7733407759912e-06, 0.3582790154750e+01, 0.5507553240374e+01,
-      0.7350644318120e-06, 0.2695277788230e+01, 0.1589072916335e+01,
-      0.6535928827023e-06, 0.3651327986142e+01, 0.1176985366291e+02,
-      0.6324624183656e-06, 0.2241302375862e+01, 0.6262300422539e+01,
-      0.6298565300557e-06, 0.4407122406081e+01, 0.6303851278352e+01,
-      0.8587037089179e-06, 0.3024307223119e+01, 0.1672837615881e+03,
-      0.8299954491035e-06, 0.6192539428237e+01, 0.3340612434717e+01,
-      0.6311263503401e-06, 0.2014758795416e+01, 0.7113454667900e-02,
-
-      0.6005646745452e-06, 0.3399500503397e+01, 0.4136910472696e+01,
-      0.7917715109929e-06, 0.2493386877837e+01, 0.6069776770667e+01,
-      0.7556958099685e-06, 0.4159491740143e+01, 0.6496374930224e+01,
-      0.6773228244949e-06, 0.4034162934230e+01, 0.9437762937313e+01,
-      0.5370708577847e-06, 0.1562219163734e+01, 0.1194447056968e+01,
-      0.5710804266203e-06, 0.2662730803386e+01, 0.6282095334605e+01,
-      0.5709824583726e-06, 0.3985828430833e+01, 0.6284056366286e+01,
-      0.5143950896447e-06, 0.1308144688689e+01, 0.6290189305114e+01,
-      0.5088010604546e-06, 0.5352817214804e+01, 0.6275962395778e+01,
-      0.4960369085172e-06, 0.2644267922349e+01, 0.6127655567643e+01,
-
-      0.4803137891183e-06, 0.4008844192080e+01, 0.6438496133249e+01,
-      0.5731747768225e-06, 0.3794550174597e+01, 0.3154687086868e+01,
-      0.4735947960579e-06, 0.6107118308982e+01, 0.3128388763578e+01,
-      0.4808348796625e-06, 0.4771458618163e+01, 0.8018209333619e+00,
-      0.4115073743137e-06, 0.3327111335159e+01, 0.8429241228195e+01,
-      0.5230575889287e-06, 0.5305708551694e+01, 0.1336797263425e+02,
-      0.5133977889215e-06, 0.5784230738814e+01, 0.1235285262111e+02,
-      0.5065815825327e-06, 0.2052064793679e+01, 0.1185621865188e+02,
-      0.4339831593868e-06, 0.3644994195830e+01, 0.1726015463500e+02,
-      0.3952928638953e-06, 0.4930376436758e+01, 0.5481254917084e+01,
-
-      0.4898498111942e-06, 0.4542084219731e+00, 0.9225539266174e+01,
-      0.4757490209328e-06, 0.3161126388878e+01, 0.5856477690889e+01,
-      0.4727701669749e-06, 0.6214993845446e+00, 0.2544314396739e+01,
-      0.3800966681863e-06, 0.3040132339297e+01, 0.4265981595566e+00,
-      0.3257301077939e-06, 0.8064977360087e+00, 0.3930209696940e+01,
-      0.3255810528674e-06, 0.1974147981034e+01, 0.2146165377750e+01,
-      0.3252029748187e-06, 0.2845924913135e+01, 0.4164311961999e+01,
-      0.3255505635308e-06, 0.3017900824120e+01, 0.5088628793478e+01,
-      0.2801345211990e-06, 0.6109717793179e+01, 0.1256967486051e+02,
-      0.3688987740970e-06, 0.2911550235289e+01, 0.1807370494127e+02,
-
-      0.2475153429458e-06, 0.2179146025856e+01, 0.2629832328990e-01,
-      0.3033457749150e-06, 0.1994161050744e+01, 0.4535059491685e+01,
-      0.2186743763110e-06, 0.5125687237936e+01, 0.1137170464392e+02,
-      0.2764777032774e-06, 0.4822646860252e+00, 0.1256262854127e+02,
-      0.2199028768592e-06, 0.4637633293831e+01, 0.1255903824622e+02,
-      0.2046482824760e-06, 0.1467038733093e+01, 0.7084896783808e+01,
-      0.2611209147507e-06, 0.3044718783485e+00, 0.7143069561767e+02,
-      0.2286079656818e-06, 0.4764220356805e+01, 0.8031092209206e+01,
-      0.1855071202587e-06, 0.3383637774428e+01, 0.1748016358760e+01,
-      0.2324669506784e-06, 0.6189088449251e+01, 0.1831953657923e+02,
-
-      0.1709528015688e-06, 0.5874966729774e+00, 0.4933208510675e+01,
-      0.2168156875828e-06, 0.4302994009132e+01, 0.1044738781244e+02,
-      0.2106675556535e-06, 0.3800475419891e+01, 0.7477522907414e+01,
-      0.1430213830465e-06, 0.1294660846502e+01, 0.2942463415728e+01,
-      0.1388396901944e-06, 0.4594797202114e+01, 0.8635942003952e+01,
-      0.1922258844190e-06, 0.4943044543591e+00, 0.1729818233119e+02,
-      0.1888460058292e-06, 0.2426943912028e+01, 0.1561374759853e+03,
-      0.1789449386107e-06, 0.1582973303499e+00, 0.1592596075957e+01,
-      0.1360803685374e-06, 0.5197240440504e+01, 0.1309584267300e+02,
-      0.1504038014709e-06, 0.3120360916217e+01, 0.1649636139783e+02,
-
-      0.1382769533389e-06, 0.6164702888205e+01, 0.7632943190217e+01,
-      0.1438059769079e-06, 0.1437423770979e+01, 0.2042657109477e+02,
-      0.1326303260037e-06, 0.3609688799679e+01, 0.1213955354133e+02,
-      0.1159244950540e-06, 0.5463018167225e+01, 0.5331357529664e+01,
-      0.1433118149136e-06, 0.6028909912097e+01, 0.7342457794669e+01,
-      0.1234623148594e-06, 0.3109645574997e+01, 0.6279485555400e+01,
-      0.1233949875344e-06, 0.3539359332866e+01, 0.6286666145492e+01,
-      0.9927196061299e-07, 0.1259321569772e+01, 0.7234794171227e+01,
-      0.1242302191316e-06, 0.1065949392609e+01, 0.1511046609763e+02,
-      0.1098402195201e-06, 0.2192508743837e+01, 0.1098880815746e+02,
-
-      0.1158191395315e-06, 0.4054411278650e+01, 0.5729506548653e+01,
-      0.9048475596241e-07, 0.5429764748518e+01, 0.9623688285163e+01,
-      0.8889853269023e-07, 0.5046586206575e+01, 0.6148010737701e+01,
-      0.1048694242164e-06, 0.2628858030806e+01, 0.6836645152238e+01,
-      0.1112308378646e-06, 0.4177292719907e+01, 0.1572083878776e+02,
-      0.8631729709901e-07, 0.1601345232557e+01, 0.6418140963190e+01,
-      0.8527816951664e-07, 0.2463888997513e+01, 0.1471231707864e+02,
-      0.7892139456991e-07, 0.3154022088718e+01, 0.2118763888447e+01,
-      0.1051782905236e-06, 0.4795035816088e+01, 0.1349867339771e+01,
-      0.1048219943164e-06, 0.2952983395230e+01, 0.5999216516294e+01,
-
-      0.7435760775143e-07, 0.5420547991464e+01, 0.6040347114260e+01,
-      0.9869574106949e-07, 0.3695646753667e+01, 0.6566935184597e+01,
-      0.9156886364226e-07, 0.3922675306609e+01, 0.5643178611111e+01,
-      0.7006834356188e-07, 0.1233968624861e+01, 0.6525804586632e+01,
-      0.9806170182601e-07, 0.1919542280684e+01, 0.2122839202813e+02,
-      0.9052289673607e-07, 0.4615902724369e+01, 0.4690479774488e+01,
-      0.7554200867893e-07, 0.1236863719072e+01, 0.1253985337760e+02,
-      0.8215741286498e-07, 0.3286800101559e+00, 0.1097355562493e+02,
-      0.7185178575397e-07, 0.5880942158367e+01, 0.6245048154254e+01,
-      0.7130726476180e-07, 0.7674871987661e+00, 0.6321103546637e+01,
-
-      0.6650894461162e-07, 0.6987129150116e+00, 0.5327476111629e+01,
-      0.7396888823688e-07, 0.3576824794443e+01, 0.5368044267797e+00,
-      0.7420588884775e-07, 0.5033615245369e+01, 0.2354323048545e+02,
-      0.6141181642908e-07, 0.9449927045673e+00, 0.1296430071988e+02,
-      0.6373557924058e-07, 0.6206342280341e+01, 0.9517183207817e+00,
-      0.6359474329261e-07, 0.5036079095757e+01, 0.1990745094947e+01,
-      0.5740173582646e-07, 0.6105106371350e+01, 0.9555997388169e+00,
-      0.7019864084602e-07, 0.7237747359018e+00, 0.5225775174439e+00,
-      0.6398054487042e-07, 0.3976367969666e+01, 0.2407292145756e+02,
-      0.7797092650498e-07, 0.4305423910623e+01, 0.2200391463820e+02,
-
-      0.6466760000900e-07, 0.3500136825200e+01, 0.5230807360890e+01,
-      0.7529417043890e-07, 0.3514779246100e+01, 0.1842262939178e+02,
-      0.6924571140892e-07, 0.2743457928679e+01, 0.1554202828031e+00,
-      0.6220798650222e-07, 0.2242598118209e+01, 0.1845107853235e+02,
-      0.5870209391853e-07, 0.2332832707527e+01, 0.6398972393349e+00,
-      0.6263953473888e-07, 0.2191105358956e+01, 0.6277552955062e+01,
-      0.6257781390012e-07, 0.4457559396698e+01, 0.6288598745829e+01,
-      0.5697304945123e-07, 0.3499234761404e+01, 0.1551045220144e+01,
-      0.6335438746791e-07, 0.6441691079251e+00, 0.5216580451554e+01,
-      0.6377258441152e-07, 0.2252599151092e+01, 0.5650292065779e+01,
-
-      0.6484841818165e-07, 0.1992812417646e+01, 0.1030928125552e+00,
-      0.4735551485250e-07, 0.3744672082942e+01, 0.1431416805965e+02,
-      0.4628595996170e-07, 0.1334226211745e+01, 0.5535693017924e+00,
-      0.6258152336933e-07, 0.4395836159154e+01, 0.2608790314060e+02,
-      0.6196171366594e-07, 0.2587043007997e+01, 0.8467247584405e+02,
-      0.6159556952126e-07, 0.4782499769128e+01, 0.2394243902548e+03,
-      0.4987741172394e-07, 0.7312257619924e+00, 0.7771377146812e+02,
-      0.5459280703142e-07, 0.3001376372532e+01, 0.6179983037890e+01,
-      0.4863461189999e-07, 0.3767222128541e+01, 0.9027992316901e+02,
-      0.5349912093158e-07, 0.3663594450273e+01, 0.6386168663001e+01,
-
-      0.5673725607806e-07, 0.4331187919049e+01, 0.6915859635113e+01,
-      0.4745485060512e-07, 0.5816195745518e+01, 0.6282970628506e+01,
-      0.4745379005326e-07, 0.8323672435672e+00, 0.6283181072386e+01,
-      0.4049002796321e-07, 0.3785023976293e+01, 0.6254626709878e+01,
-      0.4247084014515e-07, 0.2378220728783e+01, 0.7875671926403e+01,
-      0.4026912363055e-07, 0.2864103423269e+01, 0.6311524991013e+01,
-      0.4062935011774e-07, 0.2415408595975e+01, 0.3634620989887e+01,
-      0.5347771048509e-07, 0.3343479309801e+01, 0.2515860172507e+02,
-      0.4829494136505e-07, 0.2821742398262e+01, 0.5760498333002e+01,
-      0.4342554404599e-07, 0.5624662458712e+01, 0.7238675589263e+01,
-
-      0.4021599184361e-07, 0.5557250275009e+00, 0.1101510648075e+02,
-      0.4104900474558e-07, 0.3296691780005e+01, 0.6709674010002e+01,
-      0.4376532905131e-07, 0.3814443999443e+01, 0.6805653367890e+01,
-      0.3314590480650e-07, 0.3560229189250e+01, 0.1259245002418e+02,
-      0.3232421839643e-07, 0.5185389180568e+01, 0.1066495398892e+01,
-      0.3541176318876e-07, 0.3921381909679e+01, 0.9917696840332e+01,
-      0.3689831242681e-07, 0.4190658955386e+01, 0.1192625446156e+02,
-      0.3890605376774e-07, 0.5546023371097e+01, 0.7478166569050e-01,
-      0.3038559339780e-07, 0.6231032794494e+01, 0.1256621883632e+02,
-      0.3137083969782e-07, 0.6207063419190e+01, 0.4292330755499e+01,
-
-      0.4024004081854e-07, 0.1195257375713e+01, 0.1334167431096e+02,
-      0.3300234879283e-07, 0.1804694240998e+01, 0.1057540660594e+02,
-      0.3635399155575e-07, 0.5597811343500e+01, 0.6208294184755e+01,
-      0.3032668691356e-07, 0.3191059366530e+01, 0.1805292951336e+02,
-      0.2809652069058e-07, 0.4094348032570e+01, 0.3523159621801e-02,
-      0.3696955383823e-07, 0.5219282738794e+01, 0.5966683958112e+01,
-      0.3562894142503e-07, 0.1037247544554e+01, 0.6357857516136e+01,
-      0.3510598524148e-07, 0.1430020816116e+01, 0.6599467742779e+01,
-      0.3617736142953e-07, 0.3002911403677e+01, 0.6019991944201e+01,
-      0.2624524910730e-07, 0.2437046757292e+01, 0.6702560555334e+01,
-
-      0.2535824204490e-07, 0.1581594689647e+01, 0.3141537925223e+02,
-      0.3519787226257e-07, 0.5379863121521e+01, 0.2505706758577e+03,
-      0.2578406709982e-07, 0.4904222639329e+01, 0.1673046366289e+02,
-      0.3423887981473e-07, 0.3646448997315e+01, 0.6546159756691e+01,
-      0.2776083886467e-07, 0.3307829300144e+01, 0.1272157198369e+02,
-      0.3379592818379e-07, 0.1747541251125e+01, 0.1494531617769e+02,
-      0.3050255426284e-07, 0.1784689432607e-01, 0.4732030630302e+01,
-      0.2652378350236e-07, 0.4420055276260e+01, 0.5863591145557e+01,
-      0.2374498173768e-07, 0.3629773929208e+01, 0.2388894113936e+01,
-      0.2716451255140e-07, 0.3079623706780e+01, 0.1202934727411e+02,
-
-      0.3038583699229e-07, 0.3312487903507e+00, 0.1256608456547e+02,
-      0.2220681228760e-07, 0.5265520401774e+01, 0.1336244973887e+02,
-      0.3044156540912e-07, 0.4766664081250e+01, 0.2908881142201e+02,
-      0.2731859923561e-07, 0.5069146530691e+01, 0.1391601904066e+02,
-      0.2285603018171e-07, 0.5954935112271e+01, 0.6076890225335e+01,
-      0.2025006454555e-07, 0.4061789589267e+01, 0.4701116388778e+01,
-      0.2012597519804e-07, 0.2485047705241e+01, 0.6262720680387e+01,
-      0.2003406962258e-07, 0.4163779209320e+01, 0.6303431020504e+01,
-      0.2207863441371e-07, 0.6923839133828e+00, 0.6489261475556e+01,
-      0.2481374305624e-07, 0.5944173595676e+01, 0.1204357418345e+02,
-
-      0.2130923288870e-07, 0.4641013671967e+01, 0.5746271423666e+01,
-      0.2446370543391e-07, 0.6125796518757e+01, 0.1495633313810e+00,
-      0.1932492759052e-07, 0.2234572324504e+00, 0.1352175143971e+02,
-      0.2600122568049e-07, 0.4281012405440e+01, 0.4590910121555e+01,
-      0.2431754047488e-07, 0.1429943874870e+00, 0.1162474756779e+01,
-      0.1875902869209e-07, 0.9781803816948e+00, 0.6279194432410e+01,
-      0.1874381139426e-07, 0.5670368130173e+01, 0.6286957268481e+01,
-      0.2156696047173e-07, 0.2008985006833e+01, 0.1813929450232e+02,
-      0.1965076182484e-07, 0.2566186202453e+00, 0.4686889479442e+01,
-      0.2334816372359e-07, 0.4408121891493e+01, 0.1002183730415e+02,
-
-      0.1869937408802e-07, 0.5272745038656e+01, 0.2427287361862e+00,
-      0.2436236460883e-07, 0.4407720479029e+01, 0.9514313292143e+02,
-      0.1761365216611e-07, 0.1943892315074e+00, 0.1351787002167e+02,
-      0.2156289480503e-07, 0.1418570924545e+01, 0.6037244212485e+01,
-      0.2164748979255e-07, 0.4724603439430e+01, 0.2301353951334e+02,
-      0.2222286670853e-07, 0.2400266874598e+01, 0.1266924451345e+02,
-      0.2070901414929e-07, 0.5230348028732e+01, 0.6528907488406e+01,
-      0.1792745177020e-07, 0.2099190328945e+01, 0.6819880277225e+01,
-      0.1841802068445e-07, 0.3467527844848e+00, 0.6514761976723e+02,
-      0.1578401631718e-07, 0.7098642356340e+00, 0.2077542790660e-01,
-
-      0.1561690152531e-07, 0.5943349620372e+01, 0.6272439236156e+01,
-      0.1558591045463e-07, 0.7040653478980e+00, 0.6293712464735e+01,
-      0.1737356469576e-07, 0.4487064760345e+01, 0.1765478049437e+02,
-      0.1434755619991e-07, 0.2993391570995e+01, 0.1102062672231e+00,
-      0.1482187806654e-07, 0.2278049198251e+01, 0.1052268489556e+01,
-      0.1424812827089e-07, 0.1682114725827e+01, 0.1311972100268e+02,
-      0.1380282448623e-07, 0.3262668602579e+01, 0.1017725758696e+02,
-      0.1811481244566e-07, 0.3187771221777e+01, 0.1887552587463e+02,
-      0.1504446185696e-07, 0.5650162308647e+01, 0.7626583626240e-01,
-      0.1740776154137e-07, 0.5487068607507e+01, 0.1965104848470e+02,
-
-      0.1374339536251e-07, 0.5745688172201e+01, 0.6016468784579e+01,
-      0.1761377477704e-07, 0.5748060203659e+01, 0.2593412433514e+02,
-      0.1535138225795e-07, 0.6226848505790e+01, 0.9411464614024e+01,
-      0.1788140543676e-07, 0.6189318878563e+01, 0.3301902111895e+02,
-      0.1375002807996e-07, 0.5371812884394e+01, 0.6327837846670e+00,
-      0.1242115758632e-07, 0.1471687569712e+01, 0.3894181736510e+01,
-      0.1450977333938e-07, 0.4143836662127e+01, 0.1277945078067e+02,
-      0.1297579575023e-07, 0.9003477661957e+00, 0.6549682916313e+01,
-      0.1462667934821e-07, 0.5760505536428e+01, 0.1863592847156e+02,
-      0.1381774374799e-07, 0.1085471729463e+01, 0.2379164476796e+01,
-
-      0.1682333169307e-07, 0.5409870870133e+01, 0.1620077269078e+02,
-      0.1190812918837e-07, 0.1397205174601e+01, 0.1149965630200e+02,
-      0.1221434762106e-07, 0.9001804809095e+00, 0.1257326515556e+02,
-      0.1549934644860e-07, 0.4262528275544e+01, 0.1820933031200e+02,
-      0.1252138953050e-07, 0.1411642012027e+01, 0.6993008899458e+01,
-      0.1237078905387e-07, 0.2844472403615e+01, 0.2435678079171e+02,
-      0.1446953389615e-07, 0.5295835522223e+01, 0.3813291813120e-01,
-      0.1388446457170e-07, 0.4969428135497e+01, 0.2458316379602e+00,
-      0.1019339179228e-07, 0.2491369561806e+01, 0.6112403035119e+01,
-      0.1258880815343e-07, 0.4679426248976e+01, 0.5429879531333e+01,
-
-      0.1297768238261e-07, 0.1074509953328e+01, 0.1249137003520e+02,
-      0.9913505718094e-08, 0.4735097918224e+01, 0.6247047890016e+01,
-      0.9830453155969e-08, 0.4158649187338e+01, 0.6453748665772e+01,
-      0.1192615865309e-07, 0.3438208613699e+01, 0.6290122169689e+01,
-      0.9835874798277e-08, 0.1913300781229e+01, 0.6319103810876e+01,
-      0.9639087569277e-08, 0.9487683644125e+00, 0.8273820945392e+01,
-      0.1175716107001e-07, 0.3228141664287e+01, 0.6276029531202e+01,
-      0.1018926508678e-07, 0.2216607854300e+01, 0.1254537627298e+02,
-      0.9500087869225e-08, 0.2625116459733e+01, 0.1256517118505e+02,
-      0.9664192916575e-08, 0.5860562449214e+01, 0.6259197520765e+01,
-
-      0.9612858712203e-08, 0.7885682917381e+00, 0.6306954180126e+01,
-      0.1117645675413e-07, 0.3932148831189e+01, 0.1779695906178e+02,
-      0.1158864052160e-07, 0.9995605521691e+00, 0.1778273215245e+02,
-      0.9021043467028e-08, 0.5263769742673e+01, 0.6172869583223e+01,
-      0.8836134773563e-08, 0.1496843220365e+01, 0.1692165728891e+01,
-      0.1045872200691e-07, 0.7009039517214e+00, 0.2204125344462e+00,
-      0.1211463487798e-07, 0.4041544938511e+01, 0.8257698122054e+02,
-      0.8541990804094e-08, 0.1447586692316e+01, 0.6393282117669e+01,
-      0.1038720703636e-07, 0.4594249718112e+00, 0.1550861511662e+02,
-      0.1126722351445e-07, 0.3925550579036e+01, 0.2061856251104e+00,
-
-      0.8697373859631e-08, 0.4411341856037e+01, 0.9491756770005e+00,
-      0.8869380028441e-08, 0.2402659724813e+01, 0.3903911373650e+01,
-      0.9247014693258e-08, 0.1401579743423e+01, 0.6267823317922e+01,
-      0.9205062930950e-08, 0.5245978000814e+01, 0.6298328382969e+01,
-      0.8000745038049e-08, 0.3590803356945e+01, 0.2648454860559e+01,
-      0.9168973650819e-08, 0.2470150501679e+01, 0.1498544001348e+03,
-      0.1075444949238e-07, 0.1328606161230e+01, 0.3694923081589e+02,
-      0.7817298525817e-08, 0.6162256225998e+01, 0.4804209201333e+01,
-      0.9541469226356e-08, 0.3942568967039e+01, 0.1256713221673e+02,
-      0.9821910122027e-08, 0.2360246287233e+00, 0.1140367694411e+02,
-
-      0.9897822023777e-08, 0.4619805634280e+01, 0.2280573557157e+02,
-      0.7737289283765e-08, 0.3784727847451e+01, 0.7834121070590e+01,
-      0.9260204034710e-08, 0.2223352487601e+01, 0.2787043132925e+01,
-      0.7320252888486e-08, 0.1288694636874e+01, 0.6282655592598e+01,
-      0.7319785780946e-08, 0.5359869567774e+01, 0.6283496108294e+01,
-      0.7147219933778e-08, 0.5516616675856e+01, 0.1725663147538e+02,
-      0.7946502829878e-08, 0.2630459984567e+01, 0.1241073141809e+02,
-      0.9001711808932e-08, 0.2849815827227e+01, 0.6281591679874e+01,
-      0.8994041507257e-08, 0.3795244450750e+01, 0.6284560021018e+01,
-      0.8298582787358e-08, 0.5236413127363e+00, 0.1241658836951e+02,
-
-      0.8526596520710e-08, 0.4794605424426e+01, 0.1098419223922e+02,
-      0.8209822103197e-08, 0.1578752370328e+01, 0.1096996532989e+02,
-      0.6357049861094e-08, 0.5708926113761e+01, 0.1596186371003e+01,
-      0.7370473179049e-08, 0.3842402530241e+01, 0.4061219149443e+01,
-      0.7232154664726e-08, 0.3067548981535e+01, 0.1610006857377e+03,
-      0.6328765494903e-08, 0.1313930030069e+01, 0.1193336791622e+02,
-      0.8030064908595e-08, 0.3488500408886e+01, 0.8460828644453e+00,
-      0.6275464259232e-08, 0.1532061626198e+01, 0.8531963191132e+00,
-      0.7051897446325e-08, 0.3285859929993e+01, 0.5849364236221e+01,
-      0.6161593705428e-08, 0.1477341999464e+01, 0.5573142801433e+01,
-
-      0.7754683957278e-08, 0.1586118663096e+01, 0.8662240327241e+01,
-      0.5889928990701e-08, 0.1304887868803e+01, 0.1232342296471e+02,
-      0.5705756047075e-08, 0.4555333589350e+01, 0.1258692712880e+02,
-      0.5964178808332e-08, 0.3001762842062e+01, 0.5333900173445e+01,
-      0.6712446027467e-08, 0.4886780007595e+01, 0.1171295538178e+02,
-      0.5941809275464e-08, 0.4701509603824e+01, 0.9779108567966e+01,
-      0.5466993627395e-08, 0.4588357817278e+01, 0.1884211409667e+02,
-      0.6340512090980e-08, 0.1164543038893e+01, 0.5217580628120e+02,
-      0.6325505710045e-08, 0.3919171259645e+01, 0.1041998632314e+02,
-      0.6164789509685e-08, 0.2143828253542e+01, 0.6151533897323e+01,
-
-      0.5263330812430e-08, 0.6066564434241e+01, 0.1885275071096e+02,
-      0.5597087780221e-08, 0.2926316429472e+01, 0.4337116142245e+00,
-      0.5396556236817e-08, 0.3244303591505e+01, 0.6286362197481e+01,
-      0.5396615148223e-08, 0.3404304703662e+01, 0.6279789503410e+01,
-      0.7091832443341e-08, 0.8532377803192e+00, 0.4907302013889e+01,
-      0.6572352589782e-08, 0.4901966774419e+01, 0.1176433076753e+02,
-      0.5960236060795e-08, 0.1874672315797e+01, 0.1422690933580e-01,
-      0.5125480043511e-08, 0.3735726064334e+01, 0.1245594543367e+02,
-      0.5928241866410e-08, 0.4502033899935e+01, 0.6414617803568e+01,
-      0.5249600357424e-08, 0.4372334799878e+01, 0.1151388321134e+02,
-
-      0.6059171276087e-08, 0.2581617302908e+01, 0.6062663316000e+01,
-      0.5295235081662e-08, 0.2974811513158e+01, 0.3496032717521e+01,
-      0.5820561875933e-08, 0.1796073748244e+00, 0.2838593341516e+00,
-      0.4754696606440e-08, 0.1981998136973e+01, 0.3104930017775e+01,
-      0.6385053548955e-08, 0.2559174171605e+00, 0.6133512519065e+01,
-      0.6589828273941e-08, 0.2750967106776e+01, 0.4087944051283e+02,
-      0.5383376567189e-08, 0.6325947523578e+00, 0.2248384854122e+02,
-      0.5928941683538e-08, 0.1672304519067e+01, 0.1581959461667e+01,
-      0.4816060709794e-08, 0.3512566172575e+01, 0.9388005868221e+01,
-      0.6003381586512e-08, 0.5610932219189e+01, 0.5326786718777e+01,
-
-      0.5504225393105e-08, 0.4037501131256e+01, 0.6503488384892e+01,
-      0.5353772620129e-08, 0.6122774968240e+01, 0.1735668374386e+03,
-      0.5786253768544e-08, 0.5527984999515e+01, 0.1350651127443e+00,
-      0.5065706702002e-08, 0.9980765573624e+00, 0.1248988586463e+02,
-      0.5972838885276e-08, 0.6044489493203e+01, 0.2673594526851e+02,
-      0.5323585877961e-08, 0.3924265998147e+01, 0.4171425416666e+01,
-      0.5210772682858e-08, 0.6220111376901e+01, 0.2460261242967e+02,
-      0.4726549040535e-08, 0.3716043206862e+01, 0.7232251527446e+01,
-      0.6029425105059e-08, 0.8548704071116e+00, 0.3227113045244e+03,
-      0.4481542826513e-08, 0.1426925072829e+01, 0.5547199253223e+01,
-
-      0.5836024505068e-08, 0.7135651752625e-01, 0.7285056171570e+02,
-      0.4137046613272e-08, 0.5330767643283e+01, 0.1087398597200e+02,
-      0.5171977473924e-08, 0.4494262335353e+00, 0.1884570439172e+02,
-      0.5694429833732e-08, 0.2952369582215e+01, 0.9723862754494e+02,
-      0.4009158925298e-08, 0.3500003416535e+01, 0.6244942932314e+01,
-      0.4784939596873e-08, 0.6196709413181e+01, 0.2929661536378e+02,
-      0.3983725022610e-08, 0.5103690031897e+01, 0.4274518229222e+01,
-      0.3870535232462e-08, 0.3187569587401e+01, 0.6321208768577e+01,
-      0.5140501213951e-08, 0.1668924357457e+01, 0.1232032006293e+02,
-      0.3849034819355e-08, 0.4445722510309e+01, 0.1726726808967e+02,
-
-      0.4002383075060e-08, 0.5226224152423e+01, 0.7018952447668e+01,
-      0.3890719543549e-08, 0.4371166550274e+01, 0.1491901785440e+02,
-      0.4887084607881e-08, 0.5973556689693e+01, 0.1478866649112e+01,
-      0.3739939287592e-08, 0.2089084714600e+01, 0.6922973089781e+01,
-      0.5031925918209e-08, 0.4658371936827e+01, 0.1715706182245e+02,
-      0.4387748764954e-08, 0.4825580552819e+01, 0.2331413144044e+03,
-      0.4147398098865e-08, 0.3739003524998e+01, 0.1376059875786e+02,
-      0.3719089993586e-08, 0.1148941386536e+01, 0.6297302759782e+01,
-      0.3934238461056e-08, 0.1559893008343e+01, 0.7872148766781e+01,
-      0.3672471375622e-08, 0.5516145383612e+01, 0.6268848941110e+01,
-
-      0.3768911277583e-08, 0.6116053700563e+01, 0.4157198507331e+01,
-      0.4033388417295e-08, 0.5076821746017e+01, 0.1567108171867e+02,
-      0.3764194617832e-08, 0.8164676232075e+00, 0.3185192151914e+01,
-      0.4840628226284e-08, 0.1360479453671e+01, 0.1252801878276e+02,
-      0.4949443923785e-08, 0.2725622229926e+01, 0.1617106187867e+03,
-      0.4117393089971e-08, 0.6054459628492e+00, 0.5642198095270e+01,
-      0.3925754020428e-08, 0.8570462135210e+00, 0.2139354194808e+02,
-      0.3630551757923e-08, 0.3552067338279e+01, 0.6294805223347e+01,
-      0.3627274802357e-08, 0.3096565085313e+01, 0.6271346477544e+01,
-      0.3806143885093e-08, 0.6367751709777e+00, 0.1725304118033e+02,
-
-      0.4433254641565e-08, 0.4848461503937e+01, 0.7445550607224e+01,
-      0.3712319846576e-08, 0.1331950643655e+01, 0.4194847048887e+00,
-      0.3849847534783e-08, 0.4958368297746e+00, 0.9562891316684e+00,
-      0.3483955430165e-08, 0.2237215515707e+01, 0.1161697602389e+02,
-      0.3961912730982e-08, 0.3332402188575e+01, 0.2277943724828e+02,
-      0.3419978244481e-08, 0.5785600576016e+01, 0.1362553364512e+02,
-      0.3329417758177e-08, 0.9812676559709e-01, 0.1685848245639e+02,
-      0.4207206893193e-08, 0.9494780468236e+00, 0.2986433403208e+02,
-      0.3268548976410e-08, 0.1739332095686e+00, 0.5749861718712e+01,
-      0.3321880082685e-08, 0.1423354800666e+01, 0.6279143387820e+01,
-
-      0.4503173010852e-08, 0.2314972675293e+00, 0.1385561574497e+01,
-      0.4316599090954e-08, 0.1012646782616e+00, 0.4176041334900e+01,
-      0.3283493323850e-08, 0.5233306881265e+01, 0.6287008313071e+01,
-      0.3164033542343e-08, 0.4005597257511e+01, 0.2099539292909e+02,
-      0.4159720956725e-08, 0.5365676242020e+01, 0.5905702259363e+01,
-      0.3565176892217e-08, 0.4284440620612e+01, 0.3932462625300e-02,
-      0.3514440950221e-08, 0.4270562636575e+01, 0.7335344340001e+01,
-      0.3540596871909e-08, 0.5953553201060e+01, 0.1234573916645e+02,
-      0.2960769905118e-08, 0.1115180417718e+01, 0.2670964694522e+02,
-      0.2962213739684e-08, 0.3863811918186e+01, 0.6408777551755e+00,
-
-      0.3883556700251e-08, 0.1268617928302e+01, 0.6660449441528e+01,
-      0.2919225516346e-08, 0.4908605223265e+01, 0.1375773836557e+01,
-      0.3115158863370e-08, 0.3744519976885e+01, 0.3802769619140e-01,
-      0.4099438144212e-08, 0.4173244670532e+01, 0.4480965020977e+02,
-      0.2899531858964e-08, 0.5910601428850e+01, 0.2059724391010e+02,
-      0.3289733429855e-08, 0.2488050078239e+01, 0.1081813534213e+02,
-      0.3933075612875e-08, 0.1122363652883e+01, 0.3773735910827e+00,
-      0.3021403764467e-08, 0.4951973724904e+01, 0.2982630633589e+02,
-      0.2798598949757e-08, 0.5117057845513e+01, 0.1937891852345e+02,
-      0.3397421302707e-08, 0.6104159180476e+01, 0.6923953605621e+01,
-
-      0.3720398002179e-08, 0.1184933429829e+01, 0.3066615496545e+02,
-      0.3598484186267e-08, 0.3505282086105e+01, 0.6147450479709e+01,
-      0.3694594027310e-08, 0.2286651088141e+01, 0.2636725487657e+01,
-      0.2680444152969e-08, 0.1871816775482e+00, 0.6816289982179e+01,
-      0.3497574865641e-08, 0.3143251755431e+01, 0.6418701221183e+01,
-      0.3130274129494e-08, 0.2462167316018e+01, 0.1235996607578e+02,
-      0.3241119069551e-08, 0.4256374004686e+01, 0.1652265972112e+02,
-      0.2601960842061e-08, 0.4970362941425e+01, 0.1045450126711e+02,
-      0.2690601527504e-08, 0.2372657824898e+01, 0.3163918923335e+00,
-      0.2908688152664e-08, 0.4232652627721e+01, 0.2828699048865e+02,
-
-      0.3120456131875e-08, 0.3925747001137e+00, 0.2195415756911e+02,
-      0.3148855423384e-08, 0.3093478330445e+01, 0.1172006883645e+02,
-      0.3051044261017e-08, 0.5560948248212e+01, 0.6055599646783e+01,
-      0.2826006876660e-08, 0.5072790310072e+01, 0.5120601093667e+01,
-      0.3100034191711e-08, 0.4998530231096e+01, 0.1799603123222e+02,
-      0.2398771640101e-08, 0.2561739802176e+01, 0.6255674361143e+01,
-      0.2384002842728e-08, 0.4087420284111e+01, 0.6310477339748e+01,
-      0.2842146517568e-08, 0.2515048217955e+01, 0.5469525544182e+01,
-      0.2847674371340e-08, 0.5235326497443e+01, 0.1034429499989e+02,
-      0.2903722140764e-08, 0.1088200795797e+01, 0.6510552054109e+01,
-
-      0.3187610710605e-08, 0.4710624424816e+01, 0.1693792562116e+03,
-      0.3048869992813e-08, 0.2857975896445e+00, 0.8390110365991e+01,
-      0.2860216950984e-08, 0.2241619020815e+01, 0.2243449970715e+00,
-      0.2701117683113e-08, 0.6651573305272e-01, 0.6129297044991e+01,
-      0.2509891590152e-08, 0.1285135324585e+01, 0.1044027435778e+02,
-      0.2623200252223e-08, 0.2981229834530e+00, 0.6436854655901e+01,
-      0.2622541669202e-08, 0.6122470726189e+01, 0.9380959548977e+01,
-      0.2818435667099e-08, 0.4251087148947e+01, 0.5934151399930e+01,
-      0.2365196797465e-08, 0.3465070460790e+01, 0.2470570524223e+02,
-      0.2358704646143e-08, 0.5791603815350e+01, 0.8671969964381e+01,
-
-      0.2388299481390e-08, 0.4142483772941e+01, 0.7096626156709e+01,
-      0.1996041217224e-08, 0.2101901889496e+01, 0.1727188400790e+02,
-      0.2687593060336e-08, 0.1526689456959e+01, 0.7075506709219e+02,
-      0.2618913670810e-08, 0.2397684236095e+01, 0.6632000300961e+01,
-      0.2571523050364e-08, 0.5751929456787e+00, 0.6206810014183e+01,
-      0.2582135006946e-08, 0.5595464352926e+01, 0.4873985990671e+02,
-      0.2372530190361e-08, 0.5092689490655e+01, 0.1590676413561e+02,
-      0.2357178484712e-08, 0.4444363527851e+01, 0.3097883698531e+01,
-      0.2451590394723e-08, 0.3108251687661e+01, 0.6612329252343e+00,
-      0.2370045949608e-08, 0.2608133861079e+01, 0.3459636466239e+02,
-
-      0.2268997267358e-08, 0.3639717753384e+01, 0.2844914056730e-01,
-      0.1731432137906e-08, 0.1741898445707e+00, 0.2019909489111e+02,
-      0.1629869741622e-08, 0.3902225646724e+01, 0.3035599730800e+02,
-      0.2206215801974e-08, 0.4971131250731e+01, 0.6281667977667e+01,
-      0.2205469554680e-08, 0.1677462357110e+01, 0.6284483723224e+01,
-      0.2148792362509e-08, 0.4236259604006e+01, 0.1980482729015e+02,
-      0.1873733657847e-08, 0.5926814998687e+01, 0.2876692439167e+02,
-      0.2026573758959e-08, 0.4349643351962e+01, 0.2449240616245e+02,
-      0.1807770325110e-08, 0.5700940482701e+01, 0.2045286941806e+02,
-      0.1881174408581e-08, 0.6601286363430e+00, 0.2358125818164e+02,
-
-      0.1368023671690e-08, 0.2211098592752e+01, 0.2473415438279e+02,
-      0.1720017916280e-08, 0.4942488551129e+01, 0.1679593901136e+03,
-      0.1702427665131e-08, 0.1452233856386e+01, 0.3338575901272e+03,
-      0.1414032510054e-08, 0.5525357721439e+01, 0.1624205518357e+03,
-      0.1652626045364e-08, 0.4108794283624e+01, 0.8956999012000e+02,
-      0.1642957769686e-08, 0.7344335209984e+00, 0.5267006960365e+02,
-      0.1614952403624e-08, 0.3541213951363e+01, 0.3332657872986e+02,
-      0.1535988291188e-08, 0.4031094072151e+01, 0.3852657435933e+02,
-      0.1593193738177e-08, 0.4185136203609e+01, 0.2282781046519e+03,
-      0.1074569126382e-08, 0.1720485636868e+01, 0.8397383534231e+02,
-
-      0.1074408214509e-08, 0.2758613420318e+01, 0.8401985929482e+02,
-      0.9700199670465e-09, 0.4216686842097e+01, 0.7826370942180e+02,
-      0.1258433517061e-08, 0.2575068876639e+00, 0.3115650189215e+03,
-      0.1240303229539e-08, 0.4800844956756e+00, 0.1784300471910e+03,
-      0.9018345948127e-09, 0.3896756361552e+00, 0.5886454391678e+02,
-      0.1135301432805e-08, 0.3700805023550e+00, 0.7842370451713e+02,
-      0.9215887951370e-09, 0.4364579276638e+01, 0.1014262087719e+03,
-      0.1055401054147e-08, 0.2156564222111e+01, 0.5660027930059e+02,
-      0.1008725979831e-08, 0.5454015785234e+01, 0.4245678405627e+02,
-      0.7217398104321e-09, 0.1597772562175e+01, 0.2457074661053e+03,
-
-      0.6912033134447e-09, 0.5824090621461e+01, 0.1679936946371e+03,
-      0.6833881523549e-09, 0.3578778482835e+01, 0.6053048899753e+02,
-      0.4887304205142e-09, 0.3724362812423e+01, 0.9656299901946e+02,
-      0.5173709754788e-09, 0.5422427507933e+01, 0.2442876000072e+03,
-      0.4671353097145e-09, 0.2396106924439e+01, 0.1435713242844e+03,
-      0.5652608439480e-09, 0.2804028838685e+01, 0.8365903305582e+02,
-      0.5604061331253e-09, 0.1638816006247e+01, 0.8433466158131e+02,
-      0.4712723365400e-09, 0.8979003224474e+00, 0.3164282286739e+03,
-      0.4909967465112e-09, 0.3210426725516e+01, 0.4059982187939e+03,
-      0.4771358267658e-09, 0.5308027211629e+01, 0.1805255418145e+03,
-
-      0.3943451445989e-09, 0.2195145341074e+01, 0.2568537517081e+03,
-      0.3952109120244e-09, 0.5081189491586e+01, 0.2449975330562e+03,
-      0.3788134594789e-09, 0.4345171264441e+01, 0.1568131045107e+03,
-      0.3738330190479e-09, 0.2613062847997e+01, 0.3948519331910e+03,
-      0.3099866678136e-09, 0.2846760817689e+01, 0.1547176098872e+03,
-      0.2002962716768e-09, 0.4921360989412e+01, 0.2268582385539e+03,
-      0.2198291338754e-09, 0.1130360117454e+00, 0.1658638954901e+03,
-      0.1491958330784e-09, 0.4228195232278e+01, 0.2219950288015e+03,
-      0.1475384076173e-09, 0.3005721811604e+00, 0.3052819430710e+03,
-      0.1661626624624e-09, 0.7830125621203e+00, 0.2526661704812e+03,
-
-      0.9015823460025e-10, 0.3807792942715e+01, 0.4171445043968e+03 };
-
-/* Sun-to-Earth, T^0, Y */
-   static const double e0y[] = {
-      0.9998921098898e+00, 0.1826583913846e+00, 0.6283075850446e+01,
-     -0.2442700893735e-01, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.8352929742915e-02, 0.1395277998680e+00, 0.1256615170089e+02,
-      0.1046697300177e-03, 0.9641423109763e-01, 0.1884922755134e+02,
-      0.3110841876663e-04, 0.5381140401712e+01, 0.8399684731857e+02,
-      0.2570269094593e-04, 0.5301016407128e+01, 0.5296909721118e+00,
-      0.2147389623610e-04, 0.2662510869850e+01, 0.1577343543434e+01,
-      0.1680344384050e-04, 0.5207904119704e+01, 0.6279552690824e+01,
-      0.1679117312193e-04, 0.4582187486968e+01, 0.6286599010068e+01,
-      0.1440512068440e-04, 0.1900688517726e+01, 0.2352866153506e+01,
-
-      0.1135139664999e-04, 0.5273108538556e+01, 0.5223693906222e+01,
-      0.9345482571018e-05, 0.4503047687738e+01, 0.1203646072878e+02,
-      0.9007418719568e-05, 0.1605621059637e+01, 0.1021328554739e+02,
-      0.5671536712314e-05, 0.5812849070861e+00, 0.1059381944224e+01,
-      0.7451401861666e-05, 0.2807346794836e+01, 0.3981490189893e+00,
-      0.6393470057114e-05, 0.6029224133855e+01, 0.5753384878334e+01,
-      0.6814275881697e-05, 0.6472990145974e+00, 0.4705732307012e+01,
-      0.6113705628887e-05, 0.3813843419700e+01, 0.6812766822558e+01,
-      0.4503851367273e-05, 0.4527804370996e+01, 0.5884926831456e+01,
-      0.4522249141926e-05, 0.5991783029224e+01, 0.6256777527156e+01,
-
-      0.4501794307018e-05, 0.3798703844397e+01, 0.6309374173736e+01,
-      0.5514927480180e-05, 0.3961257833388e+01, 0.5507553240374e+01,
-      0.4062862799995e-05, 0.5256247296369e+01, 0.6681224869435e+01,
-      0.5414900429712e-05, 0.5499032014097e+01, 0.7755226100720e+00,
-      0.5463153987424e-05, 0.6173092454097e+01, 0.1414349524433e+02,
-      0.5071611859329e-05, 0.2870244247651e+01, 0.7860419393880e+01,
-      0.2195112094455e-05, 0.2952338617201e+01, 0.1150676975667e+02,
-      0.2279139233919e-05, 0.5951775132933e+01, 0.7058598460518e+01,
-      0.2278386100876e-05, 0.4845456398785e+01, 0.4694002934110e+01,
-      0.2559088003308e-05, 0.6945321117311e+00, 0.1216800268190e+02,
-
-      0.2561079286856e-05, 0.6167224608301e+01, 0.7099330490126e+00,
-      0.1792755796387e-05, 0.1400122509632e+01, 0.7962980379786e+00,
-      0.1818715656502e-05, 0.4703347611830e+01, 0.6283142985870e+01,
-      0.1818744924791e-05, 0.5086748900237e+01, 0.6283008715021e+01,
-      0.1554518791390e-05, 0.5331008042713e-01, 0.2513230340178e+02,
-      0.2063265737239e-05, 0.4283680484178e+01, 0.1179062909082e+02,
-      0.1497613520041e-05, 0.6074207826073e+01, 0.5486777812467e+01,
-      0.2000617940427e-05, 0.2501426281450e+01, 0.1778984560711e+02,
-      0.1289731195580e-05, 0.3646340599536e+01, 0.7079373888424e+01,
-      0.1282657998934e-05, 0.3232864804902e+01, 0.3738761453707e+01,
-
-      0.1528915968658e-05, 0.5581433416669e+01, 0.2132990797783e+00,
-      0.1187304098432e-05, 0.5453576453694e+01, 0.9437762937313e+01,
-      0.7842782928118e-06, 0.2823953922273e+00, 0.8827390247185e+01,
-      0.7352892280868e-06, 0.1124369580175e+01, 0.1589072916335e+01,
-      0.6570189360797e-06, 0.2089154042840e+01, 0.1176985366291e+02,
-      0.6324967590410e-06, 0.6704855581230e+00, 0.6262300422539e+01,
-      0.6298289872283e-06, 0.2836414855840e+01, 0.6303851278352e+01,
-      0.6476686465855e-06, 0.4852433866467e+00, 0.7113454667900e-02,
-      0.8587034651234e-06, 0.1453511005668e+01, 0.1672837615881e+03,
-      0.8068948788113e-06, 0.9224087798609e+00, 0.6069776770667e+01,
-
-      0.8353786011661e-06, 0.4631707184895e+01, 0.3340612434717e+01,
-      0.6009324532132e-06, 0.1829498827726e+01, 0.4136910472696e+01,
-      0.7558158559566e-06, 0.2588596800317e+01, 0.6496374930224e+01,
-      0.5809279504503e-06, 0.5516818853476e+00, 0.1097707878456e+02,
-      0.5374131950254e-06, 0.6275674734960e+01, 0.1194447056968e+01,
-      0.5711160507326e-06, 0.1091905956872e+01, 0.6282095334605e+01,
-      0.5710183170746e-06, 0.2415001635090e+01, 0.6284056366286e+01,
-      0.5144373590610e-06, 0.6020336443438e+01, 0.6290189305114e+01,
-      0.5103108927267e-06, 0.3775634564605e+01, 0.6275962395778e+01,
-      0.4960654697891e-06, 0.1073450946756e+01, 0.6127655567643e+01,
-
-      0.4786385689280e-06, 0.2431178012310e+01, 0.6438496133249e+01,
-      0.6109911263665e-06, 0.5343356157914e+01, 0.3154687086868e+01,
-      0.4839898944024e-06, 0.5830833594047e-01, 0.8018209333619e+00,
-      0.4734822623919e-06, 0.4536080134821e+01, 0.3128388763578e+01,
-      0.4834741473290e-06, 0.2585090489754e+00, 0.7084896783808e+01,
-      0.5134858581156e-06, 0.4213317172603e+01, 0.1235285262111e+02,
-      0.5064004264978e-06, 0.4814418806478e+00, 0.1185621865188e+02,
-      0.3753476772761e-06, 0.1599953399788e+01, 0.8429241228195e+01,
-      0.4935264014283e-06, 0.2157417556873e+01, 0.2544314396739e+01,
-      0.3950929600897e-06, 0.3359394184254e+01, 0.5481254917084e+01,
-
-      0.4895849789777e-06, 0.5165704376558e+01, 0.9225539266174e+01,
-      0.4215241688886e-06, 0.2065368800993e+01, 0.1726015463500e+02,
-      0.3796773731132e-06, 0.1468606346612e+01, 0.4265981595566e+00,
-      0.3114178142515e-06, 0.3615638079474e+01, 0.2146165377750e+01,
-      0.3260664220838e-06, 0.4417134922435e+01, 0.4164311961999e+01,
-      0.3976996123008e-06, 0.4700866883004e+01, 0.5856477690889e+01,
-      0.2801459672924e-06, 0.4538902060922e+01, 0.1256967486051e+02,
-      0.3638931868861e-06, 0.1334197991475e+01, 0.1807370494127e+02,
-      0.2487013269476e-06, 0.3749275558275e+01, 0.2629832328990e-01,
-      0.3034165481994e-06, 0.4236622030873e+00, 0.4535059491685e+01,
-
-      0.2676278825586e-06, 0.5970848007811e+01, 0.3930209696940e+01,
-      0.2764903818918e-06, 0.5194636754501e+01, 0.1256262854127e+02,
-      0.2485149930507e-06, 0.1002434207846e+01, 0.5088628793478e+01,
-      0.2199305540941e-06, 0.3066773098403e+01, 0.1255903824622e+02,
-      0.2571106500435e-06, 0.7588312459063e+00, 0.1336797263425e+02,
-      0.2049751817158e-06, 0.3444977434856e+01, 0.1137170464392e+02,
-      0.2599707296297e-06, 0.1873128542205e+01, 0.7143069561767e+02,
-      0.1785018072217e-06, 0.5015891306615e+01, 0.1748016358760e+01,
-      0.2324833891115e-06, 0.4618271239730e+01, 0.1831953657923e+02,
-      0.1709711119545e-06, 0.5300003455669e+01, 0.4933208510675e+01,
-
-      0.2107159351716e-06, 0.2229819815115e+01, 0.7477522907414e+01,
-      0.1750333080295e-06, 0.6161485880008e+01, 0.1044738781244e+02,
-      0.2000598210339e-06, 0.2967357299999e+01, 0.8031092209206e+01,
-      0.1380920248681e-06, 0.3027007923917e+01, 0.8635942003952e+01,
-      0.1412460470299e-06, 0.6037597163798e+01, 0.2942463415728e+01,
-      0.1888459803001e-06, 0.8561476243374e+00, 0.1561374759853e+03,
-      0.1788370542585e-06, 0.4869736290209e+01, 0.1592596075957e+01,
-      0.1360893296167e-06, 0.3626411886436e+01, 0.1309584267300e+02,
-      0.1506846530160e-06, 0.1550975377427e+01, 0.1649636139783e+02,
-      0.1800913376176e-06, 0.2075826033190e+01, 0.1729818233119e+02,
-
-      0.1436261390649e-06, 0.6148876420255e+01, 0.2042657109477e+02,
-      0.1220227114151e-06, 0.4382583879906e+01, 0.7632943190217e+01,
-      0.1337883603592e-06, 0.2036644327361e+01, 0.1213955354133e+02,
-      0.1159326650738e-06, 0.3892276994687e+01, 0.5331357529664e+01,
-      0.1352853128569e-06, 0.1447950649744e+01, 0.1673046366289e+02,
-      0.1433408296083e-06, 0.4457854692961e+01, 0.7342457794669e+01,
-      0.1234701666518e-06, 0.1538818147151e+01, 0.6279485555400e+01,
-      0.1234027192007e-06, 0.1968523220760e+01, 0.6286666145492e+01,
-      0.1244024091797e-06, 0.5779803499985e+01, 0.1511046609763e+02,
-      0.1097934945516e-06, 0.6210975221388e+00, 0.1098880815746e+02,
-
-      0.1254611329856e-06, 0.2591963807998e+01, 0.1572083878776e+02,
-      0.1158247286784e-06, 0.2483612812670e+01, 0.5729506548653e+01,
-      0.9039078252960e-07, 0.3857554579796e+01, 0.9623688285163e+01,
-      0.9108024978836e-07, 0.5826368512984e+01, 0.7234794171227e+01,
-      0.8887068108436e-07, 0.3475694573987e+01, 0.6148010737701e+01,
-      0.8632374035438e-07, 0.3059070488983e-01, 0.6418140963190e+01,
-      0.7893186992967e-07, 0.1583194837728e+01, 0.2118763888447e+01,
-      0.8297650201172e-07, 0.8519770534637e+00, 0.1471231707864e+02,
-      0.1019759578988e-06, 0.1319598738732e+00, 0.1349867339771e+01,
-      0.1010037696236e-06, 0.9937860115618e+00, 0.6836645152238e+01,
-
-      0.1047727548266e-06, 0.1382138405399e+01, 0.5999216516294e+01,
-      0.7351993881086e-07, 0.3833397851735e+01, 0.6040347114260e+01,
-      0.9868771092341e-07, 0.2124913814390e+01, 0.6566935184597e+01,
-      0.7007321959390e-07, 0.5946305343763e+01, 0.6525804586632e+01,
-      0.6861411679709e-07, 0.4574654977089e+01, 0.7238675589263e+01,
-      0.7554519809614e-07, 0.5949232686844e+01, 0.1253985337760e+02,
-      0.9541880448335e-07, 0.3495242990564e+01, 0.2122839202813e+02,
-      0.7185606722155e-07, 0.4310113471661e+01, 0.6245048154254e+01,
-      0.7131360871710e-07, 0.5480309323650e+01, 0.6321103546637e+01,
-      0.6651142021039e-07, 0.5411097713654e+01, 0.5327476111629e+01,
-
-      0.8538618213667e-07, 0.1827849973951e+01, 0.1101510648075e+02,
-      0.8634954288044e-07, 0.5443584943349e+01, 0.5643178611111e+01,
-      0.7449415051484e-07, 0.2011535459060e+01, 0.5368044267797e+00,
-      0.7421047599169e-07, 0.3464562529249e+01, 0.2354323048545e+02,
-      0.6140694354424e-07, 0.5657556228815e+01, 0.1296430071988e+02,
-      0.6353525143033e-07, 0.3463816593821e+01, 0.1990745094947e+01,
-      0.6221964013447e-07, 0.1532259498697e+01, 0.9517183207817e+00,
-      0.5852480257244e-07, 0.1375396598875e+01, 0.9555997388169e+00,
-      0.6398637498911e-07, 0.2405645801972e+01, 0.2407292145756e+02,
-      0.7039744069878e-07, 0.5397541799027e+01, 0.5225775174439e+00,
-
-      0.6977997694382e-07, 0.4762347105419e+01, 0.1097355562493e+02,
-      0.7460629558396e-07, 0.2711944692164e+01, 0.2200391463820e+02,
-      0.5376577536101e-07, 0.2352980430239e+01, 0.1431416805965e+02,
-      0.7530607893556e-07, 0.1943940180699e+01, 0.1842262939178e+02,
-      0.6822928971605e-07, 0.4337651846959e+01, 0.1554202828031e+00,
-      0.6220772380094e-07, 0.6716871369278e+00, 0.1845107853235e+02,
-      0.6586950799043e-07, 0.2229714460505e+01, 0.5216580451554e+01,
-      0.5873800565771e-07, 0.7627013920580e+00, 0.6398972393349e+00,
-      0.6264346929745e-07, 0.6202785478961e+00, 0.6277552955062e+01,
-      0.6257929115669e-07, 0.2886775596668e+01, 0.6288598745829e+01,
-
-      0.5343536033409e-07, 0.1977241012051e+01, 0.4690479774488e+01,
-      0.5587849781714e-07, 0.1922923484825e+01, 0.1551045220144e+01,
-      0.6905100845603e-07, 0.3570757164631e+01, 0.1030928125552e+00,
-      0.6178957066649e-07, 0.5197558947765e+01, 0.5230807360890e+01,
-      0.6187270224331e-07, 0.8193497368922e+00, 0.5650292065779e+01,
-      0.5385664291426e-07, 0.5406336665586e+01, 0.7771377146812e+02,
-      0.6329363917926e-07, 0.2837760654536e+01, 0.2608790314060e+02,
-      0.4546018761604e-07, 0.2933580297050e+01, 0.5535693017924e+00,
-      0.6196091049375e-07, 0.4157871494377e+01, 0.8467247584405e+02,
-      0.6159555108218e-07, 0.3211703561703e+01, 0.2394243902548e+03,
-
-      0.4995340539317e-07, 0.1459098102922e+01, 0.4732030630302e+01,
-      0.5457031243572e-07, 0.1430457676136e+01, 0.6179983037890e+01,
-      0.4863461418397e-07, 0.2196425916730e+01, 0.9027992316901e+02,
-      0.5342947626870e-07, 0.2086612890268e+01, 0.6386168663001e+01,
-      0.5674296648439e-07, 0.2760204966535e+01, 0.6915859635113e+01,
-      0.4745783120161e-07, 0.4245368971862e+01, 0.6282970628506e+01,
-      0.4745676961198e-07, 0.5544725787016e+01, 0.6283181072386e+01,
-      0.4049796869973e-07, 0.2213984363586e+01, 0.6254626709878e+01,
-      0.4248333596940e-07, 0.8075781952896e+00, 0.7875671926403e+01,
-      0.4027178070205e-07, 0.1293268540378e+01, 0.6311524991013e+01,
-
-      0.4066543943476e-07, 0.3986141175804e+01, 0.3634620989887e+01,
-      0.4858863787880e-07, 0.1276112738231e+01, 0.5760498333002e+01,
-      0.5277398263530e-07, 0.4916111741527e+01, 0.2515860172507e+02,
-      0.4105635656559e-07, 0.1725805864426e+01, 0.6709674010002e+01,
-      0.4376781925772e-07, 0.2243642442106e+01, 0.6805653367890e+01,
-      0.3235827894693e-07, 0.3614135118271e+01, 0.1066495398892e+01,
-      0.3073244740308e-07, 0.2460873393460e+01, 0.5863591145557e+01,
-      0.3088609271373e-07, 0.5678431771790e+01, 0.9917696840332e+01,
-      0.3393022279836e-07, 0.3814017477291e+01, 0.1391601904066e+02,
-      0.3038686508802e-07, 0.4660216229171e+01, 0.1256621883632e+02,
-
-      0.4019677752497e-07, 0.5906906243735e+01, 0.1334167431096e+02,
-      0.3288834998232e-07, 0.9536146445882e+00, 0.1620077269078e+02,
-      0.3889973794631e-07, 0.3942205097644e+01, 0.7478166569050e-01,
-      0.3050438987141e-07, 0.1624810271286e+01, 0.1805292951336e+02,
-      0.3601142564638e-07, 0.4030467142575e+01, 0.6208294184755e+01,
-      0.3689015557141e-07, 0.3648878818694e+01, 0.5966683958112e+01,
-      0.3563471893565e-07, 0.5749584017096e+01, 0.6357857516136e+01,
-      0.2776183170667e-07, 0.2630124187070e+01, 0.3523159621801e-02,
-      0.2922350530341e-07, 0.1790346403629e+01, 0.1272157198369e+02,
-      0.3511076917302e-07, 0.6142198301611e+01, 0.6599467742779e+01,
-
-      0.3619351007632e-07, 0.1432421386492e+01, 0.6019991944201e+01,
-      0.2561254711098e-07, 0.2302822475792e+01, 0.1259245002418e+02,
-      0.2626903942920e-07, 0.8660470994571e+00, 0.6702560555334e+01,
-      0.2550187397083e-07, 0.6069721995383e+01, 0.1057540660594e+02,
-      0.2535873526138e-07, 0.1079020331795e-01, 0.3141537925223e+02,
-      0.3519786153847e-07, 0.3809066902283e+01, 0.2505706758577e+03,
-      0.3424651492873e-07, 0.2075435114417e+01, 0.6546159756691e+01,
-      0.2372676630861e-07, 0.2057803120154e+01, 0.2388894113936e+01,
-      0.2710980779541e-07, 0.1510068488010e+01, 0.1202934727411e+02,
-      0.3038710889704e-07, 0.5043617528901e+01, 0.1256608456547e+02,
-
-      0.2220364130585e-07, 0.3694793218205e+01, 0.1336244973887e+02,
-      0.3025880825460e-07, 0.5450618999049e-01, 0.2908881142201e+02,
-      0.2784493486864e-07, 0.3381164084502e+01, 0.1494531617769e+02,
-      0.2294414142438e-07, 0.4382309025210e+01, 0.6076890225335e+01,
-      0.2012723294724e-07, 0.9142212256518e+00, 0.6262720680387e+01,
-      0.2036357831958e-07, 0.5676172293154e+01, 0.4701116388778e+01,
-      0.2003474823288e-07, 0.2592767977625e+01, 0.6303431020504e+01,
-      0.2207144900109e-07, 0.5404976271180e+01, 0.6489261475556e+01,
-      0.2481664905135e-07, 0.4373284587027e+01, 0.1204357418345e+02,
-      0.2674949182295e-07, 0.5859182188482e+01, 0.4590910121555e+01,
-
-      0.2450554720322e-07, 0.4555381557451e+01, 0.1495633313810e+00,
-      0.2601975986457e-07, 0.3933165584959e+01, 0.1965104848470e+02,
-      0.2199860022848e-07, 0.5227977189087e+01, 0.1351787002167e+02,
-      0.2448121172316e-07, 0.4858060353949e+01, 0.1162474756779e+01,
-      0.1876014864049e-07, 0.5690546553605e+01, 0.6279194432410e+01,
-      0.1874513219396e-07, 0.4099539297446e+01, 0.6286957268481e+01,
-      0.2156380842559e-07, 0.4382594769913e+00, 0.1813929450232e+02,
-      0.1981691240061e-07, 0.1829784152444e+01, 0.4686889479442e+01,
-      0.2329992648539e-07, 0.2836254278973e+01, 0.1002183730415e+02,
-      0.1765184135302e-07, 0.2803494925833e+01, 0.4292330755499e+01,
-
-      0.2436368366085e-07, 0.2836897959677e+01, 0.9514313292143e+02,
-      0.2164089203889e-07, 0.6127522446024e+01, 0.6037244212485e+01,
-      0.1847755034221e-07, 0.3683163635008e+01, 0.2427287361862e+00,
-      0.1674798769966e-07, 0.3316993867246e+00, 0.1311972100268e+02,
-      0.2222542124356e-07, 0.8294097805480e+00, 0.1266924451345e+02,
-      0.2071074505925e-07, 0.3659492220261e+01, 0.6528907488406e+01,
-      0.1608224471835e-07, 0.4774492067182e+01, 0.1352175143971e+02,
-      0.1857583439071e-07, 0.2873120597682e+01, 0.8662240327241e+01,
-      0.1793018836159e-07, 0.5282441177929e+00, 0.6819880277225e+01,
-      0.1575391221692e-07, 0.1320789654258e+01, 0.1102062672231e+00,
-
-      0.1840132009557e-07, 0.1917110916256e+01, 0.6514761976723e+02,
-      0.1760917288281e-07, 0.2972635937132e+01, 0.5746271423666e+01,
-      0.1561779518516e-07, 0.4372569261981e+01, 0.6272439236156e+01,
-      0.1558687885205e-07, 0.5416424926425e+01, 0.6293712464735e+01,
-      0.1951359382579e-07, 0.3094448898752e+01, 0.2301353951334e+02,
-      0.1569144275614e-07, 0.2802103689808e+01, 0.1765478049437e+02,
-      0.1479130389462e-07, 0.2136435020467e+01, 0.2077542790660e-01,
-      0.1467828510764e-07, 0.7072627435674e+00, 0.1052268489556e+01,
-      0.1627627337440e-07, 0.3947607143237e+01, 0.6327837846670e+00,
-      0.1503498479758e-07, 0.4079248909190e+01, 0.7626583626240e-01,
-
-      0.1297967708237e-07, 0.6269637122840e+01, 0.1149965630200e+02,
-      0.1374416896634e-07, 0.4175657970702e+01, 0.6016468784579e+01,
-      0.1783812325219e-07, 0.1476540547560e+01, 0.3301902111895e+02,
-      0.1525884228756e-07, 0.4653477715241e+01, 0.9411464614024e+01,
-      0.1451067396763e-07, 0.2573001128225e+01, 0.1277945078067e+02,
-      0.1297713111950e-07, 0.5612799618771e+01, 0.6549682916313e+01,
-      0.1462784012820e-07, 0.4189661623870e+01, 0.1863592847156e+02,
-      0.1384185980007e-07, 0.2656915472196e+01, 0.2379164476796e+01,
-      0.1221497599801e-07, 0.5612515760138e+01, 0.1257326515556e+02,
-      0.1560574525896e-07, 0.4783414317919e+01, 0.1887552587463e+02,
-
-      0.1544598372036e-07, 0.2694431138063e+01, 0.1820933031200e+02,
-      0.1531678928696e-07, 0.4105103489666e+01, 0.2593412433514e+02,
-      0.1349321503795e-07, 0.3082437194015e+00, 0.5120601093667e+01,
-      0.1252030290917e-07, 0.6124072334087e+01, 0.6993008899458e+01,
-      0.1459243816687e-07, 0.3733103981697e+01, 0.3813291813120e-01,
-      0.1226103625262e-07, 0.1267127706817e+01, 0.2435678079171e+02,
-      0.1019449641504e-07, 0.4367790112269e+01, 0.1725663147538e+02,
-      0.1380789433607e-07, 0.3387201768700e+01, 0.2458316379602e+00,
-      0.1019453421658e-07, 0.9204143073737e+00, 0.6112403035119e+01,
-      0.1297929434405e-07, 0.5786874896426e+01, 0.1249137003520e+02,
-
-      0.9912677786097e-08, 0.3164232870746e+01, 0.6247047890016e+01,
-      0.9829386098599e-08, 0.2586762413351e+01, 0.6453748665772e+01,
-      0.1226807746104e-07, 0.6239068436607e+01, 0.5429879531333e+01,
-      0.1192691755997e-07, 0.1867380051424e+01, 0.6290122169689e+01,
-      0.9836499227081e-08, 0.3424716293727e+00, 0.6319103810876e+01,
-      0.9642862564285e-08, 0.5661372990657e+01, 0.8273820945392e+01,
-      0.1165184404862e-07, 0.5768367239093e+01, 0.1778273215245e+02,
-      0.1175794418818e-07, 0.1657351222943e+01, 0.6276029531202e+01,
-      0.1018948635601e-07, 0.6458292350865e+00, 0.1254537627298e+02,
-      0.9500383606676e-08, 0.1054306140741e+01, 0.1256517118505e+02,
-
-      0.1227512202906e-07, 0.2505278379114e+01, 0.2248384854122e+02,
-      0.9664792009993e-08, 0.4289737277000e+01, 0.6259197520765e+01,
-      0.9613285666331e-08, 0.5500597673141e+01, 0.6306954180126e+01,
-      0.1117906736211e-07, 0.2361405953468e+01, 0.1779695906178e+02,
-      0.9611378640782e-08, 0.2851310576269e+01, 0.2061856251104e+00,
-      0.8845354852370e-08, 0.6208777705343e+01, 0.1692165728891e+01,
-      0.1054046966600e-07, 0.5413091423934e+01, 0.2204125344462e+00,
-      0.1215539124483e-07, 0.5613969479755e+01, 0.8257698122054e+02,
-      0.9932460955209e-08, 0.1106124877015e+01, 0.1017725758696e+02,
-      0.8785804715043e-08, 0.2869224476477e+01, 0.9491756770005e+00,
-
-      0.8538084097562e-08, 0.6159640899344e+01, 0.6393282117669e+01,
-      0.8648994369529e-08, 0.1374901198784e+01, 0.4804209201333e+01,
-      0.1039063219067e-07, 0.5171080641327e+01, 0.1550861511662e+02,
-      0.8867983926439e-08, 0.8317320304902e+00, 0.3903911373650e+01,
-      0.8327495955244e-08, 0.3605591969180e+01, 0.6172869583223e+01,
-      0.9243088356133e-08, 0.6114299196843e+01, 0.6267823317922e+01,
-      0.9205657357835e-08, 0.3675153683737e+01, 0.6298328382969e+01,
-      0.1033269714606e-07, 0.3313328813024e+01, 0.5573142801433e+01,
-      0.8001706275552e-08, 0.2019980960053e+01, 0.2648454860559e+01,
-      0.9171858254191e-08, 0.8992015524177e+00, 0.1498544001348e+03,
-
-      0.1075327150242e-07, 0.2898669963648e+01, 0.3694923081589e+02,
-      0.9884866689828e-08, 0.4946715904478e+01, 0.1140367694411e+02,
-      0.9541835576677e-08, 0.2371787888469e+01, 0.1256713221673e+02,
-      0.7739903376237e-08, 0.2213775190612e+01, 0.7834121070590e+01,
-      0.7311962684106e-08, 0.3429378787739e+01, 0.1192625446156e+02,
-      0.9724904869624e-08, 0.6195878564404e+01, 0.2280573557157e+02,
-      0.9251628983612e-08, 0.6511509527390e+00, 0.2787043132925e+01,
-      0.7320763787842e-08, 0.6001083639421e+01, 0.6282655592598e+01,
-      0.7320296650962e-08, 0.3789073265087e+01, 0.6283496108294e+01,
-      0.7947032271039e-08, 0.1059659582204e+01, 0.1241073141809e+02,
-
-      0.9005277053115e-08, 0.1280315624361e+01, 0.6281591679874e+01,
-      0.8995601652048e-08, 0.2224439106766e+01, 0.6284560021018e+01,
-      0.8288040568796e-08, 0.5234914433867e+01, 0.1241658836951e+02,
-      0.6359381347255e-08, 0.4137989441490e+01, 0.1596186371003e+01,
-      0.8699572228626e-08, 0.1758411009497e+01, 0.6133512519065e+01,
-      0.6456797542736e-08, 0.5919285089994e+01, 0.1685848245639e+02,
-      0.7424573475452e-08, 0.5414616938827e+01, 0.4061219149443e+01,
-      0.7235671196168e-08, 0.1496516557134e+01, 0.1610006857377e+03,
-      0.8104015182733e-08, 0.1919918242764e+01, 0.8460828644453e+00,
-      0.8098576535937e-08, 0.3819615855458e+01, 0.3894181736510e+01,
-
-      0.6275292346625e-08, 0.6244264115141e+01, 0.8531963191132e+00,
-      0.6052432989112e-08, 0.5037731872610e+00, 0.1567108171867e+02,
-      0.5705651535817e-08, 0.2984557271995e+01, 0.1258692712880e+02,
-      0.5789650115138e-08, 0.6087038140697e+01, 0.1193336791622e+02,
-      0.5512132153377e-08, 0.5855668994076e+01, 0.1232342296471e+02,
-      0.7388890819102e-08, 0.2443128574740e+01, 0.4907302013889e+01,
-      0.5467593991798e-08, 0.3017561234194e+01, 0.1884211409667e+02,
-      0.6388519802999e-08, 0.5887386712935e+01, 0.5217580628120e+02,
-      0.6106777149944e-08, 0.3483461059895e+00, 0.1422690933580e-01,
-      0.7383420275489e-08, 0.5417387056707e+01, 0.2358125818164e+02,
-
-      0.5505208141738e-08, 0.2848193644783e+01, 0.1151388321134e+02,
-      0.6310757462877e-08, 0.2349882520828e+01, 0.1041998632314e+02,
-      0.6166904929691e-08, 0.5728575944077e+00, 0.6151533897323e+01,
-      0.5263442042754e-08, 0.4495796125937e+01, 0.1885275071096e+02,
-      0.5591828082629e-08, 0.1355441967677e+01, 0.4337116142245e+00,
-      0.5397051680497e-08, 0.1673422864307e+01, 0.6286362197481e+01,
-      0.5396992745159e-08, 0.1833502206373e+01, 0.6279789503410e+01,
-      0.6572913000726e-08, 0.3331122065824e+01, 0.1176433076753e+02,
-      0.5123421866413e-08, 0.2165327142679e+01, 0.1245594543367e+02,
-      0.5930495725999e-08, 0.2931146089284e+01, 0.6414617803568e+01,
-
-      0.6431797403933e-08, 0.4134407994088e+01, 0.1350651127443e+00,
-      0.5003182207604e-08, 0.3805420303749e+01, 0.1096996532989e+02,
-      0.5587731032504e-08, 0.1082469260599e+01, 0.6062663316000e+01,
-      0.5935263407816e-08, 0.8384333678401e+00, 0.5326786718777e+01,
-      0.4756019827760e-08, 0.3552588749309e+01, 0.3104930017775e+01,
-      0.6599951172637e-08, 0.4320826409528e+01, 0.4087944051283e+02,
-      0.5902606868464e-08, 0.4811879454445e+01, 0.5849364236221e+01,
-      0.5921147809031e-08, 0.9942628922396e-01, 0.1581959461667e+01,
-      0.5505382581266e-08, 0.2466557607764e+01, 0.6503488384892e+01,
-      0.5353771071862e-08, 0.4551978748683e+01, 0.1735668374386e+03,
-
-      0.5063282210946e-08, 0.5710812312425e+01, 0.1248988586463e+02,
-      0.5926120403383e-08, 0.1333998428358e+01, 0.2673594526851e+02,
-      0.5211016176149e-08, 0.4649315360760e+01, 0.2460261242967e+02,
-      0.5347075084894e-08, 0.5512754081205e+01, 0.4171425416666e+01,
-      0.4872609773574e-08, 0.1308025299938e+01, 0.5333900173445e+01,
-      0.4727711321420e-08, 0.2144908368062e+01, 0.7232251527446e+01,
-      0.6029426018652e-08, 0.5567259412084e+01, 0.3227113045244e+03,
-      0.4321485284369e-08, 0.5230667156451e+01, 0.9388005868221e+01,
-      0.4476406760553e-08, 0.6134081115303e+01, 0.5547199253223e+01,
-      0.5835268277420e-08, 0.4783808492071e+01, 0.7285056171570e+02,
-
-      0.5172183602748e-08, 0.5161817911099e+01, 0.1884570439172e+02,
-      0.5693571465184e-08, 0.1381646203111e+01, 0.9723862754494e+02,
-      0.4060634965349e-08, 0.3876705259495e+00, 0.4274518229222e+01,
-      0.3967398770473e-08, 0.5029491776223e+01, 0.3496032717521e+01,
-      0.3943754005255e-08, 0.1923162955490e+01, 0.6244942932314e+01,
-      0.4781323427824e-08, 0.4633332586423e+01, 0.2929661536378e+02,
-      0.3871483781204e-08, 0.1616650009743e+01, 0.6321208768577e+01,
-      0.5141741733997e-08, 0.9817316704659e-01, 0.1232032006293e+02,
-      0.4002385978497e-08, 0.3656161212139e+01, 0.7018952447668e+01,
-      0.4901092604097e-08, 0.4404098713092e+01, 0.1478866649112e+01,
-
-      0.3740932630345e-08, 0.5181188732639e+00, 0.6922973089781e+01,
-      0.4387283718538e-08, 0.3254859566869e+01, 0.2331413144044e+03,
-      0.5019197802033e-08, 0.3086773224677e+01, 0.1715706182245e+02,
-      0.3834931695175e-08, 0.2797882673542e+01, 0.1491901785440e+02,
-      0.3760413942497e-08, 0.2892676280217e+01, 0.1726726808967e+02,
-      0.3719717204628e-08, 0.5861046025739e+01, 0.6297302759782e+01,
-      0.4145623530149e-08, 0.2168239627033e+01, 0.1376059875786e+02,
-      0.3932788425380e-08, 0.6271811124181e+01, 0.7872148766781e+01,
-      0.3686377476857e-08, 0.3936853151404e+01, 0.6268848941110e+01,
-      0.3779077950339e-08, 0.1404148734043e+01, 0.4157198507331e+01,
-
-      0.4091334550598e-08, 0.2452436180854e+01, 0.9779108567966e+01,
-      0.3926694536146e-08, 0.6102292739040e+01, 0.1098419223922e+02,
-      0.4841000253289e-08, 0.6072760457276e+01, 0.1252801878276e+02,
-      0.4949340130240e-08, 0.1154832815171e+01, 0.1617106187867e+03,
-      0.3761557737360e-08, 0.5527545321897e+01, 0.3185192151914e+01,
-      0.3647396268188e-08, 0.1525035688629e+01, 0.6271346477544e+01,
-      0.3932405074189e-08, 0.5570681040569e+01, 0.2139354194808e+02,
-      0.3631322501141e-08, 0.1981240601160e+01, 0.6294805223347e+01,
-      0.4130007425139e-08, 0.2050060880201e+01, 0.2195415756911e+02,
-      0.4433905965176e-08, 0.3277477970321e+01, 0.7445550607224e+01,
-
-      0.3851814176947e-08, 0.5210690074886e+01, 0.9562891316684e+00,
-      0.3485807052785e-08, 0.6653274904611e+00, 0.1161697602389e+02,
-      0.3979772816991e-08, 0.1767941436148e+01, 0.2277943724828e+02,
-      0.3402607460500e-08, 0.3421746306465e+01, 0.1087398597200e+02,
-      0.4049993000926e-08, 0.1127144787547e+01, 0.3163918923335e+00,
-      0.3420511182382e-08, 0.4214794779161e+01, 0.1362553364512e+02,
-      0.3640772365012e-08, 0.5324905497687e+01, 0.1725304118033e+02,
-      0.3323037987501e-08, 0.6135761838271e+01, 0.6279143387820e+01,
-      0.4503141663637e-08, 0.1802305450666e+01, 0.1385561574497e+01,
-      0.4314560055588e-08, 0.4812299731574e+01, 0.4176041334900e+01,
-
-      0.3294226949110e-08, 0.3657547059723e+01, 0.6287008313071e+01,
-      0.3215657197281e-08, 0.4866676894425e+01, 0.5749861718712e+01,
-      0.4129362656266e-08, 0.3809342558906e+01, 0.5905702259363e+01,
-      0.3137762976388e-08, 0.2494635174443e+01, 0.2099539292909e+02,
-      0.3514010952384e-08, 0.2699961831678e+01, 0.7335344340001e+01,
-      0.3327607571530e-08, 0.3318457714816e+01, 0.5436992986000e+01,
-      0.3541066946675e-08, 0.4382703582466e+01, 0.1234573916645e+02,
-      0.3216179847052e-08, 0.5271066317054e+01, 0.3802769619140e-01,
-      0.2959045059570e-08, 0.5819591585302e+01, 0.2670964694522e+02,
-      0.3884040326665e-08, 0.5980934960428e+01, 0.6660449441528e+01,
-
-      0.2922027539886e-08, 0.3337290282483e+01, 0.1375773836557e+01,
-      0.4110846382042e-08, 0.5742978187327e+01, 0.4480965020977e+02,
-      0.2934508411032e-08, 0.2278075804200e+01, 0.6408777551755e+00,
-      0.3966896193000e-08, 0.5835747858477e+01, 0.3773735910827e+00,
-      0.3286695827610e-08, 0.5838898193902e+01, 0.3932462625300e-02,
-      0.3720643094196e-08, 0.1122212337858e+01, 0.1646033343740e+02,
-      0.3285508906174e-08, 0.9182250996416e+00, 0.1081813534213e+02,
-      0.3753880575973e-08, 0.5174761973266e+01, 0.5642198095270e+01,
-      0.3022129385587e-08, 0.3381611020639e+01, 0.2982630633589e+02,
-      0.2798569205621e-08, 0.3546193723922e+01, 0.1937891852345e+02,
-
-      0.3397872070505e-08, 0.4533203197934e+01, 0.6923953605621e+01,
-      0.3708099772977e-08, 0.2756168198616e+01, 0.3066615496545e+02,
-      0.3599283541510e-08, 0.1934395469918e+01, 0.6147450479709e+01,
-      0.3688702753059e-08, 0.7149920971109e+00, 0.2636725487657e+01,
-      0.2681084724003e-08, 0.4899819493154e+01, 0.6816289982179e+01,
-      0.3495993460759e-08, 0.1572418915115e+01, 0.6418701221183e+01,
-      0.3130770324995e-08, 0.8912190180489e+00, 0.1235996607578e+02,
-      0.2744353821941e-08, 0.3800821940055e+01, 0.2059724391010e+02,
-      0.2842732906341e-08, 0.2644717440029e+01, 0.2828699048865e+02,
-      0.3046882682154e-08, 0.3987793020179e+01, 0.6055599646783e+01,
-
-      0.2399072455143e-08, 0.9908826440764e+00, 0.6255674361143e+01,
-      0.2384306274204e-08, 0.2516149752220e+01, 0.6310477339748e+01,
-      0.2977324500559e-08, 0.5849195642118e+01, 0.1652265972112e+02,
-      0.3062835258972e-08, 0.1681660100162e+01, 0.1172006883645e+02,
-      0.3109682589231e-08, 0.5804143987737e+00, 0.2751146787858e+02,
-      0.2903920355299e-08, 0.5800768280123e+01, 0.6510552054109e+01,
-      0.2823221989212e-08, 0.9241118370216e+00, 0.5469525544182e+01,
-      0.3187949696649e-08, 0.3139776445735e+01, 0.1693792562116e+03,
-      0.2922559771655e-08, 0.3549440782984e+01, 0.2630839062450e+00,
-      0.2436302066603e-08, 0.4735540696319e+01, 0.3946258593675e+00,
-
-      0.3049473043606e-08, 0.4998289124561e+01, 0.8390110365991e+01,
-      0.2863682575784e-08, 0.6709515671102e+00, 0.2243449970715e+00,
-      0.2641750517966e-08, 0.5410978257284e+01, 0.2986433403208e+02,
-      0.2704093466243e-08, 0.4778317207821e+01, 0.6129297044991e+01,
-      0.2445522177011e-08, 0.6009020662222e+01, 0.1171295538178e+02,
-      0.2623608810230e-08, 0.5010449777147e+01, 0.6436854655901e+01,
-      0.2079259704053e-08, 0.5980943768809e+01, 0.2019909489111e+02,
-      0.2820225596771e-08, 0.2679965110468e+01, 0.5934151399930e+01,
-      0.2365221950927e-08, 0.1894231148810e+01, 0.2470570524223e+02,
-      0.2359682077149e-08, 0.4220752950780e+01, 0.8671969964381e+01,
-
-      0.2387577137206e-08, 0.2571783940617e+01, 0.7096626156709e+01,
-      0.1982102089816e-08, 0.5169765997119e+00, 0.1727188400790e+02,
-      0.2687502389925e-08, 0.6239078264579e+01, 0.7075506709219e+02,
-      0.2207751669135e-08, 0.2031184412677e+01, 0.4377611041777e+01,
-      0.2618370214274e-08, 0.8266079985979e+00, 0.6632000300961e+01,
-      0.2591951887361e-08, 0.8819350522008e+00, 0.4873985990671e+02,
-      0.2375055656248e-08, 0.3520944177789e+01, 0.1590676413561e+02,
-      0.2472019978911e-08, 0.1551431908671e+01, 0.6612329252343e+00,
-      0.2368157127199e-08, 0.4178610147412e+01, 0.3459636466239e+02,
-      0.1764846605693e-08, 0.1506764000157e+01, 0.1980094587212e+02,
-
-      0.2291769608798e-08, 0.2118250611782e+01, 0.2844914056730e-01,
-      0.2209997316943e-08, 0.3363255261678e+01, 0.2666070658668e+00,
-      0.2292699097923e-08, 0.4200423956460e+00, 0.1484170571900e-02,
-      0.1629683015329e-08, 0.2331362582487e+01, 0.3035599730800e+02,
-      0.2206492862426e-08, 0.3400274026992e+01, 0.6281667977667e+01,
-      0.2205746568257e-08, 0.1066051230724e+00, 0.6284483723224e+01,
-      0.2026310767991e-08, 0.2779066487979e+01, 0.2449240616245e+02,
-      0.1762977622163e-08, 0.9951450691840e+00, 0.2045286941806e+02,
-      0.1368535049606e-08, 0.6402447365817e+00, 0.2473415438279e+02,
-      0.1720598775450e-08, 0.2303524214705e+00, 0.1679593901136e+03,
-
-      0.1702429015449e-08, 0.6164622655048e+01, 0.3338575901272e+03,
-      0.1414033197685e-08, 0.3954561185580e+01, 0.1624205518357e+03,
-      0.1573768958043e-08, 0.2028286308984e+01, 0.3144167757552e+02,
-      0.1650705184447e-08, 0.2304040666128e+01, 0.5267006960365e+02,
-      0.1651087618855e-08, 0.2538461057280e+01, 0.8956999012000e+02,
-      0.1616409518983e-08, 0.5111054348152e+01, 0.3332657872986e+02,
-      0.1537175173581e-08, 0.5601130666603e+01, 0.3852657435933e+02,
-      0.1593191980553e-08, 0.2614340453411e+01, 0.2282781046519e+03,
-      0.1499480170643e-08, 0.3624721577264e+01, 0.2823723341956e+02,
-      0.1493807843235e-08, 0.4214569879008e+01, 0.2876692439167e+02,
-
-      0.1074571199328e-08, 0.1496911744704e+00, 0.8397383534231e+02,
-      0.1074406983417e-08, 0.1187817671922e+01, 0.8401985929482e+02,
-      0.9757576855851e-09, 0.2655703035858e+01, 0.7826370942180e+02,
-      0.1258432887565e-08, 0.4969896184844e+01, 0.3115650189215e+03,
-      0.1240336343282e-08, 0.5192460776926e+01, 0.1784300471910e+03,
-      0.9016107005164e-09, 0.1960356923057e+01, 0.5886454391678e+02,
-      0.1135392360918e-08, 0.5082427809068e+01, 0.7842370451713e+02,
-      0.9216046089565e-09, 0.2793775037273e+01, 0.1014262087719e+03,
-      0.1061276615030e-08, 0.3726144311409e+01, 0.5660027930059e+02,
-      0.1010110596263e-08, 0.7404080708937e+00, 0.4245678405627e+02,
-
-      0.7217424756199e-09, 0.2697449980577e-01, 0.2457074661053e+03,
-      0.6912003846756e-09, 0.4253296276335e+01, 0.1679936946371e+03,
-      0.6871814664847e-09, 0.5148072412354e+01, 0.6053048899753e+02,
-      0.4887158016343e-09, 0.2153581148294e+01, 0.9656299901946e+02,
-      0.5161802866314e-09, 0.3852750634351e+01, 0.2442876000072e+03,
-      0.5652599559057e-09, 0.1233233356270e+01, 0.8365903305582e+02,
-      0.4710812608586e-09, 0.5610486976767e+01, 0.3164282286739e+03,
-      0.4909977500324e-09, 0.1639629524123e+01, 0.4059982187939e+03,
-      0.4772641839378e-09, 0.3737100368583e+01, 0.1805255418145e+03,
-      0.4487562567153e-09, 0.1158417054478e+00, 0.8433466158131e+02,
-
-      0.3943441230497e-09, 0.6243502862796e+00, 0.2568537517081e+03,
-      0.3952236913598e-09, 0.3510377382385e+01, 0.2449975330562e+03,
-      0.3788898363417e-09, 0.5916128302299e+01, 0.1568131045107e+03,
-      0.3738329328831e-09, 0.1042266763456e+01, 0.3948519331910e+03,
-      0.2451199165151e-09, 0.1166788435700e+01, 0.1435713242844e+03,
-      0.2436734402904e-09, 0.3254726114901e+01, 0.2268582385539e+03,
-      0.2213605274325e-09, 0.1687210598530e+01, 0.1658638954901e+03,
-      0.1491521204829e-09, 0.2657541786794e+01, 0.2219950288015e+03,
-      0.1474995329744e-09, 0.5013089805819e+01, 0.3052819430710e+03,
-      0.1661939475656e-09, 0.5495315428418e+01, 0.2526661704812e+03,
-
-      0.9015946748003e-10, 0.2236989966505e+01, 0.4171445043968e+03 };
-
-/* Sun-to-Earth, T^0, Z */
-   static const double e0z[] = {
-      0.2796207639075e-05, 0.3198701560209e+01, 0.8433466158131e+02,
-      0.1016042198142e-05, 0.5422360395913e+01, 0.5507553240374e+01,
-      0.8044305033647e-06, 0.3880222866652e+01, 0.5223693906222e+01,
-      0.4385347909274e-06, 0.3704369937468e+01, 0.2352866153506e+01,
-      0.3186156414906e-06, 0.3999639363235e+01, 0.1577343543434e+01,
-      0.2272412285792e-06, 0.3984738315952e+01, 0.1047747311755e+01,
-      0.1645620103007e-06, 0.3565412516841e+01, 0.5856477690889e+01,
-      0.1815836921166e-06, 0.4984507059020e+01, 0.6283075850446e+01,
-      0.1447461676364e-06, 0.3702753570108e+01, 0.9437762937313e+01,
-      0.1430760876382e-06, 0.3409658712357e+01, 0.1021328554739e+02,
-
-      0.1120445753226e-06, 0.4829561570246e+01, 0.1414349524433e+02,
-      0.1090232840797e-06, 0.2080729178066e+01, 0.6812766822558e+01,
-      0.9715727346551e-07, 0.3476295881948e+01, 0.4694002934110e+01,
-      0.1036267136217e-06, 0.4056639536648e+01, 0.7109288135493e+02,
-      0.8752665271340e-07, 0.4448159519911e+01, 0.5753384878334e+01,
-      0.8331864956004e-07, 0.4991704044208e+01, 0.7084896783808e+01,
-      0.6901658670245e-07, 0.4325358994219e+01, 0.6275962395778e+01,
-      0.9144536848998e-07, 0.1141826375363e+01, 0.6620890113188e+01,
-      0.7205085037435e-07, 0.3624344170143e+01, 0.5296909721118e+00,
-      0.7697874654176e-07, 0.5554257458998e+01, 0.1676215758509e+03,
-
-      0.5197545738384e-07, 0.6251760961735e+01, 0.1807370494127e+02,
-      0.5031345378608e-07, 0.2497341091913e+01, 0.4705732307012e+01,
-      0.4527110205840e-07, 0.2335079920992e+01, 0.6309374173736e+01,
-      0.4753355798089e-07, 0.7094148987474e+00, 0.5884926831456e+01,
-      0.4296951977516e-07, 0.1101916352091e+01, 0.6681224869435e+01,
-      0.3855341568387e-07, 0.1825495405486e+01, 0.5486777812467e+01,
-      0.5253930970990e-07, 0.4424740687208e+01, 0.7860419393880e+01,
-      0.4024630496471e-07, 0.5120498157053e+01, 0.1336797263425e+02,
-      0.4061069791453e-07, 0.6029771435451e+01, 0.3930209696940e+01,
-      0.3797883804205e-07, 0.4435193600836e+00, 0.3154687086868e+01,
-
-      0.2933033225587e-07, 0.5124157356507e+01, 0.1059381944224e+01,
-      0.3503000930426e-07, 0.5421830162065e+01, 0.6069776770667e+01,
-      0.3670096214050e-07, 0.4582101667297e+01, 0.1219403291462e+02,
-      0.2905609437008e-07, 0.1926566420072e+01, 0.1097707878456e+02,
-      0.2466827821713e-07, 0.6090174539834e+00, 0.6496374930224e+01,
-      0.2691647295332e-07, 0.1393432595077e+01, 0.2200391463820e+02,
-      0.2150554667946e-07, 0.4308671715951e+01, 0.5643178611111e+01,
-      0.2237481922680e-07, 0.8133968269414e+00, 0.8635942003952e+01,
-      0.1817741038157e-07, 0.3755205127454e+01, 0.3340612434717e+01,
-      0.2227820762132e-07, 0.2759558596664e+01, 0.1203646072878e+02,
-
-      0.1944713772307e-07, 0.5699645869121e+01, 0.1179062909082e+02,
-      0.1527340520662e-07, 0.1986749091746e+01, 0.3981490189893e+00,
-      0.1577282574914e-07, 0.3205017217983e+01, 0.5088628793478e+01,
-      0.1424738825424e-07, 0.6256747903666e+01, 0.2544314396739e+01,
-      0.1616563121701e-07, 0.2601671259394e+00, 0.1729818233119e+02,
-      0.1401210391692e-07, 0.4686939173506e+01, 0.7058598460518e+01,
-      0.1488726974214e-07, 0.2815862451372e+01, 0.2593412433514e+02,
-      0.1692626442388e-07, 0.4956894109797e+01, 0.1564752902480e+03,
-      0.1123571582910e-07, 0.2381192697696e+01, 0.3738761453707e+01,
-      0.9903308606317e-08, 0.4294851657684e+01, 0.9225539266174e+01,
-
-      0.9174533187191e-08, 0.3075171510642e+01, 0.4164311961999e+01,
-      0.8645985631457e-08, 0.5477534821633e+00, 0.8429241228195e+01,
-     -0.1085876492688e-07, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.9264309077815e-08, 0.5968571670097e+01, 0.7079373888424e+01,
-      0.8243116984954e-08, 0.1489098777643e+01, 0.1044738781244e+02,
-      0.8268102113708e-08, 0.3512977691983e+01, 0.1150676975667e+02,
-      0.9043613988227e-08, 0.1290704408221e+00, 0.1101510648075e+02,
-      0.7432912038789e-08, 0.1991086893337e+01, 0.2608790314060e+02,
-      0.8586233727285e-08, 0.4238357924414e+01, 0.2986433403208e+02,
-      0.7612230060131e-08, 0.2911090150166e+01, 0.4732030630302e+01,
-
-      0.7097787751408e-08, 0.1908938392390e+01, 0.8031092209206e+01,
-      0.7640237040175e-08, 0.6129219000168e+00, 0.7962980379786e+00,
-      0.7070445688081e-08, 0.1380417036651e+01, 0.2146165377750e+01,
-      0.7690770957702e-08, 0.1680504249084e+01, 0.2122839202813e+02,
-      0.8051292542594e-08, 0.5127423484511e+01, 0.2942463415728e+01,
-      0.5902709104515e-08, 0.2020274190917e+01, 0.7755226100720e+00,
-      0.5134567496462e-08, 0.2606778676418e+01, 0.1256615170089e+02,
-      0.5525802046102e-08, 0.1613011769663e+01, 0.8018209333619e+00,
-      0.5880724784221e-08, 0.4604483417236e+01, 0.4690479774488e+01,
-      0.5211699081370e-08, 0.5718964114193e+01, 0.8827390247185e+01,
-
-      0.4891849573562e-08, 0.3689658932196e+01, 0.2132990797783e+00,
-      0.5150246069997e-08, 0.4099769855122e+01, 0.6480980550449e+02,
-      0.5102434319633e-08, 0.5660834602509e+01, 0.3379454372902e+02,
-      0.5083405254252e-08, 0.9842221218974e+00, 0.4136910472696e+01,
-      0.4206562585682e-08, 0.1341363634163e+00, 0.3128388763578e+01,
-      0.4663249683579e-08, 0.8130132735866e+00, 0.5216580451554e+01,
-      0.4099474416530e-08, 0.5791497770644e+01, 0.4265981595566e+00,
-      0.4628251220767e-08, 0.1249802769331e+01, 0.1572083878776e+02,
-      0.5024068728142e-08, 0.4795684802743e+01, 0.6290189305114e+01,
-      0.5120234327758e-08, 0.3810420387208e+01, 0.5230807360890e+01,
-
-      0.5524029815280e-08, 0.1029264714351e+01, 0.2397622045175e+03,
-      0.4757415718860e-08, 0.3528044781779e+01, 0.1649636139783e+02,
-      0.3915786131127e-08, 0.5593889282646e+01, 0.1589072916335e+01,
-      0.4869053149991e-08, 0.3299636454433e+01, 0.7632943190217e+01,
-      0.3649365703729e-08, 0.1286049002584e+01, 0.6206810014183e+01,
-      0.3992493949002e-08, 0.3100307589464e+01, 0.2515860172507e+02,
-      0.3320247477418e-08, 0.6212683940807e+01, 0.1216800268190e+02,
-      0.3287123739696e-08, 0.4699118445928e+01, 0.7234794171227e+01,
-      0.3472776811103e-08, 0.2630507142004e+01, 0.7342457794669e+01,
-      0.3423253294767e-08, 0.2946432844305e+01, 0.9623688285163e+01,
-
-      0.3896173898244e-08, 0.1224834179264e+01, 0.6438496133249e+01,
-      0.3388455337924e-08, 0.1543807616351e+01, 0.1494531617769e+02,
-      0.3062704716523e-08, 0.1191777572310e+01, 0.8662240327241e+01,
-      0.3270075600400e-08, 0.5483498767737e+01, 0.1194447056968e+01,
-      0.3101209215259e-08, 0.8000833804348e+00, 0.3772475342596e+02,
-      0.2780883347311e-08, 0.4077980721888e+00, 0.5863591145557e+01,
-      0.2903605931824e-08, 0.2617490302147e+01, 0.1965104848470e+02,
-      0.2682014743119e-08, 0.2634703158290e+01, 0.7238675589263e+01,
-      0.2534360108492e-08, 0.6102446114873e+01, 0.6836645152238e+01,
-      0.2392564882509e-08, 0.3681820208691e+01, 0.5849364236221e+01,
-
-      0.2656667254856e-08, 0.6216045388886e+01, 0.6133512519065e+01,
-      0.2331242096773e-08, 0.5864949777744e+01, 0.4535059491685e+01,
-      0.2287898363668e-08, 0.4566628532802e+01, 0.7477522907414e+01,
-      0.2336944521306e-08, 0.2442722126930e+01, 0.1137170464392e+02,
-      0.3156632236269e-08, 0.1626628050682e+01, 0.2509084901204e+03,
-      0.2982612402766e-08, 0.2803604512609e+01, 0.1748016358760e+01,
-      0.2774031674807e-08, 0.4654002897158e+01, 0.8223916695780e+02,
-      0.2295236548638e-08, 0.4326518333253e+01, 0.3378142627421e+00,
-      0.2190714699873e-08, 0.4519614578328e+01, 0.2908881142201e+02,
-      0.2191495845045e-08, 0.3012626912549e+01, 0.1673046366289e+02,
-
-      0.2492901628386e-08, 0.1290101424052e+00, 0.1543797956245e+03,
-      0.1993778064319e-08, 0.3864046799414e+01, 0.1778984560711e+02,
-      0.1898146479022e-08, 0.5053777235891e+01, 0.2042657109477e+02,
-      0.1918280127634e-08, 0.2222470192548e+01, 0.4165496312290e+02,
-      0.1916351061607e-08, 0.8719067257774e+00, 0.7737595720538e+02,
-      0.1834720181466e-08, 0.4031491098040e+01, 0.2358125818164e+02,
-      0.1249201523806e-08, 0.5938379466835e+01, 0.3301902111895e+02,
-      0.1477304050539e-08, 0.6544722606797e+00, 0.9548094718417e+02,
-      0.1264316431249e-08, 0.2059072853236e+01, 0.8399684731857e+02,
-      0.1203526495039e-08, 0.3644813532605e+01, 0.4558517281984e+02,
-
-      0.9221681059831e-09, 0.3241815055602e+01, 0.7805158573086e+02,
-      0.7849278367646e-09, 0.5043812342457e+01, 0.5217580628120e+02,
-      0.7983392077387e-09, 0.5000024502753e+01, 0.1501922143975e+03,
-      0.7925395431654e-09, 0.1398734871821e-01, 0.9061773743175e+02,
-      0.7640473285886e-09, 0.5067111723130e+01, 0.4951538251678e+02,
-      0.5398937754482e-09, 0.5597382200075e+01, 0.1613385000004e+03,
-      0.5626247550193e-09, 0.2601338209422e+01, 0.7318837597844e+02,
-      0.5525197197855e-09, 0.5814832109256e+01, 0.1432335100216e+03,
-      0.5407629837898e-09, 0.3384820609076e+01, 0.3230491187871e+03,
-      0.3856739119801e-09, 0.1072391840473e+01, 0.2334791286671e+03,
-
-      0.3856425239987e-09, 0.2369540393327e+01, 0.1739046517013e+03,
-      0.4350867755983e-09, 0.5255575751082e+01, 0.1620484330494e+03,
-      0.3844113924996e-09, 0.5482356246182e+01, 0.9757644180768e+02,
-      0.2854869155431e-09, 0.9573634763143e+00, 0.1697170704744e+03,
-      0.1719227671416e-09, 0.1887203025202e+01, 0.2265204242912e+03,
-      0.1527846879755e-09, 0.3982183931157e+01, 0.3341954043900e+03,
-      0.1128229264847e-09, 0.2787457156298e+01, 0.3119028331842e+03 };
-
-/* Sun-to-Earth, T^1, X */
-   static const double e1x[] = {
-      0.1234046326004e-05, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.5150068824701e-06, 0.6002664557501e+01, 0.1256615170089e+02,
-      0.1290743923245e-07, 0.5959437664199e+01, 0.1884922755134e+02,
-      0.1068615564952e-07, 0.2015529654209e+01, 0.6283075850446e+01,
-      0.2079619142538e-08, 0.1732960531432e+01, 0.6279552690824e+01,
-      0.2078009243969e-08, 0.4915604476996e+01, 0.6286599010068e+01,
-      0.6206330058856e-09, 0.3616457953824e+00, 0.4705732307012e+01,
-      0.5989335313746e-09, 0.3802607304474e+01, 0.6256777527156e+01,
-      0.5958495663840e-09, 0.2845866560031e+01, 0.6309374173736e+01,
-      0.4866923261539e-09, 0.5213203771824e+01, 0.7755226100720e+00,
-
-      0.4267785823142e-09, 0.4368189727818e+00, 0.1059381944224e+01,
-      0.4610675141648e-09, 0.1837249181372e-01, 0.7860419393880e+01,
-      0.3626989993973e-09, 0.2161590545326e+01, 0.5753384878334e+01,
-      0.3563071194389e-09, 0.1452631954746e+01, 0.5884926831456e+01,
-      0.3557015642807e-09, 0.4470593393054e+01, 0.6812766822558e+01,
-      0.3210412089122e-09, 0.5195926078314e+01, 0.6681224869435e+01,
-      0.2875473577986e-09, 0.5916256610193e+01, 0.2513230340178e+02,
-      0.2842913681629e-09, 0.1149902426047e+01, 0.6127655567643e+01,
-      0.2751248215916e-09, 0.5502088574662e+01, 0.6438496133249e+01,
-      0.2481432881127e-09, 0.2921989846637e+01, 0.5486777812467e+01,
-
-      0.2059885976560e-09, 0.3718070376585e+01, 0.7079373888424e+01,
-      0.2015522342591e-09, 0.5979395259740e+01, 0.6290189305114e+01,
-      0.1995364084253e-09, 0.6772087985494e+00, 0.6275962395778e+01,
-      0.1957436436943e-09, 0.2899210654665e+01, 0.5507553240374e+01,
-      0.1651609818948e-09, 0.6228206482192e+01, 0.1150676975667e+02,
-      0.1822980550699e-09, 0.1469348746179e+01, 0.1179062909082e+02,
-      0.1675223159760e-09, 0.3813910555688e+01, 0.7058598460518e+01,
-      0.1706491764745e-09, 0.3004380506684e+00, 0.7113454667900e-02,
-      0.1392952362615e-09, 0.1440393973406e+01, 0.7962980379786e+00,
-      0.1209868266342e-09, 0.4150425791727e+01, 0.4694002934110e+01,
-
-      0.1009827202611e-09, 0.3290040429843e+01, 0.3738761453707e+01,
-      0.1047261388602e-09, 0.4229590090227e+01, 0.6282095334605e+01,
-      0.1047006652004e-09, 0.2418967680575e+01, 0.6284056366286e+01,
-      0.9609993143095e-10, 0.4627943659201e+01, 0.6069776770667e+01,
-      0.9590900593873e-10, 0.1894393939924e+01, 0.4136910472696e+01,
-      0.9146249188071e-10, 0.2010647519562e+01, 0.6496374930224e+01,
-      0.8545274480290e-10, 0.5529846956226e-01, 0.1194447056968e+01,
-      0.8224377881194e-10, 0.1254304102174e+01, 0.1589072916335e+01,
-      0.6183529510410e-10, 0.3360862168815e+01, 0.8827390247185e+01,
-      0.6259255147141e-10, 0.4755628243179e+01, 0.8429241228195e+01,
-
-      0.5539291694151e-10, 0.5371746955142e+01, 0.4933208510675e+01,
-      0.7328259466314e-10, 0.4927699613906e+00, 0.4535059491685e+01,
-      0.6017835843560e-10, 0.5776682001734e-01, 0.1255903824622e+02,
-      0.7079827775243e-10, 0.4395059432251e+01, 0.5088628793478e+01,
-      0.5170358878213e-10, 0.5154062619954e+01, 0.1176985366291e+02,
-      0.4872301838682e-10, 0.6289611648973e+00, 0.6040347114260e+01,
-      0.5249869411058e-10, 0.5617272046949e+01, 0.3154687086868e+01,
-      0.4716172354411e-10, 0.3965901800877e+01, 0.5331357529664e+01,
-      0.4871214940964e-10, 0.4627507050093e+01, 0.1256967486051e+02,
-      0.4598076850751e-10, 0.6023631226459e+01, 0.6525804586632e+01,
-
-      0.4562196089485e-10, 0.4138562084068e+01, 0.3930209696940e+01,
-      0.4325493872224e-10, 0.1330845906564e+01, 0.7632943190217e+01,
-      0.5673781176748e-10, 0.2558752615657e+01, 0.5729506548653e+01,
-      0.3961436642503e-10, 0.2728071734630e+01, 0.7234794171227e+01,
-      0.5101868209058e-10, 0.4113444965144e+01, 0.6836645152238e+01,
-      0.5257043167676e-10, 0.6195089830590e+01, 0.8031092209206e+01,
-      0.5076613989393e-10, 0.2305124132918e+01, 0.7477522907414e+01,
-      0.3342169352778e-10, 0.5415998155071e+01, 0.1097707878456e+02,
-      0.3545881983591e-10, 0.3727160564574e+01, 0.4164311961999e+01,
-      0.3364063738599e-10, 0.2901121049204e+00, 0.1137170464392e+02,
-
-      0.3357039670776e-10, 0.1652229354331e+01, 0.5223693906222e+01,
-      0.4307412268687e-10, 0.4938909587445e+01, 0.1592596075957e+01,
-      0.3405769115435e-10, 0.2408890766511e+01, 0.3128388763578e+01,
-      0.3001926198480e-10, 0.4862239006386e+01, 0.1748016358760e+01,
-      0.2778264787325e-10, 0.5241168661353e+01, 0.7342457794669e+01,
-      0.2676159480666e-10, 0.3423593942199e+01, 0.2146165377750e+01,
-      0.2954273399939e-10, 0.1881721265406e+01, 0.5368044267797e+00,
-      0.3309362888795e-10, 0.1931525677349e+01, 0.8018209333619e+00,
-      0.2810283608438e-10, 0.2414659495050e+01, 0.5225775174439e+00,
-      0.3378045637764e-10, 0.4238019163430e+01, 0.1554202828031e+00,
-
-      0.2558134979840e-10, 0.1828225235805e+01, 0.5230807360890e+01,
-      0.2273755578447e-10, 0.5858184283998e+01, 0.7084896783808e+01,
-      0.2294176037690e-10, 0.4514589779057e+01, 0.1726015463500e+02,
-      0.2533506099435e-10, 0.2355717851551e+01, 0.5216580451554e+01,
-      0.2716685375812e-10, 0.2221003625100e+01, 0.8635942003952e+01,
-      0.2419043435198e-10, 0.5955704951635e+01, 0.4690479774488e+01,
-      0.2521232544812e-10, 0.1395676848521e+01, 0.5481254917084e+01,
-      0.2630195021491e-10, 0.5727468918743e+01, 0.2629832328990e-01,
-      0.2548395840944e-10, 0.2628351859400e-03, 0.1349867339771e+01 };
-
-/* Sun-to-Earth, T^1, Y */
-   static const double e1y[] = {
-      0.9304690546528e-06, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.5150715570663e-06, 0.4431807116294e+01, 0.1256615170089e+02,
-      0.1290825411056e-07, 0.4388610039678e+01, 0.1884922755134e+02,
-      0.4645466665386e-08, 0.5827263376034e+01, 0.6283075850446e+01,
-      0.2079625310718e-08, 0.1621698662282e+00, 0.6279552690824e+01,
-      0.2078189850907e-08, 0.3344713435140e+01, 0.6286599010068e+01,
-      0.6207190138027e-09, 0.5074049319576e+01, 0.4705732307012e+01,
-      0.5989826532569e-09, 0.2231842216620e+01, 0.6256777527156e+01,
-      0.5961360812618e-09, 0.1274975769045e+01, 0.6309374173736e+01,
-      0.4874165471016e-09, 0.3642277426779e+01, 0.7755226100720e+00,
-
-      0.4283834034360e-09, 0.5148765510106e+01, 0.1059381944224e+01,
-      0.4652389287529e-09, 0.4715794792175e+01, 0.7860419393880e+01,
-      0.3751707476401e-09, 0.6617207370325e+00, 0.5753384878334e+01,
-      0.3559998806198e-09, 0.6155548875404e+01, 0.5884926831456e+01,
-      0.3558447558857e-09, 0.2898827297664e+01, 0.6812766822558e+01,
-      0.3211116927106e-09, 0.3625813502509e+01, 0.6681224869435e+01,
-      0.2875609914672e-09, 0.4345435813134e+01, 0.2513230340178e+02,
-      0.2843109704069e-09, 0.5862263940038e+01, 0.6127655567643e+01,
-      0.2744676468427e-09, 0.3926419475089e+01, 0.6438496133249e+01,
-      0.2481285237789e-09, 0.1351976572828e+01, 0.5486777812467e+01,
-
-      0.2060338481033e-09, 0.2147556998591e+01, 0.7079373888424e+01,
-      0.2015822358331e-09, 0.4408358972216e+01, 0.6290189305114e+01,
-      0.2001195944195e-09, 0.5385829822531e+01, 0.6275962395778e+01,
-      0.1953667642377e-09, 0.1304933746120e+01, 0.5507553240374e+01,
-      0.1839744078713e-09, 0.6173567228835e+01, 0.1179062909082e+02,
-      0.1643334294845e-09, 0.4635942997523e+01, 0.1150676975667e+02,
-      0.1768051018652e-09, 0.5086283558874e+01, 0.7113454667900e-02,
-      0.1674874205489e-09, 0.2243332137241e+01, 0.7058598460518e+01,
-      0.1421445397609e-09, 0.6186899771515e+01, 0.7962980379786e+00,
-      0.1255163958267e-09, 0.5730238465658e+01, 0.4694002934110e+01,
-
-      0.1013945281961e-09, 0.1726055228402e+01, 0.3738761453707e+01,
-      0.1047294335852e-09, 0.2658801228129e+01, 0.6282095334605e+01,
-      0.1047103879392e-09, 0.8481047835035e+00, 0.6284056366286e+01,
-      0.9530343962826e-10, 0.3079267149859e+01, 0.6069776770667e+01,
-      0.9604637611690e-10, 0.3258679792918e+00, 0.4136910472696e+01,
-      0.9153518537177e-10, 0.4398599886584e+00, 0.6496374930224e+01,
-      0.8562458214922e-10, 0.4772686794145e+01, 0.1194447056968e+01,
-      0.8232525360654e-10, 0.5966220721679e+01, 0.1589072916335e+01,
-      0.6150223411438e-10, 0.1780985591923e+01, 0.8827390247185e+01,
-      0.6272087858000e-10, 0.3184305429012e+01, 0.8429241228195e+01,
-
-      0.5540476311040e-10, 0.3801260595433e+01, 0.4933208510675e+01,
-      0.7331901699361e-10, 0.5205948591865e+01, 0.4535059491685e+01,
-      0.6018528702791e-10, 0.4770139083623e+01, 0.1255903824622e+02,
-      0.5150530724804e-10, 0.3574796899585e+01, 0.1176985366291e+02,
-      0.6471933741811e-10, 0.2679787266521e+01, 0.5088628793478e+01,
-      0.5317460644174e-10, 0.9528763345494e+00, 0.3154687086868e+01,
-      0.4832187748783e-10, 0.5329322498232e+01, 0.6040347114260e+01,
-      0.4716763555110e-10, 0.2395235316466e+01, 0.5331357529664e+01,
-      0.4871509139861e-10, 0.3056663648823e+01, 0.1256967486051e+02,
-      0.4598417696768e-10, 0.4452762609019e+01, 0.6525804586632e+01,
-
-      0.5674189533175e-10, 0.9879680872193e+00, 0.5729506548653e+01,
-      0.4073560328195e-10, 0.5939127696986e+01, 0.7632943190217e+01,
-      0.5040994945359e-10, 0.4549875824510e+01, 0.8031092209206e+01,
-      0.5078185134679e-10, 0.7346659893982e+00, 0.7477522907414e+01,
-      0.3769343537061e-10, 0.1071317188367e+01, 0.7234794171227e+01,
-      0.4980331365299e-10, 0.2500345341784e+01, 0.6836645152238e+01,
-      0.3458236594757e-10, 0.3825159450711e+01, 0.1097707878456e+02,
-      0.3578859493602e-10, 0.5299664791549e+01, 0.4164311961999e+01,
-      0.3370504646419e-10, 0.5002316301593e+01, 0.1137170464392e+02,
-      0.3299873338428e-10, 0.2526123275282e+01, 0.3930209696940e+01,
-
-      0.4304917318409e-10, 0.3368078557132e+01, 0.1592596075957e+01,
-      0.3402418753455e-10, 0.8385495425800e+00, 0.3128388763578e+01,
-      0.2778460572146e-10, 0.3669905203240e+01, 0.7342457794669e+01,
-      0.2782710128902e-10, 0.2691664812170e+00, 0.1748016358760e+01,
-      0.2711725179646e-10, 0.4707487217718e+01, 0.5296909721118e+00,
-      0.2981760946340e-10, 0.3190260867816e+00, 0.5368044267797e+00,
-      0.2811672977772e-10, 0.3196532315372e+01, 0.7084896783808e+01,
-      0.2863454474467e-10, 0.2263240324780e+00, 0.5223693906222e+01,
-      0.3333464634051e-10, 0.3498451685065e+01, 0.8018209333619e+00,
-      0.3312991747609e-10, 0.5839154477412e+01, 0.1554202828031e+00,
-
-      0.2813255564006e-10, 0.8268044346621e+00, 0.5225775174439e+00,
-      0.2665098083966e-10, 0.3934021725360e+01, 0.5216580451554e+01,
-      0.2349795705216e-10, 0.5197620913779e+01, 0.2146165377750e+01,
-      0.2330352293961e-10, 0.2984999231807e+01, 0.1726015463500e+02,
-      0.2728001683419e-10, 0.6521679638544e+00, 0.8635942003952e+01,
-      0.2484061007669e-10, 0.3468955561097e+01, 0.5230807360890e+01,
-      0.2646328768427e-10, 0.1013724533516e+01, 0.2629832328990e-01,
-      0.2518630264831e-10, 0.6108081057122e+01, 0.5481254917084e+01,
-      0.2421901455384e-10, 0.1651097776260e+01, 0.1349867339771e+01,
-      0.6348533267831e-11, 0.3220226560321e+01, 0.8433466158131e+02 };
-
-/* Sun-to-Earth, T^1, Z */
-   static const double e1z[] = {
-      0.2278290449966e-05, 0.3413716033863e+01, 0.6283075850446e+01,
-      0.5429458209830e-07, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.1903240492525e-07, 0.3370592358297e+01, 0.1256615170089e+02,
-      0.2385409276743e-09, 0.3327914718416e+01, 0.1884922755134e+02,
-      0.8676928342573e-10, 0.1824006811264e+01, 0.5223693906222e+01,
-      0.7765442593544e-10, 0.3888564279247e+01, 0.5507553240374e+01,
-      0.7066158332715e-10, 0.5194267231944e+01, 0.2352866153506e+01,
-      0.7092175288657e-10, 0.2333246960021e+01, 0.8399684731857e+02,
-      0.5357582213535e-10, 0.2224031176619e+01, 0.5296909721118e+00,
-      0.3828035865021e-10, 0.2156710933584e+01, 0.6279552690824e+01,
-
-      0.3824857220427e-10, 0.1529755219915e+01, 0.6286599010068e+01,
-      0.3286995181628e-10, 0.4879512900483e+01, 0.1021328554739e+02 };
-
-/* Sun-to-Earth, T^2, X */
-   static const double e2x[] = {
-     -0.4143818297913e-10, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.2171497694435e-10, 0.4398225628264e+01, 0.1256615170089e+02,
-      0.9845398442516e-11, 0.2079720838384e+00, 0.6283075850446e+01,
-      0.9256833552682e-12, 0.4191264694361e+01, 0.1884922755134e+02,
-      0.1022049384115e-12, 0.5381133195658e+01, 0.8399684731857e+02 };
-
-/* Sun-to-Earth, T^2, Y */
-   static const double e2y[] = {
-      0.5063375872532e-10, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.2173815785980e-10, 0.2827805833053e+01, 0.1256615170089e+02,
-      0.1010231999920e-10, 0.4634612377133e+01, 0.6283075850446e+01,
-      0.9259745317636e-12, 0.2620612076189e+01, 0.1884922755134e+02,
-      0.1022202095812e-12, 0.3809562326066e+01, 0.8399684731857e+02 };
-
-/* Sun-to-Earth, T^2, Z */
-   static const double e2z[] = {
-      0.9722666114891e-10, 0.5152219582658e+01, 0.6283075850446e+01,
-     -0.3494819171909e-11, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.6713034376076e-12, 0.6440188750495e+00, 0.1256615170089e+02 };
-
-/* SSB-to-Sun, T^0, X */
-   static const double s0x[] = {
-      0.4956757536410e-02, 0.3741073751789e+01, 0.5296909721118e+00,
-      0.2718490072522e-02, 0.4016011511425e+01, 0.2132990797783e+00,
-      0.1546493974344e-02, 0.2170528330642e+01, 0.3813291813120e-01,
-      0.8366855276341e-03, 0.2339614075294e+01, 0.7478166569050e-01,
-      0.2936777942117e-03, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.1201317439469e-03, 0.4090736353305e+01, 0.1059381944224e+01,
-      0.7578550887230e-04, 0.3241518088140e+01, 0.4265981595566e+00,
-      0.1941787367773e-04, 0.1012202064330e+01, 0.2061856251104e+00,
-      0.1889227765991e-04, 0.3892520416440e+01, 0.2204125344462e+00,
-      0.1937896968613e-04, 0.4797779441161e+01, 0.1495633313810e+00,
-
-      0.1434506110873e-04, 0.3868960697933e+01, 0.5225775174439e+00,
-      0.1406659911580e-04, 0.4759766557397e+00, 0.5368044267797e+00,
-      0.1179022300202e-04, 0.7774961520598e+00, 0.7626583626240e-01,
-      0.8085864460959e-05, 0.3254654471465e+01, 0.3664874755930e-01,
-      0.7622752967615e-05, 0.4227633103489e+01, 0.3961708870310e-01,
-      0.6209171139066e-05, 0.2791828325711e+00, 0.7329749511860e-01,
-      0.4366435633970e-05, 0.4440454875925e+01, 0.1589072916335e+01,
-      0.3792124889348e-05, 0.5156393842356e+01, 0.7113454667900e-02,
-      0.3154548963402e-05, 0.6157005730093e+01, 0.4194847048887e+00,
-      0.3088359882942e-05, 0.2494567553163e+01, 0.6398972393349e+00,
-
-      0.2788440902136e-05, 0.4934318747989e+01, 0.1102062672231e+00,
-      0.3039928456376e-05, 0.4895077702640e+01, 0.6283075850446e+01,
-      0.2272258457679e-05, 0.5278394064764e+01, 0.1030928125552e+00,
-      0.2162007057957e-05, 0.5802978019099e+01, 0.3163918923335e+00,
-      0.1767632855737e-05, 0.3415346595193e-01, 0.1021328554739e+02,
-      0.1349413459362e-05, 0.2001643230755e+01, 0.1484170571900e-02,
-      0.1170141900476e-05, 0.2424750491620e+01, 0.6327837846670e+00,
-      0.1054355266820e-05, 0.3123311487576e+01, 0.4337116142245e+00,
-      0.9800822461610e-06, 0.3026258088130e+01, 0.1052268489556e+01,
-      0.1091203749931e-05, 0.3157811670347e+01, 0.1162474756779e+01,
-
-      0.6960236715913e-06, 0.8219570542313e+00, 0.1066495398892e+01,
-      0.5689257296909e-06, 0.1323052375236e+01, 0.9491756770005e+00,
-      0.6613172135802e-06, 0.2765348881598e+00, 0.8460828644453e+00,
-      0.6277702517571e-06, 0.5794064466382e+01, 0.1480791608091e+00,
-      0.6304884066699e-06, 0.7323555380787e+00, 0.2243449970715e+00,
-      0.4897850467382e-06, 0.3062464235399e+01, 0.3340612434717e+01,
-      0.3759148598786e-06, 0.4588290469664e+01, 0.3516457698740e-01,
-      0.3110520548195e-06, 0.1374299536572e+01, 0.6373574839730e-01,
-      0.3064708359780e-06, 0.4222267485047e+01, 0.1104591729320e-01,
-      0.2856347168241e-06, 0.3714202944973e+01, 0.1510475019529e+00,
-
-      0.2840945514288e-06, 0.2847972875882e+01, 0.4110125927500e-01,
-      0.2378951599405e-06, 0.3762072563388e+01, 0.2275259891141e+00,
-      0.2714229481417e-06, 0.1036049980031e+01, 0.2535050500000e-01,
-      0.2323551717307e-06, 0.4682388599076e+00, 0.8582758298370e-01,
-      0.1881790512219e-06, 0.4790565425418e+01, 0.2118763888447e+01,
-      0.2261353968371e-06, 0.1669144912212e+01, 0.7181332454670e-01,
-      0.2214546389848e-06, 0.3937717281614e+01, 0.2968341143800e-02,
-      0.2184915594933e-06, 0.1129169845099e+00, 0.7775000683430e-01,
-      0.2000164937936e-06, 0.4030009638488e+01, 0.2093666171530e+00,
-      0.1966105136719e-06, 0.8745955786834e+00, 0.2172315424036e+00,
-
-      0.1904742332624e-06, 0.5919743598964e+01, 0.2022531624851e+00,
-      0.1657399705031e-06, 0.2549141484884e+01, 0.7358765972222e+00,
-      0.1574070533987e-06, 0.5277533020230e+01, 0.7429900518901e+00,
-      0.1832261651039e-06, 0.3064688127777e+01, 0.3235053470014e+00,
-      0.1733615346569e-06, 0.3011432799094e+01, 0.1385174140878e+00,
-      0.1549124014496e-06, 0.4005569132359e+01, 0.5154640627760e+00,
-      0.1637044713838e-06, 0.1831375966632e+01, 0.8531963191132e+00,
-      0.1123420082383e-06, 0.1180270407578e+01, 0.1990721704425e+00,
-      0.1083754165740e-06, 0.3414101320863e+00, 0.5439178814476e+00,
-      0.1156638012655e-06, 0.6130479452594e+00, 0.5257585094865e+00,
-
-      0.1142548785134e-06, 0.3724761948846e+01, 0.5336234347371e+00,
-      0.7921463895965e-07, 0.2435425589361e+01, 0.1478866649112e+01,
-      0.7428600285231e-07, 0.3542144398753e+01, 0.2164800718209e+00,
-      0.8323211246747e-07, 0.3525058072354e+01, 0.1692165728891e+01,
-      0.7257595116312e-07, 0.1364299431982e+01, 0.2101180877357e+00,
-      0.7111185833236e-07, 0.2460478875808e+01, 0.4155522422634e+00,
-      0.6868090383716e-07, 0.4397327670704e+01, 0.1173197218910e+00,
-      0.7226419974175e-07, 0.4042647308905e+01, 0.1265567569334e+01,
-      0.6955642383177e-07, 0.2865047906085e+01, 0.9562891316684e+00,
-      0.7492139296331e-07, 0.5014278994215e+01, 0.1422690933580e-01,
-
-      0.6598363128857e-07, 0.2376730020492e+01, 0.6470106940028e+00,
-      0.7381147293385e-07, 0.3272990384244e+01, 0.1581959461667e+01,
-      0.6402909624032e-07, 0.5302290955138e+01, 0.9597935788730e-01,
-      0.6237454263857e-07, 0.5444144425332e+01, 0.7084920306520e-01,
-      0.5241198544016e-07, 0.4215359579205e+01, 0.5265099800692e+00,
-      0.5144463853918e-07, 0.1218916689916e+00, 0.5328719641544e+00,
-      0.5868164772299e-07, 0.2369402002213e+01, 0.7871412831580e-01,
-      0.6233195669151e-07, 0.1254922242403e+01, 0.2608790314060e+02,
-      0.6068463791422e-07, 0.5679713760431e+01, 0.1114304132498e+00,
-      0.4359361135065e-07, 0.6097219641646e+00, 0.1375773836557e+01,
-
-      0.4686510366826e-07, 0.4786231041431e+01, 0.1143987543936e+00,
-      0.3758977287225e-07, 0.1167368068139e+01, 0.1596186371003e+01,
-      0.4282051974778e-07, 0.1519471064319e+01, 0.2770348281756e+00,
-      0.5153765386113e-07, 0.1860532322984e+01, 0.2228608264996e+00,
-      0.4575129387188e-07, 0.7632857887158e+00, 0.1465949902372e+00,
-      0.3326844933286e-07, 0.1298219485285e+01, 0.5070101000000e-01,
-      0.3748617450984e-07, 0.1046510321062e+01, 0.4903339079539e+00,
-      0.2816756661499e-07, 0.3434522346190e+01, 0.2991266627620e+00,
-      0.3412750405039e-07, 0.2523766270318e+01, 0.3518164938661e+00,
-      0.2655796761776e-07, 0.2904422260194e+01, 0.6256703299991e+00,
-
-      0.2963597929458e-07, 0.5923900431149e+00, 0.1099462426779e+00,
-      0.2539523734781e-07, 0.4851947722567e+01, 0.1256615170089e+02,
-      0.2283087914139e-07, 0.3400498595496e+01, 0.6681224869435e+01,
-      0.2321309799331e-07, 0.5789099148673e+01, 0.3368040641550e-01,
-      0.2549657649750e-07, 0.3991856479792e-01, 0.1169588211447e+01,
-      0.2290462303977e-07, 0.2788567577052e+01, 0.1045155034888e+01,
-      0.1945398522914e-07, 0.3290896998176e+01, 0.1155361302111e+01,
-      0.1849171512638e-07, 0.2698060129367e+01, 0.4452511715700e-02,
-      0.1647199834254e-07, 0.3016735644085e+01, 0.4408250688924e+00,
-      0.1529530765273e-07, 0.5573043116178e+01, 0.6521991896920e-01,
-
-      0.1433199339978e-07, 0.1481192356147e+01, 0.9420622223326e+00,
-      0.1729134193602e-07, 0.1422817538933e+01, 0.2108507877249e+00,
-      0.1716463931346e-07, 0.3469468901855e+01, 0.2157473718317e+00,
-      0.1391206061378e-07, 0.6122436220547e+01, 0.4123712502208e+00,
-      0.1404746661924e-07, 0.1647765641936e+01, 0.4258542984690e-01,
-      0.1410452399455e-07, 0.5989729161964e+01, 0.2258291676434e+00,
-      0.1089828772168e-07, 0.2833705509371e+01, 0.4226656969313e+00,
-      0.1047374564948e-07, 0.5090690007331e+00, 0.3092784376656e+00,
-      0.1358279126532e-07, 0.5128990262836e+01, 0.7923417740620e-01,
-      0.1020456476148e-07, 0.9632772880808e+00, 0.1456308687557e+00,
-
-      0.1033428735328e-07, 0.3223779318418e+01, 0.1795258541446e+01,
-      0.1412435841540e-07, 0.2410271572721e+01, 0.1525316725248e+00,
-      0.9722759371574e-08, 0.2333531395690e+01, 0.8434341241180e-01,
-      0.9657334084704e-08, 0.6199270974168e+01, 0.1272681024002e+01,
-      0.1083641148690e-07, 0.2864222292929e+01, 0.7032915397480e-01,
-      0.1067318403838e-07, 0.5833458866568e+00, 0.2123349582968e+00,
-      0.1062366201976e-07, 0.4307753989494e+01, 0.2142632012598e+00,
-      0.1236364149266e-07, 0.2873917870593e+01, 0.1847279083684e+00,
-      0.1092759489593e-07, 0.2959887266733e+01, 0.1370332435159e+00,
-      0.8912069362899e-08, 0.5141213702562e+01, 0.2648454860559e+01,
-
-      0.9656467707970e-08, 0.4532182462323e+01, 0.4376440768498e+00,
-      0.8098386150135e-08, 0.2268906338379e+01, 0.2880807454688e+00,
-      0.7857714675000e-08, 0.4055544260745e+01, 0.2037373330570e+00,
-      0.7288455940646e-08, 0.5357901655142e+01, 0.1129145838217e+00,
-      0.9450595950552e-08, 0.4264926963939e+01, 0.5272426800584e+00,
-      0.9381718247537e-08, 0.7489366976576e-01, 0.5321392641652e+00,
-      0.7079052646038e-08, 0.1923311052874e+01, 0.6288513220417e+00,
-      0.9259004415344e-08, 0.2970256853438e+01, 0.1606092486742e+00,
-      0.8259801499742e-08, 0.3327056314697e+01, 0.8389694097774e+00,
-      0.6476334355779e-08, 0.2954925505727e+01, 0.2008557621224e+01,
-
-      0.5984021492007e-08, 0.9138753105829e+00, 0.2042657109477e+02,
-      0.5989546863181e-08, 0.3244464082031e+01, 0.2111650433779e+01,
-      0.6233108606023e-08, 0.4995232638403e+00, 0.4305306221819e+00,
-      0.6877299149965e-08, 0.2834987233449e+01, 0.9561746721300e-02,
-      0.8311234227190e-08, 0.2202951835758e+01, 0.3801276407308e+00,
-      0.6599472832414e-08, 0.4478581462618e+01, 0.1063314406849e+01,
-      0.6160491096549e-08, 0.5145858696411e+01, 0.1368660381889e+01,
-      0.6164772043891e-08, 0.3762976697911e+00, 0.4234171675140e+00,
-      0.6363248684450e-08, 0.3162246718685e+01, 0.1253008786510e-01,
-      0.6448587520999e-08, 0.3442693302119e+01, 0.5287268506303e+00,
-
-      0.6431662283977e-08, 0.8977549136606e+00, 0.5306550935933e+00,
-      0.6351223158474e-08, 0.4306447410369e+01, 0.5217580628120e+02,
-      0.5476721393451e-08, 0.3888529177855e+01, 0.2221856701002e+01,
-      0.5341772572619e-08, 0.2655560662512e+01, 0.7466759693650e-01,
-      0.5337055758302e-08, 0.5164990735946e+01, 0.7489573444450e-01,
-      0.5373120816787e-08, 0.6041214553456e+01, 0.1274714967946e+00,
-      0.5392351705426e-08, 0.9177763485932e+00, 0.1055449481598e+01,
-      0.6688495850205e-08, 0.3089608126937e+01, 0.2213766559277e+00,
-      0.5072003660362e-08, 0.4311316541553e+01, 0.2132517061319e+00,
-      0.5070726650455e-08, 0.5790675464444e+00, 0.2133464534247e+00,
-
-      0.5658012950032e-08, 0.2703945510675e+01, 0.7287631425543e+00,
-      0.4835509924854e-08, 0.2975422976065e+01, 0.7160067364790e-01,
-      0.6479821978012e-08, 0.1324168733114e+01, 0.2209183458640e-01,
-      0.6230636494980e-08, 0.2860103632836e+01, 0.3306188016693e+00,
-      0.4649239516213e-08, 0.4832259763403e+01, 0.7796265773310e-01,
-      0.6487325792700e-08, 0.2726165825042e+01, 0.3884652414254e+00,
-      0.4682823682770e-08, 0.6966602455408e+00, 0.1073608853559e+01,
-      0.5704230804976e-08, 0.5669634104606e+01, 0.8731175355560e-01,
-      0.6125413585489e-08, 0.1513386538915e+01, 0.7605151500000e-01,
-      0.6035825038187e-08, 0.1983509168227e+01, 0.9846002785331e+00,
-
-      0.4331123462303e-08, 0.2782892992807e+01, 0.4297791515992e+00,
-      0.4681107685143e-08, 0.5337232886836e+01, 0.2127790306879e+00,
-      0.4669105829655e-08, 0.5837133792160e+01, 0.2138191288687e+00,
-      0.5138823602365e-08, 0.3080560200507e+01, 0.7233337363710e-01,
-      0.4615856664534e-08, 0.1661747897471e+01, 0.8603097737811e+00,
-      0.4496916702197e-08, 0.2112508027068e+01, 0.7381754420900e-01,
-      0.4278479042945e-08, 0.5716528462627e+01, 0.7574578717200e-01,
-      0.3840525503932e-08, 0.6424172726492e+00, 0.3407705765729e+00,
-      0.4866636509685e-08, 0.4919244697715e+01, 0.7722995774390e-01,
-      0.3526100639296e-08, 0.2550821052734e+01, 0.6225157782540e-01,
-
-      0.3939558488075e-08, 0.3939331491710e+01, 0.5268983110410e-01,
-      0.4041268772576e-08, 0.2275337571218e+01, 0.3503323232942e+00,
-      0.3948761842853e-08, 0.1999324200790e+01, 0.1451108196653e+00,
-      0.3258394550029e-08, 0.9121001378200e+00, 0.5296435984654e+00,
-      0.3257897048761e-08, 0.3428428660869e+01, 0.5297383457582e+00,
-      0.3842559031298e-08, 0.6132927720035e+01, 0.9098186128426e+00,
-      0.3109920095448e-08, 0.7693650193003e+00, 0.3932462625300e-02,
-      0.3132237775119e-08, 0.3621293854908e+01, 0.2346394437820e+00,
-      0.3942189421510e-08, 0.4841863659733e+01, 0.3180992042600e-02,
-      0.3796972285340e-08, 0.1814174994268e+01, 0.1862120789403e+00,
-
-      0.3995640233688e-08, 0.1386990406091e+01, 0.4549093064213e+00,
-      0.2875013727414e-08, 0.9178318587177e+00, 0.1905464808669e+01,
-      0.3073719932844e-08, 0.2688923811835e+01, 0.3628624111593e+00,
-      0.2731016580075e-08, 0.1188259127584e+01, 0.2131850110243e+00,
-      0.2729549896546e-08, 0.3702160634273e+01, 0.2134131485323e+00,
-      0.3339372892449e-08, 0.7199163960331e+00, 0.2007689919132e+00,
-      0.2898833764204e-08, 0.1916709364999e+01, 0.5291709230214e+00,
-      0.2894536549362e-08, 0.2424043195547e+01, 0.5302110212022e+00,
-      0.3096872473843e-08, 0.4445894977497e+01, 0.2976424921901e+00,
-      0.2635672326810e-08, 0.3814366984117e+01, 0.1485980103780e+01,
-
-      0.3649302697001e-08, 0.2924200596084e+01, 0.6044726378023e+00,
-      0.3127954585895e-08, 0.1842251648327e+01, 0.1084620721060e+00,
-      0.2616040173947e-08, 0.4155841921984e+01, 0.1258454114666e+01,
-      0.2597395859860e-08, 0.1158045978874e+00, 0.2103781122809e+00,
-      0.2593286172210e-08, 0.4771850408691e+01, 0.2162200472757e+00,
-      0.2481823585747e-08, 0.4608842558889e+00, 0.1062562936266e+01,
-      0.2742219550725e-08, 0.1538781127028e+01, 0.5651155736444e+00,
-      0.3199558469610e-08, 0.3226647822878e+00, 0.7036329877322e+00,
-      0.2666088542957e-08, 0.1967991731219e+00, 0.1400015846597e+00,
-      0.2397067430580e-08, 0.3707036669873e+01, 0.2125476091956e+00,
-
-      0.2376570772738e-08, 0.1182086628042e+01, 0.2140505503610e+00,
-      0.2547228007887e-08, 0.4906256820629e+01, 0.1534957940063e+00,
-      0.2265575594114e-08, 0.3414949866857e+01, 0.2235935264888e+00,
-      0.2464381430585e-08, 0.4599122275378e+01, 0.2091065926078e+00,
-      0.2433408527044e-08, 0.2830751145445e+00, 0.2174915669488e+00,
-      0.2443605509076e-08, 0.4212046432538e+01, 0.1739420156204e+00,
-      0.2319779262465e-08, 0.9881978408630e+00, 0.7530171478090e-01,
-      0.2284622835465e-08, 0.5565347331588e+00, 0.7426161660010e-01,
-      0.2467268750783e-08, 0.5655708150766e+00, 0.2526561439362e+00,
-      0.2808513492782e-08, 0.1418405053408e+01, 0.5636314030725e+00,
-
-      0.2329528932532e-08, 0.4069557545675e+01, 0.1056200952181e+01,
-      0.9698639532817e-09, 0.1074134313634e+01, 0.7826370942180e+02 };
-
-/* SSB-to-Sun, T^0, Y */
-   static const double s0y[] = {
-      0.4955392320126e-02, 0.2170467313679e+01, 0.5296909721118e+00,
-      0.2722325167392e-02, 0.2444433682196e+01, 0.2132990797783e+00,
-      0.1546579925346e-02, 0.5992779281546e+00, 0.3813291813120e-01,
-      0.8363140252966e-03, 0.7687356310801e+00, 0.7478166569050e-01,
-      0.3385792683603e-03, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.1201192221613e-03, 0.2520035601514e+01, 0.1059381944224e+01,
-      0.7587125720554e-04, 0.1669954006449e+01, 0.4265981595566e+00,
-      0.1964155361250e-04, 0.5707743963343e+01, 0.2061856251104e+00,
-      0.1891900364909e-04, 0.2320960679937e+01, 0.2204125344462e+00,
-      0.1937373433356e-04, 0.3226940689555e+01, 0.1495633313810e+00,
-
-      0.1437139941351e-04, 0.2301626908096e+01, 0.5225775174439e+00,
-      0.1406267683099e-04, 0.5188579265542e+01, 0.5368044267797e+00,
-      0.1178703080346e-04, 0.5489483248476e+01, 0.7626583626240e-01,
-      0.8079835186041e-05, 0.1683751835264e+01, 0.3664874755930e-01,
-      0.7623253594652e-05, 0.2656400462961e+01, 0.3961708870310e-01,
-      0.6248667483971e-05, 0.4992775362055e+01, 0.7329749511860e-01,
-      0.4366353695038e-05, 0.2869706279678e+01, 0.1589072916335e+01,
-      0.3829101568895e-05, 0.3572131359950e+01, 0.7113454667900e-02,
-      0.3175733773908e-05, 0.4535372530045e+01, 0.4194847048887e+00,
-      0.3092437902159e-05, 0.9230153317909e+00, 0.6398972393349e+00,
-
-      0.2874168812154e-05, 0.3363143761101e+01, 0.1102062672231e+00,
-      0.3040119321826e-05, 0.3324250895675e+01, 0.6283075850446e+01,
-      0.2699723308006e-05, 0.2917882441928e+00, 0.1030928125552e+00,
-      0.2134832683534e-05, 0.4220997202487e+01, 0.3163918923335e+00,
-      0.1770412139433e-05, 0.4747318496462e+01, 0.1021328554739e+02,
-      0.1377264209373e-05, 0.4305058462401e+00, 0.1484170571900e-02,
-      0.1127814538960e-05, 0.8538177240740e+00, 0.6327837846670e+00,
-      0.1055608090130e-05, 0.1551800742580e+01, 0.4337116142245e+00,
-      0.9802673861420e-06, 0.1459646735377e+01, 0.1052268489556e+01,
-      0.1090329461951e-05, 0.1587351228711e+01, 0.1162474756779e+01,
-
-      0.6959590025090e-06, 0.5534442628766e+01, 0.1066495398892e+01,
-      0.5664914529542e-06, 0.6030673003297e+01, 0.9491756770005e+00,
-      0.6607787763599e-06, 0.4989507233927e+01, 0.8460828644453e+00,
-      0.6269725742838e-06, 0.4222951804572e+01, 0.1480791608091e+00,
-      0.6301889697863e-06, 0.5444316669126e+01, 0.2243449970715e+00,
-      0.4891042662861e-06, 0.1490552839784e+01, 0.3340612434717e+01,
-      0.3457083123290e-06, 0.3030475486049e+01, 0.3516457698740e-01,
-      0.3032559967314e-06, 0.2652038793632e+01, 0.1104591729320e-01,
-      0.2841133988903e-06, 0.1276744786829e+01, 0.4110125927500e-01,
-      0.2855564444432e-06, 0.2143368674733e+01, 0.1510475019529e+00,
-
-      0.2765157135038e-06, 0.5444186109077e+01, 0.6373574839730e-01,
-      0.2382312465034e-06, 0.2190521137593e+01, 0.2275259891141e+00,
-      0.2808060365077e-06, 0.5735195064841e+01, 0.2535050500000e-01,
-      0.2332175234405e-06, 0.9481985524859e-01, 0.7181332454670e-01,
-      0.2322488199659e-06, 0.5180499361533e+01, 0.8582758298370e-01,
-      0.1881850258423e-06, 0.3219788273885e+01, 0.2118763888447e+01,
-      0.2196111392808e-06, 0.2366941159761e+01, 0.2968341143800e-02,
-      0.2183810335519e-06, 0.4825445110915e+01, 0.7775000683430e-01,
-      0.2002733093326e-06, 0.2457148995307e+01, 0.2093666171530e+00,
-      0.1967111767229e-06, 0.5586291545459e+01, 0.2172315424036e+00,
-
-      0.1568473250543e-06, 0.3708003123320e+01, 0.7429900518901e+00,
-      0.1852528314300e-06, 0.4310638151560e+01, 0.2022531624851e+00,
-      0.1832111226447e-06, 0.1494665322656e+01, 0.3235053470014e+00,
-      0.1746805502310e-06, 0.1451378500784e+01, 0.1385174140878e+00,
-      0.1555730966650e-06, 0.1068040418198e+01, 0.7358765972222e+00,
-      0.1554883462559e-06, 0.2442579035461e+01, 0.5154640627760e+00,
-      0.1638380568746e-06, 0.2597913420625e+00, 0.8531963191132e+00,
-      0.1159938593640e-06, 0.5834512021280e+01, 0.1990721704425e+00,
-      0.1083427965695e-06, 0.5054033177950e+01, 0.5439178814476e+00,
-      0.1156480369431e-06, 0.5325677432457e+01, 0.5257585094865e+00,
-
-      0.1141308860095e-06, 0.2153403923857e+01, 0.5336234347371e+00,
-      0.7913146470946e-07, 0.8642846847027e+00, 0.1478866649112e+01,
-      0.7439752463733e-07, 0.1970628496213e+01, 0.2164800718209e+00,
-      0.7280277104079e-07, 0.6073307250609e+01, 0.2101180877357e+00,
-      0.8319567719136e-07, 0.1954371928334e+01, 0.1692165728891e+01,
-      0.7137705549290e-07, 0.8904989440909e+00, 0.4155522422634e+00,
-      0.6900825396225e-07, 0.2825717714977e+01, 0.1173197218910e+00,
-      0.7245757216635e-07, 0.2481677513331e+01, 0.1265567569334e+01,
-      0.6961165696255e-07, 0.1292955312978e+01, 0.9562891316684e+00,
-      0.7571804456890e-07, 0.3427517575069e+01, 0.1422690933580e-01,
-
-      0.6605425721904e-07, 0.8052192701492e+00, 0.6470106940028e+00,
-      0.7375477357248e-07, 0.1705076390088e+01, 0.1581959461667e+01,
-      0.7041664951470e-07, 0.4848356967891e+00, 0.9597935788730e-01,
-      0.6322199535763e-07, 0.3878069473909e+01, 0.7084920306520e-01,
-      0.5244380279191e-07, 0.2645560544125e+01, 0.5265099800692e+00,
-      0.5143125704988e-07, 0.4834486101370e+01, 0.5328719641544e+00,
-      0.5871866319373e-07, 0.7981472548900e+00, 0.7871412831580e-01,
-      0.6300822573871e-07, 0.5979398788281e+01, 0.2608790314060e+02,
-      0.6062154271548e-07, 0.4108655402756e+01, 0.1114304132498e+00,
-      0.4361912339976e-07, 0.5322624319280e+01, 0.1375773836557e+01,
-
-      0.4417005920067e-07, 0.6240817359284e+01, 0.2770348281756e+00,
-      0.4686806749936e-07, 0.3214977301156e+01, 0.1143987543936e+00,
-      0.3758892132305e-07, 0.5879809634765e+01, 0.1596186371003e+01,
-      0.5151351332319e-07, 0.2893377688007e+00, 0.2228608264996e+00,
-      0.4554683578572e-07, 0.5475427144122e+01, 0.1465949902372e+00,
-      0.3442381385338e-07, 0.5992034796640e+01, 0.5070101000000e-01,
-      0.2831093954933e-07, 0.5367350273914e+01, 0.3092784376656e+00,
-      0.3756267090084e-07, 0.5758171285420e+01, 0.4903339079539e+00,
-      0.2816374679892e-07, 0.1863718700923e+01, 0.2991266627620e+00,
-      0.3419307025569e-07, 0.9524347534130e+00, 0.3518164938661e+00,
-
-      0.2904250494239e-07, 0.5304471615602e+01, 0.1099462426779e+00,
-      0.2471734511206e-07, 0.1297069793530e+01, 0.6256703299991e+00,
-      0.2539620831872e-07, 0.3281126083375e+01, 0.1256615170089e+02,
-      0.2281017868007e-07, 0.1829122133165e+01, 0.6681224869435e+01,
-      0.2275319473335e-07, 0.5797198160181e+01, 0.3932462625300e-02,
-      0.2547755368442e-07, 0.4752697708330e+01, 0.1169588211447e+01,
-      0.2285979669317e-07, 0.1223205292886e+01, 0.1045155034888e+01,
-      0.1913386560994e-07, 0.1757532993389e+01, 0.1155361302111e+01,
-      0.1809020525147e-07, 0.4246116108791e+01, 0.3368040641550e-01,
-      0.1649213300201e-07, 0.1445162890627e+01, 0.4408250688924e+00,
-
-      0.1834972793932e-07, 0.1126917567225e+01, 0.4452511715700e-02,
-      0.1439550648138e-07, 0.6160756834764e+01, 0.9420622223326e+00,
-      0.1487645457041e-07, 0.4358761931792e+01, 0.4123712502208e+00,
-      0.1731729516660e-07, 0.6134456753344e+01, 0.2108507877249e+00,
-      0.1717747163567e-07, 0.1898186084455e+01, 0.2157473718317e+00,
-      0.1418190430374e-07, 0.4180286741266e+01, 0.6521991896920e-01,
-      0.1404844134873e-07, 0.7654053565412e-01, 0.4258542984690e-01,
-      0.1409842846538e-07, 0.4418612420312e+01, 0.2258291676434e+00,
-      0.1090948346291e-07, 0.1260615686131e+01, 0.4226656969313e+00,
-      0.1357577323612e-07, 0.3558248818690e+01, 0.7923417740620e-01,
-
-      0.1018154061960e-07, 0.5676087241256e+01, 0.1456308687557e+00,
-      0.1412073972109e-07, 0.8394392632422e+00, 0.1525316725248e+00,
-      0.1030938326496e-07, 0.1653593274064e+01, 0.1795258541446e+01,
-      0.1180081567104e-07, 0.1285802592036e+01, 0.7032915397480e-01,
-      0.9708510575650e-08, 0.7631889488106e+00, 0.8434341241180e-01,
-      0.9637689663447e-08, 0.4630642649176e+01, 0.1272681024002e+01,
-      0.1068910429389e-07, 0.5294934032165e+01, 0.2123349582968e+00,
-      0.1063716179336e-07, 0.2736266800832e+01, 0.2142632012598e+00,
-      0.1234858713814e-07, 0.1302891146570e+01, 0.1847279083684e+00,
-      0.8912631189738e-08, 0.3570415993621e+01, 0.2648454860559e+01,
-
-      0.1036378285534e-07, 0.4236693440949e+01, 0.1370332435159e+00,
-      0.9667798501561e-08, 0.2960768892398e+01, 0.4376440768498e+00,
-      0.8108314201902e-08, 0.6987781646841e+00, 0.2880807454688e+00,
-      0.7648364324628e-08, 0.2499017863863e+01, 0.2037373330570e+00,
-      0.7286136828406e-08, 0.3787426951665e+01, 0.1129145838217e+00,
-      0.9448237743913e-08, 0.2694354332983e+01, 0.5272426800584e+00,
-      0.9374276106428e-08, 0.4787121277064e+01, 0.5321392641652e+00,
-      0.7100226287462e-08, 0.3530238792101e+00, 0.6288513220417e+00,
-      0.9253056659571e-08, 0.1399478925664e+01, 0.1606092486742e+00,
-      0.6636432145504e-08, 0.3479575438447e+01, 0.1368660381889e+01,
-
-      0.6469975312932e-08, 0.1383669964800e+01, 0.2008557621224e+01,
-      0.7335849729765e-08, 0.1243698166898e+01, 0.9561746721300e-02,
-      0.8743421205855e-08, 0.3776164289301e+01, 0.3801276407308e+00,
-      0.5993635744494e-08, 0.5627122113596e+01, 0.2042657109477e+02,
-      0.5981008479693e-08, 0.1674336636752e+01, 0.2111650433779e+01,
-      0.6188535145838e-08, 0.5214925208672e+01, 0.4305306221819e+00,
-      0.6596074017566e-08, 0.2907653268124e+01, 0.1063314406849e+01,
-      0.6630815126226e-08, 0.2127643669658e+01, 0.8389694097774e+00,
-      0.6156772830040e-08, 0.5082160803295e+01, 0.4234171675140e+00,
-      0.6446960563014e-08, 0.1872100916905e+01, 0.5287268506303e+00,
-
-      0.6429324424668e-08, 0.5610276103577e+01, 0.5306550935933e+00,
-      0.6302232396465e-08, 0.1592152049607e+01, 0.1253008786510e-01,
-      0.6399244436159e-08, 0.2746214421532e+01, 0.5217580628120e+02,
-      0.5474965172558e-08, 0.2317666374383e+01, 0.2221856701002e+01,
-      0.5339293190692e-08, 0.1084724961156e+01, 0.7466759693650e-01,
-      0.5334733683389e-08, 0.3594106067745e+01, 0.7489573444450e-01,
-      0.5392665782110e-08, 0.5630254365606e+01, 0.1055449481598e+01,
-      0.6682075673789e-08, 0.1518480041732e+01, 0.2213766559277e+00,
-      0.5079130495960e-08, 0.2739765115711e+01, 0.2132517061319e+00,
-      0.5077759793261e-08, 0.5290711290094e+01, 0.2133464534247e+00,
-
-      0.4832037368310e-08, 0.1404473217200e+01, 0.7160067364790e-01,
-      0.6463279674802e-08, 0.6038381695210e+01, 0.2209183458640e-01,
-      0.6240592771560e-08, 0.1290170653666e+01, 0.3306188016693e+00,
-      0.4672013521493e-08, 0.3261895939677e+01, 0.7796265773310e-01,
-      0.6500650750348e-08, 0.1154522312095e+01, 0.3884652414254e+00,
-      0.6344161389053e-08, 0.6206111545062e+01, 0.7605151500000e-01,
-      0.4682518370646e-08, 0.5409118796685e+01, 0.1073608853559e+01,
-      0.5329460015591e-08, 0.1202985784864e+01, 0.7287631425543e+00,
-      0.5701588675898e-08, 0.4098715257064e+01, 0.8731175355560e-01,
-      0.6030690867211e-08, 0.4132033218460e+00, 0.9846002785331e+00,
-
-      0.4336256312655e-08, 0.1211415991827e+01, 0.4297791515992e+00,
-      0.4688498808975e-08, 0.3765479072409e+01, 0.2127790306879e+00,
-      0.4675578609335e-08, 0.4265540037226e+01, 0.2138191288687e+00,
-      0.4225578112158e-08, 0.5237566010676e+01, 0.3407705765729e+00,
-      0.5139422230028e-08, 0.1507173079513e+01, 0.7233337363710e-01,
-      0.4619995093571e-08, 0.9023957449848e-01, 0.8603097737811e+00,
-      0.4494776255461e-08, 0.5414930552139e+00, 0.7381754420900e-01,
-      0.4274026276788e-08, 0.4145735303659e+01, 0.7574578717200e-01,
-      0.5018141789353e-08, 0.3344408829055e+01, 0.3180992042600e-02,
-      0.4866163952181e-08, 0.3348534657607e+01, 0.7722995774390e-01,
-
-      0.4111986020501e-08, 0.4198823597220e+00, 0.1451108196653e+00,
-      0.3356142784950e-08, 0.5609144747180e+01, 0.1274714967946e+00,
-      0.4070575554551e-08, 0.7028411059224e+00, 0.3503323232942e+00,
-      0.3257451857278e-08, 0.5624697983086e+01, 0.5296435984654e+00,
-      0.3256973703026e-08, 0.1857842076707e+01, 0.5297383457582e+00,
-      0.3830771508640e-08, 0.4562887279931e+01, 0.9098186128426e+00,
-      0.3725024005962e-08, 0.2358058692652e+00, 0.1084620721060e+00,
-      0.3136763921756e-08, 0.2049731526845e+01, 0.2346394437820e+00,
-      0.3795147256194e-08, 0.2432356296933e+00, 0.1862120789403e+00,
-      0.2877342229911e-08, 0.5631101279387e+01, 0.1905464808669e+01,
-
-      0.3076931798805e-08, 0.1117615737392e+01, 0.3628624111593e+00,
-      0.2734765945273e-08, 0.5899826516955e+01, 0.2131850110243e+00,
-      0.2733405296885e-08, 0.2130562964070e+01, 0.2134131485323e+00,
-      0.2898552353410e-08, 0.3462387048225e+00, 0.5291709230214e+00,
-      0.2893736103681e-08, 0.8534352781543e+00, 0.5302110212022e+00,
-      0.3095717734137e-08, 0.2875061429041e+01, 0.2976424921901e+00,
-      0.2636190425832e-08, 0.2242512846659e+01, 0.1485980103780e+01,
-      0.3645512095537e-08, 0.1354016903958e+01, 0.6044726378023e+00,
-      0.2808173547723e-08, 0.6705114365631e-01, 0.6225157782540e-01,
-      0.2625012866888e-08, 0.4775705748482e+01, 0.5268983110410e-01,
-
-      0.2572233995651e-08, 0.2638924216139e+01, 0.1258454114666e+01,
-      0.2604238824792e-08, 0.4826358927373e+01, 0.2103781122809e+00,
-      0.2596886385239e-08, 0.3200388483118e+01, 0.2162200472757e+00,
-      0.3228057304264e-08, 0.5384848409563e+01, 0.2007689919132e+00,
-      0.2481601798252e-08, 0.5173373487744e+01, 0.1062562936266e+01,
-      0.2745977498864e-08, 0.6250966149853e+01, 0.5651155736444e+00,
-      0.2669878833811e-08, 0.4906001352499e+01, 0.1400015846597e+00,
-      0.3203986611711e-08, 0.5034333010005e+01, 0.7036329877322e+00,
-      0.3354961227212e-08, 0.6108262423137e+01, 0.4549093064213e+00,
-      0.2400407324558e-08, 0.2135399294955e+01, 0.2125476091956e+00,
-
-      0.2379905859802e-08, 0.5893721933961e+01, 0.2140505503610e+00,
-      0.2550844302187e-08, 0.3331940762063e+01, 0.1534957940063e+00,
-      0.2268824211001e-08, 0.1843418461035e+01, 0.2235935264888e+00,
-      0.2464700891204e-08, 0.3029548547230e+01, 0.2091065926078e+00,
-      0.2436814726024e-08, 0.4994717970364e+01, 0.2174915669488e+00,
-      0.2443623894745e-08, 0.2645102591375e+01, 0.1739420156204e+00,
-      0.2318701783838e-08, 0.5700547397897e+01, 0.7530171478090e-01,
-      0.2284448700256e-08, 0.5268898905872e+01, 0.7426161660010e-01,
-      0.2468848123510e-08, 0.5276280575078e+01, 0.2526561439362e+00,
-      0.2814052350303e-08, 0.6130168623475e+01, 0.5636314030725e+00,
-
-      0.2243662755220e-08, 0.6631692457995e+00, 0.8886590321940e-01,
-      0.2330795855941e-08, 0.2499435487702e+01, 0.1056200952181e+01,
-      0.9757679038404e-09, 0.5796846023126e+01, 0.7826370942180e+02 };
-
-/* SSB-to-Sun, T^0, Z */
-   static const double s0z[] = {
-      0.1181255122986e-03, 0.4607918989164e+00, 0.2132990797783e+00,
-      0.1127777651095e-03, 0.4169146331296e+00, 0.5296909721118e+00,
-      0.4777754401806e-04, 0.4582657007130e+01, 0.3813291813120e-01,
-      0.1129354285772e-04, 0.5758735142480e+01, 0.7478166569050e-01,
-     -0.1149543637123e-04, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.3298730512306e-05, 0.5978801994625e+01, 0.4265981595566e+00,
-      0.2733376706079e-05, 0.7665413691040e+00, 0.1059381944224e+01,
-      0.9426389657270e-06, 0.3710201265838e+01, 0.2061856251104e+00,
-      0.8187517749552e-06, 0.3390675605802e+00, 0.2204125344462e+00,
-      0.4080447871819e-06, 0.4552296640088e+00, 0.5225775174439e+00,
-
-      0.3169973017028e-06, 0.3445455899321e+01, 0.5368044267797e+00,
-      0.2438098615549e-06, 0.5664675150648e+01, 0.3664874755930e-01,
-      0.2601897517235e-06, 0.1931894095697e+01, 0.1495633313810e+00,
-      0.2314558080079e-06, 0.3666319115574e+00, 0.3961708870310e-01,
-      0.1962549548002e-06, 0.3167411699020e+01, 0.7626583626240e-01,
-      0.2180518287925e-06, 0.1544420746580e+01, 0.7113454667900e-02,
-      0.1451382442868e-06, 0.1583756740070e+01, 0.1102062672231e+00,
-      0.1358439007389e-06, 0.5239941758280e+01, 0.6398972393349e+00,
-      0.1050585898028e-06, 0.2266958352859e+01, 0.3163918923335e+00,
-      0.1050029870186e-06, 0.2711495250354e+01, 0.4194847048887e+00,
-
-      0.9934920679800e-07, 0.1116208151396e+01, 0.1589072916335e+01,
-      0.1048395331560e-06, 0.3408619600206e+01, 0.1021328554739e+02,
-      0.8370147196668e-07, 0.3810459401087e+01, 0.2535050500000e-01,
-      0.7989856510998e-07, 0.3769910473647e+01, 0.7329749511860e-01,
-      0.5441221655233e-07, 0.2416994903374e+01, 0.1030928125552e+00,
-      0.4610812906784e-07, 0.5858503336994e+01, 0.4337116142245e+00,
-      0.3923022803444e-07, 0.3354170010125e+00, 0.1484170571900e-02,
-      0.2610725582128e-07, 0.5410600646324e+01, 0.6327837846670e+00,
-      0.2455279767721e-07, 0.6120216681403e+01, 0.1162474756779e+01,
-      0.2375530706525e-07, 0.6055443426143e+01, 0.1052268489556e+01,
-
-      0.1782967577553e-07, 0.3146108708004e+01, 0.8460828644453e+00,
-      0.1581687095238e-07, 0.6255496089819e+00, 0.3340612434717e+01,
-      0.1594657672461e-07, 0.3782604300261e+01, 0.1066495398892e+01,
-      0.1563448615040e-07, 0.1997775733196e+01, 0.2022531624851e+00,
-      0.1463624258525e-07, 0.1736316792088e+00, 0.3516457698740e-01,
-      0.1331585056673e-07, 0.4331941830747e+01, 0.9491756770005e+00,
-      0.1130634557637e-07, 0.6152017751825e+01, 0.2968341143800e-02,
-      0.1028949607145e-07, 0.2101792614637e+00, 0.2275259891141e+00,
-      0.1024074971618e-07, 0.4071833211074e+01, 0.5070101000000e-01,
-      0.8826956060303e-08, 0.4861633688145e+00, 0.2093666171530e+00,
-
-      0.8572230171541e-08, 0.5268190724302e+01, 0.4110125927500e-01,
-      0.7649332643544e-08, 0.5134543417106e+01, 0.2608790314060e+02,
-      0.8581673291033e-08, 0.2920218146681e+01, 0.1480791608091e+00,
-      0.8430589300938e-08, 0.3604576619108e+01, 0.2172315424036e+00,
-      0.7776165501012e-08, 0.3772942249792e+01, 0.6373574839730e-01,
-      0.8311070234408e-08, 0.6200412329888e+01, 0.3235053470014e+00,
-      0.6927365212582e-08, 0.4543353113437e+01, 0.8531963191132e+00,
-      0.6791574208598e-08, 0.2882188406238e+01, 0.7181332454670e-01,
-      0.5593100811839e-08, 0.1776646892780e+01, 0.7429900518901e+00,
-      0.4553381853021e-08, 0.3949617611240e+01, 0.7775000683430e-01,
-
-      0.5758000450068e-08, 0.3859251775075e+01, 0.1990721704425e+00,
-      0.4281283457133e-08, 0.1466294631206e+01, 0.2118763888447e+01,
-      0.4206935661097e-08, 0.5421776011706e+01, 0.1104591729320e-01,
-      0.4213751641837e-08, 0.3412048993322e+01, 0.2243449970715e+00,
-      0.5310506239878e-08, 0.5421641370995e+00, 0.5154640627760e+00,
-      0.3827450341320e-08, 0.8887314524995e+00, 0.1510475019529e+00,
-      0.4292435241187e-08, 0.1405043757194e+01, 0.1422690933580e-01,
-      0.3189780702289e-08, 0.1060049293445e+01, 0.1173197218910e+00,
-      0.3226611928069e-08, 0.6270858897442e+01, 0.2164800718209e+00,
-      0.2893897608830e-08, 0.5117563223301e+01, 0.6470106940028e+00,
-
-      0.3239852024578e-08, 0.4079092237983e+01, 0.2101180877357e+00,
-      0.2956892222200e-08, 0.1594917021704e+01, 0.3092784376656e+00,
-      0.2980177912437e-08, 0.5258787667564e+01, 0.4155522422634e+00,
-      0.3163725690776e-08, 0.3854589225479e+01, 0.8582758298370e-01,
-      0.2662262399118e-08, 0.3561326430187e+01, 0.5257585094865e+00,
-      0.2766689135729e-08, 0.3180732086830e+00, 0.1385174140878e+00,
-      0.2411600278464e-08, 0.3324798335058e+01, 0.5439178814476e+00,
-      0.2483527695131e-08, 0.4169069291947e+00, 0.5336234347371e+00,
-      0.7788777276590e-09, 0.1900569908215e+01, 0.5217580628120e+02 };
-
-/* SSB-to-Sun, T^1, X */
-   static const double s1x[] = {
-     -0.1296310361520e-07, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.8975769009438e-08, 0.1128891609250e+01, 0.4265981595566e+00,
-      0.7771113441307e-08, 0.2706039877077e+01, 0.2061856251104e+00,
-      0.7538303866642e-08, 0.2191281289498e+01, 0.2204125344462e+00,
-      0.6061384579336e-08, 0.3248167319958e+01, 0.1059381944224e+01,
-      0.5726994235594e-08, 0.5569981398610e+01, 0.5225775174439e+00,
-      0.5616492836424e-08, 0.5057386614909e+01, 0.5368044267797e+00,
-      0.1010881584769e-08, 0.3473577116095e+01, 0.7113454667900e-02,
-      0.7259606157626e-09, 0.3651858593665e+00, 0.6398972393349e+00,
-      0.8755095026935e-09, 0.1662835408338e+01, 0.4194847048887e+00,
-
-      0.5370491182812e-09, 0.1327673878077e+01, 0.4337116142245e+00,
-      0.5743773887665e-09, 0.4250200846687e+01, 0.2132990797783e+00,
-      0.4408103140300e-09, 0.3598752574277e+01, 0.1589072916335e+01,
-      0.3101892374445e-09, 0.4887822983319e+01, 0.1052268489556e+01,
-      0.3209453713578e-09, 0.9702272295114e+00, 0.5296909721118e+00,
-      0.3017228286064e-09, 0.5484462275949e+01, 0.1066495398892e+01,
-      0.3200700038601e-09, 0.2846613338643e+01, 0.1495633313810e+00,
-      0.2137637279911e-09, 0.5692163292729e+00, 0.3163918923335e+00,
-      0.1899686386727e-09, 0.2061077157189e+01, 0.2275259891141e+00,
-      0.1401994545308e-09, 0.4177771136967e+01, 0.1102062672231e+00,
-
-      0.1578057810499e-09, 0.5782460597335e+01, 0.7626583626240e-01,
-      0.1237713253351e-09, 0.5705900866881e+01, 0.5154640627760e+00,
-      0.1313076837395e-09, 0.5163438179576e+01, 0.3664874755930e-01,
-      0.1184963304860e-09, 0.3054804427242e+01, 0.6327837846670e+00,
-      0.1238130878565e-09, 0.2317292575962e+01, 0.3961708870310e-01,
-      0.1015959527736e-09, 0.2194643645526e+01, 0.7329749511860e-01,
-      0.9017954423714e-10, 0.2868603545435e+01, 0.1990721704425e+00,
-      0.8668024955603e-10, 0.4923849675082e+01, 0.5439178814476e+00,
-      0.7756083930103e-10, 0.3014334135200e+01, 0.9491756770005e+00,
-      0.7536503401741e-10, 0.2704886279769e+01, 0.1030928125552e+00,
-
-      0.5483308679332e-10, 0.6010983673799e+01, 0.8531963191132e+00,
-      0.5184339620428e-10, 0.1952704573291e+01, 0.2093666171530e+00,
-      0.5108658712030e-10, 0.2958575786649e+01, 0.2172315424036e+00,
-      0.5019424524650e-10, 0.1736317621318e+01, 0.2164800718209e+00,
-      0.4909312625978e-10, 0.3167216416257e+01, 0.2101180877357e+00,
-      0.4456638901107e-10, 0.7697579923471e+00, 0.3235053470014e+00,
-      0.4227030350925e-10, 0.3490910137928e+01, 0.6373574839730e-01,
-      0.4095456040093e-10, 0.5178888984491e+00, 0.6470106940028e+00,
-      0.4990537041422e-10, 0.3323887668974e+01, 0.1422690933580e-01,
-      0.4321170010845e-10, 0.4288484987118e+01, 0.7358765972222e+00,
-
-      0.3544072091802e-10, 0.6021051579251e+01, 0.5265099800692e+00,
-      0.3480198638687e-10, 0.4600027054714e+01, 0.5328719641544e+00,
-      0.3440287244435e-10, 0.4349525970742e+01, 0.8582758298370e-01,
-      0.3330628322713e-10, 0.2347391505082e+01, 0.1104591729320e-01,
-      0.2973060707184e-10, 0.4789409286400e+01, 0.5257585094865e+00,
-      0.2932606766089e-10, 0.5831693799927e+01, 0.5336234347371e+00,
-      0.2876972310953e-10, 0.2692638514771e+01, 0.1173197218910e+00,
-      0.2827488278556e-10, 0.2056052487960e+01, 0.2022531624851e+00,
-      0.2515028239756e-10, 0.7411863262449e+00, 0.9597935788730e-01,
-      0.2853033744415e-10, 0.3948481024894e+01, 0.2118763888447e+01 };
-
-/* SSB-to-Sun, T^1, Y */
-   static const double s1y[] = {
-      0.8989047573576e-08, 0.5840593672122e+01, 0.4265981595566e+00,
-      0.7815938401048e-08, 0.1129664707133e+01, 0.2061856251104e+00,
-      0.7550926713280e-08, 0.6196589104845e+00, 0.2204125344462e+00,
-      0.6056556925895e-08, 0.1677494667846e+01, 0.1059381944224e+01,
-      0.5734142698204e-08, 0.4000920852962e+01, 0.5225775174439e+00,
-      0.5614341822459e-08, 0.3486722577328e+01, 0.5368044267797e+00,
-      0.1028678147656e-08, 0.1877141024787e+01, 0.7113454667900e-02,
-      0.7270792075266e-09, 0.5077167301739e+01, 0.6398972393349e+00,
-      0.8734141726040e-09, 0.9069550282609e-01, 0.4194847048887e+00,
-      0.5377371402113e-09, 0.6039381844671e+01, 0.4337116142245e+00,
-
-      0.4729719431571e-09, 0.2153086311760e+01, 0.2132990797783e+00,
-      0.4458052820973e-09, 0.5059830025565e+01, 0.5296909721118e+00,
-      0.4406855467908e-09, 0.2027971692630e+01, 0.1589072916335e+01,
-      0.3101659310977e-09, 0.3317677981860e+01, 0.1052268489556e+01,
-      0.3016749232545e-09, 0.3913703482532e+01, 0.1066495398892e+01,
-      0.3198541352656e-09, 0.1275513098525e+01, 0.1495633313810e+00,
-      0.2142065389871e-09, 0.5301351614597e+01, 0.3163918923335e+00,
-      0.1902615247592e-09, 0.4894943352736e+00, 0.2275259891141e+00,
-      0.1613410990871e-09, 0.2449891130437e+01, 0.1102062672231e+00,
-      0.1576992165097e-09, 0.4211421447633e+01, 0.7626583626240e-01,
-
-      0.1241637259894e-09, 0.4140803368133e+01, 0.5154640627760e+00,
-      0.1313974830355e-09, 0.3591920305503e+01, 0.3664874755930e-01,
-      0.1181697118258e-09, 0.1506314382788e+01, 0.6327837846670e+00,
-      0.1238239742779e-09, 0.7461405378404e+00, 0.3961708870310e-01,
-      0.1010107068241e-09, 0.6271010795475e+00, 0.7329749511860e-01,
-      0.9226316616509e-10, 0.1259158839583e+01, 0.1990721704425e+00,
-      0.8664946419555e-10, 0.3353244696934e+01, 0.5439178814476e+00,
-      0.7757230468978e-10, 0.1447677295196e+01, 0.9491756770005e+00,
-      0.7693168628139e-10, 0.1120509896721e+01, 0.1030928125552e+00,
-      0.5487897454612e-10, 0.4439380426795e+01, 0.8531963191132e+00,
-
-      0.5196118677218e-10, 0.3788856619137e+00, 0.2093666171530e+00,
-      0.5110853339935e-10, 0.1386879372016e+01, 0.2172315424036e+00,
-      0.5027804534813e-10, 0.1647881805466e+00, 0.2164800718209e+00,
-      0.4922485922674e-10, 0.1594315079862e+01, 0.2101180877357e+00,
-      0.6155599524400e-10, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.4447147832161e-10, 0.5480720918976e+01, 0.3235053470014e+00,
-      0.4144691276422e-10, 0.1931371033660e+01, 0.6373574839730e-01,
-      0.4099950625452e-10, 0.5229611294335e+01, 0.6470106940028e+00,
-      0.5060541682953e-10, 0.1731112486298e+01, 0.1422690933580e-01,
-      0.4293615946300e-10, 0.2714571038925e+01, 0.7358765972222e+00,
-
-      0.3545659845763e-10, 0.4451041444634e+01, 0.5265099800692e+00,
-      0.3479112041196e-10, 0.3029385448081e+01, 0.5328719641544e+00,
-      0.3438516493570e-10, 0.2778507143731e+01, 0.8582758298370e-01,
-      0.3297341285033e-10, 0.7898709807584e+00, 0.1104591729320e-01,
-      0.2972585818015e-10, 0.3218785316973e+01, 0.5257585094865e+00,
-      0.2931707295017e-10, 0.4260731012098e+01, 0.5336234347371e+00,
-      0.2897198149403e-10, 0.1120753978101e+01, 0.1173197218910e+00,
-      0.2832293240878e-10, 0.4597682717827e+00, 0.2022531624851e+00,
-      0.2864348326612e-10, 0.2169939928448e+01, 0.9597935788730e-01,
-      0.2852714675471e-10, 0.2377659870578e+01, 0.2118763888447e+01 };
-
-/* SSB-to-Sun, T^1, Z */
-   static const double s1z[] = {
-      0.5444220475678e-08, 0.1803825509310e+01, 0.2132990797783e+00,
-      0.3883412695596e-08, 0.4668616389392e+01, 0.5296909721118e+00,
-      0.1334341434551e-08, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.3730001266883e-09, 0.5401405918943e+01, 0.2061856251104e+00,
-      0.2894929197956e-09, 0.4932415609852e+01, 0.2204125344462e+00,
-      0.2857950357701e-09, 0.3154625362131e+01, 0.7478166569050e-01,
-      0.2499226432292e-09, 0.3657486128988e+01, 0.4265981595566e+00,
-      0.1937705443593e-09, 0.5740434679002e+01, 0.1059381944224e+01,
-      0.1374894396320e-09, 0.1712857366891e+01, 0.5368044267797e+00,
-      0.1217248678408e-09, 0.2312090870932e+01, 0.5225775174439e+00,
-
-      0.7961052740870e-10, 0.5283368554163e+01, 0.3813291813120e-01,
-      0.4979225949689e-10, 0.4298290471860e+01, 0.4194847048887e+00,
-      0.4388552286597e-10, 0.6145515047406e+01, 0.7113454667900e-02,
-      0.2586835212560e-10, 0.3019448001809e+01, 0.6398972393349e+00 };
-
-/* SSB-to-Sun, T^2, X */
-   static const double s2x[] = {
-      0.1603551636587e-11, 0.4404109410481e+01, 0.2061856251104e+00,
-      0.1556935889384e-11, 0.4818040873603e+00, 0.2204125344462e+00,
-      0.1182594414915e-11, 0.9935762734472e+00, 0.5225775174439e+00,
-      0.1158794583180e-11, 0.3353180966450e+01, 0.5368044267797e+00,
-      0.9597358943932e-12, 0.5567045358298e+01, 0.2132990797783e+00,
-      0.6511516579605e-12, 0.5630872420788e+01, 0.4265981595566e+00,
-      0.7419792747688e-12, 0.2156188581957e+01, 0.5296909721118e+00,
-      0.3951972655848e-12, 0.1981022541805e+01, 0.1059381944224e+01,
-      0.4478223877045e-12, 0.0000000000000e+00, 0.0000000000000e+00 };
-
-/* SSB-to-Sun, T^2, Y */
-   static const double s2y[] = {
-      0.1609114495091e-11, 0.2831096993481e+01, 0.2061856251104e+00,
-      0.1560330784946e-11, 0.5193058213906e+01, 0.2204125344462e+00,
-      0.1183535479202e-11, 0.5707003443890e+01, 0.5225775174439e+00,
-      0.1158183066182e-11, 0.1782400404928e+01, 0.5368044267797e+00,
-      0.1032868027407e-11, 0.4036925452011e+01, 0.2132990797783e+00,
-      0.6540142847741e-12, 0.4058241056717e+01, 0.4265981595566e+00,
-      0.7305236491596e-12, 0.6175401942957e+00, 0.5296909721118e+00,
-     -0.5580725052968e-12, 0.0000000000000e+00, 0.0000000000000e+00,
-      0.3946122651015e-12, 0.4108265279171e+00, 0.1059381944224e+01 };
-
-/* SSB-to-Sun, T^2, Z */
-   static const double s2z[] = {
-      0.3749920358054e-12, 0.3230285558668e+01, 0.2132990797783e+00,
-      0.2735037220939e-12, 0.6154322683046e+01, 0.5296909721118e+00 };
-
-/* Pointers to coefficient arrays, in x,y,z sets */
-   static const double *ce0[] = { e0x, e0y, e0z },
-                       *ce1[] = { e1x, e1y, e1z },
-                       *ce2[] = { e2x, e2y, e2z },
-                       *cs0[] = { s0x, s0y, s0z },
-                       *cs1[] = { s1x, s1y, s1z },
-                       *cs2[] = { s2x, s2y, s2z };
-   const double *coeffs;
-
-/* Numbers of terms for each component of the model, in x,y,z sets */
-   static const int ne0[3] = {(int)(sizeof e0x / sizeof (double) / 3),
-                              (int)(sizeof e0y / sizeof (double) / 3),
-                              (int)(sizeof e0z / sizeof (double) / 3) },
-                    ne1[3] = {(int)(sizeof e1x / sizeof (double) / 3),
-                              (int)(sizeof e1y / sizeof (double) / 3),
-                              (int)(sizeof e1z / sizeof (double) / 3) },
-                    ne2[3] = {(int)(sizeof e2x / sizeof (double) / 3),
-                              (int)(sizeof e2y / sizeof (double) / 3),
-                              (int)(sizeof e2z / sizeof (double) / 3) },
-                    ns0[3] = {(int)(sizeof s0x / sizeof (double) / 3),
-                              (int)(sizeof s0y / sizeof (double) / 3),
-                              (int)(sizeof s0z / sizeof (double) / 3) },
-                    ns1[3] = {(int)(sizeof s1x / sizeof (double) / 3),
-                              (int)(sizeof s1y / sizeof (double) / 3),
-                              (int)(sizeof s1z / sizeof (double) / 3) },
-                    ns2[3] = {(int)(sizeof s2x / sizeof (double) / 3),
-                              (int)(sizeof s2y / sizeof (double) / 3),
-                              (int)(sizeof s2z / sizeof (double) / 3) };
-   int nterms;
-
-/* Miscellaneous */
-   int jstat, i, j;
-   double t, t2, xyz, xyzd, a, b, c, ct, p, cp,
-          ph[3], vh[3], pb[3], vb[3], x, y, z;
-
-/*--------------------------------------------------------------------*/
-
-/* Time since reference epoch, Julian years. */
-   t = ((date1 - DJ00) + date2) / DJY;
-   t2 = t*t;
-
-/* Set status. */
-   jstat = fabs(t) <= 100.0 ? 0 : 1;
-
-/* X then Y then Z. */
-   for (i = 0; i < 3; i++) {
-
-   /* Initialize position and velocity component. */
-      xyz = 0.0;
-      xyzd = 0.0;
-
-   /* ------------------------------------------------ */
-   /* Obtain component of Sun to Earth ecliptic vector */
-   /* ------------------------------------------------ */
-
-   /* Sun to Earth, T^0 terms. */
-      coeffs = ce0[i];
-      nterms = ne0[i];
-      for (j = 0; j < nterms; j++) {
-         a = *coeffs++;
-         b = *coeffs++;
-         c = *coeffs++;
-         p = b + c*t;
-         xyz  += a*cos(p);
-         xyzd -= a*c*sin(p);
-      }
-
-   /* Sun to Earth, T^1 terms. */
-      coeffs = ce1[i];
-      nterms = ne1[i];
-      for (j = 0; j < nterms; j++) {
-         a = *coeffs++;
-         b = *coeffs++;
-         c = *coeffs++;
-         ct = c*t;
-         p = b + ct;
-         cp = cos(p);
-         xyz  += a*t*cp;
-         xyzd += a*( cp - ct*sin(p) );
-      }
-
-   /* Sun to Earth, T^2 terms. */
-      coeffs = ce2[i];
-      nterms = ne2[i];
-      for (j = 0; j < nterms; j++) {
-         a = *coeffs++;
-         b = *coeffs++;
-         c = *coeffs++;
-         ct = c*t;
-         p = b + ct;
-         cp = cos(p);
-         xyz  += a*t2*cp;
-         xyzd += a*t*( 2.0*cp - ct*sin(p) );
-      }
-
-   /* Heliocentric Earth position and velocity component. */
-      ph[i] = xyz;
-      vh[i] = xyzd / DJY;
-
-   /* ------------------------------------------------ */
-   /* Obtain component of SSB to Earth ecliptic vector */
-   /* ------------------------------------------------ */
-
-   /* SSB to Sun, T^0 terms. */
-      coeffs = cs0[i];
-      nterms = ns0[i];
-      for (j = 0; j < nterms; j++) {
-         a = *coeffs++;
-         b = *coeffs++;
-         c = *coeffs++;
-         p = b + c*t;
-         xyz  += a*cos(p);
-         xyzd -= a*c*sin(p);
-      }
-
-   /* SSB to Sun, T^1 terms. */
-      coeffs = cs1[i];
-      nterms = ns1[i];
-      for (j = 0; j < nterms; j++) {
-         a = *coeffs++;
-         b = *coeffs++;
-         c = *coeffs++;
-         ct = c*t;
-         p = b + ct;
-         cp = cos(p);
-         xyz  += a*t*cp;
-         xyzd += a*(cp - ct*sin(p));
-      }
-
-   /* SSB to Sun, T^2 terms. */
-      coeffs = cs2[i];
-      nterms = ns2[i];
-      for (j = 0; j < nterms; j++) {
-         a = *coeffs++;
-         b = *coeffs++;
-         c = *coeffs++;
-         ct = c*t;
-         p = b + ct;
-         cp = cos(p);
-         xyz  += a*t2*cp;
-         xyzd += a*t*(2.0*cp - ct*sin(p));
-     }
-
-   /* Barycentric Earth position and velocity component. */
-     pb[i] = xyz;
-     vb[i] = xyzd / DJY;
-
-   /* Next Cartesian component. */
-   }
-
-/* Rotate from ecliptic to BCRS coordinates. */
-
-   x = ph[0];
-   y = ph[1];
-   z = ph[2];
-   pvh[0][0] =      x + am12*y + am13*z;
-   pvh[0][1] = am21*x + am22*y + am23*z;
-   pvh[0][2] =          am32*y + am33*z;
-
-   x = vh[0];
-   y = vh[1];
-   z = vh[2];
-   pvh[1][0] =      x + am12*y + am13*z;
-   pvh[1][1] = am21*x + am22*y + am23*z;
-   pvh[1][2] =          am32*y + am33*z;
-
-   x = pb[0];
-   y = pb[1];
-   z = pb[2];
-   pvb[0][0] =      x + am12*y + am13*z;
-   pvb[0][1] = am21*x + am22*y + am23*z;
-   pvb[0][2] =          am32*y + am33*z;
-
-   x = vb[0];
-   y = vb[1];
-   z = vb[2];
-   pvb[1][0] =      x + am12*y + am13*z;
-   pvb[1][1] = am21*x + am22*y + am23*z;
-   pvb[1][2] =          am32*y + am33*z;
-
-/* Return the status. */
-   return jstat;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauEqeq94(double date1, double date2)
-/*
-**  - - - - - - - - - -
-**   i a u E q e q 9 4
-**  - - - - - - - - - -
-**
-**  Equation of the equinoxes, IAU 1994 model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2   double     TDB date (Note 1)
-**
-**  Returned (function value):
-**                   double     equation of the equinoxes (Note 2)
-**
-**  Notes:
-**
-**  1) The date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The result, which is in radians, operates in the following sense:
-**
-**        Greenwich apparent ST = GMST + equation of the equinoxes
-**
-**  Called:
-**     iauNut80     nutation, IAU 1980
-**     iauObl80     mean obliquity, IAU 1980
-**
-**  References:
-**
-**     IAU Resolution C7, Recommendation 3 (1994).
-**
-**     Capitaine, N. & Gontier, A.-M., 1993, Astron. Astrophys., 275,
-**     645-650.
-**
-**  This revision:  2008 May 24
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t,  om,  dpsi,  deps,  eps0, ee;
-
-
-/* Interval between fundamental epoch J2000.0 and given date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Longitude of the mean ascending node of the lunar orbit on the */
-/* ecliptic, measured from the mean equinox of date. */
-   om = iauAnpm((450160.280 + (-482890.539
-           + (7.455 + 0.008 * t) * t) * t) * DAS2R
-           + fmod(-5.0 * t, 1.0) * D2PI);
-
-/* Nutation components and mean obliquity. */
-   iauNut80(date1, date2, &dpsi, &deps);
-   eps0 = iauObl80(date1, date2);
-
-/* Equation of the equinoxes. */
-   ee = dpsi*cos(eps0) + DAS2R*(0.00264*sin(om) + 0.000063*sin(om+om));
-
-   return ee;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauEra00(double dj1, double dj2)
-/*
-**  - - - - - - - - -
-**   i a u E r a 0 0
-**  - - - - - - - - -
-**
-**  Earth rotation angle (IAU 2000 model).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     dj1,dj2   double    UT1 as a 2-part Julian Date (see note)
-**
-**  Returned (function value):
-**               double    Earth rotation angle (radians), range 0-2pi
-**
-**  Notes:
-**
-**  1) The UT1 date dj1+dj2 is a Julian Date, apportioned in any
-**     convenient way between the arguments dj1 and dj2.  For example,
-**     JD(UT1)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**             dj1            dj2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  The date & time method is
-**     best matched to the algorithm used:  maximum precision is
-**     delivered when the dj1 argument is for 0hrs UT1 on the day in
-**     question and the dj2 argument lies in the range 0 to 1, or vice
-**     versa.
-**
-**  2) The algorithm is adapted from Expression 22 of Capitaine et al.
-**     2000.  The time argument has been expressed in days directly,
-**     and, to retain precision, integer contributions have been
-**     eliminated.  The same formulation is given in IERS Conventions
-**     (2003), Chap. 5, Eq. 14.
-**
-**  Called:
-**     iauAnp       normalize angle into range 0 to 2pi
-**
-**  References:
-**
-**     Capitaine N., Guinot B. and McCarthy D.D, 2000, Astron.
-**     Astrophys., 355, 398-405.
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2008 May 24
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double d1, d2, t, f, theta;
-
-
-/* Days since fundamental epoch. */
-   if (dj1 < dj2) {
-      d1 = dj1;
-      d2 = dj2;
-   } else {
-      d1 = dj2;
-      d2 = dj1;
-   }
-   t = d1 + (d2- DJ00);
-
-/* Fractional part of T (days). */
-   f = fmod(d1, 1.0) + fmod(d2, 1.0);
-
-/* Earth rotation angle at this UT1. */
-   theta = iauAnp(D2PI * (f + 0.7790572732640
-                            + 0.00273781191135448 * t));
-
-   return theta;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFad03(double t)
-/*
-**  - - - - - - - - -
-**   i a u F a d 0 3
-**  - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean elongation of the Moon from the Sun.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    D, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     is from Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean elongation of the Moon from the Sun (IERS Conventions 2003). */
-   a = fmod(          1072260.703692 +
-             t * ( 1602961601.2090 +
-             t * (        - 6.3706 +
-             t * (          0.006593 +
-             t * (        - 0.00003169 ) ) ) ), TURNAS ) * DAS2R;
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFae03(double t)
-/*
-**  - - - - - - - - -
-**   i a u F a e 0 3
-**  - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean longitude of Earth.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    mean longitude of Earth, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     comes from Souchay et al. (1999) after Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
-**     Astron.Astrophys.Supp.Ser. 135, 111
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean longitude of Earth (IERS Conventions 2003). */
-   a = fmod(1.753470314 + 628.3075849991 * t, D2PI);
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFaf03(double t)
-/*
-**  - - - - - - - - -
-**   i a u F a f 0 3
-**  - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean longitude of the Moon minus mean longitude of the ascending
-**  node.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    F, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     is from Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean longitude of the Moon minus that of the ascending node */
-/* (IERS Conventions 2003).                                    */
-   a = fmod(           335779.526232 +
-             t * ( 1739527262.8478 +
-             t * (       - 12.7512 +
-             t * (        - 0.001037 +
-             t * (          0.00000417 ) ) ) ), TURNAS ) * DAS2R;
-
-   return a;
-
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFaju03(double t)
-/*
-**  - - - - - - - - - -
-**   i a u F a j u 0 3
-**  - - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean longitude of Jupiter.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    mean longitude of Jupiter, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     comes from Souchay et al. (1999) after Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
-**     Astron.Astrophys.Supp.Ser. 135, 111
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean longitude of Jupiter (IERS Conventions 2003). */
-   a = fmod(0.599546497 + 52.9690962641 * t, D2PI);
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFal03(double t)
-/*
-**  - - - - - - - - -
-**   i a u F a l 0 3
-**  - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean anomaly of the Moon.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    l, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     is from Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean anomaly of the Moon (IERS Conventions 2003). */
-   a = fmod(           485868.249036  +
-             t * ( 1717915923.2178 +
-             t * (         31.8792 +
-             t * (          0.051635 +
-             t * (        - 0.00024470 ) ) ) ), TURNAS ) * DAS2R;
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFalp03(double t)
-/*
-**  - - - - - - - - - -
-**   i a u F a l p 0 3
-**  - - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean anomaly of the Sun.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    l', radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     is from Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean anomaly of the Sun (IERS Conventions 2003). */
-   a = fmod(         1287104.793048 +
-             t * ( 129596581.0481 +
-             t * (       - 0.5532 +
-             t * (         0.000136 +
-             t * (       - 0.00001149 ) ) ) ), TURNAS ) * DAS2R;
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFama03(double t)
-/*
-**  - - - - - - - - - -
-**   i a u F a m a 0 3
-**  - - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean longitude of Mars.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    mean longitude of Mars, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     comes from Souchay et al. (1999) after Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
-**     Astron.Astrophys.Supp.Ser. 135, 111
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean longitude of Mars (IERS Conventions 2003). */
-   a = fmod(6.203480913 + 334.0612426700 * t, D2PI);
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFame03(double t)
-/*
-**  - - - - - - - - - -
-**   i a u F a m e 0 3
-**  - - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean longitude of Mercury.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    mean longitude of Mercury, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     comes from Souchay et al. (1999) after Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
-**     Astron.Astrophys.Supp.Ser. 135, 111
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean longitude of Mercury (IERS Conventions 2003). */
-   a = fmod(4.402608842 + 2608.7903141574 * t, D2PI);
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFane03(double t)
-/*
-**  - - - - - - - - - -
-**   i a u F a n e 0 3
-**  - - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean longitude of Neptune.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    mean longitude of Neptune, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     is adapted from Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean longitude of Neptune (IERS Conventions 2003). */
-   a = fmod(5.311886287 + 3.8133035638 * t, D2PI);
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFaom03(double t)
-/*
-**  - - - - - - - - - -
-**   i a u F a o m 0 3
-**  - - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean longitude of the Moon's ascending node.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    Omega, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     is from Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean longitude of the Moon's ascending node */
-/* (IERS Conventions 2003).                    */
-   a = fmod(          450160.398036 +
-             t * ( - 6962890.5431 +
-             t * (         7.4722 +
-             t * (         0.007702 +
-             t * (       - 0.00005939 ) ) ) ), TURNAS ) * DAS2R;
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFapa03(double t)
-/*
-**  - - - - - - - - - -
-**   i a u F a p a 0 3
-**  - - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  general accumulated precession in longitude.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    general precession in longitude, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003).  It
-**     is taken from Kinoshita & Souchay (1990) and comes originally
-**     from Lieske et al. (1977).
-**
-**  References:
-**
-**     Kinoshita, H. and Souchay J. 1990, Celest.Mech. and Dyn.Astron.
-**     48, 187
-**
-**     Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977,
-**     Astron.Astrophys. 58, 1-16
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* General accumulated precession in longitude. */
-   a = (0.024381750 + 0.00000538691 * t) * t;
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFasa03(double t)
-/*
-**  - - - - - - - - - -
-**   i a u F a s a 0 3
-**  - - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean longitude of Saturn.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    mean longitude of Saturn, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     comes from Souchay et al. (1999) after Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
-**     Astron.Astrophys.Supp.Ser. 135, 111
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean longitude of Saturn (IERS Conventions 2003). */
-   a = fmod(0.874016757 + 21.3299104960 * t, D2PI);
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFaur03(double t)
-/*
-**  - - - - - - - - - -
-**   i a u F a u r 0 3
-**  - - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean longitude of Uranus.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned  (function value):
-**           double    mean longitude of Uranus, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     is adapted from Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean longitude of Uranus (IERS Conventions 2003). */
-   a = fmod(5.481293872 + 7.4781598567 * t, D2PI);
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauFave03(double t)
-/*
-**  - - - - - - - - - -
-**   i a u F a v e 0 3
-**  - - - - - - - - - -
-**
-**  Fundamental argument, IERS Conventions (2003):
-**  mean longitude of Venus.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     t     double    TDB, Julian centuries since J2000.0 (Note 1)
-**
-**  Returned (function value):
-**           double    mean longitude of Venus, radians (Note 2)
-**
-**  Notes:
-**
-**  1) Though t is strictly TDB, it is usually more convenient to use
-**     TT, which makes no significant difference.
-**
-**  2) The expression used is as adopted in IERS Conventions (2003) and
-**     comes from Souchay et al. (1999) after Simon et al. (1994).
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
-**     Astron.Astrophys.Supp.Ser. 135, 111
-**
-**  This revision:  2009 December 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double a;
-
-
-/* Mean longitude of Venus (IERS Conventions 2003). */
-   a = fmod(3.176146697 + 1021.3285546211 * t, D2PI);
-
-   return a;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauFk52h(double r5, double d5,
-              double dr5, double dd5, double px5, double rv5,
-              double *rh, double *dh,
-              double *drh, double *ddh, double *pxh, double *rvh)
-/*
-**  - - - - - - - - -
-**   i a u F k 5 2 h
-**  - - - - - - - - -
-**
-**  Transform FK5 (J2000.0) star data into the Hipparcos system.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given (all FK5, equinox J2000.0, epoch J2000.0):
-**     r5      double    RA (radians)
-**     d5      double    Dec (radians)
-**     dr5     double    proper motion in RA (dRA/dt, rad/Jyear)
-**     dd5     double    proper motion in Dec (dDec/dt, rad/Jyear)
-**     px5     double    parallax (arcsec)
-**     rv5     double    radial velocity (km/s, positive = receding)
-**
-**  Returned (all Hipparcos, epoch J2000.0):
-**     rh      double    RA (radians)
-**     dh      double    Dec (radians)
-**     drh     double    proper motion in RA (dRA/dt, rad/Jyear)
-**     ddh     double    proper motion in Dec (dDec/dt, rad/Jyear)
-**     pxh     double    parallax (arcsec)
-**     rvh     double    radial velocity (km/s, positive = receding)
-**
-**  Notes:
-**
-**  1) This function transforms FK5 star positions and proper motions
-**     into the system of the Hipparcos catalog.
-**
-**  2) The proper motions in RA are dRA/dt rather than
-**     cos(Dec)*dRA/dt, and are per year rather than per century.
-**
-**  3) The FK5 to Hipparcos transformation is modeled as a pure
-**     rotation and spin;  zonal errors in the FK5 catalog are not
-**     taken into account.
-**
-**  4) See also iauH2fk5, iauFk5hz, iauHfk5z.
-**
-**  Called:
-**     iauStarpv    star catalog data to space motion pv-vector
-**     iauFk5hip    FK5 to Hipparcos rotation and spin
-**     iauRxp       product of r-matrix and p-vector
-**     iauPxp       vector product of two p-vectors
-**     iauPpp       p-vector plus p-vector
-**     iauPvstar    space motion pv-vector to star catalog data
-**
-**  Reference:
-**
-**     F.Mignard & M.Froeschle, Astron. Astrophys. 354, 732-739 (2000).
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int i;
-   double pv5[2][3], r5h[3][3], s5h[3], wxp[3], vv[3], pvh[2][3];
-
-
-/* FK5 barycentric position/velocity pv-vector (normalized). */
-   iauStarpv(r5, d5, dr5, dd5, px5, rv5, pv5);
-
-/* FK5 to Hipparcos orientation matrix and spin vector. */
-   iauFk5hip(r5h, s5h);
-
-/* Make spin units per day instead of per year. */
-   for ( i = 0; i < 3; s5h[i++] /= 365.25 );
-
-/* Orient the FK5 position into the Hipparcos system. */
-   iauRxp(r5h, pv5[0], pvh[0]);
-
-/* Apply spin to the position giving an extra space motion component. */
-   iauPxp(pv5[0], s5h, wxp);
-
-/* Add this component to the FK5 space motion. */
-   iauPpp(wxp, pv5[1], vv);
-
-/* Orient the FK5 space motion into the Hipparcos system. */
-   iauRxp(r5h, vv, pvh[1]);
-
-/* Hipparcos pv-vector to spherical. */
-   iauPvstar(pvh, rh, dh, drh, ddh, pxh, rvh);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauFk5hip(double r5h[3][3], double s5h[3])
-/*
-**  - - - - - - - - - -
-**   i a u F k 5 h i p
-**  - - - - - - - - - -
-**
-**  FK5 to Hipparcos rotation and spin.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Returned:
-**     r5h   double[3][3]  r-matrix: FK5 rotation wrt Hipparcos (Note 2)
-**     s5h   double[3]     r-vector: FK5 spin wrt Hipparcos (Note 3)
-**
-**  Notes:
-**
-**  1) This function models the FK5 to Hipparcos transformation as a
-**     pure rotation and spin;  zonal errors in the FK5 catalogue are
-**     not taken into account.
-**
-**  2) The r-matrix r5h operates in the sense:
-**
-**           P_Hipparcos = r5h x P_FK5
-**
-**     where P_FK5 is a p-vector in the FK5 frame, and P_Hipparcos is
-**     the equivalent Hipparcos p-vector.
-**
-**  3) The r-vector s5h represents the time derivative of the FK5 to
-**     Hipparcos rotation.  The units are radians per year (Julian,
-**     TDB).
-**
-**  Called:
-**     iauRv2m      r-vector to r-matrix
-**
-**  Reference:
-**
-**     F.Mignard & M.Froeschle, Astron. Astrophys. 354, 732-739 (2000).
-**
-**  This revision:  2009 March 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double v[3];
-
-/* FK5 wrt Hipparcos orientation and spin (radians, radians/year) */
-   double epx, epy, epz;
-   double omx, omy, omz;
-
-
-   epx = -19.9e-3 * DAS2R;
-   epy =  -9.1e-3 * DAS2R;
-   epz =  22.9e-3 * DAS2R;
-
-   omx = -0.30e-3 * DAS2R;
-   omy =  0.60e-3 * DAS2R;
-   omz =  0.70e-3 * DAS2R;
-
-/* FK5 to Hipparcos orientation expressed as an r-vector. */
-   v[0] = epx;
-   v[1] = epy;
-   v[2] = epz;
-
-/* Re-express as an r-matrix. */
-   iauRv2m(v, r5h);
-
-/* Hipparcos wrt FK5 spin expressed as an r-vector. */
-   s5h[0] = omx;
-   s5h[1] = omy;
-   s5h[2] = omz;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauFk5hz(double r5, double d5, double date1, double date2,
-              double *rh, double *dh)
-/*
-**  - - - - - - - - -
-**   i a u F k 5 h z
-**  - - - - - - - - -
-**
-**  Transform an FK5 (J2000.0) star position into the system of the
-**  Hipparcos catalogue, assuming zero Hipparcos proper motion.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     r5           double   FK5 RA (radians), equinox J2000.0, at date
-**     d5           double   FK5 Dec (radians), equinox J2000.0, at date
-**     date1,date2  double   TDB date (Notes 1,2)
-**
-**  Returned:
-**     rh           double   Hipparcos RA (radians)
-**     dh           double   Hipparcos Dec (radians)
-**
-**  Notes:
-**
-**  1) This function converts a star position from the FK5 system to
-**     the Hipparcos system, in such a way that the Hipparcos proper
-**     motion is zero.  Because such a star has, in general, a non-zero
-**     proper motion in the FK5 system, the function requires the date
-**     at which the position in the FK5 system was determined.
-**
-**  2) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  3) The FK5 to Hipparcos transformation is modeled as a pure
-**     rotation and spin;  zonal errors in the FK5 catalogue are not
-**     taken into account.
-**
-**  4) The position returned by this function is in the Hipparcos
-**     reference system but at date date1+date2.
-**
-**  5) See also iauFk52h, iauH2fk5, iauHfk5z.
-**
-**  Called:
-**     iauS2c       spherical coordinates to unit vector
-**     iauFk5hip    FK5 to Hipparcos rotation and spin
-**     iauSxp       multiply p-vector by scalar
-**     iauRv2m      r-vector to r-matrix
-**     iauTrxp      product of transpose of r-matrix and p-vector
-**     iauPxp       vector product of two p-vectors
-**     iauC2s       p-vector to spherical
-**     iauAnp       normalize angle into range 0 to 2pi
-**
-**  Reference:
-**
-**     F.Mignard & M.Froeschle, 2000, Astron.Astrophys. 354, 732-739.
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t, p5e[3], r5h[3][3], s5h[3], vst[3], rst[3][3], p5[3],
-          ph[3], w;
-
-
-/* Interval from given date to fundamental epoch J2000.0 (JY). */
-   t = - ((date1 - DJ00) + date2) / DJY;
-
-/* FK5 barycentric position vector. */
-   iauS2c(r5, d5, p5e);
-
-/* FK5 to Hipparcos orientation matrix and spin vector. */
-   iauFk5hip(r5h, s5h);
-
-/* Accumulated Hipparcos wrt FK5 spin over that interval. */
-   iauSxp(t, s5h, vst);
-
-/* Express the accumulated spin as a rotation matrix. */
-   iauRv2m(vst, rst);
-
-/* Derotate the vector's FK5 axes back to date. */
-   iauTrxp(rst, p5e, p5);
-
-/* Rotate the vector into the Hipparcos system. */
-   iauRxp(r5h, p5, ph);
-
-/* Hipparcos vector to spherical. */
-   iauC2s(ph, &w, dh);
-   *rh = iauAnp(w);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauFw2m(double gamb, double phib, double psi, double eps,
-             double r[3][3])
-/*
-**  - - - - - - - -
-**   i a u F w 2 m
-**  - - - - - - - -
-**
-**  Form rotation matrix given the Fukushima-Williams angles.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     gamb     double         F-W angle gamma_bar (radians)
-**     phib     double         F-W angle phi_bar (radians)
-**     psi      double         F-W angle psi (radians)
-**     eps      double         F-W angle epsilon (radians)
-**
-**  Returned:
-**     r        double[3][3]   rotation matrix
-**
-**  Notes:
-**
-**  1) Naming the following points:
-**
-**           e = J2000.0 ecliptic pole,
-**           p = GCRS pole,
-**           E = ecliptic pole of date,
-**     and   P = CIP,
-**
-**     the four Fukushima-Williams angles are as follows:
-**
-**        gamb = gamma = epE
-**        phib = phi = pE
-**        psi = psi = pEP
-**        eps = epsilon = EP
-**
-**  2) The matrix representing the combined effects of frame bias,
-**     precession and nutation is:
-**
-**        NxPxB = R_1(-eps).R_3(-psi).R_1(phib).R_3(gamb)
-**
-**  3) Three different matrices can be constructed, depending on the
-**     supplied angles:
-**
-**     o  To obtain the nutation x precession x frame bias matrix,
-**        generate the four precession angles, generate the nutation
-**        components and add them to the psi_bar and epsilon_A angles,
-**        and call the present function.
-**
-**     o  To obtain the precession x frame bias matrix, generate the
-**        four precession angles and call the present function.
-**
-**     o  To obtain the frame bias matrix, generate the four precession
-**        angles for date J2000.0 and call the present function.
-**
-**     The nutation-only and precession-only matrices can if necessary
-**     be obtained by combining these three appropriately.
-**
-**  Called:
-**     iauIr        initialize r-matrix to identity
-**     iauRz        rotate around Z-axis
-**     iauRx        rotate around X-axis
-**
-**  Reference:
-**
-**     Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Construct the matrix. */
-   iauIr(r);
-   iauRz(gamb, r);
-   iauRx(phib, r);
-   iauRz(-psi, r);
-   iauRx(-eps, r);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauFw2xy(double gamb, double phib, double psi, double eps,
-              double *x, double *y)
-/*
-**  - - - - - - - - -
-**   i a u F w 2 x y
-**  - - - - - - - - -
-**
-**  CIP X,Y given Fukushima-Williams bias-precession-nutation angles.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     gamb     double    F-W angle gamma_bar (radians)
-**     phib     double    F-W angle phi_bar (radians)
-**     psi      double    F-W angle psi (radians)
-**     eps      double    F-W angle epsilon (radians)
-**
-**  Returned:
-**     x,y      double    CIP X,Y ("radians")
-**
-**  Notes:
-**
-**  1) Naming the following points:
-**
-**           e = J2000.0 ecliptic pole,
-**           p = GCRS pole
-**           E = ecliptic pole of date,
-**     and   P = CIP,
-**
-**     the four Fukushima-Williams angles are as follows:
-**
-**        gamb = gamma = epE
-**        phib = phi = pE
-**        psi = psi = pEP
-**        eps = epsilon = EP
-**
-**  2) The matrix representing the combined effects of frame bias,
-**     precession and nutation is:
-**
-**        NxPxB = R_1(-epsA).R_3(-psi).R_1(phib).R_3(gamb)
-**
-**     X,Y are elements (3,1) and (3,2) of the matrix.
-**
-**  Called:
-**     iauFw2m      F-W angles to r-matrix
-**     iauBpn2xy    extract CIP X,Y coordinates from NPB matrix
-**
-**  Reference:
-**
-**     Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double r[3][3];
-
-
-/* Form NxPxB matrix. */
-   iauFw2m(gamb, phib, psi, eps, r);
-
-/* Extract CIP X,Y. */
-   iauBpn2xy(r, x, y);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauGc2gd ( int n, double xyz[3],
-               double *elong, double *phi, double *height )
-/*
-**  - - - - - - - - -
-**   i a u G c 2 g d
-**  - - - - - - - - -
-**
-**  Transform geocentric coordinates to geodetic using the specified
-**  reference ellipsoid.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical transformation.
-**
-**  Given:
-**     n       int        ellipsoid identifier (Note 1)
-**     xyz     double[3]  geocentric vector (Note 2)
-**
-**  Returned:
-**     elong   double     longitude (radians, east +ve)
-**     phi     double     latitude (geodetic, radians, Note 3)
-**     height  double     height above ellipsoid (geodetic, Notes 2,3)
-**
-**  Returned (function value):
-**            int         status:  0 = OK
-**                                -1 = illegal identifier (Note 3)
-**                                -2 = internal error (Note 3)
-**
-**  Notes:
-**
-**  1) The identifier n is a number that specifies the choice of
-**     reference ellipsoid.  The following are supported:
-**
-**        n    ellipsoid
-**
-**        1     WGS84
-**        2     GRS80
-**        3     WGS72
-**
-**     The n value has no significance outside the SOFA software.  For
-**     convenience, symbols WGS84 etc. are defined in sofam.h.
-**
-**  2) The geocentric vector (xyz, given) and height (height, returned)
-**     are in meters.
-**
-**  3) An error status -1 means that the identifier n is illegal.  An
-**     error status -2 is theoretically impossible.  In all error cases,
-**     phi and height are both set to -1e9.
-**
-**  4) The inverse transformation is performed in the function iauGd2gc.
-**
-**  Called:
-**     iauEform     Earth reference ellipsoids
-**     iauGc2gde    geocentric to geodetic transformation, general
-**
-**  This revision:  2012 Febuary 23
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int j;
-   double a, f;
-
-
-/* Obtain reference ellipsoid parameters. */
-   j = iauEform ( n, &a, &f );
-
-/* If OK, transform x,y,z to longitude, geodetic latitude, height. */
-   if ( j == 0 ) {
-      j = iauGc2gde ( a, f, xyz, elong, phi, height );
-      if ( j < 0 ) j = -2;
-   }
-
-/* Deal with any errors. */
-   if ( j < 0 ) {
-      *phi = -1e9;
-      *height = -1e9;
-   }
-
-/* Return the status. */
-   return j;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-
-}
-#include "sofam.h"
-
-int iauGc2gde ( double a, double f, double xyz[3],
-                double *elong, double *phi, double *height )
-/*
-**  - - - - - - - - - -
-**   i a u G c 2 g d e
-**  - - - - - - - - - -
-**
-**  Transform geocentric coordinates to geodetic for a reference
-**  ellipsoid of specified form.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     a       double     equatorial radius (Notes 2,4)
-**     f       double     flattening (Note 3)
-**     xyz     double[3]  geocentric vector (Note 4)
-**
-**  Returned:
-**     elong   double     longitude (radians, east +ve)
-**     phi     double     latitude (geodetic, radians)
-**     height  double     height above ellipsoid (geodetic, Note 4)
-**
-**  Returned (function value):
-**             int        status:  0 = OK
-**                                -1 = illegal f
-**                                -2 = illegal a
-**
-**  Notes:
-**
-**  1) This function is based on the GCONV2H Fortran subroutine by
-**     Toshio Fukushima (see reference).
-**
-**  2) The equatorial radius, a, can be in any units, but meters is
-**     the conventional choice.
-**
-**  3) The flattening, f, is (for the Earth) a value around 0.00335,
-**     i.e. around 1/298.
-**
-**  4) The equatorial radius, a, and the geocentric vector, xyz,
-**     must be given in the same units, and determine the units of
-**     the returned height, height.
-**
-**  5) If an error occurs (status < 0), elong, phi and height are
-**     unchanged.
-**
-**  6) The inverse transformation is performed in the function
-**     iauGd2gce.
-**
-**  7) The transformation for a standard ellipsoid (such as WGS84) can
-**     more conveniently be performed by calling iauGc2gd, which uses a
-**     numerical code to identify the required A and F values.
-**
-**  Reference:
-**
-**     Fukushima, T., "Transformation from Cartesian to geodetic
-**     coordinates accelerated by Halley's method", J.Geodesy (2006)
-**     79: 689-693
-**
-**  This revision:  2012 February 23
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double aeps2, e2, e4t, ec2, ec, b, x, y, z, p2, absz, p, s0, pn, zc,
-                 c0, c02, c03, s02, s03, a02, a0, a03, d0, f0, b0, s1,
-                 cc, s12, cc2;
-
-
-/* ------------- */
-/* Preliminaries */
-/* ------------- */
-
-/* Validate ellipsoid parameters. */
-   if ( f < 0.0 || f >= 1.0 ) return -1;
-   if ( a <= 0.0 ) return -2;
-
-/* Functions of ellipsoid parameters (with further validation of f). */
-   aeps2 = a*a * 1e-32;
-   e2 = (2.0 - f) * f;
-   e4t = e2*e2 * 1.5;
-   ec2 = 1.0 - e2;
-   if ( ec2 <= 0.0 ) return -1;
-   ec = sqrt(ec2);
-   b = a * ec;
-
-/* Cartesian components. */
-   x = xyz[0];
-   y = xyz[1];
-   z = xyz[2];
-
-/* Distance from polar axis squared. */
-   p2 = x*x + y*y;
-
-/* Longitude. */
-   *elong = p2 != 0.0 ? atan2(y, x) : 0.0;
-
-/* Unsigned z-coordinate. */
-   absz = fabs(z);
-
-/* Proceed unless polar case. */
-   if ( p2 > aeps2 ) {
-
-   /* Distance from polar axis. */
-      p = sqrt(p2);
-
-   /* Normalization. */
-      s0 = absz / a;
-      pn = p / a;
-      zc = ec * s0;
-
-   /* Prepare Newton correction factors. */
-      c0 = ec * pn;
-      c02 = c0 * c0;
-      c03 = c02 * c0;
-      s02 = s0 * s0;
-      s03 = s02 * s0;
-      a02 = c02 + s02;
-      a0 = sqrt(a02);
-      a03 = a02 * a0;
-      d0 = zc*a03 + e2*s03;
-      f0 = pn*a03 - e2*c03;
-
-   /* Prepare Halley correction factor. */
-      b0 = e4t * s02 * c02 * pn * (a0 - ec);
-      s1 = d0*f0 - b0*s0;
-      cc = ec * (f0*f0 - b0*c0);
-
-   /* Evaluate latitude and height. */
-      *phi = atan(s1/cc);
-      s12 = s1 * s1;
-      cc2 = cc * cc;
-      *height = (p*cc + absz*s1 - a * sqrt(ec2*s12 + cc2)) /
-                                                        sqrt(s12 + cc2);
-   } else {
-
-   /* Exception: pole. */
-      *phi = DPI / 2.0;
-      *height = absz - b;
-   }
-
-/* Restore sign of latitude. */
-   if ( z < 0 ) *phi = -*phi;
-
-/* OK status. */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-
-}
-#include "sofam.h"
-
-int iauGd2gc ( int n, double elong, double phi, double height,
-               double xyz[3] )
-/*
-**  - - - - - - - - -
-**   i a u G d 2 g c
-**  - - - - - - - - -
-**
-**  Transform geodetic coordinates to geocentric using the specified
-**  reference ellipsoid.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical transformation.
-**
-**  Given:
-**     n       int        ellipsoid identifier (Note 1)
-**     elong   double     longitude (radians, east +ve)
-**     phi     double     latitude (geodetic, radians, Note 3)
-**     height  double     height above ellipsoid (geodetic, Notes 2,3)
-**
-**  Returned:
-**     xyz     double[3]  geocentric vector (Note 2)
-**
-**  Returned (function value):
-**             int        status:  0 = OK
-**                                -1 = illegal identifier (Note 3)
-**                                -2 = illegal case (Note 3)
-**
-**  Notes:
-**
-**  1) The identifier n is a number that specifies the choice of
-**     reference ellipsoid.  The following are supported:
-**
-**        n    ellipsoid
-**
-**        1     WGS84
-**        2     GRS80
-**        3     WGS72
-**
-**     The n value has no significance outside the SOFA software.  For
-**     convenience, symbols WGS84 etc. are defined in sofam.h.
-**
-**  2) The height (height, given) and the geocentric vector (xyz,
-**     returned) are in meters.
-**
-**  3) No validation is performed on the arguments elong, phi and
-**     height.  An error status -1 means that the identifier n is
-**     illegal.  An error status -2 protects against cases that would
-**     lead to arithmetic exceptions.  In all error cases, xyz is set
-**     to zeros.
-**
-**  4) The inverse transformation is performed in the function iauGc2gd.
-**
-**  Called:
-**     iauEform     Earth reference ellipsoids
-**     iauGd2gce    geodetic to geocentric transformation, general
-**     iauZp        zero p-vector
-**
-**  This revision:  2012 February 23
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int j;
-   double a, f;
-
-
-/* Obtain reference ellipsoid parameters. */
-   j = iauEform ( n, &a, &f );
-
-/* If OK, transform longitude, geodetic latitude, height to x,y,z. */
-   if ( j == 0 ) {
-      j = iauGd2gce ( a, f, elong, phi, height, xyz );
-      if ( j != 0 ) j = -2;
-   }
-
-/* Deal with any errors. */
-   if ( j != 0 ) iauZp ( xyz );
-
-/* Return the status. */
-   return j;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-
-}
-#include "sofam.h"
-
-int iauGd2gce ( double a, double f, double elong, double phi,
-                double height, double xyz[3] )
-/*
-**  - - - - - - - - - -
-**   i a u G d 2 g c e
-**  - - - - - - - - - -
-**
-**  Transform geodetic coordinates to geocentric for a reference
-**  ellipsoid of specified form.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     a       double     equatorial radius (Notes 1,4)
-**     f       double     flattening (Notes 2,4)
-**     elong   double     longitude (radians, east +ve)
-**     phi     double     latitude (geodetic, radians, Note 4)
-**     height  double     height above ellipsoid (geodetic, Notes 3,4)
-**
-**  Returned:
-**     xyz     double[3]  geocentric vector (Note 3)
-**
-**  Returned (function value):
-**             int        status:  0 = OK
-**                                -1 = illegal case (Note 4)
-**  Notes:
-**
-**  1) The equatorial radius, a, can be in any units, but meters is
-**     the conventional choice.
-**
-**  2) The flattening, f, is (for the Earth) a value around 0.00335,
-**     i.e. around 1/298.
-**
-**  3) The equatorial radius, a, and the height, height, must be
-**     given in the same units, and determine the units of the
-**     returned geocentric vector, xyz.
-**
-**  4) No validation is performed on individual arguments.  The error
-**     status -1 protects against (unrealistic) cases that would lead
-**     to arithmetic exceptions.  If an error occurs, xyz is unchanged.
-**
-**  5) The inverse transformation is performed in the function
-**     iauGc2gde.
-**
-**  6) The transformation for a standard ellipsoid (such as WGS84) can
-**     more conveniently be performed by calling iauGd2gc,  which uses a
-**     numerical code to identify the required a and f values.
-**
-**  References:
-**
-**     Green, R.M., Spherical Astronomy, Cambridge University Press,
-**     (1985) Section 4.5, p96.
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     Section 4.22, p202.
-**
-**  This revision:  2012 February 23
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double sp, cp, w, d, ac, as, r;
-
-
-/* Functions of geodetic latitude. */
-   sp = sin(phi);
-   cp = cos(phi);
-   w = 1.0 - f;
-   w = w * w;
-   d = cp*cp + w*sp*sp;
-   if ( d <= 0.0 ) return -1;
-   ac = a / sqrt(d);
-   as = w * ac;
-
-/* Geocentric vector. */
-   r = (ac + height) * cp;
-   xyz[0] = r * cos(elong);
-   xyz[1] = r * sin(elong);
-   xyz[2] = (as + height) * sp;
-
-/* Success. */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-
-}
-#include "sofam.h"
-
-double iauGmst00(double uta, double utb, double tta, double ttb)
-/*
-**  - - - - - - - - - -
-**   i a u G m s t 0 0
-**  - - - - - - - - - -
-**
-**  Greenwich mean sidereal time (model consistent with IAU 2000
-**  resolutions).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
-**     tta,ttb    double    TT as a 2-part Julian Date (Notes 1,2)
-**
-**  Returned (function value):
-**                double    Greenwich mean sidereal time (radians)
-**
-**  Notes:
-**
-**  1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
-**     Julian Dates, apportioned in any convenient way between the
-**     argument pairs.  For example, JD=2450123.7 could be expressed in
-**     any of these ways, among others:
-**
-**            Part A         Part B
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable (in the case of UT;  the TT is not at all critical
-**     in this respect).  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  For UT, the date & time
-**     method is best matched to the algorithm that is used by the Earth
-**     Rotation Angle function, called internally:  maximum precision is
-**     delivered when the uta argument is for 0hrs UT1 on the day in
-**     question and the utb argument lies in the range 0 to 1, or vice
-**     versa.
-**
-**  2) Both UT1 and TT are required, UT1 to predict the Earth rotation
-**     and TT to predict the effects of precession.  If UT1 is used for
-**     both purposes, errors of order 100 microarcseconds result.
-**
-**  3) This GMST is compatible with the IAU 2000 resolutions and must be
-**     used only in conjunction with other IAU 2000 compatible
-**     components such as precession-nutation and equation of the
-**     equinoxes.
-**
-**  4) The result is returned in the range 0 to 2pi.
-**
-**  5) The algorithm is from Capitaine et al. (2003) and IERS
-**     Conventions 2003.
-**
-**  Called:
-**     iauEra00     Earth rotation angle, IAU 2000
-**     iauAnp       normalize angle into range 0 to 2pi
-**
-**  References:
-**
-**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
-**     implement the IAU 2000 definition of UT1", Astronomy &
-**     Astrophysics, 406, 1135-1149 (2003)
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2009 March 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t, gmst;
-
-
-/* TT Julian centuries since J2000.0. */
-   t = ((tta - DJ00) + ttb) / DJC;
-
-/* Greenwich Mean Sidereal Time, IAU 2000. */
-   gmst = iauAnp(iauEra00(uta, utb) +
-                   (     0.014506   +
-                   (  4612.15739966 +
-                   (     1.39667721 +
-                   (    -0.00009344 +
-                   (     0.00001882 )
-          * t) * t) * t) * t) * DAS2R);
-
-   return gmst;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauGmst06(double uta, double utb, double tta, double ttb)
-/*
-**  - - - - - - - - - -
-**   i a u G m s t 0 6
-**  - - - - - - - - - -
-**
-**  Greenwich mean sidereal time (consistent with IAU 2006 precession).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
-**     tta,ttb    double    TT as a 2-part Julian Date (Notes 1,2)
-**
-**  Returned (function value):
-**                double    Greenwich mean sidereal time (radians)
-**
-**  Notes:
-**
-**  1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
-**     Julian Dates, apportioned in any convenient way between the
-**     argument pairs.  For example, JD=2450123.7 could be expressed in
-**     any of these ways, among others:
-**
-**            Part A        Part B
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable (in the case of UT;  the TT is not at all critical
-**     in this respect).  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  For UT, the date & time
-**     method is best matched to the algorithm that is used by the Earth
-**     rotation angle function, called internally:  maximum precision is
-**     delivered when the uta argument is for 0hrs UT1 on the day in
-**     question and the utb argument lies in the range 0 to 1, or vice
-**     versa.
-**
-**  2) Both UT1 and TT are required, UT1 to predict the Earth rotation
-**     and TT to predict the effects of precession.  If UT1 is used for
-**     both purposes, errors of order 100 microarcseconds result.
-**
-**  3) This GMST is compatible with the IAU 2006 precession and must not
-**     be used with other precession models.
-**
-**  4) The result is returned in the range 0 to 2pi.
-**
-**  Called:
-**     iauEra00     Earth rotation angle, IAU 2000
-**     iauAnp       normalize angle into range 0 to 2pi
-**
-**  Reference:
-**
-**     Capitaine, N., Wallace, P.T. & Chapront, J., 2005,
-**     Astron.Astrophys. 432, 355
-**
-**  This revision:  2008 May 24
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t, gmst;
-
-
-/* TT Julian centuries since J2000.0. */
-   t = ((tta - DJ00) + ttb) / DJC;
-
-/* Greenwich mean sidereal time, IAU 2006. */
-   gmst = iauAnp(iauEra00(uta, utb) +
-                  (    0.014506     +
-                  (  4612.156534    +
-                  (     1.3915817   +
-                  (    -0.00000044  +
-                  (    -0.000029956 +
-                  (    -0.0000000368 )
-          * t) * t) * t) * t) * t) * DAS2R);
-
-   return gmst;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauGmst82(double dj1, double dj2)
-/*
-**  - - - - - - - - - -
-**   i a u G m s t 8 2
-**  - - - - - - - - - -
-**
-**  Universal Time to Greenwich mean sidereal time (IAU 1982 model).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     dj1,dj2    double    UT1 Julian Date (see note)
-**
-**  Returned (function value):
-**                double    Greenwich mean sidereal time (radians)
-**
-**  Notes:
-**
-**  1) The UT1 date dj1+dj2 is a Julian Date, apportioned in any
-**     convenient way between the arguments dj1 and dj2.  For example,
-**     JD(UT1)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**             dj1            dj2
-**
-**         2450123.7D0        0D0        (JD method)
-**          2451545D0      -1421.3D0     (J2000 method)
-**         2400000.5D0     50123.2D0     (MJD method)
-**         2450123.5D0       0.2D0       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  The date & time method is
-**     best matched to the algorithm used:  maximum accuracy (or, at
-**     least, minimum noise) is delivered when the dj1 argument is for
-**     0hrs UT1 on the day in question and the dj2 argument lies in the
-**     range 0 to 1, or vice versa.
-**
-**  2) The algorithm is based on the IAU 1982 expression.  This is
-**     always described as giving the GMST at 0 hours UT1.  In fact, it
-**     gives the difference between the GMST and the UT, the steady
-**     4-minutes-per-day drawing-ahead of ST with respect to UT.  When
-**     whole days are ignored, the expression happens to equal the GMST
-**     at 0 hours UT1 each day.
-**
-**  3) In this function, the entire UT1 (the sum of the two arguments
-**     dj1 and dj2) is used directly as the argument for the standard
-**     formula, the constant term of which is adjusted by 12 hours to
-**     take account of the noon phasing of Julian Date.  The UT1 is then
-**     added, but omitting whole days to conserve accuracy.
-**
-**  Called:
-**     iauAnp       normalize angle into range 0 to 2pi
-**
-**  References:
-**
-**     Transactions of the International Astronomical Union,
-**     XVIII B, 67 (1983).
-**
-**     Aoki et al., Astron. Astrophys. 105, 359-361 (1982).
-**
-**  This revision:  2008 May 24
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Coefficients of IAU 1982 GMST-UT1 model */
-   double A = 24110.54841  -  DAYSEC / 2.0;
-   double B = 8640184.812866;
-   double C = 0.093104;
-   double D =  -6.2e-6;
-
-/* Note: the first constant, A, has to be adjusted by 12 hours */
-/* because the UT1 is supplied as a Julian date, which begins  */
-/* at noon.                                                    */
-
-   double d1, d2, t, f, gmst;
-
-
-/* Julian centuries since fundamental epoch. */
-   if (dj1 < dj2) {
-      d1 = dj1;
-      d2 = dj2;
-   } else {
-      d1 = dj2;
-      d2 = dj1;
-   }
-   t = (d1 + (d2 - DJ00)) / DJC;
-
-/* Fractional part of JD(UT1), in seconds. */
-   f = DAYSEC * (fmod(d1, 1.0) + fmod(d2, 1.0));
-
-/* GMST at this UT1. */
-   gmst = iauAnp(DS2R * ((A + (B + (C + D * t) * t) * t) + f));
-
-   return gmst;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauGst00a(double uta, double utb, double tta, double ttb)
-/*
-**  - - - - - - - - - -
-**   i a u G s t 0 0 a
-**  - - - - - - - - - -
-**
-**  Greenwich apparent sidereal time (consistent with IAU 2000
-**  resolutions).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
-**     tta,ttb    double    TT as a 2-part Julian Date (Notes 1,2)
-**
-**  Returned (function value):
-**                double    Greenwich apparent sidereal time (radians)
-**
-**  Notes:
-**
-**  1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
-**     Julian Dates, apportioned in any convenient way between the
-**     argument pairs.  For example, JD=2450123.7 could be expressed in
-**     any of these ways, among others:
-**
-**            Part A        Part B
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable (in the case of UT;  the TT is not at all critical
-**     in this respect).  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  For UT, the date & time
-**     method is best matched to the algorithm that is used by the Earth
-**     Rotation Angle function, called internally:  maximum precision is
-**     delivered when the uta argument is for 0hrs UT1 on the day in
-**     question and the utb argument lies in the range 0 to 1, or vice
-**     versa.
-**
-**  2) Both UT1 and TT are required, UT1 to predict the Earth rotation
-**     and TT to predict the effects of precession-nutation.  If UT1 is
-**     used for both purposes, errors of order 100 microarcseconds
-**     result.
-**
-**  3) This GAST is compatible with the IAU 2000 resolutions and must be
-**     used only in conjunction with other IAU 2000 compatible
-**     components such as precession-nutation.
-**
-**  4) The result is returned in the range 0 to 2pi.
-**
-**  5) The algorithm is from Capitaine et al. (2003) and IERS
-**     Conventions 2003.
-**
-**  Called:
-**     iauGmst00    Greenwich mean sidereal time, IAU 2000
-**     iauEe00a     equation of the equinoxes, IAU 2000A
-**     iauAnp       normalize angle into range 0 to 2pi
-**
-**  References:
-**
-**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
-**     implement the IAU 2000 definition of UT1", Astronomy &
-**     Astrophysics, 406, 1135-1149 (2003)
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2008 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double gmst00, ee00a, gst;
-
-
-   gmst00 = iauGmst00(uta, utb, tta, ttb);
-   ee00a = iauEe00a(tta, ttb);
-   gst = iauAnp(gmst00 + ee00a);
-
-   return gst;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauGst00b(double uta, double utb)
-/*
-**  - - - - - - - - - -
-**   i a u G s t 0 0 b
-**  - - - - - - - - - -
-**
-**  Greenwich apparent sidereal time (consistent with IAU 2000
-**  resolutions but using the truncated nutation model IAU 2000B).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
-**
-**  Returned (function value):
-**                double    Greenwich apparent sidereal time (radians)
-**
-**  Notes:
-**
-**  1) The UT1 date uta+utb is a Julian Date, apportioned in any
-**     convenient way between the argument pair.  For example,
-**     JD=2450123.7 could be expressed in any of these ways, among
-**     others:
-**
-**             uta            utb
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in cases
-**     where the loss of several decimal digits of resolution is
-**     acceptable.  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  For UT, the date & time
-**     method is best matched to the algorithm that is used by the Earth
-**     Rotation Angle function, called internally:  maximum precision is
-**     delivered when the uta argument is for 0hrs UT1 on the day in
-**     question and the utb argument lies in the range 0 to 1, or vice
-**     versa.
-**
-**  2) The result is compatible with the IAU 2000 resolutions, except
-**     that accuracy has been compromised for the sake of speed and
-**     convenience in two respects:
-**
-**     . UT is used instead of TDB (or TT) to compute the precession
-**       component of GMST and the equation of the equinoxes.  This
-**       results in errors of order 0.1 mas at present.
-**
-**     . The IAU 2000B abridged nutation model (McCarthy & Luzum, 2001)
-**       is used, introducing errors of up to 1 mas.
-**
-**  3) This GAST is compatible with the IAU 2000 resolutions and must be
-**     used only in conjunction with other IAU 2000 compatible
-**     components such as precession-nutation.
-**
-**  4) The result is returned in the range 0 to 2pi.
-**
-**  5) The algorithm is from Capitaine et al. (2003) and IERS
-**     Conventions 2003.
-**
-**  Called:
-**     iauGmst00    Greenwich mean sidereal time, IAU 2000
-**     iauEe00b     equation of the equinoxes, IAU 2000B
-**     iauAnp       normalize angle into range 0 to 2pi
-**
-**  References:
-**
-**     Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
-**     implement the IAU 2000 definition of UT1", Astronomy &
-**     Astrophysics, 406, 1135-1149 (2003)
-**
-**     McCarthy, D.D. & Luzum, B.J., "An abridged model of the
-**     precession-nutation of the celestial pole", Celestial Mechanics &
-**     Dynamical Astronomy, 85, 37-49 (2003)
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2008 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double gmst00, ee00b, gst;
-
-
-   gmst00 = iauGmst00(uta, utb, uta, utb);
-   ee00b = iauEe00b(uta, utb);
-   gst = iauAnp(gmst00 + ee00b);
-
-   return gst;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauGst06(double uta, double utb, double tta, double ttb,
-                double rnpb[3][3])
-/*
-**  - - - - - - - - -
-**   i a u G s t 0 6
-**  - - - - - - - - -
-**
-**  Greenwich apparent sidereal time, IAU 2006, given the NPB matrix.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     uta,utb  double        UT1 as a 2-part Julian Date (Notes 1,2)
-**     tta,ttb  double        TT as a 2-part Julian Date (Notes 1,2)
-**     rnpb     double[3][3]  nutation x precession x bias matrix
-**
-**  Returned (function value):
-**              double        Greenwich apparent sidereal time (radians)
-**
-**  Notes:
-**
-**  1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
-**     Julian Dates, apportioned in any convenient way between the
-**     argument pairs.  For example, JD=2450123.7 could be expressed in
-**     any of these ways, among others:
-**
-**            Part A        Part B
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable (in the case of UT;  the TT is not at all critical
-**     in this respect).  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  For UT, the date & time
-**     method is best matched to the algorithm that is used by the Earth
-**     rotation angle function, called internally:  maximum precision is
-**     delivered when the uta argument is for 0hrs UT1 on the day in
-**     question and the utb argument lies in the range 0 to 1, or vice
-**     versa.
-**
-**  2) Both UT1 and TT are required, UT1 to predict the Earth rotation
-**     and TT to predict the effects of precession-nutation.  If UT1 is
-**     used for both purposes, errors of order 100 microarcseconds
-**     result.
-**
-**  3) Although the function uses the IAU 2006 series for s+XY/2, it is
-**     otherwise independent of the precession-nutation model and can in
-**     practice be used with any equinox-based NPB matrix.
-**
-**  4) The result is returned in the range 0 to 2pi.
-**
-**  Called:
-**     iauBpn2xy    extract CIP X,Y coordinates from NPB matrix
-**     iauS06       the CIO locator s, given X,Y, IAU 2006
-**     iauAnp       normalize angle into range 0 to 2pi
-**     iauEra00     Earth rotation angle, IAU 2000
-**     iauEors      equation of the origins, given NPB matrix and s
-**
-**  Reference:
-**
-**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
-**
-**  This revision:  2008 May 24
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double x, y, s, era, eors, gst;
-
-
-/* Extract CIP coordinates. */
-   iauBpn2xy(rnpb, &x, &y);
-
-/* The CIO locator, s. */
-   s = iauS06(tta, ttb, x, y);
-
-/* Greenwich apparent sidereal time. */
-   era = iauEra00(uta, utb);
-   eors = iauEors(rnpb, s);
-   gst = iauAnp(era - eors);
-
-   return gst;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauGst06a(double uta, double utb, double tta, double ttb)
-/*
-**  - - - - - - - - - -
-**   i a u G s t 0 6 a
-**  - - - - - - - - - -
-**
-**  Greenwich apparent sidereal time (consistent with IAU 2000 and 2006
-**  resolutions).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
-**     tta,ttb    double    TT as a 2-part Julian Date (Notes 1,2)
-**
-**  Returned (function value):
-**                double    Greenwich apparent sidereal time (radians)
-**
-**  Notes:
-**
-**  1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
-**     Julian Dates, apportioned in any convenient way between the
-**     argument pairs.  For example, JD=2450123.7 could be expressed in
-**     any of these ways, among others:
-**
-**            Part A        Part B
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable (in the case of UT;  the TT is not at all critical
-**     in this respect).  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  For UT, the date & time
-**     method is best matched to the algorithm that is used by the Earth
-**     rotation angle function, called internally:  maximum precision is
-**     delivered when the uta argument is for 0hrs UT1 on the day in
-**     question and the utb argument lies in the range 0 to 1, or vice
-**     versa.
-**
-**  2) Both UT1 and TT are required, UT1 to predict the Earth rotation
-**     and TT to predict the effects of precession-nutation.  If UT1 is
-**     used for both purposes, errors of order 100 microarcseconds
-**     result.
-**
-**  3) This GAST is compatible with the IAU 2000/2006 resolutions and
-**     must be used only in conjunction with IAU 2006 precession and
-**     IAU 2000A nutation.
-**
-**  4) The result is returned in the range 0 to 2pi.
-**
-**  Called:
-**     iauPnm06a    classical NPB matrix, IAU 2006/2000A
-**     iauGst06     Greenwich apparent ST, IAU 2006, given NPB matrix
-**
-**  Reference:
-**
-**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
-**
-**  This revision:  2008 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rnpb[3][3], gst;
-
-
-/* Classical nutation x precession x bias matrix, IAU 2000A. */
-   iauPnm06a(tta, ttb, rnpb);
-
-/* Greenwich apparent sidereal time. */
-   gst = iauGst06(uta, utb, tta, ttb, rnpb);
-
-   return gst;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofa.h"
-
-double iauGst94(double uta, double utb)
-/*
-**  - - - - - - - - -
-**   i a u G s t 9 4
-**  - - - - - - - - -
-**
-**  Greenwich apparent sidereal time (consistent with IAU 1982/94
-**  resolutions).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     uta,utb    double    UT1 as a 2-part Julian Date (Notes 1,2)
-**
-**  Returned (function value):
-**                double    Greenwich apparent sidereal time (radians)
-**
-**  Notes:
-**
-**  1) The UT1 date uta+utb is a Julian Date, apportioned in any
-**     convenient way between the argument pair.  For example,
-**     JD=2450123.7 could be expressed in any of these ways, among
-**     others:
-**
-**             uta            utb
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in cases
-**     where the loss of several decimal digits of resolution is
-**     acceptable.  The J2000 and MJD methods are good compromises
-**     between resolution and convenience.  For UT, the date & time
-**     method is best matched to the algorithm that is used by the Earth
-**     Rotation Angle function, called internally:  maximum precision is
-**     delivered when the uta argument is for 0hrs UT1 on the day in
-**     question and the utb argument lies in the range 0 to 1, or vice
-**     versa.
-**
-**  2) The result is compatible with the IAU 1982 and 1994 resolutions,
-**     except that accuracy has been compromised for the sake of
-**     convenience in that UT is used instead of TDB (or TT) to compute
-**     the equation of the equinoxes.
-**
-**  3) This GAST must be used only in conjunction with contemporaneous
-**     IAU standards such as 1976 precession, 1980 obliquity and 1982
-**     nutation.  It is not compatible with the IAU 2000 resolutions.
-**
-**  4) The result is returned in the range 0 to 2pi.
-**
-**  Called:
-**     iauGmst82    Greenwich mean sidereal time, IAU 1982
-**     iauEqeq94    equation of the equinoxes, IAU 1994
-**     iauAnp       normalize angle into range 0 to 2pi
-**
-**  References:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992)
-**
-**     IAU Resolution C7, Recommendation 3 (1994)
-**
-**  This revision:  2008 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double gmst82, eqeq94, gst;
-
-
-   gmst82 = iauGmst82(uta, utb);
-   eqeq94 = iauEqeq94(uta, utb);
-   gst = iauAnp(gmst82  + eqeq94);
-
-   return gst;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauH2fk5(double rh, double dh,
-              double drh, double ddh, double pxh, double rvh,
-              double *r5, double *d5,
-              double *dr5, double *dd5, double *px5, double *rv5)
-/*
-**  - - - - - - - - -
-**   i a u H 2 f k 5
-**  - - - - - - - - -
-**
-**  Transform Hipparcos star data into the FK5 (J2000.0) system.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given (all Hipparcos, epoch J2000.0):
-**     rh      double    RA (radians)
-**     dh      double    Dec (radians)
-**     drh     double    proper motion in RA (dRA/dt, rad/Jyear)
-**     ddh     double    proper motion in Dec (dDec/dt, rad/Jyear)
-**     pxh     double    parallax (arcsec)
-**     rvh     double    radial velocity (km/s, positive = receding)
-**
-**  Returned (all FK5, equinox J2000.0, epoch J2000.0):
-**     r5      double    RA (radians)
-**     d5      double    Dec (radians)
-**     dr5     double    proper motion in RA (dRA/dt, rad/Jyear)
-**     dd5     double    proper motion in Dec (dDec/dt, rad/Jyear)
-**     px5     double    parallax (arcsec)
-**     rv5     double    radial velocity (km/s, positive = receding)
-**
-**  Notes:
-**
-**  1) This function transforms Hipparcos star positions and proper
-**     motions into FK5 J2000.0.
-**
-**  2) The proper motions in RA are dRA/dt rather than
-**     cos(Dec)*dRA/dt, and are per year rather than per century.
-**
-**  3) The FK5 to Hipparcos transformation is modeled as a pure
-**     rotation and spin;  zonal errors in the FK5 catalog are not
-**     taken into account.
-**
-**  4) See also iauFk52h, iauFk5hz, iauHfk5z.
-**
-**  Called:
-**     iauStarpv    star catalog data to space motion pv-vector
-**     iauFk5hip    FK5 to Hipparcos rotation and spin
-**     iauRv2m      r-vector to r-matrix
-**     iauRxp       product of r-matrix and p-vector
-**     iauTrxp      product of transpose of r-matrix and p-vector
-**     iauPxp       vector product of two p-vectors
-**     iauPmp       p-vector minus p-vector
-**     iauPvstar    space motion pv-vector to star catalog data
-**
-**  Reference:
-**
-**     F.Mignard & M.Froeschle, Astron. Astrophys. 354, 732-739 (2000).
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int i;
-   double pvh[2][3], r5h[3][3], s5h[3], sh[3], wxp[3], vv[3], pv5[2][3];
-
-
-/* Hipparcos barycentric position/velocity pv-vector (normalized). */
-   iauStarpv(rh, dh, drh, ddh, pxh, rvh, pvh);
-
-/* FK5 to Hipparcos orientation matrix and spin vector. */
-   iauFk5hip(r5h, s5h);
-
-/* Make spin units per day instead of per year. */
-   for ( i = 0; i < 3; s5h[i++] /= 365.25 );
-
-/* Orient the spin into the Hipparcos system. */
-   iauRxp(r5h, s5h, sh);
-
-/* De-orient the Hipparcos position into the FK5 system. */
-   iauTrxp(r5h, pvh[0], pv5[0]);
-
-/* Apply spin to the position giving an extra space motion component. */
-   iauPxp(pvh[0], sh, wxp);
-
-/* Subtract this component from the Hipparcos space motion. */
-   iauPmp(pvh[1], wxp, vv);
-
-/* De-orient the Hipparcos space motion into the FK5 system. */
-   iauTrxp(r5h, vv, pv5[1]);
-
-/* FK5 pv-vector to spherical. */
-   iauPvstar(pv5, r5, d5, dr5, dd5, px5, rv5);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauHfk5z(double rh, double dh, double date1, double date2,
-              double *r5, double *d5, double *dr5, double *dd5)
-/*
-**  - - - - - - - - -
-**   i a u H f k 5 z
-**  - - - - - - - - -
-**
-**  Transform a Hipparcos star position into FK5 J2000.0, assuming
-**  zero Hipparcos proper motion.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     rh            double    Hipparcos RA (radians)
-**     dh            double    Hipparcos Dec (radians)
-**     date1,date2   double    TDB date (Note 1)
-**
-**  Returned (all FK5, equinox J2000.0, date date1+date2):
-**     r5            double    RA (radians)
-**     d5            double    Dec (radians)
-**     dr5           double    FK5 RA proper motion (rad/year, Note 4)
-**     dd5           double    Dec proper motion (rad/year, Note 4)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt.
-**
-**  3) The FK5 to Hipparcos transformation is modeled as a pure rotation
-**     and spin;  zonal errors in the FK5 catalogue are not taken into
-**     account.
-**
-**  4) It was the intention that Hipparcos should be a close
-**     approximation to an inertial frame, so that distant objects have
-**     zero proper motion;  such objects have (in general) non-zero
-**     proper motion in FK5, and this function returns those fictitious
-**     proper motions.
-**
-**  5) The position returned by this function is in the FK5 J2000.0
-**     reference system but at date date1+date2.
-**
-**  6) See also iauFk52h, iauH2fk5, iauFk5zhz.
-**
-**  Called:
-**     iauS2c       spherical coordinates to unit vector
-**     iauFk5hip    FK5 to Hipparcos rotation and spin
-**     iauRxp       product of r-matrix and p-vector
-**     iauSxp       multiply p-vector by scalar
-**     iauRxr       product of two r-matrices
-**     iauTrxp      product of transpose of r-matrix and p-vector
-**     iauPxp       vector product of two p-vectors
-**     iauPv2s      pv-vector to spherical
-**     iauAnp       normalize angle into range 0 to 2pi
-**
-**  Reference:
-**
-**     F.Mignard & M.Froeschle, 2000, Astron.Astrophys. 354, 732-739.
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t, ph[3], r5h[3][3], s5h[3], sh[3], vst[3],
-   rst[3][3], r5ht[3][3], pv5e[2][3], vv[3],
-   w, r, v;
-
-
-/* Time interval from fundamental epoch J2000.0 to given date (JY). */
-   t = ((date1 - DJ00) + date2) / DJY;
-
-/* Hipparcos barycentric position vector (normalized). */
-   iauS2c(rh, dh, ph);
-
-/* FK5 to Hipparcos orientation matrix and spin vector. */
-   iauFk5hip(r5h, s5h);
-
-/* Rotate the spin into the Hipparcos system. */
-   iauRxp(r5h, s5h, sh);
-
-/* Accumulated Hipparcos wrt FK5 spin over that interval. */
-   iauSxp(t, s5h, vst);
-
-/* Express the accumulated spin as a rotation matrix. */
-   iauRv2m(vst, rst);
-
-/* Rotation matrix:  accumulated spin, then FK5 to Hipparcos. */
-   iauRxr(r5h, rst, r5ht);
-
-/* De-orient & de-spin the Hipparcos position into FK5 J2000.0. */
-   iauTrxp(r5ht, ph, pv5e[0]);
-
-/* Apply spin to the position giving a space motion. */
-   iauPxp(sh, ph, vv);
-
-/* De-orient & de-spin the Hipparcos space motion into FK5 J2000.0. */
-   iauTrxp(r5ht, vv, pv5e[1]);
-
-/* FK5 position/velocity pv-vector to spherical. */
-   iauPv2s(pv5e, &w, d5, &r, dr5, dd5, &v);
-   *r5 = iauAnp(w);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauIr(double r[3][3])
-/*
-**  - - - - - -
-**   i a u I r
-**  - - - - - -
-**
-**  Initialize an r-matrix to the identity matrix.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Returned:
-**     r       double[3][3]    r-matrix
-**
-**  Called:
-**     iauZr        zero r-matrix
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauZr(r);
-   r[0][0] = 1.0;
-   r[1][1] = 1.0;
-   r[2][2] = 1.0;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauJd2cal(double dj1, double dj2,
-              int *iy, int *im, int *id, double *fd)
-/*
-**  - - - - - - - - - -
-**   i a u J d 2 c a l
-**  - - - - - - - - - -
-**
-**  Julian Date to Gregorian year, month, day, and fraction of a day.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     dj1,dj2   double   Julian Date (Notes 1, 2)
-**
-**  Returned (arguments):
-**     iy        int      year
-**     im        int      month
-**     id        int      day
-**     fd        double   fraction of day
-**
-**  Returned (function value):
-**               int      status:
-**                           0 = OK
-**                          -1 = unacceptable date (Note 3)
-**
-**  Notes:
-**
-**  1) The earliest valid date is -68569.5 (-4900 March 1).  The
-**     largest value accepted is 10^9.
-**
-**  2) The Julian Date is apportioned in any convenient way between
-**     the arguments dj1 and dj2.  For example, JD=2450123.7 could
-**     be expressed in any of these ways, among others:
-**
-**            dj1             dj2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**  3) In early eras the conversion is from the "proleptic Gregorian
-**     calendar";  no account is taken of the date(s) of adoption of
-**     the Gregorian calendar, nor is the AD/BC numbering convention
-**     observed.
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     Section 12.92 (p604).
-**
-**  This revision:  2008 May 26
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Minimum and maximum allowed JD */
-   static const double djmin = -68569.5;
-   static const double djmax = 1e9;
-
-   long jd, l, n, i, k;
-   double dj, d1, d2, f1, f2, f, d;
-
-
-/* Verify date is acceptable. */
-   dj = dj1 + dj2;
-   if (dj < djmin || dj > djmax) return -1;
-
-/* Copy the date, big then small, and re-align to midnight. */
-   if (dj1 >= dj2) {
-      d1 = dj1;
-      d2 = dj2;
-   } else {
-      d1 = dj2;
-      d2 = dj1;
-   }
-   d2 -= 0.5;
-
-/* Separate day and fraction. */
-   f1 = fmod(d1, 1.0);
-   f2 = fmod(d2, 1.0);
-   f = fmod(f1 + f2, 1.0);
-   if (f < 0.0) f += 1.0;
-   d = floor(d1 - f1) + floor(d2 - f2) + floor(f1 + f2 - f);
-   jd = (long) floor(d) + 1L;
-
-/* Express day in Gregorian calendar. */
-   l = jd + 68569L;
-   n = (4L * l) / 146097L;
-   l -= (146097L * n + 3L) / 4L;
-   i = (4000L * (l + 1L)) / 1461001L;
-   l -= (1461L * i) / 4L - 31L;
-   k = (80L * l) / 2447L;
-   *id = (int) (l - (2447L * k) / 80L);
-   l = k / 11L;
-   *im = (int) (k + 2L - 12L * l);
-   *iy = (int) (100L * (n - 49L) + i + l);
-   *fd = f;
-
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauJdcalf(int ndp, double dj1, double dj2, int iymdf[4])
-/*
-**  - - - - - - - - - -
-**   i a u J d c a l f
-**  - - - - - - - - - -
-**
-**  Julian Date to Gregorian Calendar, expressed in a form convenient
-**  for formatting messages:  rounded to a specified precision.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     ndp       int      number of decimal places of days in fraction
-**     dj1,dj2   double   dj1+dj2 = Julian Date (Note 1)
-**
-**  Returned:
-**     iymdf     int[4]   year, month, day, fraction in Gregorian
-**                        calendar
-**
-**  Returned (function value):
-**               int      status:
-**                          -1 = date out of range
-**                           0 = OK
-**                          +1 = NDP not 0-9 (interpreted as 0)
-**
-**  Notes:
-**
-**  1) The Julian Date is apportioned in any convenient way between
-**     the arguments dj1 and dj2.  For example, JD=2450123.7 could
-**     be expressed in any of these ways, among others:
-**
-**             dj1            dj2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**  2) In early eras the conversion is from the "Proleptic Gregorian
-**     Calendar";  no account is taken of the date(s) of adoption of
-**     the Gregorian Calendar, nor is the AD/BC numbering convention
-**     observed.
-**
-**  3) Refer to the function iauJd2cal.
-**
-**  4) NDP should be 4 or less if internal overflows are to be
-**     avoided on machines which use 16-bit integers.
-**
-**  Called:
-**     iauJd2cal    JD to Gregorian calendar
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     Section 12.92 (p604).
-**
-**  This revision:  2010 July 27
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int j, js;
-   double denom, d1, d2, f1, f2, f;
-
-
-/* Denominator of fraction (e.g. 100 for 2 decimal places). */
-   if ((ndp >= 0) && (ndp <= 9)) {
-      j = 0;
-      denom = pow(10.0, ndp);
-   } else {
-      j = 1;
-      denom = 1.0;
-   }
-
-/* Copy the date, big then small, and realign to midnight. */
-   if (dj1 >= dj2) {
-      d1 = dj1;
-      d2 = dj2;
-   } else {
-      d1 = dj2;
-      d2 = dj1;
-   }
-   d2 -= 0.5;
-
-/* Separate days and fractions. */
-   f1 = fmod(d1, 1.0);
-   f2 = fmod(d2, 1.0);
-   d1 = floor(d1 - f1);
-   d2 = floor(d2 - f2);
-
-/* Round the total fraction to the specified number of places. */
-   f = floor((f1+f2)*denom + 0.5) / denom;
-
-/* Re-assemble the rounded date and re-align to noon. */
-   d2 += f + 0.5;
-
-/* Convert to Gregorian calendar. */
-   js = iauJd2cal(d1, d2, &iymdf[0], &iymdf[1], &iymdf[2], &f);
-   if (js == 0) {
-      iymdf[3] = (int) (f * denom);
-   } else {
-      j = js;
-   }
-
-/* Return the status. */
-   return j;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauNum00a(double date1, double date2, double rmatn[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u N u m 0 0 a
-**  - - - - - - - - - -
-**
-**  Form the matrix of nutation for a given date, IAU 2000A model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rmatn        double[3][3]    nutation matrix
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix operates in the sense V(true) = rmatn * V(mean), where
-**     the p-vector V(true) is with respect to the true equatorial triad
-**     of date and the p-vector V(mean) is with respect to the mean
-**     equatorial triad of date.
-**
-**  3) A faster, but slightly less accurate result (about 1 mas), can be
-**     obtained by using instead the iauNum00b function.
-**
-**  Called:
-**     iauPn00a     bias/precession/nutation, IAU 2000A
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     Section 3.222-3 (p114).
-**
-**  This revision:  2008 May 12
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rbpn[3][3];
-
-
-/* Obtain the required matrix (discarding other results). */
-   iauPn00a(date1, date2,
-            &dpsi, &deps, &epsa, rb, rp, rbp, rmatn, rbpn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauNum00b(double date1, double date2, double rmatn[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u N u m 0 0 b
-**  - - - - - - - - - -
-**
-**  Form the matrix of nutation for a given date, IAU 2000B model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double         TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rmatn        double[3][3]   nutation matrix
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix operates in the sense V(true) = rmatn * V(mean), where
-**     the p-vector V(true) is with respect to the true equatorial triad
-**     of date and the p-vector V(mean) is with respect to the mean
-**     equatorial triad of date.
-**
-**  3) The present function is faster, but slightly less accurate (about
-**     1 mas), than the iauNum00a function.
-**
-**  Called:
-**     iauPn00b     bias/precession/nutation, IAU 2000B
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     Section 3.222-3 (p114).
-**
-**  This revision:  2008 May 12
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rbpn[3][3];
-
-
-/* Obtain the required matrix (discarding other results). */
-   iauPn00b(date1, date2,
-            &dpsi, &deps, &epsa, rb, rp, rbp, rmatn, rbpn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauNum06a(double date1, double date2, double rmatn[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u N u m 0 6 a
-**  - - - - - - - - - -
-**
-**  Form the matrix of nutation for a given date, IAU 2006/2000A model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2   double          TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rmatn         double[3][3]    nutation matrix
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix operates in the sense V(true) = rmatn * V(mean), where
-**     the p-vector V(true) is with respect to the true equatorial triad
-**     of date and the p-vector V(mean) is with respect to the mean
-**     equatorial triad of date.
-**
-**  Called:
-**     iauObl06     mean obliquity, IAU 2006
-**     iauNut06a    nutation, IAU 2006/2000A
-**     iauNumat     form nutation matrix
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     Section 3.222-3 (p114).
-**
-**  This revision:  2008 May 12
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double eps, dp, de;
-
-
-/* Mean obliquity. */
-   eps = iauObl06(date1, date2);
-
-/* Nutation components. */
-   iauNut06a(date1, date2, &dp, &de);
-
-/* Nutation matrix. */
-   iauNumat(eps, dp, de, rmatn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauNumat(double epsa, double dpsi, double deps, double rmatn[3][3])
-/*
-**  - - - - - - - - -
-**   i a u N u m a t
-**  - - - - - - - - -
-**
-**  Form the matrix of nutation.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     epsa        double         mean obliquity of date (Note 1)
-**     dpsi,deps   double         nutation (Note 2)
-**
-**  Returned:
-**     rmatn       double[3][3]   nutation matrix (Note 3)
-**
-**  Notes:
-**
-**
-**  1) The supplied mean obliquity epsa, must be consistent with the
-**     precession-nutation models from which dpsi and deps were obtained.
-**
-**  2) The caller is responsible for providing the nutation components;
-**     they are in longitude and obliquity, in radians and are with
-**     respect to the equinox and ecliptic of date.
-**
-**  3) The matrix operates in the sense V(true) = rmatn * V(mean),
-**     where the p-vector V(true) is with respect to the true
-**     equatorial triad of date and the p-vector V(mean) is with
-**     respect to the mean equatorial triad of date.
-**
-**  Called:
-**     iauIr        initialize r-matrix to identity
-**     iauRx        rotate around X-axis
-**     iauRz        rotate around Z-axis
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     Section 3.222-3 (p114).
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Build the rotation matrix. */
-   iauIr(rmatn);
-   iauRx(epsa, rmatn);
-   iauRz(-dpsi, rmatn);
-   iauRx(-(epsa + deps), rmatn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauNut00a(double date1, double date2, double *dpsi, double *deps)
-/*
-**  - - - - - - - - - -
-**   i a u N u t 0 0 a
-**  - - - - - - - - - -
-**
-**  Nutation, IAU 2000A model (MHB2000 luni-solar and planetary nutation
-**  with free core nutation omitted).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2   double   TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     dpsi,deps     double   nutation, luni-solar + planetary (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The nutation components in longitude and obliquity are in radians
-**     and with respect to the equinox and ecliptic of date.  The
-**     obliquity at J2000.0 is assumed to be the Lieske et al. (1977)
-**     value of 84381.448 arcsec.
-**
-**     Both the luni-solar and planetary nutations are included.  The
-**     latter are due to direct planetary nutations and the
-**     perturbations of the lunar and terrestrial orbits.
-**
-**  3) The function computes the MHB2000 nutation series with the
-**     associated corrections for planetary nutations.  It is an
-**     implementation of the nutation part of the IAU 2000A precession-
-**     nutation model, formally adopted by the IAU General Assembly in
-**     2000, namely MHB2000 (Mathews et al. 2002), but with the free
-**     core nutation (FCN - see Note 4) omitted.
-**
-**  4) The full MHB2000 model also contains contributions to the
-**     nutations in longitude and obliquity due to the free-excitation
-**     of the free-core-nutation during the period 1979-2000.  These FCN
-**     terms, which are time-dependent and unpredictable, are NOT
-**     included in the present function and, if required, must be
-**     independently computed.  With the FCN corrections included, the
-**     present function delivers a pole which is at current epochs
-**     accurate to a few hundred microarcseconds.  The omission of FCN
-**     introduces further errors of about that size.
-**
-**  5) The present function provides classical nutation.  The MHB2000
-**     algorithm, from which it is adapted, deals also with (i) the
-**     offsets between the GCRS and mean poles and (ii) the adjustments
-**     in longitude and obliquity due to the changed precession rates.
-**     These additional functions, namely frame bias and precession
-**     adjustments, are supported by the SOFA functions iauBi00  and
-**     iauPr00.
-**
-**  6) The MHB2000 algorithm also provides "total" nutations, comprising
-**     the arithmetic sum of the frame bias, precession adjustments,
-**     luni-solar nutation and planetary nutation.  These total
-**     nutations can be used in combination with an existing IAU 1976
-**     precession implementation, such as iauPmat76,  to deliver GCRS-
-**     to-true predictions of sub-mas accuracy at current dates.
-**     However, there are three shortcomings in the MHB2000 model that
-**     must be taken into account if more accurate or definitive results
-**     are required (see Wallace 2002):
-**
-**       (i) The MHB2000 total nutations are simply arithmetic sums,
-**           yet in reality the various components are successive Euler
-**           rotations.  This slight lack of rigor leads to cross terms
-**           that exceed 1 mas after a century.  The rigorous procedure
-**           is to form the GCRS-to-true rotation matrix by applying the
-**           bias, precession and nutation in that order.
-**
-**      (ii) Although the precession adjustments are stated to be with
-**           respect to Lieske et al. (1977), the MHB2000 model does
-**           not specify which set of Euler angles are to be used and
-**           how the adjustments are to be applied.  The most literal
-**           and straightforward procedure is to adopt the 4-rotation
-**           epsilon_0, psi_A, omega_A, xi_A option, and to add DPSIPR
-**           to psi_A and DEPSPR to both omega_A and eps_A.
-**
-**     (iii) The MHB2000 model predates the determination by Chapront
-**           et al. (2002) of a 14.6 mas displacement between the
-**           J2000.0 mean equinox and the origin of the ICRS frame.  It
-**           should, however, be noted that neglecting this displacement
-**           when calculating star coordinates does not lead to a
-**           14.6 mas change in right ascension, only a small second-
-**           order distortion in the pattern of the precession-nutation
-**           effect.
-**
-**     For these reasons, the SOFA functions do not generate the "total
-**     nutations" directly, though they can of course easily be
-**     generated by calling iauBi00, iauPr00 and the present function
-**     and adding the results.
-**
-**  7) The MHB2000 model contains 41 instances where the same frequency
-**     appears multiple times, of which 38 are duplicates and three are
-**     triplicates.  To keep the present code close to the original MHB
-**     algorithm, this small inefficiency has not been corrected.
-**
-**  Called:
-**     iauFal03     mean anomaly of the Moon
-**     iauFaf03     mean argument of the latitude of the Moon
-**     iauFaom03    mean longitude of the Moon's ascending node
-**     iauFame03    mean longitude of Mercury
-**     iauFave03    mean longitude of Venus
-**     iauFae03     mean longitude of Earth
-**     iauFama03    mean longitude of Mars
-**     iauFaju03    mean longitude of Jupiter
-**     iauFasa03    mean longitude of Saturn
-**     iauFaur03    mean longitude of Uranus
-**     iauFapa03    general accumulated precession in longitude
-**
-**  References:
-**
-**     Chapront, J., Chapront-Touze, M. & Francou, G. 2002,
-**     Astron.Astrophys. 387, 700
-**
-**     Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977,
-**     Astron.Astrophys. 58, 1-16
-**
-**     Mathews, P.M., Herring, T.A., Buffet, B.A. 2002, J.Geophys.Res.
-**     107, B4.  The MHB_2000 code itself was obtained on 9th September
-**     2002 from ftp//maia.usno.navy.mil/conv2000/chapter5/IAU2000A.
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
-**     Astron.Astrophys.Supp.Ser. 135, 111
-**
-**     Wallace, P.T., "Software for Implementing the IAU 2000
-**     Resolutions", in IERS Workshop 5.1 (2002)
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int i;
-   double t, el, elp, f, d, om, arg, dp, de, sarg, carg,
-          al, af, ad, aom, alme, alve, alea, alma,
-          alju, alsa, alur, alne, apa, dpsils, depsls,
-          dpsipl, depspl;
-
-/* Units of 0.1 microarcsecond to radians */
-   const double U2R = DAS2R / 1e7;
-
-/* ------------------------- */
-/* Luni-Solar nutation model */
-/* ------------------------- */
-
-/* The units for the sine and cosine coefficients are */
-/* 0.1 microarcsecond and the same per Julian century */
-
-   static const struct {
-      int nl,nlp,nf,nd,nom; /* coefficients of l,l',F,D,Om */
-      double sp,spt,cp;     /* longitude sin, t*sin, cos coefficients */
-      double ce,cet,se;     /* obliquity cos, t*cos, sin coefficients */
-   } xls[] = {
-
-   /* 1- 10 */
-      { 0, 0, 0, 0, 1,
-         -172064161.0, -174666.0, 33386.0, 92052331.0, 9086.0, 15377.0},
-      { 0, 0, 2,-2, 2,
-           -13170906.0, -1675.0, -13696.0, 5730336.0, -3015.0, -4587.0},
-      { 0, 0, 2, 0, 2,-2276413.0,-234.0,2796.0,978459.0,-485.0, 1374.0},
-      { 0, 0, 0, 0, 2,2074554.0, 207.0, -698.0,-897492.0,470.0, -291.0},
-      { 0, 1, 0, 0, 0,1475877.0,-3633.0,11817.0,73871.0,-184.0,-1924.0},
-      { 0, 1, 2,-2, 2,-516821.0,1226.0, -524.0,224386.0,-677.0, -174.0},
-      { 1, 0, 0, 0, 0, 711159.0,  73.0, -872.0,  -6750.0,  0.0,  358.0},
-      { 0, 0, 2, 0, 1,-387298.0,-367.0,  380.0, 200728.0, 18.0,  318.0},
-      { 1, 0, 2, 0, 2,-301461.0, -36.0,  816.0, 129025.0,-63.0,  367.0},
-      { 0,-1, 2,-2, 2, 215829.0,-494.0,  111.0, -95929.0,299.0,  132.0},
-
-   /* 11-20 */
-      { 0, 0, 2,-2, 1, 128227.0, 137.0,  181.0, -68982.0, -9.0,   39.0},
-      {-1, 0, 2, 0, 2, 123457.0,  11.0,   19.0, -53311.0, 32.0,   -4.0},
-      {-1, 0, 0, 2, 0, 156994.0,  10.0, -168.0,  -1235.0,  0.0,   82.0},
-      { 1, 0, 0, 0, 1,  63110.0,  63.0,   27.0, -33228.0,  0.0,   -9.0},
-      {-1, 0, 0, 0, 1, -57976.0, -63.0, -189.0,  31429.0,  0.0,  -75.0},
-      {-1, 0, 2, 2, 2, -59641.0, -11.0,  149.0,  25543.0,-11.0,   66.0},
-      { 1, 0, 2, 0, 1, -51613.0, -42.0,  129.0,  26366.0,  0.0,   78.0},
-      {-2, 0, 2, 0, 1,  45893.0,  50.0,   31.0, -24236.0,-10.0,   20.0},
-      { 0, 0, 0, 2, 0,  63384.0,  11.0, -150.0,  -1220.0,  0.0,   29.0},
-      { 0, 0, 2, 2, 2, -38571.0,  -1.0,  158.0,  16452.0,-11.0,   68.0},
-
-   /* 21-30 */
-      { 0,-2, 2,-2, 2,  32481.0,   0.0,    0.0, -13870.0,  0.0,    0.0},
-      {-2, 0, 0, 2, 0, -47722.0,   0.0,  -18.0,    477.0,  0.0,  -25.0},
-      { 2, 0, 2, 0, 2, -31046.0,  -1.0,  131.0,  13238.0,-11.0,   59.0},
-      { 1, 0, 2,-2, 2,  28593.0,   0.0,   -1.0, -12338.0, 10.0,   -3.0},
-      {-1, 0, 2, 0, 1,  20441.0,  21.0,   10.0, -10758.0,  0.0,   -3.0},
-      { 2, 0, 0, 0, 0,  29243.0,   0.0,  -74.0,   -609.0,  0.0,   13.0},
-      { 0, 0, 2, 0, 0,  25887.0,   0.0,  -66.0,   -550.0,  0.0,   11.0},
-      { 0, 1, 0, 0, 1, -14053.0, -25.0,   79.0,   8551.0, -2.0,  -45.0},
-      {-1, 0, 0, 2, 1,  15164.0,  10.0,   11.0,  -8001.0,  0.0,   -1.0},
-      { 0, 2, 2,-2, 2, -15794.0,  72.0,  -16.0,   6850.0,-42.0,   -5.0},
-
-   /* 31-40 */
-      { 0, 0,-2, 2, 0,  21783.0,   0.0,   13.0,   -167.0,  0.0,   13.0},
-      { 1, 0, 0,-2, 1, -12873.0, -10.0,  -37.0,   6953.0,  0.0,  -14.0},
-      { 0,-1, 0, 0, 1, -12654.0,  11.0,   63.0,   6415.0,  0.0,   26.0},
-      {-1, 0, 2, 2, 1, -10204.0,   0.0,   25.0,   5222.0,  0.0,   15.0},
-      { 0, 2, 0, 0, 0,  16707.0, -85.0,  -10.0,    168.0, -1.0,   10.0},
-      { 1, 0, 2, 2, 2,  -7691.0,   0.0,   44.0,   3268.0,  0.0,   19.0},
-      {-2, 0, 2, 0, 0, -11024.0,   0.0,  -14.0,    104.0,  0.0,    2.0},
-      { 0, 1, 2, 0, 2,   7566.0, -21.0,  -11.0,  -3250.0,  0.0,   -5.0},
-      { 0, 0, 2, 2, 1,  -6637.0, -11.0,   25.0,   3353.0,  0.0,   14.0},
-      { 0,-1, 2, 0, 2,  -7141.0,  21.0,    8.0,   3070.0,  0.0,    4.0},
-
-   /* 41-50 */
-      { 0, 0, 0, 2, 1,  -6302.0, -11.0,    2.0,   3272.0,  0.0,    4.0},
-      { 1, 0, 2,-2, 1,   5800.0,  10.0,    2.0,  -3045.0,  0.0,   -1.0},
-      { 2, 0, 2,-2, 2,   6443.0,   0.0,   -7.0,  -2768.0,  0.0,   -4.0},
-      {-2, 0, 0, 2, 1,  -5774.0, -11.0,  -15.0,   3041.0,  0.0,   -5.0},
-      { 2, 0, 2, 0, 1,  -5350.0,   0.0,   21.0,   2695.0,  0.0,   12.0},
-      { 0,-1, 2,-2, 1,  -4752.0, -11.0,   -3.0,   2719.0,  0.0,   -3.0},
-      { 0, 0, 0,-2, 1,  -4940.0, -11.0,  -21.0,   2720.0,  0.0,   -9.0},
-      {-1,-1, 0, 2, 0,   7350.0,   0.0,   -8.0,    -51.0,  0.0,    4.0},
-      { 2, 0, 0,-2, 1,   4065.0,   0.0,    6.0,  -2206.0,  0.0,    1.0},
-      { 1, 0, 0, 2, 0,   6579.0,   0.0,  -24.0,   -199.0,  0.0,    2.0},
-
-   /* 51-60 */
-      { 0, 1, 2,-2, 1,   3579.0,   0.0,    5.0,  -1900.0,  0.0,    1.0},
-      { 1,-1, 0, 0, 0,   4725.0,   0.0,   -6.0,    -41.0,  0.0,    3.0},
-      {-2, 0, 2, 0, 2,  -3075.0,   0.0,   -2.0,   1313.0,  0.0,   -1.0},
-      { 3, 0, 2, 0, 2,  -2904.0,   0.0,   15.0,   1233.0,  0.0,    7.0},
-      { 0,-1, 0, 2, 0,   4348.0,   0.0,  -10.0,    -81.0,  0.0,    2.0},
-      { 1,-1, 2, 0, 2,  -2878.0,   0.0,    8.0,   1232.0,  0.0,    4.0},
-      { 0, 0, 0, 1, 0,  -4230.0,   0.0,    5.0,    -20.0,  0.0,   -2.0},
-      {-1,-1, 2, 2, 2,  -2819.0,   0.0,    7.0,   1207.0,  0.0,    3.0},
-      {-1, 0, 2, 0, 0,  -4056.0,   0.0,    5.0,     40.0,  0.0,   -2.0},
-      { 0,-1, 2, 2, 2,  -2647.0,   0.0,   11.0,   1129.0,  0.0,    5.0},
-
-   /* 61-70 */
-      {-2, 0, 0, 0, 1,  -2294.0,   0.0,  -10.0,   1266.0,  0.0,   -4.0},
-      { 1, 1, 2, 0, 2,   2481.0,   0.0,   -7.0,  -1062.0,  0.0,   -3.0},
-      { 2, 0, 0, 0, 1,   2179.0,   0.0,   -2.0,  -1129.0,  0.0,   -2.0},
-      {-1, 1, 0, 1, 0,   3276.0,   0.0,    1.0,     -9.0,  0.0,    0.0},
-      { 1, 1, 0, 0, 0,  -3389.0,   0.0,    5.0,     35.0,  0.0,   -2.0},
-      { 1, 0, 2, 0, 0,   3339.0,   0.0,  -13.0,   -107.0,  0.0,    1.0},
-      {-1, 0, 2,-2, 1,  -1987.0,   0.0,   -6.0,   1073.0,  0.0,   -2.0},
-      { 1, 0, 0, 0, 2,  -1981.0,   0.0,    0.0,    854.0,  0.0,    0.0},
-      {-1, 0, 0, 1, 0,   4026.0,   0.0, -353.0,   -553.0,  0.0, -139.0},
-      { 0, 0, 2, 1, 2,   1660.0,   0.0,   -5.0,   -710.0,  0.0,   -2.0},
-
-   /* 71-80 */
-      {-1, 0, 2, 4, 2,  -1521.0,   0.0,    9.0,    647.0,  0.0,    4.0},
-      {-1, 1, 0, 1, 1,   1314.0,   0.0,    0.0,   -700.0,  0.0,    0.0},
-      { 0,-2, 2,-2, 1,  -1283.0,   0.0,    0.0,    672.0,  0.0,    0.0},
-      { 1, 0, 2, 2, 1,  -1331.0,   0.0,    8.0,    663.0,  0.0,    4.0},
-      {-2, 0, 2, 2, 2,   1383.0,   0.0,   -2.0,   -594.0,  0.0,   -2.0},
-      {-1, 0, 0, 0, 2,   1405.0,   0.0,    4.0,   -610.0,  0.0,    2.0},
-      { 1, 1, 2,-2, 2,   1290.0,   0.0,    0.0,   -556.0,  0.0,    0.0},
-      {-2, 0, 2, 4, 2,  -1214.0,   0.0,    5.0,    518.0,  0.0,    2.0},
-      {-1, 0, 4, 0, 2,   1146.0,   0.0,   -3.0,   -490.0,  0.0,   -1.0},
-      { 2, 0, 2,-2, 1,   1019.0,   0.0,   -1.0,   -527.0,  0.0,   -1.0},
-
-   /* 81-90 */
-      { 2, 0, 2, 2, 2,  -1100.0,   0.0,    9.0,    465.0,  0.0,    4.0},
-      { 1, 0, 0, 2, 1,   -970.0,   0.0,    2.0,    496.0,  0.0,    1.0},
-      { 3, 0, 0, 0, 0,   1575.0,   0.0,   -6.0,    -50.0,  0.0,    0.0},
-      { 3, 0, 2,-2, 2,    934.0,   0.0,   -3.0,   -399.0,  0.0,   -1.0},
-      { 0, 0, 4,-2, 2,    922.0,   0.0,   -1.0,   -395.0,  0.0,   -1.0},
-      { 0, 1, 2, 0, 1,    815.0,   0.0,   -1.0,   -422.0,  0.0,   -1.0},
-      { 0, 0,-2, 2, 1,    834.0,   0.0,    2.0,   -440.0,  0.0,    1.0},
-      { 0, 0, 2,-2, 3,   1248.0,   0.0,    0.0,   -170.0,  0.0,    1.0},
-      {-1, 0, 0, 4, 0,   1338.0,   0.0,   -5.0,    -39.0,  0.0,    0.0},
-      { 2, 0,-2, 0, 1,    716.0,   0.0,   -2.0,   -389.0,  0.0,   -1.0},
-
-   /* 91-100 */
-      {-2, 0, 0, 4, 0,   1282.0,   0.0,   -3.0,    -23.0,  0.0,    1.0},
-      {-1,-1, 0, 2, 1,    742.0,   0.0,    1.0,   -391.0,  0.0,    0.0},
-      {-1, 0, 0, 1, 1,   1020.0,   0.0,  -25.0,   -495.0,  0.0,  -10.0},
-      { 0, 1, 0, 0, 2,    715.0,   0.0,   -4.0,   -326.0,  0.0,    2.0},
-      { 0, 0,-2, 0, 1,   -666.0,   0.0,   -3.0,    369.0,  0.0,   -1.0},
-      { 0,-1, 2, 0, 1,   -667.0,   0.0,    1.0,    346.0,  0.0,    1.0},
-      { 0, 0, 2,-1, 2,   -704.0,   0.0,    0.0,    304.0,  0.0,    0.0},
-      { 0, 0, 2, 4, 2,   -694.0,   0.0,    5.0,    294.0,  0.0,    2.0},
-      {-2,-1, 0, 2, 0,  -1014.0,   0.0,   -1.0,      4.0,  0.0,   -1.0},
-      { 1, 1, 0,-2, 1,   -585.0,   0.0,   -2.0,    316.0,  0.0,   -1.0},
-
-   /* 101-110 */
-      {-1, 1, 0, 2, 0,   -949.0,   0.0,    1.0,      8.0,  0.0,   -1.0},
-      {-1, 1, 0, 1, 2,   -595.0,   0.0,    0.0,    258.0,  0.0,    0.0},
-      { 1,-1, 0, 0, 1,    528.0,   0.0,    0.0,   -279.0,  0.0,    0.0},
-      { 1,-1, 2, 2, 2,   -590.0,   0.0,    4.0,    252.0,  0.0,    2.0},
-      {-1, 1, 2, 2, 2,    570.0,   0.0,   -2.0,   -244.0,  0.0,   -1.0},
-      { 3, 0, 2, 0, 1,   -502.0,   0.0,    3.0,    250.0,  0.0,    2.0},
-      { 0, 1,-2, 2, 0,   -875.0,   0.0,    1.0,     29.0,  0.0,    0.0},
-      {-1, 0, 0,-2, 1,   -492.0,   0.0,   -3.0,    275.0,  0.0,   -1.0},
-      { 0, 1, 2, 2, 2,    535.0,   0.0,   -2.0,   -228.0,  0.0,   -1.0},
-      {-1,-1, 2, 2, 1,   -467.0,   0.0,    1.0,    240.0,  0.0,    1.0},
-
-   /* 111-120 */
-      { 0,-1, 0, 0, 2,    591.0,   0.0,    0.0,   -253.0,  0.0,    0.0},
-      { 1, 0, 2,-4, 1,   -453.0,   0.0,   -1.0,    244.0,  0.0,   -1.0},
-      {-1, 0,-2, 2, 0,    766.0,   0.0,    1.0,      9.0,  0.0,    0.0},
-      { 0,-1, 2, 2, 1,   -446.0,   0.0,    2.0,    225.0,  0.0,    1.0},
-      { 2,-1, 2, 0, 2,   -488.0,   0.0,    2.0,    207.0,  0.0,    1.0},
-      { 0, 0, 0, 2, 2,   -468.0,   0.0,    0.0,    201.0,  0.0,    0.0},
-      { 1,-1, 2, 0, 1,   -421.0,   0.0,    1.0,    216.0,  0.0,    1.0},
-      {-1, 1, 2, 0, 2,    463.0,   0.0,    0.0,   -200.0,  0.0,    0.0},
-      { 0, 1, 0, 2, 0,   -673.0,   0.0,    2.0,     14.0,  0.0,    0.0},
-      { 0,-1,-2, 2, 0,    658.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-
-   /* 121-130 */
-      { 0, 3, 2,-2, 2,   -438.0,   0.0,    0.0,    188.0,  0.0,    0.0},
-      { 0, 0, 0, 1, 1,   -390.0,   0.0,    0.0,    205.0,  0.0,    0.0},
-      {-1, 0, 2, 2, 0,    639.0, -11.0,   -2.0,    -19.0,  0.0,    0.0},
-      { 2, 1, 2, 0, 2,    412.0,   0.0,   -2.0,   -176.0,  0.0,   -1.0},
-      { 1, 1, 0, 0, 1,   -361.0,   0.0,    0.0,    189.0,  0.0,    0.0},
-      { 1, 1, 2, 0, 1,    360.0,   0.0,   -1.0,   -185.0,  0.0,   -1.0},
-      { 2, 0, 0, 2, 0,    588.0,   0.0,   -3.0,    -24.0,  0.0,    0.0},
-      { 1, 0,-2, 2, 0,   -578.0,   0.0,    1.0,      5.0,  0.0,    0.0},
-      {-1, 0, 0, 2, 2,   -396.0,   0.0,    0.0,    171.0,  0.0,    0.0},
-      { 0, 1, 0, 1, 0,    565.0,   0.0,   -1.0,     -6.0,  0.0,    0.0},
-
-   /* 131-140 */
-      { 0, 1, 0,-2, 1,   -335.0,   0.0,   -1.0,    184.0,  0.0,   -1.0},
-      {-1, 0, 2,-2, 2,    357.0,   0.0,    1.0,   -154.0,  0.0,    0.0},
-      { 0, 0, 0,-1, 1,    321.0,   0.0,    1.0,   -174.0,  0.0,    0.0},
-      {-1, 1, 0, 0, 1,   -301.0,   0.0,   -1.0,    162.0,  0.0,    0.0},
-      { 1, 0, 2,-1, 2,   -334.0,   0.0,    0.0,    144.0,  0.0,    0.0},
-      { 1,-1, 0, 2, 0,    493.0,   0.0,   -2.0,    -15.0,  0.0,    0.0},
-      { 0, 0, 0, 4, 0,    494.0,   0.0,   -2.0,    -19.0,  0.0,    0.0},
-      { 1, 0, 2, 1, 2,    337.0,   0.0,   -1.0,   -143.0,  0.0,   -1.0},
-      { 0, 0, 2, 1, 1,    280.0,   0.0,   -1.0,   -144.0,  0.0,    0.0},
-      { 1, 0, 0,-2, 2,    309.0,   0.0,    1.0,   -134.0,  0.0,    0.0},
-
-   /* 141-150 */
-      {-1, 0, 2, 4, 1,   -263.0,   0.0,    2.0,    131.0,  0.0,    1.0},
-      { 1, 0,-2, 0, 1,    253.0,   0.0,    1.0,   -138.0,  0.0,    0.0},
-      { 1, 1, 2,-2, 1,    245.0,   0.0,    0.0,   -128.0,  0.0,    0.0},
-      { 0, 0, 2, 2, 0,    416.0,   0.0,   -2.0,    -17.0,  0.0,    0.0},
-      {-1, 0, 2,-1, 1,   -229.0,   0.0,    0.0,    128.0,  0.0,    0.0},
-      {-2, 0, 2, 2, 1,    231.0,   0.0,    0.0,   -120.0,  0.0,    0.0},
-      { 4, 0, 2, 0, 2,   -259.0,   0.0,    2.0,    109.0,  0.0,    1.0},
-      { 2,-1, 0, 0, 0,    375.0,   0.0,   -1.0,     -8.0,  0.0,    0.0},
-      { 2, 1, 2,-2, 2,    252.0,   0.0,    0.0,   -108.0,  0.0,    0.0},
-      { 0, 1, 2, 1, 2,   -245.0,   0.0,    1.0,    104.0,  0.0,    0.0},
-
-   /* 151-160 */
-      { 1, 0, 4,-2, 2,    243.0,   0.0,   -1.0,   -104.0,  0.0,    0.0},
-      {-1,-1, 0, 0, 1,    208.0,   0.0,    1.0,   -112.0,  0.0,    0.0},
-      { 0, 1, 0, 2, 1,    199.0,   0.0,    0.0,   -102.0,  0.0,    0.0},
-      {-2, 0, 2, 4, 1,   -208.0,   0.0,    1.0,    105.0,  0.0,    0.0},
-      { 2, 0, 2, 0, 0,    335.0,   0.0,   -2.0,    -14.0,  0.0,    0.0},
-      { 1, 0, 0, 1, 0,   -325.0,   0.0,    1.0,      7.0,  0.0,    0.0},
-      {-1, 0, 0, 4, 1,   -187.0,   0.0,    0.0,     96.0,  0.0,    0.0},
-      {-1, 0, 4, 0, 1,    197.0,   0.0,   -1.0,   -100.0,  0.0,    0.0},
-      { 2, 0, 2, 2, 1,   -192.0,   0.0,    2.0,     94.0,  0.0,    1.0},
-      { 0, 0, 2,-3, 2,   -188.0,   0.0,    0.0,     83.0,  0.0,    0.0},
-
-   /* 161-170 */
-      {-1,-2, 0, 2, 0,    276.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 2, 1, 0, 0, 0,   -286.0,   0.0,    1.0,      6.0,  0.0,    0.0},
-      { 0, 0, 4, 0, 2,    186.0,   0.0,   -1.0,    -79.0,  0.0,    0.0},
-      { 0, 0, 0, 0, 3,   -219.0,   0.0,    0.0,     43.0,  0.0,    0.0},
-      { 0, 3, 0, 0, 0,    276.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 0, 0, 2,-4, 1,   -153.0,   0.0,   -1.0,     84.0,  0.0,    0.0},
-      { 0,-1, 0, 2, 1,   -156.0,   0.0,    0.0,     81.0,  0.0,    0.0},
-      { 0, 0, 0, 4, 1,   -154.0,   0.0,    1.0,     78.0,  0.0,    0.0},
-      {-1,-1, 2, 4, 2,   -174.0,   0.0,    1.0,     75.0,  0.0,    0.0},
-      { 1, 0, 2, 4, 2,   -163.0,   0.0,    2.0,     69.0,  0.0,    1.0},
-
-   /* 171-180 */
-      {-2, 2, 0, 2, 0,   -228.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      {-2,-1, 2, 0, 1,     91.0,   0.0,   -4.0,    -54.0,  0.0,   -2.0},
-      {-2, 0, 0, 2, 2,    175.0,   0.0,    0.0,    -75.0,  0.0,    0.0},
-      {-1,-1, 2, 0, 2,   -159.0,   0.0,    0.0,     69.0,  0.0,    0.0},
-      { 0, 0, 4,-2, 1,    141.0,   0.0,    0.0,    -72.0,  0.0,    0.0},
-      { 3, 0, 2,-2, 1,    147.0,   0.0,    0.0,    -75.0,  0.0,    0.0},
-      {-2,-1, 0, 2, 1,   -132.0,   0.0,    0.0,     69.0,  0.0,    0.0},
-      { 1, 0, 0,-1, 1,    159.0,   0.0,  -28.0,    -54.0,  0.0,   11.0},
-      { 0,-2, 0, 2, 0,    213.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      {-2, 0, 0, 4, 1,    123.0,   0.0,    0.0,    -64.0,  0.0,    0.0},
-
-   /* 181-190 */
-      {-3, 0, 0, 0, 1,   -118.0,   0.0,   -1.0,     66.0,  0.0,    0.0},
-      { 1, 1, 2, 2, 2,    144.0,   0.0,   -1.0,    -61.0,  0.0,    0.0},
-      { 0, 0, 2, 4, 1,   -121.0,   0.0,    1.0,     60.0,  0.0,    0.0},
-      { 3, 0, 2, 2, 2,   -134.0,   0.0,    1.0,     56.0,  0.0,    1.0},
-      {-1, 1, 2,-2, 1,   -105.0,   0.0,    0.0,     57.0,  0.0,    0.0},
-      { 2, 0, 0,-4, 1,   -102.0,   0.0,    0.0,     56.0,  0.0,    0.0},
-      { 0, 0, 0,-2, 2,    120.0,   0.0,    0.0,    -52.0,  0.0,    0.0},
-      { 2, 0, 2,-4, 1,    101.0,   0.0,    0.0,    -54.0,  0.0,    0.0},
-      {-1, 1, 0, 2, 1,   -113.0,   0.0,    0.0,     59.0,  0.0,    0.0},
-      { 0, 0, 2,-1, 1,   -106.0,   0.0,    0.0,     61.0,  0.0,    0.0},
-
-   /* 191-200 */
-      { 0,-2, 2, 2, 2,   -129.0,   0.0,    1.0,     55.0,  0.0,    0.0},
-      { 2, 0, 0, 2, 1,   -114.0,   0.0,    0.0,     57.0,  0.0,    0.0},
-      { 4, 0, 2,-2, 2,    113.0,   0.0,   -1.0,    -49.0,  0.0,    0.0},
-      { 2, 0, 0,-2, 2,   -102.0,   0.0,    0.0,     44.0,  0.0,    0.0},
-      { 0, 2, 0, 0, 1,    -94.0,   0.0,    0.0,     51.0,  0.0,    0.0},
-      { 1, 0, 0,-4, 1,   -100.0,   0.0,   -1.0,     56.0,  0.0,    0.0},
-      { 0, 2, 2,-2, 1,     87.0,   0.0,    0.0,    -47.0,  0.0,    0.0},
-      {-3, 0, 0, 4, 0,    161.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      {-1, 1, 2, 0, 1,     96.0,   0.0,    0.0,    -50.0,  0.0,    0.0},
-      {-1,-1, 0, 4, 0,    151.0,   0.0,   -1.0,     -5.0,  0.0,    0.0},
-
-   /* 201-210 */
-      {-1,-2, 2, 2, 2,   -104.0,   0.0,    0.0,     44.0,  0.0,    0.0},
-      {-2,-1, 2, 4, 2,   -110.0,   0.0,    0.0,     48.0,  0.0,    0.0},
-      { 1,-1, 2, 2, 1,   -100.0,   0.0,    1.0,     50.0,  0.0,    0.0},
-      {-2, 1, 0, 2, 0,     92.0,   0.0,   -5.0,     12.0,  0.0,   -2.0},
-      {-2, 1, 2, 0, 1,     82.0,   0.0,    0.0,    -45.0,  0.0,    0.0},
-      { 2, 1, 0,-2, 1,     82.0,   0.0,    0.0,    -45.0,  0.0,    0.0},
-      {-3, 0, 2, 0, 1,    -78.0,   0.0,    0.0,     41.0,  0.0,    0.0},
-      {-2, 0, 2,-2, 1,    -77.0,   0.0,    0.0,     43.0,  0.0,    0.0},
-      {-1, 1, 0, 2, 2,      2.0,   0.0,    0.0,     54.0,  0.0,    0.0},
-      { 0,-1, 2,-1, 2,     94.0,   0.0,    0.0,    -40.0,  0.0,    0.0},
-
-   /* 211-220 */
-      {-1, 0, 4,-2, 2,    -93.0,   0.0,    0.0,     40.0,  0.0,    0.0},
-      { 0,-2, 2, 0, 2,    -83.0,   0.0,   10.0,     40.0,  0.0,   -2.0},
-      {-1, 0, 2, 1, 2,     83.0,   0.0,    0.0,    -36.0,  0.0,    0.0},
-      { 2, 0, 0, 0, 2,    -91.0,   0.0,    0.0,     39.0,  0.0,    0.0},
-      { 0, 0, 2, 0, 3,    128.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      {-2, 0, 4, 0, 2,    -79.0,   0.0,    0.0,     34.0,  0.0,    0.0},
-      {-1, 0,-2, 0, 1,    -83.0,   0.0,    0.0,     47.0,  0.0,    0.0},
-      {-1, 1, 2, 2, 1,     84.0,   0.0,    0.0,    -44.0,  0.0,    0.0},
-      { 3, 0, 0, 0, 1,     83.0,   0.0,    0.0,    -43.0,  0.0,    0.0},
-      {-1, 0, 2, 3, 2,     91.0,   0.0,    0.0,    -39.0,  0.0,    0.0},
-
-   /* 221-230 */
-      { 2,-1, 2, 0, 1,    -77.0,   0.0,    0.0,     39.0,  0.0,    0.0},
-      { 0, 1, 2, 2, 1,     84.0,   0.0,    0.0,    -43.0,  0.0,    0.0},
-      { 0,-1, 2, 4, 2,    -92.0,   0.0,    1.0,     39.0,  0.0,    0.0},
-      { 2,-1, 2, 2, 2,    -92.0,   0.0,    1.0,     39.0,  0.0,    0.0},
-      { 0, 2,-2, 2, 0,    -94.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1,-1, 2,-1, 1,     68.0,   0.0,    0.0,    -36.0,  0.0,    0.0},
-      { 0,-2, 0, 0, 1,    -61.0,   0.0,    0.0,     32.0,  0.0,    0.0},
-      { 1, 0, 2,-4, 2,     71.0,   0.0,    0.0,    -31.0,  0.0,    0.0},
-      { 1,-1, 0,-2, 1,     62.0,   0.0,    0.0,    -34.0,  0.0,    0.0},
-      {-1,-1, 2, 0, 1,    -63.0,   0.0,    0.0,     33.0,  0.0,    0.0},
-
-   /* 231-240 */
-      { 1,-1, 2,-2, 2,    -73.0,   0.0,    0.0,     32.0,  0.0,    0.0},
-      {-2,-1, 0, 4, 0,    115.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-1, 0, 0, 3, 0,   -103.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-2,-1, 2, 2, 2,     63.0,   0.0,    0.0,    -28.0,  0.0,    0.0},
-      { 0, 2, 2, 0, 2,     74.0,   0.0,    0.0,    -32.0,  0.0,    0.0},
-      { 1, 1, 0, 2, 0,   -103.0,   0.0,   -3.0,      3.0,  0.0,   -1.0},
-      { 2, 0, 2,-1, 2,    -69.0,   0.0,    0.0,     30.0,  0.0,    0.0},
-      { 1, 0, 2, 1, 1,     57.0,   0.0,    0.0,    -29.0,  0.0,    0.0},
-      { 4, 0, 0, 0, 0,     94.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      { 2, 1, 2, 0, 1,     64.0,   0.0,    0.0,    -33.0,  0.0,    0.0},
-
-   /* 241-250 */
-      { 3,-1, 2, 0, 2,    -63.0,   0.0,    0.0,     26.0,  0.0,    0.0},
-      {-2, 2, 0, 2, 1,    -38.0,   0.0,    0.0,     20.0,  0.0,    0.0},
-      { 1, 0, 2,-3, 1,    -43.0,   0.0,    0.0,     24.0,  0.0,    0.0},
-      { 1, 1, 2,-4, 1,    -45.0,   0.0,    0.0,     23.0,  0.0,    0.0},
-      {-1,-1, 2,-2, 1,     47.0,   0.0,    0.0,    -24.0,  0.0,    0.0},
-      { 0,-1, 0,-1, 1,    -48.0,   0.0,    0.0,     25.0,  0.0,    0.0},
-      { 0,-1, 0,-2, 1,     45.0,   0.0,    0.0,    -26.0,  0.0,    0.0},
-      {-2, 0, 0, 0, 2,     56.0,   0.0,    0.0,    -25.0,  0.0,    0.0},
-      {-2, 0,-2, 2, 0,     88.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-1, 0,-2, 4, 0,    -75.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-
-   /* 251-260 */
-      { 1,-2, 0, 0, 0,     85.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 1, 0, 1, 1,     49.0,   0.0,    0.0,    -26.0,  0.0,    0.0},
-      {-1, 2, 0, 2, 0,    -74.0,   0.0,   -3.0,     -1.0,  0.0,   -1.0},
-      { 1,-1, 2,-2, 1,    -39.0,   0.0,    0.0,     21.0,  0.0,    0.0},
-      { 1, 2, 2,-2, 2,     45.0,   0.0,    0.0,    -20.0,  0.0,    0.0},
-      { 2,-1, 2,-2, 2,     51.0,   0.0,    0.0,    -22.0,  0.0,    0.0},
-      { 1, 0, 2,-1, 1,    -40.0,   0.0,    0.0,     21.0,  0.0,    0.0},
-      { 2, 1, 2,-2, 1,     41.0,   0.0,    0.0,    -21.0,  0.0,    0.0},
-      {-2, 0, 0,-2, 1,    -42.0,   0.0,    0.0,     24.0,  0.0,    0.0},
-      { 1,-2, 2, 0, 2,    -51.0,   0.0,    0.0,     22.0,  0.0,    0.0},
-
-   /* 261-270 */
-      { 0, 1, 2, 1, 1,    -42.0,   0.0,    0.0,     22.0,  0.0,    0.0},
-      { 1, 0, 4,-2, 1,     39.0,   0.0,    0.0,    -21.0,  0.0,    0.0},
-      {-2, 0, 4, 2, 2,     46.0,   0.0,    0.0,    -18.0,  0.0,    0.0},
-      { 1, 1, 2, 1, 2,    -53.0,   0.0,    0.0,     22.0,  0.0,    0.0},
-      { 1, 0, 0, 4, 0,     82.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      { 1, 0, 2, 2, 0,     81.0,   0.0,   -1.0,     -4.0,  0.0,    0.0},
-      { 2, 0, 2, 1, 2,     47.0,   0.0,    0.0,    -19.0,  0.0,    0.0},
-      { 3, 1, 2, 0, 2,     53.0,   0.0,    0.0,    -23.0,  0.0,    0.0},
-      { 4, 0, 2, 0, 1,    -45.0,   0.0,    0.0,     22.0,  0.0,    0.0},
-      {-2,-1, 2, 0, 0,    -44.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-
-   /* 271-280 */
-      { 0, 1,-2, 2, 1,    -33.0,   0.0,    0.0,     16.0,  0.0,    0.0},
-      { 1, 0,-2, 1, 0,    -61.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      { 0,-1,-2, 2, 1,     28.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
-      { 2,-1, 0,-2, 1,    -38.0,   0.0,    0.0,     19.0,  0.0,    0.0},
-      {-1, 0, 2,-1, 2,    -33.0,   0.0,    0.0,     21.0,  0.0,    0.0},
-      { 1, 0, 2,-3, 2,    -60.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 1, 2,-2, 3,     48.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
-      { 0, 0, 2,-3, 1,     27.0,   0.0,    0.0,    -14.0,  0.0,    0.0},
-      {-1, 0,-2, 2, 1,     38.0,   0.0,    0.0,    -20.0,  0.0,    0.0},
-      { 0, 0, 2,-4, 2,     31.0,   0.0,    0.0,    -13.0,  0.0,    0.0},
-
-   /* 281-290 */
-      {-2, 1, 0, 0, 1,    -29.0,   0.0,    0.0,     15.0,  0.0,    0.0},
-      {-1, 0, 0,-1, 1,     28.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
-      { 2, 0, 2,-4, 2,    -32.0,   0.0,    0.0,     15.0,  0.0,    0.0},
-      { 0, 0, 4,-4, 4,     45.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
-      { 0, 0, 4,-4, 2,    -44.0,   0.0,    0.0,     19.0,  0.0,    0.0},
-      {-1,-2, 0, 2, 1,     28.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
-      {-2, 0, 0, 3, 0,    -51.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 0,-2, 2, 1,    -36.0,   0.0,    0.0,     20.0,  0.0,    0.0},
-      {-3, 0, 2, 2, 2,     44.0,   0.0,    0.0,    -19.0,  0.0,    0.0},
-      {-3, 0, 2, 2, 1,     26.0,   0.0,    0.0,    -14.0,  0.0,    0.0},
-
-   /* 291-300 */
-      {-2, 0, 2, 2, 0,    -60.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 2,-1, 0, 0, 1,     35.0,   0.0,    0.0,    -18.0,  0.0,    0.0},
-      {-2, 1, 2, 2, 2,    -27.0,   0.0,    0.0,     11.0,  0.0,    0.0},
-      { 1, 1, 0, 1, 0,     47.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 0, 1, 4,-2, 2,     36.0,   0.0,    0.0,    -15.0,  0.0,    0.0},
-      {-1, 1, 0,-2, 1,    -36.0,   0.0,    0.0,     20.0,  0.0,    0.0},
-      { 0, 0, 0,-4, 1,    -35.0,   0.0,    0.0,     19.0,  0.0,    0.0},
-      { 1,-1, 0, 2, 1,    -37.0,   0.0,    0.0,     19.0,  0.0,    0.0},
-      { 1, 1, 0, 2, 1,     32.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
-      {-1, 2, 2, 2, 2,     35.0,   0.0,    0.0,    -14.0,  0.0,    0.0},
-
-   /* 301-310 */
-      { 3, 1, 2,-2, 2,     32.0,   0.0,    0.0,    -13.0,  0.0,    0.0},
-      { 0,-1, 0, 4, 0,     65.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 2,-1, 0, 2, 0,     47.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 0, 0, 4, 0, 1,     32.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
-      { 2, 0, 4,-2, 2,     37.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
-      {-1,-1, 2, 4, 1,    -30.0,   0.0,    0.0,     15.0,  0.0,    0.0},
-      { 1, 0, 0, 4, 1,    -32.0,   0.0,    0.0,     16.0,  0.0,    0.0},
-      { 1,-2, 2, 2, 2,    -31.0,   0.0,    0.0,     13.0,  0.0,    0.0},
-      { 0, 0, 2, 3, 2,     37.0,   0.0,    0.0,    -16.0,  0.0,    0.0},
-      {-1, 1, 2, 4, 2,     31.0,   0.0,    0.0,    -13.0,  0.0,    0.0},
-
-   /* 311-320 */
-      { 3, 0, 0, 2, 0,     49.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-1, 0, 4, 2, 2,     32.0,   0.0,    0.0,    -13.0,  0.0,    0.0},
-      { 1, 1, 2, 2, 1,     23.0,   0.0,    0.0,    -12.0,  0.0,    0.0},
-      {-2, 0, 2, 6, 2,    -43.0,   0.0,    0.0,     18.0,  0.0,    0.0},
-      { 2, 1, 2, 2, 2,     26.0,   0.0,    0.0,    -11.0,  0.0,    0.0},
-      {-1, 0, 2, 6, 2,    -32.0,   0.0,    0.0,     14.0,  0.0,    0.0},
-      { 1, 0, 2, 4, 1,    -29.0,   0.0,    0.0,     14.0,  0.0,    0.0},
-      { 2, 0, 2, 4, 2,    -27.0,   0.0,    0.0,     12.0,  0.0,    0.0},
-      { 1, 1,-2, 1, 0,     30.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-3, 1, 2, 1, 2,    -11.0,   0.0,    0.0,      5.0,  0.0,    0.0},
-
-   /* 321-330 */
-      { 2, 0,-2, 0, 2,    -21.0,   0.0,    0.0,     10.0,  0.0,    0.0},
-      {-1, 0, 0, 1, 2,    -34.0,   0.0,    0.0,     15.0,  0.0,    0.0},
-      {-4, 0, 2, 2, 1,    -10.0,   0.0,    0.0,      6.0,  0.0,    0.0},
-      {-1,-1, 0, 1, 0,    -36.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 0,-2, 2, 2,     -9.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-      { 1, 0, 0,-1, 2,    -12.0,   0.0,    0.0,      5.0,  0.0,    0.0},
-      { 0,-1, 2,-2, 3,    -21.0,   0.0,    0.0,      5.0,  0.0,    0.0},
-      {-2, 1, 2, 0, 0,    -29.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 0, 0, 2,-2, 4,    -15.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      {-2,-2, 0, 2, 0,    -20.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-
-   /* 331-340 */
-      {-2, 0,-2, 4, 0,     28.0,   0.0,    0.0,      0.0,  0.0,   -2.0},
-      { 0,-2,-2, 2, 0,     17.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 2, 0,-2, 1,    -22.0,   0.0,    0.0,     12.0,  0.0,    0.0},
-      { 3, 0, 0,-4, 1,    -14.0,   0.0,    0.0,      7.0,  0.0,    0.0},
-      {-1, 1, 2,-2, 2,     24.0,   0.0,    0.0,    -11.0,  0.0,    0.0},
-      { 1,-1, 2,-4, 1,     11.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
-      { 1, 1, 0,-2, 2,     14.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
-      {-3, 0, 2, 0, 0,     24.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-3, 0, 2, 0, 2,     18.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
-      {-2, 0, 0, 1, 0,    -38.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-
-   /* 341-350 */
-      { 0, 0,-2, 1, 0,    -31.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-3, 0, 0, 2, 1,    -16.0,   0.0,    0.0,      8.0,  0.0,    0.0},
-      {-1,-1,-2, 2, 0,     29.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 1, 2,-4, 1,    -18.0,   0.0,    0.0,     10.0,  0.0,    0.0},
-      { 2, 1, 0,-4, 1,    -10.0,   0.0,    0.0,      5.0,  0.0,    0.0},
-      { 0, 2, 0,-2, 1,    -17.0,   0.0,    0.0,     10.0,  0.0,    0.0},
-      { 1, 0, 0,-3, 1,      9.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      {-2, 0, 2,-2, 2,     16.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
-      {-2,-1, 0, 0, 1,     22.0,   0.0,    0.0,    -12.0,  0.0,    0.0},
-      {-4, 0, 0, 2, 0,     20.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-
-   /* 351-360 */
-      { 1, 1, 0,-4, 1,    -13.0,   0.0,    0.0,      6.0,  0.0,    0.0},
-      {-1, 0, 2,-4, 1,    -17.0,   0.0,    0.0,      9.0,  0.0,    0.0},
-      { 0, 0, 4,-4, 1,    -14.0,   0.0,    0.0,      8.0,  0.0,    0.0},
-      { 0, 3, 2,-2, 2,      0.0,   0.0,    0.0,     -7.0,  0.0,    0.0},
-      {-3,-1, 0, 4, 0,     14.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-3, 0, 0, 4, 1,     19.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
-      { 1,-1,-2, 2, 0,    -34.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1,-1, 0, 2, 2,    -20.0,   0.0,    0.0,      8.0,  0.0,    0.0},
-      { 1,-2, 0, 0, 1,      9.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
-      { 1,-1, 0, 0, 2,    -18.0,   0.0,    0.0,      7.0,  0.0,    0.0},
-
-   /* 361-370 */
-      { 0, 0, 0, 1, 2,     13.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
-      {-1,-1, 2, 0, 0,     17.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1,-2, 2,-2, 2,    -12.0,   0.0,    0.0,      5.0,  0.0,    0.0},
-      { 0,-1, 2,-1, 1,     15.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
-      {-1, 0, 2, 0, 3,    -11.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      { 1, 1, 0, 0, 2,     13.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
-      {-1, 1, 2, 0, 0,    -18.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 2, 0, 0, 0,    -35.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1, 2, 2, 0, 2,      9.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      {-1, 0, 4,-2, 1,    -19.0,   0.0,    0.0,     10.0,  0.0,    0.0},
-
-   /* 371-380 */
-      { 3, 0, 2,-4, 2,    -26.0,   0.0,    0.0,     11.0,  0.0,    0.0},
-      { 1, 2, 2,-2, 1,      8.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      { 1, 0, 4,-4, 2,    -10.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-      {-2,-1, 0, 4, 1,     10.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
-      { 0,-1, 0, 2, 2,    -21.0,   0.0,    0.0,      9.0,  0.0,    0.0},
-      {-2, 1, 0, 4, 0,    -15.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-2,-1, 2, 2, 1,      9.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
-      { 2, 0,-2, 2, 0,    -29.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 0, 0, 1, 1,    -19.0,   0.0,    0.0,     10.0,  0.0,    0.0},
-      { 0, 1, 0, 2, 2,     12.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
-
-   /* 381-390 */
-      { 1,-1, 2,-1, 2,     22.0,   0.0,    0.0,     -9.0,  0.0,    0.0},
-      {-2, 0, 4, 0, 1,    -10.0,   0.0,    0.0,      5.0,  0.0,    0.0},
-      { 2, 1, 0, 0, 1,    -20.0,   0.0,    0.0,     11.0,  0.0,    0.0},
-      { 0, 1, 2, 0, 0,    -20.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0,-1, 4,-2, 2,    -17.0,   0.0,    0.0,      7.0,  0.0,    0.0},
-      { 0, 0, 4,-2, 4,     15.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 0, 2, 2, 0, 1,      8.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      {-3, 0, 0, 6, 0,     14.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1,-1, 0, 4, 1,    -12.0,   0.0,    0.0,      6.0,  0.0,    0.0},
-      { 1,-2, 0, 2, 0,     25.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-
-   /* 391-400 */
-      {-1, 0, 0, 4, 2,    -13.0,   0.0,    0.0,      6.0,  0.0,    0.0},
-      {-1,-2, 2, 2, 1,    -14.0,   0.0,    0.0,      8.0,  0.0,    0.0},
-      {-1, 0, 0,-2, 2,     13.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
-      { 1, 0,-2,-2, 1,    -17.0,   0.0,    0.0,      9.0,  0.0,    0.0},
-      { 0, 0,-2,-2, 1,    -12.0,   0.0,    0.0,      6.0,  0.0,    0.0},
-      {-2, 0,-2, 0, 1,    -10.0,   0.0,    0.0,      5.0,  0.0,    0.0},
-      { 0, 0, 0, 3, 1,     10.0,   0.0,    0.0,     -6.0,  0.0,    0.0},
-      { 0, 0, 0, 3, 0,    -15.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1, 1, 0, 4, 0,    -22.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1,-1, 2, 2, 0,     28.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-
-   /* 401-410 */
-      {-2, 0, 2, 3, 2,     15.0,   0.0,    0.0,     -7.0,  0.0,    0.0},
-      { 1, 0, 0, 2, 2,     23.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
-      { 0,-1, 2, 1, 2,     12.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
-      { 3,-1, 0, 0, 0,     29.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 2, 0, 0, 1, 0,    -25.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      { 1,-1, 2, 0, 0,     22.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 0, 2, 1, 0,    -18.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 0, 2, 0, 3,     15.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      { 3, 1, 0, 0, 0,    -23.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 3,-1, 2,-2, 2,     12.0,   0.0,    0.0,     -5.0,  0.0,    0.0},
-
-   /* 411-420 */
-      { 2, 0, 2,-1, 1,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-      { 1, 1, 2, 0, 0,    -19.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 0, 4,-1, 2,    -10.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-      { 1, 2, 2, 0, 2,     21.0,   0.0,    0.0,     -9.0,  0.0,    0.0},
-      {-2, 0, 0, 6, 0,     23.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 0,-1, 0, 4, 1,    -16.0,   0.0,    0.0,      8.0,  0.0,    0.0},
-      {-2,-1, 2, 4, 1,    -19.0,   0.0,    0.0,      9.0,  0.0,    0.0},
-      { 0,-2, 2, 2, 1,    -22.0,   0.0,    0.0,     10.0,  0.0,    0.0},
-      { 0,-1, 2, 2, 0,     27.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      {-1, 0, 2, 3, 1,     16.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
-
-   /* 421-430 */
-      {-2, 1, 2, 4, 2,     19.0,   0.0,    0.0,     -8.0,  0.0,    0.0},
-      { 2, 0, 0, 2, 2,      9.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      { 2,-2, 2, 0, 2,     -9.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-      {-1, 1, 2, 3, 2,     -9.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-      { 3, 0, 2,-1, 2,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-      { 4, 0, 2,-2, 1,     18.0,   0.0,    0.0,     -9.0,  0.0,    0.0},
-      {-1, 0, 0, 6, 0,     16.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      {-1,-2, 2, 4, 2,    -10.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-      {-3, 0, 2, 6, 2,    -23.0,   0.0,    0.0,      9.0,  0.0,    0.0},
-      {-1, 0, 2, 4, 0,     16.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-
-   /* 431-440 */
-      { 3, 0, 0, 2, 1,    -12.0,   0.0,    0.0,      6.0,  0.0,    0.0},
-      { 3,-1, 2, 0, 1,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-      { 3, 0, 2, 0, 0,     30.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 1, 0, 4, 0, 2,     24.0,   0.0,    0.0,    -10.0,  0.0,    0.0},
-      { 5, 0, 2,-2, 2,     10.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      { 0,-1, 2, 4, 1,    -16.0,   0.0,    0.0,      7.0,  0.0,    0.0},
-      { 2,-1, 2, 2, 1,    -16.0,   0.0,    0.0,      7.0,  0.0,    0.0},
-      { 0, 1, 2, 4, 2,     17.0,   0.0,    0.0,     -7.0,  0.0,    0.0},
-      { 1,-1, 2, 4, 2,    -24.0,   0.0,    0.0,     10.0,  0.0,    0.0},
-      { 3,-1, 2, 2, 2,    -12.0,   0.0,    0.0,      5.0,  0.0,    0.0},
-
-   /* 441-450 */
-      { 3, 0, 2, 2, 1,    -24.0,   0.0,    0.0,     11.0,  0.0,    0.0},
-      { 5, 0, 2, 0, 2,    -23.0,   0.0,    0.0,      9.0,  0.0,    0.0},
-      { 0, 0, 2, 6, 2,    -13.0,   0.0,    0.0,      5.0,  0.0,    0.0},
-      { 4, 0, 2, 2, 2,    -15.0,   0.0,    0.0,      7.0,  0.0,    0.0},
-      { 0,-1, 1,-1, 1,      0.0,   0.0,-1988.0,      0.0,  0.0,-1679.0},
-      {-1, 0, 1, 0, 3,      0.0,   0.0,  -63.0,      0.0,  0.0,  -27.0},
-      { 0,-2, 2,-2, 3,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 0,-1, 0, 1,      0.0,   0.0,    5.0,      0.0,  0.0,    4.0},
-      { 2,-2, 0,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      {-1, 0, 1, 0, 2,      0.0,   0.0,  364.0,      0.0,  0.0,  176.0},
-
-   /* 451-460 */
-      {-1, 0, 1, 0, 1,      0.0,   0.0,-1044.0,      0.0,  0.0, -891.0},
-      {-1,-1, 2,-1, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      {-2, 2, 0, 2, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-1, 0, 1, 0, 0,      0.0,   0.0,  330.0,      0.0,  0.0,    0.0},
-      {-4, 1, 2, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-3, 0, 2, 1, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-2,-1, 2, 0, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      { 1, 0,-2, 1, 1,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 2,-1,-2, 0, 1,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      {-4, 0, 2, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-
-   /* 461-470 */
-      {-3, 1, 0, 3, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1, 0,-1, 2, 0,      0.0,   0.0,    5.0,      0.0,  0.0,    0.0},
-      { 0,-2, 0, 0, 2,      0.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      { 0,-2, 0, 0, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-3, 0, 0, 3, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-2,-1, 0, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-1, 0,-2, 3, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-4, 0, 0, 4, 0,    -12.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 2, 1,-2, 0, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 2,-1, 0,-2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-
-   /* 471-480 */
-      { 0, 0, 1,-1, 0,     -5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1, 2, 0, 1, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-2, 1, 2, 0, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      { 1, 1, 0,-1, 1,      7.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      { 1, 0, 1,-2, 1,      0.0,   0.0,  -12.0,      0.0,  0.0,  -10.0},
-      { 0, 2, 0, 0, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 1,-1, 2,-3, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-1, 1, 2,-1, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-2, 0, 4,-2, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      {-2, 0, 4,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-
-   /* 481-490 */
-      {-2,-2, 0, 2, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      {-2, 0,-2, 4, 0,      0.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 2, 2,-4, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      { 1, 1, 2,-4, 2,      7.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      {-1, 2, 2,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 2, 0, 0,-3, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-1, 2, 0, 0, 1,     -5.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      { 0, 0, 0,-2, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1,-1, 2,-2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-1, 1, 0, 0, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-
-   /* 491-500 */
-      { 0, 0, 0,-1, 2,     -8.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      {-2, 1, 0, 1, 0,      9.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1,-2, 0,-2, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 1, 0,-2, 0, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-3, 1, 0, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1, 1,-2, 2, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1,-1, 0, 0, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      {-3, 0, 0, 2, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-3,-1, 0, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 2, 0, 2,-6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-
-   /* 501-510 */
-      { 0, 1, 2,-4, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 2, 0, 0,-4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      {-2, 1, 2,-2, 1,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 0,-1, 2,-4, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 0, 1, 0,-2, 2,      9.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      {-1, 0, 0,-2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 2, 0,-2,-2, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-4, 0, 2, 0, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-1,-1, 0,-1, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 0, 0,-2, 0, 2,      9.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-
-   /* 511-520 */
-      {-3, 0, 0, 1, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1, 0,-2, 1, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-2, 0,-2, 2, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 0, 0,-4, 2, 0,      8.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-2,-1,-2, 2, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 0, 2,-6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-1, 0, 2,-4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 1, 0, 0,-4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 2, 1, 2,-4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      { 2, 1, 2,-4, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-
-   /* 521-530 */
-      { 0, 1, 4,-4, 4,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 1, 4,-4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      {-1,-1,-2, 4, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1,-3, 0, 2, 0,      9.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1, 0,-2, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-2,-1, 0, 3, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 0,-2, 3, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-2, 0, 0, 3, 1,     -5.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      { 0,-1, 0, 1, 0,    -13.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-3, 0, 2, 2, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-
-   /* 531-540 */
-      { 1, 1,-2, 2, 0,     10.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1, 1, 0, 2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 1,-2, 2,-2, 1,     10.0,   0.0,   13.0,      6.0,  0.0,   -5.0},
-      { 0, 0, 1, 0, 2,      0.0,   0.0,   30.0,      0.0,  0.0,   14.0},
-      { 0, 0, 1, 0, 1,      0.0,   0.0, -162.0,      0.0,  0.0, -138.0},
-      { 0, 0, 1, 0, 0,      0.0,   0.0,   75.0,      0.0,  0.0,    0.0},
-      {-1, 2, 0, 2, 1,     -7.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-      { 0, 0, 2, 0, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-2, 0, 2, 0, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 2, 0, 0,-1, 1,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-
-   /* 541-550 */
-      { 3, 0, 0,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 1, 0, 2,-2, 3,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 2, 0, 0, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 2, 0, 2,-3, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-1, 1, 4,-2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-2,-2, 0, 4, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0,-3, 0, 2, 0,      9.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 0,-2, 4, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1,-1, 0, 3, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-2, 0, 0, 4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-
-   /* 551-560 */
-      {-1, 0, 0, 3, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 2,-2, 0, 0, 0,      7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1,-1, 0, 1, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1, 0, 0, 2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0,-2, 2, 0, 1,     -6.0,   0.0,   -3.0,      3.0,  0.0,    1.0},
-      {-1, 0, 1, 2, 1,      0.0,   0.0,   -3.0,      0.0,  0.0,   -2.0},
-      {-1, 1, 0, 3, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1,-1, 2, 1, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 0,-1, 2, 0, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-2, 1, 2, 2, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-
-   /* 561-570 */
-      { 2,-2, 2,-2, 2,     -1.0,   0.0,    3.0,      3.0,  0.0,   -1.0},
-      { 1, 1, 0, 1, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 1, 0, 1, 0, 1,      0.0,   0.0,  -13.0,      0.0,  0.0,  -11.0},
-      { 1, 0, 1, 0, 0,      3.0,   0.0,    6.0,      0.0,  0.0,    0.0},
-      { 0, 2, 0, 2, 0,     -7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 2,-1, 2,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 0,-1, 4,-2, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      { 0, 0, 4,-2, 3,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 1, 4,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 4, 0, 2,-4, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-
-   /* 571-580 */
-      { 2, 2, 2,-2, 2,      8.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 2, 0, 4,-4, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-1,-2, 0, 4, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1,-3, 2, 2, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      {-3, 0, 2, 4, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      {-3, 0, 2,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-1,-1, 0,-2, 1,      8.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      {-3, 0, 0, 0, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      {-3, 0,-2, 2, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 1, 0,-4, 1,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-
-   /* 581-590 */
-      {-2, 1, 0,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-4, 0, 0, 0, 1,     -8.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-      {-1, 0, 0,-4, 1,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      {-3, 0, 0,-2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 0, 0, 0, 3, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      {-1, 1, 0, 4, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 1,-2, 2, 0, 1,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      { 0, 1, 0, 3, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-1, 0, 2, 2, 3,      6.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 0, 0, 2, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-
-   /* 591-600 */
-      {-2, 0, 2, 2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-1, 1, 2, 2, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 3, 0, 0, 0, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 2, 1, 0, 1, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 2,-1, 2,-1, 2,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 0, 0, 2, 0, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 0, 0, 3, 0, 3,      0.0,   0.0,  -26.0,      0.0,  0.0,  -11.0},
-      { 0, 0, 3, 0, 2,      0.0,   0.0,  -10.0,      0.0,  0.0,   -5.0},
-      {-1, 2, 2, 2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      {-1, 0, 4, 0, 0,    -13.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-
-   /* 601-610 */
-      { 1, 2, 2, 0, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 3, 1, 2,-2, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 1, 1, 4,-2, 2,      7.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      {-2,-1, 0, 6, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0,-2, 0, 4, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-2, 0, 0, 6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-2,-2, 2, 4, 2,     -6.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 0,-3, 2, 2, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 0, 0, 0, 4, 2,     -7.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      {-1,-1, 2, 3, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-
-   /* 611-620 */
-      {-2, 0, 2, 4, 0,     13.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 2,-1, 0, 2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 1, 0, 0, 3, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 1, 0, 4, 1,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 0, 1, 0, 4, 0,    -11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1,-1, 2, 1, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 0, 0, 2, 2, 3,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 0, 2, 2, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-1, 0, 2, 2, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-2, 0, 4, 2, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-
-   /* 621-630 */
-      { 2, 1, 0, 2, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 2, 1, 0, 2, 0,    -12.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 2,-1, 2, 0, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 0, 2, 1, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 1, 2, 2, 0,     -4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 2, 0, 2, 0, 3,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 3, 0, 2, 0, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 1, 0, 2, 0, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      { 1, 0, 3, 0, 3,      0.0,   0.0,   -5.0,      0.0,  0.0,   -2.0},
-      { 1, 1, 2, 1, 1,     -7.0,   0.0,    0.0,      4.0,  0.0,    0.0},
-
-   /* 631-640 */
-      { 0, 2, 2, 2, 2,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 2, 1, 2, 0, 0,     -3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 2, 0, 4,-2, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 4, 1, 2,-2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      {-1,-1, 0, 6, 0,      3.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      {-3,-1, 2, 6, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      {-1, 0, 0, 6, 1,     -5.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      {-3, 0, 2, 6, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 1,-1, 0, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 1,-1, 0, 4, 0,     12.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-
-   /* 641-650 */
-      {-2, 0, 2, 5, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 1,-2, 2, 2, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 3,-1, 0, 2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1,-1, 2, 2, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 0, 2, 3, 1,      5.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      {-1, 1, 2, 4, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 0, 1, 2, 3, 2,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      {-1, 0, 4, 2, 1,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 2, 0, 2, 1, 1,      6.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 5, 0, 0, 0, 0,      6.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-
-   /* 651-660 */
-      { 2, 1, 2, 1, 2,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      { 1, 0, 4, 0, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 3, 1, 2, 0, 1,      7.0,   0.0,    0.0,     -4.0,  0.0,    0.0},
-      { 3, 0, 4,-2, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      {-2,-1, 2, 6, 2,     -5.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 0, 0, 0, 6, 0,      5.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0,-2, 2, 4, 2,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      {-2, 0, 2, 6, 1,     -6.0,   0.0,    0.0,      3.0,  0.0,    0.0},
-      { 2, 0, 0, 4, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 2, 0, 0, 4, 0,     10.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-
-   /* 661-670 */
-      { 2,-2, 2, 2, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 0, 0, 2, 4, 0,      7.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 1, 0, 2, 3, 2,      7.0,   0.0,    0.0,     -3.0,  0.0,    0.0},
-      { 4, 0, 0, 2, 0,      4.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 2, 0, 2, 2, 0,     11.0,   0.0,    0.0,      0.0,  0.0,    0.0},
-      { 0, 0, 4, 2, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 4,-1, 2, 0, 2,     -6.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 3, 0, 2, 1, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 2, 1, 2, 2, 1,      3.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 4, 1, 2, 0, 2,      5.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-
-   /* 671-678 */
-      {-1,-1, 2, 6, 2,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      {-1, 0, 2, 6, 1,     -4.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 1,-1, 2, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0},
-      { 1, 1, 2, 4, 2,      4.0,   0.0,    0.0,     -2.0,  0.0,    0.0},
-      { 3, 1, 2, 2, 2,      3.0,   0.0,    0.0,     -1.0,  0.0,    0.0},
-      { 5, 0, 2, 0, 1,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      { 2,-1, 2, 4, 2,     -3.0,   0.0,    0.0,      1.0,  0.0,    0.0},
-      { 2, 0, 2, 4, 1,     -3.0,   0.0,    0.0,      2.0,  0.0,    0.0}
-   };
-
-/* Number of terms in the luni-solar nutation model */
-   const int NLS = (int) (sizeof xls / sizeof xls[0]);
-
-/* ------------------------ */
-/* Planetary nutation model */
-/* ------------------------ */
-
-/* The units for the sine and cosine coefficients are */
-/* 0.1 microarcsecond                                 */
-
-   static const struct {
-      int nl,               /* coefficients of l, F, D and Omega */
-          nf,
-          nd,
-          nom,
-          nme,              /* coefficients of planetary longitudes */
-          nve,
-          nea,
-          nma,
-          nju,
-          nsa,
-          nur,
-          nne,
-          npa;              /* coefficient of general precession */
-      int sp,cp;            /* longitude sin, cos coefficients */
-      int se,ce;            /* obliquity sin, cos coefficients */
-   } xpl[] = {
-
-   /* 1-10 */
-      { 0, 0, 0, 0, 0,  0,  8,-16, 4, 5, 0, 0, 0, 1440,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -8, 16,-4,-5, 0, 0, 2,   56,-117,  -42, -40},
-      { 0, 0, 0, 0, 0,  0,  8,-16, 4, 5, 0, 0, 2,  125, -43,    0, -54},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0,-1, 2, 2,    0,   5,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -4,  8,-1,-5, 0, 0, 2,    3,  -7,   -3,   0},
-      { 0, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 1,    3,   0,    0,  -2},
-      { 0, 1,-1, 1, 0,  0,  3, -8, 3, 0, 0, 0, 0, -114,   0,    0,  61},
-      {-1, 0, 0, 0, 0, 10, -3,  0, 0, 0, 0, 0, 0, -219,  89,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  0,  0,-2, 6,-3, 0, 2,   -3,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0, -462,1604,    0,   0},
-
-   /* 11-20 */
-      { 0, 1,-1, 1, 0,  0, -5,  8,-3, 0, 0, 0, 0,   99,   0,    0, -53},
-      { 0, 0, 0, 0, 0,  0, -4,  8,-3, 0, 0, 0, 1,   -3,   0,    0,   2},
-      { 0, 0, 0, 0, 0,  0,  4, -8, 1, 5, 0, 0, 2,    0,   6,    2,   0},
-      { 0, 0, 0, 0, 0, -5,  6,  4, 0, 0, 0, 0, 2,    3,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 2,-5, 0, 0, 2,  -12,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 2,-5, 0, 0, 1,   14,-218,  117,   8},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 2,-5, 0, 0, 0,   31,-481, -257, -17},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 2,-5, 0, 0, 0, -491, 128,    0,   0},
-      { 0, 1,-1, 1, 0,  0, -1,  0,-2, 5, 0, 0, 0,-3084,5123, 2735,1647},
-      { 0, 0, 0, 0, 0,  0,  0,  0,-2, 5, 0, 0, 1,-1444,2409,-1286,-771},
-
-   /* 21-30 */
-      { 0, 0, 0, 0, 0,  0,  0,  0,-2, 5, 0, 0, 2,   11, -24,  -11,  -9},
-      { 2,-1,-1, 0, 0,  0,  3, -7, 0, 0, 0, 0, 0,   26,  -9,    0,   0},
-      { 1, 0,-2, 0, 0, 19,-21,  3, 0, 0, 0, 0, 0,  103, -60,    0,   0},
-      { 0, 1,-1, 1, 0,  2, -4,  0,-3, 0, 0, 0, 0,    0, -13,   -7,   0},
-      { 1, 0,-1, 1, 0,  0, -1,  0, 2, 0, 0, 0, 0,  -26, -29,  -16,  14},
-      { 0, 1,-1, 1, 0,  0, -1,  0,-4,10, 0, 0, 0,    9, -27,  -14,  -5},
-      {-2, 0, 2, 1, 0,  0,  2,  0, 0,-5, 0, 0, 0,   12,   0,    0,  -6},
-      { 0, 0, 0, 0, 0,  3, -7,  4, 0, 0, 0, 0, 0,   -7,   0,    0,   0},
-      { 0,-1, 1, 0, 0,  0,  1,  0, 1,-1, 0, 0, 0,    0,  24,    0,   0},
-      {-2, 0, 2, 1, 0,  0,  2,  0,-2, 0, 0, 0, 0,  284,   0,    0,-151},
-
-   /* 31-40 */
-      {-1, 0, 0, 0, 0, 18,-16,  0, 0, 0, 0, 0, 0,  226, 101,    0,   0},
-      {-2, 1, 1, 2, 0,  0,  1,  0,-2, 0, 0, 0, 0,    0,  -8,   -2,   0},
-      {-1, 1,-1, 1, 0, 18,-17,  0, 0, 0, 0, 0, 0,    0,  -6,   -3,   0},
-      {-1, 0, 1, 1, 0,  0,  2, -2, 0, 0, 0, 0, 0,    5,   0,    0,  -3},
-      { 0, 0, 0, 0, 0, -8, 13,  0, 0, 0, 0, 0, 2,  -41, 175,   76,  17},
-      { 0, 2,-2, 2, 0, -8, 11,  0, 0, 0, 0, 0, 0,    0,  15,    6,   0},
-      { 0, 0, 0, 0, 0, -8, 13,  0, 0, 0, 0, 0, 1,  425, 212, -133, 269},
-      { 0, 1,-1, 1, 0, -8, 12,  0, 0, 0, 0, 0, 0, 1200, 598,  319,-641},
-      { 0, 0, 0, 0, 0,  8,-13,  0, 0, 0, 0, 0, 0,  235, 334,    0,   0},
-      { 0, 1,-1, 1, 0,  8,-14,  0, 0, 0, 0, 0, 0,   11, -12,   -7,  -6},
-
-   /* 41-50 */
-      { 0, 0, 0, 0, 0,  8,-13,  0, 0, 0, 0, 0, 1,    5,  -6,    3,   3},
-      {-2, 0, 2, 1, 0,  0,  2,  0,-4, 5, 0, 0, 0,   -5,   0,    0,   3},
-      {-2, 0, 2, 2, 0,  3, -3,  0, 0, 0, 0, 0, 0,    6,   0,    0,  -3},
-      {-2, 0, 2, 0, 0,  0,  2,  0,-3, 1, 0, 0, 0,   15,   0,    0,   0},
-      { 0, 0, 0, 1, 0,  3, -5,  0, 2, 0, 0, 0, 0,   13,   0,    0,  -7},
-      {-2, 0, 2, 0, 0,  0,  2,  0,-4, 3, 0, 0, 0,   -6,  -9,    0,   0},
-      { 0,-1, 1, 0, 0,  0,  0,  2, 0, 0, 0, 0, 0,  266, -78,    0,   0},
-      { 0, 0, 0, 1, 0,  0, -1,  2, 0, 0, 0, 0, 0, -460,-435, -232, 246},
-      { 0, 1,-1, 2, 0,  0, -2,  2, 0, 0, 0, 0, 0,    0,  15,    7,   0},
-      {-1, 1, 0, 1, 0,  3, -5,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   2},
-
-   /* 51-60 */
-      {-1, 0, 1, 0, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0, 131,    0,   0},
-      {-2, 0, 2, 0, 0,  0,  2,  0,-2,-2, 0, 0, 0,    4,   0,    0,   0},
-      {-2, 2, 0, 2, 0,  0, -5,  9, 0, 0, 0, 0, 0,    0,   3,    0,   0},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 0,-1, 0, 0,    0,   4,    2,   0},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 1, 0, 0,    0,   3,    0,   0},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 0, 0, 2, 0,  -17, -19,  -10,   9},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 0, 2, 1,   -9, -11,    6,  -5},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 0, 2, 2,   -6,   0,    0,   3},
-      {-1, 0, 1, 0, 0,  0,  3, -4, 0, 0, 0, 0, 0,  -16,   8,    0,   0},
-      { 0,-1, 1, 0, 0,  0,  1,  0, 0, 2, 0, 0, 0,    0,   3,    0,   0},
-
-   /* 61-70 */
-      { 0, 1,-1, 2, 0,  0, -1,  0, 0, 2, 0, 0, 0,   11,  24,   11,  -5},
-      { 0, 0, 0, 1, 0,  0, -9, 17, 0, 0, 0, 0, 0,   -3,  -4,   -2,   1},
-      { 0, 0, 0, 2, 0, -3,  5,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
-      { 0, 1,-1, 1, 0,  0, -1,  0,-1, 2, 0, 0, 0,    0,  -8,   -4,   0},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 1,-2, 0, 0, 0,    0,   3,    0,   0},
-      { 1, 0,-2, 0, 0, 17,-16,  0,-2, 0, 0, 0, 0,    0,   5,    0,   0},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 1,-3, 0, 0, 0,    0,   3,    2,   0},
-      {-2, 0, 2, 1, 0,  0,  5, -6, 0, 0, 0, 0, 0,   -6,   4,    2,   3},
-      { 0,-2, 2, 0, 0,  0,  9,-13, 0, 0, 0, 0, 0,   -3,  -5,    0,   0},
-      { 0, 1,-1, 2, 0,  0, -1,  0, 0, 1, 0, 0, 0,   -5,   0,    0,   2},
-
-   /* 71-80 */
-      { 0, 0, 0, 1, 0,  0,  0,  0, 0, 1, 0, 0, 0,    4,  24,   13,  -2},
-      { 0,-1, 1, 0, 0,  0,  1,  0, 0, 1, 0, 0, 0,  -42,  20,    0,   0},
-      { 0,-2, 2, 0, 0,  5, -6,  0, 0, 0, 0, 0, 0,  -10, 233,    0,   0},
-      { 0,-1, 1, 1, 0,  5, -7,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
-      {-2, 0, 2, 0, 0,  6, -8,  0, 0, 0, 0, 0, 0,   78, -18,    0,   0},
-      { 2, 1,-3, 1, 0, -6,  7,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
-      { 0, 0, 0, 2, 0,  0,  0,  0, 1, 0, 0, 0, 0,    0,  -3,   -1,   0},
-      { 0,-1, 1, 1, 0,  0,  1,  0, 1, 0, 0, 0, 0,    0,  -4,   -2,   1},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 0, 2, 0, 0,    0,  -8,   -4,  -1},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 2, 0, 1,    0,  -5,    3,   0},
-
-   /* 81-90 */
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 2, 0, 2,   -7,   0,    0,   3},
-      { 0, 0, 0, 0, 0,  0, -8, 15, 0, 0, 0, 0, 2,  -14,   8,    3,   6},
-      { 0, 0, 0, 0, 0,  0, -8, 15, 0, 0, 0, 0, 1,    0,   8,   -4,   0},
-      { 0, 1,-1, 1, 0,  0, -9, 15, 0, 0, 0, 0, 0,    0,  19,   10,   0},
-      { 0, 0, 0, 0, 0,  0,  8,-15, 0, 0, 0, 0, 0,   45, -22,    0,   0},
-      { 1,-1,-1, 0, 0,  0,  8,-15, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
-      { 2, 0,-2, 0, 0,  2, -5,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
-      {-2, 0, 2, 0, 0,  0,  2,  0,-5, 5, 0, 0, 0,    0,   3,    0,   0},
-      { 2, 0,-2, 1, 0,  0, -6,  8, 0, 0, 0, 0, 0,    3,   5,    3,  -2},
-      { 2, 0,-2, 1, 0,  0, -2,  0, 3, 0, 0, 0, 0,   89, -16,   -9, -48},
-
-   /* 91-100 */
-      {-2, 1, 1, 0, 0,  0,  1,  0,-3, 0, 0, 0, 0,    0,   3,    0,   0},
-      {-2, 1, 1, 1, 0,  0,  1,  0,-3, 0, 0, 0, 0,   -3,   7,    4,   2},
-      {-2, 0, 2, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0, -349, -62,    0,   0},
-      {-2, 0, 2, 0, 0,  0,  6, -8, 0, 0, 0, 0, 0,  -15,  22,    0,   0},
-      {-2, 0, 2, 0, 0,  0,  2,  0,-1,-5, 0, 0, 0,   -3,   0,    0,   0},
-      {-1, 0, 1, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,  -53,   0,    0,   0},
-      {-1, 1, 1, 1, 0,-20, 20,  0, 0, 0, 0, 0, 0,    5,   0,    0,  -3},
-      { 1, 0,-2, 0, 0, 20,-21,  0, 0, 0, 0, 0, 0,    0,  -8,    0,   0},
-      { 0, 0, 0, 1, 0,  0,  8,-15, 0, 0, 0, 0, 0,   15,  -7,   -4,  -8},
-      { 0, 2,-2, 1, 0,  0,-10, 15, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
-
-   /* 101-110 */
-      { 0,-1, 1, 0, 0,  0,  1,  0, 1, 0, 0, 0, 0,  -21, -78,    0,   0},
-      { 0, 0, 0, 1, 0,  0,  0,  0, 1, 0, 0, 0, 0,   20, -70,  -37, -11},
-      { 0, 1,-1, 2, 0,  0, -1,  0, 1, 0, 0, 0, 0,    0,   6,    3,   0},
-      { 0, 1,-1, 1, 0,  0, -1,  0,-2, 4, 0, 0, 0,    5,   3,    2,  -2},
-      { 2, 0,-2, 1, 0, -6,  8,  0, 0, 0, 0, 0, 0,  -17,  -4,   -2,   9},
-      { 0,-2, 2, 1, 0,  5, -6,  0, 0, 0, 0, 0, 0,    0,   6,    3,   0},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0,-1, 0, 0, 1,   32,  15,   -8,  17},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 0,-1, 0, 0, 0,  174,  84,   45, -93},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 1, 0, 0, 0,   11,  56,    0,   0},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 1, 0, 0, 0,  -66, -12,   -6,  35},
-
-   /* 111-120 */
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 1, 0, 0, 1,   47,   8,    4, -25},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 1, 0, 0, 2,    0,   8,    4,   0},
-      { 0, 2,-2, 1, 0,  0, -9, 13, 0, 0, 0, 0, 0,   10, -22,  -12,  -5},
-      { 0, 0, 0, 1, 0,  0,  7,-13, 0, 0, 0, 0, 0,   -3,   0,    0,   2},
-      {-2, 0, 2, 0, 0,  0,  5, -6, 0, 0, 0, 0, 0,  -24,  12,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  9,-17, 0, 0, 0, 0, 0,    5,  -6,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -9, 17, 0, 0, 0, 0, 2,    3,   0,    0,  -2},
-      { 1, 0,-1, 1, 0,  0, -3,  4, 0, 0, 0, 0, 0,    4,   3,    1,  -2},
-      { 1, 0,-1, 1, 0, -3,  4,  0, 0, 0, 0, 0, 0,    0,  29,   15,   0},
-      { 0, 0, 0, 2, 0,  0, -1,  2, 0, 0, 0, 0, 0,   -5,  -4,   -2,   2},
-
-   /* 121-130 */
-      { 0,-1, 1, 1, 0,  0,  0,  2, 0, 0, 0, 0, 0,    8,  -3,   -1,  -5},
-      { 0,-2, 2, 0, 1,  0, -2,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
-      { 0, 0, 0, 0, 0,  3, -5,  0, 2, 0, 0, 0, 0,   10,   0,    0,   0},
-      {-2, 0, 2, 1, 0,  0,  2,  0,-3, 1, 0, 0, 0,    3,   0,    0,  -2},
-      {-2, 0, 2, 1, 0,  3, -3,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   3},
-      { 0, 0, 0, 1, 0,  8,-13,  0, 0, 0, 0, 0, 0,   46,  66,   35, -25},
-      { 0,-1, 1, 0, 0,  8,-12,  0, 0, 0, 0, 0, 0,  -14,   7,    0,   0},
-      { 0, 2,-2, 1, 0, -8, 11,  0, 0, 0, 0, 0, 0,    0,   3,    2,   0},
-      {-1, 0, 1, 0, 0,  0,  2, -2, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
-      {-1, 0, 0, 1, 0, 18,-16,  0, 0, 0, 0, 0, 0,  -68, -34,  -18,  36},
-
-   /* 131-140 */
-      { 0, 1,-1, 1, 0,  0, -1,  0,-1, 1, 0, 0, 0,    0,  14,    7,   0},
-      { 0, 0, 0, 1, 0,  3, -7,  4, 0, 0, 0, 0, 0,   10,  -6,   -3,  -5},
-      {-2, 1, 1, 1, 0,  0, -3,  7, 0, 0, 0, 0, 0,   -5,  -4,   -2,   3},
-      { 0, 1,-1, 2, 0,  0, -1,  0,-2, 5, 0, 0, 0,   -3,   5,    2,   1},
-      { 0, 0, 0, 1, 0,  0,  0,  0,-2, 5, 0, 0, 0,   76,  17,    9, -41},
-      { 0, 0, 0, 1, 0,  0, -4,  8,-3, 0, 0, 0, 0,   84, 298,  159, -45},
-      { 1, 0, 0, 1, 0,-10,  3,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
-      { 0, 2,-2, 1, 0,  0, -2,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   2},
-      {-1, 0, 0, 1, 0, 10, -3,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
-      { 0, 0, 0, 1, 0,  0,  4, -8, 3, 0, 0, 0, 0,  -82, 292,  156,  44},
-
-   /* 141-150 */
-      { 0, 0, 0, 1, 0,  0,  0,  0, 2,-5, 0, 0, 0,  -73,  17,    9,  39},
-      { 0,-1, 1, 0, 0,  0,  1,  0, 2,-5, 0, 0, 0,   -9, -16,    0,   0},
-      { 2,-1,-1, 1, 0,  0,  3, -7, 0, 0, 0, 0, 0,    3,   0,   -1,  -2},
-      {-2, 0, 2, 0, 0,  0,  2,  0, 0,-5, 0, 0, 0,   -3,   0,    0,   0},
-      { 0, 0, 0, 1, 0, -3,  7, -4, 0, 0, 0, 0, 0,   -9,  -5,   -3,   5},
-      {-2, 0, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0, -439,   0,    0,   0},
-      { 1, 0, 0, 1, 0,-18, 16,  0, 0, 0, 0, 0, 0,   57, -28,  -15, -30},
-      {-2, 1, 1, 1, 0,  0,  1,  0,-2, 0, 0, 0, 0,    0,  -6,   -3,   0},
-      { 0, 1,-1, 2, 0, -8, 12,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   2},
-      { 0, 0, 0, 1, 0, -8, 13,  0, 0, 0, 0, 0, 0,  -40,  57,   30,  21},
-
-   /* 151-160 */
-      { 0, 0, 0, 0, 0,  0,  1, -2, 0, 0, 0, 0, 1,   23,   7,    3, -13},
-      { 0, 1,-1, 1, 0,  0,  0, -2, 0, 0, 0, 0, 0,  273,  80,   43,-146},
-      { 0, 0, 0, 0, 0,  0,  1, -2, 0, 0, 0, 0, 0, -449, 430,    0,   0},
-      { 0, 1,-1, 1, 0,  0, -2,  2, 0, 0, 0, 0, 0,   -8, -47,  -25,   4},
-      { 0, 0, 0, 0, 0,  0, -1,  2, 0, 0, 0, 0, 1,    6,  47,   25,  -3},
-      {-1, 0, 1, 1, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0,  23,   13,   0},
-      {-1, 0, 1, 1, 0,  0,  3, -4, 0, 0, 0, 0, 0,   -3,   0,    0,   2},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 0,-2, 0, 0, 0,    3,  -4,   -2,  -2},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 2, 0, 0, 0,  -48,-110,  -59,  26},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 2, 0, 0, 1,   51, 114,   61, -27},
-
-   /* 161-170 */
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 2, 0, 0, 2, -133,   0,    0,  57},
-      { 0, 1,-1, 0, 0,  3, -6,  0, 0, 0, 0, 0, 0,    0,   4,    0,   0},
-      { 0, 0, 0, 1, 0, -3,  5,  0, 0, 0, 0, 0, 0,  -21,  -6,   -3,  11},
-      { 0, 1,-1, 2, 0, -3,  4,  0, 0, 0, 0, 0, 0,    0,  -3,   -1,   0},
-      { 0, 0, 0, 1, 0,  0, -2,  4, 0, 0, 0, 0, 0,  -11, -21,  -11,   6},
-      { 0, 2,-2, 1, 0, -5,  6,  0, 0, 0, 0, 0, 0,  -18,-436, -233,   9},
-      { 0,-1, 1, 0, 0,  5, -7,  0, 0, 0, 0, 0, 0,   35,  -7,    0,   0},
-      { 0, 0, 0, 1, 0,  5, -8,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},
-      {-2, 0, 2, 1, 0,  6, -8,  0, 0, 0, 0, 0, 0,   11,  -3,   -1,  -6},
-      { 0, 0, 0, 1, 0,  0, -8, 15, 0, 0, 0, 0, 0,   -5,  -3,   -1,   3},
-
-   /* 171-180 */
-      {-2, 0, 2, 1, 0,  0,  2,  0,-3, 0, 0, 0, 0,  -53,  -9,   -5,  28},
-      {-2, 0, 2, 1, 0,  0,  6, -8, 0, 0, 0, 0, 0,    0,   3,    2,   1},
-      { 1, 0,-1, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,    4,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 3,-5, 0, 0, 0,    0,  -4,    0,   0},
-      { 0, 1,-1, 1, 0,  0, -1,  0,-1, 0, 0, 0, 0,  -50, 194,  103,  27},
-      { 0, 0, 0, 0, 0,  0,  0,  0,-1, 0, 0, 0, 1,  -13,  52,   28,   7},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 0,  -91, 248,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 1,    6,  49,   26,  -3},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,   -6, -47,  -25,   3},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 1,    0,   5,    3,   0},
-
-   /* 181-190 */
-      { 0, 0, 0, 0, 0,  0,  0,  0, 1, 0, 0, 0, 2,   52,  23,   10, -23},
-      { 0, 1,-1, 2, 0,  0, -1,  0, 0,-1, 0, 0, 0,   -3,   0,    0,   1},
-      { 0, 0, 0, 1, 0,  0,  0,  0, 0,-1, 0, 0, 0,    0,   5,    3,   0},
-      { 0,-1, 1, 0, 0,  0,  1,  0, 0,-1, 0, 0, 0,   -4,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -7, 13, 0, 0, 0, 0, 2,   -4,   8,    3,   2},
-      { 0, 0, 0, 0, 0,  0,  7,-13, 0, 0, 0, 0, 0,   10,   0,    0,   0},
-      { 2, 0,-2, 1, 0,  0, -5,  6, 0, 0, 0, 0, 0,    3,   0,    0,  -2},
-      { 0, 2,-2, 1, 0,  0, -8, 11, 0, 0, 0, 0, 0,    0,   8,    4,   0},
-      { 0, 2,-2, 1,-1,  0,  2,  0, 0, 0, 0, 0, 0,    0,   8,    4,   1},
-      {-2, 0, 2, 0, 0,  0,  4, -4, 0, 0, 0, 0, 0,   -4,   0,    0,   0},
-
-   /* 191-200 */
-      { 0, 0, 0, 0, 0,  0,  0,  0, 2,-2, 0, 0, 0,   -4,   0,    0,   0},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 0, 3, 0, 0, 0,   -8,   4,    2,   4},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 3, 0, 0, 1,    8,  -4,   -2,  -4},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 3, 0, 0, 2,    0,  15,    7,   0},
-      {-2, 0, 2, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0, -138,   0,    0,   0},
-      { 0, 0, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,  -7,   -3,   0},
-      { 0, 0, 0, 2, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -7,   -3,   0},
-      { 2, 0,-2, 1, 0,  0, -2,  0, 2, 0, 0, 0, 0,   54,   0,    0, -29},
-      { 0, 1,-1, 2, 0,  0, -1,  0, 2, 0, 0, 0, 0,    0,  10,    4,   0},
-      { 0, 1,-1, 2, 0,  0,  0, -2, 0, 0, 0, 0, 0,   -7,   0,    0,   3},
-
-   /* 201-210 */
-      { 0, 0, 0, 1, 0,  0,  1, -2, 0, 0, 0, 0, 0,  -37,  35,   19,  20},
-      { 0,-1, 1, 0, 0,  0,  2, -2, 0, 0, 0, 0, 0,    0,   4,    0,   0},
-      { 0,-1, 1, 0, 0,  0,  1,  0, 0,-2, 0, 0, 0,   -4,   9,    0,   0},
-      { 0, 2,-2, 1, 0,  0, -2,  0, 0, 2, 0, 0, 0,    8,   0,    0,  -4},
-      { 0, 1,-1, 1, 0,  3, -6,  0, 0, 0, 0, 0, 0,   -9, -14,   -8,   5},
-      { 0, 0, 0, 0, 0,  3, -5,  0, 0, 0, 0, 0, 1,   -3,  -9,   -5,   3},
-      { 0, 0, 0, 0, 0,  3, -5,  0, 0, 0, 0, 0, 0, -145,  47,    0,   0},
-      { 0, 1,-1, 1, 0, -3,  4,  0, 0, 0, 0, 0, 0,  -10,  40,   21,   5},
-      { 0, 0, 0, 0, 0, -3,  5,  0, 0, 0, 0, 0, 1,   11, -49,  -26,  -7},
-      { 0, 0, 0, 0, 0, -3,  5,  0, 0, 0, 0, 0, 2,-2150,   0,    0, 932},
-
-   /* 211-220 */
-      { 0, 2,-2, 2, 0, -3,  3,  0, 0, 0, 0, 0, 0,  -12,   0,    0,   5},
-      { 0, 0, 0, 0, 0, -3,  5,  0, 0, 0, 0, 0, 2,   85,   0,    0, -37},
-      { 0, 0, 0, 0, 0,  0,  2, -4, 0, 0, 0, 0, 1,    4,   0,    0,  -2},
-      { 0, 1,-1, 1, 0,  0,  1, -4, 0, 0, 0, 0, 0,    3,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  0,  2, -4, 0, 0, 0, 0, 0,  -86, 153,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -2,  4, 0, 0, 0, 0, 1,   -6,   9,    5,   3},
-      { 0, 1,-1, 1, 0,  0, -3,  4, 0, 0, 0, 0, 0,    9, -13,   -7,  -5},
-      { 0, 0, 0, 0, 0,  0, -2,  4, 0, 0, 0, 0, 1,   -8,  12,    6,   4},
-      { 0, 0, 0, 0, 0,  0, -2,  4, 0, 0, 0, 0, 2,  -51,   0,    0,  22},
-      { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 2,  -11,-268, -116,   5},
-
-   /* 221-230 */
-      { 0, 2,-2, 2, 0, -5,  6,  0, 0, 0, 0, 0, 0,    0,  12,    5,   0},
-      { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 2,    0,   7,    3,   0},
-      { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 1,   31,   6,    3, -17},
-      { 0, 1,-1, 1, 0, -5,  7,  0, 0, 0, 0, 0, 0,  140,  27,   14, -75},
-      { 0, 0, 0, 0, 0, -5,  8,  0, 0, 0, 0, 0, 1,   57,  11,    6, -30},
-      { 0, 0, 0, 0, 0,  5, -8,  0, 0, 0, 0, 0, 0,  -14, -39,    0,   0},
-      { 0, 1,-1, 2, 0,  0, -1,  0,-1, 0, 0, 0, 0,    0,  -6,   -2,   0},
-      { 0, 0, 0, 1, 0,  0,  0,  0,-1, 0, 0, 0, 0,    4,  15,    8,  -2},
-      { 0,-1, 1, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    0,   4,    0,   0},
-      { 0, 2,-2, 1, 0,  0, -2,  0, 1, 0, 0, 0, 0,   -3,   0,    0,   1},
-
-   /* 231-240 */
-      { 0, 0, 0, 0, 0,  0, -6, 11, 0, 0, 0, 0, 2,    0,  11,    5,   0},
-      { 0, 0, 0, 0, 0,  0,  6,-11, 0, 0, 0, 0, 0,    9,   6,    0,   0},
-      { 0, 0, 0, 0,-1,  0,  4,  0, 0, 0, 0, 0, 2,   -4,  10,    4,   2},
-      { 0, 0, 0, 0, 1,  0, -4,  0, 0, 0, 0, 0, 0,    5,   3,    0,   0},
-      { 2, 0,-2, 1, 0, -3,  3,  0, 0, 0, 0, 0, 0,   16,   0,    0,  -9},
-      {-2, 0, 2, 0, 0,  0,  2,  0, 0,-2, 0, 0, 0,   -3,   0,    0,   0},
-      { 0, 2,-2, 1, 0,  0, -7,  9, 0, 0, 0, 0, 0,    0,   3,    2,  -1},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 4,-5, 0, 0, 2,    7,   0,    0,  -3},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 0,  -25,  22,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 1,   42, 223,  119, -22},
-
-   /* 241-250 */
-      { 0, 1,-1, 1, 0,  0, -1,  0, 2, 0, 0, 0, 0,  -27,-143,  -77,  14},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 1,    9,  49,   26,  -5},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 2, 0, 0, 0, 2,-1166,   0,    0, 505},
-      { 0, 2,-2, 2, 0,  0, -2,  0, 2, 0, 0, 0, 0,   -5,   0,    0,   2},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 5, 0, 0, 2,   -6,   0,    0,   3},
-      { 0, 0, 0, 1, 0,  3, -5,  0, 0, 0, 0, 0, 0,   -8,   0,    1,   4},
-      { 0,-1, 1, 0, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
-      { 0, 2,-2, 1, 0, -3,  3,  0, 0, 0, 0, 0, 0,  117,   0,    0, -63},
-      { 0, 0, 0, 1, 0,  0,  2, -4, 0, 0, 0, 0, 0,   -4,   8,    4,   2},
-      { 0, 2,-2, 1, 0,  0, -4,  4, 0, 0, 0, 0, 0,    3,   0,    0,  -2},
-
-   /* 251-260 */
-      { 0, 1,-1, 2, 0, -5,  7,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   2},
-      { 0, 0, 0, 0, 0,  0,  3, -6, 0, 0, 0, 0, 0,    0,  31,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -3,  6, 0, 0, 0, 0, 1,   -5,   0,    1,   3},
-      { 0, 1,-1, 1, 0,  0, -4,  6, 0, 0, 0, 0, 0,    4,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  0, -3,  6, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
-      { 0, 0, 0, 0, 0,  0, -3,  6, 0, 0, 0, 0, 2,  -24, -13,   -6,  10},
-      { 0,-1, 1, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    3,   0,    0,   0},
-      { 0, 0, 0, 1, 0,  2, -3,  0, 0, 0, 0, 0, 0,    0, -32,  -17,   0},
-      { 0, 0, 0, 0, 0,  0, -5,  9, 0, 0, 0, 0, 2,    8,  12,    5,  -3},
-      { 0, 0, 0, 0, 0,  0, -5,  9, 0, 0, 0, 0, 1,    3,   0,    0,  -1},
-
-   /* 261-270 */
-      { 0, 0, 0, 0, 0,  0,  5, -9, 0, 0, 0, 0, 0,    7,  13,    0,   0},
-      { 0,-1, 1, 0, 0,  0,  1,  0,-2, 0, 0, 0, 0,   -3,  16,    0,   0},
-      { 0, 2,-2, 1, 0,  0, -2,  0, 2, 0, 0, 0, 0,   50,   0,    0, -27},
-      {-2, 1, 1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -5,   -3,   0},
-      { 0,-2, 2, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,   13,   0,    0,   0},
-      { 0, 0, 0, 0, 0, -6, 10,  0, 0, 0, 0, 0, 1,    0,   5,    3,   1},
-      { 0, 0, 0, 0, 0, -6, 10,  0, 0, 0, 0, 0, 2,   24,   5,    2, -11},
-      { 0, 0, 0, 0, 0, -2,  3,  0, 0, 0, 0, 0, 2,    5, -11,   -5,  -2},
-      { 0, 0, 0, 0, 0, -2,  3,  0, 0, 0, 0, 0, 1,   30,  -3,   -2, -16},
-      { 0, 1,-1, 1, 0, -2,  2,  0, 0, 0, 0, 0, 0,   18,   0,    0,  -9},
-
-   /* 271-280 */
-      { 0, 0, 0, 0, 0,  2, -3,  0, 0, 0, 0, 0, 0,    8, 614,    0,   0},
-      { 0, 0, 0, 0, 0,  2, -3,  0, 0, 0, 0, 0, 1,    3,  -3,   -1,  -2},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 3, 0, 0, 0, 1,    6,  17,    9,  -3},
-      { 0, 1,-1, 1, 0,  0, -1,  0, 3, 0, 0, 0, 0,   -3,  -9,   -5,   2},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 3, 0, 0, 0, 1,    0,   6,    3,  -1},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 3, 0, 0, 0, 2, -127,  21,    9,  55},
-      { 0, 0, 0, 0, 0,  0,  4, -8, 0, 0, 0, 0, 0,    3,   5,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -4,  8, 0, 0, 0, 0, 2,   -6, -10,   -4,   3},
-      { 0,-2, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,    5,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -4,  7, 0, 0, 0, 0, 2,   16,   9,    4,  -7},
-
-   /* 281-290 */
-      { 0, 0, 0, 0, 0,  0, -4,  7, 0, 0, 0, 0, 1,    3,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  0,  4, -7, 0, 0, 0, 0, 0,    0,  22,    0,   0},
-      { 0, 0, 0, 1, 0, -2,  3,  0, 0, 0, 0, 0, 0,    0,  19,   10,   0},
-      { 0, 2,-2, 1, 0,  0, -2,  0, 3, 0, 0, 0, 0,    7,   0,    0,  -4},
-      { 0, 0, 0, 0, 0,  0, -5, 10, 0, 0, 0, 0, 2,    0,  -5,   -2,   0},
-      { 0, 0, 0, 1, 0, -1,  2,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
-      { 0, 0, 0, 0, 0,  0,  0,  0, 4, 0, 0, 0, 2,   -9,   3,    1,   4},
-      { 0, 0, 0, 0, 0,  0, -3,  5, 0, 0, 0, 0, 2,   17,   0,    0,  -7},
-      { 0, 0, 0, 0, 0,  0, -3,  5, 0, 0, 0, 0, 1,    0,  -3,   -2,  -1},
-      { 0, 0, 0, 0, 0,  0,  3, -5, 0, 0, 0, 0, 0,  -20,  34,    0,   0},
-
-   /* 291-300 */
-      { 0, 0, 0, 0, 0,  1, -2,  0, 0, 0, 0, 0, 1,  -10,   0,    1,   5},
-      { 0, 1,-1, 1, 0,  1, -3,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   2},
-      { 0, 0, 0, 0, 0,  1, -2,  0, 0, 0, 0, 0, 0,   22, -87,    0,   0},
-      { 0, 0, 0, 0, 0, -1,  2,  0, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
-      { 0, 0, 0, 0, 0, -1,  2,  0, 0, 0, 0, 0, 2,   -3,  -6,   -2,   1},
-      { 0, 0, 0, 0, 0, -7, 11,  0, 0, 0, 0, 0, 2,  -16,  -3,   -1,   7},
-      { 0, 0, 0, 0, 0, -7, 11,  0, 0, 0, 0, 0, 1,    0,  -3,   -2,   0},
-      { 0,-2, 2, 0, 0,  4, -4,  0, 0, 0, 0, 0, 0,    4,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  2, -3, 0, 0, 0, 0, 0,  -68,  39,    0,   0},
-      { 0, 2,-2, 1, 0, -4,  4,  0, 0, 0, 0, 0, 0,   27,   0,    0, -14},
-
-   /* 301-310 */
-      { 0,-1, 1, 0, 0,  4, -5,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  1, -1, 0, 0, 0, 0, 0,  -25,   0,    0,   0},
-      { 0, 0, 0, 0, 0, -4,  7,  0, 0, 0, 0, 0, 1,  -12,  -3,   -2,   6},
-      { 0, 1,-1, 1, 0, -4,  6,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
-      { 0, 0, 0, 0, 0, -4,  7,  0, 0, 0, 0, 0, 2,    3,  66,   29,  -1},
-      { 0, 0, 0, 0, 0, -4,  6,  0, 0, 0, 0, 0, 2,  490,   0,    0,-213},
-      { 0, 0, 0, 0, 0, -4,  6,  0, 0, 0, 0, 0, 1,  -22,  93,   49,  12},
-      { 0, 1,-1, 1, 0, -4,  5,  0, 0, 0, 0, 0, 0,   -7,  28,   15,   4},
-      { 0, 0, 0, 0, 0, -4,  6,  0, 0, 0, 0, 0, 1,   -3,  13,    7,   2},
-      { 0, 0, 0, 0, 0,  4, -6,  0, 0, 0, 0, 0, 0,  -46,  14,    0,   0},
-
-   /* 311-320 */
-      {-2, 0, 2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  0,  1, 0, 0, 0, 0, 0,    2,   1,    0,   0},
-      { 0,-1, 1, 0, 0,  1,  0,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
-      { 0, 0, 0, 1, 0,  1, -1,  0, 0, 0, 0, 0, 0,  -28,   0,    0,  15},
-      { 0, 0, 0, 0, 0,  0, -1,  0, 5, 0, 0, 0, 2,    5,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  0,  1, -3, 0, 0, 0, 0, 0,    0,   3,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -1,  3, 0, 0, 0, 0, 2,  -11,   0,    0,   5},
-      { 0, 0, 0, 0, 0,  0, -7, 12, 0, 0, 0, 0, 2,    0,   3,    1,   0},
-      { 0, 0, 0, 0, 0, -1,  1,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
-      { 0, 0, 0, 0, 0, -1,  1,  0, 0, 0, 0, 0, 1,   25, 106,   57, -13},
-
-   /* 321-330 */
-      { 0, 1,-1, 1, 0, -1,  0,  0, 0, 0, 0, 0, 0,    5,  21,   11,  -3},
-      { 0, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0, 1485,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 1,   -7, -32,  -17,   4},
-      { 0, 1,-1, 1, 0,  1, -2,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},
-      { 0, 0, 0, 0, 0,  0, -2,  5, 0, 0, 0, 0, 2,   -6,  -3,   -2,   3},
-      { 0, 0, 0, 0, 0,  0, -1,  0, 4, 0, 0, 0, 2,   30,  -6,   -2, -13},
-      { 0, 0, 0, 0, 0,  0,  1,  0,-4, 0, 0, 0, 0,   -4,   4,    0,   0},
-      { 0, 0, 0, 1, 0, -1,  1,  0, 0, 0, 0, 0, 0,  -19,   0,    0,  10},
-      { 0, 0, 0, 0, 0,  0, -6, 10, 0, 0, 0, 0, 2,    0,   4,    2,  -1},
-      { 0, 0, 0, 0, 0,  0, -6, 10, 0, 0, 0, 0, 0,    0,   3,    0,   0},
-
-   /* 331-340 */
-      { 0, 2,-2, 1, 0,  0, -3,  0, 3, 0, 0, 0, 0,    4,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  0, -3,  7, 0, 0, 0, 0, 2,    0,  -3,   -1,   0},
-      {-2, 0, 2, 0, 0,  4, -4,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -5,  8, 0, 0, 0, 0, 2,    5,   3,    1,  -2},
-      { 0, 0, 0, 0, 0,  0,  5, -8, 0, 0, 0, 0, 0,    0,  11,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -1,  0, 3, 0, 0, 0, 2,  118,   0,    0, -52},
-      { 0, 0, 0, 0, 0,  0, -1,  0, 3, 0, 0, 0, 1,    0,  -5,   -3,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0,-3, 0, 0, 0, 0,  -28,  36,    0,   0},
-      { 0, 0, 0, 0, 0,  2, -4,  0, 0, 0, 0, 0, 0,    5,  -5,    0,   0},
-      { 0, 0, 0, 0, 0, -2,  4,  0, 0, 0, 0, 0, 1,   14, -59,  -31,  -8},
-
-   /* 341-350 */
-      { 0, 1,-1, 1, 0, -2,  3,  0, 0, 0, 0, 0, 0,    0,   9,    5,   1},
-      { 0, 0, 0, 0, 0, -2,  4,  0, 0, 0, 0, 0, 2, -458,   0,    0, 198},
-      { 0, 0, 0, 0, 0, -6,  9,  0, 0, 0, 0, 0, 2,    0, -45,  -20,   0},
-      { 0, 0, 0, 0, 0, -6,  9,  0, 0, 0, 0, 0, 1,    9,   0,    0,  -5},
-      { 0, 0, 0, 0, 0,  6, -9,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
-      { 0, 0, 0, 1, 0,  0,  1,  0,-2, 0, 0, 0, 0,    0,  -4,   -2,  -1},
-      { 0, 2,-2, 1, 0, -2,  2,  0, 0, 0, 0, 0, 0,   11,   0,    0,  -6},
-      { 0, 0, 0, 0, 0,  0, -4,  6, 0, 0, 0, 0, 2,    6,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  0,  4, -6, 0, 0, 0, 0, 0,  -16,  23,    0,   0},
-      { 0, 0, 0, 1, 0,  3, -4,  0, 0, 0, 0, 0, 0,    0,  -4,   -2,   0},
-
-   /* 351-360 */
-      { 0, 0, 0, 0, 0,  0, -1,  0, 2, 0, 0, 0, 2,   -5,   0,    0,   2},
-      { 0, 0, 0, 0, 0,  0,  1,  0,-2, 0, 0, 0, 0, -166, 269,    0,   0},
-      { 0, 0, 0, 1, 0,  0,  1,  0,-1, 0, 0, 0, 0,   15,   0,    0,  -8},
-      { 0, 0, 0, 0, 0, -5,  9,  0, 0, 0, 0, 0, 2,   10,   0,    0,  -4},
-      { 0, 0, 0, 0, 0,  0,  3, -4, 0, 0, 0, 0, 0,  -78,  45,    0,   0},
-      { 0, 0, 0, 0, 0, -3,  4,  0, 0, 0, 0, 0, 2,    0,  -5,   -2,   0},
-      { 0, 0, 0, 0, 0, -3,  4,  0, 0, 0, 0, 0, 1,    7,   0,    0,  -4},
-      { 0, 0, 0, 0, 0,  3, -4,  0, 0, 0, 0, 0, 0,   -5, 328,    0,   0},
-      { 0, 0, 0, 0, 0,  3, -4,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -2},
-      { 0, 0, 0, 1, 0,  0,  2, -2, 0, 0, 0, 0, 0,    5,   0,    0,  -2},
-
-   /* 361-370 */
-      { 0, 0, 0, 1, 0,  0, -1,  0, 2, 0, 0, 0, 0,    0,   3,    1,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 0,-3, 0, 0, 0,   -3,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 1,-5, 0, 0, 0,   -3,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -1,  0, 1, 0, 0, 0, 1,    0,  -4,   -2,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,-1223, -26,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 1,    0,   7,    3,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0,-3, 5, 0, 0, 0,    3,   0,    0,   0},
-      { 0, 0, 0, 1, 0, -3,  4,  0, 0, 0, 0, 0, 0,    0,   3,    2,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 0,-2, 0, 0, 0,   -6,  20,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  2, -2, 0, 0, 0, 0, 0, -368,   0,    0,   0},
-
-   /* 371-380 */
-      { 0, 0, 0, 0, 0,  0,  1,  0, 0,-1, 0, 0, 0,  -75,   0,    0,   0},
-      { 0, 0, 0, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,   11,   0,    0,  -6},
-      { 0, 0, 0, 1, 0,  0, -2,  2, 0, 0, 0, 0, 0,    3,   0,    0,  -2},
-      { 0, 0, 0, 0, 0, -8, 14,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 2,-5, 0, 0, 0,  -13, -30,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  5, -8, 3, 0, 0, 0, 0,   21,   3,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  5, -8, 3, 0, 0, 0, 2,   -3,   0,    0,   1},
-      { 0, 0, 0, 0, 0,  0, -1,  0, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    8, -27,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  3, -8, 3, 0, 0, 0, 0,  -19, -11,    0,   0},
-
-   /* 381-390 */
-      { 0, 0, 0, 0, 0,  0, -3,  8,-3, 0, 0, 0, 2,   -4,   0,    0,   2},
-      { 0, 0, 0, 0, 0,  0,  1,  0,-2, 5, 0, 0, 2,    0,   5,    2,   0},
-      { 0, 0, 0, 0, 0, -8, 12,  0, 0, 0, 0, 0, 2,   -6,   0,    0,   2},
-      { 0, 0, 0, 0, 0, -8, 12,  0, 0, 0, 0, 0, 0,   -8,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 1,-2, 0, 0, 0,   -1,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 0, 1, 0, 0, 2,  -14,   0,    0,   6},
-      { 0, 0, 0, 0, 0,  0,  0,  2, 0, 0, 0, 0, 0,    6,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  0,  2, 0, 0, 0, 0, 2,  -74,   0,    0,  32},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 0, 2, 0, 0, 2,    0,  -3,   -1,   0},
-      { 0, 2,-2, 1, 0, -5,  5,  0, 0, 0, 0, 0, 0,    4,   0,    0,  -2},
-
-   /* 391-400 */
-      { 0, 0, 0, 0, 0,  0,  1,  0, 1, 0, 0, 0, 0,    8,  11,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 1, 0, 0, 0, 1,    0,   3,    2,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 1, 0, 0, 0, 2, -262,   0,    0, 114},
-      { 0, 0, 0, 0, 0,  3, -6,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
-      { 0, 0, 0, 0, 0, -3,  6,  0, 0, 0, 0, 0, 1,   -7,   0,    0,   4},
-      { 0, 0, 0, 0, 0, -3,  6,  0, 0, 0, 0, 0, 2,    0, -27,  -12,   0},
-      { 0, 0, 0, 0, 0,  0, -1,  4, 0, 0, 0, 0, 2,  -19,  -8,   -4,   8},
-      { 0, 0, 0, 0, 0, -5,  7,  0, 0, 0, 0, 0, 2,  202,   0,    0, -87},
-      { 0, 0, 0, 0, 0, -5,  7,  0, 0, 0, 0, 0, 1,   -8,  35,   19,   5},
-      { 0, 1,-1, 1, 0, -5,  6,  0, 0, 0, 0, 0, 0,    0,   4,    2,   0},
-
-   /* 401-410 */
-      { 0, 0, 0, 0, 0,  5, -7,  0, 0, 0, 0, 0, 0,   16,  -5,    0,   0},
-      { 0, 2,-2, 1, 0,  0, -1,  0, 1, 0, 0, 0, 0,    5,   0,    0,  -3},
-      { 0, 0, 0, 0, 0,  0, -1,  0, 1, 0, 0, 0, 0,    0,  -3,    0,   0},
-      { 0, 0, 0, 0,-1,  0,  3,  0, 0, 0, 0, 0, 2,    1,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 2, 0, 0, 0, 2,  -35, -48,  -21,  15},
-      { 0, 0, 0, 0, 0,  0, -2,  6, 0, 0, 0, 0, 2,   -3,  -5,   -2,   1},
-      { 0, 0, 0, 1, 0,  2, -2,  0, 0, 0, 0, 0, 0,    6,   0,    0,  -3},
-      { 0, 0, 0, 0, 0,  0, -6,  9, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
-      { 0, 0, 0, 0, 0,  0,  6, -9, 0, 0, 0, 0, 0,    0,  -5,    0,   0},
-      { 0, 0, 0, 0, 0, -2,  2,  0, 0, 0, 0, 0, 1,   12,  55,   29,  -6},
-
-   /* 411-420 */
-      { 0, 1,-1, 1, 0, -2,  1,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},
-      { 0, 0, 0, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0, -598,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  2, -2,  0, 0, 0, 0, 0, 1,   -3, -13,   -7,   1},
-      { 0, 0, 0, 0, 0,  0,  1,  0, 3, 0, 0, 0, 2,   -5,  -7,   -3,   2},
-      { 0, 0, 0, 0, 0,  0, -5,  7, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
-      { 0, 0, 0, 0, 0,  0,  5, -7, 0, 0, 0, 0, 0,    5,  -7,    0,   0},
-      { 0, 0, 0, 1, 0, -2,  2,  0, 0, 0, 0, 0, 0,    4,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  0,  4, -5, 0, 0, 0, 0, 0,   16,  -6,    0,   0},
-      { 0, 0, 0, 0, 0,  1, -3,  0, 0, 0, 0, 0, 0,    8,  -3,    0,   0},
-      { 0, 0, 0, 0, 0, -1,  3,  0, 0, 0, 0, 0, 1,    8, -31,  -16,  -4},
-
-   /* 421-430 */
-      { 0, 1,-1, 1, 0, -1,  2,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
-      { 0, 0, 0, 0, 0, -1,  3,  0, 0, 0, 0, 0, 2,  113,   0,    0, -49},
-      { 0, 0, 0, 0, 0, -7, 10,  0, 0, 0, 0, 0, 2,    0, -24,  -10,   0},
-      { 0, 0, 0, 0, 0, -7, 10,  0, 0, 0, 0, 0, 1,    4,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  0,  3, -3, 0, 0, 0, 0, 0,   27,   0,    0,   0},
-      { 0, 0, 0, 0, 0, -4,  8,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
-      { 0, 0, 0, 0, 0, -4,  5,  0, 0, 0, 0, 0, 2,    0,  -4,   -2,   0},
-      { 0, 0, 0, 0, 0, -4,  5,  0, 0, 0, 0, 0, 1,    5,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  4, -5,  0, 0, 0, 0, 0, 0,    0,  -3,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  1, 0, 0, 0, 0, 2,  -13,   0,    0,   6},
-
-   /* 431-440 */
-      { 0, 0, 0, 0, 0,  0, -2,  0, 5, 0, 0, 0, 2,    5,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  0,  0,  3, 0, 0, 0, 0, 2,  -18, -10,   -4,   8},
-      { 0, 0, 0, 0, 0,  1,  0,  0, 0, 0, 0, 0, 0,   -4, -28,    0,   0},
-      { 0, 0, 0, 0, 0,  1,  0,  0, 0, 0, 0, 0, 2,   -5,   6,    3,   2},
-      { 0, 0, 0, 0, 0, -9, 13,  0, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
-      { 0, 0, 0, 0, 0,  0, -1,  5, 0, 0, 0, 0, 2,   -5,  -9,   -4,   2},
-      { 0, 0, 0, 0, 0,  0, -2,  0, 4, 0, 0, 0, 2,   17,   0,    0,  -7},
-      { 0, 0, 0, 0, 0,  0,  2,  0,-4, 0, 0, 0, 0,   11,   4,    0,   0},
-      { 0, 0, 0, 0, 0,  0, -2,  7, 0, 0, 0, 0, 2,    0,  -6,   -2,   0},
-      { 0, 0, 0, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   83,  15,    0,   0},
-
-   /* 441-450 */
-      { 0, 0, 0, 0, 0, -2,  5,  0, 0, 0, 0, 0, 1,   -4,   0,    0,   2},
-      { 0, 0, 0, 0, 0, -2,  5,  0, 0, 0, 0, 0, 2,    0,-114,  -49,   0},
-      { 0, 0, 0, 0, 0, -6,  8,  0, 0, 0, 0, 0, 2,  117,   0,    0, -51},
-      { 0, 0, 0, 0, 0, -6,  8,  0, 0, 0, 0, 0, 1,   -5,  19,   10,   2},
-      { 0, 0, 0, 0, 0,  6, -8,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
-      { 0, 0, 0, 1, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   2},
-      { 0, 0, 0, 0, 0,  0, -3,  9, 0, 0, 0, 0, 2,    0,  -3,   -1,   0},
-      { 0, 0, 0, 0, 0,  0,  5, -6, 0, 0, 0, 0, 0,    3,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  5, -6, 0, 0, 0, 0, 2,    0,  -6,   -2,   0},
-      { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,  393,   3,    0,   0},
-
-   /* 451-460 */
-      { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 1,   -4,  21,   11,   2},
-      { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 2,   -6,   0,   -1,   3},
-      { 0, 0, 0, 0, 0, -5, 10,  0, 0, 0, 0, 0, 2,   -3,   8,    4,   1},
-      { 0, 0, 0, 0, 0,  0,  4, -4, 0, 0, 0, 0, 0,    8,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  4, -4, 0, 0, 0, 0, 2,   18, -29,  -13,  -8},
-      { 0, 0, 0, 0, 0, -3,  3,  0, 0, 0, 0, 0, 1,    8,  34,   18,  -4},
-      { 0, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,   89,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 1,    3,  12,    6,  -1},
-      { 0, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 2,   54, -15,   -7, -24},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 0,-3, 0, 0, 0,    0,   3,    0,   0},
-
-   /* 461-470 */
-      { 0, 0, 0, 0, 0,  0, -5, 13, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
-      { 0, 0, 0, 0, 0,  0,  2,  0,-1, 0, 0, 0, 0,    0,  35,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  2,  0,-1, 0, 0, 0, 2, -154, -30,  -13,  67},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 0,-2, 0, 0, 0,   15,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 0,-2, 0, 0, 1,    0,   4,    2,   0},
-      { 0, 0, 0, 0, 0,  0,  3, -2, 0, 0, 0, 0, 0,    0,   9,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  3, -2, 0, 0, 0, 0, 2,   80, -71,  -31, -35},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 0,-1, 0, 0, 2,    0, -20,   -9,   0},
-      { 0, 0, 0, 0, 0,  0, -6, 15, 0, 0, 0, 0, 2,   11,   5,    2,  -5},
-      { 0, 0, 0, 0, 0, -8, 15,  0, 0, 0, 0, 0, 2,   61, -96,  -42, -27},
-
-   /* 471-480 */
-      { 0, 0, 0, 0, 0, -3,  9, -4, 0, 0, 0, 0, 2,   14,   9,    4,  -6},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 2,-5, 0, 0, 2,  -11,  -6,   -3,   5},
-      { 0, 0, 0, 0, 0,  0, -2,  8,-1,-5, 0, 0, 2,    0,  -3,   -1,   0},
-      { 0, 0, 0, 0, 0,  0,  6, -8, 3, 0, 0, 0, 2,  123,-415, -180, -53},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 0,    0,   0,    0, -35},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 1,    7, -32,  -17,  -4},
-      { 0, 1,-1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -9,   -5,   0},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 1,    0,  -4,    2,   0},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 0, 0, 0, 2,  -89,   0,    0,  38},
-
-   /* 481-490 */
-      { 0, 0, 0, 0, 0,  0, -6, 16,-4,-5, 0, 0, 2,    0, -86,  -19,  -6},
-      { 0, 0, 0, 0, 0,  0, -2,  8,-3, 0, 0, 0, 2,    0,   0,  -19,   6},
-      { 0, 0, 0, 0, 0,  0, -2,  8,-3, 0, 0, 0, 2, -123,-416, -180,  53},
-      { 0, 0, 0, 0, 0,  0,  6, -8, 1, 5, 0, 0, 2,    0,  -3,   -1,   0},
-      { 0, 0, 0, 0, 0,  0,  2,  0,-2, 5, 0, 0, 2,   12,  -6,   -3,  -5},
-      { 0, 0, 0, 0, 0,  3, -5,  4, 0, 0, 0, 0, 2,  -13,   9,    4,   6},
-      { 0, 0, 0, 0, 0, -8, 11,  0, 0, 0, 0, 0, 2,    0, -15,   -7,   0},
-      { 0, 0, 0, 0, 0, -8, 11,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -1},
-      { 0, 0, 0, 0, 0, -8, 11,  0, 0, 0, 0, 0, 2,  -62, -97,  -42,  27},
-      { 0, 0, 0, 0, 0,  0, 11,  0, 0, 0, 0, 0, 2,  -11,   5,    2,   5},
-
-   /* 491-500 */
-      { 0, 0, 0, 0, 0,  0,  2,  0, 0, 1, 0, 0, 2,    0, -19,   -8,   0},
-      { 0, 0, 0, 0, 0,  3, -3,  0, 2, 0, 0, 0, 2,   -3,   0,    0,   1},
-      { 0, 2,-2, 1, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,   4,    2,   0},
-      { 0, 1,-1, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,   3,    0,   0},
-      { 0, 2,-2, 1, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,   4,    2,   0},
-      { 0, 0, 0, 0, 0,  0,  1,  2, 0, 0, 0, 0, 2,  -85, -70,  -31,  37},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 1, 0, 0, 0, 2,  163, -12,   -5, -72},
-      { 0, 0, 0, 0, 0, -3,  7,  0, 0, 0, 0, 0, 2,  -63, -16,   -7,  28},
-      { 0, 0, 0, 0, 0,  0,  0,  4, 0, 0, 0, 0, 2,  -21, -32,  -14,   9},
-      { 0, 0, 0, 0, 0, -5,  6,  0, 0, 0, 0, 0, 2,    0,  -3,   -1,   0},
-
-   /* 501-510 */
-      { 0, 0, 0, 0, 0, -5,  6,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -2},
-      { 0, 0, 0, 0, 0,  5, -6,  0, 0, 0, 0, 0, 0,    0,   8,    0,   0},
-      { 0, 0, 0, 0, 0,  5, -6,  0, 0, 0, 0, 0, 2,    3,  10,    4,  -1},
-      { 0, 0, 0, 0, 0,  0,  2,  0, 2, 0, 0, 0, 2,    3,   0,    0,  -1},
-      { 0, 0, 0, 0, 0,  0, -1,  6, 0, 0, 0, 0, 2,    0,  -7,   -3,   0},
-      { 0, 0, 0, 0, 0,  0,  7, -9, 0, 0, 0, 0, 2,    0,  -4,   -2,   0},
-      { 0, 0, 0, 0, 0,  2, -1,  0, 0, 0, 0, 0, 0,    6,  19,    0,   0},
-      { 0, 0, 0, 0, 0,  2, -1,  0, 0, 0, 0, 0, 2,    5,-173,  -75,  -2},
-      { 0, 0, 0, 0, 0,  0,  6, -7, 0, 0, 0, 0, 2,    0,  -7,   -3,   0},
-      { 0, 0, 0, 0, 0,  0,  5, -5, 0, 0, 0, 0, 2,    7, -12,   -5,  -3},
-
-   /* 511-520 */
-      { 0, 0, 0, 0, 0, -1,  4,  0, 0, 0, 0, 0, 1,   -3,   0,    0,   2},
-      { 0, 0, 0, 0, 0, -1,  4,  0, 0, 0, 0, 0, 2,    3,  -4,   -2,  -1},
-      { 0, 0, 0, 0, 0, -7,  9,  0, 0, 0, 0, 0, 2,   74,   0,    0, -32},
-      { 0, 0, 0, 0, 0, -7,  9,  0, 0, 0, 0, 0, 1,   -3,  12,    6,   2},
-      { 0, 0, 0, 0, 0,  0,  4, -3, 0, 0, 0, 0, 2,   26, -14,   -6, -11},
-      { 0, 0, 0, 0, 0,  0,  3, -1, 0, 0, 0, 0, 2,   19,   0,    0,  -8},
-      { 0, 0, 0, 0, 0, -4,  4,  0, 0, 0, 0, 0, 1,    6,  24,   13,  -3},
-      { 0, 0, 0, 0, 0,  4, -4,  0, 0, 0, 0, 0, 0,   83,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  4, -4,  0, 0, 0, 0, 0, 1,    0, -10,   -5,   0},
-      { 0, 0, 0, 0, 0,  4, -4,  0, 0, 0, 0, 0, 2,   11,  -3,   -1,  -5},
-
-   /* 521-530 */
-      { 0, 0, 0, 0, 0,  0,  2,  1, 0, 0, 0, 0, 2,    3,   0,    1,  -1},
-      { 0, 0, 0, 0, 0,  0, -3,  0, 5, 0, 0, 0, 2,    3,   0,    0,  -1},
-      { 0, 0, 0, 0, 0,  1,  1,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  1,  1,  0, 0, 0, 0, 0, 1,    5, -23,  -12,  -3},
-      { 0, 0, 0, 0, 0,  1,  1,  0, 0, 0, 0, 0, 2, -339,   0,    0, 147},
-      { 0, 0, 0, 0, 0, -9, 12,  0, 0, 0, 0, 0, 2,    0, -10,   -5,   0},
-      { 0, 0, 0, 0, 0,  0,  3,  0,-4, 0, 0, 0, 0,    5,   0,    0,   0},
-      { 0, 2,-2, 1, 0,  1, -1,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
-      { 0, 0, 0, 0, 0,  0,  7, -8, 0, 0, 0, 0, 2,    0,  -4,   -2,   0},
-      { 0, 0, 0, 0, 0,  0,  3,  0,-3, 0, 0, 0, 0,   18,  -3,    0,   0},
-
-   /* 531-540 */
-      { 0, 0, 0, 0, 0,  0,  3,  0,-3, 0, 0, 0, 2,    9, -11,   -5,  -4},
-      { 0, 0, 0, 0, 0, -2,  6,  0, 0, 0, 0, 0, 2,   -8,   0,    0,   4},
-      { 0, 0, 0, 0, 0, -6,  7,  0, 0, 0, 0, 0, 1,    3,   0,    0,  -1},
-      { 0, 0, 0, 0, 0,  6, -7,  0, 0, 0, 0, 0, 0,    0,   9,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  6, -6, 0, 0, 0, 0, 2,    6,  -9,   -4,  -2},
-      { 0, 0, 0, 0, 0,  0,  3,  0,-2, 0, 0, 0, 0,   -4, -12,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  3,  0,-2, 0, 0, 0, 2,   67, -91,  -39, -29},
-      { 0, 0, 0, 0, 0,  0,  5, -4, 0, 0, 0, 0, 2,   30, -18,   -8, -13},
-      { 0, 0, 0, 0, 0,  3, -2,  0, 0, 0, 0, 0, 0,    0,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  3, -2,  0, 0, 0, 0, 0, 2,    0,-114,  -50,   0},
-
-   /* 541-550 */
-      { 0, 0, 0, 0, 0,  0,  3,  0,-1, 0, 0, 0, 2,    0,   0,    0,  23},
-      { 0, 0, 0, 0, 0,  0,  3,  0,-1, 0, 0, 0, 2,  517,  16,    7,-224},
-      { 0, 0, 0, 0, 0,  0,  3,  0, 0,-2, 0, 0, 2,    0,  -7,   -3,   0},
-      { 0, 0, 0, 0, 0,  0,  4, -2, 0, 0, 0, 0, 2,  143,  -3,   -1, -62},
-      { 0, 0, 0, 0, 0,  0,  3,  0, 0,-1, 0, 0, 2,   29,   0,    0, -13},
-      { 0, 2,-2, 1, 0,  0,  1,  0,-1, 0, 0, 0, 0,   -4,   0,    0,   2},
-      { 0, 0, 0, 0, 0, -8, 16,  0, 0, 0, 0, 0, 2,   -6,   0,    0,   3},
-      { 0, 0, 0, 0, 0,  0,  3,  0, 2,-5, 0, 0, 2,    5,  12,    5,  -2},
-      { 0, 0, 0, 0, 0,  0,  7, -8, 3, 0, 0, 0, 2,  -25,   0,    0,  11},
-      { 0, 0, 0, 0, 0,  0, -5, 16,-4,-5, 0, 0, 2,   -3,   0,    0,   1},
-
-   /* 551-560 */
-      { 0, 0, 0, 0, 0,  0,  3,  0, 0, 0, 0, 0, 2,    0,   4,    2,   0},
-      { 0, 0, 0, 0, 0,  0, -1,  8,-3, 0, 0, 0, 2,  -22,  12,    5,  10},
-      { 0, 0, 0, 0, 0, -8, 10,  0, 0, 0, 0, 0, 2,   50,   0,    0, -22},
-      { 0, 0, 0, 0, 0, -8, 10,  0, 0, 0, 0, 0, 1,    0,   7,    4,   0},
-      { 0, 0, 0, 0, 0, -8, 10,  0, 0, 0, 0, 0, 2,    0,   3,    1,   0},
-      { 0, 0, 0, 0, 0,  0,  2,  2, 0, 0, 0, 0, 2,   -4,   4,    2,   2},
-      { 0, 0, 0, 0, 0,  0,  3,  0, 1, 0, 0, 0, 2,   -5, -11,   -5,   2},
-      { 0, 0, 0, 0, 0, -3,  8,  0, 0, 0, 0, 0, 2,    0,   4,    2,   0},
-      { 0, 0, 0, 0, 0, -5,  5,  0, 0, 0, 0, 0, 1,    4,  17,    9,  -2},
-      { 0, 0, 0, 0, 0,  5, -5,  0, 0, 0, 0, 0, 0,   59,   0,    0,   0},
-
-   /* 561-570 */
-      { 0, 0, 0, 0, 0,  5, -5,  0, 0, 0, 0, 0, 1,    0,  -4,   -2,   0},
-      { 0, 0, 0, 0, 0,  5, -5,  0, 0, 0, 0, 0, 2,   -8,   0,    0,   4},
-      { 0, 0, 0, 0, 0,  2,  0,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  2,  0,  0, 0, 0, 0, 0, 1,    4, -15,   -8,  -2},
-      { 0, 0, 0, 0, 0,  2,  0,  0, 0, 0, 0, 0, 2,  370,  -8,    0,-160},
-      { 0, 0, 0, 0, 0,  0,  7, -7, 0, 0, 0, 0, 2,    0,   0,   -3,   0},
-      { 0, 0, 0, 0, 0,  0,  7, -7, 0, 0, 0, 0, 2,    0,   3,    1,   0},
-      { 0, 0, 0, 0, 0,  0,  6, -5, 0, 0, 0, 0, 2,   -6,   3,    1,   3},
-      { 0, 0, 0, 0, 0,  7, -8,  0, 0, 0, 0, 0, 0,    0,   6,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  5, -3, 0, 0, 0, 0, 2,  -10,   0,    0,   4},
-
-   /* 571-580 */
-      { 0, 0, 0, 0, 0,  4, -3,  0, 0, 0, 0, 0, 2,    0,   9,    4,   0},
-      { 0, 0, 0, 0, 0,  1,  2,  0, 0, 0, 0, 0, 2,    4,  17,    7,  -2},
-      { 0, 0, 0, 0, 0, -9, 11,  0, 0, 0, 0, 0, 2,   34,   0,    0, -15},
-      { 0, 0, 0, 0, 0, -9, 11,  0, 0, 0, 0, 0, 1,    0,   5,    3,   0},
-      { 0, 0, 0, 0, 0,  0,  4,  0,-4, 0, 0, 0, 2,   -5,   0,    0,   2},
-      { 0, 0, 0, 0, 0,  0,  4,  0,-3, 0, 0, 0, 2,  -37,  -7,   -3,  16},
-      { 0, 0, 0, 0, 0, -6,  6,  0, 0, 0, 0, 0, 1,    3,  13,    7,  -2},
-      { 0, 0, 0, 0, 0,  6, -6,  0, 0, 0, 0, 0, 0,   40,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  6, -6,  0, 0, 0, 0, 0, 1,    0,  -3,   -2,   0},
-      { 0, 0, 0, 0, 0,  0,  4,  0,-2, 0, 0, 0, 2, -184,  -3,   -1,  80},
-
-   /* 581-590 */
-      { 0, 0, 0, 0, 0,  0,  6, -4, 0, 0, 0, 0, 2,   -3,   0,    0,   1},
-      { 0, 0, 0, 0, 0,  3, -1,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  3, -1,  0, 0, 0, 0, 0, 1,    0, -10,   -6,  -1},
-      { 0, 0, 0, 0, 0,  3, -1,  0, 0, 0, 0, 0, 2,   31,  -6,    0, -13},
-      { 0, 0, 0, 0, 0,  0,  4,  0,-1, 0, 0, 0, 2,   -3, -32,  -14,   1},
-      { 0, 0, 0, 0, 0,  0,  4,  0, 0,-2, 0, 0, 2,   -7,   0,    0,   3},
-      { 0, 0, 0, 0, 0,  0,  5, -2, 0, 0, 0, 0, 2,    0,  -8,   -4,   0},
-      { 0, 0, 0, 0, 0,  0,  4,  0, 0, 0, 0, 0, 0,    3,  -4,    0,   0},
-      { 0, 0, 0, 0, 0,  8, -9,  0, 0, 0, 0, 0, 0,    0,   4,    0,   0},
-      { 0, 0, 0, 0, 0,  5, -4,  0, 0, 0, 0, 0, 2,    0,   3,    1,   0},
-
-   /* 591-600 */
-      { 0, 0, 0, 0, 0,  2,  1,  0, 0, 0, 0, 0, 2,   19, -23,  -10,   2},
-      { 0, 0, 0, 0, 0,  2,  1,  0, 0, 0, 0, 0, 1,    0,   0,    0, -10},
-      { 0, 0, 0, 0, 0,  2,  1,  0, 0, 0, 0, 0, 1,    0,   3,    2,   0},
-      { 0, 0, 0, 0, 0, -7,  7,  0, 0, 0, 0, 0, 1,    0,   9,    5,  -1},
-      { 0, 0, 0, 0, 0,  7, -7,  0, 0, 0, 0, 0, 0,   28,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 1,    0,  -7,   -4,   0},
-      { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 2,    8,  -4,    0,  -4},
-      { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 0,    0,   0,   -2,   0},
-      { 0, 0, 0, 0, 0,  4, -2,  0, 0, 0, 0, 0, 0,    0,   3,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  5,  0,-4, 0, 0, 0, 2,   -3,   0,    0,   1},
-
-   /* 601-610 */
-      { 0, 0, 0, 0, 0,  0,  5,  0,-3, 0, 0, 0, 2,   -9,   0,    1,   4},
-      { 0, 0, 0, 0, 0,  0,  5,  0,-2, 0, 0, 0, 2,    3,  12,    5,  -1},
-      { 0, 0, 0, 0, 0,  3,  0,  0, 0, 0, 0, 0, 2,   17,  -3,   -1,   0},
-      { 0, 0, 0, 0, 0, -8,  8,  0, 0, 0, 0, 0, 1,    0,   7,    4,   0},
-      { 0, 0, 0, 0, 0,  8, -8,  0, 0, 0, 0, 0, 0,   19,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  5, -3,  0, 0, 0, 0, 0, 1,    0,  -5,   -3,   0},
-      { 0, 0, 0, 0, 0,  5, -3,  0, 0, 0, 0, 0, 2,   14,  -3,    0,  -1},
-      { 0, 0, 0, 0, 0, -9,  9,  0, 0, 0, 0, 0, 1,    0,   0,   -1,   0},
-      { 0, 0, 0, 0, 0, -9,  9,  0, 0, 0, 0, 0, 1,    0,   0,    0,  -5},
-      { 0, 0, 0, 0, 0, -9,  9,  0, 0, 0, 0, 0, 1,    0,   5,    3,   0},
-
-   /* 611-620 */
-      { 0, 0, 0, 0, 0,  9, -9,  0, 0, 0, 0, 0, 0,   13,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  6, -4,  0, 0, 0, 0, 0, 1,    0,  -3,   -2,   0},
-      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 2,    2,   9,    4,   3},
-      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 0,    0,   0,    0,  -4},
-      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 0,    8,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 1,    0,   4,    2,   0},
-      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 2,    6,   0,    0,  -3},
-      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 0,    6,   0,    0,   0},
-      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 1,    0,   3,    1,   0},
-      { 0, 0, 0, 0, 0,  0,  6,  0, 0, 0, 0, 0, 2,    5,   0,    0,  -2},
-
-   /* 621-630 */
-      { 0, 0, 0, 0, 0,  0,  0,  0, 0, 0, 0, 0, 2,    3,   0,    0,  -1},
-      { 1, 0,-2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   0},
-      { 1, 0,-2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    6,   0,    0,   0},
-      { 1, 0,-2, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    7,   0,    0,   0},
-      { 1, 0,-2, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   0},
-      {-1, 0, 0, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,    4,   0,    0,   0},
-      {-1, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,    6,   0,    0,   0},
-      {-1, 0, 2, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -4,    0,   0},
-      { 1, 0,-2, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -4,    0,   0},
-      {-2, 0, 2, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    5,   0,    0,   0},
-
-   /* 631-640 */
-      {-1, 0, 0, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   -3,   0,    0,   0},
-      {-1, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    4,   0,    0,   0},
-      {-1, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0,   -5,   0,    0,   0},
-      {-1, 0, 2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    4,   0,    0,   0},
-      { 1,-1, 1, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,   3,    0,   0},
-      {-1, 0, 2, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   13,   0,    0,   0},
-      {-2, 0, 0, 0, 0,  0,  2,  0,-3, 0, 0, 0, 0,   21,  11,    0,   0},
-      { 1, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -5,    0,   0},
-      {-1, 1,-1, 1, 0,  0, -1,  0, 0, 0, 0, 0, 0,    0,  -5,   -2,   0},
-      { 1, 1,-1, 1, 0,  0, -1,  0, 0, 0, 0, 0, 0,    0,   5,    3,   0},
-
-   /* 641-650 */
-      {-1, 0, 0, 0, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,  -5,    0,   0},
-      {-1, 0, 2, 1, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   2},
-      { 0, 0, 0, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,   20,  10,    0,   0},
-      {-1, 0, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,  -34,   0,    0,   0},
-      {-1, 0, 2, 0, 0,  3, -3,  0, 0, 0, 0, 0, 0,  -19,   0,    0,   0},
-      { 1, 0,-2, 1, 0,  0, -2,  0, 2, 0, 0, 0, 0,    3,   0,    0,  -2},
-      { 1, 2,-2, 2, 0, -3,  3,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
-      { 1, 2,-2, 2, 0,  0, -2,  0, 2, 0, 0, 0, 0,   -6,   0,    0,   3},
-      { 1, 0, 0, 0, 0,  1, -1,  0, 0, 0, 0, 0, 0,   -4,   0,    0,   0},
-      { 1, 0, 0, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    3,   0,    0,   0},
-
-   /* 651-660 */
-      { 0, 0,-2, 0, 0,  2, -2,  0, 0, 0, 0, 0, 0,    3,   0,    0,   0},
-      { 0, 0,-2, 0, 0,  0,  1,  0,-1, 0, 0, 0, 0,    4,   0,    0,   0},
-      { 0, 2, 0, 2, 0, -2,  2,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
-      { 0, 2, 0, 2, 0,  0, -1,  0, 1, 0, 0, 0, 0,    6,   0,    0,  -3},
-      { 0, 2, 0, 2, 0, -1,  1,  0, 0, 0, 0, 0, 0,   -8,   0,    0,   3},
-      { 0, 2, 0, 2, 0, -2,  3,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
-      { 0, 0, 2, 0, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   0},
-      { 0, 1, 1, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -3,   -2,   0},
-      { 1, 2, 0, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,  126, -63,  -27, -55},
-      {-1, 2, 0, 2, 0, 10, -3,  0, 0, 0, 0, 0, 0,   -5,   0,    1,   2},
-
-   /* 661-670 */
-      { 0, 1, 1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,   -3,  28,   15,   2},
-      { 1, 2, 0, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,    5,   0,    1,  -2},
-      { 0, 2, 0, 2, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,   9,    4,   1},
-      { 0, 2, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,   9,    4,  -1},
-      {-1, 2, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0, -126, -63,  -27,  55},
-      { 2, 2,-2, 2, 0,  0, -2,  0, 3, 0, 0, 0, 0,    3,   0,    0,  -1},
-      { 1, 2, 0, 1, 0,  0, -2,  0, 3, 0, 0, 0, 0,   21, -11,   -6, -11},
-      { 0, 1, 1, 0, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,  -4,    0,   0},
-      {-1, 2, 0, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,  -21, -11,   -6,  11},
-      {-2, 2, 2, 2, 0,  0,  2,  0,-2, 0, 0, 0, 0,   -3,   0,    0,   1},
-
-   /* 671-680 */
-      { 0, 2, 0, 2, 0,  2, -3,  0, 0, 0, 0, 0, 0,    0,   3,    1,   0},
-      { 0, 2, 0, 2, 0,  1, -1,  0, 0, 0, 0, 0, 0,    8,   0,    0,  -4},
-      { 0, 2, 0, 2, 0,  0,  1,  0,-1, 0, 0, 0, 0,   -6,   0,    0,   3},
-      { 0, 2, 0, 2, 0,  2, -2,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
-      {-1, 2, 2, 2, 0,  0, -1,  0, 1, 0, 0, 0, 0,    3,   0,    0,  -1},
-      { 1, 2, 0, 2, 0, -1,  1,  0, 0, 0, 0, 0, 0,   -3,   0,    0,   1},
-      {-1, 2, 2, 2, 0,  0,  2,  0,-3, 0, 0, 0, 0,   -5,   0,    0,   2},
-      { 2, 2, 0, 2, 0,  0,  2,  0,-3, 0, 0, 0, 0,   24, -12,   -5, -11},
-      { 1, 2, 0, 2, 0,  0, -4,  8,-3, 0, 0, 0, 0,    0,   3,    1,   0},
-      { 1, 2, 0, 2, 0,  0,  4, -8, 3, 0, 0, 0, 0,    0,   3,    1,   0},
-
-   /* 681-687 */
-      { 1, 1, 1, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    0,   3,    2,   0},
-      { 0, 2, 0, 2, 0,  0,  1,  0, 0, 0, 0, 0, 0,  -24, -12,   -5,  10},
-      { 2, 2, 0, 1, 0,  0,  1,  0, 0, 0, 0, 0, 0,    4,   0,   -1,  -2},
-      {-1, 2, 2, 2, 0,  0,  2,  0,-2, 0, 0, 0, 0,   13,   0,    0,  -6},
-      {-1, 2, 2, 2, 0,  3, -3,  0, 0, 0, 0, 0, 0,    7,   0,    0,  -3},
-      { 1, 2, 0, 2, 0,  1, -1,  0, 0, 0, 0, 0, 0,    3,   0,    0,  -1},
-      { 0, 2, 2, 2, 0,  0,  2,  0,-2, 0, 0, 0, 0,    3,   0,    0,  -1}
-   };
-
-/* Number of terms in the planetary nutation model */
-   const int NPL = (int) (sizeof xpl / sizeof xpl[0]);
-
-/*--------------------------------------------------------------------*/
-
-/* Interval between fundamental date J2000.0 and given date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* ------------------- */
-/* LUNI-SOLAR NUTATION */
-/* ------------------- */
-
-/* Fundamental (Delaunay) arguments */
-
-/* Mean anomaly of the Moon (IERS 2003). */
-   el = iauFal03(t);
-
-/* Mean anomaly of the Sun (MHB2000). */
-   elp = fmod(1287104.79305  +
-            t * (129596581.0481  +
-            t * (-0.5532  +
-            t * (0.000136  +
-            t * (-0.00001149)))), TURNAS) * DAS2R;
-
-/* Mean longitude of the Moon minus that of the ascending node */
-/* (IERS 2003. */
-   f = iauFaf03(t);
-
-/* Mean elongation of the Moon from the Sun (MHB2000). */
-   d = fmod(1072260.70369  +
-          t * (1602961601.2090  +
-          t * (-6.3706  +
-          t * (0.006593  +
-          t * (-0.00003169)))), TURNAS) * DAS2R;
-
-/* Mean longitude of the ascending node of the Moon (IERS 2003). */
-   om = iauFaom03(t);
-
-/* Initialize the nutation values. */
-   dp = 0.0;
-   de = 0.0;
-
-/* Summation of luni-solar nutation series (in reverse order). */
-   for (i = NLS-1; i >= 0; i--) {
-
-   /* Argument and functions. */
-      arg = fmod((double)xls[i].nl  * el +
-                 (double)xls[i].nlp * elp +
-                 (double)xls[i].nf  * f +
-                 (double)xls[i].nd  * d +
-                 (double)xls[i].nom * om, D2PI);
-      sarg = sin(arg);
-      carg = cos(arg);
-
-   /* Term. */
-      dp += (xls[i].sp + xls[i].spt * t) * sarg + xls[i].cp * carg;
-      de += (xls[i].ce + xls[i].cet * t) * carg + xls[i].se * sarg;
-   }
-
-/* Convert from 0.1 microarcsec units to radians. */
-   dpsils = dp * U2R;
-   depsls = de * U2R;
-
-/* ------------------ */
-/* PLANETARY NUTATION */
-/* ------------------ */
-
-/* n.b.  The MHB2000 code computes the luni-solar and planetary nutation */
-/* in different functions, using slightly different Delaunay */
-/* arguments in the two cases.  This behaviour is faithfully */
-/* reproduced here.  Use of the IERS 2003 expressions for both */
-/* cases leads to negligible changes, well below */
-/* 0.1 microarcsecond. */
-
-/* Mean anomaly of the Moon (MHB2000). */
-   al = fmod(2.35555598 + 8328.6914269554 * t, D2PI);
-
-/* Mean longitude of the Moon minus that of the ascending node */
-/*(MHB2000). */
-   af = fmod(1.627905234 + 8433.466158131 * t, D2PI);
-
-/* Mean elongation of the Moon from the Sun (MHB2000). */
-   ad = fmod(5.198466741 + 7771.3771468121 * t, D2PI);
-
-/* Mean longitude of the ascending node of the Moon (MHB2000). */
-   aom = fmod(2.18243920 - 33.757045 * t, D2PI);
-
-/* General accumulated precession in longitude (IERS 2003). */
-   apa = iauFapa03(t);
-
-/* Planetary longitudes, Mercury through Uranus (IERS 2003). */
-   alme = iauFame03(t);
-   alve = iauFave03(t);
-   alea = iauFae03(t);
-   alma = iauFama03(t);
-   alju = iauFaju03(t);
-   alsa = iauFasa03(t);
-   alur = iauFaur03(t);
-
-/* Neptune longitude (MHB2000). */
-   alne = fmod(5.321159000 + 3.8127774000 * t, D2PI);
-
-/* Initialize the nutation values. */
-   dp = 0.0;
-   de = 0.0;
-
-/* Summation of planetary nutation series (in reverse order). */
-   for (i = NPL-1; i >= 0; i--) {
-
-   /* Argument and functions. */
-      arg = fmod((double)xpl[i].nl  * al   +
-                 (double)xpl[i].nf  * af   +
-                 (double)xpl[i].nd  * ad   +
-                 (double)xpl[i].nom * aom  +
-                 (double)xpl[i].nme * alme +
-                 (double)xpl[i].nve * alve +
-                 (double)xpl[i].nea * alea +
-                 (double)xpl[i].nma * alma +
-                 (double)xpl[i].nju * alju +
-                 (double)xpl[i].nsa * alsa +
-                 (double)xpl[i].nur * alur +
-                 (double)xpl[i].nne * alne +
-                 (double)xpl[i].npa * apa, D2PI);
-      sarg = sin(arg);
-      carg = cos(arg);
-
-   /* Term. */
-      dp += (double)xpl[i].sp * sarg + (double)xpl[i].cp * carg;
-      de += (double)xpl[i].se * sarg + (double)xpl[i].ce * carg;
-
-   }
-
-/* Convert from 0.1 microarcsec units to radians. */
-   dpsipl = dp * U2R;
-   depspl = de * U2R;
-
-/* ------- */
-/* RESULTS */
-/* ------- */
-
-/* Add luni-solar and planetary components. */
-   *dpsi = dpsils + dpsipl;
-   *deps = depsls + depspl;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauNut00b(double date1, double date2, double *dpsi, double *deps)
-/*
-**  - - - - - - - - - -
-**   i a u N u t 0 0 b
-**  - - - - - - - - - -
-**
-**  Nutation, IAU 2000B model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2   double    TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     dpsi,deps     double    nutation, luni-solar + planetary (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The nutation components in longitude and obliquity are in radians
-**     and with respect to the equinox and ecliptic of date.  The
-**     obliquity at J2000.0 is assumed to be the Lieske et al. (1977)
-**     value of 84381.448 arcsec.  (The errors that result from using
-**     this function with the IAU 2006 value of 84381.406 arcsec can be
-**     neglected.)
-**
-**     The nutation model consists only of luni-solar terms, but
-**     includes also a fixed offset which compensates for certain long-
-**     period planetary terms (Note 7).
-**
-**  3) This function is an implementation of the IAU 2000B abridged
-**     nutation model formally adopted by the IAU General Assembly in
-**     2000.  The function computes the MHB_2000_SHORT luni-solar
-**     nutation series (Luzum 2001), but without the associated
-**     corrections for the precession rate adjustments and the offset
-**     between the GCRS and J2000.0 mean poles.
-**
-**  4) The full IAU 2000A (MHB2000) nutation model contains nearly 1400
-**     terms.  The IAU 2000B model (McCarthy & Luzum 2003) contains only
-**     77 terms, plus additional simplifications, yet still delivers
-**     results of 1 mas accuracy at present epochs.  This combination of
-**     accuracy and size makes the IAU 2000B abridged nutation model
-**     suitable for most practical applications.
-**
-**     The function delivers a pole accurate to 1 mas from 1900 to 2100
-**     (usually better than 1 mas, very occasionally just outside
-**     1 mas).  The full IAU 2000A model, which is implemented in the
-**     function iauNut00a (q.v.), delivers considerably greater accuracy
-**     at current dates;  however, to realize this improved accuracy,
-**     corrections for the essentially unpredictable free-core-nutation
-**     (FCN) must also be included.
-**
-**  5) The present function provides classical nutation.  The
-**     MHB_2000_SHORT algorithm, from which it is adapted, deals also
-**     with (i) the offsets between the GCRS and mean poles and (ii) the
-**     adjustments in longitude and obliquity due to the changed
-**     precession rates.  These additional functions, namely frame bias
-**     and precession adjustments, are supported by the SOFA functions
-**     iauBi00  and iauPr00.
-**
-**  6) The MHB_2000_SHORT algorithm also provides "total" nutations,
-**     comprising the arithmetic sum of the frame bias, precession
-**     adjustments, and nutation (luni-solar + planetary).  These total
-**     nutations can be used in combination with an existing IAU 1976
-**     precession implementation, such as iauPmat76,  to deliver GCRS-
-**     to-true predictions of mas accuracy at current epochs.  However,
-**     for symmetry with the iauNut00a  function (q.v. for the reasons),
-**     the SOFA functions do not generate the "total nutations"
-**     directly.  Should they be required, they could of course easily
-**     be generated by calling iauBi00, iauPr00 and the present function
-**     and adding the results.
-**
-**  7) The IAU 2000B model includes "planetary bias" terms that are
-**     fixed in size but compensate for long-period nutations.  The
-**     amplitudes quoted in McCarthy & Luzum (2003), namely
-**     Dpsi = -1.5835 mas and Depsilon = +1.6339 mas, are optimized for
-**     the "total nutations" method described in Note 6.  The Luzum
-**     (2001) values used in this SOFA implementation, namely -0.135 mas
-**     and +0.388 mas, are optimized for the "rigorous" method, where
-**     frame bias, precession and nutation are applied separately and in
-**     that order.  During the interval 1995-2050, the SOFA
-**     implementation delivers a maximum error of 1.001 mas (not
-**     including FCN).
-**
-**  References:
-**
-**     Lieske, J.H., Lederle, T., Fricke, W., Morando, B., "Expressions
-**     for the precession quantities based upon the IAU /1976/ system of
-**     astronomical constants", Astron.Astrophys. 58, 1-2, 1-16. (1977)
-**
-**     Luzum, B., private communication, 2001 (Fortran code
-**     MHB_2000_SHORT)
-**
-**     McCarthy, D.D. & Luzum, B.J., "An abridged model of the
-**     precession-nutation of the celestial pole", Cel.Mech.Dyn.Astron.
-**     85, 37-49 (2003)
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J., Astron.Astrophys. 282, 663-683 (1994)
-**
-**  This revision:  2010 September 4
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t, el, elp, f, d, om, arg, dp, de, sarg, carg,
-          dpsils, depsls, dpsipl, depspl;
-   int i;
-
-/* Units of 0.1 microarcsecond to radians */
-   static const double U2R = DAS2R / 1e7;
-
-/* ---------------------------------------- */
-/* Fixed offsets in lieu of planetary terms */
-/* ---------------------------------------- */
-
-   static const double DPPLAN = -0.135 * DMAS2R;
-   static const double DEPLAN =  0.388 * DMAS2R;
-
-/* --------------------------------------------------- */
-/* Luni-solar nutation: argument and term coefficients */
-/* --------------------------------------------------- */
-
-/* The units for the sine and cosine coefficients are */
-/* 0.1 microarcsec and the same per Julian century    */
-
-   static const struct {
-      int nl,nlp,nf,nd,nom; /* coefficients of l,l',F,D,Om */
-      double ps,pst,pc;     /* longitude sin, t*sin, cos coefficients */
-      double ec,ect,es;     /* obliquity cos, t*cos, sin coefficients */
-
-   } x[] = {
-
-   /* 1-10 */
-      { 0, 0, 0, 0,1,
-         -172064161.0, -174666.0, 33386.0, 92052331.0, 9086.0, 15377.0},
-      { 0, 0, 2,-2,2,
-           -13170906.0, -1675.0, -13696.0, 5730336.0, -3015.0, -4587.0},
-      { 0, 0, 2, 0,2,-2276413.0,-234.0, 2796.0, 978459.0,-485.0,1374.0},
-      { 0, 0, 0, 0,2,2074554.0,  207.0, -698.0,-897492.0, 470.0,-291.0},
-      { 0, 1, 0, 0,0,1475877.0,-3633.0,11817.0, 73871.0,-184.0,-1924.0},
-      { 0, 1, 2,-2,2,-516821.0, 1226.0, -524.0, 224386.0,-677.0,-174.0},
-      { 1, 0, 0, 0,0, 711159.0,   73.0, -872.0,  -6750.0,   0.0, 358.0},
-      { 0, 0, 2, 0,1,-387298.0, -367.0,  380.0, 200728.0,  18.0, 318.0},
-      { 1, 0, 2, 0,2,-301461.0,  -36.0,  816.0, 129025.0, -63.0, 367.0},
-      { 0,-1, 2,-2,2, 215829.0, -494.0,  111.0, -95929.0, 299.0, 132.0},
-
-   /* 11-20 */
-      { 0, 0, 2,-2,1, 128227.0,  137.0,  181.0, -68982.0,  -9.0,  39.0},
-      {-1, 0, 2, 0,2, 123457.0,   11.0,   19.0, -53311.0,  32.0,  -4.0},
-      {-1, 0, 0, 2,0, 156994.0,   10.0, -168.0,  -1235.0,   0.0,  82.0},
-      { 1, 0, 0, 0,1,  63110.0,   63.0,   27.0, -33228.0,   0.0,  -9.0},
-      {-1, 0, 0, 0,1, -57976.0,  -63.0, -189.0,  31429.0,   0.0, -75.0},
-      {-1, 0, 2, 2,2, -59641.0,  -11.0,  149.0,  25543.0, -11.0,  66.0},
-      { 1, 0, 2, 0,1, -51613.0,  -42.0,  129.0,  26366.0,   0.0,  78.0},
-      {-2, 0, 2, 0,1,  45893.0,   50.0,   31.0, -24236.0, -10.0,  20.0},
-      { 0, 0, 0, 2,0,  63384.0,   11.0, -150.0,  -1220.0,   0.0,  29.0},
-      { 0, 0, 2, 2,2, -38571.0,   -1.0,  158.0,  16452.0, -11.0,  68.0},
-
-   /* 21-30 */
-      { 0,-2, 2,-2,2,  32481.0,    0.0,    0.0, -13870.0,   0.0,   0.0},
-      {-2, 0, 0, 2,0, -47722.0,    0.0,  -18.0,    477.0,   0.0, -25.0},
-      { 2, 0, 2, 0,2, -31046.0,   -1.0,  131.0,  13238.0, -11.0,  59.0},
-      { 1, 0, 2,-2,2,  28593.0,    0.0,   -1.0, -12338.0,  10.0,  -3.0},
-      {-1, 0, 2, 0,1,  20441.0,   21.0,   10.0, -10758.0,   0.0,  -3.0},
-      { 2, 0, 0, 0,0,  29243.0,    0.0,  -74.0,   -609.0,   0.0,  13.0},
-      { 0, 0, 2, 0,0,  25887.0,    0.0,  -66.0,   -550.0,   0.0,  11.0},
-      { 0, 1, 0, 0,1, -14053.0,  -25.0,   79.0,   8551.0,  -2.0, -45.0},
-      {-1, 0, 0, 2,1,  15164.0,   10.0,   11.0,  -8001.0,   0.0,  -1.0},
-      { 0, 2, 2,-2,2, -15794.0,   72.0,  -16.0,   6850.0, -42.0,  -5.0},
-
-   /* 31-40 */
-      { 0, 0,-2, 2,0,  21783.0,    0.0,   13.0,   -167.0,   0.0,  13.0},
-      { 1, 0, 0,-2,1, -12873.0,  -10.0,  -37.0,   6953.0,   0.0, -14.0},
-      { 0,-1, 0, 0,1, -12654.0,   11.0,   63.0,   6415.0,   0.0,  26.0},
-      {-1, 0, 2, 2,1, -10204.0,    0.0,   25.0,   5222.0,   0.0,  15.0},
-      { 0, 2, 0, 0,0,  16707.0,  -85.0,  -10.0,    168.0,  -1.0,  10.0},
-      { 1, 0, 2, 2,2,  -7691.0,    0.0,   44.0,   3268.0,   0.0,  19.0},
-      {-2, 0, 2, 0,0, -11024.0,    0.0,  -14.0,    104.0,   0.0,   2.0},
-      { 0, 1, 2, 0,2,   7566.0,  -21.0,  -11.0,  -3250.0,   0.0,  -5.0},
-      { 0, 0, 2, 2,1,  -6637.0,  -11.0,   25.0,   3353.0,   0.0,  14.0},
-      { 0,-1, 2, 0,2,  -7141.0,   21.0,    8.0,   3070.0,   0.0,   4.0},
-
-   /* 41-50 */
-      { 0, 0, 0, 2,1,  -6302.0,  -11.0,    2.0,   3272.0,   0.0,   4.0},
-      { 1, 0, 2,-2,1,   5800.0,   10.0,    2.0,  -3045.0,   0.0,  -1.0},
-      { 2, 0, 2,-2,2,   6443.0,    0.0,   -7.0,  -2768.0,   0.0,  -4.0},
-      {-2, 0, 0, 2,1,  -5774.0,  -11.0,  -15.0,   3041.0,   0.0,  -5.0},
-      { 2, 0, 2, 0,1,  -5350.0,    0.0,   21.0,   2695.0,   0.0,  12.0},
-      { 0,-1, 2,-2,1,  -4752.0,  -11.0,   -3.0,   2719.0,   0.0,  -3.0},
-      { 0, 0, 0,-2,1,  -4940.0,  -11.0,  -21.0,   2720.0,   0.0,  -9.0},
-      {-1,-1, 0, 2,0,   7350.0,    0.0,   -8.0,    -51.0,   0.0,   4.0},
-      { 2, 0, 0,-2,1,   4065.0,    0.0,    6.0,  -2206.0,   0.0,   1.0},
-      { 1, 0, 0, 2,0,   6579.0,    0.0,  -24.0,   -199.0,   0.0,   2.0},
-
-   /* 51-60 */
-      { 0, 1, 2,-2,1,   3579.0,    0.0,    5.0,  -1900.0,   0.0,   1.0},
-      { 1,-1, 0, 0,0,   4725.0,    0.0,   -6.0,    -41.0,   0.0,   3.0},
-      {-2, 0, 2, 0,2,  -3075.0,    0.0,   -2.0,   1313.0,   0.0,  -1.0},
-      { 3, 0, 2, 0,2,  -2904.0,    0.0,   15.0,   1233.0,   0.0,   7.0},
-      { 0,-1, 0, 2,0,   4348.0,    0.0,  -10.0,    -81.0,   0.0,   2.0},
-      { 1,-1, 2, 0,2,  -2878.0,    0.0,    8.0,   1232.0,   0.0,   4.0},
-      { 0, 0, 0, 1,0,  -4230.0,    0.0,    5.0,    -20.0,   0.0,  -2.0},
-      {-1,-1, 2, 2,2,  -2819.0,    0.0,    7.0,   1207.0,   0.0,   3.0},
-      {-1, 0, 2, 0,0,  -4056.0,    0.0,    5.0,     40.0,   0.0,  -2.0},
-      { 0,-1, 2, 2,2,  -2647.0,    0.0,   11.0,   1129.0,   0.0,   5.0},
-
-   /* 61-70 */
-      {-2, 0, 0, 0,1,  -2294.0,    0.0,  -10.0,   1266.0,   0.0,  -4.0},
-      { 1, 1, 2, 0,2,   2481.0,    0.0,   -7.0,  -1062.0,   0.0,  -3.0},
-      { 2, 0, 0, 0,1,   2179.0,    0.0,   -2.0,  -1129.0,   0.0,  -2.0},
-      {-1, 1, 0, 1,0,   3276.0,    0.0,    1.0,     -9.0,   0.0,   0.0},
-      { 1, 1, 0, 0,0,  -3389.0,    0.0,    5.0,     35.0,   0.0,  -2.0},
-      { 1, 0, 2, 0,0,   3339.0,    0.0,  -13.0,   -107.0,   0.0,   1.0},
-      {-1, 0, 2,-2,1,  -1987.0,    0.0,   -6.0,   1073.0,   0.0,  -2.0},
-      { 1, 0, 0, 0,2,  -1981.0,    0.0,    0.0,    854.0,   0.0,   0.0},
-      {-1, 0, 0, 1,0,   4026.0,    0.0, -353.0,   -553.0,   0.0,-139.0},
-      { 0, 0, 2, 1,2,   1660.0,    0.0,   -5.0,   -710.0,   0.0,  -2.0},
-
-   /* 71-77 */
-      {-1, 0, 2, 4,2,  -1521.0,    0.0,    9.0,    647.0,   0.0,   4.0},
-      {-1, 1, 0, 1,1,   1314.0,    0.0,    0.0,   -700.0,   0.0,   0.0},
-      { 0,-2, 2,-2,1,  -1283.0,    0.0,    0.0,    672.0,   0.0,   0.0},
-      { 1, 0, 2, 2,1,  -1331.0,    0.0,    8.0,    663.0,   0.0,   4.0},
-      {-2, 0, 2, 2,2,   1383.0,    0.0,   -2.0,   -594.0,   0.0,  -2.0},
-      {-1, 0, 0, 0,2,   1405.0,    0.0,    4.0,   -610.0,   0.0,   2.0},
-      { 1, 1, 2,-2,2,   1290.0,    0.0,    0.0,   -556.0,   0.0,   0.0}
-   };
-
-/* Number of terms in the series */
-   const int NLS = (int) (sizeof x / sizeof x[0]);
-
-/*--------------------------------------------------------------------*/
-
-/* Interval between fundamental epoch J2000.0 and given date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* --------------------*/
-/* LUNI-SOLAR NUTATION */
-/* --------------------*/
-
-/* Fundamental (Delaunay) arguments from Simon et al. (1994) */
-
-/* Mean anomaly of the Moon. */
-   el = fmod(485868.249036 + (1717915923.2178) * t, TURNAS) * DAS2R;
-
-/* Mean anomaly of the Sun. */
-   elp = fmod(1287104.79305 + (129596581.0481) * t, TURNAS) * DAS2R;
-
-/* Mean argument of the latitude of the Moon. */
-   f = fmod(335779.526232 + (1739527262.8478) * t, TURNAS) * DAS2R;
-
-/* Mean elongation of the Moon from the Sun. */
-   d = fmod(1072260.70369 + (1602961601.2090) * t, TURNAS) * DAS2R;
-
-/* Mean longitude of the ascending node of the Moon. */
-   om = fmod(450160.398036 + (-6962890.5431) * t, TURNAS) * DAS2R;
-
-/* Initialize the nutation values. */
-   dp = 0.0;
-   de = 0.0;
-
-/* Summation of luni-solar nutation series (smallest terms first). */
-   for (i = NLS-1; i >= 0; i--) {
-
-   /* Argument and functions. */
-      arg = fmod( (double)x[i].nl  * el  +
-                  (double)x[i].nlp * elp +
-                  (double)x[i].nf  * f   +
-                  (double)x[i].nd  * d   +
-                  (double)x[i].nom * om, D2PI  );
-      sarg = sin(arg);
-      carg = cos(arg);
-
-   /* Term. */
-      dp += (x[i].ps + x[i].pst * t) * sarg + x[i].pc * carg;
-      de += (x[i].ec + x[i].ect * t) * carg + x[i].es * sarg;
-   }
-
-/* Convert from 0.1 microarcsec units to radians. */
-   dpsils = dp * U2R;
-   depsls = de * U2R;
-
-/* ------------------------------*/
-/* IN LIEU OF PLANETARY NUTATION */
-/* ------------------------------*/
-
-/* Fixed offset to correct for missing terms in truncated series. */
-   dpsipl = DPPLAN;
-   depspl = DEPLAN;
-
-/* --------*/
-/* RESULTS */
-/* --------*/
-
-/* Add luni-solar and planetary components. */
-   *dpsi = dpsils + dpsipl;
-   *deps = depsls + depspl;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauNut06a(double date1, double date2, double *dpsi, double *deps)
-/*
-**  - - - - - - - - - -
-**   i a u N u t 0 6 a
-**  - - - - - - - - - -
-**
-**  IAU 2000A nutation with adjustments to match the IAU 2006
-**  precession.
-**
-**  Given:
-**     date1,date2   double   TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     dpsi,deps     double   nutation, luni-solar + planetary (Note 2)
-**
-**  Status:  canonical model.
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The nutation components in longitude and obliquity are in radians
-**     and with respect to the mean equinox and ecliptic of date,
-**     IAU 2006 precession model (Hilton et al. 2006, Capitaine et al.
-**     2005).
-**
-**  3) The function first computes the IAU 2000A nutation, then applies
-**     adjustments for (i) the consequences of the change in obliquity
-**     from the IAU 1980 ecliptic to the IAU 2006 ecliptic and (ii) the
-**     secular variation in the Earth's dynamical form factor J2.
-**
-**  4) The present function provides classical nutation, complementing
-**     the IAU 2000 frame bias and IAU 2006 precession.  It delivers a
-**     pole which is at current epochs accurate to a few tens of
-**     microarcseconds, apart from the free core nutation.
-**
-**  Called:
-**     iauNut00a    nutation, IAU 2000A
-**
-**  References:
-**
-**     Chapront, J., Chapront-Touze, M. & Francou, G. 2002,
-**     Astron.Astrophys. 387, 700
-**
-**     Lieske, J.H., Lederle, T., Fricke, W. & Morando, B. 1977,
-**     Astron.Astrophys. 58, 1-16
-**
-**     Mathews, P.M., Herring, T.A., Buffet, B.A. 2002, J.Geophys.Res.
-**     107, B4.  The MHB_2000 code itself was obtained on 9th September
-**     2002 from ftp//maia.usno.navy.mil/conv2000/chapter5/IAU2000A.
-**
-**     Simon, J.-L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G., Laskar, J. 1994, Astron.Astrophys. 282, 663-683
-**
-**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M. 1999,
-**     Astron.Astrophys.Supp.Ser. 135, 111
-**
-**     Wallace, P.T., "Software for Implementing the IAU 2000
-**     Resolutions", in IERS Workshop 5.1 (2002)
-**
-**  This revision:  2011 April 3
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t, fj2, dp, de;
-
-
-/* Interval between fundamental date J2000.0 and given date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Factor correcting for secular variation of J2. */
-   fj2 = -2.7774e-6 * t;
-
-/* Obtain IAU 2000A nutation. */
-   iauNut00a(date1, date2, &dp, &de);
-
-/* Apply P03 adjustments (Wallace & Capitaine, 2006, Eqs.5). */
-   *dpsi = dp + dp * (0.4697e-6 + fj2);
-   *deps = de + de * fj2;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauNut80(double date1, double date2, double *dpsi, double *deps)
-/*
-**  - - - - - - - - -
-**   i a u N u t 8 0
-**  - - - - - - - - -
-**
-**  Nutation, IAU 1980 model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2   double    TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     dpsi          double    nutation in longitude (radians)
-**     deps          double    nutation in obliquity (radians)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The nutation components are with respect to the ecliptic of
-**     date.
-**
-**  Called:
-**     iauAnpm      normalize angle into range +/- pi
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     Section 3.222 (p111).
-**
-**  This revision:  2008 September 30
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t, el, elp, f, d, om, dp, de, arg, s, c;
-   int j;
-
-/* Units of 0.1 milliarcsecond to radians */
-   const double U2R = DAS2R / 1e4;
-
-/* ------------------------------------------------ */
-/* Table of multiples of arguments and coefficients */
-/* ------------------------------------------------ */
-
-/* The units for the sine and cosine coefficients are 0.1 mas and */
-/* the same per Julian century */
-
-   static const struct {
-      int nl,nlp,nf,nd,nom; /* coefficients of l,l',F,D,Om */
-      double sp,spt;        /* longitude sine, 1 and t coefficients */
-      double ce,cet;        /* obliquity cosine, 1 and t coefficients */
-   } x[] = {
-
-   /* 1-10 */
-      {  0,  0,  0,  0,  1, -171996.0, -174.2,  92025.0,    8.9 },
-      {  0,  0,  0,  0,  2,    2062.0,    0.2,   -895.0,    0.5 },
-      { -2,  0,  2,  0,  1,      46.0,    0.0,    -24.0,    0.0 },
-      {  2,  0, -2,  0,  0,      11.0,    0.0,      0.0,    0.0 },
-      { -2,  0,  2,  0,  2,      -3.0,    0.0,      1.0,    0.0 },
-      {  1, -1,  0, -1,  0,      -3.0,    0.0,      0.0,    0.0 },
-      {  0, -2,  2, -2,  1,      -2.0,    0.0,      1.0,    0.0 },
-      {  2,  0, -2,  0,  1,       1.0,    0.0,      0.0,    0.0 },
-      {  0,  0,  2, -2,  2,  -13187.0,   -1.6,   5736.0,   -3.1 },
-      {  0,  1,  0,  0,  0,    1426.0,   -3.4,     54.0,   -0.1 },
-
-   /* 11-20 */
-      {  0,  1,  2, -2,  2,    -517.0,    1.2,    224.0,   -0.6 },
-      {  0, -1,  2, -2,  2,     217.0,   -0.5,    -95.0,    0.3 },
-      {  0,  0,  2, -2,  1,     129.0,    0.1,    -70.0,    0.0 },
-      {  2,  0,  0, -2,  0,      48.0,    0.0,      1.0,    0.0 },
-      {  0,  0,  2, -2,  0,     -22.0,    0.0,      0.0,    0.0 },
-      {  0,  2,  0,  0,  0,      17.0,   -0.1,      0.0,    0.0 },
-      {  0,  1,  0,  0,  1,     -15.0,    0.0,      9.0,    0.0 },
-      {  0,  2,  2, -2,  2,     -16.0,    0.1,      7.0,    0.0 },
-      {  0, -1,  0,  0,  1,     -12.0,    0.0,      6.0,    0.0 },
-      { -2,  0,  0,  2,  1,      -6.0,    0.0,      3.0,    0.0 },
-
-   /* 21-30 */
-      {  0, -1,  2, -2,  1,      -5.0,    0.0,      3.0,    0.0 },
-      {  2,  0,  0, -2,  1,       4.0,    0.0,     -2.0,    0.0 },
-      {  0,  1,  2, -2,  1,       4.0,    0.0,     -2.0,    0.0 },
-      {  1,  0,  0, -1,  0,      -4.0,    0.0,      0.0,    0.0 },
-      {  2,  1,  0, -2,  0,       1.0,    0.0,      0.0,    0.0 },
-      {  0,  0, -2,  2,  1,       1.0,    0.0,      0.0,    0.0 },
-      {  0,  1, -2,  2,  0,      -1.0,    0.0,      0.0,    0.0 },
-      {  0,  1,  0,  0,  2,       1.0,    0.0,      0.0,    0.0 },
-      { -1,  0,  0,  1,  1,       1.0,    0.0,      0.0,    0.0 },
-      {  0,  1,  2, -2,  0,      -1.0,    0.0,      0.0,    0.0 },
-
-   /* 31-40 */
-      {  0,  0,  2,  0,  2,   -2274.0,   -0.2,    977.0,   -0.5 },
-      {  1,  0,  0,  0,  0,     712.0,    0.1,     -7.0,    0.0 },
-      {  0,  0,  2,  0,  1,    -386.0,   -0.4,    200.0,    0.0 },
-      {  1,  0,  2,  0,  2,    -301.0,    0.0,    129.0,   -0.1 },
-      {  1,  0,  0, -2,  0,    -158.0,    0.0,     -1.0,    0.0 },
-      { -1,  0,  2,  0,  2,     123.0,    0.0,    -53.0,    0.0 },
-      {  0,  0,  0,  2,  0,      63.0,    0.0,     -2.0,    0.0 },
-      {  1,  0,  0,  0,  1,      63.0,    0.1,    -33.0,    0.0 },
-      { -1,  0,  0,  0,  1,     -58.0,   -0.1,     32.0,    0.0 },
-      { -1,  0,  2,  2,  2,     -59.0,    0.0,     26.0,    0.0 },
-
-   /* 41-50 */
-      {  1,  0,  2,  0,  1,     -51.0,    0.0,     27.0,    0.0 },
-      {  0,  0,  2,  2,  2,     -38.0,    0.0,     16.0,    0.0 },
-      {  2,  0,  0,  0,  0,      29.0,    0.0,     -1.0,    0.0 },
-      {  1,  0,  2, -2,  2,      29.0,    0.0,    -12.0,    0.0 },
-      {  2,  0,  2,  0,  2,     -31.0,    0.0,     13.0,    0.0 },
-      {  0,  0,  2,  0,  0,      26.0,    0.0,     -1.0,    0.0 },
-      { -1,  0,  2,  0,  1,      21.0,    0.0,    -10.0,    0.0 },
-      { -1,  0,  0,  2,  1,      16.0,    0.0,     -8.0,    0.0 },
-      {  1,  0,  0, -2,  1,     -13.0,    0.0,      7.0,    0.0 },
-      { -1,  0,  2,  2,  1,     -10.0,    0.0,      5.0,    0.0 },
-
-   /* 51-60 */
-      {  1,  1,  0, -2,  0,      -7.0,    0.0,      0.0,    0.0 },
-      {  0,  1,  2,  0,  2,       7.0,    0.0,     -3.0,    0.0 },
-      {  0, -1,  2,  0,  2,      -7.0,    0.0,      3.0,    0.0 },
-      {  1,  0,  2,  2,  2,      -8.0,    0.0,      3.0,    0.0 },
-      {  1,  0,  0,  2,  0,       6.0,    0.0,      0.0,    0.0 },
-      {  2,  0,  2, -2,  2,       6.0,    0.0,     -3.0,    0.0 },
-      {  0,  0,  0,  2,  1,      -6.0,    0.0,      3.0,    0.0 },
-      {  0,  0,  2,  2,  1,      -7.0,    0.0,      3.0,    0.0 },
-      {  1,  0,  2, -2,  1,       6.0,    0.0,     -3.0,    0.0 },
-      {  0,  0,  0, -2,  1,      -5.0,    0.0,      3.0,    0.0 },
-
-   /* 61-70 */
-      {  1, -1,  0,  0,  0,       5.0,    0.0,      0.0,    0.0 },
-      {  2,  0,  2,  0,  1,      -5.0,    0.0,      3.0,    0.0 },
-      {  0,  1,  0, -2,  0,      -4.0,    0.0,      0.0,    0.0 },
-      {  1,  0, -2,  0,  0,       4.0,    0.0,      0.0,    0.0 },
-      {  0,  0,  0,  1,  0,      -4.0,    0.0,      0.0,    0.0 },
-      {  1,  1,  0,  0,  0,      -3.0,    0.0,      0.0,    0.0 },
-      {  1,  0,  2,  0,  0,       3.0,    0.0,      0.0,    0.0 },
-      {  1, -1,  2,  0,  2,      -3.0,    0.0,      1.0,    0.0 },
-      { -1, -1,  2,  2,  2,      -3.0,    0.0,      1.0,    0.0 },
-      { -2,  0,  0,  0,  1,      -2.0,    0.0,      1.0,    0.0 },
-
-   /* 71-80 */
-      {  3,  0,  2,  0,  2,      -3.0,    0.0,      1.0,    0.0 },
-      {  0, -1,  2,  2,  2,      -3.0,    0.0,      1.0,    0.0 },
-      {  1,  1,  2,  0,  2,       2.0,    0.0,     -1.0,    0.0 },
-      { -1,  0,  2, -2,  1,      -2.0,    0.0,      1.0,    0.0 },
-      {  2,  0,  0,  0,  1,       2.0,    0.0,     -1.0,    0.0 },
-      {  1,  0,  0,  0,  2,      -2.0,    0.0,      1.0,    0.0 },
-      {  3,  0,  0,  0,  0,       2.0,    0.0,      0.0,    0.0 },
-      {  0,  0,  2,  1,  2,       2.0,    0.0,     -1.0,    0.0 },
-      { -1,  0,  0,  0,  2,       1.0,    0.0,     -1.0,    0.0 },
-      {  1,  0,  0, -4,  0,      -1.0,    0.0,      0.0,    0.0 },
-
-   /* 81-90 */
-      { -2,  0,  2,  2,  2,       1.0,    0.0,     -1.0,    0.0 },
-      { -1,  0,  2,  4,  2,      -2.0,    0.0,      1.0,    0.0 },
-      {  2,  0,  0, -4,  0,      -1.0,    0.0,      0.0,    0.0 },
-      {  1,  1,  2, -2,  2,       1.0,    0.0,     -1.0,    0.0 },
-      {  1,  0,  2,  2,  1,      -1.0,    0.0,      1.0,    0.0 },
-      { -2,  0,  2,  4,  2,      -1.0,    0.0,      1.0,    0.0 },
-      { -1,  0,  4,  0,  2,       1.0,    0.0,      0.0,    0.0 },
-      {  1, -1,  0, -2,  0,       1.0,    0.0,      0.0,    0.0 },
-      {  2,  0,  2, -2,  1,       1.0,    0.0,     -1.0,    0.0 },
-      {  2,  0,  2,  2,  2,      -1.0,    0.0,      0.0,    0.0 },
-
-   /* 91-100 */
-      {  1,  0,  0,  2,  1,      -1.0,    0.0,      0.0,    0.0 },
-      {  0,  0,  4, -2,  2,       1.0,    0.0,      0.0,    0.0 },
-      {  3,  0,  2, -2,  2,       1.0,    0.0,      0.0,    0.0 },
-      {  1,  0,  2, -2,  0,      -1.0,    0.0,      0.0,    0.0 },
-      {  0,  1,  2,  0,  1,       1.0,    0.0,      0.0,    0.0 },
-      { -1, -1,  0,  2,  1,       1.0,    0.0,      0.0,    0.0 },
-      {  0,  0, -2,  0,  1,      -1.0,    0.0,      0.0,    0.0 },
-      {  0,  0,  2, -1,  2,      -1.0,    0.0,      0.0,    0.0 },
-      {  0,  1,  0,  2,  0,      -1.0,    0.0,      0.0,    0.0 },
-      {  1,  0, -2, -2,  0,      -1.0,    0.0,      0.0,    0.0 },
-
-   /* 101-106 */
-      {  0, -1,  2,  0,  1,      -1.0,    0.0,      0.0,    0.0 },
-      {  1,  1,  0, -2,  1,      -1.0,    0.0,      0.0,    0.0 },
-      {  1,  0, -2,  2,  0,      -1.0,    0.0,      0.0,    0.0 },
-      {  2,  0,  0,  2,  0,       1.0,    0.0,      0.0,    0.0 },
-      {  0,  0,  2,  4,  2,      -1.0,    0.0,      0.0,    0.0 },
-      {  0,  1,  0,  1,  0,       1.0,    0.0,      0.0,    0.0 }
-   };
-
-/* Number of terms in the series */
-   const int NT = (int) (sizeof x / sizeof x[0]);
-
-/*--------------------------------------------------------------------*/
-
-/* Interval between fundamental epoch J2000.0 and given date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* --------------------- */
-/* Fundamental arguments */
-/* --------------------- */
-
-/* Mean longitude of Moon minus mean longitude of Moon's perigee. */
-   el = iauAnpm(
-        (485866.733 + (715922.633 + (31.310 + 0.064 * t) * t) * t)
-        * DAS2R + fmod(1325.0 * t, 1.0) * D2PI);
-
-/* Mean longitude of Sun minus mean longitude of Sun's perigee. */
-   elp = iauAnpm(
-         (1287099.804 + (1292581.224 + (-0.577 - 0.012 * t) * t) * t)
-         * DAS2R + fmod(99.0 * t, 1.0) * D2PI);
-
-/* Mean longitude of Moon minus mean longitude of Moon's node. */
-   f = iauAnpm(
-       (335778.877 + (295263.137 + (-13.257 + 0.011 * t) * t) * t)
-       * DAS2R + fmod(1342.0 * t, 1.0) * D2PI);
-
-/* Mean elongation of Moon from Sun. */
-   d = iauAnpm(
-       (1072261.307 + (1105601.328 + (-6.891 + 0.019 * t) * t) * t)
-       * DAS2R + fmod(1236.0 * t, 1.0) * D2PI);
-
-/* Longitude of the mean ascending node of the lunar orbit on the */
-/* ecliptic, measured from the mean equinox of date. */
-   om = iauAnpm(
-        (450160.280 + (-482890.539 + (7.455 + 0.008 * t) * t) * t)
-        * DAS2R + fmod(-5.0 * t, 1.0) * D2PI);
-
-/* --------------- */
-/* Nutation series */
-/* --------------- */
-
-/* Initialize nutation components. */
-   dp = 0.0;
-   de = 0.0;
-
-/* Sum the nutation terms, ending with the biggest. */
-   for (j = NT-1; j >= 0; j--) {
-
-   /* Form argument for current term. */
-      arg = (double)x[j].nl  * el
-          + (double)x[j].nlp * elp
-          + (double)x[j].nf  * f
-          + (double)x[j].nd  * d
-          + (double)x[j].nom * om;
-
-   /* Accumulate current nutation term. */
-      s = x[j].sp + x[j].spt * t;
-      c = x[j].ce + x[j].cet * t;
-      if (s != 0.0) dp += s * sin(arg);
-      if (c != 0.0) de += c * cos(arg);
-   }
-
-/* Convert results from 0.1 mas units to radians. */
-   *dpsi = dp * U2R;
-   *deps = de * U2R;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauNutm80(double date1, double date2, double rmatn[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u N u t m 8 0
-**  - - - - - - - - - -
-**
-**  Form the matrix of nutation for a given date, IAU 1980 model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2    double          TDB date (Note 1)
-**
-**  Returned:
-**     rmatn          double[3][3]    nutation matrix
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix operates in the sense V(true) = rmatn * V(mean),
-**     where the p-vector V(true) is with respect to the true
-**     equatorial triad of date and the p-vector V(mean) is with
-**     respect to the mean equatorial triad of date.
-**
-**  Called:
-**     iauNut80     nutation, IAU 1980
-**     iauObl80     mean obliquity, IAU 1980
-**     iauNumat     form nutation matrix
-**
-**  This revision:  2008 May 12
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dpsi, deps, epsa;
-
-
-/* Nutation components and mean obliquity. */
-   iauNut80(date1, date2, &dpsi, &deps);
-   epsa = iauObl80(date1, date2);
-
-/* Build the rotation matrix. */
-   iauNumat(epsa, dpsi, deps, rmatn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauObl06(double date1, double date2)
-/*
-**  - - - - - - - - -
-**   i a u O b l 0 6
-**  - - - - - - - - -
-**
-**  Mean obliquity of the ecliptic, IAU 2006 precession model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (function value):
-**                  double   obliquity of the ecliptic (radians, Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The result is the angle between the ecliptic and mean equator of
-**     date date1+date2.
-**
-**  Reference:
-**
-**     Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351
-**
-**  This revision:  2009 March 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t, eps0;
-
-
-/* Interval between fundamental date J2000.0 and given date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Mean obliquity. */
-   eps0 = (84381.406     +
-          (-46.836769    +
-          ( -0.0001831   +
-          (  0.00200340  +
-          ( -0.000000576 +
-          ( -0.0000000434) * t) * t) * t) * t) * t) * DAS2R;
-
-   return eps0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauObl80(double date1, double date2)
-/*
-**  - - - - - - - - -
-**   i a u O b l 8 0
-**  - - - - - - - - -
-**
-**  Mean obliquity of the ecliptic, IAU 1980 model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2   double    TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (function value):
-**                   double    obliquity of the ecliptic (radians, Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The result is the angle between the ecliptic and mean equator of
-**     date date1+date2.
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     Expression 3.222-1 (p114).
-**
-**  This revision:  2009 March 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t, eps0;
-
-
-/* Interval between fundamental epoch J2000.0 and given date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Mean obliquity of date. */
-   eps0 = DAS2R * (84381.448  +
-                  (-46.8150   +
-                  (-0.00059   +
-                  ( 0.001813) * t) * t) * t);
-
-   return eps0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauP06e(double date1, double date2,
-             double *eps0, double *psia, double *oma, double *bpa,
-             double *bqa, double *pia, double *bpia,
-             double *epsa, double *chia, double *za, double *zetaa,
-             double *thetaa, double *pa,
-             double *gam, double *phi, double *psi)
-/*
-**  - - - - - - - -
-**   i a u P 0 6 e
-**  - - - - - - - -
-**
-**  Precession angles, IAU 2006, equinox based.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical models.
-**
-**  Given:
-**     date1,date2   double   TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (see Note 2):
-**     eps0          double   epsilon_0
-**     psia          double   psi_A
-**     oma           double   omega_A
-**     bpa           double   P_A
-**     bqa           double   Q_A
-**     pia           double   pi_A
-**     bpia          double   Pi_A
-**     epsa          double   obliquity epsilon_A
-**     chia          double   chi_A
-**     za            double   z_A
-**     zetaa         double   zeta_A
-**     thetaa        double   theta_A
-**     pa            double   p_A
-**     gam           double   F-W angle gamma_J2000
-**     phi           double   F-W angle phi_J2000
-**     psi           double   F-W angle psi_J2000
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) This function returns the set of equinox based angles for the
-**     Capitaine et al. "P03" precession theory, adopted by the IAU in
-**     2006.  The angles are set out in Table 1 of Hilton et al. (2006):
-**
-**     eps0   epsilon_0   obliquity at J2000.0
-**     psia   psi_A       luni-solar precession
-**     oma    omega_A     inclination of equator wrt J2000.0 ecliptic
-**     bpa    P_A         ecliptic pole x, J2000.0 ecliptic triad
-**     bqa    Q_A         ecliptic pole -y, J2000.0 ecliptic triad
-**     pia    pi_A        angle between moving and J2000.0 ecliptics
-**     bpia   Pi_A        longitude of ascending node of the ecliptic
-**     epsa   epsilon_A   obliquity of the ecliptic
-**     chia   chi_A       planetary precession
-**     za     z_A         equatorial precession: -3rd 323 Euler angle
-**     zetaa  zeta_A      equatorial precession: -1st 323 Euler angle
-**     thetaa theta_A     equatorial precession: 2nd 323 Euler angle
-**     pa     p_A         general precession
-**     gam    gamma_J2000 J2000.0 RA difference of ecliptic poles
-**     phi    phi_J2000   J2000.0 codeclination of ecliptic pole
-**     psi    psi_J2000   longitude difference of equator poles, J2000.0
-**
-**     The returned values are all radians.
-**
-**  3) Hilton et al. (2006) Table 1 also contains angles that depend on
-**     models distinct from the P03 precession theory itself, namely the
-**     IAU 2000A frame bias and nutation.  The quoted polynomials are
-**     used in other SOFA functions:
-**
-**     . iauXy06  contains the polynomial parts of the X and Y series.
-**
-**     . iauS06  contains the polynomial part of the s+XY/2 series.
-**
-**     . iauPfw06  implements the series for the Fukushima-Williams
-**       angles that are with respect to the GCRS pole (i.e. the variants
-**       that include frame bias).
-**
-**  4) The IAU resolution stipulated that the choice of parameterization
-**     was left to the user, and so an IAU compliant precession
-**     implementation can be constructed using various combinations of
-**     the angles returned by the present function.
-**
-**  5) The parameterization used by SOFA is the version of the Fukushima-
-**     Williams angles that refers directly to the GCRS pole.  These
-**     angles may be calculated by calling the function iauPfw06.  SOFA
-**     also supports the direct computation of the CIP GCRS X,Y by
-**     series, available by calling iauXy06.
-**
-**  6) The agreement between the different parameterizations is at the
-**     1 microarcsecond level in the present era.
-**
-**  7) When constructing a precession formulation that refers to the GCRS
-**     pole rather than the dynamical pole, it may (depending on the
-**     choice of angles) be necessary to introduce the frame bias
-**     explicitly.
-**
-**  8) It is permissible to re-use the same variable in the returned
-**     arguments.  The quantities are stored in the stated order.
-**
-**  Reference:
-**
-**     Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351
-**
-**  Called:
-**     iauObl06     mean obliquity, IAU 2006
-**
-**  This revision:  2011 December 6
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t;
-
-
-/* Interval between fundamental date J2000.0 and given date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Obliquity at J2000.0. */
-
-   *eps0 = 84381.406 * DAS2R;
-
-/* Luni-solar precession. */
-
-   *psia = ( 5038.481507     +
-           (   -1.0790069    +
-           (   -0.00114045   +
-           (    0.000132851  +
-           (   -0.0000000951 )
-           * t) * t) * t) * t) * t * DAS2R;
-
-/* Inclination of mean equator with respect to the J2000.0 ecliptic. */
-
-   *oma = *eps0 + ( -0.025754     +
-                  (  0.0512623    +
-                  ( -0.00772503   +
-                  ( -0.000000467  +
-                  (  0.0000003337 )
-                  * t) * t) * t) * t) * t * DAS2R;
-
-/* Ecliptic pole x, J2000.0 ecliptic triad. */
-
-   *bpa = (  4.199094     +
-          (  0.1939873    +
-          ( -0.00022466   +
-          ( -0.000000912  +
-          (  0.0000000120 )
-          * t) * t) * t) * t) * t * DAS2R;
-
-/* Ecliptic pole -y, J2000.0 ecliptic triad. */
-
-   *bqa = ( -46.811015     +
-          (   0.0510283    +
-          (   0.00052413   +
-          (  -0.000000646  +
-          (  -0.0000000172 )
-          * t) * t) * t) * t) * t * DAS2R;
-
-/* Angle between moving and J2000.0 ecliptics. */
-
-   *pia = ( 46.998973     +
-          ( -0.0334926    +
-          ( -0.00012559   +
-          (  0.000000113  +
-          ( -0.0000000022 )
-          * t) * t) * t) * t) * t * DAS2R;
-
-/* Longitude of ascending node of the moving ecliptic. */
-
-   *bpia = ( 629546.7936      +
-           (   -867.95758     +
-           (      0.157992    +
-           (     -0.0005371   +
-           (     -0.00004797  +
-           (      0.000000072 )
-           * t) * t) * t) * t) * t) * DAS2R;
-
-/* Mean obliquity of the ecliptic. */
-
-   *epsa = iauObl06(date1, date2);
-
-/* Planetary precession. */
-
-   *chia = ( 10.556403     +
-           ( -2.3814292    +
-           ( -0.00121197   +
-           (  0.000170663  +
-           ( -0.0000000560 )
-           * t) * t) * t) * t) * t * DAS2R;
-
-/* Equatorial precession: minus the third of the 323 Euler angles. */
-
-   *za = (   -2.650545     +
-         ( 2306.077181     +
-         (    1.0927348    +
-         (    0.01826837   +
-         (   -0.000028596  +
-         (   -0.0000002904 )
-         * t) * t) * t) * t) * t) * DAS2R;
-
-/* Equatorial precession: minus the first of the 323 Euler angles. */
-
-   *zetaa = (    2.650545     +
-            ( 2306.083227     +
-            (    0.2988499    +
-            (    0.01801828   +
-            (   -0.000005971  +
-            (   -0.0000003173 )
-            * t) * t) * t) * t) * t) * DAS2R;
-
-/* Equatorial precession: second of the 323 Euler angles. */
-
-   *thetaa = ( 2004.191903     +
-             (   -0.4294934    +
-             (   -0.04182264   +
-             (   -0.000007089  +
-             (   -0.0000001274 )
-             * t) * t) * t) * t) * t * DAS2R;
-
-/* General precession. */
-
-   *pa = ( 5028.796195     +
-         (    1.1054348    +
-         (    0.00007964   +
-         (   -0.000023857  +
-         (    0.0000000383 )
-         * t) * t) * t) * t) * t * DAS2R;
-
-/* Fukushima-Williams angles for precession. */
-
-   *gam = ( 10.556403     +
-          (  0.4932044    +
-          ( -0.00031238   +
-          ( -0.000002788  +
-          (  0.0000000260 )
-          * t) * t) * t) * t) * t * DAS2R;
-
-   *phi = *eps0 + ( -46.811015     +
-                  (   0.0511269    +
-                  (   0.00053289   +
-                  (  -0.000000440  +
-                  (  -0.0000000176 )
-                  * t) * t) * t) * t) * t * DAS2R;
-
-   *psi = ( 5038.481507     +
-          (    1.5584176    +
-          (   -0.00018522   +
-          (   -0.000026452  +
-          (   -0.0000000148 )
-          * t) * t) * t) * t) * t * DAS2R;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauP2pv(double p[3], double pv[2][3])
-/*
-**  - - - - - - - -
-**   i a u P 2 p v
-**  - - - - - - - -
-**
-**  Extend a p-vector to a pv-vector by appending a zero velocity.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     p        double[3]       p-vector
-**
-**  Returned:
-**     pv       double[2][3]    pv-vector
-**
-**  Called:
-**     iauCp        copy p-vector
-**     iauZp        zero p-vector
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauCp(p, pv[0]);
-   iauZp(pv[1]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauP2s(double p[3], double *theta, double *phi, double *r)
-/*
-**  - - - - - - -
-**   i a u P 2 s
-**  - - - - - - -
-**
-**  P-vector to spherical polar coordinates.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     p        double[3]    p-vector
-**
-**  Returned:
-**     theta    double       longitude angle (radians)
-**     phi      double       latitude angle (radians)
-**     r        double       radial distance
-**
-**  Notes:
-**
-**  1) If P is null, zero theta, phi and r are returned.
-**
-**  2) At either pole, zero theta is returned.
-**
-**  Called:
-**     iauC2s       p-vector to spherical
-**     iauPm        modulus of p-vector
-**
-**  This revision:  2008 May 22
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauC2s(p, theta, phi);
-   *r = iauPm(p);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauPap(double a[3], double b[3])
-/*
-**  - - - - - - -
-**   i a u P a p
-**  - - - - - - -
-**
-**  Position-angle from two p-vectors.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a      double[3]  direction of reference point
-**     b      double[3]  direction of point whose PA is required
-**
-**  Returned (function value):
-**            double     position angle of b with respect to a (radians)
-**
-**  Notes:
-**
-**  1) The result is the position angle, in radians, of direction b with
-**     respect to direction a.  It is in the range -pi to +pi.  The
-**     sense is such that if b is a small distance "north" of a the
-**     position angle is approximately zero, and if b is a small
-**     distance "east" of a the position angle is approximately +pi/2.
-**
-**  2) The vectors a and b need not be of unit length.
-**
-**  3) Zero is returned if the two directions are the same or if either
-**     vector is null.
-**
-**  4) If vector a is at a pole, the result is ill-defined.
-**
-**  Called:
-**     iauPn        decompose p-vector into modulus and direction
-**     iauPm        modulus of p-vector
-**     iauPxp       vector product of two p-vectors
-**     iauPmp       p-vector minus p-vector
-**     iauPdp       scalar product of two p-vectors
-**
-**  This revision:  2008 May 25
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double am, au[3], bm, st, ct, xa, ya, za, eta[3], xi[3], a2b[3], pa;
-
-
-/* Modulus and direction of the a vector. */
-   iauPn(a, &am, au);
-
-/* Modulus of the b vector. */
-   bm = iauPm(b);
-
-/* Deal with the case of a null vector. */
-   if ((am == 0.0) || (bm == 0.0)) {
-      st = 0.0;
-      ct = 1.0;
-   } else {
-
-   /* The "north" axis tangential from a (arbitrary length). */
-      xa = a[0];
-      ya = a[1];
-      za = a[2];
-      eta[0] = -xa * za;
-      eta[1] = -ya * za;
-      eta[2] =  xa*xa + ya*ya;
-
-   /* The "east" axis tangential from a (same length). */
-      iauPxp(eta, au, xi);
-
-   /* The vector from a to b. */
-      iauPmp(b, a, a2b);
-
-   /* Resolve into components along the north and east axes. */
-      st = iauPdp(a2b, xi);
-      ct = iauPdp(a2b, eta);
-
-   /* Deal with degenerate cases. */
-      if ((st == 0.0) && (ct == 0.0)) ct = 1.0;
-   }
-
-/* Position angle. */
-   pa = atan2(st, ct);
-
-   return pa;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauPas(double al, double ap, double bl, double bp)
-/*
-**  - - - - - - -
-**   i a u P a s
-**  - - - - - - -
-**
-**  Position-angle from spherical coordinates.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     al     double     longitude of point A (e.g. RA) in radians
-**     ap     double     latitude of point A (e.g. Dec) in radians
-**     bl     double     longitude of point B
-**     bp     double     latitude of point B
-**
-**  Returned (function value):
-**            double     position angle of B with respect to A
-**
-**  Notes:
-**
-**  1) The result is the bearing (position angle), in radians, of point
-**     B with respect to point A.  It is in the range -pi to +pi.  The
-**     sense is such that if B is a small distance "east" of point A,
-**     the bearing is approximately +pi/2.
-**
-**  2) Zero is returned if the two points are coincident.
-**
-**  This revision:  2008 May 22
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dl, x, y, pa;
-
-
-   dl = bl - al;
-   y = sin(dl) * cos(bp);
-   x = sin(bp) * cos(ap) - cos(bp) * sin(ap) * cos(dl);
-   pa = ((x != 0.0) || (y != 0.0)) ? atan2(y, x) : 0.0;
-
-   return pa;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPb06(double date1, double date2,
-             double *bzeta, double *bz, double *btheta)
-/*
-**  - - - - - - - -
-**   i a u P b 0 6
-**  - - - - - - - -
-**
-**  This function forms three Euler angles which implement general
-**  precession from epoch J2000.0, using the IAU 2006 model.  Frame
-**  bias (the offset between ICRS and mean J2000.0) is included.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     bzeta        double   1st rotation: radians cw around z
-**     bz           double   3rd rotation: radians cw around z
-**     btheta       double   2nd rotation: radians ccw around y
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The traditional accumulated precession angles zeta_A, z_A,
-**     theta_A cannot be obtained in the usual way, namely through
-**     polynomial expressions, because of the frame bias.  The latter
-**     means that two of the angles undergo rapid changes near this
-**     date.  They are instead the results of decomposing the
-**     precession-bias matrix obtained by using the Fukushima-Williams
-**     method, which does not suffer from the problem.  The
-**     decomposition returns values which can be used in the
-**     conventional formulation and which include frame bias.
-**
-**  3) The three angles are returned in the conventional order, which
-**     is not the same as the order of the corresponding Euler
-**     rotations.  The precession-bias matrix is
-**     R_3(-z) x R_2(+theta) x R_3(-zeta).
-**
-**  4) Should zeta_A, z_A, theta_A angles be required that do not
-**     contain frame bias, they are available by calling the SOFA
-**     function iauP06e.
-**
-**  Called:
-**     iauPmat06    PB matrix, IAU 2006
-**     iauRz        rotate around Z-axis
-**
-**  This revision:  2008 May 26
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double r[3][3], r31, r32;
-
-
-/* Precession matrix via Fukushima-Williams angles. */
-   iauPmat06(date1, date2, r);
-
-/* Solve for z. */
-   *bz = atan2(r[1][2], r[0][2]);
-
-/* Remove it from the matrix. */
-   iauRz(*bz, r);
-
-/* Solve for the remaining two angles. */
-   *bzeta = atan2 (r[1][0], r[1][1]);
-   r31 = r[2][0];
-   r32 = r[2][1];
-   *btheta = atan2(-dsign(sqrt(r31 * r31 + r32 * r32), r[0][2]),
-                   r[2][2]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauPdp(double a[3], double b[3])
-/*
-**  - - - - - - -
-**   i a u P d p
-**  - - - - - - -
-**
-**  p-vector inner (=scalar=dot) product.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a      double[3]     first p-vector
-**     b      double[3]     second p-vector
-**
-**  Returned (function value):
-**            double        a . b
-**
-**  This revision:  2008 May 22
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double w;
-
-
-   w  = a[0] * b[0]
-      + a[1] * b[1]
-      + a[2] * b[2];
-
-   return w;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPfw06(double date1, double date2,
-              double *gamb, double *phib, double *psib, double *epsa)
-/*
-**  - - - - - - - - -
-**   i a u P f w 0 6
-**  - - - - - - - - -
-**
-**  Precession angles, IAU 2006 (Fukushima-Williams 4-angle formulation).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     gamb         double   F-W angle gamma_bar (radians)
-**     phib         double   F-W angle phi_bar (radians)
-**     psib         double   F-W angle psi_bar (radians)
-**     epsa         double   F-W angle epsilon_A (radians)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) Naming the following points:
-**
-**           e = J2000.0 ecliptic pole,
-**           p = GCRS pole,
-**           E = mean ecliptic pole of date,
-**     and   P = mean pole of date,
-**
-**     the four Fukushima-Williams angles are as follows:
-**
-**        gamb = gamma_bar = epE
-**        phib = phi_bar = pE
-**        psib = psi_bar = pEP
-**        epsa = epsilon_A = EP
-**
-**  3) The matrix representing the combined effects of frame bias and
-**     precession is:
-**
-**        PxB = R_1(-epsa).R_3(-psib).R_1(phib).R_3(gamb)
-**
-**  4) The matrix representing the combined effects of frame bias,
-**     precession and nutation is simply:
-**
-**        NxPxB = R_1(-epsa-dE).R_3(-psib-dP).R_1(phib).R_3(gamb)
-**
-**     where dP and dE are the nutation components with respect to the
-**     ecliptic of date.
-**
-**  Reference:
-**
-**     Hilton, J. et al., 2006, Celest.Mech.Dyn.Astron. 94, 351
-**
-**  Called:
-**     iauObl06     mean obliquity, IAU 2006
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t;
-
-
-/* Interval between fundamental date J2000.0 and given date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* P03 bias+precession angles. */
-   *gamb = (    -0.052928     +
-           (    10.556378     +
-           (     0.4932044    +
-           (    -0.00031238   +
-           (    -0.000002788  +
-           (     0.0000000260 )
-           * t) * t) * t) * t) * t) * DAS2R;
-   *phib = ( 84381.412819     +
-           (   -46.811016     +
-           (     0.0511268    +
-           (     0.00053289   +
-           (    -0.000000440  +
-           (    -0.0000000176 )
-           * t) * t) * t) * t) * t) * DAS2R;
-   *psib = (    -0.041775     +
-           (  5038.481484     +
-           (     1.5584175    +
-           (    -0.00018522   +
-           (    -0.000026452  +
-           (    -0.0000000148 )
-           * t) * t) * t) * t) * t) * DAS2R;
-   *epsa =  iauObl06(date1, date2);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauPlan94(double date1, double date2, int np, double pv[2][3])
-/*
-**  - - - - - - - - - -
-**   i a u P l a n 9 4
-**  - - - - - - - - - -
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Approximate heliocentric position and velocity of a nominated major
-**  planet:  Mercury, Venus, EMB, Mars, Jupiter, Saturn, Uranus or
-**  Neptune (but not the Earth itself).
-**
-**  Given:
-**     date1  double       TDB date part A (Note 1)
-**     date2  double       TDB date part B (Note 1)
-**     np     int          planet (1=Mercury, 2=Venus, 3=EMB, 4=Mars,
-**                             5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune)
-**
-**  Returned (argument):
-**     pv     double[3][2] planet p,v (heliocentric, J2000.0, AU,AU/d)
-**
-**  Returned (function value):
-**            int          status: -1 = illegal NP (outside 1-8)
-**                                  0 = OK
-**                                 +1 = warning: year outside 1000-3000
-**                                 +2 = warning: failed to converge
-**
-**  Notes:
-**
-**  1) The date date1+date2 is in the TDB time scale (in practice TT can
-**     be used) and is a Julian Date, apportioned in any convenient way
-**     between the two arguments.  For example, JD(TDB)=2450123.7 could
-**     be expressed in any of these ways, among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in cases
-**     where the loss of several decimal digits of resolution is
-**     acceptable.  The J2000 method is best matched to the way the
-**     argument is handled internally and will deliver the optimum
-**     resolution.  The MJD method and the date & time methods are both
-**     good compromises between resolution and convenience.  The limited
-**     accuracy of the present algorithm is such that any of the methods
-**     is satisfactory.
-**
-**  2) If an np value outside the range 1-8 is supplied, an error status
-**     (function value -1) is returned and the pv vector set to zeroes.
-**
-**  3) For np=3 the result is for the Earth-Moon Barycenter.  To obtain
-**     the heliocentric position and velocity of the Earth, use instead
-**     the SOFA function iauEpv00.
-**
-**  4) On successful return, the array pv contains the following:
-**
-**        pv[0][0]   x      }
-**        pv[1][0]   y      } heliocentric position, AU
-**        pv[2][0]   z      }
-**
-**        pv[0][1]   xdot   }
-**        pv[1][1]   ydot   } heliocentric velocity, AU/d
-**        pv[2][1]   zdot   }
-**
-**     The reference frame is equatorial and is with respect to the
-**     mean equator and equinox of epoch J2000.0.
-**
-**  5) The algorithm is due to J.L. Simon, P. Bretagnon, J. Chapront,
-**     M. Chapront-Touze, G. Francou and J. Laskar (Bureau des
-**     Longitudes, Paris, France).  From comparisons with JPL
-**     ephemeris DE102, they quote the following maximum errors
-**     over the interval 1800-2050:
-**
-**                     L (arcsec)    B (arcsec)      R (km)
-**
-**        Mercury          4             1             300
-**        Venus            5             1             800
-**        EMB              6             1            1000
-**        Mars            17             1            7700
-**        Jupiter         71             5           76000
-**        Saturn          81            13          267000
-**        Uranus          86             7          712000
-**        Neptune         11             1          253000
-**
-**     Over the interval 1000-3000, they report that the accuracy is no
-**     worse than 1.5 times that over 1800-2050.  Outside 1000-3000 the
-**     accuracy declines.
-**
-**     Comparisons of the present function with the JPL DE200 ephemeris
-**     give the following RMS errors over the interval 1960-2025:
-**
-**                      position (km)     velocity (m/s)
-**
-**        Mercury            334               0.437
-**        Venus             1060               0.855
-**        EMB               2010               0.815
-**        Mars              7690               1.98
-**        Jupiter          71700               7.70
-**        Saturn          199000              19.4
-**        Uranus          564000              16.4
-**        Neptune         158000              14.4
-**
-**     Comparisons against DE200 over the interval 1800-2100 gave the
-**     following maximum absolute differences.  (The results using
-**     DE406 were essentially the same.)
-**
-**                   L (arcsec)   B (arcsec)     R (km)   Rdot (m/s)
-**
-**        Mercury        7            1            500       0.7
-**        Venus          7            1           1100       0.9
-**        EMB            9            1           1300       1.0
-**        Mars          26            1           9000       2.5
-**        Jupiter       78            6          82000       8.2
-**        Saturn        87           14         263000      24.6
-**        Uranus        86            7         661000      27.4
-**        Neptune       11            2         248000      21.4
-**
-**  6) The present SOFA re-implementation of the original Simon et al.
-**     Fortran code differs from the original in the following respects:
-**
-**       *  C instead of Fortran.
-**
-**       *  The date is supplied in two parts.
-**
-**       *  The result is returned only in equatorial Cartesian form;
-**          the ecliptic longitude, latitude and radius vector are not
-**          returned.
-**
-**       *  The result is in the J2000.0 equatorial frame, not ecliptic.
-**
-**       *  More is done in-line: there are fewer calls to subroutines.
-**
-**       *  Different error/warning status values are used.
-**
-**       *  A different Kepler's-equation-solver is used (avoiding
-**          use of double precision complex).
-**
-**       *  Polynomials in t are nested to minimize rounding errors.
-**
-**       *  Explicit double constants are used to avoid mixed-mode
-**          expressions.
-**
-**     None of the above changes affects the result significantly.
-**
-**  7) The returned status indicates the most serious condition
-**     encountered during execution of the function.  Illegal np is
-**     considered the most serious, overriding failure to converge,
-**     which in turn takes precedence over the remote date warning.
-**
-**  Called:
-**     iauAnp       normalize angle into range 0 to 2pi
-**
-**  Reference:  Simon, J.L, Bretagnon, P., Chapront, J.,
-**              Chapront-Touze, M., Francou, G., and Laskar, J.,
-**              Astron. Astrophys. 282, 663 (1994).
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Gaussian constant */
-   static const double GK = 0.017202098950;
-
-/* Sin and cos of J2000.0 mean obliquity (IAU 1976) */
-   static const double SINEPS = 0.3977771559319137;
-   static const double COSEPS = 0.9174820620691818;
-
-/* Maximum number of iterations allowed to solve Kepler's equation */
-   static const int KMAX = 10;
-
-   int jstat, i, k;
-   double t, da, dl, de, dp, di, dom, dmu, arga, argl, am,
-          ae, dae, ae2, at, r, v, si2, xq, xp, tl, xsw,
-          xcw, xm2, xf, ci2, xms, xmc, xpxq2, x, y, z;
-
-/* Planetary inverse masses */
-   static const double amas[] = { 6023600.0,       /* Mercury */
-                                   408523.5,       /* Venus   */
-                                   328900.5,       /* EMB     */
-                                  3098710.0,       /* Mars    */
-                                     1047.355,     /* Jupiter */
-                                     3498.5,       /* Saturn  */
-                                    22869.0,       /* Uranus  */
-                                    19314.0 };     /* Neptune */
-
-/*
-** Tables giving the mean Keplerian elements, limited to t^2 terms:
-**
-**   a       semi-major axis (AU)
-**   dlm     mean longitude (degree and arcsecond)
-**   e       eccentricity
-**   pi      longitude of the perihelion (degree and arcsecond)
-**   dinc    inclination (degree and arcsecond)
-**   omega   longitude of the ascending node (degree and arcsecond)
-*/
-
-   static const double a[][3] = {
-       {  0.3870983098,           0.0,     0.0 },  /* Mercury */
-       {  0.7233298200,           0.0,     0.0 },  /* Venus   */
-       {  1.0000010178,           0.0,     0.0 },  /* EMB     */
-       {  1.5236793419,         3e-10,     0.0 },  /* Mars    */
-       {  5.2026032092,     19132e-10, -39e-10 },  /* Jupiter */
-       {  9.5549091915, -0.0000213896, 444e-10 },  /* Saturn  */
-       { 19.2184460618,     -3716e-10, 979e-10 },  /* Uranus  */
-       { 30.1103868694,    -16635e-10, 686e-10 }   /* Neptune */
-   };
-
-   static const double dlm[][3] = {
-       { 252.25090552, 5381016286.88982,  -1.92789 },
-       { 181.97980085, 2106641364.33548,   0.59381 },
-       { 100.46645683, 1295977422.83429,  -2.04411 },
-       { 355.43299958,  689050774.93988,   0.94264 },
-       {  34.35151874,  109256603.77991, -30.60378 },
-       {  50.07744430,   43996098.55732,  75.61614 },
-       { 314.05500511,   15424811.93933,  -1.75083 },
-       { 304.34866548,    7865503.20744,   0.21103 }
-   };
-
-   static const double e[][3] = {
-       { 0.2056317526,  0.0002040653,    -28349e-10 },
-       { 0.0067719164, -0.0004776521,     98127e-10 },
-       { 0.0167086342, -0.0004203654, -0.0000126734 },
-       { 0.0934006477,  0.0009048438,    -80641e-10 },
-       { 0.0484979255,  0.0016322542, -0.0000471366 },
-       { 0.0555481426, -0.0034664062, -0.0000643639 },
-       { 0.0463812221, -0.0002729293,  0.0000078913 },
-       { 0.0094557470,  0.0000603263,           0.0 }
-   };
-
-   static const double pi[][3] = {
-       {  77.45611904,  5719.11590,   -4.83016 },
-       { 131.56370300,   175.48640, -498.48184 },
-       { 102.93734808, 11612.35290,   53.27577 },
-       { 336.06023395, 15980.45908,  -62.32800 },
-       {  14.33120687,  7758.75163,  259.95938 },
-       {  93.05723748, 20395.49439,  190.25952 },
-       { 173.00529106,  3215.56238,  -34.09288 },
-       {  48.12027554,  1050.71912,   27.39717 }
-   };
-
-   static const double dinc[][3] = {
-       { 7.00498625, -214.25629,   0.28977 },
-       { 3.39466189,  -30.84437, -11.67836 },
-       {        0.0,  469.97289,  -3.35053 },
-       { 1.84972648, -293.31722,  -8.11830 },
-       { 1.30326698,  -71.55890,  11.95297 },
-       { 2.48887878,   91.85195, -17.66225 },
-       { 0.77319689,  -60.72723,   1.25759 },
-       { 1.76995259,    8.12333,   0.08135 }
-   };
-
-   static const double omega[][3] = {
-       {  48.33089304,  -4515.21727,  -31.79892 },
-       {  76.67992019, -10008.48154,  -51.32614 },
-       { 174.87317577,  -8679.27034,   15.34191 },
-       {  49.55809321, -10620.90088, -230.57416 },
-       { 100.46440702,   6362.03561,  326.52178 },
-       { 113.66550252,  -9240.19942,  -66.23743 },
-       {  74.00595701,   2669.15033,  145.93964 },
-       { 131.78405702,   -221.94322,   -0.78728 }
-   };
-
-/* Tables for trigonometric terms to be added to the mean elements of */
-/* the semi-major axes */
-
-   static const double kp[][9] = {
-    {   69613, 75645, 88306, 59899, 15746, 71087, 142173,  3086,    0 },
-    {   21863, 32794, 26934, 10931, 26250, 43725,  53867, 28939,    0 },
-    {   16002, 21863, 32004, 10931, 14529, 16368,  15318, 32794,    0 },
-    {    6345,  7818, 15636,  7077,  8184, 14163,   1107,  4872,    0 },
-    {    1760,  1454,  1167,   880,   287,  2640,     19,  2047, 1454 },
-    {     574,     0,   880,   287,    19,  1760,   1167,   306,  574 },
-    {     204,     0,   177,  1265,     4,   385,    200,   208,  204 },
-    {       0,   102,   106,     4,    98,  1367,    487,   204,    0 }
-   };
-
-   static const double ca[][9] = {
-    {       4,    -13,    11,   -9,    -9,   -3,     -1,     4,     0 },
-    {    -156,     59,   -42,    6,    19,  -20,    -10,   -12,     0 },
-    {      64,   -152,    62,   -8,    32,  -41,     19,   -11,     0 },
-    {     124,    621,  -145,  208,    54,  -57,     30,    15,     0 },
-    {  -23437,  -2634,  6601, 6259, -1507,-1821,   2620, -2115, -1489 },
-    {   62911,-119919, 79336,17814,-24241,12068,   8306, -4893,  8902 },
-    {  389061,-262125,-44088, 8387,-22976,-2093,   -615, -9720,  6633 },
-    { -412235,-157046,-31430,37817, -9740,  -13,  -7449,  9644,     0 }
-   };
-
-   static const double sa[][9] = {
-    {     -29,    -1,     9,     6,    -6,     5,     4,     0,     0 },
-    {     -48,  -125,   -26,   -37,    18,   -13,   -20,    -2,     0 },
-    {    -150,   -46,    68,    54,    14,    24,   -28,    22,     0 },
-    {    -621,   532,  -694,   -20,   192,   -94,    71,   -73,     0 },
-    {  -14614,-19828, -5869,  1881, -4372, -2255,   782,   930,   913 },
-    {  139737,     0, 24667, 51123, -5102,  7429, -4095, -1976, -9566 },
-    { -138081,     0, 37205,-49039,-41901,-33872,-27037,-12474, 18797 },
-    {       0, 28492,133236, 69654, 52322,-49577,-26430, -3593,     0 }
-   };
-
-/* Tables giving the trigonometric terms to be added to the mean */
-/* elements of the mean longitudes */
-
-   static const double kq[][10] = {
-    {   3086,15746,69613,59899,75645,88306, 12661,  2658,    0,     0 },
-    {  21863,32794,10931,   73, 4387,26934,  1473,  2157,    0,     0 },
-    {     10,16002,21863,10931, 1473,32004,  4387,    73,    0,     0 },
-    {     10, 6345, 7818, 1107,15636, 7077,  8184,   532,   10,     0 },
-    {     19, 1760, 1454,  287, 1167,  880,   574,  2640,   19,  1454 },
-    {     19,  574,  287,  306, 1760,   12,    31,    38,   19,   574 },
-    {      4,  204,  177,    8,   31,  200,  1265,   102,    4,   204 },
-    {      4,  102,  106,    8,   98, 1367,   487,   204,    4,   102 }
-   };
-
-   static const double cl[][10] = {
-    {      21,   -95, -157,   41,   -5,   42,  23,  30,      0,     0 },
-    {    -160,  -313, -235,   60,  -74,  -76, -27,  34,      0,     0 },
-    {    -325,  -322,  -79,  232,  -52,   97,  55, -41,      0,     0 },
-    {    2268,  -979,  802,  602, -668,  -33, 345, 201,    -55,     0 },
-    {    7610, -4997,-7689,-5841,-2617, 1115,-748,-607,   6074,   354 },
-    {  -18549, 30125,20012, -730,  824,   23,1289,-352, -14767, -2062 },
-    { -135245,-14594, 4197,-4030,-5630,-2898,2540,-306,   2939,  1986 },
-    {   89948,  2103, 8963, 2695, 3682, 1648, 866,-154,  -1963,  -283 }
-   };
-
-   static const double sl[][10] = {
-    {   -342,   136,  -23,   62,   66,  -52, -33,    17,     0,     0 },
-    {    524,  -149,  -35,  117,  151,  122, -71,   -62,     0,     0 },
-    {   -105,  -137,  258,   35, -116,  -88,-112,   -80,     0,     0 },
-    {    854,  -205, -936, -240,  140, -341, -97,  -232,   536,     0 },
-    { -56980,  8016, 1012, 1448,-3024,-3710, 318,   503,  3767,   577 },
-    { 138606,-13478,-4964, 1441,-1319,-1482, 427,  1236, -9167, -1918 },
-    {  71234,-41116, 5334,-4935,-1848,   66, 434, -1748,  3780,  -701 },
-    { -47645, 11647, 2166, 3194,  679,    0,-244,  -419, -2531,    48 }
-   };
-
-/*--------------------------------------------------------------------*/
-
-/* Validate the planet number. */
-   if ((np < 1) || (np > 8)) {
-      jstat = -1;
-
-   /* Reset the result in case of failure. */
-      for (k = 0; k < 2; k++) {
-         for (i = 0; i < 3; i++) {
-            pv[k][i] = 0.0;
-         }
-      }
-
-   } else {
-
-   /* Decrement the planet number to start at zero. */
-      np--;
-
-   /* Time: Julian millennia since J2000.0. */
-      t = ((date1 - DJ00) + date2) / DJM;
-
-   /* OK status unless remote date. */
-      jstat = fabs(t) <= 1.0 ? 0 : 1;
-
-   /* Compute the mean elements. */
-      da = a[np][0] +
-          (a[np][1] +
-           a[np][2] * t) * t;
-      dl = (3600.0 * dlm[np][0] +
-                    (dlm[np][1] +
-                     dlm[np][2] * t) * t) * DAS2R;
-      de = e[np][0] +
-         ( e[np][1] +
-           e[np][2] * t) * t;
-      dp = iauAnpm((3600.0 * pi[np][0] +
-                            (pi[np][1] +
-                             pi[np][2] * t) * t) * DAS2R);
-      di = (3600.0 * dinc[np][0] +
-                    (dinc[np][1] +
-                     dinc[np][2] * t) * t) * DAS2R;
-      dom = iauAnpm((3600.0 * omega[np][0] +
-                             (omega[np][1] +
-                              omega[np][2] * t) * t) * DAS2R);
-
-   /* Apply the trigonometric terms. */
-      dmu = 0.35953620 * t;
-      for (k = 0; k < 8; k++) {
-         arga = kp[np][k] * dmu;
-         argl = kq[np][k] * dmu;
-         da += (ca[np][k] * cos(arga) +
-                sa[np][k] * sin(arga)) * 1e-7;
-         dl += (cl[np][k] * cos(argl) +
-                sl[np][k] * sin(argl)) * 1e-7;
-      }
-      arga = kp[np][8] * dmu;
-      da += t * (ca[np][8] * cos(arga) +
-                 sa[np][8] * sin(arga)) * 1e-7;
-      for (k = 8; k < 10; k++) {
-         argl = kq[np][k] * dmu;
-         dl += t * (cl[np][k] * cos(argl) +
-                    sl[np][k] * sin(argl)) * 1e-7;
-      }
-      dl = fmod(dl, D2PI);
-
-   /* Iterative soln. of Kepler's equation to get eccentric anomaly. */
-      am = dl - dp;
-      ae = am + de * sin(am);
-      k = 0;
-      dae = 1.0;
-      while (k < KMAX && fabs(dae) > 1e-12) {
-         dae = (am - ae + de * sin(ae)) / (1.0 - de * cos(ae));
-         ae += dae;
-         k++;
-         if (k == KMAX-1) jstat = 2;
-      }
-
-   /* True anomaly. */
-      ae2 = ae / 2.0;
-      at = 2.0 * atan2(sqrt((1.0 + de) / (1.0 - de)) * sin(ae2),
-                                                       cos(ae2));
-
-   /* Distance (AU) and speed (radians per day). */
-      r = da * (1.0 - de * cos(ae));
-      v = GK * sqrt((1.0 + 1.0 / amas[np]) / (da * da * da));
-
-      si2 = sin(di / 2.0);
-      xq = si2 * cos(dom);
-      xp = si2 * sin(dom);
-      tl = at + dp;
-      xsw = sin(tl);
-      xcw = cos(tl);
-      xm2 = 2.0 * (xp * xcw - xq * xsw);
-      xf = da / sqrt(1  -  de * de);
-      ci2 = cos(di / 2.0);
-      xms = (de * sin(dp) + xsw) * xf;
-      xmc = (de * cos(dp) + xcw) * xf;
-      xpxq2 = 2 * xp * xq;
-
-   /* Position (J2000.0 ecliptic x,y,z in AU). */
-      x = r * (xcw - xm2 * xp);
-      y = r * (xsw + xm2 * xq);
-      z = r * (-xm2 * ci2);
-
-   /* Rotate to equatorial. */
-      pv[0][0] = x;
-      pv[0][1] = y * COSEPS - z * SINEPS;
-      pv[0][2] = y * SINEPS + z * COSEPS;
-
-   /* Velocity (J2000.0 ecliptic xdot,ydot,zdot in AU/d). */
-      x = v * (( -1.0 + 2.0 * xp * xp) * xms + xpxq2 * xmc);
-      y = v * ((  1.0 - 2.0 * xq * xq) * xmc - xpxq2 * xms);
-      z = v * (2.0 * ci2 * (xp * xms + xq * xmc));
-
-   /* Rotate to equatorial. */
-      pv[1][0] = x;
-      pv[1][1] = y * COSEPS - z * SINEPS;
-      pv[1][2] = y * SINEPS + z * COSEPS;
-
-   }
-
-/* Return the status. */
-   return jstat;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauPm(double p[3])
-/*
-**  - - - - - -
-**   i a u P m
-**  - - - - - -
-**
-**  Modulus of p-vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     p      double[3]     p-vector
-**
-**  Returned (function value):
-**            double        modulus
-**
-**  This revision:  2008 May 22
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double w;
-
-
-   w  = sqrt( p[0] * p[0]
-            + p[1] * p[1]
-            + p[2] * p[2] );
-
-   return w;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPmat00(double date1, double date2, double rbp[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u P m a t 0 0
-**  - - - - - - - - - -
-**
-**  Precession matrix (including frame bias) from GCRS to a specified
-**  date, IAU 2000 model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rbp          double[3][3]    bias-precession matrix (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix operates in the sense V(date) = rbp * V(GCRS), where
-**     the p-vector V(GCRS) is with respect to the Geocentric Celestial
-**     Reference System (IAU, 2000) and the p-vector V(date) is with
-**     respect to the mean equatorial triad of the given date.
-**
-**  Called:
-**     iauBp00      frame bias and precession matrices, IAU 2000
-**
-**  Reference:
-**
-**     IAU: Trans. International Astronomical Union, Vol. XXIVB;  Proc.
-**     24th General Assembly, Manchester, UK.  Resolutions B1.3, B1.6.
-**     (2000)
-**
-**  This revision:  2009 December 21
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rb[3][3], rp[3][3];
-
-
-/* Obtain the required matrix (discarding others). */
-   iauBp00(date1, date2, rb, rp, rbp);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPmat06(double date1, double date2, double rbp[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u P m a t 0 6
-**  - - - - - - - - - -
-**
-**  Precession matrix (including frame bias) from GCRS to a specified
-**  date, IAU 2006 model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rbp          double[3][3]    bias-precession matrix (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix operates in the sense V(date) = rbp * V(GCRS), where
-**     the p-vector V(GCRS) is with respect to the Geocentric Celestial
-**     Reference System (IAU, 2000) and the p-vector V(date) is with
-**     respect to the mean equatorial triad of the given date.
-**
-**  Called:
-**     iauPfw06     bias-precession F-W angles, IAU 2006
-**     iauFw2m      F-W angles to r-matrix
-**
-**  References:
-**
-**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
-**
-**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
-**
-**  This revision:  2009 December 21
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double gamb, phib, psib, epsa;
-
-
-/* Bias-precession Fukushima-Williams angles. */
-   iauPfw06(date1, date2, &gamb, &phib, &psib, &epsa);
-
-/* Form the matrix. */
-   iauFw2m(gamb, phib, psib, epsa, rbp);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPmat76(double date1, double date2, double rmatp[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u P m a t 7 6
-**  - - - - - - - - - -
-**
-**  Precession matrix from J2000.0 to a specified date, IAU 1976 model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2 double       ending date, TT (Note 1)
-**
-**  Returned:
-**     rmatp       double[3][3] precession matrix, J2000.0 -> date1+date2
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix operates in the sense V(date) = RMATP * V(J2000),
-**     where the p-vector V(J2000) is with respect to the mean
-**     equatorial triad of epoch J2000.0 and the p-vector V(date)
-**     is with respect to the mean equatorial triad of the given
-**     date.
-**
-**  3) Though the matrix method itself is rigorous, the precession
-**     angles are expressed through canonical polynomials which are
-**     valid only for a limited time span.  In addition, the IAU 1976
-**     precession rate is known to be imperfect.  The absolute accuracy
-**     of the present formulation is better than 0.1 arcsec from
-**     1960AD to 2040AD, better than 1 arcsec from 1640AD to 2360AD,
-**     and remains below 3 arcsec for the whole of the period
-**     500BC to 3000AD.  The errors exceed 10 arcsec outside the
-**     range 1200BC to 3900AD, exceed 100 arcsec outside 4200BC to
-**     5600AD and exceed 1000 arcsec outside 6800BC to 8200AD.
-**
-**  Called:
-**     iauPrec76    accumulated precession angles, IAU 1976
-**     iauIr        initialize r-matrix to identity
-**     iauRz        rotate around Z-axis
-**     iauRy        rotate around Y-axis
-**     iauCr        copy r-matrix
-**
-**  References:
-**
-**     Lieske, J.H., 1979, Astron.Astrophys. 73, 282.
-**      equations (6) & (7), p283.
-**
-**     Kaplan,G.H., 1981. USNO circular no. 163, pA2.
-**
-**  This revision:  2009 December 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double zeta, z, theta, wmat[3][3];
-
-
-/* Precession Euler angles, J2000.0 to specified date. */
-   iauPrec76(DJ00, 0.0, date1, date2, &zeta, &z, &theta);
-
-/* Form the rotation matrix. */
-   iauIr(  wmat);
-   iauRz( -zeta, wmat);
-   iauRy(  theta, wmat);
-   iauRz( -z, wmat);
-   iauCr( wmat, rmatp);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPmp(double a[3], double b[3], double amb[3])
-/*
-**  - - - - - - -
-**   i a u P m p
-**  - - - - - - -
-**
-**  P-vector subtraction.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a        double[3]      first p-vector
-**     b        double[3]      second p-vector
-**
-**  Returned:
-**     amb      double[3]      a - b
-**
-**  Note:
-**     It is permissible to re-use the same array for any of the
-**     arguments.
-**
-**  This revision:  2008 November 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   amb[0] = a[0] - b[0];
-   amb[1] = a[1] - b[1];
-   amb[2] = a[2] - b[2];
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPn(double p[3], double *r, double u[3])
-/*
-**  - - - - - -
-**   i a u P n
-**  - - - - - -
-**
-**  Convert a p-vector into modulus and unit vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     p        double[3]      p-vector
-**
-**  Returned:
-**     r        double         modulus
-**     u        double[3]      unit vector
-**
-**  Notes:
-**
-**  1) If p is null, the result is null.  Otherwise the result is a unit
-**     vector.
-**
-**  2) It is permissible to re-use the same array for any of the
-**     arguments.
-**
-**  Called:
-**     iauPm        modulus of p-vector
-**     iauZp        zero p-vector
-**     iauSxp       multiply p-vector by scalar
-**
-**  This revision:  2008 November 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double w;
-
-
-/* Obtain the modulus and test for zero. */
-   w = iauPm(p);
-   if (w == 0.0) {
-
-   /* Null vector. */
-      iauZp(u);
-
-   } else {
-
-   /* Unit vector. */
-      iauSxp(1.0/w, p, u);
-   }
-
-/* Return the modulus. */
-   *r = w;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPn00(double date1, double date2, double dpsi, double deps,
-             double *epsa,
-             double rb[3][3], double rp[3][3], double rbp[3][3],
-             double rn[3][3], double rbpn[3][3])
-/*
-**  - - - - - - - -
-**   i a u P n 0 0
-**  - - - - - - - -
-**
-**  Precession-nutation, IAU 2000 model:  a multi-purpose function,
-**  supporting classical (equinox-based) use directly and CIO-based
-**  use indirectly.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
-**     dpsi,deps    double          nutation (Note 2)
-**
-**  Returned:
-**     epsa         double          mean obliquity (Note 3)
-**     rb           double[3][3]    frame bias matrix (Note 4)
-**     rp           double[3][3]    precession matrix (Note 5)
-**     rbp          double[3][3]    bias-precession matrix (Note 6)
-**     rn           double[3][3]    nutation matrix (Note 7)
-**     rbpn         double[3][3]    GCRS-to-true matrix (Note 8)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The caller is responsible for providing the nutation components;
-**     they are in longitude and obliquity, in radians and are with
-**     respect to the equinox and ecliptic of date.  For high-accuracy
-**     applications, free core nutation should be included as well as
-**     any other relevant corrections to the position of the CIP.
-**
-**  3) The returned mean obliquity is consistent with the IAU 2000
-**     precession-nutation models.
-**
-**  4) The matrix rb transforms vectors from GCRS to J2000.0 mean
-**     equator and equinox by applying frame bias.
-**
-**  5) The matrix rp transforms vectors from J2000.0 mean equator and
-**     equinox to mean equator and equinox of date by applying
-**     precession.
-**
-**  6) The matrix rbp transforms vectors from GCRS to mean equator and
-**     equinox of date by applying frame bias then precession.  It is
-**     the product rp x rb.
-**
-**  7) The matrix rn transforms vectors from mean equator and equinox of
-**     date to true equator and equinox of date by applying the nutation
-**     (luni-solar + planetary).
-**
-**  8) The matrix rbpn transforms vectors from GCRS to true equator and
-**     equinox of date.  It is the product rn x rbp, applying frame
-**     bias, precession and nutation in that order.
-**
-**  9) It is permissible to re-use the same array in the returned
-**     arguments.  The arrays are filled in the order given.
-**
-**  Called:
-**     iauPr00      IAU 2000 precession adjustments
-**     iauObl80     mean obliquity, IAU 1980
-**     iauBp00      frame bias and precession matrices, IAU 2000
-**     iauCr        copy r-matrix
-**     iauNumat     form nutation matrix
-**     iauRxr       product of two r-matrices
-**
-**  Reference:
-**
-**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dpsipr, depspr, rbpw[3][3], rnw[3][3];
-
-
-/* IAU 2000 precession-rate adjustments. */
-   iauPr00(date1, date2, &dpsipr, &depspr);
-
-/* Mean obliquity, consistent with IAU 2000 precession-nutation. */
-   *epsa = iauObl80(date1, date2) + depspr;
-
-/* Frame bias and precession matrices and their product. */
-   iauBp00(date1, date2, rb, rp, rbpw);
-   iauCr(rbpw, rbp);
-
-/* Nutation matrix. */
-   iauNumat(*epsa, dpsi, deps, rnw);
-   iauCr(rnw, rn);
-
-/* Bias-precession-nutation matrix (classical). */
-   iauRxr(rnw, rbpw, rbpn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPn00a(double date1, double date2,
-              double *dpsi, double *deps, double *epsa,
-              double rb[3][3], double rp[3][3], double rbp[3][3],
-              double rn[3][3], double rbpn[3][3])
-/*
-**  - - - - - - - - -
-**   i a u P n 0 0 a
-**  - - - - - - - - -
-**
-**  Precession-nutation, IAU 2000A model:  a multi-purpose function,
-**  supporting classical (equinox-based) use directly and CIO-based
-**  use indirectly.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     dpsi,deps    double          nutation (Note 2)
-**     epsa         double          mean obliquity (Note 3)
-**     rb           double[3][3]    frame bias matrix (Note 4)
-**     rp           double[3][3]    precession matrix (Note 5)
-**     rbp          double[3][3]    bias-precession matrix (Note 6)
-**     rn           double[3][3]    nutation matrix (Note 7)
-**     rbpn         double[3][3]    GCRS-to-true matrix (Notes 8,9)
-**
-**  Notes:
-**
-**  1)  The TT date date1+date2 is a Julian Date, apportioned in any
-**      convenient way between the two arguments.  For example,
-**      JD(TT)=2450123.7 could be expressed in any of these ways,
-**      among others:
-**
-**             date1          date2
-**
-**          2450123.7           0.0       (JD method)
-**          2451545.0       -1421.3       (J2000 method)
-**          2400000.5       50123.2       (MJD method)
-**          2450123.5           0.2       (date & time method)
-**
-**      The JD method is the most natural and convenient to use in
-**      cases where the loss of several decimal digits of resolution
-**      is acceptable.  The J2000 method is best matched to the way
-**      the argument is handled internally and will deliver the
-**      optimum resolution.  The MJD method and the date & time methods
-**      are both good compromises between resolution and convenience.
-**
-**  2)  The nutation components (luni-solar + planetary, IAU 2000A) in
-**      longitude and obliquity are in radians and with respect to the
-**      equinox and ecliptic of date.  Free core nutation is omitted;
-**      for the utmost accuracy, use the iauPn00  function, where the
-**      nutation components are caller-specified.  For faster but
-**      slightly less accurate results, use the iauPn00b function.
-**
-**  3)  The mean obliquity is consistent with the IAU 2000 precession.
-**
-**  4)  The matrix rb transforms vectors from GCRS to J2000.0 mean
-**      equator and equinox by applying frame bias.
-**
-**  5)  The matrix rp transforms vectors from J2000.0 mean equator and
-**      equinox to mean equator and equinox of date by applying
-**      precession.
-**
-**  6)  The matrix rbp transforms vectors from GCRS to mean equator and
-**      equinox of date by applying frame bias then precession.  It is
-**      the product rp x rb.
-**
-**  7)  The matrix rn transforms vectors from mean equator and equinox
-**      of date to true equator and equinox of date by applying the
-**      nutation (luni-solar + planetary).
-**
-**  8)  The matrix rbpn transforms vectors from GCRS to true equator and
-**      equinox of date.  It is the product rn x rbp, applying frame
-**      bias, precession and nutation in that order.
-**
-**  9)  The X,Y,Z coordinates of the IAU 2000B Celestial Intermediate
-**      Pole are elements (3,1-3) of the matrix rbpn.
-**
-**  10) It is permissible to re-use the same array in the returned
-**      arguments.  The arrays are filled in the order given.
-**
-**  Called:
-**     iauNut00a    nutation, IAU 2000A
-**     iauPn00      bias/precession/nutation results, IAU 2000
-**
-**  Reference:
-**
-**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Nutation. */
-   iauNut00a(date1, date2, dpsi, deps);
-
-/* Remaining results. */
-   iauPn00(date1, date2, *dpsi, *deps, epsa, rb, rp, rbp, rn, rbpn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPn00b(double date1, double date2,
-              double *dpsi, double *deps, double *epsa,
-              double rb[3][3], double rp[3][3], double rbp[3][3],
-              double rn[3][3], double rbpn[3][3])
-/*
-**  - - - - - - - - -
-**   i a u P n 0 0 b
-**  - - - - - - - - -
-**
-**  Precession-nutation, IAU 2000B model:  a multi-purpose function,
-**  supporting classical (equinox-based) use directly and CIO-based
-**  use indirectly.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     dpsi,deps    double          nutation (Note 2)
-**     epsa         double          mean obliquity (Note 3)
-**     rb           double[3][3]    frame bias matrix (Note 4)
-**     rp           double[3][3]    precession matrix (Note 5)
-**     rbp          double[3][3]    bias-precession matrix (Note 6)
-**     rn           double[3][3]    nutation matrix (Note 7)
-**     rbpn         double[3][3]    GCRS-to-true matrix (Notes 8,9)
-**
-**  Notes:
-**
-**  1)  The TT date date1+date2 is a Julian Date, apportioned in any
-**      convenient way between the two arguments.  For example,
-**      JD(TT)=2450123.7 could be expressed in any of these ways,
-**      among others:
-**
-**             date1          date2
-**
-**          2450123.7           0.0       (JD method)
-**          2451545.0       -1421.3       (J2000 method)
-**          2400000.5       50123.2       (MJD method)
-**          2450123.5           0.2       (date & time method)
-**
-**      The JD method is the most natural and convenient to use in
-**      cases where the loss of several decimal digits of resolution
-**      is acceptable.  The J2000 method is best matched to the way
-**      the argument is handled internally and will deliver the
-**      optimum resolution.  The MJD method and the date & time methods
-**      are both good compromises between resolution and convenience.
-**
-**  2)  The nutation components (luni-solar + planetary, IAU 2000B) in
-**      longitude and obliquity are in radians and with respect to the
-**      equinox and ecliptic of date.  For more accurate results, but
-**      at the cost of increased computation, use the iauPn00a function.
-**      For the utmost accuracy, use the iauPn00  function, where the
-**      nutation components are caller-specified.
-**
-**  3)  The mean obliquity is consistent with the IAU 2000 precession.
-**
-**  4)  The matrix rb transforms vectors from GCRS to J2000.0 mean
-**      equator and equinox by applying frame bias.
-**
-**  5)  The matrix rp transforms vectors from J2000.0 mean equator and
-**      equinox to mean equator and equinox of date by applying
-**      precession.
-**
-**  6)  The matrix rbp transforms vectors from GCRS to mean equator and
-**      equinox of date by applying frame bias then precession.  It is
-**      the product rp x rb.
-**
-**  7)  The matrix rn transforms vectors from mean equator and equinox
-**      of date to true equator and equinox of date by applying the
-**      nutation (luni-solar + planetary).
-**
-**  8)  The matrix rbpn transforms vectors from GCRS to true equator and
-**      equinox of date.  It is the product rn x rbp, applying frame
-**      bias, precession and nutation in that order.
-**
-**  9)  The X,Y,Z coordinates of the IAU 2000B Celestial Intermediate
-**      Pole are elements (3,1-3) of the matrix rbpn.
-**
-**  10) It is permissible to re-use the same array in the returned
-**      arguments.  The arrays are filled in the stated order.
-**
-**  Called:
-**     iauNut00b    nutation, IAU 2000B
-**     iauPn00      bias/precession/nutation results, IAU 2000
-**
-**  Reference:
-**
-**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003).
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Nutation. */
-   iauNut00b(date1, date2, dpsi, deps);
-
-/* Remaining results. */
-   iauPn00(date1, date2, *dpsi, *deps, epsa, rb, rp, rbp, rn, rbpn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPn06(double date1, double date2, double dpsi, double deps,
-             double *epsa,
-             double rb[3][3], double rp[3][3], double rbp[3][3],
-             double rn[3][3], double rbpn[3][3])
-/*
-**  - - - - - - - -
-**   i a u P n 0 6
-**  - - - - - - - -
-**
-**  Precession-nutation, IAU 2006 model:  a multi-purpose function,
-**  supporting classical (equinox-based) use directly and CIO-based use
-**  indirectly.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
-**     dpsi,deps    double          nutation (Note 2)
-**
-**  Returned:
-**     epsa         double          mean obliquity (Note 3)
-**     rb           double[3][3]    frame bias matrix (Note 4)
-**     rp           double[3][3]    precession matrix (Note 5)
-**     rbp          double[3][3]    bias-precession matrix (Note 6)
-**     rn           double[3][3]    nutation matrix (Note 7)
-**     rbpn         double[3][3]    GCRS-to-true matrix (Note 8)
-**
-**  Notes:
-**
-**  1)  The TT date date1+date2 is a Julian Date, apportioned in any
-**      convenient way between the two arguments.  For example,
-**      JD(TT)=2450123.7 could be expressed in any of these ways,
-**      among others:
-**
-**             date1          date2
-**
-**          2450123.7           0.0       (JD method)
-**          2451545.0       -1421.3       (J2000 method)
-**          2400000.5       50123.2       (MJD method)
-**          2450123.5           0.2       (date & time method)
-**
-**      The JD method is the most natural and convenient to use in
-**      cases where the loss of several decimal digits of resolution
-**      is acceptable.  The J2000 method is best matched to the way
-**      the argument is handled internally and will deliver the
-**      optimum resolution.  The MJD method and the date & time methods
-**      are both good compromises between resolution and convenience.
-**
-**  2)  The caller is responsible for providing the nutation components;
-**      they are in longitude and obliquity, in radians and are with
-**      respect to the equinox and ecliptic of date.  For high-accuracy
-**      applications, free core nutation should be included as well as
-**      any other relevant corrections to the position of the CIP.
-**
-**  3)  The returned mean obliquity is consistent with the IAU 2006
-**      precession.
-**
-**  4)  The matrix rb transforms vectors from GCRS to J2000.0 mean
-**      equator and equinox by applying frame bias.
-**
-**  5)  The matrix rp transforms vectors from J2000.0 mean equator and
-**      equinox to mean equator and equinox of date by applying
-**      precession.
-**
-**  6)  The matrix rbp transforms vectors from GCRS to mean equator and
-**      equinox of date by applying frame bias then precession.  It is
-**      the product rp x rb.
-**
-**  7)  The matrix rn transforms vectors from mean equator and equinox
-**      of date to true equator and equinox of date by applying the
-**      nutation (luni-solar + planetary).
-**
-**  8)  The matrix rbpn transforms vectors from GCRS to true equator and
-**      equinox of date.  It is the product rn x rbp, applying frame
-**      bias, precession and nutation in that order.
-**
-**  9)  The X,Y,Z coordinates of the IAU 2000B Celestial Intermediate
-**      Pole are elements (3,1-3) of the matrix rbpn.
-**
-**  10) It is permissible to re-use the same array in the returned
-**      arguments.  The arrays are filled in the stated order.
-**
-**  Called:
-**     iauPfw06     bias-precession F-W angles, IAU 2006
-**     iauFw2m      F-W angles to r-matrix
-**     iauCr        copy r-matrix
-**     iauTr        transpose r-matrix
-**     iauRxr       product of two r-matrices
-**
-**  References:
-**
-**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
-**
-**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double gamb, phib, psib, eps, r1[3][3], r2[3][3], rt[3][3];
-
-
-/* Bias-precession Fukushima-Williams angles of J2000.0 = frame bias. */
-   iauPfw06(DJM0, DJM00, &gamb, &phib, &psib, &eps);
-
-/* B matrix. */
-   iauFw2m(gamb, phib, psib, eps, r1);
-   iauCr(r1, rb);
-
-/* Bias-precession Fukushima-Williams angles of date. */
-   iauPfw06(date1, date2, &gamb, &phib, &psib, &eps);
-
-/* Bias-precession matrix. */
-   iauFw2m(gamb, phib, psib, eps, r2);
-   iauCr(r2, rbp);
-
-/* Solve for precession matrix. */
-   iauTr(r1, rt);
-   iauRxr(r2, rt, rp);
-
-/* Equinox-based bias-precession-nutation matrix. */
-   iauFw2m(gamb, phib, psib + dpsi, eps + deps, r1);
-   iauCr(r1, rbpn);
-
-/* Solve for nutation matrix. */
-   iauTr(r2, rt);
-   iauRxr(r1, rt, rn);
-
-/* Obliquity, mean of date. */
-   *epsa = eps;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPn06a(double date1, double date2,
-              double *dpsi, double *deps, double *epsa,
-              double rb[3][3], double rp[3][3], double rbp[3][3],
-              double rn[3][3], double rbpn[3][3])
-/*
-**  - - - - - - - - -
-**   i a u P n 0 6 a
-**  - - - - - - - - -
-**
-**  Precession-nutation, IAU 2006/2000A models:  a multi-purpose function,
-**  supporting classical (equinox-based) use directly and CIO-based use
-**  indirectly.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double          TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     dpsi,deps    double          nutation (Note 2)
-**     epsa         double          mean obliquity (Note 3)
-**     rb           double[3][3]    frame bias matrix (Note 4)
-**     rp           double[3][3]    precession matrix (Note 5)
-**     rbp          double[3][3]    bias-precession matrix (Note 6)
-**     rn           double[3][3]    nutation matrix (Note 7)
-**     rbpn         double[3][3]    GCRS-to-true matrix (Notes 8,9)
-**
-**  Notes:
-**
-**  1)  The TT date date1+date2 is a Julian Date, apportioned in any
-**      convenient way between the two arguments.  For example,
-**      JD(TT)=2450123.7 could be expressed in any of these ways,
-**      among others:
-**
-**             date1          date2
-**
-**          2450123.7           0.0       (JD method)
-**          2451545.0       -1421.3       (J2000 method)
-**          2400000.5       50123.2       (MJD method)
-**          2450123.5           0.2       (date & time method)
-**
-**      The JD method is the most natural and convenient to use in
-**      cases where the loss of several decimal digits of resolution
-**      is acceptable.  The J2000 method is best matched to the way
-**      the argument is handled internally and will deliver the
-**      optimum resolution.  The MJD method and the date & time methods
-**      are both good compromises between resolution and convenience.
-**
-**  2)  The nutation components (luni-solar + planetary, IAU 2000A) in
-**      longitude and obliquity are in radians and with respect to the
-**      equinox and ecliptic of date.  Free core nutation is omitted;
-**      for the utmost accuracy, use the iauPn06 function, where the
-**      nutation components are caller-specified.
-**
-**  3)  The mean obliquity is consistent with the IAU 2006 precession.
-**
-**  4)  The matrix rb transforms vectors from GCRS to mean J2000.0 by
-**      applying frame bias.
-**
-**  5)  The matrix rp transforms vectors from mean J2000.0 to mean of
-**      date by applying precession.
-**
-**  6)  The matrix rbp transforms vectors from GCRS to mean of date by
-**      applying frame bias then precession.  It is the product rp x rb.
-**
-**  7)  The matrix rn transforms vectors from mean of date to true of
-**      date by applying the nutation (luni-solar + planetary).
-**
-**  8)  The matrix rbpn transforms vectors from GCRS to true of date
-**      (CIP/equinox).  It is the product rn x rbp, applying frame bias,
-**      precession and nutation in that order.
-**
-**  9)  The X,Y,Z coordinates of the IAU 2006/2000A Celestial
-**      Intermediate Pole are elements (1,1-3) of the matrix rbpn.
-**
-**  10) It is permissible to re-use the same array in the returned
-**      arguments.  The arrays are filled in the stated order.
-**
-**  Called:
-**     iauNut06a    nutation, IAU 2006/2000A
-**     iauPn06      bias/precession/nutation results, IAU 2006
-**
-**  Reference:
-**
-**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
-**
-**  This revision:  2009 December 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Nutation. */
-   iauNut06a(date1, date2, dpsi, deps);
-
-/* Remaining results. */
-   iauPn06(date1, date2, *dpsi, *deps, epsa, rb, rp, rbp, rn, rbpn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPnm00a(double date1, double date2, double rbpn[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u P n m 0 0 a
-**  - - - - - - - - - -
-**
-**  Form the matrix of precession-nutation for a given date (including
-**  frame bias), equinox-based, IAU 2000A model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double     TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rbpn         double[3][3]    classical NPB matrix (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix operates in the sense V(date) = rbpn * V(GCRS), where
-**     the p-vector V(date) is with respect to the true equatorial triad
-**     of date date1+date2 and the p-vector V(GCRS) is with respect to
-**     the Geocentric Celestial Reference System (IAU, 2000).
-**
-**  3) A faster, but slightly less accurate result (about 1 mas), can be
-**     obtained by using instead the iauPnm00b function.
-**
-**  Called:
-**     iauPn00a     bias/precession/nutation, IAU 2000A
-**
-**  Reference:
-**
-**     IAU: Trans. International Astronomical Union, Vol. XXIVB;  Proc.
-**     24th General Assembly, Manchester, UK.  Resolutions B1.3, B1.6.
-**     (2000)
-**
-**  This revision:  2009 December 21
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rn[3][3];
-
-
-/* Obtain the required matrix (discarding other results). */
-   iauPn00a(date1, date2, &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPnm00b(double date1, double date2, double rbpn[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u P n m 0 0 b
-**  - - - - - - - - - -
-**
-**  Form the matrix of precession-nutation for a given date (including
-**  frame bias), equinox-based, IAU 2000B model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rbpn        double[3][3] bias-precession-nutation matrix (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix operates in the sense V(date) = rbpn * V(GCRS), where
-**     the p-vector V(date) is with respect to the true equatorial triad
-**     of date date1+date2 and the p-vector V(GCRS) is with respect to
-**     the Geocentric Celestial Reference System (IAU, 2000).
-**
-**  3) The present function is faster, but slightly less accurate (about
-**     1 mas), than the iauPnm00a function.
-**
-**  Called:
-**     iauPn00b     bias/precession/nutation, IAU 2000B
-**
-**  Reference:
-**
-**     IAU: Trans. International Astronomical Union, Vol. XXIVB;  Proc.
-**     24th General Assembly, Manchester, UK.  Resolutions B1.3, B1.6.
-**     (2000)
-**
-**  This revision:  2009 December 21
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dpsi, deps, epsa, rb[3][3], rp[3][3], rbp[3][3], rn[3][3];
-
-
-/* Obtain the required matrix (discarding other results). */
-   iauPn00b(date1, date2, &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPnm06a(double date1, double date2, double rnpb[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u P n m 0 6 a
-**  - - - - - - - - - -
-**
-**  Form the matrix of precession-nutation for a given date (including
-**  frame bias), IAU 2006 precession and IAU 2000A nutation models.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2 double       TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     rnpb        double[3][3] bias-precession-nutation matrix (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix operates in the sense V(date) = rnpb * V(GCRS), where
-**     the p-vector V(date) is with respect to the true equatorial triad
-**     of date date1+date2 and the p-vector V(GCRS) is with respect to
-**     the Geocentric Celestial Reference System (IAU, 2000).
-**
-**  Called:
-**     iauPfw06     bias-precession F-W angles, IAU 2006
-**     iauNut06a    nutation, IAU 2006/2000A
-**     iauFw2m      F-W angles to r-matrix
-**
-**  Reference:
-**
-**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855.
-**
-**  This revision:  2009 December 21
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double gamb, phib, psib, epsa, dp, de;
-
-
-/* Fukushima-Williams angles for frame bias and precession. */
-   iauPfw06(date1, date2, &gamb, &phib, &psib, &epsa);
-
-/* Nutation components. */
-   iauNut06a(date1, date2, &dp, &de);
-
-/* Equinox based nutation x precession x bias matrix. */
-   iauFw2m(gamb, phib, psib + dp, epsa + de, rnpb);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPnm80(double date1, double date2, double rmatpn[3][3])
-/*
-**  - - - - - - - - -
-**   i a u P n m 8 0
-**  - - - - - - - - -
-**
-**  Form the matrix of precession/nutation for a given date, IAU 1976
-**  precession model, IAU 1980 nutation model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2    double         TDB date (Note 1)
-**
-**  Returned:
-**     rmatpn         double[3][3]   combined precession/nutation matrix
-**
-**  Notes:
-**
-**  1) The TDB date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TDB)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The matrix operates in the sense V(date) = rmatpn * V(J2000),
-**     where the p-vector V(date) is with respect to the true equatorial
-**     triad of date date1+date2 and the p-vector V(J2000) is with
-**     respect to the mean equatorial triad of epoch J2000.0.
-**
-**  Called:
-**     iauPmat76    precession matrix, IAU 1976
-**     iauNutm80    nutation matrix, IAU 1980
-**     iauRxr       product of two r-matrices
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992),
-**     Section 3.3 (p145).
-**
-**  This revision:  2010 January 23
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rmatp[3][3], rmatn[3][3];
-
-
-/* Precession matrix, J2000.0 to date. */
-   iauPmat76(date1, date2, rmatp);
-
-/* Nutation matrix. */
-   iauNutm80(date1, date2, rmatn);
-
-/* Combine the matrices:  PN = N x P. */
-   iauRxr(rmatn, rmatp, rmatpn);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPom00(double xp, double yp, double sp, double rpom[3][3])
-/*
-**  - - - - - - - - - -
-**   i a u P o m 0 0
-**  - - - - - - - - - -
-**
-**  Form the matrix of polar motion for a given date, IAU 2000.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     xp,yp    double    coordinates of the pole (radians, Note 1)
-**     sp       double    the TIO locator s' (radians, Note 2)
-**
-**  Returned:
-**     rpom     double[3][3]   polar-motion matrix (Note 3)
-**
-**  Notes:
-**
-**  1) The arguments xp and yp are the coordinates (in radians) of the
-**     Celestial Intermediate Pole with respect to the International
-**     Terrestrial Reference System (see IERS Conventions 2003),
-**     measured along the meridians to 0 and 90 deg west respectively.
-**
-**  2) The argument sp is the TIO locator s', in radians, which
-**     positions the Terrestrial Intermediate Origin on the equator.  It
-**     is obtained from polar motion observations by numerical
-**     integration, and so is in essence unpredictable.  However, it is
-**     dominated by a secular drift of about 47 microarcseconds per
-**     century, and so can be taken into account by using s' = -47*t,
-**     where t is centuries since J2000.0.  The function iauSp00
-**     implements this approximation.
-**
-**  3) The matrix operates in the sense V(TRS) = rpom * V(CIP), meaning
-**     that it is the final rotation when computing the pointing
-**     direction to a celestial source.
-**
-**  Called:
-**     iauIr        initialize r-matrix to identity
-**     iauRz        rotate around Z-axis
-**     iauRy        rotate around Y-axis
-**     iauRx        rotate around X-axis
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* Construct the matrix. */
-   iauIr(rpom);
-   iauRz(sp, rpom);
-   iauRy(-xp, rpom);
-   iauRx(-yp, rpom);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPpp(double a[3], double b[3], double apb[3])
-/*
-**  - - - - - - -
-**   i a u P p p
-**  - - - - - - -
-**
-**  P-vector addition.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a        double[3]      first p-vector
-**     b        double[3]      second p-vector
-**
-**  Returned:
-**     apb      double[3]      a + b
-**
-**  Note:
-**     It is permissible to re-use the same array for any of the
-**     arguments.
-**
-**  This revision:  2008 November 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   apb[0] = a[0] + b[0];
-   apb[1] = a[1] + b[1];
-   apb[2] = a[2] + b[2];
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPpsp(double a[3], double s, double b[3], double apsb[3])
-/*
-**  - - - - - - - -
-**   i a u P p s p
-**  - - - - - - - -
-**
-**  P-vector plus scaled p-vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a      double[3]     first p-vector
-**     s      double        scalar (multiplier for b)
-**     b      double[3]     second p-vector
-**
-**  Returned:
-**     apsb   double[3]     a + s*b
-**
-**  Note:
-**     It is permissible for any of a, b and apsb to be the same array.
-**
-**  Called:
-**     iauSxp       multiply p-vector by scalar
-**     iauPpp       p-vector plus p-vector
-**
-**  This revision:  2008 November 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double sb[3];
-
-
-/* s*b. */
-   iauSxp(s, b, sb);
-
-/* a + s*b. */
-   iauPpp(a, sb, apsb);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPr00(double date1, double date2, double *dpsipr, double *depspr)
-/*
-**  - - - - - - - -
-**   i a u P r 0 0
-**  - - - - - - - -
-**
-**  Precession-rate part of the IAU 2000 precession-nutation models
-**  (part of MHB2000).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2    double  TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     dpsipr,depspr  double  precession corrections (Notes 2,3)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The precession adjustments are expressed as "nutation
-**     components", corrections in longitude and obliquity with respect
-**     to the J2000.0 equinox and ecliptic.
-**
-**  3) Although the precession adjustments are stated to be with respect
-**     to Lieske et al. (1977), the MHB2000 model does not specify which
-**     set of Euler angles are to be used and how the adjustments are to
-**     be applied.  The most literal and straightforward procedure is to
-**     adopt the 4-rotation epsilon_0, psi_A, omega_A, xi_A option, and
-**     to add dpsipr to psi_A and depspr to both omega_A and eps_A.
-**
-**  4) This is an implementation of one aspect of the IAU 2000A nutation
-**     model, formally adopted by the IAU General Assembly in 2000,
-**     namely MHB2000 (Mathews et al. 2002).
-**
-**  References:
-**
-**     Lieske, J.H., Lederle, T., Fricke, W. & Morando, B., "Expressions
-**     for the precession quantities based upon the IAU (1976) System of
-**     Astronomical Constants", Astron.Astrophys., 58, 1-16 (1977)
-**
-**     Mathews, P.M., Herring, T.A., Buffet, B.A., "Modeling of nutation
-**     and precession   New nutation series for nonrigid Earth and
-**     insights into the Earth's interior", J.Geophys.Res., 107, B4,
-**     2002.  The MHB2000 code itself was obtained on 9th September 2002
-**     from ftp://maia.usno.navy.mil/conv2000/chapter5/IAU2000A.
-**
-**     Wallace, P.T., "Software for Implementing the IAU 2000
-**     Resolutions", in IERS Workshop 5.1 (2002).
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t;
-
-/* Precession and obliquity corrections (radians per century) */
-   static const double PRECOR = -0.29965 * DAS2R,
-                       OBLCOR = -0.02524 * DAS2R;
-
-
-/* Interval between fundamental epoch J2000.0 and given date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Precession rate contributions with respect to IAU 1976/80. */
-   *dpsipr = PRECOR * t;
-   *depspr = OBLCOR * t;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPrec76(double ep01, double ep02, double ep11, double ep12,
-               double *zeta, double *z, double *theta)
-/*
-**  - - - - - - - - - -
-**   i a u P r e c 7 6
-**  - - - - - - - - - -
-**
-**  IAU 1976 precession model.
-**
-**  This function forms the three Euler angles which implement general
-**  precession between two epochs, using the IAU 1976 model (as for
-**  the FK5 catalog).
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     ep01,ep02   double    TDB starting epoch (Note 1)
-**     ep11,ep12   double    TDB ending epoch (Note 1)
-**
-**  Returned:
-**     zeta        double    1st rotation: radians cw around z
-**     z           double    3rd rotation: radians cw around z
-**     theta       double    2nd rotation: radians ccw around y
-**
-**  Notes:
-**
-**  1) The epochs ep01+ep02 and ep11+ep12 are Julian Dates, apportioned
-**     in any convenient way between the arguments epn1 and epn2.  For
-**     example, JD(TDB)=2450123.7 could be expressed in any of these
-**     ways, among others:
-**
-**             epn1          epn2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in cases
-**     where the loss of several decimal digits of resolution is
-**     acceptable.  The J2000 method is best matched to the way the
-**     argument is handled internally and will deliver the optimum
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**     The two epochs may be expressed using different methods, but at
-**     the risk of losing some resolution.
-**
-**  2) The accumulated precession angles zeta, z, theta are expressed
-**     through canonical polynomials which are valid only for a limited
-**     time span.  In addition, the IAU 1976 precession rate is known to
-**     be imperfect.  The absolute accuracy of the present formulation
-**     is better than 0.1 arcsec from 1960AD to 2040AD, better than
-**     1 arcsec from 1640AD to 2360AD, and remains below 3 arcsec for
-**     the whole of the period 500BC to 3000AD.  The errors exceed
-**     10 arcsec outside the range 1200BC to 3900AD, exceed 100 arcsec
-**     outside 4200BC to 5600AD and exceed 1000 arcsec outside 6800BC to
-**     8200AD.
-**
-**  3) The three angles are returned in the conventional order, which
-**     is not the same as the order of the corresponding Euler
-**     rotations.  The precession matrix is
-**     R_3(-z) x R_2(+theta) x R_3(-zeta).
-**
-**  Reference:
-**
-**     Lieske, J.H., 1979, Astron.Astrophys. 73, 282, equations
-**     (6) & (7), p283.
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t0, t, tas2r, w;
-
-
-/* Interval between fundamental epoch J2000.0 and start epoch (JC). */
-   t0 = ((ep01 - DJ00) + ep02) / DJC;
-
-/* Interval over which precession required (JC). */
-   t = ((ep11 - ep01) + (ep12 - ep02)) / DJC;
-
-/* Euler angles. */
-   tas2r = t * DAS2R;
-   w = 2306.2181 + (1.39656 - 0.000139 * t0) * t0;
-
-   *zeta = (w + ((0.30188 - 0.000344 * t0) + 0.017998 * t) * t) * tas2r;
-
-   *z = (w + ((1.09468 + 0.000066 * t0) + 0.018203 * t) * t) * tas2r;
-
-   *theta = ((2004.3109 + (-0.85330 - 0.000217 * t0) * t0)
-          + ((-0.42665 - 0.000217 * t0) - 0.041833 * t) * t) * tas2r;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPv2p(double pv[2][3], double p[3])
-/*
-**  - - - - - - - -
-**   i a u P v 2 p
-**  - - - - - - - -
-**
-**  Discard velocity component of a pv-vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     pv      double[2][3]     pv-vector
-**
-**  Returned:
-**     p       double[3]        p-vector
-**
-**  Called:
-**     iauCp        copy p-vector
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauCp(pv[0], p);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPv2s(double pv[2][3],
-             double *theta, double *phi, double *r,
-             double *td, double *pd, double *rd)
-/*
-**  - - - - - - - -
-**   i a u P v 2 s
-**  - - - - - - - -
-**
-**  Convert position/velocity from Cartesian to spherical coordinates.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     pv       double[2][3]  pv-vector
-**
-**  Returned:
-**     theta    double        longitude angle (radians)
-**     phi      double        latitude angle (radians)
-**     r        double        radial distance
-**     td       double        rate of change of theta
-**     pd       double        rate of change of phi
-**     rd       double        rate of change of r
-**
-**  Notes:
-**
-**  1) If the position part of pv is null, theta, phi, td and pd
-**     are indeterminate.  This is handled by extrapolating the
-**     position through unit time by using the velocity part of
-**     pv.  This moves the origin without changing the direction
-**     of the velocity component.  If the position and velocity
-**     components of pv are both null, zeroes are returned for all
-**     six results.
-**
-**  2) If the position is a pole, theta, td and pd are indeterminate.
-**     In such cases zeroes are returned for all three.
-**
-**  This revision:  2008 October 28
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double x, y, z, xd, yd, zd, rxy2, rxy, r2, rtrue, rw, xyp;
-
-
-/* Components of position/velocity vector. */
-   x  = pv[0][0];
-   y  = pv[0][1];
-   z  = pv[0][2];
-   xd = pv[1][0];
-   yd = pv[1][1];
-   zd = pv[1][2];
-
-/* Component of r in XY plane squared. */
-   rxy2 = x*x + y*y;
-
-/* Modulus squared. */
-   r2 = rxy2 + z*z;
-
-/* Modulus. */
-   rtrue = sqrt(r2);
-
-/* If null vector, move the origin along the direction of movement. */
-   rw = rtrue;
-   if (rtrue == 0.0) {
-       x = xd;
-       y = yd;
-       z = zd;
-       rxy2 = x*x + y*y;
-       r2 = rxy2 + z*z;
-       rw = sqrt(r2);
-   }
-
-/* Position and velocity in spherical coordinates. */
-   rxy = sqrt(rxy2);
-   xyp = x*xd + y*yd;
-   if (rxy2 != 0.0) {
-       *theta = atan2(y, x);
-       *phi = atan2(z, rxy);
-       *td = (x*yd - y*xd) / rxy2;
-       *pd = (zd*rxy2 - z*xyp) / (r2*rxy);
-   } else {
-       *theta = 0.0;
-       *phi = (z != 0.0) ? atan2(z, rxy) : 0.0;
-       *td = 0.0;
-       *pd = 0.0;
-   }
-   *r = rtrue;
-   *rd = (rw != 0.0) ? (xyp + z*zd) / rw : 0.0;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPvdpv(double a[2][3], double b[2][3], double adb[2])
-/*
-**  - - - - - - - - -
-**   i a u P v d p v
-**  - - - - - - - - -
-**
-**  Inner (=scalar=dot) product of two pv-vectors.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a        double[2][3]      first pv-vector
-**     b        double[2][3]      second pv-vector
-**
-**  Returned:
-**     adb      double[2]         a . b (see note)
-**
-**  Note:
-**
-**     If the position and velocity components of the two pv-vectors are
-**     ( ap, av ) and ( bp, bv ), the result, a . b, is the pair of
-**     numbers ( ap . bp , ap . bv + av . bp ).  The two numbers are the
-**     dot-product of the two p-vectors and its derivative.
-**
-**  Called:
-**     iauPdp       scalar product of two p-vectors
-**
-**  This revision:  2008 May 22
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double adbd, addb;
-
-
-/* a . b = constant part of result. */
-   adb[0] = iauPdp(a[0], b[0]);
-
-/* a . bdot */
-   adbd = iauPdp(a[0], b[1]);
-
-/* adot . b */
-   addb = iauPdp(a[1], b[0]);
-
-/* Velocity part of result. */
-   adb[1] = adbd + addb;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPvm(double pv[2][3], double *r, double *s)
-/*
-**  - - - - - - -
-**   i a u P v m
-**  - - - - - - -
-**
-**  Modulus of pv-vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     pv     double[2][3]   pv-vector
-**
-**  Returned:
-**     r      double         modulus of position component
-**     s      double         modulus of velocity component
-**
-**  Called:
-**     iauPm        modulus of p-vector
-**
-**  This revision:  2008 May 22
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Distance. */
-   *r = iauPm(pv[0]);
-
-/* Speed. */
-   *s = iauPm(pv[1]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPvmpv(double a[2][3], double b[2][3], double amb[2][3])
-/*
-**  - - - - - - - - -
-**   i a u P v m p v
-**  - - - - - - - - -
-**
-**  Subtract one pv-vector from another.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a       double[2][3]      first pv-vector
-**     b       double[2][3]      second pv-vector
-**
-**  Returned:
-**     amb     double[2][3]      a - b
-**
-**  Note:
-**     It is permissible to re-use the same array for any of the
-**     arguments.
-**
-**  Called:
-**     iauPmp       p-vector minus p-vector
-**
-**  This revision:  2008 November 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauPmp(a[0], b[0], amb[0]);
-   iauPmp(a[1], b[1], amb[1]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPvppv(double a[2][3], double b[2][3], double apb[2][3])
-/*
-**  - - - - - - - - -
-**   i a u P v p p v
-**  - - - - - - - - -
-**
-**  Add one pv-vector to another.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a        double[2][3]      first pv-vector
-**     b        double[2][3]      second pv-vector
-**
-**  Returned:
-**     apb      double[2][3]      a + b
-**
-**  Note:
-**     It is permissible to re-use the same array for any of the
-**     arguments.
-**
-**  Called:
-**     iauPpp       p-vector plus p-vector
-**
-**  This revision:  2008 November 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauPpp(a[0], b[0], apb[0]);
-   iauPpp(a[1], b[1], apb[1]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauPvstar(double pv[2][3], double *ra, double *dec,
-              double *pmr, double *pmd, double *px, double *rv)
-/*
-**  - - - - - - - - - -
-**   i a u P v s t a r
-**  - - - - - - - - - -
-**
-**  Convert star position+velocity vector to catalog coordinates.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given (Note 1):
-**     pv     double[2][3]   pv-vector (AU, AU/day)
-**
-**  Returned (Note 2):
-**     ra     double         right ascension (radians)
-**     dec    double         declination (radians)
-**     pmr    double         RA proper motion (radians/year)
-**     pmd    double         Dec proper motion (radians/year)
-**     px     double         parallax (arcsec)
-**     rv     double         radial velocity (km/s, positive = receding)
-**
-**  Returned (function value):
-**            int            status:
-**                              0 = OK
-**                             -1 = superluminal speed (Note 5)
-**                             -2 = null position vector
-**
-**  Notes:
-**
-**  1) The specified pv-vector is the coordinate direction (and its rate
-**     of change) for the date at which the light leaving the star
-**     reached the solar-system barycenter.
-**
-**  2) The star data returned by this function are "observables" for an
-**     imaginary observer at the solar-system barycenter.  Proper motion
-**     and radial velocity are, strictly, in terms of barycentric
-**     coordinate time, TCB.  For most practical applications, it is
-**     permissible to neglect the distinction between TCB and ordinary
-**     "proper" time on Earth (TT/TAI).  The result will, as a rule, be
-**     limited by the intrinsic accuracy of the proper-motion and
-**     radial-velocity data;  moreover, the supplied pv-vector is likely
-**     to be merely an intermediate result (for example generated by the
-**     function iauStarpv), so that a change of time unit will cancel
-**     out overall.
-**
-**     In accordance with normal star-catalog conventions, the object's
-**     right ascension and declination are freed from the effects of
-**     secular aberration.  The frame, which is aligned to the catalog
-**     equator and equinox, is Lorentzian and centered on the SSB.
-**
-**     Summarizing, the specified pv-vector is for most stars almost
-**     identical to the result of applying the standard geometrical
-**     "space motion" transformation to the catalog data.  The
-**     differences, which are the subject of the Stumpff paper cited
-**     below, are:
-**
-**     (i) In stars with significant radial velocity and proper motion,
-**     the constantly changing light-time distorts the apparent proper
-**     motion.  Note that this is a classical, not a relativistic,
-**     effect.
-**
-**     (ii) The transformation complies with special relativity.
-**
-**  3) Care is needed with units.  The star coordinates are in radians
-**     and the proper motions in radians per Julian year, but the
-**     parallax is in arcseconds; the radial velocity is in km/s, but
-**     the pv-vector result is in AU and AU/day.
-**
-**  4) The proper motions are the rate of change of the right ascension
-**     and declination at the catalog epoch and are in radians per Julian
-**     year.  The RA proper motion is in terms of coordinate angle, not
-**     true angle, and will thus be numerically larger at high
-**     declinations.
-**
-**  5) Straight-line motion at constant speed in the inertial frame is
-**     assumed.  If the speed is greater than or equal to the speed of
-**     light, the function aborts with an error status.
-**
-**  6) The inverse transformation is performed by the function iauStarpv.
-**
-**  Called:
-**     iauPn        decompose p-vector into modulus and direction
-**     iauPdp       scalar product of two p-vectors
-**     iauSxp       multiply p-vector by scalar
-**     iauPmp       p-vector minus p-vector
-**     iauPm        modulus of p-vector
-**     iauPpp       p-vector plus p-vector
-**     iauPv2s      pv-vector to spherical
-**     iauAnp       normalize angle into range 0 to 2pi
-**
-**  Reference:
-**
-**     Stumpff, P., 1985, Astron.Astrophys. 144, 232-240.
-**
-**  This revision:  2008 May 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double r, x[3], vr, ur[3], vt, ut[3], bett, betr, d, w, del,
-          usr[3], ust[3], a, rad, decd, rd;
-
-
-/* Isolate the radial component of the velocity (AU/day, inertial). */
-   iauPn(pv[0], &r, x);
-   vr = iauPdp(x, pv[1]);
-   iauSxp(vr, x, ur);
-
-/* Isolate the transverse component of the velocity (AU/day, inertial). */
-   iauPmp(pv[1], ur, ut);
-   vt = iauPm(ut);
-
-/* Special-relativity dimensionless parameters. */
-   bett = vt / DC;
-   betr = vr / DC;
-
-/* The inertial-to-observed correction terms. */
-   d = 1.0 + betr;
-   w = 1.0 - betr*betr - bett*bett;
-   if (d == 0.0 || w < 0) return -1;
-   del = sqrt(w) - 1.0;
-
-/* Apply relativistic correction factor to radial velocity component. */
-   w = (betr != 0) ? (betr - del) / (betr * d) : 1.0;
-   iauSxp(w, ur, usr);
-
-/* Apply relativistic correction factor to tangential velocity */
-/* component.                                                  */
-   iauSxp(1.0/d, ut, ust);
-
-/* Combine the two to obtain the observed velocity vector (AU/day). */
-   iauPpp(usr, ust, pv[1]);
-
-/* Cartesian to spherical. */
-   iauPv2s(pv, &a, dec, &r, &rad, &decd, &rd);
-   if (r == 0.0) return -2;
-
-/* Return RA in range 0 to 2pi. */
-   *ra = iauAnp(a);
-
-/* Return proper motions in radians per year. */
-   *pmr = rad * DJY;
-   *pmd = decd * DJY;
-
-/* Return parallax in arcsec. */
-   *px = DR2AS / r;
-
-/* Return radial velocity in km/s. */
-   *rv = 1e-3 * rd * DAU / DAYSEC;
-
-/* OK status. */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPvu(double dt, double pv[2][3], double upv[2][3])
-/*
-**  - - - - - - -
-**   i a u P v u
-**  - - - - - - -
-**
-**  Update a pv-vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     dt       double           time interval
-**     pv       double[2][3]     pv-vector
-**
-**  Returned:
-**     upv      double[2][3]     p updated, v unchanged
-**
-**  Notes:
-**
-**  1) "Update" means "refer the position component of the vector
-**     to a new date dt time units from the existing date".
-**
-**  2) The time units of dt must match those of the velocity.
-**
-**  3) It is permissible for pv and upv to be the same array.
-**
-**  Called:
-**     iauPpsp      p-vector plus scaled p-vector
-**     iauCp        copy p-vector
-**
-**  This revision:  2008 November 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauPpsp(pv[0], dt, pv[1], upv[0]);
-   iauCp(pv[1], upv[1]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPvup(double dt, double pv[2][3], double p[3])
-/*
-**  - - - - - - - -
-**   i a u P v u p
-**  - - - - - - - -
-**
-**  Update a pv-vector, discarding the velocity component.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     dt       double            time interval
-**     pv       double[2][3]      pv-vector
-**
-**  Returned:
-**     p        double[3]         p-vector
-**
-**  Notes:
-**
-**  1) "Update" means "refer the position component of the vector to a
-**     new date dt time units from the existing date".
-**
-**  2) The time units of dt must match those of the velocity.
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   p[0] = pv[0][0] + dt * pv[1][0];
-   p[1] = pv[0][1] + dt * pv[1][1];
-   p[2] = pv[0][2] + dt * pv[1][2];
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPvxpv(double a[2][3], double b[2][3], double axb[2][3])
-/*
-**  - - - - - - - - -
-**   i a u P v x p v
-**  - - - - - - - - -
-**
-**  Outer (=vector=cross) product of two pv-vectors.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a        double[2][3]      first pv-vector
-**     b        double[2][3]      second pv-vector
-**
-**  Returned:
-**     axb      double[2][3]      a x b
-**
-**  Notes:
-**
-**  1) If the position and velocity components of the two pv-vectors are
-**     ( ap, av ) and ( bp, bv ), the result, a x b, is the pair of
-**     vectors ( ap x bp, ap x bv + av x bp ).  The two vectors are the
-**     cross-product of the two p-vectors and its derivative.
-**
-**  2) It is permissible to re-use the same array for any of the
-**     arguments.
-**
-**  Called:
-**     iauCpv       copy pv-vector
-**     iauPxp       vector product of two p-vectors
-**     iauPpp       p-vector plus p-vector
-**
-**  This revision:  2008 November 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double wa[2][3], wb[2][3], axbd[3], adxb[3];
-
-
-/* Make copies of the inputs. */
-   iauCpv(a, wa);
-   iauCpv(b, wb);
-
-/* a x b = position part of result. */
-   iauPxp(wa[0], wb[0], axb[0]);
-
-/* a x bdot + adot x b = velocity part of result. */
-   iauPxp(wa[0], wb[1], axbd);
-   iauPxp(wa[1], wb[0], adxb);
-   iauPpp(axbd, adxb, axb[1]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauPxp(double a[3], double b[3], double axb[3])
-/*
-**  - - - - - - -
-**   i a u P x p
-**  - - - - - - -
-**
-**  p-vector outer (=vector=cross) product.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a        double[3]      first p-vector
-**     b        double[3]      second p-vector
-**
-**  Returned:
-**     axb      double[3]      a x b
-**
-**  Note:
-**     It is permissible to re-use the same array for any of the
-**     arguments.
-**
-**  This revision:  2008 November 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double xa, ya, za, xb, yb, zb;
-
-
-   xa = a[0];
-   ya = a[1];
-   za = a[2];
-   xb = b[0];
-   yb = b[1];
-   zb = b[2];
-   axb[0] = ya*zb - za*yb;
-   axb[1] = za*xb - xa*zb;
-   axb[2] = xa*yb - ya*xb;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauRm2v(double r[3][3], double w[3])
-/*
-**  - - - - - - - -
-**   i a u R m 2 v
-**  - - - - - - - -
-**
-**  Express an r-matrix as an r-vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     r        double[3][3]    rotation matrix
-**
-**  Returned:
-**     w        double[3]       rotation vector (Note 1)
-**
-**  Notes:
-**
-**  1) A rotation matrix describes a rotation through some angle about
-**     some arbitrary axis called the Euler axis.  The "rotation vector"
-**     returned by this function has the same direction as the Euler axis,
-**     and its magnitude is the angle in radians.  (The magnitude and
-**     direction can be separated by means of the function iauPn.)
-**
-**  2) If r is null, so is the result.  If r is not a rotation matrix
-**     the result is undefined;  r must be proper (i.e. have a positive
-**     determinant) and real orthogonal (inverse = transpose).
-**
-**  3) The reference frame rotates clockwise as seen looking along
-**     the rotation vector from the origin.
-**
-**  This revision:  2010 August 27
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double x, y, z, s2, c2, phi, f;
-
-
-   x = r[1][2] - r[2][1];
-   y = r[2][0] - r[0][2];
-   z = r[0][1] - r[1][0];
-   s2 = sqrt(x*x + y*y + z*z);
-   if (s2 != 0) {
-      c2 = r[0][0] + r[1][1] + r[2][2] - 1.0;
-      phi = atan2(s2, c2);
-      f =  phi / s2;
-      w[0] = x * f;
-      w[1] = y * f;
-      w[2] = z * f;
-   } else {
-      w[0] = 0.0;
-      w[1] = 0.0;
-      w[2] = 0.0;
-   }
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauRv2m(double w[3], double r[3][3])
-/*
-**  - - - - - - - -
-**   i a u R v 2 m
-**  - - - - - - - -
-**
-**  Form the r-matrix corresponding to a given r-vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     w        double[3]      rotation vector (Note 1)
-**
-**  Returned:
-**     r        double[3][3]    rotation matrix
-**
-**  Notes:
-**
-**  1) A rotation matrix describes a rotation through some angle about
-**     some arbitrary axis called the Euler axis.  The "rotation vector"
-**     supplied to This function has the same direction as the Euler
-**     axis, and its magnitude is the angle in radians.
-**
-**  2) If w is null, the unit matrix is returned.
-**
-**  3) The reference frame rotates clockwise as seen looking along the
-**     rotation vector from the origin.
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double x, y, z, phi, s, c, f;
-
-
-/* Euler angle (magnitude of rotation vector) and functions. */
-   x = w[0];
-   y = w[1];
-   z = w[2];
-   phi = sqrt(x*x + y*y + z*z);
-   s = sin(phi);
-   c = cos(phi);
-   f = 1.0 - c;
-
-/* Euler axis (direction of rotation vector), perhaps null. */
-   if (phi != 0.0) {
-       x /= phi;
-       y /= phi;
-       z /= phi;
-   }
-
-/* Form the rotation matrix. */
-   r[0][0] = x*x*f + c;
-   r[0][1] = x*y*f + z*s;
-   r[0][2] = x*z*f - y*s;
-   r[1][0] = y*x*f - z*s;
-   r[1][1] = y*y*f + c;
-   r[1][2] = y*z*f + x*s;
-   r[2][0] = z*x*f + y*s;
-   r[2][1] = z*y*f - x*s;
-   r[2][2] = z*z*f + c;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauRx(double phi, double r[3][3])
-/*
-**  - - - - - -
-**   i a u R x
-**  - - - - - -
-**
-**  Rotate an r-matrix about the x-axis.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     phi    double          angle (radians)
-**
-**  Given and returned:
-**     r      double[3][3]    r-matrix
-**
-**  Sign convention:  The matrix can be used to rotate the reference
-**  frame of a vector.  Calling this function with positive phi
-**  incorporates in the matrix an additional rotation, about the x-axis,
-**  anticlockwise as seen looking towards the origin from positive x.
-**
-**  Called:
-**     iauIr        initialize r-matrix to identity
-**     iauRxr       product of two r-matrices
-**     iauCr        copy r-matrix
-**
-**  This revision:  2008 May 22
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double s, c, a[3][3], w[3][3];
-
-
-/* Matrix representing new rotation. */
-   s = sin(phi);
-   c = cos(phi);
-   iauIr(a);
-   a[1][1] =  c;
-   a[2][1] = -s;
-   a[1][2] =  s;
-   a[2][2] =  c;
-
-/* Rotate. */
-   iauRxr(a, r, w);
-
-/* Return result. */
-   iauCr(w, r);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauRxp(double r[3][3], double p[3], double rp[3])
-/*
-**  - - - - - - -
-**   i a u R x p
-**  - - - - - - -
-**
-**  Multiply a p-vector by an r-matrix.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     r        double[3][3]    r-matrix
-**     p        double[3]       p-vector
-**
-**  Returned:
-**     rp       double[3]       r * p
-**
-**  Note:
-**     It is permissible for p and rp to be the same array.
-**
-**  Called:
-**     iauCp        copy p-vector
-**
-**  This revision:  2008 October 28
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double w, wrp[3];
-   int i, j;
-
-
-/* Matrix r * vector p. */
-   for (j = 0; j < 3; j++) {
-       w = 0.0;
-       for (i = 0; i < 3; i++) {
-           w += r[j][i] * p[i];
-       }
-       wrp[j] = w;
-   }
-
-/* Return the result. */
-   iauCp(wrp, rp);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauRxpv(double r[3][3], double pv[2][3], double rpv[2][3])
-/*
-**  - - - - - - - -
-**   i a u R x p v
-**  - - - - - - - -
-**
-**  Multiply a pv-vector by an r-matrix.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     r        double[3][3]    r-matrix
-**     pv       double[2][3]    pv-vector
-**
-**  Returned:
-**     rpv      double[2][3]    r * pv
-**
-**  Note:
-**     It is permissible for pv and rpv to be the same array.
-**
-**  Called:
-**     iauRxp       product of r-matrix and p-vector
-**
-**  This revision:  2008 October 28
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauRxp(r, pv[0], rpv[0]);
-   iauRxp(r, pv[1], rpv[1]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauRxr(double a[3][3], double b[3][3], double atb[3][3])
-/*
-**  - - - - - - -
-**   i a u R x r
-**  - - - - - - -
-**
-**  Multiply two r-matrices.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a        double[3][3]    first r-matrix
-**     b        double[3][3]    second r-matrix
-**
-**  Returned:
-**     atb      double[3][3]    a * b
-**
-**  Note:
-**     It is permissible to re-use the same array for any of the
-**     arguments.
-**
-**  Called:
-**     iauCr        copy r-matrix
-**
-**  This revision:  2008 November 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int i, j, k;
-   double w, wm[3][3];
-
-
-   for (i = 0; i < 3; i++) {
-      for (j = 0; j < 3; j++) {
-         w = 0.0;
-         for (k = 0; k < 3; k++) {
-            w +=  a[i][k] * b[k][j];
-         }
-         wm[i][j] = w;
-      }
-   }
-   iauCr(wm, atb);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauRy(double theta, double r[3][3])
-/*
-**  - - - - - -
-**   i a u R y
-**  - - - - - -
-**
-**  Rotate an r-matrix about the y-axis.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     theta  double          angle (radians)
-**
-**  Given and returned:
-**     r      double[3][3]    r-matrix
-**
-**  Sign convention:  The matrix can be used to rotate the reference
-**  frame of a vector.  Calling This function with positive theta
-**  incorporates in the matrix an additional rotation, about the y-axis,
-**  anticlockwise as seen looking towards the origin from positive y.
-**
-**  Called:
-**     iauIr        initialize r-matrix to identity
-**     iauRxr       product of two r-matrices
-**     iauCr        copy r-matrix
-**
-**  This revision:  2008 May 22
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double s, c, a[3][3], w[3][3];
-
-
-/* Matrix representing new rotation. */
-   s = sin(theta);
-   c = cos(theta);
-   iauIr(a);
-   a[0][0] =  c;
-   a[2][0] =  s;
-   a[0][2] = -s;
-   a[2][2] =  c;
-
-/* Rotate. */
-   iauRxr(a, r, w);
-
-/* Return result. */
-   iauCr(w, r);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauRz(double psi, double r[3][3])
-/*
-**  - - - - - -
-**   i a u R z
-**  - - - - - -
-**
-**  Rotate an r-matrix about the z-axis.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     psi    double          angle (radians)
-**
-**  Given and returned:
-**     r      double[3][3]    r-matrix, rotated
-**
-**  Sign convention:  The matrix can be used to rotate the reference
-**  frame of a vector.  Calling This function with positive psi
-**  incorporates in the matrix an additional rotation, about the z-axis,
-**  anticlockwise as seen looking towards the origin from positive z.
-**
-**  Called:
-**     iauIr        initialize r-matrix to identity
-**     iauRxr       product of two r-matrices
-**     iauCr        copy r-matrix
-**
-**  This revision:  2008 May 22
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double s, c, a[3][3], w[3][3];
-
-
-/* Matrix representing new rotation. */
-   s = sin(psi);
-   c = cos(psi);
-   iauIr(a);
-   a[0][0] =  c;
-   a[1][0] = -s;
-   a[0][1] =  s;
-   a[1][1] =  c;
-
-/* Rotate. */
-   iauRxr(a, r, w);
-
-/* Return result. */
-   iauCr(w, r);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauS00(double date1, double date2, double x, double y)
-/*
-**  - - - - - - -
-**   i a u S 0 0
-**  - - - - - - -
-**
-**  The CIO locator s, positioning the Celestial Intermediate Origin on
-**  the equator of the Celestial Intermediate Pole, given the CIP's X,Y
-**  coordinates.  Compatible with IAU 2000A precession-nutation.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2   double    TT as a 2-part Julian Date (Note 1)
-**     x,y           double    CIP coordinates (Note 3)
-**
-**  Returned (function value):
-**                   double    the CIO locator s in radians (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The CIO locator s is the difference between the right ascensions
-**     of the same point in two systems:  the two systems are the GCRS
-**     and the CIP,CIO, and the point is the ascending node of the
-**     CIP equator.  The quantity s remains below 0.1 arcsecond
-**     throughout 1900-2100.
-**
-**  3) The series used to compute s is in fact for s+XY/2, where X and Y
-**     are the x and y components of the CIP unit vector;  this series
-**     is more compact than a direct series for s would be.  This
-**     function requires X,Y to be supplied by the caller, who is
-**     responsible for providing values that are consistent with the
-**     supplied date.
-**
-**  4) The model is consistent with the IAU 2000A precession-nutation.
-**
-**  Called:
-**     iauFal03     mean anomaly of the Moon
-**     iauFalp03    mean anomaly of the Sun
-**     iauFaf03     mean argument of the latitude of the Moon
-**     iauFad03     mean elongation of the Moon from the Sun
-**     iauFaom03    mean longitude of the Moon's ascending node
-**     iauFave03    mean longitude of Venus
-**     iauFae03     mean longitude of Earth
-**     iauFapa03    general accumulated precession in longitude
-**
-**  References:
-**
-**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Time since J2000.0, in Julian centuries */
-   double t;
-
-/* Miscellaneous */
-   int i, j;
-   double a, w0, w1, w2, w3, w4, w5;
-
-/* Fundamental arguments */
-   double fa[8];
-
-/* Returned value */
-   double s;
-
-/* --------------------- */
-/* The series for s+XY/2 */
-/* --------------------- */
-
-   typedef struct {
-      int nfa[8];      /* coefficients of l,l',F,D,Om,LVe,LE,pA */
-      double s, c;     /* sine and cosine coefficients */
-   } TERM;
-
-/* Polynomial coefficients */
-   static const double sp[] = {
-
-   /* 1-6 */
-          94.00e-6,
-        3808.35e-6,
-        -119.94e-6,
-      -72574.09e-6,
-          27.70e-6,
-          15.61e-6
-   };
-
-/* Terms of order t^0 */
-   static const TERM s0[] = {
-
-   /* 1-10 */
-      {{ 0,  0,  0,  0,  1,  0,  0,  0}, -2640.73e-6,   0.39e-6 },
-      {{ 0,  0,  0,  0,  2,  0,  0,  0},   -63.53e-6,   0.02e-6 },
-      {{ 0,  0,  2, -2,  3,  0,  0,  0},   -11.75e-6,  -0.01e-6 },
-      {{ 0,  0,  2, -2,  1,  0,  0,  0},   -11.21e-6,  -0.01e-6 },
-      {{ 0,  0,  2, -2,  2,  0,  0,  0},     4.57e-6,   0.00e-6 },
-      {{ 0,  0,  2,  0,  3,  0,  0,  0},    -2.02e-6,   0.00e-6 },
-      {{ 0,  0,  2,  0,  1,  0,  0,  0},    -1.98e-6,   0.00e-6 },
-      {{ 0,  0,  0,  0,  3,  0,  0,  0},     1.72e-6,   0.00e-6 },
-      {{ 0,  1,  0,  0,  1,  0,  0,  0},     1.41e-6,   0.01e-6 },
-      {{ 0,  1,  0,  0, -1,  0,  0,  0},     1.26e-6,   0.01e-6 },
-
-   /* 11-20 */
-      {{ 1,  0,  0,  0, -1,  0,  0,  0},     0.63e-6,   0.00e-6 },
-      {{ 1,  0,  0,  0,  1,  0,  0,  0},     0.63e-6,   0.00e-6 },
-      {{ 0,  1,  2, -2,  3,  0,  0,  0},    -0.46e-6,   0.00e-6 },
-      {{ 0,  1,  2, -2,  1,  0,  0,  0},    -0.45e-6,   0.00e-6 },
-      {{ 0,  0,  4, -4,  4,  0,  0,  0},    -0.36e-6,   0.00e-6 },
-      {{ 0,  0,  1, -1,  1, -8, 12,  0},     0.24e-6,   0.12e-6 },
-      {{ 0,  0,  2,  0,  0,  0,  0,  0},    -0.32e-6,   0.00e-6 },
-      {{ 0,  0,  2,  0,  2,  0,  0,  0},    -0.28e-6,   0.00e-6 },
-      {{ 1,  0,  2,  0,  3,  0,  0,  0},    -0.27e-6,   0.00e-6 },
-      {{ 1,  0,  2,  0,  1,  0,  0,  0},    -0.26e-6,   0.00e-6 },
-
-   /* 21-30 */
-      {{ 0,  0,  2, -2,  0,  0,  0,  0},     0.21e-6,   0.00e-6 },
-      {{ 0,  1, -2,  2, -3,  0,  0,  0},    -0.19e-6,   0.00e-6 },
-      {{ 0,  1, -2,  2, -1,  0,  0,  0},    -0.18e-6,   0.00e-6 },
-      {{ 0,  0,  0,  0,  0,  8,-13, -1},     0.10e-6,  -0.05e-6 },
-      {{ 0,  0,  0,  2,  0,  0,  0,  0},    -0.15e-6,   0.00e-6 },
-      {{ 2,  0, -2,  0, -1,  0,  0,  0},     0.14e-6,   0.00e-6 },
-      {{ 0,  1,  2, -2,  2,  0,  0,  0},     0.14e-6,   0.00e-6 },
-      {{ 1,  0,  0, -2,  1,  0,  0,  0},    -0.14e-6,   0.00e-6 },
-      {{ 1,  0,  0, -2, -1,  0,  0,  0},    -0.14e-6,   0.00e-6 },
-      {{ 0,  0,  4, -2,  4,  0,  0,  0},    -0.13e-6,   0.00e-6 },
-
-   /* 31-33 */
-      {{ 0,  0,  2, -2,  4,  0,  0,  0},     0.11e-6,   0.00e-6 },
-      {{ 1,  0, -2,  0, -3,  0,  0,  0},    -0.11e-6,   0.00e-6 },
-      {{ 1,  0, -2,  0, -1,  0,  0,  0},    -0.11e-6,   0.00e-6 }
-   };
-
-/* Terms of order t^1 */
-   static const TERM s1[] ={
-
-   /* 1-3 */
-      {{ 0,  0,  0,  0,  2,  0,  0,  0},    -0.07e-6,   3.57e-6 },
-      {{ 0,  0,  0,  0,  1,  0,  0,  0},     1.71e-6,  -0.03e-6 },
-      {{ 0,  0,  2, -2,  3,  0,  0,  0},     0.00e-6,   0.48e-6 }
-   };
-
-/* Terms of order t^2 */
-   static const TERM s2[] ={
-
-   /* 1-10 */
-      {{ 0,  0,  0,  0,  1,  0,  0,  0},   743.53e-6,  -0.17e-6 },
-      {{ 0,  0,  2, -2,  2,  0,  0,  0},    56.91e-6,   0.06e-6 },
-      {{ 0,  0,  2,  0,  2,  0,  0,  0},     9.84e-6,  -0.01e-6 },
-      {{ 0,  0,  0,  0,  2,  0,  0,  0},    -8.85e-6,   0.01e-6 },
-      {{ 0,  1,  0,  0,  0,  0,  0,  0},    -6.38e-6,  -0.05e-6 },
-      {{ 1,  0,  0,  0,  0,  0,  0,  0},    -3.07e-6,   0.00e-6 },
-      {{ 0,  1,  2, -2,  2,  0,  0,  0},     2.23e-6,   0.00e-6 },
-      {{ 0,  0,  2,  0,  1,  0,  0,  0},     1.67e-6,   0.00e-6 },
-      {{ 1,  0,  2,  0,  2,  0,  0,  0},     1.30e-6,   0.00e-6 },
-      {{ 0,  1, -2,  2, -2,  0,  0,  0},     0.93e-6,   0.00e-6 },
-
-   /* 11-20 */
-      {{ 1,  0,  0, -2,  0,  0,  0,  0},     0.68e-6,   0.00e-6 },
-      {{ 0,  0,  2, -2,  1,  0,  0,  0},    -0.55e-6,   0.00e-6 },
-      {{ 1,  0, -2,  0, -2,  0,  0,  0},     0.53e-6,   0.00e-6 },
-      {{ 0,  0,  0,  2,  0,  0,  0,  0},    -0.27e-6,   0.00e-6 },
-      {{ 1,  0,  0,  0,  1,  0,  0,  0},    -0.27e-6,   0.00e-6 },
-      {{ 1,  0, -2, -2, -2,  0,  0,  0},    -0.26e-6,   0.00e-6 },
-      {{ 1,  0,  0,  0, -1,  0,  0,  0},    -0.25e-6,   0.00e-6 },
-      {{ 1,  0,  2,  0,  1,  0,  0,  0},     0.22e-6,   0.00e-6 },
-      {{ 2,  0,  0, -2,  0,  0,  0,  0},    -0.21e-6,   0.00e-6 },
-      {{ 2,  0, -2,  0, -1,  0,  0,  0},     0.20e-6,   0.00e-6 },
-
-   /* 21-25 */
-      {{ 0,  0,  2,  2,  2,  0,  0,  0},     0.17e-6,   0.00e-6 },
-      {{ 2,  0,  2,  0,  2,  0,  0,  0},     0.13e-6,   0.00e-6 },
-      {{ 2,  0,  0,  0,  0,  0,  0,  0},    -0.13e-6,   0.00e-6 },
-      {{ 1,  0,  2, -2,  2,  0,  0,  0},    -0.12e-6,   0.00e-6 },
-      {{ 0,  0,  2,  0,  0,  0,  0,  0},    -0.11e-6,   0.00e-6 }
-   };
-
-/* Terms of order t^3 */
-   static const TERM s3[] ={
-
-   /* 1-4 */
-      {{ 0,  0,  0,  0,  1,  0,  0,  0},     0.30e-6, -23.51e-6 },
-      {{ 0,  0,  2, -2,  2,  0,  0,  0},    -0.03e-6,  -1.39e-6 },
-      {{ 0,  0,  2,  0,  2,  0,  0,  0},    -0.01e-6,  -0.24e-6 },
-      {{ 0,  0,  0,  0,  2,  0,  0,  0},     0.00e-6,   0.22e-6 }
-   };
-
-/* Terms of order t^4 */
-   static const TERM s4[] ={
-
-   /* 1-1 */
-      {{ 0,  0,  0,  0,  1,  0,  0,  0},    -0.26e-6,  -0.01e-6 }
-   };
-
-/* Number of terms in the series */
-   const int NS0 = (int) (sizeof s0 / sizeof (TERM));
-   const int NS1 = (int) (sizeof s1 / sizeof (TERM));
-   const int NS2 = (int) (sizeof s2 / sizeof (TERM));
-   const int NS3 = (int) (sizeof s3 / sizeof (TERM));
-   const int NS4 = (int) (sizeof s4 / sizeof (TERM));
-
-/*--------------------------------------------------------------------*/
-
-/* Interval between fundamental epoch J2000.0 and current date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Fundamental Arguments (from IERS Conventions 2003) */
-
-/* Mean anomaly of the Moon. */
-   fa[0] = iauFal03(t);
-
-/* Mean anomaly of the Sun. */
-   fa[1] = iauFalp03(t);
-
-/* Mean longitude of the Moon minus that of the ascending node. */
-   fa[2] = iauFaf03(t);
-
-/* Mean elongation of the Moon from the Sun. */
-   fa[3] = iauFad03(t);
-
-/* Mean longitude of the ascending node of the Moon. */
-   fa[4] = iauFaom03(t);
-
-/* Mean longitude of Venus. */
-   fa[5] = iauFave03(t);
-
-/* Mean longitude of Earth. */
-   fa[6] = iauFae03(t);
-
-/* General precession in longitude. */
-   fa[7] = iauFapa03(t);
-
-/* Evaluate s. */
-   w0 = sp[0];
-   w1 = sp[1];
-   w2 = sp[2];
-   w3 = sp[3];
-   w4 = sp[4];
-   w5 = sp[5];
-
-   for (i = NS0-1; i >= 0; i--) {
-   a = 0.0;
-   for (j = 0; j < 8; j++) {
-       a += (double)s0[i].nfa[j] * fa[j];
-   }
-   w0 += s0[i].s * sin(a) + s0[i].c * cos(a);
-   }
-
-   for (i = NS1-1; i >= 0; i--) {
-   a = 0.0;
-   for (j = 0; j < 8; j++) {
-       a += (double)s1[i].nfa[j] * fa[j];
-   }
-   w1 += s1[i].s * sin(a) + s1[i].c * cos(a);
-   }
-
-   for (i = NS2-1; i >= 0; i--) {
-   a = 0.0;
-   for (j = 0; j < 8; j++) {
-       a += (double)s2[i].nfa[j] * fa[j];
-   }
-   w2 += s2[i].s * sin(a) + s2[i].c * cos(a);
-   }
-
-   for (i = NS3-1; i >= 0; i--) {
-   a = 0.0;
-   for (j = 0; j < 8; j++) {
-       a += (double)s3[i].nfa[j] * fa[j];
-   }
-   w3 += s3[i].s * sin(a) + s3[i].c * cos(a);
-   }
-
-   for (i = NS4-1; i >= 0; i--) {
-   a = 0.0;
-   for (j = 0; j < 8; j++) {
-       a += (double)s4[i].nfa[j] * fa[j];
-   }
-   w4 += s4[i].s * sin(a) + s4[i].c * cos(a);
-   }
-
-   s = (w0 +
-       (w1 +
-       (w2 +
-       (w3 +
-       (w4 +
-        w5 * t) * t) * t) * t) * t) * DAS2R - x*y/2.0;
-
-   return s;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauS00a(double date1, double date2)
-/*
-**  - - - - - - - -
-**   i a u S 0 0 a
-**  - - - - - - - -
-**
-**  The CIO locator s, positioning the Celestial Intermediate Origin on
-**  the equator of the Celestial Intermediate Pole, using the IAU 2000A
-**  precession-nutation model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (function value):
-**                  double    the CIO locator s in radians (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The CIO locator s is the difference between the right ascensions
-**     of the same point in two systems.  The two systems are the GCRS
-**     and the CIP,CIO, and the point is the ascending node of the
-**     CIP equator.  The CIO locator s remains a small fraction of
-**     1 arcsecond throughout 1900-2100.
-**
-**  3) The series used to compute s is in fact for s+XY/2, where X and Y
-**     are the x and y components of the CIP unit vector;  this series
-**     is more compact than a direct series for s would be.  The present
-**     function uses the full IAU 2000A nutation model when predicting
-**     the CIP position.  Faster results, with no significant loss of
-**     accuracy, can be obtained via the function iauS00b, which uses
-**     instead the IAU 2000B truncated model.
-**
-**  Called:
-**     iauPnm00a     classical NPB matrix, IAU 2000A
-**     iauBnp2xy     extract CIP X,Y from the BPN matrix
-**     iauS00        the CIO locator s, given X,Y, IAU 2000A
-**
-**  References:
-**
-**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rbpn[3][3], x, y, s;
-
-
-/* Bias-precession-nutation-matrix, IAU 2000A. */
-   iauPnm00a(date1, date2, rbpn);
-
-/* Extract the CIP coordinates. */
-   iauBpn2xy(rbpn, &x, &y);
-
-/* Compute the CIO locator s, given the CIP coordinates. */
-   s = iauS00(date1, date2, x, y);
-
-   return s;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauS00b(double date1, double date2)
-/*
-**  - - - - - - - -
-**   i a u S 0 0 b
-**  - - - - - - - -
-**
-**  The CIO locator s, positioning the Celestial Intermediate Origin on
-**  the equator of the Celestial Intermediate Pole, using the IAU 2000B
-**  precession-nutation model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (function value):
-**                  double    the CIO locator s in radians (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The CIO locator s is the difference between the right ascensions
-**     of the same point in two systems.  The two systems are the GCRS
-**     and the CIP,CIO, and the point is the ascending node of the
-**     CIP equator.  The CIO locator s remains a small fraction of
-**     1 arcsecond throughout 1900-2100.
-**
-**  3) The series used to compute s is in fact for s+XY/2, where X and Y
-**     are the x and y components of the CIP unit vector;  this series
-**     is more compact than a direct series for s would be.  The present
-**     function uses the IAU 2000B truncated nutation model when
-**     predicting the CIP position.  The function iauS00a uses instead
-**     the full IAU 2000A model, but with no significant increase in
-**     accuracy and at some cost in speed.
-**
-**  Called:
-**     iauPnm00b     classical NPB matrix, IAU 2000B
-**     iauBnp2xy     extract CIP X,Y from the BPN matrix
-**     iauS00        the CIO locator s, given X,Y, IAU 2000A
-**
-**  References:
-**
-**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rbpn[3][3], x, y, s;
-
-
-/* Bias-precession-nutation-matrix, IAU 2000B. */
-   iauPnm00b(date1, date2, rbpn);
-
-/* Extract the CIP coordinates. */
-   iauBpn2xy(rbpn, &x, &y);
-
-/* Compute the CIO locator s, given the CIP coordinates. */
-   s = iauS00(date1, date2, x, y);
-
-   return s;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauS06(double date1, double date2, double x, double y)
-/*
-**  - - - - - - -
-**   i a u S 0 6
-**  - - - - - - -
-**
-**  The CIO locator s, positioning the Celestial Intermediate Origin on
-**  the equator of the Celestial Intermediate Pole, given the CIP's X,Y
-**  coordinates.  Compatible with IAU 2006/2000A precession-nutation.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2   double    TT as a 2-part Julian Date (Note 1)
-**     x,y           double    CIP coordinates (Note 3)
-**
-**  Returned (function value):
-**                   double    the CIO locator s in radians (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The CIO locator s is the difference between the right ascensions
-**     of the same point in two systems:  the two systems are the GCRS
-**     and the CIP,CIO, and the point is the ascending node of the
-**     CIP equator.  The quantity s remains below 0.1 arcsecond
-**     throughout 1900-2100.
-**
-**  3) The series used to compute s is in fact for s+XY/2, where X and Y
-**     are the x and y components of the CIP unit vector;  this series
-**     is more compact than a direct series for s would be.  This
-**     function requires X,Y to be supplied by the caller, who is
-**     responsible for providing values that are consistent with the
-**     supplied date.
-**
-**  4) The model is consistent with the "P03" precession (Capitaine et
-**     al. 2003), adopted by IAU 2006 Resolution 1, 2006, and the
-**     IAU 2000A nutation (with P03 adjustments).
-**
-**  Called:
-**     iauFal03     mean anomaly of the Moon
-**     iauFalp03    mean anomaly of the Sun
-**     iauFaf03     mean argument of the latitude of the Moon
-**     iauFad03     mean elongation of the Moon from the Sun
-**     iauFaom03    mean longitude of the Moon's ascending node
-**     iauFave03    mean longitude of Venus
-**     iauFae03     mean longitude of Earth
-**     iauFapa03    general accumulated precession in longitude
-**
-**  References:
-**
-**     Capitaine, N., Wallace, P.T. & Chapront, J., 2003, Astron.
-**     Astrophys. 432, 355
-**
-**     McCarthy, D.D., Petit, G. (eds.) 2004, IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG
-**
-**  This revision:  2009 December 17
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Time since J2000.0, in Julian centuries */
-   double t;
-
-/* Miscellaneous */
-   int i, j;
-   double a, w0, w1, w2, w3, w4, w5;
-
-/* Fundamental arguments */
-   double fa[8];
-
-/* Returned value */
-   double s;
-
-/* --------------------- */
-/* The series for s+XY/2 */
-/* --------------------- */
-
-   typedef struct {
-      int nfa[8];      /* coefficients of l,l',F,D,Om,LVe,LE,pA */
-      double s, c;     /* sine and cosine coefficients */
-   } TERM;
-
-/* Polynomial coefficients */
-   static const double sp[] = {
-
-   /* 1-6 */
-          94.00e-6,
-        3808.65e-6,
-        -122.68e-6,
-      -72574.11e-6,
-          27.98e-6,
-          15.62e-6
-   };
-
-/* Terms of order t^0 */
-   static const TERM s0[] = {
-
-   /* 1-10 */
-      {{ 0,  0,  0,  0,  1,  0,  0,  0}, -2640.73e-6,   0.39e-6 },
-      {{ 0,  0,  0,  0,  2,  0,  0,  0},   -63.53e-6,   0.02e-6 },
-      {{ 0,  0,  2, -2,  3,  0,  0,  0},   -11.75e-6,  -0.01e-6 },
-      {{ 0,  0,  2, -2,  1,  0,  0,  0},   -11.21e-6,  -0.01e-6 },
-      {{ 0,  0,  2, -2,  2,  0,  0,  0},     4.57e-6,   0.00e-6 },
-      {{ 0,  0,  2,  0,  3,  0,  0,  0},    -2.02e-6,   0.00e-6 },
-      {{ 0,  0,  2,  0,  1,  0,  0,  0},    -1.98e-6,   0.00e-6 },
-      {{ 0,  0,  0,  0,  3,  0,  0,  0},     1.72e-6,   0.00e-6 },
-      {{ 0,  1,  0,  0,  1,  0,  0,  0},     1.41e-6,   0.01e-6 },
-      {{ 0,  1,  0,  0, -1,  0,  0,  0},     1.26e-6,   0.01e-6 },
-
-   /* 11-20 */
-      {{ 1,  0,  0,  0, -1,  0,  0,  0},     0.63e-6,   0.00e-6 },
-      {{ 1,  0,  0,  0,  1,  0,  0,  0},     0.63e-6,   0.00e-6 },
-      {{ 0,  1,  2, -2,  3,  0,  0,  0},    -0.46e-6,   0.00e-6 },
-      {{ 0,  1,  2, -2,  1,  0,  0,  0},    -0.45e-6,   0.00e-6 },
-      {{ 0,  0,  4, -4,  4,  0,  0,  0},    -0.36e-6,   0.00e-6 },
-      {{ 0,  0,  1, -1,  1, -8, 12,  0},     0.24e-6,   0.12e-6 },
-      {{ 0,  0,  2,  0,  0,  0,  0,  0},    -0.32e-6,   0.00e-6 },
-      {{ 0,  0,  2,  0,  2,  0,  0,  0},    -0.28e-6,   0.00e-6 },
-      {{ 1,  0,  2,  0,  3,  0,  0,  0},    -0.27e-6,   0.00e-6 },
-      {{ 1,  0,  2,  0,  1,  0,  0,  0},    -0.26e-6,   0.00e-6 },
-
-   /* 21-30 */
-      {{ 0,  0,  2, -2,  0,  0,  0,  0},     0.21e-6,   0.00e-6 },
-      {{ 0,  1, -2,  2, -3,  0,  0,  0},    -0.19e-6,   0.00e-6 },
-      {{ 0,  1, -2,  2, -1,  0,  0,  0},    -0.18e-6,   0.00e-6 },
-      {{ 0,  0,  0,  0,  0,  8,-13, -1},     0.10e-6,  -0.05e-6 },
-      {{ 0,  0,  0,  2,  0,  0,  0,  0},    -0.15e-6,   0.00e-6 },
-      {{ 2,  0, -2,  0, -1,  0,  0,  0},     0.14e-6,   0.00e-6 },
-      {{ 0,  1,  2, -2,  2,  0,  0,  0},     0.14e-6,   0.00e-6 },
-      {{ 1,  0,  0, -2,  1,  0,  0,  0},    -0.14e-6,   0.00e-6 },
-      {{ 1,  0,  0, -2, -1,  0,  0,  0},    -0.14e-6,   0.00e-6 },
-      {{ 0,  0,  4, -2,  4,  0,  0,  0},    -0.13e-6,   0.00e-6 },
-
-   /* 31-33 */
-      {{ 0,  0,  2, -2,  4,  0,  0,  0},     0.11e-6,   0.00e-6 },
-      {{ 1,  0, -2,  0, -3,  0,  0,  0},    -0.11e-6,   0.00e-6 },
-      {{ 1,  0, -2,  0, -1,  0,  0,  0},    -0.11e-6,   0.00e-6 }
-   };
-
-/* Terms of order t^1 */
-   static const TERM s1[] = {
-
-   /* 1 - 3 */
-      {{ 0,  0,  0,  0,  2,  0,  0,  0},    -0.07e-6,   3.57e-6 },
-      {{ 0,  0,  0,  0,  1,  0,  0,  0},     1.73e-6,  -0.03e-6 },
-      {{ 0,  0,  2, -2,  3,  0,  0,  0},     0.00e-6,   0.48e-6 }
-   };
-
-/* Terms of order t^2 */
-   static const TERM s2[] = {
-
-   /* 1-10 */
-      {{ 0,  0,  0,  0,  1,  0,  0,  0},   743.52e-6,  -0.17e-6 },
-      {{ 0,  0,  2, -2,  2,  0,  0,  0},    56.91e-6,   0.06e-6 },
-      {{ 0,  0,  2,  0,  2,  0,  0,  0},     9.84e-6,  -0.01e-6 },
-      {{ 0,  0,  0,  0,  2,  0,  0,  0},    -8.85e-6,   0.01e-6 },
-      {{ 0,  1,  0,  0,  0,  0,  0,  0},    -6.38e-6,  -0.05e-6 },
-      {{ 1,  0,  0,  0,  0,  0,  0,  0},    -3.07e-6,   0.00e-6 },
-      {{ 0,  1,  2, -2,  2,  0,  0,  0},     2.23e-6,   0.00e-6 },
-      {{ 0,  0,  2,  0,  1,  0,  0,  0},     1.67e-6,   0.00e-6 },
-      {{ 1,  0,  2,  0,  2,  0,  0,  0},     1.30e-6,   0.00e-6 },
-      {{ 0,  1, -2,  2, -2,  0,  0,  0},     0.93e-6,   0.00e-6 },
-
-   /* 11-20 */
-      {{ 1,  0,  0, -2,  0,  0,  0,  0},     0.68e-6,   0.00e-6 },
-      {{ 0,  0,  2, -2,  1,  0,  0,  0},    -0.55e-6,   0.00e-6 },
-      {{ 1,  0, -2,  0, -2,  0,  0,  0},     0.53e-6,   0.00e-6 },
-      {{ 0,  0,  0,  2,  0,  0,  0,  0},    -0.27e-6,   0.00e-6 },
-      {{ 1,  0,  0,  0,  1,  0,  0,  0},    -0.27e-6,   0.00e-6 },
-      {{ 1,  0, -2, -2, -2,  0,  0,  0},    -0.26e-6,   0.00e-6 },
-      {{ 1,  0,  0,  0, -1,  0,  0,  0},    -0.25e-6,   0.00e-6 },
-      {{ 1,  0,  2,  0,  1,  0,  0,  0},     0.22e-6,   0.00e-6 },
-      {{ 2,  0,  0, -2,  0,  0,  0,  0},    -0.21e-6,   0.00e-6 },
-      {{ 2,  0, -2,  0, -1,  0,  0,  0},     0.20e-6,   0.00e-6 },
-
-   /* 21-25 */
-      {{ 0,  0,  2,  2,  2,  0,  0,  0},     0.17e-6,   0.00e-6 },
-      {{ 2,  0,  2,  0,  2,  0,  0,  0},     0.13e-6,   0.00e-6 },
-      {{ 2,  0,  0,  0,  0,  0,  0,  0},    -0.13e-6,   0.00e-6 },
-      {{ 1,  0,  2, -2,  2,  0,  0,  0},    -0.12e-6,   0.00e-6 },
-      {{ 0,  0,  2,  0,  0,  0,  0,  0},    -0.11e-6,   0.00e-6 }
-   };
-
-/* Terms of order t^3 */
-   static const TERM s3[] = {
-
-   /* 1-4 */
-      {{ 0,  0,  0,  0,  1,  0,  0,  0},     0.30e-6, -23.42e-6 },
-      {{ 0,  0,  2, -2,  2,  0,  0,  0},    -0.03e-6,  -1.46e-6 },
-      {{ 0,  0,  2,  0,  2,  0,  0,  0},    -0.01e-6,  -0.25e-6 },
-      {{ 0,  0,  0,  0,  2,  0,  0,  0},     0.00e-6,   0.23e-6 }
-   };
-
-/* Terms of order t^4 */
-   static const TERM s4[] = {
-
-   /* 1-1 */
-      {{ 0,  0,  0,  0,  1,  0,  0,  0},    -0.26e-6,  -0.01e-6 }
-   };
-
-/* Number of terms in the series */
-   static const int NS0 = (int) (sizeof s0 / sizeof (TERM));
-   static const int NS1 = (int) (sizeof s1 / sizeof (TERM));
-   static const int NS2 = (int) (sizeof s2 / sizeof (TERM));
-   static const int NS3 = (int) (sizeof s3 / sizeof (TERM));
-   static const int NS4 = (int) (sizeof s4 / sizeof (TERM));
-
-/*--------------------------------------------------------------------*/
-
-/* Interval between fundamental epoch J2000.0 and current date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Fundamental Arguments (from IERS Conventions 2003) */
-
-/* Mean anomaly of the Moon. */
-   fa[0] = iauFal03(t);
-
-/* Mean anomaly of the Sun. */
-   fa[1] = iauFalp03(t);
-
-/* Mean longitude of the Moon minus that of the ascending node. */
-   fa[2] = iauFaf03(t);
-
-/* Mean elongation of the Moon from the Sun. */
-   fa[3] = iauFad03(t);
-
-/* Mean longitude of the ascending node of the Moon. */
-   fa[4] = iauFaom03(t);
-
-/* Mean longitude of Venus. */
-   fa[5] = iauFave03(t);
-
-/* Mean longitude of Earth. */
-   fa[6] = iauFae03(t);
-
-/* General precession in longitude. */
-   fa[7] = iauFapa03(t);
-
-/* Evaluate s. */
-   w0 = sp[0];
-   w1 = sp[1];
-   w2 = sp[2];
-   w3 = sp[3];
-   w4 = sp[4];
-   w5 = sp[5];
-
-   for (i = NS0-1; i >= 0; i--) {
-   a = 0.0;
-   for (j = 0; j < 8; j++) {
-      a += (double)s0[i].nfa[j] * fa[j];
-   }
-   w0 += s0[i].s * sin(a) + s0[i].c * cos(a);
-   }
-
-   for (i = NS1-1; i >= 0; i--) {
-      a = 0.0;
-      for (j = 0; j < 8; j++) {
-         a += (double)s1[i].nfa[j] * fa[j];
-      }
-      w1 += s1[i].s * sin(a) + s1[i].c * cos(a);
-   }
-
-   for (i = NS2-1; i >= 0; i--) {
-      a = 0.0;
-      for (j = 0; j < 8; j++) {
-         a += (double)s2[i].nfa[j] * fa[j];
-      }
-      w2 += s2[i].s * sin(a) + s2[i].c * cos(a);
-   }
-
-   for (i = NS3-1; i >= 0; i--) {
-      a = 0.0;
-      for (j = 0; j < 8; j++) {
-         a += (double)s3[i].nfa[j] * fa[j];
-      }
-      w3 += s3[i].s * sin(a) + s3[i].c * cos(a);
-   }
-
-   for (i = NS4-1; i >= 0; i--) {
-      a = 0.0;
-      for (j = 0; j < 8; j++) {
-         a += (double)s4[i].nfa[j] * fa[j];
-      }
-      w4 += s4[i].s * sin(a) + s4[i].c * cos(a);
-   }
-
-   s = (w0 +
-       (w1 +
-       (w2 +
-       (w3 +
-       (w4 +
-        w5 * t) * t) * t) * t) * t) * DAS2R - x*y/2.0;
-
-   return s;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauS06a(double date1, double date2)
-/*
-**  - - - - - - - -
-**   i a u S 0 6 a
-**  - - - - - - - -
-**
-**  The CIO locator s, positioning the Celestial Intermediate Origin on
-**  the equator of the Celestial Intermediate Pole, using the IAU 2006
-**  precession and IAU 2000A nutation models.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (function value):
-**                  double    the CIO locator s in radians (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The CIO locator s is the difference between the right ascensions
-**     of the same point in two systems.  The two systems are the GCRS
-**     and the CIP,CIO, and the point is the ascending node of the
-**     CIP equator.  The CIO locator s remains a small fraction of
-**     1 arcsecond throughout 1900-2100.
-**
-**  3) The series used to compute s is in fact for s+XY/2, where X and Y
-**     are the x and y components of the CIP unit vector;  this series is
-**     more compact than a direct series for s would be.  The present
-**     function uses the full IAU 2000A nutation model when predicting
-**     the CIP position.
-**
-**  Called:
-**     iauPnm06a    classical NPB matrix, IAU 2006/2000A
-**     iauBpn2xy    extract CIP X,Y coordinates from NPB matrix
-**     iauS06       the CIO locator s, given X,Y, IAU 2006
-**
-**  References:
-**
-**     Capitaine, N., Chapront, J., Lambert, S. and Wallace, P.,
-**     "Expressions for the Celestial Intermediate Pole and Celestial
-**     Ephemeris Origin consistent with the IAU 2000A precession-
-**     nutation model", Astron.Astrophys. 400, 1145-1154 (2003)
-**
-**     n.b. The celestial ephemeris origin (CEO) was renamed "celestial
-**          intermediate origin" (CIO) by IAU 2006 Resolution 2.
-**
-**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
-**
-**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG
-**
-**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
-**
-**  This revision:  2010 January 18
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rnpb[3][3], x, y, s;
-
-
-/* Bias-precession-nutation-matrix, IAU 20006/2000A. */
-   iauPnm06a(date1, date2, rnpb);
-
-/* Extract the CIP coordinates. */
-   iauBpn2xy(rnpb, &x, &y);
-
-/* Compute the CIO locator s, given the CIP coordinates. */
-   s = iauS06(date1, date2, x, y);
-
-   return s;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauS2c(double theta, double phi, double c[3])
-/*
-**  - - - - - - -
-**   i a u S 2 c
-**  - - - - - - -
-**
-**  Convert spherical coordinates to Cartesian.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     theta    double       longitude angle (radians)
-**     phi      double       latitude angle (radians)
-**
-**  Returned:
-**     c        double[3]    direction cosines
-**
-**  This revision:  2008 October 28
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double cp;
-
-
-   cp = cos(phi);
-   c[0] = cos(theta) * cp;
-   c[1] = sin(theta) * cp;
-   c[2] = sin(phi);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauS2p(double theta, double phi, double r, double p[3])
-/*
-**  - - - - - - -
-**   i a u S 2 p
-**  - - - - - - -
-**
-**  Convert spherical polar coordinates to p-vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     theta   double       longitude angle (radians)
-**     phi     double       latitude angle (radians)
-**     r       double       radial distance
-**
-**  Returned:
-**     p       double[3]    Cartesian coordinates
-**
-**  Called:
-**     iauS2c       spherical coordinates to unit vector
-**     iauSxp       multiply p-vector by scalar
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double u[3];
-
-
-   iauS2c(theta, phi, u);
-   iauSxp(r, u, p);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauS2pv(double theta, double phi, double r,
-             double td, double pd, double rd,
-             double pv[2][3])
-/*
-**  - - - - - - - -
-**   i a u S 2 p v
-**  - - - - - - - -
-**
-**  Convert position/velocity from spherical to Cartesian coordinates.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     theta    double          longitude angle (radians)
-**     phi      double          latitude angle (radians)
-**     r        double          radial distance
-**     td       double          rate of change of theta
-**     pd       double          rate of change of phi
-**     rd       double          rate of change of r
-**
-**  Returned:
-**     pv       double[2][3]    pv-vector
-**
-**  This revision:  2008 May 25
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double st, ct, sp, cp, rcp, x, y, rpd, w;
-
-
-   st = sin(theta);
-   ct = cos(theta);
-   sp = sin(phi);
-   cp = cos(phi);
-   rcp = r * cp;
-   x = rcp * ct;
-   y = rcp * st;
-   rpd = r * pd;
-   w = rpd*sp - cp*rd;
-
-   pv[0][0] = x;
-   pv[0][1] = y;
-   pv[0][2] = r * sp;
-   pv[1][0] = -y*td - w*ct;
-   pv[1][1] =  x*td - w*st;
-   pv[1][2] = rpd*cp + sp*rd;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauS2xpv(double s1, double s2, double pv[2][3], double spv[2][3])
-/*
-**  - - - - - - - - -
-**   i a u S 2 x p v
-**  - - - - - - - - -
-**
-**  Multiply a pv-vector by two scalars.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     s1     double         scalar to multiply position component by
-**     s2     double         scalar to multiply velocity component by
-**     pv     double[2][3]   pv-vector
-**
-**  Returned:
-**     spv    double[2][3]   pv-vector: p scaled by s1, v scaled by s2
-**
-**  Note:
-**     It is permissible for pv and spv to be the same array.
-**
-**  Called:
-**     iauSxp       multiply p-vector by scalar
-**
-**  This revision:  2008 October 28
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauSxp(s1, pv[0], spv[0]);
-   iauSxp(s2, pv[1], spv[1]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauSepp(double a[3], double b[3])
-/*
-**  - - - - - - - -
-**   i a u S e p p
-**  - - - - - - - -
-**
-**  Angular separation between two p-vectors.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     a      double[3]    first p-vector (not necessarily unit length)
-**     b      double[3]    second p-vector (not necessarily unit length)
-**
-**  Returned (function value):
-**            double       angular separation (radians, always positive)
-**
-**  Notes:
-**
-**  1) If either vector is null, a zero result is returned.
-**
-**  2) The angular separation is most simply formulated in terms of
-**     scalar product.  However, this gives poor accuracy for angles
-**     near zero and pi.  The present algorithm uses both cross product
-**     and dot product, to deliver full accuracy whatever the size of
-**     the angle.
-**
-**  Called:
-**     iauPxp       vector product of two p-vectors
-**     iauPm        modulus of p-vector
-**     iauPdp       scalar product of two p-vectors
-**
-**  This revision:  2008 May 22
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double axb[3], ss, cs, s;
-
-
-/* Sine of angle between the vectors, multiplied by the two moduli. */
-   iauPxp(a, b, axb);
-   ss = iauPm(axb);
-
-/* Cosine of the angle, multiplied by the two moduli. */
-   cs = iauPdp(a, b);
-
-/* The angle. */
-   s = ((ss != 0.0) || (cs != 0.0)) ? atan2(ss, cs) : 0.0;
-
-   return s;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauSeps(double al, double ap, double bl, double bp)
-/*
-**  - - - - - - - -
-**   i a u S e p s
-**  - - - - - - - -
-**
-**  Angular separation between two sets of spherical coordinates.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     al     double       first longitude (radians)
-**     ap     double       first latitude (radians)
-**     bl     double       second longitude (radians)
-**     bp     double       second latitude (radians)
-**
-**  Returned (function value):
-**            double       angular separation (radians)
-**
-**  Called:
-**     iauS2c       spherical coordinates to unit vector
-**     iauSepp      angular separation between two p-vectors
-**
-**  This revision:  2008 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double ac[3], bc[3], s;
-
-
-/* Spherical to Cartesian. */
-   iauS2c(al, ap, ac);
-   iauS2c(bl, bp, bc);
-
-/* Angle between the vectors. */
-   s = iauSepp(ac, bc);
-
-   return s;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-double iauSp00(double date1, double date2)
-/*
-**  - - - - - - - -
-**   i a u S p 0 0
-**  - - - - - - - -
-**
-**  The TIO locator s', positioning the Terrestrial Intermediate Origin
-**  on the equator of the Celestial Intermediate Pole.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2  double    TT as a 2-part Julian Date (Note 1)
-**
-**  Returned (function value):
-**                  double    the TIO locator s' in radians (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The TIO locator s' is obtained from polar motion observations by
-**     numerical integration, and so is in essence unpredictable.
-**     However, it is dominated by a secular drift of about
-**     47 microarcseconds per century, which is the approximation
-**     evaluated by the present function.
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2008 May 24
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double t, sp;
-
-
-/* Interval between fundamental epoch J2000.0 and current date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Approximate s'. */
-   sp = -47e-6 * t * DAS2R;
-
-   return sp;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauStarpm(double ra1, double dec1,
-              double pmr1, double pmd1, double px1, double rv1,
-              double ep1a, double ep1b, double ep2a, double ep2b,
-              double *ra2, double *dec2,
-              double *pmr2, double *pmd2, double *px2, double *rv2)
-/*
-**  - - - - - - - - - -
-**   i a u S t a r p m
-**  - - - - - - - - - -
-**
-**  Star proper motion:  update star catalog data for space motion.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     ra1    double     right ascension (radians), before
-**     dec1   double     declination (radians), before
-**     pmr1   double     RA proper motion (radians/year), before
-**     pmd1   double     Dec proper motion (radians/year), before
-**     px1    double     parallax (arcseconds), before
-**     rv1    double     radial velocity (km/s, +ve = receding), before
-**     ep1a   double     "before" epoch, part A (Note 1)
-**     ep1b   double     "before" epoch, part B (Note 1)
-**     ep2a   double     "after" epoch, part A (Note 1)
-**     ep2b   double     "after" epoch, part B (Note 1)
-**
-**  Returned:
-**     ra2    double     right ascension (radians), after
-**     dec2   double     declination (radians), after
-**     pmr2   double     RA proper motion (radians/year), after
-**     pmd2   double     Dec proper motion (radians/year), after
-**     px2    double     parallax (arcseconds), after
-**     rv2    double     radial velocity (km/s, +ve = receding), after
-**
-**  Returned (function value):
-**            int        status:
-**                          -1 = system error (should not occur)
-**                           0 = no warnings or errors
-**                           1 = distance overridden (Note 6)
-**                           2 = excessive velocity (Note 7)
-**                           4 = solution didn't converge (Note 8)
-**                        else = binary logical OR of the above warnings
-**
-**  Notes:
-**
-**  1) The starting and ending TDB dates ep1a+ep1b and ep2a+ep2b are
-**     Julian Dates, apportioned in any convenient way between the two
-**     parts (A and B).  For example, JD(TDB)=2450123.7 could be
-**     expressed in any of these ways, among others:
-**
-**             epna          epnb
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) In accordance with normal star-catalog conventions, the object's
-**     right ascension and declination are freed from the effects of
-**     secular aberration.  The frame, which is aligned to the catalog
-**     equator and equinox, is Lorentzian and centered on the SSB.
-**
-**     The proper motions are the rate of change of the right ascension
-**     and declination at the catalog epoch and are in radians per TDB
-**     Julian year.
-**
-**     The parallax and radial velocity are in the same frame.
-**
-**  3) Care is needed with units.  The star coordinates are in radians
-**     and the proper motions in radians per Julian year, but the
-**     parallax is in arcseconds.
-**
-**  4) The RA proper motion is in terms of coordinate angle, not true
-**     angle.  If the catalog uses arcseconds for both RA and Dec proper
-**     motions, the RA proper motion will need to be divided by cos(Dec)
-**     before use.
-**
-**  5) Straight-line motion at constant speed, in the inertial frame,
-**     is assumed.
-**
-**  6) An extremely small (or zero or negative) parallax is interpreted
-**     to mean that the object is on the "celestial sphere", the radius
-**     of which is an arbitrary (large) value (see the iauStarpv
-**     function for the value used).  When the distance is overridden in
-**     this way, the status, initially zero, has 1 added to it.
-**
-**  7) If the space velocity is a significant fraction of c (see the
-**     constant VMAX in the function iauStarpv),  it is arbitrarily set
-**     to zero.  When this action occurs, 2 is added to the status.
-**
-**  8) The relativistic adjustment carried out in the iauStarpv function
-**     involves an iterative calculation.  If the process fails to
-**     converge within a set number of iterations, 4 is added to the
-**     status.
-**
-**  Called:
-**     iauStarpv    star catalog data to space motion pv-vector
-**     iauPvu       update a pv-vector
-**     iauPdp       scalar product of two p-vectors
-**     iauPvstar    space motion pv-vector to star catalog data
-**
-**  This revision:  2008 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double pv1[2][3], tl1, dt, pv[2][3], r2, rdv, v2, c2mv2, tl2,
-          pv2[2][3];
-   int j1, j2, j;
-
-
-/* RA,Dec etc. at the "before" epoch to space motion pv-vector. */
-   j1 = iauStarpv(ra1, dec1, pmr1, pmd1, px1, rv1, pv1);
-
-/* Light time when observed (days). */
-   tl1 = iauPm(pv1[0]) / DC;
-
-/* Time interval, "before" to "after" (days). */
-   dt = (ep2a - ep1a) + (ep2b - ep1b);
-
-/* Move star along track from the "before" observed position to the */
-/* "after" geometric position. */
-   iauPvu(dt + tl1, pv1, pv);
-
-/* From this geometric position, deduce the observed light time (days) */
-/* at the "after" epoch (with theoretically unneccessary error check). */
-   r2 = iauPdp(pv[0], pv[0]);
-   rdv = iauPdp(pv[0], pv[1]);
-   v2 = iauPdp(pv[1], pv[1]);
-   c2mv2 = DC*DC - v2;
-   if (c2mv2 <=  0) return -1;
-   tl2 = (-rdv + sqrt(rdv*rdv + c2mv2*r2)) / c2mv2;
-
-/* Move the position along track from the observed place at the */
-/* "before" epoch to the observed place at the "after" epoch. */
-   iauPvu(dt + (tl1 - tl2), pv1, pv2);
-
-/* Space motion pv-vector to RA,Dec etc. at the "after" epoch. */
-   j2 = iauPvstar(pv2, ra2, dec2, pmr2, pmd2, px2, rv2);
-
-/* Final status. */
-   j = (j2 == 0) ? j1 : -1;
-
-   return j;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauStarpv(double ra, double dec,
-              double pmr, double pmd, double px, double rv,
-              double pv[2][3])
-/*
-**  - - - - - - - - - -
-**   i a u S t a r p v
-**  - - - - - - - - - -
-**
-**  Convert star catalog coordinates to position+velocity vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given (Note 1):
-**     ra     double        right ascension (radians)
-**     dec    double        declination (radians)
-**     pmr    double        RA proper motion (radians/year)
-**     pmd    double        Dec proper motion (radians/year)
-**     px     double        parallax (arcseconds)
-**     rv     double        radial velocity (km/s, positive = receding)
-**
-**  Returned (Note 2):
-**     pv     double[2][3]  pv-vector (AU, AU/day)
-**
-**  Returned (function value):
-**            int           status:
-**                              0 = no warnings
-**                              1 = distance overridden (Note 6)
-**                              2 = excessive speed (Note 7)
-**                              4 = solution didn't converge (Note 8)
-**                           else = binary logical OR of the above
-**
-**  Notes:
-**
-**  1) The star data accepted by this function are "observables" for an
-**     imaginary observer at the solar-system barycenter.  Proper motion
-**     and radial velocity are, strictly, in terms of barycentric
-**     coordinate time, TCB.  For most practical applications, it is
-**     permissible to neglect the distinction between TCB and ordinary
-**     "proper" time on Earth (TT/TAI).  The result will, as a rule, be
-**     limited by the intrinsic accuracy of the proper-motion and
-**     radial-velocity data;  moreover, the pv-vector is likely to be
-**     merely an intermediate result, so that a change of time unit
-**     would cancel out overall.
-**
-**     In accordance with normal star-catalog conventions, the object's
-**     right ascension and declination are freed from the effects of
-**     secular aberration.  The frame, which is aligned to the catalog
-**     equator and equinox, is Lorentzian and centered on the SSB.
-**
-**  2) The resulting position and velocity pv-vector is with respect to
-**     the same frame and, like the catalog coordinates, is freed from
-**     the effects of secular aberration.  Should the "coordinate
-**     direction", where the object was located at the catalog epoch, be
-**     required, it may be obtained by calculating the magnitude of the
-**     position vector pv[0][0-2] dividing by the speed of light in
-**     AU/day to give the light-time, and then multiplying the space
-**     velocity pv[1][0-2] by this light-time and adding the result to
-**     pv[0][0-2].
-**
-**     Summarizing, the pv-vector returned is for most stars almost
-**     identical to the result of applying the standard geometrical
-**     "space motion" transformation.  The differences, which are the
-**     subject of the Stumpff paper referenced below, are:
-**
-**     (i) In stars with significant radial velocity and proper motion,
-**     the constantly changing light-time distorts the apparent proper
-**     motion.  Note that this is a classical, not a relativistic,
-**     effect.
-**
-**     (ii) The transformation complies with special relativity.
-**
-**  3) Care is needed with units.  The star coordinates are in radians
-**     and the proper motions in radians per Julian year, but the
-**     parallax is in arcseconds; the radial velocity is in km/s, but
-**     the pv-vector result is in AU and AU/day.
-**
-**  4) The RA proper motion is in terms of coordinate angle, not true
-**     angle.  If the catalog uses arcseconds for both RA and Dec proper
-**     motions, the RA proper motion will need to be divided by cos(Dec)
-**     before use.
-**
-**  5) Straight-line motion at constant speed, in the inertial frame,
-**     is assumed.
-**
-**  6) An extremely small (or zero or negative) parallax is interpreted
-**     to mean that the object is on the "celestial sphere", the radius
-**     of which is an arbitrary (large) value (see the constant PXMIN).
-**     When the distance is overridden in this way, the status,
-**     initially zero, has 1 added to it.
-**
-**  7) If the space velocity is a significant fraction of c (see the
-**     constant VMAX), it is arbitrarily set to zero.  When this action
-**     occurs, 2 is added to the status.
-**
-**  8) The relativistic adjustment involves an iterative calculation.
-**     If the process fails to converge within a set number (IMAX) of
-**     iterations, 4 is added to the status.
-**
-**  9) The inverse transformation is performed by the function
-**     iauPvstar.
-**
-**  Called:
-**     iauS2pv      spherical coordinates to pv-vector
-**     iauPm        modulus of p-vector
-**     iauZp        zero p-vector
-**     iauPn        decompose p-vector into modulus and direction
-**     iauPdp       scalar product of two p-vectors
-**     iauSxp       multiply p-vector by scalar
-**     iauPmp       p-vector minus p-vector
-**     iauPpp       p-vector plus p-vector
-**
-**  Reference:
-**
-**     Stumpff, P., 1985, Astron.Astrophys. 144, 232-240.
-**
-**  This revision:  2009 July 6
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-/* Smallest allowed parallax */
-   static const double PXMIN = 1e-7;
-
-/* Largest allowed speed (fraction of c) */
-   static const double VMAX = 0.5;
-
-/* Maximum number of iterations for relativistic solution */
-   static const int IMAX = 100;
-
-   int i, iwarn;
-   double w, r, rd, rad, decd, v, x[3], usr[3], ust[3],
-          vsr, vst, betst, betsr, bett, betr,
-          dd, ddel, ur[3], ut[3],
-          d = 0.0, del = 0.0,       /* to prevent */
-          odd = 0.0, oddel = 0.0,   /* compiler   */
-          od = 0.0, odel = 0.0;     /* warnings   */
-
-
-/* Distance (AU). */
-   if (px >= PXMIN) {
-      w = px;
-      iwarn = 0;
-   } else {
-      w = PXMIN;
-      iwarn = 1;
-   }
-   r = DR2AS / w;
-
-/* Radial velocity (AU/day). */
-   rd = DAYSEC * rv * 1e3 / DAU;
-
-/* Proper motion (radian/day). */
-   rad = pmr / DJY;
-   decd = pmd / DJY;
-
-/* To pv-vector (AU,AU/day). */
-   iauS2pv(ra, dec, r, rad, decd, rd, pv);
-
-/* If excessive velocity, arbitrarily set it to zero. */
-   v = iauPm(pv[1]);
-   if (v / DC > VMAX) {
-      iauZp(pv[1]);
-      iwarn += 2;
-   }
-
-/* Isolate the radial component of the velocity (AU/day). */
-   iauPn(pv[0], &w, x);
-   vsr = iauPdp(x, pv[1]);
-   iauSxp(vsr, x, usr);
-
-/* Isolate the transverse component of the velocity (AU/day). */
-   iauPmp(pv[1], usr, ust);
-   vst = iauPm(ust);
-
-/* Special-relativity dimensionless parameters. */
-   betsr = vsr / DC;
-   betst = vst / DC;
-
-/* Determine the inertial-to-observed relativistic correction terms. */
-   bett = betst;
-   betr = betsr;
-   for (i = 0; i < IMAX; i++) {
-      d = 1.0 + betr;
-      del = sqrt(1.0 - betr*betr - bett*bett) - 1.0;
-      betr = d * betsr + del;
-      bett = d * betst;
-      if (i > 0) {
-         dd = fabs(d - od);
-         ddel = fabs(del - odel);
-         if ((i > 1) && (dd >= odd) && (ddel >= oddel)) break;
-         odd = dd;
-         oddel = ddel;
-      }
-      od = d;
-      odel = del;
-   }
-   if (i >= IMAX) iwarn += 4;
-
-/* Replace observed radial velocity with inertial value. */
-   w = (betsr != 0.0) ? d + del / betsr : 1.0;
-   iauSxp(w, usr, ur);
-
-/* Replace observed tangential velocity with inertial value. */
-   iauSxp(d, ust, ut);
-
-/* Combine the two to obtain the inertial space velocity. */
-   iauPpp(ur, ut, pv[1]);
-
-/* Return the status. */
-   return iwarn;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauSxp(double s, double p[3], double sp[3])
-/*
-**  - - - - - - -
-**   i a u S x p
-**  - - - - - - -
-**
-**  Multiply a p-vector by a scalar.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     s      double        scalar
-**     p      double[3]     p-vector
-**
-**  Returned:
-**     sp     double[3]     s * p
-**
-**  Note:
-**     It is permissible for p and sp to be the same array.
-**
-**  This revision:  2008 October 28
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   sp[0] = s * p[0];
-   sp[1] = s * p[1];
-   sp[2] = s * p[2];
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauSxpv(double s, double pv[2][3], double spv[2][3])
-/*
-**  - - - - - - - -
-**   i a u S x p v
-**  - - - - - - - -
-**
-**  Multiply a pv-vector by a scalar.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     s       double          scalar
-**     pv      double[2][3]    pv-vector
-**
-**  Returned:
-**     spv     double[2][3]    s * pv
-**
-**  Note:
-**     It is permissible for pv and psv to be the same array
-**
-**  Called:
-**     iauS2xpv     multiply pv-vector by two scalars
-**
-**  This revision:  2008 October 28
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauS2xpv(s, s, pv, spv);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include <stdio.h>
-#include "sofa.h"
-#include "sofam.h"
-
-static int verbose = 0;
-
-/*
-**  - - - - - - - - -
-**   t _ s o f a _ c
-**  - - - - - - - - -
-**
-**  Validate the SOFA C functions.
-**
-**  Each SOFA function is at least called and a usually quite basic test
-**  is performed.  Successful completion is signalled by a confirming
-**  message.  Failure of a given function or group of functions results
-**  in error messages.
-**
-**  All messages go to stdout.
-**
-**  This revision:  2012 February 23
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-
-static void viv(int ival, int ivalok,
-                const char *func, const char *test, int *status)
-/*
-**  - - - -
-**   v i v
-**  - - - -
-**
-**  Validate an integer result.
-**
-**  Internal function used by t_sofa_c program.
-**
-**  Given:
-**     ival     int          value computed by function under test
-**     ivalok   int          correct value
-**     func     char[]       name of function under test
-**     test     char[]       name of individual test
-**
-**  Given and returned:
-**     status   int          set to FALSE if test fails
-**
-**  This revision:  2012 February 12
-*/
-{
-   if (ival != ivalok) {
-      *status = 1;
-      printf("%s failed: %s want %d got %d\n",
-             func, test, ivalok, ival);
-   } else if (verbose) {
-      printf("%s passed: %s want %d got %d\n",
-                    func, test, ivalok, ival);
-   }
-   return;
-}
-
-static void vvd(double val, double valok, double dval,
-                const char *func, const char *test, int *status)
-/*
-**  - - - -
-**   v v d
-**  - - - -
-**
-**  Validate a double result.
-**
-**  Internal function used by t_sofa_c program.
-**
-**  Given:
-**     val      double       value computed by function under test
-**     valok    double       expected value
-**     dval     double       maximum allowable error
-**     func     char[]       name of function under test
-**     test     char[]       name of individual test
-**
-**  Given and returned:
-**     status   int          set to FALSE if test fails
-**
-**  This revision:  2012 February 12
-*/
-{
-   double a, f;   /* absolute and fractional error */
-
-
-   a = val - valok;
-   if (fabs(a) > dval) {
-      f = fabs(valok / a);
-      *status = 1;
-      printf("%s failed: %s want %.20g got %.20g (1/%.3g)\n",
-             func, test, valok, val, f);
-   } else if (verbose) {
-      printf("%s passed: %s want %.20g got %.20g\n",
-             func, test, valok, val);
-   }
-   return;
-}
-
-static void t_a2af(int *status)
-/*
-**  - - - - - - -
-**   t _ a 2 a f
-**  - - - - - - -
-**
-**  Test iauA2af function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauA2af, viv
-**
-**  This revision:  2008 November 30
-*/
-{
-   int idmsf[4];
-   char s;
-
-
-   iauA2af(4, 2.345, &s, idmsf);
-
-   viv(s, '+', "iauA2af", "s", status);
-
-   viv(idmsf[0],  134, "iauA2af", "0", status);
-   viv(idmsf[1],   21, "iauA2af", "1", status);
-   viv(idmsf[2],   30, "iauA2af", "2", status);
-   viv(idmsf[3], 9706, "iauA2af", "3", status);
-
-}
-
-static void t_a2tf(int *status)
-/*
-**  - - - - - - -
-**   t _ a 2 t f
-**  - - - - - - -
-**
-**  Test iauA2tf function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauA2tf, viv
-**
-**  This revision:  2008 November 30
-*/
-{
-   int ihmsf[4];
-   char s;
-
-
-   iauA2tf(4, -3.01234, &s, ihmsf);
-
-   viv((int)s, '-', "iauA2tf", "s", status);
-
-   viv(ihmsf[0],   11, "iauA2tf", "0", status);
-   viv(ihmsf[1],   30, "iauA2tf", "1", status);
-   viv(ihmsf[2],   22, "iauA2tf", "2", status);
-   viv(ihmsf[3], 6484, "iauA2tf", "3", status);
-
-}
-
-static void t_af2a(int *status)
-/*
-**  - - - - - - -
-**   t _ a f 2 a
-**  - - - - - - -
-**
-**  Test iauAf2a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauAf2a, viv
-**
-**  This revision:  2010 September 6
-*/
-{
-   double a;
-   int j;
-
-
-   j = iauAf2a('-', 45, 13, 27.2, &a);
-
-   vvd(a, -0.7893115794313644842, 1e-12, "iauAf2a", "a", status);
-   viv(j, 0, "iauAf2a", "j", status);
-
-}
-
-static void t_anp(int *status)
-/*
-**  - - - - - -
-**   t _ a n p
-**  - - - - - -
-**
-**  Test iauAnp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauAnp, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   vvd(iauAnp(-0.1), 6.183185307179586477, 1e-12, "iauAnp", "", status);
-}
-
-static void t_anpm(int *status)
-/*
-**  - - - - - - -
-**   t _ a n p m
-**  - - - - - - -
-**
-**  Test iauAnpm function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauAnpm, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   vvd(iauAnpm(-4.0), 2.283185307179586477, 1e-12, "iauAnpm", "", status);
-}
-
-static void t_bi00(int *status)
-/*
-**  - - - - - - -
-**   t _ b i 0 0
-**  - - - - - - -
-**
-**  Test iauBi00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauBi00, vvd
-**
-**  This revision:  2009 November 4
-*/
-{
-   double dpsibi, depsbi, dra;
-
-   iauBi00(&dpsibi, &depsbi, &dra);
-
-   vvd(dpsibi, -0.2025309152835086613e-6, 1e-12,
-      "iauBi00", "dpsibi", status);
-   vvd(depsbi, -0.3306041454222147847e-7, 1e-12,
-      "iauBi00", "depsbi", status);
-   vvd(dra, -0.7078279744199225506e-7, 1e-12,
-      "iauBi00", "dra", status);
-}
-
-static void t_bp00(int *status)
-/*
-**  - - - - - - -
-**   t _ b p 0 0
-**  - - - - - - -
-**
-**  Test iauBp00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauBp00, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rb[3][3], rp[3][3], rbp[3][3];
-
-
-   iauBp00(2400000.5, 50123.9999, rb, rp, rbp);
-
-   vvd(rb[0][0], 0.9999999999999942498, 1e-12,
-       "iauBp00", "rb11", status);
-   vvd(rb[0][1], -0.7078279744199196626e-7, 1e-16,
-       "iauBp00", "rb12", status);
-   vvd(rb[0][2], 0.8056217146976134152e-7, 1e-16,
-       "iauBp00", "rb13", status);
-   vvd(rb[1][0], 0.7078279477857337206e-7, 1e-16,
-       "iauBp00", "rb21", status);
-   vvd(rb[1][1], 0.9999999999999969484, 1e-12,
-       "iauBp00", "rb22", status);
-   vvd(rb[1][2], 0.3306041454222136517e-7, 1e-16,
-       "iauBp00", "rb23", status);
-   vvd(rb[2][0], -0.8056217380986972157e-7, 1e-16,
-       "iauBp00", "rb31", status);
-   vvd(rb[2][1], -0.3306040883980552500e-7, 1e-16,
-       "iauBp00", "rb32", status);
-   vvd(rb[2][2], 0.9999999999999962084, 1e-12,
-       "iauBp00", "rb33", status);
-
-   vvd(rp[0][0], 0.9999995504864048241, 1e-12,
-       "iauBp00", "rp11", status);
-   vvd(rp[0][1], 0.8696113836207084411e-3, 1e-14,
-       "iauBp00", "rp12", status);
-   vvd(rp[0][2], 0.3778928813389333402e-3, 1e-14,
-       "iauBp00", "rp13", status);
-   vvd(rp[1][0], -0.8696113818227265968e-3, 1e-14,
-       "iauBp00", "rp21", status);
-   vvd(rp[1][1], 0.9999996218879365258, 1e-12,
-       "iauBp00", "rp22", status);
-   vvd(rp[1][2], -0.1690679263009242066e-6, 1e-14,
-       "iauBp00", "rp23", status);
-   vvd(rp[2][0], -0.3778928854764695214e-3, 1e-14,
-       "iauBp00", "rp31", status);
-   vvd(rp[2][1], -0.1595521004195286491e-6, 1e-14,
-       "iauBp00", "rp32", status);
-   vvd(rp[2][2], 0.9999999285984682756, 1e-12,
-       "iauBp00", "rp33", status);
-
-   vvd(rbp[0][0], 0.9999995505175087260, 1e-12,
-       "iauBp00", "rbp11", status);
-   vvd(rbp[0][1], 0.8695405883617884705e-3, 1e-14,
-       "iauBp00", "rbp12", status);
-   vvd(rbp[0][2], 0.3779734722239007105e-3, 1e-14,
-       "iauBp00", "rbp13", status);
-   vvd(rbp[1][0], -0.8695405990410863719e-3, 1e-14,
-       "iauBp00", "rbp21", status);
-   vvd(rbp[1][1], 0.9999996219494925900, 1e-12,
-       "iauBp00", "rbp22", status);
-   vvd(rbp[1][2], -0.1360775820404982209e-6, 1e-14,
-       "iauBp00", "rbp23", status);
-   vvd(rbp[2][0], -0.3779734476558184991e-3, 1e-14,
-       "iauBp00", "rbp31", status);
-   vvd(rbp[2][1], -0.1925857585832024058e-6, 1e-14,
-       "iauBp00", "rbp32", status);
-   vvd(rbp[2][2], 0.9999999285680153377, 1e-12,
-       "iauBp00", "rbp33", status);
-}
-
-static void t_bp06(int *status)
-/*
-**  - - - - - - -
-**   t _ b p 0 6
-**  - - - - - - -
-**
-**  Test iauBp06 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauBp06, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rb[3][3], rp[3][3], rbp[3][3];
-
-
-   iauBp06(2400000.5, 50123.9999, rb, rp, rbp);
-
-   vvd(rb[0][0], 0.9999999999999942497, 1e-12,
-       "iauBp06", "rb11", status);
-   vvd(rb[0][1], -0.7078368960971557145e-7, 1e-14,
-       "iauBp06", "rb12", status);
-   vvd(rb[0][2], 0.8056213977613185606e-7, 1e-14,
-       "iauBp06", "rb13", status);
-   vvd(rb[1][0], 0.7078368694637674333e-7, 1e-14,
-       "iauBp06", "rb21", status);
-   vvd(rb[1][1], 0.9999999999999969484, 1e-12,
-       "iauBp06", "rb22", status);
-   vvd(rb[1][2], 0.3305943742989134124e-7, 1e-14,
-       "iauBp06", "rb23", status);
-   vvd(rb[2][0], -0.8056214211620056792e-7, 1e-14,
-       "iauBp06", "rb31", status);
-   vvd(rb[2][1], -0.3305943172740586950e-7, 1e-14,
-       "iauBp06", "rb32", status);
-   vvd(rb[2][2], 0.9999999999999962084, 1e-12,
-       "iauBp06", "rb33", status);
-
-   vvd(rp[0][0], 0.9999995504864960278, 1e-12,
-       "iauBp06", "rp11", status);
-   vvd(rp[0][1], 0.8696112578855404832e-3, 1e-14,
-       "iauBp06", "rp12", status);
-   vvd(rp[0][2], 0.3778929293341390127e-3, 1e-14,
-       "iauBp06", "rp13", status);
-   vvd(rp[1][0], -0.8696112560510186244e-3, 1e-14,
-       "iauBp06", "rp21", status);
-   vvd(rp[1][1], 0.9999996218880458820, 1e-12,
-       "iauBp06", "rp22", status);
-   vvd(rp[1][2], -0.1691646168941896285e-6, 1e-14,
-       "iauBp06", "rp23", status);
-   vvd(rp[2][0], -0.3778929335557603418e-3, 1e-14,
-       "iauBp06", "rp31", status);
-   vvd(rp[2][1], -0.1594554040786495076e-6, 1e-14,
-       "iauBp06", "rp32", status);
-   vvd(rp[2][2], 0.9999999285984501222, 1e-12,
-       "iauBp06", "rp33", status);
-
-   vvd(rbp[0][0], 0.9999995505176007047, 1e-12,
-       "iauBp06", "rbp11", status);
-   vvd(rbp[0][1], 0.8695404617348208406e-3, 1e-14,
-       "iauBp06", "rbp12", status);
-   vvd(rbp[0][2], 0.3779735201865589104e-3, 1e-14,
-       "iauBp06", "rbp13", status);
-   vvd(rbp[1][0], -0.8695404723772031414e-3, 1e-14,
-       "iauBp06", "rbp21", status);
-   vvd(rbp[1][1], 0.9999996219496027161, 1e-12,
-       "iauBp06", "rbp22", status);
-   vvd(rbp[1][2], -0.1361752497080270143e-6, 1e-14,
-       "iauBp06", "rbp23", status);
-   vvd(rbp[2][0], -0.3779734957034089490e-3, 1e-14,
-       "iauBp06", "rbp31", status);
-   vvd(rbp[2][1], -0.1924880847894457113e-6, 1e-14,
-       "iauBp06", "rbp32", status);
-   vvd(rbp[2][2], 0.9999999285679971958, 1e-12,
-       "iauBp06", "rbp33", status);
-}
-
-static void t_bpn2xy(int *status)
-/*
-**  - - - - - - - - -
-**   t _ b p n 2 x y
-**  - - - - - - - - -
-**
-**  Test iauBpn2xy function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauBpn2xy, vvd
-**
-**  This revision:  2008 May 26
-*/
-{
-   double rbpn[3][3], x, y;
-
-
-   rbpn[0][0] =  9.999962358680738e-1;
-   rbpn[0][1] = -2.516417057665452e-3;
-   rbpn[0][2] = -1.093569785342370e-3;
-
-   rbpn[1][0] =  2.516462370370876e-3;
-   rbpn[1][1] =  9.999968329010883e-1;
-   rbpn[1][2] =  4.006159587358310e-5;
-
-   rbpn[2][0] =  1.093465510215479e-3;
-   rbpn[2][1] = -4.281337229063151e-5;
-   rbpn[2][2] =  9.999994012499173e-1;
-
-   iauBpn2xy(rbpn, &x, &y);
-
-   vvd(x,  1.093465510215479e-3, 1e-12, "iauBpn2xy", "x", status);
-   vvd(y, -4.281337229063151e-5, 1e-12, "iauBpn2xy", "y", status);
-
-}
-
-static void t_c2i00a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ c 2 i 0 0 a
-**  - - - - - - - - -
-**
-**  Test iauC2i00a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2i00a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rc2i[3][3];
-
-
-   iauC2i00a(2400000.5, 53736.0, rc2i);
-
-   vvd(rc2i[0][0], 0.9999998323037165557, 1e-12,
-       "iauC2i00a", "11", status);
-   vvd(rc2i[0][1], 0.5581526348992140183e-9, 1e-12,
-       "iauC2i00a", "12", status);
-   vvd(rc2i[0][2], -0.5791308477073443415e-3, 1e-12,
-       "iauC2i00a", "13", status);
-
-   vvd(rc2i[1][0], -0.2384266227870752452e-7, 1e-12,
-       "iauC2i00a", "21", status);
-   vvd(rc2i[1][1], 0.9999999991917405258, 1e-12,
-       "iauC2i00a", "22", status);
-   vvd(rc2i[1][2], -0.4020594955028209745e-4, 1e-12,
-       "iauC2i00a", "23", status);
-
-   vvd(rc2i[2][0], 0.5791308472168152904e-3, 1e-12,
-       "iauC2i00a", "31", status);
-   vvd(rc2i[2][1], 0.4020595661591500259e-4, 1e-12,
-       "iauC2i00a", "32", status);
-   vvd(rc2i[2][2], 0.9999998314954572304, 1e-12,
-       "iauC2i00a", "33", status);
-
-}
-
-static void t_c2i00b(int *status)
-/*
-**  - - - - - - - - -
-**   t _ c 2 i 0 0 b
-**  - - - - - - - - -
-**
-**  Test iauC2i00b function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2i00b, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rc2i[3][3];
-
-
-   iauC2i00b(2400000.5, 53736.0, rc2i);
-
-   vvd(rc2i[0][0], 0.9999998323040954356, 1e-12,
-       "iauC2i00b", "11", status);
-   vvd(rc2i[0][1], 0.5581526349131823372e-9, 1e-12,
-       "iauC2i00b", "12", status);
-   vvd(rc2i[0][2], -0.5791301934855394005e-3, 1e-12,
-       "iauC2i00b", "13", status);
-
-   vvd(rc2i[1][0], -0.2384239285499175543e-7, 1e-12,
-       "iauC2i00b", "21", status);
-   vvd(rc2i[1][1], 0.9999999991917574043, 1e-12,
-       "iauC2i00b", "22", status);
-   vvd(rc2i[1][2], -0.4020552974819030066e-4, 1e-12,
-       "iauC2i00b", "23", status);
-
-   vvd(rc2i[2][0], 0.5791301929950208873e-3, 1e-12,
-       "iauC2i00b", "31", status);
-   vvd(rc2i[2][1], 0.4020553681373720832e-4, 1e-12,
-       "iauC2i00b", "32", status);
-   vvd(rc2i[2][2], 0.9999998314958529887, 1e-12,
-       "iauC2i00b", "33", status);
-
-}
-
-static void t_c2i06a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ c 2 i 0 6 a
-**  - - - - - - - - -
-**
-**  Test iauC2i06a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2i06a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rc2i[3][3];
-
-
-   iauC2i06a(2400000.5, 53736.0, rc2i);
-
-   vvd(rc2i[0][0], 0.9999998323037159379, 1e-12,
-       "iauC2i06a", "11", status);
-   vvd(rc2i[0][1], 0.5581121329587613787e-9, 1e-12,
-       "iauC2i06a", "12", status);
-   vvd(rc2i[0][2], -0.5791308487740529749e-3, 1e-12,
-       "iauC2i06a", "13", status);
-
-   vvd(rc2i[1][0], -0.2384253169452306581e-7, 1e-12,
-       "iauC2i06a", "21", status);
-   vvd(rc2i[1][1], 0.9999999991917467827, 1e-12,
-       "iauC2i06a", "22", status);
-   vvd(rc2i[1][2], -0.4020579392895682558e-4, 1e-12,
-       "iauC2i06a", "23", status);
-
-   vvd(rc2i[2][0], 0.5791308482835292617e-3, 1e-12,
-       "iauC2i06a", "31", status);
-   vvd(rc2i[2][1], 0.4020580099454020310e-4, 1e-12,
-       "iauC2i06a", "32", status);
-   vvd(rc2i[2][2], 0.9999998314954628695, 1e-12,
-       "iauC2i06a", "33", status);
-
-}
-
-static void t_c2ibpn(int *status)
-/*
-**  - - - - - - - - -
-**   t _ c 2 i b p n
-**  - - - - - - - - -
-**
-**  Test iauC2ibpn function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2ibpn, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rbpn[3][3], rc2i[3][3];
-
-
-   rbpn[0][0] =  9.999962358680738e-1;
-   rbpn[0][1] = -2.516417057665452e-3;
-   rbpn[0][2] = -1.093569785342370e-3;
-
-   rbpn[1][0] =  2.516462370370876e-3;
-   rbpn[1][1] =  9.999968329010883e-1;
-   rbpn[1][2] =  4.006159587358310e-5;
-
-   rbpn[2][0] =  1.093465510215479e-3;
-   rbpn[2][1] = -4.281337229063151e-5;
-   rbpn[2][2] =  9.999994012499173e-1;
-
-   iauC2ibpn(2400000.5, 50123.9999, rbpn, rc2i);
-
-   vvd(rc2i[0][0], 0.9999994021664089977, 1e-12,
-       "iauC2ibpn", "11", status);
-   vvd(rc2i[0][1], -0.3869195948017503664e-8, 1e-12,
-       "iauC2ibpn", "12", status);
-   vvd(rc2i[0][2], -0.1093465511383285076e-2, 1e-12,
-       "iauC2ibpn", "13", status);
-
-   vvd(rc2i[1][0], 0.5068413965715446111e-7, 1e-12,
-       "iauC2ibpn", "21", status);
-   vvd(rc2i[1][1], 0.9999999990835075686, 1e-12,
-       "iauC2ibpn", "22", status);
-   vvd(rc2i[1][2], 0.4281334246452708915e-4, 1e-12,
-       "iauC2ibpn", "23", status);
-
-   vvd(rc2i[2][0], 0.1093465510215479000e-2, 1e-12,
-       "iauC2ibpn", "31", status);
-   vvd(rc2i[2][1], -0.4281337229063151000e-4, 1e-12,
-       "iauC2ibpn", "32", status);
-   vvd(rc2i[2][2], 0.9999994012499173103, 1e-12,
-       "iauC2ibpn", "33", status);
-
-}
-
-static void t_c2ixy(int *status)
-/*
-**  - - - - - - - -
-**   t _ c 2 i x y
-**  - - - - - - - -
-**
-**  Test iauC2ixy function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2ixy, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double x, y, rc2i[3][3];
-
-
-   x = 0.5791308486706011000e-3;
-   y = 0.4020579816732961219e-4;
-
-   iauC2ixy(2400000.5, 53736, x, y, rc2i);
-
-   vvd(rc2i[0][0], 0.9999998323037157138, 1e-12,
-       "iauC2ixy", "11", status);
-   vvd(rc2i[0][1], 0.5581526349032241205e-9, 1e-12,
-       "iauC2ixy", "12", status);
-   vvd(rc2i[0][2], -0.5791308491611263745e-3, 1e-12,
-       "iauC2ixy", "13", status);
-
-   vvd(rc2i[1][0], -0.2384257057469842953e-7, 1e-12,
-       "iauC2ixy", "21", status);
-   vvd(rc2i[1][1], 0.9999999991917468964, 1e-12,
-       "iauC2ixy", "22", status);
-   vvd(rc2i[1][2], -0.4020579110172324363e-4, 1e-12,
-       "iauC2ixy", "23", status);
-
-   vvd(rc2i[2][0], 0.5791308486706011000e-3, 1e-12,
-       "iauC2ixy", "31", status);
-   vvd(rc2i[2][1], 0.4020579816732961219e-4, 1e-12,
-       "iauC2ixy", "32", status);
-   vvd(rc2i[2][2], 0.9999998314954627590, 1e-12,
-       "iauC2ixy", "33", status);
-
-}
-
-static void t_c2ixys(int *status)
-/*
-**  - - - - - - - - -
-**   t _ c 2 i x y s
-**  - - - - - - - - -
-**
-**  Test iauC2ixys function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2ixys, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double x, y, s, rc2i[3][3];
-
-
-   x =  0.5791308486706011000e-3;
-   y =  0.4020579816732961219e-4;
-   s = -0.1220040848472271978e-7;
-
-   iauC2ixys(x, y, s, rc2i);
-
-   vvd(rc2i[0][0], 0.9999998323037157138, 1e-12,
-       "iauC2ixys", "11", status);
-   vvd(rc2i[0][1], 0.5581984869168499149e-9, 1e-12,
-       "iauC2ixys", "12", status);
-   vvd(rc2i[0][2], -0.5791308491611282180e-3, 1e-12,
-       "iauC2ixys", "13", status);
-
-   vvd(rc2i[1][0], -0.2384261642670440317e-7, 1e-12,
-       "iauC2ixys", "21", status);
-   vvd(rc2i[1][1], 0.9999999991917468964, 1e-12,
-       "iauC2ixys", "22", status);
-   vvd(rc2i[1][2], -0.4020579110169668931e-4, 1e-12,
-       "iauC2ixys", "23", status);
-
-   vvd(rc2i[2][0], 0.5791308486706011000e-3, 1e-12,
-       "iauC2ixys", "31", status);
-   vvd(rc2i[2][1], 0.4020579816732961219e-4, 1e-12,
-       "iauC2ixys", "32", status);
-   vvd(rc2i[2][2], 0.9999998314954627590, 1e-12,
-       "iauC2ixys", "33", status);
-
-}
-
-static void t_c2s(int *status)
-/*
-**  - - - - - -
-**   t _ c 2 s
-**  - - - - - -
-**
-**  Test iauC2s function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2s, vvd
-**
-**  This revision:  2008 May 27
-*/
-{
-   double p[3], theta, phi;
-
-
-   p[0] = 100.0;
-   p[1] = -50.0;
-   p[2] =  25.0;
-
-   iauC2s(p, &theta, &phi);
-
-   vvd(theta, -0.4636476090008061162, 1e-14, "iauC2s", "theta", status);
-   vvd(phi, 0.2199879773954594463, 1e-14, "iauC2s", "phi", status);
-
-}
-
-static void t_c2t00a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ c 2 t 0 0 a
-**  - - - - - - - - -
-**
-**  Test iauC2t00a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2t00a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double tta, ttb, uta, utb, xp, yp, rc2t[3][3];
-
-
-   tta = 2400000.5;
-   uta = 2400000.5;
-   ttb = 53736.0;
-   utb = 53736.0;
-   xp = 2.55060238e-7;
-   yp = 1.860359247e-6;
-
-   iauC2t00a(tta, ttb, uta, utb, xp, yp, rc2t);
-
-   vvd(rc2t[0][0], -0.1810332128307182668, 1e-12,
-       "iauC2t00a", "11", status);
-   vvd(rc2t[0][1], 0.9834769806938457836, 1e-12,
-       "iauC2t00a", "12", status);
-   vvd(rc2t[0][2], 0.6555535638688341725e-4, 1e-12,
-       "iauC2t00a", "13", status);
-
-   vvd(rc2t[1][0], -0.9834768134135984552, 1e-12,
-       "iauC2t00a", "21", status);
-   vvd(rc2t[1][1], -0.1810332203649520727, 1e-12,
-       "iauC2t00a", "22", status);
-   vvd(rc2t[1][2], 0.5749801116141056317e-3, 1e-12,
-       "iauC2t00a", "23", status);
-
-   vvd(rc2t[2][0], 0.5773474014081406921e-3, 1e-12,
-       "iauC2t00a", "31", status);
-   vvd(rc2t[2][1], 0.3961832391770163647e-4, 1e-12,
-       "iauC2t00a", "32", status);
-   vvd(rc2t[2][2], 0.9999998325501692289, 1e-12,
-       "iauC2t00a", "33", status);
-
-}
-
-static void t_c2t00b(int *status)
-/*
-**  - - - - - - - - -
-**   t _ c 2 t 0 0 b
-**  - - - - - - - - -
-**
-**  Test iauC2t00b function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2t00b, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double tta, ttb, uta, utb, xp, yp, rc2t[3][3];
-
-
-   tta = 2400000.5;
-   uta = 2400000.5;
-   ttb = 53736.0;
-   utb = 53736.0;
-   xp = 2.55060238e-7;
-   yp = 1.860359247e-6;
-
-   iauC2t00b(tta, ttb, uta, utb, xp, yp, rc2t);
-
-   vvd(rc2t[0][0], -0.1810332128439678965, 1e-12,
-       "iauC2t00b", "11", status);
-   vvd(rc2t[0][1], 0.9834769806913872359, 1e-12,
-       "iauC2t00b", "12", status);
-   vvd(rc2t[0][2], 0.6555565082458415611e-4, 1e-12,
-       "iauC2t00b", "13", status);
-
-   vvd(rc2t[1][0], -0.9834768134115435923, 1e-12,
-       "iauC2t00b", "21", status);
-   vvd(rc2t[1][1], -0.1810332203784001946, 1e-12,
-       "iauC2t00b", "22", status);
-   vvd(rc2t[1][2], 0.5749793922030017230e-3, 1e-12,
-       "iauC2t00b", "23", status);
-
-   vvd(rc2t[2][0], 0.5773467471863534901e-3, 1e-12,
-       "iauC2t00b", "31", status);
-   vvd(rc2t[2][1], 0.3961790411549945020e-4, 1e-12,
-       "iauC2t00b", "32", status);
-   vvd(rc2t[2][2], 0.9999998325505635738, 1e-12,
-       "iauC2t00b", "33", status);
-
-}
-
-static void t_c2t06a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ c 2 t 0 6 a
-**  - - - - - - - - -
-**
-**  Test iauC2t06a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2t06a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double tta, ttb, uta, utb, xp, yp, rc2t[3][3];
-
-
-   tta = 2400000.5;
-   uta = 2400000.5;
-   ttb = 53736.0;
-   utb = 53736.0;
-   xp = 2.55060238e-7;
-   yp = 1.860359247e-6;
-
-   iauC2t06a(tta, ttb, uta, utb, xp, yp, rc2t);
-
-   vvd(rc2t[0][0], -0.1810332128305897282, 1e-12,
-       "iauC2t06a", "11", status);
-   vvd(rc2t[0][1], 0.9834769806938592296, 1e-12,
-       "iauC2t06a", "12", status);
-   vvd(rc2t[0][2], 0.6555550962998436505e-4, 1e-12,
-       "iauC2t06a", "13", status);
-
-   vvd(rc2t[1][0], -0.9834768134136214897, 1e-12,
-       "iauC2t06a", "21", status);
-   vvd(rc2t[1][1], -0.1810332203649130832, 1e-12,
-       "iauC2t06a", "22", status);
-   vvd(rc2t[1][2], 0.5749800844905594110e-3, 1e-12,
-       "iauC2t06a", "23", status);
-
-   vvd(rc2t[2][0], 0.5773474024748545878e-3, 1e-12,
-       "iauC2t06a", "31", status);
-   vvd(rc2t[2][1], 0.3961816829632690581e-4, 1e-12,
-       "iauC2t06a", "32", status);
-   vvd(rc2t[2][2], 0.9999998325501747785, 1e-12,
-       "iauC2t06a", "33", status);
-
-}
-
-static void t_c2tcio(int *status)
-/*
-**  - - - - - - - - -
-**   t _ c 2 t c i o
-**  - - - - - - - - -
-**
-**  Test iauC2tcio function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2tcio, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rc2i[3][3], era, rpom[3][3], rc2t[3][3];
-
-
-   rc2i[0][0] =  0.9999998323037164738;
-   rc2i[0][1] =  0.5581526271714303683e-9;
-   rc2i[0][2] = -0.5791308477073443903e-3;
-
-   rc2i[1][0] = -0.2384266227524722273e-7;
-   rc2i[1][1] =  0.9999999991917404296;
-   rc2i[1][2] = -0.4020594955030704125e-4;
-
-   rc2i[2][0] =  0.5791308472168153320e-3;
-   rc2i[2][1] =  0.4020595661593994396e-4;
-   rc2i[2][2] =  0.9999998314954572365;
-
-   era = 1.75283325530307;
-
-   rpom[0][0] =  0.9999999999999674705;
-   rpom[0][1] = -0.1367174580728847031e-10;
-   rpom[0][2] =  0.2550602379999972723e-6;
-
-   rpom[1][0] =  0.1414624947957029721e-10;
-   rpom[1][1] =  0.9999999999982694954;
-   rpom[1][2] = -0.1860359246998866338e-5;
-
-   rpom[2][0] = -0.2550602379741215275e-6;
-   rpom[2][1] =  0.1860359247002413923e-5;
-   rpom[2][2] =  0.9999999999982369658;
-
-
-   iauC2tcio(rc2i, era, rpom, rc2t);
-
-   vvd(rc2t[0][0], -0.1810332128307110439, 1e-12,
-       "iauC2tcio", "11", status);
-   vvd(rc2t[0][1], 0.9834769806938470149, 1e-12,
-       "iauC2tcio", "12", status);
-   vvd(rc2t[0][2], 0.6555535638685466874e-4, 1e-12,
-       "iauC2tcio", "13", status);
-
-   vvd(rc2t[1][0], -0.9834768134135996657, 1e-12,
-       "iauC2tcio", "21", status);
-   vvd(rc2t[1][1], -0.1810332203649448367, 1e-12,
-       "iauC2tcio", "22", status);
-   vvd(rc2t[1][2], 0.5749801116141106528e-3, 1e-12,
-       "iauC2tcio", "23", status);
-
-   vvd(rc2t[2][0], 0.5773474014081407076e-3, 1e-12,
-       "iauC2tcio", "31", status);
-   vvd(rc2t[2][1], 0.3961832391772658944e-4, 1e-12,
-       "iauC2tcio", "32", status);
-   vvd(rc2t[2][2], 0.9999998325501691969, 1e-12,
-       "iauC2tcio", "33", status);
-
-}
-
-static void t_c2teqx(int *status)
-/*
-**  - - - - - - - - -
-**   t _ c 2 t e q x
-**  - - - - - - - - -
-**
-**  Test iauC2teqx function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2teqx, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rbpn[3][3], gst, rpom[3][3], rc2t[3][3];
-
-
-   rbpn[0][0] =  0.9999989440476103608;
-   rbpn[0][1] = -0.1332881761240011518e-2;
-   rbpn[0][2] = -0.5790767434730085097e-3;
-
-   rbpn[1][0] =  0.1332858254308954453e-2;
-   rbpn[1][1] =  0.9999991109044505944;
-   rbpn[1][2] = -0.4097782710401555759e-4;
-
-   rbpn[2][0] =  0.5791308472168153320e-3;
-   rbpn[2][1] =  0.4020595661593994396e-4;
-   rbpn[2][2] =  0.9999998314954572365;
-
-   gst = 1.754166138040730516;
-
-   rpom[0][0] =  0.9999999999999674705;
-   rpom[0][1] = -0.1367174580728847031e-10;
-   rpom[0][2] =  0.2550602379999972723e-6;
-
-   rpom[1][0] =  0.1414624947957029721e-10;
-   rpom[1][1] =  0.9999999999982694954;
-   rpom[1][2] = -0.1860359246998866338e-5;
-
-   rpom[2][0] = -0.2550602379741215275e-6;
-   rpom[2][1] =  0.1860359247002413923e-5;
-   rpom[2][2] =  0.9999999999982369658;
-
-   iauC2teqx(rbpn, gst, rpom, rc2t);
-
-   vvd(rc2t[0][0], -0.1810332128528685730, 1e-12,
-       "iauC2teqx", "11", status);
-   vvd(rc2t[0][1], 0.9834769806897685071, 1e-12,
-       "iauC2teqx", "12", status);
-   vvd(rc2t[0][2], 0.6555535639982634449e-4, 1e-12,
-       "iauC2teqx", "13", status);
-
-   vvd(rc2t[1][0], -0.9834768134095211257, 1e-12,
-       "iauC2teqx", "21", status);
-   vvd(rc2t[1][1], -0.1810332203871023800, 1e-12,
-       "iauC2teqx", "22", status);
-   vvd(rc2t[1][2], 0.5749801116126438962e-3, 1e-12,
-       "iauC2teqx", "23", status);
-
-   vvd(rc2t[2][0], 0.5773474014081539467e-3, 1e-12,
-       "iauC2teqx", "31", status);
-   vvd(rc2t[2][1], 0.3961832391768640871e-4, 1e-12,
-       "iauC2teqx", "32", status);
-   vvd(rc2t[2][2], 0.9999998325501691969, 1e-12,
-       "iauC2teqx", "33", status);
-
-}
-
-static void t_c2tpe(int *status)
-/*
-**  - - - - - - - -
-**   t _ c 2 t p e
-**  - - - - - - - -
-**
-**  Test iauC2tpe function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2tpe, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double tta, ttb, uta, utb, dpsi, deps, xp, yp, rc2t[3][3];
-
-
-   tta = 2400000.5;
-   uta = 2400000.5;
-   ttb = 53736.0;
-   utb = 53736.0;
-   deps =  0.4090789763356509900;
-   dpsi = -0.9630909107115582393e-5;
-   xp = 2.55060238e-7;
-   yp = 1.860359247e-6;
-
-   iauC2tpe(tta, ttb, uta, utb, dpsi, deps, xp, yp, rc2t);
-
-   vvd(rc2t[0][0], -0.1813677995763029394, 1e-12,
-       "iauC2tpe", "11", status);
-   vvd(rc2t[0][1], 0.9023482206891683275, 1e-12,
-       "iauC2tpe", "12", status);
-   vvd(rc2t[0][2], -0.3909902938641085751, 1e-12,
-       "iauC2tpe", "13", status);
-
-   vvd(rc2t[1][0], -0.9834147641476804807, 1e-12,
-       "iauC2tpe", "21", status);
-   vvd(rc2t[1][1], -0.1659883635434995121, 1e-12,
-       "iauC2tpe", "22", status);
-   vvd(rc2t[1][2], 0.7309763898042819705e-1, 1e-12,
-       "iauC2tpe", "23", status);
-
-   vvd(rc2t[2][0], 0.1059685430673215247e-2, 1e-12,
-       "iauC2tpe", "31", status);
-   vvd(rc2t[2][1], 0.3977631855605078674, 1e-12,
-       "iauC2tpe", "32", status);
-   vvd(rc2t[2][2], 0.9174875068792735362, 1e-12,
-       "iauC2tpe", "33", status);
-
-}
-
-static void t_c2txy(int *status)
-/*
-**  - - - - - - - -
-**   t _ c 2 t x y
-**  - - - - - - - -
-**
-**  Test iauC2txy function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauC2txy, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double tta, ttb, uta, utb, x, y, xp, yp, rc2t[3][3];
-
-
-   tta = 2400000.5;
-   uta = 2400000.5;
-   ttb = 53736.0;
-   utb = 53736.0;
-   x = 0.5791308486706011000e-3;
-   y = 0.4020579816732961219e-4;
-   xp = 2.55060238e-7;
-   yp = 1.860359247e-6;
-
-   iauC2txy(tta, ttb, uta, utb, x, y, xp, yp, rc2t);
-
-   vvd(rc2t[0][0], -0.1810332128306279253, 1e-12,
-       "iauC2txy", "11", status);
-   vvd(rc2t[0][1], 0.9834769806938520084, 1e-12,
-       "iauC2txy", "12", status);
-   vvd(rc2t[0][2], 0.6555551248057665829e-4, 1e-12,
-       "iauC2txy", "13", status);
-
-   vvd(rc2t[1][0], -0.9834768134136142314, 1e-12,
-       "iauC2txy", "21", status);
-   vvd(rc2t[1][1], -0.1810332203649529312, 1e-12,
-       "iauC2txy", "22", status);
-   vvd(rc2t[1][2], 0.5749800843594139912e-3, 1e-12,
-       "iauC2txy", "23", status);
-
-   vvd(rc2t[2][0], 0.5773474028619264494e-3, 1e-12,
-       "iauC2txy", "31", status);
-   vvd(rc2t[2][1], 0.3961816546911624260e-4, 1e-12,
-       "iauC2txy", "32", status);
-   vvd(rc2t[2][2], 0.9999998325501746670, 1e-12,
-       "iauC2txy", "33", status);
-
-}
-
-static void t_cal2jd(int *status)
-/*
-**  - - - - - - - - -
-**   t _ c a l 2 j d
-**  - - - - - - - - -
-**
-**  Test iauCal2jd function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauCal2jd, vvd, viv
-**
-**  This revision:  2008 May 27
-*/
-{
-   int j;
-   double djm0, djm;
-
-
-   j = iauCal2jd(2003, 06, 01, &djm0, &djm);
-
-   vvd(djm0, 2400000.5, 0.0, "iauCal2jd", "djm0", status);
-   vvd(djm,    52791.0, 0.0, "iauCal2jd", "djm", status);
-
-   viv(j, 0, "iauCal2jd", "j", status);
-
-}
-
-static void t_cp(int *status)
-/*
-**  - - - - -
-**   t _ c p
-**  - - - - -
-**
-**  Test iauCp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauCp, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double p[3], c[3];
-
-
-   p[0] =  0.3;
-   p[1] =  1.2;
-   p[2] = -2.5;
-
-   iauCp(p, c);
-
-   vvd(c[0],  0.3, 0.0, "iauCp", "1", status);
-   vvd(c[1],  1.2, 0.0, "iauCp", "2", status);
-   vvd(c[2], -2.5, 0.0, "iauCp", "3", status);
-}
-
-static void t_cpv(int *status)
-/*
-**  - - - - - -
-**   t _ c p v
-**  - - - - - -
-**
-**  Test iauCpv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauCpv, vvd
-**
-**  This revision:  2008 May 25
-*/
-{
-   double pv[2][3], c[2][3];
-
-
-   pv[0][0] =  0.3;
-   pv[0][1] =  1.2;
-   pv[0][2] = -2.5;
-
-   pv[1][0] = -0.5;
-   pv[1][1] =  3.1;
-   pv[1][2] =  0.9;
-
-   iauCpv(pv, c);
-
-   vvd(c[0][0],  0.3, 0.0, "iauCpv", "p1", status);
-   vvd(c[0][1],  1.2, 0.0, "iauCpv", "p2", status);
-   vvd(c[0][2], -2.5, 0.0, "iauCpv", "p3", status);
-
-   vvd(c[1][0], -0.5, 0.0, "iauCpv", "v1", status);
-   vvd(c[1][1],  3.1, 0.0, "iauCpv", "v2", status);
-   vvd(c[1][2],  0.9, 0.0, "iauCpv", "v3", status);
-
-}
-
-static void t_cr(int *status)
-/*
-**  - - - - -
-**   t _ c r
-**  - - - - -
-**
-**  Test iauCr function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauCr, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double r[3][3], c[3][3];
-
-
-   r[0][0] = 2.0;
-   r[0][1] = 3.0;
-   r[0][2] = 2.0;
-
-   r[1][0] = 3.0;
-   r[1][1] = 2.0;
-   r[1][2] = 3.0;
-
-   r[2][0] = 3.0;
-   r[2][1] = 4.0;
-   r[2][2] = 5.0;
-
-   iauCr(r, c);
-
-   vvd(c[0][0], 2.0, 0.0, "iauCr", "11", status);
-   vvd(c[0][1], 3.0, 0.0, "iauCr", "12", status);
-   vvd(c[0][2], 2.0, 0.0, "iauCr", "13", status);
-
-   vvd(c[1][0], 3.0, 0.0, "iauCr", "21", status);
-   vvd(c[1][1], 2.0, 0.0, "iauCr", "22", status);
-   vvd(c[1][2], 3.0, 0.0, "iauCr", "23", status);
-
-   vvd(c[2][0], 3.0, 0.0, "iauCr", "31", status);
-   vvd(c[2][1], 4.0, 0.0, "iauCr", "32", status);
-   vvd(c[2][2], 5.0, 0.0, "iauCr", "33", status);
-}
-
-static void t_d2dtf(int *status )
-/*
-**  - - - - - - - -
-**   t _ d 2 d t f
-**  - - - - - - - -
-**
-**  Test iauD2dtf function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauD2dtf, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   int j, iy, im, id, ihmsf[4];
-
-
-   j = iauD2dtf("UTC", 5, 2400000.5, 49533.99999, &iy, &im, &id, ihmsf);
-
-   viv(iy, 1994, "iauD2dtf", "y", status);
-   viv(im, 6, "iauD2dtf", "mo", status);
-   viv(id, 30, "iauD2dtf", "d", status);
-   viv(ihmsf[0], 23, "iauD2dtf", "h", status);
-   viv(ihmsf[1], 59, "iauD2dtf", "m", status);
-   viv(ihmsf[2], 60, "iauD2dtf", "s", status);
-   viv(ihmsf[3], 13599, "iauD2dtf", "f", status);
-   viv(j, 0, "iauD2dtf", "j", status);
-
-}
-
-static void t_d2tf(int *status)
-/*
-**  - - - - - - -
-**   t _ d 2 t f
-**  - - - - - - -
-**
-**  Test iauD2tf function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauD2tf, viv, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   int ihmsf[4];
-   char s;
-
-
-   iauD2tf(4, -0.987654321, &s, ihmsf);
-
-   viv((int)s, '-', "iauD2tf", "s", status);
-
-   viv(ihmsf[0], 23, "iauD2tf", "0", status);
-   viv(ihmsf[1], 42, "iauD2tf", "1", status);
-   viv(ihmsf[2], 13, "iauD2tf", "2", status);
-   viv(ihmsf[3], 3333, "iauD2tf", "3", status);
-
-}
-
-static void t_dat(int *status)
-/*
-**  - - - - - -
-**   t _ d a t
-**  - - - - - -
-**
-**  Test iauDat function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauDat, vvd, viv
-**
-**  This revision:  2008 November 29
-*/
-{
-   int j;
-   double deltat;
-
-
-   j = iauDat(2003, 6, 1, 0.0, &deltat);
-
-   vvd(deltat, 32.0, 0.0, "iauDat", "d1", status);
-   viv(j, 0, "iauDat", "j1", status);
-
-   j = iauDat(2008, 1, 17, 0.0, &deltat);
-
-   vvd(deltat, 33.0, 0.0, "iauDat", "d2", status);
-   viv(j, 0, "iauDat", "j2", status);
-
-}
-
-static void t_dtdb(int *status)
-/*
-**  - - - - - - -
-**   t _ d t d b
-**  - - - - - - -
-**
-**  Test iauDtdb function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauDtdb, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double dtdb;
-
-
-   dtdb = iauDtdb(2448939.5, 0.123, 0.76543, 5.0123, 5525.242, 3190.0);
-
-   vvd(dtdb, -0.1280368005936998991e-2, 1e-15, "iauDtdb", "", status);
-
-}
-
-static void t_dtf2d(int *status)
-/*
-**  - - - - - - - -
-**   t _ d t f 2 d
-**  - - - - - - - -
-**
-**  Test iauDtf2d function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauDtf2d, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double u1, u2;
-   int j;
-
-
-   j = iauDtf2d("UTC", 1994, 6, 30, 23, 59, 60.13599, &u1, &u2);
-
-   vvd(u1+u2, 2449534.49999, 1e-6, "iauDtf2d", "u", status);
-   viv(j, 0, "iauDtf2d", "j", status);
-
-}
-
-static void t_ee00(int *status)
-/*
-**  - - - - - - -
-**   t _ e e 0 0
-**  - - - - - - -
-**
-**  Test iauEe00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEe00, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double epsa, dpsi, ee;
-
-
-   epsa =  0.4090789763356509900;
-   dpsi = -0.9630909107115582393e-5;
-
-   ee = iauEe00(2400000.5, 53736.0, epsa, dpsi);
-
-   vvd(ee, -0.8834193235367965479e-5, 1e-18, "iauEe00", "", status);
-
-}
-
-static void t_ee00a(int *status)
-/*
-**  - - - - - - - -
-**   t _ e e 0 0 a
-**  - - - - - - - -
-**
-**  Test iauEe00a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEe00a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double ee;
-
-
-   ee = iauEe00a(2400000.5, 53736.0);
-
-   vvd(ee, -0.8834192459222588227e-5, 1e-18, "iauEe00a", "", status);
-
-}
-
-static void t_ee00b(int *status)
-/*
-**  - - - - - - - -
-**   t _ e e 0 0 b
-**  - - - - - - - -
-**
-**  Test iauEe00b function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEe00b, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double ee;
-
-
-   ee = iauEe00b(2400000.5, 53736.0);
-
-   vvd(ee, -0.8835700060003032831e-5, 1e-18, "iauEe00b", "", status);
-
-}
-
-static void t_ee06a(int *status)
-/*
-**  - - - - - - - -
-**   t _ e e 0 6 a
-**  - - - - - - - -
-**
-**  Test iauEe06a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEe06a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double ee;
-
-
-   ee = iauEe06a(2400000.5, 53736.0);
-
-   vvd(ee, -0.8834195072043790156e-5, 1e-15, "iauEe06a", "", status);
-}
-
-static void t_eect00(int *status)
-/*
-**  - - - - - - - - -
-**   t _ e e c t 0 0
-**  - - - - - - - - -
-**
-**  Test iauEect00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEect00, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double eect;
-
-
-   eect = iauEect00(2400000.5, 53736.0);
-
-   vvd(eect, 0.2046085004885125264e-8, 1e-20, "iauEect00", "", status);
-
-}
-
-static void t_eform(int *status)
-/*
-**  - - - - - - - -
-**   t _ e f o r m
-**  - - - - - - - -
-**
-**  Test iauEform function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEform, viv, vvd
-**
-**  This revision:  2012 February 23
-*/
-{
-   int j;
-   double a, f;
-
-   j = iauEform(0, &a, &f);
-
-   viv(j, -1, "iauEform", "j0", status);
-
-   j = iauEform(WGS84, &a, &f);
-
-   viv(j, 0, "iauEform", "j1", status);
-   vvd(a, 6378137.0, 1e-10, "iauEform", "a1", status);
-   vvd(f, 0.0033528106647474807, 1e-18, "iauEform", "f1", status);
-
-   j = iauEform(GRS80, &a, &f);
-
-   viv(j, 0, "iauEform", "j2", status);
-   vvd(a, 6378137.0, 1e-10, "iauEform", "a2", status);
-   vvd(f, 0.0033528106811823189, 1e-18, "iauEform", "f2", status);
-
-   j = iauEform(WGS72, &a, &f);
-
-   viv(j, 0, "iauEform", "j2", status);
-   vvd(a, 6378135.0, 1e-10, "iauEform", "a3", status);
-   vvd(f, 0.0033527794541675049, 1e-18, "iauEform", "f3", status);
-
-   j = iauEform(4, &a, &f);
-   viv(j, -1, "iauEform", "j3", status);
-}
-
-static void t_eo06a(int *status)
-/*
-**  - - - - - - - -
-**   t _ e o 0 6 a
-**  - - - - - - - -
-**
-**  Test iauEo06a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEo06a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double eo;
-
-
-   eo = iauEo06a(2400000.5, 53736.0);
-
-   vvd(eo, -0.1332882371941833644e-2, 1e-15, "iauEo06a", "", status);
-
-}
-
-static void t_eors(int *status)
-/*
-**  - - - - - - -
-**   t _ e o r s
-**  - - - - - - -
-**
-**  Test iauEors function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEors, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rnpb[3][3], s, eo;
-
-
-   rnpb[0][0] =  0.9999989440476103608;
-   rnpb[0][1] = -0.1332881761240011518e-2;
-   rnpb[0][2] = -0.5790767434730085097e-3;
-
-   rnpb[1][0] =  0.1332858254308954453e-2;
-   rnpb[1][1] =  0.9999991109044505944;
-   rnpb[1][2] = -0.4097782710401555759e-4;
-
-   rnpb[2][0] =  0.5791308472168153320e-3;
-   rnpb[2][1] =  0.4020595661593994396e-4;
-   rnpb[2][2] =  0.9999998314954572365;
-
-   s = -0.1220040848472271978e-7;
-
-   eo = iauEors(rnpb, s);
-
-   vvd(eo, -0.1332882715130744606e-2, 1e-14, "iauEors", "", status);
-
-}
-
-static void t_epb(int *status)
-/*
-**  - - - - - -
-**   t _ e p b
-**  - - - - - -
-**
-**  Test iauEpb function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEpb, vvd
-**
-**  This revision:  2008 May 27
-*/
-{
-   double epb;
-
-
-   epb = iauEpb(2415019.8135, 30103.18648);
-
-   vvd(epb, 1982.418424159278580, 1e-12, "iauEpb", "", status);
-
-}
-
-static void t_epb2jd(int *status)
-/*
-**  - - - - - - - - -
-**   t _ e p b 2 j d
-**  - - - - - - - - -
-**
-**  Test iauEpb2jd function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEpb2jd, vvd
-**
-**  This revision:  2008 November 29
-*/
-{
-   double epb, djm0, djm;
-
-
-   epb = 1957.3;
-
-   iauEpb2jd(epb, &djm0, &djm);
-
-   vvd(djm0, 2400000.5, 1e-9, "iauEpb2jd", "djm0", status);
-   vvd(djm, 35948.1915101513, 1e-9, "iauEpb2jd", "mjd", status);
-
-}
-
-static void t_epj(int *status)
-/*
-**  - - - - - -
-**   t _ e p j
-**  - - - - - -
-**
-**  Test iauEpj function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEpj, vvd
-**
-**  This revision:  2008 May 27
-*/
-{
-   double epj;
-
-
-   epj = iauEpj(2451545, -7392.5);
-
-   vvd(epj, 1979.760438056125941, 1e-12, "iauEpj", "", status);
-
-}
-
-static void t_epj2jd(int *status)
-/*
-**  - - - - - - - - -
-**   t _ e p j 2 j d
-**  - - - - - - - - -
-**
-**  Test iauEpj2jd function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEpj2jd, vvd
-**
-**  This revision:  2008 November 29
-*/
-{
-   double epj, djm0, djm;
-
-
-   epj = 1996.8;
-
-   iauEpj2jd(epj, &djm0, &djm);
-
-   vvd(djm0, 2400000.5, 1e-9, "iauEpj2jd", "djm0", status);
-   vvd(djm,    50375.7, 1e-9, "iauEpj2jd", "mjd",  status);
-
-}
-
-static void t_epv00(int *status)
-/*
-**  - - - - - - - -
-**   t _ e p v 0 0
-**  - - - - - - - -
-**
-**  Test iauEpv00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called: iauEpv00, vvd, viv
-**
-**  This revision:  2008 November 28
-*/
-{
-   double pvh[2][3], pvb[2][3];
-   int j;
-
-
-   j = iauEpv00(2400000.5, 53411.52501161, pvh, pvb);
-
-   vvd(pvh[0][0], -0.7757238809297706813, 1e-14,
-       "iauEpv00", "ph(x)", status);
-   vvd(pvh[0][1], 0.5598052241363340596, 1e-14,
-       "iauEpv00", "ph(y)", status);
-   vvd(pvh[0][2], 0.2426998466481686993, 1e-14,
-       "iauEpv00", "ph(z)", status);
-
-   vvd(pvh[1][0], -0.1091891824147313846e-1, 1e-15,
-       "iauEpv00", "vh(x)", status);
-   vvd(pvh[1][1], -0.1247187268440845008e-1, 1e-15,
-       "iauEpv00", "vh(y)", status);
-   vvd(pvh[1][2], -0.5407569418065039061e-2, 1e-15,
-       "iauEpv00", "vh(z)", status);
-
-   vvd(pvb[0][0], -0.7714104440491111971, 1e-14,
-       "iauEpv00", "pb(x)", status);
-   vvd(pvb[0][1], 0.5598412061824171323, 1e-14,
-       "iauEpv00", "pb(y)", status);
-   vvd(pvb[0][2], 0.2425996277722452400, 1e-14,
-       "iauEpv00", "pb(z)", status);
-
-   vvd(pvb[1][0], -0.1091874268116823295e-1, 1e-15,
-       "iauEpv00", "vb(x)", status);
-   vvd(pvb[1][1], -0.1246525461732861538e-1, 1e-15,
-       "iauEpv00", "vb(y)", status);
-   vvd(pvb[1][2], -0.5404773180966231279e-2, 1e-15,
-       "iauEpv00", "vb(z)", status);
-
-   viv(j, 0, "iauEpv00", "j", status);
-
-}
-
-static void t_eqeq94(int *status)
-/*
-**  - - - - - - - - -
-**   t _ e q e q 9 4
-**  - - - - - - - - -
-**
-**  Test iauEqeq94 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEqeq94, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double eqeq;
-
-
-   eqeq = iauEqeq94(2400000.5, 41234.0);
-
-   vvd(eqeq, 0.5357758254609256894e-4, 1e-17, "iauEqeq94", "", status);
-
-}
-
-static void t_era00(int *status)
-/*
-**  - - - - - - - -
-**   t _ e r a 0 0
-**  - - - - - - - -
-**
-**  Test iauEra00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauEra00, vvd
-**
-**  This revision:  2008 May 26
-*/
-{
-   double era00;
-
-
-   era00 = iauEra00(2400000.5, 54388.0);
-
-   vvd(era00, 0.4022837240028158102, 1e-12, "iauEra00", "", status);
-
-}
-
-static void t_fad03(int *status)
-/*
-**  - - - - - - - -
-**   t _ f a d 0 3
-**  - - - - - - - -
-**
-**  Test iauFad03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFad03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFad03(0.80), 1.946709205396925672, 1e-12,
-       "iauFad03", "", status);
-}
-
-static void t_fae03(int *status)
-/*
-**  - - - - - - - -
-**   t _ f a e 0 3
-**  - - - - - - - -
-**
-**  Test iauFae03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFae03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFae03(0.80), 1.744713738913081846, 1e-12,
-       "iauFae03", "", status);
-}
-
-static void t_faf03(int *status)
-/*
-**  - - - - - - - -
-**   t _ f a f 0 3
-**  - - - - - - - -
-**
-**  Test iauFaf03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFaf03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFaf03(0.80), 0.2597711366745499518, 1e-12,
-       "iauFaf03", "", status);
-}
-
-static void t_faju03(int *status)
-/*
-**  - - - - - - - - -
-**   t _ f a j u 0 3
-**  - - - - - - - - -
-**
-**  Test iauFaju03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFaju03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFaju03(0.80), 5.275711665202481138, 1e-12,
-       "iauFaju03", "", status);
-}
-
-static void t_fal03(int *status)
-/*
-**  - - - - - - - -
-**   t _ f a l 0 3
-**  - - - - - - - -
-**
-**  Test iauFal03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFal03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFal03(0.80), 5.132369751108684150, 1e-12,
-       "iauFal03", "", status);
-}
-
-static void t_falp03(int *status)
-/*
-**  - - - - - - - - -
-**   t _ f a l p 0 3
-**  - - - - - - - - -
-**
-**  Test iauFalp03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFalp03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFalp03(0.80), 6.226797973505507345, 1e-12,
-      "iauFalp03", "", status);
-}
-
-static void t_fama03(int *status)
-/*
-**  - - - - - - - - -
-**   t _ f a m a 0 3
-**  - - - - - - - - -
-**
-**  Test iauFama03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFama03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFama03(0.80), 3.275506840277781492, 1e-12,
-       "iauFama03", "", status);
-}
-
-static void t_fame03(int *status)
-/*
-**  - - - - - - - - -
-**   t _ f a m e 0 3
-**  - - - - - - - - -
-**
-**  Test iauFame03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFame03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFame03(0.80), 5.417338184297289661, 1e-12,
-       "iauFame03", "", status);
-}
-
-static void t_fane03(int *status)
-/*
-**  - - - - - - - - -
-**   t _ f a n e 0 3
-**  - - - - - - - - -
-**
-**  Test iauFane03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFane03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFane03(0.80), 2.079343830860413523, 1e-12,
-       "iauFane03", "", status);
-}
-
-static void t_faom03(int *status)
-/*
-**  - - - - - - - - -
-**   t _ f a o m 0 3
-**  - - - - - - - - -
-**
-**  Test iauFaom03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFaom03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFaom03(0.80), -5.973618440951302183, 1e-12,
-       "iauFaom03", "", status);
-}
-
-static void t_fapa03(int *status)
-/*
-**  - - - - - - - - -
-**   t _ f a p a 0 3
-**  - - - - - - - - -
-**
-**  Test iauFapa03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFapa03, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   vvd(iauFapa03(0.80), 0.1950884762240000000e-1, 1e-12,
-       "iauFapa03", "", status);
-}
-
-static void t_fasa03(int *status)
-/*
-**  - - - - - - - - -
-**   t _ f a s a 0 3
-**  - - - - - - - - -
-**
-**  Test iauFasa03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFasa03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFasa03(0.80), 5.371574539440827046, 1e-12,
-       "iauFasa03", "", status);
-}
-
-static void t_faur03(int *status)
-/*
-**  - - - - - - - - -
-**   t _ f a u r 0 3
-**  - - - - - - - - -
-**
-**  Test iauFaur03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFaur03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFaur03(0.80), 5.180636450180413523, 1e-12,
-       "iauFaur03", "", status);
-}
-
-static void t_fave03(int *status)
-/*
-**  - - - - - - - - -
-**   t _ f a v e 0 3
-**  - - - - - - - - -
-**
-**  Test iauFave03 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFave03, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   vvd(iauFave03(0.80), 3.424900460533758000, 1e-12,
-       "iauFave03", "", status);
-}
-
-static void t_fk52h(int *status)
-/*
-**  - - - - - - - -
-**   t _ f k 5 2 h
-**  - - - - - - - -
-**
-**  Test iauFk52h function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFk52h, vvd
-**
-**  This revision:  2009 November 6
-*/
-{
-   double r5, d5, dr5, dd5, px5, rv5, rh, dh, drh, ddh, pxh, rvh;
-
-
-   r5  =  1.76779433;
-   d5  = -0.2917517103;
-   dr5 = -1.91851572e-7;
-   dd5 = -5.8468475e-6;
-   px5 =  0.379210;
-   rv5 = -7.6;
-
-   iauFk52h(r5, d5, dr5, dd5, px5, rv5,
-            &rh, &dh, &drh, &ddh, &pxh, &rvh);
-
-   vvd(rh, 1.767794226299947632, 1e-14,
-       "iauFk52h", "ra", status);
-   vvd(dh,  -0.2917516070530391757, 1e-14,
-       "iauFk52h", "dec", status);
-   vvd(drh, -0.19618741256057224e-6,1e-19,
-       "iauFk52h", "dr5", status);
-   vvd(ddh, -0.58459905176693911e-5, 1e-19,
-       "iauFk52h", "dd5", status);
-   vvd(pxh,  0.37921, 1e-14,
-       "iauFk52h", "px", status);
-   vvd(rvh, -7.6000000940000254, 1e-11,
-       "iauFk52h", "rv", status);
-
-}
-
-static void t_fk5hip(int *status)
-/*
-**  - - - - - - - - -
-**   t _ f k 5 h i p
-**  - - - - - - - - -
-**
-**  Test iauFk5hip function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFk5hip, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double r5h[3][3], s5h[3];
-
-
-   iauFk5hip(r5h, s5h);
-
-   vvd(r5h[0][0], 0.9999999999999928638, 1e-14,
-       "iauFk5hip", "11", status);
-   vvd(r5h[0][1], 0.1110223351022919694e-6, 1e-17,
-       "iauFk5hip", "12", status);
-   vvd(r5h[0][2], 0.4411803962536558154e-7, 1e-17,
-       "iauFk5hip", "13", status);
-   vvd(r5h[1][0], -0.1110223308458746430e-6, 1e-17,
-       "iauFk5hip", "21", status);
-   vvd(r5h[1][1], 0.9999999999999891830, 1e-14,
-       "iauFk5hip", "22", status);
-   vvd(r5h[1][2], -0.9647792498984142358e-7, 1e-17,
-       "iauFk5hip", "23", status);
-   vvd(r5h[2][0], -0.4411805033656962252e-7, 1e-17,
-       "iauFk5hip", "31", status);
-   vvd(r5h[2][1], 0.9647792009175314354e-7, 1e-17,
-       "iauFk5hip", "32", status);
-   vvd(r5h[2][2], 0.9999999999999943728, 1e-14,
-       "iauFk5hip", "33", status);
-   vvd(s5h[0], -0.1454441043328607981e-8, 1e-17,
-       "iauFk5hip", "s1", status);
-   vvd(s5h[1], 0.2908882086657215962e-8, 1e-17,
-       "iauFk5hip", "s2", status);
-   vvd(s5h[2], 0.3393695767766751955e-8, 1e-17,
-       "iauFk5hip", "s3", status);
-
-}
-
-static void t_fk5hz(int *status)
-/*
-**  - - - - - - - -
-**   t _ f k 5 h z
-**  - - - - - - - -
-**
-**  Test iauFk5hz function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFk5hz, vvd
-**
-**  This revision:  2008 May 26
-*/
-{
-   double r5, d5, rh, dh;
-
-
-   r5 =  1.76779433;
-   d5 = -0.2917517103;
-
-   iauFk5hz(r5, d5, 2400000.5, 54479.0, &rh, &dh);
-
-   vvd(rh,  1.767794191464423978, 1e-12, "iauFk5hz", "ra", status);
-   vvd(dh, -0.2917516001679884419, 1e-12, "iauFk5hz", "dec", status);
-
-}
-
-static void t_fw2m(int *status)
-/*
-**  - - - - - - -
-**   t _ f w 2 m
-**  - - - - - - -
-**
-**  Test iauFw2m function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFw2m, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double gamb, phib, psi, eps, r[3][3];
-
-
-   gamb = -0.2243387670997992368e-5;
-   phib =  0.4091014602391312982;
-   psi  = -0.9501954178013015092e-3;
-   eps  =  0.4091014316587367472;
-
-   iauFw2m(gamb, phib, psi, eps, r);
-
-   vvd(r[0][0], 0.9999995505176007047, 1e-12,
-       "iauFw2m", "11", status);
-   vvd(r[0][1], 0.8695404617348192957e-3, 1e-12,
-       "iauFw2m", "12", status);
-   vvd(r[0][2], 0.3779735201865582571e-3, 1e-12,
-       "iauFw2m", "13", status);
-
-   vvd(r[1][0], -0.8695404723772016038e-3, 1e-12,
-       "iauFw2m", "21", status);
-   vvd(r[1][1], 0.9999996219496027161, 1e-12,
-       "iauFw2m", "22", status);
-   vvd(r[1][2], -0.1361752496887100026e-6, 1e-12,
-       "iauFw2m", "23", status);
-
-   vvd(r[2][0], -0.3779734957034082790e-3, 1e-12,
-       "iauFw2m", "31", status);
-   vvd(r[2][1], -0.1924880848087615651e-6, 1e-12,
-       "iauFw2m", "32", status);
-   vvd(r[2][2], 0.9999999285679971958, 1e-12,
-       "iauFw2m", "33", status);
-
-}
-
-static void t_fw2xy(int *status)
-/*
-**  - - - - - - - -
-**   t _ f w 2 x y
-**  - - - - - - - -
-**
-**  Test iauFw2xy function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauFw2xy, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double gamb, phib, psi, eps, x, y;
-
-
-   gamb = -0.2243387670997992368e-5;
-   phib =  0.4091014602391312982;
-   psi  = -0.9501954178013015092e-3;
-   eps  =  0.4091014316587367472;
-
-   iauFw2xy(gamb, phib, psi, eps, &x, &y);
-
-   vvd(x, -0.3779734957034082790e-3, 1e-14, "iauFw2xy", "x", status);
-   vvd(y, -0.1924880848087615651e-6, 1e-14, "iauFw2xy", "y", status);
-
-}
-
-static void t_gc2gd(int *status)
-/*
-**  - - - - - - - -
-**   t _ g c 2 g d
-**  - - - - - - - -
-**
-**  Test iauGc2gd function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGc2gd, viv, vvd
-**
-**  This revision:  2012 February 23
-*/
-{
-   int j;
-   double xyz[] = {2e6, 3e6, 5.244e6};
-   double e, p, h;
-
-   j = iauGc2gd(0, xyz, &e, &p, &h);
-
-   viv(j, -1, "iauGc2gd", "j0", status);
-
-   j = iauGc2gd(WGS84, xyz, &e, &p, &h);
-
-   viv(j, 0, "iauGc2gd", "j1", status);
-   vvd(e, 0.98279372324732907, 1e-14, "iauGc2gd", "e1", status);
-   vvd(p, 0.97160184819075459, 1e-14, "iauGc2gd", "p1", status);
-   vvd(h, 331.41724614260599, 1e-8, "iauGc2gd", "h1", status);
-
-   j = iauGc2gd(GRS80, xyz, &e, &p, &h);
-
-   viv(j, 0, "iauGc2gd", "j2", status);
-   vvd(e, 0.98279372324732907, 1e-14, "iauGc2gd", "e2", status);
-   vvd(p, 0.97160184820607853, 1e-14, "iauGc2gd", "p2", status);
-   vvd(h, 331.41731754844348, 1e-8, "iauGc2gd", "h2", status);
-
-   j = iauGc2gd(WGS72, xyz, &e, &p, &h);
-
-   viv(j, 0, "iauGc2gd", "j3", status);
-   vvd(e, 0.98279372324732907, 1e-14, "iauGc2gd", "e3", status);
-   vvd(p, 0.97160181811015119, 1e-14, "iauGc2gd", "p3", status);
-   vvd(h, 333.27707261303181, 1e-8, "iauGc2gd", "h3", status);
-
-   j = iauGc2gd(4, xyz, &e, &p, &h);
-
-   viv(j, -1, "iauGc2gd", "j4", status);
-}
-
-static void t_gc2gde(int *status)
-/*
-**  - - - - - - - - -
-**   t _ g c 2 g d e
-**  - - - - - - - - -
-**
-**  Test iauGc2gde function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGc2gde, viv, vvd
-**
-**  This revision:  2010 September 7
-*/
-{
-   int j;
-   double a = 6378136.0, f = 0.0033528;
-   double xyz[] = {2e6, 3e6, 5.244e6};
-   double e, p, h;
-
-   j = iauGc2gde(a, f, xyz, &e, &p, &h);
-
-   viv(j, 0, "iauGc2gde", "j", status);
-   vvd(e, 0.98279372324732907, 1e-14, "iauGc2gde", "e", status);
-   vvd(p, 0.97160183775704115, 1e-14, "iauGc2gde", "p", status);
-   vvd(h, 332.36862495764397, 1e-8, "iauGc2gde", "h", status);
-}
-
-static void t_gd2gc(int *status)
-/*
-**  - - - - - - - -
-**   t _ g d 2 g c
-**  - - - - - - - -
-**
-**  Test iauGd2gc function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGd2gc, viv, vvd
-**
-**  This revision:  2012 February 23
-*/
-{
-   int j;
-   double e = 3.1, p = -0.5, h = 2500.0;
-   double xyz[3];
-
-   j = iauGd2gc(0, e, p, h, xyz);
-
-   viv(j, -1, "iauGd2gc", "j0", status);
-
-   j = iauGd2gc(WGS84, e, p, h, xyz);
-
-   viv(j, 0, "iauGd2gc", "j1", status);
-   vvd(xyz[0], -5599000.5577049947, 1e-7, "iauGd2gc", "0/1", status);
-   vvd(xyz[1], 233011.67223479203, 1e-7, "iauGd2gc", "1/1", status);
-   vvd(xyz[2], -3040909.4706983363, 1e-7, "iauGd2gc", "2/1", status);
-
-   j = iauGd2gc(GRS80, e, p, h, xyz);
-
-   viv(j, 0, "iauGd2gc", "j2", status);
-   vvd(xyz[0], -5599000.5577260984, 1e-7, "iauGd2gc", "0/2", status);
-   vvd(xyz[1], 233011.6722356703, 1e-7, "iauGd2gc", "1/2", status);
-   vvd(xyz[2], -3040909.4706095476, 1e-7, "iauGd2gc", "2/2", status);
-
-   j = iauGd2gc(WGS72, e, p, h, xyz);
-
-   viv(j, 0, "iauGd2gc", "j3", status);
-   vvd(xyz[0], -5598998.7626301490, 1e-7, "iauGd2gc", "0/3", status);
-   vvd(xyz[1], 233011.5975297822, 1e-7, "iauGd2gc", "1/3", status);
-   vvd(xyz[2], -3040908.6861467111, 1e-7, "iauGd2gc", "2/3", status);
-
-   j = iauGd2gc(4, e, p, h, xyz);
-
-   viv(j, -1, "iauGd2gc", "j4", status);
-}
-
-static void t_gd2gce(int *status)
-/*
-**  - - - - - - - - -
-**   t _ g d 2 g c e
-**  - - - - - - - - -
-**
-**  Test iauGd2gce function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGd2gce, viv, vvd
-**
-**  This revision:  2010 September 7
-*/
-{
-   int j;
-   double a = 6378136.0, f = 0.0033528;
-   double e = 3.1, p = -0.5, h = 2500.0;
-   double xyz[3];
-
-   j = iauGd2gce(a, f, e, p, h, xyz);
-
-   viv(j, 0, "iauGd2gce", "j", status);
-   vvd(xyz[0], -5598999.6665116328, 1e-7, "iauGd2gce", "0", status);
-   vvd(xyz[1], 233011.63514630572, 1e-7, "iauGd2gce", "1", status);
-   vvd(xyz[2], -3040909.0517314132, 1e-7, "iauGd2gce", "2", status);
-}
-
-static void t_gmst00(int *status)
-/*
-**  - - - - - - - - -
-**   t _ g m s t 0 0
-**  - - - - - - - - -
-**
-**  Test iauGmst00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGmst00, vvd
-**
-**  This revision:  2008 May 26
-*/
-{
-   double theta;
-
-
-   theta = iauGmst00(2400000.5, 53736.0, 2400000.5, 53736.0);
-
-   vvd(theta, 1.754174972210740592, 1e-12, "iauGmst00", "", status);
-
-}
-
-static void t_gmst06(int *status)
-/*
-**  - - - - - - - - -
-**   t _ g m s t 0 6
-**  - - - - - - - - -
-**
-**  Test iauGmst06 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGmst06, vvd
-**
-**  This revision:  2008 May 26
-*/
-{
-   double theta;
-
-
-   theta = iauGmst06(2400000.5, 53736.0, 2400000.5, 53736.0);
-
-   vvd(theta, 1.754174971870091203, 1e-12, "iauGmst06", "", status);
-
-}
-
-static void t_gmst82(int *status)
-/*
-**  - - - - - - - - -
-**   t _ g m s t 8 2
-**  - - - - - - - - -
-**
-**  Test iauGmst82 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGmst82, vvd
-**
-**  This revision:  2008 May 26
-*/
-{
-   double theta;
-
-
-   theta = iauGmst82(2400000.5, 53736.0);
-
-   vvd(theta, 1.754174981860675096, 1e-12, "iauGmst82", "", status);
-
-}
-
-static void t_gst00a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ g s t 0 0 a
-**  - - - - - - - - -
-**
-**  Test iauGst00a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGst00a, vvd
-**
-**  This revision:  2008 May 26
-*/
-{
-   double theta;
-
-
-   theta = iauGst00a(2400000.5, 53736.0, 2400000.5, 53736.0);
-
-   vvd(theta, 1.754166138018281369, 1e-12, "iauGst00a", "", status);
-
-}
-
-static void t_gst00b(int *status)
-/*
-**  - - - - - - - - -
-**   t _ g s t 0 0 b
-**  - - - - - - - - -
-**
-**  Test iauGst00b function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGst00b, vvd
-**
-**  This revision:  2008 May 26
-*/
-{
-   double theta;
-
-
-   theta = iauGst00b(2400000.5, 53736.0);
-
-   vvd(theta, 1.754166136510680589, 1e-12, "iauGst00b", "", status);
-
-}
-
-static void t_gst06(int *status)
-/*
-**  - - - - - - - -
-**   t _ g s t 0 6
-**  - - - - - - - -
-**
-**  Test iauGst06 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGst06, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rnpb[3][3], theta;
-
-
-   rnpb[0][0] =  0.9999989440476103608;
-   rnpb[0][1] = -0.1332881761240011518e-2;
-   rnpb[0][2] = -0.5790767434730085097e-3;
-
-   rnpb[1][0] =  0.1332858254308954453e-2;
-   rnpb[1][1] =  0.9999991109044505944;
-   rnpb[1][2] = -0.4097782710401555759e-4;
-
-   rnpb[2][0] =  0.5791308472168153320e-3;
-   rnpb[2][1] =  0.4020595661593994396e-4;
-   rnpb[2][2] =  0.9999998314954572365;
-
-   theta = iauGst06(2400000.5, 53736.0, 2400000.5, 53736.0, rnpb);
-
-   vvd(theta, 1.754166138018167568, 1e-12, "iauGst06", "", status);
-
-}
-
-static void t_gst06a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ g s t 0 6 a
-**  - - - - - - - - -
-**
-**  Test iauGst06a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGst06a, vvd
-**
-**  This revision:  2008 May 26
-*/
-{
-   double theta;
-
-
-   theta = iauGst06a(2400000.5, 53736.0, 2400000.5, 53736.0);
-
-   vvd(theta, 1.754166137675019159, 1e-12, "iauGst06a", "", status);
-
-}
-
-static void t_gst94(int *status)
-/*
-**  - - - - - - - -
-**   t _ g s t 9 4
-**  - - - - - - - -
-**
-**  Test iauGst94 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauGst94, vvd
-**
-**  This revision:  2008 May 26
-*/
-{
-   double theta;
-
-
-   theta = iauGst94(2400000.5, 53736.0);
-
-   vvd(theta, 1.754166136020645203, 1e-12, "iauGst94", "", status);
-
-}
-
-static void t_h2fk5(int *status)
-/*
-**  - - - - - - - -
-**   t _ h 2 f k 5
-**  - - - - - - - -
-**
-**  Test iauH2fk5 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauH2fk5, vvd
-**
-**  This revision:  2009 November 6
-*/
-{
-   double rh, dh, drh, ddh, pxh, rvh, r5, d5, dr5, dd5, px5, rv5;
-
-
-   rh  =  1.767794352;
-   dh  = -0.2917512594;
-   drh = -2.76413026e-6;
-   ddh = -5.92994449e-6;
-   pxh =  0.379210;
-   rvh = -7.6;
-
-   iauH2fk5(rh, dh, drh, ddh, pxh, rvh,
-            &r5, &d5, &dr5, &dd5, &px5, &rv5);
-
-   vvd(r5, 1.767794455700065506, 1e-13,
-       "iauH2fk5", "ra", status);
-   vvd(d5, -0.2917513626469638890, 1e-13,
-       "iauH2fk5", "dec", status);
-   vvd(dr5, -0.27597945024511204e-5, 1e-18,
-       "iauH2fk5", "dr5", status);
-   vvd(dd5, -0.59308014093262838e-5, 1e-18,
-       "iauH2fk5", "dd5", status);
-   vvd(px5, 0.37921, 1e-13,
-       "iauH2fk5", "px", status);
-   vvd(rv5, -7.6000001309071126, 1e-10,
-       "iauH2fk5", "rv", status);
-
-}
-
-static void t_hfk5z(int *status)
-/*
-**  - - - - - - - -
-**   t _ h f k 5 z
-**  - - - - - - - -
-**
-**  Test iauHfk5z function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauHfk5z, vvd
-**
-**  This revision:  2008 November 29
-*/
-{
-   double rh, dh, r5, d5, dr5, dd5;
-
-
-
-   rh =  1.767794352;
-   dh = -0.2917512594;
-
-   iauHfk5z(rh, dh, 2400000.5, 54479.0, &r5, &d5, &dr5, &dd5);
-
-   vvd(r5, 1.767794490535581026, 1e-13,
-       "iauHfk5z", "ra", status);
-   vvd(d5, -0.2917513695320114258, 1e-14,
-       "iauHfk5z", "dec", status);
-   vvd(dr5, 0.4335890983539243029e-8, 1e-22,
-       "iauHfk5z", "dr5", status);
-   vvd(dd5, -0.8569648841237745902e-9, 1e-23,
-       "iauHfk5z", "dd5", status);
-
-}
-
-static void t_ir(int *status)
-/*
-**  - - - - -
-**   t _ i r
-**  - - - - -
-**
-**  Test iauIr function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauIr, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double r[3][3];
-
-
-   r[0][0] = 2.0;
-   r[0][1] = 3.0;
-   r[0][2] = 2.0;
-
-   r[1][0] = 3.0;
-   r[1][1] = 2.0;
-   r[1][2] = 3.0;
-
-   r[2][0] = 3.0;
-   r[2][1] = 4.0;
-   r[2][2] = 5.0;
-
-   iauIr(r);
-
-   vvd(r[0][0], 1.0, 0.0, "iauIr", "11", status);
-   vvd(r[0][1], 0.0, 0.0, "iauIr", "12", status);
-   vvd(r[0][2], 0.0, 0.0, "iauIr", "13", status);
-
-   vvd(r[1][0], 0.0, 0.0, "iauIr", "21", status);
-   vvd(r[1][1], 1.0, 0.0, "iauIr", "22", status);
-   vvd(r[1][2], 0.0, 0.0, "iauIr", "23", status);
-
-   vvd(r[2][0], 0.0, 0.0, "iauIr", "31", status);
-   vvd(r[2][1], 0.0, 0.0, "iauIr", "32", status);
-   vvd(r[2][2], 1.0, 0.0, "iauIr", "33", status);
-
-}
-
-static void t_jd2cal(int *status)
-/*
-**  - - - - - - - - -
-**   t _ j d 2 c a l
-**  - - - - - - - - -
-**
-**  Test iauJd2cal function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauJd2cal, viv, vvd
-**
-**  This revision:  2008 November 29
-*/
-{
-   double dj1, dj2, fd;
-   int iy, im, id, j;
-
-
-   dj1 = 2400000.5;
-   dj2 = 50123.9999;
-
-   j = iauJd2cal(dj1, dj2, &iy, &im, &id, &fd);
-
-   viv(iy, 1996, "iauJd2cal", "y", status);
-   viv(im, 2, "iauJd2cal", "m", status);
-   viv(id, 10, "iauJd2cal", "d", status);
-   vvd(fd, 0.9999, 1e-7, "iauJd2cal", "fd", status);
-   viv(j, 0, "iauJd2cal", "j", status);
-
-}
-
-static void t_jdcalf(int *status)
-/*
-**  - - - - - - - - -
-**   t _ j d c a l f
-**  - - - - - - - - -
-**
-**  Test iauJdcalf function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauJdcalf, viv
-**
-**  This revision:  2008 May 26
-*/
-{
-   double dj1, dj2;
-   int iydmf[4], j;
-
-
-   dj1 = 2400000.5;
-   dj2 = 50123.9999;
-
-   j = iauJdcalf(4, dj1, dj2, iydmf);
-
-   viv(iydmf[0], 1996, "iauJdcalf", "y", status);
-   viv(iydmf[1], 2, "iauJdcalf", "m", status);
-   viv(iydmf[2], 10, "iauJdcalf", "d", status);
-   viv(iydmf[3], 9999, "iauJdcalf", "f", status);
-
-   viv(j, 0, "iauJdcalf", "j", status);
-
-}
-
-static void t_num00a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ n u m 0 0 a
-**  - - - - - - - - -
-**
-**  Test iauNum00a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauNum00a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rmatn[3][3];
-
-
-   iauNum00a(2400000.5, 53736.0, rmatn);
-
-   vvd(rmatn[0][0], 0.9999999999536227949, 1e-12,
-       "iauNum00a", "11", status);
-   vvd(rmatn[0][1], 0.8836238544090873336e-5, 1e-12,
-       "iauNum00a", "12", status);
-   vvd(rmatn[0][2], 0.3830835237722400669e-5, 1e-12,
-       "iauNum00a", "13", status);
-
-   vvd(rmatn[1][0], -0.8836082880798569274e-5, 1e-12,
-       "iauNum00a", "21", status);
-   vvd(rmatn[1][1], 0.9999999991354655028, 1e-12,
-       "iauNum00a", "22", status);
-   vvd(rmatn[1][2], -0.4063240865362499850e-4, 1e-12,
-       "iauNum00a", "23", status);
-
-   vvd(rmatn[2][0], -0.3831194272065995866e-5, 1e-12,
-       "iauNum00a", "31", status);
-   vvd(rmatn[2][1], 0.4063237480216291775e-4, 1e-12,
-       "iauNum00a", "32", status);
-   vvd(rmatn[2][2], 0.9999999991671660338, 1e-12,
-       "iauNum00a", "33", status);
-
-}
-
-static void t_num00b(int *status)
-/*
-**  - - - - - - - - -
-**   t _ n u m 0 0 b
-**  - - - - - - - - -
-**
-**  Test iauNum00b function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauNum00b, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-    double rmatn[3][3];
-
-    iauNum00b(2400000.5, 53736, rmatn);
-
-   vvd(rmatn[0][0], 0.9999999999536069682, 1e-12,
-       "iauNum00b", "11", status);
-   vvd(rmatn[0][1], 0.8837746144871248011e-5, 1e-12,
-       "iauNum00b", "12", status);
-   vvd(rmatn[0][2], 0.3831488838252202945e-5, 1e-12,
-       "iauNum00b", "13", status);
-
-   vvd(rmatn[1][0], -0.8837590456632304720e-5, 1e-12,
-       "iauNum00b", "21", status);
-   vvd(rmatn[1][1], 0.9999999991354692733, 1e-12,
-       "iauNum00b", "22", status);
-   vvd(rmatn[1][2], -0.4063198798559591654e-4, 1e-12,
-       "iauNum00b", "23", status);
-
-   vvd(rmatn[2][0], -0.3831847930134941271e-5, 1e-12,
-       "iauNum00b", "31", status);
-   vvd(rmatn[2][1], 0.4063195412258168380e-4, 1e-12,
-       "iauNum00b", "32", status);
-   vvd(rmatn[2][2], 0.9999999991671806225, 1e-12,
-       "iauNum00b", "33", status);
-
-}
-
-static void t_num06a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ n u m 0 6 a
-**  - - - - - - - - -
-**
-**  Test iauNum06a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauNum06a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-    double rmatn[3][3];
-
-    iauNum06a(2400000.5, 53736, rmatn);
-
-   vvd(rmatn[0][0], 0.9999999999536227668, 1e-12,
-       "iauNum06a", "11", status);
-   vvd(rmatn[0][1], 0.8836241998111535233e-5, 1e-12,
-       "iauNum06a", "12", status);
-   vvd(rmatn[0][2], 0.3830834608415287707e-5, 1e-12,
-       "iauNum06a", "13", status);
-
-   vvd(rmatn[1][0], -0.8836086334870740138e-5, 1e-12,
-       "iauNum06a", "21", status);
-   vvd(rmatn[1][1], 0.9999999991354657474, 1e-12,
-       "iauNum06a", "22", status);
-   vvd(rmatn[1][2], -0.4063240188248455065e-4, 1e-12,
-       "iauNum06a", "23", status);
-
-   vvd(rmatn[2][0], -0.3831193642839398128e-5, 1e-12,
-       "iauNum06a", "31", status);
-   vvd(rmatn[2][1], 0.4063236803101479770e-4, 1e-12,
-       "iauNum06a", "32", status);
-   vvd(rmatn[2][2], 0.9999999991671663114, 1e-12,
-       "iauNum06a", "33", status);
-
-}
-
-static void t_numat(int *status)
-/*
-**  - - - - - - - -
-**   t _ n u m a t
-**  - - - - - - - -
-**
-**  Test iauNumat function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauNumat, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double epsa, dpsi, deps, rmatn[3][3];
-
-
-   epsa =  0.4090789763356509900;
-   dpsi = -0.9630909107115582393e-5;
-   deps =  0.4063239174001678826e-4;
-
-   iauNumat(epsa, dpsi, deps, rmatn);
-
-   vvd(rmatn[0][0], 0.9999999999536227949, 1e-12,
-       "iauNumat", "11", status);
-   vvd(rmatn[0][1], 0.8836239320236250577e-5, 1e-12,
-       "iauNumat", "12", status);
-   vvd(rmatn[0][2], 0.3830833447458251908e-5, 1e-12,
-       "iauNumat", "13", status);
-
-   vvd(rmatn[1][0], -0.8836083657016688588e-5, 1e-12,
-       "iauNumat", "21", status);
-   vvd(rmatn[1][1], 0.9999999991354654959, 1e-12,
-       "iauNumat", "22", status);
-   vvd(rmatn[1][2], -0.4063240865361857698e-4, 1e-12,
-       "iauNumat", "23", status);
-
-   vvd(rmatn[2][0], -0.3831192481833385226e-5, 1e-12,
-       "iauNumat", "31", status);
-   vvd(rmatn[2][1], 0.4063237480216934159e-4, 1e-12,
-       "iauNumat", "32", status);
-   vvd(rmatn[2][2], 0.9999999991671660407, 1e-12,
-       "iauNumat", "33", status);
-
-}
-
-static void t_nut00a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ n u t 0 0 a
-**  - - - - - - - - -
-**
-**  Test iauNut00a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauNut00a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double dpsi, deps;
-
-
-   iauNut00a(2400000.5, 53736.0, &dpsi, &deps);
-
-   vvd(dpsi, -0.9630909107115518431e-5, 1e-13,
-       "iauNut00a", "dpsi", status);
-   vvd(deps,  0.4063239174001678710e-4, 1e-13,
-       "iauNut00a", "deps", status);
-
-}
-
-static void t_nut00b(int *status)
-/*
-**  - - - - - - - - -
-**   t _ n u t 0 0 b
-**  - - - - - - - - -
-**
-**  Test iauNut00b function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauNut00b, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double dpsi, deps;
-
-
-   iauNut00b(2400000.5, 53736.0, &dpsi, &deps);
-
-   vvd(dpsi, -0.9632552291148362783e-5, 1e-13,
-       "iauNut00b", "dpsi", status);
-   vvd(deps,  0.4063197106621159367e-4, 1e-13,
-       "iauNut00b", "deps", status);
-
-}
-
-static void t_nut06a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ n u t 0 6 a
-**  - - - - - - - - -
-**
-**  Test iauNut06a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauNut06a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double dpsi, deps;
-
-
-   iauNut06a(2400000.5, 53736.0, &dpsi, &deps);
-
-   vvd(dpsi, -0.9630912025820308797e-5, 1e-13,
-       "iauNut06a", "dpsi", status);
-   vvd(deps,  0.4063238496887249798e-4, 1e-13,
-       "iauNut06a", "deps", status);
-
-}
-
-static void t_nut80(int *status)
-/*
-**  - - - - - - - -
-**   t _ n u t 8 0
-**  - - - - - - - -
-**
-**  Test iauNut80 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauNut80, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double dpsi, deps;
-
-
-   iauNut80(2400000.5, 53736.0, &dpsi, &deps);
-
-   vvd(dpsi, -0.9643658353226563966e-5, 1e-13,
-       "iauNut80", "dpsi", status);
-   vvd(deps,  0.4060051006879713322e-4, 1e-13,
-       "iauNut80", "deps", status);
-
-}
-
-static void t_nutm80(int *status)
-/*
-**  - - - - - - - - -
-**   t _ n u t m 8 0
-**  - - - - - - - - -
-**
-**  Test iauNutm80 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauNutm80, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double rmatn[3][3];
-
-
-   iauNutm80(2400000.5, 53736.0, rmatn);
-
-   vvd(rmatn[0][0], 0.9999999999534999268, 1e-12,
-      "iauNutm80", "11", status);
-   vvd(rmatn[0][1], 0.8847935789636432161e-5, 1e-12,
-      "iauNutm80", "12", status);
-   vvd(rmatn[0][2], 0.3835906502164019142e-5, 1e-12,
-      "iauNutm80", "13", status);
-
-   vvd(rmatn[1][0], -0.8847780042583435924e-5, 1e-12,
-      "iauNutm80", "21", status);
-   vvd(rmatn[1][1], 0.9999999991366569963, 1e-12,
-      "iauNutm80", "22", status);
-   vvd(rmatn[1][2], -0.4060052702727130809e-4, 1e-12,
-      "iauNutm80", "23", status);
-
-   vvd(rmatn[2][0], -0.3836265729708478796e-5, 1e-12,
-      "iauNutm80", "31", status);
-   vvd(rmatn[2][1], 0.4060049308612638555e-4, 1e-12,
-      "iauNutm80", "32", status);
-   vvd(rmatn[2][2], 0.9999999991684415129, 1e-12,
-      "iauNutm80", "33", status);
-
-}
-
-static void t_obl06(int *status)
-/*
-**  - - - - - - - -
-**   t _ o b l 0 6
-**  - - - - - - - -
-**
-**  Test iauObl06 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauObl06, vvd
-**
-**  This revision:  2008 November 29
-*/
-{
-   vvd(iauObl06(2400000.5, 54388.0), 0.4090749229387258204, 1e-14,
-       "iauObl06", "", status);
-}
-
-static void t_obl80(int *status)
-/*
-**  - - - - - - - -
-**   t _ o b l 8 0
-**  - - - - - - - -
-**
-**  Test iauObl80 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauObl80, vvd
-**
-**  This revision:  2008 November 29
-*/
-{
-   double eps0;
-
-
-   eps0 = iauObl80(2400000.5, 54388.0);
-
-   vvd(eps0, 0.4090751347643816218, 1e-14, "iauObl80", "", status);
-
-}
-
-static void t_p06e(int *status)
-/*
-**  - - - - - - -
-**   t _ p 0 6 e
-**  - - - - - - -
-**
-**  Test iauP06e function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauP06e, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-    double eps0, psia, oma, bpa, bqa, pia, bpia,
-           epsa, chia, za, zetaa, thetaa, pa, gam, phi, psi;
-
-
-   iauP06e(2400000.5, 52541.0, &eps0, &psia, &oma, &bpa,
-           &bqa, &pia, &bpia, &epsa, &chia, &za,
-           &zetaa, &thetaa, &pa, &gam, &phi, &psi);
-
-   vvd(eps0, 0.4090926006005828715, 1e-14,
-       "iauP06e", "eps0", status);
-   vvd(psia, 0.6664369630191613431e-3, 1e-14,
-       "iauP06e", "psia", status);
-   vvd(oma , 0.4090925973783255982, 1e-14,
-       "iauP06e", "oma", status);
-   vvd(bpa, 0.5561149371265209445e-6, 1e-14,
-       "iauP06e", "bpa", status);
-   vvd(bqa, -0.6191517193290621270e-5, 1e-14,
-       "iauP06e", "bqa", status);
-   vvd(pia, 0.6216441751884382923e-5, 1e-14,
-       "iauP06e", "pia", status);
-   vvd(bpia, 3.052014180023779882, 1e-14,
-       "iauP06e", "bpia", status);
-   vvd(epsa, 0.4090864054922431688, 1e-14,
-       "iauP06e", "epsa", status);
-   vvd(chia, 0.1387703379530915364e-5, 1e-14,
-       "iauP06e", "chia", status);
-   vvd(za, 0.2921789846651790546e-3, 1e-14,
-       "iauP06e", "za", status);
-   vvd(zetaa, 0.3178773290332009310e-3, 1e-14,
-       "iauP06e", "zetaa", status);
-   vvd(thetaa, 0.2650932701657497181e-3, 1e-14,
-       "iauP06e", "thetaa", status);
-   vvd(pa, 0.6651637681381016344e-3, 1e-14,
-       "iauP06e", "pa", status);
-   vvd(gam, 0.1398077115963754987e-5, 1e-14,
-       "iauP06e", "gam", status);
-   vvd(phi, 0.4090864090837462602, 1e-14,
-       "iauP06e", "phi", status);
-   vvd(psi, 0.6664464807480920325e-3, 1e-14,
-       "iauP06e", "psi", status);
-
-}
-
-static void t_p2pv(int *status)
-/*
-**  - - - - - - -
-**   t _ p 2 p v
-**  - - - - - - -
-**
-**  Test iauP2pv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauP2pv, vvd
-**
-**  This revision:  2008 May 26
-*/
-{
-   double p[3], pv[2][3];
-
-
-   p[0] = 0.25;
-   p[1] = 1.2;
-   p[2] = 3.0;
-
-   pv[0][0] =  0.3;
-   pv[0][1] =  1.2;
-   pv[0][2] = -2.5;
-
-   pv[1][0] = -0.5;
-   pv[1][1] =  3.1;
-   pv[1][2] =  0.9;
-
-   iauP2pv(p, pv);
-
-   vvd(pv[0][0], 0.25, 0.0, "iauP2pv", "p1", status);
-   vvd(pv[0][1], 1.2,  0.0, "iauP2pv", "p2", status);
-   vvd(pv[0][2], 3.0,  0.0, "iauP2pv", "p3", status);
-
-   vvd(pv[1][0], 0.0,  0.0, "iauP2pv", "v1", status);
-   vvd(pv[1][1], 0.0,  0.0, "iauP2pv", "v2", status);
-   vvd(pv[1][2], 0.0,  0.0, "iauP2pv", "v3", status);
-
-}
-
-static void t_p2s(int *status)
-/*
-**  - - - - - -
-**   t _ p 2 s
-**  - - - - - -
-**
-**  Test iauP2s function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauP2s, vvd
-**
-**  This revision:  2008 November 29
-*/
-{
-   double p[3], theta, phi, r;
-
-
-   p[0] = 100.0;
-   p[1] = -50.0;
-   p[2] =  25.0;
-
-   iauP2s(p, &theta, &phi, &r);
-
-   vvd(theta, -0.4636476090008061162, 1e-12, "iauP2s", "theta", status);
-   vvd(phi, 0.2199879773954594463, 1e-12, "iauP2s", "phi", status);
-   vvd(r, 114.5643923738960002, 1e-9, "iauP2s", "r", status);
-
-}
-
-static void t_pap(int *status)
-/*
-**  - - - - - -
-**   t _ p a p
-**  - - - - - -
-**
-**  Test iauPap function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPap, vvd
-**
-**  This revision:  2008 May 25
-*/
-{
-   double a[3], b[3], theta;
-
-
-   a[0] =  1.0;
-   a[1] =  0.1;
-   a[2] =  0.2;
-
-   b[0] = -3.0;
-   b[1] = 1e-3;
-   b[2] =  0.2;
-
-   theta = iauPap(a, b);
-
-   vvd(theta, 0.3671514267841113674, 1e-12, "iauPap", "", status);
-
-}
-
-static void t_pas(int *status)
-/*
-**  - - - - - -
-**   t _ p a s
-**  - - - - - -
-**
-**  Test iauPas function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPas, vvd
-**
-**  This revision:  2008 May 25
-*/
-{
-   double al, ap, bl, bp, theta;
-
-
-   al =  1.0;
-   ap =  0.1;
-   bl =  0.2;
-   bp = -1.0;
-
-   theta = iauPas(al, ap, bl, bp);
-
-   vvd(theta, -2.724544922932270424, 1e-12, "iauPas", "", status);
-
-}
-
-static void t_pb06(int *status)
-/*
-**  - - - - - - -
-**   t _ p b 0 6
-**  - - - - - - -
-**
-**  Test iauPb06 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPb06, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double bzeta, bz, btheta;
-
-
-   iauPb06(2400000.5, 50123.9999, &bzeta, &bz, &btheta);
-
-   vvd(bzeta, -0.5092634016326478238e-3, 1e-12,
-       "iauPb06", "bzeta", status);
-   vvd(bz, -0.3602772060566044413e-3, 1e-12,
-       "iauPb06", "bz", status);
-   vvd(btheta, -0.3779735537167811177e-3, 1e-12,
-       "iauPb06", "btheta", status);
-
-}
-
-static void t_pdp(int *status)
-/*
-**  - - - - - -
-**   t _ p d p
-**  - - - - - -
-**
-**  Test iauPdp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPdp, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double a[3], b[3], adb;
-
-
-   a[0] = 2.0;
-   a[1] = 2.0;
-   a[2] = 3.0;
-
-   b[0] = 1.0;
-   b[1] = 3.0;
-   b[2] = 4.0;
-
-   adb = iauPdp(a, b);
-
-   vvd(adb, 20, 1e-12, "iauPdp", "", status);
-
-}
-
-static void t_pfw06(int *status)
-/*
-**  - - - - - - - -
-**   t _ p f w 0 6
-**  - - - - - - - -
-**
-**  Test iauPfw06 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPfw06, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double gamb, phib, psib, epsa;
-
-
-   iauPfw06(2400000.5, 50123.9999, &gamb, &phib, &psib, &epsa);
-
-   vvd(gamb, -0.2243387670997995690e-5, 1e-16,
-       "iauPfw06", "gamb", status);
-   vvd(phib,  0.4091014602391312808, 1e-12,
-       "iauPfw06", "phib", status);
-   vvd(psib, -0.9501954178013031895e-3, 1e-14,
-       "iauPfw06", "psib", status);
-   vvd(epsa,  0.4091014316587367491, 1e-12,
-       "iauPfw06", "epsa", status);
-
-}
-
-static void t_plan94(int *status)
-/*
-**  - - - - - - - - -
-**   t _ p l a n 9 4
-**  - - - - - - - - -
-**
-**  Test iauPlan94 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPlan94, VVD, VIV
-**
-**  This revision:  2008 November 28
-*/
-{
-   double pv[2][3];
-   int j;
-
-
-   j = iauPlan94(2400000.5, 1e6, 0, pv);
-
-   vvd(pv[0][0], 0.0, 0.0, "iauPlan94", "x 1", status);
-   vvd(pv[0][1], 0.0, 0.0, "iauPlan94", "y 1", status);
-   vvd(pv[0][2], 0.0, 0.0, "iauPlan94", "z 1", status);
-
-   vvd(pv[1][0], 0.0, 0.0, "iauPlan94", "xd 1", status);
-   vvd(pv[1][1], 0.0, 0.0, "iauPlan94", "yd 1", status);
-   vvd(pv[1][2], 0.0, 0.0, "iauPlan94", "zd 1", status);
-
-   viv(j, -1, "iauPlan94", "j 1", status);
-
-   j = iauPlan94(2400000.5, 1e6, 10, pv);
-
-   viv(j, -1, "iauPlan94", "j 2", status);
-
-   j = iauPlan94(2400000.5, -320000, 3, pv);
-
-   vvd(pv[0][0], 0.9308038666832975759, 1e-11,
-       "iauPlan94", "x 3", status);
-   vvd(pv[0][1], 0.3258319040261346000, 1e-11,
-       "iauPlan94", "y 3", status);
-   vvd(pv[0][2], 0.1422794544481140560, 1e-11,
-       "iauPlan94", "z 3", status);
-
-   vvd(pv[1][0], -0.6429458958255170006e-2, 1e-11,
-       "iauPlan94", "xd 3", status);
-   vvd(pv[1][1], 0.1468570657704237764e-1, 1e-11,
-       "iauPlan94", "yd 3", status);
-   vvd(pv[1][2], 0.6406996426270981189e-2, 1e-11,
-       "iauPlan94", "zd 3", status);
-
-   viv(j, 1, "iauPlan94", "j 3", status);
-
-   j = iauPlan94(2400000.5, 43999.9, 1, pv);
-
-   vvd(pv[0][0], 0.2945293959257430832, 1e-11,
-       "iauPlan94", "x 4", status);
-   vvd(pv[0][1], -0.2452204176601049596, 1e-11,
-       "iauPlan94", "y 4", status);
-   vvd(pv[0][2], -0.1615427700571978153, 1e-11,
-       "iauPlan94", "z 4", status);
-
-   vvd(pv[1][0], 0.1413867871404614441e-1, 1e-11,
-       "iauPlan94", "xd 4", status);
-   vvd(pv[1][1], 0.1946548301104706582e-1, 1e-11,
-       "iauPlan94", "yd 4", status);
-   vvd(pv[1][2], 0.8929809783898904786e-2, 1e-11,
-       "iauPlan94", "zd 4", status);
-
-   viv(j, 0, "iauPlan94", "j 4", status);
-
-}
-
-static void t_pmat00(int *status)
-/*
-**  - - - - - - - - -
-**   t _ p m a t 0 0
-**  - - - - - - - - -
-**
-**  Test iauPmat00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPmat00, vvd
-**
-**  This revision:  2008 November 29
-*/
-{
-   double rbp[3][3];
-
-
-   iauPmat00(2400000.5, 50123.9999, rbp);
-
-   vvd(rbp[0][0], 0.9999995505175087260, 1e-12,
-       "iauPmat00", "11", status);
-   vvd(rbp[0][1], 0.8695405883617884705e-3, 1e-14,
-       "iauPmat00", "12", status);
-   vvd(rbp[0][2], 0.3779734722239007105e-3, 1e-14,
-       "iauPmat00", "13", status);
-
-   vvd(rbp[1][0], -0.8695405990410863719e-3, 1e-14,
-       "iauPmat00", "21", status);
-   vvd(rbp[1][1], 0.9999996219494925900, 1e-12,
-       "iauPmat00", "22", status);
-   vvd(rbp[1][2], -0.1360775820404982209e-6, 1e-14,
-       "iauPmat00", "23", status);
-
-   vvd(rbp[2][0], -0.3779734476558184991e-3, 1e-14,
-       "iauPmat00", "31", status);
-   vvd(rbp[2][1], -0.1925857585832024058e-6, 1e-14,
-       "iauPmat00", "32", status);
-   vvd(rbp[2][2], 0.9999999285680153377, 1e-12,
-       "iauPmat00", "33", status);
-
-}
-
-static void t_pmat06(int *status)
-/*
-**  - - - - - - - - -
-**   t _ p m a t 0 6
-**  - - - - - - - - -
-**
-**  Test iauPmat06 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPmat06, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double rbp[3][3];
-
-
-   iauPmat06(2400000.5, 50123.9999, rbp);
-
-   vvd(rbp[0][0], 0.9999995505176007047, 1e-12,
-       "iauPmat06", "11", status);
-   vvd(rbp[0][1], 0.8695404617348208406e-3, 1e-14,
-       "iauPmat06", "12", status);
-   vvd(rbp[0][2], 0.3779735201865589104e-3, 1e-14,
-       "iauPmat06", "13", status);
-
-   vvd(rbp[1][0], -0.8695404723772031414e-3, 1e-14,
-       "iauPmat06", "21", status);
-   vvd(rbp[1][1], 0.9999996219496027161, 1e-12,
-       "iauPmat06", "22", status);
-   vvd(rbp[1][2], -0.1361752497080270143e-6, 1e-14,
-       "iauPmat06", "23", status);
-
-   vvd(rbp[2][0], -0.3779734957034089490e-3, 1e-14,
-       "iauPmat06", "31", status);
-   vvd(rbp[2][1], -0.1924880847894457113e-6, 1e-14,
-       "iauPmat06", "32", status);
-   vvd(rbp[2][2], 0.9999999285679971958, 1e-12,
-       "iauPmat06", "33", status);
-
-}
-
-static void t_pmat76(int *status)
-/*
-**  - - - - - - - - -
-**   t _ p m a t 7 6
-**  - - - - - - - - -
-**
-**  Test iauPmat76 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPmat76, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rmatp[3][3];
-
-
-   iauPmat76(2400000.5, 50123.9999, rmatp);
-
-   vvd(rmatp[0][0], 0.9999995504328350733, 1e-12,
-       "iauPmat76", "11", status);
-   vvd(rmatp[0][1], 0.8696632209480960785e-3, 1e-14,
-       "iauPmat76", "12", status);
-   vvd(rmatp[0][2], 0.3779153474959888345e-3, 1e-14,
-       "iauPmat76", "13", status);
-
-   vvd(rmatp[1][0], -0.8696632209485112192e-3, 1e-14,
-       "iauPmat76", "21", status);
-   vvd(rmatp[1][1], 0.9999996218428560614, 1e-12,
-       "iauPmat76", "22", status);
-   vvd(rmatp[1][2], -0.1643284776111886407e-6, 1e-14,
-       "iauPmat76", "23", status);
-
-   vvd(rmatp[2][0], -0.3779153474950335077e-3, 1e-14,
-       "iauPmat76", "31", status);
-   vvd(rmatp[2][1], -0.1643306746147366896e-6, 1e-14,
-       "iauPmat76", "32", status);
-   vvd(rmatp[2][2], 0.9999999285899790119, 1e-12,
-       "iauPmat76", "33", status);
-
-}
-
-static void t_pm(int *status)
-/*
-**  - - - - -
-**   t _ p m
-**  - - - - -
-**
-**  Test iauPm function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPm, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double p[3], r;
-
-
-   p[0] =  0.3;
-   p[1] =  1.2;
-   p[2] = -2.5;
-
-   r = iauPm(p);
-
-   vvd(r, 2.789265136196270604, 1e-12, "iauPm", "", status);
-
-}
-
-static void t_pmp(int *status)
-/*
-**  - - - - - -
-**   t _ p m p
-**  - - - - - -
-**
-**  Test iauPmp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPmp, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double a[3], b[3], amb[3];
-
-
-   a[0] = 2.0;
-   a[1] = 2.0;
-   a[2] = 3.0;
-
-   b[0] = 1.0;
-   b[1] = 3.0;
-   b[2] = 4.0;
-
-   iauPmp(a, b, amb);
-
-   vvd(amb[0],  1.0, 1e-12, "iauPmp", "0", status);
-   vvd(amb[1], -1.0, 1e-12, "iauPmp", "1", status);
-   vvd(amb[2], -1.0, 1e-12, "iauPmp", "2", status);
-
-}
-
-static void t_pn(int *status)
-/*
-**  - - - - -
-**   t _ p n
-**  - - - - -
-**
-**  Test iauPn function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPn, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double p[3], r, u[3];
-
-
-   p[0] =  0.3;
-   p[1] =  1.2;
-   p[2] = -2.5;
-
-   iauPn(p, &r, u);
-
-   vvd(r, 2.789265136196270604, 1e-12, "iauPn", "r", status);
-
-   vvd(u[0], 0.1075552109073112058, 1e-12, "iauPn", "u1", status);
-   vvd(u[1], 0.4302208436292448232, 1e-12, "iauPn", "u2", status);
-   vvd(u[2], -0.8962934242275933816, 1e-12, "iauPn", "u3", status);
-
-}
-
-static void t_pn00(int *status)
-/*
-**  - - - - - - -
-**   t _ p n 0 0
-**  - - - - - - -
-**
-**  Test iauPn00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPn00, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double dpsi, deps, epsa,
-          rb[3][3], rp[3][3], rbp[3][3], rn[3][3], rbpn[3][3];
-
-
-   dpsi = -0.9632552291149335877e-5;
-   deps =  0.4063197106621141414e-4;
-
-   iauPn00(2400000.5, 53736.0, dpsi, deps,
-           &epsa, rb, rp, rbp, rn, rbpn);
-
-   vvd(epsa, 0.4090791789404229916, 1e-12, "iauPn00", "epsa", status);
-
-   vvd(rb[0][0], 0.9999999999999942498, 1e-12,
-       "iauPn00", "rb11", status);
-   vvd(rb[0][1], -0.7078279744199196626e-7, 1e-18,
-       "iauPn00", "rb12", status);
-   vvd(rb[0][2], 0.8056217146976134152e-7, 1e-18,
-       "iauPn00", "rb13", status);
-
-   vvd(rb[1][0], 0.7078279477857337206e-7, 1e-18,
-       "iauPn00", "rb21", status);
-   vvd(rb[1][1], 0.9999999999999969484, 1e-12,
-       "iauPn00", "rb22", status);
-   vvd(rb[1][2], 0.3306041454222136517e-7, 1e-18,
-       "iauPn00", "rb23", status);
-
-   vvd(rb[2][0], -0.8056217380986972157e-7, 1e-18,
-       "iauPn00", "rb31", status);
-   vvd(rb[2][1], -0.3306040883980552500e-7, 1e-18,
-       "iauPn00", "rb32", status);
-   vvd(rb[2][2], 0.9999999999999962084, 1e-12,
-       "iauPn00", "rb33", status);
-
-   vvd(rp[0][0], 0.9999989300532289018, 1e-12,
-       "iauPn00", "rp11", status);
-   vvd(rp[0][1], -0.1341647226791824349e-2, 1e-14,
-       "iauPn00", "rp12", status);
-   vvd(rp[0][2], -0.5829880927190296547e-3, 1e-14,
-       "iauPn00", "rp13", status);
-
-   vvd(rp[1][0], 0.1341647231069759008e-2, 1e-14,
-       "iauPn00", "rp21", status);
-   vvd(rp[1][1], 0.9999990999908750433, 1e-12,
-       "iauPn00", "rp22", status);
-   vvd(rp[1][2], -0.3837444441583715468e-6, 1e-14,
-       "iauPn00", "rp23", status);
-
-   vvd(rp[2][0], 0.5829880828740957684e-3, 1e-14,
-       "iauPn00", "rp31", status);
-   vvd(rp[2][1], -0.3984203267708834759e-6, 1e-14,
-       "iauPn00", "rp32", status);
-   vvd(rp[2][2], 0.9999998300623538046, 1e-12,
-       "iauPn00", "rp33", status);
-
-   vvd(rbp[0][0], 0.9999989300052243993, 1e-12,
-       "iauPn00", "rbp11", status);
-   vvd(rbp[0][1], -0.1341717990239703727e-2, 1e-14,
-       "iauPn00", "rbp12", status);
-   vvd(rbp[0][2], -0.5829075749891684053e-3, 1e-14,
-       "iauPn00", "rbp13", status);
-
-   vvd(rbp[1][0], 0.1341718013831739992e-2, 1e-14,
-       "iauPn00", "rbp21", status);
-   vvd(rbp[1][1], 0.9999990998959191343, 1e-12,
-       "iauPn00", "rbp22", status);
-   vvd(rbp[1][2], -0.3505759733565421170e-6, 1e-14,
-       "iauPn00", "rbp23", status);
-
-   vvd(rbp[2][0], 0.5829075206857717883e-3, 1e-14,
-       "iauPn00", "rbp31", status);
-   vvd(rbp[2][1], -0.4315219955198608970e-6, 1e-14,
-       "iauPn00", "rbp32", status);
-   vvd(rbp[2][2], 0.9999998301093036269, 1e-12,
-       "iauPn00", "rbp33", status);
-
-   vvd(rn[0][0], 0.9999999999536069682, 1e-12,
-       "iauPn00", "rn11", status);
-   vvd(rn[0][1], 0.8837746144872140812e-5, 1e-16,
-       "iauPn00", "rn12", status);
-   vvd(rn[0][2], 0.3831488838252590008e-5, 1e-16,
-       "iauPn00", "rn13", status);
-
-   vvd(rn[1][0], -0.8837590456633197506e-5, 1e-16,
-       "iauPn00", "rn21", status);
-   vvd(rn[1][1], 0.9999999991354692733, 1e-12,
-       "iauPn00", "rn22", status);
-   vvd(rn[1][2], -0.4063198798559573702e-4, 1e-16,
-       "iauPn00", "rn23", status);
-
-   vvd(rn[2][0], -0.3831847930135328368e-5, 1e-16,
-       "iauPn00", "rn31", status);
-   vvd(rn[2][1], 0.4063195412258150427e-4, 1e-16,
-       "iauPn00", "rn32", status);
-   vvd(rn[2][2], 0.9999999991671806225, 1e-12,
-       "iauPn00", "rn33", status);
-
-   vvd(rbpn[0][0], 0.9999989440499982806, 1e-12,
-       "iauPn00", "rbpn11", status);
-   vvd(rbpn[0][1], -0.1332880253640848301e-2, 1e-14,
-       "iauPn00", "rbpn12", status);
-   vvd(rbpn[0][2], -0.5790760898731087295e-3, 1e-14,
-       "iauPn00", "rbpn13", status);
-
-   vvd(rbpn[1][0], 0.1332856746979948745e-2, 1e-14,
-       "iauPn00", "rbpn21", status);
-   vvd(rbpn[1][1], 0.9999991109064768883, 1e-12,
-       "iauPn00", "rbpn22", status);
-   vvd(rbpn[1][2], -0.4097740555723063806e-4, 1e-14,
-       "iauPn00", "rbpn23", status);
-
-   vvd(rbpn[2][0], 0.5791301929950205000e-3, 1e-14,
-       "iauPn00", "rbpn31", status);
-   vvd(rbpn[2][1], 0.4020553681373702931e-4, 1e-14,
-       "iauPn00", "rbpn32", status);
-   vvd(rbpn[2][2], 0.9999998314958529887, 1e-12,
-       "iauPn00", "rbpn33", status);
-
-}
-
-static void t_pn00a(int *status)
-/*
-**  - - - - - - - -
-**   t _ p n 0 0 a
-**  - - - - - - - -
-**
-**  Test iauPn00a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPn00a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double dpsi, deps, epsa,
-          rb[3][3], rp[3][3], rbp[3][3], rn[3][3], rbpn[3][3];
-
-
-   iauPn00a(2400000.5, 53736.0,
-            &dpsi, &deps, &epsa, rb, rp, rbp, rn, rbpn);
-
-   vvd(dpsi, -0.9630909107115518431e-5, 1e-12,
-       "iauPn00a", "dpsi", status);
-   vvd(deps,  0.4063239174001678710e-4, 1e-12,
-       "iauPn00a", "deps", status);
-   vvd(epsa,  0.4090791789404229916, 1e-12, "iauPn00a", "epsa", status);
-
-   vvd(rb[0][0], 0.9999999999999942498, 1e-12,
-       "iauPn00a", "rb11", status);
-   vvd(rb[0][1], -0.7078279744199196626e-7, 1e-16,
-       "iauPn00a", "rb12", status);
-   vvd(rb[0][2], 0.8056217146976134152e-7, 1e-16,
-       "iauPn00a", "rb13", status);
-
-   vvd(rb[1][0], 0.7078279477857337206e-7, 1e-16,
-       "iauPn00a", "rb21", status);
-   vvd(rb[1][1], 0.9999999999999969484, 1e-12,
-       "iauPn00a", "rb22", status);
-   vvd(rb[1][2], 0.3306041454222136517e-7, 1e-16,
-       "iauPn00a", "rb23", status);
-
-   vvd(rb[2][0], -0.8056217380986972157e-7, 1e-16,
-       "iauPn00a", "rb31", status);
-   vvd(rb[2][1], -0.3306040883980552500e-7, 1e-16,
-       "iauPn00a", "rb32", status);
-   vvd(rb[2][2], 0.9999999999999962084, 1e-12,
-       "iauPn00a", "rb33", status);
-
-   vvd(rp[0][0], 0.9999989300532289018, 1e-12,
-       "iauPn00a", "rp11", status);
-   vvd(rp[0][1], -0.1341647226791824349e-2, 1e-14,
-       "iauPn00a", "rp12", status);
-   vvd(rp[0][2], -0.5829880927190296547e-3, 1e-14,
-       "iauPn00a", "rp13", status);
-
-   vvd(rp[1][0], 0.1341647231069759008e-2, 1e-14,
-       "iauPn00a", "rp21", status);
-   vvd(rp[1][1], 0.9999990999908750433, 1e-12,
-       "iauPn00a", "rp22", status);
-   vvd(rp[1][2], -0.3837444441583715468e-6, 1e-14,
-       "iauPn00a", "rp23", status);
-
-   vvd(rp[2][0], 0.5829880828740957684e-3, 1e-14,
-       "iauPn00a", "rp31", status);
-   vvd(rp[2][1], -0.3984203267708834759e-6, 1e-14,
-       "iauPn00a", "rp32", status);
-   vvd(rp[2][2], 0.9999998300623538046, 1e-12,
-       "iauPn00a", "rp33", status);
-
-   vvd(rbp[0][0], 0.9999989300052243993, 1e-12,
-       "iauPn00a", "rbp11", status);
-   vvd(rbp[0][1], -0.1341717990239703727e-2, 1e-14,
-       "iauPn00a", "rbp12", status);
-   vvd(rbp[0][2], -0.5829075749891684053e-3, 1e-14,
-       "iauPn00a", "rbp13", status);
-
-   vvd(rbp[1][0], 0.1341718013831739992e-2, 1e-14,
-       "iauPn00a", "rbp21", status);
-   vvd(rbp[1][1], 0.9999990998959191343, 1e-12,
-       "iauPn00a", "rbp22", status);
-   vvd(rbp[1][2], -0.3505759733565421170e-6, 1e-14,
-       "iauPn00a", "rbp23", status);
-
-   vvd(rbp[2][0], 0.5829075206857717883e-3, 1e-14,
-       "iauPn00a", "rbp31", status);
-   vvd(rbp[2][1], -0.4315219955198608970e-6, 1e-14,
-       "iauPn00a", "rbp32", status);
-   vvd(rbp[2][2], 0.9999998301093036269, 1e-12,
-       "iauPn00a", "rbp33", status);
-
-   vvd(rn[0][0], 0.9999999999536227949, 1e-12,
-       "iauPn00a", "rn11", status);
-   vvd(rn[0][1], 0.8836238544090873336e-5, 1e-14,
-       "iauPn00a", "rn12", status);
-   vvd(rn[0][2], 0.3830835237722400669e-5, 1e-14,
-       "iauPn00a", "rn13", status);
-
-   vvd(rn[1][0], -0.8836082880798569274e-5, 1e-14,
-       "iauPn00a", "rn21", status);
-   vvd(rn[1][1], 0.9999999991354655028, 1e-12,
-       "iauPn00a", "rn22", status);
-   vvd(rn[1][2], -0.4063240865362499850e-4, 1e-14,
-       "iauPn00a", "rn23", status);
-
-   vvd(rn[2][0], -0.3831194272065995866e-5, 1e-14,
-       "iauPn00a", "rn31", status);
-   vvd(rn[2][1], 0.4063237480216291775e-4, 1e-14,
-       "iauPn00a", "rn32", status);
-   vvd(rn[2][2], 0.9999999991671660338, 1e-12,
-       "iauPn00a", "rn33", status);
-
-   vvd(rbpn[0][0], 0.9999989440476103435, 1e-12,
-       "iauPn00a", "rbpn11", status);
-   vvd(rbpn[0][1], -0.1332881761240011763e-2, 1e-14,
-       "iauPn00a", "rbpn12", status);
-   vvd(rbpn[0][2], -0.5790767434730085751e-3, 1e-14,
-       "iauPn00a", "rbpn13", status);
-
-   vvd(rbpn[1][0], 0.1332858254308954658e-2, 1e-14,
-       "iauPn00a", "rbpn21", status);
-   vvd(rbpn[1][1], 0.9999991109044505577, 1e-12,
-       "iauPn00a", "rbpn22", status);
-   vvd(rbpn[1][2], -0.4097782710396580452e-4, 1e-14,
-       "iauPn00a", "rbpn23", status);
-
-   vvd(rbpn[2][0], 0.5791308472168152904e-3, 1e-14,
-       "iauPn00a", "rbpn31", status);
-   vvd(rbpn[2][1], 0.4020595661591500259e-4, 1e-14,
-       "iauPn00a", "rbpn32", status);
-   vvd(rbpn[2][2], 0.9999998314954572304, 1e-12,
-       "iauPn00a", "rbpn33", status);
-
-}
-
-static void t_pn00b(int *status)
-/*
-**  - - - - - - - -
-**   t _ p n 0 0 b
-**  - - - - - - - -
-**
-**  Test iauPn00b function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPn00b, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double dpsi, deps, epsa,
-          rb[3][3], rp[3][3], rbp[3][3], rn[3][3], rbpn[3][3];
-
-
-   iauPn00b(2400000.5, 53736.0, &dpsi, &deps, &epsa,
-            rb, rp, rbp, rn, rbpn);
-
-   vvd(dpsi, -0.9632552291148362783e-5, 1e-12,
-       "iauPn00b", "dpsi", status);
-   vvd(deps,  0.4063197106621159367e-4, 1e-12,
-       "iauPn00b", "deps", status);
-   vvd(epsa,  0.4090791789404229916, 1e-12, "iauPn00b", "epsa", status);
-
-   vvd(rb[0][0], 0.9999999999999942498, 1e-12,
-      "iauPn00b", "rb11", status);
-   vvd(rb[0][1], -0.7078279744199196626e-7, 1e-16,
-      "iauPn00b", "rb12", status);
-   vvd(rb[0][2], 0.8056217146976134152e-7, 1e-16,
-      "iauPn00b", "rb13", status);
-
-   vvd(rb[1][0], 0.7078279477857337206e-7, 1e-16,
-      "iauPn00b", "rb21", status);
-   vvd(rb[1][1], 0.9999999999999969484, 1e-12,
-      "iauPn00b", "rb22", status);
-   vvd(rb[1][2], 0.3306041454222136517e-7, 1e-16,
-      "iauPn00b", "rb23", status);
-
-   vvd(rb[2][0], -0.8056217380986972157e-7, 1e-16,
-      "iauPn00b", "rb31", status);
-   vvd(rb[2][1], -0.3306040883980552500e-7, 1e-16,
-      "iauPn00b", "rb32", status);
-   vvd(rb[2][2], 0.9999999999999962084, 1e-12,
-      "iauPn00b", "rb33", status);
-
-   vvd(rp[0][0], 0.9999989300532289018, 1e-12,
-      "iauPn00b", "rp11", status);
-   vvd(rp[0][1], -0.1341647226791824349e-2, 1e-14,
-      "iauPn00b", "rp12", status);
-   vvd(rp[0][2], -0.5829880927190296547e-3, 1e-14,
-      "iauPn00b", "rp13", status);
-
-   vvd(rp[1][0], 0.1341647231069759008e-2, 1e-14,
-      "iauPn00b", "rp21", status);
-   vvd(rp[1][1], 0.9999990999908750433, 1e-12,
-      "iauPn00b", "rp22", status);
-   vvd(rp[1][2], -0.3837444441583715468e-6, 1e-14,
-      "iauPn00b", "rp23", status);
-
-   vvd(rp[2][0], 0.5829880828740957684e-3, 1e-14,
-      "iauPn00b", "rp31", status);
-   vvd(rp[2][1], -0.3984203267708834759e-6, 1e-14,
-      "iauPn00b", "rp32", status);
-   vvd(rp[2][2], 0.9999998300623538046, 1e-12,
-      "iauPn00b", "rp33", status);
-
-   vvd(rbp[0][0], 0.9999989300052243993, 1e-12,
-      "iauPn00b", "rbp11", status);
-   vvd(rbp[0][1], -0.1341717990239703727e-2, 1e-14,
-      "iauPn00b", "rbp12", status);
-   vvd(rbp[0][2], -0.5829075749891684053e-3, 1e-14,
-      "iauPn00b", "rbp13", status);
-
-   vvd(rbp[1][0], 0.1341718013831739992e-2, 1e-14,
-      "iauPn00b", "rbp21", status);
-   vvd(rbp[1][1], 0.9999990998959191343, 1e-12,
-      "iauPn00b", "rbp22", status);
-   vvd(rbp[1][2], -0.3505759733565421170e-6, 1e-14,
-      "iauPn00b", "rbp23", status);
-
-   vvd(rbp[2][0], 0.5829075206857717883e-3, 1e-14,
-      "iauPn00b", "rbp31", status);
-   vvd(rbp[2][1], -0.4315219955198608970e-6, 1e-14,
-      "iauPn00b", "rbp32", status);
-   vvd(rbp[2][2], 0.9999998301093036269, 1e-12,
-      "iauPn00b", "rbp33", status);
-
-   vvd(rn[0][0], 0.9999999999536069682, 1e-12,
-      "iauPn00b", "rn11", status);
-   vvd(rn[0][1], 0.8837746144871248011e-5, 1e-14,
-      "iauPn00b", "rn12", status);
-   vvd(rn[0][2], 0.3831488838252202945e-5, 1e-14,
-      "iauPn00b", "rn13", status);
-
-   vvd(rn[1][0], -0.8837590456632304720e-5, 1e-14,
-      "iauPn00b", "rn21", status);
-   vvd(rn[1][1], 0.9999999991354692733, 1e-12,
-      "iauPn00b", "rn22", status);
-   vvd(rn[1][2], -0.4063198798559591654e-4, 1e-14,
-      "iauPn00b", "rn23", status);
-
-   vvd(rn[2][0], -0.3831847930134941271e-5, 1e-14,
-      "iauPn00b", "rn31", status);
-   vvd(rn[2][1], 0.4063195412258168380e-4, 1e-14,
-      "iauPn00b", "rn32", status);
-   vvd(rn[2][2], 0.9999999991671806225, 1e-12,
-      "iauPn00b", "rn33", status);
-
-   vvd(rbpn[0][0], 0.9999989440499982806, 1e-12,
-      "iauPn00b", "rbpn11", status);
-   vvd(rbpn[0][1], -0.1332880253640849194e-2, 1e-14,
-      "iauPn00b", "rbpn12", status);
-   vvd(rbpn[0][2], -0.5790760898731091166e-3, 1e-14,
-      "iauPn00b", "rbpn13", status);
-
-   vvd(rbpn[1][0], 0.1332856746979949638e-2, 1e-14,
-      "iauPn00b", "rbpn21", status);
-   vvd(rbpn[1][1], 0.9999991109064768883, 1e-12,
-      "iauPn00b", "rbpn22", status);
-   vvd(rbpn[1][2], -0.4097740555723081811e-4, 1e-14,
-      "iauPn00b", "rbpn23", status);
-
-   vvd(rbpn[2][0], 0.5791301929950208873e-3, 1e-14,
-      "iauPn00b", "rbpn31", status);
-   vvd(rbpn[2][1], 0.4020553681373720832e-4, 1e-14,
-      "iauPn00b", "rbpn32", status);
-   vvd(rbpn[2][2], 0.9999998314958529887, 1e-12,
-      "iauPn00b", "rbpn33", status);
-
-}
-
-static void t_pn06a(int *status)
-/*
-**  - - - - - - - -
-**   t _ p n 0 6 a
-**  - - - - - - - -
-**
-**  Test iauPn06a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPn06a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double dpsi, deps, epsa;
-   double rb[3][3], rp[3][3], rbp[3][3], rn[3][3], rbpn[3][3];
-
-
-   iauPn06a(2400000.5, 53736.0, &dpsi, &deps, &epsa,
-            rb, rp, rbp, rn, rbpn);
-
-   vvd(dpsi, -0.9630912025820308797e-5, 1e-12,
-       "iauPn06a", "dpsi", status);
-   vvd(deps,  0.4063238496887249798e-4, 1e-12,
-       "iauPn06a", "deps", status);
-   vvd(epsa,  0.4090789763356509926, 1e-12, "iauPn06a", "epsa", status);
-
-   vvd(rb[0][0], 0.9999999999999942497, 1e-12,
-       "iauPn06a", "rb11", status);
-   vvd(rb[0][1], -0.7078368960971557145e-7, 1e-14,
-       "iauPn06a", "rb12", status);
-   vvd(rb[0][2], 0.8056213977613185606e-7, 1e-14,
-       "iauPn06a", "rb13", status);
-
-   vvd(rb[1][0], 0.7078368694637674333e-7, 1e-14,
-       "iauPn06a", "rb21", status);
-   vvd(rb[1][1], 0.9999999999999969484, 1e-12,
-       "iauPn06a", "rb22", status);
-   vvd(rb[1][2], 0.3305943742989134124e-7, 1e-14,
-       "iauPn06a", "rb23", status);
-
-   vvd(rb[2][0], -0.8056214211620056792e-7, 1e-14,
-       "iauPn06a", "rb31", status);
-   vvd(rb[2][1], -0.3305943172740586950e-7, 1e-14,
-       "iauPn06a", "rb32", status);
-   vvd(rb[2][2], 0.9999999999999962084, 1e-12,
-       "iauPn06a", "rb33", status);
-
-   vvd(rp[0][0], 0.9999989300536854831, 1e-12,
-       "iauPn06a", "rp11", status);
-   vvd(rp[0][1], -0.1341646886204443795e-2, 1e-14,
-       "iauPn06a", "rp12", status);
-   vvd(rp[0][2], -0.5829880933488627759e-3, 1e-14,
-       "iauPn06a", "rp13", status);
-
-   vvd(rp[1][0], 0.1341646890569782183e-2, 1e-14,
-       "iauPn06a", "rp21", status);
-   vvd(rp[1][1], 0.9999990999913319321, 1e-12,
-       "iauPn06a", "rp22", status);
-   vvd(rp[1][2], -0.3835944216374477457e-6, 1e-14,
-       "iauPn06a", "rp23", status);
-
-   vvd(rp[2][0], 0.5829880833027867368e-3, 1e-14,
-       "iauPn06a", "rp31", status);
-   vvd(rp[2][1], -0.3985701514686976112e-6, 1e-14,
-       "iauPn06a", "rp32", status);
-   vvd(rp[2][2], 0.9999998300623534950, 1e-12,
-       "iauPn06a", "rp33", status);
-
-   vvd(rbp[0][0], 0.9999989300056797893, 1e-12,
-       "iauPn06a", "rbp11", status);
-   vvd(rbp[0][1], -0.1341717650545059598e-2, 1e-14,
-       "iauPn06a", "rbp12", status);
-   vvd(rbp[0][2], -0.5829075756493728856e-3, 1e-14,
-       "iauPn06a", "rbp13", status);
-
-   vvd(rbp[1][0], 0.1341717674223918101e-2, 1e-14,
-       "iauPn06a", "rbp21", status);
-   vvd(rbp[1][1], 0.9999990998963748448, 1e-12,
-       "iauPn06a", "rbp22", status);
-   vvd(rbp[1][2], -0.3504269280170069029e-6, 1e-14,
-       "iauPn06a", "rbp23", status);
-
-   vvd(rbp[2][0], 0.5829075211461454599e-3, 1e-14,
-       "iauPn06a", "rbp31", status);
-   vvd(rbp[2][1], -0.4316708436255949093e-6, 1e-14,
-       "iauPn06a", "rbp32", status);
-   vvd(rbp[2][2], 0.9999998301093032943, 1e-12,
-       "iauPn06a", "rbp33", status);
-
-   vvd(rn[0][0], 0.9999999999536227668, 1e-12,
-       "iauPn06a", "rn11", status);
-   vvd(rn[0][1], 0.8836241998111535233e-5, 1e-14,
-       "iauPn06a", "rn12", status);
-   vvd(rn[0][2], 0.3830834608415287707e-5, 1e-14,
-       "iauPn06a", "rn13", status);
-
-   vvd(rn[1][0], -0.8836086334870740138e-5, 1e-14,
-       "iauPn06a", "rn21", status);
-   vvd(rn[1][1], 0.9999999991354657474, 1e-12,
-       "iauPn06a", "rn22", status);
-   vvd(rn[1][2], -0.4063240188248455065e-4, 1e-14,
-       "iauPn06a", "rn23", status);
-
-   vvd(rn[2][0], -0.3831193642839398128e-5, 1e-14,
-       "iauPn06a", "rn31", status);
-   vvd(rn[2][1], 0.4063236803101479770e-4, 1e-14,
-       "iauPn06a", "rn32", status);
-   vvd(rn[2][2], 0.9999999991671663114, 1e-12,
-       "iauPn06a", "rn33", status);
-
-   vvd(rbpn[0][0], 0.9999989440480669738, 1e-12,
-       "iauPn06a", "rbpn11", status);
-   vvd(rbpn[0][1], -0.1332881418091915973e-2, 1e-14,
-       "iauPn06a", "rbpn12", status);
-   vvd(rbpn[0][2], -0.5790767447612042565e-3, 1e-14,
-       "iauPn06a", "rbpn13", status);
-
-   vvd(rbpn[1][0], 0.1332857911250989133e-2, 1e-14,
-       "iauPn06a", "rbpn21", status);
-   vvd(rbpn[1][1], 0.9999991109049141908, 1e-12,
-       "iauPn06a", "rbpn22", status);
-   vvd(rbpn[1][2], -0.4097767128546784878e-4, 1e-14,
-       "iauPn06a", "rbpn23", status);
-
-   vvd(rbpn[2][0], 0.5791308482835292617e-3, 1e-14,
-       "iauPn06a", "rbpn31", status);
-   vvd(rbpn[2][1], 0.4020580099454020310e-4, 1e-14,
-       "iauPn06a", "rbpn32", status);
-   vvd(rbpn[2][2], 0.9999998314954628695, 1e-12,
-       "iauPn06a", "rbpn33", status);
-
-}
-
-static void t_pn06(int *status)
-/*
-**  - - - - - - -
-**   t _ p n 0 6
-**  - - - - - - -
-**
-**  Test iauPn06 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPn06, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double dpsi, deps, epsa,
-          rb[3][3], rp[3][3], rbp[3][3], rn[3][3], rbpn[3][3];
-
-
-   dpsi = -0.9632552291149335877e-5;
-   deps =  0.4063197106621141414e-4;
-
-   iauPn06(2400000.5, 53736.0, dpsi, deps,
-           &epsa, rb, rp, rbp, rn, rbpn);
-
-   vvd(epsa, 0.4090789763356509926, 1e-12, "iauPn06", "epsa", status);
-
-   vvd(rb[0][0], 0.9999999999999942497, 1e-12,
-       "iauPn06", "rb11", status);
-   vvd(rb[0][1], -0.7078368960971557145e-7, 1e-14,
-       "iauPn06", "rb12", status);
-   vvd(rb[0][2], 0.8056213977613185606e-7, 1e-14,
-       "iauPn06", "rb13", status);
-
-   vvd(rb[1][0], 0.7078368694637674333e-7, 1e-14,
-       "iauPn06", "rb21", status);
-   vvd(rb[1][1], 0.9999999999999969484, 1e-12,
-       "iauPn06", "rb22", status);
-   vvd(rb[1][2], 0.3305943742989134124e-7, 1e-14,
-       "iauPn06", "rb23", status);
-
-   vvd(rb[2][0], -0.8056214211620056792e-7, 1e-14,
-       "iauPn06", "rb31", status);
-   vvd(rb[2][1], -0.3305943172740586950e-7, 1e-14,
-       "iauPn06", "rb32", status);
-   vvd(rb[2][2], 0.9999999999999962084, 1e-12,
-       "iauPn06", "rb33", status);
-
-   vvd(rp[0][0], 0.9999989300536854831, 1e-12,
-       "iauPn06", "rp11", status);
-   vvd(rp[0][1], -0.1341646886204443795e-2, 1e-14,
-       "iauPn06", "rp12", status);
-   vvd(rp[0][2], -0.5829880933488627759e-3, 1e-14,
-       "iauPn06", "rp13", status);
-
-   vvd(rp[1][0], 0.1341646890569782183e-2, 1e-14,
-       "iauPn06", "rp21", status);
-   vvd(rp[1][1], 0.9999990999913319321, 1e-12,
-       "iauPn06", "rp22", status);
-   vvd(rp[1][2], -0.3835944216374477457e-6, 1e-14,
-       "iauPn06", "rp23", status);
-
-   vvd(rp[2][0], 0.5829880833027867368e-3, 1e-14,
-       "iauPn06", "rp31", status);
-   vvd(rp[2][1], -0.3985701514686976112e-6, 1e-14,
-       "iauPn06", "rp32", status);
-   vvd(rp[2][2], 0.9999998300623534950, 1e-12,
-       "iauPn06", "rp33", status);
-
-   vvd(rbp[0][0], 0.9999989300056797893, 1e-12,
-       "iauPn06", "rbp11", status);
-   vvd(rbp[0][1], -0.1341717650545059598e-2, 1e-14,
-       "iauPn06", "rbp12", status);
-   vvd(rbp[0][2], -0.5829075756493728856e-3, 1e-14,
-       "iauPn06", "rbp13", status);
-
-   vvd(rbp[1][0], 0.1341717674223918101e-2, 1e-14,
-       "iauPn06", "rbp21", status);
-   vvd(rbp[1][1], 0.9999990998963748448, 1e-12,
-       "iauPn06", "rbp22", status);
-   vvd(rbp[1][2], -0.3504269280170069029e-6, 1e-14,
-       "iauPn06", "rbp23", status);
-
-   vvd(rbp[2][0], 0.5829075211461454599e-3, 1e-14,
-       "iauPn06", "rbp31", status);
-   vvd(rbp[2][1], -0.4316708436255949093e-6, 1e-14,
-       "iauPn06", "rbp32", status);
-   vvd(rbp[2][2], 0.9999998301093032943, 1e-12,
-       "iauPn06", "rbp33", status);
-
-   vvd(rn[0][0], 0.9999999999536069682, 1e-12,
-       "iauPn06", "rn11", status);
-   vvd(rn[0][1], 0.8837746921149881914e-5, 1e-14,
-       "iauPn06", "rn12", status);
-   vvd(rn[0][2], 0.3831487047682968703e-5, 1e-14,
-       "iauPn06", "rn13", status);
-
-   vvd(rn[1][0], -0.8837591232983692340e-5, 1e-14,
-       "iauPn06", "rn21", status);
-   vvd(rn[1][1], 0.9999999991354692664, 1e-12,
-       "iauPn06", "rn22", status);
-   vvd(rn[1][2], -0.4063198798558931215e-4, 1e-14,
-       "iauPn06", "rn23", status);
-
-   vvd(rn[2][0], -0.3831846139597250235e-5, 1e-14,
-       "iauPn06", "rn31", status);
-   vvd(rn[2][1], 0.4063195412258792914e-4, 1e-14,
-       "iauPn06", "rn32", status);
-   vvd(rn[2][2], 0.9999999991671806293, 1e-12,
-       "iauPn06", "rn33", status);
-
-   vvd(rbpn[0][0], 0.9999989440504506688, 1e-12,
-       "iauPn06", "rbpn11", status);
-   vvd(rbpn[0][1], -0.1332879913170492655e-2, 1e-14,
-       "iauPn06", "rbpn12", status);
-   vvd(rbpn[0][2], -0.5790760923225655753e-3, 1e-14,
-       "iauPn06", "rbpn13", status);
-
-   vvd(rbpn[1][0], 0.1332856406595754748e-2, 1e-14,
-       "iauPn06", "rbpn21", status);
-   vvd(rbpn[1][1], 0.9999991109069366795, 1e-12,
-       "iauPn06", "rbpn22", status);
-   vvd(rbpn[1][2], -0.4097725651142641812e-4, 1e-14,
-       "iauPn06", "rbpn23", status);
-
-   vvd(rbpn[2][0], 0.5791301952321296716e-3, 1e-14,
-       "iauPn06", "rbpn31", status);
-   vvd(rbpn[2][1], 0.4020538796195230577e-4, 1e-14,
-       "iauPn06", "rbpn32", status);
-   vvd(rbpn[2][2], 0.9999998314958576778, 1e-12,
-       "iauPn06", "rbpn33", status);
-
-}
-
-static void t_pnm00a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ p n m 0 0 a
-**  - - - - - - - - -
-**
-**  Test iauPnm00a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPnm00a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rbpn[3][3];
-
-
-   iauPnm00a(2400000.5, 50123.9999, rbpn);
-
-   vvd(rbpn[0][0], 0.9999995832793134257, 1e-12,
-       "iauPnm00a", "11", status);
-   vvd(rbpn[0][1], 0.8372384254137809439e-3, 1e-14,
-       "iauPnm00a", "12", status);
-   vvd(rbpn[0][2], 0.3639684306407150645e-3, 1e-14,
-       "iauPnm00a", "13", status);
-
-   vvd(rbpn[1][0], -0.8372535226570394543e-3, 1e-14,
-       "iauPnm00a", "21", status);
-   vvd(rbpn[1][1], 0.9999996486491582471, 1e-12,
-       "iauPnm00a", "22", status);
-   vvd(rbpn[1][2], 0.4132915262664072381e-4, 1e-14,
-       "iauPnm00a", "23", status);
-
-   vvd(rbpn[2][0], -0.3639337004054317729e-3, 1e-14,
-       "iauPnm00a", "31", status);
-   vvd(rbpn[2][1], -0.4163386925461775873e-4, 1e-14,
-       "iauPnm00a", "32", status);
-   vvd(rbpn[2][2], 0.9999999329094390695, 1e-12,
-       "iauPnm00a", "33", status);
-
-}
-
-static void t_pnm00b(int *status)
-/*
-**  - - - - - - - - -
-**   t _ p n m 0 0 b
-**  - - - - - - - - -
-**
-**  Test iauPnm00b function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPnm00b, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rbpn[3][3];
-
-
-   iauPnm00b(2400000.5, 50123.9999, rbpn);
-
-   vvd(rbpn[0][0], 0.9999995832776208280, 1e-12,
-       "iauPnm00b", "11", status);
-   vvd(rbpn[0][1], 0.8372401264429654837e-3, 1e-14,
-       "iauPnm00b", "12", status);
-   vvd(rbpn[0][2], 0.3639691681450271771e-3, 1e-14,
-       "iauPnm00b", "13", status);
-
-   vvd(rbpn[1][0], -0.8372552234147137424e-3, 1e-14,
-       "iauPnm00b", "21", status);
-   vvd(rbpn[1][1], 0.9999996486477686123, 1e-12,
-       "iauPnm00b", "22", status);
-   vvd(rbpn[1][2], 0.4132832190946052890e-4, 1e-14,
-       "iauPnm00b", "23", status);
-
-   vvd(rbpn[2][0], -0.3639344385341866407e-3, 1e-14,
-       "iauPnm00b", "31", status);
-   vvd(rbpn[2][1], -0.4163303977421522785e-4, 1e-14,
-       "iauPnm00b", "32", status);
-   vvd(rbpn[2][2], 0.9999999329092049734, 1e-12,
-       "iauPnm00b", "33", status);
-
-}
-
-static void t_pnm06a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ p n m 0 6 a
-**  - - - - - - - - -
-**
-**  Test iauPnm06a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPnm06a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rbpn[3][3];
-
-
-   iauPnm06a(2400000.5, 50123.9999, rbpn);
-
-   vvd(rbpn[0][0], 0.9999995832794205484, 1e-12,
-       "iauPnm06a", "11", status);
-   vvd(rbpn[0][1], 0.8372382772630962111e-3, 1e-14,
-       "iauPnm06a", "12", status);
-   vvd(rbpn[0][2], 0.3639684771140623099e-3, 1e-14,
-       "iauPnm06a", "13", status);
-
-   vvd(rbpn[1][0], -0.8372533744743683605e-3, 1e-14,
-       "iauPnm06a", "21", status);
-   vvd(rbpn[1][1], 0.9999996486492861646, 1e-12,
-       "iauPnm06a", "22", status);
-   vvd(rbpn[1][2], 0.4132905944611019498e-4, 1e-14,
-       "iauPnm06a", "23", status);
-
-   vvd(rbpn[2][0], -0.3639337469629464969e-3, 1e-14,
-       "iauPnm06a", "31", status);
-   vvd(rbpn[2][1], -0.4163377605910663999e-4, 1e-14,
-       "iauPnm06a", "32", status);
-   vvd(rbpn[2][2], 0.9999999329094260057, 1e-12,
-       "iauPnm06a", "33", status);
-
-}
-
-static void t_pnm80(int *status)
-/*
-**  - - - - - - - -
-**   t _ p n m 8 0
-**  - - - - - - - -
-**
-**  Test iauPnm80 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPnm80, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double rmatpn[3][3];
-
-
-   iauPnm80(2400000.5, 50123.9999, rmatpn);
-
-   vvd(rmatpn[0][0], 0.9999995831934611169, 1e-12,
-       "iauPnm80", "11", status);
-   vvd(rmatpn[0][1], 0.8373654045728124011e-3, 1e-14,
-       "iauPnm80", "12", status);
-   vvd(rmatpn[0][2], 0.3639121916933106191e-3, 1e-14,
-       "iauPnm80", "13", status);
-
-   vvd(rmatpn[1][0], -0.8373804896118301316e-3, 1e-14,
-       "iauPnm80", "21", status);
-   vvd(rmatpn[1][1], 0.9999996485439674092, 1e-12,
-       "iauPnm80", "22", status);
-   vvd(rmatpn[1][2], 0.4130202510421549752e-4, 1e-14,
-       "iauPnm80", "23", status);
-
-   vvd(rmatpn[2][0], -0.3638774789072144473e-3, 1e-14,
-       "iauPnm80", "31", status);
-   vvd(rmatpn[2][1], -0.4160674085851722359e-4, 1e-14,
-       "iauPnm80", "32", status);
-   vvd(rmatpn[2][2], 0.9999999329310274805, 1e-12,
-       "iauPnm80", "33", status);
-
-}
-
-static void t_pom00(int *status)
-/*
-**  - - - - - - - -
-**   t _ p o m 0 0
-**  - - - - - - - -
-**
-**  Test iauPom00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPom00, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double xp, yp, sp, rpom[3][3];
-
-
-   xp =  2.55060238e-7;
-   yp =  1.860359247e-6;
-   sp = -0.1367174580728891460e-10;
-
-   iauPom00(xp, yp, sp, rpom);
-
-   vvd(rpom[0][0], 0.9999999999999674721, 1e-12,
-       "iauPom00", "11", status);
-   vvd(rpom[0][1], -0.1367174580728846989e-10, 1e-16,
-       "iauPom00", "12", status);
-   vvd(rpom[0][2], 0.2550602379999972345e-6, 1e-16,
-       "iauPom00", "13", status);
-
-   vvd(rpom[1][0], 0.1414624947957029801e-10, 1e-16,
-       "iauPom00", "21", status);
-   vvd(rpom[1][1], 0.9999999999982695317, 1e-12,
-       "iauPom00", "22", status);
-   vvd(rpom[1][2], -0.1860359246998866389e-5, 1e-16,
-       "iauPom00", "23", status);
-
-   vvd(rpom[2][0], -0.2550602379741215021e-6, 1e-16,
-       "iauPom00", "31", status);
-   vvd(rpom[2][1], 0.1860359247002414021e-5, 1e-16,
-       "iauPom00", "32", status);
-   vvd(rpom[2][2], 0.9999999999982370039, 1e-12,
-       "iauPom00", "33", status);
-
-}
-
-static void t_ppp(int *status)
-/*
-**  - - - - - -
-**   t _ p p p
-**  - - - - - -
-**
-**  Test iauPpp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPpp, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double a[3], b[3], apb[3];
-
-
-   a[0] = 2.0;
-   a[1] = 2.0;
-   a[2] = 3.0;
-
-   b[0] = 1.0;
-   b[1] = 3.0;
-   b[2] = 4.0;
-
-   iauPpp(a, b, apb);
-
-   vvd(apb[0], 3.0, 1e-12, "iauPpp", "0", status);
-   vvd(apb[1], 5.0, 1e-12, "iauPpp", "1", status);
-   vvd(apb[2], 7.0, 1e-12, "iauPpp", "2", status);
-
-}
-
-static void t_ppsp(int *status)
-/*
-**  - - - - - - -
-**   t _ p p s p
-**  - - - - - - -
-**
-**  Test iauPpsp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPpsp, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double a[3], s, b[3], apsb[3];
-
-
-   a[0] = 2.0;
-   a[1] = 2.0;
-   a[2] = 3.0;
-
-   s = 5.0;
-
-   b[0] = 1.0;
-   b[1] = 3.0;
-   b[2] = 4.0;
-
-   iauPpsp(a, s, b, apsb);
-
-   vvd(apsb[0], 7.0, 1e-12, "iauPpsp", "0", status);
-   vvd(apsb[1], 17.0, 1e-12, "iauPpsp", "1", status);
-   vvd(apsb[2], 23.0, 1e-12, "iauPpsp", "2", status);
-
-}
-
-static void t_pr00(int *status)
-/*
-**  - - - - - - -
-**   t _ p r 0 0
-**  - - - - - - -
-**
-**  Test iauPr00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPr00, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double dpsipr, depspr;
-
-   iauPr00(2400000.5, 53736, &dpsipr, &depspr);
-
-   vvd(dpsipr, -0.8716465172668347629e-7, 1e-22,
-      "iauPr00", "dpsipr", status);
-   vvd(depspr, -0.7342018386722813087e-8, 1e-22,
-      "iauPr00", "depspr", status);
-
-}
-
-static void t_prec76(int *status)
-/*
-**  - - - - - - - - -
-**   t _ p r e c 7 6
-**  - - - - - - - - -
-**
-**  Test iauPrec76 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPrec76, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double ep01, ep02, ep11, ep12, zeta, z, theta;
-
-
-   ep01 = 2400000.5;
-   ep02 = 33282.0;
-   ep11 = 2400000.5;
-   ep12 = 51544.0;
-
-   iauPrec76(ep01, ep02, ep11, ep12, &zeta, &z, &theta);
-
-   vvd(zeta,  0.5588961642000161243e-2, 1e-12,
-       "iauPrec76", "zeta",  status);
-   vvd(z,     0.5589922365870680624e-2, 1e-12,
-       "iauPrec76", "z",     status);
-   vvd(theta, 0.4858945471687296760e-2, 1e-12,
-       "iauPrec76", "theta", status);
-
-}
-
-static void t_pv2p(int *status)
-/*
-**  - - - - - - -
-**   t _ p v 2 p
-**  - - - - - - -
-**
-**  Test iauPv2p function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPv2p, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double pv[2][3], p[3];
-
-
-   pv[0][0] =  0.3;
-   pv[0][1] =  1.2;
-   pv[0][2] = -2.5;
-
-   pv[1][0] = -0.5;
-   pv[1][1] =  3.1;
-   pv[1][2] =  0.9;
-
-   iauPv2p(pv, p);
-
-   vvd(p[0],  0.3, 0.0, "iauPv2p", "1", status);
-   vvd(p[1],  1.2, 0.0, "iauPv2p", "2", status);
-   vvd(p[2], -2.5, 0.0, "iauPv2p", "3", status);
-
-}
-
-static void t_pv2s(int *status)
-/*
-**  - - - - - - -
-**   t _ p v 2 s
-**  - - - - - - -
-**
-**  Test iauPv2s function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPv2s, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double pv[2][3], theta, phi, r, td, pd, rd;
-
-
-   pv[0][0] = -0.4514964673880165;
-   pv[0][1] =  0.03093394277342585;
-   pv[0][2] =  0.05594668105108779;
-
-   pv[1][0] =  1.292270850663260e-5;
-   pv[1][1] =  2.652814182060692e-6;
-   pv[1][2] =  2.568431853930293e-6;
-
-   iauPv2s(pv, &theta, &phi, &r, &td, &pd, &rd);
-
-   vvd(theta, 3.073185307179586515, 1e-12, "iauPv2s", "theta", status);
-   vvd(phi, 0.1229999999999999992, 1e-12, "iauPv2s", "phi", status);
-   vvd(r, 0.4559999999999999757, 1e-12, "iauPv2s", "r", status);
-   vvd(td, -0.7800000000000000364e-5, 1e-16, "iauPv2s", "td", status);
-   vvd(pd, 0.9010000000000001639e-5, 1e-16, "iauPv2s", "pd", status);
-   vvd(rd, -0.1229999999999999832e-4, 1e-16, "iauPv2s", "rd", status);
-
-}
-
-static void t_pvdpv(int *status)
-/*
-**  - - - - - - - -
-**   t _ p v d p v
-**  - - - - - - - -
-**
-**  Test iauPvdpv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPvdpv, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double a[2][3], b[2][3], adb[2];
-
-
-   a[0][0] = 2.0;
-   a[0][1] = 2.0;
-   a[0][2] = 3.0;
-
-   a[1][0] = 6.0;
-   a[1][1] = 0.0;
-   a[1][2] = 4.0;
-
-   b[0][0] = 1.0;
-   b[0][1] = 3.0;
-   b[0][2] = 4.0;
-
-   b[1][0] = 0.0;
-   b[1][1] = 2.0;
-   b[1][2] = 8.0;
-
-   iauPvdpv(a, b, adb);
-
-   vvd(adb[0], 20.0, 1e-12, "iauPvdpv", "1", status);
-   vvd(adb[1], 50.0, 1e-12, "iauPvdpv", "2", status);
-
-}
-
-static void t_pvm(int *status)
-/*
-**  - - - - - -
-**   t _ p v m
-**  - - - - - -
-**
-**  Test iauPvm function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPvm, vvd
-**
-**  This revision:  2008 May 25
-*/
-{
-   double pv[2][3], r, s;
-
-
-   pv[0][0] =  0.3;
-   pv[0][1] =  1.2;
-   pv[0][2] = -2.5;
-
-   pv[1][0] =  0.45;
-   pv[1][1] = -0.25;
-   pv[1][2] =  1.1;
-
-   iauPvm(pv, &r, &s);
-
-   vvd(r, 2.789265136196270604, 1e-12, "iauPvm", "r", status);
-   vvd(s, 1.214495780149111922, 1e-12, "iauPvm", "s", status);
-
-}
-
-static void t_pvmpv(int *status)
-/*
-**  - - - - - - - -
-**   t _ p v m p v
-**  - - - - - - - -
-**
-**  Test iauPvmpv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPvmpv, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double a[2][3], b[2][3], amb[2][3];
-
-
-   a[0][0] = 2.0;
-   a[0][1] = 2.0;
-   a[0][2] = 3.0;
-
-   a[1][0] = 5.0;
-   a[1][1] = 6.0;
-   a[1][2] = 3.0;
-
-   b[0][0] = 1.0;
-   b[0][1] = 3.0;
-   b[0][2] = 4.0;
-
-   b[1][0] = 3.0;
-   b[1][1] = 2.0;
-   b[1][2] = 1.0;
-
-   iauPvmpv(a, b, amb);
-
-   vvd(amb[0][0],  1.0, 1e-12, "iauPvmpv", "11", status);
-   vvd(amb[0][1], -1.0, 1e-12, "iauPvmpv", "21", status);
-   vvd(amb[0][2], -1.0, 1e-12, "iauPvmpv", "31", status);
-
-   vvd(amb[1][0],  2.0, 1e-12, "iauPvmpv", "12", status);
-   vvd(amb[1][1],  4.0, 1e-12, "iauPvmpv", "22", status);
-   vvd(amb[1][2],  2.0, 1e-12, "iauPvmpv", "32", status);
-
-}
-
-static void t_pvppv(int *status)
-/*
-**  - - - - - - - -
-**   t _ p v p p v
-**  - - - - - - - -
-**
-**  Test iauPvppv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPvppv, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double a[2][3], b[2][3], apb[2][3];
-
-
-   a[0][0] = 2.0;
-   a[0][1] = 2.0;
-   a[0][2] = 3.0;
-
-   a[1][0] = 5.0;
-   a[1][1] = 6.0;
-   a[1][2] = 3.0;
-
-   b[0][0] = 1.0;
-   b[0][1] = 3.0;
-   b[0][2] = 4.0;
-
-   b[1][0] = 3.0;
-   b[1][1] = 2.0;
-   b[1][2] = 1.0;
-
-   iauPvppv(a, b, apb);
-
-   vvd(apb[0][0], 3.0, 1e-12, "iauPvppv", "p1", status);
-   vvd(apb[0][1], 5.0, 1e-12, "iauPvppv", "p2", status);
-   vvd(apb[0][2], 7.0, 1e-12, "iauPvppv", "p3", status);
-
-   vvd(apb[1][0], 8.0, 1e-12, "iauPvppv", "v1", status);
-   vvd(apb[1][1], 8.0, 1e-12, "iauPvppv", "v2", status);
-   vvd(apb[1][2], 4.0, 1e-12, "iauPvppv", "v3", status);
-
-}
-
-static void t_pvstar(int *status)
-/*
-**  - - - - - - - - -
-**   t _ p v s t a r
-**  - - - - - - - - -
-**
-**  Test iauPvstar function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPvstar, vvd, viv
-**
-**  This revision:  2009 November 6
-*/
-{
-   double pv[2][3], ra, dec, pmr, pmd, px, rv;
-   int j;
-
-
-   pv[0][0] =  126668.5912743160601;
-   pv[0][1] =  2136.792716839935195;
-   pv[0][2] = -245251.2339876830091;
-
-   pv[1][0] = -0.4051854035740712739e-2;
-   pv[1][1] = -0.6253919754866173866e-2;
-   pv[1][2] =  0.1189353719774107189e-1;
-
-   j = iauPvstar(pv, &ra, &dec, &pmr, &pmd, &px, &rv);
-
-   vvd(ra, 0.1686756e-1, 1e-12, "iauPvstar", "ra", status);
-   vvd(dec, -1.093989828, 1e-12, "iauPvstar", "dec", status);
-   vvd(pmr, -0.178323516e-4, 1e-16, "iauPvstar", "pmr", status);
-   vvd(pmd, 0.2336024047e-5, 1e-16, "iauPvstar", "pmd", status);
-   vvd(px, 0.74723, 1e-12, "iauPvstar", "px", status);
-   vvd(rv, -21.6, 1e-11, "iauPvstar", "rv", status);
-
-   viv(j, 0, "iauPvstar", "j", status);
-
-}
-
-static void t_pvu(int *status)
-/*
-**  - - - - - -
-**   t _ p v u
-**  - - - - - -
-**
-**  Test iauPvu function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPvu, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double pv[2][3], upv[2][3];
-
-
-   pv[0][0] =  126668.5912743160734;
-   pv[0][1] =  2136.792716839935565;
-   pv[0][2] = -245251.2339876830229;
-
-   pv[1][0] = -0.4051854035740713039e-2;
-   pv[1][1] = -0.6253919754866175788e-2;
-   pv[1][2] =  0.1189353719774107615e-1;
-
-   iauPvu(2920.0, pv, upv);
-
-   vvd(upv[0][0], 126656.7598605317105, 1e-12,
-       "iauPvu", "p1", status);
-   vvd(upv[0][1], 2118.531271155726332, 1e-12,
-       "iauPvu", "p2", status);
-   vvd(upv[0][2], -245216.5048590656190, 1e-12,
-       "iauPvu", "p3", status);
-
-   vvd(upv[1][0], -0.4051854035740713039e-2, 1e-12,
-       "iauPvu", "v1", status);
-   vvd(upv[1][1], -0.6253919754866175788e-2, 1e-12,
-       "iauPvu", "v2", status);
-   vvd(upv[1][2], 0.1189353719774107615e-1, 1e-12,
-       "iauPvu", "v3", status);
-
-}
-
-static void t_pvup(int *status)
-/*
-**  - - - - - - -
-**   t _ p v u p
-**  - - - - - - -
-**
-**  Test iauPvup function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPvup, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double pv[2][3], p[3];
-
-
-   pv[0][0] =  126668.5912743160734;
-   pv[0][1] =  2136.792716839935565;
-   pv[0][2] = -245251.2339876830229;
-
-   pv[1][0] = -0.4051854035740713039e-2;
-   pv[1][1] = -0.6253919754866175788e-2;
-   pv[1][2] =  0.1189353719774107615e-1;
-
-   iauPvup(2920.0, pv, p);
-
-   vvd(p[0],  126656.7598605317105,   1e-12, "iauPvup", "1", status);
-   vvd(p[1],    2118.531271155726332, 1e-12, "iauPvup", "2", status);
-   vvd(p[2], -245216.5048590656190,   1e-12, "iauPvup", "3", status);
-
-}
-
-static void t_pvxpv(int *status)
-/*
-**  - - - - - - - -
-**   t _ p v x p v
-**  - - - - - - - -
-**
-**  Test iauPvxpv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPvxpv, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double a[2][3], b[2][3], axb[2][3];
-
-
-   a[0][0] = 2.0;
-   a[0][1] = 2.0;
-   a[0][2] = 3.0;
-
-   a[1][0] = 6.0;
-   a[1][1] = 0.0;
-   a[1][2] = 4.0;
-
-   b[0][0] = 1.0;
-   b[0][1] = 3.0;
-   b[0][2] = 4.0;
-
-   b[1][0] = 0.0;
-   b[1][1] = 2.0;
-   b[1][2] = 8.0;
-
-   iauPvxpv(a, b, axb);
-
-   vvd(axb[0][0],  -1.0, 1e-12, "iauPvxpv", "p1", status);
-   vvd(axb[0][1],  -5.0, 1e-12, "iauPvxpv", "p2", status);
-   vvd(axb[0][2],   4.0, 1e-12, "iauPvxpv", "p3", status);
-
-   vvd(axb[1][0],  -2.0, 1e-12, "iauPvxpv", "v1", status);
-   vvd(axb[1][1], -36.0, 1e-12, "iauPvxpv", "v2", status);
-   vvd(axb[1][2],  22.0, 1e-12, "iauPvxpv", "v3", status);
-
-}
-
-static void t_pxp(int *status)
-/*
-**  - - - - - -
-**   t _ p x p
-**  - - - - - -
-**
-**  Test iauPxp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauPxp, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double a[3], b[3], axb[3];
-
-
-   a[0] = 2.0;
-   a[1] = 2.0;
-   a[2] = 3.0;
-
-   b[0] = 1.0;
-   b[1] = 3.0;
-   b[2] = 4.0;
-
-   iauPxp(a, b, axb);
-
-   vvd(axb[0], -1.0, 1e-12, "iauPxp", "1", status);
-   vvd(axb[1], -5.0, 1e-12, "iauPxp", "2", status);
-   vvd(axb[2],  4.0, 1e-12, "iauPxp", "3", status);
-
-}
-
-static void t_rm2v(int *status)
-/*
-**  - - - - - - -
-**   t _ r m 2 v
-**  - - - - - - -
-**
-**  Test iauRm2v function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauRm2v, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double r[3][3], w[3];
-
-
-   r[0][0] =  0.00;
-   r[0][1] = -0.80;
-   r[0][2] = -0.60;
-
-   r[1][0] =  0.80;
-   r[1][1] = -0.36;
-   r[1][2] =  0.48;
-
-   r[2][0] =  0.60;
-   r[2][1] =  0.48;
-   r[2][2] = -0.64;
-
-   iauRm2v(r, w);
-
-   vvd(w[0],  0.0,                  1e-12, "iauRm2v", "1", status);
-   vvd(w[1],  1.413716694115406957, 1e-12, "iauRm2v", "2", status);
-   vvd(w[2], -1.884955592153875943, 1e-12, "iauRm2v", "3", status);
-
-}
-
-static void t_rv2m(int *status)
-/*
-**  - - - - - - -
-**   t _ r v 2 m
-**  - - - - - - -
-**
-**  Test iauRv2m function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauRv2m, vvd
-**
-**  This revision:  2008 May 27
-*/
-{
-   double w[3], r[3][3];
-
-
-   w[0] =  0.0;
-   w[1] =  1.41371669;
-   w[2] = -1.88495559;
-
-   iauRv2m(w, r);
-
-   vvd(r[0][0], -0.7071067782221119905, 1e-14, "iauRv2m", "11", status);
-   vvd(r[0][1], -0.5656854276809129651, 1e-14, "iauRv2m", "12", status);
-   vvd(r[0][2], -0.4242640700104211225, 1e-14, "iauRv2m", "13", status);
-
-   vvd(r[1][0],  0.5656854276809129651, 1e-14, "iauRv2m", "21", status);
-   vvd(r[1][1], -0.0925483394532274246, 1e-14, "iauRv2m", "22", status);
-   vvd(r[1][2], -0.8194112531408833269, 1e-14, "iauRv2m", "23", status);
-
-   vvd(r[2][0],  0.4242640700104211225, 1e-14, "iauRv2m", "31", status);
-   vvd(r[2][1], -0.8194112531408833269, 1e-14, "iauRv2m", "32", status);
-   vvd(r[2][2],  0.3854415612311154341, 1e-14, "iauRv2m", "33", status);
-
-}
-
-static void t_rx(int *status)
-/*
-**  - - - - -
-**   t _ r x
-**  - - - - -
-**
-**  Test iauRx function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauRx, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double phi, r[3][3];
-
-
-   phi = 0.3456789;
-
-   r[0][0] = 2.0;
-   r[0][1] = 3.0;
-   r[0][2] = 2.0;
-
-   r[1][0] = 3.0;
-   r[1][1] = 2.0;
-   r[1][2] = 3.0;
-
-   r[2][0] = 3.0;
-   r[2][1] = 4.0;
-   r[2][2] = 5.0;
-
-   iauRx(phi, r);
-
-   vvd(r[0][0], 2.0, 0.0, "iauRx", "11", status);
-   vvd(r[0][1], 3.0, 0.0, "iauRx", "12", status);
-   vvd(r[0][2], 2.0, 0.0, "iauRx", "13", status);
-
-   vvd(r[1][0], 3.839043388235612460, 1e-12, "iauRx", "21", status);
-   vvd(r[1][1], 3.237033249594111899, 1e-12, "iauRx", "22", status);
-   vvd(r[1][2], 4.516714379005982719, 1e-12, "iauRx", "23", status);
-
-   vvd(r[2][0], 1.806030415924501684, 1e-12, "iauRx", "31", status);
-   vvd(r[2][1], 3.085711545336372503, 1e-12, "iauRx", "32", status);
-   vvd(r[2][2], 3.687721683977873065, 1e-12, "iauRx", "33", status);
-
-}
-
-static void t_rxp(int *status)
-/*
-**  - - - - - -
-**   t _ r x p
-**  - - - - - -
-**
-**  Test iauRxp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauRxp, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double r[3][3], p[3], rp[3];
-
-
-   r[0][0] = 2.0;
-   r[0][1] = 3.0;
-   r[0][2] = 2.0;
-
-   r[1][0] = 3.0;
-   r[1][1] = 2.0;
-   r[1][2] = 3.0;
-
-   r[2][0] = 3.0;
-   r[2][1] = 4.0;
-   r[2][2] = 5.0;
-
-   p[0] = 0.2;
-   p[1] = 1.5;
-   p[2] = 0.1;
-
-   iauRxp(r, p, rp);
-
-   vvd(rp[0], 5.1, 1e-12, "iauRxp", "1", status);
-   vvd(rp[1], 3.9, 1e-12, "iauRxp", "2", status);
-   vvd(rp[2], 7.1, 1e-12, "iauRxp", "3", status);
-
-}
-
-static void t_rxpv(int *status)
-/*
-**  - - - - - - -
-**   t _ r x p v
-**  - - - - - - -
-**
-**  Test iauRxpv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauRxpv, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double r[3][3], pv[2][3], rpv[2][3];
-
-
-   r[0][0] = 2.0;
-   r[0][1] = 3.0;
-   r[0][2] = 2.0;
-
-   r[1][0] = 3.0;
-   r[1][1] = 2.0;
-   r[1][2] = 3.0;
-
-   r[2][0] = 3.0;
-   r[2][1] = 4.0;
-   r[2][2] = 5.0;
-
-   pv[0][0] = 0.2;
-   pv[0][1] = 1.5;
-   pv[0][2] = 0.1;
-
-   pv[1][0] = 1.5;
-   pv[1][1] = 0.2;
-   pv[1][2] = 0.1;
-
-   iauRxpv(r, pv, rpv);
-
-   vvd(rpv[0][0], 5.1, 1e-12, "iauRxpv", "11", status);
-   vvd(rpv[1][0], 3.8, 1e-12, "iauRxpv", "12", status);
-
-   vvd(rpv[0][1], 3.9, 1e-12, "iauRxpv", "21", status);
-   vvd(rpv[1][1], 5.2, 1e-12, "iauRxpv", "22", status);
-
-   vvd(rpv[0][2], 7.1, 1e-12, "iauRxpv", "31", status);
-   vvd(rpv[1][2], 5.8, 1e-12, "iauRxpv", "32", status);
-
-}
-
-static void t_rxr(int *status)
-/*
-**  - - - - - -
-**   t _ r x r
-**  - - - - - -
-**
-**  Test iauRxr function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauRxr, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double a[3][3], b[3][3], atb[3][3];
-
-
-   a[0][0] = 2.0;
-   a[0][1] = 3.0;
-   a[0][2] = 2.0;
-
-   a[1][0] = 3.0;
-   a[1][1] = 2.0;
-   a[1][2] = 3.0;
-
-   a[2][0] = 3.0;
-   a[2][1] = 4.0;
-   a[2][2] = 5.0;
-
-   b[0][0] = 1.0;
-   b[0][1] = 2.0;
-   b[0][2] = 2.0;
-
-   b[1][0] = 4.0;
-   b[1][1] = 1.0;
-   b[1][2] = 1.0;
-
-   b[2][0] = 3.0;
-   b[2][1] = 0.0;
-   b[2][2] = 1.0;
-
-   iauRxr(a, b, atb);
-
-   vvd(atb[0][0], 20.0, 1e-12, "iauRxr", "11", status);
-   vvd(atb[0][1],  7.0, 1e-12, "iauRxr", "12", status);
-   vvd(atb[0][2],  9.0, 1e-12, "iauRxr", "13", status);
-
-   vvd(atb[1][0], 20.0, 1e-12, "iauRxr", "21", status);
-   vvd(atb[1][1],  8.0, 1e-12, "iauRxr", "22", status);
-   vvd(atb[1][2], 11.0, 1e-12, "iauRxr", "23", status);
-
-   vvd(atb[2][0], 34.0, 1e-12, "iauRxr", "31", status);
-   vvd(atb[2][1], 10.0, 1e-12, "iauRxr", "32", status);
-   vvd(atb[2][2], 15.0, 1e-12, "iauRxr", "33", status);
-
-}
-
-static void t_ry(int *status)
-/*
-**  - - - - -
-**   t _ r y
-**  - - - - -
-**
-**  Test iauRy function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauRy, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double theta, r[3][3];
-
-
-   theta = 0.3456789;
-
-   r[0][0] = 2.0;
-   r[0][1] = 3.0;
-   r[0][2] = 2.0;
-
-   r[1][0] = 3.0;
-   r[1][1] = 2.0;
-   r[1][2] = 3.0;
-
-   r[2][0] = 3.0;
-   r[2][1] = 4.0;
-   r[2][2] = 5.0;
-
-   iauRy(theta, r);
-
-   vvd(r[0][0], 0.8651847818978159930, 1e-12, "iauRy", "11", status);
-   vvd(r[0][1], 1.467194920539316554, 1e-12, "iauRy", "12", status);
-   vvd(r[0][2], 0.1875137911274457342, 1e-12, "iauRy", "13", status);
-
-   vvd(r[1][0], 3, 1e-12, "iauRy", "21", status);
-   vvd(r[1][1], 2, 1e-12, "iauRy", "22", status);
-   vvd(r[1][2], 3, 1e-12, "iauRy", "23", status);
-
-   vvd(r[2][0], 3.500207892850427330, 1e-12, "iauRy", "31", status);
-   vvd(r[2][1], 4.779889022262298150, 1e-12, "iauRy", "32", status);
-   vvd(r[2][2], 5.381899160903798712, 1e-12, "iauRy", "33", status);
-
-}
-
-static void t_rz(int *status)
-/*
-**  - - - - -
-**   t _ r z
-**  - - - - -
-**
-**  Test iauRz function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauRz, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double psi, r[3][3];
-
-
-   psi = 0.3456789;
-
-   r[0][0] = 2.0;
-   r[0][1] = 3.0;
-   r[0][2] = 2.0;
-
-   r[1][0] = 3.0;
-   r[1][1] = 2.0;
-   r[1][2] = 3.0;
-
-   r[2][0] = 3.0;
-   r[2][1] = 4.0;
-   r[2][2] = 5.0;
-
-   iauRz(psi, r);
-
-   vvd(r[0][0], 2.898197754208926769, 1e-12, "iauRz", "11", status);
-   vvd(r[0][1], 3.500207892850427330, 1e-12, "iauRz", "12", status);
-   vvd(r[0][2], 2.898197754208926769, 1e-12, "iauRz", "13", status);
-
-   vvd(r[1][0], 2.144865911309686813, 1e-12, "iauRz", "21", status);
-   vvd(r[1][1], 0.865184781897815993, 1e-12, "iauRz", "22", status);
-   vvd(r[1][2], 2.144865911309686813, 1e-12, "iauRz", "23", status);
-
-   vvd(r[2][0], 3.0, 1e-12, "iauRz", "31", status);
-   vvd(r[2][1], 4.0, 1e-12, "iauRz", "32", status);
-   vvd(r[2][2], 5.0, 1e-12, "iauRz", "33", status);
-
-}
-
-static void t_s00a(int *status)
-/*
-**  - - - - - - -
-**   t _ s 0 0 a
-**  - - - - - - -
-**
-**  Test iauS00a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauS00a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double s;
-
-
-   s = iauS00a(2400000.5, 52541.0);
-
-   vvd(s, -0.1340684448919163584e-7, 1e-18, "iauS00a", "", status);
-
-}
-
-static void t_s00b(int *status)
-/*
-**  - - - - - - -
-**   t _ s 0 0 b
-**  - - - - - - -
-**
-**  Test iauS00b function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauS00b, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double s;
-
-
-   s = iauS00b(2400000.5, 52541.0);
-
-   vvd(s, -0.1340695782951026584e-7, 1e-18, "iauS00b", "", status);
-
-}
-
-static void t_s00(int *status)
-/*
-**  - - - - - -
-**   t _ s 0 0
-**  - - - - - -
-**
-**  Test iauS00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauS00, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double x, y, s;
-
-
-   x = 0.5791308486706011000e-3;
-   y = 0.4020579816732961219e-4;
-
-   s = iauS00(2400000.5, 53736.0, x, y);
-
-   vvd(s, -0.1220036263270905693e-7, 1e-18, "iauS00", "", status);
-
-}
-
-static void t_s06a(int *status)
-/*
-**  - - - - - - -
-**   t _ s 0 6 a
-**  - - - - - - -
-**
-**  Test iauS06a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauS06a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double s;
-
-
-   s = iauS06a(2400000.5, 52541.0);
-
-   vvd(s, -0.1340680437291812383e-7, 1e-18, "iauS06a", "", status);
-
-}
-
-static void t_s06(int *status)
-/*
-**  - - - - - -
-**   t _ s 0 6
-**  - - - - - -
-**
-**  Test iauS06 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauS06, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double x, y, s;
-
-
-   x = 0.5791308486706011000e-3;
-   y = 0.4020579816732961219e-4;
-
-   s = iauS06(2400000.5, 53736.0, x, y);
-
-   vvd(s, -0.1220032213076463117e-7, 1e-18, "iauS06", "", status);
-
-}
-
-static void t_s2c(int *status)
-/*
-**  - - - - - -
-**   t _ s 2 c
-**  - - - - - -
-**
-**  Test iauS2c function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauS2c, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double c[3];
-
-
-   iauS2c(3.0123, -0.999, c);
-
-   vvd(c[0], -0.5366267667260523906, 1e-12, "iauS2c", "1", status);
-   vvd(c[1],  0.0697711109765145365, 1e-12, "iauS2c", "2", status);
-   vvd(c[2], -0.8409302618566214041, 1e-12, "iauS2c", "3", status);
-
-}
-
-static void t_s2p(int *status)
-/*
-**  - - - - - -
-**   t _ s 2 p
-**  - - - - - -
-**
-**  Test iauS2p function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauS2p, vvd
-**
-**  This revision:  2008 May 25
-*/
-{
-   double p[3];
-
-
-   iauS2p(-3.21, 0.123, 0.456, p);
-
-   vvd(p[0], -0.4514964673880165228, 1e-12, "iauS2p", "x", status);
-   vvd(p[1],  0.0309339427734258688, 1e-12, "iauS2p", "y", status);
-   vvd(p[2],  0.0559466810510877933, 1e-12, "iauS2p", "z", status);
-
-}
-
-static void t_s2pv(int *status)
-/*
-**  - - - - - - -
-**   t _ s 2 p v
-**  - - - - - - -
-**
-**  Test iauS2pv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauS2pv, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double pv[2][3];
-
-
-   iauS2pv(-3.21, 0.123, 0.456, -7.8e-6, 9.01e-6, -1.23e-5, pv);
-
-   vvd(pv[0][0], -0.4514964673880165228, 1e-12, "iauS2pv", "x", status);
-   vvd(pv[0][1],  0.0309339427734258688, 1e-12, "iauS2pv", "y", status);
-   vvd(pv[0][2],  0.0559466810510877933, 1e-12, "iauS2pv", "z", status);
-
-   vvd(pv[1][0],  0.1292270850663260170e-4, 1e-16,
-       "iauS2pv", "vx", status);
-   vvd(pv[1][1],  0.2652814182060691422e-5, 1e-16,
-       "iauS2pv", "vy", status);
-   vvd(pv[1][2],  0.2568431853930292259e-5, 1e-16,
-       "iauS2pv", "vz", status);
-
-}
-
-static void t_s2xpv(int *status)
-/*
-**  - - - - - - - -
-**   t _ s 2 x p v
-**  - - - - - - - -
-**
-**  Test iauS2xpv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauS2xpv, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double s1, s2, pv[2][3], spv[2][3];
-
-
-   s1 = 2.0;
-   s2 = 3.0;
-
-   pv[0][0] =  0.3;
-   pv[0][1] =  1.2;
-   pv[0][2] = -2.5;
-
-   pv[1][0] =  0.5;
-   pv[1][1] =  2.3;
-   pv[1][2] = -0.4;
-
-   iauS2xpv(s1, s2, pv, spv);
-
-   vvd(spv[0][0],  0.6, 1e-12, "iauS2xpv", "p1", status);
-   vvd(spv[0][1],  2.4, 1e-12, "iauS2xpv", "p2", status);
-   vvd(spv[0][2], -5.0, 1e-12, "iauS2xpv", "p3", status);
-
-   vvd(spv[1][0],  1.5, 1e-12, "iauS2xpv", "v1", status);
-   vvd(spv[1][1],  6.9, 1e-12, "iauS2xpv", "v2", status);
-   vvd(spv[1][2], -1.2, 1e-12, "iauS2xpv", "v3", status);
-
-}
-
-static void t_sepp(int *status)
-/*
-**  - - - - - - -
-**   t _ s e p p
-**  - - - - - - -
-**
-**  Test iauSepp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauSepp, vvd
-**
-**  This revision:  2008 November 29
-*/
-{
-   double a[3], b[3], s;
-
-
-   a[0] =  1.0;
-   a[1] =  0.1;
-   a[2] =  0.2;
-
-   b[0] = -3.0;
-   b[1] =  1e-3;
-   b[2] =  0.2;
-
-   s = iauSepp(a, b);
-
-   vvd(s, 2.860391919024660768, 1e-12, "iauSepp", "", status);
-
-}
-
-static void t_seps(int *status)
-/*
-**  - - - - - - -
-**   t _ s e p s
-**  - - - - - - -
-**
-**  Test iauSeps function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauSeps, vvd
-**
-**  This revision:  2008 May 22
-*/
-{
-   double al, ap, bl, bp, s;
-
-
-   al =  1.0;
-   ap =  0.1;
-
-   bl =  0.2;
-   bp = -3.0;
-
-   s = iauSeps(al, ap, bl, bp);
-
-   vvd(s, 2.346722016996998842, 1e-14, "iauSeps", "", status);
-
-}
-
-static void t_sp00(int *status)
-/*
-**  - - - - - - -
-**   t _ s p 0 0
-**  - - - - - - -
-**
-**  Test iauSp00 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauSp00, vvd
-**
-**  This revision:  2008 May 25
-*/
-{
-   vvd(iauSp00(2400000.5, 52541.0),
-       -0.6216698469981019309e-11, 1e-12, "iauSp00", "", status);
-
-}
-
-static void t_starpm(int *status)
-/*
-**  - - - - - - - - -
-**   t _ s t a r p m
-**  - - - - - - - - -
-**
-**  Test iauStarpm function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauStarpm, vvd, viv
-**
-**  This revision:  2008 November 30
-*/
-{
-   double ra1, dec1, pmr1, pmd1, px1, rv1;
-   double ra2, dec2, pmr2, pmd2, px2, rv2;
-   int j;
-
-
-   ra1 =   0.01686756;
-   dec1 = -1.093989828;
-   pmr1 = -1.78323516e-5;
-   pmd1 =  2.336024047e-6;
-   px1 =   0.74723;
-   rv1 = -21.6;
-
-   j = iauStarpm(ra1, dec1, pmr1, pmd1, px1, rv1,
-                 2400000.5, 50083.0, 2400000.5, 53736.0,
-                 &ra2, &dec2, &pmr2, &pmd2, &px2, &rv2);
-
-   vvd(ra2, 0.01668919069414242368, 1e-13,
-       "iauStarpm", "ra", status);
-   vvd(dec2, -1.093966454217127879, 1e-13,
-       "iauStarpm", "dec", status);
-   vvd(pmr2, -0.1783662682155932702e-4, 1e-17,
-       "iauStarpm", "pmr", status);
-   vvd(pmd2, 0.2338092915987603664e-5, 1e-17,
-       "iauStarpm", "pmd", status);
-   vvd(px2, 0.7473533835323493644, 1e-13,
-       "iauStarpm", "px", status);
-   vvd(rv2, -21.59905170476860786, 1e-11,
-       "iauStarpm", "rv", status);
-
-   viv(j, 0, "iauStarpm", "j", status);
-
-}
-
-static void t_starpv(int *status)
-/*
-**  - - - - - - - - -
-**   t _ s t a r p v
-**  - - - - - - - - -
-**
-**  Test iauStarpv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauStarpv, vvd, viv
-**
-**  This revision:  2008 November 30
-*/
-{
-   double ra, dec, pmr, pmd, px, rv, pv[2][3];
-   int j;
-
-
-   ra =   0.01686756;
-   dec = -1.093989828;
-   pmr = -1.78323516e-5;
-   pmd =  2.336024047e-6;
-   px =   0.74723;
-   rv = -21.6;
-
-   j = iauStarpv(ra, dec, pmr, pmd, px, rv, pv);
-
-   vvd(pv[0][0], 126668.5912743160601, 1e-10,
-       "iauStarpv", "11", status);
-   vvd(pv[0][1], 2136.792716839935195, 1e-12,
-       "iauStarpv", "12", status);
-   vvd(pv[0][2], -245251.2339876830091, 1e-10,
-       "iauStarpv", "13", status);
-
-   vvd(pv[1][0], -0.4051854035740712739e-2, 1e-13,
-       "iauStarpv", "21", status);
-   vvd(pv[1][1], -0.6253919754866173866e-2, 1e-15,
-       "iauStarpv", "22", status);
-   vvd(pv[1][2], 0.1189353719774107189e-1, 1e-13,
-       "iauStarpv", "23", status);
-
-   viv(j, 0, "iauStarpv", "j", status);
-
-}
-
-static void t_sxp(int *status)
-/*
-**  - - - - - -
-**   t _ s x p
-**  - - - - - -
-**
-**  Test iauSxp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauSxp, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double s, p[3], sp[3];
-
-
-   s = 2.0;
-
-   p[0] =  0.3;
-   p[1] =  1.2;
-   p[2] = -2.5;
-
-   iauSxp(s, p, sp);
-
-   vvd(sp[0],  0.6, 0.0, "iauSxp", "1", status);
-   vvd(sp[1],  2.4, 0.0, "iauSxp", "2", status);
-   vvd(sp[2], -5.0, 0.0, "iauSxp", "3", status);
-
-}
-
-
-static void t_sxpv(int *status)
-/*
-**  - - - - - - -
-**   t _ s x p v
-**  - - - - - - -
-**
-**  Test iauSxpv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauSxpv, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double s, pv[2][3], spv[2][3];
-
-
-   s = 2.0;
-
-   pv[0][0] =  0.3;
-   pv[0][1] =  1.2;
-   pv[0][2] = -2.5;
-
-   pv[1][0] =  0.5;
-   pv[1][1] =  3.2;
-   pv[1][2] = -0.7;
-
-   iauSxpv(s, pv, spv);
-
-   vvd(spv[0][0],  0.6, 0.0, "iauSxpv", "p1", status);
-   vvd(spv[0][1],  2.4, 0.0, "iauSxpv", "p2", status);
-   vvd(spv[0][2], -5.0, 0.0, "iauSxpv", "p3", status);
-
-   vvd(spv[1][0],  1.0, 0.0, "iauSxpv", "v1", status);
-   vvd(spv[1][1],  6.4, 0.0, "iauSxpv", "v2", status);
-   vvd(spv[1][2], -1.4, 0.0, "iauSxpv", "v3", status);
-
-}
-
-static void t_taitt(int *status)
-/*
-**  - - - - - - - -
-**   t _ t a i t t
-**  - - - - - - - -
-**
-**  Test iauTaitt function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTaitt, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double t1, t2;
-   int j;
-
-
-   j = iauTaitt(2453750.5, 0.892482639, &t1, &t2);
-
-   vvd(t1, 2453750.5, 1e-6, "iauTaitt", "t1", status);
-   vvd(t2, 0.892855139, 1e-12, "iauTaitt", "t2", status);
-   viv(j, 0, "iauTaitt", "j", status);
-
-}
-
-static void t_taiut1(int *status)
-/*
-**  - - - - - - - - -
-**   t _ t a i u t 1
-**  - - - - - - - - -
-**
-**  Test iauTaiut1 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTaiut1, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double u1, u2;
-   int j;
-
-
-   j = iauTaiut1(2453750.5, 0.892482639, -32.6659, &u1, &u2);
-
-   vvd(u1, 2453750.5, 1e-6, "iauTaiut1", "u1", status);
-   vvd(u2, 0.8921045614537037037, 1e-12, "iauTaiut1", "u2", status);
-   viv(j, 0, "iauTaiut1", "j", status);
-
-}
-
-static void t_taiutc(int *status)
-/*
-**  - - - - - - - - -
-**   t _ t a i u t c
-**  - - - - - - - - - - - -
-**
-**  Test iauTaiutc function.
-**
-**  Returned:
-**     status    LOGICAL     TRUE = success, FALSE = fail
-**
-**  Called:  iauTaiutc, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double u1, u2;
-   int j;
-
-
-   j = iauTaiutc(2453750.5, 0.892482639, &u1, &u2);
-
-   vvd(u1, 2453750.5, 1e-6, "iauTaiutc", "u1", status);
-   vvd(u2, 0.8921006945555555556, 1e-12, "iauTaiutc", "u2", status);
-   viv(j, 0, "iauTaiutc", "j", status);
-
-}
-
-static void t_tcbtdb(int *status)
-/*
-**  - - - - - - - - -
-**   t _ t c b t d b
-**  - - - - - - - - -
-**
-**  Test iauTcbtdb function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTcbtdb, vvd, viv
-**
-**  This revision:  2010 September 6
-*/
-{
-   double b1, b2;
-   int j;
-
-
-   j = iauTcbtdb(2453750.5, 0.893019599, &b1, &b2);
-
-   vvd(b1, 2453750.5, 1e-6, "iauTcbtdb", "b1", status);
-   vvd(b2, 0.8928551362746343397, 1e-12, "iauTcbtdb", "b2", status);
-   viv(j, 0, "iauTcbtdb", "j", status);
-
-}
-
-static void t_tcgtt(int *status)
-/*
-**  - - - - - - - -
-**   t _ t c g t t
-**  - - - - - - - -
-**
-**  Test iauTcgtt function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTcgtt, vvd, viv
-**
-**  This revision:  2010 September g
-*/
-{
-   double t1, t2;
-   int j;
-
-
-   j = iauTcgtt(2453750.5, 0.892862531, &t1, &t2);
-
-   vvd(t1, 2453750.5, 1e-6, "iauTcgtt", "t1", status);
-   vvd(t2, 0.8928551387488816828, 1e-12, "iauTcgtt", "t2", status);
-   viv(j, 0, "iauTcgtt", "j", status);
-
-}
-
-static void t_tdbtcb(int *status)
-/*
-**  - - - - - - - - -
-**   t _ t d b t c b
-**  - - - - - - - - -
-**
-**  Test iauTdbtcb function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTdbtcb, vvd, viv
-**
-**  This revision:  2010 September 6
-*/
-{
-   double b1, b2;
-   int j;
-
-
-   j = iauTdbtcb(2453750.5, 0.892855137, &b1, &b2);
-
-   vvd( b1, 2453750.5, 1e-6, "iauTdbtcb", "b1", status);
-   vvd( b2, 0.8930195997253656716, 1e-12, "iauTdbtcb", "b2", status);
-   viv(j, 0, "iauTdbtcb", "j", status);
-
-}
-
-static void t_tdbtt(int *status)
-/*
-**  - - - - - - - -
-**   t _ t d b t t
-**  - - - - - - - -
-**
-**  Test iauTdbtt function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTdbtt, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double t1, t2;
-   int j;
-
-
-   j = iauTdbtt(2453750.5, 0.892855137, -0.000201, &t1, &t2);
-
-   vvd(t1, 2453750.5, 1e-6, "iauTdbtt", "t1", status);
-   vvd(t2, 0.8928551393263888889, 1e-12, "iauTdbtt", "t2", status);
-   viv(j, 0, "iauTdbtt", "j", status);
-
-}
-
-static void t_tf2a(int *status)
-/*
-**  - - - - - - -
-**   t _ t f 2 a
-**  - - - - - - -
-**
-**  Test iauTf2a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTf2a, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double a;
-   int j;
-
-
-   j = iauTf2a('+', 4, 58, 20.2, &a);
-
-   vvd(a, 1.301739278189537429, 1e-12, "iauTf2a", "a", status);
-   viv(j, 0, "iauTf2a", "j", status);
-
-}
-
-static void t_tf2d(int *status)
-/*
-**  - - - - - - -
-**   t _ t f 2 d
-**  - - - - - - -
-**
-**  Test iauTf2d function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTf2d, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double d;
-   int j;
-
-
-   j = iauTf2d(' ', 23, 55, 10.9, &d);
-
-   vvd(d, 0.9966539351851851852, 1e-12, "iauTf2d", "d", status);
-   viv(j, 0, "iauTf2d", "j", status);
-
-}
-
-static void t_tr(int *status)
-/*
-**  - - - - -
-**   t _ t r
-**  - - - - -
-**
-**  Test iauTr function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTr, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double r[3][3], rt[3][3];
-
-
-   r[0][0] = 2.0;
-   r[0][1] = 3.0;
-   r[0][2] = 2.0;
-
-   r[1][0] = 3.0;
-   r[1][1] = 2.0;
-   r[1][2] = 3.0;
-
-   r[2][0] = 3.0;
-   r[2][1] = 4.0;
-   r[2][2] = 5.0;
-
-   iauTr(r, rt);
-
-   vvd(rt[0][0], 2.0, 0.0, "iauTr", "11", status);
-   vvd(rt[0][1], 3.0, 0.0, "iauTr", "12", status);
-   vvd(rt[0][2], 3.0, 0.0, "iauTr", "13", status);
-
-   vvd(rt[1][0], 3.0, 0.0, "iauTr", "21", status);
-   vvd(rt[1][1], 2.0, 0.0, "iauTr", "22", status);
-   vvd(rt[1][2], 4.0, 0.0, "iauTr", "23", status);
-
-   vvd(rt[2][0], 2.0, 0.0, "iauTr", "31", status);
-   vvd(rt[2][1], 3.0, 0.0, "iauTr", "32", status);
-   vvd(rt[2][2], 5.0, 0.0, "iauTr", "33", status);
-
-}
-
-static void t_trxp(int *status)
-/*
-**  - - - - - - -
-**   t _ t r x p
-**  - - - - - - -
-**
-**  Test iauTrxp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTrxp, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double r[3][3], p[3], trp[3];
-
-
-   r[0][0] = 2.0;
-   r[0][1] = 3.0;
-   r[0][2] = 2.0;
-
-   r[1][0] = 3.0;
-   r[1][1] = 2.0;
-   r[1][2] = 3.0;
-
-   r[2][0] = 3.0;
-   r[2][1] = 4.0;
-   r[2][2] = 5.0;
-
-   p[0] = 0.2;
-   p[1] = 1.5;
-   p[2] = 0.1;
-
-   iauTrxp(r, p, trp);
-
-   vvd(trp[0], 5.2, 1e-12, "iauTrxp", "1", status);
-   vvd(trp[1], 4.0, 1e-12, "iauTrxp", "2", status);
-   vvd(trp[2], 5.4, 1e-12, "iauTrxp", "3", status);
-
-}
-
-static void t_trxpv(int *status)
-/*
-**  - - - - - - - -
-**   t _ t r x p v
-**  - - - - - - - -
-**
-**  Test iauTrxpv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTrxpv, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double r[3][3], pv[2][3], trpv[2][3];
-
-
-   r[0][0] = 2.0;
-   r[0][1] = 3.0;
-   r[0][2] = 2.0;
-
-   r[1][0] = 3.0;
-   r[1][1] = 2.0;
-   r[1][2] = 3.0;
-
-   r[2][0] = 3.0;
-   r[2][1] = 4.0;
-   r[2][2] = 5.0;
-
-   pv[0][0] = 0.2;
-   pv[0][1] = 1.5;
-   pv[0][2] = 0.1;
-
-   pv[1][0] = 1.5;
-   pv[1][1] = 0.2;
-   pv[1][2] = 0.1;
-
-   iauTrxpv(r, pv, trpv);
-
-   vvd(trpv[0][0], 5.2, 1e-12, "iauTrxpv", "p1", status);
-   vvd(trpv[0][1], 4.0, 1e-12, "iauTrxpv", "p1", status);
-   vvd(trpv[0][2], 5.4, 1e-12, "iauTrxpv", "p1", status);
-
-   vvd(trpv[1][0], 3.9, 1e-12, "iauTrxpv", "v1", status);
-   vvd(trpv[1][1], 5.3, 1e-12, "iauTrxpv", "v2", status);
-   vvd(trpv[1][2], 4.1, 1e-12, "iauTrxpv", "v3", status);
-
-}
-
-static void t_tttai(int *status)
-/*
-**  - - - - - - - -
-**   t _ t t t a i
-**  - - - - - - - -
-**
-**  Test iauTttai function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTttai, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double a1, a2;
-   int j;
-
-
-   j = iauTttai(2453750.5, 0.892482639, &a1, &a2);
-
-   vvd(a1, 2453750.5, 1e-6, "iauTttai", "a1", status);
-   vvd(a2, 0.892110139, 1e-12, "iauTttai", "a2", status);
-   viv(j, 0, "iauTttai", "j", status);
-
-}
-
-static void t_tttcg(int *status)
-/*
-**  - - - - - - - -
-**   t _ t t t c g
-**  - - - - - - - -
-**
-**  Test iauTttcg function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTttcg, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double g1, g2;
-   int j;
-
-
-   j = iauTttcg(2453750.5, 0.892482639, &g1, &g2);
-
-   vvd( g1, 2453750.5, 1e-6, "iauTttcg", "g1", status);
-   vvd( g2, 0.8924900312508587113, 1e-12, "iauTttcg", "g2", status);
-   viv(j, 0, "iauTttcg", "j", status);
-
-}
-
-static void t_tttdb(int *status)
-/*
-**  - - - - - - - -
-**   t _ t t t d b
-**  - - - - - - - -
-**
-**  Test iauTttdb function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTttdb, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double b1, b2;
-   int j;
-
-
-   j = iauTttdb(2453750.5, 0.892855139, -0.000201, &b1, &b2);
-
-   vvd(b1, 2453750.5, 1e-6, "iauTttdb", "b1", status);
-   vvd(b2, 0.8928551366736111111, 1e-12, "iauTttdb", "b2", status);
-   viv(j, 0, "iauTttdb", "j", status);
-
-}
-
-static void t_ttut1(int *status)
-/*
-**  - - - - - - - -
-**   t _ t t u t 1
-**  - - - - - - - -
-**
-**  Test iauTtut1 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauTtut1, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double u1, u2;
-   int j;
-
-
-   j = iauTtut1(2453750.5, 0.892855139, 64.8499, &u1, &u2);
-
-   vvd(u1, 2453750.5, 1e-6, "iauTtut1", "u1", status);
-   vvd(u2, 0.8921045614537037037, 1e-12, "iauTtut1", "u2", status);
-   viv(j, 0, "iauTtut1", "j", status);
-
-}
-
-static void t_ut1tai(int *status)
-/*
-**  - - - - - - - - -
-**   t _ u t 1 t a i
-**  - - - - - - - - -
-**
-**  Test iauUt1tai function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauUt1tai, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double a1, a2;
-   int j;
-
-
-   j = iauUt1tai(2453750.5, 0.892104561, -32.6659, &a1, &a2);
-
-   vvd(a1, 2453750.5, 1e-6, "iauUt1tai", "a1", status);
-   vvd(a2, 0.8924826385462962963, 1e-12, "iauUt1tai", "a2", status);
-   viv(j, 0, "iauUt1tai", "j", status);
-
-}
-
-static void t_ut1tt(int *status)
-/*
-**  - - - - - - - - - - -
-**   t _ u t 1 t t
-**  - - - - - - - - - - -
-**
-**  Test iauUt1tt function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauUt1tt, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double t1, t2;
-   int j;
-
-
-   j = iauUt1tt(2453750.5, 0.892104561, 64.8499, &t1, &t2);
-
-   vvd(t1, 2453750.5, 1e-6, "iauUt1tt", "t1", status);
-   vvd(t2, 0.8928551385462962963, 1e-12, "iauUt1tt", "t2", status);
-   viv(j, 0, "iauUt1tt", "j", status);
-
-}
-
-static void t_ut1utc(int *status)
-/*
-**  - - - - - - - - -
-**   t _ u t 1 u t c
-**  - - - - - - - - -
-**
-**  Test iauUt1utc function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauUt1utc, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double u1, u2;
-   int j;
-
-
-   j = iauUt1utc(2453750.5, 0.892104561, 0.3341, &u1, &u2);
-
-   vvd(u1, 2453750.5, 1e-6, "iauUt1utc", "u1", status);
-   vvd(u2, 0.8921006941018518519, 1e-12, "iauUt1utc", "u2", status);
-   viv(j, 0, "iauUt1utc", "j", status);
-
-}
-
-static void t_utctai(int *status)
-/*
-**  - - - - - - - - -
-**   t _ u t c t a i
-**  - - - - - - - - -
-**
-**  Test iauUtctai function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauUtctai, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double u1, u2;
-   int j;
-
-
-   j = iauUtctai(2453750.5, 0.892100694, &u1, &u2);
-
-   vvd(u1, 2453750.5, 1e-6, "iauUtctai", "u1", status);
-   vvd(u2, 0.8924826384444444444, 1e-12, "iauUtctai", "u2", status);
-   viv(j, 0, "iauUtctai", "j", status);
-
-}
-
-static void t_utcut1(int *status)
-/*
-**  - - - - - - - - -
-**   t _ u t c u t 1
-**  - - - - - - - - -
-**
-**  Test iauUtcut1 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauUtcut1, vvd, viv
-**
-**  This revision:  2010 September 7
-*/
-{
-   double u1, u2;
-   int j;
-
-
-   j = iauUtcut1(2453750.5, 0.892100694, 0.3341, &u1, &u2);
-
-   vvd(u1, 2453750.5, 1e-6, "iauUtcut1", "u1", status);
-   vvd(u2, 0.8921045608981481481, 1e-12, "iauUtcut1", "u2", status);
-   viv(j, 0, "iauUtcut1", "j", status);
-
-}
-
-static void t_xy06(int *status)
-/*
-**  - - - - - - -
-**   t _ x y 0 6
-**  - - - - - - -
-**
-**  Test iauXy06 function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauXy06, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double x, y;
-
-
-   iauXy06(2400000.5, 53736.0, &x, &y);
-
-   vvd(x, 0.5791308486706010975e-3, 1e-15, "iauXy06", "x", status);
-   vvd(y, 0.4020579816732958141e-4, 1e-16, "iauXy06", "y", status);
-
-}
-
-static void t_xys00a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ x y s 0 0 a
-**  - - - - - - - - -
-**
-**  Test iauXys00a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauXys00a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double x, y, s;
-
-
-   iauXys00a(2400000.5, 53736.0, &x, &y, &s);
-
-   vvd(x,  0.5791308472168152904e-3, 1e-14, "iauXys00a", "x", status);
-   vvd(y,  0.4020595661591500259e-4, 1e-15, "iauXys00a", "y", status);
-   vvd(s, -0.1220040848471549623e-7, 1e-18, "iauXys00a", "s", status);
-
-}
-
-static void t_xys00b(int *status)
-/*
-**  - - - - - - - - -
-**   t _ x y s 0 0 b
-**  - - - - - - - - -
-**
-**  Test iauXys00b function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauXys00b, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double x, y, s;
-
-
-   iauXys00b(2400000.5, 53736.0, &x, &y, &s);
-
-   vvd(x,  0.5791301929950208873e-3, 1e-14, "iauXys00b", "x", status);
-   vvd(y,  0.4020553681373720832e-4, 1e-15, "iauXys00b", "y", status);
-   vvd(s, -0.1220027377285083189e-7, 1e-18, "iauXys00b", "s", status);
-
-}
-
-static void t_xys06a(int *status)
-/*
-**  - - - - - - - - -
-**   t _ x y s 0 6 a
-**  - - - - - - - - -
-**
-**  Test iauXys06a function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauXys06a, vvd
-**
-**  This revision:  2008 November 28
-*/
-{
-   double x, y, s;
-
-
-   iauXys06a(2400000.5, 53736.0, &x, &y, &s);
-
-   vvd(x,  0.5791308482835292617e-3, 1e-14, "iauXys06a", "x", status);
-   vvd(y,  0.4020580099454020310e-4, 1e-15, "iauXys06a", "y", status);
-   vvd(s, -0.1220032294164579896e-7, 1e-18, "iauXys06a", "s", status);
-
-}
-
-static void t_zp(int *status)
-/*
-**  - - - - -
-**   t _ z p
-**  - - - - -
-**
-**  Test iauZp function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauZp, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double p[3];
-
-
-   p[0] =  0.3;
-   p[1] =  1.2;
-   p[2] = -2.5;
-
-   iauZp(p);
-
-   vvd(p[0], 0.0, 0.0, "iauZp", "1", status);
-   vvd(p[1], 0.0, 0.0, "iauZp", "2", status);
-   vvd(p[2], 0.0, 0.0, "iauZp", "3", status);
-
-}
-
-static void t_zpv(int *status)
-/*
-**  - - - - - -
-**   t _ z p v
-**  - - - - - -
-**
-**  Test iauZpv function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauZpv, vvd
-**
-**  This revision:  2008 May 25
-*/
-{
-   double pv[2][3];
-
-
-   pv[0][0] =  0.3;
-   pv[0][1] =  1.2;
-   pv[0][2] = -2.5;
-
-   pv[1][0] = -0.5;
-   pv[1][1] =  3.1;
-   pv[1][2] =  0.9;
-
-   iauZpv(pv);
-
-   vvd(pv[0][0], 0.0, 0.0, "iauZpv", "p1", status);
-   vvd(pv[0][1], 0.0, 0.0, "iauZpv", "p2", status);
-   vvd(pv[0][2], 0.0, 0.0, "iauZpv", "p3", status);
-
-   vvd(pv[1][0], 0.0, 0.0, "iauZpv", "v1", status);
-   vvd(pv[1][1], 0.0, 0.0, "iauZpv", "v2", status);
-   vvd(pv[1][2], 0.0, 0.0, "iauZpv", "v3", status);
-
-}
-
-static void t_zr(int *status)
-/*
-**  - - - - -
-**   t _ z r
-**  - - - - -
-**
-**  Test iauZr function.
-**
-**  Returned:
-**     status    int         TRUE = success, FALSE = fail
-**
-**  Called:  iauZr, vvd
-**
-**  This revision:  2008 November 30
-*/
-{
-   double r[3][3];
-
-
-   r[0][0] = 2.0;
-   r[1][0] = 3.0;
-   r[2][0] = 2.0;
-
-   r[0][1] = 3.0;
-   r[1][1] = 2.0;
-   r[2][1] = 3.0;
-
-   r[0][2] = 3.0;
-   r[1][2] = 4.0;
-   r[2][2] = 5.0;
-
-   iauZr(r);
-
-   vvd(r[0][0], 0.0, 0.0, "iauZr", "00", status);
-   vvd(r[1][0], 0.0, 0.0, "iauZr", "01", status);
-   vvd(r[2][0], 0.0, 0.0, "iauZr", "02", status);
-
-   vvd(r[0][1], 0.0, 0.0, "iauZr", "10", status);
-   vvd(r[1][1], 0.0, 0.0, "iauZr", "11", status);
-   vvd(r[2][1], 0.0, 0.0, "iauZr", "12", status);
-
-   vvd(r[0][2], 0.0, 0.0, "iauZr", "20", status);
-   vvd(r[1][2], 0.0, 0.0, "iauZr", "21", status);
-   vvd(r[2][2], 0.0, 0.0, "iauZr", "22", status);
-
-}
-
-int main(int argc, char *argv[])
-/*
-**  - - - - -
-**   m a i n
-**  - - - - -
-**
-**  This revision:  2010 September 7
-*/
-{
-   int status;
-
-
-/* If any command-line argument, switch to verbose reporting. */
-   if (argc > 1) {
-      verbose = 1;
-      argv[0][0] += 0;    /* to avoid compiler warnings */
-   }
-
-/* Preset the &status to FALSE = success. */
-   status = 0;
-
-/* Test all of the SOFA functions. */
-   t_a2af(&status);
-   t_a2tf(&status);
-   t_af2a(&status);
-   t_anp(&status);
-   t_anpm(&status);
-   t_bi00(&status);
-   t_bp00(&status);
-   t_bp06(&status);
-   t_bpn2xy(&status);
-   t_c2i00a(&status);
-   t_c2i00b(&status);
-   t_c2i06a(&status);
-   t_c2ibpn(&status);
-   t_c2ixy(&status);
-   t_c2ixys(&status);
-   t_c2s(&status);
-   t_c2t00a(&status);
-   t_c2t00b(&status);
-   t_c2t06a(&status);
-   t_c2tcio(&status);
-   t_c2teqx(&status);
-   t_c2tpe(&status);
-   t_c2txy(&status);
-   t_cal2jd(&status);
-   t_cp(&status);
-   t_cpv(&status);
-   t_cr(&status);
-   t_d2dtf(&status);
-   t_d2tf(&status);
-   t_dat(&status);
-   t_dtdb(&status);
-   t_dtf2d(&status);
-   t_ee00(&status);
-   t_ee00a(&status);
-   t_ee00b(&status);
-   t_ee06a(&status);
-   t_eect00(&status);
-   t_eform(&status);
-   t_eo06a(&status);
-   t_eors(&status);
-   t_epb(&status);
-   t_epb2jd(&status);
-   t_epj(&status);
-   t_epj2jd(&status);
-   t_epv00(&status);
-   t_eqeq94(&status);
-   t_era00(&status);
-   t_fad03(&status);
-   t_fae03(&status);
-   t_faf03(&status);
-   t_faju03(&status);
-   t_fal03(&status);
-   t_falp03(&status);
-   t_fama03(&status);
-   t_fame03(&status);
-   t_fane03(&status);
-   t_faom03(&status);
-   t_fapa03(&status);
-   t_fasa03(&status);
-   t_faur03(&status);
-   t_fave03(&status);
-   t_fk52h(&status);
-   t_fk5hip(&status);
-   t_fk5hz(&status);
-   t_fw2m(&status);
-   t_fw2xy(&status);
-   t_gc2gd(&status);
-   t_gc2gde(&status);
-   t_gd2gc(&status);
-   t_gd2gce(&status);
-   t_gmst00(&status);
-   t_gmst06(&status);
-   t_gmst82(&status);
-   t_gst00a(&status);
-   t_gst00b(&status);
-   t_gst06(&status);
-   t_gst06a(&status);
-   t_gst94(&status);
-   t_h2fk5(&status);
-   t_hfk5z(&status);
-   t_ir(&status);
-   t_jd2cal(&status);
-   t_jdcalf(&status);
-   t_num00a(&status);
-   t_num00b(&status);
-   t_num06a(&status);
-   t_numat(&status);
-   t_nut00a(&status);
-   t_nut00b(&status);
-   t_nut06a(&status);
-   t_nut80(&status);
-   t_nutm80(&status);
-   t_obl06(&status);
-   t_obl80(&status);
-   t_p06e(&status);
-   t_p2pv(&status);
-   t_p2s(&status);
-   t_pap(&status);
-   t_pas(&status);
-   t_pb06(&status);
-   t_pdp(&status);
-   t_pfw06(&status);
-   t_plan94(&status);
-   t_pmat00(&status);
-   t_pmat06(&status);
-   t_pmat76(&status);
-   t_pm(&status);
-   t_pmp(&status);
-   t_pn(&status);
-   t_pn00(&status);
-   t_pn00a(&status);
-   t_pn00b(&status);
-   t_pn06a(&status);
-   t_pn06(&status);
-   t_pnm00a(&status);
-   t_pnm00b(&status);
-   t_pnm06a(&status);
-   t_pnm80(&status);
-   t_pom00(&status);
-   t_ppp(&status);
-   t_ppsp(&status);
-   t_pr00(&status);
-   t_prec76(&status);
-   t_pv2p(&status);
-   t_pv2s(&status);
-   t_pvdpv(&status);
-   t_pvm(&status);
-   t_pvmpv(&status);
-   t_pvppv(&status);
-   t_pvstar(&status);
-   t_pvu(&status);
-   t_pvup(&status);
-   t_pvxpv(&status);
-   t_pxp(&status);
-   t_rm2v(&status);
-   t_rv2m(&status);
-   t_rx(&status);
-   t_rxp(&status);
-   t_rxpv(&status);
-   t_rxr(&status);
-   t_ry(&status);
-   t_rz(&status);
-   t_s00a(&status);
-   t_s00b(&status);
-   t_s00(&status);
-   t_s06a(&status);
-   t_s06(&status);
-   t_s2c(&status);
-   t_s2p(&status);
-   t_s2pv(&status);
-   t_s2xpv(&status);
-   t_sepp(&status);
-   t_seps(&status);
-   t_sp00(&status);
-   t_starpm(&status);
-   t_starpv(&status);
-   t_sxp(&status);
-   t_sxpv(&status);
-   t_taitt(&status);
-   t_taiut1(&status);
-   t_taiutc(&status);
-   t_tcbtdb(&status);
-   t_tcgtt(&status);
-   t_tdbtcb(&status);
-   t_tdbtt(&status);
-   t_tf2a(&status);
-   t_tf2d(&status);
-   t_tr(&status);
-   t_trxp(&status);
-   t_trxpv(&status);
-   t_tttai(&status);
-   t_tttcg(&status);
-   t_tttdb(&status);
-   t_ttut1(&status);
-   t_ut1tai(&status);
-   t_ut1tt(&status) ;
-   t_ut1utc(&status);
-   t_utctai(&status);
-   t_utcut1(&status);
-   t_xy06(&status);
-   t_xys00a(&status);
-   t_xys00b(&status);
-   t_xys06a(&status);
-   t_zp(&status);
-   t_zpv(&status);
-   t_zr(&status);
-
-/* Report, set up an appropriate exit status, and finish. */
-   if (status) {
-      printf("t_sofa_c validation failed!\n");
-   } else {
-      printf("t_sofa_c validation successful\n");
-   }
-   return status;
-}
-#include "sofam.h"
-
-int iauTaitt(double tai1, double tai2, double *tt1, double *tt2)
-/*
-**  - - - - - - - - -
-**   i a u T a i t t
-**  - - - - - - - - -
-**
-**  Time scale transformation:  International Atomic Time, TAI, to
-**  Terrestrial Time, TT.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     tai1,tai2  double    TAI as a 2-part Julian Date
-**
-**  Returned:
-**     tt1,tt2    double    TT as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Note:
-**
-**     tai1+tai2 is Julian Date, apportioned in any convenient way
-**     between the two arguments, for example where tai1 is the Julian
-**     Day Number and tai2 is the fraction of a day.  The returned
-**     tt1,tt2 follow suit.
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992)
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* TT minus TAI (days). */
-   static const double dtat = TTMTAI/DAYSEC;
-
-
-/* Result, safeguarding precision. */
-   if ( tai1 > tai2 ) {
-      *tt1 = tai1;
-      *tt2 = tai2 + dtat;
-   } else {
-      *tt1 = tai1 + dtat;
-      *tt2 = tai2;
-   }
-
-/* Status (always OK). */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauTaiut1(double tai1, double tai2, double dta,
-              double *ut11, double *ut12)
-/*
-**  - - - - - - - - - -
-**   i a u T a i u t 1
-**  - - - - - - - - - -
-**
-**  Time scale transformation:  International Atomic Time, TAI, to
-**  Universal Time, UT1.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     tai1,tai2  double    TAI as a 2-part Julian Date
-**     dta        double    UT1-TAI in seconds
-**
-**  Returned:
-**     ut11,ut12  double    UT1 as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Notes:
-**
-**  1) tai1+tai2 is Julian Date, apportioned in any convenient way
-**     between the two arguments, for example where tai1 is the Julian
-**     Day Number and tai2 is the fraction of a day.  The returned
-**     UT11,UT12 follow suit.
-**
-**  2) The argument dta, i.e. UT1-TAI, is an observed quantity, and is
-**     available from IERS tabulations.
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992)
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-**
-*/
-{
-   double dtad;
-
-
-/* Result, safeguarding precision. */
-   dtad = dta / DAYSEC;
-   if ( tai1 > tai2 ) {
-      *ut11 = tai1;
-      *ut12 = tai2 + dtad;
-   } else {
-      *ut11 = tai1 + dtad;
-      *ut12 = tai2;
-   }
-
-/* Status (always OK). */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauTaiutc(double tai1, double tai2, double *utc1, double *utc2)
-/*
-**  - - - - - - - - - -
-**   i a u T a i u t c
-**  - - - - - - - - - -
-**
-**  Time scale transformation:  International Atomic Time, TAI, to
-**  Coordinated Universal Time, UTC.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     tai1,tai2  double   TAI as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-3)
-**
-**  Returned (function value):
-**                int      status: +1 = dubious year (Note 4)
-**                                  0 = OK
-**                                 -1 = unacceptable date
-**
-**  Notes:
-**
-**  1) tai1+tai2 is Julian Date, apportioned in any convenient way
-**     between the two arguments, for example where tai1 is the Julian
-**     Day Number and tai2 is the fraction of a day.  The returned utc1
-**     and utc2 form an analogous pair, except that a special convention
-**     is used, to deal with the problem of leap seconds - see the next
-**     note.
-**
-**  2) JD cannot unambiguously represent UTC during a leap second unless
-**     special measures are taken.  The convention in the present
-**     function is that the JD day represents UTC days whether the
-**     length is 86399, 86400 or 86401 SI seconds.
-**
-**  3) The function iauD2dtf can be used to transform the UTC quasi-JD
-**     into calendar date and clock time, including UTC leap second
-**     handling.
-**
-**  4) The warning status "dubious year" flags UTCs that predate the
-**     introduction of the time scale and that are too far in the future
-**     to be trusted.  See iauDat for further details.
-**
-**  Called:
-**     iauJd2cal    JD to Gregorian calendar
-**     iauDat       delta(AT) = TAI-UTC
-**     iauCal2jd    Gregorian calendar to JD
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992)
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int big1;
-   int i, iy, im, id, js;
-   double a1, a2, d1, dats1, d2, fd, ddats, dats2, datd, as1, as2, da;
-
-
-/* Put the two parts of the TAI into big-first order. */
-   big1 = ( tai1 >= tai2 );
-   if ( big1 ) {
-      a1 = tai1;
-      a2 = tai2;
-   } else {
-      a1 = tai2;
-      a2 = tai1;
-   }
-
-/* See if the TAI can possibly be in a leap-second day. */
-   d1 = a1;
-   dats1 = 0.0;
-   for ( i = -1; i <= 3; i++ ) {
-      d2 = a2 + (double) i;
-      if ( iauJd2cal(d1, d2, &iy, &im, &id, &fd) ) return -1;
-      js = iauDat(iy, im, id, 0.0, &dats2);
-      if ( js < 0 ) return -1;
-      if ( i == -1 ) dats1 = dats2;
-      ddats = dats2 - dats1;
-      datd = dats1 / DAYSEC;
-      if ( fabs(ddats) >= 0.5 ) {
-
-      /* Yes.  Get TAI for the start of the UTC day that */
-      /* ends in a leap. */
-         if ( iauCal2jd(iy, im, id, &d1, &d2) ) return -1;
-         as1 = d1;
-         as2 = d2 - 1.0 + datd;
-
-      /* Is the TAI after this point? */
-         da = a1 - as1;
-         da = da + ( a2 - as2 );
-         if ( da > 0 ) {
-
-         /* Yes:  fraction of the current UTC day that has elapsed. */
-            fd = da * DAYSEC / ( DAYSEC + ddats );
-
-         /* Ramp TAI-UTC to bring about SOFA's JD(UTC) convention. */
-            datd += ddats * ( fd <= 1.0 ? fd : 1.0 ) / DAYSEC;
-         }
-
-      /* Done. */
-         break;
-      }
-      dats1 = dats2;
-   }
-
-/* Subtract the (possibly adjusted) TAI-UTC from TAI to give UTC. */
-   a2 -= datd;
-
-/* Return the UTC result, preserving the TAI order. */
-   if ( big1 ) {
-      *utc1 = a1;
-      *utc2 = a2;
-   } else {
-      *utc1 = a2;
-      *utc2 = a1;
-   }
-
-/* Status. */
-   return js;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2)
-/*
-**  - - - - - - - - - -
-**   i a u T c b t d b
-**  - - - - - - - - - -
-**
-**  Time scale transformation:  Barycentric Coordinate Time, TCB, to
-**  Barycentric Dynamical Time, TDB.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     tcb1,tcb2  double    TCB as a 2-part Julian Date
-**
-**  Returned:
-**     tdb1,tdb2  double    TDB as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Notes:
-**
-**  1) tcb1+tcb2 is Julian Date, apportioned in any convenient way
-**     between the two arguments, for example where tcb1 is the Julian
-**     Day Number and tcb2 is the fraction of a day.  The returned
-**     tdb1,tdb2 follow suit.
-**
-**  2) The 2006 IAU General Assembly introduced a conventional linear
-**     transformation between TDB and TCB.  This transformation
-**     compensates for the drift between TCB and terrestrial time TT,
-**     and keeps TDB approximately centered on TT.  Because the
-**     relationship between TT and TCB depends on the adopted solar
-**     system ephemeris, the degree of alignment between TDB and TT over
-**     long intervals will vary according to which ephemeris is used.
-**     Former definitions of TDB attempted to avoid this problem by
-**     stipulating that TDB and TT should differ only by periodic
-**     effects.  This is a good description of the nature of the
-**     relationship but eluded precise mathematical formulation.  The
-**     conventional linear relationship adopted in 2006 sidestepped
-**     these difficulties whilst delivering a TDB that in practice was
-**     consistent with values before that date.
-**
-**  3) TDB is essentially the same as Teph, the time argument for the
-**     JPL solar system ephemerides.
-**
-**  Reference:
-**
-**     IAU 2006 Resolution B3
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* 1977 Jan 1 00:00:32.184 TT, as two-part JD */
-   static const double t77td = DJM0 + DJM77;
-   static const double t77tf = TTMTAI/DAYSEC;
-
-/* TDB (days) at TAI 1977 Jan 1.0 */
-   static const double tdb0 = TDB0/DAYSEC;
-
-   double d;
-
-
-/* Result, safeguarding precision. */
-   if ( tcb1 > tcb2 ) {
-      d = tcb1 - t77td;
-      *tdb1 = tcb1;
-      *tdb2 = tcb2 + tdb0 - ( d + ( tcb2 - t77tf ) ) * ELB;
-   } else {
-      d = tcb2 - t77td;
-      *tdb1 = tcb1 + tdb0 - ( d + ( tcb1 - t77tf ) ) * ELB;
-      *tdb2 = tcb2;
-   }
-
-/* Status (always OK). */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauTcgtt(double tcg1, double tcg2, double *tt1, double *tt2)
-/*
-**  - - - - - - - - -
-**   i a u T c g t t
-**  - - - - - - - - -
-**
-**  Time scale transformation:  Geocentric Coordinate Time, TCG, to
-**  Terrestrial Time, TT.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     tcg1,tcg2  double    TCG as a 2-part Julian Date
-**
-**  Returned:
-**     tt1,tt2    double    TT as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Note:
-**
-**     tcg1+tcg2 is Julian Date, apportioned in any convenient way
-**     between the two arguments, for example where tcg1 is the Julian
-**     Day Number and tcg22 is the fraction of a day.  The returned
-**     tt1,tt2 follow suit.
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),.
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     IAU 2000 Resolution B1.9
-**
-**  This revision:  2010 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* 1977 Jan 1 00:00:32.184 TT, as MJD */
-   static const double t77t = DJM77 + TTMTAI/DAYSEC;
-
-
-/* Result, safeguarding precision. */
-   if ( tcg1 > tcg2 ) {
-      *tt1 = tcg1;
-      *tt2 = tcg2 - ( ( tcg1 - DJM0 ) + ( tcg2 - t77t ) ) * ELG;
-   } else {
-      *tt1 = tcg1 - ( ( tcg2 - DJM0 ) + ( tcg1 - t77t ) ) * ELG;
-      *tt2 = tcg2;
-   }
-
-/* OK status. */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2)
-/*
-**  - - - - - - - - - -
-**   i a u T d b t c b
-**  - - - - - - - - - -
-**
-**  Time scale transformation:  Barycentric Dynamical Time, TDB, to
-**  Barycentric Coordinate Time, TCB.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     tdb1,tdb2  double    TDB as a 2-part Julian Date
-**
-**  Returned:
-**     tcb1,tcb2  double    TCB as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Notes:
-**
-**  1) tdb1+tdb2 is Julian Date, apportioned in any convenient way
-**     between the two arguments, for example where tdb1 is the Julian
-**     Day Number and tdb2 is the fraction of a day.  The returned
-**     tcb1,tcb2 follow suit.
-**
-**  2) The 2006 IAU General Assembly introduced a conventional linear
-**     transformation between TDB and TCB.  This transformation
-**     compensates for the drift between TCB and terrestrial time TT,
-**     and keeps TDB approximately centered on TT.  Because the
-**     relationship between TT and TCB depends on the adopted solar
-**     system ephemeris, the degree of alignment between TDB and TT over
-**     long intervals will vary according to which ephemeris is used.
-**     Former definitions of TDB attempted to avoid this problem by
-**     stipulating that TDB and TT should differ only by periodic
-**     effects.  This is a good description of the nature of the
-**     relationship but eluded precise mathematical formulation.  The
-**     conventional linear relationship adopted in 2006 sidestepped
-**     these difficulties whilst delivering a TDB that in practice was
-**     consistent with values before that date.
-**
-**  3) TDB is essentially the same as Teph, the time argument for the
-**     JPL solar system ephemerides.
-**
-**  Reference:
-**
-**     IAU 2006 Resolution B3
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* 1977 Jan 1 00:00:32.184 TT, as two-part JD */
-   static const double t77td = DJM0 + DJM77;
-   static const double t77tf = TTMTAI/DAYSEC;
-
-/* TDB (days) at TAI 1977 Jan 1.0 */
-   static const double tdb0 = TDB0/DAYSEC;
-
-/* TDB to TCB rate */
-   static const double elbb = ELB/(1.0-ELB);
-
-   double d, f;
-
-
-/* Result, preserving date format but safeguarding precision. */
-   if ( tdb1 > tdb2 ) {
-      d = t77td - tdb1;
-      f  = tdb2 - tdb0;
-      *tcb1 = tdb1;
-      *tcb2 = f - ( d - ( f - t77tf ) ) * elbb;
-   } else {
-      d = t77td - tdb2;
-      f  = tdb1 - tdb0;
-      *tcb1 = f + ( d - ( f - t77tf ) ) * elbb;
-      *tcb2 = tdb2;
-   }
-
-/* Status (always OK). */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauTdbtt(double tdb1, double tdb2, double dtr,
-             double *tt1, double *tt2 )
-/*
-**  - - - - - - - - -
-**   i a u T d b t t
-**  - - - - - - - - -
-**
-**  Time scale transformation:  Barycentric Dynamical Time, TDB, to
-**  Terrestrial Time, TT.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     tdb1,tdb2  double    TDB as a 2-part Julian Date
-**     dtr        double    TDB-TT in seconds
-**
-**  Returned:
-**     tt1,tt2    double    TT as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Notes:
-**
-**  1) tdb1+tdb2 is Julian Date, apportioned in any convenient way
-**     between the two arguments, for example where tdb1 is the Julian
-**     Day Number and tdb2 is the fraction of a day.  The returned
-**     tt1,tt2 follow suit.
-**
-**  2) The argument dtr represents the quasi-periodic component of the
-**     GR transformation between TT and TCB.  It is dependent upon the
-**     adopted solar-system ephemeris, and can be obtained by numerical
-**     integration, by interrogating a precomputed time ephemeris or by
-**     evaluating a model such as that implemented in the SOFA function
-**     iauDtdb.   The quantity is dominated by an annual term of 1.7 ms
-**     amplitude.
-**
-**  3) TDB is essentially the same as Teph, the time argument for the
-**     JPL solar system ephemerides.
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     IAU 2006 Resolution 3
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-**
-*/
-{
-   double dtrd;
-
-
-/* Result, safeguarding precision. */
-   dtrd = dtr / DAYSEC;
-   if ( tdb1 > tdb2 ) {
-      *tt1 = tdb1;
-      *tt2 = tdb2 - dtrd;
-   } else {
-      *tt1 = tdb1 - dtrd;
-      *tt2 = tdb2;
-   }
-
-/* Status (always OK). */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-#include <stdlib.h>
-
-int iauTf2a(char s, int ihour, int imin, double sec, double *rad)
-/*
-**  - - - - - - - -
-**   i a u T f 2 a
-**  - - - - - - - -
-**
-**  Convert hours, minutes, seconds to radians.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     s         char    sign:  '-' = negative, otherwise positive
-**     ihour     int     hours
-**     imin      int     minutes
-**     sec       double  seconds
-**
-**  Returned:
-**     rad       double  angle in radians
-**
-**  Returned (function value):
-**               int     status:  0 = OK
-**                                1 = ihour outside range 0-23
-**                                2 = imin outside range 0-59
-**                                3 = sec outside range 0-59.999...
-**
-**  Notes:
-**
-**  1)  The result is computed even if any of the range checks fail.
-**
-**  2)  Negative ihour, imin and/or sec produce a warning status, but
-**      the absolute value is used in the conversion.
-**
-**  3)  If there are multiple errors, the status value reflects only the
-**      first, the smallest taking precedence.
-**
-**  This revision:  2012 February 13
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* Compute the interval. */
-   *rad  = ( s == '-' ? -1.0 : 1.0 ) *
-           ( 60.0 * ( 60.0 * ( (double) abs(ihour) ) +
-                             ( (double) abs(imin) ) ) +
-                                        fabs(sec) ) * DS2R;
-
-/* Validate arguments and return status. */
-   if ( ihour < 0 || ihour > 23 ) return 1;
-   if ( imin < 0 || imin > 59 ) return 2;
-   if ( sec < 0.0 || sec >= 60.0 ) return 3;
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-#include <stdlib.h>
-
-int iauTf2d(char s, int ihour, int imin, double sec, double *days)
-/*
-**  - - - - - - - -
-**   i a u T f 2 d
-**  - - - - - - - -
-**
-**  Convert hours, minutes, seconds to days.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     s         char    sign:  '-' = negative, otherwise positive
-**     ihour     int     hours
-**     imin      int     minutes
-**     sec       double  seconds
-**
-**  Returned:
-**     days      double  interval in days
-**
-**  Returned (function value):
-**               int     status:  0 = OK
-**                                1 = ihour outside range 0-23
-**                                2 = imin outside range 0-59
-**                                3 = sec outside range 0-59.999...
-**
-**  Notes:
-**
-**  1)  The result is computed even if any of the range checks fail.
-**
-**  2)  Negative ihour, imin and/or sec produce a warning status, but
-**      the absolute value is used in the conversion.
-**
-**  3)  If there are multiple errors, the status value reflects only the
-**      first, the smallest taking precedence.
-**
-**  This revision:  2012 February 13
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* Compute the interval. */
-   *days  = ( s == '-' ? -1.0 : 1.0 ) *
-            ( 60.0 * ( 60.0 * ( (double) abs(ihour) ) +
-                              ( (double) abs(imin) ) ) +
-                                         fabs(sec) ) / DAYSEC;
-
-/* Validate arguments and return status. */
-   if ( ihour < 0 || ihour > 23 ) return 1;
-   if ( imin < 0 || imin > 59 ) return 2;
-   if ( sec < 0.0 || sec >= 60.0 ) return 3;
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauTr(double r[3][3], double rt[3][3])
-/*
-**  - - - - - -
-**   i a u T r
-**  - - - - - -
-**
-**  Transpose an r-matrix.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     r        double[3][3]    r-matrix
-**
-**  Returned:
-**     rt       double[3][3]    transpose
-**
-**  Note:
-**     It is permissible for r and rt to be the same array.
-**
-**  Called:
-**     iauCr        copy r-matrix
-**
-**  This revision:  2008 May 22
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double wm[3][3];
-   int i, j;
-
-
-   for (i = 0; i < 3; i++) {
-      for (j = 0; j < 3; j++) {
-         wm[i][j] = r[j][i];
-      }
-   }
-   iauCr(wm, rt);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauTrxp(double r[3][3], double p[3], double trp[3])
-/*
-**  - - - - - - - -
-**   i a u T r x p
-**  - - - - - - - -
-**
-**  Multiply a p-vector by the transpose of an r-matrix.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     r        double[3][3]   r-matrix
-**     p        double[3]      p-vector
-**
-**  Returned:
-**     trp      double[3]      r * p
-**
-**  Note:
-**     It is permissible for p and trp to be the same array.
-**
-**  Called:
-**     iauTr        transpose r-matrix
-**     iauRxp       product of r-matrix and p-vector
-**
-**  This revision:  2008 October 28
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double tr[3][3];
-
-
-/* Transpose of matrix r. */
-   iauTr(r, tr);
-
-/* Matrix tr * vector p -> vector trp. */
-   iauRxp(tr, p, trp);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauTrxpv(double r[3][3], double pv[2][3], double trpv[2][3])
-/*
-**  - - - - - - - - -
-**   i a u T r x p v
-**  - - - - - - - - -
-**
-**  Multiply a pv-vector by the transpose of an r-matrix.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Given:
-**     r        double[3][3]    r-matrix
-**     pv       double[2][3]    pv-vector
-**
-**  Returned:
-**     trpv     double[2][3]    r * pv
-**
-**  Note:
-**     It is permissible for pv and trpv to be the same array.
-**
-**  Called:
-**     iauTr        transpose r-matrix
-**     iauRxpv      product of r-matrix and pv-vector
-**
-**  This revision:  2008 October 28
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double tr[3][3];
-
-
-/* Transpose of matrix r. */
-   iauTr(r, tr);
-
-/* Matrix tr * vector pv -> vector trpv. */
-   iauRxpv(tr, pv, trpv);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauTttai(double tt1, double tt2, double *tai1, double *tai2)
-/*
-**  - - - - - - - - -
-**   i a u T t t a i
-**  - - - - - - - - -
-**
-**  Time scale transformation:  Terrestrial Time, TT, to International
-**  Atomic Time, TAI.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     tt1,tt2    double    TT as a 2-part Julian Date
-**
-**  Returned:
-**     tai1,tai2  double    TAI as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Note:
-**
-**     tt1+tt2 is Julian Date, apportioned in any convenient way between
-**     the two arguments, for example where tt1 is the Julian Day Number
-**     and tt2 is the fraction of a day.  The returned tai1,tai2 follow
-**     suit.
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992)
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* TT minus TAI (days). */
-   static const double dtat = TTMTAI/DAYSEC;
-
-
-/* Result, safeguarding precision. */
-   if ( tt1 > tt2 ) {
-      *tai1 = tt1;
-      *tai2 = tt2 - dtat;
-   } else {
-      *tai1 = tt1 - dtat;
-      *tai2 = tt2;
-   }
-
-/* Status (always OK). */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauTttcg(double tt1, double tt2, double *tcg1, double *tcg2)
-/*
-**  - - - - - - - - -
-**   i a u T t t c g
-**  - - - - - - - - -
-**
-**  Time scale transformation:  Terrestrial Time, TT, to Geocentric
-**  Coordinate Time, TCG.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     tt1,tt2    double    TT as a 2-part Julian Date
-**
-**  Returned:
-**     tcg1,tcg2  double    TCG as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Note:
-**
-**     tt1+tt2 is Julian Date, apportioned in any convenient way between
-**     the two arguments, for example where tt1 is the Julian Day Number
-**     and tt2 is the fraction of a day.  The returned tcg1,tcg2 follow
-**     suit.
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     IAU 2000 Resolution B1.9
-**
-**  This revision:  2010 May 13
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* 1977 Jan 1 00:00:32.184 TT, as MJD */
-   static const double t77t = DJM77 + TTMTAI/DAYSEC;
-
-/* TT to TCG rate */
-   static const double elgg = ELG/(1.0-ELG);
-
-
-/* Result, safeguarding precision. */
-   if ( tt1 > tt2 ) {
-      *tcg1 = tt1;
-      *tcg2 = tt2 + ( ( tt1 - DJM0 ) + ( tt2 - t77t ) ) * elgg;
-   } else {
-      *tcg1 = tt1 + ( ( tt2 - DJM0 ) + ( tt1 - t77t ) ) * elgg;
-      *tcg2 = tt2;
-   }
-
-/* Status (always OK). */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauTttdb(double tt1, double tt2, double dtr,
-             double *tdb1, double *tdb2)
-/*
-**  - - - - - - - - -
-**   i a u T t t d b
-**  - - - - - - - - -
-**
-**  Time scale transformation:  Terrestrial Time, TT, to Barycentric
-**  Dynamical Time, TDB.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     tt1,tt2    double    TT as a 2-part Julian Date
-**     dtr        double    TDB-TT in seconds
-**
-**  Returned:
-**     tdb1,tdb2  double    TDB as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Notes:
-**
-**  1) tt1+tt2 is Julian Date, apportioned in any convenient way between
-**     the two arguments, for example where tt1 is the Julian Day Number
-**     and tt2 is the fraction of a day.  The returned tdb1,tdb2 follow
-**     suit.
-**
-**  2) The argument dtr represents the quasi-periodic component of the
-**     GR transformation between TT and TCB.  It is dependent upon the
-**     adopted solar-system ephemeris, and can be obtained by numerical
-**     integration, by interrogating a precomputed time ephemeris or by
-**     evaluating a model such as that implemented in the SOFA function
-**     iauDtdb.   The quantity is dominated by an annual term of 1.7 ms
-**     amplitude.
-**
-**  3) TDB is essentially the same as Teph, the time argument for the JPL
-**     solar system ephemerides.
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     IAU 2006 Resolution 3
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dtrd;
-
-
-/* Result, safeguarding precision. */
-   dtrd = dtr / DAYSEC;
-   if ( tt1 > tt2 ) {
-      *tdb1 = tt1;
-      *tdb2 = tt2 + dtrd;
-   } else {
-      *tdb1 = tt1 + dtrd;
-      *tdb2 = tt2;
-   }
-
-/* Status (always OK). */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauTtut1(double tt1, double tt2, double dt,
-             double *ut11, double *ut12)
-/*
-**  - - - - - - - - -
-**   i a u T t u t 1
-**  - - - - - - - - -
-**
-**  Time scale transformation:  Terrestrial Time, TT, to Universal Time,
-**  UT1.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     tt1,tt2    double    TT as a 2-part Julian Date
-**     dt         double    TT-UT1 in seconds
-**
-**  Returned:
-**     ut11,ut12  double    UT1 as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Notes:
-**
-**  1) tt1+tt2 is Julian Date, apportioned in any convenient way between
-**     the two arguments, for example where tt1 is the Julian Day Number
-**     and tt2 is the fraction of a day.  The returned ut11,ut12 follow
-**     suit.
-**
-**  2) The argument dt is classical Delta T.
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992)
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dtd;
-
-
-/* Result, safeguarding precision. */
-   dtd = dt / DAYSEC;
-   if ( tt1 > tt2 ) {
-      *ut11 = tt1;
-      *ut12 = tt2 - dtd;
-   } else {
-      *ut11 = tt1 - dtd;
-      *ut12 = tt2;
-   }
-
-/* Status (always OK). */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauUt1tai(double ut11, double ut12, double dta,
-              double *tai1, double *tai2)
-/*
-**  - - - - - - - - - -
-**   i a u U t 1 t a i
-**  - - - - - - - - - -
-**
-**  Time scale transformation:  Universal Time, UT1, to International
-**  Atomic Time, TAI.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     ut11,ut12  double    UT1 as a 2-part Julian Date
-**     dta        double    UT1-TAI in seconds
-**
-**  Returned:
-**     tai1,tai2  double    TAI as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Notes:
-**
-**  1) ut11+ut12 is Julian Date, apportioned in any convenient way
-**     between the two arguments, for example where ut11 is the Julian
-**     Day Number and ut12 is the fraction of a day.  The returned
-**     tai1,tai2 follow suit.
-**
-**  2) The argument dta, i.e. UT1-TAI, is an observed quantity, and is
-**     available from IERS tabulations.
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992)
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dtad;
-
-
-/* Result, safeguarding precision. */
-   dtad = dta / DAYSEC;
-   if ( ut11 > ut12 ) {
-      *tai1 = ut11;
-      *tai2 = ut12 - dtad;
-   } else {
-      *tai1 = ut11 - dtad;
-      *tai2 = ut12;
-   }
-
-/* Status (always OK). */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauUt1tt(double ut11, double ut12, double dt,
-             double *tt1, double *tt2)
-/*
-**  - - - - - - - - -
-**   i a u U t 1 t t
-**  - - - - - - - - -
-**
-**  Time scale transformation:  Universal Time, UT1, to Terrestrial
-**  Time, TT.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     ut11,ut12  double    UT1 as a 2-part Julian Date
-**     dt         double    TT-UT1 in seconds
-**
-**  Returned:
-**     tt1,tt2    double    TT as a 2-part Julian Date
-**
-**  Returned (function value):
-**                int       status:  0 = OK
-**
-**  Notes:
-**
-**  1) ut11+ut12 is Julian Date, apportioned in any convenient way
-**     between the two arguments, for example where ut11 is the Julian
-**     Day Number and ut12 is the fraction of a day.  The returned
-**     tt1,tt2 follow suit.
-**
-**  2) The argument dt is classical Delta T.
-**
-**  Reference:
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992)
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double dtd;
-
-
-/* Result, safeguarding precision. */
-   dtd = dt / DAYSEC;
-   if ( ut11 > ut12 ) {
-      *tt1 = ut11;
-      *tt2 = ut12 + dtd;
-   } else {
-      *tt1 = ut11 + dtd;
-      *tt2 = ut12;
-   }
-
-/* Status (always OK). */
-   return 0;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauUt1utc(double ut11, double ut12, double dut1,
-              double *utc1, double *utc2)
-/*
-**  - - - - - - - - - -
-**   i a u U t 1 u t c
-**  - - - - - - - - - -
-**
-**  Time scale transformation:  Universal Time, UT1, to Coordinated
-**  Universal Time, UTC.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     ut11,ut12  double   UT1 as a 2-part Julian Date (Note 1)
-**     dut1       double   Delta UT1: UT1-UTC in seconds (Note 2)
-**
-**  Returned:
-**     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 3,4)
-**
-**  Returned (function value):
-**                int      status: +1 = dubious year (Note 5)
-**                                  0 = OK
-**                                 -1 = unacceptable date
-**
-**  Notes:
-**
-**  1) ut11+ut12 is Julian Date, apportioned in any convenient way
-**     between the two arguments, for example where ut11 is the Julian
-**     Day Number and ut12 is the fraction of a day.  The returned utc1
-**     and utc2 form an analogous pair, except that a special convention
-**     is used, to deal with the problem of leap seconds - see Note 3.
-**
-**  2) Delta UT1 can be obtained from tabulations provided by the
-**     International Earth Rotation and Reference Systems Service.  The
-**     value changes abruptly by 1s at a leap second;  however, close to
-**     a leap second the algorithm used here is tolerant of the "wrong"
-**     choice of value being made.
-**
-**  3) JD cannot unambiguously represent UTC during a leap second unless
-**     special measures are taken.  The convention in the present
-**     function is that the returned quasi JD day UTC1+UTC2 represents
-**     UTC days whether the length is 86399, 86400 or 86401 SI seconds.
-**
-**  4) The function iauD2dtf can be used to transform the UTC quasi-JD
-**     into calendar date and clock time, including UTC leap second
-**     handling.
-**
-**  5) The warning status "dubious year" flags UTCs that predate the
-**     introduction of the time scale and that are too far in the future
-**     to be trusted.  See iauDat for further details.
-**
-**  Called:
-**     iauJd2cal    JD to Gregorian calendar
-**     iauDat       delta(AT) = TAI-UTC
-**     iauCal2jd    Gregorian calendar to JD
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992)
-**
-**  This revision:  2011 May 14
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int big1;
-   int i, iy, im, id, js;
-   double duts, u1, u2, d1, dats1, d2, fd, dats2, ddats, us1, us2, du;
-
-
-/* UT1-UTC in seconds. */
-   duts = dut1;
-
-/* Put the two parts of the UT1 into big-first order. */
-   big1 = ( ut11 >= ut12 );
-   if ( big1 ) {
-      u1 = ut11;
-      u2 = ut12;
-   } else {
-      u1 = ut12;
-      u2 = ut11;
-   }
-
-/* See if the UT1 can possibly be in a leap-second day. */
-   d1 = u1;
-   dats1 = 0;
-   for ( i = -1; i <= 3; i++ ) {
-      d2 = u2 + (double) i;
-      if ( iauJd2cal(d1, d2, &iy, &im, &id, &fd) ) return -1;
-      js = iauDat(iy, im, id, 0.0, &dats2);
-      if ( js < 0 ) return -1;
-      if ( i == - 1 ) dats1 = dats2;
-      ddats = dats2 - dats1;
-      if ( fabs(ddats) >= 0.5 ) {
-
-      /* Yes, leap second nearby: ensure UT1-UTC is "before" value. */
-         if ( ddats * duts >= 0 ) duts -= ddats;
-
-      /* UT1 for the start of the UTC day that ends in a leap. */
-         if ( iauCal2jd(iy, im, id, &d1, &d2) ) return -1;
-         us1 = d1;
-         us2 = d2 - 1.0 + duts/DAYSEC;
-
-      /* Is the UT1 after this point? */
-         du = u1 - us1;
-         du += u2 - us2;
-         if ( du > 0 ) {
-
-         /* Yes:  fraction of the current UTC day that has elapsed. */
-            fd = du * DAYSEC / ( DAYSEC + ddats );
-
-         /* Ramp UT1-UTC to bring about SOFA's JD(UTC) convention. */
-            duts += ddats * ( fd <= 1.0 ? fd : 1.0 );
-         }
-
-      /* Done. */
-         break;
-      }
-      dats1 = dats2;
-   }
-
-/* Subtract the (possibly adjusted) UT1-UTC from UT1 to give UTC. */
-   u2 -= duts / DAYSEC;
-
-/* Result, safeguarding precision. */
-   if ( big1 ) {
-      *utc1 = u1;
-      *utc2 = u2;
-   } else {
-      *utc1 = u2;
-      *utc2 = u1;
-   }
-
-/* Status. */
-   return js;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauUtctai(double utc1, double utc2, double *tai1, double *tai2)
-/*
-**  - - - - - - - - - -
-**   i a u U t c t a i
-**  - - - - - - - - - -
-**
-**  Time scale transformation:  Coordinated Universal Time, UTC, to
-**  International Atomic Time, TAI.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)
-**
-**  Returned:
-**     tai1,tai2  double   TAI as a 2-part Julian Date (Note 5)
-**
-**  Returned (function value):
-**                int      status: +1 = dubious year (Note 3)
-**                                  0 = OK
-**                                 -1 = unacceptable date
-**
-**  Notes:
-**
-**  1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any
-**     convenient way between the two arguments, for example where utc1
-**     is the Julian Day Number and utc2 is the fraction of a day.
-**
-**  2) JD cannot unambiguously represent UTC during a leap second unless
-**     special measures are taken.  The convention in the present
-**     function is that the JD day represents UTC days whether the
-**     length is 86399, 86400 or 86401 SI seconds.
-**
-**  3) The warning status "dubious year" flags UTCs that predate the
-**     introduction of the time scale and that are too far in the future
-**     to be trusted.  See iauDat  for further details.
-**
-**  4) The function iauDtf2d converts from calendar date and time of day
-**     into 2-part Julian Date, and in the case of UTC implements the
-**     leap-second-ambiguity convention described above.
-**
-**  5) The returned TAI1,TAI2 are such that their sum is the TAI Julian
-**     Date.
-**
-**  Called:
-**     iauJd2cal    JD to Gregorian calendar
-**     iauDat       delta(AT) = TAI-UTC
-**     iauCal2jd    Gregorian calendar to JD
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992)
-**
-**  This revision:  2010 September 10
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-**
-*/
-{
-   int big1;
-   int iy, im, id, js, iyt, imt, idt;
-   double u1, u2, fd, dats, fdt, datst, ddat, z1, z2, a2;
-
-
-/* Put the two parts of the UTC into big-first order. */
-   big1 = ( utc1 >= utc2 );
-   if ( big1 ) {
-      u1 = utc1;
-      u2 = utc2;
-   } else {
-      u1 = utc2;
-      u2 = utc1;
-   }
-
-/* Get TAI-UTC now. */
-   if ( iauJd2cal(u1, u2, &iy, &im, &id, &fd) ) return -1;
-   js = iauDat(iy, im, id, fd, &dats);
-   if ( js < 0 ) return -1;
-
-/* Get TAI-UTC tomorrow. */
-   if ( iauJd2cal(u1+1.5, u2-fd, &iyt, &imt, &idt, &fdt) ) return -1;
-   js = iauDat(iyt, imt, idt, fdt, &datst);
-   if ( js < 0 ) return -1;
-
-/* If today ends in a leap second, scale the fraction into SI days. */
-   ddat = datst - dats;
-   if ( fabs(ddat) > 0.5 ) fd += fd * ddat / DAYSEC;
-
-/* Today's calendar date to 2-part JD. */
-   if ( iauCal2jd(iy, im, id, &z1, &z2) ) return -1;
-
-/* Assemble the TAI result, preserving the UTC split and order. */
-   a2 = z1 - u1;
-   a2 += z2;
-   a2 += fd + dats / DAYSEC;
-   if ( big1 ) {
-      *tai1 = u1;
-      *tai2 = a2;
-   } else {
-      *tai1 = a2;
-      *tai2 = u1;
-   }
-
-/* Status. */
-   return js;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-int iauUtcut1(double utc1, double utc2, double dut1,
-              double *ut11, double *ut12)
-/*
-**  - - - - - - - - - -
-**   i a u U t c u t 1
-**  - - - - - - - - - -
-**
-**  Time scale transformation:  Coordinated Universal Time, UTC, to
-**  Universal Time, UT1.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical.
-**
-**  Given:
-**     utc1,utc2  double   UTC as a 2-part quasi Julian Date (Notes 1-4)
-**     dut1       double   Delta UT1 = UT1-UTC in seconds (Note 5)
-**
-**  Returned:
-**     ut11,ut12  double   UT1 as a 2-part Julian Date (Note 6)
-**
-**  Returned (function value):
-**                int      status: +1 = dubious year (Note 7)
-**                                  0 = OK
-**                                 -1 = unacceptable date
-**
-**  Notes:
-**
-**  1) utc1+utc2 is quasi Julian Date (see Note 2), apportioned in any
-**     convenient way between the two arguments, for example where utc1
-**     is the Julian Day Number and utc2 is the fraction of a day.
-**
-**  2) JD cannot unambiguously represent UTC during a leap second unless
-**     special measures are taken.  The convention in the present
-**     function is that the JD day represents UTC days whether the
-**     length is 86399, 86400 or 86401 SI seconds.
-**
-**  3) The warning status "dubious year" flags UTCs that predate the
-**     introduction of the time scale and that are too far in the future
-**     to be trusted.  See iauDat  for further details.
-**
-**  4) The function iauDtf2d  converts from calendar date and time of
-**     day into 2-part Julian Date, and in the case of UTC implements
-**     the leap-second-ambiguity convention described above.
-**
-**  5) Delta UT1 can be obtained from tabulations provided by the
-**     International Earth Rotation and Reference Systems Service.  It
-**     It is the caller's responsibility to supply a DUT argument
-**     containing the UT1-UTC value that matches the given UTC.
-**
-**  6) The returned ut11,ut12 are such that their sum is the UT1 Julian
-**     Date.
-**
-**  7) The warning status "dubious year" flags UTCs that predate the
-**     introduction of the time scale and that are too far in the future
-**     to be trusted.  See iauDat for further details.
-**
-**  References:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**     Explanatory Supplement to the Astronomical Almanac,
-**     P. Kenneth Seidelmann (ed), University Science Books (1992)
-**
-**  Called:
-**     iauJd2cal    JD to Gregorian calendar
-**     iauDat       delta(AT) = TAI-UTC
-**     iauUtctai    UTC to TAI
-**     iauTaiut1    TAI to UT1
-**
-**  This revision:  2010 May 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int iy, im, id, js, jw;
-   double w, dat, dta, tai1, tai2;
-
-
-/* Look up TAI-UTC. */
-   if ( iauJd2cal(utc1, utc2, &iy, &im, &id, &w) ) return -1;
-   js = iauDat ( iy, im, id, 0.0, &dat);
-   if ( js < 0 ) return -1;
-
-/* Form UT1-TAI. */
-   dta = dut1 - dat;
-
-/* UTC to TAI to UT1. */
-   jw = iauUtctai(utc1, utc2, &tai1, &tai2);
-   if ( jw < 0 ) {
-      return -1;
-   } else if ( jw > 0 ) {
-      js = jw;
-   }
-   if ( iauTaiut1(tai1, tai2, dta, ut11, ut12) ) return -1;
-
-/* Status. */
-   return js;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauXy06(double date1, double date2, double *x, double *y)
-/*
-**  - - - - - - - -
-**   i a u X y 0 6
-**  - - - - - - - -
-**
-**  X,Y coordinates of celestial intermediate pole from series based
-**  on IAU 2006 precession and IAU 2000A nutation.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  canonical model.
-**
-**  Given:
-**     date1,date2  double     TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     x,y          double     CIP X,Y coordinates (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The X,Y coordinates are those of the unit vector towards the
-**     celestial intermediate pole.  They represent the combined effects
-**     of frame bias, precession and nutation.
-**
-**  3) The fundamental arguments used are as adopted in IERS Conventions
-**     (2003) and are from Simon et al. (1994) and Souchay et al.
-**     (1999).
-**
-**  4) This is an alternative to the angles-based method, via the SOFA
-**     function iauFw2xy and as used in iauXys06a for example.  The two
-**     methods agree at the 1 microarcsecond level (at present), a
-**     negligible amount compared with the intrinsic accuracy of the
-**     models.  However, it would be unwise to mix the two methods
-**     (angles-based and series-based) in a single application.
-**
-**  Called:
-**     iauFal03     mean anomaly of the Moon
-**     iauFalp03    mean anomaly of the Sun
-**     iauFaf03     mean argument of the latitude of the Moon
-**     iauFad03     mean elongation of the Moon from the Sun
-**     iauFaom03    mean longitude of the Moon's ascending node
-**     iauFame03    mean longitude of Mercury
-**     iauFave03    mean longitude of Venus
-**     iauFae03     mean longitude of Earth
-**     iauFama03    mean longitude of Mars
-**     iauFaju03    mean longitude of Jupiter
-**     iauFasa03    mean longitude of Saturn
-**     iauFaur03    mean longitude of Uranus
-**     iauFane03    mean longitude of Neptune
-**     iauFapa03    general accumulated precession in longitude
-**
-**  References:
-**
-**     Capitaine, N., Wallace, P.T. & Chapront, J., 2003,
-**     Astron.Astrophys., 412, 567
-**
-**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
-**
-**     McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG
-**
-**     Simon, J.L., Bretagnon, P., Chapront, J., Chapront-Touze, M.,
-**     Francou, G. & Laskar, J., Astron.Astrophys., 1994, 282, 663
-**
-**     Souchay, J., Loysel, B., Kinoshita, H., Folgueira, M., 1999,
-**     Astron.Astrophys.Supp.Ser. 135, 111
-**
-**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
-**
-**  This revision:  2009 October 16
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-
-/* Maximum power of T in the polynomials for X and Y */
-#define MAXPT (5)
-
-/* Polynomial coefficients (arcsec, X then Y). */
-   static const double xyp[2][MAXPT+1] = {
-
-      {    -0.016617,
-         2004.191898,
-           -0.4297829,
-           -0.19861834,
-            0.000007578,
-            0.0000059285
-      },
-      {    -0.006951,
-           -0.025896,
-          -22.4072747,
-            0.00190059,
-            0.001112526,
-            0.0000001358
-      }
-   };
-
-/* Fundamental-argument multipliers:  luni-solar terms */
-   static const int mfals[][5] = {
-
-   /* 1-10 */
-      {  0,   0,   0,   0,   1 },
-      {  0,   0,   2,  -2,   2 },
-      {  0,   0,   2,   0,   2 },
-      {  0,   0,   0,   0,   2 },
-      {  0,   1,   0,   0,   0 },
-      {  0,   1,   2,  -2,   2 },
-      {  1,   0,   0,   0,   0 },
-      {  0,   0,   2,   0,   1 },
-      {  1,   0,   2,   0,   2 },
-      {  0,   1,  -2,   2,  -2 },
-
-   /* 11-20 */
-      {  0,   0,   2,  -2,   1 },
-      {  1,   0,  -2,   0,  -2 },
-      {  1,   0,   0,  -2,   0 },
-      {  1,   0,   0,   0,   1 },
-      {  1,   0,   0,   0,  -1 },
-      {  1,   0,  -2,  -2,  -2 },
-      {  1,   0,   2,   0,   1 },
-      {  2,   0,  -2,   0,  -1 },
-      {  0,   0,   0,   2,   0 },
-      {  0,   0,   2,   2,   2 },
-
-   /* 21-30 */
-      {  2,   0,   0,  -2,   0 },
-      {  0,   2,  -2,   2,  -2 },
-      {  2,   0,   2,   0,   2 },
-      {  1,   0,   2,  -2,   2 },
-      {  1,   0,  -2,   0,  -1 },
-      {  2,   0,   0,   0,   0 },
-      {  0,   0,   2,   0,   0 },
-      {  0,   1,   0,   0,   1 },
-      {  1,   0,   0,  -2,  -1 },
-      {  0,   2,   2,  -2,   2 },
-
-   /* 31-40 */
-      {  0,   0,   2,  -2,   0 },
-      {  1,   0,   0,  -2,   1 },
-      {  0,   1,   0,   0,  -1 },
-      {  0,   2,   0,   0,   0 },
-      {  1,   0,  -2,  -2,  -1 },
-      {  1,   0,   2,   2,   2 },
-      {  0,   1,   2,   0,   2 },
-      {  2,   0,  -2,   0,   0 },
-      {  0,   0,   2,   2,   1 },
-      {  0,   1,  -2,   0,  -2 },
-
-   /* 41-50 */
-      {  0,   0,   0,   2,   1 },
-      {  1,   0,   2,  -2,   1 },
-      {  2,   0,   0,  -2,  -1 },
-      {  2,   0,   2,  -2,   2 },
-      {  2,   0,   2,   0,   1 },
-      {  0,   0,   0,   2,  -1 },
-      {  0,   1,  -2,   2,  -1 },
-      {  1,   1,   0,  -2,   0 },
-      {  2,   0,   0,  -2,   1 },
-      {  1,   0,   0,   2,   0 },
-
-   /* 51-60 */
-      {  0,   1,   2,  -2,   1 },
-      {  1,  -1,   0,   0,   0 },
-      {  0,   1,  -1,   1,  -1 },
-      {  2,   0,  -2,   0,  -2 },
-      {  0,   1,   0,  -2,   0 },
-      {  1,   0,   0,  -1,   0 },
-      {  3,   0,   2,   0,   2 },
-      {  0,   0,   0,   1,   0 },
-      {  1,  -1,   2,   0,   2 },
-      {  1,   1,  -2,  -2,  -2 },
-
-   /* 61-70 */
-      {  1,   0,  -2,   0,   0 },
-      {  2,   0,   0,   0,  -1 },
-      {  0,   1,  -2,  -2,  -2 },
-      {  1,   1,   2,   0,   2 },
-      {  2,   0,   0,   0,   1 },
-      {  1,   1,   0,   0,   0 },
-      {  1,   0,  -2,   2,  -1 },
-      {  1,   0,   2,   0,   0 },
-      {  1,  -1,   0,  -1,   0 },
-      {  1,   0,   0,   0,   2 },
-
-   /* 71-80 */
-      {  1,   0,  -1,   0,  -1 },
-      {  0,   0,   2,   1,   2 },
-      {  1,   0,  -2,  -4,  -2 },
-      {  1,  -1,   0,  -1,  -1 },
-      {  1,   0,   2,   2,   1 },
-      {  0,   2,  -2,   2,  -1 },
-      {  1,   0,   0,   0,  -2 },
-      {  2,   0,  -2,  -2,  -2 },
-      {  1,   1,   2,  -2,   2 },
-      {  2,   0,  -2,  -4,  -2 },
-
-   /* 81-90 */
-      {  1,   0,  -4,   0,  -2 },
-      {  2,   0,   2,  -2,   1 },
-      {  1,   0,   0,  -1,  -1 },
-      {  2,   0,   2,   2,   2 },
-      {  3,   0,   0,   0,   0 },
-      {  1,   0,   0,   2,   1 },
-      {  0,   0,   2,  -2,  -1 },
-      {  3,   0,   2,  -2,   2 },
-      {  0,   0,   4,  -2,   2 },
-      {  1,   0,   0,  -4,   0 },
-
-   /* 91-100 */
-      {  0,   1,   2,   0,   1 },
-      {  2,   0,   0,  -4,   0 },
-      {  1,   1,   0,  -2,  -1 },
-      {  2,   0,  -2,   0,   1 },
-      {  0,   0,   2,   0,  -1 },
-      {  0,   1,  -2,   0,  -1 },
-      {  0,   1,   0,   0,   2 },
-      {  0,   0,   2,  -1,   2 },
-      {  0,   0,   2,   4,   2 },
-      {  2,   1,   0,  -2,   0 },
-
-   /* 101-110 */
-      {  1,   1,   0,  -2,   1 },
-      {  1,  -1,   0,  -2,   0 },
-      {  1,  -1,   0,  -1,  -2 },
-      {  1,  -1,   0,   0,   1 },
-      {  0,   1,  -2,   2,   0 },
-      {  0,   1,   0,   0,  -2 },
-      {  1,  -1,   2,   2,   2 },
-      {  1,   0,   0,   2,  -1 },
-      {  1,  -1,  -2,  -2,  -2 },
-      {  3,   0,   2,   0,   1 },
-
-   /* 111-120 */
-      {  0,   1,   2,   2,   2 },
-      {  1,   0,   2,  -2,   0 },
-      {  1,   1,  -2,  -2,  -1 },
-      {  1,   0,   2,  -4,   1 },
-      {  0,   1,  -2,  -2,  -1 },
-      {  2,  -1,   2,   0,   2 },
-      {  0,   0,   0,   2,   2 },
-      {  1,  -1,   2,   0,   1 },
-      {  1,  -1,  -2,   0,  -2 },
-      {  0,   1,   0,   2,   0 },
-
-   /* 121-130 */
-      {  0,   1,   2,  -2,   0 },
-      {  0,   0,   0,   1,   1 },
-      {  1,   0,  -2,  -2,   0 },
-      {  0,   3,   2,  -2,   2 },
-      {  2,   1,   2,   0,   2 },
-      {  1,   1,   0,   0,   1 },
-      {  2,   0,   0,   2,   0 },
-      {  1,   1,   2,   0,   1 },
-      {  1,   0,   0,  -2,  -2 },
-      {  1,   0,  -2,   2,   0 },
-
-   /* 131-140 */
-      {  1,   0,  -1,   0,  -2 },
-      {  0,   1,   0,  -2,   1 },
-      {  0,   1,   0,   1,   0 },
-      {  0,   0,   0,   1,  -1 },
-      {  1,   0,  -2,   2,  -2 },
-      {  1,  -1,   0,   0,  -1 },
-      {  0,   0,   0,   4,   0 },
-      {  1,  -1,   0,   2,   0 },
-      {  1,   0,   2,   1,   2 },
-      {  1,   0,   2,  -1,   2 },
-
-   /* 141-150 */
-      {  0,   0,   2,   1,   1 },
-      {  1,   0,   0,  -2,   2 },
-      {  1,   0,  -2,   0,   1 },
-      {  1,   0,  -2,  -4,  -1 },
-      {  0,   0,   2,   2,   0 },
-      {  1,   1,   2,  -2,   1 },
-      {  1,   0,  -2,   1,  -1 },
-      {  0,   0,   1,   0,   1 },
-      {  2,   0,  -2,  -2,  -1 },
-      {  4,   0,   2,   0,   2 },
-
-   /* 151-160 */
-      {  2,  -1,   0,   0,   0 },
-      {  2,   1,   2,  -2,   2 },
-      {  0,   1,   2,   1,   2 },
-      {  1,   0,   4,  -2,   2 },
-      {  1,   1,   0,   0,  -1 },
-      {  2,   0,   2,   0,   0 },
-      {  2,   0,  -2,  -4,  -1 },
-      {  1,   0,  -1,   0,   0 },
-      {  1,   0,   0,   1,   0 },
-      {  0,   1,   0,   2,   1 },
-
-   /* 161-170 */
-      {  1,   0,  -4,   0,  -1 },
-      {  1,   0,   0,  -4,  -1 },
-      {  2,   0,   2,   2,   1 },
-      {  2,   1,   0,   0,   0 },
-      {  0,   0,   2,  -3,   2 },
-      {  1,   2,   0,  -2,   0 },
-      {  0,   3,   0,   0,   0 },
-      {  0,   0,   4,   0,   2 },
-      {  0,   0,   2,  -4,   1 },
-      {  2,   0,   0,  -2,  -2 },
-
-   /* 171-180 */
-      {  1,   1,  -2,  -4,  -2 },
-      {  0,   1,   0,  -2,  -1 },
-      {  0,   0,   0,   4,   1 },
-      {  3,   0,   2,  -2,   1 },
-      {  1,   0,   2,   4,   2 },
-      {  1,   1,  -2,   0,  -2 },
-      {  0,   0,   4,  -2,   1 },
-      {  2,  -2,   0,  -2,   0 },
-      {  2,   1,   0,  -2,  -1 },
-      {  0,   2,   0,  -2,   0 },
-
-   /* 181-190 */
-      {  1,   0,   0,  -1,   1 },
-      {  1,   1,   2,   2,   2 },
-      {  3,   0,   0,   0,  -1 },
-      {  2,   0,   0,  -4,  -1 },
-      {  3,   0,   2,   2,   2 },
-      {  0,   0,   2,   4,   1 },
-      {  0,   2,  -2,  -2,  -2 },
-      {  1,  -1,   0,  -2,  -1 },
-      {  0,   0,   2,  -1,   1 },
-      {  2,   0,   0,   2,   1 },
-
-   /* 191-200 */
-      {  1,  -1,  -2,   2,  -1 },
-      {  0,   0,   0,   2,  -2 },
-      {  2,   0,   0,  -4,   1 },
-      {  1,   0,   0,  -4,   1 },
-      {  2,   0,   2,  -4,   1 },
-      {  4,   0,   2,  -2,   2 },
-      {  2,   1,  -2,   0,  -1 },
-      {  2,   1,  -2,  -4,  -2 },
-      {  3,   0,   0,  -4,   0 },
-      {  1,  -1,   2,   2,   1 },
-
-   /* 201-210 */
-      {  1,  -1,  -2,   0,  -1 },
-      {  0,   2,   0,   0,   1 },
-      {  1,   2,  -2,  -2,  -2 },
-      {  1,   1,   0,  -4,   0 },
-      {  2,   0,   0,  -2,   2 },
-      {  0,   2,   2,  -2,   1 },
-      {  1,   0,   2,   0,  -1 },
-      {  2,   1,   0,  -2,   1 },
-      {  2,  -1,  -2,   0,  -1 },
-      {  1,  -1,  -2,  -2,  -1 },
-
-   /* 211-220 */
-      {  0,   1,  -2,   1,  -2 },
-      {  1,   0,  -4,   2,  -2 },
-      {  0,   1,   2,   2,   1 },
-      {  3,   0,   0,   0,   1 },
-      {  2,  -1,   2,   2,   2 },
-      {  0,   1,  -2,  -4,  -2 },
-      {  1,   0,  -2,  -3,  -2 },
-      {  2,   0,   0,   0,   2 },
-      {  1,  -1,   0,  -2,  -2 },
-      {  2,   0,  -2,   2,  -1 },
-
-   /* 221-230 */
-      {  0,   2,  -2,   0,  -2 },
-      {  3,   0,  -2,   0,  -1 },
-      {  2,  -1,   2,   0,   1 },
-      {  1,   0,  -2,  -1,  -2 },
-      {  0,   0,   2,   0,   3 },
-      {  2,   0,  -4,   0,  -2 },
-      {  2,   1,   0,  -4,   0 },
-      {  1,   1,  -2,   1,  -1 },
-      {  0,   2,   2,   0,   2 },
-      {  1,  -1,   2,  -2,   2 },
-
-   /* 231-240 */
-      {  1,  -1,   0,  -2,   1 },
-      {  2,   1,   2,   0,   1 },
-      {  1,   0,   2,  -4,   2 },
-      {  1,   1,  -2,   0,  -1 },
-      {  1,   1,   0,   2,   0 },
-      {  1,   0,   0,  -3,   0 },
-      {  2,   0,   2,  -1,   2 },
-      {  0,   2,   0,   0,  -1 },
-      {  2,  -1,   0,  -2,   0 },
-      {  4,   0,   0,   0,   0 },
-
-   /* 241-250 */
-      {  2,   1,  -2,  -2,  -2 },
-      {  0,   2,  -2,   2,   0 },
-      {  1,   0,   2,   1,   1 },
-      {  1,   0,  -1,   0,  -3 },
-      {  3,  -1,   2,   0,   2 },
-      {  2,   0,   2,  -2,   0 },
-      {  1,  -2,   0,   0,   0 },
-      {  2,   0,   0,   0,  -2 },
-      {  1,   0,   0,   4,   0 },
-      {  0,   1,   0,   1,   1 },
-
-   /* 251-260 */
-      {  1,   0,   2,   2,   0 },
-      {  0,   1,   0,   2,  -1 },
-      {  0,   1,   0,   1,  -1 },
-      {  0,   0,   2,  -2,   3 },
-      {  3,   1,   2,   0,   2 },
-      {  1,   1,   2,   1,   2 },
-      {  1,   1,  -2,   2,  -1 },
-      {  2,  -1,   2,  -2,   2 },
-      {  1,  -2,   2,   0,   2 },
-      {  1,   0,   2,  -4,   0 },
-
-   /* 261-270 */
-      {  0,   0,   1,   0,   0 },
-      {  1,   0,   2,  -3,   1 },
-      {  1,  -2,   0,  -2,   0 },
-      {  2,   0,   0,   2,  -1 },
-      {  1,   1,   2,  -4,   1 },
-      {  4,   0,   2,   0,   1 },
-      {  0,   1,   2,   1,   1 },
-      {  1,   2,   2,  -2,   2 },
-      {  2,   0,   2,   1,   2 },
-      {  2,   1,   2,  -2,   1 },
-
-   /* 271-280 */
-      {  1,   0,   2,  -1,   1 },
-      {  1,   0,   4,  -2,   1 },
-      {  1,  -1,   2,  -2,   1 },
-      {  0,   1,   0,  -4,   0 },
-      {  3,   0,  -2,  -2,  -2 },
-      {  0,   0,   4,  -4,   2 },
-      {  2,   0,  -4,  -2,  -2 },
-      {  2,  -2,   0,  -2,  -1 },
-      {  1,   0,   2,  -2,  -1 },
-      {  2,   0,  -2,  -6,  -2 },
-
-   /* 281-290 */
-      {  1,   0,  -2,   1,  -2 },
-      {  1,   0,  -2,   2,   1 },
-      {  1,  -1,   0,   2,  -1 },
-      {  1,   0,  -2,   1,   0 },
-      {  2,  -1,   0,  -2,   1 },
-      {  1,  -1,   0,   2,   1 },
-      {  2,   0,  -2,  -2,   0 },
-      {  1,   0,   2,  -3,   2 },
-      {  0,   0,   0,   4,  -1 },
-      {  2,  -1,   0,   0,   1 },
-
-   /* 291-300 */
-      {  2,   0,   4,  -2,   2 },
-      {  0,   0,   2,   3,   2 },
-      {  0,   1,   4,  -2,   2 },
-      {  0,   1,  -2,   2,   1 },
-      {  1,   1,   0,   2,   1 },
-      {  1,   0,   0,   4,   1 },
-      {  0,   0,   4,   0,   1 },
-      {  2,   0,   0,  -3,   0 },
-      {  1,   0,   0,  -1,  -2 },
-      {  1,  -2,  -2,  -2,  -2 },
-
-   /* 301-310 */
-      {  3,   0,   0,   2,   0 },
-      {  2,   0,   2,  -4,   2 },
-      {  1,   1,  -2,  -4,  -1 },
-      {  1,   0,  -2,  -6,  -2 },
-      {  2,  -1,   0,   0,  -1 },
-      {  2,  -1,   0,   2,   0 },
-      {  0,   1,   2,  -2,  -1 },
-      {  1,   1,   0,   1,   0 },
-      {  1,   2,   0,  -2,  -1 },
-      {  1,   0,   0,   1,  -1 },
-
-   /* 311-320 */
-      {  0,   0,   1,   0,   2 },
-      {  3,   1,   2,  -2,   2 },
-      {  1,   0,  -4,  -2,  -2 },
-      {  1,   0,   2,   4,   1 },
-      {  1,  -2,   2,   2,   2 },
-      {  1,  -1,  -2,  -4,  -2 },
-      {  0,   0,   2,  -4,   2 },
-      {  0,   0,   2,  -3,   1 },
-      {  2,   1,  -2,   0,   0 },
-      {  3,   0,  -2,  -2,  -1 },
-
-   /* 321-330 */
-      {  2,   0,   2,   4,   2 },
-      {  0,   0,   0,   0,   3 },
-      {  2,  -1,  -2,  -2,  -2 },
-      {  2,   0,   0,  -1,   0 },
-      {  3,   0,   2,  -4,   2 },
-      {  2,   1,   2,   2,   2 },
-      {  0,   0,   3,   0,   3 },
-      {  1,   1,   2,   2,   1 },
-      {  2,   1,   0,   0,  -1 },
-      {  1,   2,   0,  -2,   1 },
-
-   /* 331-340 */
-      {  3,   0,   2,   2,   1 },
-      {  1,  -1,  -2,   2,  -2 },
-      {  1,   1,   0,  -1,   0 },
-      {  1,   2,   0,   0,   0 },
-      {  1,   0,   4,   0,   2 },
-      {  1,  -1,   2,   4,   2 },
-      {  2,   1,   0,   0,   1 },
-      {  1,   0,   0,   2,   2 },
-      {  1,  -1,  -2,   2,   0 },
-      {  0,   2,  -2,  -2,  -1 },
-
-   /* 341-350 */
-      {  2,   0,  -2,   0,   2 },
-      {  5,   0,   2,   0,   2 },
-      {  3,   0,  -2,  -6,  -2 },
-      {  1,  -1,   2,  -1,   2 },
-      {  3,   0,   0,  -4,  -1 },
-      {  1,   0,   0,   1,   1 },
-      {  1,   0,  -4,   2,  -1 },
-      {  0,   1,   2,  -4,   1 },
-      {  1,   2,   2,   0,   2 },
-      {  0,   1,   0,  -2,  -2 },
-
-   /* 351-360 */
-      {  0,   0,   2,  -1,   0 },
-      {  1,   0,   1,   0,   1 },
-      {  0,   2,   0,  -2,   1 },
-      {  3,   0,   2,   0,   0 },
-      {  1,   1,  -2,   1,   0 },
-      {  2,   1,  -2,  -4,  -1 },
-      {  3,  -1,   0,   0,   0 },
-      {  2,  -1,  -2,   0,   0 },
-      {  4,   0,   2,  -2,   1 },
-      {  2,   0,  -2,   2,   0 },
-
-   /* 361-370 */
-      {  1,   1,   2,  -2,   0 },
-      {  1,   0,  -2,   4,  -1 },
-      {  1,   0,  -2,  -2,   1 },
-      {  2,   0,   2,  -4,   0 },
-      {  1,   1,   0,  -2,  -2 },
-      {  1,   1,  -2,  -2,   0 },
-      {  1,   0,   1,  -2,   1 },
-      {  2,  -1,  -2,  -4,  -2 },
-      {  3,   0,  -2,   0,  -2 },
-      {  0,   1,  -2,  -2,   0 },
-
-   /* 371-380 */
-      {  3,   0,   0,  -2,  -1 },
-      {  1,   0,  -2,  -3,  -1 },
-      {  0,   1,   0,  -4,  -1 },
-      {  1,  -2,   2,  -2,   1 },
-      {  0,   1,  -2,   1,  -1 },
-      {  1,  -1,   0,   0,   2 },
-      {  2,   0,   0,   1,   0 },
-      {  1,  -2,   0,   2,   0 },
-      {  1,   2,  -2,  -2,  -1 },
-      {  0,   0,   4,  -4,   1 },
-
-   /* 381-390 */
-      {  0,   1,   2,   4,   2 },
-      {  0,   1,  -4,   2,  -2 },
-      {  3,   0,  -2,   0,   0 },
-      {  2,  -1,   2,   2,   1 },
-      {  0,   1,  -2,  -4,  -1 },
-      {  4,   0,   2,   2,   2 },
-      {  2,   0,  -2,  -3,  -2 },
-      {  2,   0,   0,  -6,   0 },
-      {  1,   0,   2,   0,   3 },
-      {  3,   1,   0,   0,   0 },
-
-   /* 391-400 */
-      {  3,   0,   0,  -4,   1 },
-      {  1,  -1,   2,   0,   0 },
-      {  1,  -1,   0,  -4,   0 },
-      {  2,   0,  -2,   2,  -2 },
-      {  1,   1,   0,  -2,   2 },
-      {  4,   0,   0,  -2,   0 },
-      {  2,   2,   0,  -2,   0 },
-      {  0,   1,   2,   0,   0 },
-      {  1,   1,   0,  -4,   1 },
-      {  1,   0,   0,  -4,  -2 },
-
-   /* 401-410 */
-      {  0,   0,   0,   1,   2 },
-      {  3,   0,   0,   2,   1 },
-      {  1,   1,   0,  -4,  -1 },
-      {  0,   0,   2,   2,  -1 },
-      {  1,   1,   2,   0,   0 },
-      {  1,  -1,   2,  -4,   1 },
-      {  1,   1,   0,   0,   2 },
-      {  0,   0,   2,   6,   2 },
-      {  4,   0,  -2,  -2,  -1 },
-      {  2,   1,   0,  -4,  -1 },
-
-   /* 411-420 */
-      {  0,   0,   0,   3,   1 },
-      {  1,  -1,  -2,   0,   0 },
-      {  0,   0,   2,   1,   0 },
-      {  1,   0,   0,   2,  -2 },
-      {  3,  -1,   2,   2,   2 },
-      {  3,  -1,   2,  -2,   2 },
-      {  1,   0,   0,  -1,   2 },
-      {  1,  -2,   2,  -2,   2 },
-      {  0,   1,   0,   2,   2 },
-      {  0,   1,  -2,  -1,  -2 },
-
-   /* 421-430 */
-      {  1,   1,  -2,   0,   0 },
-      {  0,   2,   2,  -2,   0 },
-      {  3,  -1,  -2,  -1,  -2 },
-      {  1,   0,   0,  -6,   0 },
-      {  1,   0,  -2,  -4,   0 },
-      {  2,   1,   0,  -4,   1 },
-      {  2,   0,   2,   0,  -1 },
-      {  2,   0,  -4,   0,  -1 },
-      {  0,   0,   3,   0,   2 },
-      {  2,   1,  -2,  -2,  -1 },
-
-   /* 431-440 */
-      {  1,  -2,   0,   0,   1 },
-      {  2,  -1,   0,  -4,   0 },
-      {  0,   0,   0,   3,   0 },
-      {  5,   0,   2,  -2,   2 },
-      {  1,   2,  -2,  -4,  -2 },
-      {  1,   0,   4,  -4,   2 },
-      {  0,   0,   4,  -1,   2 },
-      {  3,   1,   0,  -4,   0 },
-      {  3,   0,   0,  -6,   0 },
-      {  2,   0,   0,   2,   2 },
-
-   /* 441-450 */
-      {  2,  -2,   2,   0,   2 },
-      {  1,   0,   0,  -3,   1 },
-      {  1,  -2,  -2,   0,  -2 },
-      {  1,  -1,  -2,  -3,  -2 },
-      {  0,   0,   2,  -2,  -2 },
-      {  2,   0,  -2,  -4,   0 },
-      {  1,   0,  -4,   0,   0 },
-      {  0,   1,   0,  -1,   0 },
-      {  4,   0,   0,   0,  -1 },
-      {  3,   0,   2,  -1,   2 },
-
-   /* 451-460 */
-      {  3,  -1,   2,   0,   1 },
-      {  2,   0,   2,  -1,   1 },
-      {  1,   2,   2,  -2,   1 },
-      {  1,   1,   0,   2,  -1 },
-      {  0,   2,   2,   0,   1 },
-      {  3,   1,   2,   0,   1 },
-      {  1,   1,   2,   1,   1 },
-      {  1,   1,   0,  -1,   1 },
-      {  1,  -2,   0,  -2,  -1 },
-      {  4,   0,   0,  -4,   0 },
-
-   /* 461-470 */
-      {  2,   1,   0,   2,   0 },
-      {  1,  -1,   0,   4,   0 },
-      {  0,   1,   0,  -2,   2 },
-      {  0,   0,   2,   0,  -2 },
-      {  1,   0,  -1,   0,   1 },
-      {  3,   0,   2,  -2,   0 },
-      {  2,   0,   2,   2,   0 },
-      {  1,   2,   0,  -4,   0 },
-      {  1,  -1,   0,  -3,   0 },
-      {  0,   1,   0,   4,   0 },
-
-   /* 471 - 480 */
-      {  0,   1,  -2,   0,   0 },
-      {  2,   2,   2,  -2,   2 },
-      {  0,   0,   0,   1,  -2 },
-      {  0,   2,  -2,   0,  -1 },
-      {  4,   0,   2,  -4,   2 },
-      {  2,   0,  -4,   2,  -2 },
-      {  2,  -1,  -2,   0,  -2 },
-      {  1,   1,   4,  -2,   2 },
-      {  1,   1,   2,  -4,   2 },
-      {  1,   0,   2,   3,   2 },
-
-   /* 481-490 */
-      {  1,   0,   0,   4,  -1 },
-      {  0,   0,   0,   4,   2 },
-      {  2,   0,   0,   4,   0 },
-      {  1,   1,  -2,   2,   0 },
-      {  2,   1,   2,   1,   2 },
-      {  2,   1,   2,  -4,   1 },
-      {  2,   0,   2,   1,   1 },
-      {  2,   0,  -4,  -2,  -1 },
-      {  2,   0,  -2,  -6,  -1 },
-      {  2,  -1,   2,  -1,   2 },
-
-   /* 491-500 */
-      {  1,  -2,   2,   0,   1 },
-      {  1,  -2,   0,  -2,   1 },
-      {  1,  -1,   0,  -4,  -1 },
-      {  0,   2,   2,   2,   2 },
-      {  0,   2,  -2,  -4,  -2 },
-      {  0,   1,   2,   3,   2 },
-      {  0,   1,   0,  -4,   1 },
-      {  3,   0,   0,  -2,   1 },
-      {  2,   1,  -2,   0,   1 },
-      {  2,   0,   4,  -2,   1 },
-
-   /* 501-510 */
-      {  2,   0,   0,  -3,  -1 },
-      {  2,  -2,   0,  -2,   1 },
-      {  2,  -1,   2,  -2,   1 },
-      {  1,   0,   0,  -6,  -1 },
-      {  1,  -2,   0,   0,  -1 },
-      {  1,  -2,  -2,  -2,  -1 },
-      {  0,   1,   4,  -2,   1 },
-      {  0,   0,   2,   3,   1 },
-      {  2,  -1,   0,  -1,   0 },
-      {  1,   3,   0,  -2,   0 },
-
-   /* 511-520 */
-      {  0,   3,   0,  -2,   0 },
-      {  2,  -2,   2,  -2,   2 },
-      {  0,   0,   4,  -2,   0 },
-      {  4,  -1,   2,   0,   2 },
-      {  2,   2,  -2,  -4,  -2 },
-      {  4,   1,   2,   0,   2 },
-      {  4,  -1,  -2,  -2,  -2 },
-      {  2,   1,   0,  -2,  -2 },
-      {  2,   1,  -2,  -6,  -2 },
-      {  2,   0,   0,  -1,   1 },
-
-   /* 521-530 */
-      {  2,  -1,  -2,   2,  -1 },
-      {  1,   1,  -2,   2,  -2 },
-      {  1,   1,  -2,  -3,  -2 },
-      {  1,   0,   3,   0,   3 },
-      {  1,   0,  -2,   1,   1 },
-      {  1,   0,  -2,   0,   2 },
-      {  1,  -1,   2,   1,   2 },
-      {  1,  -1,   0,   0,  -2 },
-      {  1,  -1,  -4,   2,  -2 },
-      {  0,   3,  -2,  -2,  -2 },
-
-   /* 531-540 */
-      {  0,   1,   0,   4,   1 },
-      {  0,   0,   4,   2,   2 },
-      {  3,   0,  -2,  -2,   0 },
-      {  2,  -2,   0,   0,   0 },
-      {  1,   1,   2,  -4,   0 },
-      {  1,   1,   0,  -3,   0 },
-      {  1,   0,   2,  -3,   0 },
-      {  1,  -1,   2,  -2,   0 },
-      {  0,   2,   0,   2,   0 },
-      {  0,   0,   2,   4,   0 },
-
-   /* 541-550 */
-      {  1,   0,   1,   0,   0 },
-      {  3,   1,   2,  -2,   1 },
-      {  3,   0,   4,  -2,   2 },
-      {  3,   0,   2,   1,   2 },
-      {  3,   0,   0,   2,  -1 },
-      {  3,   0,   0,   0,   2 },
-      {  3,   0,  -2,   2,  -1 },
-      {  2,   0,   4,  -4,   2 },
-      {  2,   0,   2,  -3,   2 },
-      {  2,   0,   0,   4,   1 },
-
-   /* 551-560 */
-      {  2,   0,   0,  -3,   1 },
-      {  2,   0,  -4,   2,  -1 },
-      {  2,   0,  -2,  -2,   1 },
-      {  2,  -2,   2,   2,   2 },
-      {  2,  -2,   0,  -2,  -2 },
-      {  2,  -1,   0,   2,   1 },
-      {  2,  -1,   0,   2,  -1 },
-      {  1,   1,   2,   4,   2 },
-      {  1,   1,   0,   1,   1 },
-      {  1,   1,   0,   1,  -1 },
-
-   /* 561-570 */
-      {  1,   1,  -2,  -6,  -2 },
-      {  1,   0,   0,  -3,  -1 },
-      {  1,   0,  -4,  -2,  -1 },
-      {  1,   0,  -2,  -6,  -1 },
-      {  1,  -2,   2,   2,   1 },
-      {  1,  -2,  -2,   2,  -1 },
-      {  1,  -1,  -2,  -4,  -1 },
-      {  0,   2,   0,   0,   2 },
-      {  0,   1,   2,  -4,   2 },
-      {  0,   1,  -2,   4,  -1 },
-
-   /* 571-580 */
-      {  5,   0,   0,   0,   0 },
-      {  3,   0,   0,  -3,   0 },
-      {  2,   2,   0,  -4,   0 },
-      {  1,  -1,   2,   2,   0 },
-      {  0,   1,   0,   3,   0 },
-      {  4,   0,  -2,   0,  -1 },
-      {  3,   0,  -2,  -6,  -1 },
-      {  3,   0,  -2,  -1,  -1 },
-      {  2,   1,   2,   2,   1 },
-      {  2,   1,   0,   2,   1 },
-
-   /* 581-590 */
-      {  2,   0,   2,   4,   1 },
-      {  2,   0,   2,  -6,   1 },
-      {  2,   0,   2,  -2,  -1 },
-      {  2,   0,   0,  -6,  -1 },
-      {  2,  -1,  -2,  -2,  -1 },
-      {  1,   2,   2,   0,   1 },
-      {  1,   2,   0,   0,   1 },
-      {  1,   0,   4,   0,   1 },
-      {  1,   0,   2,  -6,   1 },
-      {  1,   0,   2,  -4,  -1 },
-
-   /* 591-600 */
-      {  1,   0,  -1,  -2,  -1 },
-      {  1,  -1,   2,   4,   1 },
-      {  1,  -1,   2,  -3,   1 },
-      {  1,  -1,   0,   4,   1 },
-      {  1,  -1,  -2,   1,  -1 },
-      {  0,   1,   2,  -2,   3 },
-      {  3,   0,   0,  -2,   0 },
-      {  1,   0,   1,  -2,   0 },
-      {  0,   2,   0,  -4,   0 },
-      {  0,   0,   2,  -4,   0 },
-
-   /* 601-610 */
-      {  0,   0,   1,  -1,   0 },
-      {  0,   0,   0,   6,   0 },
-      {  0,   2,   0,   0,  -2 },
-      {  0,   1,  -2,   2,  -3 },
-      {  4,   0,   0,   2,   0 },
-      {  3,   0,   0,  -1,   0 },
-      {  3,  -1,   0,   2,   0 },
-      {  2,   1,   0,   1,   0 },
-      {  2,   1,   0,  -6,   0 },
-      {  2,  -1,   2,   0,   0 },
-
-   /* 611-620 */
-      {  1,   0,   2,  -1,   0 },
-      {  1,  -1,   0,   1,   0 },
-      {  1,  -1,  -2,  -2,   0 },
-      {  0,   1,   2,   2,   0 },
-      {  0,   0,   2,  -3,   0 },
-      {  2,   2,   0,  -2,  -1 },
-      {  2,  -1,  -2,   0,   1 },
-      {  1,   2,   2,  -4,   1 },
-      {  0,   1,   4,  -4,   2 },
-      {  0,   0,   0,   3,   2 },
-
-   /* 621-630 */
-      {  5,   0,   2,   0,   1 },
-      {  4,   1,   2,  -2,   2 },
-      {  4,   0,  -2,  -2,   0 },
-      {  3,   1,   2,   2,   2 },
-      {  3,   1,   0,  -2,   0 },
-      {  3,   1,  -2,  -6,  -2 },
-      {  3,   0,   0,   0,  -2 },
-      {  3,   0,  -2,  -4,  -2 },
-      {  3,  -1,   0,  -3,   0 },
-      {  3,  -1,   0,  -2,   0 },
-
-   /* 631-640 */
-      {  2,   1,   2,   0,   0 },
-      {  2,   1,   2,  -4,   2 },
-      {  2,   1,   2,  -2,   0 },
-      {  2,   1,   0,  -3,   0 },
-      {  2,   1,  -2,   0,  -2 },
-      {  2,   0,   0,  -4,   2 },
-      {  2,   0,   0,  -4,  -2 },
-      {  2,   0,  -2,  -5,  -2 },
-      {  2,  -1,   2,   4,   2 },
-      {  2,  -1,   0,  -2,   2 },
-
-   /* 641-650 */
-      {  1,   3,  -2,  -2,  -2 },
-      {  1,   1,   0,   0,  -2 },
-      {  1,   1,   0,  -6,   0 },
-      {  1,   1,  -2,   1,  -2 },
-      {  1,   1,  -2,  -1,  -2 },
-      {  1,   0,   2,   1,   0 },
-      {  1,   0,   0,   3,   0 },
-      {  1,   0,   0,  -4,   2 },
-      {  1,   0,  -2,   4,  -2 },
-      {  1,  -2,   0,  -1,   0 },
-
-   /* 651-NFLS */
-      {  0,   1,  -4,   2,  -1 },
-      {  1,   0,  -2,   0,  -3 },
-      {  0,   0,   4,  -4,   4 }
-   };
-
-/* Number of frequencies:  luni-solar */
-   static const int NFLS = (int) (sizeof mfals / sizeof (int) / 5);
-
-/* Fundamental-argument multipliers:  planetary terms */
-   static const int mfapl[][14] = {
-
-   /* 1-10 */
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -2,  5,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  1, -1,  1,  0, -8, 12,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  8,-16,  4,  5,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0, -1,  2,  0,  0,  0,  0,  0 },
-
-   /* 11-20 */
-      {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  2, -5,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -1,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2, -8,  3,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  6, -8,  3,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0,  0 },
-
-   /* 21-30 */
-      {  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  1,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  1, -1,  1,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
-      {  2,  0,  0, -2, -1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  1 },
-      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-
-   /* 31-40 */
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  1 },
-      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0, -1,  0,  0,  0 },
-
-   /* 41-50 */
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  1, -1,  0,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  4,  0, -2,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  2, -1,  0,  0,  0,  0,  0,  2 },
-      {  1,  0,  0,  0,  0,  0,-18, 16,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  1,  0,  0,  0,  2 },
-
-   /* 51-60 */
-      {  0,  0,  1, -1,  1,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0,  0,  0,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  0,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -1,  0,  0,  0,  2 },
-      {  1,  0,  2,  0,  2,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  1 },
-      {  1,  0, -2,  0, -2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  2,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
-
-   /* 61-70 */
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  8,-16,  4,  5,  0,  0, -2 },
-      {  0,  0,  1, -1,  1,  0,  0,  3, -8,  3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  8,-11,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  8,-16,  4,  5,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0 },
-
-   /* 71-80 */
-      {  0,  0,  0,  0,  0,  0,  6, -8,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  3, -2,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -2,  0,  0,  0,  2 },
-      {  0,  0,  1, -1,  1,  0,  0, -5,  8, -3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  2,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -2,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0,  0 },
-
-   /* 81-90 */
-      {  2,  0,  0, -2,  1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0, -1 },
-      {  2,  0,  0, -2,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  8,-13,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0,  0,  0, -2,  5,  0,  0,  0 },
-      {  1,  0,  0, -1,  0,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  2 },
-      {  1,  0,  0,  0, -1,  0,-18, 16,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0,  0,  0,  2, -5,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0,  0,  0,  1,  0,  0,  0,  0 },
-
-   /* 91-100 */
-      {  1,  0,  0, -2,  0,  0, 19,-21,  3,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0, -8, 13,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  1,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  7, -9,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  2 },
-      {  1,  0,  0,  0,  1,  0,-18, 16,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  6,-16,  4,  5,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  3, -7,  0,  0,  0,  0,  0, -2 },
-
-   /* 101-110 */
-      {  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  1 },
-      {  2,  0,  0, -2,  1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0,  0 },
-      {  2,  0,  0, -2, -1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  2,  0,  0,  0,  2 },
-
-   /* 111-120 */
-      {  0,  0,  0,  0,  1,  0,  0,  1, -2,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  2 },
-      {  0,  0,  2, -2,  1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
-      {  2,  0,  0, -2,  0,  0, -6,  8,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
-
-   /* 121-130 */
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  1 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -1,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  8,-10,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  1, -1,  1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0, -2 },
-      {  1,  0,  0, -1,  1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
-
-   /* 131-140 */
-      {  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  4,  0, -3,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  1,  0,  2, -3,  0,  0,  0,  0,  0,  0 },
-
-   /* 141-150 */
-      {  1,  0,  0, -1,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -4,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  9,-11,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0, -4,  5,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  4,  0, -1,  0,  0,  0,  2 },
-
-   /* 151-160 */
-      {  1,  0,  0, -1,  1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1,  1,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -4, 10,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0, -1,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0, -2 },
-      {  0,  0,  2, -2,  1,  0, -4,  4,  0,  0,  0,  0,  0,  0 },
-
-   /* 161-170 */
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0,  0, -1,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -3,  0,  0,  0,  0,  2 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0,  0,  2,  0 },
-      {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  1,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0, -9, 13,  0,  0,  0,  0,  0 },
-      {  2,  0,  2,  0,  2,  0,  0,  2,  0, -3,  0,  0,  0,  0 },
-
-   /* 171-180 */
-      {  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  1, -1,  2,  0,  0, -1,  0,  0,  2,  0,  0,  0 },
-      {  1,  0,  0, -1, -1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  1 },
-      {  1,  0,  2,  0,  1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
-      {  1,  0, -2,  0, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0, -2,  4,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0 },
-
-   /* 181-190 */
-      {  0,  0,  0,  0,  0,  0,  2,  1,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  2,  0,  2,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1, -8,  3,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  7, -8,  3,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  1,  0, -3,  5,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0, -1,  0,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  0,  0,  0,  1 },
-
-   /* 191-200 */
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  7,-10,  0,  0,  0,  0,  0, -2 },
-      {  1,  0,  0, -2,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  2, -5,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  6, -8,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  1, -1,  1,  0,  0, -9, 15,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0, -2,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0, -1,  1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0 },
-
-   /* 201-210 */
-      {  0,  0,  0,  0,  0,  0,  0,  1, -4,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -1,  0,  0,  2 },
-      {  2,  0,  0, -2,  1,  0, -6,  8,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  1, -1,  1,  0,  3, -6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  8,-14,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-
-   /* 211-220 */
-      {  0,  0,  0,  0,  1,  0,  0,  8,-15,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  7, -7,  0,  0,  0,  0,  0,  0 },
-      {  2,  0,  0, -2,  1,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  1,  0,  0,  2 },
-      {  2,  0, -1, -1,  0,  0,  0,  3, -7,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -3,  4,  0,  0,  0,  0,  0 },
-
-   /* 221-230 */
-      {  2,  0,  0, -2,  0,  0,  0, -6,  8,  0,  0,  0,  0,  0 },
-      {  2,  0,  0, -2,  0,  0,  0, -5,  6,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0,  0,  0, -1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  2,  1,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  1,  2,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  1,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  3, -9,  4,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0, -2 },
-
-   /* 231-240 */
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -4,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  1 },
-      {  0,  0,  0,  0,  0,  0,  7,-11,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  3, -5,  4,  0,  0,  0,  0,  2 },
-      {  0,  0,  1, -1,  0,  0,  0, -1,  0, -1,  1,  0,  0,  0 },
-      {  2,  0,  0,  0,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0, -2 },
-      {  0,  0,  1, -1,  2,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  0, -1 },
-
-   /* 241-250 */
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -1,  1,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -8,  3,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  2, -4,  0, -3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  3, -5,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -3,  0,  0,  0,  2 },
-      {  0,  0,  2, -2,  2,  0, -8, 11,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -8,  3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -2,  0,  0,  0 },
-
-   /* 251-260 */
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  1,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  7, -9,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  2, -1,  0,  0,  0,  0,  0,  0 },
-      {  1,  0, -2, -2, -2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  5,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  3, -3,  0,  0,  0,  0,  0,  1 },
-
-   /* 261-270 */
-      {  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  2, -5,  0,  0,  2 },
-      {  2,  0,  0, -2, -1,  0,  0, -2,  0,  0,  5,  0,  0,  0 },
-      {  2,  0,  0, -2, -1,  0, -6,  8,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0, -2,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  8, -8,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0,  2, -5,  0,  0,  2 },
-      {  0,  0,  0,  0,  1,  0,  3, -7,  4,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
-
-   /* 271-280 */
-      {  0,  0,  1, -1,  0,  0,  0, -1,  0, -2,  5,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0, 11,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  6,-15,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0,  1,  0,  0,  0,  2 },
-      {  1,  0,  0, -1,  0,  0,  0, -3,  4,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0, -3,  7, -4,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  5,  0, -2,  0,  0,  0,  2 },
-
-   /* 281-290 */
-      {  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  2, -2,  2,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  6,-11,  0,  0,  0,  0, -2 },
-
-   /* 291-300 */
-      {  0,  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0, -2 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  3,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  9,-12,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  1, -1,  0,  0, -8, 12,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0, -2,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  7, -7,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0, -1 },
-
-   /* 301-310 */
-      {  0,  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  1, -1,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  1, -1, -1,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1, -5,  0,  0,  0,  0, -2 },
-      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  3, -1,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -2,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0,  2 },
-
-   /* 311-320 */
-      {  0,  0,  0,  0,  0,  0,  9, -9,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  3,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0,  2, -4,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  5, -3,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  1 },
-      {  0,  0,  1, -1,  2,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -3,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  2 },
-      {  0,  0,  2,  0,  2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
-
-   /* 321-330 */
-      {  0,  0,  2,  0,  2,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  5,  0, -3,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  0 },
-      {  2,  0, -1, -1, -1,  0,  0, -1,  0,  3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  4, -3,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  5,-10,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  8,-13,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  2, -2,  1, -1,  0,  2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0,  2,  0,  0 },
-
-   /* 331-340 */
-      {  0,  0,  0,  0,  1,  0,  3, -5,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0, -2,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  9, -9,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2,  0,  2,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0, -8, 11,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0, -2,  0,  0,  2,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -1,  2,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  2, -6,  0,  0,  0,  0,  0, -2 },
-
-   /* 341-350 */
-      {  0,  0,  0,  0,  0,  0,  0,  8,-15,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -2,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  7,-13,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  3,  0,  0,  0,  2 },
-      {  0,  0,  2, -2,  1,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  8, -8,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  8,-10,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  0,  1 },
-
-   /* 351-360 */
-      {  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -4,  0,  0,  0,  0 },
-      {  2,  0,  0, -2, -1,  0,  0, -5,  6,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0,  0, -2 },
-      {  2,  0, -1, -1, -1,  0,  0,  3, -7,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0,  0 },
-      {  0,  0,  2,  0,  2,  0, -1,  1,  0,  0,  0,  0,  0,  0 },
-
-   /* 361-370 */
-      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  4, -3,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  6,-11,  0,  0,  0,  0,  0 },
-      {  2,  0,  0, -2,  1,  0,  0, -6,  8,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  1,  5,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  6, -5,  0,  0,  0,  0,  2 },
-      {  1,  0, -2, -2, -2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  2,  0,  0,  0, -2,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  2,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  1 },
-
-   /* 371-380 */
-      {  0,  0,  0,  0,  0,  0,  0,  6, -7,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  4,  0,  0, -2,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0,  0, -2,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  0,  1, -6,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  3, -5,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  7,-13,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -2,  0,  0,  0,  2 },
-
-   /* 381-390 */
-      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0,  2,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0, -8, 15,  0,  0,  0,  0,  0 },
-      {  2,  0,  0, -2, -2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
-      {  2,  0, -1, -1, -1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
-      {  1,  0,  2, -2,  2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-      {  1,  0, -1,  1, -1,  0,-18, 17,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2,  0,  2,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
-      {  0,  0,  2,  0,  2,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
-      {  0,  0,  2, -2, -1,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  2,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
-
-   /* 391-400 */
-      {  0,  0,  0,  0,  1,  0,  2, -2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  8,-16,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  2 },
-      {  0,  0,  0,  0,  2,  0,  0, -1,  2,  0,  0,  0,  0,  0 },
-      {  2,  0, -1, -1, -2,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0, -2,  4,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  2,  0,  0,  0,  0,  2 },
-      {  2,  0,  0, -2, -1,  0,  0, -2,  0,  4, -5,  0,  0,  0 },
-
-   /* 401-410 */
-      {  2,  0,  0, -2, -1,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
-      {  2,  0, -1, -1, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0, -1, -1,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
-      {  1,  0, -1, -1, -1,  0, 20,-20,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  1, -2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0, -2,  1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  5, -8,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0,  0,  0,  0, -1,  0,  0,  0 },
-
-   /* 411-420 */
-      {  0,  0,  0,  0,  0,  0,  9,-11,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  5, -3,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  6, -7,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -2,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0, -2,  0,  0,  0 },
-      {  0,  0,  1, -1,  2,  0,  0, -1,  0, -2,  5,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0,  0 },
-
-   /* 421-430 */
-      {  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -8,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2, -6,  0,  0,  0,  0, -2 },
-      {  1,  0,  0, -2,  0,  0, 20,-21,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  8,-12,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -4,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  2,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  8,-12,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  9,-17,  0,  0,  0,  0,  0 },
-
-   /* 431-440 */
-      {  0,  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  1,  5,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -6,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2, -7,  0,  0,  0,  0, -2 },
-      {  1,  0,  0, -1,  1,  0,  0, -3,  4,  0,  0,  0,  0,  0 },
-      {  1,  0, -2,  0, -2,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0, -9, 17,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  1, -4,  0,  0,  0,  0,  0, -2 },
-      {  1,  0, -2, -2, -2,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
-      {  1,  0, -1,  1, -1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-
-   /* 441-450 */
-      {  0,  0,  2, -2,  2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  2,  0,  0, -1,  0,  0,  1,  0,  0,  0 },
-      {  0,  0,  1, -1,  2,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0,  2, -2,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  5,-10,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  4,  0, -4,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0, -5,  0,  0,  0, -2 },
-
-   /* 451-460 */
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -5,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -2,  5,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -2,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  2, -3,  0,  0,  0,  0,  0,  1 },
-      {  1,  0,  0, -2,  0,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  3, -7,  4,  0,  0,  0,  0,  0 },
-      {  2,  0,  2,  0,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1, -1,  0,  0, -1,  0, -1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0,  1,  0, -2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0, -2 },
-
-   /* 461-470 */
-      {  1,  0,  0, -1,  1,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0, -3,  0,  3,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0, -5,  5,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  1, -3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -4,  6,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  0,  0, -1,  0,  0 },
-      {  0,  0,  1, -1,  1,  0, -5,  6,  0,  0,  0,  0,  0,  0 },
-
-   /* 471-480 */
-      {  0,  0,  0,  0,  1,  0,  3, -4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  7,-10,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  5, -5,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  3, -8,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  2, -5,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  7, -9,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  7, -8,  0,  0,  0,  0,  2 },
-
-   /* 481-490 */
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -8,  3,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -2,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  0,  2, -4,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0, -1 },
-      {  2,  0,  0, -2, -1,  0,  0, -6,  8,  0,  0,  0,  0,  0 },
-      {  2,  0, -1, -1,  1,  0,  0,  3, -7,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0, -7,  9,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0,  0, -1 },
-
-   /* 491-500 */
-      {  0,  0,  1, -1,  2,  0, -8, 12,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0,  0,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-      {  1,  0,  0, -2,  0,  0,  2, -2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  7, -8,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0 },
-      {  2,  0,  0, -2,  1,  0,  0, -5,  6,  0,  0,  0,  0,  0 },
-      {  2,  0,  0, -2, -1,  0,  0, -2,  0,  3, -1,  0,  0,  0 },
-      {  1,  0,  1,  1,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0, -2,  1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-      {  1,  0,  0, -2, -1,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-
-   /* 501-510 */
-      {  1,  0,  0, -1, -1,  0,  0, -3,  4,  0,  0,  0,  0,  0 },
-      {  1,  0, -1,  0, -1,  0, -3,  5,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0, -4,  4,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0, -2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0, -8, 11,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  0,  0,  0, -9, 13,  0,  0,  0,  0,  0 },
-      {  0,  0,  1,  1,  2,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0,  1, -4,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0,  0, -1,  0,  1, -3,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0,  7,-13,  0,  0,  0,  0,  0 },
-
-   /* 511-520 */
-      {  0,  0,  0,  0,  1,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  7,-11,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  6, -6,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  6, -4,  0,  0,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  4, -2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  3, -4,  0,  0,  0,  0,  0,  1 },
-
-   /* 521-530 */
-      {  0,  0,  0,  0,  0,  0,  1, -4,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  9,-17,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  7, -7,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -8,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  4, -7,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,  0,  0,  1 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -4,  0,  0,  0,  0 },
-      {  2,  0,  0, -2,  0,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
-
-   /* 531-540 */
-      {  2,  0,  0, -2,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0,  0,  0,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
-      {  1,  0,  0,  0,  0,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
-      {  1,  0,  0,  0,  0,  0, -1,  1,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0, -2,  0,  0, 17,-16,  0, -2,  0,  0,  0,  0 },
-      {  1,  0,  0, -1,  0,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  0,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -4,  0,  0,  0,  0 },
-
-   /* 541-550 */
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, -2, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  1,  0,  0,  0,  0,  2 },
-      {  2,  0,  0, -2,  0,  0,  0, -4,  4,  0,  0,  0,  0,  0 },
-      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  2,  2,  0,  0,  0 },
-      {  1,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0,  0,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
-      {  1,  0,  0,  0,  0,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0, -2,  0,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0, -2,  0,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
-      {  1,  0,  0, -2,  0,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
-
-   /* 551-560 */
-      {  1,  0,  0, -2,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  0,  0, -4,  4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1,  1,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0,  3, -6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0,  0, -2,  2,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0,  1,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0, -4,  5,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  2,  0,  0,  0, -1,  0,  1,  0,  0,  0,  0 },
-
-   /* 561-570 */
-      {  0,  0,  0,  0,  0,  0,  8, -9,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  3, -6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  3, -5,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -2,  0,  0,  0 },
-      {  2,  0, -2, -2, -2,  0,  0, -2,  0,  2,  0,  0,  0,  0 },
-      {  1,  0,  0,  0,  1,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0,  0, -1,  0,-10,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2,  0,  2,  0,  2, -3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2,  0,  2,  0,  2, -2,  0,  0,  0,  0,  0,  0 },
-
-   /* 571-580 */
-      {  0,  0,  2,  0,  2,  0, -2,  3,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2,  0,  2,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  2,  0,  0,  0,  0,  1,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0,  0, -1,  0,  2,  0,  0,  0,  0 },
-      {  2,  0,  2, -2,  2,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
-      {  2,  0,  1, -3,  1,  0, -6,  7,  0,  0,  0,  0,  0,  0 },
-      {  2,  0,  0, -2,  0,  0,  2, -5,  0,  0,  0,  0,  0,  0 },
-      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  5, -5,  0,  0,  0 },
-      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  1,  5,  0,  0,  0 },
-      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  0,  5,  0,  0,  0 },
-
-   /* 581-590 */
-      {  2,  0,  0, -2,  0,  0,  0, -2,  0,  0,  2,  0,  0,  0 },
-      {  2,  0,  0, -2,  0,  0, -4,  4,  0,  0,  0,  0,  0,  0 },
-      {  2,  0, -2,  0, -2,  0,  0,  5, -9,  0,  0,  0,  0,  0 },
-      {  2,  0, -1, -1,  0,  0,  0, -1,  0,  3,  0,  0,  0,  0 },
-      {  1,  0,  2,  0,  2,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  2,  0,  2,  0,  0,  4, -8,  3,  0,  0,  0,  0 },
-      {  1,  0,  2,  0,  2,  0,  0, -4,  8, -3,  0,  0,  0,  0 },
-      {  1,  0,  2,  0,  2,  0, -1,  1,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  2, -2,  2,  0, -3,  3,  0,  0,  0,  0,  0,  0 },
-      {  1,  0,  0,  0,  0,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
-
-   /* 591-600 */
-      {  1,  0,  0,  0,  0,  0,  0, -2,  0,  3,  0,  0,  0,  0 },
-      {  1,  0,  0, -2,  0,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
-      {  1,  0, -2, -2, -2,  0,  0,  1,  0, -1,  0,  0,  0,  0 },
-      {  1,  0, -1,  1,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-      {  1,  0, -1, -1,  0,  0,  0,  8,-15,  0,  0,  0,  0,  0 },
-      {  0,  0,  2,  2,  2,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  1, -1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0, -2,  0,  1,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  1,  0,  0,-10, 15,  0,  0,  0,  0,  0 },
-      {  0,  0,  2, -2,  0, -1,  0,  2,  0,  0,  0,  0,  0,  0 },
-
-   /* 601-610 */
-      {  0,  0,  1, -1,  2,  0,  0, -1,  0,  0, -1,  0,  0,  0 },
-      {  0,  0,  1, -1,  2,  0, -3,  4,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0, -4,  6,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  1,  0, -1,  2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0,  0, -1,  0,  0, -2,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1,  0,  0, -1,  0,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  1, -1, -1,  0, -5,  7,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  2,  0,  0,  0,  2,  0, -2,  0,  0,  0,  0 },
-
-   /* 611-620 */
-      {  0,  0,  0,  2,  0,  0, -2,  2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  2,  0, -3,  5,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  1,  0, -1,  2,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  9,-13,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  8,-14,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  8,-11,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  6, -8,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  6, -7,  0,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0, -2 },
-
-   /* 621-630 */
-      {  0,  0,  0,  0,  0,  0,  5, -6, -4,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  5, -4,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  4, -8,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  4, -5,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  3, -3,  0,  2,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  3, -1,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  7,-12,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  6, -9,  0,  0,  0,  0, -2 },
-
-   /* 631-640 */
-      {  0,  0,  0,  0,  0,  0,  0,  6, -8,  1,  5,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  6, -4,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  6,-10,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  5,  0, -4,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -9,  0,  0,  0,  0, -1 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -8,  3,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -7,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  5, -6,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  5,-16,  4,  5,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  5,-13,  0,  0,  0,  0, -2 },
-
-   /* 641-650 */
-      {  0,  0,  0,  0,  0,  0,  0,  3,  0, -5,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -9,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  3, -7,  0,  0,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, -3,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  2, -8,  1,  5,  0,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  1, -5,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  2,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, -3,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  1,  0, -3,  5,  0,  0,  0 },
-
-   /* 651-NFPL */
-      {  0,  0,  0,  0,  0,  0,  0,  1, -3,  0,  0,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, -6,  3,  0, -2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, -2,  0,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2 },
-      {  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0 }
-   };
-
-/* Number of frequencies:  planetary */
-   static const int NFPL = (int) (sizeof mfapl / sizeof (int) / 14);
-
-/* Pointers into amplitudes array, one pointer per frequency */
-   static const int nc[] = {
-
-   /* 1-100 */
-       1,    21,    37,    51,    65,    79,    91,   103,   115,   127,
-     139,   151,   163,   172,   184,   196,   207,   219,   231,   240,
-     252,   261,   273,   285,   297,   309,   318,   327,   339,   351,
-     363,   372,   384,   396,   405,   415,   423,   435,   444,   452,
-     460,   467,   474,   482,   490,   498,   506,   513,   521,   528,
-     536,   543,   551,   559,   566,   574,   582,   590,   597,   605,
-     613,   620,   628,   636,   644,   651,   658,   666,   674,   680,
-     687,   695,   702,   710,   717,   725,   732,   739,   746,   753,
-     760,   767,   774,   782,   790,   798,   805,   812,   819,   826,
-     833,   840,   846,   853,   860,   867,   874,   881,   888,   895,
-
-   /* 101-200 */
-     901,   908,   914,   921,   928,   934,   941,   948,   955,   962,
-     969,   976,   982,   989,   996,  1003,  1010,  1017,  1024,  1031,
-    1037,  1043,  1050,  1057,  1064,  1071,  1078,  1084,  1091,  1098,
-    1104,  1112,  1118,  1124,  1131,  1138,  1145,  1151,  1157,  1164,
-    1171,  1178,  1185,  1192,  1199,  1205,  1212,  1218,  1226,  1232,
-    1239,  1245,  1252,  1259,  1266,  1272,  1278,  1284,  1292,  1298,
-    1304,  1310,  1316,  1323,  1329,  1335,  1341,  1347,  1353,  1359,
-    1365,  1371,  1377,  1383,  1389,  1396,  1402,  1408,  1414,  1420,
-    1426,  1434,  1440,  1446,  1452,  1459,  1465,  1471,  1477,  1482,
-    1488,  1493,  1499,  1504,  1509,  1514,  1520,  1527,  1532,  1538,
-
-   /* 201-300 */
-    1543,  1548,  1553,  1558,  1564,  1569,  1574,  1579,  1584,  1589,
-    1594,  1596,  1598,  1600,  1602,  1605,  1608,  1610,  1612,  1617,
-    1619,  1623,  1625,  1627,  1629,  1632,  1634,  1640,  1642,  1644,
-    1646,  1648,  1650,  1652,  1654,  1658,  1660,  1662,  1664,  1668,
-    1670,  1672,  1673,  1675,  1679,  1681,  1683,  1684,  1686,  1688,
-    1690,  1693,  1695,  1697,  1701,  1703,  1705,  1707,  1709,  1711,
-    1712,  1715,  1717,  1721,  1723,  1725,  1727,  1729,  1731,  1733,
-    1735,  1737,  1739,  1741,  1743,  1745,  1747,  1749,  1751,  1753,
-    1755,  1757,  1759,  1761,  1762,  1764,  1766,  1768,  1769,  1771,
-    1773,  1775,  1777,  1779,  1781,  1783,  1785,  1787,  1788,  1790,
-
-   /* 301-400 */
-    1792,  1794,  1796,  1798,  1800,  1802,  1804,  1806,  1807,  1809,
-    1811,  1815,  1817,  1819,  1821,  1823,  1825,  1827,  1829,  1831,
-    1833,  1835,  1837,  1839,  1840,  1842,  1844,  1848,  1850,  1852,
-    1854,  1856,  1858,  1859,  1860,  1862,  1864,  1866,  1868,  1869,
-    1871,  1873,  1875,  1877,  1879,  1881,  1883,  1885,  1887,  1889,
-    1891,  1892,  1896,  1898,  1900,  1901,  1903,  1905,  1907,  1909,
-    1910,  1911,  1913,  1915,  1919,  1921,  1923,  1927,  1929,  1931,
-    1933,  1935,  1937,  1939,  1943,  1945,  1947,  1948,  1949,  1951,
-    1953,  1955,  1957,  1958,  1960,  1962,  1964,  1966,  1968,  1970,
-    1971,  1973,  1974,  1975,  1977,  1979,  1980,  1981,  1982,  1984,
-
-   /* 401-500 */
-    1986,  1988,  1990,  1992,  1994,  1995,  1997,  1999,  2001,  2003,
-    2005,  2007,  2008,  2009,  2011,  2013,  2015,  2017,  2019,  2021,
-    2023,  2024,  2025,  2027,  2029,  2031,  2033,  2035,  2037,  2041,
-    2043,  2045,  2046,  2047,  2049,  2051,  2053,  2055,  2056,  2057,
-    2059,  2061,  2063,  2065,  2067,  2069,  2070,  2071,  2072,  2074,
-    2076,  2078,  2080,  2082,  2084,  2086,  2088,  2090,  2092,  2094,
-    2095,  2096,  2097,  2099,  2101,  2105,  2106,  2107,  2108,  2109,
-    2110,  2111,  2113,  2115,  2119,  2121,  2123,  2125,  2127,  2129,
-    2131,  2133,  2135,  2136,  2137,  2139,  2141,  2143,  2145,  2147,
-    2149,  2151,  2153,  2155,  2157,  2159,  2161,  2163,  2165,  2167,
-
-   /* 501-600 */
-    2169,  2171,  2173,  2175,  2177,  2179,  2181,  2183,  2185,  2186,
-    2187,  2188,  2192,  2193,  2195,  2197,  2199,  2201,  2203,  2205,
-    2207,  2209,  2211,  2213,  2217,  2219,  2221,  2223,  2225,  2227,
-    2229,  2231,  2233,  2234,  2235,  2236,  2237,  2238,  2239,  2240,
-    2241,  2244,  2246,  2248,  2250,  2252,  2254,  2256,  2258,  2260,
-    2262,  2264,  2266,  2268,  2270,  2272,  2274,  2276,  2278,  2280,
-    2282,  2284,  2286,  2288,  2290,  2292,  2294,  2296,  2298,  2300,
-    2302,  2303,  2304,  2305,  2306,  2307,  2309,  2311,  2313,  2315,
-    2317,  2319,  2321,  2323,  2325,  2327,  2329,  2331,  2333,  2335,
-    2337,  2341,  2343,  2345,  2347,  2349,  2351,  2352,  2355,  2356,
-
-   /* 601-700 */
-    2357,  2358,  2359,  2361,  2363,  2364,  2365,  2366,  2367,  2368,
-    2369,  2370,  2371,  2372,  2373,  2374,  2376,  2378,  2380,  2382,
-    2384,  2385,  2386,  2387,  2388,  2389,  2390,  2391,  2392,  2393,
-    2394,  2395,  2396,  2397,  2398,  2399,  2400,  2401,  2402,  2403,
-    2404,  2405,  2406,  2407,  2408,  2409,  2410,  2411,  2412,  2413,
-    2414,  2415,  2417,  2418,  2430,  2438,  2445,  2453,  2460,  2468,
-    2474,  2480,  2488,  2496,  2504,  2512,  2520,  2527,  2535,  2543,
-    2550,  2558,  2566,  2574,  2580,  2588,  2596,  2604,  2612,  2619,
-    2627,  2634,  2642,  2648,  2656,  2664,  2671,  2679,  2685,  2693,
-    2701,  2709,  2717,  2725,  2733,  2739,  2747,  2753,  2761,  2769,
-
-   /* 701-800 */
-    2777,  2785,  2793,  2801,  2809,  2817,  2825,  2833,  2841,  2848,
-    2856,  2864,  2872,  2878,  2884,  2892,  2898,  2906,  2914,  2922,
-    2930,  2938,  2944,  2952,  2958,  2966,  2974,  2982,  2988,  2996,
-    3001,  3009,  3017,  3025,  3032,  3039,  3045,  3052,  3059,  3067,
-    3069,  3076,  3083,  3090,  3098,  3105,  3109,  3111,  3113,  3120,
-    3124,  3128,  3132,  3136,  3140,  3144,  3146,  3150,  3158,  3161,
-    3165,  3166,  3168,  3172,  3176,  3180,  3182,  3185,  3189,  3193,
-    3194,  3197,  3200,  3204,  3208,  3212,  3216,  3219,  3221,  3222,
-    3226,  3230,  3234,  3238,  3242,  3243,  3247,  3251,  3254,  3258,
-    3262,  3266,  3270,  3274,  3275,  3279,  3283,  3287,  3289,  3293,
-
-   /* 801-900 */
-    3296,  3300,  3303,  3307,  3311,  3315,  3319,  3321,  3324,  3327,
-    3330,  3334,  3338,  3340,  3342,  3346,  3350,  3354,  3358,  3361,
-    3365,  3369,  3373,  3377,  3381,  3385,  3389,  3393,  3394,  3398,
-    3402,  3406,  3410,  3413,  3417,  3421,  3425,  3429,  3433,  3435,
-    3439,  3443,  3446,  3450,  3453,  3457,  3458,  3461,  3464,  3468,
-    3472,  3476,  3478,  3481,  3485,  3489,  3493,  3497,  3501,  3505,
-    3507,  3511,  3514,  3517,  3521,  3524,  3525,  3527,  3529,  3533,
-    3536,  3540,  3541,  3545,  3548,  3551,  3555,  3559,  3563,  3567,
-    3569,  3570,  3574,  3576,  3578,  3582,  3586,  3590,  3593,  3596,
-    3600,  3604,  3608,  3612,  3616,  3620,  3623,  3626,  3630,  3632,
-
-   /* 901-1000 */
-    3636,  3640,  3643,  3646,  3648,  3652,  3656,  3660,  3664,  3667,
-    3669,  3671,  3675,  3679,  3683,  3687,  3689,  3693,  3694,  3695,
-    3699,  3703,  3705,  3707,  3710,  3713,  3717,  3721,  3725,  3729,
-    3733,  3736,  3740,  3744,  3748,  3752,  3754,  3757,  3759,  3763,
-    3767,  3770,  3773,  3777,  3779,  3783,  3786,  3790,  3794,  3798,
-    3801,  3805,  3809,  3813,  3817,  3821,  3825,  3827,  3831,  3835,
-    3836,  3837,  3840,  3844,  3848,  3852,  3856,  3859,  3863,  3867,
-    3869,  3871,  3875,  3879,  3883,  3887,  3890,  3894,  3898,  3901,
-    3905,  3909,  3913,  3917,  3921,  3922,  3923,  3924,  3926,  3930,
-    3932,  3936,  3938,  3940,  3944,  3948,  3952,  3956,  3959,  3963,
-
-   /* 1001-1100 */
-    3965,  3969,  3973,  3977,  3979,  3981,  3982,  3986,  3989,  3993,
-    3997,  4001,  4004,  4006,  4009,  4012,  4016,  4020,  4024,  4026,
-    4028,  4032,  4036,  4040,  4044,  4046,  4050,  4054,  4058,  4060,
-    4062,  4063,  4064,  4068,  4071,  4075,  4077,  4081,  4083,  4087,
-    4089,  4091,  4095,  4099,  4101,  4103,  4105,  4107,  4111,  4115,
-    4119,  4123,  4127,  4129,  4131,  4135,  4139,  4141,  4143,  4145,
-    4149,  4153,  4157,  4161,  4165,  4169,  4173,  4177,  4180,  4183,
-    4187,  4191,  4195,  4198,  4201,  4205,  4209,  4212,  4213,  4216,
-    4217,  4221,  4223,  4226,  4230,  4234,  4236,  4240,  4244,  4248,
-    4252,  4256,  4258,  4262,  4264,  4266,  4268,  4270,  4272,  4276,
-
-   /* 1101-1200 */
-    4279,  4283,  4285,  4287,  4289,  4293,  4295,  4299,  4300,  4301,
-    4305,  4309,  4313,  4317,  4319,  4323,  4325,  4329,  4331,  4333,
-    4335,  4337,  4341,  4345,  4349,  4351,  4353,  4357,  4361,  4365,
-    4367,  4369,  4373,  4377,  4381,  4383,  4387,  4389,  4391,  4395,
-    4399,  4403,  4407,  4411,  4413,  4414,  4415,  4418,  4419,  4421,
-    4423,  4427,  4429,  4431,  4433,  4435,  4437,  4439,  4443,  4446,
-    4450,  4452,  4456,  4458,  4460,  4462,  4466,  4469,  4473,  4477,
-    4481,  4483,  4487,  4489,  4491,  4493,  4497,  4499,  4501,  4504,
-    4506,  4510,  4513,  4514,  4515,  4518,  4521,  4522,  4525,  4526,
-    4527,  4530,  4533,  4534,  4537,  4541,  4542,  4543,  4544,  4545,
-
-   /* 1201-1300 */
-    4546,  4547,  4550,  4553,  4554,  4555,  4558,  4561,  4564,  4567,
-    4568,  4571,  4574,  4575,  4578,  4581,  4582,  4585,  4586,  4588,
-    4590,  4592,  4596,  4598,  4602,  4604,  4608,  4612,  4613,  4616,
-    4619,  4622,  4623,  4624,  4625,  4626,  4629,  4632,  4633,  4636,
-    4639,  4640,  4641,  4642,  4643,  4644,  4645,  4648,  4649,  4650,
-    4651,  4652,  4653,  4656,  4657,  4660,  4661,  4664,  4667,  4670,
-    4671,  4674,  4675,  4676,  4677,  4678,  4681,  4682,  4683,  4684,
-    4687,  4688,  4689,  4692,  4693,  4696,  4697,  4700,  4701,  4702,
-    4703,  4704,  4707,  4708,  4711,  4712,  4715,  4716,  4717,  4718,
-    4719,  4720,  4721,  4722,  4723,  4726,  4729,  4730,  4733,  4736,
-
-   /* 1301-(NFLS+NFPL) */
-    4737,  4740,  4741,  4742,  4745,  4746,  4749,  4752,  4753
-   };
-
-/* Amplitude coefficients (microarcsec);  indexed using the nc array. */
-   static const double a[] = {
-
-   /* 1-105 */
-         -6844318.44,     9205236.26,1328.67,1538.18,      205833.11,
-           153041.79,       -3309.73, 853.32,2037.98,       -2301.27,
-       81.46, 120.56, -20.39, -15.22,   1.73,  -1.61,  -0.10,   0.11,
-       -0.02,  -0.02,     -523908.04,      573033.42,-544.75,-458.66,
-            12814.01,       11714.49, 198.97,-290.91, 155.74,-143.27,
-       -2.75,  -1.03,  -1.27,  -1.16,   0.00,  -0.01,      -90552.22,
-            97846.69, 111.23, 137.41,2187.91,2024.68,  41.44, -51.26,
-       26.92, -24.46,  -0.46,  -0.28,  -0.22,  -0.20,       82168.76,
-           -89618.24, -27.64, -29.05,       -2004.36,       -1837.32,
-      -36.07,  48.00, -24.43,  22.41,   0.47,   0.24,   0.20,   0.18,
-            58707.02,7387.02, 470.05,-192.40, 164.33,       -1312.21,
-     -179.73, -28.93, -17.36,  -1.83,  -0.50,   3.57,   0.00,   0.13,
-           -20557.78,       22438.42, -20.84, -17.40, 501.82, 459.68,
-       59.20, -67.30,   6.08,  -5.61,  -1.36,  -1.19,       28288.28,
-     -674.99, -34.69,  35.80, -15.07,-632.54, -11.19,   0.78,  -8.41,
-        0.17,   0.01,   0.07,      -15406.85,       20069.50,  15.12,
-
-   /* 106-219 */
-       31.80, 448.76, 344.50,  -5.77,   1.41,   4.59,  -5.02,   0.17,
-        0.24,      -11991.74,       12902.66,  32.46,  36.70, 288.49,
-      268.14,   5.70,  -7.06,   3.57,  -3.23,  -0.06,  -0.04,
-            -8584.95,       -9592.72,   4.42, -13.20,-214.50, 192.06,
-       23.87,  29.83,   2.54,   2.40,   0.60,  -0.48,5095.50,
-            -6918.22,   7.19,   3.92,-154.91,-113.94,   2.86,  -1.04,
-       -1.52,   1.73,  -0.07,  -0.10,       -4910.93,       -5331.13,
-        0.76,   0.40,-119.21, 109.81,   2.16,   3.20,   1.46,   1.33,
-        0.04,  -0.02,       -6245.02,-123.48,  -6.68,  -8.20,  -2.76,
-      139.64,   2.71,   0.15,   1.86,2511.85,       -3323.89,   1.07,
-       -0.90, -74.33, -56.17,   1.16,  -0.01,  -0.75,   0.83,  -0.02,
-       -0.04,2307.58,3143.98,  -7.52,   7.50,  70.31, -51.60,   1.46,
-        0.16,  -0.69,  -0.79,   0.02,  -0.05,2372.58,2554.51,   5.93,
-       -6.60,  57.12, -53.05,  -0.96,  -1.24,  -0.71,  -0.64,  -0.01,
-            -2053.16,2636.13,   5.13,   7.80,  58.94,  45.91,  -0.42,
-       -0.12,   0.61,  -0.66,   0.02,   0.03,       -1825.49,
-
-   /* 220-339 */
-            -2423.59,   1.23,  -2.00, -54.19,  40.82,  -1.07,  -1.02,
-        0.54,   0.61,  -0.04,   0.04,2521.07,-122.28,  -5.97,   2.90,
-       -2.73, -56.37,  -0.82,   0.13,  -0.75,       -1534.09,1645.01,
-        6.29,   6.80,  36.78,  34.30,   0.92,  -1.25,   0.46,  -0.41,
-       -0.02,  -0.01,1898.27,  47.70,  -0.72,   2.50,   1.07, -42.45,
-       -0.94,   0.02,  -0.56,       -1292.02,       -1387.00,   0.00,
-        0.00, -31.01,  28.89,   0.68,   0.00,   0.38,   0.35,  -0.01,
-       -0.01,       -1234.96,1323.81,   5.21,   5.90,  29.60,  27.61,
-        0.74,  -1.22,   0.37,  -0.33,  -0.02,  -0.01,1137.48,
-            -1233.89,  -0.04,  -0.30, -27.59, -25.43,  -0.61,   1.00,
-       -0.34,   0.31,   0.01,   0.01,-813.13,       -1075.60,   0.40,
-        0.30, -24.05,  18.18,  -0.40,  -0.01,   0.24,   0.27,  -0.01,
-        0.01,1163.22, -60.90,  -2.94,   1.30,  -1.36, -26.01,  -0.58,
-        0.07,  -0.35,1029.70, -55.55,  -2.63,   1.10,  -1.25, -23.02,
-       -0.52,   0.06,  -0.31,-556.26, 852.85,   3.16,  -4.48,  19.06,
-       12.44,  -0.81,  -0.27,   0.17,  -0.21,   0.00,   0.02,-603.52,
-
-   /* 340-467 */
-     -800.34,   0.44,   0.10, -17.90,  13.49,  -0.08,  -0.01,   0.18,
-        0.20,  -0.01,   0.01,-628.24, 684.99,  -0.64,  -0.50,  15.32,
-       14.05,   3.18,  -4.19,   0.19,  -0.17,  -0.09,  -0.07,-866.48,
-      -16.26,   0.52,  -1.30,  -0.36,  19.37,   0.43,  -0.01,   0.26,
-     -512.37, 695.54,  -1.47,  -1.40,  15.55,  11.46,  -0.16,   0.03,
-        0.15,  -0.17,   0.01,   0.01, 506.65, 643.75,   2.54,  -2.62,
-       14.40, -11.33,  -0.77,  -0.06,  -0.15,  -0.16,   0.00,   0.01,
-      664.57,  16.81,  -0.40,   1.00,   0.38, -14.86,  -3.71,  -0.09,
-       -0.20, 405.91, 522.11,   0.99,  -1.50,  11.67,  -9.08,  -0.25,
-       -0.02,  -0.12,  -0.13,-305.78, 326.60,   1.75,   1.90,   7.30,
-        6.84,   0.20,  -0.04, 300.99,-325.03,  -0.44,  -0.50,  -7.27,
-       -6.73,  -1.01,   0.01,   0.00,   0.08,   0.00,   0.02, 438.51,
-       10.47,  -0.56,  -0.20,   0.24,  -9.81,  -0.24,   0.01,  -0.13,
-     -264.02, 335.24,   0.99,   1.40,   7.49,   5.90,  -0.27,  -0.02,
-      284.09, 307.03,   0.32,  -0.40,   6.87,  -6.35,  -0.99,  -0.01,
-     -250.54, 327.11,   0.08,   0.40,   7.31,   5.60,  -0.30, 230.72,
-
-   /* 468-595 */
-     -304.46,   0.08,  -0.10,  -6.81,  -5.16,   0.27, 229.78, 304.17,
-       -0.60,   0.50,   6.80,  -5.14,   0.33,   0.01, 256.30,-276.81,
-       -0.28,  -0.40,  -6.19,  -5.73,  -0.14,   0.01,-212.82, 269.45,
-        0.84,   1.20,   6.02,   4.76,   0.14,  -0.02, 196.64, 272.05,
-       -0.84,   0.90,   6.08,  -4.40,   0.35,   0.02, 188.95, 272.22,
-       -0.12,   0.30,   6.09,  -4.22,   0.34,-292.37,  -5.10,  -0.32,
-       -0.40,  -0.11,   6.54,   0.14,   0.01, 161.79,-220.67,   0.24,
-        0.10,  -4.93,  -3.62,  -0.08, 261.54, -19.94,  -0.95,   0.20,
-       -0.45,  -5.85,  -0.13,   0.02, 142.16,-190.79,   0.20,   0.10,
-       -4.27,  -3.18,  -0.07, 187.95,  -4.11,  -0.24,   0.30,  -0.09,
-       -4.20,  -0.09,   0.01,   0.00,   0.00, -79.08, 167.90,   0.04,
-        0.00,   3.75,   1.77, 121.98, 131.04,  -0.08,   0.10,   2.93,
-       -2.73,  -0.06,-172.95,  -8.11,  -0.40,  -0.20,  -0.18,   3.87,
-        0.09,   0.01,-160.15, -55.30, -14.04,  13.90,  -1.23,   3.58,
-        0.40,   0.31,-115.40, 123.20,   0.60,   0.70,   2.75,   2.58,
-        0.08,  -0.01,-168.26,  -2.00,   0.20,  -0.20,  -0.04,   3.76,
-
-   /* 596-723 */
-        0.08,-114.49, 123.20,   0.32,   0.40,   2.75,   2.56,   0.07,
-       -0.01, 112.14, 120.70,   0.28,  -0.30,   2.70,  -2.51,  -0.07,
-       -0.01, 161.34,   4.03,   0.20,   0.20,   0.09,  -3.61,  -0.08,
-       91.31, 126.64,  -0.40,   0.40,   2.83,  -2.04,  -0.04,   0.01,
-      105.29, 112.90,   0.44,  -0.50,   2.52,  -2.35,  -0.07,  -0.01,
-       98.69,-106.20,  -0.28,  -0.30,  -2.37,  -2.21,  -0.06,   0.01,
-       86.74,-112.94,  -0.08,  -0.20,  -2.53,  -1.94,  -0.05,-134.81,
-        3.51,   0.20,  -0.20,   0.08,   3.01,   0.07,  79.03, 107.31,
-       -0.24,   0.20,   2.40,  -1.77,  -0.04,   0.01, 132.81, -10.77,
-       -0.52,   0.10,  -0.24,  -2.97,  -0.07,   0.01,-130.31,  -0.90,
-        0.04,   0.00,   0.00,   2.91, -78.56,  85.32,   0.00,   0.00,
-        1.91,   1.76,   0.04,   0.00,   0.00, -41.53,  89.10,   0.02,
-        0.00,   1.99,   0.93,  66.03, -71.00,  -0.20,  -0.20,  -1.59,
-       -1.48,  -0.04,  60.50,  64.70,   0.36,  -0.40,   1.45,  -1.35,
-       -0.04,  -0.01, -52.27, -70.01,   0.00,   0.00,  -1.57,   1.17,
-        0.03, -52.95,  66.29,   0.32,   0.40,   1.48,   1.18,   0.04,
-
-   /* 724-851 */
-       -0.01,  51.02,  67.25,   0.00,   0.00,   1.50,  -1.14,  -0.03,
-      -55.66, -60.92,   0.16,  -0.20,  -1.36,   1.24,   0.03, -54.81,
-      -59.20,  -0.08,   0.20,  -1.32,   1.23,   0.03,  51.32, -55.60,
-        0.00,   0.00,  -1.24,  -1.15,  -0.03,  48.29,  51.80,   0.20,
-       -0.20,   1.16,  -1.08,  -0.03, -45.59, -49.00,  -0.12,   0.10,
-       -1.10,   1.02,   0.03,  40.54, -52.69,  -0.04,  -0.10,  -1.18,
-       -0.91,  -0.02, -40.58, -49.51,  -1.00,   1.00,  -1.11,   0.91,
-        0.04,   0.02, -43.76,  46.50,   0.36,   0.40,   1.04,   0.98,
-        0.03,  -0.01,  62.65,  -5.00,  -0.24,   0.00,  -0.11,  -1.40,
-       -0.03,   0.01, -38.57,  49.59,   0.08,   0.10,   1.11,   0.86,
-        0.02, -33.22, -44.04,   0.08,  -0.10,  -0.98,   0.74,   0.02,
-       37.15, -39.90,  -0.12,  -0.10,  -0.89,  -0.83,  -0.02,  36.68,
-      -39.50,  -0.04,  -0.10,  -0.88,  -0.82,  -0.02, -53.22,  -3.91,
-       -0.20,   0.00,  -0.09,   1.19,   0.03,  32.43, -42.19,  -0.04,
-       -0.10,  -0.94,  -0.73,  -0.02, -51.00,  -2.30,  -0.12,  -0.10,
-        0.00,   1.14, -29.53, -39.11,   0.04,   0.00,  -0.87,   0.66,
-
-   /* 852-979 */
-        0.02,  28.50, -38.92,  -0.08,  -0.10,  -0.87,  -0.64,  -0.02,
-       26.54,  36.95,  -0.12,   0.10,   0.83,  -0.59,  -0.01,  26.54,
-       34.59,   0.04,  -0.10,   0.77,  -0.59,  -0.02,  28.35, -32.55,
-       -0.16,   0.20,  -0.73,  -0.63,  -0.01, -28.00,  30.40,   0.00,
-        0.00,   0.68,   0.63,   0.01, -27.61,  29.40,   0.20,   0.20,
-        0.66,   0.62,   0.02,  40.33,   0.40,  -0.04,   0.10,   0.00,
-       -0.90, -23.28,  31.61,  -0.08,  -0.10,   0.71,   0.52,   0.01,
-       37.75,   0.80,   0.04,   0.10,   0.00,  -0.84,  23.66,  25.80,
-        0.00,   0.00,   0.58,  -0.53,  -0.01,  21.01, -27.91,   0.00,
-        0.00,  -0.62,  -0.47,  -0.01, -34.81,   2.89,   0.04,   0.00,
-        0.00,   0.78, -23.49, -25.31,   0.00,   0.00,  -0.57,   0.53,
-        0.01, -23.47,  25.20,   0.16,   0.20,   0.56,   0.52,   0.02,
-       19.58,  27.50,  -0.12,   0.10,   0.62,  -0.44,  -0.01, -22.67,
-      -24.40,  -0.08,   0.10,  -0.55,   0.51,   0.01, -19.97,  25.00,
-        0.12,   0.20,   0.56,   0.45,   0.01,  21.28, -22.80,  -0.08,
-       -0.10,  -0.51,  -0.48,  -0.01, -30.47,   0.91,   0.04,   0.00,
-
-   /* 980-1107 */
-        0.00,   0.68,  18.58,  24.00,   0.04,  -0.10,   0.54,  -0.42,
-       -0.01, -18.02,  24.40,  -0.04,  -0.10,   0.55,   0.40,   0.01,
-       17.74,  22.50,   0.08,  -0.10,   0.50,  -0.40,  -0.01, -19.41,
-       20.70,   0.08,   0.10,   0.46,   0.43,   0.01, -18.64,  20.11,
-        0.00,   0.00,   0.45,   0.42,   0.01, -16.75,  21.60,   0.04,
-        0.10,   0.48,   0.37,   0.01, -18.42, -20.00,   0.00,   0.00,
-       -0.45,   0.41,   0.01, -26.77,   1.41,   0.08,   0.00,   0.00,
-        0.60, -26.17,  -0.19,   0.00,   0.00,   0.00,   0.59, -15.52,
-       20.51,   0.00,   0.00,   0.46,   0.35,   0.01, -25.42,  -1.91,
-       -0.08,   0.00,  -0.04,   0.57,   0.45, -17.42,  18.10,   0.00,
-        0.00,   0.40,   0.39,   0.01,  16.39, -17.60,  -0.08,  -0.10,
-       -0.39,  -0.37,  -0.01, -14.37,  18.91,   0.00,   0.00,   0.42,
-        0.32,   0.01,  23.39,  -2.40,  -0.12,   0.00,   0.00,  -0.52,
-       14.32, -18.50,  -0.04,  -0.10,  -0.41,  -0.32,  -0.01,  15.69,
-       17.08,   0.00,   0.00,   0.38,  -0.35,  -0.01, -22.99,   0.50,
-        0.04,   0.00,   0.00,   0.51,   0.00,   0.00,  14.47, -17.60,
-
-   /* 1108-1235 */
-       -0.01,   0.00,  -0.39,  -0.32, -13.33,  18.40,  -0.04,  -0.10,
-        0.41,   0.30,  22.47,  -0.60,  -0.04,   0.00,   0.00,  -0.50,
-      -12.78, -17.41,   0.04,   0.00,  -0.39,   0.29,   0.01, -14.10,
-      -15.31,   0.04,   0.00,  -0.34,   0.32,   0.01,  11.98,  16.21,
-       -0.04,   0.00,   0.36,  -0.27,  -0.01,  19.65,  -1.90,  -0.08,
-        0.00,   0.00,  -0.44,  19.61,  -1.50,  -0.08,   0.00,   0.00,
-       -0.44,  13.41, -14.30,  -0.04,  -0.10,  -0.32,  -0.30,  -0.01,
-      -13.29,  14.40,   0.00,   0.00,   0.32,   0.30,   0.01,  11.14,
-      -14.40,  -0.04,   0.00,  -0.32,  -0.25,  -0.01,  12.24, -13.38,
-        0.04,   0.00,  -0.30,  -0.27,  -0.01,  10.07, -13.81,   0.04,
-        0.00,  -0.31,  -0.23,  -0.01,  10.46,  13.10,   0.08,  -0.10,
-        0.29,  -0.23,  -0.01,  16.55,  -1.71,  -0.08,   0.00,   0.00,
-       -0.37,   9.75, -12.80,   0.00,   0.00,  -0.29,  -0.22,  -0.01,
-        9.11,  12.80,   0.00,   0.00,   0.29,  -0.20,   0.00,   0.00,
-       -6.44, -13.80,   0.00,   0.00,  -0.31,   0.14,  -9.19, -12.00,
-        0.00,   0.00,  -0.27,   0.21, -10.30,  10.90,   0.08,   0.10,
-
-   /* 1236-1363 */
-        0.24,   0.23,   0.01,  14.92,  -0.80,  -0.04,   0.00,   0.00,
-       -0.33,  10.02, -10.80,   0.00,   0.00,  -0.24,  -0.22,  -0.01,
-       -9.75,  10.40,   0.04,   0.00,   0.23,   0.22,   0.01,   9.67,
-      -10.40,  -0.04,   0.00,  -0.23,  -0.22,  -0.01,  -8.28, -11.20,
-        0.04,   0.00,  -0.25,   0.19,  13.32,  -1.41,  -0.08,   0.00,
-        0.00,  -0.30,   8.27,  10.50,   0.04,   0.00,   0.23,  -0.19,
-        0.00,   0.00,  13.13,   0.00,   0.00,   0.00,   0.00,  -0.29,
-      -12.93,   0.70,   0.04,   0.00,   0.00,   0.29,   7.91, -10.20,
-        0.00,   0.00,  -0.23,  -0.18,  -7.84, -10.00,  -0.04,   0.00,
-       -0.22,   0.18,   7.44,   9.60,   0.00,   0.00,   0.21,  -0.17,
-       -7.64,   9.40,   0.08,   0.10,   0.21,   0.17,   0.01, -11.38,
-        0.60,   0.04,   0.00,   0.00,   0.25,  -7.48,   8.30,   0.00,
-        0.00,   0.19,   0.17, -10.98,  -0.20,   0.00,   0.00,   0.00,
-        0.25,  10.98,   0.20,   0.00,   0.00,   0.00,  -0.25,   7.40,
-       -7.90,  -0.04,   0.00,  -0.18,  -0.17,  -6.09,   8.40,  -0.04,
-        0.00,   0.19,   0.14,  -6.94,  -7.49,   0.00,   0.00,  -0.17,
-
-   /* 1364-1491 */
-        0.16,   6.92,   7.50,   0.04,   0.00,   0.17,  -0.15,   6.20,
-        8.09,   0.00,   0.00,   0.18,  -0.14,  -6.12,   7.80,   0.04,
-        0.00,   0.17,   0.14,   5.85,  -7.50,   0.00,   0.00,  -0.17,
-       -0.13,  -6.48,   6.90,   0.08,   0.10,   0.15,   0.14,   0.01,
-        6.32,   6.90,   0.00,   0.00,   0.15,  -0.14,   5.61,  -7.20,
-        0.00,   0.00,  -0.16,  -0.13,   9.07,   0.00,   0.00,   0.00,
-        0.00,  -0.20,   5.25,   6.90,   0.00,   0.00,   0.15,  -0.12,
-       -8.47,  -0.40,   0.00,   0.00,   0.00,   0.19,   6.32,  -5.39,
-       -1.11,   1.10,  -0.12,  -0.14,   0.02,   0.02,   5.73,  -6.10,
-       -0.04,   0.00,  -0.14,  -0.13,   4.70,   6.60,  -0.04,   0.00,
-        0.15,  -0.11,  -4.90,  -6.40,   0.00,   0.00,  -0.14,   0.11,
-       -5.33,   5.60,   0.04,   0.10,   0.13,   0.12,   0.01,  -4.81,
-        6.00,   0.04,   0.00,   0.13,   0.11,   5.13,   5.50,   0.04,
-        0.00,   0.12,  -0.11,   4.50,   5.90,   0.00,   0.00,   0.13,
-       -0.10,  -4.22,   6.10,   0.00,   0.00,   0.14,  -4.53,   5.70,
-        0.00,   0.00,   0.13,   0.10,   4.18,   5.70,   0.00,   0.00,
-
-   /* 1492-1619 */
-        0.13,  -4.75,  -5.19,   0.00,   0.00,  -0.12,   0.11,  -4.06,
-        5.60,   0.00,   0.00,   0.13,  -3.98,   5.60,  -0.04,   0.00,
-        0.13,   4.02,  -5.40,   0.00,   0.00,  -0.12,   4.49,  -4.90,
-       -0.04,   0.00,  -0.11,  -0.10,  -3.62,  -5.40,  -0.16,   0.20,
-       -0.12,   0.00,   0.01,   4.38,   4.80,   0.00,   0.00,   0.11,
-       -6.40,  -0.10,   0.00,   0.00,   0.00,   0.14,  -3.98,   5.00,
-        0.04,   0.00,   0.11,  -3.82,  -5.00,   0.00,   0.00,  -0.11,
-       -3.71,   5.07,   0.00,   0.00,   0.11,   4.14,   4.40,   0.00,
-        0.00,   0.10,  -6.01,  -0.50,  -0.04,   0.00,   0.00,   0.13,
-       -4.04,   4.39,   0.00,   0.00,   0.10,   3.45,  -4.72,   0.00,
-        0.00,  -0.11,   3.31,   4.71,   0.00,   0.00,   0.11,   3.26,
-       -4.50,   0.00,   0.00,  -0.10,  -3.26,  -4.50,   0.00,   0.00,
-       -0.10,  -3.34,  -4.40,   0.00,   0.00,  -0.10,  -3.74,  -4.00,
-        3.70,   4.00,   3.34,  -4.30,   3.30,  -4.30,  -3.66,   3.90,
-        0.04,   3.66,   3.90,   0.04,  -3.62,  -3.90,  -3.61,   3.90,
-       -0.20,   5.30,   0.00,   0.00,   0.12,   3.06,   4.30,   3.30,
-
-   /* 1620-1747 */
-        4.00,   0.40,   0.20,   3.10,   4.10,  -3.06,   3.90,  -3.30,
-       -3.60,  -3.30,   3.36,   0.01,   3.14,   3.40,  -4.57,  -0.20,
-        0.00,   0.00,   0.00,   0.10,  -2.70,  -3.60,   2.94,  -3.20,
-       -2.90,   3.20,   2.47,  -3.40,   2.55,  -3.30,   2.80,  -3.08,
-        2.51,   3.30,  -4.10,   0.30,  -0.12,  -0.10,   4.10,   0.20,
-       -2.74,   3.00,   2.46,   3.23,  -3.66,   1.20,  -0.20,   0.20,
-        3.74,  -0.40,  -2.51,  -2.80,  -3.74,   2.27,  -2.90,   0.00,
-        0.00,  -2.50,   2.70,  -2.51,   2.60,  -3.50,   0.20,   3.38,
-       -2.22,  -2.50,   3.26,  -0.40,   1.95,  -2.60,   3.22,  -0.40,
-       -0.04,  -1.79,  -2.60,   1.91,   2.50,   0.74,   3.05,  -0.04,
-        0.08,   2.11,  -2.30,  -2.11,   2.20,  -1.87,  -2.40,   2.03,
-       -2.20,  -2.03,   2.20,   2.98,   0.00,   0.00,   2.98,  -1.71,
-        2.40,   2.94,  -0.10,  -0.12,   0.10,   1.67,   2.40,  -1.79,
-        2.30,  -1.79,   2.20,  -1.67,   2.20,   1.79,  -2.00,   1.87,
-       -1.90,   1.63,  -2.10,  -1.59,   2.10,   1.55,  -2.10,  -1.55,
-        2.10,  -2.59,  -0.20,  -1.75,  -1.90,  -1.75,   1.90,  -1.83,
-
-   /* 1748-1875 */
-       -1.80,   1.51,   2.00,  -1.51,  -2.00,   1.71,   1.80,   1.31,
-        2.10,  -1.43,   2.00,   1.43,   2.00,  -2.43,  -1.51,   1.90,
-       -1.47,   1.90,   2.39,   0.20,  -2.39,   1.39,   1.90,   1.39,
-       -1.80,   1.47,  -1.60,   1.47,  -1.60,   1.43,  -1.50,  -1.31,
-        1.60,   1.27,  -1.60,  -1.27,   1.60,   1.27,  -1.60,   2.03,
-        1.35,   1.50,  -1.39,  -1.40,   1.95,  -0.20,  -1.27,   1.49,
-        1.19,   1.50,   1.27,   1.40,   1.15,   1.50,   1.87,  -0.10,
-       -1.12,  -1.50,   1.87,  -1.11,  -1.50,  -1.11,  -1.50,   0.00,
-        0.00,   1.19,   1.40,   1.27,  -1.30,  -1.27,  -1.30,  -1.15,
-        1.40,  -1.23,   1.30,  -1.23,  -1.30,   1.22,  -1.29,   1.07,
-       -1.40,   1.75,  -0.20,  -1.03,  -1.40,  -1.07,   1.20,  -1.03,
-        1.15,   1.07,   1.10,   1.51,  -1.03,   1.10,   1.03,  -1.10,
-        0.00,   0.00,  -1.03,  -1.10,   0.91,  -1.20,  -0.88,  -1.20,
-       -0.88,   1.20,  -0.95,   1.10,  -0.95,  -1.10,   1.43,  -1.39,
-        0.95,  -1.00,  -0.95,   1.00,  -0.80,   1.10,   0.91,  -1.00,
-       -1.35,   0.88,   1.00,  -0.83,   1.00,  -0.91,   0.90,   0.91,
-
-   /* 1876-2003 */
-        0.90,   0.88,  -0.90,  -0.76,  -1.00,  -0.76,   1.00,   0.76,
-        1.00,  -0.72,   1.00,   0.84,  -0.90,   0.84,   0.90,   1.23,
-        0.00,   0.00,  -0.52,  -1.10,  -0.68,   1.00,   1.19,  -0.20,
-        1.19,   0.76,   0.90,   1.15,  -0.10,   1.15,  -0.10,   0.72,
-       -0.90,  -1.15,  -1.15,   0.68,   0.90,  -0.68,   0.90,  -1.11,
-        0.00,   0.00,   0.20,   0.79,   0.80,  -1.11,  -0.10,   0.00,
-        0.00,  -0.48,  -1.00,  -0.76,  -0.80,  -0.72,  -0.80,  -1.07,
-       -0.10,   0.64,   0.80,  -0.64,  -0.80,   0.64,   0.80,   0.40,
-        0.60,   0.52,  -0.50,  -0.60,  -0.80,  -0.71,   0.70,  -0.99,
-        0.99,   0.56,   0.80,  -0.56,   0.80,   0.68,  -0.70,   0.68,
-        0.70,  -0.95,  -0.64,   0.70,   0.64,   0.70,  -0.60,   0.70,
-       -0.60,  -0.70,  -0.91,  -0.10,  -0.51,   0.76,  -0.91,  -0.56,
-        0.70,   0.88,   0.88,  -0.63,  -0.60,   0.55,  -0.60,  -0.80,
-        0.80,  -0.80,  -0.52,   0.60,   0.52,   0.60,   0.52,  -0.60,
-       -0.48,   0.60,   0.48,   0.60,   0.48,   0.60,  -0.76,   0.44,
-       -0.60,   0.52,  -0.50,  -0.52,   0.50,   0.40,   0.60,  -0.40,
-
-   /* 2004-2131 */
-       -0.60,   0.40,  -0.60,   0.72,  -0.72,  -0.51,  -0.50,  -0.48,
-        0.50,   0.48,  -0.50,  -0.48,   0.50,  -0.48,   0.50,   0.48,
-       -0.50,  -0.48,  -0.50,  -0.68,  -0.68,   0.44,   0.50,  -0.64,
-       -0.10,  -0.64,  -0.10,  -0.40,   0.50,   0.40,   0.50,   0.40,
-        0.50,   0.00,   0.00,  -0.40,  -0.50,  -0.36,  -0.50,   0.36,
-       -0.50,   0.60,  -0.60,   0.40,  -0.40,   0.40,   0.40,  -0.40,
-        0.40,  -0.40,   0.40,  -0.56,  -0.56,   0.36,  -0.40,  -0.36,
-        0.40,   0.36,  -0.40,  -0.36,  -0.40,   0.36,   0.40,   0.36,
-        0.40,  -0.52,   0.52,   0.52,   0.32,   0.40,  -0.32,   0.40,
-       -0.32,   0.40,  -0.32,   0.40,   0.32,  -0.40,  -0.32,  -0.40,
-        0.32,  -0.40,   0.28,  -0.40,  -0.28,   0.40,   0.28,  -0.40,
-        0.28,   0.40,   0.48,  -0.48,   0.48,   0.36,  -0.30,  -0.36,
-       -0.30,   0.00,   0.00,   0.20,   0.40,  -0.44,   0.44,  -0.44,
-       -0.44,  -0.44,  -0.44,   0.32,  -0.30,   0.32,   0.30,   0.24,
-        0.30,  -0.12,  -0.10,  -0.28,   0.30,   0.28,   0.30,   0.28,
-        0.30,   0.28,  -0.30,   0.28,  -0.30,   0.28,  -0.30,   0.28,
-
-   /* 2132-2259 */
-        0.30,  -0.28,   0.30,   0.40,   0.40,  -0.24,   0.30,   0.24,
-       -0.30,   0.24,  -0.30,  -0.24,  -0.30,   0.24,   0.30,   0.24,
-       -0.30,  -0.24,   0.30,   0.24,  -0.30,  -0.24,  -0.30,   0.24,
-       -0.30,   0.24,   0.30,  -0.24,   0.30,  -0.24,   0.30,   0.20,
-       -0.30,   0.20,  -0.30,   0.20,  -0.30,   0.20,   0.30,   0.20,
-       -0.30,   0.20,  -0.30,   0.20,   0.30,   0.20,   0.30,  -0.20,
-       -0.30,   0.20,  -0.30,   0.20,  -0.30,  -0.36,  -0.36,  -0.36,
-       -0.04,   0.30,   0.12,  -0.10,  -0.32,  -0.24,   0.20,   0.24,
-        0.20,   0.20,  -0.20,  -0.20,  -0.20,  -0.20,  -0.20,   0.20,
-        0.20,   0.20,  -0.20,   0.20,   0.20,   0.20,   0.20,  -0.20,
-       -0.20,   0.00,   0.00,  -0.20,  -0.20,  -0.20,   0.20,  -0.20,
-        0.20,   0.20,  -0.20,  -0.20,  -0.20,   0.20,   0.20,   0.20,
-        0.20,   0.20,  -0.20,   0.20,  -0.20,   0.28,   0.28,   0.28,
-        0.28,   0.28,   0.28,  -0.28,   0.28,   0.12,   0.00,   0.24,
-        0.16,  -0.20,   0.16,  -0.20,   0.16,  -0.20,   0.16,   0.20,
-       -0.16,   0.20,   0.16,   0.20,  -0.16,   0.20,  -0.16,   0.20,
-
-   /* 2260-2387 */
-       -0.16,   0.20,   0.16,  -0.20,   0.16,   0.20,   0.16,  -0.20,
-       -0.16,   0.20,  -0.16,  -0.20,  -0.16,   0.20,   0.16,   0.20,
-        0.16,  -0.20,   0.16,  -0.20,   0.16,   0.20,   0.16,   0.20,
-        0.16,   0.20,  -0.16,  -0.20,   0.16,   0.20,  -0.16,   0.20,
-        0.16,   0.20,  -0.16,  -0.20,   0.16,  -0.20,   0.16,  -0.20,
-       -0.16,  -0.20,   0.24,  -0.24,  -0.24,   0.24,   0.24,   0.12,
-        0.20,   0.12,   0.20,  -0.12,  -0.20,   0.12,  -0.20,   0.12,
-       -0.20,  -0.12,   0.20,  -0.12,   0.20,  -0.12,  -0.20,   0.12,
-        0.20,   0.12,   0.20,   0.12,  -0.20,  -0.12,   0.20,   0.12,
-       -0.20,  -0.12,   0.20,   0.12,   0.20,   0.00,   0.00,  -0.12,
-        0.20,  -0.12,   0.20,   0.12,  -0.20,  -0.12,   0.20,   0.12,
-        0.20,   0.00,  -0.21,  -0.20,   0.00,   0.00,   0.20,  -0.20,
-       -0.20,  -0.20,   0.20,  -0.16,  -0.10,   0.00,   0.17,   0.16,
-        0.16,   0.16,   0.16,  -0.16,   0.16,   0.16,  -0.16,   0.16,
-       -0.16,   0.16,   0.12,   0.10,   0.12,  -0.10,  -0.12,   0.10,
-       -0.12,   0.10,   0.12,  -0.10,  -0.12,   0.12,  -0.12,   0.12,
-
-   /* 2388-2515 */
-       -0.12,   0.12,  -0.12,  -0.12,  -0.12,  -0.12,  -0.12,  -0.12,
-       -0.12,   0.12,   0.12,   0.12,   0.12,  -0.12,  -0.12,   0.12,
-        0.12,   0.12,  -0.12,   0.12,  -0.12,  -0.12,  -0.12,   0.12,
-       -0.12,  -0.12,   0.12,   0.00,   0.11,   0.11,-122.67, 164.70,
-      203.78, 273.50,   3.58,   2.74,   6.18,  -4.56,   0.00,  -0.04,
-        0.00,  -0.07,  57.44, -77.10,  95.82, 128.60,  -1.77,  -1.28,
-        2.85,  -2.14,  82.14,  89.50,   0.00,   0.00,   2.00,  -1.84,
-       -0.04,  47.73, -64.10,  23.79,  31.90,  -1.45,  -1.07,   0.69,
-       -0.53, -46.38,  50.50,   0.00,   0.00,   1.13,   1.04,   0.02,
-      -18.38,   0.00,  63.80,   0.00,   0.00,   0.41,   0.00,  -1.43,
-       59.07,   0.00,   0.00,   0.00,   0.00,  -1.32,  57.28,   0.00,
-        0.00,   0.00,   0.00,  -1.28, -48.65,   0.00,  -1.15,   0.00,
-        0.00,   1.09,   0.00,   0.03, -18.30,  24.60, -17.30, -23.20,
-        0.56,   0.41,  -0.51,   0.39, -16.91,  26.90,   8.43,  13.30,
-        0.60,   0.38,   0.31,  -0.19,   1.23,  -1.70, -19.13, -25.70,
-       -0.03,  -0.03,  -0.58,   0.43,  -0.72,   0.90, -17.34, -23.30,
-
-   /* 2516-2643 */
-        0.03,   0.02,  -0.52,   0.39, -19.49, -21.30,   0.00,   0.00,
-       -0.48,   0.44,   0.01,  20.57, -20.10,   0.64,   0.70,  -0.45,
-       -0.46,   0.00,  -0.01,   4.89,   5.90, -16.55,  19.90,   0.14,
-       -0.11,   0.44,   0.37,  18.22,  19.80,   0.00,   0.00,   0.44,
-       -0.41,  -0.01,   4.89,  -5.30, -16.51, -18.00,  -0.11,  -0.11,
-       -0.41,   0.37, -17.86,   0.00,  17.10,   0.00,   0.00,   0.40,
-        0.00,  -0.38,   0.32,   0.00,  24.42,   0.00,   0.00,  -0.01,
-        0.00,  -0.55, -23.79,   0.00,   0.00,   0.00,   0.00,   0.53,
-       14.72, -16.00,  -0.32,   0.00,  -0.36,  -0.33,  -0.01,   0.01,
-        3.34,  -4.50,  11.86,  15.90,  -0.11,  -0.07,   0.35,  -0.27,
-       -3.26,   4.40,  11.62,  15.60,   0.09,   0.07,   0.35,  -0.26,
-      -19.53,   0.00,   5.09,   0.00,   0.00,   0.44,   0.00,  -0.11,
-      -13.48,  14.70,   0.00,   0.00,   0.33,   0.30,   0.01,  10.86,
-      -14.60,   3.18,   4.30,  -0.33,  -0.24,   0.09,  -0.07, -11.30,
-      -15.10,   0.00,   0.00,  -0.34,   0.25,   0.01,   2.03,  -2.70,
-       10.82,  14.50,  -0.07,  -0.05,   0.32,  -0.24,  17.46,   0.00,
-
-   /* 2644-2771 */
-        0.00,   0.00,   0.00,  -0.39,  16.43,   0.00,   0.52,   0.00,
-        0.00,  -0.37,   0.00,  -0.01,   9.35,   0.00,  13.29,   0.00,
-        0.00,  -0.21,   0.00,  -0.30, -10.42,  11.40,   0.00,   0.00,
-        0.25,   0.23,   0.01,   0.44,   0.50, -10.38,  11.30,   0.02,
-       -0.01,   0.25,   0.23, -14.64,   0.00,   0.00,   0.00,   0.00,
-        0.33,   0.56,   0.80,  -8.67,  11.70,   0.02,  -0.01,   0.26,
-        0.19,  13.88,   0.00,  -2.47,   0.00,   0.00,  -0.31,   0.00,
-        0.06,  -1.99,   2.70,   7.72,  10.30,   0.06,   0.04,   0.23,
-       -0.17,  -0.20,   0.00,  13.05,   0.00,   0.00,   0.00,   0.00,
-       -0.29,   6.92,  -9.30,   3.34,   4.50,  -0.21,  -0.15,   0.10,
-       -0.07,  -6.60,   0.00,  10.70,   0.00,   0.00,   0.15,   0.00,
-       -0.24,  -8.04,  -8.70,   0.00,   0.00,  -0.19,   0.18, -10.58,
-        0.00,  -3.10,   0.00,   0.00,   0.24,   0.00,   0.07,  -7.32,
-        8.00,  -0.12,  -0.10,   0.18,   0.16,   1.63,   1.70,   6.96,
-       -7.60,   0.03,  -0.04,  -0.17,  -0.16,  -3.62,   0.00,   9.86,
-        0.00,   0.00,   0.08,   0.00,  -0.22,   0.20,  -0.20,  -6.88,
-
-   /* 2772-2899 */
-       -7.50,   0.00,   0.00,  -0.17,   0.15,  -8.99,   0.00,   4.02,
-        0.00,   0.00,   0.20,   0.00,  -0.09,  -1.07,   1.40,  -5.69,
-       -7.70,   0.03,   0.02,  -0.17,   0.13,   6.48,  -7.20,  -0.48,
-       -0.50,  -0.16,  -0.14,  -0.01,   0.01,   5.57,  -7.50,   1.07,
-        1.40,  -0.17,  -0.12,   0.03,  -0.02,   8.71,   0.00,   3.54,
-        0.00,   0.00,  -0.19,   0.00,  -0.08,   0.40,   0.00,   9.27,
-        0.00,   0.00,  -0.01,   0.00,  -0.21,  -6.13,   6.70,  -1.19,
-       -1.30,   0.15,   0.14,  -0.03,   0.03,   5.21,  -5.70,  -2.51,
-       -2.60,  -0.13,  -0.12,  -0.06,   0.06,   5.69,  -6.20,  -0.12,
-       -0.10,  -0.14,  -0.13,  -0.01,   2.03,  -2.70,   4.53,   6.10,
-       -0.06,  -0.05,   0.14,  -0.10,   5.01,   5.50,  -2.51,   2.70,
-        0.12,  -0.11,   0.06,   0.06,  -1.91,   2.60,  -4.38,  -5.90,
-        0.06,   0.04,  -0.13,   0.10,   4.65,  -6.30,   0.00,   0.00,
-       -0.14,  -0.10,  -5.29,   5.70,   0.00,   0.00,   0.13,   0.12,
-       -2.23,  -4.00,  -4.65,   4.20,  -0.09,   0.05,   0.10,   0.10,
-       -4.53,   6.10,   0.00,   0.00,   0.14,   0.10,   2.47,   2.70,
-
-   /* 2900-3027 */
-       -4.46,   4.90,   0.06,  -0.06,   0.11,   0.10,  -5.05,   5.50,
-        0.84,   0.90,   0.12,   0.11,   0.02,  -0.02,   4.97,  -5.40,
-       -1.71,   0.00,  -0.12,  -0.11,   0.00,   0.04,  -0.99,  -1.30,
-        4.22,  -5.70,  -0.03,   0.02,  -0.13,  -0.09,   0.99,   1.40,
-        4.22,  -5.60,   0.03,  -0.02,  -0.13,  -0.09,  -4.69,  -5.20,
-        0.00,   0.00,  -0.12,   0.10,  -3.42,   0.00,   6.09,   0.00,
-        0.00,   0.08,   0.00,  -0.14,  -4.65,  -5.10,   0.00,   0.00,
-       -0.11,   0.10,   0.00,   0.00,  -4.53,  -5.00,   0.00,   0.00,
-       -0.11,   0.10,  -2.43,  -2.70,  -3.82,   4.20,  -0.06,   0.05,
-        0.10,   0.09,   0.00,   0.00,  -4.53,   4.90,   0.00,   0.00,
-        0.11,   0.10,  -4.49,  -4.90,   0.00,   0.00,  -0.11,   0.10,
-        2.67,  -2.90,  -3.62,  -3.90,  -0.06,  -0.06,  -0.09,   0.08,
-        3.94,  -5.30,   0.00,   0.00,  -0.12,  -3.38,   3.70,  -2.78,
-       -3.10,   0.08,   0.08,  -0.07,   0.06,   3.18,  -3.50,  -2.82,
-       -3.10,  -0.08,  -0.07,  -0.07,   0.06,  -5.77,   0.00,   1.87,
-        0.00,   0.00,   0.13,   0.00,  -0.04,   3.54,  -4.80,  -0.64,
-
-   /* 3028-3155 */
-       -0.90,  -0.11,   0.00,  -0.02,  -3.50,  -4.70,   0.68,  -0.90,
-       -0.11,   0.00,  -0.02,   5.49,   0.00,   0.00,   0.00,   0.00,
-       -0.12,   1.83,  -2.50,   2.63,   3.50,  -0.06,   0.00,   0.08,
-        3.02,  -4.10,   0.68,   0.90,  -0.09,   0.00,   0.02,   0.00,
-        0.00,   5.21,   0.00,   0.00,   0.00,   0.00,  -0.12,  -3.54,
-        3.80,   2.70,   3.60,  -1.35,   1.80,   0.08,   0.00,   0.04,
-       -2.90,   3.90,   0.68,   0.90,   0.09,   0.00,   0.02,   0.80,
-       -1.10,  -2.78,  -3.70,  -0.02,   0.00,  -0.08,   4.10,   0.00,
-       -2.39,   0.00,   0.00,  -0.09,   0.00,   0.05,  -1.59,   2.10,
-        2.27,   3.00,   0.05,   0.00,   0.07,  -2.63,   3.50,  -0.48,
-       -0.60,  -2.94,  -3.20,  -2.94,   3.20,   2.27,  -3.00,  -1.11,
-       -1.50,  -0.07,   0.00,  -0.03,  -0.56,  -0.80,  -2.35,   3.10,
-        0.00,  -0.60,  -3.42,   1.90,  -0.12,  -0.10,   2.63,  -2.90,
-        2.51,   2.80,  -0.64,   0.70,  -0.48,  -0.60,   2.19,  -2.90,
-        0.24,  -0.30,   2.15,   2.90,   2.15,  -2.90,   0.52,   0.70,
-        2.07,  -2.80,  -3.10,   0.00,   1.79,   0.00,   0.00,   0.07,
-
-   /* 3156-3283 */
-        0.00,  -0.04,   0.88,   0.00,  -3.46,   2.11,   2.80,  -0.36,
-        0.50,   3.54,  -0.20,  -3.50,  -1.39,   1.50,  -1.91,  -2.10,
-       -1.47,   2.00,   1.39,   1.90,   2.07,  -2.30,   0.91,   1.00,
-        1.99,  -2.70,   3.30,   0.00,   0.60,  -0.44,  -0.70,  -1.95,
-        2.60,   2.15,  -2.40,  -0.60,  -0.70,   3.30,   0.84,   0.00,
-       -3.10,  -3.10,   0.00,  -0.72,  -0.32,   0.40,  -1.87,  -2.50,
-        1.87,  -2.50,   0.32,   0.40,  -0.24,   0.30,  -1.87,  -2.50,
-       -0.24,  -0.30,   1.87,  -2.50,  -2.70,   0.00,   1.55,   2.03,
-        2.20,  -2.98,  -1.99,  -2.20,   0.12,  -0.10,  -0.40,   0.50,
-        1.59,   2.10,   0.00,   0.00,  -1.79,   2.00,  -1.03,   1.40,
-       -1.15,  -1.60,   0.32,   0.50,   1.39,  -1.90,   2.35,  -1.27,
-        1.70,   0.60,   0.80,  -0.32,  -0.40,   1.35,  -1.80,   0.44,
-        0.00,   2.23,  -0.84,   0.90,  -1.27,  -1.40,  -1.47,   1.60,
-       -0.28,  -0.30,  -0.28,   0.40,  -1.27,  -1.70,   0.28,  -0.40,
-       -1.43,  -1.50,   0.00,   0.00,  -1.27,  -1.70,   2.11,  -0.32,
-       -0.40,  -1.23,   1.60,   1.19,  -1.30,  -0.72,  -0.80,   0.72,
-
-   /* 3284-3411 */
-       -0.80,  -1.15,  -1.30,  -1.35,  -1.50,  -1.19,  -1.60,  -0.12,
-        0.20,   1.79,   0.00,  -0.88,  -0.28,   0.40,   1.11,   1.50,
-       -1.83,   0.00,   0.56,  -0.12,   0.10,  -1.27,  -1.40,   0.00,
-        0.00,   1.15,   1.50,  -0.12,   0.20,   1.11,   1.50,   0.36,
-       -0.50,  -1.07,  -1.40,  -1.11,   1.50,   1.67,   0.00,   0.80,
-       -1.11,   0.00,   1.43,   1.23,  -1.30,  -0.24,  -1.19,  -1.30,
-       -0.24,   0.20,  -0.44,  -0.90,  -0.95,   1.10,   1.07,  -1.40,
-        1.15,  -1.30,   1.03,  -1.10,  -0.56,  -0.60,  -0.68,   0.90,
-       -0.76,  -1.00,  -0.24,  -0.30,   0.95,  -1.30,   0.56,   0.70,
-        0.84,  -1.10,  -0.56,   0.00,  -1.55,   0.91,  -1.30,   0.28,
-        0.30,   0.16,  -0.20,   0.95,   1.30,   0.40,  -0.50,  -0.88,
-       -1.20,   0.95,  -1.10,  -0.48,  -0.50,   0.00,   0.00,  -1.07,
-        1.20,   0.44,  -0.50,   0.95,   1.10,   0.00,   0.00,   0.92,
-       -1.30,   0.95,   1.00,  -0.52,   0.60,   1.59,   0.24,  -0.40,
-        0.91,   1.20,   0.84,  -1.10,  -0.44,  -0.60,   0.84,   1.10,
-       -0.44,   0.60,  -0.44,   0.60,  -0.84,  -1.10,  -0.80,   0.00,
-
-   /* 3412-3539 */
-        1.35,   0.76,   0.20,  -0.91,  -1.00,   0.20,  -0.30,  -0.91,
-       -1.20,  -0.95,   1.00,  -0.48,  -0.50,   0.88,   1.00,   0.48,
-       -0.50,  -0.95,  -1.10,   0.20,  -0.20,  -0.99,   1.10,  -0.84,
-        1.10,  -0.24,  -0.30,   0.20,  -0.30,   0.84,   1.10,  -1.39,
-        0.00,  -0.28,  -0.16,   0.20,   0.84,   1.10,   0.00,   0.00,
-        1.39,   0.00,   0.00,  -0.95,   1.00,   1.35,  -0.99,   0.00,
-        0.88,  -0.52,   0.00,  -1.19,   0.20,   0.20,   0.76,  -1.00,
-        0.00,   0.00,   0.76,   1.00,   0.00,   0.00,   0.76,   1.00,
-       -0.76,   1.00,   0.00,   0.00,   1.23,   0.76,   0.80,  -0.32,
-        0.40,  -0.72,   0.80,  -0.40,  -0.40,   0.00,   0.00,  -0.80,
-       -0.90,  -0.68,   0.90,  -0.16,  -0.20,  -0.16,  -0.20,   0.68,
-       -0.90,  -0.36,   0.50,  -0.56,  -0.80,   0.72,  -0.90,   0.44,
-       -0.60,  -0.48,  -0.70,  -0.16,   0.00,  -1.11,   0.32,   0.00,
-       -1.07,   0.60,  -0.80,  -0.28,  -0.40,  -0.64,   0.00,   0.91,
-        1.11,   0.64,  -0.90,   0.76,  -0.80,   0.00,   0.00,  -0.76,
-       -0.80,   1.03,   0.00,  -0.36,  -0.64,  -0.70,   0.36,  -0.40,
-
-   /* 3540-3667 */
-        1.07,   0.36,  -0.50,  -0.52,  -0.70,   0.60,   0.00,   0.88,
-        0.95,   0.00,   0.48,   0.16,  -0.20,   0.60,   0.80,   0.16,
-       -0.20,  -0.60,  -0.80,   0.00,  -1.00,   0.12,   0.20,   0.16,
-       -0.20,   0.68,   0.70,   0.59,  -0.80,  -0.99,  -0.56,  -0.60,
-        0.36,  -0.40,  -0.68,  -0.70,  -0.68,  -0.70,  -0.36,  -0.50,
-       -0.44,   0.60,   0.64,   0.70,  -0.12,   0.10,  -0.52,   0.60,
-        0.36,   0.40,   0.00,   0.00,   0.95,  -0.84,   0.00,   0.44,
-        0.56,   0.60,   0.32,  -0.30,   0.00,   0.00,   0.60,   0.70,
-        0.00,   0.00,   0.60,   0.70,  -0.12,  -0.20,   0.52,  -0.70,
-        0.00,   0.00,   0.56,   0.70,  -0.12,   0.10,  -0.52,  -0.70,
-        0.00,   0.00,   0.88,  -0.76,   0.00,  -0.44,   0.00,   0.00,
-       -0.52,  -0.70,   0.52,  -0.70,   0.36,  -0.40,  -0.44,  -0.50,
-        0.00,   0.00,   0.60,   0.60,   0.84,   0.00,   0.12,  -0.24,
-        0.00,   0.80,  -0.56,   0.60,  -0.32,  -0.30,   0.48,  -0.50,
-        0.28,  -0.30,  -0.48,  -0.50,   0.12,   0.20,   0.48,  -0.60,
-        0.48,   0.60,  -0.12,   0.20,   0.24,   0.00,   0.76,  -0.52,
-
-   /* 3668-3795 */
-       -0.60,  -0.52,   0.60,   0.48,  -0.50,  -0.24,  -0.30,   0.12,
-       -0.10,   0.48,   0.60,   0.52,  -0.20,   0.36,   0.40,  -0.44,
-        0.50,  -0.24,  -0.30,  -0.48,  -0.60,  -0.44,  -0.60,  -0.12,
-        0.10,   0.76,   0.76,   0.20,  -0.20,   0.48,   0.50,   0.40,
-       -0.50,  -0.24,  -0.30,   0.44,  -0.60,   0.44,  -0.60,   0.36,
-        0.00,  -0.64,   0.72,   0.00,  -0.12,   0.00,  -0.10,  -0.40,
-       -0.60,  -0.20,  -0.20,  -0.44,   0.50,  -0.44,   0.50,   0.20,
-        0.20,  -0.44,  -0.50,   0.20,  -0.20,  -0.20,   0.20,  -0.44,
-       -0.50,   0.64,   0.00,   0.32,  -0.36,   0.50,  -0.20,  -0.30,
-        0.12,  -0.10,   0.48,   0.50,  -0.12,   0.30,  -0.36,  -0.50,
-        0.00,   0.00,   0.48,   0.50,  -0.48,   0.50,   0.68,   0.00,
-       -0.12,   0.56,  -0.40,   0.44,  -0.50,  -0.12,  -0.10,   0.24,
-        0.30,  -0.40,   0.40,   0.64,   0.00,  -0.24,   0.64,   0.00,
-       -0.20,   0.00,   0.00,   0.44,  -0.50,   0.44,   0.50,  -0.12,
-        0.20,  -0.36,  -0.50,   0.12,   0.00,   0.64,  -0.40,   0.50,
-        0.00,   0.10,   0.00,   0.00,  -0.40,   0.50,   0.00,   0.00,
-
-   /* 3796-3923 */
-       -0.40,  -0.50,   0.56,   0.00,   0.28,   0.00,   0.10,   0.36,
-        0.50,   0.00,  -0.10,   0.36,  -0.50,   0.36,   0.50,   0.00,
-       -0.10,   0.24,  -0.20,  -0.36,  -0.40,   0.16,   0.20,   0.40,
-       -0.40,   0.00,   0.00,  -0.36,  -0.50,  -0.36,  -0.50,  -0.32,
-       -0.50,  -0.12,   0.10,   0.20,   0.20,  -0.36,   0.40,  -0.60,
-        0.60,   0.28,   0.00,   0.52,   0.12,  -0.10,   0.40,   0.40,
-        0.00,  -0.50,   0.20,  -0.20,  -0.32,   0.40,   0.16,   0.20,
-       -0.16,   0.20,   0.32,   0.40,   0.56,   0.00,  -0.12,   0.32,
-       -0.40,  -0.16,  -0.20,   0.00,   0.00,   0.40,   0.40,  -0.40,
-       -0.40,  -0.40,   0.40,  -0.36,   0.40,   0.12,   0.10,   0.00,
-        0.10,   0.36,   0.40,   0.00,  -0.10,   0.36,   0.40,  -0.36,
-        0.40,   0.00,   0.10,   0.32,   0.00,   0.44,   0.12,   0.20,
-        0.28,  -0.40,   0.00,   0.00,   0.36,   0.40,   0.32,  -0.40,
-       -0.16,   0.12,   0.10,   0.32,  -0.40,   0.20,   0.30,  -0.24,
-        0.30,   0.00,   0.10,   0.32,   0.40,   0.00,  -0.10,  -0.32,
-       -0.40,  -0.32,   0.40,   0.00,   0.10,  -0.52,  -0.52,   0.52,
-
-   /* 3924-4051 */
-        0.32,  -0.40,   0.00,   0.00,   0.32,   0.40,   0.32,  -0.40,
-        0.00,   0.00,  -0.32,  -0.40,  -0.32,   0.40,   0.32,   0.40,
-        0.00,   0.00,   0.32,   0.40,   0.00,   0.00,  -0.32,  -0.40,
-        0.00,   0.00,   0.32,   0.40,   0.16,   0.20,   0.32,  -0.30,
-       -0.16,   0.00,  -0.48,  -0.20,   0.20,  -0.28,  -0.30,   0.28,
-       -0.40,   0.00,   0.00,   0.28,  -0.40,   0.00,   0.00,   0.28,
-       -0.40,   0.00,   0.00,  -0.28,  -0.40,   0.28,   0.40,  -0.28,
-       -0.40,  -0.48,  -0.20,   0.20,   0.24,   0.30,   0.44,   0.00,
-        0.16,   0.24,   0.30,   0.16,  -0.20,   0.24,   0.30,  -0.12,
-        0.20,   0.20,   0.30,  -0.16,   0.20,   0.00,   0.00,   0.44,
-       -0.32,   0.30,   0.24,   0.00,  -0.36,   0.36,   0.00,   0.24,
-        0.12,  -0.20,   0.20,   0.30,  -0.12,   0.00,  -0.28,   0.30,
-       -0.24,   0.30,   0.12,   0.10,  -0.28,  -0.30,  -0.28,   0.30,
-        0.00,   0.00,  -0.28,  -0.30,   0.00,   0.00,  -0.28,  -0.30,
-        0.00,   0.00,   0.28,   0.30,   0.00,   0.00,  -0.28,  -0.30,
-       -0.28,   0.30,   0.00,   0.00,  -0.28,  -0.30,   0.00,   0.00,
-
-   /* 4052-4179 */
-        0.28,   0.30,   0.00,   0.00,  -0.28,   0.30,   0.28,  -0.30,
-       -0.28,   0.30,   0.40,   0.40,  -0.24,   0.30,   0.00,  -0.10,
-        0.16,   0.00,   0.36,  -0.20,   0.30,  -0.12,  -0.10,  -0.24,
-       -0.30,   0.00,   0.00,  -0.24,   0.30,  -0.24,   0.30,   0.00,
-        0.00,  -0.24,   0.30,  -0.24,   0.30,   0.24,  -0.30,   0.00,
-        0.00,   0.24,  -0.30,   0.00,   0.00,   0.24,   0.30,   0.24,
-       -0.30,   0.24,   0.30,  -0.24,   0.30,  -0.24,   0.30,  -0.20,
-        0.20,  -0.16,  -0.20,   0.00,   0.00,  -0.32,   0.20,   0.00,
-        0.10,   0.20,  -0.30,   0.20,  -0.20,   0.12,   0.20,  -0.16,
-        0.20,   0.16,   0.20,   0.20,   0.30,   0.20,   0.30,   0.00,
-        0.00,  -0.20,   0.30,   0.00,   0.00,   0.20,   0.30,  -0.20,
-       -0.30,  -0.20,  -0.30,   0.20,  -0.30,   0.00,   0.00,   0.20,
-        0.30,   0.00,   0.00,   0.20,   0.30,   0.00,   0.00,   0.20,
-        0.30,   0.00,   0.00,   0.20,   0.30,   0.00,   0.00,   0.20,
-       -0.30,   0.00,   0.00,  -0.20,  -0.30,   0.00,   0.00,  -0.20,
-        0.30,   0.00,   0.00,  -0.20,   0.30,   0.00,   0.00,   0.36,
-
-   /* 4180-4307 */
-        0.00,   0.00,   0.36,   0.12,   0.10,  -0.24,   0.20,   0.12,
-       -0.20,  -0.16,  -0.20,  -0.13,   0.10,   0.22,   0.21,   0.20,
-        0.00,  -0.28,   0.32,   0.00,  -0.12,  -0.20,  -0.20,   0.12,
-       -0.10,   0.12,   0.10,  -0.20,   0.20,   0.00,   0.00,  -0.32,
-        0.32,   0.00,   0.00,   0.32,   0.32,   0.00,   0.00,  -0.24,
-       -0.20,   0.24,   0.20,   0.20,   0.00,  -0.24,   0.00,   0.00,
-       -0.24,  -0.20,   0.00,   0.00,   0.24,   0.20,  -0.24,  -0.20,
-        0.00,   0.00,  -0.24,   0.20,   0.16,  -0.20,   0.12,   0.10,
-        0.20,   0.20,   0.00,  -0.10,  -0.12,   0.10,  -0.16,  -0.20,
-       -0.12,  -0.10,  -0.16,   0.20,   0.20,   0.20,   0.00,   0.00,
-       -0.20,   0.20,  -0.20,   0.20,  -0.20,   0.20,  -0.20,   0.20,
-        0.20,  -0.20,  -0.20,  -0.20,   0.00,   0.00,  -0.20,   0.20,
-        0.20,   0.00,  -0.20,   0.00,   0.00,  -0.20,   0.20,  -0.20,
-        0.20,  -0.20,  -0.20,  -0.20,  -0.20,   0.00,   0.00,   0.20,
-        0.20,   0.20,   0.20,   0.12,  -0.20,  -0.12,  -0.10,   0.28,
-       -0.28,   0.16,  -0.20,   0.00,  -0.10,   0.00,   0.10,  -0.16,
-
-   /* 4308-4435 */
-        0.20,   0.00,  -0.10,  -0.16,  -0.20,   0.00,  -0.10,   0.16,
-       -0.20,   0.16,  -0.20,   0.00,   0.00,   0.16,   0.20,  -0.16,
-        0.20,   0.00,   0.00,   0.16,   0.20,   0.16,  -0.20,   0.16,
-       -0.20,  -0.16,   0.20,   0.16,  -0.20,   0.00,   0.00,   0.16,
-        0.20,   0.00,   0.00,   0.16,   0.20,   0.00,   0.00,  -0.16,
-       -0.20,   0.16,  -0.20,  -0.16,  -0.20,   0.00,   0.00,  -0.16,
-       -0.20,   0.00,   0.00,  -0.16,   0.20,   0.00,   0.00,   0.16,
-       -0.20,   0.16,   0.20,   0.16,   0.20,   0.00,   0.00,  -0.16,
-       -0.20,   0.00,   0.00,  -0.16,  -0.20,   0.00,   0.00,   0.16,
-        0.20,   0.16,   0.20,   0.00,   0.00,   0.16,   0.20,   0.16,
-       -0.20,   0.16,   0.20,   0.00,   0.00,  -0.16,   0.20,   0.00,
-        0.10,   0.12,  -0.20,   0.12,  -0.20,   0.00,  -0.10,   0.00,
-       -0.10,   0.12,   0.20,   0.00,  -0.10,  -0.12,   0.20,  -0.15,
-        0.20,  -0.24,   0.24,   0.00,   0.00,   0.24,   0.24,   0.12,
-       -0.20,  -0.12,  -0.20,   0.00,   0.00,   0.12,   0.20,   0.12,
-       -0.20,   0.12,   0.20,   0.12,   0.20,   0.12,   0.20,   0.12,
-
-   /* 4436-4563 */
-       -0.20,  -0.12,   0.20,   0.00,   0.00,   0.12,   0.20,   0.12,
-        0.00,  -0.20,   0.00,   0.00,  -0.12,  -0.20,   0.12,  -0.20,
-        0.00,   0.00,   0.12,   0.20,  -0.12,   0.20,  -0.12,   0.20,
-        0.12,  -0.20,   0.00,   0.00,   0.12,   0.20,   0.20,   0.00,
-        0.12,   0.00,   0.00,  -0.12,   0.20,   0.00,   0.00,  -0.12,
-       -0.20,   0.00,   0.00,  -0.12,  -0.20,  -0.12,  -0.20,   0.00,
-        0.00,   0.12,  -0.20,   0.12,  -0.20,   0.12,   0.20,  -0.12,
-       -0.20,   0.00,   0.00,   0.12,  -0.20,   0.12,  -0.20,   0.12,
-        0.20,   0.12,   0.00,   0.20,  -0.12,  -0.20,   0.00,   0.00,
-        0.12,   0.20,  -0.16,   0.00,   0.16,  -0.20,   0.20,   0.00,
-        0.00,  -0.20,   0.00,   0.00,  -0.20,   0.20,   0.00,   0.00,
-        0.20,   0.20,  -0.20,   0.00,   0.00,  -0.20,   0.12,   0.00,
-       -0.16,   0.20,   0.00,   0.00,   0.20,   0.12,  -0.10,   0.00,
-        0.10,   0.16,  -0.16,  -0.16,  -0.16,  -0.16,  -0.16,   0.00,
-        0.00,  -0.16,   0.00,   0.00,  -0.16,  -0.16,  -0.16,   0.00,
-        0.00,  -0.16,   0.00,   0.00,   0.16,   0.00,   0.00,   0.16,
-
-   /* 4564-4691 */
-        0.00,   0.00,   0.16,   0.16,   0.00,   0.00,  -0.16,   0.00,
-        0.00,  -0.16,  -0.16,   0.00,   0.00,   0.16,   0.00,   0.00,
-       -0.16,  -0.16,   0.00,   0.00,  -0.16,  -0.16,   0.12,   0.10,
-        0.12,  -0.10,   0.12,   0.10,   0.00,   0.00,   0.12,   0.10,
-       -0.12,   0.10,   0.00,   0.00,   0.12,   0.10,   0.12,  -0.10,
-        0.00,   0.00,  -0.12,  -0.10,   0.00,   0.00,   0.12,   0.10,
-        0.12,   0.00,   0.00,   0.12,   0.00,   0.00,  -0.12,   0.00,
-        0.00,   0.12,   0.12,   0.12,   0.12,   0.12,   0.00,   0.00,
-        0.12,   0.00,   0.00,   0.12,   0.12,   0.00,   0.00,   0.12,
-        0.00,   0.00,   0.12,  -0.12,  -0.12,   0.12,   0.12,  -0.12,
-       -0.12,   0.00,   0.00,   0.12,  -0.12,   0.12,   0.12,  -0.12,
-       -0.12,   0.00,   0.00,  -0.12,  -0.12,   0.00,   0.00,  -0.12,
-        0.12,   0.00,   0.00,   0.12,   0.00,   0.00,   0.12,   0.00,
-        0.00,   0.12,  -0.12,   0.00,   0.00,  -0.12,   0.12,  -0.12,
-       -0.12,   0.12,   0.00,   0.00,   0.12,   0.12,   0.12,  -0.12,
-        0.00,   0.00,  -0.12,  -0.12,  -0.12,   0.00,   0.00,  -0.12,
-
-   /* 4692-NA */
-       -0.12,   0.00,   0.00,   0.12,   0.12,   0.00,   0.00,  -0.12,
-       -0.12,  -0.12,  -0.12,   0.12,   0.00,   0.00,   0.12,  -0.12,
-        0.00,   0.00,  -0.12,  -0.12,   0.00,   0.00,   0.12,  -0.12,
-       -0.12,  -0.12,  -0.12,   0.12,   0.12,  -0.12,  -0.12,   0.00,
-        0.00,  -0.12,   0.00,   0.00,  -0.12,   0.12,   0.00,   0.00,
-        0.12,   0.00,   0.00,  -0.12,  -0.12,   0.00,   0.00,  -0.12,
-       -0.12,   0.12,   0.00,   0.00,   0.12,   0.12,   0.00,   0.00,
-        0.12,   0.00,   0.00,   0.12,   0.12,   0.08,   0.00,   0.04
-   };
-
-/* Number of amplitude coefficients */
-   static const int NA = (int) (sizeof a / sizeof (double));
-
-/* Amplitude usage: X or Y, sin or cos, power of T. */
-   static const int jaxy[] = {0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1};
-   static const int jasc[] = {0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0};
-   static const int japt[] = {0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4};
-
-/* Miscellaneous */
-   double t, w, pt[MAXPT+1], fa[14], xypr[2], xypl[2], xyls[2], arg,
-          sc[2];
-   int jpt, i, j, jxy, ialast, ifreq, m, ia, jsc;
-
-/*--------------------------------------------------------------------*/
-
-/* Interval between fundamental date J2000.0 and given date (JC). */
-   t = ((date1 - DJ00) + date2) / DJC;
-
-/* Powers of T. */
-   w = 1.0;
-   for (jpt = 0; jpt <= MAXPT; jpt++) {
-      pt[jpt] = w;
-      w *= t;
-   }
-
-/* Initialize totals in X and Y:  polynomial, luni-solar, planetary. */
-   for (jxy = 0; jxy < 2; jxy++) {
-      xypr[jxy] = 0.0;
-      xyls[jxy] = 0.0;
-      xypl[jxy] = 0.0;
-   }
-
-/* --------------------------------- */
-/* Fundamental arguments (IERS 2003) */
-/* --------------------------------- */
-
-/* Mean anomaly of the Moon. */
-   fa[0] = iauFal03(t);
-
-/* Mean anomaly of the Sun. */
-   fa[1] = iauFalp03(t);
-
-/* Mean argument of the latitude of the Moon. */
-   fa[2] = iauFaf03(t);
-
-/* Mean elongation of the Moon from the Sun. */
-   fa[3] = iauFad03(t);
-
-/* Mean longitude of the ascending node of the Moon. */
-   fa[4] = iauFaom03(t);
-
-/* Planetary longitudes, Mercury through Neptune. */
-   fa[5] = iauFame03(t);
-   fa[6] = iauFave03(t);
-   fa[7] = iauFae03(t);
-   fa[8] = iauFama03(t);
-   fa[9] = iauFaju03(t);
-   fa[10] = iauFasa03(t);
-   fa[11] = iauFaur03(t);
-   fa[12] = iauFane03(t);
-
-/* General accumulated precession in longitude. */
-   fa[13] = iauFapa03(t);
-
-/* -------------------------------------- */
-/* Polynomial part of precession-nutation */
-/* -------------------------------------- */
-
-   for (jxy = 0; jxy < 2; jxy++) {
-      for (j = MAXPT; j >= 0; j--) {
-         xypr[jxy] += xyp[jxy][j] * pt[j];
-      }
-   }
-
-/* ---------------------------------- */
-/* Nutation periodic terms, planetary */
-/* ---------------------------------- */
-
-/* Work backwards through the coefficients per frequency list. */
-   ialast = NA;
-   for (ifreq = NFPL-1; ifreq >= 0; ifreq--) {
-
-   /* Obtain the argument functions. */
-      arg = 0.0;
-      for (i = 0; i < 14; i++) {
-         m = mfapl[ifreq][i];
-         if (m != 0) arg += (double)m * fa[i];
-      }
-      sc[0] = sin(arg);
-      sc[1] = cos(arg);
-
-   /* Work backwards through the amplitudes at this frequency. */
-      ia = nc[ifreq+NFLS];
-      for (i = ialast; i >= ia; i--) {
-
-      /* Coefficient number (0 = 1st). */
-         j = i-ia;
-
-      /* X or Y. */
-         jxy = jaxy[j];
-
-      /* Sin or cos. */
-         jsc = jasc[j];
-
-      /* Power of T. */
-         jpt = japt[j];
-
-      /* Accumulate the component. */
-         xypl[jxy] += a[i-1] * sc[jsc] * pt[jpt];
-      }
-      ialast = ia-1;
-   }
-
-/* ----------------------------------- */
-/* Nutation periodic terms, luni-solar */
-/* ----------------------------------- */
-
-/* Continue working backwards through the number of coefficients list. */
-   for (ifreq = NFLS-1; ifreq >= 0; ifreq--) {
-
-   /* Obtain the argument functions. */
-      arg = 0.0;
-      for (i = 0; i < 5; i++) {
-         m = mfals[ifreq][i];
-         if (m != 0) arg += (double)m * fa[i];
-      }
-      sc[0] = sin(arg);
-      sc[1] = cos(arg);
-
-   /* Work backwards through the amplitudes at this frequency. */
-      ia = nc[ifreq];
-      for (i = ialast; i >= ia; i--) {
-
-      /* Coefficient number (0 = 1st). */
-         j = i-ia;
-
-      /* X or Y. */
-         jxy = jaxy[j];
-
-      /* Sin or cos. */
-         jsc = jasc[j];
-
-      /* Power of T. */
-         jpt = japt[j];
-
-      /* Accumulate the component. */
-         xyls[jxy] += a[i-1] * sc[jsc] * pt[jpt];
-      }
-      ialast = ia-1;
-   }
-
-/* ------------------------------------ */
-/* Results:  CIP unit vector components */
-/* ------------------------------------ */
-
-   *x = DAS2R * (xypr[0] + (xyls[0] + xypl[0]) / 1e6);
-   *y = DAS2R * (xypr[1] + (xyls[1] + xypl[1]) / 1e6);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauXys00a(double date1, double date2,
-               double *x, double *y, double *s)
-/*
-**  - - - - - - - - - -
-**   i a u X y s 0 0 a
-**  - - - - - - - - - -
-**
-**  For a given TT date, compute the X,Y coordinates of the Celestial
-**  Intermediate Pole and the CIO locator s, using the IAU 2000A
-**  precession-nutation model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     x,y          double   Celestial Intermediate Pole (Note 2)
-**     s            double   the CIO locator s (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The Celestial Intermediate Pole coordinates are the x,y
-**     components of the unit vector in the Geocentric Celestial
-**     Reference System.
-**
-**  3) The CIO locator s (in radians) positions the Celestial
-**     Intermediate Origin on the equator of the CIP.
-**
-**  4) A faster, but slightly less accurate result (about 1 mas for
-**     X,Y), can be obtained by using instead the iauXys00b function.
-**
-**  Called:
-**     iauPnm00a    classical NPB matrix, IAU 2000A
-**     iauBpn2xy    extract CIP X,Y coordinates from NPB matrix
-**     iauS00       the CIO locator s, given X,Y, IAU 2000A
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2008 May 12
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rbpn[3][3];
-
-
-/* Form the bias-precession-nutation matrix, IAU 2000A. */
-   iauPnm00a(date1, date2, rbpn);
-
-/* Extract X,Y. */
-   iauBpn2xy(rbpn, x, y);
-
-/* Obtain s. */
-   *s = iauS00(date1, date2, *x, *y);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauXys00b(double date1, double date2,
-               double *x, double *y, double *s)
-/*
-**  - - - - - - - - - -
-**   i a u X y s 0 0 b
-**  - - - - - - - - - -
-**
-**  For a given TT date, compute the X,Y coordinates of the Celestial
-**  Intermediate Pole and the CIO locator s, using the IAU 2000B
-**  precession-nutation model.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double   TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     x,y          double   Celestial Intermediate Pole (Note 2)
-**     s            double   the CIO locator s (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The Celestial Intermediate Pole coordinates are the x,y
-**     components of the unit vector in the Geocentric Celestial
-**     Reference System.
-**
-**  3) The CIO locator s (in radians) positions the Celestial
-**     Intermediate Origin on the equator of the CIP.
-**
-**  4) The present function is faster, but slightly less accurate (about
-**     1 mas in X,Y), than the iauXys00a function.
-**
-**  Called:
-**     iauPnm00b    classical NPB matrix, IAU 2000B
-**     iauBpn2xy    extract CIP X,Y coordinates from NPB matrix
-**     iauS00       the CIO locator s, given X,Y, IAU 2000A
-**
-**  Reference:
-**
-**     McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
-**     IERS Technical Note No. 32, BKG (2004)
-**
-**  This revision:  2008 May 12
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rbpn[3][3];
-
-
-/* Form the bias-precession-nutation matrix, IAU 2000A. */
-   iauPnm00b(date1, date2, rbpn);
-
-/* Extract X,Y. */
-   iauBpn2xy(rbpn, x, y);
-
-/* Obtain s. */
-   *s = iauS00(date1, date2, *x, *y);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauXys06a(double date1, double date2,
-               double *x, double *y, double *s)
-/*
-**  - - - - - - - - - -
-**   i a u X y s 0 6 a
-**  - - - - - - - - - -
-**
-**  For a given TT date, compute the X,Y coordinates of the Celestial
-**  Intermediate Pole and the CIO locator s, using the IAU 2006
-**  precession and IAU 2000A nutation models.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  support function.
-**
-**  Given:
-**     date1,date2  double  TT as a 2-part Julian Date (Note 1)
-**
-**  Returned:
-**     x,y          double  Celestial Intermediate Pole (Note 2)
-**     s            double  the CIO locator s (Note 2)
-**
-**  Notes:
-**
-**  1) The TT date date1+date2 is a Julian Date, apportioned in any
-**     convenient way between the two arguments.  For example,
-**     JD(TT)=2450123.7 could be expressed in any of these ways,
-**     among others:
-**
-**            date1          date2
-**
-**         2450123.7           0.0       (JD method)
-**         2451545.0       -1421.3       (J2000 method)
-**         2400000.5       50123.2       (MJD method)
-**         2450123.5           0.2       (date & time method)
-**
-**     The JD method is the most natural and convenient to use in
-**     cases where the loss of several decimal digits of resolution
-**     is acceptable.  The J2000 method is best matched to the way
-**     the argument is handled internally and will deliver the
-**     optimum resolution.  The MJD method and the date & time methods
-**     are both good compromises between resolution and convenience.
-**
-**  2) The Celestial Intermediate Pole coordinates are the x,y components
-**     of the unit vector in the Geocentric Celestial Reference System.
-**
-**  3) The CIO locator s (in radians) positions the Celestial
-**     Intermediate Origin on the equator of the CIP.
-**
-**  4) Series-based solutions for generating X and Y are also available:
-**     see Capitaine & Wallace (2006) and iauXy06.
-**
-**  Called:
-**     iauPnm06a    classical NPB matrix, IAU 2006/2000A
-**     iauBpn2xy    extract CIP X,Y coordinates from NPB matrix
-**     iauS06       the CIO locator s, given X,Y, IAU 2006
-**
-**  References:
-**
-**     Capitaine, N. & Wallace, P.T., 2006, Astron.Astrophys. 450, 855
-**
-**     Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   double rbpn[3][3];
-
-
-/* Form the bias-precession-nutation matrix, IAU 2000A. */
-   iauPnm06a(date1, date2, rbpn);
-
-/* Extract X,Y. */
-   iauBpn2xy(rbpn, x, y);
-
-/* Obtain s. */
-   *s = iauS06(date1, date2, *x, *y);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauZp(double p[3])
-/*
-**  - - - - - -
-**   i a u Z p
-**  - - - - - -
-**
-**  Zero a p-vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Returned:
-**     p        double[3]      p-vector
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   p[0] = 0.0;
-   p[1] = 0.0;
-   p[2] = 0.0;
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauZpv(double pv[2][3])
-/*
-**  - - - - - - -
-**   i a u Z p v
-**  - - - - - - -
-**
-**  Zero a pv-vector.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Returned:
-**     pv       double[2][3]      pv-vector
-**
-**  Called:
-**     iauZp        zero p-vector
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   iauZp(pv[0]);
-   iauZp(pv[1]);
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
-#include "sofam.h"
-
-void iauZr(double r[3][3])
-/*
-**  - - - - - -
-**   i a u Z r
-**  - - - - - -
-**
-**  Initialize an r-matrix to the null matrix.
-**
-**  This function is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Status:  vector/matrix support function.
-**
-**  Returned:
-**     r        double[3][3]    r-matrix
-**
-**  This revision:  2008 May 11
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-{
-   int i, j;
-
-
-   for (i = 0; i < 3; i++) {
-      for (j = 0; j < 3; j++) {
-         r[i][j] = 0.0;
-      }
-   }
-
-   return;
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
-}
diff --git a/cextern/sofa/sofa.h b/cextern/sofa/sofa.h
deleted file mode 100644
index 43e08dc..0000000
--- a/cextern/sofa/sofa.h
+++ /dev/null
@@ -1,429 +0,0 @@
-#ifndef SOFAHDEF
-#define SOFAHDEF
-
-/*
-**  - - - - - - -
-**   s o f a . h
-**  - - - - - - -
-**
-**  Prototype function declarations for SOFA library.
-**
-**  This file is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  This revision:   2012 February 23
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-
-#include "math.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Astronomy/Calendars */
-int iauCal2jd(int iy, int im, int id, double *djm0, double *djm);
-double iauEpb(double dj1, double dj2);
-void iauEpb2jd(double epb, double *djm0, double *djm);
-double iauEpj(double dj1, double dj2);
-void iauEpj2jd(double epj, double *djm0, double *djm);
-int iauJd2cal(double dj1, double dj2,
-                     int *iy, int *im, int *id, double *fd);
-int iauJdcalf(int ndp, double dj1, double dj2, int iymdf[4]);
-
-/* Astronomy/Ephemerides */
-int iauEpv00(double date1, double date2,
-             double pvh[2][3], double pvb[2][3]);
-int iauPlan94(double date1, double date2, int np, double pv[2][3]);
-
-/* Astronomy/FundamentalArgs */
-double iauFad03(double t);
-double iauFae03(double t);
-double iauFaf03(double t);
-double iauFaju03(double t);
-double iauFal03(double t);
-double iauFalp03(double t);
-double iauFama03(double t);
-double iauFame03(double t);
-double iauFane03(double t);
-double iauFaom03(double t);
-double iauFapa03(double t);
-double iauFasa03(double t);
-double iauFaur03(double t);
-double iauFave03(double t);
-
-/* Astronomy/PrecNutPolar */
-void iauBi00(double *dpsibi, double *depsbi, double *dra);
-void iauBp00(double date1, double date2,
-             double rb[3][3], double rp[3][3], double rbp[3][3]);
-void iauBp06(double date1, double date2,
-             double rb[3][3], double rp[3][3], double rbp[3][3]);
-void iauBpn2xy(double rbpn[3][3], double *x, double *y);
-void iauC2i00a(double date1, double date2, double rc2i[3][3]);
-void iauC2i00b(double date1, double date2, double rc2i[3][3]);
-void iauC2i06a(double date1, double date2, double rc2i[3][3]);
-void iauC2ibpn(double date1, double date2, double rbpn[3][3],
-               double rc2i[3][3]);
-void iauC2ixy(double date1, double date2, double x, double y,
-              double rc2i[3][3]);
-void iauC2ixys(double x, double y, double s, double rc2i[3][3]);
-void iauC2t00a(double tta, double ttb, double uta, double utb,
-               double xp, double yp, double rc2t[3][3]);
-void iauC2t00b(double tta, double ttb, double uta, double utb,
-               double xp, double yp, double rc2t[3][3]);
-void iauC2t06a(double tta, double ttb, double uta, double utb,
-               double xp, double yp, double rc2t[3][3]);
-void iauC2tcio(double rc2i[3][3], double era, double rpom[3][3],
-               double rc2t[3][3]);
-void iauC2teqx(double rbpn[3][3], double gst, double rpom[3][3],
-               double rc2t[3][3]);
-void iauC2tpe(double tta, double ttb, double uta, double utb,
-              double dpsi, double deps, double xp, double yp,
-              double rc2t[3][3]);
-void iauC2txy(double tta, double ttb, double uta, double utb,
-              double x, double y, double xp, double yp,
-              double rc2t[3][3]);
-double iauEo06a(double date1, double date2);
-double iauEors(double rnpb[3][3], double s);
-void iauFw2m(double gamb, double phib, double psi, double eps,
-             double r[3][3]);
-void iauFw2xy(double gamb, double phib, double psi, double eps,
-              double *x, double *y);
-void iauNum00a(double date1, double date2, double rmatn[3][3]);
-void iauNum00b(double date1, double date2, double rmatn[3][3]);
-void iauNum06a(double date1, double date2, double rmatn[3][3]);
-void iauNumat(double epsa, double dpsi, double deps, double rmatn[3][3]);
-void iauNut00a(double date1, double date2, double *dpsi, double *deps);
-void iauNut00b(double date1, double date2, double *dpsi, double *deps);
-void iauNut06a(double date1, double date2, double *dpsi, double *deps);
-void iauNut80(double date1, double date2, double *dpsi, double *deps);
-void iauNutm80(double date1, double date2, double rmatn[3][3]);
-double iauObl06(double date1, double date2);
-double iauObl80(double date1, double date2);
-void iauP06e(double date1, double date2,
-             double *eps0, double *psia, double *oma, double *bpa,
-             double *bqa, double *pia, double *bpia,
-             double *epsa, double *chia, double *za, double *zetaa,
-             double *thetaa, double *pa,
-             double *gam, double *phi, double *psi);
-void iauPb06(double date1, double date2,
-             double *bzeta, double *bz, double *btheta);
-void iauPfw06(double date1, double date2,
-              double *gamb, double *phib, double *psib, double *epsa);
-void iauPmat00(double date1, double date2, double rbp[3][3]);
-void iauPmat06(double date1, double date2, double rbp[3][3]);
-void iauPmat76(double date1, double date2, double rmatp[3][3]);
-void iauPn00(double date1, double date2, double dpsi, double deps,
-             double *epsa,
-             double rb[3][3], double rp[3][3], double rbp[3][3],
-             double rn[3][3], double rbpn[3][3]);
-void iauPn00a(double date1, double date2,
-              double *dpsi, double *deps, double *epsa,
-              double rb[3][3], double rp[3][3], double rbp[3][3],
-              double rn[3][3], double rbpn[3][3]);
-void iauPn00b(double date1, double date2,
-              double *dpsi, double *deps, double *epsa,
-              double rb[3][3], double rp[3][3], double rbp[3][3],
-              double rn[3][3], double rbpn[3][3]);
-void iauPn06(double date1, double date2, double dpsi, double deps,
-             double *epsa,
-             double rb[3][3], double rp[3][3], double rbp[3][3],
-             double rn[3][3], double rbpn[3][3]);
-void iauPn06a(double date1, double date2,
-              double *dpsi, double *deps, double *epsa,
-              double rb[3][3], double rp[3][3], double rbp[3][3],
-              double rn[3][3], double rbpn[3][3]);
-void iauPnm00a(double date1, double date2, double rbpn[3][3]);
-void iauPnm00b(double date1, double date2, double rbpn[3][3]);
-void iauPnm06a(double date1, double date2, double rnpb[3][3]);
-void iauPnm80(double date1, double date2, double rmatpn[3][3]);
-void iauPom00(double xp, double yp, double sp, double rpom[3][3]);
-void iauPr00(double date1, double date2, double *dpsipr, double *depspr);
-void iauPrec76(double ep01, double ep02, double ep11, double ep12,
-               double *zeta, double *z, double *theta);
-double iauS00(double date1, double date2, double x, double y);
-double iauS00a(double date1, double date2);
-double iauS00b(double date1, double date2);
-double iauS06(double date1, double date2, double x, double y);
-double iauS06a(double date1, double date2);
-double iauSp00(double date1, double date2);
-void iauXy06(double date1, double date2, double *x, double *y);
-void iauXys00a(double date1, double date2,
-               double *x, double *y, double *s);
-void iauXys00b(double date1, double date2,
-               double *x, double *y, double *s);
-void iauXys06a(double date1, double date2,
-               double *x, double *y, double *s);
-
-/* Astronomy/RotationAndTime */
-double iauEe00(double date1, double date2, double epsa, double dpsi);
-double iauEe00a(double date1, double date2);
-double iauEe00b(double date1, double date2);
-double iauEe06a(double date1, double date2);
-double iauEect00(double date1, double date2);
-double iauEqeq94(double date1, double date2);
-double iauEra00(double dj1, double dj2);
-double iauGmst00(double uta, double utb, double tta, double ttb);
-double iauGmst06(double uta, double utb, double tta, double ttb);
-double iauGmst82(double dj1, double dj2);
-double iauGst00a(double uta, double utb, double tta, double ttb);
-double iauGst00b(double uta, double utb);
-double iauGst06(double uta, double utb, double tta, double ttb,
-                double rnpb[3][3]);
-double iauGst06a(double uta, double utb, double tta, double ttb);
-double iauGst94(double uta, double utb);
-
-/* Astronomy/SpaceMotion */
-int iauPvstar(double pv[2][3], double *ra, double *dec,
-              double *pmr, double *pmd, double *px, double *rv);
-int iauStarpv(double ra, double dec,
-              double pmr, double pmd, double px, double rv,
-              double pv[2][3]);
-
-/* Astronomy/StarCatalogs */
-void iauFk52h(double r5, double d5,
-              double dr5, double dd5, double px5, double rv5,
-              double *rh, double *dh,
-              double *drh, double *ddh, double *pxh, double *rvh);
-void iauFk5hip(double r5h[3][3], double s5h[3]);
-void iauFk5hz(double r5, double d5, double date1, double date2,
-              double *rh, double *dh);
-void iauH2fk5(double rh, double dh,
-              double drh, double ddh, double pxh, double rvh,
-              double *r5, double *d5,
-              double *dr5, double *dd5, double *px5, double *rv5);
-void iauHfk5z(double rh, double dh, double date1, double date2,
-              double *r5, double *d5, double *dr5, double *dd5);
-int iauStarpm(double ra1, double dec1,
-              double pmr1, double pmd1, double px1, double rv1,
-              double ep1a, double ep1b, double ep2a, double ep2b,
-              double *ra2, double *dec2,
-              double *pmr2, double *pmd2, double *px2, double *rv2);
-
-/* Astronomy/Geodetic/Geocentric */
-int iauEform(int n, double *a, double *f);
-int iauGc2gd(int n, double xyz[3],
-             double *elong, double *phi, double *height);
-int iauGc2gde(double a, double f, double xyz[3],
-              double *elong, double *phi, double *height);
-int iauGd2gc(int n, double elong, double phi, double height,
-             double xyz[3]);
-int iauGd2gce(double a, double f,
-              double elong, double phi, double height, double xyz[3]);
-
-/* Astronomy/Timescales */
-int iauD2dtf(const char *scale, int ndp, double d1, double d2,
-             int *iy, int *im, int *id, int ihmsf[4]);
-int iauDat(int iy, int im, int id, double fd, double *deltat);
-double iauDtdb(double date1, double date2,
-               double ut, double elong, double u, double v);
-int iauDtf2d(const char *scale, int iy, int im, int id,
-             int ihr, int imn, double sec, double *d1, double *d2);
-int iauTaitt(double tai1, double tai2, double *tt1, double *tt2);
-int iauTaiut1(double tai1, double tai2, double dta,
-              double *ut11, double *ut12);
-int iauTaiutc(double tai1, double tai2, double *utc1, double *utc2);
-int iauTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2);
-int iauTcgtt(double tcg1, double tcg2, double *tt1, double *tt2);
-int iauTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2);
-int iauTdbtt(double tdb1, double tdb2, double dtr,
-             double *tt1, double *tt2);
-int iauTttai(double tt1, double tt2, double *tai1, double *tai2);
-int iauTttcg(double tt1, double tt2, double *tcg1, double *tcg2);
-int iauTttdb(double tt1, double tt2, double dtr,
-             double *tdb1, double *tdb2);
-int iauTtut1(double tt1, double tt2, double dt,
-             double *ut11, double *ut12);
-int iauUt1tai(double ut11, double ut12, double dta,
-              double *tai1, double *tai2);
-int iauUt1tt(double ut11, double ut12, double dt,
-             double *tt1, double *tt2);
-int iauUt1utc(double ut11, double ut12, double dut1,
-              double *utc1, double *utc2);
-int iauUtctai(double utc1, double utc2, double *tai1, double *tai2);
-int iauUtcut1(double utc1, double utc2, double dut1,
-              double *ut11, double *ut12);
-
-/* VectorMatrix/AngleOps */
-void iauA2af(int ndp, double angle, char *sign, int idmsf[4]);
-void iauA2tf(int ndp, double angle, char *sign, int ihmsf[4]);
-int iauAf2a(char s, int ideg, int iamin, double asec, double *rad);
-double iauAnp(double a);
-double iauAnpm(double a);
-void iauD2tf(int ndp, double days, char *sign, int ihmsf[4]);
-int iauTf2a(char s, int ihour, int imin, double sec, double *rad);
-int iauTf2d(char s, int ihour, int imin, double sec, double *days);
-
-/* VectorMatrix/BuildRotations */
-void iauRx(double phi, double r[3][3]);
-void iauRy(double theta, double r[3][3]);
-void iauRz(double psi, double r[3][3]);
-
-/* VectorMatrix/CopyExtendExtract */
-void iauCp(double p[3], double c[3]);
-void iauCpv(double pv[2][3], double c[2][3]);
-void iauCr(double r[3][3], double c[3][3]);
-void iauP2pv(double p[3], double pv[2][3]);
-void iauPv2p(double pv[2][3], double p[3]);
-
-/* VectorMatrix/Initialization */
-void iauIr(double r[3][3]);
-void iauZp(double p[3]);
-void iauZpv(double pv[2][3]);
-void iauZr(double r[3][3]);
-
-/* VectorMatrix/MatrixOps */
-void iauRxr(double a[3][3], double b[3][3], double atb[3][3]);
-void iauTr(double r[3][3], double rt[3][3]);
-
-/* VectorMatrix/MatrixVectorProducts */
-void iauRxp(double r[3][3], double p[3], double rp[3]);
-void iauRxpv(double r[3][3], double pv[2][3], double rpv[2][3]);
-void iauTrxp(double r[3][3], double p[3], double trp[3]);
-void iauTrxpv(double r[3][3], double pv[2][3], double trpv[2][3]);
-
-/* VectorMatrix/RotationVectors */
-void iauRm2v(double r[3][3], double w[3]);
-void iauRv2m(double w[3], double r[3][3]);
-
-/* VectorMatrix/SeparationAndAngle */
-double iauPap(double a[3], double b[3]);
-double iauPas(double al, double ap, double bl, double bp);
-double iauSepp(double a[3], double b[3]);
-double iauSeps(double al, double ap, double bl, double bp);
-
-/* VectorMatrix/SphericalCartesian */
-void iauC2s(double p[3], double *theta, double *phi);
-void iauP2s(double p[3], double *theta, double *phi, double *r);
-void iauPv2s(double pv[2][3],
-             double *theta, double *phi, double *r,
-             double *td, double *pd, double *rd);
-void iauS2c(double theta, double phi, double c[3]);
-void iauS2p(double theta, double phi, double r, double p[3]);
-void iauS2pv(double theta, double phi, double r,
-             double td, double pd, double rd,
-             double pv[2][3]);
-
-/* VectorMatrix/VectorOps */
-double iauPdp(double a[3], double b[3]);
-double iauPm(double p[3]);
-void iauPmp(double a[3], double b[3], double amb[3]);
-void iauPn(double p[3], double *r, double u[3]);
-void iauPpp(double a[3], double b[3], double apb[3]);
-void iauPpsp(double a[3], double s, double b[3], double apsb[3]);
-void iauPvdpv(double a[2][3], double b[2][3], double adb[2]);
-void iauPvm(double pv[2][3], double *r, double *s);
-void iauPvmpv(double a[2][3], double b[2][3], double amb[2][3]);
-void iauPvppv(double a[2][3], double b[2][3], double apb[2][3]);
-void iauPvu(double dt, double pv[2][3], double upv[2][3]);
-void iauPvup(double dt, double pv[2][3], double p[3]);
-void iauPvxpv(double a[2][3], double b[2][3], double axb[2][3]);
-void iauPxp(double a[3], double b[3], double axb[3]);
-void iauS2xpv(double s1, double s2, double pv[2][3], double spv[2][3]);
-void iauSxp(double s, double p[3], double sp[3]);
-void iauSxpv(double s, double pv[2][3], double spv[2][3]);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
diff --git a/cextern/sofa/sofam.h b/cextern/sofa/sofam.h
deleted file mode 100644
index a6fce72..0000000
--- a/cextern/sofa/sofam.h
+++ /dev/null
@@ -1,205 +0,0 @@
-#ifndef SOFAMHDEF
-#define SOFAMHDEF
-
-/*
-**  - - - - - - - -
-**   s o f a m . h
-**  - - - - - - - -
-**
-**  Macros used by SOFA library.
-**
-**  This file is part of the International Astronomical Union's
-**  SOFA (Standards Of Fundamental Astronomy) software collection.
-**
-**  Please note that the constants defined below are to be used only in
-**  the context of the SOFA software, and have no other official IAU
-**  status.
-**
-**  This revision:   2012 February 23
-**
-**  SOFA release 2012-03-01
-**
-**  Copyright (C) 2012 IAU SOFA Board.  See notes at end.
-*/
-
-#include "sofa.h"
-
-
-/* Pi */
-#define DPI (3.141592653589793238462643)
-
-/* 2Pi */
-#define D2PI (6.283185307179586476925287)
-
-/* Degrees to radians */
-#define DD2R (1.745329251994329576923691e-2)
-
-/* Radians to arcseconds */
-#define DR2AS (206264.8062470963551564734)
-
-/* Arcseconds to radians */
-#define DAS2R (4.848136811095359935899141e-6)
-
-/* Seconds of time to radians */
-#define DS2R (7.272205216643039903848712e-5)
-
-/* Arcseconds in a full circle */
-#define TURNAS (1296000.0)
-
-/* Milliarcseconds to radians */
-#define DMAS2R (DAS2R / 1e3)
-
-/* Length of tropical year B1900 (days) */
-#define DTY (365.242198781)
-
-/* Seconds per day. */
-#define DAYSEC (86400.0)
-
-/* Days per Julian year */
-#define DJY (365.25)
-
-/* Days per Julian century */
-#define DJC (36525.0)
-
-/* Days per Julian millennium */
-#define DJM (365250.0)
-
-/* Reference epoch (J2000.0), Julian Date */
-#define DJ00 (2451545.0)
-
-/* Julian Date of Modified Julian Date zero */
-#define DJM0 (2400000.5)
-
-/* Reference epoch (J2000.0), Modified Julian Date */
-#define DJM00 (51544.5)
-
-/* 1977 Jan 1.0 as MJD */
-#define DJM77 (43144.0)
-
-/* TT minus TAI (s) */
-#define TTMTAI (32.184)
-
-/* AU (m) */
-#define DAU (149597870e3)
-
-/* Speed of light (AU per day) */
-#define DC (DAYSEC / 499.004782)
-
-/* L_G = 1 - d(TT)/d(TCG) */
-#define ELG (6.969290134e-10)
-
-/* L_B = 1 - d(TDB)/d(TCB), and TDB (s) at TAI 1977/1/1.0 */
-#define ELB (1.550519768e-8)
-#define TDB0 (-6.55e-5)
-
-/* dint(A) - truncate to nearest whole number towards zero (double) */
-#define dint(A) ((A)<0.0?ceil(A):floor(A))
-
-/* dnint(A) - round to nearest whole number (double) */
-#define dnint(A) ((A)<0.0?ceil((A)-0.5):floor((A)+0.5))
-
-/* dsign(A,B) - magnitude of A with sign of B (double) */
-#define dsign(A,B) ((B)<0.0?-fabs(A):fabs(A))
-
-/* Reference ellipsoids */
-#define WGS84 1
-#define GRS80 2
-#define WGS72 3
-
-#endif
-
-/*----------------------------------------------------------------------
-**
-**  Copyright (C) 2012
-**  Standards Of Fundamental Astronomy Board
-**  of the International Astronomical Union.
-**
-**  =====================
-**  SOFA Software License
-**  =====================
-**
-**  NOTICE TO USER:
-**
-**  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-**  CONDITIONS WHICH APPLY TO ITS USE.
-**
-**  1. The Software is owned by the IAU SOFA Board ("SOFA").
-**
-**  2. Permission is granted to anyone to use the SOFA software for any
-**     purpose, including commercial applications, free of charge and
-**     without payment of royalties, subject to the conditions and
-**     restrictions listed below.
-**
-**  3. You (the user) may copy and distribute SOFA source code to others,
-**     and use and adapt its code and algorithms in your own software,
-**     on a world-wide, royalty-free basis.  That portion of your
-**     distribution that does not consist of intact and unchanged copies
-**     of SOFA source code files is a "derived work" that must comply
-**     with the following requirements:
-**
-**     a) Your work shall be marked or carry a statement that it
-**        (i) uses routines and computations derived by you from
-**        software provided by SOFA under license to you; and
-**        (ii) does not itself constitute software provided by and/or
-**        endorsed by SOFA.
-**
-**     b) The source code of your derived work must contain descriptions
-**        of how the derived work is based upon, contains and/or differs
-**        from the original SOFA software.
-**
-**     c) The names of all routines in your derived work shall not
-**        include the prefix "iau" or "sofa" or trivial modifications
-**        thereof such as changes of case.
-**
-**     d) The origin of the SOFA components of your derived work must
-**        not be misrepresented;  you must not claim that you wrote the
-**        original software, nor file a patent application for SOFA
-**        software or algorithms embedded in the SOFA software.
-**
-**     e) These requirements must be reproduced intact in any source
-**        distribution and shall apply to anyone to whom you have
-**        granted a further right to modify the source code of your
-**        derived work.
-**
-**     Note that, as originally distributed, the SOFA software is
-**     intended to be a definitive implementation of the IAU standards,
-**     and consequently third-party modifications are discouraged.  All
-**     variations, no matter how minor, must be explicitly marked as
-**     such, as explained above.
-**
-**  4. You shall not cause the SOFA software to be brought into
-**     disrepute, either by misuse, or use for inappropriate tasks, or
-**     by inappropriate modification.
-**
-**  5. The SOFA software is provided "as is" and SOFA makes no warranty
-**     as to its use or performance.   SOFA does not and cannot warrant
-**     the performance or results which the user may obtain by using the
-**     SOFA software.  SOFA makes no warranties, express or implied, as
-**     to non-infringement of third party rights, merchantability, or
-**     fitness for any particular purpose.  In no event will SOFA be
-**     liable to the user for any consequential, incidental, or special
-**     damages, including any lost profits or lost savings, even if a
-**     SOFA representative has been advised of such damages, or for any
-**     claim by any third party.
-**
-**  6. The provision of any version of the SOFA software under the terms
-**     and conditions specified herein does not imply that future
-**     versions will also be made available under the same terms and
-**     conditions.
-*
-**  In any published work or commercial product which uses the SOFA
-**  software directly, acknowledgement (see www.iausofa.org) is
-**  appreciated.
-**
-**  Correspondence concerning SOFA software should be addressed as
-**  follows:
-**
-**      By email:  sofa at ukho.gov.uk
-**      By post:   IAU SOFA Center
-**                 HM Nautical Almanac Office
-**                 UK Hydrographic Office
-**                 Admiralty Way, Taunton
-**                 Somerset, TA1 2DN
-**                 United Kingdom
-**
-**--------------------------------------------------------------------*/
diff --git a/cextern/wcslib/C/GNUmakefile b/cextern/wcslib/C/GNUmakefile
index 1500adc..bbc712f 100644
--- a/cextern/wcslib/C/GNUmakefile
+++ b/cextern/wcslib/C/GNUmakefile
@@ -1,5 +1,5 @@
 #-----------------------------------------------------------------------------
-# GNU makefile for building WCSLIB 4.16 and its test suite.
+# GNU makefile for building WCSLIB 4.19 and its test suite.
 #
 # Summary of the main targets
 # ---------------------------
@@ -31,7 +31,7 @@
 #
 # Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 # http://www.atnf.csiro.au/people/Mark.Calabretta
-# $Id: GNUmakefile,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+# $Id: GNUmakefile,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 #-----------------------------------------------------------------------------
 # Get configure settings.
 include ../makedefs
@@ -256,7 +256,7 @@ install : build
 	   fi
 	-  $(LN_S) $(WCSLIB) $(LIBDIR)/libwcs.a
 	-  if [ "$(SHRLIB)" != "" ] ; then \
-	     $(INSTALL) -m 644 $(SHRLIB) $(LIBDIR) ; \
+	     $(INSTALL) -m 755 $(SHRLIB) $(LIBDIR) ; \
 	     if [ -h "$(LIBDIR)/$(SONAME)" ] ; then \
 	       $(RM) $(LIBDIR)/$(SONAME) ; \
 	     fi ; \
@@ -344,7 +344,7 @@ getwcstab.o : getwcstab.c getwcstab.h
 
 $(PGSBOXLIB) :
 	-@ echo ''
-	   $(MAKE) -C ../pgsbox lib
+	   $(MAKE) -C ../pgsbox $(notdir $@)
 
 tofits : test/tofits.c
 	   $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
diff --git a/cextern/wcslib/C/cel.c b/cextern/wcslib/C/cel.c
index 18618d7..5415f35 100644
--- a/cextern/wcslib/C/cel.c
+++ b/cextern/wcslib/C/cel.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: cel.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: cel.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <math.h>
diff --git a/cextern/wcslib/C/cel.h b/cextern/wcslib/C/cel.h
index 7fd4210..ba76199 100644
--- a/cextern/wcslib/C/cel.h
+++ b/cextern/wcslib/C/cel.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: cel.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: cel.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the FITS World Coordinate System
+* WCSLIB 4.19 - C routines that implement the FITS World Coordinate System
 * (WCS) standard.  Refer to
 *
 *   "Representations of world coordinates in FITS",
diff --git a/cextern/wcslib/C/fitshdr.h b/cextern/wcslib/C/fitshdr.h
index 555d987..ddacb9d 100644
--- a/cextern/wcslib/C/fitshdr.h
+++ b/cextern/wcslib/C/fitshdr.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: fitshdr.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: fitshdr.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
 * The Flexible Image Transport System (FITS), a data format widely used in
diff --git a/cextern/wcslib/C/fitshdr.l b/cextern/wcslib/C/fitshdr.l
index a763282..d3fe6fb 100644
--- a/cextern/wcslib/C/fitshdr.l
+++ b/cextern/wcslib/C/fitshdr.l
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: fitshdr.l,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: fitshdr.l,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
 * fitshdr.l is a Flex description file containing a lexical scanner
diff --git a/cextern/wcslib/C/flexed/fitshdr.c b/cextern/wcslib/C/flexed/fitshdr.c
index f60f93c..c617924 100644
--- a/cextern/wcslib/C/flexed/fitshdr.c
+++ b/cextern/wcslib/C/flexed/fitshdr.c
@@ -10083,8 +10083,8 @@ char *fitshdrtext;
 #line 1 "fitshdr.l"
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -10105,7 +10105,7 @@ char *fitshdrtext;
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: fitshdr.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: fitshdr.c,v 4.19 2013/09/29 14:17:52 mcalabre Exp $
 *=============================================================================
 *
 * fitshdr.l is a Flex description file containing a lexical scanner
diff --git a/cextern/wcslib/C/flexed/wcsbth.c b/cextern/wcslib/C/flexed/wcsbth.c
index 52ef518..9d1c895 100644
--- a/cextern/wcslib/C/flexed/wcsbth.c
+++ b/cextern/wcslib/C/flexed/wcsbth.c
@@ -16669,8 +16669,8 @@ char *wcsbthtext;
 #line 1 "wcsbth.l"
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -16691,7 +16691,7 @@ char *wcsbthtext;
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsbth.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsbth.c,v 4.19 2013/09/29 14:17:52 mcalabre Exp $
 *=============================================================================
 *
 * wcsbth.l is a Flex description file containing the definition of a lexical
@@ -16761,6 +16761,7 @@ char *wcsbthtext;
 #include "wcs.h"
 #include "wcshdr.h"
 #include "wcsmath.h"
+#include "wcsprintf.h"
 #include "wcsutil.h"
 
 			/* Codes used for keyvalue data types. */
@@ -16841,7 +16842,7 @@ int wcsbth_vsource(void *wptr);
 
 int wcsbth_final(struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs);
 
-#line 16845 "wcsbth.c"
+#line 16846 "wcsbth.c"
 
 #define INITIAL 0
 #define CCCCCia 1
@@ -17047,7 +17048,7 @@ YY_DECL
 	register char *yy_cp, *yy_bp;
 	register int yy_act;
     
-#line 197 "wcsbth.l"
+#line 198 "wcsbth.l"
 
 	/* Keyword indices, as used in the WCS papers, e.g. iVn_ma, TPn_ka. */
 	char a;
@@ -17142,7 +17143,7 @@ YY_DECL
 	BEGIN(INITIAL);
 
 
-#line 17146 "wcsbth.c"
+#line 17147 "wcsbth.c"
 
 	if ( !(yy_init) )
 		{
@@ -17216,7 +17217,7 @@ do_action:	/* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 291 "wcsbth.l"
+#line 292 "wcsbth.l"
 {
 	  if (ipass == 1) {
 	    if (alts.ncol == 0) {
@@ -17234,7 +17235,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 306 "wcsbth.l"
+#line 307 "wcsbth.l"
 {
 	  keytype = IMGAXIS;
 	
@@ -17263,12 +17264,12 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 3:
-#line 334 "wcsbth.l"
-case 4:
 #line 335 "wcsbth.l"
+case 4:
+#line 336 "wcsbth.l"
 case 5:
 YY_RULE_SETUP
-#line 335 "wcsbth.l"
+#line 336 "wcsbth.l"
 {
 	  keytype = BIMGARR;
 	
@@ -17289,14 +17290,14 @@ YY_RULE_SETUP
 	YY_BREAK
 case 6:
 /* rule 6 can match eol */
-#line 354 "wcsbth.l"
+#line 355 "wcsbth.l"
 case 7:
 /* rule 7 can match eol */
-#line 355 "wcsbth.l"
+#line 356 "wcsbth.l"
 case 8:
 /* rule 8 can match eol */
 YY_RULE_SETUP
-#line 355 "wcsbth.l"
+#line 356 "wcsbth.l"
 {
 	  /* Cross-reference supplier. */
 	  keytype = BIMGARR;
@@ -17306,14 +17307,14 @@ YY_RULE_SETUP
 	YY_BREAK
 case 9:
 /* rule 9 can match eol */
-#line 363 "wcsbth.l"
+#line 364 "wcsbth.l"
 case 10:
 /* rule 10 can match eol */
-#line 364 "wcsbth.l"
+#line 365 "wcsbth.l"
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
-#line 364 "wcsbth.l"
+#line 365 "wcsbth.l"
 {
 	  /* Cross-reference consumer. */
 	  keytype = BIMGARR;
@@ -17323,7 +17324,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 371 "wcsbth.l"
+#line 372 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crpix);
@@ -17333,10 +17334,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 13:
-#line 380 "wcsbth.l"
+#line 381 "wcsbth.l"
 case 14:
 YY_RULE_SETUP
-#line 380 "wcsbth.l"
+#line 381 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crpix);
@@ -17352,10 +17353,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 15:
-#line 395 "wcsbth.l"
+#line 396 "wcsbth.l"
 case 16:
 YY_RULE_SETUP
-#line 395 "wcsbth.l"
+#line 396 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crpix);
@@ -17370,7 +17371,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 407 "wcsbth.l"
+#line 408 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.pc);
@@ -17382,7 +17383,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 416 "wcsbth.l"
+#line 417 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.pc);
@@ -17394,10 +17395,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 19:
-#line 427 "wcsbth.l"
+#line 428 "wcsbth.l"
 case 20:
 YY_RULE_SETUP
-#line 427 "wcsbth.l"
+#line 428 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.pc);
@@ -17413,7 +17414,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 440 "wcsbth.l"
+#line 441 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.cd);
@@ -17425,7 +17426,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 449 "wcsbth.l"
+#line 450 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.cd);
@@ -17437,10 +17438,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 23:
-#line 460 "wcsbth.l"
+#line 461 "wcsbth.l"
 case 24:
 YY_RULE_SETUP
-#line 460 "wcsbth.l"
+#line 461 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.cd);
@@ -17456,7 +17457,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 473 "wcsbth.l"
+#line 474 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.cdelt);
@@ -17466,10 +17467,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 26:
-#line 482 "wcsbth.l"
+#line 483 "wcsbth.l"
 case 27:
 YY_RULE_SETUP
-#line 482 "wcsbth.l"
+#line 483 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.cdelt);
@@ -17485,10 +17486,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 28:
-#line 497 "wcsbth.l"
+#line 498 "wcsbth.l"
 case 29:
 YY_RULE_SETUP
-#line 497 "wcsbth.l"
+#line 498 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.cdelt);
@@ -17503,7 +17504,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 509 "wcsbth.l"
+#line 510 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crota);
@@ -17515,7 +17516,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 518 "wcsbth.l"
+#line 519 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crota);
@@ -17529,7 +17530,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 529 "wcsbth.l"
+#line 530 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crota);
@@ -17541,7 +17542,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 538 "wcsbth.l"
+#line 539 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.cunit);
@@ -17551,10 +17552,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 34:
-#line 547 "wcsbth.l"
+#line 548 "wcsbth.l"
 case 35:
 YY_RULE_SETUP
-#line 547 "wcsbth.l"
+#line 548 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.cunit);
@@ -17570,10 +17571,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 36:
-#line 562 "wcsbth.l"
+#line 563 "wcsbth.l"
 case 37:
 YY_RULE_SETUP
-#line 562 "wcsbth.l"
+#line 563 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.cunit);
@@ -17588,7 +17589,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 574 "wcsbth.l"
+#line 575 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.ctype);
@@ -17598,10 +17599,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 39:
-#line 583 "wcsbth.l"
+#line 584 "wcsbth.l"
 case 40:
 YY_RULE_SETUP
-#line 583 "wcsbth.l"
+#line 584 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.ctype);
@@ -17617,10 +17618,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 41:
-#line 598 "wcsbth.l"
+#line 599 "wcsbth.l"
 case 42:
 YY_RULE_SETUP
-#line 598 "wcsbth.l"
+#line 599 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.ctype);
@@ -17635,7 +17636,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 610 "wcsbth.l"
+#line 611 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crval);
@@ -17645,10 +17646,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 44:
-#line 619 "wcsbth.l"
+#line 620 "wcsbth.l"
 case 45:
 YY_RULE_SETUP
-#line 619 "wcsbth.l"
+#line 620 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crval);
@@ -17664,10 +17665,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 46:
-#line 634 "wcsbth.l"
+#line 635 "wcsbth.l"
 case 47:
 YY_RULE_SETUP
-#line 634 "wcsbth.l"
+#line 635 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crval);
@@ -17681,10 +17682,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 48:
-#line 647 "wcsbth.l"
+#line 648 "wcsbth.l"
 case 49:
 YY_RULE_SETUP
-#line 647 "wcsbth.l"
+#line 648 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.lonpole);
@@ -17698,10 +17699,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 50:
-#line 660 "wcsbth.l"
+#line 661 "wcsbth.l"
 case 51:
 YY_RULE_SETUP
-#line 660 "wcsbth.l"
+#line 661 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.latpole);
@@ -17715,12 +17716,12 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 52:
-#line 673 "wcsbth.l"
-case 53:
 #line 674 "wcsbth.l"
+case 53:
+#line 675 "wcsbth.l"
 case 54:
 YY_RULE_SETUP
-#line 674 "wcsbth.l"
+#line 675 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.restfrq);
@@ -17738,10 +17739,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 55:
-#line 691 "wcsbth.l"
+#line 692 "wcsbth.l"
 case 56:
 YY_RULE_SETUP
-#line 691 "wcsbth.l"
+#line 692 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.restwav);
@@ -17756,7 +17757,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 703 "wcsbth.l"
+#line 704 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.pv);
@@ -17767,10 +17768,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 58:
-#line 713 "wcsbth.l"
+#line 714 "wcsbth.l"
 case 59:
 YY_RULE_SETUP
-#line 713 "wcsbth.l"
+#line 714 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.pv);
@@ -17787,10 +17788,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 60:
-#line 729 "wcsbth.l"
+#line 730 "wcsbth.l"
 case 61:
 YY_RULE_SETUP
-#line 729 "wcsbth.l"
+#line 730 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.pv);
@@ -17806,7 +17807,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 742 "wcsbth.l"
+#line 743 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.pv);
@@ -17817,7 +17818,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 750 "wcsbth.l"
+#line 751 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.ps);
@@ -17828,10 +17829,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 64:
-#line 760 "wcsbth.l"
+#line 761 "wcsbth.l"
 case 65:
 YY_RULE_SETUP
-#line 760 "wcsbth.l"
+#line 761 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.ps);
@@ -17848,10 +17849,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 66:
-#line 776 "wcsbth.l"
+#line 777 "wcsbth.l"
 case 67:
 YY_RULE_SETUP
-#line 776 "wcsbth.l"
+#line 777 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.ps);
@@ -17867,7 +17868,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 789 "wcsbth.l"
+#line 790 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.cname);
@@ -17877,10 +17878,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 69:
-#line 798 "wcsbth.l"
+#line 799 "wcsbth.l"
 case 70:
 YY_RULE_SETUP
-#line 798 "wcsbth.l"
+#line 799 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.cname);
@@ -17897,10 +17898,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 71:
-#line 814 "wcsbth.l"
+#line 815 "wcsbth.l"
 case 72:
 YY_RULE_SETUP
-#line 814 "wcsbth.l"
+#line 815 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = &(wcstem.cname);
@@ -17916,7 +17917,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 827 "wcsbth.l"
+#line 828 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crder);
@@ -17926,10 +17927,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 74:
-#line 836 "wcsbth.l"
+#line 837 "wcsbth.l"
 case 75:
 YY_RULE_SETUP
-#line 836 "wcsbth.l"
+#line 837 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crder);
@@ -17946,10 +17947,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 76:
-#line 852 "wcsbth.l"
+#line 853 "wcsbth.l"
 case 77:
 YY_RULE_SETUP
-#line 852 "wcsbth.l"
+#line 853 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.crder);
@@ -17965,7 +17966,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 865 "wcsbth.l"
+#line 866 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.csyer);
@@ -17975,10 +17976,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 79:
-#line 874 "wcsbth.l"
+#line 875 "wcsbth.l"
 case 80:
 YY_RULE_SETUP
-#line 874 "wcsbth.l"
+#line 875 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.csyer);
@@ -17995,10 +17996,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 81:
-#line 890 "wcsbth.l"
+#line 891 "wcsbth.l"
 case 82:
 YY_RULE_SETUP
-#line 890 "wcsbth.l"
+#line 891 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.csyer);
@@ -18013,10 +18014,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 83:
-#line 904 "wcsbth.l"
+#line 905 "wcsbth.l"
 case 84:
 YY_RULE_SETUP
-#line 904 "wcsbth.l"
+#line 905 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = wcstem.dateavg;
@@ -18031,7 +18032,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 916 "wcsbth.l"
+#line 917 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = wcstem.dateobs;
@@ -18041,12 +18042,12 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 86:
-#line 925 "wcsbth.l"
-case 87:
 #line 926 "wcsbth.l"
+case 87:
+#line 927 "wcsbth.l"
 case 88:
 YY_RULE_SETUP
-#line 926 "wcsbth.l"
+#line 927 "wcsbth.l"
 {
 	  if (relax & WCSHDR_DOBSn) {
 	    valtype = STRING;
@@ -18068,7 +18069,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 945 "wcsbth.l"
+#line 946 "wcsbth.l"
 {
 	  sscanf(wcsbthtext, "EPOCH%c", &a);
 	
@@ -18093,10 +18094,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 90:
-#line 969 "wcsbth.l"
+#line 970 "wcsbth.l"
 case 91:
 YY_RULE_SETUP
-#line 969 "wcsbth.l"
+#line 970 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.equinox);
@@ -18110,10 +18111,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 92:
-#line 982 "wcsbth.l"
+#line 983 "wcsbth.l"
 case 93:
 YY_RULE_SETUP
-#line 982 "wcsbth.l"
+#line 983 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.mjdavg);
@@ -18127,10 +18128,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 94:
-#line 995 "wcsbth.l"
+#line 996 "wcsbth.l"
 case 95:
 YY_RULE_SETUP
-#line 995 "wcsbth.l"
+#line 996 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.mjdobs);
@@ -18144,10 +18145,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 96:
-#line 1008 "wcsbth.l"
+#line 1009 "wcsbth.l"
 case 97:
 YY_RULE_SETUP
-#line 1008 "wcsbth.l"
+#line 1009 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = wcstem.obsgeo;
@@ -18161,10 +18162,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 98:
-#line 1021 "wcsbth.l"
+#line 1022 "wcsbth.l"
 case 99:
 YY_RULE_SETUP
-#line 1021 "wcsbth.l"
+#line 1022 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = wcstem.obsgeo + 1;
@@ -18178,10 +18179,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 100:
-#line 1034 "wcsbth.l"
+#line 1035 "wcsbth.l"
 case 101:
 YY_RULE_SETUP
-#line 1034 "wcsbth.l"
+#line 1035 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = wcstem.obsgeo + 2;
@@ -18195,10 +18196,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 102:
-#line 1047 "wcsbth.l"
+#line 1048 "wcsbth.l"
 case 103:
 YY_RULE_SETUP
-#line 1047 "wcsbth.l"
+#line 1048 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = wcstem.radesys;
@@ -18213,7 +18214,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 1059 "wcsbth.l"
+#line 1060 "wcsbth.l"
 {
 	  if (relax & WCSHDR_RADECSYS) {
 	    valtype = STRING;
@@ -18235,10 +18236,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 105:
-#line 1080 "wcsbth.l"
+#line 1081 "wcsbth.l"
 case 106:
 YY_RULE_SETUP
-#line 1080 "wcsbth.l"
+#line 1081 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = wcstem.specsys;
@@ -18252,10 +18253,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 107:
-#line 1093 "wcsbth.l"
+#line 1094 "wcsbth.l"
 case 108:
 YY_RULE_SETUP
-#line 1093 "wcsbth.l"
+#line 1094 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = wcstem.ssysobs;
@@ -18269,10 +18270,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 109:
-#line 1106 "wcsbth.l"
+#line 1107 "wcsbth.l"
 case 110:
 YY_RULE_SETUP
-#line 1106 "wcsbth.l"
+#line 1107 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = wcstem.ssyssrc;
@@ -18286,10 +18287,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 111:
-#line 1119 "wcsbth.l"
+#line 1120 "wcsbth.l"
 case 112:
 YY_RULE_SETUP
-#line 1119 "wcsbth.l"
+#line 1120 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.velosys);
@@ -18303,10 +18304,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 113:
-#line 1132 "wcsbth.l"
+#line 1133 "wcsbth.l"
 case 114:
 YY_RULE_SETUP
-#line 1132 "wcsbth.l"
+#line 1133 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.velangl);
@@ -18321,7 +18322,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 1144 "wcsbth.l"
+#line 1145 "wcsbth.l"
 {
 	  sscanf(wcsbthtext, "VELREF%c", &a);
 	
@@ -18346,7 +18347,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 1166 "wcsbth.l"
+#line 1167 "wcsbth.l"
 {
 	  if (relax & WCSHDR_VSOURCE) {
 	    valtype = FLOAT;
@@ -18369,12 +18370,12 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 117:
-#line 1188 "wcsbth.l"
-case 118:
 #line 1189 "wcsbth.l"
+case 118:
+#line 1190 "wcsbth.l"
 case 119:
 YY_RULE_SETUP
-#line 1189 "wcsbth.l"
+#line 1190 "wcsbth.l"
 {
 	  if (relax & WCSHDR_VSOURCE) {
 	    valtype = FLOAT;
@@ -18397,12 +18398,12 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 120:
-#line 1211 "wcsbth.l"
-case 121:
 #line 1212 "wcsbth.l"
+case 121:
+#line 1213 "wcsbth.l"
 case 122:
 YY_RULE_SETUP
-#line 1212 "wcsbth.l"
+#line 1213 "wcsbth.l"
 {
 	  valtype = STRING;
 	  vptr = wcstem.wcsname;
@@ -18416,10 +18417,10 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 123:
-#line 1225 "wcsbth.l"
+#line 1226 "wcsbth.l"
 case 124:
 YY_RULE_SETUP
-#line 1225 "wcsbth.l"
+#line 1226 "wcsbth.l"
 {
 	  valtype = FLOAT;
 	  vptr = &(wcstem.zsource);
@@ -18434,7 +18435,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 1237 "wcsbth.l"
+#line 1238 "wcsbth.l"
 {
 	  yyless(0);
 	  if (wcsbth_nkeyrec) {
@@ -18448,17 +18449,17 @@ YY_RULE_SETUP
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 1248 "wcsbth.l"
+#line 1249 "wcsbth.l"
 {
 	  yyless(0);
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 127:
-#line 1254 "wcsbth.l"
+#line 1255 "wcsbth.l"
 case 128:
 YY_RULE_SETUP
-#line 1254 "wcsbth.l"
+#line 1255 "wcsbth.l"
 {
 	  /* Image-header keyword. */
 	  keytype = IMGAXIS;
@@ -18480,7 +18481,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 1273 "wcsbth.l"
+#line 1274 "wcsbth.l"
 {
 	  /* Invalid axis number in image-header keyword. */
 	  keytype = IMGAXIS;
@@ -18496,18 +18497,18 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 130:
-#line 1288 "wcsbth.l"
-case 131:
 #line 1289 "wcsbth.l"
-case 132:
+case 131:
 #line 1290 "wcsbth.l"
-case 133:
+case 132:
 #line 1291 "wcsbth.l"
-case 134:
+case 133:
 #line 1292 "wcsbth.l"
+case 134:
+#line 1293 "wcsbth.l"
 case 135:
 YY_RULE_SETUP
-#line 1292 "wcsbth.l"
+#line 1293 "wcsbth.l"
 {
 	  if (vptr) {
 	    WCSBTH_PUTBACK;
@@ -18525,14 +18526,14 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 136:
-#line 1309 "wcsbth.l"
-case 137:
 #line 1310 "wcsbth.l"
-case 138:
+case 137:
 #line 1311 "wcsbth.l"
+case 138:
+#line 1312 "wcsbth.l"
 case 139:
 YY_RULE_SETUP
-#line 1311 "wcsbth.l"
+#line 1312 "wcsbth.l"
 {
 	  if (vptr && (relax & WCSHDR_LONGKEY)) {
 	    WCSBTH_PUTBACK;
@@ -18558,27 +18559,27 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 140:
-#line 1336 "wcsbth.l"
+#line 1337 "wcsbth.l"
 case 141:
 YY_RULE_SETUP
-#line 1336 "wcsbth.l"
+#line 1337 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 142:
-#line 1341 "wcsbth.l"
-case 143:
 #line 1342 "wcsbth.l"
-case 144:
+case 143:
 #line 1343 "wcsbth.l"
-case 145:
+case 144:
 #line 1344 "wcsbth.l"
-case 146:
+case 145:
 #line 1345 "wcsbth.l"
+case 146:
+#line 1346 "wcsbth.l"
 case 147:
 YY_RULE_SETUP
-#line 1345 "wcsbth.l"
+#line 1346 "wcsbth.l"
 {
 	  sscanf(wcsbthtext, "%d%c", &n, &a);
 	  if (YY_START == TCCCna) i = wcsbth_colax(*wcs, &alts, n, a);
@@ -18587,23 +18588,23 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 148:
-#line 1353 "wcsbth.l"
+#line 1354 "wcsbth.l"
 case 149:
 YY_RULE_SETUP
-#line 1353 "wcsbth.l"
+#line 1354 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 150:
-#line 1358 "wcsbth.l"
-case 151:
 #line 1359 "wcsbth.l"
-case 152:
+case 151:
 #line 1360 "wcsbth.l"
+case 152:
+#line 1361 "wcsbth.l"
 case 153:
 YY_RULE_SETUP
-#line 1360 "wcsbth.l"
+#line 1361 "wcsbth.l"
 {
 	  /* Image-header keyword. */
 	  if (relax & WCSHDR_ALLIMG) {
@@ -18624,18 +18625,18 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 154:
-#line 1380 "wcsbth.l"
-case 155:
 #line 1381 "wcsbth.l"
-case 156:
+case 155:
 #line 1382 "wcsbth.l"
-case 157:
+case 156:
 #line 1383 "wcsbth.l"
-case 158:
+case 157:
 #line 1384 "wcsbth.l"
+case 158:
+#line 1385 "wcsbth.l"
 case 159:
 YY_RULE_SETUP
-#line 1384 "wcsbth.l"
+#line 1385 "wcsbth.l"
 {
 	  /* Invalid axis number in image-header keyword. */
 	  if (relax & WCSHDR_ALLIMG) {
@@ -18652,7 +18653,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 160:
 YY_RULE_SETUP
-#line 1398 "wcsbth.l"
+#line 1399 "wcsbth.l"
 {
 	  /* This covers the defunct forms CD00i00j and PC00i00j. */
 	  if (((relax & WCSHDR_PC00i00j) && (altlin == 1)) ||
@@ -18676,18 +18677,18 @@ YY_RULE_SETUP
 	YY_BREAK
 case 161:
 YY_RULE_SETUP
-#line 1419 "wcsbth.l"
+#line 1420 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 162:
-#line 1424 "wcsbth.l"
-case 163:
 #line 1425 "wcsbth.l"
+case 163:
+#line 1426 "wcsbth.l"
 case 164:
 YY_RULE_SETUP
-#line 1425 "wcsbth.l"
+#line 1426 "wcsbth.l"
 {
 	  sscanf(wcsbthtext, "%d%c", &n, &a);
 	  keytype = BIMGARR;
@@ -18695,18 +18696,18 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 165:
-#line 1432 "wcsbth.l"
-case 166:
 #line 1433 "wcsbth.l"
-case 167:
+case 166:
 #line 1434 "wcsbth.l"
-case 168:
+case 167:
 #line 1435 "wcsbth.l"
-case 169:
+case 168:
 #line 1436 "wcsbth.l"
+case 169:
+#line 1437 "wcsbth.l"
 case 170:
 YY_RULE_SETUP
-#line 1436 "wcsbth.l"
+#line 1437 "wcsbth.l"
 {
 	  if (relax & WCSHDR_LONGKEY) {
 	    WCSBTH_PUTBACK;
@@ -18725,24 +18726,24 @@ YY_RULE_SETUP
 	YY_BREAK
 case 171:
 YY_RULE_SETUP
-#line 1452 "wcsbth.l"
+#line 1453 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 172:
-#line 1457 "wcsbth.l"
-case 173:
 #line 1458 "wcsbth.l"
-case 174:
+case 173:
 #line 1459 "wcsbth.l"
-case 175:
+case 174:
 #line 1460 "wcsbth.l"
-case 176:
+case 175:
 #line 1461 "wcsbth.l"
+case 176:
+#line 1462 "wcsbth.l"
 case 177:
 YY_RULE_SETUP
-#line 1461 "wcsbth.l"
+#line 1462 "wcsbth.l"
 {
 	  sscanf(wcsbthtext, "%d_%d%c", &n, &k, &a);
 	  i = wcsbth_colax(*wcs, &alts, n, a);
@@ -18752,14 +18753,14 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 178:
-#line 1470 "wcsbth.l"
-case 179:
 #line 1471 "wcsbth.l"
-case 180:
+case 179:
 #line 1472 "wcsbth.l"
+case 180:
+#line 1473 "wcsbth.l"
 case 181:
 YY_RULE_SETUP
-#line 1472 "wcsbth.l"
+#line 1473 "wcsbth.l"
 {
 	  sscanf(wcsbthtext, "%d_%d", &n, &k);
 	  a = ' ';
@@ -18771,26 +18772,26 @@ YY_RULE_SETUP
 	YY_BREAK
 case 182:
 YY_RULE_SETUP
-#line 1481 "wcsbth.l"
+#line 1482 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 183:
-#line 1486 "wcsbth.l"
+#line 1487 "wcsbth.l"
 case 184:
 YY_RULE_SETUP
-#line 1486 "wcsbth.l"
+#line 1487 "wcsbth.l"
 {
 	  yyless(0);
 	  BEGIN(CCCCCia);
 	}
 	YY_BREAK
 case 185:
-#line 1492 "wcsbth.l"
+#line 1493 "wcsbth.l"
 case 186:
 YY_RULE_SETUP
-#line 1492 "wcsbth.l"
+#line 1493 "wcsbth.l"
 {
 	  if (relax & WCSHDR_CROTAia) {
 	    yyless(0);
@@ -18808,38 +18809,38 @@ YY_RULE_SETUP
 	YY_BREAK
 case 187:
 YY_RULE_SETUP
-#line 1507 "wcsbth.l"
+#line 1508 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 188:
-#line 1512 "wcsbth.l"
-case 189:
 #line 1513 "wcsbth.l"
-case 190:
+case 189:
 #line 1514 "wcsbth.l"
-case 191:
+case 190:
 #line 1515 "wcsbth.l"
-case 192:
+case 191:
 #line 1516 "wcsbth.l"
+case 192:
+#line 1517 "wcsbth.l"
 case 193:
 YY_RULE_SETUP
-#line 1516 "wcsbth.l"
+#line 1517 "wcsbth.l"
 {
 	  WCSBTH_PUTBACK;
 	  BEGIN((YY_START == iCROTn) ? iCCCna : TCCCna);
 	}
 	YY_BREAK
 case 194:
-#line 1522 "wcsbth.l"
-case 195:
 #line 1523 "wcsbth.l"
-case 196:
+case 195:
 #line 1524 "wcsbth.l"
+case 196:
+#line 1525 "wcsbth.l"
 case 197:
 YY_RULE_SETUP
-#line 1524 "wcsbth.l"
+#line 1525 "wcsbth.l"
 {
 	  if (relax & WCSHDR_CROTAia) {
 	    WCSBTH_PUTBACK;
@@ -18858,19 +18859,19 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 198:
-#line 1542 "wcsbth.l"
+#line 1543 "wcsbth.l"
 case 199:
 YY_RULE_SETUP
-#line 1542 "wcsbth.l"
+#line 1543 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 200:
-#line 1547 "wcsbth.l"
+#line 1548 "wcsbth.l"
 case 201:
 YY_RULE_SETUP
-#line 1547 "wcsbth.l"
+#line 1548 "wcsbth.l"
 {
 	  /* Image-header keyword. */
 	  if (relax & (WCSHDR_AUXIMG | WCSHDR_ALLIMG)) {
@@ -18897,22 +18898,22 @@ YY_RULE_SETUP
 	YY_BREAK
 case 202:
 YY_RULE_SETUP
-#line 1571 "wcsbth.l"
+#line 1572 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 203:
-#line 1576 "wcsbth.l"
-case 204:
 #line 1577 "wcsbth.l"
-case 205:
+case 204:
 #line 1578 "wcsbth.l"
-case 206:
+case 205:
 #line 1579 "wcsbth.l"
+case 206:
+#line 1580 "wcsbth.l"
 case 207:
 YY_RULE_SETUP
-#line 1579 "wcsbth.l"
+#line 1580 "wcsbth.l"
 {
 	  sscanf(wcsbthtext, "%d%c", &n, &a);
 	  keytype = BINTAB;
@@ -18921,7 +18922,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 208:
 YY_RULE_SETUP
-#line 1585 "wcsbth.l"
+#line 1586 "wcsbth.l"
 {
 	  sscanf(wcsbthtext, "%d", &n);
 	  a = ' ';
@@ -18930,29 +18931,29 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 209:
-#line 1593 "wcsbth.l"
+#line 1594 "wcsbth.l"
 case 210:
 YY_RULE_SETUP
-#line 1593 "wcsbth.l"
+#line 1594 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 211:
-#line 1598 "wcsbth.l"
-case 212:
 #line 1599 "wcsbth.l"
-case 213:
+case 212:
 #line 1600 "wcsbth.l"
-case 214:
+case 213:
 #line 1601 "wcsbth.l"
-case 215:
+case 214:
 #line 1602 "wcsbth.l"
-case 216:
+case 215:
 #line 1603 "wcsbth.l"
+case 216:
+#line 1604 "wcsbth.l"
 case 217:
 YY_RULE_SETUP
-#line 1603 "wcsbth.l"
+#line 1604 "wcsbth.l"
 {
 	  sscanf(wcsbthtext, "%d", &n);
 	  a = 0;
@@ -18961,23 +18962,23 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 218:
-#line 1611 "wcsbth.l"
+#line 1612 "wcsbth.l"
 case 219:
 YY_RULE_SETUP
-#line 1611 "wcsbth.l"
+#line 1612 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 220:
-#line 1616 "wcsbth.l"
-case 221:
 #line 1617 "wcsbth.l"
-case 222:
+case 221:
 #line 1618 "wcsbth.l"
+case 222:
+#line 1619 "wcsbth.l"
 case 223:
 YY_RULE_SETUP
-#line 1618 "wcsbth.l"
+#line 1619 "wcsbth.l"
 {
 	  /* Image-header keyword. */
 	  if (relax & WCSHDR_ALLIMG) {
@@ -18998,18 +18999,18 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 224:
-#line 1638 "wcsbth.l"
-case 225:
 #line 1639 "wcsbth.l"
-case 226:
+case 225:
 #line 1640 "wcsbth.l"
-case 227:
+case 226:
 #line 1641 "wcsbth.l"
-case 228:
+case 227:
 #line 1642 "wcsbth.l"
+case 228:
+#line 1643 "wcsbth.l"
 case 229:
 YY_RULE_SETUP
-#line 1642 "wcsbth.l"
+#line 1643 "wcsbth.l"
 {
 	  /* Invalid parameter in image-header keyword. */
 	  if (relax & WCSHDR_ALLIMG) {
@@ -19026,36 +19027,36 @@ YY_RULE_SETUP
 	YY_BREAK
 case 230:
 YY_RULE_SETUP
-#line 1656 "wcsbth.l"
+#line 1657 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 231:
-#line 1661 "wcsbth.l"
-case 232:
 #line 1662 "wcsbth.l"
-case 233:
+case 232:
 #line 1663 "wcsbth.l"
-case 234:
+case 233:
 #line 1664 "wcsbth.l"
-case 235:
+case 234:
 #line 1665 "wcsbth.l"
-case 236:
+case 235:
 #line 1666 "wcsbth.l"
-case 237:
+case 236:
 #line 1667 "wcsbth.l"
-case 238:
+case 237:
 #line 1668 "wcsbth.l"
-case 239:
+case 238:
 #line 1669 "wcsbth.l"
-case 240:
+case 239:
 #line 1670 "wcsbth.l"
-case 241:
+case 240:
 #line 1671 "wcsbth.l"
+case 241:
+#line 1672 "wcsbth.l"
 case 242:
 YY_RULE_SETUP
-#line 1671 "wcsbth.l"
+#line 1672 "wcsbth.l"
 {
 	  if (relax & WCSHDR_LONGKEY) {
 	    WCSBTH_PUTBACK;
@@ -19073,39 +19074,39 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 243:
-#line 1688 "wcsbth.l"
+#line 1689 "wcsbth.l"
 case 244:
 YY_RULE_SETUP
-#line 1688 "wcsbth.l"
+#line 1689 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 245:
-#line 1693 "wcsbth.l"
-case 246:
 #line 1694 "wcsbth.l"
-case 247:
+case 246:
 #line 1695 "wcsbth.l"
-case 248:
+case 247:
 #line 1696 "wcsbth.l"
-case 249:
+case 248:
 #line 1697 "wcsbth.l"
-case 250:
+case 249:
 #line 1698 "wcsbth.l"
-case 251:
+case 250:
 #line 1699 "wcsbth.l"
-case 252:
+case 251:
 #line 1700 "wcsbth.l"
-case 253:
+case 252:
 #line 1701 "wcsbth.l"
-case 254:
+case 253:
 #line 1702 "wcsbth.l"
-case 255:
+case 254:
 #line 1703 "wcsbth.l"
+case 255:
+#line 1704 "wcsbth.l"
 case 256:
 YY_RULE_SETUP
-#line 1703 "wcsbth.l"
+#line 1704 "wcsbth.l"
 {
 	  sscanf(wcsbthtext, "%d_%d%c", &n, &m, &a);
 	  if (YY_START == TCn_ma) i = wcsbth_colax(*wcs, &alts, n, a);
@@ -19114,22 +19115,22 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 257:
-#line 1711 "wcsbth.l"
-case 258:
 #line 1712 "wcsbth.l"
-case 259:
+case 258:
 #line 1713 "wcsbth.l"
-case 260:
+case 259:
 #line 1714 "wcsbth.l"
-case 261:
+case 260:
 #line 1715 "wcsbth.l"
-case 262:
+case 261:
 #line 1716 "wcsbth.l"
-case 263:
+case 262:
 #line 1717 "wcsbth.l"
+case 263:
+#line 1718 "wcsbth.l"
 case 264:
 YY_RULE_SETUP
-#line 1717 "wcsbth.l"
+#line 1718 "wcsbth.l"
 {
 	  /* Invalid combinations will be flagged by <VALUE>. */
 	  sscanf(wcsbthtext, "%d_%d", &n, &m);
@@ -19140,17 +19141,17 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 265:
-#line 1727 "wcsbth.l"
+#line 1728 "wcsbth.l"
 case 266:
 YY_RULE_SETUP
-#line 1727 "wcsbth.l"
+#line 1728 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 267:
 YY_RULE_SETUP
-#line 1731 "wcsbth.l"
+#line 1732 "wcsbth.l"
 {
 	  if (relax & WCSHDR_PROJPn) {
 	    sscanf(wcsbthtext, "%d", &m);
@@ -19171,14 +19172,14 @@ YY_RULE_SETUP
 	YY_BREAK
 case 268:
 YY_RULE_SETUP
-#line 1749 "wcsbth.l"
+#line 1750 "wcsbth.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 269:
 YY_RULE_SETUP
-#line 1753 "wcsbth.l"
+#line 1754 "wcsbth.l"
 {
 	  /* Do checks on i, j, m, n, k. */
 	  if (!(keytype & keysel)) {
@@ -19248,7 +19249,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 270:
 YY_RULE_SETUP
-#line 1820 "wcsbth.l"
+#line 1821 "wcsbth.l"
 {
 	  errmsg = "Invalid KEYWORD = VALUE syntax";
 	  BEGIN(ERROR);
@@ -19256,7 +19257,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 271:
 YY_RULE_SETUP
-#line 1825 "wcsbth.l"
+#line 1826 "wcsbth.l"
 {
 	  if (ipass == 1) {
 	    /* Do first-pass bookkeeping. */
@@ -19282,7 +19283,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 272:
 YY_RULE_SETUP
-#line 1848 "wcsbth.l"
+#line 1849 "wcsbth.l"
 {
 	  errmsg = "An integer value was expected";
 	  BEGIN(ERROR);
@@ -19290,7 +19291,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 273:
 YY_RULE_SETUP
-#line 1853 "wcsbth.l"
+#line 1854 "wcsbth.l"
 {
 	  if (ipass == 1) {
 	    /* Do first-pass bookkeeping. */
@@ -19337,7 +19338,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 274:
 YY_RULE_SETUP
-#line 1897 "wcsbth.l"
+#line 1898 "wcsbth.l"
 {
 	  errmsg = "A floating-point value was expected";
 	  BEGIN(ERROR);
@@ -19346,7 +19347,7 @@ YY_RULE_SETUP
 case 275:
 /* rule 275 can match eol */
 YY_RULE_SETUP
-#line 1902 "wcsbth.l"
+#line 1903 "wcsbth.l"
 {
 	  if (ipass == 1) {
 	    /* Do first-pass bookkeeping. */
@@ -19401,24 +19402,24 @@ YY_RULE_SETUP
 	YY_BREAK
 case 276:
 YY_RULE_SETUP
-#line 1954 "wcsbth.l"
+#line 1955 "wcsbth.l"
 {
 	  errmsg = "A string value was expected";
 	  BEGIN(ERROR);
 	}
 	YY_BREAK
 case 277:
-#line 1960 "wcsbth.l"
+#line 1961 "wcsbth.l"
 case 278:
 YY_RULE_SETUP
-#line 1960 "wcsbth.l"
+#line 1961 "wcsbth.l"
 {
 	  BEGIN(FLUSH);
 	}
 	YY_BREAK
 case 279:
 YY_RULE_SETUP
-#line 1964 "wcsbth.l"
+#line 1965 "wcsbth.l"
 {
 	  errmsg = "Malformed keycomment";
 	  BEGIN(ERROR);
@@ -19426,7 +19427,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 280:
 YY_RULE_SETUP
-#line 1969 "wcsbth.l"
+#line 1970 "wcsbth.l"
 {
 	  if (ipass == npass) {
 	    if (ctrl < 0) {
@@ -19437,7 +19438,7 @@ YY_RULE_SETUP
 	      hptr += 80;
 	
 	    } else if (ctrl > 2) {
-	      fprintf(stderr, "%.80s\n  Discarded.\n", wcsbth_hdr-80);
+	      wcsfprintf(stderr, "%.80s\n  Discarded.\n", wcsbth_hdr-80);
 	    }
 	  }
 	
@@ -19446,7 +19447,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 281:
 YY_RULE_SETUP
-#line 1986 "wcsbth.l"
+#line 1987 "wcsbth.l"
 {
 	  (*nreject)++;
 	  if (ipass == npass) {
@@ -19459,7 +19460,7 @@ YY_RULE_SETUP
 	    }
 	
 	    if (abs(ctrl) > 1) {
-	      fprintf(stderr, "%.80s\n%4d: %s.\n", wcsbth_hdr-80, *nreject,
+	      wcsfprintf(stderr, "%.80s\n%4d: %s.\n", wcsbth_hdr-80, *nreject,
 	        errmsg);
 	    }
 	  }
@@ -19470,7 +19471,7 @@ YY_RULE_SETUP
 case 282:
 /* rule 282 can match eol */
 YY_RULE_SETUP
-#line 2006 "wcsbth.l"
+#line 2007 "wcsbth.l"
 {
 	  /* Throw away the rest of the line and reset for the next one. */
 	  i = j = 0;
@@ -19521,7 +19522,7 @@ case YY_STATE_EOF(COMMENT):
 case YY_STATE_EOF(DISCARD):
 case YY_STATE_EOF(ERROR):
 case YY_STATE_EOF(FLUSH):
-#line 2023 "wcsbth.l"
+#line 2024 "wcsbth.l"
 {
 	  /* End-of-input. */
 	  if (ipass == 1) {
@@ -19529,14 +19530,14 @@ case YY_STATE_EOF(FLUSH):
 	      wcsbthlex_destroy();
 	      return status;
 	    }
-
+	
 	    if (alts.imgherit) npass = 3;
 	
 	    if (abs(ctrl) > 2) {
 	      if (*nwcs == 1) {
-	        fprintf(stderr, "Found one coordinate representation.\n");
+	        wcsfprintf(stderr, "Found one coordinate representation.\n");
 	      } else {
-	        fprintf(stderr, "Found %d coordinate representations.\n",
+	        wcsfprintf(stderr, "Found %d coordinate representations.\n",
 	          *nwcs);
 	      }
 	    }
@@ -19568,7 +19569,8 @@ case YY_STATE_EOF(FLUSH):
 	    if (ctrl < 0) {
 	      *hptr = '\0';
 	    } else if (ctrl == 1) {
-	      fprintf(stderr, "%d WCS keyrecords were rejected.\n", *nreject);
+	      wcsfprintf(stderr, "%d WCS keyrecords were rejected.\n",
+	        *nreject);
 	    }
 	
 	    return wcsbth_final(&alts, nwcs, wcs);
@@ -19577,10 +19579,10 @@ case YY_STATE_EOF(FLUSH):
 	YY_BREAK
 case 283:
 YY_RULE_SETUP
-#line 2076 "wcsbth.l"
+#line 2078 "wcsbth.l"
 ECHO;
 	YY_BREAK
-#line 19584 "wcsbth.c"
+#line 19586 "wcsbth.c"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -20570,7 +20572,7 @@ void wcsbthfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 2076 "wcsbth.l"
+#line 2078 "wcsbth.l"
 
 
 
diff --git a/cextern/wcslib/C/flexed/wcspih.c b/cextern/wcslib/C/flexed/wcspih.c
index 8244346..c798c69 100644
--- a/cextern/wcslib/C/flexed/wcspih.c
+++ b/cextern/wcslib/C/flexed/wcspih.c
@@ -8153,8 +8153,8 @@ char *wcspihtext;
 #line 1 "wcspih.l"
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -8175,7 +8175,7 @@ char *wcspihtext;
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcspih.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcspih.c,v 4.19 2013/09/29 14:17:52 mcalabre Exp $
 *=============================================================================
 *
 * wcspih.l is a Flex description file containing the definition of a lexical
@@ -8238,6 +8238,7 @@ char *wcspihtext;
 #include "wcs.h"
 #include "wcshdr.h"
 #include "wcsmath.h"
+#include "wcsprintf.h"
 #include "wcsutil.h"
 
 #define INTEGER 0
@@ -8274,7 +8275,7 @@ void wcspih_naxes(int naxis, int i, int j, char a, int alts[], int *npptr);
 jmp_buf wcspih_abort_jmp_env;
 #define exit(status) longjmp(wcspih_abort_jmp_env, status)
 
-#line 8278 "wcspih.c"
+#line 8279 "wcspih.c"
 
 #define INITIAL 0
 #define CROTAi 1
@@ -8463,7 +8464,7 @@ YY_DECL
 	register char *yy_cp, *yy_bp;
 	register int yy_act;
     
-#line 146 "wcspih.l"
+#line 147 "wcspih.l"
 
 	/* Keyword indices, as used in the WCS papers, e.g. PCi_ja, PVi_ma. */
 	char a;
@@ -8522,7 +8523,7 @@ YY_DECL
 	BEGIN(INITIAL);
 
 
-#line 8526 "wcspih.c"
+#line 8527 "wcspih.c"
 
 	if ( !(yy_init) )
 		{
@@ -8596,7 +8597,7 @@ do_action:	/* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 204 "wcspih.l"
+#line 205 "wcspih.l"
 {
 	  if (pass == 1) {
 	    sscanf(wcspihtext, "NAXIS   = %d", &naxis);
@@ -8614,7 +8615,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 219 "wcspih.l"
+#line 220 "wcspih.l"
 {
 	  if (pass == 1) {
 	    sscanf(wcspihtext, "WCSAXES%c= %d", &a, &i);
@@ -8625,7 +8626,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 227 "wcspih.l"
+#line 228 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->crpix);
@@ -8634,7 +8635,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 233 "wcspih.l"
+#line 234 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->pc);
@@ -8644,7 +8645,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 240 "wcspih.l"
+#line 241 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->cd);
@@ -8654,7 +8655,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 247 "wcspih.l"
+#line 248 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->cdelt);
@@ -8663,7 +8664,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 253 "wcspih.l"
+#line 254 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->crota);
@@ -8673,7 +8674,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 260 "wcspih.l"
+#line 261 "wcspih.l"
 {
 	  valtype = STRING;
 	  if (pass == 2) vptr = &((*wcs)->cunit);
@@ -8682,7 +8683,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 266 "wcspih.l"
+#line 267 "wcspih.l"
 {
 	  valtype = STRING;
 	  if (pass == 2) vptr = &((*wcs)->ctype);
@@ -8691,7 +8692,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 272 "wcspih.l"
+#line 273 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->crval);
@@ -8700,7 +8701,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 278 "wcspih.l"
+#line 279 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->lonpole);
@@ -8709,7 +8710,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 284 "wcspih.l"
+#line 285 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->latpole);
@@ -8718,7 +8719,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 290 "wcspih.l"
+#line 291 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->restfrq);
@@ -8727,7 +8728,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 296 "wcspih.l"
+#line 297 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->restfrq);
@@ -8737,7 +8738,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 303 "wcspih.l"
+#line 304 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->restwav);
@@ -8746,7 +8747,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 309 "wcspih.l"
+#line 310 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->pv);
@@ -8756,7 +8757,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 316 "wcspih.l"
+#line 317 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->pv);
@@ -8766,7 +8767,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 323 "wcspih.l"
+#line 324 "wcspih.l"
 {
 	  valtype = STRING;
 	  if (pass == 2) vptr = &((*wcs)->ps);
@@ -8776,7 +8777,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 330 "wcspih.l"
+#line 331 "wcspih.l"
 {
 	  valtype = STRING;
 	  if (pass == 2) vptr = &((*wcs)->cname);
@@ -8785,7 +8786,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 336 "wcspih.l"
+#line 337 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->crder);
@@ -8794,7 +8795,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 342 "wcspih.l"
+#line 343 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->csyer);
@@ -8803,7 +8804,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 348 "wcspih.l"
+#line 349 "wcspih.l"
 {
 	  valtype = STRING;
 	  if (pass == 2) vptr = (*wcs)->dateavg;
@@ -8813,7 +8814,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 355 "wcspih.l"
+#line 356 "wcspih.l"
 {
 	  valtype = STRING;
 	  if (pass == 2) vptr = (*wcs)->dateobs;
@@ -8823,7 +8824,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 362 "wcspih.l"
+#line 363 "wcspih.l"
 {
 	  sscanf(wcspihtext, "EPOCH%c", &a);
 	
@@ -8850,7 +8851,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 386 "wcspih.l"
+#line 387 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->equinox);
@@ -8859,7 +8860,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 392 "wcspih.l"
+#line 393 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->mjdavg);
@@ -8869,7 +8870,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 399 "wcspih.l"
+#line 400 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->mjdobs);
@@ -8879,7 +8880,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 406 "wcspih.l"
+#line 407 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = (*wcs)->obsgeo;
@@ -8889,7 +8890,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 413 "wcspih.l"
+#line 414 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = (*wcs)->obsgeo + 1;
@@ -8899,7 +8900,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 420 "wcspih.l"
+#line 421 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = (*wcs)->obsgeo + 2;
@@ -8909,7 +8910,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 427 "wcspih.l"
+#line 428 "wcspih.l"
 {
 	  valtype = STRING;
 	  if (pass == 2) vptr = (*wcs)->radesys;
@@ -8918,7 +8919,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 433 "wcspih.l"
+#line 434 "wcspih.l"
 {
 	  if (relax & WCSHDR_RADECSYS) {
 	    valtype = STRING;
@@ -8937,7 +8938,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 449 "wcspih.l"
+#line 450 "wcspih.l"
 {
 	  valtype = STRING;
 	  if (pass == 2) vptr = (*wcs)->specsys;
@@ -8946,7 +8947,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 455 "wcspih.l"
+#line 456 "wcspih.l"
 {
 	  valtype = STRING;
 	  if (pass == 2) vptr = (*wcs)->ssysobs;
@@ -8955,7 +8956,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 461 "wcspih.l"
+#line 462 "wcspih.l"
 {
 	  valtype = STRING;
 	  if (pass == 2) vptr = (*wcs)->ssyssrc;
@@ -8964,7 +8965,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 467 "wcspih.l"
+#line 468 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->velangl);
@@ -8973,7 +8974,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 473 "wcspih.l"
+#line 474 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->velosys);
@@ -8982,7 +8983,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 479 "wcspih.l"
+#line 480 "wcspih.l"
 {
 	  sscanf(wcspihtext, "VELREF%c", &a);
 	
@@ -9004,7 +9005,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 498 "wcspih.l"
+#line 499 "wcspih.l"
 {
 	  sscanf(wcspihtext, "VSOURCE%c", &a);
 	
@@ -9031,7 +9032,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 522 "wcspih.l"
+#line 523 "wcspih.l"
 {
 	  valtype = STRING;
 	  if (pass == 2) vptr = (*wcs)->wcsname;
@@ -9040,7 +9041,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 528 "wcspih.l"
+#line 529 "wcspih.l"
 {
 	  valtype = FLOAT;
 	  if (pass == 2) vptr = &((*wcs)->zsource);
@@ -9049,7 +9050,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 534 "wcspih.l"
+#line 535 "wcspih.l"
 {
 	  yyless(0);
 	  if (wcspih_nkeyrec) {
@@ -9063,16 +9064,16 @@ YY_RULE_SETUP
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 545 "wcspih.l"
+#line 546 "wcspih.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 44:
-#line 550 "wcspih.l"
+#line 551 "wcspih.l"
 case 45:
 YY_RULE_SETUP
-#line 550 "wcspih.l"
+#line 551 "wcspih.l"
 {
 	  sscanf(wcspihtext, "%d%c", &i, &a);
 	  idx = i - 1;
@@ -9081,7 +9082,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 556 "wcspih.l"
+#line 557 "wcspih.l"
 {
 	  /* Invalid axis number will be caught by <VALUE>. */
 	  sscanf(wcspihtext, "%3d", &i);
@@ -9090,20 +9091,20 @@ YY_RULE_SETUP
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 562 "wcspih.l"
+#line 563 "wcspih.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 48:
-#line 567 "wcspih.l"
-case 49:
 #line 568 "wcspih.l"
-case 50:
+case 49:
 #line 569 "wcspih.l"
+case 50:
+#line 570 "wcspih.l"
 case 51:
 YY_RULE_SETUP
-#line 569 "wcspih.l"
+#line 570 "wcspih.l"
 {
 	  sscanf(wcspihtext, "%d_%d%c", &i, &j, &a);
 	  if (pass == 2) {
@@ -9118,18 +9119,18 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 52:
-#line 583 "wcspih.l"
-case 53:
 #line 584 "wcspih.l"
-case 54:
+case 53:
 #line 585 "wcspih.l"
-case 55:
+case 54:
 #line 586 "wcspih.l"
-case 56:
+case 55:
 #line 587 "wcspih.l"
+case 56:
+#line 588 "wcspih.l"
 case 57:
 YY_RULE_SETUP
-#line 587 "wcspih.l"
+#line 588 "wcspih.l"
 {
 	  /* Invalid axis numbers will be caught by <VALUE>. */
 	  sscanf(wcspihtext, "%d_%d", &i, &j);
@@ -9138,7 +9139,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 593 "wcspih.l"
+#line 594 "wcspih.l"
 {
 	  /* This covers the defunct forms CD00i00j and PC00i00j. */
 	  if (((relax & WCSHDR_PC00i00j) && (altlin == 1)) ||
@@ -9163,16 +9164,16 @@ YY_RULE_SETUP
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 615 "wcspih.l"
+#line 616 "wcspih.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 60:
-#line 620 "wcspih.l"
+#line 621 "wcspih.l"
 case 61:
 YY_RULE_SETUP
-#line 620 "wcspih.l"
+#line 621 "wcspih.l"
 {
 	  sscanf(wcspihtext, "%d%c", &i, &a);
 	  if (a == ' ' || relax & WCSHDR_CROTAia) {
@@ -9190,7 +9191,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 635 "wcspih.l"
+#line 636 "wcspih.l"
 {
 	  sscanf(wcspihtext, "%d", &i);
 	  a = ' ';
@@ -9200,16 +9201,16 @@ YY_RULE_SETUP
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 642 "wcspih.l"
+#line 643 "wcspih.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 64:
-#line 647 "wcspih.l"
+#line 648 "wcspih.l"
 case 65:
 YY_RULE_SETUP
-#line 647 "wcspih.l"
+#line 648 "wcspih.l"
 {
 	  idx = -1;
 	
@@ -9224,20 +9225,20 @@ YY_RULE_SETUP
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 659 "wcspih.l"
+#line 660 "wcspih.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 67:
-#line 664 "wcspih.l"
-case 68:
 #line 665 "wcspih.l"
-case 69:
+case 68:
 #line 666 "wcspih.l"
+case 69:
+#line 667 "wcspih.l"
 case 70:
 YY_RULE_SETUP
-#line 666 "wcspih.l"
+#line 667 "wcspih.l"
 {
 	  sscanf(wcspihtext, "%d_%d%c", &i, &m, &a);
 	  idx = -1;
@@ -9245,18 +9246,18 @@ YY_RULE_SETUP
 	}
 	YY_BREAK
 case 71:
-#line 673 "wcspih.l"
-case 72:
 #line 674 "wcspih.l"
-case 73:
+case 72:
 #line 675 "wcspih.l"
-case 74:
+case 73:
 #line 676 "wcspih.l"
-case 75:
+case 74:
 #line 677 "wcspih.l"
+case 75:
+#line 678 "wcspih.l"
 case 76:
 YY_RULE_SETUP
-#line 677 "wcspih.l"
+#line 678 "wcspih.l"
 {
 	  /* Invalid parameters will be caught by <VALUE>. */
 	  sscanf(wcspihtext, "%d_%d", &i, &m);
@@ -9265,14 +9266,14 @@ YY_RULE_SETUP
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 683 "wcspih.l"
+#line 684 "wcspih.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 687 "wcspih.l"
+#line 688 "wcspih.l"
 {
 	  if (relax & WCSHDR_PROJPn) {
 	    sscanf(wcspihtext, "%d", &m);
@@ -9292,14 +9293,14 @@ YY_RULE_SETUP
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 704 "wcspih.l"
+#line 705 "wcspih.l"
 {
 	  BEGIN(DISCARD);
 	}
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 708 "wcspih.l"
+#line 709 "wcspih.l"
 {
 	  /* Do checks on i, j & m. */
 	  if (i > 99 || j > 99 || m > 99) {
@@ -9335,7 +9336,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 741 "wcspih.l"
+#line 742 "wcspih.l"
 {
 	  errmsg = "Invalid KEYWORD = VALUE syntax";
 	  BEGIN(ERROR);
@@ -9343,7 +9344,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 746 "wcspih.l"
+#line 747 "wcspih.l"
 {
 	  if (pass == 1) {
 	    wcspih_naxes(naxis, i, j, a, alts, npptr);
@@ -9387,7 +9388,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 787 "wcspih.l"
+#line 788 "wcspih.l"
 {
 	  errmsg = "An integer value was expected";
 	  BEGIN(ERROR);
@@ -9395,7 +9396,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 792 "wcspih.l"
+#line 793 "wcspih.l"
 {
 	  if (pass == 1) {
 	    wcspih_naxes(naxis, i, j, a, alts, npptr);
@@ -9451,7 +9452,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 845 "wcspih.l"
+#line 846 "wcspih.l"
 {
 	  errmsg = "A floating-point value was expected";
 	  BEGIN(ERROR);
@@ -9460,7 +9461,7 @@ YY_RULE_SETUP
 case 86:
 /* rule 86 can match eol */
 YY_RULE_SETUP
-#line 850 "wcspih.l"
+#line 851 "wcspih.l"
 {
 	  if (pass == 1) {
 	    wcspih_naxes(naxis, i, j, a, alts, npptr);
@@ -9528,24 +9529,24 @@ YY_RULE_SETUP
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 915 "wcspih.l"
+#line 916 "wcspih.l"
 {
 	  errmsg = "A string value was expected";
 	  BEGIN(ERROR);
 	}
 	YY_BREAK
 case 88:
-#line 921 "wcspih.l"
+#line 922 "wcspih.l"
 case 89:
 YY_RULE_SETUP
-#line 921 "wcspih.l"
+#line 922 "wcspih.l"
 {
 	  BEGIN(FLUSH);
 	}
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 925 "wcspih.l"
+#line 926 "wcspih.l"
 {
 	  errmsg = "Malformed keycomment";
 	  BEGIN(ERROR);
@@ -9553,7 +9554,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 930 "wcspih.l"
+#line 931 "wcspih.l"
 {
 	  if (pass == 2) {
 	    if (ctrl < 0) {
@@ -9561,7 +9562,7 @@ YY_RULE_SETUP
 	      keep = wcspih_hdr - 80;
 	
 	    } else if (ctrl > 2) {
-	      fprintf(stderr, "%.80s\n  Discarded.\n", wcspih_hdr-80);
+	      wcsfprintf(stderr, "%.80s\n  Discarded.\n", wcspih_hdr-80);
 	    }
 	  }
 	  BEGIN(FLUSH);
@@ -9569,7 +9570,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 943 "wcspih.l"
+#line 944 "wcspih.l"
 {
 	  (*nreject)++;
 	  if (pass == 2) {
@@ -9579,7 +9580,7 @@ YY_RULE_SETUP
 	    }
 	
 	    if (abs(ctrl%10) > 1) {
-	      fprintf(stderr, "%.80s\n%4d: %s.\n", wcspih_hdr-80, *nreject,
+	      wcsfprintf(stderr, "%.80s\n%4d: %s.\n", wcspih_hdr-80, *nreject,
 	        errmsg);
 	    }
 	  }
@@ -9589,7 +9590,7 @@ YY_RULE_SETUP
 case 93:
 /* rule 93 can match eol */
 YY_RULE_SETUP
-#line 959 "wcspih.l"
+#line 960 "wcspih.l"
 {
 	  if (pass == 2 && keep) {
 	    if (hptr < keep) {
@@ -9623,7 +9624,7 @@ case YY_STATE_EOF(COMMENT):
 case YY_STATE_EOF(DISCARD):
 case YY_STATE_EOF(ERROR):
 case YY_STATE_EOF(FLUSH):
-#line 976 "wcspih.l"
+#line 977 "wcspih.l"
 {
 	  /* End-of-input. */
 	  if (pass == 1) {
@@ -9636,10 +9637,10 @@ case YY_STATE_EOF(FLUSH):
 	    if (abs(ctrl%10) > 2) {
 	      if (*nwcs == 1) {
 	        if (strcmp(wcs[0]->wcsname, "DEFAULTS") != 0) {
-	          fprintf(stderr, "Found one coordinate representation.\n");
+	          wcsfprintf(stderr, "Found one coordinate representation.\n");
 	        }
 	      } else {
-	        fprintf(stderr, "Found %d coordinate representations.\n",
+	        wcsfprintf(stderr, "Found %d coordinate representations.\n",
 	          *nwcs);
 	      }
 	    }
@@ -9661,7 +9662,7 @@ case YY_STATE_EOF(FLUSH):
 	    if (ctrl < 0) {
 	      *hptr = '\0';
 	    } else if (ctrl == 1) {
-	      fprintf(stderr, "%d WCS keyrecords were rejected.\n",
+	      wcsfprintf(stderr, "%d WCS keyrecords were rejected.\n",
 	        *nreject);
 	    }
 	
@@ -9671,10 +9672,10 @@ case YY_STATE_EOF(FLUSH):
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 1021 "wcspih.l"
+#line 1022 "wcspih.l"
 ECHO;
 	YY_BREAK
-#line 9678 "wcspih.c"
+#line 9679 "wcspih.c"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -10664,7 +10665,7 @@ void wcspihfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 1021 "wcspih.l"
+#line 1022 "wcspih.l"
 
 
 
diff --git a/cextern/wcslib/C/flexed/wcsulex.c b/cextern/wcslib/C/flexed/wcsulex.c
index db7c603..69a60a2 100644
--- a/cextern/wcslib/C/flexed/wcsulex.c
+++ b/cextern/wcslib/C/flexed/wcsulex.c
@@ -6860,8 +6860,8 @@ char *wcsulextext;
 #line 1 "wcsulex.l"
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -6882,7 +6882,7 @@ char *wcsulextext;
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsulex.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsulex.c,v 4.19 2013/09/29 14:17:52 mcalabre Exp $
 *=============================================================================
 *
 * wcsulex.l is a Flex description file containing the definition of a
@@ -6922,7 +6922,7 @@ char *wcsulextext;
 #include "wcsutil.h"
 
 #define YY_DECL int wcsulexe(const char unitstr[], int *func, double *scale, \
-                             double units[], struct wcserr **err)
+                             double units[WCSUNITS_NTYPE], struct wcserr **err)
 
 /* Used in preempting the call to exit() by yy_fatal_error(). */
 jmp_buf wcsulex_abort_jmp_env;
diff --git a/cextern/wcslib/C/flexed/wcsutrn.c b/cextern/wcslib/C/flexed/wcsutrn.c
index c006451..a8d5ed4 100644
--- a/cextern/wcslib/C/flexed/wcsutrn.c
+++ b/cextern/wcslib/C/flexed/wcsutrn.c
@@ -3982,8 +3982,8 @@ char *wcsutrntext;
 #line 1 "wcsutrn.l"
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -4004,7 +4004,7 @@ char *wcsutrntext;
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsutrn.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsutrn.c,v 4.19 2013/09/29 14:17:52 mcalabre Exp $
 *=============================================================================
 *
 * wcsutrn.l is a Flex description file containing the definition of a lexical
diff --git a/cextern/wcslib/C/getwcstab.c b/cextern/wcslib/C/getwcstab.c
index db9ffc0..0738de5 100644
--- a/cextern/wcslib/C/getwcstab.c
+++ b/cextern/wcslib/C/getwcstab.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: getwcstab.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: getwcstab.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <stdlib.h>
diff --git a/cextern/wcslib/C/getwcstab.h b/cextern/wcslib/C/getwcstab.h
index c8e2111..b8f1e19 100644
--- a/cextern/wcslib/C/getwcstab.h
+++ b/cextern/wcslib/C/getwcstab.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: getwcstab.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: getwcstab.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
 * Summary of the getwcstab routines
diff --git a/cextern/wcslib/C/lin.c b/cextern/wcslib/C/lin.c
index a647dff..883e5af 100644
--- a/cextern/wcslib/C/lin.c
+++ b/cextern/wcslib/C/lin.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: lin.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: lin.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <stdio.h>
diff --git a/cextern/wcslib/C/lin.h b/cextern/wcslib/C/lin.h
index 9504776..b3c958a 100644
--- a/cextern/wcslib/C/lin.h
+++ b/cextern/wcslib/C/lin.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: lin.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: lin.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the FITS World Coordinate System
+* WCSLIB 4.19 - C routines that implement the FITS World Coordinate System
 * (WCS) standard.  Refer to
 *
 *   "Representations of world coordinates in FITS",
diff --git a/cextern/wcslib/C/log.c b/cextern/wcslib/C/log.c
index 69d8578..79943d7 100644
--- a/cextern/wcslib/C/log.c
+++ b/cextern/wcslib/C/log.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: log.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: log.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <math.h>
diff --git a/cextern/wcslib/C/log.h b/cextern/wcslib/C/log.h
index e134bf7..51ba51b 100644
--- a/cextern/wcslib/C/log.h
+++ b/cextern/wcslib/C/log.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: log.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: log.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement logarithmic coordinate systems as
+* WCSLIB 4.19 - C routines that implement logarithmic coordinate systems as
 * defined by the FITS World Coordinate System (WCS) standard.  Refer to
 *
 *   "Representations of world coordinates in FITS",
diff --git a/cextern/wcslib/makedefs.in b/cextern/wcslib/C/makedefs.in
similarity index 97%
copy from cextern/wcslib/makedefs.in
copy to cextern/wcslib/C/makedefs.in
index 7785263..e690ba3 100644
--- a/cextern/wcslib/makedefs.in
+++ b/cextern/wcslib/C/makedefs.in
@@ -1,5 +1,5 @@
 #-----------------------------------------------------------------------------
-# GNU makefile definitions for building WCSLIB 4.16
+# GNU makefile definitions for building WCSLIB 4.17
 #
 # makedefs is generated from makedefs.in by configure.  It contains variable
 # definitions and some general-purpose rules for building WCSLIB.
@@ -39,11 +39,11 @@
 #      compiled separately without this option.
 #
 #      The shared library will be installed with version number, e.g. as
-#      libwcs.so.4.16 or libwcs.4.16.dylib with or without the symlink
+#      libwcs.so.4.17 or libwcs.4.17.dylib with or without the symlink
 #      required to make it visible to the linker (controlled by the SHRLN
 #      variable).  On Macs it is deliberately not created because its very
 #      existence precludes static linking with the cctools linker.  You can
-#      still link dynamically by using -lwcs.4.16.
+#      still link dynamically by using -lwcs.4.17.
 #
 #   4) PGPLOT is Tim Pearson's Fortran graphics library with separate C
 #      interface available from astro.caltech.edu.  It is only required by
@@ -74,7 +74,7 @@
 #
 # Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 # http://www.atnf.csiro.au/people/Mark.Calabretta
-# $Id: makedefs.in,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+# $Id: makedefs.in,v 4.17.1.1 2013/01/29 05:32:33 cal103 Exp $
 #-----------------------------------------------------------------------------
 # Version.
   LIBVER    := @LIBVER@
diff --git a/cextern/wcslib/C/prj.c b/cextern/wcslib/C/prj.c
index 7ad3b17..35b0462 100644
--- a/cextern/wcslib/C/prj.c
+++ b/cextern/wcslib/C/prj.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: prj.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: prj.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <math.h>
@@ -54,11 +54,11 @@ const char prj_categories[9][32] =
 
 
 /* Projection codes. */
-const int  prj_ncode = 27;
-const char prj_codes[27][4] =
+const int  prj_ncode = 28;
+const char prj_codes[28][4] =
   {"AZP", "SZP", "TAN", "STG", "SIN", "ARC", "ZPN", "ZEA", "AIR", "CYP",
    "CEA", "CAR", "MER", "COP", "COE", "COD", "COO", "SFL", "PAR", "MOL",
-   "AIT", "BON", "PCO", "TSC", "CSC", "QSC", "HPX"};
+   "AIT", "BON", "PCO", "TSC", "CSC", "QSC", "HPX", "XPH"};
 
 const int AZP = 101;
 const int SZP = 102;
@@ -87,6 +87,7 @@ const int TSC = 701;
 const int CSC = 702;
 const int QSC = 703;
 const int HPX = 801;
+const int XPH = 802;
 
 
 /* Map status return value to message. */
@@ -357,6 +358,8 @@ struct prjprm *prj;
     status = qscset(prj);
   } else if (strcmp(prj->code, "HPX") == 0) {
     status = hpxset(prj);
+  } else if (strcmp(prj->code, "XPH") == 0) {
+    status = xphset(prj);
   } else {
     /* Unrecognized projection code. */
     status = wcserr_set(WCSERR_SET(PRJERR_BAD_PARAM),
@@ -7606,9 +7609,7 @@ int stat[];
 
 {
   int h, mx, my, offset, rowlen, rowoff, status;
-  double absy, s, sigma, t, yr;
-  const double slim = prj->w[6] + 1e-12;
-  const double ylim = prj->w[9] * prj->w[4];
+  double absy, s, sigma, slim, t, ylim, yr;
   register int istat, ix, iy, *statp;
   register const double *xp, *yp;
   register double *phip, *thetap;
@@ -7620,6 +7621,9 @@ int stat[];
     if ((status = hpxset(prj))) return status;
   }
 
+  slim = prj->w[6] + 1e-12;
+  ylim = prj->w[9] * prj->w[4];
+
   if (ny > 0) {
     mx = nx;
     my = ny;
@@ -7846,3 +7850,324 @@ int stat[];
 
   return 0;
 }
+
+/*============================================================================
+*   XPH: HEALPix polar, aka "butterfly" projection.
+*
+*   Given and/or returned:
+*      prj->r0      Reset to 180/pi if 0.
+*      prj->phi0    Reset to 0.0 if undefined.
+*      prj->theta0  Reset to 0.0 if undefined.
+*
+*   Returned:
+*      prj->flag     XPH
+*      prj->code    "XPH"
+*      prj->x0      Fiducial offset in x.
+*      prj->y0      Fiducial offset in y.
+*      prj->w[0]    r0*(pi/180)/sqrt(2)
+*      prj->w[1]    (180/pi)/r0/sqrt(2)
+*      prj->w[2]    2/3
+*      prj->w[3]    tol (= 1e-4)
+*      prj->w[4]    sqrt(2/3)*(180/pi)
+*      prj->w[5]    90 - tol*sqrt(2/3)*(180/pi)
+*      prj->w[6]    sqrt(3/2)*(pi/180)
+*      prj->prjx2s  Pointer to xphx2s().
+*      prj->prjs2x  Pointer to xphs2x().
+*===========================================================================*/
+
+int xphset(prj)
+
+struct prjprm *prj;
+
+{
+  if (prj == 0x0) return PRJERR_NULL_POINTER;
+
+  prj->flag = XPH;
+  strcpy(prj->code, "XPH");
+
+  strcpy(prj->name, "butterfly");
+  prj->category  = HEALPIX;
+  prj->pvrange   = 0;
+  prj->simplezen = 0;
+  prj->equiareal = 1;
+  prj->conformal = 0;
+  prj->global    = 1;
+  prj->divergent = 0;
+
+  if (prj->r0 == 0.0) {
+    prj->r0 = R2D;
+    prj->w[0] = 1.0;
+    prj->w[1] = 1.0;
+  } else {
+    prj->w[0] = prj->r0*D2R;
+    prj->w[1] = R2D/prj->r0;
+  }
+
+  prj->w[0] /= sqrt(2.0);
+  prj->w[1] /= sqrt(2.0);
+  prj->w[2]  = 2.0/3.0;
+  prj->w[3]  = 1e-4;
+  prj->w[4]  = sqrt(prj->w[2])*R2D;
+  prj->w[5]  = 90.0 - prj->w[3]*prj->w[4];
+  prj->w[6]  = sqrt(1.5)*D2R;
+
+  prj->prjx2s = xphx2s;
+  prj->prjs2x = xphs2x;
+
+  return prjoff(prj, 0.0, 90.0);
+}
+
+/*--------------------------------------------------------------------------*/
+
+int xphx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat)
+
+struct prjprm *prj;
+int nx, ny, sxy, spt;
+const double x[], y[];
+double phi[], theta[];
+int stat[];
+
+{
+  int mx, my, rowlen, rowoff, status;
+  double abseta, eta, sigma, xi, xr, yr;
+  register int ix, iy, *statp;
+  register const double *xp, *yp;
+  register double *phip, *thetap;
+
+
+  /* Initialize. */
+  if (prj == 0x0) return PRJERR_NULL_POINTER;
+  if (prj->flag != XPH) {
+    if ((status = xphset(prj))) return status;
+  }
+
+  if (ny > 0) {
+    mx = nx;
+    my = ny;
+  } else {
+    mx = 1;
+    my = 1;
+    ny = nx;
+  }
+
+  status = 0;
+
+
+  /* Do x dependence. */
+  xp = x;
+  rowoff = 0;
+  rowlen = nx*spt;
+  for (ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) {
+    xr = (*xp + prj->x0)*prj->w[1];
+
+    phip   = phi + rowoff;
+    for (iy = 0; iy < my; iy++) {
+      *phip = xr;
+      phip  += rowlen;
+    }
+  }
+
+
+  /* Do y dependence. */
+  yp = y;
+  phip   = phi;
+  thetap = theta;
+  statp  = stat;
+  for (iy = 0; iy < ny; iy++, yp += sxy) {
+    yr = (*yp + prj->y0)*prj->w[1];
+
+    for (ix = 0; ix < mx; ix++, phip += spt, thetap += spt) {
+      xr = *phip;
+
+      if (xr <= 0.0 && 0.0 < yr) {
+        xi  = -xr - yr;
+        eta =  xr - yr;
+        *phip = -180.0;
+      } else if (xr < 0.0 && yr <= 0.0) {
+        xi  =  xr - yr;
+        eta =  xr + yr;
+        *phip = -90.0;
+      } else if (0.0 <= xr && yr < 0.0) {
+        xi  =  xr + yr;
+        eta = -xr + yr;
+        *phip = 0.0;
+      } else {
+        xi  = -xr + yr;
+        eta = -xr - yr;
+        *phip = 90.0;
+      }
+
+      xi  += 45.0;
+      eta += 90.0;
+      abseta = fabs(eta);
+
+      if (abseta <= 90.0) {
+        if (abseta <= 45.0) {
+          /* Equatorial regime. */
+          *phip  += xi;
+          *thetap = asind(eta/67.5);
+          *(statp++) = 0;
+
+        } else {
+          /* Polar regime. */
+          sigma = (90.0 - abseta) / 45.0;
+
+          /* Ensure an exact result for points on the boundary. */
+          if (xr == 0.0) {
+            if (yr <= 0.0) {
+              *phip = 0.0;
+            } else {
+              *phip = 180.0;
+            }
+          } else if (yr == 0.0) {
+            if (xr < 0.0) {
+              *phip = 270.0;
+            } else {
+              *phip =  90.0;
+            }
+          } else {
+            *phip += 45.0 + (xi - 45.0)/sigma;
+          }
+
+          if (sigma < prj->w[3]) {
+            *thetap = 90.0 - sigma*prj->w[4];
+          } else {
+            *thetap = asind(1.0 - sigma*sigma/3.0);
+          }
+          if (eta < 0.0) *thetap = -(*thetap);
+          *(statp++) = 0;
+        }
+
+      } else {
+        /* Beyond latitude range. */
+        *phip   = 0.0;
+        *thetap = 0.0;
+        *(statp++) = 1;
+        if (!status) status = PRJERR_BAD_PIX_SET("xphx2s");
+      }
+    }
+  }
+
+  return status;
+}
+
+/*--------------------------------------------------------------------------*/
+
+int xphs2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat)
+
+struct prjprm *prj;
+int nphi, ntheta, spt, sxy;
+const double phi[], theta[];
+double x[], y[];
+int stat[];
+
+{
+  int mphi, mtheta, rowlen, rowoff, status;
+  double abssin, chi, eta, psi, sigma, sinthe, xi;
+  register int iphi, itheta, *statp;
+  register const double *phip, *thetap;
+  register double *xp, *yp;
+
+
+  /* Initialize. */
+  if (prj == 0x0) return PRJERR_NULL_POINTER;
+  if (prj->flag != XPH) {
+    if ((status = xphset(prj))) return status;
+  }
+
+  if (ntheta > 0) {
+    mphi   = nphi;
+    mtheta = ntheta;
+  } else {
+    mphi   = 1;
+    mtheta = 1;
+    ntheta = nphi;
+  }
+
+
+  /* Do phi dependence. */
+  phip = phi;
+  rowoff = 0;
+  rowlen = nphi*sxy;
+  for (iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) {
+    chi = *phip;
+    if (180.0 <= fabs(chi)) {
+      chi = fmod(chi, 360.0);
+      if (chi < -180.0) {
+        chi += 360.0;
+      } else if (180.0 <= chi) {
+        chi -= 360.0;
+      }
+    }
+
+    /* phi is also recomputed from chi to avoid rounding problems. */
+    chi += 180.0;
+    psi = fmod(chi, 90.0);
+
+    xp = x + rowoff;
+    yp = y + rowoff;
+    for (itheta = 0; itheta < mtheta; itheta++) {
+      /* y[] is used to hold phi (rounded). */
+      *xp = psi;
+      *yp = chi - 180.0;
+      xp += rowlen;
+      yp += rowlen;
+    }
+  }
+
+
+  /* Do theta dependence. */
+  thetap = theta;
+  xp = x;
+  yp = y;
+  statp = stat;
+  for (itheta = 0; itheta < ntheta; itheta++, thetap += spt) {
+    sinthe = sind(*thetap);
+    abssin = fabs(sinthe);
+
+    for (iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy) {
+      if (abssin <= prj->w[2]) {
+        /* Equatorial regime. */
+        xi  = *xp;
+        eta = 67.5 * sinthe;
+
+      } else {
+        /* Polar regime. */
+        if (*thetap < prj->w[5]) {
+          sigma = sqrt(3.0*(1.0 - abssin));
+        } else {
+          sigma = (90.0 - *thetap)*prj->w[6];
+        }
+
+        xi  = 45.0 + (*xp - 45.0)*sigma;
+        eta = 45.0 * (2.0 - sigma);
+        if (*thetap < 0.0) eta = -eta;
+      }
+
+      xi  -= 45.0;
+      eta -= 90.0;
+
+      /* Recall that y[] holds phi. */
+      if (*yp < -90.0) {
+        *xp = prj->w[0]*(-xi + eta) - prj->x0;
+        *yp = prj->w[0]*(-xi - eta) - prj->y0;
+
+      } else if (*yp <  0.0) {
+        *xp = prj->w[0]*(+xi + eta) - prj->x0;
+        *yp = prj->w[0]*(-xi + eta) - prj->y0;
+
+      } else if (*yp < 90.0) {
+        *xp = prj->w[0]*( xi - eta) - prj->x0;
+        *yp = prj->w[0]*( xi + eta) - prj->y0;
+
+      } else {
+        *xp = prj->w[0]*(-xi - eta) - prj->x0;
+        *yp = prj->w[0]*( xi - eta) - prj->y0;
+      }
+
+      *(statp++) = 0;
+    }
+  }
+
+  return 0;
+}
diff --git a/cextern/wcslib/C/prj.h b/cextern/wcslib/C/prj.h
index 403a8c6..df2fb7e 100644
--- a/cextern/wcslib/C/prj.h
+++ b/cextern/wcslib/C/prj.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: prj.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: prj.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the spherical map projections
+* WCSLIB 4.19 - C routines that implement the spherical map projections
 * recognized by the FITS World Coordinate System (WCS) standard.  Refer to
 *
 *   "Representations of world coordinates in FITS",
@@ -97,6 +97,7 @@
 *   - cscset(), cscx2s(), cscs2x():   CSC (COBE spherical cube)
 *   - qscset(), qscx2s(), qscs2x():   QSC (quadrilateralized spherical cube)
 *   - hpxset(), hpxx2s(), hpxs2x():   HPX (HEALPix)
+*   - xphset(), xphx2s(), xphs2x():   XPH (HEALPix polar, aka "butterfly")
 *
 * Argument checking (projection routines):
 * ----------------------------------------
@@ -564,7 +565,7 @@ extern const int CONIC, CONVENTIONAL, CYLINDRICAL, POLYCONIC,
 extern const char prj_categories[9][32];
 
 extern const int  prj_ncode;
-extern const char prj_codes[27][4];
+extern const char prj_codes[28][4];
 
 #ifdef PRJX2S_ARGS
 #undef PRJX2S_ARGS
@@ -743,6 +744,10 @@ int hpxset(struct prjprm *prj);
 int hpxx2s(PRJX2S_ARGS);
 int hpxs2x(PRJS2X_ARGS);
 
+int xphset(struct prjprm *prj);
+int xphx2s(PRJX2S_ARGS);
+int xphs2x(PRJS2X_ARGS);
+
 
 /* Deprecated. */
 #define prjini_errmsg prj_errmsg
diff --git a/cextern/wcslib/C/spc.c b/cextern/wcslib/C/spc.c
index ef559dc..8cbe925 100644
--- a/cextern/wcslib/C/spc.c
+++ b/cextern/wcslib/C/spc.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: spc.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: spc.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <math.h>
diff --git a/cextern/wcslib/C/spc.h b/cextern/wcslib/C/spc.h
index 359f770..84f1d1c 100644
--- a/cextern/wcslib/C/spc.h
+++ b/cextern/wcslib/C/spc.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: spc.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: spc.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the spectral coordinate systems
+* WCSLIB 4.19 - C routines that implement the spectral coordinate systems
 * recognized by the FITS World Coordinate System (WCS) standard.  Refer to
 *
 *   "Representations of world coordinates in FITS",
@@ -839,23 +839,23 @@ int spcx2s(struct spcprm *spc, int nx, int sx, int sspec,
 int spcs2x(struct spcprm *spc, int nspec, int sspec, int sx,
            const double spec[], double x[], int stat[]);
 
-int spctype(const char ctype[], char stype[], char scode[], char sname[],
+int spctype(const char ctype[9], char stype[], char scode[], char sname[],
             char units[], char *ptype, char *xtype, int *restreq,
             struct wcserr **err);
 
-int spcspxe(const char ctypeS[], double crvalS, double restfrq,
+int spcspxe(const char ctypeS[9], double crvalS, double restfrq,
             double restwav, char *ptype, char *xtype, int *restreq,
             double *crvalX, double *dXdS, struct wcserr **err);
 
-int spcxpse(const char ctypeS[], double crvalX, double restfrq,
+int spcxpse(const char ctypeS[9], double crvalX, double restfrq,
             double restwav, char *ptype, char *xtype, int *restreq,
             double *crvalS, double *dSdX, struct wcserr **err);
 
-int spctrne(const char ctypeS1[], double crvalS1, double cdeltS1,
-            double restfrq, double restwav, char ctypeS2[], double *crvalS2,
+int spctrne(const char ctypeS1[9], double crvalS1, double cdeltS1,
+            double restfrq, double restwav, char ctypeS2[9], double *crvalS2,
             double *cdeltS2, struct wcserr **err);
 
-int spcaips(const char ctypeA[], int velref, char ctype[], char specsys[]);
+int spcaips(const char ctypeA[9], int velref, char ctype[9], char specsys[9]);
 
 
 /* Deprecated. */
@@ -865,16 +865,16 @@ int spcaips(const char ctypeA[], int velref, char ctype[], char specsys[]);
 #define spcx2s_errmsg spc_errmsg
 #define spcs2x_errmsg spc_errmsg
 
-int spctyp(const char ctype[], char stype[], char scode[], char sname[],
+int spctyp(const char ctype[9], char stype[], char scode[], char sname[],
            char units[], char *ptype, char *xtype, int *restreq);
-int spcspx(const char ctypeS[], double crvalS, double restfrq, double restwav,
-           char *ptype, char *xtype, int *restreq, double *crvalX,
-           double *dXdS);
-int spcxps(const char ctypeS[], double crvalX, double restfrq, double restwav,
-           char *ptype, char *xtype, int *restreq, double *crvalS,
-           double *dSdX);
-int spctrn(const char ctypeS1[], double crvalS1, double cdeltS1,
-           double restfrq, double restwav, char ctypeS2[], double *crvalS2,
+int spcspx(const char ctypeS[9], double crvalS, double restfrq,
+           double restwav, char *ptype, char *xtype, int *restreq,
+	   double *crvalX, double *dXdS);
+int spcxps(const char ctypeS[9], double crvalX, double restfrq,
+           double restwav, char *ptype, char *xtype, int *restreq,
+	   double *crvalS, double *dSdX);
+int spctrn(const char ctypeS1[9], double crvalS1, double cdeltS1,
+           double restfrq, double restwav, char ctypeS2[9], double *crvalS2,
            double *cdeltS2);
 
 #ifdef __cplusplus
diff --git a/cextern/wcslib/C/sph.c b/cextern/wcslib/C/sph.c
index 144369e..fb6b93b 100644
--- a/cextern/wcslib/C/sph.c
+++ b/cextern/wcslib/C/sph.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: sph.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: sph.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <math.h>
diff --git a/cextern/wcslib/C/sph.h b/cextern/wcslib/C/sph.h
index bbfa033..e66cd6d 100644
--- a/cextern/wcslib/C/sph.h
+++ b/cextern/wcslib/C/sph.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: sph.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: sph.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the spherical coordinate
+* WCSLIB 4.19 - C routines that implement the spherical coordinate
 * transformations used by the FITS World Coordinate System (WCS) standard.
 * Refer to
 *
diff --git a/cextern/wcslib/C/spx.c b/cextern/wcslib/C/spx.c
index 45f0ef4..29cf7a2 100644
--- a/cextern/wcslib/C/spx.c
+++ b/cextern/wcslib/C/spx.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: spx.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: spx.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <math.h>
diff --git a/cextern/wcslib/C/spx.h b/cextern/wcslib/C/spx.h
index 33f2067..9d2feb4 100644
--- a/cextern/wcslib/C/spx.h
+++ b/cextern/wcslib/C/spx.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: spx.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: spx.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the spectral coordinate systems
+* WCSLIB 4.19 - C routines that implement the spectral coordinate systems
 * recognized by the FITS World Coordinate System (WCS) standard.  Refer to
 *
 *   "Representations of world coordinates in FITS",
@@ -334,7 +334,7 @@
 *
 *   double dfreqwavn
 *     (Returned) Derivative of frequency with respect to wave number [m/s]
-*     (constant, = c, the speed of light in vacuuo), and ...
+*     (constant, = c, the speed of light in vacuo), and ...
 *   double dwavnfreq
 *     (Returned) ... vice versa [s/m] (constant, = 1/c, always available).
 *
@@ -394,7 +394,7 @@
 *
 *   double dvelobeta
 *     (Returned) Derivative of relativistic velocity with respect to
-*     relativistic beta [m/s] (constant, = c, the speed of light in vacuu0),
+*     relativistic beta [m/s] (constant, = c, the speed of light in vacuo),
 *     and ...
 *   double dbetavelo
 *     (Returned) ... vice versa [s/m] (constant, = 1/c, always available).
diff --git a/cextern/wcslib/C/tab.c b/cextern/wcslib/C/tab.c
index c877b20..61bb698 100644
--- a/cextern/wcslib/C/tab.c
+++ b/cextern/wcslib/C/tab.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: tab.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: tab.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <math.h>
diff --git a/cextern/wcslib/C/tab.h b/cextern/wcslib/C/tab.h
index 850e0fa..e0bd136 100644
--- a/cextern/wcslib/C/tab.h
+++ b/cextern/wcslib/C/tab.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: tab.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: tab.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement tabular coordinate systems as
+* WCSLIB 4.19 - C routines that implement tabular coordinate systems as
 * defined by the FITS World Coordinate System (WCS) standard.  Refer to
 *
 *   "Representations of world coordinates in FITS",
diff --git a/cextern/wcslib/C/wcs.c b/cextern/wcslib/C/wcs.c
index 2e73798..3f94545 100644
--- a/cextern/wcslib/C/wcs.c
+++ b/cextern/wcslib/C/wcs.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcs.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcs.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <math.h>
@@ -556,6 +556,7 @@ int wcssub(
   struct wcserr **err;
 
   if (wcssrc == 0x0) return WCSERR_NULL_POINTER;
+  if (wcsdst == 0x0) return WCSERR_NULL_POINTER;
   err = &(wcsdst->err);
 
   if ((naxis = wcssrc->naxis) <= 0) {
@@ -835,8 +836,12 @@ int wcssub(
   npv = 0;
   for (k = 0; k < wcssrc->npv; k++) {
     i = wcssrc->pv[k].i;
-    if (i == 0 || (i > 0 && map[i-1])) {
-      /* i == 0 is a special code for the latitude axis. */
+    if (i == 0) {
+      /* i == 0 is a special code that means "the latitude axis". */
+      wcsdst->pv[npv] = wcssrc->pv[k];
+      wcsdst->pv[npv].i = 0;
+      npv++;
+    } else if (i > 0 && map[i-1]) {
       wcsdst->pv[npv] = wcssrc->pv[k];
       wcsdst->pv[npv].i = map[i-1];
       npv++;
diff --git a/cextern/wcslib/C/wcs.h b/cextern/wcslib/C/wcs.h
index 67b8838..b605d54 100644
--- a/cextern/wcslib/C/wcs.h
+++ b/cextern/wcslib/C/wcs.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcs.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcs.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the FITS World Coordinate System
+* WCSLIB 4.19 - C routines that implement the FITS World Coordinate System
 * (WCS) standard.  Refer to
 *
 *   "Representations of world coordinates in FITS",
@@ -204,7 +204,7 @@
 * wcssub() can also add axes to a wcsprm struct.  The new axes will be created
 * using the defaults set by wcsini() which produce a simple, unnamed, linear
 * axis with world coordinate equal to the pixel coordinate.  These default
-* values can be changed in before invoking wcsset().
+* values can be changed afterwards, before invoking wcsset().
 *
 * Given:
 *   alloc     int       If true, allocate memory for the crpix, etc. arrays in
@@ -225,17 +225,18 @@
 *                       subimage, etc.
 *
 *                       Use an axis number of 0 to create a new axis using
-*                       the defaults set by wcsini().
+*                       the defaults set by wcsini().  They can be changed
+*                       later.
 *
 *                       nsub (the pointer) may be set to zero, and so also may
-*                       nsub, to indicate the number of axes in the input
-*                       image; the number of axes will be returned if
+*                       *nsub, which is interpreted to mean all axes in the
+*                       input image; the number of axes will be returned if
 *                       nsub != 0x0.  axes itself (the pointer) may be set to
 *                       zero to indicate the first *nsub axes in their
 *                       original order.
 *
-*                       Set both nsub and axes to zero to do a deep copy of
-*                       one wcsprm struct to another.
+*                       Set both nsub (or *nsub) and axes to zero to do a deep
+*                       copy of one wcsprm struct to another.
 *
 *                       Subimage extraction by coordinate axis type may be
 *                       done by setting the elements of axes[] to the
@@ -249,7 +250,7 @@
 *
 *                       Refer to the notes (below) for further usage examples.
 *
-*                       On return, *nsub will contain the number of axes in
+*                       On return, *nsub will be set to the number of axes in
 *                       the subimage; this may be zero if there were no axes
 *                       of the required type(s) (in which case no memory will
 *                       be allocated).  axes[] will contain the axis numbers
@@ -845,7 +846,7 @@
 *   double restfrq
 *     (Given) The rest frequency [Hz], and/or ...
 *   double restwav
-*     (Given) ... the rest wavelength in vacuuo [m], only one of which need be
+*     (Given) ... the rest wavelength in vacuo [m], only one of which need be
 *     given, the other should be set to zero.
 *
 *   int npv
diff --git a/cextern/wcslib/C/wcsbth.l b/cextern/wcslib/C/wcsbth.l
index 162850c..7a5b677 100644
--- a/cextern/wcslib/C/wcsbth.l
+++ b/cextern/wcslib/C/wcsbth.l
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsbth.l,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsbth.l,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
 * wcsbth.l is a Flex description file containing the definition of a lexical
@@ -112,6 +112,7 @@ STRING	'([^']|'')*'
 #include "wcs.h"
 #include "wcshdr.h"
 #include "wcsmath.h"
+#include "wcsprintf.h"
 #include "wcsutil.h"
 
 			/* Codes used for keyvalue data types. */
@@ -1976,7 +1977,7 @@ int wcsbth_final(struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs);
 	      hptr += 80;
 	
 	    } else if (ctrl > 2) {
-	      fprintf(stderr, "%.80s\n  Discarded.\n", wcsbth_hdr-80);
+	      wcsfprintf(stderr, "%.80s\n  Discarded.\n", wcsbth_hdr-80);
 	    }
 	  }
 	
@@ -1995,7 +1996,7 @@ int wcsbth_final(struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs);
 	    }
 	
 	    if (abs(ctrl) > 1) {
-	      fprintf(stderr, "%.80s\n%4d: %s.\n", wcsbth_hdr-80, *nreject,
+	      wcsfprintf(stderr, "%.80s\n%4d: %s.\n", wcsbth_hdr-80, *nreject,
 	        errmsg);
 	    }
 	  }
@@ -2027,14 +2028,14 @@ int wcsbth_final(struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs);
 	      yylex_destroy();
 	      return status;
 	    }
-
+	
 	    if (alts.imgherit) npass = 3;
 	
 	    if (abs(ctrl) > 2) {
 	      if (*nwcs == 1) {
-	        fprintf(stderr, "Found one coordinate representation.\n");
+	        wcsfprintf(stderr, "Found one coordinate representation.\n");
 	      } else {
-	        fprintf(stderr, "Found %d coordinate representations.\n",
+	        wcsfprintf(stderr, "Found %d coordinate representations.\n",
 	          *nwcs);
 	      }
 	    }
@@ -2066,7 +2067,8 @@ int wcsbth_final(struct wcsbth_alts *alts, int *nwcs, struct wcsprm **wcs);
 	    if (ctrl < 0) {
 	      *hptr = '\0';
 	    } else if (ctrl == 1) {
-	      fprintf(stderr, "%d WCS keyrecords were rejected.\n", *nreject);
+	      wcsfprintf(stderr, "%d WCS keyrecords were rejected.\n",
+	        *nreject);
 	    }
 	
 	    return wcsbth_final(&alts, nwcs, wcs);
diff --git a/cextern/wcslib/wcsconfig.h.in b/cextern/wcslib/C/wcsconfig.h.in
similarity index 80%
copy from cextern/wcslib/wcsconfig.h.in
copy to cextern/wcslib/C/wcsconfig.h.in
index b201b39..edacd1f 100644
--- a/cextern/wcslib/wcsconfig.h.in
+++ b/cextern/wcslib/C/wcsconfig.h.in
@@ -1,11 +1,11 @@
 /*============================================================================
 *
 * wcsconfig.h is generated from wcsconfig.h.in by 'configure'.  It contains
-* C preprocessor macro definitions for compiling WCSLIB 4.16
+* C preprocessor macro definitions for compiling WCSLIB 4.17
 *
 * Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 * http://www.atnf.csiro.au/people/Mark.Calabretta
-* $Id: wcsconfig.h.in,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+* $Id: wcsconfig.h.in,v 4.17.1.1 2013/01/29 05:32:33 cal103 Exp $
 *===========================================================================*/
 
 /* WCSLIB library version number. */
diff --git a/cextern/wcslib/wcsconfig_tests.h.in b/cextern/wcslib/C/wcsconfig_tests.h.in
similarity index 87%
copy from cextern/wcslib/wcsconfig_tests.h.in
copy to cextern/wcslib/C/wcsconfig_tests.h.in
index 9b390ae..945ae3a 100644
--- a/cextern/wcslib/wcsconfig_tests.h.in
+++ b/cextern/wcslib/C/wcsconfig_tests.h.in
@@ -1,12 +1,12 @@
 /*============================================================================
 *
 * wcsconfig_test.h is generated from wcsconfig_test.h.in by 'configure'.  It
-* contains C preprocessor definitions for compiling the WCSLIB 4.16 test/demo
+* contains C preprocessor definitions for compiling the WCSLIB 4.17 test/demo
 * programs.
 *
 * Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 * http://www.atnf.csiro.au/people/Mark.Calabretta
-* $Id: wcsconfig_tests.h.in,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+* $Id: wcsconfig_tests.h.in,v 4.17.1.1 2013/01/29 05:32:33 cal103 Exp $
 *===========================================================================*/
 
 #include <wcsconfig.h>
diff --git a/cextern/wcslib/C/wcserr.c b/cextern/wcslib/C/wcserr.c
index 3cec270..4075dce 100644
--- a/cextern/wcslib/C/wcserr.c
+++ b/cextern/wcslib/C/wcserr.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -23,7 +23,7 @@
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   Module author: Michael Droettboom
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcserr.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcserr.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <stdarg.h>
diff --git a/cextern/wcslib/C/wcserr.h b/cextern/wcslib/C/wcserr.h
index f422e29..3462896 100644
--- a/cextern/wcslib/C/wcserr.h
+++ b/cextern/wcslib/C/wcserr.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -23,7 +23,7 @@
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   Module author: Michael Droettboom
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcserr.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcserr.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
 * Summary of the wcserr routines
@@ -212,6 +212,10 @@
 #ifndef WCSLIB_WCSERR
 #define WCSLIB_WCSERR
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #define WCSERR_MSG_LENGTH 160
 
 struct wcserr {
@@ -242,4 +246,8 @@ int wcserr_copy(const struct wcserr *src, struct wcserr *dst);
 /* Convenience macro for invoking wcserr_set(). */
 #define WCSERR_SET(status) err, status, function, __FILE__, __LINE__
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* WSCLIB_WCSERR */
diff --git a/cextern/wcslib/C/wcsfix.c b/cextern/wcslib/C/wcsfix.c
index 86731c2..466067f 100644
--- a/cextern/wcslib/C/wcsfix.c
+++ b/cextern/wcslib/C/wcsfix.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsfix.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsfix.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <math.h>
@@ -245,7 +245,6 @@ int datfix(struct wcsprm *wcs)
   static const char *function = "datfix";
 
   char orig_dateobs[72];
-  char ctmp[72], ctmp2[72];
   char *dateobs;
   int  day, dd, hour = 0, jd, minute = 0, month, msec, n4, year;
   double mjdobs, sec = 0.0, t;
@@ -584,7 +583,7 @@ int celfix(struct wcsprm *wcs)
          * might be effected by adjusting CRPIXja but that is complicated by
          * the linear transformation and instead is accomplished here by
          * setting theta_0. */
-        if (wcs->npvmax < wcs->npv + 2) {
+        if (wcs->npvmax < wcs->npv + 3) {
           /* Allocate space for three more PVi_ja keyvalues. */
           if (wcs->m_flag == WCSSET && wcs->pv == wcs->m_pv) {
             if (!(wcs->pv = calloc(wcs->npv+3, sizeof(struct pvcard)))) {
diff --git a/cextern/wcslib/C/wcsfix.h b/cextern/wcslib/C/wcsfix.h
index 9d42aed..dfacaf8 100644
--- a/cextern/wcslib/C/wcsfix.h
+++ b/cextern/wcslib/C/wcsfix.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsfix.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsfix.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the FITS World Coordinate System
+* WCSLIB 4.19 - C routines that implement the FITS World Coordinate System
 * (WCS) standard.  Refer to
 *
 *   "Representations of world coordinates in FITS",
@@ -259,10 +259,11 @@
 * celfix() translates AIPS-convention celestial projection types, NCP and
 * GLS, set in the ctype[] member of the wcsprm struct.
 *
-* Two additional pv[] keyvalues are created when translating NCP.  If the
-* pv[] array was initially allocated by wcsini() then the array will be
-* expanded if necessary.  Otherwise, error 2 will be returned if two empty
-* slots are not already available for use.
+* Two additional pv[] keyvalues are created when translating NCP, and three
+* are created when translating GLS with non-zero reference point.  If the pv[]
+* array was initially allocated by wcsini() then the array will be expanded if
+* necessary.  Otherwise, error 2 will be returned if sufficient empty slots
+* are not already available for use.
 *
 * Given and returned:
 *   wcs       struct wcsprm*
diff --git a/cextern/wcslib/C/wcshdr.c b/cextern/wcslib/C/wcshdr.c
index 15f2ad7..0a5054e 100644
--- a/cextern/wcslib/C/wcshdr.c
+++ b/cextern/wcslib/C/wcshdr.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcshdr.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcshdr.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <ctype.h>
@@ -588,10 +588,13 @@ int wcshdo(int relax, struct wcsprm *wcs, int *nkeyrec, char **header)
           break;
         case 'E':
           strcpy(comment, "ecliptic ");
+          break;
         case 'H':
           strcpy(comment, "helioecliptic ");
+          break;
         case 'S':
           strcpy(comment, "supergalactic ");
+          break;
         }
 
         if (i == wcs->lng) {
diff --git a/cextern/wcslib/C/wcshdr.h b/cextern/wcslib/C/wcshdr.h
index f0b4d84..b5935ef 100644
--- a/cextern/wcslib/C/wcshdr.h
+++ b/cextern/wcslib/C/wcshdr.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcshdr.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcshdr.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the FITS World Coordinate System
+* WCSLIB 4.19 - C routines that implement the FITS World Coordinate System
 * (WCS) standard.  Refer to
 *
 *   "Representations of world coordinates in FITS",
@@ -157,7 +157,8 @@
 *                           3: As above, but also report all non-WCS
 *                              keyrecords that were discarded, and the number
 *                              of coordinate representations (nwcs) found.
-*                       The report is written to stderr.
+*                       The report is written to stderr by default, or the
+*                       stream set by wcsprintf_set().
 *
 *                       For ctrl < 0, WCS keyrecords processed by wcspih()
 *                       are removed from header[]:
@@ -285,7 +286,8 @@
 *                           3: As above, but also report all non-WCS
 *                              keyrecords that were discarded, and the number
 *                              of coordinate representations (nwcs) found.
-*                       The report is written to stderr.
+*                       The report is written to stderr by default, or the
+*                       stream set by wcsprintf_set().
 *
 *                       For ctrl < 0, WCS keyrecords processed by wcsbth()
 *                       are removed from header[]:
@@ -424,9 +426,9 @@
 *      - WCSHDR_all: Accept all extensions recognized by the parser.
 *
 *      - WCSHDR_reject: Reject non-standard keywords (that are not otherwise
-*              accepted).  A message will optionally be printed on stderr, as
-*              determined by the ctrl argument, and nreject will be
-*              incremented.
+*              accepted).  A message will optionally be printed on stderr by
+*              default, or the stream set by wcsprintf_set(), as determined by
+*              the ctrl argument, and nreject will be incremented.
 *
 *              This flag may be used to signal the presence of non-standard
 *              keywords, otherwise they are simply passed over as though they
diff --git a/cextern/wcslib/C/wcslib.h b/cextern/wcslib/C/wcslib.h
index a32d80c..34c176a 100644
--- a/cextern/wcslib/C/wcslib.h
+++ b/cextern/wcslib/C/wcslib.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcslib.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcslib.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the FITS World Coordinate System
+* WCSLIB 4.19 - C routines that implement the FITS World Coordinate System
 * (WCS) standard.
 *
 * Summary of wcslib.h
diff --git a/cextern/wcslib/C/wcsmath.h b/cextern/wcslib/C/wcsmath.h
index f5eb660..ec6ff74 100644
--- a/cextern/wcslib/C/wcsmath.h
+++ b/cextern/wcslib/C/wcsmath.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsmath.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsmath.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
 * Summary of wcsmath.h
diff --git a/cextern/wcslib/C/wcspih.l b/cextern/wcslib/C/wcspih.l
index 42182f7..8e6e63e 100644
--- a/cextern/wcslib/C/wcspih.l
+++ b/cextern/wcslib/C/wcspih.l
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcspih.l,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcspih.l,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
 * wcspih.l is a Flex description file containing the definition of a lexical
@@ -105,6 +105,7 @@ STRING	'([^']|'')*'
 #include "wcs.h"
 #include "wcshdr.h"
 #include "wcsmath.h"
+#include "wcsprintf.h"
 #include "wcsutil.h"
 
 #define INTEGER 0
@@ -934,7 +935,7 @@ jmp_buf wcspih_abort_jmp_env;
 	      keep = wcspih_hdr - 80;
 	
 	    } else if (ctrl > 2) {
-	      fprintf(stderr, "%.80s\n  Discarded.\n", wcspih_hdr-80);
+	      wcsfprintf(stderr, "%.80s\n  Discarded.\n", wcspih_hdr-80);
 	    }
 	  }
 	  BEGIN(FLUSH);
@@ -949,7 +950,7 @@ jmp_buf wcspih_abort_jmp_env;
 	    }
 	
 	    if (abs(ctrl%10) > 1) {
-	      fprintf(stderr, "%.80s\n%4d: %s.\n", wcspih_hdr-80, *nreject,
+	      wcsfprintf(stderr, "%.80s\n%4d: %s.\n", wcspih_hdr-80, *nreject,
 	        errmsg);
 	    }
 	  }
@@ -985,10 +986,10 @@ jmp_buf wcspih_abort_jmp_env;
 	    if (abs(ctrl%10) > 2) {
 	      if (*nwcs == 1) {
 	        if (strcmp(wcs[0]->wcsname, "DEFAULTS") != 0) {
-	          fprintf(stderr, "Found one coordinate representation.\n");
+	          wcsfprintf(stderr, "Found one coordinate representation.\n");
 	        }
 	      } else {
-	        fprintf(stderr, "Found %d coordinate representations.\n",
+	        wcsfprintf(stderr, "Found %d coordinate representations.\n",
 	          *nwcs);
 	      }
 	    }
@@ -1010,7 +1011,7 @@ jmp_buf wcspih_abort_jmp_env;
 	    if (ctrl < 0) {
 	      *hptr = '\0';
 	    } else if (ctrl == 1) {
-	      fprintf(stderr, "%d WCS keyrecords were rejected.\n",
+	      wcsfprintf(stderr, "%d WCS keyrecords were rejected.\n",
 	        *nreject);
 	    }
 	
diff --git a/cextern/wcslib/C/wcsprintf.c b/cextern/wcslib/C/wcsprintf.c
index 5c4b5fb..ecabd15 100644
--- a/cextern/wcslib/C/wcsprintf.c
+++ b/cextern/wcslib/C/wcsprintf.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsprintf.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsprintf.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <stdarg.h>
@@ -80,6 +80,7 @@ const char *wcsprintf_buf(void)
 
 int wcsprintf(const char *format, ...)
 {
+  char *realloc_buff;
   int  nbytes;
   size_t  used;
   va_list arg_list;
@@ -101,10 +102,58 @@ int wcsprintf(const char *format, ...)
     if (wcsprintf_size - used < 128) {
       /* Expand the buffer. */
       wcsprintf_size += 1024;
-      wcsprintf_buff = realloc(wcsprintf_buff, wcsprintf_size);
-      if (wcsprintf_buff == NULL) {
+      realloc_buff = realloc(wcsprintf_buff, wcsprintf_size);
+      if (realloc_buff == NULL) {
+        free(wcsprintf_buff);
+        wcsprintf_buff = 0x0;
+        return 1;
+      }
+      wcsprintf_buff = realloc_buff;
+      wcsprintf_bufp = wcsprintf_buff + used;
+    }
+
+    nbytes = vsprintf(wcsprintf_bufp, format, arg_list);
+    wcsprintf_bufp += nbytes;
+  }
+
+  va_end(arg_list);
+
+  return nbytes;
+}
+
+/*--------------------------------------------------------------------------*/
+
+int wcsfprintf(FILE *stream, const char *format, ...)
+{
+  char *realloc_buff;
+  int  nbytes;
+  size_t  used;
+  va_list arg_list;
+
+  if (wcsprintf_buff == 0x0 && wcsprintf_file == 0x0) {
+    /* Send output to stream if wcsprintf_set() hasn't been called. */
+    wcsprintf_file = stream;
+  }
+
+  va_start(arg_list, format);
+
+  if (wcsprintf_file) {
+    /* Output to file. */
+    nbytes = vfprintf(wcsprintf_file, format, arg_list);
+
+  } else {
+    /* Output to buffer. */
+    used = wcsprintf_bufp - wcsprintf_buff;
+    if (wcsprintf_size - used < 128) {
+      /* Expand the buffer. */
+      wcsprintf_size += 1024;
+      realloc_buff = realloc(wcsprintf_buff, wcsprintf_size);
+      if (realloc_buff == NULL) {
+        free(wcsprintf_buff);
+        wcsprintf_buff = 0x0;
         return 1;
       }
+      wcsprintf_buff = realloc_buff;
       wcsprintf_bufp = wcsprintf_buff + used;
     }
 
diff --git a/cextern/wcslib/C/wcsprintf.h b/cextern/wcslib/C/wcsprintf.h
index 3420f2d..4eceaef 100644
--- a/cextern/wcslib/C/wcsprintf.h
+++ b/cextern/wcslib/C/wcsprintf.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsprintf.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsprintf.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the FITS World Coordinate System
+* WCSLIB 4.19 - C routines that implement the FITS World Coordinate System
 * (WCS) standard.
 *
 * Summary of the wcsprintf routines
@@ -33,13 +33,17 @@
 * These routines allow diagnostic output from celprt(), linprt(), prjprt(),
 * spcprt(), tabprt(), wcsprt(), and wcserr_prt() to be redirected to a file or
 * captured in a string buffer.  Those routines all use wcsprintf() for output.
+* Likewise wcsfprintf() is used by wcsbth() and wcspih().  Both functions may
+* be used by application programmers to have other output go to the same
+* place.
 *
 *
 * wcsprintf() - Print function used by WCSLIB diagnostic routines
 * ---------------------------------------------------------------
-* wcsprintf() is used by the celprt(), linprt(), prjprt(), spcprt(), tabprt(),
-* wcsprt(), and wcserr_prt() routines.  Its output may be redirected to a file
-* or string buffer via wcsprintf_set().  By default output goes to stdout.
+* wcsprintf() is used by celprt(), linprt(), prjprt(), spcprt(), tabprt(),
+* wcsprt(), and wcserr_prt() for diagnostic output which by default goes to
+* stdout.  However, it may be redirected to a file or string buffer via
+* wcsprintf_set().
 *
 * Given:
 *   format    char*     Format string, passed to one of the printf(3) family
@@ -51,13 +55,31 @@
 *             int       Number of bytes written.
 *
 *
-* wcsprintf_set() - Set output disposition for wcsprintf()
-* --------------------------------------------------------
+* wcsfprintf() - Print function used by WCSLIB diagnostic routines
+* ----------------------------------------------------------------
+* wcsfprintf() is used by wcsbth(), and wcspih() for diagnostic output which
+* they send to stderr.  However, it may be redirected to a file or string
+* buffer via wcsprintf_set().
+*
+* Given:
+*   stream    FILE*     The output stream if not overridden by a call to
+*                       wcsprintf_set().
+*
+*   format    char*     Format string, passed to one of the printf(3) family
+*                       of stdio library functions.
+*
+*   ...       mixed     Argument list matching format, as per printf(3).
+*
+* Function return value:
+*             int       Number of bytes written.
+*
+*
+* wcsprintf_set() - Set output disposition for wcsprintf() and wcsfprintf()
+* -------------------------------------------------------------------------
 * wcsprintf_set() sets the output disposition for wcsprintf() which is used by
 * the celprt(), linprt(), prjprt(), spcprt(), tabprt(), wcsprt(), and
-* wcserr_prt() routines.
-*
-* Output goes to stdout by default if wcsprintf_set() has not been called.
+* wcserr_prt() routines, and for wcsfprintf() which is used by wcsbth() and
+* wcspih().
 *
 * Given:
 *   wcsout    FILE*     Pointer to an output stream that has been opened for
@@ -103,6 +125,8 @@
 #ifndef WCSLIB_WCSPRINTF
 #define WCSLIB_WCSPRINTF
 
+#include <stdio.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -116,6 +140,7 @@ extern "C" {
 
 int wcsprintf_set(FILE *wcsout);
 int wcsprintf(const char *format, ...);
+int wcsfprintf(FILE *stream, const char *format, ...);
 const char *wcsprintf_buf(void);
 
 #ifdef __cplusplus
diff --git a/cextern/wcslib/C/wcstrig.c b/cextern/wcslib/C/wcstrig.c
index 2c01bcd..4da81b9 100644
--- a/cextern/wcslib/C/wcstrig.c
+++ b/cextern/wcslib/C/wcstrig.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcstrig.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcstrig.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <math.h>
diff --git a/cextern/wcslib/C/wcstrig.h b/cextern/wcslib/C/wcstrig.h
index 910230b..d60cc52 100644
--- a/cextern/wcslib/C/wcstrig.h
+++ b/cextern/wcslib/C/wcstrig.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcstrig.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcstrig.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
 * Summary of the wcstrig routines
diff --git a/cextern/wcslib/C/wcsulex.l b/cextern/wcslib/C/wcsulex.l
index 014394f..f8f90ed 100644
--- a/cextern/wcslib/C/wcsulex.l
+++ b/cextern/wcslib/C/wcsulex.l
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsulex.l,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsulex.l,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
 * wcsulex.l is a Flex description file containing the definition of a
@@ -97,7 +97,7 @@ ADD_UNIT  {ADD_ALL}|{ADD_SUP}|{ADD_SUB}|{ADD_NONE}
 #include "wcsutil.h"
 
 #define YY_DECL int wcsulexe(const char unitstr[], int *func, double *scale, \
-                             double units[], struct wcserr **err)
+                             double units[WCSUNITS_NTYPE], struct wcserr **err)
 
 /* Used in preempting the call to exit() by yy_fatal_error(). */
 jmp_buf wcsulex_abort_jmp_env;
diff --git a/cextern/wcslib/C/wcsunits.c b/cextern/wcslib/C/wcsunits.c
index d086c3d..b386092 100644
--- a/cextern/wcslib/C/wcsunits.c
+++ b/cextern/wcslib/C/wcsunits.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsunits.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsunits.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <math.h>
diff --git a/cextern/wcslib/C/wcsunits.h b/cextern/wcslib/C/wcsunits.h
index e9fc703..b75edb5 100644
--- a/cextern/wcslib/C/wcsunits.h
+++ b/cextern/wcslib/C/wcsunits.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,10 +22,10 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsunits.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsunits.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
-* WCSLIB 4.16 - C routines that implement the FITS World Coordinate System
+* WCSLIB 4.19 - C routines that implement the FITS World Coordinate System
 * (WCS) standard.  Refer to
 *
 *   "Representations of world coordinates in FITS",
@@ -393,14 +393,15 @@ int wcsunitse(const char have[], const char want[], double *scale,
 
 int wcsutrne(int ctrl, char unitstr[], struct wcserr **err);
 
-int wcsulexe(const char unitstr[], int *func, double *scale, double units[],
-             struct wcserr **err);
+int wcsulexe(const char unitstr[], int *func, double *scale,
+             double units[WCSUNITS_NTYPE], struct wcserr **err);
 
 /* Deprecated. */
 int wcsunits(const char have[], const char want[], double *scale,
              double *offset, double *power);
 int wcsutrn(int ctrl, char unitstr[]);
-int wcsulex(const char unitstr[], int *func, double *scale, double units[]);
+int wcsulex(const char unitstr[], int *func, double *scale,
+            double units[WCSUNITS_NTYPE]);
 
 #ifdef __cplusplus
 }
diff --git a/cextern/wcslib/C/wcsutil.c b/cextern/wcslib/C/wcsutil.c
index 021d3ef..6fafb33 100644
--- a/cextern/wcslib/C/wcsutil.c
+++ b/cextern/wcslib/C/wcsutil.c
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsutil.c,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsutil.c,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *===========================================================================*/
 
 #include <ctype.h>
@@ -147,7 +147,7 @@ void wcsutil_setBit(int nelem, const int *sel, int bits, int *array)
 
 /*--------------------------------------------------------------------------*/
 
-char *wcsutil_fptr2str(int (*func)(void), char hext[])
+char *wcsutil_fptr2str(int (*func)(void), char hext[19])
 
 {
   unsigned char *p = (unsigned char *)(&func);
diff --git a/cextern/wcslib/C/wcsutil.h b/cextern/wcslib/C/wcsutil.h
index e5ffb50..cdf22ef 100644
--- a/cextern/wcslib/C/wcsutil.h
+++ b/cextern/wcslib/C/wcsutil.h
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsutil.h,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsutil.h,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
 * Summary of the wcsutil routines
@@ -190,16 +190,15 @@
 *
 * wcsutil_fptr2str() translates a pointer-to-function to hexadecimal string
 * representation for output.  It is used by the various routines that print
-* the contents of WCSLIB structs.  Note that it is not strictly legal to
-* type-pun a function pointer to void*.
-*
-* See stackoverflow.com/questions/2741683/how-to-format-a-function-pointer
+* the contents of WCSLIB structs, noting that it is not strictly legal to
+* type-pun a function pointer to void*.  See
+* http://stackoverflow.com/questions/2741683/how-to-format-a-function-pointer
 *
 * Given:
-*   fptr      int (*)() Pointer to function.
+*   fptr      int(*)()  Pointer to function.
 *
 * Returned:
-*   hext      char[]    Null-terminated string.  Should be at least 19 bytes
+*   hext      char[19]  Null-terminated string.  Should be at least 19 bytes
 *                       in size to accomodate a 64-bit address (16 bytes in
 *                       hex), plus the leading "0x" and trailing '\0'.
 *
@@ -211,7 +210,7 @@
 * ---------------------------------------------------------------------
 * INTERNAL USE ONLY.
 *
-* wcsutil_double2str() converts a double to a string, but unlike sprintf it
+* wcsutil_double2str() converts a double to a string, but unlike sprintf() it
 * ignores the locale and always uses a '.' as the decimal separator.
 *
 * Returned:
@@ -219,7 +218,7 @@
 *
 * Given:
 *   format    char *    The formatting directive, such as "%f".  This
-*                       may be any of the forms accepted by sprintf, but
+*                       may be any of the forms accepted by sprintf(), but
 *                       should only include a formatting directive and
 *                       nothing else.
 *
@@ -230,14 +229,14 @@
 * ------------------------------------------------------------------------
 * INTERNAL USE ONLY.
 *
-* wcsutil_str2double() converts a string to a double, but unlike sscanf it
+* wcsutil_str2double() converts a string to a double, but unlike sscanf() it
 * ignores the locale and always expects a '.' as the decimal separator.
 *
 * Given:
 *   buf       char *    The string containing the value
 *
 *   format    char *    The formatting directive, such as "%lf".  This
-*                       may be any of the forms accepted by sscanf, but
+*                       may be any of the forms accepted by sscanf(), but
 *                       should only include a single formatting directive.
 *
 * Returned:
@@ -248,6 +247,10 @@
 #ifndef WCSLIB_WCSUTIL
 #define WCSLIB_WCSUTIL
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 void wcsutil_blank_fill(int n, char c[]);
 void wcsutil_null_fill (int n, char c[]);
 
@@ -255,8 +258,12 @@ int  wcsutil_allEq (int nvec, int nelem, const double *first);
 void wcsutil_setAll(int nvec, int nelem, double *first);
 void wcsutil_setAli(int nvec, int nelem, int *first);
 void wcsutil_setBit(int nelem, const int *sel, int bits, int *array);
-char *wcsutil_fptr2str(int (*func)(void), char hext[]);
+char *wcsutil_fptr2str(int (*func)(void), char hext[19]);
 int  wcsutil_str2double(const char *buf, const char *format, double *value);
 void wcsutil_double2str(char *buf, const char *format, double value);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* WCSLIB_WCSUTIL */
diff --git a/cextern/wcslib/C/wcsutrn.l b/cextern/wcslib/C/wcsutrn.l
index b4a64fb..f102f76 100644
--- a/cextern/wcslib/C/wcsutrn.l
+++ b/cextern/wcslib/C/wcsutrn.l
@@ -1,7 +1,7 @@
 /*============================================================================
 
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -22,7 +22,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: wcsutrn.l,v 4.16 2012/11/07 04:42:44 cal103 Exp $
+  $Id: wcsutrn.l,v 4.19 2013/09/29 14:17:51 mcalabre Exp $
 *=============================================================================
 *
 * wcsutrn.l is a Flex description file containing the definition of a lexical
diff --git a/cextern/wcslib/CHANGES b/cextern/wcslib/CHANGES
index 0521660..ae7b917 100644
--- a/cextern/wcslib/CHANGES
+++ b/cextern/wcslib/CHANGES
@@ -1,3 +1,63 @@
+WCSLIB version 4.19 (2013/09/30)
+--------------------------------
+
+
+* C library
+
+  - Bug fix in wcshdo(), uncovered by cppcheck and reported by David
+    Binderman.  Fixed additional minor inconsistencies in hpxx2s(),
+    wcsprintf(), and wcsfprintf() reported by cppcheck.
+
+  - Minor fix to twcstab reported by cppcheck.
+
+  - Bug fix in wcssub() for handling (non-standard) PROJPn keywords
+    (uncovered by valgrind, reported by Paul Price).
+
+
+WCSLIB version 4.18 (2013/07/13)
+--------------------------------
+
+* C library
+
+  - Implemented the butterfly projection (XPH), being the polar form of
+    the HEALPix projection with (H,K) = (4,3).  Augmented tprj1.c and
+    tprj2.c to suit.
+
+  - Bug fix in celfix() when translating GLS to SFL with non-zero
+    reference point.
+
+  - Documentation generation moved to doxygen 1.8.4 (was 1.5.6).
+
+* Fortran wrappers
+
+  - Wrappers for XPH and corresponding modifications to the test
+    programs.
+
+  - Fixed a few inconsequential warnings from gfortran 4.7.2 relating
+    to implicit type conversions in the test programs.
+
+* Utilities
+
+  - In HPXcvt, fixed incorrect axis scaling (CDELT1 and CDELT2) in the
+    XPH header, and set the PCi_ja matrix in the HPX header to a pure
+    45 degree rotation with appropriate adjustment of CDELT1 and CDELT2
+    (matching XPH).  Also set LONPOLE to 180 degree in the XPH header
+    with adjustment of CRVAL1 as recommended in the errata.  These
+    changes prompted by Paddy Leahy.  Also, modified the FITS header
+    comment for XPH - it is no longer "experimental", and accept the
+    '-x' option (i.e. without qualification) as equivalent to '-xn'.
+
+
+WCSLIB version 4.17 (2013/01/29)
+--------------------------------
+
+* C library
+
+  - Added wcsfprintf() to wcsprint.h.  Now used in wcsbth() and wcspih()
+    to allow diagnostic output to be redirected.  Changes provided by
+    Michael Droettboom.
+
+
 WCSLIB version 4.16 (2012/11/07)
 --------------------------------
 
@@ -8,7 +68,7 @@ WCSLIB version 4.16 (2012/11/07)
     coordinate representation" (if reporting is enabled).
 
 * Utilities
-    
+
   - wcsware has a new option, -P, which does the same as -p except that
     it won't print a wcsprm struct with the name "DEFAULTS".
 
@@ -1982,4 +2042,4 @@ WCSLIB version 1.0 (1995/01/31)
   Initial release.
 
 ------------------------------------------------------------------------
-$Id: CHANGES,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+$Id: CHANGES,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
diff --git a/cextern/wcslib/GNUmakefile b/cextern/wcslib/GNUmakefile
index a82e18b..d4efe8c 100644
--- a/cextern/wcslib/GNUmakefile
+++ b/cextern/wcslib/GNUmakefile
@@ -1,5 +1,5 @@
 #-----------------------------------------------------------------------------
-# GNU makefile for building WCSLIB 4.16
+# GNU makefile for building WCSLIB 4.19
 #
 # Summary of the main targets
 # ---------------------------
@@ -32,7 +32,7 @@
 #
 # Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 # http://www.atnf.csiro.au/people/Mark.Calabretta
-# $Id: GNUmakefile,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+# $Id: GNUmakefile,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
 #-----------------------------------------------------------------------------
 # Get configure settings.
 include makedefs
@@ -113,6 +113,7 @@ cleanest distclean realclean :
 	   done
 	-  $(RM) *.log
 	-  $(RM) -r autom4te.cache autoscan.log
+	-  $(RM) -r api-sanity-check
 	-  $(RM) confdefs.h conftest.*
 	-  $(RM) config.log config.status configure.lineno
 	-  $(RM) makedefs wcslib.pc
@@ -186,9 +187,9 @@ dist :
 	   chmod 444 $(WCSLIBPKG).tar.bz2
 
 install_dist :
-	   scp -p $(WCSLIBPKG).tar.bz2 venice:/nfs/ftp/software/wcslib/
+	   scp -p $(WCSLIBPKG).tar.bz2 cal103 at venice:/nfs/ftp/software/wcslib/
 	   mv -f  $(WCSLIBPKG).tar.bz2 ../wcslib-releases/
-	   ssh venice "cd /nfs/ftp/software/wcslib/ && \
+	   ssh cal103 at venice "cd /nfs/ftp/software/wcslib/ && \
 	     rm -f wcslib.tar.bz2 && \
 	     ln -s $(WCSLIBPKG).tar.bz2 wcslib.tar.bz2"
 	   cp -fp CHANGES wcslib.pdf ~/public_html/WCS/
diff --git a/cextern/wcslib/INSTALL b/cextern/wcslib/INSTALL
index b0dac10..a162982 100644
--- a/cextern/wcslib/INSTALL
+++ b/cextern/wcslib/INSTALL
@@ -1,5 +1,5 @@
 ------------------------------------------------------------------------------
-WCSLIB 4.16 and PGSBOX 4.16 INSTALLATION
+WCSLIB 4.19 and PGSBOX 4.19 INSTALLATION
 --------------------------------------
 
 WCSLIB requires an ANSI C compiler with standard ANSI C environment, that is,
@@ -10,8 +10,8 @@ Installation of WCSLIB is handled by GNU autoconf; GNU make (referred to here
 as 'gmake') must be used.  The WCSLIB distribution also includes PGSBOX (refer
 to the README file), to unpack it type
 
-  zcat wcslib-4.16.tar.gz | tar pvxf -
-  cd wcslib-4.16
+  zcat wcslib-4.19.tar.gz | tar pvxf -
+  cd wcslib-4.19
 
 then if you do not need to specify any configuration options, simply run
 
@@ -93,7 +93,7 @@ The INSTALL file provided with GNU autoconf 2.53 is appended without change.
 
 Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 http://www.atnf.csiro.au/people/Mark.Calabretta
-$Id: INSTALL,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+$Id: INSTALL,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
 
 ==============================================================================
 
diff --git a/cextern/wcslib/README b/cextern/wcslib/README
index d644c06..1b8e0bd 100644
--- a/cextern/wcslib/README
+++ b/cextern/wcslib/README
@@ -1,8 +1,8 @@
 ------------------------------------------------------------------------------
-                         WCSLIB 4.16 and PGSBOX 4.16
+                         WCSLIB 4.19 and PGSBOX 4.19
 ------------------------------------------------------------------------------
-  WCSLIB 4.16 - an implementation of the FITS WCS standard.
-  Copyright (C) 1995-2012, Mark Calabretta
+  WCSLIB 4.19 - an implementation of the FITS WCS standard.
+  Copyright (C) 1995-2013, Mark Calabretta
 
   This file is part of WCSLIB.
 
@@ -23,7 +23,7 @@
 
   Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
   http://www.atnf.csiro.au/people/Mark.Calabretta
-  $Id: README,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+  $Id: README,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
 ------------------------------------------------------------------------------
 
 Please refer to
diff --git a/cextern/wcslib/THANKS b/cextern/wcslib/THANKS
index a56778c..64534df 100644
--- a/cextern/wcslib/THANKS
+++ b/cextern/wcslib/THANKS
@@ -8,6 +8,7 @@ Klaus Banse (ESO)
 David Barnes (ATNF/CSIRO)
 David Berry (STARLINK & JAC)
 Emmanuel Bertin (IAP)
+David Binderman
 Jeremy Brewer (U. Pittsburgh)
 Wim Brouw (ATNF/CSIRO)
 Peter Bunclark (IoA, U. Cambridge)
@@ -37,6 +38,7 @@ Neil Killeen (ATNF/CSIRO)
 David King (NRAO)
 Paul F. Kunz (SLAC/Stanford U.)
 Jonas M�ller Larsen (ESO)
+Paddy Leahy (U. Manchester)
 Jim Lewis (IoA, U. Cambridge)
 Marco Lombardi (ESO)
 Lars Kristian Lundin (ESO)
@@ -57,6 +59,7 @@ Bill Pence (NASA/GSFC)
 Olivier Perdereau (LAL/IN2P3)
 Dirk Petry (ESO)
 Ray Plante (NCSA/UIUC)
+Paul Price (Princeton U.)
 Niruj Mohan Ramanujam (Leiden Obs)
 Harold Ravlin (U. Illinois)
 Thomas Robitaille (MPIA)
@@ -79,4 +82,4 @@ Daren Scot Wilson (NRAO)
 Tony Wong (ATNF/CSIRO)
 
 
-$Id: THANKS,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+$Id: THANKS,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
diff --git a/cextern/wcslib/VALIDATION b/cextern/wcslib/VALIDATION
index 68ebdd2..3b996ae 100644
--- a/cextern/wcslib/VALIDATION
+++ b/cextern/wcslib/VALIDATION
@@ -1,6 +1,33 @@
 Platforms on which the installation procedures and test suite were exercised
 
 
+WCSLIB version 4.19 (2013/09/30)
+--------------------------------
+
+* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 7.0 (wheezy)
+  uname -r (kernel version): 3.2.0-4-686-pae
+  gcc --version: gcc (Debian 4.7.2-5) 4.7.2
+  gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2
+
+
+WCSLIB version 4.18 (2013/07/12)
+--------------------------------
+
+* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 7.0 (wheezy)
+  uname -r (kernel version): 3.2.0-4-686-pae
+  gcc --version: gcc (Debian 4.7.2-5) 4.7.2
+  gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2
+
+
+WCSLIB version 4.17 (2013/01/29)
+--------------------------------
+
+* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 5.0.9 (lenny)
+  uname -r (kernel version): 2.6.26-2-686
+  gcc --version: gcc (Debian 4.3.2-1.1) 4.3.2
+  gfortran --version: GNU Fortran (Debian 4.3.2-1.1) 4.3.2
+
+
 WCSLIB version 4.15 (2012/09/26)
 --------------------------------
 
@@ -236,4 +263,4 @@ WCSLIB version 4.4 (2009/08/06)
           2004/04/23
 
 ------------------------------------------------------------------------------
-$Id: VALIDATION,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+$Id: VALIDATION,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
diff --git a/cextern/wcslib/configure b/cextern/wcslib/configure
index 83e28b8..e772f5d 100755
--- a/cextern/wcslib/configure
+++ b/cextern/wcslib/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
-# From configure.ac Revision: 4.16 .
+# From configure.ac Revision: 4.19 .
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for WCSLIB 4.16.
+# Generated by GNU Autoconf 2.61 for WCSLIB 4.19.
 #
 # Report bugs to <mark at calabretta.id.au>.
 #
@@ -574,9 +574,9 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 
 # Identity of this package.
 PACKAGE_NAME='WCSLIB'
-PACKAGE_TARNAME='wcslib-4.16'
-PACKAGE_VERSION='4.16'
-PACKAGE_STRING='WCSLIB 4.16'
+PACKAGE_TARNAME='wcslib-4.19'
+PACKAGE_VERSION='4.19'
+PACKAGE_STRING='WCSLIB 4.19'
 PACKAGE_BUGREPORT='mark at calabretta.id.au'
 
 ac_unique_file="C/wcs.h"
@@ -1211,7 +1211,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures WCSLIB 4.16 to adapt to many kinds of systems.
+\`configure' configures WCSLIB 4.19 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1259,7 +1259,7 @@ Fine tuning of the installation directories:
   --infodir=DIR          info documentation [DATAROOTDIR/info]
   --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
   --mandir=DIR           man documentation [DATAROOTDIR/man]
-  --docdir=DIR           documentation root [DATAROOTDIR/doc/wcslib-4.16]
+  --docdir=DIR           documentation root [DATAROOTDIR/doc/wcslib-4.19]
   --htmldir=DIR          html documentation [DOCDIR]
   --dvidir=DIR           dvi documentation [DOCDIR]
   --pdfdir=DIR           pdf documentation [DOCDIR]
@@ -1279,7 +1279,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of WCSLIB 4.16:";;
+     short | recursive ) echo "Configuration of WCSLIB 4.19:";;
    esac
   cat <<\_ACEOF
 
@@ -1379,7 +1379,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-WCSLIB configure 4.16
+WCSLIB configure 4.19
 generated by GNU Autoconf 2.61
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1393,7 +1393,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by WCSLIB $as_me 4.16, which was
+It was created by WCSLIB $as_me 4.19, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   $ $0 $@
@@ -12517,7 +12517,7 @@ exec 6>&1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by WCSLIB $as_me 4.16, which was
+This file was extended by WCSLIB $as_me 4.19, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -12566,7 +12566,7 @@ Report bugs to <bug-autoconf at gnu.org>."
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-WCSLIB config.status 4.16
+WCSLIB config.status 4.19
 configured by $0, generated by GNU Autoconf 2.61,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
diff --git a/cextern/wcslib/configure.ac b/cextern/wcslib/configure.ac
index 22a83c8..0064e66 100644
--- a/cextern/wcslib/configure.ac
+++ b/cextern/wcslib/configure.ac
@@ -8,12 +8,12 @@
 #
 # Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 # http://www.atnf.csiro.au/people/Mark.Calabretta
-# $Id: configure.ac,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+# $Id: configure.ac,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
 #-----------------------------------------------------------------------------
 
-AC_INIT([WCSLIB], [4.16], [mark at calabretta.id.au], [wcslib-4.16])
+AC_INIT([WCSLIB], [4.19], [mark at calabretta.id.au], [wcslib-4.19])
 AC_PREREQ([2.53])
-AC_REVISION([$Revision: 4.16 $])
+AC_REVISION([$Revision: 4.19 $])
 AC_SUBST([PACKAGE_VERSION])
 AC_DEFINE_UNQUOTED([WCSLIB_VERSION], [$PACKAGE_VERSION], [Define wcslib version])
 
diff --git a/cextern/wcslib/flavours b/cextern/wcslib/flavours
index e95dc00..f064cd5 100644
--- a/cextern/wcslib/flavours
+++ b/cextern/wcslib/flavours
@@ -12,7 +12,7 @@
 #
 # Reminder: add '-d' to FLFLAGS for debugging.
 #
-# $Id: flavours,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+# $Id: flavours,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
 #-----------------------------------------------------------------------------
 
 # The list of FLAVOURs can be set on the command line.
@@ -151,6 +151,18 @@ ifdef FLAVOUR
   TIMER := $(TIMER) ; echo "    with $(FLAVOUR) FLAVOUR."
 endif
 
+# Experimental (see http://upstream-tracker.org/versions/wcslib.html).
+api-sanity-check :
+	-@ $(RM) -r $@/
+	 @ mkdir $@/
+	 @ cp C/*.h C/$(SHRLIB) $@/
+	 @ echo "<version>$(LIBVER)</version>" > $@/opts.xml
+	 @ echo "<headers>.</headers>" >> $@/opts.xml
+	 @ echo "<libs>.</libs>" >> $@/opts.xml
+	 @ echo "<gcc_options>-Dwtbarr=wtbarr_s</gcc_options>" >> $@/opts.xml
+	   cd $@ && api-sanity-checker -lib WCSLIB -d opts.xml \
+	     -show-retval -gen -build -run
+
 show ::
 	-@ echo 'For code development...'
 	-@ echo '  FLAVOURS    := $(FLAVOURS)'
diff --git a/cextern/wcslib/makedefs.in b/cextern/wcslib/makedefs.in
index 7785263..9136d01 100644
--- a/cextern/wcslib/makedefs.in
+++ b/cextern/wcslib/makedefs.in
@@ -1,5 +1,5 @@
 #-----------------------------------------------------------------------------
-# GNU makefile definitions for building WCSLIB 4.16
+# GNU makefile definitions for building WCSLIB 4.19
 #
 # makedefs is generated from makedefs.in by configure.  It contains variable
 # definitions and some general-purpose rules for building WCSLIB.
@@ -39,11 +39,11 @@
 #      compiled separately without this option.
 #
 #      The shared library will be installed with version number, e.g. as
-#      libwcs.so.4.16 or libwcs.4.16.dylib with or without the symlink
+#      libwcs.so.4.19 or libwcs.4.19.dylib with or without the symlink
 #      required to make it visible to the linker (controlled by the SHRLN
 #      variable).  On Macs it is deliberately not created because its very
 #      existence precludes static linking with the cctools linker.  You can
-#      still link dynamically by using -lwcs.4.16.
+#      still link dynamically by using -lwcs.4.19.
 #
 #   4) PGPLOT is Tim Pearson's Fortran graphics library with separate C
 #      interface available from astro.caltech.edu.  It is only required by
@@ -74,7 +74,7 @@
 #
 # Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 # http://www.atnf.csiro.au/people/Mark.Calabretta
-# $Id: makedefs.in,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+# $Id: makedefs.in,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
 #-----------------------------------------------------------------------------
 # Version.
   LIBVER    := @LIBVER@
diff --git a/cextern/wcslib/wcsconfig.h.in b/cextern/wcslib/wcsconfig.h.in
index b201b39..a592dab 100644
--- a/cextern/wcslib/wcsconfig.h.in
+++ b/cextern/wcslib/wcsconfig.h.in
@@ -1,11 +1,11 @@
 /*============================================================================
 *
 * wcsconfig.h is generated from wcsconfig.h.in by 'configure'.  It contains
-* C preprocessor macro definitions for compiling WCSLIB 4.16
+* C preprocessor macro definitions for compiling WCSLIB 4.19
 *
 * Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 * http://www.atnf.csiro.au/people/Mark.Calabretta
-* $Id: wcsconfig.h.in,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+* $Id: wcsconfig.h.in,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
 *===========================================================================*/
 
 /* WCSLIB library version number. */
diff --git a/cextern/wcslib/wcsconfig_f77.h.in b/cextern/wcslib/wcsconfig_f77.h.in
index 6e1600d..7da57b8 100644
--- a/cextern/wcslib/wcsconfig_f77.h.in
+++ b/cextern/wcslib/wcsconfig_f77.h.in
@@ -1,12 +1,12 @@
 /*============================================================================
 *
 * wcsconfig_f77.h is generated from wcsconfig_f77.h.in by 'configure'.  It
-* contains C preprocessor definitions for building the WCSLIB 4.16 Fortran
+* contains C preprocessor definitions for building the WCSLIB 4.19 Fortran
 * wrappers.
 *
 * Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 * http://www.atnf.csiro.au/people/Mark.Calabretta
-* $Id: wcsconfig_f77.h.in,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+* $Id: wcsconfig_f77.h.in,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
 *===========================================================================*/
 
 /* Integer array type large enough to hold an address.  Set here to int[2] for
diff --git a/cextern/wcslib/wcsconfig_tests.h.in b/cextern/wcslib/wcsconfig_tests.h.in
index 9b390ae..0dbf1fa 100644
--- a/cextern/wcslib/wcsconfig_tests.h.in
+++ b/cextern/wcslib/wcsconfig_tests.h.in
@@ -1,12 +1,12 @@
 /*============================================================================
 *
 * wcsconfig_test.h is generated from wcsconfig_test.h.in by 'configure'.  It
-* contains C preprocessor definitions for compiling the WCSLIB 4.16 test/demo
+* contains C preprocessor definitions for compiling the WCSLIB 4.19 test/demo
 * programs.
 *
 * Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 * http://www.atnf.csiro.au/people/Mark.Calabretta
-* $Id: wcsconfig_tests.h.in,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+* $Id: wcsconfig_tests.h.in,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
 *===========================================================================*/
 
 #include <wcsconfig.h>
diff --git a/cextern/wcslib/wcsconfig_utils.h.in b/cextern/wcslib/wcsconfig_utils.h.in
index 9a0d31a..b9dc5bb 100644
--- a/cextern/wcslib/wcsconfig_utils.h.in
+++ b/cextern/wcslib/wcsconfig_utils.h.in
@@ -1,12 +1,12 @@
 /*============================================================================
 *
 * wcsconfig_utils.h is generated from wcsconfig_utils.h.in by 'configure'.
-* It contains C preprocessor macro definitions for compiling the WCSLIB 4.16
+* It contains C preprocessor macro definitions for compiling the WCSLIB 4.19
 * utilities.
 *
 * Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
 * http://www.atnf.csiro.au/people/Mark.Calabretta
-* $Id: wcsconfig_utils.h.in,v 4.16 2012/11/07 04:42:45 cal103 Exp $
+* $Id: wcsconfig_utils.h.in,v 4.19 2013/09/29 14:17:53 mcalabre Exp $
 *===========================================================================*/
 
 #include <wcsconfig.h>
diff --git a/docs/Makefile b/docs/Makefile
index 058cf96..c797950 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -38,7 +38,7 @@ help:
 
 clean:
 	-rm -rf $(BUILDDIR)
-	-rm -rf _generated
+	-rm -rf api
 
 html:
 	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
diff --git a/docs/_static/timer_prediction_pow10.png b/docs/_static/timer_prediction_pow10.png
new file mode 100644
index 0000000..ede12a2
Binary files /dev/null and b/docs/_static/timer_prediction_pow10.png differ
diff --git a/docs/conf.py b/docs/conf.py
index 12bc30e..09824ca 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -28,6 +28,8 @@
 # Load all of the global Astropy configuration
 from astropy.sphinx.conf import *
 
+import astropy
+
 
 # -- General configuration ----------------------------------------------------
 
@@ -50,10 +52,17 @@ if 'templates_path' not in locals():  # in case parent conf.py defines it
     templates_path = []
 templates_path.append('_templates')
 
+
 # This is added to the end of RST files - a good place to put substitutions to
 # be used globally.
 rst_epilog += """
-"""
+.. |minimum_numpy_version| replace:: {0.__minimum_numpy_version__}
+
+.. Astropy
+.. _Astropy: http://astropy.org
+.. _`Astropy mailing list`: http://mail.scipy.org/mailman/listinfo/astropy
+.. _`astropy-dev mailing list`: http://groups.google.com/group/astropy-dev
+""".format(astropy)
 
 # -- Project information ------------------------------------------------------
 
@@ -65,8 +74,6 @@ copyright = u'2011-2013, ' + author
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 
-import astropy
-
 # The short X.Y version.
 version = astropy.__version__.split('-', 1)[0]
 # The full version, including alpha/beta/rc tags.
@@ -76,11 +83,24 @@ release = astropy.__version__
 # -- Options for HTML output ---------------------------------------------------
 
 # A NOTE ON HTML THEMES
-# The global astropy configuration uses a custom theme, 'bootstrap-astropy',
-# which is installed along with astropy. A different theme can be used or
-# the options for this theme can be modified by overriding some of the
-# variables set in the global configuration. The variables set in the
-# global configuration are listed below, commented out.
+#
+# The global astropy configuration uses a custom theme,
+# 'bootstrap-astropy', which is installed along with astropy. The
+# theme has options for controlling the text of the logo in the upper
+# left corner. This is how you would specify the options in order to
+# override the theme defaults (The following options *are* the
+# defaults, so we do not actually need to set them here.)
+
+#html_theme_options = {
+#    'logotext1': 'astro',  # white,  semi-bold
+#    'logotext2': 'py',     # orange, light
+#    'logotext3': ':docs'   # white,  light
+#    }
+
+# A different theme can be used, or other parts of this theme can be
+# modified, by overriding some of the variables set in the global
+# configuration. The variables set in the global configuration are
+# listed below, commented out.
 
 # Add any paths that contain custom themes here, relative to this directory.
 # To use a different custom theme, add the directory containing the theme.
diff --git a/docs/configs/index.rst b/docs/config/index.rst
similarity index 97%
rename from docs/configs/index.rst
rename to docs/config/index.rst
index 7ac1c2f..5f1c789 100644
--- a/docs/configs/index.rst
+++ b/docs/config/index.rst
@@ -1,3 +1,5 @@
+.. doctest_skip
+
 .. _astropy_config:
 
 ***************************************
@@ -86,8 +88,7 @@ modified in an active python session using the
 `ConfigurationItem` object can be used to make these changes. These items
 are found in the same module as the configuration section they are in,
 and usually have the same name as in the configuration files, but in all
-caps. Alternatively, they may be located with the
-:func:`~astropy.config.configuration.get_config_items` function.
+caps.
 
 For example, if there is a part of your configuration file that looks like::
 
@@ -114,14 +115,6 @@ You should be able to modify the values at run-time this way::
     >>> REMOTE_TIMEOUT()
     4.5
 
-Or alternatively::
-
-    >>> from astropy.config import get_config
-
-    >>> items = get_config('astropy.utils.data')
-    >>> items['dataurl'].set('http://astropydata.mywebsite.com')
-    >>> items['remote_timeout'].set('4.5')
-
 Note that this will *not* permanently change these values in the configuration
 files - just for the current session.  To change the configuration files,
 after you've made your changes, you can do::
diff --git a/docs/constants/index.rst b/docs/constants/index.rst
index d30e745..2f0d75d 100644
--- a/docs/constants/index.rst
+++ b/docs/constants/index.rst
@@ -32,18 +32,19 @@ different units for example::
       Name   = Speed of light in vacuum
       Value  = 299792458.0
       Error  = 0.0
-      Units = m / (s)
+      Units  = m / s
       Reference = CODATA 2010
 
     >>> print const.c.to('km/s')
-    299792.458 km / (s)
+    299792.458 km / s
 
     >>> print const.c.to('pc/yr')
-    0.306594845466 pc / (yr)
+    0.306601393788 pc / yr
 
 and you can use them in conjunction with unit and other non-constant
 `~astropy.units.quantity.Quantity` objects::
 
+    >>> from astropy import units as u
     >>> F = (const.G * 3. * const.M_sun * 100 * u.kg) / (2.2 * u.au) ** 2
     >>> print F.to(u.N)
     0.367669392028 N
@@ -51,19 +52,20 @@ and you can use them in conjunction with unit and other non-constant
 It is possible to convert most constants to cgs using e.g.::
 
     >>> const.c.cgs
-    <Quantity 29979245800.0 cm / (s)>
+    <Quantity 29979245800.0 cm / s>
 
 However, some constants are defined with different physical dimensions in cgs
 and cannot be directly converted. Because of this ambiguity, such constants
 cannot be used in expressions without specifying a system::
 
     >>> 100 * const.e
-    ERROR: TypeError: Constant 'e' does not have physically compatible units
-    across all systems of units and cannot be combined with other values without
-    specifying a system (eg. e.esu) [astropy.constants.constant]
-    ...
+    Traceback (most recent call last):
+        ...
+    TypeError: Constant u'e' does not have physically compatible units
+    across all systems of units and cannot be combined with other
+    values without specifying a system (eg. e.emu)
     >>> 100 * const.e.esu
-    <Quantity 4.80320450571e-08 Fr>
+    <Quantity 4.80320450571...e-08 Fr>
 
 Reference/API
 =============
diff --git a/docs/nddata/images/astropy.png b/docs/convolution/images/astropy.png
similarity index 100%
rename from docs/nddata/images/astropy.png
rename to docs/convolution/images/astropy.png
diff --git a/docs/nddata/images/original.png b/docs/convolution/images/original.png
similarity index 100%
rename from docs/nddata/images/original.png
rename to docs/convolution/images/original.png
diff --git a/docs/nddata/images/scipy.png b/docs/convolution/images/scipy.png
similarity index 100%
rename from docs/nddata/images/scipy.png
rename to docs/convolution/images/scipy.png
diff --git a/docs/convolution/index.rst b/docs/convolution/index.rst
new file mode 100644
index 0000000..2732366
--- /dev/null
+++ b/docs/convolution/index.rst
@@ -0,0 +1,132 @@
+.. _astropy_convolve:
+
+*************************************************
+Convolution and filtering (`astropy.convolution`)
+*************************************************
+
+Introduction
+============
+
+`astropy.convolution` provides convolution functions and kernels that offers
+improvements compared to the scipy `scipy.ndimage` convolution routines,
+including:
+
+* Proper treatment of NaN values
+
+* A single function for 1-D, 2-D, and 3-D convolution
+
+* Improved options for the treatment of edges
+
+* Both direct and Fast Fourier Transform (FFT) versions
+
+* Built-in kernels that are commonly used in Astronomy
+
+The following thumbnails show the difference between Scipy's and
+Astropy's convolve functions on an Astronomical image that contains NaN
+values. Scipy's function essentially returns NaN for all pixels that are
+within a kernel of any NaN value, which is often not the desired result.
+
+.. |original| image:: images/original.png
+.. |scipy| image:: images/scipy.png
+.. |astropy| image:: images/astropy.png
+
++------------+--------------------+----------------------+
+| Original   | Scipy ``convolve`` | Astropy ``convolve`` |
++------------+--------------------+----------------------+
+| |original| | |scipy|            | |astropy|            |
++------------+--------------------+----------------------+
+
+The following sections describe how to make use of the convolution functions,
+and how to use built-in convolution kernels:
+
+Getting started
+===============
+
+Two convolution functions are provided.  They are imported as::
+
+    from astropy.convolution import convolve, convolve_fft
+
+and are both used as::
+
+    result = convolve(image, kernel)
+    result = convolve_fft(image, kernel)
+
+:func:`~astropy.convolution.convolve.convolve` is implemented as a
+direct convolution algorithm, while
+:func:`~astropy.convolution.convolve.convolve_fft` uses a fast Fourier
+transform (FFT). Thus, the former is better for small kernels, while the latter
+is much more efficient for larger kernels.
+
+For example, to convolve a 1-d dataset with a user-specified kernel, you can do::
+
+    >>> from astropy.convolution import convolve
+    >>> convolve([1, 4, 5, 6, 5, 7, 8], [0.2, 0.6, 0.2])
+    array([ 1.4,  3.6,  5. ,  5.6,  5.6,  6.8,  6.2])
+
+Notice that the end points are set to zero - by default, points that are too close to the boundary to have a convolved value calculated are set to zero. However, the :func:`~astropy.convolution.convolve.convolve` function allows for a `boundary` argument that can be used to specify alternate behaviors. For example, setting `boundary='extend'` causes values near the edges to be computed, assuming the original data is simply extended using a constant extrapolation beyond the boundary::
+
+    >>> from astropy.convolution import convolve
+    >>> convolve([1, 4, 5, 6, 5, 7, 8], [0.2, 0.6, 0.2], boundary='extend')
+    array([ 1.6,  3.6,  5. ,  5.6,  5.6,  6.8,  7.8])
+
+The values at the end are computed assuming that any value below the first point is ``1``, and any value above the last point is ``8``. For a more detailed discussion of boundary treatment, see :doc:`using`.
+
+This module also includes built-in kernels that can be imported as e.g.::
+
+    >>> from astropy.convolution import Gaussian1DKernel
+
+To use a kernel, first create a specific instance of the kernel::
+
+    >>> gauss = Gaussian1DKernel(width=2)
+
+``gauss`` is not an array, but a kernel object. The underlying array can be retrieved with::
+
+    >>> gauss.array
+    array([  6.69151129e-05,   4.36341348e-04,   2.21592421e-03,
+             8.76415025e-03,   2.69954833e-02,   6.47587978e-02,
+             1.20985362e-01,   1.76032663e-01,   1.99471140e-01,
+             1.76032663e-01,   1.20985362e-01,   6.47587978e-02,
+             2.69954833e-02,   8.76415025e-03,   2.21592421e-03,
+             4.36341348e-04,   6.69151129e-05])
+
+The kernel can then be used directly when calling
+:func:`~astropy.convolution.convolve.convolve`:
+
+.. plot::
+   :include-source:
+
+    import numpy as np
+    import matplotlib.pyplot as plt
+
+    from astropy.convolution import Gaussian1DKernel, convolve
+
+    # Generate fake data
+    x = np.arange(1000).astype(float)
+    y = np.sin(x / 100.) + np.random.normal(0., 1., x.shape)
+
+    # Create kernel
+    g = Gaussian1DKernel(width=50)
+
+    # Convolve data
+    z = convolve(y, g, boundary='extend')
+
+    # Plot data before and after convolution
+    plt.plot(x, y, 'k.')
+    plt.plot(x, z, 'r-', lw=3)
+    plt.show()
+
+
+Using `convolve`
+================
+
+.. toctree::
+   :maxdepth: 2
+
+   using.rst
+   kernels.rst
+
+Reference/API
+=============
+
+.. automodapi:: astropy.convolution
+    :no-inheritance-diagram:
diff --git a/docs/convolution/kernels.rst b/docs/convolution/kernels.rst
new file mode 100644
index 0000000..8c42ae8
--- /dev/null
+++ b/docs/convolution/kernels.rst
@@ -0,0 +1,317 @@
+Convolution Kernels
+===================
+
+Introduction and Concept
+------------------------
+
+The convolution module provides several built-in kernels to cover the most
+common applications in astronomy. It is also possible to define custom kernels
+from arrays or combine existing kernels to match specific applications.
+
+Every filter kernel is characterized by its response function. For time series
+we speak of an "impulse response function" or for images we call it "point
+spread function". This response function is given for every kernel by a
+`~astropy.modeling.core.ParametricModel`, which is evaluated on a grid with
+:func:`~astropy.convolution.utils.discretize_model` to obtain a kernel
+array, which can be used for discrete convolution with the binned data.
+
+
+Examples
+--------
+
+1D Kernels
+^^^^^^^^^^
+
+One application of filtering is to smooth noisy data. In this case we consider a noisy
+Lorentz curve:
+
+>>> import numpy as np
+>>> from astropy.modeling.models import Lorentz1D
+>>> from astropy.convolution import convolve, Gaussian1DKernel, Box1DKernel
+>>> lorentz = Lorentz1D(1, 0, 1)
+>>> x = np.linspace(-5, 5, 100)
+>>> data_1D = lorentz(x) + 0.1 * (np.random.rand(100) - 0.5)
+
+Smoothing the noisy data with a `~astropy.convolution.kernels.Gaussian1D` of width 2 pixels:
+
+>>> gauss_kernel = Gaussian1DKernel(2)
+>>> smoothed_data_gauss = convolve(data_1D, gauss_kernel)
+
+Smoothing the same data with a `~astropy.convolution.kernels.Box1DKernel` of width 5 pixels:
+
+>>> box_kernel = Box1DKernel(5)
+>>> smoothed_data_box = convolve(data_1D, box_kernel)
+
+The following plot illustrates the results:
+
+.. plot::
+
+    import numpy as np
+    import matplotlib.pyplot as plt
+    from astropy.modeling.models import Lorentz1D
+    from astropy.convolution import convolve, Gaussian1DKernel, Box1DKernel
+
+    # Fake Lorentz data including noise
+    lorentz = Lorentz1D(1, 0, 1)
+    x = np.linspace(-5, 5, 100)
+    data_1D = lorentz(x) + 0.1 * (np.random.rand(100) - 0.5)
+
+    # Smooth data
+    gauss_kernel = Gaussian1DKernel(2)
+    smoothed_data_gauss = convolve(data_1D, gauss_kernel)
+    box_kernel = Box1DKernel(5)
+    smoothed_data_box = convolve(data_1D, box_kernel)
+
+    # Plot data and smoothed data
+    plt.plot(x, data_1D, label='Original')
+    plt.plot(x, smoothed_data_gauss, label='Smoothed with Gaussian1DKernel')
+    plt.plot(x, smoothed_data_box, label='Smoothed with Box1DKernel')
+    plt.xlabel('x [a.u.]')
+    plt.ylabel('amplitude [a.u.]')
+    plt.xlim(-5, 5)
+    plt.ylim(-0.1, 1.5)
+    plt.legend(prop={'size':12})
+    plt.show()
+
+
+Beside the astropy convolution functions
+`~astropy.convolution.convolve.convolve` and
+`~astropy.convolution.convolve.convolve_fft`, it is also possible to use
+the kernels with Numpy or Scipy convolution by passing the ``array`` attribute.
+This will be faster in most cases than the astropy convolution, but will not
+work properly if ``NaN`` values are present in the data.
+
+>>> smoothed = np.convolve(data_1D, box_kernel.array)
+
+2D Kernels
+^^^^^^^^^^
+
+As all 2D kernels are symmetric it is sufficient to specify the width in one
+direction. Therefore the use of 2D kernels is basically the same as for 1D
+kernels. We consider a small Gaussian shaped source of amplitude one in the
+middle of the image and add 10% noise:
+
+>>> import numpy as np
+>>> from astropy.convolution import convolve, Gaussian2DKernel, Tophat2DKernel
+>>> from astropy.modeling.models import Gaussian2D
+>>> gauss = Gaussian2D(1, 0, 0, 3, 3)
+>>> # Fake image data including noise
+>>> x = np.arange(-100, 101)
+>>> y = np.arange(-100, 101)
+>>> x, y = np.meshgrid(x, y)
+>>> data_2D = gauss(x, y) + 0.1 * (np.random.rand(201, 201) - 0.5)
+
+Smoothing the noisy data with a
+:class:`~astropy.convolution.kernels.Gaussian2DKernel` of width 2 pixels:
+
+>>> gauss_kernel = Gaussian2DKernel(2)
+>>> smoothed_data_gauss = convolve(data_2D, gauss_kernel)
+
+Smoothing the noisy data with a
+:class:`~astropy.convolution.kernels.Tophat2DKernel` of width 5 pixels:
+
+>>> tophat_kernel = Tophat2DKernel(5)
+>>> smoothed_data_tophat = convolve(data_2D, tophat_kernel)
+
+This is what the original image looks like:
+
+.. plot::
+
+    import numpy as np
+    import matplotlib.pyplot as plt
+    from astropy.modeling.models import Gaussian2D
+    gauss = Gaussian2D(1, 0, 0, 2, 2)
+    # Fake image data including noise
+    x = np.arange(-100, 101)
+    y = np.arange(-100, 101)
+    x, y = np.meshgrid(x, y)
+    data_2D = gauss(x, y) + 0.1 * (np.random.rand(201, 201) - 0.5)
+    plt.imshow(data_2D, origin='lower')
+    plt.xlabel('x [pixels]')
+    plt.ylabel('y [pixels]')
+    plt.colorbar()
+    plt.show()
+
+The following plot illustrates the differences between several 2D kernels applied to the simulated data.
+Note that it has a slightly different color scale compared to the original image.
+
+.. plot::
+
+    import numpy as np
+    import matplotlib.pyplot as plt
+
+    from astropy.convolution import *
+    from astropy.modeling.models import Gaussian2D
+
+    # Small Gaussian source in the middle of the image
+    gauss = Gaussian2D(1, 0, 0, 2, 2)
+    # Fake data including noise
+    x = np.arange(-100, 101)
+    y = np.arange(-100, 101)
+    x, y = np.meshgrid(x, y)
+    data_2D = gauss(x, y) + 0.1 * (np.random.rand(201, 201) - 0.5)
+
+    # Setup kernels, including unity kernel for original image
+    # Choose normalization for linear scale space for MexicanHat
+
+    kernels = [TrapezoidDisk2DKernel(11, slope=0.2),
+               Tophat2DKernel(11),
+               Gaussian2DKernel(11),
+               Box2DKernel(11),
+               11 ** 2 * MexicanHat2DKernel(11),
+               AiryDisk2DKernel(11)]
+
+    fig, axes = plt.subplots(nrows=2, ncols=3)
+
+    # Plot kernels
+    for kernel, ax in zip(kernels, axes.flat):
+        smoothed = convolve(data_2D, kernel)
+        im = ax.imshow(smoothed, vmin=-0.01, vmax=0.08, origin='lower', interpolation='None')
+        title = kernel.__class__.__name__
+        ax.set_title(title)
+        ax.set_yticklabels([])
+        ax.set_xticklabels([])
+
+    cax = fig.add_axes([0.9, 0.1, 0.03, 0.8])
+    fig.colorbar(im, cax=cax)
+    plt.subplots_adjust(left=0.05, right=0.85, top=0.95, bottom=0.05)
+    plt.show()
+
+
+The Gaussian kernel has better smoothing properties compared to the Box and the
+Tophat. The Box filter is not isotropic and can produce artifact (the source
+appears rectangular). The Mexican-Hat filter removes noise and slowly varying
+structures (i.e. background) , but produces a negative ring around the source.
+The best choice for the filter strongly depends on the application.
+
+
+Available Kernels
+-----------------
+
+.. automodsumm:: astropy.convolution.kernels
+    :classes-only:
+
+
+Kernel Arithmetics
+------------------
+
+Addition and Subtraction
+^^^^^^^^^^^^^^^^^^^^^^^^
+As convolution is a linear operation, kernels can be added or subtracted from each other.
+They can also be multiplied with some number. One basic example would be the definition
+of a Difference of Gaussian filter:
+
+>>> from astropy.convolution import Gaussian1DKernel
+>>> gauss_1 = Gaussian1DKernel(10)
+>>> gauss_2 = Gaussian1DKernel(16)
+>>> DoG = gauss_2 - gauss_1
+
+Another application is to convolve faked data with an instrument response function model.
+E.g. if the response function can be be described by the weighted sum of two Gaussians:
+
+>>> gauss_1 = Gaussian1DKernel(10)
+>>> gauss_2 = Gaussian1DKernel(16)
+>>> SoG = 4 * gauss_1 + gauss_2
+
+Most times it will be necessary to normalize the resulting kernel by calling explicitly:
+
+>>> SoG.normalize()
+
+
+Convolution
+^^^^^^^^^^^
+Furthermore two kernels can be convolved with each other, which is useful when
+data is filtered with two different kinds of kernels or to create a new,
+special kernel:
+
+>>> from astropy.convolution import Gaussian1DKernel, convolve
+>>> gauss_1 = Gaussian1DKernel(10)
+>>> gauss_2 = Gaussian1DKernel(16)
+>>> broad_gaussian = convolve(gauss_2,  gauss_1)
+
+Or in case of multistage smoothing:
+
+>>> import numpy as np
+>>> from astropy.modeling.models import Lorentz1D
+>>> from astropy.convolution import convolve, Gaussian1DKernel, Box1DKernel
+>>> lorentz = Lorentz1D(1, 0, 1)
+>>> x = np.linspace(-5, 5, 100)
+>>> data_1D = lorentz(x) + 0.1 * (np.random.rand(100) - 0.5)
+
+>>> gauss = Gaussian1DKernel(3)
+>>> box = Box1DKernel(5)
+>>> smoothed_gauss = convolve(data_1D, gauss)
+>>> smoothed_gauss_box = convolve(smoothed_gauss, box)
+
+You would rather do the following:
+
+>>> gauss = Gaussian1DKernel(3)
+>>> box = Box1DKernel(5)
+>>> smoothed_gauss_box = convolve(data_1D, convolve(box, gauss))
+
+Which, in most cases, will also be faster than the first method, because only
+one convolution with the, most times, larger data array will be necessary.
+
+Discretization
+--------------
+
+To obtain the kernel array for discrete convolution, the kernels response
+function is evaluated on a grid with
+:func:`~astropy.convolution.utils.discretize_model`. For the
+discretization step the following modes are available:
+
+Mode ``'center'`` (default) evaluates the response function on the grid by
+taking the value at the center of the bin.
+
+>>> from astropy.convolution import Gaussian1DKernel
+>>> gauss_center = Gaussian1DKernel(3, mode='center')
+
+Mode ``'linear_interp'`` takes the values at the corners of the bin and linearly
+interpolates the value at the center:
+
+>>> gauss_interp = Gaussian1DKernel(3, mode='linear_interp')
+
+Mode ``'oversample'`` evaluates the response function by taking the mean on an
+oversampled grid. The oversample factor can be specified with the ``factor``
+argument. If the oversample factor is too large, the evaluation becomes slow.
+
+>>> gauss_oversample = Gaussian1DKernel(3, mode='oversample', factor=10)
+
+Mode ``'integrate'`` integrates the function over the pixel using
+``scipy.integrate.quad`` and ``scipy.integrate.dblquad``. This mode is very
+slow and only recommended when highest accuracy is required.
+
+>>> gauss_integrate = Gaussian1DKernel(3, mode='integrate')  # doctest: +REQUIRES_SCIPY
+
+Especially in the range where the kernel width is in order of only a few pixels
+it can be advantageous to use the mode ``oversample`` or ``integrate`` to
+conserve the integral on a subpixel scale.
+
+
+Normalization
+-------------
+
+The kernel models are normalized per default, i.e.
+:math:`\int_{-\infty}^{\infty} f(x) dx = 1`. But because of the limited kernel
+array size the normalization for kernels with an infinite response can differ
+from one. The value of this deviation is stored in the kernel's ``truncation``
+attribute.
+
+The normalization can also differ from one, especially for small kernels, due
+to the discretization step. This can be partly controlled by the ``mode``
+argument, when initializing the kernel (See also
+:func:`~astropy.convolution.utils.discretize_model`). Setting the
+``mode`` to ``'oversample'`` allows to conserve the normalization even on the
+subpixel scale.
+
+The kernel arrays can be renormalized explicitly by calling either the
+``normalize()`` method or by setting the ``normalize_kernel`` argument in the
+:func:`~astropy.convolution.convolve.convolve` and
+:func:`~astropy.convolution.convolve.convolve_fft` functions. The latter
+method leaves the kernel itself unchanged but works with an internal normalized
+version of the kernel.
+
+Note that for :class:`~astropy.convolution.kernels.MexicanHat1DKernel`
+and :class:`~astropy.convolution.kernels.MexicanHat2DKernel` there is
+:math:`\int_{-\infty}^{\infty} f(x) dx = 0`. To define a proper normalization
+both filters are derived from a normalized Gaussian function.
diff --git a/docs/convolution/using.rst b/docs/convolution/using.rst
new file mode 100644
index 0000000..c83a5d6
--- /dev/null
+++ b/docs/convolution/using.rst
@@ -0,0 +1,94 @@
+Using the convolution functions
+===============================
+
+Overview
+--------
+
+Two convolution functions are provided.  They are imported as::
+
+    >>> from astropy.convolution import convolve, convolve_fft
+
+and are both used as::
+
+    >>> result = convolve(image, kernel)  # doctest: +SKIP
+    >>> result = convolve_fft(image, kernel)  # doctest: +SKIP
+
+:func:`~astropy.convolution.convolve.convolve` is implemented as a
+direct convolution algorithm, while
+:func:`~astropy.convolution.convolve.convolve_fft` uses a fast Fourier
+transform (FFT). Thus, the former is better for small kernels, while the latter
+is much more efficient for larger kernels.
+
+The input images and kernels should be lists or Numpy arrays with either both
+1, 2, or 3 dimensions (and the number of dimensions should be the same for the
+image and kernel). The result is a Numpy array with the same dimensions as the
+input image. The convolution is always done as floating point.
+
+The :func:`~astropy.convolution.convolve.convolve` function takes an
+optional ``boundary=`` argument describing how to perform the convolution at
+the edge of the array. The values for ``boundary`` can be:
+
+* ``None``: set the result values to zero where the kernel extends beyond the
+  edge of the array (default)
+
+* ``'fill'``: set values outside the array boundary to a constant. If this
+  option is specified, the constant should be specified using the
+  ``fill_value=`` argument, which defaults to zero.
+
+* ``'wrap'``: assume that the boundaries are periodic
+
+* ``'extend'`` : set values outside the array to the nearest array value
+
+By default, the kernel is not normalized. To normalize it prior to convolution,
+use::
+
+    >>> result = convolve(image, kernel, normalize_kernel=True)  # doctest: +SKIP
+
+Examples
+--------
+
+Smooth a 1D array with a custom kernel and no boundary treatment::
+
+    >>> import numpy as np
+    >>> convolve([1, 4, 5, 6, 5, 7, 8], [0.2, 0.6, 0.2])
+    array([ 1.4,  3.6,  5. ,  5.6,  5.6,  6.8,  6.2])
+
+As above, but using the 'extend' algorithm for boundaries::
+
+    >>> convolve([1, 4, 5, 6, 5, 7, 8], [0.2, 0.6, 0.2], boundary='extend')
+    array([ 1.6,  3.6,  5. ,  5.6,  5.6,  6.8,  7.8])
+
+If a NaN value is present in the original array, it will be
+interpolated using the kernel::
+
+    >>> import numpy as np
+    >>> convolve([1, 4, 5, 6, np.nan, 7, 8], [0.2, 0.6, 0.2], boundary='extend')
+    array([ 1.6,  3.6,  5. ,  5.9,  6.5,  7.1,  7.8])
+
+Kernels and arrays can be specified either as lists or as Numpy
+arrays. The following examples show how to construct a 1-d array as a
+list::
+
+    >>> kernel = [0, 1, 0]
+    >>> result = convolve(spectrum, kernel)  # doctest: +SKIP
+
+a 2-d array as a list::
+
+    >>> kernel = [[0, 1, 0],
+    ...           [1, 2, 1],
+    ...           [0, 1, 0]]
+    >>> result = convolve(image, kernel)  # doctest: +SKIP
+
+and a 3-d array as a list::
+
+    >>> kernel = [[[0, 0, 0], [0, 2, 0], [0, 0, 0]],
+    ...           [[0, 1, 0], [2, 3, 2], [0, 1, 0]],
+    ...           [[0, 0, 0], [0, 2, 0], [0, 0, 0]]]
+    >>> result = convolve(cube, kernel)  # doctest: +SKIP
+
+Kernels
+-------
+
+The above examples uses custom kernels, but `astropy.convolution` also
+includes a number of built-in kernels, which are described in
+:doc:`kernels`.
diff --git a/docs/coordinates/angles.rst b/docs/coordinates/angles.rst
index b8b4dbb..8d4369c 100644
--- a/docs/coordinates/angles.rst
+++ b/docs/coordinates/angles.rst
@@ -1,66 +1,154 @@
+.. |Angle| replace:: `~astropy.coordinates.angles.Angle`
+.. |Longitude| replace:: `~astropy.coordinates.angles.Longitude`
+.. |Latitude| replace:: `~astropy.coordinates.angles.Latitude`
+
 Working with Angles
 -------------------
 
-The angular components of a coordinate are represented by objects of the
-`~astropy.coordinates.angles.Angle` class. These objects can be instantiated on
-their own anywhere a representation of an angle is needed, and support a variety
-of ways of representing the value of the angle::
+The angular components of a coordinate are represented by objects of the |Angle|
+class. These objects can be instantiated on their own wherever a representation of an
+angle is needed.
+
+Creation
+^^^^^^^^
 
+The creation of an |Angle| object is quite flexible and supports a wide variety of
+input object types and formats.  The type of the input angle(s) can an array, scalar,
+tuple, string, `~astropy.units.Quantity` or another |Angle|.  This is best illustrated with a number of
+examples of valid ways to create an |Angle|::
+
+    >>> import numpy as np
+    >>> from astropy import units as u
     >>> from astropy.coordinates import Angle
+
+    >>> Angle('10.2345d')              # String with 'd' abbreviation for degrees
+    <Angle 10.2345 deg>
+    >>> Angle(['10.2345d', '-20d'])    # Array of strings
+    <Angle [ 10.2345,-20.    ] deg>
+    >>> Angle('1:2:30.43 degrees')     # Sexagesimal degrees
+    <Angle 1.041786111... deg>
+    >>> Angle('1 2 0 hours')           # Sexagesimal hours
+    <Angle 1.0333... hourangle>
+    >>> Angle(np.arange(1, 8), unit=u.deg)  # Numpy array from 0..7 in degrees
+    <Angle [1,2,3,4,5,6,7] deg>
+    >>> Angle(u'1°2′3″')               # Unicode degree, arcmin and arcsec symbols
+    <Angle 1.0341666... deg>
+    >>> Angle('1d2m3.4s')              # Degree, arcmin, arcsec.
+    <Angle 1.0342777... deg>
+    >>> Angle('-1h2m3s')               # Hour, minute, second
+    <Angle -1.0341666... hourangle>
+    >>> Angle((-1, 2, 3), unit=u.deg)  # (degree, arcmin, arcsec)
+    <Angle -1.0341666... deg>
+    >>> Angle(10.2345 * u.deg)         # From a Quantity object in degrees
+    <Angle 10.2345 deg>
+    >>> Angle(Angle(10.2345 * u.deg))  # From another Angle object
+    <Angle 10.2345 deg>
+
+
+Representation
+^^^^^^^^^^^^^^
+
+The |Angle| object also supports a variety of ways of representing the value of the angle,
+both as a floating point number as a string::
+
     >>> a = Angle(1, u.radian)
     >>> a
-    <astropy.coordinates.angles.Angle 57.29578 deg>
-    >>> a.radians
+    <Angle 1 rad>
+    >>> a.radian
     1
-    >>> a.degrees
+    >>> a.degree
     57.29577951308232
-    >>> a.hours
-    3.819718634205488
+    >>> a.hour
+    3.8197186342054885
     >>> a.hms
-    (3.0, 49, 10.987083139757061)
+    (3.0, 49.0, 10.987083...)
     >>> a.dms
-    (57.0, 17, 44.80624709636231)
-    >>> a.format()
-    '57d17m44.80625s'
-    >>> a.format(sep=':')
-    '57:17:44.80625'
-    >>> a.format(sep=('deg','m','s'))
-    '57deg17m44.80625s'
-    >>> a.format(u.hour)
-    '3h49m10.98708s'
-    >>> a.format(u.radian)
-    '1.0radian'
-    >>> a.format(u.radian, decimal=True)
-    '1.0'
-
-`~astropy.corodinates.angles.Angle` objects can also have bounds.  These specify
-either a limited range in which the angle is valid (if it's <360 degrees), or
-the limit at which an angle is wrapped back around to 0::
-
-    >>> Angle(90, unit=u.degree, bounds=(0,180))
-    <Angle 90.00000 deg>
-    >>> Angle(-270, unit=u.degree, bounds=(0,180))
-    <Angle 90.00000 deg>
-    >>> Angle(181, unit=u.degree, bounds=(0,180))
-    BoundsError: The angle given falls outside of the specified bounds.
-    >>> Angle(361, unit=u.degree, bounds=(0,360))
-    <Angle 1.00000 deg>
+    (57.0, 17.0, 44.806247...)
+    >>> a.arcminute
+    3437.746770...
+    >>> a.to_string()
+    u'1rad'
+    >>> a.to_string(unit=u.degree)
+    u'57d17m44.8062s'
+    >>> a.to_string(unit=u.degree, sep=':')
+    u'57:17:44.8062'
+    >>> a.to_string(unit=u.degree, sep=('deg', 'm', 's'))
+    u'57deg17m44.8062s'
+    >>> a.to_string(unit=u.hour)
+    u'3h49m10.9871s'
+    >>> a.to_string(unit=u.hour, decimal=True)
+    u'3.81972'
+
+
+Usage
+^^^^^
 
 Angles will also behave correctly for appropriate arithmetic operations::
 
-    >>> a = Angle(1, u.radian)
-    >>> a + a
-    <Angle 114.59156 deg>
-    >>> a - a
-    <Angle 0.00000 deg>
+    >>> a = Angle(1.0, u.radian)
+    >>> a + 0.5 * u.radian + 2 * a
+    <Angle 3.5 rad>
+    >>> np.sin(a / 2)
+    <Quantity 0.479425...>
     >>> a == a
-    True
+    array(True, dtype=bool)
     >>> a == (a + a)
-    False
+    array(False, dtype=bool)
+
+|Angle| objects can also be used for creating coordinate objects::
+
+    >>> from astropy.coordinates import ICRS
+    >>> ICRS(Angle(1, u.radian), Angle(0.5, u.radian))
+    <ICRS RA=57.29578 deg, Dec=28.64789 deg>
+
+
+Wrapping and bounds
+^^^^^^^^^^^^^^^^^^^
+
+There are two utility methods that simplify working with angles that should
+have bounds.  The `~astropy.coordinates.angles.Angle.wrap_at()` method allows
+taking an angle or angles and wrapping to be within a single 360 degree slice.
+The `~astropy.coordinates.angles.Angle.is_within_bounds()` method returns a
+boolean indicating whether an angle or angles is within the specified bounds.
+
+
+Longitude and Latitude objects
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+|Longitude| and |Latitude| are two specialized subclasses of the |Angle| class that are
+used for all of the spherical coordinate classes.  |Longitude| is used to represent values
+like right ascension, Galactic longitude, and azimuth (for ecliptic, Galactic, and Alt-Az
+coordinates, respectively).  |Latitude| is used for declination, Galactic latitude, and
+elevation.
+
+Longitude
+"""""""""
+
+A |Longitude| object is distinguished from a pure |Angle| by virtue
+of a ``wrap_angle`` property.  The ``wrap_angle`` specifies that all angle values
+represented by the object will be in the range::
+
+  wrap_angle - 360 * u.deg <= angle(s) < wrap_angle
+
+The default ``wrap_angle`` is 360 deg.  Setting ``wrap_angle=180 * u.deg`` would
+instead result in values between -180 and +180 deg.  Setting the ``wrap_angle``
+attribute of an existing ``Longitude`` object will result in re-wrapping the
+angle values in-place.  For example::
+
+    >>> from astropy.coordinates import Longitude
+    >>> a = Longitude([-20, 150, 350, 360] * u.deg)
+    >>> a.degree
+    array([340, 150, 350,   0])
+    >>> a.wrap_angle = 180 * u.deg
+    >>> a.degree
+    array([-20, 150, -10,   0])
+
+Latitude
+""""""""
+
+A Latitude object is distinguished from a pure |Angle| by virtue
+of being bounded so that::
 
-Angle objects can also be used for creating coordinate objects::
+  -90.0 * u.deg <= angle(s) <= +90.0 * u.deg
 
-    >>> ICRSCoordinates(Angle(1, u.radian), Angle(2, u.radian))
-    <ICRSCoordinates RA=57.29578 deg, Dec=114.59156 deg>
-    >>> ICRSCoordinates(RA(1, u.radian), Dec(2, u.radian))
-    <ICRSCoordinates RA=57.29578 deg, Dec=114.59156 deg>
\ No newline at end of file
+Any attempt to set a value outside that range will result in a `ValueError`.
diff --git a/docs/coordinates/creating.rst b/docs/coordinates/creating.rst
index 5cc2fcc..b7c55fd 100644
--- a/docs/coordinates/creating.rst
+++ b/docs/coordinates/creating.rst
@@ -7,56 +7,75 @@ is to directly initialize your preferred coordinate system using standard
 python class creation, using the name of the class representing that
 system and a number for the two angles.  For example::
 
-    >>> from astropy.coordinates import ICRSCoordinates, FK4Coordinates, GalacticCoordinates
-    >>> ICRSCoordinates(187.70592, 12.39112, unit=(u.degree, u.degree))
-    <ICRSCoordinates RA=187.70592 deg, Dec=12.39112 deg>
-    >>> FK4Coordinates(187.07317, 12.66715, unit=(u.degree, u.degree))
-    <FK4Coordinates RA=187.07317 deg, Dec=12.66715 deg>
-    >>> GalacticCoordinates(-76.22237, 74.49108, unit=(u.degree, u.degree))
-    <GalacticCoordinates l=-76.22237 deg, b=74.49108 deg>
+    >>> from astropy.coordinates import ICRS, FK4, Galactic
+    >>> import astropy.units as u
+    >>> ICRS(187.70592, 12.39112, unit=(u.degree, u.degree))
+    <ICRS RA=187.70592 deg, Dec=12.39112 deg>
+    >>> FK4(187.07317, 12.66715, unit=(u.degree, u.degree))
+    <FK4 RA=187.07317 deg, Dec=12.66715 deg>
+    >>> Galactic(283.77763, 74.49108, unit=(u.degree, u.degree))
+    <Galactic l=283.77763 deg, b=74.49108 deg>
 
 Note that if you do not provide units explicitly, this will fail::
 
-    >>> ICRSCoordinates(23, 1)
-    UnitsError: No unit was specified in Angle initializer; the unit parameter should be an object from the  astropy.units module (e.g. 'from astropy import units as u', then use 'u.degree').
+    >>> ICRS(23, 1)
+    Traceback (most recent call last):
+        ...
+    UnitsError: No unit was specified
 
-While the above example uses python numerical types, you can also provide strings to create coordinates.
-If the `unit` parameter is ``(None, None)`` (the default), strings will be interpreted using the `Angle` 
-class' parsing scheme, and has a guiding principal of being able to interpret any *unambiguous* string 
-specifying an angle. For the exact rules for how each string is parsed, see the 
+While the above example uses python numerical types, you can also
+provide strings to create coordinates.  If the `unit` parameter is
+``(None, None)`` (the default), strings will be interpreted using the
+`Angle` class' parsing scheme, and has a guiding principal of being
+able to interpret any *unambiguous* string specifying an angle. For
+the exact rules for how each string is parsed, see the
 `~astropy.coordinates.angles.Angle` documentation.  Some examples::
 
-    >>> ICRSCoordinates("3h36m29.7888s -41d08m15.162342s", unit=(None, None))
-    <ICRSCoordinates RA=54.12412 deg, Dec=-41.13755 deg>
-    >>> ICRSCoordinates("3h36m29.7888s -41d08m15.162342s")
-    <ICRSCoordinates RA=54.12412 deg, Dec=-41.13755 deg>
-    >>> ICRSCoordinates("14.12412 hours", "-41:08:15.162342 degrees")
-    <ICRSCoordinates RA=211.86180 deg, Dec=-41.13755 deg>
-    >>> ICRSCoordinates("14.12412 -41:08:15.162342")
-    UnitsError: Could not infer Angle units from provided string 14.12412
+    >>> ICRS("3h36m29.7888s -41d08m15.162342s", unit=(None, None))
+    <ICRS RA=54.12412 deg, Dec=-41.13755 deg>
+    >>> ICRS("3h36m29.7888s -41d08m15.162342s")
+    <ICRS RA=54.12412 deg, Dec=-41.13755 deg>
+    >>> ICRS("14.12412 hours", "-41:08:15.162342 degrees")
+    <ICRS RA=211.86180 deg, Dec=-41.13755 deg>
+    >>> ICRS("14.12412 -41:08:15.162342")
+    Traceback (most recent call last):
+        ...
+    UnitsError: No unit specified
 
-You can also directly specify the units for both to resolve ambiguities in parsing the angle strings::
+You can also directly specify the units for both to resolve
+ambiguities in parsing the angle strings::
 
-    >>> ICRSCoordinates("14.12412 -41:08:15.162342", unit=(u.hour, u.degree))
-    <ICRSCoordinates RA=211.86180 deg, Dec=-41.13755 deg>
-    >>> ICRSCoordinates("54:7:26.832 -41:08:15.162342", unit=(u.degree, u.degree))
-    <ICRSCoordinates RA=54.12412 deg, Dec=-41.13755 deg>
-    >>> ICRSCoordinates('3 4 5 +6 7 8', unit=(u.hour, u.degree))
-    <ICRSCoordinates RA=46.02083 deg, Dec=6.11889 deg>
-    >>> ICRSCoordinates('3h4m5s +6d7m8s', unit=(u.hour, u.degree))
-    <ICRSCoordinates RA=46.02083 deg, Dec=6.11889 deg>
+    >>> ICRS("14.12412 -41:08:15.162342", unit=(u.hour, u.degree))
+    <ICRS RA=211.86180 deg, Dec=-41.13755 deg>
+    >>> ICRS("54:7:26.832 -41:08:15.162342", unit=(u.degree, u.degree))
+    <ICRS RA=54.12412 deg, Dec=-41.13755 deg>
+    >>> ICRS('3 4 5 +6 7 8', unit=(u.hour, u.degree))
+    <ICRS RA=46.02083 deg, Dec=6.11889 deg>
+    >>> ICRS('3h4m5s +6d7m8s', unit=(u.hour, u.degree))
+    <ICRS RA=46.02083 deg, Dec=6.11889 deg>
 
-This will also give you an error if you give a string with units that conflict with your desired units::
+It's also possible to create coordinates using lists or `numpy` arrays.  The same
+unit rules apply as for scalar angles.::
 
-    >>> ICRSCoordinates('3d4m5s +6h7m8s', unit=(u.hour, u.degree))
-    ValueError: parse_hours: Invalid input string, can't parse to HMS. (3d4m5s)
+    >>> ICRS([187.70592, 123.45678], [12.39112, 9.87654], unit=(u.degree, u.degree))
+    <ICRS RA=[ 187.70592  123.45678] deg, Dec=[ 12.39112   9.87654] deg>
+    >>> ICRS([187.70592, 123.45678], [12.39112, 9.87654])
+    Traceback (most recent call last):
+        ...
+    UnitsError: No unit was specified
 
-One final way to create coordinates is to copy them from an already existing coordinate::
+.. warning::
+    If you try to create an angle using a tuple for each angle instead of a list or
+    `numpy` array, it will be interpreted aa ``(hours, minutes, seconds)`` or
+    ``(degrees, arcmin, arcsec)``.  So if you actually want multiple coordinates from
+    a tuple, convert it to a list or array.
 
-    >>> i1 = ICRSCoordinates(187.70592, 12.39112, unit=(u.degree, u.degree))
-    >>> i2 = ICRSCoordinates(i1)
+One final way to create coordinates is to copy them from an already
+existing coordinate object::
+
+    >>> i1 = ICRS(187.70592, 12.39112, unit=(u.degree, u.degree))
+    >>> i2 = ICRS(i1)
     >>> i1
-    <ICRSCoordinates RA=187.70592 deg, Dec=12.39112 deg>
+    <ICRS RA=187.70592 deg, Dec=12.39112 deg>
     >>> i2
-    <ICRSCoordinates RA=187.70592 deg, Dec=12.39112 deg>
-    
\ No newline at end of file
+    <ICRS RA=187.70592 deg, Dec=12.39112 deg>
diff --git a/docs/coordinates/distances.rst b/docs/coordinates/distances.rst
index d614213..8a04322 100644
--- a/docs/coordinates/distances.rst
+++ b/docs/coordinates/distances.rst
@@ -2,31 +2,55 @@ Distances and Cartesian Representations
 ---------------------------------------
 
 Coordinates can also have line-of-sight distances.  If these are provided, a
-coordinate object becomes a full-fledged point in three-dimensional space.  If
-not (i.e., the `distance` attribute of the coordinate object is `None`), the
-point is interpreted as lying on the (dimensionless) unit sphere.
+coordinate object becomes a full-fledged point in three-dimensional space.
 
 The `~astropy.coordinates.distances.Distance` class is provided to represent a
 line-of-sight distance for a coordinate.  It must include a length unit to be
 valid.::
 
-    >>> from astropy.coordinates import Distance
+    >>> from astropy.coordinates import Distance, ICRS
+    >>> from astropy import units as u
     >>> d = Distance(770)
-    UnitsError: A unit must be provided for distance.
+    Traceback (most recent call last):
+    ...
+    UnitsError: No unit was provided for Distance
     >>> d = Distance(770, u.kpc)
-    >>> c = ICRSCoordinates('00h42m44.3s +41d16m9s', distance=d)
+    >>> d
+    <Distance 770 kpc>
+    >>> c = ICRS('00h42m44.3s +41d16m9s', distance=d)
     >>> c
-    <ICRSCoordinates RA=10.68458 deg, Dec=41.26917 deg, Distance=7.7e+02 kpc>
+    <ICRS RA=10.68458 deg, Dec=41.26917 deg, Distance=7.7e+02 kpc>
 
-If a distance is available, the coordinate can be converted into cartesian
-coordinates using the `x`/`y`/`z` attributes::
+Because `Distance` is a subclass of `~astropy.units.Quantity`, in general a
+`~astropy.units.Quantity` with units of length may be provided and it will
+automatically convert to a `Distance`::
+
+    >>> ICRS('00h42m44.3s +41d16m9s', distance=770 *  u.kpc)
+    <ICRS RA=10.68458 deg, Dec=41.26917 deg, Distance=7.7e+02 kpc>
+
+If a `distance` is present, the coordinate can be converted into Cartesian
+coordinates using the `x`/`y`/`z` attributes (which are
+`~astropy.units.Quantity` objects)::
 
     >>> c.x
-    568.7128882165681
+    <Quantity 568.712888216568 kpc>
     >>> c.y
-    107.3009359688103
+    <Quantity 107.30093596881035 kpc>
     >>> c.z
-    507.8899092486349
+    <Quantity 507.8899092486349 kpc>
+
+If a `distance` is not present, the Cartesian coordinates are still
+available, but the point is interpreted as lying on the (dimensionless)
+unit sphere::
+
+    >>> c2 = ICRS('00h42m44.3s +41d16m9s')
+    >>> c2.x
+    <Quantity 0.7385881665150235 >
+    >>> c2.y
+    <Quantity 0.13935186489455892 >
+    >>> c2.z
+    <Quantity 0.6595972847384869 >
+
 
 .. note::
 
@@ -34,46 +58,47 @@ coordinates using the `x`/`y`/`z` attributes::
     systems, but for common celestial coordinate systems it is often
     the Earth center (or for precision work, the Earth/Moon barycenter).
 
-The cartesian coordinates can also be accessed via the
-`~astropy.coordinates.distances.CartesianCoordinates` object, which has
+The Cartesian coordinates can also be accessed via the
+`~astropy.coordinates.distances.CartesianPoints` object, which has
 additional capabilities like arithmetic operations::
 
     >>> cp = c.cartesian
     >>> cp
-    <CartesianPoints (568.712888217, 107.300935969, 507.889909249) kpc>
+    <CartesianPoints [ 568.71288822, 107.30093597, 507.88990925] kpc>
     >>> cp.x
-    568.7128882165681
+    <Quantity 568.712888216568 kpc>
     >>> cp.y
-    107.3009359688103
+    <Quantity 107.30093596881035 kpc>
     >>> cp.z
-    507.8899092486349
+    <Quantity 507.8899092486349 kpc>
     >>> cp.unit
     Unit("kpc")
     >>> cp + cp
-    <CartesianPoints (1137.42577643, 214.601871938, 1015.7798185) kpc>
+    <CartesianPoints [ 1137.42577643,  214.60187194, 1015.7798185 ] kpc>
     >>> cp - cp
-    <CartesianPoints (0.0, 0.0, 0.0) kpc>
+    <CartesianPoints [ 0., 0., 0.] kpc>
 
-This cartesian representation can also be used to create a new coordinate
+This Cartesian representation can also be used to create a new coordinate
 object, either directly or through a `CartesianPoints` object::
 
-    >>> ICRSCoordinates(x=568.7129, y=107.3009, z=507.8899, unit=u.kpc)
-    <ICRSCoordinates RA=10.68458 deg, Dec=41.26917 deg, Distance=7.7e+02 kpc>
+    >>> from astropy.coordinates import CartesianPoints
+    >>> ICRS(x=568.7129, y=107.3009, z=507.8899, unit=u.kpc)
+    <ICRS RA=10.68458 deg, Dec=41.26917 deg, Distance=7.7e+02 kpc>
     >>> cp = CartesianPoints(x=568.7129, y=107.3009, z=507.8899, unit=u.kpc)
-    >>> ICRSCoordinates(cp)
-    <ICRSCoordinates RA=10.68458 deg, Dec=41.26917 deg, Distance=7.7e+02 kpc>
+    >>> ICRS(cp)
+    <ICRS RA=10.68458 deg, Dec=41.26917 deg, Distance=7.7e+02 kpc>
 
 Finally, two coordinates with distances can be used to derive a real-space
 distance (i.e., non-projected separation)::
 
-    >>> c1 = ICRSCoordinates('5h23m34.5s -69d45m22s', distance=Distance(49, u.kpc))
-    >>> c2 = ICRSCoordinates('0h52m44.8s -72d49m43s', distance=Distance(61, u.kpc))
+    >>> c1 = ICRS('5h23m34.5s -69d45m22s', distance=Distance(49, u.kpc))
+    >>> c2 = ICRS('0h52m44.8s -72d49m43s', distance=Distance(61, u.kpc))
     >>> sep3d = c1.separation_3d(c2)
     >>> sep3d
-    <Distance 23.05685 kpc>
+    <Distance 23.05684814695706 kpc>
     >>> sep3d.kpc
     23.05684814695706
     >>> sep3d.Mpc
     0.02305684814695706
     >>> sep3d.au
-    4755816315.663559
\ No newline at end of file
+    4755816315.663559
diff --git a/docs/coordinates/formatting.rst b/docs/coordinates/formatting.rst
index 9059421..647ffa2 100644
--- a/docs/coordinates/formatting.rst
+++ b/docs/coordinates/formatting.rst
@@ -4,20 +4,21 @@ Formatting Coordinate Strings
 Getting a string representation of a coordinate is best approached by
 treating the components (e.g., RA and Dec) separately.  For example::
 
-  >>> from astropy.coordinates import ICRSCoordinates
-  >>> c = ICRSCoordinates(187.70592, 12.39112, unit=(u.degree, u.degree))
+  >>> from astropy.coordinates import ICRS
+  >>> from astropy import units as u
+  >>> c = ICRS(187.70592, 12.39112, unit=(u.degree, u.degree))
   >>> str(c.ra) + ' ' + str(c.dec)
-  '187d42m21.31200s 12d23m28.03200s'
+  '187d42m21.312s 12d23m28.032s'
 
 To get better control over the formatting, you can use the angles'
-`~astropy.coordinates.angles.Angle.format` method (see :doc:`angles` for more).
-For example::
+`~astropy.coordinates.angles.Angle.to_string` method (see :doc:`angles` for
+more).  For example::
 
-  >>> rahmsstr = c.ra.format(u.hour)
-  >>>> rahmsstr
-  '12h30m49.42080s'
-  >>> decdmsstr = c.dec.format(u.degree, alwayssign=True)
-  >>> decdmsstr
-  '+12d23m28.03200s'
+  >>> rahmsstr = c.ra.to_string(u.hour)
+  >>> str(rahmsstr)
+  '12h30m49.4208s'
+  >>> decdmsstr = c.dec.to_string(u.degree, alwayssign=True)
+  >>> str(decdmsstr)
+  '+12d23m28.032s'
   >>> rahmsstr + ' ' + decdmsstr
-  '12h30m49.42080s +12d23m28.03200s'
+  u'12h30m49.4208s +12d23m28.032s'
diff --git a/docs/coordinates/index.rst b/docs/coordinates/index.rst
index 2dc9b09..e120e41 100644
--- a/docs/coordinates/index.rst
+++ b/docs/coordinates/index.rst
@@ -11,88 +11,133 @@ The `~astropy.coordinates` package provides classes for representing celestial
 coordinates, as well as tools for converting between standard systems in a
 uniform way.
 
-.. note::
-    The current `~astropy.coordinates` framework only accepts scalar
-    coordinates, i.e. one coordinate per object.  In the next release it will
-    be expanded to accept arrays of coordinates.
-
 .. warning::
     `~astropy.coordinates` is currently a work-in-progress, and thus it is
     possible there will be significant API changes in later versions of
-    Astropy.
+    Astropy. If you have specific ideas for how it might be improved,
+    feel free to let us know on the `astropy-dev mailing list`_ or at
+    http://feedback.astropy.org
 
 
 Getting Started
 ===============
 
 Coordinate objects are instantiated with a flexible and natural approach that
-supports both numeric angle values and (limited) string parsing::
+supports both numeric angle values, (limited) string parsing, and can optionally
+include lists of multiple coordinates in one object::
 
-    >>> from astropy import coordinates as coord
+    >>> from astropy.coordinates import ICRS, Galactic
     >>> from astropy import units as u
-    >>> coord.ICRSCoordinates(ra=10.68458, dec=41.26917, unit=(u.degree, u.degree))
-    <ICRSCoordinates RA=10.68458 deg, Dec=41.26917 deg>
-    >>> coord.ICRSCoordinates('00h42m44.3s +41d16m9s')
-    <ICRSCoordinates RA=10.68458 deg, Dec=41.26917 deg>
-
-The individual components of a coordinate are `~astropy.coordinates.angles.Angle`
-objects, and their values are accessed using special attributes::
-
-    >>> c = coord.ICRSCoordinates(ra=10.68458, dec=41.26917, unit=(u.degree, u.degree))
+    >>> ICRS(ra=10.68458, dec=41.26917, unit=(u.degree, u.degree))
+    <ICRS RA=10.68458 deg, Dec=41.26917 deg>
+    >>> ICRS('00h42m44.3s +41d16m9s')
+    <ICRS RA=10.68458 deg, Dec=41.26917 deg>
+    >>> ICRS('00h42m44.3s +41d16m9s')
+    <ICRS RA=10.68458 deg, Dec=41.26917 deg>
+    >>> ICRS(ra=[10.68458, 83.82208], dec=[41.26917, -5.39111], unit=(u.degree, u.degree))
+    <ICRS RA=[ 10.68458  83.82208] deg, Dec=[ 41.26917  -5.39111] deg>
+
+The individual components of a coordinate are `~astropy.coordinates.angles.Longitude`
+or `~astropy.coordinates.angles.Latitude` objects, which are specialized versions
+of the general `~astropy.coordinates.angles.Angle` class.  The component values are
+accessed using aptly named attributes::
+
+    >>> c = ICRS(ra=10.68458, dec=41.26917,
+    ...          unit=(u.degree, u.degree))
     >>> c.ra
-    <RA 10.68458 deg>
-    >>> c.ra.hours
-    0.7123053333333333
+    <Longitude 10.684579999999983 deg>
+    >>> c.ra.hour
+    0.7123053333333323
     >>> c.ra.hms
-    (0.0, 42, 44.2992000000001)
+    (0.0, 42.0, 44.299199999996262)
     >>> c.dec
-    <Dec 41.26917 deg>
-    >>> c.dec.radians
+    <Latitude 41.26917 deg>
+    >>> c.dec.radian
     0.7202828960652683
 
-To convert to some other coordinate system, the easiest method is to use
-attribute-style access with short names for the built-in systems, but explicit
-transformations via the `transform_to` method are also available::
+Coordinates can easily be converted to strings using the ``to_string`` method::
 
-    >>> c.galactic
-    <GalacticCoordinates l=121.17422 deg, b=-21.57283 deg>
-    >>> c.transform_to(coord.GalacticCoordinates)
-    <GalacticCoordinates l=121.17422 deg, b=-21.57283 deg>
+    >>> c.to_string()
+    '0h42m44.2992s 41d16m09.012s'
+    >>> c.to_string(precision=1)
+    '0h42m44.3s 41d16m09.0s'
+    >>> c.to_string(precision=1, sep=' ')
+    '0 42 44.3 41 16 09.0'
 
-Distances from the origin (which is system-dependent, but often the Earth
-center) can also be assigned to a coordinate. This specifies a unique point
-in 3D space, which also allows conversion to cartesian coordinates::
+To convert to some other coordinate system, the easiest method is to
+use attribute-style access with short names for the built-in systems,
+but explicit transformations via the `transform_to` method are also
+available::
 
-    >>> c = coord.ICRSCoordinates(ra=10.68458, dec=41.26917, unit=(u.degree, u.degree), distance=coord.Distance(770, u.kpc))
+    >>> c.galactic
+    <Galactic l=121.17430 deg, b=-21.57280 deg>
+    >>> c.transform_to(Galactic)
+    <Galactic l=121.17430 deg, b=-21.57280 deg>
+
+Distance from the origin (which is system-dependent, but often the
+Earth center) can also be assigned to a coordinate. This specifies a
+unique point in 3D space, which also allows conversion to Cartesian
+coordinates::
+
+    >>> from astropy.coordinates import Distance
+    >>> c = ICRS(ra=10.68458, dec=41.26917,
+    ...          unit=(u.degree, u.degree),
+    ...          distance=Distance(770, u.kpc))
     >>> c.x
-    568.7128654235232
+    <Quantity 568.7128654235232 kpc>
     >>> c.y
-    107.3008974042025
+    <Quantity 107.30089740420232 kpc>
     >>> c.z
-    507.88994291875713
-
-The `Coordinates` subpackage also provides a quick way to get coordinates
-for named objects (with an internet connection). All subclasses of 
-`~astropy.coordinates.coordsystems.SphericalCoordinatesBase` have a special
-class method, `from_name()`, that accepts a string and queries `Sesame 
-<http://cds.u-strasbg.fr/cgi-bin/Sesame>`_ to retrieve coordinates for
-that object::
-
-    >>> c = coord.ICRSCoordinates.from_name("M42")
+    <Quantity 507.88994291875713 kpc>
+
+Coordinate objects can also store arrays of coordinates instead of a
+single coordinate.  This has a major performance advantage over
+transforming many individual coordinate objects separtely.  It also
+allows coordinate objects to be used to find matches between two sets
+of coordinates::
+
+    >>> #assume ra1/dec1 and ra2/dec2 are arrays loaded from some file
+    >>> c = ICRS(ra1, dec1, unit=(u.degree, u.degree))  # doctest: +SKIP
+    >>> catalog = ICRS(ra2, dec2, unit=(u.degree, u.degree))  # doctest: +SKIP
+    >>> idx, d2d, d3d = c1.match_to_catalog_sky(catalog)  # doctest: +SKIP
+
+These array coordinates can also be indexed in the same way as numpy
+arrays::
+
+    >>> len(c[0].ra) # doctest: +SKIP
+    TypeError: 'Longitude' object with a scalar value has no len()
+    >>> len(c[1:5].ra) # doctest: +SKIP
+    4
+    >>> matches = catalog[idx]  # doctest: +SKIP
+    >>> len(matches) == len(c)  # doctest: +SKIP
+    True
+
+
+The `astropy.coordinates` subpackage also provides a quick way to get
+coordinates for named objects (if you have an active internet
+connection). All subclasses of
+`~astropy.coordinates.coordsystems.SphericalCoordinatesBase` have a
+special class method, `from_name()`, that accepts a string and queries
+`Sesame <http://cds.u-strasbg.fr/cgi-bin/Sesame>`_ to retrieve
+coordinates for that object::
+
+    >>> c = ICRS.from_name("M42")
     >>> c.ra, c.dec
-    (<RA 83.82208 deg>, <Dec -5.39111 deg>)
+    (<Longitude 83.82208... deg>, <Latitude -5.39111... deg>)
 
-This works for any subclass of `~astropy.coordinates.coordsystems.SphericalCoordinatesBase`::
-    
-    >>> c = coord.GalacticCoordinates.from_name("M42")
+This works for any subclass of
+`~astropy.coordinates.coordsystems.SphericalCoordinatesBase`::
+
+    >>> c = Galactic.from_name("M42")
     >>> c.l, c.b
-    (<Angle -150.98622 deg>, <Angle -19.38162 deg>)
+    (<Longitude 3.64797... rad>, <Latitude -0.33827... rad>)
 
 .. note::
-    
+
     This is intended to be a convenience, and is very simple. If you
-    need precise coordinates for an object you should find the appropriate 
-    reference for that measurement and input the coordinates manually.
+    need precise coordinates for an object you should find the
+    appropriate reference for that measurement and input the
+    coordinates manually.
 
 
 Using `astropy.coordinates`
@@ -109,6 +154,7 @@ More details of using `astropy.coordinates` are provided in the following sectio
    separations
    distances
    transforming
+   matching
    designing
    sgr-example
 
@@ -146,3 +192,11 @@ Reference/API
 =============
 
 .. automodapi:: astropy.coordinates
+  :skip: ICRSCoordinates
+  :skip: FK5Coordinates
+  :skip: FK4Coordinates
+  :skip: FK4NoETermCoordinates
+  :skip: GalacticCoordinates
+  :skip: HorizontalCoordinates
+
+.. the ":skip:"s above are to not document the v0.3 backwards-compatibility names.  They will be removed in the next version
diff --git a/docs/coordinates/matching.rst b/docs/coordinates/matching.rst
new file mode 100644
index 0000000..ac8eecd
--- /dev/null
+++ b/docs/coordinates/matching.rst
@@ -0,0 +1,38 @@
+.. doctest_skip
+
+Matching Catalogs/Finding Nearest Coordinates
+---------------------------------------------
+
+`astropy.coordinates` supports leverages the coordinate framework to make it
+straightforward to find the closest coordinates in a catalog to a desired set
+of other coordinates.  For example, assuming `ra1`/`dec1` and `ra2`/`dec2` are
+arrays loaded from some file ::
+
+    >>> from astropy.coordinates import ICRS
+    >>> from astropy import units as u
+    >>> #assume ra1/dec1 and ra/dec2 are arrays loaded from some file
+    >>> c = ICRS(ra1, dec1, unit=(u.degree, u.degree))
+    >>> catalog = ICRS(ra2, dec2, unit=(u.degree, u.degree))
+    >>> idx, d2d, d3d = c.match_to_catalog_sky(catalog)
+    >>> from astropy.coordinates import match_coordinates_sky
+    >>> idx, d2d, d3d = match_coordinates_sky(c1, catalog)  # same thing
+
+You can also find the nearest 3d matches, different from the above when
+the coordinates have distances ::
+
+    >>> #assume ra1/dec1 and ra/dec2 are arrays loaded from some file
+    >>> c = ICRS(ra1, dec1, unit=(u.degree, u.degree))
+    >>> catalog = ICRS(ra2, dec2, unit=(u.degree, u.degree))
+    >>> idx, d2d, d3d = c.match_to_catalog_3d(catalog)
+
+Now `idx` are indices into `catalog` that are the closest objects to each of
+the coordinates in `c`, `d2d` are the on-sky distances between them, and
+`d3d` are the 3-dimensional distances.  Because coordinate objects support
+indexing, `idx` enables easy access to the matched set of coordinates in 
+the catalog::
+
+    >>> matches = catalog[idx]
+    >>> (matches.separation_3d(c) == d3d).all()
+    True
+    >>> dra = (matches.ra - c.ra).arcmin
+    >>> ddec = (matches.dec - c.dec).arcmin
diff --git a/docs/coordinates/separations.rst b/docs/coordinates/separations.rst
index 0e84580..20cc88c 100644
--- a/docs/coordinates/separations.rst
+++ b/docs/coordinates/separations.rst
@@ -4,21 +4,23 @@ Separations
 The on-sky separation is easily computed with the `separation` method, which
 computes the great-circle distance (*not* the small-angle approximation)::
 
-    >>> c1 = ICRSCoordinates('5h23m34.5s -69d45m22s')
-    >>> c2 = ICRSCoordinates('0h52m44.8s -72d49m43s')
+    >>> from astropy.coordinates import ICRS
+    >>> c1 = ICRS('5h23m34.5s -69d45m22s')
+    >>> c2 = ICRS('0h52m44.8s -72d49m43s')
     >>> sep = c1.separation(c2)
     >>> sep
-    <AngularSeparation 20.74612 deg>
+    <Angle 20.746118437707477 deg>
 
-The `~astropy.coordinates.angles.AngularSeparation` object is a subclass of
-`~astropy.coordinates.angles.Angle`, so it can be accessed in the same ways,
-along with a few additions::
 
-    >>> sep.radians
-    0.36208807374669766
-    >>> sep.hours
+The returned object is an `~astropy.coordinates.angles.Angle` instance, so it
+is straightforward to access the angle in any of several equivalent angular
+units::
+
+    >>> sep.radian
+    0.3620880737466976
+    >>> sep.hour
     1.383074562513832
-    >>> sep.arcmins
+    >>> sep.arcminute
     1244.7671062624488
-    >>> sep.arcsecs
-    74686.02637574692
\ No newline at end of file
+    >>> sep.arcsecond
+    74686.02637574692
diff --git a/docs/coordinates/sgr-example.py b/docs/coordinates/sgr-example.py
index abf9e23..af34dc3 100644
--- a/docs/coordinates/sgr-example.py
+++ b/docs/coordinates/sgr-example.py
@@ -11,7 +11,7 @@ import os, sys
 
 # Third-party
 import numpy as np
-from numpy import radians, degrees, cos, sin
+from numpy import cos, sin
 
 import astropy.coordinates as coord
 import astropy.units as u
@@ -21,70 +21,65 @@ from astropy.coordinates.angles import rotation_matrix
 __all__ = ["SgrCoordinates"]
 
 class SgrCoordinates(coord.SphericalCoordinatesBase):
-    """ A spherical coordinate system defined by the orbit of the Sagittarius 
-        dwarf galaxy, as described in 
-            http://adsabs.harvard.edu/abs/2003ApJ...599.1082M 
+    """ A Heliocentric spherical coordinate system defined by the orbit
+        of the Sagittarius dwarf galaxy, as described in
+            http://adsabs.harvard.edu/abs/2003ApJ...599.1082M
         and further explained in
             http://www.astro.virginia.edu/~srm4n/Sgr/.
 
     """
     __doc__ = __doc__.format(params=coord.SphericalCoordinatesBase. \
-                                          _init_docstring_param_templ. \
-                                          format(lonnm='Lambda', latnm='Beta'))
+            _init_docstring_param_templ.format(lonnm='Lambda', latnm='Beta'))
 
     def __init__(self, *args, **kwargs):
         super(SgrCoordinates, self).__init__()
 
         if len(args) == 1 and len(kwargs) == 0 and \
             isinstance(args[0], coord.SphericalCoordinatesBase):
-            
+
             newcoord = args[0].transform_to(self.__class__)
-            self.Lambda = newcoord.Lambda
-            self.Beta = newcoord.Beta
+            self._lonangle = newcoord._lonangle
+            self._latangle = newcoord._latangle
             self._distance = newcoord._distance
         else:
             super(SgrCoordinates, self).\
-                _initialize_latlon('Lambda', 'Beta', False, args, kwargs, 
-                                   anglebounds=((0, 360), (-90,90)))
+                _initialize_latlon('Lambda', 'Beta', args, kwargs)
 
-    def __repr__(self):
-        if self.distance is not None:
-            diststr = ', Distance={0:.2g} {1!s}'.format(self.distance._value, 
-                                                        self.distance._unit)
-        else:
-            diststr = ''
+    # strings used for making __repr__ work
+    _repr_lon_name = 'Lambda'
+    _repr_lat_name = 'Beta'
 
-        msg = "<{0} Lambda={1:.5f} deg, Beta={2:.5f} deg{3}>"
-        return msg.format(self.__class__.__name__, self.Lambda.degrees,
-                          self.Beta.degrees, diststr)
+    # Default format for to_string
+    _default_string_style = 'dmsdms'
 
     @property
-    def lonangle(self):
-        return self.Lambda
+    def Lambda(self):
+        return self._lonangle
 
     @property
-    def latangle(self):
-        return self.Beta
+    def Beta(self):
+        return self._latangle
 
 # Define the Euler angles (from Law & Majewski 2010)
-phi = radians(180+3.75)
-theta = radians(90-13.46)
-psi = radians(180+14.111534)
+phi = np.radians(180+3.75)
+theta = np.radians(90-13.46)
+psi = np.radians(180+14.111534)
 
 # Generate the rotation matrix using the x-convention (see Goldstein)
-D = rotation_matrix(phi, "z", degrees=False)
-C = rotation_matrix(theta, "x", degrees=False)
-B = rotation_matrix(psi, "z", degrees=False)
+D = rotation_matrix(phi, "z", unit=u.radian)
+C = rotation_matrix(theta, "x", unit=u.radian)
+B = rotation_matrix(psi, "z", unit=u.radian)
 sgr_matrix = np.array(B.dot(C).dot(D))
 
 # Galactic to Sgr coordinates
- at transformations.transform_function(coord.GalacticCoordinates, SgrCoordinates)
+ at transformations.transform_function(coord.Galactic, SgrCoordinates)
 def galactic_to_sgr(galactic_coord):
-    """ Compute the transformation from Galactic spherical to Sgr coordinates. 
+    """ Compute the transformation from Galactic spherical to
+        heliocentric Sgr coordinates.
     """
 
-    l = galactic_coord.l.radians
-    b = galactic_coord.b.radians
+    l = np.atleast_1d(galactic_coord.l.radian)
+    b = np.atleast_1d(galactic_coord.b.radian)
 
     X = cos(b)*cos(l)
     Y = cos(b)*sin(l)
@@ -92,25 +87,23 @@ def galactic_to_sgr(galactic_coord):
 
     # Calculate X,Y,Z,distance in the Sgr system
     Xs, Ys, Zs = sgr_matrix.dot(np.array([X, Y, Z]))
-
     Zs = -Zs
 
     # Calculate the angular coordinates lambda,beta
-    Lambda = degrees(np.arctan2(Ys,Xs))
-    if Lambda<0:
-        Lambda += 360
+    Lambda = np.degrees(np.arctan2(Ys,Xs))
+    Lambda[Lambda < 0] = Lambda[Lambda < 0] + 360
+    Beta = np.degrees(np.arcsin(Zs/np.sqrt(Xs*Xs+Ys*Ys+Zs*Zs)))
 
-    Beta = degrees(np.arcsin(Zs/np.sqrt(Xs*Xs+Ys*Ys+Zs*Zs)))
-
-    return SgrCoordinates(Lambda, Beta, distance=galactic_coord.distance, 
+    return SgrCoordinates(Lambda, Beta, distance=galactic_coord.distance,
                           unit=(u.degree, u.degree))
 
- at transformations.transform_function(SgrCoordinates, coord.GalacticCoordinates)
+ at transformations.transform_function(SgrCoordinates, coord.Galactic)
 def sgr_to_galactic(sgr_coord):
-    """ Compute the transformation from Sgr coordinates to spherical Galactic. 
+    """ Compute the transformation from heliocentric Sgr coordinates to
+        spherical Galactic.
     """
-    L = sgr_coord.Lambda.radians
-    B = sgr_coord.Beta.radians
+    L = np.atleast_1d(sgr_coord.Lambda.radian)
+    B = np.atleast_1d(sgr_coord.Beta.radian)
 
     Xs = cos(B)*cos(L)
     Ys = cos(B)*sin(L)
@@ -119,18 +112,18 @@ def sgr_to_galactic(sgr_coord):
 
     X, Y, Z = sgr_matrix.T.dot(np.array([Xs, Ys, Zs]))
 
-    l = degrees(np.arctan2(Y,X))
-    b = degrees(np.arcsin(Z/np.sqrt(X*X+Y*Y+Z*Z)))
+    l = np.degrees(np.arctan2(Y,X))
+    b = np.degrees(np.arcsin(Z/np.sqrt(X*X+Y*Y+Z*Z)))
 
     if l<0:
         l += 360
 
-    return coord.GalacticCoordinates(l, b, distance=sgr_coord.distance, 
-                                     unit=(u.degree, u.degree))
+    return coord.Galactic(l, b, distance=sgr_coord.distance,
+                          unit=(u.degree, u.degree))
 
 if __name__ == "__main__":
     # Example use case for our newly defined coordinate class
-    ra_dec = coord.ICRSCoordinates(152.88572, 11.57281, unit=(u.degree,
+    ra_dec = coord.ICRS(152.88572, 11.57281, unit=(u.degree,
                                                               u.degree))
     sgr = ra_dec.transform_to(SgrCoordinates)
-    print(sgr)
\ No newline at end of file
+    print(sgr)
diff --git a/docs/coordinates/sgr-example.rst b/docs/coordinates/sgr-example.rst
index f6d2107..8075b1c 100644
--- a/docs/coordinates/sgr-example.rst
+++ b/docs/coordinates/sgr-example.rst
@@ -11,211 +11,216 @@ Sagittarius Dwarf Galaxy (hereafter Sgr; as defined in Majewski et al. 2003).
 The Sgr coordinate system is often referred to in terms of two angular
 coordinates, :math:`\Lambda,B`.
 
-We'll start by using a template to generate a descriptive docstring for our 
-subclass. Then we'll add some glue to the default initializer to recognize that 
-we want to call the coordinates `Lambda` and `Beta`. Then we have to define the 
-transformation from this coordinate system to some other built-in system, in 
-this case we will use spherical Galactic Coordinates as defined in 
-`~astropy.coordinates.builtin_systems.GalacticCoordinates`.
+We'll start by using a template to generate a descriptive docstring for our
+subclass. Then we'll add some glue to the default initializer to recognize that
+we want to call the coordinates `Lambda` and `Beta`. Then we have to define the
+transformation from this coordinate system to some other built-in system, in
+this case we will use spherical Galactic Coordinates as defined in
+`~astropy.coordinates.builtin_systems.Galactic`.
 
 The first step is to create a new class for our coordinates, let's call it
-`SgrCoordinates` and make it a subclass of 
+`SgrCoordinates` and make it a subclass of
 `~astropy.coordinates.coordsystems.SphericalCoordinatesBase`::
-    
+
     import astropy.coordinates as coord
-    
+
     class SgrCoordinates(coord.SphericalCoordinatesBase):
-        """ A spherical coordinate system defined by the orbit of the 
+        """ A spherical coordinate system defined by the orbit of the
             Sagittarius dwarf galaxy, as described in
-                http://adsabs.harvard.edu/abs/2003ApJ...599.1082M 
-            and further explained in 
+                http://adsabs.harvard.edu/abs/2003ApJ...599.1082M
+            and further explained in
                 http://www.astro.virginia.edu/~srm4n/Sgr/.
 
     """
 
-We can use some convenience variables defined at the superclass level to 
+We can use some convenience variables defined at the superclass level to
 generate a descriptive docstring for our subclass::
 
-    __doc__ = __doc__.format(params=coord.SphericalCoordinatesBase.
-                                    _init_docstring_param_templ.
-                                    format(lonnm='Lambda', latnm='Beta'))
+    __doc__ = __doc__.format(params=coord.SphericalCoordinatesBase. \
+            _init_docstring_param_templ.format(lonnm='Lambda', latnm='Beta'))
 
 This may look scary, but let's break down what it is doing. `__doc__` is a class
-attribute defined in the superclass, 
-`~astropy.coordinates.coordsystems.SphericalCoordinatesBase`, and is just a 
-string with a placeholder for a docstring specific to this subclass. We specify 
-that extra, descriptive text by using `format()` with the `params` keyword. 
-`params` expects a string describing the variable names of our current 
-coordinate system. We can generate this from a template as well by formatting 
-another class attribute and telling it what we want to name our coordinates (in 
+attribute defined in the superclass,
+`~astropy.coordinates.coordsystems.SphericalCoordinatesBase`, and is just a
+string with a placeholder for a docstring specific to this subclass. We specify
+that extra, descriptive text by using `format()` with the `params` keyword.
+`params` expects a string describing the variable names of our current
+coordinate system. We can generate this from a template as well by formatting
+another class attribute and telling it what we want to name our coordinates (in
 this case, Lambda and Beta). The template string is defined as a class attribute
-`~astropy.coordinates.coordsystems.SphericalCoordinatesBase._init_docstring_param_templ`, 
-and expects the name of the longitude-equivalent (Lambda) and 
+`~astropy.coordinates.coordsystems.SphericalCoordinatesBase._init_docstring_param_templ`,
+and expects the name of the longitude-equivalent (Lambda) and
 latitude-equivalent (Beta) coordinates::
 
     coord.SphericalCoordinatesBase._init_docstring_param_templ
                                   .format(lonnm='Lambda', latnm='Beta')
-    
-If this looks strange or complicated, just remember that we're just doing this 
-to help the user (this will provide them with a nice docstring if they look at 
-the help for this class). **The bottom line:** if you want to define a custom 
-spherical coordinate system with two angular coordinates, copy and paste the 
-below line into the class definition and change `'Lambda'` to the name of your 
+
+If this looks strange or complicated, just remember that we're just doing this
+to help the user (this will provide them with a nice docstring if they look at
+the help for this class). **The bottom line:** if you want to define a custom
+spherical coordinate system with two angular coordinates, copy and paste the
+below line into the class definition and change `'Lambda'` to the name of your
 longitude coordinate, and `'Beta'` to the name of your latitude coordinate.::
 
-    __doc__ = __doc__.format(params=coord.SphericalCoordinatesBase.
-                                    _init_docstring_param_templ.
-                                    format(lonnm='Lambda', latnm='Beta'))
+    __doc__ = __doc__.format(params=coord.SphericalCoordinatesBase. \
+            _init_docstring_param_templ.format(lonnm='Lambda', latnm='Beta'))
 
-Next we can define our subclass' initializer, `__init__()`. We start by calling 
-`__init__()` on the superclass. Then, we add a catch to see if the user passed 
-in another `~astropy.coordinates.coordsystems.SphericalCoordinatesBase` object 
-in. If so, we can just transform those coordinates to `SgrCoordinates` and copy 
-the attributes directly. Otherwise, we have to tell our subclass how to parse 
+Next we can define our subclass' initializer, `__init__()`. We start by calling
+`__init__()` on the superclass. Then, we add a catch to see if the user passed
+in another `~astropy.coordinates.coordsystems.SphericalCoordinatesBase` object
+in. If so, we can just transform those coordinates to `SgrCoordinates` and copy
+the attributes directly. Otherwise, we have to tell our subclass how to parse
 the arguments and keyword arguments that the user passed in. We do this with the
-`_initialize_latlon()` classmethod. This convenience function accepts the name 
-of the longitude coordinate, the name of the latitude coordinate, a boolean 
-parameter to specify whether to use `RA` and `Dec` objects to store the angles 
-internally, or to use `~astropy.coordinates.angles.Angle` objects instead (we 
-want to use `~astropy.coordinates.angles.Angle` s so we set it to False), the 
-arguments and keyword arguments passed to this initializer, and finally an 
-optional parameter to specify the bounds of the coordinate system. This function
-will handle parsing the args and kwargs to validate and sanitize the input from 
+`_initialize_latlon()` classmethod. This convenience function accepts the name
+of the longitude coordinate, the name of the latitude coordinate, and the
+arguments and keyword arguments passed to this initializer. This function
+will handle parsing the args and kwargs to validate and sanitize the input from
 the user.::
-    
+
     def __init__(self, *args, **kwargs):
         super(SgrCoordinates, self).__init__()
 
-        if len(args) == 1 and len(kwargs) == 0 and 
+        if len(args) == 1 and len(kwargs) == 0 and
             isinstance(args[0], coord.SphericalCoordinatesBase):
-            
+
             newcoord = args[0].transform_to(self.__class__)
-            self.Lambda = newcoord.Lambda
-            self.Beta = newcoord.Beta
+            self._lonangle = newcoord._lonangle
+            self._latangle = newcoord._latangle
             self._distance = newcoord._distance
         else:
             super(SgrCoordinates, self).
-                _initialize_latlon('Lambda', 'Beta', False, args, kwargs, 
-                                   anglebounds=((0, 360), (-90,90)))
+                _initialize_latlon('Lambda', 'Beta', args, kwargs)
 
-Next we have to tell the class what to use for the longitude and latitude when 
-doing coordinate transformations with other coordinate systems. Calling 
-`_initialize_latlon()` will define attributes for the names of our coordinates, 
-in this case `Lambda` and `Beta`, so we just have to create two properties 
-`lonangle` and `latangle` that reference the others::
+Next we have to tell the class what to use for the longitude and latitude when
+doing coordinate transformations with other coordinate systems. We do that by
+defining properties of the class -- in this case `Lambda` and `Beta` -- that
+reference the internal names for the longitude and latitude::
 
     @property
-    def lonangle(self):
-        return self.Lambda
+    def Lambda(self):
+        return self._lonangle
 
     @property
-    def latangle(self):
-        return self.Beta
-        
+    def Beta(self):
+        return self._latangle
+
+Finally, we customize the default string formatting by specifying the string
+names of the longitude and latitude, as well as the default numerical
+representation (degree minute second for longitude and degree
+minute second for latitude)::
+
+    # strings used for making __repr__ work
+    _repr_lon_name = 'Lambda'
+    _repr_lat_name = 'Beta'
+
+    # Default format for to_string
+    _default_string_style = 'dmsdms'
+
 Now our coordinate system is set up! You can now create `SgrCoordinates` objects
-by passing any valid specifiers accepted by 
-`~astropy.coordinates.coordsystems.SphericalCoordinatesBase`, but you won't be 
-able to transform to and from any other coordinate systems because we haven't 
+by passing any valid specifiers accepted by
+`~astropy.coordinates.coordsystems.SphericalCoordinatesBase`, but you won't be
+able to transform to and from any other coordinate systems because we haven't
 yet defined how to do that.
 
-We will define the coordinate transformation as a function that accepts a 
-`~astropy.coordinates.builtin_systems.GalacticCoordinates` object and returns an
-`SgrCoordinates` object. We could alternatively define the transformation by 
+We will define the coordinate transformation as a function that accepts a
+`~astropy.coordinates.builtin_systems.Galactic` object and returns an
+`SgrCoordinates` object. We could alternatively define the transformation by
 specifying a transformation matrix (
-`~astropy.coordinates.transformations.static_transform_matrix`), but in this 
+`~astropy.coordinates.transformations.static_transform_matrix`), but in this
 case the transformation is from a left-handed coordinate system to a right-
-handed system, so we need more control over the transformation. We'll start by 
-constructing the rotation matrix, using the helper function 
+handed system, so we need more control over the transformation. We'll start by
+constructing the rotation matrix, using the helper function
 `astropy.coordinates.angles.rotation_matrix` ::
 
     # Define the Euler angles (from Law & Majewski 2010)
-    phi = radians(180+3.75)
-    theta = radians(90-13.46)
-    psi = radians(180+14.111534)
-    
+    phi = np.radians(180+3.75)
+    theta = np.radians(90-13.46)
+    psi = np.radians(180+14.111534)
+
     # Generate the rotation matrix using the x-convention (see Goldstein)
-    D = rotation_matrix(phi, "z", degrees=False)
-    C = rotation_matrix(theta, "x", degrees=False)
-    B = rotation_matrix(psi, "z", degrees=False)
+    D = rotation_matrix(phi, "z", unit=u.radian)
+    C = rotation_matrix(theta, "x", unit=u.radian)
+    B = rotation_matrix(psi, "z", unit=u.radian)
     sgr_matrix = np.array(B.dot(C).dot(D))
 
-This is done at the module level, since it will be used by both the 
+This is done at the module level, since it will be used by both the
 transformation from Sgr to Galactic as well as the inverse from Galactic to Sgr.
 Now we can define our first transformation function::
 
-    @transformations.transform_function(coord.GalacticCoordinates, 
-                                        SgrCoordinates)
+    # Galactic to Sgr coordinates
+    @transformations.transform_function(coord.Galactic, SgrCoordinates)
     def galactic_to_sgr(galactic_coord):
-        """ Compute the transformation from Galactic spherical to Sgr 
-            coordinates. 
+        """ Compute the transformation from Galactic spherical to
+            heliocentric Sgr coordinates.
         """
 
-        l = galactic_coord.l.radians
-        b = galactic_coord.b.radians
-    
+        l = np.atleast_1d(galactic_coord.l.radian)
+        b = np.atleast_1d(galactic_coord.b.radian)
+
         X = cos(b)*cos(l)
         Y = cos(b)*sin(l)
         Z = sin(b)
-    
+
         # Calculate X,Y,Z,distance in the Sgr system
-        Xs, Ys, Zs = rotation_matrix.dot(np.array([X, Y, Z]))    
-        Zs = -Zs # left-handed to right-handed
-    
+        Xs, Ys, Zs = sgr_matrix.dot(np.array([X, Y, Z]))
+        Zs = -Zs
+
         # Calculate the angular coordinates lambda,beta
-        Lambda = degrees(np.arctan2(Ys,Xs))
-        if Lambda < 0:
-            Lambda += 360
-    
-        Beta = degrees(np.arcsin(Zs/np.sqrt(Xs*Xs+Ys*Ys+Zs*Zs)))
-    
-        return SgrCoordinates(Lambda, Beta, distance=galactic_coord.distance, 
+        Lambda = np.degrees(np.arctan2(Ys,Xs))
+        Lambda[Lambda < 0] = Lambda[Lambda < 0] + 360
+        Beta = np.degrees(np.arcsin(Zs/np.sqrt(Xs*Xs+Ys*Ys+Zs*Zs)))
+
+        return SgrCoordinates(Lambda, Beta, distance=galactic_coord.distance,
                               unit=(u.degree, u.degree))
-    
-The decorator 
-`@transformations.transform_function(coord.GalacticCoordinates, SgrCoordinates)` 
-registers this function with the `Coordinates` subpackage as a transformation. 
-Inside the function, we simply follow the same procedure as detailed by David 
-Law's 
+
+The decorator
+`@transformations.transform_function(coord.Galactic, SgrCoordinates)`
+registers this function with the `Coordinates` subpackage as a transformation.
+Inside the function, we simply follow the same procedure as detailed by David
+Law's
 `transformation code <http://www.astro.virginia.edu/~srm4n/Sgr/code.html>`. Note
-that in this case, both coordinate systems are heliocentric, so we can simply 
-copy any distance from the 
-`~astropy.coordinates.builtin_systems.GalacticCoordinates` object. 
+that in this case, both coordinate systems are heliocentric, so we can simply
+copy any distance from the
+`~astropy.coordinates.builtin_systems.Galactic` object.
 
-We then register the inverse transformation by using the Transpose of the 
+We then register the inverse transformation by using the Transpose of the
 rotation matrix::
 
-    @transformations.transform_function(SgrCoordinates, 
-                                        coord.GalacticCoordinates)
+    @transformations.transform_function(SgrCoordinates, coord.Galactic)
     def sgr_to_galactic(sgr_coord):
-        L = sgr_coord.Lambda.radians
-        B = sgr_coord.Beta.radians
-    
+        """ Compute the transformation from heliocentric Sgr coordinates to
+            spherical Galactic.
+        """
+        L = np.atleast_1d(sgr_coord.Lambda.radian)
+        B = np.atleast_1d(sgr_coord.Beta.radian)
+
         Xs = cos(B)*cos(L)
         Ys = cos(B)*sin(L)
         Zs = sin(B)
         Zs = -Zs
-    
-        X, Y, Z = rotation_matrix.T.dot(np.array([Xs, Ys, Zs]))
-    
-        l = degrees(np.arctan2(Y,X))
-        b = degrees(np.arcsin(Z/np.sqrt(X*X+Y*Y+Z*Z)))
-    
+
+        X, Y, Z = sgr_matrix.T.dot(np.array([Xs, Ys, Zs]))
+
+        l = np.degrees(np.arctan2(Y,X))
+        b = np.degrees(np.arcsin(Z/np.sqrt(X*X+Y*Y+Z*Z)))
+
         if l<0:
             l += 360
-    
-        return coord.GalacticCoordinates(l, b, distance=sgr_coord.distance, 
-                                         unit=(u.degree, u.degree))
-
-Now that we've registered these transformations between `SgrCoordinates` and 
-`~astropy.coordinates.builtin_systems.GalacticCoordinates`, we can transform 
-between *any* coordinate system and `SgrCoordinates` (as long as the other 
-system has a path to transform to 
-`~astropy.coordinates.builtin_systems.GalacticCoordinates`). For example, to 
+
+        return coord.Galactic(l, b, distance=sgr_coord.distance,
+                              unit=(u.degree, u.degree))
+
+Now that we've registered these transformations between `SgrCoordinates` and
+`~astropy.coordinates.builtin_systems.Galactic`, we can transform
+between *any* coordinate system and `SgrCoordinates` (as long as the other
+system has a path to transform to
+`~astropy.coordinates.builtin_systems.Galactic`). For example, to
 transform from ICRS coordinates to `SgrCoordinates`, we simply::
 
+    >>> from astropy import units as u
     >>> import astropy.coordinates as coord
-    >>> icrs = coord.ICRSCoordinates(280.161732, 11.91934, unit=(u.degree,u.degree))
-    >>> icrs.transform_to(SgrCoordinates)
+    >>> icrs = coord.ICRS(280.161732, 11.91934, unit=(u.degree,u.degree))
+    >>> icrs.transform_to(SgrCoordinates)  # doctest: +SKIP
     <SgrCoordinates Lambda=346.81827 deg, Beta=-39.28367 deg>
 
 The complete code for the above example is included below for reference.
@@ -223,7 +228,7 @@ The complete code for the above example is included below for reference.
 See Also
 ========
 
-* Majewski et al. 2003, "A Two Micron All Sky Survey View of the Sagittarius 
+* Majewski et al. 2003, "A Two Micron All Sky Survey View of the Sagittarius
   Dwarf Galaxy. I. Morphology of the Sagittarius Core and Tidal Arms",
   http://arxiv.org/abs/astro-ph/0304198
 * Law & Majewski 2010, "The Sagittarius Dwarf Galaxy: A Model for Evolution in a
diff --git a/docs/coordinates/transforming.rst b/docs/coordinates/transforming.rst
index ea8efc2..79dbfa9 100644
--- a/docs/coordinates/transforming.rst
+++ b/docs/coordinates/transforming.rst
@@ -16,51 +16,55 @@ that have an alias (created with
 `~astropy.coordinates.transformations.coordinate_alias`) can be converted by
 simply using attribute style access to any other coordinate system::
 
-    >>> gc = GalacticCoordinates(l=0, b=45, unit=(u.degree, u.degree))
+    >>> from astropy import units as u
+    >>> from astropy.coordinates import Galactic, ICRS
+    >>> gc = Galactic(l=0, b=45, unit=(u.degree, u.degree))
     >>> gc.fk5
-    <FK5Coordinates RA=229.27250 deg, Dec=-1.12842 deg>
-    >>> ic = ICRSCoordinates(ra=0, dec=45, unit=(u.degree, u.degree)))
+    <FK5 RA=229.27250 deg, Dec=-1.12842 deg>
+    >>> ic = ICRS(ra=0, dec=45, unit=(u.degree, u.degree))
     >>> ic.fk5
-    <FK5Coordinates RA=0.00001 deg, Dec=45.00000 deg>
+    <FK5 RA=0.00001 deg, Dec=45.00000 deg>
 
 While this appears to be simple attribute-style access, it is actually just
 syntactic sugar for the `transform_to` method::
 
-    >>> from astropy.coordinates import FK5Coordinates
-    >>> gc.transform_to(FK5Coordinates)
-    <FK5Coordinates RA=229.27250 deg, Dec=-1.12842 deg>
-    >>> ic.transform_to(FK5Coordinates)
-    <FK5Coordinates RA=0.00001 deg, Dec=45.00000 deg>
+    >>> from astropy.coordinates import FK5
+    >>> gc.transform_to(FK5)
+    <FK5 RA=229.27250 deg, Dec=-1.12842 deg>
+    >>> ic.transform_to(FK5)
+    <FK5 RA=0.00001 deg, Dec=45.00000 deg>
 
-The full list of supported coordinate systems and transformations is in the
-`astropy.coordinates` API documentation below.
+The full list of supported coordinate systems and transformations is
+in the `astropy.coordinates` API documentation below.
 
-Additionally, some coordinate systems support precessing the coordinate to
-produce a new coordinate in the same system but at a different equinox.  Note 
-that these systems have a default equinox they start with if you don't specify 
-one::
+Additionally, some coordinate systems support precessing the
+coordinate to produce a new coordinate in the same system but at a
+different equinox.  Note that these systems have a default equinox
+they start with if you don't specify one::
 
-    >>> fk5c = FK5Coordinates('02h31m49.09s +89d15m50.8s')
+    >>> from astropy.time import Time
+    >>> fk5c = FK5('02h31m49.09s +89d15m50.8s')
     >>> fk5c.equinox
-    <Time object: scale='utc' format='jyear_str' vals=J2000.000>
+    <Time object: scale='utc' format='jyear_str' value=J2000.000>
     >>> fk5c
-    <FK5Coordinates RA=37.95454 deg, Dec=89.26411 deg>
+    <FK5 RA=37.95454 deg, Dec=89.26411 deg>
     >>> fk5c.precess_to(Time(2100, format='jyear', scale='utc'))
-    <FK5Coordinates RA=88.32396 deg, Dec=89.54057 deg>
+    <FK5 RA=88.32396 deg, Dec=89.54057 deg>
 
-You can also specify the equinox when you create a coordinate using an 
+You can also specify the equinox when you create a coordinate using an
 `astropy.time.Time` object::
 
-    >>> from astropy.time import Time
-    >>> fk5c = FK5Coordinates('02h31m49.09s +89d15m50.8s', equinox=Time('J1970', scale='utc'))
-    <FK5Coordinates RA=37.95454 deg, Dec=89.26411 deg>
+    >>> fk5c = FK5('02h31m49.09s +89d15m50.8s',
+    ...            equinox=Time('J1970', scale='utc'))
     >>> fk5c.precess_to(Time(2000, format='jyear', scale='utc'))
-    <FK5Coordinates RA=48.02317 deg, Dec=89.38672 deg>
+    <FK5 RA=48.02317 deg, Dec=89.38672 deg>
 
-Coordinate systems do not necessarily all support an equinox nor precession, as it is a
-meaningless action for coordinate systems that do not depend on a particular equinox.
+Coordinate systems do not necessarily all support an equinox nor
+precession, as it is a meaningless action for coordinate systems that
+do not depend on a particular equinox.
 
-Furthermore, coordinates typically have an `obstime` attribute, intended to record the
-time of the observation.  Some systems (especially FK4) require this information due
-to being non-inertial frames (i.e., they rotate over time due to motions of the
-defining stars).
\ No newline at end of file
+Furthermore, coordinates typically have an `obstime` attribute,
+intended to record the time of the observation.  Some systems
+(especially FK4) require this information due to being non-inertial
+frames (i.e., they rotate over time due to motions of the defining
+stars).
diff --git a/docs/cosmology/index.rst b/docs/cosmology/index.rst
index e74b652..2753c15 100644
--- a/docs/cosmology/index.rst
+++ b/docs/cosmology/index.rst
@@ -25,31 +25,43 @@ the number of transverse proper kpc corresponding to an arcminute at z=3:
 
   >>> from astropy import cosmology
   >>> cosmology.H(0)
-  70.4
-  >>> cosmology.kpc_proper_per_arcmin(3)
-  472.8071851564037
+  WARNING: No default cosmology has been specified, using 9-year WMAP.
+  [astropy.cosmology.core]
+  <Quantity 69.32 km / (Mpc s)>
+  >>> cosmology.kpc_proper_per_arcmin(3)  # doctest: +REQUIRES_SCIPY
+  <Quantity 472.977096... kpc / arcmin>
 
 All the functions available are listed in the `Reference/API`_
 section. These will use the "current" cosmology to calculate the
 values (see `The Current Cosmology`_ section below for more
-details). If you haven't set this explicitly, they will use the 7-year
+details). If you haven't set this explicitly, they will use the 9-year
 WMAP cosmological parameters and print a warning message.
 
-There are also several standard cosmologies already defined. These are
-objects with methods and attributes that calculate cosmological
+Also note that the cosmology subpackage makes use of `~astropy.units`, so
+in many cases returns values with units attached -- consult the documentation
+for that subpackage for more details, but, briefly, to access the floating
+point (or array) values:
+
+  >>> from astropy import cosmology
+  >>> H0 = cosmology.H(0)
+  >>> H0.value, H0.unit
+  (69.32, Unit("km / (Mpc s)"))
+
+There are also several standard cosmologies already defined, as
+described in `Built-in Cosmologies`_ below. These are objects
+with methods and attributes that calculate cosmological
 values. For example, the comoving distance in Mpc to redshift 4 using
 the 5-year WMAP parameters:
 
   >>> from astropy.cosmology import WMAP5
-  >>> WMAP5.comoving_distance(4)
-  7329.328120760829
-
-A full list of the pre-defined cosmologies is given by
-`cosmology.parameters.available`.
+  >>> WMAP5.comoving_distance(4)  # doctest: +REQUIRES_SCIPY
+  <Quantity 7329.328093495547 Mpc>
 
 An important point is that the cosmological parameters of each
 instance are immutable -- that is, if you want to change, say,
-`Om`, you need to make a new instance of the class.
+`Om`, you need to make a new instance of the class.  Also note that
+the built in cosmologies are instances of classes as described below,
+not functions.
 
 Using `cosmology`
 =================
@@ -69,54 +81,74 @@ arguments giving the Hubble parameter and omega matter (both at z=0):
   >>> from astropy.cosmology import FlatLambdaCDM
   >>> cosmo = FlatLambdaCDM(H0=70, Om0=0.3)
   >>> cosmo
-  LambdaCDM(H0=70, Om0=0.3, Ode0=0.7)
+  FlatLambdaCDM(H0=70 km / (Mpc s), Om0=0.3, Tcmb0=2.725 K,
+                Neff=3.04, m_nu=[ 0.  0.  0.] eV)
+
+This can also be done more explicity using units, which is recommended:
 
-A number of additional dark energy models are provided (described below).
-Note that photons and neutrinos are included in these models, so
-Om0 + Ode0 is not quite one.
+  >>> from astropy.cosmology import FlatLambdaCDM
+  >>> import astropy.units as u
+  >>> cosmo = FlatLambdaCDM(H0=70 * u.km / u.s / u.Mpc, Om0=0.3)
+
+However, most of the parameters that accept units (`H0`, `Tcmb0`)
+have default units, so unit quantities do not have to be used.
+The exception are neutrino masses, where you must supply a
+units if you want massive neutrinos.
 
 The pre-defined cosmologies described in the `Getting Started`_
 section are instances of `~astropy.cosmology.core.FlatLambdaCDM`, and have
-the same methods. So we can find the luminosity distance in Mpc to
+the same methods. So we can find the luminosity distance to
 redshift 4 by:
 
-  >>> cosmo.luminosity_distance(4)
-  35842.35374316948
+  >>> cosmo.luminosity_distance(4)  # doctest: +REQUIRES_SCIPY
+  <Quantity 35842.353618623194 Mpc>
 
-or the age of the universe at z = 0 in Gyr:
+or the age of the universe at z = 0:
 
-  >>> cosmo.age(0)
-  13.461701807287566
+  >>> cosmo.age(0)  # doctest: +REQUIRES_SCIPY
+  <Quantity 13.461701658024014 Gyr>
 
 They also accept arrays of redshifts:
 
-  >>> cosmo.age([0.5, 1, 1.5])
-  array([ 8.42128059,  5.74698062,  4.1964541 ])
+  >>> cosmo.age([0.5, 1, 1.5]).value  # doctest: +REQUIRES_SCIPY
+  array([ 8.42128047,  5.74698053,  4.19645402])
 
 See the `~astropy.cosmology.core.FLRW` and
 `~astropy.cosmology.core.FlatLambdaCDM` object docstring for all the
 methods and attributes available. In addition to flat Universes,
 non-flat varieties are supported such as
 `~astropy.cosmology.core.LambdaCDM`.  There are also a variety of
-standard cosmologies with the parameters already defined:
+standard cosmologies with the parameters already defined
+(see `Built-in Cosmologies`_):
 
   >>> from astropy.cosmology import WMAP7   # WMAP 7-year cosmology
-  >>> WMAP7.critical_density(0)       # critical density at z = 0 in g/cm^3
-  9.31000313202047e-30
-
-  >>> from astropy.cosmology import WMAP5   # WMAP 5-year
-  >>> WMAP5.H(3)                    # Hubble parameter at z = 3 in km/s/Mpc
-  301.71804314602889
+  >>> WMAP7.critical_density(0)       # critical density at z = 0
+  <Quantity 9.31000324...e-30 g / cm3>
 
 You can see how the density parameters evolve with redshift as well
 
   >>> from astropy.cosmology import WMAP7   # WMAP 7-year cosmology
-  >>> WMAP7.Om([0,1.0,2.0]), WMAP7.Ode([0.,1.0,2.0])
-  (array([ 0.272     ,  0.74898525,  0.9090524 ]),
-   array([ 0.72791572,  0.25055062,  0.09010261]))
+  >>> WMAP7.Om([0, 1.0, 2.0]), WMAP7.Ode([0., 1.0, 2.0])
+  (array([ 0.272      ,  0.748985...,  0.909052...]),
+   array([ 0.727915...,  0.250550...,  0.090102...]))
 
 Note that these don't quite add up to one even though WMAP7 assumes a
-flat Universe because photons and neutrinos are included.
+flat Universe because photons and neutrinos are included, and that
+they are not `~astropy.units.Quantity` objects because they are dimensionless.
+
+Cosmological instances have an optional ``name`` attribute which can be
+descriptive:
+
+  >>> from astropy.cosmology import FlatwCDM
+  >>> cosmo = FlatwCDM(name='SNLS3+WMAP7', H0=71.58, Om0=0.262, w0=-1.016)
+  >>> cosmo
+  FlatwCDM(name="SNLS3+WMAP7", H0=71.6 km / (Mpc s), Om0=0.262,
+           w0=-1.02, Tcmb0=2.725 K, Neff=3.04, m_nu=[ 0.  0.  0.] eV)
+
+This is also an example of a model with a different model for dark
+energy, a flat Universe with a constant dark energy equation of state,
+but not necessarily a cosmological constant.  A variety of additional
+dark energy models are also supported -- see `Specifying a dark energy model`_.
 
 In addition to the `~astropy.cosmology.core.LambdaCDM` object, there
 are convenience functions that calculate some of these quantities
@@ -124,10 +156,10 @@ without needing to explicitly give a cosmology - but there are more
 methods available if you work directly with the cosmology object.
 
   >>> from astropy import cosmology
-  >>> cosmology.kpc_proper_per_arcmin(3)
-  472.8071851564037
-  >>> cosmology.arcsec_per_kpc_proper(3)
-  0.12690162477152736
+  >>> cosmology.kpc_proper_per_arcmin(3)  # doctest: +REQUIRES_SCIPY
+  <Quantity 472.977096... kpc / arcmin>
+  >>> cosmology.arcsec_per_kpc_proper(3)  # doctest: +REQUIRES_SCIPY
+  <Quantity 0.126856... arcsec / kpc>
 
 These functions will perform calculations using the "current"
 cosmology. This is a specific cosmology that is currently active in
@@ -136,9 +168,8 @@ can also be explicitly given a cosmology using the `cosmo` keyword
 argument. A full list of convenience functions is included below, in
 the `Reference/API`_ section.
 
-
 The Current Cosmology
-=======================
+---------------------
 
 Sometimes it's useful for Astropy functions to assume a default
 cosmology so that the desired cosmology doesn't have to be specified
@@ -153,49 +184,70 @@ use the `~astropy.cosmology.core.set_current` function to set a
 cosmology for the current Python session.
 
 If you haven't set a current cosmology using one of the methods
-described above, then the cosmology module will use the 7-year WMAP
+described above, then the cosmology module will use the 9-year WMAP
 parameters and print a warning message letting you know this. For
 example, if you call a convenience function without setting the
 current cosmology or using the `cosmo=` keyword you see the following
 message:
 
   >>> from astropy import cosmology
-  >>> cosmology.lookback_time(1) # lookback time in Gyr at z=1
-  WARNING: No default cosmology has been specified, using 7-year WMAP.
-  [astropy.cosmology.core]
-  7.787766946
+  >>> cosmology.lookback_time(1)  # lookback time in Gyr at z=1  # doctest: +REQUIRES_SCIPY
+  <Quantity 7.846670... Gyr>
 
 The 9-year WMAP and Planck 2013 cosmologies are also available
 
   >>> from astropy.cosmology import WMAP9   # WMAP 9-year
-  >>> WMAP9.lookback_time(2)                # lookback time in Gyr at z=2
-  10.442114507
+  >>> WMAP9.lookback_time(2).value          # lookback time in Gyr at z=2  # doctest: +REQUIRES_SCIPY
+  10.442114...
   >>> from astropy.cosmology import Planck13  # Planck 2013
-  >>> Planck13.lookback_time(2)             # lookback time in Gyr at z=2
-  10.522149614
-
-You may notice that values derived using the Planck13 cosmology in
-`astropy` are slightly different from those in the Planck
-Collaboration pre-print (http://arxiv.org/abs/1303.5076). For example,
-the age of the universe using a Planck13 in `astropy` is 13.813 Gyr
-compared to 13.797 Gyr in the Planck preprint. This is because
-`astropy` assumes that neutrinos are massless, but the Planck preprint
-uses a single neutrino species with mass 0.06 eV. Future versions of
-`astropy` may include support for massive neutrinos.
+  >>> Planck13.lookback_time(2)             # lookback time in Gyr at z=2  # doctest: +REQUIRES_SCIPY
+  <Quantity 10.511841... Gyr>
 
 .. note::
 
     In general it's better to use an explicit cosmology (for example
-    ``WMAP7.H(0)`` instead of ``cosmology.H(0)``). The motivation for
+    ``WMAP9.H(0)`` instead of ``cosmology.H(0)``). The motivation for
     this is that when you go back to use the code at a later date or
     share your scripts with someone else, the default cosmology may
     have changed. Use of the convenience functions should generally be
     reserved for interactive work or cases where the flexibility of
     quickly changing between different cosmologies is for some reason
     useful. Alternatively, putting (for example)
-    ``cosmology.set_current(WMAP7)`` at the top of your code will
+    ``cosmology.set_current(WMAP9)`` at the top of your code will
     ensure that the right cosmology is always used.
 
+Built-in Cosmologies
+--------------------
+
+A number of pre-loaded cosmologies are available from the
+WMAP and Planck satellites.  For example,
+
+  >>> from astropy.cosmology import Planck13  # Planck 2013
+  >>> Planck13.luminosity_distance(2)         # luminosity distance to z=2  # doctest: +REQUIRES_SCIPY
+  <Quantity 15932.668054... Mpc>
+
+A full list of the pre-defined cosmologies is given by
+`cosmology.parameters.available`, and summarized below:
+
+========  ============================= ====  ===== =======
+Name      Source                        H0    Om    Flat
+========  ============================= ====  ===== =======
+WMAP5     Komatsu et al. 2009           70.2  0.277 Yes
+WMAP7     Komatsu et al. 2011           70.4  0.272 Yes
+WMAP9     Hinshaw et al. 2013           69.3  0.287 Yes
+Planck13  Planck Collab 2013, Paper XVI 67.8  0.307 Yes
+========  ============================= ====  ===== =======
+
+Currently, all are instances of `~astropy.cosmology.core.FlatLambdaCDM`.
+More details about exactly where each set of parameters come from
+are available in the document tag for each object:
+
+  >>> from astropy.cosmology import WMAP7
+  >>> print(WMAP7.__doc__)
+  WMAP7 instance of FlatLambdaCDM cosmology
+  (from Komatsu et al. 2011, ApJS, 192, 18, doi: 10.1088/0067-0049/192/2/18.
+  Table 1 (WMAP + BAO + H0 ML).)
+
 Using `cosmology` inside Astropy
 --------------------------------
 
@@ -221,59 +273,107 @@ Specifying a dark energy model
 
 In addition to the standard `~astropy.cosmology.core.FlatLambdaCDM` model
 described above, a number of additional dark energy models are
-provided.  `~astropy.cosmology.core.FlatLambdaCDM` 
-and `~astropy.cosmology.core.FlatLambdaCDM` assume that dark
+provided.  `~astropy.cosmology.core.FlatLambdaCDM`
+and `~astropy.cosmology.core.LambdaCDM` assume that dark
 energy is a cosmological constant, and should be the most commonly
-used case.  `~astropy.cosmology.core.wCDM` assumes a constant dark
-energy equation of state parameterized by :math:`w_0`. Two forms of a
+used cases; the former assumes a flat Universe, the latter allows
+for spatial curvature.  `~astropy.cosmology.core.FlatwCDM` and
+`~astropy.cosmology.core.wCDM` assum a constant dark
+energy equation of state parameterized by :math:`w_{0}`. Two forms of a
 variable dark energy equation of state are provided: the simple first
-order linear expansion :math:`w(z) = w_0 + w_z z` by
+order linear expansion :math:`w(z) = w_{0} + w_{z} z` by
 `~astropy.cosmology.core.w0wzCDM`, as well as the common CPL form by
-`~astropy.cosmology.core.w0waCDM`: :math:`w(z) = w_0 + w_a (1 - a) =
-w_0 + w_a z / (1 + z)` and its generalization to include a pivot
-redshift by `~astropy.cosmology.core.wpwaCDM`: :math:`w(z) = w_p + w_a
-(a_p - a)`.
+`~astropy.cosmology.core.w0waCDM`: :math:`w(z) = w_{0} + w_{a} (1 - a) =
+w_{0} + w_{a} z / (1 + z)` and its generalization to include a pivot
+redshift by `~astropy.cosmology.core.wpwaCDM`: :math:`w(z) = w_{p} + w_{a}
+(a_{p} - a)`.
 
 Users can specify their own equation of state by sub-classing
 `~astropy.cosmology.core.FLRW`.  See the provided subclasses for
 examples.
 
-Relativistic Species
-====================
+Photons and Neutrinos
+=====================
 The cosmology classes include the contribution to the energy density
-from both photons and massless neutrinos.  The two parameters
-controlling the properties of these species are Tcmb0 (the temperature
-of the CMB at z=0) and Neff, the effective number of neutrino species.
-Both have standard default values (2.725 and 3.04, respectively; the
-reason that Neff is not 3 has to do with a small bump in the neutrino
-energy spectrum due to electron-positron annihilation).
+from both photons and neutrinos.  By default, the latter are assumed
+massless.  The three parameters controlling the proporties of these
+species, which are arguments to the initializers of all the
+cosmological classes, are `Tcmb0` (the temperature of the CMB at z=0),
+`Neff`, the effective number of neutrino species, and `m_nu`, the rest
+mass of the neutrino species.  `Tcmb0` and `m_nu` should be expressed
+as unit Quantities.  All three have standard default values (2.725 K,
+3.04, and 0 eV respectively; the reason that `Neff` is not 3 primarily
+has to do with a small bump in the neutrino energy spectrum due to
+electron-positron annihilation, but is also affected by weak
+interaction physics).
+
+Massive neutrinos are treated using the approach described in the
+WMAP 7-year cosmology paper (Komatsu et al. 2011, ApJS, 192, 18, section 3.3).
+This is not the simple
+:math:`\Omega_{\nu 0} h^2 = \sum_i m_{\nu\, i} / 93.04\,\mathrm{eV}`
+approximation.  Also note that the values of :math:`\Omega_{\nu}(z)`
+include both the kinetic energy and the rest-mass energy components,
+and that the Planck13 cosmology includes a single species of neutrinos
+with non-zero mass (which is not included in :math:`\Omega_{m0}`).
+
+The contribution of photons and neutrinos to the total mass-energy density
+can be found as a function of redshift:
 
   >>> from astropy.cosmology import WMAP7   # WMAP 7-year cosmology
-  >>> z = [0,1.0,2.0]
+  >>> WMAP7.Ogamma0, WMAP7.Onu0 # Current epoch values
+  (4.985694...e-05, 3.442154...e-05)
+  >>> z = [0, 1.0, 2.0]
   >>> WMAP7.Ogamma(z), WMAP7.Onu(z)
-  (array([  4.98569503e-05,   2.74574414e-04]),
-   array([  3.44204408e-05,   1.89561782e-04]),
-   array([  8.42773911e-05,   4.64136197e-04]))
+  (array([  4.985694...e-05,   2.745744...e-04,   4.998813...e-04]),
+   array([  3.442154...e-05,   1.895678...e-04,   3.451212...e-04]))
 
 If you want to exclude photons and neutrinos from your calculations,
-simply set the CMB Temperature to 0:
+simply set `Tcmb0` to 0:
 
   >>> from astropy.cosmology import FlatLambdaCDM
-  >>> cos = FlatLambdaCDM(70.4, 0.272, Tcmb0 = 0.0)
+  >>> import astropy.units as u
+  >>> cos = FlatLambdaCDM(70.4 * u.km / u.s / u.Mpc, 0.272, Tcmb0 = 0.0 * u.K)
   >>> cos.Ogamma0, cos.Onu0
   (0.0, 0.0)
 
-Neutrinos can be removed (while leaving photons) by setting Neff=0:
+Neutrinos can be removed (while leaving photons) by setting `Neff` to 0:
 
   >>> from astropy.cosmology import FlatLambdaCDM
   >>> cos = FlatLambdaCDM(70.4, 0.272, Neff=0)
-  >>> cos.Ogamma([0,1,2]),cos.Onu([0,1,2])
-  (array([  4.98569503e-05,   2.74623219e-04,   5.00051845e-04]),
-   array([ 0.,  0.,  0.]))
+  >>> cos.Ogamma([0,1,2]), cos.Onu([0,1,2])
+  (array([  4.98569497e-05,   2.74623215e-04,   5.00051839e-04]),
+   array([0, 0, 0]))
+
+The number of neutrino species is assumed to be the floor of `Neff`,
+which in the default case is 3.  Therefore, if non-zero neutrino masses
+are desired, then 3 masses should be provided.  However, if only one
+value is provided, all the species are assumed to have the same mass.
+`Neff` is assumed to be shared equally between each species.
+
+  >>> from astropy.cosmology import FlatLambdaCDM
+  >>> import astropy.units as u
+  >>> H0 = 70.4 * u.km / u.s / u.Mpc
+  >>> m_nu = 0 * u.eV
+  >>> cos = FlatLambdaCDM(H0, 0.272, m_nu=m_nu)
+  >>> cos.has_massive_nu
+  False
+  >>> cos.m_nu
+  <Quantity [ 0., 0., 0.] eV>
+  >>> m_nu = [0.0, 0.05, 0.10] * u.eV
+  >>> cos = FlatLambdaCDM(H0, 0.272, m_nu=m_nu)
+  >>> cos.has_massive_nu
+  True
+  >>> cos.m_nu
+  <Quantity [ 0.  , 0.05, 0.1 ] eV>
+  >>> cos.Onu([0, 1.0, 15.0])
+  array([ 0.00326988,  0.00896783,  0.0125786 ])
+  >>> cos.Onu(1) * cos.critical_density(1)
+  <Quantity 2.444380380370406e-31 g / cm3>
 
 While these examples used `~astropy.cosmology.core.FlatLambdaCDM`,
 the above examples also apply for all of the other cosmology classes.
 
+
 See Also
 ========
 
@@ -294,6 +394,14 @@ over which the code is regularly tested in the module
 let us know by `opening an issue at the github repository
 <https://github.com/astropy/astropy/issues>`_!
 
+The built in cosmologies use the parameters as listed in the
+respective papers.  These provide only a limited range of precision,
+and so you should not expect derived quantities to match beyond
+that precision.  For example, the Planck 2013 results only provide the
+Hubble constant to 4 digits.  Therefore, the Planck13 built-in
+cosmology should only be expected to match the age of the Universe
+quoted by the Planck team to 4 digits, although they provide 5 in the paper.
+
 Reference/API
 =============
 
diff --git a/docs/credits.rst b/docs/credits.rst
index e9e1fe9..ce6bb49 100644
--- a/docs/credits.rst
+++ b/docs/credits.rst
@@ -15,34 +15,63 @@ Core Package Contributors
 
 * Tom Aldcroft
 * Kyle Barbary
+* Geert Barentsen
 * Paul Barrett
-* Erik Bray
-* Neil Crighton
+* Andreas Baumbach
+* Chris Beaumont
+* Daniel Bell
+* Larry Bradley
+* Gustavo Bragança
+* Erik M. Bray
+* Eli Bressert
 * Alex Conley
+* Jean Connelly
 * Simon Conseil
+* Matt Craig
+* Steven Crawford
+* Neil Crighton
 * Matt Davis
 * Christoph Deil
 * Nadia Dencheva
+* Axel Donath
 * Michael Droettboom
+* Zach Edwards
+* Thomas Erben
 * Henry Ferguson
+* Ryan Fox
 * Adam Ginsburg
 * Perry Greenfield
 * Frédéric Grollier
 * Hans Moritz Günther
+* Alex Hagen
+* Emma Hogan
 * Chris Hanley
 * JC Hsu
+* Marten van Kerkwijk
 * Wolfgang Kerzendorf
+* Kacper Kowalik
 * Roban Kramer
 * Pey Lian Lim
+* Stuart Mumford
 * Demitri Muna
 * Prasanth Nair
+* Miruna Oprescu
+* Madhura Parikh
+* Sergio Pascual
 * Adrian Price-Whelan
 * Thomas Robitaille
+* Alex Rudy
+* Joseph Ryan
 * David Shiga
+* David Shupe
 * Leo Singer
 * James Taylor
+* Jeff Taylor
+* Víctor Terrón
 * Erik Tollerud
 * James Turner
+* Miguel de Val-Borro
+* Benjamin Alan Weaver
 * Julien Woillez
 * Victor Zabalza
 
diff --git a/docs/development/building.rst b/docs/development/building.rst
new file mode 100644
index 0000000..529b040
--- /dev/null
+++ b/docs/development/building.rst
@@ -0,0 +1,78 @@
+====================================
+Building Astropy and its Subpackages
+====================================
+
+The build process currently uses the
+`Distribute <http://packages.python.org/distribute/>`_ package to build and
+install the astropy core (and any affiliated packages that use the template).
+The user doesn't necessarily need to have `distribute` installed, as it will
+automatically bootstrap itself using the ``distribute_setup.py`` file in the
+source distribution if it isn't installed for the user.
+
+Customizing setup/build for subpackages
+---------------------------------------
+
+As is typical, there is a single ``setup.py`` file that is used for the whole
+`astropy` package.  To customize setup parameters for a given sub-package, a
+``setup_package.py`` file can be defined inside a package, and if it is present,
+the setup process will look for the following functions to customize the build
+process:
+
+* :func:`get_package_data`
+    This function, if defined, should return a dictionary mapping the name of
+    the subpackage(s) that need package data to a list of data file paths
+    (possibly including wildcards) relative to the path of the package's source
+    code.  e.g. if the source distribution has a needed data file
+    ``astropy/wcs/tests/data/3d_cd.hdr``, this function should return
+    ``{'astropy.wcs.tests':['data/3d_cd.hdr']}``. See the ``package_data``
+    option of the  :func:`distutils.core.setup` function.
+
+    It is recommended that all such data be in a directory named ``data`` inside
+    the package within which it is supposed to be used.  This package data should
+    be accessed via the `astropy.utils.data.get_data_filename` and
+    `astropy.utils.data.get_data_fileobj` functions.
+
+* :func:`get_extensions`
+    This provides information for building C or Cython extensions. If defined,
+    it should return a list of `distutils.core.Extension` objects controlling
+    the Cython/C build process (see below for more detail).
+
+* :func:`get_build_options`
+    This function allows a package to add extra build options.  It
+    should return a list of tuples, where each element has:
+
+    - *name*: The name of the option as it would appear on the
+      commandline or in the `setup.cfg` file.
+
+    - *doc*: A short doc string for the option, displayed by
+      `setup.py build --help`.
+
+    - *is_bool* (optional): When `True`, the option is a boolean
+      option and doesn't have an associated value.
+
+    Once an option has been added, its value can be looked up using
+    `astropy.setup_helpers.get_distutils_build_option`.
+
+* :func:`get_external_libraries`
+    This function declares that the package uses libraries that are
+    included in the astropy distribution that may also be distributed
+    elsewhere on the users system.  It should return a list of library
+    names.  For each library, a new build option is created,
+    `--use-system-X` which allows the user to request to use the
+    system's copy of the library.  The package would typically call
+    `astropy.setup_helpers.use_system_library` from its
+    `get_extensions` function to determine if the package should use
+    the system library or the included one.
+
+* :func:`requires_2to3`
+    This function declares whether the package requires processing
+    through the `2to3` tool to run on Python 3.  If not included, it
+    defaults to `True`.  The use of `2to3` is being phased out in
+    astropy, in favor of using `six` instead.  See :ref:`dev-portable`
+    for more information.
+
+The `astropy.setup_helpers` modules includes a :func:`update_package_files`
+function which automatically searches the given source path for
+``setup_package.py`` modules and calls each of the above functions, if they
+exist.  This makes it easy for affiliated packages to use this machinery in
+their own ``setup.py``.
diff --git a/docs/development/ccython.rst b/docs/development/ccython.rst
new file mode 100644
index 0000000..e1d1ca0
--- /dev/null
+++ b/docs/development/ccython.rst
@@ -0,0 +1,74 @@
+.. _building-c-or-cython-extensions:
+
+======================
+C or Cython Extensions
+======================
+
+Astropy supports using C extensions for wrapping C libraries and Cython for
+speeding up computationally-intensive calculations. Both Cython and C extension
+building can be customized using the :func:`get_extensions` function of the
+``setup_package.py`` file. If defined, this function must return a list of
+`distutils.core.Extension` objects. The creation process is left to the
+subpackage designer, and can be customized however is relevant for the
+extensions in the subpackage.
+
+While C extensions must always be defined through the :func:`get_extensions`
+mechanism, Cython files (ending in ``.pyx``) are automatically located and
+loaded in separate extensions if they are not in :func:`get_extensions`. For
+Cython extensions located in this way, headers for numpy C functions are
+included in the build, but no other external headers are included. ``.pyx``
+files present in the extensions returned by :func:`get_extensions` are not
+included in the list of extensions automatically generated extensions. Note
+that this allows disabling a Cython file by providing an extension that
+includes the Cython file, but giving it the special `name` 'cython_skip'. Any
+extension with this package name will not be built by ``setup.py``.
+
+.. note::
+
+    If an :class:`~distutils.core.Extension` object is provided for Cython
+    source files using the :func:`get_extensions` mechanism, it is very
+    important that the ``.pyx`` files be given as the `source`, rather than the
+    ``.c`` files generated by Cython.
+
+Installing C header files
+-------------------------
+
+If your C extension needs to be linked from other third-party C code,
+you probably want to install its header files along side the Python module.
+
+    1) Create an `include` directory inside of your package for
+       all of the header files.
+
+    2) Use the :func:`get_package_data` hook in `setup_package.py` to
+       install those header files.  For example, the `astropy.wcs`
+       package has this::
+
+           def get_package_data():
+               return {'astropy.wcs': ['include/*.h']}
+
+Preventing importing at build time
+----------------------------------
+
+In rare cases, some packages may need to be imported at build time.
+Unfortunately, anything that requires a C or Cython extension or
+processing through 2to3 will fail to import until the build phase has
+completed.  In those cases, the `_ASTROPY_SETUP_` variable can be used
+to determine if the package is being imported as part of the build and
+choose to not import problematic modules.  `_ASTROPY_SETUP_` is
+inserted into the builtins, and is `True` when inside of astropy's
+`setup.py` script, and `False` otherwise.
+
+For example, suppose there is a subpackage ``foo`` that needs to
+import a module called ``version.py`` at build time in order to set
+some version information, and also has a C extension, ``process``,
+that will not be available in the source tree.  In this case,
+``astropy/foo/__init__.py`` would probably want to check the value of
+`_ASTROPY_SETUP_` before importing the C extension::
+
+    try:
+        from . import process
+    except ImportError:
+        if not _ASTROPY_SETUP_:
+            raise
+
+    from . import version
\ No newline at end of file
diff --git a/docs/development/codeguide.rst b/docs/development/codeguide.rst
index 3116c25..a4f7fc5 100644
--- a/docs/development/codeguide.rst
+++ b/docs/development/codeguide.rst
@@ -13,24 +13,44 @@ Interface and Dependencies
 --------------------------
 
 * All code must be compatible with Python 2.6, 2.7, as well as 3.1 and
-  later. All files should include the preamble::
+  later.  The use of `six <http://pythonhosted.org/six/>`__ for
+  writing code that is portable between Python 2.x and 3.x is
+  encouraged going forward.  However, much of our legacy code still
+  uses `2to3` to process Python 2.x files to be compatible with Python
+  3.x.
+
+  Packages that use ``six`` must include the following in their
+  `setup_package.py` file::
+
+      def requires_2to3():
+          return False
+
+  Code that uses ``six`` should use the following preamble::
+
+        from __future__ import (absolute_import, division, print_function,
+                                unicode_literals)
+
+  Code that uses ``2to3`` may limit the ``__future__`` statement to
+  only the following, if necessary (though using all 4 is still
+  preferred)::
 
         from __future__ import print_function, division
 
-  and therefore use the ``print()`` function from Python 3. In addition, the
-  new Python 3 formatting style should be used (i.e.
-  ``"{0:s}".format("spam")`` instead of ``"%s" % "spam"``), although when
-  using positional arguments, the position should always be specified (i.e.
-  ``"{:s}"`` is not compatible with Python 2.6). Astropy automatically runs
-  the `2to3 tool <http://docs.python.org/library/2to3.html>`_ on the source
-  code, so in cases where syntax is different between Python 2 and 3, the
-  Python 2 syntax should be used.
-
-* The core package and affiliated packages should be importable with no
-  dependencies other than components already in the Astropy core, the
-  `Python Standard Library
-  <http://docs.python.org/release/2.6/library/index.html>`_, and NumPy_ 1.4
-  or later.
+  Additional information on writing code using ``six`` that is
+  compatible with both Python 2.x and 3.x is in the section
+  :ref:`dev-portable`.
+
+* The new Python 3 formatting style should be used (i.e.
+  ``"{0:s}".format("spam")`` instead of ``"%s" % "spam"``), although
+  when using positional arguments, the position should always be
+  specified (i.e.  ``"{:s}"`` is not compatible with Python
+  2.6).
+
+* The core package and affiliated packages should be importable with
+  no dependencies other than components already in the Astropy core,
+  the `Python Standard Library
+  <http://docs.python.org/release/2.6/library/index.html>`_, and
+  NumPy_ |minimum_numpy_version| or later.
 
 * The package should be importable from the source tree at build time. This
   means that, for example, if the package relies on C extensions that have
@@ -58,6 +78,12 @@ Documentation and Testing
 * Docstrings must be present for all public classes/methods/functions, and
   must follow the form outlined in the :doc:`docguide` document.
 
+* Write usage examples in the docstrings of all classes and functions whenever
+  possible. These examples should be short and simple to reproduce--users
+  should be able to copy them verbatim and run them. These examples should,
+  whenever possible, be in the :ref:`doctest <doctests>` format and will be
+  executed as part of the test suite.
+
 * Unit tests should be provided for as many public methods and functions as
   possible, and should adhere to the standards set in the :doc:`testguide`
   document.
@@ -98,9 +124,10 @@ errors should follow these rules:
   in favor of more specific exceptions (``IOError``, ``ValueError``,
   etc.).
 
-* For warnings, one should always use ``warnings.warn(message)``. These
-  get redirected to ``log.warn`` by default, but one can still use the
-  standard warning-catching mechanism and custom warning classes.
+* For warnings, one should always use ``warnings.warn(message, warning_class)``. These get redirected to ``log.warn`` by default, but one
+  can still use the standard warning-catching mechanism and custom warning
+  classes. The warning class should be either
+  :class:`~astropy.utils.exceptions.AstropyUserWarning` or inherit from it.
 
 * For informational and debugging messages, one should always use
   ``log.info(message)`` and ``log.debug(message)``.
@@ -159,7 +186,7 @@ Coding Style/Conventions
   important.
 
 * Multiple inheritance should be avoided in general without good reason.
-  Mulitple inheritance is complicated to implement well, which is why many
+  Multiple inheritance is complicated to implement well, which is why many
   object-oriented languages, like Java, do not allow it at all.  Python does
   enable multiple inheritance through use of the
   `C3 Linearization <http://www.python.org/download/releases/2.3/mro/>`_
@@ -184,6 +211,97 @@ Coding Style/Conventions
 * Command-line scripts should follow the form outlined in the :doc:`scripts`
   document.
 
+.. _handling-unicode:
+
+Unicode guidelines
+------------------
+
+For maximum compatibility, we need to assume that writing non-ascii
+characters to the console or to files will not work.  However, for
+those that have a correctly configured Unicode environment, we should
+allow them to opt-in to take advantage of Unicode output when
+appropriate.  Therefore, there is a global configuration option,
+`astropy.UNICODE_OUTPUT` to enable Unicode output of values, set to
+`False` by default.
+
+The following conventions should be used for classes that define the
+standard string conversion methods (``__str__``, ``__repr__``,
+``__unicode__``, ``__bytes__``, and ``__format__``).  In the bullets
+below, the phrase "unicode instance" is used to refer to `unicode` on
+Python 2 and `str` on Python 3.  The phrase "bytes instance" is used
+to refer to `str` on Python 2 and `bytes` on Python 3.
+
+- ``__repr__``: Return a "unicode instance" (for historical reasons,
+  could also be a "bytes instance" on Python 2, though not preferred)
+  containing only 7-bit characters.
+
+- ``__str__`` on Python 2 / ``__bytes__`` on Python 3: Return a "bytes
+  instance" containing only 7-bit characters.
+
+- ``__unicode__`` on Python 2 / ``__str__`` on Python 3: Return a
+  "unicode instance".  If `astropy.UNICODE_OUTPUT` is `False`, it must
+  contain only 7-bit characters.  If `astropy.UNICODE_OUTPUT` is
+  `True`, it may contain non-ascii characters when applicable.
+
+- ``__format__``: Return a "unicode instance".  If
+  `astropy.UNICODE_OUTPUT` is `False`, it must contain only 7-bit
+  characters.  If `astropy.UNICODE_OUTPUT` is `True`, it may contain
+  non-ascii characters when applicable.
+
+For classes that are expected to roundtrip through strings (unicode or
+bytes), the parser must accept either the output of ``__str__`` or
+``__unicode__`` unambiguously.  Additionally, ``__repr__`` should
+roundtrip when that makes sense.
+
+This design generally follows Postel's Law: "Be liberal in what you
+accept, and conservative in what you send".
+
+The following example class shows a way to implement this (using `six
+<https://pypi.python.org/pypi/six/>`_ for Python 2 and 3 cross-version
+compatibility::
+
+    # -*- coding: utf-8 -*-
+
+    from __future__ import unicode_literals
+
+    from astropy.extern import six
+    from astropy import UNICODE_OUTPUT
+
+    class FloatList(object):
+        def __init__(self, init):
+            if isinstance(init, six.text_type):
+                init = init.split('‖')
+            elif isinstance(init, bytes):
+                init = init.split(b'|')
+            self.x = [float(x) for x in init]
+
+        def __repr__(self):
+            # Return unicode object containing no non-ascii characters
+            return '<FloatList [{0}]>'.format(', '.join(
+                six.text_type(x) for x in self.x))
+
+        def __bytes__(self):
+            return b'|'.join(bytes(x) for x in self.x)
+        if six.PY2:
+            __str__ = __bytes__
+
+        def __unicode__(self):
+            if astropy.UNICODE_OUTPUT():
+                return '‖'.join(six.text_type(x) for x in self.x)
+            else:
+                return self.__bytes__().decode('ascii')
+        if six.PY3:
+            __str__ = __unicode__
+
+Additionally, there is a test helper,
+`astropy.test.helper.assert_follows_unicode_guidelines` to ensure that a
+class follows the Unicode guidelines outlined above.  The following
+example test will test that our example class above is compliant::
+
+    def test_unicode_guidelines():
+        from astropy.test.helper import assert_follows_unicode_guidelines
+        assert_follows_unicode_guidelines(FloatList(b'5|4|3|2'), roundtrip=True)
+
 Including C Code
 ----------------
 
@@ -212,6 +330,175 @@ Including C Code
   for building the extension via the mechanisms described in
   :ref:`building-c-or-cython-extensions`.
 
+.. _dev-portable:
+
+Writing portable code for Python 2 and 3
+----------------------------------------
+
+As of astropy 0.3, the `six <http://pythonhosted.org/six/>`__ library
+is included to allow supporting Python 2 and 3 from a single code
+base.  The use of the ``2to3`` tool is being phased out in favor of
+using ``six``.
+
+To start using ``six`` instead of ``2to3`` in a package, you first
+need to put the following in the package's ``setup_package.py`` file::
+
+    def requires_2to3():
+        return False
+
+This section is mainly about moving existing code that works with
+``2to3`` to using ``six``.  It is not a complete guide to Python 2 and
+3 compatibility.
+
+Welcome to the ``__future__``
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The top of every `.py` file should include the following::
+
+    from __future__ import (absolute_import, division, print_function,
+                            unicode_literals)
+
+This will make the Python 2 interpreter behave as close to Python 3 as
+possible.
+
+All files should also import `six`, whether they are using it or not,
+just to make moving code between modules easier, as `six` gets used *a
+lot*::
+
+    from ..extern import six
+
+(where ``extern`` refers to `astropy.extern`).  Do not import `six`
+from the top-level: only import the copy of `six` included with
+astropy.
+
+Finding places to use six
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Unfortunately, the only way to be certain that code works on both
+Python 2 and 3 is to make sure it is covered by unit tests.
+
+However, the `2to3` commandline tool can also be used to locate places
+that require special handling with `six`.  Starting from Python 2
+code, or code that is known to work on both Python 2 and 3 by
+processing it with the `2to3` tool (which is most of the existing code
+in astropy), simply run `2to3` on the file to display the changes it
+would make in diff format.  This diff can be used to highlight places
+that need to be updated to use `six`.
+
+For example, most things that have been renamed between Python 2 and 3
+are in the `six.moves` namespace, so given this Python 2 code::
+
+    import cPickle
+
+it can be replaced with::
+
+    from ..extern.six.moves import cPickle
+
+.. note::
+
+    The `modernize <https://pypi.python.org/pypi/modernize>`_ tool
+    aims to convert Python 2 code to portable code that uses `six`,
+    but at the time of this writing, it is not feature complete and
+    misses many important transformations.
+
+The `six <http://pythonhosted.org/six/>`__ documentation serves as a
+good reference for the sorts of things that need to be updated.
+
+Not so fast on that Unicode thing
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+By importing ``unicode_literals`` from ``__future__``, many things
+that were once byte strings on Python 2 will now by unicode strings.
+This is mostly a good thing, as the behavior of the code will be more
+consistent between Python 2 and 3.  However, certain third-party
+libraries still assume certain values will be byte strings on
+Python 2.
+
+For example, when specifying Numpy structured dtypes, all strings must
+be byte strings on Python 2 and unicode strings on Python 3.  The
+easiest way to handle this is to force cast them using `str()`, for
+example::
+
+   x = np.array([1.0, 2.0, 3.0], dtype=[(str('name'), '>f8')])
+
+The same is true of structure specifiers in the built-in `struct`
+module on Python 2.6.
+
+`pytest.mark.skipif` also requires a "native" string, i.e.::
+
+    @pytest.mark.skipif(str('CONDITIONAL'))
+
+Iteration
+^^^^^^^^^
+
+The behavior of the methods for iterating over the items, values and
+keys of a dictionary has changed in Python 3.  Additionally, other
+built-in functions such as `zip`, `range` and `map` have changed to
+return iterators rather than temporary lists.
+
+In many cases, the performance implications of iterating vs. creating
+a temporary list won't matter, so it's tempting to use the form that
+is simplest to read.  However, that results in code that behaves
+differently on Python 2 and 3, leading to subtle bugs that may not be
+detected by the regression tests.  Therefore, unless the loop in
+question is provably simple and doesn't call into other code, the
+`six` versions that ensure the same behavior on both Python 2 and 3
+should be used.  The following table shows the mapping of equivalent
+semantics between Python 2, 3 and six for `dict.items()`:
+
+============================== ============================== ==============================
+Python 2                       Python 3                       six
+============================== ============================== ==============================
+``d.items()``                  ``list(d.items())``            ``list(six.iteritems(d))``
+``d.iteritems()``              ``d.items()``                  ``six.iteritems(d)``
+============================== ============================== ==============================
+
+The above table holds true, analogously, for ``values``, ``keys``,
+``zip``, ``range`` and ``map``.
+
+Issues with ``\u`` escapes
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+When `from __future__ import unicode_literals` is used, all string
+literals (not preceded with a `b`) will become unicode literals.
+
+Normally, one would use "raw" string literals to encode strings that
+contain a lot of slashes that we don't want Python to interpret as
+special characters.  Unfortunately, on Python 2, there is no way to
+represent `\u` in a raw unicode string literal, since it will always
+be interpreted as the start of a unicode character escape, such as
+`\u20af`.  The only solution is to use a regular (non-raw) string
+literal and repeat all slashes, e.g. ``"\\usepackage{foo}"``.
+
+The following shows the problem on Python 2::
+
+    >>> ur'\u'
+      File "<stdin>", line 1
+    SyntaxError: (unicode error) 'rawunicodeescape' codec can't decode bytes in
+    position 0-1: truncated \uXXXX
+    >>> ur'\\u'
+    u'\\\\u'
+    >>> u'\u'
+      File "<stdin>", line 1
+    SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in
+    position 0-1: truncated \uXXXX escape
+    >>> u'\\u'
+    u'\\u'
+
+This bug has been fixed in Python 3, however, we can't take advantage
+of that and still support Python 2::
+
+    >>> r'\u'
+    '\\u'
+    >>> r'\\u'
+    '\\\\u'
+    >>> '\u'
+      File "<stdin>", line 1
+    SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in
+    position 0-1: truncated \uXXXX escape
+    >>> '\\u'
+    '\\u'
+
 Requirements Specific to Affiliated Packages
 --------------------------------------------
 
@@ -255,19 +542,19 @@ like this::
 You should always use attribute syntax like this::
 
     >>> s.color = 0.4
-    >>> print s.color
+    >>> print(s.color)
     0.4
 
 Rather than like this::
 
     >>> s.set_color(0.4)  #Bad form!
-    >>> print s.get_color()  #Bad form!
+    >>> print(s.get_color())  #Bad form!
     0.4
 
 Using python properties, attribute syntax can still do anything possible with
 a get/set method. For lengthy or complex calculations, however, use a method::
 
-    >>> print s.compute_color(5800, age=5e9)
+    >>> print(s.compute_color(5800, age=5e9))
     0.4
 
 .. _super-vs-direct-example:
@@ -283,23 +570,23 @@ multiple inheritance case::
 
     class A(object):
         def method(self):
-            print 'Doing A'
+            print('Doing A')
 
 
     class B(A):
         def method(self):
-            print 'Doing B'
+            print('Doing B')
             A.method(self)
 
 
     class C(A):
         def method(self):
-            print 'Doing C'
+            print('Doing C')
             A.method(self)
 
     class D(C, B):
         def method(self):
-            print 'Doing D'
+            print('Doing D')
             C.method(self)
             B.method(self)
 
@@ -340,22 +627,22 @@ class should be handed control in the next :func:`super` call::
 
     class A(object):
         def method(self):
-            print 'Doing A'
+            print('Doing A')
 
     class B(A):
         def method(self):
-            print 'Doing B'
+            print('Doing B')
             super(B, self).method()
 
 
     class C(A):
         def method(self):
-            print 'Doing C'
+            print('Doing C')
             super(C, self).method()
 
     class D(C, B):
         def method(self):
-            print 'Doing D'
+            print('Doing D')
             super(D, self).method()
 
 ::
@@ -411,7 +698,7 @@ might read::
 
     from numpy import array,linspace
 
-    __all__ = ('foo','AClass')
+    __all__ = ('foo', 'AClass')
 
     def foo(bar):
         #the function would be defined here
diff --git a/docs/development/docguide.rst b/docs/development/docguide.rst
index 66d1ed4..da13186 100644
--- a/docs/development/docguide.rst
+++ b/docs/development/docguide.rst
@@ -1,8 +1,18 @@
 .. _documentation-guidelines:
 
-========================
-Documentation Guidelines
-========================
+=====================
+Writing Documentation
+=====================
+
+High-quality, consistent documentation for astronomy code is one of
+the major goals of the Astropy project.  Hence, we describe our
+documentation procedures and rules here.  For the astropy core
+project we try to keep to these as closely as possible, while the
+standards for affiliated packages are somewhat looser.
+(These procedures and guidelines are still recommended for affiliated
+packages, as they encourage useful documentation, a characteristic
+often lacking in professional astronomy software.)
+
 
 Building the Documentation from source
 --------------------------------------
@@ -10,8 +20,9 @@ Building the Documentation from source
 For information about building the documentation from source, see
 the :ref:`builddocs` section in the installation instructions.
 
-Astropy Documentation Rules and Recommendations
------------------------------------------------
+Astropy Documentation Rules and Guidelines
+------------------------------------------
+
 
 This section describes the standards for documentation format affiliated
 packages that must follow for consideration of integration into the core
@@ -25,8 +36,7 @@ module, as well as the standard Astropy docstring format.
 * Docstrings must be provided for all public classes, methods, and functions.
 
 * Docstrings will be incorporated into the documentation using a version of
-  numpydoc included with Astropy, and should follow the NumPy_/SciPy_
-  docstring standards, included below.
+  numpydoc included with Astropy, and should follow the :doc:`docrules`.
 
 * Examples and/or tutorials are strongly encouraged for typical use-cases of a
   particular module or class.
@@ -37,549 +47,12 @@ module, as well as the standard Astropy docstring format.
 * Configuration options using the :mod:`astropy.config` mechanisms must be
   explicitly mentioned in the documentation.
 
-NumPy/SciPy Docstring Rules
----------------------------
-
-The original source for these docstring standards is the NumPy_ project, and
-the associated numpydoc_ tools. The most up-to-date version of these standards
-can be found at `numpy's github site
-<http://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt>`_. The
-guidelines below have been adapted to the Astropy pacakge.
-
-.. _NumPy: http://numpy.scipy.org/
-.. _numpydoc: http://pypi.python.org/pypi/numpydoc/0.3.1
-.. _Matplotlib: http://matplotlib.sourceforge.net/
-
-Overview
-^^^^^^^^
-
-In general, we follow the standard Python style conventions as described here:
-
- * `Style Guide for C Code <http://www.python.org/peps/pep-0007.html>`_
- * `Style Guide for Python Code <http://www.python.org/peps/pep-0008.html>`_
- * `Docstring Conventions <http://www.python.org/peps/pep-0257.html>`_
-
-Additional PEPs of interest regarding documentation of code:
-
- * `Docstring Processing Framework <http://www.python.org/peps/pep-0256.html>`_
- * `Docutils Design Specification <http://www.python.org/peps/pep-0258.html>`_
-
-Use a code checker:
-
- * `pylint <http://www.logilab.org/857>`_
- * `pyflakes <http://pypi.python.org/pypi/pyflakes>`_
- * `pep8.py <https://github.com/jcrocholl/pep8>`_
-
-The following import conventions are used throughout the Astropy source
-and documentation::
-
-   import numpy as np
-   import matplotlib as mpl
-   import matplotlib.pyplot as plt
-
-Do not abbreviate ``scipy``. There is no motivating use case to abbreviate
-it in the real world, so we avoid it in the documentation to avoid
-confusion.
-
-It is not necessary to do ``import numpy as np`` at the beginning of
-an example.  However, some sub-modules, such as ``fft``, are not
-imported by default, and you have to include them explicitly::
-
-  import numpy.fft
-
-after which you may use it::
-
-  np.fft.fft2(...)
-
-Docstring Standard
-^^^^^^^^^^^^^^^^^^
-
-A documentation string (docstring) is a string that describes a module,
-function, class, or method definition. The docstring is a special attribute
-of the object (``object.__doc__``) and, for consistency, is surrounded by
-triple double quotes, i.e.::
-
-   """This is the form of a docstring.
-
-   It can be spread over several lines.
-
-   """
-
-NumPy_ and SciPy_ have defined a common convention for docstrings that
-provides for consistency, while also allowing our toolchain to produce
-well-formatted reference guides. This format should be used for Astropy
-docstrings.
-
-This docstring standard uses `re-structured text (reST)
-<http://docutils.sourceforge.net/rst.html>`_ syntax and is rendered
-using Sphinx_ (a pre-processor that understands the particular
-documentation style we are using). While a rich set of markup is
-available, we limit ourselves to a very basic subset, in order to
-provide docstrings that are easy to read on text-only terminals.
-
-A guiding principle is that human readers of the text are given
-precedence over contorting docstrings so our tools produce nice output.
-Rather than sacrificing the readability of the docstrings, we have
-written pre-processors to assist Sphinx_ in its task.
-
-The length of docstring lines should be kept to 75 characters to
-facilitate reading the docstrings in text terminals.
-
-Sections
-^^^^^^^^
-
-The sections of the docstring are:
-
-1. **Short summary**
-
-   A one-line summary that does not use variable names or the function
-   name, e.g.
-
-   ::
-
-     def add(a, b):
-        """The sum of two numbers.
-
-        """
-
-   The function signature is normally found by introspection and
-   displayed by the help function. For some functions (notably those
-   written in C) the signature is not available, so we have to specify
-   it as the first line of the docstring::
-
-     """
-     add(a, b)
-
-     The sum of two numbers.
-
-     """
-
-2. **Deprecation warning**
-
-   A section (use if applicable) to warn users that the object is deprecated.
-   Section contents should include:
-
-   * In what Astropy version the object was deprecated, and when it will
-     be removed.
-
-   * Reason for deprecation if this is useful information (e.g., object
-     is superseded, duplicates functionality found elsewhere, etc.).
-
-   * New recommended way of obtaining the same functionality.
-
-   This section should use the note Sphinx directive instead of an
-   underlined section header.
-
-   ::
-
-     .. note:: Deprecated in Astropy 1.2
-               `ndobj_old` will be removed in Astropy 2.0, it is replaced by
-               `ndobj_new` because the latter works also with array subclasses.
-
-3. **Extended summary**
-
-   A few sentences giving an extended description. This section should be used
-   to clarify *functionality*, not to discuss implementation detail or
-   background theory, which should rather be explored in the **notes** section
-   below. You may refer to the parameters and the function name, but parameter
-   descriptions still belong in the **parameters** section.
-
-4. **Parameters**
-
-   Description of the function arguments, keywords and their respective types.
-
-   ::
-
-     Parameters
-     ----------
-     x : type
-        Description of parameter `x`.
-
-   Enclose variables in single backticks.
-
-   For the parameter types, be as precise as possible. Below are a few
-   examples of parameters and their types.
-
-   ::
-
-     Parameters
-     ----------
-     filename : str
-     copy : bool
-     dtype : data-type
-     iterable : iterable object
-     shape : int or tuple of int
-     files : list of str
-
-   If it is not necessary to specify a keyword argument, use ``optional``::
-
-     x : int, optional
-
-   Optional keyword parameters have default values, which are displayed as
-   part of the function signature. They can also be detailed in the
-   description::
-
-     Description of parameter `x` (the default is -1, which implies summation
-     over all axes).
-
-   When a parameter can only assume one of a fixed set of values, those values
-   can be listed in braces::
-
-     order : {'C', 'F', 'A'}
-         Description of `order`.
-
-   When two or more input parameters have exactly the same type, shape and
-   description, they can be combined::
-
-     x1, x2 : array_like
-         Input arrays, description of `x1`, `x2`.
-
-5. **Returns**
-
-   Explanation of the returned values and their types, of the same format as
-   **parameters**.
-
-6. **Other parameters**
-
-   An optional section used to describe infrequently used parameters. It
-   should only be used if a function has a large number of keyword parameters,
-   to prevent cluttering the **parameters** section.
-
-7. **Raises**
-
-   An optional section detailing which errors get raised and under what
-   conditions::
-
-     Raises
-     ------
-     InvalidWCSException
-         If the WCS information is invalid.
-
-   This section should be used judiciously, i.e only for errors that are
-   non-obvious or have a large chance of getting raised.
-
-8. **See Also**
-
-   An optional section used to refer to related code. This section can be very
-   useful, but should be used judiciously. The goal is to direct users to
-   other functions they may not be aware of, or have easy means of discovering
-   (by looking at the module docstring, for example). Routines whose
-   docstrings further explain parameters used by this function are good
-   candidates.
-
-   As an example, for a hypothetical function ``astropy.wcs.world2pix``
-   converting sky to pixel coordinates, we would have::
-
-     See Also
-     --------
-     pix2world : Convert pixel to sky coordinates
-
-   When referring to functions in the same sub-module, no prefix is needed,
-   and the tree is searched upwards for a match.
-
-   Prefix functions from other sub-modules appropriately. E.g., whilst
-   documenting a hypothetical ``astropy.vo`` module, refer to a function in
-   ``table`` by
-
-   ::
-
-     table.read : Read in a VO table
-
-   When referring to an entirely different module::
-
-     astropy.coords : Coordinate handling routines
-
-   Functions may be listed without descriptions, and this is preferable if the
-   functionality is clear from the function name::
-
-     See Also
-     --------
-     func_a : Function a with its description.
-     func_b, func_c_, func_d
-     func_e
-
-9. **Notes**
-
-   An optional section that provides additional information about the code,
-   possibly including a discussion of the algorithm. This section may include
-   mathematical equations, written in `LaTeX <http://www.latex-project.org/>`_
-   format::
-
-     The FFT is a fast implementation of the discrete Fourier transform:
-
-     .. math:: X(e^{j\omega } ) = x(n)e^{ - j\omega n}
-
-   Equations can also be typeset underneath the math directive::
-
-     The discrete-time Fourier time-convolution property states that
-
-     .. math::
-
-          x(n) * y(n) \Leftrightarrow X(e^{j\omega } )Y(e^{j\omega } )\\
-          another equation here
 
-   Math can furthermore be used inline, i.e.
+The details of the docstring format are described on a separate page:
 
-   ::
+.. toctree::
+    docrules
 
-     The value of :math:`\omega` is larger than 5.
-
-   Variable names are displayed in typewriter font, obtained by using
-   ``\mathtt{var}``::
-
-     We square the input parameter `alpha` to obtain
-     :math:`\mathtt{alpha}^2`.
-
-   Note that LaTeX is not particularly easy to read, so use equations
-   sparingly.
-
-   Images are allowed, but should not be central to the explanation; users
-   viewing the docstring as text must be able to comprehend its meaning
-   without resorting to an image viewer. These additional illustrations are
-   included using::
-
-     .. image:: filename
-
-   where filename is a path relative to the reference guide source directory.
-
-10. **References**
-
-   References cited in the **notes** section may be listed here,
-   e.g. if you cited the article below using the text ``[1]_``,
-   include it as in the list as follows::
-
-     .. [1] O. McNoleg, "The integration of GIS, remote sensing,
-        expert systems and adaptive co-kriging for environmental habitat
-        modelling of the Highland Haggis using object-oriented, fuzzy-logic
-        and neural-network techniques," Computers & Geosciences, vol. 22,
-        pp. 585-588, 1996.
-
-   which renders as
-
-   .. [1] O. McNoleg, "The integration of GIS, remote sensing,
-      expert systems and adaptive co-kriging for environmental habitat
-      modelling of the Highland Haggis using object-oriented, fuzzy-logic
-      and neural-network techniques," Computers & Geosciences, vol. 22,
-      pp. 585-588, 1996.
-
-   Referencing sources of a temporary nature, like web pages, is discouraged.
-   References are meant to augment the docstring, but should not be required
-   to understand it. References are numbered, starting from one, in the order
-   in which they are cited.
-
-11. **Examples**
-
-   An optional section for examples, using the `doctest
-   <http://docs.python.org/library/doctest.html>`_ format. This section
-   is meant to illustrate usage, not to provide a testing framework -- for
-   that, use the ``tests/`` directory. While optional, this section is very
-   strongly encouraged.
-
-   When multiple examples are provided, they should be separated by blank
-   lines. Comments explaining the examples should have blank lines both above
-   and below them::
-
-     >>> astropy.wcs.world2pix(233.2, -12.3)
-     (134.5, 233.1)
-
-     Comment explaining the second example
-
-     >>> astropy.coords.fk5_to_gal("00:42:44.33 +41:16:07.5")
-     (121.1743, -21.5733)
-
-   For tests with a result that is random or platform-dependent, mark the
-   output as such::
-
-     >>> astropy.coords.randomize_position(244.9, 44.2, radius=0.1)
-     (244.855, 44.13)  # random
-
-   It is not necessary to use the doctest markup ``<BLANKLINE>`` to indicate
-   empty lines in the output. The examples may assume that ``import numpy as
-   np`` is executed before the example code.
-
-.. We need to consider whether to add a doctest= option to astropy.test to
-.. enable automated testing of the examples as in Numpy.
-
-Documenting classes
-^^^^^^^^^^^^^^^^^^^
-
-Class docstrings
-""""""""""""""""
-
-Use the same sections as outlined above (all except ``Returns`` are
-applicable). The constructor (``__init__``) should also be documented here,
-the ``Parameters`` section of the docstring details the constructors
-parameters.
-
-An ``Attributes`` section, located below the ``Parameters`` section, may be
-used to describe class variables::
-
-  Attributes
-  ----------
-  x : float
-      The X coordinate.
-  y : float
-      The Y coordinate.
-
-Attributes that are properties and have their own docstrings can be simply
-listed by name::
-
-  Attributes
-  ----------
-  real
-  imag
-  x : float
-      The X coordinate
-  y : float
-      The Y coordinate
-
-In general, it is not necessary to list class methods. Those that are not part
-of the public API have names that start with an underscore. In some cases,
-however, a class may have a great many methods, of which only a few are
-relevant (e.g., subclasses of ndarray). Then, it becomes useful to have an
-additional ``Methods`` section::
-
-  class Table(ndarray):
-      """
-      A class to represent tables of data
-
-      ...
-
-      Attributes
-      ----------
-      columns : list
-          List of columns
-
-      Methods
-      -------
-      read(filename)
-          Read a table from a file
-      sort(column, order='ascending')
-          Sort by `column`
-      """
-
-If it is necessary to explain a private method (use with care!), it can be
-referred to in the **extended summary** or the **notes**. Do not list private
-methods in the Methods section.
-
-Do not list ``self`` as the first parameter of a method.
-
-Method docstrings
-"""""""""""""""""
-
-Document these as you would any other function. Do not include ``self`` in
-the list of parameters. If a method has an equivalent function, the function
-docstring should contain the detailed documentation, and the method
-docstring should refer to it. Only put brief ``Summary`` and ``See Also``
-sections in the method docstring.
-
-Documenting class instances
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Instances of classes that are part of the Astropy API may require some care.
-To give these instances a useful docstring, we do the following:
-
-* Single instance: If only a single instance of a class is exposed, document
-  the class. Examples can use the instance name.
-
-* Multiple instances: If multiple instances are exposed, docstrings for each
-  instance are written and assigned to the instances' ``__doc__`` attributes
-  at run time. The class is documented as usual, and the exposed instances can
-  be mentioned in the Notes and See Also sections.
-
-Documenting constants
-^^^^^^^^^^^^^^^^^^^^^
-
-Use the same sections as outlined for functions where applicable::
-
-   1. summary
-   2. extended summary (optional)
-   3. see also (optional)
-   4. references (optional)
-   5. examples (optional)
-
-Docstrings for constants will not be visible in text terminals
-(constants are of immutable type, so docstrings can not be assigned
-to them like for for class instances), but will appear in the
-documentation built with Sphinx.
-
-Documenting modules
-^^^^^^^^^^^^^^^^^^^
-
-Each module should have a docstring with at least a summary line. Other
-sections are optional, and should be used in the same order as for documenting
-functions when they are appropriate::
-
-    1. summary
-    2. extended summary
-    3. routine listings
-    4. see also
-    5. notes
-    6. references
-    7. examples
-
-Routine listings are encouraged, especially for large modules, for which it is
-hard to get a good overview of all functionality provided by looking at the
-source file(s) or the ``__all__`` dict.
-
-Note that license and author info, while often included in source files, do not
-belong in docstrings.
-
-Other points to keep in mind
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-* Notes and Warnings : If there are points in the docstring that deserve
-  special emphasis, the reST directives for a note or warning can be used
-  in the vicinity of the context of the warning (inside a section). Syntax:
-
-  ::
-
-    .. warning:: Warning text.
-
-    .. note:: Note text.
-
-  Use these sparingly, as they do not look very good in text terminals
-  and are not often necessary. One situation in which a warning can
-  be useful is for marking a known bug that is not yet fixed.
-
-* Questions and Answers : For general questions on how to write docstrings
-  that are not answered in this document, refer to
-  `<http://docs.scipy.org/numpy/Questions+Answers/>`_.
-
-* ``array_like`` : For functions that take arguments which can have not only
-  a type `ndarray`, but also types that can be converted to an ndarray
-  (i.e. scalar types, sequence types), those arguments can be documented
-  with type `array_like`.
-
-Common reST concepts
-^^^^^^^^^^^^^^^^^^^^
-
-For paragraphs, indentation is significant and indicates indentation in the
-output. New paragraphs are marked with a blank line.
-
-Use *italics*, **bold**, and ``courier`` if needed in any explanations (but
-not for variable names and doctest code or multi-line code). Variable, module
-and class names should be written between single back-ticks (```astropy```).
-
-A more extensive example of reST markup can be found in `this example document
-<http://docutils.sourceforge.net/docs/user/rst/demo.txt>`_; the `quick
-reference <http://docutils.sourceforge.net/docs/user/rst/quickref.html>`_ is
-useful while editing.
-
-Line spacing and indentation are significant and should be carefully followed.
-
-Conclusion
-^^^^^^^^^^
-
-`An example <http://github.com/numpy/numpy/blob/master/doc/example.py>`_ of the
-format shown here is available.  Refer to `How to Build API/Reference
-Documentation
-<https://github.com/numpy/numpy/blob/master/doc/HOWTO_BUILD_DOCS.rst.txt>`_
-on how to use Sphinx_ to build the manual.
-
-.. _SciPy: http://www.scipy.org
-.. _numpy-discussion list: http://www.scipy.org/Mailing_Lists
-.. _Sphinx: http://sphinx.pocoo.org
 
 
 Sphinx Documentation Themes
@@ -615,3 +88,56 @@ Additional custom themes can be included in the astropy source tree by
 placing them in the directory `astropy/astropy/sphinx/themes`, and
 editing `astropy/astropy/sphinx/setup_package.py` to include the theme
 (so that it is installed).
+
+
+
+Sphinx extensions
+-----------------
+
+Astropy includes a number of sphinx extensions that are used in astropy
+and its affiliated packages to facilitate easily documenting code in
+a homogeneous and readable way.
+
+automodapi Extension
+^^^^^^^^^^^^^^^^^^^^
+
+.. automodule:: astropy.sphinx.ext.automodapi
+
+
+automodsumm Extension
+^^^^^^^^^^^^^^^^^^^^^
+
+.. automodule:: astropy.sphinx.ext.automodsumm
+
+edit_on_github Extension
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. automodule:: astropy.sphinx.ext.edit_on_github
+
+
+numpydoc Extension
+^^^^^^^^^^^^^^^^^^
+This extension (and some related extensions) are a port of the
+`numpydoc <http://pypi.python.org/pypi/numpydoc/0.3.1>`_ extension
+written by the NumPy_ and SciPy_, projects, with some tweaks for
+Astropy.  Its main purposes is to reprocess docstrings from code into
+a form sphinx understands. Generally, there's no need to interact with
+it directly, as docstrings following the doc:`docrules` will be
+processed automatically.
+
+
+Other Extensions
+^^^^^^^^^^^^^^^^
+`astropy.spinx.ext` includes a few other extensions that are primarily
+helpers for the other extensions or workarounds for undesired behavior.
+Their APIs are not included here because we may change them in the
+future.
+
+
+
+
+.. _NumPy: http://numpy.scipy.org/
+.. _numpydoc: http://pypi.python.org/pypi/numpydoc/0.3.1
+.. _Matplotlib: http://matplotlib.sourceforge.net/
+.. _SciPy: http://www.scipy.org
+.. _Sphinx: http://sphinx.pocoo.org
diff --git a/docs/development/docguide.rst b/docs/development/docrules.rst
similarity index 84%
copy from docs/development/docguide.rst
copy to docs/development/docrules.rst
index 66d1ed4..d88814b 100644
--- a/docs/development/docguide.rst
+++ b/docs/development/docrules.rst
@@ -1,57 +1,16 @@
-.. _documentation-guidelines:
-
-========================
-Documentation Guidelines
-========================
-
-Building the Documentation from source
---------------------------------------
-
-For information about building the documentation from source, see
-the :ref:`builddocs` section in the installation instructions.
-
-Astropy Documentation Rules and Recommendations
------------------------------------------------
-
-This section describes the standards for documentation format affiliated
-packages that must follow for consideration of integration into the core
-module, as well as the standard Astropy docstring format.
-
-* All documentation should be written use the Sphinx documentation tool.
-
-* The template package will provide a recommended general structure for
-  documentation.
-
-* Docstrings must be provided for all public classes, methods, and functions.
-
-* Docstrings will be incorporated into the documentation using a version of
-  numpydoc included with Astropy, and should follow the NumPy_/SciPy_
-  docstring standards, included below.
-
-* Examples and/or tutorials are strongly encouraged for typical use-cases of a
-  particular module or class.
-
-* Any external package dependencies aside from NumPy_, SciPy_, or Matplotlib_
-  must be explicitly mentioned in the documentation.
-
-* Configuration options using the :mod:`astropy.config` mechanisms must be
-  explicitly mentioned in the documentation.
-
-NumPy/SciPy Docstring Rules
----------------------------
+=======================
+Astropy Docstring Rules
+=======================
 
 The original source for these docstring standards is the NumPy_ project, and
 the associated numpydoc_ tools. The most up-to-date version of these standards
 can be found at `numpy's github site
 <http://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt>`_. The
-guidelines below have been adapted to the Astropy pacakge.
+guidelines below have been adapted to the Astropy package.
 
-.. _NumPy: http://numpy.scipy.org/
-.. _numpydoc: http://pypi.python.org/pypi/numpydoc/0.3.1
-.. _Matplotlib: http://matplotlib.sourceforge.net/
 
 Overview
-^^^^^^^^
+--------
 
 In general, we follow the standard Python style conventions as described here:
 
@@ -92,7 +51,7 @@ after which you may use it::
   np.fft.fft2(...)
 
 Docstring Standard
-^^^^^^^^^^^^^^^^^^
+------------------
 
 A documentation string (docstring) is a string that describes a module,
 function, class, or method definition. The docstring is a special attribute
@@ -126,7 +85,7 @@ The length of docstring lines should be kept to 75 characters to
 facilitate reading the docstrings in text terminals.
 
 Sections
-^^^^^^^^
+--------
 
 The sections of the docstring are:
 
@@ -401,10 +360,10 @@ The sections of the docstring are:
 .. enable automated testing of the examples as in Numpy.
 
 Documenting classes
-^^^^^^^^^^^^^^^^^^^
+-------------------
 
 Class docstrings
-""""""""""""""""
+^^^^^^^^^^^^^^^^
 
 Use the same sections as outlined above (all except ``Returns`` are
 applicable). The constructor (``__init__``) should also be documented here,
@@ -465,7 +424,7 @@ methods in the Methods section.
 Do not list ``self`` as the first parameter of a method.
 
 Method docstrings
-"""""""""""""""""
+^^^^^^^^^^^^^^^^^
 
 Document these as you would any other function. Do not include ``self`` in
 the list of parameters. If a method has an equivalent function, the function
@@ -474,7 +433,7 @@ docstring should refer to it. Only put brief ``Summary`` and ``See Also``
 sections in the method docstring.
 
 Documenting class instances
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
+---------------------------
 
 Instances of classes that are part of the Astropy API may require some care.
 To give these instances a useful docstring, we do the following:
@@ -488,7 +447,7 @@ To give these instances a useful docstring, we do the following:
   be mentioned in the Notes and See Also sections.
 
 Documenting constants
-^^^^^^^^^^^^^^^^^^^^^
+---------------------
 
 Use the same sections as outlined for functions where applicable::
 
@@ -504,7 +463,7 @@ to them like for for class instances), but will appear in the
 documentation built with Sphinx.
 
 Documenting modules
-^^^^^^^^^^^^^^^^^^^
+-------------------
 
 Each module should have a docstring with at least a summary line. Other
 sections are optional, and should be used in the same order as for documenting
@@ -526,7 +485,7 @@ Note that license and author info, while often included in source files, do not
 belong in docstrings.
 
 Other points to keep in mind
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+----------------------------
 
 * Notes and Warnings : If there are points in the docstring that deserve
   special emphasis, the reST directives for a note or warning can be used
@@ -552,7 +511,7 @@ Other points to keep in mind
   with type `array_like`.
 
 Common reST concepts
-^^^^^^^^^^^^^^^^^^^^
+--------------------
 
 For paragraphs, indentation is significant and indicates indentation in the
 output. New paragraphs are marked with a blank line.
@@ -569,7 +528,7 @@ useful while editing.
 Line spacing and indentation are significant and should be carefully followed.
 
 Conclusion
-^^^^^^^^^^
+----------
 
 `An example <http://github.com/numpy/numpy/blob/master/doc/example.py>`_ of the
 format shown here is available.  Refer to `How to Build API/Reference
@@ -577,41 +536,9 @@ Documentation
 <https://github.com/numpy/numpy/blob/master/doc/HOWTO_BUILD_DOCS.rst.txt>`_
 on how to use Sphinx_ to build the manual.
 
-.. _SciPy: http://www.scipy.org
-.. _numpy-discussion list: http://www.scipy.org/Mailing_Lists
-.. _Sphinx: http://sphinx.pocoo.org
-
-
-Sphinx Documentation Themes
----------------------------
-
-A custom Sphinx HTML theme is included in the astropy source tree and
-installed along with astropy. This allows the theme to be used by
-default from both astropy and affiliated packages. This is done by
-setting the theme in the global astropy sphinx configuration, which is
-imported in the sphinx configuration of both `astropy` and affiliated
-packages.
-
-Using a different theme for `astropy` or affiliated packages
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-A different theme can be used by overriding a few sphinx
-configuration variables set in the global configuration.
-
-* To use a different theme, set `html_theme` to the name of a desired
-  builtin Sphinx theme or a custom theme in
-  `package-name/docs/conf.py` (where `package-name` is "astropy" or
-  the name of the affiliated package).
-
-* To use a custom theme, additionally: place the theme in
-  `package-name/docs/_themes` and add `'_themes'` to the
-  `html_theme_path` variable. See the Sphinx_ documentation for more
-  details on theming.
-
-Adding more custom themes to astropy
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Additional custom themes can be included in the astropy source tree by
-placing them in the directory `astropy/astropy/sphinx/themes`, and
-editing `astropy/astropy/sphinx/setup_package.py` to include the theme
-(so that it is installed).
+.. _NumPy: http://numpy.scipy.org/
+.. _numpydoc: http://pypi.python.org/pypi/numpydoc/0.3.1
+.. _Matplotlib: http://matplotlib.sourceforge.net/
+.. _SciPy: http://www.scipy.org
+.. _Sphinx: http://sphinx.pocoo.org
\ No newline at end of file
diff --git a/docs/development/building_packaging.rst b/docs/development/releasing.rst
similarity index 69%
rename from docs/development/building_packaging.rst
rename to docs/development/releasing.rst
index d0d37c4..fc870a7 100644
--- a/docs/development/building_packaging.rst
+++ b/docs/development/releasing.rst
@@ -1,279 +1,218 @@
-============================================
-Building, Cython/C Extensions, and Releasing
-============================================
-
-The build process currently uses the
-`Distribute <http://packages.python.org/distribute/>`_ package to build and
-install the astropy core (and any affiliated packages that use the template).
-The user doesn't necessarily need to have `distribute` installed, as it will
-automatically bootstrap itself using the ``distribute_setup.py`` file in the
-source distribution if it isn't installed for the user.
-
-Customizing setup/build for subpackages
----------------------------------------
-
-As is typical, there is a single ``setup.py`` file that is used for the whole
-`astropy` package.  To customize setup parameters for a given sub-package, a
-``setup_package.py`` file can be defined inside a package, and if it is present,
-the setup process will look for the following functions to customize the build
-process:
-
-* :func:`get_package_data`
-    This function, if defined, should return a dictionary mapping the name of
-    the subpackage(s) that need package data to a list of data file paths
-    (possibly including wildcards) relative to the path of the package's source
-    code.  e.g. if the source distribution has a needed data file
-    ``astropy/wcs/tests/data/3d_cd.hdr``, this function should return
-    ``{'astropy.wcs.tests:'['data/3d_cd.hdr']}``. See the ``package_data``
-    option of the  :func:`distutils.core.setup` function.
-
-    It is recommended that all such data be in a directory named "data" inside
-    the package within which it is supposed to be used, and package data should
-    be accessed via the `astropy.utils.data.get_data_filename` and
-    `astropy.utils.data.get_data_fileobj` functions.
-
-* :func:`get_extensions`
-    This provides information for building C or Cython extensions. If defined,
-    it should return a list of `distutils.core.Extension` objects controlling
-    the Cython/C build process (see below for more detail).
-
-* :func:`get_legacy_alias`
-    This function allows for the creation of `shims` that allow a
-    subpackage to be imported under another name.  For example,
-    `astropy.io.fits` used to be available under the namespace
-    `pyfits`.  For backward compatibility, it is helpful to have it
-    still importable under the old name.  Under most circumstances,
-    this function should call `astropy.setup_helpers.add_legacy_alias`
-    to generate a legacy module and then return what it returns.
-
-* :func:`get_build_options`
-    This function allows a package to add extra build options.  It
-    should return a list of tuples, where each element has:
-
-    - *name*: The name of the option as it would appear on the
-      commandline or in the `setup.cfg` file.
-
-    - *doc*: A short doc string for the option, displayed by
-      `setup.py build --help`.
-
-    - *is_bool* (optional): When `True`, the option is a boolean
-      option and doesn't have an associated value.
-
-    Once an option has been added, its value can be looked up using
-    `astropy.setup_helpers.get_distutils_build_option`.
-
-* :func:`get_external_libraries`
-    This function declares that the package uses libraries that are
-    included in the astropy distribution that may also be distributed
-    elsewhere on the users system.  It should return a list of library
-    names.  For each library, a new build option is created,
-    `--use-system-X` which allows the user to request to use the
-    system's copy of the library.  The package would typically call
-    `astropy.setup_helpers.use_system_library` from its
-    `get_extensions` function to determine if the package should use
-    the system library or the included one.
-
-The `astropy.setup_helpers` modules includes a :func:`update_package_files`
-function which automatically searches the given source path for
-``setup_package.py`` modules and calls each of the above functions, if they
-exist.  This makes it easy for affiliated packages to use this machinery in
-their own ``setup.py``.
-
-.. _building-c-or-cython-extensions:
-
-C or Cython Extensions
-----------------------
-
-Astropy supports using C extensions for wrapping C libraries and Cython for
-speeding up computationally-intensive calculations. Both Cython and C extension
-building can be customized using the :func:`get_extensions` function of the
-``setup_package.py`` file. If defined, this function must return a list of
-`distutils.core.Extension` objects. The creation process is left to the
-subpackage designer, and can be customized however is relevant for the
-extensions in the subpackage.
-
-While C extensions must always be defined through the :func:`get_extensions`
-mechanism, Cython files (ending in ``.pyx``) are automatically located and
-loaded in separate extensions if they are not in :func:`get_extensions`. For
-Cython extensions located in this way, headers for numpy C functions are
-included in the build, but no other external headers are included. ``.pyx``
-files present in the extensions returned by :func:`get_extensions` are not
-included in the list of extensions automatically generated extensions. Note
-that this allows disabling a Cython file by providing an extension that
-includes the Cython file, but giving it the special `name` 'cython_skip'. Any
-extension with this package name will not be built by ``setup.py``.
+==================
+Release Procedures
+==================
 
-.. note::
+The current release procedure for Astropy involves a combination of an
+automated release script and some manual steps.  Future versions will automate
+more of the process, if not all.
 
-    If an :class:`~distutils.core.Extension` object is provided for Cython
-    source files using the :func:`get_extensions` mechanism, it is very
-    important that the ``.pyx`` files be given as the `source`, rather than the
-    ``.c`` files generated by Cython.
 
-Installing C header files
-^^^^^^^^^^^^^^^^^^^^^^^^^
+.. _release-procedure:
 
-If your C extension needs to be linked from other third-party C code,
-you probably want to install its header files along side the Python module.
+Release Procedure
+-----------------
 
-    1) Create an `include` directory inside of your package for
-       all of the header files.
+The automated portion of the Astropy release procedure uses `zest.releaser`_
+to create the tag and update the version.  zest.releaser is extendable through
+hook functions--Astropy already includes a couple hook functions to modify the
+default behavior, but future releases may be further automated through the
+implementation of additional hook functions.  In order to use the hooks,
+Astropy itself must be *installed* alongside zest.releaser.  It is recommended
+to create a `virtualenv`_ specifically for this purpose.
 
-    2) Use the :func:`get_package_data` hook in `setup_package.py` to
-       install those header files.  For example, the `astropy.wcs`
-       package has this::
+This may seem like a lot of steps, but most of them won't be necessary to
+repeat for each release.  The advantage of using an automated or semi-automated
+procedure is that ensures a consistent release process each time.
 
-           def get_package_data():
-               return {'astropy.wcs': ['include/*.h']}
+ 1. Ensure you have a GPG key pair available for when git needs to sign the
+    tag you create for the release.  See :ref:`key-signing-info` for more on
+    this.
 
-Preventing importing at build time
-----------------------------------
+ 2. Update the list of contributors in the ``creditsandlicense.rst`` file. The
+    easiest way to check this is do::
 
-In rare cases, some packages may need to be imported at build time.
-Unfortunately, anything that requires a C or Cython extension or
-processing through 2to3 will fail to import until the build phase has
-completed.  In those cases, the `_ASTROPY_SETUP_` variable can be used
-to determine if the package is being imported as part of the build and
-choose to not import problematic modules.  `_ASTROPY_SETUP_` is
-inserted into the builtins, and is `True` when inside of astropy's
-`setup.py` script, and `False` otherwise.
+        $ git shortlog -s
 
-For example, suppose there is a subpackage ``foo`` that needs to
-import a module called ``version.py`` at build time in order to set
-some version information, and also has a C extension, ``process``,
-that will not be available in the source tree.  In this case,
-``astropy/foo/__init__.py`` would probably want to check the value of
-`_ASTROPY_SETUP_` before importing the C extension::
+    And just add anyone from that list who isn't already credited.
 
-    if not _ASTROPY_SETUP_:
-        from . import process
+ 3. Install virtualenv if you don't already have it.  See the linked virtualenv
+    documentation for details.  Also, make sure that you have `cython`_
+    installed, as you will need it to generate the .c files needed for the
+    release.
 
-    from . import version
+ 4. Create and activate a virtualenv::
 
-Release
--------
+        $ virtualenv --system-site-packages --distribute astropy-release
+        $ source astropy-release/bin/activate
 
-The current release procedure for Astropy involves a combination of an
-automated release script and some manual steps.  Future versions will automate
-more of the process, if not all.
+ 5. Obtain a *clean* version of the Astropy repository.  That is, one
+    where you don't have any intermediate build files.  Either use a fresh
+    ``git clone`` or do ``git clean -dfx``.
 
-One of the main steps in performing a release is to create a tag in the git
-repository representing the exact state of the repository that represents the
-version being released.  For Astropy we will always use `signed tags`_: A
-signed tag is annotated with the name and e-mail address of the signer, a date
-and time, and a checksum of the code in the tag.  This information is then
-signed with a GPG private key and stored in the repository.
+ 6. Be sure you're the "master" branch or, for a bug fix release, on the
+    appropriate bug fix branch.  For example, if releasing version 0.2.2 make
+    sure to::
+    
+        $ git checkout v0.2.x
 
-Using a signed tag ensures the integrity of the contents of that tag for the
-future.  On a distributed VCS like git, anyone can create a tag of Astropy
-called "0.1" in their repository--and where it's easy to monkey around even
-after the tag has been created.  But only one "0.1" will be signed by one of
-the Astropy project coordinators and will be verifiable with their public key.
+ 7. Now install Astropy into the virtualenv::
 
-Creating a GPG Signing Key and a Signed Tag
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+        $ python setup.py install
 
-Git uses GPG to created signed tags, so in order to perform an Astropy release
-you will need GPG installed and will have to generated a signing key pair.
-Most \*NIX installations come with GPG installed by default (as it is used to
-verify the integrity of system packages).  If you don't have the ``gpg``
-command, consult the documentation for your system on how to install it.
+    This is necessary for two reasons.  First, the entry points for the
+    releaser scripts need to be available, and these are in the Astropy
+    package. Second, the build process will generate .c files from the
+    Cython .pyx files, and the .c files are necessary for the source
+    distribution.
 
-For OSX, GPG can be installed from MacPorts using ``sudo port install gnupg``.
+ 8. Install zest.releaser into the virtualenv; use ``--upgrade --force`` to
+    ensure that the latest version is installed in the virtualenv (if you're
+    running a csh variant make sure to run ``rehash`` afterwards too)::
 
-To create a new public/private key pair, simply run::
+        $ pip install zest.releaser --upgrade --force
 
-    $ gpg --gen-key
+ 9. Ensure that all changes to the code have been committed, then start the
+    release by running::
 
-This will take you through a few interactive steps. For the encryption
-and expiry settings, it should be safe to use the default settings (I use
-a key size of 4096 just because what does a couple extra kilobytes
-hurt?) Enter your full name, preferably including your middle name or
-middle initial, and an e-mail address that you expect to be active for a
-decent amount of time. Note that this name and e-mail address must match
-the info you provide as your git configuration, so you should either
-choose the same name/e-mail address when you create your key, or update
-your git configuration to match the key info. Finally, choose a very good
-pass phrase that won't be easily subject to brute force attacks.
+        $ fullrelease
 
+ 10. You will be asked to enter the version to be released.  Press enter to
+     accept the default (which will normally be correct) or enter a specific
+     version string.  A diff will then be shown of CHANGES.rst and setup.py
+     showing that a release date has been added to the changelog, and that the
+     version has been updated in setup.py.  Enter 'Y' when asked to commit
+     these changes.
 
-If you expect to use the same key for some time, it's good to make a backup of
-both your public and private key::
+ 11. You will then be shown the command that will be run to tag the release.
+     Enter 'Y' to confirm and run the command.
 
-    $ gpg --export --armor > public.key
-    $ gpg --export-secret-key --armor > private.key
+ 12. When asked "Check out the tag (for tweaks or pypi/distutils server
+     upload)" enter 'N': zest.releaser does not offer enough control yet over
+     how the register and upload are performed so we will do this manually
+     until the release scripts have been improved.
 
-Back up these files to a trusted location--preferably a write-once physical
-medium that can be stored safely somewhere.  One may also back up their keys to
-a trusted online encrypted storage, though some might not find that secure
-enough--it's up to you and what you're comfortable with.
+ 13. You will be asked to enter a new development version.  Normally the next
+     logical version will be selected--press enter to accept the default, or
+     enter a specific version string.  Do not add ".dev" to the version, as
+     this will be appended automatically (ignore the message that says ".dev0
+     will be appended"--it will actually be ".dev" without the 0).  For
+     example, if the just-released version was "0.1" the default next version
+     will be "0.2".  If we want the next version to be, say "0.1.1", or "1.0", 
+     then that must be entered manually.
 
-Add your public key to a keyserver
-""""""""""""""""""""""""""""""""""
-Now that you have a public key, you can publish this anywhere you like--in your
-e-mail, in a public code repository, etc.  You can also upload it to a
-dedicated public OpenPGP keyserver.  This will store the public key
-indefinitely (until you manually revoke it), and will be automatically synced
-with other keyservers around the world.  That makes it easy to retrieve your
-public key using the gpg command-line tool.
+ 14. You will be shown a diff of CHANGES.rst showing that a new section has
+     been added for the new development version, and showing that the version
+     has been updated in setup.py.  Enter 'Y' to commit these changes.
 
-To do this you will need your public key's keyname.  To find this enter::
+ 15. When asked to push the changes to a remote repository, enter 'Y'.  This
+     should complete the portion of the process that's automated at this point.
 
-    $ gpg --list-keys
+ 16. Check out the tag of the released version.  For example::
 
-This will output something like::
+         $ git checkout v0.1
 
-    /path/to/.gnupg/pubring.gpg
-    ---------------------------------------------
-    pub   4096D/1234ABCD 2012-01-01
-    uid                  Your Name <your_email>
-    sub   4096g/567890EF 2012-01-01
+ 17. Create the source distribution by doing::
 
-The 8 digit hex number on the line starting with "pub"--in this example the
-"1234ABCD" unique keyname for your public key.  To push it to a keyserver
-enter::
+         $ python setup.py sdist
 
-    $ gpg --send-keys 1234ABCD
+     Copy the produced ``.tar.gz`` somewhere and verify that you can unpack it,
+     build it, and get all the tests to pass.  It would be best to create a new
+     virtualenv in which to do this.
 
-But replace the 1234ABCD with the keyname for your public key.  Most systems
-come configured with a sensible default keyserver, so you shouldn't have to
-specify any more than that.
+ 18. Register the release on PyPI with::
 
-Create a tag
-""""""""""""
-Now test creating a signed tag in git.  It's safe to experiment with this--you
-can always delete the tag before pushing it to a remote repository::
+         $ python setup.py register
 
-    $ git tag -s v0.1 -m "Astropy version 0.1"
+ 19. Upload the source distribution to PyPI; this is preceded by re-running
+     the sdist command, which is necessary for the upload command to know
+     which distribution to upload::
 
-This will ask for the password to unlock your private key in order to sign
-the tag with it.  Confirm that the default signing key selected by git is the
-correct one (it will be if you only have one key).
+         $ python setup.py sdist upload
 
-Once the tag has been created, you can verify it with::
+ 20. Update the "stable" branch to point to the new stable release For example::
 
-    $ git tag -v v0.1
+         $ git checkout stable
+         $ git reset --hard v0.1
 
-This should output something like::
+ 21. Update Readthedocs so that it builds docs for the corresponding github tag.
+     Also verify that the ``stable`` Readthedocs version builds correctly for
+     the new version (it should trigger automatically once you've done the 
+     previous step.)
 
-    object e8e3e3edc82b02f2088f4e974dbd2fe820c0d934
-    type commit
-    tag v0.1
-    tagger Your Name <your_email> 1339779534 -0400
+ 22. If this was a major/minor release (not a bug fix release) create a bug fix
+     branch for this line of release.  That is, if the version just released
+     was "v<major>.<minor>.0", create bug fix branch with the name
+     "v<major>.<minor>.x".  Starting from the commit tagged as the release,
+     just checkout a new branch and push it to the remote server.  For example,
+     after releasing version 0.3, do::
 
-    Astropy version 0.1
-    gpg: Signature made Fri 15 Jun 2012 12:59:04 PM EDT using DSA key ID 0123ABCD
-    gpg: Good signature from "Your Name <your_email>"
+         $ git checkout -b v0.3.x
 
-You can use this to verify signed tags from any repository as long as you have
-the signer's public key in your keyring.  In this case you signed the tag
-yourself, so you already have your public key.
+     Then edit ``setup.py`` so that the ``VERSION`` variable is
+     ``'0.3.1.dev'``, and commit that change. Then, do::
 
-Note that if you are planning to do a release following the steps below, you
-will want to delete the tag you just created, because the release script does
-that for you.  You can delete this tag by doing::
+         $ git push upstream v0.3.x
 
-    $ git tag -d v0.1
+    .. note::
+
+        You may need to replace ``upstream`` here with ``astropy`` or
+        whatever remote name you use for the main astropy repository.
+
+     The purpose of this branch is for creating bug fix releases like "0.3.1"
+     and "0.3.2", while allowing development of new features to continue in
+     the master branch.  Only changesets that fix bugs without making
+     significant API changes should be merged to the bug fix branches.
+
+ 23. Create a bug fix label on GitHub; this should have the same name as the
+     just created bug fix branch prepended with "backport-".  For the previous
+     example this would be "backport-0.3.x"  This label should be applied to
+     all issues that should be backported to the bug fix branch.  Also create a
+     milestone for the next bug fix release if it hasn't been made already.
+
+ 24. Update `astropy/astropy-website <https://github.com/astropy/astropy-website>`_
+     for the new version.  Two files need to be updated: ``index.rst`` has two tags
+     near the top specifying the current release, and the ``docs.rst`` file should
+     be updated by putting the previous release in as an older version, and updating
+     the "latest developer version" link to point to the new release.
+
+ 25. Run the ``upload_script.py`` script in `astropy-website` to update the actual
+     web site.
+
+Modifications for a beta/release candidate release
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+For major releases with a lot of changes, we sometimes do beta and/or
+release candidates to have a chance to catch significant bugs before the true
+release.  If the release you are performing is this kind of pre-release, some
+of the above steps need to be modified.  The primary difference is that these
+releases go on the http://testpypi.python.org server instead of the regular
+PyPI.  The testpypi server provides a place to test the release and host it,
+but never appears anywhere on the regular server.  The price is that testpypi
+is not guaranteed to be up long-term, but for short-term pre-releases, this is
+no problem.
+
+The primary modifications to the release procedure are:
+
+* When prompted for a version number (step #13), you will need to manually 
+  enter something like "1.0b1" or "1.0rc1".  You should follow this numbering
+  scheme (``x.yb#`` or ``x.y.zrc#``), as it will ensure the release is
+  ordered "before" the main release by various automated tools.
+* On steps #18 and #19, where you register and upload to PyPI, it is important
+  that you add the option ``-r https://testpypi.python.org/pypi``.  This 
+  ensures the release information and files are sent to the test server instead
+  of the real PyPI server.  This will probably require you to set up a 
+  ``~/.pypirc`` file appropriate for the testpypi server.  See 
+  https://wiki.python.org/moin/TestPyPI for more on how to do this.
+* Do not do step #20 or later, as those are tasks for an actual release.
+
+.. note::
+    ``~/.pypirc`` files necessary for uploading to the testpypi server 
+    require you to include your password to be able to manage to do 
+    ``register`` properly.  This can be insecure, because it means you have
+    to put your PyPI password in a plain-text file.  So you'll want to set 
+    the ``~/.pypirc`` file permissions to be quite restrictive, use a
+    temporary PyPI password just for doing releases, or some other measure
+    to ensure your password remains secure.
 
 
 Maintaining Bug Fix Releases
@@ -285,7 +224,9 @@ known as a "bug fix" release.  Bug fix releases should not change any user-
 visible interfaces.  They should only fix bugs on the previous major/minor
 release and may also refactor internal APIs or include omissions from previous
 releases--that is, features that were documented to exist but were accidentally
-left out of the previous release.
+left out of the previous release. They may also include changes to docstrings 
+that enhance clarity but do not describe new features (e.g., more examples, 
+typo fixes, etc).
 
 Bug fix releases are typically managed by maintaining one or more bug fix
 branches separate from the master branch (the release procedure below discusses
@@ -397,8 +338,9 @@ Preparing the bug fix branch for release
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 There are two primary steps that need to be taken before creating a bug fix
-release (the rest of the procedure is the same as any other release as
-described in the release procedure below).
+release. The rest of the procedure is the same as any other release as
+described in :ref:`release-procedure` (although be sure to provide the
+right version number).
 
 1. Any existing fixes to the issues assigned to the current bug fix release
    milestone, or labeled with the relevant "backport-x.y.z" label must be
@@ -476,160 +418,132 @@ be fixed soon to a new release milestone.  If the upcoming bug fix release is
 issues that you don't expect to be fixed in time for 'v0.2.2'.
 
 
-Release Procedure
-^^^^^^^^^^^^^^^^^
-
-The automated portion of the Astropy release procedure uses `zest.releaser`_
-to create the tag and update the version.  zest.releaser is extendable through
-hook functions--Astropy already includes a couple hook functions to modify the
-default behavior, but future releases may be further automated through the
-implementation of additional hook functions.  In order to use the hooks,
-Astropy itself must be *installed* alongside zest.releaser.  It is recommended
-to create a `virtualenv`_ specifically for this purpose.
-
-This may seem like a lot of steps, but most of them won't be necessary to
-repeat for each release.  The advantage of using an automated or semi-automated
-procedure is that ensures a consistent release process each time.
-
- 1. Update the list of contributors in the ``creditsandlicense.rst`` file. The
-    easiest way to check this is do::
-
-        $ git shortlog -s
-
-    And just add anyone from that list who isn't already credited.
-
- 2. Install virtualenv if you don't already have it.  See the linked virtualenv
-    documentation for details.  Also, make sure that you have `cython`_
-    installed, as you will need it to generate the .c files needed for the
-    release.
-
- 3. Create and activate a virtualenv::
-
-        $ virtualenv --system-site-packages --distribute astropy-release
-        $ source astropy-release/bin/activate
-
- 4. Obtain a *clean* version of the Astropy repository.  That is, one
-    where you don't have any intermediate build files.  Either use a fresh
-    ``git clone`` or do ``git clean -dfx``.
-
- 5. Be sure you're the "master" branch or, for a bug fix release, on the
-    appropriate bug fix branch.  For example, if releasing version 0.2.2 make
-    sure to::
-    
-        $ git checkout v0.2.x
+.. _key-signing-info:
 
- 6. Now install Astropy into the virtualenv::
+Creating a GPG Signing Key and a Signed Tag
+-------------------------------------------
 
-        $ python setup.py install
+One of the main steps in performing a release is to create a tag in the git
+repository representing the exact state of the repository that represents the
+version being released.  For Astropy we will always use `signed tags`_: A
+signed tag is annotated with the name and e-mail address of the signer, a date
+and time, and a checksum of the code in the tag.  This information is then
+signed with a GPG private key and stored in the repository.
 
-    This is necessary for two reasons.  First, the entry points for the
-    releaser scripts need to be available, and these are in the Astropy
-    package. Second, the build process will generate .c files from the
-    Cython .pyx files, and the .c files are necessary for the source
-    distribution.
+Using a signed tag ensures the integrity of the contents of that tag for the
+future.  On a distributed VCS like git, anyone can create a tag of Astropy
+called "0.1" in their repository--and where it's easy to monkey around even
+after the tag has been created.  But only one "0.1" will be signed by one of
+the Astropy project coordinators and will be verifiable with their public key.
 
- 7. Install zest.releaser into the virtualenv; use ``--upgrade --force`` to
-    ensure that the latest version is installed in the virtualenv (if you're
-    running a csh variant make sure to run ``rehash`` afterwards too)::
+Generating a public/private key pair
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-        $ pip install zest.releaser --upgrade --force
+Git uses GPG to created signed tags, so in order to perform an Astropy release
+you will need GPG installed and will have to generated a signing key pair.
+Most \*NIX installations come with GPG installed by default (as it is used to
+verify the integrity of system packages).  If you don't have the ``gpg``
+command, consult the documentation for your system on how to install it.
 
- 8. Ensure that all changes to the code have been committed, then start the
-    release by running::
+For OSX, GPG can be installed from MacPorts using ``sudo port install gnupg``.
 
-        $ fullrelease
+To create a new public/private key pair, simply run::
 
- 9. You will be asked to enter the version to be released.  Press enter to
-    accept the default (which will normally be correct) or enter a specific
-    version string.  A diff will then be shown of CHANGES.rst and setup.py
-    showing that a release date has been added to the changelog, and that the
-    version has been updated in setup.py.  Enter 'Y' when asked to commit
-    these changes.
+    $ gpg --gen-key
 
- 10. You will then be shown the command that will be run to tag the release.
-     Enter 'Y' to confirm and run the command.
+This will take you through a few interactive steps. For the encryption
+and expiry settings, it should be safe to use the default settings (I use
+a key size of 4096 just because what does a couple extra kilobytes
+hurt?) Enter your full name, preferably including your middle name or
+middle initial, and an e-mail address that you expect to be active for a
+decent amount of time. Note that this name and e-mail address must match
+the info you provide as your git configuration, so you should either
+choose the same name/e-mail address when you create your key, or update
+your git configuration to match the key info. Finally, choose a very good
+pass phrase that won't be easily subject to brute force attacks.
 
- 11. When asked "Check out the tag (for tweaks or pypi/distutils server
-     upload)" enter 'N': zest.releaser does not offer enough control yet over
-     how the register and upload are performed so we will do this manually
-     until the release scripts have been improved.
 
- 12. You will be asked to enter a new development version.  Normally the next
-     logical version will be selected--press enter to accept the default, or
-     enter a specific version string.  Do not add ".dev" to the version, as
-     this will be appended automatically (ignore the message that says ".dev0
-     will be appended"--it will actually be ".dev" without the 0).  For
-     example, if the just-released version was "0.1" the default next version
-     will be "0.2".  If we want the next version to be, say "1.0" then that
-     must be entered manually.
+If you expect to use the same key for some time, it's good to make a backup of
+both your public and private key::
 
- 13. You will be shown a diff of CHANGES.rst showing that a new section has
-     been added for the new development version, and showing that the version
-     has been updated in setup.py.  Enter 'Y' to commit these changes.
+    $ gpg --export --armor > public.key
+    $ gpg --export-secret-key --armor > private.key
 
- 14. When asked to push the changes to a remote repository, enter 'Y'.  This
-     should complete the portion of the process that's automated at this point.
+Back up these files to a trusted location--preferably a write-once physical
+medium that can be stored safely somewhere.  One may also back up their keys to
+a trusted online encrypted storage, though some might not find that secure
+enough--it's up to you and what you're comfortable with.
 
- 15. Check out the tag of the released version.  For example::
+Add your public key to a keyserver
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Now that you have a public key, you can publish this anywhere you like--in your
+e-mail, in a public code repository, etc.  You can also upload it to a
+dedicated public OpenPGP keyserver.  This will store the public key
+indefinitely (until you manually revoke it), and will be automatically synced
+with other keyservers around the world.  That makes it easy to retrieve your
+public key using the gpg command-line tool.
 
-         $ git checkout v0.1
+To do this you will need your public key's keyname.  To find this enter::
 
- 16. Create the source distribution by doing::
+    $ gpg --list-keys
 
-         $ python setup.py sdist
+This will output something like::
 
-     Copy the produced ``.tar.gz`` somewhere and verify that you can unpack it,
-     build it, and get all the tests to pass.  It would be best to create a new
-     virtualenv in which to do this.
+    /path/to/.gnupg/pubring.gpg
+    ---------------------------------------------
+    pub   4096D/1234ABCD 2012-01-01
+    uid                  Your Name <your_email>
+    sub   4096g/567890EF 2012-01-01
 
- 17. Register the release on PyPI with::
+The 8 digit hex number on the line starting with "pub"--in this example the
+"1234ABCD" unique keyname for your public key.  To push it to a keyserver
+enter::
 
-         $ python setup.py register
+    $ gpg --send-keys 1234ABCD
 
- 18. Upload the source distribution to PyPI; this is preceded by re-running
-     the sdist command, which is necessary for the upload command to know
-     which distribution to upload::
+But replace the 1234ABCD with the keyname for your public key.  Most systems
+come configured with a sensible default keyserver, so you shouldn't have to
+specify any more than that.
 
-         $ python setup.py sdist upload
+Create a tag
+^^^^^^^^^^^^
+Now test creating a signed tag in git.  It's safe to experiment with this--you
+can always delete the tag before pushing it to a remote repository::
 
- 19. Update the website to reflect the fact there is now a stable release.
+    $ git tag -s v0.1 -m "Astropy version 0.1"
 
- 20. Update Readthedocs so that it builds docs for the corresponding github tag,
-     and set the default page to the new release.
+This will ask for the password to unlock your private key in order to sign
+the tag with it.  Confirm that the default signing key selected by git is the
+correct one (it will be if you only have one key).
 
- 21. If this was a major/minor release (not a bug fix release) create a bug fix
-     branch for this line of release.  That is, if the version just released
-     was "v<major>.<minor>.0", create bug fix branch with the name
-     "v<major>.<minor>.x".  Starting from the commit tagged as the release,
-     just checkout a new branch and push it to the remote server.  For example,
-     after releasing version 0.3, do::
+Once the tag has been created, you can verify it with::
 
-         $ git checkout -b v0.3.x
+    $ git tag -v v0.1
 
-     Then edit ``setup.py`` so that the ``VERSION`` variable is
-     ``'0.3.1.dev'``, and commit that change. Then, do::
+This should output something like::
 
-         $ git push upstream v0.3.x
+    object e8e3e3edc82b02f2088f4e974dbd2fe820c0d934
+    type commit
+    tag v0.1
+    tagger Your Name <your_email> 1339779534 -0400
 
-    .. note::
+    Astropy version 0.1
+    gpg: Signature made Fri 15 Jun 2012 12:59:04 PM EDT using DSA key ID 0123ABCD
+    gpg: Good signature from "Your Name <your_email>"
 
-        You may need to replace ``upstream`` here with ``astropy`` or
-        whatever remote name you use for the main astropy repository.
+You can use this to verify signed tags from any repository as long as you have
+the signer's public key in your keyring.  In this case you signed the tag
+yourself, so you already have your public key.
 
-     The purpose of this branch is for creating bug fix releases like "0.3.1"
-     and "0.3.2", while allowing development of new features to continue in
-     the master branch.  Only changesets that fix bugs without making
-     significant API changes should be merged to the bug fix branches.
+Note that if you are planning to do a release following the steps below, you
+will want to delete the tag you just created, because the release script does
+that for you.  You can delete this tag by doing::
 
- 22. Create a bug fix label on GitHub; this should have the same name as the
-     just created bug fix branch prepended with "backport-".  For the previous
-     example this would be "backport-0.3.x"  This label should be applied to
-     all issues that should be backported to the bug fix branch.  Also create a
-     milestone for the next bug fix release if it hasn't been made already.
+    $ git tag -d v0.1
 
 
 Creating a MacOS X Installer on a DMG
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+-------------------------------------
 
 The ``bdist_dmg`` command can be used to create a ``.dmg`` disk image for
 MacOS X with a ``.pkg`` installer. In order to do this, you will need to
@@ -656,6 +570,7 @@ Astropy from scratch using the ``.dmg`` installers, preferably on a clean
 virtual machine.
 
 
+
 .. _signed tags: http://git-scm.com/book/en/Git-Basics-Tagging#Signed-Tags
 .. _zest.releaser: http://pypi.python.org/pypi/zest.releaser
 .. _virtualenv: http://pypi.python.org/pypi/virtualenv
diff --git a/docs/development/sphinxext.rst b/docs/development/sphinxext.rst
deleted file mode 100644
index fb3fa38..0000000
--- a/docs/development/sphinxext.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-=================
-Sphinx extensions
-=================
-
-This page gives the API for the custom Sphinx extensions used in Astropy.
-
-automodapi Extension
---------------------
-
-.. automodule:: astropy.sphinx.ext.automodapi
-
-
-automodsumm Extension
----------------------
-
-.. automodule:: astropy.sphinx.ext.automodsumm
-
-
-Numpydoc Extension
-------------------
-
-This extension is a port of the
-`numpydoc <http://pypi.python.org/pypi/numpydoc/0.3.1>`_ extentension written by
-the `numpy <http://numpy.scipy.org/>`_ and `scipy <http://scipy.org/>`_
-projects, with some tweaks for Astropy.  See the code for details, as it
-is quite complex and includes a variety of interrelated extensions.
diff --git a/docs/development/testguide.rst b/docs/development/testguide.rst
index 13a70c2..cdc560e 100644
--- a/docs/development/testguide.rst
+++ b/docs/development/testguide.rst
@@ -58,7 +58,7 @@ code directory of astropy and simply type::
 
 ``py.test`` will look for files that `look like tests
 <http://pytest.org/latest/goodpractises.html#conventions-for-python-test-discovery>`_
-in the currect directory and all recursive directories then run all the code that
+in the current directory and all recursive directories then run all the code that
 `looks like tests
 <http://pytest.org/latest/goodpractises.html#conventions-for-python-test-discovery>`_
 within those files.
@@ -140,9 +140,49 @@ Enable PEP8 compliance testing with ``pep8=True`` in the call to
     This method of running the tests defaults to the version of
     `py.test` that is bundled with Astropy. To use the locally-installed
     version, you should set the ``ASTROPY_USE_SYSTEM_PYTEST`` environment
-    variable (see :doc:`/configs/index`) or the `py.test` method described
+    variable (see :doc:`/config/index`) or the `py.test` method described
     above.
 
+Tox
+---
+
+`Tox <http://tox.readthedocs.org>`_ is a sort of meta-test runner for Python.
+It installs a project into one or more virtualenvs (usually one for each Python
+version supported), build and installs the project into each virtualenv, and
+runs the projects tests (or any other build processes one might want to test).
+This is a good way to run the tests against multiple installed Python versions
+locally without pushing to a continuous integration system.
+
+Tox works by detecting the presence of a file called ``tox.ini`` in the root of
+a Python project and using that to configure the desired virtualenvs and start
+the tests.  So to run the Astropy tests on multiple Python versions using tox,
+simply install Tox::
+
+    $ pip install tox
+
+and then from the root of an Astropy repository clone run::
+
+    $ tox
+
+The Astropy tox configuration currently tests against Python versions 2.6, 2.7,
+3.2, and 3.3.  Tox will automatically skip any Python versions you do not have
+installed, but best results are achieved if you first install all supported
+Python versions and make sure they are on your ``$PATH``.
+
+.. note::
+
+    Tox creates its virtualenvs in the root of your project under a ``.tox``
+    directory (which is automatically ignored by ``.gitignore``).  It's worth
+    making note of this, however, as it is common practice to sometimes clean
+    up a git repository and delete any untracked files by running the ``git
+    clean -dfx`` command.  As it can take a long time to rebuild the tox
+    virtualenvs you may want to exclude the ``.tox`` directory from any
+    cleanup.  This can be achieved by running ``git clean -dfx -e .tox``,
+    though it is probably worth defining a `git alias
+    <https://git.wiki.kernel.org/index.php/Aliases>`_ to do this.
+
+
+
 Regression tests
 ================
 
@@ -441,6 +481,139 @@ You may need to adjust the relative import to work for the depth of your module.
 if the user does not have py.test installed. This is so that users need not
 install py.test to run AstroPy's tests.
 
+
+Testing warnings
+-----------------
+
+In order to test that warnings are triggered as expected in certain
+situations, you can use the `astropy.tests.helper.catch_warnings`
+context manager.  Unlike the `warnings.catch_warnings` context manager
+in the standard library, this one will reset all warning state before
+hand so one is assured to get the warnings reported, regardless of
+what errors may have been emitted by other tests previously.  Here is
+a real-world example::
+
+  from astropy.tests.helper import catch_warnings
+
+  with catch_warnings(MergeConflictWarning) as warning_lines:
+      # Test code which triggers a MergeConflictWarning
+      out = table.vstack([t1, t2, t4], join_type='outer')
+
+      assert warning_lines[0].category == metadata.MergeConflictWarning
+      assert ("In merged column 'a' the 'units' attribute does not match (cm != m)"
+              in str(warning_lines[0].message))
+
+Within ``py.test`` there is also the option of using the ``recwarn``
+function argument to test that warnings are triggered.  This method
+has been found to be problematic in at least one case (`pull request
+1174
+<https://github.com/astropy/astropy/pull/1174#issuecomment-20249309>`_)
+so the `astropy.tests.helper.catch_warnings` context manager is
+preferred.
+
+.. _doctests:
+
+Writing doctests
+================
+
+A doctest in Python is a special kind of test that is embedded in a function,
+class, or module's docstring and is formatted to look like a Python interactive
+session--that is, they show lines of Python code entered at a ``>>>`` prompt
+followed by the output that would be expected (if any) when running that code
+in an interactive session.
+
+The idea is to write usage examples in docstrings that users can enter
+verbatim and check their output against the expected output to confirm that
+they are using the interface properly.
+
+Furthermore, Python includes a :mod:`doctest` module that can detect these
+doctests and execute them as part of a project's automated test suite.  This
+way we can automatically ensure that all doctest-like examples in our
+docstrings are correct.
+
+The Astropy test suite automatically detects and runs any doctests in the
+Astropy source code, or in affiliated packages using the Astropy test running
+framework. For example doctests and detailed documentation on how to write
+them, see the full :mod:`doctest` documentation.
+
+Skipping doctests
+-----------------
+
+Sometimes it is necessary to write examples that look like doctests but that
+are not actually executable verbatim. An example may depend on some external
+conditions being fulfilled, for example. In these cases there are a few ways to
+skip a doctest:
+
+1. Next to the example add a comment like: ``# doctest: +SKIP``.  For example::
+
+    >>> import os
+    >>> os.listdir('.')  # doctest: +SKIP
+
+  In the above example we want to direct the user to run ``os.listdir('.')``
+  but we don't want that line to be executed as part of the doctest.
+  The downside to this approach is that the ``# doctest: +SKIP`` line will
+  appear in the documentation and may be distracting or confusing, but the
+  upside is that can prevent a single line of an example from being run as a
+  doctest.
+
+2. Astropy's test framework adds support for a special ``__doctest_skip__``
+   variable that can be placed at the module level of any module to list
+   functions, classes, and methods in that module whose doctests should not
+   be run.  That is, if it doesn't make sense to run a function's example
+   usage as a doctest, the entire function can be skipped in the doctest
+   collection phase.
+
+   The value of ``__doctest_skip__`` should be a list of wildcard patterns
+   for all functions/classes whose doctests should be skipped.  For example::
+
+       __doctest_skip__ = ['myfunction', 'MyClass', 'MyClass.*']
+
+   skips the doctests in a function called ``myfunction``, the doctest for a
+   class called ``MyClass``, and all *methods* of ``MyClass``.
+
+   Module docstrings may contain doctests as well.  To skip the module-level
+   doctests include the string ``'.'`` in ``__doctest_skip__``.
+
+3. ``__doctest_requires__`` is a way to list dependencies for specific
+   doctests.  It should be a dictionary mapping wildcard patterns (in the same
+   format as ``__doctest_skip__``) to a list of one or more modules that should
+   be *importable* in order for the tests to run.  For example, if some tests
+   require the scipy module to work they will be skipped unless ``import
+   scipy`` is possible.  It is also possible to use a tuple of wildcard
+   patterns as a key in this dict::
+
+            __doctest_requires__ = {('func1', 'func2'): ['scipy']}
+
+   Having this module-level variable will require ``scipy`` to be importable
+   in order to run the doctests for functions ``func1`` and ``func2`` in that
+   module.
+
+Skipping output
+---------------
+
+One of the important aspects of writing doctests is that the example output
+can be accurately compared to the actual output produced when running the
+test.
+
+The doctest system compares the actual output to the example output verbatim
+by default, but this not always feasible.  For example the example output may
+contain the ``__repr__`` of an object which displays its id (which will change
+on each run), or a test that expects an exception may output a traceback.
+
+The simplest way to generalize the example output is to use the ellipses
+``...``.  For example::
+
+    >>> 1 / 0
+    Traceback (most recent call last):
+    ...
+    ZeroDivisionError: integer division or modulo by zero
+
+This doctest expects an exception with a traceback, but the text of the
+traceback is skipped in the example output--only the first and last lines
+of the output are checked.  See the :mod:``doctest`` documentation for
+more examples of skipping output.
+
+
 Using data in tests
 ===================
 
@@ -515,3 +688,41 @@ also be marked so that they will be ignored when appropriate by
         do_it_the_python3_way()
     else:  # pragma: py2
         do_it_the_python2_way()
+
+Testing for open files
+======================
+
+Astropy can test whether any of the unit tests inadvertently leave any
+files open.  Since this greatly slows down the time it takes to run
+the tests, it is turned off by default.
+
+To use it from the commandline, do::
+
+    python setup.py test --open-files
+
+To use it from Python, do::
+
+    >>> import astropy
+    >>> astropy.test(open_files=True)
+
+
+Running tests in parallel
+=========================
+
+It is possible to speed up astropy's tests using the `pytest-xdist`
+plugin.  This plugin can be installed using `pip`::
+
+    pip install pytest-xdist
+
+Once installed, tests can be run in parallel using the `--parallel`
+commandline option.  For example, to use 4 processes::
+
+    python setup.py test --parallel=4
+
+Pass a negative number to `--parallel` to create the same number of
+processes as cores on your machine.
+
+Similarly, this feature can be invoked from Python::
+
+    >>> import astropy
+    >>> astropy.test(parallel=4)
diff --git a/docs/development/vision.rst b/docs/development/vision.rst
index 82f9bd8..1aed008 100644
--- a/docs/development/vision.rst
+++ b/docs/development/vision.rst
@@ -1,3 +1,5 @@
+:orphan:
+
 .. _vision:
 
 ============================================
diff --git a/docs/development/workflow/development_workflow.rst b/docs/development/workflow/development_workflow.rst
index b0beb21..02146eb 100644
--- a/docs/development/workflow/development_workflow.rst
+++ b/docs/development/workflow/development_workflow.rst
@@ -183,7 +183,14 @@ given in the following sections.
 
 * Ask on the `astropy-dev mailing list`_ if you get stuck.
 
-* Ask for code review!
+* Once your code is nearing completion, run the test suite to ensure
+  you have not accidentally caused regressions, and add new tests to ensure
+  your contribution behaves correctly (see :ref:`testing-guidelines`).
+
+* Issue a pull request on github!
+
+* As the code is converging to a final state, ensure your
+  documentation follows the guidelines (see :ref:`documentation-guidelines`).
 
 * Once your code is ready to be accepted, please add an entry to the changelog
   (see :ref:`changelog-format`).  If you're sure where to put this, please at
@@ -226,7 +233,7 @@ When you are ready to make some changes to the code, you should start a new
 branch. Branches that are for a collection of related edits are often called
 'feature branches'.
 
-Making an new branch for each set of related changes will make it easier for
+Making a new branch for each set of related changes will make it easier for
 someone reviewing your branch to see what you are doing.
 
 Choose an informative name for the branch to remind yourself and the rest of
@@ -266,7 +273,7 @@ The editing workflow
 Overview
 --------
 
-::
+Make changes, test, and::
 
    git add my_new_file
    git commit -m 'NF - some message'
@@ -277,6 +284,7 @@ In more detail
 
 #. Make some changes
 
+#. Once you are a bit further along, test your changes do not lead to
    regressions, and add new tests (see :ref:`testing-guidelines`). For example,
    if you are working on ``time``:: 
 
@@ -316,7 +324,7 @@ In more detail
    ``git add modified_file_name``  (see `git add`_).
 
 #. Once you are ready to commit, check with ``git status`` which files are
-   about to be committed::
+   about to be committed:: 
 
     # Changes to be committed:
     #   (use "git reset HEAD <file>..." to unstage)
diff --git a/docs/development/workflow/git_links.inc b/docs/development/workflow/git_links.inc
index 3d371ed..1fd558e 100644
--- a/docs/development/workflow/git_links.inc
+++ b/docs/development/workflow/git_links.inc
@@ -44,7 +44,7 @@
 .. _why the -a flag?: http://www.gitready.com/beginner/2009/01/18/the-staging-area.html
 .. _git staging area: http://www.gitready.com/beginner/2009/01/18/the-staging-area.html
 .. _tangled working copy problem: http://tomayko.com/writings/the-thing-about-git
-.. _git management: http://kerneltrap.org/Linux/Git_Management
+.. _git management: https://web.archive.org/web/20120511084711/http://kerneltrap.org/Linux/Git_Management
 .. _linux git workflow: http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html
 .. _git parable: http://tom.preston-werner.com/2009/05/19/the-git-parable.html
 .. _git foundation: http://matthew-brett.github.com/pydagogue/foundation.html
diff --git a/docs/development/workflow/index.rst b/docs/development/workflow/index.rst
index 6611fad..7119379 100644
--- a/docs/development/workflow/index.rst
+++ b/docs/development/workflow/index.rst
@@ -1,7 +1,8 @@
 .. _using-git:
 
-Contributing To/Developing Astropy or Affiliated Packages
-=========================================================
+=============================
+How To: Contribute to Astropy
+=============================
 
 Summary
 -------
diff --git a/docs/development/workflow/this_project.inc b/docs/development/workflow/this_project.inc
index 6bc95b3..453ebb4 100644
--- a/docs/development/workflow/this_project.inc
+++ b/docs/development/workflow/this_project.inc
@@ -1,6 +1,2 @@
-.. Astropy
-.. _Astropy: http://astropy.org
 .. _`Astropy GitHub`: http://github.com/astropy/astropy
 
-.. _`Astropy mailing list`: http://mail.scipy.org/mailman/listinfo/astropy
-.. _`astropy-dev mailing list`: http://groups.google.com/group/astropy-dev
diff --git a/docs/getting_started.rst b/docs/getting_started.rst
index f68d834..db4998f 100644
--- a/docs/getting_started.rst
+++ b/docs/getting_started.rst
@@ -13,24 +13,24 @@ astropy as::
 
     >>> import astropy
 
-is not very useful. Instead, it is best to import the desired sub-pacakge
+is not very useful. Instead, it is best to import the desired sub-package
 with the syntax::
 
-    >>> from astropy import subpackage
+    >>> from astropy import subpackage  # doctest: +SKIP
 
 For example, to access the FITS-related functionality, you can import
 `astropy.io.fits` with::
 
     >>> from astropy.io import fits
-    >>> hdulist = fits.open('data.fits')
+    >>> hdulist = fits.open('data.fits')  # doctest: +SKIP
 
 In specific cases, we have recommended shortcuts in the documentation for
 specific sub-packages, for example::
 
     >>> from astropy import units as u
     >>> from astropy import coordinates as coord
-    >>> coord.ICRSCoordinates(ra=10.68458, dec=41.26917, unit=(u.degree, u.degree))
-    <ICRSCoordinates RA=10.68458 deg, Dec=41.26917 deg>
+    >>> coord.ICRS(ra=10.68458, dec=41.26917, unit=(u.degree, u.degree))
+    <ICRS RA=10.68458 deg, Dec=41.26917 deg>
 
 Finally, in some cases, most of the required functionality is contained in a
 single class (or a few classes). In those cases, the class can be directly
@@ -50,3 +50,21 @@ so in cases where Astropy needs to be used as a drop-in replacement, the followi
 syntax is also acceptable::
 
     >>> from astropy.io import fits as pyfits
+
+Getting started with subpackages
+================================
+
+Because different subpackages have very different functionality, further
+suggestions for getting started are in the documentation for the subpackages,
+which you can reach by browsing the sections listed in the :ref:`user-docs`.
+
+Or, if you want to dive right in, you can either look at docstrings for
+particular a package or object, or access their documentation using the
+`~astropy.utils.misc.find_api_page` function. For example, doing this::
+
+    >>> from astropy import find_api_page
+    >>> from astropy.units import Quantity
+    >>> find_api_page(Quantity)  # doctest: +SKIP
+
+Will bring up the documentation for the `~astropy.units.quantity.Quantity` class
+in your browser.
diff --git a/docs/index.rst b/docs/index.rst
index 341fe35..301cbad 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -5,17 +5,25 @@
 
 :tocdepth: 2
 
-###################################
-Welcome to Astropy's Documentation!
-###################################
+.. the "raw" directive below is used to hide the title in favor of just the logo being visible
+.. raw:: html
+
+    <style media="screen" type="text/css">
+      h1 { display:none; }
+    </style>
+
+##################################
+Astropy Core Package Documentation
+##################################
 
 .. image:: astropy_banner_96.png
     :width: 485px
     :height: 96px
+    :target: http://www.astropy.org/
 
-Astropy is a community-driven package intended to contain much of the
-core functionality and some common tools needed for performing astronomy
-and astrophysics with Python.
+Welcome to the `astropy` documentation! `astropy` is a community-driven
+package intended to contain much of the core functionality and some common
+tools needed for performing astronomy and astrophysics with Python.
 
 .. _user-docs:
 
@@ -23,6 +31,9 @@ and astrophysics with Python.
 User Documentation
 ******************
 
+:doc:`whatsnew/0.3`
+-------------------
+
 **Astropy at a glance**
 
 .. toctree::
@@ -31,7 +42,6 @@ User Documentation
    overview
    install
    getting_started
-   whatsnew/0.2
 
 **Core data structures and transformations**
 
@@ -45,6 +55,7 @@ User Documentation
    time/index
    coordinates/index
    wcs/index
+   modeling/index
 
 **Connecting up: Files and I/O**
 
@@ -62,15 +73,17 @@ User Documentation
 .. toctree::
    :maxdepth: 1
 
+   convolution/index
    cosmology/index
    stats/index
+   vo/index
 
 **Nuts and bolts of Astropy**
 
 .. toctree::
    :maxdepth: 1
 
-   configs/index
+   config/index
    io/registry
    logging
    warnings
@@ -94,8 +107,7 @@ Getting help
 
 If you want to get help or discuss issues with other Astropy users, you can
 sign up for the `astropy mailing list <http://mail.scipy.org/mailman/listinfo/astropy>`_.
-Alternatively, the `astropy-dev
-<http://groups.google.com/group/astropy-dev>`_ list is where you should go to
+Alternatively, the `astropy-dev mailing list`_ is where you should go to
 discuss more technical aspects of Astropy with the developers.
 
 ***********************
@@ -120,19 +132,20 @@ Developer Documentation
 
 The developer documentation contains instructions for how to contribute to
 Astropy or affiliated packages, as well as coding, documentation, and
-testing guidelines.
+testing guidelines. For the guiding vision of this process and the project
+as a whole, see :doc:`development/vision`.
 
 .. toctree::
    :maxdepth: 1
 
-   development/vision
    development/workflow/index
    development/codeguide
    development/docguide
    development/testguide
-   development/building_packaging
    development/scripts
-   development/sphinxext
+   development/building
+   development/ccython
+   development/releasing
    changelog
 
 ******************
diff --git a/docs/install.rst b/docs/install.rst
index 0eafad5..d416ecb 100644
--- a/docs/install.rst
+++ b/docs/install.rst
@@ -9,7 +9,7 @@ Astropy has the following strict requirements:
 
 - `Python <http://www.python.org/>`_ 2.6, 2.7, 3.1 or 3.2
 
-- `Numpy <http://www.numpy.org/>`_ 1.4 or later
+- `Numpy <http://www.numpy.org/>`_ |minimum_numpy_version| or later
 
 Astropy also depends on other packages for optional features:
 
@@ -36,6 +36,10 @@ To install Astropy with `pip`, simply run::
 
     pip install --no-deps astropy
 
+.. warning::
+    Users of the Anaconda python distribution should follow the instructions
+    for :ref:`anaconda_install`.
+
 .. note::
 
     You will need a C compiler (e.g. ``gcc`` or ``clang``) to be installed (see
@@ -63,6 +67,25 @@ To install Astropy with `pip`, simply run::
     unless you are fully aware of the risks.
 
 
+.. _anaconda_install:
+
+Anaconda python distribution
+----------------------------
+
+Astropy is installed by default with Anaconda. To update to the latest version
+run::
+
+    conda update astropy
+
+.. note::
+    There may be a delay of a day or to between when a new version of Astropy
+    is released and when a package is available for Anaconda. You can check
+    for the list of available versions with ``conda search astropy``.
+    
+.. note::
+    Attempting to use ``pip`` to upgrade your installation of Astropy may result
+    in a corrupted installation.
+
 Binary installers
 -----------------
 
@@ -157,6 +180,10 @@ installing and requires the
 automatically downloaded when running ``python setup.py`` if it is not already
 provided by your system.
 
+If Numpy is not already installed in your Python environment, the
+astropy setup process will try to download and install it before
+continuing to install astropy.
+
 To build Astropy (from the root of the source tree)::
 
     python setup.py build
@@ -254,53 +281,6 @@ into.  For example to add the missing registry entries to your Python 2.7::
 
 __ https://gist.github.com/embray/6042780#file-win_register_python-py
 
-
-Compatibility packages
-^^^^^^^^^^^^^^^^^^^^^^
-
-.. warning:: This feature is still experimental, and you may run into
-             unexpected issues with other packages, so we strongly
-             recommend simply updating your code to use Astropy if
-             possible, rather than rely on these compatibility packages.
-
-Optionally, it is possible to install 'compatibility' packages that
-emulate the behavior of previous packages that have now been
-incorporated into Astropy. These are:
-
-* `PyFITS <http://www.stsci.edu/institute/software_hardware/pyfits/>`_
-* `vo <https://trac.assembla.com/astrolib/>`_
-* `PyWCS <https://trac.assembla.com/astrolib/>`_
-
-If you build Astropy with::
-
-    python setup.py build --enable-legacy
-    python setup.py install
-
-or simply::
-
-    python setup.py install --enable-legacy
-
-then you will be able to import these modules from your scripts as if
-the original packages had been installed. Using::
-
-    import pyfits
-    import vo
-    import pywcs
-
-will then be equivalent to::
-
-    from astropy.io import fits as pyfits
-    from astropy.io import vo
-    from astropy import wcs as pywcs
-
-In order to install the compatibility packages none of the
-original packages should be present.
-
-.. note:: If you are interested in testing out existing code with Astropy
-          without modifying the import statements, but don't want to
-          uninstall existing packages, you can use `virtualenv
-          <http://www.virtualenv.org/>`_ to set up a clean environment.
-
 .. _builddocs:
 
 Building documentation
diff --git a/docs/io/ascii/fixed_width_gallery.rst b/docs/io/ascii/fixed_width_gallery.rst
index 6e19335..75b9009 100644
--- a/docs/io/ascii/fixed_width_gallery.rst
+++ b/docs/io/ascii/fixed_width_gallery.rst
@@ -21,12 +21,12 @@ whether there is no header line (:class:`~astropy.io.ascii.FixedWidthNoHeader`),
 header line (:class:`~astropy.io.ascii.FixedWidth`), or two header lines
 (:class:`~astropy.io.ascii.FixedWidthTwoLine`).  Next, there are variations in the
 delimiter character, whether the delimiter appears on either end ("bookends"),
-and padding around the delimiter.  
+and padding around the delimiter.
 
 Details are available in the class API documentation, but the easiest way to
 understand all the options and their interactions is by example.
 
-Reading 
+Reading
 ^^^^^^^
 
 FixedWidth
@@ -42,9 +42,10 @@ FixedWidth
   ... |  1.2   | "hello" |
   ... |  2.4   |'s worlds|
   ... """
-  >>> ascii.read(table, Reader=ascii.FixedWidth)
-  rec.array([(1.2, '"hello"'), (2.4, "'s worlds")], 
-        dtype=[('Col1', '<f8'), ('Col2', '|S9')])
+  >>> ascii.read(table, format='fixed_width')
+  <Table rows=2 names=('Col1','Col2')>
+  array([(1.2, '"hello"'), (2.4, "'s worlds")],
+        dtype=[('Col1', '<f8'), ('Col2', 'S9')])
 
 **Typical fixed format table with col names provided**
 ::
@@ -55,21 +56,23 @@ FixedWidth
   ... |  1.2   | "hello" |
   ... |  2.4   |'s worlds|
   ... """
-  >>> ascii.read(table, Reader=ascii.FixedWidth, names=('name1', 'name2'))
-  rec.array([(1.2, '"hello"'), (2.4, "'s worlds")], 
-        dtype=[('name1', '<f8'), ('name2', '|S9')])
+  >>> ascii.read(table, format='fixed_width', names=('name1', 'name2'))
+  <Table rows=2 names=('name1','name2')>
+  array([(1.2, '"hello"'), (2.4, "'s worlds")],
+        dtype=[('name1', '<f8'), ('name2', 'S9')])
 
 **Weird input table with data values chopped by col extent**
 ::
 
   >>> table = """
   ...   Col1  |  Col2 |
-  ...   1.2       "hello" 
+  ...   1.2       "hello"
   ...   2.4   sdf's worlds
   ... """
-  >>> ascii.read(table, Reader=ascii.FixedWidth)
-  rec.array([(1.2, '"hel'), (2.4, "df's wo")], 
-        dtype=[('Col1', '<f8'), ('Col2', '|S7')])
+  >>> ascii.read(table, format='fixed_width')
+  <Table rows=2 names=('Col1','Col2')>
+  array([(1.2, '"hel'), (2.4, "df's wo")],
+        dtype=[('Col1', '<f8'), ('Col2', 'S7')])
 
 **Table with double delimiters**
 ::
@@ -80,11 +83,12 @@ FixedWidth
   ... |  Mary  | 555-2134 |192.168.1.12X|
   ... |   Bob  | 555-4527 | 192.168.1.9X|
   ... """
-  >>> ascii.read(table, Reader=ascii.FixedWidth)
-  rec.array([('John', '555-1234', '192.168.1.10'),
+  >>> ascii.read(table, format='fixed_width')
+  <Table rows=3 names=('Name','Phone','TCP')>
+  array([('John', '555-1234', '192.168.1.10'),
          ('Mary', '555-2134', '192.168.1.12'),
-         ('Bob', '555-4527', '192.168.1.9')], 
-        dtype=[('Name', '|S4'), ('Phone', '|S8'), ('TCP', '|S12')])
+         ('Bob', '555-4527', '192.168.1.9')],
+        dtype=[('Name', 'S4'), ('Phone', 'S8'), ('TCP', 'S12')])
 
 **Table with space delimiter**
 ::
@@ -95,13 +99,14 @@ FixedWidth
   ...  Mary  555-2134    192.168.1.12
   ...   Bob  555-4527     192.168.1.9
   ... """
-  >>> ascii.read(table, Reader=ascii.FixedWidth, delimiter=' ')
-  rec.array([('John', '555-1234', '192.168.1.10'),
+  >>> ascii.read(table, format='fixed_width', delimiter=' ')
+  <Table rows=3 names=('Name','--Phone-','----TCP-----')>
+  array([('John', '555-1234', '192.168.1.10'),
          ('Mary', '555-2134', '192.168.1.12'),
-         ('Bob', '555-4527', '192.168.1.9')], 
-        dtype=[('Name', '|S4'), ('--Phone-', '|S8'), ('----TCP-----', '|S12')])
+         ('Bob', '555-4527', '192.168.1.9')],
+        dtype=[('Name', 'S4'), ('--Phone-', 'S8'), ('----TCP-----', 'S12')])
 
-**Table with no header row and auto-column naming.**  
+**Table with no header row and auto-column naming.**
 
 Use header_start and data_start keywords to indicate no header line.
 ::
@@ -111,27 +116,32 @@ Use header_start and data_start keywords to indicate no header line.
   ... |  Mary  | 555-2134 |192.168.1.12|
   ... |   Bob  | 555-4527 | 192.168.1.9|
   ... """
-  >>> ascii.read(table, Reader=ascii.FixedWidth,
-  ...                 header_start=None, data_start=0)
-  rec.array([('John', '555-1234', '192.168.1.10'),
+  >>> ascii.read(table, format='fixed_width',
+  ...            header_start=None, data_start=0)
+  <Table rows=3 names=('col1','col2','col3')>
+  array([('John', '555-1234', '192.168.1.10'),
          ('Mary', '555-2134', '192.168.1.12'),
-         ('Bob', '555-4527', '192.168.1.9')], 
-        dtype=[('col1', '|S4'), ('col2', '|S8'), ('col3', '|S12')])
+         ('Bob', '555-4527', '192.168.1.9')],
+        dtype=[('col1', 'S4'), ('col2', 'S8'), ('col3', 'S12')])
 
-**Table with no header row and with col names provided.** 
+**Table with no header row and with col names provided.**
 
 Second and third rows also have hanging spaces after final "|".  Use header_start and data_start
 keywords to indicate no header line.
 ::
 
-  >>> table = ["|  John  | 555-1234 |192.168.1.10|"
-  ...          "|  Mary  | 555-2134 |192.168.1.12|  "
+  >>> table = ["|  John  | 555-1234 |192.168.1.10|",
+  ...          "|  Mary  | 555-2134 |192.168.1.12|  ",
   ...          "|   Bob  | 555-4527 | 192.168.1.9|  "]
-  >>> ascii.read(table, Reader=ascii.FixedWidth,
+  >>> ascii.read(table, format='fixed_width',
   ...                 header_start=None, data_start=0,
   ...                 names=('Name', 'Phone', 'TCP'))
-  rec.array([('John', '555-1234', '192.168.1.10')], 
-        dtype=[('Name', '|S4'), ('Phone', '|S8'), ('TCP', '|S12')])
+  <Table rows=3 names=('Name','Phone','TCP')>
+  array([('John', '555-1234', '192.168.1.10'),
+       ('Mary', '555-2134', '192.168.1.12'),
+       ('Bob', '555-4527', '192.168.1.9')], 
+      dtype=[('Name', '|S4'), ('Phone', '|S8'), ('TCP', '|S12')])
+
 
 FixedWidthNoHeader
 """"""""""""""""""
@@ -145,11 +155,12 @@ convenience class.**
   ... |  Mary  | 555-2134 |192.168.1.12|
   ... |   Bob  | 555-4527 | 192.168.1.9|
   ... """
-  >>> ascii.read(table, Reader=ascii.FixedWidthNoHeader)
-  rec.array([('John', '555-1234', '192.168.1.10'),
+  >>> ascii.read(table, format='fixed_width_no_header')
+  <Table rows=3 names=('col1','col2','col3')>
+  array([('John', '555-1234', '192.168.1.10'),
          ('Mary', '555-2134', '192.168.1.12'),
-         ('Bob', '555-4527', '192.168.1.9')], 
-        dtype=[('col1', '|S4'), ('col2', '|S8'), ('col3', '|S12')])
+         ('Bob', '555-4527', '192.168.1.9')],
+        dtype=[('col1', 'S4'), ('col2', 'S8'), ('col3', 'S12')])
 
 **Table with no delimiter with column start and end values specified.**
 
@@ -165,15 +176,16 @@ will select the first 6 characters.
   ...   Mary   555- 2134 192.168.1.12
   ...    Bob   555- 4527  192.168.1.9
   ... """
-  >>> ascii.read(table, Reader=ascii.FixedWidthNoHeader,
+  >>> ascii.read(table, format='fixed_width_no_header',
   ...                 names=('Name', 'Phone', 'TCP'),
   ...                 col_starts=(0, 9, 18),
   ...                 col_ends=(5, 17, 28),
   ...                 )
-  rec.array([('John', '555- 1234', '192.168.1.'),
+  <Table rows=3 names=('Name','Phone','TCP')>
+  array([('John', '555- 1234', '192.168.1.'),
          ('Mary', '555- 2134', '192.168.1.'),
-         ('Bob', '555- 4527', '192.168.1')], 
-        dtype=[('Name', '|S4'), ('Phone', '|S9'), ('TCP', '|S10')])
+         ('Bob', '555- 4527', '192.168.1')],
+        dtype=[('Name', 'S4'), ('Phone', 'S9'), ('TCP', 'S10')])
 
 FixedWidthTwoLine
 """""""""""""""""
@@ -182,30 +194,32 @@ FixedWidthTwoLine
 ::
 
   >>> table = """
-  ...   Col1    Col2 
-  ...   ----  --------- 
-  ...    1.2xx"hello" 
+  ...   Col1    Col2
+  ...   ----  ---------
+  ...    1.2xx"hello"
   ...   2.4   's worlds
   ... """
-  >>> ascii.read(table, Reader=ascii.FixedWidthTwoLine)
-  rec.array([(1.2, '"hello"'), (2.4, "'s worlds")], 
-        dtype=[('Col1', '<f8'), ('Col2', '|S9')])
+  >>> ascii.read(table, format='fixed_width_two_line')
+  <Table rows=2 names=('Col1','Col2')>
+  array([(1.2, '"hello"'), (2.4, "'s worlds")],
+        dtype=[('Col1', '<f8'), ('Col2', 'S9')])
 
 **Restructured text table**
 ::
 
   >>> table = """
   ... ======= ===========
-  ...   Col1    Col2 
+  ...   Col1    Col2
   ... ======= ===========
-  ...   1.2   "hello" 
+  ...   1.2   "hello"
   ...   2.4   's worlds
   ... ======= ===========
   ... """
-  >>> ascii.read(table, Reader=ascii.FixedWidthTwoLine,
+  >>> ascii.read(table, format='fixed_width_two_line',
   ...                 header_start=1, position_line=2, data_end=-1)
-  rec.array([(1.2, '"hello"'), (2.4, "'s worlds")], 
-        dtype=[('Col1', '<f8'), ('Col2', '|S9')])
+  <Table rows=2 names=('Col1','Col2')>
+  array([(1.2, '"hello"'), (2.4, "'s worlds")],
+        dtype=[('Col1', '<f8'), ('Col2', 'S9')])
 
 **Text table designed for humans and test having position line before the header line.**
 ::
@@ -218,10 +232,11 @@ FixedWidthTwoLine
   ... |  2.4 | 's worlds|
   ... +------+----------+
   ... """
-  >>> ascii.read(table, Reader=ascii.FixedWidthTwoLine, delimiter='+',
+  >>> ascii.read(table, format='fixed_width_two_line', delimiter='+',
   ...                 header_start=1, position_line=0, data_start=3, data_end=-1)
-  rec.array([(1.2, '"hello"'), (2.4, "'s worlds")], 
-        dtype=[('Col1', '<f8'), ('Col2', '|S9')])
+  <Table rows=2 names=('Col1','Col2')>
+  array([(1.2, '"hello"'), (2.4, "'s worlds")],
+        dtype=[('Col1', '<f8'), ('Col2', 'S9')])
 
 Writing
 ^^^^^^^
@@ -237,12 +252,12 @@ FixedWidth
   ... | 1.2  | "hello"   |  1    | a    |
   ... | 2.4  | 's worlds |  2    | 2    |
   ... """
-  >>> dat = ascii.read(table, Reader=ascii.FixedWidth)
+  >>> dat = ascii.read(table, format='fixed_width')
 
 **Write a table as a normal fixed width table.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidth)
+  >>> ascii.write(dat, format='fixed_width')
   | Col1 |      Col2 | Col3 | Col4 |
   |  1.2 |   "hello" |    1 |    a |
   |  2.4 | 's worlds |    2 |    2 |
@@ -250,7 +265,7 @@ FixedWidth
 **Write a table as a fixed width table with no padding.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidth, delimiter_pad=None)
+  >>> ascii.write(dat, format='fixed_width', delimiter_pad=None)
   |Col1|     Col2|Col3|Col4|
   | 1.2|  "hello"|   1|   a|
   | 2.4|'s worlds|   2|   2|
@@ -258,7 +273,7 @@ FixedWidth
 **Write a table as a fixed width table with no bookend.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidth, bookend=False)
+  >>> ascii.write(dat, format='fixed_width', bookend=False)
   Col1 |      Col2 | Col3 | Col4
    1.2 |   "hello" |    1 |    a
    2.4 | 's worlds |    2 |    2
@@ -266,7 +281,7 @@ FixedWidth
 **Write a table as a fixed width table with no delimiter.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidth, bookend=False, delimiter=None)
+  >>> ascii.write(dat, format='fixed_width', bookend=False, delimiter=None)
   Col1       Col2  Col3  Col4
    1.2    "hello"     1     a
    2.4  's worlds     2     2
@@ -274,7 +289,7 @@ FixedWidth
 **Write a table as a fixed width table with no delimiter and formatting.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidth,
+  >>> ascii.write(dat, format='fixed_width',
   ...                  formats={'Col1': '%-8.3f', 'Col2': '%-15s'})
   |     Col1 |            Col2 | Col3 | Col4 |
   | 1.200    | "hello"         |    1 |    a |
@@ -286,28 +301,28 @@ FixedWidthNoHeader
 **Write a table as a normal fixed width table.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidthNoHeader)
+  >>> ascii.write(dat, format='fixed_width_no_header')
   | 1.2 |   "hello" | 1 | a |
   | 2.4 | 's worlds | 2 | 2 |
 
 **Write a table as a fixed width table with no padding.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidthNoHeader, delimiter_pad=None)
+  >>> ascii.write(dat, format='fixed_width_no_header', delimiter_pad=None)
   |1.2|  "hello"|1|a|
   |2.4|'s worlds|2|2|
 
 **Write a table as a fixed width table with no bookend.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidthNoHeader, bookend=False)
+  >>> ascii.write(dat, format='fixed_width_no_header', bookend=False)
   1.2 |   "hello" | 1 | a
   2.4 | 's worlds | 2 | 2
 
 **Write a table as a fixed width table with no delimiter.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidthNoHeader, bookend=False,
+  >>> ascii.write(dat, format='fixed_width_no_header', bookend=False,
   ...                  delimiter=None)
   1.2    "hello"  1  a
   2.4  's worlds  2  2
@@ -318,7 +333,7 @@ FixedWidthTwoLine
 **Write a table as a normal fixed width table.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidthTwoLine)
+  >>> ascii.write(dat, format='fixed_width_two_line')
   Col1      Col2 Col3 Col4
   ---- --------- ---- ----
    1.2   "hello"    1    a
@@ -327,7 +342,7 @@ FixedWidthTwoLine
 **Write a table as a fixed width table with space padding and '=' position_char.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidthTwoLine,
+  >>> ascii.write(dat, format='fixed_width_two_line',
   ...                  delimiter_pad=' ', position_char='=')
   Col1        Col2   Col3   Col4
   ====   =========   ====   ====
@@ -337,7 +352,7 @@ FixedWidthTwoLine
 **Write a table as a fixed width table with no bookend.**
 ::
 
-  >>> ascii.write(dat, Writer=ascii.FixedWidthTwoLine, bookend=True, delimiter='|')
+  >>> ascii.write(dat, format='fixed_width_two_line', bookend=True, delimiter='|')
   |Col1|     Col2|Col3|Col4|
   |----|---------|----|----|
   | 1.2|  "hello"|   1|   a|
diff --git a/docs/io/ascii/index.rst b/docs/io/ascii/index.rst
index d042919..49d0e75 100644
--- a/docs/io/ascii/index.rst
+++ b/docs/io/ascii/index.rst
@@ -12,20 +12,17 @@ Introduction
 `astropy.io.ascii` provides methods for reading and writing a wide range of ASCII data table
 formats via built-in :ref:`extension_reader_classes`.  The emphasis is on flexibility and ease of use.
 
-The following formats are supported:
+The following shows a few of the ASCII formats that are available, while the section on
+`Supported formats`_ contains the full list.
 
-* :class:`~astropy.io.ascii.latex.AASTex`: AASTeX `deluxetable` used for AAS journals
 * :class:`~astropy.io.ascii.basic.Basic`: basic table with customizable delimiters and header configurations
 * :class:`~astropy.io.ascii.cds.Cds`: `CDS format table <http://vizier.u-strasbg.fr/doc/catstd.htx>`_ (also Vizier and ApJ machine readable tables)
-* :class:`~astropy.io.ascii.basic.CommentedHeader`: column names given in a line that begins with the comment character
 * :class:`~astropy.io.ascii.daophot.Daophot`: table from the IRAF DAOphot package
 * :class:`~astropy.io.ascii.fixedwidth.FixedWidth`: table with fixed-width columns (see also :ref:`fixed_width_gallery`)
 * :class:`~astropy.io.ascii.ipac.Ipac`: `IPAC format table <http://irsa.ipac.caltech.edu/applications/DDGEN/Doc/ipac_tbl.html>`_
 * :class:`~astropy.io.ascii.latex.Latex`: LaTeX table with datavalue in the `tabular` environment
-* :class:`~astropy.io.ascii.basic.NoHeader`: basic table with no header where columns are auto-named
 * :class:`~astropy.io.ascii.basic.Rdb`: tab-separated values with an extra line after the column definition line
 * :class:`~astropy.io.ascii.sextractor.SExtractor`: `SExtractor format table <http://www.astromatic.net/software/sextractor>`_
-* :class:`~astropy.io.ascii.basic.Tab`: tab-separated values
 
 The :mod:`astropy.io.ascii` package is built on a modular and extensible class
 structure with independent :ref:`base_class_elements` so that new formats can
@@ -53,8 +50,8 @@ function.  Assume you have a file named ``sources.dat`` with the following conte
 This table can be read with the following::
 
   >>> from astropy.io import ascii
-  >>> data = ascii.read("sources.dat")
-  >>> print data
+  >>> data = ascii.read("sources.dat")  # doctest: +SKIP
+  >>> print data  # doctest: +SKIP
   obsid redshift  X    Y      object
   ----- -------- ---- ---- -----------
    3102     0.32 4167 4085 Q1250+568-A
@@ -63,21 +60,27 @@ This table can be read with the following::
 The first argument to the |read| function can be the name of a file, a string
 representation of a table, or a list of table lines.  By default |read| will
 try to `guess the table format <#guess-table-format>`_ by trying all the
-supported formats.  If this does not work (for unusually formatted tables) then
+`supported formats`_.  If this does not work (for unusually formatted tables) then
 one needs give astropy.io.ascii additional hints about the format, for
 example::
 
    >>> lines = ['objID                   & osrcid            & xsrcid       ',
-                '----------------------- & ----------------- & -------------',
-                '              277955213 & S000.7044P00.7513 & XS04861B6_005',
-                '              889974380 & S002.9051P14.7003 & XS03957B7_004']
+   ...          '----------------------- & ----------------- & -------------',
+   ...          '              277955213 & S000.7044P00.7513 & XS04861B6_005',
+   ...          '              889974380 & S002.9051P14.7003 & XS03957B7_004']
    >>> data = ascii.read(lines, data_start=2, delimiter='&')
-   >>> print data
+   >>> print(data)
      objID         osrcid          xsrcid
    --------- ----------------- -------------
    277955213 S000.7044P00.7513 XS04861B6_005
    889974380 S002.9051P14.7003 XS03957B7_004
 
+If the format of a file is known (e.g. it is a fixed width table or an IPAC table),
+then it is more efficient and reliable to provide a value for the ``format`` argument from one
+of the values in the `supported formats`_.  For example::
+
+   >>> data = ascii.read(lines, format='fixed_width_two_line', delimiter='&')
+
 Writing Tables
 --------------
 
@@ -85,6 +88,8 @@ The |write| function provides a way to write a data table as a formatted ASCII
 table.  For example the following writes a table as a simple space-delimited
 file::
 
+  >>> import numpy as np
+  >>> from astropy.table import Table
   >>> x = np.array([1, 2, 3])
   >>> y = x ** 2
   >>> data = Table([x, y], names=['x', 'y'])
@@ -102,7 +107,8 @@ also supported for writing.  This provides a great deal of flexibility in the
 format for writing.  The example below writes the data as a LaTeX table, using
 the option to send the output to ``sys.stdout`` instead of a file::
 
-  >>> ascii.write(data, sys.stdout, Writer=ascii.Latex)
+  >>> import sys
+  >>> ascii.write(data, sys.stdout, format='latex')
   \begin{table}
   \begin{tabular}{cc}
   x & y \\
@@ -112,18 +118,78 @@ the option to send the output to ``sys.stdout`` instead of a file::
   \end{tabular}
   \end{table}
 
+.. _supported_formats:
+
+Supported formats
+=================
+
+A full list of the supported ``format`` values and corresponding format types for ASCII
+tables is given below.  The ``Write`` column indicates which formats support write
+functionality.
+
+========================= ===== ============================================================================================
+           Format         Write                                          Description
+========================= ===== ============================================================================================
+``aastex``                  Yes :class:`~astropy.io.ascii.latex.AASTex`: AASTeX deluxetable used for AAS journals
+``basic``                   Yes :class:`~astropy.io.ascii.basic.Basic`: Basic table with custom delimiters
+``cds``                         :class:`~astropy.io.ascii.cds.Cds`: CDS format table
+``commented_header``        Yes :class:`~astropy.io.ascii.basic.CommentedHeader`: Column names in a commented line
+``daophot``                     :class:`~astropy.io.ascii.daophot.Daophot`: IRAF DAOphot format table
+``fixed_width``             Yes :class:`~astropy.io.ascii.fixedwidth.FixedWidth`: Fixed width
+``fixed_width_no_header``   Yes :class:`~astropy.io.ascii.fixedwidth.FixedWidthNoHeader`: Fixed width with no header
+``fixed_width_two_line``    Yes :class:`~astropy.io.ascii.fixedwidth.FixedWidthTwoLine`: Fixed width with second header line
+``ipac``                    Yes :class:`~astropy.io.ascii.ipac.Ipac`: IPAC format table
+``latex``                   Yes :class:`~astropy.io.ascii.latex.Latex`: LaTeX table
+``no_header``               Yes :class:`~astropy.io.ascii.basic.NoHeader`: Basic table with no headers
+``rdb``                     Yes :class:`~astropy.io.ascii.basic.Rdb`: Tab-separated with a type definition header line
+``sextractor``                  :class:`~astropy.io.ascii.sextractor.SExtractor`: SExtractor format table
+``tab``                     Yes :class:`~astropy.io.ascii.basic.Tab`: Basic table with tab-separated values
+========================= ===== ============================================================================================
+
+
 Using `io.ascii`
 ================
 
 The details of using `astropy.io.ascii` are provided in the following sections:
 
+Reading tables
+---------------
+
 .. toctree::
    :maxdepth: 2
 
    read
+
+Writing tables
+---------------
+
+.. toctree::
+   :maxdepth: 2
+
    write
+
+Fixed-width Gallery
+--------------------
+
+.. toctree::
+   :maxdepth: 2
+
    fixed_width_gallery
+
+Base class elements
+-------------------
+
+.. toctree::
+   :maxdepth: 2
+
    base_classes
+
+Extension Reader classes
+------------------------
+
+.. toctree::
+   :maxdepth: 2
+
    extension_classes
 
 
@@ -131,5 +197,3 @@ Reference/API
 =============
 
 .. automodapi:: astropy.io.ascii
-
-
diff --git a/docs/io/ascii/read.rst b/docs/io/ascii/read.rst
index 08fddad..700c135 100644
--- a/docs/io/ascii/read.rst
+++ b/docs/io/ascii/read.rst
@@ -1,7 +1,7 @@
-.. _astropy.io.ascii_read:
-
 .. include:: references.txt
 
+.. _astropy.io.ascii_read:
+
 Reading tables
 --------------
 
@@ -9,27 +9,29 @@ The majority of commonly encountered ASCII tables can be easily read with the |r
 function::
 
   >>> from astropy.io import ascii
-  >>> data = ascii.read(table)
+  >>> data = ascii.read(table)  # doctest: +SKIP
 
-where ``table`` is the name of a file, a string representation of a table, or a 
+where ``table`` is the name of a file, a string representation of a table, or a
 list of table lines.  By default |read| will try to `guess the table format <#guess-table-format>`_
 by trying all the supported formats.  If this does not work (for unusually
 formatted tables) then one needs give `astropy.io.ascii` additional hints about the
 format, for example::
 
-   >>> data = astropy.io.ascii.read('t/nls1_stackinfo.dbout', data_start=2, delimiter='|')
-   >>> data = astropy.io.ascii.read('t/simple.txt', quotechar="'")
-   >>> data = astropy.io.ascii.read('t/simple4.txt', Reader=ascii.NoHeader, delimiter='|')
+   >>> data = astropy.io.ascii.read('t/nls1_stackinfo.dbout', data_start=2, delimiter='|')  # doctest: +SKIP
+   >>> data = astropy.io.ascii.read('t/simple.txt', quotechar="'")  # doctest: +SKIP
+   >>> data = astropy.io.ascii.read('t/simple4.txt', format='no_header', delimiter='|')  # doctest: +SKIP
 
 The |read| function accepts a number of parameters that specify the detailed
-table format.  Different Reader classes can define different defaults, so the
+table format.  Different formats can define different defaults, so the
 descriptions below sometimes mention "typical" default values.  This refers to
-the :class:`~astropy.io.ascii.Basic` reader and other similar Reader classes.
+the :class:`~astropy.io.ascii.Basic` format reader and other similar character-separated formats.
+
+.. _io_ascii_read_parameters:
 
 Parameters for ``read()``
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^^^^
 
-**table** : input table 
+**table** : input table
   There are four ways to specify the table to be read:
 
   - Name of a file (string)
@@ -37,21 +39,20 @@ Parameters for ``read()``
   - File-like object with a callable read() method
   - List of strings where each list element is a table line
 
-  The first two options are distinguished by the presence of a newline in the string.  
+  The first two options are distinguished by the presence of a newline in the string.
   This assumes that valid file names will not normally contain a newline.
 
-**Reader** : Reader class (default= :class:`~astropy.io.ascii.Basic`)
+**format** : file format (default='basic')
   This specifies the top-level format of the ASCII table, for example
   if it is a basic character delimited table, fixed format table, or
   a CDS-compatible table, etc.  The value of this parameter must
-  be a Reader class.  For basic usage this means one of the 
-  built-in :ref:`extension_reader_classes`.  
+  be one of the :ref:`supported_formats`.
 
 **guess**: try to guess table format (default=True)
   If set to True then |read| will try to guess the table format by cycling
-  through a number of possible table format permuations and attemping to read
+  through a number of possible table format permutations and attempting to read
   the table in each case.  See the `Guess table format`_ section for further details.
-  
+
 **delimiter** : column delimiter string
   A one-character string used to separate fields which typically defaults to
   the space character.  Other common values might be "\\s" (whitespace), "," or
@@ -60,8 +61,8 @@ Parameters for ``read()``
 
 **comment** : regular expression defining a comment line in table
   If the ``comment`` regular expression matches the beginning of a table line then that line
-  will be discarded from header or data processing.  For the :class:`~astropy.io.ascii.Basic` Reader this
-  defaults to "\\s*#" (any whitespace followed by #).  
+  will be discarded from header or data processing.  For the ``basic`` format this
+  defaults to "\\s*#" (any whitespace followed by #).
 
 **quotechar** : one-character string to quote fields containing special characters
   This specifies the quote character and will typically be either the single or double
@@ -72,15 +73,15 @@ Parameters for ``read()``
   This specifies in the line index where the header line will be found.  Comment lines are
   not included in this count and the counting starts from 0 (first non-comment line has index=0).
   If set to None this indicates that there is no header line and the column names
-  will be auto-generated.  The default is dependent on the Reader.
+  will be auto-generated.  The default is dependent on the format.
 
 **data_start**: line index for the start of data not counting comment lines
   This specifies in the line index where the data lines begin where the counting starts
-  from 0 and does not include comment lines.  The default is dependent on the Reader.
+  from 0 and does not include comment lines.  The default is dependent on the format.
 
 **data_end**: line index for the end of data (can be negative to count from end)
   If this is not None then it allows for excluding lines at the end that are not
-  valid data lines.  A negative value means to count from the end, so -1 would 
+  valid data lines.  A negative value means to count from the end, so -1 would
   exclude the last line, -2 the last two lines, and so on.
 
 **converters**: dict of data type converters
@@ -95,14 +96,15 @@ Parameters for ``read()``
   From the list of column names found from the header or the ``names``
   parameter, select for output only columns within this list.  If not supplied
   then include all names.
-  
+
 **exclude_names**: list of names to exclude from output
   Exclude these names from the list of output columns.  This is applied *after*
   the ``include_names`` filtering.  If not specified then no columns are excluded.
 
 **fill_values**: fill value specifier of lists
   This can be used to fill missing values in the table or replace strings with special meaning.
-  See the `Replace bad or missing values`_ section for more information and examples.
+  See the `Bad or missing values`_ section for more information and examples.
+  The default is that any blank table values are treated as missing.
 
 **fill_include_names**: list of column names, which are affected by ``fill_values``.
   If not supplied, then ``fill_values`` can affect all columns.
@@ -123,19 +125,58 @@ Parameters for ``read()``
 
 **header_Splitter**: Splitter class to split header columns
 
-.. _replace_bad_or_missing_values:
+**Reader** : Reader class (*deprecated* in favor of ``format``)
+  This specifies the top-level format of the ASCII table, for example
+  if it is a basic character delimited table, fixed format table, or
+  a CDS-compatible table, etc.  The value of this parameter must
+  be a Reader class.  For basic usage this means one of the
+  built-in :ref:`extension_reader_classes`.
 
-Replace bad or missing values
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. _replace_bad_or_missing_values:
 
-:mod:`astropy.io.ascii` can replace string values in the input data before they are
-converted.  The most common use case is probably a table which contains string
-values that are not a valid representation of a number, e.g. ``"..."`` for a
-missing value or ``""``.  If :mod:`astropy.io.ascii` cannot convert all elements in a
-column to a numeric type, it will format the column as strings. To avoid this,
-``fill_values`` can be used at the string level to fill missing values with the
-following syntax, which replaces ``<old>`` with ``<new>`` before the type
-conversion is done::
+Bad or missing values
+^^^^^^^^^^^^^^^^^^^^^
+
+ASCII data tables can contain bad or missing values.  A common case is when a table
+contains blank entries with no available data, for example::
+
+  day,precip,type
+  Mon,1.5,rain
+  Tues,,       # <-- Weather station down
+  Wed,1.1,snow
+
+By default |read| will interpret blank entries as being bad/missing and output a masked
+Table with those entries masked out by setting the corresponding mask value set to
+``True``.  If you have read the above table into a variable ``dat``, you would see the
+output below, where the ``--`` values indicate missing data::
+
+  >>> print dat  # doctest: +SKIP
+  day  precip type
+  ---- ------ ----
+   Mon    1.5 rain
+  Tues     --   --
+   Wed    1.1 snow
+
+If you want to replace the masked (missing) values with particular values, set the masked
+column ``fill_value`` attribute and then get the "filled" version of the table.  This
+looks like the following::
+
+  >>> dat['precip'].fill_value = -99.9  # doctest: +SKIP
+  >>> dat['type'].fill_value = ''  # doctest: +SKIP
+  >>> print dat.filled()  # doctest: +SKIP
+  day  precip type
+  ---- ------ ----
+   Mon    1.5 rain
+  Tues  -99.9
+   Wed    1.1 snow
+
+ASCII tables may also have other indicators of bad or missing data.  For
+example a table may contain string values that are not a valid representation
+of a number, e.g. ``"..."``, or a table may have special values like ``-999``
+that are chosen to indicate missing data.  The |read| function has a flexible
+system to accommodate these cases by replacing string values in the input data
+before they are converted.  This is done with the ``fill_values`` argument
+which replaces ``<old>`` with ``<new>`` before the type conversion is done::
 
   fill_values = <fill_spec> | [<fill_spec1>, <fill_spec2>, ...]
   <fill_spec> = (<old>, <new>, <optional col name 1>, <optional col name 2>, ...)
@@ -149,22 +190,27 @@ below).
 
 The ``fill_values`` parameter in |read| takes a single ``<fill_spec>`` or a
 list of ``<fill_spec>`` tuples.  If several ``<fill_spec>`` apply to a single
-occurence of ``<old>`` then the first one determines the ``<new>`` value.  For
+occurrence of ``<old>`` then the first one determines the ``<new>`` value.  For
 instance the following will replace an empty data value in the ``x`` or ``y``
 columns with "1e38" while empty values in any other column will get "-999"::
 
-  >>> ascii.read(table, fill_values=[('', '1e38', 'x', 'y'), ('', '-999')])
+  >>> ascii.read(table, fill_values=[('', '1e38', 'x', 'y'), ('', '-999')])  # doctest: +SKIP
 
-The following shows an example where string information needs to be exchanged 
-before the conversion to float values happens. Here ``no_rain`` and ``no_snow`` is replaced by ``0.0``::
+The following shows an example where string information needs to be exchanged before the
+conversion to float values happens. Here ``no_rain`` and ``no_snow`` is replaced by
+``0.0``::
 
   >>> table = ['day  rain     snow',    # column names
-               #---  -------  --------
-               'Mon  3.2      no_snow', 
-               'Tue  no_rain  1.1', 
-               'Wed  0.3      no_snow']
-  >>> print ascii.read(table, fill_values=[('no_rain', '0.0'), ('no_snow', '0.0')])
-  [('Mon', 3.2, --) ('Tue', --, 1.1) ('Wed', 0.3, --)]
+  ...          #---  -------  --------
+  ...          'Mon  3.2      no_snow',
+  ...          'Tue  no_rain  1.1',
+  ...          'Wed  0.3      no_snow']
+  >>> print(ascii.read(table, fill_values=[('no_rain', '0.0'), ('no_snow', '0.0')]))
+  day rain snow
+  --- ---- ----
+  Mon  3.2   --
+  Tue   --  1.1
+  Wed  0.3   --
 
 Sometimes these rules apply only to specific columns in the table. Columns can be selected with
 ``fill_include_names`` or excluded with ``fill_exclude_names``. Also, column names can be
@@ -172,19 +218,32 @@ given directly with fill_values::
 
   >>> asciidata = ['text,no1,no2', 'text1,1,1.',',2,']
   >>> print ascii.read(asciidata, fill_values = ('', 'nan','no1','no2'), delimiter = ',')
-  [('text1', 1, 1.0) ('', 2, --)]
+   text no1 no2
+  ----- --- ---
+  text1   1 1.0
+          2  --
 
 Here, the empty value ``''`` in column ``no2`` is replaced by ``nan``, but the ``text``
-column remains unaltered. 
+column remains unaltered.
 
 If any table elements match the fill specification then |read| returns a masked
 `~astropy.table.Table` object with the corresponding elements masked out.
 
+.. note::
+
+   The default in |read| is ``fill_values=('','0')``.  This marks blank entries as being
+   missing for any data type (int, float, or string).  If ``fill_values`` is explicitly
+   set in the call to |read| then the default behavior of marking blank entries as missing
+   no longer applies.  For instance setting ``fill_values=None`` will disable this
+   auto-masking without setting any other fill values.  This can be useful for a string
+   column where one of values happens to be ``""``.
+
 Guess table format
-^^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^
+
 If the ``guess`` parameter in |read| is set to True (which is the default) then
 |read| will try to guess the table format by cycling through a number of
-possible table format permutations and attemping to read the table in each case.
+possible table format permutations and attempting to read the table in each case.
 The first format which succeeds and will be used to read the table. To succeed
 the table must be successfully parsed by the Reader and satisfy the following
 column requirements:
@@ -192,16 +251,17 @@ column requirements:
  * At least two table columns
  * No column names are a float or int number
  * No column names begin or end with space, comma, tab, single quote, double quote, or
-   a vertical bar (|). 
+   a vertical bar (|).
 
 These requirements reduce the chance for a false positive where a table is
 successfully parsed with the wrong format.  A common situation is a table
 with numeric columns but no header row, and in this case ``astropy.io.ascii`` will
-auto-assign column names because of the restriction on column names that 
+auto-assign column names because of the restriction on column names that
 look like a number.
 
-The order of guessing is shown by this Python code::
-  
+The order of guessing is shown by this Python code, where ``Reader`` is the
+class which actually implements reading the different file formats::
+
   for Reader in (Rdb, Tab, Cds, Daophot, SExtractor, Ipac):
       read(Reader=Reader)
   for Reader in (CommentedHeader, Basic, NoHeader):
@@ -211,7 +271,7 @@ The order of guessing is shown by this Python code::
 
 Note that the :class:`~astropy.io.ascii.FixedWidth` derived-readers are not included
 in the default guess sequence (this causes problems), so to read such tables
-one must explicitly specify the reader class with the ``Reader`` keyword.
+one must explicitly specify the format with the ``format`` keyword.
 
 If none of the guesses succeed in reading the table (subject to the column
 requirements) a final try is made using just the user-supplied parameters but
@@ -222,7 +282,7 @@ The guessing process respects any values of the Reader, delimiter, and
 quotechar parameters that were supplied to the read() function.  Any guesses
 that would conflict are skipped.  For example the call::
 
- >>> data = astropy.io.ascii.read(table, Reader=NoHeader, quotechar="'")
+ >>> data = ascii.read(table, Reader=ascii.NoHeader, quotechar="'")
 
 would only try the four delimiter possibilities, skipping all the conflicting
 Reader and quotechar combinations.
@@ -234,14 +294,14 @@ Guessing can be disabled in two ways::
   data = astropy.io.ascii.read(table, guess=False)  # disable for this call
   astropy.io.ascii.set_guess(False)                 # set default to False globally
   data = astropy.io.ascii.read(table)               # guessing disabled
-  
+
 Converters
-^^^^^^^^^^^^^^
+^^^^^^^^^^
 
 :mod:`astropy.io.ascii` converts the raw string values from the table into
 numeric data types by using converter functions such as the Python ``int`` and
 ``float`` functions.  For example ``int("5.0")`` will fail while float("5.0")
-will succeed and return 5.0 as a Python float.  
+will succeed and return 5.0 as a Python float.
 
 The default converters are::
 
@@ -260,12 +320,13 @@ as described in the previous section.  The type provided to
 The default converters for each column can be overridden with the
 ``converters`` keyword::
 
-  >>> converters = {'col1': [astropy.io.ascii.convert_numpy(numpy.uint)],
-                    'col2': [astropy.io.ascii.convert_numpy(numpy.float32)]}
-  >>> ascii.read('file.dat', converters=converters)
+  >>> import numpy as np
+  >>> converters = {'col1': [ascii.convert_numpy(np.uint)],
+  ...               'col2': [ascii.convert_numpy(np.float32)]}
+  >>> ascii.read('file.dat', converters=converters)  # doctest: +SKIP
 
 Advanced customization
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^
 
 Here we provide a few examples that demonstrate how to extend the base
 functionality to handle special cases.  To go beyond these simple examples the
@@ -279,7 +340,7 @@ best reference is to read the code for the existing
        reader = astropy.io.ascii.Basic()
        reader.header.splitter.delimiter = '\t'
        reader.data.splitter.delimiter = '\t'
-       reader.header.splitter.process_line = None  
+       reader.header.splitter.process_line = None
        reader.data.splitter.process_line = None
        reader.data.start_line = 2
 
@@ -295,7 +356,7 @@ best reference is to read the code for the existing
            self.header.splitter.delimiter = '\t'
            self.data.splitter.delimiter = '\t'
            # Don't strip line whitespace since that includes tabs
-           self.header.splitter.process_line = None  
+           self.header.splitter.process_line = None
            self.data.splitter.process_line = None
            # Don't strip data value spaces since that is significant in TSV tables
            self.data.splitter.process_val = None
@@ -309,7 +370,7 @@ best reference is to read the code for the existing
 **Create a custom splitter.process_val function**
 ::
 
-   # The default process_val() normally just strips whitespace.  
+   # The default process_val() normally just strips whitespace.
    # In addition have it replace empty fields with -999.
    def process_val(x):
        """Custom splitter process_val function: Remove whitespace at the beginning
diff --git a/docs/io/ascii/write.rst b/docs/io/ascii/write.rst
index 82c8038..8e198fc 100644
--- a/docs/io/ascii/write.rst
+++ b/docs/io/ascii/write.rst
@@ -1,16 +1,18 @@
-.. _astropy.io.ascii_write:
-
 .. include:: references.txt
 
+.. _astropy.io.ascii_write:
+
 Writing tables
 --------------
 
 :mod:`astropy.io.ascii` is able to write ASCII tables out to a file or file-like
 object using the same class structure and basic user interface as for reading
-tables.  
+tables.
 
-The |write| function provides a way to write a data table as a formatted ASCII table.  For example::
+The |write| function provides a way to write a data table as a
+formatted ASCII table.  For example::
 
+  >>> import numpy as np
   >>> from astropy.io import ascii
   >>> x = np.array([1, 2, 3])
   >>> y = x ** 2
@@ -23,13 +25,13 @@ The ``values.dat`` file will then contain::
   2 4
   3 9
 
-All of the input Reader table formats supported by `astropy.io.ascii` for
-reading are also supported for writing.  This provides a great deal of
+Most of the input table :ref:`supported_formats` for
+reading are also available for writing.  This provides a great deal of
 flexibility in the format for writing.  The example below writes the data as a
 LaTeX table, using the option to send the output to ``sys.stdout`` instead of a
 file::
 
-  >>> ascii.write(data, sys.stdout, Writer=ascii.Latex)
+  >>> ascii.write(data, format='latex')  # doctest: +SKIP
   \begin{table}
   \begin{tabular}{cc}
   x & y \\
@@ -40,7 +42,7 @@ file::
   \end{table}
 
 Input data format
-^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^
 
 The input `table` argument to |write| can be any value that is supported for
 initializing a |Table| object.  This is documented in detail in the
@@ -60,17 +62,17 @@ serve as input to the |write| function.
     >>> from astropy.table import Table
 
     >>> data = Table({'a': [1, 2, 3],
-                      'b': [4.0, 5.0, 6.0]},
-                     names=['a', 'b'])
-    >>> ascii.write(data, sys.stdout)
+    ...               'b': [4.0, 5.0, 6.0]},
+    ...              names=['a', 'b'])
+    >>> ascii.write(data)
     a b
     1 4.0
     2 5.0
     3 6.0
 
     >>> data = np.array([(1, 2., 'Hello'), (2, 3., "World")],
-                        dtype=('i4,f4,a10'))
-    >>> ascii.write(data, sys.stdout)
+    ...                 dtype=('i4,f4,a10'))
+    >>> ascii.write(data)
     f0 f1 f2
     1 2.0 Hello
     2 3.0 World
@@ -80,9 +82,8 @@ object that can be an input to the |write| function.
 
 ::
 
-    >>> data = astropy.io.ascii.read('t/daophot.dat', Reader=astropy.io.ascii.Daophot)
-    >>> astropy.io.ascii.write(data, 'space_delimited_table.dat')
-
+    >>> data = ascii.read('t/daophot.dat', format='daophot')  # doctest: +SKIP
+    >>> ascii.write(data, 'space_delimited_table.dat')  # doctest: +SKIP
 
 List of lists
 """""""""""""
@@ -94,7 +95,7 @@ A list of Python lists (or any iterable object) can be used as input::
     >>> z = ['hello', 'world', '!!!']
     >>> data = [x, y, z]
 
-    >>> ascii.write(data, sys.stdout)
+    >>> ascii.write(data)
     col0 col1 col2
     1 4.0 hello
     2 5.2 world
@@ -105,7 +106,7 @@ The `data` object does not contain information about the column names so
 `names` keyword argument.  This example also shows excluding one of the columns
 from the output::
 
-    >>> ascii.write(data, sys.stdout, names=['x', 'y', 'z'], exclude_names=['y'])
+    >>> ascii.write(data, names=['x', 'y', 'z'], exclude_names=['y'])
     x z
     1 hello
     2 world
@@ -124,27 +125,31 @@ unpredictable unless the ``names`` argument is provided.
 
 ::
 
-    >>> data = {'x': [1, 2, 3], 
-                'y': [4, 5.2, 6.1], 
-                'z': ['hello', 'world', '!!!']}
-    >>> ascii.write(data, sys.stdout, names=['x', 'y', 'z'])
+    >>> data = {'x': [1, 2, 3],
+    ...         'y': [4, 5.2, 6.1],
+    ...         'z': ['hello', 'world', '!!!']}
+    >>> ascii.write(data, names=['x', 'y', 'z'])
     x y z
     1 4.0 hello
     2 5.2 world
     3 6.1 !!!
 
 
+.. _io_ascii_write_parameters:
+
 Parameters for ``write()``
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-The |write| function accepts a number of parameters that specify the detailed
-output table format.  Different Reader classes can define different defaults, so the
-descriptions below sometimes mention "typical" default values.  This refers to
-the :class:`~astropy.io.ascii.Basic` reader and other similar Reader classes.
+The |write| function accepts a number of parameters that specify the detailed output table
+format.  Each of the :ref:`supported_formats` is handled by a corresponding Writer class that
+can define different defaults, so the descriptions below sometimes mention "typical"
+default values.  This refers to the :class:`~astropy.io.ascii.Basic` writer and other
+similar Writer classes.
 
-Some Reader classes, e.g. :class:`~astropy.io.ascii.Latex` or :class:`~astropy.io.ascii.AASTex`
-accept aditional keywords, that can customize the output further. See the documentation
-of these classes for details.
+Some output format Writer classes, e.g. :class:`~astropy.io.ascii.Latex` or
+:class:`~astropy.io.ascii.AASTex` accept additional keywords, that can
+customize the output further. See the documentation of these classes for
+details.
 
 **output** : output specifier
   There are two ways to specify the output for the write operation:
@@ -152,30 +157,27 @@ of these classes for details.
   - Name of a file (string)
   - File-like object (from open(), StringIO, etc)
 
-**table** : input table 
+**table** : input table
   Any value that is supported for initializing a |Table| object (see :ref:`construct_table`).
 
-**Writer** : Writer class (default= :class:`~astropy.io.ascii.Basic`)
-  This specifies the top-level format of the ASCII table to be written, for
+**format** : output format (default='basic')
+  This specifies the format of the ASCII table to be written, for
   example if it is a basic character delimited table, fixed format table, or a
-  CDS-compatible table, etc.  The value of this parameter must be a Reader
-  class.  For basic usage this means one of the built-in :ref:`extension_reader_classes`.
-  Note: Reader classes and Writer classes are synonymous, in other
-  words Reader classes can also write, but for historical reasons they are
-  called Reader classes.
+  CDS-compatible table, etc.  The value of this parameter must
+  be one of the :ref:`supported_formats`.
 
 **delimiter** : column delimiter string
   A one-character string used to separate fields which typically defaults to the space character.
   Other common values might be "," or "|" or "\\t".
 
 **comment** : string defining a comment line in table
-  For the :class:`~astropy.io.ascii.Basic` Writer this defaults to "#". 
-  Which and how comments are written depends on the Writer chosen (e.g.
+  For the :class:`~astropy.io.ascii.Basic` Writer this defaults to "#".
+  Which and how comments are written depends on the format chosen (e.g.
   :class:`~astropy.io.ascii.CommentedHeader` puts the comment symbol in the line
   with the column names).
 
 **formats**: dict of data type converters
-  For each key (column name) use the given value to convert the column data to a string.  
+  For each key (column name) use the given value to convert the column data to a string.
   If the format value is string-like then it is used as a Python format statement,
   e.g. '%0.2f' % value.  If it is a callable function then that function
   is called with a single argument containing the column value to be converted.
@@ -193,7 +195,7 @@ of these classes for details.
   From the list of column names found from the data table or the ``names``
   parameter, select for output only columns within this list.  If not supplied
   then include all names.
-  
+
 **exclude_names**: list of names to exclude from output
   Exclude these names from the list of output columns.  This is applied *after*
   the ``include_names`` filtering.  If not specified then no columns are excluded.
@@ -206,7 +208,7 @@ of these classes for details.
   you need to provide the string representation (stripped of whitespace) for each value.
   Example::
 
-    astropy.io.ascii.write(table, sys.stdout, fill_values = [('nan', 'no data'),
+    astropy.io.ascii.write(table, fill_values = [('nan', 'no data'),
                                                        ('-999.0', 'no data')])
 
 **fill_include_names**: list of column names, which are affected by ``fill_values``.
@@ -214,3 +216,12 @@ of these classes for details.
 
 **fill_exclude_names**: list of column names, which are not affected by ``fill_values``.
   If not supplied, then ``fill_values`` can affect all columns.
+
+**Writer** : Writer class (*deprecated* in favor of ``format``)
+  This specifies the top-level format of the ASCII table to be written, for
+  example if it is a basic character delimited table, fixed format table, or a
+  CDS-compatible table, etc.  The value of this parameter must be a Writer
+  class.  For basic usage this means one of the built-in :ref:`extension_reader_classes`.
+  Note: Reader classes and Writer classes are synonymous, in other
+  words Reader classes can also write, but for historical reasons they are
+  often called Reader classes.
diff --git a/docs/io/fits/appendix/faq.rst b/docs/io/fits/appendix/faq.rst
index 89cb4ca..b3bb759 100644
--- a/docs/io/fits/appendix/faq.rst
+++ b/docs/io/fits/appendix/faq.rst
@@ -53,11 +53,9 @@ PyFITS (2.4 and earlier) are no longer actively supported.
 
 PyFITS is also included as a major component of upcoming Astropy_ project as
 the :mod:`astropy.io.fits` module.  The goal is for Astropy to eventually serve
-as a drop-in replacement for PyFITS (it even includes a legacy-compatibility
-mode where the :mod:`astropy.io.fits` module can still be imported as `pyfits`.
-However, for the time being PyFITS will still be released as an independent
-product as well, until such time that the Astropy project proves successful and
-widely-adopted.
+as a drop-in replacement for PyFITS. However, for the time being PyFITS will
+still be released as an independent product as well, until such time that the
+Astropy project proves successful and widely-adopted.
 
 .. _Space Telescope Science Institute: http://www.stsci.edu/
 .. _AURA: http://www.aura-astronomy.org/
@@ -142,7 +140,7 @@ into.  For example to add the missing registry entries to your Python 2.7::
 
     C:\>C:\Python27\python.exe C:\Path\To\Downloads\win_register_python.py
 
-__ https://gist.github.com/iguananaut/6042780#file-win_register_python-py
+__ https://gist.github.com/embray/6042780#file-win_register_python-py
 
 How do I install PyFITS from source on Windows?
 """""""""""""""""""""""""""""""""""""""""""""""
diff --git a/docs/io/fits/appendix/history.rst b/docs/io/fits/appendix/history.rst
index 2aa0d97..ad7e315 100644
--- a/docs/io/fits/appendix/history.rst
+++ b/docs/io/fits/appendix/history.rst
@@ -20,15 +20,45 @@ Highlights
 
 - Rewrote CFITSIO-based backend for handling tile compression of FITS files.
   It now uses a standard CFITSIO instead of heavily modified pieces of CFITSIO
-  as before.  PyFITS ships with its own copy of CFITSIO v3.30, but system
+  as before.  PyFITS ships with its own copy of CFITSIO v3.35 which supports
+  the latest version of the Tiled Image Convention (v2.3), but system
   packagers may choose instead to strip this out in favor of a
   system-installed version of CFITSIO.  Earlier versions may work, but nothing
   earlier than 3.28 has been tested yet. (#169)
 
+- Added support for reading and writing tables using the Q format for columns.
+  The Q format is identical to the P format (variable-length arrays) except
+  that it uses 64-bit integers for the data descriptors, allowing more than
+  4 GB of variable-length array data in a single table. (#160)
+
+- Added initial support for table columns containing pseudo-unsigned integers.
+  This is currently enabled by using the ``uint=True`` option when opening
+  files; any table columns with the correct BZERO value will be interpreted
+  and returned as arrays of unsigned integers.
+
+- Some refactoring of the table and ``FITS_rec`` modules in order to better
+  separate the details of the FITS binary and ASCII table data structures from
+  the HDU data structures that encapsulate them.  Most of these changes should
+  not be apparent to users (but see API Changes below).
+
 
 API Changes
 ^^^^^^^^^^^
 
+- The ``pyfits.new_table`` function is marked "pending deprecation".  This
+  does not mean it will be removed outright or that its functionality has
+  changed.  It will likely be replaced in the future for a function with
+  similar, if not subtly different functionality.  A better, if not slightly
+  more verbose approach is to use ``pyfits.FITS_rec.from_columns`` to create
+  a new ``FITS_rec`` table--this has the same interface as
+  ``pyfits.new_table``.  The difference is that it returns a plan ``FITS_rec``
+  array, and not an HDU instance.  This ``FITS_rec`` object can then be used
+  as the data argument in the constructors for ``BinTableHDU`` (for binary
+  tables) or ``TableHDU`` (for ASCII tables).  This is analogous to creating
+  an ``ImageHDU`` by passing in an image array.
+  ``pyfits.FITS_rec.from_columns`` is just a simpler way of creating a
+  FITS-compatible recarray from a FITS column specification.
+
 - The ``updateHeader``, ``updateHeaderData``, and ``updateCompressedData``
   methods of the ``CompDataHDU`` class are pending deprecation and moved to
   internal methods.  The operation of these methods depended too much on
@@ -63,13 +93,97 @@ API Changes
   include: ``create_card``, ``create_card_from_string``, ``upper_key``,
   ``Header.get_history``, and ``Header.get_comment``.
 
+- The ``.name`` attribute on HDUs is now directly tied to the HDU's header, so
+  that if ``.header['EXTNAME']`` changes so does ``.name`` and vice-versa.
 
-New Features
-^^^^^^^^^^^^
+- The ``pyfits.file.PYTHON_MODES`` constant dict was renamed to
+  ``pyfits.file.PYFITS_MODES`` which better reflects its purpose.  This is
+  rarely used by client code, however.  Support for the old name will be
+  removed by PyFITS 3.4.
+
+
+Other Changes and Additions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- The new compression code also adds support for the ZQUANTIZ and ZDITHER0
+  keywords added in more recent versions of this FITS Tile Compression spec.
+  This includes support for lossless compression with GZIP. (#198) By default
+  no dithering is used, but the ``SUBTRACTIVE_DITHER_1`` and
+  ``SUBTRACTIVE_DITHER_2`` methods can be enabled by passing the correct
+  constants to the ``quantize_method`` argument to the ``CompImageHDU``
+  constuctor.  A seed can be manually specified, or automatically generated
+  using either the system clock or checksum-based methods via the
+  ``dither_seed`` argument.  See the documentation for ``CompImageHDU`` for
+  more details. (#198) (spacetelescope/PYFITS#32)
+
+- Images compressed with the Tile Compression standard can now be larger than
+  4 GB through support of the Q format. (#159)
+
+- All HDUs now have a ``.ver`` ``.level`` attribute that returns the value of
+  the EXTVAL and EXTLEVEL keywords from that HDU's header, if the exist.  This
+  was added for consistency with the ``.name`` attribute which returns the
+  EXTNAME value from the header.
+
+- Then ``Column`` and ``ColDefs`` classes have new ``.dtype`` attributes
+  which give the Numpy dtype for the column data in the first case, and the
+  full Numpy compound dtype for each table row in the latter case.
+
+- There was an issue where new tables created defaulted the values in all
+  string columns to '0.0'.  Now string columns are filled with empty strings
+  by default--this seems a less surprising default, but it may cause
+  differences with tables created with older versions of PyFITS.
+
+
+Bug Fixes
+^^^^^^^^^
+
+- Binary tables containing compressed images may, optionally, contain other
+  columns unrelated to the tile compression convention. Although this is an
+  uncommon use case, it is permitted by the standard. (#159)
+
+- Reworked some of the file I/O routines to allow simpler, more consistent
+  mapping between OS-level file modes ('rb', 'wb', 'ab', etc.) and the more
+  "PyFITS-specific" modes used by PyFITS like "readonly" and "update".
+  That is, if reading a FITS file from an open file object, it doesn't matter
+  as much what "mode" it was opened in so long as it has the right
+  capabilities (read/write/etc.)  Also works around bugs in the Python io
+  module in 2.6+ with regard to file modes. (spacetelescope/PyFITS#33)
+
+
+3.1.3 (unreleased)
+------------------
+
+- Disallowed assigning NaN and Inf floating point values as header values,
+  since the FITS standard does not define a way to represent them in. Because
+  this is undefined, the previous behavior did not make sense and produced
+  invalid FITS files. (spacetelescope/PyFITS#11)
+
+- Added a workaround for a bug in 64-bit OSX that could cause truncation when
+  writing files greater than 2^32 bytes in size. (spacetelescope/PyFITS#28)
+
+- Fixed a long-standing issue where writing binary tables did not correctly
+  write the TFORMn keywords for variable-length array columns (they ommitted
+  the max array length parameter of the format).  This was thought fixed in
+  v3.1.2, but it was only fixed there for compressed image HDUs and not for
+  binary tables in general.
+
+
+3.0.12 (unreleased)
+-------------------
 
-- The new compression code also adds support for the ZQUANTIZ keyword added in
-  more recent versions of this FITS Tile Compression spec. This includes
-  support for lossless compression with GZIP. (#198)
+- Disallowed assigning NaN and Inf floating point values as header values,
+  since the FITS standard does not define a way to represent them in. Because
+  this is undefined, the previous behavior did not make sense and produced
+  invalid FITS files. (Backported from 3.1.3)
+
+- Added a workaround for a bug in 64-bit OSX that could cause truncation when
+  writing files greater than 2^32 bytes in size. (Backported from 3.1.3)
+
+- Fixed a long-standing issue where writing binary tables did not correctly
+  write the TFORMn keywords for variable-length array columns (they ommitted
+  the max array length parameter of the format).  This was thought fixed in
+  v3.1.2, but it was only fixed there for compressed image HDUs and not for
+  binary tables in general. (Backported from 3.1.3)
 
 
 3.1.3 (unreleased)
@@ -2541,7 +2655,6 @@ Changes since 0.7.6:
 
 
 0.7.6 (2002-11-22)
-------------------
 
 **NOTE:** This version will only work with numarray Version 0.4.
 
diff --git a/docs/io/fits/index.rst b/docs/io/fits/index.rst
index df77d77..9e0dee4 100644
--- a/docs/io/fits/index.rst
+++ b/docs/io/fits/index.rst
@@ -25,7 +25,8 @@ Reading and Updating Existing FITS Files
 Opening a FITS file
 ^^^^^^^^^^^^^^^^^^^
 
-Once the `astropy.io.fits` package is loaded using the standard convention\ [#f1]_, we can open an existing FITS file:
+Once the `astropy.io.fits` package is loaded using the standard convention\
+[#f1]_, we can open an existing FITS file::
 
     >>> from astropy.io import fits
     >>> hdulist = fits.open('input.fits')
@@ -441,9 +442,9 @@ For example, first create a new :class:`Header` object to encapsulate any
 keywords you want to include in the primary HDU, then as before create a
 :class:`PrimaryHDU`::
 
-    >>> prihdr = pyfits.Header()
+    >>> prihdr = fits.Header()
     >>> prihdr['COMMENT'] = "Here's some commentary about this FITS file."
-    >>> prihdu = pyfits.PrimaryHDU(header=prihdr)
+    >>> prihdu = fits.PrimaryHDU(header=prihdr)
 
 When we create a new primary HDU with a custom header this will automatically
 include any additional header keywords that are *required* by the FITS format
@@ -452,7 +453,7 @@ include any additional header keywords that are *required* by the FITS format
 We then create a HDUList containing both the primary HDU and the newly created
 table extension, and write to a new file::
 
-    >>> thdulist = pyfits.HDUList([prihdu, tbhdu])
+    >>> thdulist = fits.HDUList([prihdu, tbhdu])
     >>> thdulist.writeto('table.fits')
 
 Alternatively, you can append the table to the HDU list we already created in
diff --git a/docs/io/fits/usage/table.rst b/docs/io/fits/usage/table.rst
index 3f92838..792763f 100644
--- a/docs/io/fits/usage/table.rst
+++ b/docs/io/fits/usage/table.rst
@@ -247,9 +247,12 @@ is a number (>1) preceding a (numeric type) letter code, it means each cell in
 that field is a one-dimensional array. In the case of column c4, each cell is
 an array (a numpy array) of 1000 elements.
 
-For character string fields, the number can be either before or after the
-letter 'A' and they will mean the same string size. So, for columns c1 and c3,
-they both have 10 characters in each of their cells. For numeric data type, the
+For character string fields, the number be to the *left* of the letter 'A' when
+creating binary tables, and should be to the *right* when creating ASCII
+tables.  However, as this is a common confusion both formats are understood
+when creating binary tables (note, however, that upon writing to a file the
+correct format will be written in the header).  So, for columns c1 and c3, they
+both have 10 characters in each of their cells. For numeric data type, the
 dimension number must be before the letter code, not after.
 
 After the columns are constructed, the :func:`new_table` function can be used to
diff --git a/docs/io/registry.rst b/docs/io/registry.rst
index 8b855bb..719fd7f 100644
--- a/docs/io/registry.rst
+++ b/docs/io/registry.rst
@@ -49,17 +49,17 @@ We can then read in a FITS table with::
 
 In practice, it would be nice to have the ``read`` method automatically
 identify that this file was a FITS file, so we can construct a function that
-can recognize FITS files, which we refer to here as an *identifier*
-function. An identifier function should take three arguments: the first
-should be a string which indicates whether the identifier is being called
-from ``read`` or ``write``, and the second and third are the positional and
-keyword arguments passed to ``Table.read`` respectively (and are therefore a
-list and a dictionary). We can write a simplistic function that only looks
-at filenames (but in practice, this function could even look at the first
-few bytes of the file for example). The only requirement is that it return a
+can recognize FITS files, which we refer to here as an *identifier* function.
+An identifier function should take a first argument that should be a string
+which indicates whether the identifier is being called from ``read`` or
+``write``, and should then accept arbitrary number of positional and keyword
+arguments via ``*args`` and ``**kwargs``, which are the arguments passed to
+``Table.read``. We can write a simplistic function that only looks at
+filenames (but in practice, this function could even look at the first few
+bytes of the file for example). The only requirement is that it return a
 boolean indicating whether the input matches that expected for the format::
 
-    def fits_identify(origin, args, kwargs):
+    def fits_identify(origin, *args, **kwargs):
         return isinstance(args[0], basestring) and \
                args[0].lower().split('.')[-1] in ['fits', 'fit']
 
diff --git a/docs/io/unified.rst b/docs/io/unified.rst
index 4e962b3..8f7a812 100644
--- a/docs/io/unified.rst
+++ b/docs/io/unified.rst
@@ -1,13 +1,15 @@
+.. doctest_skip
+
 .. _table_io:
 
 Unified file read/write interface
 ===================================
 
-Astropy provides a unified interface for reading and writing data
-in different formats.  For many common cases this will 
-simplify the process of file I/O and reduce the need to master
-the separate details of all the I/O packages within Astropy.  This functionality is still in active development and the number of supported formats will be increasing.  For details on the implementation see 
-:ref:`io_registry`.
+Astropy provides a unified interface for reading and writing data in different formats.
+For many common cases this will simplify the process of file I/O and reduce the need to
+master the separate details of all the I/O packages within Astropy.  This functionality is
+still in active development and the number of supported formats will be increasing.  For
+details on the implementation see :ref:`io_registry`.
 
 Getting started with Table I/O
 ------------------------------
@@ -16,20 +18,17 @@ The :class:`~astropy.table.table.Table` class includes two methods,
 :meth:`~astropy.table.table.Table.read` and
 :meth:`~astropy.table.table.Table.write`, that make it possible to read from
 and write to files. A number of formats are automatically supported (see
-`Built-in readers/writers`_) and new file formats and extensions can be
+`Built-in table readers/writers`_) and new file formats and extensions can be
 registered with the :class:`~astropy.table.table.Table` class (see
-:ref:`io_registry`). After importing the :class:`~astropy.table.table.Table`
-class::
-
-    >>> from astropy.table import Table
+:ref:`io_registry`).
 
-the :meth:`~astropy.table.table.Table.read` method should be used as::
+To use this interface, first import the :class:`~astropy.table.table.Table` class, then
+simply call the :class:`~astropy.table.table.Table`
+:meth:`~astropy.table.table.Table.read` method with the name of the file and
+the file format, for instance ``'ascii.daophot'``::
 
-    >>> t = Table.read(filename, format='format')
-
-where ``'format'`` is the format of the file to read in, e.g.::
-
-    >>> t = Table.read('photometry.dat', format='daophot')
+    >>> from astropy.table import Table
+    >>> t = Table.read('photometry.dat', format='ascii.daophot')
 
 For certain file formats, the format can be automatically detected, for
 example from the filename extension::
@@ -38,148 +37,162 @@ example from the filename extension::
 
 Similarly, for writing, the format can be explicitly specified::
 
-    >>> t.write(filename, format='format')
+    >>> t.write(filename, format='latex')
 
-but as for the :meth:`~astropy.table.table.Table.read` method, the format may
+As for the :meth:`~astropy.table.table.Table.read` method, the format may
 be automatically identified in some cases.
 
-Any additional arguments specified will depend on the format (see e.g. see
-`Built-in readers/writers`_)
+Any additional arguments specified will depend on the format.  For examples of this see the
+section `Built-in table readers/writers`_.  This section also provides the full list of
+choices for the ``format`` argument.
 
 .. _built_in_readers_writers:
 
-Built-in readers/writers
---------------------------
+Built-in table readers/writers
+------------------------------
+
+The full list of built-in readers and writers is shown in the table below:
+
+=========================== ==== ===== ============= ==========
+           Format           Read Write Auto-identify Deprecated
+=========================== ==== ===== ============= ==========
+                     aastex  Yes   Yes            No        Yes
+                      ascii  Yes   Yes            No
+               ascii.aastex  Yes   Yes            No
+                ascii.basic  Yes   Yes            No
+                  ascii.cds  Yes    No            No
+     ascii.commented_header  Yes   Yes            No
+              ascii.daophot  Yes    No            No
+          ascii.fixed_width  Yes   Yes            No
+ascii.fixed_width_no_header  Yes   Yes            No
+ ascii.fixed_width_two_line  Yes   Yes            No
+                 ascii.ipac  Yes   Yes            No
+                ascii.latex  Yes   Yes           Yes
+            ascii.no_header  Yes   Yes            No
+                  ascii.rdb  Yes   Yes           Yes
+           ascii.sextractor  Yes    No            No
+                  ascii.tab  Yes   Yes            No
+                        cds  Yes    No            No        Yes
+                    daophot  Yes    No            No        Yes
+                       fits  Yes   Yes           Yes
+                       hdf5  Yes   Yes           Yes
+                       ipac  Yes   Yes            No        Yes
+                      latex  Yes   Yes            No        Yes
+                        rdb  Yes   Yes            No        Yes
+                    votable  Yes   Yes           Yes
+=========================== ==== ===== ============= ==========
+
+Deprecated format names like ``aastex`` will be removed in a future version.
+Use the full name (e.g. ``ascii.aastex``) instead.
+
+.. _table_io_ascii:
 
 ASCII formats
-^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^
 
 The :meth:`~astropy.table.table.Table.read` and
 :meth:`~astropy.table.table.Table.write` methods can be used to read and write formats
-supported by `astropy.io.ascii`:
-
-IPAC
-""""""
-
-`IPAC tables <http://irsa.ipac.caltech.edu/applications/DDGEN/Doc/ipac_tbl.html>`_
-can be read with ``format='ipac'``::
-
-  >>> t = Table.read('2mass.tbl', format='ipac')
-
-Note that there are different conventions for characters occuring below the
-position of the ``|`` symbol in IPAC tables. By default, any character
-below a ``|`` will be ignored (since this is the current standard),
-but if you need to read files that assume characters below the ``|``
-symbols belong to the column before or after the ``|``, you can specify
-``definition='left'`` or ``definition='right'`` respectively when reading
-the table (the default is ``definition='ignore'``). The following examples demonstrate the different conventions:
-
-* ``definition='ignore'``::
-
-    |   ra  |  dec  |
-    | float | float |
-      1.2345  6.7890
-
-* ``definition='left'``::
-
-    |   ra  |  dec  |
-    | float | float |
-       1.2345  6.7890
-
-* ``definition='right'``::
-
-    |   ra  |  dec  |
-    | float | float |
-    1.2345  6.7890
-
-
-Advanced information is available in the :class:`~astropy.io.ascii.ipac.Ipac`
-class (any arguments apart from the filename and ``format`` are passed to
-this class when ``format='ipac'``).
-
-CDS/Machine Readable
-"""""""""""""""""""""
-
-`CDS/Machine readable tables <http://vizier.u-strasbg.fr/doc/catstd.htx>`_ can be read with ``format='cds'``::
-
-    >>> t = Table.read('aj285677t3.txt', format='cds')
+supported by `astropy.io.ascii`.
 
-If the table definition is given in a separate ``ReadMe`` file, this can be
-specified with::
-
-    >>> t = Table.read('aj285677t3.txt', format='cds', readme="ReadMe")
-
-Advanced information is available in the :class:`~astropy.io.ascii.cds.Cds`
-class (any arguments apart from the filename and ``format`` are passed to
-this class when ``format='cds'``).
-
-DAOPhot
-""""""""""
-
-`DAOPhot <http://stsdas.stsci.edu/cgi-bin/gethelp.cgi?daophot.hlp>`_ tables
-can be read with ``format='daophot'``::
-
-  >>> t = Table.read('photometry.dat', format='daophot')
-
-Advanced information is available in the
-:class:`~astropy.io.ascii.daophot.Daophot` class (any arguments apart from
-the filename and ``format`` are passed to this class when
-``format='daophot'``).
-
-LaTeX
-"""""""""""
-
-`LaTeX <http://www.latex-project.org/>`_ tables can be read and written with
-``format='latex'``. Provided the ``.tex``` extension is used, the format does
-not need to be explicitly specified::
-
-      >>> t = Table.read('paper_table.tex')
-      >>> t.write('new_paper_table.tex')
-
-If a different extension is used, the format should be specified::
-
-      >>> t.write('new_paper_table.inc', format='latex')
-
-Advanced information is available in the
-:class:`~astropy.io.ascii.latex.Latex` class (any arguments apart from the
-filename and ``format`` are passed to this class  when ``format='latex'``).
+Use ``format='ascii'`` in order to interface to the generic
+:func:`~astropy.io.ascii.ui.read` and :func:`~astropy.io.ascii.ui.write`
+functions from `astropy.io.ascii`.  When reading a table this means
+that all supported ASCII table formats will be tried in order to successfully
+parse the input.  For example::
 
-RDB
-"""""""
+  >>> t = Table.read('astropy/io/ascii/tests/t/latex1.tex', format='ascii')
+  >>> print t
+  cola colb colc
+  ---- ---- ----
+     a    1    2
+     b    3    4
 
-`RDB <http://hea-www.harvard.edu/MST/simul/software/docs/rdb.html>`_ tables
-can be read and written with ``format='rdb'`` Provided the ``.rdb`` extension
-is used, the format does not need to be explicitly specified::
+When writing a table with ``format='ascii'`` the output is a basic
+character-delimited file with a single header line containing the
+column names.
 
-      >>> t = Table.read('discovery_data.rdb')
-      >>> t.write('updated_data.rdb')
+All additional arguments are passed to the `astropy.io.ascii`
+:func:`~astropy.io.ascii.ui.read` and :func:`~astropy.io.ascii.ui.write`
+functions. Further details are available in the sections on
+:ref:`io_ascii_read_parameters` and :ref:`io_ascii_write_parameters`.  For example, to change
+column delimiter and the output format for the ``colc`` column use::
+
+  >>> t.write(sys.stdout, format='ascii', delimiter='|', formats={'colc': '%0.2f'})
+  cola|colb|colc
+  a|1|2.00
+  b|3|4.00
+
+A full list of the supported ``format`` values and corresponding format types
+for ASCII tables is given below.  The ``Suffix`` column indicates the filename
+suffix where the format will be auto-detected, while the ``Write`` column
+indicates which support write functionality.
+
+=============================== ====== ===== ============================================================================================
+           Format               Suffix Write                                          Description
+=============================== ====== ===== ============================================================================================
+``ascii``                                Yes ASCII table in any supported format (uses guessing)
+``ascii.aastex``                         Yes :class:`~astropy.io.ascii.latex.AASTex`: AASTeX deluxetable used for AAS journals
+``ascii.basic``                          Yes :class:`~astropy.io.ascii.basic.Basic`: Basic table with custom delimiters
+``ascii.cds``                                :class:`~astropy.io.ascii.cds.Cds`: CDS format table
+``ascii.commented_header``               Yes :class:`~astropy.io.ascii.basic.CommentedHeader`: Column names in a commented line
+``ascii.daophot``                            :class:`~astropy.io.ascii.daophot.Daophot`: IRAF DAOphot format table
+``ascii.fixed_width``                    Yes :class:`~astropy.io.ascii.fixedwidth.FixedWidth`: Fixed width
+``ascii.fixed_width_no_header``          Yes :class:`~astropy.io.ascii.fixedwidth.FixedWidthNoHeader`: Fixed width with no header
+``ascii.fixed_width_two_line``           Yes :class:`~astropy.io.ascii.fixedwidth.FixedWidthTwoLine`: Fixed width with second header line
+``ascii.ipac``                           Yes :class:`~astropy.io.ascii.ipac.Ipac`: IPAC format table
+``ascii.latex``                   .tex   Yes :class:`~astropy.io.ascii.latex.Latex`: LaTeX table
+``ascii.no_header``                      Yes :class:`~astropy.io.ascii.basic.NoHeader`: Basic table with no headers
+``ascii.rdb``                     .rdb   Yes :class:`~astropy.io.ascii.basic.Rdb`: Tab-separated with a type definition header line
+``ascii.sextractor``                         :class:`~astropy.io.ascii.sextractor.SExtractor`: SExtractor format table
+``ascii.tab``                            Yes :class:`~astropy.io.ascii.basic.Tab`: Basic table with tab-separated values
+=============================== ====== ===== ============================================================================================
+
+.. note::
+
+   When specifying a specific ASCII table format using the unified interface, the format name is
+   prefixed with ``ascii.`` in order to identify the format as ASCII-based.  Compare the
+   table above to the `astropy.io.ascii` list of :ref:`supported_formats`.  Therefore the following
+   are equivalent::
+
+     >>> dat = ascii.read('file.dat', format='daophot')
+     >>> dat = Table.read('file.dat', format='ascii.daophot')
+
+   For compatibility with astropy version 0.2 and earlier, the following format
+   values are also allowed in ``Table.read()``: ``daophot``, ``ipac``, ``latex``, and ``rdb``.
+
+.. _table_io_fits:
+
+FITS
+^^^^
+
+Reading/writing from/to `FITS <http://fits.gsfc.nasa.gov/>`_
+files is supported with ``format='fits'``. In most cases, existing FITS
+files should be automatically identified as such based on the header of the
+file, but if not, or if writing to disk, then the format should be explicitly
+specified.
 
-If a different extension is used, the format should be specified::
+If a FITS table file only contains a single table, then it can be read in
+with::
 
-      >>> t.write('updated_data.txt', format='rdb')
+    >>> t = Table.read('data.fits')
 
-Advanced information is available in the :class:`~astropy.io.ascii.basic.Rdb`
-class (any arguments apart from the filename and ``format`` are passed to
-this class when ``format='rdb'``).
+If more that one table are present in the file, the first table found will be
+read in and a warning will be emitted::
 
-Arbitrary ASCII formats
-"""""""""""""""""""""""""
+    >>> t = Table.read('data.fits')
+    WARNING: hdu= was not specified but multiple tables are present, reading in first available table (hdu=1) [astropy.io.fits.connect]
 
-``format='ascii'`` can be used to interface to the bare
-:func:`~astropy.io.ascii.ui.read` and :func:`~astropy.io.ascii.ui.write`
-functions from `astropy.io.ascii`, e.g.::
+To write to a new file::
 
-       >>> t = Table.read('table.tex', format='ascii')
+    >>> t.write('new_table.fits')
 
-All additional arguments are passed to the `astropy.io.ascii`
-:func:`~astropy.io.ascii.ui.read` and
-:func:`~astropy.io.ascii.ui.write`. For example, in the following case::
-
-       >>> t = Table.read('photometry.dat', format='ascii', data_start=2, delimiter='|')
+At this time, the ``meta`` attribute of the
+:class:`~astropy.table.table.Table` class is simply an ordered
+dictionary and does not fully represent the structure of a FITS
+header (for example, keyword comments are dropped). This is likely
+to change in a future release.
 
-the ``data_start`` and ``delimiter`` arguments are passed to the
-:func:`~astropy.io.ascii.ui.read` function from `astropy.io.ascii` (and
-similarly for writing).
+.. _table_io_hdf5:
 
 HDF5
 ^^^^^^^^
@@ -219,6 +232,8 @@ used to ensure that the data is compressed on disk::
 As with other formats, the ``overwrite=True`` argument is supported for
 overwriting existing files.
 
+.. _table_io_votable:
+
 VO Tables
 ^^^^^^^^^^^
 
@@ -254,10 +269,3 @@ To write to a new file, the ID of the table should also be specified (unless
 When writing, the ``compression=True`` argument can be used to force
 compression of the data on disk, and the ``overwrite=True`` argument can be
 used to overwrite an existing file.
-
-Other
-^^^^^^^
-
-In future, FITS tables will also be supported via the
-:class:`~astropy.table.table.Table` class. For now, these can be read and
-written directly with `astropy.io.fits`.
\ No newline at end of file
diff --git a/docs/io/votable/index.rst b/docs/io/votable/index.rst
index 286e54c..1f55fe6 100644
--- a/docs/io/votable/index.rst
+++ b/docs/io/votable/index.rst
@@ -1,5 +1,9 @@
+.. doctest_skip
+
 .. include:: references.txt
 
+.. _astropy-io-votable:
+
 *******************************************
 VOTable XML handling (`astropy.io.votable`)
 *******************************************
@@ -144,14 +148,16 @@ either a string or Unicode path, or a Python file-like object::
 
   votable.to_xml('output.xml')
 
-There are currently two data storage formats supported by
+There are a number of data storage formats supported by
 `astropy.io.votable`.  The ``TABLEDATA`` format is XML-based and
 stores values as strings representing numbers.  The ``BINARY`` format
-is more compact, and stores numbers in base64-encoded binary.  The
-storage format can be set on a per-table basis using the
-`~astropy.io.votable.tree.Table.format` attribute, or globally using
-the `~astropy.io.votable.tree.VOTableFile.set_all_tables_format`
-method::
+is more compact, and stores numbers in base64-encoded binary.  VOTable
+version 1.3 adds the ``BINARY2`` format, which allows for masking of
+any data type, including integers and bit fields which can not be
+masked in the older ``BINARY`` format.  The storage format can be set
+on a per-table basis using the `~astropy.io.votable.tree.Table.format`
+attribute, or globally using the
+`~astropy.io.votable.tree.VOTableFile.set_all_tables_format` method::
 
   votable.get_first_table().format = 'binary'
   votable.set_all_tables_format('binary')
@@ -165,9 +171,11 @@ Standard compliance
 
 `astropy.io.votable.table` supports the `VOTable Format Definition
 Version 1.1
-<http://www.ivoa.net/Documents/REC/VOTable/VOTable-20040811.html>`_
-and `Version 1.2
-<http://www.ivoa.net/Documents/VOTable/20091130/REC-VOTable-1.2.html>`_.
+<http://www.ivoa.net/Documents/REC/VOTable/VOTable-20040811.html>`_,
+`Version 1.2
+<http://www.ivoa.net/Documents/VOTable/20091130/REC-VOTable-1.2.html>`_,
+and the `Version 1.3 proposed recommendation
+<http://www.ivoa.net/documents/VOTable/20130315/PR-VOTable-1.3-20130315.html>`_.
 Some flexibility is provided to support the 1.0 draft version and
 other non-standard usage in the wild.  To support these cases, set the
 keyword argument ``pedantic`` to ``False`` when parsing.
@@ -178,7 +186,8 @@ keyword argument ``pedantic`` to ``False`` when parsing.
   is documented in more detail in :ref:`warnings` and
   :ref:`exceptions`.
 
-Output always conforms to the 1.1 or 1.2 spec, depending on the input.
+Output always conforms to the 1.1, 1.2 or 1.3 spec, depending on the
+input.
 
 .. _pedantic-mode:
 
@@ -297,6 +306,17 @@ file with just a single table::
   votable = from_table(table)
   writeto(votable, "output.xml")
 
+.. note::
+
+  By default, `to_table` will use the `ID` attribute from the files to
+  create the column names for the `Table` object.  However, it may be
+  that you want to use the `name` attributes instead.  For this, set
+  the `use_names_over_ids` keyword to `True`.  Note that since field
+  `names` are not guaranteed to be unique in the VOTable
+  specification, but column names are required to be unique in Numpy
+  structured arrays (and thus `astropy.table.Table` objects), the
+  names may be renamed by appending numbers to the end in some cases.
+
 Performance considerations
 --------------------------
 
@@ -315,6 +335,10 @@ See Also
 - `VOTable Format Definition Version 1.2
   <http://www.ivoa.net/Documents/VOTable/20091130/REC-VOTable-1.2.html>`_
 
+- `VOTable Format Definition Version 1.3, Proposed Recommendatation
+  <http://www.ivoa.net/documents/VOTable/20130315/PR-VOTable-1.3-20130315.html>`_
+
+
 Reference/API
 =============
 
@@ -345,6 +369,7 @@ Reference/API
 .. automodapi:: astropy.io.votable.xmlutil
    :no-inheritance-diagram:
 
+
 astropy.io.votable.exceptions Module
 ------------------------------------
 
diff --git a/docs/io/votable/references.txt b/docs/io/votable/references.txt
index ae317ad..f3ff4c8 100644
--- a/docs/io/votable/references.txt
+++ b/docs/io/votable/references.txt
@@ -1,4 +1,5 @@
 .. _BINARY: http://www.ivoa.net/Documents/PR/VOTable/VOTable-20040322.html#ToC27
+.. _BINARY2: http://www.ivoa.net/documents/VOTable/20130315/PR-VOTable-1.3-20130315.html#sec:BIN2
 .. _COOSYS: http://www.ivoa.net/Documents/REC/VOTable/VOTable-20040811.html#ToC19
 .. _DESCRIPTION: http://www.ivoa.net/Documents/REC/VOTable/VOTable-20040811.html#ToC19
 .. _FIELD: http://www.ivoa.net/Documents/REC/VOTable/VOTable-20040811.html#ToC24
diff --git a/docs/known_issues.rst b/docs/known_issues.rst
index 4e5af7d..e31553b 100644
--- a/docs/known_issues.rst
+++ b/docs/known_issues.rst
@@ -57,16 +57,6 @@ not due to a problem with the test itself or the feature being tested.
 
 See: https://github.com/astropy/astropy/issues/717
 
-Numpy 1.4.x unreliable on 64-bit Ubuntu
----------------------------------------
-
-As of Ubuntu 12.04 (and possibly earlier), the 1.4.x versions of numpy sometimes
-cause segmentation faults.  This problem is not unique to Astropy, as the numpy
-tests themselves do not pass, but it does cause some Astropy functionality to
-fail.  
-
-The solution is to use a more recent version of Numpy.
-
 mmap support for ``astropy.io.fits`` on GNU Hurd
 ------------------------------------------------
 
@@ -98,3 +88,24 @@ Color printing on Windows
 Colored printing of log messages and other colored text does work in Windows
 but only when running in the IPython console.  Colors are not currently
 supported in the basic Python command-line interpreter on Windows.
+
+Table sorting can silently fail on MacOS X or Windows with Python 3 and Numpy < 1.6.2
+-------------------------------------------------------------------------------------
+
+In Python 3, prior to Numpy 1.6.2, there was a bug (in Numpy) that caused
+sorting of structured arrays to silently fail under certain circumstances (for
+example if the Table contains string columns) on MacOS X, Windows, and possibly
+other platforms other than Linux.  Since ``Table.sort`` relies on Numpy to
+internally sort the data, it is also affected by this bug.  If you are using
+Python 3, and need the sorting functionality for tables, we recommend updating
+to a more recent version of Numpy.
+
+Anaconda users should upgrade with ``conda``, not ``pip``
+---------------------------------------------------------
+
+Upgrading Astropy in the anaconda python distribution using ``pip`` can result
+in a corrupted install with a mix of files from the old version and the new
+version. Anaconda users should update with ``conda update astropy``. There
+may be a brief delay between the release of Astropy on PyPI and its release
+via the `conda` package manager; users can check the availability of new
+versions with ``conda search astropy``.
diff --git a/docs/modeling/algorithms.rst b/docs/modeling/algorithms.rst
new file mode 100644
index 0000000..99ad7b7
--- /dev/null
+++ b/docs/modeling/algorithms.rst
@@ -0,0 +1,61 @@
+**********
+Algorithms
+**********
+
+Univariate polynomial evaluation
+================================
+
+* The evaluation of 1D polynomials uses Horner's algorithm.
+
+* The evaluation of 1D Chebyshev and Legendre polynomials uses Clenshaw's
+  algorithm.
+
+
+Multivariate polynomial evaluation
+==================================
+
+* Multivariate Polynomials are evaluated following the algorithm in [1]_ .  The
+  algorithm uses the following notation:
+
+  - **multiindex** is a tuple of non-negative integers for which the length is
+    defined in the following way:
+
+    .. math:: \alpha = (\alpha1, \alpha2, \alpha3),  |\alpha| = \alpha1+\alpha2+\alpha3
+
+
+  - **inverse lexical order** is the ordering of monomials in such a way that
+    :math:`{x^a < x^b}` if and only if there exists :math:`{1 \le i \le n}`
+    such that :math:`{a_n = b_n, \dots, a_{i+1} = b_{i+1}, a_i < b_i}`.
+
+    In this ordering :math:`y^2 > x^2*y` and :math:`x*y > y`
+
+  - **Multivariate Horner scheme** uses d+1 variables :math:`r_0, ...,r_d` to
+    store intermediate results, where *d* denotes the number of variables.
+
+    Algorithm:
+
+    1. Set *di* to the max number of variables (2 for a 2D polynomial).
+
+    2. Set :math:`r_0` to :math:`c_{\alpha(0)}`, where c is a list of
+       coeeficients for each multiindex in inverse lexical order.
+
+    3. For each monomial, n, in the polynomial:
+
+       - determine :math:`k = max \{1 \leq j \leq di: \alpha(n)_j \neq \alpha(n-1)_j\}`
+
+       - Set :math:`r_k := l_k(x)* (r_0 + r_1 + \dots + r_k)`
+
+       - Set :math:`r_0 = c_{\alpha(n)}, r_1 = \dots r_{k-1} = 0.`
+
+    4. return :math:`r_0 + \dots + r_{di}`
+
+* The evaluation of multivariate Chebyshev and Legendre polynomials uses a
+  variation of the above Horner's scheme, in which every Legendre or Chebyshev
+  function is considered a separate variable.  In this case the length of the
+  :math:`\alpha` indices tuple is equal to the number of functions in x plus
+  the number of functions in y.  In addition the Chebyshev and Legendre
+  functions are cached for efficiency.
+
+
+
+.. [1] J. M. Pena, Thomas Sauer, "On the Multivariate Horner Scheme", SIAM Journal on Numerical Analysis, Vol 37, No. 4 
diff --git a/docs/modeling/design.rst b/docs/modeling/design.rst
new file mode 100644
index 0000000..4c3760f
--- /dev/null
+++ b/docs/modeling/design.rst
@@ -0,0 +1,28 @@
+.. _modeling-design:
+
+*******************
+Models Design Goals
+*******************
+
+The `~astropy.modeling` and `~astropy.modeling.fitting` modules described here
+are designed to work as peers. The goal is to be able to add models without
+explicit reference to fitting algorithms and likewise, add different fitting
+algorithms without changing the existing models.
+
+Furthermore, the models are designed to be combined in many ways. It is
+possible, for example, to combine models `serially
+<astropy.modeling.core.SerialCompositeModel>` so that the output values of one
+model are used as input values to another.  It is also possible to form a new
+model by combining models in `parallel
+<astropy.modeling.core.SummedCompositeModel>` (each model is evaluated
+separately with the original input and the deltas are summed).  Since models
+may have multiple input values, machinery is provided that allows assigning
+outputs from one model into the appropriate input of another in a flexible way,
+`~astropy.modeling.core.LabeledInput`. Finally, it is permitted to combine any
+number of models using all of these mechanisms simultaneously.  A composite
+model can be used to make further composite models.
+
+In the future this will support a model language which will allow using models
+in algebraic operations like
+
+.. math:: model = (model_1 + model_2) * model_3
diff --git a/docs/modeling/fitting.rst b/docs/modeling/fitting.rst
new file mode 100644
index 0000000..37477c2
--- /dev/null
+++ b/docs/modeling/fitting.rst
@@ -0,0 +1,112 @@
+**********************
+Fitting Models to Data
+**********************
+
+This module provides wrappers, called Fitters, around some Numpy and Scipy
+fitting functions. All Fitters can be called as functions. They take an
+instance of `~astropy.modeling.core.ParametricModel` as input and modify
+`~astropy.modeling.core.ParametricModel.parameters` attribute. The idea is to
+make this extensible and allow users to easily add other fitters.
+
+Linear fitting is done using Numpy's `~numpy.linalg.lstsq` function.  There are
+currently two non-linear fitters which use `~scipy.optimize.leastsq` and
+`~scipy.optimize.fmin_slsqp`.
+
+The rules for passing input to fitters are:
+
+* Non-linear fitters work only with single data sets.
+
+* The linear fitter can fit a single input to multiple data sets creating
+  multiple parameter sets. For example fitting a 2D model with input x, y
+  arrays of shape (n, m) to a z array of shape (p, n, m), will set
+  model.parameters.n_inputs to p, even if it was 1 when the model was created.
+
+* Attempting to fit a model with multiple parameter sets to a single data set
+  results in an error.
+
+
+Fitting examples
+----------------
+
+- Fitting a polynomial model to multiple data sets simultaneously::
+
+    >>> from astropy.modeling import models, fitting
+    >>> import numpy as np
+    >>> p1 = models.Polynomial1D(3)
+    >>> p1.c0 = 1
+    >>> p1.c1 = 2
+    >>> p1.parameters
+    array([ 1.,  2.,  0.,  0.])
+    >>> x = np.arange(10)
+    >>> y = p1(x)
+    >>> yy = np.array([y, y]).T
+    >>> p2 = models.Polynomial1D(3, param_dim=2)
+    >>> pfit = fitting.LinearLSQFitter()
+    >>> new_model = pfit(p2, x, yy)
+    >>> print(new_model.param_sets)
+    [[  1.00000000e+00   1.00000000e+00]
+     [  2.00000000e+00   2.00000000e+00]
+     [  3.88335494e-16   3.88335494e-16]
+     [ -2.99749607e-17  -2.99749607e-17]]
+
+Fitters support constrained fitting.
+
+- All fitters support fixed (frozen) parameters through the ``fixed`` argument
+  to models or setting the `~astropy.modeling.parameters.Parameter.fixed`
+  attribute directly on a parameter.
+
+  For linear fitters, freezing a polynomial coefficient means that a polynomial
+  without that term will be fitted to the data. For example, fixing ``c0`` in a
+  polynomial model will fit a polynomial with the zero-th order term missing.
+  However, the fixed value of the coefficient is used when evaluating the
+  model::
+
+      >>> x = np.arange(1, 10, .1)
+      >>> p1 = models.Polynomial1D(2, param_dim=2)
+      >>> p1.parameters = [1, 1, 2, 2, 3, 3]
+      >>> p1.param_sets
+      array([[ 1.,  1.],
+             [ 2.,  2.],
+             [ 3.,  3.]])
+      >>> y = p1(x)
+      >>> p1.c0.fixed = True
+      >>> pfit = fitting.LinearLSQFitter()
+      >>> new_model = pfit(p1, x, y)
+      ...
+      >>> new_model.param_sets  # doctest: +SKIP
+      array([[ 1.,          1.        ],
+             [ 2.38641216,  2.38641216],
+             [ 2.96827886,  2.96827886]])
+
+
+- A parameter can be `~astropy.modeling.parameters.Parameter.tied` (linked to
+  another parameter). This can be done in two ways::
+
+      >>> def tiedfunc(g1):
+      ...    mean = 3 * g1.stddev
+      ...    return mean
+      >>> g1 = models.Gaussian1D(amplitude=10., mean=3, stddev=.5,
+      ...                        tied={'mean': tiedfunc})
+
+  or::
+
+      >>> g1 = models.Gaussian1D(amplitude=10., mean=3, stddev=.5)
+      >>> g1.mean.tied = tiedfunc
+      >>> gfit = fitting.NonLinearLSQFitter()
+
+Bounded fitting is supported through the ``bounds`` arguments to models or by
+setting `~astropy.modeling.parameters.Parameter.min` and
+`~astropy.modeling.parameters.Parameter.max` attributes on a parameter.  Bounds
+for the `~astropy.modeling.fitting.NonLinearLSQFitter` are always exactly
+satisfied--if the value of the parameter is outside the fitting interval, it
+will be reset to the value at the bounds. The
+`~astropy.modeling.fitting.SLSQPFitter` handles bounds internally.
+
+- Different fitters support different types of constraints::
+
+    >>> fitting.LinearLSQFitter.supported_constraints
+    ['fixed']
+    >>> fitting.NonLinearLSQFitter.supported_constraints
+    ['fixed', 'tied', 'bounds']
+    >>> fitting.SLSQPFitter.supported_constraints
+    ['bounds', 'eqcons', 'ineqcons', 'fixed', 'tied']
diff --git a/docs/modeling/index.rst b/docs/modeling/index.rst
new file mode 100644
index 0000000..8bc949b
--- /dev/null
+++ b/docs/modeling/index.rst
@@ -0,0 +1,194 @@
+.. _astropy-modeling:
+
+***************************************
+Models And Fitting (`astropy.modeling`)
+***************************************
+
+Introduction
+============
+
+`~astropy.modeling` provides a framework for representing models and
+performing model evaluation and fitting. It supports 1D and 2D models
+and fitting with parameter constraints.
+
+It is :ref:`designed <modeling-design>` to be easily extensible and flexible.
+Models do not reference fitting algorithms explicitly (though exceptions are
+sometimes necessary) and new fitting algorithms may be added without changing
+the existing models.  In addition models can be combined in different ways
+using a machinery that allows assigning outputs from one model into the
+appropriate input of another in a flexible way,
+`~astropy.modeling.core.LabeledInput`.  The goal is to eventually provide a
+rich toolset of models and fitters such that most users will not need to define
+new model classes, nor special purpose fitting routines (but not making that
+hard to do if it is necessary).
+
+.. warning::
+    `~astropy.modeling` is currently a work-in-progress, and thus it is
+    likely there will be significant API changes in later versions of
+    Astropy. If you have specific ideas for how it might be improved,
+    feel free to let us know on the `astropy-dev mailing list`_ or at
+    http://feedback.astropy.org
+
+
+Getting started
+===============
+
+The examples here use the predefined models and assume the following modules
+have been imported::
+
+    >>> import numpy as np
+    >>> from astropy.modeling import models, fitting
+
+
+Using Models
+------------
+
+The `astropy.modeling` package defines a number of models that live inside
+`astropy.modeling.models` and behave like parametrized functions::
+
+    >>> from astropy.modeling import models
+    >>> g = models.Gaussian1D(amplitude=1.2, mean=0.9, stddev=0.5)
+    >>> print(g)
+    Model: Gaussian1DModel
+    n_inputs:   1
+    Degree: N/A
+    Parameter sets: 1
+    Parameters:
+               amplitude: Parameter('amplitude', value=1.2)
+               mean: Parameter('mean', value=0.9000...)
+               stddev: Parameter('stddev', value=0.5)
+
+Model parameters can be accessed as attributes:
+
+    >>> g.amplitude
+    Parameter('amplitude', value=1.2)
+    >>> g.mean
+    Parameter('mean', value=0.9000...)
+    >>> g.stddev
+    Parameter('stddev', value=0.5)
+
+and can also be set using the attributes::
+
+    >>> g.amplitude = 0.8
+    >>> g.amplitude
+    Parameter('amplitude', value=0.8000...)
+
+Models can be evaluated by calling them as functions::
+
+    >>> g(0.1)
+    0.22242984036255528
+    >>> g(np.linspace(0.5, 1.5, 7))
+    array([ 0.58091923,  0.71746405,  0.7929204 ,  0.78415894,  0.69394278,
+            0.54952605,  0.3894018 ])
+
+Models can therefore already be useful to evaluate common functions,
+independent of the fitting part of the package.
+
+Simple 1D model fitting
+-----------------------
+
+In this section, we look at a simple example of fitting a Gaussian to a
+simulated dataset. We use the :class:`~astropy.modeling.functional_models.Gaussian1D`
+and :class:`~astropy.modeling.functional_models.Trapezoid1D` models and the
+:class:`~astropy.modeling.fitting.NonLinearLSQFitter` fitter to
+fit the data:
+
+.. plot::
+   :include-source:
+
+    import numpy as np
+    from astropy.modeling import models, fitting
+
+    # Generate fake data
+    np.random.seed(0)
+    x = np.linspace(-5., 5., 200)
+    y = 3 * np.exp(-0.5 * (x - 1.3)**2 / 0.8**2)
+    y += np.random.normal(0., 0.2, x.shape)
+
+    # Fit the data using a box model
+    t_init = models.Trapezoid1D(amplitude=1., x_0=0., width=1., slope=0.5)
+    f1 = fitting.NonLinearLSQFitter()
+    t = f1(t_init, x, y)
+
+    # Fit the data using a Gaussian
+    g_init = models.Gaussian1D(amplitude=1., mean=0, stddev=1.)
+    f2 = fitting.NonLinearLSQFitter()
+    g = f2(g_init, x, y)
+
+    # Plot the data with the best-fit model
+    plt.figure(figsize=(8,5))
+    plt.plot(x, y, 'ko')
+    plt.plot(x, t(x), 'b-', lw=2, label='Trapezoid')
+    plt.plot(x, g(x), 'r-', lw=2, label='Gaussian')
+    plt.xlabel('Position')
+    plt.ylabel('Flux')
+    plt.legend(loc=2)
+
+As shown above, once instantiated, the fitter class can be used as a function
+that takes the initial model (``t_init`` or ``g_init``) and the data values
+(``x`` and ``y``), and returns a fitted model (``t`` or ``g``).
+
+Simple 2D model fitting
+-----------------------
+
+Similarly to the 1-d example, we can create a simulated 2-d data dataset, and fit a polynomial model to it. This could be used for example to fit the background in an image.
+
+.. plot::
+   :include-source:
+
+    import numpy as np
+    from astropy.modeling import models, fitting
+
+    # Generate fake data
+    np.random.seed(0)
+    x, y = np.mgrid[:128, :128]
+    z = 2. * x ** 2 - 0.5 * x ** 2 + 1.5 * x * y - 1.
+    z += np.random.normal(0., 0.1, z.shape) * 50000.
+
+    # Fit the data using astropy.modeling
+    p_init = models.Polynomial2D(degree=2)
+    f = fitting.NonLinearLSQFitter()
+    p = f(p_init, x, y, z)
+
+    # Plot the data with the best-fit model
+    plt.figure(figsize=(8,2.5))
+    plt.subplot(1,3,1)
+    plt.imshow(z, interpolation='nearest', vmin=-1e4, vmax=5e4)
+    plt.title("Data")
+    plt.subplot(1,3,2)
+    plt.imshow(p(x, y), interpolation='nearest', vmin=-1e4, vmax=5e4)
+    plt.title("Model")
+    plt.subplot(1,3,3)
+    plt.imshow(z - p(x, y), interpolation='nearest', vmin=-1e4, vmax=5e4)
+    plt.title("Residual")
+
+A list of models is provided in the `Reference/API`_ section. The fitting
+framework includes many useful features that are not demonstrated here, such as
+weighting of datapoints, fixing or linking parameters, and placing lower or
+upper limits on parameters. For more information on these, take a look at the
+:doc:`fitting` documentation.
+
+Using `modeling`
+================
+
+.. toctree::
+   :maxdepth: 1
+
+   parameters
+   models
+   fitting
+   new
+   algorithms
+   design
+
+
+Reference/API
+=============
+
+.. automodapi:: astropy.modeling
+.. automodapi:: astropy.modeling.fitting
+.. automodapi:: astropy.modeling.functional_models
+.. automodapi:: astropy.modeling.powerlaws
+.. automodapi:: astropy.modeling.polynomial
+.. automodapi:: astropy.modeling.projections
+.. automodapi:: astropy.modeling.rotations
diff --git a/docs/modeling/models.rst b/docs/modeling/models.rst
new file mode 100644
index 0000000..e3eb6b6
--- /dev/null
+++ b/docs/modeling/models.rst
@@ -0,0 +1,193 @@
+******************************
+Creating and Evaluating Models
+******************************
+
+The base class of all models is `~astropy.modeling.core.Model`, however
+fittable models should subclass `~astropy.modeling.core.ParametricModel`.
+Parametric models can be linear or nonlinear in a regression analysis sense.
+
+Model instances are callabale, that is, o evaluate a model it is called like a
+function. When possible the transformation is done using multiple
+:attr:`param_sets <astropy.modeling.core.Model.param_sets>`.  The number of
+parameter sets is stored in an attribute
+`~astropy.modeling.core.Model.param_dim`.
+
+Parametric models also store a flat array of all parameter values.  When
+fitting, this array is directly modified by a subclass of
+`~astropy.modeling.fitting.Fitter`, in turn updating all of the model's
+parameter values simultaneously.  When fitting nonlinear models, the values of
+the parameters are used as initial guesses by the fitting class.
+
+Models have an `~astropy.modeling.core.Model.n_inputs` attribute, which shows
+how many coordinates the model expects as an input. All models expect
+coordinates as separate arguments.  For example a 2D model expects x and y to
+be passed separately, e.g. as two arrays or two lists. When a model has
+multiple parameter sets and x, y are 2D arrays, the model is evaluated with
+each of the parameter sets and the same x, y as input. The shape of the output
+array is ``(param_dim, x_shape, y_shape)`` where param_dim is the number of
+parameter sets and ``x_shape, y_shape`` is the shape of the input array.  In
+all other cases the shape of the output array is the same as the shape of the
+input arrays.
+
+Models also have an attribute `~astropy.modeling.core.Model.n_outputs`, which
+shows the number of output coordinates. The
+`~astropy.modeling.core.Model.n_inputs` and
+`~astropy.modeling.core.Model.n_outputs` attributes are used to chain
+transforms by adding models in :class:`series
+<astropy.modeling.core.SerialCompositeModel>` or in :class:`parallel
+<astropy.modeling.core.SummedCompositeModel>`. Because composite models can
+be nested within other composite models, creating theoretically infinitely
+complex models, a mechanism to map input data to models is needed. In this case
+the input may be wrapped in a `~astropy.modeling.core.LabeledInput` object-- a
+dict-like object whose items are ``{label: data}`` pairs.
+
+
+Model examples
+--------------
+
+The examples here assume this import statement was executed::
+
+    >>> from astropy.modeling import *
+    >>> import numpy as np
+
+- Create a 1D Gaussian with 2 parameter sets::
+
+    >>> x = np.arange(1, 10, .1)
+    >>> models.Gaussian1D.param_names
+    ['amplitude', 'mean', 'stddev']
+    >>> g1 = models.Gaussian1D(amplitude=[10, 9], mean=[2, 3],
+    ...                        stddev=[0.15, .1])
+    >>> g1.param_sets
+    array([[ 10.  ,   9.  ],
+           [  2.  ,   3.  ],
+           [  0.15,   0.1 ]])
+
+  Evaluate the model on one data set::
+
+      >>> y = g1(x)
+      >>> print(y.shape)
+      (90, 2)
+
+  or two data sets (any other number would be an error)::
+
+      >>> y = g1(np.array([x, x]).T)
+      >>> print(y.shape)
+      (90, 2)
+
+.. plot::
+
+   import matplotlib.pyplot as plt
+   import numpy as np
+   from astropy.modeling import models, fitting
+   x = np.arange(1, 10, .1)
+   g1 = models.Gaussian1D(amplitude=[10, 9], mean=[2,3], stddev=[.15,.1])
+   y = g1(x)
+   plt.plot(x, y)
+   plt.title('Evaluate a Gaussian1D model with 2 parameter sets and 1 set of '
+             'input data')
+   plt.show()
+
+.. plot::
+
+   import matplotlib.pyplot as plt
+   import numpy as np
+   from astropy.modeling import models, fitting
+   x = np.arange(1, 10, .1)
+   g1 = models.Gaussian1D(amplitude=[10, 9], mean=[2,3], stddev=[.15,.1])
+   y = g1(np.array([x, x]).T)
+   plt.plot(x, y)
+   plt.title('Evaluating a Gaussian1D model with 2 parameter sets and 2 sets '
+             'of input data')
+   plt.show()
+
+
+- Evaluating polynomial models with multiple parameter sets with one input data
+  set creates multiple output data sets::
+
+    >>> len(p1.parameters)  # doctest: +SKIP
+    10
+    >>> p1.c1 = [0, 1, 2, 3, 4]  # doctest: +SKIP
+    >>> p1.param_sets  # doctest: +SKIP
+    array([[ 0.,  0.,  0.,  0.,  0.],
+           [ 0.,  1.,  2.,  3.,  4.]])
+    >>> y = p1(x)  # doctest: +SKIP
+
+
+.. plot::
+
+   import matplotlib.pyplot as plt
+   import numpy as np
+   from astropy.modeling import models, fitting
+   x = np.arange(1, 10, .1)
+   p1 = models.Polynomial1D(1, param_dim=5)
+   p1.c1 = [0, 1, 2, 3, 4]
+   y = p1(x)
+   plt.plot(x, y)
+   plt.title("Polynomial1D model with 5 parameter sets")
+   plt.show()
+
+- When passed a 2D array, the same polynomial will map parameter sets to array
+  columns::
+
+    >>> x = np.ones((10,5))
+    >>> y = p1(x)  # doctest: +SKIP
+    >>> print(y)  # doctest: +SKIP
+    array([[ 0.,  1.,  2.,  3.,  4.],
+           [ 0.,  1.,  2.,  3.,  4.],
+           [ 0.,  1.,  2.,  3.,  4.],
+           [ 0.,  1.,  2.,  3.,  4.],
+           [ 0.,  1.,  2.,  3.,  4.],
+           [ 0.,  1.,  2.,  3.,  4.],
+           [ 0.,  1.,  2.,  3.,  4.],
+           [ 0.,  1.,  2.,  3.,  4.],
+           [ 0.,  1.,  2.,  3.,  4.],
+           [ 0.,  1.,  2.,  3.,  4.]])
+    >>> print(y.shape)  # doctest: +SKIP
+    (10,5)
+
+- Create and evaluate a parallel composite model::
+
+    >>> x = np.arange(1,10,.1)
+    >>> p1 = models.Polynomial1D(1)
+    >>> g1 = models.Gaussian1D(amplitude=10., stddev=2.1, mean=4.2)
+    >>> sum_of_models = SummedCompositeModel([g1, p1])
+    >>> y = sum_of_models(x)
+
+  This is equivalent to applying the two models in parallel::
+
+      >>> y = x + g1(x) + p1(x)
+
+In more complex cases the input and output may be mapped to transformations::
+
+    >>> x, y = np.mgrid[:5, :5]
+    >>> off = models.Shift(-3.2)
+    >>> poly2 = models.Polynomial2D(2)
+    >>> serial_composite_model = SerialCompositeModel(
+    ...     [off, poly2], inmap=[['x'], ['x', 'y']], outmap=[['x'], ['z']])
+
+The above composite transform will apply an inplace shift to x, followed by a
+2D polynomial and will save the result in an array, labeled 'z'.  To evaluate
+this model use a `~astropy.modeling.core.LabeledInput` object::
+
+    >>> labeled_data = LabeledInput([x, y], ['x', 'y'])
+    >>> result = serial_composite_model(labeled_data)
+
+The output is also a `~astropy.modeling.core.LabeledInput` object and the
+result is stored in label 'z'::
+
+    >>> print(result)  # doctest: +SKIP
+    {'x': array([[-3.2, -3.2, -3.2, -3.2, -3.2],
+           [-2.2, -2.2, -2.2, -2.2, -2.2],
+           [-1.2, -1.2, -1.2, -1.2, -1.2],
+           [-0.2, -0.2, -0.2, -0.2, -0.2],
+           [ 0.8,  0.8,  0.8,  0.8,  0.8]]),
+     'y': array([[0, 1, 2, 3, 4],
+           [0, 1, 2, 3, 4],
+           [0, 1, 2, 3, 4],
+           [0, 1, 2, 3, 4],
+           [0, 1, 2, 3, 4]]),
+     'z': array([[ 0.,  0.,  0.,  0.,  0.],
+           [ 0.,  0.,  0.,  0.,  0.],
+           [ 0.,  0.,  0.,  0.,  0.],
+           [ 0.,  0.,  0.,  0.,  0.],
+           [ 0.,  0.,  0.,  0.,  0.]])}
diff --git a/docs/modeling/new.rst b/docs/modeling/new.rst
new file mode 100644
index 0000000..3e66b23
--- /dev/null
+++ b/docs/modeling/new.rst
@@ -0,0 +1,239 @@
+**************************
+Defining New Model Classes
+**************************
+
+This document describes how to add a model to the package or to create a
+user-defined model. In short, one needs to define all model parameters and
+write an eval function which evaluates the model.  If the model is fittable, a
+function to compute the derivatives is required if a linear fitting algorithm
+is to be used and optional if a non-linear fitter is to be used.
+
+
+Custom 1D models
+----------------
+
+For 1D models, the `~astropy.modeling.functional_models.custom_model_1d`
+decorator is provided to make it very easy to define new models. The following
+example demonstrates how to set up a model consisting of two Gaussians:
+
+.. plot::
+   :include-source:
+
+    import numpy as np
+    from astropy.modeling.models import custom_model_1d
+    from astropy.modeling.fitting import NonLinearLSQFitter
+
+    # Define model
+    @custom_model_1d
+    def sum_of_gaussians(x, amplitude1=1., mean1=-1., sigma1=1.,
+                            amplitude2=1., mean2=1., sigma2=1.):
+        return (amplitude1 * np.exp(-0.5 * ((x - mean1) / sigma1)**2) +
+                amplitude2 * np.exp(-0.5 * ((x - mean2) / sigma2)**2))
+
+    # Generate fake data
+    np.random.seed(0)
+    x = np.linspace(-5., 5., 200)
+    m_ref = sum_of_gaussians(amplitude1=2., mean1=-0.5, sigma1=0.4,
+                             amplitude2=0.5, mean2=2., sigma2=1.0)
+    y = m_ref(x) + np.random.normal(0., 0.1, x.shape)
+
+    # Fit model to data
+    m_init = sum_of_gaussians()
+    fit = NonLinearLSQFitter()
+    m = fit(m_init, x, y)
+
+    # Plot the data and the best fit
+    plt.plot(x, y, 'o', color='k')
+    plt.plot(x, m(x), color='r', lw=2)
+
+A step by step definition of a 1D Gaussian model
+------------------------------------------------
+
+The example described in `Custom 1D models`_ can be used for most 1D cases, but
+the following section described how to construct model classes in general.
+The details are explained below with a 1D Gaussian model as an example.  There
+are two base classes for models. If the model is fittable, it should inherit
+from `~astropy.modeling.core.ParametricModel`; if not it should subclass
+`~astropy.modeling.core.Model`.
+
+If the model takes parameters they should be specified as class attributes in
+the model's class definition using the `~astropy.modeling.parameters.Parameter`
+descriptor.  The first argument for defining the parameter must be a unique (
+to that model) name of the parameter, and it must be identical to the class
+attribute being assigned that parameter.  Subsequent arguments are optional,
+and may include a default value for that parameter as well default constraints
+and custom getters/setters for the parameter value.
+
+.. note::
+
+    If the method which evaluates the model cannot work with multiple parameter
+    sets, `~astropy.modeling.core.Model.param_dim` should not be given as an
+    argument in the ``__init__`` method. The default for
+    `~astropy.modeling.core.Model.param_dim` is set in the base class to 1.
+
+::
+
+    from astropy.modeling import *
+
+    class Gaussian1DModel(ParametricModel):
+        amplitude = Parameter('amplitude')
+        mean = Parameter('mean')
+        stddev = Parameter('stddev')
+
+At a minimum, the ``__init__`` method takes all parameters and the number of
+parameter sets, `~astropy.modeling.core.Model.param_dim`::
+
+    def __init__(self, amplitude, mean, stddev, param_dim=1, **constraints):
+        # Note that this __init__ does nothing different from the base class's
+        # __init__.  The main point of defining it is so that the function
+        # signature is more informative.
+        super(Gaussian1DModel, self).__init__(
+            amplitude=amplitude, mean=mean, stddev=stddev, param_dim=param_dim,
+            **constraints)
+
+.. note::
+
+    If a parameter is defined with a default value you may make the argument
+    for that parameter in the ``__init__`` optional.  Otherwise it is
+    recommended to make it a required argument.  In the above example none of
+    the parameters have default values.
+
+Parametric models can be linear or nonlinear in a regression sense. The default
+value of the `~astropy.modeling.core.Model.linear` attribute is ``True``.
+Nonlinear models should define the ``linear`` class attribute as ``False``.
+The `~astropy.modeling.core.Model.n_inputs` attribute stores the number of
+input variables the model expects.  The
+`~astropy.modeling.core.Model.n_outputs` attribute stores the number of output
+variables returned after evaluating the model.  These two attributes are used
+with composite models.
+
+Next, provide a `staticmethod`, called ``eval`` to evaluate the model and a
+`staticmethod`, called ``deriv``,  to compute its derivatives. The evaluation
+method takes all input coordinates as separate arguments and a parameter set.
+For this example::
+
+    @staticmethod
+    def eval(x, amplitude, mean, stddev):
+        return amplitude * np.exp((-(1 / (2. * stddev**2)) * (x - mean)**2))
+
+The ``deriv`` method takes as input all coordinates as separate arguments.
+There is an option to compute numerical derivatives for nonlinear models in
+which case the ``deriv`` method should be ``None``::
+
+    @staticmethod
+    def deriv(x, ampltidue, mean, stddev):
+        d_amplitude = np.exp((-(1 / (stddev**2)) * (x - mean)**2))
+        d_mean = (2 * amplitude *
+                  np.exp((-(1 / (stddev**2)) * (x - mean)**2)) *
+                  (x - mean) / (stddev**2))
+        d_stddev = (2 * amplitude *
+                    np.exp((-(1 / (stddev**2)) * (x - mean)**2)) *
+                    ((x - mean)**2) / (stddev**3))
+        return [d_amplitude, d_mean, d_stddev]
+
+.. note::
+
+    It's not strictly required that these be staticmethods if the ``eval`` or
+    ``deriv`` functions somehow depend on an attribute of the model class or
+    instance.  But in most cases they simple functions for evaluating the
+    model with the given inputs and parameters.
+
+
+Finally, the ``__call__`` method takes input coordinates as separate arguments.
+It reformats them (if necessary) using the
+`~astropy.modeling.core.format_input` wrapper/decorator and calls the eval
+method to perform the model evaluation using ``model.param_sets`` as
+parameters.  The reason there is a separate eval method is to allow fitters to
+call the eval method with different parameters which is necessary for fitting
+with constraints.::
+
+    @format_input
+    def __call__(self, x):
+        return self.eval(x, *self.param_sets)
+
+
+A full example of a LineModel
+-----------------------------
+
+::
+
+    from astropy.modeling import models, Parameter, format_input
+    import numpy as np
+
+    class LineModel(models.PolynomialModel):
+        slope = Parameter('slope')
+        intercept = Parameter('intercept')
+        linear = True
+
+    def __init__(self, slope, intercept, param_dim=1, **constraints):
+        super(LineModel, self).__init__(slope=slope, intercept=intercept,
+                                        param_dim=param_dim, **constraints)
+        self.domain = [-1, 1]
+        self.window = [-1, 1]
+        self._order = 2
+
+    @staticmethod
+    def eval(x, slope, intercept):
+        return slope * x + intercept
+
+    @staticmethod
+    def deriv(x, slope, intercept):
+        d_slope = x
+        d_intercept = np.ones_like(x)
+        return [d_slope, d_intercept]
+
+    @format_input
+    def __call__(self, x):
+        return self.eval(x, *self.param_sets)
+
+
+***************************
+Defining New Fitter Classes
+***************************
+
+This section describes how to add a new nonlinear fitting algorithm to this
+package or write a user-defined fitter.  In short, one needs to define an error
+function and a ``__call__`` method and define the types of constraints which
+work with this fitter (if any).
+
+The details are described below using scipy's SLSQP algorithm as an example.
+The base class for all fitters is `~astropy.modeling.fitting.Fitter`::
+
+    class SLSQPFitter(Fitter):
+        supported_constraints = ['bounds', 'eqcons', 'ineqcons', 'fixed', 'tied']
+
+        def __init__(self):
+            super(SLSQPFitter,self).__init__()
+
+All fitters take a model (their ``__call__`` method modifies the model's
+parameters) as their first argument.
+
+Next, the error function takes a list of parameters returned by an iteration of
+the fitting algorithm and input coordinates, evaluates the model with them and
+returns some type of a measure for the fit.  In the example the sum of the
+squared residuals is used as a measure of fitting.::
+
+    def errorfunc(self, fps, *args):
+        model = args[0]
+        meas = args[-1]
+        model.fitparams(fps)
+        res = self.model(*args[1:-1]) - meas
+        return np.sum(res**2)
+
+The ``__call__`` method performs the fitting. As a minimum it takes all
+coordinates as separate arguments. Additional arguments are passed as
+necessary.::
+
+    def __call__(self, model, x, y , maxiter=MAXITER, epsilon=EPS):
+        if model.linear:
+                raise ModelLinearityException(
+                    'Model is linear in parameters; '
+                    'non-linear fitting methods should not be used.')
+        model_copy = model.copy()
+        init_values, _ = model_copy._model_to_fit_params()
+        self.fitparams = optimize.fmin_slsqp(self.errorfunc, p0=init_values,
+                                             args=(y, x),
+                                             bounds=self.bounds,
+                                             eqcons=self.eqcons,
+                                             ineqcons=self.ineqcons)
+        return model_copy
diff --git a/docs/modeling/parameters.rst b/docs/modeling/parameters.rst
new file mode 100644
index 0000000..501ee5e
--- /dev/null
+++ b/docs/modeling/parameters.rst
@@ -0,0 +1,95 @@
+**********
+Parameters
+**********
+
+Parameters are used in three different contexts within this package:
+communicating with fitters, model evaluation and getting values to/from users.
+
+Models maintain a list of parameter names,
+`~astropy.modeling.core.Model.param_names`.  Single parameters are instances of
+`~astropy.modeling.parameters.Parameter` which provide a proxy for the actual
+parameter values.  Simple mathematical operations can be performed with them,
+but they also contain additional attributes specific to model parameters, such
+as any constraints on their values. The preferred way for users to interact
+with models is through individual parameters.
+
+The goal of this package is, when possible, to allow simultaneous model
+evaluation and fitting with multiple parameter sets. Because of this, all
+models have a `~astropy.modeling.core.Model.param_sets` attribute, an array of
+shape ``(len(param_names), param_dim)``, where
+`~astropy.modeling.core.Model.param_dim` is the number of parameter sets.
+Typically the array is of type float but can become an object array in some
+cases. `~astropy.modeling.core.Model.param_sets` is used for model evaluation.
+
+In addition, fittable models maintain an attribute,
+`~astropy.modeling.core.ParametricModel.parameters`, which is a flattened 1D
+array of parameter values. It serves as the primary storage of the raw values
+of fittable models' parameters, and is used directly by fitters as an efficient
+means of reading and updating a model's parameters.
+
+
+Parameter examples
+------------------
+
+- Polynomial models are created by default with all coefficients set to 0::
+
+    >>> from astropy.modeling import *
+    >>> p1 = models.Polynomial1D(degree=4)
+    >>> p1.param_names
+    ['c0', 'c1', 'c2', 'c3', 'c4']
+    >>> p1.parameters
+    array([ 0.,  0.,  0.,  0.,  0.])
+
+- Coefficients can be set using the
+  `~astropy.modeling.core.ParametricModel.parameters` attribute::
+
+    >>> p1.parameters = [0, 1, 2, 3, 4]
+    >>> p1.parameters
+    array([ 0.,  1.,  2.,  3.,  4.])
+
+- It is possible to set the coefficients passing the parameters in a
+  dictionary::
+
+    >>> ch2 = models.Chebyshev2D(x_degree=2, y_degree=3, param_dim=2)
+    >>> coeff = dict((name, [idx, idx + 10])
+    ...              for idx, name in enumerate(ch2.param_names))
+    >>> ch2 = models.Chebyshev2D(x_degree=2, y_degree=3, **coeff)
+    INFO: Inferred 2 dimensions when creating a Chebyshev2D model. Resetting param_dim to 2 [astropy.modeling.polynomial] 
+    >>> ch2.param_sets
+    array([[  0.,  10.],
+           [  1.,  11.],
+           [  2.,  12.],
+           [  3.,  13.],
+           [  4.,  14.],
+           [  5.,  15.],
+           [  6.,  16.],
+           [  7.,  17.],
+           [  8.,  18.],
+           [  9.,  19.],
+           [ 10.,  20.],
+           [ 11.,  21.]])
+
+- or directly, using keyword arguments::
+
+    >>> ch2 = models.Chebyshev2D(x_degree=2, y_degree=3,
+    ...                               c0_0=[0, 10], c0_1=[3, 13],
+    ...                               c0_2=[6, 16], c0_3=[9, 19],
+    ...                               c1_0=[1, 11], c1_1=[4, 14],
+    ...                               c1_2=[7, 17], c1_3=[10, 20,],
+    ...                               c2_0=[2, 12], c2_1=[5, 15],
+    ...                               c2_2=[8, 18], c2_3=[11, 21])
+    INFO: Inferred 2 dimensions when creating a Chebyshev2D model. Resetting param_dim to 2 [astropy.modeling.polynomial]
+
+- It is possible to change a single parameter::
+
+    >>> ch2.c0_0
+    Parameter('c0_0', value=array([  0.,  10.]))
+    >>> ch2.c0_0[0] = -34.2
+    >>> ch2.c0_0
+    Parameter('c0_0', value=array([-34.2,  10. ]))
+
+- The number of parameter sets is stored in an attribute
+  `~astropy.modeling.core.Model.param_dim`::
+
+    >>> ch2.param_dim
+    2
diff --git a/docs/nddata/convolution.rst b/docs/nddata/convolution.rst
deleted file mode 100644
index eb55cf4..0000000
--- a/docs/nddata/convolution.rst
+++ /dev/null
@@ -1,112 +0,0 @@
-Convolution
-===========
-
-Introduction
-------------
-
-``astropy.nddata`` includes a convolution function that offers
-improvements compared to the scipy ``astropy.ndimage`` convolution
-routines, including:
-
-* Proper treatment of NaN values
-
-* A single function for 1-D, 2-D, and 3-D convolution
-
-* Improved options for the treatment of edges
-
-* Both direct and Fast Fourier Transform (FFT) versions
-
-The following thumbnails show the difference between Scipy's and
-Astropy's convolve functions on an Astronomical image that contains NaN
-values. Scipy's function essentially returns NaN for all pixels that are
-within a kernel of any NaN value, which is often not the desired result.
-
-.. |original| image:: images/original.png
-.. |scipy| image:: images/scipy.png
-.. |astropy| image:: images/astropy.png
-
-+-----------------------+--------------------+----------------------+
-|        Original       | Scipy ``convolve`` | Astropy ``convolve`` |
-+-----------------------+--------------------+----------------------+
-|       |original|      |       |scipy|      |      |astropy|       |
-+-----------------------+--------------------+----------------------+
-
-
-Usage
------
-
-Two convolution functions are provided.  They are imported as::
-
-    from astropy.nddata import convolve, convolve_fft
-
-and are both used as::
-
-    result = convolve(image, kernel)
-    result = convolve_fft(image, kernel)
-
-`~astropy.nddata.convolution.convolve.convolve` is implemented as a direct
-convolution algorithm, while `~astropy.nddata.convolution.convolve.convolve_fft`
-uses an FFT.  Thus, the former is better for small kernels, while the latter
-is much more efficient for larger kernels.
-
-
-The input images and kernels should be lists or Numpy arrays with either both 1, 2, or 3 dimensions (and the number of dimensions should be the same for the image and kernel). The result is a Numpy array with the same dimensions as the input image. The convolution is always done as floating point.
-
-The ``convolve`` function takes an optional ``boundary=`` argument describing how to perform the convolution at the edge of the array. The values for ``boundary`` can be:
-
-* ``None``: set the result values to zero where the kernel extends beyond the edge of the array (default)
-
-* ``'fill'``: set values outside the array boundary to a constant. If this option is specified, the constant should be specified using the ``fill_value=`` argument, which defaults to zero.
-
-* ``'wrap'``: assume that the boundaries are periodic
-
-* ``'extend'`` : set values outside the array to the nearest array value
-
-By default, the kernel is not normalized. To normalize it prior to convolution, use::
-
-    result = convolve(image, kernel, normalize_kernel=True)
-
-Examples
---------
-
-Smooth a 1D array with a custom kernel and no boundary treatment::
-
-    >>> convolve([1, 4, 5, 6, 5, 7, 8], [0.2, 0.6, 0.2])
-    array([ 0. ,  3.4,  5. ,  5.6,  5.6,  5.2,  0. ])
-
-As above, but using the 'extend' algorithm for boundaries::
-
-    >>> convolve([1, 4, 5, 6, 5, 7, 8], [0.2, 0.6, 0.2], boundary='extend')
-    array([ 1.6,  3.6,  5. ,  5.6,  5.6,  6.8,  7.8])
-
-If a NaN value is present in the original array, it will be interpolated using the kernel::
-
-    >>> convolve([1, 4, 5, 6, np.nan, 7, 8], [0.2, 0.6, 0.2], boundary='extend')
-    array([ 1.6,  3.6,  5. ,  5.9,  6.5,  7.1,  7.8])
-
-Kernels and arrays can be specified either as lists or as Numpy arrays. The following examples show how to construct a 1-d array as a list::
-
-    >>> kernel = [0, 1, 0]
-    >>> result = convolve(spectrum, kernel)
-
-a 2-d array as a list::
-
-    >>> kernel = [[0, 1, 0], \
-                  [1, 2, 1], \
-                  [0, 1, 0]]
-    >>> result = convolve(image, kernel)
-
-and a 3-d array as a list::
-
-    >>> kernel = [[[0, 0, 0], [0, 2, 0], [0, 0, 0]], \
-                  [[0, 1, 0], [2, 3, 2], [0, 1, 0]], \
-                  [[0, 0, 0], [0, 2, 0], [0, 0, 0]]]
-    >>> result = convolve(cube, kernel)
-
-You can also use `~astropy.nddata.convolution.make_kernel.make_kernel`
-to generate common n-dimensional kernels::
-
-    >>> make_kernel([3,3], 1, 'boxcar')
-    array([[ 0.  0.  0.]
-           [ 0.  1.  0.]
-           [ 0.  0.  0.]])
diff --git a/docs/nddata/index.rst b/docs/nddata/index.rst
index ae0e796..167f707 100644
--- a/docs/nddata/index.rst
+++ b/docs/nddata/index.rst
@@ -13,9 +13,6 @@ CCD images, IFU data, grid-based simulation data, ...). This is more than
 just `numpy.ndarray` objects, because it provides metadata that cannot
 be easily provided by a single array.
 
-This subpackage also provides new convolution routines that differ from
-Scipy in that they offer a proper treatment of NaN values.
-
 .. note:: The `~astropy.nddata.nddata.NDData` class is still under
           development, and support for WCS and units is not yet implemented.
 
@@ -25,8 +22,9 @@ Getting started
 An `~astropy.nddata.nddata.NDData` object can be instantiated by passing it an
 n-dimensional Numpy array::
 
+    >>> import numpy as np
     >>> from astropy.nddata import NDData
-    >>> array = np.random.random((12, 12, 12))  # a random 3-dimensional array
+    >>> array = np.zeros((12, 12, 12))  # a 3-dimensional array with all zeros
     >>> ndd = NDData(array)
 
 This object has a few attributes in common with Numpy:
@@ -41,7 +39,7 @@ This object has a few attributes in common with Numpy:
 The underlying Numpy array can be accessed via the `data` attribute::
 
     >>> ndd.data
-    array([[[ 0.05621944,  0.85569765,  0.71609697, ...,  0.76049288,
+    array([[[ 0., 0., 0., ...
     ...
 
 Values can be masked using the `mask` attribute, which should be a boolean
@@ -64,7 +62,6 @@ Using `nddata`
    :maxdepth: 2
 
    nddata.rst
-   convolution.rst
    subclassing.rst
 
 Reference/API
diff --git a/docs/nddata/nddata.rst b/docs/nddata/nddata.rst
index c9ea24f..598aaa7 100644
--- a/docs/nddata/nddata.rst
+++ b/docs/nddata/nddata.rst
@@ -7,8 +7,9 @@ Initializing
 An `~astropy.nddata.nddata.NDData` object can be instantiated by passing it an
 n-dimensional Numpy array::
 
+    >>> import numpy as np
     >>> from astropy.nddata import NDData
-    >>> array = np.random.random((12, 12, 12))  # a random 3-dimensional array
+    >>> array = np.zeros((12, 12, 12))  # a 3-dimensional array with all zeros
     >>> ndd = NDData(array)
 
 or by passing it an `~astropy.nddata.nddata.NDData` object:
@@ -29,8 +30,7 @@ This object has a few attributes in common with Numpy:
 The underlying Numpy array can be accessed via the `data` attribute::
 
     >>> ndd.data
-    array([[[ 0.05621944,  0.85569765,  0.71609697, ...,  0.76049288,
-    ...
+    array([[[ 0.,  0.,  0., ...
 
 Mask
 ----
@@ -127,7 +127,7 @@ numpy arrays::
 
     >>> import numpy as np
     >>> arr = np.array(ndd)
-    >>> np.all(arr == mydataarray)
+    >>> np.all(arr == mydataarray)  # doctest: +SKIP
     True
 
 If a `mask` is defined, this will result in a `~numpy.ma.MaskedArray`, so
@@ -135,8 +135,8 @@ in all cases a useable `numpy.ndarray` or subclass will result. This allows
 straightforward plotting of `~astropy.nddata.nddata.NDData` objects with 1-
 and 2-dimensional datasets using `matplotlib`::
 
-    >>> from matplotlib import pyplot as plt
-    >>> plt.plot(ndd)
+    >>> from matplotlib import pyplot as plt  # doctest: +SKIP
+    >>> plt.plot(ndd)  # doctest: +SKIP
 
 This works because the `matplotlib` plotting functions automatically convert
-their inputs using `numpy.array`.
\ No newline at end of file
+their inputs using `numpy.array`.
diff --git a/docs/overview.rst b/docs/overview.rst
index ade5ad0..4278a41 100644
--- a/docs/overview.rst
+++ b/docs/overview.rst
@@ -37,17 +37,10 @@ Affiliated Packages
 The Astropy project includes the concept of "affiliated packages." An
 affiliated package is an astronomy-related python package that is not
 part of the `astropy` core source code, but has requested to be included
-in the Astropy project. Such a package may be a candidate for eventual
-inclusion in the main `astropy` package (although this is not required).
-
-There is a registry of affiliated packages at
-http://affiliated.astropy.org, and in the near future, the `astropy` core
-will include a tool to install affiliated packages by name. See the
-:mod:`~astropy.config` module documentation for details about the
-affiliated package registry and install tool. Note that affiliated
-packages do not use the `astropy` namespace, which is reserved for the
-core. Instead, they either use their package name directly, or
-`awastropy.packagename` ("affiliated with astropy").
+in the general community effort of the Astropy project. Such a package 
+may be a candidate for eventual inclusion in the main `astropy` package 
+(although this is not required). Until then, however, it is a separate 
+package, and may not be in the `astropy` namespace.
 
 If you are interested in starting an affiliated package, or have a
 package you are interested in making more compatible with astropy, the
@@ -59,7 +52,11 @@ template either with a new package you are starting or an existing
 package to make it more compatible with Astropy and the affiliated
 package installer. See the `usage instructions in the template
 <https://github.com/astropy/package-template/blob/master/README.rst>`_
-for further details.
+for further details. 
+
+Further information about affiliated packages is available at 
+http://affiliated.astropy.org along with the current list of
+endorsed packages.
 
 
 Community
@@ -68,4 +65,7 @@ Community
 Aside from the actual code, Astropy is also a community of
 astronomy-associated users and developers that agree that sharing utilities
 is healthy for the community and the science it produces. This community
-is of course central to accomplishing anything with the code itself.
+is of course central to accomplishing anything with the code itself. 
+We follow the `Python Software Foundation Code of Conduct
+<http://www.python.org/psf/codeofconduct/>`_ and welcome anyone
+who wishes to contribute to the project.
diff --git a/docs/rtd-pip-requirements b/docs/rtd-pip-requirements
index 51f8fa6..5eb27b4 100644
--- a/docs/rtd-pip-requirements
+++ b/docs/rtd-pip-requirements
@@ -1,2 +1,3 @@
-numpy>=1.4.0
+numpy>=1.5.0
+matplotlib
 Cython
diff --git a/docs/stability.rst b/docs/stability.rst
index efe986a..fe638e2 100644
--- a/docs/stability.rst
+++ b/docs/stability.rst
@@ -73,13 +73,24 @@ The current planned and existing sub-packages are:
         </tr>
         <tr>
             <td>
+                astropy.convolution
+            </td>
+            <td align='center'>
+                <img alt="dev" src="_images/dev.png">
+            </td>
+            <td>
+                New top-level package in v0.3 (was previously part of <tt class="docutils literal"><span class="pre">astropy.nddata</span></tt>). Includes a new framework for kernels in v0.3.
+            </td>
+        </tr>
+        <tr>
+            <td>
                 astropy.coordinates
             </td>
             <td align='center'>
                 <img alt="dev" src="_images/dev.png">
             </td>
             <td>
-                New in v0.2
+                New in v0.2, significant API changes in v0.3
             </td>
         </tr>
         <tr>
@@ -117,6 +128,17 @@ The current planned and existing sub-packages are:
         </tr>
         <tr>
             <td>
+                astropy.io.misc
+            </td>
+            <td align='center'>
+                <img alt="mature" src="_images/dev.png">
+            </td>
+            <td>
+                 The functionality that is currently present is stable, but this sub-package will likely see major additions in future.
+            </td>
+        </tr>
+        <tr>
+            <td>
                 astropy.io.votable
             </td>
             <td align='center'>
@@ -128,6 +150,28 @@ The current planned and existing sub-packages are:
         </tr>
         <tr>
             <td>
+                astropy.modeling
+            </td>
+            <td align='center'>
+                <img alt="dev" src="_images/dev.png">
+            </td>
+            <td>
+                New in v0.3
+            </td>
+        </tr>
+        <tr>
+            <td>
+                astropy.nddata
+            </td>
+            <td align='center'>
+                <img alt="dev" src="_images/dev.png">
+            </td>
+            <td>
+                In development, and does not yet contain much functionality apart from a base class for N-dimensional datasets.
+            </td>
+        </tr>
+        <tr>
+            <td>
                 astropy.photometry
             </td>
             <td align='center'>
@@ -197,10 +241,10 @@ The current planned and existing sub-packages are:
                 astropy.vo
             </td>
             <td align='center'>
-                <img alt="planned" src="_images/planned.png">
+                <img alt="dev" src="_images/dev.png">
             </td>
             <td>
-                 
+                Virtual Observatory service access and validation. Currently, only Simple Cone Search is supported.
             </td>
         </tr>
         <tr>
diff --git a/docs/table/access_table.rst b/docs/table/access_table.rst
index 00a97e3..72bb059 100644
--- a/docs/table/access_table.rst
+++ b/docs/table/access_table.rst
@@ -54,7 +54,7 @@ the data contained in that object relate to the original table data
 
   print t      # Print formatted version of table to the screen
   t.pprint()   # Same as above
-  t.pprint(show_units=True)  # Show column units
+  t.pprint(show_unit=True)  # Show column unit
   t.pprint(show_name=False)  # Do not show column names
   t.pprint(max_lines=-1, max_width=-1)  # Print full table no matter how long / wide it is
 
@@ -79,7 +79,7 @@ For all the following examples it is assumed that the table has been created as
   >>> arr = np.arange(15).reshape(5, 3)
   >>> t = Table(arr, names=('a', 'b', 'c'), meta={'keywords': {'key1': 'val1'}})
   >>> t['a'].format = "%6.3f"  # print as a float with 3 digits after decimal point
-  >>> t['a'].units = 'm sec^-1'
+  >>> t['a'].unit = 'm sec^-1'
   >>> t['a'].description = 'unladen swallow velocity'
   >>> print t
     a     b   c
@@ -118,7 +118,7 @@ As expected one can access a table column by name and get an element from that
 column with a numerical index::
 
   >>> t['a']  # Column 'a'
-  <Column name='a' units='m sec^-1' format='%6.3f' description='unladen swallow velocity'>
+  <Column name='a' unit='m sec^-1' format='%6.3f' description='unladen swallow velocity'>
   array([ 0,  3,  6,  9, 12])
 
   >>> t['a'][1]  # Row 1 of column 'a'
@@ -128,8 +128,14 @@ When a table column is printed, either with ``print`` or via the ``str()``
 built-in function, it is formatted according to the ``format`` attribute (see
 :ref:`table_format_string`)::
 
-  >>> print t['a'].description, t['a']
-  unladen swallow velocity  0.000,  3.000,  6.000,  9.000, 12.000
+  >>> print(t['a'])
+      a
+    ------
+     0.000
+     3.000
+     6.000
+     9.000
+    12.000
 
 Likewise a table row and a column from that row can be selected::
 
@@ -159,9 +165,9 @@ meta-data and column definitions are copied.
   array([(6, 7, 8), (9, 10, 11), (12, 13, 14)],
         dtype=[('a', '<i8'), ('b', '<i8'), ('c', '<i8')])
 
-It is possible to select table rows with an array of indexes or by providing
-specifying multiple column names.  This returns a copy of the original table
-for the selected rows.  ::
+It is possible to select table rows with an array of indexes or by specifying
+multiple column names.  This returns a copy of the original table for the
+selected rows or columns.  ::
 
   >>> print t[[1, 3, 4]]  # Table object with rows 1, 3, 4 (copy)
     a     b   c
@@ -177,7 +183,8 @@ for the selected rows.  ::
    9.000  10  11
   12.000  13  14
 
-  >>> print t['a', 'c']  # Table with cols 'a', 'c' (copy)
+  >>> print t['a', 'c']  # or t[['a', 'c']] or t[('a', 'c')]
+  ...                    # Table with cols 'a', 'c' (copy)
     a     c
   ------ ---
    0.000   2
@@ -211,8 +218,9 @@ table using one of several methods:
   or column as a list of fixed-width strings.  This could be used as a quick
   way to save a table.
 
-These methods use column format specifications if available and
-strive to make the output readable.  By default, table and column printing will
+These methods use :ref:`table_format_string`
+if available and strive to make the output readable.
+By default, table and column printing will
 not print the table larger than the available interactive screen size.  If the
 screen size cannot be determined (in a non-interactive environment or on
 Windows) then a default size of 25 rows by 80 columns is used.  If a table is
@@ -267,15 +275,15 @@ pprint() method
 In order to fully control the print output use the Table
 :func:`~astropy.table.table.Table.pprint` or Column
 :func:`~astropy.table.table.Column.pprint` methods.  These have keyword
-arguments ``max_lines``, ``max_width``, ``show_name``, ``show_units`` with
+arguments ``max_lines``, ``max_width``, ``show_name``, ``show_unit`` with
 meaning as shown below::
 
   >>> arr = np.arange(3000, dtype=float).reshape(100, 30)
   >>> t = Table(arr)
   >>> t['col0'].format = '%e'
   >>> t['col1'].format = '%.6f'
-  >>> t['col0'].units = 'km**2'
-  >>> t['col29'].units = 'kg sec m**-2'
+  >>> t['col0'].unit = 'km**2'
+  >>> t['col29'].unit = 'kg sec m**-2'
 
   >>> t.pprint(max_lines=8, max_width=40)
       col0         col1    ... col29
@@ -287,9 +295,9 @@ meaning as shown below::
   2.940000e+03 2941.000000 ... 2969.0
   2.970000e+03 2971.000000 ... 2999.0
 
-  >>> t.pprint(max_lines=8, max_width=40, show_units=True)
+  >>> t.pprint(max_lines=8, max_width=40, show_unit=True)
       col0     ...    col29
-     km**2     ... kg sec m**-2
+      km2      ... kg sec m**-2
   ------------ ... ------------
   0.000000e+00 ...         29.0
   3.000000e+01 ...         59.0
@@ -311,8 +319,7 @@ In order to force printing all values regardless of the output length or width
 set ``max_lines`` or ``max_width`` to ``-1``, respectively.  For the wide
 table in this example one sees 6 lines of wrapped output like the following::
 
-  >>> t.pprint(max_lines=6, max_width=-1)
-
+  >>> t.pprint(max_lines=6, max_width=-1)  # doctest: +SKIP
       col0         col1     col2   col3   col4   col5   col6   col7   col8   col
   9  col10  col11  col12  col13  col14  col15  col16  col17  col18  col19  col20
     col21  col22  col23  col24  col25  col26  col27  col28  col29
@@ -357,7 +364,7 @@ the Table :func:`~astropy.table.table.Table.pformat` or Column
 
   >>> lines = t['col3'].pformat(max_lines=8)
   >>> lines
-  ['  col3', '------', '   3.0', '  33.0', '  63.0', '   ...', '2943.0', '2973.0']
+  [' col3 ', '------', '   3.0', '  33.0', '  63.0', '   ...', '2943.0', '2973.0']
 
 Multidimensional columns
 ''''''''''''''''''''''''
@@ -377,7 +384,7 @@ column name header::
   ...                   [30, 40]]),
   ...         np.array([[ 5,  6],
   ...                   [50, 60]]) ]
-  >>> t.add_column(Column(data=arr, name='a'))
+  >>> t['a'] = arr
   >>> t['a'].shape
   (3, 2, 2)
   >>> t.pprint()
@@ -392,12 +399,10 @@ column representation.  This uses the standard `numpy` mechanism for printing
 any array::
 
   >>> t['a']
-  <Column name='a' units=None format=None description=None>
+  <Column name='a' unit=None format=None description=None>
   array([[[ 1,  2],
           [10, 20]],
-
          [[ 3,  4],
           [30, 40]],
-
          [[ 5,  6],
           [50, 60]]])
diff --git a/docs/table/construct_table.rst b/docs/table/construct_table.rst
index 52d253d..9553ae9 100644
--- a/docs/table/construct_table.rst
+++ b/docs/table/construct_table.rst
@@ -40,11 +40,11 @@ size, columns, or data are not known.
 ::
 
   >>> t = Table()
-  >>> t.add_column(Column(data=[1, 4], name='a'))
-  >>> t.add_column(Column(data=[2.0, 5.0], name='b'))
-  >>> t.add_column(Column(data=['x', 'y'], name='c'))
+  >>> t['a'] = [1, 4]
+  >>> t['b'] = Column([2.0, 5.0], unit='cm', description='Velocity')
+  >>> t['c'] = ['x', 'y']
 
-  >>> t = Table(names=('a', 'b', 'c'), dtypes=('f4', 'i4', 'S2'))
+  >>> t = Table(names=('a', 'b', 'c'), dtype=('f4', 'i4', 'S2'))
   >>> t.add_row((1, 2.0, 'x'))
   >>> t.add_row((4, 5.0, 'y'))
 
@@ -67,7 +67,7 @@ keyword or they will be auto-generated as ``col<N>``.
   >>> t
   <Table rows=2 names=('a','b','c')>
   array([(1, 2.0, 'x'), (4, 5.0, 'y')],
-        dtype=[('a', '<i8'), ('b', '<f8'), ('c', '|S1')])
+        dtype=[('a', '<i8'), ('b', '<f8'), ('c', 'S1')])
 
 **Make a new table using columns from the first table**
 
@@ -77,7 +77,7 @@ and putting this into a Python list, e.g. ``[ t['c'], t['a'] ]``::
   >>> Table([t['c'], t['a']])
   <Table rows=2 names=('c','a')>
   array([('x', 1), ('y', 4)],
-        dtype=[('c', '|S1'), ('a', '<i8')])
+        dtype=[('c', 'S1'), ('a', '<i8')])
 
 **Make a new table using expressions involving columns**
 
@@ -98,15 +98,49 @@ of different data types to initialize a table::
 
   >>> a = (1, 4)
   >>> b = np.array([[2, 3], [5, 6]])  # vector column
-  >>> c = Column(data=['x', 'y'], name='axis')
+  >>> c = Column(['x', 'y'], name='axis')
   >>> arr = (a, b, c)
   >>> Table(arr)  # Data column named "c" has a name "axis" that table
   <Table rows=2 names=('col0','col1','axis')>
   array([(1, [2, 3], 'x'), (4, [5, 6], 'y')],
-        dtype=[('col0', '<i8'), ('col1', '<i8', (2,)), ('axis', '|S1')])
+        dtype=[('col0', '<i8'), ('col1', '<i8', (2,)), ('axis', 'S1')])
 
 Notice that in the third column the existing column name ``'axis'`` is used.
 
+
+**Use row data instead of column data**
+
+You can also initialize a table with row values.  This is constructed as a
+list of dict objects.  The keys determine the column names::
+
+  >>> data = [{'a': 5, 'b': 10}, {'a': 15, 'b': 20}]
+  >>> Table(data)
+  <Table rows=2 names=('a','b')>
+  array([(5, 10), (15, 20)],
+        dtype=[('a', '<i8'), ('b', '<i8')])
+
+Every row must have the same set of keys or a ValueError will be thrown::
+
+  >>> t = Table([{'a': 5, 'b': 10}, {'a': 15, 'b': 30, 'c': 50}])
+  Traceback (most recent call last):
+    ...
+  ValueError: Row 0 has no value for column c
+
+Row input
+"""""""""
+
+You can make a new table from a single row of an existing table::
+
+  >>> a = [1, 4]
+  >>> b = [2.0, 5.0]
+  >>> t = Table([a, b], names=('a', 'b'))
+  >>> t2 = Table(t[1])
+
+Remember that a |Row| has effectively a zero length compared to the
+newly created |Table| which has a length of one.  This is similar to
+the difference between a scalar ``1`` (length 0) and an array like
+``np.array([1])`` with length 1.
+
 Dictionary input
 """"""""""""""""
 A dictionary of column data can be used to initialize a |Table|.
@@ -118,27 +152,27 @@ A dictionary of column data can be used to initialize a |Table|.
   >>> Table(arr)
   <Table rows=2 names=('a','c','b')>
   array([(1, 'x', 2.0), (4, 'y', 5.0)],
-        dtype=[('a', '<i8'), ('c', '|S1'), ('b', '<f8')])
+        dtype=[('a', '<i8'), ('c', 'S1'), ('b', '<f8')])
 
 **Specify the column order and optionally the data types**
 ::
 
-  >>> Table(arr, names=('a', 'b', 'c'), dtypes=('f4', 'i4', 'S2'))
+  >>> Table(arr, names=('a', 'b', 'c'), dtype=('f4', 'i4', 'S2'))
   <Table rows=2 names=('a','b','c')>
   array([(1.0, 2, 'x'), (4.0, 5, 'y')],
-        dtype=[('a', '<f4'), ('b', '<i4'), ('c', '|S2')])
+        dtype=[('a', '<f4'), ('b', '<i4'), ('c', 'S2')])
 
 **Different types of column data**
 
 The input column data can be any data type that can initialize a |Column| object::
 
   >>> arr = {'a': (1, 4),
-             'b': np.array([[2, 3], [5, 6]]),
-             'c': Column(data=['x', 'y'], name='axis')}
+  ...        'b': np.array([[2, 3], [5, 6]]),
+  ...        'c': Column(['x', 'y'], name='axis')}
   >>> Table(arr, names=('a', 'b', 'c'))
   <Table rows=2 names=('a','b','c')>
   array([(1, [2, 3], 'x'), (4, [5, 6], 'y')],
-        dtype=[('a', '<i8'), ('b', '<i8', (2,)), ('c', '|S1')])
+        dtype=[('a', '<i8'), ('b', '<i8', (2,)), ('c', 'S1')])
 
 Notice that the key ``'c'`` takes precendence over the existing column name
 ``'axis'`` in the third column.  Also see that the ``'b'`` column is a vector
@@ -149,11 +183,7 @@ column where each row element is itself a 2-element array.
 
   >>> Table(arr, names=('a_new', 'b_new', 'c_new'))
   Traceback (most recent call last):
-    File "<stdin>", line 2, in <module>
-    File "astropy/table/table.py", line 404, in __init__
-      init_func(data, names, dtypes, n_cols, copy)
-    File "astropy/table/table.py", line 467, in _init_from_dict
-      data_list = [data[name] for name in names]
+    ...
   KeyError: 'a_new'
 
 
@@ -176,7 +206,7 @@ From ``arr`` it is simple to create the corresponding |Table| object::
   >>> Table(arr)
   <Table rows=2 names=('a','b','c')>
   array([(1, 2.0, 'x'), (4, 5.0, 'y')],
-        dtype=[('a', '<i8'), ('b', '<f8'), ('c', '|S2')])
+        dtype=[('a', '<i8'), ('b', '<f8'), ('c', 'S2')])
 
 Note that in the above example and most the following ones we are creating a
 table and immediately asking the interactive Python interpreter to print the
@@ -184,6 +214,10 @@ table to see what we made.  In real code you might do something like::
 
   >>> table = Table(arr)
   >>> print table
+   a   b   c
+  --- --- ---
+    1 2.0   x
+    4 5.0   y
 
 **New column names**
 
@@ -193,21 +227,21 @@ The column names can be changed from the original values by providing the
   >>> Table(arr, names=('a_new', 'b_new', 'c_new'))
   <Table rows=2 names=('a_new','b_new','c_new')>
   array([(1, 2.0, 'x'), (4, 5.0, 'y')],
-        dtype=[('a_new', '<i8'), ('b_new', '<f8'), ('c_new', '|S2')])
+        dtype=[('a_new', '<i8'), ('b_new', '<f8'), ('c_new', 'S2')])
 
 **New data types**
 
-Likewise the data type for each column can by changed with ``dtypes``::
+Likewise the data type for each column can by changed with ``dtype``::
 
-  >>> Table(arr, dtypes=('f4', 'i4', 'S4'))
+  >>> Table(arr, dtype=('f4', 'i4', 'S4'))
   <Table rows=2 names=('a','b','c')>
   array([(1.0, 2, 'x'), (4.0, 5, 'y')],
-        dtype=[('a', '<f4'), ('b', '<i4'), ('c', '|S4')])
+        dtype=[('a', '<f4'), ('b', '<i4'), ('c', 'S4')])
 
-  >>> Table(arr, names=('a_new', 'b_new', 'c_new'), dtypes=('f4', 'i4', 'S4'))
+  >>> Table(arr, names=('a_new', 'b_new', 'c_new'), dtype=('f4', 'i4', 'S4'))
   <Table rows=2 names=('a_new','b_new','c_new')>
   array([(1.0, 2, 'x'), (4.0, 5, 'y')],
-        dtype=[('a_new', '<f4'), ('b_new', '<i4'), ('c_new', '|S4')])
+        dtype=[('a_new', '<f4'), ('b_new', '<i4'), ('c_new', 'S4')])
 
 
 
@@ -231,10 +265,10 @@ generated as ``col<N>`` where ``<N>`` is the column number.
 **Column names and types specified**
 ::
 
-  >>> Table(arr, names=('a_new', 'b_new', 'c_new'), dtypes=('f4', 'i4', 'S4'))
+  >>> Table(arr, names=('a_new', 'b_new', 'c_new'), dtype=('f4', 'i4', 'S4'))
   <Table rows=2 names=('a_new','b_new','c_new')>
   array([(1.0, 2, '3'), (4.0, 5, '6')],
-        dtype=[('a_new', '<f4'), ('b_new', '<i4'), ('c_new', '|S4')])
+        dtype=[('a_new', '<f4'), ('b_new', '<i4'), ('c_new', 'S4')])
 
 **Referencing the original data**
 
@@ -273,7 +307,7 @@ following trick to effectively transpose into a list of columns for
 initializing a |Table| object::
 
    >>> arr = [[1, 2.0, 'string'],  # list of rows
-              [2, 3.0, 'values']]
+   ...        [2, 3.0, 'values']]
    >>> col_arr = zip(*arr)  # transpose to a list of columns
    >>> col_arr
    [(1, 2), (2.0, 3.0), ('string', 'values')]
@@ -287,9 +321,8 @@ table::
   >>> t = Table(names=('a', 'b', 'c'))
   >>> t2 = t['c', 'b', 'a']  # Makes a copy of the data
   >>> print t2
-  <Table rows=0 names=('c','b','a')>
-  array([],
-        dtype=[('c', '<f8'), ('b', '<f8'), ('a', '<f8')])
+   c   b   a
+  --- --- ---
 
 An alternate way to use the ``columns`` attribute (explained in the
 `TableColumns`_ section) to initialize a new table.  This let's you choose
@@ -316,7 +349,7 @@ object with the following arguments, all of which are optional:
     Data to initialize table.
 ``names`` : list
     Specify column names
-``dtypes`` : list
+``dtype`` : list
     Specify column data types
 ``meta`` : dict-like
     Meta-Data associated with the table
@@ -335,7 +368,7 @@ for the ``data`` argument.
 **numpy ndarray (structured array)**
     The base column names are the field names of the ``data`` structured
     array.  The ``names`` list (optional) can be used to select
-    particular fields and/or reorder the base names.  The ``dtypes`` list
+    particular fields and/or reorder the base names.  The ``dtype`` list
     (optional) must match the length of ``names`` and is used to
     override the existing ``data`` types.
 
@@ -347,29 +380,40 @@ for the ``data`` argument.
 
     If provided the ``names`` list must match the "width" of the ``data``
     argument.  The default for ``names`` is to auto-generate column names
-    in the form "col<N>".  If provided the ``dtypes`` list overrides the
+    in the form "col<N>".  If provided the ``dtype`` list overrides the
     base column types and must match the length of ``names``.
 
 **dict-like**
     The keys of the ``data`` object define the base column names.  The
     corresponding values can be Column objects, numpy arrays, or list-like
     objects.  The ``names`` list (optional) can be used to select
-    particular fields and/or reorder the base names.  The ``dtypes`` list
+    particular fields and/or reorder the base names.  The ``dtype`` list
     (optional) must match the length of ``names`` and is used to override
     the existing or default data types.
 
 **list-like**
-    Each item in the ``data`` list provides a column of data values and can
+    Each item in the ``data`` list provides a column of data values and
     can be a Column object, numpy array, or list-like object.  The
     ``names`` list defines the name of each column.  The names will be
     auto-generated if not provided (either from the ``names`` argument or
     by Column objects).  If provided the ``names`` argument must match the
-    number of items in the ``data`` list.  The optional ``dtypes`` list
+    number of items in the ``data`` list.  The optional ``dtype`` list
     will override the existing or default data types and must match
     ``names`` in length.
 
+**list-of-dicts**
+    Similar to Python's builtin ``csv.DictReader``, each item in the
+    ``data`` list provides a row of data values and must be a dict.  The
+    key values in each dict define the column names and each row must
+    have identical column names.  The ``names`` argument may be supplied
+    to specify colum ordering.  If it is not provided, the column order will
+    default to alphabetical.  The ``dtype`` list may be specified, and must
+    correspond to the order of output columns.  If any row's keys do no match
+    the rest of the rows, a ValueError will be thrown.
+
+
 **None**
-    Initialize a zero-length table.  If ``names`` and optionally ``dtypes``
+    Initialize a zero-length table.  If ``names`` and optionally ``dtype``
     are provided then the corresponding columns are created.
 
 names
@@ -387,18 +431,18 @@ argument can be supplied to specify the order of columns.  The ``names`` list
 must then contain each of the keys in the ``data`` dict.  If ``names`` is not
 supplied then the order of columns in the output table is not determinate.
 
-dtypes
-""""""
+dtype
+"""""
 
-The ``dtypes`` argument provides a way to specify the table column data
+The ``dtype`` argument provides a way to specify the table column data
 types or override the existing types.  By default the types are either
 taken from existing types (for ``ndarray`` or ``Table`` input) or
-auto-generated by the ``numpy.array()`` routine.  If ``dtypes`` is provided
+auto-generated by the ``numpy.array()`` routine.  If ``dtype`` is provided
 then it must be a list with the same length as the number of columns.  The
 values must be valid ``numpy.dtype`` initializers or ``None``.  Any list
 elements with value ``None`` fall back to the default type.
 
-In the case where `data` is provided as dict of columns, the ``dtypes`` argument
+In the case where `data` is provided as dict of columns, the ``dtype`` argument
 must be accompanied by a corresponding ``names`` argument in order to uniquely
 specify the column ordering.
 
@@ -452,12 +496,10 @@ Note that when referencing the data it is not possible to change the data types
 since that operation requires making a copy of the data.  In this case an error
 occurs::
 
-  >>> t = Table(arr, copy=False, dtypes=('f4', 'i4', 'S4'))
+  >>> t = Table(arr, copy=False, dtype=('f4', 'i4', 'S4'))
   Traceback (most recent call last):
-    File "<stdin>", line 2, in <module>
-    File "astropy/table/table.py", line 351, in __init__
-      raise ValueError('Cannot specify dtypes when copy=False')
-  ValueError: Cannot specify dtypes when copy=False
+    ...
+  ValueError: Cannot specify dtype when copy=False
 
 Another caveat in using referenced data is that you cannot add new row to the
 table.  This generates an error because of conflict between the two references
@@ -492,10 +534,10 @@ these values:
     Data type for column
 ``description`` : str
     Full description of column
-``units`` : str
-    Physical units
-``format`` : str
-    `Format string`_ for outputting column values
+``unit`` : str
+    Physical unit
+``format`` : str or function
+    `Format specifier`_ for outputting column values
 ``meta`` : dict
     Meta-data associated with the column
 
@@ -508,11 +550,11 @@ The column data values, shape, and data type are specified in one of two ways:
 
   Examples::
 
-    col = Column(data=[1, 2], name='a')  # shape=(2,)
-    col = Column(data=[[1, 2], [3, 4]], name='a')  # shape=(2, 2)
-    col = Column(data=[1, 2], name='a', dtype=float)
-    col = Column(data=np.array([1, 2]), name='a')
-    col = Column(data=['hello', 'world'], name='a')
+    col = Column([1, 2], name='a')  # shape=(2,)
+    col = Column([[1, 2], [3, 4]], name='a')  # shape=(2, 2)
+    col = Column([1, 2], name='a', dtype=float)
+    col = Column(np.array([1, 2]), name='a')
+    col = Column(['hello', 'world'], name='a')
 
   The ``dtype`` argument can be any value which is an acceptable
   fixed-size data-type initializer for the numpy.dtype() method.  See
@@ -538,27 +580,20 @@ The column data values, shape, and data type are specified in one of two ways:
   single cell in the column.  The default ``shape`` is () which means a single value in
   each element.
 
-.. warning::
-
-   In the next major release of `astropy` (0.3), the order of function arguments
-   for creating a |Column| or |MaskedColumn| will change.  Currently the order
-   is ``Column(name, data, ...)``, but in 0.3 and later it will be
-   ``Column(data, name, ...)``.  This improves consistency with |Table| and `numpy`.
+.. note::
 
-   In order to use the same code for Astropy 0.2 and 0.3, column objects should
-   always be created using named keyword arguments for ``data`` and ``name``,
-   as demonstrated in the examples above.  When Astropy 0.3 is released then the
-   the keyword identifiers can be dropped, for instance
-   ``c = Column([1, 2], 'd')``.
+   After setting the type for a column, that type cannot be changed.
+   If data values of a different type are assigned to the column then they
+   will be cast to the existing column type.
 
 .. _table_format_string:
 
-Format string
-'''''''''''''
+Format specifier
+''''''''''''''''
 
-The format string controls the output of column values when a table or column
-is printed or written to an ASCII table.  The format string can be either
-"old-style" or "new-style":
+The format specifier controls the output of column values when a table or column
+is printed or written to an ASCII table.  The format specifier can be either
+a "old-style" or "new-style" format string or a function:
 
 **Old-style**
 
@@ -582,6 +617,32 @@ This corresponds to syntax like ``"{:.4f}".format(value)`` as documented in
 Note that in either case any Python format string that formats exactly
 one value is valid, so ``{:.4f} angstroms`` or ``Value: %12.2f`` would both work.
 
+**Function**
+
+The greatest flexibility can be achieved by setting a formatting function. This
+function must accept a single argument (the value) and return a string. In the
+following example this is used to make a LaTeX ready output::
+
+    >>> t = Table([[1,2],[1.234e9,2.34e-12]], names = ('a','b'))
+    >>> def latex_exp(value):
+    ...     val = '{:8.2}'.format(value)
+    ...     mant, exp = val.split('e')
+    ...     # remove leading zeros
+    ...     exp = exp[0] + exp[1:].lstrip('0')
+    ...     return '$ {0} \\times 10^{{ {1} }}$' .format(mant, exp)
+    >>> t['b'].format = latex_exp
+    >>> t['a'].format = '{0:.4f}'
+    >>> import sys
+    >>> t.write(sys.stdout, format='latex')
+    \begin{table}
+    \begin{tabular}{cc}
+    a & b \\
+    1.0000 & $  1.2 \times 10^{ +9 }$ \\
+    2.0000 & $  2.3 \times 10^{ -12 }$ \\
+    \end{tabular}
+    \end{table}
+
+
 TableColumns
 """"""""""""
 
@@ -619,9 +680,9 @@ So now look at the ways to select columns from a |TableColumns| object:
 ::
 
   >>> t.columns[1]  # Choose columns by index
-  <Column name='b' units=None format=None description=None>
+  <Column name='b' unit=None format=None description=None>
   array([], dtype=float64)
 
   >>> t.columns['b']  # Choose column by name
-  <Column name='b' units=None format=None description=None>
+  <Column name='b' unit=None format=None description=None>
   array([], dtype=float64)
diff --git a/docs/table/index.rst b/docs/table/index.rst
index fd7f86f..3689065 100644
--- a/docs/table/index.rst
+++ b/docs/table/index.rst
@@ -21,7 +21,8 @@ notable features of this package are:
 * Specify a description, units and output formatting for columns.
 * Interactively scroll through long tables similar to using ``more``.
 * Create a new table by selecting rows or columns from a table.
-* Full support for multidimensional columns.
+* Perform :ref:`table_operations` like database joins and concatenation.
+* Manipulate multidimensional columns.
 * Methods for :ref:`read_write_tables` to files
 
 Currently `astropy.table` is used when reading an ASCII table using
@@ -40,7 +41,7 @@ case, while the full `astropy.table` documentation is available from the
 First create a simple table with three columns of data named ``a``, ``b``,
 and ``c``.  These columns have integer, float, and string values respectively::
 
-  >>> from astropy.table import Table, Column
+  >>> from astropy.table import Table
   >>> a = [1, 4, 5]
   >>> b = [2.0, 5.0, 8.2]
   >>> c = ['x', 'y', 'z']
@@ -52,7 +53,7 @@ about the table values and column definitions as follows::
   >>> t
   <Table rows=3 names=('a','b','c')>
   array([(1, 2.0, 'x'), (4, 5.0, 'y'), (5, 8.2, 'z')],
-        dtype=[('a', '<i8'), ('b', '<f8'), ('c', '|S1')])
+        dtype=[('a', '<i8'), ('b', '<f8'), ('c', 'S1')])
 
 From within the IPython notebook, the table is displayed as a formatted HTML table:
 
@@ -71,8 +72,15 @@ then a formatted version appears::
 For a long table you can scroll up and down through the table one page at
 time::
 
-  >>> t.more()
+  >>> t.more()  # doctest: +SKIP
 
+You can also display it as an HTML-formatted table in the browser::
+
+  >>> t.show_in_browser()  # doctest: +SKIP
+
+or as an interactive (searchable & sortable) javascript table::
+
+  >>> t.show_in_browser(jsviewer=True)  # doctest: +SKIP
 
 Now examine some high-level information about the table::
 
@@ -86,7 +94,7 @@ Now examine some high-level information about the table::
 Access the data by column or row using familiar `numpy` structured array syntax::
 
   >>> t['a']       # Column 'a'
-  <Column name='a' units=None format=None description=None>
+  <Column name='a' unit=None format=None description=None>
   array([1, 4, 5])
 
   >>> t['a'][1]    # Row 1 of column 'a'
@@ -95,7 +103,7 @@ Access the data by column or row using familiar `numpy` structured array syntax:
   >>> t[1]         # Row obj for with row 1 values
   <Row 1 of table
    values=(4, 5.0, 'y')
-   dtype=[('a', '<i8'), ('b', '<f8'), ('c', '|S1')]>
+   dtype=[('a', '<i8'), ('b', '<f8'), ('c', 'S1')]>
 
   >>> t[1]['a']    # Column 'a' of row 1
   4
@@ -109,7 +117,7 @@ columns (using column names), where the subset is returned as a new table::
     1 2.0   x
     4 5.0   y
 
-  >>> t['a', 'c']  # Table with cols 'a', 'c'
+  >>> print(t['a', 'c'])  # Table with cols 'a', 'c'
    a   c
   --- ---
     1   x
@@ -132,8 +140,8 @@ Modifying table values in place is flexible and works as one would expect::
 
 Add, remove, and rename columns with the following::
 
-  >>> t.add_column(Column(data=[1, 2, 3], name='d')))
-  >>> t.remove_column('c')
+  >>> t['d'] = [1, 2, 3]
+  >>> del t['c']
   >>> t.rename_column('a', 'A')
   >>> t.colnames
   ['A', 'b', 'd']
@@ -154,10 +162,10 @@ Lastly, one can create a table with support for missing values, for example by s
   masked_array(data = [(--, 2.0, 'x') (--, 5.0, 'y') (5, 8.2, 'z')],
                mask = [(True, False, False) (True, False, False) (False, False, False)],
          fill_value = (999999, 1e+20, 'N'),
-              dtype = [('a', '<i8'), ('b', '<f8'), ('c', '|S1')])
-  
+              dtype = [('a', '<i8'), ('b', '<f8'), ('c', 'S1')])
+
   >>> print(t)
-   a   b   c 
+   a   b   c
   --- --- ---
    -- 2.0   x
    -- 5.0   y
@@ -170,13 +178,52 @@ Using `table`
 
 The details of using `astropy.table` are provided in the following sections:
 
+Construct table
+---------------
+
 .. toctree::
    :maxdepth: 2
 
    construct_table.rst
+
+Access table
+---------------
+
+.. toctree::
+   :maxdepth: 2
+
    access_table.rst
+
+Modify table
+---------------
+
+.. toctree::
+   :maxdepth: 2
+
    modify_table.rst
+
+Table operations
+-----------------
+
+.. toctree::
+   :maxdepth: 2
+
+   operations.rst
+
+Masking
+---------------
+
+.. toctree::
+   :maxdepth: 2
+
    masking.rst
+
+I/O with tables
+----------------
+
+.. toctree::
+   :maxdepth: 2
+
    io.rst
 
 Reference/API
diff --git a/docs/table/io.rst b/docs/table/io.rst
index 380d84b..ed91590 100644
--- a/docs/table/io.rst
+++ b/docs/table/io.rst
@@ -1,15 +1,20 @@
+.. doctest_skip
+
 .. _read_write_tables:
 
 Reading and writing Table objects
 ===================================
 
 Astropy provides a unified interface for reading and writing data
-in different formats.  For many common cases this will 
+in different formats.  For many common cases this will
 simplify the process of file I/O and reduce the need to master
-the separate details of all the I/O packages within Astropy.  For details and 
-examples of using this interface see the :ref:`table_io` 
+the separate details of all the I/O packages within Astropy.  For details and
+examples of using this interface see the :ref:`table_io`
 section.
 
+Getting started
+----------------
+
 The :class:`~astropy.table.table.Table` class includes two methods,
 :meth:`~astropy.table.table.Table.read` and
 :meth:`~astropy.table.table.Table.write`, that make it possible to read from
@@ -18,3 +23,36 @@ and write to files. A number of formats are automatically supported (see
 registered with the :class:`~astropy.table.table.Table` class (see
 :ref:`io_registry`).
 
+To use this interface, first import the :class:`~astropy.table.table.Table` class, then
+simply call the :class:`~astropy.table.table.Table`
+:meth:`~astropy.table.table.Table.read` method with the name of the file and
+the file format, for instance ``'ascii.daophot'``::
+
+    >>> from astropy.table import Table
+    >>> t = Table.read('photometry.dat', format='ascii.daophot')
+
+For certain file formats, the format can be automatically detected, for
+example from the filename extension::
+
+    >>> t = Table.read('table.tex')
+
+Similarly, for writing, the format can be explicitly specified::
+
+    >>> t.write(filename, format='latex')
+
+As for the :meth:`~astropy.table.table.Table.read` method, the format may
+be automatically identified in some cases.
+
+Any additional arguments specified will depend on the format.  For examples of this see the
+section :ref:`built_in_readers_writers`.  This section also provides the full list of
+choices for the ``format`` argument.
+
+Supported formats
+------------------
+
+The  :ref:`table_io` has built-in support for the following data file formats:
+
+* :ref:`table_io_ascii`
+* :ref:`table_io_hdf5`
+* :ref:`table_io_fits`
+* :ref:`table_io_votable`
diff --git a/docs/table/masking.rst b/docs/table/masking.rst
index 179ae3a..dc24492 100644
--- a/docs/table/masking.rst
+++ b/docs/table/masking.rst
@@ -30,12 +30,6 @@ on masked arrays
    interesting discussion of different strategies for handling
    missing data in the context of `numpy`.
 
-.. Note::
-
-   Masked tables are only available for `numpy` version 1.5 and later
-   because of issues in the masked array implementation for
-   prior `numpy` versions.
-
 Table creation
 ^^^^^^^^^^^^^^^
 
@@ -51,14 +45,15 @@ A masked table can be created in several ways:
                mask = [(False, False) (False, False)],
          fill_value = (999999, 999999),
               dtype = [('a', '<i8'), ('b', '<i8')])
+  <BLANKLINE>
 
 Notice the table attributes ``mask`` and ``fill_value`` that are
 available for a masked table.
 
 **Create a table with one or more columns as a MaskedColumn object**
 
-  >>> a = MaskedColumn(data=[1, 2], name='a')
-  >>> b = Column(data=[3, 4], name='b')
+  >>> a = MaskedColumn([1, 2], name='a')
+  >>> b = Column([3, 4], name='b')
   >>> t = Table([a, b])
 
 The |MaskedColumn| is the masked analog of the |Column| class and
@@ -77,18 +72,17 @@ different classes for these two cases.
 
 **Add a MaskedColumn object to an existing table**
 
-  >>> a = Column(data=[1, 2], name='a')
-  >>> b = MaskedColumn(data=[3, 4], name='b', mask=[True, False])
-  >>> t = Table([a])
-  >>> t.add_column(b)
+  >>> t = Table([[1, 2]], names=['a'])
+  >>> b = MaskedColumn([3, 4], mask=[True, False])
+  >>> t['b'] = b
   INFO: Upgrading Table to masked Table [astropy.table.table]
 
 Note the INFO message because the underlying type of the table is modified in this operation.
 
 **Add a new row to an existing table and specify a mask argument**
 
-  >>> a = Column(data=[1, 2], name='a')
-  >>> b = Column(data=[3, 4], name='b')
+  >>> a = Column([1, 2], name='a')
+  >>> b = Column([3, 4], name='b')
   >>> t = Table([a, b])
   >>> t.add_row([3, 6], mask=[True, False])
   INFO: Upgrading Table to masked Table [astropy.table.table]
@@ -105,7 +99,7 @@ Nearly all the of standard methods for accessing and modifying data
 columns, rows, and individual elements also apply to masked tables.
 
 There are two minor differences for the |Row| object that is obtained by
-indexing a single row of a table:  
+indexing a single row of a table:
 
 - For standard tables, two such rows can be compared for equality, but
   in masked tables this comparison will produce an exception.
@@ -120,7 +114,7 @@ Both of these differences are due to issues in the underlying
 Masking and filling
 ^^^^^^^^^^^^^^^^^^^^
 
-Both the |Table| and |MaskedColumn| classes provide 
+Both the |Table| and |MaskedColumn| classes provide
 attributes and methods to support manipulating tables with missing or
 invalid data.
 
@@ -131,9 +125,10 @@ The actual mask for the table as a whole or a single column can be
 viewed and modified via the ``mask`` attribute::
 
   >>> t = Table([(1, 2), (3, 4)], names=('a', 'b'), masked=True)
+  >>> t['a'].mask = [False, True]  # Modify column mask (boolean array)
   >>> t['b'].mask = [True, False]  # Modify column mask (boolean array)
   >>> print(t)
-   a   b 
+   a   b
   --- ---
     1  --
    --   4
@@ -157,25 +152,25 @@ attribute.
   >>> t['b'].fill_value = 33
 
   >>> print t.filled()
-   a   b 
+   a   b
   --- ---
     1  33
   -99   4
 
   >>> print t['a'].filled()
-   a 
+   a
   ---
     1
   -99
 
   >>> print t['a'].filled(999)
-   a 
+   a
   ---
     1
   999
 
   >>> print t.filled(1000)
-   a    b  
+   a    b
   ---- ----
      1 1000
   1000    4
diff --git a/docs/table/modify_table.rst b/docs/table/modify_table.rst
index 692140d..32481cf 100644
--- a/docs/table/modify_table.rst
+++ b/docs/table/modify_table.rst
@@ -20,7 +20,7 @@ The code below shows the basics of modifying a table and its data.
 **Make a table**
 ::
 
-  >>> from astropy.table import Table, Column
+  >>> from astropy.table import Table
   >>> import numpy as np
   >>> arr = np.arange(15).reshape(5, 3)
   >>> t = Table(arr, names=('a', 'b', 'c'), meta={'keywords': {'key1': 'val1'}})
@@ -36,23 +36,42 @@ The code below shows the basics of modifying a table and its data.
 
 **Add a column or columns**
 
-The :func:`~astropy.table.table.add_column` and :func:`~astropy.table.table.add_columns`
-functions can be used to add one or multiple columns to a table.  In both cases the new
-columns must be specified as |Column| or |MaskedColumn| objects.
-::
+A single column can be added to a table using syntax like adding a dict value.
+The value on the right hand side can be a list or array
+of the correct size, or a scalar value that will be broadcast::
+
+  >>> t['d1'] = np.arange(5)
+  >>> t['d2'] = [1, 2, 3, 4, 5]
+  >>> t['d3'] = 6  # all 5 rows set to 6
+
+For more explicit control the :meth:`~astropy.table.table.Table.add_column` and
+:meth:`~astropy.table.table.Table.add_columns` methods can be used to add one or multiple
+columns to a table.  In both cases the new columns must be specified as |Column| or
+|MaskedColumn| objects with the ``name`` defined::
 
-  >>> c = Column(data=np.arange(5), name='d')
-  >>> t.add_column(c)
+  >>> from astropy.table import Column
+  >>> aa = Column(np.arange(5), name='aa')
+  >>> t.add_column(aa, index=0)  # Insert before the first table column
 
   # Make a new table with the same number of rows and add columns to original table
   >>> t2 = Table(np.arange(25).reshape(5, 5), names=('e', 'f', 'g', 'h', 'i'))
   >>> t.add_columns(t2.columns.values())
 
+Finally, columns can also be added from
+:class:`~astropy.units.quantity.Quantity` objects, which automatically sets the
+``.unit`` attribute on the column:
+
+  >>> from astropy import units as u
+  >>> t['d'] = [1, 2, 3, 4, 5] * u.m
+  >>> t['d']
+  <Column name='d' unit='m' format=None description=None>
+  array([1, 2, 3, 4, 5])
+
 **Remove columns**
 ::
 
   >>> t.remove_column('f')
-  >>> t.remove_columns(['d', 'e'])
+  >>> t.remove_columns(['aa', 'd1', 'd2', 'd3', 'e'])
   >>> del t['g']
   >>> del t['h', 'i']
   >>> t.keep_columns(['a', 'b'])
@@ -68,6 +87,13 @@ columns must be specified as |Column| or |MaskedColumn| objects.
 
   >>> t.add_row([-8, -9])
 
+**Remove rows**
+::
+
+  >>> t.remove_row(0)
+  >>> t.remove_rows(slice(4, 5))
+  >>> t.remove_rows([1, 2])
+
 **Sort by one more more columns**
 ::
 
@@ -84,19 +110,19 @@ columns must be specified as |Column| or |MaskedColumn| objects.
 
   >>> t.meta['key'] = 'value'
 
-**Reorder columns**
+**Select or reorder columns**
 
-.. note::
+A new table with a subset or reordered list of columns can be
+created as shown in the following example::
 
-  In this example, it is important that `neworder` is a tuple, and not a
-  list, slice, or `~numpy.ndarray`.
+  >>> t = Table(arr, names=('a', 'b', 'c'))
+  >>> t_acb = t['a', 'c', 'b']
 
-::
-
-  >>> t_acb = t['a','c','b']
-  >>> neworder = ('a','c','b')
-  >>> t_acb = t[neworder]
+Another way to do the same thing is to provide a list or tuple
+as the item as shown below::
 
+  >>> new_order = ['a', 'c', 'b']  # List or tuple
+  >>> t_acb = t[new_order]
 
 Caveats
 ^^^^^^^
@@ -121,7 +147,7 @@ using column selection with ``t['a', 'c']`` in combination with row index select
   >>> t = Table([[1, 2], [3, 4], [5, 6]], names=('a', 'b', 'c'))
   >>> t['a', 'c'][1] = (100, 100)
   >>> print t
-   a   b   c 
+   a   b   c
   --- --- ---
     1   3   5
     2   4   6
@@ -133,4 +159,3 @@ row 1 of the copy.  The original ``t`` table was unaffected and the new
 temporary table disappeared once the statement was complete.  The takeaway
 is to pay attention to how certain operations are performed one step at
 a time.
-
diff --git a/docs/table/operations.rst b/docs/table/operations.rst
new file mode 100644
index 0000000..d295d7d
--- /dev/null
+++ b/docs/table/operations.rst
@@ -0,0 +1,748 @@
+.. include:: references.txt
+.. |join| replace:: :func:`~astropy.table.operations.join`
+
+.. _table_operations:
+
+Table operations
+-----------------
+
+In this section we describe higher-level operations that can be used to generate a new
+table from one or more input tables.  This includes:
+
+=======================
+
+.. list-table::
+   :header-rows: 1
+   :widths: 28 52 20
+
+   * - Documentation
+     - Description
+     - Function
+   * - `Grouped operations`_
+     - Group tables and columns by keys
+     - `~astropy.table.table.Table.group_by`
+   * - `Stack vertically`_
+     - Concatenate input tables along rows
+     - `~astropy.table.operations.vstack`
+   * - `Stack horizontally`_
+     - Concatenate input tables along columns
+     - `~astropy.table.operations.hstack`
+   * - `Join`_
+     - Database-style join of two tables
+     - `~astropy.table.operations.join`
+
+
+.. _grouped-operations:
+
+Grouped operations
+^^^^^^^^^^^^^^^^^^
+
+Sometimes in a table or table column there are natural groups within the dataset for which
+it makes sense to compute some derived values.  A simple example is a list of objects with
+photometry from various observing runs::
+
+  >>> from astropy.table import Table
+  >>> obs = Table.read("""name    obs_date    mag_b  mag_v
+  ...                     M31     2012-01-02  17.0   17.5
+  ...                     M31     2012-01-02  17.1   17.4
+  ...                     M101    2012-01-02  15.1   13.5
+  ...                     M82     2012-02-14  16.2   14.5
+  ...                     M31     2012-02-14  16.9   17.3
+  ...                     M82     2012-02-14  15.2   15.5
+  ...                     M101    2012-02-14  15.0   13.6
+  ...                     M82     2012-03-26  15.7   16.5
+  ...                     M101    2012-03-26  15.1   13.5
+  ...                     M101    2012-03-26  14.8   14.3
+  ...                     """, format='ascii')
+
+Table groups
+~~~~~~~~~~~~~~
+
+Now suppose we want the mean magnitudes for each object.  We first group the data by the
+``name`` column with the :func:`~astropy.table.table.Table.group_by` method.  This returns
+a new table sorted by ``name`` which has a ``groups`` property specifying the unique
+values of ``name`` and the corresponding table rows::
+
+  >>> obs_by_name = obs.group_by('name')
+  >>> print obs_by_name  # doctest: +SKIP
+  name  obs_date  mag_b mag_v
+  ---- ---------- ----- -----
+  M101 2012-01-02  15.1  13.5  << First group (index=0, key='M101')
+  M101 2012-02-14  15.0  13.6
+  M101 2012-03-26  15.1  13.5
+  M101 2012-03-26  14.8  14.3
+   M31 2012-01-02  17.0  17.5  << Second group (index=4, key='M31')
+   M31 2012-01-02  17.1  17.4
+   M31 2012-02-14  16.9  17.3
+   M82 2012-02-14  16.2  14.5  << Third group (index=7, key='M83')
+   M82 2012-02-14  15.2  15.5
+   M82 2012-03-26  15.7  16.5
+                               << End of groups (index=10)
+  >>> print obs_by_name.groups.keys
+  name
+  ----
+  M101
+   M31
+   M82
+  >>> print obs_by_name.groups.indices
+  [ 0  4  7 10]
+
+The ``groups`` property is the portal to all grouped operations with tables and columns.
+It defines how the table is grouped via an array of the unique row key values and the
+indices of the group boundaries for those key values.  The groups here correspond to the
+row slices ``0:4``, ``4:7``, and ``7:10`` in the ``obs_by_name`` table.
+
+The initial argument (``keys``) for the `~astropy.table.table.Table.group_by` function
+can take a number of input data types:
+
+- Single string value with a table column name (as shown above)
+- List of string values with table column names
+- Another `Table` or `Table` column with same length as table
+- Numpy structured array with same length as table
+- Numpy homogeneous array with same length as table
+
+In all cases the corresponding row elements are considered as a tuple of values which
+form a key value that is used to sort the original table and generate
+the required groups.
+
+As an example, to get the average magnitudes for each object on each observing
+night, we would first group the table on both ``name`` and ``obs_date`` as follows::
+
+  >>> print obs.group_by(['name', 'obs_date']).groups.keys
+  name  obs_date
+  ---- ----------
+  M101 2012-01-02
+  M101 2012-02-14
+  M101 2012-03-26
+   M31 2012-01-02
+   M31 2012-02-14
+   M82 2012-02-14
+   M82 2012-03-26
+
+
+Manipulating groups
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Once you have applied grouping to a table then you can easily access the individual
+groups or subsets of groups.  In all cases this returns a new grouped table.
+For instance to get the sub-table which corresponds to the second group (index=1)
+do::
+
+  >>> print obs_by_name.groups[1]
+  name  obs_date  mag_b mag_v
+  ---- ---------- ----- -----
+   M31 2012-01-02  17.0  17.5
+   M31 2012-01-02  17.1  17.4
+   M31 2012-02-14  16.9  17.3
+
+To get the first and second groups together use a slice::
+
+  >>> groups01 = obs_by_name.groups[0:2]
+  >>> print groups01
+  name  obs_date  mag_b mag_v
+  ---- ---------- ----- -----
+  M101 2012-01-02  15.1  13.5
+  M101 2012-02-14  15.0  13.6
+  M101 2012-03-26  15.1  13.5
+  M101 2012-03-26  14.8  14.3
+   M31 2012-01-02  17.0  17.5
+   M31 2012-01-02  17.1  17.4
+   M31 2012-02-14  16.9  17.3
+  >>> print groups01.groups.keys
+  name
+  ----
+  M101
+   M31
+
+You can also supply a numpy array of indices or a boolean mask to select particular
+groups, e.g.::
+
+  >>> mask = obs_by_name.groups.keys == 'M101'
+  >>> print obs_by_name.groups[mask]
+  name  obs_date  mag_b mag_v
+  ---- ---------- ----- -----
+  M101 2012-01-02  15.1  13.5
+  M101 2012-02-14  15.0  13.6
+  M101 2012-03-26  15.1  13.5
+  M101 2012-03-26  14.8  14.3
+
+One can iterate over the group sub-tables and corresponding keys with::
+
+  >>> from itertools import izip
+  >>> for key, group in izip(obs_by_name.groups.keys, obs_by_name.groups):
+  ...     print('****** {0} *******'.format(key['name']))
+  ...     print group
+  ...     print
+  ...
+  ****** M101 *******
+  name  obs_date  mag_b mag_v
+  ---- ---------- ----- -----
+  M101 2012-01-02  15.1  13.5
+  M101 2012-02-14  15.0  13.6
+  M101 2012-03-26  15.1  13.5
+  M101 2012-03-26  14.8  14.3
+  ****** M31 *******
+  name  obs_date  mag_b mag_v
+  ---- ---------- ----- -----
+   M31 2012-01-02  17.0  17.5
+   M31 2012-01-02  17.1  17.4
+   M31 2012-02-14  16.9  17.3
+  ****** M82 *******
+  name  obs_date  mag_b mag_v
+  ---- ---------- ----- -----
+   M82 2012-02-14  16.2  14.5
+   M82 2012-02-14  15.2  15.5
+   M82 2012-03-26  15.7  16.5
+
+Column Groups
+~~~~~~~~~~~~~~
+
+Like `Table` objects, `Column` objects can also be grouped for subsequent
+manipulation with grouped operations.  This can apply both to columns within a
+`Table` or bare `Column` objects.
+
+As for `Table`, the grouping is generated with the `group_by()` method.  The
+difference here is that there is no option of providing one or more column
+names since that doesn't make sense for a `Column`.
+
+Examples::
+
+  >>> from astropy.table import Column
+  >>> import numpy as np
+  >>> c = Column([1, 2, 3, 4, 5, 6], name='a')
+  >>> key_vals = np.array(['foo', 'bar', 'foo', 'foo', 'qux', 'qux'])
+  >>> cg = c.group_by(key_vals)
+
+  >>> for key, group in izip(cg.groups.keys, cg.groups):
+  ...     print('****** {0} *******'.format(key))
+  ...     print group
+  ...     print
+  ...
+  ****** bar *******
+   a
+  ---
+    2
+  ****** foo *******
+   a
+  ---
+    1
+    3
+    4
+  ****** qux *******
+   a
+  ---
+    5
+    6
+
+
+Aggregation
+~~~~~~~~~~~~~~
+
+Aggregation is the process of applying a
+specified reduction function to the values within each group for each
+non-key column.  This function must accept a numpy array as the first
+argument and return a single scalar value.  Common function examples are
+`numpy.sum`, `numpy.mean`, and `numpy.std`.
+
+For the example grouped table ``obs_by_name`` from above we compute the group means with
+the `~astropy.table.groups.TableGroups.aggregate` method::
+
+  >>> obs_mean = obs_by_name.groups.aggregate(np.mean)  # doctest: +SKIP
+  WARNING: Cannot aggregate column 'obs_date' [astropy.table.groups]
+  >>> print obs_mean  # doctest: +SKIP
+  name mag_b mag_v
+  ---- ----- ------
+  M101  15.0 13.725
+   M31  17.0   17.4
+   M82  15.7   15.5
+
+It seems the magnitude values were successfully averaged, but what
+about the WARNING?  Since the ``obs_date`` column is a string-type
+array, the `numpy.mean` function failed and raised an exception.
+Any time this happens then ``~astropy.table.groups.TableGroups.aggregate`
+will issue a warning and then
+drop that column from the output result.  Note that the ``name``
+column is one of the ``keys`` used to determine the grouping so
+it is automatically ignored from aggregation.
+
+From a grouped table it is possible to select one or more columns on which
+to perform the aggregation::
+
+  >>> print obs_by_name['mag_b'].groups.aggregate(np.mean)
+  mag_b
+  -----
+   15.0
+   17.0
+   15.7
+
+  >>> print obs_by_name['name', 'mag_v', 'mag_b'].groups.aggregate(np.mean)
+  name mag_v  mag_b
+  ---- ------ -----
+  M101 13.725  15.0
+   M31   17.4  17.0
+   M82   15.5  15.7
+
+A single column of data can be aggregated as well::
+
+  >>> c = Column([1, 2, 3, 4, 5, 6], name='a')
+  >>> key_vals = np.array(['foo', 'bar', 'foo', 'foo', 'qux', 'qux'])
+  >>> cg = c.group_by(key_vals)
+  >>> cg_sums = cg.groups.aggregate(np.sum)
+  >>> for key, cg_sum in izip(cg.groups.keys, cg_sums):
+  ...     print 'Sum for {0} = {1}'.format(key, cg_sum)
+  ...
+  Sum for bar = 2
+  Sum for foo = 8
+  Sum for qux = 11
+
+
+Filtering
+~~~~~~~~~~
+
+Table groups can be filtered by means of the
+`~astropy.table.groups.TableGroups.filter` method.  This is done by
+supplying a function which is called for each group.  The function
+which is passed to this method must accept two arguments:
+
+- ``table`` : `Table` object
+- ``key_colnames`` : list of columns in ``table`` used as keys for grouping
+
+It must then return either `True` or `False`.  As an example, the following
+will select all table groups with only positive values in the non-key columns::
+
+  >>> def all_positive(table, key_colnames):
+  ...     colnames = [name for name in table.colnames if name not in key_colnames]
+  ...     for colname in colnames:
+  ...         if np.any(table[colname] < 0):
+  ...             return False
+  ...     return True
+
+An example of using this function is::
+
+  >>> t = Table.read(""" a   b    c
+  ...                   -2  7.0   0
+  ...                   -2  5.0   1
+  ...                    1  3.0  -5
+  ...                    1 -2.0  -6
+  ...                    1  1.0   7
+  ...                    0  0.0   4
+  ...                    3  3.0   5
+  ...                    3 -2.0   6
+  ...                    3  1.0   7""", format='ascii')
+  >>> tg = t.group_by('a')
+  >>> t_positive = tg.groups.filter(all_positive)
+  >>> for group in t_positive.groups:
+  ...     print group
+  ...     print
+  ...
+   a   b   c
+  --- --- ---
+   -2 7.0   0
+   -2 5.0   1
+  <BLANKLINE>
+   a   b   c
+  --- --- ---
+    0 0.0   4
+
+As can be seen only the groups with ``a == -2`` and ``a == 0`` have all positive values
+in the non-key columns, so those are the ones that are selected.
+
+Likewise a grouped column can be filtered with the
+`~astropy.table.groups.ColumnGroups.filter`, method but in this case the filtering
+function takes only a single argument which is the column group.  It still must return
+either `True` or `False`.  For example::
+
+  def all_positive(column):
+      if np.any(column < 0):
+          return False
+      return True
+
+.. _stack-vertically:
+
+Stack vertically
+^^^^^^^^^^^^^^^^^^^^
+
+The |Table| class supports stacking tables vertically with the
+`~astropy.table.operations.vstack` function.  This process is also commonly known as
+concatenating or appending tables in the row direction.  It corresponds roughly
+to the `numpy.vstack` function.
+
+For example, suppose one has two tables of observations with several
+column names in common::
+
+  >>> from astropy.table import Table, vstack
+  >>> obs1 = Table.read("""name    obs_date    mag_b  logLx
+  ...                      M31     2012-01-02  17.0   42.5
+  ...                      M82     2012-10-29  16.2   43.5
+  ...                      M101    2012-10-31  15.1   44.5""", format='ascii')
+
+  >>> obs2 = Table.read("""name    obs_date    logLx
+  ...                      NGC3516 2011-11-11  42.1
+  ...                      M31     1999-01-05  43.1
+  ...                      M82     2012-10-30  45.0""", format='ascii')
+
+Now we can stack these two tables::
+
+  >>> print vstack([obs1, obs2])
+    name   obs_date  mag_b logLx
+  ------- ---------- ----- -----
+      M31 2012-01-02  17.0  42.5
+      M82 2012-10-29  16.2  43.5
+     M101 2012-10-31  15.1  44.5
+  NGC3516 2011-11-11    --  42.1
+      M31 1999-01-05    --  43.1
+      M82 2012-10-30    --  45.0
+
+Notice that the ``obs2`` table is missing the ``mag_b`` column, so in the stacked output
+table those values are marked as missing.  This is the default behavior and corresponds to
+``join_type='outer'``.  There are two other allowed values for the ``join_type`` argument,
+``'inner'`` and ``'exact'``::
+
+  >>> print vstack([obs1, obs2], join_type='inner')
+    name   obs_date  logLx
+  ------- ---------- -----
+      M31 2012-01-02  42.5
+      M82 2012-10-29  43.5
+     M101 2012-10-31  44.5
+  NGC3516 2011-11-11  42.1
+      M31 1999-01-05  43.1
+      M82 2012-10-30  45.0
+
+  >>> print vstack([obs1, obs2], join_type='exact')
+  Traceback (most recent call last):
+    ...
+  TableMergeError: Inconsistent columns in input arrays (use 'inner'
+  or 'outer' join_type to allow non-matching columns)
+
+In the case of ``join_type='inner'``, only the common columns (the intersection) are
+present in the output table.  When ``join_type='exact'`` is specified then
+`~astropy.table.operations.vstack` requires that all the input tables
+have exactly the same column names.
+
+More than two tables can be stacked by supplying a list of table objects::
+
+  >>> obs3 = Table.read("""name    obs_date    mag_b  logLx
+  ...                      M45     2012-02-03  15.0   40.5""", format='ascii')
+  >>> print vstack([obs1, obs2, obs3])
+    name   obs_date  mag_b logLx
+  ------- ---------- ----- -----
+      M31 2012-01-02  17.0  42.5
+      M82 2012-10-29  16.2  43.5
+     M101 2012-10-31  15.1  44.5
+  NGC3516 2011-11-11    --  42.1
+      M31 1999-01-05    --  43.1
+      M82 2012-10-30    --  45.0
+      M45 2012-02-03  15.0  40.5
+
+See also the sections on `Merging metadata`_ and `Merging column
+attributes`_ for details on how these characteristics of the input tables are merged in
+the single output table.  Note also that you can use a single table row instead of a
+full table as one of the inputs.
+
+.. _stack-horizontally:
+
+Stack horizontally
+^^^^^^^^^^^^^^^^^^^^^
+
+The |Table| class supports stacking tables horizontally (in the column-wise direction) with the
+`~astropy.table.operations.hstack` function.    It corresponds roughly
+to the `numpy.hstack` function.
+
+For example, suppose one has the following two tables::
+
+  >>> from astropy.table import Table, hstack
+  >>> t1 = Table.read("""a   b    c
+  ...                    1   foo  1.4
+  ...                    2   bar  2.1
+  ...                    3   baz  2.8""", format='ascii')
+  >>> t2 = Table.read("""d     e
+  ...                    ham   eggs
+  ...                    spam  toast""", format='ascii')
+
+Now we can stack these two tables horizontally::
+
+  >>> print hstack([t1, t2])
+   a   b   c   d     e
+  --- --- --- ---- -----
+    1 foo 1.4  ham  eggs
+    2 bar 2.1 spam toast
+    3 baz 2.8   --    --
+
+As with `~astropy.table.operations.vstack`, there is an optional ``join_type`` argument
+that can take values ``'inner'``, ``'exact'``, and ``'outer'``.  The default is
+``'outer'``, which effectively takes the union of available rows and masks out any missing
+values.  This is illustrated in the example above.  The other options give the
+intersection of rows, where ``'exact'`` requires that all tables have exactly the same
+number of rows::
+
+  >>> print hstack([t1, t2], join_type='inner')
+   a   b   c   d     e
+  --- --- --- ---- -----
+    1 foo 1.4  ham  eggs
+    2 bar 2.1 spam toast
+
+  >>> print hstack([t1, t2], join_type='exact')
+  Traceback (most recent call last):
+    ...
+  TableMergeError: Inconsistent number of rows in input arrays (use 'inner' or
+  'outer' join_type to allow non-matching rows)
+
+More than two tables can be stacked by supplying a list of table objects.  The example
+below also illustrates the behavior when there is a conflict in the input column names
+(see the section on `Column renaming`_ for details)::
+
+  >>> t3 = Table.read("""a    b
+  ...                    M45  2012-02-03""", format='ascii')
+  >>> print hstack([t1, t2, t3])
+  a_1 b_1  c   d     e   a_3    b_3
+  --- --- --- ---- ----- --- ----------
+    1 foo 1.4  ham  eggs M45 2012-02-03
+    2 bar 2.1 spam toast  --         --
+    3 baz 2.8   --    --  --         --
+
+
+The metadata from the input tables is merged by the process described in the `Merging
+metadata`_ section.  Note also that you can use a single table row instead of a
+full table as one of the inputs.
+
+.. _table-join:
+
+Join
+^^^^^^^^^^^^^^
+
+The |Table| class supports the `database join <http://en.wikipedia.org/wiki/Join_(SQL)>`_
+operation.  This provides a flexible and powerful way to combine tables based on the
+values in one or more key columns.
+
+For example, suppose one has two tables of observations, the first with B and V magnitudes
+and the second with X-ray luminosities of an overlapping (but not identical) sample::
+
+  >>> from astropy.table import Table, join
+  >>> optical = Table.read("""name    obs_date    mag_b  mag_v
+  ...                         M31     2012-01-02  17.0   16.0
+  ...                         M82     2012-10-29  16.2   15.2
+  ...                         M101    2012-10-31  15.1   15.5""", format='ascii')
+  >>> xray = Table.read("""   name    obs_date    logLx
+  ...                         NGC3516 2011-11-11  42.1
+  ...                         M31     1999-01-05  43.1
+  ...                         M82     2012-10-29  45.0""", format='ascii')
+
+The |join| method allows one to merge these two tables into a single table based on
+matching values in the "key columns".  By default the key columns are the set of columns
+that are common to both tables.  In this case the key columns are ``name`` and
+``obs_date``.  We can find all the observations of the same object on the same date as
+follows::
+
+  >>> opt_xray = join(optical, xray)
+  >>> print opt_xray
+  name  obs_date  mag_b mag_v logLx
+  ---- ---------- ----- ----- -----
+   M82 2012-10-29  16.2  15.2  45.0
+
+We can perform the match only by ``name`` by providing the ``keys`` argument, which can be
+either a single column name or a list of column names::
+
+  >>> print join(optical, xray, keys='name')
+  name obs_date_1 mag_b mag_v obs_date_2 logLx
+  ---- ---------- ----- ----- ---------- -----
+   M31 2012-01-02  17.0  16.0 1999-01-05  43.1
+   M82 2012-10-29  16.2  15.2 2012-10-29  45.0
+
+This output table has all observations that have both optical and X-ray data for an object
+(M31 and M82).  Notice that since the ``obs_date`` column occurs in both tables it has
+been split into two columns, ``obs_date_1`` and ``obs_date_2``.  The values are taken from
+the "left" (``optical``) and "right" (``xray``) tables, respectively.
+
+The table joins so far are known as "inner" joins and represent the strict intersection of
+the two tables on the key columns.
+
+If one wants to make a new table which has *every* row from the left table and includes
+matching values from the right table when available, this is known as a left join::
+
+  >>> print join(optical, xray, join_type='left')
+  name  obs_date  mag_b mag_v logLx
+  ---- ---------- ----- ----- -----
+  M101 2012-10-31  15.1  15.5    --
+   M31 2012-01-02  17.0  16.0    --
+   M82 2012-10-29  16.2  15.2  45.0
+
+Two of the observations do not have X-ray data, as indicated by the "--" in the table.
+When there are any missing values the output will be a masked table.  You might be
+surprised that there is no X-ray data for M31 in the output.  Remember that the default
+matching key includes both ``name`` and ``obs_date``.  Specifying the key as only the
+``name`` column gives::
+
+  >>> print join(optical, xray, join_type='left', keys='name')
+  name obs_date_1 mag_b mag_v obs_date_2 logLx
+  ---- ---------- ----- ----- ---------- -----
+  M101 2012-10-31  15.1  15.5         --    --
+   M31 2012-01-02  17.0  16.0 1999-01-05  43.1
+   M82 2012-10-29  16.2  15.2 2012-10-29  45.0
+
+Likewise one can construct a new table with every row of the right table and matching left
+values (when available) using ``join_type='right'``.
+
+Finally, to make a table with the union of rows from both tables do an "outer" join::
+
+  >>> print join(optical, xray, join_type='outer')
+    name   obs_date  mag_b mag_v logLx
+  ------- ---------- ----- ----- -----
+     M101 2012-10-31  15.1  15.5    --
+      M31 1999-01-05    --    --  43.1
+      M31 2012-01-02  17.0  16.0    --
+      M82 2012-10-29  16.2  15.2  45.0
+  NGC3516 2011-11-11    --    --  42.1
+
+
+Identical keys
+~~~~~~~~~~~~~~
+
+The |Table| join operation works even if there are multiple rows with identical key
+values.  For example the following tables have multiple rows for the key column ``x``::
+
+  >>> from astropy.table import Table, join
+  >>> left = Table([[0, 1, 1, 2], ['L1', 'L2', 'L3', 'L4']], names=('key', 'L'))
+  >>> right = Table([[1, 1, 2, 4], ['R1', 'R2', 'R3', 'R4']], names=('key', 'R'))
+  >>> print left
+  key  L
+  --- ---
+    0  L1
+    1  L2
+    1  L3
+    2  L4
+  >>> print right
+  key  R
+  --- ---
+    1  R1
+    1  R2
+    2  R3
+    4  R4
+
+Doing an outer join on these tables shows that what is really happening is a `Cartesian
+product <http://en.wikipedia.org/wiki/Cartesian_product>`_.  For each matching key, every
+combination of the left and right tables is represented.  When there is no match in either
+the left or right table, the corresponding column values are designated as missing.
+
+  >>> print join(left, right, join_type='outer')
+  key  L   R
+  --- --- ---
+    0  L1  --
+    1  L2  R1
+    1  L2  R2
+    1  L3  R1
+    1  L3  R2
+    2  L4  R3
+    4  --  R4
+
+.. note::
+
+   The output table is sorted on the key columns, but when there are rows with identical
+   keys the output order in the non-key columns is not guaranteed to be identical across
+   installations.  In the example above the order within the four rows with ``key == 1``
+   can vary.
+
+An inner join is the same but only returns rows where there is a key match in both the
+left and right tables::
+
+  >>> print join(left, right, join_type='inner')
+  key  L   R
+  --- --- ---
+    1  L2  R1
+    1  L2  R2
+    1  L3  R1
+    1  L3  R2
+    2  L4  R3
+
+Conflicts in the input table names are handled by the process described in the section on
+`Column renaming`_.  See also the sections on `Merging metadata`_ and `Merging column
+attributes`_ for details on how these characteristics of the input tables are merged in
+the single output table.
+
+Merging details
+^^^^^^^^^^^^^^^^^^^^
+
+When combining two or more tables there is the need to merge certain
+characteristics in the inputs and potentially resolve conflicts.  This
+section describes the process.
+
+Column renaming
+~~~~~~~~~~~~~~~~~
+
+
+In cases where the input tables have conflicting column names, there
+is a mechanism to generate unique output column names.  There are two
+keyword arguments that control the renaming behavior:
+
+``table_names``
+    Two-element list of strings that provide a name for the tables being joined.
+    By default this is ``['1', '2', ...]``, where the numbers correspond to
+    the input tables.
+
+``uniq_col_name``
+    String format specifier with a default value of ``'{col_name}_{table_name}'``.
+
+This is most easily understood by example using the ``optical`` and ``xray`` tables
+in the |join| example defined previously::
+
+  >>> print join(optical, xray, keys='name',
+  ...            table_names=['OPTICAL', 'XRAY'],
+  ...            uniq_col_name='{table_name}_{col_name}')
+  name OPTICAL_obs_date mag_b mag_v XRAY_obs_date logLx
+  ---- ---------------- ----- ----- ------------- -----
+   M31       2012-01-02  17.0  16.0    1999-01-05  43.1
+   M82       2012-10-29  16.2  15.2    2012-10-29  45.0
+
+
+Merging metadata
+~~~~~~~~~~~~~~~~~~~
+
+|Table| objects can have associated metadata:
+
+- ``Table.meta``: table-level metadata as an ordered dictionary
+- ``Column.meta``: per-column metadata as an ordered dictionary
+
+The table operations described here handle the task of merging the metadata in the input
+tables into a single output structure.  Because the metadata can be arbitrarily complex
+there is no unique way to do the merge.  The current implementation uses a simple
+recursive algorithm with four rules:
+
+- `dict` elements are merged by keys
+- Conflicting `list` or `tuple` elements are concatenated
+- Conflicting `dict` elements are merged by recursively calling the merge function
+- Conflicting elements that are not both `list`, `tuple`, or `dict` will follow the following rules:
+    - If both metadata values are identical, the output is set to this value
+    - If one of the conflicting metadata values is `None`, the other value is picked
+    - If both metadata values are different and neither is `None`, the one for the last table in the list is picked
+
+By default, a warning is emitted in the last case (both metadata values are not
+`None`). The warning can be silenced or made into an exception using the
+``metadata_conflicts`` argument to :func:`~astropy.table.operations.hstack`,
+:func:`~astropy.table.operations.vstack`, or
+:func:`~astropy.table.operations.join`. The ``metadata_conflicts`` option can be set to:
+
+- ``'silent'`` - no warning is emitted, the value for the last table is silently picked
+- ``'warn'`` - a warning is emitted, the value for the last table is picked
+- ``'error'`` - an exception is raised
+
+Merging column attributes
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In addition to the table and column ``meta`` attributes, the column attributes ``unit``,
+``format``, and ``description`` are merged by going through the input tables in
+order and taking the first value which is defined (i.e. is not None).  For example::
+
+  >>> from astropy.table import Column, Table, vstack
+  >>> col1 = Column([1], name='a')
+  >>> col2 = Column([2], name='a', unit='cm')
+  >>> col3 = Column([3], name='a', unit='m')
+  >>> t1 = Table([col1])
+  >>> t2 = Table([col2])
+  >>> t3 = Table([col3])
+  >>> out = vstack([t1, t2, t3])
+  WARNING: MergeConflictWarning: In merged column 'a' the 'unit' attribute does
+  not match (cm != m).  Using m for merged output [astropy.table.operations]
+  >>> out['a'].unit
+  Unit("m")
+
+The rules for merging are as for `Merging metadata`_, and the
+``metadata_conflicts`` option also controls the merging of column attributes.
diff --git a/docs/time/index.rst b/docs/time/index.rst
index 6919cf2..ce5d2ca 100644
--- a/docs/time/index.rst
+++ b/docs/time/index.rst
@@ -12,9 +12,17 @@ Introduction
 The `astropy.time` package provides functionality for manipulating times and
 dates.  Specific emphasis is placed on supporting time scales (e.g. UTC, TAI, UT1) and
 time representations (e.g. JD, MJD, ISO 8601) that are used in astronomy.
-It uses Cython to wrap the C language `SOFA`_ time and calendar
+It uses Cython to wrap the C language `ERFA`_ time and calendar
 routines.  All time scale conversions are done by Cython vectorized versions
-of the `SOFA`_ routines and are fast and memory efficient.
+of the `ERFA`_ routines and are fast and memory efficient.
+
+All time manipulations and arithmetic operations are done internally using two
+64-bit floats to represent time.  Floating point algorithms from [#]_ are used so
+that the |Time| object maintains sub-nanosecond precision over times spanning
+the age of the universe.
+
+.. [#] `Shewchuk, 1997, Discrete & Computational Geometry 18(3):305-363
+        <http://www.cs.berkeley.edu/~jrs/papers/robustr.pdf>`_
 
 Getting Started
 ===============
@@ -30,7 +38,9 @@ In general any output values have the same shape (scalar or array) as the input.
   >>> times = ['1999-01-01 00:00:00.123456789', '2010-01-01 00:00:00']
   >>> t = Time(times, format='iso', scale='utc')
   >>> t
-  <Time object: scale='utc' format='iso' vals=['1999-01-01 00:00:00.123' '2010-01-01 00:00:00.000']>
+  <Time object: scale='utc' format='iso' value=['1999-01-01 00:00:00.123' '2010-01-01 00:00:00.000']>
+  >>> t[1]
+  <Time object: scale='utc' format='iso' value=2010-01-01 00:00:00.000>
 
 The ``format`` argument specifies how to interpret the input values, e.g. ISO
 or JD or Unix time.  The ``scale`` argument specifies the `time scale`_ for the
@@ -50,7 +60,7 @@ TT.  This uses the same attribute mechanism as above but now returns a new
 
   >>> t2 = t.tt
   >>> t2
-  <Time object: scale='tt' format='iso' vals=['1999-01-01 00:01:04.307' '2010-01-01 00:01:06.184']>
+  <Time object: scale='tt' format='iso' value=['1999-01-01 00:01:04.307' '2010-01-01 00:01:06.184']>
   >>> t2.jd
   array([ 2451179.5007443 ,  2455197.50076602])
 
@@ -72,7 +82,7 @@ There is no distinction made between a "date" and a "time" since both concepts
 moment in time.
 
 Once a |Time| object is created it cannot be altered internally.  In code lingo
-it is immutable.  In particular the common operation of "converting" to a
+it is "immutable."  In particular the common operation of "converting" to a
 different `time scale`_ is always performed by returning a copy of the original
 |Time| object which has been converted to the new time scale.
 
@@ -95,12 +105,15 @@ Format            Class
 byear      :class:`~astropy.time.core.TimeBesselianEpoch`
 byear_str  :class:`~astropy.time.core.TimeBesselianEpochString`
 cxcsec     :class:`~astropy.time.core.TimeCxcSec`
+datetime   :class:`~astropy.time.core.TimeDatetime`
+gps        :class:`~astropy.time.core.TimeGPS`
 iso        :class:`~astropy.time.core.TimeISO`
 isot       :class:`~astropy.time.core.TimeISOT`
 jd         :class:`~astropy.time.core.TimeJD`
 jyear      :class:`~astropy.time.core.TimeJulianEpoch`
 jyear_str  :class:`~astropy.time.core.TimeJulianEpochString`
 mjd        :class:`~astropy.time.core.TimeMJD`
+plot_date  :class:`~astropy.time.core.TimePlotDate`
 unix       :class:`~astropy.time.core.TimeUnix`
 yday       :class:`~astropy.time.core.TimeYearDayTime`
 =========  ====================================================
@@ -109,7 +122,7 @@ Subformat
 """"""""""
 
 The time format classes :class:`~astropy.time.core.TimeISO`,
-:class:`~astropy.time.core.TimeISO`, and
+:class:`~astropy.time.core.TimeISOT`, and
 :class:`~astropy.time.core.TimeYearDayTime` support the concept of
 subformats.  This allows for variations on the basic theme of a format in both
 the input string parsing and the output.
@@ -166,38 +179,49 @@ figure below.  Further details are provided in the `Convert time scale`_ section
 .. image:: time_scale_conversion.png
 
 Scalar or Array
-^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^
 
 A |Time| object can hold either a single time value or an array of time values.
 The distinction is made entirely by the form of the input time(s).  If a |Time|
 object holds a single value then any format outputs will be a single scalar
-value, and likewise for arrays.  ::
+value, and likewise for arrays.  Like other arrays and lists, |Time| objects
+holding arrays are subscriptable, returning scalar or array objects as
+appropriate::
 
   >>> from astropy.time import Time
   >>> t = Time(100.0, format='mjd', scale='utc')
   >>> t.jd
   2400100.5
-  >>> t = Time([100.0, 200.0], format='mjd', scale='utc')
+  >>> t = Time([100.0, 200.0, 300.], format='mjd', scale='utc')
   >>> t.jd
-  array([ 2400100.5,  2400200.5])
+  array([ 2400100.5,  2400200.5,  2400300.5])
+  >>> t[:2]
+  <Time object: scale='utc' format='mjd' value=[ 100.  200.]>
+  >>> t[2]
+  <Time object: scale='utc' format='mjd' value=300.0>
 
 Inferring input format
-^^^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^
 
 The |Time| class initializer will not accept ambiguous inputs,
 but it will make automatic inferences in cases where the inputs are
-unambiguous.  This can apply when the times are supplied as a list of strings,
-in which case it is not required to specify the format because the available
+unambiguous.  This can apply when the times are supplied as `~datetime.datetime`
+objects or strings.  In the latter case
+it is not required to specify the format because the available
 string formats have no overlap.  However, if the format is known in advance
 the string parsing will be faster if the format is provided.
 ::
 
+  >>> from datetime import datetime
+  >>> t = Time(datetime(2010, 1, 2, 1, 2, 3), scale='utc')
+  >>> t.format
+  'datetime'
   >>> t = Time('2010-01-02 01:02:03', scale='utc')
   >>> t.format
   'iso'
 
 Internal representation
-^^^^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^^
 
 The |Time| object maintains an internal representation of time as a pair of
 double precision numbers expressing Julian days. The sum of the two numbers is
@@ -205,25 +229,23 @@ the Julian Date for that time relative to the given `time scale`_.  Users
 requiring no better than microsecond precision over human time scales (~100
 years) can safely ignore the internal representation details and skip this section.
 
-This representation is driven by the underlying SOFA C-library implementation.
-The SOFA routines take care throughout to maintain overall precision of the
+This representation is driven by the underlying ERFA C-library implementation.
+The ERFA routines take care throughout to maintain overall precision of the
 double pair.  The user is free to choose the way in which total JD is
-distributed between the two values.
-
-The internal JD pair is available via the ``jd1`` and ``jd2`` attributes.
-Notice in the example below that when converting from UTC to TAI, the
-small offset is placed in the ``jd2`` value thus maintaining the highest
-numeric precision::
+provided, though internally one part contains integer days and the
+other the fraction of the day, as this ensures optimal accuracy for
+all conversions.  The internal JD pair is available via the ``jd1``
+and ``jd2`` attributes::
 
   >>> t = Time('2010-01-01 00:00:00', scale='utc')
   >>> t.jd1, t.jd2
   (2455197.5, 0.0)
   >>> t2 = t.tai
-  >>> t2.jd1. t2.jd2
+  >>> t2.jd1, t2.jd2
   (2455197.5, 0.0003935185185185185)
 
 Creating a Time object
-------------------------
+----------------------
 
 The allowed |Time| arguments to create a time object are listed below:
 
@@ -247,30 +269,39 @@ The allowed |Time| arguments to create a time object are listed below:
     Earth longitude of observer
 
 val
-^^^^^^^^^^^
+^^^
 
-The ``val`` argument is the only argument that is always required when creating a
-|Time| object.  This argument specifies the input time or times and
+The `val` argument  specifies the input time or times and
 can be a single string or number, or it can be a Python list or `numpy` array
-of strings or numbers.
+of strings or numbers. To initialize a |Time| object based on a specified time,
+it *must* be present.  If `val` is absent (or `None`), the |Time| object will
+be created for the time corresponding to the instant the object is created.
 
 In most situations one also needs to specify the `time scale`_ via the
-``scale`` argument.  The |Time| class will never guess the `time scale`_,
+`scale` argument.  The |Time| class will never guess the `time scale`_,
 so a simple example would be::
 
-  >>> t = Time('2010-01-01 00:00:00', scale='utc')
-  >>> t2 = Time(50100.0, format='mjd', scale='tt')
+  >>> t1 = Time(50100.0, scale='tt', format='mjd')
+  >>> t2 = Time('2010-01-01 00:00:00', scale='utc')
+
+It is possible to create a new |Time| object from one or more existing time
+objects.  In this case the format and scale will be inferred from the
+first object unless explicitly specified.
+::
+
+  >>> Time([t1, t2])
+  <Time object: scale='tt' format='mjd' value=[ 50100.  55197.00076602]>
 
 val2
-^^^^^^^^^^^
+^^^^
 
-The ``val2`` argument is available for specialized situations where extremely
+The `val2` argument is available for specialized situations where extremely
 high precision is required.  Recall that the internal representation of time
 within `astropy.time` is two double-precision numbers that when summed give
-the Julian date.  If provided the ``val2`` argument is used in combination with
-``val`` to set the second the internal time values.  The exact interpretation of
-``val2`` is determined by the input format class.  As of this release all
-string-valued formats ignore ``val2`` and all numeric inputs effectively add
+the Julian date.  If provided the `val2` argument is used in combination with
+`val` to set the second the internal time values.  The exact interpretation of
+`val2` is determined by the input format class.  As of this release all
+string-valued formats ignore `val2` and all numeric inputs effectively add
 the two values in a way that maintains the highest precision.  Example::
 
   >>> t = Time(100.0, 0.000001, format='mjd', scale='tt')
@@ -278,27 +309,27 @@ the two values in a way that maintains the highest precision.  Example::
   (2400100.500001, 2400100.5, 1e-06)
 
 format
-^^^^^^^^^^^
+^^^^^^
 
-The ``format`` argument sets the time `time format`_, and as mentioned it is
+The `format` argument sets the time `time format`_, and as mentioned it is
 required unless the format can be unambiguously determined from the input times.
 
 
 scale
-^^^^^^^^^^^
+^^^^^
 
-The ``scale`` argument sets the `time scale`_ and is required except for time
-formats such as 'cxcsec' (:class:`~astropy.time.core.TimeCxcSec`) and 'unix'
+The `scale` argument sets the `time scale`_ and is required except for time
+formats such as ``plot_date`` (:class:`~astropy.time.core.TimePlotDate`) and ``unix``
 (:class:`~astropy.time.core.TimeUnix`).  These formats represent the duration
 in SI seconds since a fixed instant in time which is independent of time scale.
 
 precision
 ^^^^^^^^^^
 
-The ``precision`` setting affects string formats when outputting a value that
+The `precision` setting affects string formats when outputting a value that
 includes seconds.  It must be an integer between 0 and 9.  There is no effect
 when inputting time values from strings.  The default precision is 3.  Note
-that the limit of 9 digits is driven by the way that SOFA handles fractional
+that the limit of 9 digits is driven by the way that ERFA handles fractional
 seconds.  In practice this should should not be an issue.  ::
 
   >>> t = Time('B1950.0', scale='utc', precision=3)
@@ -309,34 +340,37 @@ seconds.  In practice this should should not be an issue.  ::
   'B1950'
 
 in_subfmt
-^^^^^^^^^^^
+^^^^^^^^^
 
-The ``in_subfmt`` argument provides a mechanism to select one or more
+The `in_subfmt` argument provides a mechanism to select one or more
 `subformat`_ values from the available subformats for string input.  Multiple
 allowed subformats can be selected using Unix-style wildcard characters, in
 particular ``*`` and ``?``, as documented in the Python `fnmatch
 <http://docs.python.org/library/fnmatch.html>`_ module.
 
-The default value for ``in_subfmt`` is ``*`` which matches any available
+The default value for `in_subfmt` is ``*`` which matches any available
 subformat.  This allows for convenient input of values with unknown or
 heterogeneous subformat::
 
   >>> Time(['2000:001', '2000:002:03:04', '2001:003:04:05:06.789'], scale='utc')
   <Time object: scale='utc' format='yday'
-   vals=['2000:001:00:00:00.000' '2000:002:03:04:00.000' '2001:003:04:05:06.789']>
+   value=['2000:001:00:00:00.000' '2000:002:03:04:00.000' '2001:003:04:05:06.789']>
 
-One can explicitly specify ``in_subfmt`` in order to strictly require a
+One can explicitly specify `in_subfmt` in order to strictly require a
 certain subformat::
 
   >>> t = Time('2000:002:03:04', scale='utc', in_subfmt='date_hm')
   >>> t = Time('2000:002', scale='utc', in_subfmt='date_hm')
-  ERROR: ValueError: Input values did not match any of format classes
-  ['iso', 'isot', 'yday']
+  Traceback (most recent call last):
+    ...
+  ValueError: Input values did not match any of the formats where the
+  format keyword is optional ['astropy_time', 'datetime',
+  'byear_str', 'iso', 'isot', 'jyear_str', 'yday']
 
 out_subfmt
-^^^^^^^^^^^
+^^^^^^^^^^
 
-The ``out_subfmt`` argument is similar to ``in_subfmt`` except that it applies
+The `out_subfmt` argument is similar to `in_subfmt` except that it applies
 to output formatting.  In the case of multiple matching subformats the first
 matching subformat is used.
 
@@ -353,9 +387,22 @@ lat and lon
 These optional parameters specify the observer latitude and longitude in
 decimal degrees.  They default to 0.0 and are used for time scales that are
 sensitive to observer position.  Currently the only time scale for which this
-applies is TDB, which relies on the SOFA routine ``iauDtdb`` to determine the
+applies is TDB, which relies on the ERFA routine ``eraDtdb`` to determine the
 time offset between TDB and TT.
 
+Getting the Current Time
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+The current time can be determined as a `Time` object using the
+`~astropy.time.Time.now` class method::
+
+  >>> nt = Time.now()
+  >>> ut = Time(datetime.utcnow(), scale='utc')
+
+The two should be very close to each other.
+
+
+
 
 Using Time objects
 -------------------
@@ -385,8 +432,19 @@ available format names is in the `time format`_ section.
   '2010-01-01 00:00:00.000'
   >>> t.unix      # seconds since 1970.0 (UTC)
   1262304000.0
-  >>> t.cxcsec    # SI seconds since 1998.0 (TT)
-  378691266.184
+  >>> t.plot_date # Date value for plotting with matplotlib plot_date()
+  733773.0003935185
+  >>> t.datetime  # Representation as datetime.datetime object
+  datetime.datetime(2010, 1, 1, 0, 0)
+
+Example::
+
+  >>> import matplotlib.pyplot as plt  # doctest: +SKIP
+  >>> jyear = np.linspace(2000, 2001, 20)  # doctest: +SKIP
+  >>> t = Time(jyear, format='jyear', scale='utc')  # doctest: +SKIP
+  >>> plt.plot_date(t.plot_date, jyear)  # doctest: +SKIP
+  >>> plt.gcf().autofmt_xdate()  # orient date labels at a slant  # doctest: +SKIP
+  >>> plt.draw()  # doctest: +SKIP
 
 Convert time scale
 ^^^^^^^^^^^^^^^^^^^^
@@ -403,9 +461,9 @@ Examples::
 
   >>> t = Time('2010-01-01 00:00:00', format='iso', scale='utc')
   >>> t.tt        # TT scale
-  <Time object: scale='tt' format='iso' vals=2010-01-01 00:01:06.184>
+  <Time object: scale='tt' format='iso' value=2010-01-01 00:01:06.184>
   >>> t.tai
-  <Time object: scale='tai' format='iso' vals=2010-01-01 00:00:34.000>
+  <Time object: scale='tai' format='iso' value=2010-01-01 00:00:34.000>
 
 In this process the ``format`` and other object attributes like ``lat``,
 ``lon``, and ``precision`` are also propagated to the new object.
@@ -433,14 +491,32 @@ UT1 - UTC and TDB - TT, respectively.  As an example::
   >>> t = Time('2010-01-01 00:00:00', format='iso', scale='utc')
   >>> t.delta_ut1_utc = 0.334  # Explicitly set one part of the transformation
   >>> t.ut1.iso    # ISO representation of time in UT1 scale
- '2010-01-01 00:00:00.334'
+  '2010-01-01 00:00:00.334'
+
+For the UT1 to UTC offset, one has to interpolate in observed values provided
+by the `International Earth Rotation and Reference Systems Service
+<http://www.iers.org>`_.  By default, `astropy` is shipped with the final
+values provided in Bulletin B, which cover the period from 1962 to shortly
+before an astropy release, and these will be used to compute the offset if the
+:attr:`~astropy.time.Time.delta_ut1_utc` attribute is not set explicitly.  For
+more recent times, one can download an updated version of `IERS B
+<http://hpiers.obspm.fr/iers/eop/eopc04/eopc04_IAU2000.62-now>`_ or `IERS A
+<http://maia.usno.navy.mil/ser7/finals2000A.all>`_ (which also has
+predictions), and set :attr:`~astropy.time.Time.delta_ut1_utc` as described in
+`~astropy.time.Time.get_delta_ut1_utc`::
+
+  >>> from astropy.utils.iers import IERS_A, IERS_A_URL
+  >>> from astropy.utils.data import download_file
+  >>> iers_a_file = download_file(IERS_A_URL, cache=True))  # doctest: +SKIP
+  >>> iers_a = IERS_A.open(iers_a_file)                     # doctest: +SKIP
+  >>> t.delta_ut1_utc = t.get_delta_ut1_utc(iers_a)         # doctest: +SKIP
 
 In the case of the TDB to TT offset, most users need only provide the ``lat``
 and ``lon`` values when creating the |Time| object.  If the
-:attr:`~astropy.time.Time.delta_tdb_tt` attribute is not explicitly set
-then the SOFA C-library routine ``iauDtdb`` will be used to compute the
-TDB to TT offset.  Note that ``lat`` and ``lon`` are initialized to 0.0 by
-default, so those defaults will be used if they are not provided.
+:attr:`~astropy.time.Time.delta_tdb_tt` attribute is not explicitly set then
+the ERFA C-library routine ``eraDtdb`` will be used to compute the TDB to TT
+offset.  Note that ``lat`` and ``lon`` are initialized to 0.0 by default, so
+those defaults will be used if they are not provided.
 
 The following code replicates an example in the `SOFA Time Scale and Calendar
 Tools <http://www.iausofa.org/2012_0301_C/sofa/sofa_ts_c.pdf>`_ document.  It
@@ -452,11 +528,10 @@ TT, UT1, UTC).  This requires auxilliary information (latitude and longitude).
   >>> lon = -155.933222
   >>> t = Time('2006-01-15 21:24:37.5', format='iso', scale='utc',
   ...          lat=lat, lon=lon, precision=6)
-  >>> t.delta_ut1_utc = 0.3341  # Explicitly set one part of the transformation
   >>> t.utc.iso
   '2006-01-15 21:24:37.500000'
   >>> t.ut1.iso
-  '2006-01-15 21:24:37.834100'
+  '2006-01-15 21:24:37.834078'
   >>> t.tai.iso
   '2006-01-15 21:25:10.500000'
   >>> t.tt.iso
@@ -469,9 +544,9 @@ TT, UT1, UTC).  This requires auxilliary information (latitude and longitude).
   '2006-01-15 21:25:56.893378'
 
 Time Deltas
-------------
+-----------
 
-Simple time arithmetic is supported using via the |TimeDelta| class.  The
+Simple time arithmetic is supported using the |TimeDelta| class.  The
 following operations are available:
 
 - Create a TimeDelta explicitly by instantiating a class object
@@ -479,6 +554,8 @@ following operations are available:
 - Add a TimeDelta to a Time object to get a new Time
 - Subtract a TimeDelta from a Time object to get a new Time
 - Add two TimeDelta objects to get a new TimeDelta
+- Negate a TimeDelta or take its absolute value
+- Multiply or divide a TimeDelta by a constant or array
 
 The |TimeDelta| class is derived from the |Time| class and shares many of its
 properties.  The key difference is that the time scale is always TAI so that
@@ -503,7 +580,7 @@ Use of the |TimeDelta| object is easily illustrated in the few examples below::
   >>> t2 = Time('2010-02-01 00:00:00', scale='utc')
   >>> dt = t2 - t1  # Difference between two Times
   >>> dt
-  <TimeDelta object: scale='tai' format='jd' vals=31.0>
+  <TimeDelta object: scale='tai' format='jd' value=31.0>
   >>> dt.sec
   2678400.0
 
@@ -514,10 +591,59 @@ Use of the |TimeDelta| object is easily illustrated in the few examples below::
   '2010-02-01 00:00:50.000'
 
   >>> t2 - dt2  # Subtract a TimeDelta from a Time
-  <Time object: scale='utc' format='iso' vals=2010-01-31 23:59:10.000>
+  <Time object: scale='utc' format='iso' value=2010-01-31 23:59:10.000>
 
   >>> dt + dt2
-  <TimeDelta object: scale='tai' format='jd' vals=31.0005787037>
+  <TimeDelta object: scale='tai' format='jd' value=31.0005787037>
+
+  >>> import numpy as np
+  >>> t1 + dt * np.linspace(0, 1, 5)
+  <Time object: scale='utc' format='iso' value=['2010-01-01 00:00:00.000'
+  '2010-01-08 18:00:00.000' '2010-01-16 12:00:00.000' '2010-01-24 06:00:00.000'
+  '2010-02-01 00:00:00.000']>
+
+Interaction with Time-like Quantities
+-------------------------------------
+
+Where possible, `Quantity` objects with units of time are treated as TimeDelta
+(though necessarily with lower precision). They can also be used as input in
+constructing |Time| and |TimeDelta| objects, and |TimeDelta| objects
+can be converted to `Quantity` objects of arbitrary units of time.
+Usage is most easily illustrated by examples::
+
+  >>> import astropy.units as u
+  >>> Time(10.*u.yr, format='gps')   # time-valued quantities can be used for
+  ...                                # for formats requiring a time offset
+  <Time object: scale='tai' format='gps' value=315576000.0>
+  >>> Time(10.*u.yr, 1.*u.s, format='gps')
+  <Time object: scale='tai' format='gps' value=315576001.0>
+  >>> Time(2000.*u.yr, scale='utc', format='jyear')
+  <Time object: scale='utc' format='jyear' value=2000.0>
+  >>> Time(2000.*u.yr, scale='utc', format='byear')
+  ...                                # but not for Besselian year, which implies
+  ...                                # a different time scale
+  ...
+  Traceback (most recent call last):
+    ...
+  ValueError: Input values did not match the format class byear
+
+  >>> TimeDelta(10.*u.yr)            # With a quantity, no format is required
+  <TimeDelta object: scale='tai' format='jd' value=3652.5>
+
+  >>> dt = TimeDelta([10., 20., 30.], format='jd')
+  >>> dt.to(u.hr)                    # can convert TimeDelta to a quantity
+  <Quantity [ 240., 480., 720.] h>
+  >>> dt > 400. * u.hr               # and compare to quantities with units of time
+  array([False,  True,  True], dtype=bool)
+  >>> dt + 1.*u.hr                   # can also add/subtract such quantities
+  <TimeDelta object: scale='tai' format='jd' value=[ 10.04166667  20.04166667  30.04166667]>
+  >>> Time(50000., format='mjd', scale='utc') + 1.*u.hr
+  <Time object: scale='utc' format='mjd' value=50000.0416667>
+  >>> dt * 10.*u.km/u.s              # for multiplication and division with a
+  ...                                # Quantity, TimeDelta is converted
+  <Quantity [ 100., 200., 300.] d km / s>
+  >>> dt * 10.*u.Unit(1)             # unless the Quantity is dimensionless
+  <TimeDelta object: scale='tai' format='jd' value=[ 100.  200.  300.]>
 
 Reference/API
 =============
@@ -526,10 +652,13 @@ Reference/API
 
 
 Acknowledgments and Licenses
-=======================================
+============================
+
+This package makes use of the `ERFA Software
+<https://github.com/liberfa/erfa>`_ ANSI C library. The copyright of the ERFA
+software belongs to the NumFOCUS Foundation. The library is made available
+under the terms of the "BSD-three clauses" license.
 
-This package makes use of the `SOFA Software
-<http://www.iausofa.org/index.html>`_ ANSI C library.  The copyright of the SOFA
-Software belongs to the Standards Of Fundamental Astronomy Board of the
-International Astronomical Union.  This library is made available under the
-terms of the `SOFA license <http://www.iausofa.org/tandc.html>`_.
+The ERFA library is derived, with permission, from the International
+Astronomical Union's "Standards of Fundamental Astronomy" library,
+available from http://www.iausofa.org.
diff --git a/docs/time/references.txt b/docs/time/references.txt
index 7c92d3f..031954b 100644
--- a/docs/time/references.txt
+++ b/docs/time/references.txt
@@ -1,3 +1,4 @@
 .. |Time| replace:: :class:`~astropy.time.core.Time`
 .. |TimeDelta| replace:: :class:`~astropy.time.core.TimeDelta`
 .. _SOFA: http://www.iausofa.org/index.html
+.. _ERFA: https://github.com/liberfa/erfa
diff --git a/docs/units/combining_and_defining.rst b/docs/units/combining_and_defining.rst
index 03b5190..ac2b9ac 100644
--- a/docs/units/combining_and_defining.rst
+++ b/docs/units/combining_and_defining.rst
@@ -1,13 +1,17 @@
 Combining and defining units
 ============================
 
-Units can be combined together using the regular Python numeric
-operators.  For example::
+Units and quantities can be combined together using the regular Python
+numeric operators.  For example::
 
   >>> from astropy import units as u
   >>> fluxunit = u.erg / (u.cm ** 2 * u.s)
   >>> fluxunit
   Unit("erg / (cm2 s)")
+  >>> 52.0 * fluxunit
+  <Quantity 52.0 erg / (cm2 s)>
+  >>> 52.0 * fluxunit / u.s
+  <Quantity 52.0 erg / (cm2 s2)>
 
 Users are free to define new units, either fundamental or compound
 using the `~astropy.units.core.def_unit` function.  For example::
@@ -26,4 +30,19 @@ Creating a new fundamental unit is simple::
   >>> rofl = u.def_unit('rofl', 4 * guffaw)
   >>> death_by_laughing = u.def_unit('death_by_laughing', 10 * rofl)
   >>> rofl.to(titter, 1)
-  240
+  240.0
+
+By default, custom units are not searched by methods such as
+`~astropy.units.core.UnitBase.find_equivalent_units`.  However, they
+can be enabled by calling `~astropy.units.core.add_enabled_units`::
+
+  >>> kmph = u.def_unit('kmph', u.km / u.h)
+  >>> (u.m / u.s).find_equivalent_units()
+  []
+  >>> u.add_enabled_units([kmph])
+  <astropy.units.core._UnitContext object at ...>
+  >>> (u.m / u.s).find_equivalent_units()
+    Primary name | Unit definition | Aliases
+  [
+    kmph         | 0.277778 m / s  |         ,
+  ]
diff --git a/docs/units/conversion.rst b/docs/units/conversion.rst
index 2fd8e87..abe3576 100644
--- a/docs/units/conversion.rst
+++ b/docs/units/conversion.rst
@@ -1,5 +1,10 @@
-Unit Conversion
-===============
+Low-level unit conversion
+=========================
+
+Conversion of quantities from one unit to another is handled using the
+`Quantity.to <astropy.units.quantity.Quantity.to>` method.  This page
+describes some low-level features for handling unit conversion that
+are rarely required in user code.
 
 There are two ways of handling conversions between units.
 
@@ -11,7 +16,7 @@ new units is(are) returned.
 
   >>> from astropy import units as u
   >>> u.pc.to(u.m, 3.26)
-  1.0059317615e+17
+  1.0059308915583043e+17
 
 This converts 3.26 parsecs to meters.
 
@@ -33,27 +38,28 @@ Conversion to different units involves obtaining a conversion function
 and then applying it to the value, or values to be converted.
 
   >>> cms = u.cm / u.s
-  >>> cms_to_mph = cms.get_converter(u.mile / u.hour)
-  >>> cms_to_mph(100.)
-  2.2366936292054402
-  >>> cms_to_mph([1000, 2000])
-  array([ 22.36936292,  44.73872584])
+  >>> cms_to_kmph = cms.get_converter(u.km / u.hour)
+  >>> cms_to_kmph(100.)
+  3.6000000000000005
+  >>> cms_to_kmph([1000, 2000])
+  array([ 36.,  72.])
 
 Incompatible Conversions
 ------------------------
 
 If you attempt to convert to a incompatible unit, an exception will result:
 
-  >>> cms.to(u.mile)
-  ...
-  UnitsException: 'cm / (s)' (speed) and 'mi' (length) are not convertible
+  >>> cms.to(u.km)
+  Traceback (most recent call last):
+    ...
+  UnitsError: 'cm / s' (speed) and 'km' (length) are not convertible
 
 You can check whether a particular conversion is possible using the
 `~astropy.units.core.UnitBase.is_equivalent` method::
 
-  >>> u.m.is_equivalent(u.foot)
+  >>> u.m.is_equivalent(u.pc)
   True
   >>> u.m.is_equivalent("second")
   False
-  >>> (u.m ** 2).is_equivalent(u.acre)
+  >>> (u.m ** 3).is_equivalent(u.l)
   True
diff --git a/docs/units/decomposing_and_composing.rst b/docs/units/decomposing_and_composing.rst
index 15fcf5f..2a01e35 100644
--- a/docs/units/decomposing_and_composing.rst
+++ b/docs/units/decomposing_and_composing.rst
@@ -4,26 +4,28 @@ Decomposing and composing units
 Reducing a unit to its irreducible parts
 ----------------------------------------
 
-A unit can be decomposed into its irreducible parts using the
-`~astropy.units.core.UnitBase.decompose` method::
+A unit or quantity can be decomposed into its irreducible parts using
+the `Unit.decompose <astropy.units.core.UnitBase.decompose>` or
+`Quantity.decompose <astropy.units.quantity.Quantity.decompose>`
+methods::
 
   >>> from astropy import units as u
   >>> u.Ry
   Unit("Ry")
   >>> u.Ry.decompose()
-  Unit("2.18e-18 m2 kg / (s2)")
+  Unit("2.17987e-18 kg m2 / s2")
 
 You can limit the selection of units that you want to decompose to
 using the `bases` keyword argument::
 
   >>> u.Ry.decompose(bases=[u.m, u.N])
-  Unit("2.179872e-18 m N")
+  Unit("2.17987e-18 m N")
 
 This is also useful to decompose to a particular system.  For example,
 to decompose the Rydberg unit in terms of CGS units::
 
   >>> u.Ry.decompose(bases=u.cgs.bases)
-  Unit("2.179872e-11 cm2 g / (s2)")
+  Unit("2.17987e-11 cm2 g / s2")
 
 Automatically composing a unit into more complex units
 ------------------------------------------------------
@@ -34,60 +36,35 @@ may be multiple equally good results, a list is always returned::
 
   >>> x = u.Ry.decompose()
   >>> x.compose()
-  [Unit("1.000000e+00 Ry"),
-   Unit("5.210019e-22 kcal"),
-   Unit("5.210019e-19 cal"),
-   Unit("2.066120e-21 BTU"),
-   Unit("1.360569e+01 eV"),
-   Unit("2.179872e-18 J"),
-   Unit("2.179872e-11 erg")]
+  [Unit("Ry"),
+   Unit("2.17987e-18 J"),
+   Unit("2.17987e-11 erg"),
+   Unit("13.6057 eV")]
 
 Some other interesting examples::
 
-   >>> (u.s ** -1).compose()
-   [Unit("Hz"),
-    Unit("1 / (s)"),
-    Unit("3.155693e+07 / (yr)"),
-    Unit("8.640000e+04 / (d)"),
-    Unit("6.000000e+01 / (min)"),
-    Unit("3.600000e+03 / (h)"),
-    Unit("6.048000e+05 / (wk)"),
-    Unit("3.155693e+07 / (a)"),
-    Unit("8.616409e+04 / (sday)"),
-    Unit("1.209600e+06 / (fortnight)")]
+   >>> (u.s ** -1).compose()  # doctest: +SKIP
+   [Unit("Bq"), Unit("Hz"), Unit("3.7e+10 Ci")]
 
 Composition can be combined with :ref:`unit_equivalencies`::
 
-   >>> (u.s ** -1).compose(equivalencies=u.spectral())
-   [Unit("Hz"),
+   >>> (u.s ** -1).compose(equivalencies=u.spectral())  # doctest: +SKIP
+   [Unit("m"),
+    Unit("Hz"),
     Unit("J"),
-    Unit("m"),
-    Unit("1 / (s)"),
-    Unit("2.390057e-01 cal"),
-    Unit("1.057001e-16 lyr"),
-    Unit("1.093613e+00 yd"),
-    Unit("3.240779e-17 pc"),
-    Unit("4.587425e+17 Ry"),
-    Unit("1.000000e+06 micron"),
-    Unit("3.937008e+01 inch"),
-    Unit("6.684587e-12 AU"),
-    Unit("1.000000e+02 cm"),
-    Unit("1.437798e-09 solRad"),
-    Unit("6.241509e+18 eV"),
-    Unit("3.280840e+00 ft"),
-    Unit("2.390057e-04 kcal"),
-    Unit("1.000000e+10 Angstrom"),
-    Unit("1.000000e+07 erg"),
-    Unit("9.478171e-04 BTU"),
-    Unit("6.213712e-04 mi"),
-    Unit("6.000000e+01  / (min)"),
-    Unit("3.600000e+03  / (h)"),
-    Unit("6.048000e+05  / (wk)"),
-    Unit("8.616409e+04  / (sday)"),
-    Unit("1.209600e+06  / (fortnight)"),
-    Unit("8.640000e+04  / (d)"),
-    Unit("3.155693e+07  / (yr)"),
-    Unit("3.155693e+07  / (a)")]
+    Unit("Bq"),
+    Unit("3.24078e-17 pc"),
+    Unit("1.057e-16 lyr"),
+    Unit("6.68459e-12 AU"),
+    Unit("1.4378e-09 solRad"),
+    Unit("0.01 k"),
+    Unit("100 cm"),
+    Unit("1e+06 micron"),
+    Unit("1e+07 erg"),
+    Unit("1e+10 Angstrom"),
+    Unit("3.7e+10 Ci"),
+    Unit("4.58743e+17 Ry"),
+    Unit("6.24151e+18 eV")]
 
 Obviously a name doesn't exist for every arbitrary derived unit
 imaginable.  In that case, the system will do its best to reduce the
@@ -103,14 +80,20 @@ Built on top of this functionality is a convenience method to convert
 between unit systems.
 
    >>> u.Pa.to_system(u.cgs)
-   [Unit("1.000000e+01 Ba")]
+   [Unit("10 Ba")]
+
+There is also a shorthand for this which only returns the first of
+many possible matches::
+
+   >>> u.Pa.cgs
+   Unit("10 Ba")
 
 This is equivalent to decomposing into the new system and then
-composing into the most complex units possible, though `to_system`
-adds some extra logic to return the results sorted in the most useful
-order::
+composing into the most complex units possible, though
+`~astropy.units.core.UnitBase.to_system` adds some extra logic to
+return the results sorted in the most useful order::
 
    >>> u.Pa.decompose(bases=u.cgs.bases)
-   Unit("1.000000e+01 g / (cm s2)")
+   Unit("10 g / (cm s2)")
    >>> _.compose(units=u.cgs)
-   [Unit("1.000000e+01 Ba")]
+   [Unit("10 Ba")]
diff --git a/docs/units/equivalencies.rst b/docs/units/equivalencies.rst
index 262b594..4f47e33 100644
--- a/docs/units/equivalencies.rst
+++ b/docs/units/equivalencies.rst
@@ -1,3 +1,5 @@
+.. |quantity| replace:: :class:`~astropy.units.quantity.Quantity`
+
 .. _unit_equivalencies:
 
 Equivalencies
@@ -9,61 +11,186 @@ uniquely relate a value in one unit to a different unit. A good
 example is the equivalence between wavelength, frequency and energy
 for specifying a wavelength of radiation. Normally these units are not
 convertible, but when understood as representing light, they are
-convertible.  This will describe how to use two of the equivalencies
-include in `astropy.units` and then describe how to define new
-equivalencies.
+convertible in certain contexts.  This will describe how to use the
+equivalencies included in `astropy.units` and then describe how to
+define new equivalencies.
 
 Equivalencies are used by passing a list of equivalency pairs to the
-`equivs` keyword argument of `~astropy.units.core.UnitBase.to` or
-`~astropy.units.core.UnitBase.get_converter` methods.
+`equivalencies` keyword argument of :meth:`Quantity.to
+<astropy.units.quantity.Quantity.to>`, :meth:`Unit.to
+<astropy.units.core.UnitBase.to>` or :meth:`Unit.get_converter
+<astropy.units.core.UnitBase.get_converter>` methods.
+Alternatively, if a
+larger piece of code needs the same equivalencies, one can set them
+for a :ref:`given context <equivalency-context>`.
 
 Built-in equivalencies
 ----------------------
 
+Parallax Units
+^^^^^^^^^^^^^^
+
+:func:`~astropy.units.equivalencies.parallax` is a function that returns an
+equivalency list to handle conversions between angles and length.
+
+Length and angles are not normally convertible, so
+:meth:`~astropy.units.core.UnitBase.to` raises an exception::
+
+  >>> from astropy import units as u
+  >>> (8.0 * u.arcsec).to(u.parsec)
+  Traceback (most recent call last):
+    ...
+  UnitsError: 'arcsec' (angle) and 'pc' (length) are not convertible
+
+However, when passing the result of
+:func:`~astropy.units.equivalencies.parallax` as the third argument to the
+:meth:`~astropy.units.core.UnitBase.to` method, angles can be converted
+into units of length (and vice versa).
+
+    >>> (8.0 * u.arcsec).to(u.parsec, equivalencies=u.parallax())
+    <Quantity 0.125 pc>
+    >>> u.AU.to(u.arcminute, equivalencies=u.parallax())
+    3437.7467707580054
+
+Angles as Dimensionless Units
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Angles are treated as a physically distinct type, which usually helps to
+avoid mistakes.  For units such as rotational energy, however, it is not
+very handy.  (Indeed, this double-sidedness underlies why radian went from
+`supplementary to derived unit <http://www.bipm.org/en/CGPM/db/20/8/>`__.)
+The function :func:`~astropy.units.equivalencies.dimensionless_angles`
+provides the required equivalency list that helps convert between
+angles and dimensionless units.  It is somewhat
+different from all others in that it allows an arbitrary change in the
+number of powers to which radian is raised (i.e., including zero and thus
+dimensionless).  For instance, normally the following raise exceptions::
+
+  >>> from astropy import units as u
+  >>> u.degree.to('')
+  Traceback (most recent call last):
+    ...
+  UnitsError: 'deg' (angle) and '' (dimensionless) are not convertible
+  >>> (u.kg * u.m**2 * (u.cycle / u.s)**2).to(u.J)
+  Traceback (most recent call last):
+    ...
+  UnitsError: 'cycle2 kg m2 / s2' and 'J' (energy) are not convertible
+
+But when passing we pass the proper conversion function,
+:func:`~astropy.units.equivalencies.dimensionless_angles`, it works.
+
+  >>> u.deg.to('', equivalencies=u.dimensionless_angles())
+  0.01745329...
+  >>> (0.5e38 * u.kg * u.m**2 * (u.cycle / u.s)**2).to(u.J,
+  ...                            equivalencies=u.dimensionless_angles())
+  <Quantity 1.97392...e+39 J>
+  >>> import numpy as np
+  >>> np.exp((1j*0.125*u.cycle).to('', equivalencies=u.dimensionless_angles()))
+  <Quantity (0.7071067811865476+0.7071067811865475j) >
+
+The example with complex numbers is also one may well be doing a fair
+number of similar calculations.  For such situations, there is the
+option to :ref:`set default equivalencies <equivalency-context>`.
+
 Spectral Units
 ^^^^^^^^^^^^^^
 
-`~astropy.units.equivalencies.spectral` is a function that returns an
+:func:`~astropy.units.equivalencies.spectral` is a function that returns an
 equivalency list to handle conversions between wavelength, frequency
 and energy.
 
-Length and frequency are not normally convertible, so
-`~astropy.units.core.UnitBase.to` raises an exception::
+As mentioned above with parallax units, we simply pass the proper
+conversion function (in this case
+:meth:`~astropy.units.equivalencies.spectral`) as the third argument to the
+:meth:`~astropy.units.core.UnitBase.to` method and wavelength, frequency
+and energy can be converted.
 
-  >>> from astropy import units as u
-  >>> u.nm.to(u.Hz, [1000, 2000])
-  UnitsException: 'nm' (length) and 'Hz' (frequency) are not convertible
+:func:`~astropy.units.equivalencies.spectral` is a function that returns
+an equivalency list to handle conversions between wavelength,
+frequency, energy, and wave number.
 
-However, when passing the result of `~astropy.units.equivalencies.spectral`
-as the third argument to the `~astropy.units.core.UnitBase.to` method,
-wavelength, frequency and energy can be converted.
+As mentioned above with parallax units, we simply pass a list of
+equivalencies (in this case, the result of
+:func:`~astropy.units.equivalencies.spectral`) as the third argument to the
+:meth:`~astropy.units.core.UnitBase.to` method and wavelength, frequency and
+energy can be converted.
 
-  >>> u.nm.to(u.Hz, [1000, 2000], equivs=u.spectral())
-  array([  2.99792458e+14,   1.49896229e+14])
-  >>> u.nm.to(u.eV, [1000, 2000], equivs=u.spectral())
-  array([ 1.23984201,  0.61992101])
+  >>> ([1000, 2000] * u.nm).to(u.Hz, equivalencies=u.spectral())
+  <Quantity [  2.99792458e+14,  1.49896229e+14] Hz>
+  >>> ([1000, 2000] * u.nm).to(u.eV, equivalencies=u.spectral())
+  <Quantity [ 1.239..., 0.619...] eV>
 
 These equivalencies even work with non-base units::
 
   >>> # Inches to calories
-  >>> u.inch.to(u.Cal, 1, equivs=u.spectral())
-  1.869180759162485e-27
+  >>> from astropy.units import imperial
+  >>> imperial.inch.to(imperial.Cal, equivalencies=u.spectral())
+  1.8691807591...e-27
+
+Spectral (Doppler) equivalencies
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Spectral equivalencies allow you to convert between wavelength,
+frequency, energy, and wave number but not to velocity, which is
+frequently the quantity of interest.
+
+It is fairly straightforward to define the equivalency, but note that there are
+different `conventions <http://www.gb.nrao.edu/~fghigo/gbtdoc/doppler.html>`__.
+In these conventions :math:`f_0` is the rest frequency, :math:`f` is the observed frequency,
+:math:`V` is the velocity, and :math:`c` is the speed of light:
+
+    * Radio         :math:`V = c \frac{f_0 - f}{f_0}  ;  f(V) = f_0 ( 1 - V/c )`
+    * Optical       :math:`V = c \frac{f_0 - f}{f  }  ;  f(V) = f_0 ( 1 + V/c )^{-1}`
+    * Relativistic  :math:`V = c \frac{f_0^2 - f^2}{f_0^2 + f^2} ;  f(V) = f_0 \frac{\left(1 - (V/c)^2\right)^{1/2}}{(1+V/c)}`
+
+These three conventions are implemented in
+:mod:`astropy.units.equivalencies` as
+:func:`~astropy.units.equivalencies.doppler_optical`,
+:func:`~astropy.units.equivalencies.doppler_radio`, and
+:func:`~astropy.units.equivalencies.doppler_relativistic`.  Example use::
+
+    >>> restfreq = 115.27120 * u.GHz  # rest frequency of 12 CO 1-0 in GHz
+    >>> freq_to_vel = u.doppler_radio(restfreq)
+    >>> (116e9 * u.Hz).to(u.km / u.s, equivalencies=freq_to_vel)
+    <Quantity -1895.4321928669085 km / s>
 
 Spectral Flux Density Units
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-There is also support for spectral flux density units. Their use is more
-complex, since it is necessary to also supply the location in the spectrum for
-which the conversions will be done, and the units of those spectral locations.
-The function that handles these unit conversions is
-`~astropy.units.equivalencies.spectral_density`. This function takes as its
-arguments the unit and value for the spectral location. For example::
+There is also support for spectral flux density units. Their use is
+more complex, since it is necessary to also supply the location in the
+spectrum for which the conversions will be done, and the units of
+those spectral locations.  The function that handles these unit
+conversions is :func:`~astropy.units.equivalencies.spectral_density`. This
+function takes as its arguments the |quantity| for the spectral
+location. For example::
+
+    >>> (1.0 * u.Jy).to(u.erg / u.cm**2 / u.s / u.Hz,
+    ...                 equivalencies=u.spectral_density(3500 * u.AA))
+    <Quantity 1.0000000000000001e-23 erg / (cm2 Hz s)>
+    >>> (1.0 * u.Jy).to(u.erg / u.cm**2 / u.s / u.micron,
+    ...                 equivalencies=u.spectral_density(3500 * u.AA))
+    <Quantity 2.4472853714285712e-08 erg / (cm2 micron s)>
 
-  >>> u.Jy.to(u.erg / u.cm**2 / u.s / u.Hz, 1., equivs=u.spectral_density(u.AA, 3500))
-  1.0000000000000001e-23
+Brightness Temperature / Flux Density Equivalency
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-  >>> u.Jy.to(u.erg / u.cm**2 / u.s / u.micron, 1., equivs=u.spectral_density(u.AA, 3500))
-  2.4472853714285712e-08
+There is an equivalency for brightness temperature and flux density.
+This equivalency is often referred to as "Antenna Gain" since, at a
+given frequency, telescope brightness sensitivity is unrelated to
+aperture size, but flux density sensitivity is, so this equivalency is
+only dependent on the aperture size.  See `Tools of Radio Astronomy
+<http://books.google.com/books?id=9KHw6R8rQEMC&pg=PA179&source=gbs_toc_r&cad=4#v=onepage&q&f=false>`__
+for details.
+
+The `~astropy.units.equivalencies.brightness_temperature` equivalency
+requires the beam area and frequency as arguments.  Example::
+
+    >>> import numpy as np
+    >>> omega_B = np.pi * (50 * u.arcsec)**2
+    >>> freq = 5 * u.GHz
+    >>> u.Jy.to(u.K, equivalencies=u.brightness_temperature(omega_B, freq))
+    7.052588858...
 
 Writing new equivalencies
 -------------------------
@@ -83,57 +210,115 @@ not normally directly convertible, but if we hold the constants in the
 for them::
 
   >>> liters_water = [
-         (u.l, u.g, lambda x: 1000.0 * x, lambda x: x / 1000.0)
-      ]
-  >>> u.l.to(u.kg, 1, equivs=liters_water)
+  ...    (u.l, u.g, lambda x: 1000.0 * x, lambda x: x / 1000.0)
+  ... ]
+  >>> u.l.to(u.kg, 1, equivalencies=liters_water)
   1.0
 
 Note that the equivalency can be used with any other compatible units::
 
-  >>> u.gallon.to(u.pound, 1, equivs=liters_water)
+  >>> from astropy.units import imperial
+  >>> imperial.gallon.to(imperial.pound, 1, equivalencies=liters_water)
   8.345404463333525
 
 And it also works in the other direction::
 
-  >>> u.lb.to(u.pint, 1, equivs=liters_water)
+  >>> imperial.lb.to(imperial.pint, 1, equivalencies=liters_water)
   0.9586114172355458
 
+A slightly more complicated example: Spectral Doppler Equivalencies
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+We show how to define an equivalency using the radio convention for CO 1-0.
+This function is already defined in
+:func:`~astropy.units.equivalencies.doppler_radio`,
+but this example is illustrative::
+
+    >>> from astropy.constants import si
+    >>> restfreq = 115.27120  # rest frequency of 12 CO 1-0 in GHz
+    >>> freq_to_vel = [(u.GHz, u.km/u.s,
+    ... lambda x: (restfreq-x) / restfreq * si.c.to('km/s').value,
+    ... lambda x: (1-x/si.c.to('km/s').value) * restfreq )]
+    >>> u.Hz.to(u.km / u.s, 116e9, equivalencies=freq_to_vel)
+    -1895.432192...
+    >>> (116e9 * u.Hz).to(u.km / u.s, equivalencies=freq_to_vel)
+    <Quantity -1895.432192... km / s>
+
+Note that once this is defined for GHz and km/s, it will work for all other
+units of frequency and velocity.  ``x`` is converted from the input frequency
+unit (e.g., Hz) to GHz before being passed to ``lambda x:``.  Similarly, the
+return value is assumed to be in units of ``km/s``, which is why the ``.value``
+of ``c`` is used instead of the constant.
+
 Displaying available equivalencies
 ----------------------------------
 
-The `find_equivalent_units` function also understands equivalencies.
-For example, without passing equivalencies, there are no compatible
-units for `Hz` in the standard set::
+The :meth:`~astropy.units.core.Unit.find_equivalent_units` method also
+understands equivalencies.  For example, without passing equivalencies,
+there are three compatible units for `Hz` in the standard set::
 
   >>> u.Hz.find_equivalent_units()
     Primary name | Unit definition | Aliases
   [
-    Hz           | 1 / (s)         | Hertz, hertz ,
+    Bq           | 1 / s           | becquerel    ,
+    Ci           | 2.7027e-11 / s  | curie        ,
+    Hz           | 1 / s           | Hertz, hertz ,
   ]
 
 However, when passing the spectral equivalency, you can see there are
-all kinds of things that `Hz` can be converted to::
+all kinds of things that ``Hz`` can be converted to::
 
-  >>> u.Hz.find_equivalent_units(equivs=u.spectral())
-    Primary name | Unit definition           | Aliases
+  >>> u.Hz.find_equivalent_units(equivalencies=u.spectral())
+    Primary name | Unit definition        | Aliases
   [
-    AU           | 1.495979e+11 m            | au                                 ,
-    Angstrom     | 1.000000e-10 m            | AA, angstrom                       ,
-    BTU          | 1.055056e+03 kg m2 / (s2) | btu                                ,
-    Hz           | 1 / (s)                   | Hertz, hertz                       ,
-    J            | kg m2 / (s2)              | Joule, joule                       ,
-    Ry           | 2.179872e-18 kg m2 / (s2) | rydberg                            ,
-    cal          | 4.184000e+00 kg m2 / (s2) | calorie                            ,
-    eV           | 1.602177e-19 kg m2 / (s2) | electronvolt                       ,
-    erg          | 1.000000e-07 kg m2 / (s2) |                                    ,
-    ft           | 3.048000e-01 m            | foot                               ,
-    inch         | 2.540000e-02 m            |                                    ,
-    kcal         | 4.184000e+03 kg m2 / (s2) | Cal, Calorie, kilocal, kilocalorie ,
-    lyr          | 9.460730e+15 m            |                                    ,
-    m            | irreducible               | meter                              ,
-    mi           | 1.609344e+03 m            | mile                               ,
-    micron       | 1.000000e-06 m            |                                    ,
-    pc           | 3.085678e+16 m            | parsec                             ,
-    solRad       | 6.955080e+08 m            |                                    ,
-    yd           | 9.144000e-01 m            | yard                               ,
+    AU           | 1.49598e+11 m          | au             ,
+    Angstrom     | 1e-10 m                | AA, angstrom   ,
+    Bq           | 1 / s                  | becquerel      ,
+    Ci           | 2.7027e-11 / s         | curie          ,
+    Hz           | 1 / s                  | Hertz, hertz   ,
+    J            | kg m2 / s2             | Joule, joule   ,
+    Ry           | 2.17987e-18 kg m2 / s2 | rydberg        ,
+    cm           | 0.01 m                 | centimeter     ,
+    eV           | 1.60218e-19 kg m2 / s2 | electronvolt   ,
+    erg          | 1e-07 kg m2 / s2       |                ,
+    k            | 100 / m                | Kayser, kayser ,
+    lyr          | 9.46073e+15 m          | lightyear      ,
+    m            | irreducible            | meter          ,
+    micron       | 1e-06 m                |                ,
+    pc           | 3.08568e+16 m          | parsec         ,
+    solRad       | 6.95508e+08 m          | R_sun, Rsun    ,
   ]
+
+.. _equivalency-context:
+
+Using equivalencies in larger pieces of code
+--------------------------------------------
+Sometimes one has an involved calculation where one is regularly
+switching back between equivalent units. For these cases, one can set
+equivalencies that will by default be used, in a way similar to which
+one can :ref:`enable other units <enabling-other-units>`.
+
+For instance, to enable radian to be treated as a dimensionless unit,
+simply do::
+
+  >>> import astropy.units as u
+  >>> u.set_enabled_equivalencies(u.dimensionless_angles())
+  <astropy.units.core._UnitContext object at ...>
+  >>> u.deg.to('')
+  0.01745329...
+
+Here, any list of equivalencies could be used, or one could add, e.g.,
+:func:`~astropy.units.equivalencies.spectral` and
+:func:`~astropy.units.equivalencies.spectral_density` (since these return
+lists, they should indeed be combined by adding them together).
+
+The disadvantage of the above approach is that you may forget to turn
+the default off (done by giving an empty argument). To automate this,
+a context manager is provided::
+
+  >>> import astropy.units as u
+  >>> with u.set_enabled_equivalencies(u.dimensionless_angles()):
+  ...    phase = 0.5 * u.cycle
+  ...    c = np.exp(1j*phase)
+  >>> c
+  <Quantity (-1+...j) >
diff --git a/docs/units/format.rst b/docs/units/format.rst
index d010aa6..2fc270c 100644
--- a/docs/units/format.rst
+++ b/docs/units/format.rst
@@ -1,14 +1,104 @@
-Unit formats
-============
-
-Units can be created from strings using the `~astropy.units.core.Unit`
-class::
+.. _astropy-units-format:
+
+String representations of units
+===============================
+
+.. |quantity| replace:: :class:`~astropy.units.quantity.Quantity`
+
+.. |unit| replace:: :class:`~astropy.units.core.UnitBase`
+
+Converting units to string representations
+------------------------------------------
+
+You can control the way that |quantity| and |unit| objects are rendered as
+strings using the new `Format String Syntax
+<http://docs.python.org/library/string.html#format-string-syntax>`__.
+New-style format strings use the ``"{}".format()`` syntax.  Most of
+the format speficiers are simliar to the old ``%``-style formatting,
+so things like ``0.003f`` still work, just in the form
+``"{:0.003f}".format()``.
+
+For quantities, format specifiers, like ``0.003f`` will be applied to
+the |quantity| value, without affecting the unit. Specifiers like
+``20s``, which would only apply to a string, will be applied to the
+whole string representation of the |quantity|. This means you can do::
+
+    >>> from astropy import units as u
+    >>> import numpy as np
+    >>> q = 10 * u.km
+    >>> q
+    <Quantity 10 km>
+    >>> "{0}".format(q)
+    '10 km'
+    >>> "{0:+0.03f}".format(q)
+    '+10.000 km'
+    >>> "{0:20s}".format(q)
+    '10 km               '
+
+To format both the value and the unit separately, you can access the |quantity|
+class attributes within new-style format strings::
+
+    >>> q = 10 * u.km
+    >>> q
+    <Quantity 10 km>
+    >>> "{0.value:0.003f} in {0.unit:s}".format(q)  # doctest: +SKIP
+    '10.000 in km'
+
+Because Numpy arrays don't accept most format specifiers, using specifiers like
+``0.003f`` will not work when applied to a Numpy array or non-scalar |quantity|.
+Use :func:`numpy.array_str` instead. For example::
+
+    >>> q = np.linspace(0,1,10) * u.m
+    >>> "{0} {1}".format(np.array_str(q.value, precision=1), q.unit)
+    '[ 0.   0.1  0.2  0.3  0.4  0.6  0.7  0.8  0.9  1. ] m'
+
+Examine the numpy documentation for more examples with :func:`numpy.array_str`.
+
+Units, or the unit part of a quantity, can also be formatted in a
+number of different styles.  By default, the string format used is
+referred to as the "generic" format, which is based on syntax of the
+FITS standard's format for representing units, but supports all of the
+units defined within the `astropy.units` framework, including
+user-defined units.  The format specifier (and
+`~astropy.units.core.UnitBase.to_string`) functions also take an
+optional parameter to select a different format, including
+``"latex"``, ``"unicode"``, ``"cds"``, and others, defined below.
+
+    >>> "{0.value:0.003f} in {0.unit:latex}".format(q)  # doctest: +SKIP
+    '10.000 in $\\mathrm{km}$'
+    >>> fluxunit = u.erg / (u.cm ** 2 * u.s)
+    >>> "{0}".format(fluxunit)
+    u'erg / (cm2 s)'
+    >>> print("{0:console}".format(fluxunit))
+     erg
+    ------
+    s cm^2
+    >>> "{0:latex}".format(fluxunit)
+    u'$\\mathrm{\\frac{erg}{s\\,cm^{2}}}$'
+    >>> "{0:>20s}".format(fluxunit)
+    u'       erg / (cm2 s)'
+
+The `~astropy.units.core.UnitBase.to_string` method is an alternative way to
+format units as strings, and is the underlying implementation of the
+`format`-style usage::
+
+    >>> fluxunit = u.erg / (u.cm ** 2 * u.s)
+    >>> fluxunit.to_string('latex')
+    u'$\\mathrm{\\frac{erg}{s\\,cm^{2}}}$'
+
+Creating units from strings
+---------------------------
+
+Units can also be created from strings in a number of different
+formats using the `~astropy.units.core.Unit` class::
 
   >>> from astropy import units as u
   >>> u.Unit("m")
   Unit("m")
   >>> u.Unit("erg / (s cm2)")
-  Unit("erg / (s cm2)")
+  Unit("erg / (cm2 s)")
+  >>> u.Unit("erg.s-1.cm-2", format="cds")
+  Unit("erg / (cm2 s)")
 
 .. note::
 
@@ -17,22 +107,9 @@ class::
    penalty if units are created using strings.  Thus, it is much
    faster to use unit objects directly (e.g., ``unit = u.degree /
    u.minute``) instead of via string parsing (``unit =
-   u.Unit('deg/min')``).
-
-Units can be converted to strings using the
-`~astropy.units.core.UnitBase.to_string` method::
-
-  >>> fluxunit = u.erg / (u.cm ** 2 * u.s)
-  >>> fluxunit.to_string()
-  u'erg / (cm2 s)'
-
-By default, the string format used is referred to as the "generic"
-format, which is based on syntax of the FITS standard's format for
-representing units, but supports all of the units defined within the
-`astropy.units` framework, including user-defined units.  The
-`~astropy.units.core.Unit` and
-`~astropy.units.core.UnitBase.to_string` functions also take an
-optional `format` parameter to select a different format.
+   u.Unit('deg/min')``).  This parser is very useful, however, if your
+   unit definitions are coming from a file format such as FITS or
+   VOTable.
 
 Built-in formats
 ----------------
@@ -41,19 +118,20 @@ Built-in formats
 formats:
 
   - ``"fits"``: This is the format defined in the Units section of the
-    `FITS Standard <http://fits.gsfc.nasa.gov/fits_standard.html>`_.
+    `FITS Standard <http://fits.gsfc.nasa.gov/fits_standard.html>`__.
     Unlike the "generic" string format, this will only accept or
     generate units defined in the FITS standard.
 
   - ``"vounit"``: The `proposed IVOA standard
-    <http://www.ivoa.net/Documents/VOUnits/>`_ for representing units
+    <http://www.ivoa.net/Documents/VOUnits/>`__ for representing units
     in the VO.  Again, based on the FITS syntax, but the collection of
     supported units is different.
 
   - ``"cds"``: `Standards for astronomical catalogues from Centre de
     Données astronomiques de Strasbourg
-    <http://cds.u-strasbg.fr/doc/catstd-3.2.htx>`_: This is the
-    standard used, for example, by VOTable versions 1.2 and earlier.
+    <http://cds.u-strasbg.fr/doc/catstd-3.2.htx>`__: This is the
+    standard used by `Vizier tables <http://vizier.u-strasbg.fr/>`__,
+    as well as what is used by VOTable versions 1.2 and earlier.
 
 .. These are to-be-implemented
 
@@ -65,15 +143,15 @@ following formats:
 
   - ``"latex"``: Writes units out using LaTeX math syntax using the
     `IAU Style Manual
-    <http://www.iau.org/static/publications/stylemanual1989.pdf>`_
+    <http://www.iau.org/static/publications/stylemanual1989.pdf>`__
     recommendations for unit presentation.  This format is
     automatically used when printing a unit in the IPython notebook::
 
-      >>> fluxunit
+      >>> fluxunit  # doctest: +SKIP
 
     .. math::
 
-       \mathrm{\frac{erg}{s\ cm^{2}}}
+       \mathrm{\frac{erg}{s\,cm^{2}}}
 
   - ``"console"``: Writes a multi-line representation of the unit
     useful for display in a text console::
@@ -86,10 +164,10 @@ following formats:
   - ``"unicode"``: Same as ``"console"``, except uses Unicode
     characters::
 
-      >>> print u.Ry.decompose().to_string('unicode')
-                 m² kg
-      2.18×10-¹⁸ ─────
-                  s²
+      >>> print u.Ry.decompose().to_string('unicode')  # doctest: +SKIP
+                      m² kg
+      2.1798721×10-¹⁸ ─────
+                       s²
 
 Unrecognized Units
 ------------------
@@ -102,7 +180,10 @@ parse.
 Normally, passing an unrecognized unit string raises an exception::
 
   >>> u.Unit("m/s/s")  # The FITS standard only allows one '/'
-  ValueError: Expected end of text (at char 3) in 'm/s/s'
+  Traceback (most recent call last):
+    ...
+  ValueError: 'm/s/s' did not parse as unit format 'generic': Syntax
+  error parsing unit string 'm/s/s'
 
 However, the `~astropy.units.core.Unit` constructor has the keyword
 argument `parse_strict` that can take one of three values to control
@@ -119,8 +200,9 @@ this behavior:
 So, for example, one can do::
 
    >>> x = u.Unit("m/s/s", parse_strict="warn")
-   WARNING: UnitsWarning: 'm/s/s' did not parse using format 'generic'.
-   Expected end of text (at char 3) in 'm/s/s' [astropy.units.core]
+   WARNING: UnitsWarning: 'm/s/s' did not parse as unit format
+   'generic': Syntax error parsing unit string 'm/s/s'
+   [astropy.units.core]
 
 This `~astropy.units.core.UnrecognizedUnit` object remembers the
 original string it was created with, so it can be written back out,
@@ -130,8 +212,12 @@ unit or composing with other units, will fail.
    >>> x.to_string()
    'm/s/s'
    >>> x.to(u.km / u.s / u.s)
-   ValueError: The unit 'm/s/s' is unrecognized.  It can not be converted to
-   other units.
+   Traceback (most recent call last):
+     ...
+   ValueError: The unit 'm/s/s' is unrecognized.  It can not be
+   converted to other units.
    >>> x / u.m
-   ValueError: The unit 'm/s/s' is unrecognized, so all arithmetic operations
-   with it are invalid.
+   Traceback (most recent call last):
+     ...
+   ValueError: The unit 'm/s/s' is unrecognized, so all arithmetic
+   operations with it are invalid.
diff --git a/docs/units/index.rst b/docs/units/index.rst
index ef490ac..6b57678 100644
--- a/docs/units/index.rst
+++ b/docs/units/index.rst
@@ -1,76 +1,130 @@
 .. _astropy-units:
 
-***********************
-Units (`astropy.units`)
-***********************
+**************************************
+Units and Quantities (`astropy.units`)
+**************************************
+
+.. |quantity| replace:: :class:`~astropy.units.quantity.Quantity`
 
 .. currentmodule:: astropy.units
 
 Introduction
 ============
 
-``astropy.units`` handles defining and converting between physical
+`astropy.units` handles defining and converting between physical
 units, and performing arithmetic with physical quantities (numbers
 with associated units).
 
 Getting Started
 ===============
 
-  >>> from astropy import units as u
-  >>> # Convert from parsec to meter
-  >>> u.pc.to(u.m)
-  3.0856776e+16
-  >>> cms = u.cm / u.s
-  >>> mph = u.mile / u.hour
-  >>> cms.to(mph, 1)
-  0.02236936292054402
-  >>> cms.to(mph, [1., 1000., 5000.])
-  array([  2.23693629e-02,   2.23693629e+01,   1.11846815e+02])
+Most users of the `astropy.units` package will work with "quantities":
+the combination of a value and a unit.  The easiest way to create a
+|quantity| is to simply multiply or divide a value by one of the
+built-in units.  It works with scalars, sequences and Numpy arrays::
+
+    >>> from astropy import units as u
+    >>> 42.0 * u.meter
+    <Quantity 42.0 m>
+    >>> [1., 2., 3.] * u.m
+    <Quantity [ 1., 2., 3.] m>
+    >>> import numpy as np
+    >>> np.array([1., 2., 3.]) * u.m
+    <Quantity [ 1., 2., 3.] m>
+
+You can get the unit and value from a |quantity| using the unit and
+value members::
+
+    >>> q = 42.0 * u.meter
+    >>> q.value
+    42.0
+    >>> q.unit
+    Unit("m")
+
+From this simple building block, it's easy to start combining
+quantities with different units::
+
+    >>> 15.1 * u.meter / (32.0 * u.second)
+    <Quantity 0.471875 m / s>
+    >>> 3.0 * u.kilometer / (130.51 * u.meter / u.second)
+    <Quantity 0.0229867443... km s / m>
+    >>> (3.0 * u.kilometer / (130.51 * u.meter / u.second)).decompose()
+    <Quantity 22.9867443... s>
+
+Unit conversion is done using the
+:meth:`~astropy.units.quantity.Quantity.to` method, which returns a new
+|quantity| in the given unit::
+
+    >>> x = 1.0 * u.parsec
+    >>> x.to(u.km)
+    <Quantity 30856775814671.918 km>
+
+It is also possible to work directly with units at a lower level, for
+example, to create custom units::
+
+    >>> from astropy.units import imperial
+
+    >>> cms = u.cm / u.s
+    >>> # ...and then use some imperial units
+    >>> mph = imperial.mile / u.hour
+
+    >>> # And do some conversions
+    >>> q = 42.0 * cms
+    >>> q.to(mph)
+    <Quantity 0.9395132426628489 mi / h>
 
 Units that "cancel out" become a special unit called the
 "dimensionless unit":
 
-  >>> u.m / u.m
-  Unit(dimensionless)
+    >>> u.m / u.m
+    Unit(dimensionless)
 
-`astropy` is able to match compound units against the units it already
+`astropy.units` is able to match compound units against the units it already
 knows about::
 
-  >>> (u.s ** -1).compose()
-  [Unit("Hz"), ...]
+    >>> (u.s ** -1).compose()  # doctest: +SKIP
+    [Unit("Bq"), Unit("Hz"), Unit("3.7e+10 Ci")]
 
-And it can convert between unit systems::
+And it can convert between unit systems, such as SI or CGS::
 
-  >>> u.Pa.to_system(u.cgs)
-  [Unit("1.000000e+01 Ba")]
+    >>> (1.0 * u.Pa).cgs
+    <Quantity 10.0 Ba>
 
 `astropy.units` also handles equivalencies, such as that between wavelength
 and frequency. To use that feature, equivalence objects are passed to the
-:meth:`~astropy.units.core.UnitBase.to` conversion method. For instance, a
+:meth:`~astropy.units.quantity.Quantity.to` conversion method. For instance, a
 conversion from wavelength to frequency doesn't normally work:
 
-  >>> u.nm.to(u.Hz, [1000, 2000])
-  UnitsException: 'nm' (length) and 'Hz' (frequency) are not convertible
+    >>> (1000 * u.nm).to(u.Hz)
+    Traceback (most recent call last):
+      ...
+    UnitsError: 'nm' (length) and 'Hz' (frequency) are not convertible
 
 but by passing an equivalency list, in this case ``spectral()``, it does:
 
-  >>> u.nm.to(u.Hz, [1000, 2000], equivalencies=u.spectral())
-  array([  2.99792458e+14,   1.49896229e+14])
-  >>> u.nm.to(u.eV, [1000, 2000], equivs=u.spectral())
-  array([ 1.23984201,  0.61992101])
+    >>> (1000 * u.nm).to(u.Hz, equivalencies=u.spectral())
+    <Quantity 299792457999999.94 Hz>
+
+Quantities and units can be printed nicely to strings using the
+`Format String Syntax <http://docs.python.org/library/string.html#format-string-syntax>`_,
+the preferred string formatting syntax in recent versions of python.
+Format specifiers (like ``0.03f``) in new-style format
+strings will used to format the quantity value::
+
+    >>> q = 15.1 * u.meter / (32.0 * u.second)
+    >>> q
+    <Quantity 0.471875 m / s>
+    >>> "{0:0.03f}".format(q)
+    '0.472 m / s'
 
-Also included in the `astropy.units` package is the
-:class:`~astropy.units.quantity.Quantity` object, which represents a numerical
-value with an associated unit. These objects support arithmetic with other
-numbers and :class:`~astropy.units.quantity.Quantity` objects and preserve
-their units::
+The value and unit can also be formatted separately. Format specifiers
+used on units can be used to choose the unit formatter::
 
-   >>> 15.1 * u.meter / (32.0 * u.second)
-   <Quantity 0.471875 m / (s)>
-   >>> 3.0 * u.kilometer / (130.51 * u.meter / u.second)
-   <Quantity 0.0229867443108 km s / (m)>
-   >>> (3.0 * u.kilometer / (130.51 * u.meter / u.second)).decompose()
-   <Quantity 22.9867443108 s>
+    >>> q = 15.1 * u.meter / (32.0 * u.second)
+    >>> q
+    <Quantity 0.471875 m / s>
+    >>> "{0.value:0.03f} {0.unit:FITS}".format(q)
+    '0.472 m s-1'
 
 Using `astropy.units`
 =====================
@@ -78,13 +132,13 @@ Using `astropy.units`
 .. toctree::
    :maxdepth: 2
 
+   quantity
    standard_units
    combining_and_defining
    decomposing_and_composing
-   conversion
    format
    equivalencies
-   quantity
+   conversion
 
 See Also
 ========
@@ -111,7 +165,9 @@ See Also
 Reference/API
 =============
 
-.. automodapi:: astropy.units.core
+.. automodapi:: astropy.units.quantity
+
+.. automodapi:: astropy.units
 
 .. automodapi:: astropy.units.format
 
@@ -123,9 +179,9 @@ Reference/API
 
 .. automodapi:: astropy.units.imperial
 
-.. automodapi:: astropy.units.equivalencies
+.. automodapi:: astropy.units.cds
 
-.. automodapi:: astropy.units.quantity
+.. automodapi:: astropy.units.equivalencies
 
 
 Acknowledgments
diff --git a/docs/units/quantity.rst b/docs/units/quantity.rst
index c10c77b..db8eb92 100644
--- a/docs/units/quantity.rst
+++ b/docs/units/quantity.rst
@@ -1,75 +1,79 @@
 Quantity
 ========
 
-The :class:`~astropy.units.quantity.Quantity` object is meant to represent a
-value that has some unit associated with the number.
+.. |quantity| replace:: :class:`~astropy.units.quantity.Quantity`
+
+The |quantity| object is meant to represent a value that has some unit
+associated with the number.
 
 Creating Quantity instances
 ---------------------------
 
-:class:`~astropy.units.quantity.Quantity` objects are created through
-multiplication or divison with :class:`~astropy.units.core.Unit` objects. For
-example, to create a :class:`~astropy.units.quantity.Quantity` to represent 15
-m/s:
+|quantity| objects are created through multiplication or division with
+:class:`~astropy.units.core.Unit` objects. For example, to create a |quantity|
+to represent 15 m/s:
 
     >>> import astropy.units as u
     >>> 15 * u.m / u.s
-    <Quantity 15 m / (s)>
+    <Quantity 15 m / s>
 
 or 1.14/s:
 
     >>> 1.14 / u.s
-    <Quantity 1.14 1 / (s)>
+    <Quantity 1.14 1 / s>
 
-You can also create instances using the
-:class:`~astropy.units.quantity.Quantity` constructor directly, by specifying
-a value and unit:
+You can also create instances using the |quantity| constructor directly, by
+specifying a value and unit:
 
     >>> u.Quantity(15, u.m / u.s)
-    <Quantity 15 m / (s)>
+    <Quantity 15 m / s>
 
-:class:`~astropy.units.quantity.Quantity` objects can also be created
-automatically from Numpy arrays:
+|quantity| objects can also be created automatically from Numpy arrays
+or Python sequences:
 
+    >>> [1, 2, 3] * u.m
+    <Quantity [1,2,3] m>
     >>> import numpy as np
-    >>> np.array([1,2,3]) * u.m
-    <Quantity [1 2 3] m>
+    >>> np.array([1, 2, 3]) * u.m
+    <Quantity [1,2,3] m>
 
-:class:`~astropy.units.quantity.Quantity` objects can also be created from
-sequencies of :class:`~astropy.units.quantity.Quantity` objects, and will
+|quantity| objects can also be created from sequences of |quantity|
+objects, as long as all of their units are equivalent, and will
 automatically convert to Numpy arrays.
 
-    >>> qlst = [60 * u.s, 120 * u.s]
+    >>> qlst = [60 * u.s, 1 * u.min]
     >>> u.Quantity(qlst, u.minute)
-    <Quantity [ 1.  2.] min>
+    <Quantity [ 1.,  1.] min>
 
-Finally, the current unit and value can be accessed via the ``unit`` and
-``value`` attributes:
+Finally, the current unit and value can be accessed via the
+`~astropy.units.quantity.Quantity.unit` and
+`~astropy.units.quantity.Quantity.value` attributes:
 
     >>> q = 2.3 * u.m / u.s
     >>> q.unit
-    Unit("m / (s)")
+    Unit("m / s")
     >>> q.value
     2.3
 
 Converting to different units
 -----------------------------
 
-:class:`~astropy.units.quantity.Quantity` objects can be converted to
-different units using the :meth:`~astropy.units.quantity.Quantity.to` method::
+|quantity| objects can be converted to different units using the
+:meth:`~astropy.units.quantity.Quantity.to` method::
 
     >>> q = 2.3 * u.m / u.s
     >>> q.to(u.km / u.h)
-    <Quantity 8.28 km / (h)>
+    <Quantity 8.28 km / h>
 
-For convenience, the `si` and `cgs` attributes can be used to convert the
-:class:`~astropy.units.quantity.Quantity` to base S.I. or c.g.s units:
+For convenience, the `~astropy.units.quantity.Quantity.si` and
+`~astropy.units.quantity.Quantity.cgs` attributes can be used to
+convert the |quantity| to base S.I. or c.g.s units:
 
     >>> q = 2.4 * u.m / u.s
     >>> q.si
-    <Quantity 2.4 m / (s)>
+    <Quantity 2.4 m / s>
     >>> q.cgs
-    <Quantity 240.0 cm / (s)>
+    <Quantity 240.0 cm / s>
 
 Arithmetic
 ----------
@@ -77,9 +81,9 @@ Arithmetic
 Addition and Subtraction
 ~~~~~~~~~~~~~~~~~~~~~~~~
 
-Addition or subtraction between :class:`~astropy.units.quantity.Quantity`
-objects is supported when their units are equivalent. When the units are
-equal, the resulting object has the same unit:
+Addition or subtraction between |quantity| objects is supported when their
+units are equivalent. When the units are equal, the resulting object has the
+same unit:
 
     >>> 11 * u.s + 30 * u.s
     <Quantity 41 s>
@@ -98,37 +102,40 @@ resulting object **has units of the object on the left**:
     >>> 13.5 * u.km - 1100.1 * u.m
     <Quantity 12.3999 km>
 
-Addition and subtraction is not supported between
-:class:`~astropy.units.quantity.Quantity` objects and basic numeric types:
+Addition and subtraction is not supported between |quantity| objects and basic
+numeric types:
 
     >>> 13.5 * u.km + 19.412
-    TypeError: Object of type '<type 'float'>' cannot be added with a Quantity
-    object. Addition is only supported between Quantity objects.
+    Traceback (most recent call last):
+      ...
+    UnitsError: Can only apply 'add' function to dimensionless
+    quantities when other argument is not a quantity
+
+except for dimensionless quantities (see `Dimensionless quantities`_).
 
 Multiplication and Division
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Multiplication and division is supported between
-:class:`~astropy.units.quantity.Quantity` objects with any units, and with
-numeric types. For these operations between objects with equivalent units, the
-**resulting object has composite units**:
+Multiplication and division is supported between |quantity| objects with any
+units, and with numeric types. For these operations between objects with
+equivalent units, the **resulting object has composite units**:
 
     >>> 1.1 * u.m * 140.3 * u.cm
     <Quantity 154.33 cm m>
     >>> 140.3 * u.cm * 1.1 * u.m
     <Quantity 154.33 cm m>
     >>> 1. * u.m / (20. * u.cm)
-    <Quantity 0.05 m / (cm)>
+    <Quantity 0.05 m / cm>
     >>> 20. * u.cm / (1. * u.m)
-    <Quantity 20.0 cm / (m)>
+    <Quantity 20.0 cm / m>
 
 For multiplication, you can change how to represent the resulting object by
 using the :meth:`~astropy.units.quantity.Quantity.to` method:
 
     >>> (1.1 * u.m * 140.3 * u.cm).to(u.m**2)
-    <Quantity 1.5433 m2>
+    <Quantity 1.5433... m2>
     >>> (1.1 * u.m * 140.3 * u.cm).to(u.cm**2)
-    <Quantity 15433.0 cm2>
+    <Quantity 15433.0... cm2>
 
 For division, if the units are equivalent, you may want to make the resulting
 object dimensionless by reducing the units. To do this, use the
@@ -140,67 +147,128 @@ object dimensionless by reducing the units. To do this, use the
 This method is also useful for more complicated arithmetic:
 
     >>> 15. * u.kg * 32. * u.cm * 15 * u.m / (11. * u.s * 1914.15 * u.ms)
-    <Quantity 0.341950972779 cm kg m / (ms s)>
+    <Quantity 0.341950972... cm kg m / (ms s)>
     >>> (15. * u.kg * 32. * u.cm * 15 * u.m / (11. * u.s * 1914.15 * u.ms)).decompose()
-    <Quantity 3.41950972779 kg m2 / (s2)>
-
-Converting to Python or Numpy types
------------------------------------
-
-:class:`~astropy.units.quantity.Quantity` objects can easily be converted to
-Python scalars or Numpy arrays, either by explicitly using :func:`float`,
-:func:`int`, :func:`long`, or :func:`numpy.array`, e.g:
-
-    >>> q = 2.5 * u.m / u.s
-    >>> float(q)
-    WARNING: Converting Quantity object in units 'm / (s)' to a Python scalar
-    2.5
-    >>> np.array(q)
-    WARNING: Converting Quantity object in units 'm / (s)' to a Numpy array
-    array(2.5)
-
-or by using them directly in e.g. Numpy functions:
-
-    >>> q = 10. * u.km / u.h
-    >>> np.log10(q)
-    WARNING: Converting Quantity object in units 'km / (h)' to a Numpy array
-    1.0
-
-but note that in all cases, a warning is emitted to indicate that the
-resulting floating point value is in the units of the original
-:class:`~astropy.units.quantity.Quantity` object. There is **no conversion**
-to a different or simpler set of units. For example, in the following case::
-
-    >>> q = 100. * u.cm / u.m
-    >>> np.log10(q)
-    WARNING: Converting Quantity object in units 'cm / (m)' to a Numpy array
+    <Quantity 3.41950972... kg m2 / s2>
+
+
+Numpy functions
+---------------
+
+|quantity| objects are actually full Numpy arrays (the |quantity|
+object class inherits from and extends the `numpy.ndarray` class), and
+we have tried to ensure that most Numpy functions behave properly with
+units:
+
+    >>> q = np.array([1., 2., 3., 4.]) * u.m / u.s
+    >>> np.mean(q)
+    <Quantity 2.5 m / s>
+    >>> np.std(q)
+    <Quantity 1.118033... m / s>
+
+including functions that only accept specific units such as angles::
+
+    >>> q = 30. * u.deg
+    >>> np.sin(q)
+    <Quantity 0.499... >
+
+or dimensionless quantities::
+
+    >>> nu = 3 * u.GHz
+    >>> T = 30 * u.K
+    >>> np.exp(-h * nu / (k_B * T))  # doctest: +SKIP
+    <Quantity 0.995212254619 >
+
+(see `Dimensionless quantities`_ for more details).
+
+Dimensionless quantities
+------------------------
+
+Dimensionless quantities have the characteristic that if they are
+added or subtracted from a Python scalar or unitless `~numpy.ndarray`,
+or if they are passed to a Numpy function that takes dimensionless
+quantities, the units are simplified so that the quantity is
+dimensionless and scale-free. For example::
+
+    >>> 1. + 1. * u.m / u.km
+    <Quantity 1.001 >
+
+which is different from::
+
+    >>> 1. + (1. * u.m / u.km).value
     2.0
 
-The result is ``2.`` because the quantity is 100 cm/m, and so the numerical
-value is 100 (and the units are cm/m). If you want to simplify e.g.
-dimensionless quantities to their true dimensionless value, then you can make
-use of the :meth:`~astropy.units.quantity.Quantity.decompose` method:
+In the latter case, the result is ``2.0`` because the unit of ``(1. * u.m /
+u.km)`` is not scale-free by default::
 
-    >>> q.decompose()
-    <Quantity 1.0 >
-    >>> np.log10(q.decompose())
-    0.0
+    >>> q = (1. * u.m / u.km)
+    >>> q.unit
+    Unit("m / km")
+    >>> q.unit.decompose()
+    Unit(dimensionless with a scale of 0.001)
+
+However, when combining with a non-quantity object, the unit is automatically
+decomposed to be scale-free, giving the expected result.
+
+This also occurs when passing dimensionless quantities to functions that take
+dimensionless quantities::
+
+    >>> nu = 3 * u.GHz
+    >>> T = 30 * u.K
+    >>> np.exp(- h * nu / (k_B * T))  # doctest: +SKIP
+    <Quantity 0.995212254619 >
+
+The result is independent from the units the different quantities were specified in::
 
-and note that in that case, there is no warning emitted, because
-``q.decompose()`` has no units, so conversion to floating point is
-unambiguous.
+    >>> nu = 3.e9 * u.Hz
+    >>> T = 30 * u.K
+    >>> np.exp(- h * nu / (k_B * T))  # doctest: +SKIP
+    <Quantity 0.995212254619 >
 
-If you want to disable the warnings, you can use the following configuration
-item to silence them:
+Converting to plain Python scalars or Numpy arrays
+--------------------------------------------------
 
-    >>> u.quantity.WARN_IMPLICIT_NUMERIC_CONVERSION.set(False)
+Converting |quantity| objects does not work for non-dimensionless quantities::
 
-which then gives e.g.:
+    >>> float(3. * u.m)
+    Traceback (most recent call last):
+      ...
+    TypeError: Only dimensionless scalar quantities can be converted
+    to Python scalars
+
+Instead, only dimensionless values can be converted to plain Python scalars::
+
+    >>> float(3. * u.m / (4. * u.m))
+    0.75
+
+Note that scaled dimensionless quantities such as ``m / km`` also do not work::
+
+    >>> float(3. * u.m / (4. * u.km))
+    Traceback (most recent call last):
+      ...
+    TypeError: Only dimensionless scalar quantities can be converted
+    to Python scalars
+
+If you want to simplify e.g. dimensionless quantities to their true
+dimensionless value, then you can make use of the
+:meth:`~astropy.units.quantity.Quantity.decompose` method:
+
+    >>> q = 3. * u.m / (4. * u.km)
+    >>> q
+    <Quantity 0.75 m / km>
+    >>> q.decompose()
+    <Quantity 0.00075 >
+    >>> float(q.decompose())
+    0.00075
 
-    >>> np.log10(1. * u.m)
-    0.0
+Similarly, `int` and `long` work, but only for dimensionless unscaled
+quantities::
 
-without a warning. As for all configuration items, one can also directly set
-the ``warn_implicit_numeric_conversion`` item in ``astropy.cfg``.
+    >>> int(6. * u.m / (2. * u.m))
+    3
 
+Since |quantity| objects are actual Numpy arrays, we are not able to ensure
+that only dimensionless quantities are converted to Numpy arrays::
 
+    >>> np.array([1, 2, 3] * u.m)
+    array([1, 2, 3])
diff --git a/docs/units/standard_units.rst b/docs/units/standard_units.rst
index 0f6b1af..1b2292b 100644
--- a/docs/units/standard_units.rst
+++ b/docs/units/standard_units.rst
@@ -28,23 +28,20 @@ to worry about the various kinds of unit classes unless one wants to
 design a more complex case.
 
 There are many units already predefined in the module. One may use the
-following function to list all the existing predefined units of a
-given type::
+`~astropy.units.core.UnitBase.find_equivalent_units` method to list
+all the existing predefined units of a given type::
 
   >>> from astropy import units as u
   >>> u.g.find_equivalent_units()
     Primary name | Unit definition | Aliases
   [
-    M_e          | 9.109383e-31 kg |            ,
-    M_p          | 1.672622e-27 kg |            ,
-    g            | 1.000000e-03 kg | gram       ,
-    kg           | irreducible     | kilogram   ,
-    lb           | 4.535924e-01 kg | pound      ,
-    oz           | 2.834952e-02 kg | ounce      ,
-    solMass      | 1.989100e+30 kg |            ,
-    t            | 1.000000e+03 kg | tonne      ,
-    ton          | 9.071847e+02 kg |            ,
-    u            | 1.660539e-27 kg | Da, Dalton ,
+    M_e          | 9.10938e-31 kg  |             ,
+    M_p          | 1.67262e-27 kg  |             ,
+    g            | 0.001 kg        | gram        ,
+    kg           | irreducible     | kilogram    ,
+    solMass      | 1.9891e+30 kg   | M_sun, Msun ,
+    t            | 1000 kg         | tonne       ,
+    u            | 1.66054e-27 kg  | Da, Dalton  ,
   ]
 
 The dimensionless unit
@@ -57,7 +54,7 @@ equal to `None`: that indicates that no unit was specified in the data
 or by the user.
 
 For convenience, there is a unit that is both dimensionless and
-unscaled: the `~astropy.units.dimensionless_unscaled` object::
+unscaled: the `~astropy.units.core.dimensionless_unscaled` object::
 
    >>> from astropy import units as u
    >>> u.dimensionless_unscaled
@@ -89,13 +86,64 @@ For example::
    False
 
 To determine if a unit is dimensionless (but regardless of the scale),
-use the `physical_type` property::
+use the `~astropy.units.core.UnitBase.physical_type` property::
 
    >>> (u.km / u.m).physical_type
    u'dimensionless'
-   # This also has a scale, so it is not the same as u.dimensionless_unscaled
+   >>> # This also has a scale, so it is not the same as u.dimensionless_unscaled
    >>> (u.km / u.m) == u.dimensionless_unscaled
    False
-   # However, (u.m / u.m) has a scale of 1.0, so it is the same
+   >>> # However, (u.m / u.m) has a scale of 1.0, so it is the same
    >>> (u.m / u.m) == u.dimensionless_unscaled
    True
+
+.. _enabling-other-units:
+
+Enabling other units
+--------------------
+
+By default, only the "default" units are searched by
+`~astropy.units.core.UnitBase.find_equivalent_units` and similar
+methods that do searching.  This includes SI, CGS and astrophysical
+units.  However, one may wish to enable the imperial or other
+user-defined units.
+
+For example, to enable Imperial units, simply do::
+
+    >>> from astropy.units import imperial
+    >>> imperial.enable()  # doctest: +SKIP
+    >>> u.m.find_equivalent_units()  # doctest: +SKIP
+      Primary name | Unit definition | Aliases
+    [
+      AU           | 1.49598e+11 m   | au               ,
+      Angstrom     | 1e-10 m         | AA, angstrom     ,
+      cm           | 0.01 m          | centimeter       ,
+      ft           | 0.3048 m        | foot             ,
+      inch         | 0.0254 m        |                  ,
+      lyr          | 9.46073e+15 m   | lightyear        ,
+      m            | irreducible     | meter            ,
+      mi           | 1609.34 m       | mile             ,
+      micron       | 1e-06 m         |                  ,
+      nmi          | 1852 m          | nauticalmile, NM ,
+      pc           | 3.08568e+16 m   | parsec           ,
+      solRad       | 6.95508e+08 m   | R_sun            ,
+      yd           | 0.9144 m        | yard             ,
+    ]
+
+
+This may also be used with the ``with`` statement, to temporarily
+enable additional units::
+
+    >>> from astropy import units as u
+    >>> from astropy.units import imperial
+    >>> with imperial.enable():
+    ...     u.m.find_equivalent_units()  # doctest: +SKIP
+    ...
+
+To enable just specific units, use `~astropy.units.add_enabled_units`::
+
+    >>> from astropy import units as u
+    >>> from astropy.units import imperial
+    >>> with u.add_enabled_units_context([imperial.knot]):
+    ...     u.m.find_equivalent_units()  # doctest: +SKIP
+    ...
diff --git a/docs/utils/index.rst b/docs/utils/index.rst
index 19f76a2..672dc3e 100644
--- a/docs/utils/index.rst
+++ b/docs/utils/index.rst
@@ -32,16 +32,23 @@ documentation does not have detailed sections like the other packages.
 
 Reference/API
 =============
+.. module:: astropy.utils
 
 .. automodapi:: astropy.utils.misc
     :no-inheritance-diagram:
 
+.. automodapi:: astropy.utils.exceptions
+    :no-inheritance-diagram:
+
 .. automodapi:: astropy.utils.collections
     :no-inheritance-diagram:
 
 .. automodapi:: astropy.utils.console
     :no-inheritance-diagram:
 
+.. automodapi:: astropy.utils.timer
+    :no-inheritance-diagram:
+
 File Downloads
 --------------
 
@@ -61,6 +68,10 @@ The ``astropy.utils.xml.*`` modules provide various
     :no-inheritance-diagram:
     :headings: ^"
 
+.. automodapi:: astropy.utils.xml.unescaper
+    :no-inheritance-diagram:
+    :headings: ^"
+
 .. automodapi:: astropy.utils.xml.validate
     :no-inheritance-diagram:
     :headings: ^"
diff --git a/docs/vo/client.rst b/docs/vo/client.rst
new file mode 100644
index 0000000..d7997c4
--- /dev/null
+++ b/docs/vo/client.rst
@@ -0,0 +1,529 @@
+Using `astropy.vo.client`
+=========================
+
+This subpackage contains modules supporting VO client-side operations.
+
+.. _vo-sec-client-vos:
+
+General VO Services Access
+--------------------------
+
+`astropy.vo.client.vos_catalog` contains common utilities for accessing
+simple VO services.
+
+.. _vo-sec-vos-config:
+
+Configurable Items
+^^^^^^^^^^^^^^^^^^
+
+These parameters are set via :ref:`astropy_config`:
+
+* ``astropy.io.votable.table.PEDANTIC``
+* ``astropy.utils.data.REMOTE_TIMEOUT``
+* ``astropy.vo.client.vos_catalog.BASEURL``
+
+Examples
+^^^^^^^^
+
+>>> from astropy.vo.client import vos_catalog
+
+Get all catalogs from a database named ``'conesearch_good'`` (this contains
+cone search services that cleanly passed daily validations;
+also see :ref:`Cone Search Examples <vo-sec-scs-examples>`):
+
+>>> my_db = vos_catalog.get_remote_catalog_db('conesearch_good')
+Downloading http://stsdas.stsci.edu/astrolib/vo_databases/conesearch_good.json
+|============================================|  56/ 56k (100.00%)        00s
+>>> my_db
+<astropy.vo.client.vos_catalog.VOSDatabase at 0x2b0f3d0>
+>>> print(my_db)
+Guide Star Catalog 2.3 1
+SDSS DR7 - Sloan Digital Sky Survey Data Release 7 1
+SDSS DR7 - Sloan Digital Sky Survey Data Release 7 2
+# ...
+USNO-A2 Catalogue 1
+USNO-A2.0 1
+
+If you get timeout error, you need to use a custom timeout as follows:
+
+>>> from astropy.utils.data import REMOTE_TIMEOUT
+>>> with REMOTE_TIMEOUT.set_temp(30):
+...     my_db = vos_catalog.get_remote_catalog_db('conesearch_good')
+
+Find catalog names containing ``'usno*a2'``:
+
+>>> my_db.list_catalogs(pattern='usno*a2')
+[u'The USNO-A2.0 Catalogue (Monet+ 1998) 1', u'USNO-A2 Catalogue 1']
+
+Get information for a catalog titled ``'USNO-A2 Catalogue 1'``:
+
+>>> my_cat = my_db.get_catalog('USNO-A2 Catalogue 1')
+>>> my_cat
+<astropy.vo.client.vos_catalog.VOSCatalog at 0x1f78150>
+>>> print(my_cat)
+title: USNO-A2 Catalogue
+url: http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-A2&
+>>> print(my_cat.dumps())
+{
+    "capabilityClass": "ConeSearch",
+    "capabilityStandardID": "ivo://ivoa.net/std/ConeSearch",
+    "capabilityValidationLevel": "",
+    "contentLevel": "#University#Research#Amateur#",
+    # ...
+    "version": "",
+    "waveband": "#Optical#"
+}
+>>> my_cat.keys()
+[u'validate_network_error',
+ u'capabilityClass',
+ u'updated',
+ # ...
+ u'identifier',
+ u'validate_xmllint']
+>>> my_cat['url']
+u'http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-A2&'
+>>> my_cat['maxRadius']
+1.0
+
+One can also get information for a catalog using its URL.
+If a URL yields multiple catalogs (this can happen when the service provider
+re-register the URL with a different title), only the first match is returned:
+
+>>> my_cat2 = my_db.get_catalog_by_url(
+...     'http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/255/out&')
+>>> print(my_cat2.dumps())
+{
+    "capabilityClass": "ConeSearch",
+    "capabilityStandardID": "ivo://ivoa.net/std/ConeSearch",
+    "capabilityValidationLevel": "",
+    "contentLevel": "#Research#",
+    # ...
+    "version": "15-Sep-1999",
+    "waveband": "#Optical#"
+}
+
+To see validation warnings generated by :ref:`vo-sec-validator-validate`
+for the catalog above:
+
+>>> for w in my_cat2['validate_warnings']:
+...     print(w)
+/.../vo.xml:13:0: W22: The DEFINITIONS element is deprecated in VOTable 1.1...
+
+To get all the matching catalogs by URL:
+
+>>> matched_cats = [cat for key, cat in my_db.get_catalogs_by_url(
+...     'http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/255/out&')]
+>>> for c in matched_cats:
+...     print(str(c))
+title: The HST Guide Star Catalog, Version GSC-ACT (Lasker+ 1996-99)
+url: http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/255/out&
+
+To get all catalogs in the database:
+
+>>> all_cats = [cat for key, cat in my_db.get_catalogs()]
+
+By default, pedantic is ``False``:
+
+>>> from astropy.io.votable.table import PEDANTIC
+>>> PEDANTIC()
+False
+
+To call a given VO service; In this case, a Cone Search
+(also see :ref:`Cone Search Examples <vo-sec-scs-examples>`):
+
+>>> from astropy import coordinates as coord
+>>> from astropy import units as u
+>>> c = coord.ICRS.from_name('47 Tuc')
+>>> c
+<ICRS RA=6.02233 deg, Dec=-72.08144 deg>
+>>> sr = 0.5 * u.degree
+>>> sr
+<Quantity 0.5 deg>
+>>> result = vos_catalog.call_vo_service(
+...     'conesearch_good',
+...     kwargs={'RA': c.ra.degree, 'DEC': c.dec.degree, 'SR': sr},
+...     catalog_db='The PMM USNO-A1.0 Catalogue (Monet 1997) 1')
+Trying http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/243/out&
+Downloading ...
+WARNING: W22: ... The DEFINITIONS element is deprecated in VOTable 1.1...
+WARNING: W03: ... Implictly generating an ID from a name 'RA(ICRS)'...
+WARNING: W03: ... Implictly generating an ID from a name 'DE(ICRS)'...
+>>> result
+<astropy.io.votable.tree.Table at 0x3cc4850>
+
+To repeat the above and suppress *all* the screen outputs (not recommended):
+
+>>> import warnings
+>>> with warnings.catch_warnings():
+...     warnings.simplefilter('ignore')
+...     result = vos_catalog.call_vo_service(
+...         'conesearch_good',
+...         kwargs={'RA': c.ra.degree, 'DEC': c.dec.degree, 'SR': sr},
+...         catalog_db='The PMM USNO-A1.0 Catalogue (Monet 1997) 1',
+...         verbose=False)
+
+
+.. _vo-sec-client-scs:
+
+Simple Cone Search
+------------------
+
+`astropy.vo.client.conesearch` supports VO Simple Cone Search capabilities.
+
+Available databases are generated on the server-side hosted by STScI using
+:ref:`vo-sec-validator-validate`. The database used is controlled by
+``astropy.vo.client.conesearch.CONESEARCH_DBNAME``, which can be changed
+in :ref:`vo-sec-scs-config` below. Here are the available options:
+
+#. ``'conesearch_good'``
+     Default. Passed validation without critical warnings and exceptions.
+#. ``'conesearch_warn'``
+     Has critical warnings but no exceptions. Use at your own risk.
+#. ``'conesearch_exception'``
+     Has some exceptions. *Never* use this.
+#. ``'conesearch_error'``
+     Has network connection error. *Never* use this.
+
+In the default setting, it searches the good Cone Search services one by one,
+stops at the first one that gives non-zero match(es), and returns the result.
+Since the list of services are extracted from a Python dictionary, the search
+order might differ from call to call.
+
+There are also functions, both synchronously and asynchronously, available to
+return *all* the Cone Search query results. However, this is not recommended
+unless one knows what one is getting into, as it could potentially take up
+significant run time and computing resources.
+
+:ref:`vo-sec-scs-examples` below show how to use non-default search behaviors,
+where the user has more control of which catalog(s) to search, et cetera.
+
+.. note::
+
+    Most services currently fail to parse when ``pedantic=True``.
+
+.. warning::
+
+    When Cone Search returns warnings, user should decide
+    whether the results are reliable by inspecting the
+    warning codes in `astropy.io.votable.exceptions`.
+
+.. _vo-sec-scs-config:
+
+Configurable Items
+^^^^^^^^^^^^^^^^^^
+
+These parameters are set via :ref:`astropy_config`:
+
+* ``astropy.utils.data.REMOTE_TIMEOUT``
+* ``astropy.vo.client.conesearch.CONESEARCH_DBNAME``
+
+Also depends on :ref:`General VO Services Access Configurable Items <vo-sec-vos-config>`.
+
+.. _vo-sec-scs-examples:
+
+Examples
+^^^^^^^^
+
+>>> from astropy.vo.client import conesearch
+
+Shows a sorted list of Cone Search services to be searched
+(to inspect them in detail, see :ref:`vo-sec-client-vos`):
+
+>>> conesearch.list_catalogs()
+[u'Guide Star Catalog 2.3 1',
+ u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 1',
+ u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 2',
+ u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 3',
+ u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 4',
+ u'SDSS DR8 - Sloan Digital Sky Survey Data Release 8 1',
+ u'SDSS DR8 - Sloan Digital Sky Survey Data Release 8 2',
+ u'The HST Guide Star Catalog, Version 1.1 (Lasker+ 1992) 1',
+ u'The HST Guide Star Catalog, Version 1.2 (Lasker+ 1996) 1',
+ u'The HST Guide Star Catalog, Version GSC-ACT (Lasker+ 1996-99) 1',
+ u'The PMM USNO-A1.0 Catalogue (Monet 1997) 1',
+ u'The USNO-A2.0 Catalogue (Monet+ 1998) 1',
+ u'Two Micron All Sky Survey (2MASS) 1',
+ u'Two Micron All Sky Survey (2MASS) 2',
+ u'USNO-A2 Catalogue 1',
+ u'USNO-A2.0 1']
+
+Select a catalog to search:
+
+>>> my_catname = 'The PMM USNO-A1.0 Catalogue (Monet 1997) 1'
+
+By default, pedantic is ``False``:
+
+>>> from astropy.io.votable.table import PEDANTIC
+>>> PEDANTIC()
+False
+
+Perform Cone Search in the selected catalog above for 0.5 degree radius
+around 47 Tucanae with minimum verbosity, if supported.
+The ``catalog_db`` keyword gives control over which catalog(s) to use.
+If running this for the first time, a copy of the catalogs database will be
+downloaded to local cache. To run this again without
+using cached data, set ``cache=False``:
+
+>>> from astropy import coordinates as coord
+>>> from astropy import units as u
+>>> c = coord.ICRS.from_name('47 Tuc')
+>>> c
+<ICRS RA=6.02233 deg, Dec=-72.08144 deg>
+>>> sr = 0.5 * u.degree
+>>> sr
+<Quantity 0.5 deg>
+>>> result = conesearch.conesearch(c, sr, catalog_db=my_catname)
+Trying http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/243/out&
+Downloading ...
+WARNING: W22: ... The DEFINITIONS element is deprecated in VOTable 1.1...
+
+To run the command above using custom timeout of
+30 seconds for each Cone Search service query:
+
+>>> from astropy.utils.data import REMOTE_TIMEOUT
+>>> with REMOTE_TIMEOUT.set_temp(30):
+...     result = conesearch.conesearch(c, sr, catalog_db=my_catname)
+
+To suppress *all* the screen outputs (not recommended):
+
+>>> import warnings
+>>> with warnings.catch_warnings():
+...     warnings.simplefilter('ignore')
+...     result = conesearch.conesearch(c, sr, catalog_db=my_catname,
+...                                    verbose=False)
+
+Extract Numpy array containing the matched objects. See
+`numpy` for available operations:
+
+>>> cone_arr = result.array.data
+>>> cone_arr
+array([(0.499298, 4.403473, -72.124045, '0150-00088188'),
+       (0.499075, 4.403906, -72.122762, '0150-00088198'),
+       (0.499528, 4.404531, -72.045198, '0150-00088210'), ...,
+       (0.4988, 7.641731, -72.113156, '0150-00225965'),
+       (0.499554, 7.645489, -72.103167, '0150-00226134'),
+       (0.499917, 7.6474, -72.0876, '0150-00226223')],
+      dtype=[('_r', '<f8'), ('_RAJ2000', '<f8'), ('_DEJ2000', '<f8'),
+             ('USNO-A1.0', '|S13')])
+>>> cone_arr.dtype.names
+('_r', '_RAJ2000', '_DEJ2000', 'USNO-A1.0')
+>>> cone_arr.size
+36184
+>>> ra_list = cone_arr['_RAJ2000']
+>>> ra_list
+array([ 4.403473,  4.403906,  4.404531, ...,  7.641731,  7.645489,  7.6474  ])
+>>> cone_arr[0]  # First row
+(0.499298, 4.403473, -72.124045, '0150-00088188')
+>>> cone_arr[-1]  # Last row
+(0.499917, 7.6474, -72.0876, '0150-00226223')
+>>> cone_arr[:10]  # First 10 rows
+array([(0.499298, 4.403473, -72.124045, '0150-00088188'),
+       (0.499075, 4.403906, -72.122762, '0150-00088198'),
+       (0.499528, 4.404531, -72.045198, '0150-00088210'),
+       (0.497252, 4.406078, -72.095045, '0150-00088245'),
+       (0.499739, 4.406462, -72.139545, '0150-00088254'),
+       (0.496312, 4.410623, -72.110492, '0150-00088372'),
+       (0.49473, 4.415053, -72.071217, '0150-00088494'),
+       (0.494171, 4.415939, -72.087512, '0150-00088517'),
+       (0.493722, 4.417678, -72.0972, '0150-00088572'),
+       (0.495147, 4.418262, -72.047142, '0150-00088595')],
+      dtype=[('_r', '<f8'), ('_RAJ2000', '<f8'), ('_DEJ2000', '<f8'),
+             ('USNO-A1.0', '|S13')])
+
+Sort the matched objects by angular separation in ascending order:
+
+>>> import numpy as np
+>>> sep = cone_arr['_r']
+>>> i_sorted = np.argsort(sep)
+>>> cone_arr[i_sorted]
+array([(0.081971, 5.917787, -72.006075, '0150-00145335'),
+       (0.083181, 6.020339, -72.164623, '0150-00149799'),
+       (0.089166, 5.732798, -72.077698, '0150-00137181'), ...,
+       (0.499981, 7.024962, -72.477503, '0150-00198745'),
+       (0.499987, 6.423773, -71.597364, '0150-00168596'),
+       (0.499989, 6.899589, -72.5043, '0150-00192872')],
+      dtype=[('_r', '<f8'), ('_RAJ2000', '<f8'), ('_DEJ2000', '<f8'),
+             ('USNO-A1.0', '|S13')])
+
+Result can also be manipulated as :ref:`astropy-io-votable`
+and its unit can be manipulated as :ref:`astropy-units`.
+In this example, we convert RA values from degree to arcsec:
+
+>>> from astropy import units as u
+>>> ra_field = result.get_field_by_id('_RAJ2000')
+>>> ra_field.title
+u'Right ascension (FK5, Equinox=J2000.0) (computed by VizieR, ...)'
+>>> ra_field.unit
+Unit("deg")
+>>> ra_field.unit.to(u.arcsec) * ra_list
+array([ 15852.5028,  15854.0616,  15856.3116, ...,  27510.2316,
+        27523.7604,  27530.64  ])
+
+Perform the same Cone Search as above but asynchronously using
+`~astropy.vo.client.conesearch.AsyncConeSearch`.
+Queries to individual Cone Search services are still governed by
+``astropy.utils.data.REMOTE_TIMEOUT``. Cone Search is forced
+to run in silent mode asynchronously, but warnings are still
+controlled by :py:mod:`warnings`:
+
+>>> async_search = conesearch.AsyncConeSearch(c, sr, catalog_db=my_catname)
+
+Check asynchronous search status:
+
+>>> async_search.running()
+True
+>>> async_search.done()
+False
+
+Get search results after a 30-second wait (not to be
+confused with ``astropy.utils.data.REMOTE_TIMEOUT`` that
+governs individual Cone Search queries). If search is still not
+done after 30 seconds, ``TimeoutError`` is raised. Otherwise,
+Cone Search result is returned and can be manipulated as
+above. If no ``timeout`` keyword given, it waits until
+completion:
+
+>>> async_result = async_search.get(timeout=30)
+>>> cone_arr = async_result.array.data
+>>> cone_arr.size
+36184
+
+Estimate the execution time and the number of objects for
+the Cone Search service URL from above. The prediction naively
+assumes a linear model, which might not be accurate for some cases.
+It also uses the normal :func:`~astropy.vo.client.conesearch.conesearch`,
+not the asynchronous version. This example uses a custom
+timeout of 30 seconds and runs silently (except for warnings):
+
+>>> result.url
+u'http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/243/out&'
+>>> with REMOTE_TIMEOUT.set_temp(30):
+...     t_est, n_est = conesearch.predict_search(
+...         result.url, c, sr, verbose=False, plot=True)
+WARNING: W22: ... The DEFINITIONS element is deprecated in VOTable 1.1...
+# ...
+>>> t_est  # Predicted execution time
+19.272144977377838
+>>> n_est  # Predicted number of objects
+37340
+
+.. image:: images/client_predict_search_t.png
+    :width: 450px
+    :alt: Example plot from conesearch.predict_search() for t_est
+
+.. image:: images/client_predict_search_n.png
+    :width: 450px
+    :alt: Example plot from conesearch.predict_search() for n_est
+
+For debugging purpose, one can obtain the actual execution time
+and number of objects, and compare them with the predicted values
+above. The INFO message shown in controlled by `astropy.logger`.
+Keep in mind that running this for every prediction
+would defeat the purpose of the prediction itself:
+
+>>> t_real, tab = conesearch.conesearch_timer(
+...     c, sr, catalog_db=result.url, verbose=False)
+INFO: conesearch_timer took 11.5103080273 s on AVERAGE for 1 call(s). [...]
+>>> t_real  # Actual execution time
+11.510308027267456
+>>> tab.array.size  # Actual number of objects
+36184
+
+One can also search in a list of catalogs instead of a single one.
+In this example, we look for all catalogs containing ``'guide*star'`` in their
+titles and only perform Cone Search using those services.
+The first catalog in the list to successfully return non-zero result is used.
+Therefore, the order of catalog names given in ``catalog_db`` is important:
+
+>>> gsc_cats = conesearch.list_catalogs(pattern='guide*star')
+>>> gsc_cats
+[u'Guide Star Catalog 2.3 1',
+ u'The HST Guide Star Catalog, Version 1.1 (Lasker+ 1992) 1',
+ u'The HST Guide Star Catalog, Version 1.2 (Lasker+ 1996) 1',
+ u'The HST Guide Star Catalog, Version GSC-ACT (Lasker+ 1996-99) 1']
+>>> gsc_result = conesearch.conesearch(c, sr, catalog_db=gsc_cats)
+Trying http://gsss.stsci.edu/webservices/vo/ConeSearch.aspx?CAT=GSC23&
+WARNING: W25: ... failed with: timed out [...]
+Trying http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/220/out&
+Downloading ...
+WARNING: W22: ... The DEFINITIONS element is deprecated in VOTable 1.1...
+>>> gsc_result.array.size
+2997
+>>> gsc_result.url
+u'http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/220/out&'
+
+To repeat the Cone Search above with the services listed in a
+different order:
+
+>>> gsc_cats_reordered = [gsc_cats[i] for i in (3, 1, 2, 0)]
+>>> gsc_cats_reordered
+[u'The HST Guide Star Catalog, Version GSC-ACT (Lasker+ 1996-99) 1',
+ u'The HST Guide Star Catalog, Version 1.1 (Lasker+ 1992) 1',
+ u'The HST Guide Star Catalog, Version 1.2 (Lasker+ 1996) 1',
+ u'Guide Star Catalog 2.3 1']
+>>> gsc_result = conesearch.conesearch(c, sr, catalog_db=gsc_cats_reordered)
+Trying http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/255/out&
+Downloading ...
+WARNING: W22: ... The DEFINITIONS element is deprecated in VOTable 1.1...
+>>> gsc_result.array.size
+2997
+>>> gsc_result.url
+u'http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/255/out&'
+
+To obtain results from *all* the services above:
+
+>>> all_gsc_results = conesearch.search_all(c, sr, catalog_db=gsc_cats)
+Trying http://gsss.stsci.edu/webservices/vo/ConeSearch.aspx?CAT=GSC23&
+WARNING: W25: ... failed with: <urlopen error timed out> [...]
+Trying http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/220/out&
+Downloading ...
+WARNING: W22: ... The DEFINITIONS element is deprecated in VOTable 1.1...
+Trying http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/254/out&
+Downloading ...
+WARNING: W22: ... The DEFINITIONS element is deprecated in VOTable 1.1...
+Trying http://vizier.u-strasbg.fr/viz-bin/votable/-A?-source=I/255/out&
+Downloading ...
+WARNING: W22: ... The DEFINITIONS element is deprecated in VOTable 1.1...
+>>> all_gsc_results
+{u'http://.../220/out&': <astropy.io.votable.tree.Table at 0x2988e10>,
+ u'http://.../254/out&': <astropy.io.votable.tree.Table at 0x2993350>,
+ u'http://.../255/out&': <astropy.io.votable.tree.Table at 0x298de90>}
+>>> for url, tab in all_gsc_results.items():
+...     print('{0} has {1} results'.format(url[-17:], tab.array.size))
+source=I/254/out& has 2998 results
+source=I/255/out& has 2997 results
+source=I/220/out& has 2997 results
+
+To repeat the above asynchronously:
+
+>>> async_search_all = conesearch.AsyncSearchAll(c, sr, catalog_db=gsc_cats)
+>>> async_search_all.running()
+True
+>>> async_search_all.done()
+False
+>>> all_gsc_results = async_search_all.get()
+
+If one is unable to obtain any results using the default
+Cone Search database, ``'conesearch_good'``, that only contains
+sites that cleanly passed validation, one can use :ref:`astropy_config`
+to use another database, ``'conesearch_warn'``, containing sites with
+validation warnings. One should use these sites with caution:
+
+>>> conesearch.CONESEARCH_DBNAME.set('conesearch_warn')
+>>> conesearch.list_catalogs()
+Downloading http://stsdas.stsci.edu/astrolib/vo_databases/conesearch_warn.json
+|===========================================|  87k/ 87k (100.00%)        00s
+[u'2MASS All-Sky Catalog of Point Sources (Cutri+ 2003) 1',
+ u'2MASS All-Sky Point Source Catalog 1',
+ u'Data release 7 of Sloan Digital Sky Survey catalogs 1',
+ u'Data release 7 of Sloan Digital Sky Survey catalogs 2',
+ u'Data release 7 of Sloan Digital Sky Survey catalogs 3',
+ u'Data release 7 of Sloan Digital Sky Survey catalogs 4',
+ u'Data release 7 of Sloan Digital Sky Survey catalogs 5',
+ u'Data release 7 of Sloan Digital Sky Survey catalogs 6',
+ u'The 2MASS All-Sky Catalog 1',
+ u'The 2MASS All-Sky Catalog 2',
+ u'The USNO-B1.0 Catalog (Monet+ 2003) 1',
+ u'The USNO-B1.0 Catalog 1',
+ u'USNO-A V2.0, A Catalog of Astrometric Standards 1',
+ u'USNO-B1 Catalogue 1']
diff --git a/docs/vo/conesearch.rst b/docs/vo/conesearch.rst
new file mode 100644
index 0000000..4fb3b31
--- /dev/null
+++ b/docs/vo/conesearch.rst
@@ -0,0 +1,181 @@
+.. _astropy_conesearch:
+
+VO Simple Cone Search
+=====================
+
+Astropy offers Simple Cone Search Version 1.03 as defined in IVOA
+Recommendation (February 22, 2008). Cone Search queries an
+area encompassed by a given radius centered on a given RA and DEC and returns
+all the objects found within the area in the given catalog.
+
+.. _vo-sec-default-scs-services:
+
+Default Cone Search Services
+----------------------------
+
+Currently, the default Cone Search services used are a subset of those found in
+the STScI VAO Registry. They were hand-picked to represent commonly used
+catalogs below:
+
+* 2MASS All-Sky
+* HST Guide Star Catalog
+* SDSS Data Release 7
+* SDSS-III Data Release 8
+* USNO A1
+* USNO A2
+* USNO B1
+
+This subset undergoes daily validations hosted by STScI using
+:ref:`vo-sec-validator-validate`. Those that pass without
+critical warnings or exceptions are used by :ref:`vo-sec-client-scs` by
+default. They are controlled by
+``astropy.vo.client.conesearch.CONESEARCH_DBNAME``:
+
+#. ``'conesearch_good'``
+   Default. Passed validation without critical warnings and exceptions.
+#. ``'conesearch_warn'``
+   Has critical warnings but no exceptions. Use at your own risk.
+#. ``'conesearch_exception'``
+   Has some exceptions. *Never* use this.
+#. ``'conesearch_error'``
+   Has network connection error. *Never* use this.
+
+If you are a Cone Search service provider and would like to include your
+service in the list above, please open a
+`GitHub issue on Astropy <https://github.com/astropy/astropy/issues>`_.
+
+
+Caching
+-------
+
+Caching of downloaded contents is controlled by `astropy.utils.data`.
+To *not* use cached data, some functions in this package have a ``cache``
+keyword that can be set to ``False``.
+
+
+Getting Started
+---------------
+
+This section only contains minimal examples showing how to perform
+basic Cone Search.
+
+>>> from astropy.vo.client import conesearch
+
+List the available Cone Search catalogs:
+
+>>> conesearch.list_catalogs()
+[u'Guide Star Catalog 2.3 1',
+ u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 1',
+ u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 2',
+ u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 3',
+ u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 4',
+ u'SDSS DR8 - Sloan Digital Sky Survey Data Release 8 1',
+ u'SDSS DR8 - Sloan Digital Sky Survey Data Release 8 2',
+ u'The HST Guide Star Catalog, Version 1.1 (Lasker+ 1992) 1',
+ u'The HST Guide Star Catalog, Version 1.2 (Lasker+ 1996) 1',
+ u'The HST Guide Star Catalog, Version GSC-ACT (Lasker+ 1996-99) 1',
+ u'The PMM USNO-A1.0 Catalogue (Monet 1997) 1',
+ u'The USNO-A2.0 Catalogue (Monet+ 1998) 1',
+ u'Two Micron All Sky Survey (2MASS) 1',
+ u'Two Micron All Sky Survey (2MASS) 2',
+ u'USNO-A2 Catalogue 1',
+ u'USNO-A2.0 1']
+
+Select a 2MASS catalog from the list above that is to be searched:
+
+>>> my_catname = 'Two Micron All Sky Survey (2MASS) 1'
+
+Query the selected 2MASS catalog around M31 with a 0.1-degree search radius:
+
+>>> from astropy.coordinates import ICRS
+>>> from astropy import units as u
+>>> c = ICRS.from_name('M31')
+>>> c.ra, c.dec
+(<Longitude 10.684708300000011 deg>, <Latitude 41.26875 deg>)
+>>> result = conesearch.conesearch(c, 0.1 * u.degree, catalog_db=my_catname)
+Trying http://wfaudata.roe.ac.uk/twomass-dsa/DirectCone?DSACAT=TWOMASS&...
+Downloading ...
+WARNING: W06: ... UCD has invalid character '?' in '??' [...]
+WARNING: W50: ... Invalid unit string 'yyyy-mm-dd' [...]
+WARNING: W50: ... Invalid unit string 'Julian days' [...]
+>>> result
+<astropy.io.votable.tree.Table at 0x41e8610>
+>>> result.url
+u'http://wfaudata.roe.ac.uk/twomass-dsa/DirectCone?DSACAT=TWOMASS&DSATAB=twomass_psc&'
+
+Get the number of matches and returned column names:
+
+>>> result.array.size
+2008
+>>> result.array.dtype.names
+('cx',
+ 'cy',
+ 'cz',
+ 'htmID',
+ 'ra',
+ 'dec', ...,
+ 'coadd_key',
+ 'coadd')
+
+Extract RA and DEC of the matches:
+
+>>> result.array['ra']
+masked_array(data = [10.620983 10.672264 10.651166 ..., 10.805599],
+             mask = [False False False ..., False],
+       fill_value = 1e+20)
+>>> result.array['dec']
+masked_array(data = [41.192303 41.19426 41.19445 ..., 41.262123],
+             mask = [False False False ..., False],
+       fill_value = 1e+20)
+
+
+Using `astropy.vo`
+------------------
+
+This package has four main components across two subpackages:
+
+.. toctree::
+   :maxdepth: 2
+
+   client
+   validator
+
+They are designed to be used in a work flow as illustrated below:
+
+.. image:: images/astropy_vo_flowchart.png
+    :width: 500px
+    :alt: VO work flow
+
+The one that a typical user needs is the :ref:`vo-sec-client-scs` component
+(see :ref:`Cone Search Examples <vo-sec-scs-examples>`).
+
+
+See Also
+--------
+
+- `NVO Directory <http://nvo.stsci.edu/vor10/index.aspx>`_
+
+- `Simple Cone Search Version 1.03, IVOA Recommendation (22 February 2008) <http://www.ivoa.net/Documents/REC/DAL/ConeSearch-20080222.html>`_
+
+- `STScI VAO Registry <http://vao.stsci.edu/directory/NVORegInt.asmx?op=VOTCapabilityPredOpt>`_
+
+- `STScI VO Databases <http://stsdas.stsci.edu/astrolib/vo_databases/>`_
+
+
+Reference/API
+-------------
+
+.. automodapi:: astropy.vo.client.vos_catalog
+   :no-inheritance-diagram:
+
+.. automodapi:: astropy.vo.client.conesearch
+   :no-inheritance-diagram:
+
+.. automodapi:: astropy.vo.client.async
+   :no-inheritance-diagram:
+
+.. automodapi:: astropy.vo.validator.validate
+   :no-inheritance-diagram:
+
+.. automodapi:: astropy.vo.validator.inspect
+   :no-inheritance-diagram:
diff --git a/docs/vo/images/astropy_vo_flowchart.png b/docs/vo/images/astropy_vo_flowchart.png
new file mode 100644
index 0000000..dea5962
Binary files /dev/null and b/docs/vo/images/astropy_vo_flowchart.png differ
diff --git a/docs/vo/images/client_predict_search_n.png b/docs/vo/images/client_predict_search_n.png
new file mode 100644
index 0000000..e24e98d
Binary files /dev/null and b/docs/vo/images/client_predict_search_n.png differ
diff --git a/docs/vo/images/client_predict_search_t.png b/docs/vo/images/client_predict_search_t.png
new file mode 100644
index 0000000..97fb8b6
Binary files /dev/null and b/docs/vo/images/client_predict_search_t.png differ
diff --git a/docs/vo/images/validator_html_1.png b/docs/vo/images/validator_html_1.png
new file mode 100644
index 0000000..9f92d06
Binary files /dev/null and b/docs/vo/images/validator_html_1.png differ
diff --git a/docs/vo/images/validator_html_2.png b/docs/vo/images/validator_html_2.png
new file mode 100644
index 0000000..a10a56b
Binary files /dev/null and b/docs/vo/images/validator_html_2.png differ
diff --git a/docs/vo/images/validator_html_3.png b/docs/vo/images/validator_html_3.png
new file mode 100644
index 0000000..aa3ac25
Binary files /dev/null and b/docs/vo/images/validator_html_3.png differ
diff --git a/docs/vo/images/validator_html_4.png b/docs/vo/images/validator_html_4.png
new file mode 100644
index 0000000..d34a44a
Binary files /dev/null and b/docs/vo/images/validator_html_4.png differ
diff --git a/docs/vo/index.rst b/docs/vo/index.rst
new file mode 100644
index 0000000..1f74d18
--- /dev/null
+++ b/docs/vo/index.rst
@@ -0,0 +1,32 @@
+.. _astropy_vo:
+
+*******************************************
+Virtual Observatory Access (``astropy.vo``)
+*******************************************
+
+.. module:: astropy.vo
+
+Introduction
+============
+
+The ``astropy.vo`` subpackage handles simple access for Virtual Observatory
+(VO) services.
+
+Current services include:
+
+.. toctree::
+   :maxdepth: 1
+
+   conesearch
+
+There are two third-party Python packages related to ``astropy.vo``:
+
+* `PyVO <http://pyvo.readthedocs.org/en/latest/>`_
+  provides further functionality to discover
+  and query VO services. Its user guide contains a
+  `good introduction <https://pyvo.readthedocs.org/en/latest/pyvo/vo.html>`_
+  to how the VO works.
+
+* `Astroquery <http://www.astropy.org/astroquery/>`_
+  is an Astropy affiliated package that provides simply access to specific astronomical
+  web services, many of which do not support the VO protocol.
diff --git a/docs/vo/validator.rst b/docs/vo/validator.rst
new file mode 100644
index 0000000..b3181c0
--- /dev/null
+++ b/docs/vo/validator.rst
@@ -0,0 +1,368 @@
+Using `astropy.vo.validator`
+============================
+
+VO services validator is used by STScI to support :ref:`vo-sec-client-scs`.
+Currently, only Cone Search services are supported.
+A typical user should not need the validator. However, this could be used by
+VO service providers to validate their services. Currently, any service
+to be validated has to be registered in STScI VAO Registry.
+
+.. _vo-sec-validator-validate:
+
+Validation for Simple Cone Search
+---------------------------------
+
+`astropy.vo.validator.validate` validates VO services.
+Currently, only Cone Search validation is done using
+:func:`~astropy.vo.validator.validate.check_conesearch_sites`,
+which utilizes underlying `astropy.io.votable.validator` library.
+
+A master list of all available Cone Search services is
+obtained from ``astropy.vo.validator.validate.CS_MSTR_LIST``, which
+is a URL query to STScI VAO Registry by default.
+However, by default, only the ones in ``astropy.vo.validator.validate.CS_URLS``
+are validated (also see :ref:`vo-sec-default-scs-services`),
+while the rest are skipped. There are also options to validate
+a user-defined list of services or all of them.
+
+All Cone Search queries are done using RA, DEC, and SR given by
+``<testQuery>`` XML tag in the registry, and maximum verbosity.
+In an uncommon case where ``<testQuery>`` is not defined for a service,
+it uses a default search for ``RA=0&DEC=0&SR=1``.
+
+The results are separated into 4 groups below. Each group
+is stored as a JSON database:
+
+#. ``conesearch_good.json``
+     Passed validation without critical warnings and
+     exceptions. This database residing in
+     ``astropy.vo.client.vos_catalog.BASEURL`` is the one used
+     by :ref:`vo-sec-client-scs` by default.
+#. ``conesearch_warn.json``
+     Has critical warnings but no exceptions. Users
+     can manually set
+     ``astropy.vo.client.conesearch.CONESEARCH_DBNAME``
+     to use this at their own risk.
+#. ``conesearch_exception.json``
+     Has some exceptions. *Never* use this.
+     For informational purpose only.
+#. ``conesearch_error.json``
+     Has network connection error. *Never* use this.
+     For informational purpose only.
+
+HTML pages summarizing the validation results are stored in
+``'results'`` sub-directory, which also contains downloaded XML
+files from individual Cone Search queries.
+
+Warnings and Exceptions
+^^^^^^^^^^^^^^^^^^^^^^^
+
+A subset of `astropy.io.votable.exceptions` that is considered
+non-critical is defined by ``astropy.vo.validator.validate.NONCRIT_WARNINGS``,
+which will not be flagged as bad by the validator. However,
+this does not change the behavior of ``astropy.io.votable.table.PEDANTIC``,
+which still needs to be set to ``False`` for them not to be thrown out
+by :func:`~astropy.vo.client.conesearch.conesearch`.
+Despite being listed as non-critical, user is responsible
+to check whether the results are reliable; They should not be
+used blindly.
+
+Some `units recognized by VizieR <http://cdsarc.u-strasbg.fr/vizier/Units.htx>`_
+are considered invalid by Cone Search standards. As a result,
+they will give the warning ``'W50'``, which is non-critical by default.
+
+User can also modify ``astropy.vo.validator.validate.NONCRIT_WARNINGS`` to
+include or exclude any warnings or exceptions, as desired.
+However, this should be done with caution. Adding exceptions
+to non-critical list is not recommended.
+
+Building the Database
+^^^^^^^^^^^^^^^^^^^^^
+
+Each Cone Search service is a catalog in the JSON database,
+which is represented by a nested dictionary::
+
+    {
+        "__version__": 1,
+        "catalogs": {
+            "catalog 1": {
+                "some key": "some value",
+                # ...
+            },
+            "catalog 2": {
+                "some key": "some value",
+                # ...
+            },
+            # ...
+        }
+    }
+
+In the master registry, there are duplicate catalog titles with
+different access URLs, duplicate access URLs with different titles,
+duplicate catalogs with slightly different descriptions, etc.
+
+A Cone Search service is really defined by its access URL
+regardless of title, description, etc. The validator ensures
+each access URL is unique across all the output databases.
+However, for user-friendly catalog listing, its title will be
+the catalog key, not the access URL.
+
+In the case of two different access URLs sharing the same title,
+each URL will have its own database entry, with a sequence number
+appended to their titles (e.g., 'Title 1' and 'Title 2'). For
+consistency, even if the title does not repeat, it will still be
+renamed to 'Title 1'.
+
+In the case of the same access URL appearing multiple times in
+the registry, the validator will store the first catalog with
+that access URL and throw out the rest. However, it will keep
+count of the number of duplicates thrown out in the
+``'duplicatesIgnored'`` dictionary key of the catalog kept in the
+database.
+
+All the existing catalog tags will be copied over as dictionary
+keys, except ``'accessURL'`` that is renamed to ``'url'`` for simplicity.
+In addition, new keys named ``'validate_xxx'`` are added; ``'xxx'`` will
+be the original attribute names of
+`astropy.io.votable.validator.result.Result`.
+
+Configurable Items
+^^^^^^^^^^^^^^^^^^
+
+These parameters are set via :ref:`astropy_config`:
+
+* ``astropy.utils.data.REMOTE_TIMEOUT``
+* ``astropy.vo.validator.validate.CS_MSTR_LIST``
+* ``astropy.vo.validator.validate.CS_URLS``
+* ``astropy.vo.validator.validate.NONCRIT_WARNINGS``
+
+Also depends on properties in
+:ref:`Simple Cone Search Configurable Items <vo-sec-scs-config>`.
+
+.. _vo-sec-validate-examples:
+
+Examples
+^^^^^^^^
+
+>>> from astropy.vo.validator import validate
+
+Validate default Cone Search sites with multiprocessing
+and write results in the current directory. Reading the
+master registry can be slow, so setting timeout to at least
+30 seconds is recommended:
+
+>>> from astropy.utils.data import REMOTE_TIMEOUT
+>>> with REMOTE_TIMEOUT.set_temp(30):
+...     validate.check_conesearch_sites()
+Downloading http://vao.stsci.edu/directory/NVORegInt.asmx/...
+WARNING: W20: None:2:0: W20: No version number specified in file...
+# ...
+INFO: Only 31/11144 site(s) are validated [astropy.vo.server.validate]
+Downloading http://nvo.stsci.edu/vor10/getRecord.aspx?...
+# ...
+INFO: warn: 15 catalog(s) [astropy.vo.server.validate]
+INFO: good: 15 catalog(s) [astropy.vo.server.validate]
+INFO: nerr: 1 catalog(s) [astropy.vo.server.validate]
+INFO: excp: 0 catalog(s) [astropy.vo.server.validate]
+INFO: total: 31 catalog(s) [astropy.vo.server.validate]
+INFO: Validation of 31 site(s) took 129.094 s [astropy.vo.server.validate]
+
+From the master registry, select Cone Search access URLs
+hosted by ``'stsci.edu'``:
+
+>>> import numpy as np
+>>> from astropy.io.votable import parse_single_table
+>>> from astropy.utils.data import get_readable_fileobj
+>>> with REMOTE_TIMEOUT.set_temp(30):
+...     with get_readable_fileobj(validate.CS_MSTR_LIST(),
+...                               encoding='binary') as fd:
+...         tab_all = parse_single_table(fd)
+Downloading http://vao.stsci.edu/directory/NVORegInt.asmx/...
+|===========================================|  23M/ 23M (100.00%)        00s
+WARNING: W20: None:2:0: W20: No version number specified in file...
+# ...
+>>> arr = tab_all.array.data[
+...     np.where(tab_all.array['capabilityClass'] == b'ConeSearch')]
+>>> urls = [s for s in arr['accessURL'] if b'stsci.edu' in s]
+>>> urls
+['http://archive.stsci.edu/hst/search.php?sci_data_set_name=Y*&',
+ 'http://archive.stsci.edu/tues/search.php?',
+ 'http://archive.stsci.edu/hst/search.php?sci_data_set_name=J*&',
+ 'http://archive.stsci.edu/hut/search.php?', ...,
+ 'http://archive.stsci.edu/kepler/kepler_fov/search.php?',
+ 'http://archive.stsci.edu/kepler/confirmed_planets/search.php?']
+
+Validate only the URLs found above without verbose
+outputs (except warnings that are controlled by :py:mod:`warnings`)
+or multiprocessing, and write results in
+``'subset'`` sub-directory instead of the current directory:
+
+>>> with REMOTE_TIMEOUT.set_temp(30):
+...     validate.check_conesearch_sites(
+...         destdir='./subset', verbose=False, parallel=False, url_list=urls)
+WARNING: W49: ... Empty cell illegal for integer fields...
+# ...
+
+Add ``'W24'`` from `astropy.io.votable.exceptions` to the list of
+non-critical warnings to be ignored and re-run default validation.
+This is *not* recommended unless you know exactly what you are doing:
+
+>>> validate.NONCRIT_WARNINGS.set(validate.NONCRIT_WARNINGS() + ['W24'])
+>>> with REMOTE_TIMEOUT.set_temp(30):
+...     validate.check_conesearch_sites()
+
+Reset the list of ignored warnings back to default value.
+Validate *all* Cone Search services in the master registry
+(this will take a while) and write results in ``'all'`` sub-directory:
+
+>>> validate.NONCRIT_WARNINGS.set(validate.NONCRIT_WARNINGS.defaultvalue)
+>>> with REMOTE_TIMEOUT.set_temp(30):
+...     validate.check_conesearch_sites(destdir='./all', url_list=None)
+
+To look at the HTML pages of the validation results in the current
+directory using Firefox browser (images shown are from STScI server
+but your own results should look similar)::
+
+    firefox results/index.html
+
+.. image:: images/validator_html_1.png
+    :width: 600px
+    :alt: Main HTML page of validation results
+
+When you click on 'All tests' from the page above, you will see all the
+Cone Search services validated with a summary of validation results:
+
+.. image:: images/validator_html_2.png
+    :width: 600px
+    :alt: All tests HTML page
+
+When you click on any of the listed URLs from above, you will see
+detailed validation warnings and exceptions for the selected URL:
+
+.. image:: images/validator_html_3.png
+    :width: 600px
+    :alt: Detailed validation warnings HTML page
+
+When you click on the URL on top of the page above, you will see
+the actual VO Table returned by the Cone Search query:
+
+.. image:: images/validator_html_4.png
+    :width: 600px
+    :alt: VOTABLE XML page
+
+
+.. _vo-sec-validator-inspect:
+
+Inspection of Validation Results
+--------------------------------
+
+`~astropy.vo.validator.inspect` inspects results from
+:ref:`vo-sec-validator-validate`. It reads in JSON databases
+residing in ``astropy.vo.client.vos_catalog.BASEURL``, which
+can be changed to point to a different location.
+
+Configurable Items
+^^^^^^^^^^^^^^^^^^
+
+This parameter is set via :ref:`astropy_config`:
+
+* ``astropy.vo.client.vos_catalog.BASEURL``
+
+Examples
+^^^^^^^^
+
+Load Cone Search validation results from
+``astropy.vo.client.vos_catalog.BASEURL``
+(by default, the one used by :ref:`vo-sec-client-scs`):
+
+>>> from astropy.vo.validator import inspect
+>>> r = inspect.ConeSearchResults()
+Downloading .../conesearch_good.json
+|============================================|  56/ 56k (100.00%)        00s
+Downloading .../conesearch_warn.json
+|============================================|  94/ 94k (100.00%)        00s
+Downloading .../conesearch_exception.json
+|============================================|  45/ 45  (100.00%)        00s
+Downloading .../conesearch_error.json
+|============================================|   1/  1k (100.00%)        00s
+
+Print tally. In this example, there are 15 Cone Search services that
+passed validation with non-critical warnings, 15 with critical warnings,
+none with exceptions, and 1 with network error:
+
+>>> r.tally()
+good: 15 catalog(s)
+warn: 15 catalog(s)
+exception: 0 catalog(s)
+error: 1 catalog(s)
+total: 31 catalog(s)
+
+Print a list of good Cone Search catalogs, each with title, access URL,
+warning codes collected, and individual warnings:
+
+>>> r.list_cats('good')
+Guide Star Catalog 2.3 1
+http://gsss.stsci.edu/webservices/vo/ConeSearch.aspx?CAT=GSC23&
+W48,W50
+.../vo.xml:136:0: W50: Invalid unit string 'pixel'
+.../vo.xml:155:0: W48: Unknown attribute 'nrows' on TABLEDATA
+# ...
+USNO-A2 Catalogue 1
+http://www.nofs.navy.mil/cgi-bin/vo_cone.cgi?CAT=USNO-A2&
+W17,W42,W21
+.../vo.xml:4:0: W21: vo.table is designed for VOTable version 1.1 and 1.2...
+.../vo.xml:4:0: W42: No XML namespace specified
+.../vo.xml:15:15: W17: VOTABLE element contains more than one DESCRIPTION...
+
+List Cone Search catalogs with warnings, excluding warnings that
+were ignored in ``astropy.vo.validator.validate.NONCRIT_WARNINGS``,
+and writes the output to a file named ``'warn_cats.txt'`` in the current
+directory. This is useful to see why the services failed validations:
+
+>>> with open('warn_cats.txt', 'w') as fout:
+...     r.list_cats('warn', fout=fout, ignore_noncrit=True)
+
+List the titles of all good Cone Search catalogs:
+
+>>> r.catkeys['good']
+[u'Guide Star Catalog 2.3 1',
+ u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 1',
+ u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 2',
+ u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 3', ...,
+ u'USNO-A2 Catalogue 1']
+
+Print the details of catalog titled ``'USNO-A2 Catalogue 1'``:
+
+>>> r.print_cat('USNO-A2 Catalogue 1')
+{
+    "capabilityClass": "ConeSearch", 
+    "capabilityStandardID": "ivo://ivoa.net/std/ConeSearch", 
+    "capabilityValidationLevel": "", 
+    "contentLevel": "#University#Research#Amateur#", 
+    # ...
+    "version": "", 
+    "waveband": "#Optical#"
+}
+Found in good
+
+Load Cone Search validation results from a local directory named ``'subset'``.
+This is useful if you ran your own :ref:`vo-sec-validator-validate`
+and wish to inspect the output databases. This example reads in
+validation of STScI Cone Search services done in
+:ref:`Validation for Simple Cone Search Examples <vo-sec-validate-examples>`:
+
+>>> from astropy.vo.client.vos_catalog import BASEURL
+>>> with BASEURL.set_temp('./subset/'):
+>>>     r = inspect.ConeSearchResults()
+>>> r.tally()
+good: 21 catalog(s)
+warn: 7 catalog(s)
+exception: 0 catalog(s)
+error: 0 catalog(s)
+total: 28 catalog(s)
+>>> r.catkeys['good']
+[u'Advanced Camera for Surveys 1',
+ u'Berkeley Extreme and Far-UV Spectrometer 1',
+ u'Copernicus Satellite 1',
+ u'Extreme Ultraviolet Explorer 1', ...,
+ u'Wisconsin Ultraviolet Photo-Polarimeter Experiment 1']
diff --git a/docs/warnings.rst b/docs/warnings.rst
index 8d5ca4a..24fafac 100644
--- a/docs/warnings.rst
+++ b/docs/warnings.rst
@@ -22,7 +22,7 @@ function may be suppressed from within a python script as follows::
      >>> import warnings
      >>> from astropy.io import fits
      >>> warnings.filterwarnings('ignore', category=UserWarning, append=True)
-     >>> fits.writeto(file, im, clobber=True)
+     >>> fits.writeto(file, im, clobber=True)  # doctest: +SKIP
 
 However, warning filters may also be modified just within a certain context
 using `warnings.catch_warnings`.
@@ -37,4 +37,3 @@ you can start Python with ``-Wi::Deprecation``.  This sets all deprecation
 warnings to ignored.  See
 http://docs.python.org/using/cmdline.html#cmdoption-unittest-discover-W
 for more information on the -W argument.
-
diff --git a/docs/wcs/examples/from_file.py b/docs/wcs/examples/from_file.py
index a47ba16..4697774 100644
--- a/docs/wcs/examples/from_file.py
+++ b/docs/wcs/examples/from_file.py
@@ -8,31 +8,36 @@ from astropy import wcs
 from astropy.io import fits
 import sys
 
-# Load the FITS hdulist using astropy.io.fits
-hdulist = fits.open(sys.argv[-1])
+def load_wcs_from_file(filename):
+    # Load the FITS hdulist using astropy.io.fits
+    hdulist = fits.open(sys.argv[-1])
 
-# Parse the WCS keywords in the primary HDU
-w = wcs.WCS(hdulist[0].header)
+    # Parse the WCS keywords in the primary HDU
+    w = wcs.WCS(hdulist[0].header)
 
-# Print out the "name" of the WCS, as defined in the FITS header
-print w.wcs.name
+    # Print out the "name" of the WCS, as defined in the FITS header
+    print w.wcs.name
 
-# Print out all of the settings that were parsed from the header
-w.wcs.print_contents()
+    # Print out all of the settings that were parsed from the header
+    w.wcs.print_contents()
 
-# Some pixel coordinates of interest.
-pixcrd = numpy.array([[0,0],[24,38],[45,98]], numpy.float_)
+    # Some pixel coordinates of interest.
+    pixcrd = numpy.array([[0,0],[24,38],[45,98]], numpy.float_)
 
-# Convert pixel coordinates to world coordinates
-# The second argument is "origin" -- in this case we're declaring we
-# have 1-based (Fortran-like) coordinates.
-world = w.wcs_pix2world(pixcrd, 1)
-print world
+    # Convert pixel coordinates to world coordinates
+    # The second argument is "origin" -- in this case we're declaring we
+    # have 1-based (Fortran-like) coordinates.
+    world = w.wcs_pix2world(pixcrd, 1)
+    print world
 
-# Convert the same coordinates back to pixel coordinates.
-pixcrd2 = w.wcs_world2pix(world, 1)
-print pixcrd2
+    # Convert the same coordinates back to pixel coordinates.
+    pixcrd2 = w.wcs_world2pix(world, 1)
+    print pixcrd2
 
-# These should be the same as the original pixel coordinates, modulo
-# some floating-point error.
-assert numpy.max(numpy.abs(pixcrd - pixcrd2)) < 1e-6
+    # These should be the same as the original pixel coordinates, modulo
+    # some floating-point error.
+    assert numpy.max(numpy.abs(pixcrd - pixcrd2)) < 1e-6
+
+
+if __name__ == '__main__':
+    load_wcs_from_file(sys.argv[-1])
diff --git a/docs/wcs/examples/programmatic.py b/docs/wcs/examples/programmatic.py
index de763f8..ce5ea14 100644
--- a/docs/wcs/examples/programmatic.py
+++ b/docs/wcs/examples/programmatic.py
@@ -20,9 +20,6 @@ w.wcs.crval = [0, -90]
 w.wcs.ctype = ["RA---AIR", "DEC--AIR"]
 w.wcs.set_pv([(2, 1, 45.0)])
 
-# Print out all of the contents of the WCS object
-w.wcs.print_contents()
-
 # Some pixel coordinates of interest.
 pixcrd = numpy.array([[0,0],[24,38],[45,98]], numpy.float_)
 
diff --git a/docs/wcs/index.rst b/docs/wcs/index.rst
index a996c1c..22ae77f 100644
--- a/docs/wcs/index.rst
+++ b/docs/wcs/index.rst
@@ -1,3 +1,5 @@
+.. _astropy-wcs:
+
 ***************************************
 World Coordinate System (`astropy.wcs`)
 ***************************************
@@ -85,6 +87,30 @@ saves those settings to a new FITS header.
 .. literalinclude:: examples/programmatic.py
    :language: python
 
+Validating the WCS keywords in a FITS file
+------------------------------------------
+
+`astropy` includes a commandline tool, `wcslint` to check the WCS
+keywords in a FITS file::
+
+    > wcslint invalid.fits
+    HDU 1:
+      WCS key ' ':
+        - RADECSYS= 'ICRS ' / Astrometric system
+          RADECSYS is non-standard, use RADESYSa.
+        - The WCS transformation has more axes (2) than the image it is
+          associated with (0)
+        - 'celfix' made the change 'PV1_5 : Unrecognized coordinate
+          transformation parameter'.
+
+    HDU 2:
+      WCS key ' ':
+        - The WCS transformation has more axes (3) than the image it is
+          associated with (0)
+        - 'celfix' made the change 'In CUNIT2 : Mismatched units type
+          'length': have 'Hz', want 'm''.
+        - 'unitfix' made the change 'Changed units: 'HZ      ' -> 'Hz''.
+
 Other information
 =================
 
diff --git a/docs/whatsnew/0.2.rst b/docs/whatsnew/0.2.rst
index 5292db2..b502206 100644
--- a/docs/whatsnew/0.2.rst
+++ b/docs/whatsnew/0.2.rst
@@ -45,7 +45,7 @@ include::
   <GalacticCoordinates l=121.17430 deg, b=-21.57280 deg>
 
 Currently a limited set of standard coordinate systems are included, but more will be
-added in the next release.  There is also an 
+added in the next release.  There is also an
 :ref:`example of creating a custom coordinate system <sgr-example>`  in the documentation.
 
 The package also includes a representation of angles (:class:`~astropy.coordinates.angles.Angle`)
@@ -56,8 +56,8 @@ celestial coordinates, which allows a complete mapping to 3D coordinates::
   >>> c.cartesian
   <CartesianPoints (568.712888217, 107.300935969, 507.889909249) kpc>
 
-The package also supports a simple interface for retrieving coordinates for an object by 
-name using the `Sesame Name Resolver <http://cds.u-strasbg.fr/cgi-bin/Sesame>`_ . This works 
+The package also supports a simple interface for retrieving coordinates for an object by
+name using the `Sesame Name Resolver <http://cds.u-strasbg.fr/cgi-bin/Sesame>`_ . This works
 on all subclasses of :class:`~astropy.coordinates.coordsystems.SphericalCoordinatesBase`::
 
   >>> c = coord.ICRSCoordinates.from_name("M42")
@@ -67,8 +67,8 @@ on all subclasses of :class:`~astropy.coordinates.coordsystems.SphericalCoordina
   >>> c.l, c.b
   (<Angle -150.98622 deg>, <Angle -19.38162 deg>)
 
-For more details about this feature, see 
-:func:`~astropy.coordinates.name_resolve.get_icrs_coordinates` and 
+For more details about this feature, see
+:func:`~astropy.coordinates.name_resolve.get_icrs_coordinates` and
 :meth:`~astropy.coordinates.coordsystems.SphericalCoordinatesBase.from_name`.
 
 Note that this subpackage is still under heavy development, and likely will
@@ -226,7 +226,7 @@ as that between wavelength and frequency::
 
   # Wavelength to frequency doesn't normally work
   >>> u.nm.to(u.Hz, [1000, 2000])
-  UnitsException: 'nm' (length) and 'Hz' (frequency) are not convertible
+  UnitError: 'nm' (length) and 'Hz' (frequency) are not convertible
   # ...but by passing an equivalency unit (spectral()), it does...
   >>> u.nm.to(u.Hz, [1000, 2000], equivalencies=u.spectral())
   array([  2.99792458e+14,   1.49896229e+14])
diff --git a/docs/whatsnew/0.3.rst b/docs/whatsnew/0.3.rst
new file mode 100644
index 0000000..987db27
--- /dev/null
+++ b/docs/whatsnew/0.3.rst
@@ -0,0 +1,510 @@
+.. _whatsnew-0.3:
+
+==========================
+What's New in Astropy 0.3?
+==========================
+
+Overview
+--------
+
+Astropy 0.3 is a major release that adds significant new functionality since
+the 0.2.x series of releases. This release sees the addition of the `Modeling`_
+sub-package, which provides an initial framework for fitting models to data,
+and the `Virtual Observatory`_ sub-package, which implements cone searches. In
+addition, there have been many improvements to the existing
+sub-packages, such as a much faster implementation of quantities for Numpy
+arrays in the `Units and Quantities`_ sub-package, a better integration of
+units and quantities in other sub-packages (such as the `Cosmology`_
+sub-package), new `Table`_ functionality related to joining and aggregation,
+support for arrays in the `Coordinates`_ sub-package, and a re-structuring of
+the `Convolution`_ code to provide many build-in parameterized kernels. We
+describe the new sub-packages and the main improvements below.
+
+For a detailed list of all the changes, including deprecated features and backward-incompatible changes,
+please take a look at the full :doc:`../changelog`.
+
+Modeling
+--------
+
+The :ref:`astropy-modeling` sub-package defines many built-in 1-D and 2-D models and
+provides an extensible framework for fitting these to data. The following
+example demonstrates how to easily define a Gaussian model and fit it to a
+previously defined dataset:
+
+.. plot::
+   :include-source:
+
+    import numpy as np
+    from astropy.modeling import models, fitting
+
+    # Generate fake data
+    np.random.seed(0)
+    x = np.linspace(-5., 5., 200)
+    y = 3 * np.exp(-0.5 * (x - 1.3)**2 / 0.8**2)
+    y += np.random.normal(0., 0.2, x.shape)
+
+    # Fit the data
+    g_init = models.Gaussian1D(amplitude=1., mean=0, stddev=1.)
+    f2 = fitting.NonLinearLSQFitter()
+    g = f2(g_init, x, y)
+
+    # Plot the results
+    plt.figure(figsize=(8,5))
+    plt.plot(x, y, 'ko')
+    plt.plot(x, g(x), 'r-', lw=2)
+    plt.xlabel('Position')
+    plt.ylabel('Flux')
+
+.. note:: Since this is a new sub-package, it should be considered experimental
+          and will be significantly improved in future. In particular, the
+          ability to fit composite models (such as the sum of two models) will
+          be added in the next major version (in the mean time, users can
+          define their own models for such cases). More complete examples and a
+          full description of the sub-package is provided in
+          :ref:`astropy-modeling`.
+
+Virtual Observatory
+-------------------
+
+The new :ref:`astropy_vo` sub-package currently provides the ability to execute
+cone searches. To see a list of available catalogs, you can first import the
+cone search module::
+
+    >>> from astropy.vo.client import conesearch
+
+then make use of the :func:`~astropy.vo.client.conesearch.list_catalogs` function::
+
+    >>> conesearch.list_catalogs()
+    [u'Guide Star Catalog 2.3 1',
+     u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 1',
+     u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 2',
+     u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 3',
+     u'SDSS DR7 - Sloan Digital Sky Survey Data Release 7 4',
+     u'SDSS DR8 - Sloan Digital Sky Survey Data Release 8 1',
+     u'SDSS DR8 - Sloan Digital Sky Survey Data Release 8 2',
+     u'The HST Guide Star Catalog, Version 1.1 (Lasker+ 1992) 1',
+     u'The HST Guide Star Catalog, Version 1.2 (Lasker+ 1996) 1',
+     u'The HST Guide Star Catalog, Version GSC-ACT (Lasker+ 1996-99) 1',
+     u'The PMM USNO-A1.0 Catalogue (Monet 1997) 1',
+     u'The USNO-A2.0 Catalogue (Monet+ 1998) 1',
+     u'Two Micron All Sky Survey (2MASS) 1',
+     u'Two Micron All Sky Survey (2MASS) 2',
+     u'USNO-A2 Catalogue 1',
+     u'USNO-A2.0 1']
+
+
+The following example shows how to execute a cone search for a radius of 0.1
+degrees around M31 from the 2MASS catalog. First, we can extract the
+coordinates for M31 from SIMBAD::
+
+    >>> from astropy import coordinates as coords
+    >>> c = coords.ICRS.from_name('M31')
+    >>> c
+    <ICRS RA=10.68471 deg, Dec=41.26875 deg>
+
+and we can then execute the query::
+
+    >>> from astropy import units as u
+    >>> twomass = 'Two Micron All Sky Survey (2MASS) 1'
+    >>> result = conesearch.conesearch(c, 0.1 * u.degree, catalog_db=twomass)
+    Trying http://wfaudata.roe.ac.uk/twomass-dsa/DirectCone?DSACAT=TWOMASS&...
+    Downloading ...
+
+.. in the following paragraph, we deliberately omit the ~ because the class
+.. names are the same otherwise.
+
+The result is returned as a :class:`astropy.io.votable.tree.Table` instance
+(note that this is different from the generic
+:class:`astropy.table.table.Table` class)::
+
+    >>> result.url
+    u'http://wfaudata.roe.ac.uk/twomass-dsa/DirectCone?DSACAT=TWOMASS&DSATAB=twomass_psc&'
+    >>> result.array.size
+    2008
+    >>> result.array['ra']
+    masked_array(data = [10.620983 10.672264 10.651166 ..., 10.805599],
+                 mask = [False False False ..., False],
+           fill_value = 1e+20)
+
+.. as above, we are deliberately not using ~ in the API link
+
+Converting to an :class:`astropy.table.table.Table` is
+straightforward::
+
+    >>> table = result.to_table()
+    >>> print(table)
+          cx             cy             cz       ... coadd_key coadd
+    -------------- -------------- -------------- ... --------- -----
+    0.739345466303 0.138832922929 0.658857876152 ...   1590591    33
+     0.73937055914 0.138481636014 0.658903644522 ...    577809    33
+    0.739301283105 0.138762751963 0.658922234764 ...   1590591    33
+               ...            ...            ... ...       ...   ...
+    0.739389950758 0.139376220174 0.658693229028 ...   1590591    33
+    0.739099087292 0.140726588258 0.658732545516 ...   1590631   232
+    0.737999550267 0.140950272324 0.659916422388 ...   1590632   244
+
+Units and Quantities
+--------------------
+
+Quantity instances in the :ref:`astropy-units` sub-package are now
+fully-fledged Numpy arrays, and common Numpy functions (such as
+`numpy.mean`, `numpy.cos`, `numpy.log10`, etc.) will now
+correctly treat the units:
+
+    >>> q = np.array([1., 2., 3., 4.]) * u.m / u.s
+    >>> np.mean(q)
+    <Quantity 2.5 m / s>
+    >>> np.std(q)
+    <Quantity 1.11803398875 m / s>
+
+This includes functions that only accept specific units such as angles::
+
+    >>> q = 30. * u.deg
+    >>> np.sin(q)
+    <Quantity 0.5 >
+
+or dimensionless quantities::
+
+    >>> nu = 3 * u.GHz
+    >>> T = 30 * u.K
+    >>> np.exp(- h * nu / (k_B * T))
+    <Quantity 0.995212254619 >
+
+.. note:: Not *all* Numpy functions (in particular non-ufuncs) and functions
+          outside Numpy will treat units correctly, so be aware that units may
+          be implicitly dropped without a warning. Always check that the
+          function you are using treats the units correctly.
+
+Another change is that imperial units are not enabled by default. To enable
+them, use::
+
+    >>> from astropy.units import imperial
+    >>> imperial.enable()
+
+Coordinates
+-----------
+
+Coordinate objects from the :ref:`astropy-coordinates` sub-package can now
+store arrays of coordinates instead of just a single coordinate. This
+dramatically speeds up coordinate conversions when many coordinates are used.
+The following example shows how one can combine this with functionality from
+the :class:`~astropy.table.table.Table` class to read in arrays of coordinates
+and convert them to a different coordinate frame. First, we can read in a table
+which contains coordinates both in decimal and string form::
+
+    >>> from astropy.table import Table
+    >>> t = Table.read('2mass.tbl', format='ascii.ipac')
+    >>> print(t)
+        ra        dec         sra           sdec     ...  h_k   j_k
+    ---------- ---------- ------------ ------------- ... ----- -----
+    274.429506 -13.870547 18h17m43.08s -13d52m13.97s ... 0.791 3.048
+    274.423821  -13.86974 18h17m41.72s -13d52m11.06s ... 0.867 3.034
+    274.424587 -13.739629 18h17m41.90s -13d44m22.66s ...  0.94    --
+           ...        ...          ...           ... ...   ...   ...
+    274.870009 -13.817775 18h19m28.80s -13d49m03.99s ... 1.557    --
+    274.735323 -13.941575 18h18m56.48s -13d56m29.67s ...    --    --
+    274.866294 -13.841778 18h19m27.91s -13d50m30.40s ... 1.146    --
+
+Then we can create the coordinate object either with the decimal floating-point
+values::
+
+    >>> from astropy import units as u
+    >>> from astropy import coordinates as coords
+    >>> c = coords.FK5(t['ra'], t['dec'], unit=(u.deg, u.deg))
+    >>> c[0]
+    <FK5 RA=274.42951 deg, Dec=-13.87055 deg>
+    >>> c[1]
+    <FK5 RA=274.42382 deg, Dec=-13.86974 deg>
+
+or the string values::
+
+    >>> c = coords.FK5(t['sra'], t['sdec'], unit=(u.deg, u.deg))
+    >>> c[0]
+    <FK5 RA=274.42950 deg, Dec=-13.87055 deg>
+    >>> c[1]
+    <FK5 RA=274.42383 deg, Dec=-13.86974 deg>
+
+Note that in the second case, the initialization will be slower due to the
+parsing of the strings. These coordinates can then easily be converted to other frames::
+
+    >>> cgal = c.transform_to(coords.Galactic)
+    >>> cgal[0]
+    <Galactic l=16.77345 deg, b=0.99446 deg>
+    >>> cgal[1]
+    <Galactic l=16.77155 deg, b=0.99968 deg>
+
+For coordinate arrays, accessing attributes such as ``ra`` or ``dec`` will now
+return Numpy arrays.
+
+As shown above, all the coordinate classes have now been renamed to drop the
+``Coordinates`` suffix (e.g. ``ICRS`` instead of ``ICRSCoordinates``). In
+addition, `HorizontalCoordinates` has now been renamed to `AltAz`.
+
+Coordinate objects now support matching one set of coordinates to another
+using the array coordinates functionality described above.  See
+`~astropy.coordinates.coordsystems.SphericalCoordinatesBase.match_to_catalog_sky`
+and `~astropy.coordinates.coordsystems.SphericalCoordinatesBase.match_to_catalog_3d`
+for more details.
+
+Finally, coordinate objects now have a ``to_string`` method that allows easy
+conversion to string representations. For example, in the case of the previous
+coordinates used above::
+
+    >>> c.to_string()
+    [u'18h17m43.08s -13d52m13.97s',
+     u'18h17m41.72s -13d52m11.06s',
+     ...
+     u'18h18m56.48s -13d56m29.67s',
+     u'18h19m27.91s -13d50m30.4s']
+
+Table
+-----
+
+In addition to many bug fixes and usability improvements, the key new feature
+in the :ref:`astropy-table` sub-package is the addition of high level
+:ref:`table_operations` that can be used to generate a new table from one or
+more input tables:
+
+.. list-table::
+   :header-rows: 1
+   :widths: 28 52 20
+
+   * - Documentation
+     - Description
+     - Function
+   * - :ref:`grouped-operations`
+     - Group tables and columns by keys
+     - `~astropy.table.table.Table.group_by`
+   * - :ref:`stack-vertically`
+     - Concatenate input tables along rows
+     - `~astropy.table.operations.vstack`
+   * - :ref:`stack-horizontally`
+     - Concatenate input tables along columns
+     - `~astropy.table.operations.hstack`
+   * - :ref:`table-join`
+     - Database-style join of two tables
+     - `~astropy.table.operations.join`
+
+Grouping is a useful concept that allows you to divide a table
+into sub-groups based on certain key values and create new tables based
+on computed properties of those sub-groups.  As an example, if you
+have a table containing photometric observations of multiple sources
+over multiple epochs, it would be possible to compute a mean magnitude
+for each unique object.  In addition to this *aggregation* operation,
+the grouping interface also allows *filtering* operations where certain
+groups are excluded from the resultant table.
+
+Even more powerful is the ability to do database-style joins of tables.  For
+instance, if you have distinct tables with photometry in different wavebands
+for a set of objects, you join these points into a single table with one row
+for each source.
+
+Time
+----
+
+The :ref:`astropy-time` sub-package has received attention in filling in
+the details from the initial release in astropy 0.2.  This includes adding array
+indexing and supporting various arithmetic operations involving arrays,
+constants, and `~astropy.units.quantity.Quantity` objects with time units.  In addition the initial
+infrastructure was added to allow use of `International Earth Rotation and
+Reference Systems Service
+<http://www.iers.org/>`_ tables so that automatic
+calculation of UT1 becomes possible.
+
+One very significant improvement is an overhaul of the internal
+time manipulations so that arithmetic with `~astropy.time.core.Time` and
+`~astropy.time.core.TimeDelta` objects maintain sub-nanosecond precision over a time span
+longer than the age of the universe.  This is done by carefully managing
+the way the time is represented and manipulated using two 64-bit floats.
+
+Finally, three new time formats were added:
+
+  - ``datetime``: standard library `datetime.datetime` objects.
+  - ``plot_date``: dates compatible with the `matplotlib.pyplot.plot_date` function.
+  - ``gps``: seconds since 1980-01-01 00:00:00 UTC including leap seconds.
+
+ASCII Tables
+------------
+
+The :ref:`io-ascii` sub-package now includes functionality to write `IPAC format tables
+<http://irsa.ipac.caltech.edu/applications/DDGEN/Doc/ipac_tbl.html>`_.
+
+The `~astropy.io.ascii.ui.read()` and `~astropy.io.ascii.ui.write()` functions now
+allow a ``format`` keyword argument for specifying the file format as a string.
+This replaces the deprecated ``Reader`` and ``Writer`` keywords which required
+supplying a fully-qualified class type.  To convert existing code that uses
+``Reader`` or ``Writer``, change the class name to all lower case with
+underscores between words.  For instance::
+
+    >>> from astropy.io import ascii
+    >>> data = [' name         age ',
+                '-----------   ----',
+                'Jane Doe       31 ',
+                'John Smith     45 ']
+    >>> t = ascii.read(data, Reader=ascii.FixedWidthTwoLine)  # OLD
+    >>> t = ascii.read(data, format='fixed_width_two_line')  # NEW
+
+Unified File Read/Write Interface
+----------------------------------
+
+FITS format tables can now be read and written via the :ref:`table_io`. 
+All of the ASCII table formats are now supported as well.  When using
+the unified file interface for ASCII tables the ``format`` defined in the :ref:`io-ascii`
+package is prefixed with ``'ascii.'``.  Thus the previous example would be written::
+
+    >>> from astropy.table import Table
+    >>> t = Table.read(data, format='ascii.fixed_width_two_line')
+
+Some formats such as ``cds`` or ``latex`` will work without the ``'ascii.'``
+prefix but this is deprecated and will be removed in the next major release.
+
+The full list of available formats is now available via the
+`~astropy.io.registry.get_formats` function::
+
+    >>> from astropy.io import registry
+    >>> print registry.get_formats()
+    Data class    Format    Read Write Auto-identify Deprecated
+    ---------- ------------ ---- ----- ------------- ----------
+         Table        ascii  Yes   Yes            No
+         Table ascii.aastex  Yes   Yes            No
+         Table  ascii.basic  Yes   Yes            No
+         Table    ascii.cds  Yes    No            No
+           ...          ...  ...   ...           ...        ...
+         Table      daophot  Yes    No            No        Yes
+         Table         ipac  Yes   Yes            No        Yes
+         Table        latex  Yes   Yes            No        Yes
+         Table          rdb  Yes   Yes            No        Yes
+
+If you make a mistake and specify an unavailable or incorrect ``format``, the
+error message will now list all the available formats.
+
+Convolution
+-----------
+
+The convolution functionality that was originally included in the
+:ref:`astropy_nddata` sub-package has now been moved to the new
+:ref:`astropy_convolve` sub-package. As part of a Google Summer of Code
+`project <http://adonath.github.io/>`_ it has been refactored to include a
+framework that provides common built-in kernels:
+
+.. plot::
+   :include-source:
+
+    import numpy as np
+    from astropy.convolution import convolve, Gaussian2DKernel
+
+    # Generate data
+    np.random.seed(0)
+    image = np.random.random((128, 128))
+
+    # Create kernel
+    g = Gaussian2DKernel(width=1)
+
+    # Convolve data
+    image_new = convolve(image, g, boundary='extend')
+
+    # Plot the results
+    plt.figure(figsize=(8,3))
+    plt.subplot(1,2,1)
+    plt.imshow(image, interpolation='none', origin='lower', vmin=0., vmax=1.)
+    plt.title('Reference')
+    plt.subplot(1,2,2)
+    plt.imshow(image_new, interpolation='none', origin='lower', vmin=0., vmax=1.)
+    plt.title('Convolved')
+
+A number of different 1-D and 2-D kernels are provided, based on models defined
+in :ref:`astropy-modeling`. The discretization of the kernels can be handled in
+various ways (e.g. oversampling, interpolation, etc.) which are described in
+more detail in :ref:`astropy_convolve`.
+
+Cosmology
+---------
+
+The :ref:`astropy-cosmology` sub-package now includes support for including massive
+neutrinos in the cosmology classes, and the Planck 2013 cosmology has been
+updated to use this. In addition, :class:`~astropy.units.quantity.Quantity`
+objects are now used wherever appropriate::
+
+    >>> from astropy.cosmology import WMAP9
+    >>> WMAP9.H0
+    <Quantity 69.32 km / (Mpc s)>
+    >>> WMAP9.lookback_time(3)
+    <Quantity 11.590618401420071 Gyr>
+    >>> WMAP9.luminosity_distance(3)
+    <Quantity 26015.607762091513 Mpc>
+
+Statistics
+----------
+
+The :ref:`tools` sub-package includes a number of new common statistical
+functions, for example related to binomial statistics and bootstrapping.
+
+WCS
+---
+
+When reading FITS headers with the :ref:`astropy-wcs` sub-package, warnings
+will now be displayed about any non-standard WCS keywords that were fixed to
+become standard compliant.
+
+For users who have `Scipy <http://www.scipy.org>`_ installed, the
+:class:`~astropy.wcs.wcs.WCS` class features a new method
+:meth:`~astropy.wcs.wcs.WCS.all_world2pix` for converting from world
+coordinates to pixel space including the inversion of astrometric distortion
+corrections.
+
+The included version of `wcslib` has been upgraded to version 4.19. The
+relevant changes for astropy users are:
+
+  * Implemented the butterfly projection (``XPH``), being the polar
+    form of the HEALPix projection with ``(H,K) = (4,3)``.
+
+  * Bug fix in ``celfix()`` when translating GLS to SFL with non-zero
+    reference point.
+
+  * A number of memory handling and stability fixes.
+
+VO Tables
+---------
+
+The :ref:`astropy-io-votable` sub-package now includes support for the `VOTable 1.3
+proposed recommendation
+<http://www.ivoa.net/documents/VOTable/20130315/PR-VOTable-1.3-20130315.html>`_.
+Notably, this includes a new binary representation that supports masking of
+any data type.
+
+Logger
+------
+
+The Astropy logger will now no longer log exceptions by default, and will also
+no longer log any warning emitted outside of Astropy. In addition, logging to
+the Astropy log file (located at ``~/.astropy/config/astropy.log`` by default
+on MacOS X and Linux) has also been disabled by default. This functionality is
+automatically disabled for new users, but in order to see the new default
+behavior, previous users of Astropy will need to edit the Astropy configuration
+file (located at ``~/.astropy/config/astropy.cfg`` by default on MaxOS X and
+Linux) and change the following two lines as follows::
+
+    # Whether to log exceptions before raising them
+    log_exceptions = False
+
+    # Whether to always log messages to a log file
+    log_to_file = False
+
+Deprecation and backward-incompatible changes
+---------------------------------------------
+
+For a full-list of deprecated features and backward-incompatible changes,
+please take a look at the full :doc:`../changelog`.
+
+In Python 2.7 and above, deprecation warnings are disabled by default. If you
+want to make sure you see these warnings, you can run your Python scripts with:
+
+    $ python -Wd script.py
+
+In addition to deprecation warnings, Astropy will also raise warnings (by
+default) about changes that are not backward-compatible. These can be disabled
+by doing::
+
+    import warnings
+    from astropy.utils.exceptions import AstropyBackwardsIncompatibleChangeWarning
+    warnings.simplefilter('ignore', AstropyBackwardsIncompatibleChangeWarning)
diff --git a/docs/whatsnew/index.rst b/docs/whatsnew/index.rst
index 9f64916..0cc1638 100644
--- a/docs/whatsnew/index.rst
+++ b/docs/whatsnew/index.rst
@@ -5,5 +5,6 @@ Major Release History
 .. toctree::
    :maxdepth: 1
 
+   0.3
    0.2
    0.1
diff --git a/licenses/ERFA.rst b/licenses/ERFA.rst
new file mode 100644
index 0000000..ea44c48
--- /dev/null
+++ b/licenses/ERFA.rst
@@ -0,0 +1,53 @@
+Copyright (C) 2013, NumFOCUS Foundation.
+All rights reserved.
+
+This library is derived, with permission, from the International
+Astronomical Union's "Standards of Fundamental Astronomy" library,
+available from http://www.iausofa.org.
+
+The ERFA version is intended to retain identical
+functionality to the SOFA library, but made distinct through
+different function and file names, as set out in the SOFA license
+conditions. The SOFA original has a role as a reference standard
+for the IAU and IERS, and consequently redistribution is permitted only
+in its unaltered state. The ERFA version is not subject to this
+restriction and therefore can be included in distributions which do not
+support the concept of "read only" software.
+
+Although the intent is to replicate the SOFA API (other than replacement of
+prefix names) and results (with the exception of bugs; any that are
+discovered will be fixed), SOFA is not responsible for any errors found
+in this version of the library.
+
+If you wish to acknowledge the SOFA heritage, please acknowledge that
+you are using a library derived from SOFA, rather than SOFA itself.
+
+
+TERMS AND CONDITIONS
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1 Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2 Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+3 Neither the name of the Standards Of Fundamental Astronomy Board, the
+   International Astronomical Union nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/licenses/FUTURES_LICENSE.rst b/licenses/FUTURES_LICENSE.rst
new file mode 100644
index 0000000..c430db0
--- /dev/null
+++ b/licenses/FUTURES_LICENSE.rst
@@ -0,0 +1,21 @@
+Copyright 2009 Brian Quinlan. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY BRIAN QUINLAN "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+HALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/licenses/SIX_LICENSE.rst b/licenses/SIX_LICENSE.rst
new file mode 100644
index 0000000..b673027
--- /dev/null
+++ b/licenses/SIX_LICENSE.rst
@@ -0,0 +1,18 @@
+Copyright (c) 2010-2013 Benjamin Peterson
+
+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.
diff --git a/licenses/SOFA.rst b/licenses/SOFA.rst
deleted file mode 100644
index d5de76a..0000000
--- a/licenses/SOFA.rst
+++ /dev/null
@@ -1,97 +0,0 @@
-.. Complete SOFA Software License.  This is included in a verbatim block
-   to retain the exact formatting of the original as included in the
-   SOFA C software library code "sofa.c".
-
-::
-
-  Copyright (C) 2012
-  Standards Of Fundamental Astronomy Board
-  of the International Astronomical Union.
-
-  =====================
-  SOFA Software License
-  =====================
-
-  NOTICE TO USER:
-
-  BY USING THIS SOFTWARE YOU ACCEPT THE FOLLOWING SIX TERMS AND
-  CONDITIONS WHICH APPLY TO ITS USE.
-
-  1. The Software is owned by the IAU SOFA Board ("SOFA").
-
-  2. Permission is granted to anyone to use the SOFA software for any
-     purpose, including commercial applications, free of charge and
-     without payment of royalties, subject to the conditions and
-     restrictions listed below.
-
-  3. You (the user) may copy and distribute SOFA source code to others,
-     and use and adapt its code and algorithms in your own software,
-     on a world-wide, royalty-free basis.  That portion of your
-     distribution that does not consist of intact and unchanged copies
-     of SOFA source code files is a "derived work" that must comply
-     with the following requirements:
-
-     a) Your work shall be marked or carry a statement that it
-        (i) uses routines and computations derived by you from
-        software provided by SOFA under license to you; and
-        (ii) does not itself constitute software provided by and/or
-        endorsed by SOFA.
-
-     b) The source code of your derived work must contain descriptions
-        of how the derived work is based upon, contains and/or differs
-        from the original SOFA software.
-
-     c) The names of all routines in your derived work shall not
-        include the prefix "iau" or "sofa" or trivial modifications
-        thereof such as changes of case.
-
-     d) The origin of the SOFA components of your derived work must
-        not be misrepresented;  you must not claim that you wrote the
-        original software, nor file a patent application for SOFA
-        software or algorithms embedded in the SOFA software.
-
-     e) These requirements must be reproduced intact in any source
-        distribution and shall apply to anyone to whom you have
-        granted a further right to modify the source code of your
-        derived work.
-
-     Note that, as originally distributed, the SOFA software is
-     intended to be a definitive implementation of the IAU standards,
-     and consequently third-party modifications are discouraged.  All
-     variations, no matter how minor, must be explicitly marked as
-     such, as explained above.
-
-  4. You shall not cause the SOFA software to be brought into
-     disrepute, either by misuse, or use for inappropriate tasks, or
-     by inappropriate modification.
-
-  5. The SOFA software is provided "as is" and SOFA makes no warranty
-     as to its use or performance.   SOFA does not and cannot warrant
-     the performance or results which the user may obtain by using the
-     SOFA software.  SOFA makes no warranties, express or implied, as
-     to non-infringement of third party rights, merchantability, or
-     fitness for any particular purpose.  In no event will SOFA be
-     liable to the user for any consequential, incidental, or special
-     damages, including any lost profits or lost savings, even if a
-     SOFA representative has been advised of such damages, or for any
-     claim by any third party.
-
-  6. The provision of any version of the SOFA software under the terms
-     and conditions specified herein does not imply that future
-     versions will also be made available under the same terms and
-     conditions.
-
-  In any published work or commercial product which uses the SOFA
-  software directly, acknowledgement (see www.iausofa.org) is
-  appreciated.
-
-  Correspondence concerning SOFA software should be addressed as
-  follows:
-
-      By email:  sofa at ukho.gov.uk
-      By post:   IAU SOFA Center
-                 HM Nautical Almanac Office
-                 UK Hydrographic Office
-                 Admiralty Way, Taunton
-                 Somerset, TA1 2DN
-                 United Kingdom
diff --git a/scripts/wcslint b/scripts/wcslint
new file mode 100755
index 0000000..f1fa44e
--- /dev/null
+++ b/scripts/wcslint
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+import astropy.wcs.wcslint
+
+astropy.wcs.wcslint.main()
diff --git a/setup.cfg b/setup.cfg
index 0dacba7..3c6c18e 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -9,7 +9,9 @@ show-response = 1
 
 [pytest]
 minversion = 2.3.3
-norecursedirs = build docs/_build astropy/extern
+norecursedirs = "build" "docs[\/]_build" "astropy[\/]extern" "astropy[\/]utils[\/]compat"
+doctest_plus = enabled
+doctest_norecursedirs = "astropy[\/]sphinx"
 
 [bdist_dmg]
 background = .dmg_background.png
diff --git a/setup.py b/setup.py
index 8026eb5..1726293 100755
--- a/setup.py
+++ b/setup.py
@@ -6,7 +6,7 @@ import os
 import sys
 
 import setuptools_bootstrap
-from setuptools import setup, find_packages
+from setuptools import setup
 
 #A dirty hack to get around some early import/configurations ambiguities
 if sys.version_info[0] >= 3:
@@ -15,16 +15,18 @@ else:
     import __builtin__ as builtins
 builtins._ASTROPY_SETUP_ = True
 
+from distutils.dist import Distribution
+
 import astropy
 from astropy.setup_helpers import (register_commands, adjust_compiler,
-                                   filter_packages, update_package_files,
-                                   get_debug_option)
+                                   get_package_info, get_debug_option,
+                                   is_distutils_display_option)
 from astropy.version_helpers import get_git_devstr, generate_version_py
 
 NAME = 'astropy'
 
 # VERSION should be PEP386 compatible (http://www.python.org/dev/peps/pep-0386)
-VERSION = '0.2.5'
+VERSION = '0.3'
 
 # Indicates if this version is a release version
 RELEASE = 'dev' not in VERSION
@@ -46,28 +48,17 @@ adjust_compiler(NAME)
 # Freeze build information in version.py
 generate_version_py(NAME, VERSION, RELEASE, get_debug_option())
 
-# Use the find_packages tool to locate all packages and modules
-packagenames = filter_packages(find_packages())
-
 # Treat everything in scripts except README.rst as a script to be installed
 scripts = [fname for fname in glob.glob(os.path.join('scripts', '*'))
            if os.path.basename(fname) != 'README.rst']
 
-# Additional C extensions that are not Cython-based should be added here.
-extensions = []
-
-# A dictionary to keep track of all package data to install
-package_data = {'astropy': ['data/*']}
+# Get configuration information from all of the various subpackages.
+# See the docstring for setup_helpers.update_package_files for more
+# details.
+package_info = get_package_info(NAME)
 
-# A dictionary to keep track of extra packagedir mappings
-package_dirs = {}
-
-# Update extensions, package_data, packagenames and package_dirs from
-# any sub-packages that define their own extension modules and package
-# data.  See the docstring for setup_helpers.update_package_files for
-# more details.
-update_package_files(NAME, extensions, package_data, packagenames,
-                     package_dirs)
+# Add the project-global data
+package_info['package_data']['astropy'] = ['data/*']
 
 # Currently the only entry points installed by Astropy are hooks to
 # zest.releaser for doing Astropy's releases
@@ -80,16 +71,21 @@ for hook in [('prereleaser', 'middle'), ('releaser', 'middle'),
     entry_points[hook_ep] = ['%s = %s' % (hook_name, hook_func)]
 
 
+setup_requires = ['numpy>=' + astropy.__minimum_numpy_version__]
+install_requires = ['numpy>=' + astropy.__minimum_numpy_version__]
+# Avoid installing setup_requires dependencies if the user just
+# queries for information
+if is_distutils_display_option():
+    setup_requires = []
+
+
 setup(name=NAME,
       version=VERSION,
       description='Community-developed python astronomy tools',
-      packages=packagenames,
-      package_data=package_data,
-      package_dir=package_dirs,
-      ext_modules=extensions,
       scripts=scripts,
       requires=['numpy'],  # scipy not required, but strongly recommended
-      install_requires=['numpy'],
+      setup_requires=setup_requires,
+      install_requires=install_requires,
       provides=[NAME],
       author='The Astropy Developers',
       author_email='astropy.team at gmail.com',
@@ -113,5 +109,6 @@ setup(name=NAME,
       cmdclass=cmdclassd,
       zip_safe=False,
       use_2to3=True,
-      entry_points=entry_points
+      entry_points=entry_points,
+      **package_info
 )

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/python-astropy.git



More information about the debian-science-commits mailing list